card.tsx 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import * as React from 'react';
  2. import { cn } from '@/lib/utils';
  3. const Card = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(
  4. ({ className, ...props }, ref) => (
  5. <div
  6. ref={ref}
  7. className={cn('rounded-lg border border-border bg-card text-card-foreground shadow-sm', className)}
  8. {...props}
  9. />
  10. )
  11. );
  12. Card.displayName = 'Card';
  13. const CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(
  14. ({ className, ...props }, ref) => (
  15. <div ref={ref} className={cn('flex flex-col space-y-1.5 p-6', className)} {...props} />
  16. )
  17. );
  18. CardHeader.displayName = 'CardHeader';
  19. const CardTitle = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLHeadingElement>>(
  20. ({ className, ...props }, ref) => (
  21. <h3 ref={ref} className={cn('text-2xl font-semibold leading-none tracking-tight', className)} {...props} />
  22. )
  23. );
  24. CardTitle.displayName = 'CardTitle';
  25. const CardDescription = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(
  26. ({ className, ...props }, ref) => (
  27. <p ref={ref} className={cn('text-sm text-muted-foreground', className)} {...props} />
  28. )
  29. );
  30. CardDescription.displayName = 'CardDescription';
  31. const CardContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(
  32. ({ className, ...props }, ref) => <div ref={ref} className={cn('p-6 pt-0', className)} {...props} />
  33. );
  34. CardContent.displayName = 'CardContent';
  35. const CardFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(
  36. ({ className, ...props }, ref) => (
  37. <div ref={ref} className={cn('flex items-center p-6 pt-0', className)} {...props} />
  38. )
  39. );
  40. CardFooter.displayName = 'CardFooter';
  41. export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent };