GLASS // NEXTUI
Button
Glassmorphism 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="lg">Launch app</Button>Variants
<Button variant="primary">Launch app</Button>
<Button variant="secondary">View demo</Button>
<Button variant="ghost">Learn more</Button>
<Button variant="primary" size="sm">Connect</Button>
<Button variant="primary" size="lg">Get started</Button>
Source
TSX
import Link from 'next/link'
import { cn } from '@/lib/utils'
interface ButtonBaseProps {
variant?: 'primary' | 'secondary' | 'ghost'
size?: 'sm' | 'md' | 'lg'
className?: string
children: React.ReactNode
}
type ButtonAsButton = ButtonBaseProps &
Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, keyof ButtonBaseProps> & {
href?: never
}
type ButtonAsLink = ButtonBaseProps & {
href: string
}
type ButtonProps = ButtonAsButton | ButtonAsLink
const SIZE_CLASSES: Record<NonNullable<ButtonBaseProps['size']>, string> = {
sm: 'btn-sm',
md: 'btn-md',
lg: 'btn-lg',
}
const VARIANT_CLASSES: Record<NonNullable<ButtonBaseProps['variant']>, string> = {
primary: 'btn-primary',
secondary: 'btn-secondary',
ghost: 'btn-ghost',
}
export function Button({
children,
variant = 'primary',
size = 'md',
className,
...props
}: ButtonProps): React.JSX.Element {
const classes = cn('btn-base', SIZE_CLASSES[size], VARIANT_CLASSES[variant], className)
if ('href' in props && props.href !== undefined) {
const { href, ...linkProps } = props
return (
<Link href={href} className={classes} {...linkProps}>
{children}
</Link>
)
}
const { type = 'button', ...buttonProps } = props as React.ButtonHTMLAttributes<HTMLButtonElement>
return (
<button type={type} className={classes} {...buttonProps}>
{children}
</button>
)
}
Works withNext.js 15React 19Tailwind v4TypeScript 5
More from GLASS // NEXT
Badge
Frosted-glass badge with sky, indigo, cyan, violet, and emerald variants for tags and status indicators.
Card
Composable glassmorphism card container with frosted-glass surface and header, body, and footer sub-components.
Text
Polymorphic text primitive with body, caption, label, and code variants styled for the GLASS dark glassmorphism palette.