feat: Puente Mayúscula-Minúscula + TTS SpeechSynthesis + E2E fixes
This commit is contained in:
@@ -0,0 +1,119 @@
|
||||
import type { Stage } from '../types'
|
||||
|
||||
const palabras2silabas = [
|
||||
{ palabra: 'MAPA', silabas: ['MA', 'PA'], emoji: '🗺️' },
|
||||
{ palabra: 'PASA', silabas: ['PA', 'SA'], emoji: '🔄' },
|
||||
{ palabra: 'SALA', silabas: ['SA', 'LA'], emoji: '🏠' },
|
||||
{ palabra: 'TAPA', silabas: ['TA', 'PA'], emoji: '📦' },
|
||||
{ palabra: 'LATA', silabas: ['LA', 'TA'], emoji: '🥫' },
|
||||
{ palabra: 'NIDO', silabas: ['NI', 'DO'], emoji: '🪺' },
|
||||
{ palabra: 'DEDO', silabas: ['DE', 'DO'], emoji: '👉' },
|
||||
{ palabra: 'RATO', silabas: ['RA', 'TO'], emoji: '⏰' },
|
||||
{ palabra: 'MESA', silabas: ['ME', 'SA'], emoji: '🪑' },
|
||||
{ palabra: 'PATO', silabas: ['PA', 'TO'], emoji: '🦆' },
|
||||
{ palabra: 'LIMA', silabas: ['LI', 'MA'], emoji: '🍋' },
|
||||
{ palabra: 'SOPA', silabas: ['SO', 'PA'], emoji: '🥣' },
|
||||
{ palabra: 'TINA', silabas: ['TI', 'NA'], emoji: '🛁' },
|
||||
{ palabra: 'MONO', silabas: ['MO', 'NO'], emoji: '🐵' },
|
||||
{ palabra: 'PINO', silabas: ['PI', 'NO'], emoji: '🌲' },
|
||||
{ palabra: 'LUNES', silabas: ['LU', 'NES'], emoji: '📅' },
|
||||
{ palabra: 'SAPO', silabas: ['SA', 'PO'], emoji: '🐸' },
|
||||
{ palabra: 'TELO', silabas: ['TE', 'LO'], emoji: '🧶' },
|
||||
{ palabra: 'DAMA', silabas: ['DA', 'MA'], emoji: '👩' },
|
||||
{ palabra: 'RAMA', silabas: ['RA', 'MA'], emoji: '🌿' },
|
||||
]
|
||||
|
||||
const exercises: any[] = []
|
||||
|
||||
for (const { palabra, silabas, emoji } of palabras2silabas) {
|
||||
const lowerPalabra = palabra.toLowerCase().replace(/[^a-z]/g, '')
|
||||
const id = `lec6-palabra-${lowerPalabra}`
|
||||
const letras = palabra.split('')
|
||||
const conLetras = letras[0]?.toLowerCase()
|
||||
const consonantDep = conLetras && ['m', 'p', 'l', 's', 't', 'n', 'd', 'r'].includes(conLetras)
|
||||
? `lec4-${conLetras}-completa`
|
||||
: 'lec3-u-completa'
|
||||
|
||||
// Leer la palabra (ver las sílabas separadas)
|
||||
exercises.push({
|
||||
id: `${id}-leer`,
|
||||
stage: 6,
|
||||
skillCode: `silabas-${lowerPalabra}`,
|
||||
type: 'eleccion',
|
||||
prerequisites: [consonantDep],
|
||||
content: {
|
||||
instruction: `Leé esta palabra: ${silabas.join('-')}`,
|
||||
text: `${silabas.join(' ')}`,
|
||||
audioText: `${palabra}: ${silabas.join(', ')}`,
|
||||
emoji,
|
||||
options: [
|
||||
{ label: palabra, correct: true, id: lowerPalabra },
|
||||
...palabras2silabas
|
||||
.filter(p => p.palabra !== palabra)
|
||||
.slice(0, 2)
|
||||
.map(p => ({ label: p.palabra, correct: false, id: p.palabra.toLowerCase() })),
|
||||
],
|
||||
},
|
||||
functionalContext: `Leer la palabra ${palabra} combinando sílabas.`,
|
||||
errorType: 'silaba-dificil',
|
||||
})
|
||||
|
||||
// Emparejar con imagen
|
||||
exercises.push({
|
||||
id: `${id}-imagen`,
|
||||
stage: 6,
|
||||
skillCode: `silabas-${lowerPalabra}`,
|
||||
type: 'palabra',
|
||||
prerequisites: [`${id}-leer`],
|
||||
content: {
|
||||
instruction: `¿Cuál palabra es esta?`,
|
||||
imageEmoji: emoji,
|
||||
audioText: `¿Qué palabra es?`,
|
||||
options: [
|
||||
...palabras2silabas
|
||||
.filter(p => p.palabra !== palabra)
|
||||
.slice(0, 2)
|
||||
.map(p => ({ label: p.palabra, correct: false, id: p.palabra.toLowerCase() })),
|
||||
{ label: palabra, correct: true, id: lowerPalabra },
|
||||
{ label: 'Escuchar 👂', correct: false, id: 'escuchar' },
|
||||
],
|
||||
},
|
||||
functionalContext: `Asociar la palabra ${palabra} con su imagen.`,
|
||||
errorType: 'confusion-letra',
|
||||
})
|
||||
}
|
||||
|
||||
// Silaba order exercises
|
||||
const secuencias = [
|
||||
{ palabra: 'MAPA', silabas: ['PA', 'MA'], emoji: '🗺️' },
|
||||
{ palabra: 'PATO', silabas: ['TO', 'PA'], emoji: '🦆' },
|
||||
{ palabra: 'SAPO', silabas: ['PO', 'SA'], emoji: '🐸' },
|
||||
]
|
||||
|
||||
for (const { palabra, silabas, emoji } of secuencias) {
|
||||
const lower = palabra.toLowerCase()
|
||||
exercises.push({
|
||||
id: `lec6-ordenar-${lower}`,
|
||||
stage: 6,
|
||||
skillCode: `silabas-orden-${lower}`,
|
||||
type: 'secuencia',
|
||||
prerequisites: [`lec6-palabra-${lower}-leer`],
|
||||
content: {
|
||||
instruction: `Ordená las sílabas para formar ${palabra}`,
|
||||
audioText: `Ordená para formar ${palabra}`,
|
||||
sequence: silabas,
|
||||
emoji,
|
||||
},
|
||||
functionalContext: `Ordenar sílabas para formar ${palabra}.`,
|
||||
errorType: 'inversion-letra',
|
||||
})
|
||||
}
|
||||
|
||||
const stage: Stage = {
|
||||
id: 6,
|
||||
name: 'Sílabas y palabras de 2 sílabas',
|
||||
description: 'Combinar consonantes + vocales para formar y leer palabras de 2 sílabas.',
|
||||
exercises,
|
||||
}
|
||||
|
||||
export default stage
|
||||
Reference in New Issue
Block a user