bevy_extended_ui 1.3.0-beta.2

Create simply ui's with css and html for bevy.
Documentation
use std::collections::HashMap;
use bevy::prelude::*;
use bevy_extended_ui::example_utils::make_app;
use bevy_extended_ui::html::HtmlSource;
use bevy_extended_ui::io::HtmlAsset;
use bevy_extended_ui::registry::UiRegistry;
use bevy_extended_ui::styles::CssID;
use bevy_extended_ui::widgets::{ProgressBar, UIWidgetState};

fn main() {
    let mut app = make_app("Debug Html UI - test");

    app.add_systems(Startup, |mut reg: ResMut<UiRegistry>, asset_server: Res<AssetServer>| {
        let handle: Handle<HtmlAsset> = asset_server.load("examples/progress_bar.html");
        reg.add_and_use("progress_bar_test".to_string(), HtmlSource::from_handle(handle));
    });

    app.add_systems(Update, update_progress_bar);

    app.run();
}

pub fn update_progress_bar(
    time: Res<Time>,
    container_q: Query<(&CssID, &UIWidgetState)>,
    mut progress_bar_q: Query<(&CssID, &mut ProgressBar)>,
    mut raw_by_id: Local<HashMap<String, f32>>,
) {
    let mut trigger_hovered = false;
    for (id, state) in &container_q {
        if id.0.to_string() == "trigger" {
            trigger_hovered = state.hovered;
            break;
        }
    }

    let dir = if trigger_hovered { 1.0 } else { -1.0 };
    let speed = 10.0;
    let dt = time.delta_secs();

    for (id, mut bar) in &mut progress_bar_q {
        if id.0.to_string() != "progress-bar" {
            continue;
        }

        let key = "progress-bar".to_string();
        let raw = raw_by_id.entry(key).or_insert(bar.value);

        *raw = (*raw + dir * speed * dt).clamp(bar.min, bar.max);

        bar.value = if dir > 0.0 {
            raw.floor()
        } else {
            raw.ceil()
        };
    }
}