use web_sys::Element;
use crate::html::AnyScope;
use crate::virtual_dom::VNode;
mod bcomp;
mod blist;
mod bnode;
mod bportal;
mod braw;
mod bsuspense;
mod btag;
mod btext;
mod position;
mod subtree_root;
mod traits;
mod utils;
use bcomp::BComp;
use blist::BList;
use bnode::BNode;
use bportal::BPortal;
use braw::BRaw;
use bsuspense::BSuspense;
use btag::{BTag, Registry};
use btext::BText;
pub(crate) use position::{DomSlot, DynamicDomSlot};
use subtree_root::EventDescriptor;
pub use subtree_root::{set_event_bubbling, BSubtree};
use traits::{Reconcilable, ReconcileTarget};
use utils::test_log;
#[derive(Debug)]
pub(crate) struct Bundle(BNode);
impl Bundle {
pub const fn new() -> Self {
Self(BNode::List(BList::new()))
}
pub fn shift(&self, next_parent: &Element, slot: DomSlot) {
self.0.shift(next_parent, slot);
}
pub fn reconcile(
&mut self,
root: &BSubtree,
parent_scope: &AnyScope,
parent: &Element,
slot: DomSlot,
next_node: VNode,
) -> DomSlot {
next_node.reconcile_node(root, parent_scope, parent, slot, &mut self.0)
}
pub fn detach(self, root: &BSubtree, parent: &Element, parent_to_detach: bool) {
self.0.detach(root, parent, parent_to_detach);
}
}
#[cfg(feature = "hydration")]
#[path = "."]
mod feat_hydration {
pub(super) use super::traits::Hydratable;
pub(super) use super::utils::node_type_str;
#[path = "./fragment.rs"]
mod fragment;
pub(crate) use fragment::Fragment;
use super::*;
impl Bundle {
pub fn hydrate(
root: &BSubtree,
parent_scope: &AnyScope,
parent: &Element,
fragment: &mut Fragment,
node: VNode,
previous_next_sibling: &mut Option<DynamicDomSlot>,
) -> Self {
let bundle = node.hydrate(root, parent_scope, parent, fragment, previous_next_sibling);
Self(bundle)
}
}
}
#[cfg(feature = "hydration")]
pub(crate) use feat_hydration::*;