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