Sign-in screens that stay out of the way. Connect your auth, then adjust the copy, providers, and links.
Classic
A centered email and password form with a remember-me option.
Sign in
Welcome back — enter your details to continue.
Don’t have an account? Create one
tsx
"use client";import { Button } from "@/components/ui/button";import { Checkbox } from "@/components/ui/checkbox";import { Input } from "@/components/ui/input";import { Label } from "@/components/ui/label";import { cn } from "@/lib/utils";type Login01Props = { className?: string;};export function Login01({ className }: Login01Props) { return ( <section className={cn("@container w-full bg-background", className)}> <div className="mx-auto w-full max-w-sm px-4 py-10 @[32rem]:px-6 @[32rem]:py-14"> <div className="text-center"> <h2 className="text-xl font-medium tracking-wide text-foreground @[32rem]:text-2xl"> Sign in </h2> <p className="mt-2 text-sm tracking-wide text-muted-foreground"> Welcome back — enter your details to continue. </p> </div> <form className="mt-8 flex flex-col gap-4" onSubmit={(event) => event.preventDefault()} > <div className="flex flex-col gap-1.5"> <Label htmlFor="login-01-email">Email</Label> <Input id="login-01-email" name="email" type="email" autoComplete="email" placeholder="maya@northline.com" className="border-0 bg-muted" /> </div> <div className="flex flex-col gap-1.5"> <div className="flex items-center justify-between gap-2"> <Label htmlFor="login-01-password">Password</Label> <a href="#" className="text-xs tracking-wide text-muted-foreground" > Forgot password? </a> </div> <Input id="login-01-password" name="password" type="password" autoComplete="current-password" placeholder="••••••••" className="border-0 bg-muted" /> </div> <div className="flex items-center gap-2"> <Checkbox id="login-01-remember" /> <Label htmlFor="login-01-remember" className="font-normal"> Remember me </Label> </div> <Button type="submit" size="sm" className="w-full"> Sign in </Button> </form> <p className="mt-6 text-center text-sm tracking-wide text-muted-foreground"> Don’t have an account?{" "} <a href="#" className="text-foreground"> Create one </a> </p> </div> </section> );}Installation
npx @arctis-sh/@arctis-sh/ui@latest add login-01Usage
import { Login01 } from "@/components/blocks/login/login-01"<Login01 />Social
Provider buttons first, followed by a divider and email sign-in.
tsx
"use client";import { Button } from "@/components/ui/button";import { Input } from "@/components/ui/input";import { Label } from "@/components/ui/label";import { Separator } from "@/components/ui/separator";import { cn } from "@/lib/utils";type Login02Props = { className?: string;};function GoogleIcon({ className }: { className?: string }) { return ( <svg viewBox="0 0 24 24" aria-hidden="true" className={className}> <path fill="currentColor" d="M21.6 12.23c0-.68-.06-1.33-.17-1.96H12v3.71h5.38a4.6 4.6 0 0 1-2 3.02v2.5h3.24c1.9-1.75 2.98-4.33 2.98-7.27Z" /> <path fill="currentColor" d="M12 22c2.7 0 4.96-.9 6.62-2.44l-3.24-2.5c-.9.6-2.05.96-3.38.96-2.6 0-4.8-1.76-5.59-4.12H3.07v2.58A10 10 0 0 0 12 22Z" /> <path fill="currentColor" d="M6.41 13.9A6 6 0 0 1 6.1 12c0-.66.11-1.3.3-1.9V7.52H3.07A10 10 0 0 0 2 12c0 1.61.39 3.14 1.07 4.48l3.34-2.58Z" /> <path fill="currentColor" d="M12 5.98c1.47 0 2.79.5 3.82 1.5l2.86-2.86A9.96 9.96 0 0 0 12 2a10 10 0 0 0-8.93 5.52l3.34 2.58C7.2 7.74 9.4 5.98 12 5.98Z" /> </svg> );}function GitHubIcon({ className }: { className?: string }) { return ( <svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" className={className} > <path d="M12 2C6.48 2 2 6.58 2 12.26c0 4.52 2.87 8.35 6.84 9.7.5.1.68-.22.68-.48 0-.24-.01-.87-.01-1.7-2.78.62-3.37-1.37-3.37-1.37-.45-1.18-1.11-1.5-1.11-1.5-.91-.64.07-.63.07-.63 1 .07 1.53 1.06 1.53 1.06.89 1.56 2.34 1.11 2.91.85.09-.66.35-1.11.63-1.37-2.22-.26-4.56-1.14-4.56-5.07 0-1.12.39-2.03 1.03-2.75-.1-.26-.45-1.31.1-2.73 0 0 .84-.27 2.75 1.05A9.3 9.3 0 0 1 12 6.8c.85 0 1.71.12 2.51.35 1.9-1.32 2.74-1.05 2.74-1.05.55 1.42.2 2.47.1 2.73.64.72 1.03 1.63 1.03 2.75 0 3.94-2.34 4.8-4.57 5.06.36.32.68.94.68 1.9 0 1.37-.01 2.47-.01 2.81 0 .26.18.59.69.48A10.03 10.03 0 0 0 22 12.26C22 6.58 17.52 2 12 2Z" /> </svg> );}export function Login02({ className }: Login02Props) { return ( <section className={cn("@container w-full bg-background", className)}> <div className="mx-auto w-full max-w-sm px-4 py-10 @[32rem]:px-6 @[32rem]:py-14"> <div className="text-center"> <h2 className="text-xl font-medium tracking-wide text-foreground @[32rem]:text-2xl"> Welcome back </h2> <p className="mt-2 text-sm tracking-wide text-muted-foreground"> Sign in with your email or a provider. </p> </div> <form className="mt-8 flex flex-col gap-4" onSubmit={(event) => event.preventDefault()} > <div className="flex flex-col gap-1.5"> <Label htmlFor="login-02-email">Email</Label> <Input id="login-02-email" name="email" type="email" autoComplete="email" placeholder="maya@northline.com" className="border-0 bg-muted" /> </div> <div className="flex flex-col gap-1.5"> <Label htmlFor="login-02-password">Password</Label> <Input id="login-02-password" name="password" type="password" autoComplete="current-password" placeholder="••••••••" className="border-0 bg-muted" /> </div> <Button type="submit" size="sm" className="w-full"> Sign in </Button> </form> <div className="my-6 flex items-center gap-3"> <Separator className="flex-1" /> <span className="text-xs tracking-wide text-muted-foreground">or</span> <Separator className="flex-1" /> </div> <div className="flex flex-col gap-2"> <Button type="button" size="sm" variant="secondary" className="w-full"> <GoogleIcon className="size-4" /> Continue with Google </Button> <Button type="button" size="sm" variant="secondary" className="w-full"> <GitHubIcon className="size-4" /> Continue with GitHub </Button> </div> </div> </section> );}Installation
npx @arctis-sh/@arctis-sh/ui@latest add login-02Usage
import { Login02 } from "@/components/blocks/login/login-02"<Login02 />Split
A compact sign-in form paired with a simple brand panel.
Build pages faster with ready blocks
Sign in to your workspace and pick up where you left off.
Trusted by teams shipping product UI every week.
tsx
"use client";import { Logo } from "@/components/brand";import { Button } from "@/components/ui/button";import { Input } from "@/components/ui/input";import { Label } from "@/components/ui/label";import { cn } from "@/lib/utils";type Login03Props = { className?: string;};export function Login03({ className }: Login03Props) { return ( <section className={cn("@container w-full bg-background", className)}> <div className="mx-auto w-full max-w-4xl px-4 py-10 @[32rem]:px-6 @[32rem]:py-14"> <div data-slot="block-split" className="grid w-full overflow-hidden rounded-xl bg-muted @[40rem]:grid-cols-2" > <div className="flex flex-col justify-between px-6 py-10 @[32rem]:px-8 @[32rem]:py-12"> <div> <Logo className="block h-4 w-auto text-foreground" /> <h2 className="mt-6 text-2xl font-medium tracking-wide text-foreground @[32rem]:text-3xl"> Build pages faster with ready blocks </h2> <p className="mt-3 max-w-sm text-sm tracking-wide text-muted-foreground"> Sign in to your workspace and pick up where you left off. </p> </div> <p className="mt-10 text-xs tracking-wide text-muted-foreground @[40rem]:mt-0"> Trusted by teams shipping product UI every week. </p> </div> <div className="bg-background px-6 py-10 @[32rem]:px-8 @[32rem]:py-12"> <h3 className="text-lg font-medium tracking-wide text-foreground"> Sign in </h3> <p className="mt-1 text-sm tracking-wide text-muted-foreground"> Use your work email to continue. </p> <form className="mt-6 flex flex-col gap-4" onSubmit={(event) => event.preventDefault()} > <div className="flex flex-col gap-1.5"> <Label htmlFor="login-03-email">Email</Label> <Input id="login-03-email" name="email" type="email" autoComplete="email" placeholder="maya@northline.com" className="border-0 bg-muted" /> </div> <div className="flex flex-col gap-1.5"> <Label htmlFor="login-03-password">Password</Label> <Input id="login-03-password" name="password" type="password" autoComplete="current-password" placeholder="••••••••" className="border-0 bg-muted" /> </div> <Button type="submit" size="sm" className="w-full"> Continue </Button> </form> <p className="mt-6 text-center text-sm tracking-wide text-muted-foreground"> New here?{" "} <a href="#" className="text-foreground"> Create account </a> </p> </div> </div> </div> </section> );}Installation
npx @arctis-sh/@arctis-sh/ui@latest add login-03Usage
import { Login03 } from "@/components/blocks/login/login-03"<Login03 />