{#
SAM Avatar Component - Unified avatar for entities
Parameters:
- type: string (required) - Entity type: 'user', 'cohort', 'course'
- initials: string - Text to display (1-2 characters)
- size: string - Size: 'sm' (28px), 'md' (36px), 'lg' (48px), 'xl' (64px) - default: md
- suspended: bool - Show suspended state (grayscale)
- url: string - Optional link URL
- title: string - Tooltip text
Usage:
{% include 'sam/_components/avatar.html.twig' with {type: 'user', initials: 'JD', size: 'md'} %}
{% include 'sam/_components/avatar.html.twig' with {type: 'cohort', initials: 'FO', suspended: true} %}
#}
{% set sizes = {
'sm': 28,
'md': 36,
'lg': 48,
'xl': 64
} %}
{% set fontSizes = {
'sm': 10,
'md': 13,
'lg': 16,
'xl': 22
} %}
{% set avatarSize = size|default('md') %}
{% set pixelSize = sizes[avatarSize]|default(36) %}
{% set fontSize = fontSizes[avatarSize]|default(13) %}
{% set avatarClasses = ['sam-avatar', 'sam-avatar--' ~ type|default('user'), 'sam-avatar--' ~ avatarSize] %}
{% if suspended|default(false) %}
{% set avatarClasses = avatarClasses|merge(['sam-avatar--suspended']) %}
{% endif %}
{% set avatarStyles = [
'width: ' ~ pixelSize ~ 'px',
'height: ' ~ pixelSize ~ 'px',
'font-size: ' ~ fontSize ~ 'px'
] %}
{% set content %}
{{ initials|default('?')|upper|slice(0, 2) }}
{% endset %}
{% if url is defined and url %}
{{ content|raw }}
{% else %}
{{ content|raw }}
{% endif %}