message/
message.rs

1use std::{error::Error, time::Duration};
2
3use ratatui::prelude::{Constraint, Direction, Layout};
4use widgetui::{
5    widgets::message::{Message, MessageChunk, MessageState},
6    *,
7};
8
9fn chunk_builder(frame: Res<'_, WidgetFrame>, mut chunks: ResMut<'_, Chunks>) -> WidgetResult {
10    let popup = layout![
11        frame.size(),
12        (%50),
13        (>3) => {
14            %10,
15            %80,
16            %10
17        },
18        (%50)
19    ][1][1];
20
21    chunks.register_chunk::<MessageChunk>(popup);
22
23    Ok(())
24}
25
26fn my_widget(mut events: ResMut<Events>, mut message: ResMut<MessageState>) -> WidgetResult {
27    if events.key(crossterm::event::KeyCode::Char('m')) {
28        message.render_message("Custom Message", Duration::from_millis(500));
29    }
30
31    if events.key(crossterm::event::KeyCode::Char('n')) {
32        message.render_message("Cool", Duration::from_millis(500));
33    }
34
35    if events.key(crossterm::event::KeyCode::Char('q')) {
36        events.register_exit()
37    }
38
39    Ok(())
40}
41
42fn main() -> Result<(), Box<dyn Error>> {
43    Ok(App::new(100)?
44        .handle_panics()
45        .widgets((chunk_builder, my_widget))
46        .sets(Message)
47        .run()?)
48}