diff --git a/_docs/config/theme.mdx b/_docs/config/theme.mdx index a546fbb..577a2b0 100644 --- a/_docs/config/theme.mdx +++ b/_docs/config/theme.mdx @@ -14,4 +14,29 @@ Reasons: 2. Keeping only crabcode-owned theme config makes precedence predictable for users. 3. It avoids accidental overrides when existing OpenCode configs are shared across tools. +## Appearance + +Every theme has an `appearance` of either `"dark"` or `"light"`: + +- Declared in theme JSON as `"appearance": "dark"` or `"appearance": "light"`. +- If omitted, Crabcode infers it from the theme's background luminance. +- Searchable in `/themes`: type `light` or `dark` to filter the list. +- Selecting a theme aligns the UI's dark/light color slots to that appearance. + +OpenCode dual-mode themes are imported as two selectable entries: the base ID (dark) and `{id}-light` (light). Example: `github` and `github-light`. Themes whose light Mode is identical to dark (fake dual-mode) only keep the base entry. + +## Background transparency + +By default the main UI paints a **full-screen solid** theme background (OpenCode-style), so light themes like Grok Day look consistent in any terminal. + +In the `/themes` dialog, press **`ctrl+t`** to toggle transparency on/off. When on, the main canvas uses the terminal's own background (`Color::Reset`). Preference is persisted. Panels and dialogs stay solid either way. + +Themes that declared `"background": "transparent"` are solidified when generated/loaded; runtime transparency is only via the toggle. + +## Selecting a theme + +- Use the `/themes` dialog to preview and select a theme. +- The selected theme is persisted in the local preferences database and restored on next launch. +- While the dialog is open, highlighting a theme previews it live; Esc cancels back to the previously active theme. + For theme file format and naming, use the [OpenCode theme docs](https://opencode.ai/docs/themes/). diff --git a/scripts/gen-themes.ts b/scripts/gen-themes.ts index d0bb48b..343d627 100644 --- a/scripts/gen-themes.ts +++ b/scripts/gen-themes.ts @@ -3,7 +3,7 @@ // @ts-nocheck -import { mkdirSync, rmSync, writeFileSync } from 'node:fs' +import { mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs' import { join } from 'node:path' type GitHubFile = { @@ -160,6 +160,205 @@ function injectTextWeak(themeJson: Record) { themeJson.theme = theme } +/** + * Solid backgrounds by default. Upstream themes sometimes set `background` to + * "transparent" or semi-transparent `#rrggbbaa`; replace / strip so the TUI + * paints a real opaque bg. Users can still enable transparency at runtime via + * /themes (ctrl+t). + */ +function solidifyBackground(themeJson: Record) { + if (!themeJson.theme || !themeJson.defs) return + + const theme = themeJson.theme as Record + const defs = themeJson.defs as Record + const bg = theme.background + if (bg === undefined) return + + const isTransparent = (v: unknown) => + typeof v === 'string' && v.trim().toLowerCase() === 'transparent' + + const stripAlpha = (hex: string): string => { + const h = hex.trim() + if (/^#[0-9a-fA-F]{8}$/.test(h)) return h.slice(0, 7) + if (/^#[0-9a-fA-F]{4}$/.test(h)) return `#${h[1]}${h[1]}${h[2]}${h[2]}${h[3]}${h[3]}` + return h + } + + const solidForMode = (mode: ThemeMode): string => { + const panel = getModeValue(theme.backgroundPanel, mode) + const menu = getModeValue(theme.backgroundMenu, mode) + const element = getModeValue(theme.backgroundElement, mode) + for (const ref of [panel, menu, element]) { + if (!ref || isTransparent(ref)) continue + const hex = resolveToHex(defs, theme, ref) + if (hex.startsWith('#')) return stripAlpha(hex) + } + return mode === 'dark' ? '#0d0d0d' : '#fafafa' + } + + const solidifyValue = (v: unknown, mode: ThemeMode): string => { + if (typeof v !== 'string' || isTransparent(v)) return solidForMode(mode) + if (v.startsWith('#')) return stripAlpha(v) + // def ref — resolve, strip alpha, keep as hex so we don't mutate shared defs + const hex = resolveToHex(defs, theme, v) + if (hex.startsWith('#')) return stripAlpha(hex) + return solidForMode(mode) + } + + if (typeof bg === 'string') { + theme.background = { + dark: solidifyValue(bg, 'dark'), + light: solidifyValue(bg, 'light'), + } + return + } + + if (bg && typeof bg === 'object') { + const dual = bg as Record + for (const mode of ['dark', 'light'] as const) { + if (dual[mode] !== undefined) { + dual[mode] = solidifyValue(dual[mode], mode) + } else { + dual[mode] = solidForMode(mode) + } + } + theme.background = dual + } +} + +/** + * Tag each theme as "dark" or "light" based on its primary (dark-mode) background + * luminance. Searchable in /themes. + */ +function injectAppearance(themeJson: Record) { + if (typeof themeJson.appearance === 'string') return + if (!themeJson.theme || !themeJson.defs) { + themeJson.appearance = 'dark' + return + } + + const theme = themeJson.theme as Record + const defs = themeJson.defs as Record + const bgRef = + getModeValue(theme.background, 'dark') ?? + getModeValue(theme.backgroundPanel, 'dark') ?? + getModeValue(theme.backgroundMenu, 'dark') + if (!bgRef || bgRef.toLowerCase() === 'transparent') { + themeJson.appearance = 'dark' + return + } + const hex = resolveToHex(defs, theme, bgRef) + const lum = luminance(hex) + themeJson.appearance = lum !== undefined && lum > 0.5 ? 'light' : 'dark' +} + +/** True when theme.background exposes a distinct light Mode hex. */ +function hasLightMode(themeJson: Record): boolean { + const theme = themeJson.theme + if (!theme || typeof theme !== 'object') return false + const background = (theme as Record).background + return ( + !!background && + typeof background === 'object' && + typeof (background as Record).light === 'string' + ) +} + +/** + * Some OpenCode themes declare `{ dark, light }` Mode objects but use the same + * values for both (e.g. aura, nightowl). Emitting a *-light sibling would be a + * duplicate — skip those. + */ +function hasDistinctLightPalette(themeJson: Record): boolean { + const theme = themeJson.theme + if (!theme || typeof theme !== 'object') return false + + let compared = 0 + for (const value of Object.values(theme as Record)) { + if (!value || typeof value !== 'object') continue + const mode = value as Record + if (typeof mode.dark !== 'string' || typeof mode.light !== 'string') continue + compared++ + if (mode.dark !== mode.light) return true + } + // No Mode slots, or every Mode slot is identical dark===light. + return false +} + +/** + * Dual-mode OpenCode themes keep both palettes. Emit a sibling `{id}-light.json` + * with `appearance: "light"` so `/themes` can filter/select the light palette + * as its own entry (dark sibling stays the default). + * + * Skipped when light Mode is missing or identical to dark (fake dual-mode). + */ +function makeLightSibling( + themeJson: Record, + baseId: string, +): Record | undefined { + if (!hasLightMode(themeJson) || !hasDistinctLightPalette(themeJson)) { + return undefined + } + // Keep dual Mode slots; runtime picks light via appearance → dark_mode=false. + const sibling = structuredClone(themeJson) as Record + sibling.id = `${baseId}-light` + sibling.appearance = 'light' + if (typeof sibling.name === 'string' && sibling.name.length > 0) { + sibling.name = `${sibling.name} Light` + } else { + // Title-case the id for nicer /themes labels (e.g. "Github Light"). + sibling.name = + baseId + .split('-') + .map((part) => part.charAt(0).toUpperCase() + part.slice(1)) + .join(' ') + ' Light' + } + return sibling +} + +function writeBundledThemesList(generatedIds: string[]) { + // Hand-authored themes live in src/themes/; generated ones in src/generated_themes/. + const handAuthored: Array<{ id: string; path: string }> = [ + { id: 'crabcode-orange', path: 'themes/crabcode-orange.json' }, + { id: 'groknight', path: 'themes/groknight.json' }, + { id: 'grokday', path: 'themes/grokday.json' }, + ] + + const formatEntry = (id: string, path: string) => { + if (id.includes('-')) { + return ` (\n "${id}",\n include_str!("${path}"),\n ),` + } + return ` ("${id}", include_str!("${path}")),` + } + + const entries = [ + ...handAuthored.map(({ id, path }) => formatEntry(id, path)), + ...generatedIds.map((id) => formatEntry(id, `generated_themes/${id}.json`)), + ].join('\n') + + const themeRsPath = join(process.cwd(), 'src', 'theme.rs') + const themeRs = readFileSync(themeRsPath, 'utf8') + const start = 'const BUNDLED_THEMES: &[(&str, &str)] = &[' + const end = '];' + const startIdx = themeRs.indexOf(start) + if (startIdx < 0) throw new Error('BUNDLED_THEMES start marker not found in src/theme.rs') + const endIdx = themeRs.indexOf(end, startIdx) + if (endIdx < 0) throw new Error('BUNDLED_THEMES end marker not found in src/theme.rs') + + const next = + themeRs.slice(0, startIdx) + + start + + '\n' + + entries + + '\n' + + end + + themeRs.slice(endIdx + end.length) + writeFileSync(themeRsPath, next) + console.log( + `Updated BUNDLED_THEMES in src/theme.rs (${handAuthored.length + generatedIds.length} themes)`, + ) +} + async function fetchThemes() { const response = await fetch(GITHUB_API_URL) if (!response.ok) { @@ -171,6 +370,8 @@ async function fetchThemes() { rmSync(THEMES_DIR, { recursive: true, force: true }) mkdirSync(THEMES_DIR, { recursive: true }) + const generatedIds: string[] = [] + for (const file of files) { if (!file?.name?.endsWith('.json')) continue if (!file.download_url) continue @@ -185,20 +386,36 @@ async function fetchThemes() { } const themeContent = await themeResponse.text() + const baseId = file.name.replace(/\.json$/, '') const themePath = join(THEMES_DIR, file.name) try { const themeJson = JSON.parse(themeContent) as Record injectTextWeak(themeJson) + solidifyBackground(themeJson) + injectAppearance(themeJson) writeFileSync(themePath, JSON.stringify(themeJson, null, 2) + '\n') + generatedIds.push(baseId) + console.log(`Saved ${file.name}`) + + const lightSibling = makeLightSibling(themeJson, baseId) + if (lightSibling) { + const lightName = `${baseId}-light.json` + writeFileSync(join(THEMES_DIR, lightName), JSON.stringify(lightSibling, null, 2) + '\n') + generatedIds.push(`${baseId}-light`) + console.log(`Saved ${lightName}`) + } } catch { writeFileSync(themePath, themeContent) + generatedIds.push(baseId) + console.log(`Saved ${file.name} (raw)`) } - - console.log(`Saved ${file.name}`) } - console.log(`\nDone! Themes saved to ${THEMES_DIR}`) + generatedIds.sort((a, b) => a.localeCompare(b)) + writeBundledThemesList(generatedIds) + + console.log(`\nDone! Themes saved to ${THEMES_DIR} (${generatedIds.length} generated)`) } fetchThemes().catch((err) => { diff --git a/src/app.rs b/src/app.rs index ca75a2a..a550a86 100644 --- a/src/app.rs +++ b/src/app.rs @@ -5,7 +5,7 @@ use ratatui::{ layout::{Position, Rect}, style::{Modifier, Style}, text::{Line, Span}, - widgets::{Clear, Paragraph}, + widgets::{Block, Clear, Paragraph}, }; use crate::autocomplete::AutoComplete; @@ -824,6 +824,7 @@ pub struct App { pub models_dialog_state: ModelsDialogState, pub themes_dialog_state: ThemesDialogState, themes_dialog_original_theme_index: usize, + themes_dialog_original_dark_mode: bool, themes_dialog_committed: bool, pub connect_dialog_state: ConnectDialogState, connect_dialog_mode: ConnectDialogMode, @@ -883,6 +884,8 @@ pub struct App { pub themes: Vec, pub current_theme_index: usize, pub dark_mode: bool, + /// When true, main UI background is Color::Reset (terminal shows through). + pub theme_transparent: bool, pub sounds: crate::sound::ResolvedSoundsConfig, pub notifications: crate::config::NotificationsConfig, pub images: crate::config::ImagesConfig, @@ -982,7 +985,7 @@ impl App { let suggestions_popup_state = init_suggestions_popup(Popup::new()); let agents_dialog_state = init_agents_dialog("Select agent", vec![]); let models_dialog_state = init_models_dialog("Models", vec![]); - let themes_dialog_state = init_themes_dialog("Themes", vec![]); + let themes_dialog_state = init_themes_dialog("Themes", vec![], false); let connect_dialog_state = init_connect_dialog(); let provider_oauth_flow_state = init_provider_oauth_flow(); let sessions_dialog_state = init_sessions_dialog("Sessions", vec![]); @@ -1171,7 +1174,17 @@ impl App { .or_else(|| themes.first()) .cloned() .unwrap_or_else(theme::Theme::load_builtin_default); - let colors = theme_for_colors.get_colors(true); + let theme_transparent = prefs_dao + .as_ref() + .and_then(|dao| dao.get_theme_transparent().ok()) + .unwrap_or(false); + // Align dark_mode with the selected theme's appearance so light themes + // don't render with dark-mode color slots by default. + let dark_mode = match theme_for_colors.appearance { + theme::ThemeAppearance::Light => false, + theme::ThemeAppearance::Dark => true, + }; + let colors = theme_for_colors.get_colors_with(dark_mode, theme_transparent); let configured_compact_mode = loaded_config.merged_config.tui_compact_mode; let persisted_compact_mode = if configured_compact_mode.is_none() { @@ -1209,6 +1222,7 @@ impl App { models_dialog_state, themes_dialog_state, themes_dialog_original_theme_index: 0, + themes_dialog_original_dark_mode: true, themes_dialog_committed: false, connect_dialog_state, connect_dialog_mode: ConnectDialogMode::ProviderSelection, @@ -1262,7 +1276,8 @@ impl App { last_ctrl_c_time: std::time::Instant::now(), themes, current_theme_index, - dark_mode: true, + dark_mode, + theme_transparent, sounds: resolved_sounds, notifications: loaded_config.merged_config.notifications, images: loaded_config.merged_config.images, @@ -2696,7 +2711,7 @@ impl App { } let theme = &self.themes[self.current_theme_index]; - theme.get_colors(self.dark_mode) + theme.get_colors_with(self.dark_mode, self.theme_transparent) } fn active_workspace_path(&self) -> String { @@ -2844,30 +2859,42 @@ impl App { } fn preview_theme_by_id(&mut self, theme_id: &str) { - if let Some((idx, _)) = self + if let Some((idx, theme)) = self .themes .iter() .enumerate() .find(|(_, theme)| theme.id == theme_id) { self.current_theme_index = idx; + self.dark_mode = matches!(theme.appearance, theme::ThemeAppearance::Dark); } } fn commit_theme_by_id(&mut self, theme_id: &str) -> Option { - let (idx, selected_theme_id) = self + let (idx, selected_theme_id, appearance) = self .themes .iter() .enumerate() .find(|(_, theme)| theme.id == theme_id) - .map(|(idx, theme)| (idx, theme.id.clone()))?; + .map(|(idx, theme)| (idx, theme.id.clone(), theme.appearance))?; self.current_theme_index = idx; + self.dark_mode = matches!(appearance, theme::ThemeAppearance::Dark); self.themes_dialog_committed = true; self.persist_theme_selection(&selected_theme_id); Some(selected_theme_id) } + fn apply_theme_transparent(&mut self, transparent: bool) { + self.theme_transparent = transparent; + self.themes_dialog_state.set_transparent(transparent); + if let Some(ref dao) = self.prefs_dao { + if let Err(e) = dao.set_theme_transparent(transparent) { + eprintln!("Failed to save theme transparency: {}", e); + } + } + } + fn persist_theme_selection(&self, theme_id: &str) { if let Some(ref dao) = self.prefs_dao { if let Err(e) = dao.set_active_theme(theme_id.to_string()) { @@ -3455,12 +3482,16 @@ impl App { )); } } + crate::views::themes_dialog::ThemesDialogAction::ToggleTransparent => { + self.apply_theme_transparent(self.themes_dialog_state.transparent); + } crate::views::themes_dialog::ThemesDialogAction::None => {} } if !self.themes_dialog_state.dialog.is_visible() { if !self.themes_dialog_committed { self.current_theme_index = self.themes_dialog_original_theme_index; + self.dark_mode = self.themes_dialog_original_dark_mode; } self.overlay_focus = OverlayFocus::None; } @@ -4714,12 +4745,16 @@ impl App { )); } } + crate::views::themes_dialog::ThemesDialogAction::ToggleTransparent => { + self.apply_theme_transparent(self.themes_dialog_state.transparent); + } crate::views::themes_dialog::ThemesDialogAction::None => {} } if !self.themes_dialog_state.dialog.is_visible() { if !self.themes_dialog_committed { self.current_theme_index = self.themes_dialog_original_theme_index; + self.dark_mode = self.themes_dialog_original_dark_mode; } self.overlay_focus = OverlayFocus::None; return; @@ -7726,8 +7761,9 @@ impl App { DialogItem { id: t.id.clone(), name: t.id.clone(), - group: String::new(), - description: String::new(), + group: t.appearance.as_str().to_string(), + // Searchable: type "light" or "dark" to filter by appearance. + description: t.appearance.as_str().to_string(), tip: None, provider_id: String::new(), active: is_active, @@ -7737,7 +7773,7 @@ impl App { items.sort_by(|a, b| a.id.cmp(&b.id)); - self.themes_dialog_state = init_themes_dialog("Themes", items); + self.themes_dialog_state = init_themes_dialog("Themes", items, self.theme_transparent); if let Some(theme_id) = current_id.as_deref() { let _ = self @@ -7748,6 +7784,7 @@ impl App { self.themes_dialog_state.dialog.show(); self.themes_dialog_original_theme_index = self.current_theme_index; + self.themes_dialog_original_dark_mode = self.dark_mode; self.themes_dialog_committed = false; self.overlay_focus = OverlayFocus::ThemesDialog; } @@ -10641,6 +10678,15 @@ impl App { self.last_frame_size = size; let colors = self.get_current_theme_colors(); + // Solid canvas when transparency is off. Color::Reset (transparent on) + // leaves the terminal's own background showing through. + if colors.background != ratatui::style::Color::Reset { + f.render_widget( + Block::default().style(Style::default().bg(colors.background)), + size, + ); + } + let fingerprint = ( self.chat_state.chat.messages.len(), self.chat_state.chat.render_revision(), @@ -11332,8 +11378,9 @@ mod tests { suggestions_popup_state: init_suggestions_popup(Popup::new()), agents_dialog_state: init_agents_dialog("Select agent", vec![]), models_dialog_state: init_models_dialog("Models", vec![]), - themes_dialog_state: init_themes_dialog("Themes", vec![]), + themes_dialog_state: init_themes_dialog("Themes", vec![], false), themes_dialog_original_theme_index: 0, + themes_dialog_original_dark_mode: true, themes_dialog_committed: false, connect_dialog_state: init_connect_dialog(), connect_dialog_mode: ConnectDialogMode::ProviderSelection, @@ -11388,6 +11435,7 @@ mod tests { themes: vec![theme], current_theme_index: 0, dark_mode: true, + theme_transparent: false, sounds: crate::sound::ResolvedSoundsConfig::default(), notifications: crate::config::NotificationsConfig::default(), images: crate::config::ImagesConfig::default(), diff --git a/src/generated_themes/aura.json b/src/generated_themes/aura.json index b0f6dfc..6f686f0 100644 --- a/src/generated_themes/aura.json +++ b/src/generated_themes/aura.json @@ -29,7 +29,10 @@ "dark": "darkFgMutedWeak", "light": "darkFgMutedWeak" }, - "background": "darkBg", + "background": { + "dark": "#0f0f0f", + "light": "#0f0f0f" + }, "backgroundPanel": "darkBgPanel", "backgroundElement": "darkBgPanel", "border": "darkBorder", @@ -70,5 +73,6 @@ "syntaxType": "purple", "syntaxOperator": "pink", "syntaxPunctuation": "darkFg" - } + }, + "appearance": "dark" } diff --git a/src/generated_themes/ayu.json b/src/generated_themes/ayu.json index bb12527..87929f7 100644 --- a/src/generated_themes/ayu.json +++ b/src/generated_themes/ayu.json @@ -40,7 +40,10 @@ "dark": "darkFgMutedWeak", "light": "darkFgMutedWeak" }, - "background": "darkBg", + "background": { + "dark": "#0B0E14", + "light": "#0B0E14" + }, "backgroundPanel": "darkPanel", "backgroundElement": "darkBgAlt", "border": "darkGutter", @@ -81,5 +84,6 @@ "syntaxType": "darkSpecial", "syntaxOperator": "darkOperator", "syntaxPunctuation": "darkFg" - } + }, + "appearance": "dark" } diff --git a/src/generated_themes/carbonfox-light.json b/src/generated_themes/carbonfox-light.json new file mode 100644 index 0000000..c44490f --- /dev/null +++ b/src/generated_themes/carbonfox-light.json @@ -0,0 +1,257 @@ +{ + "$schema": "https://opencode.ai/theme.json", + "defs": { + "bg0": "#0d0d0d", + "bg1": "#161616", + "bg1a": "#1a1a1a", + "bg2": "#1e1e1e", + "bg3": "#262626", + "bg4": "#303030", + "fg0": "#ffffff", + "fg1": "#f2f4f8", + "fg2": "#a9afbc", + "fg3": "#7d848f", + "lbg0": "#ffffff", + "lbg1": "#f4f4f4", + "lbg2": "#e8e8e8", + "lbg3": "#dcdcdc", + "lfg0": "#000000", + "lfg1": "#161616", + "lfg2": "#525252", + "lfg3": "#6f6f6f", + "red": "#ee5396", + "green": "#25be6a", + "yellow": "#08bdba", + "blue": "#78a9ff", + "magenta": "#be95ff", + "cyan": "#33b1ff", + "white": "#dfdfe0", + "orange": "#3ddbd9", + "pink": "#ff7eb6", + "blueBright": "#8cb6ff", + "cyanBright": "#52c7ff", + "greenBright": "#46c880", + "redLight": "#9f1853", + "greenLight": "#198038", + "yellowLight": "#007d79", + "blueLight": "#0043ce", + "magentaLight": "#6929c4", + "cyanLight": "#0072c3", + "warning": "#f1c21b", + "diffGreen": "#50fa7b", + "diffRed": "#ff6b6b", + "diffGreenBg": "#0f2418", + "diffRedBg": "#2a1216", + "fg3Weak": "#7d848f", + "lfg3Weak": "#6f6f6f" + }, + "theme": { + "primary": { + "dark": "cyan", + "light": "blueLight" + }, + "secondary": { + "dark": "blue", + "light": "blueLight" + }, + "accent": { + "dark": "pink", + "light": "redLight" + }, + "error": { + "dark": "red", + "light": "redLight" + }, + "warning": { + "dark": "warning", + "light": "yellowLight" + }, + "success": { + "dark": "green", + "light": "greenLight" + }, + "info": { + "dark": "blue", + "light": "blueLight" + }, + "text": { + "dark": "fg1", + "light": "lfg1" + }, + "textMuted": { + "dark": "fg3", + "light": "lfg3" + }, + "textWeak": { + "dark": "fg3Weak", + "light": "lfg3Weak" + }, + "background": { + "dark": "#161616", + "light": "#ffffff" + }, + "backgroundPanel": { + "dark": "bg1a", + "light": "lbg1" + }, + "backgroundElement": { + "dark": "bg2", + "light": "lbg1" + }, + "border": { + "dark": "bg4", + "light": "lbg3" + }, + "borderActive": { + "dark": "cyan", + "light": "blueLight" + }, + "borderSubtle": { + "dark": "bg3", + "light": "lbg2" + }, + "diffAdded": { + "dark": "diffGreen", + "light": "greenLight" + }, + "diffRemoved": { + "dark": "diffRed", + "light": "redLight" + }, + "diffContext": { + "dark": "fg3", + "light": "lfg3" + }, + "diffHunkHeader": { + "dark": "blue", + "light": "blueLight" + }, + "diffHighlightAdded": { + "dark": "#7dffaa", + "light": "greenLight" + }, + "diffHighlightRemoved": { + "dark": "#ff9999", + "light": "redLight" + }, + "diffAddedBg": { + "dark": "diffGreenBg", + "light": "#defbe6" + }, + "diffRemovedBg": { + "dark": "diffRedBg", + "light": "#fff1f1" + }, + "diffContextBg": { + "dark": "bg1", + "light": "lbg1" + }, + "diffLineNumber": { + "dark": "#808792", + "light": "textMuted" + }, + "diffAddedLineNumberBg": { + "dark": "diffGreenBg", + "light": "#defbe6" + }, + "diffRemovedLineNumberBg": { + "dark": "diffRedBg", + "light": "#fff1f1" + }, + "markdownText": { + "dark": "fg1", + "light": "lfg1" + }, + "markdownHeading": { + "dark": "blueBright", + "light": "blueLight" + }, + "markdownLink": { + "dark": "blue", + "light": "blueLight" + }, + "markdownLinkText": { + "dark": "cyan", + "light": "cyanLight" + }, + "markdownCode": { + "dark": "green", + "light": "greenLight" + }, + "markdownBlockQuote": { + "dark": "fg3", + "light": "lfg3" + }, + "markdownEmph": { + "dark": "magenta", + "light": "magentaLight" + }, + "markdownStrong": { + "dark": "fg0", + "light": "lfg0" + }, + "markdownHorizontalRule": { + "dark": "bg4", + "light": "lbg3" + }, + "markdownListItem": { + "dark": "cyan", + "light": "cyanLight" + }, + "markdownListEnumeration": { + "dark": "cyan", + "light": "cyanLight" + }, + "markdownImage": { + "dark": "blue", + "light": "blueLight" + }, + "markdownImageText": { + "dark": "cyan", + "light": "cyanLight" + }, + "markdownCodeBlock": { + "dark": "fg2", + "light": "lfg2" + }, + "syntaxComment": { + "dark": "fg3", + "light": "lfg3" + }, + "syntaxKeyword": { + "dark": "magenta", + "light": "magentaLight" + }, + "syntaxFunction": { + "dark": "blueBright", + "light": "blueLight" + }, + "syntaxVariable": { + "dark": "white", + "light": "lfg1" + }, + "syntaxString": { + "dark": "green", + "light": "greenLight" + }, + "syntaxNumber": { + "dark": "orange", + "light": "yellowLight" + }, + "syntaxType": { + "dark": "yellow", + "light": "yellowLight" + }, + "syntaxOperator": { + "dark": "fg2", + "light": "lfg2" + }, + "syntaxPunctuation": { + "dark": "fg2", + "light": "lfg1" + } + }, + "appearance": "light", + "id": "carbonfox-light", + "name": "Carbonfox Light" +} diff --git a/src/generated_themes/carbonfox.json b/src/generated_themes/carbonfox.json index 8592b88..8ed43ca 100644 --- a/src/generated_themes/carbonfox.json +++ b/src/generated_themes/carbonfox.json @@ -87,8 +87,8 @@ "light": "lfg3Weak" }, "background": { - "dark": "bg1", - "light": "lbg0" + "dark": "#161616", + "light": "#ffffff" }, "backgroundPanel": { "dark": "bg1a", @@ -250,5 +250,6 @@ "dark": "fg2", "light": "lfg1" } - } + }, + "appearance": "dark" } diff --git a/src/generated_themes/catppuccin-frappe.json b/src/generated_themes/catppuccin-frappe.json index 5fd2714..dcc8a3a 100644 --- a/src/generated_themes/catppuccin-frappe.json +++ b/src/generated_themes/catppuccin-frappe.json @@ -71,8 +71,8 @@ "light": "frappeOverlay2Weak" }, "background": { - "dark": "frappeBase", - "light": "frappeBase" + "dark": "#303446", + "light": "#303446" }, "backgroundPanel": { "dark": "frappeMantle", @@ -231,5 +231,6 @@ "dark": "frappeText", "light": "frappeText" } - } + }, + "appearance": "dark" } diff --git a/src/generated_themes/catppuccin-light.json b/src/generated_themes/catppuccin-light.json new file mode 100644 index 0000000..63d2ecb --- /dev/null +++ b/src/generated_themes/catppuccin-light.json @@ -0,0 +1,268 @@ +{ + "$schema": "https://opencode.ai/theme.json", + "defs": { + "lightRosewater": "#dc8a78", + "lightFlamingo": "#dd7878", + "lightPink": "#ea76cb", + "lightMauve": "#8839ef", + "lightRed": "#d20f39", + "lightMaroon": "#e64553", + "lightPeach": "#fe640b", + "lightYellow": "#df8e1d", + "lightGreen": "#40a02b", + "lightTeal": "#179299", + "lightSky": "#04a5e5", + "lightSapphire": "#209fb5", + "lightBlue": "#1e66f5", + "lightLavender": "#7287fd", + "lightText": "#4c4f69", + "lightSubtext1": "#5c5f77", + "lightSubtext0": "#6c6f85", + "lightOverlay2": "#7c7f93", + "lightOverlay1": "#8c8fa1", + "lightOverlay0": "#9ca0b0", + "lightSurface2": "#acb0be", + "lightSurface1": "#bcc0cc", + "lightSurface0": "#ccd0da", + "lightBase": "#eff1f5", + "lightMantle": "#e6e9ef", + "lightCrust": "#dce0e8", + "darkRosewater": "#f5e0dc", + "darkFlamingo": "#f2cdcd", + "darkPink": "#f5c2e7", + "darkMauve": "#cba6f7", + "darkRed": "#f38ba8", + "darkMaroon": "#eba0ac", + "darkPeach": "#fab387", + "darkYellow": "#f9e2af", + "darkGreen": "#a6e3a1", + "darkTeal": "#94e2d5", + "darkSky": "#89dceb", + "darkSapphire": "#74c7ec", + "darkBlue": "#89b4fa", + "darkLavender": "#b4befe", + "darkText": "#cdd6f4", + "darkSubtext1": "#bac2de", + "darkSubtext0": "#a6adc8", + "darkOverlay2": "#9399b2", + "darkOverlay1": "#7f849c", + "darkOverlay0": "#6c7086", + "darkSurface2": "#585b70", + "darkSurface1": "#45475a", + "darkSurface0": "#313244", + "darkBase": "#1e1e2e", + "darkMantle": "#181825", + "darkCrust": "#11111b", + "darkOverlay2Weak": "#9399b2", + "lightOverlay2Weak": "#7c7f93" + }, + "theme": { + "primary": { + "dark": "darkBlue", + "light": "lightBlue" + }, + "secondary": { + "dark": "darkMauve", + "light": "lightMauve" + }, + "accent": { + "dark": "darkPink", + "light": "lightPink" + }, + "error": { + "dark": "darkRed", + "light": "lightRed" + }, + "warning": { + "dark": "darkYellow", + "light": "lightYellow" + }, + "success": { + "dark": "darkGreen", + "light": "lightGreen" + }, + "info": { + "dark": "darkTeal", + "light": "lightTeal" + }, + "text": { + "dark": "darkText", + "light": "lightText" + }, + "textMuted": { + "dark": "darkOverlay2", + "light": "lightOverlay2" + }, + "textWeak": { + "dark": "darkOverlay2Weak", + "light": "lightOverlay2Weak" + }, + "background": { + "dark": "#1e1e2e", + "light": "#eff1f5" + }, + "backgroundPanel": { + "dark": "darkMantle", + "light": "lightMantle" + }, + "backgroundElement": { + "dark": "darkCrust", + "light": "lightCrust" + }, + "border": { + "dark": "darkSurface0", + "light": "lightSurface0" + }, + "borderActive": { + "dark": "darkSurface1", + "light": "lightSurface1" + }, + "borderSubtle": { + "dark": "darkSurface2", + "light": "lightSurface2" + }, + "diffAdded": { + "dark": "darkGreen", + "light": "lightGreen" + }, + "diffRemoved": { + "dark": "darkRed", + "light": "lightRed" + }, + "diffContext": { + "dark": "darkOverlay2", + "light": "lightOverlay2" + }, + "diffHunkHeader": { + "dark": "darkPeach", + "light": "lightPeach" + }, + "diffHighlightAdded": { + "dark": "darkGreen", + "light": "lightGreen" + }, + "diffHighlightRemoved": { + "dark": "darkRed", + "light": "lightRed" + }, + "diffAddedBg": { + "dark": "#24312b", + "light": "#d6f0d9" + }, + "diffRemovedBg": { + "dark": "#3c2a32", + "light": "#f6dfe2" + }, + "diffContextBg": { + "dark": "darkMantle", + "light": "lightMantle" + }, + "diffLineNumber": { + "dark": "textMuted", + "light": "#5b5d63" + }, + "diffAddedLineNumberBg": { + "dark": "#1e2a25", + "light": "#c9e3cb" + }, + "diffRemovedLineNumberBg": { + "dark": "#32232a", + "light": "#e9d3d6" + }, + "markdownText": { + "dark": "darkText", + "light": "lightText" + }, + "markdownHeading": { + "dark": "darkMauve", + "light": "lightMauve" + }, + "markdownLink": { + "dark": "darkBlue", + "light": "lightBlue" + }, + "markdownLinkText": { + "dark": "darkSky", + "light": "lightSky" + }, + "markdownCode": { + "dark": "darkGreen", + "light": "lightGreen" + }, + "markdownBlockQuote": { + "dark": "darkYellow", + "light": "lightYellow" + }, + "markdownEmph": { + "dark": "darkYellow", + "light": "lightYellow" + }, + "markdownStrong": { + "dark": "darkPeach", + "light": "lightPeach" + }, + "markdownHorizontalRule": { + "dark": "darkSubtext0", + "light": "lightSubtext0" + }, + "markdownListItem": { + "dark": "darkBlue", + "light": "lightBlue" + }, + "markdownListEnumeration": { + "dark": "darkSky", + "light": "lightSky" + }, + "markdownImage": { + "dark": "darkBlue", + "light": "lightBlue" + }, + "markdownImageText": { + "dark": "darkSky", + "light": "lightSky" + }, + "markdownCodeBlock": { + "dark": "darkText", + "light": "lightText" + }, + "syntaxComment": { + "dark": "darkOverlay2", + "light": "lightOverlay2" + }, + "syntaxKeyword": { + "dark": "darkMauve", + "light": "lightMauve" + }, + "syntaxFunction": { + "dark": "darkBlue", + "light": "lightBlue" + }, + "syntaxVariable": { + "dark": "darkRed", + "light": "lightRed" + }, + "syntaxString": { + "dark": "darkGreen", + "light": "lightGreen" + }, + "syntaxNumber": { + "dark": "darkPeach", + "light": "lightPeach" + }, + "syntaxType": { + "dark": "darkYellow", + "light": "lightYellow" + }, + "syntaxOperator": { + "dark": "darkSky", + "light": "lightSky" + }, + "syntaxPunctuation": { + "dark": "darkText", + "light": "lightText" + } + }, + "appearance": "light", + "id": "catppuccin-light", + "name": "Catppuccin Light" +} diff --git a/src/generated_themes/catppuccin-macchiato.json b/src/generated_themes/catppuccin-macchiato.json index 524f703..f1c6759 100644 --- a/src/generated_themes/catppuccin-macchiato.json +++ b/src/generated_themes/catppuccin-macchiato.json @@ -71,8 +71,8 @@ "light": "macOverlay2Weak" }, "background": { - "dark": "macBase", - "light": "macBase" + "dark": "#24273a", + "light": "#24273a" }, "backgroundPanel": { "dark": "macMantle", @@ -231,5 +231,6 @@ "dark": "macText", "light": "macText" } - } + }, + "appearance": "dark" } diff --git a/src/generated_themes/catppuccin.json b/src/generated_themes/catppuccin.json index 497c78f..ed0d059 100644 --- a/src/generated_themes/catppuccin.json +++ b/src/generated_themes/catppuccin.json @@ -98,8 +98,8 @@ "light": "lightOverlay2Weak" }, "background": { - "dark": "darkBase", - "light": "lightBase" + "dark": "#1e1e2e", + "light": "#eff1f5" }, "backgroundPanel": { "dark": "darkMantle", @@ -261,5 +261,6 @@ "dark": "darkText", "light": "lightText" } - } + }, + "appearance": "dark" } diff --git a/src/generated_themes/cobalt2-light.json b/src/generated_themes/cobalt2-light.json new file mode 100644 index 0000000..d4e7dc1 --- /dev/null +++ b/src/generated_themes/cobalt2-light.json @@ -0,0 +1,234 @@ +{ + "$schema": "https://opencode.ai/theme.json", + "defs": { + "background": "#193549", + "backgroundAlt": "#122738", + "backgroundPanel": "#1f4662", + "foreground": "#ffffff", + "foregroundMuted": "#adb7c9", + "yellow": "#ffc600", + "yellowBright": "#ffe14c", + "orange": "#ff9d00", + "orangeBright": "#ffb454", + "mint": "#2affdf", + "mintBright": "#7efff5", + "blue": "#0088ff", + "blueBright": "#5cb7ff", + "pink": "#ff628c", + "pinkBright": "#ff86a5", + "green": "#9eff80", + "greenBright": "#b9ff9f", + "purple": "#9a5feb", + "purpleBright": "#b88cfd", + "red": "#ff0088", + "redBright": "#ff5fb3", + "foregroundMutedWeak": "#adb7c9", + "5c6b7dWeak": "#5c6b7d" + }, + "theme": { + "primary": { + "dark": "blue", + "light": "#0066cc" + }, + "secondary": { + "dark": "purple", + "light": "#7c4dff" + }, + "accent": { + "dark": "mint", + "light": "#00acc1" + }, + "error": { + "dark": "red", + "light": "#e91e63" + }, + "warning": { + "dark": "yellow", + "light": "#ff9800" + }, + "success": { + "dark": "green", + "light": "#4caf50" + }, + "info": { + "dark": "orange", + "light": "#ff5722" + }, + "text": { + "dark": "foreground", + "light": "#193549" + }, + "textMuted": { + "dark": "foregroundMuted", + "light": "#5c6b7d" + }, + "textWeak": { + "dark": "foregroundMutedWeak", + "light": "5c6b7dWeak" + }, + "background": { + "dark": "#193549", + "light": "#ffffff" + }, + "backgroundPanel": { + "dark": "#122738", + "light": "#f5f7fa" + }, + "backgroundElement": { + "dark": "#1f4662", + "light": "#e8ecf1" + }, + "border": { + "dark": "#1f4662", + "light": "#d3dae3" + }, + "borderActive": { + "dark": "blue", + "light": "#0066cc" + }, + "borderSubtle": { + "dark": "#0e1e2e", + "light": "#e8ecf1" + }, + "diffAdded": { + "dark": "green", + "light": "#4caf50" + }, + "diffRemoved": { + "dark": "red", + "light": "#e91e63" + }, + "diffContext": { + "dark": "foregroundMuted", + "light": "#5c6b7d" + }, + "diffHunkHeader": { + "dark": "mint", + "light": "#00acc1" + }, + "diffHighlightAdded": { + "dark": "greenBright", + "light": "#4caf50" + }, + "diffHighlightRemoved": { + "dark": "redBright", + "light": "#e91e63" + }, + "diffAddedBg": { + "dark": "#1a3a2a", + "light": "#e8f5e9" + }, + "diffRemovedBg": { + "dark": "#3a1a2a", + "light": "#ffebee" + }, + "diffContextBg": { + "dark": "#122738", + "light": "#f5f7fa" + }, + "diffLineNumber": "textMuted", + "diffAddedLineNumberBg": { + "dark": "#1a3a2a", + "light": "#e8f5e9" + }, + "diffRemovedLineNumberBg": { + "dark": "#3a1a2a", + "light": "#ffebee" + }, + "markdownText": { + "dark": "foreground", + "light": "#193549" + }, + "markdownHeading": { + "dark": "yellow", + "light": "#ff9800" + }, + "markdownLink": { + "dark": "blue", + "light": "#0066cc" + }, + "markdownLinkText": { + "dark": "mint", + "light": "#00acc1" + }, + "markdownCode": { + "dark": "green", + "light": "#4caf50" + }, + "markdownBlockQuote": { + "dark": "foregroundMuted", + "light": "#5c6b7d" + }, + "markdownEmph": { + "dark": "orange", + "light": "#ff5722" + }, + "markdownStrong": { + "dark": "pink", + "light": "#e91e63" + }, + "markdownHorizontalRule": { + "dark": "#2d5a7b", + "light": "#d3dae3" + }, + "markdownListItem": { + "dark": "blue", + "light": "#0066cc" + }, + "markdownListEnumeration": { + "dark": "mint", + "light": "#00acc1" + }, + "markdownImage": { + "dark": "blue", + "light": "#0066cc" + }, + "markdownImageText": { + "dark": "mint", + "light": "#00acc1" + }, + "markdownCodeBlock": { + "dark": "foreground", + "light": "#193549" + }, + "syntaxComment": { + "dark": "#0088ff", + "light": "#5c6b7d" + }, + "syntaxKeyword": { + "dark": "orange", + "light": "#ff5722" + }, + "syntaxFunction": { + "dark": "yellow", + "light": "#ff9800" + }, + "syntaxVariable": { + "dark": "foreground", + "light": "#193549" + }, + "syntaxString": { + "dark": "green", + "light": "#4caf50" + }, + "syntaxNumber": { + "dark": "pink", + "light": "#e91e63" + }, + "syntaxType": { + "dark": "mint", + "light": "#00acc1" + }, + "syntaxOperator": { + "dark": "orange", + "light": "#ff5722" + }, + "syntaxPunctuation": { + "dark": "foreground", + "light": "#193549" + } + }, + "appearance": "light", + "id": "cobalt2-light", + "name": "Cobalt2 Light" +} diff --git a/src/generated_themes/cobalt2.json b/src/generated_themes/cobalt2.json index a5edb7b..e433045 100644 --- a/src/generated_themes/cobalt2.json +++ b/src/generated_themes/cobalt2.json @@ -227,5 +227,6 @@ "dark": "foreground", "light": "#193549" } - } + }, + "appearance": "dark" } diff --git a/src/generated_themes/cursor-light.json b/src/generated_themes/cursor-light.json new file mode 100644 index 0000000..b78134f --- /dev/null +++ b/src/generated_themes/cursor-light.json @@ -0,0 +1,258 @@ +{ + "$schema": "https://opencode.ai/theme.json", + "defs": { + "darkBg": "#181818", + "darkPanel": "#141414", + "darkElement": "#262626", + "darkFg": "#e4e4e4", + "darkMuted": "#e4e4e45e", + "darkBorder": "#e4e4e413", + "darkBorderActive": "#e4e4e426", + "darkCyan": "#88c0d0", + "darkBlue": "#81a1c1", + "darkGreen": "#3fa266", + "darkGreenBright": "#70b489", + "darkRed": "#e34671", + "darkRedBright": "#fc6b83", + "darkYellow": "#f1b467", + "darkOrange": "#d2943e", + "darkPink": "#E394DC", + "darkPurple": "#AAA0FA", + "darkTeal": "#82D2CE", + "darkSyntaxYellow": "#F8C762", + "darkSyntaxOrange": "#EFB080", + "darkSyntaxGreen": "#A8CC7C", + "darkSyntaxBlue": "#87C3FF", + "lightBg": "#fcfcfc", + "lightPanel": "#f3f3f3", + "lightElement": "#ededed", + "lightFg": "#141414", + "lightMuted": "#141414ad", + "lightBorder": "#14141413", + "lightBorderActive": "#14141426", + "lightTeal": "#6f9ba6", + "lightBlue": "#3c7cab", + "lightBlueDark": "#206595", + "lightGreen": "#1f8a65", + "lightGreenBright": "#55a583", + "lightRed": "#cf2d56", + "lightRedBright": "#e75e78", + "lightOrange": "#db704b", + "lightYellow": "#c08532", + "lightPurple": "#9e94d5", + "lightPurpleDark": "#6049b3", + "lightPink": "#b8448b", + "lightMagenta": "#b3003f", + "darkMutedWeak": "#e4e4e45e", + "lightMutedWeak": "#141414ad" + }, + "theme": { + "primary": { + "dark": "darkCyan", + "light": "lightTeal" + }, + "secondary": { + "dark": "darkBlue", + "light": "lightBlue" + }, + "accent": { + "dark": "darkCyan", + "light": "lightTeal" + }, + "error": { + "dark": "darkRed", + "light": "lightRed" + }, + "warning": { + "dark": "darkYellow", + "light": "lightOrange" + }, + "success": { + "dark": "darkGreen", + "light": "lightGreen" + }, + "info": { + "dark": "darkBlue", + "light": "lightBlue" + }, + "text": { + "dark": "darkFg", + "light": "lightFg" + }, + "textMuted": { + "dark": "darkMuted", + "light": "lightMuted" + }, + "textWeak": { + "dark": "darkMutedWeak", + "light": "lightMutedWeak" + }, + "background": { + "dark": "#181818", + "light": "#fcfcfc" + }, + "backgroundPanel": { + "dark": "darkPanel", + "light": "lightPanel" + }, + "backgroundElement": { + "dark": "darkElement", + "light": "lightElement" + }, + "border": { + "dark": "darkBorder", + "light": "lightBorder" + }, + "borderActive": { + "dark": "darkCyan", + "light": "lightTeal" + }, + "borderSubtle": { + "dark": "#0f0f0f", + "light": "#e0e0e0" + }, + "diffAdded": { + "dark": "darkGreen", + "light": "lightGreen" + }, + "diffRemoved": { + "dark": "darkRed", + "light": "lightRed" + }, + "diffContext": { + "dark": "darkMuted", + "light": "lightMuted" + }, + "diffHunkHeader": { + "dark": "darkMuted", + "light": "lightMuted" + }, + "diffHighlightAdded": { + "dark": "darkGreenBright", + "light": "lightGreenBright" + }, + "diffHighlightRemoved": { + "dark": "darkRedBright", + "light": "lightRedBright" + }, + "diffAddedBg": { + "dark": "#3fa26633", + "light": "#1f8a651f" + }, + "diffRemovedBg": { + "dark": "#b8004933", + "light": "#cf2d5614" + }, + "diffContextBg": { + "dark": "darkPanel", + "light": "lightPanel" + }, + "diffLineNumber": { + "dark": "#eeeeee87", + "light": "textMuted" + }, + "diffAddedLineNumberBg": { + "dark": "#3fa26633", + "light": "#1f8a651f" + }, + "diffRemovedLineNumberBg": { + "dark": "#b8004933", + "light": "#cf2d5614" + }, + "markdownText": { + "dark": "darkFg", + "light": "lightFg" + }, + "markdownHeading": { + "dark": "darkPurple", + "light": "lightBlueDark" + }, + "markdownLink": { + "dark": "darkTeal", + "light": "lightBlueDark" + }, + "markdownLinkText": { + "dark": "darkBlue", + "light": "lightMuted" + }, + "markdownCode": { + "dark": "darkPink", + "light": "lightGreen" + }, + "markdownBlockQuote": { + "dark": "darkMuted", + "light": "lightMuted" + }, + "markdownEmph": { + "dark": "darkTeal", + "light": "lightFg" + }, + "markdownStrong": { + "dark": "darkSyntaxYellow", + "light": "lightFg" + }, + "markdownHorizontalRule": { + "dark": "darkMuted", + "light": "lightMuted" + }, + "markdownListItem": { + "dark": "darkFg", + "light": "lightFg" + }, + "markdownListEnumeration": { + "dark": "darkCyan", + "light": "lightMuted" + }, + "markdownImage": { + "dark": "darkCyan", + "light": "lightBlueDark" + }, + "markdownImageText": { + "dark": "darkBlue", + "light": "lightMuted" + }, + "markdownCodeBlock": { + "dark": "darkFg", + "light": "lightFg" + }, + "syntaxComment": { + "dark": "darkMuted", + "light": "lightMuted" + }, + "syntaxKeyword": { + "dark": "darkTeal", + "light": "lightMagenta" + }, + "syntaxFunction": { + "dark": "darkSyntaxOrange", + "light": "lightOrange" + }, + "syntaxVariable": { + "dark": "darkFg", + "light": "lightFg" + }, + "syntaxString": { + "dark": "darkPink", + "light": "lightPurple" + }, + "syntaxNumber": { + "dark": "darkSyntaxYellow", + "light": "lightPink" + }, + "syntaxType": { + "dark": "darkSyntaxOrange", + "light": "lightBlueDark" + }, + "syntaxOperator": { + "dark": "darkFg", + "light": "lightFg" + }, + "syntaxPunctuation": { + "dark": "darkFg", + "light": "lightFg" + } + }, + "appearance": "light", + "id": "cursor-light", + "name": "Cursor Light" +} diff --git a/src/generated_themes/cursor.json b/src/generated_themes/cursor.json index 59895ae..be36c7d 100644 --- a/src/generated_themes/cursor.json +++ b/src/generated_themes/cursor.json @@ -88,8 +88,8 @@ "light": "lightMutedWeak" }, "background": { - "dark": "darkBg", - "light": "lightBg" + "dark": "#181818", + "light": "#fcfcfc" }, "backgroundPanel": { "dark": "darkPanel", @@ -251,5 +251,6 @@ "dark": "darkFg", "light": "lightFg" } - } + }, + "appearance": "dark" } diff --git a/src/generated_themes/dracula-light.json b/src/generated_themes/dracula-light.json new file mode 100644 index 0000000..72661e3 --- /dev/null +++ b/src/generated_themes/dracula-light.json @@ -0,0 +1,228 @@ +{ + "$schema": "https://opencode.ai/theme.json", + "defs": { + "background": "#282a36", + "currentLine": "#44475a", + "selection": "#44475a", + "foreground": "#f8f8f2", + "comment": "#6272a4", + "cyan": "#8be9fd", + "green": "#50fa7b", + "orange": "#ffb86c", + "pink": "#ff79c6", + "purple": "#bd93f9", + "red": "#ff5555", + "yellow": "#f1fa8c", + "commentWeak": "#6272a4", + "6272a4Weak": "#6272a4" + }, + "theme": { + "primary": { + "dark": "purple", + "light": "purple" + }, + "secondary": { + "dark": "pink", + "light": "pink" + }, + "accent": { + "dark": "cyan", + "light": "cyan" + }, + "error": { + "dark": "red", + "light": "red" + }, + "warning": { + "dark": "yellow", + "light": "yellow" + }, + "success": { + "dark": "green", + "light": "green" + }, + "info": { + "dark": "orange", + "light": "orange" + }, + "text": { + "dark": "foreground", + "light": "#282a36" + }, + "textMuted": { + "dark": "comment", + "light": "#6272a4" + }, + "textWeak": { + "dark": "commentWeak", + "light": "6272a4Weak" + }, + "background": { + "dark": "#282a36", + "light": "#f8f8f2" + }, + "backgroundPanel": { + "dark": "#21222c", + "light": "#e8e8e2" + }, + "backgroundElement": { + "dark": "currentLine", + "light": "#d8d8d2" + }, + "border": { + "dark": "currentLine", + "light": "#c8c8c2" + }, + "borderActive": { + "dark": "purple", + "light": "purple" + }, + "borderSubtle": { + "dark": "#191a21", + "light": "#e0e0e0" + }, + "diffAdded": { + "dark": "green", + "light": "green" + }, + "diffRemoved": { + "dark": "red", + "light": "red" + }, + "diffContext": { + "dark": "comment", + "light": "#6272a4" + }, + "diffHunkHeader": { + "dark": "comment", + "light": "#6272a4" + }, + "diffHighlightAdded": { + "dark": "green", + "light": "green" + }, + "diffHighlightRemoved": { + "dark": "red", + "light": "red" + }, + "diffAddedBg": { + "dark": "#1a3a1a", + "light": "#e0ffe0" + }, + "diffRemovedBg": { + "dark": "#3a1a1a", + "light": "#ffe0e0" + }, + "diffContextBg": { + "dark": "#21222c", + "light": "#e8e8e2" + }, + "diffLineNumber": { + "dark": "#989aa4", + "light": "#686865" + }, + "diffAddedLineNumberBg": { + "dark": "#1a3a1a", + "light": "#e0ffe0" + }, + "diffRemovedLineNumberBg": { + "dark": "#3a1a1a", + "light": "#ffe0e0" + }, + "markdownText": { + "dark": "foreground", + "light": "#282a36" + }, + "markdownHeading": { + "dark": "purple", + "light": "purple" + }, + "markdownLink": { + "dark": "cyan", + "light": "cyan" + }, + "markdownLinkText": { + "dark": "pink", + "light": "pink" + }, + "markdownCode": { + "dark": "green", + "light": "green" + }, + "markdownBlockQuote": { + "dark": "comment", + "light": "#6272a4" + }, + "markdownEmph": { + "dark": "yellow", + "light": "yellow" + }, + "markdownStrong": { + "dark": "orange", + "light": "orange" + }, + "markdownHorizontalRule": { + "dark": "comment", + "light": "#6272a4" + }, + "markdownListItem": { + "dark": "purple", + "light": "purple" + }, + "markdownListEnumeration": { + "dark": "cyan", + "light": "cyan" + }, + "markdownImage": { + "dark": "cyan", + "light": "cyan" + }, + "markdownImageText": { + "dark": "pink", + "light": "pink" + }, + "markdownCodeBlock": { + "dark": "foreground", + "light": "#282a36" + }, + "syntaxComment": { + "dark": "comment", + "light": "#6272a4" + }, + "syntaxKeyword": { + "dark": "pink", + "light": "pink" + }, + "syntaxFunction": { + "dark": "green", + "light": "green" + }, + "syntaxVariable": { + "dark": "foreground", + "light": "#282a36" + }, + "syntaxString": { + "dark": "yellow", + "light": "yellow" + }, + "syntaxNumber": { + "dark": "purple", + "light": "purple" + }, + "syntaxType": { + "dark": "cyan", + "light": "cyan" + }, + "syntaxOperator": { + "dark": "pink", + "light": "pink" + }, + "syntaxPunctuation": { + "dark": "foreground", + "light": "#282a36" + } + }, + "appearance": "light", + "id": "dracula-light", + "name": "Dracula Light" +} diff --git a/src/generated_themes/dracula.json b/src/generated_themes/dracula.json index 7c4b33b..102ba79 100644 --- a/src/generated_themes/dracula.json +++ b/src/generated_themes/dracula.json @@ -221,5 +221,6 @@ "dark": "foreground", "light": "#282a36" } - } + }, + "appearance": "dark" } diff --git a/src/generated_themes/everforest-light.json b/src/generated_themes/everforest-light.json new file mode 100644 index 0000000..691524a --- /dev/null +++ b/src/generated_themes/everforest-light.json @@ -0,0 +1,250 @@ +{ + "$schema": "https://opencode.ai/theme.json", + "defs": { + "darkStep1": "#2d353b", + "darkStep2": "#333c43", + "darkStep3": "#343f44", + "darkStep4": "#3d484d", + "darkStep5": "#475258", + "darkStep6": "#7a8478", + "darkStep7": "#859289", + "darkStep8": "#9da9a0", + "darkStep9": "#a7c080", + "darkStep10": "#83c092", + "darkStep11": "#7a8478", + "darkStep12": "#d3c6aa", + "darkRed": "#e67e80", + "darkOrange": "#e69875", + "darkGreen": "#a7c080", + "darkCyan": "#83c092", + "darkYellow": "#dbbc7f", + "lightStep1": "#fdf6e3", + "lightStep2": "#efebd4", + "lightStep3": "#f4f0d9", + "lightStep4": "#efebd4", + "lightStep5": "#e6e2cc", + "lightStep6": "#a6b0a0", + "lightStep7": "#939f91", + "lightStep8": "#829181", + "lightStep9": "#8da101", + "lightStep10": "#35a77c", + "lightStep11": "#a6b0a0", + "lightStep12": "#5c6a72", + "lightRed": "#f85552", + "lightOrange": "#f57d26", + "lightGreen": "#8da101", + "lightCyan": "#35a77c", + "lightYellow": "#dfa000", + "darkStep11Weak": "#7a8478", + "lightStep11Weak": "#a6b0a0" + }, + "theme": { + "primary": { + "dark": "darkStep9", + "light": "lightStep9" + }, + "secondary": { + "dark": "#7fbbb3", + "light": "#3a94c5" + }, + "accent": { + "dark": "#d699b6", + "light": "#df69ba" + }, + "error": { + "dark": "darkRed", + "light": "lightRed" + }, + "warning": { + "dark": "darkOrange", + "light": "lightOrange" + }, + "success": { + "dark": "darkGreen", + "light": "lightGreen" + }, + "info": { + "dark": "darkCyan", + "light": "lightCyan" + }, + "text": { + "dark": "darkStep12", + "light": "lightStep12" + }, + "textMuted": { + "dark": "darkStep11", + "light": "lightStep11" + }, + "textWeak": { + "dark": "darkStep11Weak", + "light": "lightStep11Weak" + }, + "background": { + "dark": "#2d353b", + "light": "#fdf6e3" + }, + "backgroundPanel": { + "dark": "darkStep2", + "light": "lightStep2" + }, + "backgroundElement": { + "dark": "darkStep3", + "light": "lightStep3" + }, + "border": { + "dark": "darkStep7", + "light": "lightStep7" + }, + "borderActive": { + "dark": "darkStep8", + "light": "lightStep8" + }, + "borderSubtle": { + "dark": "darkStep6", + "light": "lightStep6" + }, + "diffAdded": { + "dark": "#4fd6be", + "light": "#1e725c" + }, + "diffRemoved": { + "dark": "#c53b53", + "light": "#c53b53" + }, + "diffContext": { + "dark": "#828bb8", + "light": "#7086b5" + }, + "diffHunkHeader": { + "dark": "#828bb8", + "light": "#7086b5" + }, + "diffHighlightAdded": { + "dark": "#b8db87", + "light": "#4db380" + }, + "diffHighlightRemoved": { + "dark": "#e26a75", + "light": "#f52a65" + }, + "diffAddedBg": { + "dark": "#20303b", + "light": "#d5e5d5" + }, + "diffRemovedBg": { + "dark": "#37222c", + "light": "#f7d8db" + }, + "diffContextBg": { + "dark": "darkStep2", + "light": "lightStep2" + }, + "diffLineNumber": { + "dark": "#a0a5a7", + "light": "#5b5951" + }, + "diffAddedLineNumberBg": { + "dark": "#1b2b34", + "light": "#c5d5c5" + }, + "diffRemovedLineNumberBg": { + "dark": "#2d1f26", + "light": "#e7c8cb" + }, + "markdownText": { + "dark": "darkStep12", + "light": "lightStep12" + }, + "markdownHeading": { + "dark": "#d699b6", + "light": "#df69ba" + }, + "markdownLink": { + "dark": "darkStep9", + "light": "lightStep9" + }, + "markdownLinkText": { + "dark": "darkCyan", + "light": "lightCyan" + }, + "markdownCode": { + "dark": "darkGreen", + "light": "lightGreen" + }, + "markdownBlockQuote": { + "dark": "darkYellow", + "light": "lightYellow" + }, + "markdownEmph": { + "dark": "darkYellow", + "light": "lightYellow" + }, + "markdownStrong": { + "dark": "darkOrange", + "light": "lightOrange" + }, + "markdownHorizontalRule": { + "dark": "darkStep11", + "light": "lightStep11" + }, + "markdownListItem": { + "dark": "darkStep9", + "light": "lightStep9" + }, + "markdownListEnumeration": { + "dark": "darkCyan", + "light": "lightCyan" + }, + "markdownImage": { + "dark": "darkStep9", + "light": "lightStep9" + }, + "markdownImageText": { + "dark": "darkCyan", + "light": "lightCyan" + }, + "markdownCodeBlock": { + "dark": "darkStep12", + "light": "lightStep12" + }, + "syntaxComment": { + "dark": "darkStep11", + "light": "lightStep11" + }, + "syntaxKeyword": { + "dark": "#d699b6", + "light": "#df69ba" + }, + "syntaxFunction": { + "dark": "darkStep9", + "light": "lightStep9" + }, + "syntaxVariable": { + "dark": "darkRed", + "light": "lightRed" + }, + "syntaxString": { + "dark": "darkGreen", + "light": "lightGreen" + }, + "syntaxNumber": { + "dark": "darkOrange", + "light": "lightOrange" + }, + "syntaxType": { + "dark": "darkYellow", + "light": "lightYellow" + }, + "syntaxOperator": { + "dark": "darkCyan", + "light": "lightCyan" + }, + "syntaxPunctuation": { + "dark": "darkStep12", + "light": "lightStep12" + } + }, + "appearance": "light", + "id": "everforest-light", + "name": "Everforest Light" +} diff --git a/src/generated_themes/everforest.json b/src/generated_themes/everforest.json index 5389dc1..e00dcc8 100644 --- a/src/generated_themes/everforest.json +++ b/src/generated_themes/everforest.json @@ -80,8 +80,8 @@ "light": "lightStep11Weak" }, "background": { - "dark": "darkStep1", - "light": "lightStep1" + "dark": "#2d353b", + "light": "#fdf6e3" }, "backgroundPanel": { "dark": "darkStep2", @@ -243,5 +243,6 @@ "dark": "darkStep12", "light": "lightStep12" } - } + }, + "appearance": "dark" } diff --git a/src/generated_themes/flexoki-light.json b/src/generated_themes/flexoki-light.json new file mode 100644 index 0000000..c6fc5a6 --- /dev/null +++ b/src/generated_themes/flexoki-light.json @@ -0,0 +1,245 @@ +{ + "$schema": "https://opencode.ai/theme.json", + "defs": { + "black": "#100F0F", + "base950": "#1C1B1A", + "base900": "#282726", + "base850": "#343331", + "base800": "#403E3C", + "base700": "#575653", + "base600": "#6F6E69", + "base500": "#878580", + "base300": "#B7B5AC", + "base200": "#CECDC3", + "base150": "#DAD8CE", + "base100": "#E6E4D9", + "base50": "#F2F0E5", + "paper": "#FFFCF0", + "red400": "#D14D41", + "red600": "#AF3029", + "orange400": "#DA702C", + "orange600": "#BC5215", + "yellow400": "#D0A215", + "yellow600": "#AD8301", + "green400": "#879A39", + "green600": "#66800B", + "cyan400": "#3AA99F", + "cyan600": "#24837B", + "blue400": "#4385BE", + "blue600": "#205EA6", + "purple400": "#8B7EC8", + "purple600": "#5E409D", + "magenta400": "#CE5D97", + "magenta600": "#A02F6F", + "base600Weak": "#6F6E69" + }, + "theme": { + "primary": { + "dark": "orange400", + "light": "blue600" + }, + "secondary": { + "dark": "blue400", + "light": "purple600" + }, + "accent": { + "dark": "purple400", + "light": "orange600" + }, + "error": { + "dark": "red400", + "light": "red600" + }, + "warning": { + "dark": "orange400", + "light": "orange600" + }, + "success": { + "dark": "green400", + "light": "green600" + }, + "info": { + "dark": "cyan400", + "light": "cyan600" + }, + "text": { + "dark": "base200", + "light": "black" + }, + "textMuted": { + "dark": "base600", + "light": "base600" + }, + "textWeak": { + "dark": "base600Weak", + "light": "base600Weak" + }, + "background": { + "dark": "#100F0F", + "light": "#FFFCF0" + }, + "backgroundPanel": { + "dark": "base950", + "light": "base50" + }, + "backgroundElement": { + "dark": "base900", + "light": "base100" + }, + "border": { + "dark": "base700", + "light": "base300" + }, + "borderActive": { + "dark": "base600", + "light": "base500" + }, + "borderSubtle": { + "dark": "base800", + "light": "base200" + }, + "diffAdded": { + "dark": "green400", + "light": "green600" + }, + "diffRemoved": { + "dark": "red400", + "light": "red600" + }, + "diffContext": { + "dark": "base600", + "light": "base600" + }, + "diffHunkHeader": { + "dark": "blue400", + "light": "blue600" + }, + "diffHighlightAdded": { + "dark": "green400", + "light": "green600" + }, + "diffHighlightRemoved": { + "dark": "red400", + "light": "red600" + }, + "diffAddedBg": { + "dark": "#1A2D1A", + "light": "#D5E5D5" + }, + "diffRemovedBg": { + "dark": "#2D1A1A", + "light": "#F7D8DB" + }, + "diffContextBg": { + "dark": "base950", + "light": "base50" + }, + "diffLineNumber": { + "dark": "#888883", + "light": "#5a5955" + }, + "diffAddedLineNumberBg": { + "dark": "#152515", + "light": "#C5D5C5" + }, + "diffRemovedLineNumberBg": { + "dark": "#251515", + "light": "#E7C8CB" + }, + "markdownText": { + "dark": "base200", + "light": "black" + }, + "markdownHeading": { + "dark": "purple400", + "light": "purple600" + }, + "markdownLink": { + "dark": "blue400", + "light": "blue600" + }, + "markdownLinkText": { + "dark": "cyan400", + "light": "cyan600" + }, + "markdownCode": { + "dark": "cyan400", + "light": "cyan600" + }, + "markdownBlockQuote": { + "dark": "yellow400", + "light": "yellow600" + }, + "markdownEmph": { + "dark": "yellow400", + "light": "yellow600" + }, + "markdownStrong": { + "dark": "orange400", + "light": "orange600" + }, + "markdownHorizontalRule": { + "dark": "base600", + "light": "base600" + }, + "markdownListItem": { + "dark": "orange400", + "light": "orange600" + }, + "markdownListEnumeration": { + "dark": "cyan400", + "light": "cyan600" + }, + "markdownImage": { + "dark": "magenta400", + "light": "magenta600" + }, + "markdownImageText": { + "dark": "cyan400", + "light": "cyan600" + }, + "markdownCodeBlock": { + "dark": "base200", + "light": "black" + }, + "syntaxComment": { + "dark": "base600", + "light": "base600" + }, + "syntaxKeyword": { + "dark": "green400", + "light": "green600" + }, + "syntaxFunction": { + "dark": "orange400", + "light": "orange600" + }, + "syntaxVariable": { + "dark": "blue400", + "light": "blue600" + }, + "syntaxString": { + "dark": "cyan400", + "light": "cyan600" + }, + "syntaxNumber": { + "dark": "purple400", + "light": "purple600" + }, + "syntaxType": { + "dark": "yellow400", + "light": "yellow600" + }, + "syntaxOperator": { + "dark": "base300", + "light": "base600" + }, + "syntaxPunctuation": { + "dark": "base300", + "light": "base600" + } + }, + "appearance": "light", + "id": "flexoki-light", + "name": "Flexoki Light" +} diff --git a/src/generated_themes/flexoki.json b/src/generated_themes/flexoki.json index e42f9f2..8d795cf 100644 --- a/src/generated_themes/flexoki.json +++ b/src/generated_themes/flexoki.json @@ -75,8 +75,8 @@ "light": "base600Weak" }, "background": { - "dark": "black", - "light": "paper" + "dark": "#100F0F", + "light": "#FFFCF0" }, "backgroundPanel": { "dark": "base950", @@ -238,5 +238,6 @@ "dark": "base300", "light": "base600" } - } + }, + "appearance": "dark" } diff --git a/src/generated_themes/github-light.json b/src/generated_themes/github-light.json new file mode 100644 index 0000000..87eed06 --- /dev/null +++ b/src/generated_themes/github-light.json @@ -0,0 +1,242 @@ +{ + "$schema": "https://opencode.ai/theme.json", + "defs": { + "darkBg": "#0d1117", + "darkBgAlt": "#010409", + "darkBgPanel": "#161b22", + "darkFg": "#c9d1d9", + "darkFgMuted": "#8b949e", + "darkBlue": "#58a6ff", + "darkGreen": "#3fb950", + "darkRed": "#f85149", + "darkOrange": "#d29922", + "darkPurple": "#bc8cff", + "darkPink": "#ff7b72", + "darkYellow": "#e3b341", + "darkCyan": "#39c5cf", + "lightBg": "#ffffff", + "lightBgAlt": "#f6f8fa", + "lightBgPanel": "#f0f3f6", + "lightFg": "#24292f", + "lightFgMuted": "#57606a", + "lightBlue": "#0969da", + "lightGreen": "#1a7f37", + "lightRed": "#cf222e", + "lightOrange": "#bc4c00", + "lightPurple": "#8250df", + "lightPink": "#bf3989", + "lightYellow": "#9a6700", + "lightCyan": "#1b7c83", + "darkFgMutedWeak": "#8b949e", + "lightFgMutedWeak": "#57606a" + }, + "theme": { + "primary": { + "dark": "darkBlue", + "light": "lightBlue" + }, + "secondary": { + "dark": "darkPurple", + "light": "lightPurple" + }, + "accent": { + "dark": "darkCyan", + "light": "lightCyan" + }, + "error": { + "dark": "darkRed", + "light": "lightRed" + }, + "warning": { + "dark": "darkYellow", + "light": "lightYellow" + }, + "success": { + "dark": "darkGreen", + "light": "lightGreen" + }, + "info": { + "dark": "darkOrange", + "light": "lightOrange" + }, + "text": { + "dark": "darkFg", + "light": "lightFg" + }, + "textMuted": { + "dark": "darkFgMuted", + "light": "lightFgMuted" + }, + "textWeak": { + "dark": "darkFgMutedWeak", + "light": "lightFgMutedWeak" + }, + "background": { + "dark": "#0d1117", + "light": "#ffffff" + }, + "backgroundPanel": { + "dark": "darkBgAlt", + "light": "lightBgAlt" + }, + "backgroundElement": { + "dark": "darkBgPanel", + "light": "lightBgPanel" + }, + "border": { + "dark": "#30363d", + "light": "#d0d7de" + }, + "borderActive": { + "dark": "darkBlue", + "light": "lightBlue" + }, + "borderSubtle": { + "dark": "#21262d", + "light": "#d8dee4" + }, + "diffAdded": { + "dark": "darkGreen", + "light": "lightGreen" + }, + "diffRemoved": { + "dark": "darkRed", + "light": "lightRed" + }, + "diffContext": { + "dark": "darkFgMuted", + "light": "lightFgMuted" + }, + "diffHunkHeader": { + "dark": "darkBlue", + "light": "lightBlue" + }, + "diffHighlightAdded": { + "dark": "#3fb950", + "light": "#1a7f37" + }, + "diffHighlightRemoved": { + "dark": "#f85149", + "light": "#cf222e" + }, + "diffAddedBg": { + "dark": "#033a16", + "light": "#dafbe1" + }, + "diffRemovedBg": { + "dark": "#67060c", + "light": "#ffebe9" + }, + "diffContextBg": { + "dark": "darkBgAlt", + "light": "lightBgAlt" + }, + "diffLineNumber": { + "dark": "#95999e", + "light": "textMuted" + }, + "diffAddedLineNumberBg": { + "dark": "#033a16", + "light": "#dafbe1" + }, + "diffRemovedLineNumberBg": { + "dark": "#67060c", + "light": "#ffebe9" + }, + "markdownText": { + "dark": "darkFg", + "light": "lightFg" + }, + "markdownHeading": { + "dark": "darkBlue", + "light": "lightBlue" + }, + "markdownLink": { + "dark": "darkBlue", + "light": "lightBlue" + }, + "markdownLinkText": { + "dark": "darkCyan", + "light": "lightCyan" + }, + "markdownCode": { + "dark": "darkPink", + "light": "lightPink" + }, + "markdownBlockQuote": { + "dark": "darkFgMuted", + "light": "lightFgMuted" + }, + "markdownEmph": { + "dark": "darkYellow", + "light": "lightYellow" + }, + "markdownStrong": { + "dark": "darkOrange", + "light": "lightOrange" + }, + "markdownHorizontalRule": { + "dark": "#30363d", + "light": "#d0d7de" + }, + "markdownListItem": { + "dark": "darkBlue", + "light": "lightBlue" + }, + "markdownListEnumeration": { + "dark": "darkCyan", + "light": "lightCyan" + }, + "markdownImage": { + "dark": "darkBlue", + "light": "lightBlue" + }, + "markdownImageText": { + "dark": "darkCyan", + "light": "lightCyan" + }, + "markdownCodeBlock": { + "dark": "darkFg", + "light": "lightFg" + }, + "syntaxComment": { + "dark": "darkFgMuted", + "light": "lightFgMuted" + }, + "syntaxKeyword": { + "dark": "darkPink", + "light": "lightRed" + }, + "syntaxFunction": { + "dark": "darkPurple", + "light": "lightPurple" + }, + "syntaxVariable": { + "dark": "darkOrange", + "light": "lightOrange" + }, + "syntaxString": { + "dark": "darkCyan", + "light": "lightBlue" + }, + "syntaxNumber": { + "dark": "darkBlue", + "light": "lightCyan" + }, + "syntaxType": { + "dark": "darkOrange", + "light": "lightOrange" + }, + "syntaxOperator": { + "dark": "darkPink", + "light": "lightRed" + }, + "syntaxPunctuation": { + "dark": "darkFg", + "light": "lightFg" + } + }, + "appearance": "light", + "id": "github-light", + "name": "Github Light" +} diff --git a/src/generated_themes/github.json b/src/generated_themes/github.json index 38505f1..8afe86f 100644 --- a/src/generated_themes/github.json +++ b/src/generated_themes/github.json @@ -72,8 +72,8 @@ "light": "lightFgMutedWeak" }, "background": { - "dark": "darkBg", - "light": "lightBg" + "dark": "#0d1117", + "light": "#ffffff" }, "backgroundPanel": { "dark": "darkBgAlt", @@ -235,5 +235,6 @@ "dark": "darkFg", "light": "lightFg" } - } + }, + "appearance": "dark" } diff --git a/src/generated_themes/gruvbox-light.json b/src/generated_themes/gruvbox-light.json new file mode 100644 index 0000000..7b5501d --- /dev/null +++ b/src/generated_themes/gruvbox-light.json @@ -0,0 +1,251 @@ +{ + "$schema": "https://opencode.ai/theme.json", + "defs": { + "darkBg0": "#282828", + "darkBg1": "#3c3836", + "darkBg2": "#504945", + "darkBg3": "#665c54", + "darkFg0": "#fbf1c7", + "darkFg1": "#ebdbb2", + "darkGray": "#928374", + "darkRed": "#cc241d", + "darkGreen": "#98971a", + "darkYellow": "#d79921", + "darkBlue": "#458588", + "darkPurple": "#b16286", + "darkAqua": "#689d6a", + "darkOrange": "#d65d0e", + "darkRedBright": "#fb4934", + "darkGreenBright": "#b8bb26", + "darkYellowBright": "#fabd2f", + "darkBlueBright": "#83a598", + "darkPurpleBright": "#d3869b", + "darkAquaBright": "#8ec07c", + "darkOrangeBright": "#fe8019", + "lightBg0": "#fbf1c7", + "lightBg1": "#ebdbb2", + "lightBg2": "#d5c4a1", + "lightBg3": "#bdae93", + "lightFg0": "#282828", + "lightFg1": "#3c3836", + "lightGray": "#7c6f64", + "lightRed": "#9d0006", + "lightGreen": "#79740e", + "lightYellow": "#b57614", + "lightBlue": "#076678", + "lightPurple": "#8f3f71", + "lightAqua": "#427b58", + "lightOrange": "#af3a03", + "darkGrayWeak": "#928374", + "lightGrayWeak": "#7c6f64" + }, + "theme": { + "primary": { + "dark": "darkBlueBright", + "light": "lightBlue" + }, + "secondary": { + "dark": "darkPurpleBright", + "light": "lightPurple" + }, + "accent": { + "dark": "darkAquaBright", + "light": "lightAqua" + }, + "error": { + "dark": "darkRedBright", + "light": "lightRed" + }, + "warning": { + "dark": "darkOrangeBright", + "light": "lightOrange" + }, + "success": { + "dark": "darkGreenBright", + "light": "lightGreen" + }, + "info": { + "dark": "darkYellowBright", + "light": "lightYellow" + }, + "text": { + "dark": "darkFg1", + "light": "lightFg1" + }, + "textMuted": { + "dark": "darkGray", + "light": "lightGray" + }, + "textWeak": { + "dark": "darkGrayWeak", + "light": "lightGrayWeak" + }, + "background": { + "dark": "#282828", + "light": "#fbf1c7" + }, + "backgroundPanel": { + "dark": "darkBg1", + "light": "lightBg1" + }, + "backgroundElement": { + "dark": "darkBg2", + "light": "lightBg2" + }, + "border": { + "dark": "darkBg3", + "light": "lightBg3" + }, + "borderActive": { + "dark": "darkFg1", + "light": "lightFg1" + }, + "borderSubtle": { + "dark": "darkBg2", + "light": "lightBg2" + }, + "diffAdded": { + "dark": "darkGreen", + "light": "lightGreen" + }, + "diffRemoved": { + "dark": "darkRed", + "light": "lightRed" + }, + "diffContext": { + "dark": "darkGray", + "light": "lightGray" + }, + "diffHunkHeader": { + "dark": "darkAqua", + "light": "lightAqua" + }, + "diffHighlightAdded": { + "dark": "darkGreenBright", + "light": "lightGreen" + }, + "diffHighlightRemoved": { + "dark": "darkRedBright", + "light": "lightRed" + }, + "diffAddedBg": { + "dark": "#32302f", + "light": "#dcd8a4" + }, + "diffRemovedBg": { + "dark": "#322929", + "light": "#e2c7c3" + }, + "diffContextBg": { + "dark": "darkBg1", + "light": "lightBg1" + }, + "diffLineNumber": { + "dark": "#a8a29e", + "light": "#564f43" + }, + "diffAddedLineNumberBg": { + "dark": "#2a2827", + "light": "#cec99e" + }, + "diffRemovedLineNumberBg": { + "dark": "#2a2222", + "light": "#d3bdb9" + }, + "markdownText": { + "dark": "darkFg1", + "light": "lightFg1" + }, + "markdownHeading": { + "dark": "darkBlueBright", + "light": "lightBlue" + }, + "markdownLink": { + "dark": "darkAquaBright", + "light": "lightAqua" + }, + "markdownLinkText": { + "dark": "darkGreenBright", + "light": "lightGreen" + }, + "markdownCode": { + "dark": "darkYellowBright", + "light": "lightYellow" + }, + "markdownBlockQuote": { + "dark": "darkGray", + "light": "lightGray" + }, + "markdownEmph": { + "dark": "darkPurpleBright", + "light": "lightPurple" + }, + "markdownStrong": { + "dark": "darkOrangeBright", + "light": "lightOrange" + }, + "markdownHorizontalRule": { + "dark": "darkGray", + "light": "lightGray" + }, + "markdownListItem": { + "dark": "darkBlueBright", + "light": "lightBlue" + }, + "markdownListEnumeration": { + "dark": "darkAquaBright", + "light": "lightAqua" + }, + "markdownImage": { + "dark": "darkAquaBright", + "light": "lightAqua" + }, + "markdownImageText": { + "dark": "darkGreenBright", + "light": "lightGreen" + }, + "markdownCodeBlock": { + "dark": "darkFg1", + "light": "lightFg1" + }, + "syntaxComment": { + "dark": "darkGray", + "light": "lightGray" + }, + "syntaxKeyword": { + "dark": "darkRedBright", + "light": "lightRed" + }, + "syntaxFunction": { + "dark": "darkGreenBright", + "light": "lightGreen" + }, + "syntaxVariable": { + "dark": "darkBlueBright", + "light": "lightBlue" + }, + "syntaxString": { + "dark": "darkYellowBright", + "light": "lightYellow" + }, + "syntaxNumber": { + "dark": "darkPurpleBright", + "light": "lightPurple" + }, + "syntaxType": { + "dark": "darkAquaBright", + "light": "lightAqua" + }, + "syntaxOperator": { + "dark": "darkOrangeBright", + "light": "lightOrange" + }, + "syntaxPunctuation": { + "dark": "darkFg1", + "light": "lightFg1" + } + }, + "appearance": "light", + "id": "gruvbox-light", + "name": "Gruvbox Light" +} diff --git a/src/generated_themes/gruvbox.json b/src/generated_themes/gruvbox.json index 63c0124..b949801 100644 --- a/src/generated_themes/gruvbox.json +++ b/src/generated_themes/gruvbox.json @@ -81,8 +81,8 @@ "light": "lightGrayWeak" }, "background": { - "dark": "darkBg0", - "light": "lightBg0" + "dark": "#282828", + "light": "#fbf1c7" }, "backgroundPanel": { "dark": "darkBg1", @@ -244,5 +244,6 @@ "dark": "darkFg1", "light": "lightFg1" } - } + }, + "appearance": "dark" } diff --git a/src/generated_themes/kanagawa-light.json b/src/generated_themes/kanagawa-light.json new file mode 100644 index 0000000..b897d9d --- /dev/null +++ b/src/generated_themes/kanagawa-light.json @@ -0,0 +1,236 @@ +{ + "$schema": "https://opencode.ai/theme.json", + "defs": { + "sumiInk0": "#1F1F28", + "sumiInk1": "#2A2A37", + "sumiInk2": "#363646", + "sumiInk3": "#54546D", + "fujiWhite": "#DCD7BA", + "oldWhite": "#C8C093", + "fujiGray": "#727169", + "oniViolet": "#957FB8", + "crystalBlue": "#7E9CD8", + "carpYellow": "#C38D9D", + "sakuraPink": "#D27E99", + "waveAqua": "#76946A", + "roninYellow": "#D7A657", + "dragonRed": "#E82424", + "lotusGreen": "#98BB6C", + "waveBlue": "#2D4F67", + "lightBg": "#F2E9DE", + "lightPaper": "#EAE4D7", + "lightText": "#54433A", + "lightGray": "#9E9389", + "fujiGrayWeak": "#727169", + "lightGrayWeak": "#9E9389" + }, + "theme": { + "primary": { + "dark": "crystalBlue", + "light": "waveBlue" + }, + "secondary": { + "dark": "oniViolet", + "light": "oniViolet" + }, + "accent": { + "dark": "sakuraPink", + "light": "sakuraPink" + }, + "error": { + "dark": "dragonRed", + "light": "dragonRed" + }, + "warning": { + "dark": "roninYellow", + "light": "roninYellow" + }, + "success": { + "dark": "lotusGreen", + "light": "lotusGreen" + }, + "info": { + "dark": "waveAqua", + "light": "waveAqua" + }, + "text": { + "dark": "fujiWhite", + "light": "lightText" + }, + "textMuted": { + "dark": "fujiGray", + "light": "lightGray" + }, + "textWeak": { + "dark": "fujiGrayWeak", + "light": "lightGrayWeak" + }, + "background": { + "dark": "#1F1F28", + "light": "#F2E9DE" + }, + "backgroundPanel": { + "dark": "sumiInk1", + "light": "lightPaper" + }, + "backgroundElement": { + "dark": "sumiInk2", + "light": "#E3DCD2" + }, + "border": { + "dark": "sumiInk3", + "light": "#D4CBBF" + }, + "borderActive": { + "dark": "carpYellow", + "light": "carpYellow" + }, + "borderSubtle": { + "dark": "sumiInk2", + "light": "#DCD4C9" + }, + "diffAdded": { + "dark": "lotusGreen", + "light": "lotusGreen" + }, + "diffRemoved": { + "dark": "dragonRed", + "light": "dragonRed" + }, + "diffContext": { + "dark": "fujiGray", + "light": "lightGray" + }, + "diffHunkHeader": { + "dark": "waveBlue", + "light": "waveBlue" + }, + "diffHighlightAdded": { + "dark": "#A9D977", + "light": "#89AF5B" + }, + "diffHighlightRemoved": { + "dark": "#F24A4A", + "light": "#D61F1F" + }, + "diffAddedBg": { + "dark": "#252E25", + "light": "#EAF3E4" + }, + "diffRemovedBg": { + "dark": "#362020", + "light": "#FBE6E6" + }, + "diffContextBg": { + "dark": "sumiInk1", + "light": "lightPaper" + }, + "diffLineNumber": { + "dark": "#9090a0", + "light": "#65615c" + }, + "diffAddedLineNumberBg": { + "dark": "#202820", + "light": "#DDE8D6" + }, + "diffRemovedLineNumberBg": { + "dark": "#2D1C1C", + "light": "#F2DADA" + }, + "markdownText": { + "dark": "fujiWhite", + "light": "lightText" + }, + "markdownHeading": { + "dark": "oniViolet", + "light": "oniViolet" + }, + "markdownLink": { + "dark": "crystalBlue", + "light": "waveBlue" + }, + "markdownLinkText": { + "dark": "waveAqua", + "light": "waveAqua" + }, + "markdownCode": { + "dark": "lotusGreen", + "light": "lotusGreen" + }, + "markdownBlockQuote": { + "dark": "fujiGray", + "light": "lightGray" + }, + "markdownEmph": { + "dark": "carpYellow", + "light": "carpYellow" + }, + "markdownStrong": { + "dark": "roninYellow", + "light": "roninYellow" + }, + "markdownHorizontalRule": { + "dark": "fujiGray", + "light": "lightGray" + }, + "markdownListItem": { + "dark": "crystalBlue", + "light": "waveBlue" + }, + "markdownListEnumeration": { + "dark": "waveAqua", + "light": "waveAqua" + }, + "markdownImage": { + "dark": "crystalBlue", + "light": "waveBlue" + }, + "markdownImageText": { + "dark": "waveAqua", + "light": "waveAqua" + }, + "markdownCodeBlock": { + "dark": "fujiWhite", + "light": "lightText" + }, + "syntaxComment": { + "dark": "fujiGray", + "light": "lightGray" + }, + "syntaxKeyword": { + "dark": "oniViolet", + "light": "oniViolet" + }, + "syntaxFunction": { + "dark": "crystalBlue", + "light": "waveBlue" + }, + "syntaxVariable": { + "dark": "fujiWhite", + "light": "lightText" + }, + "syntaxString": { + "dark": "lotusGreen", + "light": "lotusGreen" + }, + "syntaxNumber": { + "dark": "roninYellow", + "light": "roninYellow" + }, + "syntaxType": { + "dark": "carpYellow", + "light": "carpYellow" + }, + "syntaxOperator": { + "dark": "sakuraPink", + "light": "sakuraPink" + }, + "syntaxPunctuation": { + "dark": "fujiWhite", + "light": "lightText" + } + }, + "appearance": "light", + "id": "kanagawa-light", + "name": "Kanagawa Light" +} diff --git a/src/generated_themes/kanagawa.json b/src/generated_themes/kanagawa.json index 40b1bae..cd479cf 100644 --- a/src/generated_themes/kanagawa.json +++ b/src/generated_themes/kanagawa.json @@ -66,8 +66,8 @@ "light": "lightGrayWeak" }, "background": { - "dark": "sumiInk0", - "light": "lightBg" + "dark": "#1F1F28", + "light": "#F2E9DE" }, "backgroundPanel": { "dark": "sumiInk1", @@ -229,5 +229,6 @@ "dark": "fujiWhite", "light": "lightText" } - } + }, + "appearance": "dark" } diff --git a/src/generated_themes/lucent-orng-light.json b/src/generated_themes/lucent-orng-light.json new file mode 100644 index 0000000..afa178a --- /dev/null +++ b/src/generated_themes/lucent-orng-light.json @@ -0,0 +1,237 @@ +{ + "$schema": "https://opencode.ai/theme.json", + "defs": { + "darkStep6": "#3c3c3c", + "darkStep11": "#808080", + "darkStep12": "#eeeeee", + "darkSecondary": "#EE7948", + "darkAccent": "#FFF7F1", + "darkRed": "#e06c75", + "darkOrange": "#EC5B2B", + "darkBlue": "#6ba1e6", + "darkCyan": "#56b6c2", + "darkYellow": "#e5c07b", + "darkPanelBg": "#2a1a1599", + "lightStep6": "#d4d4d4", + "lightStep11": "#8a8a8a", + "lightStep12": "#1a1a1a", + "lightSecondary": "#EE7948", + "lightAccent": "#c94d24", + "lightRed": "#d1383d", + "lightOrange": "#EC5B2B", + "lightBlue": "#0062d1", + "lightCyan": "#318795", + "lightYellow": "#b0851f", + "lightPanelBg": "#fff5f099" + }, + "theme": { + "primary": { + "dark": "darkOrange", + "light": "lightOrange" + }, + "secondary": { + "dark": "darkSecondary", + "light": "lightSecondary" + }, + "accent": { + "dark": "darkAccent", + "light": "lightAccent" + }, + "error": { + "dark": "darkRed", + "light": "lightRed" + }, + "warning": { + "dark": "darkOrange", + "light": "lightOrange" + }, + "success": { + "dark": "darkBlue", + "light": "lightBlue" + }, + "info": { + "dark": "darkCyan", + "light": "lightCyan" + }, + "text": { + "dark": "darkStep12", + "light": "lightStep12" + }, + "textMuted": { + "dark": "darkStep11", + "light": "lightStep11" + }, + "selectedListItemText": { + "dark": "#0a0a0a", + "light": "#ffffff" + }, + "background": { + "dark": "#2a1a15", + "light": "#fff5f0" + }, + "backgroundPanel": { + "dark": "transparent", + "light": "transparent" + }, + "backgroundElement": { + "dark": "transparent", + "light": "transparent" + }, + "backgroundMenu": { + "dark": "darkPanelBg", + "light": "lightPanelBg" + }, + "border": { + "dark": "darkOrange", + "light": "lightOrange" + }, + "borderActive": { + "dark": "darkSecondary", + "light": "lightAccent" + }, + "borderSubtle": { + "dark": "darkStep6", + "light": "lightStep6" + }, + "diffAdded": { + "dark": "darkBlue", + "light": "lightBlue" + }, + "diffRemoved": { + "dark": "#c53b53", + "light": "#c53b53" + }, + "diffContext": { + "dark": "#828bb8", + "light": "#7086b5" + }, + "diffHunkHeader": { + "dark": "#828bb8", + "light": "#7086b5" + }, + "diffHighlightAdded": { + "dark": "darkBlue", + "light": "lightBlue" + }, + "diffHighlightRemoved": { + "dark": "#e26a75", + "light": "#f52a65" + }, + "diffAddedBg": { + "dark": "transparent", + "light": "transparent" + }, + "diffRemovedBg": { + "dark": "transparent", + "light": "transparent" + }, + "diffContextBg": { + "dark": "transparent", + "light": "transparent" + }, + "diffLineNumber": "textMuted", + "diffAddedLineNumberBg": { + "dark": "transparent", + "light": "transparent" + }, + "diffRemovedLineNumberBg": { + "dark": "transparent", + "light": "transparent" + }, + "markdownText": { + "dark": "darkStep12", + "light": "lightStep12" + }, + "markdownHeading": { + "dark": "darkOrange", + "light": "lightOrange" + }, + "markdownLink": { + "dark": "darkOrange", + "light": "lightOrange" + }, + "markdownLinkText": { + "dark": "darkCyan", + "light": "lightCyan" + }, + "markdownCode": { + "dark": "darkBlue", + "light": "lightBlue" + }, + "markdownBlockQuote": { + "dark": "darkAccent", + "light": "lightYellow" + }, + "markdownEmph": { + "dark": "darkYellow", + "light": "lightYellow" + }, + "markdownStrong": { + "dark": "darkSecondary", + "light": "lightOrange" + }, + "markdownHorizontalRule": { + "dark": "darkStep11", + "light": "lightStep11" + }, + "markdownListItem": { + "dark": "darkOrange", + "light": "lightOrange" + }, + "markdownListEnumeration": { + "dark": "darkCyan", + "light": "lightCyan" + }, + "markdownImage": { + "dark": "darkOrange", + "light": "lightOrange" + }, + "markdownImageText": { + "dark": "darkCyan", + "light": "lightCyan" + }, + "markdownCodeBlock": { + "dark": "darkStep12", + "light": "lightStep12" + }, + "syntaxComment": { + "dark": "darkStep11", + "light": "lightStep11" + }, + "syntaxKeyword": { + "dark": "darkOrange", + "light": "lightOrange" + }, + "syntaxFunction": { + "dark": "darkSecondary", + "light": "lightAccent" + }, + "syntaxVariable": { + "dark": "darkRed", + "light": "lightRed" + }, + "syntaxString": { + "dark": "darkBlue", + "light": "lightBlue" + }, + "syntaxNumber": { + "dark": "darkAccent", + "light": "lightOrange" + }, + "syntaxType": { + "dark": "darkYellow", + "light": "lightYellow" + }, + "syntaxOperator": { + "dark": "darkCyan", + "light": "lightCyan" + }, + "syntaxPunctuation": { + "dark": "darkStep12", + "light": "lightStep12" + } + }, + "appearance": "light", + "id": "lucent-orng-light", + "name": "Lucent Orng Light" +} diff --git a/src/generated_themes/lucent-orng.json b/src/generated_themes/lucent-orng.json index c1b814c..9ffc61e 100644 --- a/src/generated_themes/lucent-orng.json +++ b/src/generated_themes/lucent-orng.json @@ -66,8 +66,8 @@ "light": "#ffffff" }, "background": { - "dark": "transparent", - "light": "transparent" + "dark": "#2a1a15", + "light": "#fff5f0" }, "backgroundPanel": { "dark": "transparent", @@ -230,5 +230,6 @@ "dark": "darkStep12", "light": "lightStep12" } - } + }, + "appearance": "dark" } diff --git a/src/generated_themes/material-light.json b/src/generated_themes/material-light.json new file mode 100644 index 0000000..de0987c --- /dev/null +++ b/src/generated_themes/material-light.json @@ -0,0 +1,244 @@ +{ + "$schema": "https://opencode.ai/theme.json", + "defs": { + "darkBg": "#263238", + "darkBgAlt": "#1e272c", + "darkBgPanel": "#37474f", + "darkFg": "#eeffff", + "darkFgMuted": "#546e7a", + "darkRed": "#f07178", + "darkPink": "#f78c6c", + "darkOrange": "#ffcb6b", + "darkYellow": "#ffcb6b", + "darkGreen": "#c3e88d", + "darkCyan": "#89ddff", + "darkBlue": "#82aaff", + "darkPurple": "#c792ea", + "darkViolet": "#bb80b3", + "lightBg": "#fafafa", + "lightBgAlt": "#f5f5f5", + "lightBgPanel": "#e7e7e8", + "lightFg": "#263238", + "lightFgMuted": "#90a4ae", + "lightRed": "#e53935", + "lightPink": "#ec407a", + "lightOrange": "#f4511e", + "lightYellow": "#ffb300", + "lightGreen": "#91b859", + "lightCyan": "#39adb5", + "lightBlue": "#6182b8", + "lightPurple": "#7c4dff", + "lightViolet": "#945eb8", + "darkFgMutedWeak": "#546e7a", + "lightFgMutedWeak": "#90a4ae" + }, + "theme": { + "primary": { + "dark": "darkBlue", + "light": "lightBlue" + }, + "secondary": { + "dark": "darkPurple", + "light": "lightPurple" + }, + "accent": { + "dark": "darkCyan", + "light": "lightCyan" + }, + "error": { + "dark": "darkRed", + "light": "lightRed" + }, + "warning": { + "dark": "darkYellow", + "light": "lightYellow" + }, + "success": { + "dark": "darkGreen", + "light": "lightGreen" + }, + "info": { + "dark": "darkOrange", + "light": "lightOrange" + }, + "text": { + "dark": "darkFg", + "light": "lightFg" + }, + "textMuted": { + "dark": "darkFgMuted", + "light": "lightFgMuted" + }, + "textWeak": { + "dark": "darkFgMutedWeak", + "light": "lightFgMutedWeak" + }, + "background": { + "dark": "#263238", + "light": "#fafafa" + }, + "backgroundPanel": { + "dark": "darkBgAlt", + "light": "lightBgAlt" + }, + "backgroundElement": { + "dark": "darkBgPanel", + "light": "lightBgPanel" + }, + "border": { + "dark": "#37474f", + "light": "#e0e0e0" + }, + "borderActive": { + "dark": "darkBlue", + "light": "lightBlue" + }, + "borderSubtle": { + "dark": "#1e272c", + "light": "#eeeeee" + }, + "diffAdded": { + "dark": "darkGreen", + "light": "lightGreen" + }, + "diffRemoved": { + "dark": "darkRed", + "light": "lightRed" + }, + "diffContext": { + "dark": "darkFgMuted", + "light": "lightFgMuted" + }, + "diffHunkHeader": { + "dark": "darkCyan", + "light": "lightCyan" + }, + "diffHighlightAdded": { + "dark": "darkGreen", + "light": "lightGreen" + }, + "diffHighlightRemoved": { + "dark": "darkRed", + "light": "lightRed" + }, + "diffAddedBg": { + "dark": "#2e3c2b", + "light": "#e8f5e9" + }, + "diffRemovedBg": { + "dark": "#3c2b2b", + "light": "#ffebee" + }, + "diffContextBg": { + "dark": "darkBgAlt", + "light": "lightBgAlt" + }, + "diffLineNumber": { + "dark": "#9aa2a6", + "light": "#6a6e70" + }, + "diffAddedLineNumberBg": { + "dark": "#2e3c2b", + "light": "#e8f5e9" + }, + "diffRemovedLineNumberBg": { + "dark": "#3c2b2b", + "light": "#ffebee" + }, + "markdownText": { + "dark": "darkFg", + "light": "lightFg" + }, + "markdownHeading": { + "dark": "darkBlue", + "light": "lightBlue" + }, + "markdownLink": { + "dark": "darkCyan", + "light": "lightCyan" + }, + "markdownLinkText": { + "dark": "darkPurple", + "light": "lightPurple" + }, + "markdownCode": { + "dark": "darkGreen", + "light": "lightGreen" + }, + "markdownBlockQuote": { + "dark": "darkFgMuted", + "light": "lightFgMuted" + }, + "markdownEmph": { + "dark": "darkYellow", + "light": "lightYellow" + }, + "markdownStrong": { + "dark": "darkOrange", + "light": "lightOrange" + }, + "markdownHorizontalRule": { + "dark": "#37474f", + "light": "#e0e0e0" + }, + "markdownListItem": { + "dark": "darkBlue", + "light": "lightBlue" + }, + "markdownListEnumeration": { + "dark": "darkCyan", + "light": "lightCyan" + }, + "markdownImage": { + "dark": "darkCyan", + "light": "lightCyan" + }, + "markdownImageText": { + "dark": "darkPurple", + "light": "lightPurple" + }, + "markdownCodeBlock": { + "dark": "darkFg", + "light": "lightFg" + }, + "syntaxComment": { + "dark": "darkFgMuted", + "light": "lightFgMuted" + }, + "syntaxKeyword": { + "dark": "darkPurple", + "light": "lightPurple" + }, + "syntaxFunction": { + "dark": "darkBlue", + "light": "lightBlue" + }, + "syntaxVariable": { + "dark": "darkFg", + "light": "lightFg" + }, + "syntaxString": { + "dark": "darkGreen", + "light": "lightGreen" + }, + "syntaxNumber": { + "dark": "darkOrange", + "light": "lightOrange" + }, + "syntaxType": { + "dark": "darkYellow", + "light": "lightYellow" + }, + "syntaxOperator": { + "dark": "darkCyan", + "light": "lightCyan" + }, + "syntaxPunctuation": { + "dark": "darkFg", + "light": "lightFg" + } + }, + "appearance": "light", + "id": "material-light", + "name": "Material Light" +} diff --git a/src/generated_themes/material.json b/src/generated_themes/material.json index 82acc53..7a5f956 100644 --- a/src/generated_themes/material.json +++ b/src/generated_themes/material.json @@ -74,8 +74,8 @@ "light": "lightFgMutedWeak" }, "background": { - "dark": "darkBg", - "light": "lightBg" + "dark": "#263238", + "light": "#fafafa" }, "backgroundPanel": { "dark": "darkBgAlt", @@ -237,5 +237,6 @@ "dark": "darkFg", "light": "lightFg" } - } + }, + "appearance": "dark" } diff --git a/src/generated_themes/matrix-light.json b/src/generated_themes/matrix-light.json new file mode 100644 index 0000000..008406d --- /dev/null +++ b/src/generated_themes/matrix-light.json @@ -0,0 +1,236 @@ +{ + "$schema": "https://opencode.ai/theme.json", + "defs": { + "matrixInk0": "#0a0e0a", + "matrixInk1": "#0e130d", + "matrixInk2": "#141c12", + "matrixInk3": "#1e2a1b", + "rainGreen": "#2eff6a", + "rainGreenDim": "#1cc24b", + "rainGreenHi": "#62ff94", + "rainCyan": "#00efff", + "rainTeal": "#24f6d9", + "rainPurple": "#c770ff", + "rainOrange": "#ffa83d", + "alertRed": "#ff4b4b", + "alertYellow": "#e6ff57", + "alertBlue": "#30b3ff", + "rainGray": "#8ca391", + "lightBg": "#eef3ea", + "lightPaper": "#e4ebe1", + "lightInk1": "#dae1d7", + "lightText": "#203022", + "lightGray": "#748476", + "rainGrayWeak": "#8ca391", + "lightGrayWeak": "#748476" + }, + "theme": { + "primary": { + "dark": "rainGreen", + "light": "rainGreenDim" + }, + "secondary": { + "dark": "rainCyan", + "light": "rainTeal" + }, + "accent": { + "dark": "rainPurple", + "light": "rainPurple" + }, + "error": { + "dark": "alertRed", + "light": "alertRed" + }, + "warning": { + "dark": "alertYellow", + "light": "alertYellow" + }, + "success": { + "dark": "rainGreenHi", + "light": "rainGreenDim" + }, + "info": { + "dark": "alertBlue", + "light": "alertBlue" + }, + "text": { + "dark": "rainGreenHi", + "light": "lightText" + }, + "textMuted": { + "dark": "rainGray", + "light": "lightGray" + }, + "textWeak": { + "dark": "rainGrayWeak", + "light": "lightGrayWeak" + }, + "background": { + "dark": "#0a0e0a", + "light": "#eef3ea" + }, + "backgroundPanel": { + "dark": "matrixInk1", + "light": "lightPaper" + }, + "backgroundElement": { + "dark": "matrixInk2", + "light": "lightInk1" + }, + "border": { + "dark": "matrixInk3", + "light": "lightGray" + }, + "borderActive": { + "dark": "rainGreen", + "light": "rainGreenDim" + }, + "borderSubtle": { + "dark": "matrixInk2", + "light": "lightInk1" + }, + "diffAdded": { + "dark": "rainGreenDim", + "light": "rainGreenDim" + }, + "diffRemoved": { + "dark": "alertRed", + "light": "alertRed" + }, + "diffContext": { + "dark": "rainGray", + "light": "lightGray" + }, + "diffHunkHeader": { + "dark": "alertBlue", + "light": "alertBlue" + }, + "diffHighlightAdded": { + "dark": "#77ffaf", + "light": "#5dac7e" + }, + "diffHighlightRemoved": { + "dark": "#ff7171", + "light": "#d53a3a" + }, + "diffAddedBg": { + "dark": "#132616", + "light": "#e0efde" + }, + "diffRemovedBg": { + "dark": "#261212", + "light": "#f9e5e5" + }, + "diffContextBg": { + "dark": "matrixInk1", + "light": "lightPaper" + }, + "diffLineNumber": { + "dark": "textMuted", + "light": "#556156" + }, + "diffAddedLineNumberBg": { + "dark": "#0f1b11", + "light": "#d6e7d2" + }, + "diffRemovedLineNumberBg": { + "dark": "#1b1414", + "light": "#f2d2d2" + }, + "markdownText": { + "dark": "rainGreenHi", + "light": "lightText" + }, + "markdownHeading": { + "dark": "rainCyan", + "light": "rainTeal" + }, + "markdownLink": { + "dark": "alertBlue", + "light": "alertBlue" + }, + "markdownLinkText": { + "dark": "rainTeal", + "light": "rainTeal" + }, + "markdownCode": { + "dark": "rainGreenDim", + "light": "rainGreenDim" + }, + "markdownBlockQuote": { + "dark": "rainGray", + "light": "lightGray" + }, + "markdownEmph": { + "dark": "rainOrange", + "light": "rainOrange" + }, + "markdownStrong": { + "dark": "alertYellow", + "light": "alertYellow" + }, + "markdownHorizontalRule": { + "dark": "rainGray", + "light": "lightGray" + }, + "markdownListItem": { + "dark": "alertBlue", + "light": "alertBlue" + }, + "markdownListEnumeration": { + "dark": "rainTeal", + "light": "rainTeal" + }, + "markdownImage": { + "dark": "alertBlue", + "light": "alertBlue" + }, + "markdownImageText": { + "dark": "rainTeal", + "light": "rainTeal" + }, + "markdownCodeBlock": { + "dark": "rainGreenHi", + "light": "lightText" + }, + "syntaxComment": { + "dark": "rainGray", + "light": "lightGray" + }, + "syntaxKeyword": { + "dark": "rainPurple", + "light": "rainPurple" + }, + "syntaxFunction": { + "dark": "alertBlue", + "light": "alertBlue" + }, + "syntaxVariable": { + "dark": "rainGreenHi", + "light": "lightText" + }, + "syntaxString": { + "dark": "rainGreenDim", + "light": "rainGreenDim" + }, + "syntaxNumber": { + "dark": "rainOrange", + "light": "rainOrange" + }, + "syntaxType": { + "dark": "alertYellow", + "light": "alertYellow" + }, + "syntaxOperator": { + "dark": "rainTeal", + "light": "rainTeal" + }, + "syntaxPunctuation": { + "dark": "rainGreenHi", + "light": "lightText" + } + }, + "appearance": "light", + "id": "matrix-light", + "name": "Matrix Light" +} diff --git a/src/generated_themes/matrix.json b/src/generated_themes/matrix.json index d1fcc77..3b99dff 100644 --- a/src/generated_themes/matrix.json +++ b/src/generated_themes/matrix.json @@ -66,8 +66,8 @@ "light": "lightGrayWeak" }, "background": { - "dark": "matrixInk0", - "light": "lightBg" + "dark": "#0a0e0a", + "light": "#eef3ea" }, "backgroundPanel": { "dark": "matrixInk1", @@ -229,5 +229,6 @@ "dark": "rainGreenHi", "light": "lightText" } - } + }, + "appearance": "dark" } diff --git a/src/generated_themes/mercury-light.json b/src/generated_themes/mercury-light.json new file mode 100644 index 0000000..e4923c8 --- /dev/null +++ b/src/generated_themes/mercury-light.json @@ -0,0 +1,254 @@ +{ + "$schema": "https://opencode.ai/theme.json", + "defs": { + "purple-800": "#3442a6", + "purple-700": "#465bd1", + "purple-600": "#5266eb", + "purple-400": "#8da4f5", + "purple-300": "#a7b6f8", + "red-700": "#b0175f", + "red-600": "#d03275", + "red-400": "#fc92b4", + "green-700": "#036e43", + "green-600": "#188554", + "green-400": "#77c599", + "orange-700": "#a44200", + "orange-600": "#c45000", + "orange-400": "#fc9b6f", + "blue-600": "#007f95", + "blue-400": "#77becf", + "neutral-1000": "#10101a", + "neutral-950": "#171721", + "neutral-900": "#1e1e2a", + "neutral-800": "#272735", + "neutral-700": "#363644", + "neutral-600": "#535461", + "neutral-500": "#70707d", + "neutral-400": "#9d9da8", + "neutral-300": "#c3c3cc", + "neutral-200": "#dddde5", + "neutral-100": "#f4f5f9", + "neutral-050": "#fbfcfd", + "neutral-000": "#ffffff", + "neutral-150": "#ededf3", + "border-light": "#7073931a", + "border-light-subtle": "#7073930f", + "border-dark": "#b4b7c81f", + "border-dark-subtle": "#b4b7c814", + "diff-added-light": "#1885541a", + "diff-removed-light": "#d032751a", + "diff-added-dark": "#77c59933", + "diff-removed-dark": "#fc92b433", + "neutral400Weak": "#9d9da8", + "neutral500Weak": "#70707d" + }, + "theme": { + "primary": { + "light": "purple-600", + "dark": "purple-400" + }, + "secondary": { + "light": "purple-700", + "dark": "purple-300" + }, + "accent": { + "light": "purple-400", + "dark": "purple-400" + }, + "error": { + "light": "red-700", + "dark": "red-400" + }, + "warning": { + "light": "orange-700", + "dark": "orange-400" + }, + "success": { + "light": "green-700", + "dark": "green-400" + }, + "info": { + "light": "blue-600", + "dark": "blue-400" + }, + "text": { + "light": "neutral-700", + "dark": "neutral-200" + }, + "textMuted": { + "light": "neutral-500", + "dark": "neutral-400" + }, + "textWeak": { + "dark": "neutral400Weak", + "light": "neutral500Weak" + }, + "background": { + "light": "#ffffff", + "dark": "#171721" + }, + "backgroundPanel": { + "light": "neutral-050", + "dark": "neutral-1000" + }, + "backgroundElement": { + "light": "neutral-100", + "dark": "neutral-800" + }, + "border": { + "light": "border-light", + "dark": "border-dark" + }, + "borderActive": { + "light": "purple-600", + "dark": "purple-400" + }, + "borderSubtle": { + "light": "border-light-subtle", + "dark": "border-dark-subtle" + }, + "diffAdded": { + "light": "green-700", + "dark": "green-400" + }, + "diffRemoved": { + "light": "red-700", + "dark": "red-400" + }, + "diffContext": { + "light": "neutral-500", + "dark": "neutral-400" + }, + "diffHunkHeader": { + "light": "neutral-500", + "dark": "neutral-400" + }, + "diffHighlightAdded": { + "light": "green-700", + "dark": "green-400" + }, + "diffHighlightRemoved": { + "light": "red-700", + "dark": "red-400" + }, + "diffAddedBg": { + "light": "diff-added-light", + "dark": "diff-added-dark" + }, + "diffRemovedBg": { + "light": "diff-removed-light", + "dark": "diff-removed-dark" + }, + "diffContextBg": { + "light": "neutral-050", + "dark": "neutral-900" + }, + "diffLineNumber": { + "light": "neutral-600", + "dark": "neutral-300" + }, + "diffAddedLineNumberBg": { + "light": "diff-added-light", + "dark": "diff-added-dark" + }, + "diffRemovedLineNumberBg": { + "light": "diff-removed-light", + "dark": "diff-removed-dark" + }, + "markdownText": { + "light": "neutral-700", + "dark": "neutral-200" + }, + "markdownHeading": { + "light": "neutral-900", + "dark": "neutral-000" + }, + "markdownLink": { + "light": "purple-700", + "dark": "purple-400" + }, + "markdownLinkText": { + "light": "purple-600", + "dark": "purple-300" + }, + "markdownCode": { + "light": "green-700", + "dark": "green-400" + }, + "markdownBlockQuote": { + "light": "neutral-500", + "dark": "neutral-400" + }, + "markdownEmph": { + "light": "orange-700", + "dark": "orange-400" + }, + "markdownStrong": { + "light": "neutral-900", + "dark": "neutral-100" + }, + "markdownHorizontalRule": { + "light": "border-light", + "dark": "border-dark" + }, + "markdownListItem": { + "light": "neutral-900", + "dark": "neutral-000" + }, + "markdownListEnumeration": { + "light": "purple-600", + "dark": "purple-400" + }, + "markdownImage": { + "light": "purple-700", + "dark": "purple-400" + }, + "markdownImageText": { + "light": "purple-600", + "dark": "purple-300" + }, + "markdownCodeBlock": { + "light": "neutral-700", + "dark": "neutral-200" + }, + "syntaxComment": { + "light": "neutral-500", + "dark": "neutral-400" + }, + "syntaxKeyword": { + "light": "purple-700", + "dark": "purple-400" + }, + "syntaxFunction": { + "light": "purple-600", + "dark": "purple-400" + }, + "syntaxVariable": { + "light": "blue-600", + "dark": "blue-400" + }, + "syntaxString": { + "light": "green-700", + "dark": "green-400" + }, + "syntaxNumber": { + "light": "orange-700", + "dark": "orange-400" + }, + "syntaxType": { + "light": "blue-600", + "dark": "blue-400" + }, + "syntaxOperator": { + "light": "purple-700", + "dark": "purple-400" + }, + "syntaxPunctuation": { + "light": "neutral-700", + "dark": "neutral-200" + } + }, + "appearance": "light", + "id": "mercury-light", + "name": "Mercury Light" +} diff --git a/src/generated_themes/mercury.json b/src/generated_themes/mercury.json index 6b08bcb..cd2b13e 100644 --- a/src/generated_themes/mercury.json +++ b/src/generated_themes/mercury.json @@ -84,8 +84,8 @@ "light": "neutral500Weak" }, "background": { - "light": "neutral-000", - "dark": "neutral-950" + "light": "#ffffff", + "dark": "#171721" }, "backgroundPanel": { "light": "neutral-050", @@ -247,5 +247,6 @@ "light": "neutral-700", "dark": "neutral-200" } - } + }, + "appearance": "dark" } diff --git a/src/generated_themes/monokai-light.json b/src/generated_themes/monokai-light.json new file mode 100644 index 0000000..40c008d --- /dev/null +++ b/src/generated_themes/monokai-light.json @@ -0,0 +1,230 @@ +{ + "$schema": "https://opencode.ai/theme.json", + "defs": { + "background": "#272822", + "backgroundAlt": "#1e1f1c", + "backgroundPanel": "#3e3d32", + "foreground": "#f8f8f2", + "comment": "#75715e", + "red": "#f92672", + "orange": "#fd971f", + "lightOrange": "#e69f66", + "yellow": "#e6db74", + "green": "#a6e22e", + "cyan": "#66d9ef", + "blue": "#66d9ef", + "purple": "#ae81ff", + "pink": "#f92672", + "commentWeak": "#75715e", + "75715eWeak": "#75715e" + }, + "theme": { + "primary": { + "dark": "cyan", + "light": "blue" + }, + "secondary": { + "dark": "purple", + "light": "purple" + }, + "accent": { + "dark": "green", + "light": "green" + }, + "error": { + "dark": "red", + "light": "red" + }, + "warning": { + "dark": "yellow", + "light": "orange" + }, + "success": { + "dark": "green", + "light": "green" + }, + "info": { + "dark": "orange", + "light": "orange" + }, + "text": { + "dark": "foreground", + "light": "#272822" + }, + "textMuted": { + "dark": "comment", + "light": "#75715e" + }, + "textWeak": { + "dark": "commentWeak", + "light": "75715eWeak" + }, + "background": { + "dark": "#272822", + "light": "#fafafa" + }, + "backgroundPanel": { + "dark": "#1e1f1c", + "light": "#f0f0f0" + }, + "backgroundElement": { + "dark": "#3e3d32", + "light": "#e0e0e0" + }, + "border": { + "dark": "#3e3d32", + "light": "#d0d0d0" + }, + "borderActive": { + "dark": "cyan", + "light": "blue" + }, + "borderSubtle": { + "dark": "#1e1f1c", + "light": "#e8e8e8" + }, + "diffAdded": { + "dark": "green", + "light": "green" + }, + "diffRemoved": { + "dark": "red", + "light": "red" + }, + "diffContext": { + "dark": "comment", + "light": "#75715e" + }, + "diffHunkHeader": { + "dark": "comment", + "light": "#75715e" + }, + "diffHighlightAdded": { + "dark": "green", + "light": "green" + }, + "diffHighlightRemoved": { + "dark": "red", + "light": "red" + }, + "diffAddedBg": { + "dark": "#1a3a1a", + "light": "#e0ffe0" + }, + "diffRemovedBg": { + "dark": "#3a1a1a", + "light": "#ffe0e0" + }, + "diffContextBg": { + "dark": "#1e1f1c", + "light": "#f0f0f0" + }, + "diffLineNumber": { + "dark": "#9b9b95", + "light": "#686868" + }, + "diffAddedLineNumberBg": { + "dark": "#1a3a1a", + "light": "#e0ffe0" + }, + "diffRemovedLineNumberBg": { + "dark": "#3a1a1a", + "light": "#ffe0e0" + }, + "markdownText": { + "dark": "foreground", + "light": "#272822" + }, + "markdownHeading": { + "dark": "pink", + "light": "pink" + }, + "markdownLink": { + "dark": "cyan", + "light": "blue" + }, + "markdownLinkText": { + "dark": "purple", + "light": "purple" + }, + "markdownCode": { + "dark": "green", + "light": "green" + }, + "markdownBlockQuote": { + "dark": "comment", + "light": "#75715e" + }, + "markdownEmph": { + "dark": "yellow", + "light": "orange" + }, + "markdownStrong": { + "dark": "orange", + "light": "orange" + }, + "markdownHorizontalRule": { + "dark": "comment", + "light": "#75715e" + }, + "markdownListItem": { + "dark": "cyan", + "light": "blue" + }, + "markdownListEnumeration": { + "dark": "purple", + "light": "purple" + }, + "markdownImage": { + "dark": "cyan", + "light": "blue" + }, + "markdownImageText": { + "dark": "purple", + "light": "purple" + }, + "markdownCodeBlock": { + "dark": "foreground", + "light": "#272822" + }, + "syntaxComment": { + "dark": "comment", + "light": "#75715e" + }, + "syntaxKeyword": { + "dark": "pink", + "light": "pink" + }, + "syntaxFunction": { + "dark": "green", + "light": "green" + }, + "syntaxVariable": { + "dark": "foreground", + "light": "#272822" + }, + "syntaxString": { + "dark": "yellow", + "light": "orange" + }, + "syntaxNumber": { + "dark": "purple", + "light": "purple" + }, + "syntaxType": { + "dark": "cyan", + "light": "blue" + }, + "syntaxOperator": { + "dark": "pink", + "light": "pink" + }, + "syntaxPunctuation": { + "dark": "foreground", + "light": "#272822" + } + }, + "appearance": "light", + "id": "monokai-light", + "name": "Monokai Light" +} diff --git a/src/generated_themes/monokai.json b/src/generated_themes/monokai.json index c943b4d..276f7ee 100644 --- a/src/generated_themes/monokai.json +++ b/src/generated_themes/monokai.json @@ -223,5 +223,6 @@ "dark": "foreground", "light": "#272822" } - } + }, + "appearance": "dark" } diff --git a/src/generated_themes/nightowl.json b/src/generated_themes/nightowl.json index cf81c28..2439a20 100644 --- a/src/generated_themes/nightowl.json +++ b/src/generated_themes/nightowl.json @@ -59,8 +59,8 @@ "light": "nightOwlMutedWeak" }, "background": { - "dark": "nightOwlBg", - "light": "nightOwlBg" + "dark": "#011627", + "light": "#011627" }, "backgroundPanel": { "dark": "nightOwlPanel", @@ -222,5 +222,6 @@ "dark": "nightOwlFg", "light": "nightOwlFg" } - } + }, + "appearance": "dark" } diff --git a/src/generated_themes/nord-light.json b/src/generated_themes/nord-light.json new file mode 100644 index 0000000..f2bf8fb --- /dev/null +++ b/src/generated_themes/nord-light.json @@ -0,0 +1,232 @@ +{ + "$schema": "https://opencode.ai/theme.json", + "defs": { + "nord0": "#2E3440", + "nord1": "#3B4252", + "nord2": "#434C5E", + "nord3": "#4C566A", + "nord4": "#D8DEE9", + "nord5": "#E5E9F0", + "nord6": "#ECEFF4", + "nord7": "#8FBCBB", + "nord8": "#88C0D0", + "nord9": "#81A1C1", + "nord10": "#5E81AC", + "nord11": "#BF616A", + "nord12": "#D08770", + "nord13": "#EBCB8B", + "nord14": "#A3BE8C", + "nord15": "#B48EAD", + "8B95A7Weak": "#8B95A7", + "nord1Weak": "#5a6170" + }, + "theme": { + "primary": { + "dark": "nord8", + "light": "nord10" + }, + "secondary": { + "dark": "nord9", + "light": "nord9" + }, + "accent": { + "dark": "nord7", + "light": "nord7" + }, + "error": { + "dark": "nord11", + "light": "nord11" + }, + "warning": { + "dark": "nord12", + "light": "nord12" + }, + "success": { + "dark": "nord14", + "light": "nord14" + }, + "info": { + "dark": "nord8", + "light": "nord10" + }, + "text": { + "dark": "nord6", + "light": "nord0" + }, + "textMuted": { + "dark": "#8B95A7", + "light": "nord1" + }, + "textWeak": { + "dark": "8B95A7Weak", + "light": "nord1Weak" + }, + "background": { + "dark": "#2E3440", + "light": "#ECEFF4" + }, + "backgroundPanel": { + "dark": "nord1", + "light": "nord5" + }, + "backgroundElement": { + "dark": "nord2", + "light": "nord4" + }, + "border": { + "dark": "nord2", + "light": "nord3" + }, + "borderActive": { + "dark": "nord3", + "light": "nord2" + }, + "borderSubtle": { + "dark": "nord2", + "light": "nord3" + }, + "diffAdded": { + "dark": "nord14", + "light": "nord14" + }, + "diffRemoved": { + "dark": "nord11", + "light": "nord11" + }, + "diffContext": { + "dark": "#8B95A7", + "light": "nord3" + }, + "diffHunkHeader": { + "dark": "#8B95A7", + "light": "nord3" + }, + "diffHighlightAdded": { + "dark": "nord14", + "light": "nord14" + }, + "diffHighlightRemoved": { + "dark": "nord11", + "light": "nord11" + }, + "diffAddedBg": { + "dark": "#3B4252", + "light": "#E5E9F0" + }, + "diffRemovedBg": { + "dark": "#3B4252", + "light": "#E5E9F0" + }, + "diffContextBg": { + "dark": "nord1", + "light": "nord5" + }, + "diffLineNumber": { + "dark": "#a9aeb6", + "light": "textMuted" + }, + "diffAddedLineNumberBg": { + "dark": "#3B4252", + "light": "#E5E9F0" + }, + "diffRemovedLineNumberBg": { + "dark": "#3B4252", + "light": "#E5E9F0" + }, + "markdownText": { + "dark": "nord4", + "light": "nord0" + }, + "markdownHeading": { + "dark": "nord8", + "light": "nord10" + }, + "markdownLink": { + "dark": "nord9", + "light": "nord9" + }, + "markdownLinkText": { + "dark": "nord7", + "light": "nord7" + }, + "markdownCode": { + "dark": "nord14", + "light": "nord14" + }, + "markdownBlockQuote": { + "dark": "#8B95A7", + "light": "nord3" + }, + "markdownEmph": { + "dark": "nord12", + "light": "nord12" + }, + "markdownStrong": { + "dark": "nord13", + "light": "nord13" + }, + "markdownHorizontalRule": { + "dark": "#8B95A7", + "light": "nord3" + }, + "markdownListItem": { + "dark": "nord8", + "light": "nord10" + }, + "markdownListEnumeration": { + "dark": "nord7", + "light": "nord7" + }, + "markdownImage": { + "dark": "nord9", + "light": "nord9" + }, + "markdownImageText": { + "dark": "nord7", + "light": "nord7" + }, + "markdownCodeBlock": { + "dark": "nord4", + "light": "nord0" + }, + "syntaxComment": { + "dark": "#8B95A7", + "light": "nord3" + }, + "syntaxKeyword": { + "dark": "nord9", + "light": "nord9" + }, + "syntaxFunction": { + "dark": "nord8", + "light": "nord8" + }, + "syntaxVariable": { + "dark": "nord7", + "light": "nord7" + }, + "syntaxString": { + "dark": "nord14", + "light": "nord14" + }, + "syntaxNumber": { + "dark": "nord15", + "light": "nord15" + }, + "syntaxType": { + "dark": "nord7", + "light": "nord7" + }, + "syntaxOperator": { + "dark": "nord9", + "light": "nord9" + }, + "syntaxPunctuation": { + "dark": "nord4", + "light": "nord0" + } + }, + "appearance": "light", + "id": "nord-light", + "name": "Nord Light" +} diff --git a/src/generated_themes/nord.json b/src/generated_themes/nord.json index 30a0995..548c9bb 100644 --- a/src/generated_themes/nord.json +++ b/src/generated_themes/nord.json @@ -62,8 +62,8 @@ "light": "nord1Weak" }, "background": { - "dark": "nord0", - "light": "nord6" + "dark": "#2E3440", + "light": "#ECEFF4" }, "backgroundPanel": { "dark": "nord1", @@ -225,5 +225,6 @@ "dark": "nord4", "light": "nord0" } - } + }, + "appearance": "dark" } diff --git a/src/generated_themes/one-dark-light.json b/src/generated_themes/one-dark-light.json new file mode 100644 index 0000000..c99cd51 --- /dev/null +++ b/src/generated_themes/one-dark-light.json @@ -0,0 +1,240 @@ +{ + "$schema": "https://opencode.ai/theme.json", + "defs": { + "darkBg": "#282c34", + "darkBgAlt": "#21252b", + "darkBgPanel": "#353b45", + "darkFg": "#abb2bf", + "darkFgMuted": "#5c6370", + "darkPurple": "#c678dd", + "darkBlue": "#61afef", + "darkRed": "#e06c75", + "darkGreen": "#98c379", + "darkYellow": "#e5c07b", + "darkOrange": "#d19a66", + "darkCyan": "#56b6c2", + "lightBg": "#fafafa", + "lightBgAlt": "#f0f0f1", + "lightBgPanel": "#eaeaeb", + "lightFg": "#383a42", + "lightFgMuted": "#a0a1a7", + "lightPurple": "#a626a4", + "lightBlue": "#4078f2", + "lightRed": "#e45649", + "lightGreen": "#50a14f", + "lightYellow": "#c18401", + "lightOrange": "#986801", + "lightCyan": "#0184bc", + "darkFgMutedWeak": "#5c6370", + "lightFgMutedWeak": "#a0a1a7" + }, + "theme": { + "primary": { + "dark": "darkBlue", + "light": "lightBlue" + }, + "secondary": { + "dark": "darkPurple", + "light": "lightPurple" + }, + "accent": { + "dark": "darkCyan", + "light": "lightCyan" + }, + "error": { + "dark": "darkRed", + "light": "lightRed" + }, + "warning": { + "dark": "darkYellow", + "light": "lightYellow" + }, + "success": { + "dark": "darkGreen", + "light": "lightGreen" + }, + "info": { + "dark": "darkOrange", + "light": "lightOrange" + }, + "text": { + "dark": "darkFg", + "light": "lightFg" + }, + "textMuted": { + "dark": "darkFgMuted", + "light": "lightFgMuted" + }, + "textWeak": { + "dark": "darkFgMutedWeak", + "light": "lightFgMutedWeak" + }, + "background": { + "dark": "#282c34", + "light": "#fafafa" + }, + "backgroundPanel": { + "dark": "darkBgAlt", + "light": "lightBgAlt" + }, + "backgroundElement": { + "dark": "darkBgPanel", + "light": "lightBgPanel" + }, + "border": { + "dark": "#393f4a", + "light": "#d1d1d2" + }, + "borderActive": { + "dark": "darkBlue", + "light": "lightBlue" + }, + "borderSubtle": { + "dark": "#2c313a", + "light": "#e0e0e1" + }, + "diffAdded": { + "dark": "darkGreen", + "light": "lightGreen" + }, + "diffRemoved": { + "dark": "darkRed", + "light": "lightRed" + }, + "diffContext": { + "dark": "darkFgMuted", + "light": "lightFgMuted" + }, + "diffHunkHeader": { + "dark": "darkCyan", + "light": "lightCyan" + }, + "diffHighlightAdded": { + "dark": "#aad482", + "light": "#489447" + }, + "diffHighlightRemoved": { + "dark": "#e8828b", + "light": "#d65145" + }, + "diffAddedBg": { + "dark": "#2c382b", + "light": "#eafbe9" + }, + "diffRemovedBg": { + "dark": "#3a2d2f", + "light": "#fce9e8" + }, + "diffContextBg": { + "dark": "darkBgAlt", + "light": "lightBgAlt" + }, + "diffLineNumber": { + "dark": "#9398a2", + "light": "#666666" + }, + "diffAddedLineNumberBg": { + "dark": "#283427", + "light": "#e1f3df" + }, + "diffRemovedLineNumberBg": { + "dark": "#36292b", + "light": "#f5e2e1" + }, + "markdownText": { + "dark": "darkFg", + "light": "lightFg" + }, + "markdownHeading": { + "dark": "darkPurple", + "light": "lightPurple" + }, + "markdownLink": { + "dark": "darkBlue", + "light": "lightBlue" + }, + "markdownLinkText": { + "dark": "darkCyan", + "light": "lightCyan" + }, + "markdownCode": { + "dark": "darkGreen", + "light": "lightGreen" + }, + "markdownBlockQuote": { + "dark": "darkFgMuted", + "light": "lightFgMuted" + }, + "markdownEmph": { + "dark": "darkYellow", + "light": "lightYellow" + }, + "markdownStrong": { + "dark": "darkOrange", + "light": "lightOrange" + }, + "markdownHorizontalRule": { + "dark": "darkFgMuted", + "light": "lightFgMuted" + }, + "markdownListItem": { + "dark": "darkBlue", + "light": "lightBlue" + }, + "markdownListEnumeration": { + "dark": "darkCyan", + "light": "lightCyan" + }, + "markdownImage": { + "dark": "darkBlue", + "light": "lightBlue" + }, + "markdownImageText": { + "dark": "darkCyan", + "light": "lightCyan" + }, + "markdownCodeBlock": { + "dark": "darkFg", + "light": "lightFg" + }, + "syntaxComment": { + "dark": "darkFgMuted", + "light": "lightFgMuted" + }, + "syntaxKeyword": { + "dark": "darkPurple", + "light": "lightPurple" + }, + "syntaxFunction": { + "dark": "darkBlue", + "light": "lightBlue" + }, + "syntaxVariable": { + "dark": "darkRed", + "light": "lightRed" + }, + "syntaxString": { + "dark": "darkGreen", + "light": "lightGreen" + }, + "syntaxNumber": { + "dark": "darkOrange", + "light": "lightOrange" + }, + "syntaxType": { + "dark": "darkYellow", + "light": "lightYellow" + }, + "syntaxOperator": { + "dark": "darkCyan", + "light": "lightCyan" + }, + "syntaxPunctuation": { + "dark": "darkFg", + "light": "lightFg" + } + }, + "appearance": "light", + "id": "one-dark-light", + "name": "One Dark Light" +} diff --git a/src/generated_themes/one-dark.json b/src/generated_themes/one-dark.json index 23ce279..ae76b49 100644 --- a/src/generated_themes/one-dark.json +++ b/src/generated_themes/one-dark.json @@ -70,8 +70,8 @@ "light": "lightFgMutedWeak" }, "background": { - "dark": "darkBg", - "light": "lightBg" + "dark": "#282c34", + "light": "#fafafa" }, "backgroundPanel": { "dark": "darkBgAlt", @@ -233,5 +233,6 @@ "dark": "darkFg", "light": "lightFg" } - } + }, + "appearance": "dark" } diff --git a/src/generated_themes/opencode-light.json b/src/generated_themes/opencode-light.json new file mode 100644 index 0000000..e473cbb --- /dev/null +++ b/src/generated_themes/opencode-light.json @@ -0,0 +1,254 @@ +{ + "$schema": "https://opencode.ai/theme.json", + "defs": { + "darkStep1": "#0a0a0a", + "darkStep2": "#141414", + "darkStep3": "#1e1e1e", + "darkStep4": "#282828", + "darkStep5": "#323232", + "darkStep6": "#3c3c3c", + "darkStep7": "#484848", + "darkStep8": "#606060", + "darkStep9": "#fab283", + "darkStep10": "#ffc09f", + "darkStep11": "#808080", + "darkStep12": "#eeeeee", + "darkSecondary": "#5c9cf5", + "darkAccent": "#9d7cd8", + "darkRed": "#e06c75", + "darkOrange": "#f5a742", + "darkGreen": "#7fd88f", + "darkCyan": "#56b6c2", + "darkYellow": "#e5c07b", + "lightStep1": "#ffffff", + "lightStep2": "#fafafa", + "lightStep3": "#f5f5f5", + "lightStep4": "#ebebeb", + "lightStep5": "#e1e1e1", + "lightStep6": "#d4d4d4", + "lightStep7": "#b8b8b8", + "lightStep8": "#a0a0a0", + "lightStep9": "#3b7dd8", + "lightStep10": "#2968c3", + "lightStep11": "#8a8a8a", + "lightStep12": "#1a1a1a", + "lightSecondary": "#7b5bb6", + "lightAccent": "#d68c27", + "lightRed": "#d1383d", + "lightOrange": "#d68c27", + "lightGreen": "#3d9a57", + "lightCyan": "#318795", + "lightYellow": "#b0851f", + "darkStep11Weak": "#808080", + "lightStep11Weak": "#8a8a8a" + }, + "theme": { + "primary": { + "dark": "darkStep9", + "light": "lightStep9" + }, + "secondary": { + "dark": "darkSecondary", + "light": "lightSecondary" + }, + "accent": { + "dark": "darkAccent", + "light": "lightAccent" + }, + "error": { + "dark": "darkRed", + "light": "lightRed" + }, + "warning": { + "dark": "darkOrange", + "light": "lightOrange" + }, + "success": { + "dark": "darkGreen", + "light": "lightGreen" + }, + "info": { + "dark": "darkCyan", + "light": "lightCyan" + }, + "text": { + "dark": "darkStep12", + "light": "lightStep12" + }, + "textMuted": { + "dark": "darkStep11", + "light": "lightStep11" + }, + "textWeak": { + "dark": "darkStep11Weak", + "light": "lightStep11Weak" + }, + "background": { + "dark": "#0a0a0a", + "light": "#ffffff" + }, + "backgroundPanel": { + "dark": "darkStep2", + "light": "lightStep2" + }, + "backgroundElement": { + "dark": "darkStep3", + "light": "lightStep3" + }, + "border": { + "dark": "darkStep7", + "light": "lightStep7" + }, + "borderActive": { + "dark": "darkStep8", + "light": "lightStep8" + }, + "borderSubtle": { + "dark": "darkStep6", + "light": "lightStep6" + }, + "diffAdded": { + "dark": "#4fd6be", + "light": "#1e725c" + }, + "diffRemoved": { + "dark": "#c53b53", + "light": "#c53b53" + }, + "diffContext": { + "dark": "#828bb8", + "light": "#7086b5" + }, + "diffHunkHeader": { + "dark": "#828bb8", + "light": "#7086b5" + }, + "diffHighlightAdded": { + "dark": "#b8db87", + "light": "#4db380" + }, + "diffHighlightRemoved": { + "dark": "#e26a75", + "light": "#f52a65" + }, + "diffAddedBg": { + "dark": "#20303b", + "light": "#d5e5d5" + }, + "diffRemovedBg": { + "dark": "#37222c", + "light": "#f7d8db" + }, + "diffContextBg": { + "dark": "darkStep2", + "light": "lightStep2" + }, + "diffLineNumber": { + "dark": "#8f8f8f", + "light": "#595959" + }, + "diffAddedLineNumberBg": { + "dark": "#1b2b34", + "light": "#c5d5c5" + }, + "diffRemovedLineNumberBg": { + "dark": "#2d1f26", + "light": "#e7c8cb" + }, + "markdownText": { + "dark": "darkStep12", + "light": "lightStep12" + }, + "markdownHeading": { + "dark": "darkAccent", + "light": "lightAccent" + }, + "markdownLink": { + "dark": "darkStep9", + "light": "lightStep9" + }, + "markdownLinkText": { + "dark": "darkCyan", + "light": "lightCyan" + }, + "markdownCode": { + "dark": "darkGreen", + "light": "lightGreen" + }, + "markdownBlockQuote": { + "dark": "darkYellow", + "light": "lightYellow" + }, + "markdownEmph": { + "dark": "darkYellow", + "light": "lightYellow" + }, + "markdownStrong": { + "dark": "darkOrange", + "light": "lightOrange" + }, + "markdownHorizontalRule": { + "dark": "darkStep11", + "light": "lightStep11" + }, + "markdownListItem": { + "dark": "darkStep9", + "light": "lightStep9" + }, + "markdownListEnumeration": { + "dark": "darkCyan", + "light": "lightCyan" + }, + "markdownImage": { + "dark": "darkStep9", + "light": "lightStep9" + }, + "markdownImageText": { + "dark": "darkCyan", + "light": "lightCyan" + }, + "markdownCodeBlock": { + "dark": "darkStep12", + "light": "lightStep12" + }, + "syntaxComment": { + "dark": "darkStep11", + "light": "lightStep11" + }, + "syntaxKeyword": { + "dark": "darkAccent", + "light": "lightAccent" + }, + "syntaxFunction": { + "dark": "darkStep9", + "light": "lightStep9" + }, + "syntaxVariable": { + "dark": "darkRed", + "light": "lightRed" + }, + "syntaxString": { + "dark": "darkGreen", + "light": "lightGreen" + }, + "syntaxNumber": { + "dark": "darkOrange", + "light": "lightOrange" + }, + "syntaxType": { + "dark": "darkYellow", + "light": "lightYellow" + }, + "syntaxOperator": { + "dark": "darkCyan", + "light": "lightCyan" + }, + "syntaxPunctuation": { + "dark": "darkStep12", + "light": "lightStep12" + } + }, + "appearance": "light", + "id": "opencode-light", + "name": "Opencode Light" +} diff --git a/src/generated_themes/opencode.json b/src/generated_themes/opencode.json index ee320b6..4ee3adb 100644 --- a/src/generated_themes/opencode.json +++ b/src/generated_themes/opencode.json @@ -84,8 +84,8 @@ "light": "lightStep11Weak" }, "background": { - "dark": "darkStep1", - "light": "lightStep1" + "dark": "#0a0a0a", + "light": "#ffffff" }, "backgroundPanel": { "dark": "darkStep2", @@ -247,5 +247,6 @@ "dark": "darkStep12", "light": "lightStep12" } - } + }, + "appearance": "dark" } diff --git a/src/generated_themes/orng-light.json b/src/generated_themes/orng-light.json new file mode 100644 index 0000000..d135b7b --- /dev/null +++ b/src/generated_themes/orng-light.json @@ -0,0 +1,258 @@ +{ + "$schema": "https://opencode.ai/theme.json", + "defs": { + "darkStep1": "#0a0a0a", + "darkStep2": "#141414", + "darkStep3": "#1e1e1e", + "darkStep4": "#282828", + "darkStep5": "#323232", + "darkStep6": "#3c3c3c", + "darkStep7": "#484848", + "darkStep8": "#606060", + "darkStep9": "#EC5B2B", + "darkStep10": "#EE7948", + "darkStep11": "#808080", + "darkStep12": "#eeeeee", + "darkSecondary": "#EE7948", + "darkAccent": "#FFF7F1", + "darkRed": "#e06c75", + "darkOrange": "#EC5B2B", + "darkBlue": "#6ba1e6", + "darkCyan": "#56b6c2", + "darkYellow": "#e5c07b", + "lightStep1": "#ffffff", + "lightStep2": "#FFF7F1", + "lightStep3": "#f5f0eb", + "lightStep4": "#ebebeb", + "lightStep5": "#e1e1e1", + "lightStep6": "#d4d4d4", + "lightStep7": "#b8b8b8", + "lightStep8": "#a0a0a0", + "lightStep9": "#EC5B2B", + "lightStep10": "#c94d24", + "lightStep11": "#8a8a8a", + "lightStep12": "#1a1a1a", + "lightSecondary": "#EE7948", + "lightAccent": "#c94d24", + "lightRed": "#d1383d", + "lightOrange": "#EC5B2B", + "lightBlue": "#0062d1", + "lightCyan": "#318795", + "lightYellow": "#b0851f", + "darkStep11Weak": "#808080", + "lightStep11Weak": "#8a8a8a" + }, + "theme": { + "primary": { + "dark": "darkStep9", + "light": "lightStep9" + }, + "secondary": { + "dark": "darkSecondary", + "light": "lightSecondary" + }, + "accent": { + "dark": "darkAccent", + "light": "lightAccent" + }, + "error": { + "dark": "darkRed", + "light": "lightRed" + }, + "warning": { + "dark": "darkOrange", + "light": "lightOrange" + }, + "success": { + "dark": "darkBlue", + "light": "lightBlue" + }, + "info": { + "dark": "darkCyan", + "light": "lightCyan" + }, + "text": { + "dark": "darkStep12", + "light": "lightStep12" + }, + "textMuted": { + "dark": "darkStep11", + "light": "lightStep11" + }, + "textWeak": { + "dark": "darkStep11Weak", + "light": "lightStep11Weak" + }, + "selectedListItemText": { + "dark": "#0a0a0a", + "light": "#ffffff" + }, + "background": { + "dark": "#0a0a0a", + "light": "#ffffff" + }, + "backgroundPanel": { + "dark": "darkStep2", + "light": "lightStep2" + }, + "backgroundElement": { + "dark": "darkStep3", + "light": "lightStep3" + }, + "border": { + "dark": "#EC5B2B", + "light": "#EC5B2B" + }, + "borderActive": { + "dark": "#EE7948", + "light": "#c94d24" + }, + "borderSubtle": { + "dark": "darkStep6", + "light": "lightStep6" + }, + "diffAdded": { + "dark": "#6ba1e6", + "light": "#0062d1" + }, + "diffRemoved": { + "dark": "#c53b53", + "light": "#c53b53" + }, + "diffContext": { + "dark": "#828bb8", + "light": "#7086b5" + }, + "diffHunkHeader": { + "dark": "#828bb8", + "light": "#7086b5" + }, + "diffHighlightAdded": { + "dark": "#6ba1e6", + "light": "#0062d1" + }, + "diffHighlightRemoved": { + "dark": "#e26a75", + "light": "#f52a65" + }, + "diffAddedBg": { + "dark": "#1a2a3d", + "light": "#e0edfa" + }, + "diffRemovedBg": { + "dark": "#37222c", + "light": "#f7d8db" + }, + "diffContextBg": { + "dark": "darkStep2", + "light": "lightStep2" + }, + "diffLineNumber": { + "dark": "diffContext", + "light": "#595755" + }, + "diffAddedLineNumberBg": { + "dark": "#162535", + "light": "#d0e5f5" + }, + "diffRemovedLineNumberBg": { + "dark": "#2d1f26", + "light": "#e7c8cb" + }, + "markdownText": { + "dark": "darkStep12", + "light": "lightStep12" + }, + "markdownHeading": { + "dark": "#EC5B2B", + "light": "#EC5B2B" + }, + "markdownLink": { + "dark": "darkStep9", + "light": "lightStep9" + }, + "markdownLinkText": { + "dark": "darkCyan", + "light": "lightCyan" + }, + "markdownCode": { + "dark": "darkBlue", + "light": "lightBlue" + }, + "markdownBlockQuote": { + "dark": "#FFF7F1", + "light": "lightYellow" + }, + "markdownEmph": { + "dark": "darkYellow", + "light": "lightYellow" + }, + "markdownStrong": { + "dark": "#EE7948", + "light": "#EC5B2B" + }, + "markdownHorizontalRule": { + "dark": "darkStep11", + "light": "lightStep11" + }, + "markdownListItem": { + "dark": "darkStep9", + "light": "lightStep9" + }, + "markdownListEnumeration": { + "dark": "darkCyan", + "light": "lightCyan" + }, + "markdownImage": { + "dark": "darkStep9", + "light": "lightStep9" + }, + "markdownImageText": { + "dark": "darkCyan", + "light": "lightCyan" + }, + "markdownCodeBlock": { + "dark": "darkStep12", + "light": "lightStep12" + }, + "syntaxComment": { + "dark": "darkStep11", + "light": "lightStep11" + }, + "syntaxKeyword": { + "dark": "#EC5B2B", + "light": "#EC5B2B" + }, + "syntaxFunction": { + "dark": "#EE7948", + "light": "#c94d24" + }, + "syntaxVariable": { + "dark": "darkRed", + "light": "lightRed" + }, + "syntaxString": { + "dark": "darkBlue", + "light": "lightBlue" + }, + "syntaxNumber": { + "dark": "#FFF7F1", + "light": "#EC5B2B" + }, + "syntaxType": { + "dark": "darkYellow", + "light": "lightYellow" + }, + "syntaxOperator": { + "dark": "darkCyan", + "light": "lightCyan" + }, + "syntaxPunctuation": { + "dark": "darkStep12", + "light": "lightStep12" + } + }, + "appearance": "light", + "id": "orng-light", + "name": "Orng Light" +} diff --git a/src/generated_themes/orng.json b/src/generated_themes/orng.json index 86c11b9..3e5d019 100644 --- a/src/generated_themes/orng.json +++ b/src/generated_themes/orng.json @@ -88,8 +88,8 @@ "light": "#ffffff" }, "background": { - "dark": "darkStep1", - "light": "lightStep1" + "dark": "#0a0a0a", + "light": "#ffffff" }, "backgroundPanel": { "dark": "darkStep2", @@ -251,5 +251,6 @@ "dark": "darkStep12", "light": "lightStep12" } - } + }, + "appearance": "dark" } diff --git a/src/generated_themes/osaka-jade-light.json b/src/generated_themes/osaka-jade-light.json new file mode 100644 index 0000000..c66debe --- /dev/null +++ b/src/generated_themes/osaka-jade-light.json @@ -0,0 +1,249 @@ +{ + "$schema": "https://opencode.ai/theme.json", + "defs": { + "darkBg0": "#111c18", + "darkBg1": "#1a2520", + "darkBg2": "#23372B", + "darkBg3": "#3d4a44", + "darkFg0": "#C1C497", + "darkFg1": "#9aa88a", + "darkGray": "#53685B", + "darkRed": "#FF5345", + "darkGreen": "#549e6a", + "darkYellow": "#459451", + "darkBlue": "#509475", + "darkMagenta": "#D2689C", + "darkCyan": "#2DD5B7", + "darkWhite": "#F6F5DD", + "darkRedBright": "#db9f9c", + "darkGreenBright": "#63b07a", + "darkYellowBright": "#E5C736", + "darkBlueBright": "#ACD4CF", + "darkMagentaBright": "#75bbb3", + "darkCyanBright": "#8CD3CB", + "lightBg0": "#F6F5DD", + "lightBg1": "#E8E7CC", + "lightBg2": "#D5D4B8", + "lightBg3": "#A8A78C", + "lightFg0": "#111c18", + "lightFg1": "#1a2520", + "lightGray": "#53685B", + "lightRed": "#c7392d", + "lightGreen": "#3d7a52", + "lightYellow": "#b5a020", + "lightBlue": "#3d7560", + "lightMagenta": "#a8527a", + "lightCyan": "#1faa90", + "darkGrayWeak": "#53685B", + "lightGrayWeak": "#53685B" + }, + "theme": { + "primary": { + "dark": "darkCyan", + "light": "lightCyan" + }, + "secondary": { + "dark": "darkMagenta", + "light": "lightMagenta" + }, + "accent": { + "dark": "darkGreen", + "light": "lightGreen" + }, + "error": { + "dark": "darkRed", + "light": "lightRed" + }, + "warning": { + "dark": "darkYellowBright", + "light": "lightYellow" + }, + "success": { + "dark": "darkGreen", + "light": "lightGreen" + }, + "info": { + "dark": "darkCyan", + "light": "lightCyan" + }, + "text": { + "dark": "darkFg0", + "light": "lightFg0" + }, + "textMuted": { + "dark": "darkGray", + "light": "lightGray" + }, + "textWeak": { + "dark": "darkGrayWeak", + "light": "lightGrayWeak" + }, + "background": { + "dark": "#111c18", + "light": "#F6F5DD" + }, + "backgroundPanel": { + "dark": "darkBg1", + "light": "lightBg1" + }, + "backgroundElement": { + "dark": "darkBg2", + "light": "lightBg2" + }, + "border": { + "dark": "darkBg3", + "light": "lightBg3" + }, + "borderActive": { + "dark": "darkCyan", + "light": "lightCyan" + }, + "borderSubtle": { + "dark": "darkBg2", + "light": "lightBg2" + }, + "diffAdded": { + "dark": "darkGreen", + "light": "lightGreen" + }, + "diffRemoved": { + "dark": "darkRed", + "light": "lightRed" + }, + "diffContext": { + "dark": "darkGray", + "light": "lightGray" + }, + "diffHunkHeader": { + "dark": "darkCyan", + "light": "lightCyan" + }, + "diffHighlightAdded": { + "dark": "darkGreenBright", + "light": "lightGreen" + }, + "diffHighlightRemoved": { + "dark": "darkRedBright", + "light": "lightRed" + }, + "diffAddedBg": { + "dark": "#15241c", + "light": "#e0eee5" + }, + "diffRemovedBg": { + "dark": "#241515", + "light": "#eee0e0" + }, + "diffContextBg": { + "dark": "darkBg1", + "light": "lightBg1" + }, + "diffLineNumber": { + "dark": "#828b87", + "light": "#5f5e4f" + }, + "diffAddedLineNumberBg": { + "dark": "#121f18", + "light": "#d5e5da" + }, + "diffRemovedLineNumberBg": { + "dark": "#1f1212", + "light": "#e5d5d5" + }, + "markdownText": { + "dark": "darkFg0", + "light": "lightFg0" + }, + "markdownHeading": { + "dark": "darkCyan", + "light": "lightCyan" + }, + "markdownLink": { + "dark": "darkCyanBright", + "light": "lightCyan" + }, + "markdownLinkText": { + "dark": "darkGreen", + "light": "lightGreen" + }, + "markdownCode": { + "dark": "darkGreenBright", + "light": "lightGreen" + }, + "markdownBlockQuote": { + "dark": "darkGray", + "light": "lightGray" + }, + "markdownEmph": { + "dark": "darkMagenta", + "light": "lightMagenta" + }, + "markdownStrong": { + "dark": "darkFg0", + "light": "lightFg0" + }, + "markdownHorizontalRule": { + "dark": "darkGray", + "light": "lightGray" + }, + "markdownListItem": { + "dark": "darkCyan", + "light": "lightCyan" + }, + "markdownListEnumeration": { + "dark": "darkCyanBright", + "light": "lightCyan" + }, + "markdownImage": { + "dark": "darkCyanBright", + "light": "lightCyan" + }, + "markdownImageText": { + "dark": "darkGreen", + "light": "lightGreen" + }, + "markdownCodeBlock": { + "dark": "darkFg0", + "light": "lightFg0" + }, + "syntaxComment": { + "dark": "darkGray", + "light": "lightGray" + }, + "syntaxKeyword": { + "dark": "darkCyan", + "light": "lightCyan" + }, + "syntaxFunction": { + "dark": "darkBlue", + "light": "lightBlue" + }, + "syntaxVariable": { + "dark": "darkFg0", + "light": "lightFg0" + }, + "syntaxString": { + "dark": "darkGreenBright", + "light": "lightGreen" + }, + "syntaxNumber": { + "dark": "darkMagenta", + "light": "lightMagenta" + }, + "syntaxType": { + "dark": "darkGreen", + "light": "lightGreen" + }, + "syntaxOperator": { + "dark": "darkYellow", + "light": "lightYellow" + }, + "syntaxPunctuation": { + "dark": "darkFg0", + "light": "lightFg0" + } + }, + "appearance": "light", + "id": "osaka-jade-light", + "name": "Osaka Jade Light" +} diff --git a/src/generated_themes/osaka-jade.json b/src/generated_themes/osaka-jade.json index ead4d65..570b443 100644 --- a/src/generated_themes/osaka-jade.json +++ b/src/generated_themes/osaka-jade.json @@ -79,8 +79,8 @@ "light": "lightGrayWeak" }, "background": { - "dark": "darkBg0", - "light": "lightBg0" + "dark": "#111c18", + "light": "#F6F5DD" }, "backgroundPanel": { "dark": "darkBg1", @@ -242,5 +242,6 @@ "dark": "darkFg0", "light": "lightFg0" } - } + }, + "appearance": "dark" } diff --git a/src/generated_themes/palenight-light.json b/src/generated_themes/palenight-light.json new file mode 100644 index 0000000..6c2b8ff --- /dev/null +++ b/src/generated_themes/palenight-light.json @@ -0,0 +1,231 @@ +{ + "$schema": "https://opencode.ai/theme.json", + "defs": { + "background": "#292d3e", + "backgroundAlt": "#1e2132", + "backgroundPanel": "#32364a", + "foreground": "#a6accd", + "foregroundBright": "#bfc7d5", + "comment": "#676e95", + "red": "#f07178", + "orange": "#f78c6c", + "yellow": "#ffcb6b", + "green": "#c3e88d", + "cyan": "#89ddff", + "blue": "#82aaff", + "purple": "#c792ea", + "magenta": "#ff5370", + "pink": "#f07178", + "commentWeak": "#676e95", + "8796b0Weak": "#8796b0" + }, + "theme": { + "primary": { + "dark": "blue", + "light": "#4976eb" + }, + "secondary": { + "dark": "purple", + "light": "#a854f2" + }, + "accent": { + "dark": "cyan", + "light": "#00acc1" + }, + "error": { + "dark": "red", + "light": "#e53935" + }, + "warning": { + "dark": "yellow", + "light": "#ffb300" + }, + "success": { + "dark": "green", + "light": "#91b859" + }, + "info": { + "dark": "orange", + "light": "#f4511e" + }, + "text": { + "dark": "foreground", + "light": "#292d3e" + }, + "textMuted": { + "dark": "comment", + "light": "#8796b0" + }, + "textWeak": { + "dark": "commentWeak", + "light": "8796b0Weak" + }, + "background": { + "dark": "#292d3e", + "light": "#fafafa" + }, + "backgroundPanel": { + "dark": "#1e2132", + "light": "#f5f5f5" + }, + "backgroundElement": { + "dark": "#32364a", + "light": "#e7e7e8" + }, + "border": { + "dark": "#32364a", + "light": "#e0e0e0" + }, + "borderActive": { + "dark": "blue", + "light": "#4976eb" + }, + "borderSubtle": { + "dark": "#1e2132", + "light": "#eeeeee" + }, + "diffAdded": { + "dark": "green", + "light": "#91b859" + }, + "diffRemoved": { + "dark": "red", + "light": "#e53935" + }, + "diffContext": { + "dark": "comment", + "light": "#8796b0" + }, + "diffHunkHeader": { + "dark": "cyan", + "light": "#00acc1" + }, + "diffHighlightAdded": { + "dark": "green", + "light": "#91b859" + }, + "diffHighlightRemoved": { + "dark": "red", + "light": "#e53935" + }, + "diffAddedBg": { + "dark": "#2e3c2b", + "light": "#e8f5e9" + }, + "diffRemovedBg": { + "dark": "#3c2b2b", + "light": "#ffebee" + }, + "diffContextBg": { + "dark": "#1e2132", + "light": "#f5f5f5" + }, + "diffLineNumber": { + "dark": "#a0a2af", + "light": "#6a6e70" + }, + "diffAddedLineNumberBg": { + "dark": "#2e3c2b", + "light": "#e8f5e9" + }, + "diffRemovedLineNumberBg": { + "dark": "#3c2b2b", + "light": "#ffebee" + }, + "markdownText": { + "dark": "foreground", + "light": "#292d3e" + }, + "markdownHeading": { + "dark": "purple", + "light": "#a854f2" + }, + "markdownLink": { + "dark": "blue", + "light": "#4976eb" + }, + "markdownLinkText": { + "dark": "cyan", + "light": "#00acc1" + }, + "markdownCode": { + "dark": "green", + "light": "#91b859" + }, + "markdownBlockQuote": { + "dark": "comment", + "light": "#8796b0" + }, + "markdownEmph": { + "dark": "yellow", + "light": "#ffb300" + }, + "markdownStrong": { + "dark": "orange", + "light": "#f4511e" + }, + "markdownHorizontalRule": { + "dark": "comment", + "light": "#8796b0" + }, + "markdownListItem": { + "dark": "blue", + "light": "#4976eb" + }, + "markdownListEnumeration": { + "dark": "cyan", + "light": "#00acc1" + }, + "markdownImage": { + "dark": "blue", + "light": "#4976eb" + }, + "markdownImageText": { + "dark": "cyan", + "light": "#00acc1" + }, + "markdownCodeBlock": { + "dark": "foreground", + "light": "#292d3e" + }, + "syntaxComment": { + "dark": "comment", + "light": "#8796b0" + }, + "syntaxKeyword": { + "dark": "purple", + "light": "#a854f2" + }, + "syntaxFunction": { + "dark": "blue", + "light": "#4976eb" + }, + "syntaxVariable": { + "dark": "foreground", + "light": "#292d3e" + }, + "syntaxString": { + "dark": "green", + "light": "#91b859" + }, + "syntaxNumber": { + "dark": "orange", + "light": "#f4511e" + }, + "syntaxType": { + "dark": "yellow", + "light": "#ffb300" + }, + "syntaxOperator": { + "dark": "cyan", + "light": "#00acc1" + }, + "syntaxPunctuation": { + "dark": "foreground", + "light": "#292d3e" + } + }, + "appearance": "light", + "id": "palenight-light", + "name": "Palenight Light" +} diff --git a/src/generated_themes/palenight.json b/src/generated_themes/palenight.json index 28c7b40..ad053c6 100644 --- a/src/generated_themes/palenight.json +++ b/src/generated_themes/palenight.json @@ -224,5 +224,6 @@ "dark": "foreground", "light": "#292d3e" } - } + }, + "appearance": "dark" } diff --git a/src/generated_themes/rosepine-light.json b/src/generated_themes/rosepine-light.json new file mode 100644 index 0000000..28da0ae --- /dev/null +++ b/src/generated_themes/rosepine-light.json @@ -0,0 +1,243 @@ +{ + "$schema": "https://opencode.ai/theme.json", + "defs": { + "base": "#191724", + "surface": "#1f1d2e", + "overlay": "#26233a", + "muted": "#6e6a86", + "subtle": "#908caa", + "text": "#e0def4", + "love": "#eb6f92", + "gold": "#f6c177", + "rose": "#ebbcba", + "pine": "#31748f", + "foam": "#9ccfd8", + "iris": "#c4a7e7", + "highlightLow": "#21202e", + "highlightMed": "#403d52", + "highlightHigh": "#524f67", + "moonBase": "#232136", + "moonSurface": "#2a273f", + "moonOverlay": "#393552", + "moonMuted": "#6e6a86", + "moonSubtle": "#908caa", + "moonText": "#e0def4", + "dawnBase": "#faf4ed", + "dawnSurface": "#fffaf3", + "dawnOverlay": "#f2e9e1", + "dawnMuted": "#9893a5", + "dawnSubtle": "#797593", + "dawnText": "#575279", + "mutedWeak": "#6e6a86", + "dawnMutedWeak": "#9893a5" + }, + "theme": { + "primary": { + "dark": "foam", + "light": "pine" + }, + "secondary": { + "dark": "iris", + "light": "#907aa9" + }, + "accent": { + "dark": "rose", + "light": "#d7827e" + }, + "error": { + "dark": "love", + "light": "#b4637a" + }, + "warning": { + "dark": "gold", + "light": "#ea9d34" + }, + "success": { + "dark": "pine", + "light": "#286983" + }, + "info": { + "dark": "foam", + "light": "#56949f" + }, + "text": { + "dark": "#e0def4", + "light": "#575279" + }, + "textMuted": { + "dark": "muted", + "light": "dawnMuted" + }, + "textWeak": { + "dark": "mutedWeak", + "light": "dawnMutedWeak" + }, + "background": { + "dark": "#191724", + "light": "#faf4ed" + }, + "backgroundPanel": { + "dark": "surface", + "light": "dawnSurface" + }, + "backgroundElement": { + "dark": "overlay", + "light": "dawnOverlay" + }, + "border": { + "dark": "highlightMed", + "light": "#dfdad9" + }, + "borderActive": { + "dark": "foam", + "light": "pine" + }, + "borderSubtle": { + "dark": "highlightLow", + "light": "#f4ede8" + }, + "diffAdded": { + "dark": "pine", + "light": "#286983" + }, + "diffRemoved": { + "dark": "love", + "light": "#b4637a" + }, + "diffContext": { + "dark": "muted", + "light": "dawnMuted" + }, + "diffHunkHeader": { + "dark": "iris", + "light": "#907aa9" + }, + "diffHighlightAdded": { + "dark": "pine", + "light": "#286983" + }, + "diffHighlightRemoved": { + "dark": "love", + "light": "#b4637a" + }, + "diffAddedBg": { + "dark": "#1f2d3a", + "light": "#e5f2f3" + }, + "diffRemovedBg": { + "dark": "#3a1f2d", + "light": "#fce5e8" + }, + "diffContextBg": { + "dark": "surface", + "light": "dawnSurface" + }, + "diffLineNumber": { + "dark": "#9491a6", + "light": "#6c6875" + }, + "diffAddedLineNumberBg": { + "dark": "#1f2d3a", + "light": "#e5f2f3" + }, + "diffRemovedLineNumberBg": { + "dark": "#3a1f2d", + "light": "#fce5e8" + }, + "markdownText": { + "dark": "#e0def4", + "light": "#575279" + }, + "markdownHeading": { + "dark": "iris", + "light": "#907aa9" + }, + "markdownLink": { + "dark": "foam", + "light": "pine" + }, + "markdownLinkText": { + "dark": "rose", + "light": "#d7827e" + }, + "markdownCode": { + "dark": "pine", + "light": "#286983" + }, + "markdownBlockQuote": { + "dark": "muted", + "light": "dawnMuted" + }, + "markdownEmph": { + "dark": "gold", + "light": "#ea9d34" + }, + "markdownStrong": { + "dark": "love", + "light": "#b4637a" + }, + "markdownHorizontalRule": { + "dark": "highlightMed", + "light": "#dfdad9" + }, + "markdownListItem": { + "dark": "foam", + "light": "pine" + }, + "markdownListEnumeration": { + "dark": "rose", + "light": "#d7827e" + }, + "markdownImage": { + "dark": "foam", + "light": "pine" + }, + "markdownImageText": { + "dark": "rose", + "light": "#d7827e" + }, + "markdownCodeBlock": { + "dark": "#e0def4", + "light": "#575279" + }, + "syntaxComment": { + "dark": "muted", + "light": "dawnMuted" + }, + "syntaxKeyword": { + "dark": "pine", + "light": "#286983" + }, + "syntaxFunction": { + "dark": "rose", + "light": "#d7827e" + }, + "syntaxVariable": { + "dark": "#e0def4", + "light": "#575279" + }, + "syntaxString": { + "dark": "gold", + "light": "#ea9d34" + }, + "syntaxNumber": { + "dark": "iris", + "light": "#907aa9" + }, + "syntaxType": { + "dark": "foam", + "light": "#56949f" + }, + "syntaxOperator": { + "dark": "subtle", + "light": "dawnSubtle" + }, + "syntaxPunctuation": { + "dark": "subtle", + "light": "dawnSubtle" + } + }, + "appearance": "light", + "id": "rosepine-light", + "name": "Rosepine Light" +} diff --git a/src/generated_themes/rosepine.json b/src/generated_themes/rosepine.json index 2be90e2..4c5492d 100644 --- a/src/generated_themes/rosepine.json +++ b/src/generated_themes/rosepine.json @@ -73,8 +73,8 @@ "light": "dawnMutedWeak" }, "background": { - "dark": "base", - "light": "dawnBase" + "dark": "#191724", + "light": "#faf4ed" }, "backgroundPanel": { "dark": "surface", @@ -236,5 +236,6 @@ "dark": "subtle", "light": "dawnSubtle" } - } + }, + "appearance": "dark" } diff --git a/src/generated_themes/solarized-light.json b/src/generated_themes/solarized-light.json new file mode 100644 index 0000000..a2ccbd0 --- /dev/null +++ b/src/generated_themes/solarized-light.json @@ -0,0 +1,232 @@ +{ + "$schema": "https://opencode.ai/theme.json", + "defs": { + "base03": "#002b36", + "base02": "#073642", + "base01": "#586e75", + "base00": "#657b83", + "base0": "#839496", + "base1": "#93a1a1", + "base2": "#eee8d5", + "base3": "#fdf6e3", + "yellow": "#b58900", + "orange": "#cb4b16", + "red": "#dc322f", + "magenta": "#d33682", + "violet": "#6c71c4", + "blue": "#268bd2", + "cyan": "#2aa198", + "green": "#859900", + "base01Weak": "#586e75", + "base1Weak": "#93a1a1" + }, + "theme": { + "primary": { + "dark": "blue", + "light": "blue" + }, + "secondary": { + "dark": "violet", + "light": "violet" + }, + "accent": { + "dark": "cyan", + "light": "cyan" + }, + "error": { + "dark": "red", + "light": "red" + }, + "warning": { + "dark": "yellow", + "light": "yellow" + }, + "success": { + "dark": "green", + "light": "green" + }, + "info": { + "dark": "orange", + "light": "orange" + }, + "text": { + "dark": "base0", + "light": "base00" + }, + "textMuted": { + "dark": "base01", + "light": "base1" + }, + "textWeak": { + "dark": "base01Weak", + "light": "base1Weak" + }, + "background": { + "dark": "#002b36", + "light": "#fdf6e3" + }, + "backgroundPanel": { + "dark": "base02", + "light": "base2" + }, + "backgroundElement": { + "dark": "#073642", + "light": "#eee8d5" + }, + "border": { + "dark": "base02", + "light": "base2" + }, + "borderActive": { + "dark": "base01", + "light": "base1" + }, + "borderSubtle": { + "dark": "#073642", + "light": "#eee8d5" + }, + "diffAdded": { + "dark": "green", + "light": "green" + }, + "diffRemoved": { + "dark": "red", + "light": "red" + }, + "diffContext": { + "dark": "base01", + "light": "base1" + }, + "diffHunkHeader": { + "dark": "base01", + "light": "base1" + }, + "diffHighlightAdded": { + "dark": "green", + "light": "green" + }, + "diffHighlightRemoved": { + "dark": "red", + "light": "red" + }, + "diffAddedBg": { + "dark": "#073642", + "light": "#eee8d5" + }, + "diffRemovedBg": { + "dark": "#073642", + "light": "#eee8d5" + }, + "diffContextBg": { + "dark": "base02", + "light": "base2" + }, + "diffLineNumber": { + "dark": "#8b9b9f", + "light": "#5f6969" + }, + "diffAddedLineNumberBg": { + "dark": "#073642", + "light": "#eee8d5" + }, + "diffRemovedLineNumberBg": { + "dark": "#073642", + "light": "#eee8d5" + }, + "markdownText": { + "dark": "base0", + "light": "base00" + }, + "markdownHeading": { + "dark": "blue", + "light": "blue" + }, + "markdownLink": { + "dark": "cyan", + "light": "cyan" + }, + "markdownLinkText": { + "dark": "violet", + "light": "violet" + }, + "markdownCode": { + "dark": "green", + "light": "green" + }, + "markdownBlockQuote": { + "dark": "base01", + "light": "base1" + }, + "markdownEmph": { + "dark": "yellow", + "light": "yellow" + }, + "markdownStrong": { + "dark": "orange", + "light": "orange" + }, + "markdownHorizontalRule": { + "dark": "base01", + "light": "base1" + }, + "markdownListItem": { + "dark": "blue", + "light": "blue" + }, + "markdownListEnumeration": { + "dark": "cyan", + "light": "cyan" + }, + "markdownImage": { + "dark": "cyan", + "light": "cyan" + }, + "markdownImageText": { + "dark": "violet", + "light": "violet" + }, + "markdownCodeBlock": { + "dark": "base0", + "light": "base00" + }, + "syntaxComment": { + "dark": "base01", + "light": "base1" + }, + "syntaxKeyword": { + "dark": "green", + "light": "green" + }, + "syntaxFunction": { + "dark": "blue", + "light": "blue" + }, + "syntaxVariable": { + "dark": "cyan", + "light": "cyan" + }, + "syntaxString": { + "dark": "cyan", + "light": "cyan" + }, + "syntaxNumber": { + "dark": "magenta", + "light": "magenta" + }, + "syntaxType": { + "dark": "yellow", + "light": "yellow" + }, + "syntaxOperator": { + "dark": "green", + "light": "green" + }, + "syntaxPunctuation": { + "dark": "base0", + "light": "base00" + } + }, + "appearance": "light", + "id": "solarized-light", + "name": "Solarized Light" +} diff --git a/src/generated_themes/solarized.json b/src/generated_themes/solarized.json index 17f0c8a..c9b4963 100644 --- a/src/generated_themes/solarized.json +++ b/src/generated_themes/solarized.json @@ -62,8 +62,8 @@ "light": "base1Weak" }, "background": { - "dark": "base03", - "light": "base3" + "dark": "#002b36", + "light": "#fdf6e3" }, "backgroundPanel": { "dark": "base02", @@ -225,5 +225,6 @@ "dark": "base0", "light": "base00" } - } + }, + "appearance": "dark" } diff --git a/src/generated_themes/synthwave84-light.json b/src/generated_themes/synthwave84-light.json new file mode 100644 index 0000000..54c17aa --- /dev/null +++ b/src/generated_themes/synthwave84-light.json @@ -0,0 +1,235 @@ +{ + "$schema": "https://opencode.ai/theme.json", + "defs": { + "background": "#262335", + "backgroundAlt": "#1e1a29", + "backgroundPanel": "#2a2139", + "foreground": "#ffffff", + "foregroundMuted": "#848bbd", + "pink": "#ff7edb", + "pinkBright": "#ff92df", + "cyan": "#36f9f6", + "cyanBright": "#72f1f8", + "yellow": "#fede5d", + "yellowBright": "#fff95d", + "orange": "#ff8b39", + "orangeBright": "#ff9f43", + "purple": "#b084eb", + "purpleBright": "#c792ea", + "red": "#fe4450", + "redBright": "#ff5e5b", + "green": "#72f1b8", + "greenBright": "#97f1d8", + "foregroundMutedWeak": "#848bbd", + "5c5c8aWeak": "#5c5c8a" + }, + "theme": { + "primary": { + "dark": "cyan", + "light": "#00bcd4" + }, + "secondary": { + "dark": "pink", + "light": "#e91e63" + }, + "accent": { + "dark": "purple", + "light": "#9c27b0" + }, + "error": { + "dark": "red", + "light": "#f44336" + }, + "warning": { + "dark": "yellow", + "light": "#ff9800" + }, + "success": { + "dark": "green", + "light": "#4caf50" + }, + "info": { + "dark": "orange", + "light": "#ff5722" + }, + "text": { + "dark": "foreground", + "light": "#262335" + }, + "textMuted": { + "dark": "foregroundMuted", + "light": "#5c5c8a" + }, + "textWeak": { + "dark": "foregroundMutedWeak", + "light": "5c5c8aWeak" + }, + "background": { + "dark": "#262335", + "light": "#fafafa" + }, + "backgroundPanel": { + "dark": "#1e1a29", + "light": "#f5f5f5" + }, + "backgroundElement": { + "dark": "#2a2139", + "light": "#eeeeee" + }, + "border": { + "dark": "#495495", + "light": "#e0e0e0" + }, + "borderActive": { + "dark": "cyan", + "light": "#00bcd4" + }, + "borderSubtle": { + "dark": "#241b2f", + "light": "#f0f0f0" + }, + "diffAdded": { + "dark": "green", + "light": "#4caf50" + }, + "diffRemoved": { + "dark": "red", + "light": "#f44336" + }, + "diffContext": { + "dark": "foregroundMuted", + "light": "#5c5c8a" + }, + "diffHunkHeader": { + "dark": "purple", + "light": "#9c27b0" + }, + "diffHighlightAdded": { + "dark": "greenBright", + "light": "#4caf50" + }, + "diffHighlightRemoved": { + "dark": "redBright", + "light": "#f44336" + }, + "diffAddedBg": { + "dark": "#1a3a2a", + "light": "#e8f5e9" + }, + "diffRemovedBg": { + "dark": "#3a1a2a", + "light": "#ffebee" + }, + "diffContextBg": { + "dark": "#1e1a29", + "light": "#f5f5f5" + }, + "diffLineNumber": { + "dark": "#959bc1", + "light": "textMuted" + }, + "diffAddedLineNumberBg": { + "dark": "#1a3a2a", + "light": "#e8f5e9" + }, + "diffRemovedLineNumberBg": { + "dark": "#3a1a2a", + "light": "#ffebee" + }, + "markdownText": { + "dark": "foreground", + "light": "#262335" + }, + "markdownHeading": { + "dark": "pink", + "light": "#e91e63" + }, + "markdownLink": { + "dark": "cyan", + "light": "#00bcd4" + }, + "markdownLinkText": { + "dark": "purple", + "light": "#9c27b0" + }, + "markdownCode": { + "dark": "green", + "light": "#4caf50" + }, + "markdownBlockQuote": { + "dark": "foregroundMuted", + "light": "#5c5c8a" + }, + "markdownEmph": { + "dark": "yellow", + "light": "#ff9800" + }, + "markdownStrong": { + "dark": "orange", + "light": "#ff5722" + }, + "markdownHorizontalRule": { + "dark": "#495495", + "light": "#e0e0e0" + }, + "markdownListItem": { + "dark": "cyan", + "light": "#00bcd4" + }, + "markdownListEnumeration": { + "dark": "purple", + "light": "#9c27b0" + }, + "markdownImage": { + "dark": "cyan", + "light": "#00bcd4" + }, + "markdownImageText": { + "dark": "purple", + "light": "#9c27b0" + }, + "markdownCodeBlock": { + "dark": "foreground", + "light": "#262335" + }, + "syntaxComment": { + "dark": "foregroundMuted", + "light": "#5c5c8a" + }, + "syntaxKeyword": { + "dark": "pink", + "light": "#e91e63" + }, + "syntaxFunction": { + "dark": "orange", + "light": "#ff5722" + }, + "syntaxVariable": { + "dark": "foreground", + "light": "#262335" + }, + "syntaxString": { + "dark": "yellow", + "light": "#ff9800" + }, + "syntaxNumber": { + "dark": "purple", + "light": "#9c27b0" + }, + "syntaxType": { + "dark": "cyan", + "light": "#00bcd4" + }, + "syntaxOperator": { + "dark": "pink", + "light": "#e91e63" + }, + "syntaxPunctuation": { + "dark": "foreground", + "light": "#262335" + } + }, + "appearance": "light", + "id": "synthwave84-light", + "name": "Synthwave84 Light" +} diff --git a/src/generated_themes/synthwave84.json b/src/generated_themes/synthwave84.json index 05b8f0e..5a27e4f 100644 --- a/src/generated_themes/synthwave84.json +++ b/src/generated_themes/synthwave84.json @@ -228,5 +228,6 @@ "dark": "foreground", "light": "#262335" } - } + }, + "appearance": "dark" } diff --git a/src/generated_themes/tokyonight-light.json b/src/generated_themes/tokyonight-light.json new file mode 100644 index 0000000..45155a0 --- /dev/null +++ b/src/generated_themes/tokyonight-light.json @@ -0,0 +1,252 @@ +{ + "$schema": "https://opencode.ai/theme.json", + "defs": { + "darkStep1": "#1a1b26", + "darkStep2": "#1e2030", + "darkStep3": "#222436", + "darkStep4": "#292e42", + "darkStep5": "#3b4261", + "darkStep6": "#545c7e", + "darkStep7": "#737aa2", + "darkStep8": "#9099b2", + "darkStep9": "#82aaff", + "darkStep10": "#89b4fa", + "darkStep11": "#828bb8", + "darkStep12": "#c8d3f5", + "darkRed": "#ff757f", + "darkOrange": "#ff966c", + "darkYellow": "#ffc777", + "darkGreen": "#c3e88d", + "darkCyan": "#86e1fc", + "darkPurple": "#c099ff", + "lightStep1": "#e1e2e7", + "lightStep2": "#d5d6db", + "lightStep3": "#c8c9ce", + "lightStep4": "#b9bac1", + "lightStep5": "#a8aecb", + "lightStep6": "#9699a8", + "lightStep7": "#737a8c", + "lightStep8": "#5a607d", + "lightStep9": "#2e7de9", + "lightStep10": "#1a6ce7", + "lightStep11": "#8990a3", + "lightStep12": "#3760bf", + "lightRed": "#f52a65", + "lightOrange": "#b15c00", + "lightYellow": "#8c6c3e", + "lightGreen": "#587539", + "lightCyan": "#007197", + "lightPurple": "#9854f1", + "darkStep11Weak": "#828bb8", + "lightStep11Weak": "#8990a3" + }, + "theme": { + "primary": { + "dark": "darkStep9", + "light": "lightStep9" + }, + "secondary": { + "dark": "darkPurple", + "light": "lightPurple" + }, + "accent": { + "dark": "darkOrange", + "light": "lightOrange" + }, + "error": { + "dark": "darkRed", + "light": "lightRed" + }, + "warning": { + "dark": "darkOrange", + "light": "lightOrange" + }, + "success": { + "dark": "darkGreen", + "light": "lightGreen" + }, + "info": { + "dark": "darkStep9", + "light": "lightStep9" + }, + "text": { + "dark": "darkStep12", + "light": "lightStep12" + }, + "textMuted": { + "dark": "darkStep11", + "light": "lightStep11" + }, + "textWeak": { + "dark": "darkStep11Weak", + "light": "lightStep11Weak" + }, + "background": { + "dark": "#1a1b26", + "light": "#e1e2e7" + }, + "backgroundPanel": { + "dark": "darkStep2", + "light": "lightStep2" + }, + "backgroundElement": { + "dark": "darkStep3", + "light": "lightStep3" + }, + "border": { + "dark": "darkStep7", + "light": "lightStep7" + }, + "borderActive": { + "dark": "darkStep8", + "light": "lightStep8" + }, + "borderSubtle": { + "dark": "darkStep6", + "light": "lightStep6" + }, + "diffAdded": { + "dark": "#4fd6be", + "light": "#1e725c" + }, + "diffRemoved": { + "dark": "#c53b53", + "light": "#c53b53" + }, + "diffContext": { + "dark": "#828bb8", + "light": "#7086b5" + }, + "diffHunkHeader": { + "dark": "#828bb8", + "light": "#7086b5" + }, + "diffHighlightAdded": { + "dark": "#b8db87", + "light": "#4db380" + }, + "diffHighlightRemoved": { + "dark": "#e26a75", + "light": "#f52a65" + }, + "diffAddedBg": { + "dark": "#20303b", + "light": "#d5e5d5" + }, + "diffRemovedBg": { + "dark": "#37222c", + "light": "#f7d8db" + }, + "diffContextBg": { + "dark": "darkStep2", + "light": "lightStep2" + }, + "diffLineNumber": { + "dark": "#8f909a", + "light": "#59595b" + }, + "diffAddedLineNumberBg": { + "dark": "#1b2b34", + "light": "#c5d5c5" + }, + "diffRemovedLineNumberBg": { + "dark": "#2d1f26", + "light": "#e7c8cb" + }, + "markdownText": { + "dark": "darkStep12", + "light": "lightStep12" + }, + "markdownHeading": { + "dark": "darkPurple", + "light": "lightPurple" + }, + "markdownLink": { + "dark": "darkStep9", + "light": "lightStep9" + }, + "markdownLinkText": { + "dark": "darkCyan", + "light": "lightCyan" + }, + "markdownCode": { + "dark": "darkGreen", + "light": "lightGreen" + }, + "markdownBlockQuote": { + "dark": "darkYellow", + "light": "lightYellow" + }, + "markdownEmph": { + "dark": "darkYellow", + "light": "lightYellow" + }, + "markdownStrong": { + "dark": "darkOrange", + "light": "lightOrange" + }, + "markdownHorizontalRule": { + "dark": "darkStep11", + "light": "lightStep11" + }, + "markdownListItem": { + "dark": "darkStep9", + "light": "lightStep9" + }, + "markdownListEnumeration": { + "dark": "darkCyan", + "light": "lightCyan" + }, + "markdownImage": { + "dark": "darkStep9", + "light": "lightStep9" + }, + "markdownImageText": { + "dark": "darkCyan", + "light": "lightCyan" + }, + "markdownCodeBlock": { + "dark": "darkStep12", + "light": "lightStep12" + }, + "syntaxComment": { + "dark": "darkStep11", + "light": "lightStep11" + }, + "syntaxKeyword": { + "dark": "darkPurple", + "light": "lightPurple" + }, + "syntaxFunction": { + "dark": "darkStep9", + "light": "lightStep9" + }, + "syntaxVariable": { + "dark": "darkRed", + "light": "lightRed" + }, + "syntaxString": { + "dark": "darkGreen", + "light": "lightGreen" + }, + "syntaxNumber": { + "dark": "darkOrange", + "light": "lightOrange" + }, + "syntaxType": { + "dark": "darkYellow", + "light": "lightYellow" + }, + "syntaxOperator": { + "dark": "darkCyan", + "light": "lightCyan" + }, + "syntaxPunctuation": { + "dark": "darkStep12", + "light": "lightStep12" + } + }, + "appearance": "light", + "id": "tokyonight-light", + "name": "Tokyonight Light" +} diff --git a/src/generated_themes/tokyonight.json b/src/generated_themes/tokyonight.json index f886e17..09f098e 100644 --- a/src/generated_themes/tokyonight.json +++ b/src/generated_themes/tokyonight.json @@ -82,8 +82,8 @@ "light": "lightStep11Weak" }, "background": { - "dark": "darkStep1", - "light": "lightStep1" + "dark": "#1a1b26", + "light": "#e1e2e7" }, "backgroundPanel": { "dark": "darkStep2", @@ -245,5 +245,6 @@ "dark": "darkStep12", "light": "lightStep12" } - } + }, + "appearance": "dark" } diff --git a/src/generated_themes/vercel-light.json b/src/generated_themes/vercel-light.json new file mode 100644 index 0000000..121666c --- /dev/null +++ b/src/generated_themes/vercel-light.json @@ -0,0 +1,254 @@ +{ + "$schema": "https://opencode.ai/theme.json", + "defs": { + "background100": "#0A0A0A", + "background200": "#000000", + "gray100": "#1A1A1A", + "gray200": "#1F1F1F", + "gray300": "#292929", + "gray400": "#2E2E2E", + "gray500": "#454545", + "gray600": "#878787", + "gray700": "#8F8F8F", + "gray900": "#A1A1A1", + "gray1000": "#EDEDED", + "blue600": "#0099FF", + "blue700": "#0070F3", + "blue900": "#52A8FF", + "blue1000": "#EBF8FF", + "red700": "#E5484D", + "red900": "#FF6166", + "red1000": "#FDECED", + "amber700": "#FFB224", + "amber900": "#F2A700", + "amber1000": "#FDF4DC", + "green700": "#46A758", + "green900": "#63C46D", + "green1000": "#E6F9E9", + "teal700": "#12A594", + "teal900": "#0AC7AC", + "purple700": "#8E4EC6", + "purple900": "#BF7AF0", + "pink700": "#E93D82", + "pink900": "#F75590", + "highlightPink": "#FF0080", + "highlightPurple": "#F81CE5", + "cyan": "#50E3C2", + "lightBackground": "#FFFFFF", + "lightGray100": "#FAFAFA", + "lightGray200": "#EAEAEA", + "lightGray600": "#666666", + "lightGray1000": "#171717", + "gray600Weak": "#878787", + "lightGray600Weak": "#666666" + }, + "theme": { + "primary": { + "dark": "blue700", + "light": "blue700" + }, + "secondary": { + "dark": "blue900", + "light": "#0062D1" + }, + "accent": { + "dark": "purple700", + "light": "purple700" + }, + "error": { + "dark": "red700", + "light": "#DC3545" + }, + "warning": { + "dark": "amber700", + "light": "#FF9500" + }, + "success": { + "dark": "green700", + "light": "#388E3C" + }, + "info": { + "dark": "blue900", + "light": "blue700" + }, + "text": { + "dark": "gray1000", + "light": "lightGray1000" + }, + "textMuted": { + "dark": "gray600", + "light": "lightGray600" + }, + "textWeak": { + "dark": "gray600Weak", + "light": "lightGray600Weak" + }, + "background": { + "dark": "#000000", + "light": "#FFFFFF" + }, + "backgroundPanel": { + "dark": "gray100", + "light": "lightGray100" + }, + "backgroundElement": { + "dark": "gray300", + "light": "lightGray200" + }, + "border": { + "dark": "gray200", + "light": "lightGray200" + }, + "borderActive": { + "dark": "gray500", + "light": "#999999" + }, + "borderSubtle": { + "dark": "gray100", + "light": "#EAEAEA" + }, + "diffAdded": { + "dark": "green900", + "light": "green700" + }, + "diffRemoved": { + "dark": "red900", + "light": "red700" + }, + "diffContext": { + "dark": "gray600", + "light": "lightGray600" + }, + "diffHunkHeader": { + "dark": "gray600", + "light": "lightGray600" + }, + "diffHighlightAdded": { + "dark": "green900", + "light": "green700" + }, + "diffHighlightRemoved": { + "dark": "red900", + "light": "red700" + }, + "diffAddedBg": { + "dark": "#0B1D0F", + "light": "#E6F9E9" + }, + "diffRemovedBg": { + "dark": "#2A1314", + "light": "#FDECED" + }, + "diffContextBg": { + "dark": "background200", + "light": "lightBackground" + }, + "diffLineNumber": { + "dark": "#8a8a8a", + "light": "textMuted" + }, + "diffAddedLineNumberBg": { + "dark": "#0F2613", + "light": "#D6F5D6" + }, + "diffRemovedLineNumberBg": { + "dark": "#3C1618", + "light": "#FFE5E5" + }, + "markdownText": { + "dark": "gray1000", + "light": "lightGray1000" + }, + "markdownHeading": { + "dark": "purple900", + "light": "purple700" + }, + "markdownLink": { + "dark": "blue900", + "light": "blue700" + }, + "markdownLinkText": { + "dark": "teal900", + "light": "teal700" + }, + "markdownCode": { + "dark": "green900", + "light": "green700" + }, + "markdownBlockQuote": { + "dark": "gray600", + "light": "lightGray600" + }, + "markdownEmph": { + "dark": "amber900", + "light": "amber700" + }, + "markdownStrong": { + "dark": "pink900", + "light": "pink700" + }, + "markdownHorizontalRule": { + "dark": "gray500", + "light": "#999999" + }, + "markdownListItem": { + "dark": "gray1000", + "light": "lightGray1000" + }, + "markdownListEnumeration": { + "dark": "blue900", + "light": "blue700" + }, + "markdownImage": { + "dark": "teal900", + "light": "teal700" + }, + "markdownImageText": { + "dark": "cyan", + "light": "teal700" + }, + "markdownCodeBlock": { + "dark": "gray1000", + "light": "lightGray1000" + }, + "syntaxComment": { + "dark": "gray600", + "light": "#888888" + }, + "syntaxKeyword": { + "dark": "pink900", + "light": "pink700" + }, + "syntaxFunction": { + "dark": "purple900", + "light": "purple700" + }, + "syntaxVariable": { + "dark": "blue900", + "light": "blue700" + }, + "syntaxString": { + "dark": "green900", + "light": "green700" + }, + "syntaxNumber": { + "dark": "amber900", + "light": "amber700" + }, + "syntaxType": { + "dark": "teal900", + "light": "teal700" + }, + "syntaxOperator": { + "dark": "pink900", + "light": "pink700" + }, + "syntaxPunctuation": { + "dark": "gray1000", + "light": "lightGray1000" + } + }, + "appearance": "light", + "id": "vercel-light", + "name": "Vercel Light" +} diff --git a/src/generated_themes/vercel.json b/src/generated_themes/vercel.json index 452acd8..28958b8 100644 --- a/src/generated_themes/vercel.json +++ b/src/generated_themes/vercel.json @@ -84,8 +84,8 @@ "light": "lightGray600Weak" }, "background": { - "dark": "background200", - "light": "lightBackground" + "dark": "#000000", + "light": "#FFFFFF" }, "backgroundPanel": { "dark": "gray100", @@ -247,5 +247,6 @@ "dark": "gray1000", "light": "lightGray1000" } - } + }, + "appearance": "dark" } diff --git a/src/generated_themes/vesper-light.json b/src/generated_themes/vesper-light.json new file mode 100644 index 0000000..faa7352 --- /dev/null +++ b/src/generated_themes/vesper-light.json @@ -0,0 +1,221 @@ +{ + "$schema": "https://opencode.ai/theme.json", + "defs": { + "vesperBg": "#101010", + "vesperFg": "#FFF", + "vesperComment": "#8b8b8b", + "vesperKeyword": "#A0A0A0", + "vesperFunction": "#FFC799", + "vesperString": "#99FFE4", + "vesperNumber": "#FFC799", + "vesperError": "#FF8080", + "vesperWarning": "#FFC799", + "vesperSuccess": "#99FFE4", + "vesperMuted": "#A0A0A0" + }, + "theme": { + "primary": { + "dark": "#FFC799", + "light": "#FFC799" + }, + "secondary": { + "dark": "#99FFE4", + "light": "#99FFE4" + }, + "accent": { + "dark": "#FFC799", + "light": "#FFC799" + }, + "error": { + "dark": "vesperError", + "light": "vesperError" + }, + "warning": { + "dark": "vesperWarning", + "light": "vesperWarning" + }, + "success": { + "dark": "vesperSuccess", + "light": "vesperSuccess" + }, + "info": { + "dark": "#FFC799", + "light": "#FFC799" + }, + "text": { + "dark": "vesperFg", + "light": "vesperBg" + }, + "textMuted": { + "dark": "vesperMuted", + "light": "vesperMuted" + }, + "background": { + "dark": "#101010", + "light": "#FFF" + }, + "backgroundPanel": { + "dark": "vesperBg", + "light": "#F0F0F0" + }, + "backgroundElement": { + "dark": "vesperBg", + "light": "#E0E0E0" + }, + "border": { + "dark": "#282828", + "light": "#D0D0D0" + }, + "borderActive": { + "dark": "#FFC799", + "light": "#FFC799" + }, + "borderSubtle": { + "dark": "#1C1C1C", + "light": "#E8E8E8" + }, + "diffAdded": { + "dark": "vesperSuccess", + "light": "vesperSuccess" + }, + "diffRemoved": { + "dark": "vesperError", + "light": "vesperError" + }, + "diffContext": { + "dark": "vesperMuted", + "light": "vesperMuted" + }, + "diffHunkHeader": { + "dark": "vesperMuted", + "light": "vesperMuted" + }, + "diffHighlightAdded": { + "dark": "vesperSuccess", + "light": "vesperSuccess" + }, + "diffHighlightRemoved": { + "dark": "vesperError", + "light": "vesperError" + }, + "diffAddedBg": { + "dark": "#0d2818", + "light": "#e8f5e8" + }, + "diffRemovedBg": { + "dark": "#281a1a", + "light": "#f5e8e8" + }, + "diffContextBg": { + "dark": "vesperBg", + "light": "#F8F8F8" + }, + "diffLineNumber": { + "dark": "textMuted", + "light": "#6a6a6a" + }, + "diffAddedLineNumberBg": { + "dark": "#0d2818", + "light": "#e8f5e8" + }, + "diffRemovedLineNumberBg": { + "dark": "#281a1a", + "light": "#f5e8e8" + }, + "markdownText": { + "dark": "vesperFg", + "light": "vesperBg" + }, + "markdownHeading": { + "dark": "#FFC799", + "light": "#FFC799" + }, + "markdownLink": { + "dark": "#FFC799", + "light": "#FFC799" + }, + "markdownLinkText": { + "dark": "vesperMuted", + "light": "vesperMuted" + }, + "markdownCode": { + "dark": "vesperMuted", + "light": "vesperMuted" + }, + "markdownBlockQuote": { + "dark": "vesperFg", + "light": "vesperBg" + }, + "markdownEmph": { + "dark": "vesperFg", + "light": "vesperBg" + }, + "markdownStrong": { + "dark": "vesperFg", + "light": "vesperBg" + }, + "markdownHorizontalRule": { + "dark": "#65737E", + "light": "#65737E" + }, + "markdownListItem": { + "dark": "vesperFg", + "light": "vesperBg" + }, + "markdownListEnumeration": { + "dark": "vesperFg", + "light": "vesperBg" + }, + "markdownImage": { + "dark": "#FFC799", + "light": "#FFC799" + }, + "markdownImageText": { + "dark": "vesperMuted", + "light": "vesperMuted" + }, + "markdownCodeBlock": { + "dark": "vesperFg", + "light": "vesperBg" + }, + "syntaxComment": { + "dark": "vesperComment", + "light": "vesperComment" + }, + "syntaxKeyword": { + "dark": "vesperKeyword", + "light": "vesperKeyword" + }, + "syntaxFunction": { + "dark": "vesperFunction", + "light": "vesperFunction" + }, + "syntaxVariable": { + "dark": "vesperFg", + "light": "vesperBg" + }, + "syntaxString": { + "dark": "vesperString", + "light": "vesperString" + }, + "syntaxNumber": { + "dark": "vesperNumber", + "light": "vesperNumber" + }, + "syntaxType": { + "dark": "vesperFunction", + "light": "vesperFunction" + }, + "syntaxOperator": { + "dark": "vesperKeyword", + "light": "vesperKeyword" + }, + "syntaxPunctuation": { + "dark": "vesperFg", + "light": "vesperBg" + } + }, + "appearance": "light", + "id": "vesper-light", + "name": "Vesper Light" +} diff --git a/src/generated_themes/vesper.json b/src/generated_themes/vesper.json index 2f11358..39cc087 100644 --- a/src/generated_themes/vesper.json +++ b/src/generated_themes/vesper.json @@ -51,7 +51,7 @@ "light": "vesperMuted" }, "background": { - "dark": "vesperBg", + "dark": "#101010", "light": "#FFF" }, "backgroundPanel": { @@ -214,5 +214,6 @@ "dark": "vesperFg", "light": "vesperBg" } - } + }, + "appearance": "dark" } diff --git a/src/generated_themes/zenburn-light.json b/src/generated_themes/zenburn-light.json new file mode 100644 index 0000000..11c6aec --- /dev/null +++ b/src/generated_themes/zenburn-light.json @@ -0,0 +1,232 @@ +{ + "$schema": "https://opencode.ai/theme.json", + "defs": { + "bg": "#3f3f3f", + "bgAlt": "#4f4f4f", + "bgPanel": "#5f5f5f", + "fg": "#dcdccc", + "fgMuted": "#9f9f9f", + "red": "#cc9393", + "redBright": "#dca3a3", + "green": "#7f9f7f", + "greenBright": "#8fb28f", + "yellow": "#f0dfaf", + "yellowDim": "#e0cf9f", + "blue": "#8cd0d3", + "blueDim": "#7cb8bb", + "magenta": "#dc8cc3", + "cyan": "#93e0e3", + "orange": "#dfaf8f", + "fgMutedWeak": "#9f9f9f", + "6f6f6fWeak": "#6f6f6f" + }, + "theme": { + "primary": { + "dark": "blue", + "light": "#5f7f8f" + }, + "secondary": { + "dark": "magenta", + "light": "#8f5f8f" + }, + "accent": { + "dark": "cyan", + "light": "#5f8f8f" + }, + "error": { + "dark": "red", + "light": "#8f5f5f" + }, + "warning": { + "dark": "yellow", + "light": "#8f8f5f" + }, + "success": { + "dark": "green", + "light": "#5f8f5f" + }, + "info": { + "dark": "orange", + "light": "#8f7f5f" + }, + "text": { + "dark": "fg", + "light": "#3f3f3f" + }, + "textMuted": { + "dark": "fgMuted", + "light": "#6f6f6f" + }, + "textWeak": { + "dark": "fgMutedWeak", + "light": "6f6f6fWeak" + }, + "background": { + "dark": "#3f3f3f", + "light": "#ffffef" + }, + "backgroundPanel": { + "dark": "bgAlt", + "light": "#f5f5e5" + }, + "backgroundElement": { + "dark": "bgPanel", + "light": "#ebebdb" + }, + "border": { + "dark": "#5f5f5f", + "light": "#d0d0c0" + }, + "borderActive": { + "dark": "blue", + "light": "#5f7f8f" + }, + "borderSubtle": { + "dark": "#4f4f4f", + "light": "#e0e0d0" + }, + "diffAdded": { + "dark": "green", + "light": "#5f8f5f" + }, + "diffRemoved": { + "dark": "red", + "light": "#8f5f5f" + }, + "diffContext": { + "dark": "fgMuted", + "light": "#6f6f6f" + }, + "diffHunkHeader": { + "dark": "cyan", + "light": "#5f8f8f" + }, + "diffHighlightAdded": { + "dark": "greenBright", + "light": "#5f8f5f" + }, + "diffHighlightRemoved": { + "dark": "redBright", + "light": "#8f5f5f" + }, + "diffAddedBg": { + "dark": "#4f5f4f", + "light": "#efffef" + }, + "diffRemovedBg": { + "dark": "#5f4f4f", + "light": "#ffefef" + }, + "diffContextBg": { + "dark": "bgAlt", + "light": "#f5f5e5" + }, + "diffLineNumber": { + "dark": "#d2d2d2", + "light": "textMuted" + }, + "diffAddedLineNumberBg": { + "dark": "#4f5f4f", + "light": "#efffef" + }, + "diffRemovedLineNumberBg": { + "dark": "#5f4f4f", + "light": "#ffefef" + }, + "markdownText": { + "dark": "fg", + "light": "#3f3f3f" + }, + "markdownHeading": { + "dark": "yellow", + "light": "#8f8f5f" + }, + "markdownLink": { + "dark": "blue", + "light": "#5f7f8f" + }, + "markdownLinkText": { + "dark": "cyan", + "light": "#5f8f8f" + }, + "markdownCode": { + "dark": "green", + "light": "#5f8f5f" + }, + "markdownBlockQuote": { + "dark": "fgMuted", + "light": "#6f6f6f" + }, + "markdownEmph": { + "dark": "yellowDim", + "light": "#8f8f5f" + }, + "markdownStrong": { + "dark": "orange", + "light": "#8f7f5f" + }, + "markdownHorizontalRule": { + "dark": "fgMuted", + "light": "#6f6f6f" + }, + "markdownListItem": { + "dark": "blue", + "light": "#5f7f8f" + }, + "markdownListEnumeration": { + "dark": "cyan", + "light": "#5f8f8f" + }, + "markdownImage": { + "dark": "blue", + "light": "#5f7f8f" + }, + "markdownImageText": { + "dark": "cyan", + "light": "#5f8f8f" + }, + "markdownCodeBlock": { + "dark": "fg", + "light": "#3f3f3f" + }, + "syntaxComment": { + "dark": "#7f9f7f", + "light": "#5f7f5f" + }, + "syntaxKeyword": { + "dark": "yellow", + "light": "#8f8f5f" + }, + "syntaxFunction": { + "dark": "blue", + "light": "#5f7f8f" + }, + "syntaxVariable": { + "dark": "fg", + "light": "#3f3f3f" + }, + "syntaxString": { + "dark": "red", + "light": "#8f5f5f" + }, + "syntaxNumber": { + "dark": "greenBright", + "light": "#5f8f5f" + }, + "syntaxType": { + "dark": "cyan", + "light": "#5f8f8f" + }, + "syntaxOperator": { + "dark": "yellow", + "light": "#8f8f5f" + }, + "syntaxPunctuation": { + "dark": "fg", + "light": "#3f3f3f" + } + }, + "appearance": "light", + "id": "zenburn-light", + "name": "Zenburn Light" +} diff --git a/src/generated_themes/zenburn.json b/src/generated_themes/zenburn.json index b9260a7..7462d92 100644 --- a/src/generated_themes/zenburn.json +++ b/src/generated_themes/zenburn.json @@ -62,7 +62,7 @@ "light": "6f6f6fWeak" }, "background": { - "dark": "bg", + "dark": "#3f3f3f", "light": "#ffffef" }, "backgroundPanel": { @@ -225,5 +225,6 @@ "dark": "fg", "light": "#3f3f3f" } - } + }, + "appearance": "dark" } diff --git a/src/persistence/prefs.rs b/src/persistence/prefs.rs index 8276b78..becf863 100644 --- a/src/persistence/prefs.rs +++ b/src/persistence/prefs.rs @@ -7,6 +7,7 @@ use super::{ensure_data_dir, get_data_dir}; const MODEL_PREFS_KEY: &str = "model_preferences"; const ACTIVE_THEME_KEY: &str = "active_theme"; +const THEME_TRANSPARENT_KEY: &str = "theme_transparent"; const TERMINAL_TITLE_ITEMS_KEY: &str = "terminal_title_items"; const COMPACT_MODE_KEY: &str = "compact_mode"; @@ -216,6 +217,22 @@ impl PrefsDAO { self.set_pref(COMPACT_MODE_KEY, &enabled.to_string()) } + /// Whether the main UI background should be transparent (terminal shows through). + /// Default: false (solid theme background). + pub fn get_theme_transparent(&self) -> Result { + Ok(self + .get_pref(THEME_TRANSPARENT_KEY)? + .map(|v| matches!(v.trim().to_ascii_lowercase().as_str(), "1" | "true" | "yes")) + .unwrap_or(false)) + } + + pub fn set_theme_transparent(&self, transparent: bool) -> Result<()> { + self.set_pref( + THEME_TRANSPARENT_KEY, + if transparent { "true" } else { "false" }, + ) + } + pub fn get_terminal_title_items( &self, ) -> Result>> { diff --git a/src/theme.rs b/src/theme.rs index 73b0287..f57deac 100644 --- a/src/theme.rs +++ b/src/theme.rs @@ -14,6 +14,10 @@ const BUNDLED_THEMES: &[(&str, &str)] = &[ ("aura", include_str!("generated_themes/aura.json")), ("ayu", include_str!("generated_themes/ayu.json")), ("carbonfox", include_str!("generated_themes/carbonfox.json")), + ( + "carbonfox-light", + include_str!("generated_themes/carbonfox-light.json"), + ), ( "catppuccin", include_str!("generated_themes/catppuccin.json"), @@ -22,52 +26,160 @@ const BUNDLED_THEMES: &[(&str, &str)] = &[ "catppuccin-frappe", include_str!("generated_themes/catppuccin-frappe.json"), ), + ( + "catppuccin-light", + include_str!("generated_themes/catppuccin-light.json"), + ), ( "catppuccin-macchiato", include_str!("generated_themes/catppuccin-macchiato.json"), ), ("cobalt2", include_str!("generated_themes/cobalt2.json")), + ( + "cobalt2-light", + include_str!("generated_themes/cobalt2-light.json"), + ), ("cursor", include_str!("generated_themes/cursor.json")), + ( + "cursor-light", + include_str!("generated_themes/cursor-light.json"), + ), ("dracula", include_str!("generated_themes/dracula.json")), + ( + "dracula-light", + include_str!("generated_themes/dracula-light.json"), + ), ( "everforest", include_str!("generated_themes/everforest.json"), ), + ( + "everforest-light", + include_str!("generated_themes/everforest-light.json"), + ), ("flexoki", include_str!("generated_themes/flexoki.json")), + ( + "flexoki-light", + include_str!("generated_themes/flexoki-light.json"), + ), ("github", include_str!("generated_themes/github.json")), + ( + "github-light", + include_str!("generated_themes/github-light.json"), + ), ("gruvbox", include_str!("generated_themes/gruvbox.json")), + ( + "gruvbox-light", + include_str!("generated_themes/gruvbox-light.json"), + ), ("kanagawa", include_str!("generated_themes/kanagawa.json")), + ( + "kanagawa-light", + include_str!("generated_themes/kanagawa-light.json"), + ), ( "lucent-orng", include_str!("generated_themes/lucent-orng.json"), ), + ( + "lucent-orng-light", + include_str!("generated_themes/lucent-orng-light.json"), + ), ("material", include_str!("generated_themes/material.json")), + ( + "material-light", + include_str!("generated_themes/material-light.json"), + ), ("matrix", include_str!("generated_themes/matrix.json")), + ( + "matrix-light", + include_str!("generated_themes/matrix-light.json"), + ), ("mercury", include_str!("generated_themes/mercury.json")), + ( + "mercury-light", + include_str!("generated_themes/mercury-light.json"), + ), ("monokai", include_str!("generated_themes/monokai.json")), + ( + "monokai-light", + include_str!("generated_themes/monokai-light.json"), + ), ("nightowl", include_str!("generated_themes/nightowl.json")), ("nord", include_str!("generated_themes/nord.json")), + ( + "nord-light", + include_str!("generated_themes/nord-light.json"), + ), ("one-dark", include_str!("generated_themes/one-dark.json")), + ( + "one-dark-light", + include_str!("generated_themes/one-dark-light.json"), + ), ("opencode", include_str!("generated_themes/opencode.json")), + ( + "opencode-light", + include_str!("generated_themes/opencode-light.json"), + ), ("orng", include_str!("generated_themes/orng.json")), + ( + "orng-light", + include_str!("generated_themes/orng-light.json"), + ), ( "osaka-jade", include_str!("generated_themes/osaka-jade.json"), ), + ( + "osaka-jade-light", + include_str!("generated_themes/osaka-jade-light.json"), + ), ("palenight", include_str!("generated_themes/palenight.json")), + ( + "palenight-light", + include_str!("generated_themes/palenight-light.json"), + ), ("rosepine", include_str!("generated_themes/rosepine.json")), + ( + "rosepine-light", + include_str!("generated_themes/rosepine-light.json"), + ), ("solarized", include_str!("generated_themes/solarized.json")), + ( + "solarized-light", + include_str!("generated_themes/solarized-light.json"), + ), ( "synthwave84", include_str!("generated_themes/synthwave84.json"), ), + ( + "synthwave84-light", + include_str!("generated_themes/synthwave84-light.json"), + ), ( "tokyonight", include_str!("generated_themes/tokyonight.json"), ), + ( + "tokyonight-light", + include_str!("generated_themes/tokyonight-light.json"), + ), ("vercel", include_str!("generated_themes/vercel.json")), + ( + "vercel-light", + include_str!("generated_themes/vercel-light.json"), + ), ("vesper", include_str!("generated_themes/vesper.json")), + ( + "vesper-light", + include_str!("generated_themes/vesper-light.json"), + ), ("zenburn", include_str!("generated_themes/zenburn.json")), + ( + "zenburn-light", + include_str!("generated_themes/zenburn-light.json"), + ), ]; #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] @@ -170,10 +282,36 @@ pub fn agent_mode_color(agent_mode: Option<&str>, colors: &ThemeColors) -> ratat agent_color(agent_mode.unwrap_or("Plan"), colors) } +/// Whether a theme is designed for light or dark terminal windows. +/// Searchable in /themes via description ("light" / "dark"). +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum ThemeAppearance { + Dark, + Light, +} + +impl ThemeAppearance { + pub fn as_str(self) -> &'static str { + match self { + ThemeAppearance::Dark => "dark", + ThemeAppearance::Light => "light", + } + } + + pub fn parse(s: &str) -> Option { + match s.trim().to_ascii_lowercase().as_str() { + "dark" => Some(ThemeAppearance::Dark), + "light" => Some(ThemeAppearance::Light), + _ => None, + } + } +} + #[derive(Debug, Clone)] pub struct Theme { pub name: String, pub id: String, + pub appearance: ThemeAppearance, data: ThemeData, } @@ -376,21 +514,44 @@ impl Theme { .and_then(|x| x.as_str()) .map(|s| s.to_string()) .unwrap_or_else(|| id.clone()); + let declared_appearance = v + .get("appearance") + .and_then(|x| x.as_str()) + .and_then(ThemeAppearance::parse); if v.get("light").is_some() && v.get("dark").is_some() { let desktop: DesktopTheme = serde_json::from_value(v)?; + let appearance = declared_appearance.unwrap_or_else(|| { + appearance_from_color(parse_hex(&desktop.dark.overrides.background_base)) + }); return Ok(Self { name: desktop.name.clone(), id: desktop.id.clone(), + appearance, data: ThemeData::Desktop(desktop), }); } if v.get("defs").is_some() && v.get("theme").is_some() { let tui: TuiTheme = serde_json::from_value(v)?; + let appearance = declared_appearance.unwrap_or_else(|| { + let bg = resolve_tui_color(&tui, "background", true); + let bg = if bg == ratatui::style::Color::Reset { + let panel = resolve_tui_color(&tui, "backgroundPanel", true); + if panel == ratatui::style::Color::Reset { + resolve_tui_color(&tui, "backgroundMenu", true) + } else { + panel + } + } else { + bg + }; + appearance_from_color(bg) + }); return Ok(Self { name, id, + appearance, data: ThemeData::Tui(tui), }); } @@ -398,8 +559,14 @@ impl Theme { Err(format!("Unsupported theme schema for {}", derived_id).into()) } + /// Resolve theme colors. When `transparent` is true, main `background` + /// becomes `Color::Reset` so the terminal shows through. pub fn get_colors(&self, dark: bool) -> ThemeColors { - match &self.data { + self.get_colors_with(dark, false) + } + + pub fn get_colors_with(&self, dark: bool, transparent: bool) -> ThemeColors { + let mut colors = match &self.data { ThemeData::Desktop(theme) => { let mode = if dark { &theme.dark } else { &theme.light }; @@ -555,13 +722,26 @@ impl Theme { v } }; - let background = resolve("background"); + // Prefer solid backgrounds: if theme declares transparent, fall back to panel. + let mut background = resolve("background"); + let panel = resolve("backgroundPanel"); + let menu = resolve("backgroundMenu"); + if background == ratatui::style::Color::Reset { + background = if panel != ratatui::style::Color::Reset { + panel + } else if menu != ratatui::style::Color::Reset { + menu + } else if dark { + ratatui::style::Color::Rgb(0x0d, 0x0d, 0x0d) + } else { + ratatui::style::Color::Rgb(0xfa, 0xfa, 0xfa) + }; + } let dialog_background = { - let v = resolve("backgroundPanel"); - if v == ratatui::style::Color::Reset { - background + if panel != ratatui::style::Color::Reset { + panel } else { - v + background } }; let background_element = resolve_or("backgroundElement", dialog_background); @@ -638,7 +818,28 @@ impl Theme { diff_gutter, } } + }; + + if transparent { + colors.background = ratatui::style::Color::Reset; + } + + colors + } +} + +fn appearance_from_color(color: ratatui::style::Color) -> ThemeAppearance { + match color { + ratatui::style::Color::Rgb(r, g, b) => { + let lum = 0.2126 * (r as f32) + 0.7152 * (g as f32) + 0.0722 * (b as f32); + if lum > 140.0 { + ThemeAppearance::Light + } else { + ThemeAppearance::Dark + } } + // Reset / unknown → treat as dark (most terminals default dark). + _ => ThemeAppearance::Dark, } } @@ -711,6 +912,64 @@ mod tests { assert!(themes.iter().any(|theme| theme.id == "ayu")); } + #[test] + fn bundled_themes_have_appearance() { + let themes = Theme::bundled_themes(); + for theme in &themes { + // Every theme must classify as light or dark. + assert!( + matches!( + theme.appearance, + super::ThemeAppearance::Dark | super::ThemeAppearance::Light + ), + "{} missing appearance", + theme.id + ); + } + let grokday = themes.iter().find(|t| t.id == "grokday").unwrap(); + assert_eq!(grokday.appearance, super::ThemeAppearance::Light); + let groknight = themes.iter().find(|t| t.id == "groknight").unwrap(); + assert_eq!(groknight.appearance, super::ThemeAppearance::Dark); + + // Dual-mode OpenCode themes emit a selectable *-light sibling. + let github_light = themes.iter().find(|t| t.id == "github-light").unwrap(); + assert_eq!(github_light.appearance, super::ThemeAppearance::Light); + let light_count = themes + .iter() + .filter(|t| matches!(t.appearance, super::ThemeAppearance::Light)) + .count(); + assert!( + light_count >= 25, + "expected dual-mode light siblings, got {light_count} light themes" + ); + // Fake dual-mode (dark===light) must not emit a sibling. + assert!(themes.iter().all(|t| t.id != "aura-light")); + assert!(themes.iter().all(|t| t.id != "nightowl-light")); + } + + #[test] + fn transparent_override_resets_background_only() { + let theme = Theme::load_builtin_default(); + let solid = theme.get_colors_with(true, false); + let clear = theme.get_colors_with(true, true); + assert_ne!(solid.background, ratatui::style::Color::Reset); + assert_eq!(clear.background, ratatui::style::Color::Reset); + assert_eq!(clear.dialog_background, solid.dialog_background); + assert_eq!(clear.primary, solid.primary); + } + + #[test] + fn lucent_theme_defaults_to_solid_background() { + let themes = Theme::bundled_themes(); + let lucent = themes.iter().find(|t| t.id == "lucent-orng").unwrap(); + let colors = lucent.get_colors(true); + assert_ne!( + colors.background, + ratatui::style::Color::Reset, + "lucent-orng should paint a solid bg by default" + ); + } + #[test] fn bundled_themes_include_grok_mono() { let themes = Theme::bundled_themes(); @@ -719,8 +978,8 @@ mod tests { .iter() .find(|theme| theme.id == id) .unwrap_or_else(|| panic!("{id} theme should be bundled")); - for light in [true, false] { - let colors = theme.get_colors(light); + for dark in [true, false] { + let colors = theme.get_colors(dark); assert_ne!(colors.background, ratatui::style::Color::Reset, "{id} bg"); assert_ne!(colors.primary, ratatui::style::Color::Reset, "{id} primary"); assert_ne!(colors.text, ratatui::style::Color::Reset, "{id} text"); diff --git a/src/themes/crabcode-orange.json b/src/themes/crabcode-orange.json index 9eaa858..6145c93 100644 --- a/src/themes/crabcode-orange.json +++ b/src/themes/crabcode-orange.json @@ -2,6 +2,7 @@ "$schema": "https://opencode.ai/desktop-theme.json", "name": "Crabcode Orange", "id": "crabcode-orange", + "appearance": "dark", "light": { "seeds": { "neutral": "#faf9f5", diff --git a/src/themes/grokday.json b/src/themes/grokday.json index 995483c..7e8b244 100644 --- a/src/themes/grokday.json +++ b/src/themes/grokday.json @@ -2,6 +2,7 @@ "$schema": "https://opencode.ai/desktop-theme.json", "name": "Grok Day", "id": "grokday", + "appearance": "light", "light": { "seeds": { "neutral": "#eeeeee", diff --git a/src/themes/groknight.json b/src/themes/groknight.json index 3c0b610..9819867 100644 --- a/src/themes/groknight.json +++ b/src/themes/groknight.json @@ -2,6 +2,7 @@ "$schema": "https://opencode.ai/desktop-theme.json", "name": "Grok Night", "id": "groknight", + "appearance": "dark", "light": { "seeds": { "neutral": "#141414", diff --git a/src/ui/components/dialog.rs b/src/ui/components/dialog.rs index acb3d21..be4173c 100644 --- a/src/ui/components/dialog.rs +++ b/src/ui/components/dialog.rs @@ -479,6 +479,18 @@ impl Dialog { ) -> Option { let mut best_score = None; + // Exact appearance tags ("light" / "dark") should filter strictly so + // fuzzy matches don't leak opposite themes (e.g. "light" → "groknight"). + let query_norm = Self::normalize_search_text(query); + if matches!(query_norm.as_str(), "light" | "dark") { + let desc = Self::normalize_search_text(&item.description); + let grp = Self::normalize_search_text(group); + if desc == query_norm || grp == query_norm { + return Some(u32::MAX); + } + return None; + } + Self::consider_search_field( pattern, matcher, diff --git a/src/views/chat.rs b/src/views/chat.rs index 4cd0584..52f10cd 100644 --- a/src/views/chat.rs +++ b/src/views/chat.rs @@ -469,8 +469,10 @@ pub fn render_chat( } if is_subagent_view { - let blank = Block::default(); - f.render_widget(blank, above_status_chunks[6]); + f.render_widget( + Block::default().style(Style::default().bg(colors.background)), + above_status_chunks[6], + ); let status_bar = StatusBar::new(version, cwd, branch, agent, model); status_bar.render(f, main_chunks[1], colors); @@ -551,8 +553,10 @@ pub fn render_chat( let help = Paragraph::new(help_line).alignment(Alignment::Right); f.render_widget(help, status_chunks[3]); - let blank = Block::default(); - f.render_widget(blank, above_status_chunks[6]); + f.render_widget( + Block::default().style(Style::default().bg(colors.background)), + above_status_chunks[6], + ); let status_bar = StatusBar::new(version, cwd, branch, agent, model); status_bar.render(f, main_chunks[1], colors); diff --git a/src/views/home.rs b/src/views/home.rs index c6ada42..3027303 100644 --- a/src/views/home.rs +++ b/src/views/home.rs @@ -250,8 +250,11 @@ pub fn render_home( let help = Paragraph::new(help_line).alignment(Alignment::Right); f.render_widget(help, status_chunks[2]); - let blank = Block::default(); - f.render_widget(blank, home_chunks[3]); + // Keep spacer on theme canvas (don't Reset over solid bg). + f.render_widget( + Block::default().style(Style::default().bg(colors.background)), + home_chunks[3], + ); let status_bar = StatusBar::new(version, cwd, branch, agent, model); status_bar.render(f, main_chunks[1], colors); diff --git a/src/views/themes_dialog.rs b/src/views/themes_dialog.rs index 1197b96..2d7a5b8 100644 --- a/src/views/themes_dialog.rs +++ b/src/views/themes_dialog.rs @@ -1,30 +1,53 @@ -use ratatui::crossterm::event::{KeyCode, KeyEvent, MouseButton, MouseEvent, MouseEventKind}; +use ratatui::crossterm::event::{ + KeyCode, KeyEvent, KeyModifiers, MouseButton, MouseEvent, MouseEventKind, +}; use ratatui::{layout::Rect, Frame}; use crate::theme::ThemeColors; -use crate::ui::components::dialog::{Dialog, DialogItem}; +use crate::ui::components::dialog::{Dialog, DialogAction, DialogItem}; #[derive(Debug, Clone, PartialEq)] pub enum ThemesDialogAction { PreviewTheme { theme_id: String }, SelectTheme { theme_id: String }, + ToggleTransparent, None, } #[derive(Debug)] pub struct ThemesDialogState { pub dialog: Dialog, + /// Whether the main UI background is transparent (terminal shows through). + pub transparent: bool, } impl ThemesDialogState { - pub fn new(dialog: Dialog) -> Self { - Self { dialog } + pub fn new(dialog: Dialog, transparent: bool) -> Self { + let mut state = Self { + dialog, + transparent, + }; + state.sync_actions(); + state } - pub fn with_items(title: impl Into, items: Vec) -> Self { - Self { - dialog: Dialog::with_items(title, items), - } + pub fn with_items(title: impl Into, items: Vec, transparent: bool) -> Self { + Self::new(Dialog::with_items(title, items), transparent) + } + + pub fn set_transparent(&mut self, transparent: bool) { + self.transparent = transparent; + self.sync_actions(); + } + + pub fn toggle_transparent(&mut self) -> bool { + self.transparent = !self.transparent; + self.sync_actions(); + self.transparent + } + + fn sync_actions(&mut self) { + self.dialog.actions = transparent_actions(self.transparent); } pub fn refresh_items(&mut self, items: Vec) { @@ -32,8 +55,12 @@ impl ThemesDialogState { let was_visible = self.dialog.is_visible(); let selected_index = self.dialog.selected_index; let items_clone = items.clone(); + let transparent = self.transparent; self.dialog = Dialog::with_items(title, items); + self.sync_actions(); + // Keep transparent flag in sync after rebuild. + let _ = transparent; if was_visible { self.dialog.show(); @@ -45,8 +72,34 @@ impl ThemesDialogState { } } -pub fn init_themes_dialog(title: impl Into, items: Vec) -> ThemesDialogState { - ThemesDialogState::with_items(title, items) +fn transparent_actions(transparent: bool) -> Vec { + let label = if transparent { + "transparent: on" + } else { + "transparent: off" + }; + vec![ + DialogAction { + key: "ctrl+t".to_string(), + label: label.to_string(), + }, + DialogAction { + key: "esc".to_string(), + label: "close".to_string(), + }, + DialogAction { + key: "enter".to_string(), + label: "select".to_string(), + }, + ] +} + +pub fn init_themes_dialog( + title: impl Into, + items: Vec, + transparent: bool, +) -> ThemesDialogState { + ThemesDialogState::with_items(title, items, transparent) } pub fn render_themes_dialog( @@ -66,6 +119,12 @@ pub fn handle_themes_dialog_key_event( return ThemesDialogAction::None; } + // Toggle transparency without leaving the dialog. + if event.code == KeyCode::Char('t') && event.modifiers == KeyModifiers::CONTROL { + dialog_state.toggle_transparent(); + return ThemesDialogAction::ToggleTransparent; + } + let before = dialog_state.dialog.get_selected().map(|it| it.id.clone()); match event.code { @@ -140,12 +199,12 @@ mod tests { use super::*; use ratatui::crossterm::event::KeyModifiers; - fn theme_item(id: &str, name: &str) -> DialogItem { + fn theme_item(id: &str, name: &str, appearance: &str) -> DialogItem { DialogItem { id: id.to_string(), name: name.to_string(), group: "Built in".to_string(), - description: String::new(), + description: appearance.to_string(), tip: None, provider_id: String::new(), active: false, @@ -168,9 +227,10 @@ mod tests { let mut state = init_themes_dialog( "Themes", vec![ - theme_item("ayu", "Ayu"), - theme_item("tokyonight", "Tokyo Night"), + theme_item("ayu", "Ayu", "dark"), + theme_item("tokyonight", "Tokyo Night", "dark"), ], + false, ); state.dialog.show(); state.dialog.dialog_area = Rect { @@ -203,9 +263,10 @@ mod tests { let mut state = init_themes_dialog( "Themes", vec![ - theme_item("ayu", "Ayu"), - theme_item("tokyonight", "Tokyo Night"), + theme_item("ayu", "Ayu", "dark"), + theme_item("tokyonight", "Tokyo Night", "dark"), ], + false, ); state.dialog.show(); state.dialog.dialog_area = Rect { @@ -228,4 +289,51 @@ mod tests { ); assert!(state.dialog.is_visible()); } + + #[test] + fn ctrl_t_toggles_transparent() { + let mut state = init_themes_dialog("Themes", vec![theme_item("ayu", "Ayu", "dark")], false); + state.dialog.show(); + + let action = handle_themes_dialog_key_event( + &mut state, + KeyEvent::new(KeyCode::Char('t'), KeyModifiers::CONTROL), + ); + assert_eq!(action, ThemesDialogAction::ToggleTransparent); + assert!(state.transparent); + assert!(state + .dialog + .actions + .iter() + .any(|a| a.label.contains("transparent: on"))); + + let action = handle_themes_dialog_key_event( + &mut state, + KeyEvent::new(KeyCode::Char('t'), KeyModifiers::CONTROL), + ); + assert_eq!(action, ThemesDialogAction::ToggleTransparent); + assert!(!state.transparent); + } + + #[test] + fn search_matches_appearance_description() { + let mut state = init_themes_dialog( + "Themes", + vec![ + theme_item("grokday", "Grok Day", "light"), + theme_item("groknight", "Grok Night", "dark"), + ], + false, + ); + state.dialog.show(); + state.dialog.set_search_query("light"); + let visible: Vec<_> = state + .dialog + .filtered_items + .iter() + .flat_map(|(_, items)| items.iter().map(|i| i.id.as_str())) + .collect(); + assert!(visible.contains(&"grokday")); + assert!(!visible.contains(&"groknight")); + } }