{# # ============================================================================ # ORGANISM: LOGIN FORM # ============================================================================ # # Formulaire de connexion complet pour la page d'authentification. # Combine les atomes input, checkbox, button et les molécules back-link, form-link. # # ============================================================================ # COMPOSITION (Molécules et Atomes utilisés) # ============================================================================ # # - _atoms/link/link.html.twig # - _atoms/form/input.html.twig # - _atoms/form/checkbox.html.twig # - _atoms/button/button.html.twig # - _atoms/logo/logo.html.twig # # ============================================================================ # PARAMÈTRES # ============================================================================ # # | Paramètre | Type | Défaut | Description | # |-------------------|--------|---------------------|--------------------------------| # | action | string | '#' | URL d'action du formulaire | # | lastUsername | string | '' | Dernier email saisi | # | csrfToken | string | '' | Token CSRF | # | targetPath | string | '/dashboard' | Redirection après connexion | # | backLinkUrl | string | '/' | URL du lien retour | # | backLinkLabel | string | 'Retour à l'accueil'| Texte du lien retour | # | forgotPasswordUrl | string | '#' | URL mot de passe oublié | # | registerUrl | string | null | URL inscription (null = caché) | # | class | string | '' | Classes additionnelles | # # ============================================================================ #} {# Configuration des valeurs par défaut #} {% set action = action ?? '#' %} {% set lastUsername = lastUsername ?? '' %} {% set csrfToken = csrfToken ?? '' %} {% set targetPath = targetPath ?? '/dashboard' %} {% set backLinkUrl = backLinkUrl ?? '/' %} {% set backLinkLabel = backLinkLabel ?? 'Retour à l\'accueil' %} {% set forgotPasswordUrl = forgotPasswordUrl ?? '#' %} {% set registerUrl = registerUrl ?? null %} {% set class = class ?? '' %} {% set containerClasses = [ 'w-full max-w-md mx-auto', 'px-4 py-5 sm:px-6 sm:py-8 lg:px-8 lg:py-12', class ]|join(' ')|trim %}
{# ===== Lien retour — flottant en haut à gauche du viewport ===== #} {{ backLinkLabel }} {# ===== Logo Bubul — cliquable, taille modérée (scale mobile) ===== #}
{% include '_atoms/logo/logo-with-text.html.twig' with { showIcon: true, showBadge: false, size: 'lg' } only %}
{# ===== Formulaire ===== #}
{# Email #} {% include '_atoms/form/input.html.twig' with { type: 'email', name: '_username', id: 'email', placeholder: 'Identifiant', value: lastUsername, required: true, icon: 'mail', iconPosition: 'left', attr: { autofocus: 'autofocus' } } only %} {# Mot de passe #} {% include '_atoms/form/input.html.twig' with { type: 'password', name: '_password', id: 'password', icon: 'key', iconPosition: 'left', placeholder: 'Mot de passe', required: true } only %} {# Mot de passe oublié #}
{% include '_atoms/link/link.html.twig' with { label: 'Mot de passe oublié ?', href: forgotPasswordUrl, variant: 'muted', size: 'sm' } only %}
{# Champs cachés #} {# Bouton de connexion #}
{% include '_atoms/button/button.html.twig' with { label: 'Se connecter', type: 'submit', variant: 'primary', size: 'lg', width: 'full', radius: 'lg' } only %}
{# ===== Séparateur ===== #}
ou
{# ===== SSO Google ===== #}
{# Logo Google SVG officiel #} Continuer avec Google
{# ===== Lien inscription (optionnel) ===== #} {% if registerUrl %}
Pas encore de compte ? {% include '_atoms/link/link.html.twig' with { label: 'S\'inscrire', href: registerUrl, variant: 'primary', size: 'sm' } only %}
{% endif %}