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