1package theme
2
3import (
4 "github.com/charmbracelet/lipgloss"
5)
6
7// MonokaiProTheme implements the Theme interface with Monokai Pro colors.
8// It provides both dark and light variants.
9type MonokaiProTheme struct {
10 BaseTheme
11}
12
13// NewMonokaiProTheme creates a new instance of the Monokai Pro theme.
14func NewMonokaiProTheme() *MonokaiProTheme {
15 // Monokai Pro color palette (dark mode)
16 darkBackground := "#2d2a2e"
17 darkCurrentLine := "#403e41"
18 darkSelection := "#5b595c"
19 darkForeground := "#fcfcfa"
20 darkComment := "#727072"
21 darkRed := "#ff6188"
22 darkOrange := "#fc9867"
23 darkYellow := "#ffd866"
24 darkGreen := "#a9dc76"
25 darkCyan := "#78dce8"
26 darkBlue := "#ab9df2"
27 darkPurple := "#ab9df2"
28 darkBorder := "#403e41"
29
30 // Light mode colors (adapted from dark)
31 lightBackground := "#fafafa"
32 lightCurrentLine := "#f0f0f0"
33 lightSelection := "#e5e5e6"
34 lightForeground := "#2d2a2e"
35 lightComment := "#939293"
36 lightRed := "#f92672"
37 lightOrange := "#fd971f"
38 lightYellow := "#e6db74"
39 lightGreen := "#9bca65"
40 lightCyan := "#66d9ef"
41 lightBlue := "#7e75db"
42 lightPurple := "#ae81ff"
43 lightBorder := "#d3d3d3"
44
45 theme := &MonokaiProTheme{}
46
47 // Base colors
48 theme.PrimaryColor = lipgloss.AdaptiveColor{
49 Dark: darkCyan,
50 Light: lightCyan,
51 }
52 theme.SecondaryColor = lipgloss.AdaptiveColor{
53 Dark: darkPurple,
54 Light: lightPurple,
55 }
56 theme.AccentColor = lipgloss.AdaptiveColor{
57 Dark: darkOrange,
58 Light: lightOrange,
59 }
60
61 // Status colors
62 theme.ErrorColor = lipgloss.AdaptiveColor{
63 Dark: darkRed,
64 Light: lightRed,
65 }
66 theme.WarningColor = lipgloss.AdaptiveColor{
67 Dark: darkOrange,
68 Light: lightOrange,
69 }
70 theme.SuccessColor = lipgloss.AdaptiveColor{
71 Dark: darkGreen,
72 Light: lightGreen,
73 }
74 theme.InfoColor = lipgloss.AdaptiveColor{
75 Dark: darkBlue,
76 Light: lightBlue,
77 }
78
79 // Text colors
80 theme.TextColor = lipgloss.AdaptiveColor{
81 Dark: darkForeground,
82 Light: lightForeground,
83 }
84 theme.TextMutedColor = lipgloss.AdaptiveColor{
85 Dark: darkComment,
86 Light: lightComment,
87 }
88 theme.TextEmphasizedColor = lipgloss.AdaptiveColor{
89 Dark: darkYellow,
90 Light: lightYellow,
91 }
92
93 // Background colors
94 theme.BackgroundColor = lipgloss.AdaptiveColor{
95 Dark: darkBackground,
96 Light: lightBackground,
97 }
98 theme.BackgroundSecondaryColor = lipgloss.AdaptiveColor{
99 Dark: darkCurrentLine,
100 Light: lightCurrentLine,
101 }
102 theme.BackgroundDarkerColor = lipgloss.AdaptiveColor{
103 Dark: "#221f22", // Slightly darker than background
104 Light: "#ffffff", // Slightly lighter than background
105 }
106
107 // Border colors
108 theme.BorderNormalColor = lipgloss.AdaptiveColor{
109 Dark: darkBorder,
110 Light: lightBorder,
111 }
112 theme.BorderFocusedColor = lipgloss.AdaptiveColor{
113 Dark: darkCyan,
114 Light: lightCyan,
115 }
116 theme.BorderDimColor = lipgloss.AdaptiveColor{
117 Dark: darkSelection,
118 Light: lightSelection,
119 }
120
121 // Diff view colors
122 theme.DiffAddedColor = lipgloss.AdaptiveColor{
123 Dark: "#a9dc76",
124 Light: "#9bca65",
125 }
126 theme.DiffRemovedColor = lipgloss.AdaptiveColor{
127 Dark: "#ff6188",
128 Light: "#f92672",
129 }
130 theme.DiffContextColor = lipgloss.AdaptiveColor{
131 Dark: "#a0a0a0",
132 Light: "#757575",
133 }
134 theme.DiffHunkHeaderColor = lipgloss.AdaptiveColor{
135 Dark: "#a0a0a0",
136 Light: "#757575",
137 }
138 theme.DiffHighlightAddedColor = lipgloss.AdaptiveColor{
139 Dark: "#c2e7a9",
140 Light: "#c5e0b4",
141 }
142 theme.DiffHighlightRemovedColor = lipgloss.AdaptiveColor{
143 Dark: "#ff8ca6",
144 Light: "#ffb3c8",
145 }
146 theme.DiffAddedBgColor = lipgloss.AdaptiveColor{
147 Dark: "#3a4a35",
148 Light: "#e8f5e9",
149 }
150 theme.DiffRemovedBgColor = lipgloss.AdaptiveColor{
151 Dark: "#4a3439",
152 Light: "#ffebee",
153 }
154 theme.DiffContextBgColor = lipgloss.AdaptiveColor{
155 Dark: darkBackground,
156 Light: lightBackground,
157 }
158 theme.DiffLineNumberColor = lipgloss.AdaptiveColor{
159 Dark: "#888888",
160 Light: "#9e9e9e",
161 }
162 theme.DiffAddedLineNumberBgColor = lipgloss.AdaptiveColor{
163 Dark: "#2d3a28",
164 Light: "#c8e6c9",
165 }
166 theme.DiffRemovedLineNumberBgColor = lipgloss.AdaptiveColor{
167 Dark: "#3d2a2e",
168 Light: "#ffcdd2",
169 }
170
171 // Markdown colors
172 theme.MarkdownTextColor = lipgloss.AdaptiveColor{
173 Dark: darkForeground,
174 Light: lightForeground,
175 }
176 theme.MarkdownHeadingColor = lipgloss.AdaptiveColor{
177 Dark: darkPurple,
178 Light: lightPurple,
179 }
180 theme.MarkdownLinkColor = lipgloss.AdaptiveColor{
181 Dark: darkCyan,
182 Light: lightCyan,
183 }
184 theme.MarkdownLinkTextColor = lipgloss.AdaptiveColor{
185 Dark: darkBlue,
186 Light: lightBlue,
187 }
188 theme.MarkdownCodeColor = lipgloss.AdaptiveColor{
189 Dark: darkGreen,
190 Light: lightGreen,
191 }
192 theme.MarkdownBlockQuoteColor = lipgloss.AdaptiveColor{
193 Dark: darkYellow,
194 Light: lightYellow,
195 }
196 theme.MarkdownEmphColor = lipgloss.AdaptiveColor{
197 Dark: darkYellow,
198 Light: lightYellow,
199 }
200 theme.MarkdownStrongColor = lipgloss.AdaptiveColor{
201 Dark: darkOrange,
202 Light: lightOrange,
203 }
204 theme.MarkdownHorizontalRuleColor = lipgloss.AdaptiveColor{
205 Dark: darkComment,
206 Light: lightComment,
207 }
208 theme.MarkdownListItemColor = lipgloss.AdaptiveColor{
209 Dark: darkCyan,
210 Light: lightCyan,
211 }
212 theme.MarkdownListEnumerationColor = lipgloss.AdaptiveColor{
213 Dark: darkBlue,
214 Light: lightBlue,
215 }
216 theme.MarkdownImageColor = lipgloss.AdaptiveColor{
217 Dark: darkCyan,
218 Light: lightCyan,
219 }
220 theme.MarkdownImageTextColor = lipgloss.AdaptiveColor{
221 Dark: darkBlue,
222 Light: lightBlue,
223 }
224 theme.MarkdownCodeBlockColor = lipgloss.AdaptiveColor{
225 Dark: darkForeground,
226 Light: lightForeground,
227 }
228
229 // Syntax highlighting colors
230 theme.SyntaxCommentColor = lipgloss.AdaptiveColor{
231 Dark: darkComment,
232 Light: lightComment,
233 }
234 theme.SyntaxKeywordColor = lipgloss.AdaptiveColor{
235 Dark: darkRed,
236 Light: lightRed,
237 }
238 theme.SyntaxFunctionColor = lipgloss.AdaptiveColor{
239 Dark: darkGreen,
240 Light: lightGreen,
241 }
242 theme.SyntaxVariableColor = lipgloss.AdaptiveColor{
243 Dark: darkForeground,
244 Light: lightForeground,
245 }
246 theme.SyntaxStringColor = lipgloss.AdaptiveColor{
247 Dark: darkYellow,
248 Light: lightYellow,
249 }
250 theme.SyntaxNumberColor = lipgloss.AdaptiveColor{
251 Dark: darkPurple,
252 Light: lightPurple,
253 }
254 theme.SyntaxTypeColor = lipgloss.AdaptiveColor{
255 Dark: darkBlue,
256 Light: lightBlue,
257 }
258 theme.SyntaxOperatorColor = lipgloss.AdaptiveColor{
259 Dark: darkCyan,
260 Light: lightCyan,
261 }
262 theme.SyntaxPunctuationColor = lipgloss.AdaptiveColor{
263 Dark: darkForeground,
264 Light: lightForeground,
265 }
266
267 return theme
268}
269
270func init() {
271 // Register the Monokai Pro theme with the theme manager
272 RegisterTheme("monokai", NewMonokaiProTheme())
273}