diff --git a/ucp/assets/ucp.js b/ucp/assets/ucp.js index da3a99d..548d784 100644 --- a/ucp/assets/ucp.js +++ b/ucp/assets/ucp.js @@ -145,7 +145,11 @@ function switchUcpTab(tabName) { btn.className = isMe ? 'ucp-tab-btn px-3.5 py-2 rounded-xl text-xs font-semibold transition flex items-center gap-2 bg-indigo-50 text-indigo-700' : 'ucp-tab-btn px-3.5 py-2 rounded-xl text-xs font-semibold transition flex items-center gap-2 text-slate-600 hover:bg-slate-100'; + if (isMe && typeof btn.scrollIntoView === 'function') { + btn.scrollIntoView({ behavior: 'smooth', inline: 'nearest', block: 'nearest' }); + } }); + setTimeout(updateUcpNavScrollHints, 120); if (tabName === 'voicemail') { loadVoicemailsForSelected(); @@ -989,6 +993,7 @@ if (passwordForm) { if (window.UCP_IS_AUTH) { refreshUcpState(false); + initUcpNavScrollHints(); pollTimer = setInterval(() => { if (!document.hidden) { refreshUcpState(false); @@ -996,3 +1001,33 @@ if (window.UCP_IS_AUTH) { }, 15000); } +function updateUcpNavScrollHints() { + const scroller = document.getElementById('ucp-nav-scroller'); + const leftHint = document.getElementById('ucp-nav-hint-left'); + const rightHint = document.getElementById('ucp-nav-hint-right'); + if (!scroller || !leftHint || !rightHint) return; + + const hasLeft = scroller.scrollLeft > 4; + const hasRight = scroller.scrollLeft + scroller.clientWidth < scroller.scrollWidth - 4; + + leftHint.classList.toggle('hidden', !hasLeft); + leftHint.classList.toggle('flex', hasLeft); + rightHint.classList.toggle('hidden', !hasRight); + rightHint.classList.toggle('flex', hasRight); +} + +function scrollUcpNav(direction) { + const scroller = document.getElementById('ucp-nav-scroller'); + if (!scroller) return; + scroller.scrollBy({ left: direction * 170, behavior: 'smooth' }); +} + +function initUcpNavScrollHints() { + const scroller = document.getElementById('ucp-nav-scroller'); + if (!scroller) return; + scroller.addEventListener('scroll', updateUcpNavScrollHints, { passive: true }); + window.addEventListener('resize', updateUcpNavScrollHints); + requestAnimationFrame(updateUcpNavScrollHints); + setTimeout(updateUcpNavScrollHints, 250); +} + diff --git a/ucp/index.php b/ucp/index.php index eba53cd..d9667d2 100644 --- a/ucp/index.php +++ b/ucp/index.php @@ -53,6 +53,13 @@ $csrfToken = UcpAuth::getCsrfToken(); font-size: 16px !important; } } + .ucp-nav-scroll { + scrollbar-width: none; + -ms-overflow-style: none; + } + .ucp-nav-scroll::-webkit-scrollbar { + display: none; + } ::-webkit-scrollbar { width: 7px; height: 7px; } ::-webkit-scrollbar-track { background: #f1f5f9; } ::-webkit-scrollbar-thumb { background: #cbd5e1; border-radius: 4px; } @@ -179,27 +186,32 @@ $csrfToken = UcpAuth::getCsrfToken(); -

Espace personnel de

+

- -
- -
- +
+ diff --git a/version.json b/version.json index a4dcf7a..e14e429 100644 --- a/version.json +++ b/version.json @@ -1,9 +1,10 @@ { - "version": "2.5.5", + "version": "2.5.6", "codename": "Pulsar UCP", "release_date": "2026-11-11", "min_php_version": "8.2", "changelog": [ + "Correctif v2.5.6 : ergonomie mobile iPhone (en-tête compact + dégradé latéral discret sur la barre d'onglets UCP sans scrollbar visible)", "Correctif v2.5.5 : suppression du zoom automatique iOS/iPhone sur les champs (<16px) et blocage du débordement horizontal mobile dans l'UCP", "Correctif v2.5.4 : correction du journal personnel UCP « Mes Appels » (correspondance caller_number/callee_number/canaux PJSIP et filtres Répondus/Manqués)", "Nouveauté v2.5.3 : onglet UCP « Notice & Codes » avec mémo pas-à-pas, codes de fonction dynamiques et export PDF / impression A4 corporate (logo, encarts, poste utilisateur)",