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