execonvert 0.4.2 → 0.5.0

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.
Files changed (32) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/README.md +79 -0
  3. package/dist/cli/app/public/exelearning/app/common/common_i18n.js +4 -1
  4. package/dist/cli/app/public/exelearning/app/common/i18n/common_i18n.ca.js +4 -1
  5. package/dist/cli/app/public/exelearning/app/common/i18n/common_i18n.de.js +4 -1
  6. package/dist/cli/app/public/exelearning/app/common/i18n/common_i18n.en.js +4 -1
  7. package/dist/cli/app/public/exelearning/app/common/i18n/common_i18n.eo.js +4 -1
  8. package/dist/cli/app/public/exelearning/app/common/i18n/common_i18n.es.js +4 -1
  9. package/dist/cli/app/public/exelearning/app/common/i18n/common_i18n.eu.js +4 -1
  10. package/dist/cli/app/public/exelearning/app/common/i18n/common_i18n.gl.js +4 -1
  11. package/dist/cli/app/public/exelearning/app/common/i18n/common_i18n.it.js +4 -1
  12. package/dist/cli/app/public/exelearning/app/common/i18n/common_i18n.pt.js +4 -1
  13. package/dist/cli/app/public/exelearning/app/common/i18n/common_i18n.ro.js +4 -1
  14. package/dist/cli/app/public/exelearning/app/common/i18n/common_i18n.va.js +4 -1
  15. package/dist/cli/app/public/exelearning/bundles/common.zip +0 -0
  16. package/dist/cli/app/public/exelearning/bundles/content-css.zip +0 -0
  17. package/dist/cli/app/public/exelearning/bundles/idevices.zip +0 -0
  18. package/dist/cli/app/public/exelearning/bundles/libs.zip +0 -0
  19. package/dist/cli/app/public/exelearning/bundles/manifest.json +76 -75
  20. package/dist/cli/app/public/exelearning/bundles/themes/base.zip +0 -0
  21. package/dist/cli/app/public/exelearning/bundles/themes/flux.zip +0 -0
  22. package/dist/cli/app/public/exelearning/bundles/themes/neo.zip +0 -0
  23. package/dist/cli/app/public/exelearning/bundles/themes/nova.zip +0 -0
  24. package/dist/cli/app/public/exelearning/bundles/themes/universal.zip +0 -0
  25. package/dist/cli/app/public/exelearning/bundles/themes/zen.zip +0 -0
  26. package/dist/cli/app/public/exelearning/exporters.bundle.js +7250 -353
  27. package/dist/cli/app/public/exelearning/importers.bundle.js +693 -163
  28. package/dist/cli/app/public/exelearning/runtime-source.json +6 -6
  29. package/dist/cli/app/public/info/cli.html +105 -8
  30. package/dist/cli/cli/execonvert.js +47 -7
  31. package/dist/cli/cli/updates.js +315 -0
  32. package/package.json +9 -2
package/CHANGELOG.md CHANGED
@@ -9,6 +9,26 @@ Categorías usadas: **Añadido**, **Cambiado**, **Corregido**, **Eliminado**.
9
9
 
10
10
  ## [Unreleased]
11
11
 
12
+ ## [0.5.0] - 2026-09-05
13
+
14
+ ### Añadido
15
+ - Comprobación diaria de actualizaciones de eXeConvert en la CLI interactiva,
16
+ desactivable mediante `--no-update-check` o `EXECONVERT_NO_UPDATE_CHECK=1`.
17
+ No interfiere con tuberías, CI, JSON ni conversiones sin conexión.
18
+ - `execonvert update --check` y `execonvert update`: consulta de versiones,
19
+ actualización mediante npm o descarga verificada de instaladores nativos.
20
+ - Identificación del canal de instalación y de la arquitectura en los paquetes
21
+ nativos, con nombres explícitos de arquitectura para macOS y Windows.
22
+ - Comprobación semanal de nuevas versiones de eXeLearning en GitHub Actions:
23
+ prueba las conversiones y genera un parche para revisión, sin publicarlo.
24
+ - Pruebas del actualizador y de las conversiones de CLI y navegador con un
25
+ proyecto sintético que incluye páginas, imagen, fórmulas y traducciones.
26
+
27
+ ### Cambiado
28
+ - Runtime embebido de eXeLearning actualizado de **v4.0.1** a **v4.0.3**,
29
+ incluidos los importadores, exportadores, temas, iDevices y traducciones
30
+ compartidos por la web y la CLI.
31
+
12
32
  ## [0.4.2] - 2026-06-25
