Button.tsx 1.2 KB

1234567891011121314151617181920212223242526272829303132333435
  1. import type { ComponentPropsWithoutRef } from 'react';
  2. import { cn } from '../utils';
  3. export type ButtonProps = {
  4. theme?: 'light' | 'dark';
  5. variant?: 'primary' | 'secondary' | 'danger';
  6. disabled?: boolean;
  7. } & ComponentPropsWithoutRef<'button'>;
  8. export function Button({ theme, variant = 'primary', className, disabled, children, ...props }: ButtonProps) {
  9. return (
  10. <button
  11. className={cn(
  12. 'py-1 px-4 rounded shadow transition-all',
  13. {
  14. // Primary variant
  15. 'bg-blue-500 hover:bg-blue-600 text-white hover:scale-105': variant === 'primary' && !disabled,
  16. 'bg-gray-500 text-gray-700 cursor-not-allowed': variant === 'primary' && disabled,
  17. // Secondary variant
  18. 'bg-gray-100 hover:bg-gray-200 text-gray-800 hover:scale-105': variant === 'secondary' && !disabled,
  19. 'bg-gray-500 text-gray-700 cursor-not-allowed': variant === 'secondary' && disabled,
  20. // Danger variant
  21. 'bg-red-500 hover:bg-red-600 text-white hover:scale-105': variant === 'danger' && !disabled,
  22. 'bg-red-300 text-red-100 cursor-not-allowed': variant === 'danger' && disabled,
  23. },
  24. className,
  25. )}
  26. disabled={disabled}
  27. {...props}>
  28. {children}
  29. </button>
  30. );
  31. }