Recovery Phrase Entry
Full-height account-recovery screen with a numbered grid of individually indexed word inputs. Pasting a multi-word phrase into the first box fans it out across the remaining boxes, and the restore button stays disabled until every box is filled.
Docs
Installation
A real shadcn registry command, not a copy-paste stand-in: it fetches this block plus its button dependencies and any missing npm packages, and installs them straight into your project.
npx shadcn add https://staaarter.com/r/recovery-phrase-entry.jsonPrefer not to use the CLI? Copy the source from the Code toggle above into src/components/blocks/auth/auth47.tsx instead.
Usage
The file also exports auth47Demo, the exact props behind the preview above. Spread it to get a working section in one line, then replace it with your own data.
import { Auth47, auth47Demo } from "@/components/blocks/auth/auth47"; export default function Page() { return <Auth47 {...auth47Demo} />; }
Props
| Prop | Type | Default | Description |
|---|---|---|---|
| heading | ReactNode | none | Main heading above the word grid. |
| description | string | undefined | Supporting copy under the heading. |
| wordCount | number | 12 | Number of word-input boxes to render. |
| restoreLabel | string | none | Label for the restore-account button. |
| className | string | none | Extra classes for the outer section element. |
Behavior notes
- Client component: each box is a controlled <input> tracked in state so the restore button's disabled state can react to every box being non-empty.
- Paste-to-fill only intercepts the paste on the first input, and only when the pasted text splits into more than one whitespace-separated word; a single pasted word falls through to normal input behavior. It calls event.preventDefault() and distributes each word into its own input starting from the first box, overwriting whatever was already in those boxes.
- The restore button is disabled via real derived state (every word non-empty) rather than a static prop, but its click handler performs no real account-recovery call, it is left inert.
- Each input has a distinct aria-label ("Word 1", "Word 2", ...) in addition to its visible numbered prefix, since the numbers alone are not programmatically associated with the input without it.
More Auth Blocks
View all →centered-sign-in-card
Centered Sign In Card
Full-height centered sign-in card with social buttons, a password show/hide toggle, and remember-me.
split-screen-sign-up
Split-Screen Sign Up
Two-column registration screen with a sign-up form on one side and a full-bleed photo with a customer quote on the other.
email-verification-code
Email Verification Code
Full-height OTP screen with a 6-digit segmented code input, auto-advancing focus, and a live resend countdown.
forgot-password-request
Forgot Password Request
Full-height password recovery screen with a single email field, a send-reset-link button, and a back-to-sign-in link.
set-new-password
Set New Password
Full-height reset-password screen with independent show/hide toggles per field and a live password-requirements checklist.
magic-link-sign-in
Magic Link Sign In
Full-height passwordless sign-in screen with an email field, a send-magic-link button, and social login as a fallback.