From 915dabe9e27b937ef24d0dae37f1dcd4e8243d6c Mon Sep 17 00:00:00 2001 From: Leo dev Date: Mon, 30 Jun 2025 12:19:17 -0500 Subject: [PATCH] v0.0.9 --- diagrams/Screen.excalidraw | 393 ++++++++++++++++++ docs/a_index.md | 43 ++ docs/b_screen.md | 27 ++ docs/c_extensions.md | 16 + static/img/diagrams/screen.png | Bin 0 -> 42421 bytes .../version-0.0.7/references/a_rsx.md | 2 +- .../version-0.0.8}/engine.md | 0 .../version-0.0.8}/index.md | 0 .../version-0.0.8/references/a_rsx.md | 96 +++++ .../version-0.0.8/references/b_handler.md | 24 ++ .../version-0.0.8/references/css.md | 66 +++ .../version-0.0.8/references/d_style.md | 20 + .../version-0.0.8/references/e_document.md | 28 ++ .../version-0.0.8/references/f_element.md | 5 + .../references/g_element_widget.md | 14 + .../references/h_element_core.md | 32 ++ .../version-0.0.8-sidebars.json | 8 + 17 files changed, 773 insertions(+), 1 deletion(-) create mode 100644 diagrams/Screen.excalidraw create mode 100644 docs/a_index.md create mode 100644 docs/b_screen.md create mode 100644 docs/c_extensions.md create mode 100644 static/img/diagrams/screen.png rename {docs => versioned_docs/version-0.0.8}/engine.md (100%) rename {docs => versioned_docs/version-0.0.8}/index.md (100%) create mode 100644 versioned_docs/version-0.0.8/references/a_rsx.md create mode 100644 versioned_docs/version-0.0.8/references/b_handler.md create mode 100644 versioned_docs/version-0.0.8/references/css.md create mode 100644 versioned_docs/version-0.0.8/references/d_style.md create mode 100644 versioned_docs/version-0.0.8/references/e_document.md create mode 100644 versioned_docs/version-0.0.8/references/f_element.md create mode 100644 versioned_docs/version-0.0.8/references/g_element_widget.md create mode 100644 versioned_docs/version-0.0.8/references/h_element_core.md create mode 100644 versioned_sidebars/version-0.0.8-sidebars.json diff --git a/diagrams/Screen.excalidraw b/diagrams/Screen.excalidraw new file mode 100644 index 0000000..55647ec --- /dev/null +++ b/diagrams/Screen.excalidraw @@ -0,0 +1,393 @@ +{ + "type": "excalidraw", + "version": 2, + "source": "https://excalidraw.com", + "elements": [ + { + "id": "_w9oL6e5PZjiuiL0JdwcU", + "type": "rectangle", + "x": 2640, + "y": 540, + "width": 579.9999999999999, + "height": 340, + "angle": 0, + "strokeColor": "#ffffff", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b1T", + "roundness": { + "type": 3 + }, + "seed": 1525012351, + "version": 822, + "versionNonce": 1382038129, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "Yw7udnk8EtAQiRupCmWtM" + }, + { + "id": "Rk5WnZvfw777rNZNF-ATc", + "type": "arrow" + } + ], + "updated": 1751303249549, + "link": null, + "locked": false + }, + { + "id": "Yw7udnk8EtAQiRupCmWtM", + "type": "text", + "x": 2751.800003051758, + "y": 687.5, + "width": 356.3999938964844, + "height": 45, + "angle": 0, + "strokeColor": "#ffffff", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b1U", + "roundness": null, + "seed": 878481311, + "version": 719, + "versionNonce": 312435039, + "isDeleted": false, + "boundElements": [], + "updated": 1751303238315, + "link": null, + "locked": false, + "text": "Elements / Widgets", + "fontSize": 36, + "fontFamily": 8, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "_w9oL6e5PZjiuiL0JdwcU", + "originalText": "Elements / Widgets", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "B_iEV4KuaVndtiWAzZ0D6", + "type": "rectangle", + "x": 3059.506993, + "y": 200, + "width": 459.9999999999999, + "height": 220, + "angle": 0, + "strokeColor": "#ffffff", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b1Y", + "roundness": { + "type": 3 + }, + "seed": 196252767, + "version": 645, + "versionNonce": 782999839, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "ib1kyrF6uzt6a6zgosgzN" + }, + { + "id": "vKca-2Ct2_GVlvUOK5TMY", + "type": "arrow" + }, + { + "id": "Rk5WnZvfw777rNZNF-ATc", + "type": "arrow" + } + ], + "updated": 1751303249549, + "link": null, + "locked": false + }, + { + "id": "ib1kyrF6uzt6a6zgosgzN", + "type": "text", + "x": 3230.106991474121, + "y": 287.5, + "width": 118.80000305175781, + "height": 45, + "angle": 0, + "strokeColor": "#ffffff", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b1Z", + "roundness": null, + "seed": 1940822833, + "version": 565, + "versionNonce": 473023569, + "isDeleted": false, + "boundElements": [], + "updated": 1751303249549, + "link": null, + "locked": false, + "text": "Screen", + "fontSize": 36, + "fontFamily": 8, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "B_iEV4KuaVndtiWAzZ0D6", + "originalText": "Screen", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "tvzYmIFcn2mgh_7Q1PCZm", + "type": "rectangle", + "x": 3380, + "y": 540, + "width": 579.9999999999999, + "height": 340, + "angle": 0, + "strokeColor": "#ffffff", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b1c", + "roundness": { + "type": 3 + }, + "seed": 1132545585, + "version": 831, + "versionNonce": 1274553663, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "ufeniH0yJLXSDsdZgr-s_" + }, + { + "id": "vKca-2Ct2_GVlvUOK5TMY", + "type": "arrow" + } + ], + "updated": 1751303249549, + "link": null, + "locked": false + }, + { + "id": "ufeniH0yJLXSDsdZgr-s_", + "type": "text", + "x": 3571, + "y": 687.5, + "width": 198, + "height": 45, + "angle": 0, + "strokeColor": "#ffffff", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b1d", + "roundness": null, + "seed": 616257553, + "version": 747, + "versionNonce": 720835121, + "isDeleted": false, + "boundElements": [], + "updated": 1751303249549, + "link": null, + "locked": false, + "text": "Extensions", + "fontSize": 36, + "fontFamily": 8, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "tvzYmIFcn2mgh_7Q1PCZm", + "originalText": "Extensions", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "Rk5WnZvfw777rNZNF-ATc", + "type": "arrow", + "x": 3289.406993, + "y": 425.00000000000006, + "width": 359.50699299999997, + "height": 109.99999999999994, + "angle": 0, + "strokeColor": "#ffffff", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b1e", + "roundness": { + "type": 2 + }, + "seed": 2108467185, + "version": 52, + "versionNonce": 1902060895, + "isDeleted": false, + "boundElements": [], + "updated": 1751303249549, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 54.99999999999994 + ], + [ + -359.50699299999997, + 54.99999999999994 + ], + [ + -359.50699299999997, + 109.99999999999994 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "B_iEV4KuaVndtiWAzZ0D6", + "focus": 0.000434782608694893, + "gap": 5.000000000000057, + "fixedPoint": [ + 0.4997826086956525, + 1.022727272727273 + ] + }, + "endBinding": { + "elementId": "_w9oL6e5PZjiuiL0JdwcU", + "focus": -0.0003448275862063412, + "gap": 5, + "fixedPoint": [ + 0.4998275862068968, + -0.014705882352941176 + ] + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": true, + "fixedSegments": null, + "startIsSpecial": null, + "endIsSpecial": null + }, + { + "id": "vKca-2Ct2_GVlvUOK5TMY", + "type": "arrow", + "x": 3289.406993, + "y": 425.00000000000006, + "width": 380.49300700000003, + "height": 109.99999999999994, + "angle": 0, + "strokeColor": "#ffffff", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b1f", + "roundness": { + "type": 2 + }, + "seed": 1931152479, + "version": 97, + "versionNonce": 865575953, + "isDeleted": false, + "boundElements": [], + "updated": 1751303249549, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 54.99999999999994 + ], + [ + 380.49300700000003, + 54.99999999999994 + ], + [ + 380.49300700000003, + 109.99999999999994 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "B_iEV4KuaVndtiWAzZ0D6", + "focus": 0.000434782608694893, + "gap": 5, + "fixedPoint": [ + 0.4997826086956525, + 1.022727272727273 + ] + }, + "endBinding": { + "elementId": "tvzYmIFcn2mgh_7Q1PCZm", + "focus": 1.0294117647058825, + "gap": 5, + "fixedPoint": [ + 0.4998275862068968, + -0.014705882352941176 + ] + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": true, + "fixedSegments": null, + "startIsSpecial": null, + "endIsSpecial": null + } + ], + "appState": { + "gridSize": 20, + "gridStep": 5, + "gridModeEnabled": false, + "viewBackgroundColor": "#000", + "lockedMultiSelections": {} + }, + "files": {} +} \ No newline at end of file diff --git a/docs/a_index.md b/docs/a_index.md new file mode 100644 index 0000000..ec56237 --- /dev/null +++ b/docs/a_index.md @@ -0,0 +1,43 @@ +--- +title: Introduction +slug: / +--- + +OSUI is a powerful TUI library, what makes it special is it's design and features, it allows for both customization and easy of use. + +### Setup +First, you need to install osui to a already existing [rust cargo](https://doc.rust-lang.org/cargo/getting-started/index.html) project, then in your project directory run: +```bash +cargo add osui +``` + +## Hello World App +To make a hello world app in OSUI simply write this +```rust src/main.rs +use osui::Screen; + +fn main() -> std::io::Result<()> { + let mut screen = Screen::new(); + + screen.draw(format!("Hello, World!")); + + screen.run() +} +``` + +## Hello World App With Velocity +The text will move from left to right with a velocity of `100` +```rust src/main.rs +use osui::{Screen, extensions::velocity::{VelocityExtension, Velocity}}; + +fn main() -> std::io::Result<()> { + let mut screen = Screen::new(); + screen.extension(VelocityExtension); + + screen + .draw(format!("Hello, World!")) + .component(Velocity(100, 0)); // Velocity(x, y) + + screen.run() +} +``` diff --git a/docs/b_screen.md b/docs/b_screen.md new file mode 100644 index 0000000..ad23e8e --- /dev/null +++ b/docs/b_screen.md @@ -0,0 +1,27 @@ +--- +title: Screen +slug: /screen +--- +`Screen` is a OSUI structure that allows the program to use osui elements and it's extensions. +Diagram + +### `Screen::new()` +Creates a new `Screen` structure with empty widgets and extensions. + +### `draw(&mut self, element: E) -> &Arc` +Adds a element to the widgets array and returns the widget for extra parameters. + +### `extension(&mut self, ext: E)` +Adds a extension to the extensions array. + +### `run(&mut self) -> std::io::Result<()>` +Runs the app with the elements and extension provided. + +### `render(&self) -> std::io::Result<()>` +> :::warning +> Do not run this function if you don't know what you're doing, this function may cause a mutex deadlock. + + +### `render_extension(&self, wi: Arc) -> std::io::Result<()>` +> :::warning +> Do not run this function if you don't know what you're doing, this function may cause a mutex deadlock. \ No newline at end of file diff --git a/docs/c_extensions.md b/docs/c_extensions.md new file mode 100644 index 0000000..96fa9a9 --- /dev/null +++ b/docs/c_extensions.md @@ -0,0 +1,16 @@ +--- +title: Extensions +slug: /extensions +--- + +OSUI Extensions are a practical way to extend the possibilities with OSUI, Extensions allow for there to be a specific use or functionality that may otherwise be bloat or the opposite behavior of the use case. + +### `screen.extension(&mut self, ext: E)` +You likely noticed that we used this function in the [Hello World App With Velocity](/docs/next/#hello-world-app-with-velocity) example, this function simply allows for structures implementing [Extension](/docs/next/extensions#trait-extension) to be included in the program. + +## Trait `Extension` +### `init(&self, _widgets: &Vec>)` +Runs right after the Transform component is applied to every widget. + +### `render(&self, _widget: &Arc)` +Runs right before the `Element::render` is called. diff --git a/static/img/diagrams/screen.png b/static/img/diagrams/screen.png new file mode 100644 index 0000000000000000000000000000000000000000..5c797a9eba4778facf45425d5ffa81ada60117e7 GIT binary patch literal 42421 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 Element { rsx! { button { "click me" } - text { "This is some text" } + text { "This is some text" }**** } } ``` diff --git a/docs/engine.md b/versioned_docs/version-0.0.8/engine.md similarity index 100% rename from docs/engine.md rename to versioned_docs/version-0.0.8/engine.md diff --git a/docs/index.md b/versioned_docs/version-0.0.8/index.md similarity index 100% rename from docs/index.md rename to versioned_docs/version-0.0.8/index.md diff --git a/versioned_docs/version-0.0.8/references/a_rsx.md b/versioned_docs/version-0.0.8/references/a_rsx.md new file mode 100644 index 0000000..0145c59 --- /dev/null +++ b/versioned_docs/version-0.0.8/references/a_rsx.md @@ -0,0 +1,96 @@ +--- +title: RSX +--- + +This macro is the recommended way to describe a ui, it is a div that holds multiple elements +```rust +fn app() -> Element { + rsx! { + button { "click me" } + text { "This is some text" } + } +} +``` + +> :::info `rsx!` is really just a div, so you can just do something like +> ```rust +> rsx! { +> id: "root", class: "root", +> +> button { "click me" } +> text { "This is some text" } +> } +> ``` + +## Child values +If you want to add more children to values then just simply express it like a `rsx!` +```rust +fn app() -> Element { + let x = 69; + rsx! { + div { + text { "the number is {x}, Nice!" } + } + } +} +``` + +## Formatted text +```rust +fn app() -> Element { + let x = 69; + rsx! { + text { "the number is {x}, Nice!" } + } +} +``` +> :::info You can also do expressions after the string +```rust +text { "the number is {}, Nice!", x } +``` + +## For loops +```rust +fn app() -> Element { + rsx! { + for (i in 0..5) { // () are required + text { "{i}" } + } + } +} +``` + +## Attribute +You can change the element's struct fields by just providing some attributes before the children +```rust +fn app() -> Element { + rsx! { + text { class: "my_text" } + } +} +``` + +## Type assignment +In special elements like `data_holder` You can specify what `type` the element holds. It would act like `my_fn::()` +```rust +fn app() -> Element { + rsx! { + // assign the type u32 + data_holder as u32 { id: "count" } + } +} +``` + +## Handler functions +Instead of closures which are tricky to work with on structs, We use `Handler`, It's basically a closure wrapped with a `Arc>` +```rust +fn app() -> Element { + rsx! { + button { + on_click: fn(btn: &mut Button, event, document) { + // do something + } + } + } +} +``` \ No newline at end of file diff --git a/versioned_docs/version-0.0.8/references/b_handler.md b/versioned_docs/version-0.0.8/references/b_handler.md new file mode 100644 index 0000000..3524d63 --- /dev/null +++ b/versioned_docs/version-0.0.8/references/b_handler.md @@ -0,0 +1,24 @@ +--- +title: Handler +--- + +A `Handler` is a closure wrapper. Due to how closures work, they aren't the best to work with on structs (in this case: elements). So to fix this we use a `Handler` which is a wrapper for the closure, Then you can safely clone and use it without any problems (in which a normal closure would fail at) + +## Examples +```rust +Handler::new(|btn: &mut Button, event, document| { + // do something +}) +``` +A better way to do this is: +```rust +rsx! { + button { + // No need for Handler::new + on_click: fn(btn: &mut Button, event, document) { + // do something + } + } +} +``` +> :::info `fn() {}` is a part of our macro `rsx!`. In rust you would normally use `|| {}` \ No newline at end of file diff --git a/versioned_docs/version-0.0.8/references/css.md b/versioned_docs/version-0.0.8/references/css.md new file mode 100644 index 0000000..a12bb30 --- /dev/null +++ b/versioned_docs/version-0.0.8/references/css.md @@ -0,0 +1,66 @@ +--- +title: CSS +--- + +Along with the `Css` type, This macro provides styling for multiple elements by their class name or struct name. + +## Style by classname +```rust +fn app() -> Element { + rsx! { + styling: Some(styles()) // Set the css styling for the div. + + button { class: "my_btn", "Click me!" } + } +} + +fn styles() -> Css { + css! { + .my_btn { // style by classname + color: Red, + } + } +} +``` + +## Style by state +```rust +fn app() -> Element { + rsx! { + styling: Some(styles()) // Set the css styling for the div. + + button { class: "my_btn", "Click me!" } + } +} + +fn styles() -> Css { + css! { + .my_btn: clicked { // When the element state is clicked + color: Blue, + } + } +} +``` + +## Style by struct name +```rust +fn app() -> Element { + rsx! { + styling: Some(styles()) // Set the css styling for the div. + + button { "Click me!" } // No need for classes + } +} + +fn styles() -> Css { + css! { + Button { // style by the struct name + color: Red, + } + + Button: clicked { // When the element state is clicked + color: Blue, + } + } +} +``` \ No newline at end of file diff --git a/versioned_docs/version-0.0.8/references/d_style.md b/versioned_docs/version-0.0.8/references/d_style.md new file mode 100644 index 0000000..c0aed85 --- /dev/null +++ b/versioned_docs/version-0.0.8/references/d_style.md @@ -0,0 +1,20 @@ +--- +title: Style +--- + +Like `css!`, `style!` is a way to style a element. But unlike `css!`, `style!` is only meant to style a single element + +```rust +rsx! { + button { + style: style! { + color: Red, + clicked { // when the button state is 'clicked' + color: Blue, + } + }, + + "click me!" + } +} +``` \ No newline at end of file diff --git a/versioned_docs/version-0.0.8/references/e_document.md b/versioned_docs/version-0.0.8/references/e_document.md new file mode 100644 index 0000000..f98d72e --- /dev/null +++ b/versioned_docs/version-0.0.8/references/e_document.md @@ -0,0 +1,28 @@ +--- +title: Document +--- + +The `Document` holds the root element and it renders and passes events to the `Element`. It's important for updating the UI. + +## Example +```rust +fn(_, _, document) { + if let Some(my_text) = document.get_element_by_id::("my_text") { + my_text.children.set_text("Updated!"); + } +} +``` + +## Methods +### `exit()` +Exits the program +### `restart()` +Restarts the program +### `get_element_by_id(id: &str) -> Option<&mut Box>` +Retrieves a mutable reference to a boxed element of type T by its string identifier, returning None if no such element exists. +> :::info Please make sure that the type of the element is correctly matched to the element of that id +### `get_element_by_id_raw(id: &str) -> Option<&mut Element>` +> :::warning Not recommended to use this function, Use `get_element_by_id` instead +Retrieves a mutable reference to a boxed element by its string identifier, returning None if no such element exists +### `render()` +Renders/reloads the screen, useful when a element updates \ No newline at end of file diff --git a/versioned_docs/version-0.0.8/references/f_element.md b/versioned_docs/version-0.0.8/references/f_element.md new file mode 100644 index 0000000..7f28914 --- /dev/null +++ b/versioned_docs/version-0.0.8/references/f_element.md @@ -0,0 +1,5 @@ +--- +title: Element +--- + +`Element` is a type alias of `Box`. It makes the code look cleaner \ No newline at end of file diff --git a/versioned_docs/version-0.0.8/references/g_element_widget.md b/versioned_docs/version-0.0.8/references/g_element_widget.md new file mode 100644 index 0000000..adfa57c --- /dev/null +++ b/versioned_docs/version-0.0.8/references/g_element_widget.md @@ -0,0 +1,14 @@ +--- +title: ElementWidget +--- + +`ElementWidget` is a trait that defines the Elements and it's rendering / event updates. + +## Methods +### `render(&self, focused: bool) -> Option` +- **required** +- This function renders the element + +### `event(&mut self, event: Event, document: &Document)` +- **optional** +- This function updates the element when there is a event \ No newline at end of file diff --git a/versioned_docs/version-0.0.8/references/h_element_core.md b/versioned_docs/version-0.0.8/references/h_element_core.md new file mode 100644 index 0000000..b7e8b38 --- /dev/null +++ b/versioned_docs/version-0.0.8/references/h_element_core.md @@ -0,0 +1,32 @@ +--- +title: ElementCore +--- + +`ElementCore` is a trait that will automatically be implemented by the `osui_element::element` proc-macro. All of it's functions are used by OSUI. + +## `element` proc-macro +This macro adds the essential fields and functions for a `ElementCore` structure. +```rust +use osui_element::element; +#[element] +#[derive(Default, Debug)] +struct MyElement {} +``` + +## `elem_fn` proc-macro +This macro makes a function that returns a `Box` of which T is the default of `MyElement` +```rust +use osui_element::{element, elem_fn}; +#[element] +#[elem_fn] +#[derive(Default, Debug)] +struct MyElement {} +``` + +>:::info +>You can also define a function for the element manually: +>```rust +>pub fn my_element() -> Box { +> Box::new(MyElement::default()) +>} +>``` \ No newline at end of file diff --git a/versioned_sidebars/version-0.0.8-sidebars.json b/versioned_sidebars/version-0.0.8-sidebars.json new file mode 100644 index 0000000..39332bf --- /dev/null +++ b/versioned_sidebars/version-0.0.8-sidebars.json @@ -0,0 +1,8 @@ +{ + "docsSidebar": [ + { + "type": "autogenerated", + "dirName": "." + } + ] +}