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 RunningTools,
36 Compacting,
37 Cancelling,
38}
39
40impl GenerationStatus {
41 pub fn display_text(&self) -> &str {
42 match self {
43 GenerationStatus::Idle => "Idle",
44 GenerationStatus::Sending => "Sending",
45 GenerationStatus::Thinking => "Thinking",
46 GenerationStatus::Streaming => "Streaming",
47 GenerationStatus::RunningTools => "Running tools",
48 GenerationStatus::Compacting => "Compacting",
49 GenerationStatus::Cancelling => "Cancelling",
50 }
51 }
52
53 pub fn from_turn(turn: &crate::domain::TurnState) -> Self {
59 use crate::domain::{GenPhase, TurnState};
60 match turn {
61 TurnState::Idle => GenerationStatus::Idle,
62 TurnState::Generating { phase, .. } => match phase {
63 GenPhase::Sending => GenerationStatus::Sending,
64 GenPhase::Thinking => GenerationStatus::Thinking,
65 GenPhase::Streaming => GenerationStatus::Streaming,
66 },
67 TurnState::ExecutingTools { .. } => GenerationStatus::RunningTools,
68 TurnState::Compacting { .. } => GenerationStatus::Compacting,
69 TurnState::Cancelling { .. } => GenerationStatus::Cancelling,
70 }
71 }
72}