'use strict'; // ── Drag & drop upload ──────────────────────────────────────── document.querySelectorAll('.drop-zone').forEach(zone => { const input = zone.querySelector('input[type="file"]'); zone.addEventListener('click', () => input?.click()); zone.addEventListener('dragover', e => { e.preventDefault(); zone.classList.add('dragover'); }); zone.addEventListener('dragleave', () => zone.classList.remove('dragover')); zone.addEventListener('drop', e => { e.preventDefault(); zone.classList.remove('dragover'); if (input && e.dataTransfer.files.length) { input.files = e.dataTransfer.files; input.dispatchEvent(new Event('change')); } }); input?.addEventListener('change', () => { const file = input.files[0]; if (file) { const label = zone.querySelector('.drop-zone-label'); if (label) label.textContent = file.name; } }); }); // ── Confirmation avant soumission finale ────────────────────── document.querySelectorAll('[data-confirm]').forEach(el => { el.addEventListener('click', e => { if (!confirm(el.dataset.confirm)) { e.preventDefault(); } }); }); // ── Auto-dismiss alertes flash après 5s ────────────────────── setTimeout(() => { document.querySelectorAll('.alert.alert-success, .alert.alert-info').forEach(alert => { const bsAlert = bootstrap.Alert.getOrCreateInstance(alert); bsAlert.close(); }); }, 5000);