pcbjam/tests/web/overlay-menu.ts
Gergő Törcsvári f4d3c3f146
collab-presence 0010: unified draggable overlay menu
One circular FAB (peer-count badge) replaces the top-right overlay row:
draggable anywhere (pointer capture, 4px click-vs-drag threshold — the
comment-pin pattern), position persisted in localStorage, panel opens
toward screen center and stacks composable sections — roster, source chip,
view-only pill, follow row, comments, chrome toggle. Renders at z-50 above
everything (decided: covers wx dialogs; trivially dismissed via click-away/
Esc/drag). CommentLayer portals its bar + list panel into the menu's
comments slot; pins/popovers/composer/click-catcher stay canvas-anchored.
The FAB is the chrome-hidden survivor. e2e specs updated with an
openOverlayMenu helper (panel is closed by default, click-away closes it).

NOTE: Playwright suites updated but not executed here (no local WASM
artifacts) — verify on CI / next session.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A42xfPFNdfsUt9eowkC9eM
2026-07-16 17:25:56 +02:00

16 lines
767 B
TypeScript

import { expect, type Page } from '@playwright/test';
/**
* Open the overlay menu (collab-presence 0010) if its panel isn't already
* open. The roster, source chip, view-only pill, comment bar and chrome
* toggle live inside the panel; the FAB (with the peer-count badge) is the
* only overlay control always on screen. Any canvas click closes the panel
* (click-away), so specs re-open it before each in-panel interaction.
*/
export async function openOverlayMenu(page: Page): Promise<void> {
const fab = page.getByTestId('overlay-menu-fab');
await expect(fab).toBeVisible({ timeout: 30000 });
if (await page.getByTestId('overlay-menu-panel').count()) return;
await fab.click();
await expect(page.getByTestId('overlay-menu-panel')).toBeVisible();
}