VOW // NEXTUI
Button
Elegant button with primary, secondary, and ghost variants in three sizes. Burgundy accent, serif labels, refined spacing. 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">Begin your consultation</Button>Variants
<Button variant="primary">Begin your consultation</Button>
<Button variant="secondary">View collections</Button>
<Button variant="ghost">Learn more</Button>
<Button variant="primary" size="sm">Inquire</Button>
<Button variant="primary" size="lg">Book now</Button>
Source
TSX
import Link from 'next/link'
import { cn } from '@/lib/utils'
type Variant = 'primary' | 'secondary' | 'ghost'
type Size = 'sm' | 'md' | 'lg'
const variantClass: Record<Variant, string> = {
primary: 'btn-primary',
secondary: 'btn-secondary',
ghost: 'btn-ghost',
}
const sizeClass: Record<Size, string> = {
sm: 'btn-sm',
md: 'btn-md',
lg: 'btn-lg',
}
interface ButtonBaseProps {
variant?: Variant
size?: Size
children: React.ReactNode
className?: string
}
interface ButtonAsLink extends ButtonBaseProps {
href: string
onClick?: never
}
interface ButtonAsButton extends ButtonBaseProps {
href?: never
onClick?: () => void
}
type ButtonProps = ButtonAsLink | ButtonAsButton
export function Button({
variant = 'primary',
size = 'md',
href,
onClick,
children,
className,
}: ButtonProps): React.JSX.Element {
const classes = cn('btn-base', variantClass[variant], sizeClass[size], className)
if (href) {
return (
<Link href={href} className={classes}>
{children}
</Link>
)
}
return (
<button type="button" className={classes} onClick={onClick}>
{children}
</button>
)
}
Works withNext.js 15React 19Tailwind v4TypeScript 5
More from VOW // NEXT
Badge
Refined badge with burgundy, gold, sage, ink, and ivory variants. Delicate uppercase tracking for floral and event contexts.
Text
Polymorphic text component with body, caption, label, and code variants. Serif display for headings, clean sans for body.
Card
Service card with numbered index, title, description, and tag. Clean lines and refined spacing for floral atelier services.