use crate::AutoDefault;
use crate::html::{Markup, Props, html};
/// Representación SVG del **logotipo de PageTop** para incrustar en HTML.
///
/// # Ejemplo
///
/// ```rust,no_run
/// # use pagetop::prelude::*;
/// fn render_logo() -> Markup {
/// html! {
/// div class="logo_color" {
/// (PageTopSvg::Color.markup())
/// }
/// div class="line_dark" {
/// (PageTopSvg::LineDark.markup())
/// }
/// div class="line_light" {
/// (PageTopSvg::LineLight.markup())
/// }
/// div class="line_red" {
/// (PageTopSvg::LineRGB(255, 0, 0).markup())
/// }
/// }
/// };
/// ```
#[derive(AutoDefault, Clone, Copy, Debug, PartialEq)]
pub enum PageTopSvg {
/// Versión por defecto con el logotipo a color.
#[default]
Color,
/// Versión monocroma (línea) oscura, ideal sobre fondos claros.
LineDark,
/// Versión monocroma (línea) clara, ideal sobre fondos oscuros.
LineLight,
/// Versión monocroma configurable por RGB.
LineRGB(u8, u8, u8),
}
impl PageTopSvg {
/// Devuelve el marcado SVG del logotipo según la variante elegida.
pub fn markup(&self) -> Markup {
html! {
svg
viewBox="0 0 1614 1614"
xmlns="http://www.w3.org/2000/svg"
role="img"
aria-label="PageTop"
preserveAspectRatio="xMidYMid slice"
focusable="false"
{
(self.path_fills())
}
}
}
/// Igual que [`markup()`], pero fusiona [`Props`] (identificador, clases, estilo, atributos)
/// directamente en el `