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