File size: 1,164 Bytes
88da18c | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | import React from 'react';
import { motion, type HTMLMotionProps } from 'framer-motion';
import { cn } from '@/utils/helpers';
interface CardProps extends Omit<HTMLMotionProps<'div'>, 'ref'> {
hover?: boolean;
glow?: boolean;
innerGlow?: boolean;
noPadding?: boolean;
children?: React.ReactNode;
}
const Card = React.forwardRef<HTMLDivElement, CardProps>(
(
{
hover = true,
glow = false,
innerGlow = false,
noPadding = false,
children,
className,
...props
},
ref
) => {
return (
<motion.div
ref={ref}
whileHover={hover ? { y: -4 } : undefined}
className={cn(
'relative bg-slate-900 border border-slate-700 rounded-xl',
glow && 'shadow-glow',
noPadding ? '' : 'p-6',
className
)}
{...props}
>
{innerGlow && (
<div className="absolute inset-0 bg-gradient-to-br from-emerald-500/10 to-transparent rounded-xl pointer-events-none" />
)}
<div className="relative z-10">{children}</div>
</motion.div>
);
}
);
Card.displayName = 'Card';
export default Card;
|