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 StatusBarHelp lipgloss.Style
95
96 Tabs lipgloss.Style
97 TabInactive lipgloss.Style
98 TabActive lipgloss.Style
99 TabSeparator lipgloss.Style
100}
101
102// DefaultStyles returns default styles for the UI.
103func DefaultStyles() *Styles {
104 s := new(Styles)
105
106 s.ActiveBorderColor = lipgloss.Color("62")
107 s.InactiveBorderColor = lipgloss.Color("241")
108
109 s.App = lipgloss.NewStyle().
110 Margin(1, 2)
111
112 s.Header = lipgloss.NewStyle().
113 Foreground(lipgloss.Color("15")).
114 Align(lipgloss.Left).
115 Height(1).
116 MarginBottom(1).
117 Bold(true)
118
119 s.Menu = lipgloss.NewStyle().
120 BorderStyle(lipgloss.RoundedBorder()).
121 BorderForeground(s.InactiveBorderColor).
122 Padding(1, 2).
123 MarginRight(1).
124 Width(24)
125
126 s.MenuCursor = lipgloss.NewStyle().
127 Foreground(lipgloss.Color("213")).
128 SetString(">")
129
130 s.MenuItem = lipgloss.NewStyle().
131 PaddingLeft(1).
132 Border(lipgloss.Border{
133 Left: " ",
134 }, false, false, false, true).
135 Height(3)
136
137 s.MenuLastUpdate = lipgloss.NewStyle().
138 Foreground(lipgloss.Color("241")).
139 Align(lipgloss.Right)
140
141 s.SelectorBox = lipgloss.NewStyle()
142
143 s.ReadmeBox = lipgloss.NewStyle()
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("238"))
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 MarginTop(1).
216 Padding(0, 1).
217 Height(1)
218
219 s.Branch = lipgloss.NewStyle().
220 Foreground(lipgloss.Color("203")).
221 Background(lipgloss.Color("236")).
222 Padding(0, 1)
223
224 s.HelpKey = lipgloss.NewStyle().
225 Foreground(lipgloss.Color("241"))
226
227 s.HelpValue = lipgloss.NewStyle().
228 Foreground(lipgloss.Color("239"))
229
230 s.HelpDivider = lipgloss.NewStyle().
231 Foreground(lipgloss.Color("237")).
232 SetString(" • ")
233
234 s.Error = lipgloss.NewStyle().
235 MarginTop(2)
236
237 s.ErrorTitle = lipgloss.NewStyle().
238 Foreground(lipgloss.Color("230")).
239 Background(lipgloss.Color("204")).
240 Bold(true).
241 Padding(0, 1)
242
243 s.ErrorBody = lipgloss.NewStyle().
244 Foreground(lipgloss.Color("252")).
245 MarginLeft(2)
246
247 s.AboutNoReadme = lipgloss.NewStyle().
248 MarginTop(1).
249 MarginLeft(2).
250 Foreground(lipgloss.Color("#626262"))
251
252 s.LogItemInactive = lipgloss.NewStyle().
253 Border(lipgloss.Border{
254 Left: " ",
255 }, false, false, false, true).
256 PaddingLeft(1)
257
258 s.LogItemActive = s.LogItemInactive.Copy().
259 Border(lipgloss.Border{
260 Left: "┃",
261 }, false, false, false, true).
262 BorderForeground(lipgloss.Color("#B083EA"))
263
264 s.LogItemSelector = s.LogItemInactive.Copy().
265 Width(1).
266 Foreground(lipgloss.Color("#B083EA"))
267
268 s.LogItemHash = s.LogItemInactive.Copy().
269 Foreground(lipgloss.Color("#A3A322"))
270
271 s.LogItemTitle = lipgloss.NewStyle().
272 Foreground(lipgloss.Color("#B083EA"))
273
274 s.LogCommit = lipgloss.NewStyle().
275 Margin(0, 2)
276
277 s.LogCommitHash = lipgloss.NewStyle().
278 Foreground(lipgloss.Color("#A3A322")).
279 Bold(true)
280
281 s.LogCommitBody = lipgloss.NewStyle().
282 MarginTop(1).
283 MarginLeft(2)
284
285 s.LogCommitStatsAdd = lipgloss.NewStyle().
286 Foreground(lipgloss.Color("#00D787")).
287 Bold(true)
288
289 s.LogCommitStatsDel = lipgloss.NewStyle().
290 Foreground(lipgloss.Color("#FD5B5B")).
291 Bold(true)
292
293 s.LogPaginator = lipgloss.NewStyle().
294 Margin(0).
295 Align(lipgloss.Center)
296
297 s.RefItemInactive = lipgloss.NewStyle().
298 MarginLeft(1)
299
300 s.RefItemSelector = lipgloss.NewStyle().
301 Width(1).
302 Foreground(lipgloss.Color("#B083EA"))
303
304 s.RefItemActive = lipgloss.NewStyle().
305 MarginLeft(1).
306 Bold(true)
307
308 s.RefItemBranch = lipgloss.NewStyle()
309
310 s.RefItemTag = lipgloss.NewStyle().
311 Foreground(lipgloss.Color("#A3A322"))
312
313 s.RefPaginator = s.LogPaginator.Copy()
314
315 s.TreeItemSelector = s.TreeItemInactive.Copy().
316 Width(1).
317 Foreground(lipgloss.Color("#B083EA"))
318
319 s.TreeItemInactive = lipgloss.NewStyle().
320 MarginLeft(1)
321
322 s.TreeItemActive = s.TreeItemInactive.Copy().
323 Bold(true)
324
325 s.TreeFileDir = lipgloss.NewStyle().
326 Foreground(lipgloss.Color("#00AAFF"))
327
328 s.TreeFileMode = s.TreeItemInactive.Copy().
329 Width(10).
330 Foreground(lipgloss.Color("#777777"))
331
332 s.TreeFileSize = s.TreeItemInactive.Copy().
333 Foreground(lipgloss.Color("252"))
334
335 s.TreeFileContent = lipgloss.NewStyle()
336
337 s.TreePaginator = s.LogPaginator.Copy()
338
339 s.TreeNoItems = s.AboutNoReadme.Copy()
340
341 s.Spinner = lipgloss.NewStyle().
342 MarginTop(1).
343 MarginLeft(2).
344 Foreground(lipgloss.Color("205"))
345
346 s.CodeNoContent = lipgloss.NewStyle().
347 SetString("No Content.").
348 MarginTop(1).
349 MarginLeft(2).
350 Foreground(lipgloss.Color("#626262"))
351
352 s.StatusBar = lipgloss.NewStyle().
353 Height(1)
354
355 s.StatusBarKey = lipgloss.NewStyle().
356 Bold(true).
357 Padding(0, 1).
358 Background(lipgloss.Color("#FF5FD2")).
359 Foreground(lipgloss.Color("#FFFF87"))
360
361 s.StatusBarValue = lipgloss.NewStyle().
362 Padding(0, 1).
363 Background(lipgloss.Color("235")).
364 Foreground(lipgloss.Color("243"))
365
366 s.StatusBarInfo = lipgloss.NewStyle().
367 Padding(0, 1).
368 Background(lipgloss.Color("#FF8EC7")).
369 Foreground(lipgloss.Color("#F1F1F1"))
370
371 s.StatusBarBranch = lipgloss.NewStyle().
372 Padding(0, 1).
373 Background(lipgloss.Color("#6E6ED8")).
374 Foreground(lipgloss.Color("#F1F1F1"))
375
376 s.StatusBarHelp = lipgloss.NewStyle().
377 Padding(0, 1).
378 Background(lipgloss.Color("237")).
379 Foreground(lipgloss.Color("243"))
380
381 s.Tabs = lipgloss.NewStyle()
382
383 s.TabInactive = lipgloss.NewStyle().
384 Foreground(lipgloss.Color("15"))
385
386 s.TabActive = lipgloss.NewStyle().
387 Foreground(lipgloss.Color("#6E6ED8")).
388 Underline(true)
389
390 s.TabSeparator = lipgloss.NewStyle().
391 SetString("│").
392 Padding(0, 1).
393 Foreground(lipgloss.Color("238"))
394
395 return s
396}