p1_demo/
p1_demo.rs

1use std::{thread, time::Duration};
2
3use xacli_components::{Confirm, MultiSelect, ProgressBar, Spinner};
4
5fn main() {
6    println!("=== P1 Components Demo ===\n");
7
8    // 1. MultiSelect
9    let languages = match MultiSelect::new("Select languages you know:")
10        .option("Rust", "rust")
11        .option("Python", "python")
12        .option("JavaScript", "javascript")
13        .option("Go", "go")
14        .run()
15    {
16        Ok(langs) => langs,
17        Err(e) => {
18            eprintln!("Error: {}", e);
19            return;
20        }
21    };
22
23    println!("\nSelected: {:?}\n", languages);
24
25    // 2. Spinner
26    let (spinner, handle) = Spinner::new("Analyzing your selections...");
27    let task = thread::spawn(move || {
28        thread::sleep(Duration::from_secs(2));
29        handle.finish();
30    });
31    spinner.run().unwrap();
32    task.join().unwrap();
33    println!("āœ“ Analysis complete\n");
34
35    // 3. ProgressBar
36    let (bar, handle) = ProgressBar::new(100, "Generating recommendations...");
37    let task = thread::spawn(move || {
38        for _ in 0..100 {
39            thread::sleep(Duration::from_millis(30));
40            handle.inc(1);
41        }
42        handle.finish();
43    });
44    bar.run().unwrap();
45    task.join().unwrap();
46    println!("āœ“ Recommendations ready\n");
47
48    // 4. Confirm
49    let save = match Confirm::new("Save your profile?").default(true).run() {
50        Ok(s) => s,
51        Err(e) => {
52            eprintln!("Error: {}", e);
53            return;
54        }
55    };
56
57    if save {
58        println!("\nāœ“ Profile saved!");
59    } else {
60        println!("\nāœ— Profile not saved");
61    }
62}