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