{% props name: String, initials: String, href: String = "", size: String = "", photo: String = "", meta: Vec<String> = Vec::new(), masked: bool = false, flags: Slot = Slot::default(), aside: Slot = Slot::default() %}
{#- size: "" (lists, tables) or "lg" (the record page's h1); meta: two to four facts that tell similar records apart; flags: up to three Badges; masked shows initials for the name and photo; aside: trailing content (a badge). #}
{%- let shown = if masked { initials.clone() } else { name.clone() } %}
<div class="ui-identity"{% if !size.is_empty() %} data-size="{{ size }}"{% end %}>
<span class="ui-avatar"{% if size == "lg" %} data-size="xl"{% end %}>{% if !photo.is_empty() && !masked %}<img src="{{ photo }}" alt="">{% else %}<span class="ui-avatar-fallback">{{ initials }}</span>{% end %}</span>
<div class="ui-identity-text">
{%- if size == "lg" %}
<h1 class="ui-identity-name" style="margin:0">{{ shown }}</h1>
{%- else %}{% if !href.is_empty() %}
<a class="ui-identity-name" href="{{ href }}">{{ shown }}</a>
{%- else %}
<span class="ui-identity-name">{{ shown }}</span>
{%- end %}{% end %}
{%- if masked || !meta.is_empty() %}
<div class="ui-identity-meta">{% if masked %}<span class="ui-identity-masked"><svg class="ui-icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49"/><path d="M14.084 14.158a3 3 0 0 1-4.242-4.242"/><path d="M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143"/><path d="m2 2 20 20"/></svg>Name hidden</span>{% end %}{% for fact in meta.iter() %}<span>{{ fact }}</span>{% end %}</div>
{%- end %}
{%- if flags != Slot::default() %}
<div class="ui-identity-flags">{{ flags }}</div>
{%- end %}
</div>
{{ aside }}
</div>