v145 · light dismiss

Which event closed it

Open the popover, then dismiss it however you like — a click outside, a drag, a right-click, Escape. Every pointer and mouse event is recorded, and the moment the popover actually closed is marked in the middle of the sequence.

Record a dismissal

Dismiss the popover by interacting anywhere in this area — a click, a drag, a right-click. Everything that happens here is recorded.
Events, in the order they arrived
#eventbuttontargettrustedms
Nothing recorded yet.
Open the popover to begin.

"Trusted" is event.isTrusted: true for input the user actually produced, false for anything a script dispatched. It matters here because light dismiss only responds to the real thing — which the control below relies on.

The control: dispatched events do nothing

This button opens the popover and then fires a full synthetic sequence at the page behind it — pointerdown, pointerup, click — using constructed events. If light dismiss responded to those, any script on the page could close another script's menu.

Not run yet.

This is also why the automated checks for this page can verify the recording, the open state and the API surface, but not the dismissal itself: the harness has no way to produce a real pointer. The gesture is yours to make.

Reading the sequence

On the corrected behaviour, the close lands with the click — after both pointerdown and pointerup. On the old behaviour it landed on the pointerdown, with the other two arriving afterwards into a popover that was already gone.

That ordering is what makes a drag safe. A touch scroll produces a pointerdown and then a pointercancel — never a click — so nothing dismisses. And a right-click produces pointerdown with button: 2 and a contextmenu, again with no click, so the menu survives long enough for the context menu to appear over it.

see also