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