diff --git a/bot/app/web/frontend/src/App.svelte b/bot/app/web/frontend/src/App.svelte index 93e2a1d..beee7f6 100644 --- a/bot/app/web/frontend/src/App.svelte +++ b/bot/app/web/frontend/src/App.svelte @@ -255,6 +255,9 @@ let authResendCooldown = 0; let authResendTimer = null; let languageBusy = false; + let languageMenuOpen = false; + let languageClickGuard = false; + let languageClickGuardTimer = null; let email = ""; let pendingEmail = ""; let emailCode = ""; @@ -521,6 +524,7 @@ window.removeEventListener("pointerdown", onAnyPointerDown); clearCooldownTimer("auth"); clearCooldownTimer("link_email"); + clearLanguageClickGuard(); syncBodyScrollLock(false); }; }); @@ -576,6 +580,26 @@ } } + function clearLanguageClickGuard() { + if (languageClickGuardTimer) { + window.clearTimeout(languageClickGuardTimer); + languageClickGuardTimer = null; + } + } + + function setLanguageMenuOpen(open) { + languageMenuOpen = Boolean(open); + clearLanguageClickGuard(); + if (languageMenuOpen) { + languageClickGuard = true; + return; + } + languageClickGuardTimer = window.setTimeout(() => { + languageClickGuard = false; + languageClickGuardTimer = null; + }, 260); + } + function escapeHtml(value) { return String(value) .replaceAll("&", "&") @@ -2603,14 +2627,25 @@ {/if} -
+ {#if languageMenuOpen || languageClickGuard} + + {/if} +
diff --git a/bot/app/web/frontend/src/styles.css b/bot/app/web/frontend/src/styles.css index f4234a1..726f35b 100644 --- a/bot/app/web/frontend/src/styles.css +++ b/bot/app/web/frontend/src/styles.css @@ -942,6 +942,19 @@ a { gap: 8px; } +.settings-list.settings-list--language-open .settings-row:not(.settings-row-language) { + pointer-events: none; +} + +.language-select-guard { + position: fixed; + inset: 0; + z-index: 100; + border: 0; + background: transparent; + padding: 0; +} + .copy-row, .email-row { display: grid; @@ -1277,7 +1290,7 @@ a { } .language-select-content { - z-index: 60; + z-index: 140; width: min(210px, calc(100vw - 28px)); min-width: 170px; max-width: min(210px, calc(100vw - 28px));