Interactive Components

Terminal UI components for interactive CLI applications

Interactive Components

Enable with features = ["components"]:

[dependencies]
xacli = { version = "0.1", features = ["components"] }
use xacli::components::*;

Input

let name = Input::new("Enter your name:")
    .default("Alice")
    .run()?;

Confirm

let confirmed = Confirm::new("Are you sure?")
    .default(false)
    .run()?;

Select

let color = Select::new("Choose a color:")
    .option("Red", "red")
    .option("Green", "green")
    .option("Blue", "blue")
    .run()?;

MultiSelect

let langs = MultiSelect::new("Select languages:")
    .option("Rust", "rust")
    .option("Python", "python")
    .option("Go", "go")
    .run()?;

ProgressBar

let (bar, handle) = ProgressBar::new(100, "Processing...");

std::thread::spawn(move || {
    for _ in 0..100 {
        std::thread::sleep(std::time::Duration::from_millis(50));
        handle.inc(1);
    }
    handle.finish();
});

bar.run()?;

Spinner

let spinner = Spinner::new("Loading...")
    .frames(spinner::frames::dots())
    .run()?;

// Do work...
spinner.stop();

Keyboard Shortcuts

ComponentKeys
InputEnter submit, Esc cancel
ConfirmY/N select, Enter confirm
Select↑/↓ navigate, Enter select
MultiSelectSpace toggle, Enter confirm