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