'use client' import Link from 'next/link' import { Heart, GitCompare, ExternalLink, FileText, Code } from 'lucide-react' import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from '@/components/ui/card' import { Badge } from '@/components/ui/badge' import { Button } from '@/components/ui/button' import { AITool } from '@/lib/types' import { getCategoryIcon, getCategoryColor } from '@/lib/data' import { useAppStore } from '@/lib/store' import { formatNumber, slugify } from '@/lib/utils' import { cn } from '@/lib/utils' interface ToolCardProps { tool: AITool variant?: 'default' | 'compact' } export function ToolCard({ tool, variant = 'default' }: ToolCardProps) { const { favorites, addFavorite, removeFavorite, isFavorite } = useAppStore() const { comparison, addToComparison, removeFromComparison, isInComparison } = useAppStore() const favorite = isFavorite(tool.directory) const inComparison = isInComparison(tool.directory) const toggleFavorite = (e: React.MouseEvent) => { e.preventDefault() if (favorite) { removeFavorite(tool.directory) } else { addFavorite(tool.directory) } } const toggleComparison = (e: React.MouseEvent) => { e.preventDefault() if (inComparison) { removeFromComparison(tool.directory) } else if (comparison.length < 4) { addToComparison(tool.directory) } } if (variant === 'compact') { return ( {tool.name} {tool.company} {getCategoryIcon(tool.category)} {tool.category} {tool.models.slice(0, 1).map((model) => ( {model} ))} ) } return ( {getCategoryIcon(tool.category)} {tool.category} {tool.name} {tool.company} = 4} > {tool.description} {/* Models */} {tool.models.length > 0 && ( {tool.models.slice(0, 3).map((model) => ( {model} ))} {tool.models.length > 3 && ( +{tool.models.length - 3} more )} )} {/* Stats */} {tool.file_count} files {formatNumber(tool.total_lines)} lines View Details {tool.website && ( )} ) }
{tool.description}