Two-column editorial sign-in pairing an oversized typographic brand panel with a clean email and password form. Stacks the panel above the form on mobile. Perfect for brands that want a minimal, editorial first impression.
A full-height two-column sign-in screen that pairs a left editorial panel (uppercase eyebrow, oversized heading, and description on a bg-muted background) with a right-hand email and password form built from Field primitives, a forgot-password link beside the password label, a submit button, and a signup prompt below, collapsing to a single stacked column below the lg breakpoint.
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/auth32?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/auth32?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/auth32.tsx, plus the button, input, and field shadcn/ui primitives it uses for the submit button, the email and password inputs, and the field labels and descriptions.
The installed file exports auth32Demo alongside the block: the exact props behind the preview above. Spread it to get a working sign-in screen in one line.
import { Auth32, auth32Demo } from "@/components/beste/block/auth32";
export default function SignInPage() {
return <Auth32 {...auth32Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { Auth32 } from "@/components/beste/block/auth32";
export default function SignInPage() {
return (
<Auth32
eyebrow="Welcome back"
heading="Sign in to keep building."
description="Pick up right where you left off."
labels={{
email: "Email",
emailPlaceholder: "you@example.com",
password: "Password",
passwordPlaceholder: "Enter your password",
submit: "Continue",
}}
forgotPasswordLink={{ label: "Forgot password?", href: "/reset" }}
signupPrompt={{ text: "Don't have an account?", linkLabel: "Sign up", href: "/signup" }}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
eyebrow | string | – | Uppercase tracked label above the heading; hidden when omitted |
heading | string | – | Oversized editorial heading in the left panel; hidden when omitted |
description | string | – | Supporting paragraph under the heading; hidden when omitted |
labels | Labels | {} | Field labels and placeholders; each field renders only if its label is set |
forgotPasswordLink | { label: string; href: string } | – | Link shown beside the password label; hidden when omitted |
signupPrompt | { text: string; linkLabel: string; href: string } | – | Prompt text plus link below the form; hidden when omitted |
className | string | – | Extra classes merged onto the outer <section> |
type Labels = {
email?: string;
emailPlaceholder?: string;
password?: string;
passwordPlaceholder?: string;
submit?: string;
};onSubmit calls e.preventDefault() and nothing else, so the inputs are uncontrolled and no email or password value is captured or lifted out. Wiring real authentication is left to the integrator.labels.email is set, the password field only when labels.password is set, and the submit button only when labels.submit is set. An empty or omitted labels object therefore renders an empty form.useId() call suffixed with -email and -password, keeping the htmlFor/id pairs unique and stable across instances.forgotPasswordLink is provided.next/link; the block assumes a Next.js app and href values are passed straight through with no validation.lg:grid-cols-2 grid at min-h-screen: below lg the editorial panel stacks above the form, and above lg the two columns sit side by side with the panel on the left.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.
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.
auth2
Two-column registration screen pairing a sign-up form (social providers, name, email, password with show/hide, terms checkbox) with a full-bleed image showcase and customer testimonial. Includes a left/right image position toggle.
auth14
Full-height single sign-on screen with a work-email field, a continue-with-SSO button, and Google and Microsoft providers below a divider. Perfect for B2B and enterprise apps that authenticate via identity providers.
auth29
Full-height terminal-style sign-in rendered as a CLI window with a command prompt, a monospace email input, and a send-link action. Perfect for developer tools and CLI-first products.
auth1
Full-height centered sign-in screen with social login providers, email and password fields, a show/hide password toggle, remember-me checkbox, and forgot-password link. Perfect for SaaS apps, dashboards, and member portals.
auth6
Full-height passwordless sign-in screen with a single email field, a send-magic-link button, a helper note, and social login providers below a divider. Perfect for passwordless and email-link authentication flows.