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}