tron.go 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. package theme
  2. import (
  3. "github.com/charmbracelet/lipgloss"
  4. )
  5. // TronTheme implements the Theme interface with Tron-inspired colors.
  6. // It provides both dark and light variants, though Tron is primarily a dark theme.
  7. type TronTheme struct {
  8. BaseTheme
  9. }
  10. // NewTronTheme creates a new instance of the Tron theme.
  11. func NewTronTheme() *TronTheme {
  12. // Tron color palette
  13. // Inspired by the Tron movie's neon aesthetic
  14. darkBackground := "#0c141f"
  15. darkCurrentLine := "#1a2633"
  16. darkSelection := "#1a2633"
  17. darkForeground := "#caf0ff"
  18. darkComment := "#4d6b87"
  19. darkCyan := "#00d9ff"
  20. darkBlue := "#007fff"
  21. darkOrange := "#ff9000"
  22. darkPink := "#ff00a0"
  23. darkPurple := "#b73fff"
  24. darkRed := "#ff3333"
  25. darkYellow := "#ffcc00"
  26. darkGreen := "#00ff8f"
  27. darkBorder := "#1a2633"
  28. // Light mode approximation
  29. lightBackground := "#f0f8ff"
  30. lightCurrentLine := "#e0f0ff"
  31. lightSelection := "#d0e8ff"
  32. lightForeground := "#0c141f"
  33. lightComment := "#4d6b87"
  34. lightCyan := "#0097b3"
  35. lightBlue := "#0066cc"
  36. lightOrange := "#cc7300"
  37. lightPink := "#cc0080"
  38. lightPurple := "#9932cc"
  39. lightRed := "#cc2929"
  40. lightYellow := "#cc9900"
  41. lightGreen := "#00cc72"
  42. lightBorder := "#d0e8ff"
  43. theme := &TronTheme{}
  44. // Base colors
  45. theme.PrimaryColor = lipgloss.AdaptiveColor{
  46. Dark: darkCyan,
  47. Light: lightCyan,
  48. }
  49. theme.SecondaryColor = lipgloss.AdaptiveColor{
  50. Dark: darkBlue,
  51. Light: lightBlue,
  52. }
  53. theme.AccentColor = lipgloss.AdaptiveColor{
  54. Dark: darkOrange,
  55. Light: lightOrange,
  56. }
  57. // Status colors
  58. theme.ErrorColor = lipgloss.AdaptiveColor{
  59. Dark: darkRed,
  60. Light: lightRed,
  61. }
  62. theme.WarningColor = lipgloss.AdaptiveColor{
  63. Dark: darkOrange,
  64. Light: lightOrange,
  65. }
  66. theme.SuccessColor = lipgloss.AdaptiveColor{
  67. Dark: darkGreen,
  68. Light: lightGreen,
  69. }
  70. theme.InfoColor = lipgloss.AdaptiveColor{
  71. Dark: darkCyan,
  72. Light: lightCyan,
  73. }
  74. // Text colors
  75. theme.TextColor = lipgloss.AdaptiveColor{
  76. Dark: darkForeground,
  77. Light: lightForeground,
  78. }
  79. theme.TextMutedColor = lipgloss.AdaptiveColor{
  80. Dark: darkComment,
  81. Light: lightComment,
  82. }
  83. theme.TextEmphasizedColor = lipgloss.AdaptiveColor{
  84. Dark: darkYellow,
  85. Light: lightYellow,
  86. }
  87. // Background colors
  88. theme.BackgroundColor = lipgloss.AdaptiveColor{
  89. Dark: darkBackground,
  90. Light: lightBackground,
  91. }
  92. theme.BackgroundSecondaryColor = lipgloss.AdaptiveColor{
  93. Dark: darkCurrentLine,
  94. Light: lightCurrentLine,
  95. }
  96. theme.BackgroundDarkerColor = lipgloss.AdaptiveColor{
  97. Dark: "#070d14", // Slightly darker than background
  98. Light: "#ffffff", // Slightly lighter than background
  99. }
  100. // Border colors
  101. theme.BorderNormalColor = lipgloss.AdaptiveColor{
  102. Dark: darkBorder,
  103. Light: lightBorder,
  104. }
  105. theme.BorderFocusedColor = lipgloss.AdaptiveColor{
  106. Dark: darkCyan,
  107. Light: lightCyan,
  108. }
  109. theme.BorderDimColor = lipgloss.AdaptiveColor{
  110. Dark: darkSelection,
  111. Light: lightSelection,
  112. }
  113. // Diff view colors
  114. theme.DiffAddedColor = lipgloss.AdaptiveColor{
  115. Dark: darkGreen,
  116. Light: lightGreen,
  117. }
  118. theme.DiffRemovedColor = lipgloss.AdaptiveColor{
  119. Dark: darkRed,
  120. Light: lightRed,
  121. }
  122. theme.DiffContextColor = lipgloss.AdaptiveColor{
  123. Dark: darkComment,
  124. Light: lightComment,
  125. }
  126. theme.DiffHunkHeaderColor = lipgloss.AdaptiveColor{
  127. Dark: darkBlue,
  128. Light: lightBlue,
  129. }
  130. theme.DiffHighlightAddedColor = lipgloss.AdaptiveColor{
  131. Dark: "#00ff8f",
  132. Light: "#a5d6a7",
  133. }
  134. theme.DiffHighlightRemovedColor = lipgloss.AdaptiveColor{
  135. Dark: "#ff3333",
  136. Light: "#ef9a9a",
  137. }
  138. theme.DiffAddedBgColor = lipgloss.AdaptiveColor{
  139. Dark: "#0a2a1a",
  140. Light: "#e8f5e9",
  141. }
  142. theme.DiffRemovedBgColor = lipgloss.AdaptiveColor{
  143. Dark: "#2a0a0a",
  144. Light: "#ffebee",
  145. }
  146. theme.DiffContextBgColor = lipgloss.AdaptiveColor{
  147. Dark: darkBackground,
  148. Light: lightBackground,
  149. }
  150. theme.DiffLineNumberColor = lipgloss.AdaptiveColor{
  151. Dark: darkComment,
  152. Light: lightComment,
  153. }
  154. theme.DiffAddedLineNumberBgColor = lipgloss.AdaptiveColor{
  155. Dark: "#082015",
  156. Light: "#c8e6c9",
  157. }
  158. theme.DiffRemovedLineNumberBgColor = lipgloss.AdaptiveColor{
  159. Dark: "#200808",
  160. Light: "#ffcdd2",
  161. }
  162. // Markdown colors
  163. theme.MarkdownTextColor = lipgloss.AdaptiveColor{
  164. Dark: darkForeground,
  165. Light: lightForeground,
  166. }
  167. theme.MarkdownHeadingColor = lipgloss.AdaptiveColor{
  168. Dark: darkCyan,
  169. Light: lightCyan,
  170. }
  171. theme.MarkdownLinkColor = lipgloss.AdaptiveColor{
  172. Dark: darkBlue,
  173. Light: lightBlue,
  174. }
  175. theme.MarkdownLinkTextColor = lipgloss.AdaptiveColor{
  176. Dark: darkCyan,
  177. Light: lightCyan,
  178. }
  179. theme.MarkdownCodeColor = lipgloss.AdaptiveColor{
  180. Dark: darkGreen,
  181. Light: lightGreen,
  182. }
  183. theme.MarkdownBlockQuoteColor = lipgloss.AdaptiveColor{
  184. Dark: darkYellow,
  185. Light: lightYellow,
  186. }
  187. theme.MarkdownEmphColor = lipgloss.AdaptiveColor{
  188. Dark: darkYellow,
  189. Light: lightYellow,
  190. }
  191. theme.MarkdownStrongColor = lipgloss.AdaptiveColor{
  192. Dark: darkOrange,
  193. Light: lightOrange,
  194. }
  195. theme.MarkdownHorizontalRuleColor = lipgloss.AdaptiveColor{
  196. Dark: darkComment,
  197. Light: lightComment,
  198. }
  199. theme.MarkdownListItemColor = lipgloss.AdaptiveColor{
  200. Dark: darkBlue,
  201. Light: lightBlue,
  202. }
  203. theme.MarkdownListEnumerationColor = lipgloss.AdaptiveColor{
  204. Dark: darkCyan,
  205. Light: lightCyan,
  206. }
  207. theme.MarkdownImageColor = lipgloss.AdaptiveColor{
  208. Dark: darkBlue,
  209. Light: lightBlue,
  210. }
  211. theme.MarkdownImageTextColor = lipgloss.AdaptiveColor{
  212. Dark: darkCyan,
  213. Light: lightCyan,
  214. }
  215. theme.MarkdownCodeBlockColor = lipgloss.AdaptiveColor{
  216. Dark: darkForeground,
  217. Light: lightForeground,
  218. }
  219. // Syntax highlighting colors
  220. theme.SyntaxCommentColor = lipgloss.AdaptiveColor{
  221. Dark: darkComment,
  222. Light: lightComment,
  223. }
  224. theme.SyntaxKeywordColor = lipgloss.AdaptiveColor{
  225. Dark: darkCyan,
  226. Light: lightCyan,
  227. }
  228. theme.SyntaxFunctionColor = lipgloss.AdaptiveColor{
  229. Dark: darkGreen,
  230. Light: lightGreen,
  231. }
  232. theme.SyntaxVariableColor = lipgloss.AdaptiveColor{
  233. Dark: darkOrange,
  234. Light: lightOrange,
  235. }
  236. theme.SyntaxStringColor = lipgloss.AdaptiveColor{
  237. Dark: darkYellow,
  238. Light: lightYellow,
  239. }
  240. theme.SyntaxNumberColor = lipgloss.AdaptiveColor{
  241. Dark: darkBlue,
  242. Light: lightBlue,
  243. }
  244. theme.SyntaxTypeColor = lipgloss.AdaptiveColor{
  245. Dark: darkPurple,
  246. Light: lightPurple,
  247. }
  248. theme.SyntaxOperatorColor = lipgloss.AdaptiveColor{
  249. Dark: darkPink,
  250. Light: lightPink,
  251. }
  252. theme.SyntaxPunctuationColor = lipgloss.AdaptiveColor{
  253. Dark: darkForeground,
  254. Light: lightForeground,
  255. }
  256. return theme
  257. }
  258. func init() {
  259. // Register the Tron theme with the theme manager
  260. RegisterTheme("tron", NewTronTheme())
  261. }