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		Width(52) // for now
242
243	s.AboutNoReadme = lipgloss.NewStyle().
244		MarginTop(1).
245		MarginLeft(2).
246		Foreground(lipgloss.Color("#626262"))
247
248	s.LogItemInactive = lipgloss.NewStyle().
249		MarginLeft(1)
250
251	s.LogItemSelector = s.LogItemInactive.Copy().
252		Width(1).
253		Foreground(lipgloss.Color("#B083EA"))
254
255	s.LogItemActive = s.LogItemInactive.Copy().
256		Bold(true)
257
258	s.LogItemHash = s.LogItemInactive.Copy().
259		Width(7).
260		Foreground(lipgloss.Color("#A3A322"))
261
262	s.LogCommit = lipgloss.NewStyle().
263		Margin(0, 2)
264
265	s.LogCommitHash = s.LogItemHash.Copy().
266		UnsetMarginLeft().
267		UnsetWidth().
268		Bold(true)
269
270	s.LogCommitBody = lipgloss.NewStyle().
271		MarginTop(1).
272		MarginLeft(2)
273
274	s.LogCommitStatsAdd = lipgloss.NewStyle().
275		Foreground(lipgloss.Color("#00D787")).
276		Bold(true)
277
278	s.LogCommitStatsDel = lipgloss.NewStyle().
279		Foreground(lipgloss.Color("#FD5B5B")).
280		Bold(true)
281
282	s.LogPaginator = lipgloss.NewStyle().
283		Margin(0).
284		Align(lipgloss.Center)
285
286	s.RefItemSelector = s.LogItemSelector.Copy()
287
288	s.RefItemActive = s.LogItemActive.Copy()
289
290	s.RefItemInactive = s.LogItemInactive.Copy()
291
292	s.RefItemBranch = lipgloss.NewStyle()
293
294	s.RefItemTag = lipgloss.NewStyle().
295		Foreground(lipgloss.Color("#A3A322"))
296
297	s.RefPaginator = s.LogPaginator.Copy()
298
299	s.TreeItemSelector = s.LogItemSelector.Copy()
300
301	s.TreeItemActive = s.LogItemActive.Copy()
302
303	s.TreeItemInactive = s.LogItemInactive.Copy()
304
305	s.TreeFileDir = lipgloss.NewStyle().
306		Foreground(lipgloss.Color("#00AAFF"))
307
308	s.TreeFileMode = s.LogItemInactive.Copy().
309		Width(10).
310		Foreground(lipgloss.Color("#777777"))
311
312	s.TreeFileSize = s.LogItemInactive.Copy().
313		Foreground(lipgloss.Color("252"))
314
315	s.TreeFileContent = lipgloss.NewStyle()
316
317	s.TreePaginator = s.LogPaginator.Copy()
318
319	s.TreeNoItems = s.AboutNoReadme.Copy()
320
321	s.Spinner = lipgloss.NewStyle().
322		MarginTop(1).
323		MarginLeft(2).
324		Foreground(lipgloss.Color("205"))
325
326	s.CodeNoContent = lipgloss.NewStyle().
327		SetString("No Content.").
328		MarginTop(1).
329		MarginLeft(2).
330		Foreground(lipgloss.Color("#626262"))
331
332	s.StatusBar = lipgloss.NewStyle().
333		Height(1)
334
335	s.StatusBarKey = lipgloss.NewStyle().
336		Bold(true).
337		Padding(0, 1).
338		Background(lipgloss.Color("#FF5FD2")).
339		Foreground(lipgloss.Color("#FFFF87"))
340
341	s.StatusBarValue = lipgloss.NewStyle().
342		Padding(0, 1).
343		Background(lipgloss.Color("#373737")).
344		Foreground(lipgloss.Color("#F1F1F1"))
345
346	s.StatusBarInfo = lipgloss.NewStyle().
347		Padding(0, 1).
348		Background(lipgloss.Color("#FF8EC7")).
349		Foreground(lipgloss.Color("#F1F1F1"))
350
351	s.StatusBarBranch = lipgloss.NewStyle().
352		Padding(0, 1).
353		Background(lipgloss.Color("#6E6ED8")).
354		Foreground(lipgloss.Color("#F1F1F1"))
355
356	s.Tabs = lipgloss.NewStyle()
357
358	s.TabInactive = lipgloss.NewStyle().
359		Foreground(lipgloss.Color("15"))
360
361	s.TabActive = lipgloss.NewStyle().
362		Foreground(lipgloss.Color("#6E6ED8")).
363		Underline(true)
364
365	s.TabSeparator = lipgloss.NewStyle().
366		SetString("│").
367		Padding(0, 1).
368		Foreground(lipgloss.Color("241"))
369
370	return s
371}