Skip to main content

j_cli/command/chat/
theme.rs

1use ratatui::style::Color;
2use serde::{Deserialize, Serialize};
3
4/// 主题名称枚举
5#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
6pub enum ThemeName {
7    #[serde(rename = "dark")]
8    Dark,
9    #[serde(rename = "light")]
10    Light,
11    #[serde(rename = "midnight")]
12    Midnight,
13    #[serde(rename = "nord")]
14    Nord,
15    #[serde(rename = "monokai")]
16    Monokai,
17}
18
19impl Default for ThemeName {
20    fn default() -> Self {
21        ThemeName::Midnight
22    }
23}
24
25#[allow(dead_code)]
26impl ThemeName {
27    /// 获取所有主题名称列表(用于配置界面循环切换)
28    pub fn all() -> &'static [ThemeName] {
29        &[
30            ThemeName::Dark,
31            ThemeName::Light,
32            ThemeName::Midnight,
33            ThemeName::Nord,
34            ThemeName::Monokai,
35        ]
36    }
37
38    /// 切换到下一个主题
39    pub fn next(&self) -> ThemeName {
40        match self {
41            ThemeName::Dark => ThemeName::Light,
42            ThemeName::Light => ThemeName::Midnight,
43            ThemeName::Midnight => ThemeName::Nord,
44            ThemeName::Nord => ThemeName::Monokai,
45            ThemeName::Monokai => ThemeName::Dark,
46        }
47    }
48
49    /// 显示名称
50    pub fn display_name(&self) -> &'static str {
51        match self {
52            ThemeName::Dark => "Dark",
53            ThemeName::Light => "Light",
54            ThemeName::Midnight => "Midnight(默认)",
55            ThemeName::Nord => "Nord",
56            ThemeName::Monokai => "Monokai",
57        }
58    }
59
60    /// 从字符串解析
61    pub fn from_str(s: &str) -> ThemeName {
62        match s.to_lowercase().as_str() {
63            "dark" => ThemeName::Dark,
64            "light" => ThemeName::Light,
65            "midnight" => ThemeName::Midnight,
66            "nord" => ThemeName::Nord,
67            "monokai" => ThemeName::Monokai,
68            _ => ThemeName::default(),
69        }
70    }
71
72    /// 转为字符串
73    pub fn to_str(&self) -> &'static str {
74        match self {
75            ThemeName::Dark => "dark",
76            ThemeName::Light => "light",
77            ThemeName::Midnight => "midnight",
78            ThemeName::Nord => "nord",
79            ThemeName::Monokai => "monokai",
80        }
81    }
82}
83
84/// 主题配色方案
85/// 将所有 UI 颜色归类为语义化字段,方便统一管理
86#[derive(Debug, Clone)]
87#[allow(dead_code)]
88pub struct Theme {
89    // ===== 全局背景 =====
90    /// 主背景色
91    pub bg_primary: Color,
92    /// 标题栏背景
93    pub bg_title: Color,
94    /// 输入区背景
95    pub bg_input: Color,
96    /// 帮助/配置界面背景
97    pub bg_panel: Color,
98
99    // ===== 边框 =====
100    /// 标题栏边框
101    pub border_title: Color,
102    /// 消息区边框
103    pub border_message: Color,
104    /// 输入区边框(正常)
105    pub border_input: Color,
106    /// 输入区边框(加载中)
107    pub border_input_loading: Color,
108    /// 配置界面边框
109    pub border_config: Color,
110    /// 分隔线
111    pub separator: Color,
112
113    // ===== 气泡 =====
114    /// AI 气泡背景
115    pub bubble_ai: Color,
116    /// AI 气泡背景(选中时)
117    pub bubble_ai_selected: Color,
118    /// 用户气泡背景
119    pub bubble_user: Color,
120    /// 用户气泡背景(选中时)
121    pub bubble_user_selected: Color,
122
123    // ===== 标签 =====
124    /// AI 标签颜色
125    pub label_ai: Color,
126    /// 用户标签颜色
127    pub label_user: Color,
128    /// 选中标签颜色
129    pub label_selected: Color,
130
131    // ===== 文字 =====
132    /// 正文颜色
133    pub text_normal: Color,
134    /// 强调色(加粗文本)
135    pub text_bold: Color,
136    /// 弱化文字
137    pub text_dim: Color,
138    /// 非常弱化的文字
139    pub text_very_dim: Color,
140    /// 白色文字(用于输入区等)
141    pub text_white: Color,
142    /// 系统消息颜色
143    pub text_system: Color,
144
145    // ===== 标题栏元素 =====
146    /// 标题栏图标色
147    pub title_icon: Color,
148    /// 标题栏分隔符
149    pub title_separator: Color,
150    /// 模型名称颜色
151    pub title_model: Color,
152    /// 消息计数颜色
153    pub title_count: Color,
154    /// 加载中文字颜色
155    pub title_loading: Color,
156
157    // ===== 输入区 =====
158    /// 输入提示符颜色
159    pub input_prompt: Color,
160    /// 输入提示符(加载中)颜色
161    pub input_prompt_loading: Color,
162    /// 光标前景
163    pub cursor_fg: Color,
164    /// 光标背景
165    pub cursor_bg: Color,
166
167    // ===== 提示栏 =====
168    /// 键位标签前景
169    pub hint_key_fg: Color,
170    /// 键位标签背景
171    pub hint_key_bg: Color,
172    /// 键位描述文字
173    pub hint_desc: Color,
174    /// 提示栏分隔符
175    pub hint_separator: Color,
176
177    // ===== Toast =====
178    /// 成功 Toast 边框
179    pub toast_success_border: Color,
180    /// 成功 Toast 背景
181    pub toast_success_bg: Color,
182    /// 成功 Toast 文字
183    pub toast_success_text: Color,
184    /// 错误 Toast 边框
185    pub toast_error_border: Color,
186    /// 错误 Toast 背景
187    pub toast_error_bg: Color,
188    /// 错误 Toast 文字
189    pub toast_error_text: Color,
190
191    // ===== 欢迎界面 =====
192    /// 欢迎框边框
193    pub welcome_border: Color,
194    /// 欢迎文字
195    pub welcome_text: Color,
196    /// 欢迎提示文字
197    pub welcome_hint: Color,
198
199    // ===== 模型选择 =====
200    /// 模型选择框边框
201    pub model_sel_border: Color,
202    /// 模型选择框标题
203    pub model_sel_title: Color,
204    /// 活跃模型颜色
205    pub model_sel_active: Color,
206    /// 非活跃模型颜色
207    pub model_sel_inactive: Color,
208    /// 选中高亮背景
209    pub model_sel_highlight_bg: Color,
210
211    // ===== 配置界面 =====
212    /// 配置标题颜色
213    pub config_title: Color,
214    /// 配置分类标题颜色
215    pub config_section: Color,
216    /// 配置选中指针颜色
217    pub config_pointer: Color,
218    /// 配置选中标签颜色
219    pub config_label_selected: Color,
220    /// 配置普通标签颜色
221    pub config_label: Color,
222    /// 配置值颜色
223    pub config_value: Color,
224    /// 配置编辑背景
225    pub config_edit_bg: Color,
226    /// 配置 tab 选中背景
227    pub config_tab_active_bg: Color,
228    /// 配置 tab 选中前景
229    pub config_tab_active_fg: Color,
230    /// 配置 tab 非选中颜色
231    pub config_tab_inactive: Color,
232    /// 配置键位说明颜色
233    pub config_hint_key: Color,
234    /// 配置描述颜色
235    pub config_hint_desc: Color,
236    /// 配置 toggle 开启颜色
237    pub config_toggle_on: Color,
238    /// 配置 toggle 关闭颜色
239    pub config_toggle_off: Color,
240    /// 配置弱化文字
241    pub config_dim: Color,
242    /// API Key 隐藏颜色
243    pub config_api_key: Color,
244
245    // ===== Markdown 渲染 =====
246    /// 标题 h1 颜色
247    pub md_h1: Color,
248    /// 标题 h2 颜色
249    pub md_h2: Color,
250    /// 标题 h3 颜色
251    pub md_h3: Color,
252    /// 标题 h4+ 颜色
253    pub md_h4: Color,
254    /// 标题分隔线
255    pub md_heading_sep: Color,
256    /// 行内代码前景
257    pub md_inline_code_fg: Color,
258    /// 行内代码背景
259    pub md_inline_code_bg: Color,
260    /// 列表符号颜色
261    pub md_list_bullet: Color,
262    /// 引用块竖线颜色
263    pub md_blockquote_bar: Color,
264    /// 引用块文字颜色
265    pub md_blockquote_text: Color,
266    /// 分隔线颜色
267    pub md_rule: Color,
268
269    // ===== 代码块 =====
270    /// 代码块边框颜色
271    pub code_border: Color,
272    /// 代码块背景
273    pub code_bg: Color,
274    /// 代码默认文字颜色
275    pub code_default: Color,
276    /// 关键字颜色
277    pub code_keyword: Color,
278    /// 字符串颜色
279    pub code_string: Color,
280    /// 注释颜色
281    pub code_comment: Color,
282    /// 数字颜色
283    pub code_number: Color,
284    /// 类型名颜色
285    pub code_type: Color,
286    /// 原始类型颜色
287    pub code_primitive: Color,
288    /// 宏调用颜色
289    pub code_macro: Color,
290    /// 属性/装饰器颜色
291    pub code_attribute: Color,
292    /// 生命周期颜色
293    pub code_lifetime: Color,
294    /// Shell 变量颜色
295    pub code_shell_var: Color,
296
297    // ===== 表格 =====
298    /// 表格边框颜色
299    pub table_border: Color,
300    /// 表格表头颜色
301    pub table_header: Color,
302    /// 表格内容颜色
303    pub table_body: Color,
304
305    // ===== 帮助界面 =====
306    /// 帮助标题颜色
307    pub help_title: Color,
308    /// 帮助按键颜色
309    pub help_key: Color,
310    /// 帮助描述颜色
311    pub help_desc: Color,
312    /// 帮助文件路径颜色
313    pub help_path: Color,
314    /// 帮助背景颜色
315    pub help_bg: Color,
316}
317
318impl Theme {
319    /// 根据主题名称创建对应的主题
320    pub fn from_name(name: &ThemeName) -> Self {
321        match name {
322            ThemeName::Dark => Self::dark(),
323            ThemeName::Light => Self::light(),
324            ThemeName::Midnight => Self::midnight(),
325            ThemeName::Nord => Self::nord(),
326            ThemeName::Monokai => Self::monokai(),
327        }
328    }
329
330    /// Midnight 主题(原始深色主题 - 默认)
331    pub fn midnight() -> Self {
332        Self {
333            // 全局背景
334            bg_primary: Color::Rgb(22, 22, 30),
335            bg_title: Color::Rgb(28, 28, 40),
336            bg_input: Color::Rgb(26, 26, 38),
337            bg_panel: Color::Rgb(24, 24, 34),
338
339            // 边框
340            border_title: Color::Rgb(80, 100, 140),
341            border_message: Color::Rgb(50, 55, 70),
342            border_input: Color::Rgb(60, 100, 80),
343            border_input_loading: Color::Rgb(120, 100, 50),
344            border_config: Color::Rgb(80, 80, 110),
345            separator: Color::Rgb(50, 55, 70),
346
347            // 气泡
348            bubble_ai: Color::Rgb(38, 38, 52),
349            bubble_ai_selected: Color::Rgb(48, 48, 68),
350            bubble_user: Color::Rgb(40, 70, 120),
351            bubble_user_selected: Color::Rgb(55, 85, 140),
352
353            // 标签
354            label_ai: Color::Rgb(120, 220, 160),
355            label_user: Color::Rgb(100, 160, 255),
356            label_selected: Color::Rgb(255, 200, 80),
357
358            // 文字
359            text_normal: Color::Rgb(220, 220, 230),
360            text_bold: Color::Rgb(220, 245, 230),
361            text_dim: Color::Rgb(140, 140, 170),
362            text_very_dim: Color::Rgb(80, 80, 100),
363            text_white: Color::White,
364            text_system: Color::Rgb(100, 100, 120),
365
366            // 标题栏
367            title_icon: Color::Rgb(120, 180, 255),
368            title_separator: Color::Rgb(60, 60, 80),
369            title_model: Color::Rgb(160, 220, 160),
370            title_count: Color::Rgb(180, 180, 200),
371            title_loading: Color::Rgb(255, 200, 80),
372
373            // 输入区
374            input_prompt: Color::Rgb(100, 200, 130),
375            input_prompt_loading: Color::Rgb(255, 200, 80),
376            cursor_fg: Color::Rgb(22, 22, 30),
377            cursor_bg: Color::Rgb(200, 210, 240),
378
379            // 提示栏
380            hint_key_fg: Color::Rgb(22, 22, 30),
381            hint_key_bg: Color::Rgb(100, 110, 140),
382            hint_desc: Color::Rgb(120, 120, 150),
383            hint_separator: Color::Rgb(50, 50, 65),
384
385            // Toast
386            toast_success_border: Color::Rgb(60, 160, 80),
387            toast_success_bg: Color::Rgb(18, 40, 25),
388            toast_success_text: Color::Rgb(140, 230, 160),
389            toast_error_border: Color::Rgb(200, 70, 70),
390            toast_error_bg: Color::Rgb(50, 18, 18),
391            toast_error_text: Color::Rgb(255, 130, 130),
392
393            // 欢迎界面
394            welcome_border: Color::Rgb(60, 70, 90),
395            welcome_text: Color::Rgb(120, 140, 180),
396            welcome_hint: Color::Rgb(80, 90, 110),
397
398            // 模型选择
399            model_sel_border: Color::Rgb(180, 160, 80),
400            model_sel_title: Color::Rgb(230, 210, 120),
401            model_sel_active: Color::Rgb(120, 220, 160),
402            model_sel_inactive: Color::Rgb(180, 180, 200),
403            model_sel_highlight_bg: Color::Rgb(50, 55, 80),
404
405            // 配置界面
406            config_title: Color::Rgb(120, 180, 255),
407            config_section: Color::Rgb(160, 220, 160),
408            config_pointer: Color::Rgb(255, 200, 80),
409            config_label_selected: Color::Rgb(230, 210, 120),
410            config_label: Color::Rgb(140, 140, 160),
411            config_value: Color::Rgb(180, 180, 200),
412            config_edit_bg: Color::Rgb(50, 55, 80),
413            config_tab_active_bg: Color::Rgb(120, 180, 255),
414            config_tab_active_fg: Color::Rgb(22, 22, 30),
415            config_tab_inactive: Color::Rgb(150, 150, 170),
416            config_hint_key: Color::Rgb(230, 210, 120),
417            config_hint_desc: Color::Rgb(120, 120, 150),
418            config_toggle_on: Color::Rgb(120, 220, 160),
419            config_toggle_off: Color::Rgb(200, 100, 100),
420            config_dim: Color::Rgb(80, 80, 100),
421            config_api_key: Color::Rgb(100, 100, 120),
422
423            // Markdown
424            md_h1: Color::Rgb(100, 180, 255),
425            md_h2: Color::Rgb(130, 190, 255),
426            md_h3: Color::Rgb(160, 200, 255),
427            md_h4: Color::Rgb(180, 210, 255),
428            md_heading_sep: Color::Rgb(60, 70, 100),
429            md_inline_code_fg: Color::Rgb(230, 190, 120),
430            md_inline_code_bg: Color::Rgb(45, 45, 60),
431            md_list_bullet: Color::Rgb(100, 160, 255),
432            md_blockquote_bar: Color::Rgb(80, 100, 140),
433            md_blockquote_text: Color::Rgb(150, 160, 180),
434            md_rule: Color::Rgb(70, 75, 90),
435
436            // 代码块
437            code_border: Color::Rgb(80, 90, 110),
438            code_bg: Color::Rgb(30, 30, 42),
439            code_default: Color::Rgb(171, 178, 191),
440            code_keyword: Color::Rgb(198, 120, 221),
441            code_string: Color::Rgb(152, 195, 121),
442            code_comment: Color::Rgb(92, 99, 112),
443            code_number: Color::Rgb(209, 154, 102),
444            code_type: Color::Rgb(229, 192, 123),
445            code_primitive: Color::Rgb(86, 182, 194),
446            code_macro: Color::Rgb(97, 175, 239),
447            code_attribute: Color::Rgb(86, 182, 194),
448            code_lifetime: Color::Rgb(229, 192, 123),
449            code_shell_var: Color::Rgb(86, 182, 194),
450
451            // 表格
452            table_border: Color::Rgb(60, 70, 100),
453            table_header: Color::Rgb(120, 180, 255),
454            table_body: Color::Rgb(180, 180, 200),
455
456            // 帮助界面
457            help_title: Color::Rgb(120, 180, 255),
458            help_key: Color::Rgb(230, 210, 120),
459            help_desc: Color::Rgb(200, 200, 220),
460            help_path: Color::Rgb(100, 100, 130),
461            help_bg: Color::Rgb(24, 24, 34),
462        }
463    }
464
465    /// Dark 主题(偏灰暗的深色主题,类似 VS Code Dark+)
466    pub fn dark() -> Self {
467        Self {
468            // 全局背景
469            bg_primary: Color::Rgb(30, 30, 30),
470            bg_title: Color::Rgb(37, 37, 38),
471            bg_input: Color::Rgb(37, 37, 38),
472            bg_panel: Color::Rgb(37, 37, 38),
473
474            // 边框
475            border_title: Color::Rgb(70, 70, 70),
476            border_message: Color::Rgb(55, 55, 55),
477            border_input: Color::Rgb(55, 80, 55),
478            border_input_loading: Color::Rgb(120, 100, 50),
479            border_config: Color::Rgb(70, 70, 70),
480            separator: Color::Rgb(55, 55, 55),
481
482            // 气泡
483            bubble_ai: Color::Rgb(40, 40, 40),
484            bubble_ai_selected: Color::Rgb(50, 50, 55),
485            bubble_user: Color::Rgb(38, 65, 110),
486            bubble_user_selected: Color::Rgb(50, 80, 130),
487
488            // 标签
489            label_ai: Color::Rgb(80, 200, 120),
490            label_user: Color::Rgb(80, 150, 240),
491            label_selected: Color::Rgb(255, 200, 80),
492
493            // 文字
494            text_normal: Color::Rgb(212, 212, 212),
495            text_bold: Color::Rgb(210, 240, 220),
496            text_dim: Color::Rgb(128, 128, 128),
497            text_very_dim: Color::Rgb(80, 80, 80),
498            text_white: Color::White,
499            text_system: Color::Rgb(100, 100, 100),
500
501            // 标题栏
502            title_icon: Color::Rgb(100, 160, 240),
503            title_separator: Color::Rgb(60, 60, 60),
504            title_model: Color::Rgb(140, 200, 140),
505            title_count: Color::Rgb(170, 170, 170),
506            title_loading: Color::Rgb(255, 200, 80),
507
508            // 输入区
509            input_prompt: Color::Rgb(80, 180, 100),
510            input_prompt_loading: Color::Rgb(255, 200, 80),
511            cursor_fg: Color::Rgb(30, 30, 30),
512            cursor_bg: Color::Rgb(200, 200, 200),
513
514            // 提示栏
515            hint_key_fg: Color::Rgb(30, 30, 30),
516            hint_key_bg: Color::Rgb(100, 100, 100),
517            hint_desc: Color::Rgb(128, 128, 128),
518            hint_separator: Color::Rgb(50, 50, 50),
519
520            // Toast
521            toast_success_border: Color::Rgb(60, 160, 80),
522            toast_success_bg: Color::Rgb(20, 40, 25),
523            toast_success_text: Color::Rgb(140, 230, 160),
524            toast_error_border: Color::Rgb(200, 70, 70),
525            toast_error_bg: Color::Rgb(50, 20, 20),
526            toast_error_text: Color::Rgb(255, 130, 130),
527
528            // 欢迎界面
529            welcome_border: Color::Rgb(60, 60, 60),
530            welcome_text: Color::Rgb(120, 140, 180),
531            welcome_hint: Color::Rgb(80, 80, 80),
532
533            // 模型选择
534            model_sel_border: Color::Rgb(180, 160, 80),
535            model_sel_title: Color::Rgb(230, 210, 120),
536            model_sel_active: Color::Rgb(80, 200, 120),
537            model_sel_inactive: Color::Rgb(170, 170, 170),
538            model_sel_highlight_bg: Color::Rgb(50, 50, 60),
539
540            // 配置界面
541            config_title: Color::Rgb(100, 160, 240),
542            config_section: Color::Rgb(140, 200, 140),
543            config_pointer: Color::Rgb(255, 200, 80),
544            config_label_selected: Color::Rgb(230, 210, 120),
545            config_label: Color::Rgb(128, 128, 128),
546            config_value: Color::Rgb(170, 170, 170),
547            config_edit_bg: Color::Rgb(50, 50, 60),
548            config_tab_active_bg: Color::Rgb(100, 160, 240),
549            config_tab_active_fg: Color::Rgb(30, 30, 30),
550            config_tab_inactive: Color::Rgb(140, 140, 140),
551            config_hint_key: Color::Rgb(230, 210, 120),
552            config_hint_desc: Color::Rgb(128, 128, 128),
553            config_toggle_on: Color::Rgb(80, 200, 120),
554            config_toggle_off: Color::Rgb(200, 100, 100),
555            config_dim: Color::Rgb(80, 80, 80),
556            config_api_key: Color::Rgb(100, 100, 100),
557
558            // Markdown
559            md_h1: Color::Rgb(80, 160, 240),
560            md_h2: Color::Rgb(100, 170, 240),
561            md_h3: Color::Rgb(120, 180, 240),
562            md_h4: Color::Rgb(140, 190, 240),
563            md_heading_sep: Color::Rgb(60, 60, 80),
564            md_inline_code_fg: Color::Rgb(220, 180, 110),
565            md_inline_code_bg: Color::Rgb(50, 50, 60),
566            md_list_bullet: Color::Rgb(80, 150, 240),
567            md_blockquote_bar: Color::Rgb(70, 90, 130),
568            md_blockquote_text: Color::Rgb(150, 150, 170),
569            md_rule: Color::Rgb(70, 70, 80),
570
571            // 代码块
572            code_border: Color::Rgb(70, 70, 80),
573            code_bg: Color::Rgb(35, 35, 38),
574            code_default: Color::Rgb(212, 212, 212),
575            code_keyword: Color::Rgb(198, 120, 221),
576            code_string: Color::Rgb(152, 195, 121),
577            code_comment: Color::Rgb(106, 115, 125),
578            code_number: Color::Rgb(209, 154, 102),
579            code_type: Color::Rgb(229, 192, 123),
580            code_primitive: Color::Rgb(86, 182, 194),
581            code_macro: Color::Rgb(97, 175, 239),
582            code_attribute: Color::Rgb(86, 182, 194),
583            code_lifetime: Color::Rgb(229, 192, 123),
584            code_shell_var: Color::Rgb(86, 182, 194),
585
586            // 表格
587            table_border: Color::Rgb(60, 60, 80),
588            table_header: Color::Rgb(80, 160, 240),
589            table_body: Color::Rgb(170, 170, 170),
590
591            // 帮助界面
592            help_title: Color::Rgb(100, 160, 240),
593            help_key: Color::Rgb(230, 210, 120),
594            help_desc: Color::Rgb(200, 200, 200),
595            help_path: Color::Rgb(100, 100, 100),
596            help_bg: Color::Rgb(37, 37, 38),
597        }
598    }
599
600    /// Light 主题(浅色主题,类似 VS Code Light+)
601    pub fn light() -> Self {
602        Self {
603            // 全局背景
604            bg_primary: Color::Rgb(255, 255, 255),
605            bg_title: Color::Rgb(243, 243, 243),
606            bg_input: Color::Rgb(248, 248, 248),
607            bg_panel: Color::Rgb(248, 248, 248),
608
609            // 边框
610            border_title: Color::Rgb(190, 190, 200),
611            border_message: Color::Rgb(210, 210, 220),
612            border_input: Color::Rgb(160, 200, 160),
613            border_input_loading: Color::Rgb(180, 150, 50),
614            border_config: Color::Rgb(190, 190, 200),
615            separator: Color::Rgb(210, 210, 220),
616
617            // 气泡
618            bubble_ai: Color::Rgb(240, 240, 245),
619            bubble_ai_selected: Color::Rgb(225, 230, 240),
620            bubble_user: Color::Rgb(210, 230, 255),
621            bubble_user_selected: Color::Rgb(190, 215, 250),
622
623            // 标签
624            label_ai: Color::Rgb(40, 140, 80),
625            label_user: Color::Rgb(30, 100, 200),
626            label_selected: Color::Rgb(180, 130, 20),
627
628            // 文字
629            text_normal: Color::Rgb(40, 40, 50),
630            text_bold: Color::Rgb(30, 100, 60),
631            text_dim: Color::Rgb(120, 120, 140),
632            text_very_dim: Color::Rgb(170, 170, 180),
633            text_white: Color::Rgb(40, 40, 50),
634            text_system: Color::Rgb(140, 140, 160),
635
636            // 标题栏
637            title_icon: Color::Rgb(40, 100, 200),
638            title_separator: Color::Rgb(200, 200, 210),
639            title_model: Color::Rgb(40, 140, 80),
640            title_count: Color::Rgb(100, 100, 120),
641            title_loading: Color::Rgb(180, 130, 20),
642
643            // 输入区
644            input_prompt: Color::Rgb(40, 140, 80),
645            input_prompt_loading: Color::Rgb(180, 130, 20),
646            cursor_fg: Color::Rgb(255, 255, 255),
647            cursor_bg: Color::Rgb(50, 100, 200),
648
649            // 提示栏
650            hint_key_fg: Color::Rgb(255, 255, 255),
651            hint_key_bg: Color::Rgb(100, 110, 130),
652            hint_desc: Color::Rgb(120, 120, 140),
653            hint_separator: Color::Rgb(210, 210, 220),
654
655            // Toast
656            toast_success_border: Color::Rgb(60, 160, 80),
657            toast_success_bg: Color::Rgb(230, 250, 235),
658            toast_success_text: Color::Rgb(30, 100, 50),
659            toast_error_border: Color::Rgb(200, 70, 70),
660            toast_error_bg: Color::Rgb(255, 235, 235),
661            toast_error_text: Color::Rgb(160, 30, 30),
662
663            // 欢迎界面
664            welcome_border: Color::Rgb(180, 190, 210),
665            welcome_text: Color::Rgb(60, 80, 130),
666            welcome_hint: Color::Rgb(140, 150, 170),
667
668            // 模型选择
669            model_sel_border: Color::Rgb(180, 160, 80),
670            model_sel_title: Color::Rgb(140, 110, 30),
671            model_sel_active: Color::Rgb(40, 140, 80),
672            model_sel_inactive: Color::Rgb(100, 100, 120),
673            model_sel_highlight_bg: Color::Rgb(225, 230, 245),
674
675            // 配置界面
676            config_title: Color::Rgb(40, 100, 200),
677            config_section: Color::Rgb(40, 140, 80),
678            config_pointer: Color::Rgb(180, 130, 20),
679            config_label_selected: Color::Rgb(140, 110, 30),
680            config_label: Color::Rgb(120, 120, 140),
681            config_value: Color::Rgb(60, 60, 80),
682            config_edit_bg: Color::Rgb(225, 230, 245),
683            config_tab_active_bg: Color::Rgb(40, 100, 200),
684            config_tab_active_fg: Color::Rgb(255, 255, 255),
685            config_tab_inactive: Color::Rgb(120, 120, 140),
686            config_hint_key: Color::Rgb(140, 110, 30),
687            config_hint_desc: Color::Rgb(120, 120, 140),
688            config_toggle_on: Color::Rgb(40, 140, 80),
689            config_toggle_off: Color::Rgb(200, 80, 80),
690            config_dim: Color::Rgb(170, 170, 180),
691            config_api_key: Color::Rgb(160, 160, 170),
692
693            // Markdown
694            md_h1: Color::Rgb(30, 80, 180),
695            md_h2: Color::Rgb(40, 100, 200),
696            md_h3: Color::Rgb(50, 110, 210),
697            md_h4: Color::Rgb(60, 120, 220),
698            md_heading_sep: Color::Rgb(180, 190, 210),
699            md_inline_code_fg: Color::Rgb(160, 80, 30),
700            md_inline_code_bg: Color::Rgb(240, 235, 225),
701            md_list_bullet: Color::Rgb(30, 100, 200),
702            md_blockquote_bar: Color::Rgb(100, 130, 180),
703            md_blockquote_text: Color::Rgb(80, 90, 110),
704            md_rule: Color::Rgb(190, 195, 210),
705
706            // 代码块(VS Code Light+ 风格)
707            code_border: Color::Rgb(190, 195, 210),
708            code_bg: Color::Rgb(245, 245, 248),
709            code_default: Color::Rgb(40, 40, 50),
710            code_keyword: Color::Rgb(175, 0, 219),
711            code_string: Color::Rgb(163, 21, 21),
712            code_comment: Color::Rgb(0, 128, 0),
713            code_number: Color::Rgb(9, 134, 88),
714            code_type: Color::Rgb(38, 127, 153),
715            code_primitive: Color::Rgb(0, 112, 193),
716            code_macro: Color::Rgb(121, 94, 38),
717            code_attribute: Color::Rgb(0, 112, 193),
718            code_lifetime: Color::Rgb(38, 127, 153),
719            code_shell_var: Color::Rgb(0, 112, 193),
720
721            // 表格
722            table_border: Color::Rgb(180, 190, 210),
723            table_header: Color::Rgb(30, 80, 180),
724            table_body: Color::Rgb(60, 60, 80),
725
726            // 帮助界面
727            help_title: Color::Rgb(40, 100, 200),
728            help_key: Color::Rgb(140, 110, 30),
729            help_desc: Color::Rgb(50, 50, 60),
730            help_path: Color::Rgb(120, 120, 140),
731            help_bg: Color::Rgb(248, 248, 248),
732        }
733    }
734
735    /// Nord 主题(基于 Nord 配色方案 - 极地冰蓝色调)
736    pub fn nord() -> Self {
737        Self {
738            // 全局背景 — Polar Night
739            bg_primary: Color::Rgb(46, 52, 64), // nord0
740            bg_title: Color::Rgb(59, 66, 82),   // nord1
741            bg_input: Color::Rgb(59, 66, 82),   // nord1
742            bg_panel: Color::Rgb(59, 66, 82),   // nord1
743
744            // 边框 — Polar Night / Snow Storm
745            border_title: Color::Rgb(76, 86, 106),  // nord3
746            border_message: Color::Rgb(67, 76, 94), // nord2
747            border_input: Color::Rgb(76, 86, 106),  // nord3
748            border_input_loading: Color::Rgb(235, 203, 139), // nord13
749            border_config: Color::Rgb(76, 86, 106), // nord3
750            separator: Color::Rgb(67, 76, 94),      // nord2
751
752            // 气泡
753            bubble_ai: Color::Rgb(59, 66, 82),          // nord1
754            bubble_ai_selected: Color::Rgb(67, 76, 94), // nord2
755            bubble_user: Color::Rgb(52, 75, 110),
756            bubble_user_selected: Color::Rgb(60, 85, 125),
757
758            // 标签 — Frost / Aurora
759            label_ai: Color::Rgb(163, 190, 140),       // nord14
760            label_user: Color::Rgb(129, 161, 193),     // nord9
761            label_selected: Color::Rgb(235, 203, 139), // nord13
762
763            // 文字
764            text_normal: Color::Rgb(216, 222, 233), // nord4
765            text_bold: Color::Rgb(210, 235, 220),
766            text_dim: Color::Rgb(128, 140, 160),
767            text_very_dim: Color::Rgb(76, 86, 106), // nord3
768            text_white: Color::Rgb(236, 239, 244),  // nord6
769            text_system: Color::Rgb(100, 112, 130),
770
771            // 标题栏
772            title_icon: Color::Rgb(136, 192, 208),   // nord8
773            title_separator: Color::Rgb(67, 76, 94), // nord2
774            title_model: Color::Rgb(163, 190, 140),  // nord14
775            title_count: Color::Rgb(178, 186, 202),
776            title_loading: Color::Rgb(235, 203, 139), // nord13
777
778            // 输入区
779            input_prompt: Color::Rgb(163, 190, 140), // nord14
780            input_prompt_loading: Color::Rgb(235, 203, 139), // nord13
781            cursor_fg: Color::Rgb(46, 52, 64),       // nord0
782            cursor_bg: Color::Rgb(216, 222, 233),    // nord4
783
784            // 提示栏
785            hint_key_fg: Color::Rgb(46, 52, 64),  // nord0
786            hint_key_bg: Color::Rgb(76, 86, 106), // nord3
787            hint_desc: Color::Rgb(128, 140, 160),
788            hint_separator: Color::Rgb(59, 66, 82), // nord1
789
790            // Toast
791            toast_success_border: Color::Rgb(163, 190, 140), // nord14
792            toast_success_bg: Color::Rgb(50, 60, 55),
793            toast_success_text: Color::Rgb(163, 190, 140),
794            toast_error_border: Color::Rgb(191, 97, 106), // nord11
795            toast_error_bg: Color::Rgb(60, 50, 52),
796            toast_error_text: Color::Rgb(191, 97, 106),
797
798            // 欢迎界面
799            welcome_border: Color::Rgb(76, 86, 106), // nord3
800            welcome_text: Color::Rgb(136, 192, 208), // nord8
801            welcome_hint: Color::Rgb(100, 112, 130),
802
803            // 模型选择
804            model_sel_border: Color::Rgb(235, 203, 139), // nord13
805            model_sel_title: Color::Rgb(235, 203, 139),
806            model_sel_active: Color::Rgb(163, 190, 140), // nord14
807            model_sel_inactive: Color::Rgb(178, 186, 202),
808            model_sel_highlight_bg: Color::Rgb(67, 76, 94), // nord2
809
810            // 配置界面
811            config_title: Color::Rgb(129, 161, 193), // nord9
812            config_section: Color::Rgb(163, 190, 140), // nord14
813            config_pointer: Color::Rgb(235, 203, 139), // nord13
814            config_label_selected: Color::Rgb(235, 203, 139),
815            config_label: Color::Rgb(128, 140, 160),
816            config_value: Color::Rgb(178, 186, 202),
817            config_edit_bg: Color::Rgb(67, 76, 94), // nord2
818            config_tab_active_bg: Color::Rgb(129, 161, 193), // nord9
819            config_tab_active_fg: Color::Rgb(46, 52, 64), // nord0
820            config_tab_inactive: Color::Rgb(128, 140, 160),
821            config_hint_key: Color::Rgb(235, 203, 139),
822            config_hint_desc: Color::Rgb(128, 140, 160),
823            config_toggle_on: Color::Rgb(163, 190, 140), // nord14
824            config_toggle_off: Color::Rgb(191, 97, 106), // nord11
825            config_dim: Color::Rgb(76, 86, 106),         // nord3
826            config_api_key: Color::Rgb(100, 112, 130),
827
828            // Markdown — Frost colors
829            md_h1: Color::Rgb(136, 192, 208), // nord8
830            md_h2: Color::Rgb(129, 161, 193), // nord9
831            md_h3: Color::Rgb(143, 188, 187), // nord7
832            md_h4: Color::Rgb(178, 186, 202),
833            md_heading_sep: Color::Rgb(67, 76, 94), // nord2
834            md_inline_code_fg: Color::Rgb(235, 203, 139), // nord13
835            md_inline_code_bg: Color::Rgb(59, 66, 82), // nord1
836            md_list_bullet: Color::Rgb(129, 161, 193), // nord9
837            md_blockquote_bar: Color::Rgb(76, 86, 106), // nord3
838            md_blockquote_text: Color::Rgb(160, 170, 185),
839            md_rule: Color::Rgb(67, 76, 94), // nord2
840
841            // 代码块 — Nord 风格语法高亮
842            code_border: Color::Rgb(76, 86, 106),    // nord3
843            code_bg: Color::Rgb(46, 52, 64),         // nord0
844            code_default: Color::Rgb(216, 222, 233), // nord4
845            code_keyword: Color::Rgb(180, 142, 173), // nord15
846            code_string: Color::Rgb(163, 190, 140),  // nord14
847            code_comment: Color::Rgb(97, 110, 128),
848            code_number: Color::Rgb(208, 135, 112), // nord12
849            code_type: Color::Rgb(235, 203, 139),   // nord13
850            code_primitive: Color::Rgb(143, 188, 187), // nord7
851            code_macro: Color::Rgb(136, 192, 208),  // nord8
852            code_attribute: Color::Rgb(143, 188, 187), // nord7
853            code_lifetime: Color::Rgb(235, 203, 139), // nord13
854            code_shell_var: Color::Rgb(143, 188, 187), // nord7
855
856            // 表格
857            table_border: Color::Rgb(67, 76, 94),    // nord2
858            table_header: Color::Rgb(136, 192, 208), // nord8
859            table_body: Color::Rgb(178, 186, 202),
860
861            // 帮助界面
862            help_title: Color::Rgb(136, 192, 208), // nord8
863            help_key: Color::Rgb(235, 203, 139),   // nord13
864            help_desc: Color::Rgb(216, 222, 233),  // nord4
865            help_path: Color::Rgb(100, 112, 130),
866            help_bg: Color::Rgb(59, 66, 82), // nord1
867        }
868    }
869
870    /// Monokai 主题(经典 Monokai 配色 - 暖色调高对比度)
871    pub fn monokai() -> Self {
872        Self {
873            // 全局背景
874            bg_primary: Color::Rgb(39, 40, 34),
875            bg_title: Color::Rgb(49, 50, 44),
876            bg_input: Color::Rgb(49, 50, 44),
877            bg_panel: Color::Rgb(49, 50, 44),
878
879            // 边框
880            border_title: Color::Rgb(80, 80, 70),
881            border_message: Color::Rgb(65, 65, 55),
882            border_input: Color::Rgb(80, 80, 70),
883            border_input_loading: Color::Rgb(230, 219, 116), // monokai yellow
884            border_config: Color::Rgb(80, 80, 70),
885            separator: Color::Rgb(65, 65, 55),
886
887            // 气泡
888            bubble_ai: Color::Rgb(49, 50, 44),
889            bubble_ai_selected: Color::Rgb(60, 62, 54),
890            bubble_user: Color::Rgb(55, 65, 85),
891            bubble_user_selected: Color::Rgb(65, 78, 100),
892
893            // 标签
894            label_ai: Color::Rgb(166, 226, 46),    // monokai green
895            label_user: Color::Rgb(102, 217, 239), // monokai cyan
896            label_selected: Color::Rgb(230, 219, 116), // monokai yellow
897
898            // 文字
899            text_normal: Color::Rgb(248, 248, 242), // monokai foreground
900            text_bold: Color::Rgb(215, 245, 225),
901            text_dim: Color::Rgb(140, 140, 130),
902            text_very_dim: Color::Rgb(90, 90, 80),
903            text_white: Color::Rgb(248, 248, 242),
904            text_system: Color::Rgb(117, 113, 94), // monokai comment color
905
906            // 标题栏
907            title_icon: Color::Rgb(102, 217, 239), // monokai cyan
908            title_separator: Color::Rgb(65, 65, 55),
909            title_model: Color::Rgb(166, 226, 46), // monokai green
910            title_count: Color::Rgb(190, 190, 180),
911            title_loading: Color::Rgb(230, 219, 116), // monokai yellow
912
913            // 输入区
914            input_prompt: Color::Rgb(166, 226, 46), // monokai green
915            input_prompt_loading: Color::Rgb(230, 219, 116),
916            cursor_fg: Color::Rgb(39, 40, 34),
917            cursor_bg: Color::Rgb(248, 248, 242),
918
919            // 提示栏
920            hint_key_fg: Color::Rgb(39, 40, 34),
921            hint_key_bg: Color::Rgb(117, 113, 94),
922            hint_desc: Color::Rgb(140, 140, 130),
923            hint_separator: Color::Rgb(55, 55, 45),
924
925            // Toast
926            toast_success_border: Color::Rgb(166, 226, 46),
927            toast_success_bg: Color::Rgb(45, 55, 38),
928            toast_success_text: Color::Rgb(166, 226, 46),
929            toast_error_border: Color::Rgb(249, 38, 114), // monokai pink
930            toast_error_bg: Color::Rgb(60, 38, 42),
931            toast_error_text: Color::Rgb(249, 38, 114),
932
933            // 欢迎界面
934            welcome_border: Color::Rgb(80, 80, 70),
935            welcome_text: Color::Rgb(102, 217, 239), // monokai cyan
936            welcome_hint: Color::Rgb(100, 100, 90),
937
938            // 模型选择
939            model_sel_border: Color::Rgb(230, 219, 116),
940            model_sel_title: Color::Rgb(230, 219, 116),
941            model_sel_active: Color::Rgb(166, 226, 46),
942            model_sel_inactive: Color::Rgb(190, 190, 180),
943            model_sel_highlight_bg: Color::Rgb(60, 62, 54),
944
945            // 配置界面
946            config_title: Color::Rgb(102, 217, 239),
947            config_section: Color::Rgb(166, 226, 46),
948            config_pointer: Color::Rgb(230, 219, 116),
949            config_label_selected: Color::Rgb(230, 219, 116),
950            config_label: Color::Rgb(140, 140, 130),
951            config_value: Color::Rgb(190, 190, 180),
952            config_edit_bg: Color::Rgb(60, 62, 54),
953            config_tab_active_bg: Color::Rgb(102, 217, 239),
954            config_tab_active_fg: Color::Rgb(39, 40, 34),
955            config_tab_inactive: Color::Rgb(140, 140, 130),
956            config_hint_key: Color::Rgb(230, 219, 116),
957            config_hint_desc: Color::Rgb(140, 140, 130),
958            config_toggle_on: Color::Rgb(166, 226, 46),
959            config_toggle_off: Color::Rgb(249, 38, 114),
960            config_dim: Color::Rgb(90, 90, 80),
961            config_api_key: Color::Rgb(100, 100, 90),
962
963            // Markdown
964            md_h1: Color::Rgb(249, 38, 114),  // monokai pink
965            md_h2: Color::Rgb(102, 217, 239), // monokai cyan
966            md_h3: Color::Rgb(166, 226, 46),  // monokai green
967            md_h4: Color::Rgb(230, 219, 116), // monokai yellow
968            md_heading_sep: Color::Rgb(80, 80, 70),
969            md_inline_code_fg: Color::Rgb(230, 219, 116), // monokai yellow
970            md_inline_code_bg: Color::Rgb(55, 55, 45),
971            md_list_bullet: Color::Rgb(249, 38, 114), // monokai pink
972            md_blockquote_bar: Color::Rgb(117, 113, 94),
973            md_blockquote_text: Color::Rgb(170, 170, 160),
974            md_rule: Color::Rgb(80, 80, 70),
975
976            // 代码块 — Monokai 经典语法高亮
977            code_border: Color::Rgb(80, 80, 70),
978            code_bg: Color::Rgb(39, 40, 34),
979            code_default: Color::Rgb(248, 248, 242), // monokai foreground
980            code_keyword: Color::Rgb(249, 38, 114),  // monokai pink
981            code_string: Color::Rgb(230, 219, 116),  // monokai yellow
982            code_comment: Color::Rgb(117, 113, 94),  // monokai comment
983            code_number: Color::Rgb(174, 129, 255),  // monokai purple
984            code_type: Color::Rgb(166, 226, 46),     // monokai green
985            code_primitive: Color::Rgb(102, 217, 239), // monokai cyan
986            code_macro: Color::Rgb(102, 217, 239),   // monokai cyan
987            code_attribute: Color::Rgb(166, 226, 46), // monokai green
988            code_lifetime: Color::Rgb(174, 129, 255), // monokai purple
989            code_shell_var: Color::Rgb(102, 217, 239), // monokai cyan
990
991            // 表格
992            table_border: Color::Rgb(80, 80, 70),
993            table_header: Color::Rgb(102, 217, 239),
994            table_body: Color::Rgb(190, 190, 180),
995
996            // 帮助界面
997            help_title: Color::Rgb(102, 217, 239),
998            help_key: Color::Rgb(230, 219, 116),
999            help_desc: Color::Rgb(248, 248, 242),
1000            help_path: Color::Rgb(117, 113, 94),
1001            help_bg: Color::Rgb(49, 50, 44),
1002        }
1003    }
1004}