From 12ff6dad862d6e9fa8f0eae9de454026605b42ba Mon Sep 17 00:00:00 2001 From: Ilia Denisov Date: Tue, 23 Jun 2026 00:20:09 +0200 Subject: [PATCH] feat(ui): close the friends kebab on an outside tap A slid-open friend row now collapses when the user taps anywhere outside its action buttons (taps on a kebab are skipped so its own toggle still drives the open/close). Uses the same capture-phase window pointerdown idiom as Screen, active only while a row is revealed. --- ui/src/screens/Friends.svelte | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/ui/src/screens/Friends.svelte b/ui/src/screens/Friends.svelte index 831f3d2..b4cb81d 100644 --- a/ui/src/screens/Friends.svelte +++ b/ui/src/screens/Friends.svelte @@ -80,6 +80,19 @@ if (target) void remove(target.accountId); } + // While a friend row is slid open, a tap anywhere outside its action buttons + // closes it again. Taps on a kebab are skipped so its own toggle stays in charge. + $effect(() => { + if (revealedId === null) return; + function onDown(e: PointerEvent) { + const el = e.target as Element | null; + if (el?.closest('.acts') || el?.closest('.kebab')) return; + revealedId = null; + } + window.addEventListener('pointerdown', onDown, true); + return () => window.removeEventListener('pointerdown', onDown, true); + }); + async function getCode() { try { code = await gateway.friendCodeIssue();