create-openclass-uniminuto 1.6.1 → 1.6.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,63 +1,63 @@
1
- {
2
- "name": "openclass-demo",
3
- "version": "1.6.0",
4
- "description": "Presentaciones Open Class del curso Curso Open Class de ejemplo.",
5
- "type": "module",
6
- "private": true,
7
- "scripts": {
8
- "dev": "slidev slides.md --open --port 3000",
9
- "config": "node scripts/generar-desde-config.mjs",
10
- "dev:s1": "slidev demo_semana1.md --open --port 3001",
11
- "dev:s2": "slidev demo_semana2.md --open --port 3002",
12
- "dev:s3": "slidev demo_semana3.md --open --port 3003",
13
- "dev:s4": "slidev demo_semana4.md --open --port 3004",
14
- "dev:s5": "slidev demo_semana5.md --open --port 3005",
15
- "dev:s6": "slidev demo_semana6.md --open --port 3006",
16
- "dev:s7": "slidev demo_semana7.md --open --port 3007",
17
- "dev:s8": "slidev demo_semana8.md --open --port 3008",
18
- "clean": "node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\"",
19
- "clean:downloads": "node -e \"require('fs').rmSync('public/descargas',{recursive:true,force:true}); require('fs').mkdirSync('public/descargas',{recursive:true})\"",
20
- "clean:cache": "node -e \"require('fs').rmSync('.slidev',{recursive:true,force:true}); require('fs').rmSync('node_modules/.vite',{recursive:true,force:true})\"",
21
- "build:index": "slidev build slides.md --out dist --base / --without-notes",
22
- "build:s1": "slidev build demo_semana1.md --out dist/semanas/demo_semana1 --base /semanas/demo_semana1/ --without-notes",
23
- "build:s2": "slidev build demo_semana2.md --out dist/semanas/demo_semana2 --base /semanas/demo_semana2/ --without-notes",
24
- "build:s3": "slidev build demo_semana3.md --out dist/semanas/demo_semana3 --base /semanas/demo_semana3/ --without-notes",
25
- "build:s4": "slidev build demo_semana4.md --out dist/semanas/demo_semana4 --base /semanas/demo_semana4/ --without-notes",
26
- "build:s5": "slidev build demo_semana5.md --out dist/semanas/demo_semana5 --base /semanas/demo_semana5/ --without-notes",
27
- "build:s6": "slidev build demo_semana6.md --out dist/semanas/demo_semana6 --base /semanas/demo_semana6/ --without-notes",
28
- "build:s7": "slidev build demo_semana7.md --out dist/semanas/demo_semana7 --base /semanas/demo_semana7/ --without-notes",
29
- "build:s8": "slidev build demo_semana8.md --out dist/semanas/demo_semana8 --base /semanas/demo_semana8/ --without-notes",
30
- "build:all": "node scripts/build-site.mjs",
31
- "build:incremental": "node scripts/build-incremental.mjs",
32
- "export:downloads": "node scripts/export-downloads.mjs",
33
- "export:incremental": "node scripts/export-incremental.mjs",
34
- "vista": "npm run clean && npm run export:downloads && npm run build:all && http-server dist -p 4173 -c-1 -o",
35
- "publicar": "node scripts/publicar.mjs",
36
- "dev:todo": "node scripts/dev-all.mjs",
37
- "nuevo": "node scripts/nuevo-curso.mjs",
38
- "zip:template": "node scripts/zip-template.mjs",
39
- "preview:static": "npm run build:all && http-server dist -p 4173 -c-1",
40
- "preview:pages": "npm run export:downloads && npm run build:all && http-server dist -p 4173 -c-1",
41
- "semana": "node scripts/semana.mjs",
42
- "pages:check": "node scripts/preparar-github-pages.mjs",
43
- "pages:build": "npm run export:downloads && npm run build:all",
44
- "pages:preview": "npm run preview:pages",
45
- "actualizar:tema": "npm create openclass-uniminuto@latest . -- --update-theme",
46
- "actualizar:tema:preview": "npm run actualizar:tema && npm run dev"
47
- },
48
- "dependencies": {
49
- "@fontsource/atkinson-hyperlegible": "^5.2.8",
50
- "@fontsource/merriweather-sans": "^5.2.7",
51
- "@fontsource/opendyslexic": "^5.2.5",
52
- "@slidev/theme-seriph": "latest",
53
- "vue": "^3.5.33"
54
- },
55
- "devDependencies": {
56
- "@slidev/cli": "^52.15.0",
57
- "@slidev/theme-default": "^0.25.0",
58
- "concurrently": "^9.2.1",
59
- "http-server": "^14.1.1",
60
- "playwright-chromium": "^1.59.1",
61
- "vite": "^7.1.12"
62
- }
63
- }
1
+ {
2
+ "name": "openclass-demo",
3
+ "version": "1.6.2",
4
+ "description": "Presentaciones Open Class del curso Curso Open Class de ejemplo.",
5
+ "type": "module",
6
+ "private": true,
7
+ "scripts": {
8
+ "dev": "slidev slides.md --open --port 3000",
9
+ "config": "node scripts/generar-desde-config.mjs",
10
+ "semana": "node scripts/semana.mjs",
11
+ "pages:check": "node scripts/preparar-github-pages.mjs",
12
+ "actualizar:tema": "npm create openclass-uniminuto@latest . -- --update-theme",
13
+ "actualizar:tema:preview": "npm run actualizar:tema && npm run config && npm run dev",
14
+ "dev:s1": "slidev demo_semana1.md --open --port 3001",
15
+ "dev:s2": "slidev demo_semana2.md --open --port 3002",
16
+ "dev:s3": "slidev demo_semana3.md --open --port 3003",
17
+ "dev:s4": "slidev demo_semana4.md --open --port 3004",
18
+ "dev:s5": "slidev demo_semana5.md --open --port 3005",
19
+ "dev:s6": "slidev demo_semana6.md --open --port 3006",
20
+ "dev:s7": "slidev demo_semana7.md --open --port 3007",
21
+ "dev:s8": "slidev demo_semana8.md --open --port 3008",
22
+ "clean": "node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\"",
23
+ "clean:downloads": "node -e \"require('fs').rmSync('public/descargas',{recursive:true,force:true}); require('fs').mkdirSync('public/descargas',{recursive:true})\"",
24
+ "clean:cache": "node -e \"require('fs').rmSync('.slidev',{recursive:true,force:true}); require('fs').rmSync('node_modules/.vite',{recursive:true,force:true})\"",
25
+ "build:index": "slidev build slides.md --out dist --base / --without-notes",
26
+ "build:s1": "slidev build demo_semana1.md --out dist/semanas/demo_semana1 --base /semanas/demo_semana1/ --without-notes",
27
+ "build:s2": "slidev build demo_semana2.md --out dist/semanas/demo_semana2 --base /semanas/demo_semana2/ --without-notes",
28
+ "build:s3": "slidev build demo_semana3.md --out dist/semanas/demo_semana3 --base /semanas/demo_semana3/ --without-notes",
29
+ "build:s4": "slidev build demo_semana4.md --out dist/semanas/demo_semana4 --base /semanas/demo_semana4/ --without-notes",
30
+ "build:s5": "slidev build demo_semana5.md --out dist/semanas/demo_semana5 --base /semanas/demo_semana5/ --without-notes",
31
+ "build:s6": "slidev build demo_semana6.md --out dist/semanas/demo_semana6 --base /semanas/demo_semana6/ --without-notes",
32
+ "build:s7": "slidev build demo_semana7.md --out dist/semanas/demo_semana7 --base /semanas/demo_semana7/ --without-notes",
33
+ "build:s8": "slidev build demo_semana8.md --out dist/semanas/demo_semana8 --base /semanas/demo_semana8/ --without-notes",
34
+ "build:all": "node scripts/build-site.mjs",
35
+ "build:incremental": "node scripts/build-incremental.mjs",
36
+ "export:downloads": "node scripts/export-downloads.mjs",
37
+ "export:incremental": "node scripts/export-incremental.mjs",
38
+ "vista": "npm run config && npm run clean && npm run export:downloads && npm run build:all && http-server dist -p 4173 -c-1 -o",
39
+ "publicar": "node scripts/publicar.mjs",
40
+ "dev:todo": "node scripts/dev-all.mjs",
41
+ "nuevo": "node scripts/nuevo-curso.mjs",
42
+ "zip:template": "node scripts/zip-template.mjs",
43
+ "preview:static": "npm run config && npm run build:all && http-server dist -p 4173 -c-1",
44
+ "preview:pages": "npm run config && npm run export:downloads && npm run build:all && http-server dist -p 4173 -c-1",
45
+ "pages:build": "npm run config && npm run export:downloads && npm run build:all",
46
+ "pages:preview": "npm run preview:pages"
47
+ },
48
+ "dependencies": {
49
+ "@fontsource/atkinson-hyperlegible": "^5.2.8",
50
+ "@fontsource/merriweather-sans": "^5.2.7",
51
+ "@fontsource/opendyslexic": "^5.2.5",
52
+ "@slidev/theme-seriph": "latest",
53
+ "vue": "^3.5.33"
54
+ },
55
+ "devDependencies": {
56
+ "@slidev/cli": "^52.15.0",
57
+ "@slidev/theme-default": "^0.25.0",
58
+ "concurrently": "^9.2.1",
59
+ "http-server": "^14.1.1",
60
+ "playwright-chromium": "^1.59.1",
61
+ "vite": "^7.1.12"
62
+ }
63
+ }
@@ -8,4 +8,4 @@ routerMode: hash
8
8
  drawings:
