/* global React, LINKS, Icon */
const { useState, useEffect, useRef } = React;
/* ============== Hero (sales-first, social proof) ============== */
function Hero({ t, lang, openModal }) {
const s = t.social;
const tItems = t.testimonials.items;
// short running snippets
const snippets = tItems.map((x) => ({
q: x.q.length > 88 ? x.q.slice(0, 85).trim() + "…" : x.q,
a: x.a, loc: x.loc
}));
const runItems = [...snippets, ...snippets];
const avatars = tItems.slice(0, 4).map((x) => x.a.slice(0, 1));
return (
{Icon.leaf()}{(() => {
const ey = t.hero.eyebrow;
const i = ey.indexOf("Psicoterapia");
return i > 0
? {ey.slice(0, i)}
{ey.slice(i)}
: ey;
})()}
{t.hero.title1} {t.hero.title2}
{t.hero.subA}{" "}
{t.hero.countries.map((c, i) =>
{c}{i < t.hero.countries.length - 1 ? " " : " "}
)}
{t.hero.subB}
{/* rating block — costado */}
{s.ratingValue}
{[0, 1, 2, 3, 4].map((i) => {Icon.star(15)})}
{s.ratingLabel}
{avatars.map((a, i) => {a})}
{s.ratingCount}
{/* running testimonials — medio */}
{s.running}
{runItems.map((r, i) =>
"{r.q}"
— {r.a} · {r.loc}
)}
{/* stats band — abajo */}
{s.stats.map((st, i) =>
)}
);
}
/* ============== Currency toggle ============== */
function CurrencyToggle({ t, cur, setCur, light, hideLabel }) {
return (
{!hideLabel &&
{t.services.curLabel}}
);
}
function Services({ t, cur, setCur }) {
const items = t.services.items.map((it, idx) => ({ ...it, _idx: idx }));
const iconFor = (it) => {
const n = (it.tag + " " + it.name).toLowerCase();
if (n.includes("solicitado") || n.includes("requested") || n.includes("pareja") || n.includes("couple")) return Icon.couples(26);
if (n.includes("individual")) return Icon.person(26);
return Icon.cap(26);
};
const isFeatured = (it) => {
const n = it.tag.toLowerCase();
return n.includes("solicitado") || n.includes("requested");
};
const [active, setActive] = useState(() => {
const f = items.findIndex(isFeatured);
return f >= 0 ? f : 0;
});
const sv = items[active] || items[0];
return (
{t.services.title}
{t.services.sub}
{items.map((it, i) =>
)}
{isFeatured(sv) &&
{sv.tag}}
{sv.desc}
{sv.bulletsTitle &&
{sv.bulletsTitle}}
{sv.bullets.map((b, j) =>
- {Icon.check(15)}{b}
)}
{sv.metaTitle &&
{sv.metaTitle}}
{sv.meta.map((md, j) => {md})}
{t.services.fxNote}
);
}
/* ============== Manifesto ============== */
function Manifesto({ t, lang }) {
const bgUrl = "https://images.unsplash.com/photo-1621933339571-a38230d0d974?w=1800&q=80&auto=format&fit=crop";
return (
{lang === "es" ? "Mi enfoque" : "My approach"}
{lang === "es" ?
<>Una terapia que acompaña y brinda herramientas para el cambio.> :
<>Therapy that walks with you and offers tools for change.>}
Lic. Guillermina Gómez · MP 47.834
);
}
/* ============== Media strip (apariciones) ============== */
function MediaStrip({ t, lang }) {
const [video, setVideo] = useState(null);
const items = t.media.items;
const loop = [...items, ...items];
useEffect(() => {
if (!video) return;
const onKey = (e) => {if (e.key === "Escape") setVideo(null);};
document.addEventListener("keydown", onKey);
document.body.style.overflow = "hidden";
return () => {document.removeEventListener("keydown", onKey);document.body.style.overflow = "";};
}, [video]);
return (
{t.media.title}
{t.media.sub}
{loop.map((v, i) =>
)}
{video &&
setVideo(null)}>
e.stopPropagation()}>
{video.source}{video.city ? " · " + video.city : ""}
{video.title}
}
);
}
/* ============== Process (compact, horizontal) ============== */
function Process({ t }) {
const [active, setActive] = useState(0);
const n = t.process.steps.length;
useEffect(() => {
const id = setInterval(() => setActive((a) => (a + 1) % n), 2400);
return () => clearInterval(id);
}, [n]);
return (
{t.process.title}
{t.process.steps.map((s, i) =>
)}
);
}
/* ============== FAQ + Agenda (combined) ============== */
function FaqBook({ t, lang, cur, setCur }) {
const [openIdx, setOpenIdx] = useState(0);
const waMsg = lang === "es" ?
"Hola Guillermina, me gustaría agendar mi primera cita." :
"Hi Guillermina, I'd like to book my first session.";
const waHref = `https://wa.me/${LINKS.whatsapp}?text=${encodeURIComponent(waMsg)}`;
const mailHref = `mailto:${LINKS.email}?subject=${encodeURIComponent(lang === "es" ? "Consulta — primera cita" : "Inquiry — first session")}`;
return (
);
}
Object.assign(window, { Hero, Services, Manifesto, MediaStrip, Process, FaqBook });