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 Foreground(lipgloss.Color("212")).
185 Bold(true)
186
187 s.Repo.HeaderDesc = lipgloss.NewStyle().
188 Foreground(lipgloss.Color("244"))
189
190 s.Footer = lipgloss.NewStyle().
191 MarginTop(1).
192 Padding(0, 1).
193 Height(1)
194
195 s.Branch = lipgloss.NewStyle().
196 Foreground(lipgloss.Color("203")).
197 Background(lipgloss.Color("236")).
198 Padding(0, 1)
199
200 s.HelpKey = lipgloss.NewStyle().
201 Foreground(lipgloss.Color("241"))
202
203 s.HelpValue = lipgloss.NewStyle().
204 Foreground(lipgloss.Color("239"))
205
206 s.HelpDivider = lipgloss.NewStyle().
207 Foreground(lipgloss.Color("237")).
208 SetString(" • ")
209
210 s.Error = lipgloss.NewStyle().
211 MarginTop(2)
212
213 s.ErrorTitle = lipgloss.NewStyle().
214 Foreground(lipgloss.Color("230")).
215 Background(lipgloss.Color("204")).
216 Bold(true).
217 Padding(0, 1)
218
219 s.ErrorBody = lipgloss.NewStyle().
220 Foreground(lipgloss.Color("252")).
221 MarginLeft(2)
222
223 s.AboutNoReadme = lipgloss.NewStyle().
224 MarginTop(1).
225 MarginLeft(2).
226 Foreground(lipgloss.Color("242"))
227
228 s.LogItem.Normal.Base = lipgloss.NewStyle().
229 Border(lipgloss.Border{
230 Left: " ",
231 }, false, false, false, true).
232 PaddingLeft(1)
233
234 s.LogItem.Active.Base = s.LogItem.Normal.Base.Copy().
235 Border(lipgloss.Border{
236 Left: "┃",
237 }, false, false, false, true).
238 BorderForeground(selectorColor)
239
240 s.LogItem.Active.Hash = s.LogItem.Normal.Hash.Copy().
241 Foreground(hashColor)
242
243 s.LogItem.Active.Hash = lipgloss.NewStyle().
244 Bold(true).
245 Foreground(highlightColor)
246
247 s.LogItem.Normal.Title = lipgloss.NewStyle().
248 Foreground(lipgloss.Color("105"))
249
250 s.LogItem.Active.Title = lipgloss.NewStyle().
251 Foreground(highlightColor).
252 Bold(true)
253
254 s.LogItem.Normal.Desc = lipgloss.NewStyle().
255 Foreground(lipgloss.Color("246"))
256
257 s.LogItem.Active.Desc = lipgloss.NewStyle().
258 Foreground(lipgloss.Color("95"))
259
260 s.LogItem.Active.Keyword = s.LogItem.Active.Desc.Copy().
261 Foreground(highlightColorDim)
262
263 s.LogItem.Normal.Hash = lipgloss.NewStyle().
264 Foreground(hashColor)
265
266 s.LogItem.Active.Hash = lipgloss.NewStyle().
267 Foreground(highlightColor)
268
269 s.Log.Commit = lipgloss.NewStyle().
270 Margin(0, 2)
271
272 s.Log.CommitHash = lipgloss.NewStyle().
273 Foreground(hashColor).
274 Bold(true)
275
276 s.Log.CommitBody = lipgloss.NewStyle().
277 MarginTop(1).
278 MarginLeft(2)
279
280 s.Log.CommitStatsAdd = lipgloss.NewStyle().
281 Foreground(lipgloss.Color("42")).
282 Bold(true)
283
284 s.Log.CommitStatsDel = lipgloss.NewStyle().
285 Foreground(lipgloss.Color("203")).
286 Bold(true)
287
288 s.Log.Paginator = lipgloss.NewStyle().
289 Margin(0).
290 Align(lipgloss.Center)
291
292 s.Ref.Normal.Item = lipgloss.NewStyle()
293
294 s.Ref.ItemSelector = lipgloss.NewStyle().
295 Foreground(selectorColor).
296 SetString("> ")
297
298 s.Ref.Active.Item = lipgloss.NewStyle().
299 Foreground(highlightColorDim)
300
301 s.Ref.ItemBranch = lipgloss.NewStyle()
302
303 s.Ref.Normal.ItemTag = lipgloss.NewStyle().
304 Foreground(lipgloss.Color("185"))
305
306 s.Ref.Active.ItemTag = lipgloss.NewStyle().
307 Bold(true).
308 Foreground(highlightColor)
309
310 s.Ref.Active.Item = lipgloss.NewStyle().
311 Bold(true).
312 Foreground(highlightColor)
313
314 s.Ref.Paginator = s.Log.Paginator.Copy()
315
316 s.Tree.Selector = s.Tree.Normal.FileName.Copy().
317 Width(1).
318 Foreground(selectorColor)
319
320 s.Tree.Normal.FileName = lipgloss.NewStyle().
321 MarginLeft(1)
322
323 s.Tree.Active.FileName = s.Tree.Normal.FileName.Copy().
324 Bold(true).
325 Foreground(highlightColor)
326
327 s.Tree.Normal.FileDir = lipgloss.NewStyle().
328 Foreground(lipgloss.Color("39"))
329
330 s.Tree.Active.FileDir = lipgloss.NewStyle().
331 Foreground(highlightColor)
332
333 s.Tree.Normal.FileMode = s.Tree.Active.FileName.Copy().
334 Width(10).
335 Foreground(lipgloss.Color("243"))
336
337 s.Tree.Active.FileMode = s.Tree.Normal.FileMode.Copy().
338 Foreground(highlightColorDim)
339
340 s.Tree.Normal.FileSize = s.Tree.Normal.FileName.Copy().
341 Foreground(lipgloss.Color("243"))
342
343 s.Tree.Active.FileSize = s.Tree.Normal.FileName.Copy().
344 Foreground(highlightColorDim)
345
346 s.Tree.FileContent = lipgloss.NewStyle()
347
348 s.Tree.Paginator = s.Log.Paginator.Copy()
349
350 s.Tree.NoItems = s.AboutNoReadme.Copy()
351
352 s.Spinner = lipgloss.NewStyle().
353 MarginTop(1).
354 MarginLeft(2).
355 Foreground(lipgloss.Color("205"))
356
357 s.CodeNoContent = lipgloss.NewStyle().
358 SetString("No Content.").
359 MarginTop(1).
360 MarginLeft(2).
361 Foreground(lipgloss.Color("242"))
362
363 s.StatusBar = lipgloss.NewStyle().
364 Height(1)
365
366 s.StatusBarKey = lipgloss.NewStyle().
367 Bold(true).
368 Padding(0, 1).
369 Background(lipgloss.Color("206")).
370 Foreground(lipgloss.Color("228"))
371
372 s.StatusBarValue = lipgloss.NewStyle().
373 Padding(0, 1).
374 Background(lipgloss.Color("235")).
375 Foreground(lipgloss.Color("243"))
376
377 s.StatusBarInfo = lipgloss.NewStyle().
378 Padding(0, 1).
379 Background(lipgloss.Color("212")).
380 Foreground(lipgloss.Color("230"))
381
382 s.StatusBarBranch = lipgloss.NewStyle().
383 Padding(0, 1).
384 Background(lipgloss.Color("62")).
385 Foreground(lipgloss.Color("230"))
386
387 s.StatusBarHelp = lipgloss.NewStyle().
388 Padding(0, 1).
389 Background(lipgloss.Color("237")).
390 Foreground(lipgloss.Color("243"))
391
392 s.Tabs = lipgloss.NewStyle()
393
394 s.TabInactive = lipgloss.NewStyle()
395
396 s.TabActive = lipgloss.NewStyle().
397 Bold(true).
398 Foreground(lipgloss.Color("63"))
399
400 s.TabSeparator = lipgloss.NewStyle().
401 SetString("│").
402 Padding(0, 1).
403 Foreground(lipgloss.Color("238"))
404
405 return s
406}