mirror of
https://github.com/YuuKi-OS/yuy-chat.git
synced 2026-02-18 22:01:09 +00:00
74 lines
2.4 KiB
Rust
74 lines
2.4 KiB
Rust
use crate::app::App;
|
|
use ratatui::{
|
|
backend::Backend,
|
|
layout::{Alignment, Constraint, Direction, Layout},
|
|
style::{Color, Modifier, Style},
|
|
text::{Line, Span},
|
|
widgets::{Block, Borders, List, ListItem, Paragraph},
|
|
Frame,
|
|
};
|
|
|
|
pub fn render<B: Backend>(f: &mut Frame, app: &App) {
|
|
let chunks = Layout::default()
|
|
.direction(Direction::Vertical)
|
|
.constraints([
|
|
Constraint::Length(3),
|
|
Constraint::Min(0),
|
|
Constraint::Length(3),
|
|
])
|
|
.split(f.area());
|
|
|
|
// Title
|
|
let title = Paragraph::new("Menu")
|
|
.style(Style::default().fg(Color::Magenta).add_modifier(Modifier::BOLD))
|
|
.alignment(Alignment::Center)
|
|
.block(Block::default().borders(Borders::ALL));
|
|
f.render_widget(title, chunks[0]);
|
|
|
|
// Menu items
|
|
let items = vec![
|
|
ListItem::new(Line::from(vec![
|
|
Span::styled("1. ", Style::default().fg(Color::Yellow)),
|
|
Span::raw("Change Model"),
|
|
])),
|
|
ListItem::new(Line::from(vec![
|
|
Span::styled("2. ", Style::default().fg(Color::Yellow)),
|
|
Span::raw(format!("Change Preset (Current: {})", app.current_preset.as_str())),
|
|
])),
|
|
ListItem::new(Line::from(vec![
|
|
Span::styled("3. ", Style::default().fg(Color::Yellow)),
|
|
Span::raw("Save Conversation"),
|
|
])),
|
|
ListItem::new(Line::from(vec![
|
|
Span::styled("4. ", Style::default().fg(Color::Yellow)),
|
|
Span::raw("Load Conversation"),
|
|
])),
|
|
ListItem::new(Line::from(vec![
|
|
Span::styled("5. ", Style::default().fg(Color::Yellow)),
|
|
Span::raw("Clear Chat"),
|
|
])),
|
|
ListItem::new(Line::from(vec![
|
|
Span::styled("6. ", Style::default().fg(Color::Yellow)),
|
|
Span::raw("Settings"),
|
|
])),
|
|
ListItem::new(""),
|
|
ListItem::new(Line::from(vec![
|
|
Span::styled("Q. ", Style::default().fg(Color::Red)),
|
|
Span::raw("Back to Chat"),
|
|
])),
|
|
];
|
|
|
|
let list = List::new(items)
|
|
.block(Block::default().borders(Borders::ALL).title("Options"));
|
|
|
|
f.render_widget(list, chunks[1]);
|
|
|
|
// Help
|
|
let help = Paragraph::new("Press number key or Q to go back")
|
|
.style(Style::default().fg(Color::Gray))
|
|
.alignment(Alignment::Center)
|
|
.block(Block::default().borders(Borders::ALL));
|
|
|
|
f.render_widget(help, chunks[2]);
|
|
}
|