Linear by Linear Orbit, Inc. wants to access your Beste account.
This will allow Linear to:
Read your profile
Name, email, and profile picture.
Access your projects
View and update issues in your workspace.
Send notifications
Notify you about activity on your behalf.
You can revoke access at any time from your account settings.
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.
Upgrade to Pro
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.
auth21
Full-height passwordless sign-in screen with a fingerprint icon, a continue-with-passkey button, and a password fallback below a divider. Perfect for WebAuthn and biometric authentication flows.