28 lines
1.2 KiB
TypeScript
28 lines
1.2 KiB
TypeScript
import { cn } from '@/lib/utils';
|
|
|
|
type ButtonVariant = 'primary' | 'ghost' | 'danger' | 'secondary';
|
|
|
|
type ButtonProps = React.ButtonHTMLAttributes<HTMLButtonElement> & {
|
|
variant?: ButtonVariant;
|
|
};
|
|
|
|
const variantMap: Record<ButtonVariant, string> = {
|
|
primary: 'border-[color:var(--line-strong)] bg-[color:var(--accent)] text-[#16181c] hover:bg-[color:var(--accent-strong)]',
|
|
secondary: 'border-[color:var(--line-weak)] bg-[color:var(--panel-bright)] text-[color:var(--terminal-bright)] hover:border-[color:var(--line-strong)] hover:bg-[color:var(--panel)]',
|
|
ghost: 'border-[color:var(--line-weak)] bg-transparent text-[color:var(--terminal-bright)] hover:border-[color:var(--line-strong)] hover:bg-[color:var(--panel-soft)]',
|
|
danger: 'border-[color:var(--danger)] bg-[color:var(--danger-soft)] text-[#ffc9c9] hover:bg-[color:var(--danger)] hover:text-[#1e0d0d]'
|
|
};
|
|
|
|
export function Button({ className, variant = 'primary', ...props }: ButtonProps) {
|
|
return (
|
|
<button
|
|
className={cn(
|
|
'inline-flex min-h-11 items-center justify-center gap-2 rounded-lg border px-3 py-2 text-sm font-medium transition duration-200 disabled:cursor-not-allowed disabled:opacity-50',
|
|
variantMap[variant],
|
|
className
|
|
)}
|
|
{...props}
|
|
/>
|
|
);
|
|
}
|