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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (246) hide show
  1. package/cdn/{chunks/chunk-M6BOWL2U.js → chunk-7BKWTY4S.js} +1 -1
  2. package/cdn/{chunks/chunk-PXH5KN5O.js → chunk-7CQ4ETXL.js} +1 -1
  3. package/cdn/{chunks/chunk-5O3Z7TDV.js → chunk-7ENNZNJ4.js} +1 -1
  4. package/cdn/{chunks/chunk-JLNHEMQG.js → chunk-7LGM2TQA.js} +1 -1
  5. package/cdn/{chunks/chunk-4UJBK6JO.js → chunk-DLMFCDQX.js} +1 -1
  6. package/cdn/{chunks/chunk-P5IE36FO.js → chunk-EQGXFSYL.js} +1 -1
  7. package/cdn/{chunks/chunk-VYANBI35.js → chunk-F5VW77RE.js} +1 -1
  8. package/cdn/{chunks/chunk-RBEI6NIF.js → chunk-FNVXN5CO.js} +1 -1
  9. package/cdn/{chunks/chunk-65LFT33L.js → chunk-GBB54IPA.js} +1 -1
  10. package/cdn/{chunks/chunk-G5O7EN45.js → chunk-IV7UP34N.js} +1 -1
  11. package/cdn/{chunks/chunk-SMKIYFFI.js → chunk-JS4S7ZI7.js} +1 -1
  12. package/cdn/{chunks/chunk-M3YRM3AV.js → chunk-POT65ZY7.js} +1 -1
  13. package/cdn/{chunks/chunk-V6B54FQW.js → chunk-Q7PVZA43.js} +1 -1
  14. package/cdn/chunk-QJPHXAUE.js +1 -0
  15. package/cdn/{chunks/chunk-T3YDLD2H.js → chunk-QP57JHGY.js} +1 -1
  16. package/cdn/{chunks/chunk-CSUKVUZF.js → chunk-RB6CONZW.js} +1 -1
  17. package/cdn/chunk-RSRX5JYB.js +1 -0
  18. package/cdn/{chunks/chunk-LPWIM7QJ.js → chunk-W7X6GNEX.js} +1 -1
  19. package/cdn/{chunks/chunk-6D25UFJR.js → chunk-ZEX7TYC7.js} +1 -1
  20. package/cdn/index.js +1 -4503
  21. package/cdn/qti-components/index.js +1 -924
  22. package/cdn/qti-item/components/index.js +1 -3549
  23. package/cdn/qti-item/components/item-container.js +1 -3549
  24. package/cdn/qti-item/index.js +1 -3549
  25. package/cdn/qti-item/qti-item.js +1 -1
  26. package/cdn/qti-loader/index.js +1 -23
  27. package/cdn/qti-test/components/index.js +1 -3598
  28. package/cdn/qti-test/components/styles.js +1 -17
  29. package/cdn/qti-test/components/test-component.abstract.js +1 -1
  30. package/cdn/qti-test/components/test-container.js +1 -3549
  31. package/cdn/qti-test/components/test-item-link.js +1 -24
  32. package/cdn/qti-test/components/test-next.js +1 -24
  33. package/cdn/qti-test/components/test-next.spec.js +247 -4749
  34. package/cdn/qti-test/components/test-paging-buttons-stamp.js +1 -3
  35. package/cdn/qti-test/components/test-prev.js +1 -24
  36. package/cdn/qti-test/components/test-view.js +1 -11
  37. package/cdn/qti-test/context/index.js +1 -1
  38. package/cdn/qti-test/context/test.context.js +1 -1
  39. package/cdn/qti-test/index.js +1 -3598
  40. package/cdn/qti-test/mixins/index.js +1 -23
  41. package/cdn/qti-test/mixins/test-loader.mixin.js +1 -23
  42. package/cdn/qti-test/mixins/test-navigation.mixin.js +1 -1
  43. package/cdn/qti-test/mixins/test-view.mixin.js +1 -1
  44. package/cdn/qti-test/qti-assessment-test/index.js +1 -1
  45. package/cdn/qti-test/qti-assessment-test/qti-assessment-item-ref.js +1 -1
  46. package/cdn/qti-test/qti-assessment-test/qti-assessment-section.js +1 -1
  47. package/cdn/qti-test/qti-assessment-test/qti-assessment-test.js +1 -1
  48. package/cdn/qti-test/qti-assessment-test/qti-test-part.js +1 -1
  49. package/cdn/qti-test/qti-test.js +1 -23
  50. package/cdn/qti-test/test-base.js +1 -1
  51. package/cdn/qti-transformers/index.js +1 -23
  52. package/dist/{chunks/chunk-XDMSEAYC.js → chunk-2OA7E3E7.js} +1 -1
  53. package/dist/chunk-2OA7E3E7.js.map +1 -0
  54. package/dist/chunk-37X6KZO3.js +1 -0
  55. package/dist/{chunks/chunk-Y6UWSECL.js → chunk-3WLCQQN7.js} +1 -1
  56. package/dist/chunk-3YVIK6LO.js +1 -0
  57. package/dist/{chunks/chunk-6YE2KJ4C.js → chunk-44VE5POH.js} +1 -1
  58. package/dist/{chunks/chunk-D3RGDWKP.js → chunk-4CSM2PCC.js} +1 -1
  59. package/dist/chunk-4CSM2PCC.js.map +1 -0
  60. package/dist/{chunks/chunk-ELDMXTUQ.js → chunk-4YG2FPKK.js} +1 -1
  61. package/dist/chunk-4YG2FPKK.js.map +1 -0
  62. package/dist/{chunks/chunk-3G2DDBJW.js → chunk-7A6KCSAU.js} +3 -3
  63. package/dist/chunk-7A6KCSAU.js.map +1 -0
  64. package/dist/{chunks/chunk-LKINC6JO.js → chunk-ENVUIH2A.js} +4 -4
  65. package/dist/chunk-ENVUIH2A.js.map +1 -0
  66. package/dist/{chunks/chunk-JSPJGWGT.js → chunk-ENZVY5X6.js} +2 -2
  67. package/dist/chunk-ENZVY5X6.js.map +1 -0
  68. package/dist/{chunks/chunk-3OXGDCSU.js → chunk-EUCEENQQ.js} +5 -5
  69. package/dist/chunk-EUCEENQQ.js.map +1 -0
  70. package/dist/{chunks/chunk-AAQCM2FP.js → chunk-FNFNAV3G.js} +2 -2
  71. package/dist/chunk-FNFNAV3G.js.map +1 -0
  72. package/dist/chunk-GSFDTSLL.js +1 -0
  73. package/dist/{chunks/chunk-3ROZMGAN.js → chunk-GTYLWGDG.js} +4 -4
  74. package/dist/chunk-GTYLWGDG.js.map +1 -0
  75. package/dist/{chunks/chunk-XPDS72XY.js → chunk-IAFQ5ZPI.js} +2 -2
  76. package/dist/chunk-IAFQ5ZPI.js.map +1 -0
  77. package/dist/{chunks/chunk-ZEFOMZNY.js → chunk-JDHBXMKF.js} +3 -3
  78. package/dist/chunk-JDHBXMKF.js.map +1 -0
  79. package/dist/{chunks/chunk-PUBGXXTM.js → chunk-L7MBIXEX.js} +4 -4
  80. package/dist/chunk-L7MBIXEX.js.map +1 -0
  81. package/dist/chunk-LYFMLDNV.js +1 -0
  82. package/dist/chunk-NNPTSZGC.js +1 -0
  83. package/dist/chunk-NQM35JUI.js +1 -0
  84. package/dist/{chunks/chunk-NDJZGJUR.js → chunk-ODUHPWTX.js} +1 -1
  85. package/dist/chunk-ODUHPWTX.js.map +1 -0
  86. package/dist/{chunks/chunk-DJLE6EV2.js → chunk-OGHHCP23.js} +6 -6
  87. package/dist/chunk-OGHHCP23.js.map +1 -0
  88. package/dist/{chunks/chunk-QRCUNRP5.js → chunk-OQZW2B47.js} +3 -3
  89. package/dist/chunk-OQZW2B47.js.map +1 -0
  90. package/dist/{chunks/chunk-MTMT2RMF.js → chunk-OXDOQVRL.js} +3 -3
  91. package/dist/chunk-OXDOQVRL.js.map +1 -0
  92. package/dist/{chunks/chunk-V4FXK4TP.js → chunk-PBSMP6VF.js} +3 -3
  93. package/dist/chunk-PBSMP6VF.js.map +1 -0
  94. package/dist/chunk-Q7OPFS4A.js +1 -0
  95. package/dist/{chunks/chunk-XDFXD3BI.js → chunk-R4HSV7U7.js} +1 -1
  96. package/dist/chunk-R4HSV7U7.js.map +1 -0
  97. package/dist/{chunks/chunk-HWA4A3SR.js → chunk-TXRSYXG3.js} +4 -4
  98. package/dist/chunk-TXRSYXG3.js.map +1 -0
  99. package/dist/{chunks/chunk-S6JJYCO7.js → chunk-U3RLYKL5.js} +1 -1
  100. package/dist/chunk-U3RLYKL5.js.map +1 -0
  101. package/dist/{chunks/chunk-4O5F7WV7.js → chunk-UB5K44DB.js} +1 -1
  102. package/dist/chunk-UB5K44DB.js.map +1 -0
  103. package/dist/{chunks/chunk-W4B23OIP.js → chunk-VODOQFTJ.js} +4 -4
  104. package/dist/chunk-VODOQFTJ.js.map +1 -0
  105. package/dist/{chunks/chunk-UCQFSRYF.js → chunk-VW7VIQBE.js} +2 -2
  106. package/dist/chunk-VW7VIQBE.js.map +1 -0
  107. package/dist/{chunks/chunk-JE6BMXZU.js → chunk-X4ZBUCOD.js} +5 -5
  108. package/dist/chunk-X4ZBUCOD.js.map +1 -0
  109. package/dist/chunk-XFHB6KQW.js +1 -0
  110. package/dist/{chunks/chunk-LROTNPC2.js → chunk-XNBWN7N2.js} +5 -5
  111. package/dist/chunk-XNBWN7N2.js.map +1 -0
  112. package/dist/index.js +163 -11038
  113. package/dist/index.js.map +1 -1
  114. package/dist/qti-components/index.js +95 -6431
  115. package/dist/qti-components/index.js.map +1 -1
  116. package/dist/qti-item/components/index.js +8 -3852
  117. package/dist/qti-item/components/index.js.map +1 -1
  118. package/dist/qti-item/components/item-container.js +7 -3852
  119. package/dist/qti-item/components/item-container.js.map +1 -1
  120. package/dist/qti-item/index.js +12 -3864
  121. package/dist/qti-item/index.js.map +1 -1
  122. package/dist/qti-item/qti-item.js +4 -22
  123. package/dist/qti-item/qti-item.js.map +1 -1
  124. package/dist/qti-loader/index.js +6 -305
  125. package/dist/qti-loader/index.js.map +1 -1
  126. package/dist/qti-test/components/index.js +30 -4134
  127. package/dist/qti-test/components/index.js.map +1 -1
  128. package/dist/qti-test/components/styles.js +7 -22
  129. package/dist/qti-test/components/styles.js.map +1 -1
  130. package/dist/qti-test/components/test-component.abstract.js +8 -145
  131. package/dist/qti-test/components/test-component.abstract.js.map +1 -1
  132. package/dist/qti-test/components/test-container.js +7 -3778
  133. package/dist/qti-test/components/test-container.js.map +1 -1
  134. package/dist/qti-test/components/test-item-link.js +10 -198
  135. package/dist/qti-test/components/test-item-link.js.map +1 -1
  136. package/dist/qti-test/components/test-next.js +10 -205
  137. package/dist/qti-test/components/test-next.js.map +1 -1
  138. package/dist/qti-test/components/test-next.spec.js +160 -11152
  139. package/dist/qti-test/components/test-next.spec.js.map +1 -1
  140. package/dist/qti-test/components/test-paging-buttons-stamp.js +9 -214
  141. package/dist/qti-test/components/test-paging-buttons-stamp.js.map +1 -1
  142. package/dist/qti-test/components/test-prev.js +10 -205
  143. package/dist/qti-test/components/test-prev.js.map +1 -1
  144. package/dist/qti-test/components/test-view.js +9 -205
  145. package/dist/qti-test/components/test-view.js.map +1 -1
  146. package/dist/qti-test/context/index.js +6 -4
  147. package/dist/qti-test/context/index.js.map +1 -1
  148. package/dist/qti-test/context/test.context.js +5 -4
  149. package/dist/qti-test/context/test.context.js.map +1 -1
  150. package/dist/qti-test/index.js +55 -4729
  151. package/dist/qti-test/index.js.map +1 -1
  152. package/dist/qti-test/mixins/index.js +12 -344
  153. package/dist/qti-test/mixins/index.js.map +1 -1
  154. package/dist/qti-test/mixins/test-loader.mixin.js +5 -236
  155. package/dist/qti-test/mixins/test-loader.mixin.js.map +1 -1
  156. package/dist/qti-test/mixins/test-navigation.mixin.js +4 -60
  157. package/dist/qti-test/mixins/test-navigation.mixin.js.map +1 -1
  158. package/dist/qti-test/mixins/test-view.mixin.js +4 -46
  159. package/dist/qti-test/mixins/test-view.mixin.js.map +1 -1
  160. package/dist/qti-test/qti-assessment-test/index.js +16 -214
  161. package/dist/qti-test/qti-assessment-test/index.js.map +1 -1
  162. package/dist/qti-test/qti-assessment-test/qti-assessment-item-ref.js +6 -81
  163. package/dist/qti-test/qti-assessment-test/qti-assessment-item-ref.js.map +1 -1
  164. package/dist/qti-test/qti-assessment-test/qti-assessment-section.js +6 -69
  165. package/dist/qti-test/qti-assessment-test/qti-assessment-section.js.map +1 -1
  166. package/dist/qti-test/qti-assessment-test/qti-assessment-test.js +6 -50
  167. package/dist/qti-test/qti-assessment-test/qti-assessment-test.js.map +1 -1
  168. package/dist/qti-test/qti-assessment-test/qti-test-part.js +4 -58
  169. package/dist/qti-test/qti-assessment-test/qti-test-part.js.map +1 -1
  170. package/dist/qti-test/qti-test.js +12 -496
  171. package/dist/qti-test/qti-test.js.map +1 -1
  172. package/dist/qti-test/test-base.js +6 -133
  173. package/dist/qti-test/test-base.js.map +1 -1
  174. package/dist/qti-transformers/index.js +6 -287
  175. package/dist/qti-transformers/index.js.map +1 -1
  176. package/package.json +1 -2
  177. package/cdn/chunks/chunk-V6KX6BQN.js +0 -1
  178. package/cdn/index.css +0 -1
  179. package/cdn/qti-item/components/index.css +0 -1
  180. package/cdn/qti-item/components/item-container.css +0 -1
  181. package/cdn/qti-item/index.css +0 -1
  182. package/cdn/qti-test/components/index.css +0 -1
  183. package/cdn/qti-test/components/test-container.css +0 -1
  184. package/cdn/qti-test/components/test-next.spec.css +0 -1
  185. package/cdn/qti-test/index.css +0 -1
  186. package/dist/chunks/chunk-3G2DDBJW.js.map +0 -1
  187. package/dist/chunks/chunk-3NLCJYSX.js +0 -1
  188. package/dist/chunks/chunk-3OXGDCSU.js.map +0 -1
  189. package/dist/chunks/chunk-3ROZMGAN.js.map +0 -1
  190. package/dist/chunks/chunk-4O5F7WV7.js.map +0 -1
  191. package/dist/chunks/chunk-AAQCM2FP.js.map +0 -1
  192. package/dist/chunks/chunk-D3RGDWKP.js.map +0 -1
  193. package/dist/chunks/chunk-DJLE6EV2.js.map +0 -1
  194. package/dist/chunks/chunk-ELDMXTUQ.js.map +0 -1
  195. package/dist/chunks/chunk-EW5CTHAD.js +0 -1
  196. package/dist/chunks/chunk-HWA4A3SR.js.map +0 -1
  197. package/dist/chunks/chunk-IKZWK2C5.js +0 -1
  198. package/dist/chunks/chunk-IP7JSYO6.js +0 -1
  199. package/dist/chunks/chunk-JE6BMXZU.js.map +0 -1
  200. package/dist/chunks/chunk-JSPJGWGT.js.map +0 -1
  201. package/dist/chunks/chunk-LKINC6JO.js.map +0 -1
  202. package/dist/chunks/chunk-LROTNPC2.js.map +0 -1
  203. package/dist/chunks/chunk-MTMT2RMF.js.map +0 -1
  204. package/dist/chunks/chunk-NDJZGJUR.js.map +0 -1
  205. package/dist/chunks/chunk-OE2LFIH2.js +0 -1
  206. package/dist/chunks/chunk-OJ2XGDWK.js +0 -1
  207. package/dist/chunks/chunk-PUBGXXTM.js.map +0 -1
  208. package/dist/chunks/chunk-QRCUNRP5.js.map +0 -1
  209. package/dist/chunks/chunk-S6JJYCO7.js.map +0 -1
  210. package/dist/chunks/chunk-U3AALKEP.js +0 -1
  211. package/dist/chunks/chunk-UCQFSRYF.js.map +0 -1
  212. package/dist/chunks/chunk-URGVQ64M.js +0 -1
  213. package/dist/chunks/chunk-V4FXK4TP.js.map +0 -1
  214. package/dist/chunks/chunk-W4B23OIP.js.map +0 -1
  215. package/dist/chunks/chunk-XDFXD3BI.js.map +0 -1
  216. package/dist/chunks/chunk-XDMSEAYC.js.map +0 -1
  217. package/dist/chunks/chunk-XPDS72XY.js.map +0 -1
  218. package/dist/chunks/chunk-ZEFOMZNY.js.map +0 -1
  219. package/dist/index-Cvrd4KQA.d.ts +0 -109
  220. /package/cdn/{chunks/chunk-XUJ7TXHW.js → chunk-25BMUTLC.js} +0 -0
  221. /package/cdn/{chunks/chunk-6UGPNL7M.js → chunk-3DWLPGTE.js} +0 -0
  222. /package/cdn/{chunks/chunk-6DMSHH5X.js → chunk-CYJMNT76.js} +0 -0
  223. /package/cdn/{chunks/chunk-T6IXJ4W4.js → chunk-DPR6SGCZ.js} +0 -0
  224. /package/cdn/{chunks/chunk-DAZR7RUI.js → chunk-GB7DLBFM.js} +0 -0
  225. /package/cdn/{chunks/chunk-EHK76KRT.js → chunk-GPDDPZFH.js} +0 -0
  226. /package/cdn/{chunks/chunk-EOPEMJS3.js → chunk-H4A34YRT.js} +0 -0
  227. /package/cdn/{chunks/chunk-GEFUIFM7.js → chunk-ITXNNGVQ.js} +0 -0
  228. /package/cdn/{chunks/chunk-SRLMW23F.js → chunk-IZZ36JQV.js} +0 -0
  229. /package/cdn/{chunks/chunk-CSY3WI5A.js → chunk-JNT54FPI.js} +0 -0
  230. /package/cdn/{chunks/chunk-UIEC4LXR.js → chunk-L26FOTPN.js} +0 -0
  231. /package/cdn/{chunks/chunk-TFAUBGP2.js → chunk-LA7TBIPQ.js} +0 -0
  232. /package/cdn/{chunks/chunk-5FCXUJAG.js → chunk-LVW3MHTI.js} +0 -0
  233. /package/cdn/{chunks/chunk-V44O3GTW.js → chunk-TG6AE3DB.js} +0 -0
  234. /package/cdn/{chunks/chunk-ZIZLFFSG.js → chunk-V6YPUNZC.js} +0 -0
  235. /package/cdn/{chunks/chunk-T4HD2C4F.js → chunk-VI2WKTN4.js} +0 -0
  236. /package/cdn/{chunks/chunk-CFXQCNG6.js → chunk-Y63VPWCG.js} +0 -0
  237. /package/dist/{chunks/chunk-3NLCJYSX.js.map → chunk-37X6KZO3.js.map} +0 -0
  238. /package/dist/{chunks/chunk-Y6UWSECL.js.map → chunk-3WLCQQN7.js.map} +0 -0
  239. /package/dist/{chunks/chunk-6YE2KJ4C.js.map → chunk-3YVIK6LO.js.map} +0 -0
  240. /package/dist/{chunks/chunk-EW5CTHAD.js.map → chunk-44VE5POH.js.map} +0 -0
  241. /package/dist/{chunks/chunk-IKZWK2C5.js.map → chunk-GSFDTSLL.js.map} +0 -0
  242. /package/dist/{chunks/chunk-IP7JSYO6.js.map → chunk-LYFMLDNV.js.map} +0 -0
  243. /package/dist/{chunks/chunk-OE2LFIH2.js.map → chunk-NNPTSZGC.js.map} +0 -0
  244. /package/dist/{chunks/chunk-OJ2XGDWK.js.map → chunk-NQM35JUI.js.map} +0 -0
  245. /package/dist/{chunks/chunk-U3AALKEP.js.map → chunk-Q7OPFS4A.js.map} +0 -0
  246. /package/dist/{chunks/chunk-URGVQ64M.js.map → chunk-XFHB6KQW.js.map} +0 -0
