popup/
popup.rs

1use color_eyre::Result;
2use lipsum::lipsum;
3use ratatui::crossterm::event::{self, Event};
4use ratatui::prelude::{Rect, Style, Stylize};
5use ratatui::widgets::{Paragraph, Wrap};
6use ratatui::Frame;
7use tui_popup::Popup;
8
9fn main() -> Result<()> {
10    color_eyre::install()?;
11    let mut terminal = ratatui::init();
12    let result = run(&mut terminal);
13    ratatui::restore();
14    result
15}
16
17fn run(terminal: &mut ratatui::DefaultTerminal) -> Result<()> {
18    loop {
19        terminal.draw(|frame| {
20            render(frame);
21        })?;
22        if matches!(event::read()?, Event::Key(_)) {
23            break Ok(());
24        }
25    }
26}
27
28fn render(frame: &mut Frame) {
29    let area = frame.area();
30    let background = background(area);
31    let popup = Popup::new("Press any key to exit")
32        .title("tui-popup demo")
33        .style(Style::new().white().on_blue());
34    frame.render_widget(background, area);
35    frame.render_widget(popup, area);
36}
37
38fn background(area: Rect) -> Paragraph<'static> {
39    let lorem_ipsum = lipsum(area.area() as usize / 5);
40    Paragraph::new(lorem_ipsum)
41        .wrap(Wrap { trim: false })
42        .dark_gray()
43}