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 MarginLeft(1).
202 Foreground(lipgloss.Color("#626262"))
203
204 s.LogItemInactive = lipgloss.NewStyle().
205 MarginLeft(1)
206
207 s.LogItemSelector = s.LogItemInactive.Copy().
208 Width(1).
209 Foreground(lipgloss.Color("#B083EA"))
210
211 s.LogItemActive = s.LogItemInactive.Copy().
212 Bold(true)
213
214 s.LogItemHash = s.LogItemInactive.Copy().
215 Width(7).
216 Foreground(lipgloss.Color("#A3A322"))
217
218 s.LogCommit = lipgloss.NewStyle().
219 Margin(0, 2)
220
221 s.LogCommitHash = s.LogItemHash.Copy().
222 UnsetMarginLeft().
223 UnsetWidth().
224 Bold(true)
225
226 s.LogCommitBody = lipgloss.NewStyle().
227 MarginTop(1).
228 MarginLeft(2)
229
230 s.LogCommitStatsAdd = lipgloss.NewStyle().
231 Foreground(lipgloss.Color("#00D787")).
232 Bold(true)
233
234 s.LogCommitStatsDel = lipgloss.NewStyle().
235 Foreground(lipgloss.Color("#FD5B5B")).
236 Bold(true)
237
238 s.LogPaginator = lipgloss.NewStyle().
239 Margin(0).
240 Align(lipgloss.Center)
241
242 s.RefItemSelector = s.LogItemSelector.Copy()
243
244 s.RefItemActive = s.LogItemActive.Copy()
245
246 s.RefItemInactive = s.LogItemInactive.Copy()
247
248 s.RefItemBranch = lipgloss.NewStyle()
249
250 s.RefItemTag = lipgloss.NewStyle().
251 Foreground(lipgloss.Color("#A3A322"))
252
253 s.RefPaginator = s.LogPaginator.Copy()
254
255 s.TreeItemSelector = s.LogItemSelector.Copy()
256
257 s.TreeItemActive = s.LogItemActive.Copy()
258
259 s.TreeItemInactive = s.LogItemInactive.Copy()
260
261 s.TreeFileDir = lipgloss.NewStyle().
262 Foreground(lipgloss.Color("#00AAFF"))
263
264 s.TreeFileMode = s.LogItemInactive.Copy().
265 Width(10).
266 Foreground(lipgloss.Color("#777777"))
267
268 s.TreeFileSize = s.LogItemInactive.Copy().
269 Foreground(lipgloss.Color("252"))
270
271 s.TreeFileContent = lipgloss.NewStyle()
272
273 s.TreePaginator = s.LogPaginator.Copy()
274
275 s.TreeNoItems = s.AboutNoReadme.Copy()
276
277 s.Spinner = lipgloss.NewStyle().
278 MarginLeft(1).
279 Foreground(lipgloss.Color("205"))
280
281 return s
282}