From f34fa5d9744895b049c05160b8791355af87925a Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Mon, 13 Mar 2023 12:04:51 -0500 Subject: [PATCH] Move dioxus-specifc code into dioxus-tui crate and rename core crate to Rink --- Cargo.toml | 3 +- docs/guide/Cargo.toml | 2 +- packages/{tui => dioxus-tui}/.gitignore | 0 .../.vscode/spellright.dict | 0 packages/{tui => dioxus-tui}/Cargo.toml | 18 +--- packages/{tui => dioxus-tui}/README.md | 0 .../{tui => dioxus-tui}/benches/update.rs | 0 .../examples/all_events.rs | 0 .../{tui => dioxus-tui}/examples/border.rs | 0 .../{tui => dioxus-tui}/examples/buttons.rs | 0 .../examples/color_test.rs | 0 .../examples/colorpicker.rs | 0 .../examples/components.rs | 0 .../{tui => dioxus-tui}/examples/example.png | Bin packages/{tui => dioxus-tui}/examples/flex.rs | 0 .../{tui => dioxus-tui}/examples/hover.rs | 0 packages/{tui => dioxus-tui}/examples/list.rs | 0 .../{tui => dioxus-tui}/examples/margin.rs | 0 .../{tui => dioxus-tui}/examples/quadrants.rs | 0 .../{tui => dioxus-tui}/examples/readme.rs | 0 .../{tui => dioxus-tui}/examples/stress.rs | 0 packages/{tui => dioxus-tui}/examples/task.rs | 0 packages/{tui => dioxus-tui}/examples/text.rs | 0 .../{tui => dioxus-tui}/examples/widgets.rs | 1 - .../src/dioxus.rs => dioxus-tui/src/lib.rs} | 13 +-- packages/dioxus-tui/src/prelude/mod.rs | 2 + .../{tui => dioxus-tui}/src/widgets/button.rs | 0 .../src/widgets/checkbox.rs | 0 .../{tui => dioxus-tui}/src/widgets/input.rs | 0 .../{tui => dioxus-tui}/src/widgets/mod.rs | 0 .../{tui => dioxus-tui}/src/widgets/number.rs | 2 +- .../src/widgets/password.rs | 2 +- .../{tui => dioxus-tui}/src/widgets/slider.rs | 2 +- .../src/widgets/textbox.rs | 2 +- packages/{tui => dioxus-tui}/test.html | 0 packages/{tui => dioxus-tui}/tests/events.rs | 0 packages/rink/.gitignore | 2 + packages/rink/.vscode/spellright.dict | 2 + packages/rink/Cargo.toml | 39 ++++++++ packages/rink/README.md | 90 ++++++++++++++++++ packages/{tui => rink}/examples/driven.rs | 0 packages/rink/examples/example.png | Bin 0 -> 107349 bytes packages/{tui => rink}/src/config.rs | 9 +- packages/{tui => rink}/src/focus.rs | 9 +- packages/{tui => rink}/src/hooks.rs | 0 packages/{tui => rink}/src/layout.rs | 0 packages/{tui => rink}/src/lib.rs | 12 +-- packages/{tui => rink}/src/prelude/mod.rs | 0 packages/{tui => rink}/src/prevent_default.rs | 9 +- packages/{tui => rink}/src/query.rs | 4 + packages/{tui => rink}/src/render.rs | 0 packages/{tui => rink}/src/style.rs | 0 .../{tui => rink}/src/style_attributes.rs | 0 packages/{tui => rink}/src/widget.rs | 0 packages/rink/test.html | 73 ++++++++++++++ 55 files changed, 241 insertions(+), 55 deletions(-) rename packages/{tui => dioxus-tui}/.gitignore (100%) rename packages/{tui => dioxus-tui}/.vscode/spellright.dict (100%) rename packages/{tui => dioxus-tui}/Cargo.toml (70%) rename packages/{tui => dioxus-tui}/README.md (100%) rename packages/{tui => dioxus-tui}/benches/update.rs (100%) rename packages/{tui => dioxus-tui}/examples/all_events.rs (100%) rename packages/{tui => dioxus-tui}/examples/border.rs (100%) rename packages/{tui => dioxus-tui}/examples/buttons.rs (100%) rename packages/{tui => dioxus-tui}/examples/color_test.rs (100%) rename packages/{tui => dioxus-tui}/examples/colorpicker.rs (100%) rename packages/{tui => dioxus-tui}/examples/components.rs (100%) rename packages/{tui => dioxus-tui}/examples/example.png (100%) rename packages/{tui => dioxus-tui}/examples/flex.rs (100%) rename packages/{tui => dioxus-tui}/examples/hover.rs (100%) rename packages/{tui => dioxus-tui}/examples/list.rs (100%) rename packages/{tui => dioxus-tui}/examples/margin.rs (100%) rename packages/{tui => dioxus-tui}/examples/quadrants.rs (100%) rename packages/{tui => dioxus-tui}/examples/readme.rs (100%) rename packages/{tui => dioxus-tui}/examples/stress.rs (100%) rename packages/{tui => dioxus-tui}/examples/task.rs (100%) rename packages/{tui => dioxus-tui}/examples/text.rs (100%) rename packages/{tui => dioxus-tui}/examples/widgets.rs (99%) rename packages/{tui/src/dioxus.rs => dioxus-tui/src/lib.rs} (94%) create mode 100644 packages/dioxus-tui/src/prelude/mod.rs rename packages/{tui => dioxus-tui}/src/widgets/button.rs (100%) rename packages/{tui => dioxus-tui}/src/widgets/checkbox.rs (100%) rename packages/{tui => dioxus-tui}/src/widgets/input.rs (100%) rename packages/{tui => dioxus-tui}/src/widgets/mod.rs (100%) rename packages/{tui => dioxus-tui}/src/widgets/number.rs (99%) rename packages/{tui => dioxus-tui}/src/widgets/password.rs (99%) rename packages/{tui => dioxus-tui}/src/widgets/slider.rs (99%) rename packages/{tui => dioxus-tui}/src/widgets/textbox.rs (99%) rename packages/{tui => dioxus-tui}/test.html (100%) rename packages/{tui => dioxus-tui}/tests/events.rs (100%) create mode 100644 packages/rink/.gitignore create mode 100644 packages/rink/.vscode/spellright.dict create mode 100644 packages/rink/Cargo.toml create mode 100644 packages/rink/README.md rename packages/{tui => rink}/examples/driven.rs (100%) create mode 100644 packages/rink/examples/example.png rename packages/{tui => rink}/src/config.rs (91%) rename packages/{tui => rink}/src/focus.rs (98%) rename packages/{tui => rink}/src/hooks.rs (100%) rename packages/{tui => rink}/src/layout.rs (100%) rename packages/{tui => rink}/src/lib.rs (98%) rename packages/{tui => rink}/src/prelude/mod.rs (100%) rename packages/{tui => rink}/src/prevent_default.rs (94%) rename packages/{tui => rink}/src/query.rs (96%) rename packages/{tui => rink}/src/render.rs (100%) rename packages/{tui => rink}/src/style.rs (100%) rename packages/{tui => rink}/src/style_attributes.rs (100%) rename packages/{tui => rink}/src/widget.rs (100%) create mode 100644 packages/rink/test.html diff --git a/Cargo.toml b/Cargo.toml index e32940e18..7b6a08a39 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,7 +15,8 @@ members = [ "packages/liveview", "packages/autofmt", "packages/rsx", - "packages/tui", + "packages/dioxus-tui", + "packages/rink", "packages/native-core", "packages/native-core-macro", "packages/rsx-rosetta", diff --git a/docs/guide/Cargo.toml b/docs/guide/Cargo.toml index 87d5b9006..c9707e0d7 100644 --- a/docs/guide/Cargo.toml +++ b/docs/guide/Cargo.toml @@ -13,7 +13,7 @@ dioxus-web = { path = "../../packages/web" } dioxus-ssr = { path = "../../packages/ssr" } dioxus-router = { path = "../../packages/router" } dioxus-liveview = { path = "../../packages/liveview", features = ["axum"] } -dioxus-tui = { path = "../../packages/tui" } +dioxus-tui = { path = "../../packages/dioxus-tui" } fermi = { path = "../../packages/fermi" } diff --git a/packages/tui/.gitignore b/packages/dioxus-tui/.gitignore similarity index 100% rename from packages/tui/.gitignore rename to packages/dioxus-tui/.gitignore diff --git a/packages/tui/.vscode/spellright.dict b/packages/dioxus-tui/.vscode/spellright.dict similarity index 100% rename from packages/tui/.vscode/spellright.dict rename to packages/dioxus-tui/.vscode/spellright.dict diff --git a/packages/tui/Cargo.toml b/packages/dioxus-tui/Cargo.toml similarity index 70% rename from packages/tui/Cargo.toml rename to packages/dioxus-tui/Cargo.toml index 05d3a6e12..43e568b0f 100644 --- a/packages/tui/Cargo.toml +++ b/packages/dioxus-tui/Cargo.toml @@ -13,25 +13,18 @@ license = "MIT/Apache-2.0" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -dioxus = { path = "../dioxus", version = "^0.3.0", optional = true } -dioxus-core = { path = "../core", version = "^0.3.0", features = ["serialize"], optional = true } +dioxus = { path = "../dioxus", version = "^0.3.0" } +dioxus-core = { path = "../core", version = "^0.3.0", features = ["serialize"] } dioxus-html = { path = "../html", version = "^0.3.0" } -dioxus-native-core = { path = "../native-core", version = "^0.2.0" } +dioxus-native-core = { path = "../native-core", version = "^0.2.0", features = ["dioxus"] } dioxus-native-core-macro = { path = "../native-core-macro", version = "^0.3.0" } dioxus-hot-reload = { path = "../hot-reload", optional = true } +rink = { path = "../rink" } -tui = "0.17.0" crossterm = "0.23.0" -anyhow = "1.0.42" tokio = { version = "1.15.0", features = ["full"] } futures = "0.3.19" taffy = "0.2.1" -smallvec = "1.6" -rustc-hash = "1.1.0" -anymap = "1.0.0-beta.2" -futures-channel = "0.3.25" -shipyard = { version = "0.6.2", features = ["proc", "std"], default-features = false } -once_cell = "1.17.1" [dev-dependencies] dioxus = { path = "../dioxus" } @@ -43,6 +36,5 @@ name = "update" harness = false [features] -default = ["hot-reload", "dioxus-bindings"] +default = ["hot-reload"] hot-reload = ["dioxus-hot-reload"] -dioxus-bindings = ["dioxus", "dioxus-core", "dioxus-native-core/dioxus"] diff --git a/packages/tui/README.md b/packages/dioxus-tui/README.md similarity index 100% rename from packages/tui/README.md rename to packages/dioxus-tui/README.md diff --git a/packages/tui/benches/update.rs b/packages/dioxus-tui/benches/update.rs similarity index 100% rename from packages/tui/benches/update.rs rename to packages/dioxus-tui/benches/update.rs diff --git a/packages/tui/examples/all_events.rs b/packages/dioxus-tui/examples/all_events.rs similarity index 100% rename from packages/tui/examples/all_events.rs rename to packages/dioxus-tui/examples/all_events.rs diff --git a/packages/tui/examples/border.rs b/packages/dioxus-tui/examples/border.rs similarity index 100% rename from packages/tui/examples/border.rs rename to packages/dioxus-tui/examples/border.rs diff --git a/packages/tui/examples/buttons.rs b/packages/dioxus-tui/examples/buttons.rs similarity index 100% rename from packages/tui/examples/buttons.rs rename to packages/dioxus-tui/examples/buttons.rs diff --git a/packages/tui/examples/color_test.rs b/packages/dioxus-tui/examples/color_test.rs similarity index 100% rename from packages/tui/examples/color_test.rs rename to packages/dioxus-tui/examples/color_test.rs diff --git a/packages/tui/examples/colorpicker.rs b/packages/dioxus-tui/examples/colorpicker.rs similarity index 100% rename from packages/tui/examples/colorpicker.rs rename to packages/dioxus-tui/examples/colorpicker.rs diff --git a/packages/tui/examples/components.rs b/packages/dioxus-tui/examples/components.rs similarity index 100% rename from packages/tui/examples/components.rs rename to packages/dioxus-tui/examples/components.rs diff --git a/packages/tui/examples/example.png b/packages/dioxus-tui/examples/example.png similarity index 100% rename from packages/tui/examples/example.png rename to packages/dioxus-tui/examples/example.png diff --git a/packages/tui/examples/flex.rs b/packages/dioxus-tui/examples/flex.rs similarity index 100% rename from packages/tui/examples/flex.rs rename to packages/dioxus-tui/examples/flex.rs diff --git a/packages/tui/examples/hover.rs b/packages/dioxus-tui/examples/hover.rs similarity index 100% rename from packages/tui/examples/hover.rs rename to packages/dioxus-tui/examples/hover.rs diff --git a/packages/tui/examples/list.rs b/packages/dioxus-tui/examples/list.rs similarity index 100% rename from packages/tui/examples/list.rs rename to packages/dioxus-tui/examples/list.rs diff --git a/packages/tui/examples/margin.rs b/packages/dioxus-tui/examples/margin.rs similarity index 100% rename from packages/tui/examples/margin.rs rename to packages/dioxus-tui/examples/margin.rs diff --git a/packages/tui/examples/quadrants.rs b/packages/dioxus-tui/examples/quadrants.rs similarity index 100% rename from packages/tui/examples/quadrants.rs rename to packages/dioxus-tui/examples/quadrants.rs diff --git a/packages/tui/examples/readme.rs b/packages/dioxus-tui/examples/readme.rs similarity index 100% rename from packages/tui/examples/readme.rs rename to packages/dioxus-tui/examples/readme.rs diff --git a/packages/tui/examples/stress.rs b/packages/dioxus-tui/examples/stress.rs similarity index 100% rename from packages/tui/examples/stress.rs rename to packages/dioxus-tui/examples/stress.rs diff --git a/packages/tui/examples/task.rs b/packages/dioxus-tui/examples/task.rs similarity index 100% rename from packages/tui/examples/task.rs rename to packages/dioxus-tui/examples/task.rs diff --git a/packages/tui/examples/text.rs b/packages/dioxus-tui/examples/text.rs similarity index 100% rename from packages/tui/examples/text.rs rename to packages/dioxus-tui/examples/text.rs diff --git a/packages/tui/examples/widgets.rs b/packages/dioxus-tui/examples/widgets.rs similarity index 99% rename from packages/tui/examples/widgets.rs rename to packages/dioxus-tui/examples/widgets.rs index 793057bc5..04690522c 100644 --- a/packages/tui/examples/widgets.rs +++ b/packages/dioxus-tui/examples/widgets.rs @@ -1,7 +1,6 @@ use dioxus::prelude::*; use dioxus_html::FormData; use dioxus_tui::prelude::*; -use dioxus_tui::Config; fn main() { dioxus_tui::launch_cfg(app, Config::new()); diff --git a/packages/tui/src/dioxus.rs b/packages/dioxus-tui/src/lib.rs similarity index 94% rename from packages/tui/src/dioxus.rs rename to packages/dioxus-tui/src/lib.rs index c07d138d2..99df66df9 100644 --- a/packages/tui/src/dioxus.rs +++ b/packages/dioxus-tui/src/lib.rs @@ -1,3 +1,6 @@ +pub mod prelude; +pub mod widgets; + use std::{ ops::Deref, rc::Rc, @@ -11,7 +14,8 @@ use dioxus_native_core::{ NodeId, RealDom, }; -use crate::{query::Query, render, Config, Renderer, TuiContext}; +pub use rink::Config; +use rink::{query::Query, render, Renderer, TuiContext}; pub fn launch(app: Component<()>) { launch_cfg(app, Config::default()) @@ -29,11 +33,8 @@ pub fn launch_cfg_with_props(app: Component, props: Props }; let dioxus_state = Rc::new(RwLock::new(dioxus_state)); let mut vdom = VirtualDom::new_with_props(app, props) - .with_root_context(TuiContext { tx: event_tx }) - .with_root_context(Query { - rdom: rdom.clone(), - stretch: taffy.clone(), - }) + .with_root_context(TuiContext::new(event_tx)) + .with_root_context(Query::new(rdom.clone(), taffy.clone())) .with_root_context(DioxusElementToNodeId { mapping: dioxus_state.clone(), }); diff --git a/packages/dioxus-tui/src/prelude/mod.rs b/packages/dioxus-tui/src/prelude/mod.rs new file mode 100644 index 000000000..cb4fdee65 --- /dev/null +++ b/packages/dioxus-tui/src/prelude/mod.rs @@ -0,0 +1,2 @@ +pub use crate::widgets::*; +pub use rink::Config; diff --git a/packages/tui/src/widgets/button.rs b/packages/dioxus-tui/src/widgets/button.rs similarity index 100% rename from packages/tui/src/widgets/button.rs rename to packages/dioxus-tui/src/widgets/button.rs diff --git a/packages/tui/src/widgets/checkbox.rs b/packages/dioxus-tui/src/widgets/checkbox.rs similarity index 100% rename from packages/tui/src/widgets/checkbox.rs rename to packages/dioxus-tui/src/widgets/checkbox.rs diff --git a/packages/tui/src/widgets/input.rs b/packages/dioxus-tui/src/widgets/input.rs similarity index 100% rename from packages/tui/src/widgets/input.rs rename to packages/dioxus-tui/src/widgets/input.rs diff --git a/packages/tui/src/widgets/mod.rs b/packages/dioxus-tui/src/widgets/mod.rs similarity index 100% rename from packages/tui/src/widgets/mod.rs rename to packages/dioxus-tui/src/widgets/mod.rs diff --git a/packages/tui/src/widgets/number.rs b/packages/dioxus-tui/src/widgets/number.rs similarity index 99% rename from packages/tui/src/widgets/number.rs rename to packages/dioxus-tui/src/widgets/number.rs index 3e9d80d2d..f82732981 100644 --- a/packages/tui/src/widgets/number.rs +++ b/packages/dioxus-tui/src/widgets/number.rs @@ -1,11 +1,11 @@ use crate::widgets::get_root_id; -use crate::Query; use crossterm::{cursor::MoveTo, execute}; use dioxus::prelude::*; use dioxus_elements::input_data::keyboard_types::Key; use dioxus_html as dioxus_elements; use dioxus_html::FormData; use dioxus_native_core::utils::cursor::{Cursor, Pos}; +use rink::Query; use std::{collections::HashMap, io::stdout}; use taffy::geometry::Point; diff --git a/packages/tui/src/widgets/password.rs b/packages/dioxus-tui/src/widgets/password.rs similarity index 99% rename from packages/tui/src/widgets/password.rs rename to packages/dioxus-tui/src/widgets/password.rs index 5e74e8b09..07491c140 100644 --- a/packages/tui/src/widgets/password.rs +++ b/packages/dioxus-tui/src/widgets/password.rs @@ -1,11 +1,11 @@ use crate::widgets::get_root_id; -use crate::Query; use crossterm::{cursor::*, execute}; use dioxus::prelude::*; use dioxus_elements::input_data::keyboard_types::Key; use dioxus_html as dioxus_elements; use dioxus_html::FormData; use dioxus_native_core::utils::cursor::{Cursor, Pos}; +use rink::Query; use std::{collections::HashMap, io::stdout}; use taffy::geometry::Point; diff --git a/packages/tui/src/widgets/slider.rs b/packages/dioxus-tui/src/widgets/slider.rs similarity index 99% rename from packages/tui/src/widgets/slider.rs rename to packages/dioxus-tui/src/widgets/slider.rs index 32de32ce2..9e8d63cb9 100644 --- a/packages/tui/src/widgets/slider.rs +++ b/packages/dioxus-tui/src/widgets/slider.rs @@ -1,11 +1,11 @@ use std::collections::HashMap; use crate::widgets::get_root_id; -use crate::Query; use dioxus::prelude::*; use dioxus_elements::input_data::keyboard_types::Key; use dioxus_html as dioxus_elements; use dioxus_html::FormData; +use rink::Query; #[derive(Props)] pub(crate) struct SliderProps<'a> { diff --git a/packages/tui/src/widgets/textbox.rs b/packages/dioxus-tui/src/widgets/textbox.rs similarity index 99% rename from packages/tui/src/widgets/textbox.rs rename to packages/dioxus-tui/src/widgets/textbox.rs index 6c378cd72..fcfaf0a90 100644 --- a/packages/tui/src/widgets/textbox.rs +++ b/packages/dioxus-tui/src/widgets/textbox.rs @@ -1,11 +1,11 @@ use crate::widgets::get_root_id; -use crate::Query; use crossterm::{cursor::*, execute}; use dioxus::prelude::*; use dioxus_elements::input_data::keyboard_types::Key; use dioxus_html as dioxus_elements; use dioxus_html::FormData; use dioxus_native_core::utils::cursor::{Cursor, Pos}; +use rink::Query; use std::{collections::HashMap, io::stdout}; use taffy::geometry::Point; diff --git a/packages/tui/test.html b/packages/dioxus-tui/test.html similarity index 100% rename from packages/tui/test.html rename to packages/dioxus-tui/test.html diff --git a/packages/tui/tests/events.rs b/packages/dioxus-tui/tests/events.rs similarity index 100% rename from packages/tui/tests/events.rs rename to packages/dioxus-tui/tests/events.rs diff --git a/packages/rink/.gitignore b/packages/rink/.gitignore new file mode 100644 index 000000000..96ef6c0b9 --- /dev/null +++ b/packages/rink/.gitignore @@ -0,0 +1,2 @@ +/target +Cargo.lock diff --git a/packages/rink/.vscode/spellright.dict b/packages/rink/.vscode/spellright.dict new file mode 100644 index 000000000..c30e473fc --- /dev/null +++ b/packages/rink/.vscode/spellright.dict @@ -0,0 +1,2 @@ +esque +Tui diff --git a/packages/rink/Cargo.toml b/packages/rink/Cargo.toml new file mode 100644 index 000000000..2f08eb720 --- /dev/null +++ b/packages/rink/Cargo.toml @@ -0,0 +1,39 @@ +[package] +name = "rink" +version = "0.2.2" +authors = ["Jonathan Kelley, @dementhos"] +edition = "2021" +description = "TUI-based renderer for Dioxus" +repository = "https://github.com/DioxusLabs/dioxus/" +homepage = "https://dioxuslabs.com" +documentation = "https://dioxuslabs.com" +keywords = ["dom", "ui", "gui", "react", "terminal"] +license = "MIT/Apache-2.0" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +dioxus-html = { path = "../html", version = "^0.3.0" } +dioxus-native-core = { path = "../native-core", version = "^0.2.0" } +dioxus-native-core-macro = { path = "../native-core-macro", version = "^0.3.0" } + +tui = "0.17.0" +crossterm = "0.23.0" +anyhow = "1.0.42" +tokio = { version = "1.15.0", features = ["full"] } +futures = "0.3.19" +taffy = "0.2.1" +smallvec = "1.6" +rustc-hash = "1.1.0" +anymap = "1.0.0-beta.2" +futures-channel = "0.3.25" +shipyard = { version = "0.6.2", features = ["proc", "std"], default-features = false } +once_cell = "1.17.1" + +[dev-dependencies] +tokio = { version = "1" } +criterion = "0.3.5" + +[features] +default = [] +parallel = ["shipyard/parallel"] \ No newline at end of file diff --git a/packages/rink/README.md b/packages/rink/README.md new file mode 100644 index 000000000..d021a728b --- /dev/null +++ b/packages/rink/README.md @@ -0,0 +1,90 @@ +
+

Rink

+

+ A beautiful terminal user interfaces library in Rust. +

+
+ +
+ + + Crates.io version + + + + Download + + + + docs.rs docs + + + + CI status + + + + Discord Link + +
+ +
+ +Leverage CSS, HTML, and Rust to build beautiful, portable, terminal user interfaces. + +```rust +fn app(cx: Scope) -> Element { + cx.render(rsx!{ + div { + width: "100%", + height: "10px", + background_color: "red", + justify_content: "center", + align_items: "center", + "Hello world!" + } + }) +} +``` + +![demo app](examples/example.png) + +## 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. + +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. + +## 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. + +## Status + +**WARNING: Rink is currently under construction!** + +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. + +## Features + +Rink features: + +- [x] Flexbox-based layout system +- [ ] CSS selectors +- [x] inline CSS support +- [x] Built-in focusing system + +* [x] Widgets1 +* [ ] Support for events, hooks, and callbacks2 +* [ ] Html tags3 + +1 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. +2 Basic keyboard, mouse, and focus events are implemented. +3 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. diff --git a/packages/tui/examples/driven.rs b/packages/rink/examples/driven.rs similarity index 100% rename from packages/tui/examples/driven.rs rename to packages/rink/examples/driven.rs diff --git a/packages/rink/examples/example.png b/packages/rink/examples/example.png new file mode 100644 index 0000000000000000000000000000000000000000..ba45e6e99c94aea47a7419536c2e9db11d5fac29 GIT binary patch literal 107349 zcmZU(1ymf((m#xQaCf)h79hal?yxv4?gR)BAjo3D-GjS(kOX&kmk=z$Ng(*L?EZP~ zz3=3zPt{b_uWGt`X3kXg#As_Oy~3izLO?)xrJ^jai-3T7h=71phk^DYiLr9q zL_olCbCQ$OR*{pV*M9GA@8oKSfS??cVTf*|H$hrpnwp#(K`1S)daRMGiNL|oim(`G z$;2EQL1-hZ-CP=n)nG2)TvE#z>xMd)Y%8``PPo z8a$al(Swdqk0((rM7M%gB(2M?7LQ?-s5)nvDvm%hAId{bD$#2;nV6J>sEzg;oaOrl zp`;t+WAOgj3)UCgAkBV+91VCmn6b z?wN??Zn)1yBK6%pEpI&ZK>&eLpH?dq8R40BSupNFEIA5BVQm;A&4noKLOvWCNT7w# zEO2Lqib|CJmC!oCk@pk%D6*09j^`mX0pOBcI5tHwT+MC2ZNoG>WebBT5 z@scp^1C=+T$95C9=fD$`$AQ;2H`Y4uDTj%p>*I#2oAH+zKBOG6DAc+s632-)BZ~+q zln4a7L=$~Vjm9Sd7^HJ!Yw2%gk&L7N9TABg{%$1v!;oDyQGW&f?a0yX7@pSv4>rqr zIwEaxp#HQp50aH*HmC3TH|^BavcpGuZX6Z;`Vo#rs9&4pJC5lj?Ne@syL2*^>b3pq zPaa-14_B^ER)H;?n%$yVWF(ET=pZC(1oQ|bR_*>2RMrqP`ga%3$69f2+dP373mdZMnN>;nFnz4LM#egtAh3ZV7=*+!w=7N?-c7p#`maeZ2U9-#(bF{;SSP&0KUwfEkF%P zWJNf_{Y%oqn1O3(fpH0v#V!zHvP7#3k(?f*@k0jV;|xj@Mkkk5w z_^8su-Z!Dtp}6#;HBq>tclArnBjAP;?c#jJ;0Zt5<@qj2v&(Xf_D7mGjGj3nk`JG0 zn7Uae58pT96AGi1GEQoA8PjKFTt*qf1qiXj%E5}_-LYV~>#VNXaxjV8iZo^c_> zQRybsfj>W6El<@<*-YuXhJ>aolN9S+vNAJMDiKErvC@7DmP&cqN?CrHP1)-*+(q

oPRG!R6c57GXb+sm49iEX_G7~ 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�&=*CxM7=N;Qn<8{39UQazNEy$W{smux7_m#G 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 Self { - RenderingMode::Rgb - } -} diff --git a/packages/tui/src/focus.rs b/packages/rink/src/focus.rs similarity index 98% rename from packages/tui/src/focus.rs rename to packages/rink/src/focus.rs index 919182e4f..b42e10b55 100644 --- a/packages/tui/src/focus.rs +++ b/packages/rink/src/focus.rs @@ -19,8 +19,9 @@ use dioxus_native_core::node_ref::NodeView; #[derive(Component)] pub struct Focused(pub bool); -#[derive(Clone, Copy, PartialEq, Eq, Debug)] +#[derive(Clone, Copy, PartialEq, Eq, Debug, Default)] pub(crate) enum FocusLevel { + #[default] Unfocusable, Focusable, Ordered(std::num::NonZeroU16), @@ -58,12 +59,6 @@ impl Ord for FocusLevel { } } -impl Default for FocusLevel { - fn default() -> Self { - FocusLevel::Unfocusable - } -} - #[derive(Clone, PartialEq, Debug, Default, Component)] pub(crate) struct Focus { pub level: FocusLevel, diff --git a/packages/tui/src/hooks.rs b/packages/rink/src/hooks.rs similarity index 100% rename from packages/tui/src/hooks.rs rename to packages/rink/src/hooks.rs diff --git a/packages/tui/src/layout.rs b/packages/rink/src/layout.rs similarity index 100% rename from packages/tui/src/layout.rs rename to packages/rink/src/layout.rs diff --git a/packages/tui/src/lib.rs b/packages/rink/src/lib.rs similarity index 98% rename from packages/tui/src/lib.rs rename to packages/rink/src/lib.rs index 6112f3bf5..9e1a4dbf1 100644 --- a/packages/tui/src/lib.rs +++ b/packages/rink/src/lib.rs @@ -27,8 +27,6 @@ use tokio::select; use tui::{backend::CrosstermBackend, layout::Rect, Terminal}; mod config; -#[cfg(feature = "dioxus-bindings")] -pub mod dioxus; mod focus; mod hooks; mod layout; @@ -39,16 +37,10 @@ mod render; mod style; mod style_attributes; mod widget; -#[cfg(feature = "dioxus-bindings")] -mod widgets; -#[cfg(feature = "dioxus-bindings")] -pub use crate::dioxus::*; pub use config::*; pub use hooks::*; pub use query::Query; -#[cfg(feature = "dioxus-bindings")] -pub use widgets::*; // the layout space has a multiplier of 10 to minimize rounding errors pub(crate) fn screen_to_layout_space(screen: u16) -> f32 { @@ -69,6 +61,10 @@ pub struct TuiContext { } impl TuiContext { + pub fn new(tx: UnboundedSender) -> Self { + Self { tx } + } + pub fn quit(&self) { self.tx.unbounded_send(InputEvent::Close).unwrap(); } diff --git a/packages/tui/src/prelude/mod.rs b/packages/rink/src/prelude/mod.rs similarity index 100% rename from packages/tui/src/prelude/mod.rs rename to packages/rink/src/prelude/mod.rs diff --git a/packages/tui/src/prevent_default.rs b/packages/rink/src/prevent_default.rs similarity index 94% rename from packages/tui/src/prevent_default.rs rename to packages/rink/src/prevent_default.rs index 8e1761c5f..cadd262f2 100644 --- a/packages/tui/src/prevent_default.rs +++ b/packages/rink/src/prevent_default.rs @@ -2,7 +2,7 @@ use dioxus_native_core::{node_ref::NodeView, Dependancy, SendAnyMap, State}; use dioxus_native_core_macro::partial_derive_state; use shipyard::Component; -#[derive(PartialEq, Debug, Clone, Copy, Component)] +#[derive(PartialEq, Debug, Clone, Copy, Component, Default)] pub(crate) enum PreventDefault { Focus, KeyPress, @@ -14,6 +14,7 @@ pub(crate) enum PreventDefault { MouseEnter, MouseLeave, MouseOut, + #[default] Unknown, MouseOver, ContextMenu, @@ -21,12 +22,6 @@ pub(crate) enum PreventDefault { MouseUp, } -impl Default for PreventDefault { - fn default() -> Self { - PreventDefault::Unknown - } -} - #[partial_derive_state] impl State for PreventDefault { type ParentDependencies = (); diff --git a/packages/tui/src/query.rs b/packages/rink/src/query.rs similarity index 96% rename from packages/tui/src/query.rs rename to packages/rink/src/query.rs index 3a11d0f2d..f28c4978f 100644 --- a/packages/tui/src/query.rs +++ b/packages/rink/src/query.rs @@ -47,6 +47,10 @@ pub struct Query { } impl Query { + pub fn new(rdom: Arc>, stretch: Arc>) -> Self { + Self { rdom, stretch } + } + pub fn get(&self, id: NodeId) -> ElementRef { let rdom = self.rdom.read(); let stretch = self.stretch.lock(); diff --git a/packages/tui/src/render.rs b/packages/rink/src/render.rs similarity index 100% rename from packages/tui/src/render.rs rename to packages/rink/src/render.rs diff --git a/packages/tui/src/style.rs b/packages/rink/src/style.rs similarity index 100% rename from packages/tui/src/style.rs rename to packages/rink/src/style.rs diff --git a/packages/tui/src/style_attributes.rs b/packages/rink/src/style_attributes.rs similarity index 100% rename from packages/tui/src/style_attributes.rs rename to packages/rink/src/style_attributes.rs diff --git a/packages/tui/src/widget.rs b/packages/rink/src/widget.rs similarity index 100% rename from packages/tui/src/widget.rs rename to packages/rink/src/widget.rs diff --git a/packages/rink/test.html b/packages/rink/test.html new file mode 100644 index 000000000..5298c723e --- /dev/null +++ b/packages/rink/test.html @@ -0,0 +1,73 @@ + + + + + Test + + + + +

+
+
+

Hello World

+

This is a test

+
+
+
+ + + + \ No newline at end of file