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