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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (529) hide show
  1. package/cdn/chunk-4DFVJE2A.js +48 -0
  2. package/cdn/chunk-4I75QSIL.js +8 -0
  3. package/cdn/chunk-5WCOPF7O.js +73 -0
  4. package/cdn/chunk-66PERJA3.js +939 -0
  5. package/cdn/chunk-6WNSQ7U6.js +939 -0
  6. package/cdn/chunk-A536ZOJJ.js +43 -0
  7. package/cdn/chunk-AT2C24P4.js +8 -0
  8. package/cdn/chunk-BLKKKK6C.js +11 -0
  9. package/cdn/chunk-DC2R556M.js +5 -0
  10. package/cdn/chunk-GALSGMIP.js +5 -0
  11. package/cdn/chunk-IXSX4SJX.js +1 -0
  12. package/cdn/chunk-KYOTSBCX.js +1 -0
  13. package/cdn/chunk-L4TDHAKL.js +24 -0
  14. package/cdn/chunk-M6AATWPS.js +59 -0
  15. package/cdn/{chunk-L26FOTPN.js → chunk-MFWSHIPH.js} +1 -1
  16. package/cdn/chunk-QGKK4T2J.js +8 -0
  17. package/cdn/chunk-ROXN2HIJ.js +8 -0
  18. package/cdn/chunk-SQDSHH6N.js +3539 -0
  19. package/cdn/chunk-TJMODUN5.js +8 -0
  20. package/cdn/chunk-Z6SKK5ZX.js +8 -0
  21. package/cdn/chunks/chunk-3V6LA7B3.js +8 -0
  22. package/cdn/chunks/chunk-4ILXLVT5.js +3545 -0
  23. package/cdn/chunks/chunk-4PEUIMDK.js +8 -0
  24. package/cdn/{chunk-DLMFCDQX.js → chunks/chunk-4UJBK6JO.js} +1 -1
  25. package/cdn/chunks/chunk-4WXQYE2P.js +8 -0
  26. package/cdn/chunks/chunk-5BR5CJFH.js +24 -0
  27. package/cdn/chunks/chunk-5FCXUJAG.js +23 -0
  28. package/cdn/chunks/chunk-5GCSZ3CH.js +73 -0
  29. package/cdn/chunks/chunk-5P7CTN7Q.js +11 -0
  30. package/cdn/chunks/chunk-5X76K77R.js +8 -0
  31. package/cdn/chunks/chunk-6MCYE7P5.js +1 -0
  32. package/cdn/chunks/chunk-6S4CDN3T.js +43 -0
  33. package/cdn/chunks/chunk-76VGZJCP.js +934 -0
  34. package/cdn/chunks/chunk-7XYBFL7U.js +934 -0
  35. package/cdn/chunks/chunk-AJJJAZWM.js +1 -0
  36. package/cdn/chunks/chunk-ARHBUT6F.js +5 -0
  37. package/cdn/chunks/chunk-AUHO2E7V.js +934 -0
  38. package/cdn/chunks/chunk-CZ3CSGCE.js +934 -0
  39. package/cdn/chunks/chunk-D3GR6AUG.js +43 -0
  40. package/cdn/chunks/chunk-DZCKF45D.js +5 -0
  41. package/cdn/chunks/chunk-EFU4L43Q.js +8 -0
  42. package/cdn/chunks/chunk-FM5C34DM.js +934 -0
  43. package/cdn/chunks/chunk-FRS2J3OS.js +59 -0
  44. package/cdn/chunks/chunk-GMK2YRB2.js +934 -0
  45. package/cdn/chunks/chunk-H2V2RXUW.js +11 -0
  46. package/cdn/chunks/chunk-HUMOYGEM.js +43 -0
  47. package/cdn/chunks/chunk-IAP2CEE7.js +1 -0
  48. package/cdn/chunks/chunk-IMJOPCFR.js +1 -0
  49. package/cdn/chunks/chunk-IQZ7AOCQ.js +8 -0
  50. package/cdn/chunks/chunk-J3JSSCM6.js +5 -0
  51. package/cdn/chunks/chunk-KHLUVO6Y.js +8 -0
  52. package/cdn/chunks/chunk-KWPDTFYH.js +1 -0
  53. package/cdn/chunks/chunk-L4CUWIE6.js +17 -0
  54. package/cdn/chunks/chunk-LARBLB7K.js +8 -0
  55. package/cdn/chunks/chunk-LNFCEHB3.js +934 -0
  56. package/cdn/chunks/chunk-LZZB4VGC.js +48 -0
  57. package/cdn/chunks/chunk-MJMONWKB.js +3539 -0
  58. package/cdn/chunks/chunk-N5OHGRGG.js +8 -0
  59. package/cdn/chunks/chunk-NDHSIO2G.js +8 -0
  60. package/cdn/chunks/chunk-NRY3WHJD.js +5 -0
  61. package/cdn/chunks/chunk-PKT2SJQD.js +8 -0
  62. package/cdn/chunks/chunk-PPWEIKLT.js +1 -0
  63. package/cdn/chunks/chunk-PT523RSK.js +8 -0
  64. package/cdn/chunks/chunk-QD3NT5PG.js +934 -0
  65. package/cdn/chunks/chunk-QQCGUVEV.js +1 -0
  66. package/cdn/chunks/chunk-QTK4CPHP.js +8 -0
  67. package/cdn/chunks/chunk-QV6I5NVQ.js +8 -0
  68. package/cdn/chunks/chunk-R33OODNX.js +1 -0
  69. package/cdn/chunks/chunk-RIXTWE2H.js +8 -0
  70. package/cdn/chunks/chunk-ROZIP5LG.js +8 -0
  71. package/cdn/chunks/chunk-RPZVSBLM.js +8 -0
  72. package/cdn/chunks/chunk-RXKI3AO4.js +1 -0
  73. package/cdn/chunks/chunk-SXM25YH3.js +934 -0
  74. package/cdn/chunks/chunk-T2KKTMAT.js +934 -0
  75. package/cdn/chunks/chunk-TEYXRLTI.js +8 -0
  76. package/cdn/chunks/chunk-TQBDBMWL.js +5 -0
  77. package/cdn/chunks/chunk-TV3SPOLH.js +8 -0
  78. package/cdn/chunks/chunk-TVDTF6P6.js +934 -0
  79. package/cdn/chunks/chunk-U2TE6TOV.js +934 -0
  80. package/cdn/chunks/chunk-UJP4TGD3.js +1 -0
  81. package/cdn/chunks/chunk-W5Y3ZU2W.js +5 -0
  82. package/cdn/chunks/chunk-WPGJ54IP.js +1 -0
  83. package/cdn/chunks/chunk-X2KBNXRO.js +6 -0
  84. package/cdn/chunks/chunk-YHWMZAZD.js +43 -0
  85. package/cdn/chunks/chunk-YVZ742ID.js +934 -0
  86. package/cdn/chunks/chunk-YWH4TGMA.js +5 -0
  87. package/cdn/chunks/chunk-YXR6KSZI.js +11 -0
  88. package/cdn/exports/interaction.js +1 -0
  89. package/cdn/exports/item.context.js +1 -0
  90. package/cdn/exports/qti-assessment-item.context.js +1 -0
  91. package/cdn/exports/qti-condition-expression.js +1 -0
  92. package/cdn/exports/qti-expression.js +1 -0
  93. package/cdn/index.global.js +56 -107
  94. package/cdn/index.js +1 -1
  95. package/cdn/qti-components/index.global.js +1 -1
  96. package/cdn/qti-components/index.js +1 -1
  97. package/cdn/qti-item/components/index.js +3549 -1
  98. package/cdn/qti-item/components/item-container.js +3549 -1
  99. package/cdn/qti-item/core/index.global.js +149 -0
  100. package/cdn/qti-item/core/index.js +1 -0
  101. package/cdn/qti-item/index.js +3549 -1
  102. package/cdn/qti-item/qti-item.js +1 -1
  103. package/cdn/qti-loader/index.js +1 -1
  104. package/cdn/qti-test/components/index.global.js +1 -36
  105. package/cdn/qti-test/components/index.js +1 -1
  106. package/cdn/qti-test/components/styles.js +1 -1
  107. package/cdn/qti-test/components/test-component.abstract.js +1 -1
  108. package/cdn/qti-test/components/test-container.js +3549 -1
  109. package/cdn/qti-test/components/test-end-attempt.js +1 -0
  110. package/cdn/qti-test/components/test-item-link.js +1 -1
  111. package/cdn/qti-test/components/test-next.js +1 -1
  112. package/cdn/qti-test/components/test-next.spec.css +1 -0
  113. package/cdn/qti-test/components/test-next.spec.global.js +1 -234
  114. package/cdn/qti-test/components/test-next.spec.js +240 -240
  115. package/cdn/qti-test/components/test-paging-buttons-stamp.js +1 -1
  116. package/cdn/qti-test/components/test-prev.js +1 -1
  117. package/cdn/qti-test/components/test-show-correct-response.js +1 -0
  118. package/cdn/qti-test/components/test-view.js +1 -1
  119. package/cdn/qti-test/context/index.js +1 -1
  120. package/cdn/qti-test/context/test.context.js +1 -1
  121. package/cdn/qti-test/core/index.global.js +205 -0
  122. package/cdn/qti-test/core/index.js +1 -0
  123. package/cdn/qti-test/index.js +3598 -1
  124. package/cdn/qti-test/mixins/index.js +23 -1
  125. package/cdn/qti-test/mixins/test-loader.mixin.js +23 -1
  126. package/cdn/qti-test/mixins/test-navigation.mixin.js +1 -1
  127. package/cdn/qti-test/mixins/test-view.mixin.js +1 -1
  128. package/cdn/qti-test/qti-assessment-test/index.js +1 -1
  129. package/cdn/qti-test/qti-assessment-test/qti-assessment-item-ref.js +1 -1
  130. package/cdn/qti-test/qti-assessment-test/qti-assessment-section.js +1 -1
  131. package/cdn/qti-test/qti-assessment-test/qti-assessment-test.js +1 -1
  132. package/cdn/qti-test/qti-assessment-test/qti-test-part.js +1 -1
  133. package/cdn/qti-test/qti-test.js +23 -1
  134. package/cdn/qti-test/test-base.js +1 -1
  135. package/cdn/qti-transformers/index.js +1 -1
  136. package/dist/{chunk-3WLCQQN7.js → chunk-2CHF3TMY.js} +2 -2
  137. package/dist/chunk-2CHF3TMY.js.map +1 -0
  138. package/dist/chunk-2LWLX7WV.js +6307 -0
  139. package/dist/chunk-2LWLX7WV.js.map +1 -0
  140. package/dist/{chunk-VODOQFTJ.js → chunk-3G364JZC.js} +2 -2
  141. package/dist/chunk-6TUE644E.js +569 -0
  142. package/dist/chunk-6TUE644E.js.map +1 -0
  143. package/dist/{chunk-JDHBXMKF.js → chunk-6ZMD232X.js} +2 -2
  144. package/dist/{chunk-L7MBIXEX.js → chunk-AYRSHIHA.js} +4 -4
  145. package/dist/{chunk-GTYLWGDG.js → chunk-BN32D5J2.js} +4 -4
  146. package/dist/{chunk-TXRSYXG3.js → chunk-CJRXRBRQ.js} +4 -4
  147. package/dist/{chunk-ENVUIH2A.js → chunk-GPJ6WTE5.js} +5 -5
  148. package/dist/chunk-GPJ6WTE5.js.map +1 -0
  149. package/dist/chunk-KAUHKHPH.js +50 -0
  150. package/dist/chunk-KAUHKHPH.js.map +1 -0
  151. package/dist/chunk-MAC76UNI.js +1 -0
  152. package/dist/{chunk-XNBWN7N2.js → chunk-QYN5S4EM.js} +20 -7
  153. package/dist/chunk-QYN5S4EM.js.map +1 -0
  154. package/dist/chunk-UJTJIU3C.js +43 -0
  155. package/dist/chunk-UJTJIU3C.js.map +1 -0
  156. package/dist/chunk-XVQZ5JI5.js +50 -0
  157. package/dist/chunk-XVQZ5JI5.js.map +1 -0
  158. package/dist/{chunk-EUCEENQQ.js → chunk-XW3PQRKW.js} +100 -47
  159. package/dist/chunk-XW3PQRKW.js.map +1 -0
  160. package/dist/{chunk-R4HSV7U7.js → chunk-YQ7EXOAK.js} +2 -2
  161. package/dist/chunk-YQ7EXOAK.js.map +1 -0
  162. package/dist/chunks/chunk-2V6LQV2K.js +50 -0
  163. package/dist/chunks/chunk-2V6LQV2K.js.map +1 -0
  164. package/dist/chunks/chunk-3EU75IUF.js +118 -0
  165. package/dist/chunks/chunk-3EU75IUF.js.map +1 -0
  166. package/dist/chunks/chunk-3QQFMVDS.js +118 -0
  167. package/dist/chunks/chunk-3QQFMVDS.js.map +1 -0
  168. package/dist/chunks/chunk-4GNVYCBN.js +627 -0
  169. package/dist/chunks/chunk-4GNVYCBN.js.map +1 -0
  170. package/dist/chunks/chunk-4MQV5IRV.js +59 -0
  171. package/dist/chunks/chunk-4MQV5IRV.js.map +1 -0
  172. package/dist/chunks/chunk-4O5F7WV7.js +30 -0
  173. package/dist/chunks/chunk-4O5F7WV7.js.map +1 -0
  174. package/dist/chunks/chunk-4WVLWWYJ.js +50 -0
  175. package/dist/chunks/chunk-4WVLWWYJ.js.map +1 -0
  176. package/dist/chunks/chunk-5KVGRLYT.js +10 -0
  177. package/dist/chunks/chunk-5KVGRLYT.js.map +1 -0
  178. package/dist/chunks/chunk-5PCD2B62.js +6091 -0
  179. package/dist/chunks/chunk-5PCD2B62.js.map +1 -0
  180. package/dist/chunks/chunk-5RTLOB3Q.js +59 -0
  181. package/dist/chunks/chunk-5RTLOB3Q.js.map +1 -0
  182. package/dist/chunks/chunk-6JXR63MH.js +50 -0
  183. package/dist/chunks/chunk-6JXR63MH.js.map +1 -0
  184. package/dist/chunks/chunk-6PAEJQSQ.js +6058 -0
  185. package/dist/chunks/chunk-6PAEJQSQ.js.map +1 -0
  186. package/dist/chunks/chunk-6QT4LIPL.js +623 -0
  187. package/dist/chunks/chunk-6QT4LIPL.js.map +1 -0
  188. package/dist/chunks/chunk-7QMCKYDR.js +43 -0
  189. package/dist/chunks/chunk-7QMCKYDR.js.map +1 -0
  190. package/dist/chunks/chunk-A24F75DB.js +72 -0
  191. package/dist/chunks/chunk-A24F75DB.js.map +1 -0
  192. package/dist/chunks/chunk-AUWATZ65.js +10 -0
  193. package/dist/chunks/chunk-AUWATZ65.js.map +1 -0
  194. package/dist/chunks/chunk-AXTEKPP5.js +6084 -0
  195. package/dist/chunks/chunk-AXTEKPP5.js.map +1 -0
  196. package/dist/chunks/chunk-B6MJCAOF.js +6063 -0
  197. package/dist/chunks/chunk-B6MJCAOF.js.map +1 -0
  198. package/dist/chunks/chunk-BJ2JLJIJ.js +623 -0
  199. package/dist/chunks/chunk-BJ2JLJIJ.js.map +1 -0
  200. package/dist/chunks/chunk-BPHQLJWE.js +102 -0
  201. package/dist/chunks/chunk-BPHQLJWE.js.map +1 -0
  202. package/dist/chunks/chunk-CD3E4M5Y.js +107 -0
  203. package/dist/chunks/chunk-CD3E4M5Y.js.map +1 -0
  204. package/dist/chunks/chunk-CEXAR7BF.js +52 -0
  205. package/dist/chunks/chunk-CEXAR7BF.js.map +1 -0
  206. package/dist/chunks/chunk-CWYAQA25.js +6067 -0
  207. package/dist/chunks/chunk-CWYAQA25.js.map +1 -0
  208. package/dist/chunks/chunk-D3QX5N57.js +6117 -0
  209. package/dist/chunks/chunk-D3QX5N57.js.map +1 -0
  210. package/dist/{chunk-4CSM2PCC.js → chunks/chunk-D3RGDWKP.js} +1 -1
  211. package/dist/chunks/chunk-D3RGDWKP.js.map +1 -0
  212. package/dist/chunks/chunk-DLUJN2FW.js +22 -0
  213. package/dist/chunks/chunk-DLUJN2FW.js.map +1 -0
  214. package/dist/chunks/chunk-DNHDFXTV.js +59 -0
  215. package/dist/chunks/chunk-DNHDFXTV.js.map +1 -0
  216. package/dist/chunks/chunk-E4TWZ2DL.js +6088 -0
  217. package/dist/chunks/chunk-E4TWZ2DL.js.map +1 -0
  218. package/dist/chunks/chunk-ELDMXTUQ.js +31 -0
  219. package/dist/chunks/chunk-ELDMXTUQ.js.map +1 -0
  220. package/dist/{chunk-IAFQ5ZPI.js → chunks/chunk-FV7HWK54.js} +2 -2
  221. package/dist/chunks/chunk-FV7HWK54.js.map +1 -0
  222. package/dist/chunks/chunk-GQ5P3NWC.js +46 -0
  223. package/dist/chunks/chunk-GQ5P3NWC.js.map +1 -0
  224. package/dist/chunks/chunk-GSWZT6N2.js +50 -0
  225. package/dist/chunks/chunk-GSWZT6N2.js.map +1 -0
  226. package/dist/chunks/chunk-H2JE6IVU.js +15 -0
  227. package/dist/chunks/chunk-HHVRU3AJ.js +107 -0
  228. package/dist/chunks/chunk-HHVRU3AJ.js.map +1 -0
  229. package/dist/chunks/chunk-HOTNM5DT.js +1 -0
  230. package/dist/chunks/chunk-IWG66KQQ.js +107 -0
  231. package/dist/chunks/chunk-IWG66KQQ.js.map +1 -0
  232. package/{cdn/chunk-Y63VPWCG.js → dist/chunks/chunk-J2SHENRN.js} +8 -2
  233. package/dist/chunks/chunk-J2SHENRN.js.map +1 -0
  234. package/dist/chunks/chunk-K6ATVWMP.js +6091 -0
  235. package/dist/chunks/chunk-K6ATVWMP.js.map +1 -0
  236. package/dist/chunks/chunk-KOEILLVS.js +8 -0
  237. package/dist/chunks/chunk-KOEILLVS.js.map +1 -0
  238. package/dist/chunks/chunk-KYAIMBP5.js +78 -0
  239. package/dist/chunks/chunk-KYAIMBP5.js.map +1 -0
  240. package/dist/chunks/chunk-LNISKMIL.js +6063 -0
  241. package/dist/chunks/chunk-LNISKMIL.js.map +1 -0
  242. package/dist/chunks/chunk-LNKJEW5E.js +627 -0
  243. package/dist/chunks/chunk-LNKJEW5E.js.map +1 -0
  244. package/dist/chunks/chunk-LXJA3VP2.js +72 -0
  245. package/dist/chunks/chunk-LXJA3VP2.js.map +1 -0
  246. package/dist/chunks/chunk-MLT7V47R.js +100 -0
  247. package/dist/chunks/chunk-MLT7V47R.js.map +1 -0
  248. package/dist/chunks/chunk-N5FPZNMX.js +43 -0
  249. package/dist/chunks/chunk-N5FPZNMX.js.map +1 -0
  250. package/dist/chunks/chunk-NHA53UTY.js +52 -0
  251. package/dist/chunks/chunk-NHA53UTY.js.map +1 -0
  252. package/dist/chunks/chunk-NZQKGIJP.js +3535 -0
  253. package/dist/chunks/chunk-NZQKGIJP.js.map +1 -0
  254. package/dist/chunks/chunk-O6WEZVEM.js +43 -0
  255. package/dist/chunks/chunk-O6WEZVEM.js.map +1 -0
  256. package/dist/chunks/chunk-OIRWOI3E.js +72 -0
  257. package/dist/chunks/chunk-OIRWOI3E.js.map +1 -0
  258. package/dist/chunks/chunk-PWOY6REC.js +6064 -0
  259. package/dist/chunks/chunk-PWOY6REC.js.map +1 -0
  260. package/dist/chunks/chunk-QJELKGWM.js +6061 -0
  261. package/dist/chunks/chunk-QJELKGWM.js.map +1 -0
  262. package/dist/chunks/chunk-QUB54PXZ.js +50 -0
  263. package/dist/chunks/chunk-QUB54PXZ.js.map +1 -0
  264. package/dist/chunks/chunk-RX3BRYYI.js +59 -0
  265. package/dist/chunks/chunk-RX3BRYYI.js.map +1 -0
  266. package/dist/chunks/chunk-UEEMM6H2.js +6090 -0
  267. package/dist/chunks/chunk-UEEMM6H2.js.map +1 -0
  268. package/dist/chunks/chunk-UFYWCLXF.js +10 -0
  269. package/dist/chunks/chunk-UFYWCLXF.js.map +1 -0
  270. package/dist/chunks/chunk-UN2IFSGC.js +1 -0
  271. package/dist/chunks/chunk-VAPB5TN4.js +46 -0
  272. package/dist/chunks/chunk-VAPB5TN4.js.map +1 -0
  273. package/dist/chunks/chunk-VBF3GCZK.js +50 -0
  274. package/dist/chunks/chunk-VBF3GCZK.js.map +1 -0
  275. package/dist/chunks/chunk-W4272Q5U.js +46 -0
  276. package/dist/chunks/chunk-W4272Q5U.js.map +1 -0
  277. package/dist/chunks/chunk-WWN5AD6V.js +81 -0
  278. package/dist/chunks/chunk-WWN5AD6V.js.map +1 -0
  279. package/dist/chunks/chunk-X226BX2U.js +78 -0
  280. package/dist/chunks/chunk-X226BX2U.js.map +1 -0
  281. package/dist/chunks/chunk-XCHS3RTZ.js +107 -0
  282. package/dist/chunks/chunk-XCHS3RTZ.js.map +1 -0
  283. package/dist/chunks/chunk-XDMSEAYC.js +294 -0
  284. package/dist/chunks/chunk-XDMSEAYC.js.map +1 -0
  285. package/dist/chunks/chunk-XSI6FXGD.js +19 -0
  286. package/dist/chunks/chunk-XSI6FXGD.js.map +1 -0
  287. package/dist/chunks/chunk-YFC3BVN2.js +78 -0
  288. package/dist/chunks/chunk-YFC3BVN2.js.map +1 -0
  289. package/dist/chunks/chunk-YOXF6JPS.js +623 -0
  290. package/dist/chunks/chunk-YOXF6JPS.js.map +1 -0
  291. package/dist/chunks/chunk-YQB6YLNW.js +78 -0
  292. package/dist/chunks/chunk-YQB6YLNW.js.map +1 -0
  293. package/dist/chunks/chunk-Z5THRO6Z.js +46 -0
  294. package/dist/chunks/chunk-Z5THRO6Z.js.map +1 -0
  295. package/dist/chunks/chunk-ZHAJ3CMP.js +6091 -0
  296. package/dist/chunks/chunk-ZHAJ3CMP.js.map +1 -0
  297. package/dist/chunks/chunk-ZPNJ2HP5.js +71 -0
  298. package/dist/chunks/chunk-ZPNJ2HP5.js.map +1 -0
  299. package/dist/chunks/chunk-ZQXZ6PK7.js +649 -0
  300. package/dist/chunks/chunk-ZQXZ6PK7.js.map +1 -0
  301. package/dist/custom-element-eslint-rules.js +337 -0
  302. package/dist/custom-elements.json +27158 -0
  303. package/dist/exports/expression-result.d.ts +19 -0
  304. package/dist/exports/expression-result.js +1 -0
  305. package/dist/exports/interaction.d.ts +23 -0
  306. package/dist/exports/interaction.interface.d.ts +13 -0
  307. package/dist/exports/interaction.interface.js +1 -0
  308. package/dist/exports/interaction.js +8 -0
  309. package/dist/exports/item.context.d.ts +12 -0
  310. package/dist/exports/item.context.js +8 -0
  311. package/dist/exports/qti-assessment-item.context.d.ts +10 -0
  312. package/dist/exports/qti-assessment-item.context.js +8 -0
  313. package/dist/exports/qti-assessment-item.context.js.map +1 -0
  314. package/dist/exports/qti-condition-expression.d.ts +13 -0
  315. package/dist/exports/qti-condition-expression.js +10 -0
  316. package/dist/exports/qti-condition-expression.js.map +1 -0
  317. package/dist/exports/qti-expression.d.ts +21 -0
  318. package/dist/exports/qti-expression.js +9 -0
  319. package/dist/exports/qti-expression.js.map +1 -0
  320. package/dist/exports/variables.d.ts +3 -0
  321. package/dist/exports/variables.js +1 -0
  322. package/dist/exports/variables.js.map +1 -0
  323. package/dist/index.d.ts +14 -8
  324. package/dist/index.js +41 -63
  325. package/dist/item.css +8 -2
  326. package/dist/loader/index.d.ts +20 -0
  327. package/dist/loader/index.js +310 -0
  328. package/dist/loader/index.js.map +1 -0
  329. package/dist/qti-components/index.cjs +6773 -0
  330. package/dist/qti-components/index.cjs.map +1 -0
  331. package/dist/qti-components/index.d.cts +150 -0
  332. package/dist/qti-components/index.d.ts +36 -9
  333. package/dist/qti-components/index.js +10 -17
  334. package/dist/qti-components-jsx.d.ts +360 -639
  335. package/dist/qti-item/components/index.js +3852 -8
  336. package/dist/qti-item/components/index.js.map +1 -1
  337. package/dist/qti-item/components/item-container.js +3852 -7
  338. package/dist/qti-item/components/item-container.js.map +1 -1
  339. package/dist/qti-item/core/index.d.ts +61 -0
  340. package/dist/qti-item/core/index.js +13 -0
  341. package/dist/qti-item/core/index.js.map +1 -0
  342. package/dist/qti-item/index.cjs +89 -0
  343. package/dist/qti-item/index.cjs.map +1 -0
  344. package/dist/qti-item/index.d.cts +24 -0
  345. package/dist/qti-item/index.js +3864 -12
  346. package/dist/qti-item/index.js.map +1 -1
  347. package/dist/qti-item/qti-item.js +22 -4
  348. package/dist/qti-item/qti-item.js.map +1 -1
  349. package/dist/qti-loader/index.cjs +332 -0
  350. package/dist/qti-loader/index.cjs.map +1 -0
  351. package/dist/qti-loader/index.d.cts +20 -0
  352. package/dist/qti-loader/index.d.ts +7 -1
  353. package/dist/qti-loader/index.js +3 -3
  354. package/dist/qti-response-declaration-DAeBp8HH.d.ts +1008 -0
  355. package/dist/qti-response-declaration-Di9CsqiJ.d.ts +1012 -0
  356. package/dist/qti-response-declaration-ucAqd0qK.d.ts +1034 -0
  357. package/dist/qti-simple-choice-3M44uWiN.d.ts +1153 -0
  358. package/dist/qti-simple-choice-B5GnzbqW.d.ts +1080 -0
  359. package/dist/qti-simple-choice-BOLF9wXz.d.ts +1170 -0
  360. package/dist/qti-simple-choice-BeixIkA0.d.ts +1088 -0
  361. package/dist/qti-simple-choice-BiEjEO6s.d.ts +1152 -0
  362. package/dist/qti-simple-choice-Bo_ikO6H.d.ts +1198 -0
  363. package/dist/qti-simple-choice-C0CcrtK5.d.ts +1169 -0
  364. package/dist/qti-simple-choice-Cgh1-Jbr.d.cts +1185 -0
  365. package/dist/qti-simple-choice-Cgh1-Jbr.d.ts +1185 -0
  366. package/dist/qti-simple-choice-Cn5y-Ta8.d.ts +1158 -0
  367. package/dist/qti-simple-choice-D0GiMrqD.d.ts +1168 -0
  368. package/dist/qti-simple-choice-R_LxBTp8.d.ts +1158 -0
  369. package/dist/qti-simple-choice-hAIyfF0z.d.ts +1114 -0
  370. package/dist/qti-simple-choice-o4rje1RA.d.ts +1176 -0
  371. package/dist/qti-simple-choice-v2GxpPNh.d.ts +1181 -0
  372. package/dist/qti-test/components/index.d.ts +10 -4
  373. package/dist/qti-test/components/index.js +19 -18
  374. package/dist/qti-test/components/styles.js +2 -2
  375. package/dist/qti-test/components/test-component.abstract.d.ts +8 -5
  376. package/dist/qti-test/components/test-component.abstract.js +5 -6
  377. package/dist/qti-test/components/test-container.js +3778 -7
  378. package/dist/qti-test/components/test-container.js.map +1 -1
  379. package/dist/qti-test/components/test-end-attempt.d.ts +26 -0
  380. package/dist/qti-test/components/test-end-attempt.js +13 -0
  381. package/dist/qti-test/components/test-end-attempt.js.map +1 -0
  382. package/dist/qti-test/components/test-item-link.d.ts +9 -3
  383. package/dist/qti-test/components/test-item-link.js +7 -8
  384. package/dist/qti-test/components/test-next.d.ts +9 -3
  385. package/dist/qti-test/components/test-next.js +7 -8
  386. package/dist/qti-test/components/test-next.spec.css +2481 -0
  387. package/dist/qti-test/components/test-next.spec.css.map +1 -0
  388. package/dist/qti-test/components/test-next.spec.d.ts +4 -7
  389. package/dist/qti-test/components/test-next.spec.js +13 -32
  390. package/dist/qti-test/components/test-next.spec.js.map +1 -1
  391. package/dist/qti-test/components/test-paging-buttons-stamp.d.ts +8 -3
  392. package/dist/qti-test/components/test-paging-buttons-stamp.js +6 -7
  393. package/dist/qti-test/components/test-prev.d.ts +9 -3
  394. package/dist/qti-test/components/test-prev.js +7 -8
  395. package/dist/qti-test/components/test-show-correct-response.d.ts +26 -0
  396. package/dist/qti-test/components/test-show-correct-response.js +13 -0
  397. package/dist/qti-test/components/test-show-correct-response.js.map +1 -0
  398. package/dist/qti-test/components/test-view.d.ts +9 -3
  399. package/dist/qti-test/components/test-view.js +6 -7
  400. package/dist/qti-test/context/index.js +4 -6
  401. package/dist/qti-test/context/index.js.map +1 -1
  402. package/dist/qti-test/context/test.context.js +4 -5
  403. package/dist/qti-test/context/test.context.js.map +1 -1
  404. package/dist/qti-test/core/index.d.ts +132 -0
  405. package/dist/qti-test/core/index.js +27 -0
  406. package/dist/qti-test/core/index.js.map +1 -0
  407. package/dist/qti-test/index.cjs +4823 -0
  408. package/dist/qti-test/index.cjs.map +1 -0
  409. package/dist/qti-test/index.d.cts +304 -0
  410. package/dist/qti-test/index.js +4729 -55
  411. package/dist/qti-test/index.js.map +1 -1
  412. package/dist/qti-test/mixins/index.js +344 -12
  413. package/dist/qti-test/mixins/index.js.map +1 -1
  414. package/dist/qti-test/mixins/test-loader.mixin.js +236 -5
  415. package/dist/qti-test/mixins/test-loader.mixin.js.map +1 -1
  416. package/dist/qti-test/mixins/test-navigation.mixin.js +60 -4
  417. package/dist/qti-test/mixins/test-navigation.mixin.js.map +1 -1
  418. package/dist/qti-test/mixins/test-view.mixin.js +46 -4
  419. package/dist/qti-test/mixins/test-view.mixin.js.map +1 -1
  420. package/dist/qti-test/qti-assessment-test/index.js +214 -16
  421. package/dist/qti-test/qti-assessment-test/index.js.map +1 -1
  422. package/dist/qti-test/qti-assessment-test/qti-assessment-item-ref.js +81 -6
  423. package/dist/qti-test/qti-assessment-test/qti-assessment-item-ref.js.map +1 -1
  424. package/dist/qti-test/qti-assessment-test/qti-assessment-section.js +69 -6
  425. package/dist/qti-test/qti-assessment-test/qti-assessment-section.js.map +1 -1
  426. package/dist/qti-test/qti-assessment-test/qti-assessment-test.js +50 -6
  427. package/dist/qti-test/qti-assessment-test/qti-assessment-test.js.map +1 -1
  428. package/dist/qti-test/qti-assessment-test/qti-test-part.js +58 -4
  429. package/dist/qti-test/qti-assessment-test/qti-test-part.js.map +1 -1
  430. package/dist/qti-test/qti-test.js +496 -12
  431. package/dist/qti-test/qti-test.js.map +1 -1
  432. package/dist/qti-test/test-base.js +133 -6
  433. package/dist/qti-test/test-base.js.map +1 -1
  434. package/dist/qti-transformers/index.cjs +316 -0
  435. package/dist/qti-transformers/index.cjs.map +1 -0
  436. package/dist/qti-transformers/index.d.cts +75 -0
  437. package/dist/qti-transformers/index.js +2 -2
  438. package/dist/test.context-Bx-606B3.d.ts +99 -0
  439. package/dist/test.context-C2LBA3w4.d.ts +101 -0
  440. package/dist/test.context-CB5V4xJz.d.ts +99 -0
  441. package/dist/test.context-CaENAJNk.d.ts +101 -0
  442. package/dist/test.context-CmsDQ8k2.d.ts +99 -0
  443. package/dist/transformers/index.d.ts +76 -0
  444. package/dist/transformers/index.js +293 -0
  445. package/dist/transformers/index.js.map +1 -0
  446. package/dist/variables-cO3DzqJy.d.ts +33 -0
  447. package/dist/vscode.html-custom-data.json +247 -295
  448. package/package.json +83 -76
  449. package/cdn/chunk-3DWLPGTE.js +0 -1
  450. package/cdn/chunk-7BKWTY4S.js +0 -1
  451. package/cdn/chunk-7CQ4ETXL.js +0 -1
  452. package/cdn/chunk-7ENNZNJ4.js +0 -1
  453. package/cdn/chunk-7LGM2TQA.js +0 -1
  454. package/cdn/chunk-DPR6SGCZ.js +0 -1
  455. package/cdn/chunk-EQGXFSYL.js +0 -8
  456. package/cdn/chunk-F5VW77RE.js +0 -1
  457. package/cdn/chunk-FNVXN5CO.js +0 -1
  458. package/cdn/chunk-GBB54IPA.js +0 -8
  459. package/cdn/chunk-IV7UP34N.js +0 -5
  460. package/cdn/chunk-JNT54FPI.js +0 -1
  461. package/cdn/chunk-JS4S7ZI7.js +0 -1
  462. package/cdn/chunk-POT65ZY7.js +0 -1
  463. package/cdn/chunk-Q7PVZA43.js +0 -5
  464. package/cdn/chunk-QJPHXAUE.js +0 -1
  465. package/cdn/chunk-QP57JHGY.js +0 -11
  466. package/cdn/chunk-RB6CONZW.js +0 -3
  467. package/cdn/chunk-RSRX5JYB.js +0 -1
  468. package/cdn/chunk-TG6AE3DB.js +0 -0
  469. package/cdn/chunk-V6YPUNZC.js +0 -0
  470. package/cdn/chunk-W7X6GNEX.js +0 -902
  471. package/cdn/chunk-ZEX7TYC7.js +0 -8
  472. package/dist/chunk-37X6KZO3.js +0 -1
  473. package/dist/chunk-3WLCQQN7.js.map +0 -1
  474. package/dist/chunk-3YVIK6LO.js +0 -1
  475. package/dist/chunk-4CSM2PCC.js.map +0 -1
  476. package/dist/chunk-7A6KCSAU.js +0 -44
  477. package/dist/chunk-7A6KCSAU.js.map +0 -1
  478. package/dist/chunk-ENVUIH2A.js.map +0 -1
  479. package/dist/chunk-ENZVY5X6.js +0 -20
  480. package/dist/chunk-ENZVY5X6.js.map +0 -1
  481. package/dist/chunk-EUCEENQQ.js.map +0 -1
  482. package/dist/chunk-FNFNAV3G.js +0 -56
  483. package/dist/chunk-FNFNAV3G.js.map +0 -1
  484. package/dist/chunk-GSFDTSLL.js +0 -1
  485. package/dist/chunk-IAFQ5ZPI.js.map +0 -1
  486. package/dist/chunk-LYFMLDNV.js +0 -1
  487. package/dist/chunk-NNPTSZGC.js +0 -1
  488. package/dist/chunk-NQM35JUI.js +0 -1
  489. package/dist/chunk-ODUHPWTX.js +0 -65
  490. package/dist/chunk-ODUHPWTX.js.map +0 -1
  491. package/dist/chunk-OGHHCP23.js +0 -36
  492. package/dist/chunk-OGHHCP23.js.map +0 -1
  493. package/dist/chunk-OQZW2B47.js +0 -75
  494. package/dist/chunk-OQZW2B47.js.map +0 -1
  495. package/dist/chunk-OXDOQVRL.js +0 -63
  496. package/dist/chunk-OXDOQVRL.js.map +0 -1
  497. package/dist/chunk-PBSMP6VF.js +0 -128
  498. package/dist/chunk-PBSMP6VF.js.map +0 -1
  499. package/dist/chunk-Q7OPFS4A.js +0 -1
  500. package/dist/chunk-R4HSV7U7.js.map +0 -1
  501. package/dist/chunk-U3RLYKL5.js +0 -51
  502. package/dist/chunk-U3RLYKL5.js.map +0 -1
  503. package/dist/chunk-VW7VIQBE.js +0 -34
  504. package/dist/chunk-VW7VIQBE.js.map +0 -1
  505. package/dist/chunk-X4ZBUCOD.js +0 -94
  506. package/dist/chunk-X4ZBUCOD.js.map +0 -1
  507. package/dist/chunk-XFHB6KQW.js +0 -1
  508. package/dist/chunk-XNBWN7N2.js.map +0 -1
  509. /package/cdn/{chunk-CYJMNT76.js → chunk-22HAPLRD.js} +0 -0
  510. /package/cdn/{chunk-GB7DLBFM.js → chunks/chunk-3GO57DNP.js} +0 -0
  511. /package/cdn/{chunk-H4A34YRT.js → chunks/chunk-6PW2L463.js} +0 -0
  512. /package/cdn/{chunk-GPDDPZFH.js → chunks/chunk-EHK76KRT.js} +0 -0
  513. /package/cdn/{chunk-25BMUTLC.js → chunks/chunk-XUJ7TXHW.js} +0 -0
  514. /package/cdn/{chunk-ITXNNGVQ.js → exports/expression-result.js} +0 -0
  515. /package/cdn/{chunk-IZZ36JQV.js → exports/interaction.interface.js} +0 -0
  516. /package/cdn/{chunk-LA7TBIPQ.js → exports/variables.js} +0 -0
  517. /package/dist/{chunk-VODOQFTJ.js.map → chunk-3G364JZC.js.map} +0 -0
  518. /package/dist/{chunk-JDHBXMKF.js.map → chunk-6ZMD232X.js.map} +0 -0
  519. /package/dist/{chunk-L7MBIXEX.js.map → chunk-AYRSHIHA.js.map} +0 -0
  520. /package/dist/{chunk-GTYLWGDG.js.map → chunk-BN32D5J2.js.map} +0 -0
  521. /package/dist/{chunk-TXRSYXG3.js.map → chunk-CJRXRBRQ.js.map} +0 -0
  522. /package/dist/{chunk-37X6KZO3.js.map → chunk-MAC76UNI.js.map} +0 -0
  523. /package/dist/{chunk-3YVIK6LO.js.map → chunks/chunk-H2JE6IVU.js.map} +0 -0
  524. /package/dist/{chunk-GSFDTSLL.js.map → chunks/chunk-HOTNM5DT.js.map} +0 -0
  525. /package/dist/{chunk-LYFMLDNV.js.map → chunks/chunk-UN2IFSGC.js.map} +0 -0
  526. /package/dist/{chunk-NNPTSZGC.js.map → exports/expression-result.js.map} +0 -0
  527. /package/dist/{chunk-NQM35JUI.js.map → exports/interaction.interface.js.map} +0 -0
  528. /package/dist/{chunk-Q7OPFS4A.js.map → exports/interaction.js.map} +0 -0
  529. /package/dist/{chunk-XFHB6KQW.js.map → exports/item.context.js.map} +0 -0
