// diag-steps.jsx — Pantallas del flujo: Intro, EjeStep, MetasStep, DatosStep.
const CheckIcon = () => (
);
function EjeFloaters({ ejeKey }) {
const inner = window.DIAG_EJE_ICONS[ejeKey] || '';
const spots = [
{ top: '4%', left: '6%', size: 30, dur: '7s', delay: '0s', op: 0.10 },
{ top: '20%', left: '90%', size: 22, dur: '9s', delay: '-2s', op: 0.08 },
{ top: '64%', left: '3%', size: 26, dur: '8s', delay: '-4s', op: 0.07 },
{ top: '82%', left: '84%', size: 34, dur: '10s', delay: '-1s', op: 0.09 },
{ top: '46%', left: '50%', size: 18, dur: '11s', delay: '-3s', op: 0.05 },
];
return (
{spots.map((s, i) => (
))}
);
}
function ejeBgSrc(key) {
const map = {
enfoque: window.NL_ENFOQUE_BG || 'assets/enfoque-bg-web.jpg',
integracion: window.NL_INTEGRACION_BG || 'assets/integracion-bg-web.jpg',
};
return map[key] || '';
}
/* ------------------------------------------------------------------ INTRO */
function Intro({ onStart }) {
return (
Diagnóstico · The Next Level 360
¿En qué nivel estás hoy
?
Un diagnóstico honesto de los 8 ejes de The Next Level 360.
Responde 40 afirmaciones , define a dónde quieres llegar y recibe
tu mapa de partida con el curso recomendado para tu siguiente nivel.
Comenzar diagnóstico →
¡Vamos a tu siguiente nivel!
);
}
/* --------------------------------------------------------------- EJE STEP */
function EjeStep({ eje, idx, total, answers, onAnswer, onPrev, onNext, hintMissing }) {
const vals = answers[eje.key] || [];
const done = vals.filter(v => typeof v === 'number').length;
const allDone = done === eje.q.length;
return (
{eje.bg && (
)}
{eje.n}
Eje {eje.n} de 08
{eje.name}
{eje.tagline}
{eje.desc}
Indica qué tanto estás de acuerdo con cada afirmación.
{eje.q.map((text, qi) => {
const sel = vals[qi];
const pending = hintMissing && typeof sel !== 'number';
return (
{window.DIAG_SCALE.map(opt => {
const active = sel === opt.v;
return (
onAnswer(eje.key, qi, opt.v)}>
{opt.short}
);
})}
En desacuerdo
De acuerdo
);
})}
← Atrás
{done} / {eje.q.length}
{idx === total - 1 ? 'Definir mis metas' : 'Siguiente eje'} →
);
}
/* ----------------------------------------------------------------- METAS */
function MetaSlider({ score, value, onChange }) {
const curPct = (score.current / 5) * 100;
const tgtPct = (value / 5) * 100;
return (
{score.n}
{score.name}
Hoy estás en {score.current.toFixed(1)}
{value}
onChange(score.key, Number(e.target.value))} />
1 · Punto de partida 2 3 4 5 · Imparable
);
}
function MetasStep({ scores, targets, onChange, onPrev, onNext }) {
return (
Paso final · Tu siguiente nivel
¿Cuál es tusiguiente nivel ?
Esta es la otra mitad del mapa. Mueve cada control hasta el nivel al que quieres llegar
en los próximos meses. La marca clara muestra dónde estás hoy.
{scores.map(s => (
))}
← Atrás
Ver mi siguiente nivel →
);
}
/* ----------------------------------------------------------------- DATOS */
function DatosStep({ data, set, onPrev, onSubmit }) {
const [touched, setTouched] = React.useState(false);
const emailOk = /^\S+@\S+\.\S+$/.test(data.email);
const phoneOk = data.telefono.replace(/\D/g, '').length >= 8;
const nameOk = data.nombre.trim().length > 1;
const errs = {
nombre: touched && !nameOk,
email: touched && !emailOk,
telefono: touched && !phoneOk,
};
const go = () => {
setTouched(true);
if (nameOk && emailOk && phoneOk) onSubmit();
else {
const el = document.querySelector('.dfield.err input');
if (el) el.focus();
}
};
return (
Casi listo
¿A dónde te enviamos tu diagnóstico ?
Recibirás tu mapa de los 8 ejes y tu curso recomendado por WhatsApp y correo.
Tus datos son confidenciales · solo se usan para enviarte tu resultado.
← Atrás
Generar mi diagnóstico →
);
}
Object.assign(window, { Intro, EjeStep, MetasStep, DatosStep });