Skip to content

fix(ui): preserve identifier focus during sign-in submissions - #9744

Draft
nikosdouvlis wants to merge 1 commit into
mainfrom
nikos/otp-keyboard-handoff
Draft

fix(ui): preserve identifier focus during sign-in submissions#9744
nikosdouvlis wants to merge 1 commit into
mainfrom
nikos/otp-keyboard-handoff

Conversation

@nikosdouvlis

Copy link
Copy Markdown
Member

Description

When a sign-in request disables the focused phone or email input, iOS can close the keyboard before the verification screen appears. Keep that input active through the request so the existing OTP autofocus can take over.

The identifier still blocks edits while loading. Duplicate submissions are blocked, and other controls keep their disabled behavior. Submit preserves the existing identifier focus without calling focus().

Draft pending an iPhone check with the npm snapshot. Submit with the keyboard open and check that the first OTP digit needs no extra tap. Repeat with a slow response and a failed-request retry.

Checklist

  • pnpm test runs as expected for the affected UI flows.
  • pnpm build runs as expected for @clerk/ui and its dependencies.
  • (If applicable) JSDoc comments have been added or updated for any package exports
  • (If applicable) Documentation has been updated

Type of change

  • Bug fix
  • New feature
  • Breaking change
  • Refactoring / dependency upgrade / documentation
  • other:

Why:
iOS code sign-in can reach verification with the software keyboard closed after the pending request disables the focused identifier.

What changed:
Keep focused identifiers natively enabled while blocking edits, preserve focus on submit, and reject duplicate pending submissions. Other fields and explicit disabling retain their existing behavior.
@changeset-bot

changeset-bot Bot commented Sep 12, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 3339632

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 3 packages
Name Type
@clerk/ui Patch
@clerk/chrome-extension Patch
@clerk/swingset Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@vercel

vercel Bot commented Sep 12, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
clerk-js-sandbox Ready Ready Preview Sep 12, 2026 9:23pm UTC
swingset Ready Ready Preview Sep 12, 2026 9:23pm UTC

Request Review

@coderabbitai

coderabbitai Bot commented Sep 12, 2026

Copy link
Copy Markdown
Contributor

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true

Comment @coderabbitai help to get the list of available commands.

@github-actions github-actions Bot added the ui label Sep 12, 2026
@nikosdouvlis

Copy link
Copy Markdown
Member Author

!snapshot otp-keyboard-handoff

@pkg-pr-new

pkg-pr-new Bot commented Sep 12, 2026

Copy link
Copy Markdown

Open in StackBlitz

@clerk/astro

npm i https://pkg.pr.new/@clerk/astro@9744

@clerk/backend

npm i https://pkg.pr.new/@clerk/backend@9744

@clerk/chrome-extension

npm i https://pkg.pr.new/@clerk/chrome-extension@9744

@clerk/clerk-js

npm i https://pkg.pr.new/@clerk/clerk-js@9744

@clerk/electron

npm i https://pkg.pr.new/@clerk/electron@9744

@clerk/electron-passkeys

npm i https://pkg.pr.new/@clerk/electron-passkeys@9744

@clerk/eslint-plugin

npm i https://pkg.pr.new/@clerk/eslint-plugin@9744

@clerk/expo

npm i https://pkg.pr.new/@clerk/expo@9744

@clerk/expo-google-signin

npm i https://pkg.pr.new/@clerk/expo-google-signin@9744

@clerk/expo-passkeys

npm i https://pkg.pr.new/@clerk/expo-passkeys@9744

@clerk/express

npm i https://pkg.pr.new/@clerk/express@9744

@clerk/fastify

npm i https://pkg.pr.new/@clerk/fastify@9744

@clerk/hono

npm i https://pkg.pr.new/@clerk/hono@9744

@clerk/localizations

npm i https://pkg.pr.new/@clerk/localizations@9744

@clerk/nextjs

npm i https://pkg.pr.new/@clerk/nextjs@9744

@clerk/nuxt

npm i https://pkg.pr.new/@clerk/nuxt@9744

@clerk/react

npm i https://pkg.pr.new/@clerk/react@9744

@clerk/react-router

npm i https://pkg.pr.new/@clerk/react-router@9744

@clerk/shared

npm i https://pkg.pr.new/@clerk/shared@9744

@clerk/tanstack-react-start

npm i https://pkg.pr.new/@clerk/tanstack-react-start@9744

@clerk/testing

npm i https://pkg.pr.new/@clerk/testing@9744

@clerk/ui

npm i https://pkg.pr.new/@clerk/ui@9744

@clerk/upgrade

npm i https://pkg.pr.new/@clerk/upgrade@9744

@clerk/vue

npm i https://pkg.pr.new/@clerk/vue@9744

commit: 3339632

@nikosdouvlis

Copy link
Copy Markdown
Member Author

!snapshot otp-keyboard-handoff

@github-actions

Copy link
Copy Markdown
Contributor

Hey @nikosdouvlis - the snapshot version command generated the following package versions:

