mod config;
mod handle;
mod state;
mod widget;
pub use config::*;
pub use state::*;
pub use widget::*;
use crate::Result;
use crossterm::event::KeyCode;
use crossterm::event::KeyModifiers;
use ratatui::buffer::Buffer;
use ratatui::layout::Position;
use ratatui::layout::Rect;
pub trait Modal<RESPONSE, EVENT>: std::fmt::Debug
{
fn config(&self) -> ModalConfig;
fn render(
&mut self,
area: Rect,
buf: &mut Buffer,
);
fn handle_key_event(
&mut self,
code: KeyCode,
modifiers: KeyModifiers,
event: EVENT,
) -> Result<RESPONSE>;
fn cursor(&self) -> Option<Position>;
}
pub trait ModalService<RESPONSE, EVENT>
{
fn modal(&mut self) -> Option<Box<dyn Modal<RESPONSE, EVENT>>>;
fn modal_event(&mut self) -> Option<EVENT>;
}