theme.go 9.6 KB

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