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