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