@citolab/qti-components 7.1.6 → 7.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cdn/chunks/chunk-2GVQHMFN.js +5 -0
- package/cdn/chunks/chunk-34TLO462.js +1 -0
- package/cdn/chunks/chunk-3AUZHOWF.js +5 -0
- package/cdn/chunks/chunk-3BTFQ7WO.js +5 -0
- package/cdn/chunks/chunk-3G52PPHF.js +1 -0
- package/cdn/chunks/chunk-3T7FMZJJ.js +5 -0
- package/cdn/chunks/chunk-3WMAQ764.js +23 -0
- package/cdn/chunks/chunk-3XYZ63C3.js +1 -0
- package/cdn/chunks/chunk-43VY76CQ.js +5 -0
- package/cdn/chunks/chunk-4VDQDT6F.js +1 -0
- package/cdn/chunks/chunk-4XDZ5XHU.js +1007 -0
- package/cdn/chunks/chunk-52V4Q43H.js +5 -0
- package/cdn/chunks/chunk-5DVS53XB.js +1007 -0
- package/cdn/chunks/chunk-6BZPFYLZ.js +1 -0
- package/cdn/chunks/chunk-7B6HAKFL.js +1 -0
- package/cdn/chunks/chunk-7BENQ76L.js +1 -0
- package/cdn/chunks/chunk-A6PJTNI7.js +23 -0
- package/cdn/chunks/chunk-AFBSMLI4.js +5 -0
- package/cdn/chunks/chunk-AU2GM346.js +23 -0
- package/cdn/chunks/chunk-B345O2HX.js +1 -0
- package/cdn/chunks/chunk-B3RMHCUZ.js +1 -0
- package/cdn/chunks/chunk-BFPXRWNH.js +5 -0
- package/cdn/chunks/chunk-BGBABJCL.js +5 -0
- package/cdn/chunks/chunk-BKSBIZJA.js +5 -0
- package/cdn/chunks/chunk-BWG4B5VP.js +0 -0
- package/cdn/chunks/chunk-C25LH4KA.js +1 -0
- package/cdn/chunks/chunk-CDCBI3YD.js +1 -0
- package/cdn/chunks/chunk-CQPD5NPM.js +1 -0
- package/cdn/chunks/chunk-CS6UCV2Q.js +5 -0
- package/cdn/chunks/chunk-D74A6CWS.js +8 -0
- package/cdn/chunks/chunk-DFZQWABG.js +5 -0
- package/cdn/chunks/chunk-DHZMASGY.js +5 -0
- package/cdn/chunks/chunk-EZ7OIK2M.js +1007 -0
- package/cdn/chunks/chunk-F2WLIUYH.js +5 -0
- package/cdn/chunks/chunk-F3ZZJBV2.js +5 -0
- package/cdn/chunks/chunk-FCH2GIHD.js +1 -0
- package/cdn/chunks/chunk-FKUEIENC.js +5 -0
- package/cdn/chunks/chunk-FMCWO2FJ.js +17 -0
- package/cdn/chunks/chunk-FQW2YR3J.js +1 -0
- package/cdn/chunks/chunk-FVEUVB2H.js +23 -0
- package/cdn/chunks/chunk-GMF365YO.js +16 -0
- package/cdn/chunks/chunk-GWRXCQHZ.js +23 -0
- package/cdn/chunks/chunk-HAXNBTTE.js +1 -0
- package/cdn/chunks/chunk-HEAJ2NEA.js +1007 -0
- package/cdn/chunks/chunk-HKBOCCDM.js +5 -0
- package/cdn/chunks/chunk-HRLTVAPZ.js +5 -0
- package/cdn/chunks/chunk-HZ5STZXK.js +5 -0
- package/cdn/chunks/chunk-I5HGXKPD.js +1007 -0
- package/cdn/chunks/chunk-IELXBBZK.js +5 -0
- package/cdn/chunks/chunk-IHL5T5GX.js +5 -0
- package/cdn/chunks/chunk-J2M4UG43.js +1 -0
- package/cdn/chunks/chunk-JAMSX45C.js +1 -0
- package/cdn/chunks/chunk-JEPI46VU.js +5 -0
- package/cdn/chunks/chunk-JSQUXTN4.js +1033 -0
- package/cdn/chunks/chunk-JXDOR5ZC.js +1 -0
- package/cdn/chunks/chunk-JZCJOPJ4.js +1007 -0
- package/cdn/chunks/chunk-KKEW6E2D.js +5 -0
- package/cdn/chunks/chunk-L4UTGAI5.js +5 -0
- package/cdn/chunks/chunk-LMLG3NBM.js +5 -0
- package/cdn/chunks/chunk-MM2ZXHVH.js +5 -0
- package/cdn/chunks/chunk-NQQE76LE.js +1 -0
- package/cdn/chunks/chunk-O6CWZJXT.js +28 -0
- package/cdn/chunks/chunk-OSEDGNNB.js +1007 -0
- package/cdn/chunks/chunk-PJFHT7NY.js +5 -0
- package/cdn/chunks/chunk-PKWOG7OF.js +5 -0
- package/cdn/chunks/chunk-PTG4PTFS.js +5 -0
- package/cdn/chunks/chunk-QIRSCGXH.js +1007 -0
- package/cdn/chunks/chunk-RIPDQPTC.js +5 -0
- package/cdn/chunks/chunk-RO5THFZ6.js +5 -0
- package/cdn/chunks/chunk-SQ3RENJ6.js +5 -0
- package/cdn/chunks/chunk-SUOAWPV7.js +23 -0
- package/cdn/chunks/chunk-T43NJLH5.js +5 -0
- package/cdn/chunks/chunk-TIH5N4LQ.js +1007 -0
- package/cdn/chunks/chunk-TOUJRNTD.js +1007 -0
- package/cdn/chunks/chunk-TSMKXWWV.js +5 -0
- package/cdn/chunks/chunk-TU4L55WU.js +5 -0
- package/cdn/chunks/chunk-UDPQY4OA.js +1007 -0
- package/cdn/chunks/chunk-ULI6NOVG.js +23 -0
- package/cdn/chunks/chunk-UTEMKKYS.js +1 -0
- package/cdn/chunks/chunk-UV3CSMRU.js +5 -0
- package/cdn/chunks/chunk-V2RDHKE2.js +5 -0
- package/cdn/chunks/chunk-VQLIWL6K.js +5 -0
- package/cdn/chunks/chunk-VZEUFE5C.js +3455 -0
- package/cdn/chunks/chunk-W5B2MLGL.js +1 -0
- package/cdn/chunks/chunk-WJGOCWFB.js +1 -0
- package/cdn/chunks/chunk-WLQN7SVZ.js +1033 -0
- package/cdn/chunks/chunk-WUX2JPB5.js +17 -0
- package/cdn/chunks/chunk-X7FRU3B6.js +5 -0
- package/cdn/chunks/chunk-XS46RWY6.js +5 -0
- package/cdn/chunks/chunk-XTNESJMB.js +5 -0
- package/cdn/chunks/chunk-Y2EDF22E.js +16 -0
- package/cdn/chunks/chunk-YE4ZNHXG.js +23 -0
- package/cdn/chunks/chunk-YMFPA4QO.js +5 -0
- package/cdn/chunks/chunk-YRK3ZLQP.js +1033 -0
- package/cdn/index.global.js +1 -1
- package/cdn/index.js +1 -1
- package/cdn/qti-components/index.js +1 -1
- package/cdn/qti-item/components/item-container.js +1 -1
- package/cdn/qti-item/core/index.js +1 -1
- package/cdn/qti-loader/index.js +1 -1
- package/cdn/qti-test/components/index.js +1 -1
- package/cdn/qti-test/components/test-container.js +1 -1
- package/cdn/qti-test/components/test-navigation.js +1 -1
- package/cdn/qti-test/components/test-next.js +1 -1
- package/cdn/qti-test/components/test-scoring-buttons.js +1 -1
- package/cdn/qti-test/components/test-scoring-feedback.js +1 -1
- package/cdn/qti-test/components/test-stamp.js +1 -0
- package/cdn/qti-test/components/test-view-toggle.js +1 -1
- package/cdn/qti-test/core/index.js +1 -1
- package/cdn/qti-transformers/index.js +1 -1
- package/dist/chunks/chunk-2GPGOKL6.js +94 -0
- package/dist/chunks/chunk-2GPGOKL6.js.map +1 -0
- package/dist/chunks/chunk-2J22QBLB.js +94 -0
- package/dist/chunks/chunk-2J22QBLB.js.map +1 -0
- package/dist/chunks/chunk-34F2DVNP.js +85 -0
- package/dist/chunks/chunk-34F2DVNP.js.map +1 -0
- package/dist/chunks/chunk-3TM6VQEG.js +375 -0
- package/dist/chunks/chunk-3TM6VQEG.js.map +1 -0
- package/dist/chunks/chunk-3YVVZ2MO.js +374 -0
- package/dist/chunks/chunk-3YVVZ2MO.js.map +1 -0
- package/dist/chunks/chunk-46RFKXS6.js +94 -0
- package/dist/chunks/chunk-46RFKXS6.js.map +1 -0
- package/dist/chunks/chunk-47BWT37I.js +94 -0
- package/dist/chunks/chunk-47BWT37I.js.map +1 -0
- package/dist/chunks/chunk-4EXSIVXY.js +68 -0
- package/dist/chunks/chunk-4EXSIVXY.js.map +1 -0
- package/dist/chunks/chunk-4JL6LXWC.js +94 -0
- package/dist/chunks/chunk-4JL6LXWC.js.map +1 -0
- package/dist/chunks/chunk-4TQ3YR2O.js +31 -0
- package/dist/chunks/chunk-4TQ3YR2O.js.map +1 -0
- package/dist/chunks/chunk-4VEH63K4.js +854 -0
- package/dist/chunks/chunk-4VEH63K4.js.map +1 -0
- package/dist/chunks/chunk-5FKTC6XV.js +99 -0
- package/dist/chunks/chunk-5FKTC6XV.js.map +1 -0
- package/dist/chunks/chunk-5SZAGP4N.js +863 -0
- package/dist/chunks/chunk-5SZAGP4N.js.map +1 -0
- package/dist/chunks/chunk-64EQ3AQ4.js +240 -0
- package/dist/chunks/chunk-64EQ3AQ4.js.map +1 -0
- package/dist/chunks/chunk-6MECYIS2.js +94 -0
- package/dist/chunks/chunk-6MECYIS2.js.map +1 -0
- package/dist/chunks/chunk-6T5ICOX2.js +94 -0
- package/dist/chunks/chunk-6T5ICOX2.js.map +1 -0
- package/dist/chunks/chunk-6ZK4ZDQA.js +94 -0
- package/dist/chunks/chunk-6ZK4ZDQA.js.map +1 -0
- package/dist/chunks/chunk-7KTTLJUH.js +45 -0
- package/dist/chunks/chunk-7KTTLJUH.js.map +1 -0
- package/dist/chunks/chunk-7LFQ6D75.js +95 -0
- package/dist/chunks/chunk-7LFQ6D75.js.map +1 -0
- package/dist/chunks/chunk-7T5WVG7T.js +853 -0
- package/dist/chunks/chunk-7T5WVG7T.js.map +1 -0
- package/dist/chunks/chunk-A5IAS5VV.js +54 -0
- package/dist/chunks/chunk-A5IAS5VV.js.map +1 -0
- package/dist/chunks/chunk-ABDJRZ2V.js +78 -0
- package/dist/chunks/chunk-ABDJRZ2V.js.map +1 -0
- package/dist/chunks/chunk-AN33KA5S.js +94 -0
- package/dist/chunks/chunk-AN33KA5S.js.map +1 -0
- package/dist/chunks/chunk-B2SP77UV.js +818 -0
- package/dist/chunks/chunk-B2SP77UV.js.map +1 -0
- package/dist/chunks/chunk-BB7V3D2X.js +250 -0
- package/dist/chunks/chunk-BB7V3D2X.js.map +1 -0
- package/dist/chunks/chunk-BJAP2552.js +6893 -0
- package/dist/chunks/chunk-BJAP2552.js.map +1 -0
- package/dist/chunks/chunk-BSPLGP2R.js +627 -0
- package/dist/chunks/chunk-BSPLGP2R.js.map +1 -0
- package/dist/chunks/chunk-BWUEY6V5.js +818 -0
- package/dist/chunks/chunk-BWUEY6V5.js.map +1 -0
- package/dist/chunks/chunk-C7YUIKFQ.js +249 -0
- package/dist/chunks/chunk-C7YUIKFQ.js.map +1 -0
- package/dist/chunks/chunk-CIZ7HKZC.js +42 -0
- package/dist/chunks/chunk-CIZ7HKZC.js.map +1 -0
- package/dist/chunks/chunk-CJSBOJOH.js +6888 -0
- package/dist/chunks/chunk-CJSBOJOH.js.map +1 -0
- package/dist/chunks/chunk-CYB63HHS.js +31 -0
- package/dist/chunks/chunk-CYB63HHS.js.map +1 -0
- package/dist/chunks/chunk-DFSZKFKS.js +43 -0
- package/dist/chunks/chunk-DFSZKFKS.js.map +1 -0
- package/dist/chunks/chunk-DNRSH4DB.js +854 -0
- package/dist/chunks/chunk-DNRSH4DB.js.map +1 -0
- package/dist/chunks/chunk-DPDCXMHW.js +81 -0
- package/dist/chunks/chunk-DPDCXMHW.js.map +1 -0
- package/dist/chunks/chunk-DQ62VQEH.js +627 -0
- package/dist/chunks/chunk-DQ62VQEH.js.map +1 -0
- package/dist/chunks/chunk-E4G74EVO.js +99 -0
- package/dist/chunks/chunk-E4G74EVO.js.map +1 -0
- package/dist/chunks/chunk-EA7DHOYO.js +6903 -0
- package/dist/chunks/chunk-EA7DHOYO.js.map +1 -0
- package/dist/chunks/chunk-EAFJQRTV.js +56 -0
- package/dist/chunks/chunk-EAFJQRTV.js.map +1 -0
- package/dist/chunks/chunk-EL4TPH56.js +94 -0
- package/dist/chunks/chunk-EL4TPH56.js.map +1 -0
- package/dist/chunks/chunk-FI6LX4IS.js +853 -0
- package/dist/chunks/chunk-FI6LX4IS.js.map +1 -0
- package/dist/chunks/chunk-FORIPEB2.js +241 -0
- package/dist/chunks/chunk-FORIPEB2.js.map +1 -0
- package/dist/chunks/chunk-G3TG4ADZ.js +8 -0
- package/dist/chunks/chunk-G3TG4ADZ.js.map +1 -0
- package/dist/chunks/chunk-H4XZSMVR.js +375 -0
- package/dist/chunks/chunk-H4XZSMVR.js.map +1 -0
- package/dist/chunks/chunk-H6O2X4MD.js +42 -0
- package/dist/chunks/chunk-H6O2X4MD.js.map +1 -0
- package/dist/chunks/chunk-H7W3RQS4.js +627 -0
- package/dist/chunks/chunk-H7W3RQS4.js.map +1 -0
- package/dist/chunks/chunk-HMHM2W7Z.js +241 -0
- package/dist/chunks/chunk-HMHM2W7Z.js.map +1 -0
- package/dist/chunks/chunk-I3RHYDUK.js +6917 -0
- package/dist/chunks/chunk-I3RHYDUK.js.map +1 -0
- package/dist/chunks/chunk-IHNLBY62.js +42 -0
- package/dist/chunks/chunk-IHNLBY62.js.map +1 -0
- package/dist/chunks/chunk-ILA6BNIO.js +31 -0
- package/dist/chunks/chunk-ILA6BNIO.js.map +1 -0
- package/dist/chunks/chunk-JFZF77EN.js +31 -0
- package/dist/chunks/chunk-JFZF77EN.js.map +1 -0
- package/dist/chunks/chunk-JOQ2E6SE.js +92 -0
- package/dist/chunks/chunk-JOQ2E6SE.js.map +1 -0
- package/dist/chunks/chunk-JQBEZ43O.js +240 -0
- package/dist/chunks/chunk-JQBEZ43O.js.map +1 -0
- package/dist/chunks/chunk-JQQ755AG.js +854 -0
- package/dist/chunks/chunk-JQQ755AG.js.map +1 -0
- package/dist/chunks/chunk-JRDTY7YA.js +627 -0
- package/dist/chunks/chunk-JRDTY7YA.js.map +1 -0
- package/dist/chunks/chunk-JU7QJQ6F.js +853 -0
- package/dist/chunks/chunk-JU7QJQ6F.js.map +1 -0
- package/dist/chunks/chunk-K6LM7XK5.js +94 -0
- package/dist/chunks/chunk-K6LM7XK5.js.map +1 -0
- package/dist/chunks/chunk-K6PU3ZO4.js +853 -0
- package/dist/chunks/chunk-K6PU3ZO4.js.map +1 -0
- package/dist/chunks/chunk-KD26ZB2H.js +3445 -0
- package/dist/chunks/chunk-KD26ZB2H.js.map +1 -0
- package/dist/chunks/chunk-KGL6SIOD.js +6893 -0
- package/dist/chunks/chunk-KGL6SIOD.js.map +1 -0
- package/dist/chunks/chunk-KIRLKN6I.js +68 -0
- package/dist/chunks/chunk-KIRLKN6I.js.map +1 -0
- package/dist/chunks/chunk-L74KEUIS.js +94 -0
- package/dist/chunks/chunk-L74KEUIS.js.map +1 -0
- package/dist/chunks/chunk-LEXNKJYF.js +6888 -0
- package/dist/chunks/chunk-LEXNKJYF.js.map +1 -0
- package/dist/chunks/chunk-LVE5GKDT.js +94 -0
- package/dist/chunks/chunk-LVE5GKDT.js.map +1 -0
- package/dist/chunks/chunk-LVZHVB7F.js +31 -0
- package/dist/chunks/chunk-LVZHVB7F.js.map +1 -0
- package/dist/chunks/chunk-MGLNBEW4.js +33 -0
- package/dist/chunks/chunk-MGLNBEW4.js.map +1 -0
- package/dist/chunks/chunk-MS7YRGNG.js +56 -0
- package/dist/chunks/chunk-MS7YRGNG.js.map +1 -0
- package/dist/chunks/chunk-N25ZKAHQ.js +50 -0
- package/dist/chunks/chunk-N25ZKAHQ.js.map +1 -0
- package/dist/chunks/chunk-N46CJQRI.js +94 -0
- package/dist/chunks/chunk-N46CJQRI.js.map +1 -0
- package/dist/chunks/chunk-N4QWREF4.js +375 -0
- package/dist/chunks/chunk-N4QWREF4.js.map +1 -0
- package/dist/chunks/chunk-NM3JA4DH.js +6893 -0
- package/dist/chunks/chunk-NM3JA4DH.js.map +1 -0
- package/dist/chunks/chunk-NOHVLBCB.js +371 -0
- package/dist/chunks/chunk-NOHVLBCB.js.map +1 -0
- package/dist/chunks/chunk-NQSOVEFB.js +31 -0
- package/dist/chunks/chunk-NQSOVEFB.js.map +1 -0
- package/dist/chunks/chunk-OA7AFFCB.js +866 -0
- package/dist/chunks/chunk-OA7AFFCB.js.map +1 -0
- package/dist/chunks/chunk-OLNSD7FR.js +31 -0
- package/dist/chunks/chunk-OLNSD7FR.js.map +1 -0
- package/dist/chunks/chunk-OREE4FRY.js +42 -0
- package/dist/chunks/chunk-OREE4FRY.js.map +1 -0
- package/dist/chunks/chunk-P66WO2Q5.js +870 -0
- package/dist/chunks/chunk-P66WO2Q5.js.map +1 -0
- package/dist/chunks/chunk-PKOIFI5C.js +853 -0
- package/dist/chunks/chunk-PKOIFI5C.js.map +1 -0
- package/dist/chunks/chunk-QFV3VHZ4.js +43 -0
- package/dist/chunks/chunk-QFV3VHZ4.js.map +1 -0
- package/dist/chunks/chunk-QTKNSVUO.js +854 -0
- package/dist/chunks/chunk-QTKNSVUO.js.map +1 -0
- package/dist/chunks/chunk-RSGEN2FF.js +6917 -0
- package/dist/chunks/chunk-RSGEN2FF.js.map +1 -0
- package/dist/chunks/chunk-S6XGFD5B.js +6893 -0
- package/dist/chunks/chunk-S6XGFD5B.js.map +1 -0
- package/dist/chunks/chunk-SOT463MH.js +68 -0
- package/dist/chunks/chunk-SOT463MH.js.map +1 -0
- package/dist/chunks/chunk-SZMR2BFI.js +94 -0
- package/dist/chunks/chunk-SZMR2BFI.js.map +1 -0
- package/dist/chunks/chunk-TDKYWAGB.js +50 -0
- package/dist/chunks/chunk-TDKYWAGB.js.map +1 -0
- package/dist/chunks/chunk-TDNCAAAT.js +627 -0
- package/dist/chunks/chunk-TDNCAAAT.js.map +1 -0
- package/dist/chunks/chunk-TVOHUHS4.js +94 -0
- package/dist/chunks/chunk-TVOHUHS4.js.map +1 -0
- package/dist/chunks/chunk-UE3R54FP.js +853 -0
- package/dist/chunks/chunk-UE3R54FP.js.map +1 -0
- package/dist/chunks/chunk-UUEOV5NM.js +1 -0
- package/dist/chunks/chunk-UUEOV5NM.js.map +1 -0
- package/dist/chunks/chunk-UZRIKXLU.js +94 -0
- package/dist/chunks/chunk-UZRIKXLU.js.map +1 -0
- package/dist/chunks/chunk-VAYGVW5R.js +6903 -0
- package/dist/chunks/chunk-VAYGVW5R.js.map +1 -0
- package/dist/chunks/chunk-VEWD22O5.js +383 -0
- package/dist/chunks/chunk-VEWD22O5.js.map +1 -0
- package/dist/chunks/chunk-VF32HLF4.js +81 -0
- package/dist/chunks/chunk-VF32HLF4.js.map +1 -0
- package/dist/chunks/chunk-VY7QNZVM.js +6893 -0
- package/dist/chunks/chunk-VY7QNZVM.js.map +1 -0
- package/dist/chunks/chunk-W4FWEMCO.js +871 -0
- package/dist/chunks/chunk-W4FWEMCO.js.map +1 -0
- package/dist/chunks/chunk-W5VRVGBL.js +81 -0
- package/dist/chunks/chunk-W5VRVGBL.js.map +1 -0
- package/dist/chunks/chunk-WDGXLQLI.js +94 -0
- package/dist/chunks/chunk-WDGXLQLI.js.map +1 -0
- package/dist/chunks/chunk-WTTOJHIM.js +371 -0
- package/dist/chunks/chunk-WTTOJHIM.js.map +1 -0
- package/dist/chunks/chunk-WZZOX7S2.js +853 -0
- package/dist/chunks/chunk-WZZOX7S2.js.map +1 -0
- package/dist/chunks/chunk-X2G652U7.js +6903 -0
- package/dist/chunks/chunk-X2G652U7.js.map +1 -0
- package/dist/chunks/chunk-XKQP4R6O.js +380 -0
- package/dist/chunks/chunk-XKQP4R6O.js.map +1 -0
- package/dist/chunks/chunk-Z3SN77PI.js +31 -0
- package/dist/chunks/chunk-Z3SN77PI.js.map +1 -0
- package/dist/chunks/chunk-ZECYUSVI.js +43 -0
- package/dist/chunks/chunk-ZECYUSVI.js.map +1 -0
- package/dist/chunks/chunk-ZSPVMGE5.js +94 -0
- package/dist/chunks/chunk-ZSPVMGE5.js.map +1 -0
- package/dist/chunks/chunk-ZTXBJYUG.js +94 -0
- package/dist/chunks/chunk-ZTXBJYUG.js.map +1 -0
- package/dist/exports/computed-item.context.d.ts +1 -1
- package/dist/exports/computed.context.d.ts +1 -1
- package/dist/exports/interaction.d.ts +1 -1
- package/dist/exports/item.context.d.ts +1 -1
- package/dist/exports/qti-assessment-item.context.d.ts +1 -1
- package/dist/exports/qti-condition-expression.d.ts +1 -1
- package/dist/exports/qti-expression.d.ts +1 -1
- package/dist/exports/session.context.d.ts +2 -2
- package/dist/exports/test.context.d.ts +1 -1
- package/dist/exports/variables.d.ts +1 -1
- package/dist/index.d.ts +7 -2
- package/dist/index.js +28 -12
- package/dist/item.css +26 -130
- package/dist/qti-components/index.d.ts +2 -2
- package/dist/qti-components/index.js +2 -2
- package/dist/qti-components-jsx.d.ts +91 -9
- package/dist/qti-item/components/item-container.js +3 -3
- package/dist/qti-item/components/item-show-correct-response.d.ts +1 -1
- package/dist/qti-item/components/print-item-variables.d.ts +1 -1
- package/dist/qti-item/core/index.d.ts +1 -1
- package/dist/qti-item/core/index.js +3 -3
- package/dist/qti-loader/index.d.ts +1 -1
- package/dist/qti-loader/index.js +2 -2
- package/dist/qti-response-declaration-C3kpm650.d.ts +1171 -0
- package/dist/qti-test/components/index.d.ts +7 -2
- package/dist/qti-test/components/index.js +25 -9
- package/dist/qti-test/components/test-container.js +3 -3
- package/dist/qti-test/components/test-navigation.d.ts +3 -2
- package/dist/qti-test/components/test-navigation.js +1 -1
- package/dist/qti-test/components/test-next.d.ts +1 -1
- package/dist/qti-test/components/test-next.js +1 -1
- package/dist/qti-test/components/test-prev.d.ts +1 -1
- package/dist/qti-test/components/test-print-context.d.ts +1 -1
- package/dist/qti-test/components/test-print-item-variables.d.ts +1 -1
- package/dist/qti-test/components/test-scoring-buttons.d.ts +2 -1
- package/dist/qti-test/components/test-scoring-buttons.js +1 -1
- package/dist/qti-test/components/test-scoring-feedback.d.ts +9 -1273
- package/dist/qti-test/components/test-scoring-feedback.js +4 -60
- package/dist/qti-test/components/test-scoring-feedback.js.map +1 -1
- package/dist/qti-test/components/test-show-correct-response.d.ts +1 -1
- package/dist/qti-test/components/test-stamp.d.ts +18 -0
- package/dist/qti-test/components/test-stamp.js +9 -0
- package/dist/qti-test/components/test-stamp.js.map +1 -0
- package/dist/qti-test/components/test-view-toggle.d.ts +2 -2
- package/dist/qti-test/components/test-view-toggle.js +1 -1
- package/dist/qti-test/core/index.d.ts +4 -4
- package/dist/qti-test/core/index.js +3 -3
- package/dist/qti-test-feedback-CG8nrjhS.d.ts +98 -0
- package/dist/qti-test-feedback-R38tNXBH.d.ts +98 -0
- package/dist/qti-transformers/index.d.ts +4 -1
- package/dist/qti-transformers/index.js +1 -1
- package/dist/vscode.html-custom-data.json +38 -13
- package/package.json +4 -4
|
@@ -0,0 +1,1007 @@
|
|
|
1
|
+
import{a as Xe}from"./chunk-EHK76KRT.js";import{a as pe,b as Q,c as de,e as ue,f as ee,g as Ft,h as zt,i as We,j as Bt}from"./chunk-APAMHETB.js";import{a as R}from"./chunk-XUJ7TXHW.js";import{a as N}from"./chunk-JNSK3BI7.js";import{a as C}from"./chunk-DF2NIZO5.js";import{a as M}from"./chunk-QQCGUVEV.js";import{a as Pt}from"./chunk-FVEUVB2H.js";import{a as Ht,b as S}from"./chunk-5MY26RWE.js";import{a as E}from"./chunk-5NHCLY54.js";import{a as f,b as u,c as x,d as je,e as Ot}from"./chunk-PT6SVREH.js";import{a as b,d as m,e as Ue,f as ce,g as k,i as y}from"./chunk-SCPSWPAG.js";import{a as It}from"./chunk-KWPDTFYH.js";import{a as n}from"./chunk-IAP2CEE7.js";var V=class extends y{constructor(){super(...arguments);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={variables:It};this._initialContext={...this._context,variables:this._context.variables};this._feedbackElements=[];this._interactionElements=[];this._handleRegisterVariable=e=>{e.stopImmediatePropagation(),this._context={...this._context,variables:[...this._context.variables,e.detail.variable]},this._initialContext=this._context,e.stopPropagation()};this._handleRegisterFeedback=e=>{e.stopImmediatePropagation();let t=e.detail;this._feedbackElements.push(t),(Number(this._context.variables.find(s=>s.identifier==="numAttempts")?.value)||0)>0&&t.checkShowFeedback(t.outcomeIdentifier)};this._handleRegisterInteraction=e=>{e.stopImmediatePropagation(),this._interactionElements.push(e.detail.interactionElement)};this._handleEndAttempt=e=>{e.stopImmediatePropagation();let{responseIdentifier:t,countAttempt:r}=e.detail;this.validate(),this.updateResponseVariable(t,"true"),this.processResponse(r)};this._handleSetOutcomeValue=e=>{e.stopImmediatePropagation();let{outcomeIdentifier:t,value:r}=e.detail;this.updateOutcomeVariable(t,r),e.stopPropagation()};this._handleUpdateResponseVariable=e=>{e.stopImmediatePropagation();let{responseIdentifier:t,response:r}=e.detail;this.updateResponseVariable(t,r),this.dispatchEvent(new CustomEvent("qti-item-context-updated",{bubbles:!0,composed:!0,detail:{itemContext:this._context}}))}}set assessmentItemRefId(e){this._context={...this._context,identifier:e}}get assessmentItemRefId(){return this._context.identifier}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(s=>s.identifier===t.identifier);return r?{...t,...r}:t})},this._context.variables.forEach(t=>{if(t.type==="response"){let r=this._interactionElements.find(s=>s.responseIdentifier===t.identifier);r&&(r.response=t.value)}}),this.variables.forEach(t=>{t.type==="outcome"&&this._feedbackElements.forEach(r=>r.checkShowFeedback(t.identifier))})}set responses(e){if(e)for(let t of e){this.getResponse(t.responseIdentifier)&&this.updateResponseVariable(t.responseIdentifier,t.response);let s=this._interactionElements.find(a=>a.getAttribute("response-identifier")===t.responseIdentifier);s&&(s.response=t.response)}}render(){return m`<slot></slot>`}connectedCallback(){this._attachEventListeners(),super.connectedCallback(),this.updateComplete.then(()=>{this.dispatchEvent(new CustomEvent("qti-assessment-item-connected",{bubbles:!0,composed:!0,detail:this}))})}disconnectedCallback(){this._removeEventListeners(),super.disconnectedCallback()}_attachEventListeners(){this.addEventListener("qti-register-variable",this._handleRegisterVariable),this.addEventListener("qti-register-feedback",this._handleRegisterFeedback),this.addEventListener("qti-register-interaction",this._handleRegisterInteraction),this.addEventListener("end-attempt",this._handleEndAttempt),this.addEventListener("qti-set-outcome-value",this._handleSetOutcomeValue),this.addEventListener("qti-interaction-response",this._handleUpdateResponseVariable)}_removeEventListeners(){this.removeEventListener("qti-register-variable",this._handleRegisterVariable),this.removeEventListener("qti-register-feedback",this._handleRegisterFeedback),this.removeEventListener("qti-register-interaction",this._handleRegisterInteraction),this.removeEventListener("end-attempt",this._handleEndAttempt),this.removeEventListener("qti-set-outcome-value",this._handleSetOutcomeValue),this.removeEventListener("qti-interaction-response",this._handleUpdateResponseVariable)}showCorrectResponse(e){for(let t of this._context.variables.filter(r=>r.type==="response")){let r=this._interactionElements.find(s=>s.getAttribute("response-identifier")===t.identifier);r&&r.toggleCorrectResponse(t,e)}}processResponse(e=!0,t=!0){this.validate(t);let r=this.querySelector("qti-response-processing");return!r||!r.process?!1:(r.process(),this.adaptive==="false"&&this.updateOutcomeVariable("completionStatus",this._getCompletionStatus()),e&&this.updateOutcomeVariable("numAttempts",(+this._context.variables.find(s=>s.identifier==="numAttempts")?.value+1).toString()),this.dispatchEvent(new CustomEvent("qti-item-context-updated",{bubbles:!0,composed:!0,detail:{itemContext:this._context}})),!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}updateResponseVariable(e,t){this._context={...this._context,variables:this._context.variables.map(r=>r.identifier!==e?r:{...r,value:t})},this.dispatchEvent(new CustomEvent("qti-interaction-changed",{bubbles:!0,composed:!0,detail:{item:this.identifier,responseIdentifier:e,response:Array.isArray(t)?[...t]:t}})),this.adaptive==="false"&&this.updateOutcomeVariable("completionStatus",this._getCompletionStatus())}setOutcomeVariable(e,t){this.updateOutcomeVariable(e,t),this.dispatchEvent(new CustomEvent("qti-item-context-updated",{bubbles:!0,composed:!0,detail:{itemContext:this._context}}))}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(s=>s.identifier!==e?s:{...s,value:r.cardinality==="single"?t:[...s.value,t]})},this._feedbackElements.forEach(s=>s.checkShowFeedback(e)),this.dispatchEvent(new CustomEvent("qti-outcome-changed",{bubbles:!0,composed:!0,detail:{item:this.identifier,outcomeIdentifier:e,value:this._context.variables.find(s=>s.identifier===e)?.value}}))}validate(e=!0){return this._interactionElements.every(t=>t.validate())?!0:this._interactionElements.some(t=>t.validate())?!1:(e&&this.reportValidity(),null)}reportValidity(){for(let e of this._interactionElements)e.reportValidity()}_getCompletionStatus(){let e=this.validate(!1);return e===!0?"completed":e===!1?"incomplete":"not_attempted"}};n([u({type:String})],V.prototype,"title",2),n([u({type:String})],V.prototype,"identifier",2),n([u({type:String})],V.prototype,"adaptive",2),n([u({type:String})],V.prototype,"timeDependent",2),n([u({type:Boolean})],V.prototype,"disabled",2),n([R("disabled",{waitUntilFirstUpdate:!0})],V.prototype,"_handleDisabledChange",2),n([u({type:Boolean})],V.prototype,"readonly",2),n([R("readonly",{waitUntilFirstUpdate:!0})],V.prototype,"_handleReadonlyChange",2),n([Ht({context:M})],V.prototype,"_context",2),V=n([f("qti-assessment-item")],V);var me=class extends y{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 s=this.closest("qti-assessment-item").querySelector(`[data-stimulus-idref=${this.identifier}]`);s?await this.updateStimulusRef(s):console.warn(`Stimulus with data-stimulus-idref ${this.identifier} not found`)}}async updateStimulusRef(e){let t=await Pt().load(this.href).promise.then(r=>r.htmlDoc());if(t){let r=t.querySelectorAll("qti-stimulus-body, qti-stylesheet");e.innerHTML="",e.append(...r)}}};n([u({type:String})],me.prototype,"identifier",2),n([u({type:String})],me.prototype,"href",2),me=n([f("qti-assessment-stimulus-ref")],me);var Je=class extends y{};Je=n([f("qti-companion-materials-info")],Je);var Ee=class extends y{render(){return m`<slot @slotchange=${this.handleSlotChange}></slot>`}handleSlotChange(){let i=Array.from(this.firstElementChild?.childNodes??[]).find(e=>e.nodeType===Node.COMMENT_NODE);try{this.operatorFunction=new Function("context","fn","item",i?.textContent??"")}catch(e){console.error("custom-operator contains invalid javascript code",e)}}calculate(){let i={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,i,e)}};n([S({context:M,subscribe:!0}),x()],Ee.prototype,"_context",2),Ee=n([f("qti-custom-operator")],Ee);var ur=()=>new Intl.NumberFormat().format(.1).replace(/\d/g,""),Ce=p=>{if(typeof p=="string")return p;let i=ur();return i==="."?p.toLocaleString():p.toString().replace(".","").replace(i,".")};function ct(p){return p==null}function qe(p){return p.replace(/([^:]\/)\/+/g,"$1").replace(/\/\//g,"/").replace("http:/","http://").replace("https:/","https://")}var D=class extends y{connectedCallback(){super.connectedCallback(),this.dispatchEvent(new CustomEvent("qti-register-feedback",{bubbles:!0,composed:!0,detail:this}))}checkShowFeedback(i){let e=this._context.variables.find(r=>r.identifier===i)||null;if(this.outcomeIdentifier!==i||!e)return;let t=!1;Array.isArray(e.value)?t=e.value.includes(this.identifier):t=!ct(this.identifier)&&!ct(e?.value)&&this.identifier===e.value||!1,this.showFeedback(t)}showFeedback(i){this.showStatus=i&&this.showHide==="show"||!i&&this.showHide==="hide"?"on":"off"}};n([u({type:String,attribute:"show-hide"})],D.prototype,"showHide",2),n([u({type:String,attribute:"outcome-identifier"})],D.prototype,"outcomeIdentifier",2),n([u({type:String})],D.prototype,"identifier",2),n([u({type:String,attribute:!1})],D.prototype,"showStatus",2),n([S({context:M,subscribe:!0}),x()],D.prototype,"_context",2);var we=class extends D{render(){return m` <slot part="feedback" class="feedback ${this.showStatus}"></slot> `}connectedCallback(){super.connectedCallback(),this.checkShowFeedback(this.outcomeIdentifier)}};we.styles=b`
|
|
2
|
+
:host {
|
|
3
|
+
display: block;
|
|
4
|
+
}
|
|
5
|
+
.on {
|
|
6
|
+
display: block;
|
|
7
|
+
}
|
|
8
|
+
.off {
|
|
9
|
+
display: none;
|
|
10
|
+
}
|
|
11
|
+
`,we=n([f("qti-feedback-block")],we);var H=p=>p??k;var Te=class extends D{constructor(){super(...arguments);this.render=()=>m` <slot part="feedback" class="${H(this.showStatus)}"></slot> `}connectedCallback(){super.connectedCallback(),this.checkShowFeedback(this.outcomeIdentifier)}};Te.styles=b`
|
|
12
|
+
.on {
|
|
13
|
+
display: inline-block;
|
|
14
|
+
}
|
|
15
|
+
.off {
|
|
16
|
+
display: none;
|
|
17
|
+
}
|
|
18
|
+
`,Te=n([f("qti-feedback-inline")],Te);var Me=class extends D{render(){return m`
|
|
19
|
+
<dialog class="qti-dialog" part="feedback" ?open="${this.showStatus==="on"}">
|
|
20
|
+
<slot></slot>
|
|
21
|
+
<div style="margin-top: var(--qti-gap-size); text-align: center;">
|
|
22
|
+
<button class="button close-button" @click="${this.closeFeedback}">Close</button>
|
|
23
|
+
</div>
|
|
24
|
+
</dialog>
|
|
25
|
+
`}openFeedback(){let i=this.shadowRoot?.querySelector("dialog");i&&!i.open&&i.showModal()}closeFeedback(){let i=this.shadowRoot?.querySelector("dialog");i&&i.open&&(i.close(),this.showStatus="off")}connectedCallback(){super.connectedCallback(),this.showStatus==="on"&&this.openFeedback()}updated(i){i.has("showStatus")&&(this.showStatus==="on"?this.openFeedback():this.closeFeedback())}};Me.styles=b`
|
|
26
|
+
.qti-dialog {
|
|
27
|
+
background: var(--qti-bg);
|
|
28
|
+
border: var(--qti-border-thickness) var(--qti-border-style) var(--qti-border-color);
|
|
29
|
+
border-radius: var(--qti-border-radius);
|
|
30
|
+
padding: var(--qti-padding-vertical) var(--qti-padding-horizontal);
|
|
31
|
+
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
|
|
32
|
+
position: fixed;
|
|
33
|
+
top: 50%;
|
|
34
|
+
left: 50%;
|
|
35
|
+
transform: translate(-50%, -50%);
|
|
36
|
+
z-index: 1000;
|
|
37
|
+
width: auto;
|
|
38
|
+
max-width: 90%;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.button {
|
|
42
|
+
border-radius: var(--qti-border-radius);
|
|
43
|
+
padding: var(--qti-padding-vertical) var(--qti-padding-horizontal);
|
|
44
|
+
background-color: var(--qti-bg-active);
|
|
45
|
+
border: var(--qti-border-active);
|
|
46
|
+
cursor: pointer;
|
|
47
|
+
position: relative;
|
|
48
|
+
display: inline-block;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.button:hover {
|
|
52
|
+
background-color: var(--qti-hover-bg);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.button:disabled {
|
|
56
|
+
background-color: var(--qti-disabled-bg);
|
|
57
|
+
color: var(--qti-disabled-color);
|
|
58
|
+
cursor: not-allowed;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.button:focus {
|
|
62
|
+
outline: var(--qti-focus-border-width) solid var(--qti-focus-color);
|
|
63
|
+
}
|
|
64
|
+
`,Me=n([f("qti-modal-feedback")],Me);var Re=class extends y{connectedCallback(){super.connectedCallback(),this.dispatchEvent(new CustomEvent("qti-register-hotspot",{bubbles:!0,composed:!0,cancelable:!1}))}render(){return m` <slot name="drags"></slot> `}};Re.styles=b`
|
|
65
|
+
:host {
|
|
66
|
+
display: flex;
|
|
67
|
+
user-select: none;
|
|
68
|
+
position: absolute;
|
|
69
|
+
}
|
|
70
|
+
`,Re=n([f("qti-associable-hotspot")],Re);var Yt=(p,i,e)=>{class t extends p{}return t};var O=(p,i,e,t)=>{class r extends Yt(p,e,i){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.allDropzones=[];this.lastTarget=null;this.currentDropTarget=null;this.MIN_DRAG_DISTANCE=5;this.DRAG_CLONE_OPACITY=1;this.dataTransfer={data:{},setData(o,l){this.data[o]=l},getData(o){return this.data[o]},effectAllowed:"move"};this.configuration={copyStylesDragClone:!0,dragCanBePlacedBack:!0,dragOnClick:!1};this.minAssociations=1;this.maxAssociations=0;this.draggablesModified=(o,l)=>{for(let d of l)this.draggables.includes(d)&&(this.draggables=this.draggables.filter(h=>h!==d),d.removeAttribute("tabindex"),d.removeEventListener("touchstart",this.handleTouchStart.bind(this)),d.removeEventListener("mousedown",this.handleTouchStart.bind(this)));for(let d of o)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 c=0;this.draggables.forEach(d=>{d.style.viewTransitionName=`drag-${c}-${this.getAttribute("identifier")||crypto.randomUUID()}`,d.setAttribute("qti-draggable","true"),c++})};this.droppablesModified=(o,l)=>{for(let c of l)this.droppables.includes(c)&&(this.droppables=this.droppables.filter(d=>d!==c),this.allDropzones=this.allDropzones.filter(d=>d!==c));for(let c of o)this.droppables.includes(c)||(this.droppables.push(c),this.allDropzones.push(c));for(let c of this.droppables)this.dataset.choicesContainerWidth&&(c.style.width=`${this.dataset.choicesContainerWidth}px`,c.style.boxSizing="border-box")}}handleDraggableContainerChange(o,l){this.isMatchTabular()||(o.length>0||l.length>0)&&this.dragContainersModified(o||[],l||[])}dragContainersModified(o,l){for(let c of l)this.dragContainers.includes(c)&&(this.dragContainers=this.dragContainers.filter(d=>d!==c),this.allDropzones=this.allDropzones.filter(d=>d!==c));for(let c of o)this.dragContainers.includes(c)||(this.dragContainers.push(c),this.allDropzones.push(c))}handleDraggablesChange(o,l){this.isMatchTabular()||(o.length>0||l.length>0)&&this.draggablesModified(o||[],l||[])}handleDroppablesChange(o,l){this.isMatchTabular()||(o.length>0||l.length>0)&&this.droppablesModified(o||[],l||[])}firstUpdated(o){super.firstUpdated(o),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 c=Array.from(this.querySelectorAll(i)||[]).concat(Array.from(this.shadowRoot?.querySelectorAll(i)||[])),d=Array.from(this.querySelectorAll(e)||[]).concat(Array.from(this.shadowRoot?.querySelectorAll(e)||[])),h=Array.from(this.querySelectorAll(t)||[]).concat(Array.from(this.shadowRoot?.querySelectorAll(t)||[]));this.dragContainersModified(h,[]),this.droppablesModified(d,[]),this.draggablesModified(c,[]),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(v=>this.resizeObserver?.observe(v))}async moveDraggableToDroppable(o,l){(()=>{o.style.transform="translate(0, 0)",l.tagName==="SLOT"?o.setAttribute("slot",l.getAttribute("name")):l.appendChild(o),this.checkAllMaxAssociations(),this.saveResponse()})()}activateDroppable(o){this.dragContainers.includes(o)?(this._internals.states.add("--dragzone-active"),o.setAttribute("active","")):(this._internals.states.delete("--dragzone-active"),o.setAttribute("active",""))}deactivateDroppable(o,l=!0){l&&this._internals.states.add("--dragzone-active"),o.removeAttribute("active")}connectedCallback(){super.connectedCallback()}isMatchTabular(){return this.classList.contains("qti-match-tabular")}updateMinDimensionsForDropZones(){let o=this.querySelectorAll(i),l=Array.from(this.querySelectorAll(e)).map(g=>g),c=0,d=0;o.forEach(g=>{let v=g.getBoundingClientRect();c=Math.max(c,v.height),d=Math.max(d,v.width)});let h=this.querySelector(t)||this.shadowRoot?.querySelector(t);h&&(h.style.minHeight=`${c}px`,h.style.minWidth=`${d}px`);for(let g of l)g.style.minHeight=`${c}px`,g.style.minWidth=`${d}px`}activateDroppables(o){this.dragContainers.forEach(c=>{c.setAttribute("enabled",""),c.hasAttribute("disabled")&&(c.contains(o)||c.shadowRoot&&c.shadowRoot.contains(o))&&c.removeAttribute("disabled")}),this.droppables.forEach(c=>{c.setAttribute("enabled",""),c.hasAttribute("disabled")&&(c.contains(o)||c.shadowRoot&&c.shadowRoot.contains(o))&&c.removeAttribute("disabled")})}activateDragLocation(){this._internals.states.add("--dragzone-enabled")}deactivateDragLocation(){this._internals.states.delete("--dragzone-enabled")}deactivateDroppables(){this.dragContainers.forEach(l=>{l.removeAttribute("enabled"),l.removeAttribute("active")}),this.droppables.forEach(l=>{l.removeAttribute("enabled"),l.removeAttribute("active")})}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(o){if(this.isDraggable&&this.dragClone){let{x:l,y:c}=this.getEventCoordinates(o),d={clientX:l,clientY:c};this.calculateDragDistance(d)>=this.MIN_DRAG_DISTANCE&&(this.isDragging=!0,this.updateDragClonePosition(d));let h=this.findClosestDropzone();this.currentDropTarget=h,h!==this.lastTarget&&(this.lastTarget&&(this.deactivateDroppable(this.lastTarget),this.dispatchCustomEvent(this.lastTarget,"dragleave")),h&&(this.activateDroppable(h),this.dispatchCustomEvent(h,"dragenter")),this.lastTarget=h),this.currentDropTarget&&this.dispatchCustomEvent(this.currentDropTarget,"dragover"),o.preventDefault()}}handleTouchEnd(o){this.isDragging&&this.resetDragState(),this._internals.states.delete("--dragzone-active"),this.checkAllMaxAssociations(),this._internals.states.delete("--dragzone-enabled"),this._internals.states.delete("--dragzone-active"),this.deactivateDragLocation(),this.deactivateDroppables(),this.draggables.forEach(l=>{l.removeAttribute("dragging")}),o.preventDefault()}handleTouchCancel(o){this.resetDragState()}validate(){if(!this.shadowRoot)return!1;let o=this.getValidAssociations(),l=!0,c="";this.maxAssociations>0&&o>this.maxAssociations?(l=!1,c=this.dataset.maxSelectionsMessage||`You've selected too many associations. Maximum allowed is ${this.maxAssociations}.`):this.minAssociations>0&&o<this.minAssociations&&(l=!1,c=this.dataset.minSelectionsMessage||`You haven't selected enough associations. Minimum required is ${this.minAssociations}.`);let d=this.lastElementChild;return this._internals.setValidity(l?{}:{customError:!0},c,d),l}reportValidity(){let o=this.shadowRoot.querySelector("#validationMessage");return o&&(this._internals.validity.valid?(o.textContent="",o.style.display="none"):(o.textContent=this._internals.validationMessage,o.style.display="block")),this._internals.validity.valid}checkMaxAssociations(o){let l=this.getMatchMaxValue(o),c=o.querySelectorAll('[qti-draggable="true"]').length;return!(l===0)&&c>=l}dropDraggableInDroppable(o,l){let c=o.cloneNode(!0);c.removeAttribute("style"),this.moveDraggableToDroppable(c,l),this.draggablesModified([c],[]);let d=this.getMatchMaxValue(o),h=this.draggables.filter(g=>g.getAttribute("identifier")===o.getAttribute("identifier"));d!==0&&h.length>=d?(o.style.opacity="0.0",o.style.pointerEvents="none"):o.style.opacity="1.0"}resetDragState(){if(this.dragClone){let o=this.currentDropTarget!==null,l=!o||this.dragContainers.includes(this.currentDropTarget);o&&this.currentDropTarget&&!l&&this.dropDraggableInDroppable(this.dragSource,this.currentDropTarget),l&&(this.dragSource.style.opacity="1.0",this.dragSource.style.display="block",this.dragSource.style.position="static",this.dragSource.style.pointerEvents="auto",this.saveResponse()),this.dragClone.remove(),this.draggablesModified([],[this.dragClone])}this.isDragging=!1,this.isDraggable=!1,this.dragSource=null,this.dragClone=null,this.touchStartPoint=null,this.currentDropTarget=null,this.lastTarget=null,this.deactivateDroppables()}checkAllMaxAssociations(){let o=this.getValidAssociations(),l=this.maxAssociations!==0&&o>=this.maxAssociations;this.droppables.forEach(c=>{l?this.disableDroppable(c):this.checkMaxAssociations(c)?this.disableDroppable(c):this.enableDroppable(c)})}getMatchMaxValue(o){let l=o.getAttribute("match-max");return l?parseInt(l,10):1}disableDroppable(o){o.setAttribute("disabled","")}enableDroppable(o){o.removeAttribute("disabled")}get response(){let o;return typeof this.getResponse=="function"?o=this.getResponse():o=this.collectResponseData(),o.join(",")}set response(o){if(!this.isMatchTabular())if(typeof this.getValue=="function"&&(o=this.getValue(o)),Array.isArray(o)){this.reset(!1),o?.forEach(c=>this.placeResponse(c));let l=new FormData;o.forEach(c=>{l.append(this.responseIdentifier,c)}),this._internals.setFormValue(l)}else this._internals.setFormValue(o||"")}placeResponse(o){let[l,...c]=o.split(" ").reverse(),d=Array.from(this.draggables),h=Array.from(this.droppables);c.forEach(g=>{if(g==="")return;let v=d.find(T=>T.getAttribute("identifier")===g),q=h.find(T=>T.getAttribute("identifier")===l);this.dropDraggableInDroppable(v,q)})}getValidAssociations(){let o=0;for(let l of this.droppables)o=o+this.getDraggablesFromDroppable(l).length;return o}saveResponse(){let o;typeof this.getResponse=="function"?o=this.getResponse():o=this.collectResponseData(),this.dispatchEvent(new CustomEvent("qti-interaction-response",{bubbles:!0,composed:!0,detail:{responseIdentifier:this.responseIdentifier,response:o}}))}collectResponseData(){return this.droppables.map(l=>{let d=this.getDraggablesFromDroppable(l).map(g=>g.getAttribute("identifier")),h=l.getAttribute("identifier");return d.map(g=>`${g} ${h}`)}).flat()}getDraggablesFromDroppable(o){return this.draggables.map(d=>d.getAttribute("identifier")).filter((d,h,g)=>g.indexOf(d)===h).flatMap(d=>Array.from(o.querySelectorAll(`[identifier='${d}']`))).filter(d=>!!d).map(d=>d)}reset(o=!0){this.droppables.forEach(l=>{this.getDraggablesFromDroppable(l).forEach(d=>{d.remove(),this.draggablesModified([],[d])})}),this.dragContainers.forEach(l=>{Array.from(l.querySelectorAll('[qti-draggable="true"]')).forEach(d=>{d.style.opacity="1.0"})}),this.dragClone=null,this.dragSource=null,this.isDragging=!1,this.isDraggable=!1,this.currentDropTarget=null,this.lastTarget=null,o&&this.saveResponse()}updateDragClonePosition(o){if(!this.isDragging||!this.dragClone)return;let l=o.clientX-this.cloneOffset.x,c=o.clientY-this.cloneOffset.y,{newLeft:d,newTop:h}=this.applyInteractionBoundaries(l,c,this.dragClone);this.dragClone.style.left=`${d}px`,this.dragClone.style.top=`${h}px`}applyInteractionBoundaries(o,l,c){let d=this.getBoundingClientRect(),h=c.getBoundingClientRect(),g=h.width,v=h.height,q=Math.max(d.left,Math.min(o,d.right-g)),T=Math.max(d.top,Math.min(l,d.bottom-v));return{newLeft:q,newTop:T}}getEventCoordinates(o,l=!1){let c=o.touches?o.touches[0]:o;return{x:l?c.pageX:c.clientX,y:l?c.pageY:c.clientY}}calculateDragDistance(o){let l=Math.abs(o.clientX-this.touchStartPoint.x),c=Math.abs(o.clientY-this.touchStartPoint.y);return l+c}findClosestDropzone(){let o=this.allDropzones.filter(h=>!h.hasAttribute("disabled"));if(!this.dragClone||o.length===0)return null;let l=this.dragClone.getBoundingClientRect(),c=null,d=0;for(let h of o){let g=h.getBoundingClientRect(),v=this.calculateOverlapArea(l,g);v>d&&(d=v,c=h)}if(!c){let h=200;for(let g of o){let v=g.getBoundingClientRect(),q=Math.sqrt(Math.pow(l.left-v.left,2)+Math.pow(l.top-v.top,2));q<h&&(h=q,c=g)}}return c}calculateOverlapArea(o,l){let c=Math.max(0,Math.min(o.right,l.right)-Math.max(o.left,l.left)),d=Math.max(0,Math.min(o.bottom,l.bottom)-Math.max(o.top,l.top));return c*d}dispatchCustomEvent(o,l,c=!0){if(!o)return;let d=new CustomEvent(l,{bubbles:c,cancelable:!0});d.dataTransfer=this.dataTransfer,o.dispatchEvent(d)}appendClone(){document.body.appendChild(this.dragClone)}handleTouchStart(o){if(this.isDragging)return;let{x:l,y:c}=this.getEventCoordinates(o);this.touchStartPoint={x:l,y:c},this.dragSource=o.currentTarget,this.isDraggable=!0,this._internals.states.add("--dragzone-enabled"),this._internals.states.add("--dragzone-active"),this.activateDragLocation(),this.activateDroppables(this.dragSource);let d=this.findDraggableInDraggableContainer(this.dragSource.getAttribute("identifier")),h=this.droppables.some(w=>Array.from(w.children).some(le=>le===this.dragSource)),g=this.dragSource.getBoundingClientRect();h&&(this.dragSource.remove(),this.draggablesModified([],[this.dragSource]),this.dragSource=d),this.cloneOffset.x=l-g.left,this.cloneOffset.y=c-g.top,this.dragClone=d.cloneNode(!0);let v=window.getComputedStyle(d);for(let w=0;w<v.length;w++){let le=v[w];this.dragClone.style.setProperty(le,v.getPropertyValue(le))}let q=d.getBoundingClientRect();this.dragClone.style.width=`${q.width}px`,this.dragClone.style.height=`${q.height}px`,g&&this.setDragCloneStyles(g),this.dragClone.style.display="block",this.dragClone.style.opacity="1",this.appendClone();let T=this.getMatchMaxValue(this.dragSource),L=this.draggables.filter(w=>w.getAttribute("identifier")===this.dragSource.getAttribute("identifier"));T!==0&&L.length>=T?(d.style.opacity="0.0",d.style.pointerEvents="none"):d.style.opacity="1.0",o.preventDefault(),this.dragClone.setAttribute("dragging","")}findDraggableInDraggableContainer(o){let l=this.dragContainers.flat();for(let c of l){if(c.getAttribute("identifier")===o)return c;let d;c instanceof HTMLSlotElement?d=Array.from(c?.assignedElements()||[]):d=Array.from(c.querySelectorAll(i));let h=d.find(g=>g.getAttribute("identifier")===o);if(h)return h}}setDragCloneStyles(o){this.dragClone.style.position="fixed",this.dragClone.style.top=`${o.top}px`,this.dragClone.style.left=`${o.left}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([u({attribute:!1,type:Object})],r.prototype,"configuration",2),n([u({type:Number,reflect:!0,attribute:"min-associations"})],r.prototype,"minAssociations",2),n([u({type:Number,reflect:!0,attribute:"max-associations"})],r.prototype,"maxAssociations",2),n([Xe(t)],r.prototype,"handleDraggableContainerChange",1),n([Xe(i)],r.prototype,"handleDraggablesChange",1),n([Xe(e)],r.prototype,"handleDroppablesChange",1),r};var Ut=b`
|
|
71
|
+
:host {
|
|
72
|
+
display: block; /* necessary to calculate scaling position */
|
|
73
|
+
}
|
|
74
|
+
slot[name='qti-simple-associable-choice'] {
|
|
75
|
+
display: flex;
|
|
76
|
+
align-items: flex-start;
|
|
77
|
+
flex: 1;
|
|
78
|
+
border: 2px solid transparent;
|
|
79
|
+
padding: 0.3rem;
|
|
80
|
+
border-radius: 0.3rem;
|
|
81
|
+
gap: 0.5rem;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
:host::part(associables-container) {
|
|
85
|
+
display: flex;
|
|
86
|
+
padding: 0.5rem;
|
|
87
|
+
justify-content: space-between;
|
|
88
|
+
background: linear-gradient(
|
|
89
|
+
180deg,
|
|
90
|
+
rgb(0 0 0 / 0%) calc(50% - 1px),
|
|
91
|
+
var(--qti-border-color-gray) calc(50%),
|
|
92
|
+
rgb(0 0 0 / 0%) calc(50% + 1px)
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
`;var he=class extends O(E,"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 m` <slot name="prompt"></slot>
|
|
96
|
+
<slot name="qti-simple-associable-choice"></slot>
|
|
97
|
+
<div part="drop-container">
|
|
98
|
+
${this._childrenMap.length>0&&Array.from(Array(Math.ceil(this._childrenMap.length/2)).keys()).map((e,t)=>m`<div part="associables-container">
|
|
99
|
+
<div name="left${t}" part="drop-list" class="dl" identifier="droplist${t}_left"></div>
|
|
100
|
+
<div name="right${t}" part="drop-list" class="dl" identifier="droplist${t}_right"></div>
|
|
101
|
+
</div>`)}
|
|
102
|
+
|
|
103
|
+
<div role="alert" id="validationMessage"></div>
|
|
104
|
+
</div>`}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("register-qti-simple-associable-choice",this._registerChoiceHandler)}};he.styles=Ut,n([x()],he.prototype,"_childrenMap",2),he=n([f("qti-associate-interaction")],he);var te=(p,i)=>{class e extends p{constructor(){super(...arguments);this._choiceElements=[];this.minChoices=0;this.maxChoices=1;this._handleDisabledChange=(s,a)=>{this._choiceElements.forEach(o=>o.disabled=a)};this._handleReadonlyChange=(s,a)=>{this._choiceElements.forEach(o=>o.readonly=a)};this.response="";this._handleValueChange=()=>{this._internals.setFormValue(this.value),this._updateChoiceSelection()}}_handleMaxChoicesChange(s,a){this._determineInputType()}get value(){return Array.isArray(this.response)&&this.response.length===0||this.response===""?null:Array.isArray(this.response)?this.response.join(","):this.response}set value(s){this.maxChoices>1&&(typeof s=="string"||s===null)?this.response=s?s.toString().split(","):[]:this.response=s||""}toggleCorrectResponse(s,a){if(s.correctResponse){let o=Array.isArray(s.correctResponse)?s.correctResponse:[s.correctResponse];this._choiceElements.forEach(l=>{l.internals.states.delete("correct-response"),l.internals.states.delete("incorrect-response"),a&&o.length>0&&(o.includes(l.identifier)?l.internals.states.add("correct-response"):l.internals.states.add("incorrect-response"))})}}connectedCallback(){super.connectedCallback(),this.addEventListener(`register-${i}`,this._registerChoiceElement),this.addEventListener(`unregister-${i}`,this._unregisterChoiceElement),this.addEventListener(`activate-${i}`,this._choiceElementSelectedHandler)}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener(`register-${i}`,this._registerChoiceElement),this.removeEventListener(`unregister-${i}`,this._unregisterChoiceElement),this.removeEventListener(`activate-${i}`,this._choiceElementSelectedHandler)}validate(){let s=this._choiceElements.filter(c=>this._getChoiceChecked(c)),a=s.length,o=!0,l="";return this.maxChoices!==0&&a>this.maxChoices?(o=!1,l=this.dataset.maxSelectionsMessage||`Please select no more than ${this.maxChoices} ${this.maxChoices===1?"option":"options"}.`):a<this.minChoices&&(o=!1,l=this.dataset.minSelectionsMessage||`Please select at least ${this.minChoices} ${this.minChoices===1?"option":"options"}.`),s.length>0&&this._internals.setValidity(o?{}:{customError:!0},l,s[a-1]||this._choiceElements[0]||this),o}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(s){s.stopPropagation();let a=s.target;a.disabled=this.disabled,this._choiceElements.push(a),this._setInputType(a)}_unregisterChoiceElement(s){s.stopPropagation();let a=s.target;this._choiceElements=this._choiceElements.filter(o=>o!==a)}_determineInputType(){this._choiceElements.forEach(s=>{this._setInputType(s)})}_setInputType(s){this._internals.role=this.maxChoices===1?"radiogroup":null;let a=this.maxChoices===1?"radio":"checkbox";s.internals.role=a,s.internals.states.delete(a==="radio"?"checkbox":"radio"),s.internals.states.add(a)}_choiceElementSelectedHandler(s){this._toggleChoiceChecked(s.target),this.maxChoices===1&&this._choiceElements.forEach(a=>{a.identifier!==s.detail.identifier&&this._setChoiceChecked(a,!1)}),this._handleChoiceSelection()}_setChoiceChecked(s,a){s.internals?.states&&(a?(s.internals.states.add("--checked"),s.internals.ariaChecked="true"):(s.internals.states.delete("--checked"),s.internals.ariaChecked="false"))}_getChoiceChecked(s){return s.internals.states.has("--checked")}_toggleChoiceChecked(s){let a=this._getChoiceChecked(s);this._setChoiceChecked(s,!a)}_handleChoiceSelection(){let a=this._choiceElements.filter(o=>this._getChoiceChecked(o)).map(o=>o.identifier);this.response=this.maxChoices===1?a[0]||"":a,this.validate(),this.saveResponse(this.response)}_updateChoiceSelection(){let s=Array.isArray(this.response)?this.response:[this.response];this._choiceElements.forEach(a=>{let o=s.includes(a.identifier);this._setChoiceChecked(a,o)})}}return n([je("#validationMessage")],e.prototype,"_validationMessageElement",2),n([u({type:Number,attribute:"min-choices"})],e.prototype,"minChoices",2),n([u({type:Number,attribute:"max-choices"})],e.prototype,"maxChoices",2),n([R("maxChoices",{waitUntilFirstUpdate:!0})],e.prototype,"_handleMaxChoicesChange",1),n([R("disabled",{waitUntilFirstUpdate:!0})],e.prototype,"_handleDisabledChange",2),n([R("readonly",{waitUntilFirstUpdate:!0})],e.prototype,"_handleReadonlyChange",2),n([x()],e.prototype,"response",2),n([R("response",{waitUntilFirstUpdate:!0})],e.prototype,"_handleValueChange",2),e};var jt=(p,i)=>{class e extends p{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(s){s&&(this._classes=s.split(" "),this._addLabels())}get class(){return this._classes?.join(" ")||""}updated(s){super.updated(s),this._addLabels()}_addLabels(){let s=this._classes.some(o=>this._allLabels.includes(o)||this._allLabelSuffixes.includes(o)),a=o=>!isNaN(+o);if(s){let l=Array.from(this.querySelectorAll("qti-simple-choice")).map(c=>c).map((c,d)=>({el:c,order:a(c.style.order)?+c.style.order:d+1})).sort((c,d)=>c.order-d.order).map(c=>c.el);for(let c=0;c<l.length;c++)l[c].marker=this._getLabel(c+1)}}_getLabel(s){let a=this._classes.filter(c=>this._allLabels.includes(c)).pop(),o=this._classes.filter(c=>this._allLabelSuffixes.includes(c)).pop();!a&&o&&(a="qti-labels-upper-alpha");let l="";switch(a){case"qti-labels-decimal":l=`${s}`;break;case"qti-labels-lower-alpha":l=`${String.fromCharCode(97+s-1)}`;break;case"qti-labels-upper-alpha":l=`${String.fromCharCode(65+s-1)}`;break}return o==="qti-labels-suffix-period"?l+=".":o==="qti-labels-suffix-parenthesis"&&(l+=")"),l}}return n([u({type:String,reflect:!0})],e.prototype,"class",1),e};var Xt=b`
|
|
105
|
+
:host {
|
|
106
|
+
display: block;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
[part='slot'] {
|
|
110
|
+
display: grid;
|
|
111
|
+
gap: 10px;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/* Define the number of columns dynamically */
|
|
115
|
+
:host([class*='qti-choices-stacking-']) [part='slot'] {
|
|
116
|
+
grid-template-columns: repeat(var(--stacking-count, 1), 1fr);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/* Apply dynamic stacking count based on class */
|
|
120
|
+
:host(.qti-choices-stacking-1) {
|
|
121
|
+
--stacking-count: 1;
|
|
122
|
+
}
|
|
123
|
+
:host(.qti-choices-stacking-2) {
|
|
124
|
+
--stacking-count: 2;
|
|
125
|
+
}
|
|
126
|
+
:host(.qti-choices-stacking-3) {
|
|
127
|
+
--stacking-count: 3;
|
|
128
|
+
}
|
|
129
|
+
:host(.qti-choices-stacking-4) {
|
|
130
|
+
--stacking-count: 4;
|
|
131
|
+
}
|
|
132
|
+
:host(.qti-choices-stacking-5) {
|
|
133
|
+
--stacking-count: 5;
|
|
134
|
+
}
|
|
135
|
+
:host(.qti-choices-stacking-6) {
|
|
136
|
+
--stacking-count: 6;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/* Default slot item layout */
|
|
140
|
+
::slotted(qti-simple-choice) {
|
|
141
|
+
display: flex;
|
|
142
|
+
align-items: center;
|
|
143
|
+
white-space: nowrap;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/* Orientation styles */
|
|
147
|
+
:host(.qti-orientation-horizontal) [part='slot'] {
|
|
148
|
+
grid-auto-flow: dense column;
|
|
149
|
+
grid-auto-columns: 1fr;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
:host(.qti-orientation-vertical) [part='slot'] {
|
|
153
|
+
grid-auto-flow: row;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/* Vertical and horizontal stacking logic */
|
|
157
|
+
:host(.qti-orientation-vertical[class*='qti-choices-stacking-']) [part='slot'] {
|
|
158
|
+
grid-auto-flow: dense column;
|
|
159
|
+
grid-auto-columns: 1fr;
|
|
160
|
+
grid-template-columns: repeat(var(--stacking-count), 1fr);
|
|
161
|
+
grid-template-rows: repeat(calc(var(--item-count) / var(--stacking-count)), 1fr);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
:host(.qti-orientation-horizontal[class*='qti-choices-stacking-']) [part='slot'] {
|
|
165
|
+
grid-auto-flow: row;
|
|
166
|
+
grid-template-columns: repeat(var(--stacking-count), 1fr);
|
|
167
|
+
grid-template-rows: unset;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/* Ensure even distribution in vertical mode */
|
|
171
|
+
:host(.qti-orientation-vertical) ::slotted(qti-simple-choice:nth-child(even)) {
|
|
172
|
+
grid-row: auto;
|
|
173
|
+
}
|
|
174
|
+
`;var fe=class extends jt(te(E,"qti-simple-choice"),"qti-simple-choice"){constructor(){super(...arguments);this.orientation="vertical"}_handleSlotChange(){let e=this.querySelectorAll("qti-simple-choice");this.style.setProperty("--item-count",e.length.toString())}render(){return m`
|
|
175
|
+
<slot part="prompt" name="prompt"></slot><slot part="slot" @slotchange=${this._handleSlotChange}></slot>
|
|
176
|
+
<div part="message" role="alert" id="validationMessage"></div>
|
|
177
|
+
`}};fe.styles=Xt,n([u({type:String})],fe.prototype,"orientation",2),fe=n([f("qti-choice-interaction")],fe);var Y=class extends E{constructor(){super();this._errorMessage=null;this.handlePostMessage=this.handlePostMessage.bind(this)}connectedCallback(){super.connectedCallback();let e=this.data.startsWith("http")?this.data:qe(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(`
|
|
178
|
+
<html>
|
|
179
|
+
<head>
|
|
180
|
+
<link href='${qe(`${this.baseRefUrl}/${this.manifest.style[0]}`)}' rel="stylesheet" />
|
|
181
|
+
<script src='${qe(`${this.baseRefUrl}/${this.manifest.script[0]}`)}'></script>
|
|
182
|
+
</head>
|
|
183
|
+
<body></body>
|
|
184
|
+
</html>
|
|
185
|
+
`),t.close()}getIFrames(){let e=this.shadowRoot.querySelectorAll("iframe"),t=this.querySelectorAll("iframe"),r=[...e,...t];for(let s of r){let a=s.src;if(new URL(a,window.location.href).origin===window.location.origin)try{let l=s.contentDocument||s.contentWindow.document;l&&this.getInnerIFrames(l,r)}catch(l){console.error("Error accessing nested iframe:",l)}}return r.forEach((s,a)=>{r.indexOf(s)!==a&&r.splice(a,1)}),r}getInnerIFrames(e,t=[]){return e.querySelectorAll("iframe").forEach(s=>{t.push(s);let a=s.src;if(new URL(a,window.location.href).origin===window.location.origin)try{let l=s.contentDocument||s.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 s of r)s.contentWindow&&s.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 s=this.manifest.media.map(a=>a.startsWith("http")?a:qe(this.baseRefUrl+"/"+a));this.postToWindowAndIframes("mediaData",s);break}case"setStageHeight":console.log("setStageHeight not implemented");break}}validate(){return this.rawResponse!==""}get response(){return this.rawResponse}set response(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 m`<iframe
|
|
186
|
+
width=${this.getAttribute("width")}
|
|
187
|
+
height=${this.getAttribute("height")}
|
|
188
|
+
frameborder="0"
|
|
189
|
+
title="pciContainer"
|
|
190
|
+
id="pciContainer"
|
|
191
|
+
>
|
|
192
|
+
</iframe>
|
|
193
|
+
${this._errorMessage&&m`<div style="color:red">
|
|
194
|
+
<h1>Error</h1>
|
|
195
|
+
${this._errorMessage}
|
|
196
|
+
</div>`}`}};n([u({type:String,attribute:"data"})],Y.prototype,"data",2),n([u({type:String,attribute:"data-base-item"})],Y.prototype,"baseItemUrl",2),n([u({type:String,attribute:"data-base-ref"})],Y.prototype,"baseRefUrl",2),n([u({type:String,attribute:"id"})],Y.prototype,"id",2),n([x()],Y.prototype,"_errorMessage",2),Y=n([f("qti-custom-interaction")],Y);var re=class extends y{constructor(){super(...arguments);this.disabled=!1;this.countAttempt=null;this.title="end attempt"}render(){return m`<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([u({type:String,attribute:"response-identifier"})],re.prototype,"responseIdentifier",2),n([u({reflect:!0,type:Boolean})],re.prototype,"disabled",2),n([u({type:String,attribute:"count-attempt"})],re.prototype,"countAttempt",2),n([u({type:String})],re.prototype,"title",2),re=n([f("qti-end-attempt-interaction")],re);var Wt=b`
|
|
197
|
+
/* PK: display host as block, else design will be collapsed */
|
|
198
|
+
:host {
|
|
199
|
+
display: block;
|
|
200
|
+
}
|
|
201
|
+
textarea {
|
|
202
|
+
box-sizing: border-box;
|
|
203
|
+
width: 100%;
|
|
204
|
+
height: 100%;
|
|
205
|
+
border: 0;
|
|
206
|
+
}
|
|
207
|
+
`;var A=class extends E{constructor(){super(...arguments);this._rows=5;this.response=null;this._handleResponseChange=()=>{this._internals.setFormValue(this.value),this.validate()}}handleclassNamesChange(e,t){let r=t.split(" "),s=!1;if(r.forEach(a=>{if(a.startsWith("qti-height-lines-")){let o=a.replace("qti-height-lines-","");this._rows=parseInt(o),s=!0}}),!s&&this.expectedLength){let a=Math.ceil(this.expectedLength/50);this._rows=a}}get value(){return this.response||null}set value(e){this.response=e||null}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.response!==""&&e.checkValidity()}reportValidity(){let e=this.shadowRoot.querySelector("textarea");if(!e)return!1;let t=this.validate();return t||e.reportValidity(),t}render(){return m`<slot name="prompt"></slot
|
|
208
|
+
><textarea
|
|
209
|
+
part="textarea"
|
|
210
|
+
name="${this.responseIdentifier}"
|
|
211
|
+
spellcheck="false"
|
|
212
|
+
autocomplete="off"
|
|
213
|
+
maxlength="${5e3}"
|
|
214
|
+
@keydown="${e=>e.stopImmediatePropagation()}"
|
|
215
|
+
@keyup="${this.textChanged}"
|
|
216
|
+
@change="${this.textChanged}"
|
|
217
|
+
@blur="${e=>{this.reportValidity()}}"
|
|
218
|
+
placeholder="${H(this.placeholderText?this.placeholderText:void 0)}"
|
|
219
|
+
rows="${this._rows}"
|
|
220
|
+
?disabled="${this.disabled}"
|
|
221
|
+
?readonly="${this.readonly}"
|
|
222
|
+
.value=${this.response}
|
|
223
|
+
></textarea>`}textChanged(e){if(this.disabled||this.readonly)return;let t=e.target;this.setEmptyAttribute(t.value),this.response!==t.value&&(this.value=t.value,this.saveResponse(t.value))}setEmptyAttribute(e){this.setAttribute("empty",e===""?"true":"false")}};A.styles=Wt,n([x()],A.prototype,"_rows",2),n([u({type:Number,attribute:"expected-length"})],A.prototype,"expectedLength",2),n([u({type:String,attribute:"pattern-mask"})],A.prototype,"patternMask",2),n([u({type:String,attribute:"placeholder-text"})],A.prototype,"placeholderText",2),n([u({type:String,attribute:"data-patternmask-message"})],A.prototype,"dataPatternmaskMessage",2),n([u({type:String,attribute:"class"})],A.prototype,"classNames",2),n([R("classNames")],A.prototype,"handleclassNamesChange",1),n([x()],A.prototype,"response",2),n([R("response",{waitUntilFirstUpdate:!0})],A.prototype,"_handleResponseChange",2),A=n([f("qti-extended-text-interaction")],A);var ge=class extends y{constructor(){super(...arguments);this.tabindex=0}connectedCallback(){this.setAttribute("slot","drags")}};ge.styles=b`
|
|
224
|
+
:host {
|
|
225
|
+
display: flex;
|
|
226
|
+
user-select: none;
|
|
227
|
+
}
|
|
228
|
+
`,n([u({type:Number,reflect:!0})],ge.prototype,"tabindex",2),ge=n([f("qti-gap-img")],ge);var Jt=b`
|
|
229
|
+
:host {
|
|
230
|
+
display: flex;
|
|
231
|
+
align-items: flex-start;
|
|
232
|
+
flex-direction: column;
|
|
233
|
+
flex-wrap: wrap;
|
|
234
|
+
gap: 0.5rem;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
:host(.qti-choices-top) {
|
|
238
|
+
flex-direction: column;
|
|
239
|
+
}
|
|
240
|
+
:host(.qti-choices-bottom) {
|
|
241
|
+
flex-direction: column-reverse;
|
|
242
|
+
}
|
|
243
|
+
:host(.qti-choices-left) {
|
|
244
|
+
flex-direction: row;
|
|
245
|
+
}
|
|
246
|
+
:host(.qti-choices-right) {
|
|
247
|
+
flex-direction: row-reverse;
|
|
248
|
+
}
|
|
249
|
+
/* [part='drops'] , */
|
|
250
|
+
[name='prompt'] {
|
|
251
|
+
width: 100%;
|
|
252
|
+
}
|
|
253
|
+
[name='drags'] {
|
|
254
|
+
display: flex;
|
|
255
|
+
align-items: flex-start;
|
|
256
|
+
flex: 1;
|
|
257
|
+
border: 2px solid transparent;
|
|
258
|
+
padding: 0.3rem;
|
|
259
|
+
border-radius: 0.3rem;
|
|
260
|
+
gap: 0.5rem;
|
|
261
|
+
}
|
|
262
|
+
`;var Se=class extends O(E,"qti-gap-text","qti-gap","slot[part='drags']"){render(){return m`<slot name="prompt"> </slot>
|
|
263
|
+
<slot part="drags" name="drags"></slot>
|
|
264
|
+
<slot part="drops"></slot>
|
|
265
|
+
<div role="alert" id="validationMessage"></div>`}toggleCorrectResponse(i,e){if(e&&i.correctResponse){let t=[],r=Array.isArray(i.correctResponse)?i.correctResponse:[i.correctResponse];r&&(t=r.map(a=>{let o=a.split(" ");return{text:o[0],gap:o[1]}})),this.querySelectorAll("qti-gap").forEach(a=>{let o=a.getAttribute("identifier"),l=t.find(d=>d.gap===o)?.text,c=this.querySelector(`qti-gap-text[identifier="${l}"]`)?.textContent.trim();if(l&&c){if(!a.nextElementSibling?.classList.contains("correct-option")){let d=document.createElement("span");d.classList.add("correct-option"),d.textContent=c,d.style.border="1px solid var(--qti-correct)",d.style.borderRadius="4px",d.style.padding="2px 4px",d.style.display="inline-block",a.insertAdjacentElement("afterend",d)}}else a.nextElementSibling?.classList.contains("correct-option")&&a.nextElementSibling.remove()})}else this.querySelectorAll(".correct-option").forEach(r=>{r.remove()})}};Se.styles=Jt,Se=n([f("qti-gap-match-interaction")],Se);var Kt={toAttribute:p=>p?"true":"false",fromAttribute:p=>p==="true"};function I(p,i){class e extends p{constructor(...s){super(...s);this.identifier="";this.tabIndex=0;this.disabled=!1;this.readonly=!1;this.internals=this.attachInternals()}handleDisabledChange(s,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-${i}`,{bubbles:!0,composed:!0}))}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("keyup",this._onKeyUp),this.removeEventListener("click",this._onClick),this.dispatchEvent(new CustomEvent(`unregister-${i}`,{bubbles:!0,composed:!0}))}_onKeyUp(s){s.altKey||s.code==="Space"&&(s.preventDefault(),this._activate())}_onClick(){this.disabled||this.readonly||(this.focus(),this._activate())}_activate(){this.disabled||this.readonly||this.dispatchEvent(new CustomEvent(`activate-${i}`,{bubbles:!0,composed:!0,detail:{identifier:this.identifier}}))}render(){return m`<slot></slot>`}}return n([u({type:String})],e.prototype,"identifier",2),n([u({type:Number,reflect:!0,attribute:"tabindex"})],e.prototype,"tabIndex",2),n([u({type:Boolean,reflect:!0,attribute:"aria-disabled",converter:Kt})],e.prototype,"disabled",2),n([u({type:Boolean,reflect:!0,attribute:"aria-readonly",converter:Kt})],e.prototype,"readonly",2),n([R("disabled",{waitUntilFirstUpdate:!0})],e.prototype,"handleDisabledChange",1),e}var be=class extends I(y,"qti-gap-text"){constructor(){super(...arguments);this.tabindex=0}connectedCallback(){super.connectedCallback(),this.setAttribute("slot","drags")}render(){return m`<slot></slot>`}};be.styles=b`
|
|
266
|
+
:host {
|
|
267
|
+
display: inline-flex;
|
|
268
|
+
user-select: none;
|
|
269
|
+
}
|
|
270
|
+
`,n([u({type:Number,reflect:!0})],be.prototype,"tabindex",2),be=n([f("qti-gap-text")],be);var ve=class extends y{constructor(){super(...arguments);this.tabindex=0}render(){return m` <slot name="drags"></slot>`}};ve.styles=b`
|
|
271
|
+
:host {
|
|
272
|
+
display: flex;
|
|
273
|
+
user-select: none;
|
|
274
|
+
}
|
|
275
|
+
`,n([u({type:Number,reflect:!0})],ve.prototype,"tabindex",2),ve=n([f("qti-gap")],ve);var Gt=(p,i,e)=>{let t=new Map;for(let r=i;r<=e;r++)t.set(p[r],r);return t},ye=Q(class extends de{constructor(p){if(super(p),p.type!==pe.CHILD)throw Error("repeat() can only be used in text expressions")}dt(p,i,e){let t;e===void 0?e=i:i!==void 0&&(t=i);let r=[],s=[],a=0;for(let o of p)r[a]=t?t(o,a):a,s[a]=e(o,a),a++;return{values:s,keys:r}}render(p,i,e){return this.dt(p,i,e).values}update(p,[i,e,t]){let r=zt(p),{values:s,keys:a}=this.dt(i,e,t);if(!Array.isArray(r))return this.ut=a,s;let o=this.ut??(this.ut=[]),l=[],c,d,h=0,g=r.length-1,v=0,q=s.length-1;for(;h<=g&&v<=q;)if(r[h]===null)h++;else if(r[g]===null)g--;else if(o[h]===a[v])l[v]=ee(r[h],s[v]),h++,v++;else if(o[g]===a[q])l[q]=ee(r[g],s[q]),g--,q--;else if(o[h]===a[q])l[q]=ee(r[h],s[q]),ue(p,l[q+1],r[h]),h++,q--;else if(o[g]===a[v])l[v]=ee(r[g],s[v]),ue(p,r[h],r[g]),g--,v++;else if(c===void 0&&(c=Gt(a,v,q),d=Gt(o,h,g)),c.has(o[h]))if(c.has(o[g])){let T=d.get(a[v]),L=T!==void 0?r[T]:null;if(L===null){let w=ue(p,r[h]);ee(w,s[v]),l[v]=w}else l[v]=ee(L,s[v]),ue(p,r[h],L),r[T]=null;v++}else We(r[g]),g--;else We(r[h]),h++;for(;v<=q;){let T=ue(p,l[q+1]);ee(T,s[v]),l[v++]=T}for(;h<=g;){let T=r[h++];T!==null&&We(T)}return this.ut=a,Ft(p,l),ce}});function ie(p,i,e,t){let r=e.getAttribute("width")?parseFloat(e.getAttribute("width")):e.naturalWidth,s=e.getAttribute("height")?parseFloat(e.getAttribute("height")):e.naturalHeight;switch(p){case"circle":{if(i.length!==3){console.error("Invalid cirlce coordinates:",i);return}let[a,o,l]=i,c=a/r*100,d=o/s*100,h=l/r*100;t.style.left=c-h+"%",t.style.top=d-h+"%";let g=l/r*100,v=l/s*100;t.style.width=2*g+"%",t.style.height=2*v+"%",t.style.borderRadius="50%"}break;case"rect":{if(i.length!==4){console.error("Invalid rectangle coordinates:",i);return}let[a,o,l,c]=i,d=a/r*100,h=o/s*100,g=l/r*100,v=c/s*100;t.style.left=d+"%",t.style.top=h+"%",t.style.width=g-d+"%",t.style.height=v-h+"%"}break;case"ellipse":{if(i.length!==4){console.error("Invalid ellipse coordinates:",i);return}let[a,o,l,c]=i,d=a/r*100,h=o/s*100,g=l/r*100,v=c/s*100;t.style.left=d-g+"%",t.style.top=h-v+"%",t.style.width=2*g+"%",t.style.height=2*v+"%",t.style.borderRadius="50%"}break;case"poly":{if(i.length<6||i.length%2!==0){console.error("Invalid polygon coordinates:",i);return}let a=[];for(let w=0;w<i.length;w+=2)a.push({x:i[w],y:i[w+1]});let o=Math.min(...a.map(w=>w.x)),l=Math.max(...a.map(w=>w.x)),c=Math.min(...a.map(w=>w.y)),d=Math.max(...a.map(w=>w.y)),h=o/r*100,g=c/s*100,v=l/r*100,q=d/s*100;t.style.left=h+"%",t.style.top=g+"%",t.style.width=v-h+"%",t.style.height=q-g+"%";let L=a.map(w=>({x:(w.x-o)/(l-o)*100,y:(w.y-c)/(d-c)*100})).map(w=>`${w.x}% ${w.y}%`).join(",");t.style.clipPath=`polygon(${L})`}break;default:console.error(`Unsupported shape: ${p}`);break}}var Zt=b`
|
|
276
|
+
slot:not([name='prompt']) {
|
|
277
|
+
// position: relative; /* qti-hotspot-choice relative to the slot */
|
|
278
|
+
display: block;
|
|
279
|
+
width: fit-content; /* hotspots not stretching further if image is at max size */
|
|
280
|
+
}
|
|
281
|
+
::slotted(img) {
|
|
282
|
+
/* image not selectable anymore */
|
|
283
|
+
pointer-events: none;
|
|
284
|
+
user-select: none;
|
|
285
|
+
}
|
|
286
|
+
::slotted(qti-associable-hotspot) {
|
|
287
|
+
transform: translate(-50%, -50%);
|
|
288
|
+
}
|
|
289
|
+
line-container {
|
|
290
|
+
display: block;
|
|
291
|
+
position: relative;
|
|
292
|
+
width: fit-content;
|
|
293
|
+
}
|
|
294
|
+
svg {
|
|
295
|
+
position: absolute;
|
|
296
|
+
top: 0px;
|
|
297
|
+
left: 0px;
|
|
298
|
+
}
|
|
299
|
+
`;var P=class extends E{constructor(){super();this.startPoint=null;this.endPoint=null;this._correctLines=[];this._response=[];this.addEventListener("qti-register-hotspot",this.positionHotspotOnRegister)}reset(){this._response=[],this._correctLines=[]}validate(){return this.response.length>0}set response(e){this._response=e}get response(){return this._response}toggleCorrectResponse(e,t){if(!t){this._correctLines=[];return}if(!e.correctResponse){console.error("No correct response found for this interaction.");return}let r=Array.isArray(e.correctResponse)?e.correctResponse:[e.correctResponse];this._correctLines=r}render(){return m`<slot name="prompt"></slot>
|
|
300
|
+
<line-container>
|
|
301
|
+
<svg
|
|
302
|
+
width=${H(this.grImage[0]?.width)}
|
|
303
|
+
height=${H(this.grImage[0]?.height)}
|
|
304
|
+
viewbox="0 0 ${this.grImage[0]?.width} ${this.grImage[0]?.height}"
|
|
305
|
+
>
|
|
306
|
+
${ye(this.response,e=>e,(e,t)=>Ue`
|
|
307
|
+
<line
|
|
308
|
+
part="line"
|
|
309
|
+
x1=${parseInt(this.querySelector(`[identifier=${e.split(" ")[0]}]`).style.left)}
|
|
310
|
+
y1=${parseInt(this.querySelector(`[identifier=${e.split(" ")[0]}]`).style.top)}
|
|
311
|
+
x2=${parseInt(this.querySelector(`[identifier=${e.split(" ")[1]}]`).style.left)}
|
|
312
|
+
y2=${parseInt(this.querySelector(`[identifier=${e.split(" ")[1]}]`).style.top)}
|
|
313
|
+
stroke="red"
|
|
314
|
+
stroke-width="3"
|
|
315
|
+
@click=${r=>{r.stopPropagation(),this._response=this._response.filter((s,a)=>a!==t),this.saveResponse(this.response)}}
|
|
316
|
+
/>
|
|
317
|
+
`)}
|
|
318
|
+
${ye(this._correctLines,e=>e,(e,t)=>Ue`
|
|
319
|
+
<line
|
|
320
|
+
part="correct-line"
|
|
321
|
+
x1=${parseInt(this.querySelector(`[identifier=${e.split(" ")[0]}]`).style.left)}
|
|
322
|
+
y1=${parseInt(this.querySelector(`[identifier=${e.split(" ")[0]}]`).style.top)}
|
|
323
|
+
x2=${parseInt(this.querySelector(`[identifier=${e.split(" ")[1]}]`).style.left)}
|
|
324
|
+
y2=${parseInt(this.querySelector(`[identifier=${e.split(" ")[1]}]`).style.top)}
|
|
325
|
+
stroke="var(--qti-correct)"
|
|
326
|
+
stroke-width="3"
|
|
327
|
+
stroke-dasharray="5,5"
|
|
328
|
+
/>
|
|
329
|
+
`)}
|
|
330
|
+
${this.startPoint&&Ue`<line
|
|
331
|
+
part="point"
|
|
332
|
+
x1=${this.startCoord.x}
|
|
333
|
+
y1=${this.startCoord.y}
|
|
334
|
+
x2=${this.mouseCoord.x}
|
|
335
|
+
y2=${this.mouseCoord.y}
|
|
336
|
+
stroke="var(--qti-border-active)"
|
|
337
|
+
stroke-width="3"
|
|
338
|
+
/>`}
|
|
339
|
+
</svg>
|
|
340
|
+
<slot></slot>
|
|
341
|
+
</line-container>
|
|
342
|
+
<div role="alert" id="validationMessage"></div>`}positionHotspotOnRegister(e){let t=this.querySelector("img"),r=e.target,s=r.getAttribute("coords"),a=r.getAttribute("shape"),o=s.split(",").map(l=>parseInt(l));ie(a,o,t,r)}firstUpdated(){this.hotspots=this.querySelectorAll("qti-associable-hotspot"),this.addEventListener("mousemove",e=>{let t=this.grImage[0];if(!t)return;let r=t.getBoundingClientRect();this.mouseCoord={x:e.clientX-r.left,y:e.clientY-r.top}}),this.hotspots.forEach(e=>{e.style.left=e.getAttribute("coords").split(",")[0]+"px",e.style.top=e.getAttribute("coords").split(",")[1]+"px",e.addEventListener("click",t=>{this.startPoint?this.endPoint||(this.endPoint=t.target,this._response=[...this.response,`${this.startPoint.getAttribute("identifier")} ${this.endPoint.getAttribute("identifier")}`],this.saveResponse(this.response),this.startPoint=null,this.endPoint=null):(this.startPoint=t.target,this.startCoord={x:parseInt(this.startPoint.getAttribute("coords").split(",")[0]),y:parseInt(this.startPoint.getAttribute("coords").split(",")[1])})})})}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("qti-register-hotspot",this.positionHotspotOnRegister)}};P.styles=Zt,n([x()],P.prototype,"_correctLines",2),n([x()],P.prototype,"startCoord",2),n([x()],P.prototype,"mouseCoord",2),n([Ot({selector:"img"})],P.prototype,"grImage",2),n([x()],P.prototype,"_response",2),P=n([f("qti-graphic-associate-interaction")],P);var Qt=b`
|
|
343
|
+
:host {
|
|
344
|
+
display: flex;
|
|
345
|
+
align-items: flex-start;
|
|
346
|
+
flex-direction: column;
|
|
347
|
+
flex-wrap: wrap;
|
|
348
|
+
gap: 0.5rem;
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
:host(.qti-choices-top) {
|
|
352
|
+
flex-direction: column-reverse;
|
|
353
|
+
}
|
|
354
|
+
:host(.qti-choices-bottom) {
|
|
355
|
+
flex-direction: column;
|
|
356
|
+
}
|
|
357
|
+
:host(.qti-choices-left) {
|
|
358
|
+
flex-direction: row-reverse;
|
|
359
|
+
& [name='drags'] {
|
|
360
|
+
width: 25%;
|
|
361
|
+
}
|
|
362
|
+
& [part='image'] {
|
|
363
|
+
width: 75%;
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
:host(.qti-choices-right) {
|
|
367
|
+
flex-direction: row;
|
|
368
|
+
& [name='drags'] {
|
|
369
|
+
width: 25%;
|
|
370
|
+
}
|
|
371
|
+
& [part='image'] {
|
|
372
|
+
width: 75%;
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
[part='image'] {
|
|
376
|
+
display: block;
|
|
377
|
+
position: relative;
|
|
378
|
+
}
|
|
379
|
+
/* [part='drops'] , */
|
|
380
|
+
|
|
381
|
+
[name='drags'] {
|
|
382
|
+
display: flex;
|
|
383
|
+
align-items: flex-start;
|
|
384
|
+
flex-wrap: wrap;
|
|
385
|
+
flex: 1;
|
|
386
|
+
border: 2px solid transparent;
|
|
387
|
+
padding: 0.3rem;
|
|
388
|
+
border-radius: 0.3rem;
|
|
389
|
+
gap: 0.5rem;
|
|
390
|
+
}
|
|
391
|
+
::slotted(img) {
|
|
392
|
+
display: inline-block;
|
|
393
|
+
user-select: none;
|
|
394
|
+
pointer-events: none;
|
|
395
|
+
}
|
|
396
|
+
`;var _e=class extends O(E,"qti-gap-img, qti-gap-text","qti-associable-hotspot","slot[part='drags']"){render(){return m` <slot name="prompt"></slot>
|
|
397
|
+
<slot part="image"></slot>
|
|
398
|
+
<slot part="drags" name="drags" class="hover-border"></slot>
|
|
399
|
+
<div role="alert" id="validationMessage"></div>`}positionHotspotOnRegister(i){let e=i.target,t=e.getAttribute("coords"),r=e.getAttribute("shape"),s=t.split(",").map(a=>parseInt(a));switch(r){case"circle":{let[a,o,l]=s;e.style.left=a-l+"px",e.style.top=o-l+"px",e.style.width=e.style.height=2*l+"px"}break;case"rect":{let[a,o,l,c]=s;e.style.left=a+"px",e.style.top=o+"px",e.style.width=l-a+"px",e.style.height=c-o+"px"}break;default:break}}connectedCallback(){super.connectedCallback(),this.addEventListener("qti-register-hotspot",this.positionHotspotOnRegister)}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("qti-register-hotspot",this.positionHotspotOnRegister)}};_e.styles=Qt,_e=n([f("qti-graphic-gap-match-interaction")],_e);var er=b`
|
|
400
|
+
slot:not([name='prompt']) {
|
|
401
|
+
position: relative; /* qti-hotspot-choice relative to the slot */
|
|
402
|
+
display: block;
|
|
403
|
+
width: fit-content; /* hotspots not stretching further if image is at max size */
|
|
404
|
+
}
|
|
405
|
+
::slotted(img) {
|
|
406
|
+
/* image not selectable anymore */
|
|
407
|
+
pointer-events: none;
|
|
408
|
+
user-select: none;
|
|
409
|
+
}
|
|
410
|
+
`;var ke=class extends te(E,"qti-hotspot-choice"){constructor(){super(...arguments);this._choiceElements=[]}render(){return m`
|
|
411
|
+
<slot name="prompt"></slot>
|
|
412
|
+
<slot></slot>
|
|
413
|
+
<div role="alert" id="validationMessage"></div>
|
|
414
|
+
`}setHotspotOrder(e){let{identifier:t}=e.detail,r=this._choiceElements.find(a=>a.getAttribute("identifier")===t);if(!r)return;let s=this._choiceElements.length;if(!this.choiceOrdering){if(this.choiceOrdering=!0,r.order==null){let a=this._choiceElements.filter(o=>o.order!=null).length;if(a>=s){this.choiceOrdering=!1;return}r.order=a+1}else{let a=r.order;r.order=null,this._choiceElements.forEach(o=>{o.order!=null&&o.order>a&&o.order--})}this.choiceOrdering=!1}}toggleCorrectResponse(e,t){let r=this._choiceElements;for(let s of r)if(t&&e.correctResponse?.length>0&&Array.isArray(e.correctResponse)){let a=e.correctResponse.findIndex(o=>o===s.identifier);a>=0?s.orderCorrect=a+1:s.orderCorrect=null}else s.orderCorrect=null}positionHotspotOnRegister(e){let t=this.querySelector("img"),r=e.target,s=r.getAttribute("coords"),a=r.getAttribute("shape"),o=s.split(",").map(l=>parseInt(l));ie(a,o,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)}};ke.styles=er,ke=n([f("qti-graphic-order-interaction")],ke);var ae=class extends I(y,"qti-hotspot-choice"){};ae.styles=b`
|
|
415
|
+
:host {
|
|
416
|
+
display: flex;
|
|
417
|
+
user-select: none;
|
|
418
|
+
position: absolute;
|
|
419
|
+
}
|
|
420
|
+
`,n([u({attribute:"aria-ordervalue",type:Number,reflect:!0})],ae.prototype,"order",2),n([u({attribute:"aria-ordercorrectvalue",type:Number,reflect:!0})],ae.prototype,"orderCorrect",2),ae=n([f("qti-hotspot-choice")],ae);var tr=b`
|
|
421
|
+
slot:not([name='prompt']) {
|
|
422
|
+
position: relative; /* qti-hotspot-choice relative to the slot */
|
|
423
|
+
display: block;
|
|
424
|
+
width: fit-content; /* hotspots not stretching further if image is at max size */
|
|
425
|
+
}
|
|
426
|
+
::slotted(img) {
|
|
427
|
+
/* image not selectable anymore */
|
|
428
|
+
pointer-events: none;
|
|
429
|
+
user-select: none;
|
|
430
|
+
/* width:100%; */
|
|
431
|
+
}
|
|
432
|
+
`;var Ae=class extends te(E,"qti-hotspot-choice"){render(){return m`
|
|
433
|
+
<slot name="prompt"></slot>
|
|
434
|
+
<slot></slot>
|
|
435
|
+
`}positionHotspotOnRegister(i){let e=this.querySelector("img"),t=i.target,r=t.getAttribute("coords"),s=t.getAttribute("shape"),a=r.split(",").map(o=>parseInt(o));ie(s,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)}};Ae.styles=tr,Ae=n([f("qti-hotspot-interaction")],Ae);var Ke=class extends te(E,"qti-hottext"){constructor(){super(...arguments);this.render=()=>m`<slot></slot>`}};Ke=n([f("qti-hottext-interaction")],Ke);var Le=class extends I(y,"qti-hottext"){render(){return m`<div part="ch"><div part="cha"></div></div>
|
|
436
|
+
<slot></slot> `}};Le.styles=b`
|
|
437
|
+
:host {
|
|
438
|
+
display: flex;
|
|
439
|
+
user-select: none;
|
|
440
|
+
}
|
|
441
|
+
`,Le=n([f("qti-hottext")],Le);var Ve=class extends de{constructor(i){if(super(i),this.it=k,i.type!==pe.CHILD)throw Error(this.constructor.directiveName+"() can only be used in child bindings")}render(i){if(i===k||i==null)return this._t=void 0,this.it=i;if(i===ce)return i;if(typeof i!="string")throw Error(this.constructor.directiveName+"() called with a non-string value");if(i===this.it)return this._t;this.it=i;let e=[i];return e.raw=e,this._t={_$litType$:this.constructor.resultType,strings:e,values:[]}}};Ve.directiveName="unsafeHTML",Ve.resultType=1;var xe=Q(Ve);var se=class extends E{constructor(){super(...arguments);this.options=[];this.correctOption="";this.dataPrompt="select"}static get styles(){return[b`
|
|
442
|
+
:host {
|
|
443
|
+
display: inline-block;
|
|
444
|
+
}
|
|
445
|
+
slot {
|
|
446
|
+
display: flex;
|
|
447
|
+
flex-direction: column;
|
|
448
|
+
}
|
|
449
|
+
[role='menu'] {
|
|
450
|
+
position: absolute;
|
|
451
|
+
z-index: 1000;
|
|
452
|
+
}
|
|
453
|
+
.anchor {
|
|
454
|
+
/* anchor-name: --infobox; */
|
|
455
|
+
width: fit-content;
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
.positionedElement {
|
|
459
|
+
position: absolute;
|
|
460
|
+
/* position-anchor: --infobox; */
|
|
461
|
+
/* top: anchor(bottom); */
|
|
462
|
+
}
|
|
463
|
+
`]}render(){return m`
|
|
464
|
+
<select part="select" @change="${this.choiceSelected}" ?disabled="${this.disabled}" ?readonly="${this.readonly}">
|
|
465
|
+
${this.options.map(e=>m`
|
|
466
|
+
<option value="${e.value}" ?selected="${e.selected}">${xe(e.textContent)}</option>
|
|
467
|
+
`)}
|
|
468
|
+
</select>
|
|
469
|
+
|
|
470
|
+
${xe(this.correctOption)}
|
|
471
|
+
`}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 response(e){this.options=this.options.map(t=>(e&&e===t.value&&(t.selected=!0),t))}get response(){return this.options.find(e=>e.selected)?.value||null}toggleCorrectResponse(e,t){if(this.correctResponse=t&&e.correctResponse?.toString(),!this.correctResponse){this.correctOption="";return}this.correctOption=`<span part="correct-option" style="border:1px solid var(--qti-correct); border-radius:4px; padding: 2px 4px; margin: 4px; display:inline-block">${this.options.find(r=>this.correctResponse===r.value).textContent}</span>`}choiceSelected(e){let t=e.target.value;this.options=this.options.map(r=>({...r,selected:r.value===t})),this.saveResponse(t)}};se.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([x()],se.prototype,"options",2),n([x()],se.prototype,"correctOption",2),n([u({attribute:"data-prompt",type:String})],se.prototype,"dataPrompt",2),se=n([f("qti-inline-choice-interaction")],se);var De=class extends y{static get styles(){return[b`
|
|
472
|
+
:host {
|
|
473
|
+
display: block;
|
|
474
|
+
cursor: pointer;
|
|
475
|
+
}
|
|
476
|
+
`]}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 m` <slot></slot> `}_onSelectInlineChoice(){this.dispatchEvent(new CustomEvent("qti-inline-choice-select",{bubbles:!0,cancelable:!1,composed:!0,detail:{identifier:this.identifier}}))}};n([u({type:String})],De.prototype,"identifier",2),De=n([f("qti-inline-choice")],De);var oe=class extends I(y,"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 m`
|
|
477
|
+
<slot part="slot"></slot>
|
|
478
|
+
<slot part="dropslot" name="qti-simple-associable-choice"></slot>
|
|
479
|
+
`}};oe.styles=b`
|
|
480
|
+
:host {
|
|
481
|
+
display: flex;
|
|
482
|
+
user-select: none;
|
|
483
|
+
}
|
|
484
|
+
slot {
|
|
485
|
+
width: 100%;
|
|
486
|
+
display: block;
|
|
487
|
+
}
|
|
488
|
+
slot[name='qti-simple-associable-choice'] {
|
|
489
|
+
/* width: 100%; */
|
|
490
|
+
}
|
|
491
|
+
`,n([u({type:Number,attribute:"match-min"})],oe.prototype,"matchMin",2),n([u({type:Number,attribute:"match-max"})],oe.prototype,"matchMax",2),n([u({type:String,attribute:"fixed",converter:{fromAttribute:e=>e==="true",toAttribute:e=>String(e)}})],oe.prototype,"fixed",2),oe=n([f("qti-simple-associable-choice")],oe);var rr=b`
|
|
492
|
+
slot:not([hidden]) {
|
|
493
|
+
/* slot where the */
|
|
494
|
+
display: flex;
|
|
495
|
+
flex-direction: column;
|
|
496
|
+
gap: 0.5rem;
|
|
497
|
+
align-items: flex-start; /* prevents the drag and drop container slots having the same height */
|
|
498
|
+
}
|
|
499
|
+
:host(.qti-choices-top) slot {
|
|
500
|
+
flex-direction: column;
|
|
501
|
+
}
|
|
502
|
+
:host(.qti-choices-bottom) slot {
|
|
503
|
+
flex-direction: column-reverse;
|
|
504
|
+
}
|
|
505
|
+
:host(.qti-choices-left) slot {
|
|
506
|
+
flex-direction: row;
|
|
507
|
+
}
|
|
508
|
+
:host(.qti-choices-right) slot {
|
|
509
|
+
flex-direction: row-reverse;
|
|
510
|
+
}
|
|
511
|
+
slot[name='prompt'] {
|
|
512
|
+
display: block;
|
|
513
|
+
}
|
|
514
|
+
::slotted(qti-simple-match-set) {
|
|
515
|
+
/* Make sure the drag and drop container slots have the same width */
|
|
516
|
+
flex: 1;
|
|
517
|
+
}
|
|
518
|
+
`;var U=class extends O(E,"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,s=t.name,a=t.type;t.checked?(this.response?this.response.indexOf(r)===-1&&(a==="radio"&&(this.response=this.response.filter(o=>o.indexOf(s)===-1)),this.response=[...this.response,r]):this.response=[r],this.lastCheckedRadio=t):(this.response=this.response.filter(o=>o!==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.response)?[...this.response]:this.response}}))}}get response(){return this.classList.contains("qti-match-tabular")?this._response:super.response}set response(e){this.classList.contains("qti-match-tabular")?this._response=e:super.response=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.response=[]}toggleCorrectResponse(e,t){if(t&&e.correctResponse){let r=[],s=Array.isArray(e.correctResponse)?e.correctResponse:[e.correctResponse];s&&(r=s.map(o=>{let l=o.split(" ");return{text:l[0],gap:l[1]}})),this.querySelectorAll("qti-simple-match-set > qti-simple-associable-choice").forEach(o=>{let l=o.getAttribute("identifier"),c=r.find(h=>h.gap===l)?.text,d=this.querySelector(`qti-simple-associable-choice[identifier="${c}"]`)?.textContent.trim();if(c&&d){if(!o.nextElementSibling?.classList.contains("correct-option")){let h=document.createElement("span");h.classList.add("correct-option"),h.textContent=d,h.style.border="1px solid var(--qti-correct)",h.style.borderRadius="4px",h.style.padding="2px 4px",h.style.display="inline-block",o.insertAdjacentElement("beforebegin",h)}}else o.nextElementSibling?.classList.contains("correct-option")&&o.nextElementSibling.remove()})}else this.querySelectorAll(".correct-option").forEach(s=>{s.remove()})}set correctResponse(e){if(e===""){this.correctOptions=[];return}else Array.isArray(e)&&(this.correctOptions=e,this.class.split(" ").includes("qti-match-tabular")||(this.response=e))}render(){let e=this.class.split(" ").includes("qti-match-tabular");return m`
|
|
519
|
+
<slot name="prompt"></slot>
|
|
520
|
+
<slot ?hidden=${e}></slot>
|
|
521
|
+
|
|
522
|
+
${e?m`
|
|
523
|
+
<table>
|
|
524
|
+
<tr>
|
|
525
|
+
<td></td>
|
|
526
|
+
${this.cols.map(t=>m`<th part="r-header">${xe(t.innerHTML)}</th>`)}
|
|
527
|
+
</tr>
|
|
528
|
+
|
|
529
|
+
${this.rows.map(t=>m`<tr>
|
|
530
|
+
<td part="c-header">${xe(t.innerHTML)}</td>
|
|
531
|
+
${this.cols.map(r=>{let s=t.getAttribute("identifier"),a=r.getAttribute("identifier"),o=`${s} ${a}`,l=this.response.filter(g=>g.split(" ")[0]===s).length||0,c=this.response.includes(o),d=`rb ${c?"rb-checked":""} ${this.correctOptions.includes(o)?"rb-correct":""}`,h=this.correctOptions.length>0?!0:t.matchMax===1?!1:t.matchMax!==0&&l>=t.matchMax&&!c;return m`<td>
|
|
532
|
+
<input
|
|
533
|
+
type=${t.matchMax===1?"radio":"checkbox"}
|
|
534
|
+
part=${d}
|
|
535
|
+
name=${s}
|
|
536
|
+
value=${o}
|
|
537
|
+
.disabled=${h}
|
|
538
|
+
@change=${g=>this.handleRadioChange(g)}
|
|
539
|
+
@click=${g=>t.matchMax===1?this.handleRadioClick(g):null}
|
|
540
|
+
/>
|
|
541
|
+
</td>`})}
|
|
542
|
+
</tr>`)}
|
|
543
|
+
</table>
|
|
544
|
+
`:k}
|
|
545
|
+
|
|
546
|
+
<div role="alert" id="validationMessage"></div>
|
|
547
|
+
`}};U.styles=rr,n([u({type:String})],U.prototype,"class",2),n([x()],U.prototype,"_response",2),n([u({type:String,attribute:"response-identifier"})],U.prototype,"responseIdentifier",2),n([x()],U.prototype,"correctOptions",2),U=n([f("qti-match-interaction")],U);var $e=class extends E{constructor(){super();this._value=null}reset(){}validate(){return!0}get response(){return this._value?this._value.toString():null}set response(e){if(e)if(!isNaN(parseInt(e?.toString())))this._value=parseInt(e.toString());else throw new Error(`Value must be a number ${e}`)}static get properties(){return{...E.properties,step:{type:Number,attribute:"step",default:10}}}render(){return m` <slot name="prompt"></slot>
|
|
548
|
+
<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)})}};$e.styles=[b``],$e=n([f("qti-media-interaction")],$e);var ir=b`
|
|
549
|
+
[part='drags'] {
|
|
550
|
+
display: flex;
|
|
551
|
+
align-items: flex-start;
|
|
552
|
+
flex: 1;
|
|
553
|
+
flex-wrap: wrap;
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
[part='drops'] {
|
|
557
|
+
flex: 1;
|
|
558
|
+
display: grid;
|
|
559
|
+
grid-auto-flow: column;
|
|
560
|
+
grid-auto-columns: 1fr;
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
:host([orientation='horizontal']) [part='drags'] {
|
|
564
|
+
flex-direction: row;
|
|
565
|
+
}
|
|
566
|
+
:host([orientation='horizontal']) [part='drops'] {
|
|
567
|
+
grid-auto-flow: column;
|
|
568
|
+
}
|
|
569
|
+
:host([orientation='vertical']) [part='drags'] {
|
|
570
|
+
flex-direction: column;
|
|
571
|
+
}
|
|
572
|
+
:host([orientation='vertical']) [part='drops'] {
|
|
573
|
+
grid-auto-flow: row;
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
[part='drop-list'] {
|
|
577
|
+
display: block;
|
|
578
|
+
flex: 1;
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
[part='container'] {
|
|
582
|
+
display: flex;
|
|
583
|
+
gap: 0.5rem;
|
|
584
|
+
}
|
|
585
|
+
:host(.qti-choices-top) [part='container'] {
|
|
586
|
+
flex-direction: column;
|
|
587
|
+
}
|
|
588
|
+
:host(.qti-choices-bottom) [part='container'] {
|
|
589
|
+
flex-direction: column-reverse;
|
|
590
|
+
}
|
|
591
|
+
:host(.qti-choices-left) [part='container'] {
|
|
592
|
+
flex-direction: row;
|
|
593
|
+
}
|
|
594
|
+
:host(.qti-choices-right) [part='container'] {
|
|
595
|
+
flex-direction: row-reverse;
|
|
596
|
+
}
|
|
597
|
+
`;var j=class extends O(E,"qti-simple-choice","drop-list","slot[part='drags']"){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),m` <slot name="prompt"> </slot>
|
|
598
|
+
<div part="container">
|
|
599
|
+
<slot part="drags"> </slot>
|
|
600
|
+
<div part="drops">
|
|
601
|
+
${[...Array(this.nrChoices)].map((t,r)=>m`<drop-list role="region" part="drop-list" identifier="droplist${r}"></drop-list>`)}
|
|
602
|
+
</div>
|
|
603
|
+
</div>`}toggleCorrectResponse(e,t){if(t&&e.correctResponse){let r=[],s=Array.isArray(e.correctResponse)?e.correctResponse:[e.correctResponse];s&&(r=s.map(o=>({text:o.split(" ")[0]}))),this.querySelectorAll("qti-simple-choice").forEach((o,l)=>{let c=o.getAttribute("identifier"),d=r.find(g=>g.text===c)?.text,h=this.querySelector(`qti-simple-choice[identifier="${d}"]`)?.textContent.trim();if(d&&h){if(!o.nextElementSibling?.classList.contains("correct-option")){let g=document.createElement("span");g.classList.add("correct-option"),g.textContent=h,g.style.border="1px solid var(--qti-correct)",g.style.borderRadius="4px",g.style.padding="2px 4px",g.style.display="inline-block",this.shadowRoot.querySelector(`drop-list[identifier="droplist${l}"]`).insertAdjacentElement("afterend",g)}}else this.shadowRoot.querySelector(`drop-list[identifier="droplist${l}"]`).nextElementSibling?.classList.contains("correct-option")&&o.nextElementSibling.remove()})}else this.shadowRoot.querySelectorAll(".correct-option").forEach(s=>{s.remove()})}getValue(e){return e?.map((t,r)=>`${t} droplist${r}`)||[]}getResponse(){return Array.from(this.shadowRoot.querySelectorAll("drop-list")).map(r=>{let s=r.querySelectorAll('[qti-draggable="true"]');return[...Array.from(s).map(o=>o.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"))}};j.styles=ir,n([x()],j.prototype,"nrChoices",2),n([x()],j.prototype,"correctResponses",2),n([x()],j.prototype,"showCorrectResponses",2),n([u({type:String})],j.prototype,"orientation",2),j=n([f("qti-order-interaction")],j);var X=class extends E{constructor(){super(...arguments);this._errorMessage=null;this.response=[];this._onInteractionChanged=e=>{e.stopPropagation();let t=this.convertQtiVariableJSON(e.detail.value);this.response=t,this.saveResponse(t)};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 o in a.paths)t&&(a.paths[o]=this.getResolvablePath(a.paths[o],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 s in r)if(r.hasOwnProperty(s)){let a=r[s];if(Array.isArray(a))return a.map(String);if(a!=null)return String(a)}}}return null}addHyphenatedKeys(e){let t={...e};for(let r in e)if(Object.prototype.hasOwnProperty.call(e,r)){let s=r.replace(/[A-Z]/g,a=>`-${a.toLowerCase()}`);t[s]=e[r]}return t}responseVariablesToQtiVariableJSON(e,t,r){if(t!=="single"){let s={list:{}};return s.list[r]=e,s}else{let s={base:{}};return s.base[r]=e,s}}validate(){return!0}set value(e){this._value=e.split(",")}get value(){let e=this.pci?.getResponse();return e?this.convertQtiVariableJSON(e).join(","):this._value.join(",")}set boundTo(e){let t=this.convertQtiVariableJSON(e);this._value=t,this.saveResponse(t)}get boundTo(){let e=this.responseVariablesToQtiVariableJSON(this._value,this.context?.variables?.find(r=>r.identifier===this.responseIdentifier)?.cardinality||"single",this.context?.variables?.find(r=>r.identifier===this.responseIdentifier)?.baseType||"string"),t={};return t[this.responseIdentifier]=e,t}register(e){this.pci=e,this.dom=this.querySelector("qti-interaction-markup"),this.dom||(this.dom=document.createElement("div"),this.appendChild(this.dom)),this.dom.classList.add("qti-customInteraction"),this.dom.addEventListener("qti-interaction-changed",this._onInteractionChanged),this.querySelector("properties")&&(this.querySelector("properties").style.display="none");let t={properties:this.addHyphenatedKeys({...this.dataset}),onready:r=>{this.pci=r},ondone:(r,s,a,o)=>{this.response=this.convertQtiVariableJSON(s),this.saveResponse(this.value)},responseIdentifier:this.responseIdentifier,boundTo:this.boundTo};if(e.getInstance)e.getInstance(this.dom,t,void 0);else{let s=(a=>{let o={},c=(d=>{let h={};Object.entries(d.dataset).forEach(([v,q])=>{v.includes("__")||(h[v]=q)});let g={};return Object.entries(d.dataset).forEach(([v,q])=>{let T=v.split("__");if(T.length>1){let[L,w,le]=T;g[L]=g[L]||{},g[L][w]=g[L][w]||{},g[L][w][le]=q}}),Object.entries(g).forEach(([v,q])=>{h[v]=Object.values(q)}),h})(a);for(let d in c)if(Object.prototype.hasOwnProperty.call(c,d)){let h=c[d];d==="config"?o[d]=JSON.parse(h):o[d]=h}return o})(this);e.initialize(this.customInteractionTypeIdentifier,this.dom.firstElementChild||this.dom,Object.keys(s).length?s:null)}}connectedCallback(){super.connectedCallback(),define("qtiCustomInteractionContext",()=>({register:r=>{this.register(r)},notifyReady:()=>{}}));let e=this.buildRequireConfig(),t=requirejs.config(e);requirejs.onError=function(r){throw console.error("RequireJS error:",r),r.requireType==="timeout"&&console.error("Modules that timed out:",r.requireModules),r},t(["require"],r=>{try{r([this.module],()=>{},s=>{console.error("Error loading module:",s)})}catch(s){console.error("Error in require call:",s)}})}disconnectedCallback(){super.disconnectedCallback(),requirejs.undef(this.customInteractionTypeIdentifier);let e=requirejs.s.contexts;delete e[this.customInteractionTypeIdentifier],this.removeEventListener("qti-interaction-changed",this._onInteractionChanged)}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 s=r.querySelectorAll("qti-interaction-module");for(let a of s){let o=a.getAttribute("id"),l=a.getAttribute("primary-path"),c=a.getAttribute("fallback-path");if(o&&l){let d=c?this.combineRequireResolvePaths(this.getResolvablePath(l,t),this.getResolvablePath(c,t)):this.getResolvablePath(l,t),h=e.paths[o]||[];e.paths[o]=this.combineRequireResolvePaths(h,d)}}}return e}combineRequireResolvePaths(e,t){let r=Array.isArray(e)?e:[e],s=Array.isArray(t)?t:[t];return r.concat(s).filter((a,o,l)=>l.indexOf(a)===o)}removeDoubleSlashes(e){return e.replace(/([^:]\/)\/+/g,"$1").replace(/\/\//g,"/").replace("http:/","http://").replace("https:/","https://")}render(){return m`<slot></slot>${this._errorMessage&&m`<div style="color:red">
|
|
604
|
+
<h1>Error</h1>
|
|
605
|
+
${this._errorMessage}
|
|
606
|
+
</div>`}`}};n([u({type:String,attribute:"module"})],X.prototype,"module",2),n([u({type:String,attribute:"custom-interaction-type-identifier"})],X.prototype,"customInteractionTypeIdentifier",2),n([x()],X.prototype,"_errorMessage",2),n([S({context:M,subscribe:!0}),x()],X.prototype,"context",2),n([x()],X.prototype,"response",2),X=n([f("qti-portable-custom-interaction")],X);var Ge=class extends y{render(){return m`<slot></slot>`}};Ge.styles=[b`
|
|
607
|
+
:host {
|
|
608
|
+
display: block;
|
|
609
|
+
}
|
|
610
|
+
::slotted(img) {
|
|
611
|
+
position: absolute;
|
|
612
|
+
cursor: move;
|
|
613
|
+
user-select: none;
|
|
614
|
+
left: 50%;
|
|
615
|
+
transform: translateX(-50%);
|
|
616
|
+
}
|
|
617
|
+
`];customElements.define("qti-position-object-interaction",Ge);var Ne=class extends y{render(){return m`<slot></slot>`}constructor(){super(),this.removeMoveListener=this.removeMoveListener.bind(this),this.dragElementHandler=this.dragElementHandler.bind(this)}dragElementHandler(i){i.preventDefault();let e=i.clientX-this.startX,t=i.clientY-this.startY;this.dragElement.style.left=this.dragElement.offsetLeft+e+"px",this.dragElement.style.top=this.dragElement.offsetTop+t+"px",this.startX=i.clientX,this.startY=i.clientY}firstUpdated(i){super.firstUpdated(i),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)}};Ne.styles=[b`
|
|
618
|
+
:host {
|
|
619
|
+
display: inline-block;
|
|
620
|
+
position: relative;
|
|
621
|
+
}
|
|
622
|
+
`],Ne=n([f("qti-position-object-stage")],Ne);var sr="important",mr=" !"+sr,pt=Q(class extends de{constructor(p){if(super(p),p.type!==pe.ATTRIBUTE||p.name!=="style"||p.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(p){return Object.keys(p).reduce((i,e)=>{let t=p[e];return t==null?i:i+`${e=e.includes("-")?e:e.replace(/(?:^(webkit|moz|ms|o)|)(?=[A-Z])/g,"-$&").toLowerCase()}:${t};`},"")}update(p,[i]){let{style:e}=p.element;if(this.ft===void 0)return this.ft=new Set(Object.keys(i)),this.render(i);for(let t of this.ft)i[t]==null&&(this.ft.delete(t),t.includes("-")?e.removeProperty(t):e[t]=null);for(let t in i){let r=i[t];if(r!=null){this.ft.add(t);let s=typeof r=="string"&&r.endsWith(mr);t.includes("-")||s?e.setProperty(t,s?r.slice(0,-11):r,s?sr:""):e[t]=r}}return ce}});var W=class extends E{constructor(){super(...arguments);this.maxChoices=1/0;this.minChoices=0;this.response=[];this._correctAreas=[];this._imgElement=null;this._scaleX=1;this._scaleY=1;this._imageWidthOrginal=0;this._imageHeightOrginal=0;this._onImageClick=e=>{if(!this._imgElement){console.warn("No <img> element found in <qti-select-point-interaction>");return}this.calculateScale();let t=this._imgElement.getBoundingClientRect(),r=(e.clientX-t.left)*this._scaleX,s=(e.clientY-t.top)*this._scaleY,a=`${r.toFixed()} ${s.toFixed()}`;this.maxChoices===1?this.response=[a]:(this.maxChoices===0||this.response.length<this.maxChoices)&&(this.response=[...this.response,a]),this.saveResponse(this.response)};this._onResize=()=>{this.calculateScale()}}connectedCallback(){super.connectedCallback(),window.addEventListener("resize",this._onResize)}toggleCorrectResponse(e,t){if(!t){this._correctAreas=[];return}let r=e.areaMapping,s=[];if(!r||r.areaMapEntries.length===0)if(e.correctResponse){let a=Array.isArray(e.correctResponse)?e.correctResponse:[e.correctResponse];if(a.length===0||a.find(o=>o.split(" ").length<2))return console.error("No valid correct responses found for the response variable."),null;console.warn("No area mapping found for the response variable. Using the correct responses to display the correct response but it probably won't score correct."),s=a.map(o=>({shape:"circle",coords:o.split(" ").join(",").concat(",10"),defaultValue:1,mappedValue:1}))}else{console.error("No area mapping found for the response variable.");return}else s=r.areaMapEntries;this._correctAreas=s.map(a=>({coords:a.coords,shape:a.shape}))}updated(e){super.updated(e);let t=this._imgElement;t&&e.has("_correctAreas")&&this._correctAreas.length>0&&(this.calculateScale(),this.shadowRoot.querySelectorAll("div").forEach(r=>{let s=r.dataset.coord,a=r.dataset.shape;s&&a&&ie(a,s.split(",").map(o=>+o),t,r)}))}render(){return m` <slot name="prompt"></slot>
|
|
623
|
+
<point-container>
|
|
624
|
+
${ye(this.response.filter(e=>e),e=>e,(e,t)=>{let[r,s]=e.split(" ").map(Number),a=r/(this._imageWidthOrginal||1)*100,o=s/(this._imageHeightOrginal||1)*100,l=16,c=l/(this._imageWidthOrginal||1)*100,d=l/(this._imageHeightOrginal||1)*100;return m`
|
|
625
|
+
<button
|
|
626
|
+
part="point"
|
|
627
|
+
style=${pt({pointerEvents:this.maxChoices===1?"none":"auto",position:"absolute",transform:"translate(-50%, -50%)",left:`${a}%`,top:`${o}%`,width:`min(${c}%, 1rem)`,height:`min(${d}%, 1rem)`,minWidth:`min(${c}%, 1rem)`,minHeight:`min(${d}%, 1rem)`,borderRadius:"50%",background:"red"})}
|
|
628
|
+
aria-label="Remove point at ${e}"
|
|
629
|
+
@click=${h=>{h.stopPropagation(),this.response=this.response.filter((g,v)=>v!==t),this.saveResponse(this.response)}}
|
|
630
|
+
></button>
|
|
631
|
+
`})}
|
|
632
|
+
${ye(this._correctAreas?.filter(e=>e),e=>e,(e,t)=>m`<div
|
|
633
|
+
style=${pt({position:"absolute",pointerEvents:"none",backgroundColor:"var(--qti-correct)",opacity:"0.5"})}
|
|
634
|
+
data-coord="${e.coords}"
|
|
635
|
+
alt=${`correct-response-${t+1}`}
|
|
636
|
+
data-shape="${e.shape}"
|
|
637
|
+
></div>`)}
|
|
638
|
+
<slot></slot>
|
|
639
|
+
</point-container>`}reset(){this.response=null}validate(){return this.response.length>=this.minChoices&&this.response.length<=this.maxChoices}calculateScale(){this._imageWidthOrginal=this._imgElement.getAttribute("width")?parseFloat(this._imgElement.getAttribute("width")):this._imgElement.naturalWidth,this._imageHeightOrginal=this._imgElement.getAttribute("height")?parseFloat(this._imgElement.getAttribute("height")):this._imgElement.naturalHeight;let e=this._imgElement.getBoundingClientRect();this._scaleX=e.width===0?1:this._imageWidthOrginal/e.width,this._scaleY=e.height===0?1:this._imageHeightOrginal/e.height}firstUpdated(){this._imgElement=this.querySelector("img"),this._imgElement?(this.calculateScale(),this._imgElement.addEventListener("click",this._onImageClick)):console.warn("No <img> element found in <qti-select-point-interaction>")}disconnectedCallback(){super.disconnectedCallback(),window.removeEventListener("resize",this._onResize),this._imgElement&&this._imgElement.removeEventListener("click",this._onImageClick)}};W.styles=[b`
|
|
640
|
+
:host {
|
|
641
|
+
display: block;
|
|
642
|
+
}
|
|
643
|
+
point-container {
|
|
644
|
+
display: block;
|
|
645
|
+
position: relative;
|
|
646
|
+
width: fit-content;
|
|
647
|
+
}
|
|
648
|
+
|
|
649
|
+
::slotted(img) {
|
|
650
|
+
max-width: 100%;
|
|
651
|
+
height: auto;
|
|
652
|
+
display: block;
|
|
653
|
+
}
|
|
654
|
+
`],n([u({type:Number,attribute:"max-choices"})],W.prototype,"maxChoices",2),n([u({type:Number,attribute:"min-choices"})],W.prototype,"minChoices",2),n([x()],W.prototype,"response",2),n([x()],W.prototype,"_correctAreas",2),W=n([f("qti-select-point-interaction")],W);var J=class extends I(y,"qti-simple-choice"){constructor(){super(...arguments);this.templateIdentifier=null;this.showHide="show";this.fixed=!1}get checked(){return this.internals.states.has("--checked")}render(){return m`<div part="ch">
|
|
655
|
+
<div part="cha"></div>
|
|
656
|
+
</div>
|
|
657
|
+
${this.marker?m`<div id="label">${this.marker}</div>`:k}
|
|
658
|
+
<slot part="slot"></slot>`}};J.styles=b`
|
|
659
|
+
:host {
|
|
660
|
+
display: flex;
|
|
661
|
+
align-items: center;
|
|
662
|
+
user-select: none;
|
|
663
|
+
}
|
|
664
|
+
slot {
|
|
665
|
+
width: 100%;
|
|
666
|
+
display: flex;
|
|
667
|
+
align-items: center;
|
|
668
|
+
}
|
|
669
|
+
[part='ch'] {
|
|
670
|
+
display: flex;
|
|
671
|
+
flex-shrink: 0;
|
|
672
|
+
align-items: center;
|
|
673
|
+
justify-content: center;
|
|
674
|
+
}
|
|
675
|
+
`,n([u({type:String,attribute:"template-identifier"})],J.prototype,"templateIdentifier",2),n([u({type:String,attribute:"show-hide"})],J.prototype,"showHide",2),n([u({type:Boolean,converter:{fromAttribute:e=>e==="true",toAttribute:e=>String(e)}})],J.prototype,"fixed",2),n([u({type:String,attribute:!1})],J.prototype,"marker",2),J=n([f("qti-simple-choice")],J);var or=b`
|
|
676
|
+
:host {
|
|
677
|
+
display: block;
|
|
678
|
+
--show-bounds: true;
|
|
679
|
+
--show-ticks: true;
|
|
680
|
+
--show-value: true;
|
|
681
|
+
}
|
|
682
|
+
|
|
683
|
+
[part='slider'] {
|
|
684
|
+
margin-left: 2rem; /* mx-8 */
|
|
685
|
+
margin-right: 2rem;
|
|
686
|
+
padding-bottom: 1rem; /* pb-4 */
|
|
687
|
+
padding-top: 1.25rem; /* pt-5 */
|
|
688
|
+
}
|
|
689
|
+
|
|
690
|
+
[part='bounds'] {
|
|
691
|
+
display: flex;
|
|
692
|
+
width: 100%;
|
|
693
|
+
justify-content: space-between;
|
|
694
|
+
margin-bottom: 0.5rem; /* mb-2 */
|
|
695
|
+
}
|
|
696
|
+
|
|
697
|
+
[part='ticks'] {
|
|
698
|
+
margin-left: 0.125rem; /* mx-0.5 */
|
|
699
|
+
margin-right: 0.125rem;
|
|
700
|
+
margin-bottom: 0.25rem; /* mb-1 */
|
|
701
|
+
height: 0.5rem; /* h-2 */
|
|
702
|
+
background: linear-gradient(to right, var(--qti-border-color) var(--qti-border-thickness), transparent 1px) repeat-x
|
|
703
|
+
0 center / calc(calc(100% - var(--qti-border-thickness)) / ((var(--max) - var(--min)) / var(--step))) 100%;
|
|
704
|
+
}
|
|
705
|
+
|
|
706
|
+
[part='rail'] {
|
|
707
|
+
display: flex;
|
|
708
|
+
align-items: center;
|
|
709
|
+
box-sizing: border-box;
|
|
710
|
+
height: 0.375rem; /* h-1.5 */
|
|
711
|
+
width: 100%;
|
|
712
|
+
cursor: pointer;
|
|
713
|
+
border-radius: 9999px; /* rounded-full */
|
|
714
|
+
border: 1px solid #d1d5db; /* border-gray-300 */
|
|
715
|
+
background-color: #e5e7eb; /* bg-gray-200 */
|
|
716
|
+
}
|
|
717
|
+
|
|
718
|
+
[part='knob'] {
|
|
719
|
+
background-color: var(--qti-bg-active);
|
|
720
|
+
border: 2px solid var(--qti-border-active);
|
|
721
|
+
position: relative;
|
|
722
|
+
height: 1rem; /* h-4 */
|
|
723
|
+
width: 1rem; /* w-4 */
|
|
724
|
+
transform-origin: center;
|
|
725
|
+
transform: translateX(-50%);
|
|
726
|
+
cursor: pointer;
|
|
727
|
+
border-radius: 9999px; /* rounded-full */
|
|
728
|
+
left: var(--value-percentage);
|
|
729
|
+
}
|
|
730
|
+
[part='knob-correct'] {
|
|
731
|
+
background-color: var(--qti-correct-light);
|
|
732
|
+
border: 2px solid var(--qti-correct);
|
|
733
|
+
position: relative;
|
|
734
|
+
height: 1rem; /* h-4 */
|
|
735
|
+
width: 1rem; /* w-4 */
|
|
736
|
+
transform-origin: center;
|
|
737
|
+
transform: translateX(-50%);
|
|
738
|
+
cursor: pointer;
|
|
739
|
+
border-radius: 9999px; /* rounded-full */
|
|
740
|
+
left: var(--value-percentage-correct);
|
|
741
|
+
}
|
|
742
|
+
|
|
743
|
+
[part='value'] {
|
|
744
|
+
position: absolute;
|
|
745
|
+
bottom: 2rem; /* bottom-8 */
|
|
746
|
+
left: 0.5rem; /* left-2 */
|
|
747
|
+
transform: translateX(-50%);
|
|
748
|
+
cursor: pointer;
|
|
749
|
+
border-radius: 0.25rem; /* rounded */
|
|
750
|
+
background-color: #f3f4f6; /* bg-gray-100 */
|
|
751
|
+
padding: 0.25rem 0.5rem; /* px-2 py-1 */
|
|
752
|
+
text-align: center;
|
|
753
|
+
color: #6b7280; /* text-gray-500 */
|
|
754
|
+
}
|
|
755
|
+
`;var K=class extends E{constructor(){super(...arguments);this._value=0;this._correctResponseNumber=null;this.min=0;this.max=100;this.step=1}validate(){return!0}connectedCallback(){super.connectedCallback(),this._updateValue(this.min),this.setAttribute("tabindex","0"),this.setAttribute("role","slider")}get response(){return this._value.toString()}set response(e){let t=parseInt(e,10);isNaN(t)||this._updateValue(t)}toggleCorrectResponse(e,t){if(t){this._correctResponse=e.correctResponse.toString();let r=parseFloat(e.correctResponse.toString());if(isNaN(r))this._correctResponseNumber=null;else{this._correctResponseNumber=r;let s=(this._correctResponseNumber-this.min)/(this.max-this.min)*100;this.style.setProperty("--value-percentage-correct",`${s}%`)}}else this._correctResponseNumber=null;this.requestUpdate()}_updateValue(e){let t=this._value;if(this._value=Math.min(this.max,Math.max(this.min,e)),this._value===t)return;let r=(this._value-this.min)/(this.max-this.min)*100;this.style.setProperty("--value-percentage",`${r}%`),this._internals.setFormValue(this.value),this.saveResponse(this.response),this.requestUpdate()}render(){return m`
|
|
756
|
+
<slot name="prompt"></slot>
|
|
757
|
+
<div id="slider" part="slider">
|
|
758
|
+
<div id="bounds" part="bounds">
|
|
759
|
+
<div>${this.min}</div>
|
|
760
|
+
<div>${this.max}</div>
|
|
761
|
+
</div>
|
|
762
|
+
|
|
763
|
+
<div id="ticks" part="ticks"></div>
|
|
764
|
+
|
|
765
|
+
<div id="rail" part="rail" @mousedown=${this._onMouseDown} @touchstart=${this._onTouchStart}>
|
|
766
|
+
<div id="knob" part="knob">
|
|
767
|
+
<div id="value" part="value">${this.response}</div>
|
|
768
|
+
</div>
|
|
769
|
+
|
|
770
|
+
${this._correctResponseNumber!==null?m`
|
|
771
|
+
<div id="knob-correct" part="knob-correct">
|
|
772
|
+
<div id="value" part="value">${this._correctResponseNumber}</div>
|
|
773
|
+
</div>
|
|
774
|
+
`:null}
|
|
775
|
+
</div>
|
|
776
|
+
</div>
|
|
777
|
+
`}_onMouseDown(e){this._startDrag(e.pageX);let t=s=>this._onDrag(s.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=s=>this._onDrag(s.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,s=Math.min(1,Math.max(0,r/t.width)),a=this.min+Math.round(s*(this.max-this.min)/this.step)*this.step;this._updateValue(a)}_onDragEnd(){this.dispatchEvent(new Event("change",{bubbles:!0}))}};K.styles=or,n([je("#rail")],K.prototype,"_rail",2),n([u({type:Number,attribute:"lower-bound"})],K.prototype,"min",2),n([u({type:Number,attribute:"upper-bound"})],K.prototype,"max",2),n([u({type:Number,attribute:"step"})],K.prototype,"step",2),K=n([f("qti-slider-interaction")],K);var nr=()=>new ut,ut=class{},dt=new WeakMap,Ia=Q(class extends Bt{render(p){return k}update(p,[i]){let e=i!==this.Y;return e&&this.Y!==void 0&&this.rt(void 0),(e||this.lt!==this.ct)&&(this.Y=i,this.ht=p.options?.host,this.rt(this.ct=p.element)),k}rt(p){if(this.isConnected||(p=void 0),typeof this.Y=="function"){let i=this.ht??globalThis,e=dt.get(i);e===void 0&&(e=new WeakMap,dt.set(i,e)),e.get(this.Y)!==void 0&&this.Y.call(this.ht,void 0),e.set(this.Y,p),p!==void 0&&this.Y.call(this.ht,p)}else this.Y.value=p}get lt(){return typeof this.Y=="function"?dt.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 ar=b`
|
|
778
|
+
:host {
|
|
779
|
+
display: inline-block;
|
|
780
|
+
}
|
|
781
|
+
[part='correct'] {
|
|
782
|
+
position: absolute;
|
|
783
|
+
width: 100%;
|
|
784
|
+
}
|
|
785
|
+
:host(.qti-input-width-1) [part='input'] {
|
|
786
|
+
width: 1.1rem;
|
|
787
|
+
min-width: 1.1rem;
|
|
788
|
+
}
|
|
789
|
+
|
|
790
|
+
:host(.qti-input-width-2) [part='input'] {
|
|
791
|
+
width: 2.3rem;
|
|
792
|
+
min-width: 2.3rem;
|
|
793
|
+
}
|
|
794
|
+
|
|
795
|
+
:host(.qti-input-width-3) [part='input'] {
|
|
796
|
+
width: 3.3rem;
|
|
797
|
+
min-width: 3.3rem;
|
|
798
|
+
}
|
|
799
|
+
|
|
800
|
+
:host(.qti-input-width-4) [part='input'] {
|
|
801
|
+
width: 4.2rem;
|
|
802
|
+
min-width: 4.2rem;
|
|
803
|
+
}
|
|
804
|
+
|
|
805
|
+
:host(.qti-input-width-6) [part='input'] {
|
|
806
|
+
width: 6.6rem;
|
|
807
|
+
min-width: 6.6rem;
|
|
808
|
+
}
|
|
809
|
+
|
|
810
|
+
:host(.qti-input-width-10) [part='input'] {
|
|
811
|
+
width: 8rem;
|
|
812
|
+
min-width: 8rem;
|
|
813
|
+
}
|
|
814
|
+
|
|
815
|
+
:host(.qti-input-width-15) [part='input'] {
|
|
816
|
+
width: 12rem;
|
|
817
|
+
min-width: 12rem;
|
|
818
|
+
}
|
|
819
|
+
|
|
820
|
+
:host(.qti-input-width-20) [part='input'] {
|
|
821
|
+
width: 17rem;
|
|
822
|
+
min-width: 17rem;
|
|
823
|
+
}
|
|
824
|
+
|
|
825
|
+
:host(.qti-input-width-25) [part='input'] {
|
|
826
|
+
width: 20rem;
|
|
827
|
+
min-width: 20rem;
|
|
828
|
+
}
|
|
829
|
+
|
|
830
|
+
:host(.qti-input-width-30) [part='input'] {
|
|
831
|
+
width: 24rem;
|
|
832
|
+
min-width: 24rem;
|
|
833
|
+
}
|
|
834
|
+
|
|
835
|
+
:host(.qti-input-width-35) [part='input'] {
|
|
836
|
+
width: 28rem;
|
|
837
|
+
min-width: 28rem;
|
|
838
|
+
}
|
|
839
|
+
|
|
840
|
+
:host(.qti-input-width-40) [part='input'] {
|
|
841
|
+
width: 32rem;
|
|
842
|
+
min-width: 32rem;
|
|
843
|
+
}
|
|
844
|
+
|
|
845
|
+
:host(.qti-input-width-45) [part='input'] {
|
|
846
|
+
width: 36rem;
|
|
847
|
+
min-width: 36rem;
|
|
848
|
+
}
|
|
849
|
+
|
|
850
|
+
:host(.qti-input-width-50) [part='input'] {
|
|
851
|
+
width: 40rem;
|
|
852
|
+
min-width: 40rem;
|
|
853
|
+
}
|
|
854
|
+
|
|
855
|
+
:host(.qti-input-width-72) [part='input'] {
|
|
856
|
+
width: 57rem;
|
|
857
|
+
min-width: 57rem;
|
|
858
|
+
}
|
|
859
|
+
`;var $=class extends E{constructor(){super(...arguments);this.inputRef=nr();this.response=null;this._handleValueChange=()=>{this._internals.setFormValue(this.value),this.validate()}}get value(){return this.response||null}set value(e){this.response=e||null}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.response!==""&&e.checkValidity()}toggleCorrectResponse(e,t){let r=this.shadowRoot.querySelector("input");if(t&&e.correctResponse){let s=e.correctResponse.toString();if(s){if(!r.nextElementSibling?.classList.contains("correct-option")){let a=document.createElement("span");a.classList.add("correct-option"),a.textContent=s,a.style.border="1px solid var(--qti-correct)",a.style.borderRadius="4px",a.style.padding="2px 4px",a.style.margin="4px",a.style.display="inline-block",r.insertAdjacentElement("afterend",a)}}else r.nextElementSibling?.classList.contains("correct-option")&&r.nextElementSibling?.remove()}else r.nextElementSibling?.remove()}render(){return m`
|
|
860
|
+
<input
|
|
861
|
+
part="input"
|
|
862
|
+
name="${this.responseIdentifier}"
|
|
863
|
+
spellcheck="false"
|
|
864
|
+
autocomplete="off"
|
|
865
|
+
@blur="${e=>{this.reportValidity()}}"
|
|
866
|
+
@keydown="${e=>e.stopImmediatePropagation()}"
|
|
867
|
+
@keyup="${this.textChanged}"
|
|
868
|
+
@change="${this.textChanged}"
|
|
869
|
+
type="${this.patternMask=="[0-9]*"?"number":"text"}"
|
|
870
|
+
placeholder="${H(this.placeholderText?this.placeholderText:void 0)}"
|
|
871
|
+
.value="${this.response}"
|
|
872
|
+
pattern="${H(this.patternMask?this.patternMask:void 0)}"
|
|
873
|
+
maxlength=${1e3}
|
|
874
|
+
?disabled="${this.disabled}"
|
|
875
|
+
?readonly="${this.readonly}"
|
|
876
|
+
/>
|
|
877
|
+
<div part="correct">${this._correctResponse}</div>
|
|
878
|
+
`}textChanged(e){if(this.disabled||this.readonly)return;let t=e.target;this.setEmptyAttribute(t.value),this.response!==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.response=""}setEmptyAttribute(e){this.setAttribute("empty",e===""?"true":"false")}};$.styles=ar,n([u({type:Number,attribute:"expected-length"})],$.prototype,"expectedLength",2),n([u({type:String,attribute:"pattern-mask"})],$.prototype,"patternMask",2),n([u({type:String,attribute:"placeholder-text"})],$.prototype,"placeholderText",2),n([u({type:String,attribute:"data-patternmask-message"})],$.prototype,"dataPatternmaskMessage",2),n([x()],$.prototype,"response",2),n([R("response",{waitUntilFirstUpdate:!0})],$.prototype,"_handleValueChange",2),$=n([f("qti-text-entry-interaction")],$);var He=class extends E{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 response(){return this._base64}set response(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{...E.properties}}render(){return m`
|
|
879
|
+
<div>
|
|
880
|
+
<slot name="prompt"></slot>
|
|
881
|
+
<input type="file" @change="${this._onFileChange}" ?disabled="${this.disabled}" ?readonly="${this.readonly}" />
|
|
882
|
+
</div>
|
|
883
|
+
`}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 s=new FileReader;s.onload=()=>t(s.result),s.onerror=()=>r(s.error),s.readAsDataURL(e)})}};He.styles=[b`
|
|
884
|
+
:host {
|
|
885
|
+
display: block;
|
|
886
|
+
margin: 1em 0;
|
|
887
|
+
}
|
|
888
|
+
input[type='file'] {
|
|
889
|
+
display: block;
|
|
890
|
+
margin-top: 0.5em;
|
|
891
|
+
}
|
|
892
|
+
`],He=n([f("qti-upload-interaction")],He);var lr=b`
|
|
893
|
+
:host {
|
|
894
|
+
display: block;
|
|
895
|
+
}
|
|
896
|
+
`;var Oe=class extends y{render(){return m`<slot part="qti-rubric-blocks" name="qti-rubric-block"></slot><slot></slot>`}};Oe.styles=lr,Oe=n([f("qti-item-body")],Oe);var Ie=class extends y{render(){return m`<slot></slot>`}process(){let i=new mt,e=[...this.children];i.process(e)}};Ie.styles=[b`
|
|
897
|
+
:host {
|
|
898
|
+
display: none;
|
|
899
|
+
}
|
|
900
|
+
`],Ie=n([f("qti-outcome-processing")],Ie);var mt=class{process(i){for(let e of i)e.process()}};var Ze=class extends y{render(){return m`<slot></slot>`}connectedCallback(){this.parentElement.tagName.endsWith("INTERACTION")&&this.setAttribute("slot","prompt")}};Ze=n([f("qti-prompt")],Ze);var cr=`<qti-response-processing>
|
|
901
|
+
<qti-response-condition>
|
|
902
|
+
<qti-response-if>
|
|
903
|
+
<qti-match>
|
|
904
|
+
<qti-variable identifier="RESPONSE"></qti-variable>
|
|
905
|
+
<qti-correct identifier="RESPONSE"></qti-correct>
|
|
906
|
+
</qti-match>
|
|
907
|
+
<qti-set-outcome-value identifier="SCORE">
|
|
908
|
+
<qti-base-value base-type="float">1</qti-base-value>
|
|
909
|
+
</qti-set-outcome-value>
|
|
910
|
+
</qti-response-if>
|
|
911
|
+
<qti-response-else>
|
|
912
|
+
<qti-set-outcome-value identifier="SCORE">
|
|
913
|
+
<qti-base-value base-type="float">0</qti-base-value>
|
|
914
|
+
</qti-set-outcome-value>
|
|
915
|
+
</qti-response-else>
|
|
916
|
+
</qti-response-condition>
|
|
917
|
+
</qti-response-processing>`,pr=`<qti-response-processing>
|
|
918
|
+
<qti-response-condition>
|
|
919
|
+
<qti-response-if>
|
|
920
|
+
<qti-is-null>
|
|
921
|
+
<qti-variable identifier="RESPONSE"></qti-variable>
|
|
922
|
+
</qti-is-null>
|
|
923
|
+
<qti-set-outcome-value identifier="SCORE">
|
|
924
|
+
<qti-base-value base-type="float">0.0</qti-base-value>
|
|
925
|
+
</qti-set-outcome-value>
|
|
926
|
+
</qti-response-if>
|
|
927
|
+
<qti-response-else>
|
|
928
|
+
<qti-set-outcome-value identifier="SCORE">
|
|
929
|
+
<qti-map-response identifier="RESPONSE"> </qti-map-response>
|
|
930
|
+
</qti-set-outcome-value>
|
|
931
|
+
</qti-response-else>
|
|
932
|
+
</qti-response-condition>
|
|
933
|
+
</qti-response-processing>`,dr=`<qti-response-processing>
|
|
934
|
+
<qti-response-condition>
|
|
935
|
+
<qti-response-if>
|
|
936
|
+
<qti-is-null>
|
|
937
|
+
<qti-variable identifier="RESPONSE"></qti-variable>
|
|
938
|
+
</qti-is-null>
|
|
939
|
+
<qti-set-outcome-value identifier="SCORE">
|
|
940
|
+
<qti-base-value base-type="float">0</qti-base-value>
|
|
941
|
+
</qti-set-outcome-value>
|
|
942
|
+
</qti-response-if>
|
|
943
|
+
<qti-response-else>
|
|
944
|
+
<qti-set-outcome-value identifier="SCORE">
|
|
945
|
+
<qti-map-response-point identifier="RESPONSE"></qti-map-response-point>
|
|
946
|
+
</qti-set-outcome-value>
|
|
947
|
+
</qti-response-else>
|
|
948
|
+
</qti-response-condition>
|
|
949
|
+
</qti-response-processing>`;var Pe=class extends y{render(){return m`<slot></slot>`}process(){if(!this.closest("qti-assessment-item"))return;let e=[...this.children];for(let t of e)t.process()}firstUpdated(i){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(pr).firstElementChild.firstElementChild);break}case"map_response_point":{this.appendChild(this.fragmentFromString(dr).firstElementChild.firstElementChild);break}case"match_correct":this.appendChild(this.fragmentFromString(cr).firstElementChild.firstElementChild);break}}}fragmentFromString(i){return document.createRange().createContextualFragment(i)}};Pe.styles=[b`
|
|
950
|
+
:host {
|
|
951
|
+
display: none;
|
|
952
|
+
}
|
|
953
|
+
`],Pe=n([f("qti-response-processing")],Pe);var F=class extends y{render(){return m`<slot></slot>`}process(){throw new Error("Not implemented")}};F=n([f("qti-rule")],F);var Fe=class extends F{get childExpression(){return this.firstElementChild}process(){let i=this.getAttribute("identifier"),e=this.context.variables.find(r=>r.identifier===i)||null,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:Ce(t)}})),t)}};n([u({type:String})],Fe.prototype,"identifier",2),n([S({context:M,subscribe:!0}),x()],Fe.prototype,"context",2);customElements.define("qti-lookup-outcome-value",Fe);var ht=class extends F{render(){return m`<slot></slot>`}process(){let i=[...this.children];for(let e=0;e<i.length;e++){let t=i[e];if(t.calculate()){t.process();return}}}};customElements.define("qti-response-condition",ht);var ft=class extends F{process(){let i=this.getAttribute("identifier");if(!i){console.warn('QtiSetOutcomeValue: Missing "identifier" attribute.');return}let e=this.firstElementChild;if(!e){console.warn("QtiSetOutcomeValue: No expression found.");return}let r=new gt(e).process();this.dispatchEvent(new CustomEvent("qti-set-outcome-value",{bubbles:!0,composed:!0,detail:{outcomeIdentifier:i,value:this.formatValue(r)}}))}formatValue(i){return Array.isArray(i)?i.map(Ce):i!==null?Ce(i):null}},gt=class{constructor(i){this.expression=i}process(){let i=this.expression.calculate()??null;return i===null&&console.warn("QtiSetOutcomeValueRule: Evaluated value is null."),Array.isArray(i)?i.map(e=>e.value?e.value:e):i}};customElements.define("qti-set-outcome-value",ft);var ze=class extends y{render(){return m`<slot></slot>`}calculate(){return!0}getSubRules(){return[...this.children]}process(){let i=this.getSubRules();for(let e=0;e<i.length;e++)i[e].process()}};customElements.define("qti-response-else",ze);var Be=class extends ze{calculate(){return this.firstElementChild.calculate()}getSubRules(){let i=[];for(let e=1;e<this.children.length;e++)i.push(this.children[e]);return i}};customElements.define("qti-response-if",Be);var bt=class extends Be{render(){return m`${super.render()}`}};customElements.define("qti-response-else-if",bt);var Qe=class extends hr(N){calculate(){return this.calculateChildren(Array.from(this.children))}};Qe=n([f("qti-and")],Qe);function hr(p){return class extends p{calculateChildren(e){return e.map(r=>{let s=r;if(!s.calculate)return console.error("Element doesn't implement QtiConditionExpression"),null;let a=s.calculate(),o=!1;if(typeof a=="string")if(a==="true")o=!0;else if(a==="false")o=!1;else return console.error("unexpected val in qti-or, expected boolean"),null;else typeof a=="boolean"&&(o=a);return o}).every(r=>typeof r=="boolean"&&r)}}}var et=class extends C{constructor(){super(...arguments);this.baseType="string"}getResult(){return this.textContent.trim()}};n([u({type:String,attribute:"base-type"})],et.prototype,"baseType",2);customElements.define("qti-base-value",et);var vt=class extends N{getResult(){let i=this.getVariables();if(this.children.length===2){let e=i[0],t=i[1];if(e.baseType==="directedPair"&&t.baseType==="directedPair"&&e.cardinality==="multiple"){let r=e.value,s=t.value;return r.filter(l=>s.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",vt);var yt=class extends C{get interpretation(){return this.getAttribute("interpretation")||""}getResult(){let i=this.getAttribute("identifier")||"",e=this.context.variables.find(t=>t.identifier===i)||null;return e.cardinality!=="single"?e.correctResponse.length>0?e.correctResponse[0]:"":e.correctResponse}};customElements.define("qti-correct",yt);var tt=class extends C{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 s=parseFloat(t.value),a=parseFloat(r.value);if(!isNaN(s)&&!isNaN(a))return this.roundingMode==="significantFigures"?s.toPrecision(this.figures)===a.toPrecision(this.figures):Math.round(s*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: ${s}, ${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([u({type:String})],tt.prototype,"roundingMode",2);customElements.define("qti-equal-rounded",tt);var _=class{static isPointInArea(i,e,t){if(t!=="point")return console.warn(`Base type ${t} is not supported for point area mapping.`),!1;let[r,s]=i.split(" ").map(Number),[a,...o]=e.split(","),l=o.map(Number);switch(a.toLowerCase()){case"circle":case"default":{let[c,d,h]=l;return l.length!==3?(console.warn(`Invalid circle definition: ${e}`),!1):Math.sqrt((r-c)**2+(s-d)**2)<=h}case"rect":{let[c,d,h,g]=l;return l.length!==4?(console.warn(`Invalid rectangle definition: ${e}`),!1):r>=c&&r<=h&&s>=d&&s<=g}case"ellipse":{let[c,d,h,g]=l;if(l.length!==4)return console.warn(`Invalid ellipse definition: ${e}`),!1;let v=(r-c)**2/h**2,q=(s-d)**2/g**2;return v+q<=1}case"poly":{if(l.length<6||l.length%2!==0)return console.warn(`Invalid polygon definition: ${e}`),!1;let c=[];for(let d=0;d<l.length;d+=2)c.push({x:l[d],y:l[d+1]});return this.isPointInPolygon({x:r,y:s},c)}default:return console.warn(`Unsupported shape type: ${a}`),!1}}static isPointInPolygon(i,e){let t=!1;for(let r=0,s=e.length-1;r<e.length;s=r++){let a=e[r].x,o=e[r].y,l=e[s].x,c=e[s].y;o>i.y!=c>i.y&&i.x<(l-a)*(i.y-o)/(c-o)+a&&(t=!t)}return t}static compareSingleValues(i,e,t){switch(t){case"identifier":case"string":return i===e;case"integer":{let r=parseInt(i,10),s=parseInt(e,10);if(!isNaN(r)&&!isNaN(s))return r===s;console.error(`Cannot convert ${i} and/or ${e} to int.`);break}case"float":{let r=parseFloat(i),s=parseFloat(e);if(!isNaN(r)&&!isNaN(s))return r===s;console.error(`couldn't convert ${i} and/or ${e} to float.`);break}case"pair":case"directedPair":{let r=i.split(" ").sort(),s=e.split(" ").sort();if(r.length===2&&s.length===2)return t==="pair"&&(r.sort(),s.sort()),r.join(" ")===s.join(" ");console.error(`compared two pair but one of the values does not have 2 values: 1: ${i} 2: ${e}`);break}}return!1}};var rt=class extends C{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):_.compareSingleValues(t.value,r.value,t.baseType)}return console.error("unexpected number of children in qti-equal"),null}};n([u({type:String})],rt.prototype,"toleranceMode",2);customElements.define("qti-equal",rt);var xt=class extends C{getResult(){if(this.children.length===2){let i=this.getVariables(),e=i[0],t=i[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",xt);var Et=class extends N{getResult(){if(this.children.length===2){let i=this.getVariables(),e=i[0],t=i[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",Et);var Ct=class extends C{getResult(){if(this.children.length===1){let i=this.getVariables();if(!i)return!0;let e=i[0].value;return e==null||e==null||e===""}return console.error("unexpected number of children in qti Null"),null}};customElements.define("qti-is-null",Ct);var qt=class extends C{getResult(){if(this.children.length===2){let i=this.getVariables(),e=i[0],t=i[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",qt);var wt=class extends N{getResult(){if(this.children.length===2){let i=this.getVariables(),e=i[0],t=i[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",wt);var it=class extends C{getResult(){let i=this.context.variables.find(s=>s.identifier===this.identifier);if(!i||!i.mapping)return console.error(`Response ${this.identifier} can not be found`),null;let e=i.mapping,t=Array.isArray(i.value)?i.value:[i.value],r=0;for(let s of t){let a=e.mapEntries.filter(l=>i.baseType==="string"&&!l.caseSensitive?_.compareSingleValues(l.mapKey.toLowerCase(),s.toLowerCase(),i.baseType):_.compareSingleValues(l.mapKey,s,i.baseType)),o=a.reduce((l,c)=>l.mappedValue>c.mappedValue?l:c,a.length>0?a[0]:{mapKey:null,mappedValue:null});o===null||o.mappedValue==null?r+=e.defaultValue:r+=o.mappedValue}return e?.lowerBound!==null&&e?.lowerBound!==void 0&&(r=Math.max(e.lowerBound,r)),e?.upperBound!==null&&e?.upperBound!==void 0&&(r=Math.min(e.upperBound,r)),r}};n([u({type:String})],it.prototype,"identifier",2);customElements.define("qti-map-response",it);var G=class extends y{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(s=>s.identifier===t)||null}case"qti-multiple":{let r=e.getResult();return r.length>0?{identifier:"",baseType:r[0].baseType,value:r.map(s=>s.value),cardinality:"multiple",type:"response"}:null}case"qti-correct":{let t=e.getAttribute("identifier")||"",r=this.context.variables.find(s=>s.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 m`<pre>${JSON.stringify(this.result,null,2)}</pre>
|
|
954
|
+
<slot></slot>`}calculate(){return this.result=this.getResult(),this.result}getResult(){throw new Error("Not implemented")}};G.styles=b`
|
|
955
|
+
slot {
|
|
956
|
+
display: none;
|
|
957
|
+
}
|
|
958
|
+
`,n([x()],G.prototype,"result",2),n([S({context:M,subscribe:!0}),x()],G.prototype,"context",2);var st=class extends G{getResult(){let i=this.context.variables.find(a=>a.identifier===this.identifier);if(!i)return console.warn(`Response ${this.identifier} cannot be found`),null;let e=i.areaMapping;if(!e)return console.warn(`Area mapping not found for response ${this.identifier}`),null;let t=Array.isArray(i.value)?i.value:[i.value];if(!t||t.length===0)return console.warn(`No candidate responses for response ${this.identifier}`),null;let r=0,s=new Set;for(let a of t)for(let o of e.areaMapEntries){if(s.has(o.coords))continue;_.isPointInArea(a,`${o.shape},${o.coords}`,i.baseType)&&(r+=o.mappedValue??0,s.add(o.coords))}return s.size<t.length&&(r+=e.defaultValue),e.lowerBound!=null&&(r=Math.max(e.lowerBound,r)),e.upperBound!=null&&(r=Math.min(e.upperBound,r)),r}};n([u({type:String})],st.prototype,"identifier",2);customElements.define("qti-map-response-point",st);var Tt=class p extends C{getResult(){if(this.children.length===2){let i=this.getVariables(),e=i[0],t=i[1];return p.match(e,t)}return console.error("unexpected number of children in match"),null}static match(i,e){switch(e.cardinality){case"single":return i.value===null?!1:Array.isArray(i.value)||Array.isArray(e.value)?(console.error("unexpected cardinality in qti match"),!1):_.compareSingleValues(i.value?.toString(),e.value.toString(),e.baseType);case"ordered":{if(!Array.isArray(i.value)||!Array.isArray(e.value))return console.error("unexpected cardinality in qti match"),!1;if(i.value.length!==e.value.length)return!1;for(let t=0;t<i.value.length;t++)if(!_.compareSingleValues(e.value[t],i.value[t],e.baseType))return!1;return!0}case"multiple":{if(!Array.isArray(i.value)||!Array.isArray(e.value))return console.error("unexpected cardinality in qti match"),!1;if(i.value.length!==e.value.length)return!1;let t=0;for(let r of e.value){let s=null,a=[...i.value];for(let o of a)if(_.compareSingleValues(r,o,e.baseType)){s=o;break}if(s!==null)a.splice(a.indexOf(s),1);else return!1;t++}return!0}default:return console.error("unexpected cardinality in qti match"),!1}}};customElements.define("qti-match",Tt);var Mt=class extends C{getResult(){let i=this.getVariables();this.children.length!==2&&console.warn("The member operator takes two sub-expressions");let[e,t]=i;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",Mt);var Rt=class extends C{getResult(){let i=this.getVariables();if(i.length===0)return console.error("unexpected number of children in qti multiple"),null;for(let e of i)if(e.cardinality!=="multiple"&&e.cardinality!=="single")return console.error("unexpected cardinality in qti multiple"),[];return i}};customElements.define("qti-multiple",Rt);var St=class extends C{render(){return m`${super.render()}`}getResult(){return!this.firstElementChild.calculate()}};customElements.define("qti-not",St);var _t=class extends N{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(),s=!1;if(typeof r=="string")if(r==="true")s=!0;else if(r==="false")s=!1;else return console.error("unexpected val in qti-or, expected boolean"),null;else typeof r=="boolean"&&(s=r);return s}).some(e=>typeof e=="boolean"&&e)}};customElements.define("qti-or",_t);var kt=class extends C{getResult(){let i=this.getVariables();if(i.length===0)return console.error("unexpected number of children in qti multiple"),null;for(let e of i)if(e.cardinality!=="ordered"&&e.cardinality!=="single")return console.error("unexpected cardinality in qti ordered"),[];return i}};customElements.define("qti-ordered",kt);var Ye=class extends y{render(){let i=this.context?.variables.find(e=>e.identifier===this.identifier)?.value;return i===null?k:m`${JSON.stringify(i,null,2)}`}calculate(){return this.context.variables.find(e=>e.identifier===this.identifier)||null}};n([u({type:String})],Ye.prototype,"identifier",2),n([S({context:M,subscribe:!0}),x()],Ye.prototype,"context",2);customElements.define("qti-printed-variable",Ye);var At=class extends C{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",At);var ot=class extends fr(C){getResult(){return this.calculateChildren(Array.from(this.children))}};function fr(p){return class extends p{calculateChildren(e){let t=e.map(r=>{if(!r.calculate)return console.error("Element doesn't implement QtiConditionExpression"),null;let s=r.calculate();return Number.isNaN(s)?(console.error("Unexpected value in qti-subtract, expected number"),null):Number(s)});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",ot);var nt=class extends C{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 s=this.caseSensitive==="true"?t.value:t.value.toLowerCase(),a=this.caseSensitive==="true"?r.value:r.value.toLowerCase();return _.compareSingleValues(s,a,t.baseType)}return console.error("unexpected number of children in qti-string-match"),null}};n([u({type:String,attribute:"case-sensitive"})],nt.prototype,"caseSensitive",2);customElements.define("qti-string-match",nt);var Lt=class extends C{constructor(){super(),this._expression=new Vt(Array.from(this.children))}getResult(){return this._expression.calculate()}},Vt=class{constructor(i){this.expressions=i}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",Lt);var Dt=class extends C{getResult(){let i=this.getAttribute("identifier");return this.context.variables.find(t=>t.identifier===i).value}};customElements.define("qti-variable",Dt);var $t=class extends C{getResult(){let i=this.getVariables();if(i.length===1){let e=i[0].value;if(Array.isArray(e)){let t=Math.floor(Math.random()*e.length);return e[t]}return e}return console.error("unexpected number of children in match"),null}};customElements.define("qti-random",$t);var Nt=class extends G{getResult(){if(this.children.length===2){let i=this.getVariables(),e=i[0],t=i[1];return e.cardinality!=="single"||!Array.isArray(t.value)?(console.error("unexpected cardinality in qti equal"),null):i[0].baseType!==i[1].baseType?(console.error("The baseType of the two variables is different"),null):t.value.filter(s=>!e.value.includes(s))}}};customElements.define("qti-delete",Nt);var at=class extends y{render(){return m`<slot></slot>`}};at=n([f("qti-content-body")],at);var z=class extends y{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 m`<slot></slot>`}};z.styles=b`
|
|
959
|
+
:host {
|
|
960
|
+
display: block;
|
|
961
|
+
}
|
|
962
|
+
`,n([u({type:String})],z.prototype,"id",2),n([u({type:String})],z.prototype,"use",2),n([u({type:String})],z.prototype,"view",2),n([u({type:String,attribute:"class"})],z.prototype,"classNames",2),n([R("classNames",{waitUntilFirstUpdate:!0})],z.prototype,"handleclassNamesChange",1),z=n([f("qti-rubric-block")],z);var lt=class extends y{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 s=this.minifyCss(r);this.styleElement=document.createElement("style"),this.styleElement.media="screen",this.styleElement.textContent=`@scope {${s}}`,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()}};lt=n([f("qti-stylesheet")],lt);var ne=class extends y{render(){return m`<slot></slot>`}defaultValues(i){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||i.cardinality==="multiple"||i.cardinality==="ordered"?t:t[0]}};ne=n([f("qti-variabledeclaration")],ne);var B=class extends ne{constructor(){super(...arguments);this.externalScored=null}render(){let e=this.itemContext?.variables.find(t=>t.identifier===this.identifier)?.value;return m`${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 s=parseInt(r.getAttribute("source-value")),a=parseInt(r.getAttribute("target-value"));(isNaN(s)||isNaN(a))&&console.error("source-value or target-value is not a number in qti-interpolation-table-entry"),t.set(s,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),(e.value===null||e.value==null)&&(e.baseType==="integer"||e.baseType==="float")&&(e.value="0"),this.dispatchEvent(new CustomEvent("qti-register-variable",{bubbles:!0,composed:!0,detail:{variable:e}}))}};B.styles=[b`
|
|
963
|
+
:host {
|
|
964
|
+
display: none;
|
|
965
|
+
}
|
|
966
|
+
`],n([u({type:String,attribute:"base-type"})],B.prototype,"baseType",2),n([u({type:String,attribute:"external-scored"})],B.prototype,"externalScored",2),n([u({type:String})],B.prototype,"identifier",2),n([u({type:String})],B.prototype,"cardinality",2),n([S({context:M,subscribe:!0}),x()],B.prototype,"itemContext",2),B=n([f("qti-outcome-declaration")],B);var Z=class extends ne{render(){let i=this.itemContext?.variables.find(e=>e.identifier===this.identifier)?.value;return m`${JSON.stringify(i,null,2)}`}connectedCallback(){super.connectedCallback();let i={baseType:this.baseType,identifier:this.identifier,correctResponse:this.correctResponse,cardinality:this.cardinality||"single",mapping:this.mapping,areaMapping:this.areaMapping,value:null,type:"response",candidateResponse:null};i.value=this.defaultValues(i),this.dispatchEvent(new CustomEvent("qti-register-variable",{bubbles:!0,composed:!0,detail:{variable:i}}))}get correctResponse(){let i,e=this.querySelector("qti-correct-response");if(e){let t=e.querySelectorAll("qti-value");if(this.cardinality==="single"&&t.length>0)i=t[0].textContent.trim(),t[0].remove();else if(this.cardinality!=="single"){i=[];for(let r=0;r<t.length;r++)i.push(t[r].textContent.trim()),t[r].remove()}}return i}get mapping(){let i=this.querySelector("qti-mapping"),e=parseInt(i?.getAttribute("lower-bound")),t=parseInt(i?.getAttribute("upper-bound"));return{defaultValue:Number(i?.getAttribute("default-value"))||0,lowerBound:isNaN(e)?null:e,upperBound:isNaN(t)?null:t,mapEntries:Array.from(i?.querySelectorAll("qti-map-entry")||[]).map(s=>({mapKey:s.getAttribute("map-key")||"",mappedValue:Number(s.getAttribute("mapped-value"))||0,caseSensitive:s.hasAttribute("case-sensitive")?s.getAttribute("case-sensitive")!=="false":!0}))}}get areaMapping(){let i=this.querySelector("qti-area-mapping"),e=Number(i?.getAttribute("default-value"))||0,t=parseInt(i?.getAttribute("lower-bound")),r=parseInt(i?.getAttribute("upper-bound")),s=Array.from(i?.querySelectorAll("qti-area-map-entry")||[]).map(a=>({shape:a.getAttribute("shape")||"default",coords:a.getAttribute("coords")||"",mappedValue:Number(a.getAttribute("mapped-value"))||0,defaultValue:Number(a.getAttribute("default-value"))||0}));return{defaultValue:e,lowerBound:isNaN(t)?null:t,upperBound:isNaN(r)?null:r,areaMapEntries:s}}};Z.styles=[b`
|
|
967
|
+
:host {
|
|
968
|
+
display: none;
|
|
969
|
+
}
|
|
970
|
+
`],n([u({type:String,attribute:"base-type"})],Z.prototype,"baseType",2),n([u({type:String})],Z.prototype,"identifier",2),n([u({type:String})],Z.prototype,"cardinality",2),n([S({context:M,subscribe:!0}),x()],Z.prototype,"itemContext",2),Z=n([f("qti-response-declaration")],Z);export{V as a,me as b,Je as c,Ee as d,we as e,Te as f,Me as g,Re as h,he as i,fe as j,Y as k,re as l,A as m,ge as n,Se as o,be as p,ve as q,P as r,_e as s,ke as t,ae as u,Ae as v,Ke as w,Le as x,se as y,De as z,oe as A,U as B,$e as C,j as D,X as E,Ge as F,Ne as G,W as H,J as I,K as J,$ as K,He as L,Oe as M,Ie as N,mt as O,Ze as P,Pe as Q,F as R,Fe as S,ht as T,ft as U,gt as V,ze as W,Be as X,bt as Y,Qe as Z,hr as _,et as $,vt as aa,yt as ba,tt as ca,rt as da,xt as ea,Et as fa,Ct as ga,qt as ha,wt as ia,it as ja,st as ka,Tt as la,Mt as ma,Rt as na,St as oa,_t as pa,kt as qa,Ye as ra,At as sa,ot as ta,fr as ua,nt as va,Lt as wa,Vt as xa,Dt as ya,$t as za,Nt as Aa,at as Ba,z as Ca,lt as Da,B as Ea,Z as Fa};
|
|
971
|
+
/*! Bundled license information:
|
|
972
|
+
|
|
973
|
+
lit-html/node/directives/if-defined.js:
|
|
974
|
+
(**
|
|
975
|
+
* @license
|
|
976
|
+
* Copyright 2018 Google LLC
|
|
977
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
978
|
+
*)
|
|
979
|
+
|
|
980
|
+
lit-html/node/directives/repeat.js:
|
|
981
|
+
(**
|
|
982
|
+
* @license
|
|
983
|
+
* Copyright 2017 Google LLC
|
|
984
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
985
|
+
*)
|
|
986
|
+
|
|
987
|
+
lit-html/node/directives/unsafe-html.js:
|
|
988
|
+
(**
|
|
989
|
+
* @license
|
|
990
|
+
* Copyright 2017 Google LLC
|
|
991
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
992
|
+
*)
|
|
993
|
+
|
|
994
|
+
lit-html/node/directives/style-map.js:
|
|
995
|
+
(**
|
|
996
|
+
* @license
|
|
997
|
+
* Copyright 2018 Google LLC
|
|
998
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
999
|
+
*)
|
|
1000
|
+
|
|
1001
|
+
lit-html/node/directives/ref.js:
|
|
1002
|
+
(**
|
|
1003
|
+
* @license
|
|
1004
|
+
* Copyright 2020 Google LLC
|
|
1005
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
1006
|
+
*)
|
|
1007
|
+
*/
|