ratkit 0.2.14

A comprehensive collection of reusable TUI components for ratatui including resizable splits, tree views, markdown rendering, toast notifications, dialogs, and terminal embedding
Documentation
use std::io;

use crossterm::event::KeyCode;
use ratatui::{
    style::{Color, Style},
    text::Line,
    widgets::Paragraph,
    Frame,
};
use ratkit::prelude::{
    run_with_diagnostics, CoordinatorAction, CoordinatorApp, CoordinatorEvent, RunnerConfig,
};
use ratkit::widgets::{Button, Pane};

struct RatkitDemo {
    button: Button,
}

impl RatkitDemo {
    fn new() -> Self {
        Self {
            button: Button::new("Run"),
        }
    }
}

impl CoordinatorApp for RatkitDemo {
    fn on_event(&mut self, event: CoordinatorEvent) -> ratkit::LayoutResult<CoordinatorAction> {
        match event {
            CoordinatorEvent::Keyboard(keyboard) if keyboard.key_code == KeyCode::Char('q') => {
                Ok(CoordinatorAction::Quit)
            }
            _ => Ok(CoordinatorAction::Redraw),
        }
    }

    fn on_draw(&mut self, frame: &mut Frame) {
        let area = frame.area();
        let pane = Pane::new("ratkit")
            .with_icon("")
            .with_uniform_padding(1)
            .border_style(Style::default().fg(Color::Cyan));

        let button_line = self.button.render_with_title(area, "ratkit demo");
        let content = vec![
            button_line,
            Line::from("Press q to quit"),
            Line::from("(Runner-first + master widgets namespace demo)"),
        ];

        let inner = pane.render_block(frame, area).0;
        frame.render_widget(Paragraph::new(content), inner);
    }
}

fn main() -> io::Result<()> {
    let app = RatkitDemo::new();
    run_with_diagnostics(app, RunnerConfig::default())
}