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