1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
//! this is a rust port of <https://www.npmjs.com/package/@clack/prompts>
//!
//! ## Setup
//!
//! you can setup the start and end of a prompt session with [`intro`] and [`outro`], respectively
//!
//! ```
//! use may_clack::{intro, outro};
//!
//! intro("intro");
//! // do stuff
//! outro("outro");
//! ```
//!
//! ## Cancel
//!
//! when the user cancels a question, you can use the [`cancel`] utility to provide a cancellation message.
//!
//! when cancelled will return a [`error::ClackError::Cancelled`].
//!
//! all input types that can return a `Cancelled` Err will also have the option to add a `.cancel` callback
//!
//! ```no_run
//! use may_clack::{cancel, input, error::ClackError};
//!
//! let text = input("todo").interact();
//! if let Err(ClackError::Cancelled) = text {
//! cancel("operation cancelled")
//! }
//! ```
//!
//! ## General
//!
//! there are 6 components: [`input`](#input), [`confirm`](#confirm),
//! [`select`](#select), [`multi_select`](#multi_select), [`multi_input`](#multi_input)
//!
//! each of the input types returns a struct, that allows you to setup the prompt.
//! since every prompt needs a message the initial
//!
//! to actually prompt the user after setting up you have to call `.interact()`
//!
//! ```no_run
//! use may_clack::confirm;
//!
//! let answer = confirm("Yes or No?").interact();
//! ```
//!
//! # Components
//!
//! ## Input
//!
//! The [`input::Input`] component accepts a single line of text.
//!
//! ```no_run
//! use may_clack::input;
//!
//! let answer = input("what is the meaning of life?").initial_value("42").interact();
//! println!("{:?}", answer);
//! ```
//!
//! ## Confirm
//!
//! The [`confirm::Confirm`] component accepts a yes or no answer.
//!
//! ```no_run
//! use may_clack::confirm;
//!
//! let answer = confirm("do you want to continue?").interact();
//! println!("answer {:?}", answer);
//! ```
//!
//! ## `Select`
//!
//! The [`select::Select`] component allows the user to choose one value from a list of options.
//!
//! ```no_run
//! use may_clack::select;
//!
//! #[derive(Debug, Clone)]
//! enum Fruit {
//! Mango,
//! Peach,
//! PassionFruit,
//! }
//!
//! let fruit = select("pick a fruit")
//! .option_hint(Fruit::Mango, "Mango", "The best one")
//! .option(Fruit::Peach, "Peach")
//! .option(Fruit::PassionFruit, "Passion fruit")
//! .interact();
//! println!("fruit {:?}", fruit);
//! ```
//!
//! ## `MultiSelect`
//!
//! The [`multi_select::MultiSelect`] component allows the user to choose multiple values from a list of options.
//!
//! ```no_run
//! use may_clack::multi_select;
//!
//! let toppings = multi_select("Choose your toppings")
//! .option("fruits", "Dried fruits")
//! .option("chocolate", "Chocolate Chips")
//! .option_hint("idk", "idk", "idk")
//! .interact();
//! println!("toppings {:?}", toppings);
//! ```
//!
//! ## `MultiInput`
//!
//! The [`multi_input::MultiInput`] component accepts multiple lines of text.
//!
//! ```no_run
//! use may_clack::multi_input;
//!
//! let lines = multi_input("idk").interact();
//! println!("lines {:?}", lines);
//! ```
//!
pub mod error;
mod prompt;
pub mod style;
pub use prompt::*;
pub use prompt::confirm::confirm;
pub use prompt::input::input;
pub use prompt::multi_input::multi_input;
pub use prompt::multi_select::multi_select;
pub use prompt::select::select;