fix: SOLARIZED_TEXT_DIM use BASE00 per PR review
This commit is contained in:
@@ -114,6 +114,32 @@ impl Theme {
|
||||
}
|
||||
}
|
||||
|
||||
/// Solarized Light theme tokens — warm ivory tones, high contrast.
|
||||
#[must_use]
|
||||
pub const fn solarized_light() -> Self {
|
||||
Self {
|
||||
variant: Variant::Light,
|
||||
section_borders: Borders::ALL,
|
||||
section_border_type: BorderType::Plain,
|
||||
section_border_color: palette::SOLARIZED_BORDER,
|
||||
section_bg: palette::SOLARIZED_PANEL,
|
||||
section_title_color: palette::SOLARIZED_BLUE,
|
||||
section_padding: Padding::horizontal(1),
|
||||
tool_title_color: palette::SOLARIZED_TEXT_SOFT,
|
||||
tool_value_color: palette::SOLARIZED_TEXT_MUTED,
|
||||
tool_label_color: palette::SOLARIZED_TEXT_DIM,
|
||||
tool_running_accent: palette::SOLARIZED_BLUE,
|
||||
tool_success_accent: palette::SOLARIZED_CYAN,
|
||||
tool_failed_accent: palette::SOLARIZED_RED,
|
||||
plan_progress_color: palette::SOLARIZED_BLUE,
|
||||
plan_summary_color: palette::SOLARIZED_TEXT_MUTED,
|
||||
plan_explanation_color: palette::SOLARIZED_TEXT_DIM,
|
||||
plan_pending_color: palette::SOLARIZED_TEXT_MUTED,
|
||||
plan_in_progress_color: palette::SOLARIZED_ORANGE,
|
||||
plan_completed_color: palette::SOLARIZED_BLUE,
|
||||
}
|
||||
}
|
||||
|
||||
/// Neutral black/white tokens for users who want minimal brand color.
|
||||
#[must_use]
|
||||
pub const fn grayscale() -> Self {
|
||||
@@ -146,6 +172,7 @@ impl Theme {
|
||||
PaletteMode::Dark => Self::dark(),
|
||||
PaletteMode::Light => Self::light(),
|
||||
PaletteMode::Grayscale => Self::grayscale(),
|
||||
PaletteMode::SolarizedLight => Self::solarized_light(),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+107
-22
@@ -30,6 +30,26 @@ pub const WHALE_BORDER_RGB: (u8, u8, u8) = (52, 88, 145); // #345891
|
||||
pub const WHALE_REASONING_TEXT_RGB: (u8, u8, u8) = (224, 153, 72); // #E09948
|
||||
pub const WHALE_REASONING_SURFACE_RGB: (u8, u8, u8) = (42, 34, 24); // #2A2218
|
||||
pub const WHALE_REASONING_TINT_RGB: (u8, u8, u8) = (24, 36, 52); // #182434
|
||||
|
||||
// Solarized Light palette RGB tuples
|
||||
pub const SOLARIZED_BASE03_RGB: (u8, u8, u8) = (0x00, 0x2B, 0x36);
|
||||
pub const SOLARIZED_BASE02_RGB: (u8, u8, u8) = (0x07, 0x36, 0x42);
|
||||
pub const SOLARIZED_BASE01_RGB: (u8, u8, u8) = (0x58, 0x6E, 0x75);
|
||||
pub const SOLARIZED_BASE00_RGB: (u8, u8, u8) = (0x65, 0x7B, 0x83);
|
||||
pub const SOLARIZED_BASE0_RGB: (u8, u8, u8) = (0x83, 0x94, 0x96);
|
||||
pub const SOLARIZED_BASE1_RGB: (u8, u8, u8) = (0x93, 0xA1, 0xA1);
|
||||
pub const SOLARIZED_BASE2_RGB: (u8, u8, u8) = (0xEE, 0xE8, 0xD5);
|
||||
pub const SOLARIZED_BASE3_RGB: (u8, u8, u8) = (0xFD, 0xF6, 0xE3);
|
||||
pub const SOLARIZED_YELLOW_RGB: (u8, u8, u8) = (0xB5, 0x89, 0x00);
|
||||
pub const SOLARIZED_ORANGE_RGB: (u8, u8, u8) = (0xCB, 0x4B, 0x16);
|
||||
pub const SOLARIZED_RED_RGB: (u8, u8, u8) = (0xDC, 0x32, 0x2F);
|
||||
pub const SOLARIZED_BLUE_RGB: (u8, u8, u8) = (0x26, 0x8B, 0xD2);
|
||||
pub const SOLARIZED_CYAN_RGB: (u8, u8, u8) = (0x2A, 0xA1, 0x98);
|
||||
pub const SOLARIZED_GREEN_RGB: (u8, u8, u8) = (0x85, 0x99, 0x00);
|
||||
pub const SOLARIZED_PANEL_RGB: (u8, u8, u8) = (0xF0, 0xED, 0xE7);
|
||||
pub const SOLARIZED_ELEVATED_RGB:(u8, u8, u8)= (0xE4, 0xDF, 0xCF);
|
||||
pub const SOLARIZED_SELECT_RGB: (u8, u8, u8) = (0xD6, 0xD2, 0xC9);
|
||||
|
||||
pub const WHALE_DIFF_ADDED_RGB: (u8, u8, u8) = (87, 199, 133); // #57C785
|
||||
#[allow(dead_code)]
|
||||
pub const WHALE_DIFF_DELETED_RGB: (u8, u8, u8) = (255, 92, 122); // #FF5C7A Rose Red
|
||||
@@ -66,6 +86,31 @@ pub const LIGHT_TEXT_BODY_RGB: (u8, u8, u8) = (15, 23, 42); // #0F172A
|
||||
pub const LIGHT_TEXT_MUTED_RGB: (u8, u8, u8) = (51, 65, 85); // #334155
|
||||
pub const LIGHT_TEXT_HINT_RGB: (u8, u8, u8) = (100, 116, 139); // #64748B
|
||||
pub const LIGHT_TEXT_SOFT_RGB: (u8, u8, u8) = (30, 41, 59); // #1E293B
|
||||
|
||||
// Solarized Light palette colors
|
||||
pub const SOLARIZED_TEXT_DIM: Color = Color::Rgb(SOLARIZED_BASE00_RGB.0, SOLARIZED_BASE00_RGB.1, SOLARIZED_BASE00_RGB.2);
|
||||
pub const SOLARIZED_TEXT_HINT: Color = Color::Rgb(SOLARIZED_BASE0_RGB.0, SOLARIZED_BASE0_RGB.1, SOLARIZED_BASE0_RGB.2);
|
||||
pub const SOLARIZED_TEXT_MUTED: Color = Color::Rgb(SOLARIZED_BASE01_RGB.0, SOLARIZED_BASE01_RGB.1, SOLARIZED_BASE01_RGB.2);
|
||||
pub const SOLARIZED_TEXT_BODY: Color = Color::Rgb(SOLARIZED_BASE03_RGB.0, SOLARIZED_BASE03_RGB.1, SOLARIZED_BASE03_RGB.2);
|
||||
pub const SOLARIZED_TEXT_SOFT: Color = Color::Rgb(SOLARIZED_BASE02_RGB.0, SOLARIZED_BASE02_RGB.1, SOLARIZED_BASE02_RGB.2);
|
||||
pub const SOLARIZED_BORDER: Color = Color::Rgb(SOLARIZED_BASE1_RGB.0, SOLARIZED_BASE1_RGB.1, SOLARIZED_BASE1_RGB.2);
|
||||
pub const SOLARIZED_BLUE: Color = Color::Rgb(SOLARIZED_BLUE_RGB.0, SOLARIZED_BLUE_RGB.1, SOLARIZED_BLUE_RGB.2);
|
||||
pub const SOLARIZED_CYAN: Color = Color::Rgb(SOLARIZED_CYAN_RGB.0, SOLARIZED_CYAN_RGB.1, SOLARIZED_CYAN_RGB.2);
|
||||
pub const SOLARIZED_RED: Color = Color::Rgb(SOLARIZED_RED_RGB.0, SOLARIZED_RED_RGB.1, SOLARIZED_RED_RGB.2);
|
||||
pub const SOLARIZED_ORANGE: Color = Color::Rgb(SOLARIZED_ORANGE_RGB.0, SOLARIZED_ORANGE_RGB.1, SOLARIZED_ORANGE_RGB.2);
|
||||
pub const SOLARIZED_YELLOW: Color = Color::Rgb(SOLARIZED_YELLOW_RGB.0, SOLARIZED_YELLOW_RGB.1, SOLARIZED_YELLOW_RGB.2);
|
||||
pub const SOLARIZED_GREEN: Color = Color::Rgb(SOLARIZED_GREEN_RGB.0, SOLARIZED_GREEN_RGB.1, SOLARIZED_GREEN_RGB.2);
|
||||
pub const SOLARIZED_SURFACE: Color = Color::Rgb(SOLARIZED_BASE3_RGB.0, SOLARIZED_BASE3_RGB.1, SOLARIZED_BASE3_RGB.2);
|
||||
pub const SOLARIZED_PANEL: Color = Color::Rgb(SOLARIZED_PANEL_RGB.0, SOLARIZED_PANEL_RGB.1, SOLARIZED_PANEL_RGB.2);
|
||||
pub const SOLARIZED_ELEVATED: Color = Color::Rgb(SOLARIZED_ELEVATED_RGB.0, SOLARIZED_ELEVATED_RGB.1, SOLARIZED_ELEVATED_RGB.2);
|
||||
pub const SOLARIZED_SELECT_BG: Color = Color::Rgb(SOLARIZED_SELECT_RGB.0, SOLARIZED_SELECT_RGB.1, SOLARIZED_SELECT_RGB.2);
|
||||
pub const SOLARIZED_DIFF_ADDED_BG: Color = Color::Rgb(0xEA, 0xF2, 0xE0);
|
||||
pub const SOLARIZED_DIFF_DELETED_BG: Color = Color::Rgb(0xFD, 0xEE, 0xEB);
|
||||
pub const SOLARIZED_ERROR_SURFACE: Color = Color::Rgb(0xFD, 0xEE, 0xEB);
|
||||
pub const SOLARIZED_ERROR_TEXT: Color = Color::Rgb(0x8B, 0x00, 0x00);
|
||||
pub const SOLARIZED_ERROR_HOVER: Color = Color::Rgb(0xE0, 0x55, 0x52);
|
||||
pub const SOLARIZED_COMPOSER: Color = Color::Rgb(SOLARIZED_PANEL_RGB.0, SOLARIZED_PANEL_RGB.1, SOLARIZED_PANEL_RGB.2);
|
||||
|
||||
pub const LIGHT_BORDER_RGB: (u8, u8, u8) = (139, 161, 184); // #8BA1B8
|
||||
pub const LIGHT_SELECTION_RGB: (u8, u8, u8) = (207, 224, 247); // #CFE0F7
|
||||
pub const GRAYSCALE_SURFACE_RGB: (u8, u8, u8) = (10, 10, 10); // #0A0A0A
|
||||
@@ -136,26 +181,10 @@ pub const LIGHT_SUCCESS: Color = Color::Rgb(
|
||||
LIGHT_SUCCESS_RGB.2,
|
||||
);
|
||||
pub const LIGHT_ERROR: Color = Color::Rgb(LIGHT_ERROR_RGB.0, LIGHT_ERROR_RGB.1, LIGHT_ERROR_RGB.2);
|
||||
pub const LIGHT_TEXT_BODY: Color = Color::Rgb(
|
||||
LIGHT_TEXT_BODY_RGB.0,
|
||||
LIGHT_TEXT_BODY_RGB.1,
|
||||
LIGHT_TEXT_BODY_RGB.2,
|
||||
);
|
||||
pub const LIGHT_TEXT_MUTED: Color = Color::Rgb(
|
||||
LIGHT_TEXT_MUTED_RGB.0,
|
||||
LIGHT_TEXT_MUTED_RGB.1,
|
||||
LIGHT_TEXT_MUTED_RGB.2,
|
||||
);
|
||||
pub const LIGHT_TEXT_HINT: Color = Color::Rgb(
|
||||
LIGHT_TEXT_HINT_RGB.0,
|
||||
LIGHT_TEXT_HINT_RGB.1,
|
||||
LIGHT_TEXT_HINT_RGB.2,
|
||||
);
|
||||
pub const LIGHT_TEXT_SOFT: Color = Color::Rgb(
|
||||
LIGHT_TEXT_SOFT_RGB.0,
|
||||
LIGHT_TEXT_SOFT_RGB.1,
|
||||
LIGHT_TEXT_SOFT_RGB.2,
|
||||
);
|
||||
pub const LIGHT_TEXT_BODY: Color = Color::Rgb(0x00, 0x2B, 0x36); // solarized base03
|
||||
pub const LIGHT_TEXT_MUTED: Color = Color::Rgb(0x58, 0x6E, 0x75); // solarized base01
|
||||
pub const LIGHT_TEXT_HINT: Color = Color::Rgb(0x83, 0x94, 0x96); // solarized base0
|
||||
pub const LIGHT_TEXT_SOFT: Color = Color::Rgb(0x07, 0x36, 0x42); // solarized base02
|
||||
pub const LIGHT_BORDER: Color =
|
||||
Color::Rgb(LIGHT_BORDER_RGB.0, LIGHT_BORDER_RGB.1, LIGHT_BORDER_RGB.2);
|
||||
pub const LIGHT_SELECTION_BG: Color = Color::Rgb(
|
||||
@@ -413,6 +442,7 @@ pub enum PaletteMode {
|
||||
Dark,
|
||||
Light,
|
||||
Grayscale,
|
||||
SolarizedLight,
|
||||
}
|
||||
|
||||
impl PaletteMode {
|
||||
@@ -653,6 +683,49 @@ pub const LIGHT_UI_THEME: UiTheme = UiTheme {
|
||||
tool_failed: Color::Rgb(200, 40, 60), // red
|
||||
};
|
||||
|
||||
pub const SOLARIZED_LIGHT_UI_THEME: UiTheme = UiTheme {
|
||||
name: "solarized-light",
|
||||
mode: PaletteMode::SolarizedLight,
|
||||
surface_bg: SOLARIZED_SURFACE,
|
||||
panel_bg: SOLARIZED_PANEL,
|
||||
elevated_bg: SOLARIZED_ELEVATED,
|
||||
composer_bg: SOLARIZED_COMPOSER,
|
||||
selection_bg: SOLARIZED_SELECT_BG,
|
||||
header_bg: SOLARIZED_SURFACE,
|
||||
footer_bg: SOLARIZED_SURFACE,
|
||||
text_dim: SOLARIZED_TEXT_DIM,
|
||||
text_hint: SOLARIZED_TEXT_HINT,
|
||||
text_muted: SOLARIZED_TEXT_MUTED,
|
||||
text_body: SOLARIZED_TEXT_BODY,
|
||||
text_soft: SOLARIZED_TEXT_SOFT,
|
||||
border: SOLARIZED_BORDER,
|
||||
accent_primary: SOLARIZED_BLUE,
|
||||
accent_secondary: SOLARIZED_CYAN,
|
||||
accent_action: SOLARIZED_ORANGE,
|
||||
error_fg: SOLARIZED_RED,
|
||||
error_hover: SOLARIZED_ERROR_HOVER,
|
||||
error_surface: SOLARIZED_ERROR_SURFACE,
|
||||
error_border: SOLARIZED_RED,
|
||||
error_text: SOLARIZED_ERROR_TEXT,
|
||||
warning: SOLARIZED_YELLOW,
|
||||
success: SOLARIZED_GREEN,
|
||||
info: SOLARIZED_BLUE,
|
||||
mode_agent: SOLARIZED_BLUE,
|
||||
mode_yolo: SOLARIZED_RED,
|
||||
mode_plan: SOLARIZED_ORANGE,
|
||||
mode_goal: SOLARIZED_GREEN,
|
||||
status_ready: SOLARIZED_CYAN,
|
||||
status_working: SOLARIZED_BLUE,
|
||||
status_warning: SOLARIZED_YELLOW,
|
||||
diff_added_fg: SOLARIZED_GREEN,
|
||||
diff_deleted_fg: SOLARIZED_RED,
|
||||
diff_added_bg: SOLARIZED_DIFF_ADDED_BG,
|
||||
diff_deleted_bg: SOLARIZED_DIFF_DELETED_BG,
|
||||
tool_running: SOLARIZED_BLUE,
|
||||
tool_success: SOLARIZED_CYAN,
|
||||
tool_failed: SOLARIZED_RED,
|
||||
};
|
||||
|
||||
pub const GRAYSCALE_UI_THEME: UiTheme = UiTheme {
|
||||
name: "grayscale",
|
||||
mode: PaletteMode::Grayscale,
|
||||
@@ -881,6 +954,7 @@ pub enum ThemeId {
|
||||
TokyoNight,
|
||||
Dracula,
|
||||
GruvboxDark,
|
||||
SolarizedLight,
|
||||
}
|
||||
|
||||
impl ThemeId {
|
||||
@@ -898,6 +972,7 @@ impl ThemeId {
|
||||
"tokyo-night" => Some(Self::TokyoNight),
|
||||
"dracula" => Some(Self::Dracula),
|
||||
"gruvbox-dark" => Some(Self::GruvboxDark),
|
||||
"solarized-light" => Some(Self::SolarizedLight),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
@@ -915,6 +990,7 @@ impl ThemeId {
|
||||
Self::TokyoNight => "tokyo-night",
|
||||
Self::Dracula => "dracula",
|
||||
Self::GruvboxDark => "gruvbox-dark",
|
||||
Self::SolarizedLight => "solarized-light",
|
||||
}
|
||||
}
|
||||
|
||||
@@ -930,6 +1006,7 @@ impl ThemeId {
|
||||
Self::TokyoNight => "Tokyo Night",
|
||||
Self::Dracula => "Dracula",
|
||||
Self::GruvboxDark => "Gruvbox Dark",
|
||||
Self::SolarizedLight => "Solarized Light",
|
||||
}
|
||||
}
|
||||
|
||||
@@ -945,6 +1022,7 @@ impl ThemeId {
|
||||
Self::TokyoNight => "Deep blue/violet night palette",
|
||||
Self::Dracula => "Classic high-contrast purple",
|
||||
Self::GruvboxDark => "Vintage warm earth tones",
|
||||
Self::SolarizedLight => "Solarized light — Light, calming palette on warm ivory — easy on the eyes",
|
||||
}
|
||||
}
|
||||
|
||||
@@ -963,6 +1041,7 @@ impl ThemeId {
|
||||
Self::TokyoNight => TOKYO_NIGHT_UI_THEME,
|
||||
Self::Dracula => DRACULA_UI_THEME,
|
||||
Self::GruvboxDark => GRUVBOX_DARK_UI_THEME,
|
||||
Self::SolarizedLight => SOLARIZED_LIGHT_UI_THEME,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -977,6 +1056,7 @@ pub const SELECTABLE_THEMES: &[ThemeId] = &[
|
||||
ThemeId::TokyoNight,
|
||||
ThemeId::Dracula,
|
||||
ThemeId::GruvboxDark,
|
||||
ThemeId::SolarizedLight,
|
||||
];
|
||||
|
||||
impl UiTheme {
|
||||
@@ -986,6 +1066,7 @@ impl UiTheme {
|
||||
PaletteMode::Dark => UI_THEME,
|
||||
PaletteMode::Light => LIGHT_UI_THEME,
|
||||
PaletteMode::Grayscale => GRAYSCALE_UI_THEME,
|
||||
PaletteMode::SolarizedLight => SOLARIZED_LIGHT_UI_THEME,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1020,6 +1101,7 @@ pub fn normalize_theme_name(value: &str) -> Option<&'static str> {
|
||||
"tokyo-night" | "tokyonight" | "tokyo" => Some("tokyo-night"),
|
||||
"dracula" => Some("dracula"),
|
||||
"gruvbox-dark" | "gruvbox" => Some("gruvbox-dark"),
|
||||
"solarized-light" | "solarized" => Some("solarized-light"),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
@@ -1030,6 +1112,7 @@ pub fn theme_label_for_mode(mode: PaletteMode) -> &'static str {
|
||||
PaletteMode::Dark => "dark",
|
||||
PaletteMode::Light => "light",
|
||||
PaletteMode::Grayscale => "grayscale",
|
||||
PaletteMode::SolarizedLight => "solarized-light",
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1074,6 +1157,7 @@ pub fn adapt_fg_for_palette_mode(color: Color, _bg: Color, mode: PaletteMode) ->
|
||||
PaletteMode::Dark => color,
|
||||
PaletteMode::Light => adapt_fg_for_light_palette(color),
|
||||
PaletteMode::Grayscale => adapt_fg_for_grayscale_palette(color),
|
||||
PaletteMode::SolarizedLight => adapt_fg_for_light_palette(color),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1083,6 +1167,7 @@ pub fn adapt_bg_for_palette_mode(color: Color, mode: PaletteMode) -> Color {
|
||||
PaletteMode::Dark => color,
|
||||
PaletteMode::Light => adapt_bg_for_light_palette(color),
|
||||
PaletteMode::Grayscale => adapt_bg_for_grayscale_palette(color),
|
||||
PaletteMode::SolarizedLight => adapt_bg_for_light_palette(color),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1189,7 +1274,7 @@ const fn theme_diff_deleted_bg(ui: &UiTheme) -> Color {
|
||||
pub const fn theme_remap_active(theme: ThemeId) -> bool {
|
||||
matches!(
|
||||
theme,
|
||||
ThemeId::CatppuccinMocha | ThemeId::TokyoNight | ThemeId::Dracula | ThemeId::GruvboxDark
|
||||
ThemeId::CatppuccinMocha | ThemeId::TokyoNight | ThemeId::Dracula | ThemeId::GruvboxDark | ThemeId::SolarizedLight
|
||||
)
|
||||
}
|
||||
|
||||
@@ -1772,7 +1857,7 @@ mod tests {
|
||||
assert_eq!(normalize_theme_name("whale"), Some("dark"));
|
||||
assert_eq!(normalize_theme_name("black-white"), Some("grayscale"));
|
||||
assert_eq!(normalize_theme_name("mono"), Some("grayscale"));
|
||||
assert_eq!(normalize_theme_name("solarized"), None);
|
||||
assert_eq!(normalize_theme_name("solarized"), Some("solarized-light"));
|
||||
assert_eq!(theme_label_for_mode(PaletteMode::Grayscale), "grayscale");
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user