import { Controller } from '@hotwired/stimulus'; /** * Contrôleur Stimulus pour le dropdown de connexion * Attache les événements de manière robuste et compatible avec Turbo */ export default class extends Controller { static targets = ['wrapper', 'toggle', 'dropdown']; connect() { this.setupListeners(); // Ouvrir le dropdown s'il y a une erreur de connexion const loginError = this.element.querySelector('.login-error'); if (loginError && this.dropdownTarget) { this.open(); } } setupListeners() { // Clic sur le bouton toggle this.toggleTarget.addEventListener('click', (e) => { e.stopPropagation(); this.toggle(); }); // Clic en dehors du dropdown document.addEventListener('click', (e) => { if (!this.wrapperTarget.contains(e.target)) { this.close(); } }); // Touche Echap document.addEventListener('keydown', (e) => { if (e.key === 'Escape') { this.close(); } }); } toggle() { const isOpen = this.dropdownTarget.classList.contains('open'); isOpen ? this.close() : this.open(); } open() { this.dropdownTarget.classList.add('open'); this.toggleTarget.setAttribute('aria-expanded', 'true'); } close() { this.dropdownTarget.classList.remove('open'); this.toggleTarget.setAttribute('aria-expanded', 'false'); } }