Package Version
@clerk/astro 4.1.2-otp-keyboard-handoff.v20260912212758
@clerk/backend 3.17.3-otp-keyboard-handoff.v20260912212758
@clerk/chrome-extension 3.1.83-otp-keyboard-handoff.v20260912212758
@clerk/clerk-js 6.32.0-otp-keyboard-handoff.v20260912212758
@clerk/electron 0.0.43-otp-keyboard-handoff.v20260912212758
@clerk/electron-passkeys 0.0.4-otp-keyboard-handoff.v20260912212758
@clerk/eslint-plugin 0.2.1-otp-keyboard-handoff.v20260912212758
@clerk/expo 4.6.7-otp-keyboard-handoff.v20260912212758
@clerk/expo-google-signin 1.0.5-otp-keyboard-handoff.v20260912212758
@clerk/expo-passkeys 2.0.19-otp-keyboard-handoff.v20260912212758
@clerk/express 2.1.68-otp-keyboard-handoff.v20260912212758
@clerk/fastify 3.1.78-otp-keyboard-handoff.v20260912212758
@clerk/headless 0.0.33-otp-keyboard-handoff.v20260912212758
@clerk/hono 0.1.78-otp-keyboard-handoff.v20260912212758
@clerk/localizations 4.17.0-otp-keyboard-handoff.v20260912212758
@clerk/msw 0.0.69-otp-keyboard-handoff.v20260912212758
@clerk/nextjs 7.9.3-otp-keyboard-handoff.v20260912212758
@clerk/nuxt 3.1.2-otp-keyboard-handoff.v20260912212758
@clerk/react 6.16.0-otp-keyboard-handoff.v20260912212758
@clerk/react-router 3.6.23-otp-keyboard-handoff.v20260912212758
@clerk/shared 4.32.0-otp-keyboard-handoff.v20260912212758
@clerk/swingset 0.0.46-otp-keyboard-handoff.v20260912212758
@clerk/tanstack-react-start 1.5.14-otp-keyboard-handoff.v20260912212758
@clerk/testing 2.2.35-otp-keyboard-handoff.v20260912212758
@clerk/ui 1.33.0-otp-keyboard-handoff.v20260912212758
@clerk/upgrade 2.0.7-otp-keyboard-handoff.v20260912212758
@clerk/vue 2.5.2-otp-keyboard-handoff.v20260912212758

Tip: Use the snippet copy button below to quickly install the required packages.
@clerk/astro

npm i @clerk/astro@4.1.2-otp-keyboard-handoff.v20260912212758 --save-exact

@clerk/backend

npm i @clerk/backend@3.17.3-otp-keyboard-handoff.v20260912212758 --save-exact

@clerk/chrome-extension

npm i @clerk/chrome-extension@3.1.83-otp-keyboard-handoff.v20260912212758 --save-exact

@clerk/clerk-js

npm i @clerk/clerk-js@6.32.0-otp-keyboard-handoff.v20260912212758 --save-exact

@clerk/electron

npm i @clerk/electron@0.0.43-otp-keyboard-handoff.v20260912212758 --save-exact

@clerk/electron-passkeys

npm i @clerk/electron-passkeys@0.0.4-otp-keyboard-handoff.v20260912212758 --save-exact

@clerk/eslint-plugin

npm i @clerk/eslint-plugin@0.2.1-otp-keyboard-handoff.v20260912212758 --save-exact

@clerk/expo

npm i @clerk/expo@4.6.7-otp-keyboard-handoff.v20260912212758 --save-exact

@clerk/expo-google-signin

npm i @clerk/expo-google-signin@1.0.5-otp-keyboard-handoff.v20260912212758 --save-exact

@clerk/expo-passkeys

npm i @clerk/expo-passkeys@2.0.19-otp-keyboard-handoff.v20260912212758 --save-exact

@clerk/express

npm i @clerk/express@2.1.68-otp-keyboard-handoff.v20260912212758 --save-exact

@clerk/fastify

npm i @clerk/fastify@3.1.78-otp-keyboard-handoff.v20260912212758 --save-exact

@clerk/headless

npm i @clerk/headless@0.0.33-otp-keyboard-handoff.v20260912212758 --save-exact

@clerk/hono

npm i @clerk/hono@0.1.78-otp-keyboard-handoff.v20260912212758 --save-exact

@clerk/localizations

npm i @clerk/localizations@4.17.0-otp-keyboard-handoff.v20260912212758 --save-exact

@clerk/msw

npm i @clerk/msw@0.0.69-otp-keyboard-handoff.v20260912212758 --save-exact

@clerk/nextjs

npm i @clerk/nextjs@7.9.3-otp-keyboard-handoff.v20260912212758 --save-exact

@clerk/nuxt

npm i @clerk/nuxt@3.1.2-otp-keyboard-handoff.v20260912212758 --save-exact

@clerk/react

npm i @clerk/react@6.16.0-otp-keyboard-handoff.v20260912212758 --save-exact

@clerk/react-router

npm i @clerk/react-router@3.6.23-otp-keyboard-handoff.v20260912212758 --save-exact

@clerk/shared

npm i @clerk/shared@4.32.0-otp-keyboard-handoff.v20260912212758 --save-exact

@clerk/swingset

npm i @clerk/swingset@0.0.46-otp-keyboard-handoff.v20260912212758 --save-exact

@clerk/tanstack-react-start

npm i @clerk/tanstack-react-start@1.5.14-otp-keyboard-handoff.v20260912212758 --save-exact

@clerk/testing

npm i @clerk/testing@2.2.35-otp-keyboard-handoff.v20260912212758 --save-exact

@clerk/ui

npm i @clerk/ui@1.33.0-otp-keyboard-handoff.v20260912212758 --save-exact

@clerk/upgrade

npm i @clerk/upgrade@2.0.7-otp-keyboard-handoff.v20260912212758 --save-exact

@clerk/vue

npm i @clerk/vue@2.5.2-otp-keyboard-handoff.v20260912212758 --save-exact

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant