'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}

{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
{tool.website && ( )}
) }