feat: introduced a token-based theming system across the UI
* 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
This commit is contained in:
committed by
GitHub
parent
5bb2c56bc0
commit
ddedc02687
@@ -0,0 +1,176 @@
|
||||
{
|
||||
"metadata": {
|
||||
"id": "dracula-light",
|
||||
"name": "Dracula",
|
||||
"description": "Dracula",
|
||||
"version": "1.0.0",
|
||||
"variant": "light",
|
||||
"tags": [ "light", "palette" ]
|
||||
},
|
||||
"colors": {
|
||||
"primary": {
|
||||
"base": "#7C6BF5",
|
||||
"hover": "#9587F4",
|
||||
"active": "#6A5CD2",
|
||||
"foreground": "#F8F8F2",
|
||||
"muted": "#7C6BF580",
|
||||
"emphasis": "#9587F4"
|
||||
},
|
||||
"surface": {
|
||||
"background": "#F8F8F2",
|
||||
"foreground": "#1F1F2F",
|
||||
"muted": "#eff1eb",
|
||||
"mutedForeground": "#52526B",
|
||||
"elevated": "#eeeee5",
|
||||
"elevatedForeground": "#1F1F2F",
|
||||
"overlay": "#05040C20",
|
||||
"subtle": "#edeee7"
|
||||
},
|
||||
"interactive": {
|
||||
"border": "#E2E3DA",
|
||||
"borderHover": "#D8D9D0",
|
||||
"borderFocus": "#B0B2A7",
|
||||
"selection": "#c2bcea63",
|
||||
"selectionForeground": "#05040C",
|
||||
"focus": "#7C6BF5",
|
||||
"focusRing": "#7C6BF540",
|
||||
"cursor": "#05040C",
|
||||
"hover": "#c2bcea38",
|
||||
"active": "#c2bcea63"
|
||||
},
|
||||
"status": {
|
||||
"error": "#D9536F",
|
||||
"errorForeground": "#F8F8F2",
|
||||
"errorBackground": "#D9536F20",
|
||||
"errorBorder": "#D9536F50",
|
||||
"warning": "#F7A14D",
|
||||
"warningForeground": "#F8F8F2",
|
||||
"warningBackground": "#F7A14D20",
|
||||
"warningBorder": "#F7A14D50",
|
||||
"success": "#2FBF71",
|
||||
"successForeground": "#F8F8F2",
|
||||
"successBackground": "#2FBF7120",
|
||||
"successBorder": "#2FBF7150",
|
||||
"info": "#1D7FC5",
|
||||
"infoForeground": "#F8F8F2",
|
||||
"infoBackground": "#1D7FC520",
|
||||
"infoBorder": "#1D7FC550"
|
||||
},
|
||||
"syntax": {
|
||||
"base": {
|
||||
"background": "#F1F2ED",
|
||||
"foreground": "#1F1F2F",
|
||||
"comment": "#52526B",
|
||||
"keyword": "#7C6BF5",
|
||||
"string": "#2FBF71",
|
||||
"number": "#D16090",
|
||||
"function": "#7C6BF5",
|
||||
"variable": "#1F1F2F",
|
||||
"type": "#F7A14D",
|
||||
"operator": "#D16090"
|
||||
},
|
||||
"tokens": {
|
||||
"boolean": "#F7A14D",
|
||||
"class": "#7C6BF5",
|
||||
"className": "#7C6BF5",
|
||||
"commentDoc": "#A5A5AF",
|
||||
"constant": "#1D7FC5",
|
||||
"decorator": "#F7A14D",
|
||||
"enum": "#7C6BF5",
|
||||
"exception": "#D16090",
|
||||
"functionCall": "#7C6BF5",
|
||||
"interface": "#F7A14D",
|
||||
"jsxTag": "#7C6BF5",
|
||||
"key": "#7C6BF5",
|
||||
"keywordImport": "#D16090",
|
||||
"label": "#D16090",
|
||||
"macro": "#1D7FC5",
|
||||
"method": "#2FBF71",
|
||||
"module": "#D16090",
|
||||
"namespace": "#F7A14D",
|
||||
"parameter": "#1F1F2F",
|
||||
"preprocessor": "#D16090",
|
||||
"punctuation": "#52526B",
|
||||
"regex": "#2FBF71",
|
||||
"storageModifier": "#1D7FC5",
|
||||
"stringEscape": "#05040C",
|
||||
"struct": "#7C6BF5",
|
||||
"tag": "#7C6BF5",
|
||||
"tagAttribute": "#F7A14D",
|
||||
"tagAttributeValue": "#2FBF71",
|
||||
"typeParameter": "#F7A14D",
|
||||
"url": "#1D7FC5",
|
||||
"variableGlobal": "#7C6BF5",
|
||||
"variableLocal": "#F6F6F1",
|
||||
"variableOther": "#2FBF71",
|
||||
"variableProperty": "#1D7FC5"
|
||||
},
|
||||
"highlights": {
|
||||
"diffAdded": "#2FBF71",
|
||||
"diffAddedBackground": "#E4F5E6",
|
||||
"diffModified": "#1D7FC5",
|
||||
"diffModifiedBackground": "#DEDFE9",
|
||||
"diffRemoved": "#D9536F",
|
||||
"diffRemovedBackground": "#FAE4EB",
|
||||
"lineNumber": "#C4C6BC",
|
||||
"lineNumberActive": "#05040C"
|
||||
}
|
||||
},
|
||||
"markdown": {
|
||||
"heading1": "#1F1F2F",
|
||||
"heading2": "#1F1F2F",
|
||||
"heading3": "#1F1F2F",
|
||||
"heading4": "#1F1F2F",
|
||||
"link": "#1D7FC5",
|
||||
"linkHover": "#7C6BF5",
|
||||
"inlineCode": "#2FBF71",
|
||||
"inlineCodeBackground": "#F1F2ED",
|
||||
"blockquote": "#F7A14D",
|
||||
"blockquoteBorder": "#E2E3DA",
|
||||
"listMarker": "#7C6BF599"
|
||||
},
|
||||
"chat": {
|
||||
"userMessage": "#1F1F2F",
|
||||
"userMessageBackground": "#F1F2ED",
|
||||
"assistantMessage": "#1F1F2F",
|
||||
"assistantMessageBackground": "#F8F8F2",
|
||||
"timestamp": "#52526B",
|
||||
"divider": "#E2E3DA"
|
||||
},
|
||||
"tools": {
|
||||
"background": "#F1F2ED80",
|
||||
"border": "#E2E3DA80",
|
||||
"headerHover": "#F2F2EC",
|
||||
"icon": "#52526B",
|
||||
"title": "#1F1F2F",
|
||||
"description": "#52526B",
|
||||
"edit": {
|
||||
"added": "#2FBF71",
|
||||
"addedBackground": "#2FBF7125",
|
||||
"removed": "#D9536F",
|
||||
"removedBackground": "#D9536F25",
|
||||
"lineNumber": "#C4C6BC"
|
||||
}
|
||||
}
|
||||
},
|
||||
"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"
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user