theme.go 9.5 KB

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