The shared dismissal lifecycle behind transient surfaces (popovers, menus,
peeks): while it lives it watches a configurable set of dismiss signals
(Escape / extra keys, outside-pointerdown with an optional grace window,
window resize, focus moving outside) and calls onDismiss. Inside/outside is
decided by an isInside predicate (geometry) or a contains check against
elements. Dispose to detach every listener.
It owns only the signals, not the surface element, its position, or any
hover/keep-open policy, so callers keep their own element lifecycle and
layer this underneath.
The shared dismissal lifecycle behind transient surfaces (popovers, menus, peeks): while it lives it watches a configurable set of dismiss signals (Escape / extra keys, outside-pointerdown with an optional grace window, window resize, focus moving outside) and calls
onDismiss. Inside/outside is decided by anisInsidepredicate (geometry) or acontainscheck againstelements. Dispose to detach every listener.It owns only the signals, not the surface element, its position, or any hover/keep-open policy, so callers keep their own element lifecycle and layer this underneath.