Full-height push-approval screen that shows a large number to match in your authenticator app, with a live waiting indicator and a cancel option. Perfect for number-matching two-factor authentication.
A full-height, centered push-approval screen that stacks an optional circular icon, a heading, a description, a large bordered match number, a pulsing "waiting" indicator, a cancel prompt link, and a footer note, all inside a max-w-md column for number-matching two-factor authentication.
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/auth35?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/auth35?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/auth35.tsx.
The installed file exports auth35Demo alongside the block: the exact props behind the preview above. Spread it to get a working approval screen in one line.
import { Auth35, auth35Demo } from "@/components/beste/block/auth35";
export default function Page() {
return <Auth35 {...auth35Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { Smartphone } from "lucide-react";
import { Auth35 } from "@/components/beste/block/auth35";
export default function Page() {
return (
<Auth35
icon={<Smartphone className="size-6" />}
heading="Approve your sign-in"
description="Open the app on your phone and tap the number below to continue."
matchNumber="42"
labels={{
waiting: "Waiting for approval…",
footer: "This request expires in 60 seconds.",
}}
cancelPrompt={{
text: "Didn't start this?",
linkLabel: "Cancel sign-in",
href: "/logout",
}}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
icon | React.ReactNode | – | Node placed inside the top circular badge; the badge is omitted entirely when absent |
heading | string | – | Main <h1> title |
description | string | – | Supporting paragraph under the heading |
matchNumber | string | – | Value rendered large in the bordered match box |
labels | { waiting?: string; footer?: string } | {} | Text for the waiting indicator and the footer line |
cancelPrompt | { text: string; linkLabel: string; href: string } | – | Prompt text plus a linked cancel action |
className | string | – | Extra classes for the outer <section> |
type Labels = {
waiting?: string;
footer?: string;
};
type CancelPrompt = {
text: string;
linkLabel: string;
href: string;
};useState, fires no callbacks, and never polls, so the actual approval/rejection flow (checking whether the user tapped the number) must be wired up by the integrator around it.heading yields just the title with no icon badge, match box, waiting row, or footer.next/link Link pointing at cancelPrompt.href; it is a plain navigation, not a handler, so cancellation happens by routing to whatever URL you supply.matchNumber is typed as string and rendered with tabular-nums, so multi-digit or leading-zero values (for example "07") display exactly as passed rather than being coerced.animate-ping dot that loops indefinitely on its own; it reflects nothing about real request state and keeps animating even after approval.dangerouslySetInnerHTML), so inline markup in heading or description is shown as literal text, not parsed as HTML.<section> forces min-h-screen, so the screen always fills the viewport height and vertically centers its content regardless of how little is rendered.auth46
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.
auth39
Full-height security setup step where the user picks a two-factor method from selectable cards (authenticator app, SMS, or security key), with a skip option. Perfect for guiding users through enabling 2FA.
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.
auth3
Full-height OTP verification screen with a centered icon, segmented six-digit code input, a verify button that unlocks once the code is complete, and a live resend countdown timer. Perfect for two-factor auth, magic links, and email confirmation flows.
auth18
Full-height security notification screen listing the device, location, and time of a new sign-in, with confirm-it-was-me and secure-my-account actions. Perfect for suspicious-login alerts and account safety prompts.
auth9
Two-column sign-in screen pairing a full sign-in form (social providers, email, password with show/hide, remember me) with a brand panel that lists product highlights. Includes a left/right panel position toggle.