{#
Status Badge macro — canonical renderer (cycle 238 → CSS refactor).
Single source of truth for every status/enum/state rendering across
the template set. 19 import sites; one macro touches all of them.
v0.62 CSS refactor: this macro previously emitted Tailwind
arbitrary-value classes (`bg-[hsl(var(--success)/0.12)]`) that the
Tailwind JIT couldn't see when downstream consumers built their
bundles. Now emits semantic class names (`.dz-badge` plus a
`data-dz-tone` attribute) styled by `components/badge.css`.
Usage:
{% from 'macros/status_badge.html' import render_status_badge %}
{{ render_status_badge(value="todo") }}
{{ render_status_badge(value="done", size="sm") }}
{{ render_status_badge(value=item.priority, bordered=true, display="URGENT") }}
Arguments:
value — raw enum / state / boolean value (e.g. "in_progress").
Resolves to a tone via the `badge_tone` filter; also
used for the aria-label fallback. Empty/None renders
an em-dash placeholder.
tone — optional tone override. One of:
"neutral" | "success" | "warning" | "info" | "destructive"
size — "sm" | "md" (default "md").
bordered — when true, adds a 1px border in the same tone.
display — optional override for the visible text. Defaults to
value|humanize.
#}
{% macro render_status_badge(value, tone=None, size="md", bordered=False, display=None) -%}
{%- if value in (None, "", "—") -%}
—
{%- else -%}
{%- set _tone = tone or (value | badge_tone) -%}
{%- set _label = display if display is not none else (value | humanize) -%}
{%- set _size_class = "dz-badge-sm" if size == "sm" else "" -%}
{%- set _border_class = "bordered" if bordered else "" -%}
{{ _label }}
{%- endif -%}
{%- endmacro -%}