Summary
PR #2677 adds WebKit (Safari's engine) as a second browser for the FW Lite viewer UI Playwright suite (running on Linux). Two UI tests reveal genuine WebKit-specific behavior differences and are temporarily skipped on WebKit (they pass on Chromium). This issue tracks investigating whether each is a real Safari UX bug to fix in the app, or acceptable behavior the test should tolerate.
Both are skipped via test.skip(browserName === 'webkit', ...) with a comment pointing here.
1. Virtualized entry list — selection not preserved on filter clear
Test: frontend/viewer/tests/ui/entries-list.test.ts › "clearing search filter with entry selected keeps entry visible".
Flow: scroll far down the virtualized entry list, filter to a headword, select the row, then clear the filter. On Chromium the selected ([aria-selected="true"]) row stays rendered/visible; on WebKit it is not in the rendered virtual window after the filter clears — the virtualized list's scroll position isn't restored to the selection.
Question to resolve: should the app explicitly scroll/restore the selected entry into view when the filter is cleared, or is losing scroll position acceptable?
2. Duplicate-check jump pill not dismissed after smooth scroll
Test: frontend/viewer/tests/ui/new-entry-duplicates.test.ts › "an out-of-view duplicate strip surfaces a jump pill".
Flow: in the new-entry dialog, an out-of-view duplicate strip surfaces a floating "jump" pill. Clicking it scrollIntoView({behavior:'smooth'})s the duplicate widget into view, which is meant to hide the pill. The pill's visibility is driven by an IntersectionObserver (root = the dialog scroll container, rootMargin: '-16px') in frontend/viewer/src/lib/entry-editor/duplicate-check/DuplicateCheckSection.svelte. Playwright confirms the widget is in the viewport, but on WebKit the observer never reports it as intersecting after the smooth scroll settles, so the pill lingers.
Question to resolve: is this a real Safari issue (e.g. dismiss the pill directly on jump rather than relying solely on the observer, or adjust the observer root/margin), or test timing?
Notes
- Can't easily repro locally on this setup; CI (Linux WebKit) is the signal.
- Once resolved, remove the
test.skip guards.
Summary
PR #2677 adds WebKit (Safari's engine) as a second browser for the FW Lite viewer UI Playwright suite (running on Linux). Two UI tests reveal genuine WebKit-specific behavior differences and are temporarily skipped on WebKit (they pass on Chromium). This issue tracks investigating whether each is a real Safari UX bug to fix in the app, or acceptable behavior the test should tolerate.
Both are skipped via
test.skip(browserName === 'webkit', ...)with a comment pointing here.1. Virtualized entry list — selection not preserved on filter clear
Test:
frontend/viewer/tests/ui/entries-list.test.ts› "clearing search filter with entry selected keeps entry visible".Flow: scroll far down the virtualized entry list, filter to a headword, select the row, then clear the filter. On Chromium the selected (
[aria-selected="true"]) row stays rendered/visible; on WebKit it is not in the rendered virtual window after the filter clears — the virtualized list's scroll position isn't restored to the selection.Question to resolve: should the app explicitly scroll/restore the selected entry into view when the filter is cleared, or is losing scroll position acceptable?
2. Duplicate-check jump pill not dismissed after smooth scroll
Test:
frontend/viewer/tests/ui/new-entry-duplicates.test.ts› "an out-of-view duplicate strip surfaces a jump pill".Flow: in the new-entry dialog, an out-of-view duplicate strip surfaces a floating "jump" pill. Clicking it
scrollIntoView({behavior:'smooth'})s the duplicate widget into view, which is meant to hide the pill. The pill's visibility is driven by anIntersectionObserver(root = the dialog scroll container,rootMargin: '-16px') infrontend/viewer/src/lib/entry-editor/duplicate-check/DuplicateCheckSection.svelte. Playwright confirms the widget is in the viewport, but on WebKit the observer never reports it as intersecting after the smooth scroll settles, so the pill lingers.Question to resolve: is this a real Safari issue (e.g. dismiss the pill directly on jump rather than relying solely on the observer, or adjust the observer root/margin), or test timing?
Notes
test.skipguards.