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}