use ratatui::Frame;
use ratatui::layout::Rect;
use ratatui::style::{Modifier, Style};
use ratatui::text::{Line, Span};
use ratatui::widgets::Paragraph;
use crate::keymap::{self, Bar};
use crate::state::{AppState, Mode};
pub fn draw(f: &mut Frame, global: Rect, context: Rect, state: &AppState) {
let g = bar_line(&keymap::bar_items(state, Bar::Global));
f.render_widget(
Paragraph::new(g).style(Style::new().add_modifier(Modifier::REVERSED)),
global,
);
let c = match state.mode {
Mode::Command => bar_line(&[("⏎", "run"), ("Esc", "cancel"), ("C-u", "clear")]),
Mode::Help => bar_line(&[("any key", "close")]),
Mode::Normal => bar_line(&keymap::bar_items(state, Bar::Context)),
};
f.render_widget(
Paragraph::new(c).style(Style::new().add_modifier(Modifier::DIM)),
context,
);
}
fn bar_line(items: &[(&'static str, &'static str)]) -> Line<'static> {
let mut spans = vec![Span::raw(" ")];
for (i, (key, action)) in items.iter().enumerate() {
if i > 0 {
spans.push(Span::raw(" "));
}
spans.push(Span::styled(
*key,
Style::new().add_modifier(Modifier::BOLD),
));
spans.push(Span::raw(" "));
spans.push(Span::raw(*action));
}
Line::from(spans)
}