styles.go

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