feat(maestro): graphite TUI default + five accent presets
Replaces the army-green dark/light palettes with neutral graphite and adds ice-cyan, periwinkle, amber-phosphor, ember and orchid presets. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
f89be4a716
commit
bff0eddc12
@@ -174,10 +174,20 @@ pub struct TuiSection {
|
||||
/// Palette presets supported by the TUI's `[tui].theme` setting.
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||
pub enum TuiTheme {
|
||||
/// The terminal-native dark palette and the default.
|
||||
/// The graphite dark palette and the default.
|
||||
Dark,
|
||||
/// A high-contrast light palette.
|
||||
Light,
|
||||
/// Ice Cyan — cyan accent on the graphite base.
|
||||
IceCyan,
|
||||
/// Periwinkle — indigo base, blue-violet accent.
|
||||
Periwinkle,
|
||||
/// Amber Phosphor — CRT amber on warm graphite.
|
||||
AmberPhosphor,
|
||||
/// Ember — warm orange-red accent.
|
||||
Ember,
|
||||
/// Orchid — muted violet accent.
|
||||
Orchid,
|
||||
/// Named ANSI colours, allowing the terminal to provide the colour set.
|
||||
Ansi,
|
||||
/// Solarized Dark.
|
||||
@@ -204,6 +214,11 @@ pub enum TuiTheme {
|
||||
pub const TUI_THEMES: &[(&str, TuiTheme)] = &[
|
||||
("dark", TuiTheme::Dark),
|
||||
("light", TuiTheme::Light),
|
||||
("ice-cyan", TuiTheme::IceCyan),
|
||||
("periwinkle", TuiTheme::Periwinkle),
|
||||
("amber-phosphor", TuiTheme::AmberPhosphor),
|
||||
("ember", TuiTheme::Ember),
|
||||
("orchid", TuiTheme::Orchid),
|
||||
("ansi", TuiTheme::Ansi),
|
||||
("solarized-dark", TuiTheme::SolarizedDark),
|
||||
("solarized-light", TuiTheme::SolarizedLight),
|
||||
|
||||
@@ -80,6 +80,11 @@ impl TuiConfig {
|
||||
let palette = match section.theme.unwrap_or(TuiTheme::Dark) {
|
||||
TuiTheme::Dark => Palette::DARK,
|
||||
TuiTheme::Light => Palette::LIGHT,
|
||||
TuiTheme::IceCyan => Palette::ICE_CYAN,
|
||||
TuiTheme::Periwinkle => Palette::PERIWINKLE,
|
||||
TuiTheme::AmberPhosphor => Palette::AMBER_PHOSPHOR,
|
||||
TuiTheme::Ember => Palette::EMBER,
|
||||
TuiTheme::Orchid => Palette::ORCHID,
|
||||
TuiTheme::Ansi => Palette::ANSI,
|
||||
TuiTheme::SolarizedDark => Palette::SOLARIZED_DARK,
|
||||
TuiTheme::SolarizedLight => Palette::SOLARIZED_LIGHT,
|
||||
@@ -172,6 +177,11 @@ mod tests {
|
||||
for (theme, expected) in [
|
||||
(TuiTheme::Dark, Palette::DARK),
|
||||
(TuiTheme::Light, Palette::LIGHT),
|
||||
(TuiTheme::IceCyan, Palette::ICE_CYAN),
|
||||
(TuiTheme::Periwinkle, Palette::PERIWINKLE),
|
||||
(TuiTheme::AmberPhosphor, Palette::AMBER_PHOSPHOR),
|
||||
(TuiTheme::Ember, Palette::EMBER),
|
||||
(TuiTheme::Orchid, Palette::ORCHID),
|
||||
(TuiTheme::Ansi, Palette::ANSI),
|
||||
(TuiTheme::SolarizedDark, Palette::SOLARIZED_DARK),
|
||||
(TuiTheme::SolarizedLight, Palette::SOLARIZED_LIGHT),
|
||||
|
||||
@@ -16,12 +16,14 @@
|
||||
//! the selected card uses the selection surface's own state colours; the dot
|
||||
//! keeps carrying the state either way (docs/SIDEBAR.md).
|
||||
//!
|
||||
//! [`Palette::DARK`] is the default. [`Palette::LIGHT`] is its light peer and
|
||||
//! [`Palette::ANSI`] uses terminal-provided ANSI colours. The remaining
|
||||
//! presets ([`Palette::presets`]) adapt well-known editor themes — Solarized,
|
||||
//! Catppuccin, GitHub, Tokyo Night, Gruvbox, Nord, Dracula — with individual
|
||||
//! colours lifted or darkened where the originals fall short of the contrast
|
||||
//! floors asserted below.
|
||||
//! [`Palette::DARK`] — graphite, no accent hue — is the default.
|
||||
//! [`Palette::LIGHT`] is its light peer and [`Palette::ANSI`] uses
|
||||
//! terminal-provided ANSI colours. Five house presets recolour the graphite
|
||||
//! base with an accent (Ice Cyan, Periwinkle, Amber Phosphor, Ember, Orchid);
|
||||
//! the remaining presets ([`Palette::presets`]) adapt well-known editor
|
||||
//! themes — Solarized, Catppuccin, GitHub, Tokyo Night, Gruvbox, Nord,
|
||||
//! Dracula — with individual colours lifted or darkened where the originals
|
||||
//! fall short of the contrast floors asserted below.
|
||||
//!
|
||||
//! Out of scope: PTY cell colours. Those belong to the program running in the
|
||||
//! pane and pass through `pane::translate_color` verbatim.
|
||||
@@ -135,73 +137,75 @@ pub struct Palette {
|
||||
}
|
||||
|
||||
impl Palette {
|
||||
/// The dark terminal-native palette and the default preset.
|
||||
/// The graphite dark palette and the default preset: pure near-neutral
|
||||
/// chrome with an ink-coloured accent, so activity colours are the only
|
||||
/// hue on screen.
|
||||
pub const DARK: Palette = Palette {
|
||||
card: Surface {
|
||||
bg: Color::Rgb(0x1f, 0x23, 0x2b),
|
||||
fg: Color::Rgb(0xe5, 0xe7, 0xeb),
|
||||
muted: Color::Rgb(0xae, 0xb7, 0xc4),
|
||||
dim: Color::Rgb(0x85, 0x8f, 0x9e),
|
||||
bg: Color::Rgb(0x1d, 0x1f, 0x22),
|
||||
fg: Color::Rgb(0xe6, 0xe8, 0xeb),
|
||||
muted: Color::Rgb(0xb1, 0xb4, 0xb9),
|
||||
dim: Color::Rgb(0x86, 0x89, 0x8e),
|
||||
active: Color::Rgb(0x72, 0xd6, 0x87),
|
||||
idle: Color::Rgb(0xae, 0xb7, 0xc4),
|
||||
idle: Color::Rgb(0xb1, 0xb4, 0xb9),
|
||||
awaiting: Color::Rgb(0xf2, 0xc9, 0x5c),
|
||||
error: Color::Rgb(0xff, 0x82, 0x7a),
|
||||
},
|
||||
selection: Surface {
|
||||
bg: Color::Rgb(0x3d, 0x51, 0x44),
|
||||
fg: Color::Rgb(0xf3, 0xf7, 0xf4),
|
||||
muted: Color::Rgb(0xd0, 0xd9, 0xd3),
|
||||
dim: Color::Rgb(0xa1, 0xb0, 0xa6),
|
||||
bg: Color::Rgb(0x3f, 0x43, 0x48),
|
||||
fg: Color::Rgb(0xf0, 0xf2, 0xf5),
|
||||
muted: Color::Rgb(0xce, 0xd1, 0xd5),
|
||||
dim: Color::Rgb(0xa5, 0xa8, 0xab),
|
||||
active: Color::Rgb(0x9a, 0xf0, 0xa6),
|
||||
idle: Color::Rgb(0xc4, 0xcf, 0xc7),
|
||||
idle: Color::Rgb(0xd5, 0xd8, 0xdb),
|
||||
awaiting: Color::Rgb(0xf6, 0xd9, 0x78),
|
||||
error: Color::Rgb(0xff, 0xa8, 0xa3),
|
||||
},
|
||||
chrome_bg: Color::Rgb(0x1f, 0x23, 0x2b),
|
||||
sidebar_focus_bg: Color::Rgb(0x28, 0x30, 0x2a),
|
||||
border_focused: Color::Rgb(0x72, 0xd6, 0x87),
|
||||
border_unfocused: Color::Rgb(0x68, 0x73, 0x84),
|
||||
focus_accent: Color::Rgb(0x72, 0xd6, 0x87),
|
||||
group_row: Color::Rgb(0xb6, 0xc1, 0xd3),
|
||||
mode_normal_bg: Color::Rgb(0x72, 0xd6, 0x87),
|
||||
mode_normal_fg: Color::Rgb(0x1f, 0x23, 0x2b),
|
||||
chrome_bg: Color::Rgb(0x1d, 0x1f, 0x22),
|
||||
sidebar_focus_bg: Color::Rgb(0x28, 0x2a, 0x2d),
|
||||
border_focused: Color::Rgb(0xe2, 0xe5, 0xe8),
|
||||
border_unfocused: Color::Rgb(0x72, 0x75, 0x79),
|
||||
focus_accent: Color::Rgb(0xe2, 0xe5, 0xe8),
|
||||
group_row: Color::Rgb(0xba, 0xbe, 0xc3),
|
||||
mode_normal_bg: Color::Rgb(0xe2, 0xe5, 0xe8),
|
||||
mode_normal_fg: Color::Rgb(0x17, 0x1b, 0x20),
|
||||
mode_insert_bg: Color::Rgb(0xf2, 0xc9, 0x5c),
|
||||
mode_insert_fg: Color::Rgb(0x1f, 0x23, 0x2b),
|
||||
mode_insert_fg: Color::Rgb(0x1d, 0x1f, 0x22),
|
||||
error_text: Color::Rgb(0xff, 0x82, 0x7a),
|
||||
};
|
||||
|
||||
/// A high-contrast light peer to [`Self::DARK`].
|
||||
/// A high-contrast light peer to [`Self::DARK`]: ink-on-paper graphite.
|
||||
pub const LIGHT: Palette = Palette {
|
||||
card: Surface {
|
||||
bg: Color::Rgb(0xff, 0xff, 0xff),
|
||||
fg: Color::Rgb(0x27, 0x31, 0x3d),
|
||||
muted: Color::Rgb(0x4c, 0x5b, 0x6b),
|
||||
dim: Color::Rgb(0x68, 0x78, 0x8a),
|
||||
fg: Color::Rgb(0x20, 0x24, 0x2a),
|
||||
muted: Color::Rgb(0x56, 0x5b, 0x63),
|
||||
dim: Color::Rgb(0x7b, 0x81, 0x89),
|
||||
active: Color::Rgb(0x21, 0x7a, 0x3c),
|
||||
idle: Color::Rgb(0x4c, 0x5b, 0x6b),
|
||||
idle: Color::Rgb(0x56, 0x5b, 0x63),
|
||||
awaiting: Color::Rgb(0x8f, 0x63, 0x00),
|
||||
error: Color::Rgb(0xb4, 0x23, 0x18),
|
||||
},
|
||||
selection: Surface {
|
||||
bg: Color::Rgb(0xb5, 0xcf, 0xba),
|
||||
fg: Color::Rgb(0x1d, 0x2a, 0x24),
|
||||
muted: Color::Rgb(0x3f, 0x55, 0x45),
|
||||
dim: Color::Rgb(0x52, 0x68, 0x5a),
|
||||
bg: Color::Rgb(0xc5, 0xc7, 0xca),
|
||||
fg: Color::Rgb(0x15, 0x19, 0x1e),
|
||||
muted: Color::Rgb(0x43, 0x48, 0x4f),
|
||||
dim: Color::Rgb(0x5e, 0x64, 0x6b),
|
||||
active: Color::Rgb(0x15, 0x5b, 0x2e),
|
||||
idle: Color::Rgb(0x3f, 0x55, 0x45),
|
||||
idle: Color::Rgb(0x38, 0x3e, 0x45),
|
||||
awaiting: Color::Rgb(0x69, 0x46, 0x00),
|
||||
error: Color::Rgb(0xa5, 0x1d, 0x14),
|
||||
error: Color::Rgb(0x99, 0x1a, 0x12),
|
||||
},
|
||||
chrome_bg: Color::Rgb(0xff, 0xff, 0xff),
|
||||
sidebar_focus_bg: Color::Rgb(0xee, 0xf5, 0xef),
|
||||
border_focused: Color::Rgb(0x21, 0x7a, 0x3c),
|
||||
border_unfocused: Color::Rgb(0x65, 0x73, 0x6b),
|
||||
focus_accent: Color::Rgb(0x21, 0x7a, 0x3c),
|
||||
group_row: Color::Rgb(0x3f, 0x55, 0x45),
|
||||
mode_normal_bg: Color::Rgb(0x21, 0x7a, 0x3c),
|
||||
mode_normal_fg: Color::Rgb(0xff, 0xff, 0xff),
|
||||
mode_insert_bg: Color::Rgb(0xb6, 0x81, 0x08),
|
||||
mode_insert_fg: Color::Rgb(0x0b, 0x12, 0x0e),
|
||||
sidebar_focus_bg: Color::Rgb(0xef, 0xf0, 0xf2),
|
||||
border_focused: Color::Rgb(0x36, 0x3b, 0x41),
|
||||
border_unfocused: Color::Rgb(0x76, 0x7b, 0x82),
|
||||
focus_accent: Color::Rgb(0x36, 0x3b, 0x41),
|
||||
group_row: Color::Rgb(0x4e, 0x53, 0x5a),
|
||||
mode_normal_bg: Color::Rgb(0x23, 0x27, 0x2c),
|
||||
mode_normal_fg: Color::Rgb(0xf9, 0xfa, 0xfb),
|
||||
mode_insert_bg: Color::Rgb(0x8f, 0x63, 0x00),
|
||||
mode_insert_fg: Color::Rgb(0xff, 0xff, 0xff),
|
||||
error_text: Color::Rgb(0xb4, 0x23, 0x18),
|
||||
};
|
||||
|
||||
@@ -556,14 +560,195 @@ impl Palette {
|
||||
error_text: Color::Rgb(0xff, 0x59, 0x59),
|
||||
};
|
||||
|
||||
/// Ice Cyan — signal-cyan accent on the graphite slate base.
|
||||
pub const ICE_CYAN: Palette = Palette {
|
||||
card: Surface {
|
||||
bg: Color::Rgb(0x1c, 0x20, 0x25),
|
||||
fg: Color::Rgb(0xe4, 0xe8, 0xed),
|
||||
muted: Color::Rgb(0xaf, 0xb5, 0xbc),
|
||||
dim: Color::Rgb(0x84, 0x8a, 0x91),
|
||||
active: Color::Rgb(0x72, 0xd6, 0x87),
|
||||
idle: Color::Rgb(0xaf, 0xb5, 0xbc),
|
||||
awaiting: Color::Rgb(0xf2, 0xc9, 0x5c),
|
||||
error: Color::Rgb(0xff, 0x82, 0x7a),
|
||||
},
|
||||
selection: Surface {
|
||||
bg: Color::Rgb(0x24, 0x4d, 0x59),
|
||||
fg: Color::Rgb(0xee, 0xf2, 0xf7),
|
||||
muted: Color::Rgb(0xcd, 0xd1, 0xd7),
|
||||
dim: Color::Rgb(0xa4, 0xa8, 0xae),
|
||||
active: Color::Rgb(0x9a, 0xf0, 0xa6),
|
||||
idle: Color::Rgb(0xd3, 0xd8, 0xde),
|
||||
awaiting: Color::Rgb(0xf6, 0xd9, 0x78),
|
||||
error: Color::Rgb(0xff, 0xa8, 0xa3),
|
||||
},
|
||||
chrome_bg: Color::Rgb(0x1c, 0x20, 0x25),
|
||||
sidebar_focus_bg: Color::Rgb(0x26, 0x2a, 0x30),
|
||||
border_focused: Color::Rgb(0x61, 0xe3, 0xf1),
|
||||
border_unfocused: Color::Rgb(0x70, 0x75, 0x7b),
|
||||
focus_accent: Color::Rgb(0x61, 0xe3, 0xf1),
|
||||
group_row: Color::Rgb(0xb8, 0xbe, 0xc6),
|
||||
mode_normal_bg: Color::Rgb(0x61, 0xe3, 0xf1),
|
||||
mode_normal_fg: Color::Rgb(0x0f, 0x22, 0x2b),
|
||||
mode_insert_bg: Color::Rgb(0xf2, 0xc9, 0x5c),
|
||||
mode_insert_fg: Color::Rgb(0x1c, 0x20, 0x25),
|
||||
error_text: Color::Rgb(0xff, 0x82, 0x7a),
|
||||
};
|
||||
|
||||
/// Periwinkle — indigo-tinted base with a soft blue-violet accent.
|
||||
pub const PERIWINKLE: Palette = Palette {
|
||||
card: Surface {
|
||||
bg: Color::Rgb(0x1d, 0x1e, 0x29),
|
||||
fg: Color::Rgb(0xe5, 0xe7, 0xf1),
|
||||
muted: Color::Rgb(0xb1, 0xb3, 0xc2),
|
||||
dim: Color::Rgb(0x86, 0x88, 0x96),
|
||||
active: Color::Rgb(0x72, 0xd6, 0x87),
|
||||
idle: Color::Rgb(0xb1, 0xb3, 0xc2),
|
||||
awaiting: Color::Rgb(0xf2, 0xc9, 0x5c),
|
||||
error: Color::Rgb(0xff, 0x82, 0x7a),
|
||||
},
|
||||
selection: Surface {
|
||||
bg: Color::Rgb(0x3b, 0x43, 0x6c),
|
||||
fg: Color::Rgb(0xef, 0xf1, 0xfb),
|
||||
muted: Color::Rgb(0xce, 0xd0, 0xdc),
|
||||
dim: Color::Rgb(0xa5, 0xa7, 0xb2),
|
||||
active: Color::Rgb(0x9a, 0xf0, 0xa6),
|
||||
idle: Color::Rgb(0xd4, 0xd7, 0xe3),
|
||||
awaiting: Color::Rgb(0xf6, 0xd9, 0x78),
|
||||
error: Color::Rgb(0xff, 0xa8, 0xa3),
|
||||
},
|
||||
chrome_bg: Color::Rgb(0x1d, 0x1e, 0x29),
|
||||
sidebar_focus_bg: Color::Rgb(0x27, 0x29, 0x35),
|
||||
border_focused: Color::Rgb(0x97, 0xa7, 0xfd),
|
||||
border_unfocused: Color::Rgb(0x71, 0x74, 0x80),
|
||||
focus_accent: Color::Rgb(0x97, 0xa7, 0xfd),
|
||||
group_row: Color::Rgb(0xba, 0xbd, 0xcc),
|
||||
mode_normal_bg: Color::Rgb(0x97, 0xa7, 0xfd),
|
||||
mode_normal_fg: Color::Rgb(0x12, 0x14, 0x28),
|
||||
mode_insert_bg: Color::Rgb(0xf2, 0xc9, 0x5c),
|
||||
mode_insert_fg: Color::Rgb(0x1d, 0x1e, 0x29),
|
||||
error_text: Color::Rgb(0xff, 0x82, 0x7a),
|
||||
};
|
||||
|
||||
/// Amber Phosphor — CRT amber on warm graphite. The awaiting colour
|
||||
/// shifts orange so it stays distinct from the amber accent.
|
||||
pub const AMBER_PHOSPHOR: Palette = Palette {
|
||||
card: Surface {
|
||||
bg: Color::Rgb(0x22, 0x1f, 0x1a),
|
||||
fg: Color::Rgb(0xec, 0xe7, 0xe1),
|
||||
muted: Color::Rgb(0xba, 0xb3, 0xaa),
|
||||
dim: Color::Rgb(0x8f, 0x88, 0x7f),
|
||||
active: Color::Rgb(0x72, 0xd6, 0x87),
|
||||
idle: Color::Rgb(0xba, 0xb3, 0xaa),
|
||||
awaiting: Color::Rgb(0xff, 0x9b, 0x50),
|
||||
error: Color::Rgb(0xff, 0x82, 0x7a),
|
||||
},
|
||||
selection: Surface {
|
||||
bg: Color::Rgb(0x55, 0x43, 0x26),
|
||||
fg: Color::Rgb(0xf6, 0xf1, 0xeb),
|
||||
muted: Color::Rgb(0xd6, 0xd0, 0xc9),
|
||||
dim: Color::Rgb(0xad, 0xa7, 0xa0),
|
||||
active: Color::Rgb(0x9a, 0xf0, 0xa6),
|
||||
idle: Color::Rgb(0xdd, 0xd6, 0xcf),
|
||||
awaiting: Color::Rgb(0xff, 0xb9, 0x72),
|
||||
error: Color::Rgb(0xff, 0xa8, 0xa3),
|
||||
},
|
||||
chrome_bg: Color::Rgb(0x22, 0x1f, 0x1a),
|
||||
sidebar_focus_bg: Color::Rgb(0x2d, 0x29, 0x25),
|
||||
border_focused: Color::Rgb(0xf9, 0xbb, 0x51),
|
||||
border_unfocused: Color::Rgb(0x7a, 0x73, 0x6c),
|
||||
focus_accent: Color::Rgb(0xf9, 0xbb, 0x51),
|
||||
group_row: Color::Rgb(0xc4, 0xbc, 0xb3),
|
||||
mode_normal_bg: Color::Rgb(0xf9, 0xbb, 0x51),
|
||||
mode_normal_fg: Color::Rgb(0x2f, 0x1e, 0x01),
|
||||
mode_insert_bg: Color::Rgb(0xff, 0x9b, 0x50),
|
||||
mode_insert_fg: Color::Rgb(0x22, 0x1f, 0x1a),
|
||||
error_text: Color::Rgb(0xff, 0x82, 0x7a),
|
||||
};
|
||||
|
||||
/// Ember — warm orange-red accent on a cleaner warm neutral.
|
||||
pub const EMBER: Palette = Palette {
|
||||
card: Surface {
|
||||
bg: Color::Rgb(0x23, 0x1e, 0x1b),
|
||||
fg: Color::Rgb(0xed, 0xe6, 0xe3),
|
||||
muted: Color::Rgb(0xbc, 0xb2, 0xad),
|
||||
dim: Color::Rgb(0x90, 0x87, 0x82),
|
||||
active: Color::Rgb(0x72, 0xd6, 0x87),
|
||||
idle: Color::Rgb(0xbc, 0xb2, 0xad),
|
||||
awaiting: Color::Rgb(0xf2, 0xc9, 0x5c),
|
||||
error: Color::Rgb(0xff, 0x82, 0x7a),
|
||||
},
|
||||
selection: Surface {
|
||||
bg: Color::Rgb(0x5d, 0x3e, 0x30),
|
||||
fg: Color::Rgb(0xf7, 0xf0, 0xed),
|
||||
muted: Color::Rgb(0xd7, 0xcf, 0xcb),
|
||||
dim: Color::Rgb(0xae, 0xa6, 0xa2),
|
||||
active: Color::Rgb(0x9a, 0xf0, 0xa6),
|
||||
idle: Color::Rgb(0xde, 0xd5, 0xd1),
|
||||
awaiting: Color::Rgb(0xf6, 0xd9, 0x78),
|
||||
error: Color::Rgb(0xff, 0xa8, 0xa3),
|
||||
},
|
||||
chrome_bg: Color::Rgb(0x23, 0x1e, 0x1b),
|
||||
sidebar_focus_bg: Color::Rgb(0x2e, 0x29, 0x26),
|
||||
border_focused: Color::Rgb(0xf7, 0x89, 0x55),
|
||||
border_unfocused: Color::Rgb(0x7b, 0x72, 0x6e),
|
||||
focus_accent: Color::Rgb(0xf7, 0x89, 0x55),
|
||||
group_row: Color::Rgb(0xc6, 0xbb, 0xb6),
|
||||
mode_normal_bg: Color::Rgb(0xf7, 0x89, 0x55),
|
||||
mode_normal_fg: Color::Rgb(0x2a, 0x14, 0x0a),
|
||||
mode_insert_bg: Color::Rgb(0xf2, 0xc9, 0x5c),
|
||||
mode_insert_fg: Color::Rgb(0x23, 0x1e, 0x1b),
|
||||
error_text: Color::Rgb(0xff, 0x82, 0x7a),
|
||||
};
|
||||
|
||||
/// Orchid — muted violet accent on a faintly violet base.
|
||||
pub const ORCHID: Palette = Palette {
|
||||
card: Surface {
|
||||
bg: Color::Rgb(0x21, 0x1e, 0x25),
|
||||
fg: Color::Rgb(0xe9, 0xe6, 0xee),
|
||||
muted: Color::Rgb(0xb6, 0xb2, 0xbd),
|
||||
dim: Color::Rgb(0x8b, 0x87, 0x91),
|
||||
active: Color::Rgb(0x72, 0xd6, 0x87),
|
||||
idle: Color::Rgb(0xb6, 0xb2, 0xbd),
|
||||
awaiting: Color::Rgb(0xf2, 0xc9, 0x5c),
|
||||
error: Color::Rgb(0xff, 0x82, 0x7a),
|
||||
},
|
||||
selection: Surface {
|
||||
bg: Color::Rgb(0x51, 0x3c, 0x63),
|
||||
fg: Color::Rgb(0xf3, 0xf0, 0xf8),
|
||||
muted: Color::Rgb(0xd3, 0xcf, 0xd8),
|
||||
dim: Color::Rgb(0xa9, 0xa6, 0xaf),
|
||||
active: Color::Rgb(0x9a, 0xf0, 0xa6),
|
||||
idle: Color::Rgb(0xd9, 0xd5, 0xdf),
|
||||
awaiting: Color::Rgb(0xf6, 0xd9, 0x78),
|
||||
error: Color::Rgb(0xff, 0xa8, 0xa3),
|
||||
},
|
||||
chrome_bg: Color::Rgb(0x21, 0x1e, 0x25),
|
||||
sidebar_focus_bg: Color::Rgb(0x2c, 0x28, 0x30),
|
||||
border_focused: Color::Rgb(0xd1, 0x9f, 0xf5),
|
||||
border_unfocused: Color::Rgb(0x76, 0x72, 0x7c),
|
||||
focus_accent: Color::Rgb(0xd1, 0x9f, 0xf5),
|
||||
group_row: Color::Rgb(0xc0, 0xbb, 0xc7),
|
||||
mode_normal_bg: Color::Rgb(0xd1, 0x9f, 0xf5),
|
||||
mode_normal_fg: Color::Rgb(0x22, 0x13, 0x2c),
|
||||
mode_insert_bg: Color::Rgb(0xf2, 0xc9, 0x5c),
|
||||
mode_insert_fg: Color::Rgb(0x21, 0x1e, 0x25),
|
||||
error_text: Color::Rgb(0xff, 0x82, 0x7a),
|
||||
};
|
||||
|
||||
/// The default preset, retained as a named compatibility constant.
|
||||
pub const DEFAULT: Palette = Self::DARK;
|
||||
|
||||
/// All preset names and their complete palettes.
|
||||
pub fn presets() -> [(&'static str, Palette); 12] {
|
||||
pub fn presets() -> [(&'static str, Palette); 17] {
|
||||
[
|
||||
("dark", Self::DARK),
|
||||
("light", Self::LIGHT),
|
||||
("ice-cyan", Self::ICE_CYAN),
|
||||
("periwinkle", Self::PERIWINKLE),
|
||||
("amber-phosphor", Self::AMBER_PHOSPHOR),
|
||||
("ember", Self::EMBER),
|
||||
("orchid", Self::ORCHID),
|
||||
("ansi", Self::ANSI),
|
||||
("solarized-dark", Self::SOLARIZED_DARK),
|
||||
("solarized-light", Self::SOLARIZED_LIGHT),
|
||||
|
||||
+13
-6
@@ -154,15 +154,22 @@ chord_timeout_ms = 1000 # how long to hold a partial chord like `ctrl-w`
|
||||
# want extra Insert-mode bindings)
|
||||
```
|
||||
|
||||
`theme` selects the complete TUI palette. `dark` is the default and follows
|
||||
Maestro's terminal-native dark product palette; `light` is its light peer;
|
||||
`ansi` uses the terminal's named ANSI colours for terminals without truecolour.
|
||||
The remaining presets adapt well-known editor themes, with individual colours
|
||||
lifted or darkened where the originals fall short of the WCAG AA contrast
|
||||
floors the palette tests assert:
|
||||
`theme` selects the complete TUI palette. `dark` is the default: Maestro's
|
||||
graphite palette, near-neutral chrome where the activity colours are the only
|
||||
hue on screen; `light` is its light peer; `ansi` uses the terminal's named
|
||||
ANSI colours for terminals without truecolour. Five house presets recolour
|
||||
the graphite base with an accent, and the remaining presets adapt well-known
|
||||
editor themes — in both groups individual colours are lifted or darkened
|
||||
where they would fall short of the WCAG AA contrast floors the palette tests
|
||||
assert:
|
||||
|
||||
| name | based on |
|
||||
|-------------------|------------------|
|
||||
| `ice-cyan` | graphite base, signal-cyan accent |
|
||||
| `periwinkle` | indigo base, blue-violet accent |
|
||||
| `amber-phosphor` | warm graphite, CRT-amber accent |
|
||||
| `ember` | warm graphite, orange-red accent |
|
||||
| `orchid` | violet base, muted violet accent |
|
||||
| `solarized-dark` | Solarized Dark |
|
||||
| `solarized-light` | Solarized Light |
|
||||
| `catppuccin` | Catppuccin Mocha |
|
||||
|
||||
Reference in New Issue
Block a user