Native: Split dioxus-native-dom crate out of dioxus-native (#4366)
Signed-off-by: Nico Burns <nico@nicoburns.com>
This commit is contained in:
1 parent
b252528722
commit
a4ebdcb69e
10 files changed
+129
-63
No files matched your search
Generated
+15
@@ -5636,6 +5636,7 @@ dependencies = [
|
|||||||
"dioxus-document",
|
"dioxus-document",
|
||||||
"dioxus-history",
|
"dioxus-history",
|
||||||
"dioxus-html",
|
"dioxus-html",
|
||||||
|
"dioxus-native-dom",
|
||||||
"futures-util",
|
"futures-util",
|
||||||
"keyboard-types",
|
"keyboard-types",
|
||||||
"rustc-hash 2.1.1",
|
"rustc-hash 2.1.1",
|
||||||
@@ -5644,6 +5645,20 @@ dependencies = [
|
|||||||
"winit",
|
"winit",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "dioxus-native-dom"
|
||||||
|
version = "0.7.0-alpha.2"
|
||||||
|
dependencies = [
|
||||||
|
"blitz-dom",
|
||||||
|
"blitz-traits",
|
||||||
|
"dioxus-core",
|
||||||
|
"dioxus-html",
|
||||||
|
"futures-util",
|
||||||
|
"keyboard-types",
|
||||||
|
"rustc-hash 2.1.1",
|
||||||
|
"tracing",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dioxus-playwright-default-features-disabled-test"
|
name = "dioxus-playwright-default-features-disabled-test"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
|
|||||||
@@ -69,6 +69,7 @@ members = [
|
|||||||
"packages/logger",
|
"packages/logger",
|
||||||
"packages/config-macros",
|
"packages/config-macros",
|
||||||
"packages/native",
|
"packages/native",
|
||||||
|
"packages/native-dom",
|
||||||
"packages/asset-resolver",
|
"packages/asset-resolver",
|
||||||
"packages/depinfo",
|
"packages/depinfo",
|
||||||
"packages/server",
|
"packages/server",
|
||||||
@@ -175,6 +176,7 @@ dioxus_server_macro = { path = "packages/server-macro", version = "0.7.0-alpha.2
|
|||||||
dioxus-dx-wire-format = { path = "packages/dx-wire-format", version = "0.7.0-alpha.2" }
|
dioxus-dx-wire-format = { path = "packages/dx-wire-format", version = "0.7.0-alpha.2" }
|
||||||
dioxus-logger = { path = "packages/logger", version = "0.7.0-alpha.2" }
|
dioxus-logger = { path = "packages/logger", version = "0.7.0-alpha.2" }
|
||||||
dioxus-native = { path = "packages/native", version = "0.7.0-alpha.2" }
|
dioxus-native = { path = "packages/native", version = "0.7.0-alpha.2" }
|
||||||
|
dioxus-native-dom = { path = "packages/native-dom", version = "0.7.0-alpha.2" }
|
||||||
dioxus-asset-resolver = { path = "packages/asset-resolver", version = "0.7.0-alpha.2" }
|
dioxus-asset-resolver = { path = "packages/asset-resolver", version = "0.7.0-alpha.2" }
|
||||||
dioxus-config-macros = { path = "packages/config-macros", version = "0.7.0-alpha.2" }
|
dioxus-config-macros = { path = "packages/config-macros", version = "0.7.0-alpha.2" }
|
||||||
const-serialize = { path = "packages/const-serialize", version = "0.7.0-alpha.2" }
|
const-serialize = { path = "packages/const-serialize", version = "0.7.0-alpha.2" }
|
||||||
|
|||||||
@@ -0,0 +1,40 @@
|
|||||||
|
[package]
|
||||||
|
name = "dioxus-native-dom"
|
||||||
|
version = { workspace = true }
|
||||||
|
authors = ["Jonathan Kelley", "Nico Burns"]
|
||||||
|
edition = "2021"
|
||||||
|
description = "Core headless native renderer for Dioxus based on blitz"
|
||||||
|
license = "MIT OR Apache-2.0"
|
||||||
|
repository = "https://github.com/DioxusLabs/dioxus/"
|
||||||
|
homepage = "https://dioxuslabs.com/learn/0.6/getting_started"
|
||||||
|
keywords = ["dom", "ui", "gui", "react"]
|
||||||
|
|
||||||
|
[features]
|
||||||
|
default = ["accessibility", "tracing", "svg", "system-fonts"]
|
||||||
|
svg = ["blitz-dom/svg"]
|
||||||
|
accessibility = ["blitz-dom/accessibility"]
|
||||||
|
tracing = ["dep:tracing", "blitz-dom/tracing"]
|
||||||
|
system-fonts = ["blitz-dom/system_fonts"]
|
||||||
|
autofocus = []
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
# Blitz dependencies
|
||||||
|
blitz-dom = { version = "=0.1.0-alpha.5", default-features = false }
|
||||||
|
blitz-traits = { version = "=0.1.0-alpha.5" }
|
||||||
|
|
||||||
|
# DioxusLabs dependencies
|
||||||
|
dioxus-core = { workspace = true }
|
||||||
|
dioxus-html = { workspace = true }
|
||||||
|
|
||||||
|
# Windowing & Input
|
||||||
|
keyboard-types = { workspace = true }
|
||||||
|
|
||||||
|
|
||||||
|
# Other dependencies
|
||||||
|
tracing = { workspace = true, optional = true }
|
||||||
|
rustc-hash = { workspace = true }
|
||||||
|
futures-util = { workspace = true }
|
||||||
|
|
||||||
|
[package.metadata.docs.rs]
|
||||||
|
all-features = true
|
||||||
|
rustdoc-args = ["--cfg", "docsrs"]
|
||||||
+11
-12
@@ -1,9 +1,10 @@
|
|||||||
//! Integration between Dioxus and Blitz
|
//! Integration between Dioxus and Blitz
|
||||||
use blitz_dom::Attribute;
|
use crate::events::{BlitzKeyboardData, NativeClickData, NativeConverter, NativeFormData};
|
||||||
use futures_util::{pin_mut, FutureExt};
|
use crate::mutation_writer::{DioxusState, MutationWriter};
|
||||||
use std::ops::{Deref, DerefMut};
|
use crate::qual_name;
|
||||||
use std::{any::Any, collections::HashMap, rc::Rc, sync::Arc};
|
use crate::NodeId;
|
||||||
|
|
||||||
|
use blitz_dom::Attribute;
|
||||||
use blitz_dom::{
|
use blitz_dom::{
|
||||||
net::Resource, BaseDocument, Document, EventDriver, EventHandler, Node, DEFAULT_CSS,
|
net::Resource, BaseDocument, Document, EventDriver, EventHandler, Node, DEFAULT_CSS,
|
||||||
};
|
};
|
||||||
@@ -15,11 +16,9 @@ use blitz_traits::{
|
|||||||
|
|
||||||
use dioxus_core::{ElementId, Event, VirtualDom};
|
use dioxus_core::{ElementId, Event, VirtualDom};
|
||||||
use dioxus_html::{set_event_converter, PlatformEventData};
|
use dioxus_html::{set_event_converter, PlatformEventData};
|
||||||
|
use futures_util::{pin_mut, FutureExt};
|
||||||
use crate::events::{BlitzKeyboardData, NativeClickData, NativeConverter, NativeFormData};
|
use std::ops::{Deref, DerefMut};
|
||||||
use crate::mutation_writer::{DioxusState, MutationWriter};
|
use std::{any::Any, collections::HashMap, rc::Rc, sync::Arc};
|
||||||
use crate::qual_name;
|
|
||||||
use crate::NodeId;
|
|
||||||
|
|
||||||
fn wrap_event_data<T: Any>(value: T) -> Rc<dyn Any> {
|
fn wrap_event_data<T: Any>(value: T) -> Rc<dyn Any> {
|
||||||
Rc::new(PlatformEventData::new(Box::new(value)))
|
Rc::new(PlatformEventData::new(Box::new(value)))
|
||||||
@@ -36,9 +35,9 @@ fn get_dioxus_id(node: &Node) -> Option<ElementId> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub struct DioxusDocument {
|
pub struct DioxusDocument {
|
||||||
pub(crate) vdom: VirtualDom,
|
pub inner: BaseDocument,
|
||||||
pub(crate) vdom_state: DioxusState,
|
pub vdom: VirtualDom,
|
||||||
pub(crate) inner: BaseDocument,
|
pub vdom_state: DioxusState,
|
||||||
|
|
||||||
#[allow(unused)]
|
#[allow(unused)]
|
||||||
pub(crate) html_element_id: NodeId,
|
pub(crate) html_element_id: NodeId,
|
||||||
@@ -6,11 +6,11 @@ use dioxus_html::{
|
|||||||
InteractionElementOffset, InteractionLocation, ModifiersInteraction, PointerInteraction,
|
InteractionElementOffset, InteractionLocation, ModifiersInteraction, PointerInteraction,
|
||||||
},
|
},
|
||||||
AnimationData, ClipboardData, CompositionData, DragData, FocusData, FormData, FormValue,
|
AnimationData, ClipboardData, CompositionData, DragData, FocusData, FormData, FormValue,
|
||||||
HasFileData, HasFormData, HasMouseData, HtmlEventConverter, ImageData, KeyboardData, MediaData,
|
HasFileData, HasFocusData, HasFormData, HasKeyboardData, HasMouseData, HtmlEventConverter,
|
||||||
MountedData, MouseData, PlatformEventData, PointerData, ResizeData, ScrollData, SelectionData,
|
ImageData, KeyboardData, MediaData, MountedData, MouseData, PlatformEventData, PointerData,
|
||||||
ToggleData, TouchData, TransitionData, VisibleData, WheelData,
|
ResizeData, ScrollData, SelectionData, ToggleData, TouchData, TransitionData, VisibleData,
|
||||||
|
WheelData,
|
||||||
};
|
};
|
||||||
use dioxus_html::{HasFocusData, HasKeyboardData};
|
|
||||||
use keyboard_types::{Code, Key, Location, Modifiers};
|
use keyboard_types::{Code, Key, Location, Modifiers};
|
||||||
use std::any::Any;
|
use std::any::Any;
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
#![cfg_attr(docsrs, feature(doc_cfg))]
|
||||||
|
|
||||||
|
//! Core headless native renderer for Dioxus.
|
||||||
|
//!
|
||||||
|
//! ## Feature flags
|
||||||
|
//! - `default`: Enables the features listed below.
|
||||||
|
//! - `accessibility`: Enables [`accesskit`](https://docs.rs/accesskit/latest/accesskit/) accessibility support.
|
||||||
|
//! - `hot-reload`: Enables hot-reloading of Dioxus RSX.
|
||||||
|
//! - `menu`: Enables the [`muda`](https://docs.rs/muda/latest/muda/) menubar.
|
||||||
|
//! - `tracing`: Enables tracing support.
|
||||||
|
|
||||||
|
mod dioxus_document;
|
||||||
|
mod events;
|
||||||
|
mod mutation_writer;
|
||||||
|
pub use dioxus_document::DioxusDocument;
|
||||||
|
|
||||||
|
use blitz_dom::{ns, LocalName, Namespace, QualName};
|
||||||
|
type NodeId = usize;
|
||||||
|
|
||||||
|
pub(crate) fn qual_name(local_name: &str, namespace: Option<&str>) -> QualName {
|
||||||
|
QualName {
|
||||||
|
prefix: None,
|
||||||
|
ns: namespace.map(Namespace::from).unwrap_or(ns!(html)),
|
||||||
|
local: LocalName::from(local_name),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Syntax sugar to make tracing calls less noisy in function below
|
||||||
|
macro_rules! trace {
|
||||||
|
($pattern:literal) => {{
|
||||||
|
#[cfg(feature = "tracing")]
|
||||||
|
tracing::info!($pattern);
|
||||||
|
}};
|
||||||
|
($pattern:literal, $item1:expr) => {{
|
||||||
|
#[cfg(feature = "tracing")]
|
||||||
|
tracing::info!($pattern, $item1);
|
||||||
|
}};
|
||||||
|
($pattern:literal, $item1:expr, $item2:expr) => {{
|
||||||
|
#[cfg(feature = "tracing")]
|
||||||
|
tracing::info!($pattern, $item1, $item2);
|
||||||
|
}};
|
||||||
|
($pattern:literal, $item1:expr, $item2:expr, $item3:expr) => {{
|
||||||
|
#[cfg(feature = "tracing")]
|
||||||
|
tracing::info!($pattern, $item1, $item2);
|
||||||
|
}};
|
||||||
|
($pattern:literal, $item1:expr, $item2:expr, $item3:expr, $item4:expr) => {{
|
||||||
|
#[cfg(feature = "tracing")]
|
||||||
|
tracing::info!($pattern, $item1, $item2, $item3, $item4);
|
||||||
|
}};
|
||||||
|
}
|
||||||
|
pub(crate) use trace;
|
||||||
File renamed without changes.
@@ -32,6 +32,7 @@ blitz-shell = { version = "=0.1.0-alpha.5", default-features = false }
|
|||||||
# DioxusLabs dependencies
|
# DioxusLabs dependencies
|
||||||
dioxus-core = { workspace = true }
|
dioxus-core = { workspace = true }
|
||||||
dioxus-html = { workspace = true }
|
dioxus-html = { workspace = true }
|
||||||
|
dioxus-native-dom = { workspace = true }
|
||||||
dioxus-asset-resolver = { workspace = true }
|
dioxus-asset-resolver = { workspace = true }
|
||||||
dioxus-cli-config = { workspace = true, optional = true }
|
dioxus-cli-config = { workspace = true, optional = true }
|
||||||
dioxus-devtools = { workspace = true, optional = true }
|
dioxus-devtools = { workspace = true, optional = true }
|
||||||
|
|||||||
@@ -8,10 +8,7 @@ use winit::event_loop::{ActiveEventLoop, EventLoopProxy};
|
|||||||
use winit::window::WindowId;
|
use winit::window::WindowId;
|
||||||
|
|
||||||
use crate::DioxusNativeWindowRenderer;
|
use crate::DioxusNativeWindowRenderer;
|
||||||
use crate::{
|
use crate::{contexts::DioxusNativeDocument, BlitzShellEvent, DioxusDocument, WindowConfig};
|
||||||
contexts::DioxusNativeDocument, mutation_writer::MutationWriter, BlitzShellEvent,
|
|
||||||
DioxusDocument, WindowConfig,
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Dioxus-native specific event type
|
/// Dioxus-native specific event type
|
||||||
pub enum DioxusNativeEvent {
|
pub enum DioxusNativeEvent {
|
||||||
@@ -138,9 +135,7 @@ impl ApplicationHandler<BlitzShellEvent> for DioxusNativeApplication {
|
|||||||
.in_runtime(move || ScopeId::ROOT.provide_context(renderer));
|
.in_runtime(move || ScopeId::ROOT.provide_context(renderer));
|
||||||
|
|
||||||
// Queue rebuild
|
// Queue rebuild
|
||||||
let mut writer = MutationWriter::new(&mut doc.inner, &mut doc.vdom_state);
|
doc.initial_build();
|
||||||
doc.vdom.rebuild(&mut writer);
|
|
||||||
drop(writer);
|
|
||||||
|
|
||||||
// And then request redraw
|
// And then request redraw
|
||||||
window.request_redraw();
|
window.request_redraw();
|
||||||
|
|||||||
@@ -12,18 +12,16 @@
|
|||||||
mod assets;
|
mod assets;
|
||||||
mod contexts;
|
mod contexts;
|
||||||
mod dioxus_application;
|
mod dioxus_application;
|
||||||
mod dioxus_document;
|
|
||||||
mod dioxus_renderer;
|
mod dioxus_renderer;
|
||||||
mod events;
|
|
||||||
mod mutation_writer;
|
#[doc(inline)]
|
||||||
|
pub use dioxus_native_dom::*;
|
||||||
|
|
||||||
pub use anyrender_vello::{
|
pub use anyrender_vello::{
|
||||||
wgpu_context::DeviceHandle, CustomPaintCtx, CustomPaintSource, TextureHandle,
|
wgpu_context::DeviceHandle, CustomPaintCtx, CustomPaintSource, TextureHandle,
|
||||||
};
|
};
|
||||||
use assets::DioxusNativeNetProvider;
|
use assets::DioxusNativeNetProvider;
|
||||||
use blitz_dom::{ns, LocalName, Namespace, QualName};
|
|
||||||
pub use dioxus_application::{DioxusNativeApplication, DioxusNativeEvent};
|
pub use dioxus_application::{DioxusNativeApplication, DioxusNativeEvent};
|
||||||
pub use dioxus_document::DioxusDocument;
|
|
||||||
pub use dioxus_renderer::{use_wgpu, DioxusNativeWindowRenderer, Features, Limits};
|
pub use dioxus_renderer::{use_wgpu, DioxusNativeWindowRenderer, Features, Limits};
|
||||||
|
|
||||||
use blitz_shell::{create_default_event_loop, BlitzShellEvent, Config, WindowConfig};
|
use blitz_shell::{create_default_event_loop, BlitzShellEvent, Config, WindowConfig};
|
||||||
@@ -31,8 +29,6 @@ use dioxus_core::{ComponentFunction, Element, VirtualDom};
|
|||||||
use std::any::Any;
|
use std::any::Any;
|
||||||
use winit::window::WindowAttributes;
|
use winit::window::WindowAttributes;
|
||||||
|
|
||||||
type NodeId = usize;
|
|
||||||
|
|
||||||
/// Launch an interactive HTML/CSS renderer driven by the Dioxus virtualdom
|
/// Launch an interactive HTML/CSS renderer driven by the Dioxus virtualdom
|
||||||
pub fn launch(app: fn() -> Element) {
|
pub fn launch(app: fn() -> Element) {
|
||||||
launch_cfg(app, vec![], vec![])
|
launch_cfg(app, vec![], vec![])
|
||||||
@@ -142,36 +138,3 @@ pub fn launch_cfg_with_props<P: Clone + 'static, M: 'static>(
|
|||||||
// Run event loop
|
// Run event loop
|
||||||
event_loop.run_app(&mut application).unwrap();
|
event_loop.run_app(&mut application).unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn qual_name(local_name: &str, namespace: Option<&str>) -> QualName {
|
|
||||||
QualName {
|
|
||||||
prefix: None,
|
|
||||||
ns: namespace.map(Namespace::from).unwrap_or(ns!(html)),
|
|
||||||
local: LocalName::from(local_name),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Syntax sugar to make tracing calls less noisy in function below
|
|
||||||
macro_rules! trace {
|
|
||||||
($pattern:literal) => {{
|
|
||||||
#[cfg(feature = "tracing")]
|
|
||||||
tracing::info!($pattern);
|
|
||||||
}};
|
|
||||||
($pattern:literal, $item1:expr) => {{
|
|
||||||
#[cfg(feature = "tracing")]
|
|
||||||
tracing::info!($pattern, $item1);
|
|
||||||
}};
|
|
||||||
($pattern:literal, $item1:expr, $item2:expr) => {{
|
|
||||||
#[cfg(feature = "tracing")]
|
|
||||||
tracing::info!($pattern, $item1, $item2);
|
|
||||||
}};
|
|
||||||
($pattern:literal, $item1:expr, $item2:expr, $item3:expr) => {{
|
|
||||||
#[cfg(feature = "tracing")]
|
|
||||||
tracing::info!($pattern, $item1, $item2);
|
|
||||||
}};
|
|
||||||
($pattern:literal, $item1:expr, $item2:expr, $item3:expr, $item4:expr) => {{
|
|
||||||
#[cfg(feature = "tracing")]
|
|
||||||
tracing::info!($pattern, $item1, $item2, $item3, $item4);
|
|
||||||
}};
|
|
||||||
}
|
|
||||||
pub(crate) use trace;
|
|
||||||
Reference in new issue
Block a user