9
9
  persist: false
10
10
  src: ./semanas/{{COURSE_SHORT}}_semana{{WEEK_NUMBER}}.md
11
- ---
11
+ ---
@@ -11,167 +11,293 @@ Semana {{WEEK_NUMBER}} — {{WEEK_TITLE}}
11
11
  ::date::
12
12
  {{WEEK_DATE}}
13
13
 
14
+ ---
15
+ layout: slide-02-titulo
16
+ ---
17
+
18
+ ::title::
19
+ Ruta de la Open Class
20
+
21
+ ---
22
+ layout: slide-08-titulo-texto
23
+ ---
24
+
25
+ ::title::
26
+ Contexto de la semana
27
+
28
+ ::content::
29
+ Esta sesión aborda el tema **{{WEEK_THEME}}** desde una perspectiva aplicada, académica y profesional.
30
+
31
+ La intención es que el estudiante relacione los conceptos centrales de la semana con situaciones reales del campo disciplinar, identifique problemas, analice alternativas y proponga decisiones fundamentadas.
32
+
14
33
  ---
15
34
  layout: slide-09-objetivos
16
35
  ---
17
36
 
18
37
  ::title::
19
- Objetivos de la sesión
38
+ Objetivos de aprendizaje
39
+
40
+ ::content::
41
+ Al finalizar esta Open Class, el estudiante estará en capacidad de:
42
+
43
+ 1. Reconocer los conceptos principales asociados con **{{WEEK_THEME}}**.
44
+ 2. Analizar una situación aplicada del curso a partir de criterios técnicos y académicos.
45
+ 3. Relacionar la teoría con una actividad práctica o evaluativa.
46
+ 4. Formular conclusiones que evidencien comprensión, argumentación y transferencia.
47
+
48
+ ---
49
+ layout: slide-03-imagen-izquierda
50
+ ---
51
+
52
+ ::title::
53
+ Lectura inicial del problema
54
+
55
+ ::image::
56
+ <img src="/imagenes/favicon.png" alt="Imagen institucional de apoyo" />
20
57
 
