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	RepoTitleBorder lipgloss.Border
 28	RepoNoteBorder  lipgloss.Border
 29	RepoBodyBorder  lipgloss.Border
 30
 31	RepoTitle    lipgloss.Style
 32	RepoTitleBox lipgloss.Style
 33	RepoNote     lipgloss.Style
 34	RepoNoteBox  lipgloss.Style
 35	RepoBody     lipgloss.Style
 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	LogItemSelector   lipgloss.Style
 50	LogItemActive     lipgloss.Style
 51	LogItemInactive   lipgloss.Style
 52	LogItemHash       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	RefItemTag      lipgloss.Style
 67	RefPaginator    lipgloss.Style
 68
 69	TreeItemSelector lipgloss.Style
 70	TreeItemActive   lipgloss.Style
 71	TreeItemInactive lipgloss.Style
 72	TreeFileDir      lipgloss.Style
 73	TreeFileMode     lipgloss.Style
 74	TreeFileSize     lipgloss.Style
 75	TreeFileContent  lipgloss.Style
 76	TreePaginator    lipgloss.Style
 77	TreeNoItems      lipgloss.Style
 78
 79	Spinner lipgloss.Style
 80
 81	CodeNoContent lipgloss.Style
 82}
 83
 84// DefaultStyles returns default styles for the UI.
 85func DefaultStyles() *Styles {
 86	s := new(Styles)
 87
 88	s.ActiveBorderColor = lipgloss.Color("62")
 89	s.InactiveBorderColor = lipgloss.Color("241")
 90
 91	s.App = lipgloss.NewStyle().
 92		Margin(1, 2)
 93
 94	s.Header = lipgloss.NewStyle().
 95		Foreground(lipgloss.Color("15")).
 96		Align(lipgloss.Right).
 97		Height(1).
 98		Bold(true)
 99
100	s.Menu = lipgloss.NewStyle().
101		BorderStyle(lipgloss.RoundedBorder()).
102		BorderForeground(s.InactiveBorderColor).
103		Padding(1, 2).
104		MarginRight(1).
105		Width(24)
106
107	s.MenuCursor = lipgloss.NewStyle().
108		Foreground(lipgloss.Color("213")).
109		SetString(">")
110
111	s.MenuItem = lipgloss.NewStyle().
112		Padding(1, 2).
113		Height(4).
114		Border(lipgloss.RoundedBorder()).
115		BorderForeground(lipgloss.Color("241"))
116
117	s.MenuLastUpdate = lipgloss.NewStyle().
118		Foreground(lipgloss.Color("241")).
119		Align(lipgloss.Right)
120
121	s.SelectorBox = lipgloss.NewStyle().
122		Width(64)
123
124	s.ReadmeBox = lipgloss.NewStyle().
125		Margin(1, 1, 1, 0)
126
127	s.RepoTitleBorder = lipgloss.Border{
128		Top:         "─",
129		Bottom:      "─",
130		Left:        "│",
131		Right:       "│",
132		TopLeft:     "╭",
133		TopRight:    "┬",
134		BottomLeft:  "├",
135		BottomRight: "┴",
136	}
137
138	s.RepoNoteBorder = lipgloss.Border{
139		Top:         "─",
140		Bottom:      "─",
141		Left:        "│",
142		Right:       "│",
143		TopLeft:     "┬",
144		TopRight:    "╮",
145		BottomLeft:  "┴",
146		BottomRight: "┤",
147	}
148
149	s.RepoBodyBorder = lipgloss.Border{
150		Top:         "",
151		Bottom:      "─",
152		Left:        "│",
153		Right:       "│",
154		TopLeft:     "",
155		TopRight:    "",
156		BottomLeft:  "╰",
157		BottomRight: "╯",
158	}
159
160	s.RepoTitle = lipgloss.NewStyle().
161		Padding(0, 2)
162
163	s.RepoTitleBox = lipgloss.NewStyle().
164		BorderStyle(s.RepoTitleBorder).
165		BorderForeground(s.InactiveBorderColor)
166
167	s.RepoNote = lipgloss.NewStyle().
168		Padding(0, 2).
169		Foreground(lipgloss.Color("168"))
170
171	s.RepoNoteBox = lipgloss.NewStyle().
172		BorderStyle(s.RepoNoteBorder).
173		BorderForeground(s.InactiveBorderColor).
174		BorderTop(true).
175		BorderRight(true).
176		BorderBottom(true).
177		BorderLeft(false)
178
179	s.RepoBody = lipgloss.NewStyle().
180		BorderStyle(s.RepoBodyBorder).
181		BorderForeground(s.InactiveBorderColor).
182		PaddingRight(1)
183
184	s.Footer = lipgloss.NewStyle().
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		Padding(1)
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		Width(52) // for now
215
216	s.AboutNoReadme = lipgloss.NewStyle().
217		MarginTop(1).
218		MarginLeft(2).
219		Foreground(lipgloss.Color("#626262"))
220
221	s.LogItemInactive = lipgloss.NewStyle().
222		MarginLeft(1)
223
224	s.LogItemSelector = s.LogItemInactive.Copy().
225		Width(1).
226		Foreground(lipgloss.Color("#B083EA"))
227
228	s.LogItemActive = s.LogItemInactive.Copy().
229		Bold(true)
230
231	s.LogItemHash = s.LogItemInactive.Copy().
232		Width(7).
233		Foreground(lipgloss.Color("#A3A322"))
234
235	s.LogCommit = lipgloss.NewStyle().
236		Margin(0, 2)
237
238	s.LogCommitHash = s.LogItemHash.Copy().
239		UnsetMarginLeft().
240		UnsetWidth().
241		Bold(true)
242
243	s.LogCommitBody = lipgloss.NewStyle().
244		MarginTop(1).
245		MarginLeft(2)
246
247	s.LogCommitStatsAdd = lipgloss.NewStyle().
248		Foreground(lipgloss.Color("#00D787")).
249		Bold(true)
250
251	s.LogCommitStatsDel = lipgloss.NewStyle().
252		Foreground(lipgloss.Color("#FD5B5B")).
253		Bold(true)
254
255	s.LogPaginator = lipgloss.NewStyle().
256		Margin(0).
257		Align(lipgloss.Center)
258
259	s.RefItemSelector = s.LogItemSelector.Copy()
260
261	s.RefItemActive = s.LogItemActive.Copy()
262
263	s.RefItemInactive = s.LogItemInactive.Copy()
264
265	s.RefItemBranch = lipgloss.NewStyle()
266
267	s.RefItemTag = lipgloss.NewStyle().
268		Foreground(lipgloss.Color("#A3A322"))
269
270	s.RefPaginator = s.LogPaginator.Copy()
271
272	s.TreeItemSelector = s.LogItemSelector.Copy()
273
274	s.TreeItemActive = s.LogItemActive.Copy()
275
276	s.TreeItemInactive = s.LogItemInactive.Copy()
277
278	s.TreeFileDir = lipgloss.NewStyle().
279		Foreground(lipgloss.Color("#00AAFF"))
280
281	s.TreeFileMode = s.LogItemInactive.Copy().
282		Width(10).
283		Foreground(lipgloss.Color("#777777"))
284
285	s.TreeFileSize = s.LogItemInactive.Copy().
286		Foreground(lipgloss.Color("252"))
287
288	s.TreeFileContent = lipgloss.NewStyle()
289
290	s.TreePaginator = s.LogPaginator.Copy()
291
292	s.TreeNoItems = s.AboutNoReadme.Copy()
293
294	s.Spinner = lipgloss.NewStyle().
295		MarginTop(1).
296		MarginLeft(2).
297		Foreground(lipgloss.Color("205"))
298
299	s.CodeNoContent = lipgloss.NewStyle().
300		SetString("No Content.").
301		MarginTop(1).
302		MarginLeft(2).
303		Foreground(lipgloss.Color("#626262"))
304
305	return s
306}