BLUEPRINT // NEXTUI
Button
Technical dark-mode button with primary, secondary, and ghost variants in three sizes. Renders as a Next.js Link when an href is provided.
$
Or install the base component for free:
Live Preview
Open full demoUsage
TSX
<Button variant="primary" size="md">Deploy build</Button>Variants
<Button variant="primary">Deploy build</Button>
<Button variant="secondary">Run tests</Button>
<Button variant="ghost">View logs</Button>
<Button variant="primary" size="sm">Deploy</Button>
<Button variant="primary" size="lg">Deploy to production</Button>
Source
TSX
import Link from 'next/link'
import { cn } from '@/lib/utils'
type Variant = 'primary' | 'secondary' | 'ghost'
type Size = 'sm' | 'md' | 'lg'
interface ButtonProps {
variant?: Variant
size?: Size
href?: string
type?: 'button' | 'submit' | 'reset'
disabled?: boolean
className?: string
onClick?: () => void
children: React.ReactNode
}
export function Button({
variant = 'primary',
size = 'md',
href,
type = 'button',
disabled,
className,
onClick,
children,
}: ButtonProps): React.JSX.Element {
const cls = cn('bp-btn', `bp-btn-${variant}`, `bp-btn-${size}`, className)
if (href) {
if (disabled) {
return (
<Link
href={href}
className={cls}
aria-disabled="true"
tabIndex={-1}
onClick={(e) => e.preventDefault()}
>
{children}
</Link>
)
}
return (
<Link href={href} className={cls} onClick={onClick}>
{children}
</Link>
)
}
return (
<button type={type} disabled={disabled} onClick={onClick} className={cls}>
{children}
</button>
)
}
Works withNext.js 15React 19Tailwind v4TypeScript 5
More from BLUEPRINT // NEXT
Badge
Technical badge for status indicators and tags in the BLUEPRINT dark engineering palette.
Card
Engineering-blueprint card with registration-mark corner accents at all four corners. Composable with any children.
Text
Polymorphic text primitive with body, caption, label, and code variants styled for the BLUEPRINT dark technical palette.