const { useState, useEffect, useRef } = React; // ── Language / Theme selector controls ─────────────────────────────────────── const LangDropdown = ({ lang, setLang }) => { const [open, setOpen] = useState(false); const ref = useRef(null); useEffect(() => { const handler = (e) => { if (ref.current && !ref.current.contains(e.target)) setOpen(false); }; document.addEventListener('mousedown', handler); return () => document.removeEventListener('mousedown', handler); }, []); const langs = Object.values(window.LANGS || {}); return (
{open && (
{langs.map(l => ( ))}
)}
); }; const ThemeToggle = ({ isDark, toggle }) => { const [hov, setHov] = useState(false); return ( ); }; // ── Nav ──────────────────────────────────────────────────────────────────────── const Nav = ({ page, navigate, lang, setLang, isDark, toggleTheme }) => { const [scrolled, setScrolled] = useState(false); useEffect(() => { const h = () => setScrolled(window.scrollY > 10); window.addEventListener('scroll', h); return () => window.removeEventListener('scroll', h); }, []); const links = [ { label: S.nav_product, page: 'home' }, { label: S.nav_pricing, page: 'pricing' }, { label: S.nav_docs, page: 'faq' }, ]; return ( ); }; // ── Footer ───────────────────────────────────────────────────────────────────── const Footer = ({ navigate }) => ( ); // ── App ──────────────────────────────────────────────────────────────────────── const App = () => { const getSaved = (key, def) => { try { return localStorage.getItem(key) || def; } catch { return def; } }; const LANG_CODE_MAP = { en: 'EN', de: 'DE', fr: 'FR', it: 'IT', es: 'ES', pt: 'PT', ua: 'UA', uk: 'UA' }; const toSupportedLang = (value) => { if (!value) return null; const normalized = String(value).trim().toLowerCase(); return LANG_CODE_MAP[normalized] || null; }; const getUrlLang = () => { try { const params = new URLSearchParams(window.location.search); return toSupportedLang(params.get('lang')); } catch { return null; } }; const getBrowserLang = () => { try { const browserValue = navigator.language || navigator.userLanguage || ''; return toSupportedLang(browserValue.split('-')[0]); } catch { return null; } }; const getInitialLang = () => getUrlLang() || toSupportedLang(getSaved('ark_lang', 'EN')) || getBrowserLang() || 'EN'; const [page, setPage] = useState(getSaved('ark_page', 'home')); const [lang, setLangState] = useState(getInitialLang); const [isDark, setIsDark] = useState(getSaved('ark_theme', 'light') === 'dark'); const [ver, setVer] = useState(0); // triggers re-render on theme/lang change const navigate = (p) => { setPage(p); try { localStorage.setItem('ark_page', p); } catch {} window.scrollTo({ top: 0, behavior: 'smooth' }); }; const applyTheme = (dark) => { Object.assign(window.T, dark ? window.DARK_T : window.LIGHT_T); window.applyThemeCSSVars(); try { localStorage.setItem('ark_theme', dark ? 'dark' : 'light'); } catch {} }; const applyLang = (code) => { const safeCode = (window.LANGS && window.LANGS[code]) ? code : 'EN'; if (window.LANGS && window.LANGS[safeCode]) Object.assign(window.S, window.LANGS[safeCode].s); if (window.NEW_S && window.NEW_S[safeCode]) Object.assign(window.S, window.NEW_S[safeCode]); window.CURRENT_LANG = safeCode; if (window.applyLangSEO) window.applyLangSEO(safeCode); try { localStorage.setItem('ark_lang', safeCode); } catch {} try { const url = new URL(window.location.href); url.searchParams.set('lang', safeCode.toLowerCase() === 'ua' ? 'ua' : safeCode.toLowerCase()); window.history.replaceState({}, '', url.toString()); } catch {} return safeCode; }; // Apply saved preferences on mount useEffect(() => { applyTheme(isDark); applyLang(lang); }, []); useEffect(() => { const syncLangFromUrl = () => { const nextLang = getUrlLang(); if (!nextLang || nextLang === window.CURRENT_LANG) return; applyLang(nextLang); setLangState(nextLang); setVer(v => v + 1); }; window.addEventListener('popstate', syncLangFromUrl); return () => window.removeEventListener('popstate', syncLangFromUrl); }, []); const toggleTheme = () => { const next = !isDark; applyTheme(next); setIsDark(next); setVer(v => v + 1); }; const setLang = (code) => { const safeCode = applyLang(code); setLangState(safeCode); setVer(v => v + 1); }; const pages = { home: LandingPage, pricing: PricingPage, order: OrderFormPage, faq: FAQTrustPage, privacy: PrivacyPage, terms: TermsPage }; const Page = pages[page] || LandingPage; return (
); }; const root = ReactDOM.createRoot(document.getElementById('root')); root.render();