@@ -0,0 +1,4823 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var __decorateClass = (decorators, target, key, kind) => {
19
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
20
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
21
+ if (decorator = decorators[i])
22
+ result = (kind ? decorator(target, key, result) : decorator(result)) || result;
23
+ if (kind && result) __defProp(target, key, result);
24
+ return result;
25
+ };
26
+
27
+ // src/lib/qti-test/index.ts
28
+ var qti_test_exports = {};
29
+ __export(qti_test_exports, {
30
+ QtiAssessmentItemRef: () => QtiAssessmentItemRef,
31
+ QtiAssessmentSection: () => QtiAssessmentSection,
32
+ QtiAssessmentTest: () => QtiAssessmentTest,
33
+ QtiTest: () => QtiTest,
34
+ QtiTestPart: () => QtiTestPart,
35
+ TestContainer: () => TestContainer,
36
+ TestItemLink: () => TestItemLink,
37
+ TestNext: () => TestNext,
38
+ TestPagingButtonsStamp: () => TestPagingButtonsStamp,
39
+ TestPrev: () => TestPrev,
40
+ TestView: () => TestView
41
+ });
42
+ module.exports = __toCommonJS(qti_test_exports);
43
+
44
+ // src/lib/qti-test/qti-assessment-test/qti-assessment-item-ref.ts
45
+ var import_context2 = require("@lit/context");
46
+ var import_lit = require("lit");
47
+ var import_decorators = require("lit/decorators.js");
48
+
49
+ // src/lib/qti-test/context/test.context.ts
50
+ var import_context = require("@lit/context");
51
+ var testContext = (0, import_context.createContext)(Symbol("test"));
52
+ var testElement = (0, import_context.createContext)(Symbol("testElement"));
53
+
54
+ // src/lib/qti-test/qti-assessment-test/qti-assessment-item-ref.ts
55
+ var stringToBooleanConverter = {
56
+ fromAttribute(value) {
57
+ return value === "true";
58
+ },
59
+ toAttribute(value) {
60
+ return value ? "true" : "false";
61
+ }
62
+ };
63
+ var QtiAssessmentItemRef = class extends import_lit.LitElement {
64
+ constructor() {
65
+ super(...arguments);
66
+ this.weigths = /* @__PURE__ */ new Map();
67
+ }
68
+ // the XMLDocument
69
+ createRenderRoot() {
70
+ return this;
71
+ }
72
+ get assessmentItem() {
73
+ return this.renderRoot?.querySelector("qti-assessment-item");
74
+ }
75
+ async connectedCallback() {
76
+ super.connectedCallback();
77
+ await this.updateComplete;
78
+ this.dispatchEvent(
79
+ new CustomEvent("qti-assessment-item-ref-connected", {
80
+ bubbles: true,
81
+ composed: true,
82
+ detail: { identifier: this.identifier, href: this.href, category: this.category }
83
+ })
84
+ );
85
+ }
86
+ render() {
87
+ return import_lit.html`${this.xmlDoc}`;
88
+ }
89
+ };
90
+ __decorateClass([
91
+ (0, import_decorators.property)({ type: String })
92
+ ], QtiAssessmentItemRef.prototype, "category", 2);
93
+ __decorateClass([
94
+ (0, import_decorators.property)({ type: String })
95
+ ], QtiAssessmentItemRef.prototype, "identifier", 2);
96
+ __decorateClass([
97
+ (0, import_decorators.property)({ type: Boolean, converter: stringToBooleanConverter })
98
+ ], QtiAssessmentItemRef.prototype, "required", 2);
99
+ __decorateClass([
100
+ (0, import_decorators.property)({ type: Boolean, converter: stringToBooleanConverter })
101
+ ], QtiAssessmentItemRef.prototype, "fixed", 2);
102
+ __decorateClass([
103
+ (0, import_decorators.property)({ type: String })
104
+ ], QtiAssessmentItemRef.prototype, "href", 2);
105
+ __decorateClass([
106
+ (0, import_context2.consume)({ context: testContext, subscribe: true })
107
+ ], QtiAssessmentItemRef.prototype, "_testContext", 2);
108
+ __decorateClass([
109
+ (0, import_decorators.property)({ type: Object, attribute: false })
110
+ ], QtiAssessmentItemRef.prototype, "xmlDoc", 2);
111
+ if (!customElements.get("qti-assessment-item-ref")) {
112
+ customElements.define("qti-assessment-item-ref", QtiAssessmentItemRef);
113
+ }
114
+
115
+ // src/lib/qti-test/qti-assessment-test/qti-assessment-section.ts
116
+ var import_context4 = require("@lit/context");
117
+ var import_lit2 = require("lit");
118
+ var import_decorators2 = require("lit/decorators.js");
119
+ var stringToBooleanConverter2 = {
120
+ fromAttribute(value) {
121
+ return value === "true";
122
+ },
123
+ toAttribute(value) {
124
+ return value ? "true" : "false";
125
+ }
126
+ };
127
+ var QtiAssessmentSection = class extends import_lit2.LitElement {
128
+ async connectedCallback() {
129
+ super.connectedCallback();
130
+ await this.updateComplete;
131
+ this.dispatchEvent(
132
+ new Event("qti-assessment-section-connected", {
133
+ bubbles: true,
134
+ composed: true
135
+ })
136
+ );
137
+ }
138
+ render() {
139
+ return import_lit2.html`<slot name="qti-rubric-block"></slot><slot></slot>`;
140
+ }
141
+ };
142
+ __decorateClass([
143
+ (0, import_decorators2.property)({ type: String })
144
+ ], QtiAssessmentSection.prototype, "identifier", 2);
145
+ __decorateClass([
146
+ (0, import_decorators2.property)({ type: String })
147
+ ], QtiAssessmentSection.prototype, "required", 2);
148
+ __decorateClass([
149
+ (0, import_decorators2.property)({ type: Boolean, converter: stringToBooleanConverter2 })
150
+ ], QtiAssessmentSection.prototype, "fixed", 2);
151
+ __decorateClass([
152
+ (0, import_decorators2.property)({ type: String })
153
+ ], QtiAssessmentSection.prototype, "title", 2);
154
+ __decorateClass([
155
+ (0, import_decorators2.property)({ type: Boolean, converter: stringToBooleanConverter2 })
156
+ ], QtiAssessmentSection.prototype, "visible", 2);
157
+ __decorateClass([
158
+ (0, import_decorators2.property)({ type: Boolean, converter: stringToBooleanConverter2, attribute: "keep-together" })
159
+ ], QtiAssessmentSection.prototype, "keepTogether", 2);
160
+ __decorateClass([
161
+ (0, import_context4.consume)({ context: testContext, subscribe: true })
162
+ ], QtiAssessmentSection.prototype, "_testContext", 2);
163
+ if (!customElements.get("qti-assessment-section")) {
164
+ customElements.define("qti-assessment-section", QtiAssessmentSection);
165
+ }
166
+
167
+ // src/lib/qti-test/qti-assessment-test/qti-assessment-test.ts
168
+ var import_context6 = require("@lit/context");
169
+ var import_lit3 = require("lit");
170
+ var import_decorators3 = require("lit/decorators.js");
171
+ var QtiAssessmentTest = class extends import_lit3.LitElement {
172
+ async connectedCallback() {
173
+ super.connectedCallback();
174
+ await this.updateComplete;
175
+ this.dispatchEvent(
176
+ new CustomEvent("qti-assessment-test-connected", {
177
+ detail: this,
178
+ bubbles: true,
179
+ composed: true
180
+ })
181
+ );
182
+ }
183
+ render() {
184
+ return import_lit3.html` <slot></slot>`;
185
+ }
186
+ };
187
+ __decorateClass([
188
+ (0, import_decorators3.property)({ type: String })
189
+ ], QtiAssessmentTest.prototype, "identifier", 2);
190
+ __decorateClass([
191
+ (0, import_decorators3.property)({ type: String })
192
+ ], QtiAssessmentTest.prototype, "title", 2);
193
+ __decorateClass([
194
+ (0, import_context6.consume)({ context: testContext, subscribe: true })
195
+ ], QtiAssessmentTest.prototype, "_testContext", 2);
196
+ QtiAssessmentTest = __decorateClass([
197
+ (0, import_decorators3.customElement)("qti-assessment-test")
198
+ ], QtiAssessmentTest);
199
+
200
+ // src/lib/qti-test/qti-assessment-test/qti-test-part.ts
201
+ var import_lit4 = require("lit");
202
+ var import_decorators4 = require("lit/decorators.js");
203
+ var QtiTestPart = class extends import_lit4.LitElement {
204
+ constructor() {
205
+ super(...arguments);
206
+ this.identifier = "";
207
+ this.title = "";
208
+ this.class = "";
209
+ this.NavigationMode = "nonlinear";
210
+ this.submissionMode = "individual";
211
+ }
212
+ async connectedCallback() {
213
+ super.connectedCallback();
214
+ await this.updateComplete;
215
+ this.dispatchEvent(
216
+ new Event("qti-test-part-connected", {
217
+ bubbles: true,
218
+ composed: true
219
+ })
220
+ );
221
+ }
222
+ render() {
223
+ return import_lit4.html` <slot></slot>`;
224
+ }
225
+ };
226
+ __decorateClass([
227
+ (0, import_decorators4.property)({ type: String })
228
+ ], QtiTestPart.prototype, "identifier", 2);
229
+ __decorateClass([
230
+ (0, import_decorators4.property)({ type: String })
231
+ ], QtiTestPart.prototype, "title", 2);
232
+ __decorateClass([
233
+ (0, import_decorators4.property)({ type: String })
234
+ ], QtiTestPart.prototype, "class", 2);
235
+ __decorateClass([
236
+ (0, import_decorators4.property)({ type: String, attribute: "navigation-mode" })
237
+ ], QtiTestPart.prototype, "NavigationMode", 2);
238
+ __decorateClass([
239
+ (0, import_decorators4.property)({ type: String, attribute: "submission-mode" })
240
+ ], QtiTestPart.prototype, "submissionMode", 2);
241
+ QtiTestPart = __decorateClass([
242
+ (0, import_decorators4.customElement)("qti-test-part")
243
+ ], QtiTestPart);
244
+ if (!customElements.get("qti-test-part")) {
245
+ customElements.define("qti-test-part", QtiTestPart);
246
+ }
247
+
248
+ // src/lib/qti-test/qti-test.ts
249
+ var import_lit6 = require("lit");
250
+ var import_decorators6 = require("lit/decorators.js");
251
+
252
+ // src/lib/qti-transformers/qti-transformers.ts
253
+ var xml = String.raw;
254
+ var xmlToHTML = xml`<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
255
+ <xsl:output method="html" version="5.0" encoding="UTF-8" indent="yes" />
256
+ <xsl:template match="@*|node()">
257
+ <xsl:copy>
258
+ <xsl:apply-templates select="@*|node()"/>
259
+ </xsl:copy>
260
+ </xsl:template>
261
+
262
+ <!-- remove existing namespaces -->
263
+ <xsl:template match="*">
264
+ <!-- remove element prefix -->
265
+ <xsl:element name="{local-name()}">
266
+ <!-- process attributes -->
267
+ <xsl:for-each select="@*">
268
+ <!-- remove attribute prefix -->
269
+ <xsl:attribute name="{local-name()}">
270
+ <xsl:value-of select="."/>
271
+ </xsl:attribute>
272
+ </xsl:for-each>
273
+ <xsl:apply-templates/>
274
+ </xsl:element>
275
+ </xsl:template>
276
+ </xsl:stylesheet>`;
277
+ function extendElementName(xmlFragment, tagName, extension) {
278
+ xmlFragment.querySelectorAll(tagName).forEach((element) => {
279
+ const newTagName = `${tagName}-${extension}`;
280
+ const newElement = createElementWithNewTagName(element, newTagName);
281
+ element.replaceWith(newElement);
282
+ });
283
+ }
284
+ function extendElementsWithClass(xmlFragment, classNamePattern) {
285
+ xmlFragment.querySelectorAll("*").forEach((element) => {
286
+ const classList = element.classList;
287
+ if (classList) {
288
+ classList.forEach((className) => {
289
+ if (className.startsWith(`${classNamePattern}:`)) {
290
+ const suffix = className.slice(`${classNamePattern}:`.length);
291
+ const newTagName = `${element.nodeName}-${suffix}`;
292
+ const newElement = createElementWithNewTagName(element, newTagName);
293
+ element.replaceWith(newElement);
294
+ }
295
+ });
296
+ }
297
+ });
298
+ }
299
+ function createElementWithNewTagName(element, newTagName) {
300
+ const newElement = document.createElement(newTagName);
301
+ for (const attr of element.attributes) {
302
+ newElement.setAttribute(attr.name, attr.value);
303
+ }
304
+ while (element.firstChild) {
305
+ newElement.appendChild(element.firstChild);
306
+ }
307
+ return newElement;
308
+ }
309
+ function itemsFromTest(xmlFragment) {
310
+ const items = [];
311
+ xmlFragment.querySelectorAll("qti-assessment-item-ref").forEach((el) => {
312
+ const identifier = el.getAttribute("identifier");
313
+ const href = el.getAttribute("href");
314
+ const category = el.getAttribute("category");
315
+ items.push({ identifier, href, category });
316
+ });
317
+ return items;
318
+ }
319
+ var currentRequest = null;
320
+ function loadXML(url, cancelPreviousRequest = false) {
321
+ if (cancelPreviousRequest && currentRequest !== null) {
322
+ currentRequest.abort();
323
+ }
324
+ return new Promise((resolve, reject) => {
325
+ const xhr = new XMLHttpRequest();
326
+ currentRequest = xhr;
327
+ xhr.open("GET", url, true);
328
+ xhr.responseType = "document";
329
+ xhr.onload = () => {
330
+ if (xhr.status >= 200 && xhr.status < 300) {
331
+ resolve(xhr.responseXML);
332
+ } else {
333
+ reject(xhr.statusText);
334
+ }
335
+ };
336
+ xhr.onerror = () => {
337
+ reject(xhr.statusText);
338
+ };
339
+ xhr.send();
340
+ });
341
+ }
342
+ function parseXML(xmlDocument) {
343
+ const parser = new DOMParser();
344
+ const xmlFragment = parser.parseFromString(xmlDocument, "text/xml");
345
+ return xmlFragment;
346
+ }
347
+ function toHTML(xmlFragment) {
348
+ const processor = new XSLTProcessor();
349
+ const xsltDocument = new DOMParser().parseFromString(xmlToHTML, "text/xml");
350
+ processor.importStylesheet(xsltDocument);
351
+ const itemHTMLFragment = processor.transformToFragment(xmlFragment, document);
352
+ return itemHTMLFragment;
353
+ }
354
+ function setLocation(xmlFragment, location) {
355
+ if (!location.endsWith("/")) {
356
+ location += "/";
357
+ }
358
+ xmlFragment.querySelectorAll("[src],[href],[primary-path]").forEach((elWithSrc) => {
359
+ let attr = "";
360
+ if (elWithSrc.getAttribute("src")) {
361
+ attr = "src";
362
+ }
363
+ if (elWithSrc.getAttribute("href")) {
364
+ attr = "href";
365
+ }
366
+ if (elWithSrc.getAttribute("primary-path")) {
367
+ attr = "primary-path";
368
+ }
369
+ const attrValue = elWithSrc.getAttribute(attr)?.trim();
370
+ if (!attrValue.startsWith("data:") && !attrValue.startsWith("http")) {
371
+ const newSrcValue = location + encodeURI(attrValue);
372
+ elWithSrc.setAttribute(attr, newSrcValue);
373
+ }
374
+ });
375
+ }
376
+ function convertCDATAtoComment(xmlFragment) {
377
+ const cdataElements = xmlFragment.querySelectorAll('qti-custom-operator[class="js.org"] > qti-base-value');
378
+ cdataElements.forEach((element) => {
379
+ const commentText = document.createComment(element.textContent);
380
+ element.replaceChild(commentText, element.firstChild);
381
+ });
382
+ }
383
+ function stripStyleSheets(xmlFragment) {
384
+ xmlFragment.querySelectorAll("qti-stylesheet").forEach((stylesheet) => stylesheet.remove());
385
+ }
386
+
387
+ // src/lib/qti-transformers/qti-transform-item.ts
388
+ var qtiTransformItem = () => {
389
+ let xmlFragment;
390
+ const api = {
391
+ async load(uri, cancelPreviousRequest = false) {
392
+ return new Promise((resolve) => {
393
+ loadXML(uri, cancelPreviousRequest).then((xml2) => {
394
+ xmlFragment = xml2;
395
+ api.path(uri.substring(0, uri.lastIndexOf("/")));
396
+ return resolve(api);
397
+ });
398
+ });
399
+ },
400
+ parse(xmlString) {
401
+ xmlFragment = parseXML(xmlString);
402
+ return api;
403
+ },
404
+ path: (location) => {
405
+ setLocation(xmlFragment, location);
406
+ return api;
407
+ },
408
+ fn(fn) {
409
+ fn(xmlFragment);
410
+ return api;
411
+ },
412
+ pciHooks(uri) {
413
+ const attributes = ["hook", "module"];
414
+ const documentPath = uri.substring(0, uri.lastIndexOf("/"));
415
+ for (const attribute of attributes) {
416
+ const srcAttributes = xmlFragment.querySelectorAll("[" + attribute + "]");
417
+ srcAttributes.forEach((node) => {
418
+ const srcValue = node.getAttribute(attribute);
419
+ if (!srcValue.startsWith("data:") && !srcValue.startsWith("http")) {
420
+ node.setAttribute("base-url", uri);
421
+ node.setAttribute(
422
+ "module",
423
+ documentPath + "/" + encodeURI(srcValue + (srcValue.endsWith(".js") ? "" : ".js"))
424
+ );
425
+ }
426
+ });
427
+ }
428
+ return api;
429
+ },
430
+ extendElementName: (tagName, extension) => {
431
+ extendElementName(xmlFragment, tagName, extension);
432
+ return api;
433
+ },
434
+ extendElementsWithClass: (param = "extend") => {
435
+ extendElementsWithClass(xmlFragment, param);
436
+ return api;
437
+ },
438
+ customInteraction(baseRef, baseItem) {
439
+ const qtiCustomInteraction = xmlFragment.querySelector("qti-custom-interaction");
440
+ const qtiCustomInteractionObject = qtiCustomInteraction.querySelector("object");
441
+ qtiCustomInteraction.setAttribute("data-base-ref", baseRef);
442
+ qtiCustomInteraction.setAttribute("data-base-item", baseRef + baseItem);
443
+ qtiCustomInteraction.setAttribute("data", qtiCustomInteractionObject.getAttribute("data"));
444
+ qtiCustomInteraction.setAttribute("width", qtiCustomInteractionObject.getAttribute("width"));
445
+ qtiCustomInteraction.setAttribute("height", qtiCustomInteractionObject.getAttribute("height"));
446
+ qtiCustomInteraction.removeChild(qtiCustomInteractionObject);
447
+ return api;
448
+ },
449
+ convertCDATAtoComment() {
450
+ convertCDATAtoComment(xmlFragment);
451
+ return api;
452
+ },
453
+ stripStyleSheets() {
454
+ stripStyleSheets(xmlFragment);
455
+ return api;
456
+ },
457
+ html() {
458
+ return new XMLSerializer().serializeToString(toHTML(xmlFragment));
459
+ },
460
+ xml() {
461
+ return new XMLSerializer().serializeToString(xmlFragment);
462
+ },
463
+ htmlDoc() {
464
+ return toHTML(xmlFragment);
465
+ },
466
+ xmlDoc() {
467
+ return xmlFragment;
468
+ }
469
+ };
470
+ return api;
471
+ };
472
+
473
+ // src/lib/qti-transformers/qti-transform-test.ts
474
+ var qtiTransformTest = () => {
475
+ let xmlFragment;
476
+ const api = {
477
+ async load(uri) {
478
+ return new Promise((resolve, _) => {
479
+ loadXML(uri).then((xml2) => {
480
+ xmlFragment = xml2;
481
+ return resolve(api);
482
+ });
483
+ });
484
+ },
485
+ parse(xmlString) {
486
+ xmlFragment = parseXML(xmlString);
487
+ return api;
488
+ },
489
+ fn(fn) {
490
+ fn(xmlFragment);
491
+ return api;
492
+ },
493
+ items() {
494
+ return itemsFromTest(xmlFragment);
495
+ },
496
+ html() {
497
+ return new XMLSerializer().serializeToString(toHTML(xmlFragment));
498
+ },
499
+ xml() {
500
+ return new XMLSerializer().serializeToString(xmlFragment);
501
+ },
502
+ htmlDoc() {
503
+ return toHTML(xmlFragment);
504
+ },
505
+ xmlDoc() {
506
+ return xmlFragment;
507
+ }
508
+ };
509
+ return api;
510
+ };
511
+
512
+ // src/lib/qti-test/mixins/test-loader.mixin.ts
513
+ var TestLoaderMixin = (superClass) => {
514
+ class TestLoaderClass extends superClass {
515
+ constructor(...args) {
516
+ super(...args);
517
+ this.testURL = "";
518
+ this.addEventListener("qti-load-test-request", (e) => {
519
+ const { testURL } = e.detail;
520
+ if (!testURL) {
521
+ console.warn(
522
+ "No test found, there should be an aattribute test-url with the path to the test on the test-container"
523
+ );
524
+ } else {
525
+ this.testURL = testURL;
526
+ }
527
+ e.detail.promise = (async () => {
528
+ e.preventDefault();
529
+ const api = await qtiTransformTest().load(`${this.testURL}`);
530
+ return api.htmlDoc();
531
+ })();
532
+ });
533
+ this.addEventListener("qti-assessment-test-connected", () => {
534
+ });
535
+ this.addEventListener("qti-load-item-request", ({ detail }) => {
536
+ if (!this.testURL) return;
537
+ detail.promise = (async () => {
538
+ const api = await qtiTransformItem().load(
539
+ `${this.testURL.slice(0, this.testURL.lastIndexOf("/"))}/${detail.href}`,
540
+ detail.cancelPreviousRequest
541
+ );
542
+ return api.htmlDoc();
543
+ })();
544
+ });
545
+ this.addEventListener("qti-interaction-changed", (_e) => {
546
+ });
547
+ this.addEventListener("qti-outcome-changed", () => {
548
+ });
549
+ }
550
+ }
551
+ return TestLoaderClass;
552
+ };
553
+
554
+ // src/lib/qti-test/mixins/test-navigation.mixin.ts
555
+ var TestNavigationMixin = (superClass) => {
556
+ class TestNavigationClass extends superClass {
557
+ constructor(...args) {
558
+ super(...args);
559
+ this.addEventListener("qti-request-test-item", ({ detail: navItemId }) => {
560
+ if (!navItemId) return;
561
+ this._clearLoadedItems();
562
+ const itemRefEl = this.testElement.el.querySelector(`qti-assessment-item-ref[identifier="${navItemId}"]`);
563
+ const promise = this._loadItemRequest(itemRefEl.href, true);
564
+ const navPartId = itemRefEl.closest("qti-test-part").identifier;
565
+ const navSectionId = itemRefEl.closest("qti-assessment-section").identifier;
566
+ this._testContext = { ...this._testContext, navPartId, navSectionId, navItemId, navItemLoading: true };
567
+ if (promise) {
568
+ promise.then((doc) => {
569
+ itemRefEl.xmlDoc = doc;
570
+ requestAnimationFrame(() => this.dispatchEvent(new CustomEvent("qti-item-connected", { bubbles: true, composed: true })));
571
+ this._testContext = { ...this._testContext, navItemLoading: false };
572
+ }).catch((error) => console.error("Failed to load item:", error));
573
+ } else {
574
+ console.info("Load item request was not handled:", itemRefEl.href);
575
+ }
576
+ });
577
+ this.addEventListener("qti-assessment-test-connected", () => {
578
+ let navItemId = this._testContext.navItemId;
579
+ if (!navItemId) {
580
+ const itemRefEl = this.testElement.el.querySelector("qti-assessment-item-ref");
581
+ navItemId = itemRefEl.identifier;
582
+ }
583
+ this.dispatchEvent(new CustomEvent("qti-request-test-item", { detail: navItemId, bubbles: true, composed: true }));
584
+ });
585
+ }
586
+ _clearLoadedItems() {
587
+ const itemRefEls = this.testElement.el.querySelectorAll(`qti-assessment-test qti-assessment-item-ref`);
588
+ Array.from(itemRefEls).forEach((itemElement) => {
589
+ itemElement.xmlDoc = null;
590
+ });
591
+ }
592
+ _loadItemRequest(href, cancelPreviousRequest = true) {
593
+ const event = new CustomEvent("qti-load-item-request", {
594
+ bubbles: true,
595
+ composed: true,
596
+ detail: {
597
+ href,
598
+ promise: null,
599
+ cancelPreviousRequest
600
+ }
601
+ });
602
+ this.dispatchEvent(event);
603
+ return event.detail.promise;
604
+ }
605
+ }
606
+ return TestNavigationClass;
607
+ };
608
+
609
+ // src/lib/qti-test/mixins/test-view.mixin.ts
610
+ var TestViewMixin = (superClass) => {
611
+ class TestViewClass extends superClass {
612
+ constructor(...args) {
613
+ super(...args);
614
+ this._testContext = { ...this._testContext, view: "candidate" };
615
+ this.addEventListener("on-test-switch-view", (e) => {
616
+ this._testContext = { ...this._testContext, view: e.detail };
617
+ this._updateElementView();
618
+ });
619
+ this.addEventListener("qti-assessment-test-connected", () => {
620
+ this._updateElementView();
621
+ });
622
+ this.addEventListener("qti-assessment-item-connected", (e) => {
623
+ this._updateElementView();
624
+ this._setCorrectResponseVisibility(e.detail);
625
+ });
626
+ }
627
+ willUpdate(changedProperties) {
628
+ super.willUpdate(changedProperties);
629
+ if (changedProperties.has("_testContext")) {
630
+ this._updateElementView();
631
+ }
632
+ }
633
+ // Method to handle view updates for elements based on the current context view
634
+ _updateElementView() {
635
+ if (this.testElement && this.testElement.el) {
636
+ const viewElements = Array.from(this.testElement.el.querySelectorAll("[view]"));
637
+ viewElements.forEach((element) => {
638
+ element.classList.toggle("show", element.getAttribute("view") === this._testContext.view);
639
+ });
640
+ const assessmentItem = this.testElement.el.querySelector(
641
+ `qti-assessment-item[identifier="${this._testContext.navItemId}"]`
642
+ );
643
+ if (assessmentItem) {
644
+ assessmentItem.showCorrectResponse(this._testContext.view === "scorer");
645
+ }
646
+ }
647
+ }
648
+ // Event handler for connected QTI assessment items
649
+ _setCorrectResponseVisibility(assessmentItem) {
650
+ assessmentItem.showCorrectResponse(this._testContext.view === "scorer");
651
+ }
652
+ }
653
+ return TestViewClass;
654
+ };
655
+
656
+ // src/lib/qti-test/test-base.ts
657
+ var import_context8 = require("@lit/context");
658
+ var import_lit5 = require("lit");
659
+ var import_decorators5 = require("lit/decorators.js");
660
+ var TestBase = class extends import_lit5.LitElement {
661
+ constructor() {
662
+ super();
663
+ this._testContext = { items: [], testOutcomeVariables: [] };
664
+ this.testElement = { el: null };
665
+ /**
666
+ * Updates the variables of an assessment item in the test context.
667
+ * - Matches the assessment item with the corresponding test context item.
668
+ * - If the item is not found, logs a warning.
669
+ * - Updates variables in the test context if exactly one variable exists.
670
+ * - Otherwise, syncs the assessment item's variables with the test context.
671
+ *
672
+ * @param assessmentItem - The assessment item to update.
673
+ */
674
+ this._updateItemInTestContext = (assessmentItem) => {
675
+ const { identifier, variables } = assessmentItem;
676
+ const itemContext = this._testContext.items.find((i) => i?.identifier === identifier);
677
+ if (!itemContext) {
678
+ console.warn(`Item IDs between assessment.xml and item.xml should match: ${identifier} is not found!`);
679
+ return;
680
+ }
681
+ if (itemContext.variables?.length === 1) {
682
+ this._updateItemVariablesInTestContext(identifier, variables);
683
+ } else {
684
+ assessmentItem.variables = [...itemContext.variables || []];
685
+ }
686
+ };
687
+ this.addEventListener("qti-assessment-test-connected", (e) => {
688
+ const qtiAssessmentTest = e.detail;
689
+ const items = Array.from(qtiAssessmentTest.querySelectorAll("qti-assessment-item-ref")).map(
690
+ (itemRef) => ({
691
+ href: itemRef.href,
692
+ identifier: itemRef.identifier,
693
+ category: itemRef.category,
694
+ variables: [{ identifier: "completionStatus", value: "not_attempted", type: "outcome" }]
695
+ })
696
+ );
697
+ this.testElement = { el: qtiAssessmentTest };
698
+ this._testContext = { ...this._testContext, items };
699
+ });
700
+ this.addEventListener("qti-assessment-item-connected", (e) => {
701
+ this._updateItemInTestContext(e.detail);
702
+ });
703
+ this.addEventListener("qti-outcome-changed", (e) => {
704
+ const assessmentitem = e.composedPath()[0];
705
+ this._updateItemVariablesInTestContext(assessmentitem.identifier, assessmentitem.variables);
706
+ });
707
+ }
708
+ get context() {
709
+ return this._testContext;
710
+ }
711
+ // /* restores the context by updating existing items and adding new items from the "contextToRestore" parameter into the "this._context.items" array. */
712
+ set context(testContext2) {
713
+ if (testContext2 === null || testContext2 === void 0) return;
714
+ this._testContext = { ...testContext2 };
715
+ testContext2.items?.forEach((itemContext) => {
716
+ const existingItemContext = this._testContext.items.find((i) => i.identifier === itemContext.identifier);
717
+ if (existingItemContext) {
718
+ existingItemContext.variables = itemContext.variables;
719
+ } else {
720
+ this._testContext.items.push(itemContext);
721
+ }
722
+ });
723
+ }
724
+ _updateItemVariablesInTestContext(identifier, variables) {
725
+ this._testContext = {
726
+ ...this._testContext,
727
+ // Spread existing test context properties
728
+ items: this._testContext.items.map((itemContext) => {
729
+ if (itemContext.identifier !== identifier) {
730
+ return itemContext;
731
+ }
732
+ return {
733
+ ...itemContext,
734
+ // Keep other properties of the item context
735
+ variables: variables.map((variable) => {
736
+ const matchingVariable = itemContext.variables.find((v) => v.identifier === variable.identifier);
737
+ return matchingVariable ? { ...matchingVariable, ...variable } : variable;
738
+ })
739
+ };
740
+ })
741
+ };
742
+ }
743
+ // private _addItemToTestContext(
744
+ // e: CustomEvent<{ href: string; identifier: string; category: string }> & { target: QtiAssessmentItemRef }
745
+ // ): void {
746
+ // const { href, identifier, category } = e.detail;
747
+ // // Update test context items, adding a new item if the identifier is not already in the list
748
+ // if (!this._testContext.items.some(item => item.identifier === identifier)) {
749
+ // this._testContext.items.push({
750
+ // href,
751
+ // identifier,
752
+ // category,
753
+ // variables: [{ identifier: 'completionStatus', value: 'not_attempted', type: 'outcome' }]
754
+ // // category: e.target.category
755
+ // });
756
+ // }
757
+ // }
758
+ connectedCallback() {
759
+ super.connectedCallback();
760
+ this.setAttribute("qti-test", "");
761
+ }
762
+ };
763
+ __decorateClass([
764
+ (0, import_decorators5.state)(),
765
+ (0, import_context8.provide)({ context: testContext })
766
+ ], TestBase.prototype, "_testContext", 2);
767
+ __decorateClass([
768
+ (0, import_decorators5.state)(),
769
+ (0, import_context8.provide)({ context: testElement })
770
+ ], TestBase.prototype, "testElement", 2);
771
+
772
+ // src/lib/qti-test/qti-test.ts
773
+ var QtiTest = class extends TestLoaderMixin(TestNavigationMixin(TestViewMixin(TestBase))) {
774
+ /**
775
+ * Lifecycle callback invoked when the element is added to the DOM.
776
+ * Automatically appends the content of a `<template>` element (if present)
777
+ * to the shadow DOM.
778
+ */
779
+ connectedCallback() {
780
+ super.connectedCallback();
781
+ const template = this.querySelector(":scope > template");
782
+ if (template) {
783
+ this.shadowRoot?.appendChild(template.content);
784
+ }
785
+ }
786
+ /**
787
+ * Renders the component's template.
788
+ * Provides a default `<slot>` for content projection.
789
+ */
790
+ render() {
791
+ return import_lit6.html`<slot></slot>`;
792
+ }
793
+ };
794
+ QtiTest = __decorateClass([
795
+ (0, import_decorators6.customElement)("qti-test")
796
+ ], QtiTest);
797
+
798
+ // src/lib/qti-test/components/test-next.ts
799
+ var import_lit9 = require("lit");
800
+ var import_decorators10 = require("lit/decorators.js");
801
+
802
+ // src/lib/qti-test/components/styles.ts
803
+ var import_lit7 = require("lit");
804
+ var form = import_lit7.css`
805
+ display: inline-flex;
806
+ align-items: center;
807
+ cursor: pointer;
808
+ padding: 0.5rem 1rem;
809
+ border-radius: 0.25rem;
810
+ user-select: none;
811
+ `;
812
+ var btn = import_lit7.css`
813
+ background-color: lightgray;
814
+ ${form};
815
+ `;
816
+ var dis = import_lit7.css`
817
+ cursor: not-allowed;
818
+ opacity: 0.5;
819
+ `;
820
+ var ind = import_lit7.css`
821
+ ${form};
822
+ border: 1px solid gray;
823
+ `;
824
+
825
+ // src/lib/qti-test/components/test-component.abstract.ts
826
+ var import_context10 = require("@lit/context");
827
+ var import_lit8 = require("lit");
828
+ var import_decorators8 = require("lit/decorators.js");
829
+
830
+ // src/lib/decorators/watch.ts
831
+ function watch(propertyName, options) {
832
+ const resolvedOptions = {
833
+ waitUntilFirstUpdate: false,
834
+ ...options
835
+ };
836
+ return (proto, decoratedFnName) => {
837
+ const { update } = proto;
838
+ const watchedProperties = Array.isArray(propertyName) ? propertyName : [propertyName];
839
+ proto.update = function(changedProps) {
840
+ watchedProperties.forEach((property10) => {
841
+ const key = property10;
842
+ if (changedProps.has(key)) {
843
+ const oldValue = changedProps.get(key);
844
+ const newValue = this[key];
845
+ if (oldValue !== newValue) {
846
+ if (!resolvedOptions.waitUntilFirstUpdate || this.hasUpdated) {
847
+ this[decoratedFnName](oldValue, newValue);
848
+ }
849
+ }
850
+ }
851
+ });
852
+ update.call(this, changedProps);
853
+ };
854
+ };
855
+ }
856
+
857
+ // src/lib/decorators/prop-internal-state.ts
858
+ var import_decorators7 = require("lit/decorators.js");
859
+ function propInternalState(options) {
860
+ return (protoOrDescriptor, name) => {
861
+ (0, import_decorators7.property)(options)(protoOrDescriptor, name);
862
+ const key = `__${name}`;
863
+ Object.defineProperty(protoOrDescriptor, name, {
864
+ get() {
865
+ return this[key];
866
+ },
867
+ set(value) {
868
+ const oldValue = this[key];
869
+ this[key] = value;
870
+ if (oldValue !== value) {
871
+ if (this._internals?.states) {
872
+ const stateName = name.toLowerCase();
873
+ if (value) {
874
+ this._internals.states.add(`--${stateName}`);
875
+ } else {
876
+ this._internals.states.delete(`--${stateName}`);
877
+ }
878
+ }
879
+ if (options.aria && this._internals) {
880
+ const ariaAttribute = options.aria;
881
+ if (value) {
882
+ this._internals[ariaAttribute] = "true";
883
+ } else {
884
+ this._internals[ariaAttribute] = null;
885
+ }
886
+ }
887
+ this.requestUpdate(name, oldValue);
888
+ }
889
+ },
890
+ configurable: true,
891
+ enumerable: true
892
+ });
893
+ };
894
+ }
895
+
896
+ // src/lib/qti-test/components/test-component.abstract.ts
897
+ var TestComponent = class extends import_lit8.LitElement {
898
+ constructor() {
899
+ super();
900
+ this.disabled = true;
901
+ this._internals = this.attachInternals();
902
+ }
903
+ _handleTestElementChange(_oldValue, newValue) {
904
+ if (newValue.el) {
905
+ this.disabled = false;
906
+ }
907
+ }
908
+ willUpdate(changedProperties) {
909
+ if (changedProperties.has("_testContext")) {
910
+ const { items = [], navItemId } = this._testContext ?? {};
911
+ this.itemIndex = items.findIndex((item) => item.identifier === navItemId);
912
+ this.items = items;
913
+ this.view = this._testContext?.view;
914
+ }
915
+ }
916
+ _switchView(view) {
917
+ this.dispatchEvent(
918
+ new CustomEvent("on-test-switch-view", {
919
+ composed: true,
920
+ bubbles: true,
921
+ detail: view
922
+ })
923
+ );
924
+ }
925
+ _requestItem(identifier) {
926
+ this.dispatchEvent(
927
+ new CustomEvent("qti-request-test-item", {
928
+ composed: true,
929
+ bubbles: true,
930
+ detail: identifier
931
+ })
932
+ );
933
+ }
934
+ };
935
+ __decorateClass([
936
+ propInternalState({
937
+ type: Boolean,
938
+ reflect: true,
939
+ aria: "ariaDisabled"
940
+ // Maps to `aria-disabled` attribute
941
+ })
942
+ ], TestComponent.prototype, "disabled", 2);
943
+ __decorateClass([
944
+ (0, import_decorators8.state)(),
945
+ (0, import_context10.consume)({ context: testContext, subscribe: true })
946
+ ], TestComponent.prototype, "_testContext", 2);
947
+ __decorateClass([
948
+ (0, import_decorators8.state)(),
949
+ (0, import_context10.consume)({ context: testElement, subscribe: true })
950
+ ], TestComponent.prototype, "_testElement", 2);
951
+ __decorateClass([
952
+ watch("_testElement")
953
+ ], TestComponent.prototype, "_handleTestElementChange", 1);
954
+
955
+ // src/lib/qti-test/components/test-next.ts
956
+ var TestNext = class extends TestComponent {
957
+ constructor() {
958
+ super();
959
+ this._internals.role = "button";
960
+ this._internals.ariaLabel = "Next item";
961
+ this.addEventListener("click", (e) => {
962
+ e.preventDefault();
963
+ if (!this.disabled) this._requestItem(this.items[this.itemIndex + 1].identifier);
964
+ });
965
+ }
966
+ willUpdate(changedProperties) {
967
+ super.willUpdate(changedProperties);
968
+ if (changedProperties.has("_testContext")) {
969
+ this.disabled = !this._testElement?.el || this.itemIndex < 0 || this.itemIndex >= this.items.length - 1;
970
+ }
971
+ }
972
+ render() {
973
+ return import_lit9.html`<slot></slot>`;
974
+ }
975
+ };
976
+ TestNext.styles = import_lit9.css`
977
+ :host {
978
+ ${btn};
979
+ }
980
+ :host([disabled]) {
981
+ ${dis};
982
+ }
983
+ `;
984
+ TestNext = __decorateClass([
985
+ (0, import_decorators10.customElement)("test-next")
986
+ ], TestNext);
987
+
988
+ // src/lib/qti-test/components/test-prev.ts
989
+ var import_lit10 = require("lit");
990
+ var import_decorators11 = require("lit/decorators.js");
991
+ var TestPrev = class extends TestComponent {
992
+ constructor() {
993
+ super();
994
+ this._internals.role = "button";
995
+ this._internals.ariaLabel = "Next item";
996
+ this.addEventListener("click", (e) => {
997
+ e.preventDefault();
998
+ if (!this.disabled) this._requestItem(this.items[this.itemIndex - 1].identifier);
999
+ });
1000
+ }
1001
+ willUpdate(changedProperties) {
1002
+ super.willUpdate(changedProperties);
1003
+ if (changedProperties.has("_testContext")) {
1004
+ this.disabled = !this._testElement?.el || this.itemIndex === 0 || this.itemIndex === -1;
1005
+ }
1006
+ }
1007
+ render() {
1008
+ return import_lit10.html`<slot></slot>`;
1009
+ }
1010
+ };
1011
+ TestPrev.styles = import_lit10.css`
1012
+ :host {
1013
+ ${btn};
1014
+ }
1015
+ :host([disabled]) {
1016
+ ${dis};
1017
+ }
1018
+ `;
1019
+ TestPrev = __decorateClass([
1020
+ (0, import_decorators11.customElement)("test-prev")
1021
+ ], TestPrev);
1022
+
1023
+ // src/lib/qti-test/components/test-view.ts
1024
+ var import_lit11 = require("lit");
1025
+ var import_decorators12 = require("lit/decorators.js");
1026
+ var TestView = class extends TestComponent {
1027
+ constructor() {
1028
+ super(...arguments);
1029
+ this.label = "view";
1030
+ this.viewOptions = "";
1031
+ this._handleViewOptionsChange = (_, viewOptions) => {
1032
+ console.log(viewOptions);
1033
+ };
1034
+ this._viewOptions = TestView.DEFAULT_VIEW_OPTIONS;
1035
+ }
1036
+ // updated(changedProperties: PropertyValues) {
1037
+ // super.updated(changedProperties);
1038
+ // if (changedProperties.has('viewOptionsString')) {
1039
+ // this._updateViewOptions();
1040
+ // }
1041
+ // }
1042
+ // private _updateViewOptions() {
1043
+ // if (this.viewOptionsString) {
1044
+ // const options = this.viewOptionsString.split(',').map(opt => opt.trim());
1045
+ // this.viewOptions = options.filter(opt => TestView.DEFAULT_VIEW_OPTIONS.includes(opt));
1046
+ // } else {
1047
+ // this.viewOptions = TestView.DEFAULT_VIEW_OPTIONS;
1048
+ // }
1049
+ // }
1050
+ render() {
1051
+ return import_lit11.html`
1052
+ <label part="label" for="viewSelect">${this.label}</label>
1053
+ <select
1054
+ part="select"
1055
+ id="viewSelect"
1056
+ .disabled=${this.disabled}
1057
+ @change=${(e) => {
1058
+ const el = e.target;
1059
+ this._switchView(el.value);
1060
+ }}
1061
+ >
1062
+ ${this._viewOptions.map((v) => import_lit11.html`<option value="${v}" ?selected=${v === this.view}>${v}</option>`)}
1063
+ </select>
1064
+ `;
1065
+ }
1066
+ };
1067
+ TestView.DEFAULT_VIEW_OPTIONS = ["author", "candidate", "proctor", "scorer", "testConstructor", "tutor"];
1068
+ __decorateClass([
1069
+ (0, import_decorators12.property)({ type: String })
1070
+ ], TestView.prototype, "label", 2);
1071
+ __decorateClass([
1072
+ (0, import_decorators12.property)({ type: String, attribute: "view-options" })
1073
+ ], TestView.prototype, "viewOptions", 2);
1074
+ __decorateClass([
1075
+ watch("viewOptions")
1076
+ ], TestView.prototype, "_handleViewOptionsChange", 2);
1077
+ TestView = __decorateClass([
1078
+ (0, import_decorators12.customElement)("test-view")
1079
+ ], TestView);
1080
+
1081
+ // src/lib/qti-test/components/test-item-link.ts
1082
+ var import_lit12 = require("lit");
1083
+ var import_decorators13 = require("lit/decorators.js");
1084
+ var TestItemLink = class extends TestComponent {
1085
+ constructor() {
1086
+ super();
1087
+ this.itemId = null;
1088
+ this.addEventListener("click", () => this._requestItem(this.itemId));
1089
+ }
1090
+ render() {
1091
+ return import_lit12.html` <slot></slot> `;
1092
+ }
1093
+ };
1094
+ __decorateClass([
1095
+ (0, import_decorators13.property)({ type: String, attribute: "item-id" })
1096
+ ], TestItemLink.prototype, "itemId", 2);
1097
+ TestItemLink = __decorateClass([
1098
+ (0, import_decorators13.customElement)("test-item-link")
1099
+ ], TestItemLink);
1100
+
1101
+ // src/lib/qti-test/components/test-container.ts
1102
+ var import_lit13 = require("lit");
1103
+ var import_decorators14 = require("lit/decorators.js");
1104
+ var import_until = require("lit/directives/until.js");
1105
+
1106
+ // inline:../../../item.css?inline
1107
+ var item_default = `@layer qti-base, qti-components, qti-utilities, qti-variants, qti-extended;
1108
+
1109
+ :root,
1110
+ :host {
1111
+ /* Active colors */
1112
+ --qti-bg-active: #ffecec;
1113
+ --qti-border-active: #f86d70;
1114
+
1115
+ /* Gap size */
1116
+ --qti-gap-size: 1rem;
1117
+
1118
+ /* Background colors */
1119
+ --qti-bg: white;
1120
+ --qti-hover-bg: #f9fafb;
1121
+
1122
+ /* Light theme colors */
1123
+ --qti-light-bg-active: #f0f0f0; /* Light gray */
1124
+ --qti-light-border-active: #d0d0d0; /* Medium gray */
1125
+
1126
+ /* Dark theme colors */
1127
+ --qti-dark-bg-active: #1f2937; /* Dark gray */
1128
+ --qti-dark-border-active: #64748b; /* Medium gray */
1129
+
1130
+ /* Disabled colors */
1131
+ --qti-disabled-bg: #f3f4f6;
1132
+ --qti-disabled-color: #45484f;
1133
+
1134
+ /* Border properties */
1135
+ --qti-border-thickness: 2px;
1136
+ --qti-border-style: solid;
1137
+ --qti-border-color: #c6cad0;
1138
+ --qti-border-radius: 0.3rem;
1139
+ --qti-drop-border-radius: calc(var(--qti-border-radius) + var(--qti-border-thickness));
1140
+
1141
+ /* Focus & active states */
1142
+ --qti-focus-border-width: 5px;
1143
+ --qti-focus-color: #bddcff7e;
1144
+
1145
+ /* Class-specific variables */
1146
+
1147
+ /* Form elements */
1148
+ --qti-form-size: 1rem;
1149
+
1150
+ /* Point elements */
1151
+ --qti-point-size: 2rem;
1152
+
1153
+ /* Order buttons */
1154
+ --qti-order-size: 2rem;
1155
+
1156
+ /* Generic padding for all elements */
1157
+ --qti-padding-vertical: 0.5rem; /* py-2 */
1158
+ --qti-padding-horizontal: 0.5rem; /* px-2 */
1159
+ }
1160
+
1161
+ /* SVG masks and backgrounds */
1162
+
1163
+ .chevron {
1164
+ background: url("data:image/svg+xml,%3Csvg fill='currentColor' width='22' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath clip-rule='evenodd' fill-rule='evenodd' d='M5.23 7.21a.75.75 0 011.06.02L10 11.168l3.71-3.938a.75.75 0 111.08 1.04l-4.25 4.5a.75.75 0 01-1.08 0l-4.25-4.5a.75.75 0 01.02-1.06z'%3E%3C/path%3E%3C/svg%3E")
1165
+ no-repeat center right 6px;
1166
+ }
1167
+
1168
+ .handle {
1169
+ background-image: radial-gradient(
1170
+ circle at center,
1171
+ rgb(0 0 0 / 10%) 0,
1172
+ rgb(0 0 0 / 20%) 2px,
1173
+ rgb(255 255 255 / 0%) 2px,
1174
+ rgb(255 255 255 / 0%) 100%
1175
+ );
1176
+ background-repeat: repeat-y;
1177
+ background-position: left center;
1178
+ background-size: 14px 8px;
1179
+ }
1180
+
1181
+ .check-mask {
1182
+ -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='currentColor' width='100%' height='100%' viewBox='0 0 24 24'%3E%3Cpath d='M20.285 2l-11.285 11.567-5.286-5.011-3.714 3.716 9 8.728 15-15.285z'/%3E%3C/svg%3E");
1183
+ mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='currentColor' width='100%' height='100%' viewBox='0 0 24 24'%3E%3Cpath d='M20.285 2l-11.285 11.567-5.286-5.011-3.714 3.716 9 8.728 15-15.285z'/%3E%3C/svg%3E");
1184
+ }
1185
+
1186
+ /*
1187
+ Following are classes that can be applied to elements and element states, so they are not used directly
1188
+ The @apply directive is used to apply these classes to elements
1189
+ */
1190
+
1191
+ /* Apply .bordered to an element */
1192
+
1193
+ .bordered {
1194
+ border: var(--qti-border-thickness) var(--qti-border-style) var(--qti-border-color);
1195
+ outline: none;
1196
+ }
1197
+
1198
+ /* Apply .form rules for checkbox and radiobutton */
1199
+
1200
+ .form {
1201
+
1202
+ display: grid;
1203
+ place-content: center;
1204
+ width: var(--qti-form-size);
1205
+ height: var(--qti-form-size);
1206
+ border: var(--qti-border-thickness) var(--qti-border-style) var(--qti-border-color);
1207
+ outline: none;
1208
+ }
1209
+
1210
+ /* Apply .button rules for button-like elements, such as drags and buttons */
1211
+
1212
+ .button {
1213
+
1214
+ border-radius: var(--qti-border-radius);
1215
+ padding: var(--qti-padding-vertical) var(--qti-padding-horizontal);
1216
+ border: var(--qti-border-thickness) var(--qti-border-style) var(--qti-border-color);
1217
+ outline: none;
1218
+ }
1219
+
1220
+ /* Apply .select for the select dropdown element */
1221
+
1222
+ .select {
1223
+
1224
+ border-radius: var(--qti-border-radius);
1225
+ position: relative;
1226
+ -webkit-appearance: none;
1227
+ -moz-appearance: none;
1228
+ appearance: none;
1229
+ padding: var(--qti-padding-vertical) var(--qti-padding-horizontal);
1230
+ padding-right: calc(var(--qti-padding-horizontal) + 1.5rem); /* 1.5rem for the chevron */ border: var(--qti-border-thickness) var(--qti-border-style) var(--qti-border-color); outline: none; background: url("data:image/svg+xml,%3Csvg fill='currentColor' width='22' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath clip-rule='evenodd' fill-rule='evenodd' d='M5.23 7.21a.75.75 0 011.06.02L10 11.168l3.71-3.938a.75.75 0 111.08 1.04l-4.25 4.5a.75.75 0 01-1.08 0l-4.25-4.5a.75.75 0 01.02-1.06z'%3E%3C/path%3E%3C/svg%3E")
1231
+ no-repeat center right 6px;
1232
+ }
1233
+
1234
+ /* Apply .text for the input text and textarea */
1235
+
1236
+ .text {
1237
+
1238
+ border-radius: 0;
1239
+ cursor: text;
1240
+ padding: var(--qti-padding-vertical) var(--qti-padding-horizontal);
1241
+ background: unset;
1242
+ border: var(--qti-border-thickness) var(--qti-border-style) var(--qti-border-color);
1243
+ outline: none;
1244
+ }
1245
+
1246
+ /* Apply .spot for hotspot shapes */
1247
+
1248
+ .spot {
1249
+
1250
+ width: 100%;
1251
+ height: 100%;
1252
+ background-color: transparent;
1253
+ padding: 0;
1254
+ border: var(--qti-border-thickness) var(--qti-border-style) var(--qti-border-color);
1255
+ outline: none;
1256
+ }
1257
+
1258
+ /* Apply .point for circular small hotspots */
1259
+
1260
+ .point {
1261
+
1262
+ border-radius: 100%;
1263
+ width: var(--qti-point-size);
1264
+ height: var(--qti-point-size);
1265
+ background-color: transparent;
1266
+ padding: 0;
1267
+ border: var(--qti-border-thickness) var(--qti-border-style) var(--qti-border-color);
1268
+ outline: none;
1269
+ }
1270
+
1271
+ /* Apply .drag for draggable elements */
1272
+
1273
+ .drag {
1274
+
1275
+ transition:
1276
+ transform 200ms ease-out,
1277
+ box-shadow 200ms ease-out,
1278
+ rotate 200ms ease-out;
1279
+ cursor: grab;
1280
+ background-color: var(--qti-bg);
1281
+ padding: var(--qti-padding-vertical) var(--qti-padding-horizontal);
1282
+ border-radius: var(--qti-border-radius);
1283
+ padding-left: calc(var(--qti-padding-horizontal) + 0.5rem) !important; /* 1.5rem for the drag */ border: var(--qti-border-thickness) var(--qti-border-style) var(--qti-border-color); outline: none; background-image: radial-gradient(
1284
+ circle at center,
1285
+ rgb(0 0 0 / 10%) 0,
1286
+ rgb(0 0 0 / 20%) 2px,
1287
+ rgb(255 255 255 / 0%) 2px,
1288
+ rgb(255 255 255 / 0%) 100%
1289
+ ); background-repeat: repeat-y; background-position: left center; background-size: 14px 8px;
1290
+ }
1291
+
1292
+ /* Apply .dragging for the dragging state of a draggable element */
1293
+
1294
+ .dragging {
1295
+ pointer-events: none;
1296
+ rotate: -2deg;
1297
+ box-shadow:
1298
+ 0 8px 12px rgb(0 0 0 / 20%),
1299
+ 0 4px 8px rgb(0 0 0 / 10%);
1300
+ }
1301
+
1302
+ /* Apply .drop for an element where you can drop the draggable */
1303
+
1304
+ .drop {
1305
+
1306
+ background: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><circle cx="10" cy="10" r="7" stroke="%23CCCCCC" stroke-width="1" fill="transparent" /></svg>')
1307
+ center no-repeat;
1308
+ border-radius: var(--qti-border-radius);
1309
+ position: relative;
1310
+ background-color: var(--qti-bg);
1311
+ border: var(--qti-border-thickness) var(--qti-border-style) var(--qti-border-color);
1312
+ outline: none;
1313
+ }
1314
+
1315
+ /* Apply .dropping for an indicator where you can drop the draggable */
1316
+
1317
+ .dropping {
1318
+ background-color: var(--qti-bg-active);
1319
+ }
1320
+
1321
+ /* Apply .order for a small circular button */
1322
+
1323
+ .order {
1324
+
1325
+ display: grid;
1326
+ place-content: center;
1327
+
1328
+ /* background-color: var(--qti-bg-active); */
1329
+ border-radius: 100%;
1330
+ width: var(--qti-order-size);
1331
+ height: var(--qti-order-size);
1332
+ border: var(--qti-border-thickness) var(--qti-border-style) var(--qti-border-color);
1333
+ outline: none;
1334
+ }
1335
+
1336
+ /* Apply .check-size for radio and checkbox size */
1337
+
1338
+ .check-size {
1339
+ width: calc(var(--qti-form-size) - 6px);
1340
+ height: calc(var(--qti-form-size) - 6px);
1341
+ }
1342
+
1343
+ /* Apply .check for checkbox */
1344
+
1345
+ .check {
1346
+ gap: 0.5rem;
1347
+ border-radius: var(--qti-border-radius);
1348
+ padding: var(--qti-padding-vertical) var(--qti-padding-horizontal);
1349
+ outline: none;
1350
+ cursor: pointer;
1351
+ }
1352
+
1353
+ /* Apply .check-radio for outer circle of the radio buttons */
1354
+
1355
+ .check-radio {
1356
+
1357
+ border-radius: 100%;
1358
+
1359
+ display: grid;
1360
+
1361
+ place-content: center;
1362
+
1363
+ width: var(--qti-form-size);
1364
+
1365
+ height: var(--qti-form-size);
1366
+
1367
+ border: var(--qti-border-thickness) var(--qti-border-style) var(--qti-border-color);
1368
+
1369
+ outline: none;
1370
+ }
1371
+
1372
+ /* Apply .check-radio-checked for the inner checked radio */
1373
+
1374
+ .check-radio-checked {
1375
+ background-color: var(--qti-border-active);
1376
+ border-radius: 100%;
1377
+ }
1378
+
1379
+ /* Apply .check-checkbox for outer square of the checkbox */
1380
+
1381
+ .check-checkbox {
1382
+
1383
+ display: flex;
1384
+ place-items: center;
1385
+ border-radius: var(--qti-border-radius);
1386
+ display: grid;
1387
+ place-content: center;
1388
+ width: var(--qti-form-size);
1389
+ height: var(--qti-form-size);
1390
+ border: var(--qti-border-thickness) var(--qti-border-style) var(--qti-border-color);
1391
+ outline: none;
1392
+ }
1393
+
1394
+ /* Apply .check-checkbox-checked for the inner checkmark */
1395
+
1396
+ .check-checkbox-checked {
1397
+ background-color: var(--qti-border-active);
1398
+ -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='currentColor' width='100%' height='100%' viewBox='0 0 24 24'%3E%3Cpath d='M20.285 2l-11.285 11.567-5.286-5.011-3.714 3.716 9 8.728 15-15.285z'/%3E%3C/svg%3E");
1399
+ mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='currentColor' width='100%' height='100%' viewBox='0 0 24 24'%3E%3Cpath d='M20.285 2l-11.285 11.567-5.286-5.011-3.714 3.716 9 8.728 15-15.285z'/%3E%3C/svg%3E");
1400
+ }
1401
+
1402
+ /* Apply .hov for hover state */
1403
+
1404
+ .hov {
1405
+ background-color: var(--qti-hover-bg);
1406
+ }
1407
+
1408
+ /* Apply .foc for focus state */
1409
+
1410
+ .foc {
1411
+ box-shadow: 0 0 0 var(--qti-focus-border-width) var(--qti-focus-color);
1412
+ }
1413
+
1414
+ /* Apply .act for active state */
1415
+
1416
+ .act {
1417
+ border-color: var(--qti-border-active);
1418
+ background-color: var(--qti-bg-active);
1419
+ }
1420
+
1421
+ .act-bg {
1422
+ background-color: var(--qti-bg-active);
1423
+ }
1424
+
1425
+ .act-bor {
1426
+ border-color: var(--qti-border-active);
1427
+ }
1428
+
1429
+ /* Apply .rdo for readonly state */
1430
+
1431
+ .rdo {
1432
+ cursor: pointer;
1433
+ background-color: var(--qti-bg);
1434
+ outline: 0;
1435
+ border: none;
1436
+ }
1437
+
1438
+ /* Apply .dis for disabled state */
1439
+
1440
+ .dis {
1441
+ cursor: not-allowed;
1442
+ background-color: var(--qti-disabled-bg);
1443
+ color: var(--qti-disabled-color);
1444
+ border-color: var(--qti-border-color);
1445
+ outline: 4px solid var(--qti-disabled-bg);
1446
+ }
1447
+
1448
+ /* base */
1449
+
1450
+ /* ============================
1451
+ QTI 3 shared css
1452
+ 1. Display
1453
+ 2. Special Flex styles
1454
+ 3. Margin
1455
+ 4. Padding
1456
+ 5. Horizontal Alignment styles
1457
+ 6. Vertical Alignment styles
1458
+ 7. Height
1459
+ 8. Width
1460
+ 9. Text-Indent
1461
+ 10. List Style
1462
+ 11. Layout
1463
+ 12. Other QTI 3 presentation utilities
1464
+ ============================ */
1465
+
1466
+ /* ==========
1467
+ Display css
1468
+ =========== */
1469
+
1470
+ .qti-display-inline {
1471
+ display: inline;
1472
+ }
1473
+
1474
+ .qti-display-inline-block {
1475
+ display: inline-block;
1476
+ }
1477
+
1478
+ .qti-display-block {
1479
+ display: block;
1480
+ }
1481
+
1482
+ .qti-display-flex {
1483
+ display: flexbox;
1484
+ display: flex;
1485
+ }
1486
+
1487
+ .qti-display-inline-flex {
1488
+ display: inline-flex;
1489
+ }
1490
+
1491
+ .qti-display-grid {
1492
+ display: grid;
1493
+ }
1494
+
1495
+ .qti-display-inline-grid {
1496
+ display: inline-grid;
1497
+ }
1498
+
1499
+ .qti-display-table {
1500
+ display: table;
1501
+ }
1502
+
1503
+ .qti-display-table-cell {
1504
+ display: table-cell;
1505
+ }
1506
+
1507
+ .qti-display-table-row {
1508
+ display: table-row;
1509
+ }
1510
+
1511
+ .qti-display-list-item {
1512
+ display: list-item;
1513
+ }
1514
+
1515
+ .qti-display-inherit {
1516
+ display: inherit;
1517
+ }
1518
+
1519
+ /*
1520
+ * hidden to screen readers and sighted
1521
+ */
1522
+
1523
+ .qti-hidden {
1524
+ display: none;
1525
+ }
1526
+
1527
+ /*
1528
+ * visible to screen readers, hidden to sighted
1529
+ */
1530
+
1531
+ .qti-visually-hidden {
1532
+ position: fixed !important;
1533
+ overflow: hidden;
1534
+ clip: rect(1px 1px 1px 1px);
1535
+ height: 1px;
1536
+ width: 1px;
1537
+ border: 0;
1538
+ margin: -1px;
1539
+ }
1540
+
1541
+ /* =============================
1542
+ Special flex styles
1543
+ ============================= */
1544
+
1545
+ .qti-flex-direction-column {
1546
+ flex-direction: column;
1547
+ }
1548
+
1549
+ .qti-flex-direction-row {
1550
+ flex-direction: row;
1551
+ }
1552
+
1553
+ .qti-flex-grow-1 {
1554
+ flex-grow: 1;
1555
+ }
1556
+
1557
+ .qti-flex-grow-0 {
1558
+ flex-grow: 0;
1559
+ }
1560
+
1561
+ /* =========
1562
+ Margin css
1563
+ ========== */
1564
+
1565
+ /**
1566
+ * For margin Top and Bottom and Left and Right
1567
+ */
1568
+
1569
+ .qti-margin-0 {
1570
+ margin: 0 !important;
1571
+ }
1572
+
1573
+ .qti-margin-1 {
1574
+ margin: 0.25rem !important;
1575
+ }
1576
+
1577
+ .qti-margin-2 {
1578
+ margin: 0.5rem !important;
1579
+ }
1580
+
1581
+ .qti-margin-3 {
1582
+ margin: 1rem !important;
1583
+ }
1584
+
1585
+ .qti-margin-4 {
1586
+ margin: 1.5rem !important;
1587
+ }
1588
+
1589
+ .qti-margin-5 {
1590
+ margin: 3rem !important;
1591
+ }
1592
+
1593
+ .qti-margin-auto {
1594
+ margin: auto !important;
1595
+ }
1596
+
1597
+ /*
1598
+ For margin Left and Right
1599
+ */
1600
+
1601
+ .qti-margin-x-0 {
1602
+ margin-right: 0 !important;
1603
+ margin-left: 0 !important;
1604
+ }
1605
+
1606
+ .qti-margin-x-1 {
1607
+ margin-right: 0.25rem !important;
1608
+ margin-left: 0.25rem !important;
1609
+ }
1610
+
1611
+ .qti-margin-x-2 {
1612
+ margin-right: 0.5rem !important;
1613
+ margin-left: 0.5rem !important;
1614
+ }
1615
+
1616
+ .qti-margin-x-3 {
1617
+ margin-right: 1rem !important;
1618
+ margin-left: 1rem !important;
1619
+ }
1620
+
1621
+ .qti-margin-x-4 {
1622
+ margin-right: 1.5rem !important;
1623
+ margin-left: 1.5rem !important;
1624
+ }
1625
+
1626
+ .qti-margin-x-5 {
1627
+ margin-right: 3rem !important;
1628
+ margin-left: 3rem !important;
1629
+ }
1630
+
1631
+ .qti-margin-x-auto {
1632
+ margin-right: auto !important;
1633
+ margin-left: auto !important;
1634
+ }
1635
+
1636
+ /*
1637
+ For margin Top and Bottom
1638
+ */
1639
+
1640
+ .qti-margin-y-0 {
1641
+ margin-top: 0 !important;
1642
+ margin-bottom: 0 !important;
1643
+ }
1644
+
1645
+ .qti-margin-y-1 {
1646
+ margin-top: 0.25rem !important;
1647
+ margin-bottom: 0.25rem !important;
1648
+ }
1649
+
1650
+ .qti-margin-y-2 {
1651
+ margin-top: 0.5rem !important;
1652
+ margin-bottom: 0.5rem !important;
1653
+ }
1654
+
1655
+ .qti-margin-y-3 {
1656
+ margin-top: 1rem !important;
1657
+ margin-bottom: 1rem !important;
1658
+ }
1659
+
1660
+ .qti-margin-y-4 {
1661
+ margin-top: 1.5rem !important;
1662
+ margin-bottom: 1.5rem !important;
1663
+ }
1664
+
1665
+ .qti-margin-y-5 {
1666
+ margin-top: 3rem !important;
1667
+ margin-bottom: 3rem !important;
1668
+ }
1669
+
1670
+ .qti-margin-y-auto {
1671
+ margin-top: auto !important;
1672
+ margin-bottom: auto !important;
1673
+ }
1674
+
1675
+ /*
1676
+ For margin Top
1677
+ */
1678
+
1679
+ .qti-margin-t-0 {
1680
+ margin-top: 0 !important;
1681
+ }
1682
+
1683
+ .qti-margin-t-1 {
1684
+ margin-top: 0.25rem !important;
1685
+ }
1686
+
1687
+ .qti-margin-t-2 {
1688
+ margin-top: 0.5rem !important;
1689
+ }
1690
+
1691
+ .qti-margin-t-3 {
1692
+ margin-top: 1rem !important;
1693
+ }
1694
+
1695
+ .qti-margin-t-4 {
1696
+ margin-top: 1.5rem !important;
1697
+ }
1698
+
1699
+ .qti-margin-t-5 {
1700
+ margin-top: 3rem !important;
1701
+ }
1702
+
1703
+ .qti-margin-t-auto {
1704
+ margin-top: auto !important;
1705
+ }
1706
+
1707
+ /*
1708
+ For margin Bottom
1709
+ */
1710
+
1711
+ .qti-margin-b-0 {
1712
+ margin-bottom: 0 !important;
1713
+ }
1714
+
1715
+ .qti-margin-b-1 {
1716
+ margin-bottom: 0.25rem !important;
1717
+ }
1718
+
1719
+ .qti-margin-b-2 {
1720
+ margin-bottom: 0.5rem !important;
1721
+ }
1722
+
1723
+ .qti-margin-b-3 {
1724
+ margin-bottom: 1rem !important;
1725
+ }
1726
+
1727
+ .qti-margin-b-4 {
1728
+ margin-bottom: 1.5rem !important;
1729
+ }
1730
+
1731
+ .qti-margin-b-5 {
1732
+ margin-bottom: 3rem !important;
1733
+ }
1734
+
1735
+ .qti-margin-b-auto {
1736
+ margin-bottom: auto !important;
1737
+ }
1738
+
1739
+ /*
1740
+ For margin Start LTR
1741
+ */
1742
+
1743
+ .qti-margin-s-0 {
1744
+ margin-left: 0 !important;
1745
+ }
1746
+
1747
+ .qti-margin-s-1 {
1748
+ margin-left: 0.25rem !important;
1749
+ }
1750
+
1751
+ .qti-margin-s-2 {
1752
+ margin-left: 0.5rem !important;
1753
+ }
1754
+
1755
+ .qti-margin-s-3 {
1756
+ margin-left: 1rem !important;
1757
+ }
1758
+
1759
+ .qti-margin-s-4 {
1760
+ margin-left: 1.5rem !important;
1761
+ }
1762
+
1763
+ .qti-margin-s-5 {
1764
+ margin-left: 3rem !important;
1765
+ }
1766
+
1767
+ .qti-margin-s-auto {
1768
+ margin-left: auto !important;
1769
+ }
1770
+
1771
+ /*
1772
+ For margin End LTR
1773
+ */
1774
+
1775
+ .qti-margin-e-0 {
1776
+ margin-right: 0 !important;
1777
+ }
1778
+
1779
+ .qti-margin-e-1 {
1780
+ margin-right: 0.25rem !important;
1781
+ }
1782
+
1783
+ .qti-margin-e-2 {
1784
+ margin-right: 0.5rem !important;
1785
+ }
1786
+
1787
+ .qti-margin-e-3 {
1788
+ margin-right: 1rem !important;
1789
+ }
1790
+
1791
+ .qti-margin-e-4 {
1792
+ margin-right: 1.5rem !important;
1793
+ }
1794
+
1795
+ .qti-margin-e-5 {
1796
+ margin-right: 3rem !important;
1797
+ }
1798
+
1799
+ .qti-margin-e-auto {
1800
+ margin-right: auto !important;
1801
+ }
1802
+
1803
+ /* =========
1804
+ Padding css
1805
+ ========== */
1806
+
1807
+ /*
1808
+ For padding Top and Bottom and Left and Right
1809
+ */
1810
+
1811
+ .qti-padding-0 {
1812
+ padding: 0 !important;
1813
+ }
1814
+
1815
+ .qti-padding-1 {
1816
+ padding: 0.25rem !important;
1817
+ }
1818
+
1819
+ .qti-padding-2 {
1820
+ padding: 0.5rem !important;
1821
+ }
1822
+
1823
+ .qti-padding-3 {
1824
+ padding: 1rem !important;
1825
+ }
1826
+
1827
+ .qti-padding-4 {
1828
+ padding: 1.5rem !important;
1829
+ }
1830
+
1831
+ .qti-padding-5 {
1832
+ padding: 3rem !important;
1833
+ }
1834
+
1835
+ /*
1836
+ For padding Left and Right
1837
+ */
1838
+
1839
+ .qti-padding-x-0 {
1840
+ padding-right: 0 !important;
1841
+ padding-left: 0 !important;
1842
+ }
1843
+
1844
+ .qti-padding-x-1 {
1845
+ padding-right: 0.25rem !important;
1846
+ padding-left: 0.25rem !important;
1847
+ }
1848
+
1849
+ .qti-padding-x-2 {
1850
+ padding-right: 0.5rem !important;
1851
+ padding-left: 0.5rem !important;
1852
+ }
1853
+
1854
+ .qti-padding-x-3 {
1855
+ padding-right: 1rem !important;
1856
+ padding-left: 1rem !important;
1857
+ }
1858
+
1859
+ .qti-padding-x-4 {
1860
+ padding-right: 1.5rem !important;
1861
+ padding-left: 1.5rem !important;
1862
+ }
1863
+
1864
+ .qti-padding-x-5 {
1865
+ padding-right: 3rem !important;
1866
+ padding-left: 3rem !important;
1867
+ }
1868
+
1869
+ /*
1870
+ For padding Top and Bottom
1871
+ */
1872
+
1873
+ .qti-padding-y-0 {
1874
+ padding-top: 0 !important;
1875
+ padding-bottom: 0 !important;
1876
+ }
1877
+
1878
+ .qti-padding-y-1 {
1879
+ padding-top: 0.25rem !important;
1880
+ padding-bottom: 0.25rem !important;
1881
+ }
1882
+
1883
+ .qti-padding-y-2 {
1884
+ padding-top: 0.5rem !important;
1885
+ padding-bottom: 0.5rem !important;
1886
+ }
1887
+
1888
+ .qti-padding-y-3 {
1889
+ padding-top: 1rem !important;
1890
+ padding-bottom: 1rem !important;
1891
+ }
1892
+
1893
+ .qti-padding-y-4 {
1894
+ padding-top: 1.5rem !important;
1895
+ padding-bottom: 1.5rem !important;
1896
+ }
1897
+
1898
+ .qti-padding-y-5 {
1899
+ padding-top: 3rem !important;
1900
+ padding-bottom: 3rem !important;
1901
+ }
1902
+
1903
+ /*
1904
+ For padding Top
1905
+ */
1906
+
1907
+ .qti-padding-t-0 {
1908
+ padding-top: 0 !important;
1909
+ }
1910
+
1911
+ .qti-padding-t-1 {
1912
+ padding-top: 0.25rem !important;
1913
+ }
1914
+
1915
+ .qti-padding-t-2 {
1916
+ padding-top: 0.5rem !important;
1917
+ }
1918
+
1919
+ .qti-padding-t-3 {
1920
+ padding-top: 1rem !important;
1921
+ }
1922
+
1923
+ .qti-padding-t-4 {
1924
+ padding-top: 1.5rem !important;
1925
+ }
1926
+
1927
+ .qti-padding-t-5 {
1928
+ padding-top: 3rem !important;
1929
+ }
1930
+
1931
+ /*
1932
+ For padding Bottom
1933
+ */
1934
+
1935
+ .qti-padding-b-0 {
1936
+ padding-bottom: 0 !important;
1937
+ }
1938
+
1939
+ .qti-padding-b-1 {
1940
+ padding-bottom: 0.25rem !important;
1941
+ }
1942
+
1943
+ .qti-padding-b-2 {
1944
+ padding-bottom: 0.5rem !important;
1945
+ }
1946
+
1947
+ .qti-padding-b-3 {
1948
+ padding-bottom: 1rem !important;
1949
+ }
1950
+
1951
+ .qti-padding-b-4 {
1952
+ padding-bottom: 1.5rem !important;
1953
+ }
1954
+
1955
+ .qti-padding-b-5 {
1956
+ padding-bottom: 3rem !important;
1957
+ }
1958
+
1959
+ /*
1960
+ For padding Start LTR
1961
+ */
1962
+
1963
+ .qti-padding-s-0 {
1964
+ padding-left: 0 !important;
1965
+ }
1966
+
1967
+ .qti-padding-s-1 {
1968
+ padding-left: 0.25rem !important;
1969
+ }
1970
+
1971
+ .qti-padding-s-2 {
1972
+ padding-left: 0.5rem !important;
1973
+ }
1974
+
1975
+ .qti-padding-s-3 {
1976
+ padding-left: 1rem !important;
1977
+ }
1978
+
1979
+ .qti-padding-s-4 {
1980
+ padding-left: 1.5rem !important;
1981
+ }
1982
+
1983
+ .qti-padding-s-5 {
1984
+ padding-left: 3rem !important;
1985
+ }
1986
+
1987
+ /*
1988
+ For padding End LTR
1989
+ */
1990
+
1991
+ .qti-padding-e-0 {
1992
+ padding-right: 0 !important;
1993
+ }
1994
+
1995
+ .qti-padding-e-1 {
1996
+ padding-right: 0.25rem !important;
1997
+ }
1998
+
1999
+ .qti-padding-e-2 {
2000
+ padding-right: 0.5rem !important;
2001
+ }
2002
+
2003
+ .qti-padding-e-3 {
2004
+ padding-right: 1rem !important;
2005
+ }
2006
+
2007
+ .qti-padding-e-4 {
2008
+ padding-right: 1.5rem !important;
2009
+ }
2010
+
2011
+ .qti-padding-e-5 {
2012
+ padding-right: 3rem !important;
2013
+ }
2014
+
2015
+ /* ====================
2016
+ Horizontal alignment
2017
+ ==================== */
2018
+
2019
+ .qti-align-left {
2020
+ text-align: left;
2021
+ }
2022
+
2023
+ .qti-align-center {
2024
+ text-align: center;
2025
+ }
2026
+
2027
+ .qti-align-right {
2028
+ text-align: right;
2029
+ }
2030
+
2031
+ /* ==================
2032
+ Vertical alignment
2033
+ ================== */
2034
+
2035
+ .qti-valign-top {
2036
+ vertical-align: top;
2037
+ }
2038
+
2039
+ .qti-valign-middle {
2040
+ vertical-align: middle;
2041
+ }
2042
+
2043
+ .qti-valign-baseline {
2044
+ vertical-align: baseline;
2045
+ }
2046
+
2047
+ .qti-valign-bottom {
2048
+ vertical-align: bottom;
2049
+ }
2050
+
2051
+ /* =============
2052
+ Height styles
2053
+ ============= */
2054
+
2055
+ .qti-height-0 {
2056
+ height: 0;
2057
+ }
2058
+
2059
+ .qti-height-px {
2060
+ height: 1px;
2061
+ }
2062
+
2063
+ .qti-height-0p5 {
2064
+ height: 0.125rem;
2065
+ }
2066
+
2067
+ .qti-height-1 {
2068
+ height: 0.25rem;
2069
+ }
2070
+
2071
+ .qti-height-1p5 {
2072
+ height: 0.375rem;
2073
+ }
2074
+
2075
+ .qti-height-2 {
2076
+ height: 0.5rem;
2077
+ }
2078
+
2079
+ .qti-height-2p5 {
2080
+ height: 0.625rem;
2081
+ }
2082
+
2083
+ .qti-height-3 {
2084
+ height: 0.75rem;
2085
+ }
2086
+
2087
+ .qti-height-3p5 {
2088
+ height: 0.875rem;
2089
+ }
2090
+
2091
+ .qti-height-4 {
2092
+ height: 1rem;
2093
+ }
2094
+
2095
+ .qti-height-5 {
2096
+ height: 1.25rem;
2097
+ }
2098
+
2099
+ .qti-height-6 {
2100
+ height: 1.5rem;
2101
+ }
2102
+
2103
+ .qti-height-7 {
2104
+ height: 1.75rem;
2105
+ }
2106
+
2107
+ .qti-height-8 {
2108
+ height: 2rem;
2109
+ }
2110
+
2111
+ .qti-height-9 {
2112
+ height: 2.25rem;
2113
+ }
2114
+
2115
+ .qti-height-10 {
2116
+ height: 2.5rem;
2117
+ }
2118
+
2119
+ .qti-height-11 {
2120
+ height: 2.75rem;
2121
+ }
2122
+
2123
+ .qti-height-12 {
2124
+ height: 3rem;
2125
+ }
2126
+
2127
+ .qti-height-14 {
2128
+ height: 3.5rem;
2129
+ }
2130
+
2131
+ .qti-height-16 {
2132
+ height: 4rem;
2133
+ }
2134
+
2135
+ .qti-height-20 {
2136
+ height: 5rem;
2137
+ }
2138
+
2139
+ .qti-height-24 {
2140
+ height: 6rem;
2141
+ }
2142
+
2143
+ .qti-height-28 {
2144
+ height: 7rem;
2145
+ }
2146
+
2147
+ .qti-height-32 {
2148
+ height: 8rem;
2149
+ }
2150
+
2151
+ .qti-height-36 {
2152
+ height: 9rem;
2153
+ }
2154
+
2155
+ .qti-height-40 {
2156
+ height: 10rem;
2157
+ }
2158
+
2159
+ .qti-height-44 {
2160
+ height: 11rem;
2161
+ }
2162
+
2163
+ .qti-height-48 {
2164
+ height: 12rem;
2165
+ }
2166
+
2167
+ .qti-height-52 {
2168
+ height: 13rem;
2169
+ }
2170
+
2171
+ .qti-height-56 {
2172
+ height: 14rem;
2173
+ }
2174
+
2175
+ .qti-height-60 {
2176
+ height: 15rem;
2177
+ }
2178
+
2179
+ .qti-height-64 {
2180
+ height: 16rem;
2181
+ }
2182
+
2183
+ .qti-height-72 {
2184
+ height: 18rem;
2185
+ }
2186
+
2187
+ .qti-height-80 {
2188
+ height: 20rem;
2189
+ }
2190
+
2191
+ .qti-height-96 {
2192
+ height: 24rem;
2193
+ }
2194
+
2195
+ .qti-height-1-2 {
2196
+ height: 50%;
2197
+ }
2198
+
2199
+ .qti-height-1-3 {
2200
+ height: 33.3333%;
2201
+ }
2202
+
2203
+ .qti-height-2-3 {
2204
+ height: 66.6667%;
2205
+ }
2206
+
2207
+ .qti-height-1-4 {
2208
+ height: 25%;
2209
+ }
2210
+
2211
+ .qti-height-2-4 {
2212
+ height: 50%;
2213
+ }
2214
+
2215
+ .qti-height-3-4 {
2216
+ height: 75%;
2217
+ }
2218
+
2219
+ .qti-height-1-5 {
2220
+ height: 20%;
2221
+ }
2222
+
2223
+ .qti-height-2-5 {
2224
+ height: 40%;
2225
+ }
2226
+
2227
+ .qti-height-3-5 {
2228
+ height: 60%;
2229
+ }
2230
+
2231
+ .qti-height-4-5 {
2232
+ height: 80%;
2233
+ }
2234
+
2235
+ .qti-height-1-6 {
2236
+ height: 16.6667%;
2237
+ }
2238
+
2239
+ .qti-height-2-6 {
2240
+ height: 33.3333%;
2241
+ }
2242
+
2243
+ .qti-height-3-6 {
2244
+ height: 50%;
2245
+ }
2246
+
2247
+ .qti-height-4-6 {
2248
+ height: 66.6667%;
2249
+ }
2250
+
2251
+ .qti-height-5-6 {
2252
+ height: 83.3333%;
2253
+ }
2254
+
2255
+ .qti-height-auto {
2256
+ height: auto;
2257
+ }
2258
+
2259
+ .qti-height-full {
2260
+ height: 100%;
2261
+ }
2262
+
2263
+ /* ============
2264
+ Width styles
2265
+ ============ */
2266
+
2267
+ .qti-width-0 {
2268
+ width: 0;
2269
+ }
2270
+
2271
+ .qti-width-px {
2272
+ width: 1px;
2273
+ }
2274
+
2275
+ .qti-width-0p5 {
2276
+ width: 0.125rem;
2277
+ }
2278
+
2279
+ .qti-width-1 {
2280
+ width: 0.25rem;
2281
+ }
2282
+
2283
+ .qti-width-1p5 {
2284
+ width: 0.375rem;
2285
+ }
2286
+
2287
+ .qti-width-2 {
2288
+ width: 0.5rem;
2289
+ }
2290
+
2291
+ .qti-width-2p5 {
2292
+ width: 0.625rem;
2293
+ }
2294
+
2295
+ .qti-width-3 {
2296
+ width: 0.75rem;
2297
+ }
2298
+
2299
+ .qti-width-3p5 {
2300
+ width: 0.875rem;
2301
+ }
2302
+
2303
+ .qti-width-4 {
2304
+ width: 1rem;
2305
+ }
2306
+
2307
+ .qti-width-5 {
2308
+ width: 1.25rem;
2309
+ }
2310
+
2311
+ .qti-width-6 {
2312
+ width: 1.5rem;
2313
+ }
2314
+
2315
+ .qti-width-7 {
2316
+ width: 1.75rem;
2317
+ }
2318
+
2319
+ .qti-width-8 {
2320
+ width: 2rem;
2321
+ }
2322
+
2323
+ .qti-width-9 {
2324
+ width: 2.25rem;
2325
+ }
2326
+
2327
+ .qti-width-10 {
2328
+ width: 2.5rem;
2329
+ }
2330
+
2331
+ .qti-width-11 {
2332
+ width: 2.75rem;
2333
+ }
2334
+
2335
+ .qti-width-12 {
2336
+ width: 3rem;
2337
+ }
2338
+
2339
+ .qti-width-14 {
2340
+ width: 3.5rem;
2341
+ }
2342
+
2343
+ .qti-width-16 {
2344
+ width: 4rem;
2345
+ }
2346
+
2347
+ .qti-width-20 {
2348
+ width: 5rem;
2349
+ }
2350
+
2351
+ .qti-width-24 {
2352
+ width: 6rem;
2353
+ }
2354
+
2355
+ .qti-width-28 {
2356
+ width: 7rem;
2357
+ }
2358
+
2359
+ .qti-width-32 {
2360
+ width: 8rem;
2361
+ }
2362
+
2363
+ .qti-width-36 {
2364
+ width: 9rem;
2365
+ }
2366
+
2367
+ .qti-width-40 {
2368
+ width: 10rem;
2369
+ }
2370
+
2371
+ .qti-width-44 {
2372
+ width: 11rem;
2373
+ }
2374
+
2375
+ .qti-width-48 {
2376
+ width: 12rem;
2377
+ }
2378
+
2379
+ .qti-width-52 {
2380
+ width: 13rem;
2381
+ }
2382
+
2383
+ .qti-width-56 {
2384
+ width: 14rem;
2385
+ }
2386
+
2387
+ .qti-width-60 {
2388
+ width: 15rem;
2389
+ }
2390
+
2391
+ .qti-width-64 {
2392
+ width: 16rem;
2393
+ }
2394
+
2395
+ .qti-width-72 {
2396
+ width: 18rem;
2397
+ }
2398
+
2399
+ .qti-width-80 {
2400
+ width: 20rem;
2401
+ }
2402
+
2403
+ .qti-width-96 {
2404
+ width: 24rem;
2405
+ }
2406
+
2407
+ .qti-width-auto {
2408
+ width: auto;
2409
+ }
2410
+
2411
+ .qti-width-1-2 {
2412
+ width: 50%;
2413
+ }
2414
+
2415
+ .qti-width-1-3 {
2416
+ width: 33.3333%;
2417
+ }
2418
+
2419
+ .qti-width-2-3 {
2420
+ width: 66.6667%;
2421
+ }
2422
+
2423
+ .qti-width-1-4 {
2424
+ width: 25%;
2425
+ }
2426
+
2427
+ .qti-width-2-4 {
2428
+ width: 50%;
2429
+ }
2430
+
2431
+ .qti-width-3-4 {
2432
+ width: 75%;
2433
+ }
2434
+
2435
+ .qti-width-1-5 {
2436
+ width: 20%;
2437
+ }
2438
+
2439
+ .qti-width-2-5 {
2440
+ width: 40%;
2441
+ }
2442
+
2443
+ .qti-width-3-5 {
2444
+ width: 60%;
2445
+ }
2446
+
2447
+ .qti-width-4-5 {
2448
+ width: 80%;
2449
+ }
2450
+
2451
+ .qti-width-1-6 {
2452
+ width: 16.6667%;
2453
+ }
2454
+
2455
+ .qti-width-2-6 {
2456
+ width: 33.3333%;
2457
+ }
2458
+
2459
+ .qti-width-3-6 {
2460
+ width: 50%;
2461
+ }
2462
+
2463
+ .qti-width-4-6 {
2464
+ width: 66.6667%;
2465
+ }
2466
+
2467
+ .qti-width-5-6 {
2468
+ width: 83.3333%;
2469
+ }
2470
+
2471
+ .qti-width-1-12 {
2472
+ width: 8.3333%;
2473
+ }
2474
+
2475
+ .qti-width-2-12 {
2476
+ width: 16.6667%;
2477
+ }
2478
+
2479
+ .qti-width-3-12 {
2480
+ width: 25%;
2481
+ }
2482
+
2483
+ .qti-width-4-12 {
2484
+ width: 33.3333%;
2485
+ }
2486
+
2487
+ .qti-width-5-12 {
2488
+ width: 41.6667%;
2489
+ }
2490
+
2491
+ .qti-width-6-12 {
2492
+ width: 50%;
2493
+ }
2494
+
2495
+ .qti-width-7-12 {
2496
+ width: 58.3333%;
2497
+ }
2498
+
2499
+ .qti-width-8-12 {
2500
+ width: 66.6667%;
2501
+ }
2502
+
2503
+ .qti-width-9-12 {
2504
+ width: 75%;
2505
+ }
2506
+
2507
+ .qti-width-10-12 {
2508
+ width: 83.3333%;
2509
+ }
2510
+
2511
+ .qti-width-11-12 {
2512
+ width: 91.6667%;
2513
+ }
2514
+
2515
+ .qti-width-full,
2516
+ .qti-fullwidth {
2517
+ width: 100%;
2518
+ }
2519
+
2520
+ /* ==================
2521
+ Text Indent styles
2522
+ ================== */
2523
+
2524
+ .qti-text-indent-0 {
2525
+ text-indent: 0;
2526
+ }
2527
+
2528
+ .qti-text-indent-px {
2529
+ text-indent: 1px;
2530
+ }
2531
+
2532
+ .qti-text-indent-0p5 {
2533
+ text-indent: 0.125rem;
2534
+ }
2535
+
2536
+ .qti-text-indent-1 {
2537
+ text-indent: 0.25rem;
2538
+ }
2539
+
2540
+ .qti-text-indent-1p5 {
2541
+ text-indent: 0.375rem;
2542
+ }
2543
+
2544
+ .qti-text-indent-2 {
2545
+ text-indent: 0.5rem;
2546
+ }
2547
+
2548
+ .qti-text-indent-2p5 {
2549
+ text-indent: 0.625rem;
2550
+ }
2551
+
2552
+ .qti-text-indent-3 {
2553
+ text-indent: 0.75rem;
2554
+ }
2555
+
2556
+ .qti-text-indent-3p5 {
2557
+ text-indent: 0.875rem;
2558
+ }
2559
+
2560
+ .qti-text-indent-4 {
2561
+ text-indent: 1rem;
2562
+ }
2563
+
2564
+ .qti-text-indent-5 {
2565
+ text-indent: 1.25rem;
2566
+ }
2567
+
2568
+ .qti-text-indent-6 {
2569
+ text-indent: 1.5rem;
2570
+ }
2571
+
2572
+ .qti-text-indent-7 {
2573
+ text-indent: 1.75rem;
2574
+ }
2575
+
2576
+ .qti-text-indent-8 {
2577
+ text-indent: 2rem;
2578
+ }
2579
+
2580
+ .qti-text-indent-12 {
2581
+ text-indent: 3rem;
2582
+ }
2583
+
2584
+ .qti-text-indent-16 {
2585
+ text-indent: 4rem;
2586
+ }
2587
+
2588
+ .qti-text-indent-20 {
2589
+ text-indent: 5rem;
2590
+ }
2591
+
2592
+ .qti-text-indent-24 {
2593
+ text-indent: 6rem;
2594
+ }
2595
+
2596
+ .qti-text-indent-28 {
2597
+ text-indent: 7rem;
2598
+ }
2599
+
2600
+ .qti-text-indent-32 {
2601
+ text-indent: 8rem;
2602
+ }
2603
+
2604
+ /* =================
2605
+ List Style styles
2606
+ ================= */
2607
+
2608
+ .qti-list-style-type-none {
2609
+ list-style-type: none;
2610
+ }
2611
+
2612
+ .qti-list-style-type-disc {
2613
+ list-style-type: disc;
2614
+ }
2615
+
2616
+ .qti-list-style-type-circle {
2617
+ list-style-type: circle;
2618
+ }
2619
+
2620
+ .qti-list-style-type-square {
2621
+ list-style-type: square;
2622
+ }
2623
+
2624
+ .qti-list-style-type-decimal {
2625
+ list-style-type: decimal;
2626
+ }
2627
+
2628
+ .qti-list-style-type-decimal-leading-zero {
2629
+ list-style-type: decimal-leading-zero;
2630
+ }
2631
+
2632
+ .qti-list-style-type-lower-alpha {
2633
+ list-style-type: lower-alpha;
2634
+ }
2635
+
2636
+ .qti-list-style-type-upper-alpha {
2637
+ list-style-type: upper-alpha;
2638
+ }
2639
+
2640
+ .qti-list-style-type-lower-roman {
2641
+ list-style-type: lower-roman;
2642
+ }
2643
+
2644
+ .qti-list-style-type-upper-roman {
2645
+ list-style-type: upper-roman;
2646
+ }
2647
+
2648
+ .qti-list-style-type-lower-latin {
2649
+ list-style-type: lower-latin;
2650
+ }
2651
+
2652
+ .qti-list-style-type-upper-latin {
2653
+ list-style-type: upper-latin;
2654
+ }
2655
+
2656
+ .qti-list-style-type-lower-greek {
2657
+ list-style-type: lower-greek;
2658
+ }
2659
+
2660
+ .qti-list-style-type-arabic-indic {
2661
+ list-style-type: arabic-indic;
2662
+ }
2663
+
2664
+ .qti-list-style-type-armenian {
2665
+ list-style-type: armenian;
2666
+ }
2667
+
2668
+ .qti-list-style-type-lower-armenian {
2669
+ list-style-type: lower-armenian;
2670
+ }
2671
+
2672
+ .qti-list-style-type-upper-armenian {
2673
+ list-style-type: upper-armenian;
2674
+ }
2675
+
2676
+ .qti-list-style-type-bengali {
2677
+ list-style-type: bengali;
2678
+ }
2679
+
2680
+ .qti-list-style-type-cambodian {
2681
+ list-style-type: cambodian;
2682
+ }
2683
+
2684
+ .qti-list-style-type-simp-chinese-formal {
2685
+ list-style-type: simp-chinese-formal;
2686
+ }
2687
+
2688
+ .qti-list-style-type-simp-chinese-informal {
2689
+ list-style-type: simp-chinese-informal;
2690
+ }
2691
+
2692
+ .qti-list-style-type-trad-chinese-formal {
2693
+ list-style-type: trad-chinese-formal;
2694
+ }
2695
+
2696
+ .qti-list-style-type-trad-chinese-informal {
2697
+ list-style-type: trad-chinese-informal;
2698
+ }
2699
+
2700
+ .qti-list-style-type-cjk-ideographic {
2701
+ list-style-type: cjk-ideographic;
2702
+ }
2703
+
2704
+ .qti-list-style-type-cjk-heavenly-stem {
2705
+ list-style-type: cjk-heavenly-stem;
2706
+ }
2707
+
2708
+ .qti-list-style-type-cjk-earthly-branch {
2709
+ list-style-type: cjk-earthly-branch;
2710
+ }
2711
+
2712
+ .qti-list-style-type-devanagari {
2713
+ list-style-type: devanagari;
2714
+ }
2715
+
2716
+ .qti-list-style-type-ethiopic-halehame-ti-er {
2717
+ list-style-type: ethiopic-halehame-ti-er;
2718
+ }
2719
+
2720
+ .qti-list-style-type-ethiopic-halehame-ti-et {
2721
+ list-style-type: ethiopic-halehame-ti-et;
2722
+ }
2723
+
2724
+ .qti-list-style-type-ethiopic-halehame-am {
2725
+ list-style-type: ethiopic-halehame-am;
2726
+ }
2727
+
2728
+ .qti-list-style-type-ethiopic-halehame {
2729
+ list-style-type: ethiopic-halehame;
2730
+ }
2731
+
2732
+ .qti-list-style-type-georgian {
2733
+ list-style-type: georgian;
2734
+ }
2735
+
2736
+ .qti-list-style-type-gujarati {
2737
+ list-style-type: gujarati;
2738
+ }
2739
+
2740
+ .qti-list-style-type-gurmukhi {
2741
+ list-style-type: gurmukhi;
2742
+ }
2743
+
2744
+ .qti-list-style-type-hangul {
2745
+ list-style-type: hangul;
2746
+ }
2747
+
2748
+ .qti-list-style-type-hangul-consonant {
2749
+ list-style-type: hangul-consonant;
2750
+ }
2751
+
2752
+ .qti-list-style-type-hebrew {
2753
+ list-style-type: hebrew;
2754
+ }
2755
+
2756
+ .qti-list-style-type-hiragana {
2757
+ list-style-type: hiragana;
2758
+ }
2759
+
2760
+ .qti-list-style-type-hiragana-iroha {
2761
+ list-style-type: hiragana-iroha;
2762
+ }
2763
+
2764
+ .qti-list-style-type-khmer {
2765
+ list-style-type: khmer;
2766
+ }
2767
+
2768
+ .qti-list-style-type-korean-hangul-formal {
2769
+ list-style-type: korean-hangul-formal;
2770
+ }
2771
+
2772
+ .qti-list-style-type-korean-hanja-formal {
2773
+ list-style-type: korean-hanja-formal;
2774
+ }
2775
+
2776
+ .qti-list-style-type-korean-hanja-informal {
2777
+ list-style-type: korean-hanja-informal;
2778
+ }
2779
+
2780
+ .qti-list-style-type-lao {
2781
+ list-style-type: lao;
2782
+ }
2783
+
2784
+ .qti-list-style-type-malayalam {
2785
+ list-style-type: malayalam;
2786
+ }
2787
+
2788
+ .qti-list-style-type-mongolian {
2789
+ list-style-type: mongolian;
2790
+ }
2791
+
2792
+ .qti-list-style-type-myanmar {
2793
+ list-style-type: myanmar;
2794
+ }
2795
+
2796
+ .qti-list-style-type-oriya {
2797
+ list-style-type: oriya;
2798
+ }
2799
+
2800
+ .qti-list-style-type-persian {
2801
+ list-style-type: persian;
2802
+ }
2803
+
2804
+ .qti-list-style-type-thai {
2805
+ list-style-type: thai;
2806
+ }
2807
+
2808
+ .qti-list-style-type-tibetan {
2809
+ list-style-type: tibetan;
2810
+ }
2811
+
2812
+ .qti-list-style-type-telugu {
2813
+ list-style-type: telugu;
2814
+ }
2815
+
2816
+ .qti-list-style-type-urdu {
2817
+ list-style-type: urdu;
2818
+ }
2819
+
2820
+ /* =========================
2821
+ Other QTI 3 Presentation Utilities
2822
+ ========================= */
2823
+
2824
+ .qti-bordered {
2825
+ border: 1px solid var(--table-border-color);
2826
+ }
2827
+
2828
+ .qti-underline {
2829
+ text-decoration: underline;
2830
+ text-decoration-color: var(--foreground);
2831
+ }
2832
+
2833
+ .qti-italic {
2834
+ font-style: italic;
2835
+ }
2836
+
2837
+ .qti-well {
2838
+ min-height: 20px;
2839
+ padding: 19px;
2840
+ margin-bottom: 20px;
2841
+ background-color: var(--well-bg);
2842
+ border: var(--well-border);
2843
+ border-radius: 4px;
2844
+ box-shadow: var(--well-box-shadow);
2845
+ }
2846
+
2847
+ /* Set writing-mode to vertical-rl
2848
+ Typical for CJK vertical text */
2849
+
2850
+ .qti-writing-mode-vertical-rl {
2851
+ writing-mode: vertical-rl;
2852
+ }
2853
+
2854
+ /* Set writing-mode to vertical-lr
2855
+ Typical for Mongolian vertical text */
2856
+
2857
+ .qti-writing-mode-vertical-lr {
2858
+ writing-mode: vertical-lr;
2859
+ }
2860
+
2861
+ /* Set writing-mode to horizontal-tb
2862
+ Browser default */
2863
+
2864
+ .qti-writing-mode-horizontal-tb {
2865
+ writing-mode: horizontal-tb;
2866
+ }
2867
+
2868
+ /* Float an element left */
2869
+
2870
+ .qti-float-left {
2871
+ float: left;
2872
+ }
2873
+
2874
+ /* Float an element right */
2875
+
2876
+ .qti-float-right {
2877
+ float: right;
2878
+ }
2879
+
2880
+ /* Remove a float */
2881
+
2882
+ .qti-float-none {
2883
+ float: none;
2884
+ }
2885
+
2886
+ /* Clearfix Hack to apply to a container of
2887
+ floated content that overflows the container. */
2888
+
2889
+ .qti-float-clearfix::after {
2890
+ content: '';
2891
+ clear: both;
2892
+ display: table;
2893
+ }
2894
+
2895
+ .qti-float-clear-left
2896
+ .qti-float-clear-right
2897
+ .qti-float-clear-both
2898
+
2899
+ /* Set text-orientation to upright */
2900
+ .qti-text-orientation-upright {
2901
+ text-orientation: upright;
2902
+ }
2903
+
2904
+ /* stylelint-disable number-max-precision */
2905
+
2906
+ @layer qti-base {
2907
+ .qti-layout-row {
2908
+ display: flex;
2909
+ flex-wrap: wrap;
2910
+ width: 100%;
2911
+ gap: 2.1276595745%;
2912
+ }
2913
+
2914
+ .qti-layout-row [class*='qti-layout-col']:not(:empty) {
2915
+ box-sizing: border-box;
2916
+ }
2917
+
2918
+ .qti-layout-row [class*='qti-layout-col']:empty {
2919
+ width: 0;
2920
+ overflow: hidden; /* to fully collapse if there\u2019s padding or borders */
2921
+ }
2922
+
2923
+ .qti-layout-col1 {
2924
+ width: 6.3829787234%;
2925
+ }
2926
+
2927
+ .qti-layout-col2 {
2928
+ width: 14.8936170213%;
2929
+ }
2930
+
2931
+ .qti-layout-col3 {
2932
+ width: 23.4042553191%;
2933
+ }
2934
+
2935
+ .qti-layout-col4 {
2936
+ width: 31.914893617%;
2937
+ }
2938
+
2939
+ .qti-layout-col5 {
2940
+ width: 40.4255319149%;
2941
+ }
2942
+
2943
+ .qti-layout-col6 {
2944
+ width: 48.9361702128%;
2945
+ }
2946
+
2947
+ .qti-layout-col7 {
2948
+ width: 57.4468085106%;
2949
+ }
2950
+
2951
+ .qti-layout-col8 {
2952
+ width: 65.9574468085%;
2953
+ }
2954
+
2955
+ .qti-layout-col9 {
2956
+ width: 74.4680851064%;
2957
+ }
2958
+
2959
+ .qti-layout-col10 {
2960
+ width: 82.9787234043%;
2961
+ }
2962
+
2963
+ .qti-layout-col11 {
2964
+ width: 91.4893617021%;
2965
+ }
2966
+
2967
+ .qti-layout-col12 {
2968
+ width: 100%;
2969
+ }
2970
+
2971
+ .qti-layout-offset1 {
2972
+ margin-left: 8.5106382979%;
2973
+ }
2974
+
2975
+ .qti-layout-offset2 {
2976
+ margin-left: 17.0212765957%;
2977
+ }
2978
+
2979
+ .qti-layout-offset3 {
2980
+ margin-left: 25.5319148936%;
2981
+ }
2982
+
2983
+ .qti-layout-offset4 {
2984
+ margin-left: 34.0425531915%;
2985
+ }
2986
+
2987
+ .qti-layout-offset5 {
2988
+ margin-left: 42.5531914894%;
2989
+ }
2990
+
2991
+ .qti-layout-offset6 {
2992
+ margin-left: 51.0638297872%;
2993
+ }
2994
+
2995
+ .qti-layout-offset7 {
2996
+ margin-left: 59.5744680851%;
2997
+ }
2998
+
2999
+ .qti-layout-offset8 {
3000
+ margin-left: 68.085106383%;
3001
+ }
3002
+
3003
+ .qti-layout-offset9 {
3004
+ margin-left: 76.5957446809%;
3005
+ }
3006
+
3007
+ .qti-layout-offset10 {
3008
+ margin-left: 85.1063829787%;
3009
+ }
3010
+
3011
+ .qti-layout-offset11 {
3012
+ margin-left: 93.6170212766%;
3013
+ }
3014
+
3015
+ .qti-layout-offset12 {
3016
+ margin-left: 102.1276595745%;
3017
+ }
3018
+
3019
+ @media (width <= 767px) {
3020
+ [class*='qti-layout-col'] {
3021
+ width: 100%;
3022
+ }
3023
+ }
3024
+ }
3025
+
3026
+ [view],
3027
+ qti-outcome-declaration,
3028
+ qti-response-declaration {
3029
+ display: none;
3030
+ }
3031
+
3032
+ [view].show {
3033
+ display: block;
3034
+ }
3035
+
3036
+ :host {
3037
+ box-sizing: border-box;
3038
+ }
3039
+
3040
+ *,
3041
+ *::before,
3042
+ *::after {
3043
+ box-sizing: inherit;
3044
+ }
3045
+
3046
+ /* components */
3047
+
3048
+ @layer qti-components {
3049
+ qti-choice-interaction {
3050
+ &.qti-input-control-hidden {
3051
+ & qti-simple-choice {
3052
+
3053
+ &:hover {
3054
+ background-color: var(--qti-hover-bg);
3055
+ }
3056
+
3057
+ &:focus {
3058
+ box-shadow: 0 0 0 var(--qti-focus-border-width) var(--qti-focus-color);
3059
+ }
3060
+
3061
+ &::part(ch) {
3062
+ display: none;
3063
+ }
3064
+
3065
+ &:state(--checked),
3066
+ &[aria-checked='true'] {
3067
+ border-color: var(--qti-border-active);
3068
+ background-color: var(--qti-bg-active);
3069
+ }
3070
+
3071
+ &:state(readonly),
3072
+ &[aria-readonly='true'] {
3073
+ cursor: pointer;
3074
+ background-color: var(--qti-bg);
3075
+ outline: 0;
3076
+ border: none;
3077
+ }
3078
+
3079
+ &:state(disabled),
3080
+ &[aria-disabled='true'] {
3081
+ cursor: not-allowed;
3082
+ background-color: var(--qti-disabled-bg);
3083
+ color: var(--qti-disabled-color);
3084
+ border-color: var(--qti-border-color);
3085
+ outline: 4px solid var(--qti-disabled-bg);
3086
+ }
3087
+
3088
+ border-radius: var(--qti-border-radius);
3089
+
3090
+ padding: var(--qti-padding-vertical) var(--qti-padding-horizontal);
3091
+
3092
+ border: var(--qti-border-thickness) var(--qti-border-style) var(--qti-border-color);
3093
+
3094
+ outline: none
3095
+ }
3096
+ }
3097
+
3098
+ &:not(.qti-input-control-hidden) {
3099
+ & qti-simple-choice {
3100
+
3101
+ &:not([aria-disabled='true'], [aria-readonly='true'], :state(--checked)):hover {
3102
+ background-color: var(--qti-hover-bg);
3103
+ }
3104
+
3105
+ &:focus {
3106
+ box-shadow: 0 0 0 var(--qti-focus-border-width) var(--qti-focus-color);
3107
+ }
3108
+
3109
+ &:state(--checked),
3110
+ &[aria-checked='true'] {
3111
+ border-color: var(--qti-border-active);
3112
+ background-color: var(--qti-bg-active);
3113
+ }
3114
+
3115
+ &:state(readonly),
3116
+ &[aria-readonly='true'] {
3117
+ cursor: pointer;
3118
+ background-color: var(--qti-bg);
3119
+ outline: 0;
3120
+ border: none;
3121
+ }
3122
+
3123
+ &:state(disabled),
3124
+ &[aria-disabled='true'] {
3125
+ cursor: not-allowed;
3126
+ background-color: var(--qti-disabled-bg);
3127
+ color: var(--qti-disabled-color);
3128
+ border-color: var(--qti-border-color);
3129
+ outline: 4px solid var(--qti-disabled-bg);
3130
+ }
3131
+
3132
+ &::part(cha) {
3133
+ width: calc(var(--qti-form-size) - 6px);
3134
+ height: calc(var(--qti-form-size) - 6px);
3135
+ }
3136
+
3137
+ &:state(radio)::part(ch) {
3138
+ border-radius: 100%;
3139
+ display: grid;
3140
+ place-content: center;
3141
+ width: var(--qti-form-size);
3142
+ height: var(--qti-form-size);
3143
+ border: var(--qti-border-thickness) var(--qti-border-style) var(--qti-border-color);
3144
+ outline: none;
3145
+ }
3146
+
3147
+ &:state(radio):state(--checked)::part(cha) {
3148
+ background-color: var(--qti-border-active);
3149
+ border-radius: 100%;
3150
+ }
3151
+
3152
+ &:state(checkbox)::part(ch) {
3153
+ display: flex;
3154
+ place-items: center;
3155
+ border-radius: var(--qti-border-radius);
3156
+ display: grid;
3157
+ place-content: center;
3158
+ width: var(--qti-form-size);
3159
+ height: var(--qti-form-size);
3160
+ border: var(--qti-border-thickness) var(--qti-border-style) var(--qti-border-color);
3161
+ outline: none;
3162
+ }
3163
+
3164
+ &:state(checkbox):state(--checked)::part(cha) {
3165
+ background-color: var(--qti-border-active);
3166
+ -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='currentColor' width='100%' height='100%' viewBox='0 0 24 24'%3E%3Cpath d='M20.285 2l-11.285 11.567-5.286-5.011-3.714 3.716 9 8.728 15-15.285z'/%3E%3C/svg%3E");
3167
+ mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='currentColor' width='100%' height='100%' viewBox='0 0 24 24'%3E%3Cpath d='M20.285 2l-11.285 11.567-5.286-5.011-3.714 3.716 9 8.728 15-15.285z'/%3E%3C/svg%3E");
3168
+ }
3169
+
3170
+ gap: 0.5rem;
3171
+
3172
+ border-radius: var(--qti-border-radius);
3173
+
3174
+ padding: var(--qti-padding-vertical) var(--qti-padding-horizontal);
3175
+
3176
+ outline: none;
3177
+
3178
+ cursor: pointer
3179
+ }
3180
+ }
3181
+
3182
+ & qti-simple-choice {
3183
+ width: -moz-fit-content;
3184
+ width: fit-content;
3185
+ cursor: pointer;
3186
+
3187
+ &:state(correct-response),
3188
+ &[data-correct-response='true'] {
3189
+ &::after {
3190
+ content: '\\02714';
3191
+ color: #16a34a; /* text-green-600 */
3192
+ }
3193
+ }
3194
+ }
3195
+
3196
+ & qti-simple-choice > p {
3197
+ margin: 0 !important;
3198
+ padding: 0 !important;
3199
+ }
3200
+ }
3201
+
3202
+ .hover-border {
3203
+ border: 2px solid #000; /* Adjust the border style and color as needed */
3204
+ }
3205
+
3206
+ qti-graphic-gap-match-interaction {
3207
+ position: relative;
3208
+
3209
+ &.qti-selections-light {
3210
+ &:state(--dragzone-active)::part(drags) {
3211
+ background-color: var(--qti-light-bg-active);
3212
+ border-color: var(--qti-light-border-active);
3213
+ }
3214
+
3215
+ &:state(--dragzone-enabled)::part(drags) {
3216
+ background-color: var(--qti-light-bg-active);
3217
+ }
3218
+ }
3219
+
3220
+ &.qti-selections-dark {
3221
+ &:state(--dragzone-active)::part(drags) {
3222
+ background-color: var(--qti-dark-bg-active);
3223
+ border-color: var(--qti-dark-border-active);
3224
+ }
3225
+
3226
+ &:state(--dragzone-enabled)::part(drags) {
3227
+ background-color: var(--qti-dark-bg-active);
3228
+ }
3229
+ }
3230
+
3231
+ /* General styles for active and enabled states */
3232
+ &:state(--dragzone-active)::part(drags) {
3233
+ border-color: var(--qti-border-active);
3234
+ background-color: var(--qti-bg-active);
3235
+ }
3236
+
3237
+ &:state(--dragzone-enabled)::part(drags) {
3238
+ background-color: var(--qti-bg-active);
3239
+ }
3240
+
3241
+ & qti-gap-img,
3242
+ qti-gap-text {
3243
+ display: flex;
3244
+ justify-content: center;
3245
+ align-items: center;
3246
+ cursor: grab;
3247
+ }
3248
+
3249
+ & qti-associable-hotspot {
3250
+ display: flex;
3251
+ justify-content: center;
3252
+ align-items: center;
3253
+ border: 2px solid transparent;
3254
+
3255
+ &[enabled] {
3256
+
3257
+ /* Light theme override */
3258
+ .qti-selections-light & {
3259
+ background-color: var(--qti-light-bg-active);
3260
+ }
3261
+
3262
+ /* Dark theme override */
3263
+ .qti-selections-dark & {
3264
+ background-color: var(--qti-dark-bg-active);
3265
+ }
3266
+ background-color: var(--qti-bg-active)
3267
+ }
3268
+
3269
+ &[active] {
3270
+
3271
+ /* Light theme override */
3272
+ .qti-selections-light & {
3273
+ background-color: var(--qti-light-bg-active);
3274
+ border-color: var(--qti-light-border-active);
3275
+ }
3276
+
3277
+ /* Dark theme override */
3278
+ .qti-selections-dark & {
3279
+ background-color: var(--qti-dark-bg-active);
3280
+ border-color: var(--qti-dark-border-active);
3281
+ }
3282
+ border-color: var(--qti-border-active);
3283
+ background-color: var(--qti-bg-active)
3284
+ }
3285
+
3286
+ &[disabled] {
3287
+
3288
+ &:not(:empty) {
3289
+ cursor: default !important;
3290
+ }
3291
+
3292
+ cursor: not-allowed;
3293
+
3294
+ background-color: var(--qti-disabled-bg);
3295
+
3296
+ color: var(--qti-disabled-color);
3297
+
3298
+ border-color: var(--qti-border-color);
3299
+
3300
+ outline: 4px solid var(--qti-disabled-bg)
3301
+ }
3302
+
3303
+ &:empty::after {
3304
+ padding: var(--qti-padding-md) var(--qti-padding-lg); /* Padding shorthand */
3305
+ content: '\\0000a0'; /* when empty, put a space in it */
3306
+ }
3307
+
3308
+ &:not(:empty) {
3309
+ padding: 0;
3310
+ width: auto;
3311
+ }
3312
+
3313
+ &:not(:empty) > * {
3314
+ flex: 1;
3315
+ transform: rotate(0); /* rotate-0 */
3316
+ box-shadow: 0 0 0 1px #e5e7eb; /* ring-gray-200 */
3317
+ }
3318
+ }
3319
+
3320
+ & img {
3321
+ margin: 0;
3322
+ padding: 0;
3323
+ }
3324
+ }
3325
+
3326
+ qti-text-entry-interaction {
3327
+ &::part(input) {
3328
+ border-radius: 0;
3329
+ cursor: text;
3330
+ padding: var(--qti-padding-vertical) var(--qti-padding-horizontal);
3331
+ background: unset;
3332
+ border: var(--qti-border-thickness) var(--qti-border-style) var(--qti-border-color);
3333
+ outline: none;
3334
+ }
3335
+
3336
+ &:hover {
3337
+ background-color: var(--qti-hover-bg);
3338
+ }
3339
+
3340
+ &:focus-within {
3341
+ &::part(input) {
3342
+ box-shadow: 0 0 0 var(--qti-focus-border-width) var(--qti-focus-color);
3343
+ border-color: var(--qti-border-active);
3344
+ }
3345
+ }
3346
+ }
3347
+
3348
+ qti-extended-text-interaction {
3349
+ &::part(textarea) {
3350
+ border-radius: 0;
3351
+ cursor: text;
3352
+ padding: var(--qti-padding-vertical) var(--qti-padding-horizontal);
3353
+ background: unset;
3354
+ border: var(--qti-border-thickness) var(--qti-border-style) var(--qti-border-color);
3355
+ outline: none;
3356
+ }
3357
+
3358
+ &:hover {
3359
+ background-color: var(--qti-hover-bg);
3360
+ }
3361
+
3362
+ &:focus-within {
3363
+ &::part(textarea) {
3364
+ box-shadow: 0 0 0 var(--qti-focus-border-width) var(--qti-focus-color);
3365
+ border-color: var(--qti-border-active);
3366
+ }
3367
+ }
3368
+ }
3369
+
3370
+ qti-gap-match-interaction {
3371
+ &.qti-selections-light {
3372
+ &:state(--dragzone-active)::part(drags) {
3373
+ background-color: var(--qti-light-bg-active);
3374
+ border-color: var(--qti-light-border-active);
3375
+ }
3376
+
3377
+ &:state(--dragzone-enabled)::part(drags) {
3378
+ background-color: var(--qti-light-bg-active);
3379
+ }
3380
+ }
3381
+
3382
+ &.qti-selections-dark {
3383
+ &:state(--dragzone-active)::part(drags) {
3384
+ background-color: var(--qti-dark-bg-active);
3385
+ border-color: var(--qti-dark-border-active);
3386
+ }
3387
+
3388
+ &:state(--dragzone-enabled)::part(drags) {
3389
+ background-color: var(--qti-dark-bg-active);
3390
+ }
3391
+ }
3392
+
3393
+ /* General styles for active and enabled states */
3394
+ &:state(--dragzone-active)::part(drags) {
3395
+ border-color: var(--qti-border-active);
3396
+ background-color: var(--qti-bg-active);
3397
+ }
3398
+
3399
+ &:state(--dragzone-enabled)::part(drags) {
3400
+ background-color: var(--qti-bg-active);
3401
+ }
3402
+
3403
+ & qti-gap-text {
3404
+
3405
+ &[dragging] {
3406
+ pointer-events: none;
3407
+ rotate: -2deg;
3408
+ box-shadow: 0 8px 12px rgb(0 0 0 / 20%),
3409
+ 0 4px 8px rgb(0 0 0 / 10%);
3410
+ }
3411
+
3412
+ &:hover {
3413
+ background-color: var(--qti-hover-bg);
3414
+ }
3415
+
3416
+ &:focus {
3417
+ box-shadow: 0 0 0 var(--qti-focus-border-width) var(--qti-focus-color);
3418
+ }
3419
+
3420
+ transition: transform 200ms ease-out,
3421
+ box-shadow 200ms ease-out,
3422
+ rotate 200ms ease-out;
3423
+
3424
+ cursor: grab;
3425
+
3426
+ background-color: var(--qti-bg);
3427
+
3428
+ padding: var(--qti-padding-vertical) var(--qti-padding-horizontal);
3429
+
3430
+ border-radius: var(--qti-border-radius);
3431
+
3432
+ padding-left: calc(var(--qti-padding-horizontal) + 0.5rem);
3433
+
3434
+ border: var(--qti-border-thickness) var(--qti-border-style) var(--qti-border-color);
3435
+
3436
+ outline: none;
3437
+
3438
+ background-image: radial-gradient(
3439
+ circle at center,
3440
+ rgb(0 0 0 / 10%) 0,
3441
+ rgb(0 0 0 / 20%) 2px,
3442
+ rgb(255 255 255 / 0%) 2px,
3443
+ rgb(255 255 255 / 0%) 100%
3444
+ );
3445
+
3446
+ background-repeat: repeat-y;
3447
+
3448
+ background-position: left center;
3449
+
3450
+ background-size: 14px 8px
3451
+ }
3452
+
3453
+ & qti-gap {
3454
+
3455
+ &[enabled] {
3456
+
3457
+ /* Light theme override */
3458
+ .qti-selections-light & {
3459
+ border-color: var(--qti-light-border-active);
3460
+ }
3461
+
3462
+ /* Dark theme override */
3463
+ .qti-selections-dark & {
3464
+ border-color: var(--qti-dark-border-active);
3465
+ }
3466
+ background-color: var(--qti-bg-active)
3467
+ }
3468
+
3469
+ &[disabled] {
3470
+
3471
+ &:not(:empty) {
3472
+ cursor: default !important;
3473
+ }
3474
+
3475
+ cursor: not-allowed;
3476
+
3477
+ background-color: var(--qti-disabled-bg);
3478
+
3479
+ color: var(--qti-disabled-color);
3480
+
3481
+ border-color: var(--qti-border-color);
3482
+
3483
+ outline: 4px solid var(--qti-disabled-bg)
3484
+ }
3485
+
3486
+ &[active] {
3487
+
3488
+ /* Light theme override */
3489
+ .qti-selections-light & {
3490
+ background-color: var(--qti-light-bg-active);
3491
+ border-color: var(--qti-light-border-active);
3492
+ }
3493
+
3494
+ /* Dark theme override */
3495
+ .qti-selections-dark & {
3496
+ background-color: var(--qti-dark-bg-active);
3497
+ border-color: var(--qti-dark-border-active);
3498
+ }
3499
+ border-color: var(--qti-border-active);
3500
+ background-color: var(--qti-bg-active)
3501
+ }
3502
+
3503
+ display: inline-flex;
3504
+ align-items: center;
3505
+
3506
+ &:empty::after {
3507
+ padding: var(--qti-padding-md) var(--qti-padding-lg); /* Padding shorthand */
3508
+ content: '\\0000a0'; /* when empty, put a space in it */
3509
+ }
3510
+
3511
+ &:not(:empty) {
3512
+ display: inline-flex;
3513
+ padding: 0;
3514
+ width: auto;
3515
+ }
3516
+
3517
+ &:not(:empty) > * {
3518
+ flex: 1;
3519
+ transform: rotate(0); /* rotate-0 */
3520
+ box-shadow: 0 0 0 1px #e5e7eb; /* ring-gray-200 */
3521
+ }
3522
+
3523
+ background: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><circle cx="10" cy="10" r="7" stroke="%23CCCCCC" stroke-width="1" fill="transparent" /></svg>')
3524
+ center no-repeat;
3525
+
3526
+ border-radius: var(--qti-border-radius);
3527
+
3528
+ position: relative;
3529
+
3530
+ background-color: var(--qti-bg);
3531
+
3532
+ border: var(--qti-border-thickness) var(--qti-border-style) var(--qti-border-color);
3533
+
3534
+ outline: none
3535
+ }
3536
+ }
3537
+
3538
+ qti-hotspot-interaction {
3539
+ & qti-hotspot-choice {
3540
+ &[shape='circle'] {
3541
+
3542
+ &:hover {
3543
+ background-color: var(--qti-hover-bg);
3544
+ }
3545
+
3546
+ &:focus {
3547
+ box-shadow: 0 0 0 var(--qti-focus-border-width) var(--qti-focus-color);
3548
+ }
3549
+
3550
+ &:state(--checked),
3551
+ &[aria-checked='true'] {
3552
+ border-color: var(--qti-border-active);
3553
+ }
3554
+
3555
+ &:state(--readonly),
3556
+ &[aria-readonly='true'] {
3557
+ cursor: pointer;
3558
+ background-color: var(--qti-bg);
3559
+ outline: 0;
3560
+ border: none;
3561
+ }
3562
+
3563
+ &:state(--disabled),
3564
+ &[aria-disabled='true'] {
3565
+ cursor: not-allowed;
3566
+ background-color: var(--qti-disabled-bg);
3567
+ color: var(--qti-disabled-color);
3568
+ border-color: var(--qti-border-color);
3569
+ outline: 4px solid var(--qti-disabled-bg);
3570
+ }
3571
+
3572
+ width: 100%;
3573
+
3574
+ height: 100%;
3575
+
3576
+ background-color: transparent;
3577
+
3578
+ padding: 0;
3579
+
3580
+ border: var(--qti-border-thickness) var(--qti-border-style) var(--qti-border-color);
3581
+
3582
+ outline: none
3583
+ }
3584
+
3585
+ &[shape='rect'] {
3586
+
3587
+ /* &:hover {
3588
+ @apply hov;
3589
+ } */
3590
+
3591
+ &:focus {
3592
+ box-shadow: 0 0 0 var(--qti-focus-border-width) var(--qti-focus-color);
3593
+ }
3594
+
3595
+ &:state(--checked),
3596
+ &[aria-checked='true'] {
3597
+ border-color: var(--qti-border-active);
3598
+ }
3599
+
3600
+ &[aria-readonly='true'] {
3601
+ cursor: pointer;
3602
+ background-color: var(--qti-bg);
3603
+ outline: 0;
3604
+ border: none;
3605
+ }
3606
+
3607
+ &[aria-disabled='true'] {
3608
+ cursor: not-allowed;
3609
+ background-color: var(--qti-disabled-bg);
3610
+ color: var(--qti-disabled-color);
3611
+ border-color: var(--qti-border-color);
3612
+ outline: 4px solid var(--qti-disabled-bg);
3613
+ }
3614
+
3615
+ width: 100%;
3616
+
3617
+ height: 100%;
3618
+
3619
+ background-color: transparent;
3620
+
3621
+ padding: 0;
3622
+
3623
+ border: var(--qti-border-thickness) var(--qti-border-style) var(--qti-border-color);
3624
+
3625
+ outline: none
3626
+ }
3627
+
3628
+ &[shape='poly'] {
3629
+ &:hover::after {
3630
+ content: '';
3631
+ width: 100%;
3632
+ height: 100%;
3633
+ background: repeating-linear-gradient(
3634
+ 45deg,
3635
+ var(--qti-border-active),
3636
+ var(--qti-border-active) 5px,
3637
+ transparent 5px,
3638
+ transparent 10px
3639
+ );
3640
+ display: block;
3641
+ }
3642
+
3643
+ &:state(--checked)::after,
3644
+ &[aria-checked='true']::after {
3645
+ content: '';
3646
+ width: 100%;
3647
+ height: 100%;
3648
+ background: repeating-linear-gradient(
3649
+ 45deg,
3650
+ transparent,
3651
+ transparent 5px,
3652
+ var(--qti-border-active) 5px,
3653
+ var(--qti-border-active) 10px
3654
+ );
3655
+ display: block;
3656
+ }
3657
+
3658
+ &[aria-readonly='true'] {
3659
+ cursor: pointer;
3660
+ background-color: var(--qti-bg);
3661
+ outline: 0;
3662
+ border: none;
3663
+ }
3664
+
3665
+ &[aria-disabled='true'] {
3666
+ cursor: not-allowed;
3667
+ background-color: var(--qti-disabled-bg);
3668
+ color: var(--qti-disabled-color);
3669
+ border-color: var(--qti-border-color);
3670
+ outline: 4px solid var(--qti-disabled-bg);
3671
+ }
3672
+ }
3673
+ }
3674
+ }
3675
+
3676
+ qti-hottext-interaction {
3677
+ /* &:not(.qti-input-control-hidden),
3678
+ &:not(.qti-unselected-hidden) { */
3679
+ qti-hottext {
3680
+ display: inline-flex;
3681
+ align-items: center;
3682
+
3683
+ &:hover {
3684
+ background-color: var(--qti-hover-bg);
3685
+ }
3686
+
3687
+ &:focus {
3688
+ box-shadow: 0 0 0 var(--qti-focus-border-width) var(--qti-focus-color);
3689
+ }
3690
+
3691
+ &::part(cha) {
3692
+ width: calc(var(--qti-form-size) - 6px);
3693
+ height: calc(var(--qti-form-size) - 6px);
3694
+ }
3695
+
3696
+ &:state(radio)::part(ch) {
3697
+ border-radius: 100%;
3698
+ display: grid;
3699
+ place-content: center;
3700
+ width: var(--qti-form-size);
3701
+ height: var(--qti-form-size);
3702
+ border: var(--qti-border-thickness) var(--qti-border-style) var(--qti-border-color);
3703
+ outline: none;
3704
+ }
3705
+
3706
+ &:state(radio):state(--checked)::part(cha) {
3707
+ background-color: var(--qti-border-active);
3708
+ border-radius: 100%;
3709
+ }
3710
+
3711
+ &:state(checkbox)::part(ch) {
3712
+ display: flex;
3713
+ place-items: center;
3714
+ border-radius: var(--qti-border-radius);
3715
+ display: grid;
3716
+ place-content: center;
3717
+ width: var(--qti-form-size);
3718
+ height: var(--qti-form-size);
3719
+ border: var(--qti-border-thickness) var(--qti-border-style) var(--qti-border-color);
3720
+ outline: none;
3721
+ }
3722
+
3723
+ &:state(checkbox):state(--checked)::part(cha) {
3724
+ background-color: var(--qti-border-active);
3725
+ -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='currentColor' width='100%' height='100%' viewBox='0 0 24 24'%3E%3Cpath d='M20.285 2l-11.285 11.567-5.286-5.011-3.714 3.716 9 8.728 15-15.285z'/%3E%3C/svg%3E");
3726
+ mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='currentColor' width='100%' height='100%' viewBox='0 0 24 24'%3E%3Cpath d='M20.285 2l-11.285 11.567-5.286-5.011-3.714 3.716 9 8.728 15-15.285z'/%3E%3C/svg%3E");
3727
+ }
3728
+
3729
+ gap: 0.5rem;
3730
+
3731
+ border-radius: var(--qti-border-radius);
3732
+
3733
+ padding: var(--qti-padding-vertical) var(--qti-padding-horizontal);
3734
+
3735
+ outline: none;
3736
+
3737
+ cursor: pointer
3738
+ }
3739
+
3740
+ /* } */
3741
+
3742
+ &.qti-input-control-hidden {
3743
+ qti-hottext {
3744
+ /* --qti-padding-md: 0.1rem;
3745
+ --qti-padding-lg: 0.2rem;
3746
+ --qti-border-radius-md: 0.3rem;
3747
+ --qti-border-thickness: 1px;
3748
+ --qti-font-weight-semibold: 400; */
3749
+
3750
+ &:hover {
3751
+ background-color: var(--qti-hover-bg);
3752
+ }
3753
+
3754
+ &:focus {
3755
+ box-shadow: 0 0 0 var(--qti-focus-border-width) var(--qti-focus-color);
3756
+ }
3757
+
3758
+ /* @layer qti-variants { */
3759
+ &::part(ch) {
3760
+ display: none;
3761
+ }
3762
+
3763
+ &:state(--checked) {
3764
+ border-color: var(--qti-border-active);
3765
+ background-color: var(--qti-bg-active);
3766
+ }
3767
+
3768
+ &[aria-readonly='true'] {
3769
+ cursor: pointer;
3770
+ background-color: var(--qti-bg);
3771
+ outline: 0;
3772
+ border: none;
3773
+ }
3774
+
3775
+ &[aria-disabled='true'] {
3776
+ cursor: not-allowed;
3777
+ background-color: var(--qti-disabled-bg);
3778
+ color: var(--qti-disabled-color);
3779
+ border-color: var(--qti-border-color);
3780
+ outline: 4px solid var(--qti-disabled-bg);
3781
+ }
3782
+
3783
+ border-radius: var(--qti-border-radius);
3784
+
3785
+ padding: var(--qti-padding-vertical) var(--qti-padding-horizontal);
3786
+
3787
+ border: var(--qti-border-thickness) var(--qti-border-style) var(--qti-border-color);
3788
+
3789
+ outline: none
3790
+ }
3791
+
3792
+ /* } */
3793
+ }
3794
+
3795
+ &.qti-unselected-hidden {
3796
+ qti-hottext {
3797
+ &:hover {
3798
+ background-color: var(--qti-hover-bg);
3799
+ }
3800
+
3801
+ &:focus {
3802
+ box-shadow: 0 0 0 var(--qti-focus-border-width) var(--qti-focus-color);
3803
+ }
3804
+
3805
+ cursor: pointer;
3806
+
3807
+ &::part(ch) {
3808
+ display: none;
3809
+ }
3810
+
3811
+ &:state(--checked) {
3812
+ background-color: var(--qti-bg-active);
3813
+ }
3814
+
3815
+ &[aria-readonly='true'] {
3816
+ cursor: pointer;
3817
+ background-color: var(--qti-bg);
3818
+ outline: 0;
3819
+ border: none;
3820
+ }
3821
+
3822
+ &[aria-disabled='true'] {
3823
+ cursor: not-allowed;
3824
+ background-color: var(--qti-disabled-bg);
3825
+ color: var(--qti-disabled-color);
3826
+ border-color: var(--qti-border-color);
3827
+ outline: 4px solid var(--qti-disabled-bg);
3828
+ }
3829
+ }
3830
+ }
3831
+ }
3832
+
3833
+ qti-inline-choice-interaction {
3834
+ &::part(select) {
3835
+
3836
+ &:hover {
3837
+ background-color: var(--qti-hover-bg);
3838
+ }
3839
+
3840
+ &:focus {
3841
+ box-shadow: 0 0 0 var(--qti-focus-border-width) var(--qti-focus-color);
3842
+ }
3843
+
3844
+ border-radius: var(--qti-border-radius);
3845
+
3846
+ position: relative;
3847
+
3848
+ -webkit-appearance: none;
3849
+
3850
+ -moz-appearance: none;
3851
+
3852
+ appearance: none;
3853
+
3854
+ padding: var(--qti-padding-vertical) var(--qti-padding-horizontal);
3855
+
3856
+ padding-right: calc(var(--qti-padding-horizontal) + 1.5rem);
3857
+
3858
+ border: var(--qti-border-thickness) var(--qti-border-style) var(--qti-border-color);
3859
+
3860
+ outline: none;
3861
+
3862
+ background: url("data:image/svg+xml,%3Csvg fill='currentColor' width='22' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath clip-rule='evenodd' fill-rule='evenodd' d='M5.23 7.21a.75.75 0 011.06.02L10 11.168l3.71-3.938a.75.75 0 111.08 1.04l-4.25 4.5a.75.75 0 01-1.08 0l-4.25-4.5a.75.75 0 01.02-1.06z'%3E%3C/path%3E%3C/svg%3E")
3863
+ no-repeat center right 6px
3864
+ }
3865
+ }
3866
+
3867
+ qti-match-interaction:not(.qti-match-tabular) {
3868
+ /* The draggables */
3869
+ & qti-simple-match-set:first-of-type {
3870
+ display: flex;
3871
+ flex-wrap: wrap;
3872
+ align-items: flex-start; /* Prevents children from stretching */
3873
+ gap: var(--qti-gap-size);
3874
+
3875
+ & qti-simple-associable-choice {
3876
+
3877
+ &[dragging] {
3878
+ pointer-events: none;
3879
+ rotate: -2deg;
3880
+ box-shadow: 0 8px 12px rgb(0 0 0 / 20%),
3881
+ 0 4px 8px rgb(0 0 0 / 10%);
3882
+ }
3883
+
3884
+ &:hover {
3885
+ background-color: var(--qti-hover-bg);
3886
+ }
3887
+
3888
+ &:focus {
3889
+ box-shadow: 0 0 0 var(--qti-focus-border-width) var(--qti-focus-color);
3890
+ }
3891
+
3892
+ transition: transform 200ms ease-out,
3893
+ box-shadow 200ms ease-out,
3894
+ rotate 200ms ease-out;
3895
+
3896
+ cursor: grab;
3897
+
3898
+ background-color: var(--qti-bg);
3899
+
3900
+ padding: var(--qti-padding-vertical) var(--qti-padding-horizontal);
3901
+
3902
+ border-radius: var(--qti-border-radius);
3903
+
3904
+ padding-left: calc(var(--qti-padding-horizontal) + 0.5rem);
3905
+
3906
+ border: var(--qti-border-thickness) var(--qti-border-style) var(--qti-border-color);
3907
+
3908
+ outline: none;
3909
+
3910
+ background-image: radial-gradient(
3911
+ circle at center,
3912
+ rgb(0 0 0 / 10%) 0,
3913
+ rgb(0 0 0 / 20%) 2px,
3914
+ rgb(255 255 255 / 0%) 2px,
3915
+ rgb(255 255 255 / 0%) 100%
3916
+ );
3917
+
3918
+ background-repeat: repeat-y;
3919
+
3920
+ background-position: left center;
3921
+
3922
+ background-size: 14px 8px
3923
+ }
3924
+ }
3925
+
3926
+ /* The droppables */
3927
+ & qti-simple-match-set:last-of-type {
3928
+ display: grid;
3929
+ grid-auto-columns: 1fr; /* auto-cols-fr */
3930
+ grid-auto-flow: column; /* grid-flow-col */
3931
+ gap: var(--qti-gap-size); /* gap-2 */
3932
+ width: 100%; /* w-full */
3933
+
3934
+ & qti-simple-associable-choice {
3935
+ display: flex;
3936
+ flex-direction: column;
3937
+ }
3938
+
3939
+ & > qti-simple-associable-choice {
3940
+ /* a droppable qti-simple-associable-choice */
3941
+ box-sizing: border-box;
3942
+ display: grid;
3943
+ grid-row: 2 / 4;
3944
+ grid-template-rows: subgrid;
3945
+
3946
+ & img {
3947
+ max-width: 100%;
3948
+ height: auto;
3949
+ }
3950
+
3951
+ &[enabled] {
3952
+ &::part(dropslot) {
3953
+ background-color: var(--qti-bg-active);
3954
+ }
3955
+ }
3956
+
3957
+ &[disabled] {
3958
+ &::part(dropslot) {
3959
+ cursor: not-allowed;
3960
+ background-color: var(--qti-disabled-bg);
3961
+ color: var(--qti-disabled-color);
3962
+ border-color: var(--qti-border-color);
3963
+ outline: 4px solid var(--qti-disabled-bg);
3964
+ }
3965
+ }
3966
+
3967
+ &[active] {
3968
+ &::part(dropslot) {
3969
+ border-color: var(--qti-border-active);
3970
+ background-color: var(--qti-bg-active);
3971
+ }
3972
+ }
3973
+
3974
+ &::part(dropslot) {
3975
+
3976
+ &[dragging] {
3977
+ pointer-events: none;
3978
+ rotate: -2deg;
3979
+ box-shadow: 0 8px 12px rgb(0 0 0 / 20%),
3980
+ 0 4px 8px rgb(0 0 0 / 10%);
3981
+ }
3982
+
3983
+ &:focus {
3984
+ box-shadow: 0 0 0 var(--qti-focus-border-width) var(--qti-focus-color);
3985
+ }
3986
+
3987
+ min-height: 6rem;
3988
+ gap: var(--qti-gap-size);
3989
+ box-sizing: border-box;
3990
+ display: flex;
3991
+ justify-content: center;
3992
+ align-items: center;
3993
+ background: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><circle cx="10" cy="10" r="7" stroke="%23CCCCCC" stroke-width="1" fill="transparent" /></svg>')
3994
+ center no-repeat;
3995
+ border-radius: var(--qti-border-radius);
3996
+ position: relative;
3997
+ background-color: var(--qti-bg);
3998
+ border: var(--qti-border-thickness) var(--qti-border-style) var(--qti-border-color);
3999
+ outline: none;
4000
+ }
4001
+
4002
+ & > *:not(qti-simple-associable-choice) {
4003
+ pointer-events: none;
4004
+ }
4005
+
4006
+ & > qti-simple-associable-choice {
4007
+
4008
+ &::part(dropslot) {
4009
+ display: none;
4010
+ }
4011
+
4012
+ &:hover {
4013
+ background-color: var(--qti-hover-bg);
4014
+ }
4015
+
4016
+ &:focus {
4017
+ box-shadow: 0 0 0 var(--qti-focus-border-width) var(--qti-focus-color);
4018
+ }
4019
+
4020
+ flex-basis: fit-content;
4021
+
4022
+ transition: transform 200ms ease-out,
4023
+ box-shadow 200ms ease-out,
4024
+ rotate 200ms ease-out;
4025
+
4026
+ cursor: grab;
4027
+
4028
+ background-color: var(--qti-bg);
4029
+
4030
+ padding: var(--qti-padding-vertical) var(--qti-padding-horizontal);
4031
+
4032
+ border-radius: var(--qti-border-radius);
4033
+
4034
+ padding-left: calc(var(--qti-padding-horizontal) + 0.5rem);
4035
+
4036
+ border: var(--qti-border-thickness) var(--qti-border-style) var(--qti-border-color);
4037
+
4038
+ outline: none;
4039
+
4040
+ background-image: radial-gradient(
4041
+ circle at center,
4042
+ rgb(0 0 0 / 10%) 0,
4043
+ rgb(0 0 0 / 20%) 2px,
4044
+ rgb(255 255 255 / 0%) 2px,
4045
+ rgb(255 255 255 / 0%) 100%
4046
+ );
4047
+
4048
+ background-repeat: repeat-y;
4049
+
4050
+ background-position: left center;
4051
+
4052
+ background-size: 14px 8px;
4053
+ }
4054
+ }
4055
+ }
4056
+ }
4057
+
4058
+ qti-order-interaction:state(--dragzone-active)::part(drags) {
4059
+ border-color: var(--qti-border-active);
4060
+ background-color: var(--qti-bg-active);
4061
+ }
4062
+
4063
+ qti-order-interaction:state(--dragzone-enabled)::part(drags) {
4064
+ background-color: var(--qti-bg-active);
4065
+ }
4066
+
4067
+ qti-order-interaction {
4068
+ &::part(qti-simple-choice),
4069
+ & qti-simple-choice {
4070
+
4071
+ &[dragging] {
4072
+ pointer-events: none;
4073
+ rotate: -2deg;
4074
+ box-shadow: 0 8px 12px rgb(0 0 0 / 20%),
4075
+ 0 4px 8px rgb(0 0 0 / 10%);
4076
+ }
4077
+
4078
+ &:hover {
4079
+ background-color: var(--qti-hover-bg);
4080
+ }
4081
+
4082
+ &:focus {
4083
+ box-shadow: 0 0 0 var(--qti-focus-border-width) var(--qti-focus-color);
4084
+ }
4085
+
4086
+ transition: transform 200ms ease-out,
4087
+ box-shadow 200ms ease-out,
4088
+ rotate 200ms ease-out;
4089
+
4090
+ cursor: grab;
4091
+
4092
+ background-color: var(--qti-bg);
4093
+
4094
+ padding: var(--qti-padding-vertical) var(--qti-padding-horizontal);
4095
+
4096
+ border-radius: var(--qti-border-radius);
4097
+
4098
+ padding-left: calc(var(--qti-padding-horizontal) + 0.5rem);
4099
+
4100
+ border: var(--qti-border-thickness) var(--qti-border-style) var(--qti-border-color);
4101
+
4102
+ outline: none;
4103
+
4104
+ background-image: radial-gradient(
4105
+ circle at center,
4106
+ rgb(0 0 0 / 10%) 0,
4107
+ rgb(0 0 0 / 20%) 2px,
4108
+ rgb(255 255 255 / 0%) 2px,
4109
+ rgb(255 255 255 / 0%) 100%
4110
+ );
4111
+
4112
+ background-repeat: repeat-y;
4113
+
4114
+ background-position: left center;
4115
+
4116
+ background-size: 14px 8px
4117
+ }
4118
+
4119
+ &::part(qti-simple-choice) {
4120
+ display: flex;
4121
+ overflow: hidden;
4122
+ align-items: center;
4123
+ width: 100%;
4124
+ text-overflow: ellipsis;
4125
+ }
4126
+
4127
+ &::part(drops) {
4128
+ gap: 0.5rem; /* gap-2 */
4129
+ }
4130
+
4131
+ &::part(drags) {
4132
+ gap: 0.5rem; /* gap-2 */
4133
+ }
4134
+
4135
+ &::part(drop-list) {
4136
+
4137
+ &[enabled] {
4138
+
4139
+ /* Light theme override */
4140
+ .qti-selections-light & {
4141
+ border-color: var(--qti-light-border-active);
4142
+ }
4143
+
4144
+ /* Dark theme override */
4145
+ .qti-selections-dark & {
4146
+ border-color: var(--qti-dark-border-active);
4147
+ }
4148
+ background-color: var(--qti-bg-active)
4149
+ }
4150
+
4151
+ &:hover {
4152
+ background-color: var(--qti-hover-bg);
4153
+ }
4154
+
4155
+ &:focus {
4156
+ box-shadow: 0 0 0 var(--qti-focus-border-width) var(--qti-focus-color);
4157
+ }
4158
+
4159
+ display: flex;
4160
+ min-height: 4rem;
4161
+ background: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><circle cx="10" cy="10" r="7" stroke="%23CCCCCC" stroke-width="1" fill="transparent" /></svg>')
4162
+ center no-repeat;
4163
+ border-radius: var(--qti-border-radius);
4164
+ position: relative;
4165
+ background-color: var(--qti-bg);
4166
+ border: var(--qti-border-thickness) var(--qti-border-style) var(--qti-border-color);
4167
+ outline: none;
4168
+ }
4169
+
4170
+ &::part(active) {
4171
+ border-color: var(--qti-border-active);
4172
+ background-color: var(--qti-bg-active);
4173
+ }
4174
+
4175
+ & drop-list {
4176
+ &[shape='circle'] {
4177
+
4178
+ &:hover {
4179
+ background-color: var(--qti-hover-bg);
4180
+ }
4181
+
4182
+ &:focus {
4183
+ box-shadow: 0 0 0 var(--qti-focus-border-width) var(--qti-focus-color);
4184
+ }
4185
+
4186
+ &[aria-checked='true'] {
4187
+ border-color: var(--qti-border-active);
4188
+ background-color: var(--qti-bg-active);
4189
+ }
4190
+
4191
+ &[aria-readonly='true'] {
4192
+ cursor: pointer;
4193
+ background-color: var(--qti-bg);
4194
+ outline: 0;
4195
+ border: none;
4196
+ }
4197
+
4198
+ &[aria-disabled='true'] {
4199
+ cursor: not-allowed;
4200
+ background-color: var(--qti-disabled-bg);
4201
+ color: var(--qti-disabled-color);
4202
+ border-color: var(--qti-border-color);
4203
+ outline: 4px solid var(--qti-disabled-bg);
4204
+ }
4205
+
4206
+ width: 100%;
4207
+
4208
+ height: 100%;
4209
+
4210
+ background-color: transparent;
4211
+
4212
+ padding: 0;
4213
+
4214
+ border: var(--qti-border-thickness) var(--qti-border-style) var(--qti-border-color);
4215
+
4216
+ outline: none
4217
+ }
4218
+
4219
+ &[shape='square'] {
4220
+
4221
+ &:hover {
4222
+ background-color: var(--qti-hover-bg);
4223
+ }
4224
+
4225
+ &:focus {
4226
+ box-shadow: 0 0 0 var(--qti-focus-border-width) var(--qti-focus-color);
4227
+ }
4228
+
4229
+ &[aria-checked='true'] {
4230
+ border-color: var(--qti-border-active);
4231
+ background-color: var(--qti-bg-active);
4232
+ }
4233
+
4234
+ &[aria-readonly='true'] {
4235
+ cursor: pointer;
4236
+ background-color: var(--qti-bg);
4237
+ outline: 0;
4238
+ border: none;
4239
+ }
4240
+
4241
+ &[aria-disabled='true'] {
4242
+ cursor: not-allowed;
4243
+ background-color: var(--qti-disabled-bg);
4244
+ color: var(--qti-disabled-color);
4245
+ border-color: var(--qti-border-color);
4246
+ outline: 4px solid var(--qti-disabled-bg);
4247
+ }
4248
+
4249
+ width: 100%;
4250
+
4251
+ height: 100%;
4252
+
4253
+ background-color: transparent;
4254
+
4255
+ padding: 0;
4256
+
4257
+ border: var(--qti-border-thickness) var(--qti-border-style) var(--qti-border-color);
4258
+
4259
+ outline: none
4260
+ }
4261
+ }
4262
+ }
4263
+
4264
+ qti-associate-interaction {
4265
+ & qti-simple-associable-choice, /* drags when in lightdom */
4266
+ &::part(qti-simple-associable-choice) /* drags when in shadowdom */ {
4267
+
4268
+ &:hover {
4269
+ background-color: var(--qti-hover-bg);
4270
+ }
4271
+
4272
+ &:focus {
4273
+ box-shadow: 0 0 0 var(--qti-focus-border-width) var(--qti-focus-color);
4274
+ }
4275
+
4276
+ &[dragging] {
4277
+ pointer-events: none;
4278
+ rotate: -2deg;
4279
+ box-shadow: 0 8px 12px rgb(0 0 0 / 20%),
4280
+ 0 4px 8px rgb(0 0 0 / 10%);
4281
+ }
4282
+
4283
+ transition: transform 200ms ease-out,
4284
+ box-shadow 200ms ease-out,
4285
+ rotate 200ms ease-out;
4286
+
4287
+ cursor: grab;
4288
+
4289
+ background-color: var(--qti-bg);
4290
+
4291
+ padding: var(--qti-padding-vertical) var(--qti-padding-horizontal);
4292
+
4293
+ border-radius: var(--qti-border-radius);
4294
+
4295
+ padding-left: calc(var(--qti-padding-horizontal) + 0.5rem);
4296
+
4297
+ border: var(--qti-border-thickness) var(--qti-border-style) var(--qti-border-color);
4298
+
4299
+ outline: none;
4300
+
4301
+ background-image: radial-gradient(
4302
+ circle at center,
4303
+ rgb(0 0 0 / 10%) 0,
4304
+ rgb(0 0 0 / 20%) 2px,
4305
+ rgb(255 255 255 / 0%) 2px,
4306
+ rgb(255 255 255 / 0%) 100%
4307
+ );
4308
+
4309
+ background-repeat: repeat-y;
4310
+
4311
+ background-position: left center;
4312
+
4313
+ background-size: 14px 8px
4314
+ }
4315
+
4316
+ /* display: flex;
4317
+ overflow: hidden;
4318
+ align-items: center; */
4319
+
4320
+ /* &::part(drop-container) {
4321
+ display: flex;
4322
+ flex-direction: column;
4323
+ gap: var(--qti-gap-size);
4324
+ } */
4325
+
4326
+ &::part(drop-list) {
4327
+
4328
+ display: grid;
4329
+ height: 3rem;
4330
+ min-width: 10rem;
4331
+ background: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><circle cx="10" cy="10" r="7" stroke="%23CCCCCC" stroke-width="1" fill="transparent" /></svg>')
4332
+ center no-repeat;
4333
+ border-radius: var(--qti-border-radius);
4334
+ position: relative;
4335
+ background-color: var(--qti-bg);
4336
+ border: var(--qti-border-thickness) var(--qti-border-style) var(--qti-border-color);
4337
+ outline: none;
4338
+ }
4339
+
4340
+ &::part(drop-list):focus {
4341
+ box-shadow: 0 0 0 var(--qti-focus-border-width) var(--qti-focus-color);
4342
+ }
4343
+
4344
+ &::part(drop-list)[dragging] {
4345
+ border-color: var(--qti-border-active);
4346
+ background-color: var(--qti-bg-active);
4347
+ }
4348
+
4349
+ /* &::part(drop-list) {
4350
+ @apply act;
4351
+ } */
4352
+ }
4353
+
4354
+ qti-graphic-order-interaction {
4355
+ & qti-hotspot-choice {
4356
+
4357
+ &:hover {
4358
+ background-color: var(--qti-hover-bg);
4359
+ }
4360
+
4361
+ &:focus {
4362
+ box-shadow: 0 0 0 var(--qti-focus-border-width) var(--qti-focus-color);
4363
+ }
4364
+
4365
+ &:state(--checked),
4366
+ &[aria-checked='true'] {
4367
+ border-color: var(--qti-border-active);
4368
+ background-color: var(--qti-bg-active);
4369
+ }
4370
+
4371
+ &[aria-readonly='true'] {
4372
+ cursor: pointer;
4373
+ background-color: var(--qti-bg);
4374
+ outline: 0;
4375
+ border: none;
4376
+ }
4377
+
4378
+ &[aria-disabled='true'] {
4379
+ cursor: not-allowed;
4380
+ background-color: var(--qti-disabled-bg);
4381
+ color: var(--qti-disabled-color);
4382
+ border-color: var(--qti-border-color);
4383
+ outline: 4px solid var(--qti-disabled-bg);
4384
+ }
4385
+
4386
+ &[aria-ordervalue] {
4387
+ display: grid;
4388
+ place-content: center;
4389
+ }
4390
+
4391
+ &[aria-ordervalue]::after {
4392
+ content: attr(aria-ordervalue) !important;
4393
+ }
4394
+
4395
+ width: 100%;
4396
+
4397
+ height: 100%;
4398
+
4399
+ background-color: transparent;
4400
+
4401
+ padding: 0;
4402
+
4403
+ border: var(--qti-border-thickness) var(--qti-border-style) var(--qti-border-color);
4404
+
4405
+ outline: none
4406
+ }
4407
+
4408
+ &.qti-selections-light {
4409
+ &:state(--dragzone-active)::part(drags) {
4410
+ background-color: var(--qti-light-bg-active);
4411
+ border-color: var(--qti-light-border-active);
4412
+ }
4413
+
4414
+ &:state(--dragzone-enabled)::part(drags) {
4415
+ background-color: var(--qti-light-bg-active);
4416
+ }
4417
+ }
4418
+
4419
+ &.qti-selections-dark {
4420
+ &:state(--dragzone-active)::part(drags) {
4421
+ background-color: var(--qti-dark-bg-active);
4422
+ border-color: var(--qti-dark-border-active);
4423
+ }
4424
+
4425
+ &:state(--dragzone-enabled)::part(drags) {
4426
+ background-color: var(--qti-dark-bg-active);
4427
+ }
4428
+ }
4429
+
4430
+ /* General styles for active and enabled states */
4431
+ &:state(--dragzone-active)::part(drags) {
4432
+ border-color: var(--qti-border-active);
4433
+ background-color: var(--qti-bg-active);
4434
+ }
4435
+
4436
+ &:state(--dragzone-enabled)::part(drags) {
4437
+ background-color: var(--qti-bg-active);
4438
+ }
4439
+ }
4440
+
4441
+ qti-graphic-associate-interaction {
4442
+ position: relative;
4443
+ display: block;
4444
+
4445
+ & qti-associable-hotspot {
4446
+ &[shape='circle'] {
4447
+
4448
+ &:hover {
4449
+ background-color: var(--qti-hover-bg);
4450
+ }
4451
+
4452
+ &:focus {
4453
+ box-shadow: 0 0 0 var(--qti-focus-border-width) var(--qti-focus-color);
4454
+ }
4455
+
4456
+ &[aria-checked='true'] {
4457
+ border-color: var(--qti-border-active);
4458
+ background-color: var(--qti-bg-active);
4459
+ }
4460
+
4461
+ &[aria-readonly='true'] {
4462
+ cursor: pointer;
4463
+ background-color: var(--qti-bg);
4464
+ outline: 0;
4465
+ border: none;
4466
+ }
4467
+
4468
+ &[aria-disabled='true'] {
4469
+ cursor: not-allowed;
4470
+ background-color: var(--qti-disabled-bg);
4471
+ color: var(--qti-disabled-color);
4472
+ border-color: var(--qti-border-color);
4473
+ outline: 4px solid var(--qti-disabled-bg);
4474
+ }
4475
+
4476
+ width: 100%;
4477
+
4478
+ height: 100%;
4479
+
4480
+ background-color: transparent;
4481
+
4482
+ padding: 0;
4483
+
4484
+ border: var(--qti-border-thickness) var(--qti-border-style) var(--qti-border-color);
4485
+
4486
+ outline: none
4487
+ }
4488
+
4489
+ &[shape='square'] {
4490
+
4491
+ &:hover {
4492
+ background-color: var(--qti-hover-bg);
4493
+ }
4494
+
4495
+ &:focus {
4496
+ box-shadow: 0 0 0 var(--qti-focus-border-width) var(--qti-focus-color);
4497
+ }
4498
+
4499
+ &[aria-checked='true'] {
4500
+ border-color: var(--qti-border-active);
4501
+ background-color: var(--qti-bg-active);
4502
+ }
4503
+
4504
+ &[aria-readonly='true'] {
4505
+ cursor: pointer;
4506
+ background-color: var(--qti-bg);
4507
+ outline: 0;
4508
+ border: none;
4509
+ }
4510
+
4511
+ &[aria-disabled='true'] {
4512
+ cursor: not-allowed;
4513
+ background-color: var(--qti-disabled-bg);
4514
+ color: var(--qti-disabled-color);
4515
+ border-color: var(--qti-border-color);
4516
+ outline: 4px solid var(--qti-disabled-bg);
4517
+ }
4518
+
4519
+ width: 100%;
4520
+
4521
+ height: 100%;
4522
+
4523
+ background-color: transparent;
4524
+
4525
+ padding: 0;
4526
+
4527
+ border: var(--qti-border-thickness) var(--qti-border-style) var(--qti-border-color);
4528
+
4529
+ outline: none
4530
+ }
4531
+ }
4532
+
4533
+ &.qti-selections-light {
4534
+ &:state(--dragzone-active)::part(drags) {
4535
+ background-color: var(--qti-light-bg-active);
4536
+ border-color: var(--qti-light-border-active);
4537
+ }
4538
+
4539
+ &:state(--dragzone-enabled)::part(drags) {
4540
+ background-color: var(--qti-light-bg-active);
4541
+ }
4542
+ }
4543
+
4544
+ &.qti-selections-dark {
4545
+ &:state(--dragzone-active)::part(drags) {
4546
+ background-color: var(--qti-dark-bg-active);
4547
+ border-color: var(--qti-dark-border-active);
4548
+ }
4549
+
4550
+ &:state(--dragzone-enabled)::part(drags) {
4551
+ background-color: var(--qti-dark-bg-active);
4552
+ }
4553
+ }
4554
+
4555
+ /* General styles for active and enabled states */
4556
+ &:state(--dragzone-active)::part(drags) {
4557
+ border-color: var(--qti-border-active);
4558
+ background-color: var(--qti-bg-active);
4559
+ }
4560
+
4561
+ &:state(--dragzone-enabled)::part(drags) {
4562
+ background-color: var(--qti-bg-active);
4563
+ }
4564
+ }
4565
+
4566
+ qti-slider-interaction {
4567
+ display: block;
4568
+
4569
+ --qti-tick-color: rgb(229 231 235 / 100%);
4570
+ --qti-tick-width: 1px;
4571
+
4572
+ &::part(slider) {
4573
+ margin-left: 2rem; /* mx-8 */
4574
+ margin-right: 2rem;
4575
+ padding-bottom: 1rem; /* pb-4 */
4576
+ padding-top: 1.25rem; /* pt-5 */
4577
+ }
4578
+
4579
+ --show-bounds: true;
4580
+
4581
+ &::part(bounds) {
4582
+ display: flex;
4583
+ width: 100%;
4584
+ justify-content: space-between;
4585
+ margin-bottom: 0.5rem; /* mb-2 */
4586
+ }
4587
+
4588
+ --show-ticks: true;
4589
+
4590
+ &::part(ticks) {
4591
+ margin-left: 0.125rem; /* mx-0.5 */
4592
+ margin-right: 0.125rem;
4593
+ margin-bottom: 0.25rem; /* mb-1 */
4594
+ height: 0.5rem; /* h-2 */
4595
+ background: linear-gradient(to right, var(--qti-tick-color) var(--qti-tick-width), transparent 1px) repeat-x 0
4596
+ center / calc(calc(100% - var(--qti-tick-width)) / ((var(--max) - var(--min)) / var(--step))) 100%;
4597
+ }
4598
+
4599
+ &::part(rail) {
4600
+ display: flex;
4601
+ align-items: center;
4602
+ box-sizing: border-box;
4603
+ height: 0.375rem; /* h-1.5 */
4604
+ width: 100%;
4605
+ cursor: pointer;
4606
+ border-radius: 9999px; /* rounded-full */
4607
+ border: 1px solid #d1d5db; /* border-gray-300 */
4608
+ background-color: #e5e7eb; /* bg-gray-200 */
4609
+ }
4610
+
4611
+ &::part(knob) {
4612
+ background-color: var(--qti-primary);
4613
+ position: relative;
4614
+ height: 1rem; /* h-4 */
4615
+ width: 1rem; /* w-4 */
4616
+ transform-origin: center;
4617
+ transform: translateX(-50%);
4618
+ cursor: pointer;
4619
+ border-radius: 9999px; /* rounded-full */
4620
+ left: var(--value-percentage);
4621
+ }
4622
+
4623
+ --show-value: true;
4624
+
4625
+ &::part(value) {
4626
+ position: absolute;
4627
+ bottom: 2rem; /* bottom-8 */
4628
+ left: 0.5rem; /* left-2 */
4629
+ transform: translateX(-50%);
4630
+ cursor: pointer;
4631
+ border-radius: 0.25rem; /* rounded */
4632
+ background-color: #f3f4f6; /* bg-gray-100 */
4633
+ padding: 0.25rem 0.5rem; /* px-2 py-1 */
4634
+ text-align: center;
4635
+ color: #6b7280; /* text-gray-500 */
4636
+ }
4637
+ }
4638
+
4639
+ qti-select-point-interaction {
4640
+ &::part(point) {
4641
+ &:hover {
4642
+ background-color: var(--qti-hover-bg);
4643
+ }
4644
+
4645
+ &:focus {
4646
+ box-shadow: 0 0 0 var(--qti-focus-border-width) var(--qti-focus-color);
4647
+ }
4648
+
4649
+ border-radius: 100%;
4650
+
4651
+ width: var(--qti-point-size);
4652
+
4653
+ height: var(--qti-point-size);
4654
+
4655
+ background-color: transparent;
4656
+
4657
+ padding: 0;
4658
+
4659
+ border: var(--qti-border-thickness) var(--qti-border-style) var(--qti-border-color);
4660
+
4661
+ outline: none;
4662
+ }
4663
+ }
4664
+
4665
+ qti-position-object-stage {
4666
+ & qti-position-object-interaction {
4667
+ /* no styles necessary, only layout styles, defined in the component */
4668
+ }
4669
+ }
4670
+
4671
+ qti-prompt {
4672
+ margin: 0.5rem 0; /* my-2 */
4673
+ display: block;
4674
+ width: 100%;
4675
+ }
4676
+ }
4677
+ `;
4678
+
4679
+ // src/lib/qti-test/components/test-container.ts
4680
+ var TestContainer = class extends import_lit13.LitElement {
4681
+ constructor() {
4682
+ super(...arguments);
4683
+ this.testURL = "";
4684
+ }
4685
+ /**
4686
+ * Lifecycle callback invoked when the element is added to the DOM.
4687
+ * Handles template preloading and dispatches a `qti-load-test-request` event
4688
+ * if no template is found.
4689
+ */
4690
+ async connectedCallback() {
4691
+ super.connectedCallback();
4692
+ const template = this.querySelector("template");
4693
+ if (template) {
4694
+ this.preContent = template.content;
4695
+ } else {
4696
+ this.preContent = import_lit13.html``;
4697
+ const sheet = new CSSStyleSheet();
4698
+ sheet.replaceSync(item_default);
4699
+ this.shadowRoot.adoptedStyleSheets = [sheet];
4700
+ await this.updateComplete;
4701
+ const event = new CustomEvent("qti-load-test-request", {
4702
+ bubbles: true,
4703
+ composed: true,
4704
+ detail: {
4705
+ promise: null,
4706
+ testURL: this.testURL
4707
+ }
4708
+ });
4709
+ const preventDefault = this.dispatchEvent(event);
4710
+ if (!preventDefault) {
4711
+ console.warn("No qti-load-test-request listener found");
4712
+ this.preContent = import_lit13.html`<span>qti-load-test-request was not catched</span>`;
4713
+ } else {
4714
+ this.content = (async () => {
4715
+ return await event.detail.promise;
4716
+ })();
4717
+ }
4718
+ }
4719
+ }
4720
+ /**
4721
+ * Renders the component content.
4722
+ * Preloaded template content is rendered first, followed by the default slot
4723
+ * and dynamically loaded content.
4724
+ */
4725
+ render() {
4726
+ return import_lit13.html`
4727
+ ${this.preContent}
4728
+ <slot></slot>
4729
+ ${(0, import_until.until)(this.content, import_lit13.html`<span>Loading...</span>`)}
4730
+ `;
4731
+ }
4732
+ };
4733
+ __decorateClass([
4734
+ (0, import_decorators14.state)()
4735
+ ], TestContainer.prototype, "content", 2);
4736
+ __decorateClass([
4737
+ (0, import_decorators14.property)({ type: String, attribute: "test-url" })
4738
+ ], TestContainer.prototype, "testURL", 2);
4739
+ TestContainer = __decorateClass([
4740
+ (0, import_decorators14.customElement)("test-container")
4741
+ ], TestContainer);
4742
+
4743
+ // src/lib/qti-test/components/test-paging-buttons-stamp.ts
4744
+ var import_lit14 = require("lit");
4745
+ var import_decorators15 = require("lit/decorators.js");
4746
+ var import_stampino = require("stampino");
4747
+ var TestPagingButtonsStamp = class extends TestComponent {
4748
+ constructor() {
4749
+ super();
4750
+ this.maxDisplayedItems = 2;
4751
+ this.skipOnCategory = "dep-informational";
4752
+ this._internals.ariaLabel = "pagination";
4753
+ }
4754
+ createRenderRoot() {
4755
+ return this;
4756
+ }
4757
+ render() {
4758
+ const items = this._testContext.items.reduce(
4759
+ (acc, item) => {
4760
+ const isDepInfoItem = item.category?.split(" ").includes(this.skipOnCategory);
4761
+ const newIndex = isDepInfoItem ? "i" : acc.counter++;
4762
+ acc.result.push({
4763
+ ...item,
4764
+ newIndex
4765
+ // Assign the new index, which only increments for non-info items
4766
+ });
4767
+ return acc;
4768
+ },
4769
+ { counter: 0, result: [] }
4770
+ ).result;
4771
+ const itemIndex = items.findIndex((item) => item.identifier === this._testContext.navItemId);
4772
+ const start = Math.max(0, itemIndex - this.maxDisplayedItems);
4773
+ const end = Math.min(items.length, itemIndex + this.maxDisplayedItems + 1);
4774
+ const clampedItems = items.slice(start, end);
4775
+ return import_lit14.html`
4776
+ ${clampedItems.map((item) => {
4777
+ const rawscore = item.variables.find((vr) => vr.identifier == "SCORE");
4778
+ const score = parseInt(rawscore?.value?.toString());
4779
+ const completionStatus = item.variables.find((v) => v.identifier === "completionStatus")?.value;
4780
+ const type = item.category !== this.skipOnCategory ? "regular" : "info";
4781
+ const active = this._testContext.navItemId === item.identifier;
4782
+ const correct = this._testContext.view === "scorer" && type == "regular" && score !== void 0 && !isNaN(score) && score > 0;
4783
+ const incorrect = this._testContext.view === "scorer" && type == "regular" && score !== void 0 && !isNaN(score) && score <= 0;
4784
+ const answered = this._testContext.view === "candidate" && completionStatus === "completed" && item.category !== this.skipOnCategory;
4785
+ const computedItem = {
4786
+ ...item,
4787
+ type,
4788
+ active,
4789
+ correct,
4790
+ incorrect,
4791
+ answered
4792
+ };
4793
+ const templateElement = this.firstElementChild;
4794
+ const myTemplate = (0, import_stampino.prepareTemplate)(templateElement);
4795
+ return myTemplate({ item: computedItem });
4796
+ })}
4797
+ `;
4798
+ }
4799
+ };
4800
+ __decorateClass([
4801
+ (0, import_decorators15.property)({ type: Number, attribute: "max-displayed-items" })
4802
+ ], TestPagingButtonsStamp.prototype, "maxDisplayedItems", 2);
4803
+ __decorateClass([
4804
+ (0, import_decorators15.property)({ type: String, attribute: "skip-on-category" })
4805
+ ], TestPagingButtonsStamp.prototype, "skipOnCategory", 2);
4806
+ TestPagingButtonsStamp = __decorateClass([
4807
+ (0, import_decorators15.customElement)("test-paging-buttons-stamp")
4808
+ ], TestPagingButtonsStamp);
4809
+ // Annotate the CommonJS export names for ESM import in node:
4810
+ 0 && (module.exports = {
4811
+ QtiAssessmentItemRef,
4812
+ QtiAssessmentSection,
4813
+ QtiAssessmentTest,
4814
+ QtiTest,
4815
+ QtiTestPart,
4816
+ TestContainer,
4817
+ TestItemLink,
4818
+ TestNext,
4819
+ TestPagingButtonsStamp,
4820
+ TestPrev,
4821
+ TestView
4822
+ });
4823
+ //# sourceMappingURL=index.cjs.map