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