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
141 s.ReadmeBox = lipgloss.NewStyle()
142
143 s.RepoTitleBorder = lipgloss.Border{
144 Top: "─",
145 Bottom: "─",
146 Left: "│",
147 Right: "│",
148 TopLeft: "╭",
149 TopRight: "┬",
150 BottomLeft: "├",
151 BottomRight: "┴",
152 }
153
154 s.RepoNoteBorder = lipgloss.Border{
155 Top: "─",
156 Bottom: "─",
157 Left: "│",
158 Right: "│",
159 TopLeft: "┬",
160 TopRight: "╮",
161 BottomLeft: "┴",
162 BottomRight: "┤",
163 }
164
165 s.RepoBodyBorder = lipgloss.Border{
166 Top: "",
167 Bottom: "─",
168 Left: "│",
169 Right: "│",
170 TopLeft: "",
171 TopRight: "",
172 BottomLeft: "╰",
173 BottomRight: "╯",
174 }
175
176 s.Repo = lipgloss.NewStyle()
177
178 s.RepoTitle = lipgloss.NewStyle().
179 Padding(0, 2)
180
181 s.RepoTitleBox = lipgloss.NewStyle().
182 BorderStyle(s.RepoTitleBorder).
183 BorderForeground(s.InactiveBorderColor)
184
185 s.RepoCommand = lipgloss.NewStyle().
186 Foreground(lipgloss.Color("168"))
187
188 s.RepoNoteBox = lipgloss.NewStyle().
189 BorderStyle(s.RepoNoteBorder).
190 BorderForeground(s.InactiveBorderColor).
191 BorderTop(true).
192 BorderRight(true).
193 BorderBottom(true).
194 BorderLeft(false)
195
196 s.RepoBody = lipgloss.NewStyle().
197 Margin(1, 0)
198
199 s.RepoHeader = lipgloss.NewStyle().
200 Height(2).
201 Border(lipgloss.NormalBorder(), false, false, true, false).
202 BorderForeground(lipgloss.Color("241"))
203
204 s.RepoHeaderName = lipgloss.NewStyle().
205 Foreground(lipgloss.Color("15")).
206 Bold(true)
207
208 s.RepoHeaderDesc = lipgloss.NewStyle().
209 Faint(true).
210 Foreground(lipgloss.Color("15"))
211
212 s.Footer = lipgloss.NewStyle().
213 Padding(0, 1).
214 Height(1)
215
216 s.Branch = lipgloss.NewStyle().
217 Foreground(lipgloss.Color("203")).
218 Background(lipgloss.Color("236")).
219 Padding(0, 1)
220
221 s.HelpKey = lipgloss.NewStyle().
222 Foreground(lipgloss.Color("241"))
223
224 s.HelpValue = lipgloss.NewStyle().
225 Foreground(lipgloss.Color("239"))
226
227 s.HelpDivider = lipgloss.NewStyle().
228 Foreground(lipgloss.Color("237")).
229 SetString(" • ")
230
231 s.Error = lipgloss.NewStyle().
232 MarginTop(2)
233
234 s.ErrorTitle = lipgloss.NewStyle().
235 Foreground(lipgloss.Color("230")).
236 Background(lipgloss.Color("204")).
237 Bold(true).
238 Padding(0, 1)
239
240 s.ErrorBody = lipgloss.NewStyle().
241 Foreground(lipgloss.Color("252")).
242 MarginLeft(2)
243
244 s.AboutNoReadme = lipgloss.NewStyle().
245 MarginTop(1).
246 MarginLeft(2).
247 Foreground(lipgloss.Color("#626262"))
248
249 s.LogItemInactive = lipgloss.NewStyle().
250 Border(lipgloss.Border{
251 Left: " ",
252 }, false, false, false, true).
253 PaddingLeft(1)
254
255 s.LogItemActive = s.LogItemInactive.Copy().
256 Border(lipgloss.Border{
257 Left: "┃",
258 }, false, false, false, true).
259 BorderForeground(lipgloss.Color("#B083EA"))
260
261 s.LogItemSelector = s.LogItemInactive.Copy().
262 Width(1).
263 Foreground(lipgloss.Color("#B083EA"))
264
265 s.LogItemHash = s.LogItemInactive.Copy().
266 Foreground(lipgloss.Color("#A3A322"))
267
268 s.LogItemTitle = lipgloss.NewStyle().
269 Foreground(lipgloss.Color("#B083EA"))
270
271 s.LogCommit = lipgloss.NewStyle().
272 Margin(0, 2)
273
274 s.LogCommitHash = lipgloss.NewStyle().
275 Foreground(lipgloss.Color("#A3A322")).
276 Bold(true)
277
278 s.LogCommitBody = lipgloss.NewStyle().
279 MarginTop(1).
280 MarginLeft(2)
281
282 s.LogCommitStatsAdd = lipgloss.NewStyle().
283 Foreground(lipgloss.Color("#00D787")).
284 Bold(true)
285
286 s.LogCommitStatsDel = lipgloss.NewStyle().
287 Foreground(lipgloss.Color("#FD5B5B")).
288 Bold(true)
289
290 s.LogPaginator = lipgloss.NewStyle().
291 Margin(0).
292 Align(lipgloss.Center)
293
294 s.RefItemInactive = lipgloss.NewStyle().
295 MarginLeft(1)
296
297 s.RefItemSelector = lipgloss.NewStyle().
298 Width(1).
299 Foreground(lipgloss.Color("#B083EA"))
300
301 s.RefItemActive = s.RefItemInactive.Copy().
302 Bold(true)
303
304 s.RefItemBranch = lipgloss.NewStyle()
305
306 s.RefItemTag = lipgloss.NewStyle().
307 Foreground(lipgloss.Color("#A3A322"))
308
309 s.RefPaginator = s.LogPaginator.Copy()
310
311 s.TreeItemSelector = s.TreeItemInactive.Copy().
312 Width(1).
313 Foreground(lipgloss.Color("#B083EA"))
314
315 s.TreeItemInactive = lipgloss.NewStyle().
316 MarginLeft(1)
317
318 s.TreeItemActive = s.TreeItemInactive.Copy().
319 Bold(true)
320
321 s.TreeFileDir = lipgloss.NewStyle().
322 Foreground(lipgloss.Color("#00AAFF"))
323
324 s.TreeFileMode = s.TreeItemInactive.Copy().
325 Width(10).
326 Foreground(lipgloss.Color("#777777"))
327
328 s.TreeFileSize = s.TreeItemInactive.Copy().
329 Foreground(lipgloss.Color("252"))
330
331 s.TreeFileContent = lipgloss.NewStyle()
332
333 s.TreePaginator = s.LogPaginator.Copy()
334
335 s.TreeNoItems = s.AboutNoReadme.Copy()
336
337 s.Spinner = lipgloss.NewStyle().
338 MarginTop(1).
339 MarginLeft(2).
340 Foreground(lipgloss.Color("205"))
341
342 s.CodeNoContent = lipgloss.NewStyle().
343 SetString("No Content.").
344 MarginTop(1).
345 MarginLeft(2).
346 Foreground(lipgloss.Color("#626262"))
347
348 s.StatusBar = lipgloss.NewStyle().
349 Height(1)
350
351 s.StatusBarKey = lipgloss.NewStyle().
352 Bold(true).
353 Padding(0, 1).
354 Background(lipgloss.Color("#FF5FD2")).
355 Foreground(lipgloss.Color("#FFFF87"))
356
357 s.StatusBarValue = lipgloss.NewStyle().
358 Padding(0, 1).
359 Background(lipgloss.Color("#373737")).
360 Foreground(lipgloss.Color("#F1F1F1"))
361
362 s.StatusBarInfo = lipgloss.NewStyle().
363 Padding(0, 1).
364 Background(lipgloss.Color("#FF8EC7")).
365 Foreground(lipgloss.Color("#F1F1F1"))
366
367 s.StatusBarBranch = lipgloss.NewStyle().
368 Padding(0, 1).
369 Background(lipgloss.Color("#6E6ED8")).
370 Foreground(lipgloss.Color("#F1F1F1"))
371
372 s.Tabs = lipgloss.NewStyle()
373
374 s.TabInactive = lipgloss.NewStyle().
375 Foreground(lipgloss.Color("15"))
376
377 s.TabActive = lipgloss.NewStyle().
378 Foreground(lipgloss.Color("#6E6ED8")).
379 Underline(true)
380
381 s.TabSeparator = lipgloss.NewStyle().
382 SetString("│").
383 Padding(0, 1).
384 Foreground(lipgloss.Color("241"))
385
386 return s
387}