| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- {
- "$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", "ink", "primary", "success", "warning", "error", "info"],
- "properties": {
- "neutral": {
- "$ref": "#/definitions/HexColor",
- "description": "Base neutral color for generating the gray scale"
- },
- "ink": {
- "$ref": "#/definitions/HexColor",
- "description": "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"
- }
- }
- }
- }
- }
- }
|