import { Controller } from '@hotwired/stimulus'; /** * Navigation mobile : panneau + backdrop, verrouillage du scroll (≤900px). */ export default class extends Controller { static targets = ['panel', 'backdrop', 'toggle']; connect() { this._keydown = this._onKeydown.bind(this); this._resize = this._apply.bind(this); this._open = false; window.addEventListener('resize', this._resize); this._apply(); } disconnect() { window.removeEventListener('resize', this._resize); document.removeEventListener('keydown', this._keydown); document.body.classList.remove('site-nav-no-scroll'); } toggle() { if (!this._isMobile()) { return; } this._open = !this._open; this._apply(); } close(event) { if (event) { event.preventDefault(); } this._open = false; this._apply(); } closeOnLink(event) { const link = event.target.closest('a[href]'); if (link && this._isMobile()) { this._open = false; this._apply(); } } /** Aligné sur le CSS : si le burger est affiché, on est en mode tiroir (évite les écarts matchMedia vs viewport sur mobile). */ _isMobile() { if (this.hasToggleTarget) { return getComputedStyle(this.toggleTarget).display !== 'none'; } return window.matchMedia('(max-width: 900px)').matches; } _apply() { const mobile = this._isMobile(); if (!mobile) { this._open = false; this.panelTarget?.classList.remove('site-nav__panel--open'); this.backdropTarget?.classList.remove('site-nav__backdrop--visible'); document.body.classList.remove('site-nav-no-scroll'); document.removeEventListener('keydown', this._keydown); if (this.hasBackdropTarget) { this.backdropTarget.setAttribute('aria-hidden', 'true'); } if (this.hasToggleTarget) { this.toggleTarget.setAttribute('aria-expanded', 'false'); this.toggleTarget.setAttribute('aria-label', 'Ouvrir le menu de navigation'); } return; } document.removeEventListener('keydown', this._keydown); this.panelTarget?.classList.toggle('site-nav__panel--open', this._open); this.backdropTarget?.classList.toggle('site-nav__backdrop--visible', this._open); document.body.classList.toggle('site-nav-no-scroll', this._open); if (this.hasBackdropTarget) { this.backdropTarget.setAttribute( 'aria-hidden', this._open ? 'false' : 'true' ); } if (this.hasToggleTarget) { this.toggleTarget.setAttribute('aria-expanded', this._open ? 'true' : 'false'); this.toggleTarget.setAttribute( 'aria-label', this._open ? 'Fermer le menu de navigation' : 'Ouvrir le menu de navigation' ); } if (this._open) { document.addEventListener('keydown', this._keydown); } } _onKeydown(event) { if (event.key === 'Escape') { this.close(); } } }
Fatal error: Uncaught TypeError: Invalid return value: callable object expected, "int" returned from "/app/public/assets/controllers/site_nav_controller-NZcs9jM.js". in /app/vendor/autoload_runtime.php:12 Stack trace: #0 /app/public/index.php(5): require_once() #1 {main} thrown in /app/vendor/autoload_runtime.php on line 12