summaryrefslogtreecommitdiffhomepage
path: root/packages/ui/src/theme/desktop-theme.schema.json
diff options
context:
space:
mode:
authorAdam <[email protected]>2026-03-08 19:28:58 -0500
committerGitHub <[email protected]>2026-03-08 19:28:58 -0500
commitb976f339e857be3fae20f179992aa82fbea24f08 (patch)
tree14655402aef6b5ba8e0c0c5c13797a3984319e6c /packages/ui/src/theme/desktop-theme.schema.json
parent7d7837e5b6eb0fc88d202936b726ab890f4add53 (diff)
downloadopencode-b976f339e857be3fae20f179992aa82fbea24f08.tar.gz
opencode-b976f339e857be3fae20f179992aa82fbea24f08.zip
feat(app): generate color palettes (#16232)
Diffstat (limited to 'packages/ui/src/theme/desktop-theme.schema.json')
-rw-r--r--packages/ui/src/theme/desktop-theme.schema.json67
1 files changed, 62 insertions, 5 deletions
diff --git a/packages/ui/src/theme/desktop-theme.schema.json b/packages/ui/src/theme/desktop-theme.schema.json
index b60a8f37c..d4f1ffd21 100644
--- a/packages/ui/src/theme/desktop-theme.schema.json
+++ b/packages/ui/src/theme/desktop-theme.schema.json
@@ -36,12 +36,13 @@
},
"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-]+\))$",
+ "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 minimum set of colors needed to generate a theme",
+ "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": {
@@ -82,14 +83,70 @@
}
}
},
+ "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 seed colors and optional overrides",
- "required": ["seeds"],
+ "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": "Seed colors used to generate the full palette"
+ "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",