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