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