Because:
- After passkey verification succeeded, the surface stayed rendered with no
success indication while navigation was pending; the passkey button reverted
to a clickable state, which was confusing and invited unintended retries.
- Other sign-in options stayed interactive while a sign-in attempt was in
flight, so a competing method could race the one already running.
This commit:
- Adds an isNavigating state to usePasskeySignIn, raised only on committed
success (never on an error), and renders AppLayout's loading spinner on all
four passkey sign-in surfaces while navigation or the WebChannel handoff is
pending.
- Adds a form-lock that disables the other sign-in options on a surface while a
submit or passkey ceremony is in flight, via new optional disabled props on
ButtonPasskeySignin, ThirdPartyAuth, AlternativeAuthOptions, and
FormVerifyCode.
- Releases that lock when beginSigninHandler or handleNavigation rejects
instead of returning `{ error }`, so an unexpected network or key-stretching
failure can't strand the passkey / third-party options until a reload.
Closes #FXA-14267