use std::sync::Arc;
use kimun_core::NoteVault;
use ratatui::Frame;
use ratatui::layout::Rect;
use crate::components::event_state::EventState;
use crate::components::events::{AppEvent, AppTx, InputEvent};
use crate::settings::themes::Theme;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum OverlayKind {
NoteBrowser,
SavedSearches,
Dialog,
}
impl OverlayKind {
pub fn label(&self) -> &'static str {
match self {
OverlayKind::NoteBrowser => "NOTE BROWSER",
OverlayKind::SavedSearches => "SAVED SEARCHES",
OverlayKind::Dialog => "DIALOG",
}
}
}
#[derive(Debug)]
pub enum OverlayMsg {
NotConsumed,
Consumed,
}
pub trait Overlay: Send {
fn kind(&self) -> OverlayKind;
fn handle_input(&mut self, event: &InputEvent, tx: &AppTx) -> EventState;
fn handle_app_message(
&mut self,
_msg: &AppEvent,
_vault: &Arc<NoteVault>,
_tx: &AppTx,
) -> OverlayMsg {
OverlayMsg::NotConsumed
}
fn render(&mut self, f: &mut Frame, area: Rect, theme: &Theme);
fn hint_shortcuts(&self) -> Vec<(String, String)> {
vec![]
}
fn query(&self) -> Option<&str> {
None
}
}