use crate::components::capsule::CapsuleElementBuilder;
use crate::components::capsule_variant::CapsuleVariant;
use crate::core::Element;
pub type BadgeVariant = CapsuleVariant;
#[derive(Debug, Clone)]
pub struct Badge {
text: String,
variant: BadgeVariant,
pill: bool,
}
impl Badge {
pub fn new(text: impl Into<String>) -> Self {
Self {
text: text.into(),
variant: BadgeVariant::Default,
pill: false,
}
}
pub fn variant(mut self, variant: BadgeVariant) -> Self {
self.variant = variant;
self
}
pub fn pill(mut self) -> Self {
self.pill = true;
self
}
pub fn into_element(self) -> Element {
let (fg, bg) = self.variant.badge_colors();
if self.pill {
CapsuleElementBuilder::new(self.text, fg, bg).into_element()
} else {
CapsuleElementBuilder::new(self.text, fg, bg)
.wrapped("[", "]")
.into_element()
}
}
}
impl Default for Badge {
fn default() -> Self {
Self::new("")
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_badge_creation() {
let badge = Badge::new("5");
assert_eq!(badge.text, "5");
}
#[test]
fn test_badge_variant() {
let badge = Badge::new("New").variant(BadgeVariant::Success);
assert_eq!(badge.variant, BadgeVariant::Success);
}
#[test]
fn test_badge_into_element() {
let badge = Badge::new("Test").variant(BadgeVariant::Primary);
let _ = badge.into_element();
}
}