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 RepoTitle lipgloss.Style
32 RepoTitleBox lipgloss.Style
33 RepoNote lipgloss.Style
34 RepoNoteBox lipgloss.Style
35 RepoBody lipgloss.Style
36
37 Footer lipgloss.Style
38 Branch lipgloss.Style
39 HelpKey lipgloss.Style
40 HelpValue lipgloss.Style
41 HelpDivider lipgloss.Style
42
43 Error lipgloss.Style
44 ErrorTitle lipgloss.Style
45 ErrorBody lipgloss.Style
46
47 AboutNoReadme lipgloss.Style
48
49 LogItemSelector lipgloss.Style
50 LogItemActive lipgloss.Style
51 LogItemInactive lipgloss.Style
52 LogItemHash 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 TreeFileDir lipgloss.Style
73 TreeFileMode lipgloss.Style
74 TreeFileSize lipgloss.Style
75 TreeFileContent lipgloss.Style
76 TreePaginator lipgloss.Style
77 TreeNoItems lipgloss.Style
78
79 Spinner lipgloss.Style
80
81 CodeNoContent lipgloss.Style
82}
83
84// DefaultStyles returns default styles for the UI.
85func DefaultStyles() *Styles {
86 s := new(Styles)
87
88 s.ActiveBorderColor = lipgloss.Color("62")
89 s.InactiveBorderColor = lipgloss.Color("241")
90
91 s.App = lipgloss.NewStyle().
92 Margin(1, 2)
93
94 s.Header = lipgloss.NewStyle().
95 Foreground(lipgloss.Color("15")).
96 Align(lipgloss.Right).
97 Height(1).
98 Bold(true)
99
100 s.Menu = lipgloss.NewStyle().
101 BorderStyle(lipgloss.RoundedBorder()).
102 BorderForeground(s.InactiveBorderColor).
103 Padding(1, 2).
104 MarginRight(1).
105 Width(24)
106
107 s.MenuCursor = lipgloss.NewStyle().
108 Foreground(lipgloss.Color("213")).
109 SetString(">")
110
111 s.MenuItem = lipgloss.NewStyle().
112 Padding(1, 2).
113 Height(4).
114 Border(lipgloss.RoundedBorder()).
115 BorderForeground(lipgloss.Color("241"))
116
117 s.MenuLastUpdate = lipgloss.NewStyle().
118 Foreground(lipgloss.Color("241")).
119 Align(lipgloss.Right)
120
121 s.SelectorBox = lipgloss.NewStyle().
122 Width(64)
123
124 s.ReadmeBox = lipgloss.NewStyle().
125 Margin(1, 1, 1, 0)
126
127 s.RepoTitleBorder = lipgloss.Border{
128 Top: "─",
129 Bottom: "─",
130 Left: "│",
131 Right: "│",
132 TopLeft: "╭",
133 TopRight: "┬",
134 BottomLeft: "├",
135 BottomRight: "┴",
136 }
137
138 s.RepoNoteBorder = lipgloss.Border{
139 Top: "─",
140 Bottom: "─",
141 Left: "│",
142 Right: "│",
143 TopLeft: "┬",
144 TopRight: "╮",
145 BottomLeft: "┴",
146 BottomRight: "┤",
147 }
148
149 s.RepoBodyBorder = lipgloss.Border{
150 Top: "",
151 Bottom: "─",
152 Left: "│",
153 Right: "│",
154 TopLeft: "",
155 TopRight: "",
156 BottomLeft: "╰",
157 BottomRight: "╯",
158 }
159
160 s.RepoTitle = lipgloss.NewStyle().
161 Padding(0, 2)
162
163 s.RepoTitleBox = lipgloss.NewStyle().
164 BorderStyle(s.RepoTitleBorder).
165 BorderForeground(s.InactiveBorderColor)
166
167 s.RepoNote = lipgloss.NewStyle().
168 Padding(0, 2).
169 Foreground(lipgloss.Color("168"))
170
171 s.RepoNoteBox = lipgloss.NewStyle().
172 BorderStyle(s.RepoNoteBorder).
173 BorderForeground(s.InactiveBorderColor).
174 BorderTop(true).
175 BorderRight(true).
176 BorderBottom(true).
177 BorderLeft(false)
178
179 s.RepoBody = lipgloss.NewStyle().
180 BorderStyle(s.RepoBodyBorder).
181 BorderForeground(s.InactiveBorderColor).
182 PaddingRight(1)
183
184 s.Footer = lipgloss.NewStyle().
185 Height(1)
186
187 s.Branch = lipgloss.NewStyle().
188 Foreground(lipgloss.Color("203")).
189 Background(lipgloss.Color("236")).
190 Padding(0, 1)
191
192 s.HelpKey = lipgloss.NewStyle().
193 Foreground(lipgloss.Color("241"))
194
195 s.HelpValue = lipgloss.NewStyle().
196 Foreground(lipgloss.Color("239"))
197
198 s.HelpDivider = lipgloss.NewStyle().
199 Foreground(lipgloss.Color("237")).
200 SetString(" • ")
201
202 s.Error = lipgloss.NewStyle().
203 Padding(1)
204
205 s.ErrorTitle = lipgloss.NewStyle().
206 Foreground(lipgloss.Color("230")).
207 Background(lipgloss.Color("204")).
208 Bold(true).
209 Padding(0, 1)
210
211 s.ErrorBody = lipgloss.NewStyle().
212 Foreground(lipgloss.Color("252")).
213 MarginLeft(2).
214 Width(52) // for now
215
216 s.AboutNoReadme = lipgloss.NewStyle().
217 MarginTop(1).
218 MarginLeft(2).
219 Foreground(lipgloss.Color("#626262"))
220
221 s.LogItemInactive = lipgloss.NewStyle().
222 MarginLeft(1)
223
224 s.LogItemSelector = s.LogItemInactive.Copy().
225 Width(1).
226 Foreground(lipgloss.Color("#B083EA"))
227
228 s.LogItemActive = s.LogItemInactive.Copy().
229 Bold(true)
230
231 s.LogItemHash = s.LogItemInactive.Copy().
232 Width(7).
233 Foreground(lipgloss.Color("#A3A322"))
234
235 s.LogCommit = lipgloss.NewStyle().
236 Margin(0, 2)
237
238 s.LogCommitHash = s.LogItemHash.Copy().
239 UnsetMarginLeft().
240 UnsetWidth().
241 Bold(true)
242
243 s.LogCommitBody = lipgloss.NewStyle().
244 MarginTop(1).
245 MarginLeft(2)
246
247 s.LogCommitStatsAdd = lipgloss.NewStyle().
248 Foreground(lipgloss.Color("#00D787")).
249 Bold(true)
250
251 s.LogCommitStatsDel = lipgloss.NewStyle().
252 Foreground(lipgloss.Color("#FD5B5B")).
253 Bold(true)
254
255 s.LogPaginator = lipgloss.NewStyle().
256 Margin(0).
257 Align(lipgloss.Center)
258
259 s.RefItemSelector = s.LogItemSelector.Copy()
260
261 s.RefItemActive = s.LogItemActive.Copy()
262
263 s.RefItemInactive = s.LogItemInactive.Copy()
264
265 s.RefItemBranch = lipgloss.NewStyle()
266
267 s.RefItemTag = lipgloss.NewStyle().
268 Foreground(lipgloss.Color("#A3A322"))
269
270 s.RefPaginator = s.LogPaginator.Copy()
271
272 s.TreeItemSelector = s.LogItemSelector.Copy()
273
274 s.TreeItemActive = s.LogItemActive.Copy()
275
276 s.TreeItemInactive = s.LogItemInactive.Copy()
277
278 s.TreeFileDir = lipgloss.NewStyle().
279 Foreground(lipgloss.Color("#00AAFF"))
280
281 s.TreeFileMode = s.LogItemInactive.Copy().
282 Width(10).
283 Foreground(lipgloss.Color("#777777"))
284
285 s.TreeFileSize = s.LogItemInactive.Copy().
286 Foreground(lipgloss.Color("252"))
287
288 s.TreeFileContent = lipgloss.NewStyle()
289
290 s.TreePaginator = s.LogPaginator.Copy()
291
292 s.TreeNoItems = s.AboutNoReadme.Copy()
293
294 s.Spinner = lipgloss.NewStyle().
295 MarginTop(1).
296 MarginLeft(2).
297 Foreground(lipgloss.Color("205"))
298
299 s.CodeNoContent = lipgloss.NewStyle().
300 SetString("No Content.").
301 MarginTop(1).
302 MarginLeft(2).
303 Foreground(lipgloss.Color("#626262"))
304
305 return s
306}