21
58
  ::content::
22
- Al terminar esta sesión, el estudiante estará en capacidad de:
59
+ En esta sección se presenta una situación inicial que permite introducir el tema de la semana.
60
+
61
+ La imagen puede reemplazarse por una ilustración del curso ubicada en:
23
62
 
24
- - Reconocer los conceptos centrales asociados con **{{WEEK_TITLE}}**.
25
- - Relacionar la temática de la semana con situaciones académicas, profesionales o institucionales.
26
- - Desarrollar una actividad breve que evidencie comprensión, análisis y aplicación.
63
+ `public/imagenes/`
27
64
 
28
- <!--
29
- Notas del presentador:
30
- Presentar los objetivos como una ruta de trabajo. Conectar cada objetivo con la actividad o evaluación de la semana para que el estudiante comprenda el sentido formativo de la sesión.
31
- -->
65
+ Ejemplo:
66
+
67
+ `/imagenes/nombre_de_la_imagen.png`
32
68
 
33
69
  ---
34
- layout: slide-08-titulo-texto
70
+ layout: slide-04-imagen-derecha
35
71
  ---
36
72
 
37
73
  ::title::
38
- Agenda de la Open Class
74
+ Análisis del contexto
39
75
 
40
76
  ::content::
41
- La sesión se desarrollará en **90 minutos**:
77
+ Este layout funciona bien cuando se desea ubicar la explicación conceptual en la parte izquierda y una imagen de apoyo en la parte derecha.
78
+
79
+ Puedes usarlo para:
42
80
 
