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