1use std::{thread, time::Duration};
2
3use xacli_components::{Confirm, MultiSelect, ProgressBar, Spinner};
4
5fn main() {
6 println!("=== P1 Components Demo ===\n");
7
8 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 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 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 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}