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}