@@ -1,217 +1,12 @@
1
- var __defProp = Object.defineProperty;
2
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
- var __decorateClass = (decorators, target, key, kind) => {
4
- var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
5
- for (var i = decorators.length - 1, decorator; i >= 0; i--)
6
- if (decorator = decorators[i])
7
- result = (kind ? decorator(target, key, result) : decorator(result)) || result;
8
- if (kind && result) __defProp(target, key, result);
9
- return result;
10
- };
11
-
12
- // src/lib/qti-test/components/test-paging-buttons-stamp.ts
13
- import { html } from "lit";
14
- import { customElement, property as property2 } from "lit/decorators.js";
15
-
16
- // src/lib/qti-test/components/test-component.abstract.ts
17
- import { consume } from "@lit/context";
18
- import { LitElement } from "lit";
19
- import { state } from "lit/decorators.js";
20
-
21
- // src/lib/decorators/watch.ts
22
- function watch(propertyName, options) {
23
- const resolvedOptions = {
24
- waitUntilFirstUpdate: false,
25
- ...options
26
- };
27
- return (proto, decoratedFnName) => {
28
- const { update } = proto;
29
- const watchedProperties = Array.isArray(propertyName) ? propertyName : [propertyName];
30
- proto.update = function(changedProps) {
31
- watchedProperties.forEach((property3) => {
32
- const key = property3;
33
- if (changedProps.has(key)) {
34
- const oldValue = changedProps.get(key);
35
- const newValue = this[key];
36
- if (oldValue !== newValue) {
37
- if (!resolvedOptions.waitUntilFirstUpdate || this.hasUpdated) {
38
- this[decoratedFnName](oldValue, newValue);
39
- }
40
- }
41
- }
42
- });
43
- update.call(this, changedProps);
44
- };
45
- };
46
- }
47
-
48
- // src/lib/decorators/prop-internal-state.ts
49
- import { property } from "lit/decorators.js";
50
- function propInternalState(options) {
51
- return (protoOrDescriptor, name) => {
52
- property(options)(protoOrDescriptor, name);
53
- const key = `__${name}`;
54
- Object.defineProperty(protoOrDescriptor, name, {
55
- get() {
56
- return this[key];
57
- },
58
- set(value) {
59
- const oldValue = this[key];
60
- this[key] = value;
61
- if (oldValue !== value) {
62
- if (this._internals?.states) {
63
- const stateName = name.toLowerCase();
64
- if (value) {
65
- this._internals.states.add(`--${stateName}`);
66
- } else {
67
- this._internals.states.delete(`--${stateName}`);
68
- }
69
- }
70
- if (options.aria && this._internals) {
71
- const ariaAttribute = options.aria;
72
- if (value) {
73
- this._internals[ariaAttribute] = "true";
74
- } else {
75
- this._internals[ariaAttribute] = null;
76
- }
77
- }
78
- this.requestUpdate(name, oldValue);
79
- }
80
- },
81
- configurable: true,
82
- enumerable: true
83
- });
84
- };
85
- }
86
-
87
- // src/lib/qti-test/context/test.context.ts
88
- import { createContext } from "@lit/context";
89
- var testContext = createContext(Symbol("test"));
90
- var testElement = createContext(Symbol("testElement"));
91
-
92
- // src/lib/qti-test/components/test-component.abstract.ts
93
- var TestComponent = class extends LitElement {
94
- constructor() {
95
- super();
96
- this.disabled = true;
97
- this._internals = this.attachInternals();
98
- }
99
- _handleTestElementChange(_oldValue, newValue) {
100
- if (newValue.el) {
101
- this.disabled = false;
102
- }
103
- }
104
- willUpdate(changedProperties) {
105
- if (changedProperties.has("_testContext")) {
106
- const { items = [], navItemId } = this._testContext ?? {};
107
- this.itemIndex = items.findIndex((item) => item.identifier === navItemId);
108
- this.items = items;
109
- this.view = this._testContext?.view;
110
- }
111
- }
112
- _switchView(view) {
113
- this.dispatchEvent(
114
- new CustomEvent("on-test-switch-view", {
115
- composed: true,
116
- bubbles: true,
117
- detail: view
118
- })
119
- );
120
- }
121
- _requestItem(identifier) {
122
- this.dispatchEvent(
123
- new CustomEvent("qti-request-test-item", {
124
- composed: true,
125
- bubbles: true,
126
- detail: identifier
127
- })
128
- );
129
- }
130
- };
131
- __decorateClass([
132
- propInternalState({
133
- type: Boolean,
134
- reflect: true,
135
- aria: "ariaDisabled"
136
- // Maps to `aria-disabled` attribute
137
- })
138
- ], TestComponent.prototype, "disabled", 2);
139
- __decorateClass([
140
- state(),
141
- consume({ context: testContext, subscribe: true })
142
- ], TestComponent.prototype, "_testContext", 2);
143
- __decorateClass([
144
- state(),
145
- consume({ context: testElement, subscribe: true })
146
- ], TestComponent.prototype, "_testElement", 2);
147
- __decorateClass([
148
- watch("_testElement")
149
- ], TestComponent.prototype, "_handleTestElementChange", 1);
150
-
151
- // src/lib/qti-test/components/test-paging-buttons-stamp.ts
152
- import { prepareTemplate } from "stampino";
153
- var TestPagingButtonsStamp = class extends TestComponent {
154
- constructor() {
155
- super();
156
- this.maxDisplayedItems = 2;
157
- this.skipOnCategory = "dep-informational";
158
- this._internals.ariaLabel = "pagination";
159
- }
160
- createRenderRoot() {
161
- return this;
162
- }
163
- render() {
164
- const items = this._testContext.items.reduce(
165
- (acc, item) => {
166
- const isDepInfoItem = item.category?.split(" ").includes(this.skipOnCategory);
167
- const newIndex = isDepInfoItem ? "i" : acc.counter++;
168
- acc.result.push({
169
- ...item,
170
- newIndex
171
- // Assign the new index, which only increments for non-info items
172
- });
173
- return acc;
174
- },
175
- { counter: 0, result: [] }
176
- ).result;
177
- const itemIndex = items.findIndex((item) => item.identifier === this._testContext.navItemId);
178
- const start = Math.max(0, itemIndex - this.maxDisplayedItems);
179
- const end = Math.min(items.length, itemIndex + this.maxDisplayedItems + 1);
180
- const clampedItems = items.slice(start, end);
181
- return html`
182
- ${clampedItems.map((item) => {
183
- const rawscore = item.variables.find((vr) => vr.identifier == "SCORE");
184
- const score = parseInt(rawscore?.value?.toString());
185
- const completionStatus = item.variables.find((v) => v.identifier === "completionStatus")?.value;
186
- const type = item.category !== this.skipOnCategory ? "regular" : "info";
187
- const active = this._testContext.navItemId === item.identifier;
188
- const correct = this._testContext.view === "scorer" && type == "regular" && score !== void 0 && !isNaN(score) && score > 0;
189
- const incorrect = this._testContext.view === "scorer" && type == "regular" && score !== void 0 && !isNaN(score) && score <= 0;
190
- const answered = this._testContext.view === "candidate" && completionStatus === "completed" && item.category !== this.skipOnCategory;
191
- const computedItem = {
192
- ...item,
193
- type,
194
- active,
195
- correct,
196
- incorrect,
197
- answered
198
- };
199
- const templateElement = this.firstElementChild;
200
- const myTemplate = prepareTemplate(templateElement);
201
- return myTemplate({ item: computedItem });
202
- })}
203
- `;
204
- }
205
- };
206
- __decorateClass([
207
- property2({ type: Number, attribute: "max-displayed-items" })
208
- ], TestPagingButtonsStamp.prototype, "maxDisplayedItems", 2);
209
- __decorateClass([
210
- property2({ type: String, attribute: "skip-on-category" })
211
- ], TestPagingButtonsStamp.prototype, "skipOnCategory", 2);
212
- TestPagingButtonsStamp = __decorateClass([
213
- customElement("test-paging-buttons-stamp")
214
- ], TestPagingButtonsStamp);
1
+ import {
2
+ TestPagingButtonsStamp
3
+ } from "../../chunk-JDHBXMKF.js";
4
+ import "../../chunk-ENVUIH2A.js";
5
+ import "../../chunk-4CSM2PCC.js";
6
+ import "../../chunk-4YG2FPKK.js";
7
+ import "../../chunk-XFHB6KQW.js";
8
+ import "../../chunk-R4HSV7U7.js";
9
+ import "../../chunk-44VE5POH.js";
215
10
  export {
216
11
  TestPagingButtonsStamp
217
12
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/qti-test/components/test-paging-buttons-stamp.ts","../../../src/lib/qti-test/components/test-component.abstract.ts","../../../src/lib/decorators/watch.ts","../../../src/lib/decorators/prop-internal-state.ts","../../../src/lib/qti-test/context/test.context.ts"],"sourcesContent":["import { html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\nimport { TestComponent } from './test-component.abstract';\nimport { prepareTemplate } from 'stampino';\n\n@customElement('test-paging-buttons-stamp')\nexport class TestPagingButtonsStamp extends TestComponent {\n @property({ type: Number, attribute: 'max-displayed-items' })\n private maxDisplayedItems = 2;\n\n @property({ type: String, attribute: 'skip-on-category' })\n private skipOnCategory = 'dep-informational';\n\n protected createRenderRoot() {\n return this;\n }\n\n constructor() {\n super();\n this._internals.ariaLabel = 'pagination';\n }\n\n render() {\n const items = this._testContext.items.reduce(\n (acc, item) => {\n const isDepInfoItem = item.category?.split(' ').includes(this.skipOnCategory);\n const newIndex = isDepInfoItem ? 'i' : acc.counter++;\n acc.result.push({\n ...item,\n newIndex // Assign the new index, which only increments for non-info items\n });\n return acc;\n },\n { counter: 0, result: [] }\n ).result;\n\n // Get the index of the current item\n const itemIndex = items.findIndex(item => item.identifier === this._testContext.navItemId);\n\n // Calculate the start and end range based on maxDisplayedItems\n const start = Math.max(0, itemIndex - this.maxDisplayedItems);\n const end = Math.min(items.length, itemIndex + this.maxDisplayedItems + 1);\n\n // console.log('start', start, 'end', end);\n // Adjust the items array to only include the clamped range\n const clampedItems = items.slice(start, end);\n\n return html`\n ${clampedItems.map(item => {\n const rawscore = item.variables.find(vr => vr.identifier == 'SCORE');\n const score = parseInt(rawscore?.value?.toString());\n const completionStatus = item.variables.find(v => v.identifier === 'completionStatus')?.value;\n const type = item.category !== this.skipOnCategory ? 'regular' : 'info'; // rounded-full\n const active = this._testContext.navItemId === item.identifier; // !border-sky-600\n const correct =\n this._testContext.view === 'scorer' && type == 'regular' && score !== undefined && !isNaN(score) && score > 0; // bg-green-100 border-green-400\n const incorrect =\n this._testContext.view === 'scorer' &&\n type == 'regular' &&\n score !== undefined &&\n !isNaN(score) &&\n score <= 0; // bg-red-100 border-red-400\n const answered =\n this._testContext.view === 'candidate' &&\n completionStatus === 'completed' &&\n item.category !== this.skipOnCategory; // bg-slate-300 shadow-sm\n\n const computedItem = {\n ...item,\n type,\n active,\n correct,\n incorrect,\n answered\n };\n\n const templateElement = this.firstElementChild as HTMLTemplateElement;\n const myTemplate = prepareTemplate(templateElement);\n return myTemplate({ item: computedItem });\n })}\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'test-paging-buttons-stamp': TestPagingButtonsStamp;\n }\n}\n","import { consume } from '@lit/context';\nimport { LitElement } from 'lit';\nimport { state } from 'lit/decorators.js';\nimport { propInternalState } from '../../decorators';\nimport { testContext, testElement, TestElement, TestContext } from '../context';\nimport { watch } from '../../decorators/watch';\n\nexport abstract class TestComponent extends LitElement {\n @propInternalState({\n type: Boolean,\n reflect: true,\n aria: 'ariaDisabled' // Maps to `aria-disabled` attribute\n })\n public disabled = true;\n\n @state()\n @consume({ context: testContext, subscribe: true })\n protected _testContext?: TestContext;\n\n @state()\n @consume({ context: testElement, subscribe: true })\n protected _testElement?: TestElement;\n @watch('_testElement')\n _handleTestElementChange(_oldValue: TestElement, newValue: TestElement) {\n if (newValue.el) {\n this.disabled = false;\n }\n }\n\n protected _internals: ElementInternals;\n\n protected items;\n protected itemIndex;\n protected view;\n\n constructor() {\n super();\n this._internals = this.attachInternals();\n }\n\n protected willUpdate(changedProperties: Map<string | number | symbol, unknown>) {\n if (changedProperties.has('_testContext')) {\n const { items = [], navItemId } = this._testContext ?? {};\n this.itemIndex = items.findIndex(item => item.identifier === navItemId);\n this.items = items;\n this.view = this._testContext?.view;\n }\n }\n\n protected _switchView(view: string) {\n this.dispatchEvent(\n new CustomEvent('on-test-switch-view', {\n composed: true,\n bubbles: true,\n detail: view\n })\n );\n }\n\n protected _requestItem(identifier: string): void {\n this.dispatchEvent(\n new CustomEvent('qti-request-test-item', {\n composed: true,\n bubbles: true,\n detail: identifier\n })\n );\n }\n}\n","import type { LitElement } from 'lit';\n\ntype UpdateHandler = (prev?: unknown, next?: unknown) => void;\n\ntype NonUndefined<A> = A extends undefined ? never : A;\n\nexport type UpdateHandlerFunctionKeys<T extends object> = {\n [K in keyof T]-?: NonUndefined<T[K]> extends UpdateHandler ? K : never;\n}[keyof T];\n\ninterface WatchOptions {\n /**\n * If true, will only start watching after the initial update/render\n */\n waitUntilFirstUpdate?: boolean;\n}\n\n/**\n * Runs when observed properties change, e.g. @property or @state, but before the component updates. To wait for an\n * update to complete after a change occurs, use `await this.updateComplete` in the handler. To start watching after the\n * initial update/render, use `{ waitUntilFirstUpdate: true }` or `this.hasUpdated` in the handler.\n *\n * Usage:\n *\n * @watch('propName')\n * handlePropChange(oldValue, newValue) {\n * ...\n * }\n */\nexport function watch(propertyName: string | string[], options?: WatchOptions) {\n const resolvedOptions: Required<WatchOptions> = {\n waitUntilFirstUpdate: false,\n ...options\n };\n return <ElemClass extends LitElement>(\n proto: ElemClass,\n decoratedFnName: UpdateHandlerFunctionKeys<ElemClass> | any\n ) => {\n // @ts-expect-error - update is a protected property\n const { update } = proto;\n const watchedProperties = Array.isArray(propertyName) ? propertyName : [propertyName];\n\n // @ts-expect-error - update is a protected property\n proto.update = function (this: ElemClass, changedProps: Map<keyof ElemClass, ElemClass[keyof ElemClass]>) {\n watchedProperties.forEach(property => {\n const key = property as keyof ElemClass;\n if (changedProps.has(key)) {\n const oldValue = changedProps.get(key);\n const newValue = this[key];\n\n if (oldValue !== newValue) {\n if (!resolvedOptions.waitUntilFirstUpdate || this.hasUpdated) {\n (this[decoratedFnName] as unknown as UpdateHandler)(oldValue, newValue);\n }\n }\n }\n });\n\n update.call(this, changedProps);\n };\n };\n}\n","import { ReactiveElement } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { PropertyDeclaration } from 'lit';\n\n// Extended decorator options\ninterface InternalStateOptions extends PropertyDeclaration {\n aria?: string; // Corresponding ARIA attribute, e.g., 'aria-disabled'\n}\n\nexport function propInternalState(options: InternalStateOptions) {\n return (protoOrDescriptor: any, name: string) => {\n // Apply the default Lit `@property` decorator\n property(options)(protoOrDescriptor, name);\n\n // Intercept the property descriptor to enhance functionality\n const key = `__${name}`; // Internal backing field\n\n Object.defineProperty(protoOrDescriptor, name, {\n get() {\n return this[key];\n },\n set(value: any) {\n const oldValue = this[key];\n this[key] = value;\n\n // Trigger updates if value changes\n if (oldValue !== value) {\n // Update internals state\n if (this._internals?.states) {\n const stateName = name.toLowerCase();\n if (value) {\n this._internals.states.add(`--${stateName}`);\n } else {\n this._internals.states.delete(`--${stateName}`);\n }\n }\n\n // Update ARIA attributes if specified\n if (options.aria && this._internals) {\n const ariaAttribute = options.aria;\n if (value) {\n this._internals[ariaAttribute] = 'true';\n } else {\n this._internals[ariaAttribute] = null;\n }\n }\n\n // Request an update\n (this as ReactiveElement).requestUpdate(name, oldValue);\n }\n },\n configurable: true,\n enumerable: true\n });\n };\n}\n","import { createContext } from '@lit/context';\nimport { QtiAssessmentTest } from '../qti-assessment-test';\nimport { ItemContext, VariableDeclaration } from '../../qti-components';\nimport { View } from '../mixins/test-view.mixin';\n\nexport interface TestContext {\n items: (ItemContext & { category?: string })[];\n testOutcomeVariables: VariableDeclaration<string | string[]>[];\n navPartId?: string | null;\n navSectionId?: string | null;\n navItemId?: string | null;\n navItemLoading?: boolean;\n navTestLoading?: boolean;\n view?: View;\n}\n\nexport const testContext = createContext<Readonly<TestContext>>(Symbol('test'));\n\nexport type TestElement = {\n el: QtiAssessmentTest;\n};\n\nexport const testElement = createContext<Readonly<TestElement>>(Symbol('testElement'));\n"],"mappings":"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","names":["property","property","property"]}
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,208 +1,13 @@
1
- var __defProp = Object.defineProperty;
2
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
- var __decorateClass = (decorators, target, key, kind) => {
4
- var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
5
- for (var i = decorators.length - 1, decorator; i >= 0; i--)
6
- if (decorator = decorators[i])
7
- result = (kind ? decorator(target, key, result) : decorator(result)) || result;
8
- if (kind && result) __defProp(target, key, result);
9
- return result;
10
- };
11
-
12
- // src/lib/qti-test/components/test-prev.ts
13
- import { css as css2, html } from "lit";
14
- import { customElement } from "lit/decorators.js";
15
-
16
- // src/lib/qti-test/components/test-component.abstract.ts
17
- import { consume } from "@lit/context";
18
- import { LitElement } from "lit";
19
- import { state } from "lit/decorators.js";
20
-
21
- // src/lib/decorators/watch.ts
22
- function watch(propertyName, options) {
23
- const resolvedOptions = {
24
- waitUntilFirstUpdate: false,
25
- ...options
26
- };
27
- return (proto, decoratedFnName) => {
28
- const { update } = proto;
29
- const watchedProperties = Array.isArray(propertyName) ? propertyName : [propertyName];
30
- proto.update = function(changedProps) {
31
- watchedProperties.forEach((property2) => {
32
- const key = property2;
33
- if (changedProps.has(key)) {
34
- const oldValue = changedProps.get(key);
35
- const newValue = this[key];
36
- if (oldValue !== newValue) {
37
- if (!resolvedOptions.waitUntilFirstUpdate || this.hasUpdated) {
38
- this[decoratedFnName](oldValue, newValue);
39
- }
40
- }
41
- }
42
- });
43
- update.call(this, changedProps);
44
- };
45
- };
46
- }
47
-
48
- // src/lib/decorators/prop-internal-state.ts
49
- import { property } from "lit/decorators.js";
50
- function propInternalState(options) {
51
- return (protoOrDescriptor, name) => {
52
- property(options)(protoOrDescriptor, name);
53
- const key = `__${name}`;
54
- Object.defineProperty(protoOrDescriptor, name, {
55
- get() {
56
- return this[key];
57
- },
58
- set(value) {
59
- const oldValue = this[key];
60
- this[key] = value;
61
- if (oldValue !== value) {
62
- if (this._internals?.states) {
63
- const stateName = name.toLowerCase();
64
- if (value) {
65
- this._internals.states.add(`--${stateName}`);
66
- } else {
67
- this._internals.states.delete(`--${stateName}`);
68
- }
69
- }
70
- if (options.aria && this._internals) {
71
- const ariaAttribute = options.aria;
72
- if (value) {
73
- this._internals[ariaAttribute] = "true";
74
- } else {
75
- this._internals[ariaAttribute] = null;
76
- }
77
- }
78
- this.requestUpdate(name, oldValue);
79
- }
80
- },
81
- configurable: true,
82
- enumerable: true
83
- });
84
- };
85
- }
86
-
87
- // src/lib/qti-test/context/test.context.ts
88
- import { createContext } from "@lit/context";
89
- var testContext = createContext(Symbol("test"));
90
- var testElement = createContext(Symbol("testElement"));
91
-
92
- // src/lib/qti-test/components/test-component.abstract.ts
93
- var TestComponent = class extends LitElement {
94
- constructor() {
95
- super();
96
- this.disabled = true;
97
- this._internals = this.attachInternals();
98
- }
99
- _handleTestElementChange(_oldValue, newValue) {
100
- if (newValue.el) {
101
- this.disabled = false;
102
- }
103
- }
104
- willUpdate(changedProperties) {
105
- if (changedProperties.has("_testContext")) {
106
- const { items = [], navItemId } = this._testContext ?? {};
107
- this.itemIndex = items.findIndex((item) => item.identifier === navItemId);
108
- this.items = items;
109
- this.view = this._testContext?.view;
110
- }
111
- }
112
- _switchView(view) {
113
- this.dispatchEvent(
114
- new CustomEvent("on-test-switch-view", {
115
- composed: true,
116
- bubbles: true,
117
- detail: view
118
- })
119
- );
120
- }
121
- _requestItem(identifier) {
122
- this.dispatchEvent(
123
- new CustomEvent("qti-request-test-item", {
124
- composed: true,
125
- bubbles: true,
126
- detail: identifier
127
- })
128
- );
129
- }
130
- };
131
- __decorateClass([
132
- propInternalState({
133
- type: Boolean,
134
- reflect: true,
135
- aria: "ariaDisabled"
136
- // Maps to `aria-disabled` attribute
137
- })
138
- ], TestComponent.prototype, "disabled", 2);
139
- __decorateClass([
140
- state(),
141
- consume({ context: testContext, subscribe: true })
142
- ], TestComponent.prototype, "_testContext", 2);
143
- __decorateClass([
144
- state(),
145
- consume({ context: testElement, subscribe: true })
146
- ], TestComponent.prototype, "_testElement", 2);
147
- __decorateClass([
148
- watch("_testElement")
149
- ], TestComponent.prototype, "_handleTestElementChange", 1);
150
-
151
- // src/lib/qti-test/components/styles.ts
152
- import { css } from "lit";
153
- var form = css`
154
- display: inline-flex;
155
- align-items: center;
156
- cursor: pointer;
157
- padding: 0.5rem 1rem;
158
- border-radius: 0.25rem;
159
- user-select: none;
160
- `;
161
- var btn = css`
162
- background-color: lightgray;
163
- ${form};
164
- `;
165
- var dis = css`
166
- cursor: not-allowed;
167
- opacity: 0.5;
168
- `;
169
- var ind = css`
170
- ${form};
171
- border: 1px solid gray;
172
- `;
173
-
174
- // src/lib/qti-test/components/test-prev.ts
175
- var TestPrev = class extends TestComponent {
176
- constructor() {
177
- super();
178
- this._internals.role = "button";
179
- this._internals.ariaLabel = "Next item";
180
- this.addEventListener("click", (e) => {
181
- e.preventDefault();
182
- if (!this.disabled) this._requestItem(this.items[this.itemIndex - 1].identifier);
183
- });
184
- }
185
- willUpdate(changedProperties) {
186
- super.willUpdate(changedProperties);
187
- if (changedProperties.has("_testContext")) {
188
- this.disabled = !this._testElement?.el || this.itemIndex === 0 || this.itemIndex === -1;
189
- }
190
- }
191
- render() {
192
- return html`<slot></slot>`;
193
- }
194
- };
195
- TestPrev.styles = css2`
196
- :host {
197
- ${btn};
198
- }
199
- :host([disabled]) {
200
- ${dis};
201
- }
202
- `;
203
- TestPrev = __decorateClass([
204
- customElement("test-prev")
205
- ], TestPrev);
1
+ import {
2
+ TestPrev
3
+ } from "../../chunk-TXRSYXG3.js";
4
+ import "../../chunk-UB5K44DB.js";
5
+ import "../../chunk-ENVUIH2A.js";
6
+ import "../../chunk-4CSM2PCC.js";
7
+ import "../../chunk-4YG2FPKK.js";
8
+ import "../../chunk-XFHB6KQW.js";
9
+ import "../../chunk-R4HSV7U7.js";
10
+ import "../../chunk-44VE5POH.js";
206
11
  export {
207
12
  TestPrev
208
13
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/qti-test/components/test-prev.ts","../../../src/lib/qti-test/components/test-component.abstract.ts","../../../src/lib/decorators/watch.ts","../../../src/lib/decorators/prop-internal-state.ts","../../../src/lib/qti-test/context/test.context.ts","../../../src/lib/qti-test/components/styles.ts"],"sourcesContent":["import { css, html } from 'lit';\nimport { customElement } from 'lit/decorators.js';\nimport { TestComponent } from './test-component.abstract';\nimport * as styles from './styles';\n\n/**\n * Represents a custom element for navigating to the previous test item.\n *\n * @remarks\n * This element provides functionality for navigating to the previous test item.\n *\n * @example\n * ```html\n * <test-prev></test-prev>\n * ```\n */\n@customElement('test-prev')\nexport class TestPrev extends TestComponent {\n static styles = css`\n :host {\n ${styles.btn};\n }\n :host([disabled]) {\n ${styles.dis};\n }\n `;\n\n constructor() {\n super();\n this._internals.role = 'button';\n this._internals.ariaLabel = 'Next item';\n\n this.addEventListener('click', e => {\n e.preventDefault();\n if (!this.disabled) this._requestItem(this.items[this.itemIndex - 1].identifier);\n });\n }\n\n willUpdate(changedProperties: Map<string | number | symbol, unknown>) {\n super.willUpdate(changedProperties);\n if (changedProperties.has('_testContext')) {\n this.disabled = !this._testElement?.el || this.itemIndex === 0 || this.itemIndex === -1;\n }\n }\n\n render() {\n return html`<slot></slot>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'test-previous': TestPrev;\n }\n}\n","import { consume } from '@lit/context';\nimport { LitElement } from 'lit';\nimport { state } from 'lit/decorators.js';\nimport { propInternalState } from '../../decorators';\nimport { testContext, testElement, TestElement, TestContext } from '../context';\nimport { watch } from '../../decorators/watch';\n\nexport abstract class TestComponent extends LitElement {\n @propInternalState({\n type: Boolean,\n reflect: true,\n aria: 'ariaDisabled' // Maps to `aria-disabled` attribute\n })\n public disabled = true;\n\n @state()\n @consume({ context: testContext, subscribe: true })\n protected _testContext?: TestContext;\n\n @state()\n @consume({ context: testElement, subscribe: true })\n protected _testElement?: TestElement;\n @watch('_testElement')\n _handleTestElementChange(_oldValue: TestElement, newValue: TestElement) {\n if (newValue.el) {\n this.disabled = false;\n }\n }\n\n protected _internals: ElementInternals;\n\n protected items;\n protected itemIndex;\n protected view;\n\n constructor() {\n super();\n this._internals = this.attachInternals();\n }\n\n protected willUpdate(changedProperties: Map<string | number | symbol, unknown>) {\n if (changedProperties.has('_testContext')) {\n const { items = [], navItemId } = this._testContext ?? {};\n this.itemIndex = items.findIndex(item => item.identifier === navItemId);\n this.items = items;\n this.view = this._testContext?.view;\n }\n }\n\n protected _switchView(view: string) {\n this.dispatchEvent(\n new CustomEvent('on-test-switch-view', {\n composed: true,\n bubbles: true,\n detail: view\n })\n );\n }\n\n protected _requestItem(identifier: string): void {\n this.dispatchEvent(\n new CustomEvent('qti-request-test-item', {\n composed: true,\n bubbles: true,\n detail: identifier\n })\n );\n }\n}\n","import type { LitElement } from 'lit';\n\ntype UpdateHandler = (prev?: unknown, next?: unknown) => void;\n\ntype NonUndefined<A> = A extends undefined ? never : A;\n\nexport type UpdateHandlerFunctionKeys<T extends object> = {\n [K in keyof T]-?: NonUndefined<T[K]> extends UpdateHandler ? K : never;\n}[keyof T];\n\ninterface WatchOptions {\n /**\n * If true, will only start watching after the initial update/render\n */\n waitUntilFirstUpdate?: boolean;\n}\n\n/**\n * Runs when observed properties change, e.g. @property or @state, but before the component updates. To wait for an\n * update to complete after a change occurs, use `await this.updateComplete` in the handler. To start watching after the\n * initial update/render, use `{ waitUntilFirstUpdate: true }` or `this.hasUpdated` in the handler.\n *\n * Usage:\n *\n * @watch('propName')\n * handlePropChange(oldValue, newValue) {\n * ...\n * }\n */\nexport function watch(propertyName: string | string[], options?: WatchOptions) {\n const resolvedOptions: Required<WatchOptions> = {\n waitUntilFirstUpdate: false,\n ...options\n };\n return <ElemClass extends LitElement>(\n proto: ElemClass,\n decoratedFnName: UpdateHandlerFunctionKeys<ElemClass> | any\n ) => {\n // @ts-expect-error - update is a protected property\n const { update } = proto;\n const watchedProperties = Array.isArray(propertyName) ? propertyName : [propertyName];\n\n // @ts-expect-error - update is a protected property\n proto.update = function (this: ElemClass, changedProps: Map<keyof ElemClass, ElemClass[keyof ElemClass]>) {\n watchedProperties.forEach(property => {\n const key = property as keyof ElemClass;\n if (changedProps.has(key)) {\n const oldValue = changedProps.get(key);\n const newValue = this[key];\n\n if (oldValue !== newValue) {\n if (!resolvedOptions.waitUntilFirstUpdate || this.hasUpdated) {\n (this[decoratedFnName] as unknown as UpdateHandler)(oldValue, newValue);\n }\n }\n }\n });\n\n update.call(this, changedProps);\n };\n };\n}\n","import { ReactiveElement } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { PropertyDeclaration } from 'lit';\n\n// Extended decorator options\ninterface InternalStateOptions extends PropertyDeclaration {\n aria?: string; // Corresponding ARIA attribute, e.g., 'aria-disabled'\n}\n\nexport function propInternalState(options: InternalStateOptions) {\n return (protoOrDescriptor: any, name: string) => {\n // Apply the default Lit `@property` decorator\n property(options)(protoOrDescriptor, name);\n\n // Intercept the property descriptor to enhance functionality\n const key = `__${name}`; // Internal backing field\n\n Object.defineProperty(protoOrDescriptor, name, {\n get() {\n return this[key];\n },\n set(value: any) {\n const oldValue = this[key];\n this[key] = value;\n\n // Trigger updates if value changes\n if (oldValue !== value) {\n // Update internals state\n if (this._internals?.states) {\n const stateName = name.toLowerCase();\n if (value) {\n this._internals.states.add(`--${stateName}`);\n } else {\n this._internals.states.delete(`--${stateName}`);\n }\n }\n\n // Update ARIA attributes if specified\n if (options.aria && this._internals) {\n const ariaAttribute = options.aria;\n if (value) {\n this._internals[ariaAttribute] = 'true';\n } else {\n this._internals[ariaAttribute] = null;\n }\n }\n\n // Request an update\n (this as ReactiveElement).requestUpdate(name, oldValue);\n }\n },\n configurable: true,\n enumerable: true\n });\n };\n}\n","import { createContext } from '@lit/context';\nimport { QtiAssessmentTest } from '../qti-assessment-test';\nimport { ItemContext, VariableDeclaration } from '../../qti-components';\nimport { View } from '../mixins/test-view.mixin';\n\nexport interface TestContext {\n items: (ItemContext & { category?: string })[];\n testOutcomeVariables: VariableDeclaration<string | string[]>[];\n navPartId?: string | null;\n navSectionId?: string | null;\n navItemId?: string | null;\n navItemLoading?: boolean;\n navTestLoading?: boolean;\n view?: View;\n}\n\nexport const testContext = createContext<Readonly<TestContext>>(Symbol('test'));\n\nexport type TestElement = {\n el: QtiAssessmentTest;\n};\n\nexport const testElement = createContext<Readonly<TestElement>>(Symbol('testElement'));\n","// /* eslint-disable lit-plugin(no-invalid-css) */\nimport { css } from 'lit';\n\nexport const form = css`\n display: inline-flex;\n align-items: center;\n cursor: pointer;\n padding: 0.5rem 1rem;\n border-radius: 0.25rem;\n user-select: none;\n`;\n\nexport const btn = css`\n background-color: lightgray;\n ${form};\n`;\n\nexport const dis = css`\n cursor: not-allowed;\n opacity: 0.5;\n`;\n\nexport const ind = css`\n ${form};\n border: 1px solid gray;\n`;\n"],"mappings":"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","names":["css","property","css"]}
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}