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	RepoTitleBorder lipgloss.Border
 28	RepoNoteBorder  lipgloss.Border
 29	RepoBodyBorder  lipgloss.Border
 30
 31	Repo           lipgloss.Style
 32	RepoTitle      lipgloss.Style
 33	RepoTitleBox   lipgloss.Style
 34	RepoCommand    lipgloss.Style
 35	RepoNoteBox    lipgloss.Style
 36	RepoBody       lipgloss.Style
 37	RepoHeader     lipgloss.Style
 38	RepoHeaderName lipgloss.Style
 39	RepoHeaderDesc lipgloss.Style
 40
 41	Footer      lipgloss.Style
 42	Branch      lipgloss.Style
 43	HelpKey     lipgloss.Style
 44	HelpValue   lipgloss.Style
 45	HelpDivider lipgloss.Style
 46
 47	Error      lipgloss.Style
 48	ErrorTitle lipgloss.Style
 49	ErrorBody  lipgloss.Style
 50
 51	AboutNoReadme lipgloss.Style
 52
 53	LogItem           lipgloss.Style
 54	LogItemSelector   lipgloss.Style
 55	LogItemActive     lipgloss.Style
 56	LogItemInactive   lipgloss.Style
 57	LogItemHash       lipgloss.Style
 58	LogItemTitle      lipgloss.Style
 59	LogCommit         lipgloss.Style
 60	LogCommitHash     lipgloss.Style
 61	LogCommitAuthor   lipgloss.Style
 62	LogCommitDate     lipgloss.Style
 63	LogCommitBody     lipgloss.Style
 64	LogCommitStatsAdd lipgloss.Style
 65	LogCommitStatsDel lipgloss.Style
 66	LogPaginator      lipgloss.Style
 67
 68	RefItemSelector lipgloss.Style
 69	RefItemActive   lipgloss.Style
 70	RefItemInactive lipgloss.Style
 71	RefItemBranch   lipgloss.Style
 72	RefItemTag      lipgloss.Style
 73	RefPaginator    lipgloss.Style
 74
 75	TreeItemSelector lipgloss.Style
 76	TreeItemActive   lipgloss.Style
 77	TreeItemInactive lipgloss.Style
 78	TreeFileDir      lipgloss.Style
 79	TreeFileMode     lipgloss.Style
 80	TreeFileSize     lipgloss.Style
 81	TreeFileContent  lipgloss.Style
 82	TreePaginator    lipgloss.Style
 83	TreeNoItems      lipgloss.Style
 84
 85	Spinner lipgloss.Style
 86
 87	CodeNoContent lipgloss.Style
 88
 89	StatusBar       lipgloss.Style
 90	StatusBarKey    lipgloss.Style
 91	StatusBarValue  lipgloss.Style
 92	StatusBarInfo   lipgloss.Style
 93	StatusBarBranch lipgloss.Style
 94	StatusBarHelp   lipgloss.Style
 95
 96	Tabs         lipgloss.Style
 97	TabInactive  lipgloss.Style
 98	TabActive    lipgloss.Style
 99	TabSeparator lipgloss.Style
