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 RepoTitleBorder lipgloss.Border
28 RepoNoteBorder lipgloss.Border
29 RepoBodyBorder lipgloss.Border
30
31 Repo lipgloss.Style
32 RepoTitle lipgloss.Style
33 RepoTitleBox lipgloss.Style
34 RepoCommand lipgloss.Style
35 RepoNoteBox lipgloss.Style
36 RepoBody lipgloss.Style
37 RepoHeader lipgloss.Style
38 RepoHeaderName lipgloss.Style
39 RepoHeaderDesc lipgloss.Style
40
41 Footer lipgloss.Style
42 Branch lipgloss.Style
43 HelpKey lipgloss.Style
44 HelpValue lipgloss.Style
45 HelpDivider lipgloss.Style
46
47 Error lipgloss.Style
48 ErrorTitle lipgloss.Style
49 ErrorBody lipgloss.Style
50
51 AboutNoReadme lipgloss.Style
52
53 LogItem lipgloss.Style
54 LogItemSelector lipgloss.Style
55 LogItemActive lipgloss.Style
56 LogItemInactive lipgloss.Style
57 LogItemHash lipgloss.Style
58 LogItemTitle lipgloss.Style
59 LogCommit lipgloss.Style
60 LogCommitHash lipgloss.Style
61 LogCommitAuthor lipgloss.Style
62 LogCommitDate lipgloss.Style
63 LogCommitBody lipgloss.Style
64 LogCommitStatsAdd lipgloss.Style
65 LogCommitStatsDel lipgloss.Style
66 LogPaginator lipgloss.Style
67
68 RefItemSelector lipgloss.Style
69 RefItemActive lipgloss.Style
70 RefItemInactive lipgloss.Style
71 RefItemBranch lipgloss.Style
72 RefItemTag lipgloss.Style
73 RefPaginator lipgloss.Style
74
75 TreeItemSelector lipgloss.Style
76 TreeItemActive lipgloss.Style
77 TreeItemInactive lipgloss.Style
78 TreeFileDir lipgloss.Style
79 TreeFileMode lipgloss.Style
80 TreeFileSize lipgloss.Style
81 TreeFileContent lipgloss.Style
82 TreePaginator lipgloss.Style
83 TreeNoItems lipgloss.Style
84
85 Spinner lipgloss.Style
86
87 CodeNoContent lipgloss.Style
88
89 StatusBar lipgloss.Style
90 StatusBarKey lipgloss.Style
91 StatusBarValue lipgloss.Style
92 StatusBarInfo lipgloss.Style
93 StatusBarBranch lipgloss.Style
94
95 Tabs lipgloss.Style
96 TabInactive lipgloss.Style
97 TabActive lipgloss.Style
98 TabSeparator lipgloss.Style
99}
100
101// DefaultStyles returns default styles for the UI.
102func DefaultStyles() *Styles {
103 s := new(Styles)
104
105 s.ActiveBorderColor = lipgloss.Color("62")
106 s.InactiveBorderColor = lipgloss.Color("241")
107
108 s.App = lipgloss.NewStyle().
109 Margin(1, 2)
110
111 s.Header = lipgloss.NewStyle().
112 Foreground(lipgloss.Color("15")).
113 Align(lipgloss.Right).
114 Height(1).
115 Bold(true)
116
117 s.Menu = lipgloss.NewStyle().
118 BorderStyle(lipgloss.RoundedBorder()).
119 BorderForeground(s.InactiveBorderColor).
120 Padding(1, 2).
121 MarginRight(1).
122 Width(24)
123
124 s.MenuCursor = lipgloss.NewStyle().
125 Foreground(lipgloss.Color("213")).
126 SetString(">")
127
128 s.MenuItem = lipgloss.NewStyle().
129 PaddingLeft(1).
130 Border(lipgloss.Border{
131 Left: " ",
132 }, false, false, false, true).
133 Height(3)
134
135 s.MenuLastUpdate = lipgloss.NewStyle().
136 Foreground(lipgloss.Color("241")).
137 Align(lipgloss.Right)
138
139 s.SelectorBox = lipgloss.NewStyle().
140 Width(64)
141
142 s.ReadmeBox = lipgloss.NewStyle().
143 Margin(1, 1, 1, 0)
144
145 s.RepoTitleBorder = lipgloss.Border{
146 Top: "─",
147 Bottom: "─",
148 Left: "│",
149 Right: "│",
150 TopLeft: "╭",
151 TopRight: "┬",
152 BottomLeft: "├",
153 BottomRight: "┴",
154 }
155
156 s.RepoNoteBorder = lipgloss.Border{
157 Top: "─",
158 Bottom: "─",
159 Left: "│",
160 Right: "│",
161 TopLeft: "┬",
162 TopRight: "╮",
163 BottomLeft: "┴",
164 BottomRight: "┤",
165 }
166
167 s.RepoBodyBorder = lipgloss.Border{
168 Top: "",
169 Bottom: "─",
170 Left: "│",
171 Right: "│",
172 TopLeft: "",
173 TopRight: "",
174 BottomLeft: "╰",
175 BottomRight: "╯",
176 }
177
178 s.Repo = lipgloss.NewStyle()
179
180 s.RepoTitle = lipgloss.NewStyle().
181 Padding(0, 2)
182
183 s.RepoTitleBox = lipgloss.NewStyle().
184 BorderStyle(s.RepoTitleBorder).
185 BorderForeground(s.InactiveBorderColor)
186
187 s.RepoCommand = lipgloss.NewStyle().
188 Foreground(lipgloss.Color("168"))
189
190 s.RepoNoteBox = lipgloss.NewStyle().
191 BorderStyle(s.RepoNoteBorder).
192 BorderForeground(s.InactiveBorderColor).
193 BorderTop(true).
194 BorderRight(true).
195 BorderBottom(true).
196 BorderLeft(false)
197
198 s.RepoBody = lipgloss.NewStyle().
199 Margin(1, 0)
200
201 s.RepoHeader = lipgloss.NewStyle().
202 Height(2).
203 Border(lipgloss.NormalBorder(), false, false, true, false).
204 BorderForeground(lipgloss.Color("241"))
205
206 s.RepoHeaderName = lipgloss.NewStyle().
207 Foreground(lipgloss.Color("15")).
208 Bold(true)
209
210 s.RepoHeaderDesc = lipgloss.NewStyle().
211 Faint(true).
212 Foreground(lipgloss.Color("15"))
213
214 s.Footer = lipgloss.NewStyle().
215 Padding(0, 1).
216 Height(1)
217
218 s.Branch = lipgloss.NewStyle().
219 Foreground(lipgloss.Color("203")).
220 Background(lipgloss.Color("236")).
221 Padding(0, 1)
222
223 s.HelpKey = lipgloss.NewStyle().
224 Foreground(lipgloss.Color("241"))
225
226 s.HelpValue = lipgloss.NewStyle().
227 Foreground(lipgloss.Color("239"))
228
229 s.HelpDivider = lipgloss.NewStyle().
230 Foreground(lipgloss.Color("237")).
231 SetString(" • ")
232
233 s.Error = lipgloss.NewStyle().
234 MarginTop(2)
235
236 s.ErrorTitle = lipgloss.NewStyle().
237 Foreground(lipgloss.Color("230")).
238 Background(lipgloss.Color("204")).
239 Bold(true).
240 Padding(0, 1)
241
242 s.ErrorBody = lipgloss.NewStyle().
243 Foreground(lipgloss.Color("252")).
244 MarginLeft(2)
245
246 s.AboutNoReadme = lipgloss.NewStyle().
247 MarginTop(1).
248 MarginLeft(2).
249 Foreground(lipgloss.Color("#626262"))
250
251 s.LogItemInactive = lipgloss.NewStyle().
252 Border(lipgloss.Border{
253 Left: " ",
254 }, false, false, false, true).
255 PaddingLeft(1)
256
257 s.LogItemActive = s.LogItemInactive.Copy().
258 Border(lipgloss.Border{
259 Left: "┃",
260 }, false, false, false, true).
261 BorderForeground(lipgloss.Color("#B083EA"))
262
263 s.LogItemSelector = s.LogItemInactive.Copy().
264 Width(1).
265 Foreground(lipgloss.Color("#B083EA"))
266
267 s.LogItemHash = s.LogItemInactive.Copy().
268 Foreground(lipgloss.Color("#A3A322"))
269
270 s.LogItemTitle = lipgloss.NewStyle().
271 Foreground(lipgloss.Color("#B083EA"))
272
273 s.LogCommit = lipgloss.NewStyle().
274 Margin(0, 2)
275
276 s.LogCommitHash = lipgloss.NewStyle().
277 Foreground(lipgloss.Color("#A3A322")).
278 Bold(true)
279
280 s.LogCommitBody = lipgloss.NewStyle().
281 MarginTop(1).
282 MarginLeft(2)
283
284 s.LogCommitStatsAdd = lipgloss.NewStyle().
285 Foreground(lipgloss.Color("#00D787")).
286 Bold(true)
287
288 s.LogCommitStatsDel = lipgloss.NewStyle().
289 Foreground(lipgloss.Color("#FD5B5B")).
290 Bold(true)
291
292 s.LogPaginator = lipgloss.NewStyle().
293 Margin(0).
294 Align(lipgloss.Center)
295
296 s.RefItemInactive = lipgloss.NewStyle().
297 MarginLeft(1)
298
299 s.RefItemSelector = lipgloss.NewStyle().
300 Width(1).
301 Foreground(lipgloss.Color("#B083EA"))
302
303 s.RefItemActive = s.RefItemInactive.Copy().
304 Bold(true)
305
306 s.RefItemBranch = lipgloss.NewStyle()
307
308 s.RefItemTag = lipgloss.NewStyle().
309 Foreground(lipgloss.Color("#A3A322"))
310
311 s.RefPaginator = s.LogPaginator.Copy()
312
313 s.TreeItemSelector = s.TreeItemInactive.Copy().
314 Width(1).
315 Foreground(lipgloss.Color("#B083EA"))
316
317 s.TreeItemInactive = lipgloss.NewStyle().
318 MarginLeft(1)
319
320 s.TreeItemActive = s.TreeItemInactive.Copy().
321 Bold(true)
322
323 s.TreeFileDir = lipgloss.NewStyle().
324 Foreground(lipgloss.Color("#00AAFF"))
325
326 s.TreeFileMode = s.TreeItemInactive.Copy().
327 Width(10).
328 Foreground(lipgloss.Color("#777777"))
329
330 s.TreeFileSize = s.TreeItemInactive.Copy().
331 Foreground(lipgloss.Color("252"))
332
333 s.TreeFileContent = lipgloss.NewStyle()
334
335 s.TreePaginator = s.LogPaginator.Copy()
336
337 s.TreeNoItems = s.AboutNoReadme.Copy()
338
339 s.Spinner = lipgloss.NewStyle().
340 MarginTop(1).
341 MarginLeft(2).
342 Foreground(lipgloss.Color("205"))
343
344 s.CodeNoContent = lipgloss.NewStyle().
345 SetString("No Content.").
346 MarginTop(1).
347 MarginLeft(2).
348 Foreground(lipgloss.Color("#626262"))
349
350 s.StatusBar = lipgloss.NewStyle().
351 Height(1)
352
353 s.StatusBarKey = lipgloss.NewStyle().
354 Bold(true).
355 Padding(0, 1).
356 Background(lipgloss.Color("#FF5FD2")).
357 Foreground(lipgloss.Color("#FFFF87"))
358
359 s.StatusBarValue = lipgloss.NewStyle().
360 Padding(0, 1).
361 Background(lipgloss.Color("#373737")).
362 Foreground(lipgloss.Color("#F1F1F1"))
363
364 s.StatusBarInfo = lipgloss.NewStyle().
365 Padding(0, 1).
366 Background(lipgloss.Color("#FF8EC7")).
367 Foreground(lipgloss.Color("#F1F1F1"))
368
369 s.StatusBarBranch = lipgloss.NewStyle().
370 Padding(0, 1).
371 Background(lipgloss.Color("#6E6ED8")).
372 Foreground(lipgloss.Color("#F1F1F1"))
373
374 s.Tabs = lipgloss.NewStyle()
375
376 s.TabInactive = lipgloss.NewStyle().
377 Foreground(lipgloss.Color("15"))
378
379 s.TabActive = lipgloss.NewStyle().
380 Foreground(lipgloss.Color("#6E6ED8")).
381 Underline(true)
382
383 s.TabSeparator = lipgloss.NewStyle().
384 SetString("│").
385 Padding(0, 1).
386 Foreground(lipgloss.Color("241"))
387
388 return s
389}