mirror of
https://github.com/DioxusLabs/dioxus
synced 2024-11-10 06:34:20 +00:00
wip: prepare to change our fragment pattern. Add some more docs
This commit is contained in:
parent
2b928372fb
commit
2c3a046426
10 changed files with 108 additions and 71 deletions
70
Cargo.toml
70
Cargo.toml
|
@ -1,44 +1,55 @@
|
||||||
[package]
|
[package]
|
||||||
name = "dioxus"
|
name = "dioxus"
|
||||||
version = "0.1.1"
|
version = "0.1.2"
|
||||||
authors = ["Jonathan Kelley"]
|
authors = ["Jonathan Kelley"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
description = "Core functionality for Dioxus - a concurrent renderer-agnostic Virtual DOM for interactive user experiences"
|
description = "Core functionality for Dioxus - a concurrent renderer-agnostic Virtual DOM for interactive user experiences"
|
||||||
license = "MIT/Apache-2.0"
|
license = "MIT/Apache-2.0"
|
||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
repository = "https://github.com/DioxusLabs/dioxus/"
|
||||||
|
homepage = "https://dioxuslabs.com"
|
||||||
|
documentation = "https://dioxuslabs.com"
|
||||||
|
keywords = ["dom", "ui", "gui", "react", "wasm"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
dioxus-core = { path = "./packages/core", version ="^0.1.3"}
|
dioxus-core = { path = "./packages/core", version = "^0.1.3" }
|
||||||
dioxus-router = { path = "./packages/router", optional = true }
|
|
||||||
dioxus-core-macro = { path = "./packages/core-macro", optional = true }
|
|
||||||
dioxus-html = { path = "./packages/html", optional = true }
|
dioxus-html = { path = "./packages/html", optional = true }
|
||||||
|
dioxus-core-macro = { path = "./packages/core-macro", optional = true }
|
||||||
|
dioxus-hooks = { path = "./packages/hooks", optional = true }
|
||||||
|
|
||||||
|
dioxus-ssr = { path = "./packages/ssr", optional = true }
|
||||||
dioxus-web = { path = "./packages/web", optional = true }
|
dioxus-web = { path = "./packages/web", optional = true }
|
||||||
dioxus-desktop = { path = "./packages/desktop", optional = true }
|
dioxus-desktop = { path = "./packages/desktop", optional = true }
|
||||||
dioxus-hooks = { path = "./packages/hooks", optional = true }
|
dioxus-router = { path = "./packages/router", optional = true }
|
||||||
dioxus-ssr = { path = "./packages/ssr", optional = true }
|
|
||||||
dioxus-mobile = { path = "./packages/mobile", optional = true }
|
dioxus-mobile = { path = "./packages/mobile", optional = true }
|
||||||
dioxus-liveview = { path = "./packages/liveview", optional = true }
|
dioxus-liveview = { path = "./packages/liveview", optional = true }
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
# core
|
default = ["macro", "hooks", "html"]
|
||||||
default = ["core"]
|
|
||||||
core = ["macro", "hooks", "html"]
|
|
||||||
macro = ["dioxus-core-macro"]
|
macro = ["dioxus-core-macro"]
|
||||||
hooks = ["dioxus-hooks"]
|
hooks = ["dioxus-hooks"]
|
||||||
html = ["dioxus-html"]
|
html = ["dioxus-html"]
|
||||||
router = ["dioxus-router"]
|
router = ["dioxus-router"]
|
||||||
liveview = ["dioxus-liveview"]
|
liveview = ["dioxus-liveview"]
|
||||||
|
|
||||||
# utilities
|
|
||||||
atoms = []
|
|
||||||
|
|
||||||
# targets
|
|
||||||
ssr = ["dioxus-ssr"]
|
ssr = ["dioxus-ssr"]
|
||||||
web = ["dioxus-web"]
|
web = ["dioxus-web"]
|
||||||
desktop = ["dioxus-desktop"]
|
desktop = ["dioxus-desktop"]
|
||||||
mobile = ["dioxus-mobile"]
|
mobile = ["dioxus-mobile"]
|
||||||
|
|
||||||
|
|
||||||
|
[workspace]
|
||||||
|
members = [
|
||||||
|
"packages/core",
|
||||||
|
"packages/core-macro",
|
||||||
|
"packages/html",
|
||||||
|
"packages/hooks",
|
||||||
|
"packages/web",
|
||||||
|
"packages/ssr",
|
||||||
|
"packages/desktop",
|
||||||
|
"packages/mobile",
|
||||||
|
]
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
futures-util = "0.3.17"
|
futures-util = "0.3.17"
|
||||||
log = "0.4.14"
|
log = "0.4.14"
|
||||||
|
@ -48,7 +59,6 @@ serde = { version = "1.0.131", features = ["derive"] }
|
||||||
im-rc = "15.0.0"
|
im-rc = "15.0.0"
|
||||||
fxhash = "0.2.1"
|
fxhash = "0.2.1"
|
||||||
anyhow = "1.0.51"
|
anyhow = "1.0.51"
|
||||||
# reqwest = "0.11.4"
|
|
||||||
serde_json = "1.0.73"
|
serde_json = "1.0.73"
|
||||||
simple_logger = "1.16.0"
|
simple_logger = "1.16.0"
|
||||||
|
|
||||||
|
@ -69,31 +79,3 @@ wasm-bindgen = { version = "0.2.78", features = ["enable-interning"] }
|
||||||
[dev-dependencies.getrandom]
|
[dev-dependencies.getrandom]
|
||||||
version = "0.2.3"
|
version = "0.2.3"
|
||||||
features = ["js"]
|
features = ["js"]
|
||||||
|
|
||||||
|
|
||||||
[workspace]
|
|
||||||
members = [
|
|
||||||
"packages/core",
|
|
||||||
"packages/core-macro",
|
|
||||||
"packages/html",
|
|
||||||
"packages/hooks",
|
|
||||||
"packages/web",
|
|
||||||
"packages/ssr",
|
|
||||||
"packages/desktop",
|
|
||||||
"packages/mobile",
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
[[example]]
|
|
||||||
required-features = ["desktop"]
|
|
||||||
name = "webview"
|
|
||||||
path = "./examples/webview.rs"
|
|
||||||
|
|
||||||
[[example]]
|
|
||||||
required-features = ["desktop"]
|
|
||||||
name = "tailwind"
|
|
||||||
path = "./examples/tailwind.rs"
|
|
||||||
|
|
||||||
|
|
||||||
# [patch.crates-io]
|
|
||||||
# wasm-bindgen = { path = "../Tinkering/wasm-bindgen" }
|
|
||||||
|
|
12
README.md
12
README.md
|
@ -85,6 +85,18 @@ If you know React, then you already know Dioxus.
|
||||||
<tr>
|
<tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
Available cargo features:
|
||||||
|
- default: core (macro, hooks, html)
|
||||||
|
- macro: support for `Props` and `rsx` macros
|
||||||
|
- hooks: foundational hooks like `use_state`, `use_ref`, etc.
|
||||||
|
- html: the entire namespace of `html` elements, their listeners, and attributes
|
||||||
|
- router: a cross-platform (web and desktop) solution for global app routing
|
||||||
|
- liveview: a threadpool to spawn new VirtualDoms and their handles in
|
||||||
|
- ssr: render the virtualdom to a string
|
||||||
|
- web: render the your app on the web
|
||||||
|
- desktop: render your app locally rendered with webview
|
||||||
|
- mobile: render your app on your device rendered with webview
|
||||||
|
|
||||||
## Examples:
|
## Examples:
|
||||||
|
|
||||||
| File Navigator (Desktop) | Bluetooth scanner (Desktop) | TodoMVC (All platforms) | Tailwind (Liveview) |
|
| File Navigator (Desktop) | Bluetooth scanner (Desktop) | TodoMVC (All platforms) | Tailwind (Liveview) |
|
||||||
|
|
|
@ -51,9 +51,10 @@ dioxus-html = { path = "../html" }
|
||||||
fern = { version = "0.6.0", features = ["colored"] }
|
fern = { version = "0.6.0", features = ["colored"] }
|
||||||
rand = { version = "0.8.4", features = ["small_rng"] }
|
rand = { version = "0.8.4", features = ["small_rng"] }
|
||||||
simple_logger = "1.13.0"
|
simple_logger = "1.13.0"
|
||||||
dioxus-core-macro = { path = "../core-macro", version ="^0.1.2"}
|
dioxus-core-macro = { path = "../core-macro", version = "^0.1.2" }
|
||||||
# dioxus-hooks = { path = "../hooks" }
|
# dioxus-hooks = { path = "../hooks" }
|
||||||
criterion = "0.3.5"
|
criterion = "0.3.5"
|
||||||
|
thiserror = "1.0.30"
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = []
|
default = []
|
||||||
|
|
10
packages/core/examples/handlerror.rs
Normal file
10
packages/core/examples/handlerror.rs
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
//! Handling errors and early aborts
|
||||||
|
//!
|
||||||
|
//!
|
||||||
|
//!
|
||||||
|
//!
|
||||||
|
|
||||||
|
use dioxus_core::prelude::*;
|
||||||
|
use thiserror::Error;
|
||||||
|
|
||||||
|
fn main() {}
|
|
@ -20,7 +20,47 @@ pub(crate) mod innerlude {
|
||||||
pub(crate) use crate::scopearena::*;
|
pub(crate) use crate::scopearena::*;
|
||||||
pub use crate::virtual_dom::*;
|
pub use crate::virtual_dom::*;
|
||||||
|
|
||||||
|
/// An [`Element`] is a possibly-none [`VNode`] created by calling `render` on [`Scope`] or [`ScopeState`].
|
||||||
|
///
|
||||||
|
/// Any [`None`] [`Element`] will automatically be coerced into a placeholder [`VNode`] with the [`VNode::Placeholder`] variant.
|
||||||
pub type Element<'a> = Option<VNode<'a>>;
|
pub type Element<'a> = Option<VNode<'a>>;
|
||||||
|
|
||||||
|
/// A [`Component`] is a function that takes a [`Scope`] and returns an [`Element`].
|
||||||
|
///
|
||||||
|
/// Components can be used in other components with two syntax options:
|
||||||
|
/// - lowercase as a function call with named arguments (rust style)
|
||||||
|
/// - uppercase as an element (react style)
|
||||||
|
///
|
||||||
|
/// ## Rust-Style
|
||||||
|
///
|
||||||
|
/// ```rust
|
||||||
|
/// fn example(cx: Scope<Props>) -> Element {
|
||||||
|
/// // ...
|
||||||
|
/// }
|
||||||
|
///
|
||||||
|
/// rsx!(
|
||||||
|
/// example()
|
||||||
|
/// )
|
||||||
|
/// ```
|
||||||
|
/// ## React-Style
|
||||||
|
/// ```rust
|
||||||
|
/// fn Example(cx: Scope<Props>) -> Element {
|
||||||
|
/// // ...
|
||||||
|
/// }
|
||||||
|
///
|
||||||
|
/// rsx!(
|
||||||
|
/// Example {}
|
||||||
|
/// )
|
||||||
|
/// ```
|
||||||
|
///
|
||||||
|
/// ## As a closure
|
||||||
|
/// This particular type alias lets you even use static closures for pure/static components:
|
||||||
|
///
|
||||||
|
/// ```rust
|
||||||
|
/// static Example: Component<Props> = |cx| {
|
||||||
|
/// // ...
|
||||||
|
/// };
|
||||||
|
/// ```
|
||||||
pub type Component<P> = for<'a> fn(Scope<'a, P>) -> Element<'a>;
|
pub type Component<P> = for<'a> fn(Scope<'a, P>) -> Element<'a>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "dioxus-desktop"
|
name = "dioxus-desktop"
|
||||||
version = "0.0.0"
|
version = "0.1.0"
|
||||||
authors = ["Jonathan Kelley"]
|
authors = ["Jonathan Kelley"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
description = "Dioxus VirtualDOM renderer for a remote webview instance"
|
description = "Dioxus VirtualDOM renderer for a remote webview instance"
|
||||||
|
@ -12,7 +12,7 @@ keywords = ["dom", "ui", "gui", "react", "wasm"]
|
||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
dioxus-core = { path = "../core", version ="^0.1.3", features = ["serialize"] }
|
dioxus-core = { path = "../core", version = "^0.1.3", features = ["serialize"] }
|
||||||
argh = "0.1.4"
|
argh = "0.1.4"
|
||||||
serde = "1.0.120"
|
serde = "1.0.120"
|
||||||
serde_json = "1.0.61"
|
serde_json = "1.0.61"
|
||||||
|
@ -20,7 +20,7 @@ thiserror = "1.0.23"
|
||||||
log = "0.4.13"
|
log = "0.4.13"
|
||||||
html-escape = "0.2.9"
|
html-escape = "0.2.9"
|
||||||
wry = "0.12.2"
|
wry = "0.12.2"
|
||||||
futures-channel = "0.3.18"
|
futures-channel = "0.3"
|
||||||
tokio = { version = "1.12.0", features = [
|
tokio = { version = "1.12.0", features = [
|
||||||
"sync",
|
"sync",
|
||||||
"rt-multi-thread",
|
"rt-multi-thread",
|
||||||
|
|
|
@ -1,16 +1,10 @@
|
||||||
//! Dioxus Desktop Renderer
|
//! Dioxus Desktop Renderer
|
||||||
//!
|
//!
|
||||||
//! Render the Dioxus VirtualDom using the platform's native WebView implementation.
|
//! Render the Dioxus VirtualDom using the platform's native WebView implementation.
|
||||||
//!
|
|
||||||
|
|
||||||
mod cfg;
|
mod cfg;
|
||||||
mod escape;
|
mod escape;
|
||||||
mod events;
|
mod events;
|
||||||
pub use wry;
|
|
||||||
pub use wry::application as tao;
|
|
||||||
|
|
||||||
// mod desktop_context;
|
|
||||||
|
|
||||||
use cfg::DesktopConfig;
|
use cfg::DesktopConfig;
|
||||||
use dioxus_core::*;
|
use dioxus_core::*;
|
||||||
use std::{
|
use std::{
|
||||||
|
@ -18,15 +12,17 @@ use std::{
|
||||||
sync::atomic::AtomicBool,
|
sync::atomic::AtomicBool,
|
||||||
sync::{Arc, RwLock},
|
sync::{Arc, RwLock},
|
||||||
};
|
};
|
||||||
use wry::{
|
use tao::{
|
||||||
application::{
|
|
||||||
accelerator::{Accelerator, SysMods},
|
accelerator::{Accelerator, SysMods},
|
||||||
event::{Event, StartCause, WindowEvent},
|
event::{Event, StartCause, WindowEvent},
|
||||||
event_loop::{ControlFlow, EventLoop, EventLoopWindowTarget},
|
event_loop::{ControlFlow, EventLoop, EventLoopWindowTarget},
|
||||||
keyboard::{KeyCode, ModifiersState},
|
keyboard::{KeyCode, ModifiersState},
|
||||||
menu::{MenuBar, MenuItem},
|
menu::{MenuBar, MenuItem},
|
||||||
window::{Window, WindowId},
|
window::{Window, WindowId},
|
||||||
},
|
};
|
||||||
|
pub use wry;
|
||||||
|
pub use wry::application as tao;
|
||||||
|
use wry::{
|
||||||
webview::RpcRequest,
|
webview::RpcRequest,
|
||||||
webview::{WebView, WebViewBuilder},
|
webview::{WebView, WebViewBuilder},
|
||||||
};
|
};
|
||||||
|
|
|
@ -12,8 +12,7 @@ keywords = ["dom", "ui", "gui", "react", "wasm"]
|
||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
dioxus-core = { path = "../core", version ="^0.1.3"}
|
dioxus-core = { path = "../core", version = "^0.1.3" }
|
||||||
# Serialize the Edits for use in Webview/Liveview instances
|
|
||||||
serde = { version = "1", features = ["derive"], optional = true }
|
serde = { version = "1", features = ["derive"], optional = true }
|
||||||
serde_repr = { version = "0.1.7", optional = true }
|
serde_repr = { version = "0.1.7", optional = true }
|
||||||
|
|
||||||
|
|
|
@ -11,9 +11,9 @@ keywords = ["dom", "ui", "gui", "react", "wasm"]
|
||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
dioxus-core = { path = "../core", version ="^0.1.3", default-features = false }
|
dioxus-core = { path = "../core", version = "^0.1.3", default-features = false }
|
||||||
dioxus-html = { path = "../html", version ="^0.1.0", default-features = false }
|
dioxus-html = { path = "../html", version = "^0.1.0", default-features = false }
|
||||||
dioxus-core-macro = { path = "../core-macro", version ="^0.1.2"}
|
dioxus-core-macro = { path = "../core-macro", version = "^0.1.2" }
|
||||||
|
|
||||||
web-sys = { version = "0.3", features = [
|
web-sys = { version = "0.3", features = [
|
||||||
"Attr",
|
"Attr",
|
||||||
|
@ -33,7 +33,7 @@ serde_urlencoded = "0.7"
|
||||||
|
|
||||||
wasm-bindgen = "0.2"
|
wasm-bindgen = "0.2"
|
||||||
js-sys = "0.3"
|
js-sys = "0.3"
|
||||||
gloo = "0.5"
|
gloo = "0.4"
|
||||||
route-recognizer = "0.3.1"
|
route-recognizer = "0.3.1"
|
||||||
url = "2.2.2"
|
url = "2.2.2"
|
||||||
url_serde = "0.2.0"
|
url_serde = "0.2.0"
|
||||||
|
|
|
@ -182,9 +182,6 @@
|
||||||
//! We've put a lot of work into making Dioxus ergonomic and *familiar*.
|
//! We've put a lot of work into making Dioxus ergonomic and *familiar*.
|
||||||
//! Our target audience is TypeSrcipt developers looking to switch to Rust for the web - so we need to be comparabale to React.
|
//! Our target audience is TypeSrcipt developers looking to switch to Rust for the web - so we need to be comparabale to React.
|
||||||
|
|
||||||
// Just a heads-up, the core functionality of dioxus rests in Dioxus-Core. This crate just wraps a bunch of utilities
|
|
||||||
// together and exports their namespaces to something predicatble.
|
|
||||||
#[cfg(feature = "core")]
|
|
||||||
pub use dioxus_core as core;
|
pub use dioxus_core as core;
|
||||||
|
|
||||||
#[cfg(feature = "hooks")]
|
#[cfg(feature = "hooks")]
|
||||||
|
|
Loading…
Reference in a new issue