100}
101
102// DefaultStyles returns default styles for the UI.
103func DefaultStyles() *Styles {
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		Foreground(lipgloss.Color("15")).
114		Align(lipgloss.Left).
115		Height(1).
116		PaddingLeft(1).
117		MarginBottom(1).
118		Bold(true)
119
120	s.Menu = lipgloss.NewStyle().
121		BorderStyle(lipgloss.RoundedBorder()).
122		BorderForeground(s.InactiveBorderColor).
123		Padding(1, 2).
124		MarginRight(1).
125		Width(24)
126
127	s.MenuCursor = lipgloss.NewStyle().
128		Foreground(lipgloss.Color("213")).
129		SetString(">")
130
131	s.MenuItem = lipgloss.NewStyle().
132		PaddingLeft(1).
133		Border(lipgloss.Border{
134			Left: " ",
135		}, false, false, false, true).
136		Height(3)
137
138	s.MenuLastUpdate = lipgloss.NewStyle().
139		Foreground(lipgloss.Color("241")).
140		Align(lipgloss.Right)
141
142	s.SelectorBox = lipgloss.NewStyle()
143
144	s.ReadmeBox = lipgloss.NewStyle()
145
146	s.RepoTitleBorder = lipgloss.Border{
147		Top:         "─",
148		Bottom:      "─",
149		Left:        "│",
150		Right:       "│",
151		TopLeft:     "╭",
152		TopRight:    "┬",
153		BottomLeft:  "├",
154		BottomRight: "┴",
155	}
156
157	s.RepoNoteBorder = lipgloss.Border{
158		Top:         "─",
159		Bottom:      "─",
160		Left:        "│",
161		Right:       "│",
162		TopLeft:     "┬",
163		TopRight:    "╮",
164		BottomLeft:  "┴",
165		BottomRight: "┤",
166	}
167
168	s.RepoBodyBorder = lipgloss.Border{
169		Top:         "",
170		Bottom:      "─",
171		Left:        "│",
172		Right:       "│",
173		TopLeft:     "",
174		TopRight:    "",
175		BottomLeft:  "╰",
176		BottomRight: "╯",
177	}
178
179	s.Repo = lipgloss.NewStyle()
180
181	s.RepoTitle = lipgloss.NewStyle().
182		Padding(0, 2)
183
184	s.RepoTitleBox = lipgloss.NewStyle().
185		BorderStyle(s.RepoTitleBorder).
186		BorderForeground(s.InactiveBorderColor)
187
188	s.RepoCommand = lipgloss.NewStyle().
189		Foreground(lipgloss.Color("168"))
190
191	s.RepoNoteBox = lipgloss.NewStyle().
192		BorderStyle(s.RepoNoteBorder).
193		BorderForeground(s.InactiveBorderColor).
194		BorderTop(true).
195		BorderRight(true).
196		BorderBottom(true).
197		BorderLeft(false)
198
199	s.RepoBody = lipgloss.NewStyle().
200		Margin(1, 0)
201
202	s.RepoHeader = lipgloss.NewStyle().
203		Height(2).
204		Border(lipgloss.NormalBorder(), false, false, true, false).
205		BorderForeground(lipgloss.Color("238"))
206
207	s.RepoHeaderName = lipgloss.NewStyle().
208		Foreground(lipgloss.Color("15")).
209		Bold(true)
210
211	s.RepoHeaderDesc = lipgloss.NewStyle().
212		Faint(true).
213		Foreground(lipgloss.Color("15"))
214
215	s.Footer = lipgloss.NewStyle().
216		MarginTop(1).
217		Padding(0, 1).
218		Height(1)
219
220	s.Branch = lipgloss.NewStyle().
221		Foreground(lipgloss.Color("203")).
222		Background(lipgloss.Color("236")).
223		Padding(0, 1)
224
225	s.HelpKey = lipgloss.NewStyle().
226		Foreground(lipgloss.Color("241"))
227
228	s.HelpValue = lipgloss.NewStyle().
229		Foreground(lipgloss.Color("239"))
230
231	s.HelpDivider = lipgloss.NewStyle().
232		Foreground(lipgloss.Color("237")).
233		SetString(" • ")
234
235	s.Error = lipgloss.NewStyle().
236		MarginTop(2)
237
238	s.ErrorTitle = lipgloss.NewStyle().
239		Foreground(lipgloss.Color("230")).
240		Background(lipgloss.Color("204")).
241		Bold(true).
242		Padding(0, 1)
243
244	s.ErrorBody = lipgloss.NewStyle().
245		Foreground(lipgloss.Color("252")).
246		MarginLeft(2)
247
248	s.AboutNoReadme = lipgloss.NewStyle().
249		MarginTop(1).
250		MarginLeft(2).
251		Foreground(lipgloss.Color("#626262"))
252
253	s.LogItemInactive = lipgloss.NewStyle().
254		Border(lipgloss.Border{
255			Left: " ",
256		}, false, false, false, true).
257		PaddingLeft(1)
258
259	s.LogItemActive = s.LogItemInactive.Copy().
260		Border(lipgloss.Border{
261			Left: "┃",
262		}, false, false, false, true).
263		BorderForeground(lipgloss.Color("#B083EA"))
264
265	s.LogItemSelector = s.LogItemInactive.Copy().
266		Width(1).
267		Foreground(lipgloss.Color("#B083EA"))
268
269	s.LogItemHash = s.LogItemInactive.Copy().
270		Foreground(lipgloss.Color("#A3A322"))
271
272	s.LogItemTitle = lipgloss.NewStyle().
273		Foreground(lipgloss.Color("#B083EA"))
274
275	s.LogCommit = lipgloss.NewStyle().
276		Margin(0, 2)
277
278	s.LogCommitHash = lipgloss.NewStyle().
279		Foreground(lipgloss.Color("#A3A322")).
280		Bold(true)
281
282	s.LogCommitBody = lipgloss.NewStyle().
283		MarginTop(1).
284		MarginLeft(2)
285
286	s.LogCommitStatsAdd = lipgloss.NewStyle().
287		Foreground(lipgloss.Color("#00D787")).
288		Bold(true)
289
290	s.LogCommitStatsDel = lipgloss.NewStyle().
291		Foreground(lipgloss.Color("#FD5B5B")).
292		Bold(true)
293
294	s.LogPaginator = lipgloss.NewStyle().
295		Margin(0).
296		Align(lipgloss.Center)
297
298	s.RefItemInactive = lipgloss.NewStyle().
299		MarginLeft(1)
300
301	s.RefItemSelector = lipgloss.NewStyle().
302		Width(1).
303		Foreground(lipgloss.Color("#B083EA"))
304
305	s.RefItemActive = lipgloss.NewStyle().
306		MarginLeft(1).
307		Bold(true)
308
309	s.RefItemBranch = lipgloss.NewStyle()
310
311	s.RefItemTag = lipgloss.NewStyle().
312		Foreground(lipgloss.Color("#A3A322"))
313
314	s.RefPaginator = s.LogPaginator.Copy()
315
316	s.TreeItemSelector = s.TreeItemInactive.Copy().
317		Width(1).
318		Foreground(lipgloss.Color("#B083EA"))
319
320	s.TreeItemInactive = lipgloss.NewStyle().
321		MarginLeft(1)
322
323	s.TreeItemActive = s.TreeItemInactive.Copy().
324		Bold(true)
325
326	s.TreeFileDir = lipgloss.NewStyle().
327		Foreground(lipgloss.Color("#00AAFF"))
328
329	s.TreeFileMode = s.TreeItemInactive.Copy().
330		Width(10).
331		Foreground(lipgloss.Color("#777777"))
332
333	s.TreeFileSize = s.TreeItemInactive.Copy().
334		Foreground(lipgloss.Color("252"))
335
336	s.TreeFileContent = lipgloss.NewStyle()
337
338	s.TreePaginator = s.LogPaginator.Copy()
339
340	s.TreeNoItems = s.AboutNoReadme.Copy()
341
342	s.Spinner = lipgloss.NewStyle().
343		MarginTop(1).
344		MarginLeft(2).
345		Foreground(lipgloss.Color("205"))
346
347	s.CodeNoContent = lipgloss.NewStyle().
348		SetString("No Content.").
349		MarginTop(1).
350		MarginLeft(2).
351		Foreground(lipgloss.Color("#626262"))
352
353	s.StatusBar = lipgloss.NewStyle().
354		Height(1)
355
356	s.StatusBarKey = lipgloss.NewStyle().
357		Bold(true).
358		Padding(0, 1).
359		Background(lipgloss.Color("#FF5FD2")).
360		Foreground(lipgloss.Color("#FFFF87"))
361
362	s.StatusBarValue = lipgloss.NewStyle().
363		Padding(0, 1).
364		Background(lipgloss.Color("235")).
365		Foreground(lipgloss.Color("243"))
366
367	s.StatusBarInfo = lipgloss.NewStyle().
368		Padding(0, 1).
369		Background(lipgloss.Color("#FF8EC7")).
370		Foreground(lipgloss.Color("#F1F1F1"))
371
372	s.StatusBarBranch = lipgloss.NewStyle().
373		Padding(0, 1).
374		Background(lipgloss.Color("#6E6ED8")).
375		Foreground(lipgloss.Color("#F1F1F1"))
376
377	s.StatusBarHelp = lipgloss.NewStyle().
378		Padding(0, 1).
379		Background(lipgloss.Color("237")).
380		Foreground(lipgloss.Color("243"))
381
382	s.Tabs = lipgloss.NewStyle()
383
384	s.TabInactive = lipgloss.NewStyle().
385		Foreground(lipgloss.Color("15"))
386
387	s.TabActive = lipgloss.NewStyle().
388		Foreground(lipgloss.Color("#6E6ED8")).
389		Underline(true)
390
391	s.TabSeparator = lipgloss.NewStyle().
392		SetString("│").
393		Padding(0, 1).
394		Foreground(lipgloss.Color("238"))
395
396	return s
397}