ALOHA // NEXTUI
Button
Tropical light-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="lg">Book a spot</Button>Variants
<Button variant="primary">Book a spot</Button>
<Button variant="secondary">View schedule</Button>
<Button variant="ghost">Learn more</Button>
<Button variant="primary" size="sm">Reserve</Button>
<Button variant="primary" size="lg">Book now</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 ALOHA // NEXT
Badge
Tropical badge with coral, turquoise, yellow, green, and pink variants for category tags and labels.
Card
Tropical feature card with a colored icon element, category tag, title, and description. Supports coral, turquoise, yellow, green, and pink color variants.
Text
Polymorphic text primitive with body, caption, label, and code variants styled for the ALOHA tropical light palette.