43
- - Bienvenida y encuadre inicial.
44
- - Contextualización de la temática de la semana.
45
- - Desarrollo conceptual con ejemplos.
46
- - Actividad didáctica breve.
47
- - Socialización de hallazgos.
48
- - Resolución de dudas.
49
- - Cierre académico y recordatorio de la Encuesta de Percepción Estudiantil.
81
+ * Presentar un caso.
82
+ * Mostrar un diagrama.
83
+ * Explicar un flujo.
84
+ * Relacionar conceptos con una situación profesional.
50
85
 
51
- <!--
52
- Notas del presentador:
53
- Recordar la tolerancia máxima de cinco minutos para iniciar. Mantener la actividad didáctica en un tiempo máximo aproximado de veinte minutos y reservar un bloque final para preguntas.
54
- -->
86
+ ::image::
87
+ <img src="/imagenes/favicon.png" alt="Imagen de apoyo para análisis del contexto" />
88
+
89
+ ---
90
+ layout: slide-05-titulo-superior-texto-derecha
91
+ ---
92
+
93
+ ::title::
94
+ Concepto clave de la semana
95
+
96
+ ::image::
97
+ <img src="/imagenes/favicon.png" alt="Imagen conceptual de apoyo" />
98
+
99
+ ::content::
100
+ Este layout permite destacar una imagen amplia en la parte izquierda y ubicar la explicación en la parte derecha.
101
+
102
+ Úsalo cuando la imagen sea el punto de partida del análisis y el texto funcione como interpretación, guía o síntesis.
103
+
104
+ Ejemplo de uso:
105
+
106
+ * Arquitectura de un sistema.
107
+ * Mapa conceptual.
108
+ * Flujo de proceso.
109
+ * Escenario problemático.
110
+ * Representación visual de un caso.
111
+
112
+ ---
113
+ layout: slide-06-titulo-superior-texto-izquierda
114
+ ---
115
+
116
+ ::title::
117
+ Relación entre teoría y práctica
118
+
119
+ ::content::
120
+ Este layout invierte la organización anterior: el texto queda a la izquierda y la imagen a la derecha.
121
+
122
+ Es útil cuando primero quieres orientar la lectura conceptual y luego apoyar la explicación con una imagen.
123
+
124
+ Se recomienda usarlo para:
125
+
126
+ 1. Explicar criterios.
127
+ 2. Presentar una secuencia de análisis.
128
+ 3. Introducir una práctica guiada.
129
+ 4. Preparar al estudiante para una actividad.
130
+
131
+ ::image::
132
+ <img src="/imagenes/favicon.png" alt="Imagen de apoyo para teoría y práctica" />
133
+
134
+ ---
135
+ layout: slide-07-multimedia-con-titulo
136
+ ---
137
+
138
+ ::title::
139
+ Recurso multimedia de apoyo
140
+
141
+ ::media::
142
+
143
+ <iframe
144
+ width="100%"
145
+ height="100%"
146
+ src="https://www.youtube.com/embed/dQw4w9WgXcQ"
147
+ title="Recurso multimedia de apoyo"
148
+ frameborder="0"
149
+ allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
150
+ allowfullscreen>
151
+ </iframe>
55
152
 
56
153
  ---
57
154
  layout: slide-08-titulo-texto
58
155
  ---
59
156
 
60
157
  ::title::
