ayu.go 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
  1. package theme
  2. import (
  3. "github.com/charmbracelet/lipgloss"
  4. )
  5. // AyuDarkTheme implements the Theme interface with Ayu Dark colors.
  6. type AyuDarkTheme struct {
  7. BaseTheme
  8. }
  9. // AyuLightTheme implements the Theme interface with Ayu Light colors.
  10. type AyuLightTheme struct {
  11. BaseTheme
  12. }
  13. // AyuMirageTheme implements the Theme interface with Ayu Mirage colors.
  14. type AyuMirageTheme struct {
  15. BaseTheme
  16. }
  17. // NewAyuDarkTheme creates a new instance of the Ayu Dark theme.
  18. func NewAyuDarkTheme() *AyuDarkTheme {
  19. // Ayu Dark color palette
  20. darkBackground := "#0f1419"
  21. darkCurrentLine := "#191f26"
  22. darkSelection := "#253340"
  23. darkForeground := "#b3b1ad"
  24. darkComment := "#5c6773"
  25. darkBlue := "#53bdfa"
  26. darkCyan := "#90e1c6"
  27. darkGreen := "#91b362"
  28. darkOrange := "#f9af4f"
  29. darkPurple := "#fae994"
  30. darkRed := "#ea6c73"
  31. darkBorder := "#253340"
  32. // Light mode approximation for terminal compatibility
  33. lightBackground := "#fafafa"
  34. lightCurrentLine := "#f0f0f0"
  35. lightSelection := "#d1d1d1"
  36. lightForeground := "#5c6773"
  37. lightComment := "#828c99"
  38. lightBlue := "#3199e1"
  39. lightCyan := "#46ba94"
  40. lightGreen := "#7c9f32"
  41. lightOrange := "#f29718"
  42. lightPurple := "#9e75c7"
  43. lightRed := "#f07171"
  44. lightBorder := "#d1d1d1"
  45. theme := &AyuDarkTheme{}
  46. // Base colors
  47. theme.PrimaryColor = lipgloss.AdaptiveColor{
  48. Dark: darkBlue,
  49. Light: lightBlue,
  50. }
  51. theme.SecondaryColor = lipgloss.AdaptiveColor{
  52. Dark: darkCyan,
  53. Light: lightCyan,
  54. }
  55. theme.AccentColor = lipgloss.AdaptiveColor{
  56. Dark: darkOrange,
  57. Light: lightOrange,
  58. }
  59. // Status colors
  60. theme.ErrorColor = lipgloss.AdaptiveColor{
  61. Dark: darkRed,
  62. Light: lightRed,
  63. }
  64. theme.WarningColor = lipgloss.AdaptiveColor{
  65. Dark: darkOrange,
  66. Light: lightOrange,
  67. }
  68. theme.SuccessColor = lipgloss.AdaptiveColor{
  69. Dark: darkGreen,
  70. Light: lightGreen,
  71. }
  72. theme.InfoColor = lipgloss.AdaptiveColor{
  73. Dark: darkCyan,
  74. Light: lightCyan,
  75. }
  76. // Text colors
  77. theme.TextColor = lipgloss.AdaptiveColor{
  78. Dark: darkForeground,
  79. Light: lightForeground,
  80. }
  81. theme.TextMutedColor = lipgloss.AdaptiveColor{
  82. Dark: darkComment,
  83. Light: lightComment,
  84. }
  85. theme.TextEmphasizedColor = lipgloss.AdaptiveColor{
  86. Dark: darkPurple,
  87. Light: lightPurple,
  88. }
  89. // Background colors
  90. theme.BackgroundColor = lipgloss.AdaptiveColor{
  91. Dark: darkBackground,
  92. Light: lightBackground,
  93. }
  94. theme.BackgroundSecondaryColor = lipgloss.AdaptiveColor{
  95. Dark: darkCurrentLine,
  96. Light: lightCurrentLine,
  97. }
  98. theme.BackgroundDarkerColor = lipgloss.AdaptiveColor{
  99. Dark: "#0b0e14", // Darker than background
  100. Light: "#ffffff", // Lighter than background
  101. }
  102. // Border colors
  103. theme.BorderNormalColor = lipgloss.AdaptiveColor{
  104. Dark: darkBorder,
  105. Light: lightBorder,
  106. }
  107. theme.BorderFocusedColor = lipgloss.AdaptiveColor{
  108. Dark: darkBlue,
  109. Light: lightBlue,
  110. }
  111. theme.BorderDimColor = lipgloss.AdaptiveColor{
  112. Dark: darkSelection,
  113. Light: lightSelection,
  114. }
  115. // Diff view colors
  116. theme.DiffAddedColor = lipgloss.AdaptiveColor{
  117. Dark: darkGreen,
  118. Light: lightGreen,
  119. }
  120. theme.DiffRemovedColor = lipgloss.AdaptiveColor{
  121. Dark: darkRed,
  122. Light: lightRed,
  123. }
  124. theme.DiffContextColor = lipgloss.AdaptiveColor{
  125. Dark: darkComment,
  126. Light: lightComment,
  127. }
  128. theme.DiffHunkHeaderColor = lipgloss.AdaptiveColor{
  129. Dark: darkBlue,
  130. Light: lightBlue,
  131. }
  132. theme.DiffHighlightAddedColor = lipgloss.AdaptiveColor{
  133. Dark: "#91b362",
  134. Light: "#a5d6a7",
  135. }
  136. theme.DiffHighlightRemovedColor = lipgloss.AdaptiveColor{
  137. Dark: "#ea6c73",
  138. Light: "#ef9a9a",
  139. }
  140. theme.DiffAddedBgColor = lipgloss.AdaptiveColor{
  141. Dark: "#1f2c1f",
  142. Light: "#e8f5e9",
  143. }
  144. theme.DiffRemovedBgColor = lipgloss.AdaptiveColor{
  145. Dark: "#2c1f1f",
  146. Light: "#ffebee",
  147. }
  148. theme.DiffContextBgColor = lipgloss.AdaptiveColor{
  149. Dark: darkBackground,
  150. Light: lightBackground,
  151. }
  152. theme.DiffLineNumberColor = lipgloss.AdaptiveColor{
  153. Dark: darkComment,
  154. Light: lightComment,
  155. }
  156. theme.DiffAddedLineNumberBgColor = lipgloss.AdaptiveColor{
  157. Dark: "#1a261a",
  158. Light: "#c8e6c9",
  159. }
  160. theme.DiffRemovedLineNumberBgColor = lipgloss.AdaptiveColor{
  161. Dark: "#261a1a",
  162. Light: "#ffcdd2",
  163. }
  164. // Markdown colors
  165. theme.MarkdownTextColor = lipgloss.AdaptiveColor{
  166. Dark: darkForeground,
  167. Light: lightForeground,
  168. }
  169. theme.MarkdownHeadingColor = lipgloss.AdaptiveColor{
  170. Dark: darkBlue,
  171. Light: lightBlue,
  172. }
  173. theme.MarkdownLinkColor = lipgloss.AdaptiveColor{
  174. Dark: darkCyan,
  175. Light: lightCyan,
  176. }
  177. theme.MarkdownLinkTextColor = lipgloss.AdaptiveColor{
  178. Dark: darkBlue,
  179. Light: lightBlue,
  180. }
  181. theme.MarkdownCodeColor = lipgloss.AdaptiveColor{
  182. Dark: darkGreen,
  183. Light: lightGreen,
  184. }
  185. theme.MarkdownBlockQuoteColor = lipgloss.AdaptiveColor{
  186. Dark: darkComment,
  187. Light: lightComment,
  188. }
  189. theme.MarkdownEmphColor = lipgloss.AdaptiveColor{
  190. Dark: darkPurple,
  191. Light: lightPurple,
  192. }
  193. theme.MarkdownStrongColor = lipgloss.AdaptiveColor{
  194. Dark: darkOrange,
  195. Light: lightOrange,
  196. }
  197. theme.MarkdownHorizontalRuleColor = lipgloss.AdaptiveColor{
  198. Dark: darkComment,
  199. Light: lightComment,
  200. }
  201. theme.MarkdownListItemColor = lipgloss.AdaptiveColor{
  202. Dark: darkBlue,
  203. Light: lightBlue,
  204. }
  205. theme.MarkdownListEnumerationColor = lipgloss.AdaptiveColor{
  206. Dark: darkCyan,
  207. Light: lightCyan,
  208. }
  209. theme.MarkdownImageColor = lipgloss.AdaptiveColor{
  210. Dark: darkBlue,
  211. Light: lightBlue,
  212. }
  213. theme.MarkdownImageTextColor = lipgloss.AdaptiveColor{
  214. Dark: darkCyan,
  215. Light: lightCyan,
  216. }
  217. theme.MarkdownCodeBlockColor = lipgloss.AdaptiveColor{
  218. Dark: darkForeground,
  219. Light: lightForeground,
  220. }
  221. // Syntax highlighting colors
  222. theme.SyntaxCommentColor = lipgloss.AdaptiveColor{
  223. Dark: darkComment,
  224. Light: lightComment,
  225. }
  226. theme.SyntaxKeywordColor = lipgloss.AdaptiveColor{
  227. Dark: darkPurple,
  228. Light: lightPurple,
  229. }
  230. theme.SyntaxFunctionColor = lipgloss.AdaptiveColor{
  231. Dark: darkBlue,
  232. Light: lightBlue,
  233. }
  234. theme.SyntaxVariableColor = lipgloss.AdaptiveColor{
  235. Dark: darkForeground,
  236. Light: lightForeground,
  237. }
  238. theme.SyntaxStringColor = lipgloss.AdaptiveColor{
  239. Dark: darkGreen,
  240. Light: lightGreen,
  241. }
  242. theme.SyntaxNumberColor = lipgloss.AdaptiveColor{
  243. Dark: darkPurple,
  244. Light: lightPurple,
  245. }
  246. theme.SyntaxTypeColor = lipgloss.AdaptiveColor{
  247. Dark: darkCyan,
  248. Light: lightCyan,
  249. }
  250. theme.SyntaxOperatorColor = lipgloss.AdaptiveColor{
  251. Dark: darkOrange,
  252. Light: lightOrange,
  253. }
  254. theme.SyntaxPunctuationColor = lipgloss.AdaptiveColor{
  255. Dark: darkForeground,
  256. Light: lightForeground,
  257. }
  258. return theme
  259. }
  260. func init() {
  261. // Register all three Ayu theme variants with the theme manager
  262. RegisterTheme("ayu", NewAyuDarkTheme())
  263. }