The shared engine treats every panel as an ARIA menu and preventDefault'd
single-char + arrow keys, so typing in a panel with inputs (the zap
comment/amount fields) was swallowed — "you can't type in the popup".
handleMenuKeydown now ignores editable targets.
Also relocate a pre-existing in-host panel (the in-modal zap dialog) into
the body-level portal on open so position:fixed is viewport-relative
instead of anchoring to the modal edge, restoring it on close. Pure DOM
helpers extracted to popoverPanelDom.js to keep the engine under its cap.
Co-Authored-By: Claude Opus 4.8 <[email protected]>
- Updated `js/ui/overlay/popoverEngine.js` to use `fallbackStrategy: "bestFit"` in `flip` middleware, ensuring popovers choose the most visible placement when space is constrained.
- Updated `tests/e2e/popover.spec.ts` to enforce a tall body with top padding and scroll the trigger to the bottom of the viewport, creating a deterministic environment for testing popover flipping.
- Unskipped the "keeps the bottom-right grid menu inside the viewport" test case.
Co-authored-by: PR0M3TH3AN <[email protected]>
- Guard `js/ui/overlay/popoverEngine.js` against missing `window` and detached elements in `updatePosition`.
- Update `js/ui/components/VideoModal.js` `normalizeVideoTags` to strip `#` prefix, aligning with test expectations and display logic.
- Mock `HTMLCanvasElement.prototype.getContext` in `tests/video-modal-accessibility.test.mjs` to silence benign warnings.
Co-authored-by: PR0M3TH3AN <[email protected]>