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