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

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 (515) hide show
  1. package/cdn/{chunk-2F5323DC.js → chunk-4I75QSIL.js} +1 -1
  2. package/cdn/chunk-66PERJA3.js +939 -0
  3. package/cdn/chunk-6WNSQ7U6.js +939 -0
  4. package/cdn/{chunk-2WPNLHGH.js → chunk-A536ZOJJ.js} +1 -1
  5. package/cdn/{chunk-KXRA4DBZ.js → chunk-AT2C24P4.js} +1 -1
  6. package/cdn/{chunk-NAARXANC.js → chunk-BLKKKK6C.js} +1 -1
  7. package/cdn/{chunk-YXST4IEX.js → chunk-DC2R556M.js} +2 -2
  8. package/cdn/chunk-GALSGMIP.js +5 -0
  9. package/cdn/chunk-KYOTSBCX.js +1 -0
  10. package/cdn/{chunk-3M77CJJH.js → chunk-QGKK4T2J.js} +1 -1
  11. package/cdn/{chunk-WI7KK7NI.js → chunk-ROXN2HIJ.js} +1 -1
  12. package/cdn/{chunk-D4K2EXYX.js → chunk-TJMODUN5.js} +1 -1
  13. package/cdn/{chunk-YHB534QY.js → chunk-Z6SKK5ZX.js} +1 -1
  14. package/cdn/chunks/chunk-3GO57DNP.js +0 -0
  15. package/cdn/chunks/chunk-3V6LA7B3.js +8 -0
  16. package/cdn/chunks/chunk-4ILXLVT5.js +3545 -0
  17. package/cdn/chunks/chunk-4PEUIMDK.js +8 -0
  18. package/cdn/chunks/chunk-4UJBK6JO.js +1 -0
  19. package/cdn/chunks/chunk-4WXQYE2P.js +8 -0
  20. package/cdn/chunks/chunk-5BR5CJFH.js +24 -0
  21. package/cdn/chunks/chunk-5FCXUJAG.js +23 -0
  22. package/cdn/chunks/chunk-5GCSZ3CH.js +73 -0
  23. package/cdn/{chunk-II7AGB2E.js → chunks/chunk-5P7CTN7Q.js} +1 -1
  24. package/cdn/chunks/chunk-5X76K77R.js +8 -0
  25. package/cdn/chunks/chunk-6MCYE7P5.js +1 -0
  26. package/cdn/chunks/chunk-6PW2L463.js +0 -0
  27. package/cdn/{chunk-RBATSYIS.js → chunks/chunk-6S4CDN3T.js} +1 -1
  28. package/cdn/chunks/chunk-76VGZJCP.js +934 -0
  29. package/cdn/chunks/chunk-7RBGYKOX.js +5 -0
  30. package/cdn/chunks/chunk-7XYBFL7U.js +934 -0
  31. package/cdn/chunks/chunk-AJJJAZWM.js +1 -0
  32. package/cdn/chunks/chunk-ANDPD7F2.js +5 -0
  33. package/cdn/chunks/chunk-ARHBUT6F.js +5 -0
  34. package/cdn/chunks/chunk-AUHO2E7V.js +934 -0
  35. package/cdn/chunks/chunk-CZ3CSGCE.js +934 -0
  36. package/cdn/chunks/chunk-D3GR6AUG.js +43 -0
  37. package/cdn/chunks/chunk-DZCKF45D.js +5 -0
  38. package/cdn/chunks/chunk-EFU4L43Q.js +8 -0
  39. package/cdn/chunks/chunk-FM5C34DM.js +934 -0
  40. package/cdn/chunks/chunk-FRS2J3OS.js +59 -0
  41. package/cdn/chunks/chunk-GMK2YRB2.js +934 -0
  42. package/cdn/chunks/chunk-H2V2RXUW.js +11 -0
  43. package/cdn/chunks/chunk-HUMOYGEM.js +43 -0
  44. package/cdn/chunks/chunk-IAP2CEE7.js +1 -0
  45. package/cdn/chunks/chunk-IMJOPCFR.js +1 -0
  46. package/cdn/chunks/chunk-IQZ7AOCQ.js +8 -0
  47. package/cdn/chunks/chunk-J3JSSCM6.js +5 -0
  48. package/cdn/chunks/chunk-KHLUVO6Y.js +8 -0
  49. package/cdn/chunks/chunk-KWPDTFYH.js +1 -0
  50. package/cdn/chunks/chunk-L4CUWIE6.js +17 -0
  51. package/cdn/chunks/chunk-LARBLB7K.js +8 -0
  52. package/cdn/chunks/chunk-LNFCEHB3.js +934 -0
  53. package/cdn/chunks/chunk-LZZB4VGC.js +48 -0
  54. package/cdn/chunks/chunk-MJMONWKB.js +3539 -0
  55. package/cdn/chunks/chunk-N5OHGRGG.js +8 -0
  56. package/cdn/chunks/chunk-NDHSIO2G.js +8 -0
  57. package/cdn/chunks/chunk-NRY3WHJD.js +5 -0
  58. package/cdn/chunks/chunk-PKT2SJQD.js +8 -0
  59. package/cdn/chunks/chunk-PPWEIKLT.js +1 -0
  60. package/cdn/chunks/chunk-PT523RSK.js +8 -0
  61. package/cdn/chunks/chunk-QD3NT5PG.js +934 -0
  62. package/cdn/chunks/chunk-QQCGUVEV.js +1 -0
  63. package/cdn/chunks/chunk-QTK4CPHP.js +8 -0
  64. package/cdn/chunks/chunk-QV6I5NVQ.js +8 -0
  65. package/cdn/chunks/chunk-R33OODNX.js +1 -0
  66. package/cdn/chunks/chunk-RIXTWE2H.js +8 -0
  67. package/cdn/chunks/chunk-ROZIP5LG.js +8 -0
  68. package/cdn/chunks/chunk-RPZVSBLM.js +8 -0
  69. package/cdn/chunks/chunk-RXKI3AO4.js +1 -0
  70. package/cdn/chunks/chunk-SATSEEWJ.js +934 -0
  71. package/cdn/chunks/chunk-SXM25YH3.js +934 -0
  72. package/cdn/chunks/chunk-T2KKTMAT.js +934 -0
  73. package/cdn/chunks/chunk-TEYXRLTI.js +8 -0
  74. package/cdn/chunks/chunk-TQBDBMWL.js +5 -0
  75. package/cdn/chunks/chunk-TV3SPOLH.js +8 -0
  76. package/cdn/chunks/chunk-TVDTF6P6.js +934 -0
  77. package/cdn/chunks/chunk-U2TE6TOV.js +934 -0
  78. package/cdn/chunks/chunk-UJP4TGD3.js +1 -0
  79. package/cdn/chunks/chunk-W5Y3ZU2W.js +5 -0
  80. package/cdn/chunks/chunk-WPGJ54IP.js +1 -0
  81. package/cdn/chunks/chunk-X2KBNXRO.js +6 -0
  82. package/cdn/chunks/chunk-XUJ7TXHW.js +1 -0
  83. package/cdn/chunks/chunk-YHWMZAZD.js +43 -0
  84. package/cdn/chunks/chunk-YVZ742ID.js +934 -0
  85. package/cdn/chunks/chunk-YWH4TGMA.js +5 -0
  86. package/cdn/chunks/chunk-YXR6KSZI.js +11 -0
  87. package/cdn/exports/expression-result.js +0 -0
  88. package/cdn/exports/interaction.interface.js +0 -0
  89. package/cdn/exports/interaction.js +1 -0
  90. package/cdn/exports/item.context.js +1 -0
  91. package/cdn/exports/qti-assessment-item.context.js +1 -0
  92. package/cdn/exports/qti-condition-expression.js +1 -0
  93. package/cdn/exports/qti-expression.js +1 -0
  94. package/cdn/exports/variables.js +0 -0
  95. package/cdn/index.global.js +226 -0
  96. package/cdn/index.js +1 -0
  97. package/cdn/qti-components/index.global.js +1 -1
  98. package/cdn/qti-components/index.js +1 -939
  99. package/cdn/qti-item/components/index.global.js +149 -0
  100. package/cdn/qti-item/components/index.js +3549 -0
  101. package/cdn/qti-item/components/item-container.global.js +149 -0
  102. package/cdn/qti-item/components/item-container.js +3549 -0
  103. package/cdn/qti-item/core/index.global.js +1 -1
  104. package/cdn/qti-item/core/index.js +1 -5
  105. package/cdn/qti-item/index.global.js +149 -0
  106. package/cdn/qti-item/index.js +3549 -0
  107. package/cdn/qti-item/qti-item.global.js +114 -0
  108. package/cdn/qti-item/qti-item.js +1 -0
  109. package/cdn/qti-loader/index.js +1 -1
  110. package/cdn/qti-test/components/index.js +1 -1
  111. package/cdn/qti-test/components/styles.js +1 -1
  112. package/cdn/qti-test/components/test-component.abstract.js +1 -1
  113. package/cdn/qti-test/components/test-container.global.js +149 -0
  114. package/cdn/qti-test/components/test-container.js +3549 -0
  115. package/cdn/qti-test/components/test-end-attempt.js +1 -0
  116. package/cdn/qti-test/components/test-item-link.js +1 -1
  117. package/cdn/qti-test/components/test-next.js +1 -1
  118. package/cdn/qti-test/components/test-next.spec.css +1 -0
  119. package/cdn/qti-test/components/test-next.spec.global.js +1 -199
  120. package/cdn/qti-test/components/test-next.spec.js +229 -229
  121. package/cdn/qti-test/components/test-paging-buttons-stamp.js +1 -1
  122. package/cdn/qti-test/components/test-prev.js +1 -1
  123. package/cdn/qti-test/components/test-show-correct-response.js +1 -0
  124. package/cdn/qti-test/components/test-view.js +1 -1
  125. package/cdn/qti-test/context/index.global.js +58 -0
  126. package/cdn/qti-test/context/index.js +1 -0
  127. package/cdn/qti-test/context/test.context.global.js +58 -0
  128. package/cdn/qti-test/context/test.context.js +1 -0
  129. package/cdn/qti-test/core/index.global.js +1 -1
  130. package/cdn/qti-test/core/index.js +1 -1
  131. package/cdn/qti-test/index.global.js +242 -0
  132. package/cdn/qti-test/index.js +3598 -0
  133. package/cdn/qti-test/mixins/index.global.js +1 -0
  134. package/cdn/qti-test/mixins/index.js +23 -0
  135. package/cdn/qti-test/mixins/test-loader.mixin.global.js +1 -0
  136. package/cdn/qti-test/mixins/test-loader.mixin.js +23 -0
  137. package/cdn/qti-test/mixins/test-navigation.mixin.global.js +1 -0
  138. package/cdn/qti-test/mixins/test-navigation.mixin.js +1 -0
  139. package/cdn/qti-test/mixins/test-view.mixin.global.js +1 -0
  140. package/cdn/qti-test/mixins/test-view.mixin.js +1 -0
  141. package/cdn/qti-test/qti-assessment-test/index.global.js +170 -0
  142. package/cdn/qti-test/qti-assessment-test/index.js +1 -0
  143. package/cdn/qti-test/qti-assessment-test/qti-assessment-item-ref.global.js +170 -0
  144. package/cdn/qti-test/qti-assessment-test/qti-assessment-item-ref.js +1 -0
  145. package/cdn/qti-test/qti-assessment-test/qti-assessment-section.global.js +170 -0
  146. package/cdn/qti-test/qti-assessment-test/qti-assessment-section.js +1 -0
  147. package/cdn/qti-test/qti-assessment-test/qti-assessment-test.global.js +170 -0
  148. package/cdn/qti-test/qti-assessment-test/qti-assessment-test.js +1 -0
  149. package/cdn/qti-test/qti-assessment-test/qti-test-part.global.js +114 -0
  150. package/cdn/qti-test/qti-assessment-test/qti-test-part.js +1 -0
  151. package/cdn/qti-test/qti-test.global.js +170 -0
  152. package/cdn/qti-test/qti-test.js +23 -0
  153. package/cdn/qti-test/test-base.global.js +170 -0
  154. package/cdn/qti-test/test-base.js +1 -0
  155. package/cdn/qti-transformers/index.js +1 -1
  156. package/dist/chunk-2LWLX7WV.js +6307 -0
  157. package/dist/chunk-2LWLX7WV.js.map +1 -0
  158. package/dist/{chunk-TAQAVEQ2.js → chunk-3G364JZC.js} +2 -2
  159. package/dist/{chunk-QNR4WQAC.js → chunk-6TUE644E.js} +3 -2
  160. package/dist/{chunk-2GKDJDI5.js → chunk-6ZMD232X.js} +2 -2
  161. package/dist/{chunk-3F3DCHHM.js → chunk-AYRSHIHA.js} +4 -4
  162. package/dist/{chunk-LJU3MHXE.js → chunk-BN32D5J2.js} +4 -4
  163. package/dist/{chunk-ERLGA6TC.js → chunk-CJRXRBRQ.js} +4 -4
  164. package/dist/{chunk-KVFH5VBC.js → chunk-GPJ6WTE5.js} +2 -2
  165. package/dist/{chunk-KI3A6ZT6.js → chunk-KAUHKHPH.js} +2 -2
  166. package/dist/chunk-QYN5S4EM.js +107 -0
  167. package/dist/chunk-QYN5S4EM.js.map +1 -0
  168. package/dist/{chunk-EXJQ3ZUE.js → chunk-UJTJIU3C.js} +2 -2
  169. package/dist/{chunk-UDWEOEOS.js → chunk-XVQZ5JI5.js} +2 -2
  170. package/dist/chunk-XW3PQRKW.js +6306 -0
  171. package/dist/chunk-XW3PQRKW.js.map +1 -0
  172. package/dist/{chunk-E3656TSN.js → chunk-YQ7EXOAK.js} +1 -1
  173. package/dist/chunk-YQ7EXOAK.js.map +1 -0
  174. package/dist/chunks/chunk-2V6LQV2K.js +50 -0
  175. package/dist/chunks/chunk-2V6LQV2K.js.map +1 -0
  176. package/dist/{chunk-O3GIZH57.js → chunks/chunk-3EU75IUF.js} +7 -10
  177. package/dist/chunks/chunk-3EU75IUF.js.map +1 -0
  178. package/dist/chunks/chunk-3QQFMVDS.js +118 -0
  179. package/dist/chunks/chunk-3QQFMVDS.js.map +1 -0
  180. package/dist/{chunk-SLMQZKDH.js → chunks/chunk-4GNVYCBN.js} +66 -7
  181. package/dist/chunks/chunk-4GNVYCBN.js.map +1 -0
  182. package/dist/chunks/chunk-4MQV5IRV.js +59 -0
  183. package/dist/chunks/chunk-4MQV5IRV.js.map +1 -0
  184. package/dist/chunks/chunk-4O5F7WV7.js +30 -0
  185. package/dist/chunks/chunk-4O5F7WV7.js.map +1 -0
  186. package/dist/chunks/chunk-4WVLWWYJ.js +50 -0
  187. package/dist/chunks/chunk-4WVLWWYJ.js.map +1 -0
  188. package/dist/chunks/chunk-5KVGRLYT.js +10 -0
  189. package/dist/chunks/chunk-5KVGRLYT.js.map +1 -0
  190. package/dist/chunks/chunk-5PCD2B62.js +6091 -0
  191. package/dist/chunks/chunk-5PCD2B62.js.map +1 -0
  192. package/dist/chunks/chunk-5RTLOB3Q.js +59 -0
  193. package/dist/chunks/chunk-5RTLOB3Q.js.map +1 -0
  194. package/dist/chunks/chunk-6JXR63MH.js +50 -0
  195. package/dist/chunks/chunk-6JXR63MH.js.map +1 -0
  196. package/dist/chunks/chunk-6PAEJQSQ.js +6058 -0
  197. package/dist/chunks/chunk-6PAEJQSQ.js.map +1 -0
  198. package/dist/chunks/chunk-6QT4LIPL.js +623 -0
  199. package/dist/chunks/chunk-6QT4LIPL.js.map +1 -0
  200. package/dist/chunks/chunk-7QMCKYDR.js +43 -0
  201. package/dist/chunks/chunk-7QMCKYDR.js.map +1 -0
  202. package/dist/{chunk-4YR7ZPE3.js → chunks/chunk-A24F75DB.js} +4 -4
  203. package/dist/chunks/chunk-A24F75DB.js.map +1 -0
  204. package/dist/chunks/chunk-AUWATZ65.js +10 -0
  205. package/dist/chunks/chunk-AUWATZ65.js.map +1 -0
  206. package/dist/chunks/chunk-AXTEKPP5.js +6084 -0
  207. package/dist/chunks/chunk-AXTEKPP5.js.map +1 -0
  208. package/dist/chunks/chunk-B6MJCAOF.js +6063 -0
  209. package/dist/chunks/chunk-B6MJCAOF.js.map +1 -0
  210. package/dist/chunks/chunk-BJ2JLJIJ.js +623 -0
  211. package/dist/chunks/chunk-BJ2JLJIJ.js.map +1 -0
  212. package/dist/chunks/chunk-BPHQLJWE.js +102 -0
  213. package/dist/chunks/chunk-BPHQLJWE.js.map +1 -0
  214. package/dist/chunks/chunk-CD3E4M5Y.js +107 -0
  215. package/dist/chunks/chunk-CD3E4M5Y.js.map +1 -0
  216. package/dist/chunks/chunk-CEXAR7BF.js +52 -0
  217. package/dist/chunks/chunk-CEXAR7BF.js.map +1 -0
  218. package/dist/chunks/chunk-CWYAQA25.js +6067 -0
  219. package/dist/chunks/chunk-CWYAQA25.js.map +1 -0
  220. package/dist/chunks/chunk-D3QX5N57.js +6117 -0
  221. package/dist/chunks/chunk-D3QX5N57.js.map +1 -0
  222. package/dist/{chunk-4CSM2PCC.js → chunks/chunk-D3RGDWKP.js} +1 -1
  223. package/dist/chunks/chunk-D3RGDWKP.js.map +1 -0
  224. package/dist/chunks/chunk-DLUJN2FW.js +22 -0
  225. package/dist/chunks/chunk-DLUJN2FW.js.map +1 -0
  226. package/dist/chunks/chunk-DNHDFXTV.js +59 -0
  227. package/dist/chunks/chunk-DNHDFXTV.js.map +1 -0
  228. package/dist/chunks/chunk-E4TWZ2DL.js +6088 -0
  229. package/dist/chunks/chunk-E4TWZ2DL.js.map +1 -0
  230. package/dist/chunks/chunk-ELDMXTUQ.js +31 -0
  231. package/dist/chunks/chunk-ELDMXTUQ.js.map +1 -0
  232. package/dist/chunks/chunk-FV7HWK54.js +29 -0
  233. package/dist/chunks/chunk-FV7HWK54.js.map +1 -0
  234. package/dist/chunks/chunk-GQ5P3NWC.js +46 -0
  235. package/dist/chunks/chunk-GQ5P3NWC.js.map +1 -0
  236. package/dist/chunks/chunk-GSWZT6N2.js +50 -0
  237. package/dist/chunks/chunk-GSWZT6N2.js.map +1 -0
  238. package/dist/chunks/chunk-H2JE6IVU.js +15 -0
  239. package/dist/chunks/chunk-H2JE6IVU.js.map +1 -0
  240. package/dist/chunks/chunk-HHVRU3AJ.js +107 -0
  241. package/dist/chunks/chunk-HHVRU3AJ.js.map +1 -0
  242. package/dist/chunks/chunk-HOTNM5DT.js +1 -0
  243. package/dist/chunks/chunk-HOTNM5DT.js.map +1 -0
  244. package/dist/chunks/chunk-IWG66KQQ.js +107 -0
  245. package/dist/chunks/chunk-IWG66KQQ.js.map +1 -0
  246. package/dist/chunks/chunk-J2SHENRN.js +3529 -0
  247. package/dist/chunks/chunk-J2SHENRN.js.map +1 -0
  248. package/dist/chunks/chunk-K6ATVWMP.js +6091 -0
  249. package/dist/chunks/chunk-K6ATVWMP.js.map +1 -0
  250. package/dist/chunks/chunk-KOEILLVS.js +8 -0
  251. package/dist/chunks/chunk-KOEILLVS.js.map +1 -0
  252. package/dist/{chunk-TLPISJ3Z.js → chunks/chunk-KYAIMBP5.js} +3 -3
  253. package/dist/chunks/chunk-KYAIMBP5.js.map +1 -0
  254. package/dist/chunks/chunk-LNISKMIL.js +6063 -0
  255. package/dist/chunks/chunk-LNISKMIL.js.map +1 -0
  256. package/dist/chunks/chunk-LNKJEW5E.js +627 -0
  257. package/dist/chunks/chunk-LNKJEW5E.js.map +1 -0
  258. package/dist/chunks/chunk-LXJA3VP2.js +72 -0
  259. package/dist/chunks/chunk-LXJA3VP2.js.map +1 -0
  260. package/dist/chunks/chunk-MLT7V47R.js +100 -0
  261. package/dist/chunks/chunk-MLT7V47R.js.map +1 -0
  262. package/dist/chunks/chunk-N5FPZNMX.js +43 -0
  263. package/dist/chunks/chunk-N5FPZNMX.js.map +1 -0
  264. package/dist/chunks/chunk-NHA53UTY.js +52 -0
  265. package/dist/chunks/chunk-NHA53UTY.js.map +1 -0
  266. package/dist/chunks/chunk-NZQKGIJP.js +3535 -0
  267. package/dist/chunks/chunk-NZQKGIJP.js.map +1 -0
  268. package/dist/chunks/chunk-O6WEZVEM.js +43 -0
  269. package/dist/chunks/chunk-O6WEZVEM.js.map +1 -0
  270. package/dist/chunks/chunk-OIRWOI3E.js +72 -0
  271. package/dist/chunks/chunk-OIRWOI3E.js.map +1 -0
  272. package/dist/chunks/chunk-PWOY6REC.js +6064 -0
  273. package/dist/chunks/chunk-PWOY6REC.js.map +1 -0
  274. package/dist/chunks/chunk-QJELKGWM.js +6061 -0
  275. package/dist/chunks/chunk-QJELKGWM.js.map +1 -0
  276. package/dist/chunks/chunk-QUB54PXZ.js +50 -0
  277. package/dist/chunks/chunk-QUB54PXZ.js.map +1 -0
  278. package/dist/chunks/chunk-RX3BRYYI.js +59 -0
  279. package/dist/chunks/chunk-RX3BRYYI.js.map +1 -0
  280. package/dist/chunks/chunk-UEEMM6H2.js +6090 -0
  281. package/dist/chunks/chunk-UEEMM6H2.js.map +1 -0
  282. package/dist/chunks/chunk-UFYWCLXF.js +10 -0
  283. package/dist/chunks/chunk-UFYWCLXF.js.map +1 -0
  284. package/dist/chunks/chunk-UN2IFSGC.js +1 -0
  285. package/dist/chunks/chunk-UN2IFSGC.js.map +1 -0
  286. package/dist/chunks/chunk-VAPB5TN4.js +46 -0
  287. package/dist/chunks/chunk-VAPB5TN4.js.map +1 -0
  288. package/dist/chunks/chunk-VBF3GCZK.js +50 -0
  289. package/dist/chunks/chunk-VBF3GCZK.js.map +1 -0
  290. package/dist/chunks/chunk-W4272Q5U.js +46 -0
  291. package/dist/chunks/chunk-W4272Q5U.js.map +1 -0
  292. package/dist/chunks/chunk-WWN5AD6V.js +81 -0
  293. package/dist/chunks/chunk-WWN5AD6V.js.map +1 -0
  294. package/dist/chunks/chunk-X226BX2U.js +78 -0
  295. package/dist/chunks/chunk-X226BX2U.js.map +1 -0
  296. package/dist/chunks/chunk-XCHS3RTZ.js +107 -0
  297. package/dist/chunks/chunk-XCHS3RTZ.js.map +1 -0
  298. package/dist/chunks/chunk-XDMSEAYC.js +294 -0
  299. package/dist/chunks/chunk-XDMSEAYC.js.map +1 -0
  300. package/dist/chunks/chunk-XSI6FXGD.js +19 -0
  301. package/dist/chunks/chunk-XSI6FXGD.js.map +1 -0
  302. package/dist/chunks/chunk-YFC3BVN2.js +78 -0
  303. package/dist/chunks/chunk-YFC3BVN2.js.map +1 -0
  304. package/dist/chunks/chunk-YOXF6JPS.js +623 -0
  305. package/dist/chunks/chunk-YOXF6JPS.js.map +1 -0
  306. package/dist/chunks/chunk-YQB6YLNW.js +78 -0
  307. package/dist/chunks/chunk-YQB6YLNW.js.map +1 -0
  308. package/dist/chunks/chunk-Z5THRO6Z.js +46 -0
  309. package/dist/chunks/chunk-Z5THRO6Z.js.map +1 -0
  310. package/dist/chunks/chunk-ZHAJ3CMP.js +6091 -0
  311. package/dist/chunks/chunk-ZHAJ3CMP.js.map +1 -0
  312. package/dist/chunks/chunk-ZPNJ2HP5.js +71 -0
  313. package/dist/chunks/chunk-ZPNJ2HP5.js.map +1 -0
  314. package/dist/chunks/chunk-ZQXZ6PK7.js +649 -0
  315. package/dist/chunks/chunk-ZQXZ6PK7.js.map +1 -0
  316. package/dist/custom-element-eslint-rules.js +337 -0
  317. package/dist/custom-elements.json +27158 -0
  318. package/dist/exports/expression-result.d.ts +19 -0
  319. package/dist/exports/expression-result.js +1 -0
  320. package/dist/exports/expression-result.js.map +1 -0
  321. package/dist/exports/interaction.d.ts +23 -0
  322. package/dist/exports/interaction.interface.d.ts +13 -0
  323. package/dist/exports/interaction.interface.js +1 -0
  324. package/dist/exports/interaction.interface.js.map +1 -0
  325. package/dist/exports/interaction.js +8 -0
  326. package/dist/exports/interaction.js.map +1 -0
  327. package/dist/exports/item.context.d.ts +12 -0
  328. package/dist/exports/item.context.js +8 -0
  329. package/dist/exports/item.context.js.map +1 -0
  330. package/dist/exports/qti-assessment-item.context.d.ts +10 -0
  331. package/dist/exports/qti-assessment-item.context.js +8 -0
  332. package/dist/exports/qti-assessment-item.context.js.map +1 -0
  333. package/dist/exports/qti-condition-expression.d.ts +13 -0
  334. package/dist/exports/qti-condition-expression.js +10 -0
  335. package/dist/exports/qti-condition-expression.js.map +1 -0
  336. package/dist/exports/qti-expression.d.ts +21 -0
  337. package/dist/exports/qti-expression.js +9 -0
  338. package/dist/exports/qti-expression.js.map +1 -0
  339. package/dist/exports/variables.d.ts +3 -0
  340. package/dist/exports/variables.js +1 -0
  341. package/dist/exports/variables.js.map +1 -0
  342. package/dist/index.d.ts +25 -0
  343. package/dist/index.js +256 -0
  344. package/dist/index.js.map +1 -0
  345. package/dist/item.css +8 -2
  346. package/dist/loader/index.d.ts +20 -0
  347. package/dist/loader/index.js +310 -0
  348. package/dist/loader/index.js.map +1 -0
  349. package/dist/qti-components/index.cjs +6773 -0
  350. package/dist/qti-components/index.cjs.map +1 -0
  351. package/dist/qti-components/index.d.cts +150 -0
  352. package/dist/qti-components/index.d.ts +36 -9
  353. package/dist/qti-components/index.js +94 -6164
  354. package/dist/qti-components/index.js.map +1 -1
  355. package/dist/qti-components-jsx.d.ts +364 -643
  356. package/dist/qti-item/components/index.d.ts +3 -0
  357. package/dist/qti-item/components/index.js +3856 -0
  358. package/dist/qti-item/components/index.js.map +1 -0
  359. package/dist/qti-item/components/item-container.d.ts +40 -0
  360. package/dist/qti-item/components/item-container.js +3856 -0
  361. package/dist/qti-item/components/item-container.js.map +1 -0
  362. package/dist/qti-item/core/index.d.ts +1 -1
  363. package/dist/qti-item/core/index.js +8 -100
  364. package/dist/qti-item/core/index.js.map +1 -1
  365. package/dist/qti-item/index.cjs +89 -0
  366. package/dist/qti-item/index.cjs.map +1 -0
  367. package/dist/qti-item/index.d.cts +24 -0
  368. package/dist/qti-item/index.d.ts +4 -0
  369. package/dist/qti-item/index.js +3869 -0
  370. package/dist/qti-item/index.js.map +1 -0
  371. package/dist/qti-item/qti-item.d.ts +25 -0
  372. package/dist/qti-item/qti-item.js +26 -0
  373. package/dist/qti-item/qti-item.js.map +1 -0
  374. package/dist/qti-loader/index.cjs +332 -0
  375. package/dist/qti-loader/index.cjs.map +1 -0
  376. package/dist/qti-loader/index.d.cts +20 -0
  377. package/dist/qti-loader/index.d.ts +7 -1
  378. package/dist/qti-loader/index.js +5 -23
  379. package/dist/qti-loader/index.js.map +1 -1
  380. package/dist/qti-response-declaration-DAeBp8HH.d.ts +1008 -0
  381. package/dist/qti-response-declaration-Di9CsqiJ.d.ts +1012 -0
  382. package/dist/qti-response-declaration-ucAqd0qK.d.ts +1034 -0
  383. package/dist/qti-simple-choice-3M44uWiN.d.ts +1153 -0
  384. package/dist/qti-simple-choice-B5GnzbqW.d.ts +1080 -0
  385. package/dist/qti-simple-choice-BOLF9wXz.d.ts +1170 -0
  386. package/dist/qti-simple-choice-BeixIkA0.d.ts +1088 -0
  387. package/dist/qti-simple-choice-BiEjEO6s.d.ts +1152 -0
  388. package/dist/qti-simple-choice-Bo_ikO6H.d.ts +1198 -0
  389. package/dist/qti-simple-choice-C0CcrtK5.d.ts +1169 -0
  390. package/dist/qti-simple-choice-Cgh1-Jbr.d.cts +1185 -0
  391. package/dist/qti-simple-choice-Cgh1-Jbr.d.ts +1185 -0
  392. package/dist/{qti-simple-choice-DB7hqAMS.d.ts → qti-simple-choice-Cn5y-Ta8.d.ts} +1 -1
  393. package/dist/qti-simple-choice-D0GiMrqD.d.ts +1168 -0
  394. package/dist/qti-simple-choice-DxWcdKHi.d.ts +1158 -0
  395. package/dist/qti-simple-choice-R_LxBTp8.d.ts +1158 -0
  396. package/dist/qti-simple-choice-hAIyfF0z.d.ts +1114 -0
  397. package/dist/qti-simple-choice-o4rje1RA.d.ts +1176 -0
  398. package/dist/qti-simple-choice-v2GxpPNh.d.ts +1181 -0
  399. package/dist/qti-test/components/index.d.ts +10 -2
  400. package/dist/qti-test/components/index.js +22 -14
  401. package/dist/qti-test/components/styles.js +2 -2
  402. package/dist/qti-test/components/test-component.abstract.d.ts +8 -4
  403. package/dist/qti-test/components/test-component.abstract.js +5 -5
  404. package/dist/qti-test/components/test-container.d.ts +37 -0
  405. package/dist/qti-test/components/test-container.js +3782 -0
  406. package/dist/qti-test/components/test-container.js.map +1 -0
  407. package/dist/qti-test/components/test-end-attempt.d.ts +26 -0
  408. package/dist/qti-test/components/test-end-attempt.js +13 -0
  409. package/dist/qti-test/components/test-end-attempt.js.map +1 -0
  410. package/dist/qti-test/components/test-item-link.d.ts +9 -2
  411. package/dist/qti-test/components/test-item-link.js +7 -7
  412. package/dist/qti-test/components/test-next.d.ts +9 -2
  413. package/dist/qti-test/components/test-next.js +7 -7
  414. package/dist/qti-test/components/test-next.spec.css +2481 -0
  415. package/dist/qti-test/components/test-next.spec.css.map +1 -0
  416. package/dist/qti-test/components/test-next.spec.d.ts +3 -2
  417. package/dist/qti-test/components/test-next.spec.js +10 -9
  418. package/dist/qti-test/components/test-next.spec.js.map +1 -1
  419. package/dist/qti-test/components/test-paging-buttons-stamp.d.ts +8 -2
  420. package/dist/qti-test/components/test-paging-buttons-stamp.js +6 -6
  421. package/dist/qti-test/components/test-prev.d.ts +9 -2
  422. package/dist/qti-test/components/test-prev.js +7 -7
  423. package/dist/qti-test/components/test-show-correct-response.d.ts +26 -0
  424. package/dist/qti-test/components/test-show-correct-response.js +13 -0
  425. package/dist/qti-test/components/test-show-correct-response.js.map +1 -0
  426. package/dist/qti-test/components/test-view.d.ts +9 -2
  427. package/dist/qti-test/components/test-view.js +6 -6
  428. package/dist/qti-test/context/index.d.ts +6 -0
  429. package/dist/qti-test/context/index.js +9 -0
  430. package/dist/qti-test/context/index.js.map +1 -0
  431. package/dist/qti-test/context/test.context.d.ts +6 -0
  432. package/dist/qti-test/context/test.context.js +9 -0
  433. package/dist/qti-test/context/test.context.js.map +1 -0
  434. package/dist/qti-test/core/index.d.ts +36 -25
  435. package/dist/qti-test/core/index.js +9 -7
  436. package/dist/qti-test/index.cjs +4823 -0
  437. package/dist/qti-test/index.cjs.map +1 -0
  438. package/dist/qti-test/index.d.cts +304 -0
  439. package/dist/qti-test/index.d.ts +14 -0
  440. package/dist/qti-test/index.js +4746 -0
  441. package/dist/qti-test/index.js.map +1 -0
  442. package/dist/qti-test/mixins/index.d.ts +8 -0
  443. package/dist/qti-test/mixins/index.js +350 -0
  444. package/dist/qti-test/mixins/index.js.map +1 -0
  445. package/dist/qti-test/mixins/test-loader.mixin.d.ts +8 -0
  446. package/dist/qti-test/mixins/test-loader.mixin.js +240 -0
  447. package/dist/qti-test/mixins/test-loader.mixin.js.map +1 -0
  448. package/dist/qti-test/mixins/test-navigation.mixin.d.ts +22 -0
  449. package/dist/qti-test/mixins/test-navigation.mixin.js +64 -0
  450. package/dist/qti-test/mixins/test-navigation.mixin.js.map +1 -0
  451. package/dist/qti-test/mixins/test-view.mixin.d.ts +6 -0
  452. package/dist/qti-test/mixins/test-view.mixin.js +50 -0
  453. package/dist/qti-test/mixins/test-view.mixin.js.map +1 -0
  454. package/dist/qti-test/qti-assessment-test/index.d.ts +6 -0
  455. package/dist/qti-test/qti-assessment-test/index.js +221 -0
  456. package/dist/qti-test/qti-assessment-test/index.js.map +1 -0
  457. package/dist/qti-test/qti-assessment-test/qti-assessment-item-ref.d.ts +6 -0
  458. package/dist/qti-test/qti-assessment-test/qti-assessment-item-ref.js +85 -0
  459. package/dist/qti-test/qti-assessment-test/qti-assessment-item-ref.js.map +1 -0
  460. package/dist/qti-test/qti-assessment-test/qti-assessment-section.d.ts +6 -0
  461. package/dist/qti-test/qti-assessment-test/qti-assessment-section.js +73 -0
  462. package/dist/qti-test/qti-assessment-test/qti-assessment-section.js.map +1 -0
  463. package/dist/qti-test/qti-assessment-test/qti-assessment-test.d.ts +6 -0
  464. package/dist/qti-test/qti-assessment-test/qti-assessment-test.js +54 -0
  465. package/dist/qti-test/qti-assessment-test/qti-assessment-test.js.map +1 -0
  466. package/dist/qti-test/qti-assessment-test/qti-test-part.d.ts +19 -0
  467. package/dist/qti-test/qti-assessment-test/qti-test-part.js +62 -0
  468. package/dist/qti-test/qti-assessment-test/qti-test-part.js.map +1 -0
  469. package/dist/qti-test/qti-test.d.ts +68 -0
  470. package/dist/qti-test/qti-test.js +500 -0
  471. package/dist/qti-test/qti-test.js.map +1 -0
  472. package/dist/qti-test/test-base.d.ts +6 -0
  473. package/dist/qti-test/test-base.js +137 -0
  474. package/dist/qti-test/test-base.js.map +1 -0
  475. package/dist/qti-transformers/index.cjs +316 -0
  476. package/dist/qti-transformers/index.cjs.map +1 -0
  477. package/dist/qti-transformers/index.d.cts +75 -0
  478. package/dist/qti-transformers/index.js +2 -2
  479. package/dist/test-base-BJwG9Ie8.d.ts +109 -0
  480. package/dist/test.context-Bx-606B3.d.ts +99 -0
  481. package/dist/{test.context-DKSpQHyg.d.ts → test.context-C2LBA3w4.d.ts} +11 -3
  482. package/dist/{test.context-K2w-1mWi.d.ts → test.context-CB5V4xJz.d.ts} +3 -3
  483. package/dist/{test-component.abstract-DWJ0XNiI.d.ts → test.context-CaENAJNk.d.ts} +12 -19
  484. package/dist/test.context-CmsDQ8k2.d.ts +99 -0
  485. package/dist/transformers/index.d.ts +76 -0
  486. package/dist/transformers/index.js +293 -0
  487. package/dist/transformers/index.js.map +1 -0
  488. package/dist/variables-cO3DzqJy.d.ts +33 -0
  489. package/dist/vscode.html-custom-data.json +244 -292
  490. package/package.json +26 -15
  491. package/cdn/chunk-4HKDXRGE.js +0 -5
  492. package/cdn/chunk-KUOLGIA5.js +0 -1
  493. package/cdn/chunk-LY27H7YF.js +0 -1
  494. package/cdn/chunk-OEBYNBRS.js +0 -129
  495. package/cdn/chunk-RM352RXQ.js +0 -5
  496. package/dist/chunk-4CSM2PCC.js.map +0 -1
  497. package/dist/chunk-E3656TSN.js.map +0 -1
  498. package/dist/chunk-NUXEGEMP.js +0 -65
  499. package/dist/chunk-NUXEGEMP.js.map +0 -1
  500. package/dist/chunk-O3GIZH57.js.map +0 -1
  501. package/dist/chunk-SLMQZKDH.js.map +0 -1
  502. package/dist/chunk-TAQAVEQ2.js.map +0 -1
  503. package/dist/chunk-TLPISJ3Z.js.map +0 -1
  504. /package/cdn/{chunk-V2RMP73O.js → chunk-IXSX4SJX.js} +0 -0
  505. /package/cdn/{chunk-GPDDPZFH.js → chunks/chunk-EHK76KRT.js} +0 -0
  506. /package/dist/{chunk-4YR7ZPE3.js.map → chunk-3G364JZC.js.map} +0 -0
  507. /package/dist/{chunk-QNR4WQAC.js.map → chunk-6TUE644E.js.map} +0 -0
  508. /package/dist/{chunk-2GKDJDI5.js.map → chunk-6ZMD232X.js.map} +0 -0
  509. /package/dist/{chunk-3F3DCHHM.js.map → chunk-AYRSHIHA.js.map} +0 -0
  510. /package/dist/{chunk-EXJQ3ZUE.js.map → chunk-BN32D5J2.js.map} +0 -0
  511. /package/dist/{chunk-ERLGA6TC.js.map → chunk-CJRXRBRQ.js.map} +0 -0
  512. /package/dist/{chunk-KVFH5VBC.js.map → chunk-GPJ6WTE5.js.map} +0 -0
  513. /package/dist/{chunk-KI3A6ZT6.js.map → chunk-KAUHKHPH.js.map} +0 -0
  514. /package/dist/{chunk-LJU3MHXE.js.map → chunk-UJTJIU3C.js.map} +0 -0
  515. /package/dist/{chunk-UDWEOEOS.js.map → chunk-XVQZ5JI5.js.map} +0 -0
