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