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 { Search } from 'lucide-react'; import { useState } from 'react'; import { route } from 'ziggy-js'; import BrandLogo from '../home/partials/BrandLogo'; interface MemeMedia { ids: string; name: string; description: string; keywords: string[]; action_keywords: string[]; emotion_keywords: string[]; misc_keywords: string[]; mov_url: string; webm_url: string; gif_url: string; webp_url: string; slug: string; } interface CursorPaginatedMemes { data: MemeMedia[]; next_cursor: string | null; prev_cursor: string | null; next_page_url: string | null; prev_page_url: string | null; per_page: number; path: string; } interface Props { memes: CursorPaginatedMemes; types: string[]; popularKeywords: string[]; filters: { search?: string; }; } export default function MemesIndex({ memes, popularKeywords, filters }: Props) { const [search, setSearch] = useState(filters.search || ''); const handleSearch = (e: React.FormEvent) => { e.preventDefault(); navigateToSearch(search); }; const handleKeywordClick = (keyword: string) => { setSearch(keyword); navigateToSearch(keyword); }; const navigateToSearch = (searchTerm: string) => { if (!searchTerm.trim()) { router.get(route('memes.index')); return; } const trimmedSearch = searchTerm.trim(); // Convert spaces to + for URL segment const urlSegment = trimmedSearch.replace(/\s+/g, '+'); router.get(route('memes.search', urlSegment)); }; return ( <>
{/* Breadcrumbs */} Home {filters.search ? `Search: ${filters.search}` : 'Meme Library'} {/* Header */}

Meme Library

Thousands of memes ready for TikTok, Reels, Threads and YouTube Shorts. No signup needed - click any meme to start creating!

{/* Search and Filters */}
setSearch(e.target.value)} className="h-12 pl-12 text-lg" />
{/* Popular Keywords */}

Popular Keywords

{popularKeywords.map((keyword) => ( ))}
{/* Active Search */} {filters.search && (
Search: {filters.search}
)}
{/* Memes Grid */}
{memes.data.map((meme) => ( ))}
{/* Cursor Pagination */} {(memes.next_page_url || memes.prev_page_url) && (
{memes.prev_page_url && ( ← Previous )}
{memes.next_page_url && ( Next → )}
{memes.prev_page_url && ( ← Back to first page )}
)}
); }