From d15b1be3b9468e4dbaedcd10dc30888970749929 Mon Sep 17 00:00:00 2001 From: 3252a8 <3252a8@proton.me> Date: Thu, 30 Apr 2026 14:05:01 +0300 Subject: [PATCH] fix: click on another button when switching lang --- bot/app/web/frontend/src/App.svelte | 37 ++++++++++++++++++++++++++++- bot/app/web/frontend/src/styles.css | 15 +++++++++++- 2 files changed, 50 insertions(+), 2 deletions(-) diff --git a/bot/app/web/frontend/src/App.svelte b/bot/app/web/frontend/src/App.svelte index 8f786a0..67b2cf9 100644 --- a/bot/app/web/frontend/src/App.svelte +++ b/bot/app/web/frontend/src/App.svelte @@ -244,6 +244,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 = ""; @@ -381,6 +384,7 @@ window.removeEventListener("pointerdown", onAnyPointerDown); clearCooldownTimer("auth"); clearCooldownTimer("link_email"); + clearLanguageClickGuard(); syncBodyScrollLock(false); }; }); @@ -436,6 +440,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("&", "&") @@ -2108,14 +2132,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 5657e77..0f07e55 100644 --- a/bot/app/web/frontend/src/styles.css +++ b/bot/app/web/frontend/src/styles.css @@ -732,6 +732,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; @@ -1067,7 +1080,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));