@citolab/qti-components 7.0.5 → 7.0.6-next.1

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 (326) hide show
  1. package/cdn/chunk-2F5323DC.js +8 -0
  2. package/cdn/chunk-2WPNLHGH.js +43 -0
  3. package/cdn/chunk-3M77CJJH.js +8 -0
  4. package/cdn/chunk-4DFVJE2A.js +48 -0
  5. package/cdn/chunk-4HKDXRGE.js +5 -0
  6. package/cdn/chunk-5WCOPF7O.js +73 -0
  7. package/cdn/chunk-D4K2EXYX.js +8 -0
  8. package/cdn/chunk-II7AGB2E.js +11 -0
  9. package/cdn/chunk-KUOLGIA5.js +1 -0
  10. package/cdn/chunk-KXRA4DBZ.js +8 -0
  11. package/cdn/chunk-L4TDHAKL.js +24 -0
  12. package/cdn/chunk-LY27H7YF.js +1 -0
  13. package/cdn/chunk-M6AATWPS.js +59 -0
  14. package/cdn/{chunks/chunk-UIEC4LXR.js → chunk-MFWSHIPH.js} +1 -1
  15. package/cdn/chunk-NAARXANC.js +11 -0
  16. package/cdn/chunk-OEBYNBRS.js +129 -0
  17. package/cdn/chunk-RBATSYIS.js +43 -0
  18. package/cdn/chunk-RM352RXQ.js +5 -0
  19. package/cdn/{chunks/chunk-CFXQCNG6.js → chunk-SQDSHH6N.js} +18 -2
  20. package/cdn/chunk-V2RMP73O.js +1 -0
  21. package/cdn/chunk-WI7KK7NI.js +8 -0
  22. package/cdn/chunk-YHB534QY.js +8 -0
  23. package/cdn/chunk-YXST4IEX.js +5 -0
  24. package/cdn/qti-components/index.js +131 -116
  25. package/cdn/qti-item/core/index.global.js +149 -0
  26. package/cdn/qti-item/core/index.js +5 -0
  27. package/cdn/qti-loader/index.js +1 -23
  28. package/cdn/qti-test/components/index.global.js +1 -36
  29. package/cdn/qti-test/components/index.js +1 -3598
  30. package/cdn/qti-test/components/styles.js +1 -17
  31. package/cdn/qti-test/components/test-component.abstract.js +1 -1
  32. package/cdn/qti-test/components/test-item-link.js +1 -24
  33. package/cdn/qti-test/components/test-next.js +1 -24
  34. package/cdn/qti-test/components/test-next.spec.global.js +25 -60
  35. package/cdn/qti-test/components/test-next.spec.js +247 -4749
  36. package/cdn/qti-test/components/test-paging-buttons-stamp.js +1 -3
  37. package/cdn/qti-test/components/test-prev.js +1 -24
  38. package/cdn/qti-test/components/test-view.js +1 -11
  39. package/cdn/qti-test/core/index.global.js +205 -0
  40. package/cdn/qti-test/core/index.js +1 -0
  41. package/cdn/qti-transformers/index.js +1 -23
  42. package/dist/{chunks/chunk-Y6UWSECL.js → chunk-2CHF3TMY.js} +2 -2
  43. package/dist/chunk-2CHF3TMY.js.map +1 -0
  44. package/dist/{chunks/chunk-ZEFOMZNY.js → chunk-2GKDJDI5.js} +3 -3
  45. package/dist/chunk-2GKDJDI5.js.map +1 -0
  46. package/dist/{chunks/chunk-XDMSEAYC.js → chunk-2OA7E3E7.js} +1 -1
  47. package/dist/chunk-2OA7E3E7.js.map +1 -0
  48. package/dist/{chunks/chunk-PUBGXXTM.js → chunk-3F3DCHHM.js} +4 -4
  49. package/dist/chunk-3F3DCHHM.js.map +1 -0
  50. package/dist/{chunks/chunk-6YE2KJ4C.js → chunk-44VE5POH.js} +1 -1
  51. package/dist/{chunks/chunk-D3RGDWKP.js → chunk-4CSM2PCC.js} +1 -1
  52. package/dist/chunk-4CSM2PCC.js.map +1 -0
  53. package/dist/{chunks/chunk-ELDMXTUQ.js → chunk-4YG2FPKK.js} +1 -1
  54. package/dist/chunk-4YG2FPKK.js.map +1 -0
  55. package/dist/{chunks/chunk-W4B23OIP.js → chunk-4YR7ZPE3.js} +4 -4
  56. package/dist/chunk-4YR7ZPE3.js.map +1 -0
  57. package/dist/{chunks/chunk-XDFXD3BI.js → chunk-E3656TSN.js} +2 -2
  58. package/dist/chunk-E3656TSN.js.map +1 -0
  59. package/dist/{chunks/chunk-HWA4A3SR.js → chunk-ERLGA6TC.js} +4 -4
  60. package/dist/chunk-ERLGA6TC.js.map +1 -0
  61. package/dist/{chunks/chunk-3ROZMGAN.js → chunk-EXJQ3ZUE.js} +4 -4
  62. package/dist/chunk-EXJQ3ZUE.js.map +1 -0
  63. package/dist/chunk-KI3A6ZT6.js +50 -0
  64. package/dist/chunk-KI3A6ZT6.js.map +1 -0
  65. package/dist/{chunks/chunk-LKINC6JO.js → chunk-KVFH5VBC.js} +6 -6
  66. package/dist/chunk-KVFH5VBC.js.map +1 -0
  67. package/dist/chunk-LJU3MHXE.js +43 -0
  68. package/dist/chunk-LJU3MHXE.js.map +1 -0
  69. package/dist/chunk-MAC76UNI.js +1 -0
  70. package/dist/chunk-NUXEGEMP.js +65 -0
  71. package/dist/chunk-NUXEGEMP.js.map +1 -0
  72. package/dist/chunk-O3GIZH57.js +121 -0
  73. package/dist/chunk-O3GIZH57.js.map +1 -0
  74. package/dist/{qti-test/qti-test.js → chunk-QNR4WQAC.js} +307 -239
  75. package/dist/chunk-QNR4WQAC.js.map +1 -0
  76. package/dist/chunk-SLMQZKDH.js +568 -0
  77. package/dist/chunk-SLMQZKDH.js.map +1 -0
  78. package/dist/chunk-TAQAVEQ2.js +72 -0
  79. package/dist/chunk-TAQAVEQ2.js.map +1 -0
  80. package/dist/chunk-TLPISJ3Z.js +78 -0
  81. package/dist/chunk-TLPISJ3Z.js.map +1 -0
  82. package/dist/{chunks/chunk-4O5F7WV7.js → chunk-UB5K44DB.js} +1 -1
  83. package/dist/chunk-UB5K44DB.js.map +1 -0
  84. package/dist/chunk-UDWEOEOS.js +50 -0
  85. package/dist/chunk-UDWEOEOS.js.map +1 -0
  86. package/dist/qti-components/index.d.ts +2 -2
  87. package/dist/qti-components/index.js +12 -285
  88. package/dist/qti-components/index.js.map +1 -1
  89. package/dist/qti-components-jsx.d.ts +83 -83
  90. package/dist/qti-item/{components/item-container.d.ts → core/index.d.ts} +22 -1
  91. package/dist/{chunks/chunk-LROTNPC2.js → qti-item/core/index.js} +20 -9
  92. package/dist/qti-item/core/index.js.map +1 -0
  93. package/dist/qti-loader/index.d.ts +1 -1
  94. package/dist/qti-loader/index.js +6 -287
  95. package/dist/qti-loader/index.js.map +1 -1
  96. package/dist/{qti-simple-choice-DxWcdKHi.d.ts → qti-simple-choice-DB7hqAMS.d.ts} +1 -1
  97. package/dist/qti-test/components/index.d.ts +2 -4
  98. package/dist/qti-test/components/index.js +24 -4135
  99. package/dist/qti-test/components/index.js.map +1 -1
  100. package/dist/qti-test/components/styles.js +7 -22
  101. package/dist/qti-test/components/styles.js.map +1 -1
  102. package/dist/qti-test/components/test-component.abstract.d.ts +2 -3
  103. package/dist/qti-test/components/test-component.abstract.js +7 -145
  104. package/dist/qti-test/components/test-component.abstract.js.map +1 -1
  105. package/dist/qti-test/components/test-item-link.d.ts +2 -3
  106. package/dist/qti-test/components/test-item-link.js +9 -198
  107. package/dist/qti-test/components/test-item-link.js.map +1 -1
  108. package/dist/qti-test/components/test-next.d.ts +2 -3
  109. package/dist/qti-test/components/test-next.js +9 -205
  110. package/dist/qti-test/components/test-next.js.map +1 -1
  111. package/dist/qti-test/components/test-next.spec.d.ts +3 -7
  112. package/dist/qti-test/components/test-next.spec.js +140 -11152
  113. package/dist/qti-test/components/test-next.spec.js.map +1 -1
  114. package/dist/qti-test/components/test-paging-buttons-stamp.d.ts +2 -3
  115. package/dist/qti-test/components/test-paging-buttons-stamp.js +8 -214
  116. package/dist/qti-test/components/test-paging-buttons-stamp.js.map +1 -1
  117. package/dist/qti-test/components/test-prev.d.ts +2 -3
  118. package/dist/qti-test/components/test-prev.js +9 -205
  119. package/dist/qti-test/components/test-prev.js.map +1 -1
  120. package/dist/qti-test/components/test-view.d.ts +2 -3
  121. package/dist/qti-test/components/test-view.js +8 -205
  122. package/dist/qti-test/components/test-view.js.map +1 -1
  123. package/dist/qti-test/core/index.d.ts +121 -0
  124. package/dist/qti-test/core/index.js +25 -0
  125. package/dist/qti-transformers/index.js +6 -287
  126. package/dist/qti-transformers/index.js.map +1 -1
  127. package/dist/test-component.abstract-DWJ0XNiI.d.ts +108 -0
  128. package/dist/{index-Cvrd4KQA.d.ts → test.context-DKSpQHyg.d.ts} +40 -56
  129. package/dist/{test-base-BJwG9Ie8.d.ts → test.context-K2w-1mWi.d.ts} +19 -29
  130. package/dist/vscode.html-custom-data.json +21 -21
  131. package/package.json +70 -75
  132. package/cdn/chunks/chunk-4UJBK6JO.js +0 -1
  133. package/cdn/chunks/chunk-5O3Z7TDV.js +0 -1
  134. package/cdn/chunks/chunk-65LFT33L.js +0 -8
  135. package/cdn/chunks/chunk-6D25UFJR.js +0 -8
  136. package/cdn/chunks/chunk-6UGPNL7M.js +0 -1
  137. package/cdn/chunks/chunk-CSUKVUZF.js +0 -3
  138. package/cdn/chunks/chunk-CSY3WI5A.js +0 -1
  139. package/cdn/chunks/chunk-DAZR7RUI.js +0 -0
  140. package/cdn/chunks/chunk-EOPEMJS3.js +0 -0
  141. package/cdn/chunks/chunk-G5O7EN45.js +0 -5
  142. package/cdn/chunks/chunk-GEFUIFM7.js +0 -0
  143. package/cdn/chunks/chunk-JLNHEMQG.js +0 -1
  144. package/cdn/chunks/chunk-LPWIM7QJ.js +0 -902
  145. package/cdn/chunks/chunk-M3YRM3AV.js +0 -1
  146. package/cdn/chunks/chunk-M6BOWL2U.js +0 -1
  147. package/cdn/chunks/chunk-P5IE36FO.js +0 -8
  148. package/cdn/chunks/chunk-PXH5KN5O.js +0 -1
  149. package/cdn/chunks/chunk-RBEI6NIF.js +0 -1
  150. package/cdn/chunks/chunk-SMKIYFFI.js +0 -1
  151. package/cdn/chunks/chunk-SRLMW23F.js +0 -0
  152. package/cdn/chunks/chunk-T3YDLD2H.js +0 -11
  153. package/cdn/chunks/chunk-T6IXJ4W4.js +0 -1
  154. package/cdn/chunks/chunk-TFAUBGP2.js +0 -0
  155. package/cdn/chunks/chunk-V44O3GTW.js +0 -0
  156. package/cdn/chunks/chunk-V6B54FQW.js +0 -5
  157. package/cdn/chunks/chunk-V6KX6BQN.js +0 -1
  158. package/cdn/chunks/chunk-VYANBI35.js +0 -1
  159. package/cdn/chunks/chunk-XUJ7TXHW.js +0 -1
  160. package/cdn/chunks/chunk-ZIZLFFSG.js +0 -0
  161. package/cdn/index.css +0 -1
  162. package/cdn/index.global.js +0 -277
  163. package/cdn/index.js +0 -4503
  164. package/cdn/qti-item/components/index.css +0 -1
  165. package/cdn/qti-item/components/index.global.js +0 -149
  166. package/cdn/qti-item/components/index.js +0 -3549
  167. package/cdn/qti-item/components/item-container.css +0 -1
  168. package/cdn/qti-item/components/item-container.global.js +0 -149
  169. package/cdn/qti-item/components/item-container.js +0 -3549
  170. package/cdn/qti-item/index.css +0 -1
  171. package/cdn/qti-item/index.global.js +0 -149
  172. package/cdn/qti-item/index.js +0 -3549
  173. package/cdn/qti-item/qti-item.global.js +0 -114
  174. package/cdn/qti-item/qti-item.js +0 -1
  175. package/cdn/qti-test/components/index.css +0 -1
  176. package/cdn/qti-test/components/test-container.css +0 -1
  177. package/cdn/qti-test/components/test-container.global.js +0 -149
  178. package/cdn/qti-test/components/test-container.js +0 -3549
  179. package/cdn/qti-test/components/test-next.spec.css +0 -1
  180. package/cdn/qti-test/context/index.global.js +0 -58
  181. package/cdn/qti-test/context/index.js +0 -1
  182. package/cdn/qti-test/context/test.context.global.js +0 -58
  183. package/cdn/qti-test/context/test.context.js +0 -1
  184. package/cdn/qti-test/index.css +0 -1
  185. package/cdn/qti-test/index.global.js +0 -242
  186. package/cdn/qti-test/index.js +0 -3598
  187. package/cdn/qti-test/mixins/index.global.js +0 -1
  188. package/cdn/qti-test/mixins/index.js +0 -23
  189. package/cdn/qti-test/mixins/test-loader.mixin.global.js +0 -1
  190. package/cdn/qti-test/mixins/test-loader.mixin.js +0 -23
  191. package/cdn/qti-test/mixins/test-navigation.mixin.global.js +0 -1
  192. package/cdn/qti-test/mixins/test-navigation.mixin.js +0 -1
  193. package/cdn/qti-test/mixins/test-view.mixin.global.js +0 -1
  194. package/cdn/qti-test/mixins/test-view.mixin.js +0 -1
  195. package/cdn/qti-test/qti-assessment-test/index.global.js +0 -170
  196. package/cdn/qti-test/qti-assessment-test/index.js +0 -1
  197. package/cdn/qti-test/qti-assessment-test/qti-assessment-item-ref.global.js +0 -170
  198. package/cdn/qti-test/qti-assessment-test/qti-assessment-item-ref.js +0 -1
  199. package/cdn/qti-test/qti-assessment-test/qti-assessment-section.global.js +0 -170
  200. package/cdn/qti-test/qti-assessment-test/qti-assessment-section.js +0 -1
  201. package/cdn/qti-test/qti-assessment-test/qti-assessment-test.global.js +0 -170
  202. package/cdn/qti-test/qti-assessment-test/qti-assessment-test.js +0 -1
  203. package/cdn/qti-test/qti-assessment-test/qti-test-part.global.js +0 -114
  204. package/cdn/qti-test/qti-assessment-test/qti-test-part.js +0 -1
  205. package/cdn/qti-test/qti-test.global.js +0 -170
  206. package/cdn/qti-test/qti-test.js +0 -23
  207. package/cdn/qti-test/test-base.global.js +0 -170
  208. package/cdn/qti-test/test-base.js +0 -1
  209. package/dist/chunks/chunk-3G2DDBJW.js +0 -44
  210. package/dist/chunks/chunk-3G2DDBJW.js.map +0 -1
  211. package/dist/chunks/chunk-3NLCJYSX.js +0 -1
  212. package/dist/chunks/chunk-3OXGDCSU.js +0 -6253
  213. package/dist/chunks/chunk-3OXGDCSU.js.map +0 -1
  214. package/dist/chunks/chunk-3ROZMGAN.js.map +0 -1
  215. package/dist/chunks/chunk-4O5F7WV7.js.map +0 -1
  216. package/dist/chunks/chunk-AAQCM2FP.js +0 -56
  217. package/dist/chunks/chunk-AAQCM2FP.js.map +0 -1
  218. package/dist/chunks/chunk-D3RGDWKP.js.map +0 -1
  219. package/dist/chunks/chunk-DJLE6EV2.js +0 -36
  220. package/dist/chunks/chunk-DJLE6EV2.js.map +0 -1
  221. package/dist/chunks/chunk-ELDMXTUQ.js.map +0 -1
  222. package/dist/chunks/chunk-EW5CTHAD.js +0 -1
  223. package/dist/chunks/chunk-HWA4A3SR.js.map +0 -1
  224. package/dist/chunks/chunk-IKZWK2C5.js +0 -1
  225. package/dist/chunks/chunk-IKZWK2C5.js.map +0 -1
  226. package/dist/chunks/chunk-IP7JSYO6.js +0 -1
  227. package/dist/chunks/chunk-IP7JSYO6.js.map +0 -1
  228. package/dist/chunks/chunk-JE6BMXZU.js +0 -94
  229. package/dist/chunks/chunk-JE6BMXZU.js.map +0 -1
  230. package/dist/chunks/chunk-JSPJGWGT.js +0 -20
  231. package/dist/chunks/chunk-JSPJGWGT.js.map +0 -1
  232. package/dist/chunks/chunk-LKINC6JO.js.map +0 -1
  233. package/dist/chunks/chunk-LROTNPC2.js.map +0 -1
  234. package/dist/chunks/chunk-MTMT2RMF.js +0 -63
  235. package/dist/chunks/chunk-MTMT2RMF.js.map +0 -1
  236. package/dist/chunks/chunk-NDJZGJUR.js +0 -65
  237. package/dist/chunks/chunk-NDJZGJUR.js.map +0 -1
  238. package/dist/chunks/chunk-OE2LFIH2.js +0 -1
  239. package/dist/chunks/chunk-OE2LFIH2.js.map +0 -1
  240. package/dist/chunks/chunk-OJ2XGDWK.js +0 -1
  241. package/dist/chunks/chunk-OJ2XGDWK.js.map +0 -1
  242. package/dist/chunks/chunk-PUBGXXTM.js.map +0 -1
  243. package/dist/chunks/chunk-QRCUNRP5.js +0 -75
  244. package/dist/chunks/chunk-QRCUNRP5.js.map +0 -1
  245. package/dist/chunks/chunk-S6JJYCO7.js +0 -51
  246. package/dist/chunks/chunk-S6JJYCO7.js.map +0 -1
  247. package/dist/chunks/chunk-U3AALKEP.js +0 -1
  248. package/dist/chunks/chunk-U3AALKEP.js.map +0 -1
  249. package/dist/chunks/chunk-UCQFSRYF.js +0 -34
  250. package/dist/chunks/chunk-UCQFSRYF.js.map +0 -1
  251. package/dist/chunks/chunk-URGVQ64M.js +0 -1
  252. package/dist/chunks/chunk-URGVQ64M.js.map +0 -1
  253. package/dist/chunks/chunk-V4FXK4TP.js +0 -128
  254. package/dist/chunks/chunk-V4FXK4TP.js.map +0 -1
  255. package/dist/chunks/chunk-W4B23OIP.js.map +0 -1
  256. package/dist/chunks/chunk-XDFXD3BI.js.map +0 -1
  257. package/dist/chunks/chunk-XDMSEAYC.js.map +0 -1
  258. package/dist/chunks/chunk-XPDS72XY.js +0 -29
  259. package/dist/chunks/chunk-XPDS72XY.js.map +0 -1
  260. package/dist/chunks/chunk-Y6UWSECL.js.map +0 -1
  261. package/dist/chunks/chunk-ZEFOMZNY.js.map +0 -1
  262. package/dist/index.d.ts +0 -19
  263. package/dist/index.js +0 -11153
  264. package/dist/index.js.map +0 -1
  265. package/dist/qti-item/components/index.d.ts +0 -3
  266. package/dist/qti-item/components/index.js +0 -3856
  267. package/dist/qti-item/components/index.js.map +0 -1
  268. package/dist/qti-item/components/item-container.js +0 -3856
  269. package/dist/qti-item/components/item-container.js.map +0 -1
  270. package/dist/qti-item/index.d.ts +0 -4
  271. package/dist/qti-item/index.js +0 -3869
  272. package/dist/qti-item/index.js.map +0 -1
  273. package/dist/qti-item/qti-item.d.ts +0 -25
  274. package/dist/qti-item/qti-item.js +0 -26
  275. package/dist/qti-item/qti-item.js.map +0 -1
  276. package/dist/qti-test/components/test-container.d.ts +0 -37
  277. package/dist/qti-test/components/test-container.js +0 -3782
  278. package/dist/qti-test/components/test-container.js.map +0 -1
  279. package/dist/qti-test/context/index.d.ts +0 -6
  280. package/dist/qti-test/context/index.js +0 -9
  281. package/dist/qti-test/context/index.js.map +0 -1
  282. package/dist/qti-test/context/test.context.d.ts +0 -6
  283. package/dist/qti-test/context/test.context.js +0 -9
  284. package/dist/qti-test/context/test.context.js.map +0 -1
  285. package/dist/qti-test/index.d.ts +0 -14
  286. package/dist/qti-test/index.js +0 -4746
  287. package/dist/qti-test/index.js.map +0 -1
  288. package/dist/qti-test/mixins/index.d.ts +0 -8
  289. package/dist/qti-test/mixins/index.js +0 -350
  290. package/dist/qti-test/mixins/index.js.map +0 -1
  291. package/dist/qti-test/mixins/test-loader.mixin.d.ts +0 -8
  292. package/dist/qti-test/mixins/test-loader.mixin.js +0 -240
  293. package/dist/qti-test/mixins/test-loader.mixin.js.map +0 -1
  294. package/dist/qti-test/mixins/test-navigation.mixin.d.ts +0 -22
  295. package/dist/qti-test/mixins/test-navigation.mixin.js +0 -64
  296. package/dist/qti-test/mixins/test-navigation.mixin.js.map +0 -1
  297. package/dist/qti-test/mixins/test-view.mixin.d.ts +0 -6
  298. package/dist/qti-test/mixins/test-view.mixin.js +0 -50
  299. package/dist/qti-test/mixins/test-view.mixin.js.map +0 -1
  300. package/dist/qti-test/qti-assessment-test/index.d.ts +0 -6
  301. package/dist/qti-test/qti-assessment-test/index.js +0 -221
  302. package/dist/qti-test/qti-assessment-test/index.js.map +0 -1
  303. package/dist/qti-test/qti-assessment-test/qti-assessment-item-ref.d.ts +0 -6
  304. package/dist/qti-test/qti-assessment-test/qti-assessment-item-ref.js +0 -85
  305. package/dist/qti-test/qti-assessment-test/qti-assessment-item-ref.js.map +0 -1
  306. package/dist/qti-test/qti-assessment-test/qti-assessment-section.d.ts +0 -6
  307. package/dist/qti-test/qti-assessment-test/qti-assessment-section.js +0 -73
  308. package/dist/qti-test/qti-assessment-test/qti-assessment-section.js.map +0 -1
  309. package/dist/qti-test/qti-assessment-test/qti-assessment-test.d.ts +0 -6
  310. package/dist/qti-test/qti-assessment-test/qti-assessment-test.js +0 -54
  311. package/dist/qti-test/qti-assessment-test/qti-assessment-test.js.map +0 -1
  312. package/dist/qti-test/qti-assessment-test/qti-test-part.d.ts +0 -19
  313. package/dist/qti-test/qti-assessment-test/qti-test-part.js +0 -62
  314. package/dist/qti-test/qti-assessment-test/qti-test-part.js.map +0 -1
  315. package/dist/qti-test/qti-test.d.ts +0 -68
  316. package/dist/qti-test/qti-test.js.map +0 -1
  317. package/dist/qti-test/test-base.d.ts +0 -6
  318. package/dist/qti-test/test-base.js +0 -137
  319. package/dist/qti-test/test-base.js.map +0 -1
  320. /package/cdn/{chunks/chunk-6DMSHH5X.js → chunk-22HAPLRD.js} +0 -0
  321. /package/cdn/{chunks/chunk-EHK76KRT.js → chunk-GPDDPZFH.js} +0 -0
  322. /package/cdn/{chunks/chunk-5FCXUJAG.js → chunk-LVW3MHTI.js} +0 -0
  323. /package/cdn/{chunks/chunk-T4HD2C4F.js → chunk-VI2WKTN4.js} +0 -0
  324. /package/dist/{chunks/chunk-3NLCJYSX.js.map → chunk-44VE5POH.js.map} +0 -0
  325. /package/dist/{chunks/chunk-6YE2KJ4C.js.map → chunk-MAC76UNI.js.map} +0 -0
  326. /package/dist/{chunks/chunk-EW5CTHAD.js.map → qti-test/core/index.js.map} +0 -0
