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 Repo struct {
24 Base lipgloss.Style
25 Title lipgloss.Style
26 Command lipgloss.Style
27 Body lipgloss.Style
28 Header lipgloss.Style
29 HeaderName lipgloss.Style
30 HeaderDesc lipgloss.Style
31 }
32
33 Footer lipgloss.Style
34 Branch lipgloss.Style
35 HelpKey lipgloss.Style
36 HelpValue lipgloss.Style
37 HelpDivider lipgloss.Style
38
39 Error lipgloss.Style
40 ErrorTitle lipgloss.Style
41 ErrorBody lipgloss.Style
42
43 AboutNoReadme lipgloss.Style
44
45 LogItem struct {
46 Normal struct {
47 Base lipgloss.Style
48 Hash lipgloss.Style
49 Title lipgloss.Style
50 Desc lipgloss.Style
51 Keyword lipgloss.Style
52 }
53 Active struct {
54 Base lipgloss.Style
55 Hash lipgloss.Style
56 Title lipgloss.Style
57 Desc lipgloss.Style
58 Keyword lipgloss.Style
59 }
60 }
61
62 Log struct {
63 Commit lipgloss.Style
64 CommitHash lipgloss.Style
65 CommitAuthor lipgloss.Style
66 CommitDate lipgloss.Style
67 CommitBody lipgloss.Style
68 CommitStatsAdd lipgloss.Style
69 CommitStatsDel lipgloss.Style
70 Paginator lipgloss.Style
71 }
72
73 Ref struct {
74 Normal struct {
75 Item lipgloss.Style
76 ItemTag lipgloss.Style
77 }
78 Active struct {
79 Item lipgloss.Style
80 ItemTag lipgloss.Style
81 }
82 ItemSelector lipgloss.Style
83 ItemBranch 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.Repo.Base = lipgloss.NewStyle()
168
169 s.Repo.Title = lipgloss.NewStyle().
170 Padding(0, 2)
171
172 s.Repo.Command = lipgloss.NewStyle().
173 Foreground(lipgloss.Color("168"))
174
175 s.Repo.Body = lipgloss.NewStyle().
176 Margin(1, 0)
177
178 s.Repo.Header = lipgloss.NewStyle().
179 Height(2).
180 Border(lipgloss.NormalBorder(), false, false, true, false).
181 BorderForeground(lipgloss.Color("238"))
182
183 s.Repo.HeaderName = lipgloss.NewStyle().
184 Bold(true)
185
186 s.Repo.HeaderDesc = lipgloss.NewStyle().
187 Faint(true)
188
189 s.Footer = lipgloss.NewStyle().
190 MarginTop(1).
191 Padding(0, 1).
192 Height(1)
193
194 s.Branch = lipgloss.NewStyle().
195 Foreground(lipgloss.Color("203")).
196 Background(lipgloss.Color("236")).
197 Padding(0, 1)
198
199 s.HelpKey = lipgloss.NewStyle().
200 Foreground(lipgloss.Color("241"))
201
202 s.HelpValue = lipgloss.NewStyle().
203 Foreground(lipgloss.Color("239"))
204
205 s.HelpDivider = lipgloss.NewStyle().
206 Foreground(lipgloss.Color("237")).
207 SetString(" • ")
208
209 s.Error = lipgloss.NewStyle().
210 MarginTop(2)
211
212 s.ErrorTitle = lipgloss.NewStyle().
213 Foreground(lipgloss.Color("230")).
214 Background(lipgloss.Color("204")).
215 Bold(true).
216 Padding(0, 1)
217
218 s.ErrorBody = lipgloss.NewStyle().
219 Foreground(lipgloss.Color("252")).
220 MarginLeft(2)
221
222 s.AboutNoReadme = lipgloss.NewStyle().
223 MarginTop(1).
224 MarginLeft(2).
225 Foreground(lipgloss.Color("242"))
226
227 s.LogItem.Normal.Base = lipgloss.NewStyle().
228 Border(lipgloss.Border{
229 Left: " ",
230 }, false, false, false, true).
231 PaddingLeft(1)
232
233 s.LogItem.Active.Base = s.LogItem.Normal.Base.Copy().
234 Border(lipgloss.Border{
235 Left: "┃",
236 }, false, false, false, true).
237 BorderForeground(selectorColor)
238
239 s.LogItem.Active.Hash = s.LogItem.Normal.Hash.Copy().
240 Foreground(hashColor)
241
242 s.LogItem.Active.Hash = lipgloss.NewStyle().
243 Bold(true).
244 Foreground(highlightColor)
245
246 s.LogItem.Normal.Title = lipgloss.NewStyle().
247 Foreground(lipgloss.Color("105"))
248
249 s.LogItem.Active.Title = lipgloss.NewStyle().
250 Foreground(highlightColor).
251 Bold(true)
252
253 s.LogItem.Normal.Desc = lipgloss.NewStyle().
254 Foreground(lipgloss.Color("246"))
255
256 s.LogItem.Active.Desc = lipgloss.NewStyle().
257 Foreground(lipgloss.Color("95"))
258
259 s.LogItem.Active.Keyword = s.LogItem.Active.Desc.Copy().
260 Foreground(highlightColorDim)
261
262 s.LogItem.Normal.Hash = lipgloss.NewStyle().
263 Foreground(hashColor)
264
265 s.LogItem.Active.Hash = lipgloss.NewStyle().
266 Foreground(highlightColor)
267
268 s.Log.Commit = lipgloss.NewStyle().
269 Margin(0, 2)
270
271 s.Log.CommitHash = lipgloss.NewStyle().
272 Foreground(hashColor).
273 Bold(true)
274
275 s.Log.CommitBody = lipgloss.NewStyle().
276 MarginTop(1).
277 MarginLeft(2)
278
279 s.Log.CommitStatsAdd = lipgloss.NewStyle().
280 Foreground(lipgloss.Color("42")).
281 Bold(true)
282
283 s.Log.CommitStatsDel = lipgloss.NewStyle().
284 Foreground(lipgloss.Color("203")).
285 Bold(true)
286
287 s.Log.Paginator = lipgloss.NewStyle().
288 Margin(0).
289 Align(lipgloss.Center)
290
291 s.Ref.Normal.Item = lipgloss.NewStyle()
292
293 s.Ref.ItemSelector = lipgloss.NewStyle().
294 Foreground(selectorColor).
295 SetString("> ")
296
297 s.Ref.Active.Item = lipgloss.NewStyle().
298 Foreground(highlightColorDim)
299
300 s.Ref.ItemBranch = lipgloss.NewStyle()
301
302 s.Ref.Normal.ItemTag = lipgloss.NewStyle().
303 Foreground(lipgloss.Color("185"))
304
305 s.Ref.Active.ItemTag = lipgloss.NewStyle().
306 Bold(true).
307 Foreground(highlightColor)
308
309 s.Ref.Active.Item = lipgloss.NewStyle().
310 Bold(true).
311 Foreground(highlightColor)
312
313 s.Ref.Paginator = s.Log.Paginator.Copy()
314
315 s.Tree.Selector = s.Tree.Normal.FileName.Copy().
316 Width(1).
317 Foreground(selectorColor)
318
319 s.Tree.Normal.FileName = lipgloss.NewStyle().
320 MarginLeft(1)
321
322 s.Tree.Active.FileName = s.Tree.Normal.FileName.Copy().
323 Bold(true).
324 Foreground(highlightColor)
325
326 s.Tree.Normal.FileDir = lipgloss.NewStyle().
327 Foreground(lipgloss.Color("39"))
328
329 s.Tree.Active.FileDir = lipgloss.NewStyle().
330 Foreground(highlightColor)
331
332 s.Tree.Normal.FileMode = s.Tree.Active.FileName.Copy().
333 Width(10).
334 Foreground(lipgloss.Color("243"))
335
336 s.Tree.Active.FileMode = s.Tree.Normal.FileMode.Copy().
337 Foreground(highlightColorDim)
338
339 s.Tree.Normal.FileSize = s.Tree.Normal.FileName.Copy().
340 Foreground(lipgloss.Color("243"))
341
342 s.Tree.Active.FileSize = s.Tree.Normal.FileName.Copy().
343 Foreground(highlightColorDim)
344
345 s.Tree.FileContent = lipgloss.NewStyle()
346
347 s.Tree.Paginator = s.Log.Paginator.Copy()
348
349 s.Tree.NoItems = s.AboutNoReadme.Copy()
350
351 s.Spinner = lipgloss.NewStyle().
352 MarginTop(1).
353 MarginLeft(2).
354 Foreground(lipgloss.Color("205"))
355
356 s.CodeNoContent = lipgloss.NewStyle().
357 SetString("No Content.").
358 MarginTop(1).
359 MarginLeft(2).
360 Foreground(lipgloss.Color("242"))
361
362 s.StatusBar = lipgloss.NewStyle().
363 Height(1)
364
365 s.StatusBarKey = lipgloss.NewStyle().
366 Bold(true).
367 Padding(0, 1).
368 Background(lipgloss.Color("206")).
369 Foreground(lipgloss.Color("228"))
370
371 s.StatusBarValue = lipgloss.NewStyle().
372 Padding(0, 1).
373 Background(lipgloss.Color("235")).
374 Foreground(lipgloss.Color("243"))
375
376 s.StatusBarInfo = lipgloss.NewStyle().
377 Padding(0, 1).
378 Background(lipgloss.Color("212")).
379 Foreground(lipgloss.Color("230"))
380
381 s.StatusBarBranch = lipgloss.NewStyle().
382 Padding(0, 1).
383 Background(lipgloss.Color("62")).
384 Foreground(lipgloss.Color("230"))
385
386 s.StatusBarHelp = lipgloss.NewStyle().
387 Padding(0, 1).
388 Background(lipgloss.Color("237")).
389 Foreground(lipgloss.Color("243"))
390
391 s.Tabs = lipgloss.NewStyle()
392
393 s.TabInactive = lipgloss.NewStyle()
394
395 s.TabActive = lipgloss.NewStyle().
396 Bold(true).
397 Foreground(lipgloss.Color("63"))
398
399 s.TabSeparator = lipgloss.NewStyle().
400 SetString("│").
401 Padding(0, 1).
402 Foreground(lipgloss.Color("238"))
403
404 return s
405}