diff options
Diffstat (limited to 'frontend/src/components/product-card.tsx')
-rw-r--r-- | frontend/src/components/product-card.tsx | 52 |
1 files changed, 26 insertions, 26 deletions
diff --git a/frontend/src/components/product-card.tsx b/frontend/src/components/product-card.tsx index f790c98..25717f4 100644 --- a/frontend/src/components/product-card.tsx +++ b/frontend/src/components/product-card.tsx @@ -71,16 +71,16 @@ export function ProductCard({ return ( <Card - className="group relative overflow-hidden border-0 shadow-sm hover:shadow-xl transition-all duration-300 cursor-pointer" + className="group relative overflow-hidden border-0 shadow-sm hover:shadow-xl dark:shadow-black/30 dark:hover:shadow-black/50 transition-all duration-300 cursor-pointer bg-white dark:bg-neutral-900" onMouseEnter={() => setIsHovered(true)} onMouseLeave={() => setIsHovered(false)} > <Link href={`/product/${id}`}> <div className="relative overflow-hidden"> {/* Product Image */} - <div className="aspect-[3/4] bg-neutral-100 relative overflow-hidden"> + <div className="aspect-[3/4] bg-neutral-100 dark:bg-neutral-800 relative overflow-hidden"> <div - className="w-full h-full bg-gradient-to-br from-neutral-200 to-neutral-300 flex items-center justify-center transition-transform duration-300 group-hover:scale-105" + className="w-full h-full bg-gradient-to-br from-neutral-200 to-neutral-300 dark:from-neutral-700 dark:to-neutral-800 flex items-center justify-center transition-transform duration-300 group-hover:scale-105" style={{ backgroundImage: `url(${allImages[currentImage]})`, backgroundSize: 'cover', @@ -88,9 +88,9 @@ export function ProductCard({ }} > {/* Placeholder for actual images */} - <div className="text-center text-neutral-500"> - <div className="w-16 h-16 bg-neutral-400 rounded-full mx-auto mb-2 flex items-center justify-center"> - <ShoppingBag className="w-8 h-8 text-white" /> + <div className="text-center text-neutral-500 dark:text-neutral-400"> + <div className="w-16 h-16 bg-neutral-400 dark:bg-neutral-700 rounded-full mx-auto mb-2 flex items-center justify-center"> + <ShoppingBag className="w-8 h-8 text-white dark:text-neutral-300" /> </div> <p className="text-sm font-medium">{name}</p> </div> @@ -99,12 +99,12 @@ export function ProductCard({ {/* Badges */} <div className="absolute top-3 left-3 flex flex-col gap-2"> {isNew && ( - <Badge className="bg-blue-500 hover:bg-blue-600 text-white"> + <Badge className="bg-blue-600 hover:bg-blue-700 dark:bg-blue-500 dark:hover:bg-blue-600 text-white shadow-lg"> New </Badge> )} {isSale && ( - <Badge className="bg-red-500 hover:bg-red-600 text-white"> + <Badge className="bg-red-600 hover:bg-red-700 dark:bg-red-500 dark:hover:bg-red-600 text-white shadow-lg"> -{discountPercentage}% </Badge> )} @@ -114,11 +114,11 @@ export function ProductCard({ <Button variant="ghost" size="icon" - className="absolute top-3 right-3 bg-white/80 hover:bg-white text-gray-600 hover:text-red-500 transition-colors" + className="absolute top-3 right-3 bg-white/90 dark:bg-neutral-900/90 hover:bg-white dark:hover:bg-neutral-900 text-gray-600 dark:text-gray-300 hover:text-red-500 dark:hover:text-red-400 transition-colors shadow-lg dark:shadow-black/20" onClick={handleWishlistToggle} > <Heart - className={`h-4 w-4 ${wishlisted ? 'fill-red-500 text-red-500' : ''}`} + className={`h-4 w-4 ${wishlisted ? 'fill-red-500 text-red-500 dark:fill-red-400 dark:text-red-400' : ''}`} /> </Button> @@ -129,7 +129,7 @@ export function ProductCard({ <button key={index} className={`w-2 h-2 rounded-full transition-colors ${ - index === currentImage ? 'bg-white' : 'bg-white/50' + index === currentImage ? 'bg-white dark:bg-neutral-300' : 'bg-white/50 dark:bg-neutral-500/50' }`} onClick={(e) => { e.preventDefault(); @@ -142,7 +142,7 @@ export function ProductCard({ )} {/* Hover overlay with actions */} - <div className={`absolute inset-0 bg-black/20 flex items-center justify-center transition-opacity duration-300 ${ + <div className={`absolute inset-0 bg-black/30 dark:bg-black/50 flex items-center justify-center transition-opacity duration-300 ${ isHovered ? 'opacity-100' : 'opacity-0' }`}> <div className="flex gap-3"> @@ -150,7 +150,7 @@ export function ProductCard({ variant="secondary" size="sm" onClick={handleQuickView} - className="bg-white/90 hover:bg-white text-gray-900" + className="bg-white/95 dark:bg-neutral-900/95 hover:bg-white dark:hover:bg-neutral-900 text-gray-900 dark:text-white shadow-lg dark:shadow-black/20" > <Eye className="h-4 w-4 mr-2" /> Quick View @@ -158,7 +158,7 @@ export function ProductCard({ <Button size="sm" onClick={handleAddToCart} - className="bg-primary hover:bg-primary/90" + className="bg-primary hover:bg-primary/90 dark:bg-primary dark:hover:bg-primary/90 shadow-lg dark:shadow-black/20" > <ShoppingBag className="h-4 w-4 mr-2" /> Add to Cart @@ -168,14 +168,14 @@ export function ProductCard({ </div> {/* Product Info */} - <CardContent className="p-4 space-y-3"> + <CardContent className="p-4 space-y-3 bg-white dark:bg-neutral-900"> {/* Category */} - <p className="text-xs text-muted-foreground uppercase tracking-wide"> + <p className="text-xs text-muted-foreground dark:text-neutral-500 uppercase tracking-wide"> {category} </p> {/* Product Name */} - <h3 className="font-semibold text-sm leading-tight line-clamp-2 group-hover:text-primary transition-colors"> + <h3 className="font-semibold text-sm leading-tight line-clamp-2 group-hover:text-primary dark:group-hover:text-primary transition-colors text-foreground dark:text-neutral-100"> {name} </h3> @@ -187,13 +187,13 @@ export function ProductCard({ key={star} className={`h-3 w-3 ${ star <= rating - ? 'fill-yellow-400 text-yellow-400' - : 'text-gray-300' + ? 'fill-yellow-400 text-yellow-400 dark:fill-yellow-500 dark:text-yellow-500' + : 'text-gray-300 dark:text-neutral-600' }`} /> ))} </div> - <span className="text-xs text-muted-foreground"> + <span className="text-xs text-muted-foreground dark:text-neutral-500"> ({reviewCount}) </span> </div> @@ -204,12 +204,12 @@ export function ProductCard({ {colors.slice(0, 4).map((color, index) => ( <div key={index} - className="w-4 h-4 rounded-full border border-gray-300" + className="w-4 h-4 rounded-full border border-gray-300 dark:border-neutral-600" style={{ backgroundColor: color }} /> ))} {colors.length > 4 && ( - <span className="text-xs text-muted-foreground ml-1"> + <span className="text-xs text-muted-foreground dark:text-neutral-500 ml-1"> +{colors.length - 4} </span> )} @@ -218,11 +218,11 @@ export function ProductCard({ {/* Price */} <div className="flex items-center gap-2"> - <span className="font-bold text-lg"> + <span className="font-bold text-lg text-foreground dark:text-neutral-100"> ${price.toFixed(2)} </span> {originalPrice && ( - <span className="text-sm text-muted-foreground line-through"> + <span className="text-sm text-muted-foreground dark:text-neutral-500 line-through"> ${originalPrice.toFixed(2)} </span> )} @@ -232,12 +232,12 @@ export function ProductCard({ {sizes.length > 0 && ( <div className="flex flex-wrap gap-1"> {sizes.slice(0, 4).map((size) => ( - <Badge key={size} variant="outline" className="text-xs px-2 py-1"> + <Badge key={size} variant="outline" className="text-xs px-2 py-1 border-neutral-300 dark:border-neutral-600 text-neutral-700 dark:text-neutral-300"> {size} </Badge> ))} {sizes.length > 4 && ( - <Badge variant="outline" className="text-xs px-2 py-1"> + <Badge variant="outline" className="text-xs px-2 py-1 border-neutral-300 dark:border-neutral-600 text-neutral-700 dark:text-neutral-300"> +{sizes.length - 4} </Badge> )} |