@citolab/qti-components 7.0.6-next.0 → 7.0.6

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 (529) hide show
  1. package/cdn/chunk-4DFVJE2A.js +48 -0
  2. package/cdn/chunk-4I75QSIL.js +8 -0
  3. package/cdn/chunk-5WCOPF7O.js +73 -0
  4. package/cdn/chunk-66PERJA3.js +939 -0
  5. package/cdn/chunk-6WNSQ7U6.js +939 -0
  6. package/cdn/chunk-A536ZOJJ.js +43 -0
  7. package/cdn/chunk-AT2C24P4.js +8 -0
  8. package/cdn/chunk-BLKKKK6C.js +11 -0
  9. package/cdn/chunk-DC2R556M.js +5 -0
  10. package/cdn/chunk-GALSGMIP.js +5 -0
  11. package/cdn/chunk-IXSX4SJX.js +1 -0
  12. package/cdn/chunk-KYOTSBCX.js +1 -0
  13. package/cdn/chunk-L4TDHAKL.js +24 -0
  14. package/cdn/chunk-M6AATWPS.js +59 -0
  15. package/cdn/{chunk-L26FOTPN.js → chunk-MFWSHIPH.js} +1 -1
  16. package/cdn/chunk-QGKK4T2J.js +8 -0
  17. package/cdn/chunk-ROXN2HIJ.js +8 -0
  18. package/cdn/chunk-SQDSHH6N.js +3539 -0
  19. package/cdn/chunk-TJMODUN5.js +8 -0
  20. package/cdn/chunk-Z6SKK5ZX.js +8 -0
  21. package/cdn/chunks/chunk-3V6LA7B3.js +8 -0
  22. package/cdn/chunks/chunk-4ILXLVT5.js +3545 -0
  23. package/cdn/chunks/chunk-4PEUIMDK.js +8 -0
  24. package/cdn/{chunk-DLMFCDQX.js → chunks/chunk-4UJBK6JO.js} +1 -1
  25. package/cdn/chunks/chunk-4WXQYE2P.js +8 -0
  26. package/cdn/chunks/chunk-5BR5CJFH.js +24 -0
  27. package/cdn/chunks/chunk-5FCXUJAG.js +23 -0
  28. package/cdn/chunks/chunk-5GCSZ3CH.js +73 -0
  29. package/cdn/chunks/chunk-5P7CTN7Q.js +11 -0
  30. package/cdn/chunks/chunk-5X76K77R.js +8 -0
  31. package/cdn/chunks/chunk-6MCYE7P5.js +1 -0
  32. package/cdn/chunks/chunk-6S4CDN3T.js +43 -0
  33. package/cdn/chunks/chunk-76VGZJCP.js +934 -0
  34. package/cdn/chunks/chunk-7XYBFL7U.js +934 -0
  35. package/cdn/chunks/chunk-AJJJAZWM.js +1 -0
  36. package/cdn/chunks/chunk-ARHBUT6F.js +5 -0
  37. package/cdn/chunks/chunk-AUHO2E7V.js +934 -0
  38. package/cdn/chunks/chunk-CZ3CSGCE.js +934 -0
  39. package/cdn/chunks/chunk-D3GR6AUG.js +43 -0
  40. package/cdn/chunks/chunk-DZCKF45D.js +5 -0
  41. package/cdn/chunks/chunk-EFU4L43Q.js +8 -0
  42. package/cdn/chunks/chunk-FM5C34DM.js +934 -0
  43. package/cdn/chunks/chunk-FRS2J3OS.js +59 -0
  44. package/cdn/chunks/chunk-GMK2YRB2.js +934 -0
  45. package/cdn/chunks/chunk-H2V2RXUW.js +11 -0
  46. package/cdn/chunks/chunk-HUMOYGEM.js +43 -0
  47. package/cdn/chunks/chunk-IAP2CEE7.js +1 -0
  48. package/cdn/chunks/chunk-IMJOPCFR.js +1 -0
  49. package/cdn/chunks/chunk-IQZ7AOCQ.js +8 -0
  50. package/cdn/chunks/chunk-J3JSSCM6.js +5 -0
  51. package/cdn/chunks/chunk-KHLUVO6Y.js +8 -0
  52. package/cdn/chunks/chunk-KWPDTFYH.js +1 -0
  53. package/cdn/chunks/chunk-L4CUWIE6.js +17 -0
  54. package/cdn/chunks/chunk-LARBLB7K.js +8 -0
  55. package/cdn/chunks/chunk-LNFCEHB3.js +934 -0
  56. package/cdn/chunks/chunk-LZZB4VGC.js +48 -0
  57. package/cdn/chunks/chunk-MJMONWKB.js +3539 -0
  58. package/cdn/chunks/chunk-N5OHGRGG.js +8 -0
  59. package/cdn/chunks/chunk-NDHSIO2G.js +8 -0
  60. package/cdn/chunks/chunk-NRY3WHJD.js +5 -0
  61. package/cdn/chunks/chunk-PKT2SJQD.js +8 -0
  62. package/cdn/chunks/chunk-PPWEIKLT.js +1 -0
  63. package/cdn/chunks/chunk-PT523RSK.js +8 -0
  64. package/cdn/chunks/chunk-QD3NT5PG.js +934 -0
  65. package/cdn/chunks/chunk-QQCGUVEV.js +1 -0
  66. package/cdn/chunks/chunk-QTK4CPHP.js +8 -0
  67. package/cdn/chunks/chunk-QV6I5NVQ.js +8 -0
  68. package/cdn/chunks/chunk-R33OODNX.js +1 -0
  69. package/cdn/chunks/chunk-RIXTWE2H.js +8 -0
  70. package/cdn/chunks/chunk-ROZIP5LG.js +8 -0
  71. package/cdn/chunks/chunk-RPZVSBLM.js +8 -0
  72. package/cdn/chunks/chunk-RXKI3AO4.js +1 -0
  73. package/cdn/chunks/chunk-SXM25YH3.js +934 -0
  74. package/cdn/chunks/chunk-T2KKTMAT.js +934 -0
  75. package/cdn/chunks/chunk-TEYXRLTI.js +8 -0
  76. package/cdn/chunks/chunk-TQBDBMWL.js +5 -0
  77. package/cdn/chunks/chunk-TV3SPOLH.js +8 -0
  78. package/cdn/chunks/chunk-TVDTF6P6.js +934 -0
  79. package/cdn/chunks/chunk-U2TE6TOV.js +934 -0
  80. package/cdn/chunks/chunk-UJP4TGD3.js +1 -0
  81. package/cdn/chunks/chunk-W5Y3ZU2W.js +5 -0
  82. package/cdn/chunks/chunk-WPGJ54IP.js +1 -0
  83. package/cdn/chunks/chunk-X2KBNXRO.js +6 -0
  84. package/cdn/chunks/chunk-YHWMZAZD.js +43 -0
  85. package/cdn/chunks/chunk-YVZ742ID.js +934 -0
  86. package/cdn/chunks/chunk-YWH4TGMA.js +5 -0
  87. package/cdn/chunks/chunk-YXR6KSZI.js +11 -0
  88. package/cdn/exports/interaction.js +1 -0
  89. package/cdn/exports/item.context.js +1 -0
  90. package/cdn/exports/qti-assessment-item.context.js +1 -0
  91. package/cdn/exports/qti-condition-expression.js +1 -0
  92. package/cdn/exports/qti-expression.js +1 -0
  93. package/cdn/index.global.js +56 -107
  94. package/cdn/index.js +1 -1
  95. package/cdn/qti-components/index.global.js +1 -1
  96. package/cdn/qti-components/index.js +1 -1
  97. package/cdn/qti-item/components/index.js +3549 -1
  98. package/cdn/qti-item/components/item-container.js +3549 -1
  99. package/cdn/qti-item/core/index.global.js +149 -0
  100. package/cdn/qti-item/core/index.js +1 -0
  101. package/cdn/qti-item/index.js +3549 -1
  102. package/cdn/qti-item/qti-item.js +1 -1
  103. package/cdn/qti-loader/index.js +1 -1
  104. package/cdn/qti-test/components/index.global.js +1 -36
  105. package/cdn/qti-test/components/index.js +1 -1
  106. package/cdn/qti-test/components/styles.js +1 -1
  107. package/cdn/qti-test/components/test-component.abstract.js +1 -1
  108. package/cdn/qti-test/components/test-container.js +3549 -1
  109. package/cdn/qti-test/components/test-end-attempt.js +1 -0
  110. package/cdn/qti-test/components/test-item-link.js +1 -1
  111. package/cdn/qti-test/components/test-next.js +1 -1
  112. package/cdn/qti-test/components/test-next.spec.css +1 -0
  113. package/cdn/qti-test/components/test-next.spec.global.js +1 -234
  114. package/cdn/qti-test/components/test-next.spec.js +240 -240
  115. package/cdn/qti-test/components/test-paging-buttons-stamp.js +1 -1
  116. package/cdn/qti-test/components/test-prev.js +1 -1
  117. package/cdn/qti-test/components/test-show-correct-response.js +1 -0
  118. package/cdn/qti-test/components/test-view.js +1 -1
  119. package/cdn/qti-test/context/index.js +1 -1
  120. package/cdn/qti-test/context/test.context.js +1 -1
  121. package/cdn/qti-test/core/index.global.js +205 -0
  122. package/cdn/qti-test/core/index.js +1 -0
  123. package/cdn/qti-test/index.js +3598 -1
  124. package/cdn/qti-test/mixins/index.js +23 -1
  125. package/cdn/qti-test/mixins/test-loader.mixin.js +23 -1
  126. package/cdn/qti-test/mixins/test-navigation.mixin.js +1 -1
  127. package/cdn/qti-test/mixins/test-view.mixin.js +1 -1
  128. package/cdn/qti-test/qti-assessment-test/index.js +1 -1
  129. package/cdn/qti-test/qti-assessment-test/qti-assessment-item-ref.js +1 -1
  130. package/cdn/qti-test/qti-assessment-test/qti-assessment-section.js +1 -1
  131. package/cdn/qti-test/qti-assessment-test/qti-assessment-test.js +1 -1
  132. package/cdn/qti-test/qti-assessment-test/qti-test-part.js +1 -1
  133. package/cdn/qti-test/qti-test.js +23 -1
  134. package/cdn/qti-test/test-base.js +1 -1
  135. package/cdn/qti-transformers/index.js +1 -1
  136. package/dist/{chunk-3WLCQQN7.js → chunk-2CHF3TMY.js} +2 -2
  137. package/dist/chunk-2CHF3TMY.js.map +1 -0
  138. package/dist/chunk-2LWLX7WV.js +6307 -0
  139. package/dist/chunk-2LWLX7WV.js.map +1 -0
  140. package/dist/{chunk-VODOQFTJ.js → chunk-3G364JZC.js} +2 -2
  141. package/dist/chunk-6TUE644E.js +569 -0
  142. package/dist/chunk-6TUE644E.js.map +1 -0
  143. package/dist/{chunk-JDHBXMKF.js → chunk-6ZMD232X.js} +2 -2
  144. package/dist/{chunk-L7MBIXEX.js → chunk-AYRSHIHA.js} +4 -4
  145. package/dist/{chunk-GTYLWGDG.js → chunk-BN32D5J2.js} +4 -4
  146. package/dist/{chunk-TXRSYXG3.js → chunk-CJRXRBRQ.js} +4 -4
  147. package/dist/{chunk-ENVUIH2A.js → chunk-GPJ6WTE5.js} +5 -5
  148. package/dist/chunk-GPJ6WTE5.js.map +1 -0
  149. package/dist/chunk-KAUHKHPH.js +50 -0
  150. package/dist/chunk-KAUHKHPH.js.map +1 -0
  151. package/dist/chunk-MAC76UNI.js +1 -0
  152. package/dist/{chunk-XNBWN7N2.js → chunk-QYN5S4EM.js} +20 -7
  153. package/dist/chunk-QYN5S4EM.js.map +1 -0
  154. package/dist/chunk-UJTJIU3C.js +43 -0
  155. package/dist/chunk-UJTJIU3C.js.map +1 -0
  156. package/dist/chunk-XVQZ5JI5.js +50 -0
  157. package/dist/chunk-XVQZ5JI5.js.map +1 -0
  158. package/dist/{chunk-EUCEENQQ.js → chunk-XW3PQRKW.js} +100 -47
  159. package/dist/chunk-XW3PQRKW.js.map +1 -0
  160. package/dist/{chunk-R4HSV7U7.js → chunk-YQ7EXOAK.js} +2 -2
  161. package/dist/chunk-YQ7EXOAK.js.map +1 -0
  162. package/dist/chunks/chunk-2V6LQV2K.js +50 -0
  163. package/dist/chunks/chunk-2V6LQV2K.js.map +1 -0
  164. package/dist/chunks/chunk-3EU75IUF.js +118 -0
  165. package/dist/chunks/chunk-3EU75IUF.js.map +1 -0
  166. package/dist/chunks/chunk-3QQFMVDS.js +118 -0
  167. package/dist/chunks/chunk-3QQFMVDS.js.map +1 -0
  168. package/dist/chunks/chunk-4GNVYCBN.js +627 -0
  169. package/dist/chunks/chunk-4GNVYCBN.js.map +1 -0
  170. package/dist/chunks/chunk-4MQV5IRV.js +59 -0
  171. package/dist/chunks/chunk-4MQV5IRV.js.map +1 -0
  172. package/dist/chunks/chunk-4O5F7WV7.js +30 -0
  173. package/dist/chunks/chunk-4O5F7WV7.js.map +1 -0
  174. package/dist/chunks/chunk-4WVLWWYJ.js +50 -0
  175. package/dist/chunks/chunk-4WVLWWYJ.js.map +1 -0
  176. package/dist/chunks/chunk-5KVGRLYT.js +10 -0
  177. package/dist/chunks/chunk-5KVGRLYT.js.map +1 -0
  178. package/dist/chunks/chunk-5PCD2B62.js +6091 -0
  179. package/dist/chunks/chunk-5PCD2B62.js.map +1 -0
  180. package/dist/chunks/chunk-5RTLOB3Q.js +59 -0
  181. package/dist/chunks/chunk-5RTLOB3Q.js.map +1 -0
  182. package/dist/chunks/chunk-6JXR63MH.js +50 -0
  183. package/dist/chunks/chunk-6JXR63MH.js.map +1 -0
  184. package/dist/chunks/chunk-6PAEJQSQ.js +6058 -0
  185. package/dist/chunks/chunk-6PAEJQSQ.js.map +1 -0
  186. package/dist/chunks/chunk-6QT4LIPL.js +623 -0
  187. package/dist/chunks/chunk-6QT4LIPL.js.map +1 -0
  188. package/dist/chunks/chunk-7QMCKYDR.js +43 -0
  189. package/dist/chunks/chunk-7QMCKYDR.js.map +1 -0
  190. package/dist/chunks/chunk-A24F75DB.js +72 -0
  191. package/dist/chunks/chunk-A24F75DB.js.map +1 -0
  192. package/dist/chunks/chunk-AUWATZ65.js +10 -0
  193. package/dist/chunks/chunk-AUWATZ65.js.map +1 -0
  194. package/dist/chunks/chunk-AXTEKPP5.js +6084 -0
  195. package/dist/chunks/chunk-AXTEKPP5.js.map +1 -0
  196. package/dist/chunks/chunk-B6MJCAOF.js +6063 -0
  197. package/dist/chunks/chunk-B6MJCAOF.js.map +1 -0
  198. package/dist/chunks/chunk-BJ2JLJIJ.js +623 -0
  199. package/dist/chunks/chunk-BJ2JLJIJ.js.map +1 -0
  200. package/dist/chunks/chunk-BPHQLJWE.js +102 -0
  201. package/dist/chunks/chunk-BPHQLJWE.js.map +1 -0
  202. package/dist/chunks/chunk-CD3E4M5Y.js +107 -0
  203. package/dist/chunks/chunk-CD3E4M5Y.js.map +1 -0
  204. package/dist/chunks/chunk-CEXAR7BF.js +52 -0
  205. package/dist/chunks/chunk-CEXAR7BF.js.map +1 -0
  206. package/dist/chunks/chunk-CWYAQA25.js +6067 -0
  207. package/dist/chunks/chunk-CWYAQA25.js.map +1 -0
  208. package/dist/chunks/chunk-D3QX5N57.js +6117 -0
  209. package/dist/chunks/chunk-D3QX5N57.js.map +1 -0
  210. package/dist/{chunk-4CSM2PCC.js → chunks/chunk-D3RGDWKP.js} +1 -1
  211. package/dist/chunks/chunk-D3RGDWKP.js.map +1 -0
  212. package/dist/chunks/chunk-DLUJN2FW.js +22 -0
  213. package/dist/chunks/chunk-DLUJN2FW.js.map +1 -0
  214. package/dist/chunks/chunk-DNHDFXTV.js +59 -0
  215. package/dist/chunks/chunk-DNHDFXTV.js.map +1 -0
  216. package/dist/chunks/chunk-E4TWZ2DL.js +6088 -0
  217. package/dist/chunks/chunk-E4TWZ2DL.js.map +1 -0
  218. package/dist/chunks/chunk-ELDMXTUQ.js +31 -0
  219. package/dist/chunks/chunk-ELDMXTUQ.js.map +1 -0
  220. package/dist/{chunk-IAFQ5ZPI.js → chunks/chunk-FV7HWK54.js} +2 -2
  221. package/dist/chunks/chunk-FV7HWK54.js.map +1 -0
  222. package/dist/chunks/chunk-GQ5P3NWC.js +46 -0
  223. package/dist/chunks/chunk-GQ5P3NWC.js.map +1 -0
  224. package/dist/chunks/chunk-GSWZT6N2.js +50 -0
  225. package/dist/chunks/chunk-GSWZT6N2.js.map +1 -0
  226. package/dist/chunks/chunk-H2JE6IVU.js +15 -0
  227. package/dist/chunks/chunk-HHVRU3AJ.js +107 -0
  228. package/dist/chunks/chunk-HHVRU3AJ.js.map +1 -0
  229. package/dist/chunks/chunk-HOTNM5DT.js +1 -0
  230. package/dist/chunks/chunk-IWG66KQQ.js +107 -0
  231. package/dist/chunks/chunk-IWG66KQQ.js.map +1 -0
  232. package/{cdn/chunk-Y63VPWCG.js → dist/chunks/chunk-J2SHENRN.js} +8 -2
  233. package/dist/chunks/chunk-J2SHENRN.js.map +1 -0
  234. package/dist/chunks/chunk-K6ATVWMP.js +6091 -0
  235. package/dist/chunks/chunk-K6ATVWMP.js.map +1 -0
  236. package/dist/chunks/chunk-KOEILLVS.js +8 -0
  237. package/dist/chunks/chunk-KOEILLVS.js.map +1 -0
  238. package/dist/chunks/chunk-KYAIMBP5.js +78 -0
  239. package/dist/chunks/chunk-KYAIMBP5.js.map +1 -0
  240. package/dist/chunks/chunk-LNISKMIL.js +6063 -0
  241. package/dist/chunks/chunk-LNISKMIL.js.map +1 -0
  242. package/dist/chunks/chunk-LNKJEW5E.js +627 -0
  243. package/dist/chunks/chunk-LNKJEW5E.js.map +1 -0
  244. package/dist/chunks/chunk-LXJA3VP2.js +72 -0
  245. package/dist/chunks/chunk-LXJA3VP2.js.map +1 -0
  246. package/dist/chunks/chunk-MLT7V47R.js +100 -0
  247. package/dist/chunks/chunk-MLT7V47R.js.map +1 -0
  248. package/dist/chunks/chunk-N5FPZNMX.js +43 -0
  249. package/dist/chunks/chunk-N5FPZNMX.js.map +1 -0
  250. package/dist/chunks/chunk-NHA53UTY.js +52 -0
  251. package/dist/chunks/chunk-NHA53UTY.js.map +1 -0
  252. package/dist/chunks/chunk-NZQKGIJP.js +3535 -0
  253. package/dist/chunks/chunk-NZQKGIJP.js.map +1 -0
  254. package/dist/chunks/chunk-O6WEZVEM.js +43 -0
  255. package/dist/chunks/chunk-O6WEZVEM.js.map +1 -0
  256. package/dist/chunks/chunk-OIRWOI3E.js +72 -0
  257. package/dist/chunks/chunk-OIRWOI3E.js.map +1 -0
  258. package/dist/chunks/chunk-PWOY6REC.js +6064 -0
  259. package/dist/chunks/chunk-PWOY6REC.js.map +1 -0
  260. package/dist/chunks/chunk-QJELKGWM.js +6061 -0
  261. package/dist/chunks/chunk-QJELKGWM.js.map +1 -0
  262. package/dist/chunks/chunk-QUB54PXZ.js +50 -0
  263. package/dist/chunks/chunk-QUB54PXZ.js.map +1 -0
  264. package/dist/chunks/chunk-RX3BRYYI.js +59 -0
  265. package/dist/chunks/chunk-RX3BRYYI.js.map +1 -0
  266. package/dist/chunks/chunk-UEEMM6H2.js +6090 -0
  267. package/dist/chunks/chunk-UEEMM6H2.js.map +1 -0
  268. package/dist/chunks/chunk-UFYWCLXF.js +10 -0
  269. package/dist/chunks/chunk-UFYWCLXF.js.map +1 -0
  270. package/dist/chunks/chunk-UN2IFSGC.js +1 -0
  271. package/dist/chunks/chunk-VAPB5TN4.js +46 -0
  272. package/dist/chunks/chunk-VAPB5TN4.js.map +1 -0
  273. package/dist/chunks/chunk-VBF3GCZK.js +50 -0
  274. package/dist/chunks/chunk-VBF3GCZK.js.map +1 -0
  275. package/dist/chunks/chunk-W4272Q5U.js +46 -0
  276. package/dist/chunks/chunk-W4272Q5U.js.map +1 -0
  277. package/dist/chunks/chunk-WWN5AD6V.js +81 -0
  278. package/dist/chunks/chunk-WWN5AD6V.js.map +1 -0
  279. package/dist/chunks/chunk-X226BX2U.js +78 -0
  280. package/dist/chunks/chunk-X226BX2U.js.map +1 -0
  281. package/dist/chunks/chunk-XCHS3RTZ.js +107 -0
  282. package/dist/chunks/chunk-XCHS3RTZ.js.map +1 -0
  283. package/dist/chunks/chunk-XDMSEAYC.js +294 -0
  284. package/dist/chunks/chunk-XDMSEAYC.js.map +1 -0
  285. package/dist/chunks/chunk-XSI6FXGD.js +19 -0
  286. package/dist/chunks/chunk-XSI6FXGD.js.map +1 -0
  287. package/dist/chunks/chunk-YFC3BVN2.js +78 -0
  288. package/dist/chunks/chunk-YFC3BVN2.js.map +1 -0
  289. package/dist/chunks/chunk-YOXF6JPS.js +623 -0
  290. package/dist/chunks/chunk-YOXF6JPS.js.map +1 -0
  291. package/dist/chunks/chunk-YQB6YLNW.js +78 -0
  292. package/dist/chunks/chunk-YQB6YLNW.js.map +1 -0
  293. package/dist/chunks/chunk-Z5THRO6Z.js +46 -0
  294. package/dist/chunks/chunk-Z5THRO6Z.js.map +1 -0
  295. package/dist/chunks/chunk-ZHAJ3CMP.js +6091 -0
  296. package/dist/chunks/chunk-ZHAJ3CMP.js.map +1 -0
  297. package/dist/chunks/chunk-ZPNJ2HP5.js +71 -0
  298. package/dist/chunks/chunk-ZPNJ2HP5.js.map +1 -0
  299. package/dist/chunks/chunk-ZQXZ6PK7.js +649 -0
  300. package/dist/chunks/chunk-ZQXZ6PK7.js.map +1 -0
  301. package/dist/custom-element-eslint-rules.js +337 -0
  302. package/dist/custom-elements.json +27158 -0
  303. package/dist/exports/expression-result.d.ts +19 -0
  304. package/dist/exports/expression-result.js +1 -0
  305. package/dist/exports/interaction.d.ts +23 -0
  306. package/dist/exports/interaction.interface.d.ts +13 -0
  307. package/dist/exports/interaction.interface.js +1 -0
  308. package/dist/exports/interaction.js +8 -0
  309. package/dist/exports/item.context.d.ts +12 -0
  310. package/dist/exports/item.context.js +8 -0
  311. package/dist/exports/qti-assessment-item.context.d.ts +10 -0
  312. package/dist/exports/qti-assessment-item.context.js +8 -0
  313. package/dist/exports/qti-assessment-item.context.js.map +1 -0
  314. package/dist/exports/qti-condition-expression.d.ts +13 -0
  315. package/dist/exports/qti-condition-expression.js +10 -0
  316. package/dist/exports/qti-condition-expression.js.map +1 -0
  317. package/dist/exports/qti-expression.d.ts +21 -0
  318. package/dist/exports/qti-expression.js +9 -0
  319. package/dist/exports/qti-expression.js.map +1 -0
  320. package/dist/exports/variables.d.ts +3 -0
  321. package/dist/exports/variables.js +1 -0
  322. package/dist/exports/variables.js.map +1 -0
  323. package/dist/index.d.ts +14 -8
  324. package/dist/index.js +41 -63
  325. package/dist/item.css +8 -2
  326. package/dist/loader/index.d.ts +20 -0
  327. package/dist/loader/index.js +310 -0
  328. package/dist/loader/index.js.map +1 -0
  329. package/dist/qti-components/index.cjs +6773 -0
  330. package/dist/qti-components/index.cjs.map +1 -0
  331. package/dist/qti-components/index.d.cts +150 -0
  332. package/dist/qti-components/index.d.ts +36 -9
  333. package/dist/qti-components/index.js +10 -17
  334. package/dist/qti-components-jsx.d.ts +360 -639
  335. package/dist/qti-item/components/index.js +3852 -8
  336. package/dist/qti-item/components/index.js.map +1 -1
  337. package/dist/qti-item/components/item-container.js +3852 -7
  338. package/dist/qti-item/components/item-container.js.map +1 -1
  339. package/dist/qti-item/core/index.d.ts +61 -0
  340. package/dist/qti-item/core/index.js +13 -0
  341. package/dist/qti-item/core/index.js.map +1 -0
  342. package/dist/qti-item/index.cjs +89 -0
  343. package/dist/qti-item/index.cjs.map +1 -0
  344. package/dist/qti-item/index.d.cts +24 -0
  345. package/dist/qti-item/index.js +3864 -12
  346. package/dist/qti-item/index.js.map +1 -1
  347. package/dist/qti-item/qti-item.js +22 -4
  348. package/dist/qti-item/qti-item.js.map +1 -1
  349. package/dist/qti-loader/index.cjs +332 -0
  350. package/dist/qti-loader/index.cjs.map +1 -0
  351. package/dist/qti-loader/index.d.cts +20 -0
  352. package/dist/qti-loader/index.d.ts +7 -1
  353. package/dist/qti-loader/index.js +3 -3
  354. package/dist/qti-response-declaration-DAeBp8HH.d.ts +1008 -0
  355. package/dist/qti-response-declaration-Di9CsqiJ.d.ts +1012 -0
  356. package/dist/qti-response-declaration-ucAqd0qK.d.ts +1034 -0
  357. package/dist/qti-simple-choice-3M44uWiN.d.ts +1153 -0
  358. package/dist/qti-simple-choice-B5GnzbqW.d.ts +1080 -0
  359. package/dist/qti-simple-choice-BOLF9wXz.d.ts +1170 -0
  360. package/dist/qti-simple-choice-BeixIkA0.d.ts +1088 -0
  361. package/dist/qti-simple-choice-BiEjEO6s.d.ts +1152 -0
  362. package/dist/qti-simple-choice-Bo_ikO6H.d.ts +1198 -0
  363. package/dist/qti-simple-choice-C0CcrtK5.d.ts +1169 -0
  364. package/dist/qti-simple-choice-Cgh1-Jbr.d.cts +1185 -0
  365. package/dist/qti-simple-choice-Cgh1-Jbr.d.ts +1185 -0
  366. package/dist/qti-simple-choice-Cn5y-Ta8.d.ts +1158 -0
  367. package/dist/qti-simple-choice-D0GiMrqD.d.ts +1168 -0
  368. package/dist/qti-simple-choice-R_LxBTp8.d.ts +1158 -0
  369. package/dist/qti-simple-choice-hAIyfF0z.d.ts +1114 -0
  370. package/dist/qti-simple-choice-o4rje1RA.d.ts +1176 -0
  371. package/dist/qti-simple-choice-v2GxpPNh.d.ts +1181 -0
  372. package/dist/qti-test/components/index.d.ts +10 -4
  373. package/dist/qti-test/components/index.js +19 -18
  374. package/dist/qti-test/components/styles.js +2 -2
  375. package/dist/qti-test/components/test-component.abstract.d.ts +8 -5
  376. package/dist/qti-test/components/test-component.abstract.js +5 -6
  377. package/dist/qti-test/components/test-container.js +3778 -7
  378. package/dist/qti-test/components/test-container.js.map +1 -1
  379. package/dist/qti-test/components/test-end-attempt.d.ts +26 -0
  380. package/dist/qti-test/components/test-end-attempt.js +13 -0
  381. package/dist/qti-test/components/test-end-attempt.js.map +1 -0
  382. package/dist/qti-test/components/test-item-link.d.ts +9 -3
  383. package/dist/qti-test/components/test-item-link.js +7 -8
  384. package/dist/qti-test/components/test-next.d.ts +9 -3
  385. package/dist/qti-test/components/test-next.js +7 -8
  386. package/dist/qti-test/components/test-next.spec.css +2481 -0
  387. package/dist/qti-test/components/test-next.spec.css.map +1 -0
  388. package/dist/qti-test/components/test-next.spec.d.ts +4 -7
  389. package/dist/qti-test/components/test-next.spec.js +13 -32
  390. package/dist/qti-test/components/test-next.spec.js.map +1 -1
  391. package/dist/qti-test/components/test-paging-buttons-stamp.d.ts +8 -3
  392. package/dist/qti-test/components/test-paging-buttons-stamp.js +6 -7
  393. package/dist/qti-test/components/test-prev.d.ts +9 -3
  394. package/dist/qti-test/components/test-prev.js +7 -8
  395. package/dist/qti-test/components/test-show-correct-response.d.ts +26 -0
  396. package/dist/qti-test/components/test-show-correct-response.js +13 -0
  397. package/dist/qti-test/components/test-show-correct-response.js.map +1 -0
  398. package/dist/qti-test/components/test-view.d.ts +9 -3
  399. package/dist/qti-test/components/test-view.js +6 -7
  400. package/dist/qti-test/context/index.js +4 -6
  401. package/dist/qti-test/context/index.js.map +1 -1
  402. package/dist/qti-test/context/test.context.js +4 -5
  403. package/dist/qti-test/context/test.context.js.map +1 -1
  404. package/dist/qti-test/core/index.d.ts +132 -0
  405. package/dist/qti-test/core/index.js +27 -0
  406. package/dist/qti-test/core/index.js.map +1 -0
  407. package/dist/qti-test/index.cjs +4823 -0
  408. package/dist/qti-test/index.cjs.map +1 -0
  409. package/dist/qti-test/index.d.cts +304 -0
  410. package/dist/qti-test/index.js +4729 -55
  411. package/dist/qti-test/index.js.map +1 -1
  412. package/dist/qti-test/mixins/index.js +344 -12
  413. package/dist/qti-test/mixins/index.js.map +1 -1
  414. package/dist/qti-test/mixins/test-loader.mixin.js +236 -5
  415. package/dist/qti-test/mixins/test-loader.mixin.js.map +1 -1
  416. package/dist/qti-test/mixins/test-navigation.mixin.js +60 -4
  417. package/dist/qti-test/mixins/test-navigation.mixin.js.map +1 -1
  418. package/dist/qti-test/mixins/test-view.mixin.js +46 -4
  419. package/dist/qti-test/mixins/test-view.mixin.js.map +1 -1
  420. package/dist/qti-test/qti-assessment-test/index.js +214 -16
  421. package/dist/qti-test/qti-assessment-test/index.js.map +1 -1
  422. package/dist/qti-test/qti-assessment-test/qti-assessment-item-ref.js +81 -6
  423. package/dist/qti-test/qti-assessment-test/qti-assessment-item-ref.js.map +1 -1
  424. package/dist/qti-test/qti-assessment-test/qti-assessment-section.js +69 -6
  425. package/dist/qti-test/qti-assessment-test/qti-assessment-section.js.map +1 -1
  426. package/dist/qti-test/qti-assessment-test/qti-assessment-test.js +50 -6
  427. package/dist/qti-test/qti-assessment-test/qti-assessment-test.js.map +1 -1
  428. package/dist/qti-test/qti-assessment-test/qti-test-part.js +58 -4
  429. package/dist/qti-test/qti-assessment-test/qti-test-part.js.map +1 -1
  430. package/dist/qti-test/qti-test.js +496 -12
  431. package/dist/qti-test/qti-test.js.map +1 -1
  432. package/dist/qti-test/test-base.js +133 -6
  433. package/dist/qti-test/test-base.js.map +1 -1
  434. package/dist/qti-transformers/index.cjs +316 -0
  435. package/dist/qti-transformers/index.cjs.map +1 -0
  436. package/dist/qti-transformers/index.d.cts +75 -0
  437. package/dist/qti-transformers/index.js +2 -2
  438. package/dist/test.context-Bx-606B3.d.ts +99 -0
  439. package/dist/test.context-C2LBA3w4.d.ts +101 -0
  440. package/dist/test.context-CB5V4xJz.d.ts +99 -0
  441. package/dist/test.context-CaENAJNk.d.ts +101 -0
  442. package/dist/test.context-CmsDQ8k2.d.ts +99 -0
  443. package/dist/transformers/index.d.ts +76 -0
  444. package/dist/transformers/index.js +293 -0
  445. package/dist/transformers/index.js.map +1 -0
  446. package/dist/variables-cO3DzqJy.d.ts +33 -0
  447. package/dist/vscode.html-custom-data.json +247 -295
  448. package/package.json +83 -76
  449. package/cdn/chunk-3DWLPGTE.js +0 -1
  450. package/cdn/chunk-7BKWTY4S.js +0 -1
  451. package/cdn/chunk-7CQ4ETXL.js +0 -1
  452. package/cdn/chunk-7ENNZNJ4.js +0 -1
  453. package/cdn/chunk-7LGM2TQA.js +0 -1
  454. package/cdn/chunk-DPR6SGCZ.js +0 -1
  455. package/cdn/chunk-EQGXFSYL.js +0 -8
  456. package/cdn/chunk-F5VW77RE.js +0 -1
  457. package/cdn/chunk-FNVXN5CO.js +0 -1
  458. package/cdn/chunk-GBB54IPA.js +0 -8
  459. package/cdn/chunk-IV7UP34N.js +0 -5
  460. package/cdn/chunk-JNT54FPI.js +0 -1
  461. package/cdn/chunk-JS4S7ZI7.js +0 -1
  462. package/cdn/chunk-POT65ZY7.js +0 -1
  463. package/cdn/chunk-Q7PVZA43.js +0 -5
  464. package/cdn/chunk-QJPHXAUE.js +0 -1
  465. package/cdn/chunk-QP57JHGY.js +0 -11
  466. package/cdn/chunk-RB6CONZW.js +0 -3
  467. package/cdn/chunk-RSRX5JYB.js +0 -1
  468. package/cdn/chunk-TG6AE3DB.js +0 -0
  469. package/cdn/chunk-V6YPUNZC.js +0 -0
  470. package/cdn/chunk-W7X6GNEX.js +0 -902
  471. package/cdn/chunk-ZEX7TYC7.js +0 -8
  472. package/dist/chunk-37X6KZO3.js +0 -1
  473. package/dist/chunk-3WLCQQN7.js.map +0 -1
  474. package/dist/chunk-3YVIK6LO.js +0 -1
  475. package/dist/chunk-4CSM2PCC.js.map +0 -1
  476. package/dist/chunk-7A6KCSAU.js +0 -44
  477. package/dist/chunk-7A6KCSAU.js.map +0 -1
  478. package/dist/chunk-ENVUIH2A.js.map +0 -1
  479. package/dist/chunk-ENZVY5X6.js +0 -20
  480. package/dist/chunk-ENZVY5X6.js.map +0 -1
  481. package/dist/chunk-EUCEENQQ.js.map +0 -1
  482. package/dist/chunk-FNFNAV3G.js +0 -56
  483. package/dist/chunk-FNFNAV3G.js.map +0 -1
  484. package/dist/chunk-GSFDTSLL.js +0 -1
  485. package/dist/chunk-IAFQ5ZPI.js.map +0 -1
  486. package/dist/chunk-LYFMLDNV.js +0 -1
  487. package/dist/chunk-NNPTSZGC.js +0 -1
  488. package/dist/chunk-NQM35JUI.js +0 -1
  489. package/dist/chunk-ODUHPWTX.js +0 -65
  490. package/dist/chunk-ODUHPWTX.js.map +0 -1
  491. package/dist/chunk-OGHHCP23.js +0 -36
  492. package/dist/chunk-OGHHCP23.js.map +0 -1
  493. package/dist/chunk-OQZW2B47.js +0 -75
  494. package/dist/chunk-OQZW2B47.js.map +0 -1
  495. package/dist/chunk-OXDOQVRL.js +0 -63
  496. package/dist/chunk-OXDOQVRL.js.map +0 -1
  497. package/dist/chunk-PBSMP6VF.js +0 -128
  498. package/dist/chunk-PBSMP6VF.js.map +0 -1
  499. package/dist/chunk-Q7OPFS4A.js +0 -1
  500. package/dist/chunk-R4HSV7U7.js.map +0 -1
  501. package/dist/chunk-U3RLYKL5.js +0 -51
  502. package/dist/chunk-U3RLYKL5.js.map +0 -1
  503. package/dist/chunk-VW7VIQBE.js +0 -34
  504. package/dist/chunk-VW7VIQBE.js.map +0 -1
  505. package/dist/chunk-X4ZBUCOD.js +0 -94
  506. package/dist/chunk-X4ZBUCOD.js.map +0 -1
  507. package/dist/chunk-XFHB6KQW.js +0 -1
  508. package/dist/chunk-XNBWN7N2.js.map +0 -1
  509. /package/cdn/{chunk-CYJMNT76.js → chunk-22HAPLRD.js} +0 -0
  510. /package/cdn/{chunk-GB7DLBFM.js → chunks/chunk-3GO57DNP.js} +0 -0
  511. /package/cdn/{chunk-H4A34YRT.js → chunks/chunk-6PW2L463.js} +0 -0
  512. /package/cdn/{chunk-GPDDPZFH.js → chunks/chunk-EHK76KRT.js} +0 -0
  513. /package/cdn/{chunk-25BMUTLC.js → chunks/chunk-XUJ7TXHW.js} +0 -0
  514. /package/cdn/{chunk-ITXNNGVQ.js → exports/expression-result.js} +0 -0
  515. /package/cdn/{chunk-IZZ36JQV.js → exports/interaction.interface.js} +0 -0
  516. /package/cdn/{chunk-LA7TBIPQ.js → exports/variables.js} +0 -0
  517. /package/dist/{chunk-VODOQFTJ.js.map → chunk-3G364JZC.js.map} +0 -0
  518. /package/dist/{chunk-JDHBXMKF.js.map → chunk-6ZMD232X.js.map} +0 -0
  519. /package/dist/{chunk-L7MBIXEX.js.map → chunk-AYRSHIHA.js.map} +0 -0
  520. /package/dist/{chunk-GTYLWGDG.js.map → chunk-BN32D5J2.js.map} +0 -0
  521. /package/dist/{chunk-TXRSYXG3.js.map → chunk-CJRXRBRQ.js.map} +0 -0
  522. /package/dist/{chunk-37X6KZO3.js.map → chunk-MAC76UNI.js.map} +0 -0
  523. /package/dist/{chunk-3YVIK6LO.js.map → chunks/chunk-H2JE6IVU.js.map} +0 -0
  524. /package/dist/{chunk-GSFDTSLL.js.map → chunks/chunk-HOTNM5DT.js.map} +0 -0
  525. /package/dist/{chunk-LYFMLDNV.js.map → chunks/chunk-UN2IFSGC.js.map} +0 -0
  526. /package/dist/{chunk-NNPTSZGC.js.map → exports/expression-result.js.map} +0 -0
  527. /package/dist/{chunk-NQM35JUI.js.map → exports/interaction.interface.js.map} +0 -0
  528. /package/dist/{chunk-Q7OPFS4A.js.map → exports/interaction.js.map} +0 -0
  529. /package/dist/{chunk-XFHB6KQW.js.map → exports/item.context.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
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"],"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"],"mappings":"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","names":["xml"]}
@@ -1,7 +1,63 @@
1
- import {
2
- TestNavigationMixin
3
- } from "../../chunk-ODUHPWTX.js";
4
- import "../../chunk-44VE5POH.js";
1
+ // src/lib/qti-test/mixins/test-navigation.mixin.ts
2
+ var TestNavigationMixin = (superClass) => {
3
+ class TestNavigationClass extends superClass {
4
+ constructor(...args) {
5
+ super(...args);
6
+ this.addEventListener("qti-request-test-item", ({ detail: navItemId }) => {
7
+ if (!navItemId) return;
8
+ this._clearLoadedItems();
9
+ const itemRefEl = this.testElement.el.querySelector(
10
+ `qti-assessment-item-ref[identifier="${navItemId}"]`
11
+ );
12
+ const promise = this._loadItemRequest(itemRefEl.href, false);
13
+ const navPartId = itemRefEl.closest("qti-test-part").identifier;
14
+ const navSectionId = itemRefEl.closest("qti-assessment-section").identifier;
15
+ this._testContext = { ...this._testContext, navPartId, navSectionId, navItemId, navItemLoading: true };
16
+ if (promise) {
17
+ promise.then((doc) => {
18
+ itemRefEl.xmlDoc = doc;
19
+ requestAnimationFrame(
20
+ () => this.dispatchEvent(new CustomEvent("qti-item-connected", { bubbles: true, composed: true }))
21
+ );
22
+ this._testContext = { ...this._testContext, navItemLoading: false };
23
+ }).catch((error) => console.error("Failed to load item:", error));
24
+ } else {
25
+ console.info("Load item request was not handled:", itemRefEl.href);
26
+ }
27
+ });
28
+ this.addEventListener("qti-assessment-test-connected", () => {
29
+ let navItemId = this._testContext.navItemId;
30
+ if (!navItemId) {
31
+ const itemRefEl = this.testElement.el.querySelector("qti-assessment-item-ref");
32
+ navItemId = itemRefEl.identifier;
33
+ }
34
+ this.dispatchEvent(
35
+ new CustomEvent("qti-request-test-item", { detail: navItemId, bubbles: true, composed: true })
36
+ );
37
+ });
38
+ }
39
+ _clearLoadedItems() {
40
+ const itemRefEls = this.testElement.el.querySelectorAll(`qti-assessment-test qti-assessment-item-ref`);
41
+ Array.from(itemRefEls).forEach((itemElement) => {
42
+ itemElement.xmlDoc = null;
43
+ });
44
+ }
45
+ _loadItemRequest(href, cancelPreviousRequest = true) {
46
+ const event = new CustomEvent("qti-load-item-request", {
47
+ bubbles: true,
48
+ composed: true,
49
+ detail: {
50
+ href,
51
+ promise: null,
52
+ cancelPreviousRequest
53
+ }
54
+ });
55
+ this.dispatchEvent(event);
56
+ return event.detail.promise;
57
+ }
58
+ }
59
+ return TestNavigationClass;
60
+ };
5
61
  export {
6
62
  TestNavigationMixin
7
63
  };
@@ -1 +1 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
1
+ {"version":3,"sources":["../../../src/lib/qti-test/mixins/test-navigation.mixin.ts"],"sourcesContent":["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"],"mappings":";AAgBO,IAAM,sBAAsB,CAAkC,eAAkB;AAAA,EACrF,MAAe,4BAA4B,WAAW;AAAA,IACpD,eAAe,MAAa;AAC1B,YAAM,GAAG,IAAI;AA6Cb,WAAK,iBAAiB,yBAAyB,CAAC,EAAE,QAAQ,UAAU,MAA2B;AAC7F,YAAI,CAAC,UAAW;AAChB,aAAK,kBAAkB;AAEvB,cAAM,YAAY,KAAK,YAAY,GAAG;AAAA,UACpC,uCAAuC,SAAS;AAAA,QAClD;AAEA,cAAM,UAAU,KAAK,iBAAiB,UAAU,MAAM,KAAK;AAE3D,cAAM,YAAY,UAAU,QAAQ,eAAe,EAAE;AACrD,cAAM,eAAe,UAAU,QAAQ,wBAAwB,EAAE;AACjE,aAAK,eAAe,EAAE,GAAG,KAAK,cAAc,WAAW,cAAc,WAAW,gBAAgB,KAAK;AAErG,YAAI,SAAS;AACX,kBACG,KAAK,SAAO;AACX,sBAAU,SAAS;AACnB;AAAA,cAAsB,MACpB,KAAK,cAAc,IAAI,YAAY,sBAAsB,EAAE,SAAS,MAAM,UAAU,KAAK,CAAC,CAAC;AAAA,YAC7F;AACA,iBAAK,eAAe,EAAE,GAAG,KAAK,cAAc,gBAAgB,MAAM;AAAA,UACpE,CAAC,EACA,MAAM,WAAS,QAAQ,MAAM,wBAAwB,KAAK,CAAC;AAAA,QAChE,OAAO;AACL,kBAAQ,KAAK,sCAAsC,UAAU,IAAI;AAAA,QACnE;AAAA,MACF,CAAC;AAED,WAAK,iBAAiB,iCAAiC,MAAM;AAC3D,YAAI,YAAY,KAAK,aAAa;AAClC,YAAI,CAAC,WAAW;AACd,gBAAM,YAAY,KAAK,YAAY,GAAG,cAAoC,yBAAyB;AACnG,sBAAY,UAAU;AAAA,QACxB;AACA,aAAK;AAAA,UACH,IAAI,YAAY,yBAAyB,EAAE,QAAQ,WAAW,SAAS,MAAM,UAAU,KAAK,CAAC;AAAA,QAC/F;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IAEQ,oBAA0B;AAChC,YAAM,aAAa,KAAK,YAAY,GAAG,iBAAiB,6CAA6C;AACrG,YAAM,KAAK,UAAU,EAAE,QAAQ,CAAC,gBAAsC;AACpE,oBAAY,SAAS;AAAA,MACvB,CAAC;AAAA,IACH;AAAA,IAEQ,iBAAiB,MAAc,wBAAiC,MAAiC;AACvG,YAAM,QAAQ,IAAI,YAAY,yBAAyB;AAAA,QACrD,SAAS;AAAA,QACT,UAAU;AAAA,QACV,QAAQ;AAAA,UACN;AAAA,UACA,SAAS;AAAA,UACT;AAAA,QACF;AAAA,MACF,CAAC;AACD,WAAK,cAAc,KAAK;AAExB,aAAO,MAAM,OAAO;AAAA,IACtB;AAAA,EACF;AAEA,SAAO;AACT;","names":[]}
@@ -1,7 +1,49 @@
1
- import {
2
- TestViewMixin
3
- } from "../../chunk-U3RLYKL5.js";
4
- import "../../chunk-44VE5POH.js";
1
+ // src/lib/qti-test/mixins/test-view.mixin.ts
2
+ var TestViewMixin = (superClass) => {
3
+ class TestViewClass extends superClass {
4
+ constructor(...args) {
5
+ super(...args);
6
+ this._testContext = { ...this._testContext, view: "candidate" };
7
+ this.addEventListener("on-test-switch-view", (e) => {
8
+ this._testContext = { ...this._testContext, view: e.detail };
9
+ this._updateElementView();
10
+ });
11
+ this.addEventListener("qti-assessment-test-connected", () => {
12
+ this._updateElementView();
13
+ });
14
+ this.addEventListener("qti-assessment-item-connected", (e) => {
15
+ this._updateElementView();
16
+ this._setCorrectResponseVisibility(e.detail);
17
+ });
18
+ }
19
+ willUpdate(changedProperties) {
20
+ super.willUpdate(changedProperties);
21
+ if (changedProperties.has("_testContext")) {
22
+ this._updateElementView();
23
+ }
24
+ }
25
+ // Method to handle view updates for elements based on the current context view
26
+ _updateElementView() {
27
+ if (this.testElement && this.testElement.el) {
28
+ const viewElements = Array.from(this.testElement.el.querySelectorAll("[view]"));
29
+ viewElements.forEach((element) => {
30
+ element.classList.toggle("show", element.getAttribute("view") === this._testContext.view);
31
+ });
32
+ const assessmentItem = this.testElement.el.querySelector(
33
+ `qti-assessment-item[identifier="${this._testContext.navItemId}"]`
34
+ );
35
+ if (assessmentItem) {
36
+ assessmentItem.showCorrectResponse(this._testContext.view === "scorer");
37
+ }
38
+ }
39
+ }
40
+ // Event handler for connected QTI assessment items
41
+ _setCorrectResponseVisibility(assessmentItem) {
42
+ assessmentItem.showCorrectResponse(this._testContext.view === "scorer");
43
+ }
44
+ }
45
+ return TestViewClass;
46
+ };
5
47
  export {
6
48
  TestViewMixin
7
49
  };
@@ -1 +1 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
1
+ {"version":3,"sources":["../../../src/lib/qti-test/mixins/test-view.mixin.ts"],"sourcesContent":["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":";AAeO,IAAM,gBAAgB,CAAkC,eAAkB;AAAA,EAC/E,MAAe,sBAAsB,WAAW;AAAA,IAC9C,eAAe,MAAa;AAC1B,YAAM,GAAG,IAAI;AACb,WAAK,eAAe,EAAE,GAAG,KAAK,cAAc,MAAM,YAAY;AAE9D,WAAK,iBAAiB,uBAAuB,CAAC,MAAyB;AACrE,aAAK,eAAe,EAAE,GAAG,KAAK,cAAc,MAAM,EAAE,OAAO;AAC3D,aAAK,mBAAmB;AAAA,MAC1B,CAAC;AACD,WAAK,iBAAiB,iCAAiC,MAAM;AAC3D,aAAK,mBAAmB;AAAA,MAC1B,CAAC;AACD,WAAK,iBAAiB,iCAAiC,CAAC,MAAmB;AACzE,aAAK,mBAAmB;AACxB,aAAK,8BAA8B,EAAE,MAAM;AAAA,MAC7C,CAAC;AAAA,IACH;AAAA,IAEA,WAAW,mBAA2D;AACpE,YAAM,WAAW,iBAAiB;AAClC,UAAI,kBAAkB,IAAI,cAAc,GAAG;AAEzC,aAAK,mBAAmB;AAAA,MAE1B;AAAA,IACF;AAAA;AAAA,IAGQ,qBAAqB;AAC3B,UAAI,KAAK,eAAe,KAAK,YAAY,IAAI;AAC3C,cAAM,eAAe,MAAM,KAAK,KAAK,YAAY,GAAG,iBAAiB,QAAQ,CAAC;AAE9E,qBAAa,QAAQ,CAAC,YAAyB;AAC7C,kBAAQ,UAAU,OAAO,QAAQ,QAAQ,aAAa,MAAM,MAAM,KAAK,aAAa,IAAI;AAAA,QAC1F,CAAC;AAED,cAAM,iBAAiB,KAAK,YAAY,GAAG;AAAA,UACzC,mCAAmC,KAAK,aAAa,SAAS;AAAA,QAChE;AACA,YAAI,gBAAgB;AAClB,yBAAe,oBAAoB,KAAK,aAAa,SAAS,QAAQ;AAAA,QACxE;AAAA,MACF;AAAA,IACF;AAAA;AAAA,IAGQ,8BAA8B,gBAAyC;AAC7E,qBAAe,oBAAoB,KAAK,aAAa,SAAS,QAAQ;AAAA,IACxE;AAAA,EACF;AAEA,SAAO;AACT;","names":[]}
@@ -1,19 +1,217 @@
1
- import "../../chunk-NQM35JUI.js";
2
- import {
3
- QtiAssessmentItemRef
4
- } from "../../chunk-OQZW2B47.js";
5
- import {
6
- QtiAssessmentSection
7
- } from "../../chunk-OXDOQVRL.js";
8
- import {
9
- QtiAssessmentTest
10
- } from "../../chunk-7A6KCSAU.js";
11
- import {
12
- QtiTestPart
13
- } from "../../chunk-FNFNAV3G.js";
14
- import "../../chunk-XFHB6KQW.js";
15
- import "../../chunk-R4HSV7U7.js";
16
- import "../../chunk-44VE5POH.js";
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __decorateClass = (decorators, target, key, kind) => {
4
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
5
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
6
+ if (decorator = decorators[i])
7
+ result = (kind ? decorator(target, key, result) : decorator(result)) || result;
8
+ if (kind && result) __defProp(target, key, result);
9
+ return result;
10
+ };
11
+
12
+ // src/lib/qti-test/qti-assessment-test/qti-assessment-item-ref.ts
13
+ import { consume } from "@lit/context";
14
+ import { html, LitElement } from "lit";
15
+ import { property } from "lit/decorators.js";
16
+
17
+ // src/lib/qti-test/context/test.context.ts
18
+ import { createContext } from "@lit/context";
19
+ var testContext = createContext(Symbol("test"));
20
+ var testElement = createContext(Symbol("testElement"));
21
+
22
+ // src/lib/qti-test/qti-assessment-test/qti-assessment-item-ref.ts
23
+ var stringToBooleanConverter = {
24
+ fromAttribute(value) {
25
+ return value === "true";
26
+ },
27
+ toAttribute(value) {
28
+ return value ? "true" : "false";
29
+ }
30
+ };
31
+ var QtiAssessmentItemRef = class extends LitElement {
32
+ constructor() {
33
+ super(...arguments);
34
+ this.weigths = /* @__PURE__ */ new Map();
35
+ }
36
+ // the XMLDocument
37
+ createRenderRoot() {
38
+ return this;
39
+ }
40
+ get assessmentItem() {
41
+ return this.renderRoot?.querySelector("qti-assessment-item");
42
+ }
43
+ async connectedCallback() {
44
+ super.connectedCallback();
45
+ await this.updateComplete;
46
+ this.dispatchEvent(
47
+ new CustomEvent("qti-assessment-item-ref-connected", {
48
+ bubbles: true,
49
+ composed: true,
50
+ detail: { identifier: this.identifier, href: this.href, category: this.category }
51
+ })
52
+ );
53
+ }
54
+ render() {
55
+ return html`${this.xmlDoc}`;
56
+ }
57
+ };
58
+ __decorateClass([
59
+ property({ type: String })
60
+ ], QtiAssessmentItemRef.prototype, "category", 2);
61
+ __decorateClass([
62
+ property({ type: String })
63
+ ], QtiAssessmentItemRef.prototype, "identifier", 2);
64
+ __decorateClass([
65
+ property({ type: Boolean, converter: stringToBooleanConverter })
66
+ ], QtiAssessmentItemRef.prototype, "required", 2);
67
+ __decorateClass([
68
+ property({ type: Boolean, converter: stringToBooleanConverter })
69
+ ], QtiAssessmentItemRef.prototype, "fixed", 2);
70
+ __decorateClass([
71
+ property({ type: String })
72
+ ], QtiAssessmentItemRef.prototype, "href", 2);
73
+ __decorateClass([
74
+ consume({ context: testContext, subscribe: true })
75
+ ], QtiAssessmentItemRef.prototype, "_testContext", 2);
76
+ __decorateClass([
77
+ property({ type: Object, attribute: false })
78
+ ], QtiAssessmentItemRef.prototype, "xmlDoc", 2);
79
+ if (!customElements.get("qti-assessment-item-ref")) {
80
+ customElements.define("qti-assessment-item-ref", QtiAssessmentItemRef);
81
+ }
82
+
83
+ // src/lib/qti-test/qti-assessment-test/qti-assessment-section.ts
84
+ import { consume as consume2 } from "@lit/context";
85
+ import { html as html2, LitElement as LitElement2 } from "lit";
86
+ import { property as property2 } from "lit/decorators.js";
87
+ var stringToBooleanConverter2 = {
88
+ fromAttribute(value) {
89
+ return value === "true";
90
+ },
91
+ toAttribute(value) {
92
+ return value ? "true" : "false";
93
+ }
94
+ };
95
+ var QtiAssessmentSection = class extends LitElement2 {
96
+ async connectedCallback() {
97
+ super.connectedCallback();
98
+ await this.updateComplete;
99
+ this.dispatchEvent(
100
+ new Event("qti-assessment-section-connected", {
101
+ bubbles: true,
102
+ composed: true
103
+ })
104
+ );
105
+ }
106
+ render() {
107
+ return html2`<slot name="qti-rubric-block"></slot><slot></slot>`;
108
+ }
109
+ };
110
+ __decorateClass([
111
+ property2({ type: String })
112
+ ], QtiAssessmentSection.prototype, "identifier", 2);
113
+ __decorateClass([
114
+ property2({ type: String })
115
+ ], QtiAssessmentSection.prototype, "required", 2);
116
+ __decorateClass([
117
+ property2({ type: Boolean, converter: stringToBooleanConverter2 })
118
+ ], QtiAssessmentSection.prototype, "fixed", 2);
119
+ __decorateClass([
120
+ property2({ type: String })
121
+ ], QtiAssessmentSection.prototype, "title", 2);
122
+ __decorateClass([
123
+ property2({ type: Boolean, converter: stringToBooleanConverter2 })
124
+ ], QtiAssessmentSection.prototype, "visible", 2);
125
+ __decorateClass([
126
+ property2({ type: Boolean, converter: stringToBooleanConverter2, attribute: "keep-together" })
127
+ ], QtiAssessmentSection.prototype, "keepTogether", 2);
128
+ __decorateClass([
129
+ consume2({ context: testContext, subscribe: true })
130
+ ], QtiAssessmentSection.prototype, "_testContext", 2);
131
+ if (!customElements.get("qti-assessment-section")) {
132
+ customElements.define("qti-assessment-section", QtiAssessmentSection);
133
+ }
134
+
135
+ // src/lib/qti-test/qti-assessment-test/qti-assessment-test.ts
136
+ import { consume as consume3 } from "@lit/context";
137
+ import { html as html3, LitElement as LitElement3 } from "lit";
138
+ import { customElement, property as property3 } from "lit/decorators.js";
139
+ var QtiAssessmentTest = class extends LitElement3 {
140
+ async connectedCallback() {
141
+ super.connectedCallback();
142
+ await this.updateComplete;
143
+ this.dispatchEvent(
144
+ new CustomEvent("qti-assessment-test-connected", {
145
+ detail: this,
146
+ bubbles: true,
147
+ composed: true
148
+ })
149
+ );
150
+ }
151
+ render() {
152
+ return html3` <slot></slot>`;
153
+ }
154
+ };
155
+ __decorateClass([
156
+ property3({ type: String })
157
+ ], QtiAssessmentTest.prototype, "identifier", 2);
158
+ __decorateClass([
159
+ property3({ type: String })
160
+ ], QtiAssessmentTest.prototype, "title", 2);
161
+ __decorateClass([
162
+ consume3({ context: testContext, subscribe: true })
163
+ ], QtiAssessmentTest.prototype, "_testContext", 2);
164
+ QtiAssessmentTest = __decorateClass([
165
+ customElement("qti-assessment-test")
166
+ ], QtiAssessmentTest);
167
+
168
+ // src/lib/qti-test/qti-assessment-test/qti-test-part.ts
169
+ import { html as html4, LitElement as LitElement4 } from "lit";
170
+ import { customElement as customElement2, property as property4 } from "lit/decorators.js";
171
+ var QtiTestPart = class extends LitElement4 {
172
+ constructor() {
173
+ super(...arguments);
174
+ this.identifier = "";
175
+ this.title = "";
176
+ this.class = "";
177
+ this.NavigationMode = "nonlinear";
178
+ this.submissionMode = "individual";
179
+ }
180
+ async connectedCallback() {
181
+ super.connectedCallback();
182
+ await this.updateComplete;
183
+ this.dispatchEvent(
184
+ new Event("qti-test-part-connected", {
185
+ bubbles: true,
186
+ composed: true
187
+ })
188
+ );
189
+ }
190
+ render() {
191
+ return html4` <slot></slot>`;
192
+ }
193
+ };
194
+ __decorateClass([
195
+ property4({ type: String })
196
+ ], QtiTestPart.prototype, "identifier", 2);
197
+ __decorateClass([
198
+ property4({ type: String })
199
+ ], QtiTestPart.prototype, "title", 2);
200
+ __decorateClass([
201
+ property4({ type: String })
202
+ ], QtiTestPart.prototype, "class", 2);
203
+ __decorateClass([
204
+ property4({ type: String, attribute: "navigation-mode" })
205
+ ], QtiTestPart.prototype, "NavigationMode", 2);
206
+ __decorateClass([
207
+ property4({ type: String, attribute: "submission-mode" })
208
+ ], QtiTestPart.prototype, "submissionMode", 2);
209
+ QtiTestPart = __decorateClass([
210
+ customElement2("qti-test-part")
211
+ ], QtiTestPart);
212
+ if (!customElements.get("qti-test-part")) {
213
+ customElements.define("qti-test-part", QtiTestPart);
214
+ }
17
215
  export {
18
216
  QtiAssessmentItemRef,
19
217
  QtiAssessmentSection,
@@ -1 +1 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
1
+ {"version":3,"sources":["../../../src/lib/qti-test/qti-assessment-test/qti-assessment-item-ref.ts","../../../src/lib/qti-test/context/test.context.ts","../../../src/lib/qti-test/qti-assessment-test/qti-assessment-section.ts","../../../src/lib/qti-test/qti-assessment-test/qti-assessment-test.ts","../../../src/lib/qti-test/qti-assessment-test/qti-test-part.ts"],"sourcesContent":["import { consume } from '@lit/context';\nimport { html, LitElement } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { testContext, TestContext } from '../context';\nimport { QtiAssessmentItem } from '../../qti-components';\n\n// Converter function to interpret \"true\" and \"false\" as booleans\nconst stringToBooleanConverter = {\n fromAttribute(value: string): boolean {\n return value === 'true';\n },\n toAttribute(value: boolean): string {\n return value ? 'true' : 'false';\n }\n};\n\n// @customElement('qti-assessment-item-ref')\nexport class QtiAssessmentItemRef extends LitElement {\n @property({ type: String }) category?: string;\n @property({ type: String }) identifier?: string;\n @property({ type: Boolean, converter: stringToBooleanConverter }) required?: boolean;\n @property({ type: Boolean, converter: stringToBooleanConverter }) fixed?: boolean;\n @property({ type: String }) href?: string;\n\n @consume({ context: testContext, subscribe: true })\n public _testContext?: TestContext;\n\n weigths: Map<string, number> = new Map();\n\n @property({ type: Object, attribute: false })\n xmlDoc!: DocumentFragment; // the XMLDocument\n\n protected createRenderRoot(): HTMLElement | DocumentFragment {\n return this;\n }\n\n get assessmentItem(): QtiAssessmentItem | null {\n return this.renderRoot?.querySelector('qti-assessment-item');\n }\n\n async connectedCallback(): Promise<void> {\n // debugger;\n super.connectedCallback();\n await this.updateComplete;\n this.dispatchEvent(\n new CustomEvent('qti-assessment-item-ref-connected', {\n bubbles: true,\n composed: true,\n detail: { identifier: this.identifier, href: this.href, category: this.category }\n })\n );\n }\n\n render() {\n return html`${this.xmlDoc}`;\n }\n}\n\nif (!customElements.get('qti-assessment-item-ref')) {\n customElements.define('qti-assessment-item-ref', QtiAssessmentItemRef);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'qti-assessment-item-ref': QtiAssessmentItemRef;\n }\n}\n","import { createContext } from '@lit/context';\nimport { QtiAssessmentTest } from '../qti-assessment-test';\nimport { ItemContext, VariableDeclaration } from '../../qti-components';\nimport { View } from '../mixins/test-view.mixin';\n\nexport interface TestContext {\n items: (ItemContext & { category?: string })[];\n testOutcomeVariables: VariableDeclaration<string | string[]>[];\n navPartId?: string | null;\n navSectionId?: string | null;\n navItemId?: string | null;\n navItemLoading?: boolean;\n navTestLoading?: boolean;\n view?: View;\n}\n\nexport const testContext = createContext<Readonly<TestContext>>(Symbol('test'));\n\nexport type TestElement = {\n el: QtiAssessmentTest;\n};\n\nexport const testElement = createContext<Readonly<TestElement>>(Symbol('testElement'));\n","import { consume } from '@lit/context';\nimport { html, LitElement } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { testContext, TestContext } from '../context';\n\n// https://www.imsglobal.org/sites/default/files/spec/qti/v3/info/index.html#Root_AssessmentSection\n\nconst stringToBooleanConverter = {\n fromAttribute(value: string): boolean {\n return value === 'true';\n },\n toAttribute(value: boolean): string {\n return value ? 'true' : 'false';\n }\n};\n\nexport class QtiAssessmentSection extends LitElement {\n @property({ type: String }) identifier: string;\n @property({ type: String }) required: string;\n @property({ type: Boolean, converter: stringToBooleanConverter }) fixed: boolean;\n @property({ type: String }) title: string;\n @property({ type: Boolean, converter: stringToBooleanConverter }) visible: boolean;\n @property({ type: Boolean, converter: stringToBooleanConverter, attribute: 'keep-together' }) keepTogether: boolean;\n\n @consume({ context: testContext, subscribe: true })\n public _testContext?: TestContext;\n\n async connectedCallback(): Promise<void> {\n super.connectedCallback();\n await this.updateComplete;\n this.dispatchEvent(\n new Event('qti-assessment-section-connected', {\n bubbles: true,\n composed: true\n })\n );\n }\n\n render() {\n return html`<slot name=\"qti-rubric-block\"></slot><slot></slot>`;\n }\n}\n\nif (!customElements.get('qti-assessment-section')) {\n customElements.define('qti-assessment-section', QtiAssessmentSection);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'qti-assessment-section': QtiAssessmentSection;\n }\n}\n","import { consume } from '@lit/context';\nimport { html, LitElement } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { testContext, TestContext } from '../context';\n\n@customElement('qti-assessment-test')\nexport class QtiAssessmentTest extends LitElement {\n @property({ type: String }) identifier: string;\n @property({ type: String }) title: string;\n\n @consume({ context: testContext, subscribe: true })\n public _testContext?: TestContext;\n\n async connectedCallback(): Promise<void> {\n super.connectedCallback();\n await this.updateComplete;\n this.dispatchEvent(\n new CustomEvent('qti-assessment-test-connected', {\n detail: this,\n bubbles: true,\n composed: true\n })\n );\n }\n\n render() {\n return html` <slot></slot>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'qti-assessment-test': QtiAssessmentTest;\n }\n}\n","import { html, LitElement } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n@customElement('qti-test-part')\nexport class QtiTestPart extends LitElement {\n @property({ type: String }) identifier: string = '';\n @property({ type: String }) title: string = '';\n @property({ type: String }) class: string = '';\n\n @property({ type: String, attribute: 'navigation-mode' })\n NavigationMode: 'linear' | 'nonlinear' = 'nonlinear';\n\n @property({ type: String, attribute: 'submission-mode' })\n submissionMode: 'individual' | 'simultaneous' = 'individual';\n\n async connectedCallback(): Promise<void> {\n super.connectedCallback();\n await this.updateComplete;\n this.dispatchEvent(\n new Event('qti-test-part-connected', {\n bubbles: true,\n composed: true\n })\n );\n }\n\n render() {\n return html` <slot></slot>`;\n }\n}\n\nif (!customElements.get('qti-test-part')) {\n customElements.define('qti-test-part', QtiTestPart);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'qti-test-part': QtiTestPart;\n }\n}\n"],"mappings":"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","names":["consume","html","LitElement","property","stringToBooleanConverter","LitElement","html","property","consume","consume","html","LitElement","property","LitElement","html","property","consume","html","LitElement","customElement","property","LitElement","html","property","customElement"]}
@@ -1,9 +1,84 @@
1
- import {
2
- QtiAssessmentItemRef
3
- } from "../../chunk-OQZW2B47.js";
4
- import "../../chunk-XFHB6KQW.js";
5
- import "../../chunk-R4HSV7U7.js";
6
- import "../../chunk-44VE5POH.js";
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __decorateClass = (decorators, target, key, kind) => {
4
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
5
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
6
+ if (decorator = decorators[i])
7
+ result = (kind ? decorator(target, key, result) : decorator(result)) || result;
8
+ if (kind && result) __defProp(target, key, result);
9
+ return result;
10
+ };
11
+
12
+ // src/lib/qti-test/qti-assessment-test/qti-assessment-item-ref.ts
13
+ import { consume } from "@lit/context";
14
+ import { html, LitElement } from "lit";
15
+ import { property } from "lit/decorators.js";
16
+
17
+ // src/lib/qti-test/context/test.context.ts
18
+ import { createContext } from "@lit/context";
19
+ var testContext = createContext(Symbol("test"));
20
+ var testElement = createContext(Symbol("testElement"));
21
+
22
+ // src/lib/qti-test/qti-assessment-test/qti-assessment-item-ref.ts
23
+ var stringToBooleanConverter = {
24
+ fromAttribute(value) {
25
+ return value === "true";
26
+ },
27
+ toAttribute(value) {
28
+ return value ? "true" : "false";
29
+ }
30
+ };
31
+ var QtiAssessmentItemRef = class extends LitElement {
32
+ constructor() {
33
+ super(...arguments);
34
+ this.weigths = /* @__PURE__ */ new Map();
35
+ }
36
+ // the XMLDocument
37
+ createRenderRoot() {
38
+ return this;
39
+ }
40
+ get assessmentItem() {
41
+ return this.renderRoot?.querySelector("qti-assessment-item");
42
+ }
43
+ async connectedCallback() {
44
+ super.connectedCallback();
45
+ await this.updateComplete;
46
+ this.dispatchEvent(
47
+ new CustomEvent("qti-assessment-item-ref-connected", {
48
+ bubbles: true,
49
+ composed: true,
50
+ detail: { identifier: this.identifier, href: this.href, category: this.category }
51
+ })
52
+ );
53
+ }
54
+ render() {
55
+ return html`${this.xmlDoc}`;
56
+ }
57
+ };
58
+ __decorateClass([
59
+ property({ type: String })
60
+ ], QtiAssessmentItemRef.prototype, "category", 2);
61
+ __decorateClass([
62
+ property({ type: String })
63
+ ], QtiAssessmentItemRef.prototype, "identifier", 2);
64
+ __decorateClass([
65
+ property({ type: Boolean, converter: stringToBooleanConverter })
66
+ ], QtiAssessmentItemRef.prototype, "required", 2);
67
+ __decorateClass([
68
+ property({ type: Boolean, converter: stringToBooleanConverter })
69
+ ], QtiAssessmentItemRef.prototype, "fixed", 2);
70
+ __decorateClass([
71
+ property({ type: String })
72
+ ], QtiAssessmentItemRef.prototype, "href", 2);
73
+ __decorateClass([
74
+ consume({ context: testContext, subscribe: true })
75
+ ], QtiAssessmentItemRef.prototype, "_testContext", 2);
76
+ __decorateClass([
77
+ property({ type: Object, attribute: false })
78
+ ], QtiAssessmentItemRef.prototype, "xmlDoc", 2);
79
+ if (!customElements.get("qti-assessment-item-ref")) {
80
+ customElements.define("qti-assessment-item-ref", QtiAssessmentItemRef);
81
+ }
7
82
  export {
8
83
  QtiAssessmentItemRef
9
84
  };
@@ -1 +1 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
1
+ {"version":3,"sources":["../../../src/lib/qti-test/qti-assessment-test/qti-assessment-item-ref.ts","../../../src/lib/qti-test/context/test.context.ts"],"sourcesContent":["import { consume } from '@lit/context';\nimport { html, LitElement } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { testContext, TestContext } from '../context';\nimport { QtiAssessmentItem } from '../../qti-components';\n\n// Converter function to interpret \"true\" and \"false\" as booleans\nconst stringToBooleanConverter = {\n fromAttribute(value: string): boolean {\n return value === 'true';\n },\n toAttribute(value: boolean): string {\n return value ? 'true' : 'false';\n }\n};\n\n// @customElement('qti-assessment-item-ref')\nexport class QtiAssessmentItemRef extends LitElement {\n @property({ type: String }) category?: string;\n @property({ type: String }) identifier?: string;\n @property({ type: Boolean, converter: stringToBooleanConverter }) required?: boolean;\n @property({ type: Boolean, converter: stringToBooleanConverter }) fixed?: boolean;\n @property({ type: String }) href?: string;\n\n @consume({ context: testContext, subscribe: true })\n public _testContext?: TestContext;\n\n weigths: Map<string, number> = new Map();\n\n @property({ type: Object, attribute: false })\n xmlDoc!: DocumentFragment; // the XMLDocument\n\n protected createRenderRoot(): HTMLElement | DocumentFragment {\n return this;\n }\n\n get assessmentItem(): QtiAssessmentItem | null {\n return this.renderRoot?.querySelector('qti-assessment-item');\n }\n\n async connectedCallback(): Promise<void> {\n // debugger;\n super.connectedCallback();\n await this.updateComplete;\n this.dispatchEvent(\n new CustomEvent('qti-assessment-item-ref-connected', {\n bubbles: true,\n composed: true,\n detail: { identifier: this.identifier, href: this.href, category: this.category }\n })\n );\n }\n\n render() {\n return html`${this.xmlDoc}`;\n }\n}\n\nif (!customElements.get('qti-assessment-item-ref')) {\n customElements.define('qti-assessment-item-ref', QtiAssessmentItemRef);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'qti-assessment-item-ref': QtiAssessmentItemRef;\n }\n}\n","import { createContext } from '@lit/context';\nimport { QtiAssessmentTest } from '../qti-assessment-test';\nimport { ItemContext, VariableDeclaration } from '../../qti-components';\nimport { View } from '../mixins/test-view.mixin';\n\nexport interface TestContext {\n items: (ItemContext & { category?: string })[];\n testOutcomeVariables: VariableDeclaration<string | string[]>[];\n navPartId?: string | null;\n navSectionId?: string | null;\n navItemId?: string | null;\n navItemLoading?: boolean;\n navTestLoading?: boolean;\n view?: View;\n}\n\nexport const testContext = createContext<Readonly<TestContext>>(Symbol('test'));\n\nexport type TestElement = {\n el: QtiAssessmentTest;\n};\n\nexport const testElement = createContext<Readonly<TestElement>>(Symbol('testElement'));\n"],"mappings":";;;;;;;;;;;;AAAA,SAAS,eAAe;AACxB,SAAS,MAAM,kBAAkB;AACjC,SAAS,gBAAgB;;;ACFzB,SAAS,qBAAqB;AAgBvB,IAAM,cAAc,cAAqC,OAAO,MAAM,CAAC;AAMvE,IAAM,cAAc,cAAqC,OAAO,aAAa,CAAC;;;ADfrF,IAAM,2BAA2B;AAAA,EAC/B,cAAc,OAAwB;AACpC,WAAO,UAAU;AAAA,EACnB;AAAA,EACA,YAAY,OAAwB;AAClC,WAAO,QAAQ,SAAS;AAAA,EAC1B;AACF;AAGO,IAAM,uBAAN,cAAmC,WAAW;AAAA,EAA9C;AAAA;AAUL,mBAA+B,oBAAI,IAAI;AAAA;AAAA;AAAA,EAK7B,mBAAmD;AAC3D,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,iBAA2C;AAC7C,WAAO,KAAK,YAAY,cAAc,qBAAqB;AAAA,EAC7D;AAAA,EAEA,MAAM,oBAAmC;AAEvC,UAAM,kBAAkB;AACxB,UAAM,KAAK;AACX,SAAK;AAAA,MACH,IAAI,YAAY,qCAAqC;AAAA,QACnD,SAAS;AAAA,QACT,UAAU;AAAA,QACV,QAAQ,EAAE,YAAY,KAAK,YAAY,MAAM,KAAK,MAAM,UAAU,KAAK,SAAS;AAAA,MAClF,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEA,SAAS;AACP,WAAO,OAAO,KAAK,MAAM;AAAA,EAC3B;AACF;AAtC8B;AAAA,EAA3B,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GADf,qBACiB;AACA;AAAA,EAA3B,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GAFf,qBAEiB;AACsC;AAAA,EAAjE,SAAS,EAAE,MAAM,SAAS,WAAW,yBAAyB,CAAC;AAAA,GAHrD,qBAGuD;AACA;AAAA,EAAjE,SAAS,EAAE,MAAM,SAAS,WAAW,yBAAyB,CAAC;AAAA,GAJrD,qBAIuD;AACtC;AAAA,EAA3B,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GALf,qBAKiB;AAGrB;AAAA,EADN,QAAQ,EAAE,SAAS,aAAa,WAAW,KAAK,CAAC;AAAA,GAPvC,qBAQJ;AAKP;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,WAAW,MAAM,CAAC;AAAA,GAZjC,qBAaX;AA4BF,IAAI,CAAC,eAAe,IAAI,yBAAyB,GAAG;AAClD,iBAAe,OAAO,2BAA2B,oBAAoB;AACvE;","names":[]}
@@ -1,9 +1,72 @@
1
- import {
2
- QtiAssessmentSection
3
- } from "../../chunk-OXDOQVRL.js";
4
- import "../../chunk-XFHB6KQW.js";
5
- import "../../chunk-R4HSV7U7.js";
6
- import "../../chunk-44VE5POH.js";
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __decorateClass = (decorators, target, key, kind) => {
4
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
5
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
6
+ if (decorator = decorators[i])
7
+ result = (kind ? decorator(target, key, result) : decorator(result)) || result;
8
+ if (kind && result) __defProp(target, key, result);
9
+ return result;
10
+ };
11
+
12
+ // src/lib/qti-test/qti-assessment-test/qti-assessment-section.ts
13
+ import { consume } from "@lit/context";
14
+ import { html, LitElement } from "lit";
15
+ import { property } from "lit/decorators.js";
16
+
17
+ // src/lib/qti-test/context/test.context.ts
18
+ import { createContext } from "@lit/context";
19
+ var testContext = createContext(Symbol("test"));
20
+ var testElement = createContext(Symbol("testElement"));
21
+
22
+ // src/lib/qti-test/qti-assessment-test/qti-assessment-section.ts
23
+ var stringToBooleanConverter = {
24
+ fromAttribute(value) {
25
+ return value === "true";
26
+ },
27
+ toAttribute(value) {
28
+ return value ? "true" : "false";
29
+ }
30
+ };
31
+ var QtiAssessmentSection = class extends LitElement {
32
+ async connectedCallback() {
33
+ super.connectedCallback();
34
+ await this.updateComplete;
35
+ this.dispatchEvent(
36
+ new Event("qti-assessment-section-connected", {
37
+ bubbles: true,
38
+ composed: true
39
+ })
40
+ );
41
+ }
42
+ render() {
43
+ return html`<slot name="qti-rubric-block"></slot><slot></slot>`;
44
+ }
45
+ };
46
+ __decorateClass([
47
+ property({ type: String })
48
+ ], QtiAssessmentSection.prototype, "identifier", 2);
49
+ __decorateClass([
50
+ property({ type: String })
51
+ ], QtiAssessmentSection.prototype, "required", 2);
52
+ __decorateClass([
53
+ property({ type: Boolean, converter: stringToBooleanConverter })
54
+ ], QtiAssessmentSection.prototype, "fixed", 2);
55
+ __decorateClass([
56
+ property({ type: String })
57
+ ], QtiAssessmentSection.prototype, "title", 2);
58
+ __decorateClass([
59
+ property({ type: Boolean, converter: stringToBooleanConverter })
60
+ ], QtiAssessmentSection.prototype, "visible", 2);
61
+ __decorateClass([
62
+ property({ type: Boolean, converter: stringToBooleanConverter, attribute: "keep-together" })
63
+ ], QtiAssessmentSection.prototype, "keepTogether", 2);
64
+ __decorateClass([
65
+ consume({ context: testContext, subscribe: true })
66
+ ], QtiAssessmentSection.prototype, "_testContext", 2);
67
+ if (!customElements.get("qti-assessment-section")) {
68
+ customElements.define("qti-assessment-section", QtiAssessmentSection);
69
+ }
7
70
  export {
8
71
  QtiAssessmentSection
9
72
  };