use bevy::prelude::*;
use crate::bridge::{FocusState, RNode, StyleVariants};
use crate::ui_map::overlay_style;
#[allow(clippy::type_complexity)]
pub fn apply_interaction_styles(
mut commands: Commands,
query: Query<
(
Entity,
Option<&Interaction>,
Option<&FocusState>,
&StyleVariants,
Option<&crate::layer::PromotedLayer>,
),
Or<(
Changed<Interaction>,
Changed<FocusState>,
Changed<StyleVariants>,
)>,
>,
rnodes: Query<&RNode>,
) {
for (entity, interaction, focus, variants, promoted) in &query {
let mut style = match interaction {
Some(Interaction::Pressed) => overlay_style(
&overlay_style(&variants.base, &variants.hover),
&variants.press,
),
Some(Interaction::Hovered) => overlay_style(&variants.base, &variants.hover),
_ => variants.base.clone(),
};
if focus.is_some_and(|f| f.0) {
style = overlay_style(&style, &variants.focus);
}
let _diag = rnodes
.get(entity)
.ok()
.map(|r| crate::diag::node_scope(r.0));
crate::ui_map::apply_style_promoted(
&mut commands.entity(entity),
&style,
promoted.is_some(),
);
}
}