Skip to main content

ratatui_kit/components/theme/
palette.rs

1// Palette:主题系统的唯一颜色真源。所有内置组件的默认样式都从这里派生,
2// 因此改这一处即可统一全部组件观感。
3
4use ratatui::style::Color;
5
6/// 语义色板——主题系统的唯一颜色真源。
7///
8/// 每个内置组件的 `FooTheme::from_palette` 只从这里取色;改这一处即可统一全部组件观感。
9/// 标注 `#[non_exhaustive]`:后续新增语义色不构成对下游的破坏性变更。下游经
10/// [`Palette::default`] + 字段修改构造,而非结构体字面量。
11#[non_exhaustive]
12#[derive(Debug, Clone, Copy, PartialEq, Eq)]
13#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
14pub struct Palette {
15    /// 主前景色(正文文字)。
16    pub fg: Color,
17    /// 弱化前景(次要文字、禁用态)。
18    pub fg_dim: Color,
19    /// 主背景色。
20    pub bg: Color,
21    /// 面板/容器表面色(比 `bg` 略微抬升的层)。
22    pub surface: Color,
23    /// 遮罩层底色(模态背景)。
24    pub overlay: Color,
25    /// 强调色(高亮、激活边框、选中背景)。
26    pub accent: Color,
27    /// 强调底色其上的前景(如高亮行的文字色,与 `accent`/`selection` 配对)。
28    pub on_accent: Color,
29    /// 选中项背景。
30    pub selection: Color,
31    /// 常态边框色。
32    pub border: Color,
33    /// 激活/聚焦边框色。
34    pub border_active: Color,
35    /// 成功语义色。
36    pub success: Color,
37    /// 警告语义色。
38    pub warning: Color,
39    /// 错误语义色。
40    pub error: Color,
41    /// 信息语义色。
42    pub info: Color,
43    /// 占位符/提示文字色。
44    pub placeholder: Color,
45}
46
47impl Default for Palette {
48    /// 一套自洽的默认配色:交互/高亮走 accent(cyan)族,边框常态 dim、激活 accent,
49    /// 语义色 success/warning/error/info = green/yellow/red/blue,前景/背景默认跟随终端(`Reset`)。
50    fn default() -> Self {
51        Self {
52            fg: Color::Reset,
53            fg_dim: Color::DarkGray,
54            bg: Color::Reset,
55            surface: Color::Reset,
56            overlay: Color::Reset,
57            accent: Color::Cyan,
58            on_accent: Color::Black,
59            selection: Color::Cyan,
60            border: Color::DarkGray,
61            border_active: Color::Cyan,
62            success: Color::Green,
63            warning: Color::Yellow,
64            error: Color::Red,
65            info: Color::Blue,
66            placeholder: Color::DarkGray,
67        }
68    }
69}