Añade soporte a contenido HTML en ítems de menú

This commit is contained in:
Manuel Cillero 2025-12-03 06:47:33 +01:00
parent 51e18cf5ee
commit 7083413d7b

View file

@ -25,6 +25,9 @@ pub enum ItemKind {
blank: bool,
disabled: bool,
},
/// Contenido HTML arbitrario. El componente [`Html`] se renderiza tal cual como elemento del
/// menú, sin añadir ningún comportamiento de navegación adicional.
Html(Typed<Html>),
/// Elemento que despliega un menú [`Dropdown`].
Dropdown(Typed<Dropdown>),
}
@ -148,6 +151,12 @@ impl Component for Item {
})
}
ItemKind::Html(html) => PrepareMarkup::With(html! {
li id=[self.id()] class=[self.classes().get()] {
(html.render(cx))
}
}),
ItemKind::Dropdown(menu) => {
if let Some(dd) = menu.borrow() {
let items = dd.items().render(cx);
@ -244,6 +253,17 @@ impl Item {
}
}
/// Crea un elemento con contenido HTML arbitrario.
///
/// El contenido se renderiza tal cual lo devuelve el componente [`Html`], dentro de un `<li>`
/// con las clases de navegación asociadas a [`Item`].
pub fn html(html: Html) -> Self {
Item {
item_kind: ItemKind::Html(Typed::with(html)),
..Default::default()
}
}
/// Crea un elemento de navegación que contiene un menú desplegable [`Dropdown`].
///
/// Sólo se tienen en cuenta **el título** (si no existe le asigna uno por defecto) y **la lista