/* ============================================================
Manigod Kids Club — feature sections
SeasonExplorer (Saisons), TarifsView, GalleryView (+lightbox),
ContactView. Depends on core.jsx + data.jsx + sections-common.jsx.
============================================================ */
const { useState: uS2, useEffect: uE2 } = React;
/* ====================================================
SAISONS — explorer with switch, age groups, activities, ESF
==================================================== */
function ActPhoto({ act, idx }) {
return (
{String(idx + 1).padStart(2, "0")}
{_T(act.t)}
{_T(act.desc)}
);
}
function SeasonExplorer() {
// Été prioritaire : la page Saisons s'ouvre toujours sur l'été au
// chargement / rechargement (l'utilisateur bascule ensuite via le switch).
const [season, setSeason] = uS2("ete");
const S = SEASONS[season];
const ink = season === "hiver";
let n = 0;
// Hiver = green ambiance on the whole Saisons page
uE2(() => {
const app = document.querySelector(".mkc-app");
if (app) app.setAttribute("data-saison", season);
return () => {if (app) app.removeAttribute("data-saison");};
}, [season]);
const bannerClass = "mkc-showcase__hero mkc-showcase__hero--pict mkc-showcase__hero--banner mkc-showcase__hero--" +
season + (ink ? " mkc-showcase__hero--onink" : "");
return (
<>
{/* season banner + switch */}
{_T(S.hero.sub)}
{_T(S.hero.title)}
{_T(S.hero.lead)}
{/* age groups + activities */}
{S.groups.map((g) =>
{_T(S.label)} · {_T(g.age)}
{g.titleSvg ?
:
{_T(g.name)} }
{_T(g.sub)}
{_T(g.age)}
{season === "ete" &&
{_T("Crédit photo : Cathy Cohendet")}
}
)}
{season === "hiver" &&
{_T("Collaboration ESF")}
{_T("Une liaison fluide avec l'École du Ski Français")}
{_T("Prise en charge des enfants directement entre le Manigod Kids Club et les activités ESF — nous assurons l'accueil avant et après les cours de ski, sans transition à gérer pour vous.")}
{_T("Ski")}
{_T("Snowboard")}
{_T("Activités encadrées")}
}
{season === "ete" &&
{_T("Encadrement")}
{_T("Un cadre naturel, familial et sécurisé")}
{_T("Chaque groupe est suivi par une équipe dédiée. Les activités sont adaptées à l'âge des enfants, avec un vrai temps pour observer, jouer et découvrir la montagne à leur rythme.")}
}
>);
}
/* ====================================================
JOURNÉE TYPE (Saisons) — timeline par groupe d'âge
==================================================== */
function JourneeStep({ s }) {
return (
{s.time}
{s.txt.map((t, i) =>
{_T(t)}
)}
);
}
function JourneeGroup({ g, hideName, inkCard }) {
return (
{_T("Journée type")}{hideName ? "" : " · " + _T(g.age)}
{hideName ?
{_T(g.age)} :
}
{_T(g.sub)}
{!hideName &&
{_T(g.age)} }
{g.steps.map((s, i) => )}
);
}
function JourneeType({ season }) {
const hideName = season === "hiver";
const inkCard = season === "ete";
return (
);
}
/* ====================================================
TARIFS
==================================================== */
function TarifCard({ t, book, season }) {
const feat = t.feat;
return (
{_T(t.t)}
{_T(t.d)}
{t.p} €
{t.bullets.map((b) =>
{_T(b)}
)}
book(season)}>{_T("Réserver")}
);
}
function ResidentInfo() {
return (
{_T("Résident de Manigod\u00a0?")}
{_T("Vous avez droit à une réduction.")}
{_T("Inutile de payer à l'avance\u00a0: contactez-nous et nous appliquons la réduction ensuite.")}
{_T("Nous contacter")}
);
}
function AccueilPonctuel() {
return (
{_T("Option flexible · sans réservation")}
{_T("Besoin de quelques heures pour vous\u00a0?")}
{_T("Déposez votre enfant au Kids Club pour une courte durée, selon les disponibilités. Paiement sur place, selon le temps d'accueil.")}
{_T("Demander une disponibilité")}
);
}
function TarifsView({ book }) {
const [season, setSeason] = uS2("hiver");
const S = TARIFS_BY_SEASON[season];
const six = S.plans.length > 3;
const ink = season === "hiver";
// mirror the Saisons page: the switch changes the whole page ambiance
uE2(() => {
const app = document.querySelector(".mkc-app");
if (app) app.setAttribute("data-saison", season);
return () => { if (app) app.removeAttribute("data-saison"); };
}, [season]);
return (
{window.tx("Saison " + S.label, (season === "ete" ? "Summer" : "Winter") + " season")}
{_T(S.period)}
{_T(S.note)}
{S.plans.map((t) => )}
{TARIF_PERKS.map((p, i) =>
)}
);
}
/* ====================================================
GALERIE + LIGHTBOX
==================================================== */
function GalleryView() {
const [season, setSeason] = uS2("ete");
const [box, setBox] = uS2(-1);
const items = GALLERY[season];
const isEte = season === "ete";
const ink = season === "hiver";
// mirror the Saisons page: the switch changes the whole page ambiance
uE2(() => {
const app = document.querySelector(".mkc-app");
if (app) app.setAttribute("data-saison", season);
return () => { if (app) app.removeAttribute("data-saison"); };
}, [season]);
uE2(() => {
if (box < 0) return;
const k = (e) => {
if (e.key === "Escape") setBox(-1);else
if (e.key === "ArrowRight") setBox((b) => (b + 1) % items.length);else
if (e.key === "ArrowLeft") setBox((b) => (b - 1 + items.length) % items.length);
};
window.addEventListener("keydown", k);
return () => window.removeEventListener("keydown", k);
}, [box, items.length]);
return (
<>
{!isEte &&
{_T("Illustrations de la saison hiver en attendant vos photos réelles — mises à jour dès qu'elles sont disponibles.")}
}
{items.map((it, i) =>
setBox(i)} aria-label={window.tx("Agrandir : " + it.cap, "Enlarge: " + _T(it.cap))}>
{_T(it.cap)}
)}
{isEte &&
{_T("Crédit photo : Cathy Cohendet")}
}
{box >= 0 &&
setBox(-1)} role="dialog" aria-modal="true">
setBox(-1)}>
{e.stopPropagation();setBox((box - 1 + items.length) % items.length);}}>
e.stopPropagation()} />
{e.stopPropagation();setBox((box + 1) % items.length);}}>
{_T(items[box].cap)} · {box + 1} / {items.length}
}
>);
}
/* ====================================================
CONTACT
==================================================== */
function ContactView({ sent }) {
return (
);
}
Object.assign(window, { SeasonExplorer, JourneeType, JourneeGroup, JourneeStep, TarifsView, AccueilPonctuel, GalleryView, ContactView, ActPhoto, TarifCard, ResidentInfo });