* feat: added themes system * feat: smart sidebar auto-hide for files/diff tabs + lower files sidebar threshold * feat: added Checkbox component and update theming - Add reusable Checkbox component for toggles across UI - Replace several inputs with Checkbox in settings and commands panels - Add DiffIcon and apply surface/border theming to key UI areas * feat: Add convert-vscode-theme.cjs to convert VS Code themes to OpenChamber format * refactor: remove unused permission logic from ChatInput - Remove unused permission rules parsing logic from ChatInput - Memoize renderTheme in DiffWorkerProvider to avoid unnecessary recalculations - Remove forceOpaque helper in vscode theme adapter * fix: guard VSCode theme loading in MarkdownRenderer * feat: add custom user themes loading and reload - Load user themes from ~/.config/openchamber/themes at runtime - Expose /api/config/themes to fetch custom themes - Allow theme reloading from Settings → Theme → Reload themes in the UI
156 lines
4.1 KiB
JSON
156 lines
4.1 KiB
JSON
{
|
|
"metadata": {
|
|
"id": "mono-plus-dark",
|
|
"name": "Mono Plus",
|
|
"description": "A pure monochromatic theme - dark variant with slight colors added",
|
|
"version": "1.0.0",
|
|
"variant": "dark",
|
|
"tags": ["dark", "monochrome", "minimal"]
|
|
},
|
|
"colors": {
|
|
"primary": {
|
|
"base": "#a2bee8",
|
|
"hover": "#E5E5E5",
|
|
"active": "#CCCCCC",
|
|
"foreground": "#000000",
|
|
"muted": "#FFFFFF80",
|
|
"emphasis": "#FFFFFF"
|
|
},
|
|
"surface": {
|
|
"background": "#000000",
|
|
"foreground": "#E5E5E5",
|
|
"muted": "#0A0A0A",
|
|
"mutedForeground": "#808080",
|
|
"elevated": "#141414",
|
|
"elevatedForeground": "#E5E5E5",
|
|
"overlay": "#00000080",
|
|
"subtle": "#1A1A1A"
|
|
},
|
|
"interactive": {
|
|
"border": "#222222",
|
|
"borderHover": "#333333",
|
|
"borderFocus": "#FFFFFF",
|
|
"selection": "#ffffff1f",
|
|
"selectionForeground": "#E5E5E5",
|
|
"focus": "#FFFFFF",
|
|
"focusRing": "#FFFFFF50",
|
|
"cursor": "#E5E5E5",
|
|
"hover": "#ffffff1f",
|
|
"active": "#ffffff1f"
|
|
},
|
|
"status": {
|
|
"error": "#9e6a6a",
|
|
"errorForeground": "#0a0a0a",
|
|
"errorBackground": "#9e6a6a20",
|
|
"errorBorder": "#9e6a6a50",
|
|
"warning": "#9e8a6a",
|
|
"warningForeground": "#0a0a0a",
|
|
"warningBackground": "#9e8a6a20",
|
|
"warningBorder": "#9e8a6a50",
|
|
"success": "#6a8e6a",
|
|
"successForeground": "#0a0a0a",
|
|
"successBackground": "#6a8e6a20",
|
|
"successBorder": "#6a8e6a50",
|
|
"info": "#6a7e9e",
|
|
"infoForeground": "#0a0a0a",
|
|
"infoBackground": "#6a7e9e20",
|
|
"infoBorder": "#6a7e9e50"
|
|
},
|
|
"syntax": {
|
|
"base": {
|
|
"background": "#0a0a0a",
|
|
"foreground": "#d4d4d4",
|
|
"comment": "#8c8c8c",
|
|
"keyword": "#dccdbeff",
|
|
"string": "#b6d8e6ff",
|
|
"number": "#e3bdadff",
|
|
"function": "#a2bee8",
|
|
"variable": "#d4d4d4",
|
|
"type": "#edcbb8ff",
|
|
"operator": "#dccdbeff"
|
|
},
|
|
"tokens": {
|
|
"commentDoc": "#8c8c8c",
|
|
"stringEscape": "#b6d8e6ff",
|
|
"keywordImport": "#dccdbeff",
|
|
"storageModifier": "#dccdbeff",
|
|
"functionCall": "#a2bee8",
|
|
"method": "#a2bee8",
|
|
"variableProperty": "#c0dcc0ff",
|
|
"variableOther": "#d4d4d4",
|
|
"class": "#edcbb8ff",
|
|
"className": "#edcbb8ff",
|
|
"interface": "#edcbb8ff",
|
|
"tag": "#a2bee8",
|
|
"boolean": "#e3bdadff",
|
|
"url": "#b6d8e6ff",
|
|
"key": "#c0dcc0ff"
|
|
},
|
|
"highlights": {
|
|
"diffAdded": "#6a8e6a",
|
|
"diffAddedBackground": "#6a8e6a20",
|
|
"diffRemoved": "#9e6a6a",
|
|
"diffRemovedBackground": "#9e6a6a20",
|
|
"lineNumber": "#7c7c7c",
|
|
"lineNumberActive": "#d4d4d4"
|
|
}
|
|
},
|
|
"markdown": {
|
|
"heading1": "#FFFFFF",
|
|
"heading2": "#F2F2F2",
|
|
"heading3": "#E5E5E5",
|
|
"heading4": "#D9D9D9",
|
|
"link": "#CCCCCC",
|
|
"linkHover": "#a2bee8",
|
|
"inlineCode": "#a2bee8",
|
|
"inlineCodeBackground": "#1A1A1A",
|
|
"blockquote": "#808080",
|
|
"blockquoteBorder": "#333333",
|
|
"listMarker": "#99999999"
|
|
},
|
|
"chat": {
|
|
"userMessage": "#E5E5E5",
|
|
"userMessageBackground": "#1A1A1A",
|
|
"assistantMessage": "#E5E5E5",
|
|
"assistantMessageBackground": "#000000",
|
|
"timestamp": "#808080",
|
|
"divider": "#333333"
|
|
},
|
|
"tools": {
|
|
"background": "#0A0A0A50",
|
|
"border": "#4040409d",
|
|
"headerHover": "#33333350",
|
|
"icon": "#A6A6A6",
|
|
"title": "#E5E5E5",
|
|
"description": "#808080",
|
|
"edit": {
|
|
"added": "#6a8e6a",
|
|
"addedBackground": "#6a8e6a20",
|
|
"removed": "#9e6a6a",
|
|
"removedBackground": "#9e6a6a20",
|
|
"lineNumber": "#2a2a2a"
|
|
}
|
|
}
|
|
},
|
|
"config": {
|
|
"fonts": {
|
|
"sans": "\"IBM Plex Mono\", monospace",
|
|
"mono": "\"IBM Plex Mono\", monospace",
|
|
"heading": "\"IBM Plex Mono\", monospace"
|
|
},
|
|
"radius": {
|
|
"none": "0",
|
|
"sm": "0.125rem",
|
|
"md": "0.375rem",
|
|
"lg": "0.5rem",
|
|
"xl": "0.75rem",
|
|
"full": "9999px"
|
|
},
|
|
"transitions": {
|
|
"fast": "150ms ease",
|
|
"normal": "250ms ease",
|
|
"slow": "350ms ease"
|
|
}
|
|
}
|
|
}
|