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