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