//! Definiciones para crear barras de navegación [`Navbar`].
//!
//! Cada [`navbar::Item`](crate::theme::navbar::Item) representa un elemento individual de la barra
//! de navegación [`Navbar`], con distintos comportamientos según su finalidad, como menús
//! [`Nav`](crate::theme::Nav) o textos localizados usando [`L10n`](pagetop::locale::L10n).
//!
//! También puede mostrar una marca de identidad ([`navbar::Brand`](crate::theme::navbar::Brand))
//! que identifique la compañía, producto o nombre del proyecto asociado a la solución web.
//!
//! # Ejemplos
//!
//! Barra **simple**, sólo con un menú horizontal:
//!
//! ```rust
//! # use pagetop::prelude::*;
//! # use pagetop_bootsier::prelude::*;
//! let navbar = Navbar::simple()
//!     .add_item(navbar::Item::nav(
//!         Nav::new()
//!             .add_item(nav::Item::link(L10n::n("Home"), |_| "/"))
//!             .add_item(nav::Item::link(L10n::n("About"), |_| "/about"))
//!             .add_item(nav::Item::link(L10n::n("Contact"), |_| "/contact"))
//!     ));
//! ```
//!
//! Barra **colapsable**, con botón de despliegue y contenido en el desplegable cuando colapsa:
//!
//! ```rust
//! # use pagetop::prelude::*;
//! # use pagetop_bootsier::prelude::*;
//! let navbar = Navbar::simple_toggle()
//!     .with_expand(BreakPoint::MD)
//!     .add_item(navbar::Item::nav(
//!         Nav::new()
//!             .add_item(nav::Item::link(L10n::n("Home"), |_| "/"))
//!             .add_item(nav::Item::link_blank(L10n::n("Docs"), |_| "https://docs.example.com"))
//!             .add_item(nav::Item::link(L10n::n("Support"), |_| "/support"))
//!     ));
//! ```
//!
//! Barra con **marca de identidad a la izquierda** y menú a la derecha, típica de una cabecera:
//!
//! ```rust
//! # use pagetop::prelude::*;
//! # use pagetop_bootsier::prelude::*;
//! let brand = navbar::Brand::new()
//!     .with_title(L10n::n("PageTop"))
//!     .with_path(Some(|_| "/"));
//!
//! let navbar = Navbar::brand_left(brand)
//!     .add_item(navbar::Item::nav(
//!         Nav::new()
//!             .add_item(nav::Item::link(L10n::n("Home"), |_| "/"))
//!             .add_item(nav::Item::dropdown(
//!                 Dropdown::new()
//!                     .with_title(L10n::n("Tools"))
//!                     .add_item(dropdown::Item::link(L10n::n("Generator"), |_| "/tools/gen"))
//!                     .add_item(dropdown::Item::link(L10n::n("Reports"), |_| "/tools/reports"))
//!             ))
//!             .add_item(nav::Item::link_disabled(L10n::n("Disabled"), |_| "#"))
//!     ));
//! ```
//!
//! Barra con **botón de despliegue a la izquierda** y **marca de identidad a la derecha**:
//!
//! ```rust
//! # use pagetop::prelude::*;
//! # use pagetop_bootsier::prelude::*;
//! let brand = navbar::Brand::new()
//!     .with_title(L10n::n("Intranet"))
//!     .with_path(Some(|_| "/"));
//!
//! let navbar = Navbar::brand_right(brand)
//!     .with_expand(BreakPoint::LG)
//!     .add_item(navbar::Item::nav(
//!         Nav::pills()
//!             .add_item(nav::Item::link(L10n::n("Dashboard"), |_| "/dashboard"))
//!             .add_item(nav::Item::link(L10n::n("Users"), |_| "/users"))
//!     ));
//! ```
//!
//! Barra con el **contenido en un *offcanvas***, ideal para dispositivos móviles o menús largos:
//!
//! ```rust
//! # use pagetop::prelude::*;
//! # use pagetop_bootsier::prelude::*;
//! let oc = Offcanvas::new()
//!     .with_id("main_offcanvas")
//!     .with_title(L10n::n("Main menu"))
//!     .with_placement(offcanvas::Placement::Start)
//!     .with_backdrop(offcanvas::Backdrop::Enabled);
//!
//! let navbar = Navbar::offcanvas(oc)
//!     .add_item(navbar::Item::nav(
//!         Nav::new()
//!             .add_item(nav::Item::link(L10n::n("Home"), |_| "/"))
//!             .add_item(nav::Item::link(L10n::n("Profile"), |_| "/profile"))
//!             .add_item(nav::Item::dropdown(
//!                 Dropdown::new()
//!                     .with_title(L10n::n("More"))
//!                     .add_item(dropdown::Item::link(L10n::n("Settings"), |_| "/settings"))
//!                     .add_item(dropdown::Item::link(L10n::n("Help"), |_| "/help"))
//!             ))
//!     ));
//! ```
//!
//! Barra **fija arriba**:
//!
//! ```rust
//! # use pagetop::prelude::*;
//! # use pagetop_bootsier::prelude::*;
//! let brand = navbar::Brand::new()
//!     .with_title(L10n::n("Main App"))
//!     .with_path(Some(|_| "/"));
//!
//! let navbar = Navbar::brand_left(brand)
//!     .with_position(navbar::Position::FixedTop)
//!     .add_item(navbar::Item::nav(
//!         Nav::new()
//!             .add_item(nav::Item::link(L10n::n("Dashboard"), |_| "/"))
//!             .add_item(nav::Item::link(L10n::n("Donors"), |_| "/donors"))
//!             .add_item(nav::Item::link(L10n::n("Stock"), |_| "/stock"))
//!     ));
//! ```

mod props;
pub use props::{Layout, Position};

mod brand;
pub use brand::Brand;

mod component;
pub use component::Navbar;

mod item;
pub use item::Item;