61
- Contextualización de la semana
158
+ Síntesis conceptual
62
159
 
63
160
  ::content::
64
- Esta semana se aborda **{{WEEK_TITLE}}** como eje para comprender problemas, decisiones y aplicaciones propias del curso.
161
+ Utiliza este layout para desarrollar una explicación central sin imágenes.
65
162
 
66
- **Tema central:** {{WEEK_THEME}}
163
+ Ejemplo de estructura sugerida:
67
164
 
68
- La intención es conectar el contenido con casos reales, experiencias profesionales y criterios de análisis que permitan pasar de la comprensión conceptual a la aplicación práctica.
165
+ * **Idea principal:** presentar el concepto fundamental.
166
+ * **Aplicación:** explicar cómo se observa en un contexto real.
167
+ * **Criterio de análisis:** indicar qué debe observar el estudiante.
168
+ * **Conclusión parcial:** cerrar con una frase que conecte con la actividad.
69
169
 
70
- <!--
71
- Notas del presentador:
72
- Iniciar con una pregunta detonante o un ejemplo cercano al contexto del grupo. Evitar una exposición únicamente teórica: llevar el tema hacia decisiones, consecuencias, riesgos, oportunidades o productos concretos.
73
- -->
170
+ También puedes usar párrafos breves cuando necesites explicar una idea con mayor profundidad académica.
74
171
 
75
172
  ---
76
173
  layout: slide-10-titulo-dos-columnas
77
174
  ---
78
175
 
79
176
  ::title::
80
- Desarrollo conceptual
177
+ Comparación de enfoques
81
178
 
82
179
  ::left::
83
- **Ideas clave**
84
180
 
85
- - Concepto principal de la semana.
86
- - Elementos, componentes o criterios asociados.
87
- - Relación con el propósito del curso.
88
- - Aplicaciones en contextos reales.
181
+ ### Enfoque 1
182
+
183
+ Este espacio puede usarse para presentar una primera postura, alternativa, componente o criterio de análisis.
184
+
185
+ * Característica principal.
186
+ * Ventaja.
187
+ * Riesgo o limitación.
188
+ * Ejemplo aplicado.
89
189
 
90
190
  ::right::
91
- **Preguntas orientadoras**
92
191
 
93
- - ¿Qué problema permite comprender o resolver este tema?
94
- - ¿Qué decisiones se pueden tomar a partir de este conocimiento?
95
- - ¿Qué evidencias muestran que el estudiante comprendió el tema?
192
+ ### Enfoque 2
96
193
 
97
- <!--
98
- Notas del presentador:
99
- Usar esta diapositiva para organizar la explicación central. Reemplazar los puntos por los conceptos específicos del curso y de la semana.
100
- -->
194
+ Este espacio puede usarse para contrastar una segunda postura, alternativa, componente o criterio.
195
+
196
+ * Característica principal.
197
+ * Ventaja.
198
+ * Riesgo o limitación.
199
+ * Ejemplo aplicado.
101
200
 
102
201
  ---
103
- layout: slide-10-titulo-dos-columnas
202
+ layout: slide-11-dos-titulos-dos-columnas
104
203
  ---
105
204
 
106
- ::title::
107
- Actividad didáctica breve
205
+ ::leftTitle::
206
+ Antes del análisis
207
+
208
+ ::rightTitle::
209
+ Después del análisis
108
210
 
109
211
  ::left::
110
- **Instrucciones**
212
+ En esta columna puedes describir la situación inicial, las ideas previas, los datos disponibles o las condiciones del problema.
111
213
 
112
- - Organizar el trabajo de forma individual, en parejas o en pequeños grupos.
113
- - Analizar el caso, pregunta o reto propuesto por el docente.
114
- - Construir una respuesta breve y justificable.
115
- - Socializar una conclusión en plenaria.
214
+ Ejemplo:
116
215
 
117
- ::right::
118
- **Producto esperado**
216
+ * Información dispersa.
217
+ * Criterios poco claros.
218
+ * Necesidad de priorización.
219
+ * Dudas frente a la toma de decisiones.
119
220
 
