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:
Bohdan Triapitsyn
2026-02-01 18:29:34 +02:00
committed by GitHub
parent 5bb2c56bc0
commit ddedc02687
147 changed files with 9853 additions and 2435 deletions
@@ -0,0 +1,69 @@
import type { Theme } from '@/types/theme';
import aura_dark_Raw from './aura-dark.json';
import aura_light_Raw from './aura-light.json';
import ayu_dark_Raw from './ayu-dark.json';
import ayu_light_Raw from './ayu-light.json';
import carbonfox_dark_Raw from './carbonfox-dark.json';
import carbonfox_light_Raw from './carbonfox-light.json';
import catppuccin_dark_Raw from './catppuccin-dark.json';
import catppuccin_light_Raw from './catppuccin-light.json';
import dracula_dark_Raw from './dracula-dark.json';
import dracula_light_Raw from './dracula-light.json';
import gruvbox_dark_Raw from './gruvbox-dark.json';
import gruvbox_light_Raw from './gruvbox-light.json';
import kanagawa_dark_Raw from './kanagawa-dark.json';
import kanagawa_light_Raw from './kanagawa-light.json';
import monokai_dark_Raw from './monokai-dark.json';
import monokai_light_Raw from './monokai-light.json';
import nightowl_dark_Raw from './nightowl-dark.json';
import nightowl_light_Raw from './nightowl-light.json';
import nord_dark_Raw from './nord-dark.json';
import nord_light_Raw from './nord-light.json';
import onedarkpro_dark_Raw from './onedarkpro-dark.json';
import onedarkpro_light_Raw from './onedarkpro-light.json';
import solarized_dark_Raw from './solarized-dark.json';
import solarized_light_Raw from './solarized-light.json';
import tokyonight_dark_Raw from './tokyonight-dark.json';
import tokyonight_light_Raw from './tokyonight-light.json';
import vesper_dark_Raw from './vesper-dark.json';
import vesper_light_Raw from './vesper-light.json';
import mono_plus_dark_Raw from './mono-plus-dark.json';
import mono_plus_light_Raw from './mono-plus-light.json';
import mono_dark_Raw from './mono-dark.json';
import mono_light_Raw from './mono-light.json';
export const presetThemes: Theme[] = [
aura_dark_Raw as Theme,
aura_light_Raw as Theme,
ayu_dark_Raw as Theme,
ayu_light_Raw as Theme,
carbonfox_dark_Raw as Theme,
carbonfox_light_Raw as Theme,
catppuccin_dark_Raw as Theme,
catppuccin_light_Raw as Theme,
dracula_dark_Raw as Theme,
dracula_light_Raw as Theme,
gruvbox_dark_Raw as Theme,
gruvbox_light_Raw as Theme,
kanagawa_dark_Raw as Theme,
kanagawa_light_Raw as Theme,
monokai_dark_Raw as Theme,
monokai_light_Raw as Theme,
nightowl_dark_Raw as Theme,
nightowl_light_Raw as Theme,
nord_dark_Raw as Theme,
nord_light_Raw as Theme,
onedarkpro_dark_Raw as Theme,
onedarkpro_light_Raw as Theme,
solarized_dark_Raw as Theme,
solarized_light_Raw as Theme,
tokyonight_dark_Raw as Theme,
tokyonight_light_Raw as Theme,
vesper_dark_Raw as Theme,
vesper_light_Raw as Theme,
mono_plus_dark_Raw as Theme,
mono_plus_light_Raw as Theme,
mono_dark_Raw as Theme,
mono_light_Raw as Theme,
];