style.go

  1package style
  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 TUI.
 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	SelectedMenuItem lipgloss.Style
 22
 23	RepoTitleBorder lipgloss.Border
 24	RepoNoteBorder  lipgloss.Border
 25	RepoBodyBorder  lipgloss.Border
 26
 27	RepoTitle    lipgloss.Style
 28	RepoTitleBox lipgloss.Style
 29	RepoNote     lipgloss.Style
 30	RepoNoteBox  lipgloss.Style
 31	RepoBody     lipgloss.Style
 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	LogItemSelector   lipgloss.Style
 46	LogItemActive     lipgloss.Style
 47	LogItemInactive   lipgloss.Style
 48	LogItemHash       lipgloss.Style
 49	LogCommit         lipgloss.Style
 50	LogCommitHash     lipgloss.Style
 51	LogCommitAuthor   lipgloss.Style
 52	LogCommitDate     lipgloss.Style
 53	LogCommitBody     lipgloss.Style
 54	LogCommitStatsAdd lipgloss.Style
 55	LogCommitStatsDel lipgloss.Style
 56	LogPaginator      lipgloss.Style
 57
 58	RefItemSelector lipgloss.Style
 59	RefItemActive   lipgloss.Style
 60	RefItemInactive lipgloss.Style
 61	RefItemBranch   lipgloss.Style
 62	RefItemTag      lipgloss.Style
 63	RefPaginator    lipgloss.Style
 64
 65	TreeItemSelector lipgloss.Style
 66	TreeItemActive   lipgloss.Style
 67	TreeItemInactive lipgloss.Style
 68	TreeFileDir      lipgloss.Style
 69	TreeFileMode     lipgloss.Style
 70	TreeFileSize     lipgloss.Style
 71	TreeFileContent  lipgloss.Style
 72	TreePaginator    lipgloss.Style
 73	TreeNoItems      lipgloss.Style
 74
 75	Spinner lipgloss.Style
 76}
 77
 78// DefaultStyles returns default styles for the TUI.
 79func DefaultStyles() *Styles {
 80	s := new(Styles)
 81
 82	s.ActiveBorderColor = lipgloss.Color("62")
 83	s.InactiveBorderColor = lipgloss.Color("236")
 84
 85	s.App = lipgloss.NewStyle().
 86		Margin(1, 2)
 87
 88	s.Header = lipgloss.NewStyle().
 89		Foreground(lipgloss.Color("62")).
 90		Align(lipgloss.Right).
 91		Bold(true)
 92
 93	s.Menu = lipgloss.NewStyle().
 94		BorderStyle(lipgloss.RoundedBorder()).
 95		BorderForeground(s.InactiveBorderColor).
 96		Padding(1, 2).
 97		MarginRight(1).
 98		Width(24)
 99
100	s.MenuCursor = lipgloss.NewStyle().
101		Foreground(lipgloss.Color("213")).
102		SetString(">")
103
104	s.MenuItem = lipgloss.NewStyle().
105		PaddingLeft(2)
106
107	s.SelectedMenuItem = lipgloss.NewStyle().
108		Foreground(lipgloss.Color("207")).
109		PaddingLeft(1)
110
111	s.RepoTitleBorder = lipgloss.Border{
112		Top:         "─",
113		Bottom:      "─",
114		Left:        "│",
115		Right:       "│",
116		TopLeft:     "╭",
117		TopRight:    "┬",
118		BottomLeft:  "├",
119		BottomRight: "┴",
120	}
121
122	s.RepoNoteBorder = lipgloss.Border{
123		Top:         "─",
124		Bottom:      "─",
125		Left:        "│",
126		Right:       "│",
127		TopLeft:     "┬",
128		TopRight:    "╮",
129		BottomLeft:  "┴",
130		BottomRight: "┤",
131	}
132
133	s.RepoBodyBorder = lipgloss.Border{
134		Top:         "",
135		Bottom:      "─",
136		Left:        "│",
137		Right:       "│",
138		TopLeft:     "",
139		TopRight:    "",
140		BottomLeft:  "╰",
141		BottomRight: "╯",
142	}
143
144	s.RepoTitle = lipgloss.NewStyle().
145		Padding(0, 2)
146
147	s.RepoTitleBox = lipgloss.NewStyle().
148		BorderStyle(s.RepoTitleBorder).
149		BorderForeground(s.InactiveBorderColor)
150
151	s.RepoNote = lipgloss.NewStyle().
152		Padding(0, 2).
153		Foreground(lipgloss.Color("168"))
154
155	s.RepoNoteBox = lipgloss.NewStyle().
156		BorderStyle(s.RepoNoteBorder).
157		BorderForeground(s.InactiveBorderColor).
158		BorderTop(true).
159		BorderRight(true).
160		BorderBottom(true).
161		BorderLeft(false)
162
163	s.RepoBody = lipgloss.NewStyle().
164		BorderStyle(s.RepoBodyBorder).
165		BorderForeground(s.InactiveBorderColor).
166		PaddingRight(1)
167
168	s.Footer = lipgloss.NewStyle().
169		MarginTop(1)
170
171	s.Branch = lipgloss.NewStyle().
172		Foreground(lipgloss.Color("203")).
173		Background(lipgloss.Color("236")).
174		Padding(0, 1)
175
176	s.HelpKey = lipgloss.NewStyle().
177		Foreground(lipgloss.Color("241"))
178
179	s.HelpValue = lipgloss.NewStyle().
180		Foreground(lipgloss.Color("239"))
181
182	s.HelpDivider = lipgloss.NewStyle().
183		Foreground(lipgloss.Color("237")).
184		SetString(" • ")
185
186	s.Error = lipgloss.NewStyle().
187		Padding(1)
188
189	s.ErrorTitle = lipgloss.NewStyle().
190		Foreground(lipgloss.Color("230")).
191		Background(lipgloss.Color("204")).
192		Bold(true).
193		Padding(0, 1)
194
195	s.ErrorBody = lipgloss.NewStyle().
196		Foreground(lipgloss.Color("252")).
197		MarginLeft(2).
198		Width(52) // for now
199
200	s.AboutNoReadme = lipgloss.NewStyle().
201		MarginLeft(1).
202		Foreground(lipgloss.Color("#626262"))
203
204	s.LogItemInactive = lipgloss.NewStyle().
205		MarginLeft(1)
206
207	s.LogItemSelector = s.LogItemInactive.Copy().
208		Width(1).
209		Foreground(lipgloss.Color("#B083EA"))
210
211	s.LogItemActive = s.LogItemInactive.Copy().
212		Bold(true)
213
214	s.LogItemHash = s.LogItemInactive.Copy().
215		Width(7).
216		Foreground(lipgloss.Color("#A3A322"))
217
218	s.LogCommit = lipgloss.NewStyle().
219		Margin(0, 2)
220
221	s.LogCommitHash = s.LogItemHash.Copy().
222		UnsetMarginLeft().
223		UnsetWidth().
224		Bold(true)
225
226	s.LogCommitBody = lipgloss.NewStyle().
227		MarginTop(1).
228		MarginLeft(2)
229
230	s.LogCommitStatsAdd = lipgloss.NewStyle().
231		Foreground(lipgloss.Color("#00D787")).
232		Bold(true)
233
234	s.LogCommitStatsDel = lipgloss.NewStyle().
235		Foreground(lipgloss.Color("#FD5B5B")).
236		Bold(true)
237
238	s.LogPaginator = lipgloss.NewStyle().
239		Margin(0).
240		Align(lipgloss.Center)
241
242	s.RefItemSelector = s.LogItemSelector.Copy()
243
244	s.RefItemActive = s.LogItemActive.Copy()
245
246	s.RefItemInactive = s.LogItemInactive.Copy()
247
248	s.RefItemBranch = lipgloss.NewStyle()
249
250	s.RefItemTag = lipgloss.NewStyle().
251		Foreground(lipgloss.Color("#A3A322"))
252
253	s.RefPaginator = s.LogPaginator.Copy()
254
255	s.TreeItemSelector = s.LogItemSelector.Copy()
256
257	s.TreeItemActive = s.LogItemActive.Copy()
258
259	s.TreeItemInactive = s.LogItemInactive.Copy()
260
261	s.TreeFileDir = lipgloss.NewStyle().
262		Foreground(lipgloss.Color("#00AAFF"))
263
264	s.TreeFileMode = s.LogItemInactive.Copy().
265		Width(10).
266		Foreground(lipgloss.Color("#777777"))
267
268	s.TreeFileSize = s.LogItemInactive.Copy().
269		Foreground(lipgloss.Color("252"))
270
271	s.TreeFileContent = lipgloss.NewStyle()
272
273	s.TreePaginator = s.LogPaginator.Copy()
274
275	s.TreeNoItems = s.AboutNoReadme.Copy()
276
277	s.Spinner = lipgloss.NewStyle().
278		MarginLeft(1).
279		Foreground(lipgloss.Color("205"))
280
281	return s
282}