1package theme
2
3import (
4 "github.com/charmbracelet/lipgloss/v2"
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 theme := &MonokaiProTheme{}
31
32 // Base colors
33 theme.PrimaryColor = lipgloss.Color(darkCyan)
34 theme.SecondaryColor = lipgloss.Color(darkPurple)
35 theme.AccentColor = lipgloss.Color(darkOrange)
36
37 // Status colors
38 theme.ErrorColor = lipgloss.Color(darkRed)
39 theme.WarningColor = lipgloss.Color(darkOrange)
40 theme.SuccessColor = lipgloss.Color(darkGreen)
41 theme.InfoColor = lipgloss.Color(darkBlue)
42
43 // Text colors
44 theme.TextColor = lipgloss.Color(darkForeground)
45 theme.TextMutedColor = lipgloss.Color(darkComment)
46 theme.TextEmphasizedColor = lipgloss.Color(darkYellow)
47
48 // Background colors
49 theme.BackgroundColor = lipgloss.Color(darkBackground)
50 theme.BackgroundSecondaryColor = lipgloss.Color(darkCurrentLine)
51 theme.BackgroundDarkerColor = lipgloss.Color("#221f22") // Slightly darker than background
52
53 // Border colors
54 theme.BorderNormalColor = lipgloss.Color(darkBorder)
55 theme.BorderFocusedColor = lipgloss.Color(darkCyan)
56 theme.BorderDimColor = lipgloss.Color(darkSelection)
57
58 // Diff view colors
59 theme.DiffAddedColor = lipgloss.Color("#a9dc76")
60 theme.DiffRemovedColor = lipgloss.Color("#ff6188")
61 theme.DiffContextColor = lipgloss.Color("#a0a0a0")
62 theme.DiffHunkHeaderColor = lipgloss.Color("#a0a0a0")
63 theme.DiffHighlightAddedColor = lipgloss.Color("#c2e7a9")
64 theme.DiffHighlightRemovedColor = lipgloss.Color("#ff8ca6")
65 theme.DiffAddedBgColor = lipgloss.Color("#3a4a35")
66 theme.DiffRemovedBgColor = lipgloss.Color("#4a3439")
67 theme.DiffContextBgColor = lipgloss.Color(darkBackground)
68 theme.DiffLineNumberColor = lipgloss.Color("#888888")
69 theme.DiffAddedLineNumberBgColor = lipgloss.Color("#2d3a28")
70 theme.DiffRemovedLineNumberBgColor = lipgloss.Color("#3d2a2e")
71
72 // Markdown colors
73 theme.MarkdownTextColor = lipgloss.Color(darkForeground)
74 theme.MarkdownHeadingColor = lipgloss.Color(darkPurple)
75 theme.MarkdownLinkColor = lipgloss.Color(darkCyan)
76 theme.MarkdownLinkTextColor = lipgloss.Color(darkBlue)
77 theme.MarkdownCodeColor = lipgloss.Color(darkGreen)
78 theme.MarkdownBlockQuoteColor = lipgloss.Color(darkYellow)
79 theme.MarkdownEmphColor = lipgloss.Color(darkYellow)
80 theme.MarkdownStrongColor = lipgloss.Color(darkOrange)
81 theme.MarkdownHorizontalRuleColor = lipgloss.Color(darkComment)
82 theme.MarkdownListItemColor = lipgloss.Color(darkCyan)
83 theme.MarkdownListEnumerationColor = lipgloss.Color(darkBlue)
84 theme.MarkdownImageColor = lipgloss.Color(darkCyan)
85 theme.MarkdownImageTextColor = lipgloss.Color(darkBlue)
86 theme.MarkdownCodeBlockColor = lipgloss.Color(darkForeground)
87
88 // Syntax highlighting colors
89 theme.SyntaxCommentColor = lipgloss.Color(darkComment)
90 theme.SyntaxKeywordColor = lipgloss.Color(darkRed)
91 theme.SyntaxFunctionColor = lipgloss.Color(darkGreen)
92 theme.SyntaxVariableColor = lipgloss.Color(darkForeground)
93 theme.SyntaxStringColor = lipgloss.Color(darkYellow)
94 theme.SyntaxNumberColor = lipgloss.Color(darkPurple)
95 theme.SyntaxTypeColor = lipgloss.Color(darkBlue)
96 theme.SyntaxOperatorColor = lipgloss.Color(darkCyan)
97 theme.SyntaxPunctuationColor = lipgloss.Color(darkForeground)
98
99 return theme
100}
101
102// NewMonokaiProLightTheme creates a new instance of the Monokai Pro Light theme.
103func NewMonokaiProLightTheme() *MonokaiProTheme {
104 // Light mode colors (adapted from dark)
105 lightBackground := "#fafafa"
106 lightCurrentLine := "#f0f0f0"
107 lightSelection := "#e5e5e6"
108 lightForeground := "#2d2a2e"
109 lightComment := "#939293"
110 lightRed := "#f92672"
111 lightOrange := "#fd971f"
112 lightYellow := "#e6db74"
113 lightGreen := "#9bca65"
114 lightCyan := "#66d9ef"
115 lightBlue := "#7e75db"
116 lightPurple := "#ae81ff"
117 lightBorder := "#d3d3d3"
118
119 theme := &MonokaiProTheme{}
120
121 // Base colors
122 theme.PrimaryColor = lipgloss.Color(lightCyan)
123 theme.SecondaryColor = lipgloss.Color(lightPurple)
124 theme.AccentColor = lipgloss.Color(lightOrange)
125
126 // Status colors
127 theme.ErrorColor = lipgloss.Color(lightRed)
128 theme.WarningColor = lipgloss.Color(lightOrange)
129 theme.SuccessColor = lipgloss.Color(lightGreen)
130 theme.InfoColor = lipgloss.Color(lightBlue)
131
132 // Text colors
133 theme.TextColor = lipgloss.Color(lightForeground)
134 theme.TextMutedColor = lipgloss.Color(lightComment)
135 theme.TextEmphasizedColor = lipgloss.Color(lightYellow)
136
137 // Background colors
138 theme.BackgroundColor = lipgloss.Color(lightBackground)
139 theme.BackgroundSecondaryColor = lipgloss.Color(lightCurrentLine)
140 theme.BackgroundDarkerColor = lipgloss.Color("#ffffff") // Slightly lighter than background
141
142 // Border colors
143 theme.BorderNormalColor = lipgloss.Color(lightBorder)
144 theme.BorderFocusedColor = lipgloss.Color(lightCyan)
145 theme.BorderDimColor = lipgloss.Color(lightSelection)
146
147 // Diff view colors
148 theme.DiffAddedColor = lipgloss.Color("#9bca65")
149 theme.DiffRemovedColor = lipgloss.Color("#f92672")
150 theme.DiffContextColor = lipgloss.Color("#757575")
151 theme.DiffHunkHeaderColor = lipgloss.Color("#757575")
152 theme.DiffHighlightAddedColor = lipgloss.Color("#c5e0b4")
153 theme.DiffHighlightRemovedColor = lipgloss.Color("#ffb3c8")
154 theme.DiffAddedBgColor = lipgloss.Color("#e8f5e9")
155 theme.DiffRemovedBgColor = lipgloss.Color("#ffebee")
156 theme.DiffContextBgColor = lipgloss.Color(lightBackground)
157 theme.DiffLineNumberColor = lipgloss.Color("#9e9e9e")
158 theme.DiffAddedLineNumberBgColor = lipgloss.Color("#c8e6c9")
159 theme.DiffRemovedLineNumberBgColor = lipgloss.Color("#ffcdd2")
160
161 // Markdown colors
162 theme.MarkdownTextColor = lipgloss.Color(lightForeground)
163 theme.MarkdownHeadingColor = lipgloss.Color(lightPurple)
164 theme.MarkdownLinkColor = lipgloss.Color(lightCyan)
165 theme.MarkdownLinkTextColor = lipgloss.Color(lightBlue)
166 theme.MarkdownCodeColor = lipgloss.Color(lightGreen)
167 theme.MarkdownBlockQuoteColor = lipgloss.Color(lightYellow)
168 theme.MarkdownEmphColor = lipgloss.Color(lightYellow)
169 theme.MarkdownStrongColor = lipgloss.Color(lightOrange)
170 theme.MarkdownHorizontalRuleColor = lipgloss.Color(lightComment)
171 theme.MarkdownListItemColor = lipgloss.Color(lightCyan)
172 theme.MarkdownListEnumerationColor = lipgloss.Color(lightBlue)
173 theme.MarkdownImageColor = lipgloss.Color(lightCyan)
174 theme.MarkdownImageTextColor = lipgloss.Color(lightBlue)
175 theme.MarkdownCodeBlockColor = lipgloss.Color(lightForeground)
176
177 // Syntax highlighting colors
178 theme.SyntaxCommentColor = lipgloss.Color(lightComment)
179 theme.SyntaxKeywordColor = lipgloss.Color(lightRed)
180 theme.SyntaxFunctionColor = lipgloss.Color(lightGreen)
181 theme.SyntaxVariableColor = lipgloss.Color(lightForeground)
182 theme.SyntaxStringColor = lipgloss.Color(lightYellow)
183 theme.SyntaxNumberColor = lipgloss.Color(lightPurple)
184 theme.SyntaxTypeColor = lipgloss.Color(lightBlue)
185 theme.SyntaxOperatorColor = lipgloss.Color(lightCyan)
186 theme.SyntaxPunctuationColor = lipgloss.Color(lightForeground)
187
188 return theme
189}
190
191func init() {
192 // Register the Monokai Pro themes with the theme manager
193 RegisterTheme("monokai", NewMonokaiProTheme())
194 RegisterTheme("monokai-light", NewMonokaiProLightTheme())
195}