sync
This commit is contained in:
parent
149f133747
commit
550d2d3f99
123 changed files with 452 additions and 83 deletions
408
packages/client/tui/internal/theme/loader.go
Normal file
408
packages/client/tui/internal/theme/loader.go
Normal file
|
|
@ -0,0 +1,408 @@
|
|||
package theme
|
||||
|
||||
import (
|
||||
"embed"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"image/color"
|
||||
"os"
|
||||
"path"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"github.com/charmbracelet/lipgloss/v2"
|
||||
"github.com/charmbracelet/lipgloss/v2/compat"
|
||||
)
|
||||
|
||||
//go:embed themes/*.json
|
||||
var themesFS embed.FS
|
||||
|
||||
type JSONTheme struct {
|
||||
Defs map[string]any `json:"defs,omitempty"`
|
||||
Theme map[string]any `json:"theme"`
|
||||
}
|
||||
|
||||
type LoadedTheme struct {
|
||||
BaseTheme
|
||||
name string
|
||||
}
|
||||
|
||||
func (t *LoadedTheme) Name() string {
|
||||
return t.name
|
||||
}
|
||||
|
||||
type colorRef struct {
|
||||
value any
|
||||
resolved bool
|
||||
}
|
||||
|
||||
func LoadThemesFromJSON() error {
|
||||
entries, err := themesFS.ReadDir("themes")
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to read themes directory: %w", err)
|
||||
}
|
||||
|
||||
for _, entry := range entries {
|
||||
if !strings.HasSuffix(entry.Name(), ".json") {
|
||||
continue
|
||||
}
|
||||
themeName := strings.TrimSuffix(entry.Name(), ".json")
|
||||
data, err := themesFS.ReadFile(path.Join("themes", entry.Name()))
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to read theme file %s: %w", entry.Name(), err)
|
||||
}
|
||||
theme, err := parseJSONTheme(themeName, data)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to parse theme %s: %w", themeName, err)
|
||||
}
|
||||
RegisterTheme(themeName, theme)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// LoadThemesFromDirectories loads themes from user directories in the correct override order.
|
||||
// The hierarchy is (from lowest to highest priority):
|
||||
// 1. Built-in themes (embedded)
|
||||
// 2. USER_CONFIG/opencode/themes/*.json
|
||||
// 3. PROJECT_ROOT/.opencode/themes/*.json
|
||||
// 4. CWD/.opencode/themes/*.json
|
||||
func LoadThemesFromDirectories(userConfig, projectRoot, cwd string) error {
|
||||
if err := LoadThemesFromJSON(); err != nil {
|
||||
return fmt.Errorf("failed to load built-in themes: %w", err)
|
||||
}
|
||||
|
||||
dirs := []string{
|
||||
filepath.Join(userConfig, "themes"),
|
||||
filepath.Join(projectRoot, ".opencode", "themes"),
|
||||
}
|
||||
if cwd != projectRoot {
|
||||
dirs = append(dirs, filepath.Join(cwd, ".opencode", "themes"))
|
||||
}
|
||||
|
||||
for _, dir := range dirs {
|
||||
if err := loadThemesFromDirectory(dir); err != nil {
|
||||
fmt.Printf("Warning: Failed to load themes from %s: %v\n", dir, err)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func loadThemesFromDirectory(dir string) error {
|
||||
if _, err := os.Stat(dir); os.IsNotExist(err) {
|
||||
return nil // Directory doesn't exist, which is fine
|
||||
}
|
||||
|
||||
entries, err := os.ReadDir(dir)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to read directory: %w", err)
|
||||
}
|
||||
|
||||
for _, entry := range entries {
|
||||
if entry.IsDir() || !strings.HasSuffix(entry.Name(), ".json") {
|
||||
continue
|
||||
}
|
||||
|
||||
themeName := strings.TrimSuffix(entry.Name(), ".json")
|
||||
filePath := filepath.Join(dir, entry.Name())
|
||||
|
||||
data, err := os.ReadFile(filePath)
|
||||
if err != nil {
|
||||
fmt.Printf("Warning: Failed to read theme file %s: %v\n", filePath, err)
|
||||
continue
|
||||
}
|
||||
|
||||
theme, err := parseJSONTheme(themeName, data)
|
||||
if err != nil {
|
||||
fmt.Printf("Warning: Failed to parse theme %s: %v\n", filePath, err)
|
||||
continue
|
||||
}
|
||||
|
||||
RegisterTheme(themeName, theme)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func parseJSONTheme(name string, data []byte) (Theme, error) {
|
||||
var jsonTheme JSONTheme
|
||||
if err := json.Unmarshal(data, &jsonTheme); err != nil {
|
||||
return nil, fmt.Errorf("failed to unmarshal JSON: %w", err)
|
||||
}
|
||||
theme := &LoadedTheme{
|
||||
name: name,
|
||||
}
|
||||
colorMap := make(map[string]*colorRef)
|
||||
for key, value := range jsonTheme.Defs {
|
||||
colorMap[key] = &colorRef{value: value, resolved: false}
|
||||
}
|
||||
for key, value := range jsonTheme.Theme {
|
||||
colorMap[key] = &colorRef{value: value, resolved: false}
|
||||
}
|
||||
resolver := &colorResolver{
|
||||
colors: colorMap,
|
||||
visited: make(map[string]bool),
|
||||
}
|
||||
for key, value := range jsonTheme.Theme {
|
||||
resolved, err := resolver.resolveColor(key, value)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to resolve color %s: %w", key, err)
|
||||
}
|
||||
adaptiveColor, err := parseResolvedColor(resolved)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to parse color %s: %w", key, err)
|
||||
}
|
||||
if err := setThemeColor(theme, key, adaptiveColor); err != nil {
|
||||
return nil, fmt.Errorf("failed to set color %s: %w", key, err)
|
||||
}
|
||||
}
|
||||
|
||||
return theme, nil
|
||||
}
|
||||
|
||||
type colorResolver struct {
|
||||
colors map[string]*colorRef
|
||||
visited map[string]bool
|
||||
}
|
||||
|
||||
func (r *colorResolver) resolveColor(key string, value any) (any, error) {
|
||||
if r.visited[key] {
|
||||
return nil, fmt.Errorf("circular reference detected for color %s", key)
|
||||
}
|
||||
r.visited[key] = true
|
||||
defer func() { r.visited[key] = false }()
|
||||
|
||||
switch v := value.(type) {
|
||||
case string:
|
||||
if strings.HasPrefix(v, "#") || v == "none" {
|
||||
return v, nil
|
||||
}
|
||||
return r.resolveReference(v)
|
||||
case float64:
|
||||
return v, nil
|
||||
case map[string]any:
|
||||
resolved := make(map[string]any)
|
||||
|
||||
if dark, ok := v["dark"]; ok {
|
||||
resolvedDark, err := r.resolveColorValue(dark)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to resolve dark variant: %w", err)
|
||||
}
|
||||
resolved["dark"] = resolvedDark
|
||||
}
|
||||
|
||||
if light, ok := v["light"]; ok {
|
||||
resolvedLight, err := r.resolveColorValue(light)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to resolve light variant: %w", err)
|
||||
}
|
||||
resolved["light"] = resolvedLight
|
||||
}
|
||||
|
||||
return resolved, nil
|
||||
default:
|
||||
return nil, fmt.Errorf("invalid color value type: %T", value)
|
||||
}
|
||||
}
|
||||
|
||||
func (r *colorResolver) resolveColorValue(value any) (any, error) {
|
||||
switch v := value.(type) {
|
||||
case string:
|
||||
if strings.HasPrefix(v, "#") || v == "none" {
|
||||
return v, nil
|
||||
}
|
||||
return r.resolveReference(v)
|
||||
case float64:
|
||||
return v, nil
|
||||
default:
|
||||
return nil, fmt.Errorf("invalid color value type: %T", value)
|
||||
}
|
||||
}
|
||||
|
||||
func (r *colorResolver) resolveReference(ref string) (any, error) {
|
||||
colorRef, exists := r.colors[ref]
|
||||
if !exists {
|
||||
return nil, fmt.Errorf("color reference '%s' not found", ref)
|
||||
}
|
||||
|
||||
if colorRef.resolved {
|
||||
return colorRef.value, nil
|
||||
}
|
||||
|
||||
resolved, err := r.resolveColor(ref, colorRef.value)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
colorRef.value = resolved
|
||||
colorRef.resolved = true
|
||||
|
||||
return resolved, nil
|
||||
}
|
||||
|
||||
func parseResolvedColor(value any) (compat.AdaptiveColor, error) {
|
||||
switch v := value.(type) {
|
||||
case string:
|
||||
if v == "none" {
|
||||
return compat.AdaptiveColor{
|
||||
Dark: lipgloss.NoColor{},
|
||||
Light: lipgloss.NoColor{},
|
||||
}, nil
|
||||
}
|
||||
return compat.AdaptiveColor{
|
||||
Dark: lipgloss.Color(v),
|
||||
Light: lipgloss.Color(v),
|
||||
}, nil
|
||||
case float64:
|
||||
colorStr := fmt.Sprintf("%d", int(v))
|
||||
return compat.AdaptiveColor{
|
||||
Dark: lipgloss.Color(colorStr),
|
||||
Light: lipgloss.Color(colorStr),
|
||||
}, nil
|
||||
case map[string]any:
|
||||
dark, darkOk := v["dark"]
|
||||
light, lightOk := v["light"]
|
||||
|
||||
if !darkOk || !lightOk {
|
||||
return compat.AdaptiveColor{}, fmt.Errorf("color object must have both 'dark' and 'light' keys")
|
||||
}
|
||||
darkColor, err := parseColorValue(dark)
|
||||
if err != nil {
|
||||
return compat.AdaptiveColor{}, fmt.Errorf("failed to parse dark color: %w", err)
|
||||
}
|
||||
lightColor, err := parseColorValue(light)
|
||||
if err != nil {
|
||||
return compat.AdaptiveColor{}, fmt.Errorf("failed to parse light color: %w", err)
|
||||
}
|
||||
return compat.AdaptiveColor{
|
||||
Dark: darkColor,
|
||||
Light: lightColor,
|
||||
}, nil
|
||||
default:
|
||||
return compat.AdaptiveColor{}, fmt.Errorf("invalid resolved color type: %T", value)
|
||||
}
|
||||
}
|
||||
|
||||
func parseColorValue(value any) (color.Color, error) {
|
||||
switch v := value.(type) {
|
||||
case string:
|
||||
if v == "none" {
|
||||
return lipgloss.NoColor{}, nil
|
||||
}
|
||||
return lipgloss.Color(v), nil
|
||||
case float64:
|
||||
return lipgloss.Color(fmt.Sprintf("%d", int(v))), nil
|
||||
default:
|
||||
return nil, fmt.Errorf("invalid color value type: %T", value)
|
||||
}
|
||||
}
|
||||
|
||||
func setThemeColor(theme *LoadedTheme, key string, color compat.AdaptiveColor) error {
|
||||
switch key {
|
||||
case "primary":
|
||||
theme.PrimaryColor = color
|
||||
case "secondary":
|
||||
theme.SecondaryColor = color
|
||||
case "accent":
|
||||
theme.AccentColor = color
|
||||
case "error":
|
||||
theme.ErrorColor = color
|
||||
case "warning":
|
||||
theme.WarningColor = color
|
||||
case "success":
|
||||
theme.SuccessColor = color
|
||||
case "info":
|
||||
theme.InfoColor = color
|
||||
case "text":
|
||||
theme.TextColor = color
|
||||
case "textMuted":
|
||||
theme.TextMutedColor = color
|
||||
case "background":
|
||||
theme.BackgroundColor = color
|
||||
case "backgroundPanel":
|
||||
theme.BackgroundPanelColor = color
|
||||
case "backgroundElement":
|
||||
theme.BackgroundElementColor = color
|
||||
case "border":
|
||||
theme.BorderColor = color
|
||||
case "borderActive":
|
||||
theme.BorderActiveColor = color
|
||||
case "borderSubtle":
|
||||
theme.BorderSubtleColor = color
|
||||
case "diffAdded":
|
||||
theme.DiffAddedColor = color
|
||||
case "diffRemoved":
|
||||
theme.DiffRemovedColor = color
|
||||
case "diffContext":
|
||||
theme.DiffContextColor = color
|
||||
case "diffHunkHeader":
|
||||
theme.DiffHunkHeaderColor = color
|
||||
case "diffHighlightAdded":
|
||||
theme.DiffHighlightAddedColor = color
|
||||
case "diffHighlightRemoved":
|
||||
theme.DiffHighlightRemovedColor = color
|
||||
case "diffAddedBg":
|
||||
theme.DiffAddedBgColor = color
|
||||
case "diffRemovedBg":
|
||||
theme.DiffRemovedBgColor = color
|
||||
case "diffContextBg":
|
||||
theme.DiffContextBgColor = color
|
||||
case "diffLineNumber":
|
||||
theme.DiffLineNumberColor = color
|
||||
case "diffAddedLineNumberBg":
|
||||
theme.DiffAddedLineNumberBgColor = color
|
||||
case "diffRemovedLineNumberBg":
|
||||
theme.DiffRemovedLineNumberBgColor = color
|
||||
case "markdownText":
|
||||
theme.MarkdownTextColor = color
|
||||
case "markdownHeading":
|
||||
theme.MarkdownHeadingColor = color
|
||||
case "markdownLink":
|
||||
theme.MarkdownLinkColor = color
|
||||
case "markdownLinkText":
|
||||
theme.MarkdownLinkTextColor = color
|
||||
case "markdownCode":
|
||||
theme.MarkdownCodeColor = color
|
||||
case "markdownBlockQuote":
|
||||
theme.MarkdownBlockQuoteColor = color
|
||||
case "markdownEmph":
|
||||
theme.MarkdownEmphColor = color
|
||||
case "markdownStrong":
|
||||
theme.MarkdownStrongColor = color
|
||||
case "markdownHorizontalRule":
|
||||
theme.MarkdownHorizontalRuleColor = color
|
||||
case "markdownListItem":
|
||||
theme.MarkdownListItemColor = color
|
||||
case "markdownListEnumeration":
|
||||
theme.MarkdownListEnumerationColor = color
|
||||
case "markdownImage":
|
||||
theme.MarkdownImageColor = color
|
||||
case "markdownImageText":
|
||||
theme.MarkdownImageTextColor = color
|
||||
case "markdownCodeBlock":
|
||||
theme.MarkdownCodeBlockColor = color
|
||||
case "syntaxComment":
|
||||
theme.SyntaxCommentColor = color
|
||||
case "syntaxKeyword":
|
||||
theme.SyntaxKeywordColor = color
|
||||
case "syntaxFunction":
|
||||
theme.SyntaxFunctionColor = color
|
||||
case "syntaxVariable":
|
||||
theme.SyntaxVariableColor = color
|
||||
case "syntaxString":
|
||||
theme.SyntaxStringColor = color
|
||||
case "syntaxNumber":
|
||||
theme.SyntaxNumberColor = color
|
||||
case "syntaxType":
|
||||
theme.SyntaxTypeColor = color
|
||||
case "syntaxOperator":
|
||||
theme.SyntaxOperatorColor = color
|
||||
case "syntaxPunctuation":
|
||||
theme.SyntaxPunctuationColor = color
|
||||
default:
|
||||
// Ignore unknown keys for forward compatibility
|
||||
return nil
|
||||
}
|
||||
return nil
|
||||
}
|
||||
141
packages/client/tui/internal/theme/loader_test.go
Normal file
141
packages/client/tui/internal/theme/loader_test.go
Normal file
|
|
@ -0,0 +1,141 @@
|
|||
package theme
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"slices"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestLoadThemesFromJSON(t *testing.T) {
|
||||
// Test loading themes
|
||||
err := LoadThemesFromJSON()
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to load themes: %v", err)
|
||||
}
|
||||
|
||||
// Check that themes were loaded
|
||||
themes := AvailableThemes()
|
||||
if len(themes) == 0 {
|
||||
t.Fatal("No themes were loaded")
|
||||
}
|
||||
|
||||
// Check for expected themes
|
||||
expectedThemes := []string{"tokyonight", "opencode", "everforest", "ayu"}
|
||||
for _, expected := range expectedThemes {
|
||||
found := slices.Contains(themes, expected)
|
||||
if !found {
|
||||
t.Errorf("Expected theme %s not found", expected)
|
||||
}
|
||||
}
|
||||
|
||||
// Test getting a specific theme
|
||||
tokyonight := GetTheme("tokyonight")
|
||||
if tokyonight == nil {
|
||||
t.Fatal("Failed to get tokyonight theme")
|
||||
}
|
||||
|
||||
// Test theme colors
|
||||
primary := tokyonight.Primary()
|
||||
if primary.Dark == nil || primary.Light == nil {
|
||||
t.Error("Primary color not properly set")
|
||||
}
|
||||
}
|
||||
|
||||
func TestColorReferenceResolution(t *testing.T) {
|
||||
// Load themes first
|
||||
err := LoadThemesFromJSON()
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to load themes: %v", err)
|
||||
}
|
||||
|
||||
// Test a theme that uses references (e.g., solarized uses color definitions)
|
||||
solarized := GetTheme("solarized")
|
||||
if solarized == nil {
|
||||
t.Fatal("Failed to get solarized theme")
|
||||
}
|
||||
|
||||
// Check that color references were resolved
|
||||
primary := solarized.Primary()
|
||||
if primary.Dark == nil || primary.Light == nil {
|
||||
t.Error("Primary color reference not resolved")
|
||||
}
|
||||
|
||||
// Check that all colors are properly resolved
|
||||
text := solarized.Text()
|
||||
if text.Dark == nil || text.Light == nil {
|
||||
t.Error("Text color reference not resolved")
|
||||
}
|
||||
}
|
||||
|
||||
func TestLoadThemesFromDirectories(t *testing.T) {
|
||||
// Create temporary directories for testing
|
||||
tempDir := t.TempDir()
|
||||
|
||||
userConfig := filepath.Join(tempDir, "config")
|
||||
projectRoot := filepath.Join(tempDir, "project")
|
||||
cwd := filepath.Join(tempDir, "cwd")
|
||||
|
||||
// Create theme directories
|
||||
os.MkdirAll(filepath.Join(userConfig, "opencode", "themes"), 0755)
|
||||
os.MkdirAll(filepath.Join(projectRoot, ".opencode", "themes"), 0755)
|
||||
os.MkdirAll(filepath.Join(cwd, ".opencode", "themes"), 0755)
|
||||
|
||||
// Create test themes with same name to test override behavior
|
||||
testTheme1 := `{
|
||||
"theme": {
|
||||
"primary": "#111111",
|
||||
"secondary": "#222222",
|
||||
"accent": "#333333",
|
||||
"text": "#ffffff",
|
||||
"textMuted": "#cccccc",
|
||||
"background": "#000000"
|
||||
}
|
||||
}`
|
||||
|
||||
testTheme2 := `{
|
||||
"theme": {
|
||||
"primary": "#444444",
|
||||
"secondary": "#555555",
|
||||
"accent": "#666666",
|
||||
"text": "#ffffff",
|
||||
"textMuted": "#cccccc",
|
||||
"background": "#000000"
|
||||
}
|
||||
}`
|
||||
|
||||
testTheme3 := `{
|
||||
"theme": {
|
||||
"primary": "#777777",
|
||||
"secondary": "#888888",
|
||||
"accent": "#999999",
|
||||
"text": "#ffffff",
|
||||
"textMuted": "#cccccc",
|
||||
"background": "#000000"
|
||||
}
|
||||
}`
|
||||
|
||||
// Write themes to different directories
|
||||
os.WriteFile(filepath.Join(userConfig, "opencode", "themes", "override-test.json"), []byte(testTheme1), 0644)
|
||||
os.WriteFile(filepath.Join(projectRoot, ".opencode", "themes", "override-test.json"), []byte(testTheme2), 0644)
|
||||
os.WriteFile(filepath.Join(cwd, ".opencode", "themes", "override-test.json"), []byte(testTheme3), 0644)
|
||||
|
||||
// Load themes
|
||||
err := LoadThemesFromDirectories(userConfig, projectRoot, cwd)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to load themes from directories: %v", err)
|
||||
}
|
||||
|
||||
// Check that the theme from CWD (highest priority) won
|
||||
overrideTheme := GetTheme("override-test")
|
||||
if overrideTheme == nil {
|
||||
t.Fatal("Failed to get override-test theme")
|
||||
}
|
||||
|
||||
// The primary color should be from testTheme3 (#777777)
|
||||
primary := overrideTheme.Primary()
|
||||
// We can't directly check the color value, but we can verify it was loaded
|
||||
if primary.Dark == nil || primary.Light == nil {
|
||||
t.Error("Override theme not properly loaded")
|
||||
}
|
||||
}
|
||||
229
packages/client/tui/internal/theme/manager.go
Normal file
229
packages/client/tui/internal/theme/manager.go
Normal file
|
|
@ -0,0 +1,229 @@
|
|||
package theme
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"image/color"
|
||||
"slices"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
|
||||
"github.com/alecthomas/chroma/v2/styles"
|
||||
"github.com/charmbracelet/lipgloss/v2"
|
||||
"github.com/charmbracelet/lipgloss/v2/compat"
|
||||
"github.com/charmbracelet/x/ansi"
|
||||
)
|
||||
|
||||
// Manager handles theme registration, selection, and retrieval.
|
||||
// It maintains a registry of available themes and tracks the currently active theme.
|
||||
type Manager struct {
|
||||
themes map[string]Theme
|
||||
currentName string
|
||||
currentUsesAnsiCache bool // Cache whether current theme uses ANSI colors
|
||||
mu sync.RWMutex
|
||||
}
|
||||
|
||||
// Global instance of the theme manager
|
||||
var globalManager = &Manager{
|
||||
themes: make(map[string]Theme),
|
||||
currentName: "",
|
||||
}
|
||||
|
||||
// RegisterTheme adds a new theme to the registry.
|
||||
// If this is the first theme registered, it becomes the default.
|
||||
func RegisterTheme(name string, theme Theme) {
|
||||
globalManager.mu.Lock()
|
||||
defer globalManager.mu.Unlock()
|
||||
|
||||
globalManager.themes[name] = theme
|
||||
|
||||
// If this is the first theme, make it the default
|
||||
if globalManager.currentName == "" {
|
||||
globalManager.currentName = name
|
||||
globalManager.currentUsesAnsiCache = themeUsesAnsiColors(theme)
|
||||
}
|
||||
}
|
||||
|
||||
// SetTheme changes the active theme to the one with the specified name.
|
||||
// Returns an error if the theme doesn't exist.
|
||||
func SetTheme(name string) error {
|
||||
globalManager.mu.Lock()
|
||||
defer globalManager.mu.Unlock()
|
||||
delete(styles.Registry, "charm")
|
||||
|
||||
theme, exists := globalManager.themes[name]
|
||||
if !exists {
|
||||
return fmt.Errorf("theme '%s' not found", name)
|
||||
}
|
||||
|
||||
globalManager.currentName = name
|
||||
globalManager.currentUsesAnsiCache = themeUsesAnsiColors(theme)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// CurrentTheme returns the currently active theme.
|
||||
// If no theme is set, it returns nil.
|
||||
func CurrentTheme() Theme {
|
||||
globalManager.mu.RLock()
|
||||
defer globalManager.mu.RUnlock()
|
||||
|
||||
if globalManager.currentName == "" {
|
||||
return nil
|
||||
}
|
||||
|
||||
return globalManager.themes[globalManager.currentName]
|
||||
}
|
||||
|
||||
// CurrentThemeName returns the name of the currently active theme.
|
||||
func CurrentThemeName() string {
|
||||
globalManager.mu.RLock()
|
||||
defer globalManager.mu.RUnlock()
|
||||
|
||||
return globalManager.currentName
|
||||
}
|
||||
|
||||
// AvailableThemes returns a list of all registered theme names.
|
||||
func AvailableThemes() []string {
|
||||
globalManager.mu.RLock()
|
||||
defer globalManager.mu.RUnlock()
|
||||
|
||||
names := make([]string, 0, len(globalManager.themes))
|
||||
for name := range globalManager.themes {
|
||||
names = append(names, name)
|
||||
}
|
||||
slices.SortFunc(names, func(a, b string) int {
|
||||
if a == "opencode" {
|
||||
return -1
|
||||
} else if b == "opencode" {
|
||||
return 1
|
||||
}
|
||||
if a == "system" {
|
||||
return -1
|
||||
} else if b == "system" {
|
||||
return 1
|
||||
}
|
||||
return strings.Compare(a, b)
|
||||
})
|
||||
return names
|
||||
}
|
||||
|
||||
// GetTheme returns a specific theme by name.
|
||||
// Returns nil if the theme doesn't exist.
|
||||
func GetTheme(name string) Theme {
|
||||
globalManager.mu.RLock()
|
||||
defer globalManager.mu.RUnlock()
|
||||
|
||||
return globalManager.themes[name]
|
||||
}
|
||||
|
||||
// UpdateSystemTheme updates the system theme with terminal background info
|
||||
func UpdateSystemTheme(terminalBg color.Color, isDark bool) {
|
||||
globalManager.mu.Lock()
|
||||
defer globalManager.mu.Unlock()
|
||||
|
||||
dynamicTheme := NewSystemTheme(terminalBg, isDark)
|
||||
globalManager.themes["system"] = dynamicTheme
|
||||
if globalManager.currentName == "system" {
|
||||
globalManager.currentUsesAnsiCache = themeUsesAnsiColors(dynamicTheme)
|
||||
}
|
||||
}
|
||||
|
||||
// CurrentThemeUsesAnsiColors returns true if the current theme uses ANSI 0-16 colors
|
||||
func CurrentThemeUsesAnsiColors() bool {
|
||||
// globalManager.mu.RLock()
|
||||
// defer globalManager.mu.RUnlock()
|
||||
|
||||
return globalManager.currentUsesAnsiCache
|
||||
}
|
||||
|
||||
// isAnsiColor checks if a color represents an ANSI 0-16 color
|
||||
func isAnsiColor(c color.Color) bool {
|
||||
if _, ok := c.(lipgloss.NoColor); ok {
|
||||
return false
|
||||
}
|
||||
if _, ok := c.(ansi.BasicColor); ok {
|
||||
return true
|
||||
}
|
||||
|
||||
// For other color types, check if they represent ANSI colors
|
||||
// by examining their string representation
|
||||
if stringer, ok := c.(fmt.Stringer); ok {
|
||||
str := stringer.String()
|
||||
// Check if it's a numeric ANSI color (0-15)
|
||||
if num, err := strconv.Atoi(str); err == nil && num >= 0 && num <= 15 {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
// adaptiveColorUsesAnsi checks if an AdaptiveColor uses ANSI colors
|
||||
func adaptiveColorUsesAnsi(ac compat.AdaptiveColor) bool {
|
||||
if isAnsiColor(ac.Dark) {
|
||||
return true
|
||||
}
|
||||
if isAnsiColor(ac.Light) {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// themeUsesAnsiColors checks if a theme uses any ANSI 0-16 colors
|
||||
func themeUsesAnsiColors(theme Theme) bool {
|
||||
if theme == nil {
|
||||
return false
|
||||
}
|
||||
|
||||
return adaptiveColorUsesAnsi(theme.Primary()) ||
|
||||
adaptiveColorUsesAnsi(theme.Secondary()) ||
|
||||
adaptiveColorUsesAnsi(theme.Accent()) ||
|
||||
adaptiveColorUsesAnsi(theme.Error()) ||
|
||||
adaptiveColorUsesAnsi(theme.Warning()) ||
|
||||
adaptiveColorUsesAnsi(theme.Success()) ||
|
||||
adaptiveColorUsesAnsi(theme.Info()) ||
|
||||
adaptiveColorUsesAnsi(theme.Text()) ||
|
||||
adaptiveColorUsesAnsi(theme.TextMuted()) ||
|
||||
adaptiveColorUsesAnsi(theme.Background()) ||
|
||||
adaptiveColorUsesAnsi(theme.BackgroundPanel()) ||
|
||||
adaptiveColorUsesAnsi(theme.BackgroundElement()) ||
|
||||
adaptiveColorUsesAnsi(theme.Border()) ||
|
||||
adaptiveColorUsesAnsi(theme.BorderActive()) ||
|
||||
adaptiveColorUsesAnsi(theme.BorderSubtle()) ||
|
||||
adaptiveColorUsesAnsi(theme.DiffAdded()) ||
|
||||
adaptiveColorUsesAnsi(theme.DiffRemoved()) ||
|
||||
adaptiveColorUsesAnsi(theme.DiffContext()) ||
|
||||
adaptiveColorUsesAnsi(theme.DiffHunkHeader()) ||
|
||||
adaptiveColorUsesAnsi(theme.DiffHighlightAdded()) ||
|
||||
adaptiveColorUsesAnsi(theme.DiffHighlightRemoved()) ||
|
||||
adaptiveColorUsesAnsi(theme.DiffAddedBg()) ||
|
||||
adaptiveColorUsesAnsi(theme.DiffRemovedBg()) ||
|
||||
adaptiveColorUsesAnsi(theme.DiffContextBg()) ||
|
||||
adaptiveColorUsesAnsi(theme.DiffLineNumber()) ||
|
||||
adaptiveColorUsesAnsi(theme.DiffAddedLineNumberBg()) ||
|
||||
adaptiveColorUsesAnsi(theme.DiffRemovedLineNumberBg()) ||
|
||||
adaptiveColorUsesAnsi(theme.MarkdownText()) ||
|
||||
adaptiveColorUsesAnsi(theme.MarkdownHeading()) ||
|
||||
adaptiveColorUsesAnsi(theme.MarkdownLink()) ||
|
||||
adaptiveColorUsesAnsi(theme.MarkdownLinkText()) ||
|
||||
adaptiveColorUsesAnsi(theme.MarkdownCode()) ||
|
||||
adaptiveColorUsesAnsi(theme.MarkdownBlockQuote()) ||
|
||||
adaptiveColorUsesAnsi(theme.MarkdownEmph()) ||
|
||||
adaptiveColorUsesAnsi(theme.MarkdownStrong()) ||
|
||||
adaptiveColorUsesAnsi(theme.MarkdownHorizontalRule()) ||
|
||||
adaptiveColorUsesAnsi(theme.MarkdownListItem()) ||
|
||||
adaptiveColorUsesAnsi(theme.MarkdownListEnumeration()) ||
|
||||
adaptiveColorUsesAnsi(theme.MarkdownImage()) ||
|
||||
adaptiveColorUsesAnsi(theme.MarkdownImageText()) ||
|
||||
adaptiveColorUsesAnsi(theme.MarkdownCodeBlock()) ||
|
||||
adaptiveColorUsesAnsi(theme.SyntaxComment()) ||
|
||||
adaptiveColorUsesAnsi(theme.SyntaxKeyword()) ||
|
||||
adaptiveColorUsesAnsi(theme.SyntaxFunction()) ||
|
||||
adaptiveColorUsesAnsi(theme.SyntaxVariable()) ||
|
||||
adaptiveColorUsesAnsi(theme.SyntaxString()) ||
|
||||
adaptiveColorUsesAnsi(theme.SyntaxNumber()) ||
|
||||
adaptiveColorUsesAnsi(theme.SyntaxType()) ||
|
||||
adaptiveColorUsesAnsi(theme.SyntaxOperator()) ||
|
||||
adaptiveColorUsesAnsi(theme.SyntaxPunctuation())
|
||||
}
|
||||
303
packages/client/tui/internal/theme/system.go
Normal file
303
packages/client/tui/internal/theme/system.go
Normal file
|
|
@ -0,0 +1,303 @@
|
|||
package theme
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"image/color"
|
||||
"math"
|
||||
|
||||
"github.com/charmbracelet/lipgloss/v2"
|
||||
"github.com/charmbracelet/lipgloss/v2/compat"
|
||||
)
|
||||
|
||||
// SystemTheme is a dynamic theme that derives its gray scale colors
|
||||
// from the terminal's background color at runtime
|
||||
type SystemTheme struct {
|
||||
BaseTheme
|
||||
terminalBg color.Color
|
||||
terminalBgIsDark bool
|
||||
}
|
||||
|
||||
// NewSystemTheme creates a new instance of the dynamic system theme
|
||||
func NewSystemTheme(terminalBg color.Color, isDark bool) *SystemTheme {
|
||||
theme := &SystemTheme{
|
||||
terminalBg: terminalBg,
|
||||
terminalBgIsDark: isDark,
|
||||
}
|
||||
theme.initializeColors()
|
||||
return theme
|
||||
}
|
||||
|
||||
func (t *SystemTheme) Name() string {
|
||||
return "system"
|
||||
}
|
||||
|
||||
// initializeColors sets up all theme colors
|
||||
func (t *SystemTheme) initializeColors() {
|
||||
// Generate gray scale based on terminal background
|
||||
grays := t.generateGrayScale()
|
||||
|
||||
// Set ANSI colors for primary colors
|
||||
t.PrimaryColor = compat.AdaptiveColor{
|
||||
Dark: lipgloss.Cyan,
|
||||
Light: lipgloss.Cyan,
|
||||
}
|
||||
t.SecondaryColor = compat.AdaptiveColor{
|
||||
Dark: lipgloss.Magenta,
|
||||
Light: lipgloss.Magenta,
|
||||
}
|
||||
t.AccentColor = compat.AdaptiveColor{
|
||||
Dark: lipgloss.Cyan,
|
||||
Light: lipgloss.Cyan,
|
||||
}
|
||||
|
||||
// Status colors using ANSI
|
||||
t.ErrorColor = compat.AdaptiveColor{
|
||||
Dark: lipgloss.Red,
|
||||
Light: lipgloss.Red,
|
||||
}
|
||||
t.WarningColor = compat.AdaptiveColor{
|
||||
Dark: lipgloss.Yellow,
|
||||
Light: lipgloss.Yellow,
|
||||
}
|
||||
t.SuccessColor = compat.AdaptiveColor{
|
||||
Dark: lipgloss.Green,
|
||||
Light: lipgloss.Green,
|
||||
}
|
||||
t.InfoColor = compat.AdaptiveColor{
|
||||
Dark: lipgloss.Cyan,
|
||||
Light: lipgloss.Cyan,
|
||||
}
|
||||
|
||||
// Text colors
|
||||
t.TextColor = compat.AdaptiveColor{
|
||||
Dark: lipgloss.NoColor{},
|
||||
Light: lipgloss.NoColor{},
|
||||
}
|
||||
// Derive muted text color from terminal foreground
|
||||
t.TextMutedColor = t.generateMutedTextColor()
|
||||
|
||||
// Background colors
|
||||
t.BackgroundColor = compat.AdaptiveColor{
|
||||
Dark: lipgloss.NoColor{},
|
||||
Light: lipgloss.NoColor{},
|
||||
}
|
||||
t.BackgroundPanelColor = grays[2]
|
||||
t.BackgroundElementColor = grays[3]
|
||||
|
||||
// Border colors
|
||||
t.BorderSubtleColor = grays[6]
|
||||
t.BorderColor = grays[7]
|
||||
t.BorderActiveColor = grays[8]
|
||||
|
||||
// Diff colors using ANSI colors
|
||||
t.DiffAddedColor = compat.AdaptiveColor{
|
||||
Dark: lipgloss.Color("2"), // green
|
||||
Light: lipgloss.Color("2"),
|
||||
}
|
||||
t.DiffRemovedColor = compat.AdaptiveColor{
|
||||
Dark: lipgloss.Color("1"), // red
|
||||
Light: lipgloss.Color("1"),
|
||||
}
|
||||
t.DiffContextColor = grays[7] // Use gray for context
|
||||
t.DiffHunkHeaderColor = grays[7]
|
||||
t.DiffHighlightAddedColor = compat.AdaptiveColor{
|
||||
Dark: lipgloss.Color("2"), // green
|
||||
Light: lipgloss.Color("2"),
|
||||
}
|
||||
t.DiffHighlightRemovedColor = compat.AdaptiveColor{
|
||||
Dark: lipgloss.Color("1"), // red
|
||||
Light: lipgloss.Color("1"),
|
||||
}
|
||||
// Use subtle gray backgrounds for diff
|
||||
t.DiffAddedBgColor = grays[2]
|
||||
t.DiffRemovedBgColor = grays[2]
|
||||
t.DiffContextBgColor = grays[1]
|
||||
t.DiffLineNumberColor = grays[6]
|
||||
t.DiffAddedLineNumberBgColor = grays[3]
|
||||
t.DiffRemovedLineNumberBgColor = grays[3]
|
||||
|
||||
// Markdown colors using ANSI
|
||||
t.MarkdownTextColor = compat.AdaptiveColor{
|
||||
Dark: lipgloss.NoColor{},
|
||||
Light: lipgloss.NoColor{},
|
||||
}
|
||||
t.MarkdownHeadingColor = compat.AdaptiveColor{
|
||||
Dark: lipgloss.NoColor{},
|
||||
Light: lipgloss.NoColor{},
|
||||
}
|
||||
t.MarkdownLinkColor = compat.AdaptiveColor{
|
||||
Dark: lipgloss.Color("4"), // blue
|
||||
Light: lipgloss.Color("4"),
|
||||
}
|
||||
t.MarkdownLinkTextColor = compat.AdaptiveColor{
|
||||
Dark: lipgloss.Color("6"), // cyan
|
||||
Light: lipgloss.Color("6"),
|
||||
}
|
||||
t.MarkdownCodeColor = compat.AdaptiveColor{
|
||||
Dark: lipgloss.Color("2"), // green
|
||||
Light: lipgloss.Color("2"),
|
||||
}
|
||||
t.MarkdownBlockQuoteColor = compat.AdaptiveColor{
|
||||
Dark: lipgloss.Color("3"), // yellow
|
||||
Light: lipgloss.Color("3"),
|
||||
}
|
||||
t.MarkdownEmphColor = compat.AdaptiveColor{
|
||||
Dark: lipgloss.Color("3"), // yellow
|
||||
Light: lipgloss.Color("3"),
|
||||
}
|
||||
t.MarkdownStrongColor = compat.AdaptiveColor{
|
||||
Dark: lipgloss.NoColor{},
|
||||
Light: lipgloss.NoColor{},
|
||||
}
|
||||
t.MarkdownHorizontalRuleColor = t.BorderColor
|
||||
t.MarkdownListItemColor = compat.AdaptiveColor{
|
||||
Dark: lipgloss.Color("4"), // blue
|
||||
Light: lipgloss.Color("4"),
|
||||
}
|
||||
t.MarkdownListEnumerationColor = compat.AdaptiveColor{
|
||||
Dark: lipgloss.Color("6"), // cyan
|
||||
Light: lipgloss.Color("6"),
|
||||
}
|
||||
t.MarkdownImageColor = compat.AdaptiveColor{
|
||||
Dark: lipgloss.Color("4"), // blue
|
||||
Light: lipgloss.Color("4"),
|
||||
}
|
||||
t.MarkdownImageTextColor = compat.AdaptiveColor{
|
||||
Dark: lipgloss.Color("6"), // cyan
|
||||
Light: lipgloss.Color("6"),
|
||||
}
|
||||
t.MarkdownCodeBlockColor = compat.AdaptiveColor{
|
||||
Dark: lipgloss.NoColor{},
|
||||
Light: lipgloss.NoColor{},
|
||||
}
|
||||
|
||||
// Syntax colors
|
||||
t.SyntaxCommentColor = t.TextMutedColor // Use same as muted text
|
||||
t.SyntaxKeywordColor = compat.AdaptiveColor{
|
||||
Dark: lipgloss.Color("5"), // magenta
|
||||
Light: lipgloss.Color("5"),
|
||||
}
|
||||
t.SyntaxFunctionColor = compat.AdaptiveColor{
|
||||
Dark: lipgloss.Color("4"), // blue
|
||||
Light: lipgloss.Color("4"),
|
||||
}
|
||||
t.SyntaxVariableColor = compat.AdaptiveColor{
|
||||
Dark: lipgloss.NoColor{},
|
||||
Light: lipgloss.NoColor{},
|
||||
}
|
||||
t.SyntaxStringColor = compat.AdaptiveColor{
|
||||
Dark: lipgloss.Color("2"), // green
|
||||
Light: lipgloss.Color("2"),
|
||||
}
|
||||
t.SyntaxNumberColor = compat.AdaptiveColor{
|
||||
Dark: lipgloss.Color("3"), // yellow
|
||||
Light: lipgloss.Color("3"),
|
||||
}
|
||||
t.SyntaxTypeColor = compat.AdaptiveColor{
|
||||
Dark: lipgloss.Color("6"), // cyan
|
||||
Light: lipgloss.Color("6"),
|
||||
}
|
||||
t.SyntaxOperatorColor = compat.AdaptiveColor{
|
||||
Dark: lipgloss.Color("6"), // cyan
|
||||
Light: lipgloss.Color("6"),
|
||||
}
|
||||
t.SyntaxPunctuationColor = compat.AdaptiveColor{
|
||||
Dark: lipgloss.NoColor{},
|
||||
Light: lipgloss.NoColor{},
|
||||
}
|
||||
}
|
||||
|
||||
// generateGrayScale creates a gray scale based on the terminal background
|
||||
func (t *SystemTheme) generateGrayScale() map[int]compat.AdaptiveColor {
|
||||
grays := make(map[int]compat.AdaptiveColor)
|
||||
|
||||
r, g, b, _ := t.terminalBg.RGBA()
|
||||
bgR := float64(r >> 8)
|
||||
bgG := float64(g >> 8)
|
||||
bgB := float64(b >> 8)
|
||||
|
||||
luminance := 0.299*bgR + 0.587*bgG + 0.114*bgB
|
||||
|
||||
for i := 1; i <= 12; i++ {
|
||||
var stepColor string
|
||||
factor := float64(i) / 12.0
|
||||
|
||||
if t.terminalBgIsDark {
|
||||
if luminance < 10 {
|
||||
grayValue := int(factor * 0.4 * 255)
|
||||
stepColor = fmt.Sprintf("#%02x%02x%02x", grayValue, grayValue, grayValue)
|
||||
} else {
|
||||
newLum := luminance + (255-luminance)*factor*0.4
|
||||
|
||||
ratio := newLum / luminance
|
||||
newR := math.Min(bgR*ratio, 255)
|
||||
newG := math.Min(bgG*ratio, 255)
|
||||
newB := math.Min(bgB*ratio, 255)
|
||||
|
||||
stepColor = fmt.Sprintf("#%02x%02x%02x", int(newR), int(newG), int(newB))
|
||||
}
|
||||
} else {
|
||||
if luminance > 245 {
|
||||
grayValue := int(255 - factor*0.4*255)
|
||||
stepColor = fmt.Sprintf("#%02x%02x%02x", grayValue, grayValue, grayValue)
|
||||
} else {
|
||||
newLum := luminance * (1 - factor*0.4)
|
||||
|
||||
ratio := newLum / luminance
|
||||
newR := math.Max(bgR*ratio, 0)
|
||||
newG := math.Max(bgG*ratio, 0)
|
||||
newB := math.Max(bgB*ratio, 0)
|
||||
|
||||
stepColor = fmt.Sprintf("#%02x%02x%02x", int(newR), int(newG), int(newB))
|
||||
}
|
||||
}
|
||||
|
||||
grays[i] = compat.AdaptiveColor{
|
||||
Dark: lipgloss.Color(stepColor),
|
||||
Light: lipgloss.Color(stepColor),
|
||||
}
|
||||
}
|
||||
|
||||
return grays
|
||||
}
|
||||
|
||||
// generateMutedTextColor creates a muted gray color based on the terminal background
|
||||
func (t *SystemTheme) generateMutedTextColor() compat.AdaptiveColor {
|
||||
bgR, bgG, bgB, _ := t.terminalBg.RGBA()
|
||||
|
||||
bgRf := float64(bgR >> 8)
|
||||
bgGf := float64(bgG >> 8)
|
||||
bgBf := float64(bgB >> 8)
|
||||
|
||||
bgLum := 0.299*bgRf + 0.587*bgGf + 0.114*bgBf
|
||||
|
||||
var grayValue int
|
||||
if t.terminalBgIsDark {
|
||||
if bgLum < 10 {
|
||||
// Very dark/black background
|
||||
// grays[3] would be around #2e (46), so we need much lighter
|
||||
grayValue = 180 // #b4b4b4
|
||||
} else {
|
||||
// Scale up for lighter dark backgrounds
|
||||
// Ensure we're always significantly brighter than BackgroundElement
|
||||
grayValue = min(int(160+(bgLum*0.3)), 200)
|
||||
}
|
||||
} else {
|
||||
if bgLum > 245 {
|
||||
// Very light/white background
|
||||
// grays[3] would be around #f5 (245), so we need much darker
|
||||
grayValue = 75 // #4b4b4b
|
||||
} else {
|
||||
// Scale down for darker light backgrounds
|
||||
// Ensure we're always significantly darker than BackgroundElement
|
||||
grayValue = max(int(100-((255-bgLum)*0.2)), 60)
|
||||
}
|
||||
}
|
||||
|
||||
mutedColor := fmt.Sprintf("#%02x%02x%02x", grayValue, grayValue, grayValue)
|
||||
|
||||
return compat.AdaptiveColor{
|
||||
Dark: lipgloss.Color(mutedColor),
|
||||
Light: lipgloss.Color(mutedColor),
|
||||
}
|
||||
}
|
||||
215
packages/client/tui/internal/theme/theme.go
Normal file
215
packages/client/tui/internal/theme/theme.go
Normal file
|
|
@ -0,0 +1,215 @@
|
|||
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 }
|
||||
80
packages/client/tui/internal/theme/themes/ayu.json
Normal file
80
packages/client/tui/internal/theme/themes/ayu.json
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
{
|
||||
"$schema": "https://opencode.ai/theme.json",
|
||||
"defs": {
|
||||
"darkBg": "#0B0E14",
|
||||
"darkBgAlt": "#0D1017",
|
||||
"darkLine": "#11151C",
|
||||
"darkPanel": "#0F131A",
|
||||
"darkFg": "#BFBDB6",
|
||||
"darkFgMuted": "#565B66",
|
||||
"darkGutter": "#6C7380",
|
||||
"darkTag": "#39BAE6",
|
||||
"darkFunc": "#FFB454",
|
||||
"darkEntity": "#59C2FF",
|
||||
"darkString": "#AAD94C",
|
||||
"darkRegexp": "#95E6CB",
|
||||
"darkMarkup": "#F07178",
|
||||
"darkKeyword": "#FF8F40",
|
||||
"darkSpecial": "#E6B673",
|
||||
"darkComment": "#ACB6BF",
|
||||
"darkConstant": "#D2A6FF",
|
||||
"darkOperator": "#F29668",
|
||||
"darkAdded": "#7FD962",
|
||||
"darkRemoved": "#F26D78",
|
||||
"darkAccent": "#E6B450",
|
||||
"darkError": "#D95757",
|
||||
"darkIndentActive": "#6C7380"
|
||||
},
|
||||
"theme": {
|
||||
"primary": "darkEntity",
|
||||
"secondary": "darkConstant",
|
||||
"accent": "darkAccent",
|
||||
"error": "darkError",
|
||||
"warning": "darkSpecial",
|
||||
"success": "darkAdded",
|
||||
"info": "darkTag",
|
||||
"text": "darkFg",
|
||||
"textMuted": "darkFgMuted",
|
||||
"background": "darkBg",
|
||||
"backgroundPanel": "darkPanel",
|
||||
"backgroundElement": "darkBgAlt",
|
||||
"border": "darkGutter",
|
||||
"borderActive": "darkIndentActive",
|
||||
"borderSubtle": "darkLine",
|
||||
"diffAdded": "darkAdded",
|
||||
"diffRemoved": "darkRemoved",
|
||||
"diffContext": "darkComment",
|
||||
"diffHunkHeader": "darkComment",
|
||||
"diffHighlightAdded": "darkString",
|
||||
"diffHighlightRemoved": "darkMarkup",
|
||||
"diffAddedBg": "#20303b",
|
||||
"diffRemovedBg": "#37222c",
|
||||
"diffContextBg": "darkPanel",
|
||||
"diffLineNumber": "darkGutter",
|
||||
"diffAddedLineNumberBg": "#1b2b34",
|
||||
"diffRemovedLineNumberBg": "#2d1f26",
|
||||
"markdownText": "darkFg",
|
||||
"markdownHeading": "darkConstant",
|
||||
"markdownLink": "darkEntity",
|
||||
"markdownLinkText": "darkTag",
|
||||
"markdownCode": "darkString",
|
||||
"markdownBlockQuote": "darkSpecial",
|
||||
"markdownEmph": "darkSpecial",
|
||||
"markdownStrong": "darkFunc",
|
||||
"markdownHorizontalRule": "darkFgMuted",
|
||||
"markdownListItem": "darkEntity",
|
||||
"markdownListEnumeration": "darkTag",
|
||||
"markdownImage": "darkEntity",
|
||||
"markdownImageText": "darkTag",
|
||||
"markdownCodeBlock": "darkFg",
|
||||
"syntaxComment": "darkComment",
|
||||
"syntaxKeyword": "darkKeyword",
|
||||
"syntaxFunction": "darkFunc",
|
||||
"syntaxVariable": "darkEntity",
|
||||
"syntaxString": "darkString",
|
||||
"syntaxNumber": "darkConstant",
|
||||
"syntaxType": "darkSpecial",
|
||||
"syntaxOperator": "darkOperator",
|
||||
"syntaxPunctuation": "darkFg"
|
||||
}
|
||||
}
|
||||
112
packages/client/tui/internal/theme/themes/catppuccin.json
Normal file
112
packages/client/tui/internal/theme/themes/catppuccin.json
Normal file
|
|
@ -0,0 +1,112 @@
|
|||
{
|
||||
"$schema": "https://opencode.ai/theme.json",
|
||||
"defs": {
|
||||
"lightRosewater": "#dc8a78",
|
||||
"lightFlamingo": "#dd7878",
|
||||
"lightPink": "#ea76cb",
|
||||
"lightMauve": "#8839ef",
|
||||
"lightRed": "#d20f39",
|
||||
"lightMaroon": "#e64553",
|
||||
"lightPeach": "#fe640b",
|
||||
"lightYellow": "#df8e1d",
|
||||
"lightGreen": "#40a02b",
|
||||
"lightTeal": "#179299",
|
||||
"lightSky": "#04a5e5",
|
||||
"lightSapphire": "#209fb5",
|
||||
"lightBlue": "#1e66f5",
|
||||
"lightLavender": "#7287fd",
|
||||
"lightText": "#4c4f69",
|
||||
"lightSubtext1": "#5c5f77",
|
||||
"lightSubtext0": "#6c6f85",
|
||||
"lightOverlay2": "#7c7f93",
|
||||
"lightOverlay1": "#8c8fa1",
|
||||
"lightOverlay0": "#9ca0b0",
|
||||
"lightSurface2": "#acb0be",
|
||||
"lightSurface1": "#bcc0cc",
|
||||
"lightSurface0": "#ccd0da",
|
||||
"lightBase": "#eff1f5",
|
||||
"lightMantle": "#e6e9ef",
|
||||
"lightCrust": "#dce0e8",
|
||||
"darkRosewater": "#f5e0dc",
|
||||
"darkFlamingo": "#f2cdcd",
|
||||
"darkPink": "#f5c2e7",
|
||||
"darkMauve": "#cba6f7",
|
||||
"darkRed": "#f38ba8",
|
||||
"darkMaroon": "#eba0ac",
|
||||
"darkPeach": "#fab387",
|
||||
"darkYellow": "#f9e2af",
|
||||
"darkGreen": "#a6e3a1",
|
||||
"darkTeal": "#94e2d5",
|
||||
"darkSky": "#89dceb",
|
||||
"darkSapphire": "#74c7ec",
|
||||
"darkBlue": "#89b4fa",
|
||||
"darkLavender": "#b4befe",
|
||||
"darkText": "#cdd6f4",
|
||||
"darkSubtext1": "#bac2de",
|
||||
"darkSubtext0": "#a6adc8",
|
||||
"darkOverlay2": "#9399b2",
|
||||
"darkOverlay1": "#7f849c",
|
||||
"darkOverlay0": "#6c7086",
|
||||
"darkSurface2": "#585b70",
|
||||
"darkSurface1": "#45475a",
|
||||
"darkSurface0": "#313244",
|
||||
"darkBase": "#1e1e2e",
|
||||
"darkMantle": "#181825",
|
||||
"darkCrust": "#11111b"
|
||||
},
|
||||
"theme": {
|
||||
"primary": { "dark": "darkBlue", "light": "lightBlue" },
|
||||
"secondary": { "dark": "darkMauve", "light": "lightMauve" },
|
||||
"accent": { "dark": "darkPink", "light": "lightPink" },
|
||||
"error": { "dark": "darkRed", "light": "lightRed" },
|
||||
"warning": { "dark": "darkYellow", "light": "lightYellow" },
|
||||
"success": { "dark": "darkGreen", "light": "lightGreen" },
|
||||
"info": { "dark": "darkTeal", "light": "lightTeal" },
|
||||
"text": { "dark": "darkText", "light": "lightText" },
|
||||
"textMuted": { "dark": "darkSubtext1", "light": "lightSubtext1" },
|
||||
"background": { "dark": "darkBase", "light": "lightBase" },
|
||||
"backgroundPanel": { "dark": "darkMantle", "light": "lightMantle" },
|
||||
"backgroundElement": { "dark": "darkCrust", "light": "lightCrust" },
|
||||
"border": { "dark": "darkSurface0", "light": "lightSurface0" },
|
||||
"borderActive": { "dark": "darkSurface1", "light": "lightSurface1" },
|
||||
"borderSubtle": { "dark": "darkSurface2", "light": "lightSurface2" },
|
||||
"diffAdded": { "dark": "darkGreen", "light": "lightGreen" },
|
||||
"diffRemoved": { "dark": "darkRed", "light": "lightRed" },
|
||||
"diffContext": { "dark": "darkOverlay2", "light": "lightOverlay2" },
|
||||
"diffHunkHeader": { "dark": "darkPeach", "light": "lightPeach" },
|
||||
"diffHighlightAdded": { "dark": "darkGreen", "light": "lightGreen" },
|
||||
"diffHighlightRemoved": { "dark": "darkRed", "light": "lightRed" },
|
||||
"diffAddedBg": { "dark": "#24312b", "light": "#d6f0d9" },
|
||||
"diffRemovedBg": { "dark": "#3c2a32", "light": "#f6dfe2" },
|
||||
"diffContextBg": { "dark": "darkMantle", "light": "lightMantle" },
|
||||
"diffLineNumber": { "dark": "darkSurface1", "light": "lightSurface1" },
|
||||
"diffAddedLineNumberBg": { "dark": "#1e2a25", "light": "#c9e3cb" },
|
||||
"diffRemovedLineNumberBg": { "dark": "#32232a", "light": "#e9d3d6" },
|
||||
"markdownText": { "dark": "darkText", "light": "lightText" },
|
||||
"markdownHeading": { "dark": "darkMauve", "light": "lightMauve" },
|
||||
"markdownLink": { "dark": "darkBlue", "light": "lightBlue" },
|
||||
"markdownLinkText": { "dark": "darkSky", "light": "lightSky" },
|
||||
"markdownCode": { "dark": "darkGreen", "light": "lightGreen" },
|
||||
"markdownBlockQuote": { "dark": "darkYellow", "light": "lightYellow" },
|
||||
"markdownEmph": { "dark": "darkYellow", "light": "lightYellow" },
|
||||
"markdownStrong": { "dark": "darkPeach", "light": "lightPeach" },
|
||||
"markdownHorizontalRule": {
|
||||
"dark": "darkSubtext0",
|
||||
"light": "lightSubtext0"
|
||||
},
|
||||
"markdownListItem": { "dark": "darkBlue", "light": "lightBlue" },
|
||||
"markdownListEnumeration": { "dark": "darkSky", "light": "lightSky" },
|
||||
"markdownImage": { "dark": "darkBlue", "light": "lightBlue" },
|
||||
"markdownImageText": { "dark": "darkSky", "light": "lightSky" },
|
||||
"markdownCodeBlock": { "dark": "darkText", "light": "lightText" },
|
||||
"syntaxComment": { "dark": "darkOverlay2", "light": "lightOverlay2" },
|
||||
"syntaxKeyword": { "dark": "darkMauve", "light": "lightMauve" },
|
||||
"syntaxFunction": { "dark": "darkBlue", "light": "lightBlue" },
|
||||
"syntaxVariable": { "dark": "darkRed", "light": "lightRed" },
|
||||
"syntaxString": { "dark": "darkGreen", "light": "lightGreen" },
|
||||
"syntaxNumber": { "dark": "darkPeach", "light": "lightPeach" },
|
||||
"syntaxType": { "dark": "darkYellow", "light": "lightYellow" },
|
||||
"syntaxOperator": { "dark": "darkSky", "light": "lightSky" },
|
||||
"syntaxPunctuation": { "dark": "darkText", "light": "lightText" }
|
||||
}
|
||||
}
|
||||
228
packages/client/tui/internal/theme/themes/cobalt2.json
Normal file
228
packages/client/tui/internal/theme/themes/cobalt2.json
Normal file
|
|
@ -0,0 +1,228 @@
|
|||
{
|
||||
"$schema": "https://opencode.ai/theme.json",
|
||||
"defs": {
|
||||
"background": "#193549",
|
||||
"backgroundAlt": "#122738",
|
||||
"backgroundPanel": "#1f4662",
|
||||
"foreground": "#ffffff",
|
||||
"foregroundMuted": "#adb7c9",
|
||||
"yellow": "#ffc600",
|
||||
"yellowBright": "#ffe14c",
|
||||
"orange": "#ff9d00",
|
||||
"orangeBright": "#ffb454",
|
||||
"mint": "#2affdf",
|
||||
"mintBright": "#7efff5",
|
||||
"blue": "#0088ff",
|
||||
"blueBright": "#5cb7ff",
|
||||
"pink": "#ff628c",
|
||||
"pinkBright": "#ff86a5",
|
||||
"green": "#9eff80",
|
||||
"greenBright": "#b9ff9f",
|
||||
"purple": "#9a5feb",
|
||||
"purpleBright": "#b88cfd",
|
||||
"red": "#ff0088",
|
||||
"redBright": "#ff5fb3"
|
||||
},
|
||||
"theme": {
|
||||
"primary": {
|
||||
"dark": "blue",
|
||||
"light": "#0066cc"
|
||||
},
|
||||
"secondary": {
|
||||
"dark": "purple",
|
||||
"light": "#7c4dff"
|
||||
},
|
||||
"accent": {
|
||||
"dark": "mint",
|
||||
"light": "#00acc1"
|
||||
},
|
||||
"error": {
|
||||
"dark": "red",
|
||||
"light": "#e91e63"
|
||||
},
|
||||
"warning": {
|
||||
"dark": "yellow",
|
||||
"light": "#ff9800"
|
||||
},
|
||||
"success": {
|
||||
"dark": "green",
|
||||
"light": "#4caf50"
|
||||
},
|
||||
"info": {
|
||||
"dark": "orange",
|
||||
"light": "#ff5722"
|
||||
},
|
||||
"text": {
|
||||
"dark": "foreground",
|
||||
"light": "#193549"
|
||||
},
|
||||
"textMuted": {
|
||||
"dark": "foregroundMuted",
|
||||
"light": "#5c6b7d"
|
||||
},
|
||||
"background": {
|
||||
"dark": "#193549",
|
||||
"light": "#ffffff"
|
||||
},
|
||||
"backgroundPanel": {
|
||||
"dark": "#122738",
|
||||
"light": "#f5f7fa"
|
||||
},
|
||||
"backgroundElement": {
|
||||
"dark": "#1f4662",
|
||||
"light": "#e8ecf1"
|
||||
},
|
||||
"border": {
|
||||
"dark": "#1f4662",
|
||||
"light": "#d3dae3"
|
||||
},
|
||||
"borderActive": {
|
||||
"dark": "blue",
|
||||
"light": "#0066cc"
|
||||
},
|
||||
"borderSubtle": {
|
||||
"dark": "#0e1e2e",
|
||||
"light": "#e8ecf1"
|
||||
},
|
||||
"diffAdded": {
|
||||
"dark": "green",
|
||||
"light": "#4caf50"
|
||||
},
|
||||
"diffRemoved": {
|
||||
"dark": "red",
|
||||
"light": "#e91e63"
|
||||
},
|
||||
"diffContext": {
|
||||
"dark": "foregroundMuted",
|
||||
"light": "#5c6b7d"
|
||||
},
|
||||
"diffHunkHeader": {
|
||||
"dark": "mint",
|
||||
"light": "#00acc1"
|
||||
},
|
||||
"diffHighlightAdded": {
|
||||
"dark": "greenBright",
|
||||
"light": "#4caf50"
|
||||
},
|
||||
"diffHighlightRemoved": {
|
||||
"dark": "redBright",
|
||||
"light": "#e91e63"
|
||||
},
|
||||
"diffAddedBg": {
|
||||
"dark": "#1a3a2a",
|
||||
"light": "#e8f5e9"
|
||||
},
|
||||
"diffRemovedBg": {
|
||||
"dark": "#3a1a2a",
|
||||
"light": "#ffebee"
|
||||
},
|
||||
"diffContextBg": {
|
||||
"dark": "#122738",
|
||||
"light": "#f5f7fa"
|
||||
},
|
||||
"diffLineNumber": {
|
||||
"dark": "#2d5a7b",
|
||||
"light": "#b0bec5"
|
||||
},
|
||||
"diffAddedLineNumberBg": {
|
||||
"dark": "#1a3a2a",
|
||||
"light": "#e8f5e9"
|
||||
},
|
||||
"diffRemovedLineNumberBg": {
|
||||
"dark": "#3a1a2a",
|
||||
"light": "#ffebee"
|
||||
},
|
||||
"markdownText": {
|
||||
"dark": "foreground",
|
||||
"light": "#193549"
|
||||
},
|
||||
"markdownHeading": {
|
||||
"dark": "yellow",
|
||||
"light": "#ff9800"
|
||||
},
|
||||
"markdownLink": {
|
||||
"dark": "blue",
|
||||
"light": "#0066cc"
|
||||
},
|
||||
"markdownLinkText": {
|
||||
"dark": "mint",
|
||||
"light": "#00acc1"
|
||||
},
|
||||
"markdownCode": {
|
||||
"dark": "green",
|
||||
"light": "#4caf50"
|
||||
},
|
||||
"markdownBlockQuote": {
|
||||
"dark": "foregroundMuted",
|
||||
"light": "#5c6b7d"
|
||||
},
|
||||
"markdownEmph": {
|
||||
"dark": "orange",
|
||||
"light": "#ff5722"
|
||||
},
|
||||
"markdownStrong": {
|
||||
"dark": "pink",
|
||||
"light": "#e91e63"
|
||||
},
|
||||
"markdownHorizontalRule": {
|
||||
"dark": "#2d5a7b",
|
||||
"light": "#d3dae3"
|
||||
},
|
||||
"markdownListItem": {
|
||||
"dark": "blue",
|
||||
"light": "#0066cc"
|
||||
},
|
||||
"markdownListEnumeration": {
|
||||
"dark": "mint",
|
||||
"light": "#00acc1"
|
||||
},
|
||||
"markdownImage": {
|
||||
"dark": "blue",
|
||||
"light": "#0066cc"
|
||||
},
|
||||
"markdownImageText": {
|
||||
"dark": "mint",
|
||||
"light": "#00acc1"
|
||||
},
|
||||
"markdownCodeBlock": {
|
||||
"dark": "foreground",
|
||||
"light": "#193549"
|
||||
},
|
||||
"syntaxComment": {
|
||||
"dark": "#0088ff",
|
||||
"light": "#5c6b7d"
|
||||
},
|
||||
"syntaxKeyword": {
|
||||
"dark": "orange",
|
||||
"light": "#ff5722"
|
||||
},
|
||||
"syntaxFunction": {
|
||||
"dark": "yellow",
|
||||
"light": "#ff9800"
|
||||
},
|
||||
"syntaxVariable": {
|
||||
"dark": "foreground",
|
||||
"light": "#193549"
|
||||
},
|
||||
"syntaxString": {
|
||||
"dark": "green",
|
||||
"light": "#4caf50"
|
||||
},
|
||||
"syntaxNumber": {
|
||||
"dark": "pink",
|
||||
"light": "#e91e63"
|
||||
},
|
||||
"syntaxType": {
|
||||
"dark": "mint",
|
||||
"light": "#00acc1"
|
||||
},
|
||||
"syntaxOperator": {
|
||||
"dark": "orange",
|
||||
"light": "#ff5722"
|
||||
},
|
||||
"syntaxPunctuation": {
|
||||
"dark": "foreground",
|
||||
"light": "#193549"
|
||||
}
|
||||
}
|
||||
}
|
||||
219
packages/client/tui/internal/theme/themes/dracula.json
Normal file
219
packages/client/tui/internal/theme/themes/dracula.json
Normal file
|
|
@ -0,0 +1,219 @@
|
|||
{
|
||||
"$schema": "https://opencode.ai/theme.json",
|
||||
"defs": {
|
||||
"background": "#282a36",
|
||||
"currentLine": "#44475a",
|
||||
"selection": "#44475a",
|
||||
"foreground": "#f8f8f2",
|
||||
"comment": "#6272a4",
|
||||
"cyan": "#8be9fd",
|
||||
"green": "#50fa7b",
|
||||
"orange": "#ffb86c",
|
||||
"pink": "#ff79c6",
|
||||
"purple": "#bd93f9",
|
||||
"red": "#ff5555",
|
||||
"yellow": "#f1fa8c"
|
||||
},
|
||||
"theme": {
|
||||
"primary": {
|
||||
"dark": "purple",
|
||||
"light": "purple"
|
||||
},
|
||||
"secondary": {
|
||||
"dark": "pink",
|
||||
"light": "pink"
|
||||
},
|
||||
"accent": {
|
||||
"dark": "cyan",
|
||||
"light": "cyan"
|
||||
},
|
||||
"error": {
|
||||
"dark": "red",
|
||||
"light": "red"
|
||||
},
|
||||
"warning": {
|
||||
"dark": "yellow",
|
||||
"light": "yellow"
|
||||
},
|
||||
"success": {
|
||||
"dark": "green",
|
||||
"light": "green"
|
||||
},
|
||||
"info": {
|
||||
"dark": "orange",
|
||||
"light": "orange"
|
||||
},
|
||||
"text": {
|
||||
"dark": "foreground",
|
||||
"light": "#282a36"
|
||||
},
|
||||
"textMuted": {
|
||||
"dark": "comment",
|
||||
"light": "#6272a4"
|
||||
},
|
||||
"background": {
|
||||
"dark": "#282a36",
|
||||
"light": "#f8f8f2"
|
||||
},
|
||||
"backgroundPanel": {
|
||||
"dark": "#21222c",
|
||||
"light": "#e8e8e2"
|
||||
},
|
||||
"backgroundElement": {
|
||||
"dark": "currentLine",
|
||||
"light": "#d8d8d2"
|
||||
},
|
||||
"border": {
|
||||
"dark": "currentLine",
|
||||
"light": "#c8c8c2"
|
||||
},
|
||||
"borderActive": {
|
||||
"dark": "purple",
|
||||
"light": "purple"
|
||||
},
|
||||
"borderSubtle": {
|
||||
"dark": "#191a21",
|
||||
"light": "#e0e0e0"
|
||||
},
|
||||
"diffAdded": {
|
||||
"dark": "green",
|
||||
"light": "green"
|
||||
},
|
||||
"diffRemoved": {
|
||||
"dark": "red",
|
||||
"light": "red"
|
||||
},
|
||||
"diffContext": {
|
||||
"dark": "comment",
|
||||
"light": "#6272a4"
|
||||
},
|
||||
"diffHunkHeader": {
|
||||
"dark": "comment",
|
||||
"light": "#6272a4"
|
||||
},
|
||||
"diffHighlightAdded": {
|
||||
"dark": "green",
|
||||
"light": "green"
|
||||
},
|
||||
"diffHighlightRemoved": {
|
||||
"dark": "red",
|
||||
"light": "red"
|
||||
},
|
||||
"diffAddedBg": {
|
||||
"dark": "#1a3a1a",
|
||||
"light": "#e0ffe0"
|
||||
},
|
||||
"diffRemovedBg": {
|
||||
"dark": "#3a1a1a",
|
||||
"light": "#ffe0e0"
|
||||
},
|
||||
"diffContextBg": {
|
||||
"dark": "#21222c",
|
||||
"light": "#e8e8e2"
|
||||
},
|
||||
"diffLineNumber": {
|
||||
"dark": "currentLine",
|
||||
"light": "#c8c8c2"
|
||||
},
|
||||
"diffAddedLineNumberBg": {
|
||||
"dark": "#1a3a1a",
|
||||
"light": "#e0ffe0"
|
||||
},
|
||||
"diffRemovedLineNumberBg": {
|
||||
"dark": "#3a1a1a",
|
||||
"light": "#ffe0e0"
|
||||
},
|
||||
"markdownText": {
|
||||
"dark": "foreground",
|
||||
"light": "#282a36"
|
||||
},
|
||||
"markdownHeading": {
|
||||
"dark": "purple",
|
||||
"light": "purple"
|
||||
},
|
||||
"markdownLink": {
|
||||
"dark": "cyan",
|
||||
"light": "cyan"
|
||||
},
|
||||
"markdownLinkText": {
|
||||
"dark": "pink",
|
||||
"light": "pink"
|
||||
},
|
||||
"markdownCode": {
|
||||
"dark": "green",
|
||||
"light": "green"
|
||||
},
|
||||
"markdownBlockQuote": {
|
||||
"dark": "comment",
|
||||
"light": "#6272a4"
|
||||
},
|
||||
"markdownEmph": {
|
||||
"dark": "yellow",
|
||||
"light": "yellow"
|
||||
},
|
||||
"markdownStrong": {
|
||||
"dark": "orange",
|
||||
"light": "orange"
|
||||
},
|
||||
"markdownHorizontalRule": {
|
||||
"dark": "comment",
|
||||
"light": "#6272a4"
|
||||
},
|
||||
"markdownListItem": {
|
||||
"dark": "purple",
|
||||
"light": "purple"
|
||||
},
|
||||
"markdownListEnumeration": {
|
||||
"dark": "cyan",
|
||||
"light": "cyan"
|
||||
},
|
||||
"markdownImage": {
|
||||
"dark": "cyan",
|
||||
"light": "cyan"
|
||||
},
|
||||
"markdownImageText": {
|
||||
"dark": "pink",
|
||||
"light": "pink"
|
||||
},
|
||||
"markdownCodeBlock": {
|
||||
"dark": "foreground",
|
||||
"light": "#282a36"
|
||||
},
|
||||
"syntaxComment": {
|
||||
"dark": "comment",
|
||||
"light": "#6272a4"
|
||||
},
|
||||
"syntaxKeyword": {
|
||||
"dark": "pink",
|
||||
"light": "pink"
|
||||
},
|
||||
"syntaxFunction": {
|
||||
"dark": "green",
|
||||
"light": "green"
|
||||
},
|
||||
"syntaxVariable": {
|
||||
"dark": "foreground",
|
||||
"light": "#282a36"
|
||||
},
|
||||
"syntaxString": {
|
||||
"dark": "yellow",
|
||||
"light": "yellow"
|
||||
},
|
||||
"syntaxNumber": {
|
||||
"dark": "purple",
|
||||
"light": "purple"
|
||||
},
|
||||
"syntaxType": {
|
||||
"dark": "cyan",
|
||||
"light": "cyan"
|
||||
},
|
||||
"syntaxOperator": {
|
||||
"dark": "pink",
|
||||
"light": "pink"
|
||||
},
|
||||
"syntaxPunctuation": {
|
||||
"dark": "foreground",
|
||||
"light": "#282a36"
|
||||
}
|
||||
}
|
||||
}
|
||||
241
packages/client/tui/internal/theme/themes/everforest.json
Normal file
241
packages/client/tui/internal/theme/themes/everforest.json
Normal file
|
|
@ -0,0 +1,241 @@
|
|||
{
|
||||
"$schema": "https://opencode.ai/theme.json",
|
||||
"defs": {
|
||||
"darkStep1": "#2d353b",
|
||||
"darkStep2": "#333c43",
|
||||
"darkStep3": "#343f44",
|
||||
"darkStep4": "#3d484d",
|
||||
"darkStep5": "#475258",
|
||||
"darkStep6": "#7a8478",
|
||||
"darkStep7": "#859289",
|
||||
"darkStep8": "#9da9a0",
|
||||
"darkStep9": "#a7c080",
|
||||
"darkStep10": "#83c092",
|
||||
"darkStep11": "#7a8478",
|
||||
"darkStep12": "#d3c6aa",
|
||||
"darkRed": "#e67e80",
|
||||
"darkOrange": "#e69875",
|
||||
"darkGreen": "#a7c080",
|
||||
"darkCyan": "#83c092",
|
||||
"darkYellow": "#dbbc7f",
|
||||
"lightStep1": "#fdf6e3",
|
||||
"lightStep2": "#efebd4",
|
||||
"lightStep3": "#f4f0d9",
|
||||
"lightStep4": "#efebd4",
|
||||
"lightStep5": "#e6e2cc",
|
||||
"lightStep6": "#a6b0a0",
|
||||
"lightStep7": "#939f91",
|
||||
"lightStep8": "#829181",
|
||||
"lightStep9": "#8da101",
|
||||
"lightStep10": "#35a77c",
|
||||
"lightStep11": "#a6b0a0",
|
||||
"lightStep12": "#5c6a72",
|
||||
"lightRed": "#f85552",
|
||||
"lightOrange": "#f57d26",
|
||||
"lightGreen": "#8da101",
|
||||
"lightCyan": "#35a77c",
|
||||
"lightYellow": "#dfa000"
|
||||
},
|
||||
"theme": {
|
||||
"primary": {
|
||||
"dark": "darkStep9",
|
||||
"light": "lightStep9"
|
||||
},
|
||||
"secondary": {
|
||||
"dark": "#7fbbb3",
|
||||
"light": "#3a94c5"
|
||||
},
|
||||
"accent": {
|
||||
"dark": "#d699b6",
|
||||
"light": "#df69ba"
|
||||
},
|
||||
"error": {
|
||||
"dark": "darkRed",
|
||||
"light": "lightRed"
|
||||
},
|
||||
"warning": {
|
||||
"dark": "darkOrange",
|
||||
"light": "lightOrange"
|
||||
},
|
||||
"success": {
|
||||
"dark": "darkGreen",
|
||||
"light": "lightGreen"
|
||||
},
|
||||
"info": {
|
||||
"dark": "darkCyan",
|
||||
"light": "lightCyan"
|
||||
},
|
||||
"text": {
|
||||
"dark": "darkStep12",
|
||||
"light": "lightStep12"
|
||||
},
|
||||
"textMuted": {
|
||||
"dark": "darkStep11",
|
||||
"light": "lightStep11"
|
||||
},
|
||||
"background": {
|
||||
"dark": "darkStep1",
|
||||
"light": "lightStep1"
|
||||
},
|
||||
"backgroundPanel": {
|
||||
"dark": "darkStep2",
|
||||
"light": "lightStep2"
|
||||
},
|
||||
"backgroundElement": {
|
||||
"dark": "darkStep3",
|
||||
"light": "lightStep3"
|
||||
},
|
||||
"border": {
|
||||
"dark": "darkStep7",
|
||||
"light": "lightStep7"
|
||||
},
|
||||
"borderActive": {
|
||||
"dark": "darkStep8",
|
||||
"light": "lightStep8"
|
||||
},
|
||||
"borderSubtle": {
|
||||
"dark": "darkStep6",
|
||||
"light": "lightStep6"
|
||||
},
|
||||
"diffAdded": {
|
||||
"dark": "#4fd6be",
|
||||
"light": "#1e725c"
|
||||
},
|
||||
"diffRemoved": {
|
||||
"dark": "#c53b53",
|
||||
"light": "#c53b53"
|
||||
},
|
||||
"diffContext": {
|
||||
"dark": "#828bb8",
|
||||
"light": "#7086b5"
|
||||
},
|
||||
"diffHunkHeader": {
|
||||
"dark": "#828bb8",
|
||||
"light": "#7086b5"
|
||||
},
|
||||
"diffHighlightAdded": {
|
||||
"dark": "#b8db87",
|
||||
"light": "#4db380"
|
||||
},
|
||||
"diffHighlightRemoved": {
|
||||
"dark": "#e26a75",
|
||||
"light": "#f52a65"
|
||||
},
|
||||
"diffAddedBg": {
|
||||
"dark": "#20303b",
|
||||
"light": "#d5e5d5"
|
||||
},
|
||||
"diffRemovedBg": {
|
||||
"dark": "#37222c",
|
||||
"light": "#f7d8db"
|
||||
},
|
||||
"diffContextBg": {
|
||||
"dark": "darkStep2",
|
||||
"light": "lightStep2"
|
||||
},
|
||||
"diffLineNumber": {
|
||||
"dark": "darkStep3",
|
||||
"light": "lightStep3"
|
||||
},
|
||||
"diffAddedLineNumberBg": {
|
||||
"dark": "#1b2b34",
|
||||
"light": "#c5d5c5"
|
||||
},
|
||||
"diffRemovedLineNumberBg": {
|
||||
"dark": "#2d1f26",
|
||||
"light": "#e7c8cb"
|
||||
},
|
||||
"markdownText": {
|
||||
"dark": "darkStep12",
|
||||
"light": "lightStep12"
|
||||
},
|
||||
"markdownHeading": {
|
||||
"dark": "#d699b6",
|
||||
"light": "#df69ba"
|
||||
},
|
||||
"markdownLink": {
|
||||
"dark": "darkStep9",
|
||||
"light": "lightStep9"
|
||||
},
|
||||
"markdownLinkText": {
|
||||
"dark": "darkCyan",
|
||||
"light": "lightCyan"
|
||||
},
|
||||
"markdownCode": {
|
||||
"dark": "darkGreen",
|
||||
"light": "lightGreen"
|
||||
},
|
||||
"markdownBlockQuote": {
|
||||
"dark": "darkYellow",
|
||||
"light": "lightYellow"
|
||||
},
|
||||
"markdownEmph": {
|
||||
"dark": "darkYellow",
|
||||
"light": "lightYellow"
|
||||
},
|
||||
"markdownStrong": {
|
||||
"dark": "darkOrange",
|
||||
"light": "lightOrange"
|
||||
},
|
||||
"markdownHorizontalRule": {
|
||||
"dark": "darkStep11",
|
||||
"light": "lightStep11"
|
||||
},
|
||||
"markdownListItem": {
|
||||
"dark": "darkStep9",
|
||||
"light": "lightStep9"
|
||||
},
|
||||
"markdownListEnumeration": {
|
||||
"dark": "darkCyan",
|
||||
"light": "lightCyan"
|
||||
},
|
||||
"markdownImage": {
|
||||
"dark": "darkStep9",
|
||||
"light": "lightStep9"
|
||||
},
|
||||
"markdownImageText": {
|
||||
"dark": "darkCyan",
|
||||
"light": "lightCyan"
|
||||
},
|
||||
"markdownCodeBlock": {
|
||||
"dark": "darkStep12",
|
||||
"light": "lightStep12"
|
||||
},
|
||||
"syntaxComment": {
|
||||
"dark": "darkStep11",
|
||||
"light": "lightStep11"
|
||||
},
|
||||
"syntaxKeyword": {
|
||||
"dark": "#d699b6",
|
||||
"light": "#df69ba"
|
||||
},
|
||||
"syntaxFunction": {
|
||||
"dark": "darkStep9",
|
||||
"light": "lightStep9"
|
||||
},
|
||||
"syntaxVariable": {
|
||||
"dark": "darkRed",
|
||||
"light": "lightRed"
|
||||
},
|
||||
"syntaxString": {
|
||||
"dark": "darkGreen",
|
||||
"light": "lightGreen"
|
||||
},
|
||||
"syntaxNumber": {
|
||||
"dark": "darkOrange",
|
||||
"light": "lightOrange"
|
||||
},
|
||||
"syntaxType": {
|
||||
"dark": "darkYellow",
|
||||
"light": "lightYellow"
|
||||
},
|
||||
"syntaxOperator": {
|
||||
"dark": "darkCyan",
|
||||
"light": "lightCyan"
|
||||
},
|
||||
"syntaxPunctuation": {
|
||||
"dark": "darkStep12",
|
||||
"light": "lightStep12"
|
||||
}
|
||||
}
|
||||
}
|
||||
233
packages/client/tui/internal/theme/themes/github.json
Normal file
233
packages/client/tui/internal/theme/themes/github.json
Normal file
|
|
@ -0,0 +1,233 @@
|
|||
{
|
||||
"$schema": "https://opencode.ai/theme.json",
|
||||
"defs": {
|
||||
"darkBg": "#0d1117",
|
||||
"darkBgAlt": "#010409",
|
||||
"darkBgPanel": "#161b22",
|
||||
"darkFg": "#c9d1d9",
|
||||
"darkFgMuted": "#8b949e",
|
||||
"darkBlue": "#58a6ff",
|
||||
"darkGreen": "#3fb950",
|
||||
"darkRed": "#f85149",
|
||||
"darkOrange": "#d29922",
|
||||
"darkPurple": "#bc8cff",
|
||||
"darkPink": "#ff7b72",
|
||||
"darkYellow": "#e3b341",
|
||||
"darkCyan": "#39c5cf",
|
||||
"lightBg": "#ffffff",
|
||||
"lightBgAlt": "#f6f8fa",
|
||||
"lightBgPanel": "#f0f3f6",
|
||||
"lightFg": "#24292f",
|
||||
"lightFgMuted": "#57606a",
|
||||
"lightBlue": "#0969da",
|
||||
"lightGreen": "#1a7f37",
|
||||
"lightRed": "#cf222e",
|
||||
"lightOrange": "#bc4c00",
|
||||
"lightPurple": "#8250df",
|
||||
"lightPink": "#bf3989",
|
||||
"lightYellow": "#9a6700",
|
||||
"lightCyan": "#1b7c83"
|
||||
},
|
||||
"theme": {
|
||||
"primary": {
|
||||
"dark": "darkBlue",
|
||||
"light": "lightBlue"
|
||||
},
|
||||
"secondary": {
|
||||
"dark": "darkPurple",
|
||||
"light": "lightPurple"
|
||||
},
|
||||
"accent": {
|
||||
"dark": "darkCyan",
|
||||
"light": "lightCyan"
|
||||
},
|
||||
"error": {
|
||||
"dark": "darkRed",
|
||||
"light": "lightRed"
|
||||
},
|
||||
"warning": {
|
||||
"dark": "darkYellow",
|
||||
"light": "lightYellow"
|
||||
},
|
||||
"success": {
|
||||
"dark": "darkGreen",
|
||||
"light": "lightGreen"
|
||||
},
|
||||
"info": {
|
||||
"dark": "darkOrange",
|
||||
"light": "lightOrange"
|
||||
},
|
||||
"text": {
|
||||
"dark": "darkFg",
|
||||
"light": "lightFg"
|
||||
},
|
||||
"textMuted": {
|
||||
"dark": "darkFgMuted",
|
||||
"light": "lightFgMuted"
|
||||
},
|
||||
"background": {
|
||||
"dark": "darkBg",
|
||||
"light": "lightBg"
|
||||
},
|
||||
"backgroundPanel": {
|
||||
"dark": "darkBgAlt",
|
||||
"light": "lightBgAlt"
|
||||
},
|
||||
"backgroundElement": {
|
||||
"dark": "darkBgPanel",
|
||||
"light": "lightBgPanel"
|
||||
},
|
||||
"border": {
|
||||
"dark": "#30363d",
|
||||
"light": "#d0d7de"
|
||||
},
|
||||
"borderActive": {
|
||||
"dark": "darkBlue",
|
||||
"light": "lightBlue"
|
||||
},
|
||||
"borderSubtle": {
|
||||
"dark": "#21262d",
|
||||
"light": "#d8dee4"
|
||||
},
|
||||
"diffAdded": {
|
||||
"dark": "darkGreen",
|
||||
"light": "lightGreen"
|
||||
},
|
||||
"diffRemoved": {
|
||||
"dark": "darkRed",
|
||||
"light": "lightRed"
|
||||
},
|
||||
"diffContext": {
|
||||
"dark": "darkFgMuted",
|
||||
"light": "lightFgMuted"
|
||||
},
|
||||
"diffHunkHeader": {
|
||||
"dark": "darkBlue",
|
||||
"light": "lightBlue"
|
||||
},
|
||||
"diffHighlightAdded": {
|
||||
"dark": "#3fb950",
|
||||
"light": "#1a7f37"
|
||||
},
|
||||
"diffHighlightRemoved": {
|
||||
"dark": "#f85149",
|
||||
"light": "#cf222e"
|
||||
},
|
||||
"diffAddedBg": {
|
||||
"dark": "#033a16",
|
||||
"light": "#dafbe1"
|
||||
},
|
||||
"diffRemovedBg": {
|
||||
"dark": "#67060c",
|
||||
"light": "#ffebe9"
|
||||
},
|
||||
"diffContextBg": {
|
||||
"dark": "darkBgAlt",
|
||||
"light": "lightBgAlt"
|
||||
},
|
||||
"diffLineNumber": {
|
||||
"dark": "#484f58",
|
||||
"light": "#afb8c1"
|
||||
},
|
||||
"diffAddedLineNumberBg": {
|
||||
"dark": "#033a16",
|
||||
"light": "#dafbe1"
|
||||
},
|
||||
"diffRemovedLineNumberBg": {
|
||||
"dark": "#67060c",
|
||||
"light": "#ffebe9"
|
||||
},
|
||||
"markdownText": {
|
||||
"dark": "darkFg",
|
||||
"light": "lightFg"
|
||||
},
|
||||
"markdownHeading": {
|
||||
"dark": "darkBlue",
|
||||
"light": "lightBlue"
|
||||
},
|
||||
"markdownLink": {
|
||||
"dark": "darkBlue",
|
||||
"light": "lightBlue"
|
||||
},
|
||||
"markdownLinkText": {
|
||||
"dark": "darkCyan",
|
||||
"light": "lightCyan"
|
||||
},
|
||||
"markdownCode": {
|
||||
"dark": "darkPink",
|
||||
"light": "lightPink"
|
||||
},
|
||||
"markdownBlockQuote": {
|
||||
"dark": "darkFgMuted",
|
||||
"light": "lightFgMuted"
|
||||
},
|
||||
"markdownEmph": {
|
||||
"dark": "darkYellow",
|
||||
"light": "lightYellow"
|
||||
},
|
||||
"markdownStrong": {
|
||||
"dark": "darkOrange",
|
||||
"light": "lightOrange"
|
||||
},
|
||||
"markdownHorizontalRule": {
|
||||
"dark": "#30363d",
|
||||
"light": "#d0d7de"
|
||||
},
|
||||
"markdownListItem": {
|
||||
"dark": "darkBlue",
|
||||
"light": "lightBlue"
|
||||
},
|
||||
"markdownListEnumeration": {
|
||||
"dark": "darkCyan",
|
||||
"light": "lightCyan"
|
||||
},
|
||||
"markdownImage": {
|
||||
"dark": "darkBlue",
|
||||
"light": "lightBlue"
|
||||
},
|
||||
"markdownImageText": {
|
||||
"dark": "darkCyan",
|
||||
"light": "lightCyan"
|
||||
},
|
||||
"markdownCodeBlock": {
|
||||
"dark": "darkFg",
|
||||
"light": "lightFg"
|
||||
},
|
||||
"syntaxComment": {
|
||||
"dark": "darkFgMuted",
|
||||
"light": "lightFgMuted"
|
||||
},
|
||||
"syntaxKeyword": {
|
||||
"dark": "darkPink",
|
||||
"light": "lightRed"
|
||||
},
|
||||
"syntaxFunction": {
|
||||
"dark": "darkPurple",
|
||||
"light": "lightPurple"
|
||||
},
|
||||
"syntaxVariable": {
|
||||
"dark": "darkOrange",
|
||||
"light": "lightOrange"
|
||||
},
|
||||
"syntaxString": {
|
||||
"dark": "darkCyan",
|
||||
"light": "lightBlue"
|
||||
},
|
||||
"syntaxNumber": {
|
||||
"dark": "darkBlue",
|
||||
"light": "lightCyan"
|
||||
},
|
||||
"syntaxType": {
|
||||
"dark": "darkOrange",
|
||||
"light": "lightOrange"
|
||||
},
|
||||
"syntaxOperator": {
|
||||
"dark": "darkPink",
|
||||
"light": "lightRed"
|
||||
},
|
||||
"syntaxPunctuation": {
|
||||
"dark": "darkFg",
|
||||
"light": "lightFg"
|
||||
}
|
||||
}
|
||||
}
|
||||
95
packages/client/tui/internal/theme/themes/gruvbox.json
Normal file
95
packages/client/tui/internal/theme/themes/gruvbox.json
Normal file
|
|
@ -0,0 +1,95 @@
|
|||
{
|
||||
"$schema": "https://opencode.ai/theme.json",
|
||||
"defs": {
|
||||
"darkBg0": "#282828",
|
||||
"darkBg1": "#3c3836",
|
||||
"darkBg2": "#504945",
|
||||
"darkBg3": "#665c54",
|
||||
"darkFg0": "#fbf1c7",
|
||||
"darkFg1": "#ebdbb2",
|
||||
"darkGray": "#928374",
|
||||
"darkRed": "#cc241d",
|
||||
"darkGreen": "#98971a",
|
||||
"darkYellow": "#d79921",
|
||||
"darkBlue": "#458588",
|
||||
"darkPurple": "#b16286",
|
||||
"darkAqua": "#689d6a",
|
||||
"darkOrange": "#d65d0e",
|
||||
"darkRedBright": "#fb4934",
|
||||
"darkGreenBright": "#b8bb26",
|
||||
"darkYellowBright": "#fabd2f",
|
||||
"darkBlueBright": "#83a598",
|
||||
"darkPurpleBright": "#d3869b",
|
||||
"darkAquaBright": "#8ec07c",
|
||||
"darkOrangeBright": "#fe8019",
|
||||
"lightBg0": "#fbf1c7",
|
||||
"lightBg1": "#ebdbb2",
|
||||
"lightBg2": "#d5c4a1",
|
||||
"lightBg3": "#bdae93",
|
||||
"lightFg0": "#282828",
|
||||
"lightFg1": "#3c3836",
|
||||
"lightGray": "#7c6f64",
|
||||
"lightRed": "#9d0006",
|
||||
"lightGreen": "#79740e",
|
||||
"lightYellow": "#b57614",
|
||||
"lightBlue": "#076678",
|
||||
"lightPurple": "#8f3f71",
|
||||
"lightAqua": "#427b58",
|
||||
"lightOrange": "#af3a03"
|
||||
},
|
||||
"theme": {
|
||||
"primary": { "dark": "darkBlueBright", "light": "lightBlue" },
|
||||
"secondary": { "dark": "darkPurpleBright", "light": "lightPurple" },
|
||||
"accent": { "dark": "darkAquaBright", "light": "lightAqua" },
|
||||
"error": { "dark": "darkRedBright", "light": "lightRed" },
|
||||
"warning": { "dark": "darkOrangeBright", "light": "lightOrange" },
|
||||
"success": { "dark": "darkGreenBright", "light": "lightGreen" },
|
||||
"info": { "dark": "darkYellowBright", "light": "lightYellow" },
|
||||
"text": { "dark": "darkFg1", "light": "lightFg1" },
|
||||
"textMuted": { "dark": "darkGray", "light": "lightGray" },
|
||||
"background": { "dark": "darkBg0", "light": "lightBg0" },
|
||||
"backgroundPanel": { "dark": "darkBg1", "light": "lightBg1" },
|
||||
"backgroundElement": { "dark": "darkBg2", "light": "lightBg2" },
|
||||
"border": { "dark": "darkBg3", "light": "lightBg3" },
|
||||
"borderActive": { "dark": "darkFg1", "light": "lightFg1" },
|
||||
"borderSubtle": { "dark": "darkBg2", "light": "lightBg2" },
|
||||
"diffAdded": { "dark": "darkGreen", "light": "lightGreen" },
|
||||
"diffRemoved": { "dark": "darkRed", "light": "lightRed" },
|
||||
"diffContext": { "dark": "darkGray", "light": "lightGray" },
|
||||
"diffHunkHeader": { "dark": "darkAqua", "light": "lightAqua" },
|
||||
"diffHighlightAdded": { "dark": "darkGreenBright", "light": "lightGreen" },
|
||||
"diffHighlightRemoved": { "dark": "darkRedBright", "light": "lightRed" },
|
||||
"diffAddedBg": { "dark": "#32302f", "light": "#e2e0b5" },
|
||||
"diffRemovedBg": { "dark": "#322929", "light": "#e9d8d5" },
|
||||
"diffContextBg": { "dark": "darkBg1", "light": "lightBg1" },
|
||||
"diffLineNumber": { "dark": "darkBg3", "light": "lightBg3" },
|
||||
"diffAddedLineNumberBg": { "dark": "#2a2827", "light": "#d4d2a9" },
|
||||
"diffRemovedLineNumberBg": { "dark": "#2a2222", "light": "#d8cbc8" },
|
||||
"markdownText": { "dark": "darkFg1", "light": "lightFg1" },
|
||||
"markdownHeading": { "dark": "darkBlueBright", "light": "lightBlue" },
|
||||
"markdownLink": { "dark": "darkAquaBright", "light": "lightAqua" },
|
||||
"markdownLinkText": { "dark": "darkGreenBright", "light": "lightGreen" },
|
||||
"markdownCode": { "dark": "darkYellowBright", "light": "lightYellow" },
|
||||
"markdownBlockQuote": { "dark": "darkGray", "light": "lightGray" },
|
||||
"markdownEmph": { "dark": "darkPurpleBright", "light": "lightPurple" },
|
||||
"markdownStrong": { "dark": "darkOrangeBright", "light": "lightOrange" },
|
||||
"markdownHorizontalRule": { "dark": "darkGray", "light": "lightGray" },
|
||||
"markdownListItem": { "dark": "darkBlueBright", "light": "lightBlue" },
|
||||
"markdownListEnumeration": {
|
||||
"dark": "darkAquaBright",
|
||||
"light": "lightAqua"
|
||||
},
|
||||
"markdownImage": { "dark": "darkAquaBright", "light": "lightAqua" },
|
||||
"markdownImageText": { "dark": "darkGreenBright", "light": "lightGreen" },
|
||||
"markdownCodeBlock": { "dark": "darkFg1", "light": "lightFg1" },
|
||||
"syntaxComment": { "dark": "darkGray", "light": "lightGray" },
|
||||
"syntaxKeyword": { "dark": "darkRedBright", "light": "lightRed" },
|
||||
"syntaxFunction": { "dark": "darkGreenBright", "light": "lightGreen" },
|
||||
"syntaxVariable": { "dark": "darkBlueBright", "light": "lightBlue" },
|
||||
"syntaxString": { "dark": "darkYellowBright", "light": "lightYellow" },
|
||||
"syntaxNumber": { "dark": "darkPurpleBright", "light": "lightPurple" },
|
||||
"syntaxType": { "dark": "darkAquaBright", "light": "lightAqua" },
|
||||
"syntaxOperator": { "dark": "darkOrangeBright", "light": "lightOrange" },
|
||||
"syntaxPunctuation": { "dark": "darkFg1", "light": "lightFg1" }
|
||||
}
|
||||
}
|
||||
77
packages/client/tui/internal/theme/themes/kanagawa.json
Normal file
77
packages/client/tui/internal/theme/themes/kanagawa.json
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
{
|
||||
"$schema": "https://opencode.ai/theme.json",
|
||||
"defs": {
|
||||
"sumiInk0": "#1F1F28",
|
||||
"sumiInk1": "#2A2A37",
|
||||
"sumiInk2": "#363646",
|
||||
"sumiInk3": "#54546D",
|
||||
"fujiWhite": "#DCD7BA",
|
||||
"oldWhite": "#C8C093",
|
||||
"fujiGray": "#727169",
|
||||
"oniViolet": "#957FB8",
|
||||
"crystalBlue": "#7E9CD8",
|
||||
"carpYellow": "#C38D9D",
|
||||
"sakuraPink": "#D27E99",
|
||||
"waveAqua": "#76946A",
|
||||
"roninYellow": "#D7A657",
|
||||
"dragonRed": "#E82424",
|
||||
"lotusGreen": "#98BB6C",
|
||||
"waveBlue": "#2D4F67",
|
||||
"lightBg": "#F2E9DE",
|
||||
"lightPaper": "#EAE4D7",
|
||||
"lightText": "#54433A",
|
||||
"lightGray": "#9E9389"
|
||||
},
|
||||
"theme": {
|
||||
"primary": { "dark": "crystalBlue", "light": "waveBlue" },
|
||||
"secondary": { "dark": "oniViolet", "light": "oniViolet" },
|
||||
"accent": { "dark": "sakuraPink", "light": "sakuraPink" },
|
||||
"error": { "dark": "dragonRed", "light": "dragonRed" },
|
||||
"warning": { "dark": "roninYellow", "light": "roninYellow" },
|
||||
"success": { "dark": "lotusGreen", "light": "lotusGreen" },
|
||||
"info": { "dark": "waveAqua", "light": "waveAqua" },
|
||||
"text": { "dark": "fujiWhite", "light": "lightText" },
|
||||
"textMuted": { "dark": "fujiGray", "light": "lightGray" },
|
||||
"background": { "dark": "sumiInk0", "light": "lightBg" },
|
||||
"backgroundPanel": { "dark": "sumiInk1", "light": "lightPaper" },
|
||||
"backgroundElement": { "dark": "sumiInk2", "light": "#E3DCD2" },
|
||||
"border": { "dark": "sumiInk3", "light": "#D4CBBF" },
|
||||
"borderActive": { "dark": "carpYellow", "light": "carpYellow" },
|
||||
"borderSubtle": { "dark": "sumiInk2", "light": "#DCD4C9" },
|
||||
"diffAdded": { "dark": "lotusGreen", "light": "lotusGreen" },
|
||||
"diffRemoved": { "dark": "dragonRed", "light": "dragonRed" },
|
||||
"diffContext": { "dark": "fujiGray", "light": "lightGray" },
|
||||
"diffHunkHeader": { "dark": "waveBlue", "light": "waveBlue" },
|
||||
"diffHighlightAdded": { "dark": "#A9D977", "light": "#89AF5B" },
|
||||
"diffHighlightRemoved": { "dark": "#F24A4A", "light": "#D61F1F" },
|
||||
"diffAddedBg": { "dark": "#252E25", "light": "#EAF3E4" },
|
||||
"diffRemovedBg": { "dark": "#362020", "light": "#FBE6E6" },
|
||||
"diffContextBg": { "dark": "sumiInk1", "light": "lightPaper" },
|
||||
"diffLineNumber": { "dark": "sumiInk3", "light": "#C7BEB4" },
|
||||
"diffAddedLineNumberBg": { "dark": "#202820", "light": "#DDE8D6" },
|
||||
"diffRemovedLineNumberBg": { "dark": "#2D1C1C", "light": "#F2DADA" },
|
||||
"markdownText": { "dark": "fujiWhite", "light": "lightText" },
|
||||
"markdownHeading": { "dark": "oniViolet", "light": "oniViolet" },
|
||||
"markdownLink": { "dark": "crystalBlue", "light": "waveBlue" },
|
||||
"markdownLinkText": { "dark": "waveAqua", "light": "waveAqua" },
|
||||
"markdownCode": { "dark": "lotusGreen", "light": "lotusGreen" },
|
||||
"markdownBlockQuote": { "dark": "fujiGray", "light": "lightGray" },
|
||||
"markdownEmph": { "dark": "carpYellow", "light": "carpYellow" },
|
||||
"markdownStrong": { "dark": "roninYellow", "light": "roninYellow" },
|
||||
"markdownHorizontalRule": { "dark": "fujiGray", "light": "lightGray" },
|
||||
"markdownListItem": { "dark": "crystalBlue", "light": "waveBlue" },
|
||||
"markdownListEnumeration": { "dark": "waveAqua", "light": "waveAqua" },
|
||||
"markdownImage": { "dark": "crystalBlue", "light": "waveBlue" },
|
||||
"markdownImageText": { "dark": "waveAqua", "light": "waveAqua" },
|
||||
"markdownCodeBlock": { "dark": "fujiWhite", "light": "lightText" },
|
||||
"syntaxComment": { "dark": "fujiGray", "light": "lightGray" },
|
||||
"syntaxKeyword": { "dark": "oniViolet", "light": "oniViolet" },
|
||||
"syntaxFunction": { "dark": "crystalBlue", "light": "waveBlue" },
|
||||
"syntaxVariable": { "dark": "fujiWhite", "light": "lightText" },
|
||||
"syntaxString": { "dark": "lotusGreen", "light": "lotusGreen" },
|
||||
"syntaxNumber": { "dark": "roninYellow", "light": "roninYellow" },
|
||||
"syntaxType": { "dark": "carpYellow", "light": "carpYellow" },
|
||||
"syntaxOperator": { "dark": "sakuraPink", "light": "sakuraPink" },
|
||||
"syntaxPunctuation": { "dark": "fujiWhite", "light": "lightText" }
|
||||
}
|
||||
}
|
||||
235
packages/client/tui/internal/theme/themes/material.json
Normal file
235
packages/client/tui/internal/theme/themes/material.json
Normal file
|
|
@ -0,0 +1,235 @@
|
|||
{
|
||||
"$schema": "https://opencode.ai/theme.json",
|
||||
"defs": {
|
||||
"darkBg": "#263238",
|
||||
"darkBgAlt": "#1e272c",
|
||||
"darkBgPanel": "#37474f",
|
||||
"darkFg": "#eeffff",
|
||||
"darkFgMuted": "#546e7a",
|
||||
"darkRed": "#f07178",
|
||||
"darkPink": "#f78c6c",
|
||||
"darkOrange": "#ffcb6b",
|
||||
"darkYellow": "#ffcb6b",
|
||||
"darkGreen": "#c3e88d",
|
||||
"darkCyan": "#89ddff",
|
||||
"darkBlue": "#82aaff",
|
||||
"darkPurple": "#c792ea",
|
||||
"darkViolet": "#bb80b3",
|
||||
"lightBg": "#fafafa",
|
||||
"lightBgAlt": "#f5f5f5",
|
||||
"lightBgPanel": "#e7e7e8",
|
||||
"lightFg": "#263238",
|
||||
"lightFgMuted": "#90a4ae",
|
||||
"lightRed": "#e53935",
|
||||
"lightPink": "#ec407a",
|
||||
"lightOrange": "#f4511e",
|
||||
"lightYellow": "#ffb300",
|
||||
"lightGreen": "#91b859",
|
||||
"lightCyan": "#39adb5",
|
||||
"lightBlue": "#6182b8",
|
||||
"lightPurple": "#7c4dff",
|
||||
"lightViolet": "#945eb8"
|
||||
},
|
||||
"theme": {
|
||||
"primary": {
|
||||
"dark": "darkBlue",
|
||||
"light": "lightBlue"
|
||||
},
|
||||
"secondary": {
|
||||
"dark": "darkPurple",
|
||||
"light": "lightPurple"
|
||||
},
|
||||
"accent": {
|
||||
"dark": "darkCyan",
|
||||
"light": "lightCyan"
|
||||
},
|
||||
"error": {
|
||||
"dark": "darkRed",
|
||||
"light": "lightRed"
|
||||
},
|
||||
"warning": {
|
||||
"dark": "darkYellow",
|
||||
"light": "lightYellow"
|
||||
},
|
||||
"success": {
|
||||
"dark": "darkGreen",
|
||||
"light": "lightGreen"
|
||||
},
|
||||
"info": {
|
||||
"dark": "darkOrange",
|
||||
"light": "lightOrange"
|
||||
},
|
||||
"text": {
|
||||
"dark": "darkFg",
|
||||
"light": "lightFg"
|
||||
},
|
||||
"textMuted": {
|
||||
"dark": "darkFgMuted",
|
||||
"light": "lightFgMuted"
|
||||
},
|
||||
"background": {
|
||||
"dark": "darkBg",
|
||||
"light": "lightBg"
|
||||
},
|
||||
"backgroundPanel": {
|
||||
"dark": "darkBgAlt",
|
||||
"light": "lightBgAlt"
|
||||
},
|
||||
"backgroundElement": {
|
||||
"dark": "darkBgPanel",
|
||||
"light": "lightBgPanel"
|
||||
},
|
||||
"border": {
|
||||
"dark": "#37474f",
|
||||
"light": "#e0e0e0"
|
||||
},
|
||||
"borderActive": {
|
||||
"dark": "darkBlue",
|
||||
"light": "lightBlue"
|
||||
},
|
||||
"borderSubtle": {
|
||||
"dark": "#1e272c",
|
||||
"light": "#eeeeee"
|
||||
},
|
||||
"diffAdded": {
|
||||
"dark": "darkGreen",
|
||||
"light": "lightGreen"
|
||||
},
|
||||
"diffRemoved": {
|
||||
"dark": "darkRed",
|
||||
"light": "lightRed"
|
||||
},
|
||||
"diffContext": {
|
||||
"dark": "darkFgMuted",
|
||||
"light": "lightFgMuted"
|
||||
},
|
||||
"diffHunkHeader": {
|
||||
"dark": "darkCyan",
|
||||
"light": "lightCyan"
|
||||
},
|
||||
"diffHighlightAdded": {
|
||||
"dark": "darkGreen",
|
||||
"light": "lightGreen"
|
||||
},
|
||||
"diffHighlightRemoved": {
|
||||
"dark": "darkRed",
|
||||
"light": "lightRed"
|
||||
},
|
||||
"diffAddedBg": {
|
||||
"dark": "#2e3c2b",
|
||||
"light": "#e8f5e9"
|
||||
},
|
||||
"diffRemovedBg": {
|
||||
"dark": "#3c2b2b",
|
||||
"light": "#ffebee"
|
||||
},
|
||||
"diffContextBg": {
|
||||
"dark": "darkBgAlt",
|
||||
"light": "lightBgAlt"
|
||||
},
|
||||
"diffLineNumber": {
|
||||
"dark": "#37474f",
|
||||
"light": "#cfd8dc"
|
||||
},
|
||||
"diffAddedLineNumberBg": {
|
||||
"dark": "#2e3c2b",
|
||||
"light": "#e8f5e9"
|
||||
},
|
||||
"diffRemovedLineNumberBg": {
|
||||
"dark": "#3c2b2b",
|
||||
"light": "#ffebee"
|
||||
},
|
||||
"markdownText": {
|
||||
"dark": "darkFg",
|
||||
"light": "lightFg"
|
||||
},
|
||||
"markdownHeading": {
|
||||
"dark": "darkBlue",
|
||||
"light": "lightBlue"
|
||||
},
|
||||
"markdownLink": {
|
||||
"dark": "darkCyan",
|
||||
"light": "lightCyan"
|
||||
},
|
||||
"markdownLinkText": {
|
||||
"dark": "darkPurple",
|
||||
"light": "lightPurple"
|
||||
},
|
||||
"markdownCode": {
|
||||
"dark": "darkGreen",
|
||||
"light": "lightGreen"
|
||||
},
|
||||
"markdownBlockQuote": {
|
||||
"dark": "darkFgMuted",
|
||||
"light": "lightFgMuted"
|
||||
},
|
||||
"markdownEmph": {
|
||||
"dark": "darkYellow",
|
||||
"light": "lightYellow"
|
||||
},
|
||||
"markdownStrong": {
|
||||
"dark": "darkOrange",
|
||||
"light": "lightOrange"
|
||||
},
|
||||
"markdownHorizontalRule": {
|
||||
"dark": "#37474f",
|
||||
"light": "#e0e0e0"
|
||||
},
|
||||
"markdownListItem": {
|
||||
"dark": "darkBlue",
|
||||
"light": "lightBlue"
|
||||
},
|
||||
"markdownListEnumeration": {
|
||||
"dark": "darkCyan",
|
||||
"light": "lightCyan"
|
||||
},
|
||||
"markdownImage": {
|
||||
"dark": "darkCyan",
|
||||
"light": "lightCyan"
|
||||
},
|
||||
"markdownImageText": {
|
||||
"dark": "darkPurple",
|
||||
"light": "lightPurple"
|
||||
},
|
||||
"markdownCodeBlock": {
|
||||
"dark": "darkFg",
|
||||
"light": "lightFg"
|
||||
},
|
||||
"syntaxComment": {
|
||||
"dark": "darkFgMuted",
|
||||
"light": "lightFgMuted"
|
||||
},
|
||||
"syntaxKeyword": {
|
||||
"dark": "darkPurple",
|
||||
"light": "lightPurple"
|
||||
},
|
||||
"syntaxFunction": {
|
||||
"dark": "darkBlue",
|
||||
"light": "lightBlue"
|
||||
},
|
||||
"syntaxVariable": {
|
||||
"dark": "darkFg",
|
||||
"light": "lightFg"
|
||||
},
|
||||
"syntaxString": {
|
||||
"dark": "darkGreen",
|
||||
"light": "lightGreen"
|
||||
},
|
||||
"syntaxNumber": {
|
||||
"dark": "darkOrange",
|
||||
"light": "lightOrange"
|
||||
},
|
||||
"syntaxType": {
|
||||
"dark": "darkYellow",
|
||||
"light": "lightYellow"
|
||||
},
|
||||
"syntaxOperator": {
|
||||
"dark": "darkCyan",
|
||||
"light": "lightCyan"
|
||||
},
|
||||
"syntaxPunctuation": {
|
||||
"dark": "darkFg",
|
||||
"light": "lightFg"
|
||||
}
|
||||
}
|
||||
}
|
||||
77
packages/client/tui/internal/theme/themes/matrix.json
Normal file
77
packages/client/tui/internal/theme/themes/matrix.json
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
{
|
||||
"$schema": "https://opencode.ai/theme.json",
|
||||
"defs": {
|
||||
"matrixInk0": "#0a0e0a",
|
||||
"matrixInk1": "#0e130d",
|
||||
"matrixInk2": "#141c12",
|
||||
"matrixInk3": "#1e2a1b",
|
||||
"rainGreen": "#2eff6a",
|
||||
"rainGreenDim": "#1cc24b",
|
||||
"rainGreenHi": "#62ff94",
|
||||
"rainCyan": "#00efff",
|
||||
"rainTeal": "#24f6d9",
|
||||
"rainPurple": "#c770ff",
|
||||
"rainOrange": "#ffa83d",
|
||||
"alertRed": "#ff4b4b",
|
||||
"alertYellow": "#e6ff57",
|
||||
"alertBlue": "#30b3ff",
|
||||
"rainGray": "#8ca391",
|
||||
"lightBg": "#eef3ea",
|
||||
"lightPaper": "#e4ebe1",
|
||||
"lightInk1": "#dae1d7",
|
||||
"lightText": "#203022",
|
||||
"lightGray": "#748476"
|
||||
},
|
||||
"theme": {
|
||||
"primary": { "dark": "rainGreen", "light": "rainGreenDim" },
|
||||
"secondary": { "dark": "rainCyan", "light": "rainTeal" },
|
||||
"accent": { "dark": "rainPurple", "light": "rainPurple" },
|
||||
"error": { "dark": "alertRed", "light": "alertRed" },
|
||||
"warning": { "dark": "alertYellow", "light": "alertYellow" },
|
||||
"success": { "dark": "rainGreenHi", "light": "rainGreenDim" },
|
||||
"info": { "dark": "alertBlue", "light": "alertBlue" },
|
||||
"text": { "dark": "rainGreenHi", "light": "lightText" },
|
||||
"textMuted": { "dark": "rainGray", "light": "lightGray" },
|
||||
"background": { "dark": "matrixInk0", "light": "lightBg" },
|
||||
"backgroundPanel": { "dark": "matrixInk1", "light": "lightPaper" },
|
||||
"backgroundElement": { "dark": "matrixInk2", "light": "lightInk1" },
|
||||
"border": { "dark": "matrixInk3", "light": "lightGray" },
|
||||
"borderActive": { "dark": "rainGreen", "light": "rainGreenDim" },
|
||||
"borderSubtle": { "dark": "matrixInk2", "light": "lightInk1" },
|
||||
"diffAdded": { "dark": "rainGreenDim", "light": "rainGreenDim" },
|
||||
"diffRemoved": { "dark": "alertRed", "light": "alertRed" },
|
||||
"diffContext": { "dark": "rainGray", "light": "lightGray" },
|
||||
"diffHunkHeader": { "dark": "alertBlue", "light": "alertBlue" },
|
||||
"diffHighlightAdded": { "dark": "#77ffaf", "light": "#5dac7e" },
|
||||
"diffHighlightRemoved": { "dark": "#ff7171", "light": "#d53a3a" },
|
||||
"diffAddedBg": { "dark": "#132616", "light": "#e0efde" },
|
||||
"diffRemovedBg": { "dark": "#261212", "light": "#f9e5e5" },
|
||||
"diffContextBg": { "dark": "matrixInk1", "light": "lightPaper" },
|
||||
"diffLineNumber": { "dark": "matrixInk3", "light": "lightGray" },
|
||||
"diffAddedLineNumberBg": { "dark": "#0f1b11", "light": "#d6e7d2" },
|
||||
"diffRemovedLineNumberBg": { "dark": "#1b1414", "light": "#f2d2d2" },
|
||||
"markdownText": { "dark": "rainGreenHi", "light": "lightText" },
|
||||
"markdownHeading": { "dark": "rainCyan", "light": "rainTeal" },
|
||||
"markdownLink": { "dark": "alertBlue", "light": "alertBlue" },
|
||||
"markdownLinkText": { "dark": "rainTeal", "light": "rainTeal" },
|
||||
"markdownCode": { "dark": "rainGreenDim", "light": "rainGreenDim" },
|
||||
"markdownBlockQuote": { "dark": "rainGray", "light": "lightGray" },
|
||||
"markdownEmph": { "dark": "rainOrange", "light": "rainOrange" },
|
||||
"markdownStrong": { "dark": "alertYellow", "light": "alertYellow" },
|
||||
"markdownHorizontalRule": { "dark": "rainGray", "light": "lightGray" },
|
||||
"markdownListItem": { "dark": "alertBlue", "light": "alertBlue" },
|
||||
"markdownListEnumeration": { "dark": "rainTeal", "light": "rainTeal" },
|
||||
"markdownImage": { "dark": "alertBlue", "light": "alertBlue" },
|
||||
"markdownImageText": { "dark": "rainTeal", "light": "rainTeal" },
|
||||
"markdownCodeBlock": { "dark": "rainGreenHi", "light": "lightText" },
|
||||
"syntaxComment": { "dark": "rainGray", "light": "lightGray" },
|
||||
"syntaxKeyword": { "dark": "rainPurple", "light": "rainPurple" },
|
||||
"syntaxFunction": { "dark": "alertBlue", "light": "alertBlue" },
|
||||
"syntaxVariable": { "dark": "rainGreenHi", "light": "lightText" },
|
||||
"syntaxString": { "dark": "rainGreenDim", "light": "rainGreenDim" },
|
||||
"syntaxNumber": { "dark": "rainOrange", "light": "rainOrange" },
|
||||
"syntaxType": { "dark": "alertYellow", "light": "alertYellow" },
|
||||
"syntaxOperator": { "dark": "rainTeal", "light": "rainTeal" },
|
||||
"syntaxPunctuation": { "dark": "rainGreenHi", "light": "lightText" }
|
||||
}
|
||||
}
|
||||
221
packages/client/tui/internal/theme/themes/monokai.json
Normal file
221
packages/client/tui/internal/theme/themes/monokai.json
Normal file
|
|
@ -0,0 +1,221 @@
|
|||
{
|
||||
"$schema": "https://opencode.ai/theme.json",
|
||||
"defs": {
|
||||
"background": "#272822",
|
||||
"backgroundAlt": "#1e1f1c",
|
||||
"backgroundPanel": "#3e3d32",
|
||||
"foreground": "#f8f8f2",
|
||||
"comment": "#75715e",
|
||||
"red": "#f92672",
|
||||
"orange": "#fd971f",
|
||||
"lightOrange": "#e69f66",
|
||||
"yellow": "#e6db74",
|
||||
"green": "#a6e22e",
|
||||
"cyan": "#66d9ef",
|
||||
"blue": "#66d9ef",
|
||||
"purple": "#ae81ff",
|
||||
"pink": "#f92672"
|
||||
},
|
||||
"theme": {
|
||||
"primary": {
|
||||
"dark": "cyan",
|
||||
"light": "blue"
|
||||
},
|
||||
"secondary": {
|
||||
"dark": "purple",
|
||||
"light": "purple"
|
||||
},
|
||||
"accent": {
|
||||
"dark": "green",
|
||||
"light": "green"
|
||||
},
|
||||
"error": {
|
||||
"dark": "red",
|
||||
"light": "red"
|
||||
},
|
||||
"warning": {
|
||||
"dark": "yellow",
|
||||
"light": "orange"
|
||||
},
|
||||
"success": {
|
||||
"dark": "green",
|
||||
"light": "green"
|
||||
},
|
||||
"info": {
|
||||
"dark": "orange",
|
||||
"light": "orange"
|
||||
},
|
||||
"text": {
|
||||
"dark": "foreground",
|
||||
"light": "#272822"
|
||||
},
|
||||
"textMuted": {
|
||||
"dark": "comment",
|
||||
"light": "#75715e"
|
||||
},
|
||||
"background": {
|
||||
"dark": "#272822",
|
||||
"light": "#fafafa"
|
||||
},
|
||||
"backgroundPanel": {
|
||||
"dark": "#1e1f1c",
|
||||
"light": "#f0f0f0"
|
||||
},
|
||||
"backgroundElement": {
|
||||
"dark": "#3e3d32",
|
||||
"light": "#e0e0e0"
|
||||
},
|
||||
"border": {
|
||||
"dark": "#3e3d32",
|
||||
"light": "#d0d0d0"
|
||||
},
|
||||
"borderActive": {
|
||||
"dark": "cyan",
|
||||
"light": "blue"
|
||||
},
|
||||
"borderSubtle": {
|
||||
"dark": "#1e1f1c",
|
||||
"light": "#e8e8e8"
|
||||
},
|
||||
"diffAdded": {
|
||||
"dark": "green",
|
||||
"light": "green"
|
||||
},
|
||||
"diffRemoved": {
|
||||
"dark": "red",
|
||||
"light": "red"
|
||||
},
|
||||
"diffContext": {
|
||||
"dark": "comment",
|
||||
"light": "#75715e"
|
||||
},
|
||||
"diffHunkHeader": {
|
||||
"dark": "comment",
|
||||
"light": "#75715e"
|
||||
},
|
||||
"diffHighlightAdded": {
|
||||
"dark": "green",
|
||||
"light": "green"
|
||||
},
|
||||
"diffHighlightRemoved": {
|
||||
"dark": "red",
|
||||
"light": "red"
|
||||
},
|
||||
"diffAddedBg": {
|
||||
"dark": "#1a3a1a",
|
||||
"light": "#e0ffe0"
|
||||
},
|
||||
"diffRemovedBg": {
|
||||
"dark": "#3a1a1a",
|
||||
"light": "#ffe0e0"
|
||||
},
|
||||
"diffContextBg": {
|
||||
"dark": "#1e1f1c",
|
||||
"light": "#f0f0f0"
|
||||
},
|
||||
"diffLineNumber": {
|
||||
"dark": "#3e3d32",
|
||||
"light": "#d0d0d0"
|
||||
},
|
||||
"diffAddedLineNumberBg": {
|
||||
"dark": "#1a3a1a",
|
||||
"light": "#e0ffe0"
|
||||
},
|
||||
"diffRemovedLineNumberBg": {
|
||||
"dark": "#3a1a1a",
|
||||
"light": "#ffe0e0"
|
||||
},
|
||||
"markdownText": {
|
||||
"dark": "foreground",
|
||||
"light": "#272822"
|
||||
},
|
||||
"markdownHeading": {
|
||||
"dark": "pink",
|
||||
"light": "pink"
|
||||
},
|
||||
"markdownLink": {
|
||||
"dark": "cyan",
|
||||
"light": "blue"
|
||||
},
|
||||
"markdownLinkText": {
|
||||
"dark": "purple",
|
||||
"light": "purple"
|
||||
},
|
||||
"markdownCode": {
|
||||
"dark": "green",
|
||||
"light": "green"
|
||||
},
|
||||
"markdownBlockQuote": {
|
||||
"dark": "comment",
|
||||
"light": "#75715e"
|
||||
},
|
||||
"markdownEmph": {
|
||||
"dark": "yellow",
|
||||
"light": "orange"
|
||||
},
|
||||
"markdownStrong": {
|
||||
"dark": "orange",
|
||||
"light": "orange"
|
||||
},
|
||||
"markdownHorizontalRule": {
|
||||
"dark": "comment",
|
||||
"light": "#75715e"
|
||||
},
|
||||
"markdownListItem": {
|
||||
"dark": "cyan",
|
||||
"light": "blue"
|
||||
},
|
||||
"markdownListEnumeration": {
|
||||
"dark": "purple",
|
||||
"light": "purple"
|
||||
},
|
||||
"markdownImage": {
|
||||
"dark": "cyan",
|
||||
"light": "blue"
|
||||
},
|
||||
"markdownImageText": {
|
||||
"dark": "purple",
|
||||
"light": "purple"
|
||||
},
|
||||
"markdownCodeBlock": {
|
||||
"dark": "foreground",
|
||||
"light": "#272822"
|
||||
},
|
||||
"syntaxComment": {
|
||||
"dark": "comment",
|
||||
"light": "#75715e"
|
||||
},
|
||||
"syntaxKeyword": {
|
||||
"dark": "pink",
|
||||
"light": "pink"
|
||||
},
|
||||
"syntaxFunction": {
|
||||
"dark": "green",
|
||||
"light": "green"
|
||||
},
|
||||
"syntaxVariable": {
|
||||
"dark": "foreground",
|
||||
"light": "#272822"
|
||||
},
|
||||
"syntaxString": {
|
||||
"dark": "yellow",
|
||||
"light": "orange"
|
||||
},
|
||||
"syntaxNumber": {
|
||||
"dark": "purple",
|
||||
"light": "purple"
|
||||
},
|
||||
"syntaxType": {
|
||||
"dark": "cyan",
|
||||
"light": "blue"
|
||||
},
|
||||
"syntaxOperator": {
|
||||
"dark": "pink",
|
||||
"light": "pink"
|
||||
},
|
||||
"syntaxPunctuation": {
|
||||
"dark": "foreground",
|
||||
"light": "#272822"
|
||||
}
|
||||
}
|
||||
}
|
||||
223
packages/client/tui/internal/theme/themes/nord.json
Normal file
223
packages/client/tui/internal/theme/themes/nord.json
Normal file
|
|
@ -0,0 +1,223 @@
|
|||
{
|
||||
"$schema": "https://opencode.ai/theme.json",
|
||||
"defs": {
|
||||
"nord0": "#2E3440",
|
||||
"nord1": "#3B4252",
|
||||
"nord2": "#434C5E",
|
||||
"nord3": "#4C566A",
|
||||
"nord4": "#D8DEE9",
|
||||
"nord5": "#E5E9F0",
|
||||
"nord6": "#ECEFF4",
|
||||
"nord7": "#8FBCBB",
|
||||
"nord8": "#88C0D0",
|
||||
"nord9": "#81A1C1",
|
||||
"nord10": "#5E81AC",
|
||||
"nord11": "#BF616A",
|
||||
"nord12": "#D08770",
|
||||
"nord13": "#EBCB8B",
|
||||
"nord14": "#A3BE8C",
|
||||
"nord15": "#B48EAD"
|
||||
},
|
||||
"theme": {
|
||||
"primary": {
|
||||
"dark": "nord8",
|
||||
"light": "nord10"
|
||||
},
|
||||
"secondary": {
|
||||
"dark": "nord9",
|
||||
"light": "nord9"
|
||||
},
|
||||
"accent": {
|
||||
"dark": "nord7",
|
||||
"light": "nord7"
|
||||
},
|
||||
"error": {
|
||||
"dark": "nord11",
|
||||
"light": "nord11"
|
||||
},
|
||||
"warning": {
|
||||
"dark": "nord12",
|
||||
"light": "nord12"
|
||||
},
|
||||
"success": {
|
||||
"dark": "nord14",
|
||||
"light": "nord14"
|
||||
},
|
||||
"info": {
|
||||
"dark": "nord8",
|
||||
"light": "nord10"
|
||||
},
|
||||
"text": {
|
||||
"dark": "nord6",
|
||||
"light": "nord0"
|
||||
},
|
||||
"textMuted": {
|
||||
"dark": "#8B95A7",
|
||||
"light": "nord1"
|
||||
},
|
||||
"background": {
|
||||
"dark": "nord0",
|
||||
"light": "nord6"
|
||||
},
|
||||
"backgroundPanel": {
|
||||
"dark": "nord1",
|
||||
"light": "nord5"
|
||||
},
|
||||
"backgroundElement": {
|
||||
"dark": "nord2",
|
||||
"light": "nord4"
|
||||
},
|
||||
"border": {
|
||||
"dark": "nord2",
|
||||
"light": "nord3"
|
||||
},
|
||||
"borderActive": {
|
||||
"dark": "nord3",
|
||||
"light": "nord2"
|
||||
},
|
||||
"borderSubtle": {
|
||||
"dark": "nord2",
|
||||
"light": "nord3"
|
||||
},
|
||||
"diffAdded": {
|
||||
"dark": "nord14",
|
||||
"light": "nord14"
|
||||
},
|
||||
"diffRemoved": {
|
||||
"dark": "nord11",
|
||||
"light": "nord11"
|
||||
},
|
||||
"diffContext": {
|
||||
"dark": "#8B95A7",
|
||||
"light": "nord3"
|
||||
},
|
||||
"diffHunkHeader": {
|
||||
"dark": "#8B95A7",
|
||||
"light": "nord3"
|
||||
},
|
||||
"diffHighlightAdded": {
|
||||
"dark": "nord14",
|
||||
"light": "nord14"
|
||||
},
|
||||
"diffHighlightRemoved": {
|
||||
"dark": "nord11",
|
||||
"light": "nord11"
|
||||
},
|
||||
"diffAddedBg": {
|
||||
"dark": "#3B4252",
|
||||
"light": "#E5E9F0"
|
||||
},
|
||||
"diffRemovedBg": {
|
||||
"dark": "#3B4252",
|
||||
"light": "#E5E9F0"
|
||||
},
|
||||
"diffContextBg": {
|
||||
"dark": "nord1",
|
||||
"light": "nord5"
|
||||
},
|
||||
"diffLineNumber": {
|
||||
"dark": "nord2",
|
||||
"light": "nord4"
|
||||
},
|
||||
"diffAddedLineNumberBg": {
|
||||
"dark": "#3B4252",
|
||||
"light": "#E5E9F0"
|
||||
},
|
||||
"diffRemovedLineNumberBg": {
|
||||
"dark": "#3B4252",
|
||||
"light": "#E5E9F0"
|
||||
},
|
||||
"markdownText": {
|
||||
"dark": "nord4",
|
||||
"light": "nord0"
|
||||
},
|
||||
"markdownHeading": {
|
||||
"dark": "nord8",
|
||||
"light": "nord10"
|
||||
},
|
||||
"markdownLink": {
|
||||
"dark": "nord9",
|
||||
"light": "nord9"
|
||||
},
|
||||
"markdownLinkText": {
|
||||
"dark": "nord7",
|
||||
"light": "nord7"
|
||||
},
|
||||
"markdownCode": {
|
||||
"dark": "nord14",
|
||||
"light": "nord14"
|
||||
},
|
||||
"markdownBlockQuote": {
|
||||
"dark": "#8B95A7",
|
||||
"light": "nord3"
|
||||
},
|
||||
"markdownEmph": {
|
||||
"dark": "nord12",
|
||||
"light": "nord12"
|
||||
},
|
||||
"markdownStrong": {
|
||||
"dark": "nord13",
|
||||
"light": "nord13"
|
||||
},
|
||||
"markdownHorizontalRule": {
|
||||
"dark": "#8B95A7",
|
||||
"light": "nord3"
|
||||
},
|
||||
"markdownListItem": {
|
||||
"dark": "nord8",
|
||||
"light": "nord10"
|
||||
},
|
||||
"markdownListEnumeration": {
|
||||
"dark": "nord7",
|
||||
"light": "nord7"
|
||||
},
|
||||
"markdownImage": {
|
||||
"dark": "nord9",
|
||||
"light": "nord9"
|
||||
},
|
||||
"markdownImageText": {
|
||||
"dark": "nord7",
|
||||
"light": "nord7"
|
||||
},
|
||||
"markdownCodeBlock": {
|
||||
"dark": "nord4",
|
||||
"light": "nord0"
|
||||
},
|
||||
"syntaxComment": {
|
||||
"dark": "#8B95A7",
|
||||
"light": "nord3"
|
||||
},
|
||||
"syntaxKeyword": {
|
||||
"dark": "nord9",
|
||||
"light": "nord9"
|
||||
},
|
||||
"syntaxFunction": {
|
||||
"dark": "nord8",
|
||||
"light": "nord8"
|
||||
},
|
||||
"syntaxVariable": {
|
||||
"dark": "nord7",
|
||||
"light": "nord7"
|
||||
},
|
||||
"syntaxString": {
|
||||
"dark": "nord14",
|
||||
"light": "nord14"
|
||||
},
|
||||
"syntaxNumber": {
|
||||
"dark": "nord15",
|
||||
"light": "nord15"
|
||||
},
|
||||
"syntaxType": {
|
||||
"dark": "nord7",
|
||||
"light": "nord7"
|
||||
},
|
||||
"syntaxOperator": {
|
||||
"dark": "nord9",
|
||||
"light": "nord9"
|
||||
},
|
||||
"syntaxPunctuation": {
|
||||
"dark": "nord4",
|
||||
"light": "nord0"
|
||||
}
|
||||
}
|
||||
}
|
||||
84
packages/client/tui/internal/theme/themes/one-dark.json
Normal file
84
packages/client/tui/internal/theme/themes/one-dark.json
Normal file
|
|
@ -0,0 +1,84 @@
|
|||
{
|
||||
"$schema": "https://opencode.ai/theme.json",
|
||||
"defs": {
|
||||
"darkBg": "#282c34",
|
||||
"darkBgAlt": "#21252b",
|
||||
"darkBgPanel": "#353b45",
|
||||
"darkFg": "#abb2bf",
|
||||
"darkFgMuted": "#5c6370",
|
||||
"darkPurple": "#c678dd",
|
||||
"darkBlue": "#61afef",
|
||||
"darkRed": "#e06c75",
|
||||
"darkGreen": "#98c379",
|
||||
"darkYellow": "#e5c07b",
|
||||
"darkOrange": "#d19a66",
|
||||
"darkCyan": "#56b6c2",
|
||||
"lightBg": "#fafafa",
|
||||
"lightBgAlt": "#f0f0f1",
|
||||
"lightBgPanel": "#eaeaeb",
|
||||
"lightFg": "#383a42",
|
||||
"lightFgMuted": "#a0a1a7",
|
||||
"lightPurple": "#a626a4",
|
||||
"lightBlue": "#4078f2",
|
||||
"lightRed": "#e45649",
|
||||
"lightGreen": "#50a14f",
|
||||
"lightYellow": "#c18401",
|
||||
"lightOrange": "#986801",
|
||||
"lightCyan": "#0184bc"
|
||||
},
|
||||
"theme": {
|
||||
"primary": { "dark": "darkBlue", "light": "lightBlue" },
|
||||
"secondary": { "dark": "darkPurple", "light": "lightPurple" },
|
||||
"accent": { "dark": "darkCyan", "light": "lightCyan" },
|
||||
"error": { "dark": "darkRed", "light": "lightRed" },
|
||||
"warning": { "dark": "darkYellow", "light": "lightYellow" },
|
||||
"success": { "dark": "darkGreen", "light": "lightGreen" },
|
||||
"info": { "dark": "darkOrange", "light": "lightOrange" },
|
||||
"text": { "dark": "darkFg", "light": "lightFg" },
|
||||
"textMuted": { "dark": "darkFgMuted", "light": "lightFgMuted" },
|
||||
"background": { "dark": "darkBg", "light": "lightBg" },
|
||||
"backgroundPanel": { "dark": "darkBgAlt", "light": "lightBgAlt" },
|
||||
"backgroundElement": { "dark": "darkBgPanel", "light": "lightBgPanel" },
|
||||
"border": { "dark": "#393f4a", "light": "#d1d1d2" },
|
||||
"borderActive": { "dark": "darkBlue", "light": "lightBlue" },
|
||||
"borderSubtle": { "dark": "#2c313a", "light": "#e0e0e1" },
|
||||
"diffAdded": { "dark": "darkGreen", "light": "lightGreen" },
|
||||
"diffRemoved": { "dark": "darkRed", "light": "lightRed" },
|
||||
"diffContext": { "dark": "darkFgMuted", "light": "lightFgMuted" },
|
||||
"diffHunkHeader": { "dark": "darkCyan", "light": "lightCyan" },
|
||||
"diffHighlightAdded": { "dark": "#aad482", "light": "#489447" },
|
||||
"diffHighlightRemoved": { "dark": "#e8828b", "light": "#d65145" },
|
||||
"diffAddedBg": { "dark": "#2c382b", "light": "#eafbe9" },
|
||||
"diffRemovedBg": { "dark": "#3a2d2f", "light": "#fce9e8" },
|
||||
"diffContextBg": { "dark": "darkBgAlt", "light": "lightBgAlt" },
|
||||
"diffLineNumber": { "dark": "#495162", "light": "#c9c9ca" },
|
||||
"diffAddedLineNumberBg": { "dark": "#283427", "light": "#e1f3df" },
|
||||
"diffRemovedLineNumberBg": { "dark": "#36292b", "light": "#f5e2e1" },
|
||||
"markdownText": { "dark": "darkFg", "light": "lightFg" },
|
||||
"markdownHeading": { "dark": "darkPurple", "light": "lightPurple" },
|
||||
"markdownLink": { "dark": "darkBlue", "light": "lightBlue" },
|
||||
"markdownLinkText": { "dark": "darkCyan", "light": "lightCyan" },
|
||||
"markdownCode": { "dark": "darkGreen", "light": "lightGreen" },
|
||||
"markdownBlockQuote": { "dark": "darkFgMuted", "light": "lightFgMuted" },
|
||||
"markdownEmph": { "dark": "darkYellow", "light": "lightYellow" },
|
||||
"markdownStrong": { "dark": "darkOrange", "light": "lightOrange" },
|
||||
"markdownHorizontalRule": {
|
||||
"dark": "darkFgMuted",
|
||||
"light": "lightFgMuted"
|
||||
},
|
||||
"markdownListItem": { "dark": "darkBlue", "light": "lightBlue" },
|
||||
"markdownListEnumeration": { "dark": "darkCyan", "light": "lightCyan" },
|
||||
"markdownImage": { "dark": "darkBlue", "light": "lightBlue" },
|
||||
"markdownImageText": { "dark": "darkCyan", "light": "lightCyan" },
|
||||
"markdownCodeBlock": { "dark": "darkFg", "light": "lightFg" },
|
||||
"syntaxComment": { "dark": "darkFgMuted", "light": "lightFgMuted" },
|
||||
"syntaxKeyword": { "dark": "darkPurple", "light": "lightPurple" },
|
||||
"syntaxFunction": { "dark": "darkBlue", "light": "lightBlue" },
|
||||
"syntaxVariable": { "dark": "darkRed", "light": "lightRed" },
|
||||
"syntaxString": { "dark": "darkGreen", "light": "lightGreen" },
|
||||
"syntaxNumber": { "dark": "darkOrange", "light": "lightOrange" },
|
||||
"syntaxType": { "dark": "darkYellow", "light": "lightYellow" },
|
||||
"syntaxOperator": { "dark": "darkCyan", "light": "lightCyan" },
|
||||
"syntaxPunctuation": { "dark": "darkFg", "light": "lightFg" }
|
||||
}
|
||||
}
|
||||
245
packages/client/tui/internal/theme/themes/opencode.json
Normal file
245
packages/client/tui/internal/theme/themes/opencode.json
Normal file
|
|
@ -0,0 +1,245 @@
|
|||
{
|
||||
"$schema": "https://opencode.ai/theme.json",
|
||||
"defs": {
|
||||
"darkStep1": "#0a0a0a",
|
||||
"darkStep2": "#141414",
|
||||
"darkStep3": "#1e1e1e",
|
||||
"darkStep4": "#282828",
|
||||
"darkStep5": "#323232",
|
||||
"darkStep6": "#3c3c3c",
|
||||
"darkStep7": "#484848",
|
||||
"darkStep8": "#606060",
|
||||
"darkStep9": "#fab283",
|
||||
"darkStep10": "#ffc09f",
|
||||
"darkStep11": "#808080",
|
||||
"darkStep12": "#eeeeee",
|
||||
"darkSecondary": "#5c9cf5",
|
||||
"darkAccent": "#9d7cd8",
|
||||
"darkRed": "#e06c75",
|
||||
"darkOrange": "#f5a742",
|
||||
"darkGreen": "#7fd88f",
|
||||
"darkCyan": "#56b6c2",
|
||||
"darkYellow": "#e5c07b",
|
||||
"lightStep1": "#ffffff",
|
||||
"lightStep2": "#fafafa",
|
||||
"lightStep3": "#f5f5f5",
|
||||
"lightStep4": "#ebebeb",
|
||||
"lightStep5": "#e1e1e1",
|
||||
"lightStep6": "#d4d4d4",
|
||||
"lightStep7": "#b8b8b8",
|
||||
"lightStep8": "#a0a0a0",
|
||||
"lightStep9": "#3b7dd8",
|
||||
"lightStep10": "#2968c3",
|
||||
"lightStep11": "#8a8a8a",
|
||||
"lightStep12": "#1a1a1a",
|
||||
"lightSecondary": "#7b5bb6",
|
||||
"lightAccent": "#d68c27",
|
||||
"lightRed": "#d1383d",
|
||||
"lightOrange": "#d68c27",
|
||||
"lightGreen": "#3d9a57",
|
||||
"lightCyan": "#318795",
|
||||
"lightYellow": "#b0851f"
|
||||
},
|
||||
"theme": {
|
||||
"primary": {
|
||||
"dark": "darkStep9",
|
||||
"light": "lightStep9"
|
||||
},
|
||||
"secondary": {
|
||||
"dark": "darkSecondary",
|
||||
"light": "lightSecondary"
|
||||
},
|
||||
"accent": {
|
||||
"dark": "darkAccent",
|
||||
"light": "lightAccent"
|
||||
},
|
||||
"error": {
|
||||
"dark": "darkRed",
|
||||
"light": "lightRed"
|
||||
},
|
||||
"warning": {
|
||||
"dark": "darkOrange",
|
||||
"light": "lightOrange"
|
||||
},
|
||||
"success": {
|
||||
"dark": "darkGreen",
|
||||
"light": "lightGreen"
|
||||
},
|
||||
"info": {
|
||||
"dark": "darkCyan",
|
||||
"light": "lightCyan"
|
||||
},
|
||||
"text": {
|
||||
"dark": "darkStep12",
|
||||
"light": "lightStep12"
|
||||
},
|
||||
"textMuted": {
|
||||
"dark": "darkStep11",
|
||||
"light": "lightStep11"
|
||||
},
|
||||
"background": {
|
||||
"dark": "darkStep1",
|
||||
"light": "lightStep1"
|
||||
},
|
||||
"backgroundPanel": {
|
||||
"dark": "darkStep2",
|
||||
"light": "lightStep2"
|
||||
},
|
||||
"backgroundElement": {
|
||||
"dark": "darkStep3",
|
||||
"light": "lightStep3"
|
||||
},
|
||||
"border": {
|
||||
"dark": "darkStep7",
|
||||
"light": "lightStep7"
|
||||
},
|
||||
"borderActive": {
|
||||
"dark": "darkStep8",
|
||||
"light": "lightStep8"
|
||||
},
|
||||
"borderSubtle": {
|
||||
"dark": "darkStep6",
|
||||
"light": "lightStep6"
|
||||
},
|
||||
"diffAdded": {
|
||||
"dark": "#4fd6be",
|
||||
"light": "#1e725c"
|
||||
},
|
||||
"diffRemoved": {
|
||||
"dark": "#c53b53",
|
||||
"light": "#c53b53"
|
||||
},
|
||||
"diffContext": {
|
||||
"dark": "#828bb8",
|
||||
"light": "#7086b5"
|
||||
},
|
||||
"diffHunkHeader": {
|
||||
"dark": "#828bb8",
|
||||
"light": "#7086b5"
|
||||
},
|
||||
"diffHighlightAdded": {
|
||||
"dark": "#b8db87",
|
||||
"light": "#4db380"
|
||||
},
|
||||
"diffHighlightRemoved": {
|
||||
"dark": "#e26a75",
|
||||
"light": "#f52a65"
|
||||
},
|
||||
"diffAddedBg": {
|
||||
"dark": "#20303b",
|
||||
"light": "#d5e5d5"
|
||||
},
|
||||
"diffRemovedBg": {
|
||||
"dark": "#37222c",
|
||||
"light": "#f7d8db"
|
||||
},
|
||||
"diffContextBg": {
|
||||
"dark": "darkStep2",
|
||||
"light": "lightStep2"
|
||||
},
|
||||
"diffLineNumber": {
|
||||
"dark": "darkStep3",
|
||||
"light": "lightStep3"
|
||||
},
|
||||
"diffAddedLineNumberBg": {
|
||||
"dark": "#1b2b34",
|
||||
"light": "#c5d5c5"
|
||||
},
|
||||
"diffRemovedLineNumberBg": {
|
||||
"dark": "#2d1f26",
|
||||
"light": "#e7c8cb"
|
||||
},
|
||||
"markdownText": {
|
||||
"dark": "darkStep12",
|
||||
"light": "lightStep12"
|
||||
},
|
||||
"markdownHeading": {
|
||||
"dark": "darkAccent",
|
||||
"light": "lightAccent"
|
||||
},
|
||||
"markdownLink": {
|
||||
"dark": "darkStep9",
|
||||
"light": "lightStep9"
|
||||
},
|
||||
"markdownLinkText": {
|
||||
"dark": "darkCyan",
|
||||
"light": "lightCyan"
|
||||
},
|
||||
"markdownCode": {
|
||||
"dark": "darkGreen",
|
||||
"light": "lightGreen"
|
||||
},
|
||||
"markdownBlockQuote": {
|
||||
"dark": "darkYellow",
|
||||
"light": "lightYellow"
|
||||
},
|
||||
"markdownEmph": {
|
||||
"dark": "darkYellow",
|
||||
"light": "lightYellow"
|
||||
},
|
||||
"markdownStrong": {
|
||||
"dark": "darkOrange",
|
||||
"light": "lightOrange"
|
||||
},
|
||||
"markdownHorizontalRule": {
|
||||
"dark": "darkStep11",
|
||||
"light": "lightStep11"
|
||||
},
|
||||
"markdownListItem": {
|
||||
"dark": "darkStep9",
|
||||
"light": "lightStep9"
|
||||
},
|
||||
"markdownListEnumeration": {
|
||||
"dark": "darkCyan",
|
||||
"light": "lightCyan"
|
||||
},
|
||||
"markdownImage": {
|
||||
"dark": "darkStep9",
|
||||
"light": "lightStep9"
|
||||
},
|
||||
"markdownImageText": {
|
||||
"dark": "darkCyan",
|
||||
"light": "lightCyan"
|
||||
},
|
||||
"markdownCodeBlock": {
|
||||
"dark": "darkStep12",
|
||||
"light": "lightStep12"
|
||||
},
|
||||
"syntaxComment": {
|
||||
"dark": "darkStep11",
|
||||
"light": "lightStep11"
|
||||
},
|
||||
"syntaxKeyword": {
|
||||
"dark": "darkAccent",
|
||||
"light": "lightAccent"
|
||||
},
|
||||
"syntaxFunction": {
|
||||
"dark": "darkStep9",
|
||||
"light": "lightStep9"
|
||||
},
|
||||
"syntaxVariable": {
|
||||
"dark": "darkRed",
|
||||
"light": "lightRed"
|
||||
},
|
||||
"syntaxString": {
|
||||
"dark": "darkGreen",
|
||||
"light": "lightGreen"
|
||||
},
|
||||
"syntaxNumber": {
|
||||
"dark": "darkOrange",
|
||||
"light": "lightOrange"
|
||||
},
|
||||
"syntaxType": {
|
||||
"dark": "darkYellow",
|
||||
"light": "lightYellow"
|
||||
},
|
||||
"syntaxOperator": {
|
||||
"dark": "darkCyan",
|
||||
"light": "lightCyan"
|
||||
},
|
||||
"syntaxPunctuation": {
|
||||
"dark": "darkStep12",
|
||||
"light": "lightStep12"
|
||||
}
|
||||
}
|
||||
}
|
||||
222
packages/client/tui/internal/theme/themes/palenight.json
Normal file
222
packages/client/tui/internal/theme/themes/palenight.json
Normal file
|
|
@ -0,0 +1,222 @@
|
|||
{
|
||||
"$schema": "https://opencode.ai/theme.json",
|
||||
"defs": {
|
||||
"background": "#292d3e",
|
||||
"backgroundAlt": "#1e2132",
|
||||
"backgroundPanel": "#32364a",
|
||||
"foreground": "#a6accd",
|
||||
"foregroundBright": "#bfc7d5",
|
||||
"comment": "#676e95",
|
||||
"red": "#f07178",
|
||||
"orange": "#f78c6c",
|
||||
"yellow": "#ffcb6b",
|
||||
"green": "#c3e88d",
|
||||
"cyan": "#89ddff",
|
||||
"blue": "#82aaff",
|
||||
"purple": "#c792ea",
|
||||
"magenta": "#ff5370",
|
||||
"pink": "#f07178"
|
||||
},
|
||||
"theme": {
|
||||
"primary": {
|
||||
"dark": "blue",
|
||||
"light": "#4976eb"
|
||||
},
|
||||
"secondary": {
|
||||
"dark": "purple",
|
||||
"light": "#a854f2"
|
||||
},
|
||||
"accent": {
|
||||
"dark": "cyan",
|
||||
"light": "#00acc1"
|
||||
},
|
||||
"error": {
|
||||
"dark": "red",
|
||||
"light": "#e53935"
|
||||
},
|
||||
"warning": {
|
||||
"dark": "yellow",
|
||||
"light": "#ffb300"
|
||||
},
|
||||
"success": {
|
||||
"dark": "green",
|
||||
"light": "#91b859"
|
||||
},
|
||||
"info": {
|
||||
"dark": "orange",
|
||||
"light": "#f4511e"
|
||||
},
|
||||
"text": {
|
||||
"dark": "foreground",
|
||||
"light": "#292d3e"
|
||||
},
|
||||
"textMuted": {
|
||||
"dark": "comment",
|
||||
"light": "#8796b0"
|
||||
},
|
||||
"background": {
|
||||
"dark": "#292d3e",
|
||||
"light": "#fafafa"
|
||||
},
|
||||
"backgroundPanel": {
|
||||
"dark": "#1e2132",
|
||||
"light": "#f5f5f5"
|
||||
},
|
||||
"backgroundElement": {
|
||||
"dark": "#32364a",
|
||||
"light": "#e7e7e8"
|
||||
},
|
||||
"border": {
|
||||
"dark": "#32364a",
|
||||
"light": "#e0e0e0"
|
||||
},
|
||||
"borderActive": {
|
||||
"dark": "blue",
|
||||
"light": "#4976eb"
|
||||
},
|
||||
"borderSubtle": {
|
||||
"dark": "#1e2132",
|
||||
"light": "#eeeeee"
|
||||
},
|
||||
"diffAdded": {
|
||||
"dark": "green",
|
||||
"light": "#91b859"
|
||||
},
|
||||
"diffRemoved": {
|
||||
"dark": "red",
|
||||
"light": "#e53935"
|
||||
},
|
||||
"diffContext": {
|
||||
"dark": "comment",
|
||||
"light": "#8796b0"
|
||||
},
|
||||
"diffHunkHeader": {
|
||||
"dark": "cyan",
|
||||
"light": "#00acc1"
|
||||
},
|
||||
"diffHighlightAdded": {
|
||||
"dark": "green",
|
||||
"light": "#91b859"
|
||||
},
|
||||
"diffHighlightRemoved": {
|
||||
"dark": "red",
|
||||
"light": "#e53935"
|
||||
},
|
||||
"diffAddedBg": {
|
||||
"dark": "#2e3c2b",
|
||||
"light": "#e8f5e9"
|
||||
},
|
||||
"diffRemovedBg": {
|
||||
"dark": "#3c2b2b",
|
||||
"light": "#ffebee"
|
||||
},
|
||||
"diffContextBg": {
|
||||
"dark": "#1e2132",
|
||||
"light": "#f5f5f5"
|
||||
},
|
||||
"diffLineNumber": {
|
||||
"dark": "#444760",
|
||||
"light": "#cfd8dc"
|
||||
},
|
||||
"diffAddedLineNumberBg": {
|
||||
"dark": "#2e3c2b",
|
||||
"light": "#e8f5e9"
|
||||
},
|
||||
"diffRemovedLineNumberBg": {
|
||||
"dark": "#3c2b2b",
|
||||
"light": "#ffebee"
|
||||
},
|
||||
"markdownText": {
|
||||
"dark": "foreground",
|
||||
"light": "#292d3e"
|
||||
},
|
||||
"markdownHeading": {
|
||||
"dark": "purple",
|
||||
"light": "#a854f2"
|
||||
},
|
||||
"markdownLink": {
|
||||
"dark": "blue",
|
||||
"light": "#4976eb"
|
||||
},
|
||||
"markdownLinkText": {
|
||||
"dark": "cyan",
|
||||
"light": "#00acc1"
|
||||
},
|
||||
"markdownCode": {
|
||||
"dark": "green",
|
||||
"light": "#91b859"
|
||||
},
|
||||
"markdownBlockQuote": {
|
||||
"dark": "comment",
|
||||
"light": "#8796b0"
|
||||
},
|
||||
"markdownEmph": {
|
||||
"dark": "yellow",
|
||||
"light": "#ffb300"
|
||||
},
|
||||
"markdownStrong": {
|
||||
"dark": "orange",
|
||||
"light": "#f4511e"
|
||||
},
|
||||
"markdownHorizontalRule": {
|
||||
"dark": "comment",
|
||||
"light": "#8796b0"
|
||||
},
|
||||
"markdownListItem": {
|
||||
"dark": "blue",
|
||||
"light": "#4976eb"
|
||||
},
|
||||
"markdownListEnumeration": {
|
||||
"dark": "cyan",
|
||||
"light": "#00acc1"
|
||||
},
|
||||
"markdownImage": {
|
||||
"dark": "blue",
|
||||
"light": "#4976eb"
|
||||
},
|
||||
"markdownImageText": {
|
||||
"dark": "cyan",
|
||||
"light": "#00acc1"
|
||||
},
|
||||
"markdownCodeBlock": {
|
||||
"dark": "foreground",
|
||||
"light": "#292d3e"
|
||||
},
|
||||
"syntaxComment": {
|
||||
"dark": "comment",
|
||||
"light": "#8796b0"
|
||||
},
|
||||
"syntaxKeyword": {
|
||||
"dark": "purple",
|
||||
"light": "#a854f2"
|
||||
},
|
||||
"syntaxFunction": {
|
||||
"dark": "blue",
|
||||
"light": "#4976eb"
|
||||
},
|
||||
"syntaxVariable": {
|
||||
"dark": "foreground",
|
||||
"light": "#292d3e"
|
||||
},
|
||||
"syntaxString": {
|
||||
"dark": "green",
|
||||
"light": "#91b859"
|
||||
},
|
||||
"syntaxNumber": {
|
||||
"dark": "orange",
|
||||
"light": "#f4511e"
|
||||
},
|
||||
"syntaxType": {
|
||||
"dark": "yellow",
|
||||
"light": "#ffb300"
|
||||
},
|
||||
"syntaxOperator": {
|
||||
"dark": "cyan",
|
||||
"light": "#00acc1"
|
||||
},
|
||||
"syntaxPunctuation": {
|
||||
"dark": "foreground",
|
||||
"light": "#292d3e"
|
||||
}
|
||||
}
|
||||
}
|
||||
234
packages/client/tui/internal/theme/themes/rosepine.json
Normal file
234
packages/client/tui/internal/theme/themes/rosepine.json
Normal file
|
|
@ -0,0 +1,234 @@
|
|||
{
|
||||
"$schema": "https://opencode.ai/theme.json",
|
||||
"defs": {
|
||||
"base": "#191724",
|
||||
"surface": "#1f1d2e",
|
||||
"overlay": "#26233a",
|
||||
"muted": "#6e6a86",
|
||||
"subtle": "#908caa",
|
||||
"text": "#e0def4",
|
||||
"love": "#eb6f92",
|
||||
"gold": "#f6c177",
|
||||
"rose": "#ebbcba",
|
||||
"pine": "#31748f",
|
||||
"foam": "#9ccfd8",
|
||||
"iris": "#c4a7e7",
|
||||
"highlightLow": "#21202e",
|
||||
"highlightMed": "#403d52",
|
||||
"highlightHigh": "#524f67",
|
||||
"moonBase": "#232136",
|
||||
"moonSurface": "#2a273f",
|
||||
"moonOverlay": "#393552",
|
||||
"moonMuted": "#6e6a86",
|
||||
"moonSubtle": "#908caa",
|
||||
"moonText": "#e0def4",
|
||||
"dawnBase": "#faf4ed",
|
||||
"dawnSurface": "#fffaf3",
|
||||
"dawnOverlay": "#f2e9e1",
|
||||
"dawnMuted": "#9893a5",
|
||||
"dawnSubtle": "#797593",
|
||||
"dawnText": "#575279"
|
||||
},
|
||||
"theme": {
|
||||
"primary": {
|
||||
"dark": "foam",
|
||||
"light": "pine"
|
||||
},
|
||||
"secondary": {
|
||||
"dark": "iris",
|
||||
"light": "#907aa9"
|
||||
},
|
||||
"accent": {
|
||||
"dark": "rose",
|
||||
"light": "#d7827e"
|
||||
},
|
||||
"error": {
|
||||
"dark": "love",
|
||||
"light": "#b4637a"
|
||||
},
|
||||
"warning": {
|
||||
"dark": "gold",
|
||||
"light": "#ea9d34"
|
||||
},
|
||||
"success": {
|
||||
"dark": "pine",
|
||||
"light": "#286983"
|
||||
},
|
||||
"info": {
|
||||
"dark": "foam",
|
||||
"light": "#56949f"
|
||||
},
|
||||
"text": {
|
||||
"dark": "#e0def4",
|
||||
"light": "#575279"
|
||||
},
|
||||
"textMuted": {
|
||||
"dark": "muted",
|
||||
"light": "dawnMuted"
|
||||
},
|
||||
"background": {
|
||||
"dark": "base",
|
||||
"light": "dawnBase"
|
||||
},
|
||||
"backgroundPanel": {
|
||||
"dark": "surface",
|
||||
"light": "dawnSurface"
|
||||
},
|
||||
"backgroundElement": {
|
||||
"dark": "overlay",
|
||||
"light": "dawnOverlay"
|
||||
},
|
||||
"border": {
|
||||
"dark": "highlightMed",
|
||||
"light": "#dfdad9"
|
||||
},
|
||||
"borderActive": {
|
||||
"dark": "foam",
|
||||
"light": "pine"
|
||||
},
|
||||
"borderSubtle": {
|
||||
"dark": "highlightLow",
|
||||
"light": "#f4ede8"
|
||||
},
|
||||
"diffAdded": {
|
||||
"dark": "pine",
|
||||
"light": "#286983"
|
||||
},
|
||||
"diffRemoved": {
|
||||
"dark": "love",
|
||||
"light": "#b4637a"
|
||||
},
|
||||
"diffContext": {
|
||||
"dark": "muted",
|
||||
"light": "dawnMuted"
|
||||
},
|
||||
"diffHunkHeader": {
|
||||
"dark": "iris",
|
||||
"light": "#907aa9"
|
||||
},
|
||||
"diffHighlightAdded": {
|
||||
"dark": "pine",
|
||||
"light": "#286983"
|
||||
},
|
||||
"diffHighlightRemoved": {
|
||||
"dark": "love",
|
||||
"light": "#b4637a"
|
||||
},
|
||||
"diffAddedBg": {
|
||||
"dark": "#1f2d3a",
|
||||
"light": "#e5f2f3"
|
||||
},
|
||||
"diffRemovedBg": {
|
||||
"dark": "#3a1f2d",
|
||||
"light": "#fce5e8"
|
||||
},
|
||||
"diffContextBg": {
|
||||
"dark": "surface",
|
||||
"light": "dawnSurface"
|
||||
},
|
||||
"diffLineNumber": {
|
||||
"dark": "muted",
|
||||
"light": "dawnMuted"
|
||||
},
|
||||
"diffAddedLineNumberBg": {
|
||||
"dark": "#1f2d3a",
|
||||
"light": "#e5f2f3"
|
||||
},
|
||||
"diffRemovedLineNumberBg": {
|
||||
"dark": "#3a1f2d",
|
||||
"light": "#fce5e8"
|
||||
},
|
||||
"markdownText": {
|
||||
"dark": "#e0def4",
|
||||
"light": "#575279"
|
||||
},
|
||||
"markdownHeading": {
|
||||
"dark": "iris",
|
||||
"light": "#907aa9"
|
||||
},
|
||||
"markdownLink": {
|
||||
"dark": "foam",
|
||||
"light": "pine"
|
||||
},
|
||||
"markdownLinkText": {
|
||||
"dark": "rose",
|
||||
"light": "#d7827e"
|
||||
},
|
||||
"markdownCode": {
|
||||
"dark": "pine",
|
||||
"light": "#286983"
|
||||
},
|
||||
"markdownBlockQuote": {
|
||||
"dark": "muted",
|
||||
"light": "dawnMuted"
|
||||
},
|
||||
"markdownEmph": {
|
||||
"dark": "gold",
|
||||
"light": "#ea9d34"
|
||||
},
|
||||
"markdownStrong": {
|
||||
"dark": "love",
|
||||
"light": "#b4637a"
|
||||
},
|
||||
"markdownHorizontalRule": {
|
||||
"dark": "highlightMed",
|
||||
"light": "#dfdad9"
|
||||
},
|
||||
"markdownListItem": {
|
||||
"dark": "foam",
|
||||
"light": "pine"
|
||||
},
|
||||
"markdownListEnumeration": {
|
||||
"dark": "rose",
|
||||
"light": "#d7827e"
|
||||
},
|
||||
"markdownImage": {
|
||||
"dark": "foam",
|
||||
"light": "pine"
|
||||
},
|
||||
"markdownImageText": {
|
||||
"dark": "rose",
|
||||
"light": "#d7827e"
|
||||
},
|
||||
"markdownCodeBlock": {
|
||||
"dark": "#e0def4",
|
||||
"light": "#575279"
|
||||
},
|
||||
"syntaxComment": {
|
||||
"dark": "muted",
|
||||
"light": "dawnMuted"
|
||||
},
|
||||
"syntaxKeyword": {
|
||||
"dark": "pine",
|
||||
"light": "#286983"
|
||||
},
|
||||
"syntaxFunction": {
|
||||
"dark": "rose",
|
||||
"light": "#d7827e"
|
||||
},
|
||||
"syntaxVariable": {
|
||||
"dark": "#e0def4",
|
||||
"light": "#575279"
|
||||
},
|
||||
"syntaxString": {
|
||||
"dark": "gold",
|
||||
"light": "#ea9d34"
|
||||
},
|
||||
"syntaxNumber": {
|
||||
"dark": "iris",
|
||||
"light": "#907aa9"
|
||||
},
|
||||
"syntaxType": {
|
||||
"dark": "foam",
|
||||
"light": "#56949f"
|
||||
},
|
||||
"syntaxOperator": {
|
||||
"dark": "subtle",
|
||||
"light": "dawnSubtle"
|
||||
},
|
||||
"syntaxPunctuation": {
|
||||
"dark": "subtle",
|
||||
"light": "dawnSubtle"
|
||||
}
|
||||
}
|
||||
}
|
||||
223
packages/client/tui/internal/theme/themes/solarized.json
Normal file
223
packages/client/tui/internal/theme/themes/solarized.json
Normal file
|
|
@ -0,0 +1,223 @@
|
|||
{
|
||||
"$schema": "https://opencode.ai/theme.json",
|
||||
"defs": {
|
||||
"base03": "#002b36",
|
||||
"base02": "#073642",
|
||||
"base01": "#586e75",
|
||||
"base00": "#657b83",
|
||||
"base0": "#839496",
|
||||
"base1": "#93a1a1",
|
||||
"base2": "#eee8d5",
|
||||
"base3": "#fdf6e3",
|
||||
"yellow": "#b58900",
|
||||
"orange": "#cb4b16",
|
||||
"red": "#dc322f",
|
||||
"magenta": "#d33682",
|
||||
"violet": "#6c71c4",
|
||||
"blue": "#268bd2",
|
||||
"cyan": "#2aa198",
|
||||
"green": "#859900"
|
||||
},
|
||||
"theme": {
|
||||
"primary": {
|
||||
"dark": "blue",
|
||||
"light": "blue"
|
||||
},
|
||||
"secondary": {
|
||||
"dark": "violet",
|
||||
"light": "violet"
|
||||
},
|
||||
"accent": {
|
||||
"dark": "cyan",
|
||||
"light": "cyan"
|
||||
},
|
||||
"error": {
|
||||
"dark": "red",
|
||||
"light": "red"
|
||||
},
|
||||
"warning": {
|
||||
"dark": "yellow",
|
||||
"light": "yellow"
|
||||
},
|
||||
"success": {
|
||||
"dark": "green",
|
||||
"light": "green"
|
||||
},
|
||||
"info": {
|
||||
"dark": "orange",
|
||||
"light": "orange"
|
||||
},
|
||||
"text": {
|
||||
"dark": "base0",
|
||||
"light": "base00"
|
||||
},
|
||||
"textMuted": {
|
||||
"dark": "base01",
|
||||
"light": "base1"
|
||||
},
|
||||
"background": {
|
||||
"dark": "base03",
|
||||
"light": "base3"
|
||||
},
|
||||
"backgroundPanel": {
|
||||
"dark": "base02",
|
||||
"light": "base2"
|
||||
},
|
||||
"backgroundElement": {
|
||||
"dark": "#073642",
|
||||
"light": "#eee8d5"
|
||||
},
|
||||
"border": {
|
||||
"dark": "base02",
|
||||
"light": "base2"
|
||||
},
|
||||
"borderActive": {
|
||||
"dark": "base01",
|
||||
"light": "base1"
|
||||
},
|
||||
"borderSubtle": {
|
||||
"dark": "#073642",
|
||||
"light": "#eee8d5"
|
||||
},
|
||||
"diffAdded": {
|
||||
"dark": "green",
|
||||
"light": "green"
|
||||
},
|
||||
"diffRemoved": {
|
||||
"dark": "red",
|
||||
"light": "red"
|
||||
},
|
||||
"diffContext": {
|
||||
"dark": "base01",
|
||||
"light": "base1"
|
||||
},
|
||||
"diffHunkHeader": {
|
||||
"dark": "base01",
|
||||
"light": "base1"
|
||||
},
|
||||
"diffHighlightAdded": {
|
||||
"dark": "green",
|
||||
"light": "green"
|
||||
},
|
||||
"diffHighlightRemoved": {
|
||||
"dark": "red",
|
||||
"light": "red"
|
||||
},
|
||||
"diffAddedBg": {
|
||||
"dark": "#073642",
|
||||
"light": "#eee8d5"
|
||||
},
|
||||
"diffRemovedBg": {
|
||||
"dark": "#073642",
|
||||
"light": "#eee8d5"
|
||||
},
|
||||
"diffContextBg": {
|
||||
"dark": "base02",
|
||||
"light": "base2"
|
||||
},
|
||||
"diffLineNumber": {
|
||||
"dark": "base01",
|
||||
"light": "base1"
|
||||
},
|
||||
"diffAddedLineNumberBg": {
|
||||
"dark": "#073642",
|
||||
"light": "#eee8d5"
|
||||
},
|
||||
"diffRemovedLineNumberBg": {
|
||||
"dark": "#073642",
|
||||
"light": "#eee8d5"
|
||||
},
|
||||
"markdownText": {
|
||||
"dark": "base0",
|
||||
"light": "base00"
|
||||
},
|
||||
"markdownHeading": {
|
||||
"dark": "blue",
|
||||
"light": "blue"
|
||||
},
|
||||
"markdownLink": {
|
||||
"dark": "cyan",
|
||||
"light": "cyan"
|
||||
},
|
||||
"markdownLinkText": {
|
||||
"dark": "violet",
|
||||
"light": "violet"
|
||||
},
|
||||
"markdownCode": {
|
||||
"dark": "green",
|
||||
"light": "green"
|
||||
},
|
||||
"markdownBlockQuote": {
|
||||
"dark": "base01",
|
||||
"light": "base1"
|
||||
},
|
||||
"markdownEmph": {
|
||||
"dark": "yellow",
|
||||
"light": "yellow"
|
||||
},
|
||||
"markdownStrong": {
|
||||
"dark": "orange",
|
||||
"light": "orange"
|
||||
},
|
||||
"markdownHorizontalRule": {
|
||||
"dark": "base01",
|
||||
"light": "base1"
|
||||
},
|
||||
"markdownListItem": {
|
||||
"dark": "blue",
|
||||
"light": "blue"
|
||||
},
|
||||
"markdownListEnumeration": {
|
||||
"dark": "cyan",
|
||||
"light": "cyan"
|
||||
},
|
||||
"markdownImage": {
|
||||
"dark": "cyan",
|
||||
"light": "cyan"
|
||||
},
|
||||
"markdownImageText": {
|
||||
"dark": "violet",
|
||||
"light": "violet"
|
||||
},
|
||||
"markdownCodeBlock": {
|
||||
"dark": "base0",
|
||||
"light": "base00"
|
||||
},
|
||||
"syntaxComment": {
|
||||
"dark": "base01",
|
||||
"light": "base1"
|
||||
},
|
||||
"syntaxKeyword": {
|
||||
"dark": "green",
|
||||
"light": "green"
|
||||
},
|
||||
"syntaxFunction": {
|
||||
"dark": "blue",
|
||||
"light": "blue"
|
||||
},
|
||||
"syntaxVariable": {
|
||||
"dark": "cyan",
|
||||
"light": "cyan"
|
||||
},
|
||||
"syntaxString": {
|
||||
"dark": "cyan",
|
||||
"light": "cyan"
|
||||
},
|
||||
"syntaxNumber": {
|
||||
"dark": "magenta",
|
||||
"light": "magenta"
|
||||
},
|
||||
"syntaxType": {
|
||||
"dark": "yellow",
|
||||
"light": "yellow"
|
||||
},
|
||||
"syntaxOperator": {
|
||||
"dark": "green",
|
||||
"light": "green"
|
||||
},
|
||||
"syntaxPunctuation": {
|
||||
"dark": "base0",
|
||||
"light": "base00"
|
||||
}
|
||||
}
|
||||
}
|
||||
226
packages/client/tui/internal/theme/themes/synthwave84.json
Normal file
226
packages/client/tui/internal/theme/themes/synthwave84.json
Normal file
|
|
@ -0,0 +1,226 @@
|
|||
{
|
||||
"$schema": "https://opencode.ai/theme.json",
|
||||
"defs": {
|
||||
"background": "#262335",
|
||||
"backgroundAlt": "#1e1a29",
|
||||
"backgroundPanel": "#2a2139",
|
||||
"foreground": "#ffffff",
|
||||
"foregroundMuted": "#848bbd",
|
||||
"pink": "#ff7edb",
|
||||
"pinkBright": "#ff92df",
|
||||
"cyan": "#36f9f6",
|
||||
"cyanBright": "#72f1f8",
|
||||
"yellow": "#fede5d",
|
||||
"yellowBright": "#fff95d",
|
||||
"orange": "#ff8b39",
|
||||
"orangeBright": "#ff9f43",
|
||||
"purple": "#b084eb",
|
||||
"purpleBright": "#c792ea",
|
||||
"red": "#fe4450",
|
||||
"redBright": "#ff5e5b",
|
||||
"green": "#72f1b8",
|
||||
"greenBright": "#97f1d8"
|
||||
},
|
||||
"theme": {
|
||||
"primary": {
|
||||
"dark": "cyan",
|
||||
"light": "#00bcd4"
|
||||
},
|
||||
"secondary": {
|
||||
"dark": "pink",
|
||||
"light": "#e91e63"
|
||||
},
|
||||
"accent": {
|
||||
"dark": "purple",
|
||||
"light": "#9c27b0"
|
||||
},
|
||||
"error": {
|
||||
"dark": "red",
|
||||
"light": "#f44336"
|
||||
},
|
||||
"warning": {
|
||||
"dark": "yellow",
|
||||
"light": "#ff9800"
|
||||
},
|
||||
"success": {
|
||||
"dark": "green",
|
||||
"light": "#4caf50"
|
||||
},
|
||||
"info": {
|
||||
"dark": "orange",
|
||||
"light": "#ff5722"
|
||||
},
|
||||
"text": {
|
||||
"dark": "foreground",
|
||||
"light": "#262335"
|
||||
},
|
||||
"textMuted": {
|
||||
"dark": "foregroundMuted",
|
||||
"light": "#5c5c8a"
|
||||
},
|
||||
"background": {
|
||||
"dark": "#262335",
|
||||
"light": "#fafafa"
|
||||
},
|
||||
"backgroundPanel": {
|
||||
"dark": "#1e1a29",
|
||||
"light": "#f5f5f5"
|
||||
},
|
||||
"backgroundElement": {
|
||||
"dark": "#2a2139",
|
||||
"light": "#eeeeee"
|
||||
},
|
||||
"border": {
|
||||
"dark": "#495495",
|
||||
"light": "#e0e0e0"
|
||||
},
|
||||
"borderActive": {
|
||||
"dark": "cyan",
|
||||
"light": "#00bcd4"
|
||||
},
|
||||
"borderSubtle": {
|
||||
"dark": "#241b2f",
|
||||
"light": "#f0f0f0"
|
||||
},
|
||||
"diffAdded": {
|
||||
"dark": "green",
|
||||
"light": "#4caf50"
|
||||
},
|
||||
"diffRemoved": {
|
||||
"dark": "red",
|
||||
"light": "#f44336"
|
||||
},
|
||||
"diffContext": {
|
||||
"dark": "foregroundMuted",
|
||||
"light": "#5c5c8a"
|
||||
},
|
||||
"diffHunkHeader": {
|
||||
"dark": "purple",
|
||||
"light": "#9c27b0"
|
||||
},
|
||||
"diffHighlightAdded": {
|
||||
"dark": "greenBright",
|
||||
"light": "#4caf50"
|
||||
},
|
||||
"diffHighlightRemoved": {
|
||||
"dark": "redBright",
|
||||
"light": "#f44336"
|
||||
},
|
||||
"diffAddedBg": {
|
||||
"dark": "#1a3a2a",
|
||||
"light": "#e8f5e9"
|
||||
},
|
||||
"diffRemovedBg": {
|
||||
"dark": "#3a1a2a",
|
||||
"light": "#ffebee"
|
||||
},
|
||||
"diffContextBg": {
|
||||
"dark": "#1e1a29",
|
||||
"light": "#f5f5f5"
|
||||
},
|
||||
"diffLineNumber": {
|
||||
"dark": "#495495",
|
||||
"light": "#b0b0b0"
|
||||
},
|
||||
"diffAddedLineNumberBg": {
|
||||
"dark": "#1a3a2a",
|
||||
"light": "#e8f5e9"
|
||||
},
|
||||
"diffRemovedLineNumberBg": {
|
||||
"dark": "#3a1a2a",
|
||||
"light": "#ffebee"
|
||||
},
|
||||
"markdownText": {
|
||||
"dark": "foreground",
|
||||
"light": "#262335"
|
||||
},
|
||||
"markdownHeading": {
|
||||
"dark": "pink",
|
||||
"light": "#e91e63"
|
||||
},
|
||||
"markdownLink": {
|
||||
"dark": "cyan",
|
||||
"light": "#00bcd4"
|
||||
},
|
||||
"markdownLinkText": {
|
||||
"dark": "purple",
|
||||
"light": "#9c27b0"
|
||||
},
|
||||
"markdownCode": {
|
||||
"dark": "green",
|
||||
"light": "#4caf50"
|
||||
},
|
||||
"markdownBlockQuote": {
|
||||
"dark": "foregroundMuted",
|
||||
"light": "#5c5c8a"
|
||||
},
|
||||
"markdownEmph": {
|
||||
"dark": "yellow",
|
||||
"light": "#ff9800"
|
||||
},
|
||||
"markdownStrong": {
|
||||
"dark": "orange",
|
||||
"light": "#ff5722"
|
||||
},
|
||||
"markdownHorizontalRule": {
|
||||
"dark": "#495495",
|
||||
"light": "#e0e0e0"
|
||||
},
|
||||
"markdownListItem": {
|
||||
"dark": "cyan",
|
||||
"light": "#00bcd4"
|
||||
},
|
||||
"markdownListEnumeration": {
|
||||
"dark": "purple",
|
||||
"light": "#9c27b0"
|
||||
},
|
||||
"markdownImage": {
|
||||
"dark": "cyan",
|
||||
"light": "#00bcd4"
|
||||
},
|
||||
"markdownImageText": {
|
||||
"dark": "purple",
|
||||
"light": "#9c27b0"
|
||||
},
|
||||
"markdownCodeBlock": {
|
||||
"dark": "foreground",
|
||||
"light": "#262335"
|
||||
},
|
||||
"syntaxComment": {
|
||||
"dark": "foregroundMuted",
|
||||
"light": "#5c5c8a"
|
||||
},
|
||||
"syntaxKeyword": {
|
||||
"dark": "pink",
|
||||
"light": "#e91e63"
|
||||
},
|
||||
"syntaxFunction": {
|
||||
"dark": "orange",
|
||||
"light": "#ff5722"
|
||||
},
|
||||
"syntaxVariable": {
|
||||
"dark": "foreground",
|
||||
"light": "#262335"
|
||||
},
|
||||
"syntaxString": {
|
||||
"dark": "yellow",
|
||||
"light": "#ff9800"
|
||||
},
|
||||
"syntaxNumber": {
|
||||
"dark": "purple",
|
||||
"light": "#9c27b0"
|
||||
},
|
||||
"syntaxType": {
|
||||
"dark": "cyan",
|
||||
"light": "#00bcd4"
|
||||
},
|
||||
"syntaxOperator": {
|
||||
"dark": "pink",
|
||||
"light": "#e91e63"
|
||||
},
|
||||
"syntaxPunctuation": {
|
||||
"dark": "foreground",
|
||||
"light": "#262335"
|
||||
}
|
||||
}
|
||||
}
|
||||
243
packages/client/tui/internal/theme/themes/tokyonight.json
Normal file
243
packages/client/tui/internal/theme/themes/tokyonight.json
Normal file
|
|
@ -0,0 +1,243 @@
|
|||
{
|
||||
"$schema": "https://opencode.ai/theme.json",
|
||||
"defs": {
|
||||
"darkStep1": "#1a1b26",
|
||||
"darkStep2": "#1e2030",
|
||||
"darkStep3": "#222436",
|
||||
"darkStep4": "#292e42",
|
||||
"darkStep5": "#3b4261",
|
||||
"darkStep6": "#545c7e",
|
||||
"darkStep7": "#737aa2",
|
||||
"darkStep8": "#9099b2",
|
||||
"darkStep9": "#82aaff",
|
||||
"darkStep10": "#89b4fa",
|
||||
"darkStep11": "#828bb8",
|
||||
"darkStep12": "#c8d3f5",
|
||||
"darkRed": "#ff757f",
|
||||
"darkOrange": "#ff966c",
|
||||
"darkYellow": "#ffc777",
|
||||
"darkGreen": "#c3e88d",
|
||||
"darkCyan": "#86e1fc",
|
||||
"darkPurple": "#c099ff",
|
||||
"lightStep1": "#e1e2e7",
|
||||
"lightStep2": "#d5d6db",
|
||||
"lightStep3": "#c8c9ce",
|
||||
"lightStep4": "#b9bac1",
|
||||
"lightStep5": "#a8aecb",
|
||||
"lightStep6": "#9699a8",
|
||||
"lightStep7": "#737a8c",
|
||||
"lightStep8": "#5a607d",
|
||||
"lightStep9": "#2e7de9",
|
||||
"lightStep10": "#1a6ce7",
|
||||
"lightStep11": "#8990a3",
|
||||
"lightStep12": "#3760bf",
|
||||
"lightRed": "#f52a65",
|
||||
"lightOrange": "#b15c00",
|
||||
"lightYellow": "#8c6c3e",
|
||||
"lightGreen": "#587539",
|
||||
"lightCyan": "#007197",
|
||||
"lightPurple": "#9854f1"
|
||||
},
|
||||
"theme": {
|
||||
"primary": {
|
||||
"dark": "darkStep9",
|
||||
"light": "lightStep9"
|
||||
},
|
||||
"secondary": {
|
||||
"dark": "darkPurple",
|
||||
"light": "lightPurple"
|
||||
},
|
||||
"accent": {
|
||||
"dark": "darkOrange",
|
||||
"light": "lightOrange"
|
||||
},
|
||||
"error": {
|
||||
"dark": "darkRed",
|
||||
"light": "lightRed"
|
||||
},
|
||||
"warning": {
|
||||
"dark": "darkOrange",
|
||||
"light": "lightOrange"
|
||||
},
|
||||
"success": {
|
||||
"dark": "darkGreen",
|
||||
"light": "lightGreen"
|
||||
},
|
||||
"info": {
|
||||
"dark": "darkStep9",
|
||||
"light": "lightStep9"
|
||||
},
|
||||
"text": {
|
||||
"dark": "darkStep12",
|
||||
"light": "lightStep12"
|
||||
},
|
||||
"textMuted": {
|
||||
"dark": "darkStep11",
|
||||
"light": "lightStep11"
|
||||
},
|
||||
"background": {
|
||||
"dark": "darkStep1",
|
||||
"light": "lightStep1"
|
||||
},
|
||||
"backgroundPanel": {
|
||||
"dark": "darkStep2",
|
||||
"light": "lightStep2"
|
||||
},
|
||||
"backgroundElement": {
|
||||
"dark": "darkStep3",
|
||||
"light": "lightStep3"
|
||||
},
|
||||
"border": {
|
||||
"dark": "darkStep7",
|
||||
"light": "lightStep7"
|
||||
},
|
||||
"borderActive": {
|
||||
"dark": "darkStep8",
|
||||
"light": "lightStep8"
|
||||
},
|
||||
"borderSubtle": {
|
||||
"dark": "darkStep6",
|
||||
"light": "lightStep6"
|
||||
},
|
||||
"diffAdded": {
|
||||
"dark": "#4fd6be",
|
||||
"light": "#1e725c"
|
||||
},
|
||||
"diffRemoved": {
|
||||
"dark": "#c53b53",
|
||||
"light": "#c53b53"
|
||||
},
|
||||
"diffContext": {
|
||||
"dark": "#828bb8",
|
||||
"light": "#7086b5"
|
||||
},
|
||||
"diffHunkHeader": {
|
||||
"dark": "#828bb8",
|
||||
"light": "#7086b5"
|
||||
},
|
||||
"diffHighlightAdded": {
|
||||
"dark": "#b8db87",
|
||||
"light": "#4db380"
|
||||
},
|
||||
"diffHighlightRemoved": {
|
||||
"dark": "#e26a75",
|
||||
"light": "#f52a65"
|
||||
},
|
||||
"diffAddedBg": {
|
||||
"dark": "#20303b",
|
||||
"light": "#d5e5d5"
|
||||
},
|
||||
"diffRemovedBg": {
|
||||
"dark": "#37222c",
|
||||
"light": "#f7d8db"
|
||||
},
|
||||
"diffContextBg": {
|
||||
"dark": "darkStep2",
|
||||
"light": "lightStep2"
|
||||
},
|
||||
"diffLineNumber": {
|
||||
"dark": "darkStep3",
|
||||
"light": "lightStep3"
|
||||
},
|
||||
"diffAddedLineNumberBg": {
|
||||
"dark": "#1b2b34",
|
||||
"light": "#c5d5c5"
|
||||
},
|
||||
"diffRemovedLineNumberBg": {
|
||||
"dark": "#2d1f26",
|
||||
"light": "#e7c8cb"
|
||||
},
|
||||
"markdownText": {
|
||||
"dark": "darkStep12",
|
||||
"light": "lightStep12"
|
||||
},
|
||||
"markdownHeading": {
|
||||
"dark": "darkPurple",
|
||||
"light": "lightPurple"
|
||||
},
|
||||
"markdownLink": {
|
||||
"dark": "darkStep9",
|
||||
"light": "lightStep9"
|
||||
},
|
||||
"markdownLinkText": {
|
||||
"dark": "darkCyan",
|
||||
"light": "lightCyan"
|
||||
},
|
||||
"markdownCode": {
|
||||
"dark": "darkGreen",
|
||||
"light": "lightGreen"
|
||||
},
|
||||
"markdownBlockQuote": {
|
||||
"dark": "darkYellow",
|
||||
"light": "lightYellow"
|
||||
},
|
||||
"markdownEmph": {
|
||||
"dark": "darkYellow",
|
||||
"light": "lightYellow"
|
||||
},
|
||||
"markdownStrong": {
|
||||
"dark": "darkOrange",
|
||||
"light": "lightOrange"
|
||||
},
|
||||
"markdownHorizontalRule": {
|
||||
"dark": "darkStep11",
|
||||
"light": "lightStep11"
|
||||
},
|
||||
"markdownListItem": {
|
||||
"dark": "darkStep9",
|
||||
"light": "lightStep9"
|
||||
},
|
||||
"markdownListEnumeration": {
|
||||
"dark": "darkCyan",
|
||||
"light": "lightCyan"
|
||||
},
|
||||
"markdownImage": {
|
||||
"dark": "darkStep9",
|
||||
"light": "lightStep9"
|
||||
},
|
||||
"markdownImageText": {
|
||||
"dark": "darkCyan",
|
||||
"light": "lightCyan"
|
||||
},
|
||||
"markdownCodeBlock": {
|
||||
"dark": "darkStep12",
|
||||
"light": "lightStep12"
|
||||
},
|
||||
"syntaxComment": {
|
||||
"dark": "darkStep11",
|
||||
"light": "lightStep11"
|
||||
},
|
||||
"syntaxKeyword": {
|
||||
"dark": "darkPurple",
|
||||
"light": "lightPurple"
|
||||
},
|
||||
"syntaxFunction": {
|
||||
"dark": "darkStep9",
|
||||
"light": "lightStep9"
|
||||
},
|
||||
"syntaxVariable": {
|
||||
"dark": "darkRed",
|
||||
"light": "lightRed"
|
||||
},
|
||||
"syntaxString": {
|
||||
"dark": "darkGreen",
|
||||
"light": "lightGreen"
|
||||
},
|
||||
"syntaxNumber": {
|
||||
"dark": "darkOrange",
|
||||
"light": "lightOrange"
|
||||
},
|
||||
"syntaxType": {
|
||||
"dark": "darkYellow",
|
||||
"light": "lightYellow"
|
||||
},
|
||||
"syntaxOperator": {
|
||||
"dark": "darkCyan",
|
||||
"light": "lightCyan"
|
||||
},
|
||||
"syntaxPunctuation": {
|
||||
"dark": "darkStep12",
|
||||
"light": "lightStep12"
|
||||
}
|
||||
}
|
||||
}
|
||||
223
packages/client/tui/internal/theme/themes/zenburn.json
Normal file
223
packages/client/tui/internal/theme/themes/zenburn.json
Normal file
|
|
@ -0,0 +1,223 @@
|
|||
{
|
||||
"$schema": "https://opencode.ai/theme.json",
|
||||
"defs": {
|
||||
"bg": "#3f3f3f",
|
||||
"bgAlt": "#4f4f4f",
|
||||
"bgPanel": "#5f5f5f",
|
||||
"fg": "#dcdccc",
|
||||
"fgMuted": "#9f9f9f",
|
||||
"red": "#cc9393",
|
||||
"redBright": "#dca3a3",
|
||||
"green": "#7f9f7f",
|
||||
"greenBright": "#8fb28f",
|
||||
"yellow": "#f0dfaf",
|
||||
"yellowDim": "#e0cf9f",
|
||||
"blue": "#8cd0d3",
|
||||
"blueDim": "#7cb8bb",
|
||||
"magenta": "#dc8cc3",
|
||||
"cyan": "#93e0e3",
|
||||
"orange": "#dfaf8f"
|
||||
},
|
||||
"theme": {
|
||||
"primary": {
|
||||
"dark": "blue",
|
||||
"light": "#5f7f8f"
|
||||
},
|
||||
"secondary": {
|
||||
"dark": "magenta",
|
||||
"light": "#8f5f8f"
|
||||
},
|
||||
"accent": {
|
||||
"dark": "cyan",
|
||||
"light": "#5f8f8f"
|
||||
},
|
||||
"error": {
|
||||
"dark": "red",
|
||||
"light": "#8f5f5f"
|
||||
},
|
||||
"warning": {
|
||||
"dark": "yellow",
|
||||
"light": "#8f8f5f"
|
||||
},
|
||||
"success": {
|
||||
"dark": "green",
|
||||
"light": "#5f8f5f"
|
||||
},
|
||||
"info": {
|
||||
"dark": "orange",
|
||||
"light": "#8f7f5f"
|
||||
},
|
||||
"text": {
|
||||
"dark": "fg",
|
||||
"light": "#3f3f3f"
|
||||
},
|
||||
"textMuted": {
|
||||
"dark": "fgMuted",
|
||||
"light": "#6f6f6f"
|
||||
},
|
||||
"background": {
|
||||
"dark": "bg",
|
||||
"light": "#ffffef"
|
||||
},
|
||||
"backgroundPanel": {
|
||||
"dark": "bgAlt",
|
||||
"light": "#f5f5e5"
|
||||
},
|
||||
"backgroundElement": {
|
||||
"dark": "bgPanel",
|
||||
"light": "#ebebdb"
|
||||
},
|
||||
"border": {
|
||||
"dark": "#5f5f5f",
|
||||
"light": "#d0d0c0"
|
||||
},
|
||||
"borderActive": {
|
||||
"dark": "blue",
|
||||
"light": "#5f7f8f"
|
||||
},
|
||||
"borderSubtle": {
|
||||
"dark": "#4f4f4f",
|
||||
"light": "#e0e0d0"
|
||||
},
|
||||
"diffAdded": {
|
||||
"dark": "green",
|
||||
"light": "#5f8f5f"
|
||||
},
|
||||
"diffRemoved": {
|
||||
"dark": "red",
|
||||
"light": "#8f5f5f"
|
||||
},
|
||||
"diffContext": {
|
||||
"dark": "fgMuted",
|
||||
"light": "#6f6f6f"
|
||||
},
|
||||
"diffHunkHeader": {
|
||||
"dark": "cyan",
|
||||
"light": "#5f8f8f"
|
||||
},
|
||||
"diffHighlightAdded": {
|
||||
"dark": "greenBright",
|
||||
"light": "#5f8f5f"
|
||||
},
|
||||
"diffHighlightRemoved": {
|
||||
"dark": "redBright",
|
||||
"light": "#8f5f5f"
|
||||
},
|
||||
"diffAddedBg": {
|
||||
"dark": "#4f5f4f",
|
||||
"light": "#efffef"
|
||||
},
|
||||
"diffRemovedBg": {
|
||||
"dark": "#5f4f4f",
|
||||
"light": "#ffefef"
|
||||
},
|
||||
"diffContextBg": {
|
||||
"dark": "bgAlt",
|
||||
"light": "#f5f5e5"
|
||||
},
|
||||
"diffLineNumber": {
|
||||
"dark": "#6f6f6f",
|
||||
"light": "#b0b0a0"
|
||||
},
|
||||
"diffAddedLineNumberBg": {
|
||||
"dark": "#4f5f4f",
|
||||
"light": "#efffef"
|
||||
},
|
||||
"diffRemovedLineNumberBg": {
|
||||
"dark": "#5f4f4f",
|
||||
"light": "#ffefef"
|
||||
},
|
||||
"markdownText": {
|
||||
"dark": "fg",
|
||||
"light": "#3f3f3f"
|
||||
},
|
||||
"markdownHeading": {
|
||||
"dark": "yellow",
|
||||
"light": "#8f8f5f"
|
||||
},
|
||||
"markdownLink": {
|
||||
"dark": "blue",
|
||||
"light": "#5f7f8f"
|
||||
},
|
||||
"markdownLinkText": {
|
||||
"dark": "cyan",
|
||||
"light": "#5f8f8f"
|
||||
},
|
||||
"markdownCode": {
|
||||
"dark": "green",
|
||||
"light": "#5f8f5f"
|
||||
},
|
||||
"markdownBlockQuote": {
|
||||
"dark": "fgMuted",
|
||||
"light": "#6f6f6f"
|
||||
},
|
||||
"markdownEmph": {
|
||||
"dark": "yellowDim",
|
||||
"light": "#8f8f5f"
|
||||
},
|
||||
"markdownStrong": {
|
||||
"dark": "orange",
|
||||
"light": "#8f7f5f"
|
||||
},
|
||||
"markdownHorizontalRule": {
|
||||
"dark": "fgMuted",
|
||||
"light": "#6f6f6f"
|
||||
},
|
||||
"markdownListItem": {
|
||||
"dark": "blue",
|
||||
"light": "#5f7f8f"
|
||||
},
|
||||
"markdownListEnumeration": {
|
||||
"dark": "cyan",
|
||||
"light": "#5f8f8f"
|
||||
},
|
||||
"markdownImage": {
|
||||
"dark": "blue",
|
||||
"light": "#5f7f8f"
|
||||
},
|
||||
"markdownImageText": {
|
||||
"dark": "cyan",
|
||||
"light": "#5f8f8f"
|
||||
},
|
||||
"markdownCodeBlock": {
|
||||
"dark": "fg",
|
||||
"light": "#3f3f3f"
|
||||
},
|
||||
"syntaxComment": {
|
||||
"dark": "#7f9f7f",
|
||||
"light": "#5f7f5f"
|
||||
},
|
||||
"syntaxKeyword": {
|
||||
"dark": "yellow",
|
||||
"light": "#8f8f5f"
|
||||
},
|
||||
"syntaxFunction": {
|
||||
"dark": "blue",
|
||||
"light": "#5f7f8f"
|
||||
},
|
||||
"syntaxVariable": {
|
||||
"dark": "fg",
|
||||
"light": "#3f3f3f"
|
||||
},
|
||||
"syntaxString": {
|
||||
"dark": "red",
|
||||
"light": "#8f5f5f"
|
||||
},
|
||||
"syntaxNumber": {
|
||||
"dark": "greenBright",
|
||||
"light": "#5f8f5f"
|
||||
},
|
||||
"syntaxType": {
|
||||
"dark": "cyan",
|
||||
"light": "#5f8f8f"
|
||||
},
|
||||
"syntaxOperator": {
|
||||
"dark": "yellow",
|
||||
"light": "#8f8f5f"
|
||||
},
|
||||
"syntaxPunctuation": {
|
||||
"dark": "fg",
|
||||
"light": "#3f3f3f"
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue