unhover method
Takes the mouse off the screen, so everything it was over gets its exit.
Held like hover, because an exit runs on a timer too — a Tooltip
dismisses on one — and an unhover that only settled would capture the
tooltip still up. With no mouse on the screen it moves nothing and takes
no automatic shot: that is already the state it was asked for. The step
names what the mouse was parked over, so the flow reads unhover "Save".
Implementation
Future<void> unhover({Duration? hold, Shot? shot, Settle? settle}) => _step(
shot,
settle,
() async {
if (_mouse.at == null) return;
await _mouse.leave();
await _elapse(hold ?? _hoverHold);
},
verb: 'unhover',
target: _mouse.hovering,
autoShotNeedsChange: true,
);