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		PaddingLeft(1).
130		Border(lipgloss.Border{
131			Left: " ",
132		}, false, false, false, true).
133		Height(3)
134
135	s.MenuLastUpdate = lipgloss.NewStyle().
136		Foreground(lipgloss.Color("241")).
137		Align(lipgloss.Right)
138
139	s.SelectorBox = lipgloss.NewStyle().
140		Width(64)
141
142	s.ReadmeBox = lipgloss.NewStyle().
143		Margin(1, 1, 1, 0)
144
145	s.RepoTitleBorder = lipgloss.Border{
146		Top:         "─",
147		Bottom:      "─",
148		Left:        "│",
149		Right:       "│",
150		TopLeft:     "╭",
151		TopRight:    "┬",
152		BottomLeft:  "├",
153		BottomRight: "┴",
154	}
155
156	s.RepoNoteBorder = lipgloss.Border{
157		Top:         "─",
158		Bottom:      "─",
159		Left:        "│",
160		Right:       "│",
161		TopLeft:     "┬",
162		TopRight:    "╮",
163		BottomLeft:  "┴",
164		BottomRight: "┤",
165	}
166
167	s.RepoBodyBorder = lipgloss.Border{
168		Top:         "",
169		Bottom:      "─",
170		Left:        "│",
171		Right:       "│",
172		TopLeft:     "",
173		TopRight:    "",
174		BottomLeft:  "╰",
175		BottomRight: "╯",
176	}
177
178	s.Repo = lipgloss.NewStyle()
179
180	s.RepoTitle = lipgloss.NewStyle().
181		Padding(0, 2)
182
183	s.RepoTitleBox = lipgloss.NewStyle().
184		BorderStyle(s.RepoTitleBorder).
185		BorderForeground(s.InactiveBorderColor)
186
187	s.RepoCommand = lipgloss.NewStyle().
188		Foreground(lipgloss.Color("168"))
189
190	s.RepoNoteBox = lipgloss.NewStyle().
191		BorderStyle(s.RepoNoteBorder).
192		BorderForeground(s.InactiveBorderColor).
193		BorderTop(true).
194		BorderRight(true).
195		BorderBottom(true).
196		BorderLeft(false)
197
198	s.RepoBody = lipgloss.NewStyle().
199		Margin(1, 0)
200
201	s.RepoHeader = lipgloss.NewStyle().
202		Height(2).
203		Border(lipgloss.NormalBorder(), false, false, true, false).
204		BorderForeground(lipgloss.Color("241"))
205
206	s.RepoHeaderName = lipgloss.NewStyle().
207		Foreground(lipgloss.Color("15")).
208		Bold(true)
209
210	s.RepoHeaderDesc = lipgloss.NewStyle().
211		Faint(true).
212		Foreground(lipgloss.Color("15"))
213
214	s.Footer = lipgloss.NewStyle().
215		Padding(0, 1).
216		Height(1)
217
218	s.Branch = lipgloss.NewStyle().
219		Foreground(lipgloss.Color("203")).
220		Background(lipgloss.Color("236")).
221		Padding(0, 1)
222
223	s.HelpKey = lipgloss.NewStyle().
224		Foreground(lipgloss.Color("241"))
225
226	s.HelpValue = lipgloss.NewStyle().
227		Foreground(lipgloss.Color("239"))
228
229	s.HelpDivider = lipgloss.NewStyle().
230		Foreground(lipgloss.Color("237")).
231		SetString(" • ")
232
233	s.Error = lipgloss.NewStyle().
234		MarginTop(2)
235
236	s.ErrorTitle = lipgloss.NewStyle().
237		Foreground(lipgloss.Color("230")).
238		Background(lipgloss.Color("204")).
239		Bold(true).
240		Padding(0, 1)
241
242	s.ErrorBody = lipgloss.NewStyle().
243		Foreground(lipgloss.Color("252")).
244		MarginLeft(2)
245
246	s.AboutNoReadme = lipgloss.NewStyle().
247		MarginTop(1).
248		MarginLeft(2).
249		Foreground(lipgloss.Color("#626262"))
250
251	s.LogItemInactive = lipgloss.NewStyle().
252		Border(lipgloss.Border{
253			Left: " ",
254		}, false, false, false, true).
255		PaddingLeft(1)
256
257	s.LogItemActive = s.LogItemInactive.Copy().
258		Border(lipgloss.Border{
259			Left: "┃",
260		}, false, false, false, true).
261		BorderForeground(lipgloss.Color("#B083EA"))
262
263	s.LogItemSelector = s.LogItemInactive.Copy().
264		Width(1).
265		Foreground(lipgloss.Color("#B083EA"))
266
267	s.LogItemHash = s.LogItemInactive.Copy().
268		Foreground(lipgloss.Color("#A3A322"))
269
270	s.LogItemTitle = lipgloss.NewStyle().
271		Foreground(lipgloss.Color("#B083EA"))
272
273	s.LogCommit = lipgloss.NewStyle().
274		Margin(0, 2)
275
276	s.LogCommitHash = lipgloss.NewStyle().
277		Foreground(lipgloss.Color("#A3A322")).
278		Bold(true)
279
280	s.LogCommitBody = lipgloss.NewStyle().
281		MarginTop(1).
282		MarginLeft(2)
283
284	s.LogCommitStatsAdd = lipgloss.NewStyle().
285		Foreground(lipgloss.Color("#00D787")).
286		Bold(true)
287
288	s.LogCommitStatsDel = lipgloss.NewStyle().
289		Foreground(lipgloss.Color("#FD5B5B")).
290		Bold(true)
291
292	s.LogPaginator = lipgloss.NewStyle().
293		Margin(0).
294		Align(lipgloss.Center)
295
296	s.RefItemInactive = lipgloss.NewStyle().
297		MarginLeft(1)
298
299	s.RefItemSelector = lipgloss.NewStyle().
300		Width(1).
301		Foreground(lipgloss.Color("#B083EA"))
302
303	s.RefItemActive = s.RefItemInactive.Copy().
304		Bold(true)
305
306	s.RefItemBranch = lipgloss.NewStyle()
307
308	s.RefItemTag = lipgloss.NewStyle().
309		Foreground(lipgloss.Color("#A3A322"))
310
311	s.RefPaginator = s.LogPaginator.Copy()
312
313	s.TreeItemSelector = s.TreeItemInactive.Copy().
314		Width(1).
315		Foreground(lipgloss.Color("#B083EA"))
316
317	s.TreeItemInactive = lipgloss.NewStyle().
318		MarginLeft(1)
319
320	s.TreeItemActive = s.TreeItemInactive.Copy().
321		Bold(true)
322
323	s.TreeFileDir = lipgloss.NewStyle().
324		Foreground(lipgloss.Color("#00AAFF"))
325
326	s.TreeFileMode = s.TreeItemInactive.Copy().
327		Width(10).
328		Foreground(lipgloss.Color("#777777"))
329
330	s.TreeFileSize = s.TreeItemInactive.Copy().
331		Foreground(lipgloss.Color("252"))
332
333	s.TreeFileContent = lipgloss.NewStyle()
334
335	s.TreePaginator = s.LogPaginator.Copy()
336
337	s.TreeNoItems = s.AboutNoReadme.Copy()
338
339	s.Spinner = lipgloss.NewStyle().
340		MarginTop(1).
341		MarginLeft(2).
342		Foreground(lipgloss.Color("205"))
343
344	s.CodeNoContent = lipgloss.NewStyle().
345		SetString("No Content.").
346		MarginTop(1).
347		MarginLeft(2).
348		Foreground(lipgloss.Color("#626262"))
349
350	s.StatusBar = lipgloss.NewStyle().
351		Height(1)
352
353	s.StatusBarKey = lipgloss.NewStyle().
354		Bold(true).
355		Padding(0, 1).
356		Background(lipgloss.Color("#FF5FD2")).
357		Foreground(lipgloss.Color("#FFFF87"))
358
359	s.StatusBarValue = lipgloss.NewStyle().
360		Padding(0, 1).
361		Background(lipgloss.Color("#373737")).
362		Foreground(lipgloss.Color("#F1F1F1"))
363
364	s.StatusBarInfo = lipgloss.NewStyle().
365		Padding(0, 1).
366		Background(lipgloss.Color("#FF8EC7")).
367		Foreground(lipgloss.Color("#F1F1F1"))
368
369	s.StatusBarBranch = lipgloss.NewStyle().
370		Padding(0, 1).
371		Background(lipgloss.Color("#6E6ED8")).
372		Foreground(lipgloss.Color("#F1F1F1"))
373
374	s.Tabs = lipgloss.NewStyle()
375
376	s.TabInactive = lipgloss.NewStyle().
377		Foreground(lipgloss.Color("15"))
378
379	s.TabActive = lipgloss.NewStyle().
380		Foreground(lipgloss.Color("#6E6ED8")).
381		Underline(true)
382
383	s.TabSeparator = lipgloss.NewStyle().
384		SetString("│").
385		Padding(0, 1).
386		Foreground(lipgloss.Color("241"))
387
388	return s
389}