mirror of
https://github.com/anomalyco/opencode.git
synced 2026-04-25 23:35:17 +00:00
162 lines
5.6 KiB
JSON
162 lines
5.6 KiB
JSON
{
|
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
"$id": "https://opencode.ai/desktop-theme.json",
|
|
"title": "OpenCode Desktop Theme",
|
|
"description": "A theme definition for the OpenCode desktop application",
|
|
"type": "object",
|
|
"required": ["name", "id", "light", "dark"],
|
|
"properties": {
|
|
"$schema": {
|
|
"type": "string",
|
|
"description": "JSON Schema reference"
|
|
},
|
|
"name": {
|
|
"type": "string",
|
|
"description": "Human-readable theme name"
|
|
},
|
|
"id": {
|
|
"type": "string",
|
|
"description": "Unique theme identifier (slug)",
|
|
"pattern": "^[a-z0-9-]+$"
|
|
},
|
|
"light": {
|
|
"$ref": "#/definitions/ThemeVariant",
|
|
"description": "Light mode color variant"
|
|
},
|
|
"dark": {
|
|
"$ref": "#/definitions/ThemeVariant",
|
|
"description": "Dark mode color variant"
|
|
}
|
|
},
|
|
"definitions": {
|
|
"HexColor": {
|
|
"type": "string",
|
|
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$",
|
|
"description": "A hex color value like #fff, #ffff, #ffffff, or #ffffffff"
|
|
},
|
|
"ColorValue": {
|
|
"type": "string",
|
|
"pattern": "^(#([0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|var\\(--[a-z0-9-]+\\))$",
|
|
"description": "Either a hex color value (#rgb/#rgba/#rrggbb/#rrggbbaa) or a CSS variable reference"
|
|
},
|
|
"ThemeSeedColors": {
|
|
"type": "object",
|
|
"description": "The legacy semantic seed set used to generate a theme",
|
|
"additionalProperties": false,
|
|
"required": ["neutral", "primary", "success", "warning", "error", "info", "interactive", "diffAdd", "diffDelete"],
|
|
"properties": {
|
|
"neutral": {
|
|
"$ref": "#/definitions/HexColor",
|
|
"description": "Base neutral color for generating the gray scale"
|
|
},
|
|
"primary": {
|
|
"$ref": "#/definitions/HexColor",
|
|
"description": "Primary brand/accent color"
|
|
},
|
|
"success": {
|
|
"$ref": "#/definitions/HexColor",
|
|
"description": "Success state color (typically green)"
|
|
},
|
|
"warning": {
|
|
"$ref": "#/definitions/HexColor",
|
|
"description": "Warning state color (typically yellow/orange)"
|
|
},
|
|
"error": {
|
|
"$ref": "#/definitions/HexColor",
|
|
"description": "Error/critical state color (typically red)"
|
|
},
|
|
"info": {
|
|
"$ref": "#/definitions/HexColor",
|
|
"description": "Informational state color (typically purple/blue)"
|
|
},
|
|
"interactive": {
|
|
"$ref": "#/definitions/HexColor",
|
|
"description": "Interactive element color (links, buttons)"
|
|
},
|
|
"diffAdd": {
|
|
"$ref": "#/definitions/HexColor",
|
|
"description": "Color for diff additions"
|
|
},
|
|
"diffDelete": {
|
|
"$ref": "#/definitions/HexColor",
|
|
"description": "Color for diff deletions"
|
|
}
|
|
}
|
|
},
|
|
"ThemePaletteColors": {
|
|
"type": "object",
|
|
"description": "A compact semantic palette used to derive the full theme programmatically",
|
|
"additionalProperties": false,
|
|
"required": ["neutral", "primary", "success", "warning", "error", "info"],
|
|
"properties": {
|
|
"neutral": {
|
|
"$ref": "#/definitions/HexColor",
|
|
"description": "Base neutral color for generating the gray scale"
|
|
},
|
|
"ink": {
|
|
"$ref": "#/definitions/HexColor",
|
|
"description": "Optional foreground or chrome color used to derive text and border tones"
|
|
},
|
|
"primary": {
|
|
"$ref": "#/definitions/HexColor",
|
|
"description": "Primary brand color used for brand surfaces and strong emphasis"
|
|
},
|
|
"success": {
|
|
"$ref": "#/definitions/HexColor",
|
|
"description": "Success state color"
|
|
},
|
|
"warning": {
|
|
"$ref": "#/definitions/HexColor",
|
|
"description": "Warning state color"
|
|
},
|
|
"error": {
|
|
"$ref": "#/definitions/HexColor",
|
|
"description": "Error or critical state color"
|
|
},
|
|
"info": {
|
|
"$ref": "#/definitions/HexColor",
|
|
"description": "Informational state color"
|
|
},
|
|
"accent": {
|
|
"$ref": "#/definitions/HexColor",
|
|
"description": "Optional extra expressive accent for syntax and rich content"
|
|
},
|
|
"interactive": {
|
|
"$ref": "#/definitions/HexColor",
|
|
"description": "Optional dedicated interactive color; falls back to primary"
|
|
},
|
|
"diffAdd": {
|
|
"$ref": "#/definitions/HexColor",
|
|
"description": "Optional diff-add seed; falls back to a softened success color"
|
|
},
|
|
"diffDelete": {
|
|
"$ref": "#/definitions/HexColor",
|
|
"description": "Optional diff-delete seed; falls back to error"
|
|
}
|
|
}
|
|
},
|
|
"ThemeVariant": {
|
|
"type": "object",
|
|
"description": "A theme variant (light or dark) with either a compact palette or legacy seeds and optional overrides",
|
|
"oneOf": [{ "required": ["seeds"] }, { "required": ["palette"] }],
|
|
"properties": {
|
|
"seeds": {
|
|
"$ref": "#/definitions/ThemeSeedColors",
|
|
"description": "Legacy seed colors used to generate the full palette"
|
|
},
|
|
"palette": {
|
|
"$ref": "#/definitions/ThemePaletteColors",
|
|
"description": "Compact palette used to derive the full token set"
|
|
},
|
|
"overrides": {
|
|
"type": "object",
|
|
"description": "Optional direct overrides for any CSS variable (without -- prefix)",
|
|
"additionalProperties": {
|
|
"$ref": "#/definitions/ColorValue"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|