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 Width(52) // for now
242
243 s.AboutNoReadme = lipgloss.NewStyle().
244 MarginTop(1).
245 MarginLeft(2).
246 Foreground(lipgloss.Color("#626262"))
247
248 s.LogItemInactive = lipgloss.NewStyle().
249 MarginLeft(1)
250
251 s.LogItemSelector = s.LogItemInactive.Copy().
252 Width(1).
253 Foreground(lipgloss.Color("#B083EA"))
254
255 s.LogItemActive = s.LogItemInactive.Copy().
256 Bold(true)
257
258 s.LogItemHash = s.LogItemInactive.Copy().
259 Width(7).
260 Foreground(lipgloss.Color("#A3A322"))
261
262 s.LogCommit = lipgloss.NewStyle().
263 Margin(0, 2)
264
265 s.LogCommitHash = s.LogItemHash.Copy().
266 UnsetMarginLeft().
267 UnsetWidth().
268 Bold(true)
269
270 s.LogCommitBody = lipgloss.NewStyle().
271 MarginTop(1).
272 MarginLeft(2)
273
274 s.LogCommitStatsAdd = lipgloss.NewStyle().
275 Foreground(lipgloss.Color("#00D787")).
276 Bold(true)
277
278 s.LogCommitStatsDel = lipgloss.NewStyle().
279 Foreground(lipgloss.Color("#FD5B5B")).
280 Bold(true)
281
282 s.LogPaginator = lipgloss.NewStyle().
283 Margin(0).
284 Align(lipgloss.Center)
285
286 s.RefItemSelector = s.LogItemSelector.Copy()
287
288 s.RefItemActive = s.LogItemActive.Copy()
289
290 s.RefItemInactive = s.LogItemInactive.Copy()
291
292 s.RefItemBranch = lipgloss.NewStyle()
293
294 s.RefItemTag = lipgloss.NewStyle().
295 Foreground(lipgloss.Color("#A3A322"))
296
297 s.RefPaginator = s.LogPaginator.Copy()
298
299 s.TreeItemSelector = s.LogItemSelector.Copy()
300
301 s.TreeItemActive = s.LogItemActive.Copy()
302
303 s.TreeItemInactive = s.LogItemInactive.Copy()
304
305 s.TreeFileDir = lipgloss.NewStyle().
306 Foreground(lipgloss.Color("#00AAFF"))
307
308 s.TreeFileMode = s.LogItemInactive.Copy().
309 Width(10).
310 Foreground(lipgloss.Color("#777777"))
311
312 s.TreeFileSize = s.LogItemInactive.Copy().
313 Foreground(lipgloss.Color("252"))
314
315 s.TreeFileContent = lipgloss.NewStyle()
316
317 s.TreePaginator = s.LogPaginator.Copy()
318
319 s.TreeNoItems = s.AboutNoReadme.Copy()
320
321 s.Spinner = lipgloss.NewStyle().
322 MarginTop(1).
323 MarginLeft(2).
324 Foreground(lipgloss.Color("205"))
325
326 s.CodeNoContent = lipgloss.NewStyle().
327 SetString("No Content.").
328 MarginTop(1).
329 MarginLeft(2).
330 Foreground(lipgloss.Color("#626262"))
331
332 s.StatusBar = lipgloss.NewStyle().
333 Height(1)
334
335 s.StatusBarKey = lipgloss.NewStyle().
336 Bold(true).
337 Padding(0, 1).
338 Background(lipgloss.Color("#FF5FD2")).
339 Foreground(lipgloss.Color("#FFFF87"))
340
341 s.StatusBarValue = lipgloss.NewStyle().
342 Padding(0, 1).
343 Background(lipgloss.Color("#373737")).
344 Foreground(lipgloss.Color("#F1F1F1"))
345
346 s.StatusBarInfo = lipgloss.NewStyle().
347 Padding(0, 1).
348 Background(lipgloss.Color("#FF8EC7")).
349 Foreground(lipgloss.Color("#F1F1F1"))
350
351 s.StatusBarBranch = lipgloss.NewStyle().
352 Padding(0, 1).
353 Background(lipgloss.Color("#6E6ED8")).
354 Foreground(lipgloss.Color("#F1F1F1"))
355
356 s.Tabs = lipgloss.NewStyle()
357
358 s.TabInactive = lipgloss.NewStyle().
359 Foreground(lipgloss.Color("15"))
360
361 s.TabActive = lipgloss.NewStyle().
362 Foreground(lipgloss.Color("#6E6ED8")).
363 Underline(true)
364
365 s.TabSeparator = lipgloss.NewStyle().
366 SetString("│").
367 Padding(0, 1).
368 Foreground(lipgloss.Color("241"))
369
370 return s
371}