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