13
33
 
14
34
  ### Corregido
package/README.md CHANGED
@@ -103,6 +103,85 @@ Estado actual de la CLI:
103
103
  - soportado: `.elp -> .docx`
104
104
  - soportado: `.elp -> .pdf`
105
105
 
106
+ ## Actualizaciones de la CLI
107
+
108
+ La CLI comprueba nuevas versiones estables de **eXeConvert** en GitHub como
109
+ máximo una vez al día cuando se usa en una terminal interactiva. El aviso sale
110
+ por `stderr`. No comprueba automáticamente en tuberías, CI, con `--json`, ni al
111
+ pedir ayuda o la versión. Los errores de red no afectan a las conversiones y
112
+ la consulta se cancela cuando termina la operación.
113
+
114
+ ```bash
115
+ execonvert update --check # Consultar sin descargar
116
+ execonvert update --check --json # Resultado estructurado
117
+ execonvert update # Actualizar npm o descargar el instalador
118
+ execonvert update --out-dir ./descargas # Elegir carpeta para instaladores
119
+ ```
120
+
121
+ - **npm:** instala la versión estable anunciada en GitHub usando npm, en el
122
+ ámbito global o en el proyecto local donde está instalada esta copia. En un
123
+ proyecto local, npm puede actualizar `package.json` y el archivo de bloqueo.
124
+ Si npm todavía no tiene esa versión o faltan permisos, muestra el error.
125
+ - **Debian, Windows y macOS:** descarga el instalador de su canal y arquitectura
126
+ y muestra dónde está para instalarlo mediante el sistema. No pide privilegios
127
+ ni ejecuta automáticamente el instalador.
128
+ - **AppImage:** descarga la nueva versión, le da permiso de ejecución y conserva
129
+ la anterior. Hay que usar el nuevo archivo o actualizar el enlace habitual.
130
+ - **Repositorio de desarrollo:** muestra la versión disponible; la actualización
131
+ del código se hace mediante Git y una nueva compilación.
132
+
133
+ Las descargas de instaladores comprueban tamaño y SHA-256 antes de guardarse con
134
+ su nombre definitivo. Si la publicación aún no tiene un instalador compatible,
135
+ se muestra un aviso. Las nuevas publicaciones identifican la arquitectura en
136
+ los paquetes de macOS y Windows. Los antiguos `.pkg` sin arquitectura explícita
137
+ se descargan manualmente desde la página de versiones.
138
+
139
+ Por defecto, los instaladores se guardan en la caché del usuario, bajo
140
+ `execonvert/downloads/<versión>`. El estado de la consulta diaria se guarda en
141
+ `execonvert/update-check.json` dentro de `$XDG_CACHE_HOME` o `~/.cache` en Linux,
142
+ `~/Library/Caches` en macOS y `%LOCALAPPDATA%` en Windows.
143
+
144
+ Para desactivar las consultas automáticas en una ejecución:
145
+
146
+ ```bash
147
+ execonvert proyecto.elpx proyecto.md --no-update-check
148
+ ```
149
+
150
+ Para desactivarlas de forma persistente, configura la variable de entorno
151
+ `EXECONVERT_NO_UPDATE_CHECK=1`. La consulta explícita `update --check` sigue
152
+ funcionando. La consulta solo solicita metadatos públicos de versiones;
153
+ no envía los documentos del usuario.
154
+
155
+ ## Compatibilidad con nuevas versiones de eXeLearning
156
+
157
+ El comando `update` conserva la combinación de eXeConvert y eXeLearning probada
158
+ en cada publicación. Los componentes de eXeLearning se actualizan en el
159
+ repositorio mediante `npm run sync:exe`.
160
+
161
+ El workflow **Check eXeLearning compatibility** comprueba cada lunes a las
162
+ 06:25 UTC si hay una versión estable nueva; también se puede lanzar manualmente.
163
+ Cuando la encuentra, sincroniza los componentes, comprueba los tipos, ejecuta
164
+ las pruebas del actualizador, compila web y CLI y prueba las conversiones.
165
+ Si todo pasa, adjunta un artefacto `tested-exelearning-update` con un parche
166
+ binario y la procedencia del runtime. El parche se revisa y aplica con
167
+ `git apply exelearning-update.patch` sobre la revisión usada por el workflow.
168
+ No hace push, no crea releases y no publica cambios automáticamente.
169
+
170
+ Las pruebas usan un `.elp` sintético con dos páginas, una imagen, fórmulas LaTeX
171
+ y contenido en español. Comprueban `.elp → .elpx`, las exportaciones a Markdown,
172
+ DOCX y PDF, la reimportación de Markdown/DOCX y la vista previa web en Chromium.
173
+ Para ejecutarlas localmente:
174
+
175
+ ```bash
176
+ npm run test:updates
177
+ npm run build:all
178
+ npm run test:cli
179
+ npm run test:runtime
180
+ ```
181
+
182
+ El workflow **Test CLI and conversions** ejecuta las pruebas del actualizador
183
+ en Linux, Windows y macOS; las conversiones y el navegador se comprueban en Linux.
184
+
106
185
  ## Organización del código
