{# # ============================================================================ # MOLECULE: SIDEBAR USER CARD # ============================================================================ # # Bloc unifié dans le footer de la sidebar : nom + abonnement, qui ouvre # un popover avec toutes les actions (paramètres, abonnement, switch # plateforme, support). Comportement identique en expanded et en collapsed # — le clic ouvre le même menu, seul le rendu du trigger change. # # Le design adopte le langage glassmorphism de la sidebar (translucide, # bordures ton-sur-ton, hover en gradient subtil). # # ============================================================================ # COMPOSITION # ============================================================================ # # - _atoms/icon/icon.html.twig # - _atoms/logo/logo.html.twig # - assets/controllers/shared/popover_controller.js # # ============================================================================ # PARAMÈTRES # ============================================================================ # # | Paramètre | Type | Défaut | Description | # |------------------|---------|----------|--------------------------------------| # | name | string | '' | Nom complet de l'utilisateur | # | initials | string | dérivé | Initiales (collapsed) | # | planLabel | string | '' | Texte d'abonnement | # | planGradient | string | null | CSS background du plan | # | variant | string | 'bubul' | 'bubul' ou 'sam' — pilote le thème | # | menuItems | array | [] | Items du popover : | # | | | | { label, href, icon, tint, badge } | # # ============================================================================ #} {% set name = name ?? '' %} {% set planLabel = planLabel ?? '' %} {% set planGradient = planGradient ?? null %} {% set variant = variant ?? 'bubul' %} {% set menuItems = menuItems ?? [] %} {% set initialsParts = name|trim|split(' ')|filter(p => p|length > 0) %} {% set initials = initials ?? ( initialsParts|length >= 2 ? (initialsParts[0]|first ~ initialsParts[1]|first)|upper : (name|slice(0, 2))|upper ) %} {% set collapsedTooltip = name ~ (planLabel ? ' · ' ~ planLabel : '') %} {# Thématisation par contexte (Bubul / SAM) — base solide + accent thème au hover #} {% if variant == 'sam' %} {% set triggerHoverBorder = 'hover:border-violet-300/50' %} {% set panelBorder = 'border border-violet-200/50' %} {% else %} {% set triggerHoverBorder = 'hover:border-primary/30' %} {% set panelBorder = 'border border-primary/15' %} {% endif %} {% set hasBadge = false %} {% for item in menuItems %} {% if item.badge|default(0) > 0 %}{% set hasBadge = true %}{% endif %} {% endfor %}
{# ==================================================================== TRIGGER EXPANDED — carte avec avatar initiales, ombre légère, hover net ==================================================================== #} {# ==================================================================== TRIGGER COLLAPSED — pastille initiales (gardée colorée, c'est le seul accent visible quand la sidebar est repliée) ==================================================================== #} {# ==================================================================== PANEL — menu déroulant, contenu identique en expanded et collapsed Position : au-dessus de la carte (expanded) / à droite (collapsed) ==================================================================== #}