Full-height step-up authentication screen that re-asks for the password before a sensitive action, showing the signed-in account and a cancel option. Perfect for protecting billing, security, and destructive actions.
A full-height, centered step-up authentication screen that shows an optional icon badge, heading, and description above a bordered card containing the signed-in account line, a single password <input> with a show/hide toggle button and an inline "forgot password" link, a submit button, and a trailing cancel prompt beneath the card.
Pro blocks install through the shadcn CLI with your license key and ship their full source. Docs and live previews stay open to everyone, so you can read every block's details first.
Swap YOUR_EMAIL and YOUR_KEY for the email and license key on your account. Find your license key on your account page.
Radix flavor
npx shadcn add "https://ui.beste.co/r/auth46?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/auth46?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/auth46.tsx, plus the button, input, and field shadcn/ui primitives it uses for the submit and toggle buttons, the password input, and the labelled field group.
The installed file exports auth46Demo alongside the block: the exact props behind the preview above. Spread it to get a working confirmation screen in one line.
import { Auth46, auth46Demo } from "@/components/beste/block/auth46";
export default function ConfirmPage() {
return <Auth46 {...auth46Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { ShieldCheck } from "lucide-react";
import { Auth46 } from "@/components/beste/block/auth46";
export default function ConfirmPage() {
return (
<Auth46
icon={<ShieldCheck className="size-6" />}
heading="Confirm it's you"
description="Re-enter your password to change your billing details."
user={{ signedInLabel: "Signed in as", email: "jane@example.com" }}
labels={{ password: "Password", submit: "Confirm" }}
forgotPasswordLink={{ label: "Forgot password?", href: "/reset" }}
cancelPrompt={{ text: "Didn't mean to?", linkLabel: "Cancel", href: "/account" }}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
icon | React.ReactNode | – | Optional glyph rendered in the circular badge above the heading |
heading | string | – | Page title shown centered above the card |
description | string | – | Supporting copy under the heading |
user | { signedInLabel: string; email: string } | – | Signed-in line at the top of the card |
labels | Labels | {} | Text for the password field, placeholder, submit button, and toggle aria-label |
forgotPasswordLink | { label: string; href: string } | – | Inline link aligned to the right of the password label |
cancelPrompt | { text: string; linkLabel: string; href: string } | – | Cancel prompt rendered below the card |
className | string | – | Extra classes for the outer <section> |
type Labels = {
password?: string;
passwordPlaceholder?: string;
submit?: string;
passwordToggle?: string;
};icon, heading, description, user, forgotPasswordLink, submit label, and cancelPrompt each render only when their prop (or nested value) is present, so passing an empty object yields a bare password field.useState(false) that is never lifted out; the toggle Button flips the <input> between type="password" and type="text" and swaps the Eye/EyeOff glyph, with no callback exposed to the parent.onSubmit only calls e.preventDefault(), and neither the submit button nor the password value emits an event or captured value, so validation and submission are left entirely to you.<input> is uncontrolled and carries autoFocus, so the field receives focus on mount and its value is never read by the component.forgotPasswordLink and cancelPrompt render through next/link, and the field label is associated to the input via a useId-generated id for accessibility.type="submit" (never disabled) whenever a submit label is provided, unlike a gated confirmation flow.Wiring the form up
This block ships the form markup only; state, validation, and submit are yours to add. Our guide wires the shadcn Field primitives to React Hook Form, TanStack Form, and Formisch on one field system.
auth5
Full-height reset-password screen with new and confirm password fields (each with a show/hide toggle) and a live requirements checklist that ticks off rules as the user types. Perfect for the final step of a password reset or invite flow.
auth17
Full-height signed-out screen with a centered icon, a heading and message, a sign-back-in button, and a return-home link. Perfect for logout confirmations and expired-session pages.
auth40
Full-height change-password screen with current, new, and confirm password fields (show/hide toggles), a forgot-password link, and a cancel option. Perfect for account security settings.
auth12
Full-height success screen with a large confirmation check, a heading and message, a primary continue button, and a support link. Perfect for the final step after email verification or account activation.
auth27
Full-height authentication error screen with a warning icon, an explanation, an optional error code, and try-again, back, and contact-support actions. Perfect for failed sign-in and OAuth callback errors.
auth8
Full-height re-authentication screen showing the signed-in user's avatar, name, and email with a single password field, a forgot-password link, and a use-a-different-account option. Perfect for session unlock and returning-user prompts.