1mod app;
2mod commands;
3mod draw;
4mod events;
5mod input;
6mod markdown;
7mod types;
8mod utils;
9pub mod image_utils;
10pub mod image_search;
11pub mod workflow;
12
13use anyhow::Result;
14use ratatui::{
15 Terminal,
16 backend::CrosstermBackend,
17 crossterm::{
18 cursor::Show,
19 event, execute,
20 terminal::{disable_raw_mode, enable_raw_mode, Clear, ClearType},
21 },
22};
23use std::io::Stdout;
24
25pub use app::TuiApp;
26pub use matrixcode_core::{AgentEvent, EventData, EventType, cancel::CancellationToken};
27pub use ratatui::crossterm;
29
30pub(crate) const ANIM_MS: u64 = 80;
31pub(crate) const SPINNER: [&str; 10] = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
32pub(crate) const BORDER_PADDING: usize = 4;
34
35pub fn setup_terminal() -> Result<Terminal<CrosstermBackend<Stdout>>> {
36 enable_raw_mode()?;
37 execute!(
39 std::io::stdout(),
40 Clear(ClearType::All),
41 event::EnableMouseCapture,
42 event::EnableBracketedPaste
43 )?;
44 let t = Terminal::new(CrosstermBackend::new(std::io::stdout()))?;
45 Ok(t)
46}
47
48pub fn restore_terminal() -> Result<()> {
49 disable_raw_mode()?;
50 execute!(
52 std::io::stdout(),
53 Clear(ClearType::All),
54 event::DisableMouseCapture,
55 event::DisableBracketedPaste,
56 Show
57 )?;
58 Ok(())
59}