"use client"; import { useEffect, useState, useRef } from "react"; import { motion, AnimatePresence } from "framer-motion"; import { MenuCategory, MenuItem as MenuItemType } from "@/data/menu"; import { CategoryNav } from "@/components/CategoryNav"; import { MenuItem } from "@/components/MenuItem"; export const CATEGORY_ICONS: Record = { "kahvaltiliklar": "๐ŸŒ…", "kaseler": "๐Ÿฅ—", "burger-ve-sandvic": "๐Ÿ”", "pizzalar": "๐Ÿ•", "makarnalar": "๐Ÿ", "baslangiclar": "๐Ÿง†", "salatalar": "๐Ÿฅฌ", "ana-yemekler": "๐Ÿฝ๏ธ", "tatlilar": "๐Ÿฎ", "iฬ‡mza-kokteyller": "๐Ÿน", "klasik-kokteyller": "๐Ÿธ", "biralar": "๐Ÿบ", "shotlar": "๐Ÿฅƒ", "sise-ve-kadeh-alkollu": "๐Ÿฅ‚", "saraplar": "๐Ÿท", "cerezler": "๐Ÿฅœ", "alkolsuz-iฬ‡cecekler": "๐Ÿงƒ", "sicak-kahveler": "โ˜•", "soguk-kahveler": "๐ŸงŠ", "ekstralar": "โœจ", }; type SiteSettings = { logoUrl: string location: string restaurantName: string } export default function MenuClient({ initialCategories, siteSettings }: { initialCategories: MenuCategory[], siteSettings: SiteSettings }) { const [activeCategoryId, setActiveCategoryId] = useState( initialCategories[0]?.id || "" ); const [selectedItem, setSelectedItem] = useState(null); const sectionRefs = useRef<(HTMLElement | null)[]>([]); useEffect(() => { const observer = new IntersectionObserver( (entries) => { const hit = entries.find((e) => e.isIntersecting); if (hit) setActiveCategoryId(hit.target.id); }, { root: null, rootMargin: "-100px 0px -62% 0px", threshold: 0 } ); sectionRefs.current.forEach((ref) => ref && observer.observe(ref)); return () => observer.disconnect(); }, []); useEffect(() => { if (selectedItem) { document.body.style.overflow = "hidden"; } else { document.body.style.overflow = "unset"; } return () => { document.body.style.overflow = "unset"; }; }, [selectedItem]); return (
{/* โ”€โ”€ Hero โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ */}
{/* Background Image */}
{/* Dark overlay to make text readable */}
{/* hero content */}

Akyaka ยท MuฤŸla

{/* Logo */} Moy Beach
โœฆ

Akyaka'nฤฑn en keyifli menรผsรผ

{/* wave transition */}
{/* โ”€โ”€ Category Nav โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ */} {/* โ”€โ”€ Menu Sections โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ */}
{initialCategories.map((category, index) => ( { sectionRefs.current[index] = el; }} className="pt-10 px-4 max-w-lg mx-auto scroll-mt-[62px]" initial={{ opacity: 0, y: 14 }} whileInView={{ opacity: 1, y: 0 }} viewport={{ once: true, margin: "-50px" }} transition={{ duration: 0.5, ease: [0.16, 1, 0.3, 1] }} > {/* section header */}
{CATEGORY_ICONS[category.id] ?? "๐Ÿฝ๏ธ"}

{category.title}

{category.items.map((item, idx) => ( setSelectedItem(item)} /> ))}
))}
{/* โ”€โ”€ Footer โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ */}
{/* Footer Logo */} Moy Beach

Akyaka, MuฤŸla

โœฆ

ยฉ 2026 KiteBeach Akyaka. Tรผm haklarฤฑ saklฤฑdฤฑr.

Created by ayris.tech
{/* โ”€โ”€ Modal โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ */} {selectedItem && ( setSelectedItem(null)} > e.stopPropagation()} > {selectedItem.image && (
{selectedItem.name}
)}

{selectedItem.name}

{selectedItem.price}

{selectedItem.description}

)}
); }