vx_cli/
ui.rs

1//! User interface utilities
2
3use colored::*;
4use std::sync::atomic::{AtomicBool, Ordering};
5
6static VERBOSE: AtomicBool = AtomicBool::new(false);
7
8/// UI utilities for consistent output formatting
9pub struct UI;
10
11impl UI {
12    /// Set verbose mode
13    pub fn set_verbose(verbose: bool) {
14        VERBOSE.store(verbose, Ordering::Relaxed);
15    }
16
17    /// Check if verbose mode is enabled
18    pub fn is_verbose() -> bool {
19        VERBOSE.load(Ordering::Relaxed)
20    }
21
22    /// Print an info message
23    pub fn info(message: &str) {
24        println!("{} {}", "ℹ".blue(), message);
25    }
26
27    /// Print a success message
28    pub fn success(message: &str) {
29        println!("{} {}", "✅".green(), message);
30    }
31
32    /// Print a warning message
33    pub fn warn(message: &str) {
34        println!("{} {}", "⚠".yellow(), message.yellow());
35    }
36
37    /// Print an error message
38    pub fn error(message: &str) {
39        eprintln!("{} {}", "❌".red(), message.red());
40    }
41
42    /// Print a debug message (only in verbose mode)
43    pub fn debug(message: &str) {
44        if Self::is_verbose() {
45            println!("{} {}", "🐛".purple(), message.dimmed());
46        }
47    }
48
49    /// Print a hint message
50    pub fn hint(message: &str) {
51        println!("{} {}", "💡".cyan(), message.dimmed());
52    }
53
54    /// Print a list item
55    pub fn item(message: &str) {
56        println!("  {}", message);
57    }
58
59    /// Print a detail line (indented)
60    pub fn detail(message: &str) {
61        println!("    {}", message.dimmed());
62    }
63
64    /// Print a separator line
65    pub fn separator() {
66        println!("{}", "─".repeat(50).dimmed());
67    }
68
69    /// Print a header
70    pub fn header(message: &str) {
71        println!("\n{}", message.bold().underline());
72    }
73
74    /// Print a progress message
75    pub fn progress(message: &str) {
76        print!("{} {}...", "⏳".yellow(), message);
77        std::io::Write::flush(&mut std::io::stdout()).unwrap();
78    }
79
80    /// Complete a progress message
81    pub fn progress_done() {
82        println!(" {}", "Done!".green());
83    }
84
85    /// Print a spinner (placeholder for now)
86    pub fn spinner(message: &str) {
87        println!("{} {}", "⏳".yellow(), message);
88    }
89
90    /// Print a step message
91    pub fn step(message: &str) {
92        println!("{} {}", "▶".blue(), message);
93    }
94
95    /// Alias for warn method (for backward compatibility)
96    pub fn warning(message: &str) {
97        Self::warn(message);
98    }
99
100    /// Create a new spinner (returns a simple message for now)
101    pub fn new_spinner(message: &str) -> SimpleSpinner {
102        Self::spinner(message);
103        SimpleSpinner
104    }
105}
106
107/// Simple spinner placeholder
108pub struct SimpleSpinner;
109
110impl SimpleSpinner {
111    pub fn finish_and_clear(&self) {
112        // For now, just print a completion message
113        println!(" {}", "Done!".green());
114    }
115}