From 4f1d039bad2ceee58a8ee90b930ff6838b67a93b Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Wed, 16 Jul 2025 16:04:13 -0700 Subject: [PATCH] clean up prelude (#4416) * clear away prelude on dioxus * clippy * wip - drop prelude from dioxus-html * docs clippy * wip * more fixe * delete all preludes * doc... * better export * merge some imports * fewer global imports * global incremental renderer * fix cargo doc --- examples/fullstack-auth/src/auth.rs | 2 +- examples/fullstack-auth/src/main.rs | 1 - examples/fullstack-desktop/src/main.rs | 2 +- examples/fullstack-router/src/main.rs | 2 +- examples/query_segment_search.rs | 4 +- packages/core-macro/src/props/mod.rs | 54 +++++----- .../tests/values_memoize_in_place.rs | 7 +- packages/core/README.md | 3 +- packages/core/src/diff/component.rs | 3 +- packages/core/src/events.rs | 12 +-- packages/core/src/global_context.rs | 8 +- packages/core/src/lib.rs | 40 +++---- packages/core/src/nodes.rs | 15 ++- packages/core/src/reactive_context.rs | 7 +- packages/core/src/root_wrapper.rs | 5 +- packages/core/src/scope_arena.rs | 10 +- packages/core/src/scope_context.rs | 11 +- packages/core/src/scopes.rs | 4 +- packages/core/tests/attr_cleanup.rs | 2 +- packages/core/tests/attributes_pass.rs | 1 + packages/core/tests/bubble_error.rs | 1 + packages/core/tests/children_drop_futures.rs | 1 + packages/core/tests/context_api.rs | 1 + packages/core/tests/cycle.rs | 1 + packages/core/tests/diff_dynamic_node.rs | 1 + packages/core/tests/diff_element.rs | 1 + packages/core/tests/diff_keyed_list.rs | 1 + packages/core/tests/diff_unkeyed_list.rs | 2 +- packages/core/tests/kitchen_sink.rs | 1 + packages/core/tests/miri_simple.rs | 1 + packages/core/tests/miri_stress.rs | 2 +- packages/core/tests/suspense.rs | 2 +- packages/core/tests/task.rs | 1 + packages/core/tests/tracing.rs | 2 +- packages/desktop/src/assets.rs | 2 +- packages/desktop/src/desktop_context.rs | 4 +- packages/desktop/src/document.rs | 2 +- packages/desktop/src/file_upload.rs | 6 +- packages/desktop/src/hooks.rs | 7 +- packages/desktop/src/trayicon.rs | 5 +- packages/devtools/src/lib.rs | 2 +- packages/dioxus-lib/src/lib.rs | 17 ++- packages/dioxus/src/launch.rs | 4 +- packages/dioxus/src/lib.rs | 33 ++++-- packages/document/src/elements/link.rs | 1 + packages/document/src/elements/meta.rs | 1 + packages/document/src/elements/mod.rs | 4 +- packages/document/src/elements/script.rs | 1 + packages/document/src/elements/style.rs | 1 + packages/document/src/elements/title.rs | 2 + packages/document/src/lib.rs | 2 +- packages/fullstack-hooks/src/history.rs | 2 +- .../src/hooks/server_cached.rs | 2 +- .../src/hooks/server_future.rs | 2 +- packages/fullstack-hooks/src/lib.rs | 8 +- packages/fullstack-hooks/src/streaming.rs | 2 +- packages/fullstack-protocol/src/lib.rs | 4 +- packages/fullstack/src/error.rs | 2 +- packages/fullstack/src/lib.rs | 25 ++--- packages/history/src/lib.rs | 4 +- .../hooks/src/use_after_suspense_resolved.rs | 2 +- packages/hooks/src/use_callback.rs | 3 +- packages/hooks/src/use_context.rs | 5 +- packages/hooks/src/use_coroutine.rs | 2 +- packages/hooks/src/use_effect.rs | 2 +- packages/hooks/src/use_future.rs | 6 +- packages/hooks/src/use_hook_did_run.rs | 2 +- packages/hooks/src/use_memo.rs | 2 +- packages/hooks/src/use_on_destroy.rs | 2 +- packages/hooks/src/use_resource.rs | 6 +- packages/hooks/src/use_root_context.rs | 2 +- packages/hooks/src/use_set_compare.rs | 5 +- packages/hooks/src/use_signal.rs | 2 +- packages/hooks/tests/effect.rs | 2 +- packages/hooks/tests/memo.rs | 2 + packages/html/src/attribute_groups.rs | 2 +- packages/html/src/elements.rs | 2 +- packages/html/src/events/drag.rs | 2 +- packages/html/src/events/keyboard.rs | 2 +- packages/html/src/events/mod.rs | 2 +- packages/html/src/events/mouse.rs | 2 +- packages/html/src/events/pointer.rs | 2 +- packages/html/src/events/touch.rs | 2 +- packages/html/src/events/wheel.rs | 9 +- packages/html/src/lib.rs | 18 ++-- .../liveview/src/adapters/axum_adapter.rs | 2 +- packages/liveview/src/config.rs | 2 +- packages/liveview/src/document.rs | 2 +- packages/liveview/src/history.rs | 2 +- packages/liveview/src/pool.rs | 3 +- packages/native/src/dioxus_renderer.rs | 2 +- .../playwright-tests/fullstack/src/main.rs | 7 +- .../nested-suspense/src/lib.rs | 2 +- .../nested-suspense/src/ssg.rs | 2 +- .../suspense-carousel/src/main.rs | 2 +- .../wasm-split-harness/src/main.rs | 8 +- packages/router-macro/src/segment.rs | 4 +- .../router/src/components/child_router.rs | 2 +- packages/router/src/components/outlet.rs | 2 +- packages/router/src/components/router.rs | 10 +- packages/router/src/contexts/navigator.rs | 4 +- packages/router/src/contexts/outlet.rs | 2 +- packages/router/src/contexts/router.rs | 6 +- packages/router/src/hooks/use_navigator.rs | 4 +- packages/router/src/hooks/use_route.rs | 5 +- packages/router/src/hooks/use_router.rs | 6 +- packages/router/src/lib.rs | 40 ++++--- packages/router/src/routable.rs | 5 +- packages/router/src/router_cfg.rs | 4 +- .../router/src/utils/use_router_internal.rs | 7 +- packages/router/tests/via_ssr/outlet.rs | 1 - .../rsx-hotreload/tests/hotreload_pattern.rs | 3 +- packages/rsx/src/component.rs | 22 ++-- packages/server/src/config.rs | 6 +- packages/server/src/context.rs | 2 +- packages/server/src/lib.rs | 16 +-- packages/server/src/render.rs | 12 ++- packages/signals/src/copy_value.rs | 8 +- packages/signals/src/map.rs | 5 +- packages/signals/src/memo.rs | 4 +- packages/signals/src/props.rs | 3 +- packages/signals/src/read_only_signal.rs | 2 +- packages/signals/src/set_compare.rs | 4 +- packages/signals/src/signal.rs | 13 +-- packages/signals/src/warnings.rs | 101 +----------------- packages/signals/tests/create.rs | 3 +- packages/signals/tests/memo.rs | 2 +- packages/signals/tests/subscribe.rs | 2 +- packages/ssr/src/cache.rs | 5 +- packages/ssr/src/renderer.rs | 4 +- packages/web/src/document.rs | 2 +- packages/web/src/events/drag.rs | 7 +- packages/web/src/events/keyboard.rs | 5 +- packages/web/src/events/mouse.rs | 7 +- packages/web/src/events/pointer.rs | 7 +- packages/web/src/events/touch.rs | 3 +- packages/web/src/events/wheel.rs | 7 +- packages/web/src/hydration/hydrate.rs | 7 +- packages/web/src/launch.rs | 3 +- packages/web/src/mutations.rs | 6 +- 140 files changed, 374 insertions(+), 477 deletions(-) diff --git a/examples/fullstack-auth/src/auth.rs b/examples/fullstack-auth/src/auth.rs index 3c3c11c4e..7d67ee13c 100644 --- a/examples/fullstack-auth/src/auth.rs +++ b/examples/fullstack-auth/src/auth.rs @@ -9,7 +9,7 @@ use axum_session::{SessionConfig, SessionLayer, SessionStore}; use axum_session_auth::*; use axum_session_sqlx::SessionSqlitePool; use core::pin::Pin; -use dioxus_fullstack::prelude::*; +use dioxus::prelude::*; use serde::{Deserialize, Serialize}; use sqlx::sqlite::{SqliteConnectOptions, SqlitePool, SqlitePoolOptions}; use std::error::Error; diff --git a/examples/fullstack-auth/src/main.rs b/examples/fullstack-auth/src/main.rs index 3f5189b82..808a72079 100644 --- a/examples/fullstack-auth/src/main.rs +++ b/examples/fullstack-auth/src/main.rs @@ -4,7 +4,6 @@ mod auth; use dioxus::prelude::*; -use dioxus_fullstack::prelude::*; use serde::{Deserialize, Serialize}; fn main() { diff --git a/examples/fullstack-desktop/src/main.rs b/examples/fullstack-desktop/src/main.rs index 6e21d8fc8..7d6284097 100644 --- a/examples/fullstack-desktop/src/main.rs +++ b/examples/fullstack-desktop/src/main.rs @@ -4,7 +4,7 @@ use dioxus::prelude::*; fn main() { // Set the url of the server where server functions are hosted. #[cfg(not(feature = "server"))] - dioxus::fullstack::prelude::server_fn::client::set_server_url("http://127.0.0.1:8080"); + dioxus::fullstack::set_server_url("http://127.0.0.1:8080"); dioxus::launch(app); } diff --git a/examples/fullstack-router/src/main.rs b/examples/fullstack-router/src/main.rs index baec38c83..be68dafc1 100644 --- a/examples/fullstack-router/src/main.rs +++ b/examples/fullstack-router/src/main.rs @@ -9,7 +9,7 @@ use dioxus::prelude::*; fn main() { dioxus::LaunchBuilder::new() .with_cfg(server_only!(ServeConfig::builder().incremental( - IncrementalRendererConfig::default() + dioxus::fullstack::IncrementalRendererConfig::default() .invalidate_after(std::time::Duration::from_secs(120)), ))) .launch(app); diff --git a/examples/query_segment_search.rs b/examples/query_segment_search.rs index 7a4fc6009..4366cc011 100644 --- a/examples/query_segment_search.rs +++ b/examples/query_segment_search.rs @@ -2,7 +2,7 @@ //! //! The enum router makes it easy to use your route as state in your app. This example shows how to use the router to encode search text into the url and decode it back into a string. //! -//! Run this example on desktop with +//! Run this example on desktop with //! ```sh //! dx serve --example query_segment_search //! ``` @@ -29,7 +29,7 @@ enum Route { // The each query segment must implement and Display. // You can use multiple query segments separated by `&`s. - #[route("/search?:query&:word_count")] + #[route("/search?:query&:word_count")] Search { query: String, word_count: usize, diff --git a/packages/core-macro/src/props/mod.rs b/packages/core-macro/src/props/mod.rs index 6d8197c16..c0c389be2 100644 --- a/packages/core-macro/src/props/mod.rs +++ b/packages/core-macro/src/props/mod.rs @@ -544,7 +544,7 @@ fn extract_inner_type_from_segment(segment: &PathSegment) -> Option<&Type> { mod struct_info { use convert_case::{Case, Casing}; use proc_macro2::TokenStream; - use quote::quote; + use quote::{quote, ToTokens}; use syn::parse::Error; use syn::punctuated::Punctuated; use syn::spanned::Spanned; @@ -884,7 +884,7 @@ Finally, call `.build()` to create the instance of `{name}`. _phantom: (#( #phantom_generics ),*), } - impl #impl_generics dioxus_core::prelude::Properties for #name #ty_generics + impl #impl_generics dioxus_core::Properties for #name #ty_generics #b_generics_where { type Builder = #builder_name #generics_with_empty; @@ -1024,22 +1024,19 @@ Finally, call `.build()` to create the instance of `{name}`. Ok(quote! { #[allow(dead_code, non_camel_case_types, missing_docs)] - impl #impl_generics dioxus_core::prelude::HasAttributes for #builder_name < #( #ty_generics ),* > #where_clause { + impl #impl_generics dioxus_core::HasAttributes for #builder_name < #( #ty_generics ),* > #where_clause { fn push_attribute( mut self, ____name: &'static str, ____ns: Option<&'static str>, - ____attr: impl dioxus_core::prelude::IntoAttributeValue, + ____attr: impl dioxus_core::IntoAttributeValue, ____volatile: bool ) -> Self { let ( #(#descructuring,)* ) = self.fields; self.#field_name.push( dioxus_core::Attribute::new( ____name, - { - use dioxus_core::prelude::IntoAttributeValue; - ____attr.into_value() - }, + dioxus_core::IntoAttributeValue::::into_value(____attr), ____ns, ____volatile, ) @@ -1150,16 +1147,16 @@ Finally, call `.build()` to create the instance of `{name}`. let marker_ident = syn::Ident::new("__Marker", proc_macro2::Span::call_site()); marker = Some(marker_ident.clone()); ( - quote!(impl dioxus_core::prelude::SuperInto<#arg_type, #marker_ident>), + quote!(impl dioxus_core::SuperInto<#arg_type, #marker_ident>), // If this looks like a signal type, we automatically convert it with SuperInto and use the props struct as the owner - quote!(with_owner(self.owner.clone(), move || dioxus_core::prelude::SuperInto::super_into(#field_name))), + quote!(dioxus_core::with_owner(self.owner.clone(), move || dioxus_core::SuperInto::super_into(#field_name))), ) } else if field.builder_attr.auto_into || field.builder_attr.strip_option { let marker_ident = syn::Ident::new("__Marker", proc_macro2::Span::call_site()); marker = Some(marker_ident.clone()); ( - quote!(impl dioxus_core::prelude::SuperInto<#arg_type, #marker_ident>), - quote!(dioxus_core::prelude::SuperInto::super_into(#field_name)), + quote!(impl dioxus_core::SuperInto<#arg_type, #marker_ident>), + quote!(dioxus_core::SuperInto::super_into(#field_name)), ) } else if field.builder_attr.from_displayable { ( @@ -1419,24 +1416,27 @@ Finally, call `.build()` to create the instance of `{name}`. // If this is a signal type, we use super_into and the props struct as the owner let is_child_owned_type = child_owned_type(field.ty); - let mut into = quote!{}; - if !is_default { + let body = if !is_default { if is_child_owned_type { - into = quote!{ .super_into() } + quote!{ dioxus_core::SuperInto::super_into(#default) } } else if field.builder_attr.auto_into { - into = quote!{ .into() } + quote!{ (#default).into() } } else if field.builder_attr.auto_to_string { - into = quote!{ .to_string() } + quote!{ (#default).to_string() } + } else { + default.to_token_stream() } - } + } else { + default.to_token_stream() + }; if field.builder_attr.skip { - quote!(let #name = #default #into;) + quote!(let #name = #body;) } else if is_child_owned_type { - quote!(let #name = #helper_trait_name::into_value(#name, || with_owner(self.owner.clone(), move || (#default) #into));) + quote!(let #name = #helper_trait_name::into_value(#name, || dioxus_core::with_owner(self.owner.clone(), move || #body));) } else { - quote!(let #name = #helper_trait_name::into_value(#name, || #default #into);) + quote!(let #name = #helper_trait_name::into_value(#name, || #body);) } } else { quote!(let #name = #name.0;) @@ -1484,15 +1484,15 @@ Finally, call `.build()` to create the instance of `{name}`. /// Create a component from the props. pub fn into_vcomponent( self, - render_fn: impl dioxus_core::prelude::ComponentFunction<#original_name #ty_generics, M>, + render_fn: impl dioxus_core::ComponentFunction<#original_name #ty_generics, M>, ) -> dioxus_core::VComponent { - use dioxus_core::prelude::ComponentFunction; + use dioxus_core::ComponentFunction; let component_name = ::std::any::type_name_of_val(&render_fn); dioxus_core::VComponent::new(move |wrapper: Self| render_fn.rebuild(wrapper.inner), self, component_name) } } - impl #original_impl_generics dioxus_core::prelude::Properties for #name #ty_generics #where_clause { + impl #original_impl_generics dioxus_core::Properties for #name #ty_generics #where_clause { type Builder = (); fn builder() -> Self::Builder { unreachable!() @@ -1742,7 +1742,7 @@ fn child_owned_type(ty: &Type) -> bool { fn looks_like_signal_type(ty: &Type) -> bool { match extract_base_type_without_generics(ty) { Some(path_without_generics) => { - path_without_generics == parse_quote!(dioxus_core::prelude::ReadOnlySignal) + path_without_generics == parse_quote!(dioxus_core::ReadOnlySignal) || path_without_generics == parse_quote!(prelude::ReadOnlySignal) || path_without_generics == parse_quote!(ReadOnlySignal) } @@ -1754,10 +1754,10 @@ fn looks_like_callback_type(ty: &Type) -> bool { let type_without_option = remove_option_wrapper(ty.clone()); match extract_base_type_without_generics(&type_without_option) { Some(path_without_generics) => { - path_without_generics == parse_quote!(dioxus_core::prelude::EventHandler) + path_without_generics == parse_quote!(dioxus_core::EventHandler) || path_without_generics == parse_quote!(prelude::EventHandler) || path_without_generics == parse_quote!(EventHandler) - || path_without_generics == parse_quote!(dioxus_core::prelude::Callback) + || path_without_generics == parse_quote!(dioxus_core::Callback) || path_without_generics == parse_quote!(prelude::Callback) || path_without_generics == parse_quote!(Callback) } diff --git a/packages/core-macro/tests/values_memoize_in_place.rs b/packages/core-macro/tests/values_memoize_in_place.rs index d29f624b2..edfb6afc0 100644 --- a/packages/core-macro/tests/values_memoize_in_place.rs +++ b/packages/core-macro/tests/values_memoize_in_place.rs @@ -1,4 +1,7 @@ -use dioxus::prelude::*; +use dioxus::{ + core::{generation, needs_update}, + prelude::*, +}; use dioxus_core::ElementId; use std::{any::Any, rc::Rc}; @@ -136,6 +139,8 @@ fn TakesSignal(sig: ReadOnlySignal, number: usize) -> Element { // Regression test for https://github.com/DioxusLabs/dioxus/issues/2582 #[test] fn spreads_memorize_in_place() { + use dioxus_core::Properties; + #[derive(Props, Clone, PartialEq)] struct CompProps { #[props(extends = GlobalAttributes)] diff --git a/packages/core/README.md b/packages/core/README.md index c7a7e0526..37790897e 100644 --- a/packages/core/README.md +++ b/packages/core/README.md @@ -4,8 +4,7 @@ ```rust, no_run # tokio::runtime::Runtime::new().unwrap().block_on(async { -use dioxus_core::prelude::*; -use dioxus_core::*; +use dioxus_core::{VirtualDom, Event, Element, Mutations}; let mut vdom = VirtualDom::new(app); let real_dom = SomeRenderer::new(); diff --git a/packages/core/src/diff/component.rs b/packages/core/src/diff/component.rs index 78a54782c..ceea6db7f 100644 --- a/packages/core/src/diff/component.rs +++ b/packages/core/src/diff/component.rs @@ -10,10 +10,9 @@ use crate::{ VComponent, WriteMutations, }, nodes::{AsVNode, VNode}, - prelude::SuspenseContext, scopes::ScopeId, virtual_dom::VirtualDom, - Element, + Element, SuspenseContext, }; impl VirtualDom { diff --git a/packages/core/src/events.rs b/packages/core/src/events.rs index 4c6d173a3..f788a0ab8 100644 --- a/packages/core/src/events.rs +++ b/packages/core/src/events.rs @@ -1,6 +1,4 @@ -use crate::{ - prelude::current_scope_id, properties::SuperFrom, runtime::RuntimeGuard, Runtime, ScopeId, -}; +use crate::{current_scope_id, properties::SuperFrom, runtime::RuntimeGuard, Runtime, ScopeId}; use generational_box::GenerationalBox; use std::{any::Any, cell::RefCell, marker::PhantomData, panic::Location, rc::Rc}; @@ -337,7 +335,7 @@ impl SpawnIfAsync<(), Ret> for Ret { pub struct AsyncMarker; impl + 'static> SpawnIfAsync for F { fn spawn(self) { - crate::prelude::spawn(async move { + crate::spawn(async move { self.await; }); } @@ -353,9 +351,9 @@ where { #[inline] fn spawn(self) { - crate::prelude::spawn(async move { + crate::spawn(async move { if let Err(err) = self.await { - crate::prelude::throw_error(err) + crate::throw_error(err) } }); } @@ -366,7 +364,7 @@ impl SpawnIfAsync<()> for crate::Result<()> { #[inline] fn spawn(self) { if let Err(err) = self { - crate::prelude::throw_error(err) + crate::throw_error(err) } } } diff --git a/packages/core/src/global_context.rs b/packages/core/src/global_context.rs index 80dd2af68..af43a4065 100644 --- a/packages/core/src/global_context.rs +++ b/packages/core/src/global_context.rs @@ -1,6 +1,8 @@ -use crate::prelude::SuspenseContext; use crate::runtime::RuntimeError; -use crate::{innerlude::SuspendedFuture, runtime::Runtime, CapturedError, Element, ScopeId, Task}; +use crate::{ + innerlude::SuspendedFuture, runtime::Runtime, CapturedError, Element, ScopeId, SuspenseContext, + Task, +}; use std::future::Future; use std::sync::Arc; @@ -18,7 +20,7 @@ pub fn vdom_is_rendering() -> bool { Runtime::with(|rt| rt.rendering.get()).unwrap_or_default() } -/// Throw a [`CapturedError`] into the current scope. The error will bubble up to the nearest [`crate::prelude::ErrorBoundary()`] or the root of the app. +/// Throw a [`CapturedError`] into the current scope. The error will bubble up to the nearest [`crate::ErrorBoundary()`] or the root of the app. /// /// # Examples /// ```rust, no_run diff --git a/packages/core/src/lib.rs b/packages/core/src/lib.rs index 17a3ca3a5..e851915ee 100644 --- a/packages/core/src/lib.rs +++ b/packages/core/src/lib.rs @@ -77,32 +77,20 @@ pub(crate) mod innerlude { } pub use crate::innerlude::{ - fc_to_builder, generation, schedule_update, schedule_update_any, use_hook, vdom_is_rendering, - AnyValue, Attribute, AttributeValue, CapturedError, Component, ComponentFunction, DynamicNode, - Element, ElementId, Event, Fragment, HasAttributes, IntoDynNode, LaunchConfig, - ListenerCallback, MarkerWrapper, Mutation, Mutations, NoOpMutations, Ok, Properties, Result, - Runtime, ScopeId, ScopeState, SpawnIfAsync, Task, Template, TemplateAttribute, TemplateNode, - VComponent, VNode, VNodeInner, VPlaceholder, VText, VirtualDom, WriteMutations, + consume_context, consume_context_from_scope, current_owner, current_scope_id, fc_to_builder, + force_all_dirty, generation, has_context, needs_update, needs_update_any, parent_scope, + provide_context, provide_error_boundary, provide_root_context, queue_effect, remove_future, + schedule_update, schedule_update_any, spawn, spawn_forever, spawn_isomorphic, suspend, + suspense_context, throw_error, try_consume_context, use_after_render, use_before_render, + use_drop, use_hook, use_hook_with_cleanup, vdom_is_rendering, with_owner, AnyValue, Attribute, + AttributeValue, Callback, CapturedError, Component, ComponentFunction, Context, DynamicNode, + Element, ElementId, ErrorBoundary, ErrorContext, Event, EventHandler, Fragment, HasAttributes, + IntoAttributeValue, IntoDynNode, LaunchConfig, ListenerCallback, MarkerWrapper, Mutation, + Mutations, NoOpMutations, Ok, OptionStringFromMarker, Properties, ReactiveContext, RenderError, + Result, Runtime, RuntimeGuard, ScopeId, ScopeState, SpawnIfAsync, SuperFrom, SuperInto, + SuspendedFuture, SuspenseBoundary, SuspenseBoundaryProps, SuspenseContext, SuspenseExtension, + Task, Template, TemplateAttribute, TemplateNode, VComponent, VNode, VNodeInner, VPlaceholder, + VText, VirtualDom, WriteMutations, }; -/// The purpose of this module is to alleviate imports of many common types -/// -/// This includes types like [`Element`], and [`Component`]. -pub mod prelude { - pub use crate::innerlude::{ - consume_context, consume_context_from_scope, current_owner, current_scope_id, - fc_to_builder, force_all_dirty, generation, has_context, needs_update, needs_update_any, - parent_scope, provide_context, provide_error_boundary, provide_root_context, queue_effect, - remove_future, spawn, spawn_forever, spawn_isomorphic, suspend, suspense_context, - throw_error, try_consume_context, use_after_render, use_before_render, use_drop, use_hook, - use_hook_with_cleanup, with_owner, AnyValue, Attribute, Callback, Component, - ComponentFunction, Context, Element, ErrorBoundary, ErrorContext, Event, EventHandler, - Fragment, HasAttributes, IntoAttributeValue, IntoDynNode, OptionStringFromMarker, - Properties, ReactiveContext, RenderError, Runtime, RuntimeGuard, ScopeId, ScopeState, - SuperFrom, SuperInto, SuspendedFuture, SuspenseBoundary, SuspenseBoundaryProps, - SuspenseContext, SuspenseExtension, Task, Template, TemplateAttribute, TemplateNode, VNode, - VNodeInner, VirtualDom, - }; -} - pub use const_format; diff --git a/packages/core/src/nodes.rs b/packages/core/src/nodes.rs index fea7d7762..ea2bb35f8 100644 --- a/packages/core/src/nodes.rs +++ b/packages/core/src/nodes.rs @@ -1,15 +1,12 @@ -use dioxus_core_types::DioxusFormattable; - -use crate::events::ListenerCallback; -use crate::innerlude::VProps; -use crate::prelude::RenderError; -use crate::{any_props::BoxedAnyProps, innerlude::ScopeState}; -use crate::{arena::ElementId, Element, Event}; use crate::{ - innerlude::{ElementRef, MountId}, + any_props::BoxedAnyProps, + arena::ElementId, + events::ListenerCallback, + innerlude::{ElementRef, MountId, ScopeState, VProps}, properties::ComponentFunction, + Element, Event, Properties, RenderError, ScopeId, VirtualDom, }; -use crate::{Properties, ScopeId, VirtualDom}; +use dioxus_core_types::DioxusFormattable; use std::ops::Deref; use std::rc::Rc; use std::vec; diff --git a/packages/core/src/reactive_context.rs b/packages/core/src/reactive_context.rs index 1f8ea2b4d..83ac2e1e1 100644 --- a/packages/core/src/reactive_context.rs +++ b/packages/core/src/reactive_context.rs @@ -1,9 +1,4 @@ -use crate::{ - prelude::{current_scope_id, ScopeId}, - scope_context::Scope, - tasks::SchedulerMsg, - Runtime, -}; +use crate::{current_scope_id, scope_context::Scope, tasks::SchedulerMsg, Runtime, ScopeId}; use futures_channel::mpsc::UnboundedReceiver; use generational_box::{BorrowMutError, GenerationalBox, SyncStorage}; use std::{ diff --git a/packages/core/src/root_wrapper.rs b/packages/core/src/root_wrapper.rs index 4dabfa0b2..c5da7b4d3 100644 --- a/packages/core/src/root_wrapper.rs +++ b/packages/core/src/root_wrapper.rs @@ -1,4 +1,7 @@ -use crate::{prelude::*, properties::RootProps, DynamicNode, VComponent}; +use crate::{ + fc_to_builder, properties::RootProps, DynamicNode, Element, ErrorBoundary, Properties, + SuspenseBoundary, Template, TemplateNode, VComponent, VNode, +}; // We wrap the root scope in a component that renders it inside a default ErrorBoundary and SuspenseBoundary #[allow(non_snake_case)] diff --git a/packages/core/src/scope_arena.rs b/packages/core/src/scope_arena.rs index 7412966b3..a900c459c 100644 --- a/packages/core/src/scope_arena.rs +++ b/packages/core/src/scope_arena.rs @@ -1,13 +1,11 @@ -use crate::innerlude::{throw_error, RenderError, ScopeOrder}; -use crate::nodes::AsVNode; -use crate::prelude::ReactiveContext; -use crate::scope_context::SuspenseLocation; use crate::{ any_props::{AnyProps, BoxedAnyProps}, - innerlude::ScopeState, - scope_context::Scope, + innerlude::{throw_error, RenderError, ScopeOrder, ScopeState}, + nodes::AsVNode, + scope_context::{Scope, SuspenseLocation}, scopes::ScopeId, virtual_dom::VirtualDom, + ReactiveContext, }; use crate::{Element, VNode}; diff --git a/packages/core/src/scope_context.rs b/packages/core/src/scope_context.rs index 6631966ec..8eb96e937 100644 --- a/packages/core/src/scope_context.rs +++ b/packages/core/src/scope_context.rs @@ -1,8 +1,7 @@ -use crate::runtime::RuntimeError; -use crate::{innerlude::SchedulerMsg, Runtime, ScopeId, Task}; use crate::{ - innerlude::{throw_into, CapturedError}, - prelude::SuspenseContext, + innerlude::{throw_into, CapturedError, SchedulerMsg, SuspenseContext}, + runtime::RuntimeError, + Runtime, ScopeId, Task, }; use generational_box::{AnyStorage, Owner}; use rustc_hash::FxHashSet; @@ -159,7 +158,7 @@ impl Scope { /// Schedule an update for any component given its [`ScopeId`]. /// - /// A component's [`ScopeId`] can be obtained from `use_hook` or the [`current_scope_id`](crate::prelude::current_scope_id) method. + /// A component's [`ScopeId`] can be obtained from `use_hook` or the [`current_scope_id`](crate::current_scope_id) method. /// /// This method should be used when you want to schedule an update for a component. /// @@ -612,7 +611,7 @@ impl ScopeId { .on_scope(self, f) } - /// Throw a [`CapturedError`] into a scope. The error will bubble up to the nearest [`ErrorBoundary`](crate::prelude::ErrorBoundary) or the root of the app. + /// Throw a [`CapturedError`] into a scope. The error will bubble up to the nearest [`ErrorBoundary`](crate::ErrorBoundary) or the root of the app. /// /// # Examples /// ```rust, no_run diff --git a/packages/core/src/scopes.rs b/packages/core/src/scopes.rs index f625dc89b..6d2807841 100644 --- a/packages/core/src/scopes.rs +++ b/packages/core/src/scopes.rs @@ -33,7 +33,7 @@ impl std::fmt::Debug for ScopeId { } impl ScopeId { - /// The ScopeId of the main scope passed into [`crate::prelude::VirtualDom::new`]. + /// The ScopeId of the main scope passed into [`crate::VirtualDom::new`]. /// /// This scope will last for the entire duration of your app, making it convenient for long-lived state /// that is created dynamically somewhere down the component tree. @@ -51,7 +51,7 @@ impl ScopeId { pub const APP: ScopeId = ScopeId(3); /// The ScopeId of the topmost scope in the tree. - /// This will be higher up in the tree than [`ScopeId::APP`] because dioxus inserts a default [`crate::prelude::SuspenseBoundary`] and [`crate::prelude::ErrorBoundary`] at the root of the tree. + /// This will be higher up in the tree than [`ScopeId::APP`] because dioxus inserts a default [`crate::SuspenseBoundary`] and [`crate::ErrorBoundary`] at the root of the tree. // ScopeId(0) is the root scope wrapper pub const ROOT: ScopeId = ScopeId(0); diff --git a/packages/core/tests/attr_cleanup.rs b/packages/core/tests/attr_cleanup.rs index 69ecd0462..0ea1e1af8 100644 --- a/packages/core/tests/attr_cleanup.rs +++ b/packages/core/tests/attr_cleanup.rs @@ -2,8 +2,8 @@ //! //! This tests to ensure we clean it up -use dioxus::dioxus_core::{ElementId, Mutation::*}; use dioxus::prelude::*; +use dioxus_core::{generation, ElementId, IntoAttributeValue, Mutation::*}; #[test] fn attrs_cycle() { diff --git a/packages/core/tests/attributes_pass.rs b/packages/core/tests/attributes_pass.rs index 6f107e047..49b4080d3 100644 --- a/packages/core/tests/attributes_pass.rs +++ b/packages/core/tests/attributes_pass.rs @@ -1,4 +1,5 @@ use dioxus::prelude::*; +use dioxus_core::TemplateNode; /// Make sure that rsx! is parsing templates and their attributes properly #[test] diff --git a/packages/core/tests/bubble_error.rs b/packages/core/tests/bubble_error.rs index 00da26f2d..814c293f6 100644 --- a/packages/core/tests/bubble_error.rs +++ b/packages/core/tests/bubble_error.rs @@ -1,6 +1,7 @@ //! we should properly bubble up errors from components use dioxus::prelude::*; +use dioxus_core::generation; fn app() -> Element { let raw = match generation() % 2 { diff --git a/packages/core/tests/children_drop_futures.rs b/packages/core/tests/children_drop_futures.rs index c74683ac7..afaa300c7 100644 --- a/packages/core/tests/children_drop_futures.rs +++ b/packages/core/tests/children_drop_futures.rs @@ -3,6 +3,7 @@ use std::{sync::atomic::AtomicUsize, time::Duration}; use dioxus::prelude::*; +use dioxus_core::generation; #[tokio::test] async fn child_futures_drop_first() { diff --git a/packages/core/tests/context_api.rs b/packages/core/tests/context_api.rs index 122b9f7f1..e00dfe2e5 100644 --- a/packages/core/tests/context_api.rs +++ b/packages/core/tests/context_api.rs @@ -1,5 +1,6 @@ use dioxus::dioxus_core::{ElementId, Mutation::*}; use dioxus::prelude::*; +use dioxus_core::generation; #[test] fn state_shares() { diff --git a/packages/core/tests/cycle.rs b/packages/core/tests/cycle.rs index e96743242..2888d6262 100644 --- a/packages/core/tests/cycle.rs +++ b/packages/core/tests/cycle.rs @@ -1,5 +1,6 @@ use dioxus::dioxus_core::{ElementId, Mutation::*}; use dioxus::prelude::*; +use dioxus_core::generation; /// As we clean up old templates, the ID for the node should cycle #[test] diff --git a/packages/core/tests/diff_dynamic_node.rs b/packages/core/tests/diff_dynamic_node.rs index 0453b5b34..ebf45af14 100644 --- a/packages/core/tests/diff_dynamic_node.rs +++ b/packages/core/tests/diff_dynamic_node.rs @@ -1,5 +1,6 @@ use dioxus::dioxus_core::{ElementId, Mutation::*}; use dioxus::prelude::*; +use dioxus_core::generation; use pretty_assertions::assert_eq; #[test] diff --git a/packages/core/tests/diff_element.rs b/packages/core/tests/diff_element.rs index 1f2c9bde8..b2735bd37 100644 --- a/packages/core/tests/diff_element.rs +++ b/packages/core/tests/diff_element.rs @@ -1,6 +1,7 @@ use dioxus::dioxus_core::Mutation::*; use dioxus::dioxus_core::{AttributeValue, ElementId, NoOpMutations}; use dioxus::prelude::*; +use dioxus_core::generation; #[test] fn text_diff() { diff --git a/packages/core/tests/diff_keyed_list.rs b/packages/core/tests/diff_keyed_list.rs index 81e30ecb6..b2b46f4d1 100644 --- a/packages/core/tests/diff_keyed_list.rs +++ b/packages/core/tests/diff_keyed_list.rs @@ -6,6 +6,7 @@ use dioxus::dioxus_core::{ElementId, Mutation::*}; use dioxus::prelude::*; +use dioxus_core::generation; /// Should result in moves, but not removals or additions #[test] diff --git a/packages/core/tests/diff_unkeyed_list.rs b/packages/core/tests/diff_unkeyed_list.rs index 9789a6151..fb3246118 100644 --- a/packages/core/tests/diff_unkeyed_list.rs +++ b/packages/core/tests/diff_unkeyed_list.rs @@ -2,7 +2,7 @@ use std::collections::HashSet; use dioxus::dioxus_core::{ElementId, Mutation::*}; use dioxus::prelude::*; -use dioxus_core::Mutation; +use dioxus_core::{generation, Mutation}; use pretty_assertions::assert_eq; #[test] diff --git a/packages/core/tests/kitchen_sink.rs b/packages/core/tests/kitchen_sink.rs index aa61612e8..6cd30ec49 100644 --- a/packages/core/tests/kitchen_sink.rs +++ b/packages/core/tests/kitchen_sink.rs @@ -1,5 +1,6 @@ use dioxus::dioxus_core::{ElementId, Mutation}; use dioxus::prelude::*; +use dioxus_core::IntoAttributeValue; use pretty_assertions::assert_eq; fn basic_syntax_is_a_template() -> Element { diff --git a/packages/core/tests/miri_simple.rs b/packages/core/tests/miri_simple.rs index a77bcd70a..8d7f6f343 100644 --- a/packages/core/tests/miri_simple.rs +++ b/packages/core/tests/miri_simple.rs @@ -1,4 +1,5 @@ use dioxus::prelude::*; +use dioxus_core::generation; #[test] fn app_drops() { diff --git a/packages/core/tests/miri_stress.rs b/packages/core/tests/miri_stress.rs index 36d1b5618..5659395ac 100644 --- a/packages/core/tests/miri_stress.rs +++ b/packages/core/tests/miri_stress.rs @@ -3,7 +3,7 @@ use std::rc::Rc; use dioxus::prelude::*; -use dioxus_core::NoOpMutations; +use dioxus_core::{generation, NoOpMutations}; /// This test checks that we should release all memory used by the virtualdom when it exits. /// diff --git a/packages/core/tests/suspense.rs b/packages/core/tests/suspense.rs index 9beb39655..ecf3035df 100644 --- a/packages/core/tests/suspense.rs +++ b/packages/core/tests/suspense.rs @@ -1,5 +1,5 @@ use dioxus::prelude::*; -use dioxus_core::{AttributeValue, ElementId, Mutation}; +use dioxus_core::{generation, AttributeValue, ElementId, Mutation}; use pretty_assertions::assert_eq; use std::future::poll_fn; use std::task::Poll; diff --git a/packages/core/tests/task.rs b/packages/core/tests/task.rs index d430dafbd..10de4bf53 100644 --- a/packages/core/tests/task.rs +++ b/packages/core/tests/task.rs @@ -3,6 +3,7 @@ use std::{sync::atomic::AtomicUsize, time::Duration}; use dioxus::prelude::*; +use dioxus_core::{generation, needs_update, spawn_forever}; async fn run_vdom(app: fn() -> Element) { let mut dom = VirtualDom::new(app); diff --git a/packages/core/tests/tracing.rs b/packages/core/tests/tracing.rs index e0791be38..37f4c547f 100644 --- a/packages/core/tests/tracing.rs +++ b/packages/core/tests/tracing.rs @@ -1,6 +1,6 @@ use dioxus::html::SerializedHtmlEventConverter; use dioxus::prelude::*; -use dioxus_core::ElementId; +use dioxus_core::{ElementId, Event}; use std::{any::Any, rc::Rc}; use tracing_fluent_assertions::{AssertionRegistry, AssertionsLayer}; use tracing_subscriber::{layer::SubscriberExt, Registry}; diff --git a/packages/desktop/src/assets.rs b/packages/desktop/src/assets.rs index 8dfcb6537..a0abf5ca1 100644 --- a/packages/desktop/src/assets.rs +++ b/packages/desktop/src/assets.rs @@ -1,4 +1,4 @@ -use dioxus_core::prelude::Callback; +use dioxus_core::Callback; use rustc_hash::FxHashMap; use std::{cell::RefCell, rc::Rc}; use wry::{http::Request, RequestAsyncResponder}; diff --git a/packages/desktop/src/desktop_context.rs b/packages/desktop/src/desktop_context.rs index aaf60000f..8684bb034 100644 --- a/packages/desktop/src/desktop_context.rs +++ b/packages/desktop/src/desktop_context.rs @@ -8,7 +8,7 @@ use crate::{ webview::PendingWebview, AssetRequest, Config, WindowCloseBehaviour, WryEventHandler, }; -use dioxus_core::{prelude::Callback, VirtualDom}; +use dioxus_core::{Callback, VirtualDom}; use std::{ cell::Cell, future::{Future, IntoFuture}, @@ -31,7 +31,7 @@ use tao::platform::ios::WindowExtIOS; /// /// This function will panic if it is called outside of the context of a Dioxus App. pub fn window() -> DesktopContext { - dioxus_core::prelude::consume_context() + dioxus_core::consume_context() } /// A handle to the [`DesktopService`] that can be passed around. diff --git a/packages/desktop/src/document.rs b/packages/desktop/src/document.rs index 813623de9..ac632cf57 100644 --- a/packages/desktop/src/document.rs +++ b/packages/desktop/src/document.rs @@ -1,5 +1,5 @@ use crate::{query::Query, DesktopContext, WeakDesktopContext}; -use dioxus_core::prelude::queue_effect; +use dioxus_core::queue_effect; use dioxus_document::{ create_element_in_head, Document, Eval, EvalError, Evaluator, LinkProps, MetaProps, ScriptProps, StyleProps, diff --git a/packages/desktop/src/file_upload.rs b/packages/desktop/src/file_upload.rs index 94c88d6a3..fcf4cc8d1 100644 --- a/packages/desktop/src/file_upload.rs +++ b/packages/desktop/src/file_upload.rs @@ -11,8 +11,8 @@ use dioxus_html::{ point_interaction::{ InteractionElementOffset, InteractionLocation, ModifiersInteraction, PointerInteraction, }, - prelude::{SerializedMouseData, SerializedPointInteraction}, - FileEngine, HasDragData, HasFileData, HasFormData, HasMouseData, + FileEngine, HasDragData, HasFileData, HasFormData, HasMouseData, SerializedMouseData, + SerializedPointInteraction, }; use serde::Deserialize; @@ -233,7 +233,7 @@ impl InteractionElementOffset for DesktopFileDragEvent { } impl ModifiersInteraction for DesktopFileDragEvent { - fn modifiers(&self) -> dioxus_html::prelude::Modifiers { + fn modifiers(&self) -> dioxus_html::Modifiers { self.mouse.modifiers() } } diff --git a/packages/desktop/src/hooks.rs b/packages/desktop/src/hooks.rs index 0b752d3a7..c6fd33ad6 100644 --- a/packages/desktop/src/hooks.rs +++ b/packages/desktop/src/hooks.rs @@ -4,10 +4,7 @@ use crate::{ assets::*, ipc::UserWindowEvent, shortcut::IntoAccelerator, window, DesktopContext, HotKeyState, ShortcutHandle, ShortcutRegistryError, WryEventHandler, }; -use dioxus_core::{ - prelude::{consume_context, use_hook_with_cleanup}, - use_hook, Runtime, -}; +use dioxus_core::{consume_context, use_hook, use_hook_with_cleanup, Runtime}; use dioxus_hooks::use_callback; use tao::{event::Event, event_loop::EventLoopWindowTarget}; @@ -22,7 +19,7 @@ pub fn use_window() -> DesktopContext { pub fn use_wry_event_handler( mut handler: impl FnMut(&Event, &EventLoopWindowTarget) + 'static, ) -> WryEventHandler { - use dioxus_core::prelude::current_scope_id; + use dioxus_core::current_scope_id; // Capture the current runtime and scope ID. let runtime = Runtime::current().unwrap(); diff --git a/packages/desktop/src/trayicon.rs b/packages/desktop/src/trayicon.rs index 8e16d424f..8cc65f7d2 100644 --- a/packages/desktop/src/trayicon.rs +++ b/packages/desktop/src/trayicon.rs @@ -1,9 +1,6 @@ //! tray icon -use dioxus_core::{ - prelude::{provide_context, try_consume_context}, - use_hook, -}; +use dioxus_core::{provide_context, try_consume_context, use_hook}; #[cfg(not(any(target_os = "ios", target_os = "android")))] pub use tray_icon::*; diff --git a/packages/devtools/src/lib.rs b/packages/devtools/src/lib.rs index daf26bdf2..833aedd06 100644 --- a/packages/devtools/src/lib.rs +++ b/packages/devtools/src/lib.rs @@ -44,7 +44,7 @@ pub fn try_apply_changes(dom: &VirtualDom, msg: &HotReloadMsg) -> Result<(), Pat if msg.for_pid == our_pid { unsafe { subsecond::apply_patch(jump_table) }?; - dioxus_core::prelude::force_all_dirty(); + dioxus_core::force_all_dirty(); ctx.clear::>>(); } } diff --git a/packages/dioxus-lib/src/lib.rs b/packages/dioxus-lib/src/lib.rs index a9766f7ee..c5a3920db 100644 --- a/packages/dioxus-lib/src/lib.rs +++ b/packages/dioxus-lib/src/lib.rs @@ -3,6 +3,8 @@ #![doc(html_logo_url = "https://avatars.githubusercontent.com/u/79236386")] #![doc(html_favicon_url = "https://avatars.githubusercontent.com/u/79236386")] +pub use dioxus_core as core; + #[cfg(feature = "hooks")] pub use dioxus_hooks as hooks; @@ -10,8 +12,8 @@ pub use dioxus_hooks as hooks; pub use dioxus_signals as signals; pub mod events { - #[cfg(feature = "html")] - pub use dioxus_html::prelude::*; + // #[cfg(feature = "html")] + // pub use dioxus_html::prelude::*; } #[cfg(feature = "html")] @@ -43,8 +45,6 @@ pub mod prelude { #[cfg(feature = "signals")] pub use dioxus_signals::*; - pub use dioxus_core::prelude::*; - #[cfg(feature = "macro")] #[allow(deprecated)] pub use dioxus_core_macro::{component, rsx, Props}; @@ -56,7 +56,14 @@ pub mod prelude { pub use dioxus_html as dioxus_elements; #[cfg(feature = "html")] - pub use dioxus_elements::{global_attributes, prelude::*, svg_attributes}; + pub use dioxus_elements::{events::*, global_attributes, svg_attributes, traits::*}; pub use dioxus_core; + + pub use dioxus_core::{ + consume_context, provide_context, spawn, suspend, try_consume_context, use_hook, Attribute, + Callback, Component, Context, Element, ErrorBoundary, ErrorContext, Event, EventHandler, + Fragment, HasAttributes, IntoDynNode, RenderError, ScopeId, SuspenseBoundary, + SuspenseContext, SuspenseExtension, VNode, VirtualDom, + }; } diff --git a/packages/dioxus/src/launch.rs b/packages/dioxus/src/launch.rs index efb8e2e97..4b6464ad7 100644 --- a/packages/dioxus/src/launch.rs +++ b/packages/dioxus/src/launch.rs @@ -1,7 +1,7 @@ #![allow(clippy::new_without_default)] #![allow(unused)] use dioxus_config_macro::*; -use dioxus_core::LaunchConfig; +use dioxus_core::{Element, LaunchConfig}; use std::any::Any; use crate::prelude::*; @@ -299,7 +299,7 @@ impl LaunchBuilder { // Set any flags if we're running under fullstack #[cfg(feature = "fullstack")] { - use dioxus_fullstack::prelude::server_fn::client::{get_server_url, set_server_url}; + use dioxus_fullstack::server_fn::client::{get_server_url, set_server_url}; // Make sure to set the server_fn endpoint if the user specified the fullstack feature // We only set this on native targets diff --git a/packages/dioxus/src/lib.rs b/packages/dioxus/src/lib.rs index b485c9a5d..5a53a73ec 100644 --- a/packages/dioxus/src/lib.rs +++ b/packages/dioxus/src/lib.rs @@ -32,6 +32,8 @@ pub use dioxus_core::{CapturedError, Ok, Result}; #[cfg_attr(docsrs, doc(cfg(feature = "launch")))] mod launch; +pub use dioxus_core as core; + #[cfg(feature = "launch")] #[cfg_attr(docsrs, doc(cfg(feature = "launch")))] pub use crate::launch::*; @@ -47,7 +49,7 @@ pub use dioxus_signals as signals; pub mod events { #[cfg(feature = "html")] #[cfg_attr(docsrs, doc(cfg(feature = "html")))] - pub use dioxus_html::prelude::*; + pub use dioxus_html::events::*; } #[cfg(feature = "document")] @@ -143,8 +145,6 @@ pub mod prelude { #[cfg_attr(docsrs, doc(cfg(feature = "signals")))] pub use dioxus_signals::*; - pub use dioxus_core::prelude::*; - #[cfg(feature = "macro")] #[cfg_attr(docsrs, doc(cfg(feature = "macro")))] #[allow(deprecated)] @@ -160,7 +160,10 @@ pub mod prelude { #[cfg(feature = "html")] #[cfg_attr(docsrs, doc(cfg(feature = "html")))] - pub use dioxus_elements::{global_attributes, prelude::*, svg_attributes}; + pub use dioxus_elements::{ + events::*, extensions::*, global_attributes, keyboard_types, svg_attributes, traits::*, + Code, GlobalAttributesExtension, Key, Location, Modifiers, SvgAttributesExtension, + }; #[cfg(feature = "devtools")] #[cfg_attr(docsrs, doc(cfg(feature = "devtools")))] @@ -170,7 +173,15 @@ pub mod prelude { #[cfg(feature = "fullstack")] #[cfg_attr(docsrs, doc(cfg(feature = "fullstack")))] - pub use dioxus_fullstack::prelude::*; + pub use dioxus_fullstack::{ + server, server_fn, use_server_cached, use_server_future, ServerFnError, ServerFnResult, + }; + + #[cfg(feature = "server")] + #[cfg_attr(docsrs, doc(cfg(feature = "server")))] + pub use dioxus_server::{ + extract, DioxusRouterExt, DioxusRouterFnExt, FromContext, ServeConfig, + }; #[cfg(feature = "router")] #[cfg_attr(docsrs, doc(cfg(feature = "router")))] @@ -178,7 +189,10 @@ pub mod prelude { #[cfg(feature = "router")] #[cfg_attr(docsrs, doc(cfg(feature = "router")))] - pub use dioxus_router::prelude::*; + pub use dioxus_router::{ + hooks::*, navigator, use_navigator, GoBackButton, GoForwardButton, Link, NavigationTarget, + Outlet, Routable, Router, + }; #[cfg(feature = "asset")] #[cfg_attr(docsrs, doc(cfg(feature = "asset")))] @@ -187,4 +201,11 @@ pub mod prelude { #[cfg(feature = "wasm-split")] #[cfg_attr(docsrs, doc(cfg(feature = "wasm-split")))] pub use wasm_splitter as wasm_split; + + pub use dioxus_core::{ + consume_context, provide_context, spawn, suspend, try_consume_context, use_hook, Attribute, + Callback, Component, Context, Element, ErrorBoundary, ErrorContext, Event, EventHandler, + Fragment, HasAttributes, IntoDynNode, RenderError, ScopeId, SuspenseBoundary, + SuspenseContext, SuspenseExtension, VNode, VirtualDom, + }; } diff --git a/packages/document/src/elements/link.rs b/packages/document/src/elements/link.rs index 53a76b239..c0bf4a5ac 100644 --- a/packages/document/src/elements/link.rs +++ b/packages/document/src/elements/link.rs @@ -1,5 +1,6 @@ use super::*; use crate::document; +use dioxus_core::{use_hook, VNode}; use dioxus_html as dioxus_elements; #[non_exhaustive] diff --git a/packages/document/src/elements/meta.rs b/packages/document/src/elements/meta.rs index c54c3dd6e..377730477 100644 --- a/packages/document/src/elements/meta.rs +++ b/packages/document/src/elements/meta.rs @@ -1,5 +1,6 @@ use super::*; use crate::document; +use dioxus_core::{use_hook, VNode}; use dioxus_html as dioxus_elements; #[non_exhaustive] diff --git a/packages/document/src/elements/mod.rs b/packages/document/src/elements/mod.rs index 05753b230..a78c011dc 100644 --- a/packages/document/src/elements/mod.rs +++ b/packages/document/src/elements/mod.rs @@ -2,7 +2,7 @@ use std::{cell::RefCell, collections::HashSet, rc::Rc}; -use dioxus_core::{prelude::*, DynamicNode}; +use dioxus_core::{Attribute, DynamicNode, Element, RenderError, ScopeId, Template, TemplateNode}; use dioxus_core_macro::*; mod link; @@ -23,6 +23,8 @@ pub use title::*; fn use_update_warning(value: &T, name: &'static str) { #[cfg(debug_assertions)] { + use dioxus_core::use_hook; + let cloned_value = value.clone(); let initial = use_hook(move || value.clone()); diff --git a/packages/document/src/elements/script.rs b/packages/document/src/elements/script.rs index e949af95a..e2fb0ba71 100644 --- a/packages/document/src/elements/script.rs +++ b/packages/document/src/elements/script.rs @@ -1,5 +1,6 @@ use super::*; use crate::document; +use dioxus_core::{use_hook, VNode}; use dioxus_html as dioxus_elements; #[non_exhaustive] diff --git a/packages/document/src/elements/style.rs b/packages/document/src/elements/style.rs index d0ef8abc5..fd7e9a845 100644 --- a/packages/document/src/elements/style.rs +++ b/packages/document/src/elements/style.rs @@ -1,5 +1,6 @@ use super::*; use crate::document; +use dioxus_core::{use_hook, VNode}; use dioxus_html as dioxus_elements; #[non_exhaustive] diff --git a/packages/document/src/elements/title.rs b/packages/document/src/elements/title.rs index f73c28433..9233e54fd 100644 --- a/packages/document/src/elements/title.rs +++ b/packages/document/src/elements/title.rs @@ -1,3 +1,5 @@ +use dioxus_core::{use_hook, VNode}; + use crate::document; use super::*; diff --git a/packages/document/src/lib.rs b/packages/document/src/lib.rs index 05429f394..42b033455 100644 --- a/packages/document/src/lib.rs +++ b/packages/document/src/lib.rs @@ -12,7 +12,7 @@ pub use eval::*; /// Get the document provider for the current platform or a no-op provider if the platform doesn't document functionality. pub fn document() -> Rc { - match dioxus_core::prelude::try_consume_context::>() { + match dioxus_core::try_consume_context::>() { Some(document) => document, None => { tracing::error!( diff --git a/packages/fullstack-hooks/src/history.rs b/packages/fullstack-hooks/src/history.rs index 1eac5a62d..fcfa50967 100644 --- a/packages/fullstack-hooks/src/history.rs +++ b/packages/fullstack-hooks/src/history.rs @@ -2,7 +2,7 @@ use std::cell::OnceCell; -use dioxus_core::{prelude::queue_effect, schedule_update}; +use dioxus_core::{queue_effect, schedule_update}; use dioxus_fullstack_protocol::is_hydrating; use dioxus_history::History; diff --git a/packages/fullstack-hooks/src/hooks/server_cached.rs b/packages/fullstack-hooks/src/hooks/server_cached.rs index 06f2e8a20..0c7c85264 100644 --- a/packages/fullstack-hooks/src/hooks/server_cached.rs +++ b/packages/fullstack-hooks/src/hooks/server_cached.rs @@ -1,4 +1,4 @@ -use dioxus_core::prelude::use_hook; +use dioxus_core::use_hook; use dioxus_fullstack_protocol::SerializeContextEntry; use serde::{de::DeserializeOwned, Serialize}; diff --git a/packages/fullstack-hooks/src/hooks/server_future.rs b/packages/fullstack-hooks/src/hooks/server_future.rs index 243dfa4cc..f18a0f9e1 100644 --- a/packages/fullstack-hooks/src/hooks/server_future.rs +++ b/packages/fullstack-hooks/src/hooks/server_future.rs @@ -1,4 +1,4 @@ -use dioxus_core::prelude::{suspend, use_hook, RenderError}; +use dioxus_core::{suspend, use_hook, RenderError}; use dioxus_hooks::*; use dioxus_signals::Readable; use serde::{de::DeserializeOwned, Serialize}; diff --git a/packages/fullstack-hooks/src/lib.rs b/packages/fullstack-hooks/src/lib.rs index 56014bcac..83637de73 100644 --- a/packages/fullstack-hooks/src/lib.rs +++ b/packages/fullstack-hooks/src/lib.rs @@ -5,9 +5,5 @@ pub mod history; mod hooks; mod streaming; -pub mod prelude { - //! A prelude of commonly used items in dioxus-fullstack-hooks. - - pub use crate::hooks::*; - pub use crate::streaming::*; -} +pub use crate::hooks::*; +pub use crate::streaming::*; diff --git a/packages/fullstack-hooks/src/streaming.rs b/packages/fullstack-hooks/src/streaming.rs index 5958d9cd9..da9d90459 100644 --- a/packages/fullstack-hooks/src/streaming.rs +++ b/packages/fullstack-hooks/src/streaming.rs @@ -1,4 +1,4 @@ -use dioxus_core::prelude::try_consume_context; +use dioxus_core::try_consume_context; use dioxus_signals::{Readable, Signal, Writable}; /// The status of the streaming response diff --git a/packages/fullstack-protocol/src/lib.rs b/packages/fullstack-protocol/src/lib.rs index 9294957d4..5f81d1203 100644 --- a/packages/fullstack-protocol/src/lib.rs +++ b/packages/fullstack-protocol/src/lib.rs @@ -174,8 +174,8 @@ pub fn serialize_context() -> HydrationContext { #[cfg(not(feature = "web"))] { // On the server each scope creates the context lazily - dioxus_core::prelude::has_context() - .unwrap_or_else(|| dioxus_core::prelude::provide_context(HydrationContext::default())) + dioxus_core::has_context() + .unwrap_or_else(|| dioxus_core::provide_context(HydrationContext::default())) } } diff --git a/packages/fullstack/src/error.rs b/packages/fullstack/src/error.rs index 4c6d16a5d..b880eae4f 100644 --- a/packages/fullstack/src/error.rs +++ b/packages/fullstack/src/error.rs @@ -4,7 +4,7 @@ use std::{ str::FromStr, }; -use dioxus_lib::prelude::{dioxus_core::CapturedError, RenderError}; +use dioxus_lib::core::{CapturedError, RenderError}; use serde::{de::DeserializeOwned, Serialize}; use server_fn::{ codec::JsonEncoding, diff --git a/packages/fullstack/src/lib.rs b/packages/fullstack/src/lib.rs index 8c0e7843d..d36bae7d5 100644 --- a/packages/fullstack/src/lib.rs +++ b/packages/fullstack/src/lib.rs @@ -12,19 +12,16 @@ mod error; #[cfg(all(feature = "web", feature = "document"))] pub use web::FullstackWebDocument; -#[cfg(feature = "server")] -pub use dioxus_server::*; - pub use dioxus_fullstack_hooks::history::FullstackHistory; -/// A prelude of commonly used items in dioxus-fullstack. -pub mod prelude { - pub use dioxus_fullstack_hooks::prelude::*; - - pub use crate::error::{ServerFnError, ServerFnResult}; - pub use dioxus_server_macro::*; - pub use server_fn::{self, ServerFn as _}; - - #[cfg(feature = "server")] - pub use dioxus_server::prelude::*; -} +pub use crate::error::{ServerFnError, ServerFnResult}; +pub use dioxus_fullstack_hooks::*; +#[cfg(feature = "server")] +pub use dioxus_server::*; +pub use dioxus_server_macro::*; +pub use server_fn::{ + self, client, + client::{get_server_url, set_server_url}, + codec, server, BoxedStream, ContentType, Decodes, Encodes, Format, FormatType, ServerFn as _, + ServerFn, Websocket, +}; diff --git a/packages/history/src/lib.rs b/packages/history/src/lib.rs index 23c33ebfd..d75cc3645 100644 --- a/packages/history/src/lib.rs +++ b/packages/history/src/lib.rs @@ -1,4 +1,4 @@ -use dioxus_core::prelude::{provide_context, provide_root_context}; +use dioxus_core::{provide_context, provide_root_context}; use std::{rc::Rc, sync::Arc}; mod memory; @@ -6,7 +6,7 @@ pub use memory::*; /// Get the history provider for the current platform if the platform doesn't implement a history functionality. pub fn history() -> Rc { - match dioxus_core::prelude::try_consume_context::>() { + match dioxus_core::try_consume_context::>() { Some(history) => history, None => { tracing::error!("Unable to find a history provider in the renderer. Make sure your renderer supports the Router. Falling back to the in-memory history provider."); diff --git a/packages/hooks/src/use_after_suspense_resolved.rs b/packages/hooks/src/use_after_suspense_resolved.rs index 1cbf2510b..bc1551b77 100644 --- a/packages/hooks/src/use_after_suspense_resolved.rs +++ b/packages/hooks/src/use_after_suspense_resolved.rs @@ -1,4 +1,4 @@ -use dioxus_core::{prelude::suspense_context, use_hook}; +use dioxus_core::{suspense_context, use_hook}; /// Run a closure after the suspense boundary this is under is resolved. The /// closure will be run immediately if the suspense boundary is already resolved diff --git a/packages/hooks/src/use_callback.rs b/packages/hooks/src/use_callback.rs index 088a9dc4c..6fd200a6f 100644 --- a/packages/hooks/src/use_callback.rs +++ b/packages/hooks/src/use_callback.rs @@ -1,5 +1,4 @@ -use dioxus_core::prelude::use_hook; -use dioxus_core::prelude::Callback; +use dioxus_core::{use_hook, Callback}; /// Create a callback that's always up to date. Whenever this hook is called the inner callback will be replaced with the new callback but the handle will remain. /// diff --git a/packages/hooks/src/use_context.rs b/packages/hooks/src/use_context.rs index 774f351fa..b0190de19 100644 --- a/packages/hooks/src/use_context.rs +++ b/packages/hooks/src/use_context.rs @@ -1,7 +1,4 @@ -use dioxus_core::{ - prelude::{consume_context, provide_context, try_consume_context}, - use_hook, -}; +use dioxus_core::{consume_context, provide_context, try_consume_context, use_hook}; /// Consume some context in the tree, providing a sharable handle to the value /// diff --git a/packages/hooks/src/use_coroutine.rs b/packages/hooks/src/use_coroutine.rs index b0571efb5..f971df7ce 100644 --- a/packages/hooks/src/use_coroutine.rs +++ b/packages/hooks/src/use_coroutine.rs @@ -1,6 +1,6 @@ use crate::{use_context_provider, use_future, UseFuture}; -use dioxus_core::prelude::{consume_context, use_hook}; use dioxus_core::Task; +use dioxus_core::{consume_context, use_hook}; use dioxus_signals::*; pub use futures_channel::mpsc::{UnboundedReceiver, UnboundedSender}; use std::future::Future; diff --git a/packages/hooks/src/use_effect.rs b/packages/hooks/src/use_effect.rs index e88c2ee52..e47492f58 100644 --- a/packages/hooks/src/use_effect.rs +++ b/packages/hooks/src/use_effect.rs @@ -1,6 +1,6 @@ use std::{cell::Cell, rc::Rc}; -use dioxus_core::prelude::*; +use dioxus_core::*; use futures_util::StreamExt; use crate::use_callback; diff --git a/packages/hooks/src/use_future.rs b/packages/hooks/src/use_future.rs index 5bf314b53..cc3c5e461 100644 --- a/packages/hooks/src/use_future.rs +++ b/packages/hooks/src/use_future.rs @@ -1,6 +1,6 @@ #![allow(missing_docs)] use crate::{use_callback, use_hook_did_run, use_signal}; -use dioxus_core::prelude::*; +use dioxus_core::{use_hook, Callback, Task}; use dioxus_signals::*; use std::future::Future; use std::ops::Deref; @@ -8,7 +8,7 @@ use std::ops::Deref; /// A hook that allows you to spawn a future the first time you render a component. /// /// -/// This future will **not** run on the server. To run a future on the server, you should use [`spawn_isomorphic`] directly. +/// This future will **not** run on the server. To run a future on the server, you should use [`dioxus_core::spawn_isomorphic`] directly. /// /// /// `use_future` **won't return a value**. If you want to return a value from a future, use [`crate::use_resource()`] instead. @@ -50,7 +50,7 @@ where let callback = use_callback(move |_| { let fut = future(); - spawn(async move { + dioxus_core::spawn(async move { state.set(UseFutureState::Pending); fut.await; state.set(UseFutureState::Ready); diff --git a/packages/hooks/src/use_hook_did_run.rs b/packages/hooks/src/use_hook_did_run.rs index 19b8b165d..d65873a15 100644 --- a/packages/hooks/src/use_hook_did_run.rs +++ b/packages/hooks/src/use_hook_did_run.rs @@ -1,4 +1,4 @@ -use dioxus_core::prelude::*; +use dioxus_core::{use_after_render, use_before_render, use_hook}; use dioxus_signals::{CopyValue, Writable}; /// A hook that uses before/after lifecycle hooks to determine if the hook was run diff --git a/packages/hooks/src/use_memo.rs b/packages/hooks/src/use_memo.rs index 8a5b71d38..6c3150478 100644 --- a/packages/hooks/src/use_memo.rs +++ b/packages/hooks/src/use_memo.rs @@ -1,5 +1,5 @@ use crate::use_callback; -use dioxus_core::prelude::*; +use dioxus_core::use_hook; use dioxus_signals::Memo; #[doc = include_str!("../docs/derived_state.md")] diff --git a/packages/hooks/src/use_on_destroy.rs b/packages/hooks/src/use_on_destroy.rs index 429acaeca..2a632a06a 100644 --- a/packages/hooks/src/use_on_destroy.rs +++ b/packages/hooks/src/use_on_destroy.rs @@ -1,4 +1,4 @@ -use dioxus_core::prelude::use_drop; +use dioxus_core::use_drop; #[deprecated(note = "Use `use_drop` instead, which has the same functionality.")] pub fn use_on_unmount(destroy: D) { diff --git a/packages/hooks/src/use_resource.rs b/packages/hooks/src/use_resource.rs index 44322105a..50a635f4d 100644 --- a/packages/hooks/src/use_resource.rs +++ b/packages/hooks/src/use_resource.rs @@ -1,7 +1,11 @@ #![allow(missing_docs)] use crate::{use_callback, use_signal}; -use dioxus_core::prelude::*; + +use dioxus_core::{ + spawn, use_hook, Callback, IntoAttributeValue, IntoDynNode, ReactiveContext, RenderError, + SuspendedFuture, Task, +}; use dioxus_signals::*; use futures_util::{future, pin_mut, FutureExt, StreamExt}; use std::ops::Deref; diff --git a/packages/hooks/src/use_root_context.rs b/packages/hooks/src/use_root_context.rs index 4880ab5ce..027490f78 100644 --- a/packages/hooks/src/use_root_context.rs +++ b/packages/hooks/src/use_root_context.rs @@ -1,4 +1,4 @@ -use dioxus_core::{prelude::provide_root_context, prelude::try_consume_context, use_hook}; +use dioxus_core::{provide_root_context, try_consume_context, use_hook}; /// Try to get a value from the root of the virtual dom, if it doesn't exist, create a new one with the closure provided. /// diff --git a/packages/hooks/src/use_set_compare.rs b/packages/hooks/src/use_set_compare.rs index 12a72a57c..624257aa6 100644 --- a/packages/hooks/src/use_set_compare.rs +++ b/packages/hooks/src/use_set_compare.rs @@ -1,7 +1,6 @@ -use std::hash::Hash; - -use dioxus_core::prelude::*; +use dioxus_core::use_hook; use dioxus_signals::{ReadOnlySignal, SetCompare}; +use std::hash::Hash; /// Creates a new SetCompare which efficiently tracks when a value changes to check if it is equal to a set of values. /// diff --git a/packages/hooks/src/use_signal.rs b/packages/hooks/src/use_signal.rs index 47d603671..7a2daa16d 100644 --- a/packages/hooks/src/use_signal.rs +++ b/packages/hooks/src/use_signal.rs @@ -1,4 +1,4 @@ -use dioxus_core::prelude::*; +use dioxus_core::use_hook; use dioxus_signals::{Signal, SignalData, Storage, SyncStorage, UnsyncStorage}; /// Creates a new Signal. Signals are a Copy state management solution with automatic dependency tracking. diff --git a/packages/hooks/tests/effect.rs b/packages/hooks/tests/effect.rs index 660904166..2712d47d5 100644 --- a/packages/hooks/tests/effect.rs +++ b/packages/hooks/tests/effect.rs @@ -30,7 +30,7 @@ async fn effects_rerun() { println!("Signal: {:?}", signal); // Stop the wait for work manually - needs_update(); + dioxus_core::needs_update(); } }); signal += 1; diff --git a/packages/hooks/tests/memo.rs b/packages/hooks/tests/memo.rs index 2d50ee47f..ee20ee6a3 100644 --- a/packages/hooks/tests/memo.rs +++ b/packages/hooks/tests/memo.rs @@ -1,3 +1,5 @@ +use dioxus_core::generation; + #[tokio::test] async fn memo_updates() { use std::cell::RefCell; diff --git a/packages/html/src/attribute_groups.rs b/packages/html/src/attribute_groups.rs index 297b2013e..3d2f33c87 100644 --- a/packages/html/src/attribute_groups.rs +++ b/packages/html/src/attribute_groups.rs @@ -1,8 +1,8 @@ #![allow(non_upper_case_globals)] #![allow(deprecated)] -use dioxus_core::prelude::IntoAttributeValue; use dioxus_core::HasAttributes; +use dioxus_core::IntoAttributeValue; use dioxus_html_internal_macro::impl_extension_attributes; use crate::AttributeDescription; diff --git a/packages/html/src/elements.rs b/packages/html/src/elements.rs index d3e9ee430..501334f68 100644 --- a/packages/html/src/elements.rs +++ b/packages/html/src/elements.rs @@ -1,7 +1,7 @@ #![allow(non_upper_case_globals)] -use dioxus_core::prelude::IntoAttributeValue; use dioxus_core::HasAttributes; +use dioxus_core::IntoAttributeValue; #[cfg(feature = "hot-reload-context")] use dioxus_core_types::HotReloadingContext; use dioxus_html_internal_macro::impl_extension_attributes; diff --git a/packages/html/src/events/drag.rs b/packages/html/src/events/drag.rs index dfb5e02f5..26f2ebe99 100644 --- a/packages/html/src/events/drag.rs +++ b/packages/html/src/events/drag.rs @@ -1,6 +1,6 @@ use crate::geometry::{ClientPoint, Coordinates, ElementPoint, PagePoint, ScreenPoint}; use crate::input_data::{MouseButton, MouseButtonSet}; -use crate::prelude::*; +use crate::*; use dioxus_core::Event; use keyboard_types::Modifiers; diff --git a/packages/html/src/events/keyboard.rs b/packages/html/src/events/keyboard.rs index 172991f97..103e1e295 100644 --- a/packages/html/src/events/keyboard.rs +++ b/packages/html/src/events/keyboard.rs @@ -2,7 +2,7 @@ use dioxus_core::Event; use keyboard_types::{Code, Key, Location, Modifiers}; use std::fmt::Debug; -use crate::prelude::ModifiersInteraction; +use crate::ModifiersInteraction; #[cfg(feature = "serialize")] fn resilient_deserialize_code<'de, D>(deserializer: D) -> Result diff --git a/packages/html/src/events/mod.rs b/packages/html/src/events/mod.rs index 802ff2ede..d76045260 100644 --- a/packages/html/src/events/mod.rs +++ b/packages/html/src/events/mod.rs @@ -25,7 +25,7 @@ macro_rules! impl_event { #[doc(alias = $js_name)] )? #[inline] - pub fn $name<__Marker>(mut _f: impl ::dioxus_core::prelude::SuperInto<::dioxus_core::ListenerCallback<$data>, __Marker>) -> ::dioxus_core::Attribute { + pub fn $name<__Marker>(mut _f: impl ::dioxus_core::SuperInto<::dioxus_core::ListenerCallback<$data>, __Marker>) -> ::dioxus_core::Attribute { let event_handler = _f.super_into(); ::dioxus_core::Attribute::new( impl_event!(@name $name $($js_name)?), diff --git a/packages/html/src/events/mouse.rs b/packages/html/src/events/mouse.rs index 454faee8e..4ed8acff6 100644 --- a/packages/html/src/events/mouse.rs +++ b/packages/html/src/events/mouse.rs @@ -1,6 +1,6 @@ use crate::geometry::{ClientPoint, Coordinates, ElementPoint, PagePoint, ScreenPoint}; use crate::input_data::{MouseButton, MouseButtonSet}; -use crate::prelude::*; +use crate::*; use dioxus_core::Event; use keyboard_types::Modifiers; diff --git a/packages/html/src/events/pointer.rs b/packages/html/src/events/pointer.rs index 312f14879..d6ce3602a 100644 --- a/packages/html/src/events/pointer.rs +++ b/packages/html/src/events/pointer.rs @@ -1,7 +1,7 @@ use dioxus_core::Event; use keyboard_types::Modifiers; -use crate::{geometry::*, input_data::*, prelude::*}; +use crate::{geometry::*, input_data::*, *}; /// A synthetic event that wraps a web-style [`PointerEvent`](https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent) pub type PointerEvent = Event; diff --git a/packages/html/src/events/touch.rs b/packages/html/src/events/touch.rs index 999c9717b..f6ed28798 100644 --- a/packages/html/src/events/touch.rs +++ b/packages/html/src/events/touch.rs @@ -2,7 +2,7 @@ use dioxus_core::Event; use keyboard_types::Modifiers; use crate::geometry::*; -use crate::prelude::{InteractionLocation, ModifiersInteraction}; +use crate::{InteractionLocation, ModifiersInteraction}; pub type TouchEvent = Event; pub struct TouchData { diff --git a/packages/html/src/events/wheel.rs b/packages/html/src/events/wheel.rs index 0a51be817..4beda8956 100644 --- a/packages/html/src/events/wheel.rs +++ b/packages/html/src/events/wheel.rs @@ -1,9 +1,12 @@ use dioxus_core::Event; +use keyboard_types::Modifiers; use std::fmt::Formatter; -use crate::geometry::*; -use crate::input_data::{MouseButton, MouseButtonSet}; -use crate::prelude::*; +use crate::{geometry::*, InteractionLocation, ModifiersInteraction, PointerInteraction}; +use crate::{ + input_data::{MouseButton, MouseButtonSet}, + InteractionElementOffset, +}; use super::HasMouseData; diff --git a/packages/html/src/lib.rs b/packages/html/src/lib.rs index 80e3a7c36..090b4783d 100644 --- a/packages/html/src/lib.rs +++ b/packages/html/src/lib.rs @@ -41,15 +41,17 @@ pub use elements::*; pub use events::*; pub use render_template::*; +pub use crate::attribute_groups::{GlobalAttributesExtension, SvgAttributesExtension}; +pub use crate::elements::extensions::*; +pub use crate::point_interaction::*; +pub use keyboard_types::{self, Code, Key, Location, Modifiers}; + +pub mod traits { + pub use crate::events::*; + pub use crate::point_interaction::*; +} + pub mod extensions { pub use crate::attribute_groups::{GlobalAttributesExtension, SvgAttributesExtension}; pub use crate::elements::extensions::*; } - -pub mod prelude { - pub use crate::attribute_groups::{GlobalAttributesExtension, SvgAttributesExtension}; - pub use crate::elements::extensions::*; - pub use crate::events::*; - pub use crate::point_interaction::*; - pub use keyboard_types::{self, Code, Key, Location, Modifiers}; -} diff --git a/packages/liveview/src/adapters/axum_adapter.rs b/packages/liveview/src/adapters/axum_adapter.rs index a0e5b9209..8beabb092 100644 --- a/packages/liveview/src/adapters/axum_adapter.rs +++ b/packages/liveview/src/adapters/axum_adapter.rs @@ -41,7 +41,7 @@ impl LiveviewRouter for Router { fn with_virtual_dom( self, route: &str, - app: impl Fn() -> dioxus_core::prelude::VirtualDom + Send + Sync + 'static, + app: impl Fn() -> dioxus_core::VirtualDom + Send + Sync + 'static, ) -> Self { let view = crate::LiveViewPool::new(); diff --git a/packages/liveview/src/config.rs b/packages/liveview/src/config.rs index a33b7bff8..5130be01f 100644 --- a/packages/liveview/src/config.rs +++ b/packages/liveview/src/config.rs @@ -33,7 +33,7 @@ impl Config { } /// Create a new configuration for the LiveView server. - pub fn with_app(mut self, app: fn() -> dioxus_core::prelude::Element) -> Self { + pub fn with_app(mut self, app: fn() -> dioxus_core::Element) -> Self { self.router = self.router.with_app(&self.route, app); self } diff --git a/packages/liveview/src/document.rs b/packages/liveview/src/document.rs index e5332503d..1d4a84d3b 100644 --- a/packages/liveview/src/document.rs +++ b/packages/liveview/src/document.rs @@ -1,4 +1,4 @@ -use dioxus_core::prelude::queue_effect; +use dioxus_core::queue_effect; use dioxus_core::ScopeId; use dioxus_document::{ create_element_in_head, Document, Eval, EvalError, Evaluator, LinkProps, MetaProps, diff --git a/packages/liveview/src/history.rs b/packages/liveview/src/history.rs index 511d0d037..f98e7e10c 100644 --- a/packages/liveview/src/history.rs +++ b/packages/liveview/src/history.rs @@ -1,4 +1,4 @@ -use dioxus_core::prelude::spawn; +use dioxus_core::spawn; use dioxus_document::Eval; use dioxus_history::History; use serde::{Deserialize, Serialize}; diff --git a/packages/liveview/src/pool.rs b/packages/liveview/src/pool.rs index 0c1715fb6..73ad96042 100644 --- a/packages/liveview/src/pool.rs +++ b/packages/liveview/src/pool.rs @@ -5,7 +5,8 @@ use crate::{ query::{QueryEngine, QueryResult}, LiveViewError, }; -use dioxus_core::prelude::*; + +use dioxus_core::{provide_context, Element, Event, ScopeId, VirtualDom}; use dioxus_html::{EventData, HtmlEvent, PlatformEventData}; use dioxus_interpreter_js::MutationState; use futures_util::{pin_mut, SinkExt, StreamExt}; diff --git a/packages/native/src/dioxus_renderer.rs b/packages/native/src/dioxus_renderer.rs index b6f50abd5..1b50a16d3 100644 --- a/packages/native/src/dioxus_renderer.rs +++ b/packages/native/src/dioxus_renderer.rs @@ -10,7 +10,7 @@ pub use anyrender_vello::{ }; pub fn use_wgpu(create_source: impl FnOnce() -> T) -> u64 { - use dioxus_core::prelude::{consume_context, use_hook_with_cleanup}; + use dioxus_core::{consume_context, use_hook_with_cleanup}; let (_renderer, id) = use_hook_with_cleanup( || { diff --git a/packages/playwright-tests/fullstack/src/main.rs b/packages/playwright-tests/fullstack/src/main.rs index 721227d3f..f76a3ba61 100644 --- a/packages/playwright-tests/fullstack/src/main.rs +++ b/packages/playwright-tests/fullstack/src/main.rs @@ -5,10 +5,8 @@ // - Hydration #![allow(non_snake_case)] -use dioxus::prelude::{ - server_fn::{codec::JsonEncoding, BoxedStream, Websocket}, - *, -}; +use dioxus::fullstack::{codec::JsonEncoding, commit_initial_chunk, BoxedStream, Websocket}; +use dioxus::prelude::*; use futures::{channel::mpsc, SinkExt, StreamExt}; fn main() { @@ -77,6 +75,7 @@ fn DefaultServerFnCodec() -> Element { #[cfg(feature = "server")] async fn assert_server_context_provided() { + use dioxus::server::{extract, FromContext}; let FromContext(i): FromContext = extract().await.unwrap(); assert_eq!(i, 1234u32); } diff --git a/packages/playwright-tests/nested-suspense/src/lib.rs b/packages/playwright-tests/nested-suspense/src/lib.rs index 263fd26e0..4d7d351f3 100644 --- a/packages/playwright-tests/nested-suspense/src/lib.rs +++ b/packages/playwright-tests/nested-suspense/src/lib.rs @@ -12,7 +12,7 @@ use serde::{Deserialize, Serialize}; pub fn app() -> Element { // Start streaming immediately - use_hook(commit_initial_chunk); + use_hook(dioxus::fullstack::commit_initial_chunk); rsx! { SuspenseBoundary { diff --git a/packages/playwright-tests/nested-suspense/src/ssg.rs b/packages/playwright-tests/nested-suspense/src/ssg.rs index ce74bb1c9..d69be117c 100644 --- a/packages/playwright-tests/nested-suspense/src/ssg.rs +++ b/packages/playwright-tests/nested-suspense/src/ssg.rs @@ -9,7 +9,7 @@ fn main() { .with_cfg(server_only! { ServeConfig::builder() .incremental( - IncrementalRendererConfig::new() + dioxus::server::IncrementalRendererConfig::new() .static_dir( std::env::current_exe() .unwrap() diff --git a/packages/playwright-tests/suspense-carousel/src/main.rs b/packages/playwright-tests/suspense-carousel/src/main.rs index 2122761de..17965b9d2 100644 --- a/packages/playwright-tests/suspense-carousel/src/main.rs +++ b/packages/playwright-tests/suspense-carousel/src/main.rs @@ -5,7 +5,7 @@ // - Server futures #![allow(non_snake_case, unused)] -use dioxus::prelude::*; +use dioxus::{fullstack::commit_initial_chunk, prelude::*}; use serde::{Deserialize, Serialize}; fn app() -> Element { diff --git a/packages/playwright-tests/wasm-split-harness/src/main.rs b/packages/playwright-tests/wasm-split-harness/src/main.rs index c729bbf11..a044703a1 100644 --- a/packages/playwright-tests/wasm-split-harness/src/main.rs +++ b/packages/playwright-tests/wasm-split-harness/src/main.rs @@ -134,7 +134,7 @@ async fn add_body_element() { let output_box = document.get_element_by_id("output-box").unwrap_throw(); output_box.append_child(&output).unwrap_throw(); - dioxus::prelude::queue_effect(move || { + dioxus::core::queue_effect(move || { web_sys::console::log_1(&"add body async internal!".into()); *GLOBAL_COUNTER.write() += 2; }); @@ -146,7 +146,7 @@ async fn gzip_it() { let reader = Box::pin(futures::io::BufReader::new(DATA)); let reader: Pin> = reader; - dioxus::prelude::spawn(async move { + dioxus::core::spawn(async move { let mut fut = Box::pin(async_compression::futures::bufread::GzipDecoder::new( reader, )); @@ -177,7 +177,7 @@ async fn brotli_it(data: &'static [u8]) { let reader = Box::pin(futures::io::BufReader::new(data)); let reader: Pin> = reader; - dioxus::prelude::spawn(async move { + dioxus::core::spawn(async move { let mut fut = Box::pin(async_compression::futures::bufread::BrotliDecoder::new( reader, )); @@ -274,7 +274,7 @@ fn ChildSplit() -> Element { button { onclick: move |_| { set_stars("stars".to_string(), num + 1); - dioxus::prelude::needs_update(); + dioxus::core::needs_update(); }, "Add Star" } diff --git a/packages/router-macro/src/segment.rs b/packages/router-macro/src/segment.rs index b33882d18..2962d06c6 100644 --- a/packages/router-macro/src/segment.rs +++ b/packages/router-macro/src/segment.rs @@ -30,7 +30,9 @@ impl RouteSegment { write!(f, "/{}", dioxus_router::exports::percent_encoding::utf8_percent_encode(&as_string, dioxus_router::exports::PATH_ASCII_SET))?; } }, - Self::CatchAll(ident, _) => quote! { #ident.display_route_segments(f)?; }, + Self::CatchAll(ident, _) => quote! { + dioxus_router::ToRouteSegments::display_route_segments(#ident,f)?; + }, } } diff --git a/packages/router/src/components/child_router.rs b/packages/router/src/components/child_router.rs index 9638e290e..2abd37171 100644 --- a/packages/router/src/components/child_router.rs +++ b/packages/router/src/components/child_router.rs @@ -2,7 +2,7 @@ /// to the child router that maps child routes to root routes and vice versa. use dioxus_lib::prelude::*; -use crate::prelude::Routable; +use crate::Routable; /// Maps a child route into the root router and vice versa // NOTE: Currently child routers only support simple static prefixes, but this diff --git a/packages/router/src/components/outlet.rs b/packages/router/src/components/outlet.rs index 6431a9c4f..c4fe2c51c 100644 --- a/packages/router/src/components/outlet.rs +++ b/packages/router/src/components/outlet.rs @@ -1,4 +1,4 @@ -use crate::prelude::{outlet::OutletContext, *}; +use crate::{outlet::OutletContext, *}; use dioxus_lib::prelude::*; /// An outlet for the current content. diff --git a/packages/router/src/components/router.rs b/packages/router/src/components/router.rs index 2616d5c43..e1d04c02c 100644 --- a/packages/router/src/components/router.rs +++ b/packages/router/src/components/router.rs @@ -1,10 +1,6 @@ use dioxus_lib::prelude::*; -use crate::{ - prelude::{provide_router_context, Outlet}, - routable::Routable, - router_cfg::RouterConfig, -}; +use crate::{provide_router_context, routable::Routable, router_cfg::RouterConfig, Outlet}; /// The props for [`Router`]. #[derive(Props)] @@ -38,7 +34,7 @@ impl PartialEq for RouterProps { /// A component that renders the current route. pub fn Router(props: RouterProps) -> Element { - use crate::prelude::{outlet::OutletContext, RouterContext}; + use crate::{outlet::OutletContext, RouterContext}; use_hook(|| { provide_router_context(RouterContext::new(props.config.call(()))); @@ -46,7 +42,7 @@ pub fn Router(props: RouterProps) -> Element { #[cfg(feature = "streaming")] use_after_suspense_resolved(|| { - dioxus_fullstack_hooks::prelude::commit_initial_chunk(); + dioxus_fullstack_hooks::commit_initial_chunk(); }); use_hook(|| { diff --git a/packages/router/src/contexts/navigator.rs b/packages/router/src/contexts/navigator.rs index 42a62a51f..f1563f017 100644 --- a/packages/router/src/contexts/navigator.rs +++ b/packages/router/src/contexts/navigator.rs @@ -1,4 +1,4 @@ -use crate::prelude::{ExternalNavigationFailure, NavigationTarget, RouterContext}; +use crate::{ExternalNavigationFailure, NavigationTarget, RouterContext}; /// Acquire the navigator without subscribing to updates. /// @@ -9,7 +9,7 @@ use crate::prelude::{ExternalNavigationFailure, NavigationTarget, RouterContext} /// Panics if there is no router present. pub fn navigator() -> Navigator { Navigator( - dioxus_lib::prelude::try_consume_context::() + dioxus_lib::core::try_consume_context::() .expect("A router must be present to use navigator"), ) } diff --git a/packages/router/src/contexts/outlet.rs b/packages/router/src/contexts/outlet.rs index c3fd5c5f6..0795fc340 100644 --- a/packages/router/src/contexts/outlet.rs +++ b/packages/router/src/contexts/outlet.rs @@ -1,4 +1,4 @@ -use dioxus_lib::prelude::*; +use dioxus_lib::core::{provide_context, try_consume_context, use_hook, Element, VNode}; use crate::{routable::Routable, utils::use_router_internal::use_router_internal}; diff --git a/packages/router/src/contexts/router.rs b/packages/router/src/contexts/router.rs index 1a0d9425e..d2281cd11 100644 --- a/packages/router/src/contexts/router.rs +++ b/packages/router/src/contexts/router.rs @@ -6,11 +6,11 @@ use std::{ }; use dioxus_history::history; -use dioxus_lib::prelude::*; +use dioxus_lib::{core::ReactiveContext, prelude::*}; use crate::{ components::child_router::consume_child_route_mapping, navigation::NavigationTarget, - prelude::SiteMapSegment, routable::Routable, router_cfg::RouterConfig, + routable::Routable, router_cfg::RouterConfig, SiteMapSegment, }; /// An error that is thrown when the router fails to parse a route @@ -268,7 +268,7 @@ impl RouterContext { match route { Ok(route) => route, Err(err) => { - throw_error(ParseRouteError { message: err }); + dioxus_core::throw_error(ParseRouteError { message: err }); "/".parse().unwrap_or_else(|err| panic!("{err}")) } } diff --git a/packages/router/src/hooks/use_navigator.rs b/packages/router/src/hooks/use_navigator.rs index 9ca164464..48f417f90 100644 --- a/packages/router/src/hooks/use_navigator.rs +++ b/packages/router/src/hooks/use_navigator.rs @@ -1,6 +1,6 @@ -use dioxus_lib::prelude::{try_consume_context, use_hook}; +use dioxus_lib::core::{try_consume_context, use_hook}; -use crate::prelude::{Navigator, RouterContext}; +use crate::{Navigator, RouterContext}; /// A hook that provides access to the navigator to change the router history. /// diff --git a/packages/router/src/hooks/use_route.rs b/packages/router/src/hooks/use_route.rs index 3df71c3c0..62c153376 100644 --- a/packages/router/src/hooks/use_route.rs +++ b/packages/router/src/hooks/use_route.rs @@ -1,17 +1,16 @@ -use crate::prelude::*; use crate::utils::use_router_internal::use_router_internal; +use crate::Routable; /// A hook that provides access to information about the current routing location. /// /// > The Routable macro will define a version of this hook with an explicit type. /// /// # Panic -/// - When the calling component is not nested within a [`Router`] component. +/// - When the calling component is not nested within a [`crate::Router`] component. /// /// # Example /// ```rust /// # use dioxus::prelude::*; -/// # use dioxus_router::{prelude::*}; /// /// #[derive(Clone, Routable)] /// enum Route { diff --git a/packages/router/src/hooks/use_router.rs b/packages/router/src/hooks/use_router.rs index b78c0f9e5..7fb380183 100644 --- a/packages/router/src/hooks/use_router.rs +++ b/packages/router/src/hooks/use_router.rs @@ -1,4 +1,4 @@ -use crate::{prelude::RouterContext, utils::use_router_internal::use_router_internal}; +use crate::{utils::use_router_internal::use_router_internal, RouterContext}; #[deprecated = "prefer the `router()` function or `use_route` functions"] #[must_use] @@ -10,11 +10,11 @@ pub fn use_router() -> RouterContext { /// Acquire the router without subscribing to updates. #[doc(alias = "url")] pub fn router() -> RouterContext { - dioxus_lib::prelude::consume_context() + dioxus_lib::core::consume_context() } /// Try to acquire the router without subscribing to updates. #[doc(alias = "url")] pub fn try_router() -> Option { - dioxus_lib::prelude::try_consume_context() + dioxus_lib::core::try_consume_context() } diff --git a/packages/router/src/lib.rs b/packages/router/src/lib.rs index 4a18ade2a..400fd5949 100644 --- a/packages/router/src/lib.rs +++ b/packages/router/src/lib.rs @@ -56,6 +56,7 @@ pub mod hooks { pub use use_router::*; mod use_route; + pub use use_route::*; mod use_navigator; @@ -64,30 +65,25 @@ pub mod hooks { pub use hooks::router; -/// A collection of useful items most applications might need. -pub mod prelude { - #[cfg(feature = "html")] - pub use crate::components::{ - GoBackButton, GoForwardButton, HistoryButtonProps, Link, LinkProps, - }; - pub use crate::components::{Outlet, Router, RouterProps}; - pub use crate::contexts::*; - pub use crate::hooks::*; - pub use crate::navigation::*; - pub use crate::routable::*; - pub use crate::router_cfg::RouterConfig; - pub use dioxus_router_macro::Routable; +#[cfg(feature = "html")] +pub use crate::components::{GoBackButton, GoForwardButton, HistoryButtonProps, Link, LinkProps}; +pub use crate::components::{Outlet, Router, RouterProps}; +pub use crate::contexts::*; +pub use crate::hooks::*; +pub use crate::navigation::*; +pub use crate::routable::*; +pub use crate::router_cfg::RouterConfig; +pub use dioxus_router_macro::Routable; - #[doc(hidden)] - /// A component with props used in the macro - pub trait HasProps { - /// The props type of the component. - type Props; - } +#[doc(hidden)] +/// A component with props used in the macro +pub trait HasProps { + /// The props type of the component. + type Props; +} - impl

HasProps for dioxus_lib::prelude::Component

{ - type Props = P; - } +impl

HasProps for dioxus_lib::core::Component

{ + type Props = P; } mod utils { diff --git a/packages/router/src/routable.rs b/packages/router/src/routable.rs index c6e5ac3cf..b5fb670df 100644 --- a/packages/router/src/routable.rs +++ b/packages/router/src/routable.rs @@ -1,8 +1,7 @@ +#![allow(non_snake_case)] //! # Routable -#![allow(non_snake_case)] -use dioxus_lib::prelude::*; - +use dioxus_lib::core::Element; use std::iter::FlatMap; use std::slice::Iter; use std::{fmt::Display, str::FromStr}; diff --git a/packages/router/src/router_cfg.rs b/packages/router/src/router_cfg.rs index 7bf380d9b..729cc3a6c 100644 --- a/packages/router/src/router_cfg.rs +++ b/packages/router/src/router_cfg.rs @@ -1,5 +1,5 @@ -use crate::prelude::*; -use dioxus_lib::prelude::*; +use crate::{GenericRouterContext, NavigationTarget, Routable, RoutingCallback}; +use dioxus_lib::core::Element; use std::sync::Arc; /// Global configuration options for the router. diff --git a/packages/router/src/utils/use_router_internal.rs b/packages/router/src/utils/use_router_internal.rs index e67e08deb..bf6bc7f9b 100644 --- a/packages/router/src/utils/use_router_internal.rs +++ b/packages/router/src/utils/use_router_internal.rs @@ -1,6 +1,5 @@ -use dioxus_lib::prelude::*; - -use crate::prelude::*; +use crate::RouterContext; +use dioxus_lib::core::{try_consume_context, use_hook}; /// A private hook to subscribe to the router. /// @@ -8,7 +7,7 @@ use crate::prelude::*; /// single component, but not recommended. Multiple subscriptions will be discarded. /// /// # Return values -/// - [`None`], when the current component isn't a descendant of a [`Router`] component. +/// - [`None`], when the current component isn't a descendant of a [`crate::Router`] component. /// - Otherwise [`Some`]. pub(crate) fn use_router_internal() -> Option { use_hook(try_consume_context) diff --git a/packages/router/tests/via_ssr/outlet.rs b/packages/router/tests/via_ssr/outlet.rs index 57bb79f58..0f2df5629 100644 --- a/packages/router/tests/via_ssr/outlet.rs +++ b/packages/router/tests/via_ssr/outlet.rs @@ -5,7 +5,6 @@ use std::rc::Rc; use dioxus::prelude::*; use dioxus_history::{History, MemoryHistory}; use dioxus_router::components::HistoryProvider; -use dioxus_router::prelude::*; fn prepare(path: impl Into) -> VirtualDom { let mut vdom = VirtualDom::new_with_props( diff --git a/packages/rsx-hotreload/tests/hotreload_pattern.rs b/packages/rsx-hotreload/tests/hotreload_pattern.rs index 4e920abeb..726475662 100644 --- a/packages/rsx-hotreload/tests/hotreload_pattern.rs +++ b/packages/rsx-hotreload/tests/hotreload_pattern.rs @@ -7,8 +7,7 @@ use dioxus_core::{ FmtSegment, FmtedSegments, HotReloadAttributeValue, HotReloadDynamicAttribute, HotReloadDynamicNode, HotReloadLiteral, HotReloadedTemplate, NamedAttribute, }, - prelude::{Template, TemplateNode}, - TemplateAttribute, VNode, + Template, TemplateAttribute, TemplateNode, VNode, }; use dioxus_core_types::HotReloadingContext; use dioxus_rsx::CallBody; diff --git a/packages/rsx/src/component.rs b/packages/rsx/src/component.rs index bd328ed30..4bc532698 100644 --- a/packages/rsx/src/component.rs +++ b/packages/rsx/src/component.rs @@ -100,8 +100,7 @@ impl ToTokens for Component { // todo: ensure going through the trait actually works // we want to avoid importing traits - // use dioxus_core::prelude::Properties; - use dioxus_core::prelude::Properties; + use dioxus_core::Properties; let __comp = ({ #props }).into_vcomponent( @@ -223,7 +222,7 @@ impl Component { // we only want to span the name and generics, not the `fc_to_builder` call so jump-to-def // only finds the single entry (#name) let spanned = quote_spanned! { self.name.span() => #name #generics }; - quote! { fc_to_builder(#spanned) } + quote! { dioxus_core::fc_to_builder(#spanned) } }; tokens.append_all(self.add_fields_to_builder( @@ -306,7 +305,19 @@ impl Component { "Custom attributes are not supported for components that are spread", ).emit_as_expr_tokens()); } else { - tokens.append_all(quote! { .push_attribute(#name, None, #value, false) }) + // tokens = quote! { + // dioxus_core::HasAttributes::push_attribute( + // #tokens, + // #name, + // None, + // #value, + // false + // ) + // }; + + tokens.append_all(quote! { + .push_attribute(#name, None, #value, false) + }) } } // spreads are handled elsewhere @@ -353,8 +364,7 @@ fn normalize_path(name: &mut syn::Path) -> Option { diff --git a/packages/signals/src/memo.rs b/packages/signals/src/memo.rs index 3b1bdab70..953d2cb7d 100644 --- a/packages/signals/src/memo.rs +++ b/packages/signals/src/memo.rs @@ -8,7 +8,9 @@ use std::{ sync::{atomic::AtomicBool, Arc}, }; -use dioxus_core::prelude::*; +use dioxus_core::{ + current_scope_id, spawn_isomorphic, IntoAttributeValue, IntoDynNode, ReactiveContext, ScopeId, +}; use futures_util::StreamExt; use generational_box::{AnyStorage, BorrowResult, UnsyncStorage}; diff --git a/packages/signals/src/props.rs b/packages/signals/src/props.rs index da07e6b5f..fc004089a 100644 --- a/packages/signals/src/props.rs +++ b/packages/signals/src/props.rs @@ -1,5 +1,5 @@ use crate::{ReadOnlySignal, Signal}; -use dioxus_core::prelude::*; +use dioxus_core::SuperFrom; #[doc(hidden)] pub struct SignalFromMarker(std::marker::PhantomData); @@ -16,6 +16,7 @@ where #[test] #[allow(unused)] fn into_signal_compiles() { + use dioxus_core::SuperInto; fn takes_signal_string(_: impl SuperInto, M>) {} fn takes_option_signal_string(_: impl SuperInto>, M>) {} diff --git a/packages/signals/src/read_only_signal.rs b/packages/signals/src/read_only_signal.rs index 19650e8a5..668aedc04 100644 --- a/packages/signals/src/read_only_signal.rs +++ b/packages/signals/src/read_only_signal.rs @@ -3,7 +3,7 @@ use dioxus_core::IntoDynNode; use std::ops::Deref; use crate::{default_impl, read_impls}; -use dioxus_core::{prelude::IntoAttributeValue, ScopeId}; +use dioxus_core::{IntoAttributeValue, ScopeId}; use generational_box::{BorrowResult, Storage, UnsyncStorage}; /// A signal that can only be read from. diff --git a/packages/signals/src/set_compare.rs b/packages/signals/src/set_compare.rs index d1a624f48..0630e9e56 100644 --- a/packages/signals/src/set_compare.rs +++ b/packages/signals/src/set_compare.rs @@ -2,7 +2,7 @@ use crate::write::Writable; use std::hash::Hash; use crate::read::Readable; -use dioxus_core::prelude::*; +use dioxus_core::ReactiveContext; use futures_util::StreamExt; use generational_box::{Storage, UnsyncStorage}; @@ -54,7 +54,7 @@ impl>> SetCompare { *previous = Some(current); }; let (rc, mut changed) = ReactiveContext::new(); - spawn(async move { + dioxus_core::spawn(async move { loop { // Recompute the value rc.reset_and_run_in(&mut recompute); diff --git a/packages/signals/src/signal.rs b/packages/signals/src/signal.rs index 1f4865662..d492ab26e 100644 --- a/packages/signals/src/signal.rs +++ b/packages/signals/src/signal.rs @@ -1,13 +1,14 @@ -use crate::{default_impl, fmt_impls, write_impls, Global}; -use crate::{read::*, write::*, CopyValue, GlobalMemo, GlobalSignal, ReadableRef}; -use crate::{Memo, WritableRef}; -use dioxus_core::prelude::*; +use crate::{ + default_impl, fmt_impls, read::*, write::*, write_impls, CopyValue, Global, GlobalMemo, + GlobalSignal, Memo, ReadableRef, WritableRef, +}; +use dioxus_core::{IntoAttributeValue, IntoDynNode, ReactiveContext, ScopeId}; use generational_box::{AnyStorage, BorrowResult, Storage, SyncStorage, UnsyncStorage}; -use std::sync::Arc; use std::{ any::Any, collections::HashSet, ops::{Deref, DerefMut}, + sync::Arc, sync::Mutex, }; @@ -522,7 +523,7 @@ impl<'de, T: serde::Deserialize<'de> + 'static, Store: Storage>> /// # use dioxus::prelude::*; /// fn app() -> Element { /// let mut value = use_signal(|| String::from("hello")); -/// +/// /// rsx! { /// button { /// onclick: move |_| { diff --git a/packages/signals/src/warnings.rs b/packages/signals/src/warnings.rs index 80d932498..69c9e4fc6 100644 --- a/packages/signals/src/warnings.rs +++ b/packages/signals/src/warnings.rs @@ -9,7 +9,7 @@ pub fn copy_value_hoisted>( caller: &'static std::panic::Location<'static>, ) { let origin_scope = value.origin_scope; - if let Ok(current_scope) = dioxus_core::prelude::current_scope_id() { + if let Ok(current_scope) = dioxus_core::current_scope_id() { // If the current scope is a descendant of the origin scope or is the same scope, we don't need to warn if origin_scope == current_scope || current_scope.is_descendant_of(origin_scope) { return; @@ -53,102 +53,3 @@ fn hoist() { include!("../docs/hoist/fixed_list.rs"); } } - -/// Check if the write happened during a render. If it did, warn the user that this is generally a bad practice. -#[warning] -pub fn signal_write_in_component_body(origin: &'static std::panic::Location<'static>) { - // Check if the write happened during a render. If it did, we should warn the user that this is generally a bad practice. - if dioxus_core::vdom_is_rendering() { - tracing::warn!( - "Write on signal at {} happened while a component was running. Writing to signals during a render can cause infinite rerenders when you read the same signal in the component. Consider writing to the signal in an effect, future, or event handler if possible.", - origin - ); - } -} - -/// Check if the write happened during a scope that the signal is also subscribed to. If it did, trigger a warning because it will likely cause an infinite loop. -#[warning] -pub fn signal_read_and_write_in_reactive_scope< - T: 'static, - S: generational_box::Storage>, ->( - origin: &'static std::panic::Location<'static>, - signal: crate::Signal, -) { - // Check if the write happened during a scope that the signal is also subscribed to. If it did, this will probably cause an infinite loop. - if let Some(reactive_context) = dioxus_core::prelude::ReactiveContext::current() { - if let Ok(inner) = crate::Readable::try_read(&signal.inner) { - if let Ok(subscribers) = inner.subscribers.lock() { - for subscriber in subscribers.iter() { - if reactive_context == *subscriber { - tracing::warn!( - "Write on signal at {origin} finished in {reactive_context} which is also subscribed to the signal. This will likely cause an infinite loop. When the write finishes, {reactive_context} will rerun which may cause the write to be rerun again.\nHINT:\n{SIGNAL_READ_WRITE_SAME_SCOPE_HELP}", - ); - } - } - } - } - } -} - -#[allow(unused)] -const SIGNAL_READ_WRITE_SAME_SCOPE_HELP: &str = r#"This issue is caused by reading and writing to the same signal in a reactive scope. Components, effects, memos, and resources each have their own a reactive scopes. Reactive scopes rerun when any signal you read inside of them are changed. If you read and write to the same signal in the same scope, the write will cause the scope to rerun and trigger the write again. This can cause an infinite loop. - -You can fix the issue by either: -1) Splitting up your state and Writing, reading to different signals: - -For example, you could change this broken code: - -#[derive(Clone, Copy)] -struct Counts { - count1: i32, - count2: i32, -} - -fn app() -> Element { - let mut counts = use_signal(|| Counts { count1: 0, count2: 0 }); - - use_effect(move || { - // This effect both reads and writes to counts - counts.write().count1 = counts().count2; - }) -} - -Into this working code: - -fn app() -> Element { - let mut count1 = use_signal(|| 0); - let mut count2 = use_signal(|| 0); - - use_effect(move || { - count1.set(count2()); - }); -} -2) Reading and Writing to the same signal in different scopes: - -For example, you could change this broken code: - -fn app() -> Element { - let mut count = use_signal(|| 0); - - use_effect(move || { - // This effect both reads and writes to count - println!("{}", count()); - count.set(1); - }); -} - - -To this working code: - -fn app() -> Element { - let mut count = use_signal(|| 0); - - use_effect(move || { - count.set(1); - }); - use_effect(move || { - println!("{}", count()); - }); -} -"#; diff --git a/packages/signals/tests/create.rs b/packages/signals/tests/create.rs index 51c9d4822..c322a78e2 100644 --- a/packages/signals/tests/create.rs +++ b/packages/signals/tests/create.rs @@ -1,8 +1,7 @@ #![allow(unused, non_upper_case_globals, non_snake_case)] use dioxus::prelude::*; -use dioxus_core::ElementId; -use dioxus_core::NoOpMutations; +use dioxus_core::{generation, ElementId, NoOpMutations}; use dioxus_signals::*; #[test] diff --git a/packages/signals/tests/memo.rs b/packages/signals/tests/memo.rs index 04b456085..9601a9f66 100644 --- a/packages/signals/tests/memo.rs +++ b/packages/signals/tests/memo.rs @@ -1,8 +1,8 @@ #![allow(unused, non_upper_case_globals, non_snake_case)] use dioxus::html::p; use dioxus::prelude::*; -use dioxus_core::ElementId; use dioxus_core::NoOpMutations; +use dioxus_core::{generation, ElementId}; use dioxus_signals::*; use std::cell::RefCell; use std::collections::HashMap; diff --git a/packages/signals/tests/subscribe.rs b/packages/signals/tests/subscribe.rs index 906693557..48f5b3828 100644 --- a/packages/signals/tests/subscribe.rs +++ b/packages/signals/tests/subscribe.rs @@ -1,6 +1,6 @@ #![allow(unused, non_upper_case_globals, non_snake_case)] -use dioxus_core::NoOpMutations; +use dioxus_core::{current_scope_id, generation, NoOpMutations}; use std::collections::HashMap; use std::rc::Rc; diff --git a/packages/ssr/src/cache.rs b/packages/ssr/src/cache.rs index 40cef3af6..1909c297e 100644 --- a/packages/ssr/src/cache.rs +++ b/packages/ssr/src/cache.rs @@ -29,10 +29,9 @@ //! }; //!``` -use dioxus_core::prelude::*; -use std::{fmt::Write, ops::AddAssign}; - use crate::renderer::{str_truthy, BOOL_ATTRS}; +use dioxus_core::{TemplateAttribute, TemplateNode, VNode}; +use std::{fmt::Write, ops::AddAssign}; #[derive(Debug)] pub(crate) struct StringCache { diff --git a/packages/ssr/src/renderer.rs b/packages/ssr/src/renderer.rs index 0165ac11f..10f271418 100644 --- a/packages/ssr/src/renderer.rs +++ b/packages/ssr/src/renderer.rs @@ -1,7 +1,9 @@ use super::cache::Segment; use crate::cache::StringCache; -use dioxus_core::{prelude::*, AttributeValue, DynamicNode}; +use dioxus_core::{ + Attribute, AttributeValue, DynamicNode, Element, ScopeId, Template, VNode, VirtualDom, +}; use rustc_hash::FxHashMap; use std::fmt::Write; use std::sync::Arc; diff --git a/packages/web/src/document.rs b/packages/web/src/document.rs index 5b4574dac..750eabc0c 100644 --- a/packages/web/src/document.rs +++ b/packages/web/src/document.rs @@ -1,4 +1,4 @@ -use dioxus_core::prelude::queue_effect; +use dioxus_core::queue_effect; use dioxus_core::ScopeId; use dioxus_document::{ Document, Eval, EvalError, Evaluator, LinkProps, MetaProps, ScriptProps, StyleProps, diff --git a/packages/web/src/events/drag.rs b/packages/web/src/events/drag.rs index 8704ee27e..090f4a91e 100644 --- a/packages/web/src/events/drag.rs +++ b/packages/web/src/events/drag.rs @@ -2,11 +2,8 @@ use super::{Synthetic, WebEventExt}; use dioxus_html::{ geometry::{ClientPoint, ElementPoint, PagePoint, ScreenPoint}, input_data::{decode_mouse_button_set, MouseButton}, - prelude::{ - InteractionElementOffset, InteractionLocation, Modifiers, ModifiersInteraction, - PointerInteraction, - }, - HasDragData, HasFileData, HasMouseData, + HasDragData, HasFileData, HasMouseData, InteractionElementOffset, InteractionLocation, + Modifiers, ModifiersInteraction, PointerInteraction, }; use web_sys::DragEvent; diff --git a/packages/web/src/events/keyboard.rs b/packages/web/src/events/keyboard.rs index 57b233aba..fe775d1ee 100644 --- a/packages/web/src/events/keyboard.rs +++ b/packages/web/src/events/keyboard.rs @@ -1,9 +1,8 @@ use std::str::FromStr; use dioxus_html::{ - input_data::decode_key_location, - prelude::{Code, Key, Location, Modifiers, ModifiersInteraction}, - HasKeyboardData, + input_data::decode_key_location, Code, HasKeyboardData, Key, Location, Modifiers, + ModifiersInteraction, }; use web_sys::KeyboardEvent; diff --git a/packages/web/src/events/mouse.rs b/packages/web/src/events/mouse.rs index 2d2114627..4f54f34c6 100644 --- a/packages/web/src/events/mouse.rs +++ b/packages/web/src/events/mouse.rs @@ -1,11 +1,8 @@ use dioxus_html::{ geometry::{ClientPoint, ElementPoint, PagePoint, ScreenPoint}, input_data::{decode_mouse_button_set, MouseButton}, - prelude::{ - InteractionElementOffset, InteractionLocation, Modifiers, ModifiersInteraction, - PointerInteraction, - }, - HasMouseData, + HasMouseData, InteractionElementOffset, InteractionLocation, Modifiers, ModifiersInteraction, + PointerInteraction, }; use web_sys::MouseEvent; diff --git a/packages/web/src/events/pointer.rs b/packages/web/src/events/pointer.rs index dc33f00b1..2764122eb 100644 --- a/packages/web/src/events/pointer.rs +++ b/packages/web/src/events/pointer.rs @@ -1,11 +1,8 @@ use dioxus_html::{ geometry::{ClientPoint, ElementPoint, PagePoint, ScreenPoint}, input_data::{decode_mouse_button_set, MouseButton}, - prelude::{ - InteractionElementOffset, InteractionLocation, Modifiers, ModifiersInteraction, - PointerInteraction, - }, - HasPointerData, + HasPointerData, InteractionElementOffset, InteractionLocation, Modifiers, ModifiersInteraction, + PointerInteraction, }; use web_sys::PointerEvent; diff --git a/packages/web/src/events/touch.rs b/packages/web/src/events/touch.rs index 487792536..839070494 100644 --- a/packages/web/src/events/touch.rs +++ b/packages/web/src/events/touch.rs @@ -1,7 +1,6 @@ use dioxus_html::{ geometry::{ClientPoint, PagePoint, ScreenPoint}, - prelude::{InteractionLocation, Modifiers, ModifiersInteraction}, - HasTouchPointData, TouchPoint, + HasTouchPointData, InteractionLocation, Modifiers, ModifiersInteraction, TouchPoint, }; use web_sys::{Touch, TouchEvent}; diff --git a/packages/web/src/events/wheel.rs b/packages/web/src/events/wheel.rs index e0316c526..3fe8136ef 100644 --- a/packages/web/src/events/wheel.rs +++ b/packages/web/src/events/wheel.rs @@ -1,11 +1,8 @@ use dioxus_html::{ geometry::{ClientPoint, ElementPoint, PagePoint, ScreenPoint}, input_data::{decode_mouse_button_set, MouseButton}, - prelude::{ - InteractionElementOffset, InteractionLocation, Modifiers, ModifiersInteraction, - PointerInteraction, - }, - HasMouseData, HasWheelData, + HasMouseData, HasWheelData, InteractionElementOffset, InteractionLocation, Modifiers, + ModifiersInteraction, PointerInteraction, }; use web_sys::WheelEvent; diff --git a/packages/web/src/hydration/hydrate.rs b/packages/web/src/hydration/hydrate.rs index 1a8117ce8..5116df111 100644 --- a/packages/web/src/hydration/hydrate.rs +++ b/packages/web/src/hydration/hydrate.rs @@ -4,9 +4,10 @@ //! 3. Register a callback for dx_hydrate(id, data) that takes some new data, reruns the suspense boundary with that new data and then rehydrates the node use crate::dom::WebsysDom; -use dioxus_core::prelude::*; -use dioxus_core::AttributeValue; -use dioxus_core::{DynamicNode, ElementId}; +use dioxus_core::{ + AttributeValue, DynamicNode, ElementId, ScopeId, ScopeState, SuspenseBoundaryProps, + SuspenseContext, TemplateNode, VNode, VirtualDom, +}; use dioxus_fullstack_protocol::HydrationContext; use futures_channel::mpsc::UnboundedReceiver; use std::fmt::Write; diff --git a/packages/web/src/launch.rs b/packages/web/src/launch.rs index 51ae34a0e..df03728a8 100644 --- a/packages/web/src/launch.rs +++ b/packages/web/src/launch.rs @@ -1,7 +1,6 @@ //! This module contains the `launch` function, which is the main entry point for dioxus web - pub use crate::Config; -use dioxus_core::prelude::*; +use dioxus_core::{Element, VirtualDom}; use std::any::Any; /// Launch the web application with the given root component, context and config diff --git a/packages/web/src/mutations.rs b/packages/web/src/mutations.rs index dd3b9028e..ac511abb2 100644 --- a/packages/web/src/mutations.rs +++ b/packages/web/src/mutations.rs @@ -1,7 +1,7 @@ use crate::dom::WebsysDom; -use dioxus_core::prelude::*; -use dioxus_core::WriteMutations; -use dioxus_core::{AttributeValue, ElementId}; +use dioxus_core::{ + AttributeValue, ElementId, Template, TemplateAttribute, TemplateNode, WriteMutations, +}; use dioxus_core_types::event_bubbles; use dioxus_interpreter_js::minimal_bindings; use wasm_bindgen::JsCast;