package/package.json CHANGED
@@ -21,15 +21,25 @@
21
21
  "engines": {
22
22
  "node": ">=20.0.0"
23
23
  },
24
- "version": "7.0.6-next.1",
24
+ "version": "7.0.8",
25
25
  "type": "module",
26
+ "main": "dist/index.js",
26
27
  "exports": {
28
+ ".": "./dist/index.js",
29
+ "./exports/*": {
30
+ "import": "./dist/exports/*"
31
+ },
27
32
  "./qti-components": "./dist/qti-components/index.js",
28
- "./qti-components/*": "./dist/qti-components/*",
29
33
  "./qti-test/core": "./dist/qti-test/core/index.js",
30
- "./qti-test/components/*": "./dist/qti-test/components/*",
31
- "./qti-item/core": "./dist/qti-test/core/index.js",
32
- "./qti-item/components/*": "./dist/qti-item/components/*",
34
+ "./qti-test/components/*": {
35
+ "type": "./dist/qti-test/components/*.d.ts",
36
+ "import": "./dist/qti-test/components/*"
37
+ },
38
+ "./qti-item/core": "./dist/qti-item/core/index.js",
39
+ "./qti-item/components/*": {
40
+ "type": "./dist/qti-item/components/*.d.ts",
41
+ "import": "./dist/qti-item/components/*"
42
+ },
33
43
  "./qti-loader": "./dist/qti-loader/index.js",
34
44
  "./qti-transformers": "./dist/qti-transformers/index.js",
35
45
  "./react": "./dist/qti-components-jsx.d.ts",
@@ -42,16 +52,17 @@
42
52
  "scripts": {
43
53
  "storybook": "wireit",
44
54
  "storybook:docs": "wireit",
45
- "build:watch": "npm run build --watch",
55
+ "build:watch": "npm run yalc --watch",
46
56
  "npm:publish": "np",
47
57
  "---": "-",
48
58
  "build": "wireit",
49
59
  "test": "wireit",
60
+ "yalc": "wireit",
50
61
  "attw": "wireit",
51
62
  "lint": "eslint src/**/*.ts",
52
63
  "cem": "wireit",
53
64
  "css": "wireit",
54
- "act": "act",
65
+ "act": "act --container-architecture linux/arm64 -W .github/workflows/pkgr-release.yml",
55
66
  "vite": "vite",
56
67
  "stylelint": "stylelint \"src/**/*.css\"",
57
68
  "build-storybook": "storybook build",
@@ -157,6 +168,12 @@
157
168
  "storybook:cem:watch"
158
169
  ]
159
170
  },
