use anyhow::Result;
use crossterm::event::{KeyCode, KeyModifiers};
use crate::event_loop::{Buffer, LoopCtx};
use crate::render::Renderer;
use crate::state::UiState;
pub mod dir_picker;
pub mod issue_wizard;
pub mod language_picker;
pub mod model_picker;
pub mod onboarding_wizard;
mod qr;
pub mod provider_wizard;
pub mod session_picker;
pub use dir_picker::DirPicker;
pub use issue_wizard::IssueWizard;
pub use language_picker::LanguagePicker;
pub use model_picker::ModelPicker;
pub use onboarding_wizard::OnboardingWizard;
pub use provider_wizard::ProviderWizard;
pub use session_picker::SessionPicker;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ModalAction {
Continue,
Close,
}
pub trait Modal: Send {
fn handle_key(
&mut self,
code: KeyCode,
mods: KeyModifiers,
buf: &mut Buffer,
state: &mut UiState,
ctx: &mut LoopCtx,
renderer: &mut dyn Renderer,
) -> Result<ModalAction>;
fn draw(&self, buf: &Buffer, state: &UiState, ctx: &LoopCtx, renderer: &mut dyn Renderer);
fn handle_paste(
&mut self,
text: &str,
buf: &mut Buffer,
state: &mut UiState,
ctx: &mut LoopCtx,
renderer: &mut dyn Renderer,
) -> Result<ModalAction> {
buf.insert_paste(text.to_string());
self.draw(buf, state, ctx, renderer);
Ok(ModalAction::Continue)
}
}