feat: Puente Mayúscula-Minúscula + TTS SpeechSynthesis + E2E fixes

This commit is contained in:
renato97
2026-07-21 15:31:46 -03:00
commit fa8e0c58ce
120 changed files with 16013 additions and 0 deletions
@@ -0,0 +1,34 @@
"use client"
import dynamic from "next/dynamic"
import type { Exercise, ExerciseType } from "@/curriculum/types"
const EjercicioSensibilizacion = dynamic(() => import("./ejercicio-sensibilizacion"), { ssr: false })
const EjercicioConciencia = dynamic(() => import("./ejercicio-conciencia"), { ssr: false })
const EjercicioEleccion = dynamic(() => import("./ejercicio-eleccion"), { ssr: false })
const EjercicioSecuencia = dynamic(() => import("./ejercicio-secuencia"), { ssr: false })
const EjercicioPalabra = dynamic(() => import("./ejercicio-palabra"), { ssr: false })
const EjercicioLectura = dynamic(() => import("./ejercicio-lectura"), { ssr: false })
const EjercicioTrazo = dynamic(() => import("./ejercicio-trazo"), { ssr: false })
const componentMap: Record<ExerciseType, React.ComponentType<{ exercise: Exercise; onComplete: (correct: boolean) => void }>> = {
sensibilizacion: EjercicioSensibilizacion,
conciencia: EjercicioConciencia,
trazo: EjercicioTrazo,
eleccion: EjercicioEleccion,
emparejar: EjercicioConciencia,
secuencia: EjercicioSecuencia,
palabra: EjercicioPalabra,
problema: EjercicioLectura,
lectura: EjercicioLectura,
}
interface Props {
exercise: Exercise
onComplete: (correct: boolean) => void
}
export default function ExerciseDispatcher({ exercise, onComplete }: Props) {
const Component = componentMap[exercise.type] || EjercicioSensibilizacion
return <Component exercise={exercise} onComplete={onComplete} />
}