ratatui-toolkit 0.2.6

DEPRECATED: this crate was renamed to `ratkit`. Please migrate to `ratkit`.
Documentation
mod with_theme;

use ratatui::buffer::Buffer;
use ratatui::layout::Rect;
use ratatui::style::{Modifier, Style};
use ratatui::text::{Line, Span};
use ratatui::widgets::{Paragraph, Widget};
use ratatui::Frame;

use crate::widgets::hotkey_footer::HotkeyFooter;

impl HotkeyFooter {
    fn build_line(&self) -> Line<'static> {
        let mut spans = Vec::new();

        for (i, item) in self.items.iter().enumerate() {
            if i == 0 {
                spans.push(Span::raw(" "));
            }

            spans.push(Span::styled(
                item.key.clone(),
                Style::default()
                    .fg(self.key_color)
                    .add_modifier(Modifier::BOLD),
            ));

            spans.push(Span::styled(
                format!(" {}  ", item.description),
                Style::default().fg(self.description_color),
            ));
        }

        Line::from(spans)
    }

    pub fn render(&self, frame: &mut Frame, area: Rect) {
        let line = self.build_line();
        let widget = Paragraph::new(line).style(Style::default().bg(self.background_color));
        frame.render_widget(widget, area);
    }
}

impl Widget for HotkeyFooter {
    fn render(self, area: Rect, buf: &mut Buffer) {
        let line = self.build_line();
        let widget = Paragraph::new(line).style(Style::default().bg(self.background_color));
        widget.render(area, buf);
    }
}

impl Widget for &HotkeyFooter {
    fn render(self, area: Rect, buf: &mut Buffer) {
        let line = self.build_line();
        let widget = Paragraph::new(line).style(Style::default().bg(self.background_color));
        widget.render(area, buf);
    }
}