[bootsier] Nuevos componentes Navbar y Offcanvas

This commit is contained in:
Manuel Cillero 2025-01-05 09:23:56 +01:00
parent 83e09c38ce
commit db13a6ab8b
17 changed files with 743 additions and 16 deletions

View file

@ -2,10 +2,23 @@ use pagetop::prelude::*;
use std::fmt;
mod container;
// Container.
pub mod container;
pub use container::{Container, ContainerType};
// Grid.
pub mod grid;
pub use grid::Grid;
// Offcanvas.
pub mod offcanvas;
pub use offcanvas::{
Offcanvas, OffcanvasBackdrop, OffcanvasBodyScroll, OffcanvasPlacement, OffcanvasVisibility,
};
// Navbar.
pub mod navbar;
pub use navbar::{Navbar, NavbarType};
/// Define los puntos de interrupción (*breakpoints*) usados por Bootstrap para diseño responsivo.
#[rustfmt::skip]
@ -24,15 +37,46 @@ pub enum BreakPoint {
}
impl BreakPoint {
/// Indica si se trata de un punto de interrupción de Bootstrap.
/// Devuelve `true` si el valor es SM, MD, LG, XL o XXL.
/// Devuelve `false` si es None, Fluid o FluidMax.
/// Indica si el punto de interrupción es efectivo en Bootstrap.
///
/// Devuelve `true` si el valor es `SM`, `MD`, `LG`, `XL` o `XXL`.
/// Devuelve `false` si es `None`, `Fluid` o `FluidMax`.
pub fn is_breakpoint(&self) -> bool {
!matches!(
self,
BreakPoint::None | BreakPoint::Fluid | BreakPoint::FluidMax(_)
)
}
/// Genera un nombre de clase CSS basado en el punto de interrupción.
///
/// Si es un punto de interrupción efectivo (ver [`is_breakpoint()`] se concatenan el prefijo
/// proporcionado, un guion (`-`) y el texto asociado al punto de interrupción. En otro caso, se
/// devuelve únicamente el prefijo.
///
/// # Parámetros
///
/// - `prefix`: Prefijo para concatenar con el punto de interrupción.
///
/// # Ejemplo
///
/// ```rust#ignore
/// let breakpoint = BreakPoint::MD;
/// let class = breakpoint.breakpoint_class("col");
/// assert_eq!(class, "col-md".to_string());
///
/// let breakpoint = BreakPoint::Fluid;
/// let class = breakpoint.breakpoint_class("offcanvas");
/// assert_eq!(class, "offcanvas".to_string());
/// ```
pub fn breakpoint_class(&self, prefix: impl Into<String>) -> String {
let prefix: String = prefix.into();
if self.is_breakpoint() {
join_string!(prefix, "-", self.to_string())
} else {
prefix
}
}
}
/// Devuelve el texto asociado al punto de interrupción usado por Bootstrap.