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