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