{# 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 %}