From 13361c098cc752b7865deeef6647082709966087 Mon Sep 17 00:00:00 2001 From: Ilia Denisov Date: Tue, 9 Jun 2026 00:39:54 +0200 Subject: [PATCH] Stage 17 #5: make the active-row chevron open the game (not a no-op) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Owner review: the '>' on an active game row should be a real tap target that opens the game, like the rest of the row — not inert. The chevron now navigates (kept out of the tab order / a11y tree since the row's main button already does the same), and active-row swipes no longer suppress the tap. Adds an e2e for the chevron navigation. --- ui/e2e/social.spec.ts | 7 +++++++ ui/src/screens/Lobby.svelte | 13 ++++++++++--- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/ui/e2e/social.spec.ts b/ui/e2e/social.spec.ts index b89fd68..f9756f2 100644 --- a/ui/e2e/social.spec.ts +++ b/ui/e2e/social.spec.ts @@ -107,6 +107,13 @@ test('lobby: hiding a finished game removes it (kebab → ❌), keeping the othe await expect(page.locator('.rowwrap', { hasText: 'Rick' })).toBeVisible(); }); +test('lobby: the active-row chevron opens the game (not a no-op)', async ({ page }) => { + await loginLobby(page); + // The inert-looking '>' on an active row is a tap target that opens the game, like the row. + await page.locator('.rowwrap', { hasText: 'Ann' }).locator('.chev').click(); + await expect(page.locator('[data-cell]').first()).toBeVisible(); +}); + test('lobby hamburger shows the pending notification count', async ({ page }) => { await loginLobby(page); // One incoming friend request (Rick) + one invitation (Kaya) = 2. diff --git a/ui/src/screens/Lobby.svelte b/ui/src/screens/Lobby.svelte index 236d421..11248e4 100644 --- a/ui/src/screens/Lobby.svelte +++ b/ui/src/screens/Lobby.svelte @@ -79,9 +79,11 @@ if (!drag) return; const dx = e.clientX - drag.x0; const dy = e.clientY - drag.y0; - if (Math.abs(dx) > 40 && Math.abs(dx) > Math.abs(dy) * 1.4) { + // Only a finished row reveals on a horizontal swipe; that swipe then suppresses the tap so it + // does not also open the game. Active rows ignore swipes and stay plain tap-to-open. + if (finished && Math.abs(dx) > 40 && Math.abs(dx) > Math.abs(dy) * 1.4) { swiped = true; - revealedId = dx < 0 && finished ? drag.id : null; + revealedId = dx < 0 ? drag.id : null; } drag = null; } @@ -207,7 +209,9 @@ {#if group.finished} {:else} - + + {/if} @@ -341,6 +345,9 @@ .chev { flex: 0 0 auto; width: 30px; + padding: 10px 0; + border: none; + background: none; text-align: center; color: var(--text-muted); font-size: 1.4rem;