bevy_hui 0.7.0

pseudo Html templating ui crate for the bevy-engine.
Documentation
#![cfg_attr(docsrs, feature(doc_cfg))]
#![allow(rustdoc::redundant_explicit_links)]
#![doc = include_str!("../README.md")]

use bevy::app::{App, Plugin, Update};
use bevy::ecs::schedule::{ApplyDeferred, IntoScheduleConfigs, SystemSet};
use animation::run_animations;

mod animation;
mod auto;
mod bindings;
mod build;
mod compile;
mod data;
mod error;
mod load;
mod parse;
mod styles;
mod util;
mod adaptor;

#[derive(SystemSet, Debug, Clone, PartialEq, Eq, Hash)]
pub enum HuiSystems {
    Build,
    Style,
}

pub mod prelude {
    pub use crate::auto::{AutoLoadState, HuiAutoLoadPlugin};
    pub use crate::bindings::{
        ComponentBindings, FunctionBindings, HtmlComponents, HtmlFunctions, UiChangedEvent,
    };
    pub use crate::build::{
        HtmlNode, OnUiChange, OnUiEnter, OnUiExit, OnUiPress, OnUiSpawn, Tags, TemplateProperties,
        TemplateScope, UiId, UiTarget, UiWatch,
    };
    pub use crate::compile::{CompileContextEvent, CompileNodeEvent};
    pub use crate::data::{Action, Attribute, HtmlTemplate, NodeType, StyleAttr};
    pub use crate::error::ParseError;
    pub use crate::error::VerboseHtmlError;
    pub use crate::parse::parse_template;
    pub use crate::styles::{HoverTimer, HtmlStyle, InteractionTimer, PressedTimer, UiActive};
    pub use crate::HuiPlugin;
    pub use crate::adaptor::{AssetServerAdaptor, AssetLoadAdaptor};
}
pub struct HuiPlugin;
impl Plugin for HuiPlugin {
    fn build(&self, app: &mut App) {
        app.add_plugins((
            load::LoaderPlugin,
            build::BuildPlugin,
            bindings::BindingPlugin,
            styles::TransitionPlugin,
            compile::CompilePlugin,
        ))
        .configure_sets(Update, HuiSystems::Build.before(HuiSystems::Style))
        .add_systems(
            Update,
            ApplyDeferred
                .after(HuiSystems::Build)
                .before(HuiSystems::Style),
        )
        .add_systems(Update, run_animations);
    }
}