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