diff --git a/Cargo.toml b/Cargo.toml index c774edac..34c44d23 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,26 +1,5 @@ -[package] -name = "promkit" -version = "0.3.3" -authors = ["ynqa "] -edition = "2021" -description = "A toolkit for building your own interactive command-line tools" -repository = "https://github.com/ynqa/promkit" -license = "MIT" -readme = "README.md" - -[lib] -name = "promkit" -path = "src/lib.rs" - -[dependencies] -anyhow = "1.0.81" -crossterm = { version = "0.27.0", features = ["use-dev-tty"] } -indexmap = "2.2.3" -radix_trie = "0.2.1" -serde = { version = "1.0.197" } -serde_json = { version = "1.0.114", features = ["preserve_order"] } -thiserror = "1.0.50" -unicode-width = "0.1.8" - -[dev-dependencies] -strip-ansi-escapes = "0.2.0" +[workspace] +resolver = "2" +members = [ + "promkit", +] diff --git a/README.md b/README.md index b7ce3979..3712ef1b 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ Put the package in your `Cargo.toml`. ```toml [dependencies] -promkit = "0.3.3" +promkit = "0.3.4" ``` ## Features diff --git a/promkit/Cargo.toml b/promkit/Cargo.toml new file mode 100644 index 00000000..46b77b34 --- /dev/null +++ b/promkit/Cargo.toml @@ -0,0 +1,26 @@ +[package] +name = "promkit" +version = "0.3.4" +authors = ["ynqa "] +edition = "2021" +description = "A toolkit for building your own interactive command-line tools" +repository = "https://github.com/ynqa/promkit" +license = "MIT" +readme = "README.md" + +[lib] +name = "promkit" +path = "src/lib.rs" + +[dependencies] +anyhow = "1.0.81" +crossterm = { version = "0.27.0", features = ["use-dev-tty"] } +indexmap = "2.2.3" +radix_trie = "0.2.1" +serde = { version = "1.0.197" } +serde_json = { version = "1.0.114", features = ["preserve_order"] } +thiserror = "1.0.50" +unicode-width = "0.1.8" + +[dev-dependencies] +strip-ansi-escapes = "0.2.0" diff --git a/src/core.rs b/promkit/src/core.rs similarity index 100% rename from src/core.rs rename to promkit/src/core.rs diff --git a/src/core/checkbox.rs b/promkit/src/core/checkbox.rs similarity index 100% rename from src/core/checkbox.rs rename to promkit/src/core/checkbox.rs diff --git a/src/core/checkbox/render.rs b/promkit/src/core/checkbox/render.rs similarity index 100% rename from src/core/checkbox/render.rs rename to promkit/src/core/checkbox/render.rs diff --git a/src/core/cursor.rs b/promkit/src/core/cursor.rs similarity index 100% rename from src/core/cursor.rs rename to promkit/src/core/cursor.rs diff --git a/src/core/cursor/composite.rs b/promkit/src/core/cursor/composite.rs similarity index 100% rename from src/core/cursor/composite.rs rename to promkit/src/core/cursor/composite.rs diff --git a/src/core/cursor/len.rs b/promkit/src/core/cursor/len.rs similarity index 100% rename from src/core/cursor/len.rs rename to promkit/src/core/cursor/len.rs diff --git a/src/core/json.rs b/promkit/src/core/json.rs similarity index 100% rename from src/core/json.rs rename to promkit/src/core/json.rs diff --git a/src/core/json/node.rs b/promkit/src/core/json/node.rs similarity index 100% rename from src/core/json/node.rs rename to promkit/src/core/json/node.rs diff --git a/src/core/json/render.rs b/promkit/src/core/json/render.rs similarity index 100% rename from src/core/json/render.rs rename to promkit/src/core/json/render.rs diff --git a/src/core/listbox.rs b/promkit/src/core/listbox.rs similarity index 100% rename from src/core/listbox.rs rename to promkit/src/core/listbox.rs diff --git a/src/core/listbox/render.rs b/promkit/src/core/listbox/render.rs similarity index 100% rename from src/core/listbox/render.rs rename to promkit/src/core/listbox/render.rs diff --git a/src/core/text.rs b/promkit/src/core/text.rs similarity index 100% rename from src/core/text.rs rename to promkit/src/core/text.rs diff --git a/src/core/text_editor.rs b/promkit/src/core/text_editor.rs similarity index 100% rename from src/core/text_editor.rs rename to promkit/src/core/text_editor.rs diff --git a/src/core/text_editor/history.rs b/promkit/src/core/text_editor/history.rs similarity index 100% rename from src/core/text_editor/history.rs rename to promkit/src/core/text_editor/history.rs diff --git a/src/core/text_editor/render.rs b/promkit/src/core/text_editor/render.rs similarity index 100% rename from src/core/text_editor/render.rs rename to promkit/src/core/text_editor/render.rs diff --git a/src/core/tree.rs b/promkit/src/core/tree.rs similarity index 100% rename from src/core/tree.rs rename to promkit/src/core/tree.rs diff --git a/src/core/tree/node.rs b/promkit/src/core/tree/node.rs similarity index 100% rename from src/core/tree/node.rs rename to promkit/src/core/tree/node.rs diff --git a/src/core/tree/render.rs b/promkit/src/core/tree/render.rs similarity index 100% rename from src/core/tree/render.rs rename to promkit/src/core/tree/render.rs diff --git a/src/engine.rs b/promkit/src/engine.rs similarity index 96% rename from src/engine.rs rename to promkit/src/engine.rs index 0689cae6..03921a55 100644 --- a/src/engine.rs +++ b/promkit/src/engine.rs @@ -61,6 +61,10 @@ impl Engine { queue!(self.out, Clear(ClearType::FromCursorDown)).map_err(Error::from) } + pub fn clear_current_line(&mut self) -> Result { + queue!(self.out, Clear(ClearType::CurrentLine)).map_err(Error::from) + } + /// Writes a string to the terminal. /// /// # Arguments diff --git a/src/error.rs b/promkit/src/error.rs similarity index 100% rename from src/error.rs rename to promkit/src/error.rs diff --git a/src/grapheme.rs b/promkit/src/grapheme.rs similarity index 100% rename from src/grapheme.rs rename to promkit/src/grapheme.rs diff --git a/src/grapheme/styled.rs b/promkit/src/grapheme/styled.rs similarity index 98% rename from src/grapheme/styled.rs rename to promkit/src/grapheme/styled.rs index ed417eac..2b85616f 100644 --- a/src/grapheme/styled.rs +++ b/promkit/src/grapheme/styled.rs @@ -93,6 +93,12 @@ impl fmt::Debug for StyledGraphemes { } } +impl ToString for StyledGraphemes { + fn to_string(&self) -> String { + self.iter().map(|g| g.ch).collect() + } +} + impl StyledGraphemes { pub fn from_str>(string: S, style: ContentStyle) -> Self { string diff --git a/src/keymap.rs b/promkit/src/keymap.rs similarity index 100% rename from src/keymap.rs rename to promkit/src/keymap.rs diff --git a/src/lib.rs b/promkit/src/lib.rs similarity index 93% rename from src/lib.rs rename to promkit/src/lib.rs index 34bff98d..216befd4 100644 --- a/src/lib.rs +++ b/promkit/src/lib.rs @@ -11,7 +11,7 @@ //! //! ```toml //! [dependencies] -//! promkit = "0.3.3" +//! promkit = "0.3.4" //! ``` //! //! ## Features @@ -19,13 +19,13 @@ //! - Support cross-platform both UNIX and Windows owing to [crossterm](https://github.com/crossterm-rs/crossterm) //! - Various building methods //! - Preset; Support for quickly setting up a UI by providing simple parameters. -//! - [Readline](https://github.com/ynqa/promkit/tree/v0.3.3#readline) -//! - [Confirm](https://github.com/ynqa/promkit/tree/v0.3.3#confirm) -//! - [Password](https://github.com/ynqa/promkit/tree/v0.3.3#password) -//! - [Select](https://github.com/ynqa/promkit/tree/v0.3.3#select) -//! - [QuerySelect](https://github.com/ynqa/promkit/tree/v0.3.3#queryselect) -//! - [Checkbox](https://github.com/ynqa/promkit/tree/v0.3.3#checkbox) -//! - [Tree](https://github.com/ynqa/promkit/tree/v0.3.3#tree) +//! - [Readline](https://github.com/ynqa/promkit/tree/v0.3.4#readline) +//! - [Confirm](https://github.com/ynqa/promkit/tree/v0.3.4#confirm) +//! - [Password](https://github.com/ynqa/promkit/tree/v0.3.4#password) +//! - [Select](https://github.com/ynqa/promkit/tree/v0.3.4#select) +//! - [QuerySelect](https://github.com/ynqa/promkit/tree/v0.3.4#queryselect) +//! - [Checkbox](https://github.com/ynqa/promkit/tree/v0.3.4#checkbox) +//! - [Tree](https://github.com/ynqa/promkit/tree/v0.3.4#tree) //! - Combining various UI components. //! - They are provided with the same interface, allowing users to choose and //! assemble them according to their preferences. @@ -39,7 +39,7 @@ //! //! ## Examples/Demos //! -//! See [here](https://github.com/ynqa/promkit/tree/v0.3.2#examplesdemos) +//! See [here](https://github.com/ynqa/promkit/tree/v0.3.4#examplesdemos) //! //! ## Why *promkit*? //! @@ -97,10 +97,10 @@ pub use serde_json; mod core; pub use core::*; -mod engine; +pub mod engine; mod error; pub use error::{Error, Result}; -mod grapheme; +pub mod grapheme; pub mod keymap; mod macros; pub mod pane; @@ -181,7 +181,7 @@ pub trait AsAny { /// # Returns /// /// Returns a `Result` with a `PromptSignal`, indicating the next action for the prompt. -type DynEvaluator = dyn Fn(&Event, &mut Box) -> Result; +pub type DynEvaluator = dyn Fn(&Event, &mut Box) -> Result; /// Type alias for a result producer function. /// @@ -196,7 +196,7 @@ type DynEvaluator = dyn Fn(&Event, &mut Box) -> Result = fn(&dyn Renderer) -> Result; +pub type ResultProducer = fn(&dyn Renderer) -> Result; /// Represents a customizable prompt that can handle user input and produce a result. /// diff --git a/src/macros.rs b/promkit/src/macros.rs similarity index 100% rename from src/macros.rs rename to promkit/src/macros.rs diff --git a/src/pane.rs b/promkit/src/pane.rs similarity index 99% rename from src/pane.rs rename to promkit/src/pane.rs index f09923b8..a0622014 100644 --- a/src/pane.rs +++ b/promkit/src/pane.rs @@ -1,5 +1,6 @@ use crate::grapheme::StyledGraphemes; +#[derive(Clone)] pub struct Pane { /// The layout of graphemes within the pane. /// This vector stores the styled graphemes that make up the content of the pane. diff --git a/src/preset.rs b/promkit/src/preset.rs similarity index 100% rename from src/preset.rs rename to promkit/src/preset.rs diff --git a/src/preset/checkbox.rs b/promkit/src/preset/checkbox.rs similarity index 100% rename from src/preset/checkbox.rs rename to promkit/src/preset/checkbox.rs diff --git a/src/preset/checkbox/keymap.rs b/promkit/src/preset/checkbox/keymap.rs similarity index 100% rename from src/preset/checkbox/keymap.rs rename to promkit/src/preset/checkbox/keymap.rs diff --git a/src/preset/checkbox/render.rs b/promkit/src/preset/checkbox/render.rs similarity index 100% rename from src/preset/checkbox/render.rs rename to promkit/src/preset/checkbox/render.rs diff --git a/src/preset/json.rs b/promkit/src/preset/json.rs similarity index 100% rename from src/preset/json.rs rename to promkit/src/preset/json.rs diff --git a/src/preset/json/keymap.rs b/promkit/src/preset/json/keymap.rs similarity index 100% rename from src/preset/json/keymap.rs rename to promkit/src/preset/json/keymap.rs diff --git a/src/preset/json/render.rs b/promkit/src/preset/json/render.rs similarity index 100% rename from src/preset/json/render.rs rename to promkit/src/preset/json/render.rs diff --git a/src/preset/listbox.rs b/promkit/src/preset/listbox.rs similarity index 100% rename from src/preset/listbox.rs rename to promkit/src/preset/listbox.rs diff --git a/src/preset/listbox/keymap.rs b/promkit/src/preset/listbox/keymap.rs similarity index 100% rename from src/preset/listbox/keymap.rs rename to promkit/src/preset/listbox/keymap.rs diff --git a/src/preset/listbox/render.rs b/promkit/src/preset/listbox/render.rs similarity index 100% rename from src/preset/listbox/render.rs rename to promkit/src/preset/listbox/render.rs diff --git a/src/preset/query_selector.rs b/promkit/src/preset/query_selector.rs similarity index 100% rename from src/preset/query_selector.rs rename to promkit/src/preset/query_selector.rs diff --git a/src/preset/query_selector/keymap.rs b/promkit/src/preset/query_selector/keymap.rs similarity index 100% rename from src/preset/query_selector/keymap.rs rename to promkit/src/preset/query_selector/keymap.rs diff --git a/src/preset/query_selector/render.rs b/promkit/src/preset/query_selector/render.rs similarity index 100% rename from src/preset/query_selector/render.rs rename to promkit/src/preset/query_selector/render.rs diff --git a/src/preset/readline.rs b/promkit/src/preset/readline.rs similarity index 100% rename from src/preset/readline.rs rename to promkit/src/preset/readline.rs diff --git a/src/preset/readline/confirm.rs b/promkit/src/preset/readline/confirm.rs similarity index 100% rename from src/preset/readline/confirm.rs rename to promkit/src/preset/readline/confirm.rs diff --git a/src/preset/readline/keymap.rs b/promkit/src/preset/readline/keymap.rs similarity index 100% rename from src/preset/readline/keymap.rs rename to promkit/src/preset/readline/keymap.rs diff --git a/src/preset/readline/password.rs b/promkit/src/preset/readline/password.rs similarity index 100% rename from src/preset/readline/password.rs rename to promkit/src/preset/readline/password.rs diff --git a/src/preset/readline/render.rs b/promkit/src/preset/readline/render.rs similarity index 100% rename from src/preset/readline/render.rs rename to promkit/src/preset/readline/render.rs diff --git a/src/preset/tree.rs b/promkit/src/preset/tree.rs similarity index 100% rename from src/preset/tree.rs rename to promkit/src/preset/tree.rs diff --git a/src/preset/tree/keymap.rs b/promkit/src/preset/tree/keymap.rs similarity index 100% rename from src/preset/tree/keymap.rs rename to promkit/src/preset/tree/keymap.rs diff --git a/src/preset/tree/render.rs b/promkit/src/preset/tree/render.rs similarity index 100% rename from src/preset/tree/render.rs rename to promkit/src/preset/tree/render.rs diff --git a/src/snapshot.rs b/promkit/src/snapshot.rs similarity index 100% rename from src/snapshot.rs rename to promkit/src/snapshot.rs diff --git a/src/style.rs b/promkit/src/style.rs similarity index 100% rename from src/style.rs rename to promkit/src/style.rs diff --git a/src/suggest.rs b/promkit/src/suggest.rs similarity index 100% rename from src/suggest.rs rename to promkit/src/suggest.rs diff --git a/src/terminal.rs b/promkit/src/terminal.rs similarity index 100% rename from src/terminal.rs rename to promkit/src/terminal.rs diff --git a/src/validate.rs b/promkit/src/validate.rs similarity index 100% rename from src/validate.rs rename to promkit/src/validate.rs