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