// ATOM Center — Shared Components (React + Babel) const { useState, useEffect, useRef, useMemo } = React; const t = (lang, path) => { const parts = path.split("."); let cur = window.I18N[lang]; for (const p of parts) { cur = cur?.[p]; if (cur == null) return path; } return cur; }; // Lucide icon helper (uses inline SVG paths to avoid CDN dependency) const Icon = ({ name, size = 20, ...props }) => { const paths = { "arrow-right": <>>, "arrow-up-right": <>>, "download": <>>, "check": <>>, "menu": <>>, "x": <>>, "map-pin": <>>, "phone": <>>, "mail": <>>, "globe": <>>, "message-circle": <>>, "badge-check": <>>, "award": <>>, "graduation-cap": <>>, "cloud": <>>, "code-2": <>>, "users-round": <>>, "rocket": <>>, "chevron-right": <>>, "chevron-down": <>>, "linkedin": <>>, "calendar": <>>, "clock": <>>, "send": <>>, "monitor": <>>, "library": <>>, "settings": <>>, "layers": <>>, }; return ( {paths[name]} ); }; // ---------------- NAVBAR ---------------- const Navbar = ({ page, lang, setLang, navigate, density }) => { const [mobileOpen, setMobileOpen] = useState(false); const tr = (k) => t(lang, "nav." + k); const links = [ { id: "home", label: tr("home") }, { id: "about", label: tr("about") }, { id: "programs", label: tr("programs") }, { id: "enterprise", label: tr("enterprise") }, { id: "blog", label: tr("blog") }, { id: "contact", label: tr("contact") }, ]; return ( { e.preventDefault(); navigate("home"); }} className="nav-logo"> ATOMCENTER {links.map(l => ( { e.preventDefault(); navigate(l.id); }} className={"nav-link" + (page === l.id ? " active" : "")}>{l.label} ))} setLang("fr")}>FR setLang("en")}>EN { e.preventDefault(); navigate("contact"); }} className="btn btn-primary btn-sm" style={{ display: "inline-flex" }}> {tr("cta")} setMobileOpen(true)} aria-label={tr("menu")}> {/* Mobile drawer */} setMobileOpen(false)}> e.stopPropagation()}> ATOMCENTER setMobileOpen(false)}> {links.map(l => ( { e.preventDefault(); navigate(l.id); setMobileOpen(false); }} className={page === l.id ? "active" : ""}>{l.label} ))} { e.preventDefault(); navigate("contact"); setMobileOpen(false); }} className="btn btn-primary btn-lg"> {tr("cta")} ); }; // ---------------- FOOTER ---------------- const Footer = ({ lang, navigate }) => { const tr = (k) => t(lang, "footer." + k); const ecoBrands = [ { id: "code", color: "#6848A8", label: "C" }, { id: "campus", color: "#F87808", label: "C" }, { id: "leaders", color: "#980818", label: "L" }, { id: "pioneer", color: "#284838", label: "P" }, ]; return ( ); }; // ---------------- ECOSYSTEM SECTION (shared) ---------------- const EcosystemSection = ({ lang }) => { const tr = (k) => t(lang, "ecosystem." + k); const items = [ { id: "code", color: "#6848A8", url: "https://www.atom-code.com/", name: tr("codeName"), desc: tr("codeDesc"), tag: "Software · Cloud · Cyber" }, { id: "campus", color: "#F87808", url: "https://www.atom-campus.com/", name: tr("campusName"), desc: tr("campusDesc"), tag: "Bootcamps · Talents" }, { id: "leaders", color: "#980818", url: "https://www.atom-leaders.com/", name: tr("leadersName"), desc: tr("leadersDesc"), tag: "Coaching · Executives" }, { id: "pioneer", color: "#284838", url: "https://www.atom-pioneer.com/", name: tr("pioneerName"), desc: tr("pioneerDesc"), tag: "Venture · Studio" }, ]; return ( {tr("eyebrow")} {tr("title")} {tr("sub")} {items.map(it => ( ATOM {it.name} {it.tag} {it.desc} {tr("visit")} ))} ); }; // ---------------- CTA SECTION (shared) ---------------- const CtaSection = ({ lang, navigate }) => { const tr = (k) => t(lang, "cta." + k); return ( {tr("title")} {tr("sub")} {e.preventDefault();navigate("contact");}}> {tr("btnPrimary")} {e.preventDefault();navigate("contact");}}> {tr("btnSecondary")} ); }; Object.assign(window, { Icon, Navbar, Footer, EcosystemSection, CtaSection, t });
{tr("sub")}
{it.desc}