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(); = htmlspecialchars($companyName ?: 'NexusPBX') ?> UCP -
Espace personnel de = htmlspecialchars((string)($currentUser['display_name'] ?: $currentUser['username'])) ?>
+Espace personnel de = htmlspecialchars((string)($currentUser['display_name'] ?: $currentUser['username'])) ?>