mirror of
https://github.com/sst/opencode.git
synced 2025-08-24 15:04:10 +00:00
215 lines
9.6 KiB
Go
215 lines
9.6 KiB
Go
package theme
|
|
|
|
import (
|
|
"github.com/charmbracelet/lipgloss/v2/compat"
|
|
)
|
|
|
|
// Theme defines the interface for all UI themes in the application.
|
|
// All colors must be defined as compat.AdaptiveColor to support
|
|
// both light and dark terminal backgrounds.
|
|
type Theme interface {
|
|
Name() string
|
|
|
|
// Background colors
|
|
Background() compat.AdaptiveColor // Radix 1
|
|
BackgroundPanel() compat.AdaptiveColor // Radix 2
|
|
BackgroundElement() compat.AdaptiveColor // Radix 3
|
|
|
|
// Border colors
|
|
BorderSubtle() compat.AdaptiveColor // Radix 6
|
|
Border() compat.AdaptiveColor // Radix 7
|
|
BorderActive() compat.AdaptiveColor // Radix 8
|
|
|
|
// Brand colors
|
|
Primary() compat.AdaptiveColor // Radix 9
|
|
Secondary() compat.AdaptiveColor
|
|
Accent() compat.AdaptiveColor
|
|
|
|
// Text colors
|
|
TextMuted() compat.AdaptiveColor // Radix 11
|
|
Text() compat.AdaptiveColor // Radix 12
|
|
|
|
// Status colors
|
|
Error() compat.AdaptiveColor
|
|
Warning() compat.AdaptiveColor
|
|
Success() compat.AdaptiveColor
|
|
Info() compat.AdaptiveColor
|
|
|
|
// Diff view colors
|
|
DiffAdded() compat.AdaptiveColor
|
|
DiffRemoved() compat.AdaptiveColor
|
|
DiffContext() compat.AdaptiveColor
|
|
DiffHunkHeader() compat.AdaptiveColor
|
|
DiffHighlightAdded() compat.AdaptiveColor
|
|
DiffHighlightRemoved() compat.AdaptiveColor
|
|
DiffAddedBg() compat.AdaptiveColor
|
|
DiffRemovedBg() compat.AdaptiveColor
|
|
DiffContextBg() compat.AdaptiveColor
|
|
DiffLineNumber() compat.AdaptiveColor
|
|
DiffAddedLineNumberBg() compat.AdaptiveColor
|
|
DiffRemovedLineNumberBg() compat.AdaptiveColor
|
|
|
|
// Markdown colors
|
|
MarkdownText() compat.AdaptiveColor
|
|
MarkdownHeading() compat.AdaptiveColor
|
|
MarkdownLink() compat.AdaptiveColor
|
|
MarkdownLinkText() compat.AdaptiveColor
|
|
MarkdownCode() compat.AdaptiveColor
|
|
MarkdownBlockQuote() compat.AdaptiveColor
|
|
MarkdownEmph() compat.AdaptiveColor
|
|
MarkdownStrong() compat.AdaptiveColor
|
|
MarkdownHorizontalRule() compat.AdaptiveColor
|
|
MarkdownListItem() compat.AdaptiveColor
|
|
MarkdownListEnumeration() compat.AdaptiveColor
|
|
MarkdownImage() compat.AdaptiveColor
|
|
MarkdownImageText() compat.AdaptiveColor
|
|
MarkdownCodeBlock() compat.AdaptiveColor
|
|
|
|
// Syntax highlighting colors
|
|
SyntaxComment() compat.AdaptiveColor
|
|
SyntaxKeyword() compat.AdaptiveColor
|
|
SyntaxFunction() compat.AdaptiveColor
|
|
SyntaxVariable() compat.AdaptiveColor
|
|
SyntaxString() compat.AdaptiveColor
|
|
SyntaxNumber() compat.AdaptiveColor
|
|
SyntaxType() compat.AdaptiveColor
|
|
SyntaxOperator() compat.AdaptiveColor
|
|
SyntaxPunctuation() compat.AdaptiveColor
|
|
}
|
|
|
|
// BaseTheme provides a default implementation of the Theme interface
|
|
// that can be embedded in concrete theme implementations.
|
|
type BaseTheme struct {
|
|
// Background colors
|
|
BackgroundColor compat.AdaptiveColor
|
|
BackgroundPanelColor compat.AdaptiveColor
|
|
BackgroundElementColor compat.AdaptiveColor
|
|
|
|
// Border colors
|
|
BorderSubtleColor compat.AdaptiveColor
|
|
BorderColor compat.AdaptiveColor
|
|
BorderActiveColor compat.AdaptiveColor
|
|
|
|
// Brand colors
|
|
PrimaryColor compat.AdaptiveColor
|
|
SecondaryColor compat.AdaptiveColor
|
|
AccentColor compat.AdaptiveColor
|
|
|
|
// Text colors
|
|
TextMutedColor compat.AdaptiveColor
|
|
TextColor compat.AdaptiveColor
|
|
|
|
// Status colors
|
|
ErrorColor compat.AdaptiveColor
|
|
WarningColor compat.AdaptiveColor
|
|
SuccessColor compat.AdaptiveColor
|
|
InfoColor compat.AdaptiveColor
|
|
|
|
// Diff view colors
|
|
DiffAddedColor compat.AdaptiveColor
|
|
DiffRemovedColor compat.AdaptiveColor
|
|
DiffContextColor compat.AdaptiveColor
|
|
DiffHunkHeaderColor compat.AdaptiveColor
|
|
DiffHighlightAddedColor compat.AdaptiveColor
|
|
DiffHighlightRemovedColor compat.AdaptiveColor
|
|
DiffAddedBgColor compat.AdaptiveColor
|
|
DiffRemovedBgColor compat.AdaptiveColor
|
|
DiffContextBgColor compat.AdaptiveColor
|
|
DiffLineNumberColor compat.AdaptiveColor
|
|
DiffAddedLineNumberBgColor compat.AdaptiveColor
|
|
DiffRemovedLineNumberBgColor compat.AdaptiveColor
|
|
|
|
// Markdown colors
|
|
MarkdownTextColor compat.AdaptiveColor
|
|
MarkdownHeadingColor compat.AdaptiveColor
|
|
MarkdownLinkColor compat.AdaptiveColor
|
|
MarkdownLinkTextColor compat.AdaptiveColor
|
|
MarkdownCodeColor compat.AdaptiveColor
|
|
MarkdownBlockQuoteColor compat.AdaptiveColor
|
|
MarkdownEmphColor compat.AdaptiveColor
|
|
MarkdownStrongColor compat.AdaptiveColor
|
|
MarkdownHorizontalRuleColor compat.AdaptiveColor
|
|
MarkdownListItemColor compat.AdaptiveColor
|
|
MarkdownListEnumerationColor compat.AdaptiveColor
|
|
MarkdownImageColor compat.AdaptiveColor
|
|
MarkdownImageTextColor compat.AdaptiveColor
|
|
MarkdownCodeBlockColor compat.AdaptiveColor
|
|
|
|
// Syntax highlighting colors
|
|
SyntaxCommentColor compat.AdaptiveColor
|
|
SyntaxKeywordColor compat.AdaptiveColor
|
|
SyntaxFunctionColor compat.AdaptiveColor
|
|
SyntaxVariableColor compat.AdaptiveColor
|
|
SyntaxStringColor compat.AdaptiveColor
|
|
SyntaxNumberColor compat.AdaptiveColor
|
|
SyntaxTypeColor compat.AdaptiveColor
|
|
SyntaxOperatorColor compat.AdaptiveColor
|
|
SyntaxPunctuationColor compat.AdaptiveColor
|
|
}
|
|
|
|
// Implement the Theme interface for BaseTheme
|
|
func (t *BaseTheme) Primary() compat.AdaptiveColor { return t.PrimaryColor }
|
|
func (t *BaseTheme) Secondary() compat.AdaptiveColor { return t.SecondaryColor }
|
|
func (t *BaseTheme) Accent() compat.AdaptiveColor { return t.AccentColor }
|
|
|
|
func (t *BaseTheme) Error() compat.AdaptiveColor { return t.ErrorColor }
|
|
func (t *BaseTheme) Warning() compat.AdaptiveColor { return t.WarningColor }
|
|
func (t *BaseTheme) Success() compat.AdaptiveColor { return t.SuccessColor }
|
|
func (t *BaseTheme) Info() compat.AdaptiveColor { return t.InfoColor }
|
|
|
|
func (t *BaseTheme) Text() compat.AdaptiveColor { return t.TextColor }
|
|
func (t *BaseTheme) TextMuted() compat.AdaptiveColor { return t.TextMutedColor }
|
|
|
|
func (t *BaseTheme) Background() compat.AdaptiveColor { return t.BackgroundColor }
|
|
func (t *BaseTheme) BackgroundPanel() compat.AdaptiveColor { return t.BackgroundPanelColor }
|
|
func (t *BaseTheme) BackgroundElement() compat.AdaptiveColor { return t.BackgroundElementColor }
|
|
|
|
func (t *BaseTheme) Border() compat.AdaptiveColor { return t.BorderColor }
|
|
func (t *BaseTheme) BorderActive() compat.AdaptiveColor { return t.BorderActiveColor }
|
|
func (t *BaseTheme) BorderSubtle() compat.AdaptiveColor { return t.BorderSubtleColor }
|
|
|
|
func (t *BaseTheme) DiffAdded() compat.AdaptiveColor { return t.DiffAddedColor }
|
|
func (t *BaseTheme) DiffRemoved() compat.AdaptiveColor { return t.DiffRemovedColor }
|
|
func (t *BaseTheme) DiffContext() compat.AdaptiveColor { return t.DiffContextColor }
|
|
func (t *BaseTheme) DiffHunkHeader() compat.AdaptiveColor { return t.DiffHunkHeaderColor }
|
|
func (t *BaseTheme) DiffHighlightAdded() compat.AdaptiveColor { return t.DiffHighlightAddedColor }
|
|
func (t *BaseTheme) DiffHighlightRemoved() compat.AdaptiveColor { return t.DiffHighlightRemovedColor }
|
|
func (t *BaseTheme) DiffAddedBg() compat.AdaptiveColor { return t.DiffAddedBgColor }
|
|
func (t *BaseTheme) DiffRemovedBg() compat.AdaptiveColor { return t.DiffRemovedBgColor }
|
|
func (t *BaseTheme) DiffContextBg() compat.AdaptiveColor { return t.DiffContextBgColor }
|
|
func (t *BaseTheme) DiffLineNumber() compat.AdaptiveColor { return t.DiffLineNumberColor }
|
|
func (t *BaseTheme) DiffAddedLineNumberBg() compat.AdaptiveColor {
|
|
return t.DiffAddedLineNumberBgColor
|
|
}
|
|
func (t *BaseTheme) DiffRemovedLineNumberBg() compat.AdaptiveColor {
|
|
return t.DiffRemovedLineNumberBgColor
|
|
}
|
|
|
|
func (t *BaseTheme) MarkdownText() compat.AdaptiveColor { return t.MarkdownTextColor }
|
|
func (t *BaseTheme) MarkdownHeading() compat.AdaptiveColor { return t.MarkdownHeadingColor }
|
|
func (t *BaseTheme) MarkdownLink() compat.AdaptiveColor { return t.MarkdownLinkColor }
|
|
func (t *BaseTheme) MarkdownLinkText() compat.AdaptiveColor { return t.MarkdownLinkTextColor }
|
|
func (t *BaseTheme) MarkdownCode() compat.AdaptiveColor { return t.MarkdownCodeColor }
|
|
func (t *BaseTheme) MarkdownBlockQuote() compat.AdaptiveColor { return t.MarkdownBlockQuoteColor }
|
|
func (t *BaseTheme) MarkdownEmph() compat.AdaptiveColor { return t.MarkdownEmphColor }
|
|
func (t *BaseTheme) MarkdownStrong() compat.AdaptiveColor { return t.MarkdownStrongColor }
|
|
func (t *BaseTheme) MarkdownHorizontalRule() compat.AdaptiveColor {
|
|
return t.MarkdownHorizontalRuleColor
|
|
}
|
|
func (t *BaseTheme) MarkdownListItem() compat.AdaptiveColor { return t.MarkdownListItemColor }
|
|
func (t *BaseTheme) MarkdownListEnumeration() compat.AdaptiveColor {
|
|
return t.MarkdownListEnumerationColor
|
|
}
|
|
func (t *BaseTheme) MarkdownImage() compat.AdaptiveColor { return t.MarkdownImageColor }
|
|
func (t *BaseTheme) MarkdownImageText() compat.AdaptiveColor { return t.MarkdownImageTextColor }
|
|
func (t *BaseTheme) MarkdownCodeBlock() compat.AdaptiveColor { return t.MarkdownCodeBlockColor }
|
|
|
|
func (t *BaseTheme) SyntaxComment() compat.AdaptiveColor { return t.SyntaxCommentColor }
|
|
func (t *BaseTheme) SyntaxKeyword() compat.AdaptiveColor { return t.SyntaxKeywordColor }
|
|
func (t *BaseTheme) SyntaxFunction() compat.AdaptiveColor { return t.SyntaxFunctionColor }
|
|
func (t *BaseTheme) SyntaxVariable() compat.AdaptiveColor { return t.SyntaxVariableColor }
|
|
func (t *BaseTheme) SyntaxString() compat.AdaptiveColor { return t.SyntaxStringColor }
|
|
func (t *BaseTheme) SyntaxNumber() compat.AdaptiveColor { return t.SyntaxNumberColor }
|
|
func (t *BaseTheme) SyntaxType() compat.AdaptiveColor { return t.SyntaxTypeColor }
|
|
func (t *BaseTheme) SyntaxOperator() compat.AdaptiveColor { return t.SyntaxOperatorColor }
|
|
func (t *BaseTheme) SyntaxPunctuation() compat.AdaptiveColor { return t.SyntaxPunctuationColor }
|