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