Skip to main content
NewCharts & Sidebar blocks

Building Blocks for Modern Apps

Pre-built, composable UI blocks you can drop into any React project. Ship complete features in minutes.

Files
components/login-1/login-1.tsx
import { LoginForm } from './components/login-form'

export function Page() {
  return (
    <div className="flex min-h-svh w-full items-center justify-center p-6 md:p-10">
      <div className="w-full max-w-sm">
        <LoginForm />
      </div>
    </div>
  )
}
login-1
Files
components/login-2/login-2.tsx
import { GalleryVerticalEnd } from 'lucide-react'
import { LoginForm } from './components/login-form'

export function LoginPage() {
  return (
    <div className="grid min-h-svh min-w-screen lg:grid-cols-2">
      <div className="flex flex-col gap-4 p-6 md:p-10">
        <div className="flex justify-center gap-2 md:justify-start">
          <a className="flex items-center gap-2 font-medium" href="#placeholder">
            <div className="flex h-6 w-6 items-center justify-center rounded-md bg-primary text-primary-foreground">
              <GalleryVerticalEnd className="size-4" />
            </div>
            Duck UI
          </a>
        </div>
        <div className="flex flex-1 items-center justify-center">
          <div className="w-full max-w-xs">
            <LoginForm />
          </div>
        </div>
      </div>
      <div className="relative hidden bg-muted lg:block">
        {/* biome-ignore lint/performance/noImgElement: demo block, not using Next.js Image */}
        <img
          alt=""
          className="absolute inset-0 h-full w-full object-cover dark:brightness-[0.2] dark:grayscale"
          height="100%"
          src="/placeholder.svg"
          width="100%"
        />
      </div>
    </div>
  )
}
login-2
Files
components/login-3/login-3.tsx
import { GalleryVerticalEnd } from 'lucide-react'
import { LoginForm } from './components/login-form'

export function LoginPage() {
  return (
    <div className="flex min-h-svh min-w-screen flex-col items-center justify-center gap-6 bg-muted p-6 md:p-10">
      <div className="flex w-full max-w-sm flex-col gap-6">
        <a className="flex items-center gap-2 self-center font-medium" href="#placeholder">
          <div className="flex h-6 w-6 items-center justify-center rounded-md bg-primary text-primary-foreground">
            <GalleryVerticalEnd className="size-4" />
          </div>
          Duck UI
        </a>
        <LoginForm />
      </div>
    </div>
  )
}
login-3
Files
components/login-4/login-4.tsx
import { LoginForm } from './components/login-form'

export function LoginPage() {
  return (
    <div className="flex min-h-svh min-w-screen flex-col items-center justify-center bg-muted p-6 md:p-10">
      <div className="w-full max-w-sm md:max-w-3xl">
        <LoginForm />
      </div>
    </div>
  )
}
login-4
Files
components/login-5/login-5.tsx
import { LoginForm } from './components/login-form'

export function LoginPage() {
  return (
    <div className="flex min-h-svh flex-col items-center justify-center gap-6 bg-background p-6 md:p-10">
      <div className="w-full max-w-sm">
        <LoginForm />
      </div>
    </div>
  )
}
login-5