use crate::{UiRsc, WidgetIdFn, WidgetLike, WeakWidget}; pub trait WidgetAttr { type Input; fn run(rsc: &mut Rsc, id: WeakWidget, input: Self::Input); } pub trait Attrable { fn attr>(self, input: A::Input) -> impl WidgetIdFn; } impl, Tag> Attrable for WL { fn attr>( self, input: A::Input, ) -> impl WidgetIdFn { |rsc| { let id = self.add(rsc); A::run(rsc, id, input); id } } }