@@ -1,350 +0,0 @@
1
- // src/lib/qti-transformers/qti-transformers.ts
2
- var xml = String.raw;
3
- var xmlToHTML = xml`<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
4
- <xsl:output method="html" version="5.0" encoding="UTF-8" indent="yes" />
5
- <xsl:template match="@*|node()">
6
- <xsl:copy>
7
- <xsl:apply-templates select="@*|node()"/>
8
- </xsl:copy>
9
- </xsl:template>
10
-
11
- <!-- remove existing namespaces -->
12
- <xsl:template match="*">
13
- <!-- remove element prefix -->
14
- <xsl:element name="{local-name()}">
15
- <!-- process attributes -->
16
- <xsl:for-each select="@*">
17
- <!-- remove attribute prefix -->
18
- <xsl:attribute name="{local-name()}">
19
- <xsl:value-of select="."/>
20
- </xsl:attribute>
21
- </xsl:for-each>
22
- <xsl:apply-templates/>
23
- </xsl:element>
24
- </xsl:template>
25
- </xsl:stylesheet>`;
26
- function extendElementName(xmlFragment, tagName, extension) {
27
- xmlFragment.querySelectorAll(tagName).forEach((element) => {
28
- const newTagName = `${tagName}-${extension}`;
29
- const newElement = createElementWithNewTagName(element, newTagName);
30
- element.replaceWith(newElement);
31
- });
32
- }
33
- function extendElementsWithClass(xmlFragment, classNamePattern) {
34
- xmlFragment.querySelectorAll("*").forEach((element) => {
35
- const classList = element.classList;
36
- if (classList) {
37
- classList.forEach((className) => {
38
- if (className.startsWith(`${classNamePattern}:`)) {
39
- const suffix = className.slice(`${classNamePattern}:`.length);
40
- const newTagName = `${element.nodeName}-${suffix}`;
41
- const newElement = createElementWithNewTagName(element, newTagName);
42
- element.replaceWith(newElement);
43
- }
44
- });
45
- }
46
- });
47
- }
48
- function createElementWithNewTagName(element, newTagName) {
49
- const newElement = document.createElement(newTagName);
50
- for (const attr of element.attributes) {
51
- newElement.setAttribute(attr.name, attr.value);
52
- }
53
- while (element.firstChild) {
54
- newElement.appendChild(element.firstChild);
55
- }
56
- return newElement;
57
- }
58
- var currentRequest = null;
59
- function loadXML(url, cancelPreviousRequest = false) {
60
- if (cancelPreviousRequest && currentRequest !== null) {
61
- currentRequest.abort();
62
- }
63
- return new Promise((resolve, reject) => {
64
- const xhr = new XMLHttpRequest();
65
- currentRequest = xhr;
66
- xhr.open("GET", url, true);
67
- xhr.responseType = "document";
68
- xhr.onload = () => {
69
- if (xhr.status >= 200 && xhr.status < 300) {
70
- resolve(xhr.responseXML);
71
- } else {
72
- reject(xhr.statusText);
73
- }
74
- };
75
- xhr.onerror = () => {
76
- reject(xhr.statusText);
77
- };
78
- xhr.send();
79
- });
80
- }
81
- function parseXML(xmlDocument) {
82
- const parser = new DOMParser();
83
- const xmlFragment = parser.parseFromString(xmlDocument, "text/xml");
84
- return xmlFragment;
85
- }
86
- function toHTML(xmlFragment) {
87
- const processor = new XSLTProcessor();
88
- const xsltDocument = new DOMParser().parseFromString(xmlToHTML, "text/xml");
89
- processor.importStylesheet(xsltDocument);
90
- const itemHTMLFragment = processor.transformToFragment(xmlFragment, document);
91
- return itemHTMLFragment;
92
- }
93
- function setLocation(xmlFragment, location) {
94
- if (!location.endsWith("/")) {
95
- location += "/";
96
- }
97
- xmlFragment.querySelectorAll("[src],[href],[primary-path]").forEach((elWithSrc) => {
98
- let attr = "";
99
- if (elWithSrc.getAttribute("src")) {
100
- attr = "src";
101
- }
102
- if (elWithSrc.getAttribute("href")) {
103
- attr = "href";
104
- }
105
- if (elWithSrc.getAttribute("primary-path")) {
106
- attr = "primary-path";
107
- }
108
- const attrValue = elWithSrc.getAttribute(attr)?.trim();
109
- if (!attrValue.startsWith("data:") && !attrValue.startsWith("http")) {
110
- const newSrcValue = location + encodeURI(attrValue);
111
- elWithSrc.setAttribute(attr, newSrcValue);
112
- }
113
- });
114
- }
115
- function convertCDATAtoComment(xmlFragment) {
116
- const cdataElements = xmlFragment.querySelectorAll('qti-custom-operator[class="js.org"] > qti-base-value');
117
- cdataElements.forEach((element) => {
118
- const commentText = document.createComment(element.textContent);
119
- element.replaceChild(commentText, element.firstChild);
120
- });
121
- }
122
- function stripStyleSheets(xmlFragment) {
123
- xmlFragment.querySelectorAll("qti-stylesheet").forEach((stylesheet) => stylesheet.remove());
124
- }
125
-
126
- // src/lib/qti-transformers/qti-transform-item.ts
127
- var qtiTransformItem = () => {
128
- let xmlFragment;
129
- const api = {
130
- async load(uri, cancelPreviousRequest = false) {
131
- return new Promise((resolve) => {
132
- loadXML(uri, cancelPreviousRequest).then((xml2) => {
133
- xmlFragment = xml2;
134
- api.path(uri.substring(0, uri.lastIndexOf("/")));
135
- return resolve(api);
136
- });
137
- });
138
- },
139
- parse(xmlString) {
140
- xmlFragment = parseXML(xmlString);
141
- return api;
142
- },
143
- path: (location) => {
144
- setLocation(xmlFragment, location);
145
- return api;
146
- },
147
- fn(fn) {
148
- fn(xmlFragment);
149
- return api;
150
- },
151
- pciHooks(uri) {
152
- const attributes = ["hook", "module"];
153
- const documentPath = uri.substring(0, uri.lastIndexOf("/"));
154
- for (const attribute of attributes) {
155
- const srcAttributes = xmlFragment.querySelectorAll("[" + attribute + "]");
156
- srcAttributes.forEach((node) => {
157
- const srcValue = node.getAttribute(attribute);
158
- if (!srcValue.startsWith("data:") && !srcValue.startsWith("http")) {
159
- node.setAttribute("base-url", uri);
160
- node.setAttribute(
161
- "module",
162
- documentPath + "/" + encodeURI(srcValue + (srcValue.endsWith(".js") ? "" : ".js"))
163
- );
164
- }
165
- });
166
- }
167
- return api;
168
- },
169
- extendElementName: (tagName, extension) => {
170
- extendElementName(xmlFragment, tagName, extension);
171
- return api;
172
- },
173
- extendElementsWithClass: (param = "extend") => {
174
- extendElementsWithClass(xmlFragment, param);
175
- return api;
176
- },
177
- customInteraction(baseRef, baseItem) {
178
- const qtiCustomInteraction = xmlFragment.querySelector("qti-custom-interaction");
179
- const qtiCustomInteractionObject = qtiCustomInteraction.querySelector("object");
180
- qtiCustomInteraction.setAttribute("data-base-ref", baseRef);
181
- qtiCustomInteraction.setAttribute("data-base-item", baseRef + baseItem);
182
- qtiCustomInteraction.setAttribute("data", qtiCustomInteractionObject.getAttribute("data"));
183
- qtiCustomInteraction.setAttribute("width", qtiCustomInteractionObject.getAttribute("width"));
184
- qtiCustomInteraction.setAttribute("height", qtiCustomInteractionObject.getAttribute("height"));
185
- qtiCustomInteraction.removeChild(qtiCustomInteractionObject);
186
- return api;
187
- },
188
- convertCDATAtoComment() {
189
- convertCDATAtoComment(xmlFragment);
190
- return api;
191
- },
192
- stripStyleSheets() {
193
- stripStyleSheets(xmlFragment);
194
- return api;
195
- },
196
- html() {
197
- return new XMLSerializer().serializeToString(toHTML(xmlFragment));
198
- },
199
- xml() {
200
- return new XMLSerializer().serializeToString(xmlFragment);
201
- },
202
- htmlDoc() {
203
- return toHTML(xmlFragment);
204
- },
205
- xmlDoc() {
206
- return xmlFragment;
207
- }
208
- };
209
- return api;
210
- };
211
-
212
- // src/lib/qti-test/mixins/test-loader.mixin.ts
213
- var TestLoaderMixin = (superClass) => {
214
- class TestLoaderClass extends superClass {
215
- // private testURL = '';
216
- constructor(...args) {
217
- super(...args);
218
- this.addEventListener("qti-assessment-test-connected", () => {
219
- });
220
- this.addEventListener("qti-load-item-request", ({ detail }) => {
221
- detail.promise = (async () => {
222
- const api = await qtiTransformItem().load(
223
- `${detail.href}`,
224
- detail.cancelPreviousRequest
225
- );
226
- return api.htmlDoc();
227
- })();
228
- });
229
- this.addEventListener("qti-interaction-changed", (_e) => {
230
- });
231
- this.addEventListener("qti-outcome-changed", () => {
232
- });
233
- }
234
- }
235
- return TestLoaderClass;
236
- };
237
-
238
- // src/lib/qti-test/mixins/test-navigation.mixin.ts
239
- var TestNavigationMixin = (superClass) => {
240
- class TestNavigationClass extends superClass {
241
- constructor(...args) {
242
- super(...args);
243
- this.addEventListener("qti-request-test-item", ({ detail: navItemId }) => {
244
- if (!navItemId) return;
245
- this._clearLoadedItems();
246
- const itemRefEl = this.testElement.el.querySelector(
247
- `qti-assessment-item-ref[identifier="${navItemId}"]`
248
- );
249
- const promise = this._loadItemRequest(itemRefEl.href, false);
250
- const navPartId = itemRefEl.closest("qti-test-part").identifier;
251
- const navSectionId = itemRefEl.closest("qti-assessment-section").identifier;
252
- this._testContext = { ...this._testContext, navPartId, navSectionId, navItemId, navItemLoading: true };
253
- if (promise) {
254
- promise.then((doc) => {
255
- itemRefEl.xmlDoc = doc;
256
- requestAnimationFrame(
257
- () => this.dispatchEvent(new CustomEvent("qti-item-connected", { bubbles: true, composed: true }))
258
- );
259
- this._testContext = { ...this._testContext, navItemLoading: false };
260
- }).catch((error) => console.error("Failed to load item:", error));
261
- } else {
262
- console.info("Load item request was not handled:", itemRefEl.href);
263
- }
264
- });
265
- this.addEventListener("qti-assessment-test-connected", () => {
266
- let navItemId = this._testContext.navItemId;
267
- if (!navItemId) {
268
- const itemRefEl = this.testElement.el.querySelector("qti-assessment-item-ref");
269
- navItemId = itemRefEl.identifier;
270
- }
271
- this.dispatchEvent(
272
- new CustomEvent("qti-request-test-item", { detail: navItemId, bubbles: true, composed: true })
273
- );
274
- });
275
- }
276
- _clearLoadedItems() {
277
- const itemRefEls = this.testElement.el.querySelectorAll(`qti-assessment-test qti-assessment-item-ref`);
278
- Array.from(itemRefEls).forEach((itemElement) => {
279
- itemElement.xmlDoc = null;
280
- });
281
- }
282
- _loadItemRequest(href, cancelPreviousRequest = true) {
283
- const event = new CustomEvent("qti-load-item-request", {
284
- bubbles: true,
285
- composed: true,
286
- detail: {
287
- href,
288
- promise: null,
289
- cancelPreviousRequest
290
- }
291
- });
292
- this.dispatchEvent(event);
293
- return event.detail.promise;
294
- }
295
- }
296
- return TestNavigationClass;
297
- };
298
-
299
- // src/lib/qti-test/mixins/test-view.mixin.ts
300
- var TestViewMixin = (superClass) => {
301
- class TestViewClass extends superClass {
302
- constructor(...args) {
303
- super(...args);
304
- this._testContext = { ...this._testContext, view: "candidate" };
305
- this.addEventListener("on-test-switch-view", (e) => {
306
- this._testContext = { ...this._testContext, view: e.detail };
307
- this._updateElementView();
308
- });
309
- this.addEventListener("qti-assessment-test-connected", () => {
310
- this._updateElementView();
311
- });
312
- this.addEventListener("qti-assessment-item-connected", (e) => {
313
- this._updateElementView();
314
- this._setCorrectResponseVisibility(e.detail);
315
- });
316
- }
317
- willUpdate(changedProperties) {
318
- super.willUpdate(changedProperties);
319
- if (changedProperties.has("_testContext")) {
320
- this._updateElementView();
321
- }
322
- }
323
- // Method to handle view updates for elements based on the current context view
324
- _updateElementView() {
325
- if (this.testElement && this.testElement.el) {
326
- const viewElements = Array.from(this.testElement.el.querySelectorAll("[view]"));
327
- viewElements.forEach((element) => {
328
- element.classList.toggle("show", element.getAttribute("view") === this._testContext.view);
329
- });
330
- const assessmentItem = this.testElement.el.querySelector(
331
- `qti-assessment-item[identifier="${this._testContext.navItemId}"]`
332
- );
333
- if (assessmentItem) {
334
- assessmentItem.showCorrectResponse(this._testContext.view === "scorer");
335
- }
336
- }
337
- }
338
- // Event handler for connected QTI assessment items
339
- _setCorrectResponseVisibility(assessmentItem) {
340
- assessmentItem.showCorrectResponse(this._testContext.view === "scorer");
341
- }
342
- }
343
- return TestViewClass;
344
- };
345
- export {
346
- TestLoaderMixin,
347
- TestNavigationMixin,
348
- TestViewMixin
349
- };
350
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/lib/qti-transformers/qti-transformers.ts","../../../src/lib/qti-transformers/qti-transform-item.ts","../../../src/lib/qti-test/mixins/test-loader.mixin.ts","../../../src/lib/qti-test/mixins/test-navigation.mixin.ts","../../../src/lib/qti-test/mixins/test-view.mixin.ts"],"sourcesContent":["const xml = String.raw;\n\n/* <!-- convert CDATA to comments -->\n <xsl:template match=\"text()[contains(., 'CDATA')]\">\n <xsl:comment>\n <xsl:value-of select=\".\"/>\n </xsl:comment>\n</xsl:template>\n*/\n\n/*\n <!-- remove xml comments -->\n <xsl:template match=\"comment()\" />\n */\n\nconst xmlToHTML = xml`<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\n<xsl:output method=\"html\" version=\"5.0\" encoding=\"UTF-8\" indent=\"yes\" />\n <xsl:template match=\"@*|node()\">\n <xsl:copy>\n <xsl:apply-templates select=\"@*|node()\"/>\n </xsl:copy>\n </xsl:template>\n\n <!-- remove existing namespaces -->\n <xsl:template match=\"*\">\n <!-- remove element prefix -->\n <xsl:element name=\"{local-name()}\">\n <!-- process attributes -->\n <xsl:for-each select=\"@*\">\n <!-- remove attribute prefix -->\n <xsl:attribute name=\"{local-name()}\">\n <xsl:value-of select=\".\"/>\n </xsl:attribute>\n </xsl:for-each>\n <xsl:apply-templates/>\n </xsl:element>\n</xsl:template>\n</xsl:stylesheet>`;\n\n// Function to extend elements with a specific tag name by adding an extension suffix\nexport function extendElementName(xmlFragment: XMLDocument, tagName: string, extension: string) {\n xmlFragment.querySelectorAll(tagName).forEach(element => {\n const newTagName = `${tagName}-${extension}`;\n const newElement = createElementWithNewTagName(element, newTagName);\n element.replaceWith(newElement);\n });\n}\n\n// Function to extend any element with a specific class pattern (e.g., \"extend:suffix\")\nexport function extendElementsWithClass(xmlFragment: XMLDocument, classNamePattern: string) {\n xmlFragment.querySelectorAll('*').forEach(element => {\n const classList = element.classList;\n if (classList) {\n classList.forEach(className => {\n if (className.startsWith(`${classNamePattern}:`)) {\n const suffix = className.slice(`${classNamePattern}:`.length);\n const newTagName = `${element.nodeName}-${suffix}`;\n const newElement = createElementWithNewTagName(element, newTagName);\n element.replaceWith(newElement);\n }\n });\n }\n });\n}\n\n// Helper function to create a new element with a new tag name and copy attributes and children\nfunction createElementWithNewTagName(element, newTagName) {\n const newElement = document.createElement(newTagName);\n // Copy attributes\n for (const attr of element.attributes) {\n newElement.setAttribute(attr.name, attr.value);\n }\n // Copy child nodes\n while (element.firstChild) {\n newElement.appendChild(element.firstChild);\n }\n return newElement;\n}\n\nexport function itemsFromTest(xmlFragment: DocumentFragment) {\n const items: { identifier: string; href: string; category: string }[] = [];\n xmlFragment.querySelectorAll('qti-assessment-item-ref').forEach(el => {\n const identifier = el.getAttribute('identifier');\n const href = el.getAttribute('href');\n const category = el.getAttribute('category');\n items.push({ identifier, href, category });\n });\n return items;\n}\n\nlet currentRequest: XMLHttpRequest | null = null;\n\nexport function loadXML(url, cancelPreviousRequest = false) {\n if (cancelPreviousRequest && currentRequest !== null) {\n currentRequest.abort(); // Abort the ongoing request if there is one\n }\n\n return new Promise<XMLDocument | null>((resolve, reject) => {\n const xhr = new XMLHttpRequest();\n currentRequest = xhr; // Store the current request\n\n xhr.open('GET', url, true);\n xhr.responseType = 'document';\n\n xhr.onload = () => {\n if (xhr.status >= 200 && xhr.status < 300) {\n resolve(xhr.responseXML);\n } else {\n reject(xhr.statusText);\n }\n };\n\n xhr.onerror = () => {\n reject(xhr.statusText);\n };\n\n xhr.send();\n });\n}\n\nexport function parseXML(xmlDocument: string) {\n const parser = new DOMParser();\n const xmlFragment = parser.parseFromString(xmlDocument, 'text/xml');\n return xmlFragment;\n}\n\nexport function toHTML(xmlFragment: Document): DocumentFragment {\n const processor = new XSLTProcessor();\n const xsltDocument = new DOMParser().parseFromString(xmlToHTML, 'text/xml');\n processor.importStylesheet(xsltDocument);\n const itemHTMLFragment = processor.transformToFragment(xmlFragment, document);\n return itemHTMLFragment;\n}\n\nexport function setLocation(xmlFragment: DocumentFragment, location: string) {\n if (!location.endsWith('/')) {\n location += '/';\n }\n\n xmlFragment.querySelectorAll('[src],[href],[primary-path]').forEach(elWithSrc => {\n let attr: 'src' | 'href' | 'primary-path' | '' = '';\n\n if (elWithSrc.getAttribute('src')) {\n attr = 'src';\n }\n if (elWithSrc.getAttribute('href')) {\n attr = 'href';\n }\n if (elWithSrc.getAttribute('primary-path')) {\n attr = 'primary-path';\n }\n const attrValue = elWithSrc.getAttribute(attr)?.trim();\n\n if (!attrValue.startsWith('data:') && !attrValue.startsWith('http')) {\n const newSrcValue = location + encodeURI(attrValue);\n elWithSrc.setAttribute(attr, newSrcValue);\n }\n });\n}\n\nexport function convertCDATAtoComment(xmlFragment: DocumentFragment) {\n const cdataElements = xmlFragment.querySelectorAll('qti-custom-operator[class=\"js.org\"] > qti-base-value');\n cdataElements.forEach(element => {\n const commentText = document.createComment(element.textContent);\n element.replaceChild(commentText, element.firstChild);\n });\n}\n\nexport function stripStyleSheets(xmlFragment: DocumentFragment) {\n // remove qti-stylesheet tag\n xmlFragment.querySelectorAll('qti-stylesheet').forEach(stylesheet => stylesheet.remove());\n}\n","/**\n * Browser based QTI-XML to HTML transformer.\n * Returns an object with methods to load, parse, transform and serialize QTI XML items.\n * @returns An object with methods to load, parse, transform and serialize QTI XML items.\n * @example\n * const qtiTransformer = qtiTransformItem();\n * await qtiTransformer.load('path/to/xml/file.xml');\n * qtiTransformer.path('/assessmentItem/itemBody');\n * const html = qtiTransformer.html();\n * const xml = qtiTransformer.xml();\n * const htmldoc = qtiTransformer.htmldoc();\n * const xmldoc = qtiTransformer.xmldoc();\n *\n * qtiTransformItem().parse(storyXML).html()\n */\n\nimport {\n convertCDATAtoComment,\n extendElementName,\n extendElementsWithClass,\n loadXML,\n parseXML,\n setLocation,\n stripStyleSheets,\n toHTML\n} from './qti-transformers';\n\nexport type transformItemApi = {\n load: (uri: string, cancelPreviousRequest?: boolean) => Promise<transformItemApi>;\n parse: (xmlString: string) => transformItemApi;\n path: (location: string) => transformItemApi;\n fn: (fn: (xmlFragment: XMLDocument) => void) => transformItemApi;\n pciHooks: (uri: string) => transformItemApi;\n extendElementName: (elementName: string, extend: string) => transformItemApi;\n extendElementsWithClass: (param?: string) => transformItemApi;\n customInteraction: (baseRef: string, baseItem: string) => transformItemApi;\n convertCDATAtoComment: () => transformItemApi;\n stripStyleSheets: () => transformItemApi;\n html: () => string;\n xml: () => string;\n htmlDoc: () => DocumentFragment;\n xmlDoc: () => XMLDocument;\n};\n\nexport const qtiTransformItem = () => {\n let xmlFragment: XMLDocument;\n\n const api: transformItemApi = {\n async load(uri: string, cancelPreviousRequest = false): Promise<typeof api> {\n return new Promise<typeof api>(resolve => {\n loadXML(uri, cancelPreviousRequest).then(xml => {\n xmlFragment = xml;\n // set the base path for images and other resources,\n // you probably want to set the base path to the document root else you can use the path method to set it\n api.path(uri.substring(0, uri.lastIndexOf('/')));\n return resolve(api);\n });\n });\n },\n parse(xmlString: string): typeof api {\n xmlFragment = parseXML(xmlString);\n return api;\n },\n path: (location: string): typeof api => {\n setLocation(xmlFragment, location);\n return api;\n },\n fn(fn: (xmlFragment: XMLDocument) => void): typeof api {\n fn(xmlFragment);\n return api;\n },\n pciHooks(uri: string): typeof api {\n const attributes = ['hook', 'module'];\n const documentPath = uri.substring(0, uri.lastIndexOf('/'));\n for (const attribute of attributes) {\n const srcAttributes = xmlFragment.querySelectorAll('[' + attribute + ']');\n srcAttributes.forEach(node => {\n const srcValue = node.getAttribute(attribute)!;\n if (!srcValue.startsWith('data:') && !srcValue.startsWith('http')) {\n // Just paste the relative path of the src location after the documentrootPath\n // old pcis can have a .js, new pci's don't\n node.setAttribute('base-url', uri);\n node.setAttribute(\n 'module',\n documentPath + '/' + encodeURI(srcValue + (srcValue.endsWith('.js') ? '' : '.js'))\n );\n }\n });\n }\n return api;\n },\n extendElementName: (tagName: string, extension: string): typeof api => {\n extendElementName(xmlFragment, tagName, extension);\n return api;\n },\n extendElementsWithClass: (param: string = 'extend'): typeof api => {\n extendElementsWithClass(xmlFragment, param);\n return api;\n },\n customInteraction(baseRef: string, baseItem: string): typeof api {\n const qtiCustomInteraction = xmlFragment.querySelector('qti-custom-interaction');\n const qtiCustomInteractionObject = qtiCustomInteraction.querySelector('object');\n\n qtiCustomInteraction.setAttribute('data-base-ref', baseRef);\n qtiCustomInteraction.setAttribute('data-base-item', baseRef + baseItem);\n qtiCustomInteraction.setAttribute('data', qtiCustomInteractionObject.getAttribute('data'));\n qtiCustomInteraction.setAttribute('width', qtiCustomInteractionObject.getAttribute('width'));\n qtiCustomInteraction.setAttribute('height', qtiCustomInteractionObject.getAttribute('height'));\n\n qtiCustomInteraction.removeChild(qtiCustomInteractionObject);\n return api;\n },\n convertCDATAtoComment(): typeof api {\n convertCDATAtoComment(xmlFragment);\n return api;\n },\n stripStyleSheets(): typeof api {\n stripStyleSheets(xmlFragment);\n return api;\n },\n html() {\n return new XMLSerializer().serializeToString(toHTML(xmlFragment));\n },\n xml(): string {\n return new XMLSerializer().serializeToString(xmlFragment);\n },\n htmlDoc() {\n return toHTML(xmlFragment);\n },\n xmlDoc(): XMLDocument {\n return xmlFragment; // new XMLSerializer().serializeToString(xmlFragment);\n }\n };\n return api;\n};\n","import { LitElement } from 'lit';\nimport { qtiTransformItem } from '../../qti-transformers';\n\n// const setSessionData = <T>(key: string, value?: T): void => sessionStorage.setItem(key, JSON.stringify(value));\n// const getSessionData = <T>(key: string): T | null => (sessionStorage.getItem(key) ? JSON.parse(sessionStorage.getItem(key)!) : null);\n\ntype Constructor<T = {}> = abstract new (...args: any[]) => T;\n\ndeclare class TestLoaderInterface {}\nexport const TestLoaderMixin = <T extends Constructor<LitElement>>(superClass: T) => {\n abstract class TestLoaderClass extends superClass {\n // private testURL = '';\n\n constructor(...args: any[]) {\n super(...args);\n\n // this.addEventListener('qti-load-test-request', (e: CustomEvent /* 1. Request the test */) => {\n // const { testURL } = e.detail;\n // if (!testURL) {\n // console.warn(\n // 'No test found, there should be an attribute test-url with the path to the test on the test-container'\n // );\n // } else {\n // this.testURL = testURL;\n // }\n\n // e.detail.promise = (async () => {\n // e.preventDefault(); /* indicates that the event was catched and handled */\n // const api = await qtiTransformTest().load(`${this.testURL}`); /* 6. load the item */\n // return api.htmlDoc(); /* 3. Return html version of the assessment.xml */\n // })();\n // });\n\n this.addEventListener('qti-assessment-test-connected', () => {\n // this.context = getSessionData(`testcontext-${this.testURL}`); /* 4. Set the context */\n });\n\n this.addEventListener('qti-load-item-request' /* 5. Request the item */, ({ detail }: CustomEvent) => {\n // if (!this.testURL) return;\n detail.promise = (async () => {\n const api = await qtiTransformItem().load(\n `${detail.href}`,\n detail.cancelPreviousRequest\n ); /* 6. load the item */\n return api.htmlDoc(); /* 7. Return HTML version of the item.xml */\n })();\n });\n\n this.addEventListener('qti-interaction-changed', _e => {\n /* 8. Interaction changed */\n // const scoreOutcomeIdentifier = qtiAssessmentItem.variables.find(v => v.identifier === 'SCORE') as OutcomeVariable;\n // if (scoreOutcomeIdentifier.externalScored === null && qtiAssessmentItem.adaptive === 'false') {\n // qtiAssessmentItem.processResponse(); /* 9. Process the response */\n // }\n // setSessionData(`testcontext-${this.testURL}`, this.context); /* 10. Update the context */\n });\n\n this.addEventListener('qti-outcome-changed', () => {\n // setSessionData(`testcontext-${this.testURL}`, this.context); /* 10. Update the context */\n });\n }\n }\n\n return TestLoaderClass as Constructor<TestLoaderInterface> & T;\n};\n","import { QtiAssessmentItemRef } from '../qti-assessment-test';\nimport { TestBase } from '../test-base';\n\ndeclare module '../context/test.context' {\n interface TestContext {\n navPartId?: string | null;\n navSectionId?: string | null;\n navItemId?: string | null;\n navItemLoading?: boolean;\n navTestLoading?: boolean;\n }\n}\n\ntype Constructor<T = {}> = abstract new (...args: any[]) => T;\n\ndeclare class TestNavigationInterface {}\nexport const TestNavigationMixin = <T extends Constructor<TestBase>>(superClass: T) => {\n abstract class TestNavigationClass extends superClass {\n constructor(...args: any[]) {\n super(...args);\n\n // this.addEventListener('qti-request-test-part', (e: CustomEvent) => {\n // this._clearLoadedItems();\n // });\n\n // Load all items of a section\n // this.addEventListener('qti-request-test-section', ({ detail: navSectionId }: CustomEvent<string>) => {\n // this._clearLoadedItems();\n\n // const sectionRefEl = this.testElement.el.querySelector<QtiAssessmentItemRef>(\n // `qti-assessment-section[identifier=\"${navSectionId}\"]`\n // );\n\n // const itemRefEls = this.testElement.el.querySelectorAll(\n // `qti-assessment-section[identifier=\"${navSectionId}\"] > qti-assessment-item-ref`\n // );\n\n // const navPartId = sectionRefEl.closest('qti-test-part').identifier;\n\n // this._testContext = { ...this._testContext, navPartId, navSectionId, navItemId: null };\n\n // const items = Array.from(itemRefEls).map((itemRef: QtiAssessmentItemRef) => {\n // return { identifier: itemRef.identifier, href: itemRef.href, element: itemRef };\n // });\n\n // const promises = items.map((item, index) => {\n // return new Promise((resolve, reject) => {\n // return this._loadItemRequest(item.href, false)\n // .then(doc => (item.element.xmlDoc = doc))\n // .then(() => resolve(item))\n // .catch(error => console.error('Failed to load item:', error));\n // });\n // });\n\n // Promise.all(promises)\n // .then(results => {\n // requestAnimationFrame(() =>\n // this.dispatchEvent(new CustomEvent('qti-test-connected', { detail: results, bubbles: true, composed: true }))\n // );\n // })\n // .catch(error => console.error('One or more promises failed:', error));\n // });\n\n // load an item\n this.addEventListener('qti-request-test-item', ({ detail: navItemId }: CustomEvent<string>) => {\n if (!navItemId) return;\n this._clearLoadedItems();\n\n const itemRefEl = this.testElement.el.querySelector<QtiAssessmentItemRef>(\n `qti-assessment-item-ref[identifier=\"${navItemId}\"]`\n );\n\n const promise = this._loadItemRequest(itemRefEl.href, false);\n\n const navPartId = itemRefEl.closest('qti-test-part').identifier;\n const navSectionId = itemRefEl.closest('qti-assessment-section').identifier;\n this._testContext = { ...this._testContext, navPartId, navSectionId, navItemId, navItemLoading: true };\n\n if (promise) {\n promise\n .then(doc => {\n itemRefEl.xmlDoc = doc;\n requestAnimationFrame(() =>\n this.dispatchEvent(new CustomEvent('qti-item-connected', { bubbles: true, composed: true }))\n );\n this._testContext = { ...this._testContext, navItemLoading: false };\n })\n .catch(error => console.error('Failed to load item:', error));\n } else {\n console.info('Load item request was not handled:', itemRefEl.href);\n }\n });\n\n this.addEventListener('qti-assessment-test-connected', () => {\n let navItemId = this._testContext.navItemId;\n if (!navItemId) {\n const itemRefEl = this.testElement.el.querySelector<QtiAssessmentItemRef>('qti-assessment-item-ref');\n navItemId = itemRefEl.identifier;\n }\n this.dispatchEvent(\n new CustomEvent('qti-request-test-item', { detail: navItemId, bubbles: true, composed: true })\n );\n });\n }\n\n private _clearLoadedItems(): void {\n const itemRefEls = this.testElement.el.querySelectorAll(`qti-assessment-test qti-assessment-item-ref`);\n Array.from(itemRefEls).forEach((itemElement: QtiAssessmentItemRef) => {\n itemElement.xmlDoc = null;\n });\n }\n\n private _loadItemRequest(href: string, cancelPreviousRequest: boolean = true): Promise<DocumentFragment> {\n const event = new CustomEvent('qti-load-item-request', {\n bubbles: true,\n composed: true,\n detail: {\n href: href,\n promise: null,\n cancelPreviousRequest\n }\n });\n this.dispatchEvent(event);\n\n return event.detail.promise;\n }\n }\n\n return TestNavigationClass as Constructor<TestNavigationInterface> & T;\n};\n","import { QtiAssessmentItem } from '../../qti-components';\nimport { TestBase } from '../test-base';\n\nexport type View = 'author' | 'candidate' | 'proctor' | 'scorer' | 'testConstructor' | 'tutor' | '';\n\ndeclare module '../context' {\n interface TestContext {\n view?: View;\n }\n}\n\ntype Constructor<T = {}> = abstract new (...args: any[]) => T;\n\ndeclare class TestViewInterface {}\n\nexport const TestViewMixin = <T extends Constructor<TestBase>>(superClass: T) => {\n abstract class TestViewClass extends superClass {\n constructor(...args: any[]) {\n super(...args);\n this._testContext = { ...this._testContext, view: 'candidate' };\n\n this.addEventListener('on-test-switch-view', (e: CustomEvent<View>) => {\n this._testContext = { ...this._testContext, view: e.detail };\n this._updateElementView();\n });\n this.addEventListener('qti-assessment-test-connected', () => {\n this._updateElementView();\n });\n this.addEventListener('qti-assessment-item-connected', (e: CustomEvent) => {\n this._updateElementView();\n this._setCorrectResponseVisibility(e.detail);\n });\n }\n\n willUpdate(changedProperties: Map<string | number | symbol, unknown>) {\n super.willUpdate(changedProperties);\n if (changedProperties.has('_testContext')) {\n // if (previousContext && previousContext.view !== this._testContext.view) {\n this._updateElementView();\n // }\n }\n }\n\n // Method to handle view updates for elements based on the current context view\n private _updateElementView() {\n if (this.testElement && this.testElement.el) {\n const viewElements = Array.from(this.testElement.el.querySelectorAll('[view]'));\n\n viewElements.forEach((element: HTMLElement) => {\n element.classList.toggle('show', element.getAttribute('view') === this._testContext.view);\n });\n\n const assessmentItem = this.testElement.el.querySelector<QtiAssessmentItem>(\n `qti-assessment-item[identifier=\"${this._testContext.navItemId}\"]`\n );\n if (assessmentItem) {\n assessmentItem.showCorrectResponse(this._testContext.view === 'scorer');\n }\n }\n }\n\n // Event handler for connected QTI assessment items\n private _setCorrectResponseVisibility(assessmentItem: QtiAssessmentItem): void {\n assessmentItem.showCorrectResponse(this._testContext.view === 'scorer');\n }\n }\n\n return TestViewClass as Constructor<TestViewInterface> & T;\n};\n"],"mappings":"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","names":["xml"]}
@@ -1,8 +0,0 @@
1
- import { LitElement } from 'lit';
2
-
3
- type Constructor<T = {}> = abstract new (...args: any[]) => T;
4
- declare class TestLoaderInterface {
5
- }
6
- declare const TestLoaderMixin: <T extends Constructor<LitElement>>(superClass: T) => Constructor<TestLoaderInterface> & T;
7
-
8
- export { TestLoaderMixin };
@@ -1,240 +0,0 @@
1
- // src/lib/qti-transformers/qti-transformers.ts
2
- var xml = String.raw;
3
- var xmlToHTML = xml`<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
4
- <xsl:output method="html" version="5.0" encoding="UTF-8" indent="yes" />
5
- <xsl:template match="@*|node()">
6
- <xsl:copy>
7
- <xsl:apply-templates select="@*|node()"/>
8
- </xsl:copy>
9
- </xsl:template>
10
-
11
- <!-- remove existing namespaces -->
12
- <xsl:template match="*">
13
- <!-- remove element prefix -->
14
- <xsl:element name="{local-name()}">
15
- <!-- process attributes -->
16
- <xsl:for-each select="@*">
17
- <!-- remove attribute prefix -->
18
- <xsl:attribute name="{local-name()}">
19
- <xsl:value-of select="."/>
20
- </xsl:attribute>
21
- </xsl:for-each>
22
- <xsl:apply-templates/>
23
- </xsl:element>
24
- </xsl:template>
25
- </xsl:stylesheet>`;
26
- function extendElementName(xmlFragment, tagName, extension) {
27
- xmlFragment.querySelectorAll(tagName).forEach((element) => {
28
- const newTagName = `${tagName}-${extension}`;
29
- const newElement = createElementWithNewTagName(element, newTagName);
30
- element.replaceWith(newElement);
31
- });
32
- }
33
- function extendElementsWithClass(xmlFragment, classNamePattern) {
34
- xmlFragment.querySelectorAll("*").forEach((element) => {
35
- const classList = element.classList;
36
- if (classList) {
37
- classList.forEach((className) => {
38
- if (className.startsWith(`${classNamePattern}:`)) {
39
- const suffix = className.slice(`${classNamePattern}:`.length);
40
- const newTagName = `${element.nodeName}-${suffix}`;
41
- const newElement = createElementWithNewTagName(element, newTagName);
42
- element.replaceWith(newElement);
43
- }
44
- });
45
- }
46
- });
47
- }
48
- function createElementWithNewTagName(element, newTagName) {
49
- const newElement = document.createElement(newTagName);
50
- for (const attr of element.attributes) {
51
- newElement.setAttribute(attr.name, attr.value);
52
- }
53
- while (element.firstChild) {
54
- newElement.appendChild(element.firstChild);
55
- }
56
- return newElement;
57
- }
58
- var currentRequest = null;
59
- function loadXML(url, cancelPreviousRequest = false) {
60
- if (cancelPreviousRequest && currentRequest !== null) {
61
- currentRequest.abort();
62
- }
63
- return new Promise((resolve, reject) => {
64
- const xhr = new XMLHttpRequest();
65
- currentRequest = xhr;
66
- xhr.open("GET", url, true);
67
- xhr.responseType = "document";
68
- xhr.onload = () => {
69
- if (xhr.status >= 200 && xhr.status < 300) {
70
- resolve(xhr.responseXML);
71
- } else {
72
- reject(xhr.statusText);
73
- }
74
- };
75
- xhr.onerror = () => {
76
- reject(xhr.statusText);
77
- };
78
- xhr.send();
79
- });
80
- }
81
- function parseXML(xmlDocument) {
82
- const parser = new DOMParser();
83
- const xmlFragment = parser.parseFromString(xmlDocument, "text/xml");
84
- return xmlFragment;
85
- }
86
- function toHTML(xmlFragment) {
87
- const processor = new XSLTProcessor();
88
- const xsltDocument = new DOMParser().parseFromString(xmlToHTML, "text/xml");
89
- processor.importStylesheet(xsltDocument);
90
- const itemHTMLFragment = processor.transformToFragment(xmlFragment, document);
91
- return itemHTMLFragment;
92
- }
93
- function setLocation(xmlFragment, location) {
94
- if (!location.endsWith("/")) {
95
- location += "/";
96
- }
97
- xmlFragment.querySelectorAll("[src],[href],[primary-path]").forEach((elWithSrc) => {
98
- let attr = "";
99
- if (elWithSrc.getAttribute("src")) {
100
- attr = "src";
101
- }
102
- if (elWithSrc.getAttribute("href")) {
103
- attr = "href";
104
- }
105
- if (elWithSrc.getAttribute("primary-path")) {
106
- attr = "primary-path";
107
- }
108
- const attrValue = elWithSrc.getAttribute(attr)?.trim();
109
- if (!attrValue.startsWith("data:") && !attrValue.startsWith("http")) {
110
- const newSrcValue = location + encodeURI(attrValue);
111
- elWithSrc.setAttribute(attr, newSrcValue);
112
- }
113
- });
114
- }
115
- function convertCDATAtoComment(xmlFragment) {
116
- const cdataElements = xmlFragment.querySelectorAll('qti-custom-operator[class="js.org"] > qti-base-value');
117
- cdataElements.forEach((element) => {
118
- const commentText = document.createComment(element.textContent);
119
- element.replaceChild(commentText, element.firstChild);
120
- });
121
- }
122
- function stripStyleSheets(xmlFragment) {
123
- xmlFragment.querySelectorAll("qti-stylesheet").forEach((stylesheet) => stylesheet.remove());
124
- }
125
-
126
- // src/lib/qti-transformers/qti-transform-item.ts
127
- var qtiTransformItem = () => {
128
- let xmlFragment;
129
- const api = {
130
- async load(uri, cancelPreviousRequest = false) {
131
- return new Promise((resolve) => {
132
- loadXML(uri, cancelPreviousRequest).then((xml2) => {
133
- xmlFragment = xml2;
134
- api.path(uri.substring(0, uri.lastIndexOf("/")));
135
- return resolve(api);
136
- });
137
- });
138
- },
139
- parse(xmlString) {
140
- xmlFragment = parseXML(xmlString);
141
- return api;
142
- },
143
- path: (location) => {
144
- setLocation(xmlFragment, location);
145
- return api;
146
- },
147
- fn(fn) {
148
- fn(xmlFragment);
149
- return api;
150
- },
151
- pciHooks(uri) {
152
- const attributes = ["hook", "module"];
153
- const documentPath = uri.substring(0, uri.lastIndexOf("/"));
154
- for (const attribute of attributes) {
155
- const srcAttributes = xmlFragment.querySelectorAll("[" + attribute + "]");
156
- srcAttributes.forEach((node) => {
157
- const srcValue = node.getAttribute(attribute);
158
- if (!srcValue.startsWith("data:") && !srcValue.startsWith("http")) {
159
- node.setAttribute("base-url", uri);
160
- node.setAttribute(
161
- "module",
162
- documentPath + "/" + encodeURI(srcValue + (srcValue.endsWith(".js") ? "" : ".js"))
163
- );
164
- }
165
- });
166
- }
167
- return api;
168
- },
169
- extendElementName: (tagName, extension) => {
170
- extendElementName(xmlFragment, tagName, extension);
171
- return api;
172
- },
173
- extendElementsWithClass: (param = "extend") => {
174
- extendElementsWithClass(xmlFragment, param);
175
- return api;
176
- },
177
- customInteraction(baseRef, baseItem) {
178
- const qtiCustomInteraction = xmlFragment.querySelector("qti-custom-interaction");
179
- const qtiCustomInteractionObject = qtiCustomInteraction.querySelector("object");
180
- qtiCustomInteraction.setAttribute("data-base-ref", baseRef);
181
- qtiCustomInteraction.setAttribute("data-base-item", baseRef + baseItem);
182
- qtiCustomInteraction.setAttribute("data", qtiCustomInteractionObject.getAttribute("data"));
183
- qtiCustomInteraction.setAttribute("width", qtiCustomInteractionObject.getAttribute("width"));
184
- qtiCustomInteraction.setAttribute("height", qtiCustomInteractionObject.getAttribute("height"));
185
- qtiCustomInteraction.removeChild(qtiCustomInteractionObject);
186
- return api;
187
- },
188
- convertCDATAtoComment() {
189
- convertCDATAtoComment(xmlFragment);
190
- return api;
191
- },
192
- stripStyleSheets() {
193
- stripStyleSheets(xmlFragment);
194
- return api;
195
- },
196
- html() {
197
- return new XMLSerializer().serializeToString(toHTML(xmlFragment));
198
- },
199
- xml() {
200
- return new XMLSerializer().serializeToString(xmlFragment);
201
- },
202
- htmlDoc() {
203
- return toHTML(xmlFragment);
204
- },
205
- xmlDoc() {
206
- return xmlFragment;
207
- }
208
- };
209
- return api;
210
- };
211
-
212
- // src/lib/qti-test/mixins/test-loader.mixin.ts
213
- var TestLoaderMixin = (superClass) => {
214
- class TestLoaderClass extends superClass {
215
- // private testURL = '';
216
- constructor(...args) {
217
- super(...args);
218
- this.addEventListener("qti-assessment-test-connected", () => {
219
- });
220
- this.addEventListener("qti-load-item-request", ({ detail }) => {
221
- detail.promise = (async () => {
222
- const api = await qtiTransformItem().load(
223
- `${detail.href}`,
224
- detail.cancelPreviousRequest
225
- );
226
- return api.htmlDoc();
227
- })();
228
- });
229
- this.addEventListener("qti-interaction-changed", (_e) => {
230
- });
231
- this.addEventListener("qti-outcome-changed", () => {
232
- });
233
- }
234
- }
235
- return TestLoaderClass;
236
- };
237
- export {
238
- TestLoaderMixin
239
- };
240
- //# sourceMappingURL=test-loader.mixin.js.map