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