120
- {{WEEK_ACTIVITY}}
221
+ ::right::
222
+ En esta columna puedes mostrar el resultado esperado después del análisis.
121
223
 
122
- La evidencia puede presentarse como una respuesta argumentada, esquema, captura, simulación, reflexión, mapa breve o producto digital, según la orientación del docente.
224
+ Ejemplo:
123
225
 
124
- <!--
125
- Notas del presentador:
126
- Controlar el tiempo de la actividad. Se recomienda no superar veinte minutos para conservar espacio de socialización y dudas.
127
- -->
226
+ * Criterios definidos.
227
+ * Decisiones justificadas.
228
+ * Evidencias organizadas.
229
+ * Conclusiones argumentadas.
128
230
 
129
231
  ---
130
- layout: slide-08-titulo-texto
232
+ layout: slide-codigo
131
233
  ---
132
234
 
133
235
  ::title::
134
- Relación con la evaluación
236
+ Ejemplo técnico guiado
135
237
 
136
238
  ::content::
137
- El trabajo de la semana se articula con la actividad o evaluación del curso mediante:
138
239
 
139
- - Comprensión de conceptos clave.
140
- - Aplicación en un caso o situación práctica.
141
- - Justificación de decisiones tomadas.
142
- - Comunicación clara de resultados.
143
- - Revisión de evidencias y criterios de calidad.
240
+ ```python {lines:true}
241
+ # Ejemplo base para reemplazar según el curso
242
+ # Este bloque puede usarse en asignaturas con práctica computacional,
243
+ # análisis de datos, simulación, seguridad, IoT o programación.
244
+
245
+ tema = "{{WEEK_THEME}}"
246
+ actividad = "{{WEEK_ACTIVITY}}"
144
247
 
145
- <!--
146
- Notas del presentador:
147
- Explicar qué debe cuidar el estudiante para avanzar en la actividad evaluativa. Precisar si se requiere entrega en aula virtual, participación en foro, documento, evidencia audiovisual, práctica o cuestionario.
148
- -->
248
+ def presentar_contexto(tema, actividad):
249
+ print("Tema central:", tema)
250
+ print("Actividad:", actividad)
251
+ print("Propósito: relacionar teoría, práctica y análisis crítico.")
252
+
253
+ presentar_contexto(tema, actividad)
254
+ ```
149
255
 
150
256
  ---
151
257
  layout: slide-08-titulo-texto
152
258
  ---
153
259
 
154
260
  ::title::
155
- Resolución de dudas
261
+ Actividad de aplicación
156
262
 
157
263
  ::content::
158
- Este espacio se orienta a resolver inquietudes sobre:
264
+ **{{WEEK_ACTIVITY}}**
265
+
266
+ Orientaciones sugeridas:
159
267
 
160
- - Conceptos revisados durante la sesión.
161
- - Actividad práctica o evaluación relacionada.
162
- - Criterios de entrega y evidencias esperadas.
163
- - Uso de herramientas, recursos o materiales de apoyo.
268
+ 1. Leer la situación propuesta por el docente.
269
+ 2. Identificar los conceptos de la semana presentes en el caso.
270
+ 3. Analizar alternativas de solución o interpretación.
271
+ 4. Socializar una conclusión breve con argumentos.
272
+ 5. Relacionar la actividad con la evidencia o evaluación correspondiente.
164
273
 
165
- <!--
166
- Notas del presentador:
167
- Mantener este bloque dentro de un máximo aproximado de quince minutos. Priorizar dudas que afecten la comprensión del tema o la entrega de la actividad.
168
- -->
274
+ Duración estimada: **{{WEEK_DURATION}}**.
169
275
 
170
276
  ---
171
- layout: slide-12-cierre
277
+ layout: slide-10-titulo-dos-columnas
172
278
  ---
173
279
 
