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