#tui #ratatui #terminal #cli #console #text-input

tui-prompts

A library for building interactive prompts for ratatui

26 releases

new 0.3.19 Jul 25, 2024
0.3.13 Jun 25, 2024
0.3.8 Mar 12, 2024
0.3.2 Dec 15, 2023
0.2.3 Jul 25, 2023

#205 in Command-line interface

Download history 578/week @ 2024-04-04 547/week @ 2024-04-11 376/week @ 2024-04-18 395/week @ 2024-04-25 160/week @ 2024-05-02 411/week @ 2024-05-09 179/week @ 2024-05-16 165/week @ 2024-05-23 77/week @ 2024-05-30 54/week @ 2024-06-06 233/week @ 2024-06-13 230/week @ 2024-06-20 279/week @ 2024-06-27 340/week @ 2024-07-04 275/week @ 2024-07-11 335/week @ 2024-07-18

1,273 downloads per month
Used in 3 crates

MIT/Apache

36KB
768 lines

logo

tui-prompts

Crates.io License Docs.rs Dependency Status Codecov Discord

tui-prompts is a Rust crate that provides prompt widgets for the Ratatui crate. It allows for easy creation of interactive command-line interfaces with various types of prompts. Inspired by https://www.npmjs.com/package/prompts and various other prompt libraries.

Examples

Text Prompt

Code
struct App<'a> {
    username_state: TextState<'a>,
    password_state: TextState<'a>,
    invisible_state: TextState<'a>,
}

impl<'a> App<'a> {
    fn draw_ui<B: Backend>(&mut self, frame: &mut Frame<B>) {
        let (username_area, password_area, invisible_area) = split_layout(frame.size())

        TextPrompt::from("Username")
            .draw(frame, username_area, &mut self.username_state);

        TextPrompt::from("Password")
            .with_render_style(TextRenderStyle::Password)
            .draw(frame, password_area, &mut self.password_state);

        TextPrompt::from("Invisible")
            .with_render_style(TextRenderStyle::Invisible)
            .draw(frame, invisible_area, &mut self.invisible_state);
    }
}

Text Prompt

See the text example for more details.

Soft Wrapping

Text is automatically character wrapped to fit in the render area.

Multi-line

See the multi line example for more details.

Features

  • Text prompt
  • Password prompt
  • Invisible prompt
  • Readline / emacs style Key Bindings
  • Crossterm backend
  • Soft wrapping single lines
  • Multi-line input
  • Scrolling
  • More prompt types:
    • Number
    • Confirm
    • List
    • Toggle
    • Select
    • Multi-select
    • Autocomplete
    • Autocomplete multi-select
    • Date
  • Bracketed paste
  • Validation
  • Default initial value
  • Custom style
  • Themes
  • Custom formatting
  • Backend agnostic keyboard event handling (Termion and Termwiz)
  • Customizable key bindings
  • Handle more advanced multi-key bindings e.g. ^[b and ^[f for start / end of line
  • Prompt chaining

Installation

cargo add ratatui tui-prompts crossterm

Or add the following to your Cargo.toml file:

Key Bindings

Key Action
Home, Ctrl+A Move cursor to beginning of line
End, Ctrl+E Move cursor to end of line
Left, Ctrl+B Move cursor one character left
Right, Ctrl+F Move cursor one character right
Backspace (Delete on Mac), Ctrl+H Delete character before cursor
Delete (Fn+Delete on Mac), Ctrl+D Delete character at cursor
Ctrl+K Delete all characters from the cursor to the end of line
Ctrl+U Delete the entire line
Enter Complete the prompt
Escape, Ctrl+C Abort the prompt

License

Copyright (c) Josh McKinney

This project is licensed under either of:

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

See CONTRIBUTING.md.

Dependencies

~8–15MB
~175K SLoC