174
- <!--
175
- Notas del presentador:
176
- Cerrar con una síntesis de tres ideas centrales, recordar el compromiso académico de la semana e invitar a diligenciar la Encuesta de Percepción Estudiantil cuando aplique.
177
- -->
280
+ ::title::
281
+ Preguntas orientadoras
282
+
283
+ ::left::
284
+
285
+ ### Para comprender
286
+
287
+ * ¿Cuál es el problema central?
288
+ * ¿Qué conceptos de la semana permiten analizarlo?
289
+ * ¿Qué información es necesaria para tomar una decisión?
290
+ * ¿Qué criterios deben priorizarse?
291
+
292
+ ::right::
293
+
294
+ ### Para aplicar
295
+
296
+ * ¿Qué alternativa parece más adecuada?
297
+ * ¿Qué riesgos o limitaciones existen?
298
+ * ¿Cómo se justificaría la decisión?
299
+ * ¿Qué aprendizaje se transfiere a un contexto profesional?
300
+
301
+ ---
302
+ layout: slide-12-cierre
303
+ ---
@@ -1,14 +1,21 @@
1
1
  function normalizeBase(value) {
2
2
  let base = value || "/";
3
- if (!base.startsWith("/")) base = `/${base}`;
4
- if (!base.endsWith("/")) base = `${base}/`;
3
+
4
+ if (!base.startsWith("/")) {
5
+ base = `/${base}`;
6
+ }
7
+
8
+ if (!base.endsWith("/")) {
9
+ base = `${base}/`;
10
+ }
11
+
5
12
  return base;
6
13
  }
7
14
 
8
15
  const SITE_BASE = normalizeBase(process.env.SITE_BASE || "/");
9
16
 
10
- function withBase(path = "") {
11
- return `${SITE_BASE}${path.replace(/^\/+/, "")}`;
17
+ function withBase(value = "") {
18
+ return `${SITE_BASE}${value.replace(/^[/]+/, "")}`;
12
19
  }
13
20
 
14
21
  export const decks = [
@@ -27,3 +34,5 @@ export const decks = [
27
34
  exportable: true,
28
35
  },
29
36
  ];
37
+
38
+ export default decks;
@@ -1,5 +1,5 @@
1
- import { decks } from "./decks.mjs";
2
1
  import { spawn } from "node:child_process";
2
+ import { decks } from "./decks.mjs";
3
3
 
4
4
  const COLORS = [
5
5
  "bgBlue.bold",
@@ -11,27 +11,40 @@ const COLORS = [
11
11
  "blue.bold",
12
12
  "green.bold",
13
13
  "yellow.bold",
14
+ "magenta.bold",
15
+ "cyan.bold",
16
+ "red.bold",
14
17
  ];
15
18
 
16
- const semanas = decks.filter((deck) => deck.entry !== "slides.md");
17
19
  const BASE_PORT = 3000;
18
20
 
21
+ const weeklyDecks = decks.filter((deck) => deck.entry !== "slides.md");
22
+
19
23
  const commands = [
20
24
  `slidev slides.md --open --port ${BASE_PORT}`,
21
- ...semanas.map((deck, index) => `slidev ${deck.entry} --port ${BASE_PORT + index + 1}`),
25
+ ...weeklyDecks.map((deck, index) => {
26
+ return `slidev ${deck.entry} --port ${BASE_PORT + index + 1}`;
27
+ }),
22
28
  ];
23
29
 
24
- const names = ["portal", ...semanas.map((deck) => deck.name)].join(",");
30
+ const names = ["portal", ...weeklyDecks.map((deck) => deck.name)].join(",");
25
31
  const colors = COLORS.slice(0, commands.length).join(",");
26
32
 
27
- console.log("\n🚀 Iniciando servidores de desarrollo...");
33
+ console.log("");
34
+ console.log("🚀 Iniciando servidores de desarrollo...");
28
35
  console.log(` portal → http://localhost:${BASE_PORT}`);
29
- semanas.forEach((deck, index) => {
36
+
37
+ weeklyDecks.forEach((deck, index) => {
30
38
  console.log(` ${deck.name} → http://localhost:${BASE_PORT + index + 1}`);
31
39
  });
40
+
32
41
  console.log("");
33
42
 
34
- spawn("concurrently", ["-n", names, "-c", colors, ...commands], {
43
+ const child = spawn("concurrently", ["-n", names, "-c", colors, ...commands], {
35
44
  stdio: "inherit",
36
45
  shell: true,
37
46
  });
47
+
48
+ child.on("exit", (code) => {
49
+ process.exit(code ?? 0);
50
+ });