✨ (base): Añade with_menu_end() para menú al final

This commit is contained in:
Manuel Cillero 2026-09-26 14:21:39 +02:00
parent f265f217bd
commit 165cb49880
7 changed files with 152 additions and 5 deletions

View file

@ -37,6 +37,8 @@ pub struct Dropdown {
/// Devuelve el estilo visual del botón.
#[getters(copy)]
button_style: button::Style,
/// Devuelve si el menú se alinea al final del botón (por defecto, al inicio).
menu_end: bool,
/// Devuelve la lista de elementos del menú.
items: Children,
}
@ -124,12 +126,23 @@ impl Component for Dropdown {
(&title)
}
}
ul class="dropdown-menu" { (items) }
ul class=(self.menu_classes()) { (items) }
}
})
}
}
impl Dropdown {
// Clases del `<ul>` del menú, compartidas con el renderizado de `nav::Item::dropdown()`.
pub(crate) fn menu_classes(&self) -> &'static str {
if *self.menu_end() {
"dropdown-menu dropdown-menu-end"
} else {
"dropdown-menu"
}
}
}
#[builder_impl]
impl Dropdown {
// **< Dropdown BUILDER >***********************************************************************
@ -170,6 +183,16 @@ impl Dropdown {
self
}
/// Alinea el menú al final del botón (por defecto, al inicio).
///
/// Útil cuando el desplegable está pegado al borde final de la página, p. ej. el último de una
/// [`Navbar`], para que el menú se abra hacia el interior y no se salga de la pantalla. No
/// tiene efecto en un menú sin título, que es estático y no tiene botón al que alinearse.
pub fn with_menu_end(mut self, end: bool) -> Self {
self.menu_end = end;
self
}
/// Añade un nuevo elemento al menú o modifica la lista de elementos del menú con una operación
/// [`TypedOp`].
///

View file

@ -163,7 +163,7 @@ impl Component for Item {
{
(title)
}
ul class="dropdown-menu" {
ul class=(dd.menu_classes()) {
(items)
}
}