7b91169017
- Move src/* into crates/tui/src/ to create a proper workspace structure - Add .claude/ and .trimtab/ directories for Trimtab closed-loop workflow - Add DEPENDENCY_GRAPH.md and update documentation - Update Cargo.toml files to reflect new crate dependencies - Update CI workflows and npm package scripts - All tests pass, release build works
31 lines
974 B
Rust
31 lines
974 B
Rust
//! Terminal UI helpers (progress bars, spinners).
|
|
|
|
use indicatif::{ProgressBar, ProgressStyle};
|
|
|
|
/// Create a spinner progress indicator.
|
|
#[must_use]
|
|
#[allow(dead_code)]
|
|
pub fn spinner(message: &str) -> ProgressBar {
|
|
let spinner = ProgressBar::new_spinner();
|
|
spinner.set_message(message.to_string());
|
|
spinner.set_style(
|
|
ProgressStyle::with_template("{spinner} {msg}")
|
|
.unwrap_or_else(|_| ProgressStyle::default_spinner()),
|
|
);
|
|
spinner.enable_steady_tick(std::time::Duration::from_millis(120));
|
|
spinner
|
|
}
|
|
|
|
/// Create a progress bar for byte-based transfers.
|
|
#[must_use]
|
|
#[allow(dead_code)]
|
|
pub fn progress_bar(total: u64, message: &str) -> ProgressBar {
|
|
let bar = ProgressBar::new(total);
|
|
bar.set_message(message.to_string());
|
|
bar.set_style(
|
|
ProgressStyle::with_template("{msg} [{bar:40.cyan/blue}] {bytes}/{total_bytes} ({eta})")
|
|
.unwrap_or_else(|_| ProgressStyle::default_bar()),
|
|
);
|
|
bar
|
|
}
|