v1.4.4 — ride zoom by default, release on off-target DOM mutations
What changed
v1.4.3 always-released zoom between clicks, which broke tight click sequences (form-fills, multi-step wizards) where the camera should stay magnified across consecutive nearby actions.
This restores ride-mode as the default and adds a real signal for when the camera SHOULD release: page-side MutationObserver data capturing which regions of the page mutate after each click.
The rule
- Mutation lands inside the clicked element's bbox (button press feedback, focus ring, dropdown on the click site) → expected, keep ride.
- Mutation lands outside the clicked element's bbox (toast in a corner, counter at the top updates, items reorder elsewhere) → editor flags that gap for release; pan-zoom drops to neutral so the viewer sees the full page during the change.
Implementation
runner.tsinjects two new page scripts viaaddInitScript:- The interaction recorder now also pushes
event.target.getBoundingClientRect()on each click via__tikRecordClickBbox, so we know exactly what region was clicked. - A new
MutationObserverscript (__tikRecordMutation) reports the bounding rect of every meaningful DOM change. Filters out invisible nodes, zero-size rects, off-screen rects, and throttles same-position mutations within 200ms so a long type-into-input flurry doesn't flood.
- The interaction recorder now also pushes
single-video-editor.tsmaps clicks + mutations to body-relative time, then for each click scans the post-click window (3.5s) for mutations whose bbox isn't contained in the padded click bbox. Off-target mutations build zoom-release intervals; overlapping intervals merge.SingleVideoReel.tsxpan-zoom v5: ride zoom by default (hold + pan to next click), release only when (a) the gap intersects a release interval from the editor, or (b) the next click is far from the previous one (> 40% of the viewport's shorter dimension).
Versions
- CLI:
1.4.4 - Plugin:
1.4.4
v1 tag force-updated.