dioxus/packages/dioxus-tui/README.md

96 lines
3.4 KiB
Markdown
Raw Normal View History

2022-02-04 23:01:53 +00:00
<div align="center">
<h1>Rink</h1>
<p>
2022-02-04 23:02:34 +00:00
<strong>Beautiful terminal user interfaces in Rust with <a href="https://dioxuslabs.com/">Dioxus </a>.</strong>
2022-02-04 23:01:53 +00:00
</p>
</div>
2021-07-28 14:52:38 +00:00
2022-02-04 23:01:53 +00:00
<div align="center">
<!-- Crates version -->
<a href="https://crates.io/crates/dioxus">
<img src="https://img.shields.io/crates/v/dioxus.svg?style=flat-square"
alt="Crates.io version" />
</a>
<!-- Downloads -->
<a href="https://crates.io/crates/dioxus">
<img src="https://img.shields.io/crates/d/dioxus.svg?style=flat-square"
alt="Download" />
</a>
<!-- docs -->
<a href="https://docs.rs/dioxus">
<img src="https://img.shields.io/badge/docs-latest-blue.svg?style=flat-square"
alt="docs.rs docs" />
</a>
<!-- CI -->
<a href="https://github.com/jkelleyrtp/dioxus/actions">
<img src="https://github.com/dioxuslabs/dioxus/actions/workflows/main.yml/badge.svg"
alt="CI status" />
</a>
2021-07-28 14:52:38 +00:00
2022-02-04 23:01:53 +00:00
<!--Awesome -->
<a href="https://github.com/dioxuslabs/awesome-dioxus">
<img src="https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg" alt="Awesome Page" />
</a>
<!-- Discord -->
<a href="https://discord.gg/XgGxMSkvUM">
<img src="https://img.shields.io/discord/899851952891002890.svg?logo=discord&style=flat-square" alt="Discord Link" />
</a>
</div>
<br/>
2022-02-04 23:05:03 +00:00
Leverage React-like patterns, CSS, HTML, and Rust to build beautiful, portable, terminal user interfaces with Dioxus.
2021-07-28 14:52:38 +00:00
2022-01-13 20:15:02 +00:00
```rust
2022-02-04 23:05:03 +00:00
fn app(cx: Scope) -> Element {
2021-07-28 14:52:38 +00:00
cx.render(rsx!{
2022-02-04 22:57:00 +00:00
div {
width: "100%",
2022-01-01 06:08:31 +00:00
height: "10px",
background_color: "red",
justify_content: "center",
align_items: "center",
"Hello world!"
2021-07-28 14:52:38 +00:00
}
})
}
```
2022-01-01 06:08:31 +00:00
![demo app](examples/example.png)
2021-07-28 14:52:38 +00:00
2022-02-04 22:57:00 +00:00
## Background
You can use Html-like semantics with inline styles, tree hierarchy, components, and more in your [`text-based user interface (TUI)`](https://en.wikipedia.org/wiki/Text-based_user_interface) application.
2022-02-04 22:57:00 +00:00
Rink is essentially a port of [Ink](https://github.com/vadimdemedes/ink) but for [`Rust`](https://www.rust-lang.org/) and [`Dioxus`](https://dioxuslabs.com/). Rink doesn't depend on Node.js or any other JavaScript runtime, so your binaries are portable and beautiful.
2022-02-04 22:57:00 +00:00
## Limitations
- **Subset of Html**
Terminals can only render a subset of HTML. We support as much as we can.
- **Particular frontend design**
Terminals and browsers are and look different. Therefore, the same design might not be the best to cover both renderers.
2021-07-28 14:52:38 +00:00
2022-01-01 06:14:08 +00:00
## Status
2022-01-13 20:15:02 +00:00
**WARNING: Rink is currently under construction!**
2022-01-01 06:14:08 +00:00
Rendering a VirtualDom works fine, but the ecosystem of hooks is not yet ready. Additionally, some bugs in the flexbox implementation might be quirky at times.
2021-07-28 14:52:38 +00:00
## Features
Rink features:
- [x] Flexbox-based layout system
2022-01-01 06:14:08 +00:00
- [ ] CSS selectors
2022-01-13 20:15:02 +00:00
- [x] inline CSS support
2022-05-03 23:43:28 +00:00
- [x] Built-in focusing system
* [x] Widgets<sup>1</sup>
* [ ] Support for events, hooks, and callbacks<sup>2</sup>
* [ ] Html tags<sup>3</sup>
2022-01-01 06:14:08 +00:00
<sup>1</sup> Currently only a subset of the input element is implemented as a component (not an element). The `Input` component supports sliders, text, numbers, passwords, buttons, and checkboxes.
<sup>2</sup> Basic keyboard, mouse, and focus events are implemented.
<sup>3</sup> Currently, most HTML tags don't translate into any meaning inside of Dioxus TUI. So an `input` *element* won't mean anything nor does it have any additional functionality.