// Reusable UI parts
const { useState, useEffect, useRef } = React;
function Nav({ lang, setLang, content, onContact }) {
const [active, setActive] = useState("hero");
const [menuOpen, setMenuOpen] = useState(false);
useEffect(() => {
const onScroll = () => {
const ids = content.nav.map(n => n.id);
for (const id of ids) {
const el = document.getElementById(id);
if (!el) continue;
const r = el.getBoundingClientRect();
if (r.top <= 120 && r.bottom >= 120) { setActive(id); break; }
}
};
window.addEventListener("scroll", onScroll, { passive: true });
return () => window.removeEventListener("scroll", onScroll);
}, [content]);
useEffect(() => {
document.body.style.overflow = menuOpen ? "hidden" : "";
return () => { document.body.style.overflow = ""; };
}, [menuOpen]);
const go = (id) => (e) => {
e.preventDefault();
const el = document.getElementById(id);
if (el) window.scrollTo({ top: el.offsetTop - 64, behavior: "smooth" });
setMenuOpen(false);
};
return (
<>
{content.nav.map(n => (
{n.label}
))}
0312 395 58 62
{setLang && (
)}
>
);
}
function Ticker({ items }) {
const doubled = [...items, ...items];
return (
{doubled.map((t, i) => ◇ {t})}
);
}
function WAFab({ lang }) {
return (
WhatsApp
{lang === "tr" ? "Hızlı yazış" : "Quick chat"}
);
}
function ContactModal({ open, onClose, info, lang }) {
return (
e.stopPropagation()}>
{lang === "tr" ? "İletişim" : "Contact"}
☎
{lang === "tr" ? "Telefon (7/24)" : "Phone (24/7)"}
{info.phone}
◉
{lang === "tr" ? "Adres" : "Address"}
{info.address}
◐
{lang === "tr" ? "Çalışma Saatleri" : "Hours"}
{info.hours}
);
}
function TweaksPanel({ open, setOpen, tweaks, setTweaks }) {
if (!open) return null;
const colors = [
{ key: "#facc15", name: "Sarı" },
{ key: "#f97316", name: "Turuncu" },
{ key: "#ef4444", name: "Kırmızı" },
{ key: "#22d3ee", name: "Siyan" },
{ key: "#a3e635", name: "Yeşil" },
];
const set = (patch) => {
const next = { ...tweaks, ...patch };
setTweaks(next);
try {
window.parent.postMessage({ type: "__edit_mode_set_keys", edits: patch }, "*");
} catch (e) {}
};
return (
Tweaks
Vurgu rengi
{colors.map(c => (
set({ accent: c.key })} />
))}
Tema
Dil
Ticker
);
}
function MapCanvas({ filter, hovered, setHovered, selected, setSelected }) {
const hq = GEO.hq;
const showAnkara = filter === "all" || filter === "ankara";
const showProv = filter === "all" || filter === "provinces" || (filter !== "ankara" && filter !== "all");
const activeProv = filter !== "all" && filter !== "ankara" && filter !== "provinces" ? filter : null;
const isDimmed = (kind, key) => {
if (filter === "all") return false;
if (filter === "ankara") return kind !== "ankara";
if (filter === "provinces") return kind !== "province";
return !(kind === "province" && key === filter);
};
return (
);
}
Object.assign(window, { Nav, Ticker, WAFab, ContactModal, TweaksPanel, MapCanvas });