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