cada capa hace una cosa. nada de vDOM ajeno, nada de callbacks imperativos.
un solo flujo, puro. el modelo es inmutable; update devuelve modelo nuevo; view es pura.
// trait App = init + update + view impl App for Counter { type Model = u32; type Msg = Msg; fn update(m: u32, msg: Msg, _: &Handle<Msg>) -> u32 { match msg { Msg::Increment => m.saturating_add(1), Msg::Reset => 0, } } fn view(m: &u32) -> View<Msg> { View::new(style) .text(m.to_string(), 160.0, ink) .child( View::new(btn_style) .fill(Color::from_rgba8(60, 200, 130, 255)) .text("+1", 28.0, dark) .on_click(Msg::Increment) ) } }
un solo workspace. un solo theme. una sola firma estética.
todas corriendo sobre llimphi. desde editores hasta cartas astrales.