"use client"; import { AnimatePresence, motion } from "framer-motion"; import { useState } from "react"; import { cn } from "@/lib/utils"; interface Projects7Type { id: number; title: string; category: string; description: string; image: string; tags: string[]; } const categoryLabels: Record = { MINIMAL: "مینیمال", ABSTRACT: "انتزاعی", EDITORIAL: "ادیتوریال", "STUDIO SHOT": "عکاسی استودیو", }; const filterCategories = [ { key: "ALL", label: "همه" }, { key: "MINIMAL", label: "مینیمال" }, { key: "ABSTRACT", label: "انتزاعی" }, { key: "EDITORIAL", label: "ادیتوریال" }, { key: "STUDIO SHOT", label: "عکاسی استودیو" }, ] as const; const Projects7Data: Projects7Type[] = [ { id: 1, title: "هندسه مینیمال", category: "MINIMAL", description: "ترکیبی تمیز با تمرکز بر شکل‌های ساده و فضای منفی که آرامش و وضوح را برمی‌انگیزد.", image: "/block-media/shadcnblocks/block/lummi/random1.jpeg", tags: ["minimal", "geometry"], }, { id: 2, title: "جریان رنگ انتزاعی", category: "ABSTRACT", description: "رنگ‌های زنده در الگویی انتزاعی می‌آمیزند و حس حرکت و انرژی می‌آفرینند.", image: "/block-media/shadcnblocks/block/lummi/random2.jpeg", tags: ["abstract", "color"], }, { id: 3, title: "پرتره ادیتوریال", category: "EDITORIAL", description: "پرتره‌ای ادیتوریال چشمگیر با نورپردازی دراماتیک و تمرکز بر بیان و حس.", image: "/block-media/shadcnblocks/block/lummi/random3.jpeg", tags: ["editorial", "portrait"], }, { id: 4, title: "طبیعت بی‌جان استودیو", category: "STUDIO SHOT", description: "عکاسی استودیویی با چیدمانی دقیق از اشیای روزمره که بافت و فرم را برجسته می‌کند.", image: "/block-media/shadcnblocks/block/lummi/random4.jpeg", tags: ["studio", "still-life"], }, { id: 5, title: "سایه‌های مینیمال", category: "MINIMAL", description: "سایه‌های نرم و گرادیان‌های ظریف، صحنه‌ای آرام و مینیمال با حس مدرن می‌سازند.", image: "/block-media/shadcnblocks/block/lummi/random5.jpeg", tags: ["minimal", "shadows"], }, { id: 6, title: "استودیوی انتزاعی", category: "ABSTRACT", description: "نور استودیو با فرم‌های انتزاعی در این ترکیب‌بندی آزمایشی می‌آمیزد و هنر و عکاسی را در هم می‌کشد.", image: "/block-media/shadcnblocks/block/lummi/random6.jpeg", tags: ["abstract", "studio"], }, ]; interface Projects7Props { className?: string; } const Projects7 = ({ className }: Projects7Props) => { const [activeFilter, setActiveFilter] = useState("ALL"); const [filteredItems, setFilteredItems] = useState(Projects7Data); const handleFilterChange = (category: string) => { setActiveFilter(category); if (category === "ALL") { setFilteredItems(Projects7Data); } else { const filtered = Projects7Data.filter( (item) => item.category === category || item.tags.includes(category.toLowerCase().replace(" ", "-")), ); setFilteredItems(filtered); } }; const activeFilterLabel = filterCategories.find((item) => item.key === activeFilter)?.label ?? activeFilter; return (
{filterCategories.map(({ key, label }) => ( ))}
{filteredItems.map((item) => (
{item.title}

{categoryLabels[item.category] ?? item.category}

{item.title}

{item.description}

))}
{filteredItems.length === 0 && (

موردی در دسته «{activeFilterLabel}» یافت نشد.

)}
); }; export { Projects7 };