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