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