monokai.go 6.4 KB

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