{#- chirp-ui: Badge component
Small status indicators with semantic variants and optional icons.
Usage:
from "chirpui/badge.html" import badge
badge("Active", variant="success")
badge("Grass", color="#78c850")
badge("Fire", color="fire", fill="solid")
badge("Tag", href="/tags/x")
-#}
{% def badge(text, variant="primary", appearance="", tone="", icon=none, cls="", color=none, fill="subtle", href=none) %}
{# @consumes _card_variant from: card, _surface_variant from: panel, surface — falls back to "" #}
{% set _inherited = consume("_card_variant", "") or consume("_surface_variant", "") %}
{% set _variant = variant if variant != "primary" else (_inherited if _inherited else variant) %}
{% set _appearance = appearance | validate_appearance_block("badge", "") %}
{% set _tone = tone | validate_tone_block("badge", "") %}
{% set fill = fill | validate_variant(("subtle", "solid"), "subtle") %}
{% set resolved = color | resolve_color %}
{% set use_variant = ("custom-solid" if (resolved and fill == "solid") else ("custom" if resolved else (_variant | validate_variant_block("badge", "primary")))) %}
{% set style_attr = ("--chirpui-badge-color: " ~ resolved ~ ("; --chirpui-badge-text: " ~ (resolved | contrast_text) if fill == "solid" else "")) if resolved else "" %}
{% set badge_class = "badge" | bem(variant=use_variant, appearance=_appearance, tone=_tone, cls=cls) %}
{% if href %}
{% if icon %}
{{ icon | icon }}
{% end %}
{{ text }}
{% else %}
{% if icon %}
{{ icon | icon }}
{% end %}
{{ text }}
{% end %}
{% end %}