80 lines
2.2 KiB
Markdown
80 lines
2.2 KiB
Markdown
# OSUI - A Terminal User Interface (TUI) Library
|
||
|
||
OSUI is a customizable terminal user interface (TUI) library written in Rust. It provides a set of components to build interactive command-line interfaces with ease.
|
||
|
||
## Features
|
||
|
||
- Define and manage UI components.
|
||
- Handle keyboard input seamlessly.
|
||
- Create complex layouts using nested elements.
|
||
- Customizable element sizes and styles.
|
||
|
||
## Getting Started
|
||
|
||
To use OSUI in your project, include it in your `Cargo.toml`:
|
||
|
||
```toml
|
||
[dependencies]
|
||
osui = "0.2" # Replace with the latest version
|
||
```
|
||
|
||
## Example Usage
|
||
|
||
Here’s a simple example of how to create a basic UI with OSUI:
|
||
|
||
```rust
|
||
use osui::{rsx, app::run, ui::*};
|
||
|
||
fn main() {
|
||
run(&mut rsx! {
|
||
text { "Hello, World!" }
|
||
});
|
||
}
|
||
```
|
||
|
||
## Modules
|
||
|
||
- **element**: Defines base elements and their behavior.
|
||
- **key**: Handles keyboard input and mapping.
|
||
- **utils**: Provides utility functions for common TUI tasks.
|
||
- **ui**: Contains user interface components and layout management.
|
||
|
||
## Elements
|
||
|
||
### ElementSize
|
||
|
||
Defines the size of an element, either as a default size or a custom size.
|
||
|
||
### Element Trait
|
||
|
||
The core trait for all UI components, requiring the implementation of methods to retrieve data, update dimensions, render output, and handle updates based on user input.
|
||
|
||
### Commands
|
||
|
||
The library supports several commands that can be triggered during the application’s lifecycle:
|
||
|
||
- **Render**: Re-render an element with the given state.
|
||
- **Update**: Update an element's state based on user input.
|
||
- **Sleep**: Pause execution for a specified duration.
|
||
- **Exit**: Terminate the application gracefully.
|
||
|
||
## Macros
|
||
|
||
OSUI provides several macros to simplify the definition and usage of elements:
|
||
|
||
- **element!**: Define a new UI element with customizable properties and behaviors.
|
||
- **rsx!**: Create a nested structure of UI components easily.
|
||
- **command!**: Simplify command creation for updates.
|
||
|
||
## Credits
|
||
|
||
Credit to priz.js (discord) for the idea of using C
|
||
|
||
## Contributing
|
||
|
||
Contributions are welcome! If you have suggestions or improvements, feel free to submit a pull request or open an issue.
|
||
|
||
## License
|
||
|
||
This project is licensed under the Apache License 2.0. See the LICENSE file for details.
|