Abort the tentative navigation: reverse the animation back to 0,
wait for it to settle, then drop the tentative target. The committed
pNavigationState is unchanged — the user ends up where they started.
Start a tentative navigation toward target using effect as the
transition animation. The controller's animation parks at value=0
and waits for updateTentativeProgress calls to drive it forward.
Checks a RouteState at a relative position from the current
one without performing navigation. The step determines
the direction and distance (e.g., -1 for the previous route,1 for the next).
Commit the tentative as a real navigation: mutate pNavigationState,
flush the URL, and forward the animation from the current value to 1.
Safe no-op if no tentative is active.