171
+ "yalc": {
172
+ "command": "yalc push",
173
+ "dependencies": [
174
+ "build"
175
+ ]
176
+ },
160
177
  "build": {
161
178
  "command": "tsup",
162
179
  "dependencies": [
@@ -180,10 +197,7 @@
180
197
  "command": "postcss src/item.css -d dist -m"
181
198
  },
182
199
  "test": {
183
- "command": "vitest run",
184
- "dependencies": [
185
- "build"
186
- ]
200
+ "command": "vitest run"
187
201
  },
188
202
  "storybook:docs": {
189
203
  "command": "storybook dev --docs -c .storybook-docs",
@@ -206,10 +220,7 @@
206
220
  }
207
221
  },
208
222
  "attw": {
209
- "command": "attw --profile esm-only --pack --exclude-entrypoints ./item.css ./react",
210
- "dependencies": [
211
- "build"
212
- ]
223
+ "command": "attw --profile esm-only --pack --exclude-entrypoints ./item.css ./react"
213
224
  }
214
225
  }
215
226
  }
@@ -1,5 +0,0 @@
1
- import{a as M,b as S}from"./chunk-SQDSHH6N.js";import{a as I,c as w}from"./chunk-LVW3MHTI.js";import{a as f,b as V}from"./chunk-V2RMP73O.js";import{a as T,b as g}from"./chunk-M6AATWPS.js";import{a as h,b as i,c as v,f as L}from"./chunk-5WCOPF7O.js";import{d as a,j as l}from"./chunk-4DFVJE2A.js";import{e as t}from"./chunk-VI2WKTN4.js";var u=class extends l{constructor(){super(...arguments);this.testURL=null;this.testDoc=null;this.testXML=null;this.templateContent=null}async handleTestURLChange(){if(this.testURL)try{let n=await w().load(this.testURL);this.testDoc=n.htmlDoc()}catch(n){console.error("Error loading or parsing XML:",n)}}handleTestXMLChange(){if(this.testXML)try{this.testDoc=w().parse(this.testXML).htmlDoc()}catch(n){console.error("Error parsing XML:",n)}}async connectedCallback(){super.connectedCallback(),this.initializeTemplateContent(),this.applyStyles(),this.testURL&&this.handleTestURLChange(),this.testXML&&this.handleTestXMLChange()}initializeTemplateContent(){let n=this.querySelector("template");this.templateContent=n?n.content:a``}applyStyles(){let n=new CSSStyleSheet;n.replaceSync(S),this.shadowRoot.adoptedStyleSheets=[n]}render(){return a`
2
- ${this.templateContent}
3
- <slot></slot>
4
- ${M(this.testDoc,a`<span>Loading...</span>`)}
5
- `}};t([i({type:String,attribute:"test-url"})],u.prototype,"testURL",2),t([v()],u.prototype,"testDoc",2),t([v()],u.prototype,"testXML",2),t([L("testURL",{waitUntilFirstUpdate:!0})],u.prototype,"handleTestURLChange",1),t([L("testXML",{waitUntilFirstUpdate:!0})],u.prototype,"handleTestXMLChange",1),u=t([h("test-container")],u);var R=o=>{class p extends o{constructor(...s){super(...s),this.addEventListener("qti-assessment-test-connected",()=>{}),this.addEventListener("qti-load-item-request",({detail:e})=>{e.promise=(async()=>(await I().load(`${e.href}`,e.cancelPreviousRequest)).htmlDoc())()}),this.addEventListener("qti-interaction-changed",e=>{}),this.addEventListener("qti-outcome-changed",()=>{})}}return p};var k=o=>{class p extends o{constructor(...s){super(...s),this.addEventListener("qti-request-test-item",({detail:e})=>{if(!e)return;this._clearLoadedItems();let r=this.testElement.el.querySelector(`qti-assessment-item-ref[identifier="${e}"]`),b=this._loadItemRequest(r.href,!1),y=r.closest("qti-test-part").identifier,N=r.closest("qti-assessment-section").identifier;this._testContext={...this._testContext,navPartId:y,navSectionId:N,navItemId:e,navItemLoading:!0},b?b.then(q=>{r.xmlDoc=q,requestAnimationFrame(()=>this.dispatchEvent(new CustomEvent("qti-item-connected",{bubbles:!0,composed:!0}))),this._testContext={...this._testContext,navItemLoading:!1}}).catch(q=>console.error("Failed to load item:",q)):console.info("Load item request was not handled:",r.href)}),this.addEventListener("qti-assessment-test-connected",()=>{let e=this._testContext.navItemId;e||(e=this.testElement.el.querySelector("qti-assessment-item-ref").identifier),this.dispatchEvent(new CustomEvent("qti-request-test-item",{detail:e,bubbles:!0,composed:!0}))})}_clearLoadedItems(){let s=this.testElement.el.querySelectorAll("qti-assessment-test qti-assessment-item-ref");Array.from(s).forEach(e=>{e.xmlDoc=null})}_loadItemRequest(s,e=!0){let r=new CustomEvent("qti-load-item-request",{bubbles:!0,composed:!0,detail:{href:s,promise:null,cancelPreviousRequest:e}});return this.dispatchEvent(r),r.detail.promise}}return p};var D=o=>{class p extends o{constructor(...s){super(...s),this._testContext={...this._testContext,view:"candidate"},this.addEventListener("on-test-switch-view",e=>{this._testContext={...this._testContext,view:e.detail},this._updateElementView()}),this.addEventListener("qti-assessment-test-connected",()=>{this._updateElementView()}),this.addEventListener("qti-assessment-item-connected",e=>{this._updateElementView(),this._setCorrectResponseVisibility(e.detail)})}willUpdate(s){super.willUpdate(s),s.has("_testContext")&&this._updateElementView()}_updateElementView(){if(this.testElement&&this.testElement.el){Array.from(this.testElement.el.querySelectorAll("[view]")).forEach(r=>{r.classList.toggle("show",r.getAttribute("view")===this._testContext.view)});let e=this.testElement.el.querySelector(`qti-assessment-item[identifier="${this._testContext.navItemId}"]`);e&&e.showCorrectResponse(this._testContext.view==="scorer")}}_setCorrectResponseVisibility(s){s.showCorrectResponse(this._testContext.view==="scorer")}}return p};var C=class extends l{constructor(){super();this._testContext={items:[],testOutcomeVariables:[]};this.testElement={el:null};this._updateItemInTestContext=n=>{let{identifier:s,variables:e}=n,r=this._testContext.items.find(b=>b?.identifier===s);if(!r){console.warn(`Item IDs between assessment.xml and item.xml should match: ${s} is not found!`);return}r.variables?.length===1?this._updateItemVariablesInTestContext(s,e):n.variables=[...r.variables||[]]};this.addEventListener("qti-assessment-test-connected",n=>{let s=n.detail,e=Array.from(s.querySelectorAll("qti-assessment-item-ref")).map(r=>({href:r.href,identifier:r.identifier,category:r.category,variables:[{identifier:"completionStatus",value:"not_attempted",type:"outcome"}]}));this.testElement={el:s},this._testContext={...this._testContext,items:e}}),this.addEventListener("qti-assessment-item-connected",n=>{this._updateItemInTestContext(n.detail)}),this.addEventListener("qti-outcome-changed",n=>{let s=n.composedPath()[0];this._updateItemVariablesInTestContext(s.identifier,s.variables)})}get context(){return this._testContext}set context(n){n!=null&&(this._testContext={...n},n.items?.forEach(s=>{let e=this._testContext.items.find(r=>r.identifier===s.identifier);e?e.variables=s.variables:this._testContext.items.push(s)}))}_updateItemVariablesInTestContext(n,s){this._testContext={...this._testContext,items:this._testContext.items.map(e=>e.identifier!==n?e:{...e,variables:s.map(r=>{let b=e.variables.find(y=>y.identifier===r.identifier);return b?{...b,...r}:r})})}}connectedCallback(){super.connectedCallback(),this.setAttribute("qti-test","")}};t([v(),T({context:f})],C.prototype,"_testContext",2),t([v(),T({context:V})],C.prototype,"testElement",2);var E=class extends R(k(D(C))){render(){return a`<slot></slot>`}};E=t([h("qti-test")],E);var U={fromAttribute(o){return o==="true"},toAttribute(o){return o?"true":"false"}},m=class extends l{constructor(){super(...arguments);this.weigths=new Map}createRenderRoot(){return this}get assessmentItem(){return this.renderRoot?.querySelector("qti-assessment-item")}async connectedCallback(){super.connectedCallback(),await this.updateComplete,this.dispatchEvent(new CustomEvent("qti-assessment-item-ref-connected",{bubbles:!0,composed:!0,detail:{identifier:this.identifier,href:this.href,category:this.category}}))}render(){return a`${this.xmlDoc}`}};t([i({type:String})],m.prototype,"category",2),t([i({type:String})],m.prototype,"identifier",2),t([i({type:Boolean,converter:U})],m.prototype,"required",2),t([i({type:Boolean,converter:U})],m.prototype,"fixed",2),t([i({type:String})],m.prototype,"href",2),t([g({context:f,subscribe:!0})],m.prototype,"_testContext",2),t([i({type:Object,attribute:!1})],m.prototype,"xmlDoc",2);customElements.get("qti-assessment-item-ref")||customElements.define("qti-assessment-item-ref",m);var _={fromAttribute(o){return o==="true"},toAttribute(o){return o?"true":"false"}},c=class extends l{async connectedCallback(){super.connectedCallback(),await this.updateComplete,this.dispatchEvent(new Event("qti-assessment-section-connected",{bubbles:!0,composed:!0}))}render(){return a`<slot name="qti-rubric-block"></slot><slot></slot>`}};t([i({type:String})],c.prototype,"identifier",2),t([i({type:String})],c.prototype,"required",2),t([i({type:Boolean,converter:_})],c.prototype,"fixed",2),t([i({type:String})],c.prototype,"title",2),t([i({type:Boolean,converter:_})],c.prototype,"visible",2),t([i({type:Boolean,converter:_,attribute:"keep-together"})],c.prototype,"keepTogether",2),t([g({context:f,subscribe:!0})],c.prototype,"_testContext",2);customElements.get("qti-assessment-section")||customElements.define("qti-assessment-section",c);var x=class extends l{async connectedCallback(){super.connectedCallback(),await this.updateComplete,this.dispatchEvent(new CustomEvent("qti-assessment-test-connected",{detail:this,bubbles:!0,composed:!0}))}render(){return a` <slot></slot>`}};t([i({type:String})],x.prototype,"identifier",2),t([i({type:String})],x.prototype,"title",2),t([g({context:f,subscribe:!0})],x.prototype,"_testContext",2),x=t([h("qti-assessment-test")],x);var d=class extends l{constructor(){super(...arguments);this.identifier="";this.title="";this.class="";this.NavigationMode="nonlinear";this.submissionMode="individual"}async connectedCallback(){super.connectedCallback(),await this.updateComplete,this.dispatchEvent(new Event("qti-test-part-connected",{bubbles:!0,composed:!0}))}render(){return a` <slot></slot>`}};t([i({type:String})],d.prototype,"identifier",2),t([i({type:String})],d.prototype,"title",2),t([i({type:String})],d.prototype,"class",2),t([i({type:String,attribute:"navigation-mode"})],d.prototype,"NavigationMode",2),t([i({type:String,attribute:"submission-mode"})],d.prototype,"submissionMode",2),d=t([h("qti-test-part")],d);customElements.get("qti-test-part")||customElements.define("qti-test-part",d);export{E as a,m as b,c,x as d,d as e};
@@ -1 +0,0 @@
1
- import{a as h,b as f}from"./chunk-V2RMP73O.js";import{b as m}from"./chunk-M6AATWPS.js";import{b as p,c,f as u}from"./chunk-5WCOPF7O.js";import{j as d}from"./chunk-4DFVJE2A.js";import{e as n}from"./chunk-VI2WKTN4.js";function b(a){return(l,t)=>{p(a)(l,t);let e=`__${t}`;Object.defineProperty(l,t,{get(){return this[e]},set(r){let o=this[e];if(this[e]=r,o!==r){if(this._internals?.states){let i=t.toLowerCase();r?this._internals.states.add(`--${i}`):this._internals.states.delete(`--${i}`)}if(a.aria&&this._internals){let i=a.aria;r?this._internals[i]="true":this._internals[i]=null}this.requestUpdate(t,o)}},configurable:!0,enumerable:!0})}}var s=class extends d{constructor(){super();this.disabled=!0;this._internals=this.attachInternals()}_handleTestElementChange(t,e){e.el&&(this.disabled=!1)}willUpdate(t){if(t.has("_testContext")){let{items:e=[],navItemId:r}=this._testContext??{};this.itemIndex=e.findIndex(o=>o.identifier===r),this.items=e,this.view=this._testContext?.view}}_switchView(t){this.dispatchEvent(new CustomEvent("on-test-switch-view",{composed:!0,bubbles:!0,detail:t}))}_requestItem(t){this.dispatchEvent(new CustomEvent("qti-request-test-item",{composed:!0,bubbles:!0,detail:t}))}};n([b({type:Boolean,reflect:!0,aria:"ariaDisabled"})],s.prototype,"disabled",2),n([c(),m({context:h,subscribe:!0})],s.prototype,"_testContext",2),n([c(),m({context:f,subscribe:!0})],s.prototype,"_testElement",2),n([u("_testElement")],s.prototype,"_handleTestElementChange",1);export{s as a};
@@ -1 +0,0 @@
1
- import{b as m,d as p,e as c,h as u}from"./chunk-OEBYNBRS.js";import{j as d}from"./chunk-4DFVJE2A.js";import{e as i}from"./chunk-VI2WKTN4.js";function f(o){return(l,t)=>{p(o)(l,t);let e=`__${t}`;Object.defineProperty(l,t,{get(){return this[e]},set(r){let a=this[e];if(this[e]=r,a!==r){if(this._internals?.states){let n=t.toLowerCase();r?this._internals.states.add(`--${n}`):this._internals.states.delete(`--${n}`)}if(o.aria&&this._internals){let n=o.aria;r?this._internals[n]="true":this._internals[n]=null}this.requestUpdate(t,a)}},configurable:!0,enumerable:!0})}}var x=Symbol("test"),h=Symbol("testElement");var s=class extends d{constructor(){super();this.disabled=!0;this._internals=this.attachInternals()}_handleTestElementChange(t,e){e.el&&(this.disabled=!1)}willUpdate(t){if(t.has("_testContext")){let{items:e=[],navItemId:r}=this._testContext??{};this.itemIndex=e.findIndex(a=>a.identifier===r),this.items=e,this.view=this._testContext?.view}}_switchView(t){this.dispatchEvent(new CustomEvent("on-test-switch-view",{composed:!0,bubbles:!0,detail:t}))}_requestItem(t){this.dispatchEvent(new CustomEvent("qti-request-test-item",{composed:!0,bubbles:!0,detail:t}))}};i([f({type:Boolean,reflect:!0,aria:"ariaDisabled"})],s.prototype,"disabled",2),i([c(),m({context:x,subscribe:!0})],s.prototype,"_testContext",2),i([c(),m({context:h,subscribe:!0})],s.prototype,"_testElement",2),i([u("_testElement")],s.prototype,"_handleTestElementChange",1);export{x as a,h as b,s as c};
@@ -1,129 +0,0 @@
1
- import{b as C,c as g}from"./chunk-4DFVJE2A.js";var l=class extends Event{constructor(e,t,o){super("context-request",{bubbles:!0,composed:!0}),this.context=e,this.callback=t,this.subscribe=o??!1}};var p=class{constructor(e,t,o,s){if(this.subscribe=!1,this.provided=!1,this.value=void 0,this.t=(r,i)=>{this.unsubscribe&&(this.unsubscribe!==i&&(this.provided=!1,this.unsubscribe()),this.subscribe||this.unsubscribe()),this.value=r,this.host.requestUpdate(),this.provided&&!this.subscribe||(this.provided=!0,this.callback&&this.callback(r,i)),this.unsubscribe=i},this.host=e,t.context!==void 0){let r=t;this.context=r.context,this.callback=r.callback,this.subscribe=r.subscribe??!1}else this.context=t,this.callback=o,this.subscribe=s??!1;this.host.addController(this)}hostConnected(){this.dispatchRequest()}hostDisconnected(){this.unsubscribe&&(this.unsubscribe(),this.unsubscribe=void 0)}dispatchRequest(){this.host.dispatchEvent(new l(this.context,this.t,this.subscribe))}};function q({context:n,subscribe:e}){return(t,o)=>{typeof o=="object"?o.addInitializer(function(){new p(this,{context:n,callback:s=>{t.set.call(this,s)},subscribe:e})}):t.constructor.addInitializer(s=>{new p(s,{context:n,callback:r=>{s[o]=r},subscribe:e})})}}var b=class{get value(){return this.o}set value(e){this.setValue(e)}setValue(e,t=!1){let o=t||!Object.is(e,this.o);this.o=e,o&&this.updateObservers()}constructor(e){this.subscriptions=new Map,this.updateObservers=()=>{for(let[t,{disposer:o}]of this.subscriptions)t(this.o,o)},e!==void 0&&(this.value=e)}addCallback(e,t,o){if(!o)return void e(this.value);this.subscriptions.has(e)||this.subscriptions.set(e,{disposer:()=>{this.subscriptions.delete(e)},consumerHost:t});let{disposer:s}=this.subscriptions.get(e);e(this.value,s)}clearCallbacks(){this.subscriptions.clear()}};var v=class extends Event{constructor(e){super("context-provider",{bubbles:!0,composed:!0}),this.context=e}},f=class extends b{constructor(e,t,o){super(t.context!==void 0?t.initialValue:o),this.onContextRequest=s=>{let r=s.composedPath()[0];s.context===this.context&&r!==this.host&&(s.stopPropagation(),this.addCallback(s.callback,r,s.subscribe))},this.onProviderRequest=s=>{let r=s.composedPath()[0];if(s.context!==this.context||r===this.host)return;let i=new Set;for(let[a,{consumerHost:c}]of this.subscriptions)i.has(a)||(i.add(a),c.dispatchEvent(new l(this.context,a,!0)));s.stopPropagation()},this.host=e,t.context!==void 0?this.context=t.context:this.context=t,this.attachListeners(),this.host.addController?.(this)}attachListeners(){this.host.addEventListener("context-request",this.onContextRequest),this.host.addEventListener("context-provider",this.onProviderRequest)}hostConnected(){this.host.dispatchEvent(new v(this.context))}};function w({context:n}){return(e,t)=>{let o=new WeakMap;if(typeof t=="object")return t.addInitializer(function(){o.set(this,new f(this,{context:n}))}),{get(){return e.get.call(this)},set(s){return o.get(this)?.setValue(s),e.set.call(this,s)},init(s){return o.get(this)?.setValue(s),s}};{e.constructor.addInitializer(i=>{o.set(i,new f(i,{context:n}))});let s=Object.getOwnPropertyDescriptor(e,t),r;if(s===void 0){let i=new WeakMap;r={get(){return i.get(this)},set(a){o.get(this).setValue(a),i.set(this,a)},configurable:!0,enumerable:!0}}else{let i=s.set;r={...s,set(a){o.get(this).setValue(a),i?.call(this,a)}}}return void Object.defineProperty(e,t,r)}}}var Y=n=>(e,t)=>{t!==void 0?t.addInitializer(()=>{customElements.define(n,e)}):customElements.define(n,e)};var R={attribute:!0,type:String,converter:C,reflect:!1,hasChanged:g},U=(n=R,e,t)=>{let{kind:o,metadata:s}=t,r=globalThis.litPropertyMetadata.get(s);if(r===void 0&&globalThis.litPropertyMetadata.set(s,r=new Map),r.set(t.name,n),o==="accessor"){let{name:i}=t;return{set(a){let c=e.get.call(this);e.set.call(this,a),this.requestUpdate(i,c,n)},init(a){return a!==void 0&&this.P(i,void 0,n),a}}}if(o==="setter"){let{name:i}=t;return function(a){let c=this[i];e.call(this,a),this.requestUpdate(i,c,n)}}throw Error("Unsupported decorator location: "+o)};function E(n){return(e,t)=>typeof t=="object"?U(n,e,t):((o,s,r)=>{let i=s.hasOwnProperty(r);return s.constructor.createProperty(r,i?{...o,wrapped:!0}:o),i?Object.getOwnPropertyDescriptor(s,r):void 0})(n,e,t)}function ot(n){return E({...n,state:!0,attribute:!1})}var d=(n,e,t)=>(t.configurable=!0,t.enumerable=!0,Reflect.decorate&&typeof e!="object"&&Object.defineProperty(n,e,t),t);function ct(n,e){return(t,o,s)=>{let r=i=>i.renderRoot?.querySelector(n)??null;if(e){let{get:i,set:a}=typeof o=="object"?t:s??(()=>{let c=Symbol();return{get(){return this[c]},set(u){this[c]=u}}})();return d(t,o,{get(){let c=i.call(this);return c===void 0&&(c=r(this),(c!==null||this.hasUpdated)&&a.call(this,c)),c}})}return d(t,o,{get(){return r(this)}})}}function xt(n){return(e,t)=>{let{slot:o,selector:s}=n??{},r="slot"+(o?`[name=${o}]`:":not([name])");return d(e,t,{get(){let i=this.renderRoot?.querySelector(r),a=i?.assignedElements(n)??[];return s===void 0?a:a.filter(c=>c.matches(s))}})}}function Pt(n,e){let t={waitUntilFirstUpdate:!1,...e};return(o,s)=>{let{update:r}=o,i=Array.isArray(n)?n:[n];o.update=function(a){i.forEach(c=>{let u=c;if(a.has(u)){let m=a.get(u),h=this[u];m!==h&&(!t.waitUntilFirstUpdate||this.hasUpdated)&&this[s](m,h)}}),r.call(this,a)}}}function Lt(n,e){let t;return(o,s)=>{let{connectedCallback:r,disconnectedCallback:i}=o;o.connectedCallback=function(){r.call(this);let a=u=>{let m=Array.from(this.querySelectorAll(n)).concat(Array.from(this.shadowRoot?.querySelectorAll(n)||[]));for(let h of u){let y=Array.from(h.addedNodes).map(x=>x),k=Array.from(h.addedNodes).map(x=>x);h.type==="childList"&&y.find(x=>m.includes(x))&&this[s](y,k)}};t=new MutationObserver(a),t.observe(this,{childList:!0,subtree:!0});let c=Array.from(this.querySelectorAll(n)).concat(Array.from(this.shadowRoot?.querySelectorAll(n)||[]));this[s](Array.from(c),[])},o.disconnectedCallback=function(){i.call(this),t.disconnect()}}}export{w as a,q as b,Y as c,E as d,ot as e,ct as f,xt as g,Pt as h,Lt as i};
2
- /*! Bundled license information:
3
-
4
- @lit/context/lib/context-request-event.js:
5
- (**
6
- * @license
7
- * Copyright 2021 Google LLC
8
- * SPDX-License-Identifier: BSD-3-Clause
9
- *)
10
-
11
- @lit/context/lib/controllers/context-consumer.js:
12
- (**
13
- * @license
14
- * Copyright 2021 Google LLC
15
- * SPDX-License-Identifier: BSD-3-Clause
16
- *)
17
-
18
- @lit/context/lib/decorators/consume.js:
19
- (**
20
- * @license
21
- * Copyright 2022 Google LLC
22
- * SPDX-License-Identifier: BSD-3-Clause
23
- *)
24
-
25
- @lit/context/lib/create-context.js:
26
- (**
27
- * @license
28
- * Copyright 2021 Google LLC
29
- * SPDX-License-Identifier: BSD-3-Clause
30
- *)
31
-
32
- @lit/context/lib/value-notifier.js:
33
- (**
34
- * @license
35
- * Copyright 2021 Google LLC
36
- * SPDX-License-Identifier: BSD-3-Clause
37
- *)
38
-
39
- @lit/context/lib/controllers/context-provider.js:
40
- (**
41
- * @license
42
- * Copyright 2021 Google LLC
43
- * SPDX-License-Identifier: BSD-3-Clause
44
- *)
45
-
46
- @lit/context/lib/context-root.js:
47
- (**
48
- * @license
49
- * Copyright 2021 Google LLC
50
- * SPDX-License-Identifier: BSD-3-Clause
51
- *)
52
-
53
- @lit/context/lib/decorators/provide.js:
54
- (**
55
- * @license
56
- * Copyright 2017 Google LLC
57
- * SPDX-License-Identifier: BSD-3-Clause
58
- *)
59
-
60
- @lit/reactive-element/node/decorators/custom-element.js:
61
- (**
62
- * @license
63
- * Copyright 2017 Google LLC
64
- * SPDX-License-Identifier: BSD-3-Clause
65
- *)
66
-
67
- @lit/reactive-element/node/decorators/property.js:
68
- (**
69
- * @license
70
- * Copyright 2017 Google LLC
71
- * SPDX-License-Identifier: BSD-3-Clause
72
- *)
73
-
74
- @lit/reactive-element/node/decorators/state.js:
75
- (**
76
- * @license
77
- * Copyright 2017 Google LLC
78
- * SPDX-License-Identifier: BSD-3-Clause
79
- *)
80
-
81
- @lit/reactive-element/node/decorators/event-options.js:
82
- (**
83
- * @license
84
- * Copyright 2017 Google LLC
85
- * SPDX-License-Identifier: BSD-3-Clause
86
- *)
87
-
88
- @lit/reactive-element/node/decorators/base.js:
89
- (**
90
- * @license
91
- * Copyright 2017 Google LLC
92
- * SPDX-License-Identifier: BSD-3-Clause
93
- *)
94
-
95
- @lit/reactive-element/node/decorators/query.js:
96
- (**
97
- * @license
98
- * Copyright 2017 Google LLC
99
- * SPDX-License-Identifier: BSD-3-Clause
100
- *)
101
-
102
- @lit/reactive-element/node/decorators/query-all.js:
103
- (**
104
- * @license
105
- * Copyright 2017 Google LLC
106
- * SPDX-License-Identifier: BSD-3-Clause
107
- *)
108
-
109
- @lit/reactive-element/node/decorators/query-async.js:
110
- (**
111
- * @license
112
- * Copyright 2017 Google LLC
113
- * SPDX-License-Identifier: BSD-3-Clause
114
- *)
115
-
116
- @lit/reactive-element/node/decorators/query-assigned-elements.js:
117
- (**
118
- * @license
119
- * Copyright 2021 Google LLC
120
- * SPDX-License-Identifier: BSD-3-Clause
121
- *)
122
-
123
- @lit/reactive-element/node/decorators/query-assigned-nodes.js:
124
- (**
125
- * @license
126
- * Copyright 2017 Google LLC
127
- * SPDX-License-Identifier: BSD-3-Clause
128
- *)
129
- */
@@ -1,5 +0,0 @@
1
- import{a as M,b as S}from"./chunk-SQDSHH6N.js";import{a as I,c as T}from"./chunk-LVW3MHTI.js";import{a as f,b as V}from"./chunk-V2RMP73O.js";import{a as L,b as g}from"./chunk-M6AATWPS.js";import{a as h,b as i,c as v,f as w}from"./chunk-5WCOPF7O.js";import{d as a,j as l}from"./chunk-4DFVJE2A.js";import{e as t}from"./chunk-VI2WKTN4.js";var u=class extends l{constructor(){super(...arguments);this.testURL=null;this.testDoc=null;this.testXML=null;this.templateContent=null}async handleTestURLChange(){if(this.testURL)try{let n=await T().load(this.testURL);this.testDoc=n.htmlDoc()}catch(n){console.error("Error loading or parsing XML:",n)}}handleTestXMLChange(){if(this.testXML)try{this.testDoc=T().parse(this.testXML).htmlDoc()}catch(n){console.error("Error parsing XML:",n)}}async connectedCallback(){super.connectedCallback(),this.initializeTemplateContent(),this.applyStyles(),this.testURL&&this.handleTestURLChange(),this.testXML&&this.handleTestXMLChange()}initializeTemplateContent(){let n=this.querySelector("template");this.templateContent=n?n.content:a``}applyStyles(){let n=new CSSStyleSheet;n.replaceSync(S),this.shadowRoot.adoptedStyleSheets=[n]}render(){return a`
2
- ${this.templateContent}
3
- <slot></slot>
4
- ${M(this.testDoc,a`<span>Loading...</span>`)}
5
- `}};t([i({type:String,attribute:"test-url"})],u.prototype,"testURL",2),t([v()],u.prototype,"testDoc",2),t([v()],u.prototype,"testXML",2),t([w("testURL",{waitUntilFirstUpdate:!0})],u.prototype,"handleTestURLChange",1),t([w("testXML",{waitUntilFirstUpdate:!0})],u.prototype,"handleTestXMLChange",1),u=t([h("test-container")],u);var R=o=>{class p extends o{constructor(...s){super(...s),this.addEventListener("qti-assessment-test-connected",()=>{}),this.addEventListener("qti-load-item-request",({detail:e})=>{e.promise=(async()=>(await I().load(`${e.href}`,e.cancelPreviousRequest)).htmlDoc())()}),this.addEventListener("qti-interaction-changed",e=>{}),this.addEventListener("qti-outcome-changed",()=>{})}}return p};var k=o=>{class p extends o{constructor(...s){super(...s),this.addEventListener("qti-request-test-item",({detail:e})=>{if(!e)return;this._clearLoadedItems();let r=this.testElement.el.querySelector(`qti-assessment-item-ref[identifier="${e}"]`),b=this._loadItemRequest(r.href,!1),y=r.closest("qti-test-part").identifier,N=r.closest("qti-assessment-section").identifier;this._testContext={...this._testContext,navPartId:y,navSectionId:N,navItemId:e,navItemLoading:!0},b?b.then(q=>{r.xmlDoc=q,requestAnimationFrame(()=>this.dispatchEvent(new CustomEvent("qti-item-connected",{bubbles:!0,composed:!0}))),this._testContext={...this._testContext,navItemLoading:!1}}).catch(q=>console.error("Failed to load item:",q)):console.info("Load item request was not handled:",r.href)}),this.addEventListener("qti-assessment-test-connected",()=>{let e=this._testContext.navItemId;e||(e=this.testElement.el.querySelector("qti-assessment-item-ref").identifier),this.dispatchEvent(new CustomEvent("qti-request-test-item",{detail:e,bubbles:!0,composed:!0}))})}_clearLoadedItems(){let s=this.testElement.el.querySelectorAll("qti-assessment-test qti-assessment-item-ref");Array.from(s).forEach(e=>{e.xmlDoc=null})}_loadItemRequest(s,e=!0){let r=new CustomEvent("qti-load-item-request",{bubbles:!0,composed:!0,detail:{href:s,promise:null,cancelPreviousRequest:e}});return this.dispatchEvent(r),r.detail.promise}}return p};var D=o=>{class p extends o{constructor(...s){super(...s),this._testContext={...this._testContext,view:"candidate"},this.addEventListener("on-test-switch-view",e=>{this._testContext={...this._testContext,view:e.detail},this._updateElementView()}),this.addEventListener("qti-assessment-test-connected",()=>{this._updateElementView()}),this.addEventListener("qti-assessment-item-connected",e=>{this._updateElementView(),this._setCorrectResponseVisibility(e.detail)})}willUpdate(s){super.willUpdate(s),s.has("_testContext")&&this._updateElementView()}_updateElementView(){if(this.testElement&&this.testElement.el){Array.from(this.testElement.el.querySelectorAll("[view]")).forEach(r=>{r.classList.toggle("show",r.getAttribute("view")===this._testContext.view)});let e=this.testElement.el.querySelector(`qti-assessment-item[identifier="${this._testContext.navItemId}"]`);e&&e.showCorrectResponse(this._testContext.view==="scorer")}}_setCorrectResponseVisibility(s){s.showCorrectResponse(this._testContext.view==="scorer")}}return p};var C=class extends l{constructor(){super();this._testContext={items:[],testOutcomeVariables:[]};this.testElement={el:null};this._updateItemInTestContext=n=>{let{identifier:s,variables:e}=n,r=this._testContext.items.find(b=>b?.identifier===s);if(!r){console.warn(`Item IDs between assessment.xml and item.xml should match: ${s} is not found!`);return}r.variables?.length===1?this._updateItemVariablesInTestContext(s,e):n.variables=[...r.variables||[]]};this.addEventListener("qti-assessment-test-connected",n=>{let s=n.detail,e=Array.from(s.querySelectorAll("qti-assessment-item-ref")).map(r=>({href:r.href,identifier:r.identifier,category:r.category,variables:[{identifier:"completionStatus",value:"not_attempted",type:"outcome"}]}));this.testElement={el:s},this._testContext={...this._testContext,items:e}}),this.addEventListener("qti-assessment-item-connected",n=>{this._updateItemInTestContext(n.detail)}),this.addEventListener("qti-outcome-changed",n=>{let s=n.composedPath()[0];this._updateItemVariablesInTestContext(s.identifier,s.variables)})}get context(){return this._testContext}set context(n){n!=null&&(this._testContext={...n},n.items?.forEach(s=>{let e=this._testContext.items.find(r=>r.identifier===s.identifier);e?e.variables=s.variables:this._testContext.items.push(s)}))}_updateItemVariablesInTestContext(n,s){this._testContext={...this._testContext,items:this._testContext.items.map(e=>e.identifier!==n?e:{...e,variables:s.map(r=>{let b=e.variables.find(y=>y.identifier===r.identifier);return b?{...b,...r}:r})})}}connectedCallback(){super.connectedCallback(),this.setAttribute("qti-test","")}};t([v(),L({context:f})],C.prototype,"_testContext",2),t([v(),L({context:V})],C.prototype,"testElement",2);var E=class extends R(k(D(C))){render(){return a`<slot></slot>`}};E=t([h("qti-test")],E);var U={fromAttribute(o){return o==="true"},toAttribute(o){return o?"true":"false"}},m=class extends l{constructor(){super(...arguments);this.weigths=new Map}createRenderRoot(){return this}get assessmentItem(){return this.renderRoot?.querySelector("qti-assessment-item")}async connectedCallback(){super.connectedCallback(),await this.updateComplete,this.dispatchEvent(new CustomEvent("qti-assessment-item-ref-connected",{bubbles:!0,composed:!0,detail:{identifier:this.identifier,href:this.href,category:this.category}}))}render(){return a`${this.xmlDoc}`}};t([i({type:String})],m.prototype,"category",2),t([i({type:String})],m.prototype,"identifier",2),t([i({type:Boolean,converter:U})],m.prototype,"required",2),t([i({type:Boolean,converter:U})],m.prototype,"fixed",2),t([i({type:String})],m.prototype,"href",2),t([g({context:f,subscribe:!0})],m.prototype,"_testContext",2),t([i({type:Object,attribute:!1})],m.prototype,"xmlDoc",2);customElements.get("qti-assessment-item-ref")||customElements.define("qti-assessment-item-ref",m);var _={fromAttribute(o){return o==="true"},toAttribute(o){return o?"true":"false"}},c=class extends l{async connectedCallback(){super.connectedCallback(),await this.updateComplete,this.dispatchEvent(new Event("qti-assessment-section-connected",{bubbles:!0,composed:!0}))}render(){return a`<slot name="qti-rubric-block"></slot><slot></slot>`}};t([i({type:String})],c.prototype,"identifier",2),t([i({type:String})],c.prototype,"required",2),t([i({type:Boolean,converter:_})],c.prototype,"fixed",2),t([i({type:String})],c.prototype,"title",2),t([i({type:Boolean,converter:_})],c.prototype,"visible",2),t([i({type:Boolean,converter:_,attribute:"keep-together"})],c.prototype,"keepTogether",2),t([g({context:f,subscribe:!0})],c.prototype,"_testContext",2);customElements.get("qti-assessment-section")||customElements.define("qti-assessment-section",c);var x=class extends l{async connectedCallback(){super.connectedCallback(),await this.updateComplete,this.dispatchEvent(new CustomEvent("qti-assessment-test-connected",{detail:this,bubbles:!0,composed:!0}))}render(){return a` <slot></slot>`}};t([i({type:String})],x.prototype,"identifier",2),t([i({type:String})],x.prototype,"title",2),t([g({context:f,subscribe:!0})],x.prototype,"_testContext",2),x=t([h("qti-assessment-test")],x);var d=class extends l{constructor(){super(...arguments);this.identifier="";this.title="";this.class="";this.NavigationMode="nonlinear";this.submissionMode="individual"}async connectedCallback(){super.connectedCallback(),await this.updateComplete,this.dispatchEvent(new Event("qti-test-part-connected",{bubbles:!0,composed:!0}))}render(){return a` <slot></slot>`}};t([i({type:String})],d.prototype,"identifier",2),t([i({type:String})],d.prototype,"title",2),t([i({type:String})],d.prototype,"class",2),t([i({type:String,attribute:"navigation-mode"})],d.prototype,"NavigationMode",2),t([i({type:String,attribute:"submission-mode"})],d.prototype,"submissionMode",2),d=t([h("qti-test-part")],d);customElements.get("qti-test-part")||customElements.define("qti-test-part",d);export{E as a,m as b,c,x as d,d as e};
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/lib/decorators/live-query.ts"],"sourcesContent":["// @watch decorator\n//\n// Runs when an observed property changes, e.g. @property or @state, but before the component updates.\n//\n// To wait for an update to complete after a change occurs, use `await this.updateComplete` in the handler. To start\n// watching after the initial update/render, use `{ waitUntilFirstUpdate: true }` or `this.hasUpdated` in the handler.\n//\n// Usage:\n//\n// @watch('propName')\n// handlePropChange(oldValue, newValue) {\n// ...\n// }\n\nimport type { LitElement } from 'lit';\n\ntype UpdateHandler = (prev?: unknown, next?: unknown) => void;\n\ntype NonUndefined<A> = A extends undefined ? never : A;\n\ntype UpdateHandlerFunctionKeys<T extends object> = {\n [K in keyof T]-?: NonUndefined<T[K]> extends UpdateHandler ? K : never;\n}[keyof T];\n\ninterface LiveQueryOptions {\n /**\n * If true, will only start watching after the initial update/render\n */\n}\n\nexport function liveQuery(querySelector: string, _options?: LiveQueryOptions) {\n let observer: MutationObserver;\n // const resolvedOptions: Required<LiveQueryOptions> = {\n // ...options\n // };\n return <ElemClass extends LitElement>(\n proto: ElemClass,\n decoratedFnName: UpdateHandlerFunctionKeys<ElemClass>\n ): void => {\n const { connectedCallback, disconnectedCallback } = proto;\n\n proto.connectedCallback = function (this: ElemClass) {\n connectedCallback.call(this);\n const callback = (mutationList: MutationRecord[]) => {\n const elementsToWatch = Array.from(this.querySelectorAll(querySelector)).concat(\n Array.from(this.shadowRoot?.querySelectorAll(querySelector) || [])\n );\n for (const mutation of mutationList) {\n const addedNodes = Array.from(mutation.addedNodes).map(e => e as Element);\n const removedNodes = Array.from(mutation.addedNodes).map(e => e as Element);\n if (mutation.type === 'childList' && addedNodes.find(n => elementsToWatch.includes(n))) {\n (this[decoratedFnName] as unknown as UpdateHandler)(addedNodes, removedNodes);\n }\n }\n };\n observer = new MutationObserver(callback);\n observer.observe(this, { childList: true, subtree: true });\n\n const elementsAdded = Array.from(this.querySelectorAll(querySelector)).concat(\n Array.from(this.shadowRoot?.querySelectorAll(querySelector) || [])\n );\n (this[decoratedFnName] as unknown as UpdateHandler)(Array.from(elementsAdded), []);\n };\n\n proto.disconnectedCallback = function (this: ElemClass) {\n disconnectedCallback.call(this);\n observer.disconnect();\n };\n };\n}\n"],"mappings":";AA8BO,SAAS,UAAU,eAAuB,UAA6B;AAC5E,MAAI;AAIJ,SAAO,CACL,OACA,oBACS;AACT,UAAM,EAAE,mBAAmB,qBAAqB,IAAI;AAEpD,UAAM,oBAAoB,WAA2B;AACnD,wBAAkB,KAAK,IAAI;AAC3B,YAAM,WAAW,CAAC,iBAAmC;AACnD,cAAM,kBAAkB,MAAM,KAAK,KAAK,iBAAiB,aAAa,CAAC,EAAE;AAAA,UACvE,MAAM,KAAK,KAAK,YAAY,iBAAiB,aAAa,KAAK,CAAC,CAAC;AAAA,QACnE;AACA,mBAAW,YAAY,cAAc;AACnC,gBAAM,aAAa,MAAM,KAAK,SAAS,UAAU,EAAE,IAAI,OAAK,CAAY;AACxE,gBAAM,eAAe,MAAM,KAAK,SAAS,UAAU,EAAE,IAAI,OAAK,CAAY;AAC1E,cAAI,SAAS,SAAS,eAAe,WAAW,KAAK,OAAK,gBAAgB,SAAS,CAAC,CAAC,GAAG;AACtF,YAAC,KAAK,eAAe,EAA+B,YAAY,YAAY;AAAA,UAC9E;AAAA,QACF;AAAA,MACF;AACA,iBAAW,IAAI,iBAAiB,QAAQ;AACxC,eAAS,QAAQ,MAAM,EAAE,WAAW,MAAM,SAAS,KAAK,CAAC;AAEzD,YAAM,gBAAgB,MAAM,KAAK,KAAK,iBAAiB,aAAa,CAAC,EAAE;AAAA,QACrE,MAAM,KAAK,KAAK,YAAY,iBAAiB,aAAa,KAAK,CAAC,CAAC;AAAA,MACnE;AACA,MAAC,KAAK,eAAe,EAA+B,MAAM,KAAK,aAAa,GAAG,CAAC,CAAC;AAAA,IACnF;AAEA,UAAM,uBAAuB,WAA2B;AACtD,2BAAqB,KAAK,IAAI;AAC9B,eAAS,WAAW;AAAA,IACtB;AAAA,EACF;AACF;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/lib/qti-test/core/context/test.context.ts"],"sourcesContent":["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,qBAAqB;AAgBvB,IAAM,cAAc,cAAqC,OAAO,MAAM,CAAC;AAMvE,IAAM,cAAc,cAAqC,OAAO,aAAa,CAAC;","names":[]}
@@ -1,65 +0,0 @@
1
- // src/lib/decorators/watch.ts
2
- function watch(propertyName, options) {
3
- const resolvedOptions = {
4
- waitUntilFirstUpdate: false,
5
- ...options
6
- };
7
- return (proto, decoratedFnName) => {
8
- const { update } = proto;
9
- const watchedProperties = Array.isArray(propertyName) ? propertyName : [propertyName];
10
- proto.update = function(changedProps) {
11
- watchedProperties.forEach((property) => {
12
- const key = property;
13
- if (changedProps.has(key)) {
14
- const oldValue = changedProps.get(key);
15
- const newValue = this[key];
16
- if (oldValue !== newValue) {
17
- if (!resolvedOptions.waitUntilFirstUpdate || this.hasUpdated) {
18
- this[decoratedFnName](oldValue, newValue);
19
- }
20
- }
21
- }
22
- });
23
- update.call(this, changedProps);
24
- };
25
- };
26
- }
27
-
28
- // src/lib/decorators/live-query.ts
29
- function liveQuery(querySelector, _options) {
30
- let observer;
31
- return (proto, decoratedFnName) => {
32
- const { connectedCallback, disconnectedCallback } = proto;
33
- proto.connectedCallback = function() {
34
- connectedCallback.call(this);
35
- const callback = (mutationList) => {
36
- const elementsToWatch = Array.from(this.querySelectorAll(querySelector)).concat(
37
- Array.from(this.shadowRoot?.querySelectorAll(querySelector) || [])
38
- );
39
- for (const mutation of mutationList) {
40
- const addedNodes = Array.from(mutation.addedNodes).map((e) => e);
41
- const removedNodes = Array.from(mutation.addedNodes).map((e) => e);
42
- if (mutation.type === "childList" && addedNodes.find((n) => elementsToWatch.includes(n))) {
43
- this[decoratedFnName](addedNodes, removedNodes);
44
- }
45
- }
46
- };
47
- observer = new MutationObserver(callback);
48
- observer.observe(this, { childList: true, subtree: true });
49
- const elementsAdded = Array.from(this.querySelectorAll(querySelector)).concat(
50
- Array.from(this.shadowRoot?.querySelectorAll(querySelector) || [])
51
- );
52
- this[decoratedFnName](Array.from(elementsAdded), []);
53
- };
54
- proto.disconnectedCallback = function() {
55
- disconnectedCallback.call(this);
56
- observer.disconnect();
57
- };
58
- };
59
- }
60
-
61
- export {
62
- watch,
63
- liveQuery
64
- };
65
- //# sourceMappingURL=chunk-NUXEGEMP.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/lib/decorators/watch.ts","../src/lib/decorators/live-query.ts"],"sourcesContent":["import type { LitElement } from 'lit';\n\ntype UpdateHandler = (prev?: unknown, next?: unknown) => void;\n\ntype NonUndefined<A> = A extends undefined ? never : A;\n\nexport type UpdateHandlerFunctionKeys<T extends object> = {\n [K in keyof T]-?: NonUndefined<T[K]> extends UpdateHandler ? K : never;\n}[keyof T];\n\ninterface WatchOptions {\n /**\n * If true, will only start watching after the initial update/render\n */\n waitUntilFirstUpdate?: boolean;\n}\n\n/**\n * Runs when observed properties change, e.g. @property or @state, but before the component updates. To wait for an\n * update to complete after a change occurs, use `await this.updateComplete` in the handler. To start watching after the\n * initial update/render, use `{ waitUntilFirstUpdate: true }` or `this.hasUpdated` in the handler.\n *\n * Usage:\n *\n * @watch('propName')\n * handlePropChange(oldValue, newValue) {\n * ...\n * }\n */\nexport function watch(propertyName: string | string[], options?: WatchOptions) {\n const resolvedOptions: Required<WatchOptions> = {\n waitUntilFirstUpdate: false,\n ...options\n };\n return <ElemClass extends LitElement>(\n proto: ElemClass,\n decoratedFnName: UpdateHandlerFunctionKeys<ElemClass> | any\n ) => {\n // @ts-expect-error - update is a protected property\n const { update } = proto;\n const watchedProperties = Array.isArray(propertyName) ? propertyName : [propertyName];\n\n // @ts-expect-error - update is a protected property\n proto.update = function (this: ElemClass, changedProps: Map<keyof ElemClass, ElemClass[keyof ElemClass]>) {\n watchedProperties.forEach(property => {\n const key = property as keyof ElemClass;\n if (changedProps.has(key)) {\n const oldValue = changedProps.get(key);\n const newValue = this[key];\n\n if (oldValue !== newValue) {\n if (!resolvedOptions.waitUntilFirstUpdate || this.hasUpdated) {\n (this[decoratedFnName] as unknown as UpdateHandler)(oldValue, newValue);\n }\n }\n }\n });\n\n update.call(this, changedProps);\n };\n };\n}\n","// @watch decorator\n//\n// Runs when an observed property changes, e.g. @property or @state, but before the component updates.\n//\n// To wait for an update to complete after a change occurs, use `await this.updateComplete` in the handler. To start\n// watching after the initial update/render, use `{ waitUntilFirstUpdate: true }` or `this.hasUpdated` in the handler.\n//\n// Usage:\n//\n// @watch('propName')\n// handlePropChange(oldValue, newValue) {\n// ...\n// }\n\nimport type { LitElement } from 'lit';\n\ntype UpdateHandler = (prev?: unknown, next?: unknown) => void;\n\ntype NonUndefined<A> = A extends undefined ? never : A;\n\ntype UpdateHandlerFunctionKeys<T extends object> = {\n [K in keyof T]-?: NonUndefined<T[K]> extends UpdateHandler ? K : never;\n}[keyof T];\n\ninterface LiveQueryOptions {\n /**\n * If true, will only start watching after the initial update/render\n */\n}\n\nexport function liveQuery(querySelector: string, _options?: LiveQueryOptions) {\n let observer: MutationObserver;\n // const resolvedOptions: Required<LiveQueryOptions> = {\n // ...options\n // };\n return <ElemClass extends LitElement>(\n proto: ElemClass,\n decoratedFnName: UpdateHandlerFunctionKeys<ElemClass>\n ): void => {\n const { connectedCallback, disconnectedCallback } = proto;\n\n proto.connectedCallback = function (this: ElemClass) {\n connectedCallback.call(this);\n const callback = (mutationList: MutationRecord[]) => {\n const elementsToWatch = Array.from(this.querySelectorAll(querySelector)).concat(\n Array.from(this.shadowRoot?.querySelectorAll(querySelector) || [])\n );\n for (const mutation of mutationList) {\n const addedNodes = Array.from(mutation.addedNodes).map(e => e as Element);\n const removedNodes = Array.from(mutation.addedNodes).map(e => e as Element);\n if (mutation.type === 'childList' && addedNodes.find(n => elementsToWatch.includes(n))) {\n (this[decoratedFnName] as unknown as UpdateHandler)(addedNodes, removedNodes);\n }\n }\n };\n observer = new MutationObserver(callback);\n observer.observe(this, { childList: true, subtree: true });\n\n const elementsAdded = Array.from(this.querySelectorAll(querySelector)).concat(\n Array.from(this.shadowRoot?.querySelectorAll(querySelector) || [])\n );\n (this[decoratedFnName] as unknown as UpdateHandler)(Array.from(elementsAdded), []);\n };\n\n proto.disconnectedCallback = function (this: ElemClass) {\n disconnectedCallback.call(this);\n observer.disconnect();\n };\n };\n}\n"],"mappings":";AA6BO,SAAS,MAAM,cAAiC,SAAwB;AAC7E,QAAM,kBAA0C;AAAA,IAC9C,sBAAsB;AAAA,IACtB,GAAG;AAAA,EACL;AACA,SAAO,CACL,OACA,oBACG;AAEH,UAAM,EAAE,OAAO,IAAI;AACnB,UAAM,oBAAoB,MAAM,QAAQ,YAAY,IAAI,eAAe,CAAC,YAAY;AAGpF,UAAM,SAAS,SAA2B,cAAgE;AACxG,wBAAkB,QAAQ,cAAY;AACpC,cAAM,MAAM;AACZ,YAAI,aAAa,IAAI,GAAG,GAAG;AACzB,gBAAM,WAAW,aAAa,IAAI,GAAG;AACrC,gBAAM,WAAW,KAAK,GAAG;AAEzB,cAAI,aAAa,UAAU;AACzB,gBAAI,CAAC,gBAAgB,wBAAwB,KAAK,YAAY;AAC5D,cAAC,KAAK,eAAe,EAA+B,UAAU,QAAQ;AAAA,YACxE;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAC;AAED,aAAO,KAAK,MAAM,YAAY;AAAA,IAChC;AAAA,EACF;AACF;;;AC/BO,SAAS,UAAU,eAAuB,UAA6B;AAC5E,MAAI;AAIJ,SAAO,CACL,OACA,oBACS;AACT,UAAM,EAAE,mBAAmB,qBAAqB,IAAI;AAEpD,UAAM,oBAAoB,WAA2B;AACnD,wBAAkB,KAAK,IAAI;AAC3B,YAAM,WAAW,CAAC,iBAAmC;AACnD,cAAM,kBAAkB,MAAM,KAAK,KAAK,iBAAiB,aAAa,CAAC,EAAE;AAAA,UACvE,MAAM,KAAK,KAAK,YAAY,iBAAiB,aAAa,KAAK,CAAC,CAAC;AAAA,QACnE;AACA,mBAAW,YAAY,cAAc;AACnC,gBAAM,aAAa,MAAM,KAAK,SAAS,UAAU,EAAE,IAAI,OAAK,CAAY;AACxE,gBAAM,eAAe,MAAM,KAAK,SAAS,UAAU,EAAE,IAAI,OAAK,CAAY;AAC1E,cAAI,SAAS,SAAS,eAAe,WAAW,KAAK,OAAK,gBAAgB,SAAS,CAAC,CAAC,GAAG;AACtF,YAAC,KAAK,eAAe,EAA+B,YAAY,YAAY;AAAA,UAC9E;AAAA,QACF;AAAA,MACF;AACA,iBAAW,IAAI,iBAAiB,QAAQ;AACxC,eAAS,QAAQ,MAAM,EAAE,WAAW,MAAM,SAAS,KAAK,CAAC;AAEzD,YAAM,gBAAgB,MAAM,KAAK,KAAK,iBAAiB,aAAa,CAAC,EAAE;AAAA,QACrE,MAAM,KAAK,KAAK,YAAY,iBAAiB,aAAa,KAAK,CAAC,CAAC;AAAA,MACnE;AACA,MAAC,KAAK,eAAe,EAA+B,MAAM,KAAK,aAAa,GAAG,CAAC,CAAC;AAAA,IACnF;AAEA,UAAM,uBAAuB,WAA2B;AACtD,2BAAqB,KAAK,IAAI;AAC9B,eAAS,WAAW;AAAA,IACtB;AAAA,EACF;AACF;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/lib/qti-test/components/test-component.abstract.ts","../src/lib/decorators/prop-internal-state.ts","../src/lib/qti-test/core/context/test.context.ts"],"sourcesContent":["import { consume } from '@lit/context';\nimport { LitElement } from 'lit';\nimport { state } from 'lit/decorators.js';\nimport { propInternalState } from '../../decorators';\nimport { testContext, testElement, TestElement, TestContext } from '../core/context';\nimport { watch } from '../../decorators/watch';\n\nexport abstract class TestComponent extends LitElement {\n @propInternalState({\n type: Boolean,\n reflect: true,\n aria: 'ariaDisabled' // Maps to `aria-disabled` attribute\n })\n public disabled = true;\n\n @state()\n @consume({ context: testContext, subscribe: true })\n protected _testContext?: TestContext;\n\n @state()\n @consume({ context: testElement, subscribe: true })\n protected _testElement?: TestElement;\n @watch('_testElement')\n _handleTestElementChange(_oldValue: TestElement, newValue: TestElement) {\n if (newValue.el) {\n this.disabled = false;\n }\n }\n\n protected _internals: ElementInternals;\n\n protected items;\n protected itemIndex;\n protected view;\n\n constructor() {\n super();\n this._internals = this.attachInternals();\n }\n\n protected willUpdate(changedProperties: Map<string | number | symbol, unknown>) {\n if (changedProperties.has('_testContext')) {\n const { items = [], navItemId } = this._testContext ?? {};\n this.itemIndex = items.findIndex(item => item.identifier === navItemId);\n this.items = items;\n this.view = this._testContext?.view;\n }\n }\n\n protected _switchView(view: string) {\n this.dispatchEvent(\n new CustomEvent('on-test-switch-view', {\n composed: true,\n bubbles: true,\n detail: view\n })\n );\n }\n\n protected _requestItem(identifier: string): void {\n this.dispatchEvent(\n new CustomEvent('qti-request-test-item', {\n composed: true,\n bubbles: true,\n detail: identifier\n })\n );\n }\n}\n","import { ReactiveElement } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { PropertyDeclaration } from 'lit';\n\n// Extended decorator options\ninterface InternalStateOptions extends PropertyDeclaration {\n aria?: string; // Corresponding ARIA attribute, e.g., 'aria-disabled'\n}\n\nexport function propInternalState(options: InternalStateOptions) {\n return (protoOrDescriptor: any, name: string) => {\n // Apply the default Lit `@property` decorator\n property(options)(protoOrDescriptor, name);\n\n // Intercept the property descriptor to enhance functionality\n const key = `__${name}`; // Internal backing field\n\n Object.defineProperty(protoOrDescriptor, name, {\n get() {\n return this[key];\n },\n set(value: any) {\n const oldValue = this[key];\n this[key] = value;\n\n // Trigger updates if value changes\n if (oldValue !== value) {\n // Update internals state\n if (this._internals?.states) {\n const stateName = name.toLowerCase();\n if (value) {\n this._internals.states.add(`--${stateName}`);\n } else {\n this._internals.states.delete(`--${stateName}`);\n }\n }\n\n // Update ARIA attributes if specified\n if (options.aria && this._internals) {\n const ariaAttribute = options.aria;\n if (value) {\n this._internals[ariaAttribute] = 'true';\n } else {\n this._internals[ariaAttribute] = null;\n }\n }\n\n // Request an update\n (this as ReactiveElement).requestUpdate(name, oldValue);\n }\n },\n configurable: true,\n enumerable: true\n });\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,kBAAkB;AAC3B,SAAS,aAAa;;;ACDtB,SAAS,gBAAgB;AAQlB,SAAS,kBAAkB,SAA+B;AAC/D,SAAO,CAAC,mBAAwB,SAAiB;AAE/C,aAAS,OAAO,EAAE,mBAAmB,IAAI;AAGzC,UAAM,MAAM,KAAK,IAAI;AAErB,WAAO,eAAe,mBAAmB,MAAM;AAAA,MAC7C,MAAM;AACJ,eAAO,KAAK,GAAG;AAAA,MACjB;AAAA,MACA,IAAI,OAAY;AACd,cAAM,WAAW,KAAK,GAAG;AACzB,aAAK,GAAG,IAAI;AAGZ,YAAI,aAAa,OAAO;AAEtB,cAAI,KAAK,YAAY,QAAQ;AAC3B,kBAAM,YAAY,KAAK,YAAY;AACnC,gBAAI,OAAO;AACT,mBAAK,WAAW,OAAO,IAAI,KAAK,SAAS,EAAE;AAAA,YAC7C,OAAO;AACL,mBAAK,WAAW,OAAO,OAAO,KAAK,SAAS,EAAE;AAAA,YAChD;AAAA,UACF;AAGA,cAAI,QAAQ,QAAQ,KAAK,YAAY;AACnC,kBAAM,gBAAgB,QAAQ;AAC9B,gBAAI,OAAO;AACT,mBAAK,WAAW,aAAa,IAAI;AAAA,YACnC,OAAO;AACL,mBAAK,WAAW,aAAa,IAAI;AAAA,YACnC;AAAA,UACF;AAGA,UAAC,KAAyB,cAAc,MAAM,QAAQ;AAAA,QACxD;AAAA,MACF;AAAA,MACA,cAAc;AAAA,MACd,YAAY;AAAA,IACd,CAAC;AAAA,EACH;AACF;;;ACvDA,SAAS,qBAAqB;AAgBvB,IAAM,cAAc,cAAqC,OAAO,MAAM,CAAC;AAMvE,IAAM,cAAc,cAAqC,OAAO,aAAa,CAAC;;;AFf9E,IAAe,gBAAf,cAAqC,WAAW;AAAA,EA4BrD,cAAc;AACZ,UAAM;AAvBR,SAAO,WAAW;AAwBhB,SAAK,aAAa,KAAK,gBAAgB;AAAA,EACzC;AAAA,EAfA,yBAAyB,WAAwB,UAAuB;AACtE,QAAI,SAAS,IAAI;AACf,WAAK,WAAW;AAAA,IAClB;AAAA,EACF;AAAA,EAaU,WAAW,mBAA2D;AAC9E,QAAI,kBAAkB,IAAI,cAAc,GAAG;AACzC,YAAM,EAAE,QAAQ,CAAC,GAAG,UAAU,IAAI,KAAK,gBAAgB,CAAC;AACxD,WAAK,YAAY,MAAM,UAAU,UAAQ,KAAK,eAAe,SAAS;AACtE,WAAK,QAAQ;AACb,WAAK,OAAO,KAAK,cAAc;AAAA,IACjC;AAAA,EACF;AAAA,EAEU,YAAY,MAAc;AAClC,SAAK;AAAA,MACH,IAAI,YAAY,uBAAuB;AAAA,QACrC,UAAU;AAAA,QACV,SAAS;AAAA,QACT,QAAQ;AAAA,MACV,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEU,aAAa,YAA0B;AAC/C,SAAK;AAAA,MACH,IAAI,YAAY,yBAAyB;AAAA,QACvC,UAAU;AAAA,QACV,SAAS;AAAA,QACT,QAAQ;AAAA,MACV,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAvDS;AAAA,EALN,kBAAkB;AAAA,IACjB,MAAM;AAAA,IACN,SAAS;AAAA,IACT,MAAM;AAAA;AAAA,EACR,CAAC;AAAA,GALmB,cAMb;AAIG;AAAA,EAFT,MAAM;AAAA,EACN,QAAQ,EAAE,SAAS,aAAa,WAAW,KAAK,CAAC;AAAA,GAT9B,cAUV;AAIA;AAAA,EAFT,MAAM;AAAA,EACN,QAAQ,EAAE,SAAS,aAAa,WAAW,KAAK,CAAC;AAAA,GAb9B,cAcV;AAEV;AAAA,EADC,MAAM,cAAc;AAAA,GAfD,cAgBpB;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/lib/qti-test/core/components/test-container.ts","../src/lib/qti-test/core/qti-test.ts","../src/lib/qti-test/core/mixins/test-loader.mixin.ts","../src/lib/qti-test/core/mixins/test-navigation.mixin.ts","../src/lib/qti-test/core/mixins/test-view.mixin.ts","../src/lib/qti-test/core/test-base.ts","../src/lib/qti-test/core/qti-assessment-test/qti-assessment-item-ref.ts","../src/lib/qti-test/core/qti-assessment-test/qti-assessment-section.ts","../src/lib/qti-test/core/qti-assessment-test/qti-assessment-test.ts","../src/lib/qti-test/core/qti-assessment-test/qti-test-part.ts"],"sourcesContent":["import { LitElement, html } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { until } from 'lit/directives/until.js';\nimport { watch } from '../../../decorators/watch';\nimport itemCss from '../../../../item.css?inline';\nimport { qtiTransformTest } from '../../../qti-transformers';\n\n/**\n * `<test-container>` is a custom element designed for hosting the qti-assessment-item.\n * The `qti-assessment-test` will be placed inside the shadow DOM of this element.\n * The element loads the test from the provided URL and renders it inside the shadow DOM.\n *\n * ```html\n * <qti-test>\n * <test-container class=\"m-4 bg-white\" test-url=\"./path/to/assessmenttest.xml\"></test-container>\n * </qti-test>\n * ```\n */\n@customElement('test-container')\nexport class TestContainer extends LitElement {\n /** URL of the item to load */\n @property({ type: String, attribute: 'test-url' })\n testURL: string = null;\n\n /** A parsed HTML document */\n @state()\n testDoc: DocumentFragment = null;\n\n /** The raw XML string */\n @state()\n testXML: string = null;\n\n /** Template content if provided */\n private templateContent = null;\n\n @watch('testURL', { waitUntilFirstUpdate: true })\n protected async handleTestURLChange() {\n if (!this.testURL) return;\n try {\n const api = await qtiTransformTest().load(this.testURL);\n this.testDoc = api.htmlDoc();\n } catch (error) {\n console.error('Error loading or parsing XML:', error);\n }\n }\n\n @watch('testXML', { waitUntilFirstUpdate: true })\n protected handleTestXMLChange() {\n if (!this.testXML) return;\n try {\n this.testDoc = qtiTransformTest().parse(this.testXML).htmlDoc();\n } catch (error) {\n console.error('Error parsing XML:', error);\n }\n }\n\n async connectedCallback(): Promise<void> {\n super.connectedCallback();\n this.initializeTemplateContent();\n this.applyStyles();\n if (this.testURL) {\n this.handleTestURLChange();\n }\n if (this.testXML) {\n this.handleTestXMLChange();\n }\n }\n\n private initializeTemplateContent() {\n const template = this.querySelector('template') as HTMLTemplateElement;\n this.templateContent = template ? template.content : html``;\n }\n\n private applyStyles() {\n const sheet = new CSSStyleSheet();\n sheet.replaceSync(itemCss);\n this.shadowRoot.adoptedStyleSheets = [sheet];\n }\n\n render() {\n return html`\n ${this.templateContent}\n <slot></slot>\n ${until(this.testDoc, html`<span>Loading...</span>`)}\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'test-container': TestContainer;\n }\n}\n","import { html } from 'lit';\nimport { customElement } from 'lit/decorators.js';\nimport { TestLoaderMixin, TestNavigationMixin, TestViewMixin } from './mixins';\nimport { TestBase } from './test-base';\n\n/**\n * `<qti-test>` is a custom element designed for rendering and interacting with QTI (Question and Test Interoperability) tests.\n *\n * This component leverages several mixins to provide functionality for loading, navigating, processing, and displaying QTI test assessments.\n *\n * ### Example Usage\n *\n * Minimal example including navigation:\n *\n * ```html\n * <qti-test>\n * <test-container test-url=\"./path/to/assessment.xml\"></test-container>\n * <nav class=\"flex\">\n * <test-prev></test-prev>\n * <test-next></test-next>\n * </nav>\n * </qti-test>\n * ```\n *\n * Use the following file structure\n * A qti-test loads a QTI3.0 assessmenttest.xml file from a package folder.\n *\n * ```plaintext\n * Root/\n * ├── index.html\n * └── /assets/api/examples/\n * ├── assessmenttest.xml\n * └── imsmanifest.xml\n *\n * ```\n *\n * ### Test components\n *\n * Use test components inside the qti-test component for added functionality.\n * ### Test next\n * `<test-next> | TestNext`\n *\n * ### Test prev\n *\n * `<test-prev> | TestPrev`\n * ### Test components\n *\n * You can use normal class names to style the elements.\n * And you can use the `test-prev` and `test-next` elements to navigate through the test.\n *\n */\n@customElement('qti-test')\nexport class QtiTest extends TestLoaderMixin(TestNavigationMixin(TestViewMixin(TestBase))) {\n /**\n * Renders the component's template.\n * Provides a default `<slot>` for content projection.\n */\n render() {\n return html`<slot></slot>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'qti-test': QtiTest;\n }\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/test.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","import { provide } from '@lit/context';\nimport { LitElement } from 'lit';\nimport { state } from 'lit/decorators.js';\nimport { TestContext, testContext, TestElement, testElement } from './context';\nimport { QtiAssessmentTest } from './qti-assessment-test';\nimport { ItemContext, QtiAssessmentItem, VariableValue } from '../../qti-components';\n\nexport abstract class TestBase extends LitElement {\n @state()\n @provide({ context: testContext })\n protected _testContext: Readonly<TestContext> = { items: [], testOutcomeVariables: [] };\n\n @state()\n @provide({ context: testElement })\n protected testElement: TestElement = { el: null };\n\n constructor() {\n super();\n\n this.addEventListener('qti-assessment-test-connected', (e: CustomEvent<QtiAssessmentTest>) => {\n const qtiAssessmentTest = e.detail;\n\n const items = Array.from(qtiAssessmentTest.querySelectorAll('qti-assessment-item-ref')).map(\n (itemRef): ItemContext & { category: string } => ({\n href: itemRef.href,\n identifier: itemRef.identifier,\n category: itemRef.category,\n variables: [{ identifier: 'completionStatus', value: 'not_attempted', type: 'outcome' }]\n })\n );\n this.testElement = { el: qtiAssessmentTest };\n this._testContext = { ...this._testContext, items };\n });\n this.addEventListener('qti-assessment-item-connected', (e: CustomEvent<QtiAssessmentItem>) => {\n this._updateItemInTestContext(e.detail);\n });\n this.addEventListener('qti-outcome-changed', e => {\n const assessmentitem = e.composedPath()[0] as QtiAssessmentItem;\n this._updateItemVariablesInTestContext(assessmentitem.identifier, assessmentitem.variables);\n });\n\n // this.addEventListener(\n // 'qti-assessment-item-ref-connected',\n // (e: CustomEvent<{ href: string; identifier: string; category: string }> & { target: QtiAssessmentItemRef }) => {\n // this._addItemToTestContext(e);\n // }\n // );\n }\n\n get context(): TestContext {\n return this._testContext;\n }\n\n // /* restores the context by updating existing items and adding new items from the \"contextToRestore\" parameter into the \"this._context.items\" array. */\n set context(testContext: TestContext) {\n if (testContext === null || testContext === undefined) return;\n this._testContext = { ...testContext }; // Clone the context to avoid modifying the original object\n // // append the items that are not yet in the context and replace the ones that are\n testContext.items?.forEach(itemContext => {\n const existingItemContext = this._testContext.items.find(i => i.identifier === itemContext.identifier);\n if (existingItemContext) {\n existingItemContext.variables = itemContext.variables;\n } else {\n this._testContext.items.push(itemContext);\n }\n });\n }\n\n private _updateItemVariablesInTestContext(\n identifier: string,\n variables: VariableValue<string | string[] | null>[]\n ): void {\n // Update the test context with modified variables for the specified item\n this._testContext = {\n ...this._testContext, // Spread existing test context properties\n items: this._testContext.items.map(itemContext => {\n // If the item identifier doesn't match, keep it unchanged\n if (itemContext.identifier !== identifier) {\n return itemContext;\n }\n\n // Update the matching item with new variables\n return {\n ...itemContext, // Keep other properties of the item context\n variables: variables.map(variable => {\n // Find a matching variable in the current item context\n const matchingVariable = itemContext.variables.find(v => v.identifier === variable.identifier);\n\n // Merge matching variable with the new one, or use the new variable if no match\n return matchingVariable ? { ...matchingVariable, ...variable } : variable;\n })\n };\n })\n };\n }\n\n /**\n * Updates the variables of an assessment item in the test context.\n * - Matches the assessment item with the corresponding test context item.\n * - If the item is not found, logs a warning.\n * - Updates variables in the test context if exactly one variable exists.\n * - Otherwise, syncs the assessment item's variables with the test context.\n *\n * @param assessmentItem - The assessment item to update.\n */\n private _updateItemInTestContext = (assessmentItem: QtiAssessmentItem): void => {\n const { identifier, variables } = assessmentItem;\n\n // console.log(this._testContext);\n\n // Find the corresponding item in the test context by identifier\n const itemContext = this._testContext.items.find(i => i?.identifier === identifier);\n\n if (!itemContext) {\n console.warn(`Item IDs between assessment.xml and item.xml should match: ${identifier} is not found!`);\n return;\n }\n\n // Update variables in the test context or sync them to the assessment item\n if (itemContext.variables?.length === 1) {\n // The loaded qti-assessment-item itself has variables which are not in test context yet.\n this._updateItemVariablesInTestContext(identifier, variables);\n } else {\n // Sync the assessment item's variables with the test context\n assessmentItem.variables = [...(itemContext.variables || [])];\n }\n };\n\n // private _addItemToTestContext(\n // e: CustomEvent<{ href: string; identifier: string; category: string }> & { target: QtiAssessmentItemRef }\n // ): void {\n // const { href, identifier, category } = e.detail;\n\n // // Update test context items, adding a new item if the identifier is not already in the list\n // if (!this._testContext.items.some(item => item.identifier === identifier)) {\n // this._testContext.items.push({\n // href,\n // identifier,\n // category,\n // variables: [{ identifier: 'completionStatus', value: 'not_attempted', type: 'outcome' }]\n // // category: e.target.category\n // });\n // }\n // }\n\n connectedCallback(): void {\n super.connectedCallback();\n this.setAttribute('qti-test', '');\n }\n}\n","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 { 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":["html","customElement","LitElement","state","LitElement","testContext","state","html","customElement","html","LitElement","property","LitElement","html","property","consume","html","LitElement","property","stringToBooleanConverter","LitElement","html","property","consume","consume","html","LitElement","customElement","property","LitElement","html","property","consume","customElement","html","LitElement","customElement","property","LitElement","html","property","customElement"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/lib/qti-test/components/test-view.ts"],"sourcesContent":["import { html } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { TestComponent } from './test-component.abstract';\nimport { watch } from '../../decorators/watch';\n\n@customElement('test-view')\nexport class TestView extends TestComponent {\n static DEFAULT_VIEW_OPTIONS = ['author', 'candidate', 'proctor', 'scorer', 'testConstructor', 'tutor'];\n\n /** label accompanying the select view dropdown */\n @property({ type: String })\n label = 'view';\n\n /** The options to display in the dropdown, default: ['author', 'candidate', 'proctor', 'scorer', 'testConstructor', 'tutor'] */\n @property({ type: String, attribute: 'view-options' }) viewOptions;\n @watch('viewOptions', { waitUntilFirstUpdate: true })\n protected _handleViewOptionsChange = () => {\n this.updateViewOptions();\n };\n\n connectedCallback(): void {\n super.connectedCallback();\n this.updateViewOptions();\n }\n\n @state()\n private _viewOptions: string[] = TestView.DEFAULT_VIEW_OPTIONS;\n\n private updateViewOptions() {\n if (this.viewOptions) {\n const options = this.viewOptions.split(',').map(opt => opt.trim());\n this._viewOptions = options.filter(opt => TestView.DEFAULT_VIEW_OPTIONS.includes(opt));\n } else {\n this._viewOptions = TestView.DEFAULT_VIEW_OPTIONS;\n }\n }\n\n render() {\n return html`\n <label part=\"label\" for=\"viewSelect\">${this.label}</label>\n <select\n part=\"select\"\n id=\"viewSelect\"\n .disabled=${this.disabled}\n @change=${(e: Event) => {\n const el = e.target as HTMLSelectElement;\n this._switchView(el.value);\n }}\n >\n ${this._viewOptions.map(v => html`<option value=\"${v}\" ?selected=${v === this.view}>${v}</option>`)}\n </select>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'test-view': TestView;\n }\n}\n"],"mappings":";;;;;;;;;;;AAAA,SAAS,YAAY;AACrB,SAAS,eAAe,UAAU,aAAa;AAKxC,IAAM,WAAN,cAAuB,cAAc;AAAA,EAArC;AAAA;AAKL,iBAAQ;AAKR,SAAU,2BAA2B,MAAM;AACzC,WAAK,kBAAkB;AAAA,IACzB;AAQA,SAAQ,eAAyB,SAAS;AAAA;AAAA,EAN1C,oBAA0B;AACxB,UAAM,kBAAkB;AACxB,SAAK,kBAAkB;AAAA,EACzB;AAAA,EAKQ,oBAAoB;AAC1B,QAAI,KAAK,aAAa;AACpB,YAAM,UAAU,KAAK,YAAY,MAAM,GAAG,EAAE,IAAI,SAAO,IAAI,KAAK,CAAC;AACjE,WAAK,eAAe,QAAQ,OAAO,SAAO,SAAS,qBAAqB,SAAS,GAAG,CAAC;AAAA,IACvF,OAAO;AACL,WAAK,eAAe,SAAS;AAAA,IAC/B;AAAA,EACF;AAAA,EAEA,SAAS;AACP,WAAO;AAAA,6CACkC,KAAK,KAAK;AAAA;AAAA;AAAA;AAAA,oBAInC,KAAK,QAAQ;AAAA,kBACf,CAAC,MAAa;AACtB,YAAM,KAAK,EAAE;AACb,WAAK,YAAY,GAAG,KAAK;AAAA,IAC3B,CAAC;AAAA;AAAA,UAEC,KAAK,aAAa,IAAI,OAAK,sBAAsB,CAAC,eAAe,MAAM,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC;AAAA;AAAA;AAAA,EAGzG;AACF;AA/Ca,SACJ,uBAAuB,CAAC,UAAU,aAAa,WAAW,UAAU,mBAAmB,OAAO;AAIrG;AAAA,EADC,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GAJf,SAKX;AAGuD;AAAA,EAAtD,SAAS,EAAE,MAAM,QAAQ,WAAW,eAAe,CAAC;AAAA,GAR1C,SAQ4C;AAE7C;AAAA,EADT,MAAM,eAAe,EAAE,sBAAsB,KAAK,CAAC;AAAA,GATzC,SAUD;AAUF;AAAA,EADP,MAAM;AAAA,GAnBI,SAoBH;AApBG,WAAN;AAAA,EADN,cAAc,WAAW;AAAA,GACb;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/lib/qti-test/components/test-paging-buttons-stamp.ts"],"sourcesContent":["import { html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\nimport { TestComponent } from './test-component.abstract';\nimport { prepareTemplate } from 'stampino';\n\n@customElement('test-paging-buttons-stamp')\nexport class TestPagingButtonsStamp extends TestComponent {\n @property({ type: Number, attribute: 'max-displayed-items' })\n private maxDisplayedItems = 2;\n\n @property({ type: String, attribute: 'skip-on-category' })\n private skipOnCategory = 'dep-informational';\n\n protected createRenderRoot() {\n return this;\n }\n\n constructor() {\n super();\n this._internals.ariaLabel = 'pagination';\n }\n\n render() {\n const items = this._testContext.items.reduce(\n (acc, item) => {\n const isDepInfoItem = item.category?.split(' ').includes(this.skipOnCategory);\n const newIndex = isDepInfoItem ? 'i' : acc.counter++;\n acc.result.push({\n ...item,\n newIndex // Assign the new index, which only increments for non-info items\n });\n return acc;\n },\n { counter: 0, result: [] }\n ).result;\n\n // Get the index of the current item\n const itemIndex = items.findIndex(item => item.identifier === this._testContext.navItemId);\n\n // Calculate the start and end range based on maxDisplayedItems\n const start = Math.max(0, itemIndex - this.maxDisplayedItems);\n const end = Math.min(items.length, itemIndex + this.maxDisplayedItems + 1);\n\n // console.log('start', start, 'end', end);\n // Adjust the items array to only include the clamped range\n const clampedItems = items.slice(start, end);\n\n return html`\n ${clampedItems.map(item => {\n const rawscore = item.variables.find(vr => vr.identifier == 'SCORE');\n const score = parseInt(rawscore?.value?.toString());\n const completionStatus = item.variables.find(v => v.identifier === 'completionStatus')?.value;\n const type = item.category !== this.skipOnCategory ? 'regular' : 'info'; // rounded-full\n const active = this._testContext.navItemId === item.identifier; // !border-sky-600\n const correct =\n this._testContext.view === 'scorer' && type == 'regular' && score !== undefined && !isNaN(score) && score > 0; // bg-green-100 border-green-400\n const incorrect =\n this._testContext.view === 'scorer' &&\n type == 'regular' &&\n score !== undefined &&\n !isNaN(score) &&\n score <= 0; // bg-red-100 border-red-400\n const answered =\n this._testContext.view === 'candidate' &&\n completionStatus === 'completed' &&\n item.category !== this.skipOnCategory; // bg-slate-300 shadow-sm\n\n const computedItem = {\n ...item,\n type,\n active,\n correct,\n incorrect,\n answered\n };\n\n const templateElement = this.firstElementChild as HTMLTemplateElement;\n const myTemplate = prepareTemplate(templateElement);\n return myTemplate({ item: computedItem });\n })}\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'test-paging-buttons-stamp': TestPagingButtonsStamp;\n }\n}\n"],"mappings":";;;;;;;;AAAA,SAAS,YAAY;AACrB,SAAS,eAAe,gBAAgB;AAGxC,SAAS,uBAAuB;AAGzB,IAAM,yBAAN,cAAqC,cAAc;AAAA,EAWxD,cAAc;AACZ,UAAM;AAVR,SAAQ,oBAAoB;AAG5B,SAAQ,iBAAiB;AAQvB,SAAK,WAAW,YAAY;AAAA,EAC9B;AAAA,EAPU,mBAAmB;AAC3B,WAAO;AAAA,EACT;AAAA,EAOA,SAAS;AACP,UAAM,QAAQ,KAAK,aAAa,MAAM;AAAA,MACpC,CAAC,KAAK,SAAS;AACb,cAAM,gBAAgB,KAAK,UAAU,MAAM,GAAG,EAAE,SAAS,KAAK,cAAc;AAC5E,cAAM,WAAW,gBAAgB,MAAM,IAAI;AAC3C,YAAI,OAAO,KAAK;AAAA,UACd,GAAG;AAAA,UACH;AAAA;AAAA,QACF,CAAC;AACD,eAAO;AAAA,MACT;AAAA,MACA,EAAE,SAAS,GAAG,QAAQ,CAAC,EAAE;AAAA,IAC3B,EAAE;AAGF,UAAM,YAAY,MAAM,UAAU,UAAQ,KAAK,eAAe,KAAK,aAAa,SAAS;AAGzF,UAAM,QAAQ,KAAK,IAAI,GAAG,YAAY,KAAK,iBAAiB;AAC5D,UAAM,MAAM,KAAK,IAAI,MAAM,QAAQ,YAAY,KAAK,oBAAoB,CAAC;AAIzE,UAAM,eAAe,MAAM,MAAM,OAAO,GAAG;AAE3C,WAAO;AAAA,QACH,aAAa,IAAI,UAAQ;AACzB,YAAM,WAAW,KAAK,UAAU,KAAK,QAAM,GAAG,cAAc,OAAO;AACnE,YAAM,QAAQ,SAAS,UAAU,OAAO,SAAS,CAAC;AAClD,YAAM,mBAAmB,KAAK,UAAU,KAAK,OAAK,EAAE,eAAe,kBAAkB,GAAG;AACxF,YAAM,OAAO,KAAK,aAAa,KAAK,iBAAiB,YAAY;AACjE,YAAM,SAAS,KAAK,aAAa,cAAc,KAAK;AACpD,YAAM,UACJ,KAAK,aAAa,SAAS,YAAY,QAAQ,aAAa,UAAU,UAAa,CAAC,MAAM,KAAK,KAAK,QAAQ;AAC9G,YAAM,YACJ,KAAK,aAAa,SAAS,YAC3B,QAAQ,aACR,UAAU,UACV,CAAC,MAAM,KAAK,KACZ,SAAS;AACX,YAAM,WACJ,KAAK,aAAa,SAAS,eAC3B,qBAAqB,eACrB,KAAK,aAAa,KAAK;AAEzB,YAAM,eAAe;AAAA,QACnB,GAAG;AAAA,QACH;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAEA,YAAM,kBAAkB,KAAK;AAC7B,YAAM,aAAa,gBAAgB,eAAe;AAClD,aAAO,WAAW,EAAE,MAAM,aAAa,CAAC;AAAA,IAC1C,CAAC,CAAC;AAAA;AAAA,EAEN;AACF;AA1EU;AAAA,EADP,SAAS,EAAE,MAAM,QAAQ,WAAW,sBAAsB,CAAC;AAAA,GADjD,uBAEH;AAGA;AAAA,EADP,SAAS,EAAE,MAAM,QAAQ,WAAW,mBAAmB,CAAC;AAAA,GAJ9C,uBAKH;AALG,yBAAN;AAAA,EADN,cAAc,2BAA2B;AAAA,GAC7B;","names":[]}
File without changes