107
186
 
108
187
  La web y la CLI están separadas como dos frontends distintos sobre el mismo núcleo de conversión:
@@ -46,7 +46,10 @@ $exe_i18n = {
46
46
  "elpxFileProtocolWarning": c_("Local mode: Due to browser security policy, you will need to select the folder from which you opened this file. On a web server this will not be necessary."),
47
47
  "proprietaryLicense": c_("Proprietary license"),
48
48
  "notAppropriate": c_("Not appropriate"),
49
- "publicDomain": c_("Public domain")
49
+ "publicDomain": c_("Public domain"),
50
+ "attachment": c_("Attachment"),
51
+ "noFilesAttached": c_("No files attached."),
52
+ "fileUnavailable": c_("File unavailable")
50
53
  };
51
54
  // The following line should only be used if the ELP contains a hangman game:
52
55
  $exe_i18n.exeGames = {
@@ -46,7 +46,10 @@ $exe_i18n = {
46
46
  "elpxFileProtocolWarning": "Mode local: a causa de la política de seguretat del navegador, hauràs de seleccionar la carpeta des de la qual vas obrir aquest fitxer. En un servidor web això no serà necessari.",
47
47
  "proprietaryLicense": "Llicència propietària",
48
48
  "notAppropriate": "No apropiada",
49
- "publicDomain": "Domini públic"
49
+ "publicDomain": "Domini públic",
50
+ "attachment": "Adjunt",
51
+ "noFilesAttached": "No hi ha cap fitxer adjunt.",
52
+ "fileUnavailable": "Fitxer no disponible"
50
53
  };
51
54
  // The following line should only be used if the ELP contains a hangman game:
52
55
  $exe_i18n.exeGames = {
@@ -46,7 +46,10 @@ $exe_i18n = {
46
46
  "elpxFileProtocolWarning": "Lokaler Modus: Aufgrund der Sicherheitsrichtlinien des Browsers müssen Sie den Ordner auswählen, aus dem Sie diese Datei geöffnet haben. Bei einem Webserver ist dies nicht erforderlich.",
47
47
  "proprietaryLicense": "Proprietäre Lizenz",
48
48
  "notAppropriate": "Nicht zutreffend",
49
- "publicDomain": "Gemeinfrei"
49
+ "publicDomain": "Gemeinfrei",
50
+ "attachment": "Anhang",
51
+ "noFilesAttached": "Keine Dateien angehängt.",
52
+ "fileUnavailable": "Datei nicht verfügbar"
50
53
  };
51
54
  // The following line should only be used if the ELP contains a hangman game:
52
55
  $exe_i18n.exeGames = {
@@ -46,7 +46,10 @@ $exe_i18n = {
46
46
  "elpxFileProtocolWarning": "Local mode: Due to browser security policy, you will need to select the folder from which you opened this file. On a web server this will not be necessary.",
47
47
  "proprietaryLicense": "Proprietary license",
48
48
  "notAppropriate": "Not appropriate",
49
- "publicDomain": "Public domain"
49
+ "publicDomain": "Public domain",
50
+ "attachment": "Attachment",
51
+ "noFilesAttached": "No files attached.",
52
+ "fileUnavailable": "File unavailable"
50
53
  };
51
54
  // The following line should only be used if the ELP contains a hangman game:
52
55
  $exe_i18n.exeGames = {
@@ -46,7 +46,10 @@ $exe_i18n = {
46
46
  "elpxFileProtocolWarning": "Loka modo: pro la sekurecopolitiko de la retumilo, vi devos elekti la dosierujon, de kiu vi malfermis ĉi tiun dosieron. En retservilo tio ne estos necese.",
47
47
  "proprietaryLicense": "Propra licenco",
48
48
  "notAppropriate": "Ne konvena",
49
- "publicDomain": "Publika domajno"
49
+ "publicDomain": "Publika domajno",
50
+ "attachment": "Aldonaĵo",
51
+ "noFilesAttached": "Neniu dosiero aldonita.",
52
+ "fileUnavailable": "Dosiero ne disponebla"
50
53
  };
51
54
  // The following line should only be used if the ELP contains a hangman game:
52
55
  $exe_i18n.exeGames = {
@@ -46,7 +46,10 @@ $exe_i18n = {
46
46
  "elpxFileProtocolWarning": "Modo local: debido a la política de seguridad del navegador, tendrás que seleccionar la carpeta desde la que abriste este archivo. En un servidor web esto no será necesario.",
47
47
  "proprietaryLicense": "Licencia propietaria",
48
48
  "notAppropriate": "No procede",
49
- "publicDomain": "Dominio público"
49
+ "publicDomain": "Dominio público",
50
+ "attachment": "Adjunto",
51
+ "noFilesAttached": "No hay archivos adjuntos.",
52
+ "fileUnavailable": "Archivo no disponible"
50
53
  };
51
54
  // The following line should only be used if the ELP contains a hangman game:
52
55
  $exe_i18n.exeGames = {
@@ -46,7 +46,10 @@ $exe_i18n = {
46
46
  "elpxFileProtocolWarning": "Modu lokala: nabigatzailearen segurtasun-politika dela eta, fitxategi hau irekitzeko erabili duzun karpeta aukeratu beharko duzu. Web zerbitzari batean hau ez da beharrezkoa izango.",
47
47
  "proprietaryLicense": "Jabetzaren lizentzia",
48
48
  "notAppropriate": "Ez dagokio",
49
- "publicDomain": "Domeinu publikoa"
49
+ "publicDomain": "Domeinu publikoa",
50
+ "attachment": "Eranskina",
51
+ "noFilesAttached": "Ez dago fitxategi erantsirik.",
52
+ "fileUnavailable": "Fitxategia ez dago erabilgarri"
50
53
  };
51
54
  // The following line should only be used if the ELP contains a hangman game:
52
55
  $exe_i18n.exeGames = {
@@ -46,7 +46,10 @@ $exe_i18n = {
46
46
  "elpxFileProtocolWarning": "Modo local: debido á política de seguranza do navegador, terás que seleccionar o cartafol desde o que abriches este ficheiro. Nun servidor web isto non será necesario.",
47
47
  "proprietaryLicense": "Licenza propietaria",
48
48
  "notAppropriate": "Non axeitado",
49
- "publicDomain": "Dominio público"
49
+ "publicDomain": "Dominio público",
50
+ "attachment": "Anexo",
51
+ "noFilesAttached": "Non hai ficheiros anexos.",
52
+ "fileUnavailable": "Ficheiro non dispoñible"
50
53
  };
51
54
  // The following line should only be used if the ELP contains a hangman game:
52
55
  $exe_i18n.exeGames = {
@@ -46,7 +46,10 @@ $exe_i18n = {
46
46
  "elpxFileProtocolWarning": "Modalità locale: a causa della politica di sicurezza del browser, dovrai selezionare la cartella da cui hai aperto questo file. Su un server web non sarà necessario.",
47
47
  "proprietaryLicense": "Licenza d'uso",
48
48
  "notAppropriate": "Non applicabile",
49
- "publicDomain": "Dominio pubblico"
49
+ "publicDomain": "Dominio pubblico",
50
+ "attachment": "Allegato",
51
+ "noFilesAttached": "Nessun file allegato.",
52
+ "fileUnavailable": "File non disponibile"
50
53
  };
51
54
  // The following line should only be used if the ELP contains a hangman game:
52
55
  $exe_i18n.exeGames = {
@@ -46,7 +46,10 @@ $exe_i18n = {
46
46
  "elpxFileProtocolWarning": "Modo local: devido à política de segurança do navegador, você precisará selecionar a pasta de onde abriu este arquivo. Em um servidor web, isso não será necessário.",
47
47
  "proprietaryLicense": "Licença proprietária",
48
48
  "notAppropriate": "Não apropriada",
49
- "publicDomain": "Domínio público"
49
+ "publicDomain": "Domínio público",
50
+ "attachment": "Anexo",
51
+ "noFilesAttached": "Nenhum arquivo anexado.",
52
+ "fileUnavailable": "Arquivo indisponível"
50
53
  };
51
54
  // The following line should only be used if the ELP contains a hangman game:
52
55
  $exe_i18n.exeGames = {
@@ -46,7 +46,10 @@ $exe_i18n = {
46
46
  "elpxFileProtocolWarning": "Mod local: Din cauza politicii de securitate a browserului, va trebui să selectați folderul din care ați deschis acest fișier. Pe un server web, acest lucru nu va fi necesar.",
47
47
  "proprietaryLicense": "Licență proprietară",
48
48
  "notAppropriate": "Nu este adecvată",
49
- "publicDomain": "Domeniu public"
49
+ "publicDomain": "Domeniu public",
50
+ "attachment": "Atașament",
51
+ "noFilesAttached": "Niciun fișier atașat.",
52
+ "fileUnavailable": "Fișier indisponibil"
50
53
  };
51
54
  // The following line should only be used if the ELP contains a hangman game:
52
55
  $exe_i18n.exeGames = {
@@ -46,7 +46,10 @@ $exe_i18n = {
46
46
  "elpxFileProtocolWarning": "Mode local: a causa de la política de seguretat del navegador, hauràs de seleccionar la carpeta des de la qual vas obrir aquest arxiu. En un servidor web això no serà necessari.",
47
47
  "proprietaryLicense": "Llicència propietària",
48
48
  "notAppropriate": "No apropiada",
49
- "publicDomain": "Domini públic"
49
+ "publicDomain": "Domini públic",
50
+ "attachment": "Adjunt",
51
+ "noFilesAttached": "No hi ha cap fitxer adjunt.",
52
+ "fileUnavailable": "Fitxer no disponible"
50
53
  };
51
54
  // The following line should only be used if the ELP contains a hangman game:
52
55
  $exe_i18n.exeGames = {
@@ -1,110 +1,111 @@
1
1
  {
2
2
  "buildVersion": "v0.0.0-alpha",
3
- "builtAt": "2026-06-09T10:43:11.684Z",
3
+ "builtAt": "2026-08-06T11:49:55.217Z",
4
4
  "themes": {
5
- "flux": {
6
- "files": 76,
7
- "size": 209700,
8
- "hash": "a981ba3bb7bae3f5c8c976db8b5918a38337676a60aed8deb15920e96ff3711f"
5
+ "base": {
6
+ "files": 56,
7
+ "size": 80989,
8
+ "hash": "e8ce68ed6628fa7a1913422f3ad9adadf395e708a38a0f84bd644b37de70b76a"
9
9
  },
10
10
  "nova": {
11
11
  "files": 74,
12
- "size": 140925,
13
- "hash": "394c618263265e0d35e396917bbd977fb46145eb62002192ee9b9cd8e7bfd073"
12
+ "size": 141010,
13
+ "hash": "7008fc03a970da6ec2a5926af79317fcc4e5f93ecbc193afe650743390912e91"
14
14
  },
15
- "neo": {
16
- "files": 87,
17
- "size": 815172,
18
- "hash": "6497a80276d0ee1776e8a22838928401876c232bc8ab5ee146967af22397c084"
15
+ "flux": {
16
+ "files": 76,
17
+ "size": 209684,
18
+ "hash": "972d71b1de28b2a888131ce173ff26a1825cfd027b9f380f9d7d3fc1d77b3bc3"
19
+ },
20
+ "universal": {
21
+ "files": 93,
22
+ "size": 139371,
23
+ "hash": "1f1ca9b301ffa365fae3cfbfba35839f5857c37802a9f172af7efc9c6c6aefef"
19
24
  },
20
25
  "zen": {
21
26
  "files": 80,
22
- "size": 1172615,
23
- "hash": "35d3c5a35948dcc8babfbdbb1812f99b4bb4217433d2d82263f47a9d226a425c"
24
- },
25
- "base": {
26
- "files": 56,
27
- "size": 81002,
28
- "hash": "cfd14a9bf08e12a490bd4feb525a33ce48a4879418023c1fb653a5fa2bd13c40"
27
+ "size": 1172600,
28
+ "hash": "97f6f23e376b464e79ee0e6e864f4339e001198880d4359d070317aea9dbf30e"
29
29
  },
30
- "universal": {
31
- "files": 93,
32
- "size": 139386,
33
- "hash": "2aadc6a6719461fd16680bba3c9080315912633ce5f8659d2388d1d99337e61b"
30
+ "neo": {
31
+ "files": 87,
32
+ "size": 815158,
33
+ "hash": "8823c4a0aed446ab0a61788d823c12a8a9fc9bb992c1c131830a9c3824b47f57"
34
34
  }
35
35
  },
36
36
  "idevices": {
37
- "three-sixty-viewer": 6,
38
- "hidden-image": 15,
39
- "trueorfalse": 19,
40
- "mathproblems": 18,
37
+ "word-search": 25,
38
+ "crossword": 23,
39
+ "file-attachment": 6,
40
+ "scrambled-list": 14,
41
+ "select-media-files": 26,
42
+ "beforeafter": 18,
43
+ "form": 13,
44
+ "discover": 26,
45
+ "image-gallery": 7,
46
+ "text": 5,
47
+ "relate": 22,
48
+ "sort": 26,
49
+ "identify": 24,
41
50
  "az-quiz-game": 31,
51
+ "udl-content": 9,
52
+ "checklist": 10,
53
+ "markdown-text": 4,
54
+ "download-source-file": 5,
55
+ "3dmol": 31,
56
+ "flipcards": 22,
57
+ "mathproblems": 18,
58
+ "lomloe": 3,
59
+ "interactive-video": 9,
60
+ "progress-report": 11,
61
+ "challenge": 62,
62
+ "electrical-circuits": 23,
42
63
  "padlock": 13,
43
64
  "example": 4,
65
+ "magnifier": 9,
66
+ "hidden-image": 15,
67
+ "geogebra-activity": 7,
68
+ "complete": 17,
44
69
  "trivial": 42,
45
- "flipcards": 22,
46
- "udl-content": 9,
47
- "magnifier": 8,
48
- "relate": 22,
49
- "image-gallery": 7,
50
- "3dmol": 31,
51
- "puzzle": 26,
70
+ "quick-questions-multiple-choice": 28,
52
71
  "external-website": 3,
53
- "three-d-viewer": 10,
54
- "dragdrop": 18,
55
- "rubric": 5,
56
- "adaptative-quiz": 14,
57
- "progress-report": 11,
58
- "discover": 26,
72
+ "classify": 22,
73
+ "casestudy": 5,
74
+ "guess": 31,
75
+ "quick-questions-video": 27,
59
76
  "slide": 4,
60
- "lomloe": 3,
61
- "text": 5,
62
- "geogebra-activity": 7,
63
77
  "periodic-table": 14,
64
- "crossword": 23,
65
- "markdown-text": 4,
66
- "checklist": 10,
67
- "mathematicaloperations": 18,
68
- "download-source-file": 5,
69
78
  "quick-questions": 26,
70
79
  "digcompedu": 4,
71
- "classify": 22,
72
- "challenge": 62,
73
- "quick-questions-video": 27,
74
- "form": 13,
75
- "guess": 31,
76
- "electrical-circuits": 23,
77
- "identify": 24,
78
- "beforeafter": 18,
79
- "interactive-video": 9,
80
- "casestudy": 5,
81
- "select-media-files": 26,
82
- "complete": 17,
83
- "word-search": 25,
84
- "quick-questions-multiple-choice": 28,
85
- "scrambled-list": 14,
86
- "sort": 26,
87
- "map": 158
80
+ "puzzle": 26,
81
+ "dragdrop": 18,
82
+ "adaptative-quiz": 14,
83
+ "trueorfalse": 19,
84
+ "map": 158,
85
+ "three-d-viewer": 10,
86
+ "rubric": 5,
87
+ "mathematicaloperations": 18,
88
+ "three-sixty-viewer": 6
88
89
  },
89
90
  "idevicesBundle": {
90
- "count": 51,
91
- "files": 1011,
92
- "size": 4125502,
93
- "hash": "33b5ad3c08d7b2a24ecb1bf885c55820704826c9595e1190dc5af8248e006419"
91
+ "count": 52,
92
+ "files": 1018,
93
+ "size": 4153645,
94
+ "hash": "b264144ca156a59a50f762d064ba5353b3136a92afe13b31f5ebec09a47d9b54"
94
95
  },
95
96
  "libs": {
96
97
  "files": 9,
97
- "size": 309498,
98
- "hash": "502b1f7c1ef193fb0ad6e968e176eeb0f7895994bf20519b954a3c5823495434"
98
+ "size": 313157,
99
+ "hash": "959c03673e458af8b502a7b335c9a3073e923441896233df833a326d5336ddd3"
99
100
  },
100
101
  "common": {
101
- "files": 132,
102
- "size": 2728084,
103
- "hash": "b65311c2d960abbff1da26e81dba0c8c58ea15cb310e952cf18c151e4eb12bd5"
102
+ "files": 133,
103
+ "size": 2731770,
104
+ "hash": "ced8ba388aab4061ebac5b1d6cea5ea709af015bea25a37d5f90cedcfa02db2d"
104
105
  },
105
106
  "contentCss": {
106
107
  "files": 4,
107
- "size": 44634,
108
- "hash": "b84c1f4b4f922266b37aa7da3283cf43a4973784b7b7a6a50c2a47b1953f2e44"
108
+ "size": 45491,
109
+ "hash": "6113f93a438647d347a38e0a9d16575a42be0488bfa48a48dc6f95113d26c80a"
109
110
  }
110
111
  }