mod attachment;
mod chat;
mod conversation_list;
mod input;
mod slash_palette;
mod status;
mod status_banner;
mod status_line;
pub use attachment::AttachmentWidget;
pub use chat::{ChatState, ChatWidget, ImageClickTarget};
pub use conversation_list::ConversationListWidget;
pub use input::{InputState, InputWidget};
pub use slash_palette::SlashPaletteWidget;
pub use status::StatusWidget;
pub use status_banner::StatusBannerWidget;
pub use status_line::StatusLineWidget;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum GenerationStatus {
Idle,
Sending,
Thinking,
Streaming,
}
impl GenerationStatus {
pub fn display_text(&self) -> &str {
match self {
GenerationStatus::Idle => "Idle",
GenerationStatus::Sending => "Sending",
GenerationStatus::Thinking => "Thinking",
GenerationStatus::Streaming => "Streaming",
}
}
pub fn from_turn(turn: &crate::domain::TurnState) -> Self {
use crate::domain::{GenPhase, TurnState};
match turn {
TurnState::Idle => GenerationStatus::Idle,
TurnState::Generating { phase, .. } => match phase {
GenPhase::Sending => GenerationStatus::Sending,
GenPhase::Thinking => GenerationStatus::Thinking,
GenPhase::Streaming => GenerationStatus::Streaming,
},
TurnState::ExecutingTools { .. }
| TurnState::Compacting { .. }
| TurnState::Cancelling { .. } => GenerationStatus::Streaming,
}
}
}