theme.go

  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 }