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