hold method
Holds the viewer while the app keeps running.
Asks the filming run to pump d more of the app in the pause after
after, and shows it. A spinner keeps spinning, a video keeps playing —
which a freeze cannot do and no recording contains.
The pause is where it goes because that is where the film already has the run in its hands with no verb running. A beat with no pause of its own — one that never settled — cannot be held after.
Implementation
void hold(Duration d, {required Beat after}) {
var phase = after.phase(PhaseKind.dwell) ?? after.phase(PhaseKind.open);
if (phase == null || d <= Duration.zero) return;
_holds[phase.index] = (_holds[phase.index] ?? Duration.zero) + d;
_add(d, frozen: false);
}