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