@citolab/qti-components 7.0.5 → 7.0.6-next.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cdn/chunk-2F5323DC.js +8 -0
- package/cdn/chunk-2WPNLHGH.js +43 -0
- package/cdn/chunk-3M77CJJH.js +8 -0
- package/cdn/chunk-4DFVJE2A.js +48 -0
- package/cdn/chunk-4HKDXRGE.js +5 -0
- package/cdn/chunk-5WCOPF7O.js +73 -0
- package/cdn/chunk-D4K2EXYX.js +8 -0
- package/cdn/chunk-II7AGB2E.js +11 -0
- package/cdn/chunk-KUOLGIA5.js +1 -0
- package/cdn/chunk-KXRA4DBZ.js +8 -0
- package/cdn/chunk-L4TDHAKL.js +24 -0
- package/cdn/chunk-LY27H7YF.js +1 -0
- package/cdn/chunk-M6AATWPS.js +59 -0
- package/cdn/{chunks/chunk-UIEC4LXR.js → chunk-MFWSHIPH.js} +1 -1
- package/cdn/chunk-NAARXANC.js +11 -0
- package/cdn/chunk-OEBYNBRS.js +129 -0
- package/cdn/chunk-RBATSYIS.js +43 -0
- package/cdn/chunk-RM352RXQ.js +5 -0
- package/cdn/{chunks/chunk-CFXQCNG6.js → chunk-SQDSHH6N.js} +18 -2
- package/cdn/chunk-V2RMP73O.js +1 -0
- package/cdn/chunk-WI7KK7NI.js +8 -0
- package/cdn/chunk-YHB534QY.js +8 -0
- package/cdn/chunk-YXST4IEX.js +5 -0
- package/cdn/qti-components/index.js +131 -116
- package/cdn/qti-item/core/index.global.js +149 -0
- package/cdn/qti-item/core/index.js +5 -0
- package/cdn/qti-loader/index.js +1 -23
- package/cdn/qti-test/components/index.global.js +1 -36
- package/cdn/qti-test/components/index.js +1 -3598
- package/cdn/qti-test/components/styles.js +1 -17
- package/cdn/qti-test/components/test-component.abstract.js +1 -1
- package/cdn/qti-test/components/test-item-link.js +1 -24
- package/cdn/qti-test/components/test-next.js +1 -24
- package/cdn/qti-test/components/test-next.spec.global.js +25 -60
- package/cdn/qti-test/components/test-next.spec.js +247 -4749
- package/cdn/qti-test/components/test-paging-buttons-stamp.js +1 -3
- package/cdn/qti-test/components/test-prev.js +1 -24
- package/cdn/qti-test/components/test-view.js +1 -11
- package/cdn/qti-test/core/index.global.js +205 -0
- package/cdn/qti-test/core/index.js +1 -0
- package/cdn/qti-transformers/index.js +1 -23
- package/dist/{chunks/chunk-Y6UWSECL.js → chunk-2CHF3TMY.js} +2 -2
- package/dist/chunk-2CHF3TMY.js.map +1 -0
- package/dist/{chunks/chunk-ZEFOMZNY.js → chunk-2GKDJDI5.js} +3 -3
- package/dist/chunk-2GKDJDI5.js.map +1 -0
- package/dist/{chunks/chunk-XDMSEAYC.js → chunk-2OA7E3E7.js} +1 -1
- package/dist/chunk-2OA7E3E7.js.map +1 -0
- package/dist/{chunks/chunk-PUBGXXTM.js → chunk-3F3DCHHM.js} +4 -4
- package/dist/chunk-3F3DCHHM.js.map +1 -0
- package/dist/{chunks/chunk-6YE2KJ4C.js → chunk-44VE5POH.js} +1 -1
- package/dist/{chunks/chunk-D3RGDWKP.js → chunk-4CSM2PCC.js} +1 -1
- package/dist/chunk-4CSM2PCC.js.map +1 -0
- package/dist/{chunks/chunk-ELDMXTUQ.js → chunk-4YG2FPKK.js} +1 -1
- package/dist/chunk-4YG2FPKK.js.map +1 -0
- package/dist/{chunks/chunk-W4B23OIP.js → chunk-4YR7ZPE3.js} +4 -4
- package/dist/chunk-4YR7ZPE3.js.map +1 -0
- package/dist/{chunks/chunk-XDFXD3BI.js → chunk-E3656TSN.js} +2 -2
- package/dist/chunk-E3656TSN.js.map +1 -0
- package/dist/{chunks/chunk-HWA4A3SR.js → chunk-ERLGA6TC.js} +4 -4
- package/dist/chunk-ERLGA6TC.js.map +1 -0
- package/dist/{chunks/chunk-3ROZMGAN.js → chunk-EXJQ3ZUE.js} +4 -4
- package/dist/chunk-EXJQ3ZUE.js.map +1 -0
- package/dist/chunk-KI3A6ZT6.js +50 -0
- package/dist/chunk-KI3A6ZT6.js.map +1 -0
- package/dist/{chunks/chunk-LKINC6JO.js → chunk-KVFH5VBC.js} +6 -6
- package/dist/chunk-KVFH5VBC.js.map +1 -0
- package/dist/chunk-LJU3MHXE.js +43 -0
- package/dist/chunk-LJU3MHXE.js.map +1 -0
- package/dist/chunk-MAC76UNI.js +1 -0
- package/dist/chunk-NUXEGEMP.js +65 -0
- package/dist/chunk-NUXEGEMP.js.map +1 -0
- package/dist/chunk-O3GIZH57.js +121 -0
- package/dist/chunk-O3GIZH57.js.map +1 -0
- package/dist/{qti-test/qti-test.js → chunk-QNR4WQAC.js} +307 -239
- package/dist/chunk-QNR4WQAC.js.map +1 -0
- package/dist/chunk-SLMQZKDH.js +568 -0
- package/dist/chunk-SLMQZKDH.js.map +1 -0
- package/dist/chunk-TAQAVEQ2.js +72 -0
- package/dist/chunk-TAQAVEQ2.js.map +1 -0
- package/dist/chunk-TLPISJ3Z.js +78 -0
- package/dist/chunk-TLPISJ3Z.js.map +1 -0
- package/dist/{chunks/chunk-4O5F7WV7.js → chunk-UB5K44DB.js} +1 -1
- package/dist/chunk-UB5K44DB.js.map +1 -0
- package/dist/chunk-UDWEOEOS.js +50 -0
- package/dist/chunk-UDWEOEOS.js.map +1 -0
- package/dist/qti-components/index.d.ts +2 -2
- package/dist/qti-components/index.js +12 -285
- package/dist/qti-components/index.js.map +1 -1
- package/dist/qti-components-jsx.d.ts +83 -83
- package/dist/qti-item/{components/item-container.d.ts → core/index.d.ts} +22 -1
- package/dist/{chunks/chunk-LROTNPC2.js → qti-item/core/index.js} +20 -9
- package/dist/qti-item/core/index.js.map +1 -0
- package/dist/qti-loader/index.d.ts +1 -1
- package/dist/qti-loader/index.js +6 -287
- package/dist/qti-loader/index.js.map +1 -1
- package/dist/{qti-simple-choice-DxWcdKHi.d.ts → qti-simple-choice-DB7hqAMS.d.ts} +1 -1
- package/dist/qti-test/components/index.d.ts +2 -4
- package/dist/qti-test/components/index.js +24 -4135
- package/dist/qti-test/components/index.js.map +1 -1
- package/dist/qti-test/components/styles.js +7 -22
- package/dist/qti-test/components/styles.js.map +1 -1
- package/dist/qti-test/components/test-component.abstract.d.ts +2 -3
- package/dist/qti-test/components/test-component.abstract.js +7 -145
- package/dist/qti-test/components/test-component.abstract.js.map +1 -1
- package/dist/qti-test/components/test-item-link.d.ts +2 -3
- package/dist/qti-test/components/test-item-link.js +9 -198
- package/dist/qti-test/components/test-item-link.js.map +1 -1
- package/dist/qti-test/components/test-next.d.ts +2 -3
- package/dist/qti-test/components/test-next.js +9 -205
- package/dist/qti-test/components/test-next.js.map +1 -1
- package/dist/qti-test/components/test-next.spec.d.ts +3 -7
- package/dist/qti-test/components/test-next.spec.js +140 -11152
- package/dist/qti-test/components/test-next.spec.js.map +1 -1
- package/dist/qti-test/components/test-paging-buttons-stamp.d.ts +2 -3
- package/dist/qti-test/components/test-paging-buttons-stamp.js +8 -214
- package/dist/qti-test/components/test-paging-buttons-stamp.js.map +1 -1
- package/dist/qti-test/components/test-prev.d.ts +2 -3
- package/dist/qti-test/components/test-prev.js +9 -205
- package/dist/qti-test/components/test-prev.js.map +1 -1
- package/dist/qti-test/components/test-view.d.ts +2 -3
- package/dist/qti-test/components/test-view.js +8 -205
- package/dist/qti-test/components/test-view.js.map +1 -1
- package/dist/qti-test/core/index.d.ts +121 -0
- package/dist/qti-test/core/index.js +25 -0
- package/dist/qti-transformers/index.js +6 -287
- package/dist/qti-transformers/index.js.map +1 -1
- package/dist/test-component.abstract-DWJ0XNiI.d.ts +108 -0
- package/dist/{index-Cvrd4KQA.d.ts → test.context-DKSpQHyg.d.ts} +40 -56
- package/dist/{test-base-BJwG9Ie8.d.ts → test.context-K2w-1mWi.d.ts} +19 -29
- package/dist/vscode.html-custom-data.json +21 -21
- package/package.json +70 -75
- package/cdn/chunks/chunk-4UJBK6JO.js +0 -1
- package/cdn/chunks/chunk-5O3Z7TDV.js +0 -1
- package/cdn/chunks/chunk-65LFT33L.js +0 -8
- package/cdn/chunks/chunk-6D25UFJR.js +0 -8
- package/cdn/chunks/chunk-6UGPNL7M.js +0 -1
- package/cdn/chunks/chunk-CSUKVUZF.js +0 -3
- package/cdn/chunks/chunk-CSY3WI5A.js +0 -1
- package/cdn/chunks/chunk-DAZR7RUI.js +0 -0
- package/cdn/chunks/chunk-EOPEMJS3.js +0 -0
- package/cdn/chunks/chunk-G5O7EN45.js +0 -5
- package/cdn/chunks/chunk-GEFUIFM7.js +0 -0
- package/cdn/chunks/chunk-JLNHEMQG.js +0 -1
- package/cdn/chunks/chunk-LPWIM7QJ.js +0 -902
- package/cdn/chunks/chunk-M3YRM3AV.js +0 -1
- package/cdn/chunks/chunk-M6BOWL2U.js +0 -1
- package/cdn/chunks/chunk-P5IE36FO.js +0 -8
- package/cdn/chunks/chunk-PXH5KN5O.js +0 -1
- package/cdn/chunks/chunk-RBEI6NIF.js +0 -1
- package/cdn/chunks/chunk-SMKIYFFI.js +0 -1
- package/cdn/chunks/chunk-SRLMW23F.js +0 -0
- package/cdn/chunks/chunk-T3YDLD2H.js +0 -11
- package/cdn/chunks/chunk-T6IXJ4W4.js +0 -1
- package/cdn/chunks/chunk-TFAUBGP2.js +0 -0
- package/cdn/chunks/chunk-V44O3GTW.js +0 -0
- package/cdn/chunks/chunk-V6B54FQW.js +0 -5
- package/cdn/chunks/chunk-V6KX6BQN.js +0 -1
- package/cdn/chunks/chunk-VYANBI35.js +0 -1
- package/cdn/chunks/chunk-XUJ7TXHW.js +0 -1
- package/cdn/chunks/chunk-ZIZLFFSG.js +0 -0
- package/cdn/index.css +0 -1
- package/cdn/index.global.js +0 -277
- package/cdn/index.js +0 -4503
- package/cdn/qti-item/components/index.css +0 -1
- package/cdn/qti-item/components/index.global.js +0 -149
- package/cdn/qti-item/components/index.js +0 -3549
- package/cdn/qti-item/components/item-container.css +0 -1
- package/cdn/qti-item/components/item-container.global.js +0 -149
- package/cdn/qti-item/components/item-container.js +0 -3549
- package/cdn/qti-item/index.css +0 -1
- package/cdn/qti-item/index.global.js +0 -149
- package/cdn/qti-item/index.js +0 -3549
- package/cdn/qti-item/qti-item.global.js +0 -114
- package/cdn/qti-item/qti-item.js +0 -1
- package/cdn/qti-test/components/index.css +0 -1
- package/cdn/qti-test/components/test-container.css +0 -1
- package/cdn/qti-test/components/test-container.global.js +0 -149
- package/cdn/qti-test/components/test-container.js +0 -3549
- package/cdn/qti-test/components/test-next.spec.css +0 -1
- package/cdn/qti-test/context/index.global.js +0 -58
- package/cdn/qti-test/context/index.js +0 -1
- package/cdn/qti-test/context/test.context.global.js +0 -58
- package/cdn/qti-test/context/test.context.js +0 -1
- package/cdn/qti-test/index.css +0 -1
- package/cdn/qti-test/index.global.js +0 -242
- package/cdn/qti-test/index.js +0 -3598
- package/cdn/qti-test/mixins/index.global.js +0 -1
- package/cdn/qti-test/mixins/index.js +0 -23
- package/cdn/qti-test/mixins/test-loader.mixin.global.js +0 -1
- package/cdn/qti-test/mixins/test-loader.mixin.js +0 -23
- package/cdn/qti-test/mixins/test-navigation.mixin.global.js +0 -1
- package/cdn/qti-test/mixins/test-navigation.mixin.js +0 -1
- package/cdn/qti-test/mixins/test-view.mixin.global.js +0 -1
- package/cdn/qti-test/mixins/test-view.mixin.js +0 -1
- package/cdn/qti-test/qti-assessment-test/index.global.js +0 -170
- package/cdn/qti-test/qti-assessment-test/index.js +0 -1
- package/cdn/qti-test/qti-assessment-test/qti-assessment-item-ref.global.js +0 -170
- package/cdn/qti-test/qti-assessment-test/qti-assessment-item-ref.js +0 -1
- package/cdn/qti-test/qti-assessment-test/qti-assessment-section.global.js +0 -170
- package/cdn/qti-test/qti-assessment-test/qti-assessment-section.js +0 -1
- package/cdn/qti-test/qti-assessment-test/qti-assessment-test.global.js +0 -170
- package/cdn/qti-test/qti-assessment-test/qti-assessment-test.js +0 -1
- package/cdn/qti-test/qti-assessment-test/qti-test-part.global.js +0 -114
- package/cdn/qti-test/qti-assessment-test/qti-test-part.js +0 -1
- package/cdn/qti-test/qti-test.global.js +0 -170
- package/cdn/qti-test/qti-test.js +0 -23
- package/cdn/qti-test/test-base.global.js +0 -170
- package/cdn/qti-test/test-base.js +0 -1
- package/dist/chunks/chunk-3G2DDBJW.js +0 -44
- package/dist/chunks/chunk-3G2DDBJW.js.map +0 -1
- package/dist/chunks/chunk-3NLCJYSX.js +0 -1
- package/dist/chunks/chunk-3OXGDCSU.js +0 -6253
- package/dist/chunks/chunk-3OXGDCSU.js.map +0 -1
- package/dist/chunks/chunk-3ROZMGAN.js.map +0 -1
- package/dist/chunks/chunk-4O5F7WV7.js.map +0 -1
- package/dist/chunks/chunk-AAQCM2FP.js +0 -56
- package/dist/chunks/chunk-AAQCM2FP.js.map +0 -1
- package/dist/chunks/chunk-D3RGDWKP.js.map +0 -1
- package/dist/chunks/chunk-DJLE6EV2.js +0 -36
- package/dist/chunks/chunk-DJLE6EV2.js.map +0 -1
- package/dist/chunks/chunk-ELDMXTUQ.js.map +0 -1
- package/dist/chunks/chunk-EW5CTHAD.js +0 -1
- package/dist/chunks/chunk-HWA4A3SR.js.map +0 -1
- package/dist/chunks/chunk-IKZWK2C5.js +0 -1
- package/dist/chunks/chunk-IKZWK2C5.js.map +0 -1
- package/dist/chunks/chunk-IP7JSYO6.js +0 -1
- package/dist/chunks/chunk-IP7JSYO6.js.map +0 -1
- package/dist/chunks/chunk-JE6BMXZU.js +0 -94
- package/dist/chunks/chunk-JE6BMXZU.js.map +0 -1
- package/dist/chunks/chunk-JSPJGWGT.js +0 -20
- package/dist/chunks/chunk-JSPJGWGT.js.map +0 -1
- package/dist/chunks/chunk-LKINC6JO.js.map +0 -1
- package/dist/chunks/chunk-LROTNPC2.js.map +0 -1
- package/dist/chunks/chunk-MTMT2RMF.js +0 -63
- package/dist/chunks/chunk-MTMT2RMF.js.map +0 -1
- package/dist/chunks/chunk-NDJZGJUR.js +0 -65
- package/dist/chunks/chunk-NDJZGJUR.js.map +0 -1
- package/dist/chunks/chunk-OE2LFIH2.js +0 -1
- package/dist/chunks/chunk-OE2LFIH2.js.map +0 -1
- package/dist/chunks/chunk-OJ2XGDWK.js +0 -1
- package/dist/chunks/chunk-OJ2XGDWK.js.map +0 -1
- package/dist/chunks/chunk-PUBGXXTM.js.map +0 -1
- package/dist/chunks/chunk-QRCUNRP5.js +0 -75
- package/dist/chunks/chunk-QRCUNRP5.js.map +0 -1
- package/dist/chunks/chunk-S6JJYCO7.js +0 -51
- package/dist/chunks/chunk-S6JJYCO7.js.map +0 -1
- package/dist/chunks/chunk-U3AALKEP.js +0 -1
- package/dist/chunks/chunk-U3AALKEP.js.map +0 -1
- package/dist/chunks/chunk-UCQFSRYF.js +0 -34
- package/dist/chunks/chunk-UCQFSRYF.js.map +0 -1
- package/dist/chunks/chunk-URGVQ64M.js +0 -1
- package/dist/chunks/chunk-URGVQ64M.js.map +0 -1
- package/dist/chunks/chunk-V4FXK4TP.js +0 -128
- package/dist/chunks/chunk-V4FXK4TP.js.map +0 -1
- package/dist/chunks/chunk-W4B23OIP.js.map +0 -1
- package/dist/chunks/chunk-XDFXD3BI.js.map +0 -1
- package/dist/chunks/chunk-XDMSEAYC.js.map +0 -1
- package/dist/chunks/chunk-XPDS72XY.js +0 -29
- package/dist/chunks/chunk-XPDS72XY.js.map +0 -1
- package/dist/chunks/chunk-Y6UWSECL.js.map +0 -1
- package/dist/chunks/chunk-ZEFOMZNY.js.map +0 -1
- package/dist/index.d.ts +0 -19
- package/dist/index.js +0 -11153
- package/dist/index.js.map +0 -1
- package/dist/qti-item/components/index.d.ts +0 -3
- package/dist/qti-item/components/index.js +0 -3856
- package/dist/qti-item/components/index.js.map +0 -1
- package/dist/qti-item/components/item-container.js +0 -3856
- package/dist/qti-item/components/item-container.js.map +0 -1
- package/dist/qti-item/index.d.ts +0 -4
- package/dist/qti-item/index.js +0 -3869
- package/dist/qti-item/index.js.map +0 -1
- package/dist/qti-item/qti-item.d.ts +0 -25
- package/dist/qti-item/qti-item.js +0 -26
- package/dist/qti-item/qti-item.js.map +0 -1
- package/dist/qti-test/components/test-container.d.ts +0 -37
- package/dist/qti-test/components/test-container.js +0 -3782
- package/dist/qti-test/components/test-container.js.map +0 -1
- package/dist/qti-test/context/index.d.ts +0 -6
- package/dist/qti-test/context/index.js +0 -9
- package/dist/qti-test/context/index.js.map +0 -1
- package/dist/qti-test/context/test.context.d.ts +0 -6
- package/dist/qti-test/context/test.context.js +0 -9
- package/dist/qti-test/context/test.context.js.map +0 -1
- package/dist/qti-test/index.d.ts +0 -14
- package/dist/qti-test/index.js +0 -4746
- package/dist/qti-test/index.js.map +0 -1
- package/dist/qti-test/mixins/index.d.ts +0 -8
- package/dist/qti-test/mixins/index.js +0 -350
- package/dist/qti-test/mixins/index.js.map +0 -1
- package/dist/qti-test/mixins/test-loader.mixin.d.ts +0 -8
- package/dist/qti-test/mixins/test-loader.mixin.js +0 -240
- package/dist/qti-test/mixins/test-loader.mixin.js.map +0 -1
- package/dist/qti-test/mixins/test-navigation.mixin.d.ts +0 -22
- package/dist/qti-test/mixins/test-navigation.mixin.js +0 -64
- package/dist/qti-test/mixins/test-navigation.mixin.js.map +0 -1
- package/dist/qti-test/mixins/test-view.mixin.d.ts +0 -6
- package/dist/qti-test/mixins/test-view.mixin.js +0 -50
- package/dist/qti-test/mixins/test-view.mixin.js.map +0 -1
- package/dist/qti-test/qti-assessment-test/index.d.ts +0 -6
- package/dist/qti-test/qti-assessment-test/index.js +0 -221
- package/dist/qti-test/qti-assessment-test/index.js.map +0 -1
- package/dist/qti-test/qti-assessment-test/qti-assessment-item-ref.d.ts +0 -6
- package/dist/qti-test/qti-assessment-test/qti-assessment-item-ref.js +0 -85
- package/dist/qti-test/qti-assessment-test/qti-assessment-item-ref.js.map +0 -1
- package/dist/qti-test/qti-assessment-test/qti-assessment-section.d.ts +0 -6
- package/dist/qti-test/qti-assessment-test/qti-assessment-section.js +0 -73
- package/dist/qti-test/qti-assessment-test/qti-assessment-section.js.map +0 -1
- package/dist/qti-test/qti-assessment-test/qti-assessment-test.d.ts +0 -6
- package/dist/qti-test/qti-assessment-test/qti-assessment-test.js +0 -54
- package/dist/qti-test/qti-assessment-test/qti-assessment-test.js.map +0 -1
- package/dist/qti-test/qti-assessment-test/qti-test-part.d.ts +0 -19
- package/dist/qti-test/qti-assessment-test/qti-test-part.js +0 -62
- package/dist/qti-test/qti-assessment-test/qti-test-part.js.map +0 -1
- package/dist/qti-test/qti-test.d.ts +0 -68
- package/dist/qti-test/qti-test.js.map +0 -1
- package/dist/qti-test/test-base.d.ts +0 -6
- package/dist/qti-test/test-base.js +0 -137
- package/dist/qti-test/test-base.js.map +0 -1
- /package/cdn/{chunks/chunk-6DMSHH5X.js → chunk-22HAPLRD.js} +0 -0
- /package/cdn/{chunks/chunk-EHK76KRT.js → chunk-GPDDPZFH.js} +0 -0
- /package/cdn/{chunks/chunk-5FCXUJAG.js → chunk-LVW3MHTI.js} +0 -0
- /package/cdn/{chunks/chunk-T4HD2C4F.js → chunk-VI2WKTN4.js} +0 -0
- /package/dist/{chunks/chunk-3NLCJYSX.js.map → chunk-44VE5POH.js.map} +0 -0
- /package/dist/{chunks/chunk-6YE2KJ4C.js.map → chunk-MAC76UNI.js.map} +0 -0
- /package/dist/{chunks/chunk-EW5CTHAD.js.map → qti-test/core/index.js.map} +0 -0
|
@@ -1,42 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
<xsl:output method="html" version="5.0" encoding="UTF-8" indent="yes" />
|
|
3
|
-
<xsl:template match="@*|node()">
|
|
4
|
-
<xsl:copy>
|
|
5
|
-
<xsl:apply-templates select="@*|node()"/>
|
|
6
|
-
</xsl:copy>
|
|
7
|
-
</xsl:template>
|
|
8
|
-
|
|
9
|
-
<!-- remove existing namespaces -->
|
|
10
|
-
<xsl:template match="*">
|
|
11
|
-
<!-- remove element prefix -->
|
|
12
|
-
<xsl:element name="{local-name()}">
|
|
13
|
-
<!-- process attributes -->
|
|
14
|
-
<xsl:for-each select="@*">
|
|
15
|
-
<!-- remove attribute prefix -->
|
|
16
|
-
<xsl:attribute name="{local-name()}">
|
|
17
|
-
<xsl:value-of select="."/>
|
|
18
|
-
</xsl:attribute>
|
|
19
|
-
</xsl:for-each>
|
|
20
|
-
<xsl:apply-templates/>
|
|
21
|
-
</xsl:element>
|
|
22
|
-
</xsl:template>
|
|
23
|
-
</xsl:stylesheet>`;function Vt(c,o,e){c.querySelectorAll(o).forEach(t=>{let r=`${o}-${e}`,i=Nt(t,r);t.replaceWith(i)})}function Ht(c,o){c.querySelectorAll("*").forEach(e=>{let t=e.classList;t&&t.forEach(r=>{if(r.startsWith(`${o}:`)){let i=r.slice(`${o}:`.length),l=`${e.nodeName}-${i}`,s=Nt(e,l);e.replaceWith(s)}})})}function Nt(c,o){let e=document.createElement(o);for(let t of c.attributes)e.setAttribute(t.name,t.value);for(;c.firstChild;)e.appendChild(c.firstChild);return e}var Qe=null;function Me(c,o=!1){return o&&Qe!==null&&Qe.abort(),new Promise((e,t)=>{let r=new XMLHttpRequest;Qe=r,r.open("GET",c,!0),r.responseType="document",r.onload=()=>{r.status>=200&&r.status<300?e(r.responseXML):t(r.statusText)},r.onerror=()=>{t(r.statusText)},r.send()})}function Se(c){return new DOMParser().parseFromString(c,"text/xml")}function Re(c){let o=new XSLTProcessor,e=new DOMParser().parseFromString(Nr,"text/xml");return o.importStylesheet(e),o.transformToFragment(c,document)}function et(c,o){o.endsWith("/")||(o+="/"),c.querySelectorAll("[src],[href],[primary-path]").forEach(e=>{let t="";e.getAttribute("src")&&(t="src"),e.getAttribute("href")&&(t="href"),e.getAttribute("primary-path")&&(t="primary-path");let r=e.getAttribute(t)?.trim();if(!r.startsWith("data:")&&!r.startsWith("http")){let i=o+encodeURI(r);e.setAttribute(t,i)}})}function $t(c){c.querySelectorAll('qti-custom-operator[class="js.org"] > qti-base-value').forEach(e=>{let t=document.createComment(e.textContent);e.replaceChild(t,e.firstChild)})}function It(c){c.querySelectorAll("qti-stylesheet").forEach(o=>o.remove())}var Ot=()=>{let c,o={async load(e,t=!1){return new Promise(r=>{Me(e,t).then(i=>(c=i,o.path(e.substring(0,e.lastIndexOf("/"))),r(o)))})},parse(e){return c=Se(e),o},path:e=>(et(c,e),o),fn(e){return e(c),o},pciHooks(e){let t=["hook","module"],r=e.substring(0,e.lastIndexOf("/"));for(let i of t)c.querySelectorAll("["+i+"]").forEach(s=>{let a=s.getAttribute(i);!a.startsWith("data:")&&!a.startsWith("http")&&(s.setAttribute("base-url",e),s.setAttribute("module",r+"/"+encodeURI(a+(a.endsWith(".js")?"":".js"))))});return o},extendElementName:(e,t)=>(Vt(c,e,t),o),extendElementsWithClass:(e="extend")=>(Ht(c,e),o),customInteraction(e,t){let r=c.querySelector("qti-custom-interaction"),i=r.querySelector("object");return r.setAttribute("data-base-ref",e),r.setAttribute("data-base-item",e+t),r.setAttribute("data",i.getAttribute("data")),r.setAttribute("width",i.getAttribute("width")),r.setAttribute("height",i.getAttribute("height")),r.removeChild(i),o},convertCDATAtoComment(){return $t(c),o},stripStyleSheets(){return It(c),o},html(){return new XMLSerializer().serializeToString(Re(c))},xml(){return new XMLSerializer().serializeToString(c)},htmlDoc(){return Re(c)},xmlDoc(){return c}};return o};var W=class extends $r{constructor(){super(...arguments);this.identifier="";this.href=""}async connectedCallback(){super.connectedCallback();let e=new Event("qti-assessment-stimulus-ref-connected",{cancelable:!0,bubbles:!0,composed:!0});if(this.dispatchEvent(e)){let i=this.closest("qti-assessment-item").querySelector(`[data-stimulus-idref=${this.identifier}]`);i?await this.updateStimulusRef(i):console.warn(`Stimulus with data-stimulus-idref ${this.identifier} not found`)}}async updateStimulusRef(e){let t=await Ot().load(this.href).then(r=>r.htmlDoc());if(t){let r=t.querySelectorAll("qti-stimulus-body, qti-stylesheet");e.innerHTML="",e.append(...r)}}};n([Pt({type:String})],W.prototype,"identifier",2),n([Pt({type:String})],W.prototype,"href",2),W=n([Ir("qti-assessment-stimulus-ref")],W);import{html as Or}from"lit";import{property as Ae}from"lit/decorators.js";var Ft={toAttribute:c=>c?"true":"false",fromAttribute:c=>c==="true"};function M(c,o){class e extends c{constructor(...i){super(...i);this.identifier="";this.tabIndex=0;this.disabled=!1;this.readonly=!1;this.internals=this.attachInternals()}handleDisabledChange(i,l){this.tabIndex=l?-1:0,l&&this.blur()}connectedCallback(){super.connectedCallback(),this.addEventListener("keyup",this._onKeyUp),this.addEventListener("click",this._onClick),this.dispatchEvent(new CustomEvent(`register-${o}`,{bubbles:!0,composed:!0}))}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("keyup",this._onKeyUp),this.removeEventListener("click",this._onClick),this.dispatchEvent(new CustomEvent(`unregister-${o}`,{bubbles:!0,composed:!0}))}_onKeyUp(i){i.altKey||i.code==="Space"&&(i.preventDefault(),this._activate())}_onClick(){this.disabled||this.readonly||(this.focus(),this._activate())}_activate(){this.disabled||this.readonly||this.dispatchEvent(new CustomEvent(`activate-${o}`,{bubbles:!0,composed:!0,detail:{identifier:this.identifier}}))}render(){return Or`<slot></slot>`}}return n([Ae({type:String})],e.prototype,"identifier",2),n([Ae({type:Number,reflect:!0,attribute:"tabindex"})],e.prototype,"tabIndex",2),n([Ae({type:Boolean,reflect:!0,attribute:"aria-disabled",converter:Ft})],e.prototype,"disabled",2),n([Ae({type:Boolean,reflect:!0,attribute:"aria-readonly",converter:Ft})],e.prototype,"readonly",2),n([x("disabled",{waitUntilFirstUpdate:!0})],e.prototype,"handleDisabledChange",1),e}import{customElement as Fr}from"lit/decorators.js";import{html as zr,LitElement as Ur}from"lit";import{css as Pr}from"lit";var zt=Pr`
|
|
1
|
+
import{b as ne,c as X,d as Ht,e as $t,f as Be,g as ae,h as j,i as le,j as It}from"../chunk-L4TDHAKL.js";import{a as Nt}from"../chunk-LVW3MHTI.js";import{a as Ye}from"../chunk-GPDDPZFH.js";import{a as Dt,b as k}from"../chunk-M6AATWPS.js";import{a as h,b as d,c as C,d as ze,e as Vt,f as M}from"../chunk-5WCOPF7O.js";import{a as g,d as u,e as at,f as oe,g as L,j as v}from"../chunk-4DFVJE2A.js";import{e as n}from"../chunk-VI2WKTN4.js";var Ot=[{identifier:"completionStatus",cardinality:"single",baseType:"string",value:"unknown",type:"outcome"},{identifier:"numAttempts",cardinality:"single",baseType:"integer",value:"0",type:"response"}],w=Symbol("item");var S=class extends v{constructor(){super();this.identifier="";this.adaptive="false";this.timeDependent=null;this._handleDisabledChange=(e,t)=>{this._interactionElements.forEach(r=>r.disabled=t)};this._handleReadonlyChange=(e,t)=>this._interactionElements.forEach(r=>r.readonly=t);this._context={identifier:this.getAttribute("identifier"),variables:Ot};this._initialContext={...this._context,variables:this._context.variables};this._feedbackElements=[];this._interactionElements=[];this.addEventListener("qti-register-variable",e=>{this._context={...this._context,variables:[...this._context.variables,e.detail.variable]},this._initialContext=this._context,e.stopPropagation()}),this.addEventListener("qti-register-feedback",e=>{e.stopPropagation();let t=e.detail;this._feedbackElements.push(t),(Number(this._context.variables.find(i=>i.identifier==="numAttempts")?.value)||0)>0&&t.checkShowFeedback(t.outcomeIdentifier)}),this.addEventListener("qti-register-interaction",e=>{e.stopPropagation(),this._interactionElements.push(e.target)}),this.addEventListener("end-attempt",e=>{let{responseIdentifier:t,countAttempt:r}=e.detail;this.validate(),this.updateResponseVariable(t,"true"),this.processResponse(r)}),this.addEventListener("qti-set-outcome-value",e=>{let{outcomeIdentifier:t,value:r}=e.detail;this.updateOutcomeVariable(t,r),e.stopPropagation()}),this.addEventListener("qti-interaction-response",this.handleUpdateResponseVariable)}get variables(){return this._context.variables.map(e=>({identifier:e.identifier,value:e.value,type:e.type,...e.type==="outcome"&&e.identifier==="SCORE"?{externalScored:e.externalScored}:{}}))}set variables(e){if(!Array.isArray(e)||e.some(t=>!("identifier"in t))){console.warn("variables property should be an array of VariableDeclaration");return}this._context={...this._context,variables:this._context.variables.map(t=>{let r=e.find(i=>i.identifier===t.identifier);return r?{...t,...r}:t})},this._context.variables.forEach(t=>{if(t.type==="response"){let r=this._interactionElements.find(i=>i.responseIdentifier===t.identifier);r&&(r.value=t.value)}})}async connectedCallback(){super.connectedCallback(),await this.updateComplete,this._emit("qti-assessment-item-connected",this)}set responses(e){if(e)for(let t of e){this.getResponse(t.responseIdentifier)&&this.updateResponseVariable(t.responseIdentifier,t.response);let i=this._interactionElements.find(a=>a.getAttribute("response-identifier")===t.responseIdentifier);i&&(i.value=t.response)}}render(){return u`<slot></slot>`}showCorrectResponse(e){let r=this._context.variables.filter(i=>"correctResponse"in i&&i.correctResponse).map(i=>({responseIdentifier:i.identifier,response:i.correctResponse}));for(let i of r){let a=this._interactionElements.find(s=>s.getAttribute("response-identifier")===i.responseIdentifier);a&&(a.correctResponse=e?i.response:"")}}processResponse(e=!0){this.validate();let t=this.querySelector("qti-response-processing");return!t||!t.process?!1:(t.process(),this.adaptive==="false"&&this.updateOutcomeVariable("completionStatus",this._getCompletionStatus()),e&&this.updateOutcomeVariable("numAttempts",(+this._context.variables.find(r=>r.identifier==="numAttempts")?.value+1).toString()),this._emit("qti-response-processed"),!0)}resetResponses(){this._context=this._initialContext}getResponse(e){return this.getVariable(e)}getOutcome(e){return this.getVariable(e)}getVariable(e){return this._context.variables.find(t=>t.identifier===e)||null}handleUpdateResponseVariable(e){let{responseIdentifier:t,response:r}=e.detail;this.updateResponseVariable(t,r)}updateResponseVariable(e,t){this._context={...this._context,variables:this._context.variables.map(r=>r.identifier!==e?r:{...r,value:t})},this._emit("qti-interaction-changed",{item:this.identifier,responseIdentifier:e,response:Array.isArray(t)?[...t]:t}),this.adaptive==="false"&&this.updateOutcomeVariable("completionStatus",this._getCompletionStatus())}updateOutcomeVariable(e,t){let r=this.getOutcome(e);if(!r){console.warn(`Can not set qti-outcome-identifier: ${e}, it is not available`);return}this._context={...this._context,variables:this._context.variables.map(i=>i.identifier!==e?i:{...i,value:r.cardinality==="single"?t:[...i.value,t]})},this._feedbackElements.forEach(i=>i.checkShowFeedback(e)),this._emit("qti-outcome-changed",{item:this.identifier,outcomeIdentifier:e,value:this._context.variables.find(i=>i.identifier===e)?.value})}validate(){return this._interactionElements.every(e=>e.validate())?!0:this._interactionElements.some(e=>e.validate())?!1:null}_getCompletionStatus(){let e=this.validate();return e===!0?"completed":e===!1?"incomplete":"not_attempted"}_emit(e,t=null){this.dispatchEvent(new CustomEvent(e,{bubbles:!0,composed:!0,detail:t}))}};n([d({type:String})],S.prototype,"title",2),n([d({type:String})],S.prototype,"identifier",2),n([d({type:String})],S.prototype,"adaptive",2),n([d({type:String})],S.prototype,"timeDependent",2),n([d({type:Boolean})],S.prototype,"disabled",2),n([M("disabled",{waitUntilFirstUpdate:!0})],S.prototype,"_handleDisabledChange",2),n([d({type:Boolean})],S.prototype,"readonly",2),n([M("readonly",{waitUntilFirstUpdate:!0})],S.prototype,"_handleReadonlyChange",2),n([Dt({context:w})],S.prototype,"_context",2),S=n([h("qti-assessment-item")],S);var ce=class extends v{constructor(){super(...arguments);this.identifier="";this.href=""}async connectedCallback(){super.connectedCallback();let e=new Event("qti-assessment-stimulus-ref-connected",{cancelable:!0,bubbles:!0,composed:!0});if(this.dispatchEvent(e)){let i=this.closest("qti-assessment-item").querySelector(`[data-stimulus-idref=${this.identifier}]`);i?await this.updateStimulusRef(i):console.warn(`Stimulus with data-stimulus-idref ${this.identifier} not found`)}}async updateStimulusRef(e){let t=await Nt().load(this.href).then(r=>r.htmlDoc());if(t){let r=t.querySelectorAll("qti-stimulus-body, qti-stylesheet");e.innerHTML="",e.append(...r)}}};n([d({type:String})],ce.prototype,"identifier",2),n([d({type:String})],ce.prototype,"href",2),ce=n([h("qti-assessment-stimulus-ref")],ce);var Pt={toAttribute:c=>c?"true":"false",fromAttribute:c=>c==="true"};function V(c,o){class e extends c{constructor(...i){super(...i);this.identifier="";this.tabIndex=0;this.disabled=!1;this.readonly=!1;this.internals=this.attachInternals()}handleDisabledChange(i,a){this.tabIndex=a?-1:0,a&&this.blur()}connectedCallback(){super.connectedCallback(),this.addEventListener("keyup",this._onKeyUp),this.addEventListener("click",this._onClick),this.dispatchEvent(new CustomEvent(`register-${o}`,{bubbles:!0,composed:!0}))}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("keyup",this._onKeyUp),this.removeEventListener("click",this._onClick),this.dispatchEvent(new CustomEvent(`unregister-${o}`,{bubbles:!0,composed:!0}))}_onKeyUp(i){i.altKey||i.code==="Space"&&(i.preventDefault(),this._activate())}_onClick(){this.disabled||this.readonly||(this.focus(),this._activate())}_activate(){this.disabled||this.readonly||this.dispatchEvent(new CustomEvent(`activate-${o}`,{bubbles:!0,composed:!0,detail:{identifier:this.identifier}}))}render(){return u`<slot></slot>`}}return n([d({type:String})],e.prototype,"identifier",2),n([d({type:Number,reflect:!0,attribute:"tabindex"})],e.prototype,"tabIndex",2),n([d({type:Boolean,reflect:!0,attribute:"aria-disabled",converter:Pt})],e.prototype,"disabled",2),n([d({type:Boolean,reflect:!0,attribute:"aria-readonly",converter:Pt})],e.prototype,"readonly",2),n([M("disabled",{waitUntilFirstUpdate:!0})],e.prototype,"handleDisabledChange",1),e}var Ft=g`
|
|
24
2
|
:host {
|
|
25
3
|
display: block;
|
|
26
4
|
}
|
|
27
|
-
`;var
|
|
5
|
+
`;var xe=class extends v{render(){return u`<slot name="qti-rubric-block"></slot><slot></slot>`}};xe.styles=Ft,xe=n([h("qti-item-body")],xe);var Ue=class extends v{render(){return u`<slot></slot>`}connectedCallback(){this.parentElement.tagName.endsWith("INTERACTION")&&this.setAttribute("slot","prompt")}};Ue=n([h("qti-prompt")],Ue);var Xe=class extends v{constructor(){super(...arguments);this.styleElement=null}firstUpdated(e){super.firstUpdated(e);let t=this.getAttribute("href");if(t!==null&&fetch(t).then(r=>r.text()).then(r=>{let i=this.minifyCss(r);this.styleElement=document.createElement("style"),this.styleElement.media="screen",this.styleElement.textContent=`@scope {${i}}`,this.parentElement?this.parentElement.appendChild(this.styleElement):console.warn("No parent element to append the scoped stylesheet to.")}).catch(r=>{console.error("Failed to load stylesheet:",r)}),this.textContent!==null&&this.textContent.trim()!==""){let r=this.minifyCss(this.textContent);this.styleElement=document.createElement("style"),this.styleElement.media="screen",this.styleElement.textContent=`@scope {${r}}`,this.parentElement?this.parentElement.appendChild(this.styleElement):console.warn("No parent element to append the scoped stylesheet to.")}}minifyCss(e){return e.replace(/\/\*[\s\S]*?\*\//g,"").replace(/\s+/g," ").replace(/\s*([{}:;])\s*/g,"$1").trim()}disconnectedCallback(){if(this.styleElement)try{this.styleElement.remove()}catch(e){console.error("Could not remove stylesheet:",e)}super.disconnectedCallback()}};Xe=n([h("qti-stylesheet")],Xe);var W=class extends v{render(){return u`<slot></slot>`}defaultValues(o){let e=Array.from(this.querySelectorAll("qti-default-value > qti-value"));if(e.length===0)return null;let t=e.map(r=>r.innerHTML.trim());return t.length>1||o.cardinality==="multiple"||o.cardinality==="ordered"?t:t[0]}};W=n([h("qti-variabledeclaration")],W);var N=class extends W{constructor(){super(...arguments);this.externalScored=null}render(){let e=this.itemContext?.variables.find(t=>t.identifier===this.identifier)?.value;return u`${JSON.stringify(e,null,2)}`}get interpolationTable(){let e=this.querySelector("qti-interpolation-table");if(e){let t=new Map;for(let r of e.querySelectorAll("qti-interpolation-table-entry")){!r.getAttribute("source-value")&&r.getAttribute("target-value")&&console.error("source-value or target-value is missing in qti-interpolation-table-entry");let i=parseInt(r.getAttribute("source-value")),a=parseInt(r.getAttribute("target-value"));(isNaN(i)||isNaN(a))&&console.error("source-value or target-value is not a number in qti-interpolation-table-entry"),t.set(i,a)}return t}return null}connectedCallback(){super.connectedCallback();let e={identifier:this.identifier,cardinality:this.cardinality,baseType:this.baseType,type:"outcome",value:null,interpolationTable:this.interpolationTable,externalScored:this.externalScored};e.value=this.defaultValues(e),this.dispatchEvent(new CustomEvent("qti-register-variable",{bubbles:!0,composed:!0,detail:{variable:e}}))}};N.styles=[g`
|
|
28
6
|
:host {
|
|
29
7
|
display: none;
|
|
30
8
|
}
|
|
31
|
-
`],n([
|
|
9
|
+
`],n([d({type:String,attribute:"base-type"})],N.prototype,"baseType",2),n([d({type:String,attribute:"external-scored"})],N.prototype,"externalScored",2),n([d({type:String})],N.prototype,"identifier",2),n([d({type:String})],N.prototype,"cardinality",2),n([k({context:w,subscribe:!0}),C()],N.prototype,"itemContext",2),N=n([h("qti-outcome-declaration")],N);var F=class extends W{render(){let o=this.itemContext?.variables.find(e=>e.identifier===this.identifier)?.value;return u`${JSON.stringify(o,null,2)}`}connectedCallback(){super.connectedCallback();let o={baseType:this.baseType,identifier:this.identifier,correctResponse:this.correctResponse,cardinality:this.cardinality||"single",mapping:this.mapping,value:null,type:"response",candidateResponse:null};o.value=this.defaultValues(o),this.dispatchEvent(new CustomEvent("qti-register-variable",{bubbles:!0,composed:!0,detail:{variable:o}}))}get correctResponse(){let o,e=this.querySelector("qti-correct-response");if(e){let t=e.querySelectorAll("qti-value");if(this.cardinality==="single"&&t.length>0)o=t[0].textContent,t[0].remove();else if(this.cardinality!=="single"){o=[];for(let r=0;r<t.length;r++)o.push(t[r].textContent),t[r].remove()}}return o}get mapping(){return this.querySelector("qti-mapping")}};F.styles=[g`
|
|
32
10
|
:host {
|
|
33
11
|
display: none;
|
|
34
12
|
}
|
|
35
|
-
`],n([
|
|
13
|
+
`],n([d({type:String,attribute:"base-type"})],F.prototype,"baseType",2),n([d({type:String})],F.prototype,"identifier",2),n([d({type:String})],F.prototype,"cardinality",2),n([k({context:w,subscribe:!0}),C()],F.prototype,"itemContext",2),F=n([h("qti-response-declaration")],F);var je=class extends v{};je=n([h("qti-companion-materials-info")],je);var We=class extends v{render(){return u`<slot></slot>`}};We=n([h("qti-content-body")],We);var H=class extends v{handleclassNamesChange(){this.classNames.split(" ").forEach(e=>{switch(e){case"qti-rubric-discretionary-placement":this.setAttribute("slot","qti-rubric-block");break;case"qti-rubric-inline":this.setAttribute("slot","");break;default:break}})}render(){return u`<slot></slot>`}connectedCallback(){super.connectedCallback(),this.setAttribute("slot","qti-rubric-block")}};H.styles=g`
|
|
36
14
|
:host {
|
|
37
15
|
display: block;
|
|
38
16
|
}
|
|
39
|
-
`,n([
|
|
17
|
+
`,n([d({type:String})],H.prototype,"id",2),n([d({type:String})],H.prototype,"use",2),n([d({type:String})],H.prototype,"view",2),n([d({type:String,attribute:"class"})],H.prototype,"classNames",2),n([M("classNames",{waitUntilFirstUpdate:!0})],H.prototype,"handleclassNamesChange",1),H=n([h("qti-rubric-block")],H);var dr=()=>new Intl.NumberFormat().format(.1).replace(/\d/g,""),Ee=c=>{if(typeof c=="string")return c;let o=dr();return o==="."?c.toLocaleString():c.toString().replace(".","").replace(o,".")};function lt(c){return c==null}function Ce(c){return c.replace(/([^:]\/)\/+/g,"$1").replace(/\/\//g,"/").replace("http:/","http://").replace("https:/","https://")}var R=class extends v{connectedCallback(){super.connectedCallback(),this.dispatchEvent(new CustomEvent("qti-register-feedback",{bubbles:!0,composed:!0,detail:this}))}checkShowFeedback(o){let e=this._context.variables.find(r=>r.identifier===o)||null;if(this.outcomeIdentifier!==o||!e)return;let t=!1;Array.isArray(e.value)?t=e.value.includes(this.identifier):t=!lt(this.identifier)&&!lt(e?.value)&&this.identifier===e.value||!1,this.showFeedback(t)}showFeedback(o){this.showStatus=o&&this.showHide==="show"||!o&&this.showHide==="hide"?"on":"off"}};n([d({type:String,attribute:"show-hide"})],R.prototype,"showHide",2),n([d({type:String,attribute:"outcome-identifier"})],R.prototype,"outcomeIdentifier",2),n([d({type:String})],R.prototype,"identifier",2),n([d({type:String,attribute:!1})],R.prototype,"showStatus",2),n([k({context:w,subscribe:!0}),C()],R.prototype,"_context",2);var qe=class extends R{render(){return u` <slot part="feedback" class="feedback ${this.showStatus}"></slot> `}firstUpdated(o){this.checkShowFeedback(this.outcomeIdentifier)}};qe.styles=g`
|
|
40
18
|
:host {
|
|
41
19
|
display: block;
|
|
42
20
|
}
|
|
@@ -46,21 +24,21 @@ var Rr=Object.defineProperty;var Ar=Object.getOwnPropertyDescriptor;var n=(c,o,e
|
|
|
46
24
|
.off {
|
|
47
25
|
display: none;
|
|
48
26
|
}
|
|
49
|
-
`,
|
|
27
|
+
`,qe=n([h("qti-feedback-block")],qe);var Te=class extends R{constructor(){super(...arguments);this.render=()=>u` <slot part="feedback" class="${this.showStatus}"></slot> `}};Te.styles=g`
|
|
50
28
|
.on {
|
|
51
29
|
display: inline-block;
|
|
52
30
|
}
|
|
53
31
|
.off {
|
|
54
32
|
display: none;
|
|
55
33
|
}
|
|
56
|
-
`,
|
|
34
|
+
`,Te=n([h("qti-feedback-inline")],Te);var we=class extends R{render(){return u`
|
|
57
35
|
<dialog class="qti-dialog" part="feedback" ?open="${this.showStatus==="on"}">
|
|
58
36
|
<slot></slot>
|
|
59
37
|
<div style="margin-top: var(--qti-gap-size); text-align: center;">
|
|
60
38
|
<button class="button close-button" @click="${this.closeFeedback}"></button>
|
|
61
39
|
</div>
|
|
62
40
|
</dialog>
|
|
63
|
-
`}openFeedback(){let o=this.shadowRoot?.querySelector("dialog");o&&!o.open&&o.showModal()}closeFeedback(){let o=this.shadowRoot?.querySelector("dialog");o&&o.open&&(o.close(),this.showStatus="off")}firstUpdated(){this.showStatus==="on"&&this.openFeedback()}updated(o){o.has("showStatus")&&(this.showStatus==="on"?this.openFeedback():this.closeFeedback())}};
|
|
41
|
+
`}openFeedback(){let o=this.shadowRoot?.querySelector("dialog");o&&!o.open&&o.showModal()}closeFeedback(){let o=this.shadowRoot?.querySelector("dialog");o&&o.open&&(o.close(),this.showStatus="off")}firstUpdated(){this.showStatus==="on"&&this.openFeedback()}updated(o){o.has("showStatus")&&(this.showStatus==="on"?this.openFeedback():this.closeFeedback())}};we.styles=g`
|
|
64
42
|
.qti-dialog {
|
|
65
43
|
background: var(--qti-bg);
|
|
66
44
|
border: var(--qti-border-thickness) var(--qti-border-style) var(--qti-border-color);
|
|
@@ -109,7 +87,7 @@ var Rr=Object.defineProperty;var Ar=Object.getOwnPropertyDescriptor;var n=(c,o,e
|
|
|
109
87
|
display: inline-block;
|
|
110
88
|
line-height: 1.5;
|
|
111
89
|
}
|
|
112
|
-
`,
|
|
90
|
+
`,we=n([h("qti-modal-feedback")],we);var K=c=>c??L;var x=class extends v{constructor(){super();this.disabled=!1;this.readonly=!1;this._internals=this.attachInternals()}reportValidity(){return this._internals.reportValidity()}reset(){this.value=""}get correctResponse(){return this._correctResponse}set correctResponse(e){this._correctResponse=e}connectedCallback(){super.connectedCallback(),this.dispatchEvent(new CustomEvent("qti-register-interaction",{bubbles:!0,composed:!0,cancelable:!1,detail:{responseIdentifier:this.responseIdentifier}}))}saveResponse(e){this.dispatchEvent(new CustomEvent("qti-interaction-response",{bubbles:!0,composed:!0,cancelable:!1,detail:{responseIdentifier:this.responseIdentifier,response:Array.isArray(e)?[...e]:e}}))}};x.formAssociated=!0,n([d({type:String,attribute:"response-identifier"})],x.prototype,"responseIdentifier",2),n([d({reflect:!0,type:Boolean})],x.prototype,"disabled",2),n([d({reflect:!0,type:Boolean})],x.prototype,"readonly",2),n([C()],x.prototype,"_correctResponse",2);var zt=g`
|
|
113
91
|
/* PK: display host as block, else design will be collapsed */
|
|
114
92
|
:host {
|
|
115
93
|
display: block;
|
|
@@ -120,7 +98,7 @@ var Rr=Object.defineProperty;var Ar=Object.getOwnPropertyDescriptor;var n=(c,o,e
|
|
|
120
98
|
height: 100%;
|
|
121
99
|
border: 0;
|
|
122
100
|
}
|
|
123
|
-
`;var
|
|
101
|
+
`;var _=class extends x{constructor(){super(...arguments);this._rows=5;this._value=""}handleclassNamesChange(e,t){let r=t.split(" "),i=!1;if(r.forEach(a=>{if(a.startsWith("qti-height-lines-")){let s=a.replace("qti-height-lines-","");this._rows=parseInt(s),i=!0}}),!i&&this.expectedLength){let a=Math.ceil(this.expectedLength/50);this._rows=a}}get value(){return this._value}set value(e){if(typeof e=="string"){this._value=e;let t=new FormData;t.append(this.responseIdentifier,e),this._internals.setFormValue(t),this.validate()}else throw new Error("Value must be a string")}validate(){let e=this.shadowRoot.querySelector("textarea");if(!e)return!1;if(this.patternMask&&this.dataPatternmaskMessage){this._internals.setValidity({}),e.setCustomValidity("");let t=this.patternMask.startsWith("^")&&this.patternMask.endsWith("$")?this.patternMask:`^${this.patternMask}$`,r=new RegExp(t);e.checkValidity()&&r.test(e.value)||(this._internals.setValidity({customError:!0},this.dataPatternmaskMessage),e.setCustomValidity(this.dataPatternmaskMessage))}else{let t=e.checkValidity();this._internals.setValidity(t?{}:{customError:!1})}return this._value!==""&&e.checkValidity()}reportValidity(){let e=this.shadowRoot.querySelector("textarea");if(!e)return!1;let t=this.validate();return t||e.reportValidity(),t}render(){return u`<slot name="prompt"></slot
|
|
124
102
|
><textarea
|
|
125
103
|
part="textarea"
|
|
126
104
|
name="${this.responseIdentifier}"
|
|
@@ -131,12 +109,12 @@ var Rr=Object.defineProperty;var Ar=Object.getOwnPropertyDescriptor;var n=(c,o,e
|
|
|
131
109
|
@keyup="${this.textChanged}"
|
|
132
110
|
@change="${this.textChanged}"
|
|
133
111
|
@blur="${e=>{this.reportValidity()}}"
|
|
134
|
-
placeholder="${
|
|
112
|
+
placeholder="${K(this.placeholderText?this.placeholderText:void 0)}"
|
|
135
113
|
rows="${this._rows}"
|
|
136
114
|
?disabled="${this.disabled}"
|
|
137
115
|
?readonly="${this.readonly}"
|
|
138
116
|
.value=${this._value}
|
|
139
|
-
></textarea>`}textChanged(e){if(this.disabled||this.readonly)return;let t=e.target;this.setEmptyAttribute(t.value),this._value!==t.value&&(this.value=t.value,this.saveResponse(t.value))}setEmptyAttribute(e){this.setAttribute("empty",e===""?"true":"false")}};
|
|
117
|
+
></textarea>`}textChanged(e){if(this.disabled||this.readonly)return;let t=e.target;this.setEmptyAttribute(t.value),this._value!==t.value&&(this.value=t.value,this.saveResponse(t.value))}setEmptyAttribute(e){this.setAttribute("empty",e===""?"true":"false")}};_.styles=zt,n([C()],_.prototype,"_rows",2),n([d({type:Number,attribute:"expected-length"})],_.prototype,"expectedLength",2),n([d({type:String,attribute:"pattern-mask"})],_.prototype,"patternMask",2),n([d({type:String,attribute:"placeholder-text"})],_.prototype,"placeholderText",2),n([d({type:String,attribute:"data-patternmask-message"})],_.prototype,"dataPatternmaskMessage",2),n([C()],_.prototype,"_value",2),n([d({type:String,attribute:"class"})],_.prototype,"classNames",2),n([M("classNames")],_.prototype,"handleclassNamesChange",1),_=n([h("qti-extended-text-interaction")],_);var Bt=()=>new pt,pt=class{},ct=new WeakMap,Rs=j(class extends It{render(c){return L}update(c,[o]){let e=o!==this.Y;return e&&this.Y!==void 0&&this.rt(void 0),(e||this.lt!==this.ct)&&(this.Y=o,this.ht=c.options?.host,this.rt(this.ct=c.element)),L}rt(c){if(this.isConnected||(c=void 0),typeof this.Y=="function"){let o=this.ht??globalThis,e=ct.get(o);e===void 0&&(e=new WeakMap,ct.set(o,e)),e.get(this.Y)!==void 0&&this.Y.call(this.ht,void 0),e.set(this.Y,c),c!==void 0&&this.Y.call(this.ht,c)}else this.Y.value=c}get lt(){return typeof this.Y=="function"?ct.get(this.ht??globalThis)?.get(this.Y):this.Y?.value}disconnected(){this.lt===this.ct&&this.rt(void 0)}reconnected(){this.rt(this.ct)}});var Yt=g`
|
|
140
118
|
:host {
|
|
141
119
|
display: inline-block;
|
|
142
120
|
}
|
|
@@ -218,7 +196,7 @@ var Rr=Object.defineProperty;var Ar=Object.getOwnPropertyDescriptor;var n=(c,o,e
|
|
|
218
196
|
width: 57rem;
|
|
219
197
|
min-width: 57rem;
|
|
220
198
|
}
|
|
221
|
-
`;var
|
|
199
|
+
`;var $=class extends x{constructor(){super(...arguments);this._value="";this.inputRef=Bt()}get value(){return this._value}set value(e){if(typeof e=="string"){this._value=e;let t=new FormData;t.append(this.responseIdentifier,e),this._internals.setFormValue(t),this.validate()}else throw new Error("Value must be a string")}validate(){let e=this.shadowRoot.querySelector("input");if(!e)return!1;if(this.patternMask&&this.dataPatternmaskMessage)this._internals.setValidity({}),e.setCustomValidity(""),e.checkValidity()||(this._internals.setValidity({customError:!0},this.dataPatternmaskMessage),e.setCustomValidity(this.dataPatternmaskMessage));else{let t=e.checkValidity();this._internals.setValidity(t?{}:{customError:!1})}return this._value!==""&&e.checkValidity()}render(){return u`
|
|
222
200
|
<input
|
|
223
201
|
part="input"
|
|
224
202
|
name="${this.responseIdentifier}"
|
|
@@ -229,15 +207,15 @@ var Rr=Object.defineProperty;var Ar=Object.getOwnPropertyDescriptor;var n=(c,o,e
|
|
|
229
207
|
@keyup="${this.textChanged}"
|
|
230
208
|
@change="${this.textChanged}"
|
|
231
209
|
type="${this.patternMask=="[0-9]*"?"number":"text"}"
|
|
232
|
-
placeholder="${
|
|
210
|
+
placeholder="${K(this.placeholderText?this.placeholderText:void 0)}"
|
|
233
211
|
.value="${this._value}"
|
|
234
|
-
pattern="${
|
|
212
|
+
pattern="${K(this.patternMask?this.patternMask:void 0)}"
|
|
235
213
|
maxlength=${1e3}
|
|
236
214
|
?disabled="${this.disabled}"
|
|
237
215
|
?readonly="${this.readonly}"
|
|
238
216
|
/>
|
|
239
217
|
<div part="correct">${this._correctResponse}</div>
|
|
240
|
-
`}textChanged(e){if(this.disabled||this.readonly)return;let t=e.target;this.setEmptyAttribute(t.value),this._value!==t.value&&(this.value=t.value,this.saveResponse(t.value))}reportValidity(){let e=this.shadowRoot.querySelector("input");if(!e)return!1;let t=this.validate();return t||e.reportValidity(),t}reset(){this._value=""}setEmptyAttribute(e){this.setAttribute("empty",e===""?"true":"false")}}
|
|
218
|
+
`}textChanged(e){if(this.disabled||this.readonly)return;let t=e.target;this.setEmptyAttribute(t.value),this._value!==t.value&&(this.value=t.value,this.saveResponse(t.value))}reportValidity(){let e=this.shadowRoot.querySelector("input");if(!e)return!1;let t=this.validate();return t||e.reportValidity(),t}reset(){this._value=""}setEmptyAttribute(e){this.setAttribute("empty",e===""?"true":"false")}};$.styles=Yt,n([d({type:Number,attribute:"expected-length"})],$.prototype,"expectedLength",2),n([d({type:String,attribute:"pattern-mask"})],$.prototype,"patternMask",2),n([d({type:String,attribute:"placeholder-text"})],$.prototype,"placeholderText",2),n([d({type:String,attribute:"data-patternmask-message"})],$.prototype,"dataPatternmaskMessage",2),n([C()],$.prototype,"_value",2),$=n([h("qti-text-entry-interaction")],$);var J=(c,o)=>{class e extends c{constructor(){super(...arguments);this._choiceElements=[];this.minChoices=0;this.maxChoices=1;this._handleDisabledChange=(i,a)=>{this._choiceElements.forEach(s=>s.disabled=a)};this._handleReadonlyChange=(i,a)=>{this._choiceElements.forEach(s=>s.readonly=a)};this._value=""}_handleMaxChoicesChange(i,a){this._determineInputType()}get value(){return Array.isArray(this._value)?this._value.join(","):this._value}set value(i){if(this.maxChoices>1&&typeof i=="string"?this._value=i.split(","):this._value=i,Array.isArray(this._value)){let a=new FormData;this._value.forEach(s=>{a.append(this.responseIdentifier,s)}),this._internals.setFormValue(a)}else this._internals.setFormValue(this._value);this._updateChoiceSelection()}get correctResponse(){return this._correctResponse}set correctResponse(i){this._correctResponse=i;let a=Array.isArray(i)?i:[i];this._choiceElements.forEach(s=>{s.internals.states.delete("correct-response"),s.internals.states.delete("incorrect-response"),a.length>0&&(a.includes(s.identifier)?s.internals.states.add("correct-response"):s.internals.states.add("incorrect-response"))})}connectedCallback(){super.connectedCallback(),this.addEventListener(`register-${o}`,this._registerChoiceElement),this.addEventListener(`unregister-${o}`,this._unregisterChoiceElement),this.addEventListener(`activate-${o}`,this._choiceElementSelectedHandler)}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener(`register-${o}`,this._registerChoiceElement),this.removeEventListener(`unregister-${o}`,this._unregisterChoiceElement),this.removeEventListener(`activate-${o}`,this._choiceElementSelectedHandler)}validate(){let i=this._choiceElements.filter(p=>this._getChoiceChecked(p)),a=i.length,s=!0,l="";return this.maxChoices!==0&&a>this.maxChoices?(s=!1,l=this.dataset.maxSelectionsMessage||`You can select at most ${this.maxChoices} choices.`):a<this.minChoices&&(s=!1,l=this.dataset.minSelectionsMessage||`You must select at least ${this.minChoices} choices.`),i.length>0&&this._internals.setValidity(s?{}:{customError:!0},l,i[a-1]||this._choiceElements[0]||this),this.reportValidity(),s}reportValidity(){return this._validationMessageElement&&(this._internals.validity.valid?(this._validationMessageElement.textContent="",this._validationMessageElement.style.display="none"):(this._validationMessageElement.textContent=this._internals.validationMessage,this._validationMessageElement.style.display="block")),this._internals.validity.valid}_registerChoiceElement(i){i.stopPropagation();let a=i.target;a.disabled=this.disabled,this._choiceElements.push(a),this._setInputType(a)}_unregisterChoiceElement(i){i.stopPropagation();let a=i.target;this._choiceElements=this._choiceElements.filter(s=>s!==a)}_determineInputType(){this._choiceElements.forEach(i=>{this._setInputType(i)})}_setInputType(i){this._internals.ariaLabel=this.maxChoices===1?"radio-group":"checkbox-group";let a=this.maxChoices===1?"radio":"checkbox";i.internals.role=a,i.internals.states.delete(a==="radio"?"checkbox":"radio"),i.internals.states.add(a)}_choiceElementSelectedHandler(i){this._toggleChoiceChecked(i.target),this.maxChoices===1&&this._choiceElements.forEach(a=>{a.identifier!==i.detail.identifier&&this._setChoiceChecked(a,!1)}),this._handleChoiceSelection()}_setChoiceChecked(i,a){i.internals?.states&&(a?(i.internals.states.add("--checked"),i.internals.ariaChecked="true"):(i.internals.states.delete("--checked"),i.internals.ariaChecked="false"))}_getChoiceChecked(i){return i.internals.states.has("--checked")}_toggleChoiceChecked(i){let a=this._getChoiceChecked(i);this._setChoiceChecked(i,!a)}_handleChoiceSelection(){let a=this._choiceElements.filter(s=>this._getChoiceChecked(s)).map(s=>s.identifier);this.value=this.maxChoices===1?a[0]||"":a,this.validate(),this.saveResponse(this._value)}_updateChoiceSelection(){let i=Array.isArray(this._value)?this._value:[this._value];this._choiceElements.forEach(a=>{let s=i.includes(a.identifier);this._setChoiceChecked(a,s)})}}return n([ze("#validationMessage")],e.prototype,"_validationMessageElement",2),n([d({type:Number,attribute:"min-choices"})],e.prototype,"minChoices",2),n([d({type:Number,attribute:"max-choices"})],e.prototype,"maxChoices",2),n([M("maxChoices",{waitUntilFirstUpdate:!0})],e.prototype,"_handleMaxChoicesChange",1),n([M("disabled",{waitUntilFirstUpdate:!0})],e.prototype,"_handleDisabledChange",2),n([M("readonly",{waitUntilFirstUpdate:!0})],e.prototype,"_handleReadonlyChange",2),e};var Ke=class extends J(x,"qti-hottext"){constructor(){super(...arguments);this.render=()=>u`<slot></slot>`}};Ke=n([h("qti-hottext-interaction")],Ke);var Me=class extends le{constructor(o){if(super(o),this.it=L,o.type!==ae.CHILD)throw Error(this.constructor.directiveName+"() can only be used in child bindings")}render(o){if(o===L||o==null)return this._t=void 0,this.it=o;if(o===oe)return o;if(typeof o!="string")throw Error(this.constructor.directiveName+"() called with a non-string value");if(o===this.it)return this._t;this.it=o;let e=[o];return e.raw=e,this._t={_$litType$:this.constructor.resultType,strings:e,values:[]}}};Me.directiveName="unsafeHTML",Me.resultType=1;var Z=j(Me);var G=class extends x{constructor(){super(...arguments);this.options=[];this.correctOption="";this.dataPrompt="select"}static get styles(){return[g`
|
|
241
219
|
:host {
|
|
242
220
|
display: inline-block;
|
|
243
221
|
}
|
|
@@ -259,15 +237,15 @@ var Rr=Object.defineProperty;var Ar=Object.getOwnPropertyDescriptor;var n=(c,o,e
|
|
|
259
237
|
/* position-anchor: --infobox; */
|
|
260
238
|
/* top: anchor(bottom); */
|
|
261
239
|
}
|
|
262
|
-
`]}render(){return
|
|
240
|
+
`]}render(){return u`
|
|
263
241
|
<select part="select" @change="${this.choiceSelected}" ?disabled="${this.disabled}" ?readonly="${this.readonly}">
|
|
264
|
-
${this.options.map(e=>
|
|
265
|
-
<option value="${e.value}" ?selected="${e.selected}">${
|
|
242
|
+
${this.options.map(e=>u`
|
|
243
|
+
<option value="${e.value}" ?selected="${e.selected}">${Z(e.textContent)}</option>
|
|
266
244
|
`)}
|
|
267
245
|
</select>
|
|
268
246
|
|
|
269
|
-
${
|
|
270
|
-
`}connectedCallback(){super.connectedCallback(),this.addEventListener("on-dropdown-selected",this.choiceSelected);let e=Array.from(this.querySelectorAll("qti-inline-choice"));this.options=[{textContent:this.dataPrompt,value:"",selected:!1},...e.map(t=>({textContent:t.innerHTML,value:t.getAttribute("identifier"),selected:!1}))]}disconnectedCallback(){this.removeEventListener("on-dropdown-selected",this.choiceSelected)}validate(){let e=this.options.find(t=>t.selected);return e?e.value!=="":!1}reset(){this.options=this.options.map((e,t)=>({...e,selected:t===0}))}set value(e){this.options=this.options.map(t=>(e===t.value&&(t.selected=!0),t))}get value(){return this.options.find(e=>e.selected).value}set correctResponse(e){if(e===""){this.correctOption="";return}this.correctOption=`<span part="correct-option">${this.options.find(t=>e===t.value).textContent}</span>`}choiceSelected(e){let t=e.target.value;this.options=this.options.map(r=>({...r,selected:r.value===t})),this.saveResponse(t)}};
|
|
247
|
+
${Z(this.correctOption)}
|
|
248
|
+
`}connectedCallback(){super.connectedCallback(),this.addEventListener("on-dropdown-selected",this.choiceSelected);let e=Array.from(this.querySelectorAll("qti-inline-choice"));this.options=[{textContent:this.dataPrompt,value:"",selected:!1},...e.map(t=>({textContent:t.innerHTML,value:t.getAttribute("identifier"),selected:!1}))]}disconnectedCallback(){this.removeEventListener("on-dropdown-selected",this.choiceSelected)}validate(){let e=this.options.find(t=>t.selected);return e?e.value!=="":!1}reset(){this.options=this.options.map((e,t)=>({...e,selected:t===0}))}set value(e){this.options=this.options.map(t=>(e===t.value&&(t.selected=!0),t))}get value(){return this.options.find(e=>e.selected).value}set correctResponse(e){if(e===""){this.correctOption="";return}this.correctOption=`<span part="correct-option">${this.options.find(t=>e===t.value).textContent}</span>`}choiceSelected(e){let t=e.target.value;this.options=this.options.map(r=>({...r,selected:r.value===t})),this.saveResponse(t)}};G.inputWidthClass=["","qti-input-width-2","qti-input-width-1","qti-input-width-3","qti-input-width-4","qti-input-width-6","qti-input-width-10","qti-input-width-15","qti-input-width-20","qti-input-width-72"],n([C()],G.prototype,"options",2),n([C()],G.prototype,"correctOption",2),n([d({attribute:"data-prompt",type:String})],G.prototype,"dataPrompt",2),G=n([h("qti-inline-choice-interaction")],G);var Je=(c,o)=>{class e extends c{constructor(){super(...arguments);this.shuffle="false"}connectedCallback(){super.connectedCallback(),this._applyShuffle()}updated(i){i.has("shuffle")&&this._applyShuffle()}_applyShuffle(){this.shuffle==="true"?this._shuffleChoices():this._resetShuffleChoices()}_shuffleChoices(){let i=Array.from(this.querySelectorAll(o)),a=i.filter(b=>b.hasAttribute("fixed")),s=i.filter(b=>!b.hasAttribute("fixed"));if(s.length<=1){console.warn("Shuffling is not possible with fewer than 2 non-fixed elements.");return}let l=[...s],p=!1,m=0;for(;!p&&m<10;){m++;for(let b=s.length-1;b>0;b--){let y=Math.floor(Math.random()*(b+1));[s[b],s[y]]=[s[y],s[b]]}p=!s.every((b,y)=>b===l[y])}p||console.warn("Failed to shuffle the choices after multiple attempts.");let f=1;[...a,...s].forEach(b=>{b.style.setProperty("order",String(f++))})}_resetShuffleChoices(){this.querySelectorAll(o).forEach(i=>{i.style.setProperty("order","initial")})}}return n([d({type:String,reflect:!0})],e.prototype,"shuffle",2),e};var Ut=(c,o)=>{class e extends c{constructor(){super(...arguments);this._classes=[];this._allLabels=["qti-labels-decimal","qti-labels-lower-alpha","qti-labels-upper-alpha"];this._allLabelSuffixes=["qti-labels-suffix-period","qti-labels-suffix-parenthesis"]}set class(i){i&&(this._classes=i.split(" "),this._addLabels())}get class(){return this._classes?.join(" ")||""}updated(i){super.updated(i),i.has("shuffle")&&this._addLabels()}_addLabels(){let i=this._classes.some(s=>this._allLabels.includes(s)||this._allLabelSuffixes.includes(s)),a=s=>!isNaN(+s);if(i){let l=Array.from(this.querySelectorAll("qti-simple-choice")).map(p=>p).map((p,m)=>({el:p,order:a(p.style.order)?+p.style.order:m+1})).sort((p,m)=>p.order-m.order).map(p=>p.el);for(let p=0;p<l.length;p++)l[p].marker=this._getLabel(p+1)}}_getLabel(i){let a=this._classes.filter(p=>this._allLabels.includes(p)).pop(),s=this._classes.filter(p=>this._allLabelSuffixes.includes(p)).pop();!a&&s&&(a="qti-labels-upper-alpha");let l="";switch(a){case"qti-labels-decimal":l=`${i}`;break;case"qti-labels-lower-alpha":l=`${String.fromCharCode(97+i-1)}`;break;case"qti-labels-upper-alpha":l=`${String.fromCharCode(65+i-1)}`;break}return s==="qti-labels-suffix-period"?l+=".":s==="qti-labels-suffix-parenthesis"&&(l+=")"),l}}return n([d({type:String,reflect:!0})],e.prototype,"class",1),e};var Xt=g`
|
|
271
249
|
[part='slot'] {
|
|
272
250
|
display: flex;
|
|
273
251
|
flex-direction: column;
|
|
@@ -305,15 +283,15 @@ var Rr=Object.defineProperty;var Ar=Object.getOwnPropertyDescriptor;var n=(c,o,e
|
|
|
305
283
|
:host([orientation='horizontal']) [part='slot'] {
|
|
306
284
|
flex-direction: row;
|
|
307
285
|
}
|
|
308
|
-
`;var
|
|
286
|
+
`;var pe=class extends Ut(Je(J(x,"qti-simple-choice"),"qti-simple-choice"),"qti-simple-choice"){constructor(){super(),this._internals.role="group"}render(){return u`
|
|
309
287
|
<slot part="prompt" name="prompt"></slot><slot part="slot"></slot>
|
|
310
288
|
<div part="message" role="alert" id="validationMessage"></div>
|
|
311
|
-
`}};
|
|
289
|
+
`}};pe.styles=Xt,n([d({type:String})],pe.prototype,"orientation",2),pe=n([h("qti-choice-interaction")],pe);var Se=class extends x{constructor(){super(...arguments);this._file=null;this._base64=null}reset(){this._file=null,this._base64=null,this.saveResponse(null)}validate(){return this._base64!==null}get value(){return this._base64}set value(e){if(typeof e=="string")this._base64=e,this.saveResponse(e);else if(e===null)this.reset();else throw new Error("Value must be a Base64-encoded string or null")}static get properties(){return{...x.properties}}render(){return u`
|
|
312
290
|
<div>
|
|
313
291
|
<slot name="prompt"></slot>
|
|
314
292
|
<input type="file" @change="${this._onFileChange}" ?disabled="${this.disabled}" ?readonly="${this.readonly}" />
|
|
315
293
|
</div>
|
|
316
|
-
`}async _onFileChange(e){let t=e.target;t.files&&t.files.length>0&&(this._file=t.files[0],this._base64=await this._convertToBase64(this._file),this.saveResponse(this._base64),this.dispatchEvent(new CustomEvent("qti-interaction-response",{detail:{response:this._base64}})))}_convertToBase64(e){return new Promise((t,r)=>{let i=new FileReader;i.onload=()=>t(i.result),i.onerror=()=>r(i.error),i.readAsDataURL(e)})}};
|
|
294
|
+
`}async _onFileChange(e){let t=e.target;t.files&&t.files.length>0&&(this._file=t.files[0],this._base64=await this._convertToBase64(this._file),this.saveResponse(this._base64),this.dispatchEvent(new CustomEvent("qti-interaction-response",{detail:{response:this._base64}})))}_convertToBase64(e){return new Promise((t,r)=>{let i=new FileReader;i.onload=()=>t(i.result),i.onerror=()=>r(i.error),i.readAsDataURL(e)})}};Se.styles=[g`
|
|
317
295
|
:host {
|
|
318
296
|
display: block;
|
|
319
297
|
margin: 1em 0;
|
|
@@ -322,11 +300,11 @@ var Rr=Object.defineProperty;var Ar=Object.getOwnPropertyDescriptor;var n=(c,o,e
|
|
|
322
300
|
display: block;
|
|
323
301
|
margin-top: 0.5em;
|
|
324
302
|
}
|
|
325
|
-
`],
|
|
303
|
+
`],Se=n([h("qti-upload-interaction")],Se);var Re=class extends v{render(){return u`<slot></slot>`}process(){let o=new dt,e=[...this.children];o.process(e)}};Re.styles=[g`
|
|
326
304
|
:host {
|
|
327
305
|
display: none;
|
|
328
306
|
}
|
|
329
|
-
`],
|
|
307
|
+
`],Re=n([h("qti-outcome-processing")],Re);var dt=class{process(o){for(let e of o)e.process()}};var jt=`<qti-response-processing>
|
|
330
308
|
<qti-response-condition>
|
|
331
309
|
<qti-response-if>
|
|
332
310
|
<qti-match>
|
|
@@ -343,7 +321,7 @@ var Rr=Object.defineProperty;var Ar=Object.getOwnPropertyDescriptor;var n=(c,o,e
|
|
|
343
321
|
</qti-set-outcome-value>
|
|
344
322
|
</qti-response-else>
|
|
345
323
|
</qti-response-condition>
|
|
346
|
-
</qti-response-processing>`,
|
|
324
|
+
</qti-response-processing>`,Wt=`<qti-response-processing>
|
|
347
325
|
<qti-response-condition>
|
|
348
326
|
<qti-response-if>
|
|
349
327
|
<qti-is-null>
|
|
@@ -359,7 +337,7 @@ var Rr=Object.defineProperty;var Ar=Object.getOwnPropertyDescriptor;var n=(c,o,e
|
|
|
359
337
|
</qti-set-outcome-value>
|
|
360
338
|
</qti-response-else>
|
|
361
339
|
</qti-response-condition>
|
|
362
|
-
</qti-response-processing>`,
|
|
340
|
+
</qti-response-processing>`,Kt=`<qti-response-processing>
|
|
363
341
|
<qti-response-condition>
|
|
364
342
|
<qti-response-if>
|
|
365
343
|
<qti-is-null>
|
|
@@ -375,19 +353,19 @@ var Rr=Object.defineProperty;var Ar=Object.getOwnPropertyDescriptor;var n=(c,o,e
|
|
|
375
353
|
</qti-set-outcome-value>
|
|
376
354
|
</qti-response-else>
|
|
377
355
|
</qti-response-condition>
|
|
378
|
-
</qti-response-processing>`;var
|
|
356
|
+
</qti-response-processing>`;var ie=class extends v{render(){return u`<slot></slot>`}process(){if(!this.closest("qti-assessment-item"))return;let e=[...this.children];for(let t of e)t.process()}firstUpdated(o){if(this.getAttribute("template")){let e=this.getAttribute("template").split("/"),t=e[e.length-1].replace(".xml","");switch(this.innerHTML="",t){case"map_response":{this.appendChild(this.fragmentFromString(Wt).firstElementChild.firstElementChild);break}case"map_response_point":{this.appendChild(this.fragmentFromString(Kt).firstElementChild.firstElementChild);break}case"match_correct":this.appendChild(this.fragmentFromString(jt).firstElementChild.firstElementChild);break}}}fragmentFromString(o){return document.createRange().createContextualFragment(o)}};ie.styles=[g`
|
|
379
357
|
:host {
|
|
380
358
|
display: none;
|
|
381
359
|
}
|
|
382
|
-
`],
|
|
383
|
-
<slot></slot>`}calculate(){return this.result=this.getResult(),this.result}getResult(){throw new Error("Not implemented")}};
|
|
360
|
+
`],ie=n([h("qti-response-processing")],ie);var I=class extends v{render(){return u`<slot></slot>`}process(){throw new Error("Not implemented")}};I=n([h("qti-rule")],I);var Ze=class extends I{get childExpression(){return this.firstElementChild}process(){let o=this.getAttribute("identifier"),e=this.closest("qti-assessment-item").getVariable(o),t;return e.interpolationTable&&(t=e.interpolationTable.get(parseInt(this.childExpression.calculate()))),t==null?(console.warn("lookupOutcomeValue: value is null or undefined"),0):(this.dispatchEvent(new CustomEvent("qti-set-outcome-value",{bubbles:!0,composed:!0,detail:{outcomeIdentifier:this.identifier,value:Ee(t)}})),t)}};n([d({type:String})],Ze.prototype,"identifier",2);customElements.define("qti-lookup-outcome-value",Ze);var ut=class extends I{render(){return u`<slot></slot>`}process(){let o=[...this.children];for(let e=0;e<o.length;e++){let t=o[e];if(t.calculate()){t.process();return}}}};customElements.define("qti-response-condition",ut);var ht=class extends I{process(){let o=this.getAttribute("identifier"),e=this.firstElementChild,r=new mt(e).process();this.dispatchEvent(new CustomEvent("qti-set-outcome-value",{bubbles:!0,composed:!0,detail:{outcomeIdentifier:o,value:Array.isArray(r)?r.map(i=>Ee(i)):Ee(r)}}))}},mt=class{constructor(o){this.expression=o}process(){let o=this.expression?this.expression.calculate():null;if(o==null){console.warn("setOutcomeValue: value is null or undefined");return}return o}};customElements.define("qti-set-outcome-value",ht);var _e=class extends v{render(){return u`<slot></slot>`}calculate(){return!0}getSubRules(){return[...this.children]}process(){let o=this.getSubRules();for(let e=0;e<o.length;e++)o[e].process()}};customElements.define("qti-response-else",_e);var ke=class extends _e{calculate(){return this.firstElementChild.calculate()}getSubRules(){let o=[];for(let e=1;e<this.children.length;e++)o.push(this.children[e]);return o}};customElements.define("qti-response-if",ke);var ft=class extends ke{render(){return u`${super.render()}`}};customElements.define("qti-response-else-if",ft);var E=class extends v{constructor(){super(...arguments);this.getVariables=()=>Array.from(this.children).map(e=>{switch(e.tagName.toLowerCase()){case"qti-base-value":return{baseType:e.getAttribute("base-type"),value:e.textContent.trim(),cardinality:"single"};case"qti-variable":{let t=e.getAttribute("identifier")||"";return this.context.variables.find(i=>i.identifier===t)||null}case"qti-multiple":{let r=e.getResult();return r.length>0?{identifier:"",baseType:r[0].baseType,value:r.map(i=>i.value),cardinality:"multiple",type:"response"}:null}case"qti-correct":{let t=e.getAttribute("identifier")||"",r=this.context.variables.find(i=>i.identifier===t)||null;return{baseType:r.baseType,value:r.correctResponse,cardinality:r.cardinality}}default:{try{return{baseType:"integer",value:e.getResult().toString(),cardinality:"single"}}catch{console.warn("default not sufficient")}return null}}}).filter(e=>e!==null)}render(){return u`<pre>${JSON.stringify(this.result,null,2)}</pre>
|
|
361
|
+
<slot></slot>`}calculate(){return this.result=this.getResult(),this.result}getResult(){throw new Error("Not implemented")}};E.styles=g`
|
|
384
362
|
slot {
|
|
385
363
|
display: none;
|
|
386
364
|
}
|
|
387
|
-
`,n([rr()],f.prototype,"result",2),n([vs({context:y,subscribe:!0}),rr()],f.prototype,"context",2);var T=class extends f{calculate(){return this.result=this.getResult(),this.result}getResult(){throw new Error("Not implemented")}};var Fe=class extends Cs(T){calculate(){return this.calculateChildren(Array.from(this.children))}};function Cs(c){return class extends c{calculateChildren(e){return e.map(r=>{let i=r;if(!i.calculate)return console.error("Element doesn't implement QtiConditionExpression"),null;let l=i.calculate(),s=!1;if(typeof l=="string")if(l==="true")s=!0;else if(l==="false")s=!1;else return console.error("unexpected val in qti-or, expected boolean"),null;else typeof l=="boolean"&&(s=l);return s}).every(r=>typeof r=="boolean"&&r)}}}customElements.define("qti-and",Fe);import{property as qs}from"lit/decorators.js";var ze=class extends f{constructor(){super(...arguments);this.baseType="string"}getResult(){return this.textContent.trim()}};n([qs({type:String,attribute:"base-type"})],ze.prototype,"baseType",2);customElements.define("qti-base-value",ze);var ct=class extends T{getResult(){let o=this.getVariables();if(this.children.length===2){let e=o[0],t=o[1];if(e.baseType==="directedPair"&&t.baseType==="directedPair"&&e.cardinality==="multiple"){let r=e.value,i=t.value;return r.filter(a=>i.includes(a)).length>0}else if(e.baseType==="directedPair"&&t.baseType==="directedPair"&&e.cardinality==="single"){let r=e.value;return t.value.includes(r)}else console.error("unsupported baseType or cardinality in qti contains, only baseType: directedPair and cardinality: multiple is supported")}else console.error("unexpected number of children in qti contains");return!1}};customElements.define("qti-contains",ct);var pt=class extends f{get interpretation(){return this.getAttribute("interpretation")||""}getResult(){let o=this.getAttribute("identifier")||"",e=this.context.variables.find(t=>t.identifier===o)||null;return e.cardinality!=="single"?e.correctResponse.length>0?e.correctResponse[0]:"":e.correctResponse}};customElements.define("qti-correct",pt);import{property as Ts}from"lit/decorators.js";var Ue=class extends f{constructor(){super(...arguments);this.roundingMode="significantFigures"}get figures(){if(!this.getAttribute("figures"))return console.error("figures attribute is missing"),null;let t=parseInt(this.getAttribute("figures")||"0");return isNaN(t)?(console.error("figures attribute is not a number"),null):t<0?(console.error("figures attribute is negative"),null):t<1&&this.roundingMode==="significantFigures"?(console.error("figures cannot be smaller than 1 for RoundingMode significantFigures"),null):t}getResult(){if(this.children.length===2){let e=this.getVariables(),t=e[0],r=e[1];if(this.roundingMode===null)return null;if(t.cardinality!=="single"||r.cardinality!=="single"||Array.isArray(t.value)||Array.isArray(r.value))return console.error("unexpected cardinality in qti equal"),!1;switch(e[0].baseType){case"integer":case"float":{let i=parseFloat(t.value),l=parseFloat(r.value);if(!isNaN(i)&&!isNaN(l))return this.roundingMode==="significantFigures"?i.toPrecision(this.figures)===l.toPrecision(this.figures):Math.round(i*Math.pow(10,this.figures))/Math.pow(10,this.figures)===Math.round(l*Math.pow(10,this.figures))/Math.pow(10,this.figures);console.error(`value cannot be casted to numeric value in equalRounded operator: ${i}, ${l}`);break}default:{console.error("values other than float and int cannot be used in equalRounded operator.");break}}return!1}return console.error("unexpected number of children in qti-equal-rounded"),null}};n([Ts({type:String})],Ue.prototype,"roundingMode",2);customElements.define("qti-equal-rounded",Ue);import{property as ws}from"lit/decorators.js";var w=class{static compareSingleValues(o,e,t){switch(t){case"identifier":case"string":return o===e;case"integer":{let r=parseInt(o,10),i=parseInt(e,10);if(!isNaN(r)&&!isNaN(i))return r===i;console.error(`Cannot convert ${o} and/or ${e} to int.`);break}case"float":{let r=parseFloat(o),i=parseFloat(e);if(!isNaN(r)&&!isNaN(i))return r===i;console.error(`couldn't convert ${o} and/or ${e} to float.`);break}case"pair":case"directedPair":{let r=o.split(" ").sort(),i=e.split(" ").sort();if(r.length===2&&i.length===2)return t==="pair"&&(r.sort(),i.sort()),r.join(" ")===i.join(" ");console.error(`compared two pair but one of the values does not have 2 values: 1: ${o} 2: ${e}`);break}}return!1}};var Xe=class extends f{constructor(){super(...arguments);this.toleranceMode="exact"}getResult(){if(this.children.length===2){let e=this.getVariables(),t=e[0],r=e[1];return this.toleranceMode!=="exact"?(console.error("toleranceMode is not supported yet"),!1):t.cardinality!=="single"||r.cardinality!=="single"||Array.isArray(t.value)||Array.isArray(r.value)?(console.error("unexpected cardinality in qti equal"),!1):w.compareSingleValues(t.value,r.value,t.baseType)}return console.error("unexpected number of children in qti-equal"),null}};n([ws({type:String})],Xe.prototype,"toleranceMode",2);customElements.define("qti-equal",Xe);var dt=class extends f{getResult(){if(this.children.length===2){let o=this.getVariables(),e=o[0],t=o[1];if((e.baseType==="integer"||e.baseType==="float")&&(t.baseType==="integer"||t.baseType==="float"))return+e.value>+t.value;console.error("unexpected baseType or cardinality in qti gt")}return console.error("unexpected number of children in qt"),null}};customElements.define("qti-gt",dt);var ut=class extends T{getResult(){if(this.children.length===2){let o=this.getVariables(),e=o[0],t=o[1];return(e.baseType==="integer"||e.baseType==="float")&&(t.baseType==="integer"||t.baseType==="float")?+e.value>=+t.value:(console.error("unexpected baseType or cardinality in qti gte"),null)}return console.log("unexpected number of children in qte"),null}};customElements.define("qti-gte",ut);var mt=class extends f{getResult(){if(this.children.length===1){let o=this.getVariables();if(!o)return!0;let e=o[0].value;return e==null||e==null||e===""}return console.error("unexpected number of children in qti Null"),null}};customElements.define("qti-is-null",mt);var ht=class extends f{getResult(){if(this.children.length===2){let o=this.getVariables(),e=o[0],t=o[1];if((e.baseType==="integer"||e.baseType==="float")&&(t.baseType==="integer"||t.baseType==="float"))return+e.value<+t.value;console.error("unexpected baseType or cardinality in qti lt")}return console.error("unexpected number of children in lt"),null}};customElements.define("qti-lt",ht);var ft=class extends T{getResult(){if(this.children.length===2){let o=this.getVariables(),e=o[0],t=o[1];return(e.baseType==="integer"||e.baseType==="float")&&(t.baseType==="integer"||t.baseType==="float")?+e.value<=+t.value:(console.error("unexpected baseType or cardinality in qti lte"),null)}return console.log("unexpected number of children in lte"),null}};customElements.define("qti-lte",ft);import{property as Ms}from"lit/decorators.js";var Be=class extends f{getResult(){let o=this.context.variables.find(i=>i.identifier===this.identifier);if(!o)return console.warn(`Response ${this.identifier} can not be found`),null;let e=o.mapping,t=Array.isArray(o.value)?o.value:[o.value],r=0;for(let i of t){let l=e.mapEntries.find(s=>w.compareSingleValues(s.mapKey,i,o.baseType));l==null||l.mappedValue==null?r+=e.defaultValue:r+=l.mappedValue}return e.lowerBound!=null&&(r=Math.max(e.lowerBound,r)),e.upperBound!=null&&(r=Math.min(e.upperBound,r)),r}};n([Ms({type:String})],Be.prototype,"identifier",2);customElements.define("qti-map-response",Be);import{property as gt}from"lit/decorators.js";import{LitElement as Ss}from"lit";var K=class extends Ss{constructor(){super(...arguments);this.defaultValue=0}get mapEntries(){return Array.from(this.querySelectorAll("qti-map-entry")).map(e=>({mapKey:e.getAttribute("map-key"),mappedValue:+e.getAttribute("mapped-value")}))}};n([gt({attribute:"default-value",type:Number})],K.prototype,"defaultValue",2),n([gt({attribute:"lower-bound",type:Number})],K.prototype,"lowerBound",2),n([gt({attribute:"upper-bound",type:Number})],K.prototype,"upperBound",2);customElements.define("qti-mapping",K);var bt=class c extends f{getResult(){if(this.children.length===2){let o=this.getVariables(),e=o[0],t=o[1];return c.match(e,t)}return console.error("unexpected number of children in match"),null}static match(o,e){switch(e.cardinality){case"single":return o.value===null?!1:Array.isArray(o.value)||Array.isArray(e.value)?(console.error("unexpected cardinality in qti match"),!1):w.compareSingleValues(o.value?.toString(),e.value.toString(),e.baseType);case"ordered":{if(!Array.isArray(o.value)||!Array.isArray(e.value))return console.error("unexpected cardinality in qti match"),!1;if(o.value.length!==e.value.length)return!1;for(let t=0;t<o.value.length;t++)if(!w.compareSingleValues(e.value[t],o.value[t],e.baseType))return!1;return!0}case"multiple":{if(!Array.isArray(o.value)||!Array.isArray(e.value))return console.error("unexpected cardinality in qti match"),!1;if(o.value.length!==e.value.length)return!1;let t=0;for(let r of e.value){let i=null,l=[...o.value];for(let s of l)if(w.compareSingleValues(r,s,e.baseType)){i=s;break}if(i!==null)l.splice(l.indexOf(i),1);else return!1;t++}return!0}default:return console.error("unexpected cardinality in qti match"),!1}}};customElements.define("qti-match",bt);var vt=class extends f{getResult(){let o=this.getVariables();this.children.length!==2&&console.warn("The member operator takes two sub-expressions");let[e,t]=o;if(e.baseType===t.baseType||e.baseType==="integer"&&t.baseType==="float"||e.baseType==="float"&&t.baseType==="integer"||console.warn("Which must both have the same base-type"),t.cardinality==="multiple"||t.cardinality==="ordered"||console.warn("and the second must be a multiple or ordered container"),(e.baseType==="float"||t.baseType==="float")&&console.warn("The member operator should not be used on sub-expressions with a base-type of float"),(e.baseType==="duration"||t.baseType==="duration")&&console.warn("It must not be used on sub-expressions with a base-type of duration"),e.value===null||t.value===null)return null;let r=e.value;return t.value.includes(r)}};customElements.define("qti-member",vt);var yt=class extends f{getResult(){let o=this.getVariables();if(o.length===0)return console.error("unexpected number of children in qti multiple"),null;for(let e of o)if(e.cardinality!=="multiple"&&e.cardinality!=="single")return console.error("unexpected cardinality in qti multiple"),[];return o}};customElements.define("qti-multiple",yt);import{html as Rs}from"lit";var xt=class extends f{render(){return Rs`${super.render()}`}getResult(){return!this.firstElementChild.calculate()}};customElements.define("qti-not",xt);var Et=class extends T{getResult(){return Array.from(this.children).map(e=>{let t=e;if(!t.calculate)return console.error("Element doesn't implement QtiConditionExpression"),null;let r=t.calculate(),i=!1;if(typeof r=="string")if(r==="true")i=!0;else if(r==="false")i=!1;else return console.error("unexpected val in qti-or, expected boolean"),null;else typeof r=="boolean"&&(i=r);return i}).some(e=>typeof e=="boolean"&&e)}};customElements.define("qti-or",Et);var Ct=class extends f{getResult(){let o=this.getVariables();if(o.length===0)return console.error("unexpected number of children in qti multiple"),null;for(let e of o)if(e.cardinality!=="ordered"&&e.cardinality!=="single")return console.error("unexpected cardinality in qti ordered"),[];return o}};customElements.define("qti-ordered",Ct);import{consume as As}from"@lit/context";import{LitElement as ks,html as Ls}from"lit";import{property as _s,state as Ds}from"lit/decorators.js";var he=class extends ks{render(){let o=this.context?.variables.find(e=>e.identifier===this.identifier)?.value;return Ls`${JSON.stringify(o,null,2)}`}calculate(){return this.context.variables.find(e=>e.identifier===this.identifier)||null}};n([_s({type:String})],he.prototype,"identifier",2),n([As({context:y,subscribe:!0}),Ds()],he.prototype,"context",2);customElements.define("qti-printed-variable",he);var qt=class extends f{getResult(){return this.getVariables().reduce((t,r)=>{if(r.baseType=="float"||r.baseType=="integer")try{return t*parseInt(r.value.toString())}catch{console.warn("can not convert to number")}else console.warn(`has another baseType ${r.baseType}`);return t},1)}};customElements.define("qti-product",qt);var Ye=class extends Vs(f){getResult(){return this.calculateChildren(Array.from(this.children))}};function Vs(c){return class extends c{calculateChildren(e){let t=e.map(r=>{if(!r.calculate)return console.error("Element doesn't implement QtiConditionExpression"),null;let i=r.calculate();return Number.isNaN(i)?(console.error("Unexpected value in qti-subtract, expected number"),null):Number(i)});return t.some(r=>r===null)?(console.error("One or more child expressions returned invalid values"),0):t[0]-t[1]}}}customElements.define("qti-subtract",Ye);import{property as Hs}from"lit/decorators.js";var We=class extends f{constructor(){super(...arguments);this.caseSensitive="true"}getResult(){if(this.children.length===2){let e=this.getVariables(),t=e[0],r=e[1];if(t.cardinality!=="single"||r.cardinality!=="single"||Array.isArray(t.value)||Array.isArray(r.value))return console.error("unexpected cardinality in qti string-match"),!1;let i=this.caseSensitive==="true"?t.value:t.value.toLowerCase(),l=this.caseSensitive==="true"?r.value:r.value.toLowerCase();return w.compareSingleValues(i,l,t.baseType)}return console.error("unexpected number of children in qti-string-match"),null}};n([Hs({type:String,attribute:"case-sensitive"})],We.prototype,"caseSensitive",2);customElements.define("qti-string-match",We);var Tt=class extends f{constructor(){super(),this._expression=new wt(Array.from(this.children))}getResult(){return this._expression.calculate()}},wt=class{constructor(o){this.expressions=o}calculate(){return this.expressions.map(e=>{if(!e.calculate)return console.error("Element doesn't implement QtiConditionExpression"),null;let t=e.calculate();return Number.isNaN(t)?(console.error("unexpected value in qti-sum, expected number"),null):Number(t)}).reduce((e,t)=>e+t,0)}};customElements.define("qti-sum",Tt);var Mt=class extends f{getResult(){let o=this.getAttribute("identifier");return this.context.variables.find(t=>t.identifier===o).value}};customElements.define("qti-variable",Mt);import{html as ir}from"lit";import{customElement as Ns,property as sr,state as $s}from"lit/decorators.js";var B=class extends h{constructor(){super(...arguments);this._errorMessage=null;this.loadConfig=async(e,t)=>{e=this.removeDoubleSlashes(e);try{let r=await fetch(e);if(r.ok){let l=await r.json();for(let s in l.paths)t&&(l.paths[s]=this.getResolvablePath(l.paths[s],t));return l}}catch{}return null};this.getResolvablePathString=(e,t)=>(e=e.replace(/\.js$/,""),e?.toLocaleLowerCase().startsWith("http")||!t?e:this.removeDoubleSlashes(`${t}/${e}`));this.getResolvablePath=(e,t)=>Array.isArray(e)?e.map(r=>this.getResolvablePathString(r,t)):this.getResolvablePathString(e,t)}convertQtiVariableJSON(e){for(let t in e)if(e.hasOwnProperty(t)){let r=e[t];if(r){for(let i in r)if(r.hasOwnProperty(i)){let l=r[i];if(Array.isArray(l))return l.map(String);if(l!=null)return String(l)}}}return null}startChecking(){this.intervalId=setInterval(()=>{let e=this.pci.getResponse(),t=this.pci.getResponse(),r=JSON.stringify(e);if(r!==this.rawResponse){this.rawResponse=r;let i=this.convertQtiVariableJSON(t);this.value=i,this.saveResponse(i)}},200)}stopChecking(){this.intervalId!==void 0&&clearInterval(this.intervalId)}validate(){return!0}set value(e){}get value(){return this.rawResponse}getTAOConfig(e){let t=e.querySelectorAll("properties"),r={},i=s=>{let a={},p=s.getAttribute("key");if(p){let d=Array.from(s.children),u=d.map(g=>g.getAttribute("key"));u.length>0&&!u.find(g=>!Number.isInteger(+g))?a[p]=d.map(g=>l(g)):a[p]=s.textContent}return a},l=s=>{if(s){let a={};for(let p of s.children)a={...a,...i(p)};return a}};for(let s of t)return s.getAttribute("key")||(r={...r,...l(s)}),r;return console.log("Can not find qti-custom-interaction config"),null}register(e){this.pci=e;let t=this.parentElement.tagName==="QTI-CUSTOM-INTERACTION"?"TAO":"IMS",r=t=="IMS"?this.querySelector("qti-interaction-markup"):this.querySelector("markup");r.classList.add("qti-customInteraction"),t=="TAO"&&this.querySelector("properties")&&(this.querySelector("properties").style.display="none");let i=t=="IMS"?{properties:this.dataset,onready:()=>{console.log("onready")}}:this.getTAOConfig(this);t=="IMS"?e.getInstance(r,i,void 0):e.initialize(this.customInteractionTypeIdentifier,r.firstElementChild,i),t=="TAO"&&Array.from(this.querySelectorAll("link")).map(s=>s.getAttribute("href")).forEach(s=>{let a=document.createElement("link");a.rel="stylesheet",a.type="text/css",a.media="screen",a.href=s,r.appendChild(a)}),this.startChecking()}connectedCallback(){super.connectedCallback(),define("qtiCustomInteractionContext",()=>({register:r=>{this.register(r)},notifyReady:()=>{}}));let e=this.buildRequireConfig();requirejs.config(e)(["require"],r=>{r([this.module])})}disconnectedCallback(){super.disconnectedCallback(),requirejs.undef(this.customInteractionTypeIdentifier);let e=requirejs.s.contexts;delete e[this.customInteractionTypeIdentifier],this.stopChecking()}buildRequireConfig(){let e={context:this.customInteractionTypeIdentifier,catchError:!0,paths:window.requirePaths||{},shim:window.requireShim||{}};if(!globalThis.require)return this._errorMessage="RequireJS not found. Please load it via CDN: https://cdnjs.com/libraries/require.js",null;let t=this.getAttribute("data-base-url"),r=this.querySelector("qti-interaction-modules");if(r){let i=r.querySelectorAll("qti-interaction-module");for(let l of i){let s=l.getAttribute("id"),a=l.getAttribute("primary-path"),p=l.getAttribute("fallback-path");if(s&&a){let d=p?this.combineRequireResolvePaths(this.getResolvablePath(a,t),this.getResolvablePath(p,t)):this.getResolvablePath(a,t),u=e.paths[s]||[];e.paths[s]=this.combineRequireResolvePaths(u,d)}}}return e}combineRequireResolvePaths(e,t){let r=Array.isArray(e)?e:[e],i=Array.isArray(t)?t:[t];return r.concat(i)}removeDoubleSlashes(e){return e.replace(/([^:]\/)\/+/g,"$1").replace(/\/\//g,"/").replace("http:/","http://").replace("https:/","https://")}render(){return ir`<slot></slot>${this._errorMessage&&ir`<div style="color:red">
|
|
365
|
+
`,n([C()],E.prototype,"result",2),n([k({context:w,subscribe:!0}),C()],E.prototype,"context",2);var A=class extends E{calculate(){return this.result=this.getResult(),this.result}getResult(){throw new Error("Not implemented")}};var Ge=class extends ur(A){calculate(){return this.calculateChildren(Array.from(this.children))}};function ur(c){return class extends c{calculateChildren(e){return e.map(r=>{let i=r;if(!i.calculate)return console.error("Element doesn't implement QtiConditionExpression"),null;let a=i.calculate(),s=!1;if(typeof a=="string")if(a==="true")s=!0;else if(a==="false")s=!1;else return console.error("unexpected val in qti-or, expected boolean"),null;else typeof a=="boolean"&&(s=a);return s}).every(r=>typeof r=="boolean"&&r)}}}customElements.define("qti-and",Ge);var Qe=class extends E{constructor(){super(...arguments);this.baseType="string"}getResult(){return this.textContent.trim()}};n([d({type:String,attribute:"base-type"})],Qe.prototype,"baseType",2);customElements.define("qti-base-value",Qe);var gt=class extends A{getResult(){let o=this.getVariables();if(this.children.length===2){let e=o[0],t=o[1];if(e.baseType==="directedPair"&&t.baseType==="directedPair"&&e.cardinality==="multiple"){let r=e.value,i=t.value;return r.filter(l=>i.includes(l)).length>0}else if(e.baseType==="directedPair"&&t.baseType==="directedPair"&&e.cardinality==="single"){let r=e.value;return t.value.includes(r)}else console.error("unsupported baseType or cardinality in qti contains, only baseType: directedPair and cardinality: multiple is supported")}else console.error("unexpected number of children in qti contains");return!1}};customElements.define("qti-contains",gt);var bt=class extends E{get interpretation(){return this.getAttribute("interpretation")||""}getResult(){let o=this.getAttribute("identifier")||"",e=this.context.variables.find(t=>t.identifier===o)||null;return e.cardinality!=="single"?e.correctResponse.length>0?e.correctResponse[0]:"":e.correctResponse}};customElements.define("qti-correct",bt);var et=class extends E{constructor(){super(...arguments);this.roundingMode="significantFigures"}get figures(){if(!this.getAttribute("figures"))return console.error("figures attribute is missing"),null;let t=parseInt(this.getAttribute("figures")||"0");return isNaN(t)?(console.error("figures attribute is not a number"),null):t<0?(console.error("figures attribute is negative"),null):t<1&&this.roundingMode==="significantFigures"?(console.error("figures cannot be smaller than 1 for RoundingMode significantFigures"),null):t}getResult(){if(this.children.length===2){let e=this.getVariables(),t=e[0],r=e[1];if(this.roundingMode===null)return null;if(t.cardinality!=="single"||r.cardinality!=="single"||Array.isArray(t.value)||Array.isArray(r.value))return console.error("unexpected cardinality in qti equal"),!1;switch(e[0].baseType){case"integer":case"float":{let i=parseFloat(t.value),a=parseFloat(r.value);if(!isNaN(i)&&!isNaN(a))return this.roundingMode==="significantFigures"?i.toPrecision(this.figures)===a.toPrecision(this.figures):Math.round(i*Math.pow(10,this.figures))/Math.pow(10,this.figures)===Math.round(a*Math.pow(10,this.figures))/Math.pow(10,this.figures);console.error(`value cannot be casted to numeric value in equalRounded operator: ${i}, ${a}`);break}default:{console.error("values other than float and int cannot be used in equalRounded operator.");break}}return!1}return console.error("unexpected number of children in qti-equal-rounded"),null}};n([d({type:String})],et.prototype,"roundingMode",2);customElements.define("qti-equal-rounded",et);var D=class{static compareSingleValues(o,e,t){switch(t){case"identifier":case"string":return o===e;case"integer":{let r=parseInt(o,10),i=parseInt(e,10);if(!isNaN(r)&&!isNaN(i))return r===i;console.error(`Cannot convert ${o} and/or ${e} to int.`);break}case"float":{let r=parseFloat(o),i=parseFloat(e);if(!isNaN(r)&&!isNaN(i))return r===i;console.error(`couldn't convert ${o} and/or ${e} to float.`);break}case"pair":case"directedPair":{let r=o.split(" ").sort(),i=e.split(" ").sort();if(r.length===2&&i.length===2)return t==="pair"&&(r.sort(),i.sort()),r.join(" ")===i.join(" ");console.error(`compared two pair but one of the values does not have 2 values: 1: ${o} 2: ${e}`);break}}return!1}};var tt=class extends E{constructor(){super(...arguments);this.toleranceMode="exact"}getResult(){if(this.children.length===2){let e=this.getVariables(),t=e[0],r=e[1];return this.toleranceMode!=="exact"?(console.error("toleranceMode is not supported yet"),!1):t.cardinality!=="single"||r.cardinality!=="single"||Array.isArray(t.value)||Array.isArray(r.value)?(console.error("unexpected cardinality in qti equal"),!1):D.compareSingleValues(t.value,r.value,t.baseType)}return console.error("unexpected number of children in qti-equal"),null}};n([d({type:String})],tt.prototype,"toleranceMode",2);customElements.define("qti-equal",tt);var vt=class extends E{getResult(){if(this.children.length===2){let o=this.getVariables(),e=o[0],t=o[1];if((e.baseType==="integer"||e.baseType==="float")&&(t.baseType==="integer"||t.baseType==="float"))return+e.value>+t.value;console.error("unexpected baseType or cardinality in qti gt")}return console.error("unexpected number of children in qt"),null}};customElements.define("qti-gt",vt);var yt=class extends A{getResult(){if(this.children.length===2){let o=this.getVariables(),e=o[0],t=o[1];return(e.baseType==="integer"||e.baseType==="float")&&(t.baseType==="integer"||t.baseType==="float")?+e.value>=+t.value:(console.error("unexpected baseType or cardinality in qti gte"),null)}return console.log("unexpected number of children in qte"),null}};customElements.define("qti-gte",yt);var xt=class extends E{getResult(){if(this.children.length===1){let o=this.getVariables();if(!o)return!0;let e=o[0].value;return e==null||e==null||e===""}return console.error("unexpected number of children in qti Null"),null}};customElements.define("qti-is-null",xt);var Et=class extends E{getResult(){if(this.children.length===2){let o=this.getVariables(),e=o[0],t=o[1];if((e.baseType==="integer"||e.baseType==="float")&&(t.baseType==="integer"||t.baseType==="float"))return+e.value<+t.value;console.error("unexpected baseType or cardinality in qti lt")}return console.error("unexpected number of children in lt"),null}};customElements.define("qti-lt",Et);var Ct=class extends A{getResult(){if(this.children.length===2){let o=this.getVariables(),e=o[0],t=o[1];return(e.baseType==="integer"||e.baseType==="float")&&(t.baseType==="integer"||t.baseType==="float")?+e.value<=+t.value:(console.error("unexpected baseType or cardinality in qti lte"),null)}return console.log("unexpected number of children in lte"),null}};customElements.define("qti-lte",Ct);var rt=class extends E{getResult(){let o=this.context.variables.find(i=>i.identifier===this.identifier);if(!o)return console.warn(`Response ${this.identifier} can not be found`),null;let e=o.mapping,t=Array.isArray(o.value)?o.value:[o.value],r=0;for(let i of t){let a=e.mapEntries.find(s=>D.compareSingleValues(s.mapKey,i,o.baseType));a==null||a.mappedValue==null?r+=e.defaultValue:r+=a.mappedValue}return e.lowerBound!=null&&(r=Math.max(e.lowerBound,r)),e.upperBound!=null&&(r=Math.min(e.upperBound,r)),r}};n([d({type:String})],rt.prototype,"identifier",2);customElements.define("qti-map-response",rt);var de=class extends v{constructor(){super(...arguments);this.defaultValue=0}get mapEntries(){return Array.from(this.querySelectorAll("qti-map-entry")).map(e=>({mapKey:e.getAttribute("map-key"),mappedValue:+e.getAttribute("mapped-value")}))}};n([d({attribute:"default-value",type:Number})],de.prototype,"defaultValue",2),n([d({attribute:"lower-bound",type:Number})],de.prototype,"lowerBound",2),n([d({attribute:"upper-bound",type:Number})],de.prototype,"upperBound",2);customElements.define("qti-mapping",de);var qt=class c extends E{getResult(){if(this.children.length===2){let o=this.getVariables(),e=o[0],t=o[1];return c.match(e,t)}return console.error("unexpected number of children in match"),null}static match(o,e){switch(e.cardinality){case"single":return o.value===null?!1:Array.isArray(o.value)||Array.isArray(e.value)?(console.error("unexpected cardinality in qti match"),!1):D.compareSingleValues(o.value?.toString(),e.value.toString(),e.baseType);case"ordered":{if(!Array.isArray(o.value)||!Array.isArray(e.value))return console.error("unexpected cardinality in qti match"),!1;if(o.value.length!==e.value.length)return!1;for(let t=0;t<o.value.length;t++)if(!D.compareSingleValues(e.value[t],o.value[t],e.baseType))return!1;return!0}case"multiple":{if(!Array.isArray(o.value)||!Array.isArray(e.value))return console.error("unexpected cardinality in qti match"),!1;if(o.value.length!==e.value.length)return!1;let t=0;for(let r of e.value){let i=null,a=[...o.value];for(let s of a)if(D.compareSingleValues(r,s,e.baseType)){i=s;break}if(i!==null)a.splice(a.indexOf(i),1);else return!1;t++}return!0}default:return console.error("unexpected cardinality in qti match"),!1}}};customElements.define("qti-match",qt);var Tt=class extends E{getResult(){let o=this.getVariables();this.children.length!==2&&console.warn("The member operator takes two sub-expressions");let[e,t]=o;if(e.baseType===t.baseType||e.baseType==="integer"&&t.baseType==="float"||e.baseType==="float"&&t.baseType==="integer"||console.warn("Which must both have the same base-type"),t.cardinality==="multiple"||t.cardinality==="ordered"||console.warn("and the second must be a multiple or ordered container"),(e.baseType==="float"||t.baseType==="float")&&console.warn("The member operator should not be used on sub-expressions with a base-type of float"),(e.baseType==="duration"||t.baseType==="duration")&&console.warn("It must not be used on sub-expressions with a base-type of duration"),e.value===null||t.value===null)return null;let r=e.value;return t.value.includes(r)}};customElements.define("qti-member",Tt);var wt=class extends E{getResult(){let o=this.getVariables();if(o.length===0)return console.error("unexpected number of children in qti multiple"),null;for(let e of o)if(e.cardinality!=="multiple"&&e.cardinality!=="single")return console.error("unexpected cardinality in qti multiple"),[];return o}};customElements.define("qti-multiple",wt);var Mt=class extends E{render(){return u`${super.render()}`}getResult(){return!this.firstElementChild.calculate()}};customElements.define("qti-not",Mt);var St=class extends A{getResult(){return Array.from(this.children).map(e=>{let t=e;if(!t.calculate)return console.error("Element doesn't implement QtiConditionExpression"),null;let r=t.calculate(),i=!1;if(typeof r=="string")if(r==="true")i=!0;else if(r==="false")i=!1;else return console.error("unexpected val in qti-or, expected boolean"),null;else typeof r=="boolean"&&(i=r);return i}).some(e=>typeof e=="boolean"&&e)}};customElements.define("qti-or",St);var Rt=class extends E{getResult(){let o=this.getVariables();if(o.length===0)return console.error("unexpected number of children in qti multiple"),null;for(let e of o)if(e.cardinality!=="ordered"&&e.cardinality!=="single")return console.error("unexpected cardinality in qti ordered"),[];return o}};customElements.define("qti-ordered",Rt);var Le=class extends v{render(){let o=this.context?.variables.find(e=>e.identifier===this.identifier)?.value;return u`${JSON.stringify(o,null,2)}`}calculate(){return this.context.variables.find(e=>e.identifier===this.identifier)||null}};n([d({type:String})],Le.prototype,"identifier",2),n([k({context:w,subscribe:!0}),C()],Le.prototype,"context",2);customElements.define("qti-printed-variable",Le);var _t=class extends E{getResult(){return this.getVariables().reduce((t,r)=>{if(r.baseType=="float"||r.baseType=="integer")try{return t*parseInt(r.value.toString())}catch{console.warn("can not convert to number")}else console.warn(`has another baseType ${r.baseType}`);return t},1)}};customElements.define("qti-product",_t);var it=class extends hr(E){getResult(){return this.calculateChildren(Array.from(this.children))}};function hr(c){return class extends c{calculateChildren(e){let t=e.map(r=>{if(!r.calculate)return console.error("Element doesn't implement QtiConditionExpression"),null;let i=r.calculate();return Number.isNaN(i)?(console.error("Unexpected value in qti-subtract, expected number"),null):Number(i)});return t.some(r=>r===null)?(console.error("One or more child expressions returned invalid values"),0):t[0]-t[1]}}}customElements.define("qti-subtract",it);var st=class extends E{constructor(){super(...arguments);this.caseSensitive="true"}getResult(){if(this.children.length===2){let e=this.getVariables(),t=e[0],r=e[1];if(t.cardinality!=="single"||r.cardinality!=="single"||Array.isArray(t.value)||Array.isArray(r.value))return console.error("unexpected cardinality in qti string-match"),!1;let i=this.caseSensitive==="true"?t.value:t.value.toLowerCase(),a=this.caseSensitive==="true"?r.value:r.value.toLowerCase();return D.compareSingleValues(i,a,t.baseType)}return console.error("unexpected number of children in qti-string-match"),null}};n([d({type:String,attribute:"case-sensitive"})],st.prototype,"caseSensitive",2);customElements.define("qti-string-match",st);var kt=class extends E{constructor(){super(),this._expression=new Lt(Array.from(this.children))}getResult(){return this._expression.calculate()}},Lt=class{constructor(o){this.expressions=o}calculate(){return this.expressions.map(e=>{if(!e.calculate)return console.error("Element doesn't implement QtiConditionExpression"),null;let t=e.calculate();return Number.isNaN(t)?(console.error("unexpected value in qti-sum, expected number"),null):Number(t)}).reduce((e,t)=>e+t,0)}};customElements.define("qti-sum",kt);var At=class extends E{getResult(){let o=this.getAttribute("identifier");return this.context.variables.find(t=>t.identifier===o).value}};customElements.define("qti-variable",At);var se=class extends x{constructor(){super(...arguments);this._errorMessage=null;this.loadConfig=async(e,t)=>{e=this.removeDoubleSlashes(e);try{let r=await fetch(e);if(r.ok){let a=await r.json();for(let s in a.paths)t&&(a.paths[s]=this.getResolvablePath(a.paths[s],t));return a}}catch{}return null};this.getResolvablePathString=(e,t)=>(e=e.replace(/\.js$/,""),e?.toLocaleLowerCase().startsWith("http")||!t?e:this.removeDoubleSlashes(`${t}/${e}`));this.getResolvablePath=(e,t)=>Array.isArray(e)?e.map(r=>this.getResolvablePathString(r,t)):this.getResolvablePathString(e,t)}convertQtiVariableJSON(e){for(let t in e)if(e.hasOwnProperty(t)){let r=e[t];if(r){for(let i in r)if(r.hasOwnProperty(i)){let a=r[i];if(Array.isArray(a))return a.map(String);if(a!=null)return String(a)}}}return null}startChecking(){this.intervalId=setInterval(()=>{let e=this.pci.getResponse(),t=this.pci.getResponse(),r=JSON.stringify(e);if(r!==this.rawResponse){this.rawResponse=r;let i=this.convertQtiVariableJSON(t);this.value=i,this.saveResponse(i)}},200)}stopChecking(){this.intervalId!==void 0&&clearInterval(this.intervalId)}validate(){return!0}set value(e){}get value(){return this.rawResponse}getTAOConfig(e){let t=e.querySelectorAll("properties"),r={},i=s=>{let l={},p=s.getAttribute("key");if(p){let m=Array.from(s.children),f=m.map(y=>y.getAttribute("key"));f.length>0&&!f.find(y=>!Number.isInteger(+y))?l[p]=m.map(y=>a(y)):l[p]=s.textContent}return l},a=s=>{if(s){let l={};for(let p of s.children)l={...l,...i(p)};return l}};for(let s of t)return s.getAttribute("key")||(r={...r,...a(s)}),r;return console.log("Can not find qti-custom-interaction config"),null}register(e){this.pci=e;let t=this.parentElement.tagName==="QTI-CUSTOM-INTERACTION"?"TAO":"IMS",r=t=="IMS"?this.querySelector("qti-interaction-markup"):this.querySelector("markup");r.classList.add("qti-customInteraction"),t=="TAO"&&this.querySelector("properties")&&(this.querySelector("properties").style.display="none");let i=t=="IMS"?{properties:this.dataset,onready:()=>{console.log("onready")}}:this.getTAOConfig(this);t=="IMS"?e.getInstance(r,i,void 0):e.initialize(this.customInteractionTypeIdentifier,r.firstElementChild,i),t=="TAO"&&Array.from(this.querySelectorAll("link")).map(s=>s.getAttribute("href")).forEach(s=>{let l=document.createElement("link");l.rel="stylesheet",l.type="text/css",l.media="screen",l.href=s,r.appendChild(l)}),this.startChecking()}connectedCallback(){super.connectedCallback(),define("qtiCustomInteractionContext",()=>({register:r=>{this.register(r)},notifyReady:()=>{}}));let e=this.buildRequireConfig();requirejs.config(e)(["require"],r=>{r([this.module])})}disconnectedCallback(){super.disconnectedCallback(),requirejs.undef(this.customInteractionTypeIdentifier);let e=requirejs.s.contexts;delete e[this.customInteractionTypeIdentifier],this.stopChecking()}buildRequireConfig(){let e={context:this.customInteractionTypeIdentifier,catchError:!0,paths:window.requirePaths||{},shim:window.requireShim||{}};if(!globalThis.require)return this._errorMessage="RequireJS not found. Please load it via CDN: https://cdnjs.com/libraries/require.js",null;let t=this.getAttribute("data-base-url"),r=this.querySelector("qti-interaction-modules");if(r){let i=r.querySelectorAll("qti-interaction-module");for(let a of i){let s=a.getAttribute("id"),l=a.getAttribute("primary-path"),p=a.getAttribute("fallback-path");if(s&&l){let m=p?this.combineRequireResolvePaths(this.getResolvablePath(l,t),this.getResolvablePath(p,t)):this.getResolvablePath(l,t),f=e.paths[s]||[];e.paths[s]=this.combineRequireResolvePaths(f,m)}}}return e}combineRequireResolvePaths(e,t){let r=Array.isArray(e)?e:[e],i=Array.isArray(t)?t:[t];return r.concat(i)}removeDoubleSlashes(e){return e.replace(/([^:]\/)\/+/g,"$1").replace(/\/\//g,"/").replace("http:/","http://").replace("https:/","https://")}render(){return u`<slot></slot>${this._errorMessage&&u`<div style="color:red">
|
|
388
366
|
<h1>Error</h1>
|
|
389
367
|
${this._errorMessage}
|
|
390
|
-
</div>`}`}};n([sr({type:String,attribute:"module"})],B.prototype,"module",2),n([sr({type:String,attribute:"custom-interaction-type-identifier"})],B.prototype,"customInteractionTypeIdentifier",2),n([$s()],B.prototype,"_errorMessage",2),B=n([Ns("qti-portable-custom-interaction")],B);import{html as ar}from"lit";import{customElement as Os,state as Ps}from"lit/decorators.js";var or=(c,o,e)=>{class t extends c{}return t};import{property as St}from"lit/decorators.js";function je(c,o){let e;return(t,r)=>{let{connectedCallback:i,disconnectedCallback:l}=t;t.connectedCallback=function(){i.call(this);let s=p=>{let d=Array.from(this.querySelectorAll(c)).concat(Array.from(this.shadowRoot?.querySelectorAll(c)||[]));for(let u of p){let m=Array.from(u.addedNodes).map(v=>v),g=Array.from(u.addedNodes).map(v=>v);u.type==="childList"&&m.find(v=>d.includes(v))&&this[r](m,g)}};e=new MutationObserver(s),e.observe(this,{childList:!0,subtree:!0});let a=Array.from(this.querySelectorAll(c)).concat(Array.from(this.shadowRoot?.querySelectorAll(c)||[]));this[r](Array.from(a),[])},t.disconnectedCallback=function(){l.call(this),e.disconnect()}}}var L=(c,o,e,t)=>{class r extends or(c,e,o){constructor(){super(...arguments);this.observer=null;this.droppableObsever=null;this.resizeObserver=null;this.draggables=[];this.droppables=[];this.dragContainers=[];this.dragClone=null;this.dragSource=null;this.touchStartPoint=null;this.isDraggable=!1;this.cloneOffset={x:0,y:0};this.isDragging=!1;this.rootNode=null;this.allDropzones=[];this.lastTarget=null;this.dropzoneOriginalParent=null;this.currentDropTarget=null;this.MIN_DRAG_DISTANCE=5;this.DRAG_CLONE_OPACITY=1;this.dataTransfer={data:{},setData(s,a){this.data[s]=a},getData(s){return this.data[s]},effectAllowed:"move"};this.configuration={copyStylesDragClone:!0,dragCanBePlacedBack:!0,dragOnClick:!1};this.minAssociations=1;this.maxAssociations=1;this.draggablesModified=(s,a)=>{for(let d of a)this.draggables.includes(d)&&(this.draggables=this.draggables.filter(u=>u!==d),d.removeAttribute("tabindex"),d.removeEventListener("touchstart",this.handleTouchStart.bind(this)),d.removeEventListener("mousedown",this.handleTouchStart.bind(this)));for(let d of s)this.draggables.includes(d)||(this.draggables.push(d),d.setAttribute("tabindex","0"),d.hasTouchStartListener||(d.addEventListener("touchstart",this.handleTouchStart.bind(this),{passive:!1}),d.addEventListener("mousedown",this.handleTouchStart.bind(this),{passive:!1}),d.hasTouchStartListener=!0));let p=0;this.draggables.forEach(d=>{d.style.viewTransitionName=`drag-${p}-${this.getAttribute("identifier")||crypto.randomUUID()}`,d.setAttribute("qti-draggable","true"),d.addEventListener("dragstart",this.handleDragStart),d.addEventListener("dragend",this.handleDragEnd),p++})};this.droppablesModified=(s,a)=>{for(let p of a)this.droppables.includes(p)&&(this.droppables=this.droppables.filter(d=>d!==p),this.allDropzones=this.allDropzones.filter(d=>d!==p));for(let p of s)this.droppables.includes(p)||(this.droppables.push(p),this.allDropzones.push(p));for(let p of this.droppables)this.dataset.choicesContainerWidth&&(p.style.width=`${this.dataset.choicesContainerWidth}px`,p.style.boxSizing="border-box")};this.handleDragStart=s=>{let a=s.currentTarget;s.dataTransfer.setData("text",a.getAttribute("identifier")),this.responseIdentifier&&s.dataTransfer.setData("responseIdentifier",this.responseIdentifier),this._internals.states.add("--dragzone-enabled"),this._internals.states.add("--dragzone-active"),a.setAttribute("dragging",""),this.activateDragLocation(),this.activateDroppables(a)};this.handleDragEnd=async s=>{s.preventDefault();let a=s.currentTarget;this._internals.states.delete("--dragzone-enabled"),this._internals.states.delete("--dragzone-active"),this.deactivateDragLocation(),this.deactivateDroppables(),a.removeAttribute("dragging")}}handleDraggableContainerChange(s,a){this.isMatchTabular()||(s.length>0||a.length>0)&&this.dragContainersModified(s||[],a||[])}dragContainersModified(s,a){for(let p of a)this.dragContainers.includes(p)&&(this.dragContainers=this.dragContainers.filter(d=>d!==p),this.allDropzones=this.allDropzones.filter(d=>d!==p));for(let p of s)this.dragContainers.includes(p)||(this.dragContainers.push(p),this.allDropzones.push(p))}handleDraggablesChange(s,a){this.isMatchTabular()||(s.length>0||a.length>0)&&this.draggablesModified(s||[],a||[])}handleDroppablesChange(s,a){this.isMatchTabular()||(s.length>0||a.length>0)&&this.droppablesModified(s||[],a||[])}firstUpdated(s){super.firstUpdated(s),this.hasAttribute("disabled")||(document.addEventListener("touchmove",this.handleTouchMove.bind(this),{passive:!1}),document.addEventListener("mousemove",this.handleTouchMove.bind(this),{passive:!1}),document.addEventListener("touchend",this.handleTouchEnd.bind(this),{passive:!1}),document.addEventListener("mouseup",this.handleTouchEnd.bind(this),{passive:!1}),document.addEventListener("touchcancel",this.handleTouchCancel.bind(this),{passive:!1}));let p=Array.from(this.querySelectorAll(o)||[]).concat(Array.from(this.shadowRoot?.querySelectorAll(o)||[])),d=Array.from(this.querySelectorAll(e)||[]).concat(Array.from(this.shadowRoot?.querySelectorAll(e)||[])),u=Array.from(this.querySelectorAll(t)||[]).concat(Array.from(this.shadowRoot?.querySelectorAll(t)||[]));this.dragContainersModified(u,[]),this.droppablesModified(d,[]),this.draggablesModified(p,[]),this.updateMinDimensionsForDropZones(),this.observer=new MutationObserver(()=>this.updateMinDimensionsForDropZones()),this.observer.observe(this,{childList:!0,subtree:!0}),this.resizeObserver=new ResizeObserver(()=>this.updateMinDimensionsForDropZones()),this.querySelectorAll("qti-gap-text").forEach(g=>this.resizeObserver?.observe(g))}async moveDraggableToDroppable(s,a){(()=>{s.style.transform="translate(0, 0)",a.tagName==="SLOT"?s.setAttribute("slot",a.getAttribute("name")):a.appendChild(s),this.checkAllMaxAssociations(),this.saveResponse()})()}activateDroppable(s){this.dragContainers.includes(s)?(this._internals.states.add("--dragzone-active"),s.setAttribute("active","")):(this._internals.states.delete("--dragzone-active"),s.setAttribute("active",""))}deactivateDroppable(s,a=!0){a&&this._internals.states.add("--dragzone-active"),s.removeAttribute("active")}connectedCallback(){super.connectedCallback()}isMatchTabular(){return this.classList.contains("qti-match-tabular")}updateMinDimensionsForDropZones(){let s=this.querySelectorAll(o),a=Array.from(this.querySelectorAll(e)).map(m=>m),p=0,d=0;s.forEach(m=>{let g=m.getBoundingClientRect();p=Math.max(p,g.height),d=Math.max(d,g.width)});let u=this.querySelector(t)||this.shadowRoot?.querySelector(t);u&&(u.style.minHeight=`${p}px`,u.style.minWidth=`${d}px`);for(let m of a)m.style.minHeight=`${p}px`,m.style.minWidth=`${d}px`}activateDroppables(s){this.dragContainers.forEach(p=>{p.setAttribute("enabled",""),p.hasAttribute("disabled")&&(p.contains(s)||p.shadowRoot&&p.shadowRoot.contains(s))&&p.removeAttribute("disabled")}),this.droppables.forEach(p=>{p.setAttribute("enabled",""),p.hasAttribute("disabled")&&(p.contains(s)||p.shadowRoot&&p.shadowRoot.contains(s))&&p.removeAttribute("disabled")})}activateDragLocation(){this._internals.states.add("--dragzone-enabled")}deactivateDragLocation(){this._internals.states.delete("--dragzone-enabled")}deactivateDroppables(){this.dragContainers.forEach(a=>{a.removeAttribute("enabled")}),this.droppables.forEach(a=>a.removeAttribute("enabled"))}disconnectedCallback(){super.disconnectedCallback(),this.observer&&(this.observer.disconnect(),this.observer=null),this.droppableObsever&&(this.droppableObsever.disconnect(),this.droppableObsever=null),this.resizeObserver&&(this.resizeObserver.disconnect(),this.resizeObserver=null),document.removeEventListener("touchmove",this.handleTouchMove),document.removeEventListener("mousemove",this.handleTouchMove),document.removeEventListener("touchend",this.handleTouchEnd),document.removeEventListener("mouseup",this.handleTouchEnd),document.removeEventListener("touchcancel",this.handleTouchCancel)}handleTouchMove(s){if(this.isDraggable&&this.dragClone){let{x:a,y:p}=this.getEventCoordinates(s),d={clientX:a,clientY:p};this.calculateDragDistance(d)>=this.MIN_DRAG_DISTANCE&&(this.isDragging=!0,this.updateDragClonePosition(d));let u=this.findClosestDropzone();this.currentDropTarget=u,u!==this.lastTarget&&(this.lastTarget&&(this.deactivateDroppable(this.lastTarget),this.dispatchCustomEvent(this.lastTarget,"dragleave")),u&&(this.activateDroppable(u),this.dispatchCustomEvent(u,"dragenter")),this.lastTarget=u),this.currentDropTarget&&this.dispatchCustomEvent(this.currentDropTarget,"dragover"),s.preventDefault()}}handleTouchEnd(s){if(this.isDragging){if(this.currentDropTarget){let a=this.dragClone;this.moveDraggableToDroppable(a,this.currentDropTarget)}this.resetDragState()}this._internals.states.delete("--dragzone-active"),this.checkAllMaxAssociations(),s.preventDefault()}handleTouchCancel(s){this.resetDragState()}validate(){if(!this.shadowRoot)return!1;let s=this.getValidAssociations(),a=!0,p="";this.maxAssociations>0&&s>this.maxAssociations?(a=!1,p=this.dataset.maxSelectionsMessage||`You've selected too many associations. Maximum allowed is ${this.maxAssociations}.`):this.minAssociations>0&&s<this.minAssociations&&(a=!1,p=this.dataset.minSelectionsMessage||`You haven't selected enough associations. Minimum required is ${this.minAssociations}.`);let d=this.lastElementChild;return this._internals.setValidity(a?{}:{customError:!0},p,d),this.reportValidity(),a}reportValidity(){let s=this.shadowRoot.querySelector("#validationMessage");return s&&(this._internals.validity.valid?(s.textContent="",s.style.display="none"):(s.textContent=this._internals.validationMessage,s.style.display="block")),this._internals.validity.valid}checkMaxAssociations(s){let a=this.getMatchMaxValue(s),p=s.querySelectorAll('[qti-draggable="true"]').length;return a===0||p>=a}resetDragState(){if(this.dragClone)if(!(this.currentDropTarget!==null)||this.dragContainers.includes(this.currentDropTarget))this.dragSource.style.opacity="1.0",this.dragSource.style.display="block",this.dragSource.style.pointerEvents="auto",this.dragClone.remove();else{let p=window.getComputedStyle(this.dragSource);for(let d=0;d<p.length;d++){let u=p[d];this.dragClone.style.setProperty(u,p.getPropertyValue(u))}this.dragClone.style.opacity="1.0",this.dragClone.style.display="block",this.dragClone.style.pointerEvents="auto"}this.isDragging=!1,this.isDraggable=!1,this.dragSource=null,this.dragClone=null,this.touchStartPoint=null,this.currentDropTarget=null,this.lastTarget=null}checkAllMaxAssociations(){this.droppables.forEach(s=>{this.checkMaxAssociations(s)?this.disableDroppable(s):this.enableDroppable(s)})}getMatchMaxValue(s){let a=s.getAttribute("match-max");return a?parseInt(a,10):1}disableDroppable(s){s.setAttribute("disabled","")}enableDroppable(s){s.removeAttribute("disabled")}get value(){return this.collectResponseData()}set value(s){if(!this.isMatchTabular())if(Array.isArray(s)){s?.forEach(p=>this.placeResponse(p));let a=new FormData;s.forEach(p=>{a.append(this.responseIdentifier,p)}),this._internals.setFormValue(a)}else this._internals.setFormValue(s)}placeResponse(s){let[a,...p]=s.split(" ").reverse(),d=this.findDroppableById(a);p.forEach(u=>this.placeDraggableInDroppable(u,d))}findDroppableById(s){return this.droppables.find(a=>a.getAttribute("identifier")===s)}async placeDraggableInDroppable(s,a){let p=this.querySelector(`[identifier=${s}]`);if(!a||!p){console.error(`Cannot find draggable or droppable with the given identifier: ${s}`);return}let d=()=>{p.style.transform="translate(0, 0)",console.log("droppable",a),a.appendChild(p),this.checkAllMaxAssociations()};document.startViewTransition?await document.startViewTransition(d).finished:d()}getValidAssociations(){return this.droppables.filter(s=>s.childElementCount>0).length}saveResponse(){this.validate();let s=this.collectResponseData();this.dispatchEvent(new CustomEvent("qti-interaction-response",{bubbles:!0,composed:!0,detail:{responseIdentifier:this.responseIdentifier,response:s}}))}collectResponseData(){return this.droppables.map(a=>{let p=a.querySelectorAll('[qti-draggable="true"]'),d=Array.from(p).map(m=>m.getAttribute("identifier")),u=a.getAttribute("identifier");return d.map(m=>`${m} ${u}`)}).flat()}reset(s=!0){s&&this.saveResponse()}updateDragClonePosition(s){if(!this.isDragging||!this.dragClone)return;let a=s.clientX-this.cloneOffset.x,p=s.clientY-this.cloneOffset.y,{newLeft:d,newTop:u}=this.applyBoundaries(a,p,this.dragClone);this.dragClone.style.left=`${d}px`,this.dragClone.style.top=`${u}px`}getEventCoordinates(s,a=!1){let p=s.touches?s.touches[0]:s;return{x:a?p.pageX:p.clientX,y:a?p.pageY:p.clientY}}calculateDragDistance(s){let a=Math.abs(s.clientX-this.touchStartPoint.x),p=Math.abs(s.clientY-this.touchStartPoint.y);return a+p}applyBoundaries(s,a,p){let d=new DOMRect(0,0,window.innerWidth,window.innerHeight);this.rootNode instanceof ShadowRoot?d=this.rootNode.host.getBoundingClientRect():this.rootNode instanceof Document&&(d=document.documentElement.getBoundingClientRect());let u=p.getBoundingClientRect(),m=u.width,g=u.height,v=Math.max(d.left,Math.min(s,d.right-m)),b=Math.max(d.top,Math.min(a,d.bottom-g));return{newLeft:v,newTop:b}}findClosestDropzone(){let s=this.allDropzones.filter(u=>!u.hasAttribute("disabled"));if(!this.dragClone||s.length===0)return null;let a=this.dragClone.getBoundingClientRect(),p=null,d=0;for(let u of s){let m=u.getBoundingClientRect(),g=this.calculateOverlapArea(a,m);g>d&&(d=g,p=u)}if(!p){let u=200;for(let m of s){let g=m.getBoundingClientRect(),v=Math.sqrt(Math.pow(a.left-g.left,2)+Math.pow(a.top-g.top,2));v<u&&(u=v,p=m)}}return p}calculateOverlapArea(s,a){let p=Math.max(0,Math.min(s.right,a.right)-Math.max(s.left,a.left)),d=Math.max(0,Math.min(s.bottom,a.bottom)-Math.max(s.top,a.top));return p*d}dispatchCustomEvent(s,a,p=!0){if(!s)return;let d=new CustomEvent(a,{bubbles:p,cancelable:!0});d.dataTransfer=this.dataTransfer,s.dispatchEvent(d)}handleTouchStart(s){let{x:a,y:p}=this.getEventCoordinates(s);this.dropzoneOriginalParent=s.currentTarget.parentElement,this.touchStartPoint={x:a,y:p},this.dragSource=s.currentTarget,this.isDraggable=!0,this.rootNode=this.dragSource.getRootNode();let d=this.findDraggableInDraggableContainer(this.dragSource.getAttribute("identifier")),u=this.dragSource.parentElement;if(this.droppables.includes(u)){this.enableDroppable(u),this.dragClone=this.dragSource,this.dragSource=this.findDraggableInDraggableContainer(this.dragSource.getAttribute("identifier"));let m=this.findParentInteractionElement(this.dragSource),g=this.dragClone.getBoundingClientRect();m?m.appendChild(this.dragClone):this.rootNode instanceof ShadowRoot?this.rootNode.host.appendChild(this.dragClone):this.rootNode instanceof Document&&document.body.appendChild(this.dragClone),g&&this.setDragCloneStyles(g)}else{let m=d.getBoundingClientRect();this.cloneOffset.x=a-m.left,this.cloneOffset.y=p-m.top,this.dragClone=d.cloneNode(!0),m&&this.setDragCloneStyles(m);let g=this.findParentInteractionElement(this.dragSource);g?g.appendChild(this.dragClone):this.rootNode instanceof ShadowRoot?this.rootNode.host.appendChild(this.dragClone):this.rootNode instanceof Document&&document.body.appendChild(this.dragClone);let v=this.getMatchMaxValue(this.dragSource),b=this.draggables.filter(Ze=>Ze.getAttribute("identifier")===this.dragSource.getAttribute("identifier"));v!==0&&b.length>=v?(d.style.opacity="0.0",d.style.pointerEvents="none"):d.style.opacity="1.0",s.preventDefault()}}findParentInteractionElement(s){let a=s.parentElement;for(;a&&!a.tagName?.toLowerCase().endsWith("-interaction");)a=a.parentElement;return a}findDraggableInDraggableContainer(s){let a=this.dragContainers.flat();for(let p of a){if(p.getAttribute("identifier")===s)return p;let u=Array.from(p.assignedElements()||[]).find(m=>m.getAttribute("identifier")===s);if(u)return u}}setDragCloneStyles(s){this.dragClone.style.position="fixed",this.dragClone.style.top=`${s.top}px`,this.dragClone.style.left=`${s.left}px`,this.dragClone.style.width=`${s.width}px`,this.dragClone.style.height=`${s.height}px`,this.dragClone.style.setProperty("box-sizing","border-box","important"),this.dragClone.style.zIndex="9999",this.dragClone.style.pointerEvents="none",this.dragClone.style.opacity=this.DRAG_CLONE_OPACITY.toString(),this.dragClone.style.display="block"}}return n([St({attribute:!1,type:Object})],r.prototype,"configuration",2),n([St({type:Number,reflect:!0,attribute:"min-associations"})],r.prototype,"minAssociations",2),n([St({type:Number,reflect:!0,attribute:"max-associations"})],r.prototype,"maxAssociations",2),n([je(t)],r.prototype,"handleDraggableContainerChange",1),n([je(o)],r.prototype,"handleDraggablesChange",1),n([je(e)],r.prototype,"handleDroppablesChange",1),r};import{css as Is}from"lit";var nr=Is`
|
|
368
|
+
</div>`}`}};n([d({type:String,attribute:"module"})],se.prototype,"module",2),n([d({type:String,attribute:"custom-interaction-type-identifier"})],se.prototype,"customInteractionTypeIdentifier",2),n([C()],se.prototype,"_errorMessage",2),se=n([h("qti-portable-custom-interaction")],se);var Jt=(c,o,e)=>{class t extends c{}return t};var O=(c,o,e,t)=>{class r extends Jt(c,e,o){constructor(){super(...arguments);this.observer=null;this.droppableObsever=null;this.resizeObserver=null;this.draggables=[];this.droppables=[];this.dragContainers=[];this.dragClone=null;this.dragSource=null;this.touchStartPoint=null;this.isDraggable=!1;this.cloneOffset={x:0,y:0};this.isDragging=!1;this.rootNode=null;this.allDropzones=[];this.lastTarget=null;this.dropzoneOriginalParent=null;this.currentDropTarget=null;this.MIN_DRAG_DISTANCE=5;this.DRAG_CLONE_OPACITY=1;this.dataTransfer={data:{},setData(s,l){this.data[s]=l},getData(s){return this.data[s]},effectAllowed:"move"};this.configuration={copyStylesDragClone:!0,dragCanBePlacedBack:!0,dragOnClick:!1};this.minAssociations=1;this.maxAssociations=1;this.draggablesModified=(s,l)=>{for(let m of l)this.draggables.includes(m)&&(this.draggables=this.draggables.filter(f=>f!==m),m.removeAttribute("tabindex"),m.removeEventListener("touchstart",this.handleTouchStart.bind(this)),m.removeEventListener("mousedown",this.handleTouchStart.bind(this)));for(let m of s)this.draggables.includes(m)||(this.draggables.push(m),m.setAttribute("tabindex","0"),m.hasTouchStartListener||(m.addEventListener("touchstart",this.handleTouchStart.bind(this),{passive:!1}),m.addEventListener("mousedown",this.handleTouchStart.bind(this),{passive:!1}),m.hasTouchStartListener=!0));let p=0;this.draggables.forEach(m=>{m.style.viewTransitionName=`drag-${p}-${this.getAttribute("identifier")||crypto.randomUUID()}`,m.setAttribute("qti-draggable","true"),m.addEventListener("dragstart",this.handleDragStart),m.addEventListener("dragend",this.handleDragEnd),p++})};this.droppablesModified=(s,l)=>{for(let p of l)this.droppables.includes(p)&&(this.droppables=this.droppables.filter(m=>m!==p),this.allDropzones=this.allDropzones.filter(m=>m!==p));for(let p of s)this.droppables.includes(p)||(this.droppables.push(p),this.allDropzones.push(p));for(let p of this.droppables)this.dataset.choicesContainerWidth&&(p.style.width=`${this.dataset.choicesContainerWidth}px`,p.style.boxSizing="border-box")};this.handleDragStart=s=>{let l=s.currentTarget;s.dataTransfer.setData("text",l.getAttribute("identifier")),this.responseIdentifier&&s.dataTransfer.setData("responseIdentifier",this.responseIdentifier),this._internals.states.add("--dragzone-enabled"),this._internals.states.add("--dragzone-active"),l.setAttribute("dragging",""),this.activateDragLocation(),this.activateDroppables(l)};this.handleDragEnd=async s=>{s.preventDefault();let l=s.currentTarget;this._internals.states.delete("--dragzone-enabled"),this._internals.states.delete("--dragzone-active"),this.deactivateDragLocation(),this.deactivateDroppables(),l.removeAttribute("dragging")}}handleDraggableContainerChange(s,l){this.isMatchTabular()||(s.length>0||l.length>0)&&this.dragContainersModified(s||[],l||[])}dragContainersModified(s,l){for(let p of l)this.dragContainers.includes(p)&&(this.dragContainers=this.dragContainers.filter(m=>m!==p),this.allDropzones=this.allDropzones.filter(m=>m!==p));for(let p of s)this.dragContainers.includes(p)||(this.dragContainers.push(p),this.allDropzones.push(p))}handleDraggablesChange(s,l){this.isMatchTabular()||(s.length>0||l.length>0)&&this.draggablesModified(s||[],l||[])}handleDroppablesChange(s,l){this.isMatchTabular()||(s.length>0||l.length>0)&&this.droppablesModified(s||[],l||[])}firstUpdated(s){super.firstUpdated(s),this.hasAttribute("disabled")||(document.addEventListener("touchmove",this.handleTouchMove.bind(this),{passive:!1}),document.addEventListener("mousemove",this.handleTouchMove.bind(this),{passive:!1}),document.addEventListener("touchend",this.handleTouchEnd.bind(this),{passive:!1}),document.addEventListener("mouseup",this.handleTouchEnd.bind(this),{passive:!1}),document.addEventListener("touchcancel",this.handleTouchCancel.bind(this),{passive:!1}));let p=Array.from(this.querySelectorAll(o)||[]).concat(Array.from(this.shadowRoot?.querySelectorAll(o)||[])),m=Array.from(this.querySelectorAll(e)||[]).concat(Array.from(this.shadowRoot?.querySelectorAll(e)||[])),f=Array.from(this.querySelectorAll(t)||[]).concat(Array.from(this.shadowRoot?.querySelectorAll(t)||[]));this.dragContainersModified(f,[]),this.droppablesModified(m,[]),this.draggablesModified(p,[]),this.updateMinDimensionsForDropZones(),this.observer=new MutationObserver(()=>this.updateMinDimensionsForDropZones()),this.observer.observe(this,{childList:!0,subtree:!0}),this.resizeObserver=new ResizeObserver(()=>this.updateMinDimensionsForDropZones()),this.querySelectorAll("qti-gap-text").forEach(y=>this.resizeObserver?.observe(y))}async moveDraggableToDroppable(s,l){(()=>{s.style.transform="translate(0, 0)",l.tagName==="SLOT"?s.setAttribute("slot",l.getAttribute("name")):l.appendChild(s),this.checkAllMaxAssociations(),this.saveResponse()})()}activateDroppable(s){this.dragContainers.includes(s)?(this._internals.states.add("--dragzone-active"),s.setAttribute("active","")):(this._internals.states.delete("--dragzone-active"),s.setAttribute("active",""))}deactivateDroppable(s,l=!0){l&&this._internals.states.add("--dragzone-active"),s.removeAttribute("active")}connectedCallback(){super.connectedCallback()}isMatchTabular(){return this.classList.contains("qti-match-tabular")}updateMinDimensionsForDropZones(){let s=this.querySelectorAll(o),l=Array.from(this.querySelectorAll(e)).map(b=>b),p=0,m=0;s.forEach(b=>{let y=b.getBoundingClientRect();p=Math.max(p,y.height),m=Math.max(m,y.width)});let f=this.querySelector(t)||this.shadowRoot?.querySelector(t);f&&(f.style.minHeight=`${p}px`,f.style.minWidth=`${m}px`);for(let b of l)b.style.minHeight=`${p}px`,b.style.minWidth=`${m}px`}activateDroppables(s){this.dragContainers.forEach(p=>{p.setAttribute("enabled",""),p.hasAttribute("disabled")&&(p.contains(s)||p.shadowRoot&&p.shadowRoot.contains(s))&&p.removeAttribute("disabled")}),this.droppables.forEach(p=>{p.setAttribute("enabled",""),p.hasAttribute("disabled")&&(p.contains(s)||p.shadowRoot&&p.shadowRoot.contains(s))&&p.removeAttribute("disabled")})}activateDragLocation(){this._internals.states.add("--dragzone-enabled")}deactivateDragLocation(){this._internals.states.delete("--dragzone-enabled")}deactivateDroppables(){this.dragContainers.forEach(l=>{l.removeAttribute("enabled")}),this.droppables.forEach(l=>l.removeAttribute("enabled"))}disconnectedCallback(){super.disconnectedCallback(),this.observer&&(this.observer.disconnect(),this.observer=null),this.droppableObsever&&(this.droppableObsever.disconnect(),this.droppableObsever=null),this.resizeObserver&&(this.resizeObserver.disconnect(),this.resizeObserver=null),document.removeEventListener("touchmove",this.handleTouchMove),document.removeEventListener("mousemove",this.handleTouchMove),document.removeEventListener("touchend",this.handleTouchEnd),document.removeEventListener("mouseup",this.handleTouchEnd),document.removeEventListener("touchcancel",this.handleTouchCancel)}handleTouchMove(s){if(this.isDraggable&&this.dragClone){let{x:l,y:p}=this.getEventCoordinates(s),m={clientX:l,clientY:p};this.calculateDragDistance(m)>=this.MIN_DRAG_DISTANCE&&(this.isDragging=!0,this.updateDragClonePosition(m));let f=this.findClosestDropzone();this.currentDropTarget=f,f!==this.lastTarget&&(this.lastTarget&&(this.deactivateDroppable(this.lastTarget),this.dispatchCustomEvent(this.lastTarget,"dragleave")),f&&(this.activateDroppable(f),this.dispatchCustomEvent(f,"dragenter")),this.lastTarget=f),this.currentDropTarget&&this.dispatchCustomEvent(this.currentDropTarget,"dragover"),s.preventDefault()}}handleTouchEnd(s){if(this.isDragging){if(this.currentDropTarget){let l=this.dragClone;this.moveDraggableToDroppable(l,this.currentDropTarget)}this.resetDragState()}this._internals.states.delete("--dragzone-active"),this.checkAllMaxAssociations(),s.preventDefault()}handleTouchCancel(s){this.resetDragState()}validate(){if(!this.shadowRoot)return!1;let s=this.getValidAssociations(),l=!0,p="";this.maxAssociations>0&&s>this.maxAssociations?(l=!1,p=this.dataset.maxSelectionsMessage||`You've selected too many associations. Maximum allowed is ${this.maxAssociations}.`):this.minAssociations>0&&s<this.minAssociations&&(l=!1,p=this.dataset.minSelectionsMessage||`You haven't selected enough associations. Minimum required is ${this.minAssociations}.`);let m=this.lastElementChild;return this._internals.setValidity(l?{}:{customError:!0},p,m),this.reportValidity(),l}reportValidity(){let s=this.shadowRoot.querySelector("#validationMessage");return s&&(this._internals.validity.valid?(s.textContent="",s.style.display="none"):(s.textContent=this._internals.validationMessage,s.style.display="block")),this._internals.validity.valid}checkMaxAssociations(s){let l=this.getMatchMaxValue(s),p=s.querySelectorAll('[qti-draggable="true"]').length;return l===0||p>=l}resetDragState(){if(this.dragClone)if(!(this.currentDropTarget!==null)||this.dragContainers.includes(this.currentDropTarget))this.dragSource.style.opacity="1.0",this.dragSource.style.display="block",this.dragSource.style.pointerEvents="auto",this.dragClone.remove();else{let p=window.getComputedStyle(this.dragSource);for(let m=0;m<p.length;m++){let f=p[m];this.dragClone.style.setProperty(f,p.getPropertyValue(f))}this.dragClone.style.opacity="1.0",this.dragClone.style.display="block",this.dragClone.style.pointerEvents="auto"}this.isDragging=!1,this.isDraggable=!1,this.dragSource=null,this.dragClone=null,this.touchStartPoint=null,this.currentDropTarget=null,this.lastTarget=null}checkAllMaxAssociations(){this.droppables.forEach(s=>{this.checkMaxAssociations(s)?this.disableDroppable(s):this.enableDroppable(s)})}getMatchMaxValue(s){let l=s.getAttribute("match-max");return l?parseInt(l,10):1}disableDroppable(s){s.setAttribute("disabled","")}enableDroppable(s){s.removeAttribute("disabled")}get value(){return this.collectResponseData()}set value(s){if(!this.isMatchTabular())if(Array.isArray(s)){s?.forEach(p=>this.placeResponse(p));let l=new FormData;s.forEach(p=>{l.append(this.responseIdentifier,p)}),this._internals.setFormValue(l)}else this._internals.setFormValue(s)}placeResponse(s){let[l,...p]=s.split(" ").reverse(),m=this.findDroppableById(l);p.forEach(f=>this.placeDraggableInDroppable(f,m))}findDroppableById(s){return this.droppables.find(l=>l.getAttribute("identifier")===s)}async placeDraggableInDroppable(s,l){let p=this.querySelector(`[identifier=${s}]`);if(!l||!p){console.error(`Cannot find draggable or droppable with the given identifier: ${s}`);return}let m=()=>{p.style.transform="translate(0, 0)",console.log("droppable",l),l.appendChild(p),this.checkAllMaxAssociations()};document.startViewTransition?await document.startViewTransition(m).finished:m()}getValidAssociations(){return this.droppables.filter(s=>s.childElementCount>0).length}saveResponse(){this.validate();let s=this.collectResponseData();this.dispatchEvent(new CustomEvent("qti-interaction-response",{bubbles:!0,composed:!0,detail:{responseIdentifier:this.responseIdentifier,response:s}}))}collectResponseData(){return this.droppables.map(l=>{let p=l.querySelectorAll('[qti-draggable="true"]'),m=Array.from(p).map(b=>b.getAttribute("identifier")),f=l.getAttribute("identifier");return m.map(b=>`${b} ${f}`)}).flat()}reset(s=!0){s&&this.saveResponse()}updateDragClonePosition(s){if(!this.isDragging||!this.dragClone)return;let l=s.clientX-this.cloneOffset.x,p=s.clientY-this.cloneOffset.y,{newLeft:m,newTop:f}=this.applyBoundaries(l,p,this.dragClone);this.dragClone.style.left=`${m}px`,this.dragClone.style.top=`${f}px`}getEventCoordinates(s,l=!1){let p=s.touches?s.touches[0]:s;return{x:l?p.pageX:p.clientX,y:l?p.pageY:p.clientY}}calculateDragDistance(s){let l=Math.abs(s.clientX-this.touchStartPoint.x),p=Math.abs(s.clientY-this.touchStartPoint.y);return l+p}applyBoundaries(s,l,p){let m=new DOMRect(0,0,window.innerWidth,window.innerHeight);this.rootNode instanceof ShadowRoot?m=this.rootNode.host.getBoundingClientRect():this.rootNode instanceof Document&&(m=document.documentElement.getBoundingClientRect());let f=p.getBoundingClientRect(),b=f.width,y=f.height,T=Math.max(m.left,Math.min(s,m.right-b)),q=Math.max(m.top,Math.min(l,m.bottom-y));return{newLeft:T,newTop:q}}findClosestDropzone(){let s=this.allDropzones.filter(f=>!f.hasAttribute("disabled"));if(!this.dragClone||s.length===0)return null;let l=this.dragClone.getBoundingClientRect(),p=null,m=0;for(let f of s){let b=f.getBoundingClientRect(),y=this.calculateOverlapArea(l,b);y>m&&(m=y,p=f)}if(!p){let f=200;for(let b of s){let y=b.getBoundingClientRect(),T=Math.sqrt(Math.pow(l.left-y.left,2)+Math.pow(l.top-y.top,2));T<f&&(f=T,p=b)}}return p}calculateOverlapArea(s,l){let p=Math.max(0,Math.min(s.right,l.right)-Math.max(s.left,l.left)),m=Math.max(0,Math.min(s.bottom,l.bottom)-Math.max(s.top,l.top));return p*m}dispatchCustomEvent(s,l,p=!0){if(!s)return;let m=new CustomEvent(l,{bubbles:p,cancelable:!0});m.dataTransfer=this.dataTransfer,s.dispatchEvent(m)}handleTouchStart(s){let{x:l,y:p}=this.getEventCoordinates(s);this.dropzoneOriginalParent=s.currentTarget.parentElement,this.touchStartPoint={x:l,y:p},this.dragSource=s.currentTarget,this.isDraggable=!0,this.rootNode=this.dragSource.getRootNode();let m=this.findDraggableInDraggableContainer(this.dragSource.getAttribute("identifier")),f=this.dragSource.parentElement;if(this.droppables.includes(f)){this.enableDroppable(f),this.dragClone=this.dragSource,this.dragSource=this.findDraggableInDraggableContainer(this.dragSource.getAttribute("identifier"));let b=this.findParentInteractionElement(this.dragSource),y=this.dragClone.getBoundingClientRect();b?b.appendChild(this.dragClone):this.rootNode instanceof ShadowRoot?this.rootNode.host.appendChild(this.dragClone):this.rootNode instanceof Document&&document.body.appendChild(this.dragClone),y&&this.setDragCloneStyles(y)}else{let b=m.getBoundingClientRect();this.cloneOffset.x=l-b.left,this.cloneOffset.y=p-b.top,this.dragClone=m.cloneNode(!0),b&&this.setDragCloneStyles(b);let y=this.findParentInteractionElement(this.dragSource);y?y.appendChild(this.dragClone):this.rootNode instanceof ShadowRoot?this.rootNode.host.appendChild(this.dragClone):this.rootNode instanceof Document&&document.body.appendChild(this.dragClone);let T=this.getMatchMaxValue(this.dragSource),q=this.draggables.filter(re=>re.getAttribute("identifier")===this.dragSource.getAttribute("identifier"));T!==0&&q.length>=T?(m.style.opacity="0.0",m.style.pointerEvents="none"):m.style.opacity="1.0",s.preventDefault()}}findParentInteractionElement(s){let l=s.parentElement;for(;l&&!l.tagName?.toLowerCase().endsWith("-interaction");)l=l.parentElement;return l}findDraggableInDraggableContainer(s){let l=this.dragContainers.flat();for(let p of l){if(p.getAttribute("identifier")===s)return p;let f=Array.from(p.assignedElements()||[]).find(b=>b.getAttribute("identifier")===s);if(f)return f}}setDragCloneStyles(s){this.dragClone.style.position="fixed",this.dragClone.style.top=`${s.top}px`,this.dragClone.style.left=`${s.left}px`,this.dragClone.style.width=`${s.width}px`,this.dragClone.style.height=`${s.height}px`,this.dragClone.style.setProperty("box-sizing","border-box","important"),this.dragClone.style.zIndex="9999",this.dragClone.style.pointerEvents="none",this.dragClone.style.opacity=this.DRAG_CLONE_OPACITY.toString(),this.dragClone.style.display="block"}}return n([d({attribute:!1,type:Object})],r.prototype,"configuration",2),n([d({type:Number,reflect:!0,attribute:"min-associations"})],r.prototype,"minAssociations",2),n([d({type:Number,reflect:!0,attribute:"max-associations"})],r.prototype,"maxAssociations",2),n([Ye(t)],r.prototype,"handleDraggableContainerChange",1),n([Ye(o)],r.prototype,"handleDraggablesChange",1),n([Ye(e)],r.prototype,"handleDroppablesChange",1),r};var Zt=g`
|
|
391
369
|
:host {
|
|
392
370
|
display: block; /* necessary to calculate scaling position */
|
|
393
371
|
}
|
|
@@ -412,24 +390,24 @@ var Rr=Object.defineProperty;var Ar=Object.getOwnPropertyDescriptor;var n=(c,o,e
|
|
|
412
390
|
rgb(0 0 0 / 0%) calc(50% + 1px)
|
|
413
391
|
);
|
|
414
392
|
}
|
|
415
|
-
`;var
|
|
393
|
+
`;var ue=class extends O(x,"qti-simple-associable-choice",".dl","slot[name='qti-simple-associable-choice']"){constructor(){super();this._childrenMap=[];this._registerChoiceHandler=this._registerChoice.bind(this),this.addEventListener("register-qti-simple-associable-choice",this._registerChoiceHandler)}_registerChoice(e){let t=e.target;this._childrenMap.push(t)}render(){return u` <slot name="prompt"></slot>
|
|
416
394
|
<slot name="qti-simple-associable-choice"></slot>
|
|
417
395
|
<div part="drop-container">
|
|
418
|
-
${this._childrenMap.length>0&&Array.from(Array(Math.ceil(this._childrenMap.length/2)).keys()).map((e,t)=>
|
|
396
|
+
${this._childrenMap.length>0&&Array.from(Array(Math.ceil(this._childrenMap.length/2)).keys()).map((e,t)=>u`<div part="associables-container">
|
|
419
397
|
<div name="left${t}" part="drop-list" class="dl" identifier="droplist${t}_left"></div>
|
|
420
398
|
<div name="right${t}" part="drop-list" class="dl" identifier="droplist${t}_right"></div>
|
|
421
399
|
</div>`)}
|
|
422
400
|
|
|
423
401
|
<div role="alert" id="validationMessage"></div>
|
|
424
|
-
</div>`}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("register-qti-simple-associable-choice",this._registerChoiceHandler)}};
|
|
402
|
+
</div>`}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("register-qti-simple-associable-choice",this._registerChoiceHandler)}};ue.styles=Zt,n([C()],ue.prototype,"_childrenMap",2),ue=n([h("qti-associate-interaction")],ue);var z=class extends x{constructor(){super();this._errorMessage=null;this.handlePostMessage=this.handlePostMessage.bind(this)}connectedCallback(){super.connectedCallback();let e=this.data.startsWith("http")?this.data:Ce(this.baseItemUrl+"/"+this.data);fetch(e).then(t=>t.json()).then(t=>{this.manifest=t,this.setupCES()}).catch(t=>{this._errorMessage=t})}setupCES(){let e=this.shadowRoot.querySelector("#pciContainer"),t=e.contentDocument;window.addEventListener("message",this.handlePostMessage),t.open(),t.write(`
|
|
425
403
|
<html>
|
|
426
404
|
<head>
|
|
427
|
-
<link href='${
|
|
428
|
-
<script src='${
|
|
405
|
+
<link href='${Ce(`${this.baseRefUrl}/${this.manifest.style[0]}`)}' rel="stylesheet" />
|
|
406
|
+
<script src='${Ce(`${this.baseRefUrl}/${this.manifest.script[0]}`)}'></script>
|
|
429
407
|
</head>
|
|
430
408
|
<body></body>
|
|
431
409
|
</html>
|
|
432
|
-
`),t.close()}getIFrames(){let e=this.shadowRoot.querySelectorAll("iframe"),t=this.querySelectorAll("iframe"),r=[...e,...t];for(let i of r){let
|
|
410
|
+
`),t.close()}getIFrames(){let e=this.shadowRoot.querySelectorAll("iframe"),t=this.querySelectorAll("iframe"),r=[...e,...t];for(let i of r){let a=i.src;if(new URL(a,window.location.href).origin===window.location.origin)try{let l=i.contentDocument||i.contentWindow.document;l&&this.getInnerIFrames(l,r)}catch(l){console.error("Error accessing nested iframe:",l)}}return r.forEach((i,a)=>{r.indexOf(i)!==a&&r.splice(a,1)}),r}getInnerIFrames(e,t=[]){return e.querySelectorAll("iframe").forEach(i=>{t.push(i);let a=i.src;if(new URL(a,window.location.href).origin===window.location.origin)try{let l=i.contentDocument||i.contentWindow.document;this.getInnerIFrames(l,t)}catch(l){console.error("Error accessing nested iframe:",l)}else console.warn("Skipped cross-origin iframe:",a)}),t}postToWindowAndIframes(e,t){window.postMessage({type:e,data:t},"*");let r=this.getIFrames();for(let i of r)i.contentWindow&&i.contentWindow.postMessage({type:e,data:t},"*")}handlePostMessage(e){let{type:t,data:r}=e.data;switch(t){case"setResponse":this.rawResponse=r,this.saveResponse(r);break;case"getResponse":{this.postToWindowAndIframes("responseData",this.rawResponse);break}case"getMedia":{let i=this.manifest.media.map(a=>a.startsWith("http")?a:Ce(this.baseRefUrl+"/"+a));this.postToWindowAndIframes("mediaData",i);break}case"setStageHeight":console.log("setStageHeight not implemented");break}}validate(){return this.rawResponse!==""}get value(){return this.rawResponse}set value(e){if(typeof e=="string")this.rawResponse=e,this.saveResponse(e);else throw new Error("Value must be a string")}disconnectedCallback(){window.removeEventListener("message",this.handlePostMessage),super.disconnectedCallback()}render(){return u`<iframe
|
|
433
411
|
width=${this.getAttribute("width")}
|
|
434
412
|
height=${this.getAttribute("height")}
|
|
435
413
|
frameborder="0"
|
|
@@ -437,10 +415,10 @@ var Rr=Object.defineProperty;var Ar=Object.getOwnPropertyDescriptor;var n=(c,o,e
|
|
|
437
415
|
id="pciContainer"
|
|
438
416
|
>
|
|
439
417
|
</iframe>
|
|
440
|
-
${this._errorMessage&&
|
|
418
|
+
${this._errorMessage&&u`<div style="color:red">
|
|
441
419
|
<h1>Error</h1>
|
|
442
420
|
${this._errorMessage}
|
|
443
|
-
</div>`}`}};n([
|
|
421
|
+
</div>`}`}};n([d({type:String,attribute:"data"})],z.prototype,"data",2),n([d({type:String,attribute:"data-base-item"})],z.prototype,"baseItemUrl",2),n([d({type:String,attribute:"data-base-ref"})],z.prototype,"baseRefUrl",2),n([d({type:String,attribute:"id"})],z.prototype,"id",2),n([C()],z.prototype,"_errorMessage",2),z=n([h("qti-custom-interaction")],z);var Q=class extends v{constructor(){super(...arguments);this.disabled=!1;this.countAttempt=null;this.title="end attempt"}render(){return u`<button ?disabled=${this.disabled} part="button" @click=${this.endAttempt}>${this.title}</button>`}endAttempt(e){this.dispatchEvent(new CustomEvent("end-attempt",{bubbles:!0,composed:!0,detail:{responseIdentifier:this.responseIdentifier,countAttempt:this.countAttempt==="true"}}))}};n([d({type:String,attribute:"response-identifier"})],Q.prototype,"responseIdentifier",2),n([d({reflect:!0,type:Boolean})],Q.prototype,"disabled",2),n([d({type:String,attribute:"count-attempt"})],Q.prototype,"countAttempt",2),n([d({type:String})],Q.prototype,"title",2),Q=n([h("qti-end-attempt-interaction")],Q);var Gt=g`
|
|
444
422
|
:host {
|
|
445
423
|
display: flex;
|
|
446
424
|
align-items: flex-start;
|
|
@@ -474,10 +452,10 @@ var Rr=Object.defineProperty;var Ar=Object.getOwnPropertyDescriptor;var n=(c,o,e
|
|
|
474
452
|
border-radius: 0.3rem;
|
|
475
453
|
gap: 0.5rem;
|
|
476
454
|
}
|
|
477
|
-
`;var
|
|
455
|
+
`;var Ae=class extends O(x,"qti-gap-text","qti-gap","slot[part='drags']"){render(){return u`<slot name="prompt"> </slot>
|
|
478
456
|
<slot part="drags" name="drags"></slot>
|
|
479
457
|
<slot part="drops"></slot>
|
|
480
|
-
<div role="alert" id="validationMessage"></div>`}set correctResponse(o){let e=[],t=Array.isArray(o)?o:[o];t&&(e=t.map(i=>{let
|
|
458
|
+
<div role="alert" id="validationMessage"></div>`}set correctResponse(o){let e=[],t=Array.isArray(o)?o:[o];t&&(e=t.map(i=>{let a=i.split(" ");return{text:a[0],gap:a[1]}})),this.querySelectorAll("qti-gap").forEach(i=>{let a=i.getAttribute("identifier"),s=e.find(p=>p.gap===a)?.text,l=this.querySelector(`qti-gap-text[identifier="${s}"]`)?.textContent.trim();if(s&&l){if(!i.nextElementSibling?.classList.contains("correct-option")){let p=document.createElement("span");p.classList.add("correct-option"),p.textContent=l,i.insertAdjacentElement("afterend",p)}}else i.nextElementSibling?.classList.contains("correct-option")&&i.nextElementSibling.remove()})}};Ae.styles=Gt,Ae=n([h("qti-gap-match-interaction")],Ae);var Qt=(c,o,e)=>{let t=new Map;for(let r=o;r<=e;r++)t.set(c[r],r);return t},ot=j(class extends le{constructor(c){if(super(c),c.type!==ae.CHILD)throw Error("repeat() can only be used in text expressions")}dt(c,o,e){let t;e===void 0?e=o:o!==void 0&&(t=o);let r=[],i=[],a=0;for(let s of c)r[a]=t?t(s,a):a,i[a]=e(s,a),a++;return{values:i,keys:r}}render(c,o,e){return this.dt(c,o,e).values}update(c,[o,e,t]){let r=$t(c),{values:i,keys:a}=this.dt(o,e,t);if(!Array.isArray(r))return this.ut=a,i;let s=this.ut??(this.ut=[]),l=[],p,m,f=0,b=r.length-1,y=0,T=i.length-1;for(;f<=b&&y<=T;)if(r[f]===null)f++;else if(r[b]===null)b--;else if(s[f]===a[y])l[y]=X(r[f],i[y]),f++,y++;else if(s[b]===a[T])l[T]=X(r[b],i[T]),b--,T--;else if(s[f]===a[T])l[T]=X(r[f],i[T]),ne(c,l[T+1],r[f]),f++,T--;else if(s[b]===a[y])l[y]=X(r[b],i[y]),ne(c,r[f],r[b]),b--,y++;else if(p===void 0&&(p=Qt(a,y,T),m=Qt(s,f,b)),p.has(s[f]))if(p.has(s[b])){let q=m.get(a[y]),re=q!==void 0?r[q]:null;if(re===null){let ye=ne(c,r[f]);X(ye,i[y]),l[y]=ye}else l[y]=X(re,i[y]),ne(c,r[f],re),r[q]=null;y++}else Be(r[b]),b--;else Be(r[f]),f++;for(;y<=T;){let q=ne(c,l[T+1]);X(q,i[y]),l[y++]=q}for(;f<=b;){let q=r[f++];q!==null&&Be(q)}return this.ut=a,Ht(c,l),oe}});function he(c,o,e,t){switch(c){case"circle":{let[r,i,a]=o,s=r/e.width*100,l=i/e.height*100,p=a/e.width*100;t.style.left=s-p+"%",t.style.top=l-p+"%",t.style.width=t.style.height=4*p+"px",t.style.borderRadius="9999px"}break;case"rect":{let[r,i,a,s]=o,l=r/e.width*100,p=i/e.height*100,m=a/e.width*100,f=s/e.height*100;t.style.left=l+"%",t.style.top=p+"%",t.style.width=m-l+"%",t.style.height=f-p+"%"}break;case"poly":{let r=o.reduce((q,re,ye,cr)=>{if(ye%2===1){let pr=q.pop();q[q.length]={x:pr,y:cr[ye]}}else q.push(re);return q},[]),i=Math.min(...r.map(q=>q.x)),a=Math.max(...r.map(q=>q.x)),s=Math.min(...r.map(q=>q.y)),l=Math.max(...r.map(q=>q.y)),p=i/e.width*100,m=s/e.height*100,f=a/e.width*100,b=l/e.height*100;t.style.left=i/e.width*100+"%",t.style.top=s/e.height*100+"%",t.style.width=f-p+"%",t.style.height=b-m+"%";let T=r.map(q=>({x:(q.x-i)/(a-i)*100,y:(q.y-s)/(l-s)*100})).map(q=>Math.round(q.x)+"% "+Math.round(q.y)+"%").join(",");t.style.clipPath=`polygon(${T})`}break;default:break}}var er=g`
|
|
481
459
|
slot:not([name='prompt']) {
|
|
482
460
|
// position: relative; /* qti-hotspot-choice relative to the slot */
|
|
483
461
|
display: block;
|
|
@@ -500,14 +478,14 @@ var Rr=Object.defineProperty;var Ar=Object.getOwnPropertyDescriptor;var n=(c,o,e
|
|
|
500
478
|
top: 0px;
|
|
501
479
|
left: 0px;
|
|
502
480
|
}
|
|
503
|
-
`;var
|
|
481
|
+
`;var B=class extends x{constructor(){super();this.startPoint=null;this.endPoint=null;this._lines=[];this.addEventListener("qti-register-hotspot",this.positionHotspotOnRegister)}reset(){this._lines=[]}validate(){return this._lines.length>0}set value(e){Array.isArray(e)&&(this._lines=e)}get value(){return this._lines}render(){return u`<slot name="prompt"></slot>
|
|
504
482
|
<line-container>
|
|
505
483
|
<svg
|
|
506
|
-
width=${
|
|
507
|
-
height=${
|
|
484
|
+
width=${K(this.grImage[0]?.width)}
|
|
485
|
+
height=${K(this.grImage[0]?.height)}
|
|
508
486
|
viewbox="0 0 ${this.grImage[0]?.width} ${this.grImage[0]?.height}"
|
|
509
487
|
>
|
|
510
|
-
${
|
|
488
|
+
${ot(this._lines,e=>e,(e,t)=>at`
|
|
511
489
|
<line
|
|
512
490
|
part="line"
|
|
513
491
|
x1=${parseInt(this.querySelector("[identifier="+e.split(" ")[0]+"]").style.left)}
|
|
@@ -516,10 +494,10 @@ var Rr=Object.defineProperty;var Ar=Object.getOwnPropertyDescriptor;var n=(c,o,e
|
|
|
516
494
|
y2=${parseInt(this.querySelector("[identifier="+e.split(" ")[1]+"]").style.top)}
|
|
517
495
|
stroke="red"
|
|
518
496
|
stroke-width="3"
|
|
519
|
-
@click=${r=>{r.stopPropagation(),this._lines=this._lines.filter((i,
|
|
497
|
+
@click=${r=>{r.stopPropagation(),this._lines=this._lines.filter((i,a)=>a!==t),this.saveResponse(this._lines)}}
|
|
520
498
|
/>
|
|
521
499
|
`)}
|
|
522
|
-
${this.startPoint&&
|
|
500
|
+
${this.startPoint&&at`<line
|
|
523
501
|
part="point"
|
|
524
502
|
x1=${this.startCoord.x}
|
|
525
503
|
y1=${this.startCoord.y}
|
|
@@ -531,7 +509,7 @@ var Rr=Object.defineProperty;var Ar=Object.getOwnPropertyDescriptor;var n=(c,o,e
|
|
|
531
509
|
</svg>
|
|
532
510
|
<slot></slot>
|
|
533
511
|
</line-container>
|
|
534
|
-
<div role="alert" id="validationMessage"></div>`}positionHotspotOnRegister(e){let t=this.querySelector("img"),r=e.target,i=r.getAttribute("coords"),
|
|
512
|
+
<div role="alert" id="validationMessage"></div>`}positionHotspotOnRegister(e){let t=this.querySelector("img"),r=e.target,i=r.getAttribute("coords"),a=r.getAttribute("shape"),s=i.split(",").map(l=>parseInt(l));he(a,s,t,r)}firstUpdated(e){super.firstUpdated(e),this.hotspots=this.querySelectorAll("qti-associable-hotspot"),document.addEventListener("mousemove",t=>{this.mouseCoord={x:t.clientX-this.grImage[0].getBoundingClientRect().left,y:t.clientY-this.grImage[0].getBoundingClientRect().top}}),this.hotspots.forEach(t=>{t.style.left=t.getAttribute("coords").split(",")[0]+"px",t.style.top=t.getAttribute("coords").split(",")[1]+"px",t.addEventListener("click",r=>{this.startPoint?this.endPoint||(this.endPoint=r.target,this._lines=[...this._lines,this.startPoint.getAttribute("identifier")+" "+this.endPoint.getAttribute("identifier")],this.saveResponse(this._lines),this.startPoint=null,this.endPoint=null):(this.startPoint=r.target,this.startCoord={x:this.startPoint.getAttribute("coords").split(",")[0],y:this.startPoint.getAttribute("coords").split(",")[1]})})})}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("qti-register-hotspot",this.positionHotspotOnRegister)}};B.styles=er,n([C()],B.prototype,"_lines",2),n([C()],B.prototype,"startCoord",2),n([C()],B.prototype,"mouseCoord",2),n([Vt({selector:"img"})],B.prototype,"grImage",2),B=n([h("qti-graphic-associate-interaction")],B);var tr=g`
|
|
535
513
|
:host {
|
|
536
514
|
display: flex;
|
|
537
515
|
align-items: flex-start;
|
|
@@ -585,10 +563,10 @@ var Rr=Object.defineProperty;var Ar=Object.getOwnPropertyDescriptor;var n=(c,o,e
|
|
|
585
563
|
user-select: none;
|
|
586
564
|
pointer-events: none;
|
|
587
565
|
}
|
|
588
|
-
`;var
|
|
566
|
+
`;var De=class extends O(x,"qti-gap-img, qti-gap-text","qti-associable-hotspot","slot[part='drags']"){render(){return u` <slot name="prompt"></slot>
|
|
589
567
|
<slot part="image"></slot>
|
|
590
568
|
<slot part="drags" name="drags" class="hover-border"></slot>
|
|
591
|
-
<div role="alert" id="validationMessage"></div>`}positionHotspotOnRegister(o){let e=o.target,t=e.getAttribute("coords"),r=e.getAttribute("shape"),i=t.split(",").map(
|
|
569
|
+
<div role="alert" id="validationMessage"></div>`}positionHotspotOnRegister(o){let e=o.target,t=e.getAttribute("coords"),r=e.getAttribute("shape"),i=t.split(",").map(a=>parseInt(a));switch(r){case"circle":{let[a,s,l]=i;e.style.left=a-l+"px",e.style.top=s-l+"px",e.style.width=e.style.height=2*l+"px"}break;case"rect":{let[a,s,l,p]=i;e.style.left=a+"px",e.style.top=s+"px",e.style.width=l-a+"px",e.style.height=p-s+"px"}break;default:break}}connectedCallback(){super.connectedCallback(),this.addEventListener("qti-register-hotspot",this.positionHotspotOnRegister)}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("qti-register-hotspot",this.positionHotspotOnRegister)}};De.styles=tr,De=n([h("qti-graphic-gap-match-interaction")],De);var rr=g`
|
|
592
570
|
slot:not([name='prompt']) {
|
|
593
571
|
position: relative; /* qti-hotspot-choice relative to the slot */
|
|
594
572
|
display: block;
|
|
@@ -599,11 +577,11 @@ var Rr=Object.defineProperty;var Ar=Object.getOwnPropertyDescriptor;var n=(c,o,e
|
|
|
599
577
|
pointer-events: none;
|
|
600
578
|
user-select: none;
|
|
601
579
|
}
|
|
602
|
-
`;var
|
|
580
|
+
`;var Ve=class extends J(x,"qti-hotspot-choice"){constructor(){super(...arguments);this._choiceElements=[]}render(){return u`
|
|
603
581
|
<slot name="prompt"></slot>
|
|
604
582
|
<slot></slot>
|
|
605
583
|
<div role="alert" id="validationMessage"></div>
|
|
606
|
-
`}setHotspotOrder(e){let{identifier:t}=e.detail,r=this._choiceElements.find(
|
|
584
|
+
`}setHotspotOrder(e){let{identifier:t}=e.detail,r=this._choiceElements.find(a=>a.getAttribute("identifier")===t),i=this._choiceElements.length;if(!this.choiceOrdering){if(this.choiceOrdering=!0,r.order==null){if(this._choiceElements.filter(a=>a.order>0).length>=i){this.choiceOrdering=!1;return}r.order=this._choiceElements.filter(a=>!!a.order).length+1,this.choiceOrdering=!1;return}else this._choiceElements.forEach(a=>(a.order>a.order&&a.order--,a)),r.order=null;this.choiceOrdering=!1}}positionHotspotOnRegister(e){let t=this.querySelector("img"),r=e.target,i=r.getAttribute("coords"),a=r.getAttribute("shape"),s=i.split(",").map(l=>parseInt(l));he(a,s,t,r)}connectedCallback(){super.connectedCallback(),this.addEventListener("activate-qti-hotspot-choice",this.setHotspotOrder),this.addEventListener("register-qti-hotspot-choice",this.positionHotspotOnRegister)}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("activate-qti-hotspot-choice",this.setHotspotOrder),this.removeEventListener("register-qti-hotspot-choice",this.positionHotspotOnRegister)}};Ve.styles=rr,Ve=n([h("qti-graphic-order-interaction")],Ve);var ir=g`
|
|
607
585
|
slot:not([name='prompt']) {
|
|
608
586
|
position: relative; /* qti-hotspot-choice relative to the slot */
|
|
609
587
|
display: block;
|
|
@@ -615,13 +593,13 @@ var Rr=Object.defineProperty;var Ar=Object.getOwnPropertyDescriptor;var n=(c,o,e
|
|
|
615
593
|
user-select: none;
|
|
616
594
|
/* width:100%; */
|
|
617
595
|
}
|
|
618
|
-
`;var
|
|
596
|
+
`;var Ne=class extends J(x,"qti-hotspot-choice"){render(){return u`
|
|
619
597
|
<slot name="prompt"></slot>
|
|
620
598
|
<slot></slot>
|
|
621
|
-
`}positionHotspotOnRegister(o){let e=this.querySelector("img"),t=o.target,r=t.getAttribute("coords"),i=t.getAttribute("shape"),
|
|
599
|
+
`}positionHotspotOnRegister(o){let e=this.querySelector("img"),t=o.target,r=t.getAttribute("coords"),i=t.getAttribute("shape"),a=r.split(",").map(s=>parseInt(s));he(i,a,e,t)}connectedCallback(){super.connectedCallback(),this.addEventListener("register-qti-hotspot-choice",this.positionHotspotOnRegister)}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("unregister-qti-hotspot-choice",this.positionHotspotOnRegister)}};Ne.styles=ir,Ne=n([h("qti-hotspot-interaction")],Ne);var ee=class extends V(v,"qti-simple-associable-choice"){constructor(){super(...arguments);this.matchMin=0;this.matchMax=1;this.fixed=!1}connectedCallback(){super.connectedCallback(),this.setAttribute("slot","qti-simple-associable-choice"),this.setAttribute("part","qti-simple-associable-choice")}render(){return u`
|
|
622
600
|
<slot part="slot"></slot>
|
|
623
601
|
<slot part="dropslot" name="qti-simple-associable-choice"></slot>
|
|
624
|
-
`}};
|
|
602
|
+
`}};ee.styles=g`
|
|
625
603
|
:host {
|
|
626
604
|
display: flex;
|
|
627
605
|
user-select: none;
|
|
@@ -633,7 +611,7 @@ var Rr=Object.defineProperty;var Ar=Object.getOwnPropertyDescriptor;var n=(c,o,e
|
|
|
633
611
|
slot[name='qti-simple-associable-choice'] {
|
|
634
612
|
width: 100%;
|
|
635
613
|
}
|
|
636
|
-
`,n([
|
|
614
|
+
`,n([d({type:Number,attribute:"match-min"})],ee.prototype,"matchMin",2),n([d({type:Number,attribute:"match-max"})],ee.prototype,"matchMax",2),n([d({type:Boolean,attribute:"fixed"})],ee.prototype,"fixed",2),ee=n([h("qti-simple-associable-choice")],ee);var sr=g`
|
|
637
615
|
slot:not([hidden]) {
|
|
638
616
|
/* slot where the */
|
|
639
617
|
display: flex;
|
|
@@ -660,37 +638,37 @@ var Rr=Object.defineProperty;var Ar=Object.getOwnPropertyDescriptor;var n=(c,o,e
|
|
|
660
638
|
/* Make sure the drag and drop container slots have the same width */
|
|
661
639
|
flex: 1;
|
|
662
640
|
}
|
|
663
|
-
`;var
|
|
641
|
+
`;var Y=class extends O(x,"qti-simple-match-set:first-of-type qti-simple-associable-choice, qti-simple-match-set:last-of-type > qti-simple-associable-choice > qti-simple-associable-choice","qti-simple-match-set:last-of-type > qti-simple-associable-choice","qti-simple-match-set:first-of-type"){constructor(){super(...arguments);this.lastCheckedRadio=null;this.class="";this._response=[];this.responseIdentifier="";this.correctOptions=[];this.handleRadioClick=e=>{let t=e.target;this.lastCheckedRadio===t?(t.checked=!1,this.lastCheckedRadio=null,this.handleRadioChange(e)):this.lastCheckedRadio=t};this.handleRadioChange=e=>{let t=e.target,r=t.value,i=t.name,a=t.type;t.checked?(this.value?this.value.indexOf(r)===-1&&(a==="radio"&&(this.value=this.value.filter(s=>s.indexOf(i)===-1)),this.value=[...this.value,r]):this.value=[r],this.lastCheckedRadio=t):(this.value=this.value.filter(s=>s!==r),this.lastCheckedRadio=null),this.requestUpdate(),this.dispatchEvent(new CustomEvent("qti-interaction-response",{bubbles:!0,composed:!0,detail:{responseIdentifier:this.responseIdentifier,response:Array.isArray(this.value)?[...this.value]:this.value}}))}}get value(){return this.classList.contains("qti-match-tabular")?this._response:super.value}set value(e){this.classList.contains("qti-match-tabular")?this._response=e:super.value=e}async connectedCallback(){super.connectedCallback(),this.rows=Array.from(this.querySelectorAll("qti-simple-match-set:first-of-type qti-simple-associable-choice")),this.cols=Array.from(this.querySelectorAll("qti-simple-match-set:last-of-type qti-simple-associable-choice")),this.value=[]}set correctResponse(e){if(e===""){this.correctOptions=[];return}else Array.isArray(e)&&(this.correctOptions=e)}render(){let e=this.class.split(" ").includes("qti-match-tabular");return u`
|
|
664
642
|
<slot name="prompt"></slot>
|
|
665
643
|
<slot ?hidden=${e}></slot>
|
|
666
644
|
|
|
667
|
-
${e?
|
|
645
|
+
${e?u`
|
|
668
646
|
<table>
|
|
669
647
|
<tr>
|
|
670
648
|
<td></td>
|
|
671
|
-
${this.cols.map(t=>
|
|
649
|
+
${this.cols.map(t=>u`<th part="r-header">${Z(t.innerHTML)}</th>`)}
|
|
672
650
|
</tr>
|
|
673
651
|
|
|
674
|
-
${this.rows.map(t=>
|
|
675
|
-
<td part="c-header">${
|
|
676
|
-
${this.cols.map(r=>{let i=t.getAttribute("identifier"),
|
|
652
|
+
${this.rows.map(t=>u`<tr>
|
|
653
|
+
<td part="c-header">${Z(t.innerHTML)}</td>
|
|
654
|
+
${this.cols.map(r=>{let i=t.getAttribute("identifier"),a=r.getAttribute("identifier"),s=`${i} ${a}`,l=this.value.filter(b=>b.split(" ")[0]===i).length||0,p=this.value.includes(s),m=`rb ${p?"rb-checked":""} ${this.correctOptions.includes(s)?"rb-correct":""}`,f=this.correctOptions.length>0?!0:t.matchMax===1?!1:l>=t.matchMax&&!p;return u`<td>
|
|
677
655
|
<input
|
|
678
656
|
type=${t.matchMax===1?"radio":"checkbox"}
|
|
679
|
-
part=${
|
|
657
|
+
part=${m}
|
|
680
658
|
name=${i}
|
|
681
659
|
value=${s}
|
|
682
|
-
.disabled=${
|
|
683
|
-
@change=${
|
|
684
|
-
@click=${
|
|
660
|
+
.disabled=${f}
|
|
661
|
+
@change=${b=>this.handleRadioChange(b)}
|
|
662
|
+
@click=${b=>t.matchMax===1?this.handleRadioClick(b):null}
|
|
685
663
|
/>
|
|
686
664
|
</td>`})}
|
|
687
665
|
</tr>`)}
|
|
688
666
|
</table>
|
|
689
|
-
`:
|
|
667
|
+
`:L}
|
|
690
668
|
|
|
691
669
|
<div role="alert" id="validationMessage"></div>
|
|
692
|
-
`}};
|
|
693
|
-
<slot></slot>`}connectedCallback(){super.connectedCallback();let e=this.querySelector("audio")||this.querySelector("video")||this.querySelector("object");e&&e.addEventListener("ended",()=>{this._value++,this.saveResponse(this.value)})}};
|
|
670
|
+
`}};Y.styles=sr,n([d({type:String})],Y.prototype,"class",2),n([C()],Y.prototype,"_response",2),n([d({type:String,attribute:"response-identifier"})],Y.prototype,"responseIdentifier",2),n([C()],Y.prototype,"correctOptions",2),Y=n([h("qti-match-interaction")],Y);var He=class extends x{constructor(){super();this._value=0}reset(){}validate(){return!0}get value(){return this._value.toString()}set value(e){if(!isNaN(parseInt(e.toString())))this._value=parseInt(e.toString());else throw new Error("Value must be a number")}static get properties(){return{...x.properties,step:{type:Number,attribute:"step",default:10}}}render(){return u` <slot name="prompt"></slot>
|
|
671
|
+
<slot></slot>`}connectedCallback(){super.connectedCallback();let e=this.querySelector("audio")||this.querySelector("video")||this.querySelector("object");e&&e.addEventListener("ended",()=>{this._value++,this.saveResponse(this.value)})}};He.styles=[g``],He=n([h("qti-media-interaction")],He);var or=g`
|
|
694
672
|
[part='drags'] {
|
|
695
673
|
display: flex;
|
|
696
674
|
align-items: flex-start;
|
|
@@ -739,13 +717,13 @@ var Rr=Object.defineProperty;var Ar=Object.getOwnPropertyDescriptor;var n=(c,o,e
|
|
|
739
717
|
:host(.qti-choices-right) [part='container'] {
|
|
740
718
|
flex-direction: row-reverse;
|
|
741
719
|
}
|
|
742
|
-
`;var
|
|
720
|
+
`;var U=class extends Je(O(x,"qti-simple-choice","drop-list","slot[part='drags']"),"qti-simple-choice"){constructor(){super(...arguments);this.nrChoices=0;this.correctResponses=[];this.showCorrectResponses=!1}render(){let e=Array.from(this.querySelectorAll("qti-simple-choice"));return this.nrChoices<e.length&&(this.nrChoices=e.length),u` <slot name="prompt"> </slot>
|
|
743
721
|
<div part="container">
|
|
744
722
|
<slot part="drags"> </slot>
|
|
745
723
|
<div part="drops">
|
|
746
|
-
${Array.from(Array(this.nrChoices)).map((t,r)=>
|
|
724
|
+
${Array.from(Array(this.nrChoices)).map((t,r)=>u`<drop-list part="drop-list" identifier="droplist${r}"></drop-list>${this.showCorrectResponses&&this.correctResponses.length>r?Z(`<span part='correct-response'>${this.correctResponses[r]}</span>`):""}`)}
|
|
747
725
|
</div>
|
|
748
|
-
</div>`}set correctResponse(e){if(e===""){this.showCorrectResponses=!1;return}this.correctResponses.length===0&&(Array.isArray(e)?e:[e]).forEach(r=>{let i=this.querySelector(`qti-simple-choice[identifier="${r}"]`);i||(i=this.shadowRoot.querySelector(`qti-simple-choice[identifier="${r}"]`));let
|
|
726
|
+
</div>`}set correctResponse(e){if(e===""){this.showCorrectResponses=!1;return}this.correctResponses.length===0&&(Array.isArray(e)?e:[e]).forEach(r=>{let i=this.querySelector(`qti-simple-choice[identifier="${r}"]`);i||(i=this.shadowRoot.querySelector(`qti-simple-choice[identifier="${r}"]`));let a=i?.textContent.trim();this.correctResponses=[...this.correctResponses,a]}),this.showCorrectResponses=!0}getResponse(){return Array.from(this.shadowRoot.querySelectorAll("drop-list")).map(r=>{let i=r.querySelectorAll('[qti-draggable="true"]');return[...Array.from(i).map(s=>s.getAttribute("identifier"))].join(" ")})}async firstUpdated(e){super.firstUpdated(e),this.childrenMap=Array.from(this.querySelectorAll("qti-simple-choice")),this.childrenMap.forEach(t=>t.setAttribute("part","qti-simple-choice"))}};U.styles=or,n([C()],U.prototype,"nrChoices",2),n([C()],U.prototype,"correctResponses",2),n([C()],U.prototype,"showCorrectResponses",2),n([d({type:String})],U.prototype,"orientation",2),U=n([h("qti-order-interaction")],U);var nt=class extends v{render(){return u`<slot></slot>`}};nt.styles=[g`
|
|
749
727
|
:host {
|
|
750
728
|
display: block;
|
|
751
729
|
}
|
|
@@ -756,23 +734,23 @@ var Rr=Object.defineProperty;var Ar=Object.getOwnPropertyDescriptor;var n=(c,o,e
|
|
|
756
734
|
left: 50%;
|
|
757
735
|
transform: translateX(-50%);
|
|
758
736
|
}
|
|
759
|
-
`];customElements.define("qti-position-object-interaction",
|
|
737
|
+
`];customElements.define("qti-position-object-interaction",nt);var $e=class extends v{render(){return u`<slot></slot>`}constructor(){super(),this.removeMoveListener=this.removeMoveListener.bind(this),this.dragElementHandler=this.dragElementHandler.bind(this)}dragElementHandler(o){o.preventDefault();let e=o.clientX-this.startX,t=o.clientY-this.startY;this.dragElement.style.left=this.dragElement.offsetLeft+e+"px",this.dragElement.style.top=this.dragElement.offsetTop+t+"px",this.startX=o.clientX,this.startY=o.clientY}firstUpdated(o){super.firstUpdated(o),this.dragElement=this.querySelector("qti-position-object-interaction>img"),this.startX=0,this.startY=0,this.dragElement.addEventListener("mousedown",e=>{this.startX=e.clientX,this.startY=e.clientY,document.addEventListener("mousemove",this.dragElementHandler,!0)}),document.addEventListener("mouseup",this.removeMoveListener)}removeMoveListener(){document.removeEventListener("mousemove",this.dragElementHandler,!0)}disconnectedCallback(){super.disconnectedCallback(),document.removeEventListener("mousemove",this.dragElementHandler),document.removeEventListener("mouseup",this.removeMoveListener)}};$e.styles=[g`
|
|
760
738
|
:host {
|
|
761
739
|
display: inline-block;
|
|
762
740
|
position: relative;
|
|
763
741
|
}
|
|
764
|
-
`]
|
|
742
|
+
`],$e=n([h("qti-position-object-stage")],$e);var nr="important",mr=" !"+nr,ar=j(class extends le{constructor(c){if(super(c),c.type!==ae.ATTRIBUTE||c.name!=="style"||c.strings?.length>2)throw Error("The `styleMap` directive must be used in the `style` attribute and must be the only part in the attribute.")}render(c){return Object.keys(c).reduce((o,e)=>{let t=c[e];return t==null?o:o+`${e=e.includes("-")?e:e.replace(/(?:^(webkit|moz|ms|o)|)(?=[A-Z])/g,"-$&").toLowerCase()}:${t};`},"")}update(c,[o]){let{style:e}=c.element;if(this.ft===void 0)return this.ft=new Set(Object.keys(o)),this.render(o);for(let t of this.ft)o[t]==null&&(this.ft.delete(t),t.includes("-")?e.removeProperty(t):e[t]=null);for(let t in o){let r=o[t];if(r!=null){this.ft.add(t);let i=typeof r=="string"&&r.endsWith(mr);t.includes("-")||i?e.setProperty(t,i?r.slice(0,-11):r,i?nr:""):e[t]=r}}return oe}});var te=class extends x{constructor(){super(...arguments);this.maxChoices=1/0;this.minChoices=0;this._points=[];this._imgElement=null;this._onImageClick=e=>{if(this._points.length<this.maxChoices){let t=e.offsetX,r=e.offsetY;this._points=[...this._points,`${t} ${r}`],this.saveResponse(this._points)}}}render(){return u` <slot name="prompt"></slot>
|
|
765
743
|
<point-container>
|
|
766
|
-
${
|
|
744
|
+
${ot(this._points,e=>e,(e,t)=>u`
|
|
767
745
|
<button
|
|
768
746
|
part="point"
|
|
769
|
-
style=${
|
|
747
|
+
style=${ar({position:"absolute",transform:"translate(-50%, -50%)",left:`${e.split(" ")[0]}px`,top:`${e.split(" ")[1]}px`})}
|
|
770
748
|
aria-label="Remove point at ${e}"
|
|
771
|
-
@click=${r=>{r.stopPropagation(),this._points=this._points.filter((i,
|
|
749
|
+
@click=${r=>{r.stopPropagation(),this._points=this._points.filter((i,a)=>a!==t),this.saveResponse(this._points)}}
|
|
772
750
|
></button>
|
|
773
751
|
`)}
|
|
774
752
|
<slot></slot>
|
|
775
|
-
</point-container>`}reset(){this._points=[]}validate(){return this._points.length>=this.minChoices&&this._points.length<=this.maxChoices}set value(e){this._points=Array.isArray(e)?e:[e]}get value(){return this._points}firstUpdated(){this._imgElement=this.querySelector("img"),this._imgElement?this._imgElement.addEventListener("click",this._onImageClick):console.warn("No <img> element found in <qti-select-point-interaction>")}disconnectedCallback(){super.disconnectedCallback(),this._imgElement&&this._imgElement.removeEventListener("click",this._onImageClick)}};
|
|
753
|
+
</point-container>`}reset(){this._points=[]}validate(){return this._points.length>=this.minChoices&&this._points.length<=this.maxChoices}set value(e){this._points=Array.isArray(e)?e:[e]}get value(){return this._points}firstUpdated(){this._imgElement=this.querySelector("img"),this._imgElement?this._imgElement.addEventListener("click",this._onImageClick):console.warn("No <img> element found in <qti-select-point-interaction>")}disconnectedCallback(){super.disconnectedCallback(),this._imgElement&&this._imgElement.removeEventListener("click",this._onImageClick)}};te.styles=[g`
|
|
776
754
|
:host {
|
|
777
755
|
display: block;
|
|
778
756
|
}
|
|
@@ -780,7 +758,7 @@ var Rr=Object.defineProperty;var Ar=Object.getOwnPropertyDescriptor;var n=(c,o,e
|
|
|
780
758
|
display: block;
|
|
781
759
|
position: relative;
|
|
782
760
|
}
|
|
783
|
-
`],n([
|
|
761
|
+
`],n([d({type:Number,attribute:"max-choices"})],te.prototype,"maxChoices",2),n([d({type:Number,attribute:"min-choices"})],te.prototype,"minChoices",2),n([C()],te.prototype,"_points",2),te=n([h("qti-select-point-interaction")],te);var lr=g`
|
|
784
762
|
:host {
|
|
785
763
|
display: block;
|
|
786
764
|
--show-bounds: true;
|
|
@@ -848,7 +826,7 @@ var Rr=Object.defineProperty;var Ar=Object.getOwnPropertyDescriptor;var n=(c,o,e
|
|
|
848
826
|
text-align: center;
|
|
849
827
|
color: #6b7280; /* text-gray-500 */
|
|
850
828
|
}
|
|
851
|
-
`;var
|
|
829
|
+
`;var P=class extends v{constructor(){super();this._value=0;this.min=0;this.max=100;this.step=1;this._internals=this.attachInternals()}connectedCallback(){super.connectedCallback(),this._updateValue(this.min),this.setAttribute("tabindex","0"),this.setAttribute("role","slider")}get value(){return this._value.toString()}set value(e){let t=parseInt(e,10);isNaN(t)||this._updateValue(t)}_updateValue(e){this._value=Math.min(this.max,Math.max(this.min,e));let t=(this._value-this.min)/(this.max-this.min)*100;this.style.setProperty("--value-percentage",`${t}%`),this._internals.setFormValue(this.value),this.requestUpdate()}render(){return u`
|
|
852
830
|
<slot name="prompt"></slot>
|
|
853
831
|
<div id="slider" part="slider">
|
|
854
832
|
<div id="bounds" part="bounds">
|
|
@@ -862,49 +840,49 @@ var Rr=Object.defineProperty;var Ar=Object.getOwnPropertyDescriptor;var n=(c,o,e
|
|
|
862
840
|
<div id="knob" part="knob"><div id="value" part="value">${this.value}</div></div>
|
|
863
841
|
</div>
|
|
864
842
|
</div>
|
|
865
|
-
`}_onMouseDown(e){this._startDrag(e.pageX);let t=i=>this._onDrag(i.pageX),r=()=>{document.removeEventListener("mousemove",t),document.removeEventListener("mouseup",r),this._onDragEnd()};document.addEventListener("mousemove",t),document.addEventListener("mouseup",r)}_onTouchStart(e){this._startDrag(e.touches[0].pageX);let t=i=>this._onDrag(i.touches[0].pageX),r=()=>{document.removeEventListener("touchmove",t),document.removeEventListener("touchend",r),this._onDragEnd()};document.addEventListener("touchmove",t,{passive:!1}),document.addEventListener("touchend",r)}_startDrag(e){this._onDrag(e)}_onDrag(e){let t=this._rail.getBoundingClientRect(),r=e-t.left,i=Math.min(1,Math.max(0,r/t.width)),
|
|
843
|
+
`}_onMouseDown(e){this._startDrag(e.pageX);let t=i=>this._onDrag(i.pageX),r=()=>{document.removeEventListener("mousemove",t),document.removeEventListener("mouseup",r),this._onDragEnd()};document.addEventListener("mousemove",t),document.addEventListener("mouseup",r)}_onTouchStart(e){this._startDrag(e.touches[0].pageX);let t=i=>this._onDrag(i.touches[0].pageX),r=()=>{document.removeEventListener("touchmove",t),document.removeEventListener("touchend",r),this._onDragEnd()};document.addEventListener("touchmove",t,{passive:!1}),document.addEventListener("touchend",r)}_startDrag(e){this._onDrag(e)}_onDrag(e){let t=this._rail.getBoundingClientRect(),r=e-t.left,i=Math.min(1,Math.max(0,r/t.width)),a=this.min+Math.round(i*(this.max-this.min)/this.step)*this.step;this._updateValue(a)}_onDragEnd(){this.dispatchEvent(new Event("change",{bubbles:!0}))}};P.formAssociated=!0,P.styles=lr,n([ze("#rail")],P.prototype,"_rail",2),n([d({type:Number,attribute:"lower-bound"})],P.prototype,"min",2),n([d({type:Number,attribute:"upper-bound"})],P.prototype,"max",2),n([d({type:Number,attribute:"step"})],P.prototype,"step",2),P=n([h("qti-slider-interaction")],P);var Ie=class extends v{render(){return u`<slot @slotchange=${this.handleSlotChange}></slot>`}handleSlotChange(){let o=Array.from(this.firstElementChild?.childNodes??[]).find(e=>e.nodeType===Node.COMMENT_NODE);try{this.operatorFunction=new Function("context","fn","item",o?.textContent??"")}catch(e){console.error("custom-operator contains invalid javascript code",e)}}calculate(){let o={variable:t=>this._context?.variables.find(r=>r.identifier===t)?.value??"",correct:t=>this._context?.variables.find(r=>r.identifier===t)?.correctResponse??""},e={getVariable:t=>this._context?.variables.find(r=>r.identifier===t),updateOutcomeVariable:(t,r)=>{this.dispatchEvent(new CustomEvent("qti-set-outcome-value",{bubbles:!0,composed:!0,detail:{outcomeIdentifier:t,value:r}}))},updateResponseVariable:(t,r)=>{this.dispatchEvent(new CustomEvent("qti-interaction-response",{bubbles:!0,composed:!0,detail:{responseIdentifier:t,response:r}}))}};return this.operatorFunction(this._context,o,e)}};n([k({context:w,subscribe:!0}),C()],Ie.prototype,"_context",2),Ie=n([h("qti-custom-operator")],Ie);var Oe=class extends v{connectedCallback(){super.connectedCallback(),this.dispatchEvent(new CustomEvent("qti-register-hotspot",{bubbles:!0,composed:!0,cancelable:!1}))}render(){return u` <slot name="drags"></slot> `}};Oe.styles=g`
|
|
866
844
|
:host {
|
|
867
845
|
display: flex;
|
|
868
846
|
user-select: none;
|
|
869
847
|
position: absolute;
|
|
870
848
|
}
|
|
871
|
-
`,
|
|
849
|
+
`,Oe=n([h("qti-associable-hotspot")],Oe);var me=class extends v{constructor(){super(...arguments);this.tabindex=0}render(){return u` <slot name="drags"></slot>`}};me.styles=g`
|
|
872
850
|
:host {
|
|
873
851
|
display: flex;
|
|
874
852
|
user-select: none;
|
|
875
853
|
}
|
|
876
|
-
`,n([
|
|
854
|
+
`,n([d({type:Number,reflect:!0})],me.prototype,"tabindex",2),me=n([h("qti-gap")],me);var fe=class extends v{constructor(){super(...arguments);this.tabindex=0}connectedCallback(){this.setAttribute("slot","drags")}};fe.styles=g`
|
|
877
855
|
:host {
|
|
878
856
|
display: flex;
|
|
879
857
|
user-select: none;
|
|
880
858
|
}
|
|
881
|
-
`,n([
|
|
859
|
+
`,n([d({type:Number,reflect:!0})],fe.prototype,"tabindex",2),fe=n([h("qti-gap-img")],fe);var ge=class extends V(v,"qti-gap-text"){constructor(){super(...arguments);this.tabindex=0}connectedCallback(){super.connectedCallback(),this.setAttribute("slot","drags")}render(){return u`<slot></slot>`}};ge.styles=g`
|
|
882
860
|
:host {
|
|
883
861
|
display: inline-flex;
|
|
884
862
|
user-select: none;
|
|
885
863
|
}
|
|
886
|
-
`,n([
|
|
864
|
+
`,n([d({type:Number,reflect:!0})],ge.prototype,"tabindex",2),ge=n([h("qti-gap-text")],ge);var be=class extends V(v,"qti-hotspot-choice"){};be.styles=g`
|
|
887
865
|
:host {
|
|
888
866
|
display: flex;
|
|
889
867
|
user-select: none;
|
|
890
868
|
position: absolute;
|
|
891
869
|
}
|
|
892
|
-
`,n([
|
|
893
|
-
<slot></slot> `}};
|
|
870
|
+
`,n([d({attribute:"aria-ordervalue",type:Number,reflect:!0})],be.prototype,"order",2),be=n([h("qti-hotspot-choice")],be);var Pe=class extends V(v,"qti-hottext"){render(){return u`<div part="ch"><div part="cha"></div></div>
|
|
871
|
+
<slot></slot> `}};Pe.styles=g`
|
|
894
872
|
:host {
|
|
895
873
|
display: flex;
|
|
896
874
|
user-select: none;
|
|
897
875
|
}
|
|
898
|
-
`,
|
|
876
|
+
`,Pe=n([h("qti-hottext")],Pe);var Fe=class extends v{static get styles(){return[g`
|
|
899
877
|
:host {
|
|
900
878
|
display: block;
|
|
901
879
|
cursor: pointer;
|
|
902
880
|
}
|
|
903
|
-
`]}connectedCallback(){super.connectedCallback(),this.addEventListener("click",this._onSelectInlineChoice),this.dispatchEvent(new CustomEvent("qti-inline-choice-register",{bubbles:!0,composed:!0,cancelable:!1}))}disconnectedCallback(){this.removeEventListener("click",this._onSelectInlineChoice)}render(){return
|
|
881
|
+
`]}connectedCallback(){super.connectedCallback(),this.addEventListener("click",this._onSelectInlineChoice),this.dispatchEvent(new CustomEvent("qti-inline-choice-register",{bubbles:!0,composed:!0,cancelable:!1}))}disconnectedCallback(){this.removeEventListener("click",this._onSelectInlineChoice)}render(){return u` <slot></slot> `}_onSelectInlineChoice(){this.dispatchEvent(new CustomEvent("qti-inline-choice-select",{bubbles:!0,cancelable:!1,composed:!0,detail:{identifier:this.identifier}}))}};n([d({type:String})],Fe.prototype,"identifier",2),Fe=n([h("qti-inline-choice")],Fe);var ve=class extends V(v,"qti-simple-choice"){get checked(){return this.internals.states.has("--checked")}render(){return u`<div part="ch">
|
|
904
882
|
<div part="cha"></div>
|
|
905
883
|
</div>
|
|
906
|
-
${this.marker?
|
|
907
|
-
<slot part="slot"></slot> `}};
|
|
884
|
+
${this.marker?u`<div id="label">${this.marker}</div>`:L}
|
|
885
|
+
<slot part="slot"></slot> `}};ve.styles=g`
|
|
908
886
|
:host {
|
|
909
887
|
display: flex;
|
|
910
888
|
align-items: center;
|
|
@@ -921,4 +899,41 @@ var Rr=Object.defineProperty;var Ar=Object.getOwnPropertyDescriptor;var n=(c,o,e
|
|
|
921
899
|
align-items: center;
|
|
922
900
|
justify-content: center;
|
|
923
901
|
}
|
|
924
|
-
`,n([
|
|
902
|
+
`,n([d({type:String,attribute:!1})],ve.prototype,"marker",2),ve=n([h("qti-simple-choice")],ve);export{V as ActiveElementMixin,x as Interaction,Ge as QtiAnd,S as QtiAssessmentItem,ce as QtiAssessmentStimulusRef,Oe as QtiAssociableHotspot,ue as QtiAssociateInteraction,Qe as QtiBaseValue,pe as QtiChoiceInteraction,je as QtiCompanionMaterialsInfo,A as QtiConditionExpression,gt as QtiContains,We as QtiContentBody,bt as QtiCorrect,z as QtiCustomInteraction,Ie as QtiCustomOperator,Q as QtiEndAttemptInteraction,tt as QtiEqual,et as QtiEqualRounded,E as QtiExpression,_ as QtiExtendedTextInteraction,qe as QtiFeedbackBlock,Te as QtiFeedbackInline,me as QtiGap,fe as QtiGapImg,Ae as QtiGapMatchInteraction,ge as QtiGapText,B as QtiGraphicAssociateInteraction,De as QtiGraphicGapMatchInteraction,Ve as QtiGraphicOrderInteraction,vt as QtiGt,yt as QtiGte,be as QtiHotspotChoice,Ne as QtiHotspotInteraction,Pe as QtiHottext,Ke as QtiHottextInteraction,Fe as QtiInlineChoice,G as QtiInlineChoiceInteraction,xt as QtiIsNull,xe as QtiItemBody,Ze as QtiLookupOutcomeValue,Et as QtiLt,Ct as QtiLte,rt as QtiMapResponse,de as QtiMapping,qt as QtiMatch,Y as QtiMatchInteraction,He as QtiMediaInteraction,Tt as QtiMember,we as QtiModalFeedback,wt as QtiMultiple,Mt as QtiNot,St as QtiOr,U as QtiOrderInteraction,Rt as QtiOrdered,N as QtiOutcomeDeclaration,Re as QtiOutcomeProcessing,dt as QtiOutcomeProcessingProcessor,se as QtiPortableCustomInteraction,nt as QtiPositionObjectInteraction,$e as QtiPositionObjectStage,Le as QtiPrintedVariable,_t as QtiProduct,Ue as QtiPrompt,ut as QtiResponseCondition,F as QtiResponseDeclaration,_e as QtiResponseElse,ft as QtiResponseElseIf,ke as QtiResponseIf,ie as QtiResponseProcessing,H as QtiRubricBlock,I as QtiRule,te as QtiSelectPointInteraction,ht as QtiSetOutcomeValue,mt as QtiSetOutcomeValueRule,ee as QtiSimpleAssociableChoice,ve as QtiSimpleChoice,P as QtiSliderInteraction,st as QtiStringMatch,Xe as QtiStylesheet,it as QtiSubtract,kt as QtiSum,Lt as QtiSumExpression,$ as QtiTextEntryInteraction,Se as QtiUploadInteraction,At as QtiVariable,w as itemContext,Ot as itemContextVariables,ur as qtiAndMixin,hr as qtiSubtractMixin};
|
|
903
|
+
/*! Bundled license information:
|
|
904
|
+
|
|
905
|
+
lit-html/node/directives/if-defined.js:
|
|
906
|
+
(**
|
|
907
|
+
* @license
|
|
908
|
+
* Copyright 2018 Google LLC
|
|
909
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
910
|
+
*)
|
|
911
|
+
|
|
912
|
+
lit-html/node/directives/ref.js:
|
|
913
|
+
(**
|
|
914
|
+
* @license
|
|
915
|
+
* Copyright 2020 Google LLC
|
|
916
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
917
|
+
*)
|
|
918
|
+
|
|
919
|
+
lit-html/node/directives/unsafe-html.js:
|
|
920
|
+
(**
|
|
921
|
+
* @license
|
|
922
|
+
* Copyright 2017 Google LLC
|
|
923
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
924
|
+
*)
|
|
925
|
+
|
|
926
|
+
lit-html/node/directives/repeat.js:
|
|
927
|
+
(**
|
|
928
|
+
* @license
|
|
929
|
+
* Copyright 2017 Google LLC
|
|
930
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
931
|
+
*)
|
|
932
|
+
|
|
933
|
+
lit-html/node/directives/style-map.js:
|
|
934
|
+
(**
|
|
935
|
+
* @license
|
|
936
|
+
* Copyright 2018 Google LLC
|
|
937
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
938
|
+
*)
|
|
939
|
+
*/
|