This commit is contained in:
ct
2025-07-16 23:33:43 +08:00
parent a1f17325f1
commit ade86ef772
8 changed files with 266 additions and 200 deletions

View File

@@ -1,11 +1,13 @@
import { Badge } from '@/components/ui/badge';
import { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator } from '@/components/ui/breadcrumb';
import { Button } from '@/components/ui/button';
import { Card, CardContent } from '@/components/ui/card';
import { Input } from '@/components/ui/input';
import { KeywordBadge } from '@/components/ui/keyword-badge';
import { MemeCard } from '@/components/custom/meme-card';
import Footer from '@/pages/home/partials/Footer';
import { Link, router } from '@inertiajs/react';
import { Edit, Search } from 'lucide-react';
import { Search } from 'lucide-react';
import { useState } from 'react';
import { route } from 'ziggy-js';
import BrandLogo from '../home/partials/BrandLogo';
@@ -75,6 +77,24 @@ export default function MemesIndex({ memes, popularKeywords, filters }: Props) {
<div className="min-h-screen bg-neutral-50 pb-10 dark:bg-black">
<div className="container mx-auto px-4 pt-8 pb-0">
<BrandLogo className="py-3"></BrandLogo>
{/* Breadcrumbs */}
<Breadcrumb className="mb-6">
<BreadcrumbList>
<BreadcrumbItem>
<BreadcrumbLink asChild>
<Link href={route('home')}>Home</Link>
</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator />
<BreadcrumbItem>
<BreadcrumbPage>
{filters.search ? `Search: ${filters.search}` : 'Meme Library'}
</BreadcrumbPage>
</BreadcrumbItem>
</BreadcrumbList>
</Breadcrumb>
{/* Header */}
<div className="mb-8 text-center">
<h1 className="text-foreground mb-4 text-4xl font-bold">Meme Library</h1>
@@ -142,42 +162,7 @@ export default function MemesIndex({ memes, popularKeywords, filters }: Props) {
{/* Memes Grid */}
<div className="xs:grid-cols-2 mb-8 grid grid-cols-1 gap-6 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-6">
{memes.data.map((meme) => (
<Card key={meme.ids} className="group flex flex-col overflow-hidden p-0 transition-shadow hover:shadow-lg">
<div className="relative aspect-[9/16] overflow-hidden bg-[#00FF00]">
<img
src={meme.webp_url}
alt={meme.name}
className="h-full w-full object-cover transition-transform group-hover:scale-105"
/>
<Link
href={route('memes.show', meme.slug)}
className="bg-opacity-0 absolute inset-0 flex items-center justify-center transition-all group-hover:opacity-40 hover:bg-black"
>
<Edit className="h-8 w-8 text-white opacity-0 transition-opacity group-hover:opacity-100" />
</Link>
</div>
<div className="flex flex-grow flex-col px-4 pt-0 pb-4">
<h3 className="text-foreground mb-2 line-clamp-2 text-sm font-semibold">{meme.name}</h3>
<div className="mb-3 flex flex-wrap gap-1">
{meme.keywords?.slice(0, 6).map((keyword, index) => <KeywordBadge key={index} keyword={keyword} />)}
{meme.keywords && meme.keywords.length > 6 && (
<Badge variant="secondary" className="text-xs">
+{meme.keywords.length - 6} more
</Badge>
)}
</div>
<div className="mt-auto">
<Link href={route('memes.show', meme.slug)}>
<Button
size="sm"
className="w-full bg-gradient-to-r from-purple-600 to-pink-600 text-white hover:from-purple-700 hover:to-pink-700"
>
Use meme
</Button>
</Link>
</div>
</div>
</Card>
<MemeCard key={meme.ids} meme={meme} />
))}
</div>