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