theme.go 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. package theme
  2. import (
  3. "github.com/charmbracelet/lipgloss"
  4. )
  5. // Theme defines the interface for all UI themes in the application.
  6. // All colors must be defined as lipgloss.AdaptiveColor to support
  7. // both light and dark terminal backgrounds.
  8. type Theme interface {
  9. // Base colors
  10. Primary() lipgloss.AdaptiveColor
  11. Secondary() lipgloss.AdaptiveColor
  12. Accent() lipgloss.AdaptiveColor
  13. // Status colors
  14. Error() lipgloss.AdaptiveColor
  15. Warning() lipgloss.AdaptiveColor
  16. Success() lipgloss.AdaptiveColor
  17. Info() lipgloss.AdaptiveColor
  18. // Text colors
  19. Text() lipgloss.AdaptiveColor
  20. TextMuted() lipgloss.AdaptiveColor
  21. TextEmphasized() lipgloss.AdaptiveColor
  22. // Background colors
  23. Background() lipgloss.AdaptiveColor
  24. BackgroundSecondary() lipgloss.AdaptiveColor
  25. BackgroundDarker() lipgloss.AdaptiveColor
  26. // Border colors
  27. BorderNormal() lipgloss.AdaptiveColor
  28. BorderFocused() lipgloss.AdaptiveColor
  29. BorderDim() lipgloss.AdaptiveColor
  30. // Diff view colors
  31. DiffAdded() lipgloss.AdaptiveColor
  32. DiffRemoved() lipgloss.AdaptiveColor
  33. DiffContext() lipgloss.AdaptiveColor
  34. DiffHunkHeader() lipgloss.AdaptiveColor
  35. DiffHighlightAdded() lipgloss.AdaptiveColor
  36. DiffHighlightRemoved() lipgloss.AdaptiveColor
  37. DiffAddedBg() lipgloss.AdaptiveColor
  38. DiffRemovedBg() lipgloss.AdaptiveColor
  39. DiffContextBg() lipgloss.AdaptiveColor
  40. DiffLineNumber() lipgloss.AdaptiveColor
  41. DiffAddedLineNumberBg() lipgloss.AdaptiveColor
  42. DiffRemovedLineNumberBg() lipgloss.AdaptiveColor
  43. // Markdown colors
  44. MarkdownText() lipgloss.AdaptiveColor
  45. MarkdownHeading() lipgloss.AdaptiveColor
  46. MarkdownLink() lipgloss.AdaptiveColor
  47. MarkdownLinkText() lipgloss.AdaptiveColor
  48. MarkdownCode() lipgloss.AdaptiveColor
  49. MarkdownBlockQuote() lipgloss.AdaptiveColor
  50. MarkdownEmph() lipgloss.AdaptiveColor
  51. MarkdownStrong() lipgloss.AdaptiveColor
  52. MarkdownHorizontalRule() lipgloss.AdaptiveColor
  53. MarkdownListItem() lipgloss.AdaptiveColor
  54. MarkdownListEnumeration() lipgloss.AdaptiveColor
  55. MarkdownImage() lipgloss.AdaptiveColor
  56. MarkdownImageText() lipgloss.AdaptiveColor
  57. MarkdownCodeBlock() lipgloss.AdaptiveColor
  58. // Syntax highlighting colors
  59. SyntaxComment() lipgloss.AdaptiveColor
  60. SyntaxKeyword() lipgloss.AdaptiveColor
  61. SyntaxFunction() lipgloss.AdaptiveColor
  62. SyntaxVariable() lipgloss.AdaptiveColor
  63. SyntaxString() lipgloss.AdaptiveColor
  64. SyntaxNumber() lipgloss.AdaptiveColor
  65. SyntaxType() lipgloss.AdaptiveColor
  66. SyntaxOperator() lipgloss.AdaptiveColor
  67. SyntaxPunctuation() lipgloss.AdaptiveColor
  68. }
  69. // BaseTheme provides a default implementation of the Theme interface
  70. // that can be embedded in concrete theme implementations.
  71. type BaseTheme struct {
  72. // Base colors
  73. PrimaryColor lipgloss.AdaptiveColor
  74. SecondaryColor lipgloss.AdaptiveColor
  75. AccentColor lipgloss.AdaptiveColor
  76. // Status colors
  77. ErrorColor lipgloss.AdaptiveColor
  78. WarningColor lipgloss.AdaptiveColor
  79. SuccessColor lipgloss.AdaptiveColor
  80. InfoColor lipgloss.AdaptiveColor
  81. // Text colors
  82. TextColor lipgloss.AdaptiveColor
  83. TextMutedColor lipgloss.AdaptiveColor
  84. TextEmphasizedColor lipgloss.AdaptiveColor
  85. // Background colors
  86. BackgroundColor lipgloss.AdaptiveColor
  87. BackgroundSecondaryColor lipgloss.AdaptiveColor
  88. BackgroundDarkerColor lipgloss.AdaptiveColor
  89. // Border colors
  90. BorderNormalColor lipgloss.AdaptiveColor
  91. BorderFocusedColor lipgloss.AdaptiveColor
  92. BorderDimColor lipgloss.AdaptiveColor
  93. // Diff view colors
  94. DiffAddedColor lipgloss.AdaptiveColor
  95. DiffRemovedColor lipgloss.AdaptiveColor
  96. DiffContextColor lipgloss.AdaptiveColor
  97. DiffHunkHeaderColor lipgloss.AdaptiveColor
  98. DiffHighlightAddedColor lipgloss.AdaptiveColor
  99. DiffHighlightRemovedColor lipgloss.AdaptiveColor
  100. DiffAddedBgColor lipgloss.AdaptiveColor
  101. DiffRemovedBgColor lipgloss.AdaptiveColor
  102. DiffContextBgColor lipgloss.AdaptiveColor
  103. DiffLineNumberColor lipgloss.AdaptiveColor
  104. DiffAddedLineNumberBgColor lipgloss.AdaptiveColor
  105. DiffRemovedLineNumberBgColor lipgloss.AdaptiveColor
  106. // Markdown colors
  107. MarkdownTextColor lipgloss.AdaptiveColor
  108. MarkdownHeadingColor lipgloss.AdaptiveColor
  109. MarkdownLinkColor lipgloss.AdaptiveColor
  110. MarkdownLinkTextColor lipgloss.AdaptiveColor
  111. MarkdownCodeColor lipgloss.AdaptiveColor
  112. MarkdownBlockQuoteColor lipgloss.AdaptiveColor
  113. MarkdownEmphColor lipgloss.AdaptiveColor
  114. MarkdownStrongColor lipgloss.AdaptiveColor
  115. MarkdownHorizontalRuleColor lipgloss.AdaptiveColor
  116. MarkdownListItemColor lipgloss.AdaptiveColor
  117. MarkdownListEnumerationColor lipgloss.AdaptiveColor
  118. MarkdownImageColor lipgloss.AdaptiveColor
  119. MarkdownImageTextColor lipgloss.AdaptiveColor
  120. MarkdownCodeBlockColor lipgloss.AdaptiveColor
  121. // Syntax highlighting colors
  122. SyntaxCommentColor lipgloss.AdaptiveColor
  123. SyntaxKeywordColor lipgloss.AdaptiveColor
  124. SyntaxFunctionColor lipgloss.AdaptiveColor
  125. SyntaxVariableColor lipgloss.AdaptiveColor
  126. SyntaxStringColor lipgloss.AdaptiveColor
  127. SyntaxNumberColor lipgloss.AdaptiveColor
  128. SyntaxTypeColor lipgloss.AdaptiveColor
  129. SyntaxOperatorColor lipgloss.AdaptiveColor
  130. SyntaxPunctuationColor lipgloss.AdaptiveColor
  131. }
  132. // Implement the Theme interface for BaseTheme
  133. func (t *BaseTheme) Primary() lipgloss.AdaptiveColor { return t.PrimaryColor }
  134. func (t *BaseTheme) Secondary() lipgloss.AdaptiveColor { return t.SecondaryColor }
  135. func (t *BaseTheme) Accent() lipgloss.AdaptiveColor { return t.AccentColor }
  136. func (t *BaseTheme) Error() lipgloss.AdaptiveColor { return t.ErrorColor }
  137. func (t *BaseTheme) Warning() lipgloss.AdaptiveColor { return t.WarningColor }
  138. func (t *BaseTheme) Success() lipgloss.AdaptiveColor { return t.SuccessColor }
  139. func (t *BaseTheme) Info() lipgloss.AdaptiveColor { return t.InfoColor }
  140. func (t *BaseTheme) Text() lipgloss.AdaptiveColor { return t.TextColor }
  141. func (t *BaseTheme) TextMuted() lipgloss.AdaptiveColor { return t.TextMutedColor }
  142. func (t *BaseTheme) TextEmphasized() lipgloss.AdaptiveColor { return t.TextEmphasizedColor }
  143. func (t *BaseTheme) Background() lipgloss.AdaptiveColor { return t.BackgroundColor }
  144. func (t *BaseTheme) BackgroundSecondary() lipgloss.AdaptiveColor { return t.BackgroundSecondaryColor }
  145. func (t *BaseTheme) BackgroundDarker() lipgloss.AdaptiveColor { return t.BackgroundDarkerColor }
  146. func (t *BaseTheme) BorderNormal() lipgloss.AdaptiveColor { return t.BorderNormalColor }
  147. func (t *BaseTheme) BorderFocused() lipgloss.AdaptiveColor { return t.BorderFocusedColor }
  148. func (t *BaseTheme) BorderDim() lipgloss.AdaptiveColor { return t.BorderDimColor }
  149. func (t *BaseTheme) DiffAdded() lipgloss.AdaptiveColor { return t.DiffAddedColor }
  150. func (t *BaseTheme) DiffRemoved() lipgloss.AdaptiveColor { return t.DiffRemovedColor }
  151. func (t *BaseTheme) DiffContext() lipgloss.AdaptiveColor { return t.DiffContextColor }
  152. func (t *BaseTheme) DiffHunkHeader() lipgloss.AdaptiveColor { return t.DiffHunkHeaderColor }
  153. func (t *BaseTheme) DiffHighlightAdded() lipgloss.AdaptiveColor { return t.DiffHighlightAddedColor }
  154. func (t *BaseTheme) DiffHighlightRemoved() lipgloss.AdaptiveColor { return t.DiffHighlightRemovedColor }
  155. func (t *BaseTheme) DiffAddedBg() lipgloss.AdaptiveColor { return t.DiffAddedBgColor }
  156. func (t *BaseTheme) DiffRemovedBg() lipgloss.AdaptiveColor { return t.DiffRemovedBgColor }
  157. func (t *BaseTheme) DiffContextBg() lipgloss.AdaptiveColor { return t.DiffContextBgColor }
  158. func (t *BaseTheme) DiffLineNumber() lipgloss.AdaptiveColor { return t.DiffLineNumberColor }
  159. func (t *BaseTheme) DiffAddedLineNumberBg() lipgloss.AdaptiveColor { return t.DiffAddedLineNumberBgColor }
  160. func (t *BaseTheme) DiffRemovedLineNumberBg() lipgloss.AdaptiveColor { return t.DiffRemovedLineNumberBgColor }
  161. func (t *BaseTheme) MarkdownText() lipgloss.AdaptiveColor { return t.MarkdownTextColor }
  162. func (t *BaseTheme) MarkdownHeading() lipgloss.AdaptiveColor { return t.MarkdownHeadingColor }
  163. func (t *BaseTheme) MarkdownLink() lipgloss.AdaptiveColor { return t.MarkdownLinkColor }
  164. func (t *BaseTheme) MarkdownLinkText() lipgloss.AdaptiveColor { return t.MarkdownLinkTextColor }
  165. func (t *BaseTheme) MarkdownCode() lipgloss.AdaptiveColor { return t.MarkdownCodeColor }
  166. func (t *BaseTheme) MarkdownBlockQuote() lipgloss.AdaptiveColor { return t.MarkdownBlockQuoteColor }
  167. func (t *BaseTheme) MarkdownEmph() lipgloss.AdaptiveColor { return t.MarkdownEmphColor }
  168. func (t *BaseTheme) MarkdownStrong() lipgloss.AdaptiveColor { return t.MarkdownStrongColor }
  169. func (t *BaseTheme) MarkdownHorizontalRule() lipgloss.AdaptiveColor { return t.MarkdownHorizontalRuleColor }
  170. func (t *BaseTheme) MarkdownListItem() lipgloss.AdaptiveColor { return t.MarkdownListItemColor }
  171. func (t *BaseTheme) MarkdownListEnumeration() lipgloss.AdaptiveColor { return t.MarkdownListEnumerationColor }
  172. func (t *BaseTheme) MarkdownImage() lipgloss.AdaptiveColor { return t.MarkdownImageColor }
  173. func (t *BaseTheme) MarkdownImageText() lipgloss.AdaptiveColor { return t.MarkdownImageTextColor }
  174. func (t *BaseTheme) MarkdownCodeBlock() lipgloss.AdaptiveColor { return t.MarkdownCodeBlockColor }
  175. func (t *BaseTheme) SyntaxComment() lipgloss.AdaptiveColor { return t.SyntaxCommentColor }
  176. func (t *BaseTheme) SyntaxKeyword() lipgloss.AdaptiveColor { return t.SyntaxKeywordColor }
  177. func (t *BaseTheme) SyntaxFunction() lipgloss.AdaptiveColor { return t.SyntaxFunctionColor }
  178. func (t *BaseTheme) SyntaxVariable() lipgloss.AdaptiveColor { return t.SyntaxVariableColor }
  179. func (t *BaseTheme) SyntaxString() lipgloss.AdaptiveColor { return t.SyntaxStringColor }
  180. func (t *BaseTheme) SyntaxNumber() lipgloss.AdaptiveColor { return t.SyntaxNumberColor }
  181. func (t *BaseTheme) SyntaxType() lipgloss.AdaptiveColor { return t.SyntaxTypeColor }
  182. func (t *BaseTheme) SyntaxOperator() lipgloss.AdaptiveColor { return t.SyntaxOperatorColor }
  183. func (t *BaseTheme) SyntaxPunctuation() lipgloss.AdaptiveColor { return t.SyntaxPunctuationColor }