Full-height OAuth consent screen showing the requesting app, the permissions it needs as a scope list, and authorize and cancel actions. Perfect for third-party app authorization and developer platform connect flows.
Full-height OAuth consent screen: a centered app icon and heading over a bordered card that lists the requested permission scopes as a checkmarked list, followed by an authorize and a cancel action. Built for third-party app connect and developer platform authorization flows.
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/auth19?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/auth19?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/auth19.tsx and the button shadcn/ui primitive it's built on.
The installed file exports auth19Demo alongside the block: the exact props behind the preview above. Spread it to get a working consent screen in one line.
import { Auth19, auth19Demo } from "@/components/beste/block/auth19";
export default function AuthorizePage() {
return <Auth19 {...auth19Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { Puzzle } from "lucide-react";
import { Auth19 } from "@/components/beste/block/auth19";
export default function AuthorizePage() {
return (
<Auth19
icon={<Puzzle className="size-7" />}
heading="Authorize Linear"
description="Linear by Linear Orbit, Inc. wants to access your Beste account."
scopes={[
{ title: "Read your profile", description: "Name, email, and profile picture." },
{ title: "Access your projects", description: "View and update issues in your workspace." },
]}
authorizeButton={{ label: "Authorize", href: "/oauth/authorize" }}
cancelButton={{ label: "Cancel", href: "/oauth/cancel" }}
labels={{ scopesHeading: "This will allow Linear to:" }}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
icon | React.ReactNode | – | Icon rendered in a muted square above the heading |
heading | string | – | Screen title, e.g. "Authorize [App]" |
description | string | – | Subtext naming the requesting app |
scopes | Scope[] | [] | Permission list shown with checkmark bullets |
authorizeButton | { label: string; href: string } | – | Primary action; hidden entirely when not set |
cancelButton | { label: string; href: string } | – | Ghost action below the primary button; hidden entirely when not set |
labels | object | {} | Card heading and footer copy, see below |
className | string | – | Extra classes for the outer <section> |
type Scope = { title: string; description?: string };
type Auth19Labels = { scopesHeading?: string; footer?: string };authorizeButton and cancelButton render as asChild next/link anchors, not real OAuth redirect or grant calls; wiring the actual consent exchange is left to the integrator.scopes.length > 0; each row is skipped independently for its description line if that field is omitted.labels.scopesHeading (the small caption above the scope list) and labels.footer (the "revoke access" line under the card) each render only when explicitly set, so both can be omitted to simplify the screen.size-14 rounded-md square with a muted background, distinct from the circular icon treatment used in auth20/auth23/auth27/auth28.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.
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.
auth16
Full-height invitation acceptance screen showing the inviter's avatar and team name, a pre-filled disabled email, and name and password fields to set up the account. Perfect for team onboarding and invite-link flows.
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.
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.
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.