{#- chirp-ui: Metric grid/card Overview/KPI wrappers for dashboard-style pages. metric_card forwards attrs / attrs_map to the outer card or (e.g. id for HTMX targets). -#} {% from "chirpui/layout.html" import grid %} {% from "chirpui/card.html" import card %} {% from "chirpui/stat.html" import stat %} {% def metric_grid(cols=3, gap="md", cls="") %} {% call grid(cols=cols, gap=gap, cls="chirpui-metric-grid" ~ (" " ~ cls if cls else "")) %} {{ caller() }} {% end %} {% end %} {% def metric_card(value, label, icon=none, trend=none, trend_direction="", hint=none, href=none, icon_bg="", footer_label=none, footer_href=none, cls="", attrs="", attrs_map=none) %} {% if href %}
{% if icon and icon_bg %} {{ icon | icon }} {% end %}
{{ stat(value=value, label=label, icon=icon if not icon_bg else none, cls="chirpui-metric-card__stat") }}
{% if trend %} {% if trend_direction == "up" %}{% elif trend_direction == "down" %}{% end %} {{ trend }} {% end %} {% if hint %}

{{ hint }}

{% endif %}
{% else %} {% call card(cls="chirpui-metric-card" ~ (" " ~ cls if cls else ""), attrs=attrs, attrs_map=attrs_map) %}
{% if icon and icon_bg %} {{ icon | icon }} {% end %}
{{ stat(value=value, label=label, icon=icon if not icon_bg else none, cls="chirpui-metric-card__stat") }}
{% if trend %} {% if trend_direction == "up" %}{% elif trend_direction == "down" %}{% end %} {{ trend }} {% end %} {% if hint %}

{{ hint }}

{% endif %} {% if footer_label %} {{ footer_label }} → {% end %} {% end %} {% endif %} {% end %}