mermaid_cli/render/widgets/
mod.rs1mod attachment;
8mod chat;
9mod conversation_list;
10mod input;
11mod slash_palette;
12mod status;
13mod status_banner;
14mod status_line;
15
16pub use attachment::AttachmentWidget;
17pub use chat::{ChatState, ChatWidget, ImageClickTarget};
18pub use conversation_list::ConversationListWidget;
19pub use input::{InputState, InputWidget};
20pub use slash_palette::SlashPaletteWidget;
21pub use status::StatusWidget;
22pub use status_banner::StatusBannerWidget;
23pub use status_line::StatusLineWidget;
24
25#[derive(Debug, Clone, Copy, PartialEq, Eq)]
30pub enum GenerationStatus {
31 Idle,
32 Sending,
33 Thinking,
34 Streaming,
35}
36
37impl GenerationStatus {
38 pub fn display_text(&self) -> &str {
39 match self {
40 GenerationStatus::Idle => "Idle",
41 GenerationStatus::Sending => "Sending",
42 GenerationStatus::Thinking => "Thinking",
43 GenerationStatus::Streaming => "Streaming",
44 }
45 }
46
47 pub fn from_turn(turn: &crate::domain::TurnState) -> Self {
53 use crate::domain::{GenPhase, TurnState};
54 match turn {
55 TurnState::Idle => GenerationStatus::Idle,
56 TurnState::Generating { phase, .. } => match phase {
57 GenPhase::Sending => GenerationStatus::Sending,
58 GenPhase::Thinking => GenerationStatus::Thinking,
59 GenPhase::Streaming => GenerationStatus::Streaming,
60 },
61 TurnState::ExecutingTools { .. }
62 | TurnState::Compacting { .. }
63 | TurnState::Cancelling { .. } => GenerationStatus::Streaming,
64 }
65 }
66}