@citolab/qti-components 7.27.2 → 7.27.4
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/index.global.js +1 -1
- package/cdn/index.js +230 -212
- package/custom-elements.json +4214 -1176
- package/dist/base.d.ts +3 -2
- package/dist/base.js +1 -1
- package/dist/{chunk-TZMDZQFG.js → chunk-3HJE3KRM.js} +469 -221
- package/dist/chunk-3HJE3KRM.js.map +1 -0
- package/dist/{chunk-75ME6QG5.js → chunk-424AWLRU.js} +18 -18
- package/dist/{chunk-QUWFDFGZ.js → chunk-FFESMKSD.js} +277 -21
- package/dist/chunk-FFESMKSD.js.map +1 -0
- package/dist/{chunk-G5ZUC3OT.js → chunk-LQZCSHN5.js} +23 -23
- package/dist/chunk-LQZCSHN5.js.map +1 -0
- package/dist/{chunk-DG5TP35K.js → chunk-N7S3GNUP.js} +5 -5
- package/dist/{chunk-DG5TP35K.js.map → chunk-N7S3GNUP.js.map} +1 -1
- package/dist/{chunk-RXRKP6P7.js → chunk-SX63OCDZ.js} +2 -2
- package/dist/{chunk-K7HR6ZAY.js → chunk-UKPCQKPF.js} +2 -2
- package/dist/chunk-UKPCQKPF.js.map +1 -0
- package/dist/{chunk-KY3II5OX.js → chunk-XYTJOQRZ.js} +240 -202
- package/dist/chunk-XYTJOQRZ.js.map +1 -0
- package/dist/{chunk-GG36UR7F.js → chunk-YLIYPNMK.js} +1004 -12
- package/dist/chunk-YLIYPNMK.js.map +1 -0
- package/dist/{chunk-TORB5UN2.js → chunk-Z2SUBRH5.js} +304 -243
- package/dist/chunk-Z2SUBRH5.js.map +1 -0
- package/dist/elements.d.ts +67 -2
- package/dist/elements.js +10 -6
- package/dist/index.d.ts +5 -4
- package/dist/index.js +55 -11
- package/dist/interactions.d.ts +8 -7
- package/dist/interactions.js +3 -3
- package/dist/item.js +4 -4
- package/dist/loader.d.ts +2 -1
- package/dist/loader.js +2 -2
- package/dist/processing.d.ts +374 -17
- package/dist/processing.js +42 -2
- package/dist/qti-components-jsx.d.ts +1183 -126
- package/dist/{qti-rule-base-DGhWN-as.d.ts → qti-condition-expression-B1BYmCcq.d.ts} +1 -14
- package/dist/{qti-feedback-BZjWNyxP.d.ts → qti-feedback-ChmXhZuf.d.ts} +1 -1
- package/dist/qti-rule-base-ajOnfGXY.d.ts +16 -0
- package/dist/test.d.ts +2 -1
- package/dist/test.js +6 -6
- package/dist/transformers.js +1 -1
- package/package.json +11 -11
- package/dist/chunk-G5ZUC3OT.js.map +0 -1
- package/dist/chunk-GG36UR7F.js.map +0 -1
- package/dist/chunk-K7HR6ZAY.js.map +0 -1
- package/dist/chunk-KY3II5OX.js.map +0 -1
- package/dist/chunk-QUWFDFGZ.js.map +0 -1
- package/dist/chunk-TORB5UN2.js.map +0 -1
- package/dist/chunk-TZMDZQFG.js.map +0 -1
- /package/dist/{chunk-75ME6QG5.js.map → chunk-424AWLRU.js.map} +0 -0
- /package/dist/{chunk-RXRKP6P7.js.map → chunk-SX63OCDZ.js.map} +0 -0
package/cdn/index.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
var
|
|
2
|
-
Make sure to test your application with a production build as repeat registrations will throw in production.`);else throw new Error(`Failed to execute 'define' on 'CustomElementRegistry': the name "${
|
|
3
|
-
\f\r]`,
|
|
4
|
-
\f\r"'\`<>=]|("|')|))|$)`,"g"),$n=/'/g,On=/"/g,Hn=/^(?:script|style|textarea|title)$/i,hs=n=>(i,...e)=>({_$litType$:n,strings:i,values:e}),x=hs(1),Xi=hs(2),Hd=hs(3),X=Symbol.for("lit-noChange"),N=Symbol.for("lit-nothing"),Vn=new WeakMap,Ct=Et.createTreeWalker(Et,129);function Fn(n,i){if(!ms(n)||!n.hasOwnProperty("raw"))throw Error("invalid template strings array");return Ln!==void 0?Ln.createHTML(i):i}var Bn=(n,i)=>{let e=n.length-1,t=[],r,o=i===2?"<svg>":i===3?"<math>":"",s=kr;for(let a=0;a<e;a++){let l=n[a],c,p,h=-1,m=0;for(;m<l.length&&(s.lastIndex=m,p=s.exec(l),p!==null);)m=s.lastIndex,s===kr?p[1]==="!--"?s=Pn:p[1]!==void 0?s=Dn:p[2]!==void 0?(Hn.test(p[2])&&(r=RegExp("</"+p[2],"g")),s=wt):p[3]!==void 0&&(s=wt):s===wt?p[0]===">"?(s=r??kr,h=-1):p[1]===void 0?h=-2:(h=s.lastIndex-p[2].length,c=p[1],s=p[3]===void 0?wt:p[3]==='"'?On:$n):s===On||s===$n?s=wt:s===Pn||s===Dn?s=kr:(s=wt,r=void 0);let y=s===wt&&n[a+1].startsWith("/>")?" ":"";o+=s===kr?l+yc:h>=0?(t.push(c),l.slice(0,h)+ps+l.slice(h)+He+y):l+He+(h===-2?a:y)}return[Fn(n,o+(n[e]||"<?>")+(i===2?"</svg>":i===3?"</math>":"")),t]},_r=class n{constructor({strings:i,_$litType$:e},t){let r;this.parts=[];let o=0,s=0,a=i.length-1,l=this.parts,[c,p]=Bn(i,e);if(this.el=n.createElement(c,t),Ct.currentNode=this.el.content,e===2||e===3){let h=this.el.content.firstChild;h.replaceWith(...h.childNodes)}for(;(r=Ct.nextNode())!==null&&l.length<a;){if(r.nodeType===1){if(r.hasAttributes())for(let h of r.getAttributeNames())if(h.endsWith(ps)){let m=p[s++],y=r.getAttribute(h).split(He),v=/([.?@])?(.*)/.exec(m);l.push({type:1,index:o,name:v[2],strings:y,ctor:v[1]==="."?Ui:v[1]==="?"?zi:v[1]==="@"?ji:Tt}),r.removeAttribute(h)}else h.startsWith(He)&&(l.push({type:6,index:o}),r.removeAttribute(h));if(Hn.test(r.tagName)){let h=r.textContent.split(He),m=h.length-1;if(m>0){r.textContent=Fi?Fi.emptyScript:"";for(let y=0;y<m;y++)r.append(h[y],Mr()),Ct.nextNode(),l.push({type:2,index:++o});r.append(h[m],Mr())}}}else if(r.nodeType===8)if(r.data===us)l.push({type:2,index:o});else{let h=-1;for(;(h=r.data.indexOf(He,h+1))!==-1;)l.push({type:7,index:o}),h+=He.length-1}o++}}static createElement(i,e){let t=Et.createElement("template");return t.innerHTML=i,t}};function St(n,i,e=n,t){if(i===X)return i;let r=t!==void 0?e._$Co?.[t]:e._$Cl,o=Rr(i)?void 0:i._$litDirective$;return r?.constructor!==o&&(r?._$AO?.(!1),o===void 0?r=void 0:(r=new o(n),r._$AT(n,e,t)),t!==void 0?(e._$Co??=[])[t]=r:e._$Cl=r),r!==void 0&&(i=St(n,r._$AS(n,i.values),r,t)),i}var Bi=class{constructor(i,e){this._$AV=[],this._$AN=void 0,this._$AD=i,this._$AM=e}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(i){let{el:{content:e},parts:t}=this._$AD,r=(i?.creationScope??Et).importNode(e,!0);Ct.currentNode=r;let o=Ct.nextNode(),s=0,a=0,l=t[0];for(;l!==void 0;){if(s===l.index){let c;l.type===2?c=new Nt(o,o.nextSibling,this,i):l.type===1?c=new l.ctor(o,l.name,l.strings,this,i):l.type===6&&(c=new Wi(o,this,i)),this._$AV.push(c),l=t[++a]}s!==l?.index&&(o=Ct.nextNode(),s++)}return Ct.currentNode=Et,r}p(i){let e=0;for(let t of this._$AV)t!==void 0&&(t.strings!==void 0?(t._$AI(i,t,e),e+=t.strings.length-2):t._$AI(i[e])),e++}},Nt=class n{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(i,e,t,r){this.type=2,this._$AH=N,this._$AN=void 0,this._$AA=i,this._$AB=e,this._$AM=t,this.options=r,this._$Cv=r?.isConnected??!0}get parentNode(){let i=this._$AA.parentNode,e=this._$AM;return e!==void 0&&i?.nodeType===11&&(i=e.parentNode),i}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(i,e=this){i=St(this,i,e),Rr(i)?i===N||i==null||i===""?(this._$AH!==N&&this._$AR(),this._$AH=N):i!==this._$AH&&i!==X&&this._(i):i._$litType$!==void 0?this.$(i):i.nodeType!==void 0?this.T(i):Nn(i)?this.k(i):this._(i)}O(i){return this._$AA.parentNode.insertBefore(i,this._$AB)}T(i){this._$AH!==i&&(this._$AR(),this._$AH=this.O(i))}_(i){this._$AH!==N&&Rr(this._$AH)?this._$AA.nextSibling.data=i:this.T(Et.createTextNode(i)),this._$AH=i}$(i){let{values:e,_$litType$:t}=i,r=typeof t=="number"?this._$AC(i):(t.el===void 0&&(t.el=_r.createElement(Fn(t.h,t.h[0]),this.options)),t);if(this._$AH?._$AD===r)this._$AH.p(e);else{let o=new Bi(r,this),s=o.u(this.options);o.p(e),this.T(s),this._$AH=o}}_$AC(i){let e=Vn.get(i.strings);return e===void 0&&Vn.set(i.strings,e=new _r(i)),e}k(i){ms(this._$AH)||(this._$AH=[],this._$AR());let e=this._$AH,t,r=0;for(let o of i)r===e.length?e.push(t=new n(this.O(Mr()),this.O(Mr()),this,this.options)):t=e[r],t._$AI(o),r++;r<e.length&&(this._$AR(t&&t._$AB.nextSibling,r),e.length=r)}_$AR(i=this._$AA.nextSibling,e){for(this._$AP?.(!1,!0,e);i!==this._$AB;){let t=i.nextSibling;i.remove(),i=t}}setConnected(i){this._$AM===void 0&&(this._$Cv=i,this._$AP?.(i))}},Tt=class{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(i,e,t,r,o){this.type=1,this._$AH=N,this._$AN=void 0,this.element=i,this.name=e,this._$AM=r,this.options=o,t.length>2||t[0]!==""||t[1]!==""?(this._$AH=Array(t.length-1).fill(new String),this.strings=t):this._$AH=N}_$AI(i,e=this,t,r){let o=this.strings,s=!1;if(o===void 0)i=St(this,i,e,0),s=!Rr(i)||i!==this._$AH&&i!==X,s&&(this._$AH=i);else{let a=i,l,c;for(i=o[0],l=0;l<o.length-1;l++)c=St(this,a[t+l],e,l),c===X&&(c=this._$AH[l]),s||=!Rr(c)||c!==this._$AH[l],c===N?i=N:i!==N&&(i+=(c??"")+o[l+1]),this._$AH[l]=c}s&&!r&&this.j(i)}j(i){i===N?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,i??"")}},Ui=class extends Tt{constructor(){super(...arguments),this.type=3}j(i){this.element[this.name]=i===N?void 0:i}},zi=class extends Tt{constructor(){super(...arguments),this.type=4}j(i){this.element.toggleAttribute(this.name,!!i&&i!==N)}},ji=class extends Tt{constructor(i,e,t,r,o){super(i,e,t,r,o),this.type=5}_$AI(i,e=this){if((i=St(this,i,e,0)??N)===X)return;let t=this._$AH,r=i===N&&t!==N||i.capture!==t.capture||i.once!==t.once||i.passive!==t.passive,o=i!==N&&(t===N||r);r&&this.element.removeEventListener(this.name,this,t),o&&this.element.addEventListener(this.name,this,i),this._$AH=i}handleEvent(i){typeof this._$AH=="function"?this._$AH.call(this.options?.host??this.element,i):this._$AH.handleEvent(i)}},Wi=class{constructor(i,e,t){this.element=i,this.type=6,this._$AN=void 0,this._$AM=e,this.options=t}get _$AU(){return this._$AM._$AU}_$AI(i){St(this,i)}},Y={M:ps,P:He,A:us,C:1,L:Bn,R:Bi,D:Nn,V:St,I:Nt,H:Tt,N:zi,U:ji,B:Ui,F:Wi},xc=Gi.litHtmlPolyfillSupport;xc?.(_r,Nt),(Gi.litHtmlVersions??=[]).push("3.3.1");var fs=(n,i,e)=>{let t=e?.renderBefore??i,r=t._$litPart$;if(r===void 0){let o=e?.renderBefore??null;t._$litPart$=r=new Nt(i.insertBefore(Mr(),o),o,void 0,e??{})}return r._$AI(n),r};var gs=globalThis,C=class extends Ne{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){let i=super.createRenderRoot();return this.renderOptions.renderBefore??=i.firstChild,i}update(i){let e=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(i),this._$Do=fs(e,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return X}};C._$litElement$=!0,C.finalized=!0,gs.litElementHydrateSupport?.({LitElement:C});var qc=gs.litElementPolyfillSupport;qc?.({LitElement:C});(gs.litElementVersions??=[]).push("4.2.1");var k=n=>(i,e)=>{e!==void 0?e.addInitializer((()=>{customElements.define(n,i)})):customElements.define(n,i)};var wc={attribute:!0,type:String,converter:Ar,reflect:!1,hasChanged:Hi},Cc=(n=wc,i,e)=>{let{kind:t,metadata:r}=e,o=globalThis.litPropertyMetadata.get(r);if(o===void 0&&globalThis.litPropertyMetadata.set(r,o=new Map),t==="setter"&&((n=Object.create(n)).wrapped=!0),o.set(e.name,n),t==="accessor"){let{name:s}=e;return{set(a){let l=i.get.call(this);i.set.call(this,a),this.requestUpdate(s,l,n)},init(a){return a!==void 0&&this.C(s,void 0,n,a),a}}}if(t==="setter"){let{name:s}=e;return function(a){let l=this[s];i.call(this,a),this.requestUpdate(s,l,n)}}throw Error("Unsupported decorator location: "+t)};function b(n){return(i,e)=>typeof e=="object"?Cc(n,i,e):((t,r,o)=>{let s=r.hasOwnProperty(o);return r.constructor.createProperty(o,t),s?Object.getOwnPropertyDescriptor(r,o):void 0})(n,i,e)}function R(n){return b({...n,state:!0,attribute:!1})}var Ye=(n,i,e)=>(e.configurable=!0,e.enumerable=!0,Reflect.decorate&&typeof i!="object"&&Object.defineProperty(n,i,e),e);function Ht(n,i){return(e,t,r)=>{let o=s=>s.renderRoot?.querySelector(n)??null;if(i){let{get:s,set:a}=typeof t=="object"?e:r??(()=>{let l=Symbol();return{get(){return this[l]},set(c){this[l]=c}}})();return Ye(e,t,{get(){let l=s.call(this);return l===void 0&&(l=o(this),(l!==null||this.hasUpdated)&&a.call(this,l)),l}})}return Ye(e,t,{get(){return o(this)}})}}function Un(n){return(i,e)=>{let{slot:t,selector:r}=n??{},o="slot"+(t?`[name=${t}]`:":not([name])");return Ye(i,e,{get(){let s=this.renderRoot?.querySelector(o),a=s?.assignedElements(n)??[];return r===void 0?a:a.filter((l=>l.matches(r)))}})}}function zn(n,i,e){Array.from(n.getElementsByTagName("*")).filter(o=>o.localName===i||o.localName?.toLowerCase()===i.toLowerCase()).forEach(o=>{let s=`${i}-${e}`,a=Wn(o,s);o.replaceWith(a)})}function jn(n,i){n.querySelectorAll("*").forEach(e=>{let t=e.classList;t&&t.forEach(r=>{if(r.startsWith(`${i}:`)){let o=r.slice(`${i}:`.length),s=`${e.nodeName}-${o}`,a=Wn(e,s);e.replaceWith(a)}})})}function Wn(n,i){let e=n.ownerDocument.createElement(i);for(let t of n.attributes)e.setAttribute(t.name,t.value);for(;n.firstChild;)e.appendChild(n.firstChild);return e}function Gn(n){let i=[];return n.querySelectorAll("qti-assessment-item-ref").forEach(e=>{let t=e.getAttribute("identifier"),r=e.getAttribute("href"),o=e.getAttribute("category");i.push({identifier:t,href:r,category:o})}),i}function Ft(n,i){return fetch(n,{signal:i}).then(e=>{if(!e.ok)throw new Error(`HTTP error! status: ${e.status}`);return e.text()}).then(e=>new DOMParser().parseFromString(e,"text/xml")).catch(e=>{throw e.name==="AbortError"?e:new Error(`Failed to load XML: ${e.message}`)})}function Bt(n){return new DOMParser().parseFromString(n,"text/xml")}function Xn(n,i){if(n.nodeType===Node.ELEMENT_NODE){let e=n,t=i.createElement(e.localName);for(let r=0;r<e.attributes.length;r++){let o=e.attributes[r];t.setAttribute(o.localName,o.value)}for(let r=0;r<e.childNodes.length;r++)t.appendChild(Xn(e.childNodes[r],i));return t}return n.cloneNode(!1)}function Ut(n){let i=document.createDocumentFragment();for(let e=0;e<n.childNodes.length;e++)i.appendChild(Xn(n.childNodes[e],document));return i}function zt(n,i){i.endsWith("/")||(i+="/"),n.querySelectorAll("*").forEach(t=>{for(let r of["src","href"]){let o=t.getAttribute(r)?.trim();if(o&&!/^(data:|https?:|blob:)/.test(o)){let s=i+encodeURI(o);t.setAttribute(r,s)}}})}function Qn(n){n.querySelectorAll('qti-custom-operator[class="js.org"] > qti-base-value').forEach(e=>{let t=document.createComment(e.textContent);e.replaceChild(t,e.firstChild)})}function Jn(n){n.querySelectorAll("qti-stylesheet").forEach(i=>i.remove())}function Yn(n){switch(n){case"qti-choice-interaction":case"qti-order-interaction":return"qti-simple-choice";case"qti-inline-choice-interaction":return"qti-inline-choice";case"qti-match-interaction":return["qti-simple-match-set:first-of-type qti-simple-associable-choice","qti-simple-match-set:last-of-type > qti-simple-associable-choice"];case"qti-gap-match-interaction":return"qti-gap-text";case"qti-associate-interaction":return"qti-simple-associable-choice";default:return null}}var Ae=(n=!1)=>{let i,e="",t={load(r,o){e=r;let s=encodeURI(r);return n&&sessionStorage.getItem(s)?Promise.resolve(t.parse(sessionStorage.getItem(s))):Ft(r,o).then(a=>(i=a,t.shuffleInteractions(),n&&sessionStorage.setItem(s,new XMLSerializer().serializeToString(i)),t))},parse(r){return i=Bt(r),t},path:r=>(zt(i,r),e=null,t),fn(r){return r(i),t},pciHooks(r){let o=["hook","module"],s=r.substring(0,r.lastIndexOf("/"));for(let a of o)i.querySelectorAll("["+a+"]").forEach(c=>{let p=c.getAttribute(a);!p.startsWith("data:")&&!p.startsWith("http")&&(c.setAttribute("base-url",r),c.setAttribute("module",s+"/"+encodeURI(p+(p.endsWith(".js")?"":".js"))))});return t},async configurePci(r,o,s="qti-portable-custom-interaction"){let a=[],l=i.querySelectorAll(s);if(l.length===0)return t;let c=null,p=null,h=async()=>{if(c===null)try{c=await o(r,"/modules/module_resolution.js")}catch{c=null}if(p===null)try{p=await o(r,"/modules/fallback_module_resolution.js")}catch{p=null}};for(let m of Array.from(l)){m.setAttribute("data-base-url",r);let y=m.getAttribute("custom-interaction-type-identifier");y&&a.includes(y)&&(y=y+a.length,m.setAttribute("custom-interaction-type-identifier",y),a.push(y)),y&&a.push(y);let v=m.querySelector("qti-interaction-modules");if(v&&v.getAttribute("primary-configuration")){await h();let w=v.getAttribute("primary-configuration");if(w)try{let f=await o(r,`/${w}`),u=Array.from(v.querySelectorAll("qti-interaction-module"));for(let g of u){let q=g.getAttribute("id");if(q&&f.paths&&f.paths[q]){let T=f.paths[q],E=Array.isArray(T)?T[0]:T;if(g.setAttribute("primary-path",E),p&&p.paths&&p.paths[q]){let A=p.paths[q];Array.isArray(A)?g.setAttribute("fallback-path",A[0]):g.setAttribute("fallback-path",A)}}}if(f.paths){for(let g in f.paths)if(!v.querySelector(`qti-interaction-module[id="${g}"]`)){let T=i.createElement("qti-interaction-module");T.setAttribute("id",g);let E=Array.isArray(f.paths[g])?f.paths[g][0]:f.paths[g];if(T.setAttribute("primary-path",E),p&&p.paths&&p.paths[g]){let A=p.paths[g];Array.isArray(A)?T.setAttribute("fallback-path",A[0]):T.setAttribute("fallback-path",A)}v.appendChild(T)}}f.urlArgs&&v.setAttribute("url-args",f.urlArgs)}catch(f){console.warn(`Failed to load primary configuration: ${w}`,f)}}else if(await h(),c){m.querySelector("qti-interaction-modules")===null?(v=i.createElement("qti-interaction-modules"),m.appendChild(v)):v=m.querySelector("qti-interaction-modules");for(let w in c.paths){let f=c.paths[w],u="";p&&p.paths&&p.paths[w]&&(u=p.paths[w]);let g=Array.isArray(f)?f:[f],q=Array.isArray(u)?u:[u],T=g.map((E,A)=>{let M=q.length>A?q[A]:"";return{primaryPath:E,fallbackPath:M}});for(let E of q)T.some(A=>A.fallbackPath===E)||T.push({primaryPath:g.length>0?g[0]:E,fallbackPath:E});for(let E of T){let A=i.createElement("qti-interaction-module");E.fallbackPath&&A.setAttribute("fallback-path",E.fallbackPath),A.setAttribute("id",w),A.setAttribute("primary-path",E.primaryPath),v&&v.appendChild(A)}}}}return t},shuffleInteractions(){let r=i.querySelectorAll('[shuffle="true"]'),o=Array.from(r).filter(s=>s.tagName?.toLowerCase().endsWith("-interaction"));for(let s of o){let a=Yn(s.tagName.toLowerCase()),l=Array.isArray(a)?a:[a];for(let c of l){let p=Array.from(s.querySelectorAll(c)),h=p.map((u,g)=>({element:u,fixed:u.hasAttribute("fixed")&&u.getAttribute("fixed")==="true",originalOrder:g})).filter(u=>u.fixed),m=p.filter(u=>!u.hasAttribute("fixed")||u.getAttribute("fixed")!=="true");if(m.length<=1)return console.warn("Shuffling is not possible with fewer than 2 non-fixed elements."),t;let y=[...m],v=!1,w=0;for(;!v&&w<20;){w++;for(let u=m.length-1;u>0;u--){let g=Math.floor(Math.random()*(u+1));[m[u],m[g]]=[m[g],m[u]]}v=!m.every((u,g)=>u===y[g])}if(!v)return console.warn("Failed to shuffle the choices after multiple attempts."),null;s.removeAttribute("shuffle");let f=0;for(let u of m)u.parentElement.insertBefore(u,h[f]?.element),f++;for(let u of h)u.element.parentElement.insertBefore(u.element,m[u.originalOrder])}}return t},extendElementName:(r,o)=>(zn(i,r,o),t),extendElementsWithClass:(r="extend")=>(jn(i,r),t),customInteraction(r,o){let s=i.querySelector("qti-custom-interaction"),a=s.querySelector("object");return s.setAttribute("data-base-ref",r),s.setAttribute("data-base-item",r+o),s.setAttribute("data",a.getAttribute("data")),s.setAttribute("width",a.getAttribute("width")),s.setAttribute("height",a.getAttribute("height")),s.removeChild(a),t},convertCDATAtoComment(){return Qn(i),t},stripStyleSheets(){return Jn(i),t},html(){return e!==null&&zt(i,e.substring(0,e.lastIndexOf("/"))),new XMLSerializer().serializeToString(Ut(i))},xml(){return new XMLSerializer().serializeToString(i)},htmlDoc(){return e!==null&&zt(i,e.substring(0,e.lastIndexOf("/"))),Ut(i)},xmlDoc(){return i}};return t};var Kn=()=>{let n,i={async load(e,t){return new Promise(r=>{Ft(e,t).then(o=>(n=o,r(i)))})},parse(e){n=Bt(e)},assessmentTest(){let e=n.querySelector('resource[type="imsqti_test_xmlv3p0"]');return{href:e.getAttribute("href"),identifier:e.getAttribute("identifier")}}};return i};var jt=()=>{let n,i={async load(e,t){return new Promise((r,o)=>{Ft(e,t).then(s=>(n=s,i.path(e.substring(0,e.lastIndexOf("/"))),r(i)))})},parse(e){return n=Bt(e),i},path:e=>(zt(n,e),i),fn(e){return e(n),i},items(){return Gn(n)},html(){return new XMLSerializer().serializeToString(Ut(n))},xml(){return new XMLSerializer().serializeToString(n)},htmlDoc(){return Ut(n)},xmlDoc(){return n}};return i};var Zn=n=>{class i extends n{constructor(...r){super(...r);this.navigate=null;this.cacheTransform=!1;this.requestTimeout=3e4;this.postLoadTransformCallback=null;this.postLoadTestTransformCallback=null;this._activeController=null;this._loadResults=[];this._navigationId=0;this._loadingState={expectedItems:0,connectedItems:0,expectedStimulus:0,loadedStimulus:0,isComplete:!1};this._loadedStimulusHrefs=new Set;this._loadingStimulusHrefs=new Set;this._bindEventHandlers()}navigateTo(r,o){let s=o||this._getDefaultNavigationId(r);s&&this.dispatchEvent(new CustomEvent("qti-request-navigation",{detail:{type:r,id:s},bubbles:!0,composed:!0}))}_bindEventHandlers(){this.addEventListener("qti-request-navigation",this._handleNavigationRequest.bind(this)),this.addEventListener("qti-assessment-test-connected",this._handleTestConnected.bind(this)),this.addEventListener("qti-assessment-item-connected",this._handleItemConnected.bind(this)),this.addEventListener("qti-assessment-stimulus-ref-connected",this._handleStimulusRefConnected.bind(this))}_handleTestConnected(r){this._testElement=r.detail,this._initializeNavigation()}_handleItemConnected(r){let o=r.detail;this._loadingState.connectedItems++;let s=o.querySelectorAll("qti-assessment-stimulus-ref");this._loadingState.expectedStimulus+=s.length,this._checkLoadingComplete()}async _handleStimulusRefConnected(r){r.preventDefault();let{element:o,item:s}=r;if(console.info("Stimulus ref connected:",{identifier:o.identifier,href:o.href,item:s.identifier}),this._loadedStimulusHrefs.has(o.href)){console.info("Stimulus already loaded, skipping:",o.href),this._loadingState.loadedStimulus++,this._checkLoadingComplete();return}if(this._loadingStimulusHrefs.has(o.href)){console.info("Stimulus already loading, skipping duplicate:",o.href),this._loadingState.loadedStimulus++,this._checkLoadingComplete();return}this._loadingStimulusHrefs.add(o.href),console.info("Starting stimulus load:",o.href);try{await this._loadStimulusRef(o,s),this._loadedStimulusHrefs.add(o.href),this._loadingState.loadedStimulus++,console.info("Stimulus loaded successfully:",o.href),this._checkLoadingComplete()}catch(a){a.name!=="AbortError"&&console.warn(`Failed to load stimulus ${o.identifier}:`,a),this._loadingState.loadedStimulus++,this._checkLoadingComplete()}finally{this._loadingStimulusHrefs.delete(o.href)}}_getDefaultNavigationId(r){return r==="section"?this._testElement?.querySelector("qti-assessment-section")?.identifier:this.sessionContext?.navItemRefId??this._testElement?.querySelector("qti-assessment-item-ref")?.identifier}_initializeNavigation(){if(!this.navigate)return;let r=this._getDefaultNavigationId(this.navigate);r&&this.navigateTo(this.navigate,r)}async _handleNavigationRequest({detail:r}){if(!r?.id)return;this._cancelPreviousNavigation();let o=++this._navigationId,s=new AbortController;try{this._dispatchLoadingStarted(r.type,r.id),this._activeController=s,await this._executeNavigation(r.type,r.id,o,s)}catch(a){this._handleNavigationError(a,r.type,r.id)}finally{this._activeController===s&&(this._activeController=null),this._dispatchLoadingEnded(r.type,r.id)}}_handleNavigationError(r,o,s){r.name!=="AbortError"&&this._dispatchError(this._createNavigationError(r,o,s))}async _executeNavigation(r,o,s,a){r==="item"?await this._navigateToItem(o,s,a):await this._navigateToSection(o,s,a)}async _navigateToItem(r,o,s){let a=this._findItemRef(r);this._updateSessionContext(a,r),this._resetLoadingState(),this._loadingState.expectedItems=1,await this._loadItems([r],o,s),await this._waitForLoadingComplete(o,s),!this._isStaleNavigation(o,s)&&this._dispatchTestLoaded(this._loadResults)}async _navigateToSection(r,o,s){let l=this._findSection(r)?.closest("qti-test-part")?.identifier;this.sessionContext={...this.sessionContext,navPartId:l,navSectionId:r,navItemRefId:null};let c=this._getSectionItemIds(r);this._resetLoadingState(),this._loadingState.expectedItems=c.length,await this._loadItems(c,o,s),await this._waitForLoadingComplete(o,s),!this._isStaleNavigation(o,s)&&this._dispatchTestLoaded(this._loadResults)}_resetLoadingState(){this._loadingState={expectedItems:0,connectedItems:0,expectedStimulus:0,loadedStimulus:0,isComplete:!1},this._loadedStimulusHrefs.clear(),this._loadingStimulusHrefs.clear()}_checkLoadingComplete(){let r=this._loadingState.connectedItems>=this._loadingState.expectedItems,o=this._loadingState.loadedStimulus>=this._loadingState.expectedStimulus;r&&o&&!this._loadingState.isComplete&&(this._loadingState.isComplete=!0)}async _waitForLoadingComplete(r,o){for(;!this._loadingState.isComplete;){if(this._isStaleNavigation(r,o))return;await new Promise(s=>setTimeout(s,10))}}getLoadingProgress(){return{...this._loadingState}}async _loadStimulusRef(r,o){console.info("Loading stimulus:",r.href);let s=await this._loadStimulus(r.href);console.info("Stimulus loaded, applying content:",s?"has content":"no content"),this._applyStimulusContent(s,r,o)}_applyStimulusContent(r,o,s){if(!r){console.warn("No stimulus content to apply");return}let a=r.querySelectorAll("qti-stimulus-body, qti-stylesheet");if(console.info(`Found ${a.length} stimulus elements to apply for ${o.identifier}`),a.length===0){console.warn("No qti-stimulus-body or qti-stylesheet elements found in stimulus");return}let l=[],c=document.querySelector(`qti-assessment-item[identifier="${s.identifier}"] [data-stimulus-idref="${o.identifier}"]`);if(c)l.push(c),console.info("Found specific target:",c);else{let p=Array.from(this.querySelectorAll(`[data-stimulus-idref="${o.identifier}"]`));if(p.length>0)l=p,console.info("Found targets by identifier:",p.length);else{let h=Array.from(this.querySelectorAll("[data-stimulus-idref]"));l=h,console.info("Using fallback targets:",h.length)}}if(l.length===0){console.warn("No targets found for stimulus content");return}l.forEach((p,h)=>{p.innerHTML="";let m=Array.from(a).map(y=>y.cloneNode(!0));p.append(...m),console.info(`Applied stimulus content to target ${h+1}/${l.length}`)})}_cancelPreviousNavigation(){this._activeController&&(this._activeController.abort(),console.info("Previous navigation request cancelled")),this._clearNavigationState()}_clearNavigationState(){this._clearLoadedItems(),this._resetLoadingState(),this._loadResults=[]}async _loadItems(r,o,s){if(!this._testElement||r.length===0)return;let a=r.map(p=>this._findItemRef(p));this._clearLoadedItems(),this._clearStimulusRef();let c=(await Promise.all(a.map(p=>this._loadSingleItem(p,o,s)))).filter(Boolean);this._isStaleNavigation(o,s)||(c.forEach(({itemRef:p,doc:h})=>{p&&h&&(p.xmlDoc=h)}),c.forEach(({itemRef:p})=>{let h=p?.identifier;if(!p||!h)return;let m=this.testContext.items.find(y=>y.identifier===h)?.state;m!==void 0&&p.updateComplete.then(()=>{let y=p.assessmentItem;y&&(y.state=m)})}),this._loadResults=c)}async _loadSingleItem(r,o,s){try{let a=await Ae(this.cacheTransform).load(r.href,s.signal);return this.postLoadTransformCallback&&(a=await this.postLoadTransformCallback(a,r)),this._isStaleNavigation(o,s)?null:{itemRef:r,doc:a.htmlDoc()}}catch(a){if(a.name==="AbortError")throw console.info(`Item load for ${r.identifier} was aborted`),a;return console.warn(`Failed to load item ${r.identifier}:`,a),null}}async _loadStimulus(r){return(await Ae().load(r,this._activeController?.signal)).htmlDoc()}_findItemRef(r){let o=this._testElement?.querySelector(`qti-assessment-item-ref[identifier="${r}"]`);if(!o)throw new Error(`Item with identifier "${r}" not found`);return o}_findSection(r){return this._testElement?.querySelector(`qti-assessment-section[identifier="${r}"]`)||null}_updateSessionContext(r,o){let s=r.closest("qti-test-part")?.identifier,a=r.closest("qti-assessment-section")?.identifier;this.sessionContext={...this.sessionContext,navPartId:s,navSectionId:a,navItemRefId:o}}_getSectionItemIds(r){return Array.from(this._testElement.querySelectorAll(`qti-assessment-section[identifier="${r}"] > qti-assessment-item-ref`)).map(o=>o.identifier).filter(Boolean)}_clearLoadedItems(){let r=this._testElement?.querySelectorAll("qti-assessment-item-ref");Array.from(r||[]).forEach(o=>{o.xmlDoc=null})}_clearStimulusRef(){this.querySelectorAll("[data-stimulus-idref]").forEach(r=>r.innerHTML="")}_isStaleNavigation(r,o){return o.signal.aborted||r!==this._navigationId}_createNavigationError(r,o,s){return{message:r.message||`Failed to load ${o}: ${s}`,details:r,itemId:o==="item"?s:void 0,sectionId:o==="section"?s:void 0}}_dispatchLoadingStarted(r,o){this.dispatchEvent(new CustomEvent("qti-navigation-loading-started",{detail:{type:r,id:o},bubbles:!0,composed:!0}))}_dispatchLoadingEnded(r,o){this.dispatchEvent(new CustomEvent("qti-navigation-loading-ended",{detail:{type:r,id:o},bubbles:!0,composed:!0}))}_dispatchError(r){this.dispatchEvent(new CustomEvent("qti-navigation-error",{detail:r,bubbles:!0,composed:!0}))}_dispatchTestLoaded(r){requestAnimationFrame(()=>{this.dispatchEvent(new CustomEvent("qti-test-loaded",{detail:r.map(({itemRef:o})=>({identifier:o?.identifier,element:o})),bubbles:!0,composed:!0}))})}}return d([b({type:String})],i.prototype,"navigate",2),d([b({type:Boolean,attribute:"cache-transform"})],i.prototype,"cacheTransform",2),d([b({type:Number})],i.prototype,"requestTimeout",2),d([b({attribute:!1})],i.prototype,"postLoadTransformCallback",2),d([b({attribute:!1})],i.prototype,"postLoadTestTransformCallback",2),i};var ea=n=>{class i extends n{constructor(...t){super(...t),this.sessionContext={...this.sessionContext,view:"candidate"},this.addEventListener("on-test-switch-view",r=>{this.sessionContext={...this.sessionContext,view:r.detail},this._updateElementView()}),this.addEventListener("qti-assessment-test-connected",()=>{this._updateElementView()}),this.addEventListener("qti-assessment-item-connected",r=>{this._updateElementView(),this._setCorrectResponseVisibility(r.detail)})}willUpdate(t){super.willUpdate(t),t.has("sessionContext")&&this._updateElementView()}_updateElementView(){if(this._testElement){Array.from(this._testElement.querySelectorAll("[view]")).forEach(s=>{s.classList.toggle("show",s.getAttribute("view")===this.sessionContext.view)});let o=this._testElement.querySelector(`qti-assessment-item-ref[identifier="${this.sessionContext.navItemRefId}"]`)?.assessmentItem;o&&o.showCorrectResponse(this.sessionContext.view==="scorer")}}_setCorrectResponseVisibility(t){t.showCorrectResponse(this.sessionContext.view==="scorer")}}return i};var Ke=class extends Event{constructor(i,e,t,r){super("context-request",{bubbles:!0,composed:!0}),this.context=i,this.contextTarget=e,this.callback=t,this.subscribe=r??!1}};var Wt=class{constructor(i,e,t,r){if(this.subscribe=!1,this.provided=!1,this.value=void 0,this.t=(o,s)=>{this.unsubscribe&&(this.unsubscribe!==s&&(this.provided=!1,this.unsubscribe()),this.subscribe||this.unsubscribe()),this.value=o,this.host.requestUpdate(),this.provided&&!this.subscribe||(this.provided=!0,this.callback&&this.callback(o,s)),this.unsubscribe=s},this.host=i,e.context!==void 0){let o=e;this.context=o.context,this.callback=o.callback,this.subscribe=o.subscribe??!1}else this.context=e,this.callback=t,this.subscribe=r??!1;this.host.addController(this)}hostConnected(){this.dispatchRequest()}hostDisconnected(){this.unsubscribe&&(this.unsubscribe(),this.unsubscribe=void 0)}dispatchRequest(){this.host.dispatchEvent(new Ke(this.context,this.host,this.t,this.subscribe))}};var Qi=class{get value(){return this.o}set value(i){this.setValue(i)}setValue(i,e=!1){let t=e||!Object.is(i,this.o);this.o=i,t&&this.updateObservers()}constructor(i){this.subscriptions=new Map,this.updateObservers=()=>{for(let[e,{disposer:t}]of this.subscriptions)e(this.o,t)},i!==void 0&&(this.value=i)}addCallback(i,e,t){if(!t)return void i(this.value);this.subscriptions.has(i)||this.subscriptions.set(i,{disposer:()=>{this.subscriptions.delete(i)},consumerHost:e});let{disposer:r}=this.subscriptions.get(i);i(this.value,r)}clearCallbacks(){this.subscriptions.clear()}};var bs=class extends Event{constructor(i,e){super("context-provider",{bubbles:!0,composed:!0}),this.context=i,this.contextTarget=e}},Gt=class extends Qi{constructor(i,e,t){super(e.context!==void 0?e.initialValue:t),this.onContextRequest=r=>{if(r.context!==this.context)return;let o=r.contextTarget??r.composedPath()[0];o!==this.host&&(r.stopPropagation(),this.addCallback(r.callback,o,r.subscribe))},this.onProviderRequest=r=>{if(r.context!==this.context||(r.contextTarget??r.composedPath()[0])===this.host)return;let o=new Set;for(let[s,{consumerHost:a}]of this.subscriptions)o.has(s)||(o.add(s),a.dispatchEvent(new Ke(this.context,a,s,!0)));r.stopPropagation()},this.host=i,e.context!==void 0?this.context=e.context:this.context=e,this.attachListeners(),this.host.addController?.(this)}attachListeners(){this.host.addEventListener("context-request",this.onContextRequest),this.host.addEventListener("context-provider",this.onProviderRequest)}hostConnected(){this.host.dispatchEvent(new bs(this.context,this.host))}};function ne({context:n}){return(i,e)=>{let t=new WeakMap;if(typeof e=="object")return{get(){return i.get.call(this)},set(r){return t.get(this).setValue(r),i.set.call(this,r)},init(r){return t.set(this,new Gt(this,{context:n,initialValue:r})),r}};{i.constructor.addInitializer((s=>{t.set(s,new Gt(s,{context:n}))}));let r=Object.getOwnPropertyDescriptor(i,e),o;if(r===void 0){let s=new WeakMap;o={get(){return s.get(this)},set(a){t.get(this).setValue(a),s.set(this,a)},configurable:!0,enumerable:!0}}else{let s=r.set;o={...r,set(a){t.get(this).setValue(a),s?.call(this,a)}}}return void Object.defineProperty(i,e,o)}}}function P({context:n,subscribe:i}){return(e,t)=>{typeof t=="object"?t.addInitializer((function(){new Wt(this,{context:n,callback:r=>{e.set.call(this,r)},subscribe:i})})):e.constructor.addInitializer((r=>{new Wt(r,{context:n,callback:o=>{r[t]=o},subscribe:i})}))}}var Ze=Symbol("computedItemContext");var W=Symbol("computedContext");var he=Symbol("configContext");var ta=[{identifier:"completionStatus",cardinality:"single",baseType:"string",value:"unknown",type:"outcome"},{identifier:"numAttempts",cardinality:"single",baseType:"integer",value:"0",type:"response"}];var G=Symbol("item");var Xt=Symbol("qtiContext");var vs={view:"candidate"},et=Symbol("testContext");var ys={items:[],testOutcomeVariables:[]},Ie=Symbol("testContext");function U(n,i){let e={waitUntilFirstUpdate:!1,...i};return(t,r)=>{let{update:o}=t,s=Array.isArray(n)?n:[n];t.update=function(a){s.forEach(l=>{let c=l;if(a.has(c)){let p=a.get(c),h=this[c];p!==h&&(!e.waitUntilFirstUpdate||this.hasUpdated)&&this[r](p,h)}}),o.call(this,a)}}}var tt={ATTRIBUTE:1,CHILD:2,PROPERTY:3,BOOLEAN_ATTRIBUTE:4,EVENT:5,ELEMENT:6},ae=n=>(...i)=>({_$litDirective$:n,values:i}),ke=class{constructor(i){}get _$AU(){return this._$AM._$AU}_$AT(i,e,t){this._$Ct=i,this._$AM=e,this._$Ci=t}_$AS(i,e){return this.update(i,e)}update(i,e){return this.render(...e)}};var{I:Ec}=Y,ia=n=>n===null||typeof n!="object"&&typeof n!="function";var oa=n=>n.strings===void 0,ra=()=>document.createComment(""),Qt=(n,i,e)=>{let t=n._$AA.parentNode,r=i===void 0?n._$AB:i._$AA;if(e===void 0){let o=t.insertBefore(ra(),r),s=t.insertBefore(ra(),r);e=new Ec(o,s,n,n.options)}else{let o=e._$AB.nextSibling,s=e._$AM,a=s!==n;if(a){let l;e._$AQ?.(n),e._$AM=n,e._$AP!==void 0&&(l=n._$AU)!==s._$AU&&e._$AP(l)}if(o!==r||a){let l=e._$AA;for(;l!==o;){let c=l.nextSibling;t.insertBefore(l,r),l=c}}}return e},rt=(n,i,e=n)=>(n._$AI(i,e),n),Sc={},sa=(n,i=Sc)=>n._$AH=i,na=n=>n._$AH,Ji=n=>{n._$AR(),n._$AA.remove()};var Lr=(n,i)=>{let e=n._$AN;if(e===void 0)return!1;for(let t of e)t._$AO?.(i,!1),Lr(t,i);return!0},Yi=n=>{let i,e;do{if((i=n._$AM)===void 0)break;e=i._$AN,e.delete(n),n=i}while(e?.size===0)},aa=n=>{for(let i;i=n._$AM;n=i){let e=i._$AN;if(e===void 0)i._$AN=e=new Set;else if(e.has(n))break;e.add(n),Ic(i)}};function Tc(n){this._$AN!==void 0?(Yi(this),this._$AM=n,aa(this)):this._$AM=n}function Ac(n,i=!1,e=0){let t=this._$AH,r=this._$AN;if(r!==void 0&&r.size!==0)if(i)if(Array.isArray(t))for(let o=e;o<t.length;o++)Lr(t[o],!1),Yi(t[o]);else t!=null&&(Lr(t,!1),Yi(t));else Lr(this,n)}var Ic=n=>{n.type==tt.CHILD&&(n._$AP??=Ac,n._$AQ??=Tc)},it=class extends ke{constructor(){super(...arguments),this._$AN=void 0}_$AT(i,e,t){super._$AT(i,e,t),aa(this),this.isConnected=i._$AU}_$AO(i,e=!0){i!==this.isConnected&&(this.isConnected=i,i?this.reconnected?.():this.disconnected?.()),e&&(Lr(this,i),Yi(this))}setValue(i){if(oa(this._$Ct))this._$Ct._$AI(i,this);else{let e=[...this._$Ct._$AH];e[this._$Ci]=i,this._$Ct._$AI(e,this,0)}}disconnected(){}reconnected(){}};var xs=class extends it{constructor(){super(...arguments);this.prevData={}}render(e){return N}update(e,[t]){return this.element!==e.element&&(this.element=e.element),this.host=e.options?.host||this.element,this.apply(t),this.groom(t),this.prevData={...t},N}apply(e){let t=this.#e(e),{prevData:r,element:o}=this;for(let s in t){let a=t[s];a!==r[s]&&(a===!0?o.setAttribute(s,""):a===!1?o.removeAttribute(s):a!=null?o.setAttribute(s,String(a)):o.removeAttribute(s))}}groom(e){let{prevData:t,element:r}=this;if(!t)return;let o=e?this.#e(e):{};for(let s in t)(!o||!(s in o))&&r.removeAttribute(s)}#e(e){return Object.fromEntries(Object.entries(e).filter(([t,r])=>typeof r=="function"?!1:t==="max-choices"&&r===0?!0:!(r===""||r===null||r===void 0)))}},Ju=ae(xs);var la=(t=>(t.Correct="correct",t.PartiallyCorrect="partially-correct",t.Incorrect="incorrect",t))(la||{}),$=class extends C{constructor(){super();this.disabled=!1;this.readonly=!1;this.showCorrectResponse=!1;this._handleShowCorrectResponseChange=(e,t)=>{this.toggleInternalCorrectResponse(t)};this.showFullCorrectResponse=!1;this._handleShowFullCorrectResponseChange=(e,t)=>{this.toggleFullCorrectResponse(t)};this.showCandidateCorrection=!1;this._handleShowCandidateCorrectionChange=(e,t)=>{this.toggleCandidateCorrection(t)};this._correctResponse=null;this._internals=this.attachInternals()}static{this.formAssociated=!0}get internals(){return this._internals}set correctResponseAttr(e){e===null?this._correctResponse=null:e.includes(",")?this._correctResponse=e.split(",").map(t=>t.trim()):this._correctResponse=e}get correctResponseAttr(){return this._correctResponse===null||this._correctResponse===void 0?null:Array.isArray(this._correctResponse)?this._correctResponse.join(","):this._correctResponse}get isFullCorrectResponse(){return this._isFullCorrectResponse}set isFullCorrectResponse(e){this._isFullCorrectResponse=e,e&&(this.disabled=!0,this.setAttribute("inert",""),this.setAttribute("response-identifier",this.responseIdentifier+"_cr"))}get correctResponse(){let e=this.responseVariable;return e?.correctResponse?e.correctResponse:this._correctResponse}set correctResponse(e){let t=this._correctResponse;this._correctResponse=e,e==null?this.removeAttribute("correct-response"):this.setAttribute("correct-response",Array.isArray(e)?e.join(","):e),this.requestUpdate("_correctResponse",t)}get correctness(){let e=this.correctResponse;if(!e)return null;let t=this.response;if(t==null||t===""||Array.isArray(t)&&t.length===0)return null;let r=Array.isArray(e)?e:[e],s=(Array.isArray(t)?t:[t]).filter(c=>c!=="");if(s.length===0)return null;let a=s.filter(c=>r.includes(c)).length,l=s.filter(c=>!r.includes(c)).length;return a===r.length&&l===0&&s.length===r.length?"correct":a>0&&(a<r.length||l>0)?"partially-correct":"incorrect"}get isInline(){return!1}get responseVariable(){if(!this._context?.variables)return;let e=this._context.variables.filter(r=>r.type==="response"),t=this.getAttribute("response-identifier");return e.find(r=>r.identifier===t)}toggleCorrectResponse(e){(this?.configContext?.correctResponseMode||"internal")==="full"?this.toggleFullCorrectResponse(e):this.toggleInternalCorrectResponse(e)}async toggleFullCorrectResponse(e){let t=this.nextSibling,r=t instanceof HTMLDivElement&&t?.classList.contains("full-correct-response"),o=this.correctResponse;if(!o)return;if(!(e&&(this?.configContext?.fullCorrectResponseOnlyWhenIncorrect===!1||this.correctness!=="correct"))){if(!r)return;this.parentElement?.removeChild(t);return}if(r)return;let a=this.cloneNode(!0);a.removeAttribute("show-full-correct-response"),a.removeAttribute("show-correct-response"),a.removeAttribute("show-candidate-correction");let l=document.createElement("div");l.classList.add("full-correct-response"),this.isInline?l.classList.add("full-correct-response-inline"):l.classList.add("full-correct-response-block"),l.role="full-correct-response",l.appendChild(a),a.isFullCorrectResponse=!0,this.parentElement?.insertBefore(l,this.nextSibling),await a.updateComplete,a.response=Array.isArray(o)?[...o]:o}toggleInternalCorrectResponse(e){this._internals.states.delete("show-correct-response"),e&&this.correctResponse&&this._internals.states.add("show-correct-response")}toggleCandidateCorrection(e){this._internals.states.delete("candidate-correct"),this._internals.states.delete("candidate-partially-correct"),this._internals.states.delete("candidate-incorrect"),e&&(this.correctness==="correct"&&this._internals.states.add("candidate-correct"),this.correctness==="partially-correct"&&this._internals.states.add("candidate-partially-correct"),this.correctness==="incorrect"&&this._internals.states.add("candidate-incorrect"))}get value(){return JSON.stringify(this.response)}set value(e){this.response=e?JSON.parse(e):null}reportValidity(){return this._internals.reportValidity()}reset(){this.response=null}formResetCallback(){this.reset()}connectedCallback(){super.connectedCallback(),!this.isFullCorrectResponse&&this.dispatchEvent(new CustomEvent("qti-register-interaction",{bubbles:!0,composed:!0,cancelable:!1,detail:{interactionElement:this,responseIdentifier:this.responseIdentifier}}))}firstUpdated(){this.isFullCorrectResponse||(this.showCorrectResponse&&this.toggleInternalCorrectResponse(!0),this.showFullCorrectResponse&&this.toggleFullCorrectResponse(!0),this.showCandidateCorrection&&this.toggleCandidateCorrection(!0))}saveResponse(e,t){this.dispatchEvent(new CustomEvent("qti-interaction-response",{bubbles:!0,composed:!0,cancelable:!1,detail:{responseIdentifier:this.responseIdentifier,response:Array.isArray(e)?[...e]:e,...t!==void 0?{state:t}:{}}}))}};d([P({context:G,subscribe:!0})],$.prototype,"_context",2),d([P({context:he,subscribe:!0})],$.prototype,"configContext",2),d([b({type:String,attribute:"response-identifier"})],$.prototype,"responseIdentifier",2),d([b({reflect:!0,type:Boolean})],$.prototype,"disabled",2),d([b({reflect:!0,type:Boolean})],$.prototype,"readonly",2),d([b({type:String})],$.prototype,"name",2),d([b({type:String,attribute:"correct-response",reflect:!0})],$.prototype,"correctResponseAttr",1),d([b({type:Boolean,attribute:"show-correct-response",reflect:!0})],$.prototype,"showCorrectResponse",2),d([U("showCorrectResponse",{waitUntilFirstUpdate:!0})],$.prototype,"_handleShowCorrectResponseChange",2),d([b({type:Boolean,attribute:"show-full-correct-response",reflect:!0})],$.prototype,"showFullCorrectResponse",2),d([U("showFullCorrectResponse",{waitUntilFirstUpdate:!0})],$.prototype,"_handleShowFullCorrectResponseChange",2),d([b({type:Boolean,attribute:"show-candidate-correction",reflect:!0})],$.prototype,"showCandidateCorrection",2),d([U("showCandidateCorrection",{waitUntilFirstUpdate:!0})],$.prototype,"_handleShowCandidateCorrectionChange",2),d([R()],$.prototype,"_isFullCorrectResponse",2),d([R()],$.prototype,"_correctResponse",2);var Jt=class extends C{render(){return x`<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==="multiple"||i==="ordered"?t:t[0]}};var L=class extends C{constructor(){super(...arguments);this.getVariables=()=>Array.from(this.children).map(e=>{switch(console.debug("getVariables",e.tagName.toLowerCase()),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 t==="QTI_CONTEXT"?this.qtiContext?.QTI_CONTEXT?{identifier:"QTI_CONTEXT",baseType:"record",value:this.qtiContext.QTI_CONTEXT,cardinality:"record",type:"context"}:(console.warn("QTI_CONTEXT not available"),{identifier:"QTI_CONTEXT",baseType:"record",value:this.qtiContext.QTI_CONTEXT,cardinality:"record",type:"context"}):this.context.variables.find(o=>o.identifier===t)||null}case"qti-multiple":{let r=e.getResult();return console.debug("values",r),r?.length>0?{identifier:"",baseType:r[0].baseType,value:r.map(o=>o.value),cardinality:"multiple",type:"response"}:null}case"qti-ordered":{let r=e.getResult();return r?.length>0?{identifier:"",baseType:r[0].baseType,value:r.map(o=>o.value),cardinality:"ordered",type:"response"}:null}case"qti-correct":{let t=e.getAttribute("identifier")||"",r=this.context?.variables?.find(o=>o.identifier===t)||null;return{baseType:r.baseType,value:r.correctResponse,cardinality:r.cardinality}}default:{try{return{baseType:"integer",value:e.getResult()?.toString()||null,cardinality:"single"}}catch{console.warn("default not sufficient")}return null}}}).filter(e=>e!==null)}static{this.styles=S`
|
|
1
|
+
var Ad=Object.defineProperty;var Td=Object.getOwnPropertyDescriptor;var ya=s=>{throw TypeError(s)};var d=(s,r,e,t)=>{for(var i=t>1?void 0:t?Td(r,e):r,n=s.length-1,o;n>=0;n--)(o=s[n])&&(i=(t?o(r,e,i):o(i))||i);return t&&i&&Ad(r,e,i),i};var $o=(s,r,e)=>r.has(s)||ya("Cannot "+e);var I=(s,r,e)=>($o(s,r,"read from private field"),e?e.call(s):r.get(s)),L=(s,r,e)=>r.has(s)?ya("Cannot add the same private member more than once"):r instanceof WeakSet?r.add(s):r.set(s,e),U=(s,r,e,t)=>($o(s,r,"write to private field"),t?t.call(s,e):r.set(s,e),e),P=(s,r,e)=>($o(s,r,"access private method"),e);var xa=class{get shadowRoot(){return this.__host.__shadowRoot}constructor(r){this.ariaActiveDescendantElement=null,this.ariaAtomic="",this.ariaAutoComplete="",this.ariaBrailleLabel="",this.ariaBrailleRoleDescription="",this.ariaBusy="",this.ariaChecked="",this.ariaColCount="",this.ariaColIndex="",this.ariaColIndexText="",this.ariaColSpan="",this.ariaControlsElements=null,this.ariaCurrent="",this.ariaDescribedByElements=null,this.ariaDescription="",this.ariaDetailsElements=null,this.ariaDisabled="",this.ariaErrorMessageElements=null,this.ariaExpanded="",this.ariaFlowToElements=null,this.ariaHasPopup="",this.ariaHidden="",this.ariaInvalid="",this.ariaKeyShortcuts="",this.ariaLabel="",this.ariaLabelledByElements=null,this.ariaLevel="",this.ariaLive="",this.ariaModal="",this.ariaMultiLine="",this.ariaMultiSelectable="",this.ariaOrientation="",this.ariaOwnsElements=null,this.ariaPlaceholder="",this.ariaPosInSet="",this.ariaPressed="",this.ariaReadOnly="",this.ariaRelevant="",this.ariaRequired="",this.ariaRoleDescription="",this.ariaRowCount="",this.ariaRowIndex="",this.ariaRowIndexText="",this.ariaRowSpan="",this.ariaSelected="",this.ariaSetSize="",this.ariaSort="",this.ariaValueMax="",this.ariaValueMin="",this.ariaValueNow="",this.ariaValueText="",this.role="",this.form=null,this.labels=[],this.states=new Set,this.validationMessage="",this.validity={},this.willValidate=!0,this.__host=r}checkValidity(){return console.warn("`ElementInternals.checkValidity()` was called on the server.This method always returns true."),!0}reportValidity(){return!0}setFormValue(){}setValidity(){}};var ke=function(s,r,e,t,i){if(t==="m")throw new TypeError("Private method is not writable");if(t==="a"&&!i)throw new TypeError("Private accessor was defined without a setter");if(typeof r=="function"?s!==r||!i:!r.has(s))throw new TypeError("Cannot write private member to an object whose class did not declare it");return t==="a"?i.call(s,e):i?i.value=e:r.set(s,e),e},Y=function(s,r,e,t){if(e==="a"&&!t)throw new TypeError("Private accessor was defined without a getter");if(typeof r=="function"?s!==r||!t:!r.has(s))throw new TypeError("Cannot read private member from an object whose class did not declare it");return e==="m"?t:e==="a"?t.call(s):t?t.value:r.get(s)},Qt,tn,rn,_r,Po,Lr,nn,At,$r,et,on,qa,wa=s=>typeof s=="boolean"?s:s?.capture??!1;var Vo=class{constructor(){this.__eventListeners=new Map,this.__captureEventListeners=new Map}addEventListener(r,e,t){if(e==null)return;let i=wa(t)?this.__captureEventListeners:this.__eventListeners,n=i.get(r);if(n===void 0)n=new Map,i.set(r,n);else if(n.has(e))return;let o=typeof t=="object"&&t?t:{};o.signal?.addEventListener("abort",()=>this.removeEventListener(r,e,t)),n.set(e,o??{})}removeEventListener(r,e,t){if(e==null)return;let i=wa(t)?this.__captureEventListeners:this.__eventListeners,n=i.get(r);n!==void 0&&(n.delete(e),n.size||i.delete(r))}dispatchEvent(r){let e=[this],t=this.__eventTargetParent;if(r.composed)for(;t;)e.push(t),t=t.__eventTargetParent;else for(;t&&t!==this.__host;)e.push(t),t=t.__eventTargetParent;let i=!1,n=!1,o=0,a=null,l=null,c=null,p=r.stopPropagation,u=r.stopImmediatePropagation;Object.defineProperties(r,{target:{get(){return a??l},...j},srcElement:{get(){return r.target},...j},currentTarget:{get(){return c},...j},eventPhase:{get(){return o},...j},composedPath:{value:()=>e,...j},stopPropagation:{value:()=>{i=!0,p.call(r)},...j},stopImmediatePropagation:{value:()=>{n=!0,u.call(r)},...j}});let h=(m,b,q)=>{typeof m=="function"?m(r):typeof m?.handleEvent=="function"&&m.handleEvent(r),b.once&&q.delete(m)},y=()=>(c=null,o=0,!r.defaultPrevented),v=e.slice().reverse();a=!this.__host||!r.composed?this:null;let w=m=>{for(l=this;l.__host&&m.includes(l.__host);)l=l.__host};for(let m of v){!a&&(!l||l===m.__host)&&w(v.slice(v.indexOf(m))),c=m,o=m===r.target?2:1;let b=m.__captureEventListeners.get(r.type);if(b){for(let[q,A]of b)if(h(q,A,b),n)return y()}if(i)return y()}let f=r.bubbles?e:[this];l=null;for(let m of f){!a&&(!l||m===l.__host)&&w(f.slice(0,f.indexOf(m)+1)),c=m,o=m===r.target?2:3;let b=m.__eventListeners.get(r.type);if(b){for(let[q,A]of b)if(h(q,A,b),n)return y()}if(i)return y()}return y()}},Do=Vo;var j={__proto__:null};j.enumerable=!0;Object.freeze(j);var No=(et=class{constructor(r,e={}){if(Qt.set(this,!1),tn.set(this,!1),rn.set(this,!1),_r.set(this,!1),Po.set(this,Date.now()),Lr.set(this,!1),nn.set(this,void 0),At.set(this,void 0),$r.set(this,void 0),this.NONE=0,this.CAPTURING_PHASE=1,this.AT_TARGET=2,this.BUBBLING_PHASE=3,arguments.length===0)throw new Error("The type argument must be specified");if(typeof e!="object"||!e)throw new Error('The "options" argument must be an object');let{bubbles:t,cancelable:i,composed:n}=e;ke(this,Qt,!!i,"f"),ke(this,tn,!!t,"f"),ke(this,rn,!!n,"f"),ke(this,nn,`${r}`,"f"),ke(this,At,null,"f"),ke(this,$r,!1,"f")}initEvent(r,e,t){throw new Error("Method not implemented.")}stopImmediatePropagation(){this.stopPropagation()}preventDefault(){ke(this,_r,!0,"f")}get target(){return Y(this,At,"f")}get currentTarget(){return Y(this,At,"f")}get srcElement(){return Y(this,At,"f")}get type(){return Y(this,nn,"f")}get cancelable(){return Y(this,Qt,"f")}get defaultPrevented(){return Y(this,Qt,"f")&&Y(this,_r,"f")}get timeStamp(){return Y(this,Po,"f")}composedPath(){return Y(this,$r,"f")?[Y(this,At,"f")]:[]}get returnValue(){return!Y(this,Qt,"f")||!Y(this,_r,"f")}get bubbles(){return Y(this,tn,"f")}get composed(){return Y(this,rn,"f")}get eventPhase(){return Y(this,$r,"f")?et.AT_TARGET:et.NONE}get cancelBubble(){return Y(this,Lr,"f")}set cancelBubble(r){r&&ke(this,Lr,!0,"f")}stopPropagation(){ke(this,Lr,!0,"f")}get isTrusted(){return!1}},Qt=new WeakMap,tn=new WeakMap,rn=new WeakMap,_r=new WeakMap,Po=new WeakMap,Lr=new WeakMap,nn=new WeakMap,At=new WeakMap,$r=new WeakMap,et.NONE=0,et.CAPTURING_PHASE=1,et.AT_TARGET=2,et.BUBBLING_PHASE=3,et);Object.defineProperties(No.prototype,{initEvent:j,stopImmediatePropagation:j,preventDefault:j,target:j,currentTarget:j,srcElement:j,type:j,cancelable:j,defaultPrevented:j,timeStamp:j,composedPath:j,returnValue:j,bubbles:j,composed:j,eventPhase:j,cancelBubble:j,stopPropagation:j,isTrusted:j});var Ca=(qa=class extends No{constructor(r,e={}){super(r,e),on.set(this,void 0),ke(this,on,e?.detail??null,"f")}initCustomEvent(r,e,t,i){throw new Error("Method not implemented.")}get detail(){return Y(this,on,"f")}},on=new WeakMap,qa);Object.defineProperties(Ca.prototype,{detail:j});var Oo=No,Ho=Ca;var re;var Xp=(re=class{constructor(){this.STYLE_RULE=1,this.CHARSET_RULE=2,this.IMPORT_RULE=3,this.MEDIA_RULE=4,this.FONT_FACE_RULE=5,this.PAGE_RULE=6,this.NAMESPACE_RULE=10,this.KEYFRAMES_RULE=7,this.KEYFRAME_RULE=8,this.SUPPORTS_RULE=12,this.COUNTER_STYLE_RULE=11,this.FONT_FEATURE_VALUES_RULE=14,this.__parentStyleSheet=null,this.cssText=""}get parentRule(){return null}get parentStyleSheet(){return this.__parentStyleSheet}get type(){return 0}},re.STYLE_RULE=1,re.CHARSET_RULE=2,re.IMPORT_RULE=3,re.MEDIA_RULE=4,re.FONT_FACE_RULE=5,re.PAGE_RULE=6,re.NAMESPACE_RULE=10,re.KEYFRAMES_RULE=7,re.KEYFRAME_RULE=8,re.SUPPORTS_RULE=12,re.COUNTER_STYLE_RULE=11,re.FONT_FEATURE_VALUES_RULE=14,re);globalThis.Event??=Oo;globalThis.CustomEvent??=Ho;var Ea=new WeakMap,Pr=s=>{let r=Ea.get(s);return r===void 0&&Ea.set(s,r=new Map),r},Id=class extends Do{constructor(){super(...arguments),this.__shadowRootMode=null,this.__shadowRoot=null,this.__internals=null}get attributes(){return Array.from(Pr(this)).map(([r,e])=>({name:r,value:e}))}get shadowRoot(){return this.__shadowRootMode==="closed"?null:this.__shadowRoot}get localName(){return this.constructor.__localName}get tagName(){return this.localName?.toUpperCase()}setAttribute(r,e){Pr(this).set(r,String(e))}removeAttribute(r){Pr(this).delete(r)}toggleAttribute(r,e){if(this.hasAttribute(r)){if(e===void 0||!e)return this.removeAttribute(r),!1}else return e===void 0||e?(this.setAttribute(r,""),!0):!1;return!0}hasAttribute(r){return Pr(this).has(r)}attachShadow(r){let e={host:this};return this.__shadowRootMode=r.mode,r&&r.mode==="open"&&(this.__shadowRoot=e),e}attachInternals(){if(this.__internals!==null)throw new Error("Failed to execute 'attachInternals' on 'HTMLElement': ElementInternals for the specified element was already attached.");let r=new xa(this);return this.__internals=r,r}getAttribute(r){return Pr(this).get(r)??null}};var Rd=class extends Id{},Uo=Rd;globalThis.litServerRoot??=Object.defineProperty(new Uo,"localName",{get(){return"lit-server-root"}});function kd(){let s,r;return{promise:new Promise((t,i)=>{s=t,r=i}),resolve:s,reject:r}}var Fo=class{constructor(){this.__definitions=new Map,this.__reverseDefinitions=new Map,this.__pendingWhenDefineds=new Map}define(r,e){if(this.__definitions.has(r))if(process.env.NODE_ENV==="development")console.warn(`'CustomElementRegistry' already has "${r}" defined. This may have been caused by live reload or hot module replacement in which case it can be safely ignored.
|
|
2
|
+
Make sure to test your application with a production build as repeat registrations will throw in production.`);else throw new Error(`Failed to execute 'define' on 'CustomElementRegistry': the name "${r}" has already been used with this registry`);if(this.__reverseDefinitions.has(e))throw new Error(`Failed to execute 'define' on 'CustomElementRegistry': the constructor has already been used with this registry for the tag name ${this.__reverseDefinitions.get(e)}`);e.__localName=r,this.__definitions.set(r,{ctor:e,observedAttributes:e.observedAttributes??[]}),this.__reverseDefinitions.set(e,r),this.__pendingWhenDefineds.get(r)?.resolve(e),this.__pendingWhenDefineds.delete(r)}get(r){return this.__definitions.get(r)?.ctor}getName(r){return this.__reverseDefinitions.get(r)??null}upgrade(r){throw new Error("customElements.upgrade is not currently supported in SSR. Please file a bug if you need it.")}async whenDefined(r){let e=this.__definitions.get(r);if(e)return e.ctor;let t=this.__pendingWhenDefineds.get(r);return t||(t=kd(),this.__pendingWhenDefineds.set(r,t)),t.promise}},Md=Fo;var Sa=new Md;var Vr=globalThis,sn=Vr.ShadowRoot&&(Vr.ShadyCSS===void 0||Vr.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,Bo=Symbol(),Aa=new WeakMap,Dr=class{constructor(r,e,t){if(this._$cssResult$=!0,t!==Bo)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=r,this.t=e}get styleSheet(){let r=this.o,e=this.t;if(sn&&r===void 0){let t=e!==void 0&&e.length===1;t&&(r=Aa.get(e)),r===void 0&&((this.o=r=new CSSStyleSheet).replaceSync(this.cssText),t&&Aa.set(e,r))}return r}toString(){return this.cssText}},Ta=s=>new Dr(typeof s=="string"?s:s+"",void 0,Bo),E=(s,...r)=>{let e=s.length===1?s[0]:r.reduce((t,i,n)=>t+(o=>{if(o._$cssResult$===!0)return o.cssText;if(typeof o=="number")return o;throw Error("Value passed to 'css' function must be a 'css' function result: "+o+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(i)+s[n+1],s[0]);return new Dr(e,s,Bo)},Ia=(s,r)=>{if(sn)s.adoptedStyleSheets=r.map(e=>e instanceof CSSStyleSheet?e:e.styleSheet);else for(let e of r){let t=document.createElement("style"),i=Vr.litNonce;i!==void 0&&t.setAttribute("nonce",i),t.textContent=e.cssText,s.appendChild(t)}},zo=sn||Vr.CSSStyleSheet===void 0?s=>s:s=>s instanceof CSSStyleSheet?(r=>{let e="";for(let t of r.cssRules)e+=t.cssText;return Ta(e)})(s):s;var{is:_d,defineProperty:Ld,getOwnPropertyDescriptor:$d,getOwnPropertyNames:Pd,getOwnPropertySymbols:Vd,getPrototypeOf:Dd}=Object,Hr=globalThis;Hr.customElements??=Sa;var Ra=Hr.trustedTypes,Nd=Ra?Ra.emptyScript:"",Od=Hr.reactiveElementPolyfillSupport,Nr=(s,r)=>s,Or={toAttribute(s,r){switch(r){case Boolean:s=s?Nd:null;break;case Object:case Array:s=s==null?s:JSON.stringify(s)}return s},fromAttribute(s,r){let e=s;switch(r){case Boolean:e=s!==null;break;case Number:e=s===null?null:Number(s);break;case Object:case Array:try{e=JSON.parse(s)}catch{e=null}}return e}},an=(s,r)=>!_d(s,r),ka={attribute:!0,type:String,converter:Or,reflect:!1,useDefault:!1,hasChanged:an};Symbol.metadata??=Symbol("metadata"),Hr.litPropertyMetadata??=new WeakMap;var Ue=class extends(globalThis.HTMLElement??Uo){static addInitializer(r){this._$Ei(),(this.l??=[]).push(r)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(r,e=ka){if(e.state&&(e.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(r)&&((e=Object.create(e)).wrapped=!0),this.elementProperties.set(r,e),!e.noAccessor){let t=Symbol(),i=this.getPropertyDescriptor(r,t,e);i!==void 0&&Ld(this.prototype,r,i)}}static getPropertyDescriptor(r,e,t){let{get:i,set:n}=$d(this.prototype,r)??{get(){return this[e]},set(o){this[e]=o}};return{get:i,set(o){let a=i?.call(this);n?.call(this,o),this.requestUpdate(r,a,t)},configurable:!0,enumerable:!0}}static getPropertyOptions(r){return this.elementProperties.get(r)??ka}static _$Ei(){if(this.hasOwnProperty(Nr("elementProperties")))return;let r=Dd(this);r.finalize(),r.l!==void 0&&(this.l=[...r.l]),this.elementProperties=new Map(r.elementProperties)}static finalize(){if(this.hasOwnProperty(Nr("finalized")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(Nr("properties"))){let e=this.properties,t=[...Pd(e),...Vd(e)];for(let i of t)this.createProperty(i,e[i])}let r=this[Symbol.metadata];if(r!==null){let e=litPropertyMetadata.get(r);if(e!==void 0)for(let[t,i]of e)this.elementProperties.set(t,i)}this._$Eh=new Map;for(let[e,t]of this.elementProperties){let i=this._$Eu(e,t);i!==void 0&&this._$Eh.set(i,e)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(r){let e=[];if(Array.isArray(r)){let t=new Set(r.flat(1/0).reverse());for(let i of t)e.unshift(zo(i))}else r!==void 0&&e.push(zo(r));return e}static _$Eu(r,e){let t=e.attribute;return t===!1?void 0:typeof t=="string"?t:typeof r=="string"?r.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(r=>this.enableUpdating=r),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(r=>r(this))}addController(r){(this._$EO??=new Set).add(r),this.renderRoot!==void 0&&this.isConnected&&r.hostConnected?.()}removeController(r){this._$EO?.delete(r)}_$E_(){let r=new Map,e=this.constructor.elementProperties;for(let t of e.keys())this.hasOwnProperty(t)&&(r.set(t,this[t]),delete this[t]);r.size>0&&(this._$Ep=r)}createRenderRoot(){let r=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return Ia(r,this.constructor.elementStyles),r}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(r=>r.hostConnected?.())}enableUpdating(r){}disconnectedCallback(){this._$EO?.forEach(r=>r.hostDisconnected?.())}attributeChangedCallback(r,e,t){this._$AK(r,t)}_$ET(r,e){let t=this.constructor.elementProperties.get(r),i=this.constructor._$Eu(r,t);if(i!==void 0&&t.reflect===!0){let n=(t.converter?.toAttribute!==void 0?t.converter:Or).toAttribute(e,t.type);this._$Em=r,n==null?this.removeAttribute(i):this.setAttribute(i,n),this._$Em=null}}_$AK(r,e){let t=this.constructor,i=t._$Eh.get(r);if(i!==void 0&&this._$Em!==i){let n=t.getPropertyOptions(i),o=typeof n.converter=="function"?{fromAttribute:n.converter}:n.converter?.fromAttribute!==void 0?n.converter:Or;this._$Em=i;let a=o.fromAttribute(e,n.type);this[i]=a??this._$Ej?.get(i)??a,this._$Em=null}}requestUpdate(r,e,t,i=!1,n){if(r!==void 0){let o=this.constructor;if(i===!1&&(n=this[r]),t??=o.getPropertyOptions(r),!((t.hasChanged??an)(n,e)||t.useDefault&&t.reflect&&n===this._$Ej?.get(r)&&!this.hasAttribute(o._$Eu(r,t))))return;this.C(r,e,t)}this.isUpdatePending===!1&&(this._$ES=this._$EP())}C(r,e,{useDefault:t,reflect:i,wrapped:n},o){t&&!(this._$Ej??=new Map).has(r)&&(this._$Ej.set(r,o??e??this[r]),n!==!0||o!==void 0)||(this._$AL.has(r)||(this.hasUpdated||t||(e=void 0),this._$AL.set(r,e)),i===!0&&this._$Em!==r&&(this._$Eq??=new Set).add(r))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(e){Promise.reject(e)}let r=this.scheduleUpdate();return r!=null&&await r,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(let[i,n]of this._$Ep)this[i]=n;this._$Ep=void 0}let t=this.constructor.elementProperties;if(t.size>0)for(let[i,n]of t){let{wrapped:o}=n,a=this[i];o!==!0||this._$AL.has(i)||a===void 0||this.C(i,void 0,n,a)}}let r=!1,e=this._$AL;try{r=this.shouldUpdate(e),r?(this.willUpdate(e),this._$EO?.forEach(t=>t.hostUpdate?.()),this.update(e)):this._$EM()}catch(t){throw r=!1,this._$EM(),t}r&&this._$AE(e)}willUpdate(r){}_$AE(r){this._$EO?.forEach(e=>e.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(r)),this.updated(r)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(r){return!0}update(r){this._$Eq&&=this._$Eq.forEach(e=>this._$ET(e,this[e])),this._$EM()}updated(r){}firstUpdated(r){}};Ue.elementStyles=[],Ue.shadowRootOptions={mode:"open"},Ue[Nr("elementProperties")]=new Map,Ue[Nr("finalized")]=new Map,Od?.({ReactiveElement:Ue}),(Hr.reactiveElementVersions??=[]).push("2.1.2");var hn=globalThis,Ma=s=>s,ln=hn.trustedTypes,_a=ln?ln.createPolicy("lit-html",{createHTML:s=>s}):void 0,Wo="$lit$",Be=`lit$${Math.random().toFixed(9).slice(2)}$`,Go="?"+Be,Hd=`<${Go}>`,Rt=hn.document===void 0?{createTreeWalker:()=>({})}:document,Ur=()=>Rt.createComment(""),Br=s=>s===null||typeof s!="object"&&typeof s!="function",Xo=Array.isArray,Na=s=>Xo(s)||typeof s?.[Symbol.iterator]=="function",jo=`[
|
|
3
|
+
\f\r]`,Fr=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,La=/-->/g,$a=/>/g,Tt=RegExp(`>|${jo}(?:([^\\s"'>=/]+)(${jo}*=${jo}*(?:[^
|
|
4
|
+
\f\r"'\`<>=]|("|')|))|$)`,"g"),Pa=/'/g,Va=/"/g,Oa=/^(?:script|style|textarea|title)$/i,Qo=s=>(r,...e)=>({_$litType$:s,strings:r,values:e}),x=Qo(1),fn=Qo(2),vu=Qo(3),Z=Symbol.for("lit-noChange"),O=Symbol.for("lit-nothing"),Da=new WeakMap,It=Rt.createTreeWalker(Rt,129);function Ha(s,r){if(!Xo(s)||!s.hasOwnProperty("raw"))throw Error("invalid template strings array");return _a!==void 0?_a.createHTML(r):r}var Fa=(s,r)=>{let e=s.length-1,t=[],i,n=r===2?"<svg>":r===3?"<math>":"",o=Fr;for(let a=0;a<e;a++){let l=s[a],c,p,u=-1,h=0;for(;h<l.length&&(o.lastIndex=h,p=o.exec(l),p!==null);)h=o.lastIndex,o===Fr?p[1]==="!--"?o=La:p[1]!==void 0?o=$a:p[2]!==void 0?(Oa.test(p[2])&&(i=RegExp("</"+p[2],"g")),o=Tt):p[3]!==void 0&&(o=Tt):o===Tt?p[0]===">"?(o=i??Fr,u=-1):p[1]===void 0?u=-2:(u=o.lastIndex-p[2].length,c=p[1],o=p[3]===void 0?Tt:p[3]==='"'?Va:Pa):o===Va||o===Pa?o=Tt:o===La||o===$a?o=Fr:(o=Tt,i=void 0);let y=o===Tt&&s[a+1].startsWith("/>")?" ":"";n+=o===Fr?l+Hd:u>=0?(t.push(c),l.slice(0,u)+Wo+l.slice(u)+Be+y):l+Be+(u===-2?a:y)}return[Ha(s,n+(s[e]||"<?>")+(r===2?"</svg>":r===3?"</math>":"")),t]},zr=class s{constructor({strings:r,_$litType$:e},t){let i;this.parts=[];let n=0,o=0,a=r.length-1,l=this.parts,[c,p]=Fa(r,e);if(this.el=s.createElement(c,t),It.currentNode=this.el.content,e===2||e===3){let u=this.el.content.firstChild;u.replaceWith(...u.childNodes)}for(;(i=It.nextNode())!==null&&l.length<a;){if(i.nodeType===1){if(i.hasAttributes())for(let u of i.getAttributeNames())if(u.endsWith(Wo)){let h=p[o++],y=i.getAttribute(u).split(Be),v=/([.?@])?(.*)/.exec(h);l.push({type:1,index:n,name:v[2],strings:y,ctor:v[1]==="."?dn:v[1]==="?"?pn:v[1]==="@"?un:Mt}),i.removeAttribute(u)}else u.startsWith(Be)&&(l.push({type:6,index:n}),i.removeAttribute(u));if(Oa.test(i.tagName)){let u=i.textContent.split(Be),h=u.length-1;if(h>0){i.textContent=ln?ln.emptyScript:"";for(let y=0;y<h;y++)i.append(u[y],Ur()),It.nextNode(),l.push({type:2,index:++n});i.append(u[h],Ur())}}}else if(i.nodeType===8)if(i.data===Go)l.push({type:2,index:n});else{let u=-1;for(;(u=i.data.indexOf(Be,u+1))!==-1;)l.push({type:7,index:n}),u+=Be.length-1}n++}}static createElement(r,e){let t=Rt.createElement("template");return t.innerHTML=r,t}};function kt(s,r,e=s,t){if(r===Z)return r;let i=t!==void 0?e._$Co?.[t]:e._$Cl,n=Br(r)?void 0:r._$litDirective$;return i?.constructor!==n&&(i?._$AO?.(!1),n===void 0?i=void 0:(i=new n(s),i._$AT(s,e,t)),t!==void 0?(e._$Co??=[])[t]=i:e._$Cl=i),i!==void 0&&(r=kt(s,i._$AS(s,r.values),i,t)),r}var cn=class{constructor(r,e){this._$AV=[],this._$AN=void 0,this._$AD=r,this._$AM=e}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(r){let{el:{content:e},parts:t}=this._$AD,i=(r?.creationScope??Rt).importNode(e,!0);It.currentNode=i;let n=It.nextNode(),o=0,a=0,l=t[0];for(;l!==void 0;){if(o===l.index){let c;l.type===2?c=new Yt(n,n.nextSibling,this,r):l.type===1?c=new l.ctor(n,l.name,l.strings,this,r):l.type===6&&(c=new mn(n,this,r)),this._$AV.push(c),l=t[++a]}o!==l?.index&&(n=It.nextNode(),o++)}return It.currentNode=Rt,i}p(r){let e=0;for(let t of this._$AV)t!==void 0&&(t.strings!==void 0?(t._$AI(r,t,e),e+=t.strings.length-2):t._$AI(r[e])),e++}},Yt=class s{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(r,e,t,i){this.type=2,this._$AH=O,this._$AN=void 0,this._$AA=r,this._$AB=e,this._$AM=t,this.options=i,this._$Cv=i?.isConnected??!0}get parentNode(){let r=this._$AA.parentNode,e=this._$AM;return e!==void 0&&r?.nodeType===11&&(r=e.parentNode),r}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(r,e=this){r=kt(this,r,e),Br(r)?r===O||r==null||r===""?(this._$AH!==O&&this._$AR(),this._$AH=O):r!==this._$AH&&r!==Z&&this._(r):r._$litType$!==void 0?this.$(r):r.nodeType!==void 0?this.T(r):Na(r)?this.k(r):this._(r)}O(r){return this._$AA.parentNode.insertBefore(r,this._$AB)}T(r){this._$AH!==r&&(this._$AR(),this._$AH=this.O(r))}_(r){this._$AH!==O&&Br(this._$AH)?this._$AA.nextSibling.data=r:this.T(Rt.createTextNode(r)),this._$AH=r}$(r){let{values:e,_$litType$:t}=r,i=typeof t=="number"?this._$AC(r):(t.el===void 0&&(t.el=zr.createElement(Ha(t.h,t.h[0]),this.options)),t);if(this._$AH?._$AD===i)this._$AH.p(e);else{let n=new cn(i,this),o=n.u(this.options);n.p(e),this.T(o),this._$AH=n}}_$AC(r){let e=Da.get(r.strings);return e===void 0&&Da.set(r.strings,e=new zr(r)),e}k(r){Xo(this._$AH)||(this._$AH=[],this._$AR());let e=this._$AH,t,i=0;for(let n of r)i===e.length?e.push(t=new s(this.O(Ur()),this.O(Ur()),this,this.options)):t=e[i],t._$AI(n),i++;i<e.length&&(this._$AR(t&&t._$AB.nextSibling,i),e.length=i)}_$AR(r=this._$AA.nextSibling,e){for(this._$AP?.(!1,!0,e);r!==this._$AB;){let t=Ma(r).nextSibling;Ma(r).remove(),r=t}}setConnected(r){this._$AM===void 0&&(this._$Cv=r,this._$AP?.(r))}},Mt=class{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(r,e,t,i,n){this.type=1,this._$AH=O,this._$AN=void 0,this.element=r,this.name=e,this._$AM=i,this.options=n,t.length>2||t[0]!==""||t[1]!==""?(this._$AH=Array(t.length-1).fill(new String),this.strings=t):this._$AH=O}_$AI(r,e=this,t,i){let n=this.strings,o=!1;if(n===void 0)r=kt(this,r,e,0),o=!Br(r)||r!==this._$AH&&r!==Z,o&&(this._$AH=r);else{let a=r,l,c;for(r=n[0],l=0;l<n.length-1;l++)c=kt(this,a[t+l],e,l),c===Z&&(c=this._$AH[l]),o||=!Br(c)||c!==this._$AH[l],c===O?r=O:r!==O&&(r+=(c??"")+n[l+1]),this._$AH[l]=c}o&&!i&&this.j(r)}j(r){r===O?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,r??"")}},dn=class extends Mt{constructor(){super(...arguments),this.type=3}j(r){this.element[this.name]=r===O?void 0:r}},pn=class extends Mt{constructor(){super(...arguments),this.type=4}j(r){this.element.toggleAttribute(this.name,!!r&&r!==O)}},un=class extends Mt{constructor(r,e,t,i,n){super(r,e,t,i,n),this.type=5}_$AI(r,e=this){if((r=kt(this,r,e,0)??O)===Z)return;let t=this._$AH,i=r===O&&t!==O||r.capture!==t.capture||r.once!==t.once||r.passive!==t.passive,n=r!==O&&(t===O||i);i&&this.element.removeEventListener(this.name,this,t),n&&this.element.addEventListener(this.name,this,r),this._$AH=r}handleEvent(r){typeof this._$AH=="function"?this._$AH.call(this.options?.host??this.element,r):this._$AH.handleEvent(r)}},mn=class{constructor(r,e,t){this.element=r,this.type=6,this._$AN=void 0,this._$AM=e,this.options=t}get _$AU(){return this._$AM._$AU}_$AI(r){kt(this,r)}},Ua={M:Wo,P:Be,A:Go,C:1,L:Fa,R:cn,D:Na,V:kt,I:Yt,H:Mt,N:pn,U:un,B:dn,F:mn},Fd=hn.litHtmlPolyfillSupport;Fd?.(zr,Yt),(hn.litHtmlVersions??=[]).push("3.3.2");var Ba=(s,r,e)=>{let t=e?.renderBefore??r,i=t._$litPart$;if(i===void 0){let n=e?.renderBefore??null;t._$litPart$=i=new Yt(r.insertBefore(Ur(),n),n,void 0,e??{})}return i._$AI(s),i};var Yo=globalThis,C=class extends Ue{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){let r=super.createRenderRoot();return this.renderOptions.renderBefore??=r.firstChild,r}update(r){let e=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(r),this._$Do=Ba(e,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return Z}};C._$litElement$=!0,C.finalized=!0,Yo.litElementHydrateSupport?.({LitElement:C});var Ud=Yo.litElementPolyfillSupport;Ud?.({LitElement:C});(Yo.litElementVersions??=[]).push("4.2.2");var k=s=>(r,e)=>{e!==void 0?e.addInitializer(()=>{customElements.define(s,r)}):customElements.define(s,r)};var Bd={attribute:!0,type:String,converter:Or,reflect:!1,hasChanged:an},zd=(s=Bd,r,e)=>{let{kind:t,metadata:i}=e,n=globalThis.litPropertyMetadata.get(i);if(n===void 0&&globalThis.litPropertyMetadata.set(i,n=new Map),t==="setter"&&((s=Object.create(s)).wrapped=!0),n.set(e.name,s),t==="accessor"){let{name:o}=e;return{set(a){let l=r.get.call(this);r.set.call(this,a),this.requestUpdate(o,l,s,!0,a)},init(a){return a!==void 0&&this.C(o,void 0,s,a),a}}}if(t==="setter"){let{name:o}=e;return function(a){let l=this[o];r.call(this,a),this.requestUpdate(o,l,s,!0,a)}}throw Error("Unsupported decorator location: "+t)};function g(s){return(r,e)=>typeof e=="object"?zd(s,r,e):((t,i,n)=>{let o=i.hasOwnProperty(n);return i.constructor.createProperty(n,t),o?Object.getOwnPropertyDescriptor(i,n):void 0})(s,r,e)}function M(s){return g({...s,state:!0,attribute:!1})}var tt=(s,r,e)=>(e.configurable=!0,e.enumerable=!0,Reflect.decorate&&typeof r!="object"&&Object.defineProperty(s,r,e),e);function Jt(s,r){return(e,t,i)=>{let n=o=>o.renderRoot?.querySelector(s)??null;if(r){let{get:o,set:a}=typeof t=="object"?e:i??(()=>{let l=Symbol();return{get(){return this[l]},set(c){this[l]=c}}})();return tt(e,t,{get(){let l=o.call(this);return l===void 0&&(l=n(this),(l!==null||this.hasUpdated)&&a.call(this,l)),l}})}return tt(e,t,{get(){return n(this)}})}}function za(s){return(r,e)=>{let{slot:t,selector:i}=s??{},n="slot"+(t?`[name=${t}]`:":not([name])");return tt(r,e,{get(){let o=this.renderRoot?.querySelector(n),a=o?.assignedElements(s)??[];return i===void 0?a:a.filter(l=>l.matches(i))}})}}function ja(s,r,e){Array.from(s.getElementsByTagName("*")).filter(n=>n.localName===r||n.localName?.toLowerCase()===r.toLowerCase()).forEach(n=>{let o=`${r}-${e}`,a=Ga(n,o);n.replaceWith(a)})}function Wa(s,r){s.querySelectorAll("*").forEach(e=>{let t=e.classList;t&&t.forEach(i=>{if(i.startsWith(`${r}:`)){let n=i.slice(`${r}:`.length),o=`${e.nodeName}-${n}`,a=Ga(e,o);e.replaceWith(a)}})})}function Ga(s,r){let e=s.ownerDocument.createElement(r);for(let t of s.attributes)e.setAttribute(t.name,t.value);for(;s.firstChild;)e.appendChild(s.firstChild);return e}function Xa(s){let r=[];return s.querySelectorAll("qti-assessment-item-ref").forEach(e=>{let t=e.getAttribute("identifier"),i=e.getAttribute("href"),n=e.getAttribute("category");r.push({identifier:t,href:i,category:n})}),r}function Kt(s,r){return fetch(s,{signal:r}).then(e=>{if(!e.ok)throw new Error(`HTTP error! status: ${e.status}`);return e.text()}).then(e=>new DOMParser().parseFromString(e,"text/xml")).catch(e=>{throw e.name==="AbortError"?e:new Error(`Failed to load XML: ${e.message}`)})}function Zt(s){return new DOMParser().parseFromString(s,"text/xml")}function Qa(s,r){if(s.nodeType===Node.ELEMENT_NODE){let e=s,t=r.createElement(e.localName);for(let i=0;i<e.attributes.length;i++){let n=e.attributes[i];t.setAttribute(n.localName,n.value)}for(let i=0;i<e.childNodes.length;i++)t.appendChild(Qa(e.childNodes[i],r));return t}return s.cloneNode(!1)}function er(s){let r=document.createDocumentFragment();for(let e=0;e<s.childNodes.length;e++)r.appendChild(Qa(s.childNodes[e],document));return r}function tr(s,r){r.endsWith("/")||(r+="/"),s.querySelectorAll("*").forEach(t=>{for(let i of["src","href","srcset","poster"]){let n=t.getAttribute(i)?.trim();if(n&&!/^(data:|https?:|blob:)/.test(n)){let o=r+encodeURI(n);t.setAttribute(i,o)}}})}function Ya(s){s.querySelectorAll('qti-custom-operator[class="js.org"] > qti-base-value').forEach(e=>{let t=document.createComment(e.textContent);e.replaceChild(t,e.firstChild)})}function Ja(s){s.querySelectorAll("qti-stylesheet").forEach(r=>r.remove())}function Ka(s){switch(s){case"qti-choice-interaction":case"qti-order-interaction":return"qti-simple-choice";case"qti-inline-choice-interaction":return"qti-inline-choice";case"qti-match-interaction":return["qti-simple-match-set:first-of-type qti-simple-associable-choice","qti-simple-match-set:last-of-type > qti-simple-associable-choice"];case"qti-gap-match-interaction":return"qti-gap-text";case"qti-associate-interaction":return"qti-simple-associable-choice";default:return null}}var Me=(s=!1)=>{let r,e="",t={load(i,n){e=i;let o=encodeURI(i);return s&&sessionStorage.getItem(o)?Promise.resolve(t.parse(sessionStorage.getItem(o))):Kt(i,n).then(a=>(r=a,t.shuffleInteractions(),s&&sessionStorage.setItem(o,new XMLSerializer().serializeToString(r)),t))},parse(i){return r=Zt(i),t},path:i=>(tr(r,i),e=null,t),fn(i){return i(r),t},pciHooks(i){let n=["hook","module"],o=i.substring(0,i.lastIndexOf("/"));for(let a of n)r.querySelectorAll("["+a+"]").forEach(c=>{let p=c.getAttribute(a);!p.startsWith("data:")&&!p.startsWith("http")&&(c.setAttribute("base-url",i),c.setAttribute("module",o+"/"+encodeURI(p+(p.endsWith(".js")?"":".js"))))});return t},async configurePci(i,n,o="qti-portable-custom-interaction"){let a=[],l=r.querySelectorAll(o);if(l.length===0)return t;let c=null,p=null,u=async()=>{if(c===null)try{c=await n(i,"/modules/module_resolution.js")}catch{c=null}if(p===null)try{p=await n(i,"/modules/fallback_module_resolution.js")}catch{p=null}};for(let h of Array.from(l)){h.setAttribute("data-base-url",i);let y=h.getAttribute("custom-interaction-type-identifier");y&&a.includes(y)&&(y=y+a.length,h.setAttribute("custom-interaction-type-identifier",y),a.push(y)),y&&a.push(y);let v=h.querySelector("qti-interaction-modules");if(v&&v.getAttribute("primary-configuration")){await u();let w=v.getAttribute("primary-configuration");if(w)try{let f=await n(i,`/${w}`),m=Array.from(v.querySelectorAll("qti-interaction-module"));for(let b of m){let q=b.getAttribute("id");if(q&&f.paths&&f.paths[q]){let A=f.paths[q],S=Array.isArray(A)?A[0]:A;if(b.setAttribute("primary-path",S),p&&p.paths&&p.paths[q]){let T=p.paths[q];Array.isArray(T)?b.setAttribute("fallback-path",T[0]):b.setAttribute("fallback-path",T)}}}if(f.paths){for(let b in f.paths)if(!v.querySelector(`qti-interaction-module[id="${b}"]`)){let A=r.createElement("qti-interaction-module");A.setAttribute("id",b);let S=Array.isArray(f.paths[b])?f.paths[b][0]:f.paths[b];if(A.setAttribute("primary-path",S),p&&p.paths&&p.paths[b]){let T=p.paths[b];Array.isArray(T)?A.setAttribute("fallback-path",T[0]):A.setAttribute("fallback-path",T)}v.appendChild(A)}}f.urlArgs&&v.setAttribute("url-args",f.urlArgs)}catch(f){console.warn(`Failed to load primary configuration: ${w}`,f)}}else if(await u(),c){h.querySelector("qti-interaction-modules")===null?(v=r.createElement("qti-interaction-modules"),h.appendChild(v)):v=h.querySelector("qti-interaction-modules");for(let w in c.paths){let f=c.paths[w],m="";p&&p.paths&&p.paths[w]&&(m=p.paths[w]);let b=Array.isArray(f)?f:[f],q=Array.isArray(m)?m:[m],A=b.map((S,T)=>{let _=q.length>T?q[T]:"";return{primaryPath:S,fallbackPath:_}});for(let S of q)A.some(T=>T.fallbackPath===S)||A.push({primaryPath:b.length>0?b[0]:S,fallbackPath:S});for(let S of A){let T=r.createElement("qti-interaction-module");S.fallbackPath&&T.setAttribute("fallback-path",S.fallbackPath),T.setAttribute("id",w),T.setAttribute("primary-path",S.primaryPath),v&&v.appendChild(T)}}}}return t},shuffleInteractions(){let i=r.querySelectorAll('[shuffle="true"]'),n=Array.from(i).filter(o=>o.tagName?.toLowerCase().endsWith("-interaction"));for(let o of n){let a=Ka(o.tagName.toLowerCase()),l=Array.isArray(a)?a:[a];for(let c of l){let p=Array.from(o.querySelectorAll(c)),u=p.map((m,b)=>({element:m,fixed:m.hasAttribute("fixed")&&m.getAttribute("fixed")==="true",originalOrder:b})).filter(m=>m.fixed),h=p.filter(m=>!m.hasAttribute("fixed")||m.getAttribute("fixed")!=="true");if(h.length<=1)return console.warn("Shuffling is not possible with fewer than 2 non-fixed elements."),t;let y=[...h],v=!1,w=0;for(;!v&&w<20;){w++;for(let m=h.length-1;m>0;m--){let b=Math.floor(Math.random()*(m+1));[h[m],h[b]]=[h[b],h[m]]}v=!h.every((m,b)=>m===y[b])}if(!v)return console.warn("Failed to shuffle the choices after multiple attempts."),null;o.removeAttribute("shuffle");let f=0;for(let m of h)m.parentElement.insertBefore(m,u[f]?.element),f++;for(let m of u)m.element.parentElement.insertBefore(m.element,h[m.originalOrder])}}return t},extendElementName:(i,n)=>(ja(r,i,n),t),extendElementsWithClass:(i="extend")=>(Wa(r,i),t),customInteraction(i,n){let o=r.querySelector("qti-custom-interaction"),a=o.querySelector("object");return o.setAttribute("data-base-ref",i),o.setAttribute("data-base-item",i+n),o.setAttribute("data",a.getAttribute("data")),o.setAttribute("width",a.getAttribute("width")),o.setAttribute("height",a.getAttribute("height")),o.removeChild(a),t},convertCDATAtoComment(){return Ya(r),t},stripStyleSheets(){return Ja(r),t},html(){return e!==null&&tr(r,e.substring(0,e.lastIndexOf("/"))),new XMLSerializer().serializeToString(er(r))},xml(){return new XMLSerializer().serializeToString(r)},htmlDoc(){return e!==null&&tr(r,e.substring(0,e.lastIndexOf("/"))),er(r)},xmlDoc(){return r}};return t};var Za=()=>{let s,r={async load(e,t){return new Promise(i=>{Kt(e,t).then(n=>(s=n,i(r)))})},parse(e){s=Zt(e)},assessmentTest(){let e=s.querySelector('resource[type="imsqti_test_xmlv3p0"]');return{href:e.getAttribute("href"),identifier:e.getAttribute("identifier")}}};return r};var rr=()=>{let s,r={async load(e,t){return new Promise((i,n)=>{Kt(e,t).then(o=>(s=o,r.path(e.substring(0,e.lastIndexOf("/"))),i(r)))})},parse(e){return s=Zt(e),r},path:e=>(tr(s,e),r),fn(e){return e(s),r},items(){return Xa(s)},html(){return new XMLSerializer().serializeToString(er(s))},xml(){return new XMLSerializer().serializeToString(s)},htmlDoc(){return er(s)},xmlDoc(){return s}};return r};var el=s=>{class r extends s{constructor(...i){super(...i);this.navigate=null;this.cacheTransform=!1;this.requestTimeout=3e4;this.postLoadTransformCallback=null;this.postLoadTestTransformCallback=null;this._activeController=null;this._loadResults=[];this._navigationId=0;this._loadingState={expectedItems:0,connectedItems:0,expectedStimulus:0,loadedStimulus:0,isComplete:!1};this._loadedStimulusHrefs=new Set;this._loadingStimulusHrefs=new Set;this._bindEventHandlers()}navigateTo(i,n){let o=n||this._getDefaultNavigationId(i);o&&this.dispatchEvent(new CustomEvent("qti-request-navigation",{detail:{type:i,id:o},bubbles:!0,composed:!0}))}_bindEventHandlers(){this.addEventListener("qti-request-navigation",this._handleNavigationRequest.bind(this)),this.addEventListener("qti-assessment-test-connected",this._handleTestConnected.bind(this)),this.addEventListener("qti-assessment-item-connected",this._handleItemConnected.bind(this)),this.addEventListener("qti-assessment-stimulus-ref-connected",this._handleStimulusRefConnected.bind(this))}_handleTestConnected(i){this._testElement=i.detail,this._initializeNavigation()}_handleItemConnected(i){let n=i.detail;this._loadingState.connectedItems++;let o=n.querySelectorAll("qti-assessment-stimulus-ref");this._loadingState.expectedStimulus+=o.length,this._checkLoadingComplete()}async _handleStimulusRefConnected(i){i.preventDefault();let{element:n,item:o}=i;if(console.info("Stimulus ref connected:",{identifier:n.identifier,href:n.href,item:o.identifier}),this._loadedStimulusHrefs.has(n.href)){console.info("Stimulus already loaded, skipping:",n.href),this._loadingState.loadedStimulus++,this._checkLoadingComplete();return}if(this._loadingStimulusHrefs.has(n.href)){console.info("Stimulus already loading, skipping duplicate:",n.href),this._loadingState.loadedStimulus++,this._checkLoadingComplete();return}this._loadingStimulusHrefs.add(n.href),console.info("Starting stimulus load:",n.href);try{await this._loadStimulusRef(n,o),this._loadedStimulusHrefs.add(n.href),this._loadingState.loadedStimulus++,console.info("Stimulus loaded successfully:",n.href),this._checkLoadingComplete()}catch(a){a.name!=="AbortError"&&console.warn(`Failed to load stimulus ${n.identifier}:`,a),this._loadingState.loadedStimulus++,this._checkLoadingComplete()}finally{this._loadingStimulusHrefs.delete(n.href)}}_getDefaultNavigationId(i){return i==="section"?this._testElement?.querySelector("qti-assessment-section")?.identifier:this.sessionContext?.navItemRefId??this._testElement?.querySelector("qti-assessment-item-ref")?.identifier}_initializeNavigation(){if(!this.navigate)return;let i=this._getDefaultNavigationId(this.navigate);i&&this.navigateTo(this.navigate,i)}async _handleNavigationRequest({detail:i}){if(!i?.id)return;this._cancelPreviousNavigation();let n=++this._navigationId,o=new AbortController;try{this._dispatchLoadingStarted(i.type,i.id),this._activeController=o,await this._executeNavigation(i.type,i.id,n,o)}catch(a){this._handleNavigationError(a,i.type,i.id)}finally{this._activeController===o&&(this._activeController=null),this._dispatchLoadingEnded(i.type,i.id)}}_handleNavigationError(i,n,o){i.name!=="AbortError"&&this._dispatchError(this._createNavigationError(i,n,o))}async _executeNavigation(i,n,o,a){i==="item"?await this._navigateToItem(n,o,a):await this._navigateToSection(n,o,a)}async _navigateToItem(i,n,o){let a=this._findItemRef(i);this._updateSessionContext(a,i),this._resetLoadingState(),this._loadingState.expectedItems=1,await this._loadItems([i],n,o),await this._waitForLoadingComplete(n,o),!this._isStaleNavigation(n,o)&&this._dispatchTestLoaded(this._loadResults)}async _navigateToSection(i,n,o){let l=this._findSection(i)?.closest("qti-test-part")?.identifier;this.sessionContext={...this.sessionContext,navPartId:l,navSectionId:i,navItemRefId:null};let c=this._getSectionItemIds(i);this._resetLoadingState(),this._loadingState.expectedItems=c.length,await this._loadItems(c,n,o),await this._waitForLoadingComplete(n,o),!this._isStaleNavigation(n,o)&&this._dispatchTestLoaded(this._loadResults)}_resetLoadingState(){this._loadingState={expectedItems:0,connectedItems:0,expectedStimulus:0,loadedStimulus:0,isComplete:!1},this._loadedStimulusHrefs.clear(),this._loadingStimulusHrefs.clear()}_checkLoadingComplete(){let i=this._loadingState.connectedItems>=this._loadingState.expectedItems,n=this._loadingState.loadedStimulus>=this._loadingState.expectedStimulus;i&&n&&!this._loadingState.isComplete&&(this._loadingState.isComplete=!0)}async _waitForLoadingComplete(i,n){for(;!this._loadingState.isComplete;){if(this._isStaleNavigation(i,n))return;await new Promise(o=>setTimeout(o,10))}}getLoadingProgress(){return{...this._loadingState}}async _loadStimulusRef(i,n){console.info("Loading stimulus:",i.href);let o=await this._loadStimulus(i.href);console.info("Stimulus loaded, applying content:",o?"has content":"no content"),this._applyStimulusContent(o,i,n)}_applyStimulusContent(i,n,o){if(!i){console.warn("No stimulus content to apply");return}let a=i.querySelectorAll("qti-stimulus-body, qti-stylesheet");if(console.info(`Found ${a.length} stimulus elements to apply for ${n.identifier}`),a.length===0){console.warn("No qti-stimulus-body or qti-stylesheet elements found in stimulus");return}let l=[],c=o.querySelector(`[data-stimulus-idref="${n.identifier}"]`);if(c)l.push(c),console.info("Found specific target:",c);else{let p=Array.from(this.querySelectorAll(`[data-stimulus-idref="${n.identifier}"]`));if(p.length>0)l=p,console.info("Found targets by identifier:",p.length);else{let u=Array.from(this.querySelectorAll("[data-stimulus-idref]"));l=u,console.info("Using fallback targets:",u.length)}}if(l.length===0){console.warn("No targets found for stimulus content");return}l.forEach((p,u)=>{p.innerHTML="";let h=Array.from(a).map(y=>y.cloneNode(!0));p.append(...h),console.info(`Applied stimulus content to target ${u+1}/${l.length}`)})}_cancelPreviousNavigation(){this._activeController&&(this._activeController.abort(),console.info("Previous navigation request cancelled")),this._clearNavigationState()}_clearNavigationState(){this._clearLoadedItems(),this._resetLoadingState(),this._loadResults=[]}async _loadItems(i,n,o){if(!this._testElement||i.length===0)return;let a=i.map(p=>this._findItemRef(p));this._clearLoadedItems(),this._clearStimulusRef();let c=(await Promise.all(a.map(p=>this._loadSingleItem(p,n,o)))).filter(Boolean);this._isStaleNavigation(n,o)||(c.forEach(({itemRef:p,doc:u})=>{p&&u&&(p.xmlDoc=u)}),c.forEach(({itemRef:p})=>{let u=p?.identifier;if(!p||!u)return;let h=this.testContext.items.find(y=>y.identifier===u)?.state;h!==void 0&&p.updateComplete.then(()=>{let y=p.assessmentItem;y&&(y.state=h)})}),this._loadResults=c)}async _loadSingleItem(i,n,o){try{let a=await Me(this.cacheTransform).load(i.href,o.signal);return this.postLoadTransformCallback&&(a=await this.postLoadTransformCallback(a,i)),this._isStaleNavigation(n,o)?null:{itemRef:i,doc:a.htmlDoc()}}catch(a){if(a.name==="AbortError")throw console.info(`Item load for ${i.identifier} was aborted`),a;return console.warn(`Failed to load item ${i.identifier}:`,a),null}}async _loadStimulus(i){return(await Me().load(i,this._activeController?.signal)).htmlDoc()}_findItemRef(i){let n=this._testElement?.querySelector(`qti-assessment-item-ref[identifier="${i}"]`);if(!n)throw new Error(`Item with identifier "${i}" not found`);return n}_findSection(i){return this._testElement?.querySelector(`qti-assessment-section[identifier="${i}"]`)||null}_updateSessionContext(i,n){let o=i.closest("qti-test-part")?.identifier,a=i.closest("qti-assessment-section")?.identifier;this.sessionContext={...this.sessionContext,navPartId:o,navSectionId:a,navItemRefId:n}}_getSectionItemIds(i){return Array.from(this._testElement.querySelectorAll(`qti-assessment-section[identifier="${i}"] > qti-assessment-item-ref`)).map(n=>n.identifier).filter(Boolean)}_clearLoadedItems(){let i=this._testElement?.querySelectorAll("qti-assessment-item-ref");Array.from(i||[]).forEach(n=>{n.xmlDoc=null})}_clearStimulusRef(){this.querySelectorAll("[data-stimulus-idref]").forEach(i=>i.innerHTML="")}_isStaleNavigation(i,n){return n.signal.aborted||i!==this._navigationId}_createNavigationError(i,n,o){return{message:i.message||`Failed to load ${n}: ${o}`,details:i,itemId:n==="item"?o:void 0,sectionId:n==="section"?o:void 0}}_dispatchLoadingStarted(i,n){this.dispatchEvent(new CustomEvent("qti-navigation-loading-started",{detail:{type:i,id:n},bubbles:!0,composed:!0}))}_dispatchLoadingEnded(i,n){this.dispatchEvent(new CustomEvent("qti-navigation-loading-ended",{detail:{type:i,id:n},bubbles:!0,composed:!0}))}_dispatchError(i){this.dispatchEvent(new CustomEvent("qti-navigation-error",{detail:i,bubbles:!0,composed:!0}))}_dispatchTestLoaded(i){requestAnimationFrame(()=>{this.dispatchEvent(new CustomEvent("qti-test-loaded",{detail:i.map(({itemRef:n})=>({identifier:n?.identifier,element:n})),bubbles:!0,composed:!0}))})}}return d([g({type:String})],r.prototype,"navigate",2),d([g({type:Boolean,attribute:"cache-transform"})],r.prototype,"cacheTransform",2),d([g({type:Number})],r.prototype,"requestTimeout",2),d([g({attribute:!1})],r.prototype,"postLoadTransformCallback",2),d([g({attribute:!1})],r.prototype,"postLoadTestTransformCallback",2),r};var tl=s=>{class r extends s{constructor(...t){super(...t),this.sessionContext={...this.sessionContext,view:"candidate"},this.addEventListener("on-test-switch-view",i=>{this.sessionContext={...this.sessionContext,view:i.detail},this._updateElementView()}),this.addEventListener("qti-assessment-test-connected",()=>{this._updateElementView()}),this.addEventListener("qti-assessment-item-connected",i=>{this._updateElementView(),this._setCorrectResponseVisibility(i.detail)})}willUpdate(t){super.willUpdate(t),t.has("sessionContext")&&this._updateElementView()}_updateElementView(){if(this._testElement){Array.from(this._testElement.querySelectorAll("[view]")).forEach(o=>{o.classList.toggle("show",o.getAttribute("view")===this.sessionContext.view)});let n=this._testElement.querySelector(`qti-assessment-item-ref[identifier="${this.sessionContext.navItemRefId}"]`)?.assessmentItem;n&&n.showCorrectResponse(this.sessionContext.view==="scorer")}}_setCorrectResponseVisibility(t){t.showCorrectResponse(this.sessionContext.view==="scorer")}}return r};var rt=class extends Event{constructor(r,e,t,i){super("context-request",{bubbles:!0,composed:!0}),this.context=r,this.contextTarget=e,this.callback=t,this.subscribe=i??!1}};var ir=class{constructor(r,e,t,i){if(this.subscribe=!1,this.provided=!1,this.value=void 0,this.t=(n,o)=>{this.unsubscribe&&(this.unsubscribe!==o&&(this.provided=!1,this.unsubscribe()),this.subscribe||this.unsubscribe()),this.value=n,this.host.requestUpdate(),this.provided&&!this.subscribe||(this.provided=!0,this.callback&&this.callback(n,o)),this.unsubscribe=o},this.host=r,e.context!==void 0){let n=e;this.context=n.context,this.callback=n.callback,this.subscribe=n.subscribe??!1}else this.context=e,this.callback=t,this.subscribe=i??!1;this.host.addController(this)}hostConnected(){this.dispatchRequest()}hostDisconnected(){this.unsubscribe&&(this.unsubscribe(),this.unsubscribe=void 0)}dispatchRequest(){this.host.dispatchEvent(new rt(this.context,this.host,this.t,this.subscribe))}};var gn=class{get value(){return this.o}set value(r){this.setValue(r)}setValue(r,e=!1){let t=e||!Object.is(r,this.o);this.o=r,t&&this.updateObservers()}constructor(r){this.subscriptions=new Map,this.updateObservers=()=>{for(let[e,{disposer:t}]of this.subscriptions)e(this.o,t)},r!==void 0&&(this.value=r)}addCallback(r,e,t){if(!t)return void r(this.value);this.subscriptions.has(r)||this.subscriptions.set(r,{disposer:()=>{this.subscriptions.delete(r)},consumerHost:e});let{disposer:i}=this.subscriptions.get(r);r(this.value,i)}clearCallbacks(){this.subscriptions.clear()}};var Jo=class extends Event{constructor(r,e){super("context-provider",{bubbles:!0,composed:!0}),this.context=r,this.contextTarget=e}},nr=class extends gn{constructor(r,e,t){super(e.context!==void 0?e.initialValue:t),this.onContextRequest=i=>{if(i.context!==this.context)return;let n=i.contextTarget??i.composedPath()[0];n!==this.host&&(i.stopPropagation(),this.addCallback(i.callback,n,i.subscribe))},this.onProviderRequest=i=>{if(i.context!==this.context||(i.contextTarget??i.composedPath()[0])===this.host)return;let n=new Set;for(let[o,{consumerHost:a}]of this.subscriptions)n.has(o)||(n.add(o),a.dispatchEvent(new rt(this.context,a,o,!0)));i.stopPropagation()},this.host=r,e.context!==void 0?this.context=e.context:this.context=e,this.attachListeners(),this.host.addController?.(this)}attachListeners(){this.host.addEventListener("context-request",this.onContextRequest),this.host.addEventListener("context-provider",this.onProviderRequest)}hostConnected(){this.host.dispatchEvent(new Jo(this.context,this.host))}};function ce({context:s}){return(r,e)=>{let t=new WeakMap;if(typeof e=="object")return{get(){return r.get.call(this)},set(i){return t.get(this).setValue(i),r.set.call(this,i)},init(i){return t.set(this,new nr(this,{context:s,initialValue:i})),i}};{r.constructor.addInitializer((o=>{t.set(o,new nr(o,{context:s}))}));let i=Object.getOwnPropertyDescriptor(r,e),n;if(i===void 0){let o=new WeakMap;n={get(){return o.get(this)},set(a){t.get(this).setValue(a),o.set(this,a)},configurable:!0,enumerable:!0}}else{let o=i.set;n={...i,set(a){t.get(this).setValue(a),o?.call(this,a)}}}return void Object.defineProperty(r,e,n)}}}function $({context:s,subscribe:r}){return(e,t)=>{typeof t=="object"?t.addInitializer((function(){new ir(this,{context:s,callback:i=>{e.set.call(this,i)},subscribe:r})})):e.constructor.addInitializer((i=>{new ir(i,{context:s,callback:n=>{i[t]=n},subscribe:r})}))}}var it=Symbol("computedItemContext");var G=Symbol("computedContext");var be=Symbol("configContext");var rl=[{identifier:"completionStatus",cardinality:"single",baseType:"string",value:"unknown",type:"outcome"},{identifier:"numAttempts",cardinality:"single",baseType:"integer",value:"0",type:"response"}];var W=Symbol("item");var or=Symbol("qtiContext");var Ko={view:"candidate"},nt=Symbol("testContext");var Zo={items:[],testOutcomeVariables:[]},_e=Symbol("testContext");function B(s,r){let e={waitUntilFirstUpdate:!1,...r};return(t,i)=>{let{update:n}=t,o=Array.isArray(s)?s:[s];t.update=function(a){o.forEach(l=>{let c=l;if(a.has(c)){let p=a.get(c),u=this[c];p!==u&&(!e.waitUntilFirstUpdate||this.hasUpdated)&&this[i](p,u)}}),n.call(this,a)}}}var ot={ATTRIBUTE:1,CHILD:2,PROPERTY:3,BOOLEAN_ATTRIBUTE:4,EVENT:5,ELEMENT:6},de=s=>(...r)=>({_$litDirective$:s,values:r}),Le=class{constructor(r){}get _$AU(){return this._$AM._$AU}_$AT(r,e,t){this._$Ct=r,this._$AM=e,this._$Ci=t}_$AS(r,e){return this.update(r,e)}update(r,e){return this.render(...e)}};var{I:jd}=Ua,il=s=>s,ol=s=>s===null||typeof s!="object"&&typeof s!="function";var sl=s=>s.strings===void 0,nl=()=>document.createComment(""),sr=(s,r,e)=>{let t=s._$AA.parentNode,i=r===void 0?s._$AB:r._$AA;if(e===void 0){let n=t.insertBefore(nl(),i),o=t.insertBefore(nl(),i);e=new jd(n,o,s,s.options)}else{let n=e._$AB.nextSibling,o=e._$AM,a=o!==s;if(a){let l;e._$AQ?.(s),e._$AM=s,e._$AP!==void 0&&(l=s._$AU)!==o._$AU&&e._$AP(l)}if(n!==i||a){let l=e._$AA;for(;l!==n;){let c=il(l).nextSibling;il(t).insertBefore(l,i),l=c}}}return e},st=(s,r,e=s)=>(s._$AI(r,e),s),Wd={},al=(s,r=Wd)=>s._$AH=r,ll=s=>s._$AH,bn=s=>{s._$AR(),s._$AA.remove()};var jr=(s,r)=>{let e=s._$AN;if(e===void 0)return!1;for(let t of e)t._$AO?.(r,!1),jr(t,r);return!0},vn=s=>{let r,e;do{if((r=s._$AM)===void 0)break;e=r._$AN,e.delete(s),s=r}while(e?.size===0)},cl=s=>{for(let r;r=s._$AM;s=r){let e=r._$AN;if(e===void 0)r._$AN=e=new Set;else if(e.has(s))break;e.add(s),Qd(r)}};function Gd(s){this._$AN!==void 0?(vn(this),this._$AM=s,cl(this)):this._$AM=s}function Xd(s,r=!1,e=0){let t=this._$AH,i=this._$AN;if(i!==void 0&&i.size!==0)if(r)if(Array.isArray(t))for(let n=e;n<t.length;n++)jr(t[n],!1),vn(t[n]);else t!=null&&(jr(t,!1),vn(t));else jr(this,s)}var Qd=s=>{s.type==ot.CHILD&&(s._$AP??=Xd,s._$AQ??=Gd)},at=class extends Le{constructor(){super(...arguments),this._$AN=void 0}_$AT(r,e,t){super._$AT(r,e,t),cl(this),this.isConnected=r._$AU}_$AO(r,e=!0){r!==this.isConnected&&(this.isConnected=r,r?this.reconnected?.():this.disconnected?.()),e&&(jr(this,r),vn(this))}setValue(r){if(sl(this._$Ct))this._$Ct._$AI(r,this);else{let e=[...this._$Ct._$AH];e[this._$Ci]=r,this._$Ct._$AI(e,this,0)}}disconnected(){}reconnected(){}};var es=class extends at{constructor(){super(...arguments);this.prevData={}}render(e){return O}update(e,[t]){return this.element!==e.element&&(this.element=e.element),this.host=e.options?.host||this.element,this.apply(t),this.groom(t),this.prevData={...t},O}apply(e){let t=this.#e(e),{prevData:i,element:n}=this;for(let o in t){let a=t[o];a!==i[o]&&(a===!0?n.setAttribute(o,""):a===!1?n.removeAttribute(o):a!=null?n.setAttribute(o,String(a)):n.removeAttribute(o))}}groom(e){let{prevData:t,element:i}=this;if(!t)return;let n=e?this.#e(e):{};for(let o in t)(!n||!(o in n))&&i.removeAttribute(o)}#e(e){return Object.fromEntries(Object.entries(e).filter(([t,i])=>typeof i=="function"?!1:t==="max-choices"&&i===0?!0:!(i===""||i===null||i===void 0)))}},Ih=de(es);var dl=(t=>(t.Correct="correct",t.PartiallyCorrect="partially-correct",t.Incorrect="incorrect",t))(dl||{}),V=class extends C{constructor(){super();this.disabled=!1;this.readonly=!1;this.showCorrectResponse=!1;this._handleShowCorrectResponseChange=(e,t)=>{this.toggleInternalCorrectResponse(t)};this.showFullCorrectResponse=!1;this._handleShowFullCorrectResponseChange=(e,t)=>{this.toggleFullCorrectResponse(t)};this.showCandidateCorrection=!1;this._handleShowCandidateCorrectionChange=(e,t)=>{this.toggleCandidateCorrection(t)};this._correctResponse=null;this._internals=this.attachInternals()}static{this.formAssociated=!0}get internals(){return this._internals}set correctResponseAttr(e){e===null?this._correctResponse=null:e.includes(",")?this._correctResponse=e.split(",").map(t=>t.trim()):this._correctResponse=e}get correctResponseAttr(){return this._correctResponse===null||this._correctResponse===void 0?null:Array.isArray(this._correctResponse)?this._correctResponse.join(","):this._correctResponse}get isFullCorrectResponse(){return this._isFullCorrectResponse}set isFullCorrectResponse(e){this._isFullCorrectResponse=e,e&&(this.disabled=!0,this.setAttribute("inert",""),this.setAttribute("response-identifier",this.responseIdentifier+"_cr"))}get correctResponse(){let e=this.responseVariable;return e?.correctResponse?e.correctResponse:this._correctResponse}set correctResponse(e){let t=this._correctResponse;this._correctResponse=e,e==null?this.removeAttribute("correct-response"):this.setAttribute("correct-response",Array.isArray(e)?e.join(","):e),this.requestUpdate("_correctResponse",t)}get correctness(){let e=this.correctResponse;if(!e)return null;let t=this.response;if(t==null||t===""||Array.isArray(t)&&t.length===0)return null;let i=Array.isArray(e)?e:[e],o=(Array.isArray(t)?t:[t]).filter(c=>c!=="");if(o.length===0)return null;let a=o.filter(c=>i.includes(c)).length,l=o.filter(c=>!i.includes(c)).length;return a===i.length&&l===0&&o.length===i.length?"correct":a>0&&(a<i.length||l>0)?"partially-correct":"incorrect"}get isInline(){return!1}get responseVariable(){if(!this._context?.variables)return;let e=this._context.variables.filter(i=>i.type==="response"),t=this.getAttribute("response-identifier");return e.find(i=>i.identifier===t)}toggleCorrectResponse(e){(this?.configContext?.correctResponseMode||"internal")==="full"?this.toggleFullCorrectResponse(e):this.toggleInternalCorrectResponse(e)}async toggleFullCorrectResponse(e){let t=this.nextSibling,i=t instanceof HTMLDivElement&&t?.classList.contains("full-correct-response"),n=this.correctResponse;if(!n)return;if(!(e&&(this?.configContext?.fullCorrectResponseOnlyWhenIncorrect===!1||this.correctness!=="correct"))){if(!i)return;this.parentElement?.removeChild(t);return}if(i)return;let a=this.cloneNode(!0);a.removeAttribute("show-full-correct-response"),a.removeAttribute("show-correct-response"),a.removeAttribute("show-candidate-correction");let l=document.createElement("div");l.classList.add("full-correct-response"),this.isInline?l.classList.add("full-correct-response-inline"):l.classList.add("full-correct-response-block"),l.role="full-correct-response",l.appendChild(a),a.isFullCorrectResponse=!0,this.parentElement?.insertBefore(l,this.nextSibling),await a.updateComplete,a.response=Array.isArray(n)?[...n]:n}toggleInternalCorrectResponse(e){this._internals.states.delete("show-correct-response"),e&&this.correctResponse&&this._internals.states.add("show-correct-response")}toggleCandidateCorrection(e){this._internals.states.delete("candidate-correct"),this._internals.states.delete("candidate-partially-correct"),this._internals.states.delete("candidate-incorrect"),e&&(this.correctness==="correct"&&this._internals.states.add("candidate-correct"),this.correctness==="partially-correct"&&this._internals.states.add("candidate-partially-correct"),this.correctness==="incorrect"&&this._internals.states.add("candidate-incorrect"))}get value(){return JSON.stringify(this.response)}set value(e){this.response=e?JSON.parse(e):null}reportValidity(){return this._internals.reportValidity()}reset(){this.response=null}formResetCallback(){this.reset()}connectedCallback(){super.connectedCallback(),!this.isFullCorrectResponse&&this.dispatchEvent(new CustomEvent("qti-register-interaction",{bubbles:!0,composed:!0,cancelable:!1,detail:{interactionElement:this,responseIdentifier:this.responseIdentifier}}))}firstUpdated(){this.isFullCorrectResponse||(this.showCorrectResponse&&this.toggleInternalCorrectResponse(!0),this.showFullCorrectResponse&&this.toggleFullCorrectResponse(!0),this.showCandidateCorrection&&this.toggleCandidateCorrection(!0))}saveResponse(e,t){this.dispatchEvent(new CustomEvent("qti-interaction-response",{bubbles:!0,composed:!0,cancelable:!1,detail:{responseIdentifier:this.responseIdentifier,response:Array.isArray(e)?[...e]:e,...t!==void 0?{state:t}:{}}}))}};d([$({context:W,subscribe:!0})],V.prototype,"_context",2),d([$({context:be,subscribe:!0})],V.prototype,"configContext",2),d([g({type:String,attribute:"response-identifier"})],V.prototype,"responseIdentifier",2),d([g({reflect:!0,type:Boolean})],V.prototype,"disabled",2),d([g({reflect:!0,type:Boolean})],V.prototype,"readonly",2),d([g({type:String})],V.prototype,"name",2),d([g({type:String,attribute:"correct-response",reflect:!0})],V.prototype,"correctResponseAttr",1),d([g({type:Boolean,attribute:"show-correct-response",reflect:!0})],V.prototype,"showCorrectResponse",2),d([B("showCorrectResponse",{waitUntilFirstUpdate:!0})],V.prototype,"_handleShowCorrectResponseChange",2),d([g({type:Boolean,attribute:"show-full-correct-response",reflect:!0})],V.prototype,"showFullCorrectResponse",2),d([B("showFullCorrectResponse",{waitUntilFirstUpdate:!0})],V.prototype,"_handleShowFullCorrectResponseChange",2),d([g({type:Boolean,attribute:"show-candidate-correction",reflect:!0})],V.prototype,"showCandidateCorrection",2),d([B("showCandidateCorrection",{waitUntilFirstUpdate:!0})],V.prototype,"_handleShowCandidateCorrectionChange",2),d([M()],V.prototype,"_isFullCorrectResponse",2),d([M()],V.prototype,"_correctResponse",2);var ar=class extends C{render(){return x`<slot></slot>`}defaultValues(r){let e=Array.from(this.querySelectorAll("qti-default-value > qti-value"));if(e.length===0)return null;let t=e.map(i=>i.innerHTML.trim());return t.length>1||r==="multiple"||r==="ordered"?t:t[0]}};var R=class extends C{constructor(){super(...arguments);this.getVariables=()=>Array.from(this.children).map(e=>{switch(console.debug("getVariables",e.tagName.toLowerCase()),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 t==="QTI_CONTEXT"?this.qtiContext?.QTI_CONTEXT?{identifier:"QTI_CONTEXT",baseType:"record",value:this.qtiContext.QTI_CONTEXT,cardinality:"record",type:"context"}:(console.warn("QTI_CONTEXT not available"),{identifier:"QTI_CONTEXT",baseType:"record",value:this.qtiContext.QTI_CONTEXT,cardinality:"record",type:"context"}):this.context.variables.find(n=>n.identifier===t)||null}case"qti-multiple":{let i=e.getResult();return console.debug("values",i),i?.length>0?{identifier:"",baseType:i[0].baseType,value:i.map(n=>n.value),cardinality:"multiple",type:"response"}:null}case"qti-ordered":{let i=e.getResult();return i?.length>0?{identifier:"",baseType:i[0].baseType,value:i.map(n=>n.value),cardinality:"ordered",type:"response"}:null}case"qti-repeat":{let i=e.getResult();return i?.length>0?i:null}case"qti-correct":{let t=e.getAttribute("identifier")||"",i=this.context?.variables?.find(n=>n.identifier===t)||null;return{baseType:i.baseType,value:i.correctResponse,cardinality:i.cardinality}}default:{try{return{baseType:"integer",value:e.getResult()?.toString()||null,cardinality:"single"}}catch{console.warn("default not sufficient")}return null}}}).flatMap(e=>Array.isArray(e)?e:[e]).filter(e=>e!==null)}static{this.styles=E`
|
|
5
5
|
slot {
|
|
6
6
|
display: none;
|
|
7
7
|
}
|
|
8
8
|
`}render(){return x`<pre>${JSON.stringify(this.result,null,2)}</pre>
|
|
9
|
-
<slot></slot>`}calculate(){return this.result=this.getResult(),this.result}getResult(){throw new Error("Not implemented")}};d([R()],L.prototype,"result",2),d([P({context:G,subscribe:!0}),R()],L.prototype,"context",2),d([P({context:Xt,subscribe:!0}),R()],L.prototype,"qtiContext",2);var fe=class extends L{calculate(){return this.result=this.getResult(),this.result}getResult(){throw new Error("Not implemented")}};var kc=()=>new Intl.NumberFormat().format(.1).replace(/\d/g,""),Pr=n=>{if(typeof n=="string")return n;let i=kc();return i==="."?n.toLocaleString():n.toString().replace(".","").replace(i,".")};function qs(n){return n==null}function Ki(n){return n.replace(/([^:]\/)\/+/g,"$1").replace(/\/\//g,"/").replace("http:/","http://").replace("https:/","https://")}var le=class extends C{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=!qs(this.identifier)&&!qs(e?.value)&&this.identifier===e.value||!1,this.#e(t)}#e(i){this.showStatus=i&&this.showHide==="show"||!i&&this.showHide==="hide"?"on":"off"}};d([b({type:String,attribute:"show-hide"})],le.prototype,"showHide",2),d([b({type:String,attribute:"outcome-identifier"})],le.prototype,"outcomeIdentifier",2),d([b({type:String})],le.prototype,"identifier",2),d([b({type:String,attribute:!1})],le.prototype,"showStatus",2),d([P({context:G,subscribe:!0}),R()],le.prototype,"_context",2);var ca=class extends C{};var K=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,o]=i.split(" ").map(Number),[s,...a]=e.split(","),l=a.map(Number);switch(s.toLowerCase()){case"circle":case"default":{let[c,p,h]=l;return l.length!==3?(console.warn(`Invalid circle definition: ${e}`),!1):Math.sqrt((r-c)**2+(o-p)**2)<=h}case"rect":{let[c,p,h,m]=l;return l.length!==4?(console.warn(`Invalid rectangle definition: ${e}`),!1):r>=c&&r<=h&&o>=p&&o<=m}case"ellipse":{let[c,p,h,m]=l;if(l.length!==4)return console.warn(`Invalid ellipse definition: ${e}`),!1;let y=(r-c)**2/h**2,v=(o-p)**2/m**2;return y+v<=1}case"poly":{if(l.length<6||l.length%2!==0)return console.warn(`Invalid polygon definition: ${e}`),!1;let c=[];for(let p=0;p<l.length;p+=2)c.push({x:l[p],y:l[p+1]});return this.isPointInPolygon({x:r,y:o},c)}default:return console.warn(`Unsupported shape type: ${s}`),!1}}static isPointInPolygon(i,e){let t=!1;for(let r=0,o=e.length-1;r<e.length;o=r++){let s=e[r].x,a=e[r].y,l=e[o].x,c=e[o].y;a>i.y!=c>i.y&&i.x<(l-s)*(i.y-a)/(c-a)+s&&(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),o=parseInt(e,10);if(!isNaN(r)&&!isNaN(o))return r===o;console.error(`Cannot convert ${i} and/or ${e} to int.`);break}case"float":{let r=parseFloat(i),o=parseFloat(e);if(!isNaN(r)&&!isNaN(o))return r===o;console.error(`couldn't convert ${i} and/or ${e} to float.`);break}case"pair":case"directedPair":{let r=i.split(" ").sort(),o=e.split(" ").sort();if(r.length===2&&o.length===2)return t==="pair"&&(r.sort(),o.sort()),r.join(" ")===o.join(" ");console.error(`compared two pair but one of the values does not have 2 values: 1: ${i} 2: ${e}`);break}}return!1}};var ws=n=>{class i extends n{constructor(...r){super(...r);this.testContext=ys;this.sessionContext=vs;this._updateItemInTestContext=r=>{let o=r._context,s=o.identifier,a=o.variables,l=this.testContext.items.find(c=>c?.identifier===s);if(!l){console.warn(`Item IDs between assessment.xml and item.xml should match: ${s} is not found!`);return}if(l.variables?.length===1)this._updateItemVariablesInTestContext(s,a);else{let c=[...r.variables];for(let p of l.variables){let h=c.find(m=>m.identifier===p.identifier);h?h.value=p.value:c.push(p)}r.variables=c}};this._initializeEventListeners()}updateItemVariables(r,o){let s=this.testContext.items.find(l=>l.identifier===r);s&&(s.variables=s.variables.map(l=>{let c=o.find(p=>p.identifier===l.identifier);return c?{...l,...c}:l}));let a=this._testElement.querySelector(`qti-assessment-item-ref[identifier="${r}"]`);a&&a.assessmentItem&&(a.assessmentItem.variables=o)}_initializeEventListeners(){this.addEventListener("qti-assessment-test-connected",r=>{if(this.testContext=ys,this.sessionContext=vs,this.testContext&&this.testContext.items.length>0)return;this._testElement=r.detail;let o=Array.from(this._testElement.querySelectorAll("qti-assessment-item-ref")).map(s=>({href:s.href,identifier:s.identifier,category:s.category,variables:[{identifier:"completionStatus",value:"not_attempted",type:"outcome"}]}));this.testContext={...this.testContext,items:o}}),this.addEventListener("qti-assessment-item-connected",r=>{let o=r.detail,s=o.closest("qti-assessment-item-ref")?.identifier;s&&(o.assessmentItemRefId=s),this._updateItemInTestContext(r.detail)}),this.addEventListener("qti-item-context-updated",r=>{this._updateItemVariablesInTestContext(r.detail.itemContext.identifier,r.detail.itemContext.variables,r.detail.itemContext.state)})}_updateItemVariablesInTestContext(r,o,s){this.testContext={...this.testContext,items:this.testContext.items.map(a=>a.identifier!==r?a:{...a,variables:o.map(l=>{let c=a.variables.find(p=>p.identifier===l.identifier);return c?{...c,...l}:l}),...s!==void 0?{state:s?{...s}:void 0}:{}})},this.dispatchEvent(new CustomEvent("qti-test-context-updated",{detail:this.testContext,bubbles:!1,composed:!1}))}}return d([b({attribute:!1,type:Object}),ne({context:Ie})],i.prototype,"testContext",2),d([b({attribute:!1,type:Object}),ne({context:et})],i.prototype,"sessionContext",2),i},da=class extends ws(C){};var pa=n=>{class i extends n{constructor(...t){super(...t),this.addEventListener("qti-register-variable",r=>{this.testContext={...this.testContext,testOutcomeVariables:[...this.testContext.testOutcomeVariables||[],r.detail.variable]},r.stopPropagation()}),this.addEventListener("qti-set-outcome-value",r=>{let{outcomeIdentifier:o,value:s}=r.detail;this.updateOutcomeVariable(o,s),r.stopPropagation()})}outcomeProcessing(){let t=this.querySelector("qti-outcome-processing");return t?(t?.process(),!0):!1}updateOutcomeVariable(t,r){let o=this.getOutcome(t);if(!o){console.warn(`Can not set qti-outcome-identifier: ${t}, it is not available`);return}this.testContext={...this.testContext,testOutcomeVariables:this.testContext.testOutcomeVariables?.map(s=>s.identifier!==t?s:{...s,value:o.cardinality==="single"?r:[...s.value,r]})}}getOutcome(t){return this.getVariable(t)}getVariable(t){return this.testContext.testOutcomeVariables?.find(r=>r.identifier===t)||null}}return i};var Zi=class extends Zn(ea(pa(ws(C)))){async connectedCallback(){super.connectedCallback(),await this.updateComplete,this.dispatchEvent(new CustomEvent("qti-test-connected",{detail:this}))}render(){return x`<slot></slot>`}};Zi=d([k("qti-test")],Zi);var ua={fromAttribute(n){return n==="true"},toAttribute(n){return n?"true":"false"}},Fe=class extends C{constructor(){super(...arguments);this.weigths=new Map}createRenderRoot(){return this}get assessmentItem(){return this.renderRoot?.querySelector("qti-assessment-item")}async connectedCallback(){super.connectedCallback(),await this.updateComplete,this.dispatchEvent(new CustomEvent("qti-assessment-item-ref-connected",{bubbles:!0,composed:!0,detail:{identifier:this.identifier,href:this.href,category:this.category}}))}render(){return this.myTemplate?this.myTemplate({xmlDoc:this.xmlDoc}):this.xmlDoc}};d([b({type:String})],Fe.prototype,"category",2),d([b({type:String})],Fe.prototype,"identifier",2),d([b({type:Boolean,converter:ua})],Fe.prototype,"required",2),d([b({type:Boolean,converter:ua})],Fe.prototype,"fixed",2),d([b({type:String})],Fe.prototype,"href",2),d([b({type:Object,attribute:!1})],Fe.prototype,"xmlDoc",2);customElements.get("qti-assessment-item-ref")||customElements.define("qti-assessment-item-ref",Fe);var Cs={fromAttribute(n){return n==="true"},toAttribute(n){return n?"true":"false"}},Be=class extends C{get title(){return this.#e}set title(i){this.#e=i,this.removeAttribute("title"),this.setAttribute("data-title",i)}#e="";async connectedCallback(){this.#e=this.getAttribute("title")||"",super.connectedCallback(),await this.updateComplete,this.dispatchEvent(new Event("qti-assessment-section-connected",{bubbles:!0,composed:!0}))}render(){return x`<slot name="qti-rubric-block"></slot><slot></slot>`}};d([b({type:String})],Be.prototype,"identifier",2),d([b({type:String})],Be.prototype,"required",2),d([b({type:Boolean,converter:Cs})],Be.prototype,"fixed",2),d([b({type:Boolean,converter:Cs})],Be.prototype,"visible",2),d([b({type:Boolean,converter:Cs,attribute:"keep-together"})],Be.prototype,"keepTogether",2),d([P({context:Ie,subscribe:!0})],Be.prototype,"_testContext",2);customElements.get("qti-assessment-section")||customElements.define("qti-assessment-section",Be);var Dr,It=class extends C{constructor(){super(...arguments);_(this,Dr,"")}get title(){return I(this,Dr)}set title(e){B(this,Dr,e),this.removeAttribute("title"),this.setAttribute("data-title",e)}async connectedCallback(){super.connectedCallback(),await this.updateComplete,this.dispatchEvent(new CustomEvent("qti-assessment-test-connected",{detail:this,bubbles:!0,composed:!0}))}render(){return x` <slot></slot>`}};Dr=new WeakMap,d([b({type:String})],It.prototype,"identifier",2),d([b({type:String})],It.prototype,"title",1),d([P({context:Ie,subscribe:!0})],It.prototype,"_testContext",2),It=d([k("qti-assessment-test")],It);var $r,Ue=class extends C{constructor(){super(...arguments);this.identifier="";this.class="";this.navigationMode="nonlinear";this.submissionMode="individual";_(this,$r,"")}get title(){return I(this,$r)}set title(e){B(this,$r,e),this.removeAttribute("title"),this.setAttribute("data-title",e)}async connectedCallback(){super.connectedCallback(),await this.updateComplete,this.dispatchEvent(new Event("qti-test-part-connected",{bubbles:!0,composed:!0}))}render(){return x` <slot></slot>`}};$r=new WeakMap,d([b({type:String})],Ue.prototype,"identifier",2),d([b({type:String})],Ue.prototype,"class",2),d([b({type:String,attribute:"navigation-mode"})],Ue.prototype,"navigationMode",2),d([b({type:String,attribute:"submission-mode"})],Ue.prototype,"submissionMode",2),Ue=d([k("qti-test-part")],Ue);customElements.get("qti-test-part")||customElements.define("qti-test-part",Ue);var Or,Yt,Vr,Kt,ge,de,ma,ha,Nr,Hr,Fr,Br,Ur,zr,fa,Es,ga,ce=class extends C{constructor(){super(...arguments);_(this,de);_(this,Or);_(this,Yt,null);this.identifier="";this.adaptive="false";this.timeDependent=null;this._handleDisabledChange=(e,t)=>{I(this,ge).forEach(r=>r.disabled=t)};this._handleReadonlyChange=(e,t)=>I(this,ge).forEach(r=>r.readonly=t);this._context={variables:ta};_(this,Vr,{...this._context,variables:this._context.variables});_(this,Kt,[]);_(this,ge,[]);_(this,Nr,e=>{e.stopImmediatePropagation(),this._context={...this._context,variables:[...this._context.variables,e.detail.variable]},B(this,Vr,this._context),e.stopPropagation()});_(this,Hr,e=>{e.stopImmediatePropagation();let t=e.detail;I(this,Kt).push(t),(Number(this._context.variables.find(o=>o.identifier==="numAttempts")?.value)||0)>0&&t.checkShowFeedback(t.outcomeIdentifier)});_(this,Fr,e=>{e.stopImmediatePropagation(),I(this,ge).push(e.detail.interactionElement)});_(this,Br,e=>{e.stopImmediatePropagation();let{responseIdentifier:t,countAttempt:r}=e.detail;this.validate(),this.updateResponseVariable(t,"true"),this.processResponse(r)});_(this,Ur,e=>{e.stopImmediatePropagation();let{outcomeIdentifier:t,value:r}=e.detail;this.updateOutcomeVariable(t,r),e.stopPropagation()});_(this,zr,e=>{e.stopImmediatePropagation();let{responseIdentifier:t,response:r,state:o}=e.detail;this.updateResponseVariable(t,r),o!==void 0&&(this._context={...this._context,state:{...this._context.state||{},[t]:o}}),this.dispatchEvent(new CustomEvent("qti-item-context-updated",{bubbles:!0,composed:!0,detail:{itemContext:this._context}}))})}get title(){return I(this,Or)}set title(e){B(this,Or,e),this.removeAttribute("title"),this.setAttribute("data-title",e)}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(o=>o.identifier===t.identifier);return r?{...t,...r,interpolationTable:t.interpolationTable}:t})},this._context.variables.forEach(t=>{if(t.type==="response"){let r=I(this,ge).find(o=>o.responseIdentifier===t.identifier);r&&(r.response=t.value)}}),this.variables.forEach(t=>{t.type==="outcome"&&I(this,Kt).forEach(r=>r.checkShowFeedback(t.identifier))})}get state(){return this._context.state}set state(e){this._context={...this._context,state:e?{...e}:void 0}}set responses(e){if(e)for(let t of e){this.getResponse(t.responseIdentifier)&&this.updateResponseVariable(t.responseIdentifier,t.response);let o=I(this,ge).find(s=>s.getAttribute("response-identifier")===t.responseIdentifier);o&&(o.response=t.response)}}render(){return x`<slot></slot>`}connectedCallback(){D(this,de,ma).call(this),super.connectedCallback(),this.updateComplete.then(()=>{this.dispatchEvent(new CustomEvent("qti-assessment-item-connected",{bubbles:!0,composed:!0,detail:this})),D(this,de,fa).call(this)})}disconnectedCallback(){D(this,de,ha).call(this),super.disconnectedCallback()}showCorrectResponse(e){for(let t of I(this,ge))t.toggleCorrectResponse(e);document.querySelectorAll("item-show-correct-response").forEach(t=>{t.shown=e})}showCandidateCorrection(e){for(let t of I(this,ge))t.toggleCandidateCorrection(e);document.querySelectorAll("item-show-candidate-correction").forEach(t=>{t.shown=e})}processResponse(e=!0,t=!0){this.validate(t),e&&this.updateOutcomeVariable("numAttempts",(+this._context.variables.find(s=>s.identifier==="numAttempts")?.value+1).toString()),this.adaptive==="false"&&D(this,de,ga).call(this);let r=this.querySelector("qti-response-processing"),o=!!(r&&typeof r.process=="function");return o&&r.process(),this.adaptive==="false"&&this.updateOutcomeVariable("completionStatus",D(this,de,Es).call(this)),this.dispatchEvent(new CustomEvent("qti-item-context-updated",{bubbles:!0,composed:!0,detail:{itemContext:this._context}})),o}resetResponses(){this._context=I(this,Vr)}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.showCandidateCorrection(!1),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",D(this,de,Es).call(this))}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(o=>o.identifier!==e?o:{...o,value:r.cardinality==="single"||Array.isArray(t)?t:[t]})},I(this,Kt).forEach(o=>o.checkShowFeedback(e)),this.dispatchEvent(new CustomEvent("qti-outcome-changed",{bubbles:!0,composed:!0,detail:{item:this.identifier,outcomeIdentifier:e,value:this._context.variables.find(o=>o.identifier===e)?.value}}))}validate(e=!0){let t=I(this,ge).every(r=>r.validate());return e&&this.reportValidity(),t}reportValidity(){for(let e of I(this,ge))e.reportValidity()}};Or=new WeakMap,Yt=new WeakMap,Vr=new WeakMap,Kt=new WeakMap,ge=new WeakMap,de=new WeakSet,ma=function(){this.addEventListener("qti-register-variable",I(this,Nr)),this.addEventListener("qti-register-feedback",I(this,Hr)),this.addEventListener("qti-register-interaction",I(this,Fr)),this.addEventListener("end-attempt",I(this,Br)),this.addEventListener("qti-set-outcome-value",I(this,Ur)),this.addEventListener("qti-interaction-response",I(this,zr))},ha=function(){this.removeEventListener("qti-register-variable",I(this,Nr)),this.removeEventListener("qti-register-feedback",I(this,Hr)),this.removeEventListener("qti-register-interaction",I(this,Fr)),this.removeEventListener("end-attempt",I(this,Br)),this.removeEventListener("qti-set-outcome-value",I(this,Ur)),this.removeEventListener("qti-interaction-response",I(this,zr))},Nr=new WeakMap,Hr=new WeakMap,Fr=new WeakMap,Br=new WeakMap,Ur=new WeakMap,zr=new WeakMap,fa=function(){B(this,Yt,this.querySelector("qti-template-processing")),I(this,Yt)&&I(this,Yt).process()},Es=function(){let e=this.validate(!1);return e===!0?"completed":e===!1?"incomplete":"not_attempted"},ga=function(){this._context={...this._context,variables:this._context.variables.map(e=>{if(e.type!=="outcome")return e;let o=("defaultValue"in e?e.defaultValue:null)??null;return o==null&&(e.baseType==="integer"||e.baseType==="float")&&(o="0"),{...e,value:o}})}},d([b({type:String})],ce.prototype,"identifier",2),d([b({type:String})],ce.prototype,"adaptive",2),d([b({type:String})],ce.prototype,"timeDependent",2),d([b({type:String})],ce.prototype,"title",1),d([b({type:Boolean})],ce.prototype,"disabled",2),d([U("disabled",{waitUntilFirstUpdate:!0})],ce.prototype,"_handleDisabledChange",2),d([b({type:Boolean})],ce.prototype,"readonly",2),d([U("readonly",{waitUntilFirstUpdate:!0})],ce.prototype,"_handleReadonlyChange",2),d([ne({context:G})],ce.prototype,"_context",2),ce=d([k("qti-assessment-item")],ce);var Ss=class n extends Event{constructor(e,t){super(n.eventName,{bubbles:!0,composed:!0,cancelable:!0});this.element=e;this.item=t}static{this.eventName="qti-assessment-stimulus-ref-connected"}},Zt=class extends C{constructor(){super(...arguments);this.identifier="";this.href=""}async connectedCallback(){super.connectedCallback(),await this.updateComplete;let e=this.closest("qti-assessment-item"),t=new Ss(this,e);this.dispatchEvent(t);let r=e?.querySelector(`[data-stimulus-idref="${this.identifier}"]`);!t.defaultPrevented&&r&&await this.updateStimulusRef(r)}async updateStimulusRef(e){let t=await Ae().load(this.href).then(r=>r.htmlDoc());if(t){let r=t.querySelectorAll("qti-stimulus-body, qti-stylesheet");e.innerHTML="",e.append(...r)}}};d([b({type:String})],Zt.prototype,"identifier",2),d([b({type:String})],Zt.prototype,"href",2),Zt=d([k("qti-assessment-stimulus-ref")],Zt);var eo=class extends C{};eo=d([k("qti-companion-materials-info")],eo);var Wr,jr=class extends C{constructor(){super(...arguments);_(this,Wr)}render(){return x`<slot @slotchange=${this.handleSlotChange}></slot>`}handleSlotChange(){let e=Array.from(this.firstElementChild?.childNodes??[]).find(t=>t.nodeType===Node.COMMENT_NODE);try{B(this,Wr,new Function("context","fn","item",e?.textContent??""))}catch(t){console.error("custom-operator contains invalid javascript code",t)}}calculate(){let e={variable:r=>this._context?.variables.find(o=>o.identifier===r)?.value??"",correct:r=>this._context?.variables.find(o=>o.identifier===r)?.correctResponse??""},t={getVariable:r=>this._context?.variables.find(o=>o.identifier===r),updateOutcomeVariable:(r,o)=>{this.dispatchEvent(new CustomEvent("qti-set-outcome-value",{bubbles:!0,composed:!0,detail:{outcomeIdentifier:r,value:o}}))},updateResponseVariable:(r,o)=>{this.dispatchEvent(new CustomEvent("qti-interaction-response",{bubbles:!0,composed:!0,detail:{responseIdentifier:r,response:o}}))}};return I(this,Wr).call(this,this._context,e,t)}};Wr=new WeakMap,d([P({context:G,subscribe:!0}),R()],jr.prototype,"_context",2),jr=d([k("qti-custom-operator")],jr);var Gr=class extends le{render(){return x` <slot part="feedback" class="feedback ${this.showStatus}"></slot> `}connectedCallback(){super.connectedCallback(),this.checkShowFeedback(this.outcomeIdentifier)}};Gr.styles=S`
|
|
9
|
+
<slot></slot>`}calculate(){return this.result=this.getResult(),this.result}getResult(){throw new Error("Not implemented")}};d([M()],R.prototype,"result",2),d([$({context:W,subscribe:!0}),M()],R.prototype,"context",2),d([$({context:or,subscribe:!0}),M()],R.prototype,"qtiContext",2);var ve=class extends R{calculate(){return this.result=this.getResult(),this.result}getResult(){throw new Error("Not implemented")}};var Yd=()=>new Intl.NumberFormat().format(.1).replace(/\d/g,""),we=s=>{if(typeof s=="string")return s;let r=Yd();return r==="."?s.toLocaleString():s.toString().replace(".","").replace(r,".")};function ts(s){return s==null}function yn(s){return s.replace(/([^:]\/)\/+/g,"$1").replace(/\/\//g,"/").replace("http:/","http://").replace("https:/","https://")}var pe=class extends C{constructor(){super(...arguments);this.showHide="show"}connectedCallback(){super.connectedCallback(),this.dispatchEvent(new CustomEvent("qti-register-feedback",{bubbles:!0,composed:!0,detail:this}))}checkShowFeedback(e){let t=this._context.variables.find(n=>n.identifier===e)||null;if(this.outcomeIdentifier!==e||!t)return;let i=!1;Array.isArray(t.value)?i=t.value.includes(this.identifier):i=!ts(this.identifier)&&!ts(t?.value)&&this.identifier===t.value||!1,this.#e(i)}#e(e){this.showStatus=e&&this.showHide==="show"||!e&&this.showHide==="hide"?"on":"off"}};d([g({type:String,attribute:"show-hide"})],pe.prototype,"showHide",2),d([g({type:String,attribute:"outcome-identifier"})],pe.prototype,"outcomeIdentifier",2),d([g({type:String})],pe.prototype,"identifier",2),d([g({type:String,attribute:!1})],pe.prototype,"showStatus",2),d([$({context:W,subscribe:!0}),M()],pe.prototype,"_context",2);var pl=class extends C{};var J=class{static isPointInArea(r,e,t){if(t!=="point")return console.warn(`Base type ${t} is not supported for point area mapping.`),!1;let[i,n]=r.split(" ").map(Number),[o,...a]=e.split(","),l=a.map(Number);switch(o.toLowerCase()){case"circle":case"default":{let[c,p,u]=l;return l.length!==3?(console.warn(`Invalid circle definition: ${e}`),!1):Math.sqrt((i-c)**2+(n-p)**2)<=u}case"rect":{let[c,p,u,h]=l;return l.length!==4?(console.warn(`Invalid rectangle definition: ${e}`),!1):i>=c&&i<=u&&n>=p&&n<=h}case"ellipse":{let[c,p,u,h]=l;if(l.length!==4)return console.warn(`Invalid ellipse definition: ${e}`),!1;let y=(i-c)**2/u**2,v=(n-p)**2/h**2;return y+v<=1}case"poly":{if(l.length<6||l.length%2!==0)return console.warn(`Invalid polygon definition: ${e}`),!1;let c=[];for(let p=0;p<l.length;p+=2)c.push({x:l[p],y:l[p+1]});return this.isPointInPolygon({x:i,y:n},c)}default:return console.warn(`Unsupported shape type: ${o}`),!1}}static isPointInPolygon(r,e){let t=!1;for(let i=0,n=e.length-1;i<e.length;n=i++){let o=e[i].x,a=e[i].y,l=e[n].x,c=e[n].y;a>r.y!=c>r.y&&r.x<(l-o)*(r.y-a)/(c-a)+o&&(t=!t)}return t}static compareSingleValues(r,e,t){switch(t){case"identifier":case"string":return r===e;case"integer":{let i=parseInt(r,10),n=parseInt(e,10);if(!isNaN(i)&&!isNaN(n))return i===n;console.error(`Cannot convert ${r} and/or ${e} to int.`);break}case"float":{let i=parseFloat(r),n=parseFloat(e);if(!isNaN(i)&&!isNaN(n))return i===n;console.error(`couldn't convert ${r} and/or ${e} to float.`);break}case"pair":case"directedPair":{let i=r.split(" ").sort(),n=e.split(" ").sort();if(i.length===2&&n.length===2)return t==="pair"&&(i.sort(),n.sort()),i.join(" ")===n.join(" ");console.error(`compared two pair but one of the values does not have 2 values: 1: ${r} 2: ${e}`);break}}return!1}};var rs=s=>{class r extends s{constructor(...i){super(...i);this.testContext=Zo;this.sessionContext=Ko;this._updateItemInTestContext=i=>{let n=i._context,o=n.identifier,a=n.variables,l=this.testContext.items.find(c=>c?.identifier===o);if(!l){console.warn(`Item IDs between assessment.xml and item.xml should match: ${o} is not found!`);return}if(l.variables?.length===1)this._updateItemVariablesInTestContext(o,a);else{let c=[...i.variables];for(let p of l.variables){let u=c.find(h=>h.identifier===p.identifier);u?u.value=p.value:c.push(p)}i.variables=c}};this._initializeEventListeners()}updateItemVariables(i,n){let o=this.testContext.items.find(l=>l.identifier===i);o&&(o.variables=o.variables.map(l=>{let c=n.find(p=>p.identifier===l.identifier);return c?{...l,...c}:l}));let a=this._testElement.querySelector(`qti-assessment-item-ref[identifier="${i}"]`);a&&a.assessmentItem&&(a.assessmentItem.variables=n)}_initializeEventListeners(){this.addEventListener("qti-assessment-test-connected",i=>{if(this.testContext=Zo,this.sessionContext=Ko,this.testContext&&this.testContext.items.length>0)return;this._testElement=i.detail;let n=Array.from(this._testElement.querySelectorAll("qti-assessment-item-ref")).map(o=>({href:o.href,identifier:o.identifier,category:o.category,variables:[{identifier:"completionStatus",value:"not_attempted",type:"outcome"}]}));this.testContext={...this.testContext,items:n}}),this.addEventListener("qti-assessment-item-connected",i=>{let n=i.detail,o=n.closest("qti-assessment-item-ref")?.identifier;o&&(n.assessmentItemRefId=o),this._updateItemInTestContext(i.detail)}),this.addEventListener("qti-item-context-updated",i=>{this._updateItemVariablesInTestContext(i.detail.itemContext.identifier,i.detail.itemContext.variables,i.detail.itemContext.state)})}_updateItemVariablesInTestContext(i,n,o){this.testContext={...this.testContext,items:this.testContext.items.map(a=>a.identifier!==i?a:{...a,variables:n.map(l=>{let c=a.variables.find(p=>p.identifier===l.identifier);return c?{...c,...l}:l}),...o!==void 0?{state:o?{...o}:void 0}:{}})},this.dispatchEvent(new CustomEvent("qti-test-context-updated",{detail:this.testContext,bubbles:!1,composed:!1}))}}return d([g({attribute:!1,type:Object}),ce({context:_e})],r.prototype,"testContext",2),d([g({attribute:!1,type:Object}),ce({context:nt})],r.prototype,"sessionContext",2),r},ul=class extends rs(C){};var ml=s=>{class r extends s{constructor(...t){super(...t),this.addEventListener("qti-register-variable",i=>{this.testContext={...this.testContext,testOutcomeVariables:[...this.testContext.testOutcomeVariables||[],i.detail.variable]},i.stopPropagation()}),this.addEventListener("qti-set-outcome-value",i=>{let{outcomeIdentifier:n,value:o}=i.detail;this.updateOutcomeVariable(n,o),i.stopPropagation()})}outcomeProcessing(){let t=this.querySelector("qti-outcome-processing");return t?(t?.process(),!0):!1}updateOutcomeVariable(t,i){let n=this.getOutcome(t);if(!n){console.warn(`Can not set qti-outcome-identifier: ${t}, it is not available`);return}this.testContext={...this.testContext,testOutcomeVariables:this.testContext.testOutcomeVariables?.map(o=>o.identifier!==t?o:{...o,value:n.cardinality==="single"?i:[...o.value,i]})}}getOutcome(t){return this.getVariable(t)}getVariable(t){return this.testContext.testOutcomeVariables?.find(i=>i.identifier===t)||null}}return r};var xn=class extends el(tl(ml(rs(C)))){async connectedCallback(){super.connectedCallback(),await this.updateComplete,this.dispatchEvent(new CustomEvent("qti-test-connected",{detail:this}))}render(){return x`<slot></slot>`}};xn=d([k("qti-test")],xn);var hl={fromAttribute(s){return s==="true"},toAttribute(s){return s?"true":"false"}},ze=class extends C{constructor(){super(...arguments);this.weigths=new Map}createRenderRoot(){return this}get assessmentItem(){return this.renderRoot?.querySelector("qti-assessment-item")}async connectedCallback(){super.connectedCallback(),await this.updateComplete,this.dispatchEvent(new CustomEvent("qti-assessment-item-ref-connected",{bubbles:!0,composed:!0,detail:{identifier:this.identifier,href:this.href,category:this.category}}))}render(){return this.myTemplate?this.myTemplate({xmlDoc:this.xmlDoc}):this.xmlDoc}};d([g({type:String})],ze.prototype,"category",2),d([g({type:String})],ze.prototype,"identifier",2),d([g({type:Boolean,converter:hl})],ze.prototype,"required",2),d([g({type:Boolean,converter:hl})],ze.prototype,"fixed",2),d([g({type:String})],ze.prototype,"href",2),d([g({type:Object,attribute:!1})],ze.prototype,"xmlDoc",2);customElements.get("qti-assessment-item-ref")||customElements.define("qti-assessment-item-ref",ze);var is={fromAttribute(s){return s==="true"},toAttribute(s){return s?"true":"false"}},je=class extends C{get title(){return this.#e}set title(r){this.#e=r,this.removeAttribute("title"),this.setAttribute("data-title",r)}#e="";async connectedCallback(){this.#e=this.getAttribute("title")||"",super.connectedCallback(),await this.updateComplete,this.dispatchEvent(new Event("qti-assessment-section-connected",{bubbles:!0,composed:!0}))}render(){return x`<slot name="qti-rubric-block"></slot><slot></slot>`}};d([g({type:String})],je.prototype,"identifier",2),d([g({type:String})],je.prototype,"required",2),d([g({type:Boolean,converter:is})],je.prototype,"fixed",2),d([g({type:Boolean,converter:is})],je.prototype,"visible",2),d([g({type:Boolean,converter:is,attribute:"keep-together"})],je.prototype,"keepTogether",2),d([$({context:_e,subscribe:!0})],je.prototype,"_testContext",2);customElements.get("qti-assessment-section")||customElements.define("qti-assessment-section",je);var Wr,Lt=class extends C{constructor(){super(...arguments);L(this,Wr,"")}get title(){return I(this,Wr)}set title(e){U(this,Wr,e),this.removeAttribute("title"),this.setAttribute("data-title",e)}async connectedCallback(){super.connectedCallback(),await this.updateComplete,this.dispatchEvent(new CustomEvent("qti-assessment-test-connected",{detail:this,bubbles:!0,composed:!0}))}render(){return x` <slot></slot>`}};Wr=new WeakMap,d([g({type:String})],Lt.prototype,"identifier",2),d([g({type:String})],Lt.prototype,"title",1),d([$({context:_e,subscribe:!0})],Lt.prototype,"_testContext",2),Lt=d([k("qti-assessment-test")],Lt);var Gr,We=class extends C{constructor(){super(...arguments);this.identifier="";this.class="";this.navigationMode="nonlinear";this.submissionMode="individual";L(this,Gr,"")}get title(){return I(this,Gr)}set title(e){U(this,Gr,e),this.removeAttribute("title"),this.setAttribute("data-title",e)}async connectedCallback(){super.connectedCallback(),await this.updateComplete,this.dispatchEvent(new Event("qti-test-part-connected",{bubbles:!0,composed:!0}))}render(){return x` <slot></slot>`}};Gr=new WeakMap,d([g({type:String})],We.prototype,"identifier",2),d([g({type:String})],We.prototype,"class",2),d([g({type:String,attribute:"navigation-mode"})],We.prototype,"navigationMode",2),d([g({type:String,attribute:"submission-mode"})],We.prototype,"submissionMode",2),We=d([k("qti-test-part")],We);customElements.get("qti-test-part")||customElements.define("qti-test-part",We);var Xr,lr,cr,dr,ye,me,fl,gl,Qr,Yr,Jr,Kr,Zr,ei,ti,ri,bl,ns,vl,ue=class extends C{constructor(){super(...arguments);L(this,me);L(this,Xr);L(this,lr,null);this.identifier="";this.adaptive="false";this.timeDependent=null;this._handleDisabledChange=(e,t)=>{I(this,ye).forEach(i=>i.disabled=t)};this._handleReadonlyChange=(e,t)=>I(this,ye).forEach(i=>i.readonly=t);this._context={variables:rl};L(this,cr,{...this._context,variables:this._context.variables});L(this,dr,[]);L(this,ye,[]);L(this,Qr,e=>{e.stopImmediatePropagation(),this._context={...this._context,variables:[...this._context.variables,e.detail.variable]},U(this,cr,this._context),e.stopPropagation()});L(this,Yr,e=>{e.stopImmediatePropagation();let t=e.detail;I(this,dr).push(t),(Number(this._context.variables.find(n=>n.identifier==="numAttempts")?.value)||0)>0&&t.checkShowFeedback(t.outcomeIdentifier)});L(this,Jr,e=>{e.stopImmediatePropagation(),I(this,ye).push(e.detail.interactionElement)});L(this,Kr,e=>{e.stopImmediatePropagation();let{responseIdentifier:t,countAttempt:i}=e.detail;this.validate(),this.updateResponseVariable(t,"true"),this.processResponse(i)});L(this,Zr,e=>{e.stopImmediatePropagation();let{outcomeIdentifier:t,value:i}=e.detail;this.updateOutcomeVariable(t,i),e.stopPropagation()});L(this,ei,e=>{e.stopImmediatePropagation();let{templateIdentifier:t,value:i}=e.detail;this.updateTemplateVariable(t,i??void 0),e.stopPropagation()});L(this,ti,e=>{e.stopImmediatePropagation();let{responseIdentifier:t,value:i}=e.detail;this.updateCorrectResponse(t,i??void 0),e.stopPropagation()});L(this,ri,e=>{e.stopImmediatePropagation();let{responseIdentifier:t,response:i,state:n}=e.detail;this.updateResponseVariable(t,i),n!==void 0&&(this._context={...this._context,state:{...this._context.state||{},[t]:n}}),this.dispatchEvent(new CustomEvent("qti-item-context-updated",{bubbles:!0,composed:!0,detail:{itemContext:this._context}}))})}get title(){return I(this,Xr)}set title(e){U(this,Xr,e),this.removeAttribute("title"),this.setAttribute("data-title",e)}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 i=e.find(n=>n.identifier===t.identifier);return i?{...t,...i,interpolationTable:t.interpolationTable}:t})},this._context.variables.forEach(t=>{if(t.type==="response"){let i=I(this,ye).find(n=>n.responseIdentifier===t.identifier);i&&(i.response=t.value)}}),this.variables.forEach(t=>{t.type==="outcome"&&I(this,dr).forEach(i=>i.checkShowFeedback(t.identifier))})}get state(){return this._context.state}set state(e){this._context={...this._context,state:e?{...e}:void 0}}set responses(e){if(e)for(let t of e){this.getResponse(t.responseIdentifier)&&this.updateResponseVariable(t.responseIdentifier,t.response);let n=I(this,ye).find(o=>o.getAttribute("response-identifier")===t.responseIdentifier);n&&(n.response=t.response)}}render(){return x`<slot></slot>`}connectedCallback(){P(this,me,fl).call(this),super.connectedCallback(),this.updateComplete.then(()=>{this.dispatchEvent(new CustomEvent("qti-assessment-item-connected",{bubbles:!0,composed:!0,detail:this})),P(this,me,bl).call(this)})}disconnectedCallback(){P(this,me,gl).call(this),super.disconnectedCallback()}showCorrectResponse(e){for(let t of I(this,ye))t.toggleCorrectResponse(e);document.querySelectorAll("item-show-correct-response").forEach(t=>{t.shown=e})}showCandidateCorrection(e){for(let t of I(this,ye))t.toggleCandidateCorrection(e);document.querySelectorAll("item-show-candidate-correction").forEach(t=>{t.shown=e})}processResponse(e=!0,t=!0){this.validate(t),e&&this.updateOutcomeVariable("numAttempts",(+this._context.variables.find(o=>o.identifier==="numAttempts")?.value+1).toString()),this.adaptive==="false"&&P(this,me,vl).call(this);let i=this.querySelector("qti-response-processing"),n=!!(i&&typeof i.process=="function");return n&&i.process(),this.adaptive==="false"&&this.updateOutcomeVariable("completionStatus",P(this,me,ns).call(this)),this.dispatchEvent(new CustomEvent("qti-item-context-updated",{bubbles:!0,composed:!0,detail:{itemContext:this._context}})),n}resetResponses(){this._context=I(this,cr)}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(i=>i.identifier!==e?i:{...i,value:t})},this.showCandidateCorrection(!1),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",P(this,me,ns).call(this))}updateTemplateVariable(e,t){let i=this._context.variables.find(o=>o.identifier===e&&o.type==="template");if(!i){console.warn(`Can not set qti-template-identifier: ${e}, it is not available`);return}let n=i.cardinality==="single"?Array.isArray(t)?t[0]:t??null:t==null?null:Array.isArray(t)?t:[t];this._context={...this._context,variables:this._context.variables.map(o=>o.identifier!==e?o:{...o,value:n})},this.dispatchEvent(new CustomEvent("qti-item-context-updated",{bubbles:!0,composed:!0,detail:{itemContext:this._context}}))}updateCorrectResponse(e,t){let i=this.getResponse(e);if(!i){console.warn(`Can not set correct response for identifier: ${e}, it is not available`);return}let n=i.cardinality==="single"?Array.isArray(t)?t[0]:t??null:t==null?null:Array.isArray(t)?t:[t];this._context={...this._context,variables:this._context.variables.map(o=>o.identifier!==e?o:{...o,correctResponse:n})},this.dispatchEvent(new CustomEvent("qti-item-context-updated",{bubbles:!0,composed:!0,detail:{itemContext:this._context}}))}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 i=this.getOutcome(e);if(!i){console.warn(`Can not set qti-outcome-identifier: ${e}, it is not available`);return}this._context={...this._context,variables:this._context.variables.map(n=>n.identifier!==e?n:{...n,value:i.cardinality==="single"||Array.isArray(t)?t:[t]})},I(this,dr).forEach(n=>n.checkShowFeedback(e)),this.dispatchEvent(new CustomEvent("qti-outcome-changed",{bubbles:!0,composed:!0,detail:{item:this.identifier,outcomeIdentifier:e,value:this._context.variables.find(n=>n.identifier===e)?.value}}))}validate(e=!0){let t=I(this,ye).every(i=>i.validate());return e&&this.reportValidity(),t}reportValidity(){for(let e of I(this,ye))e.reportValidity()}};Xr=new WeakMap,lr=new WeakMap,cr=new WeakMap,dr=new WeakMap,ye=new WeakMap,me=new WeakSet,fl=function(){this.addEventListener("qti-register-variable",I(this,Qr)),this.addEventListener("qti-register-feedback",I(this,Yr)),this.addEventListener("qti-register-interaction",I(this,Jr)),this.addEventListener("end-attempt",I(this,Kr)),this.addEventListener("qti-set-outcome-value",I(this,Zr)),this.addEventListener("qti-set-template-value",I(this,ei)),this.addEventListener("qti-set-correct-response",I(this,ti)),this.addEventListener("qti-interaction-response",I(this,ri))},gl=function(){this.removeEventListener("qti-register-variable",I(this,Qr)),this.removeEventListener("qti-register-feedback",I(this,Yr)),this.removeEventListener("qti-register-interaction",I(this,Jr)),this.removeEventListener("end-attempt",I(this,Kr)),this.removeEventListener("qti-set-outcome-value",I(this,Zr)),this.removeEventListener("qti-set-template-value",I(this,ei)),this.removeEventListener("qti-set-correct-response",I(this,ti)),this.removeEventListener("qti-interaction-response",I(this,ri))},Qr=new WeakMap,Yr=new WeakMap,Jr=new WeakMap,Kr=new WeakMap,Zr=new WeakMap,ei=new WeakMap,ti=new WeakMap,ri=new WeakMap,bl=async function(){let e=Array.from(this.querySelectorAll("qti-template-declaration"));e.length>0&&(await Promise.all(e.map(t=>t.updateComplete)),await Promise.resolve()),U(this,lr,this.querySelector("qti-template-processing")),I(this,lr)&&(I(this,lr).process(),U(this,cr,{...this._context,variables:this._context.variables}))},ns=function(){let e=this.validate(!1);return e===!0?"completed":e===!1?"incomplete":"not_attempted"},vl=function(){this._context={...this._context,variables:this._context.variables.map(e=>{if(e.type!=="outcome")return e;let n=("defaultValue"in e?e.defaultValue:null)??null;return n==null&&(e.baseType==="integer"||e.baseType==="float")&&(n="0"),{...e,value:n}})}},d([g({type:String})],ue.prototype,"identifier",2),d([g({type:String})],ue.prototype,"adaptive",2),d([g({type:String})],ue.prototype,"timeDependent",2),d([g({type:String})],ue.prototype,"title",1),d([g({type:Boolean})],ue.prototype,"disabled",2),d([B("disabled",{waitUntilFirstUpdate:!0})],ue.prototype,"_handleDisabledChange",2),d([g({type:Boolean})],ue.prototype,"readonly",2),d([B("readonly",{waitUntilFirstUpdate:!0})],ue.prototype,"_handleReadonlyChange",2),d([ce({context:W})],ue.prototype,"_context",2),ue=d([k("qti-assessment-item")],ue);var os=class s extends Event{constructor(e,t){super(s.eventName,{bubbles:!0,composed:!0,cancelable:!0});this.element=e;this.item=t}static{this.eventName="qti-assessment-stimulus-ref-connected"}},pr=class extends C{constructor(){super(...arguments);this.identifier="";this.href=""}async connectedCallback(){super.connectedCallback(),await this.updateComplete;let e=this.closest("qti-assessment-item"),t=new os(this,e);this.dispatchEvent(t);let i=e?.querySelector(`[data-stimulus-idref="${this.identifier}"]`);!t.defaultPrevented&&i&&await this.updateStimulusRef(i)}async updateStimulusRef(e){let t=await Me().load(this.href).then(i=>i.htmlDoc());if(t){let i=t.querySelectorAll("qti-stimulus-body, qti-stylesheet");e.innerHTML="",e.append(...i)}}};d([g({type:String})],pr.prototype,"identifier",2),d([g({type:String})],pr.prototype,"href",2),pr=d([k("qti-assessment-stimulus-ref")],pr);var qn=class extends C{};qn=d([k("qti-companion-materials-info")],qn);var ni,ii=class extends C{constructor(){super(...arguments);L(this,ni)}render(){return x`<slot @slotchange=${this.handleSlotChange}></slot>`}handleSlotChange(){let e=Array.from(this.firstElementChild?.childNodes??[]).find(t=>t.nodeType===Node.COMMENT_NODE);try{U(this,ni,new Function("context","fn","item",e?.textContent??""))}catch(t){console.error("custom-operator contains invalid javascript code",t)}}calculate(){let e={variable:i=>this._context?.variables.find(n=>n.identifier===i)?.value??"",correct:i=>this._context?.variables.find(n=>n.identifier===i)?.correctResponse??""},t={getVariable:i=>this._context?.variables.find(n=>n.identifier===i),updateOutcomeVariable:(i,n)=>{this.dispatchEvent(new CustomEvent("qti-set-outcome-value",{bubbles:!0,composed:!0,detail:{outcomeIdentifier:i,value:n}}))},updateResponseVariable:(i,n)=>{this.dispatchEvent(new CustomEvent("qti-interaction-response",{bubbles:!0,composed:!0,detail:{responseIdentifier:i,response:n}}))}};return I(this,ni).call(this,this._context,e,t)}};ni=new WeakMap,d([$({context:W,subscribe:!0}),M()],ii.prototype,"_context",2),ii=d([k("qti-custom-operator")],ii);var oi=class extends pe{render(){return x` <slot part="feedback" class="feedback ${this.showStatus}"></slot> `}connectedCallback(){super.connectedCallback(),this.checkShowFeedback(this.outcomeIdentifier)}};oi.styles=E`
|
|
10
10
|
:host {
|
|
11
11
|
display: block;
|
|
12
12
|
}
|
|
@@ -16,21 +16,21 @@ Make sure to test your application with a production build as repeat registratio
|
|
|
16
16
|
.off {
|
|
17
17
|
display: none;
|
|
18
18
|
}
|
|
19
|
-
`,
|
|
19
|
+
`,oi=d([k("qti-feedback-block")],oi);var $e=s=>s??O;var si=class extends pe{constructor(){super(...arguments);this.render=()=>x` <slot part="feedback" class="${$e(this.showStatus)}"></slot> `}connectedCallback(){super.connectedCallback(),this.checkShowFeedback(this.outcomeIdentifier)}};si.styles=E`
|
|
20
20
|
.on {
|
|
21
21
|
display: inline-block;
|
|
22
22
|
}
|
|
23
23
|
.off {
|
|
24
24
|
display: none;
|
|
25
25
|
}
|
|
26
|
-
`,
|
|
26
|
+
`,si=d([k("qti-feedback-inline")],si);var $t=class extends pe{render(){return x`
|
|
27
27
|
<dialog class="qti-dialog" part="feedback" ?open="${this.showStatus==="on"}">
|
|
28
28
|
<slot></slot>
|
|
29
29
|
<div style="margin-top: var(--qti-gap-size); text-align: center;">
|
|
30
30
|
<button class="button close-button" @click="${this.closeFeedback}">Close</button>
|
|
31
31
|
</div>
|
|
32
32
|
</dialog>
|
|
33
|
-
`}openFeedback(){let
|
|
33
|
+
`}openFeedback(){let r=this.shadowRoot?.querySelector("dialog");r&&!r.open&&r.showModal()}closeFeedback(){let r=this.shadowRoot?.querySelector("dialog");r&&r.open&&(r.close(),this.showStatus="off")}connectedCallback(){super.connectedCallback(),this.showStatus==="on"&&this.openFeedback()}updated(r){r.has("showStatus")&&(this.showStatus==="on"?this.openFeedback():this.closeFeedback())}};$t.styles=E`
|
|
34
34
|
.qti-dialog {
|
|
35
35
|
background: var(--qti-bg);
|
|
36
36
|
border: var(--qti-border-thickness) var(--qti-border-style) var(--qti-border-color);
|
|
@@ -69,23 +69,23 @@ Make sure to test your application with a production build as repeat registratio
|
|
|
69
69
|
.button:focus {
|
|
70
70
|
outline: var(--qti-focus-border-width) solid var(--qti-focus-color);
|
|
71
71
|
}
|
|
72
|
-
|
|
72
|
+
`,$t=d([k("qti-modal-feedback")],$t);var yl=E`
|
|
73
73
|
:host {
|
|
74
74
|
display: block;
|
|
75
75
|
}
|
|
76
|
-
`;var
|
|
76
|
+
`;var ai=class extends C{render(){return x`<slot part="qti-rubric-blocks" name="qti-rubric-block"></slot><slot></slot>`}};ai.styles=yl,ai=d([k("qti-item-body")],ai);var lt,wn,xl,li=class extends C{constructor(){super(...arguments);L(this,lt)}render(){return x`<slot @slotchange=${P(this,lt,wn)}></slot>`}connectedCallback(){super.connectedCallback(),this.updateComplete.then(()=>P(this,lt,wn).call(this))}updated(e){e.has("context")&&P(this,lt,wn).call(this)}};lt=new WeakSet,wn=function(){let e=new Map,t=(this.context?.variables??[]).filter(n=>n.type==="template");for(let n of t){let o=n;o.mathVariable!==!0||o.value===null||o.value===void 0||e.set(o.identifier,P(this,lt,xl).call(this,o.value))}if(e.size===0)return;let i=Array.from(this.querySelectorAll("*")).filter(n=>n.localName.toLowerCase()==="mi"||n.localName.toLowerCase()==="mn");for(let n of i){let o=n.getAttribute("data-qti-math-variable-source")??n.textContent?.trim()??"",a=e.get(o);if(!a)continue;if(n.localName.toLowerCase()==="mn"){n.textContent=a,n.setAttribute("data-qti-math-variable-source",o);continue}let l=document.createElement("mn");l.textContent=a,l.setAttribute("data-qti-math-variable-source",o),n.replaceWith(l)}},xl=function(e){return Array.isArray(e)?e.join(" "):e?.toString()??""},d([$({context:W,subscribe:!0}),M()],li.prototype,"context",2),li=d([k("qti-content-body")],li);var Pe=class extends C{handleclassNamesChange(){this.classNames.split(" ").forEach(e=>{switch(e){case"qti-rubric-discretionary-placement":{let t=new CustomEvent("qti-rubric:discretionary-placement",{detail:{className:e,element:this},bubbles:!0,composed:!0,cancelable:!0});if(!this.dispatchEvent(t))return;this.setAttribute("slot","qti-rubric-block")}break;case"qti-rubric-inline":this.setAttribute("slot","");break;default:break}})}render(){return x`<slot></slot>`}};Pe.styles=E`
|
|
77
77
|
:host {
|
|
78
78
|
display: block;
|
|
79
79
|
}
|
|
80
|
-
`,d([
|
|
80
|
+
`,d([g({type:String})],Pe.prototype,"id",2),d([g({type:String})],Pe.prototype,"use",2),d([g({type:String})],Pe.prototype,"view",2),d([g({type:String,attribute:"class"})],Pe.prototype,"classNames",2),d([B("classNames",{waitUntilFirstUpdate:!0})],Pe.prototype,"handleclassNamesChange",1),Pe=d([k("qti-rubric-block")],Pe);var he,ci,ss,Cn=class extends C{constructor(){super(...arguments);L(this,ci);L(this,he,null)}firstUpdated(e){super.firstUpdated(e);let t=this.getAttribute("href");if(t!==null&&fetch(t).then(i=>i.text()).then(i=>{let n=P(this,ci,ss).call(this,i);U(this,he,document.createElement("style")),I(this,he).media="screen",I(this,he).textContent=`@scope {${n}}`,this.parentElement?this.parentElement.appendChild(I(this,he)):console.warn("No parent element to append the scoped stylesheet to.")}).catch(i=>{console.error("Failed to load stylesheet:",i)}),this.textContent!==null&&this.textContent.trim()!==""){let i=P(this,ci,ss).call(this,this.textContent);U(this,he,document.createElement("style")),I(this,he).media="screen",I(this,he).textContent=`@scope {${i}}`,this.parentElement?this.parentElement.appendChild(I(this,he)):console.warn("No parent element to append the scoped stylesheet to.")}}disconnectedCallback(){if(I(this,he))try{I(this,he).remove()}catch(e){console.error("Could not remove stylesheet:",e)}super.disconnectedCallback()}};he=new WeakMap,ci=new WeakSet,ss=function(e){return e.replace(/\/\*[\s\S]*?\*\//g,"").replace(/\s+/g," ").replace(/\s*([{}:;])\s*/g,"$1").trim()},Cn=d([k("qti-stylesheet")],Cn);var ct,ql,wl,Cl,Ge=class extends ar{constructor(){super(...arguments);L(this,ct)}render(){let e=this.itemContext?.variables.find(t=>t.identifier===this.identifier)?.value;return x`${JSON.stringify(e,null,2)}`}connectedCallback(){super.connectedCallback();let e=this.defaultValues(this.cardinality),t={baseType:this.baseType,identifier:this.identifier,correctResponse:I(this,ct,ql),cardinality:this.cardinality||"single",mapping:I(this,ct,wl),defaultValue:e,areaMapping:I(this,ct,Cl),value:null,type:"response",candidateResponse:null};t.value=e,this.dispatchEvent(new CustomEvent("qti-register-variable",{bubbles:!0,composed:!0,detail:{variable:t}}))}};ct=new WeakSet,ql=function(){let e,t=this.querySelector("qti-correct-response");if(t){let i=t.querySelectorAll("qti-value");if(this.cardinality==="single"&&i.length>0)e=i[0].textContent.trim(),i[0].remove();else if(this.cardinality!=="single"){e=[];for(let n=0;n<i.length;n++)e.push(i[n].textContent.trim()),i[n].remove()}}return e},wl=function(){let e=this.querySelector("qti-mapping"),t=parseFloat(e?.getAttribute("lower-bound")),i=parseFloat(e?.getAttribute("upper-bound"));return{defaultValue:Number(e?.getAttribute("default-value"))||0,lowerBound:isNaN(t)?null:t,upperBound:isNaN(i)?null:i,mapEntries:Array.from(e?.querySelectorAll("qti-map-entry")||[]).map(o=>({mapKey:o.getAttribute("map-key")||"",mappedValue:Number(o.getAttribute("mapped-value"))||0,caseSensitive:o.hasAttribute("case-sensitive")?o.getAttribute("case-sensitive")!=="false":!1}))}},Cl=function(){let e=this.querySelector("qti-area-mapping"),t=Number(e?.getAttribute("default-value"))||0,i=parseFloat(e?.getAttribute("lower-bound")),n=parseFloat(e?.getAttribute("upper-bound")),o=Array.from(e?.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:t,lowerBound:isNaN(i)?null:i,upperBound:isNaN(n)?null:n,areaMapEntries:o}},Ge.styles=[E`
|
|
81
81
|
:host {
|
|
82
82
|
display: none;
|
|
83
83
|
}
|
|
84
|
-
`],d([
|
|
84
|
+
`],d([g({type:String,attribute:"base-type"})],Ge.prototype,"baseType",2),d([g({type:String})],Ge.prototype,"identifier",2),d([g({type:String})],Ge.prototype,"cardinality",2),d([$({context:W,subscribe:!0}),M()],Ge.prototype,"itemContext",2),Ge=d([k("qti-response-declaration")],Ge);var Ve=class extends ar{constructor(){super(...arguments);this.externalScored=null}render(){let e=this.itemContext?.variables.find(t=>t.identifier===this.identifier)?.value;return x`${JSON.stringify(e,null,2)}`}get interpolationTable(){let e=this.querySelector("qti-interpolation-table");if(e){let t=new Map;for(let i of e.querySelectorAll("qti-interpolation-table-entry")){!i.getAttribute("source-value")&&i.getAttribute("target-value")&&console.error("source-value or target-value is missing in qti-interpolation-table-entry");let n=parseFloat(i.getAttribute("source-value")),o=parseFloat(i.getAttribute("target-value"));(isNaN(n)||isNaN(o))&&console.error("source-value or target-value is not a number in qti-interpolation-table-entry"),t.set(n,o)}return t}return null}connectedCallback(){super.connectedCallback();let e=this.defaultValues(this.cardinality),t={identifier:this.identifier,cardinality:this.cardinality,baseType:this.baseType,defaultValue:e,type:"outcome",value:null,interpolationTable:this.interpolationTable,externalScored:this.externalScored};t.value=e,(t.value===null||t.value==null)&&(t.baseType==="integer"||t.baseType==="float")&&(t.value="0"),this.dispatchEvent(new CustomEvent("qti-register-variable",{bubbles:!0,composed:!0,detail:{variable:t}}))}};Ve.styles=[E`
|
|
85
85
|
:host {
|
|
86
86
|
display: none;
|
|
87
87
|
}
|
|
88
|
-
`],d([
|
|
88
|
+
`],d([g({type:String,attribute:"base-type"})],Ve.prototype,"baseType",2),d([g({type:String,attribute:"external-scored"})],Ve.prototype,"externalScored",2),d([g({type:String})],Ve.prototype,"identifier",2),d([g({type:String})],Ve.prototype,"cardinality",2),d([$({context:W,subscribe:!0}),M()],Ve.prototype,"itemContext",2),Ve=d([k("qti-outcome-declaration")],Ve);var El=`<qti-response-processing>
|
|
89
89
|
<qti-response-condition>
|
|
90
90
|
<qti-response-if>
|
|
91
91
|
<qti-match>
|
|
@@ -102,7 +102,7 @@ Make sure to test your application with a production build as repeat registratio
|
|
|
102
102
|
</qti-set-outcome-value>
|
|
103
103
|
</qti-response-else>
|
|
104
104
|
</qti-response-condition>
|
|
105
|
-
</qti-response-processing>`,
|
|
105
|
+
</qti-response-processing>`,Sl=`<qti-response-processing>
|
|
106
106
|
<qti-response-condition>
|
|
107
107
|
<qti-response-if>
|
|
108
108
|
<qti-is-null>
|
|
@@ -118,7 +118,7 @@ Make sure to test your application with a production build as repeat registratio
|
|
|
118
118
|
</qti-set-outcome-value>
|
|
119
119
|
</qti-response-else>
|
|
120
120
|
</qti-response-condition>
|
|
121
|
-
</qti-response-processing>`,
|
|
121
|
+
</qti-response-processing>`,Al=`<qti-response-processing>
|
|
122
122
|
<qti-response-condition>
|
|
123
123
|
<qti-response-if>
|
|
124
124
|
<qti-is-null>
|
|
@@ -134,53 +134,57 @@ Make sure to test your application with a production build as repeat registratio
|
|
|
134
134
|
</qti-set-outcome-value>
|
|
135
135
|
</qti-response-else>
|
|
136
136
|
</qti-response-condition>
|
|
137
|
-
</qti-response-processing>`;var
|
|
137
|
+
</qti-response-processing>`;var ur,En,di=class extends C{constructor(){super(...arguments);L(this,ur)}render(){return x`<slot></slot>`}process(){if(!this.closest("qti-assessment-item"))return;let t=[...this.children];for(let i of t)i.process()}firstUpdated(e){if(this.getAttribute("template")){let t=this.getAttribute("template").split("/"),i=t[t.length-1].replace(".xml","");switch(this.innerHTML="",i){case"map_response":{this.appendChild(P(this,ur,En).call(this,Sl).firstElementChild.firstElementChild);break}case"map_response_point":{this.appendChild(P(this,ur,En).call(this,Al).firstElementChild.firstElementChild);break}case"match_correct":this.appendChild(P(this,ur,En).call(this,El).firstElementChild.firstElementChild);break}}}};ur=new WeakSet,En=function(e){return document.createRange().createContextualFragment(e)},di.styles=[E`
|
|
138
138
|
:host {
|
|
139
139
|
display: none;
|
|
140
140
|
}
|
|
141
|
-
`],
|
|
141
|
+
`],di=d([k("qti-response-processing")],di);var dt,pt,Tl,Il,Rl,De=class extends C{constructor(){super(...arguments);L(this,pt);this.identifier="";this.cardinality="single";this.baseType="string";this.mathVariable=!1;this.paramVariable=!1;L(this,dt,null)}render(){return x`<slot></slot>`}connectedCallback(){super.connectedCallback(),this.updateComplete.then(()=>{P(this,pt,Tl).call(this),P(this,pt,Rl).call(this)})}getTemplateVariable(){return{identifier:this.identifier,cardinality:this.cardinality,baseType:this.baseType,value:I(this,dt),type:"template",mathVariable:this.mathVariable,paramVariable:this.paramVariable}}};dt=new WeakMap,pt=new WeakSet,Tl=function(){let e=this.querySelector("qti-default-value");if(!e)return;let t=e.textContent?.trim()||"";U(this,dt,P(this,pt,Il).call(this,t))},Il=function(e){if(!e)return null;switch(this.baseType){case"integer":return parseInt(e,10);case"float":case"duration":return parseFloat(e);case"boolean":return e.toLowerCase()==="true";default:return e}},Rl=function(){let t={...{identifier:this.identifier,cardinality:this.cardinality,baseType:this.baseType,defaultValue:I(this,dt),value:I(this,dt),type:"template",mathVariable:this.mathVariable,paramVariable:this.paramVariable},value:I(this,dt)?.toString()||""};this.dispatchEvent(new CustomEvent("qti-register-variable",{bubbles:!0,composed:!0,detail:{variable:t}}))},De.styles=[E`
|
|
142
142
|
:host {
|
|
143
143
|
display: none;
|
|
144
144
|
}
|
|
145
|
-
`],d([
|
|
145
|
+
`],d([g({type:String})],De.prototype,"identifier",2),d([g({type:String})],De.prototype,"cardinality",2),d([g({type:String,attribute:"base-type"})],De.prototype,"baseType",2),d([g({type:Boolean,attribute:"math-variable"})],De.prototype,"mathVariable",2),d([g({type:Boolean,attribute:"param-variable"})],De.prototype,"paramVariable",2),De=d([k("qti-template-declaration")],De);var Sn,pi=class extends C{constructor(){super(...arguments);L(this,Sn,100)}render(){return x`<slot></slot>`}process(){if(!this.closest("qti-assessment-item")){console.warn("qti-template-processing must be inside qti-assessment-item");return}let t=0,i=!1;do{if(i=!1,t++,t>I(this,Sn)){console.error("Template processing exceeded maximum iterations. Possible infinite loop.");break}try{let n=[...this.children];for(let o of n)if(o.tagName.toLowerCase()==="qti-template-constraint"){if(o.calculate()===!1){i=!0;break}}else o.process()}catch(n){console.error("Error during template processing:",n);break}}while(i);this.dispatchEvent(new CustomEvent("qti-template-processing-complete",{bubbles:!0,composed:!0,detail:{iterations:t}}))}firstUpdated(e){this.getAttribute("template")&&console.info("Template processing with external template not yet implemented")}};Sn=new WeakMap,pi.styles=[E`
|
|
146
146
|
:host {
|
|
147
147
|
display: none;
|
|
148
148
|
}
|
|
149
|
-
`],d([
|
|
149
|
+
`],pi=d([k("qti-template-processing")],pi);var An=class extends C{render(){return x`<slot></slot>`}calculate(){let r=[...this.children];if(r.length!==1)return console.error("qti-template-constraint must have exactly one child expression"),!0;try{return!!r[0].calculate()}catch(e){return console.error("Error evaluating template constraint:",e),!0}}getSubRules(){return[]}process(){let r=this.calculate();return r||console.debug("Template constraint not satisfied, restarting template processing"),r}};An=d([k("qti-template-constraint")],An);var Pt=class extends C{constructor(){super(...arguments);this.identifier="";this.cardinality="record"}render(){return x`<slot></slot>`}};Pt.styles=[E`
|
|
150
|
+
:host {
|
|
151
|
+
display: none;
|
|
152
|
+
}
|
|
153
|
+
`],d([g({type:String})],Pt.prototype,"identifier",2),d([g({type:String})],Pt.prototype,"cardinality",2),Pt=d([k("qti-context-declaration")],Pt);var ui=class extends $t{render(){return x``}};ui.styles=E`
|
|
150
154
|
:host {
|
|
151
155
|
color: gray;
|
|
152
156
|
}
|
|
153
|
-
`,
|
|
157
|
+
`,ui=d([k("qti-test-feedback")],ui);var fe,Q,kl,Ml,_l,Ll,$l,Pl,Vl,Dl,xe=class extends C{constructor(){super();L(this,Q);this.identifier=void 0;this.initContext=[];this.qtiContext={QTI_CONTEXT:{testIdentifier:"",candidateIdentifier:"",environmentIdentifier:"default"}};this.configContext={};this.autoScoreItems=!1;L(this,fe);this.addEventListener("qti-assessment-test-connected",P(this,Q,Pl).bind(this)),this.addEventListener("qti-assessment-item-connected",P(this,Q,Dl).bind(this)),this.addEventListener("qti-interaction-changed",P(this,Q,$l).bind(this)),this.addEventListener("test-end-attempt",P(this,Q,kl).bind(this)),this.addEventListener("test-show-correct-response",P(this,Q,Ml).bind(this)),this.addEventListener("test-show-candidate-correction",P(this,Q,_l).bind(this)),this.addEventListener("test-update-outcome-variable",P(this,Q,Ll).bind(this))}render(){return x`<slot></slot>`}willUpdate(e){if(!this.computedContext)return;let t=1;this.computedContext={...this.computedContext,view:this._sessionContext?.view,testParts:this.computedContext.testParts.map(i=>({...i,active:this._sessionContext?.navPartId===i.identifier||!1,sections:i.sections.map(n=>({...n,active:this._sessionContext?.navSectionId===n.identifier||!1,completed:n.items.every(o=>this._testContext.items.find(a=>a.identifier===o.identifier)?.variables.find(a=>a.identifier==="completionStatus").value==="completed"),items:n.items.map(o=>{let a=this._testContext?.items.find(b=>b.identifier===o.identifier),l={...o,...a,...this.initContext?.find(b=>b.identifier===o.identifier)},c=l.variables?.find(b=>b.identifier=="SCORE")?.value,p=c==null?null:parseFloat(c?.toString()),u=l.variables?.find(b=>b.identifier==="completionStatus")?.value,h=l.variables?.find(b=>b.identifier==="RESPONSE")?.value||"",y=l.variables?.find(b=>b.identifier==="numAttempts")?.value||0,v=this._sessionContext?.navItemRefId===l.identifier||!1,w=o.categories.includes(this.configContext?.infoItemCategory)?null:t++,f=o.variables?.find(b=>b.identifier=="MAXSCORE")?.value,m=f==null?null:parseFloat(f?.toString());return{...l,completionStatus:u,numAttempts:y,score:p,response:h,index:w,active:v,maxScore:m}})}))}))},this.dispatchEvent(new CustomEvent("qti-computed-context-updated",{detail:this.computedContext,bubbles:!0}))}};fe=new WeakMap,Q=new WeakSet,kl=function(e){let i=I(this,fe).querySelector(`qti-assessment-item-ref[identifier="${this._sessionContext.navItemRefId}"]`).assessmentItem,n=this.configContext?.reportValidityAfterScoring===!0;i.processResponse(!0,n)},Ml=function(e){let i=I(this,fe).querySelector(`qti-assessment-item-ref[identifier="${this._sessionContext.navItemRefId}"]`).assessmentItem;i&&i.showCorrectResponse(e.detail)},_l=function(e){I(this,fe).querySelector(`qti-assessment-item-ref[identifier="${this._sessionContext.navItemRefId}"]`).assessmentItem.showCandidateCorrection(e.detail)},Ll=function(e){I(this,fe).querySelector(`qti-assessment-item-ref[identifier="${e.detail.assessmentItemRefId}"]`).assessmentItem.setOutcomeVariable(e.detail.outcomeVariableId,e.detail.value)},$l=function(e){if(this.autoScoreItems){let t=e.composedPath()[0].closest("qti-assessment-item"),i=t.variables.find(n=>n.identifier==="SCORE");if(i&&i.externalScored===null&&t.adaptive==="false"){let n=this.configContext?.reportValidityAfterScoring===!0;t.processResponse(!0,n)}}},Pl=function(e){if(U(this,fe,e.detail),!this.qtiContext.QTI_CONTEXT?.testIdentifier){let n=this.qtiContext.QTI_CONTEXT||{testIdentifier:"",candidateIdentifier:"not set",environmentIdentifier:"default"};this.qtiContext={QTI_CONTEXT:{...n,testIdentifier:I(this,fe).identifier,environmentIdentifier:n.environmentIdentifier||"default"}}}I(this,fe).querySelectorAll('qti-context-declaration[identifier="QTI_CONTEXT"]').forEach(n=>{let o=P(this,Q,Vl).call(this,n);Object.keys(o).length>0&&(this.qtiContext={QTI_CONTEXT:{...o,...this.qtiContext.QTI_CONTEXT}})});let i=Array.from(I(this,fe)?.querySelectorAll("qti-test-part")||[]);this.computedContext={identifier:I(this,fe).identifier,title:I(this,fe).title,view:this._sessionContext?.view,testParts:i.map(n=>{let o=[...n.querySelectorAll("qti-assessment-section")];return{active:!1,identifier:n.identifier,navigationMode:n.navigationMode,submissionMode:n.submissionMode,sections:o.map(a=>{let l=[...a.querySelectorAll("qti-assessment-item-ref")];return{active:!1,identifier:a.identifier,title:a.title,items:l.map(c=>({...this.initContext?.find(p=>p.identifier===c.identifier),active:!1,identifier:c.identifier,categories:c.category?c.category?.split(" "):[],href:c.href,variables:[]}))}})}})}},Vl=function(e){let t={},i=e.querySelector("qti-default-value");return i&&i.querySelectorAll("qti-value[field-identifier]").forEach(o=>{let a=o.getAttribute("field-identifier"),l=o.getAttribute("base-type")||"string",c=o.textContent?.trim()||"";if(a){let p=c;switch(l){case"integer":p=parseInt(c,10);break;case"float":case"duration":p=parseFloat(c);break;case"boolean":p=c.toLowerCase()==="true";break;default:p=c;break}t[a]=p}}),t},Dl=function(e){let t=e.detail;this.computedContext={...this.computedContext,testParts:this.computedContext.testParts.map(i=>({...i,sections:i.sections.map(n=>({...n,items:n.items.map(o=>{if(o.identifier!==t.parentElement.getAttribute("identifier"))return o;let l=t.querySelector("qti-outcome-declaration[identifier='SCORE']")?.getAttribute("externalScored"),c=t.querySelectorAll("qti-response-declaration"),p=Array.from(c).some(v=>v.querySelector("qti-correct-response")),u=Array.from(c).some(v=>{let w=v.querySelector("qti-mapping"),f=v.querySelector("qti-area-mapping");return w?.querySelector("qti-map-entry")||f?.querySelector("qti-area-map-entry")}),h=p||u,y=!!t.querySelector("qti-response-processing");return{...o,assessmentItemIdentifier:t.getAttribute("identifier"),label:t.getAttribute("label"),title:t.title,externalScored:l,adaptive:t.adaptive=="true"||!1,timeDependent:t.timeDependent=="true"||!1,variables:t.variables,hasCorrectResponse:h,hasResponseProcessing:y}})}))}))}},d([g({type:String})],xe.prototype,"identifier",2),d([M()],xe.prototype,"initContext",2),d([M(),ce({context:or})],xe.prototype,"qtiContext",2),d([M(),ce({context:be})],xe.prototype,"configContext",2),d([M(),$({context:_e,subscribe:!0})],xe.prototype,"_testContext",2),d([M(),$({context:nt,subscribe:!0})],xe.prototype,"_sessionContext",2),d([M(),ce({context:G})],xe.prototype,"computedContext",2),d([g({type:Boolean,attribute:"auto-score-items"})],xe.prototype,"autoScoreItems",2),xe=d([k("test-navigation")],xe);var Nl=E`
|
|
154
158
|
display: inline-flex;
|
|
155
159
|
align-items: center;
|
|
156
160
|
cursor: pointer;
|
|
157
161
|
padding: 0.5rem 1rem;
|
|
158
162
|
border-radius: 0.25rem;
|
|
159
163
|
user-select: none;
|
|
160
|
-
`,
|
|
164
|
+
`,ie=E`
|
|
161
165
|
background-color: lightgray;
|
|
162
|
-
${
|
|
163
|
-
`,
|
|
166
|
+
${Nl};
|
|
167
|
+
`,ne=E`
|
|
164
168
|
cursor: not-allowed;
|
|
165
169
|
opacity: 0.8;
|
|
166
|
-
`,
|
|
167
|
-
${
|
|
170
|
+
`,zv=E`
|
|
171
|
+
${Nl};
|
|
168
172
|
border: 1px solid gray;
|
|
169
|
-
`;var
|
|
173
|
+
`;var mr,ut=class extends C{constructor(){super();this._internalDisabled=!0;L(this,mr);U(this,mr,this.attachInternals()),I(this,mr).role="button",I(this,mr).ariaLabel="Next item",this.addEventListener("click",e=>{e.preventDefault(),this._internalDisabled||this._requestItem(this.sectionItems[this.itemIndex+1].identifier)})}_handleTestElementChange(e,t){t&&(this._internalDisabled=!1)}connectedCallback(){super.connectedCallback(),this.checkDisabled()}willUpdate(e){if(!this.computedContext)return;let t=this.computedContext?.testParts.find(i=>i.active);t&&(this.sectionItems=t.sections.flatMap(i=>i.items),this.itemIndex=this.sectionItems.findIndex(i=>i.active),this.checkDisabled())}checkDisabled(){this._internalDisabled=!this.computedContext||this.itemIndex<0||this.itemIndex>=this.sectionItems?.length-1}_requestItem(e){this.dispatchEvent(new CustomEvent("qti-request-navigation",{composed:!0,bubbles:!0,detail:{type:"item",id:e}}))}render(){return x`<slot></slot>`}};mr=new WeakMap,ut.styles=E`
|
|
170
174
|
:host {
|
|
171
|
-
${
|
|
175
|
+
${ie};
|
|
172
176
|
}
|
|
173
177
|
:host([disabled]) {
|
|
174
|
-
${
|
|
178
|
+
${ne};
|
|
175
179
|
}
|
|
176
|
-
`,d([
|
|
180
|
+
`,d([g({type:Boolean,reflect:!0,attribute:"disabled"})],ut.prototype,"_internalDisabled",2),d([$({context:G,subscribe:!0})],ut.prototype,"computedContext",2),d([B("computedContext")],ut.prototype,"_handleTestElementChange",1),ut=d([k("test-next")],ut);var mt=class extends C{constructor(){super();this._internalDisabled=!0;this.addEventListener("click",e=>{e.preventDefault(),this._internalDisabled||this._requestItem(this.sectionItems[this.itemIndex-1].identifier)})}_handleTestElementChange(e,t){t&&(this._internalDisabled=!1)}willUpdate(e){if(!this.computedContext)return;let t=this.computedContext?.testParts.find(i=>i.active);t&&(this.sectionItems=t.sections.flatMap(i=>i.items),this.itemIndex=this.sectionItems.findIndex(i=>i.active),this.checkDisabled())}checkDisabled(){this._internalDisabled=!this.computedContext||this.itemIndex===0||this.itemIndex===-1}_requestItem(e){this.dispatchEvent(new CustomEvent("qti-request-navigation",{composed:!0,bubbles:!0,detail:{type:"item",id:e}}))}render(){return x`<slot></slot>`}};mt.styles=E`
|
|
177
181
|
:host {
|
|
178
|
-
${
|
|
182
|
+
${ie};
|
|
179
183
|
}
|
|
180
184
|
:host([disabled]) {
|
|
181
|
-
${
|
|
185
|
+
${ne};
|
|
182
186
|
}
|
|
183
|
-
`,d([
|
|
187
|
+
`,d([g({type:Boolean,reflect:!0,attribute:"disabled"})],mt.prototype,"_internalDisabled",2),d([$({context:G,subscribe:!0})],mt.prototype,"computedContext",2),d([B("computedContext")],mt.prototype,"_handleTestElementChange",1),mt=d([k("test-prev")],mt);var mi,as,oe=class extends C{constructor(){super(...arguments);L(this,mi);this.label="view";this._handleViewOptionsChange=()=>{P(this,mi,as).call(this)};this._viewOptions=oe.DEFAULT_VIEW_OPTIONS}connectedCallback(){super.connectedCallback(),P(this,mi,as).call(this)}_switchView(e){this.dispatchEvent(new CustomEvent("on-test-switch-view",{composed:!0,bubbles:!0,detail:e}))}render(){return x`
|
|
184
188
|
<label part="label" for="viewSelect">${this.label}</label>
|
|
185
189
|
<select
|
|
186
190
|
part="select"
|
|
@@ -189,29 +193,31 @@ Make sure to test your application with a production build as repeat registratio
|
|
|
189
193
|
>
|
|
190
194
|
${this._viewOptions.map(e=>x`<option value="${e}" ?selected=${e===this.sessionContext.view}>${e}</option>`)}
|
|
191
195
|
</select>
|
|
192
|
-
`}};
|
|
196
|
+
`}};mi=new WeakSet,as=function(){if(this.viewOptions){let e=this.viewOptions.split(",").map(t=>t.trim());this._viewOptions=e.filter(t=>oe.DEFAULT_VIEW_OPTIONS.includes(t))}else this._viewOptions=oe.DEFAULT_VIEW_OPTIONS},oe.DEFAULT_VIEW_OPTIONS=["author","candidate","proctor","scorer","testConstructor","tutor"],d([$({context:nt,subscribe:!0})],oe.prototype,"sessionContext",2),d([g({type:String})],oe.prototype,"label",2),d([g({type:String,attribute:"view-options"})],oe.prototype,"viewOptions",2),d([B("viewOptions",{waitUntilFirstUpdate:!0})],oe.prototype,"_handleViewOptionsChange",2),d([M()],oe.prototype,"_viewOptions",2),oe=d([k("test-view")],oe);var hr=class extends C{constructor(){super();this.itemId=null;this.addEventListener("click",()=>this._requestItem(this.itemId))}_requestItem(e){this.dispatchEvent(new CustomEvent("qti-request-navigation",{composed:!0,bubbles:!0,detail:{type:"item",id:e}}))}render(){return x` <slot></slot> `}};hr.styles=E`
|
|
193
197
|
:host {
|
|
194
|
-
${
|
|
198
|
+
${ie};
|
|
195
199
|
}
|
|
196
200
|
:host([disabled]) {
|
|
197
|
-
${
|
|
201
|
+
${ne};
|
|
198
202
|
}
|
|
199
|
-
`,d([
|
|
203
|
+
`,d([g({type:String,attribute:"item-id"})],hr.prototype,"itemId",2),hr=d([k("test-item-link")],hr);var hi=class extends C{constructor(){super(),this.addEventListener("click",()=>this.dispatchEvent(new CustomEvent("test-end-attempt",{bubbles:!0})))}render(){return x` <slot></slot> `}};hi.styles=E`
|
|
200
204
|
:host {
|
|
201
|
-
${
|
|
205
|
+
${ie};
|
|
202
206
|
}
|
|
203
207
|
:host([disabled]) {
|
|
204
|
-
${
|
|
208
|
+
${ne};
|
|
205
209
|
}
|
|
206
|
-
`,
|
|
210
|
+
`,hi=d([k("test-end-attempt")],hi);var fi,fr,Ol,Hl,Ce=class extends C{constructor(){super(...arguments);L(this,fr);this.shown=!1;this.disabled=!1;this.showCorrectText="Show correct response";this.hideCorrectText="Hide correct response";this.noCorrectResponseText="No correct response specified";L(this,fi)}willUpdate(e){let t=this.computedContext?.testParts.flatMap(i=>i.sections.flatMap(n=>n.items)).find(i=>i.active);if(I(this,fi)!==t&&(this.shown=!1,U(this,fi,t)),t){let i=!!t?.variables?.some(o=>o.correctResponse),n=!!t?.variables?.some(o=>o.mapping?.mapEntries?.length>0||o.areaMapping?.areaMapEntries?.length>0);this.disabled=!i&&!n}else this.disabled=!0}render(){return x` <div @click="${P(this,fr,Ol)}">${P(this,fr,Hl).call(this)}</div> `}};fi=new WeakMap,fr=new WeakSet,Ol=function(){this.disabled||(this.shown=!this.shown,this.dispatchEvent(new CustomEvent("test-show-correct-response",{detail:this.shown,bubbles:!0})))},Hl=function(){return this.disabled?this.noCorrectResponseText:this.shown?this.hideCorrectText:this.showCorrectText},Ce.styles=E`
|
|
207
211
|
:host {
|
|
208
|
-
${
|
|
212
|
+
${ie};
|
|
209
213
|
}
|
|
210
214
|
:host([disabled]) {
|
|
211
|
-
${
|
|
215
|
+
${ne};
|
|
212
216
|
}
|
|
213
|
-
`,d([
|
|
214
|
-
`;case"r":return"\r";case"t":return" ";case"b":return"\b";case"f":return"\f";default:return e}}),no=class{#e;#t=-1;#r=0;#i;constructor(i){this.#e=i,this.#o()}nextToken(){for(;_c(this.#i);)this.#o(!0);if(Dc(this.#i))return this.#a();if(Ha(this.#i))return this.#c();if(ri(this.#i))return this.#d();if(this.#i===46)return this.#l();if(this.#i===44)return this.#u();if(this.#i===58)return this.#h();if($c(this.#i))return this.#b();if(Oc(this.#i))return this.#f();if(this.#o(),this.#i!==void 0)throw new Error(`Expected end of input, got ${this.#i}`)}#o(i){this.#t++,this.#t<this.#e.length?(this.#i=this.#e.charCodeAt(this.#t),i===!0&&(this.#r=this.#t)):this.#i=void 0}#s(i=0){let e=this.#e.substring(this.#r,this.#t+i);return i===0&&this.#n(),e}#n(){this.#r=this.#t}#a(){let i="unterminated string",e=this.#i;for(this.#o(!0);this.#i!==e;){if(this.#i===void 0)throw new Error(i);if(this.#i===92&&(this.#o(),this.#i===void 0))throw new Error(i);this.#o()}let t=Pe(O.STRING,Vc(this.#s()));return this.#o(),t}#c(){do this.#o();while(Lc(this.#i));let i=this.#s(),e=Pc(i)?O.KEYWORD:O.IDENTIFIER;return Pe(e,i)}#d(){do this.#o();while(ri(this.#i));return this.#i===46?this.#l():Pe(O.INTEGER,this.#s())}#l(){return this.#o(),ri(this.#i)?this.#g():(this.#n(),Pe(O.DOT,".",so))}#u(){return this.#o(!0),Pe(O.COMMA,",")}#h(){return this.#o(!0),Pe(O.COLON,":")}#g(){do this.#o();while(ri(this.#i));return Pe(O.DECIMAL,this.#s())}#b(){this.#o();let i=this.#s(2);if(Rc.indexOf(i)!==-1)this.#o(),this.#o();else{if(i=this.#s(1),i==="=>")return this.#o(),Pe(O.ARROW,i);Mc.indexOf(i)!==-1&&this.#o()}return i=this.#s(),Pe(O.OPERATOR,i,Is[i])}#f(){let i=String.fromCharCode(this.#i),e=Pe(O.GROUPER,i,Is[i]);return this.#o(!0),e}};var ks=(n,i)=>new ii(n,i).parse(),ii=class{#e;#t;#r;#i;#o;constructor(i,e){this.#t=new no(i),this.#r=e}parse(){return this.#s(),this.#n()}#s(i,e){if(!this._matches(i,e))throw new Error(`Expected kind ${i} (${e}), was ${this.#i?.kind} (${this.#i?.value})`);let t=this.#t.nextToken();this.#i=t,this.#e=t?.kind,this.#o=t?.value}_matches(i,e){return!(i&&this.#e!==i||e&&this.#o!==e)}#n(){if(!this.#i)return this.#r.empty();let i=this.#l();return i===void 0?void 0:this.#a(i,0)}#a(i,e){if(i===void 0)throw new Error("Expected left to be defined.");for(;this.#i;)if(this._matches(O.GROUPER,"(")){let t=this.#p();i=this.#r.invoke(i,void 0,t)}else if(this._matches(O.GROUPER,"[")){let t=this.#v();i=this.#r.index(i,t)}else if(this._matches(O.DOT)){this.#s();let t=this.#l();i=this.#c(i,t)}else{if(this._matches(O.KEYWORD))break;if(this._matches(O.OPERATOR)&&this.#i.precedence>=e)i=this.#o==="?"?this.#u(i):this.#d(i,this.#i);else break}return i}#c(i,e){if(e===void 0)throw new Error("expected identifier");if(e.type==="ID")return this.#r.getter(i,e.value);if(e.type==="Invoke"&&e.receiver.type==="ID"){let t=e.receiver;return this.#r.invoke(i,t.value,e.arguments)}else throw new Error(`expected identifier: ${e}`)}#d(i,e){if(Na.indexOf(e.value)===-1)throw new Error(`unknown operator: ${e.value}`);this.#s();let t=this.#l();for(;(this.#e===O.OPERATOR||this.#e===O.DOT||this.#e===O.GROUPER)&&this.#i.precedence>e.precedence;)t=this.#a(t,this.#i.precedence);return this.#r.binary(i,e.value,t)}#l(){if(this._matches(O.OPERATOR)){let i=this.#o;if(this.#s(),i==="+"||i==="-"){if(this._matches(O.INTEGER))return this.#m(i);if(this._matches(O.DECIMAL))return this.#w(i)}if(Va.indexOf(i)===-1)throw new Error(`unexpected token: ${i}`);let e=this.#a(this.#h(),so);return this.#r.unary(i,e)}return this.#h()}#u(i){this.#s(O.OPERATOR,"?");let e=this.#n();this.#s(O.COLON);let t=this.#n();return this.#r.ternary(i,e,t)}#h(){switch(this.#e){case O.KEYWORD:let i=this.#o;if(i==="this")return this.#s(),this.#r.id(i);throw oo.indexOf(i)!==-1?new Error(`unexpected keyword: ${i}`):new Error(`unrecognized keyword: ${i}`);case O.IDENTIFIER:return this.#f();case O.STRING:return this.#q();case O.INTEGER:return this.#m();case O.DECIMAL:return this.#w();case O.GROUPER:return this.#o==="("?this.#x():this.#o==="{"?this.#b():this.#o==="["?this.#g():void 0;case O.COLON:throw new Error('unexpected token ":"');default:return}}#g(){let i=[];do{if(this.#s(),this._matches(O.GROUPER,"]"))break;i.push(this.#n())}while(this._matches(O.COMMA));return this.#s(O.GROUPER,"]"),this.#r.list(i)}#b(){let i={};do{if(this.#s(),this._matches(O.GROUPER,"}"))break;let e=this.#o;(this._matches(O.STRING)||this._matches(O.IDENTIFIER))&&this.#s(),this.#s(O.COLON),i[e]=this.#n()}while(this._matches(O.COMMA));return this.#s(O.GROUPER,"}"),this.#r.map(i)}#f(){let i=this.#o;if(i==="true")return this.#s(),this.#r.literal(!0);if(i==="false")return this.#s(),this.#r.literal(!1);if(i==="null")return this.#s(),this.#r.literal(null);if(i==="undefined")return this.#s(),this.#r.literal(void 0);let e=this.#y(),t=this.#p();return t?this.#r.invoke(e,void 0,t):e}#y(){if(!this._matches(O.IDENTIFIER))throw new Error(`expected identifier: ${this.#o}`);let i=this.#o;return this.#s(),this.#r.id(i)}#p(){if(!this._matches(O.GROUPER,"("))return;let i=[];do{if(this.#s(),this._matches(O.GROUPER,")"))break;let e=this.#n();i.push(e)}while(this._matches(O.COMMA));return this.#s(O.GROUPER,")"),i}#v(){this.#s();let i=this.#n();return this.#s(O.GROUPER,"]"),i}#x(){let i=this.#p();if(this._matches(O.ARROW)){this.#s();let e=this.#n(),t=i?.map(r=>r.value)??[];return this.#r.arrowFunction(t,e)}else return this.#r.paren(i[0])}#q(){let i=this.#r.literal(this.#o);return this.#s(),i}#m(i=""){let e=this.#r.literal(parseInt(`${i}${this.#o}`,10));return this.#s(),e}#w(i=""){let e=this.#r.literal(parseFloat(`${i}${this.#o}`));return this.#s(),e}};var{hasOwn:Fa,fromEntries:Nc}=Object,Hc={"+":(n,i)=>n+i,"-":(n,i)=>n-i,"*":(n,i)=>n*i,"/":(n,i)=>n/i,"%":(n,i)=>n%i,"==":(n,i)=>n==i,"!=":(n,i)=>n!=i,"===":(n,i)=>n===i,"!==":(n,i)=>n!==i,">":(n,i)=>n>i,">=":(n,i)=>n>=i,"<":(n,i)=>n<i,"<=":(n,i)=>n<=i,"||":(n,i)=>n||i,"&&":(n,i)=>n&&i,"??":(n,i)=>n??i,"|":(n,i)=>i(n),"|>":(n,i)=>i(n)},Fc={"+":n=>n,"-":n=>-n,"!":n=>!n},ao=class{empty(){return{type:"Empty",evaluate(i){return i},getIds(i){return i}}}literal(i){return{type:"Literal",value:i,evaluate(e){return this.value},getIds(e){return e}}}id(i){return{type:"ID",value:i,evaluate(e){return this.value==="this"?e:e?.[this.value]},getIds(e){return e.push(this.value),e}}}unary(i,e){let t=Fc[i];return{type:"Unary",operator:i,child:e,evaluate(r){return t(this.child.evaluate(r))},getIds(r){return this.child.getIds(r)}}}binary(i,e,t){let r=Hc[e];return{type:"Binary",operator:e,left:i,right:t,evaluate(o){if(this.operator==="="){if(this.left.type!=="ID"&&this.left.type!=="Getter"&&this.left.type!=="Index")throw new Error(`Invalid assignment target: ${this.left}`);let s=this.right.evaluate(o),a,l;return this.left.type==="Getter"?(a=this.left.receiver.evaluate(o),l=this.left.name):this.left.type==="Index"?(a=this.left.receiver.evaluate(o),l=this.left.argument.evaluate(o)):this.left.type==="ID"&&(a=o,l=this.left.value),a===void 0?void 0:a[l]=s}return r(this.left.evaluate(o),this.right.evaluate(o))},getIds(o){return this.left.getIds(o),this.right.getIds(o),o}}}getter(i,e){return{type:"Getter",receiver:i,name:e,evaluate(t){return this.receiver.evaluate(t)?.[this.name]},getIds(t){return this.receiver.getIds(t),t}}}invoke(i,e,t){if(e!=null&&typeof e!="string")throw new Error("method not a string");return{type:"Invoke",receiver:i,method:e,arguments:t,evaluate(r){let o=this.receiver.evaluate(r),s=this.method?o:r?.this??r,a=this.method?o?.[e]:o,c=(this.arguments??[]).map(p=>p?.evaluate(r));return a?.apply?.(s,c)},getIds(r){return this.receiver.getIds(r),this.arguments?.forEach(o=>o?.getIds(r)),r}}}paren(i){return i}index(i,e){return{type:"Index",receiver:i,argument:e,evaluate(t){return this.receiver.evaluate(t)?.[this.argument.evaluate(t)]},getIds(t){return this.receiver.getIds(t),t}}}ternary(i,e,t){return{type:"Ternary",condition:i,trueExpr:e,falseExpr:t,evaluate(r){return this.condition.evaluate(r)?this.trueExpr.evaluate(r):this.falseExpr.evaluate(r)},getIds(r){return this.condition.getIds(r),this.trueExpr.getIds(r),this.falseExpr.getIds(r),r}}}map(i){return{type:"Map",entries:i,evaluate(e){let t={};if(i&&this.entries)for(let r in i){let o=this.entries[r];o&&(t[r]=o.evaluate(e))}return t},getIds(e){if(i&&this.entries)for(let t in i){let r=this.entries[t];r&&r.getIds(e)}return e}}}list(i){return{type:"List",items:i,evaluate(e){return this.items?.map(t=>t?.evaluate(e))},getIds(e){return this.items?.forEach(t=>t?.getIds(e)),e}}}arrowFunction(i,e){return{type:"ArrowFunction",params:i,body:e,evaluate(t){let r=this.params,o=this.body;return function(...s){let a=Nc(r.map((c,p)=>[c,s[p]])),l=new Proxy(t??{},{set(c,p,h){return Fa(a,p)&&(a[p]=h),c[p]=h},get(c,p){return Fa(a,p)?a[p]:c[p]}});return o.evaluate(l)}},getIds(t){return this.body.getIds(t).filter(r=>!this.params.includes(r))}}}};var Ms=null,Ba={boundAttributeSuffix:Y.M,marker:Y.P,markerMatch:Y.A,HTML_RESULT:Y.C,getTemplateHtml:Y.L,overrideDirectiveResolve:(n,i)=>class extends n{_$AS(e,t){return i(this,t)}},patchDirectiveResolve:(n,i)=>{if(n.prototype._$AS.name!==i.name){Ms??=n.prototype._$AS.name;for(let e=n.prototype;e!==Object.prototype;e=Object.getPrototypeOf(e))if(e.hasOwnProperty(Ms))return void(e[Ms]=i);throw Error("Internal error: It is possible that both dev mode and production mode Lit was mixed together during SSR. Please comment on the issue: https://github.com/lit/lit/issues/4527")}},setDirectiveClass(n,i){n._$litDirective$=i},getAttributePartCommittedValue:(n,i,e)=>{let t=X;return n.j=r=>t=r,n._$AI(i,n,e),t},connectedDisconnectable:n=>({...n,_$AU:!0}),resolveDirective:Y.V,AttributePart:Y.H,PropertyPart:Y.B,BooleanAttributePart:Y.N,EventPart:Y.U,ElementPart:Y.F,TemplateInstance:Y.R,isIterable:Y.D,ChildPart:Y.I};var{AttributePart:Bc,PropertyPart:Uc,BooleanAttributePart:zc,EventPart:jc}=Ba,_s=new ao,Rs=new Map,Ua=n=>n.replace(/-(-|\w)/g,(i,e)=>e.toUpperCase()),lo=(n,i)=>{let e=Rs.get(n);if(e===void 0){if(Rs.has(n))return;if(n=n.trim(),n.startsWith("{{")&&n.endsWith("}}")){let t=n.substring(2,n.length-2).trim();e=new ii(t,_s).parse(),Rs.set(n,e)}}return e?.evaluate(i)},Wc=(n,i,e,t)=>{let r=n.getAttribute("if");if(r!==null&&lo(r,i))return co(n,i,e,t)},za=/(?<!\\){{(.*?)(?:(?<!\\)}})/g,ja=n=>/(?:\\{{)|(?:\\}})/g.test(n),oi=n=>n.replaceAll(/\\{{/g,"{{").replace(/\\}}/g,"}}"),Gc=(n,i,e,t)=>{let r=n.getAttribute("repeat");if(r!==null){let o=lo(r,i);if(!o[Symbol.iterator])return N;let s=si(n),a=-1,l=[];for(let c of o){a++;let p=Object.create(i);p.item=c,p.index=a,p.this=i.this??i;let h=[];for(let y of s.parts){let v=y.update(p,e,t);y.type===1?h.push(...v):h.push(v)}let m={_$litType$:s,values:h};l.push(m)}return l}},Ga={if:Wc,repeat:Gc},De=(n,i=Ga,e={},t)=>{let o=si(n).renderers;if(t){let a=si(t).renderers,l=o.super;l!==void 0?e={...o,...e,super:(c,p,h)=>(h={...a,...h,super:(m,y,v)=>co(t,m,y,v)},l(c,p,h))}:(e={...a,...o,...e},n=t)}else e={...o,...e};return s=>co(n,s,i,e)};var co=(n,i,e=Ga,t={})=>{let r=si(n),o=[];for(let a of r.parts){let l=a.update(i,e,t);a.type===1?o.push(...l):o.push(l)}return{_$litType$:r,values:o}},Wa=new Map,si=n=>{let i=Wa.get(n);return i===void 0&&Wa.set(n,i=Xc(n)),i},Xc=n=>{let i={h:void 0,el:n.cloneNode(!0),parts:[],renderers:{}},e=document.createTreeWalker(i.el.content,NodeFilter.SHOW_ELEMENT|NodeFilter.SHOW_TEXT|NodeFilter.SHOW_COMMENT),t=e.currentNode,r=-1,o=[];for(;(t=e.nextNode())!==null;)if(t.nodeType===Node.COMMENT_NODE)r++;else if(t.nodeType===Node.ELEMENT_NODE){r++;let s=t;if(s.tagName==="TEMPLATE"){let l=s.getAttribute("type"),c=s.getAttribute("name"),p=s.getAttribute("call");if(p!==null||l!==null||c!==null){s.parentNode.insertBefore(document.createComment(""),s),o.push(s);let h;if(p!==null){let m=p.trim(),y=m.startsWith("{{")&&m.endsWith("}}");h=(v,w,f)=>{let u=s.getAttribute("data"),g=u===null?void 0:lo(u,v);return(y?lo(m,v):f[p])?.(g,w,f)}}else l!==null?h=(m,y,v)=>{let w=y[l];return w?.(s,m,y,v)}:(c==="super"?i.renderers.super=(m,y,v)=>{let w=v.super,f=si(s);return v={...v,...f.renderers},w(m,y,v)}:i.renderers[c]=(m,y,v)=>co(s,m,y,v),h=(m,y,v)=>{let w=v[c];return w?.(m,y,v)});i.parts.push({type:2,index:r,update:h});continue}}let a=s.getAttributeNames();for(let l of a){let c=s.getAttribute(l),p=c.split(za);if(p.length===1){ja(c)&&s.setAttribute(l,oi(c));continue}s.removeAttribute(l);let h=l,m=Bc,y=l[0];y==="."?(h=Ua(l.substring(1)),m=Uc):y==="?"?(h=l.substring(1),m=zc):y==="@"&&(h=Ua(l.substring(1)),m=jc);let v=[oi(p[0])],w=[];for(let f=1;f<p.length;f+=2){let u=p[f];w.push(ks(u,_s)),v.push(oi(p[f+1]))}i.parts.push({type:1,index:r,name:h,strings:v,ctor:m,update:(f,u,g)=>w.map(q=>q.evaluate(f))})}}else if(t.nodeType===Node.TEXT_NODE){let s=t,a=s.textContent,l=a.split(za);l.length>1?s.textContent=oi(l[0]):ja(a)&&(s.textContent=oi(a));for(let c=1;c<l.length;c+=2){let p=l[c],h=ks(p,_s);i.parts.push({type:2,index:++r,update:(y,v)=>h.evaluate(y)});let m=new Text(l[c+1].replace("\\{{","{{"));s.parentNode.insertBefore(m,s.nextSibling),s.parentNode.insertBefore(document.createComment(""),s.nextSibling),s=m,e.currentNode=m}}for(let s of o)s.remove();return i};var ai,ni=class extends C{constructor(){super();_(this,ai);B(this,ai,this.attachInternals()),I(this,ai).ariaLabel="pagination"}createRenderRoot(){return this}connectedCallback(){super.connectedCallback();let e=this.querySelector("template");this.myTemplate=De(e)}render(){if(!this.computedContext)return x``;let e=this.computedContext.testParts.flatMap(t=>t.sections.flatMap(r=>r.items));return x` ${e.map(t=>this.myTemplate({item:t,view:this.computedContext.view}))} `}};ai=new WeakMap,d([P({context:W,subscribe:!0})],ni.prototype,"computedContext",2),ni=d([k("test-paging-buttons-stamp")],ni);var po=class{constructor(i){this.G=i}disconnect(){this.G=void 0}reconnect(i){this.G=i}deref(){return this.G}},uo=class{constructor(){this.Y=void 0,this.Z=void 0}get(){return this.Y}pause(){this.Y??=new Promise((i=>this.Z=i))}resume(){this.Z?.(),this.Y=this.Z=void 0}};var Xa=n=>!ia(n)&&typeof n.then=="function",Qa=1073741823,Ls=class extends it{constructor(){super(...arguments),this._$Cwt=Qa,this._$Cbt=[],this._$CK=new po(this),this._$CX=new uo}render(...i){return i.find((e=>!Xa(e)))??X}update(i,e){let t=this._$Cbt,r=t.length;this._$Cbt=e;let o=this._$CK,s=this._$CX;this.isConnected||this.disconnected();for(let a=0;a<e.length&&!(a>this._$Cwt);a++){let l=e[a];if(!Xa(l))return this._$Cwt=a,l;a<r&&l===t[a]||(this._$Cwt=Qa,r=0,Promise.resolve(l).then((async c=>{for(;s.get();)await s.get();let p=o.deref();if(p!==void 0){let h=p._$Cbt.indexOf(l);h>-1&&h<p._$Cwt&&(p._$Cwt=h,p.setValue(c))}})))}return X}disconnected(){this._$CK.disconnect(),this._$CX.pause()}reconnected(){this._$CK.reconnect(this),this._$CX.resume()}},mo=ae(Ls);var ho=`@layer qti-base, qti-components, qti-utilities, qti-variants, qti-extended;
|
|
217
|
+
`,d([$({context:G,subscribe:!0})],Ce.prototype,"computedContext",2),d([g({type:Boolean,reflect:!0})],Ce.prototype,"shown",2),d([g({type:Boolean,reflect:!0})],Ce.prototype,"disabled",2),d([g({type:String})],Ce.prototype,"showCorrectText",2),d([g({type:String})],Ce.prototype,"hideCorrectText",2),d([g({type:String})],Ce.prototype,"noCorrectResponseText",2),Ce=d([k("test-show-correct-response")],Ce);var $n=globalThis,Tn=$n.trustedTypes,Fl=Tn?Tn.createPolicy("lit-html",{createHTML:s=>s}):void 0,cs="$lit$",Xe=`lit$${Math.random().toFixed(9).slice(2)}$`,ds="?"+Xe,Jd=`<${ds}>`,Ot=$n.document===void 0?{createTreeWalker:()=>({})}:document,In=()=>Ot.createComment(""),bi=s=>s===null||typeof s!="object"&&typeof s!="function",ps=Array.isArray,Gl=s=>ps(s)||typeof s?.[Symbol.iterator]=="function",ls=`[
|
|
218
|
+
\f\r]`,gi=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,Ul=/-->/g,Bl=/>/g,Dt=RegExp(`>|${ls}(?:([^\\s"'>=/]+)(${ls}*=${ls}*(?:[^
|
|
219
|
+
\f\r"'\`<>=]|("|')|))|$)`,"g"),zl=/'/g,jl=/"/g,Xl=/^(?:script|style|textarea|title)$/i,us=s=>(r,...e)=>({_$litType$:s,strings:r,values:e}),Ay=us(1),Ty=us(2),Iy=us(3),Ht=Symbol.for("lit-noChange"),X=Symbol.for("lit-nothing"),Wl=new WeakMap,Nt=Ot.createTreeWalker(Ot,129);function Ql(s,r){if(!ps(s)||!s.hasOwnProperty("raw"))throw Error("invalid template strings array");return Fl!==void 0?Fl.createHTML(r):r}var Yl=(s,r)=>{let e=s.length-1,t=[],i,n=r===2?"<svg>":r===3?"<math>":"",o=gi;for(let a=0;a<e;a++){let l=s[a],c,p,u=-1,h=0;for(;h<l.length&&(o.lastIndex=h,p=o.exec(l),p!==null);)h=o.lastIndex,o===gi?p[1]==="!--"?o=Ul:p[1]!==void 0?o=Bl:p[2]!==void 0?(Xl.test(p[2])&&(i=RegExp("</"+p[2],"g")),o=Dt):p[3]!==void 0&&(o=Dt):o===Dt?p[0]===">"?(o=i??gi,u=-1):p[1]===void 0?u=-2:(u=o.lastIndex-p[2].length,c=p[1],o=p[3]===void 0?Dt:p[3]==='"'?jl:zl):o===jl||o===zl?o=Dt:o===Ul||o===Bl?o=gi:(o=Dt,i=void 0);let y=o===Dt&&s[a+1].startsWith("/>")?" ":"";n+=o===gi?l+Jd:u>=0?(t.push(c),l.slice(0,u)+cs+l.slice(u)+Xe+y):l+Xe+(u===-2?a:y)}return[Ql(s,n+(s[e]||"<?>")+(r===2?"</svg>":r===3?"</math>":"")),t]},vi=class s{constructor({strings:r,_$litType$:e},t){let i;this.parts=[];let n=0,o=0,a=r.length-1,l=this.parts,[c,p]=Yl(r,e);if(this.el=s.createElement(c,t),Nt.currentNode=this.el.content,e===2||e===3){let u=this.el.content.firstChild;u.replaceWith(...u.childNodes)}for(;(i=Nt.nextNode())!==null&&l.length<a;){if(i.nodeType===1){if(i.hasAttributes())for(let u of i.getAttributeNames())if(u.endsWith(cs)){let h=p[o++],y=i.getAttribute(u).split(Xe),v=/([.?@])?(.*)/.exec(h);l.push({type:1,index:n,name:v[2],strings:y,ctor:v[1]==="."?kn:v[1]==="?"?Mn:v[1]==="@"?_n:Ut}),i.removeAttribute(u)}else u.startsWith(Xe)&&(l.push({type:6,index:n}),i.removeAttribute(u));if(Xl.test(i.tagName)){let u=i.textContent.split(Xe),h=u.length-1;if(h>0){i.textContent=Tn?Tn.emptyScript:"";for(let y=0;y<h;y++)i.append(u[y],In()),Nt.nextNode(),l.push({type:2,index:++n});i.append(u[h],In())}}}else if(i.nodeType===8)if(i.data===ds)l.push({type:2,index:n});else{let u=-1;for(;(u=i.data.indexOf(Xe,u+1))!==-1;)l.push({type:7,index:n}),u+=Xe.length-1}n++}}static createElement(r,e){let t=Ot.createElement("template");return t.innerHTML=r,t}};function Ft(s,r,e=s,t){if(r===Ht)return r;let i=t!==void 0?e._$Co?.[t]:e._$Cl,n=bi(r)?void 0:r._$litDirective$;return i?.constructor!==n&&(i?._$AO?.(!1),n===void 0?i=void 0:(i=new n(s),i._$AT(s,e,t)),t!==void 0?(e._$Co??=[])[t]=i:e._$Cl=i),i!==void 0&&(r=Ft(s,i._$AS(s,r.values),i,t)),r}var Rn=class{constructor(r,e){this._$AV=[],this._$AN=void 0,this._$AD=r,this._$AM=e}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(r){let{el:{content:e},parts:t}=this._$AD,i=(r?.creationScope??Ot).importNode(e,!0);Nt.currentNode=i;let n=Nt.nextNode(),o=0,a=0,l=t[0];for(;l!==void 0;){if(o===l.index){let c;l.type===2?c=new yi(n,n.nextSibling,this,r):l.type===1?c=new l.ctor(n,l.name,l.strings,this,r):l.type===6&&(c=new Ln(n,this,r)),this._$AV.push(c),l=t[++a]}o!==l?.index&&(n=Nt.nextNode(),o++)}return Nt.currentNode=Ot,i}p(r){let e=0;for(let t of this._$AV)t!==void 0&&(t.strings!==void 0?(t._$AI(r,t,e),e+=t.strings.length-2):t._$AI(r[e])),e++}},yi=class s{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(r,e,t,i){this.type=2,this._$AH=X,this._$AN=void 0,this._$AA=r,this._$AB=e,this._$AM=t,this.options=i,this._$Cv=i?.isConnected??!0}get parentNode(){let r=this._$AA.parentNode,e=this._$AM;return e!==void 0&&r?.nodeType===11&&(r=e.parentNode),r}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(r,e=this){r=Ft(this,r,e),bi(r)?r===X||r==null||r===""?(this._$AH!==X&&this._$AR(),this._$AH=X):r!==this._$AH&&r!==Ht&&this._(r):r._$litType$!==void 0?this.$(r):r.nodeType!==void 0?this.T(r):Gl(r)?this.k(r):this._(r)}O(r){return this._$AA.parentNode.insertBefore(r,this._$AB)}T(r){this._$AH!==r&&(this._$AR(),this._$AH=this.O(r))}_(r){this._$AH!==X&&bi(this._$AH)?this._$AA.nextSibling.data=r:this.T(Ot.createTextNode(r)),this._$AH=r}$(r){let{values:e,_$litType$:t}=r,i=typeof t=="number"?this._$AC(r):(t.el===void 0&&(t.el=vi.createElement(Ql(t.h,t.h[0]),this.options)),t);if(this._$AH?._$AD===i)this._$AH.p(e);else{let n=new Rn(i,this),o=n.u(this.options);n.p(e),this.T(o),this._$AH=n}}_$AC(r){let e=Wl.get(r.strings);return e===void 0&&Wl.set(r.strings,e=new vi(r)),e}k(r){ps(this._$AH)||(this._$AH=[],this._$AR());let e=this._$AH,t,i=0;for(let n of r)i===e.length?e.push(t=new s(this.O(In()),this.O(In()),this,this.options)):t=e[i],t._$AI(n),i++;i<e.length&&(this._$AR(t&&t._$AB.nextSibling,i),e.length=i)}_$AR(r=this._$AA.nextSibling,e){for(this._$AP?.(!1,!0,e);r!==this._$AB;){let t=r.nextSibling;r.remove(),r=t}}setConnected(r){this._$AM===void 0&&(this._$Cv=r,this._$AP?.(r))}},Ut=class{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(r,e,t,i,n){this.type=1,this._$AH=X,this._$AN=void 0,this.element=r,this.name=e,this._$AM=i,this.options=n,t.length>2||t[0]!==""||t[1]!==""?(this._$AH=Array(t.length-1).fill(new String),this.strings=t):this._$AH=X}_$AI(r,e=this,t,i){let n=this.strings,o=!1;if(n===void 0)r=Ft(this,r,e,0),o=!bi(r)||r!==this._$AH&&r!==Ht,o&&(this._$AH=r);else{let a=r,l,c;for(r=n[0],l=0;l<n.length-1;l++)c=Ft(this,a[t+l],e,l),c===Ht&&(c=this._$AH[l]),o||=!bi(c)||c!==this._$AH[l],c===X?r=X:r!==X&&(r+=(c??"")+n[l+1]),this._$AH[l]=c}o&&!i&&this.j(r)}j(r){r===X?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,r??"")}},kn=class extends Ut{constructor(){super(...arguments),this.type=3}j(r){this.element[this.name]=r===X?void 0:r}},Mn=class extends Ut{constructor(){super(...arguments),this.type=4}j(r){this.element.toggleAttribute(this.name,!!r&&r!==X)}},_n=class extends Ut{constructor(r,e,t,i,n){super(r,e,t,i,n),this.type=5}_$AI(r,e=this){if((r=Ft(this,r,e,0)??X)===Ht)return;let t=this._$AH,i=r===X&&t!==X||r.capture!==t.capture||r.once!==t.once||r.passive!==t.passive,n=r!==X&&(t===X||i);i&&this.element.removeEventListener(this.name,this,t),n&&this.element.addEventListener(this.name,this,r),this._$AH=r}handleEvent(r){typeof this._$AH=="function"?this._$AH.call(this.options?.host??this.element,r):this._$AH.handleEvent(r)}},Ln=class{constructor(r,e,t){this.element=r,this.type=6,this._$AN=void 0,this._$AM=e,this.options=t}get _$AU(){return this._$AM._$AU}_$AI(r){Ft(this,r)}},te={M:cs,P:Xe,A:ds,C:1,L:Yl,R:Rn,D:Gl,V:Ft,I:yi,H:Ut,N:Mn,U:_n,B:kn,F:Ln},Kd=$n.litHtmlPolyfillSupport;Kd?.(vi,yi),($n.litHtmlVersions??=[]).push("3.3.1");var Pn=["this"],Jl=["+","-","!"],Kl=["=","+","-","*","/","%","^","==","!=",">","<",">=","<=","||","&&","??","&","===","!==","|","|>"],ms={"!":0,":":0,",":0,")":0,"]":0,"}":0,"|>":1,"?":2,"??":3,"||":4,"&&":5,"|":6,"^":7,"&":8,"!=":9,"==":9,"!==":9,"===":9,">=":10,">":10,"<=":10,"<":10,"+":11,"-":11,"%":12,"/":12,"*":12,"(":13,"[":13,".":13,"{":13},Vn=13;var Zd=["==","!=","<=",">=","||","&&","??","|>"],ep=["===","!=="],D;(function(s){s[s.STRING=1]="STRING",s[s.IDENTIFIER=2]="IDENTIFIER",s[s.DOT=3]="DOT",s[s.COMMA=4]="COMMA",s[s.COLON=5]="COLON",s[s.INTEGER=6]="INTEGER",s[s.DECIMAL=7]="DECIMAL",s[s.OPERATOR=8]="OPERATOR",s[s.GROUPER=9]="GROUPER",s[s.KEYWORD=10]="KEYWORD",s[s.ARROW=11]="ARROW"})(D||(D={}));var Ne=(s,r,e=0)=>({kind:s,value:r,precedence:e}),tp=s=>s===9||s===10||s===13||s===32,Zl=s=>s===95||s===36||(s&=-33,65<=s&&s<=90),rp=s=>Zl(s)||xi(s),ip=s=>Pn.indexOf(s)!==-1,np=s=>s===34||s===39,xi=s=>48<=s&&s<=57,op=s=>s===43||s===45||s===42||s===47||s===33||s===38||s===37||s===60||s===61||s===62||s===63||s===94||s===124,sp=s=>s===40||s===41||s===91||s===93||s===123||s===125,ap=s=>s.replace(/\\(.)/g,(r,e)=>{switch(e){case"n":return`
|
|
220
|
+
`;case"r":return"\r";case"t":return" ";case"b":return"\b";case"f":return"\f";default:return e}}),Dn=class{#e;#t=-1;#r=0;#i;constructor(r){this.#e=r,this.#n()}nextToken(){for(;tp(this.#i);)this.#n(!0);if(np(this.#i))return this.#a();if(Zl(this.#i))return this.#c();if(xi(this.#i))return this.#d();if(this.#i===46)return this.#l();if(this.#i===44)return this.#u();if(this.#i===58)return this.#h();if(op(this.#i))return this.#b();if(sp(this.#i))return this.#f();if(this.#n(),this.#i!==void 0)throw new Error(`Expected end of input, got ${this.#i}`)}#n(r){this.#t++,this.#t<this.#e.length?(this.#i=this.#e.charCodeAt(this.#t),r===!0&&(this.#r=this.#t)):this.#i=void 0}#o(r=0){let e=this.#e.substring(this.#r,this.#t+r);return r===0&&this.#s(),e}#s(){this.#r=this.#t}#a(){let r="unterminated string",e=this.#i;for(this.#n(!0);this.#i!==e;){if(this.#i===void 0)throw new Error(r);if(this.#i===92&&(this.#n(),this.#i===void 0))throw new Error(r);this.#n()}let t=Ne(D.STRING,ap(this.#o()));return this.#n(),t}#c(){do this.#n();while(rp(this.#i));let r=this.#o(),e=ip(r)?D.KEYWORD:D.IDENTIFIER;return Ne(e,r)}#d(){do this.#n();while(xi(this.#i));return this.#i===46?this.#l():Ne(D.INTEGER,this.#o())}#l(){return this.#n(),xi(this.#i)?this.#g():(this.#s(),Ne(D.DOT,".",Vn))}#u(){return this.#n(!0),Ne(D.COMMA,",")}#h(){return this.#n(!0),Ne(D.COLON,":")}#g(){do this.#n();while(xi(this.#i));return Ne(D.DECIMAL,this.#o())}#b(){this.#n();let r=this.#o(2);if(ep.indexOf(r)!==-1)this.#n(),this.#n();else{if(r=this.#o(1),r==="=>")return this.#n(),Ne(D.ARROW,r);Zd.indexOf(r)!==-1&&this.#n()}return r=this.#o(),Ne(D.OPERATOR,r,ms[r])}#f(){let r=String.fromCharCode(this.#i),e=Ne(D.GROUPER,r,ms[r]);return this.#n(!0),e}};var hs=(s,r)=>new qi(s,r).parse(),qi=class{#e;#t;#r;#i;#n;constructor(r,e){this.#t=new Dn(r),this.#r=e}parse(){return this.#o(),this.#s()}#o(r,e){if(!this._matches(r,e))throw new Error(`Expected kind ${r} (${e}), was ${this.#i?.kind} (${this.#i?.value})`);let t=this.#t.nextToken();this.#i=t,this.#e=t?.kind,this.#n=t?.value}_matches(r,e){return!(r&&this.#e!==r||e&&this.#n!==e)}#s(){if(!this.#i)return this.#r.empty();let r=this.#l();return r===void 0?void 0:this.#a(r,0)}#a(r,e){if(r===void 0)throw new Error("Expected left to be defined.");for(;this.#i;)if(this._matches(D.GROUPER,"(")){let t=this.#p();r=this.#r.invoke(r,void 0,t)}else if(this._matches(D.GROUPER,"[")){let t=this.#v();r=this.#r.index(r,t)}else if(this._matches(D.DOT)){this.#o();let t=this.#l();r=this.#c(r,t)}else{if(this._matches(D.KEYWORD))break;if(this._matches(D.OPERATOR)&&this.#i.precedence>=e)r=this.#n==="?"?this.#u(r):this.#d(r,this.#i);else break}return r}#c(r,e){if(e===void 0)throw new Error("expected identifier");if(e.type==="ID")return this.#r.getter(r,e.value);if(e.type==="Invoke"&&e.receiver.type==="ID"){let t=e.receiver;return this.#r.invoke(r,t.value,e.arguments)}else throw new Error(`expected identifier: ${e}`)}#d(r,e){if(Kl.indexOf(e.value)===-1)throw new Error(`unknown operator: ${e.value}`);this.#o();let t=this.#l();for(;(this.#e===D.OPERATOR||this.#e===D.DOT||this.#e===D.GROUPER)&&this.#i.precedence>e.precedence;)t=this.#a(t,this.#i.precedence);return this.#r.binary(r,e.value,t)}#l(){if(this._matches(D.OPERATOR)){let r=this.#n;if(this.#o(),r==="+"||r==="-"){if(this._matches(D.INTEGER))return this.#m(r);if(this._matches(D.DECIMAL))return this.#w(r)}if(Jl.indexOf(r)===-1)throw new Error(`unexpected token: ${r}`);let e=this.#a(this.#h(),Vn);return this.#r.unary(r,e)}return this.#h()}#u(r){this.#o(D.OPERATOR,"?");let e=this.#s();this.#o(D.COLON);let t=this.#s();return this.#r.ternary(r,e,t)}#h(){switch(this.#e){case D.KEYWORD:let r=this.#n;if(r==="this")return this.#o(),this.#r.id(r);throw Pn.indexOf(r)!==-1?new Error(`unexpected keyword: ${r}`):new Error(`unrecognized keyword: ${r}`);case D.IDENTIFIER:return this.#f();case D.STRING:return this.#q();case D.INTEGER:return this.#m();case D.DECIMAL:return this.#w();case D.GROUPER:return this.#n==="("?this.#x():this.#n==="{"?this.#b():this.#n==="["?this.#g():void 0;case D.COLON:throw new Error('unexpected token ":"');default:return}}#g(){let r=[];do{if(this.#o(),this._matches(D.GROUPER,"]"))break;r.push(this.#s())}while(this._matches(D.COMMA));return this.#o(D.GROUPER,"]"),this.#r.list(r)}#b(){let r={};do{if(this.#o(),this._matches(D.GROUPER,"}"))break;let e=this.#n;(this._matches(D.STRING)||this._matches(D.IDENTIFIER))&&this.#o(),this.#o(D.COLON),r[e]=this.#s()}while(this._matches(D.COMMA));return this.#o(D.GROUPER,"}"),this.#r.map(r)}#f(){let r=this.#n;if(r==="true")return this.#o(),this.#r.literal(!0);if(r==="false")return this.#o(),this.#r.literal(!1);if(r==="null")return this.#o(),this.#r.literal(null);if(r==="undefined")return this.#o(),this.#r.literal(void 0);let e=this.#y(),t=this.#p();return t?this.#r.invoke(e,void 0,t):e}#y(){if(!this._matches(D.IDENTIFIER))throw new Error(`expected identifier: ${this.#n}`);let r=this.#n;return this.#o(),this.#r.id(r)}#p(){if(!this._matches(D.GROUPER,"("))return;let r=[];do{if(this.#o(),this._matches(D.GROUPER,")"))break;let e=this.#s();r.push(e)}while(this._matches(D.COMMA));return this.#o(D.GROUPER,")"),r}#v(){this.#o();let r=this.#s();return this.#o(D.GROUPER,"]"),r}#x(){let r=this.#p();if(this._matches(D.ARROW)){this.#o();let e=this.#s(),t=r?.map(i=>i.value)??[];return this.#r.arrowFunction(t,e)}else return this.#r.paren(r[0])}#q(){let r=this.#r.literal(this.#n);return this.#o(),r}#m(r=""){let e=this.#r.literal(parseInt(`${r}${this.#n}`,10));return this.#o(),e}#w(r=""){let e=this.#r.literal(parseFloat(`${r}${this.#n}`));return this.#o(),e}};var{hasOwn:ec,fromEntries:lp}=Object,cp={"+":(s,r)=>s+r,"-":(s,r)=>s-r,"*":(s,r)=>s*r,"/":(s,r)=>s/r,"%":(s,r)=>s%r,"==":(s,r)=>s==r,"!=":(s,r)=>s!=r,"===":(s,r)=>s===r,"!==":(s,r)=>s!==r,">":(s,r)=>s>r,">=":(s,r)=>s>=r,"<":(s,r)=>s<r,"<=":(s,r)=>s<=r,"||":(s,r)=>s||r,"&&":(s,r)=>s&&r,"??":(s,r)=>s??r,"|":(s,r)=>r(s),"|>":(s,r)=>r(s)},dp={"+":s=>s,"-":s=>-s,"!":s=>!s},Nn=class{empty(){return{type:"Empty",evaluate(r){return r},getIds(r){return r}}}literal(r){return{type:"Literal",value:r,evaluate(e){return this.value},getIds(e){return e}}}id(r){return{type:"ID",value:r,evaluate(e){return this.value==="this"?e:e?.[this.value]},getIds(e){return e.push(this.value),e}}}unary(r,e){let t=dp[r];return{type:"Unary",operator:r,child:e,evaluate(i){return t(this.child.evaluate(i))},getIds(i){return this.child.getIds(i)}}}binary(r,e,t){let i=cp[e];return{type:"Binary",operator:e,left:r,right:t,evaluate(n){if(this.operator==="="){if(this.left.type!=="ID"&&this.left.type!=="Getter"&&this.left.type!=="Index")throw new Error(`Invalid assignment target: ${this.left}`);let o=this.right.evaluate(n),a,l;return this.left.type==="Getter"?(a=this.left.receiver.evaluate(n),l=this.left.name):this.left.type==="Index"?(a=this.left.receiver.evaluate(n),l=this.left.argument.evaluate(n)):this.left.type==="ID"&&(a=n,l=this.left.value),a===void 0?void 0:a[l]=o}return i(this.left.evaluate(n),this.right.evaluate(n))},getIds(n){return this.left.getIds(n),this.right.getIds(n),n}}}getter(r,e){return{type:"Getter",receiver:r,name:e,evaluate(t){return this.receiver.evaluate(t)?.[this.name]},getIds(t){return this.receiver.getIds(t),t}}}invoke(r,e,t){if(e!=null&&typeof e!="string")throw new Error("method not a string");return{type:"Invoke",receiver:r,method:e,arguments:t,evaluate(i){let n=this.receiver.evaluate(i),o=this.method?n:i?.this??i,a=this.method?n?.[e]:n,c=(this.arguments??[]).map(p=>p?.evaluate(i));return a?.apply?.(o,c)},getIds(i){return this.receiver.getIds(i),this.arguments?.forEach(n=>n?.getIds(i)),i}}}paren(r){return r}index(r,e){return{type:"Index",receiver:r,argument:e,evaluate(t){return this.receiver.evaluate(t)?.[this.argument.evaluate(t)]},getIds(t){return this.receiver.getIds(t),t}}}ternary(r,e,t){return{type:"Ternary",condition:r,trueExpr:e,falseExpr:t,evaluate(i){return this.condition.evaluate(i)?this.trueExpr.evaluate(i):this.falseExpr.evaluate(i)},getIds(i){return this.condition.getIds(i),this.trueExpr.getIds(i),this.falseExpr.getIds(i),i}}}map(r){return{type:"Map",entries:r,evaluate(e){let t={};if(r&&this.entries)for(let i in r){let n=this.entries[i];n&&(t[i]=n.evaluate(e))}return t},getIds(e){if(r&&this.entries)for(let t in r){let i=this.entries[t];i&&i.getIds(e)}return e}}}list(r){return{type:"List",items:r,evaluate(e){return this.items?.map(t=>t?.evaluate(e))},getIds(e){return this.items?.forEach(t=>t?.getIds(e)),e}}}arrowFunction(r,e){return{type:"ArrowFunction",params:r,body:e,evaluate(t){let i=this.params,n=this.body;return function(...o){let a=lp(i.map((c,p)=>[c,o[p]])),l=new Proxy(t??{},{set(c,p,u){return ec(a,p)&&(a[p]=u),c[p]=u},get(c,p){return ec(a,p)?a[p]:c[p]}});return n.evaluate(l)}},getIds(t){return this.body.getIds(t).filter(i=>!this.params.includes(i))}}}};var fs=null,tc={boundAttributeSuffix:te.M,marker:te.P,markerMatch:te.A,HTML_RESULT:te.C,getTemplateHtml:te.L,overrideDirectiveResolve:(s,r)=>class extends s{_$AS(e,t){return r(this,t)}},patchDirectiveResolve:(s,r)=>{if(s.prototype._$AS.name!==r.name){fs??=s.prototype._$AS.name;for(let e=s.prototype;e!==Object.prototype;e=Object.getPrototypeOf(e))if(e.hasOwnProperty(fs))return void(e[fs]=r);throw Error("Internal error: It is possible that both dev mode and production mode Lit was mixed together during SSR. Please comment on the issue: https://github.com/lit/lit/issues/4527")}},setDirectiveClass(s,r){s._$litDirective$=r},getAttributePartCommittedValue:(s,r,e)=>{let t=Ht;return s.j=i=>t=i,s._$AI(r,s,e),t},connectedDisconnectable:s=>({...s,_$AU:!0}),resolveDirective:te.V,AttributePart:te.H,PropertyPart:te.B,BooleanAttributePart:te.N,EventPart:te.U,ElementPart:te.F,TemplateInstance:te.R,isIterable:te.D,ChildPart:te.I};var{AttributePart:pp,PropertyPart:up,BooleanAttributePart:mp,EventPart:hp}=tc,bs=new Nn,gs=new Map,rc=s=>s.replace(/-(-|\w)/g,(r,e)=>e.toUpperCase()),On=(s,r)=>{let e=gs.get(s);if(e===void 0){if(gs.has(s))return;if(s=s.trim(),s.startsWith("{{")&&s.endsWith("}}")){let t=s.substring(2,s.length-2).trim();e=new qi(t,bs).parse(),gs.set(s,e)}}return e?.evaluate(r)},fp=(s,r,e,t)=>{let i=s.getAttribute("if");if(i!==null&&On(i,r))return Hn(s,r,e,t)},ic=/(?<!\\){{(.*?)(?:(?<!\\)}})/g,nc=s=>/(?:\\{{)|(?:\\}})/g.test(s),wi=s=>s.replaceAll(/\\{{/g,"{{").replace(/\\}}/g,"}}"),gp=(s,r,e,t)=>{let i=s.getAttribute("repeat");if(i!==null){let n=On(i,r);if(!n[Symbol.iterator])return X;let o=Ci(s),a=-1,l=[];for(let c of n){a++;let p=Object.create(r);p.item=c,p.index=a,p.this=r.this??r;let u=[];for(let y of o.parts){let v=y.update(p,e,t);y.type===1?u.push(...v):u.push(v)}let h={_$litType$:o,values:u};l.push(h)}return l}},sc={if:fp,repeat:gp},Oe=(s,r=sc,e={},t)=>{let n=Ci(s).renderers;if(t){let a=Ci(t).renderers,l=n.super;l!==void 0?e={...n,...e,super:(c,p,u)=>(u={...a,...u,super:(h,y,v)=>Hn(t,h,y,v)},l(c,p,u))}:(e={...a,...n,...e},s=t)}else e={...n,...e};return o=>Hn(s,o,r,e)};var Hn=(s,r,e=sc,t={})=>{let i=Ci(s),n=[];for(let a of i.parts){let l=a.update(r,e,t);a.type===1?n.push(...l):n.push(l)}return{_$litType$:i,values:n}},oc=new Map,Ci=s=>{let r=oc.get(s);return r===void 0&&oc.set(s,r=bp(s)),r},bp=s=>{let r={h:void 0,el:s.cloneNode(!0),parts:[],renderers:{}},e=document.createTreeWalker(r.el.content,NodeFilter.SHOW_ELEMENT|NodeFilter.SHOW_TEXT|NodeFilter.SHOW_COMMENT),t=e.currentNode,i=-1,n=[];for(;(t=e.nextNode())!==null;)if(t.nodeType===Node.COMMENT_NODE)i++;else if(t.nodeType===Node.ELEMENT_NODE){i++;let o=t;if(o.tagName==="TEMPLATE"){let l=o.getAttribute("type"),c=o.getAttribute("name"),p=o.getAttribute("call");if(p!==null||l!==null||c!==null){o.parentNode.insertBefore(document.createComment(""),o),n.push(o);let u;if(p!==null){let h=p.trim(),y=h.startsWith("{{")&&h.endsWith("}}");u=(v,w,f)=>{let m=o.getAttribute("data"),b=m===null?void 0:On(m,v);return(y?On(h,v):f[p])?.(b,w,f)}}else l!==null?u=(h,y,v)=>{let w=y[l];return w?.(o,h,y,v)}:(c==="super"?r.renderers.super=(h,y,v)=>{let w=v.super,f=Ci(o);return v={...v,...f.renderers},w(h,y,v)}:r.renderers[c]=(h,y,v)=>Hn(o,h,y,v),u=(h,y,v)=>{let w=v[c];return w?.(h,y,v)});r.parts.push({type:2,index:i,update:u});continue}}let a=o.getAttributeNames();for(let l of a){let c=o.getAttribute(l),p=c.split(ic);if(p.length===1){nc(c)&&o.setAttribute(l,wi(c));continue}o.removeAttribute(l);let u=l,h=pp,y=l[0];y==="."?(u=rc(l.substring(1)),h=up):y==="?"?(u=l.substring(1),h=mp):y==="@"&&(u=rc(l.substring(1)),h=hp);let v=[wi(p[0])],w=[];for(let f=1;f<p.length;f+=2){let m=p[f];w.push(hs(m,bs)),v.push(wi(p[f+1]))}r.parts.push({type:1,index:i,name:u,strings:v,ctor:h,update:(f,m,b)=>w.map(q=>q.evaluate(f))})}}else if(t.nodeType===Node.TEXT_NODE){let o=t,a=o.textContent,l=a.split(ic);l.length>1?o.textContent=wi(l[0]):nc(a)&&(o.textContent=wi(a));for(let c=1;c<l.length;c+=2){let p=l[c],u=hs(p,bs);r.parts.push({type:2,index:++i,update:(y,v)=>u.evaluate(y)});let h=new Text(l[c+1].replace("\\{{","{{"));o.parentNode.insertBefore(h,o.nextSibling),o.parentNode.insertBefore(document.createComment(""),o.nextSibling),o=h,e.currentNode=h}}for(let o of n)o.remove();return r};var Si,Ei=class extends C{constructor(){super();L(this,Si);U(this,Si,this.attachInternals()),I(this,Si).ariaLabel="pagination"}createRenderRoot(){return this}connectedCallback(){super.connectedCallback();let e=this.querySelector("template");this.myTemplate=Oe(e)}render(){if(!this.computedContext)return x``;let e=this.computedContext.testParts.flatMap(t=>t.sections.flatMap(i=>i.items));return x` ${e.map(t=>this.myTemplate({item:t,view:this.computedContext.view}))} `}};Si=new WeakMap,d([$({context:G,subscribe:!0})],Ei.prototype,"computedContext",2),Ei=d([k("test-paging-buttons-stamp")],Ei);var Fn=class{constructor(r){this.G=r}disconnect(){this.G=void 0}reconnect(r){this.G=r}deref(){return this.G}},Un=class{constructor(){this.Y=void 0,this.Z=void 0}get(){return this.Y}pause(){this.Y??=new Promise(r=>this.Z=r)}resume(){this.Z?.(),this.Y=this.Z=void 0}};var ac=s=>!ol(s)&&typeof s.then=="function",lc=1073741823,vs=class extends at{constructor(){super(...arguments),this._$Cwt=lc,this._$Cbt=[],this._$CK=new Fn(this),this._$CX=new Un}render(...r){return r.find(e=>!ac(e))??Z}update(r,e){let t=this._$Cbt,i=t.length;this._$Cbt=e;let n=this._$CK,o=this._$CX;this.isConnected||this.disconnected();for(let a=0;a<e.length&&!(a>this._$Cwt);a++){let l=e[a];if(!ac(l))return this._$Cwt=a,l;a<i&&l===t[a]||(this._$Cwt=lc,i=0,Promise.resolve(l).then(async c=>{for(;o.get();)await o.get();let p=n.deref();if(p!==void 0){let u=p._$Cbt.indexOf(l);u>-1&&u<p._$Cwt&&(p._$Cwt=u,p.setValue(c))}}))}return Z}disconnected(){this._$CK.disconnect(),this._$CX.pause()}reconnected(){this._$CK.reconnect(this),this._$CX.resume()}},Bn=de(vs);var zn=`@layer qti-base, qti-components, qti-utilities, qti-variants, qti-extended;
|
|
215
221
|
|
|
216
222
|
/* https://www.imsglobal.org/sites/default/files/spec/qti/v3/guide/img/qti3p0.css */
|
|
217
223
|
|
|
@@ -3784,12 +3790,12 @@ div.full-correct-response-inline {
|
|
|
3784
3790
|
margin-right: var(--qti-padding-horizontal);
|
|
3785
3791
|
padding: 0.2rem;
|
|
3786
3792
|
}
|
|
3787
|
-
`;var
|
|
3788
|
-
${I(this,
|
|
3793
|
+
`;var Ai,gr,cc,dc,Qe=class extends C{constructor(){super(...arguments);L(this,gr);this.testURL=null;this.testDoc=null;this.testXML=null;L(this,Ai,null)}async handleTestURLChange(){if(this.testURL)try{let e=await rr().load(this.testURL),t=this.closest("qti-test");if(t?.postLoadTestTransformCallback){let n=e.htmlDoc().querySelector("qti-assessment-test");n&&(e=await t.postLoadTestTransformCallback(e,n))}this.testDoc=e.htmlDoc()}catch(e){console.error("Error loading or parsing XML:",e)}}handleTestXMLChange(){if(this.testXML)try{this.testDoc=rr().parse(this.testXML).htmlDoc()}catch(e){console.error("Error parsing XML:",e)}}async connectedCallback(){super.connectedCallback(),P(this,gr,cc).call(this),P(this,gr,dc).call(this),this.testURL&&this.handleTestURLChange(),this.testXML&&this.handleTestXMLChange()}render(){return x`
|
|
3794
|
+
${I(this,Ai)}
|
|
3789
3795
|
<slot></slot>
|
|
3790
|
-
${
|
|
3791
|
-
`}};
|
|
3792
|
-
<h3>${
|
|
3796
|
+
${Bn(this.testDoc,x`<span>Loading...</span>`)}
|
|
3797
|
+
`}};Ai=new WeakMap,gr=new WeakSet,cc=function(){let e=this.querySelector("template");U(this,Ai,e?e.content:x``)},dc=function(){let e=new CSSStyleSheet;e.replaceSync(zn),this.shadowRoot.adoptedStyleSheets=[e]},d([g({type:String,attribute:"test-url"})],Qe.prototype,"testURL",2),d([M()],Qe.prototype,"testDoc",2),d([M()],Qe.prototype,"testXML",2),d([B("testURL",{waitUntilFirstUpdate:!0})],Qe.prototype,"handleTestURLChange",1),d([B("testXML",{waitUntilFirstUpdate:!0})],Qe.prototype,"handleTestXMLChange",1),Qe=d([k("test-container")],Qe);var br=class extends C{render(){let r=this.computedContext?.testParts.flatMap(n=>n.sections.flatMap(o=>o.items)).find(n=>n.active);if(!r||!r.variables)return x``;let e=r.variables.filter(n=>n.type==="response"),t=r.variables.filter(n=>n.type==="outcome"),i=(n,o)=>x`
|
|
3798
|
+
<h3>${o}</h3>
|
|
3793
3799
|
<table>
|
|
3794
3800
|
<thead>
|
|
3795
3801
|
<tr>
|
|
@@ -3801,7 +3807,7 @@ div.full-correct-response-inline {
|
|
|
3801
3807
|
</tr>
|
|
3802
3808
|
</thead>
|
|
3803
3809
|
<tbody>
|
|
3804
|
-
${
|
|
3810
|
+
${n.map(a=>{let l=a.correctResponse?Array.isArray(a.correctResponse)?a.correctResponse.join(", "):a.correctResponse:"",c=a.mapping?.mapEntries?.map(u=>`${u.mapKey}=${u.mappedValue}pt`).join(", ")||"",p=a.areaMapping?.areaMapEntries?.map(u=>`${u.shape}(${u.coords})=${u.mappedValue}pt`).join(", ")||"";return x`
|
|
3805
3811
|
<tr>
|
|
3806
3812
|
<td>${a.identifier}</td>
|
|
3807
3813
|
<td>${Array.isArray(a.value)?a.value.join(", "):a.value}</td>
|
|
@@ -3813,8 +3819,8 @@ div.full-correct-response-inline {
|
|
|
3813
3819
|
</tbody>
|
|
3814
3820
|
</table>
|
|
3815
3821
|
`;return x`
|
|
3816
|
-
${
|
|
3817
|
-
`}};
|
|
3822
|
+
${i(e,"Response Variables")} ${i(t,"Outcome Variables")}
|
|
3823
|
+
`}};br.styles=E`
|
|
3818
3824
|
table {
|
|
3819
3825
|
width: 100%;
|
|
3820
3826
|
border-collapse: collapse;
|
|
@@ -3835,68 +3841,68 @@ div.full-correct-response-inline {
|
|
|
3835
3841
|
margin-top: 20px;
|
|
3836
3842
|
font-size: 16px;
|
|
3837
3843
|
}
|
|
3838
|
-
`,d([
|
|
3844
|
+
`,d([$({context:G,subscribe:!0})],br.prototype,"computedContext",2),br=d([k("test-print-item-variables")],br);var Ii,Ti=class extends C{constructor(){super();L(this,Ii);U(this,Ii,this.attachInternals()),I(this,Ii).ariaLabel="pagination"}createRenderRoot(){return this}connectedCallback(){super.connectedCallback();let e=this.querySelector("template");this.myTemplate=Oe(e)}render(){if(!this.computedContext)return x``;let e=this.computedContext.testParts.flatMap(t=>t.sections);return x` ${e.map(t=>this.myTemplate({item:t}))} `}};Ii=new WeakMap,d([$({context:G,subscribe:!0})],Ti.prototype,"computedContext",2),Ti=d([k("test-section-buttons-stamp")],Ti);var jn,pc,vr=class extends C{constructor(){super();L(this,jn);this.sectionId=null;this.addEventListener("click",()=>P(this,jn,pc).call(this,this.sectionId))}render(){return x` <slot></slot> `}};jn=new WeakSet,pc=function(e){this.dispatchEvent(new CustomEvent("qti-request-navigation",{composed:!0,bubbles:!0,detail:{type:"section",id:e}}))},vr.styles=E`
|
|
3839
3845
|
:host {
|
|
3840
|
-
${
|
|
3846
|
+
${ie};
|
|
3841
3847
|
}
|
|
3842
3848
|
:host([disabled]) {
|
|
3843
|
-
${
|
|
3849
|
+
${ne};
|
|
3844
3850
|
}
|
|
3845
|
-
`,d([
|
|
3846
|
-
${this.myTemplate?this.myTemplate(this.stampContext):
|
|
3851
|
+
`,d([g({type:String,attribute:"section-id"})],vr.prototype,"sectionId",2),vr=d([k("test-section-link")],vr);var Ri=class extends C{render(){return x` <small><pre>${JSON.stringify(this.computedContext,null,2)}</pre></small> `}};d([M(),$({context:G,subscribe:!0})],Ri.prototype,"computedContext",2),Ri=d([k("test-print-context")],Ri);var Bt=class extends C{constructor(){super(...arguments);this.debug=!1;this.stampContext={view:"candidate",activeItem:{},activeSection:{items:[]},activeTestpart:{items:[],sections:[]},test:{}}}createRenderRoot(){return this}connectedCallback(){super.connectedCallback();let e=this.querySelector("template");if(!e){this.myTemplate=null;return}this.myTemplate=Oe(e)}willUpdate(e){if(!this.computedContext)return;let t=this.computedContext.testParts.find(h=>h.active),i=t?.sections.find(h=>h.active),n=i?.items.find(h=>h.active),{variables:o,...a}=n||{};if(!t||!i||!n)return;let l={...t,items:t.sections.flatMap(h=>h.items.map(({variables:y,...v})=>v)),sections:t.sections.map(h=>({...h,items:h.items.map(({variables:y,...v})=>v)}))},c={...i,items:i.items.map(({variables:h,...y})=>y)},{testParts:p,...u}=this.computedContext;this.stampContext={view:this.computedContext.view,activeItem:a,activeSection:c,activeTestpart:l,test:u},this.dispatchEvent(new CustomEvent("qti-stamp-context-updated",{detail:this.stampContext,bubbles:!0}))}render(){return x` ${this.debug?x`<small><pre>${JSON.stringify(this.stampContext,null,2)}</pre></small>`:O}
|
|
3852
|
+
${this.myTemplate?this.myTemplate(this.stampContext):O}`}};d([g({type:Boolean,reflect:!0})],Bt.prototype,"debug",2),d([M(),$({context:G,subscribe:!0})],Bt.prototype,"computedContext",2),d([M()],Bt.prototype,"stampContext",2),Bt=d([k("test-stamp")],Bt);var Wn,uc,zt=class extends C{constructor(){super();L(this,Wn);this.view="";this.disabled=!1;this.myTemplate=null;this.addEventListener("click",e=>{let t=e.target,i=parseFloat(t.value);t.tagName==="INPUT"&&P(this,Wn,uc).call(this,i)})}createRenderRoot(){return this}connectedCallback(){super.connectedCallback();let e=this.querySelector("template");if(!e){this.myTemplate=null;return}this.myTemplate=Oe(e)}render(){let e=this.computedContext?.testParts.flatMap(l=>l.sections.flatMap(c=>c.items)).find(l=>l.active);if(!e||!e.variables)return x``;let t=e.variables.find(l=>l.identifier=="MAXSCORE")?.value,i=e.variables.find(l=>l.identifier=="SCORE"),n=i?.value,o=i?.externalScored!=="human";if(!t||!i)return O;let a=[...Array(Number(t)+1).keys()];return x`${this.myTemplate?this.myTemplate({scores:a,score:n,disabled:o}):O}`}};Wn=new WeakSet,uc=function(e){let n=(this.computedContext?.testParts.find(o=>o.active)).sections.flatMap(o=>o.items).find(o=>o.active)?.identifier;this.dispatchEvent(new CustomEvent("test-update-outcome-variable",{detail:{assessmentItemRefId:n,outcomeVariableId:"SCORE",value:e},bubbles:!0}))},d([g({type:String,attribute:"view"})],zt.prototype,"view",2),d([g({type:Boolean})],zt.prototype,"disabled",2),d([$({context:G,subscribe:!0})],zt.prototype,"computedContext",2),zt=d([k("test-scoring-buttons")],zt);var ki=class extends C{createRenderRoot(){return this}connectedCallback(){super.connectedCallback();let r=this.querySelector("template");if(!r){this.myTemplate=null;return}this.myTemplate=Oe(r)}_switchView(r){this.dispatchEvent(new CustomEvent("on-test-switch-view",{composed:!0,bubbles:!0,detail:r}))}firstUpdated(r){this.addEventListener("click",()=>{this.sessionContext?.view==="scorer"?this._switchView("candidate"):this._switchView("scorer")})}render(){return x`${this.myTemplate?this.myTemplate({view:this.sessionContext?.view}):O}`}};d([$({context:nt,subscribe:!0})],ki.prototype,"sessionContext",2),ki=d([k("test-view-toggle")],ki);var yr=class extends C{constructor(){super(...arguments);this.view=null}render(){let e=this.computedContext?.testParts.flatMap(l=>l.sections.flatMap(c=>c.items)).find(l=>l.active);if(!e||!e.variables)return x``;if(e.category==="dep-informational")return x`<div>${this.dataset.informational}</div>`;let t=e?.variables.find(l=>l.identifier==="completionStatus")?.value,i=e?.variables.find(l=>l.identifier=="SCORE"),n=parseFloat(i?.value),o=e.externalScored;return x`<div>${t!=="completed"?this.dataset.textNoResponse:!o&&n!==void 0&&!Number.isNaN(n)?n>0?this.dataset.textCorrect:this.dataset.textIncorrect:o==="externalMachine"?Number.isNaN(n)||n===void 0?this.dataset.scoreUnknown:`We hebben je antwoord ${n===0?"geen punten":n==1?"\xE9\xE9n punt":`${n} punten`} gegeven. Je kunt je score zelf aanpassen als je denkt dat dat niet klopt.`:o==="human"?Number.isNaN(n)?"":"Deze score heb je zelf toegekend.":this.dataset.inProgress}</div>`}};d([$({context:G,subscribe:!0})],yr.prototype,"computedContext",2),d([g({type:String,attribute:"view"})],yr.prototype,"view",2),yr=d([k("test-scoring-feedback")],yr);var Mi=class extends C{constructor(){super(),this.addEventListener("click",()=>{this.dispatchEvent(new CustomEvent("test-end-attempt",{bubbles:!0})),this.dispatchEvent(new CustomEvent("test-show-correct-response",{detail:!0,bubbles:!0}));let e=this.closest("qti-test").querySelector("test-container");Array.from(e.shadowRoot.querySelectorAll("[view]")).forEach(i=>{i.classList.toggle("show",!0)})})}render(){return x` <slot></slot> `}};Mi.styles=E`
|
|
3847
3853
|
:host {
|
|
3848
|
-
${
|
|
3854
|
+
${ie};
|
|
3849
3855
|
}
|
|
3850
3856
|
:host([disabled]) {
|
|
3851
|
-
${
|
|
3857
|
+
${ne};
|
|
3852
3858
|
}
|
|
3853
|
-
`,
|
|
3854
|
-
${I(this,
|
|
3859
|
+
`,Mi=d([k("test-check-item")],Mi);var _i,xr,mc,hc,Ye=class extends C{constructor(){super(...arguments);L(this,xr);this.itemURL=null;this.itemDoc=null;this.itemXML=null;L(this,_i,null)}async handleItemURLChange(){if(this.itemURL)try{let e=await Me().load(this.itemURL);this.itemDoc=e.htmlDoc()}catch(e){console.error("Error loading or parsing XML:",e)}}handleItemXMLChange(){if(this.itemXML)try{this.itemDoc=Me().parse(this.itemXML).htmlDoc()}catch(e){console.error("Error parsing XML:",e)}}async connectedCallback(){super.connectedCallback(),P(this,xr,mc).call(this),P(this,xr,hc).call(this),this.itemURL&&this.handleItemURLChange(),this.itemXML&&this.handleItemXMLChange()}render(){return x`
|
|
3860
|
+
${I(this,_i)}
|
|
3855
3861
|
<slot></slot>
|
|
3856
|
-
${
|
|
3857
|
-
`}};
|
|
3862
|
+
${Bn(this.itemDoc,x`<span>Loading...</span>`)}
|
|
3863
|
+
`}};_i=new WeakMap,xr=new WeakSet,mc=function(){let e=this.querySelector("template");U(this,_i,e?e.content:x``)},hc=function(){let e=new CSSStyleSheet;e.replaceSync(zn),this.shadowRoot.adoptedStyleSheets=[e]},d([g({type:String,attribute:"item-url"})],Ye.prototype,"itemURL",2),d([M()],Ye.prototype,"itemDoc",2),d([M()],Ye.prototype,"itemXML",2),d([B("itemURL",{waitUntilFirstUpdate:!0})],Ye.prototype,"handleItemURLChange",1),d([B("itemXML",{waitUntilFirstUpdate:!0})],Ye.prototype,"handleItemXMLChange",1),Ye=d([k("item-container")],Ye);var Gn,fc,jt=class extends C{constructor(){super(...arguments);L(this,Gn);this.label="Correct response mode";this._options={internal:"Internal",full:"Full (copy)"}}render(){return x`
|
|
3858
3864
|
<label part="label" for="modeSelect">${this.label}</label>
|
|
3859
3865
|
<select
|
|
3860
3866
|
part="select"
|
|
3861
3867
|
id="modeSelect"
|
|
3862
|
-
@change=${e=>{let t=e.target;
|
|
3868
|
+
@change=${e=>{let t=e.target;P(this,Gn,fc).call(this,t.value)}}
|
|
3863
3869
|
>
|
|
3864
3870
|
${Object.keys(this._options).map(e=>x`<option value="${e}" ?selected=${e===this.itemContext?.correctResponseMode}>
|
|
3865
3871
|
${this._options[e]}
|
|
3866
3872
|
</option>`)}
|
|
3867
3873
|
</select>
|
|
3868
|
-
`}};
|
|
3874
|
+
`}};Gn=new WeakSet,fc=function(e){this.dispatchEvent(new CustomEvent("item-switch-correct-response-mode",{detail:e,bubbles:!0}))},d([$({context:be,subscribe:!0})],jt.prototype,"itemContext",2),d([g({type:String})],jt.prototype,"label",2),d([M()],jt.prototype,"_options",2),jt=d([k("item-correct-response-mode")],jt);var gc=E`
|
|
3869
3875
|
display: inline-flex;
|
|
3870
3876
|
align-items: center;
|
|
3871
3877
|
cursor: pointer;
|
|
3872
3878
|
padding: 0.5rem 1rem;
|
|
3873
3879
|
border-radius: 0.25rem;
|
|
3874
3880
|
user-select: none;
|
|
3875
|
-
`,
|
|
3881
|
+
`,Xn=E`
|
|
3876
3882
|
background-color: lightgray;
|
|
3877
|
-
${
|
|
3878
|
-
`,
|
|
3883
|
+
${gc};
|
|
3884
|
+
`,Qn=E`
|
|
3879
3885
|
cursor: not-allowed;
|
|
3880
3886
|
opacity: 0.8;
|
|
3881
|
-
`,
|
|
3882
|
-
${
|
|
3887
|
+
`,dw=E`
|
|
3888
|
+
${gc};
|
|
3883
3889
|
border: 1px solid gray;
|
|
3884
|
-
`;var
|
|
3890
|
+
`;var qr,Li,wr,vc,yc,Ee=class extends C{constructor(){super();L(this,wr);this.shown=!1;this.disabled=!1;this.showCandidateCorrectionText="Show candidate correction";this.hideCandidateCorrectionText="Hide candidate correction";this.noCorrectResponseText="No correct response specified";L(this,qr,!1);L(this,Li,"")}updated(){if(!I(this,qr)||I(this,Li)!==this.computedContext?.identifier){U(this,Li,this.computedContext?.identifier);let e=!!this.computedContext?.variables.some(i=>i.correctResponse),t=!!this.computedContext?.variables.some(i=>i.mapping?.mapEntries?.length>0||i.areaMapping?.areaMapEntries?.length>0);U(this,qr,e||t)}this.disabled=!I(this,qr)}render(){return x` <div @click="${P(this,wr,vc)}">${P(this,wr,yc).call(this)}</div> `}};qr=new WeakMap,Li=new WeakMap,wr=new WeakSet,vc=function(){this.disabled||this.dispatchEvent(new CustomEvent("item-show-candidate-correction",{detail:!this.shown,bubbles:!0}))},yc=function(){return this.disabled?this.noCorrectResponseText:this.shown?this.hideCandidateCorrectionText:this.showCandidateCorrectionText},Ee.styles=E`
|
|
3885
3891
|
:host {
|
|
3886
|
-
${
|
|
3892
|
+
${Xn};
|
|
3887
3893
|
}
|
|
3888
3894
|
:host([disabled]) {
|
|
3889
|
-
${
|
|
3895
|
+
${Qn};
|
|
3890
3896
|
}
|
|
3891
|
-
`,d([
|
|
3897
|
+
`,d([$({context:it,subscribe:!0})],Ee.prototype,"computedContext",2),d([g({type:Boolean,reflect:!0})],Ee.prototype,"shown",2),d([g({type:Boolean,reflect:!0})],Ee.prototype,"disabled",2),d([g({type:String})],Ee.prototype,"showCandidateCorrectionText",2),d([g({type:String})],Ee.prototype,"hideCandidateCorrectionText",2),d([g({type:String})],Ee.prototype,"noCorrectResponseText",2),Ee=d([k("item-show-candidate-correction")],Ee);var Cr,$i,Er,xc,qc,Se=class extends C{constructor(){super(...arguments);L(this,Er);this.shown=!1;this.disabled=!1;this.showCorrectText="Show correct response";this.hideCorrectText="Hide correct response";this.noCorrectResponseText="No correct response specified";L(this,Cr,!1);L(this,$i,"")}updated(){if(!I(this,Cr)||I(this,$i)!==this.computedContext?.identifier){U(this,$i,this.computedContext?.identifier);let e=!!this.computedContext?.variables.some(i=>i.correctResponse),t=!!this.computedContext?.variables.some(i=>i.mapping?.mapEntries?.length>0||i.areaMapping?.areaMapEntries?.length>0);U(this,Cr,e||t)}this.disabled=!I(this,Cr)}render(){return x` <div @click="${P(this,Er,xc)}">${P(this,Er,qc).call(this)}</div> `}};Cr=new WeakMap,$i=new WeakMap,Er=new WeakSet,xc=function(){this.disabled||this.dispatchEvent(new CustomEvent("item-show-correct-response",{detail:!this.shown,bubbles:!0}))},qc=function(){return this.disabled?this.noCorrectResponseText:this.shown?this.hideCorrectText:this.showCorrectText},Se.styles=E`
|
|
3892
3898
|
:host {
|
|
3893
|
-
${
|
|
3899
|
+
${Xn};
|
|
3894
3900
|
}
|
|
3895
3901
|
:host([disabled]) {
|
|
3896
|
-
${
|
|
3902
|
+
${Qn};
|
|
3897
3903
|
}
|
|
3898
|
-
`,d([
|
|
3899
|
-
<h3>${
|
|
3904
|
+
`,d([$({context:it,subscribe:!0})],Se.prototype,"computedContext",2),d([g({type:Boolean,reflect:!0})],Se.prototype,"shown",2),d([g({type:Boolean,reflect:!0})],Se.prototype,"disabled",2),d([g({type:String})],Se.prototype,"showCorrectText",2),d([g({type:String})],Se.prototype,"hideCorrectText",2),d([g({type:String})],Se.prototype,"noCorrectResponseText",2),Se=d([k("item-show-correct-response")],Se);var Sr=class extends C{render(){let r=this.computedContext;if(!r||!r.variables)return x``;let e=r.variables.filter(n=>n.type==="response"),t=r.variables.filter(n=>n.type==="outcome"),i=(n,o)=>x`
|
|
3905
|
+
<h3>${o}</h3>
|
|
3900
3906
|
<table>
|
|
3901
3907
|
<thead>
|
|
3902
3908
|
<tr>
|
|
@@ -3908,7 +3914,7 @@ div.full-correct-response-inline {
|
|
|
3908
3914
|
</tr>
|
|
3909
3915
|
</thead>
|
|
3910
3916
|
<tbody>
|
|
3911
|
-
${
|
|
3917
|
+
${n.map(a=>{let l=a.correctResponse?Array.isArray(a.correctResponse)?a.correctResponse.join(", "):a.correctResponse:"",c=a.mapping?.mapEntries?.map(u=>`${u.mapKey}=${u.mappedValue}pt`).join(", ")||"",p=a.areaMapping?.areaMapEntries?.map(u=>`${u.shape}(${u.coords})=${u.mappedValue}pt`).join(", ")||"";return x`
|
|
3912
3918
|
<tr>
|
|
3913
3919
|
<td>${a.identifier}</td>
|
|
3914
3920
|
<td>${Array.isArray(a.value)?a.value.join(", "):a.value}</td>
|
|
@@ -3920,8 +3926,8 @@ div.full-correct-response-inline {
|
|
|
3920
3926
|
</tbody>
|
|
3921
3927
|
</table>
|
|
3922
3928
|
`;return x`
|
|
3923
|
-
${
|
|
3924
|
-
`}};
|
|
3929
|
+
${i(e,"Response Variables")} ${i(t,"Outcome Variables")}
|
|
3930
|
+
`}};Sr.styles=E`
|
|
3925
3931
|
table {
|
|
3926
3932
|
width: 100%;
|
|
3927
3933
|
border-collapse: collapse;
|
|
@@ -3942,40 +3948,40 @@ div.full-correct-response-inline {
|
|
|
3942
3948
|
margin-top: 20px;
|
|
3943
3949
|
font-size: 16px;
|
|
3944
3950
|
}
|
|
3945
|
-
`,d([
|
|
3946
|
-
|
|
3947
|
-
|
|
3948
|
-
|
|
3949
|
-
|
|
3950
|
-
|
|
3951
|
-
|
|
3952
|
-
|
|
3953
|
-
|
|
3954
|
-
|
|
3955
|
-
|
|
3956
|
-
|
|
3957
|
-
|
|
3958
|
-
|
|
3959
|
-
|
|
3960
|
-
|
|
3961
|
-
|
|
3962
|
-
|
|
3963
|
-
|
|
3964
|
-
|
|
3965
|
-
|
|
3966
|
-
|
|
3967
|
-
|
|
3968
|
-
|
|
3969
|
-
|
|
3970
|
-
|
|
3971
|
-
|
|
3972
|
-
|
|
3973
|
-
|
|
3974
|
-
|
|
3975
|
-
|
|
3976
|
-
|
|
3977
|
-
|
|
3978
|
-
<slot></slot> `}};customElements.define("qti-hottext",
|
|
3951
|
+
`,d([$({context:it,subscribe:!0})],Sr.prototype,"computedContext",2),Sr=d([k("item-print-variables")],Sr);var se,Pi,Vi,Yn,Jn,Kn,ee,wc,Cc,ys,Ec,Sc,xs,Ar=class extends C{constructor(){super();L(this,ee);L(this,se);this.configContext={};L(this,Pi,P(this,ee,wc).bind(this));L(this,Vi,P(this,ee,Cc).bind(this));L(this,Yn,P(this,ee,ys).bind(this));L(this,Jn,P(this,ee,Ec).bind(this));L(this,Kn,P(this,ee,Sc).bind(this));this.addEventListener("qti-item-context-updated",I(this,Pi)),this.addEventListener("qti-assessment-item-connected",I(this,Vi)),this.addEventListener("item-show-correct-response",I(this,Yn)),this.addEventListener("item-show-candidate-correction",I(this,Jn)),this.addEventListener("item-switch-correct-response-mode",I(this,Kn))}render(){return x`<slot></slot>`}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("qti-item-context-changed",I(this,Pi)),this.removeEventListener("qti-assessment-item-connected",I(this,Vi))}};se=new WeakMap,Pi=new WeakMap,Vi=new WeakMap,Yn=new WeakMap,Jn=new WeakMap,Kn=new WeakMap,ee=new WeakSet,wc=function(e){P(this,ee,xs).call(this,e.detail.itemContext.identifier,e.detail?.itemContext?.variables||[])},Cc=function(e){let t=e.detail._context.variables;U(this,se,e.detail),this.computedContext=this.computedContext?.identifier===I(this,se).identifier?{...this.computedContext,title:I(this,se).title}:{identifier:I(this,se).identifier,title:I(this,se).title,adaptive:I(this,se).getAttribute("adaptive")?.toLowerCase()==="true"||!1,variables:t,correctResponseMode:"internal"},P(this,ee,xs).call(this,I(this,se).identifier,t||[])},ys=function(e){I(this,se)&&I(this,se).showCorrectResponse(e.detail)},Ec=function(e){I(this,se)&&I(this,se).showCandidateCorrection(e.detail)},Sc=function(e){P(this,ee,ys).call(this,new CustomEvent("item-show-correct-response",{detail:!1,bubbles:!0})),this.configContext={...this.configContext,correctResponseMode:e.detail}},xs=function(e,t){let i=t?.find(p=>p.identifier=="SCORE")?.value,n=parseFloat(i?.toString()),o=t?.find(p=>p.identifier==="completionStatus")?.value,a=n!==void 0&&!isNaN(n)&&n>0,l=n!==void 0&&!isNaN(n)&&n<=0,c=o==="completed";this.computedContext={...this.computedContext,identifier:e,correct:a,incorrect:l,completed:c,variables:t}},d([M(),ce({context:it})],Ar.prototype,"computedContext",2),d([M(),ce({context:be})],Ar.prototype,"configContext",2),Ar=d([k("qti-item")],Ar);var Ac=E`
|
|
3952
|
+
:host {
|
|
3953
|
+
display: flex;
|
|
3954
|
+
user-select: none;
|
|
3955
|
+
position: absolute;
|
|
3956
|
+
}
|
|
3957
|
+
`;var Zn=class extends C{static{this.styles=Ac}connectedCallback(){super.connectedCallback(),this.dispatchEvent(new CustomEvent("qti-register-hotspot",{bubbles:!0,composed:!0,cancelable:!1}))}render(){return x` <slot name="drags"></slot> `}};customElements.define("qti-associable-hotspot",Zn);var Tc=E`
|
|
3958
|
+
:host {
|
|
3959
|
+
display: flex;
|
|
3960
|
+
user-select: none;
|
|
3961
|
+
}
|
|
3962
|
+
`;var Di=class extends C{constructor(){super(...arguments);this.tabindex=0}static{this.styles=Tc}render(){return x` <slot name="drags"></slot>`}};d([g({type:Number,reflect:!0})],Di.prototype,"tabindex",2);customElements.define("qti-gap",Di);var Ic=E`
|
|
3963
|
+
:host {
|
|
3964
|
+
display: flex;
|
|
3965
|
+
user-select: none;
|
|
3966
|
+
}
|
|
3967
|
+
`;var Ni=class extends C{constructor(){super(...arguments);this.tabindex=0}static{this.styles=Ic}connectedCallback(){this.setAttribute("slot","drags")}};d([g({type:Number,reflect:!0})],Ni.prototype,"tabindex",2);customElements.define("qti-gap-img",Ni);var Rc={toAttribute:s=>s?"true":"false",fromAttribute:s=>s==="true"};function qe(s,r){class e extends s{constructor(...n){super(...n);this.identifier="";this.tabIndex=0;this.disabled=!1;this.readonly=!1;this.internals=this.attachInternals()}handleDisabledChange(n,o){this.tabIndex=o?-1:0,o&&this.blur()}connectedCallback(){super.connectedCallback(),this.internals.ariaChecked="false",this.disabled&&(this.tabIndex=-1),this.addEventListener("keyup",this._onKeyUp),this.addEventListener("click",this._onClick),this.dispatchEvent(new CustomEvent(`register-${r}`,{bubbles:!0,composed:!0}))}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("keyup",this._onKeyUp),this.removeEventListener("click",this._onClick),this.dispatchEvent(new CustomEvent(`unregister-${r}`,{bubbles:!0,composed:!0}))}_onKeyUp(n){n.altKey||(n.code==="Space"||n.code==="Enter")&&(n.preventDefault(),this._activate())}_onClick(){this.disabled||this.readonly||(this.focus(),this._activate())}_activate(){this.disabled||this.readonly||this.dispatchEvent(new CustomEvent(`activate-${r}`,{bubbles:!0,composed:!0,detail:{identifier:this.identifier}}))}render(){return x`<slot></slot>`}}return d([g({type:String})],e.prototype,"identifier",2),d([g({type:Number,reflect:!0,attribute:"tabindex"})],e.prototype,"tabIndex",2),d([g({type:Boolean,reflect:!0,attribute:"aria-disabled",converter:Rc})],e.prototype,"disabled",2),d([g({type:Boolean,reflect:!0,attribute:"aria-readonly",converter:Rc})],e.prototype,"readonly",2),d([B("disabled",{waitUntilFirstUpdate:!0})],e.prototype,"handleDisabledChange",1),e}var kc=E`
|
|
3968
|
+
:host {
|
|
3969
|
+
display: inline-flex;
|
|
3970
|
+
user-select: none;
|
|
3971
|
+
}
|
|
3972
|
+
`;var Oi=class extends qe(C,"qti-gap-text"){constructor(){super(...arguments);this.tabindex=0}static{this.styles=kc}connectedCallback(){super.connectedCallback(),this.setAttribute("slot","drags")}render(){return x`<slot></slot>`}};d([g({type:Number,reflect:!0})],Oi.prototype,"tabindex",2);customElements.define("qti-gap-text",Oi);var Mc=E`
|
|
3973
|
+
:host {
|
|
3974
|
+
display: flex;
|
|
3975
|
+
user-select: none;
|
|
3976
|
+
position: absolute;
|
|
3977
|
+
}
|
|
3978
|
+
`;var Tr=class extends qe(C,"qti-hotspot-choice"){static{this.styles=Mc}};d([g({attribute:"aria-ordervalue",type:Number,reflect:!0})],Tr.prototype,"order",2),d([g({attribute:"aria-ordercorrectvalue",type:Number,reflect:!0})],Tr.prototype,"orderCorrect",2);customElements.define("qti-hotspot-choice",Tr);var _c=E`
|
|
3979
|
+
:host {
|
|
3980
|
+
display: flex;
|
|
3981
|
+
user-select: none;
|
|
3982
|
+
}
|
|
3983
|
+
`;var eo=class extends qe(C,"qti-hottext"){static{this.styles=_c}render(){return x`<div part="ch"><div part="cha"></div></div>
|
|
3984
|
+
<slot></slot> `}};customElements.define("qti-hottext",eo);var yp=E`
|
|
3979
3985
|
:host {
|
|
3980
3986
|
display: block;
|
|
3981
3987
|
box-sizing: border-box;
|
|
@@ -3984,22 +3990,26 @@ div.full-correct-response-inline {
|
|
|
3984
3990
|
slot {
|
|
3985
3991
|
display: inline;
|
|
3986
3992
|
}
|
|
3987
|
-
`,
|
|
3988
|
-
|
|
3989
|
-
|
|
3990
|
-
|
|
3991
|
-
|
|
3992
|
-
|
|
3993
|
-
|
|
3994
|
-
|
|
3995
|
-
|
|
3996
|
-
|
|
3997
|
-
|
|
3998
|
-
|
|
3999
|
-
|
|
3993
|
+
`,Lc=yp;var Hi=class extends qe(C,"qti-inline-choice"){static{this.styles=Lc}connectedCallback(){super.connectedCallback(),this.addEventListener("click",this.#e),this.dispatchEvent(new CustomEvent("qti-inline-choice-register",{bubbles:!0,composed:!0,cancelable:!1}))}disconnectedCallback(){this.removeEventListener("click",this.#e)}render(){return x` <slot></slot> `}#e(){this.dispatchEvent(new CustomEvent("qti-inline-choice-select",{bubbles:!0,cancelable:!1,composed:!0,detail:{identifier:this.identifier}}))}};d([g({type:String})],Hi.prototype,"identifier",2);customElements.define("qti-inline-choice",Hi);var $c=E`
|
|
3994
|
+
:host {
|
|
3995
|
+
display: block;
|
|
3996
|
+
}
|
|
3997
|
+
`;var to=class extends C{static{this.styles=$c}render(){return x`<slot></slot>`}connectedCallback(){this.parentElement.tagName.endsWith("INTERACTION")&&this.setAttribute("slot","prompt")}};customElements.define("qti-prompt",to);var Pc=E`
|
|
3998
|
+
:host {
|
|
3999
|
+
display: flex;
|
|
4000
|
+
user-select: none;
|
|
4001
|
+
}
|
|
4002
|
+
slot {
|
|
4003
|
+
width: 100%;
|
|
4004
|
+
display: block;
|
|
4005
|
+
}
|
|
4006
|
+
slot[name='qti-simple-associable-choice'] {
|
|
4007
|
+
width: auto;
|
|
4008
|
+
}
|
|
4009
|
+
`;var Wt=class extends qe(C,"qti-simple-associable-choice"){constructor(){super(...arguments);this.matchMin=0;this.matchMax=1;this.fixed=!1}static{this.styles=Pc}connectedCallback(){super.connectedCallback(),this.setAttribute("slot","qti-simple-associable-choice"),this.setAttribute("part","qti-simple-associable-choice")}render(){return x`
|
|
4000
4010
|
<slot part="slot"></slot>
|
|
4001
4011
|
<slot part="dropslot" name="qti-simple-associable-choice"></slot>
|
|
4002
|
-
`}};d([
|
|
4012
|
+
`}};d([g({type:Number,attribute:"match-min"})],Wt.prototype,"matchMin",2),d([g({type:Number,attribute:"match-max"})],Wt.prototype,"matchMax",2),d([g({type:String,attribute:"fixed",converter:{fromAttribute:e=>e==="true",toAttribute:e=>String(e)}})],Wt.prototype,"fixed",2);customElements.define("qti-simple-associable-choice",Wt);var Vc=E`
|
|
4003
4013
|
:host {
|
|
4004
4014
|
display: flex;
|
|
4005
4015
|
align-items: center;
|
|
@@ -4016,11 +4026,11 @@ div.full-correct-response-inline {
|
|
|
4016
4026
|
align-items: center;
|
|
4017
4027
|
justify-content: center;
|
|
4018
4028
|
}
|
|
4019
|
-
`;var
|
|
4029
|
+
`;var ht=class extends qe(C,"qti-simple-choice"){constructor(){super(...arguments);this.templateIdentifier=null;this.showHide="show";this.fixed=!1}static{this.styles=Vc}get checked(){return this.internals.states.has("--checked")}render(){return x`<div part="ch">
|
|
4020
4030
|
<div part="cha"></div>
|
|
4021
4031
|
</div>
|
|
4022
|
-
${this.marker?x`<div id="label">${this.marker}</div>`:
|
|
4023
|
-
<slot part="slot"></slot>`}};d([b({type:String,attribute:"template-identifier"})],ct.prototype,"templateIdentifier",2),d([b({type:String,attribute:"show-hide"})],ct.prototype,"showHide",2),d([b({type:Boolean,converter:{fromAttribute:e=>e==="true",toAttribute:e=>String(e)}})],ct.prototype,"fixed",2),d([b({type:String,attribute:!1})],ct.prototype,"marker",2);customElements.define("qti-simple-choice",ct);var{AbortController:$e,AbortSignal:$s,WeakMap:Yc,WeakRef:Kc,Window:gl,reportError:To=console.log}=globalThis,dt=n=>n&&n.defaultView!==null&&n.defaultView.document===n&&(n.defaultView.top===n.defaultView||dt(n.defaultView.parent.document)),$t=()=>!!gl&&globalThis instanceof gl,Os=Symbol("unset"),[bl,Zc]=(()=>{function n(w,f,u=!0){Object.defineProperty(w,f,{...Object.getOwnPropertyDescriptor(w,f),enumerable:u})}let i="try"in Promise?Promise.try.bind(Promise):(w,...f)=>new Promise(u=>u(w(...f))),e="withResolvers"in Promise?Promise.withResolvers.bind(Promise):()=>{let w,f;return{promise:new Promise((g,q)=>(w=g,f=q)),resolve:w,reject:f}};function t(w,f){let u=f.call(w);if(u===null||typeof u!="object")throw new TypeError("Iterator is not an object");return u}let r=new Yc,o={next(...w){let f=this,u=r.get(f);if(!u?.syncIteratorRecord)throw new TypeError("AsyncFromSyncIteratorPrototype.next called on invalid object");let{syncIteratorRecord:g}=u;return i(()=>g.next(...w))},return(...w){let f=this,u=r.get(f);if(!u?.syncIteratorRecord)throw new TypeError("AsyncFromSyncIteratorPrototype.return called on invalid object");let{syncIteratorRecord:g}=u;return i(()=>g.return?g.return(...w):{value:void 0,done:!0})},throw(...w){let f=this,u=r.get(f);if(!u?.syncIteratorRecord)throw new TypeError("AsyncFromSyncIteratorPrototype.throw called on invalid object");let{syncIteratorRecord:g}=u;return i(()=>{if(!g.throw)throw g.return(),new TypeError("no throw method");return g.throw(...w)})}};function s(w){let f=Object.create(o);return r.set(f,{syncIteratorRecord:w}),f}function a(w,f){let u;if(f){if(u=w[Symbol.asyncIterator],u==null){if(u=w[Symbol.iterator],u==null)throw new TypeError("Object is not async iterable");let g=t(w,u);return s(g)}}else u=w[Symbol.iterator];if(u==null)throw new TypeError("Object is not iterable");return t(w,u)}let l="any"in $s?$s.any.bind($s):w=>{let f=new $e;for(let u of w)if(u.aborted)return f.abort(u.reason),f.signal;for(let u of w)u.addEventListener("abort",()=>{f.abort(u.reason)},{signal:f.signal});return f.signal},c=w=>l(w.filter(Boolean));class p{constructor({next:f,error:u,complete:g}={}){r.set(this,{next:f,error:u,complete:g})}next(f){let{next:u}=r.get(this)||{};u&&u(f)}error(f){let{error:u}=r.get(this)||{};u?u(f):To(f)}complete(){let{complete:f}=r.get(this)||{};f&&f()}}function h(w,f){let u=r.get(w);if(u?.active){u.active=!1,u.subscriptionController.abort(f);for(let g of u.teardowns.reverse()){if($t()&&!dt(document))return;try{g()}catch(q){To(q)}}}}function m(w,f,u={}){if($t()&&!dt(document))return;let g;typeof f=="function"?g=new p({next:f}):f&&!(f instanceof p)?g=new p(f):g=f||new p;let q=r.get(w),T=q.weakSubscriber?.deref();if(T?.active){let A=T,M=r.get(A);M.observers.add(g),u.signal&&(u.signal.aborted?M.observers.delete(g):u.signal.addEventListener("abort",()=>{let V=r.get(A);V?.active&&(V.observers.delete(g),V.observers.size==0&&h(A,u.signal.reason))}));return}let E=new y(g);if(q.weakSubscriber=new Kc(E),"signal"in u&&(u.signal.aborted?h(E,u.signal.reason):u.signal.addEventListener("abort",()=>{let A=r.get(E);A?.active&&(A.observers.delete(g),A.observers.size==0&&h(E,u.signal.reason))})),q.subscribeCallback)try{q.subscribeCallback(E)}catch(A){E.error(A)}}class y{get[Symbol.toStringTag](){return"Subscriber"}constructor(f=null){if(!(f instanceof p))throw new TypeError("Illegal constructor");r.set(this,{active:!0,observers:new Set([f]),teardowns:[],subscriptionController:new $e})}next(f){if(!(this instanceof y))throw new TypeError("illegal invocation");if(!arguments.length)throw new TypeError("too few arguments");let u=r.get(this);if(!u?.active||$t()&&!dt(document))return;let g=new Set(u.observers);for(let q of g)q.next(f)}error(f){if(!(this instanceof y))throw new TypeError("illegal invocation");if(!arguments.length)throw new TypeError("too few arguments");let u=r.get(this);if(!u?.active){To(f);return}if($t()&&!dt(document))return;h(this,f);let g=new Set(u.observers);for(let q of g)q.error(f)}complete(){if(!(this instanceof y))throw new TypeError("illegal invocation");let f=r.get(this);if(!f?.active||$t()&&!dt(document))return;h(this);let u=new Set(f.observers);for(let g of u)g.complete()}addTeardown(f){if(!(this instanceof y))throw new TypeError("illegal invocation");if(typeof f!="function")throw new TypeError("Parameter 1 is not of type 'Function'");if($t()&&!dt(document))return;let u=r.get(this);u?.active?u.teardowns.push(f):f()}get active(){if(!(this instanceof y))throw new TypeError("illegal invocation");return!!r.get(this)?.active}get signal(){if(!(this instanceof y))throw new TypeError("illegal invocation");if(!r.has(this)){let f=new $e;return f.abort(),f.signal}return r.get(this).subscriptionController.signal}}n(y.prototype,"next"),n(y.prototype,"error"),n(y.prototype,"complete"),n(y.prototype,"addTeardown"),n(y.prototype,"active"),n(y.prototype,"signal");class v{get[Symbol.toStringTag](){return"Observable"}constructor(f){if(!f)throw new TypeError("1 argument required but 0 present");r.set(this,{weakSubscriber:null,subscribeCallback:f})}static from(f){if(f===null||typeof f!="object")throw new TypeError("Observable.from only accepts objects");if(f instanceof v)return f;if(typeof(Symbol.asyncIterator in f&&f[Symbol.asyncIterator])=="function"){let T=function(E,A){if(E.signal.aborted)return;let M;try{let V=A.next();M=Promise.resolve(V)}catch(V){M=Promise.reject(V)}M.then(V=>{if(V===null||typeof V!="object"){E.error(new TypeError("Not an IteratorResult."));return}try{({done:q}=V)}catch(z){E.error(z);return}if(q){E.complete();return}let H;try{H=V.value}catch(z){E.error(z);return}E.next(H),T(E,A)},V=>{E.error(V)})},q=!1;return new v(E=>{if(E.signal.aborted)return;let A;try{A=a(f,!0)}catch(V){E.error(V);return}let M=A;E.signal.aborted||(E.signal.addEventListener("abort",()=>{if(typeof M.return!="function"||q)return;i(()=>M.return(E.signal.reason)).then(H=>{if(H===null||typeof H!="object")throw new TypeError("Iterator .return() must return an Object")})}),T(E,M))})}if(typeof(Symbol.iterator in f&&f[Symbol.iterator])=="function")return new v(q=>{if(q.signal.aborted)return;let T;try{T=a(f,!1)}catch(M){q.error(M);return}let E=!1,A=T;if(!q.signal.aborted)for(q.signal.addEventListener("abort",()=>{if(typeof A.return!="function"||E)return;let M=A.return();if(M===null||typeof M!="object")throw new TypeError("Iterator .return() must return an Object")});;)try{let M=A.next();if({done:E}=M,E){q.complete();return}if(q.next(M.value),q.signal.aborted)break}catch(M){q.error(M);break}});if(f instanceof Promise||typeof f.then=="function")return new v(q=>{f.then(T=>{q.next(T),q.complete()},T=>{q.error(T)})});throw new TypeError("Could not convert value to Observable")}subscribe(f=null,u={}){if(!(this instanceof v))throw new TypeError("illegal invocation");m(this,f,u)}takeUntil(f){if(!(this instanceof v))throw new TypeError("illegal invocation");let u=this,g=v.from(f);return new v(q=>{let T=new p({next(){q.complete()},error(){q.complete()}}),E={signal:q.signal};if(m(g,T,E),!q.active)return;let A=new p({next(M){q.next(M)},error(M){q.error(M)},complete(){q.complete()}});m(u,A,E)})}map(f){if(!(this instanceof v))throw new TypeError("illegal invocation");if(typeof f!="function")throw new TypeError("Parameter 1 is not of type 'Function'");let u=this;return new v(g=>{let q=0,T=new p({next(A){let M;try{M=f(A,q)}catch(V){g.error(V);return}q+=1,g.next(M)},error(A){g.error(A)},complete(){g.complete()}}),E={signal:g.signal};m(u,T,E)})}inspect(f={}){let u=null,g=null,q=null,T=null,E=null;typeof f=="function"?g=f:f&&typeof f=="object"&&("subscribe"in f&&(u=f.subscribe),"next"in f&&(g=f.next),"error"in f&&(q=f.error),"complete"in f&&(T=f.complete),"abort"in f&&(E=f.abort));let A=this;return new v(M=>{if(u!==null)try{u()}catch(F){M.error(F);return}let V=()=>{try{E!==null&&E(M.signal.reason)}catch(F){To(F)}};M.signal.addEventListener("abort",V,{once:!0});let H=new p({next(F){if(g!==null)try{g(F)}catch(se){M.signal.removeEventListener("abort",V),M.error(se);return}M.next(F)},error(F){if(M.signal.removeEventListener("abort",V),q!==null)try{q(F)}catch(se){M.error(se);return}M.error(F)},complete(){if(M.signal.removeEventListener("abort",V),T!==null)try{T()}catch(F){M.error(F);return}M.complete()}}),z={signal:M.signal};m(A,H,z)})}filter(f){if(!(this instanceof v))throw new TypeError("illegal invocation");if(typeof f!="function")throw new TypeError("Parameter 1 is not of type 'Function'");let u=this;return new v(g=>{let q=0,T=new p({next(A){let M=!1;try{M=f(A,q)}catch(V){g.error(V);return}q+=1,M&&g.next(A)},error(A){g.error(A)},complete(){g.complete()}}),E={signal:g.signal};m(u,T,E)})}take(f){if(!(this instanceof v))throw new TypeError("illegal invocation");let u=this;return new v(g=>{let q=f;if(q==0)return g.complete();let T=new p({next(A){g.next(A),q-=1,q==0&&g.complete()},error(A){g.error(A)},complete(){g.complete()}}),E={signal:g.signal};m(u,T,E)})}drop(f){if(!(this instanceof v))throw new TypeError("illegal invocation");let u=this;return new v(g=>{let q=f,T=new p({next(A){if(q>0)return q-=1;q==0&&g.next(A)},error(A){g.error(A)},complete(){g.complete()}}),E={signal:g.signal};m(u,T,E)})}flatMap(f){if(!(this instanceof v))throw new TypeError("illegal invocation");if(typeof f!="function")throw new TypeError("Parameter 1 is not of type 'Function'");let u=this;return new v(g=>{let q=0,T=!1,E=[];function A(z){let F;try{F=f(z,q)}catch(Ve){return g.error(Ve)}q+=1;let se;try{se=v.from(F)}catch(Ve){return g.error(Ve)}let Ko=new p({next(Ve){g.next(Ve)},error(Ve){g.error(Ve)},complete(){if(E.length){let Ve=E.shift();A(Ve)}else M=!1,T&&g.complete()}}),Se={signal:g.signal};m(se,Ko,Se)}let M=!1,V=new p({next(z){M?E.push(z):(M=!0,A(z))},error(z){g.error(z)},complete(){T=!0,!M&&!E.length&&g.complete()}}),H={signal:g.signal};m(u,V,H)})}switchMap(f){if(!(this instanceof v))throw new TypeError("illegal invocation");if(typeof f!="function")throw new TypeError("Parameter 1 is not of type 'Function'");let u=this;return new v(g=>{let q=0,T=!1,E=null;function A(H){let z;try{z=f(H,q)}catch(Se){return g.error(Se)}q+=1;let F;try{F=v.from(z)}catch(Se){return g.error(Se)}let se=new p({next(Se){g.next(Se)},error(Se){g.error(Se)},complete(Se){T?g.complete():E=null}}),Ko={signal:c([E.signal,g.signal])};m(F,se,Ko)}let M=new p({next(H){E&&E.abort(),E=new $e,A(H)},error(H){g.error(H)},complete(){T=!0,E||g.complete()}}),V={signal:g.signal};m(u,M,V)})}catch(f){if(!(this instanceof v))throw new TypeError("illegal invocation");if(typeof f!="function")throw new TypeError("Parameter 1 is not of type 'Function'");let u=this;return new v(q=>{let T=new p({next(A){q.next(A)},error(A){let M;try{M=f(A)}catch(F){q.error(F);return}let V;try{V=v.from(M)}catch(F){q.error(F);return}let H=new p({next(F){q.next(F)},error(F){q.error(F)},complete(){q.complete()}}),z={signal:q.signal};m(V,H,z)},complete(){q.complete()}}),E={signal:q.signal};m(u,T,E)})}finally(f){if(!(this instanceof v))throw new TypeError("illegal invocation");if(typeof f!="function")throw new TypeError("Parameter 1 is not of type 'Function'");let u=this;return new v(g=>{g.addTeardown(f);let q=new p({next(E){g.next(E)},error(E){g.error(E)},complete(){g.complete()}}),T={signal:g.signal};m(u,q,T)})}toArray(f={}){if(!(this instanceof v))throw new TypeError("illegal invocation");let{promise:u,resolve:g,reject:q}=e();if(f.signal){if(f.signal.aborted)return Promise.reject(f.signal.reason);f.signal.addEventListener("abort",()=>{q(f.signal.reason)})}let T=[],E=new p({next(A){T.push(A)},error(A){q(A)},complete(){g(T)}});return m(this,E,f),u}forEach(f,u={}){if(!(this instanceof v))throw new TypeError("illegal invocation");if(typeof f!="function")throw new TypeError("Parameter 1 is not of type 'Function'");let{promise:g,resolve:q,reject:T}=e(),E=new $e,A={signal:c([E.signal,u.signal])};if(A.signal.aborted)return T(A.signal.reason),g;A.signal.addEventListener("abort",()=>{T(A.signal.reason)});let M=0,V=new p({next(H){try{f(H,M)}catch(z){T(z),E.abort(z)}M+=1},error(H){T(H)},complete(){q()}});return m(this,V,A),g}every(f,u={}){if(!(this instanceof v))throw new TypeError("illegal invocation");if(typeof f!="function")throw new TypeError("Parameter 1 is not of type 'Function'");let{promise:g,resolve:q,reject:T}=e(),E=new $e,A={signal:c([E.signal,u.signal])};if(A.signal.aborted)return T(A.signal.reason),g;A.signal.addEventListener("abort",()=>{T(A.signal.reason)});let M=0,V=new p({next(H){let z=!1;try{z=f(H,M)}catch(F){T(F),E.abort(F)}M+=1,z||(q(!1),E.abort())},error(H){T(H)},complete(){q(!0)}});return m(this,V,A),g}first(f={}){if(!(this instanceof v))throw new TypeError("illegal invocation");let{promise:u,resolve:g,reject:q}=e(),T=new $e,E={signal:c([T.signal,f.signal])};if(E.signal.aborted)return q(E.signal.reason),u;E.signal.addEventListener("abort",()=>{q(E.signal.reason)});let A=new p({next(M){g(M),T.abort()},error(M){q(M)},complete(){q(new RangeError("No values in Observable"))}});return m(this,A,E),u}last(f={}){if(!(this instanceof v))throw new TypeError("illegal invocation");let{promise:u,resolve:g,reject:q}=e();if(f.signal){if(f.signal.aborted)return q(f.signal.reason),u;f.signal.addEventListener("abort",()=>{q(f.signal.reason)})}let T=null,E=!1,A=new p({next(M){E=!0,T=M},error(M){q(M)},complete(){E?g(T):q(new RangeError("No values in Observable"))}});return m(this,A,f),u}find(f,u={}){if(!(this instanceof v))throw new TypeError("illegal invocation");if(typeof f!="function")throw new TypeError("Parameter 1 is not of type 'Function'");let{promise:g,resolve:q,reject:T}=e(),E=new $e,A={signal:c([E.signal,u.signal])};if(A.signal.aborted)return T(A.signal.reason),g;A.signal.addEventListener("abort",()=>{T(A.signal.reason)});let M=0,V=new p({next(H){let z=!1;try{z=f(H,M)}catch(F){T(F),E.abort(F)}M+=1,z&&(q(H),E.abort())},error(H){T(H)},complete(){q()}});return m(this,V,A),g}some(f,u={}){if(!(this instanceof v))throw new TypeError("illegal invocation");if(typeof f!="function")throw new TypeError("Parameter 1 is not of type 'Function'");let{promise:g,resolve:q,reject:T}=e(),E=new $e,A={signal:c([E.signal,u.signal])};if(A.signal.aborted)return T(A.signal.reason),g;A.signal.addEventListener("abort",()=>{T(A.signal.reason)});let M=0,V=new p({next(H){let z=!1;try{z=f(H,M)}catch(F){T(F),E.abort(F)}M+=1,z&&(q(!0),E.abort())},error(H){T(H)},complete(){q(!1)}});return m(this,V,A),g}reduce(f,u,g={}){if(!(this instanceof v))throw new TypeError("illegal invocation");if(typeof f!="function")throw new TypeError("Parameter 1 is not of type 'Function'");let{promise:q,resolve:T,reject:E}=e(),A=new $e,M={signal:c([A.signal,g.signal])};if(M.signal.aborted)return E(M.signal.reason),q;M.signal.addEventListener("abort",()=>{E(M.signal.reason)},{once:!0});let V=0,H=arguments.length>1?u:Os,z=new p({next(F){if(H===Os){H=F,V++;return}try{let se=f(H,F,V);V++,H=se}catch(se){E(se),A.abort(se);return}},error(F){E(F)},complete(){H!==Os?T(H):E(new TypeError("no initial value provided and no values emitted"))}});return m(this,z,M),q}}return n(v.prototype,"subscribe"),[v,y]})();function vl(){return typeof globalThis.Observable=="function"}function yl(){Object.defineProperties(globalThis,{Observable:{value:bl,configurable:!0,writable:!0},Subscriber:{value:Zc,configurable:!0,writable:!0}}),EventTarget.prototype.when=function(n,i={}){if($t()&&!dt(document))return;let e=this;return new bl(t=>{if(!e||t.signal.aborted)return;let r=o=>{t.next(o)};e.addEventListener(n,r,{capture:i.capture||!1,passive:i.passive,once:!1,signal:t.signal})})}}function Vs(n,i,e){let t=n.filter(r=>!r.hasAttribute("disabled"));for(let r of t){let o=r.getBoundingClientRect();if(i>=o.left&&i<=o.right&&e>=o.top&&e<=o.bottom)return r}return null}function xl(n,i,e,t){if(!t)return null;let r=n.filter(s=>!s.hasAttribute("disabled")),o=t.getBoundingClientRect();for(let s of r){let a=s.getBoundingClientRect();if(!(o.right<a.left||o.left>a.right||o.bottom<a.top||o.top>a.bottom))return s}return null}function ql(n,i,e,t){let r=n.filter(c=>!c.hasAttribute("disabled"));if(r.length===0)return null;let o,s;if(t){let c=t.getBoundingClientRect();o=c.left+c.width/2,s=c.top+c.height/2}else o=i,s=e;let a=null,l=1/0;for(let c of r){let p=c.getBoundingClientRect(),h=p.left+p.width/2,m=p.top+p.height/2,y=Math.sqrt(Math.pow(o-h,2)+Math.pow(s-m,2));y<l&&(l=y,a=c)}return a}function wl(n,i,e,t){let r=n.filter(l=>!l.hasAttribute("disabled"));if(r.length===0)return null;let o;if(t){let l=t.getBoundingClientRect();o=[{x:l.left,y:l.top},{x:l.right,y:l.top},{x:l.left,y:l.bottom},{x:l.right,y:l.bottom}]}else o=[{x:i,y:e},{x:i,y:e},{x:i,y:e},{x:i,y:e}];let s=null,a=1/0;for(let l of r){let c=l.getBoundingClientRect(),p=[{x:c.left,y:c.top},{x:c.right,y:c.top},{x:c.left,y:c.bottom},{x:c.right,y:c.bottom}],h=0,m=0;for(let v of o)for(let w of p){let f=Math.sqrt(Math.pow(v.x-w.x,2)+Math.pow(v.y-w.y,2));h+=f,m++}let y=h/m;y<a&&(a=y,s=l)}return s}function ed(n,i,e,t,r){let o=r&&r.length>0?n.filter(u=>r.includes(u)):n.filter(u=>u.tagName==="SLOT"&&u.hasAttribute("part")&&u.getAttribute("part")?.includes("drags")),a=n.filter(u=>!o.includes(u));if(o.length===0&&a.length===0)return null;let l;if(t){let u=t.getBoundingClientRect();l=[{x:u.left,y:u.top},{x:u.right,y:u.top},{x:u.left,y:u.bottom},{x:u.right,y:u.bottom}]}else l=[{x:i,y:e},{x:i,y:e},{x:i,y:e},{x:i,y:e}];let c=u=>{let g=u.getBoundingClientRect(),q=[{x:g.left,y:g.top},{x:g.right,y:g.top},{x:g.left,y:g.bottom},{x:g.right,y:g.bottom}],T=0,E=0;for(let A of l)for(let M of q){let V=Math.sqrt(Math.pow(A.x-M.x,2)+Math.pow(A.y-M.y,2));T+=V,E++}return T/E},p=null,h=1/0;for(let u of o){let g=c(u);g<h&&(h=g,p=u)}let m=null,y=1/0;for(let u of a){let g=c(u);g<y&&(y=g,m=u)}if(p&&t){let u=t.getBoundingClientRect(),g=p.getBoundingClientRect(),q=u.left+u.width/2,T=u.top+u.height/2;if(q>=g.left&&q<=g.right&&T>=g.top&&T<=g.bottom)return p}let w=t?.getAttribute("data-drag-origin")==="droppable"?.85:1.5;return p&&m?h<=y*w?p:m:p||m}function Cl(n){switch(n){case"pointerWithin":return Vs;case"rectangleIntersection":return xl;case"closestCenter":return ql;case"closestCorners":return wl;case"closestCornersWithInventoryPriority":return ed;default:return Vs}}function gr(n,i,e,t,r="pointerWithin",o){return Cl(r)(n,i,e,t,o)}function pt(n,i){let e=n.composedPath?n.composedPath():[n.target];for(let t of e)if(t instanceof HTMLElement&&t.tagName!=="SLOT"){if(t.matches(i)||t.hasAttribute("qti-draggable"))return t;let r=t.closest(i)||t.closest('[qti-draggable="true"]');if(r)return r}return null}function Ao(n,i){let e=[];return n.forEach(t=>{let r=[];t.tagName.toLowerCase()==="slot"?r=t.assignedElements({flatten:!0}).filter(a=>a.getAttribute("identifier")===i):r=Array.from(t.querySelectorAll(`[identifier="${i}"]`)),e.push(...r)}),e}function El(n,i){let e=n.find(r=>r.getAttribute("identifier")===i);if(!e)return 1;let t=e.getAttribute("match-max");return t?parseInt(t,10)||0:1}function Sl(n,i){let e=parseInt(n.getAttribute("match-max")||"1",10),t=Number.isNaN(e)?1:e;if(t===0)return!1;let r=n.querySelectorAll(i),o=n.querySelectorAll('[qti-draggable="true"]');return Math.max(r.length,o.length)>=t}function Ci(n,i){return n.reduce((e,t)=>{let r=t.querySelectorAll(i).length,o=t.querySelectorAll('[qti-draggable="true"]').length;return e+Math.max(r,o)},0)}function Io(n,i){return n.map(e=>{let r=Array.from(e.querySelectorAll(i)).map(s=>s.getAttribute("identifier")).filter(s=>!!s),o=e.getAttribute("identifier");return r.map(s=>`${s} ${o}`)}).flat()}function Tl(n,i,e,t=typeof window<"u"?window:null){if(!n.length||!i.length||!t)return;let r=0,o=0;n.forEach(c=>{let p=c.getBoundingClientRect();r=Math.max(r,p.height),o=Math.max(o,p.width)});let s=i[0].parentElement,a=i[0].tagName==="QTI-SIMPLE-ASSOCIABLE-CHOICE",l=i[0].tagName==="QTI-GAP";if(a&&s){let c;if(s.clientWidth>0){let p=t.getComputedStyle(s),h=parseFloat(p.paddingLeft),m=parseFloat(p.paddingRight);c=s.clientWidth-h-m}else c=Math.min(t.innerWidth*.8,600);s.style.gridTemplateColumns=`repeat(auto-fit, minmax(calc(min(${c}px, ${o}px + 2 * var(--qti-dropzone-padding, 0.5rem))), 1fr))`}i.forEach(c=>{c.style.minHeight=`${r}px`,(a||l)&&(c.style.minWidth=`${o}px`);let p=c.shadowRoot?.querySelector('slot[part="dropslot"]');p&&(p.style.minHeight=`${r}px`)}),e.forEach(c=>{c.style.minHeight=`${r}px`})}vl()||yl();var Al=new WeakSet;function td(n){!n||Al.has(n)||(n.addEventListener("touchmove",()=>{},{capture:!1,passive:!1}),Al.add(n))}var ko=(n,i,e,t='slot[part="drags"]',r="pointerWithin")=>{class o extends n{constructor(){super(...arguments);this.trackedDraggables=[];this.trackedDroppables=[];this.trackedDragContainers=[];this.allDropzones=[];this.collisionDetectionAlgorithm=r;this.dragState={dragging:!1,dragSource:null,dragClone:null,startOffset:{x:0,y:0},currentTarget:null,sourceDroppable:null,inputType:null};this.subscriptions=[];this.dragSubscriptions=[];this.lastPointerDownAt=0;this.lastTouchStartAt=0}connectedCallback(){super.connectedCallback(),td(this.ownerDocument?.defaultView),this.setupDragDrop()}disconnectedCallback(){super.disconnectedCallback(),this.cleanup()}async setupDragDrop(){await this.updateComplete,this.cacheInteractiveElements(),this.afterCache(),this.setupDragObservables()}afterCache(){}cacheInteractiveElements(){let l=(u,g)=>Array.from(g?.querySelectorAll(u)??[]),c=l(i,this),p=l(i,this.shadowRoot),h=l('[qti-draggable="true"]:not([data-drag-clone])',this),m=l('[qti-draggable="true"]:not([data-drag-clone])',this.shadowRoot);this.trackedDraggables=Array.from(new Set([...c,...p,...h,...m]));let y=l(e,this),v=l(e,this.shadowRoot);this.trackedDroppables=Array.from(new Set([...y,...v]));let w=l(t,this),f=l(t,this.shadowRoot);this.trackedDragContainers=Array.from(new Set([...w,...f])),this.allDropzones=[...this.trackedDroppables,...this.trackedDragContainers],this.trackedDraggables.forEach(u=>{u.style.cursor="grab",u.style.userSelect="none",u.style.touchAction="none",u.style.webkitUserSelect="none",u.style.webkitTouchCallout="none",u.setAttribute("qti-draggable","true"),u.setAttribute("tabindex","0")})}setupDragObservables(){let l=this.shadowRoot;if(!l){console.error("\u274C [Observable DnD] No shadow root found!");return}let c=l.when("pointerdown").filter(v=>{if(!v.isTrusted)return!1;let w=pt(v,i),f=this.disabled||this.readonly,u=w?.hasAttribute("disabled")||w?.getAttribute("aria-disabled")==="true",g=Date.now()-this.lastTouchStartAt<50;return w&&v.isPrimary!==!1&&v.button===0&&!f&&!u&&!g}).subscribe(v=>{this.lastPointerDownAt=Date.now();let w=pt(v,i);if(!w){console.warn("\u26A0\uFE0F [Observable DnD] No draggable target found");return}v.pointerType==="touch"&&(v.preventDefault(),v.stopPropagation());let f=v.isTrusted?v.pointerType==="touch"?100:10:0;if(this.dragState.activationTimeout&&clearTimeout(this.dragState.activationTimeout),f===0){this.dragState.dragging||this.initiateDrag(w,v.clientX,v.clientY,v.pointerType,"pointer",v.pointerId,v.isTrusted);return}let u=()=>{this.dragState.activationTimeout&&(clearTimeout(this.dragState.activationTimeout),this.dragState.activationTimeout=void 0),document.removeEventListener("pointerup",u,!0),document.removeEventListener("pointercancel",u,!0)};document.addEventListener("pointerup",u,{once:!0,capture:!0}),document.addEventListener("pointercancel",u,{once:!0,capture:!0}),this.dragState.activationTimeout=window.setTimeout(()=>{this.dragState.activationTimeout=void 0,document.removeEventListener("pointerup",u,!0),document.removeEventListener("pointercancel",u,!0),this.dragState.dragging||this.initiateDrag(w,v.clientX,v.clientY,v.pointerType,"pointer",v.pointerId,v.isTrusted)},f)}),p=l.when("mousedown").filter(v=>{let w=pt(v,i),f=this.disabled||this.readonly,u=w?.hasAttribute("disabled")||w?.getAttribute("aria-disabled")==="true",g=v.button===0,q=Date.now()-this.lastPointerDownAt<50;return w&&g&&!f&&!u&&!q}).subscribe(v=>{let w=pt(v,i);!w||this.dragState.dragging||(v.preventDefault(),this.initiateDrag(w,v.clientX,v.clientY,"mouse","mouse",void 0,v.isTrusted))}),h=l.when("touchstart").filter(v=>{let w=pt(v,i),f=this.disabled||this.readonly,u=w?.hasAttribute("disabled")||w?.getAttribute("aria-disabled")==="true",g=!!(v.touches?.[0]||v.changedTouches?.[0]),q=Date.now()-this.lastPointerDownAt<50;return w&&g&&!f&&!u&&!q}).subscribe(v=>{let w=pt(v,i),f=v.touches?.[0]||v.changedTouches?.[0];!w||!f||this.dragState.dragging||(this.lastTouchStartAt=Date.now(),v.preventDefault(),v.stopPropagation(),this.initiateDrag(w,f.clientX,f.clientY,"touch","touch",void 0,v.isTrusted))}),m={dragging:!1,dragElement:null,dragIndex:0,dropIndex:0,dropElement:null},y=l.when("keydown").subscribe(v=>{let w=this.trackedDraggables.filter(u=>u.style.opacity!=="0"),f=[...this.trackedDroppables,...this.trackedDragContainers];if(m.dragging)switch(v.code){case"ArrowRight":case"ArrowDown":{v.preventDefault();let u=(m.dropIndex+1)%f.length;m={...m,dropIndex:u,dropElement:f[u]};break}case"ArrowLeft":case"ArrowUp":{v.preventDefault();let u=(m.dropIndex-1+f.length)%f.length;m={...m,dropIndex:u,dropElement:f[u]};break}case"Space":case"Enter":case"Tab":{v.preventDefault(),m.dragElement&&m.dropElement&&(this.allowDrop(m.dragElement,m.dropElement)||this.trackedDragContainers.includes(m.dropElement)?this.handleDrop(m.dragElement,m.dropElement):this.handleInvalidDrop(m.dragElement)),this.trackedDraggables.forEach(u=>u.removeAttribute("data-keyboard-dragging")),this.saveResponse(),m={dragging:!1,dragElement:null,dragIndex:0,dropIndex:0,dropElement:null};break}case"Escape":{v.preventDefault(),this.trackedDraggables.forEach(u=>u.removeAttribute("data-keyboard-dragging")),m={dragging:!1,dragElement:null,dragIndex:0,dropIndex:0,dropElement:null};break}}else{let u=pt(v,i),g=this.disabled||this.readonly,q=u?.hasAttribute("disabled")||u?.getAttribute("aria-disabled")==="true";u&&["Space","Enter"].includes(v.code)&&!g&&!q&&(v.preventDefault(),u.setAttribute("data-keyboard-dragging","true"),m={dragging:!0,dragElement:u,dragIndex:w.indexOf(u),dropIndex:0,dropElement:f[0]})}this.allDropzones.forEach(u=>u.removeAttribute("hover")),m.dragging&&m.dropElement&&(m.dropElement.setAttribute("hover",""),m.dropElement.hasAttribute("tabindex")&&m.dropElement.getAttribute("tabindex")!=="-1"&&m.dropElement.focus())});this.subscriptions.push(c,p,h,y)}initiateDrag(l,c,p,h,m="pointer",y,v){if(this.dragState.dragging){console.warn("\u26A0\uFE0F [Observable DnD] Already dragging, ignoring initiateDrag");return}if(l.hasAttribute("data-drag-clone")){console.warn("\u26A0\uFE0F [Observable DnD] Attempted to drag visual clone, ignoring");return}let w=this.trackedDroppables.some(g=>g.contains(l)),f=this.trackedDroppables.find(g=>g.contains(l))||null,u=l.getBoundingClientRect();this.dragState={dragging:!0,dragSource:l,dragClone:this.createDragClone(l,u),startOffset:{x:c-u.left,y:p-u.top},currentTarget:null,sourceDroppable:f,inputType:h,pointerId:y,startedFromTrustedEvent:v,initialCoordinates:{x:c,y:p}},w?(this.dragState.dragClone?.setAttribute("data-drag-origin","droppable"),l.remove(),this.cacheInteractiveElements(),f&&f.setAttribute("data-drag-source","true")):(this.dragState.dragClone?.setAttribute("data-drag-origin","inventory"),l.style.opacity="0",l.style.pointerEvents="none"),this.updateClonePosition(c,p),this.activateAllDroppables(),this.setupMoveObservables(h,m)}setupMoveObservables(l,c="pointer"){if(l==="touch"){if(c==="pointer")try{let T=this.dragState.dragSource,E=this.dragState.pointerId;T&&E!==void 0&&T.setPointerCapture&&T.setPointerCapture(E)}catch{}let g=T=>{T.cancelable&&(T.preventDefault(),c==="pointer"&&T.stopPropagation())};document.addEventListener("touchmove",g,{passive:!1,capture:!0}),document.addEventListener("touchstart",g,{passive:!1,capture:!0}),document.addEventListener("touchend",g,{passive:!1,capture:!0}),document.addEventListener("gesturestart",g,{passive:!1}),document.addEventListener("gesturechange",g,{passive:!1}),document.addEventListener("gestureend",g,{passive:!1});let q=()=>{if(document.removeEventListener("touchmove",g,{capture:!0}),document.removeEventListener("touchstart",g,{capture:!0}),document.removeEventListener("touchend",g,{capture:!0}),document.removeEventListener("gesturestart",g),document.removeEventListener("gesturechange",g),document.removeEventListener("gestureend",g),c==="pointer")try{let T=this.dragState.dragSource,E=this.dragState.pointerId;T&&E!==void 0&&T.releasePointerCapture&&T.releasePointerCapture(E)}catch{}};this.dragState.touchCleanup=q}let p=c==="mouse"?"mousemove":c==="touch"?"touchmove":"pointermove",h=c==="mouse"?"mouseup":c==="touch"?"touchend":"pointerup",m=g=>{let q=this.dragState.startedFromTrustedEvent;return q===void 0||g.isTrusted===q},y=document.when(p).takeUntil(document.when(h)).subscribe({next:g=>{if(m(g)){if(g.preventDefault(),g.stopPropagation(),c==="touch"){let q=g.touches?.[0]||g.changedTouches?.[0];if(!q)return;this.handleDragMove(q.clientX,q.clientY);return}if(c==="mouse"){let q=g;if(typeof q.buttons=="number"&&(q.buttons&1)!==1)return}this.handleDragMove(g.clientX,g.clientY)}}}),v=document.when(h).subscribe({next:g=>{m(g)&&(g.preventDefault(),g.stopPropagation(),this.handleDragEnd())}}),w=c==="touch"?document.when("touchcancel").subscribe({next:g=>{m(g)&&this.handleDragEnd()}}):c==="mouse"?null:document.when("pointercancel").subscribe({next:g=>{m(g)&&this.handleDragEnd()}}),f=document.when("keydown").filter(g=>g.key==="Escape").subscribe({next:g=>{m(g)&&this.handleDragEnd()}}),u=[y,v,f];w&&u.push(w),this.dragSubscriptions.push(...u)}handleDragMove(l,c){if(!this.dragState.dragging||!this.dragState.dragClone)return;this.updateClonePosition(l,c);let p=gr(this.allDropzones,l,c,this.dragState.dragClone,this.collisionDetectionAlgorithm,this.trackedDragContainers),h=Date.now(),m=h-(this.dragState.lastTargetChangeTime||0);p!==this.dragState.currentTarget&&(p===null||m>=50)&&(this.allDropzones.forEach(v=>v.removeAttribute("hover")),p&&p.setAttribute("hover",""),this.dragState.currentTarget=p,this.dragState.lastTargetChangeTime=h)}handleDragEnd(){if(!this.dragState.dragging)return;let{dragSource:l,dragClone:c,currentTarget:p,sourceDroppable:h}=this.dragState,m=p;if(!m&&c){let f=c.getBoundingClientRect(),u=this.dragState.initialCoordinates?.x??f.left+f.width/2,g=this.dragState.initialCoordinates?.y??f.top+f.height/2;m=gr(this.allDropzones,u,g,c,this.collisionDetectionAlgorithm,this.trackedDragContainers)}let y=m?.hasAttribute("disabled")&&m.hasAttribute("data-drag-source");!!l&&!!m&&this.allowDrop(l,m)&&(!m.hasAttribute("disabled")||y)&&l&&m?this.handleDrop(l,m):this.handleInvalidDrop(l),c&&c.remove(),this.dragState.touchCleanup&&this.dragState.touchCleanup(),this.resetDragState(),this.deactivateAllDroppables(),this.saveResponse(),h&&h.removeAttribute("data-drag-source"),this.cacheInteractiveElements();let w=this.checkAllMaxAssociations;typeof w=="function"&&w.call(this)}allowDrop(l,c){return this.trackedDroppables.includes(c)||this.trackedDragContainers.includes(c)}handleInvalidDrop(l){l&&(l.style.opacity="1.0",l.style.pointerEvents="auto")}createDragClone(l,c){let p=l.cloneNode(!0),h=window.getComputedStyle(l);for(let m=0;m<h.length;m++){let y=h[m];p.style.setProperty(y,h.getPropertyValue(y))}return p.style.position="fixed",p.style.width=`${c.width}px`,p.style.height=`${c.height}px`,p.style.zIndex="9999",p.style.pointerEvents="none",p.style.touchAction="none",p.style.userSelect="none",p.style.opacity="0.8",p.removeAttribute("qti-draggable"),p.removeAttribute("tabindex"),p.setAttribute("data-drag-clone","true"),document.body.appendChild(p),p}updateClonePosition(l,c){if(!this.dragState.dragClone)return;let{startOffset:p}=this.dragState,h=l-p.x,m=c-p.y;this.dragState.dragClone.style.left=`${h}px`,this.dragState.dragClone.style.top=`${m}px`}activateAllDroppables(){this.setInternalsState("--dragzone-enabled",!0),this.setInternalsState("--dragzone-active",!0),this.allDropzones.forEach(l=>{l.setAttribute("enabled",""),l.setAttribute("active","")})}deactivateAllDroppables(){this.setInternalsState("--dragzone-enabled",!1),this.setInternalsState("--dragzone-active",!1),this.allDropzones.forEach(l=>{l.removeAttribute("enabled"),l.removeAttribute("active"),l.removeAttribute("hover")})}resetDragState(){if(this.dragState.activationTimeout&&clearTimeout(this.dragState.activationTimeout),this.dragState.touchCleanup)try{this.dragState.touchCleanup()}catch(l){console.warn("\u26A0\uFE0F [Observable DnD] Error during touch cleanup:",l)}this.dragSubscriptions.forEach(l=>{try{l&&typeof l.unsubscribe=="function"&&l.unsubscribe()}catch(c){console.warn("\u26A0\uFE0F [Observable DnD] Error unsubscribing:",c)}}),this.dragSubscriptions=[],this.dragState={dragging:!1,dragSource:null,dragClone:null,startOffset:{x:0,y:0},currentTarget:null,sourceDroppable:null,inputType:null,pointerId:void 0,startedFromTrustedEvent:void 0,touchCleanup:void 0}}setInternalsState(l,c){let p=this._internals;p?.states&&(c?p.states.add(l):p.states.delete(l))}cleanup(){this.subscriptions.forEach(l=>{try{l.unsubscribe()}catch{}}),this.subscriptions=[],this.dragState.dragClone&&this.dragState.dragClone.remove(),this.resetDragState()}}return o};var Il={duration:250,easing:"ease",fill:"both"};function Ns(n){let i=n.getBoundingClientRect();return{left:i.left,top:i.top,width:i.width,height:i.height}}function ut(n){let i=new Map;return n.forEach(e=>{i.set(e,Ns(e))}),i}function kl(n,i){return{deltaX:n.left-i.left,deltaY:n.top-i.top,deltaW:n.width/i.width,deltaH:n.height/i.height}}function Ml(n,i,e={}){let t=Ns(n),{deltaX:r,deltaY:o,deltaW:s,deltaH:a}=kl(i,t);if(r===0&&o===0&&s===1&&a===1)return null;let{duration:l,easing:c,fill:p}={...Il,...e};return n.animate([{transformOrigin:"top left",transform:`translate(${r}px, ${o}px) scale(${s}, ${a})`},{transformOrigin:"top left",transform:"none"}],{duration:l,easing:c,fill:p})}function mt(n,i={}){let e=new Map;return n.forEach((t,r)=>{if(!(r instanceof HTMLElement))return;let o=Ml(r,t,i);o&&e.set(r,o)}),e}var we=(n,i,e,t='slot[part="drags"]',r="closestCornersWithInventoryPriority")=>{let o=ko(n,i,e,t,r);class s extends o{constructor(){super(...arguments);this.configuration={copyStylesDragClone:!0,dragCanBePlacedBack:!0,dragOnClick:!1};this.minAssociations=1;this._maxAssociations=0;this._maxAssociationsDefaultApplied=!1;this._response=[];this._dropBlockedDueToMax=!1;this.flipAnimationConfig={duration:200,easing:"ease"};this._enableFlipAnimations=!0;this.autoSizeDropzones=!1}get maxAssociations(){if(!this._maxAssociationsDefaultApplied){this._maxAssociationsDefaultApplied=!0;let c=this.tagName?.toLowerCase()||"";(c==="qti-graphic-gap-match-interaction"||c==="qti-gap-match-interaction")&&!this.hasAttribute("max-associations")&&this._maxAssociations===0&&(this._maxAssociations=1)}return this._maxAssociations}set maxAssociations(c){let p=this._maxAssociations;this._maxAssociations=c,this.requestUpdate("maxAssociations",p)}set disableAnimations(c){this._enableFlipAnimations=!c}get disableAnimations(){return!this._enableFlipAnimations}get enableFlipAnimations(){return this._enableFlipAnimations}get response(){let c=this.getResponse,p=typeof c=="function"?c.call(this):void 0;return(Array.isArray(p)?p:(this.cacheInteractiveElements(),Io(this.trackedDroppables,i))).join(",")}set response(c){if(Array.isArray(c)){let p=this.getValue,h=typeof p=="function"?p.call(this,c):c,m=Array.isArray(h)?h:typeof h=="string"&&h.length>0?[h]:[];this.reset(!1),m.forEach(w=>this.placeResponse(w));let y=this.getResponse,v=typeof y=="function"?y.call(this):void 0;this._response=Array.isArray(v)?v:(this.cacheInteractiveElements(),Io(this.trackedDroppables,i))}else this._response=typeof c=="string"&&c.length>0?[c]:[];this._internals.setFormValue(JSON.stringify(this._response))}afterCache(){this.applyConfiguredChoicesContainerWidth(),this.updateMinDimensionsForDropZones()}applyConfiguredChoicesContainerWidth(){let c=this.dataset.choicesContainerWidth;c&&this.trackedDroppables.forEach(p=>{p.style.width=`${c}px`,p.style.boxSizing="border-box"})}shouldTreatBlockedMaxAsInvalid(){return!0}shouldReturnToInventoryOnInventoryDrop(){return!1}getFirstMessageAttribute(c){for(let h of c){let m=this.getAttribute(h);if(m&&m.trim().length>0)return m}let p=c.map(h=>h.toLowerCase());for(let h of Array.from(this.attributes))if(p.includes(h.name.toLowerCase())&&h.value.trim().length>0)return h.value;return null}allowDrop(c,p){if(this.trackedDragContainers.includes(p))return!0;let h=this.trackedDroppables.includes(p),m=p.hasAttribute("disabled"),y=p.hasAttribute("data-drag-source");return h&&(!m||y)}handleDrop(c,p){let h=this.dragState.dragClone?.getBoundingClientRect();this.dropDraggableInDroppable(c,p,h);let m=c.getAttribute("identifier");m&&this.updateInventoryBasedOnMatchMax(m);let y=Ci(this.trackedDroppables,i);this.maxAssociations>0&&y>this.maxAssociations&&(this._dropBlockedDueToMax=!0,this.validate(),this.reportValidity())}handleInvalidDrop(c){let p=this.dragState.sourceDroppable,h=this.dragState.currentTarget,m=!h,y=this.trackedDragContainers[0]||null;if(!c)return;p&&m&&y&&this.configuration.dragCanBePlacedBack!==!1?this.dropDraggableInDroppable(c,y):p&&this.trackedDroppables.includes(p)?this.dropDraggableInDroppable(c,p):c.style.opacity==="0"&&(this.restoreInventoryItem(c),this.cacheInteractiveElements(),this.checkAllMaxAssociations());let v=Ci(this.trackedDroppables,i),w=this.maxAssociations>0&&v>=this.maxAssociations,f=!!h&&h.hasAttribute("disabled")&&!h.hasAttribute("data-drag-source");this._dropBlockedDueToMax=f&&w,this.validate(),this.reportValidity()}updateMinDimensionsForDropZones(){this.trackedDraggables.length!==0&&Tl(this.trackedDraggables,this.trackedDroppables,this.trackedDragContainers)}restoreInventoryItem(c){c.style.opacity="1.0",c.style.display="",c.style.position="",c.style.pointerEvents="auto"}placeResponse(c){let[p,...h]=c.split(" ").reverse(),m=this.trackedDroppables.find(y=>y.getAttribute("identifier")===p);m&&h.forEach(y=>{if(!y)return;let w=Ao(this.trackedDragContainers,y).at(0)||this.trackedDraggables.find(f=>f.getAttribute("identifier")===y);w&&this.dropDraggableInDroppable(w,m)})}dropDraggableInDroppable(c,p,h){if(this.trackedDragContainers.includes(p)){if(!this.dragState.sourceDroppable){if(this.shouldReturnToInventoryOnInventoryDrop()){this.returnToInventory(c),this._dropBlockedDueToMax=!1,this.validate();return}this.restoreInventoryItem(c),this.cacheInteractiveElements(),this.checkAllMaxAssociations(),this._dropBlockedDueToMax=!1,this.validate();return}let T=c.getAttribute("identifier");c.remove(),T&&this.restoreOriginalInInventory(T),this.cacheInteractiveElements(),this.checkAllMaxAssociations(),this._dropBlockedDueToMax=!1,this.validate();return}let y=parseInt(p.getAttribute("match-max")||"1",10),v=Number.isNaN(y)?1:y,w=v===0||v>1,f=Array.from(p.querySelectorAll('[qti-draggable="true"]')),u=this.enableFlipAnimations&&f.length>0?ut(f):null;if(!w){let T=p.querySelector(i)||p.querySelector('[qti-draggable="true"]');if(T){let E=T.getAttribute("identifier");T.remove(),E&&this.restoreOriginalInInventory(E)}}let g=c.cloneNode(!0);g.removeAttribute("style"),g.removeAttribute("data-keyboard-dragging"),g.setAttribute("qti-draggable","true"),g.setAttribute("tabindex","0"),p.tagName==="SLOT"?g.setAttribute("slot",p.getAttribute("name")||""):p.tagName==="QTI-SIMPLE-ASSOCIABLE-CHOICE"?(g.setAttribute("slot","qti-simple-associable-choice"),p.appendChild(g),p.setAttribute("data-has-drop","true")):p.appendChild(g),u&&this.enableFlipAnimations&&mt(u,this.flipAnimationConfig),h&&this.enableFlipAnimations&&requestAnimationFrame(()=>{let T=g.getBoundingClientRect(),E=h.left-T.left,A=h.top-T.top;(E!==0||A!==0)&&g.animate([{transform:`translate(${E}px, ${A}px)`,opacity:.8},{transform:"translate(0, 0)",opacity:1}],{duration:this.flipAnimationConfig.duration||200,easing:this.flipAnimationConfig.easing||"ease",fill:"both"})});let q=c.getAttribute("identifier");q&&this.updateInventoryBasedOnMatchMax(q),this.cacheInteractiveElements(),this.checkAllMaxAssociations()}returnToInventory(c){let p=c.getAttribute("identifier");p&&(this.trackedDroppables.forEach(h=>{Array.from(h.querySelectorAll(`[identifier="${p}"][qti-draggable="true"]`)).forEach(y=>{y.remove(),h.tagName==="QTI-SIMPLE-ASSOCIABLE-CHOICE"&&h.removeAttribute("data-has-drop")})}),this.restoreOriginalInInventory(p)),this.cacheInteractiveElements(),this.checkAllMaxAssociations()}restoreOriginalInInventory(c){let p=Ao(this.trackedDragContainers,c),h=[];this.trackedDragContainers.forEach(y=>{h.push(...Array.from(y.querySelectorAll('[qti-draggable="true"]')))});let m=this.enableFlipAnimations&&h.length>0?ut(h):null;p.forEach(y=>{y.style.opacity="1.0",y.style.pointerEvents="auto",y.style.display="",y.style.visibility="visible",y.style.setProperty("opacity","1.0","important"),y.style.setProperty("pointer-events","auto","important")}),m&&this.enableFlipAnimations&&mt(m,this.flipAnimationConfig)}updateInventoryBasedOnMatchMax(c){let p=Ao(this.trackedDragContainers,c),h=El(this.trackedDraggables,c),m=this.trackedDroppables.reduce((y,v)=>{let w=v.querySelectorAll(`[identifier="${c}"]`);return y+w.length},0);p.forEach(y=>{h!==0&&m>=h?(y.style.opacity="0.0",y.style.pointerEvents="none"):(y.style.opacity="1.0",y.style.pointerEvents="auto")})}checkAllMaxAssociations(){let c=Ci(this.trackedDroppables,i),p=this.maxAssociations>0&&c>=this.maxAssociations;this.trackedDroppables.forEach(h=>{let m=h.hasAttribute("data-drag-source"),y=Sl(h,i);(p||y)&&!m?h.setAttribute("disabled",""):h.removeAttribute("disabled")})}saveResponse(c){let p=this.getResponse,h=c??(typeof p=="function"?p.call(this):void 0),m=Array.isArray(h)?h:typeof h=="string"?[h]:(this.cacheInteractiveElements(),Io(this.trackedDroppables,i));this._response=m,this._internals.setFormValue(JSON.stringify(this._response)),this.dispatchEvent(new CustomEvent("qti-interaction-response",{bubbles:!0,composed:!0,detail:{responseIdentifier:this.responseIdentifier,response:m}})),this.requestUpdate()}reset(c=!0){this.trackedDroppables.forEach(p=>{Array.from(p.querySelectorAll(i)).forEach(m=>m.remove()),p.tagName==="QTI-SIMPLE-ASSOCIABLE-CHOICE"&&p.removeAttribute("data-has-drop")}),this.trackedDraggables.forEach(p=>{let h=p.getAttribute("identifier");h&&this.restoreOriginalInInventory(h)}),this.resetDragState(),this.cacheInteractiveElements(),this._response=[],this._internals.setFormValue(JSON.stringify(this._response)),c&&this.saveResponse()}validate(){let c=Ci(this.trackedDroppables,i),p=this.maxAssociations>0&&c>=this.maxAssociations,h=this.maxAssociations>0&&c>this.maxAssociations,m=this.minAssociations>0&&c<this.minAssociations,y="",v=!0;h?(y=this.getFirstMessageAttribute(["data-max-associations-message","data-max-selections-message"])||this.dataset.maxAssociationsMessage||this.dataset.maxSelectionsMessage||`You've selected too many associations. Maximum allowed is ${this.maxAssociations}.`,v=!1):p&&this._dropBlockedDueToMax&&this.shouldTreatBlockedMaxAsInvalid()?(y=this.getFirstMessageAttribute(["data-max-associations-message","data-max-selections-message"])||this.dataset.maxAssociationsMessage||this.dataset.maxSelectionsMessage||`You've selected too many associations. Maximum allowed is ${this.maxAssociations}.`,v=!1):m?(y=this.getFirstMessageAttribute(["data-min-associations-message","data-min-selections-message"])||this.dataset.minAssociationsMessage||this.dataset.minSelectionsMessage||`Please select at least ${this.minAssociations} ${this.minAssociations===1?"association":"associations"}.`,v=!1,this._dropBlockedDueToMax=!1):this._dropBlockedDueToMax=!1;let w=this.trackedDroppables[0]??this.trackedDraggables[0]??this;return this._internals.setValidity(v?{}:{customError:!0},y,w),v}reportValidity(){let c=this._internals.reportValidity(),p=this.shadowRoot?.querySelector("#validation-message");return p&&(c?(p.textContent="",p.style.display="none"):(p.textContent=this._internals.validationMessage,p.style.setProperty("display","block","important"))),c}}return d([b({attribute:!1,type:Object})],s.prototype,"configuration",2),d([b({type:Number,reflect:!0,attribute:"min-associations"})],s.prototype,"minAssociations",2),d([b({type:Number,reflect:!0,attribute:"max-associations"})],s.prototype,"maxAssociations",1),d([b({type:Boolean,attribute:"disable-animations"})],s.prototype,"disableAnimations",1),d([b({type:Boolean,attribute:"auto-size-dropzones"})],s.prototype,"autoSizeDropzones",2),s};var Mo=class{getInsertPosition(i,e,t,r,o){let s=i.indexOf(t);if(s===-1)return null;let a=t.getBoundingClientRect(),l=(o-a.top)/a.height,p=Math.min(1,Math.max(0,l))>.5;return{index:s,placeAfter:p}}};var Rl=new Mo;var rd={borderStyle:"2px dashed",borderColor:"var(--qti-drop-placeholder, #c1c1c1)",background:"transparent",transitionDuration:150};function Ei(){return{placeholder:null,lastHoverTarget:null,lastPlacement:null,sortContainer:null}}function Ro(n){n.placeholder?.remove(),n.placeholder=null,n.lastHoverTarget=null,n.lastPlacement=null,n.sortContainer=null}function _o(n,i,e={}){let t={...rd,...e},r=document.createElement("div");return r.setAttribute("data-drop-placeholder","true"),r.style.width=`${i.width}px`,r.style.height=`${i.height}px`,r.style.margin=window.getComputedStyle(n).margin,r.style.boxSizing="border-box",r.style.border=`${t.borderStyle} ${t.borderColor}`,r.style.borderRadius=getComputedStyle(n).borderRadius,r.style.background=t.background,r.style.transition=`transform ${t.transitionDuration}ms ease`,r.style.pointerEvents="none",r}function Hs(n,i){for(let e of i)if(e.contains(n)&&e!==n)return e;return null}var Ce=(n,i='[qti-draggable="true"]')=>{class e extends n{constructor(){super(...arguments);this.#e=null;this.#t=Ei();this.#r={hoveredSlot:null,originalPositions:new Map};this.#i=new Set;this.allowReorder=!0;this.sortablePlaceholderConfig={};this.sortableAnimationConfig={duration:150,easing:"ease"}}#e;#t;#r;#i;get isDraggingFromSlot(){return this.#e!==null}findContainingDroppable(o){return Hs(o,this.trackedDroppables)}#o(o){return o.querySelector(i)}#s(o){let s=this.#n(o);return s===0||s>1}#n(o){let s=parseInt(o.getAttribute("match-max")||"1",10);return Number.isNaN(s)?1:s}#a(o){return o.querySelectorAll(i).length}#c(o){let s=this.#n(o);return s===0?!1:this.#a(o)>=s}#d(){this.#r={hoveredSlot:null,originalPositions:new Map}}#l(o){if(!this.#e||o===this.#e){this.#u();return}if(this.#r.hoveredSlot===o)return;this.#u();let s=this.#o(o);if(!s){this.#t.placeholder&&o.appendChild(this.#t.placeholder),this.#r.hoveredSlot=o;return}if(this.#s(o)){if(this.#c(o)){this.#t.placeholder&&this.#e&&this.#e.appendChild(this.#t.placeholder),this.#r.hoveredSlot=null;return}this.#t.placeholder&&o.appendChild(this.#t.placeholder),this.#r.hoveredSlot=o;return}let l=ut([s]);this.#r.originalPositions.set(s,o),this.#t.placeholder&&this.#t.placeholder.parentElement&&this.#t.placeholder.remove(),this.#e.appendChild(s),this.#t.placeholder&&o.appendChild(this.#t.placeholder),this.#r.hoveredSlot=o,mt(l,this.sortableAnimationConfig)}#u(){if(this.#r.originalPositions.size===0&&this.#r.hoveredSlot===null)return;let o=Array.from(this.#r.originalPositions.keys()),s=o.length>0?ut(o):null;for(let[a,l]of this.#r.originalPositions)l.appendChild(a);this.#t.placeholder&&this.#e&&this.#e.appendChild(this.#t.placeholder),s&&mt(s,this.sortableAnimationConfig),this.#r.originalPositions.clear(),this.#r.hoveredSlot=null}initiateDrag(o,s,a,l,...c){this.#e=null,this.#t=Ei(),this.#d();let p=this.findContainingDroppable(o);if(p&&this.allowReorder){this.#e=p,this.#t.sortContainer=p;let m=o.getBoundingClientRect();this.#t.placeholder=_o(o,m,this.sortablePlaceholderConfig);let y=o.getAttribute("slot");y&&this.#t.placeholder.setAttribute("slot",y),this.#t.placeholder.style.visibility="hidden",p.appendChild(this.#t.placeholder),this.trackedDroppables.forEach(v=>{if(v!==p&&v.hasAttribute("disabled")){if(this.#s(v)&&this.#c(v))return;v.removeAttribute("disabled"),this.#i.add(v)}})}let[h]=c;super.initiateDrag(o,s,a,l,h)}cleanupSortableState(o=!0){if(o)for(let[s,a]of this.#r.originalPositions)a.appendChild(s);this.#t.placeholder&&this.#t.placeholder.remove(),Ro(this.#t),this.#i.clear(),this.#e=null,this.#d()}onSortableDragMove(o,s){if(!this.isDraggingFromSlot)return;let a=gr(this.trackedDroppables,o,s,this.dragState.dragClone,this.collisionDetectionAlgorithm);a?this.#l(a):this.#u()}handleDragMove(o,s){Object.getPrototypeOf(e.prototype).handleDragMove?.call(this,o,s),this.onSortableDragMove(o,s)}allowDrop(o,s){return this.isDraggingFromSlot&&this.trackedDroppables.includes(s)?this.#s(s)?!this.#c(s):!0:this.isDraggingFromSlot&&this.trackedDragContainers.includes(s)?!0:super.allowDrop(o,s)}handleDrop(o,s){super.handleDrop(o,s),this.cleanupSortableState(!1)}handleInvalidDrop(o){this.cleanupSortableState(),super.handleInvalidDrop(o)}}return e};var _l=S`
|
|
4032
|
+
${this.marker?x`<div id="label">${this.marker}</div>`:O}
|
|
4033
|
+
<slot part="slot"></slot>`}};d([g({type:String,attribute:"template-identifier"})],ht.prototype,"templateIdentifier",2),d([g({type:String,attribute:"show-hide"})],ht.prototype,"showHide",2),d([g({type:Boolean,converter:{fromAttribute:e=>e==="true",toAttribute:e=>String(e)}})],ht.prototype,"fixed",2),d([g({type:String,attribute:!1})],ht.prototype,"marker",2);customElements.define("qti-simple-choice",ht);var{AbortController:He,AbortSignal:qs,WeakMap:xp,WeakRef:qp,Window:Dc,reportError:ro=console.log}=globalThis,ft=s=>s&&s.defaultView!==null&&s.defaultView.document===s&&(s.defaultView.top===s.defaultView||ft(s.defaultView.parent.document)),Gt=()=>!!Dc&&globalThis instanceof Dc,ws=Symbol("unset"),[Nc,wp]=(()=>{function s(w,f,m=!0){Object.defineProperty(w,f,{...Object.getOwnPropertyDescriptor(w,f),enumerable:m})}let r="try"in Promise?Promise.try.bind(Promise):(w,...f)=>new Promise(m=>m(w(...f))),e="withResolvers"in Promise?Promise.withResolvers.bind(Promise):()=>{let w,f;return{promise:new Promise((b,q)=>(w=b,f=q)),resolve:w,reject:f}};function t(w,f){let m=f.call(w);if(m===null||typeof m!="object")throw new TypeError("Iterator is not an object");return m}let i=new xp,n={next(...w){let f=this,m=i.get(f);if(!m?.syncIteratorRecord)throw new TypeError("AsyncFromSyncIteratorPrototype.next called on invalid object");let{syncIteratorRecord:b}=m;return r(()=>b.next(...w))},return(...w){let f=this,m=i.get(f);if(!m?.syncIteratorRecord)throw new TypeError("AsyncFromSyncIteratorPrototype.return called on invalid object");let{syncIteratorRecord:b}=m;return r(()=>b.return?b.return(...w):{value:void 0,done:!0})},throw(...w){let f=this,m=i.get(f);if(!m?.syncIteratorRecord)throw new TypeError("AsyncFromSyncIteratorPrototype.throw called on invalid object");let{syncIteratorRecord:b}=m;return r(()=>{if(!b.throw)throw b.return(),new TypeError("no throw method");return b.throw(...w)})}};function o(w){let f=Object.create(n);return i.set(f,{syncIteratorRecord:w}),f}function a(w,f){let m;if(f){if(m=w[Symbol.asyncIterator],m==null){if(m=w[Symbol.iterator],m==null)throw new TypeError("Object is not async iterable");let b=t(w,m);return o(b)}}else m=w[Symbol.iterator];if(m==null)throw new TypeError("Object is not iterable");return t(w,m)}let l="any"in qs?qs.any.bind(qs):w=>{let f=new He;for(let m of w)if(m.aborted)return f.abort(m.reason),f.signal;for(let m of w)m.addEventListener("abort",()=>{f.abort(m.reason)},{signal:f.signal});return f.signal},c=w=>l(w.filter(Boolean));class p{constructor({next:f,error:m,complete:b}={}){i.set(this,{next:f,error:m,complete:b})}next(f){let{next:m}=i.get(this)||{};m&&m(f)}error(f){let{error:m}=i.get(this)||{};m?m(f):ro(f)}complete(){let{complete:f}=i.get(this)||{};f&&f()}}function u(w,f){let m=i.get(w);if(m?.active){m.active=!1,m.subscriptionController.abort(f);for(let b of m.teardowns.reverse()){if(Gt()&&!ft(document))return;try{b()}catch(q){ro(q)}}}}function h(w,f,m={}){if(Gt()&&!ft(document))return;let b;typeof f=="function"?b=new p({next:f}):f&&!(f instanceof p)?b=new p(f):b=f||new p;let q=i.get(w),A=q.weakSubscriber?.deref();if(A?.active){let T=A,_=i.get(T);_.observers.add(b),m.signal&&(m.signal.aborted?_.observers.delete(b):m.signal.addEventListener("abort",()=>{let N=i.get(T);N?.active&&(N.observers.delete(b),N.observers.size==0&&u(T,m.signal.reason))}));return}let S=new y(b);if(q.weakSubscriber=new qp(S),"signal"in m&&(m.signal.aborted?u(S,m.signal.reason):m.signal.addEventListener("abort",()=>{let T=i.get(S);T?.active&&(T.observers.delete(b),T.observers.size==0&&u(S,m.signal.reason))})),q.subscribeCallback)try{q.subscribeCallback(S)}catch(T){S.error(T)}}class y{get[Symbol.toStringTag](){return"Subscriber"}constructor(f=null){if(!(f instanceof p))throw new TypeError("Illegal constructor");i.set(this,{active:!0,observers:new Set([f]),teardowns:[],subscriptionController:new He})}next(f){if(!(this instanceof y))throw new TypeError("illegal invocation");if(!arguments.length)throw new TypeError("too few arguments");let m=i.get(this);if(!m?.active||Gt()&&!ft(document))return;let b=new Set(m.observers);for(let q of b)q.next(f)}error(f){if(!(this instanceof y))throw new TypeError("illegal invocation");if(!arguments.length)throw new TypeError("too few arguments");let m=i.get(this);if(!m?.active){ro(f);return}if(Gt()&&!ft(document))return;u(this,f);let b=new Set(m.observers);for(let q of b)q.error(f)}complete(){if(!(this instanceof y))throw new TypeError("illegal invocation");let f=i.get(this);if(!f?.active||Gt()&&!ft(document))return;u(this);let m=new Set(f.observers);for(let b of m)b.complete()}addTeardown(f){if(!(this instanceof y))throw new TypeError("illegal invocation");if(typeof f!="function")throw new TypeError("Parameter 1 is not of type 'Function'");if(Gt()&&!ft(document))return;let m=i.get(this);m?.active?m.teardowns.push(f):f()}get active(){if(!(this instanceof y))throw new TypeError("illegal invocation");return!!i.get(this)?.active}get signal(){if(!(this instanceof y))throw new TypeError("illegal invocation");if(!i.has(this)){let f=new He;return f.abort(),f.signal}return i.get(this).subscriptionController.signal}}s(y.prototype,"next"),s(y.prototype,"error"),s(y.prototype,"complete"),s(y.prototype,"addTeardown"),s(y.prototype,"active"),s(y.prototype,"signal");class v{get[Symbol.toStringTag](){return"Observable"}constructor(f){if(!f)throw new TypeError("1 argument required but 0 present");i.set(this,{weakSubscriber:null,subscribeCallback:f})}static from(f){if(f===null||typeof f!="object")throw new TypeError("Observable.from only accepts objects");if(f instanceof v)return f;if(typeof(Symbol.asyncIterator in f&&f[Symbol.asyncIterator])=="function"){let A=function(S,T){if(S.signal.aborted)return;let _;try{let N=T.next();_=Promise.resolve(N)}catch(N){_=Promise.reject(N)}_.then(N=>{if(N===null||typeof N!="object"){S.error(new TypeError("Not an IteratorResult."));return}try{({done:q}=N)}catch(z){S.error(z);return}if(q){S.complete();return}let H;try{H=N.value}catch(z){S.error(z);return}S.next(H),A(S,T)},N=>{S.error(N)})},q=!1;return new v(S=>{if(S.signal.aborted)return;let T;try{T=a(f,!0)}catch(N){S.error(N);return}let _=T;S.signal.aborted||(S.signal.addEventListener("abort",()=>{if(typeof _.return!="function"||q)return;r(()=>_.return(S.signal.reason)).then(H=>{if(H===null||typeof H!="object")throw new TypeError("Iterator .return() must return an Object")})}),A(S,_))})}if(typeof(Symbol.iterator in f&&f[Symbol.iterator])=="function")return new v(q=>{if(q.signal.aborted)return;let A;try{A=a(f,!1)}catch(_){q.error(_);return}let S=!1,T=A;if(!q.signal.aborted)for(q.signal.addEventListener("abort",()=>{if(typeof T.return!="function"||S)return;let _=T.return();if(_===null||typeof _!="object")throw new TypeError("Iterator .return() must return an Object")});;)try{let _=T.next();if({done:S}=_,S){q.complete();return}if(q.next(_.value),q.signal.aborted)break}catch(_){q.error(_);break}});if(f instanceof Promise||typeof f.then=="function")return new v(q=>{f.then(A=>{q.next(A),q.complete()},A=>{q.error(A)})});throw new TypeError("Could not convert value to Observable")}subscribe(f=null,m={}){if(!(this instanceof v))throw new TypeError("illegal invocation");h(this,f,m)}takeUntil(f){if(!(this instanceof v))throw new TypeError("illegal invocation");let m=this,b=v.from(f);return new v(q=>{let A=new p({next(){q.complete()},error(){q.complete()}}),S={signal:q.signal};if(h(b,A,S),!q.active)return;let T=new p({next(_){q.next(_)},error(_){q.error(_)},complete(){q.complete()}});h(m,T,S)})}map(f){if(!(this instanceof v))throw new TypeError("illegal invocation");if(typeof f!="function")throw new TypeError("Parameter 1 is not of type 'Function'");let m=this;return new v(b=>{let q=0,A=new p({next(T){let _;try{_=f(T,q)}catch(N){b.error(N);return}q+=1,b.next(_)},error(T){b.error(T)},complete(){b.complete()}}),S={signal:b.signal};h(m,A,S)})}inspect(f={}){let m=null,b=null,q=null,A=null,S=null;typeof f=="function"?b=f:f&&typeof f=="object"&&("subscribe"in f&&(m=f.subscribe),"next"in f&&(b=f.next),"error"in f&&(q=f.error),"complete"in f&&(A=f.complete),"abort"in f&&(S=f.abort));let T=this;return new v(_=>{if(m!==null)try{m()}catch(F){_.error(F);return}let N=()=>{try{S!==null&&S(_.signal.reason)}catch(F){ro(F)}};_.signal.addEventListener("abort",N,{once:!0});let H=new p({next(F){if(b!==null)try{b(F)}catch(le){_.signal.removeEventListener("abort",N),_.error(le);return}_.next(F)},error(F){if(_.signal.removeEventListener("abort",N),q!==null)try{q(F)}catch(le){_.error(le);return}_.error(F)},complete(){if(_.signal.removeEventListener("abort",N),A!==null)try{A()}catch(F){_.error(F);return}_.complete()}}),z={signal:_.signal};h(T,H,z)})}filter(f){if(!(this instanceof v))throw new TypeError("illegal invocation");if(typeof f!="function")throw new TypeError("Parameter 1 is not of type 'Function'");let m=this;return new v(b=>{let q=0,A=new p({next(T){let _=!1;try{_=f(T,q)}catch(N){b.error(N);return}q+=1,_&&b.next(T)},error(T){b.error(T)},complete(){b.complete()}}),S={signal:b.signal};h(m,A,S)})}take(f){if(!(this instanceof v))throw new TypeError("illegal invocation");let m=this;return new v(b=>{let q=f;if(q==0)return b.complete();let A=new p({next(T){b.next(T),q-=1,q==0&&b.complete()},error(T){b.error(T)},complete(){b.complete()}}),S={signal:b.signal};h(m,A,S)})}drop(f){if(!(this instanceof v))throw new TypeError("illegal invocation");let m=this;return new v(b=>{let q=f,A=new p({next(T){if(q>0)return q-=1;q==0&&b.next(T)},error(T){b.error(T)},complete(){b.complete()}}),S={signal:b.signal};h(m,A,S)})}flatMap(f){if(!(this instanceof v))throw new TypeError("illegal invocation");if(typeof f!="function")throw new TypeError("Parameter 1 is not of type 'Function'");let m=this;return new v(b=>{let q=0,A=!1,S=[];function T(z){let F;try{F=f(z,q)}catch(Fe){return b.error(Fe)}q+=1;let le;try{le=v.from(F)}catch(Fe){return b.error(Fe)}let Lo=new p({next(Fe){b.next(Fe)},error(Fe){b.error(Fe)},complete(){if(S.length){let Fe=S.shift();T(Fe)}else _=!1,A&&b.complete()}}),Re={signal:b.signal};h(le,Lo,Re)}let _=!1,N=new p({next(z){_?S.push(z):(_=!0,T(z))},error(z){b.error(z)},complete(){A=!0,!_&&!S.length&&b.complete()}}),H={signal:b.signal};h(m,N,H)})}switchMap(f){if(!(this instanceof v))throw new TypeError("illegal invocation");if(typeof f!="function")throw new TypeError("Parameter 1 is not of type 'Function'");let m=this;return new v(b=>{let q=0,A=!1,S=null;function T(H){let z;try{z=f(H,q)}catch(Re){return b.error(Re)}q+=1;let F;try{F=v.from(z)}catch(Re){return b.error(Re)}let le=new p({next(Re){b.next(Re)},error(Re){b.error(Re)},complete(Re){A?b.complete():S=null}}),Lo={signal:c([S.signal,b.signal])};h(F,le,Lo)}let _=new p({next(H){S&&S.abort(),S=new He,T(H)},error(H){b.error(H)},complete(){A=!0,S||b.complete()}}),N={signal:b.signal};h(m,_,N)})}catch(f){if(!(this instanceof v))throw new TypeError("illegal invocation");if(typeof f!="function")throw new TypeError("Parameter 1 is not of type 'Function'");let m=this;return new v(q=>{let A=new p({next(T){q.next(T)},error(T){let _;try{_=f(T)}catch(F){q.error(F);return}let N;try{N=v.from(_)}catch(F){q.error(F);return}let H=new p({next(F){q.next(F)},error(F){q.error(F)},complete(){q.complete()}}),z={signal:q.signal};h(N,H,z)},complete(){q.complete()}}),S={signal:q.signal};h(m,A,S)})}finally(f){if(!(this instanceof v))throw new TypeError("illegal invocation");if(typeof f!="function")throw new TypeError("Parameter 1 is not of type 'Function'");let m=this;return new v(b=>{b.addTeardown(f);let q=new p({next(S){b.next(S)},error(S){b.error(S)},complete(){b.complete()}}),A={signal:b.signal};h(m,q,A)})}toArray(f={}){if(!(this instanceof v))throw new TypeError("illegal invocation");let{promise:m,resolve:b,reject:q}=e();if(f.signal){if(f.signal.aborted)return Promise.reject(f.signal.reason);f.signal.addEventListener("abort",()=>{q(f.signal.reason)})}let A=[],S=new p({next(T){A.push(T)},error(T){q(T)},complete(){b(A)}});return h(this,S,f),m}forEach(f,m={}){if(!(this instanceof v))throw new TypeError("illegal invocation");if(typeof f!="function")throw new TypeError("Parameter 1 is not of type 'Function'");let{promise:b,resolve:q,reject:A}=e(),S=new He,T={signal:c([S.signal,m.signal])};if(T.signal.aborted)return A(T.signal.reason),b;T.signal.addEventListener("abort",()=>{A(T.signal.reason)});let _=0,N=new p({next(H){try{f(H,_)}catch(z){A(z),S.abort(z)}_+=1},error(H){A(H)},complete(){q()}});return h(this,N,T),b}every(f,m={}){if(!(this instanceof v))throw new TypeError("illegal invocation");if(typeof f!="function")throw new TypeError("Parameter 1 is not of type 'Function'");let{promise:b,resolve:q,reject:A}=e(),S=new He,T={signal:c([S.signal,m.signal])};if(T.signal.aborted)return A(T.signal.reason),b;T.signal.addEventListener("abort",()=>{A(T.signal.reason)});let _=0,N=new p({next(H){let z=!1;try{z=f(H,_)}catch(F){A(F),S.abort(F)}_+=1,z||(q(!1),S.abort())},error(H){A(H)},complete(){q(!0)}});return h(this,N,T),b}first(f={}){if(!(this instanceof v))throw new TypeError("illegal invocation");let{promise:m,resolve:b,reject:q}=e(),A=new He,S={signal:c([A.signal,f.signal])};if(S.signal.aborted)return q(S.signal.reason),m;S.signal.addEventListener("abort",()=>{q(S.signal.reason)});let T=new p({next(_){b(_),A.abort()},error(_){q(_)},complete(){q(new RangeError("No values in Observable"))}});return h(this,T,S),m}last(f={}){if(!(this instanceof v))throw new TypeError("illegal invocation");let{promise:m,resolve:b,reject:q}=e();if(f.signal){if(f.signal.aborted)return q(f.signal.reason),m;f.signal.addEventListener("abort",()=>{q(f.signal.reason)})}let A=null,S=!1,T=new p({next(_){S=!0,A=_},error(_){q(_)},complete(){S?b(A):q(new RangeError("No values in Observable"))}});return h(this,T,f),m}find(f,m={}){if(!(this instanceof v))throw new TypeError("illegal invocation");if(typeof f!="function")throw new TypeError("Parameter 1 is not of type 'Function'");let{promise:b,resolve:q,reject:A}=e(),S=new He,T={signal:c([S.signal,m.signal])};if(T.signal.aborted)return A(T.signal.reason),b;T.signal.addEventListener("abort",()=>{A(T.signal.reason)});let _=0,N=new p({next(H){let z=!1;try{z=f(H,_)}catch(F){A(F),S.abort(F)}_+=1,z&&(q(H),S.abort())},error(H){A(H)},complete(){q()}});return h(this,N,T),b}some(f,m={}){if(!(this instanceof v))throw new TypeError("illegal invocation");if(typeof f!="function")throw new TypeError("Parameter 1 is not of type 'Function'");let{promise:b,resolve:q,reject:A}=e(),S=new He,T={signal:c([S.signal,m.signal])};if(T.signal.aborted)return A(T.signal.reason),b;T.signal.addEventListener("abort",()=>{A(T.signal.reason)});let _=0,N=new p({next(H){let z=!1;try{z=f(H,_)}catch(F){A(F),S.abort(F)}_+=1,z&&(q(!0),S.abort())},error(H){A(H)},complete(){q(!1)}});return h(this,N,T),b}reduce(f,m,b={}){if(!(this instanceof v))throw new TypeError("illegal invocation");if(typeof f!="function")throw new TypeError("Parameter 1 is not of type 'Function'");let{promise:q,resolve:A,reject:S}=e(),T=new He,_={signal:c([T.signal,b.signal])};if(_.signal.aborted)return S(_.signal.reason),q;_.signal.addEventListener("abort",()=>{S(_.signal.reason)},{once:!0});let N=0,H=arguments.length>1?m:ws,z=new p({next(F){if(H===ws){H=F,N++;return}try{let le=f(H,F,N);N++,H=le}catch(le){S(le),T.abort(le);return}},error(F){S(F)},complete(){H!==ws?A(H):S(new TypeError("no initial value provided and no values emitted"))}});return h(this,z,_),q}}return s(v.prototype,"subscribe"),[v,y]})();function Oc(){return typeof globalThis.Observable=="function"}function Hc(){Object.defineProperties(globalThis,{Observable:{value:Nc,configurable:!0,writable:!0},Subscriber:{value:wp,configurable:!0,writable:!0}}),EventTarget.prototype.when=function(s,r={}){if(Gt()&&!ft(document))return;let e=this;return new Nc(t=>{if(!e||t.signal.aborted)return;let i=n=>{t.next(n)};e.addEventListener(s,i,{capture:r.capture||!1,passive:r.passive,once:!1,signal:t.signal})})}}function Cs(s,r,e){let t=s.filter(i=>!i.hasAttribute("disabled"));for(let i of t){let n=i.getBoundingClientRect();if(r>=n.left&&r<=n.right&&e>=n.top&&e<=n.bottom)return i}return null}function Fc(s,r,e,t){if(!t)return null;let i=s.filter(o=>!o.hasAttribute("disabled")),n=t.getBoundingClientRect();for(let o of i){let a=o.getBoundingClientRect();if(!(n.right<a.left||n.left>a.right||n.bottom<a.top||n.top>a.bottom))return o}return null}function Uc(s,r,e,t){let i=s.filter(c=>!c.hasAttribute("disabled"));if(i.length===0)return null;let n,o;if(t){let c=t.getBoundingClientRect();n=c.left+c.width/2,o=c.top+c.height/2}else n=r,o=e;let a=null,l=1/0;for(let c of i){let p=c.getBoundingClientRect(),u=p.left+p.width/2,h=p.top+p.height/2,y=Math.sqrt(Math.pow(n-u,2)+Math.pow(o-h,2));y<l&&(l=y,a=c)}return a}function Bc(s,r,e,t){let i=s.filter(l=>!l.hasAttribute("disabled"));if(i.length===0)return null;let n;if(t){let l=t.getBoundingClientRect();n=[{x:l.left,y:l.top},{x:l.right,y:l.top},{x:l.left,y:l.bottom},{x:l.right,y:l.bottom}]}else n=[{x:r,y:e},{x:r,y:e},{x:r,y:e},{x:r,y:e}];let o=null,a=1/0;for(let l of i){let c=l.getBoundingClientRect(),p=[{x:c.left,y:c.top},{x:c.right,y:c.top},{x:c.left,y:c.bottom},{x:c.right,y:c.bottom}],u=0,h=0;for(let v of n)for(let w of p){let f=Math.sqrt(Math.pow(v.x-w.x,2)+Math.pow(v.y-w.y,2));u+=f,h++}let y=u/h;y<a&&(a=y,o=l)}return o}function Cp(s,r,e,t,i){let n=i&&i.length>0?s.filter(m=>i.includes(m)):s.filter(m=>m.tagName==="SLOT"&&m.hasAttribute("part")&&m.getAttribute("part")?.includes("drags")),a=s.filter(m=>!n.includes(m));if(n.length===0&&a.length===0)return null;let l;if(t){let m=t.getBoundingClientRect();l=[{x:m.left,y:m.top},{x:m.right,y:m.top},{x:m.left,y:m.bottom},{x:m.right,y:m.bottom}]}else l=[{x:r,y:e},{x:r,y:e},{x:r,y:e},{x:r,y:e}];let c=m=>{let b=m.getBoundingClientRect(),q=[{x:b.left,y:b.top},{x:b.right,y:b.top},{x:b.left,y:b.bottom},{x:b.right,y:b.bottom}],A=0,S=0;for(let T of l)for(let _ of q){let N=Math.sqrt(Math.pow(T.x-_.x,2)+Math.pow(T.y-_.y,2));A+=N,S++}return A/S},p=null,u=1/0;for(let m of n){let b=c(m);b<u&&(u=b,p=m)}let h=null,y=1/0;for(let m of a){let b=c(m);b<y&&(y=b,h=m)}if(p&&t){let m=t.getBoundingClientRect(),b=p.getBoundingClientRect(),q=m.left+m.width/2,A=m.top+m.height/2;if(q>=b.left&&q<=b.right&&A>=b.top&&A<=b.bottom)return p}let w=t?.getAttribute("data-drag-origin")==="droppable"?.85:1.5;return p&&h?u<=y*w?p:h:p||h}function zc(s){switch(s){case"pointerWithin":return Cs;case"rectangleIntersection":return Fc;case"closestCenter":return Uc;case"closestCorners":return Bc;case"closestCornersWithInventoryPriority":return Cp;default:return Cs}}function Ir(s,r,e,t,i="pointerWithin",n){return zc(i)(s,r,e,t,n)}function gt(s,r){let e=s.composedPath?s.composedPath():[s.target];for(let t of e)if(t instanceof HTMLElement&&t.tagName!=="SLOT"){if(t.matches(r)||t.hasAttribute("qti-draggable"))return t;let i=t.closest(r)||t.closest('[qti-draggable="true"]');if(i)return i}return null}function io(s,r){let e=[];return s.forEach(t=>{let i=[];t.tagName.toLowerCase()==="slot"?i=t.assignedElements({flatten:!0}).filter(a=>a.getAttribute("identifier")===r):i=Array.from(t.querySelectorAll(`[identifier="${r}"]`)),e.push(...i)}),e}function jc(s,r){let e=s.find(i=>i.getAttribute("identifier")===r);if(!e)return 1;let t=e.getAttribute("match-max");return t?parseInt(t,10)||0:1}function Wc(s,r){let e=parseInt(s.getAttribute("match-max")||"1",10),t=Number.isNaN(e)?1:e;if(t===0)return!1;let i=s.querySelectorAll(r),n=s.querySelectorAll('[qti-draggable="true"]');return Math.max(i.length,n.length)>=t}function Fi(s,r){return s.reduce((e,t)=>{let i=t.querySelectorAll(r).length,n=t.querySelectorAll('[qti-draggable="true"]').length;return e+Math.max(i,n)},0)}function no(s,r){return s.map(e=>{let i=Array.from(e.querySelectorAll(r)).map(o=>o.getAttribute("identifier")).filter(o=>!!o),n=e.getAttribute("identifier");return i.map(o=>`${o} ${n}`)}).flat()}function Gc(s,r,e,t=typeof window<"u"?window:null){if(!s.length||!r.length||!t)return;let i=0,n=0;s.forEach(c=>{let p=c.getBoundingClientRect();i=Math.max(i,p.height),n=Math.max(n,p.width)});let o=r[0].parentElement,a=r[0].tagName==="QTI-SIMPLE-ASSOCIABLE-CHOICE",l=r[0].tagName==="QTI-GAP";if(a&&o){let c;if(o.clientWidth>0){let p=t.getComputedStyle(o),u=parseFloat(p.paddingLeft),h=parseFloat(p.paddingRight);c=o.clientWidth-u-h}else c=Math.min(t.innerWidth*.8,600);o.style.gridTemplateColumns=`repeat(auto-fit, minmax(calc(min(${c}px, ${n}px + 2 * var(--qti-dropzone-padding, 0.5rem))), 1fr))`}r.forEach(c=>{c.style.minHeight=`${i}px`,(a||l)&&(c.style.minWidth=`${n}px`);let p=c.shadowRoot?.querySelector('slot[part="dropslot"]');p&&(p.style.minHeight=`${i}px`)}),e.forEach(c=>{c.style.minHeight=`${i}px`})}Oc()||Hc();var Xc=new WeakSet;function Ep(s){!s||Xc.has(s)||(s.addEventListener("touchmove",()=>{},{capture:!1,passive:!1}),Xc.add(s))}var oo=(s,r,e,t='slot[part="drags"]',i="pointerWithin")=>{class n extends s{constructor(){super(...arguments);this.trackedDraggables=[];this.trackedDroppables=[];this.trackedDragContainers=[];this.allDropzones=[];this.collisionDetectionAlgorithm=i;this.dragState={dragging:!1,dragSource:null,dragClone:null,startOffset:{x:0,y:0},currentTarget:null,sourceDroppable:null,inputType:null};this.subscriptions=[];this.dragSubscriptions=[];this.lastPointerDownAt=0;this.lastTouchStartAt=0}connectedCallback(){super.connectedCallback(),Ep(this.ownerDocument?.defaultView),this.setupDragDrop()}disconnectedCallback(){super.disconnectedCallback(),this.cleanup()}async setupDragDrop(){await this.updateComplete,this.cacheInteractiveElements(),this.afterCache(),this.setupDragObservables()}afterCache(){}cacheInteractiveElements(){let l=(m,b)=>Array.from(b?.querySelectorAll(m)??[]),c=l(r,this),p=l(r,this.shadowRoot),u=l('[qti-draggable="true"]:not([data-drag-clone])',this),h=l('[qti-draggable="true"]:not([data-drag-clone])',this.shadowRoot);this.trackedDraggables=Array.from(new Set([...c,...p,...u,...h]));let y=l(e,this),v=l(e,this.shadowRoot);this.trackedDroppables=Array.from(new Set([...y,...v]));let w=l(t,this),f=l(t,this.shadowRoot);this.trackedDragContainers=Array.from(new Set([...w,...f])),this.allDropzones=[...this.trackedDroppables,...this.trackedDragContainers],this.trackedDraggables.forEach(m=>{m.style.cursor="grab",m.style.userSelect="none",m.style.touchAction="none",m.style.webkitUserSelect="none",m.style.webkitTouchCallout="none",m.setAttribute("qti-draggable","true"),m.setAttribute("tabindex","0")})}setupDragObservables(){let l=this.shadowRoot;if(!l){console.error("\u274C [Observable DnD] No shadow root found!");return}let c=l.when("pointerdown").filter(v=>{if(!v.isTrusted)return!1;let w=gt(v,r),f=this.disabled||this.readonly,m=w?.hasAttribute("disabled")||w?.getAttribute("aria-disabled")==="true",b=Date.now()-this.lastTouchStartAt<50;return w&&v.isPrimary!==!1&&v.button===0&&!f&&!m&&!b}).subscribe(v=>{this.lastPointerDownAt=Date.now();let w=gt(v,r);if(!w){console.warn("\u26A0\uFE0F [Observable DnD] No draggable target found");return}v.pointerType==="touch"&&(v.preventDefault(),v.stopPropagation());let f=v.isTrusted?v.pointerType==="touch"?100:10:0;if(this.dragState.activationTimeout&&clearTimeout(this.dragState.activationTimeout),f===0){this.dragState.dragging||this.initiateDrag(w,v.clientX,v.clientY,v.pointerType,"pointer",v.pointerId,v.isTrusted);return}let m=()=>{this.dragState.activationTimeout&&(clearTimeout(this.dragState.activationTimeout),this.dragState.activationTimeout=void 0),document.removeEventListener("pointerup",m,!0),document.removeEventListener("pointercancel",m,!0)};document.addEventListener("pointerup",m,{once:!0,capture:!0}),document.addEventListener("pointercancel",m,{once:!0,capture:!0}),this.dragState.activationTimeout=window.setTimeout(()=>{this.dragState.activationTimeout=void 0,document.removeEventListener("pointerup",m,!0),document.removeEventListener("pointercancel",m,!0),this.dragState.dragging||this.initiateDrag(w,v.clientX,v.clientY,v.pointerType,"pointer",v.pointerId,v.isTrusted)},f)}),p=l.when("mousedown").filter(v=>{let w=gt(v,r),f=this.disabled||this.readonly,m=w?.hasAttribute("disabled")||w?.getAttribute("aria-disabled")==="true",b=v.button===0,q=Date.now()-this.lastPointerDownAt<50;return w&&b&&!f&&!m&&!q}).subscribe(v=>{let w=gt(v,r);!w||this.dragState.dragging||(v.preventDefault(),this.initiateDrag(w,v.clientX,v.clientY,"mouse","mouse",void 0,v.isTrusted))}),u=l.when("touchstart").filter(v=>{let w=gt(v,r),f=this.disabled||this.readonly,m=w?.hasAttribute("disabled")||w?.getAttribute("aria-disabled")==="true",b=!!(v.touches?.[0]||v.changedTouches?.[0]),q=Date.now()-this.lastPointerDownAt<50;return w&&b&&!f&&!m&&!q}).subscribe(v=>{let w=gt(v,r),f=v.touches?.[0]||v.changedTouches?.[0];!w||!f||this.dragState.dragging||(this.lastTouchStartAt=Date.now(),v.preventDefault(),v.stopPropagation(),this.initiateDrag(w,f.clientX,f.clientY,"touch","touch",void 0,v.isTrusted))}),h={dragging:!1,dragElement:null,dragIndex:0,dropIndex:0,dropElement:null},y=l.when("keydown").subscribe(v=>{let w=this.trackedDraggables.filter(m=>m.style.opacity!=="0"),f=[...this.trackedDroppables,...this.trackedDragContainers];if(h.dragging)switch(v.code){case"ArrowRight":case"ArrowDown":{v.preventDefault();let m=(h.dropIndex+1)%f.length;h={...h,dropIndex:m,dropElement:f[m]};break}case"ArrowLeft":case"ArrowUp":{v.preventDefault();let m=(h.dropIndex-1+f.length)%f.length;h={...h,dropIndex:m,dropElement:f[m]};break}case"Space":case"Enter":case"Tab":{v.preventDefault(),h.dragElement&&h.dropElement&&(this.allowDrop(h.dragElement,h.dropElement)||this.trackedDragContainers.includes(h.dropElement)?this.handleDrop(h.dragElement,h.dropElement):this.handleInvalidDrop(h.dragElement)),this.trackedDraggables.forEach(m=>m.removeAttribute("data-keyboard-dragging")),this.saveResponse(),h={dragging:!1,dragElement:null,dragIndex:0,dropIndex:0,dropElement:null};break}case"Escape":{v.preventDefault(),this.trackedDraggables.forEach(m=>m.removeAttribute("data-keyboard-dragging")),h={dragging:!1,dragElement:null,dragIndex:0,dropIndex:0,dropElement:null};break}}else{let m=gt(v,r),b=this.disabled||this.readonly,q=m?.hasAttribute("disabled")||m?.getAttribute("aria-disabled")==="true";m&&["Space","Enter"].includes(v.code)&&!b&&!q&&(v.preventDefault(),m.setAttribute("data-keyboard-dragging","true"),h={dragging:!0,dragElement:m,dragIndex:w.indexOf(m),dropIndex:0,dropElement:f[0]})}this.allDropzones.forEach(m=>m.removeAttribute("hover")),h.dragging&&h.dropElement&&(h.dropElement.setAttribute("hover",""),h.dropElement.hasAttribute("tabindex")&&h.dropElement.getAttribute("tabindex")!=="-1"&&h.dropElement.focus())});this.subscriptions.push(c,p,u,y)}initiateDrag(l,c,p,u,h="pointer",y,v){if(this.dragState.dragging){console.warn("\u26A0\uFE0F [Observable DnD] Already dragging, ignoring initiateDrag");return}if(l.hasAttribute("data-drag-clone")){console.warn("\u26A0\uFE0F [Observable DnD] Attempted to drag visual clone, ignoring");return}let w=this.trackedDroppables.some(b=>b.contains(l)),f=this.trackedDroppables.find(b=>b.contains(l))||null,m=l.getBoundingClientRect();this.dragState={dragging:!0,dragSource:l,dragClone:this.createDragClone(l,m),startOffset:{x:c-m.left,y:p-m.top},currentTarget:null,sourceDroppable:f,inputType:u,pointerId:y,startedFromTrustedEvent:v,initialCoordinates:{x:c,y:p}},w?(this.dragState.dragClone?.setAttribute("data-drag-origin","droppable"),l.remove(),this.cacheInteractiveElements(),f&&f.setAttribute("data-drag-source","true")):(this.dragState.dragClone?.setAttribute("data-drag-origin","inventory"),l.style.opacity="0",l.style.pointerEvents="none"),this.updateClonePosition(c,p),this.activateAllDroppables(),this.setupMoveObservables(u,h)}setupMoveObservables(l,c="pointer"){if(l==="touch"){if(c==="pointer")try{let A=this.dragState.dragSource,S=this.dragState.pointerId;A&&S!==void 0&&A.setPointerCapture&&A.setPointerCapture(S)}catch{}let b=A=>{A.cancelable&&(A.preventDefault(),c==="pointer"&&A.stopPropagation())};document.addEventListener("touchmove",b,{passive:!1,capture:!0}),document.addEventListener("touchstart",b,{passive:!1,capture:!0}),document.addEventListener("touchend",b,{passive:!1,capture:!0}),document.addEventListener("gesturestart",b,{passive:!1}),document.addEventListener("gesturechange",b,{passive:!1}),document.addEventListener("gestureend",b,{passive:!1});let q=()=>{if(document.removeEventListener("touchmove",b,{capture:!0}),document.removeEventListener("touchstart",b,{capture:!0}),document.removeEventListener("touchend",b,{capture:!0}),document.removeEventListener("gesturestart",b),document.removeEventListener("gesturechange",b),document.removeEventListener("gestureend",b),c==="pointer")try{let A=this.dragState.dragSource,S=this.dragState.pointerId;A&&S!==void 0&&A.releasePointerCapture&&A.releasePointerCapture(S)}catch{}};this.dragState.touchCleanup=q}let p=c==="mouse"?"mousemove":c==="touch"?"touchmove":"pointermove",u=c==="mouse"?"mouseup":c==="touch"?"touchend":"pointerup",h=b=>{let q=this.dragState.startedFromTrustedEvent;return q===void 0||b.isTrusted===q},y=document.when(p).takeUntil(document.when(u)).subscribe({next:b=>{if(h(b)){if(b.preventDefault(),b.stopPropagation(),c==="touch"){let q=b.touches?.[0]||b.changedTouches?.[0];if(!q)return;this.handleDragMove(q.clientX,q.clientY);return}if(c==="mouse"){let q=b;if(typeof q.buttons=="number"&&(q.buttons&1)!==1)return}this.handleDragMove(b.clientX,b.clientY)}}}),v=document.when(u).subscribe({next:b=>{h(b)&&(b.preventDefault(),b.stopPropagation(),this.handleDragEnd())}}),w=c==="touch"?document.when("touchcancel").subscribe({next:b=>{h(b)&&this.handleDragEnd()}}):c==="mouse"?null:document.when("pointercancel").subscribe({next:b=>{h(b)&&this.handleDragEnd()}}),f=document.when("keydown").filter(b=>b.key==="Escape").subscribe({next:b=>{h(b)&&this.handleDragEnd()}}),m=[y,v,f];w&&m.push(w),this.dragSubscriptions.push(...m)}handleDragMove(l,c){if(!this.dragState.dragging||!this.dragState.dragClone)return;this.updateClonePosition(l,c);let p=Ir(this.allDropzones,l,c,this.dragState.dragClone,this.collisionDetectionAlgorithm,this.trackedDragContainers),u=Date.now(),h=u-(this.dragState.lastTargetChangeTime||0);p!==this.dragState.currentTarget&&(p===null||h>=50)&&(this.allDropzones.forEach(v=>v.removeAttribute("hover")),p&&p.setAttribute("hover",""),this.dragState.currentTarget=p,this.dragState.lastTargetChangeTime=u)}handleDragEnd(){if(!this.dragState.dragging)return;let{dragSource:l,dragClone:c,currentTarget:p,sourceDroppable:u}=this.dragState,h=p;if(!h&&c){let f=c.getBoundingClientRect(),m=this.dragState.initialCoordinates?.x??f.left+f.width/2,b=this.dragState.initialCoordinates?.y??f.top+f.height/2;h=Ir(this.allDropzones,m,b,c,this.collisionDetectionAlgorithm,this.trackedDragContainers)}let y=h?.hasAttribute("disabled")&&h.hasAttribute("data-drag-source");!!l&&!!h&&this.allowDrop(l,h)&&(!h.hasAttribute("disabled")||y)&&l&&h?this.handleDrop(l,h):this.handleInvalidDrop(l),c&&c.remove(),this.dragState.touchCleanup&&this.dragState.touchCleanup(),this.resetDragState(),this.deactivateAllDroppables(),this.saveResponse(),u&&u.removeAttribute("data-drag-source"),this.cacheInteractiveElements();let w=this.checkAllMaxAssociations;typeof w=="function"&&w.call(this)}allowDrop(l,c){return this.trackedDroppables.includes(c)||this.trackedDragContainers.includes(c)}handleInvalidDrop(l){l&&(l.style.opacity="1.0",l.style.pointerEvents="auto")}createDragClone(l,c){let p=l.cloneNode(!0),u=window.getComputedStyle(l);for(let h=0;h<u.length;h++){let y=u[h];p.style.setProperty(y,u.getPropertyValue(y))}return p.style.position="fixed",p.style.width=`${c.width}px`,p.style.height=`${c.height}px`,p.style.zIndex="9999",p.style.pointerEvents="none",p.style.touchAction="none",p.style.userSelect="none",p.style.opacity="0.8",p.removeAttribute("qti-draggable"),p.removeAttribute("tabindex"),p.setAttribute("data-drag-clone","true"),document.body.appendChild(p),p}updateClonePosition(l,c){if(!this.dragState.dragClone)return;let{startOffset:p}=this.dragState,u=l-p.x,h=c-p.y;this.dragState.dragClone.style.left=`${u}px`,this.dragState.dragClone.style.top=`${h}px`}activateAllDroppables(){this.setInternalsState("--dragzone-enabled",!0),this.setInternalsState("--dragzone-active",!0),this.allDropzones.forEach(l=>{l.setAttribute("enabled",""),l.setAttribute("active","")})}deactivateAllDroppables(){this.setInternalsState("--dragzone-enabled",!1),this.setInternalsState("--dragzone-active",!1),this.allDropzones.forEach(l=>{l.removeAttribute("enabled"),l.removeAttribute("active"),l.removeAttribute("hover")})}resetDragState(){if(this.dragState.activationTimeout&&clearTimeout(this.dragState.activationTimeout),this.dragState.touchCleanup)try{this.dragState.touchCleanup()}catch(l){console.warn("\u26A0\uFE0F [Observable DnD] Error during touch cleanup:",l)}this.dragSubscriptions.forEach(l=>{try{l&&typeof l.unsubscribe=="function"&&l.unsubscribe()}catch(c){console.warn("\u26A0\uFE0F [Observable DnD] Error unsubscribing:",c)}}),this.dragSubscriptions=[],this.dragState={dragging:!1,dragSource:null,dragClone:null,startOffset:{x:0,y:0},currentTarget:null,sourceDroppable:null,inputType:null,pointerId:void 0,startedFromTrustedEvent:void 0,touchCleanup:void 0}}setInternalsState(l,c){let p=this._internals;p?.states&&(c?p.states.add(l):p.states.delete(l))}cleanup(){this.subscriptions.forEach(l=>{try{l.unsubscribe()}catch{}}),this.subscriptions=[],this.dragState.dragClone&&this.dragState.dragClone.remove(),this.resetDragState()}}return n};var Qc={duration:250,easing:"ease",fill:"both"};function Es(s){let r=s.getBoundingClientRect();return{left:r.left,top:r.top,width:r.width,height:r.height}}function bt(s){let r=new Map;return s.forEach(e=>{r.set(e,Es(e))}),r}function Yc(s,r){return{deltaX:s.left-r.left,deltaY:s.top-r.top,deltaW:s.width/r.width,deltaH:s.height/r.height}}function Jc(s,r,e={}){let t=Es(s),{deltaX:i,deltaY:n,deltaW:o,deltaH:a}=Yc(r,t);if(i===0&&n===0&&o===1&&a===1)return null;let{duration:l,easing:c,fill:p}={...Qc,...e};return s.animate([{transformOrigin:"top left",transform:`translate(${i}px, ${n}px) scale(${o}, ${a})`},{transformOrigin:"top left",transform:"none"}],{duration:l,easing:c,fill:p})}function vt(s,r={}){let e=new Map;return s.forEach((t,i)=>{if(!(i instanceof HTMLElement))return;let n=Jc(i,t,r);n&&e.set(i,n)}),e}var Ae=(s,r,e,t='slot[part="drags"]',i="closestCornersWithInventoryPriority")=>{let n=oo(s,r,e,t,i);class o extends n{constructor(){super(...arguments);this.configuration={copyStylesDragClone:!0,dragCanBePlacedBack:!0,dragOnClick:!1};this.minAssociations=1;this._maxAssociations=0;this._maxAssociationsDefaultApplied=!1;this._response=[];this._dropBlockedDueToMax=!1;this.flipAnimationConfig={duration:200,easing:"ease"};this._enableFlipAnimations=!0;this.autoSizeDropzones=!1}get maxAssociations(){if(!this._maxAssociationsDefaultApplied){this._maxAssociationsDefaultApplied=!0;let c=this.tagName?.toLowerCase()||"";(c==="qti-graphic-gap-match-interaction"||c==="qti-gap-match-interaction")&&!this.hasAttribute("max-associations")&&this._maxAssociations===0&&(this._maxAssociations=1)}return this._maxAssociations}set maxAssociations(c){let p=this._maxAssociations;this._maxAssociations=c,this.requestUpdate("maxAssociations",p)}set disableAnimations(c){this._enableFlipAnimations=!c}get disableAnimations(){return!this._enableFlipAnimations}get enableFlipAnimations(){return this._enableFlipAnimations}get response(){let c=this.getResponse,p=typeof c=="function"?c.call(this):void 0;return(Array.isArray(p)?p:(this.cacheInteractiveElements(),no(this.trackedDroppables,r))).join(",")}set response(c){if(Array.isArray(c)){let p=this.getValue,u=typeof p=="function"?p.call(this,c):c,h=Array.isArray(u)?u:typeof u=="string"&&u.length>0?[u]:[];this.reset(!1),h.forEach(w=>this.placeResponse(w));let y=this.getResponse,v=typeof y=="function"?y.call(this):void 0;this._response=Array.isArray(v)?v:(this.cacheInteractiveElements(),no(this.trackedDroppables,r))}else this._response=typeof c=="string"&&c.length>0?[c]:[];this._internals.setFormValue(JSON.stringify(this._response))}afterCache(){this.applyConfiguredChoicesContainerWidth(),this.updateMinDimensionsForDropZones()}applyConfiguredChoicesContainerWidth(){let c=this.dataset.choicesContainerWidth;c&&this.trackedDroppables.forEach(p=>{p.style.width=`${c}px`,p.style.boxSizing="border-box"})}shouldTreatBlockedMaxAsInvalid(){return!0}shouldReturnToInventoryOnInventoryDrop(){return!1}getFirstMessageAttribute(c){for(let u of c){let h=this.getAttribute(u);if(h&&h.trim().length>0)return h}let p=c.map(u=>u.toLowerCase());for(let u of Array.from(this.attributes))if(p.includes(u.name.toLowerCase())&&u.value.trim().length>0)return u.value;return null}allowDrop(c,p){if(this.trackedDragContainers.includes(p))return!0;let u=this.trackedDroppables.includes(p),h=p.hasAttribute("disabled"),y=p.hasAttribute("data-drag-source");return u&&(!h||y)}handleDrop(c,p){let u=this.dragState.dragClone?.getBoundingClientRect();this.dropDraggableInDroppable(c,p,u);let h=c.getAttribute("identifier");h&&this.updateInventoryBasedOnMatchMax(h);let y=Fi(this.trackedDroppables,r);this.maxAssociations>0&&y>this.maxAssociations&&(this._dropBlockedDueToMax=!0,this.validate(),this.reportValidity())}handleInvalidDrop(c){let p=this.dragState.sourceDroppable,u=this.dragState.currentTarget,h=!u,y=this.trackedDragContainers[0]||null;if(!c)return;p&&h&&y&&this.configuration.dragCanBePlacedBack!==!1?this.dropDraggableInDroppable(c,y):p&&this.trackedDroppables.includes(p)?this.dropDraggableInDroppable(c,p):c.style.opacity==="0"&&(this.restoreInventoryItem(c),this.cacheInteractiveElements(),this.checkAllMaxAssociations());let v=Fi(this.trackedDroppables,r),w=this.maxAssociations>0&&v>=this.maxAssociations,f=!!u&&u.hasAttribute("disabled")&&!u.hasAttribute("data-drag-source");this._dropBlockedDueToMax=f&&w,this.validate(),this.reportValidity()}updateMinDimensionsForDropZones(){this.trackedDraggables.length!==0&&Gc(this.trackedDraggables,this.trackedDroppables,this.trackedDragContainers)}restoreInventoryItem(c){c.style.opacity="1.0",c.style.display="",c.style.position="",c.style.pointerEvents="auto"}placeResponse(c){let[p,...u]=c.split(" ").reverse(),h=this.trackedDroppables.find(y=>y.getAttribute("identifier")===p);h&&u.forEach(y=>{if(!y)return;let w=io(this.trackedDragContainers,y).at(0)||this.trackedDraggables.find(f=>f.getAttribute("identifier")===y);w&&this.dropDraggableInDroppable(w,h)})}dropDraggableInDroppable(c,p,u){if(this.trackedDragContainers.includes(p)){if(!this.dragState.sourceDroppable){if(this.shouldReturnToInventoryOnInventoryDrop()){this.returnToInventory(c),this._dropBlockedDueToMax=!1,this.validate();return}this.restoreInventoryItem(c),this.cacheInteractiveElements(),this.checkAllMaxAssociations(),this._dropBlockedDueToMax=!1,this.validate();return}let A=c.getAttribute("identifier");c.remove(),A&&this.restoreOriginalInInventory(A),this.cacheInteractiveElements(),this.checkAllMaxAssociations(),this._dropBlockedDueToMax=!1,this.validate();return}let y=parseInt(p.getAttribute("match-max")||"1",10),v=Number.isNaN(y)?1:y,w=v===0||v>1,f=Array.from(p.querySelectorAll('[qti-draggable="true"]')),m=this.enableFlipAnimations&&f.length>0?bt(f):null;if(!w){let A=p.querySelector(r)||p.querySelector('[qti-draggable="true"]');if(A){let S=A.getAttribute("identifier");A.remove(),S&&this.restoreOriginalInInventory(S)}}let b=c.cloneNode(!0);b.removeAttribute("style"),b.removeAttribute("data-keyboard-dragging"),b.setAttribute("qti-draggable","true"),b.setAttribute("tabindex","0"),p.tagName==="SLOT"?b.setAttribute("slot",p.getAttribute("name")||""):p.tagName==="QTI-SIMPLE-ASSOCIABLE-CHOICE"?(b.setAttribute("slot","qti-simple-associable-choice"),p.appendChild(b),p.setAttribute("data-has-drop","true")):p.appendChild(b),m&&this.enableFlipAnimations&&vt(m,this.flipAnimationConfig),u&&this.enableFlipAnimations&&requestAnimationFrame(()=>{let A=b.getBoundingClientRect(),S=u.left-A.left,T=u.top-A.top;(S!==0||T!==0)&&b.animate([{transform:`translate(${S}px, ${T}px)`,opacity:.8},{transform:"translate(0, 0)",opacity:1}],{duration:this.flipAnimationConfig.duration||200,easing:this.flipAnimationConfig.easing||"ease",fill:"both"})});let q=c.getAttribute("identifier");q&&this.updateInventoryBasedOnMatchMax(q),this.cacheInteractiveElements(),this.checkAllMaxAssociations()}returnToInventory(c){let p=c.getAttribute("identifier");p&&(this.trackedDroppables.forEach(u=>{Array.from(u.querySelectorAll(`[identifier="${p}"][qti-draggable="true"]`)).forEach(y=>{y.remove(),u.tagName==="QTI-SIMPLE-ASSOCIABLE-CHOICE"&&u.removeAttribute("data-has-drop")})}),this.restoreOriginalInInventory(p)),this.cacheInteractiveElements(),this.checkAllMaxAssociations()}restoreOriginalInInventory(c){let p=io(this.trackedDragContainers,c),u=[];this.trackedDragContainers.forEach(y=>{u.push(...Array.from(y.querySelectorAll('[qti-draggable="true"]')))});let h=this.enableFlipAnimations&&u.length>0?bt(u):null;p.forEach(y=>{y.style.opacity="1.0",y.style.pointerEvents="auto",y.style.display="",y.style.visibility="visible",y.style.setProperty("opacity","1.0","important"),y.style.setProperty("pointer-events","auto","important")}),h&&this.enableFlipAnimations&&vt(h,this.flipAnimationConfig)}updateInventoryBasedOnMatchMax(c){let p=io(this.trackedDragContainers,c),u=jc(this.trackedDraggables,c),h=this.trackedDroppables.reduce((y,v)=>{let w=v.querySelectorAll(`[identifier="${c}"]`);return y+w.length},0);p.forEach(y=>{u!==0&&h>=u?(y.style.opacity="0.0",y.style.pointerEvents="none"):(y.style.opacity="1.0",y.style.pointerEvents="auto")})}checkAllMaxAssociations(){let c=Fi(this.trackedDroppables,r),p=this.maxAssociations>0&&c>=this.maxAssociations;this.trackedDroppables.forEach(u=>{let h=u.hasAttribute("data-drag-source"),y=Wc(u,r);(p||y)&&!h?u.setAttribute("disabled",""):u.removeAttribute("disabled")})}saveResponse(c){let p=this.getResponse,u=c??(typeof p=="function"?p.call(this):void 0),h=Array.isArray(u)?u:typeof u=="string"?[u]:(this.cacheInteractiveElements(),no(this.trackedDroppables,r));this._response=h,this._internals.setFormValue(JSON.stringify(this._response)),this.dispatchEvent(new CustomEvent("qti-interaction-response",{bubbles:!0,composed:!0,detail:{responseIdentifier:this.responseIdentifier,response:h}})),this.requestUpdate()}reset(c=!0){this.trackedDroppables.forEach(p=>{Array.from(p.querySelectorAll(r)).forEach(h=>h.remove()),p.tagName==="QTI-SIMPLE-ASSOCIABLE-CHOICE"&&p.removeAttribute("data-has-drop")}),this.trackedDraggables.forEach(p=>{let u=p.getAttribute("identifier");u&&this.restoreOriginalInInventory(u)}),this.resetDragState(),this.cacheInteractiveElements(),this._response=[],this._internals.setFormValue(JSON.stringify(this._response)),c&&this.saveResponse()}validate(){let c=Fi(this.trackedDroppables,r),p=this.maxAssociations>0&&c>=this.maxAssociations,u=this.maxAssociations>0&&c>this.maxAssociations,h=this.minAssociations>0&&c<this.minAssociations,y="",v=!0;u?(y=this.getFirstMessageAttribute(["data-max-associations-message","data-max-selections-message"])||this.dataset.maxAssociationsMessage||this.dataset.maxSelectionsMessage||`You've selected too many associations. Maximum allowed is ${this.maxAssociations}.`,v=!1):p&&this._dropBlockedDueToMax&&this.shouldTreatBlockedMaxAsInvalid()?(y=this.getFirstMessageAttribute(["data-max-associations-message","data-max-selections-message"])||this.dataset.maxAssociationsMessage||this.dataset.maxSelectionsMessage||`You've selected too many associations. Maximum allowed is ${this.maxAssociations}.`,v=!1):h?(y=this.getFirstMessageAttribute(["data-min-associations-message","data-min-selections-message"])||this.dataset.minAssociationsMessage||this.dataset.minSelectionsMessage||`Please select at least ${this.minAssociations} ${this.minAssociations===1?"association":"associations"}.`,v=!1,this._dropBlockedDueToMax=!1):this._dropBlockedDueToMax=!1;let w=this.trackedDroppables[0]??this.trackedDraggables[0]??this;return this._internals.setValidity(v?{}:{customError:!0},y,w),v}reportValidity(){let c=this._internals.reportValidity(),p=this.shadowRoot?.querySelector("#validation-message");return p&&(c?(p.textContent="",p.style.display="none"):(p.textContent=this._internals.validationMessage,p.style.setProperty("display","block","important"))),c}}return d([g({attribute:!1,type:Object})],o.prototype,"configuration",2),d([g({type:Number,reflect:!0,attribute:"min-associations"})],o.prototype,"minAssociations",2),d([g({type:Number,reflect:!0,attribute:"max-associations"})],o.prototype,"maxAssociations",1),d([g({type:Boolean,attribute:"disable-animations"})],o.prototype,"disableAnimations",1),d([g({type:Boolean,attribute:"auto-size-dropzones"})],o.prototype,"autoSizeDropzones",2),o};var so=class{getInsertPosition(r,e,t,i,n){let o=r.indexOf(t);if(o===-1)return null;let a=t.getBoundingClientRect(),l=(n-a.top)/a.height,p=Math.min(1,Math.max(0,l))>.5;return{index:o,placeAfter:p}}};var Kc=new so;var Sp={borderStyle:"2px dashed",borderColor:"var(--qti-drop-placeholder, #c1c1c1)",background:"transparent",transitionDuration:150};function Ui(){return{placeholder:null,lastHoverTarget:null,lastPlacement:null,sortContainer:null}}function ao(s){s.placeholder?.remove(),s.placeholder=null,s.lastHoverTarget=null,s.lastPlacement=null,s.sortContainer=null}function lo(s,r,e={}){let t={...Sp,...e},i=document.createElement("div");return i.setAttribute("data-drop-placeholder","true"),i.style.width=`${r.width}px`,i.style.height=`${r.height}px`,i.style.margin=window.getComputedStyle(s).margin,i.style.boxSizing="border-box",i.style.border=`${t.borderStyle} ${t.borderColor}`,i.style.borderRadius=getComputedStyle(s).borderRadius,i.style.background=t.background,i.style.transition=`transform ${t.transitionDuration}ms ease`,i.style.pointerEvents="none",i}function Ss(s,r){for(let e of r)if(e.contains(s)&&e!==s)return e;return null}var Te=(s,r='[qti-draggable="true"]')=>{class e extends s{constructor(){super(...arguments);this.#e=null;this.#t=Ui();this.#r={hoveredSlot:null,originalPositions:new Map};this.#i=new Set;this.allowReorder=!0;this.sortablePlaceholderConfig={};this.sortableAnimationConfig={duration:150,easing:"ease"}}#e;#t;#r;#i;get isDraggingFromSlot(){return this.#e!==null}findContainingDroppable(n){return Ss(n,this.trackedDroppables)}#n(n){return n.querySelector(r)}#o(n){let o=this.#s(n);return o===0||o>1}#s(n){let o=parseInt(n.getAttribute("match-max")||"1",10);return Number.isNaN(o)?1:o}#a(n){return n.querySelectorAll(r).length}#c(n){let o=this.#s(n);return o===0?!1:this.#a(n)>=o}#d(){this.#r={hoveredSlot:null,originalPositions:new Map}}#l(n){if(!this.#e||n===this.#e){this.#u();return}if(this.#r.hoveredSlot===n)return;this.#u();let o=this.#n(n);if(!o){this.#t.placeholder&&n.appendChild(this.#t.placeholder),this.#r.hoveredSlot=n;return}if(this.#o(n)){if(this.#c(n)){this.#t.placeholder&&this.#e&&this.#e.appendChild(this.#t.placeholder),this.#r.hoveredSlot=null;return}this.#t.placeholder&&n.appendChild(this.#t.placeholder),this.#r.hoveredSlot=n;return}let l=bt([o]);this.#r.originalPositions.set(o,n),this.#t.placeholder&&this.#t.placeholder.parentElement&&this.#t.placeholder.remove(),this.#e.appendChild(o),this.#t.placeholder&&n.appendChild(this.#t.placeholder),this.#r.hoveredSlot=n,vt(l,this.sortableAnimationConfig)}#u(){if(this.#r.originalPositions.size===0&&this.#r.hoveredSlot===null)return;let n=Array.from(this.#r.originalPositions.keys()),o=n.length>0?bt(n):null;for(let[a,l]of this.#r.originalPositions)l.appendChild(a);this.#t.placeholder&&this.#e&&this.#e.appendChild(this.#t.placeholder),o&&vt(o,this.sortableAnimationConfig),this.#r.originalPositions.clear(),this.#r.hoveredSlot=null}initiateDrag(n,o,a,l,...c){this.#e=null,this.#t=Ui(),this.#d();let p=this.findContainingDroppable(n);if(p&&this.allowReorder){this.#e=p,this.#t.sortContainer=p;let h=n.getBoundingClientRect();this.#t.placeholder=lo(n,h,this.sortablePlaceholderConfig);let y=n.getAttribute("slot");y&&this.#t.placeholder.setAttribute("slot",y),this.#t.placeholder.style.visibility="hidden",p.appendChild(this.#t.placeholder),this.trackedDroppables.forEach(v=>{if(v!==p&&v.hasAttribute("disabled")){if(this.#o(v)&&this.#c(v))return;v.removeAttribute("disabled"),this.#i.add(v)}})}let[u]=c;super.initiateDrag(n,o,a,l,u)}cleanupSortableState(n=!0){if(n)for(let[o,a]of this.#r.originalPositions)a.appendChild(o);this.#t.placeholder&&this.#t.placeholder.remove(),ao(this.#t),this.#i.clear(),this.#e=null,this.#d()}onSortableDragMove(n,o){if(!this.isDraggingFromSlot)return;let a=Ir(this.trackedDroppables,n,o,this.dragState.dragClone,this.collisionDetectionAlgorithm);a?this.#l(a):this.#u()}handleDragMove(n,o){Object.getPrototypeOf(e.prototype).handleDragMove?.call(this,n,o),this.onSortableDragMove(n,o)}allowDrop(n,o){return this.isDraggingFromSlot&&this.trackedDroppables.includes(o)?this.#o(o)?!this.#c(o):!0:this.isDraggingFromSlot&&this.trackedDragContainers.includes(o)?!0:super.allowDrop(n,o)}handleDrop(n,o){super.handleDrop(n,o),this.cleanupSortableState(!1)}handleInvalidDrop(n){this.cleanupSortableState(),super.handleInvalidDrop(n)}}return e};var Zc=E`
|
|
4024
4034
|
:host {
|
|
4025
4035
|
display: block; /* necessary to calculate scaling position */
|
|
4026
4036
|
}
|
|
@@ -4068,7 +4078,7 @@ div.full-correct-response-inline {
|
|
|
4068
4078
|
rgb(0 0 0 / 0%) calc(50% + 1px)
|
|
4069
4079
|
);
|
|
4070
4080
|
}
|
|
4071
|
-
`;var
|
|
4081
|
+
`;var Mp=Ae(V,"qti-simple-associable-choice",".dl","slot[name='qti-simple-associable-choice']","pointerWithin"),Bi=class extends Te(Mp,'[qti-draggable="true"]'){constructor(){super();this._childrenMap=[];this._registerChoiceHandler=this._registerChoice.bind(this),this.addEventListener("register-qti-simple-associable-choice",this._registerChoiceHandler)}static{this.styles=Zc}_registerChoice(e){let t=e.composedPath()[0];if(this.shadowRoot?.contains(t))return;let i=t;this._childrenMap.includes(i)||(this._childrenMap=[...this._childrenMap,i])}getResponse(){let e=Math.ceil(this._childrenMap.length/2),t=[];for(let i=0;i<e;i++){let n=this.shadowRoot?.querySelector(`.dl[identifier="droplist${i}_left"]`),o=this.shadowRoot?.querySelector(`.dl[identifier="droplist${i}_right"]`),a=n?.querySelector('[qti-draggable="true"]')?.getAttribute("identifier"),l=o?.querySelector('[qti-draggable="true"]')?.getAttribute("identifier");a&&l&&t.push(`${a} ${l}`)}return t}getValue(e){return e?.flatMap((t,i)=>{let n=t.split(" ");return n.length!==2?[]:[`${n[0]} droplist${i}_left`,`${n[1]} droplist${i}_right`]})??[]}render(){return x` <slot name="prompt"></slot>
|
|
4072
4082
|
<slot name="qti-simple-associable-choice"></slot>
|
|
4073
4083
|
<div part="drop-container">
|
|
4074
4084
|
${this._childrenMap.length>0&&Array.from(Array(Math.ceil(this._childrenMap.length/2)).keys()).map((e,t)=>x`<div part="associables-container">
|
|
@@ -4077,7 +4087,7 @@ div.full-correct-response-inline {
|
|
|
4077
4087
|
</div>`)}
|
|
4078
4088
|
|
|
4079
4089
|
<div role="alert" part="message" id="validation-message"></div>
|
|
4080
|
-
</div>`}updated(e){super.updated(e),e.has("_childrenMap")&&this.cacheInteractiveElements()}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("register-qti-simple-associable-choice",this._registerChoiceHandler)}};d([
|
|
4090
|
+
</div>`}updated(e){super.updated(e),e.has("_childrenMap")&&this.cacheInteractiveElements()}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("register-qti-simple-associable-choice",this._registerChoiceHandler)}};d([M()],Bi.prototype,"_childrenMap",2);customElements.define("qti-associate-interaction",Bi);var yt=(s,r)=>{class e extends s{constructor(){super(...arguments);this._choiceElements=[];this._mutationObserver=null;this._validationMessageShown=!1;this.minChoices=0;this.maxChoices=1;this._handleDisabledChange=(n,o)=>{this._choiceElements.forEach(a=>a.disabled=o)};this._handleReadonlyChange=(n,o)=>{this._choiceElements.forEach(a=>a.readonly=o)};this.response="";this._handleValueChange=()=>{this._internals.setFormValue(this.value),this._updateChoiceSelection()}}_handleMaxChoicesChange(n,o){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(n){this.maxChoices>1&&(typeof n=="string"||n===null)?this.response=n?n.toString().split(","):[]:this.response=n||""}toggleInternalCorrectResponse(n){let o=this.correctResponse;if(o){let a=Array.isArray(o)?o:[o];this._choiceElements.forEach(l=>{l.internals.states.delete("correct-response"),l.internals.states.delete("incorrect-response"),n&&a.length>0&&(a.includes(l.identifier)?l.internals.states.add("correct-response"):l.internals.states.add("incorrect-response"))})}}toggleCandidateCorrection(n){let o=this.correctResponse;if(!o)return;let a=Array.isArray(o)?o:[o],l=this.response,c=Array.isArray(l)?l:l?[l]:[];this._choiceElements.forEach(p=>{p.internals.states.delete("candidate-correct"),p.internals.states.delete("candidate-incorrect"),n&&c.includes(p.identifier)&&(a.includes(p.identifier)?p.internals.states.add("candidate-correct"):p.internals.states.add("candidate-incorrect"))}),super.toggleCandidateCorrection(n)}connectedCallback(){super.connectedCallback(),this.addEventListener(`activate-${r}`,this._choiceElementSelectedHandler),this._mutationObserver=new MutationObserver(()=>this._syncChoicesFromDOM()),this._mutationObserver.observe(this,{childList:!0,subtree:!0}),this._syncChoicesFromDOM()}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener(`activate-${r}`,this._choiceElementSelectedHandler),this._mutationObserver&&(this._mutationObserver.disconnect(),this._mutationObserver=null)}_syncChoicesFromDOM(){let n=new Set(this._choiceElements);this._choiceElements=Array.from(this.querySelectorAll(r)),this._choiceElements.forEach(a=>{n.has(a)||(this.disabled&&(a.disabled=!0),a.readonly=this.readonly,a.internals&&!a.internals.ariaChecked&&(a.internals.ariaChecked="false"),this._setInputType(a))});let o=new Set(this._choiceElements.map(a=>a.identifier));if(Array.isArray(this.response)){let a=this.response.filter(l=>o.has(l));a.length!==this.response.length&&(this.response=a)}else this.response&&!o.has(this.response)&&(this.response="");this._updateChoiceSelection()}validate(){let o=this._choiceElements.filter(p=>this._getChoiceChecked(p)).length,a=!0,l="";this.maxChoices!==0&&o>this.maxChoices?(a=!1,l=this.dataset.maxSelectionsMessage||`Please select no more than ${this.maxChoices} ${this.maxChoices===1?"option":"options"}.`):o<this.minChoices&&(a=!1,l=this.dataset.minSelectionsMessage||`Please select at least ${this.minChoices} ${this.minChoices===1?"option":"options"}.`);let c=this._choiceElements.find(p=>this.contains(p))||this;return this._internals.setValidity(a?{}:{customError:!0},l,c),a}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.setProperty("display","block","important"),this._validationMessageShown=!0)),this._internals.validity.valid}_determineInputType(){this._choiceElements.forEach(n=>{this._setInputType(n)})}async _setInputType(n){if(this._internals.role=this.maxChoices===1?"radiogroup":null,n.internals){let o=this.maxChoices===1?"radio":"checkbox";n.internals.role=o,n.internals.states.delete(o==="radio"?"checkbox":"radio"),n.internals.states.add(o)}}_choiceElementSelectedHandler(n){this._toggleChoiceChecked(n.target),this.maxChoices===1?this._choiceElements.forEach(o=>{o.identifier!==n.detail.identifier&&this._setChoiceChecked(o,!1)}):this.maxChoices!==0&&this._configContext?.disableAfterIfMaxChoicesReached&&(this._choiceElements.filter(a=>this._getChoiceChecked(a)).length>=this.maxChoices?this._choiceElements.forEach(a=>{this._getChoiceChecked(a)||(a.disabled=!0)}):this._choiceElements.forEach(a=>a.disabled=!1)),this._handleChoiceSelection()}_setChoiceChecked(n,o){n.internals?.states&&(o?(n.internals.states.add("--checked"),n.internals.ariaChecked="true"):(n.internals.states.delete("--checked"),n.internals.ariaChecked="false"))}_getChoiceChecked(n){return n.internals.states.has("--checked")}_toggleChoiceChecked(n){let o=this._getChoiceChecked(n);this._setChoiceChecked(n,!o)}_handleChoiceSelection(){let o=this._choiceElements.filter(a=>this._getChoiceChecked(a)).map(a=>a.identifier);this.response=this.maxChoices===1?o[0]||"":o,this.validate(),this._validationMessageShown&&(this.reportValidity(),this._internals.validity.valid&&(this._validationMessageShown=!1)),this.saveResponse(this.response)}_updateChoiceSelection(){let n=Array.isArray(this.response)?this.response:[this.response];this._choiceElements.forEach(o=>{let a=n.includes(o.identifier);this._setChoiceChecked(o,a)})}}return d([Jt("#validation-message")],e.prototype,"_validationMessageElement",2),d([g({type:Number,attribute:"min-choices"})],e.prototype,"minChoices",2),d([g({type:Number,attribute:"max-choices"})],e.prototype,"maxChoices",2),d([B("maxChoices")],e.prototype,"_handleMaxChoicesChange",1),d([B("disabled",{waitUntilFirstUpdate:!0})],e.prototype,"_handleDisabledChange",2),d([B("readonly",{waitUntilFirstUpdate:!0})],e.prototype,"_handleReadonlyChange",2),d([M()],e.prototype,"response",2),d([B("response",{waitUntilFirstUpdate:!0})],e.prototype,"_handleValueChange",2),d([M(),$({context:be,subscribe:!0})],e.prototype,"_configContext",2),e};var ed=(s,r)=>{class e extends s{#e=[];#t=["qti-labels-none","qti-labels-decimal","qti-labels-lower-alpha","qti-labels-upper-alpha"];#r=["qti-labels-suffix-none","qti-labels-suffix-period","qti-labels-suffix-parenthesis"];#i=null;set class(i){this.#e=this.#n(i),this.#o()}get class(){return this.#e.join(" ")}attributeChangedCallback(i,n,o){super.attributeChangedCallback(i,n,o),i==="class"&&n!==o&&(this.class=o??"")}updated(i){super.updated(i),this.#o()}connectedCallback(){super.connectedCallback(),this.class=this.getAttribute("class")??"",this.#i=new MutationObserver(i=>{i.some(n=>n.type==="childList"||n.type==="attributes"&&n.attributeName==="style")&&this.#o()}),this.#i.observe(this,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["style"]})}disconnectedCallback(){super.disconnectedCallback(),this.#i?.disconnect(),this.#i=null}#n(i){return i?i.split(/\s+/).map(n=>n.trim()).filter(Boolean).filter((n,o,a)=>a.indexOf(n)===o):[]}#o(){let i=Array.from(this.querySelectorAll("qti-simple-choice")).map(l=>l),n=this.#s(i),o=this.#a(),a=this.#c();n.forEach((l,c)=>{l.marker=this.#d(c+1,o,a)})}#s(i){return i.map((n,o)=>{let a=Number(n.style.order);return{el:n,order:Number.isFinite(a)?a:o+1,index:o}}).sort((n,o)=>n.order-o.order||n.index-o.index).map(n=>n.el)}#a(){return this.#e.filter(i=>this.#t.includes(i)).pop()??null}#c(){return this.#e.filter(i=>this.#r.includes(i)).pop()??null}#d(i,n,o){let a=n;if(!a&&o&&o!=="qti-labels-suffix-none"&&(a="qti-labels-upper-alpha"),!a||a==="qti-labels-none")return"";let l="";switch(a){case"qti-labels-decimal":l=`${i}`;break;case"qti-labels-lower-alpha":l=this.#l(i,"lower");break;case"qti-labels-upper-alpha":l=this.#l(i,"upper");break}return o==="qti-labels-suffix-period"?`${l}.`:o==="qti-labels-suffix-parenthesis"?`${l})`:l}#l(i,n){let o=i,a="",l=n==="lower"?97:65;for(;o>0;)o-=1,a=String.fromCharCode(l+o%26)+a,o=Math.floor(o/26);return a}}return d([g({type:String,attribute:"class"})],e.prototype,"class",1),e};var td=E`
|
|
4081
4091
|
:host {
|
|
4082
4092
|
display: block;
|
|
4083
4093
|
}
|
|
@@ -4147,11 +4157,11 @@ div.full-correct-response-inline {
|
|
|
4147
4157
|
:host(.qti-orientation-vertical) ::slotted(qti-simple-choice:nth-child(even)) {
|
|
4148
4158
|
grid-row: auto;
|
|
4149
4159
|
}
|
|
4150
|
-
`;var
|
|
4160
|
+
`;var zi=class extends ed(yt(V,"qti-simple-choice"),"qti-simple-choice"){constructor(){super(...arguments);this.orientation="vertical"}static{this.styles=td}#e(){let e=this.querySelectorAll("qti-simple-choice");this.style.setProperty("--item-count",e.length.toString())}render(){return x`
|
|
4151
4161
|
<slot part="prompt" name="prompt"></slot>
|
|
4152
4162
|
<slot part="slot" @slotchange=${this.#e}></slot>
|
|
4153
4163
|
<div part="message" role="alert" id="validation-message"></div>
|
|
4154
|
-
`}};d([
|
|
4164
|
+
`}};d([g({type:String})],zi.prototype,"orientation",2);customElements.define("qti-choice-interaction",zi);var rd=E``;var As=`
|
|
4155
4165
|
const postToParentWindows = (type, data) => {
|
|
4156
4166
|
window.top.postMessage(data ? { type, data } : { type }, '*');
|
|
4157
4167
|
let w = window.parent;
|
|
@@ -4218,7 +4228,7 @@ window.CES = {
|
|
|
4218
4228
|
},
|
|
4219
4229
|
};
|
|
4220
4230
|
CES.load();
|
|
4221
|
-
`,
|
|
4231
|
+
`,_p=`
|
|
4222
4232
|
(function() {
|
|
4223
4233
|
var blobUrlReceived = null;
|
|
4224
4234
|
|
|
@@ -4262,7 +4272,7 @@ CES.load();
|
|
|
4262
4272
|
requestBlobUrl();
|
|
4263
4273
|
}
|
|
4264
4274
|
})();
|
|
4265
|
-
`,
|
|
4275
|
+
`,Je=class extends V{constructor(){super();this.#e="";this.#t=null;this.#r=null;this._errorMessage=null;this.#i=null;this.handlePostMessage=this.handlePostMessage.bind(this)}#e;#t;#r;static{this.styles=rd}#i;connectedCallback(){super.connectedCallback();let e=this.data;if(!e){let i=this.querySelector("object[data]");if(i){e=i.getAttribute("data");let n=i.getAttribute("width"),o=i.getAttribute("height");n&&this.setAttribute("width",n),o&&this.setAttribute("height",o)}}if(!e){this._errorMessage="No manifest path found (neither data attribute nor object child)";return}let t=e.startsWith("http")||e.startsWith("blob")?e:yn((this.baseItemUrl||"")+"/"+e);this.#t=new URL(t,window.location.href).toString(),fetch(t).then(i=>i.json()).then(i=>{this.manifest=i,this.setupCES()}).catch(i=>{this._errorMessage=i})}async setupCES(){await this.updateComplete;let e=this.shadowRoot?.querySelector("#pciContainer");if(!e){this._errorMessage="pciContainer iframe not found";return}e.getAttribute("src")||e.setAttribute("src","about:blank");let t=e.contentDocument??e.contentWindow?.document??null;if(t||(await new Promise(u=>e.addEventListener("load",()=>u(),{once:!0})),t=e.contentDocument??e.contentWindow?.document??null),!t){this._errorMessage="pciContainer iframe document not available";return}if(!this.manifest.script||this.manifest.script.length===0){this._errorMessage="No script found in manifest";return}if(!this.manifest.style||this.manifest.style.length===0){this._errorMessage="No style found in manifest";return}let i=this.manifest.style[0],n=this.#a(),o=await this.#l(i,n),a=o.url;if(o.baseUrl&&!this.#r&&(this.#r=o.baseUrl),!0){let u="";if(this.manifest.media&&this.manifest.media.length>0){let h=this.manifest.media[0],y=await this.#l(h,n,{returnText:!0});if(u=y.url,y.baseUrl&&!this.#r&&(this.#r=y.baseUrl),y.text){let v=y.text;if(!(v.includes("postToParentWindows")||v.includes("window.CES"))){let m="<script>"+As+"</script>",b=v.indexOf("<head>");b!==-1?v=v.slice(0,b+6)+m+v.slice(b+6):v=m+v}let f=new Blob([v],{type:"text/html"});this.#i=URL.createObjectURL(f)}}else{let h=this.data||"manifest.json",y=h.includes("/")?h.substring(0,h.lastIndexOf("/")):"",v=y?`${y}/index.html`:"index.html",w=await this.#l(v,n,{returnText:!0});if(u=w.url,w.baseUrl&&!this.#r&&(this.#r=w.baseUrl),w.text){let f=w.text;if(!(f.includes("postToParentWindows")||f.includes("window.CES"))){let q="<script>"+As+"</script>",A=f.indexOf("<head>");A!==-1?f=f.slice(0,A+6)+q+f.slice(A+6):f=q+f}let b=new Blob([f],{type:"text/html"});this.#i=URL.createObjectURL(b)}}if(u&&!this.#i)try{let h=await fetch(u);if(h.ok){let y=await h.text();if(!(y.includes("postToParentWindows")||y.includes("window.CES"))){let f="<script>"+As+"</script>",m=y.indexOf("<head>");m!==-1?y=y.slice(0,m+6)+f+y.slice(m+6):y=f+y}let w=new Blob([y],{type:"text/html"});this.#i=URL.createObjectURL(w)}else console.error(`Failed to fetch index.html: ${h.status}`)}catch(h){console.error(`Error fetching index.html: ${h}`)}}let c=`<script>${_p}</script>`;window.addEventListener("message",this.handlePostMessage);let p=`
|
|
4266
4276
|
<!DOCTYPE html>
|
|
4267
4277
|
<html>
|
|
4268
4278
|
<head>
|
|
@@ -4271,7 +4281,7 @@ CES.load();
|
|
|
4271
4281
|
</head>
|
|
4272
4282
|
<body></body>
|
|
4273
4283
|
</html>
|
|
4274
|
-
`;e.srcdoc=p}#
|
|
4284
|
+
`;e.srcdoc=p}#n(){let e=this.shadowRoot.querySelectorAll("iframe"),t=this.querySelectorAll("iframe"),i=[...e,...t];for(let n of i){let o=n.src;if(new URL(o,window.location.href).origin===window.location.origin)try{let l=n.contentDocument||n.contentWindow.document;l&&this.#o(l,i)}catch(l){console.error("Error accessing nested iframe:",l)}}return i.forEach((n,o)=>{i.indexOf(n)!==o&&i.splice(o,1)}),i}#o(e,t=[]){return e.querySelectorAll("iframe").forEach(n=>{t.push(n);let o=n.src;if(new URL(o,window.location.href).origin===window.location.origin)try{let l=n.contentDocument||n.contentWindow.document;this.#o(l,t)}catch(l){console.error("Error accessing nested iframe:",l)}else console.warn("Skipped cross-origin iframe:",o)}),t}#s(e,t){window.postMessage({type:e,data:t},"*");let i=this.#n();for(let n of i)n.contentWindow&&n.contentWindow.postMessage({type:e,data:t},"*")}handlePostMessage(e){let{type:t,data:i}=e.data;switch(t){case"setResponse":(i===null||!(Array.isArray(i)&&i.length===1&&i[0]===""))&&(this.#e=i,this.saveResponse(i));break;case"getResponse":{this.#s("responseData",this.#e);break}case"getBlobUrl":{this.#i&&(this.#s("blobUrl",this.#i),e.source&&e.source!==window&&e.source.postMessage({type:"blobUrl",data:this.#i},"*"));break}case"getMedia":{let n=this.#a(),o=this.manifest.media.map(a=>{if(a.startsWith("http")||a.startsWith("blob"))return a;let l=this.#r||n[0];return l?new URL(a,l.endsWith("/")?l:`${l}/`).toString():a});this.#s("mediaData",o);break}case"setStageHeight":console.log("setStageHeight not implemented");break}}validate(){if(!this.#e)return!1;if(Array.isArray(this.#e)){if(this.#e.length===0)return!1;for(let e of this.#e)if(e!==""&&e!==null)return!0}return!0}get response(){return this.#e||null}set response(e){if(typeof e=="string")this.#e=e,this.saveResponse(e);else if(Array.isArray(e))this.#e=e;else if(e)throw new Error("Value must be a string or an array of strings")}disconnectedCallback(){window.removeEventListener("message",this.handlePostMessage),super.disconnectedCallback()}render(){return x`<iframe
|
|
4275
4285
|
width=${this.getAttribute("width")}
|
|
4276
4286
|
height=${this.getAttribute("height")}
|
|
4277
4287
|
frameborder="0"
|
|
@@ -4282,7 +4292,7 @@ CES.load();
|
|
|
4282
4292
|
${this._errorMessage&&x`<div style="color:red">
|
|
4283
4293
|
<h1>Error</h1>
|
|
4284
4294
|
${this._errorMessage}
|
|
4285
|
-
</div>`}`}#a(){let t=[this.#r,this.baseRefUrl,this.baseItemUrl,this.#c()].filter(Boolean).map(
|
|
4295
|
+
</div>`}`}#a(){let t=[this.#r,this.baseRefUrl,this.baseItemUrl,this.#c()].filter(Boolean).map(n=>new URL(n,window.location.href).toString()),i=this.#d();return i&&t.push(i),[...new Set(t)]}#c(){return this.#t?new URL(".",this.#t).toString():null}#d(){return this.#t?new URL("..",this.#t).toString():null}async#l(e,t,i={}){if(!e)return{url:"",baseUrl:null};if(e.startsWith("http")||e.startsWith("blob"))return{url:e,baseUrl:null};for(let n of t){let o=new URL(n,window.location.href).toString(),a=new URL(e,o.endsWith("/")?o:`${o}/`).toString();try{let l=await fetch(a);if(l.ok){if(i.returnText){let c=await l.text();return{url:a,baseUrl:o,text:c}}return{url:a,baseUrl:o}}}catch{}}return{url:"",baseUrl:null}}};d([g({type:String,attribute:"data"})],Je.prototype,"data",2),d([g({type:String,attribute:"data-base-item"})],Je.prototype,"baseItemUrl",2),d([g({type:String,attribute:"data-base-ref"})],Je.prototype,"baseRefUrl",2),d([g({type:String,attribute:"id"})],Je.prototype,"id",2),d([M()],Je.prototype,"_errorMessage",2);customElements.define("qti-custom-interaction",Je);var id=E``;var xt=class extends C{constructor(){super(...arguments);this.disabled=!1;this.countAttempt=null;this.title="end attempt"}static{this.styles=id}render(){return x`<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"}}))}};d([g({type:String,attribute:"response-identifier"})],xt.prototype,"responseIdentifier",2),d([g({reflect:!0,type:Boolean})],xt.prototype,"disabled",2),d([g({type:String,attribute:"count-attempt"})],xt.prototype,"countAttempt",2),d([g({type:String})],xt.prototype,"title",2);customElements.define("qti-end-attempt-interaction",xt);var nd=E`
|
|
4286
4296
|
/* PK: display host as block, else design will be collapsed */
|
|
4287
4297
|
:host {
|
|
4288
4298
|
display: block;
|
|
@@ -4293,7 +4303,7 @@ CES.load();
|
|
|
4293
4303
|
height: 100%;
|
|
4294
4304
|
border: 0;
|
|
4295
4305
|
}
|
|
4296
|
-
`;var
|
|
4306
|
+
`;var ge=class extends V{constructor(){super(...arguments);this._rows=5;this.response=null;this._handleResponseChange=()=>{this._internals.setFormValue(this.value),this.validate()}}static{this.styles=nd}handleclassNamesChange(e,t){let i=t.split(" "),n=!1;if(i.forEach(o=>{if(o.startsWith("qti-height-lines-")){let a=o.replace("qti-height-lines-","");this._rows=parseInt(a),n=!0}}),!n&&this.expectedLength){let o=Math.ceil(this.expectedLength/50);this._rows=o}}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}$`,i=new RegExp(t);e.checkValidity()&&i.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()}toggleCorrectResponse(){}reportValidity(){let e=this.shadowRoot.querySelector("textarea");if(!e)return!1;let t=this.validate();return t||e.reportValidity(),t}render(){return x`<slot name="prompt"></slot
|
|
4297
4307
|
><textarea
|
|
4298
4308
|
part="textarea"
|
|
4299
4309
|
name="${this.responseIdentifier}"
|
|
@@ -4304,12 +4314,12 @@ CES.load();
|
|
|
4304
4314
|
@keyup="${this.textChanged}"
|
|
4305
4315
|
@change="${this.textChanged}"
|
|
4306
4316
|
@blur="${e=>{this.reportValidity()}}"
|
|
4307
|
-
placeholder="${
|
|
4317
|
+
placeholder="${$e(this.placeholderText?this.placeholderText:void 0)}"
|
|
4308
4318
|
rows="${this._rows}"
|
|
4309
4319
|
?disabled="${this.disabled}"
|
|
4310
4320
|
?readonly="${this.readonly}"
|
|
4311
4321
|
.value=${this.response}
|
|
4312
|
-
></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")}};d([
|
|
4322
|
+
></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")}};d([M()],ge.prototype,"_rows",2),d([g({type:Number,attribute:"expected-length"})],ge.prototype,"expectedLength",2),d([g({type:String,attribute:"pattern-mask"})],ge.prototype,"patternMask",2),d([g({type:String,attribute:"placeholder-text"})],ge.prototype,"placeholderText",2),d([g({type:String,attribute:"data-patternmask-message"})],ge.prototype,"dataPatternmaskMessage",2),d([g({type:String,attribute:"class"})],ge.prototype,"classNames",2),d([B("classNames")],ge.prototype,"handleclassNamesChange",1),d([M()],ge.prototype,"response",2),d([B("response",{waitUntilFirstUpdate:!0})],ge.prototype,"_handleResponseChange",2);customElements.define("qti-extended-text-interaction",ge);var od=E`
|
|
4313
4323
|
:host {
|
|
4314
4324
|
display: flex;
|
|
4315
4325
|
align-items: flex-start;
|
|
@@ -4343,10 +4353,10 @@ CES.load();
|
|
|
4343
4353
|
border-radius: 0.3rem;
|
|
4344
4354
|
gap: 0.5rem;
|
|
4345
4355
|
}
|
|
4346
|
-
`;var
|
|
4356
|
+
`;var Lp=Ae(V,"qti-gap-text","qti-gap","slot[part='drags']"),co=class extends Te(Lp,'[qti-draggable="true"]'){static{this.styles=od}render(){return x`<slot name="prompt"> </slot>
|
|
4347
4357
|
<slot part="drags" name="drags"></slot>
|
|
4348
4358
|
<slot part="drops"></slot>
|
|
4349
|
-
<div role="alert" part="message" id="validation-message"></div>`}toggleCorrectResponse(
|
|
4359
|
+
<div role="alert" part="message" id="validation-message"></div>`}toggleCorrectResponse(r){let e=this.responseVariable;if(r&&e?.correctResponse){let t=[],i=Array.isArray(e.correctResponse)?e.correctResponse:[e.correctResponse];i&&(t=i.map(o=>{let a=o.split(" ");return{text:a[0],gap:a[1]}})),this.querySelectorAll("qti-gap").forEach(o=>{let a=o.getAttribute("identifier"),l=t.find(p=>p.gap===a)?.text,c=this.querySelector(`qti-gap-text[identifier="${l}"]`)?.textContent.trim();if(l&&c){if(!o.nextElementSibling?.classList.contains("correct-option")){let p=document.createElement("span");p.classList.add("correct-option"),p.textContent=c,p.style.border="1px solid var(--qti-correct)",p.style.borderRadius="4px",p.style.padding="2px 4px",p.style.display="inline-block",o.insertAdjacentElement("afterend",p)}}else o.nextElementSibling?.classList.contains("correct-option")&&o.nextElementSibling.remove()})}else this.querySelectorAll(".correct-option").forEach(i=>{i.remove()})}#e(r){if(!r.correctResponse)return[];let e=Array.isArray(r.correctResponse)?r.correctResponse:[r.correctResponse],t=[];return e&&e.forEach(i=>{let n=i.split(" ");t.push({source:n[0],target:n[1]})}),t}toggleCandidateCorrection(r){let e=this.responseVariable;if(!e?.correctResponse)return;let t=this.#e(e);Array.from(this.querySelectorAll("qti-gap")).forEach(n=>{let o=n.getAttribute("identifier"),a=t.filter(c=>c.target===o);n.querySelectorAll("qti-gap-text").forEach(c=>{if(c.internals.states.delete("candidate-correct"),c.internals.states.delete("candidate-incorrect"),!r)return;a.find(u=>u.source===c.identifier)?.source!==void 0?c.internals.states.add("candidate-correct"):c.internals.states.add("candidate-incorrect")})})}};customElements.define("qti-gap-match-interaction",co);var sd=(s,r,e)=>{let t=new Map;for(let i=r;i<=e;i++)t.set(s[i],i);return t},Rr=de(class extends Le{constructor(s){if(super(s),s.type!==ot.CHILD)throw Error("repeat() can only be used in text expressions")}dt(s,r,e){let t;e===void 0?e=r:r!==void 0&&(t=r);let i=[],n=[],o=0;for(let a of s)i[o]=t?t(a,o):o,n[o]=e(a,o),o++;return{values:n,keys:i}}render(s,r,e){return this.dt(s,r,e).values}update(s,[r,e,t]){let i=ll(s),{values:n,keys:o}=this.dt(r,e,t);if(!Array.isArray(i))return this.ut=o,n;let a=this.ut??=[],l=[],c,p,u=0,h=i.length-1,y=0,v=n.length-1;for(;u<=h&&y<=v;)if(i[u]===null)u++;else if(i[h]===null)h--;else if(a[u]===o[y])l[y]=st(i[u],n[y]),u++,y++;else if(a[h]===o[v])l[v]=st(i[h],n[v]),h--,v--;else if(a[u]===o[v])l[v]=st(i[u],n[v]),sr(s,l[v+1],i[u]),u++,v--;else if(a[h]===o[y])l[y]=st(i[h],n[y]),sr(s,i[u],i[h]),h--,y++;else if(c===void 0&&(c=sd(o,y,v),p=sd(a,u,h)),c.has(a[u]))if(c.has(a[h])){let w=p.get(o[y]),f=w!==void 0?i[w]:null;if(f===null){let m=sr(s,i[u]);st(m,n[y]),l[y]=m}else l[y]=st(f,n[y]),sr(s,i[u],f),i[w]=null;y++}else bn(i[h]),h--;else bn(i[u]),u++;for(;y<=v;){let w=sr(s,l[v+1]);st(w,n[y]),l[y++]=w}for(;u<=h;){let w=i[u++];w!==null&&bn(w)}return this.ut=o,al(s,l),Z}});function qt(s,r,e,t){let i=e.getAttribute("width")?parseFloat(e.getAttribute("width")):e.naturalWidth,n=e.getAttribute("height")?parseFloat(e.getAttribute("height")):e.naturalHeight;switch(s){case"circle":{if(r.length!==3){console.error("Invalid circle coordinates:",r);return}let[o,a,l]=r,c=o/i*100,p=a/n*100,u=l/i*100,h=l/n*100;t.style.left=c-u+"%",t.style.top=p-h+"%",t.style.width=2*u+"%",t.style.height=2*h+"%",t.style.borderRadius="50%"}break;case"rect":{if(r.length!==4){console.error("Invalid rectangle coordinates:",r);return}let[o,a,l,c]=r,p=o/i*100,u=a/n*100,h=l/i*100,y=c/n*100;t.style.left=p+"%",t.style.top=u+"%",t.style.width=h-p+"%",t.style.height=y-u+"%"}break;case"ellipse":{if(r.length!==4){console.error("Invalid ellipse coordinates:",r);return}let[o,a,l,c]=r,p=o/i*100,u=a/n*100,h=l/i*100,y=c/n*100;t.style.left=p-h+"%",t.style.top=u-y+"%",t.style.width=2*h+"%",t.style.height=2*y+"%",t.style.borderRadius="50%"}break;case"poly":{if(r.length<6||r.length%2!==0){console.error("Invalid polygon coordinates:",r);return}let o=[];for(let m=0;m<r.length;m+=2)o.push({x:r[m],y:r[m+1]});let a=Math.min(...o.map(m=>m.x)),l=Math.max(...o.map(m=>m.x)),c=Math.min(...o.map(m=>m.y)),p=Math.max(...o.map(m=>m.y)),u=a/i*100,h=c/n*100,y=l/i*100,v=p/n*100;t.style.left=u+"%",t.style.top=h+"%",t.style.width=y-u+"%",t.style.height=v-h+"%";let f=o.map(m=>({x:(m.x-a)/(l-a)*100,y:(m.y-c)/(p-c)*100})).map(m=>`${m.x}% ${m.y}%`).join(",");t.style.clipPath=`polygon(${f})`}break;default:console.error(`Unsupported shape: ${s}`);break}}var ad=E`
|
|
4350
4360
|
slot:not([name='prompt']) {
|
|
4351
4361
|
// position: relative; /* qti-hotspot-choice relative to the slot */
|
|
4352
4362
|
display: block;
|
|
@@ -4370,14 +4380,14 @@ CES.load();
|
|
|
4370
4380
|
top: 0px;
|
|
4371
4381
|
left: 0px;
|
|
4372
4382
|
}
|
|
4373
|
-
`;var
|
|
4383
|
+
`;var Ke=class extends V{constructor(){super();this.#t=null;this.#r=null;this._correctLines=[];this._response=[];this.addEventListener("qti-register-hotspot",this.#o)}static{this.styles=ad}#e;#t;#r;reset(){this._response=[],this._correctLines=[]}validate(){return this.#n().length>0}set response(e){this._response=this.#i(e)}get response(){return this._response}#i(e){return e==null||e===""?[]:Array.isArray(e)?e:[e]}#n(){return this.#i(this._response)}toggleInternalCorrectResponse(e){let t=this.responseVariable;if(!e||!t){this._correctLines=[];return}if(!t.correctResponse){console.error("No correct response found for this interaction.");return}let i=Array.isArray(t.correctResponse)?t.correctResponse:[t.correctResponse];this._correctLines=i}render(){return x`<slot name="prompt"></slot>
|
|
4374
4384
|
<line-container>
|
|
4375
4385
|
<svg
|
|
4376
|
-
width=${
|
|
4377
|
-
height=${
|
|
4386
|
+
width=${$e(this.grImage[0]?.width)}
|
|
4387
|
+
height=${$e(this.grImage[0]?.height)}
|
|
4378
4388
|
viewbox="0 0 ${this.grImage[0]?.width} ${this.grImage[0]?.height}"
|
|
4379
4389
|
>
|
|
4380
|
-
${
|
|
4390
|
+
${Rr(this.#n(),e=>e,(e,t)=>fn`
|
|
4381
4391
|
<line
|
|
4382
4392
|
part="line"
|
|
4383
4393
|
x1=${parseInt(this.querySelector(`[identifier=${e.split(" ")[0]}]`).style.left)}
|
|
@@ -4386,10 +4396,10 @@ CES.load();
|
|
|
4386
4396
|
y2=${parseInt(this.querySelector(`[identifier=${e.split(" ")[1]}]`).style.top)}
|
|
4387
4397
|
stroke="red"
|
|
4388
4398
|
stroke-width="3"
|
|
4389
|
-
@click=${
|
|
4399
|
+
@click=${i=>{i.stopPropagation(),this._response=this._response.filter((n,o)=>o!==t),this.saveResponse(this.response)}}
|
|
4390
4400
|
/>
|
|
4391
4401
|
`)}
|
|
4392
|
-
${
|
|
4402
|
+
${Rr(this._correctLines||[],e=>e,(e,t)=>fn`
|
|
4393
4403
|
<line
|
|
4394
4404
|
part="correct-line"
|
|
4395
4405
|
x1=${parseInt(this.querySelector(`[identifier=${e.split(" ")[0]}]`).style.left)}
|
|
@@ -4401,7 +4411,7 @@ CES.load();
|
|
|
4401
4411
|
stroke-dasharray="5,5"
|
|
4402
4412
|
/>
|
|
4403
4413
|
`)}
|
|
4404
|
-
${this.#t&&
|
|
4414
|
+
${this.#t&&fn`<line
|
|
4405
4415
|
part="point"
|
|
4406
4416
|
x1=${this.startCoord.x}
|
|
4407
4417
|
y1=${this.startCoord.y}
|
|
@@ -4413,7 +4423,7 @@ CES.load();
|
|
|
4413
4423
|
</svg>
|
|
4414
4424
|
<slot></slot>
|
|
4415
4425
|
</line-container>
|
|
4416
|
-
<div role="alert" part="message" id="validation-message"></div>`}#
|
|
4426
|
+
<div role="alert" part="message" id="validation-message"></div>`}#o(e){let t=this.querySelector("img"),i=e.target,n=i.getAttribute("coords"),o=i.getAttribute("shape"),a=n.split(",").map(l=>parseInt(l));qt(o,a,t,i)}firstUpdated(){this.#e=this.querySelectorAll("qti-associable-hotspot"),this.addEventListener("mousemove",e=>{let t=this.grImage[0];if(!t)return;let i=t.getBoundingClientRect();this.mouseCoord={x:e.clientX-i.left,y:e.clientY-i.top}}),this.#e.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.#t?this.#r||(this.#r=t.target,this._response=this.#n(),this._response=[...this._response,`${this.#t.getAttribute("identifier")} ${this.#r.getAttribute("identifier")}`],this.saveResponse(this.response),this.#t=null,this.#r=null):(this.#t=t.target,this.startCoord={x:parseInt(this.#t.getAttribute("coords").split(",")[0]),y:parseInt(this.#t.getAttribute("coords").split(",")[1])})})})}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("qti-register-hotspot",this.#o)}};d([M()],Ke.prototype,"_correctLines",2),d([M()],Ke.prototype,"startCoord",2),d([M()],Ke.prototype,"mouseCoord",2),d([za({selector:"img"})],Ke.prototype,"grImage",2),d([M()],Ke.prototype,"_response",2);customElements.define("qti-graphic-associate-interaction",Ke);var ld=E`
|
|
4417
4427
|
:host {
|
|
4418
4428
|
display: flex;
|
|
4419
4429
|
align-items: flex-start;
|
|
@@ -4467,10 +4477,10 @@ CES.load();
|
|
|
4467
4477
|
user-select: none;
|
|
4468
4478
|
pointer-events: none;
|
|
4469
4479
|
}
|
|
4470
|
-
`;var
|
|
4480
|
+
`;var $p=Ae(V,"qti-gap-img, qti-gap-text","qti-associable-hotspot","slot[part='drags']"),po=class extends Te($p,'[qti-draggable="true"]'){static{this.styles=ld}render(){return x` <slot name="prompt"></slot>
|
|
4471
4481
|
<slot part="image"></slot>
|
|
4472
4482
|
<slot part="drags" name="drags" class="hover-border"></slot>
|
|
4473
|
-
<div role="alert" part="message" id="validation-message"></div>`}shouldReturnToInventoryOnInventoryDrop(){return!0}#e(
|
|
4483
|
+
<div role="alert" part="message" id="validation-message"></div>`}shouldReturnToInventoryOnInventoryDrop(){return!0}#e(r){let e=r.target,t=e.getAttribute("coords"),i=e.getAttribute("shape"),n=t.split(",").map(o=>parseInt(o));switch(i){case"circle":{let[o,a,l]=n;e.style.left=o-l+"px",e.style.top=a-l+"px",e.style.width=e.style.height=2*l+"px"}break;case"rect":{let[o,a,l,c]=n;e.style.left=o+"px",e.style.top=a+"px",e.style.width=l-o+"px",e.style.height=c-a+"px"}break;default:break}}connectedCallback(){super.connectedCallback(),this.addEventListener("qti-register-hotspot",this.#e)}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("qti-register-hotspot",this.#e)}};customElements.define("qti-graphic-gap-match-interaction",po);var cd=E`
|
|
4474
4484
|
slot:not([name='prompt']) {
|
|
4475
4485
|
position: relative; /* qti-hotspot-choice relative to the slot */
|
|
4476
4486
|
display: block;
|
|
@@ -4481,11 +4491,11 @@ CES.load();
|
|
|
4481
4491
|
pointer-events: none;
|
|
4482
4492
|
user-select: none;
|
|
4483
4493
|
}
|
|
4484
|
-
`;var
|
|
4494
|
+
`;var uo=class extends yt(V,"qti-hotspot-choice"){constructor(){super(...arguments);this._choiceElements=[]}static{this.styles=cd}render(){return x`
|
|
4485
4495
|
<slot name="prompt"></slot>
|
|
4486
4496
|
<slot></slot>
|
|
4487
4497
|
<div role="alert" part="message" id="validation-message"></div>
|
|
4488
|
-
`}#e(e){let{identifier:t}=e.detail,
|
|
4498
|
+
`}#e(e){let{identifier:t}=e.detail,i=this._choiceElements.find(o=>o.getAttribute("identifier")===t);if(!i)return;let n=this._choiceElements.length;if(!this.choiceOrdering){if(this.choiceOrdering=!0,i.order==null){let o=this._choiceElements.filter(a=>a.order!=null).length;if(o>=n){this.choiceOrdering=!1;return}i.order=o+1}else{let o=i.order;i.order=null,this._choiceElements.forEach(a=>{a.order!=null&&a.order>o&&a.order--})}this.choiceOrdering=!1}}toggleCorrectResponse(e){let t=this.responseVariable,i=this._choiceElements;for(let n of i)if(e&&t?.correctResponse?.length>0&&Array.isArray(t.correctResponse)){let o=t.correctResponse.findIndex(a=>a===n.identifier);o>=0?n.orderCorrect=o+1:n.orderCorrect=null}else n.orderCorrect=null}#t(e){let t=this.querySelector("img"),i=e.target,n=i.getAttribute("coords"),o=i.getAttribute("shape"),a=n.split(",").map(l=>parseInt(l));qt(o,a,t,i)}connectedCallback(){super.connectedCallback(),this.addEventListener("activate-qti-hotspot-choice",this.#e),this.addEventListener("register-qti-hotspot-choice",this.#t)}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("activate-qti-hotspot-choice",this.#e),this.removeEventListener("register-qti-hotspot-choice",this.#t)}};customElements.define("qti-graphic-order-interaction",uo);var dd=E`
|
|
4489
4499
|
slot:not([name='prompt']) {
|
|
4490
4500
|
position: relative; /* qti-hotspot-choice relative to the slot */
|
|
4491
4501
|
display: inline-block;
|
|
@@ -4499,11 +4509,11 @@ CES.load();
|
|
|
4499
4509
|
user-select: none;
|
|
4500
4510
|
/* width:100%; */
|
|
4501
4511
|
}
|
|
4502
|
-
`;var
|
|
4512
|
+
`;var mo=class extends yt(V,"qti-hotspot-choice"){static{this.styles=dd}render(){return x`
|
|
4503
4513
|
<slot name="prompt"></slot>
|
|
4504
4514
|
<slot></slot>
|
|
4505
|
-
`}#e=null;#t(
|
|
4506
|
-
<div part="message" role="alert" id="validation-message"></div>`}static{this.styles=
|
|
4515
|
+
`}#e=null;#t(r){return this.#e||(r.naturalWidth>0&&r.naturalHeight>0?this.#e=Promise.resolve(r):this.#e=new Promise(e=>{let t=()=>{r.removeEventListener("load",t),e(r)};r.addEventListener("load",t)})),this.#e}async#r(r){let e=this.querySelector("img"),t=r.target,i=t.getAttribute("coords"),n=t.getAttribute("shape"),o=i.split(",").map(l=>parseInt(l)),a=await this.#t(e);qt(n,o,a,t)}connectedCallback(){super.connectedCallback(),this.addEventListener("register-qti-hotspot-choice",this.#r)}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("unregister-qti-hotspot-choice",this.#r)}};customElements.define("qti-hotspot-interaction",mo);var pd=E``;var ji=class extends yt(V,"qti-hottext"){constructor(){super(...arguments);this.class="";this.render=()=>x`<slot></slot>
|
|
4516
|
+
<div part="message" role="alert" id="validation-message"></div>`}static{this.styles=pd}get#e(){let e={"qti-input-control-hidden":!0};return this.class&&this.class.split(" ").forEach(t=>{t.trim()&&(e[t.trim()]=!0)}),e}connectedCallback(){super.connectedCallback(),this.#t()}updated(e){super.updated(e),this.#t()}#t(){let e=Object.keys(this.#e).join(" ");this.className=e}};d([g({type:String,reflect:!0})],ji.prototype,"class",2);customElements.define("qti-hottext-interaction",ji);var Wi=class extends Le{constructor(r){if(super(r),this.it=O,r.type!==ot.CHILD)throw Error(this.constructor.directiveName+"() can only be used in child bindings")}render(r){if(r===O||r==null)return this._t=void 0,this.it=r;if(r===Z)return r;if(typeof r!="string")throw Error(this.constructor.directiveName+"() called with a non-string value");if(r===this.it)return this._t;this.it=r;let e=[r];return e.raw=e,this._t={_$litType$:this.constructor.resultType,strings:e,values:[]}}};Wi.directiveName="unsafeHTML",Wi.resultType=1;var Xt=de(Wi);var Pp=E`
|
|
4507
4517
|
:host {
|
|
4508
4518
|
display: inline-block;
|
|
4509
4519
|
vertical-align: baseline;
|
|
@@ -4559,12 +4569,12 @@ CES.load();
|
|
|
4559
4569
|
display: inline-block;
|
|
4560
4570
|
vertical-align: middle;
|
|
4561
4571
|
}
|
|
4562
|
-
`,
|
|
4572
|
+
`,ud=Pp;var Vp=0,wt=class extends V{constructor(){super();this.options=[];this.correctOption="";this._dropdownOpen=!1;this._slotObserver=null;this._menuId=`qti-inline-choice-menu-${Vp++}`;this.#o=e=>{(this.disabled||this.readonly)&&e.preventDefault()};this.#s=e=>{this.disabled||this.readonly||(e.key==="ArrowDown"||e.key==="Enter"||e.key===" ")&&(e.preventDefault(),this.#n(!0))};this.#a=e=>{let i=e.newState==="open";this._dropdownOpen!==i&&(this._dropdownOpen=i)};this.#c=e=>{if(!this._dropdownOpen)return;if(e.key==="Escape"){e.preventDefault(),this.#n(!1),this.#d();return}let t=this.#v(),i=this.renderRoot.activeElement,n=this.#l(),o=i||(n instanceof HTMLElement&&this.#u(n)?n:null),a=t.findIndex(l=>l===o);if(e.key==="ArrowDown"&&(e.preventDefault(),t[Math.min(t.length-1,Math.max(0,a+1))]?.focus()),e.key==="ArrowUp"&&(e.preventDefault(),t[Math.max(0,a-1)]?.focus()),e.key==="Enter"||e.key===" "){if(!o)return;if(e.preventDefault(),o instanceof HTMLButtonElement)o.click();else{let l=o.getAttribute("identifier")??"";this.#i(l)}}};this.#b=()=>{this.#t()};this.#f=e=>{if(this.disabled||this.readonly)return;let i=e.currentTarget.getAttribute("identifier")??"";this.#i(i)};this.internals.role="listbox"}get isInline(){return!0}static get styles(){return[ud]}render(){let e=this.#e();return x`
|
|
4563
4573
|
<button
|
|
4564
4574
|
part="trigger"
|
|
4565
4575
|
type="button"
|
|
4566
|
-
@click=${this.#
|
|
4567
|
-
@keydown=${this.#
|
|
4576
|
+
@click=${this.#o}
|
|
4577
|
+
@keydown=${this.#s}
|
|
4568
4578
|
aria-haspopup="listbox"
|
|
4569
4579
|
aria-expanded="${this._dropdownOpen?"true":"false"}"
|
|
4570
4580
|
aria-controls="${this._menuId}"
|
|
@@ -4573,7 +4583,7 @@ CES.load();
|
|
|
4573
4583
|
?disabled="${this.disabled}"
|
|
4574
4584
|
data-readonly="${this.readonly?"true":"false"}"
|
|
4575
4585
|
>
|
|
4576
|
-
<span part="value">${
|
|
4586
|
+
<span part="value">${Xt(e?.textContent??"")}</span>
|
|
4577
4587
|
<span part="${this._dropdownOpen?"dropdown-icon dropdown-icon-open":"dropdown-icon"}" aria-hidden="true"
|
|
4578
4588
|
>▾</span
|
|
4579
4589
|
>
|
|
@@ -4593,12 +4603,12 @@ CES.load();
|
|
|
4593
4603
|
aria-selected="${this.options[0]?.selected?"true":"false"}"
|
|
4594
4604
|
@click=${()=>this.#i("")}
|
|
4595
4605
|
>
|
|
4596
|
-
<span part="option-content">${
|
|
4606
|
+
<span part="option-content">${Xt(this.options[0]?.textContent??"")}</span>
|
|
4597
4607
|
</button>
|
|
4598
4608
|
<slot @slotchange=${this.#b}></slot>
|
|
4599
4609
|
</div>
|
|
4600
|
-
${
|
|
4601
|
-
`}async connectedCallback(){super.connectedCallback(),this.#t(),this.#g(),await this.updateComplete,this.#r()}disconnectedCallback(){super.disconnectedCallback(),this.#y(),this._slotObserver?.disconnect(),this._slotObserver=null}willUpdate(e){e.has("configContext")&&this.#t()}updated(e){e.has("_dropdownOpen")&&this._dropdownOpen&&(this.#p(),this.#v()[0]?.focus()),(e.has("disabled")||e.has("readonly"))&&this.#p()}#e(){return this.options.find(e=>e.selected)??this.options[0]}#t(){let e=Array.from(this.querySelectorAll("qti-inline-choice")),t=this.dataset.prompt||this.configContext?.inlineChoicePrompt||"select",
|
|
4610
|
+
${Xt(this.correctOption)}
|
|
4611
|
+
`}async connectedCallback(){super.connectedCallback(),this.#t(),this.#g(),await this.updateComplete,this.#r()}disconnectedCallback(){super.disconnectedCallback(),this.#y(),this._slotObserver?.disconnect(),this._slotObserver=null}willUpdate(e){e.has("configContext")&&this.#t()}updated(e){e.has("_dropdownOpen")&&this._dropdownOpen&&(this.#p(),this.#v()[0]?.focus()),(e.has("disabled")||e.has("readonly"))&&this.#p()}#e(){return this.options.find(e=>e.selected)??this.options[0]}#t(){let e=Array.from(this.querySelectorAll("qti-inline-choice")),t=this.dataset.prompt||this.configContext?.inlineChoicePrompt||"select",i=this.options.find(a=>a.selected)?.value??"",n=[{textContent:t,value:"",selected:i===""},...e.map(a=>{let l=a.getAttribute("identifier")??"";return{textContent:a.innerHTML,value:l,selected:l!==""&&l===i}})],o=n.some(a=>a.selected);this.options=o?n:n.map((a,l)=>({...a,selected:l===0})),this.#p(),this.#r()}#r(){let e=this.#h(),t=this.renderRoot.querySelector('button[part="trigger"]');if(!e||!t)return;let i=t.querySelector('span[part~="dropdown-icon"]'),n=i?i.getBoundingClientRect().width:0,o=e.matches(":popover-open"),a=e.style.visibility,l=e.style.display;o||(e.style.visibility="hidden",e.style.display="block",e.showPopover());let c=e.getBoundingClientRect().width,p=Math.max(c,e.scrollWidth);o||(e.hidePopover(),e.style.visibility=a,e.style.display=l),t.style.width=`${p+n}px`}validate(){let e=this.options.find(t=>t.selected);return e?e.value!=="":!1}reset(){this.#n(!1),this.options=this.options.map((e,t)=>({...e,selected:t===0})),this.#p()}set response(e){let t=e??"";this.options=this.options.map(i=>({...i,selected:i.value===t})),this.#p()}get response(){let e=this.options.find(t=>t.selected)?.value??"";return e===""?null:e}toggleInternalCorrectResponse(e){super.toggleInternalCorrectResponse(e);let t=this.correctResponse;if(!e||!t){this.correctOption="";return}let i=this.options.find(n=>t===n.value);if(!i){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">${i.textContent}</span>`}#i(e){this.options=this.options.map(t=>({...t,selected:t.value===e})),this.#p(),this.saveResponse(e),this.#n(!1)}#n(e){let t=this.#h();if(t){if(e){t.matches(":popover-open")||t.showPopover();return}t.matches(":popover-open")&&t.hidePopover()}}#o;#s;#a;#c;#d(){this.renderRoot.querySelector('button[part="trigger"]')?.focus()}#l(){let e=document.activeElement;for(;e&&e instanceof HTMLElement&&e.shadowRoot?.activeElement;)e=e.shadowRoot.activeElement;return e}#u(e){return e===this||this.contains(e)||this.renderRoot.contains(e)}#h(){return this.renderRoot.querySelector(`#${this._menuId}`)}#g(){this._slotObserver=new MutationObserver(()=>this.#t()),this._slotObserver.observe(this,{childList:!0,subtree:!0})}#b;#f;#y(){let e=Array.from(this.querySelectorAll("qti-inline-choice"));for(let t of e)t.removeEventListener("click",this.#f),t.removeAttribute("tabindex"),t.internals.role=null,t.internals.ariaSelected=null,t.internals.ariaChecked="false",t.internals.states.delete("--checked")}async#p(){await this.updateComplete;let e=this.options.find(i=>i.selected)?.value??"",t=Array.from(this.querySelectorAll("qti-inline-choice"));for(let i of t){let o=(i.getAttribute("identifier")??"")===e;i.removeEventListener("click",this.#f),i.addEventListener("click",this.#f),i.disabled=this.disabled,i.readonly=this.readonly,i.internals.role="option",i.internals.ariaSelected=o?"true":"false",i.internals.ariaChecked=o?"true":"false",i.internals.ariaDisabled=this.disabled?"true":"false",i.internals.ariaReadOnly=this.readonly?"true":"false",i.removeAttribute("aria-disabled"),i.removeAttribute("aria-readonly"),o?i.internals.states.add("--checked"):i.internals.states.delete("--checked"),i.tabIndex=-1}}#v(){let e=this.renderRoot.querySelector('button[part~="option"]'),t=Array.from(this.querySelectorAll("qti-inline-choice"));return[...e?[e]:[],...t]}};d([M()],wt.prototype,"options",2),d([M()],wt.prototype,"correctOption",2),d([M()],wt.prototype,"_dropdownOpen",2),d([$({context:be,subscribe:!0}),g({attribute:!1})],wt.prototype,"configContext",2);customElements.define("qti-inline-choice-interaction",wt);var md=E`
|
|
4602
4612
|
slot:not([hidden]) {
|
|
4603
4613
|
/* slot where the */
|
|
4604
4614
|
display: flex;
|
|
@@ -4624,7 +4634,7 @@ CES.load();
|
|
|
4624
4634
|
/* Make sure the drag and drop container slots have the same width */
|
|
4625
4635
|
flex: 1;
|
|
4626
4636
|
}
|
|
4627
|
-
`;var
|
|
4637
|
+
`;var Dp=Ae(V,"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"),Ct=class extends Te(Dp,'[qti-draggable="true"]'){constructor(){super(...arguments);this.lastCheckedRadio=null;this.class="";this._response=[];this.responseIdentifier="";this.correctOptions=null;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,i=t.value,n=t.name,o=t.type;t.checked?(this.response?this.response.indexOf(i)===-1&&(o==="radio"&&(this.response=(this.response||[]).filter(a=>a.indexOf(n)===-1)),this.response=[...this.response,i]):this.response=[i],this.lastCheckedRadio=t):(this.response=(this.response||[]).filter(a=>a!==i),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}}))}}static{this.styles=md}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.sourceChoices=Array.from(this.querySelectorAll("qti-simple-match-set:first-of-type qti-simple-associable-choice")),this.targetChoices=Array.from(this.querySelectorAll("qti-simple-match-set:last-of-type qti-simple-associable-choice")),this.response=[]}validate(){return this.class.split(" ").includes("qti-match-tabular")?this.response?.length===this.sourceChoices.length:super.validate()}#e(e){if(!e.correctResponse)return[];let t=Array.isArray(e.correctResponse)?e.correctResponse:[e.correctResponse],i=[];return t&&t.forEach(n=>{let o=n.split(" ");i.push({source:o[0],target:o[1]})}),i}toggleInternalCorrectResponse(e){let t=this.responseVariable;if(!t?.correctResponse){this.querySelectorAll(".correct-option").forEach(n=>n.remove());return}let i=this.#e(t);this.class.split(" ").includes("qti-match-tabular")?e?this.correctOptions=i||[]:this.correctOptions=null:e?(this.querySelectorAll(".correct-option").forEach(n=>n.remove()),this.targetChoices.forEach(n=>{let o=n.getAttribute("identifier"),a=i.find(l=>l.target===o);if(a?.source){let c=this.querySelector(`qti-simple-associable-choice[identifier="${a.source}"]`)?.textContent?.trim();if(c&&!n.previousElementSibling?.classList.contains("correct-option")){let p=document.createElement("span");p.classList.add("correct-option"),p.textContent=c,p.style.border="1px solid var(--qti-correct)",p.style.borderRadius="4px",p.style.padding="2px 4px",p.style.display="inline-block",n.insertAdjacentElement("beforebegin",p)}}})):this.correctOptions=null}toggleCandidateCorrection(e){let t=this.responseVariable;if(!t?.correctResponse)return;let i=this.#e(t);this.targetChoices.forEach(n=>{let o=n.getAttribute("identifier"),a=i.filter(c=>c.target===o);n.querySelectorAll("qti-simple-associable-choice").forEach(c=>{if(c.internals.states.delete("candidate-correct"),c.internals.states.delete("candidate-incorrect"),!e)return;a.find(u=>u.source===c.identifier)?.source!==void 0?c.internals.states.add("candidate-correct"):c.internals.states.add("candidate-incorrect")})})}render(){let e=this.class.split(" ").includes("qti-match-tabular"),t=this.correctOptions!==null;return x`
|
|
4628
4638
|
<slot name="prompt"></slot>
|
|
4629
4639
|
<slot ?hidden=${e}></slot>
|
|
4630
4640
|
|
|
@@ -4632,26 +4642,26 @@ CES.load();
|
|
|
4632
4642
|
<table part="table">
|
|
4633
4643
|
<tr part="r-header">
|
|
4634
4644
|
<td></td>
|
|
4635
|
-
${this.targetChoices.map(
|
|
4645
|
+
${this.targetChoices.map(i=>x`<th part="r-header">${Xt(i.innerHTML)}</th>`)}
|
|
4636
4646
|
</tr>
|
|
4637
4647
|
|
|
4638
|
-
${this.sourceChoices.map(
|
|
4639
|
-
<td part="c-header">${
|
|
4640
|
-
${this.targetChoices.map(
|
|
4648
|
+
${this.sourceChoices.map(i=>x`<tr part="row">
|
|
4649
|
+
<td part="c-header">${Xt(i.innerHTML)}</td>
|
|
4650
|
+
${this.targetChoices.map(n=>{let o=i.getAttribute("identifier"),a=n.getAttribute("identifier"),l=`${o} ${a}`,c=(this.response||[]).filter(w=>w.split(" ")[0]===o).length||0,p=this.response?.includes(l)||!1,u=i.matchMax===1?"radio":"checkbox",h=!!this.correctOptions?.find(w=>w.source===o&&w.target===a),y=u==="radio"?`rb ${p?"rb-checked":""} ${t?h?"rb-correct":"rb-incorrect":""}`:`cb ${p?"cb-checked":""} ${t?h?"cb-correct":"cb-incorrect":""}`,v=this.correctOptions?.length>0?!0:i.matchMax===1?!1:i.matchMax!==0&&c>=i.matchMax&&!p;return x`<td part="input-cell">
|
|
4641
4651
|
<div
|
|
4642
4652
|
class="input-container"
|
|
4643
4653
|
style="position: relative; width: 24px; height: 24px; margin: 0 auto;"
|
|
4644
4654
|
>
|
|
4645
4655
|
<input
|
|
4646
|
-
type=${
|
|
4656
|
+
type=${u}
|
|
4647
4657
|
part=${y}
|
|
4648
|
-
name=${
|
|
4658
|
+
name=${o}
|
|
4649
4659
|
value=${l}
|
|
4650
4660
|
.disabled=${v}
|
|
4651
4661
|
@change=${w=>this.handleRadioChange(w)}
|
|
4652
|
-
@click=${w=>
|
|
4662
|
+
@click=${w=>i.matchMax===1?this.handleRadioClick(w):null}
|
|
4653
4663
|
/>
|
|
4654
|
-
${
|
|
4664
|
+
${u==="checkbox"&&p?x`
|
|
4655
4665
|
<svg
|
|
4656
4666
|
part="checkmark"
|
|
4657
4667
|
viewBox="0 0 24 24"
|
|
@@ -4664,11 +4674,11 @@ CES.load();
|
|
|
4664
4674
|
</td>`})}
|
|
4665
4675
|
</tr>`)}
|
|
4666
4676
|
</table>
|
|
4667
|
-
`:
|
|
4677
|
+
`:O}
|
|
4668
4678
|
|
|
4669
4679
|
<div role="alert" part="message" id="validation-message"></div>
|
|
4670
|
-
`}};d([
|
|
4671
|
-
<slot></slot>`}constructor(){super()}connectedCallback(){super.connectedCallback();let
|
|
4680
|
+
`}};d([g({type:String})],Ct.prototype,"class",2),d([M()],Ct.prototype,"_response",2),d([g({type:String,attribute:"response-identifier"})],Ct.prototype,"responseIdentifier",2),d([M()],Ct.prototype,"correctOptions",2);customElements.define("qti-match-interaction",Ct);var hd=E``;var ho=class extends V{static{this.styles=hd}#e=null;reset(){this.#e=null}validate(){return!0}get response(){return this.#e?this.#e.toString():null}set response(r){if(r)if(!isNaN(parseInt(r?.toString())))this.#e=parseInt(r.toString());else throw new Error(`Value must be a number ${r}`)}static get properties(){return{...V.properties,step:{type:Number,attribute:"step",default:10}}}render(){return x` <slot name="prompt"></slot>
|
|
4681
|
+
<slot></slot>`}constructor(){super()}connectedCallback(){super.connectedCallback();let r=this.querySelector("audio")||this.querySelector("video")||this.querySelector("object");r&&r.addEventListener("ended",()=>{this.#e++,this.saveResponse(this.value)})}};customElements.define("qti-media-interaction",ho);var fd=E`
|
|
4672
4682
|
[part='drags'] {
|
|
4673
4683
|
display: flex;
|
|
4674
4684
|
align-items: flex-start;
|
|
@@ -4744,13 +4754,13 @@ CES.load();
|
|
|
4744
4754
|
:host(.qti-choices-right) [part='container'] {
|
|
4745
4755
|
flex-direction: row-reverse;
|
|
4746
4756
|
}
|
|
4747
|
-
`;var
|
|
4757
|
+
`;var Np=Ae(V,"qti-simple-choice","drop-list","slot[part='drags']"),Et=class extends Te(Np,'[qti-draggable="true"]'){constructor(){super(...arguments);this.nrChoices=0;this.correctResponses=[];this.showCorrectResponses=!1}static{this.styles=fd}#e(){let e=this.responseVariable;return e?.correctResponse?(Array.isArray(e.correctResponse)?e.correctResponse:[e.correctResponse]).map((i,n)=>{let[o,a]=i.split(" "),l=a?.startsWith("droplist")?parseInt(a.replace("droplist",""),10):n,c=Number.isNaN(l)?n:l;return{identifier:o,dropIndex:c}}).filter(i=>!!i.identifier):[]}render(){let e=Array.from(this.querySelectorAll("qti-simple-choice"));return this.nrChoices<e.length&&(this.nrChoices=e.length),x` <slot name="prompt"> </slot>
|
|
4748
4758
|
<div part="container">
|
|
4749
4759
|
<slot part="drags"> </slot>
|
|
4750
4760
|
<div part="drops">
|
|
4751
|
-
${[...Array(this.nrChoices)].map((t,
|
|
4761
|
+
${[...Array(this.nrChoices)].map((t,i)=>x`<drop-list role="region" part="drop-list" identifier="droplist${i}"></drop-list>`)}
|
|
4752
4762
|
</div>
|
|
4753
|
-
</div>`}toggleCorrectResponse(e){if(this.shadowRoot.querySelectorAll(".correct-option").forEach(t=>t.remove()),e){let t=this.#e(),
|
|
4763
|
+
</div>`}toggleCorrectResponse(e){if(this.shadowRoot.querySelectorAll(".correct-option").forEach(t=>t.remove()),e){let t=this.#e(),i=new Map;Array.from(this.querySelectorAll("qti-simple-choice")).forEach(n=>{let o=n.getAttribute("identifier"),a=n.textContent?.trim();o&&a&&i.set(o,a)}),t.forEach(({identifier:n,dropIndex:o})=>{let a=i.get(n);if(!a)return;let l=this.shadowRoot.querySelector(`drop-list[identifier="droplist${o}"]`);if(!l)return;let c=document.createElement("span");c.classList.add("correct-option"),c.textContent=a,c.style.border="1px solid var(--qti-correct)",c.style.borderRadius="4px",c.style.padding="2px 4px",c.style.display="inline-block",c.style.marginTop="4px",l.insertAdjacentElement("afterend",c)})}}toggleCandidateCorrection(e){if(super.toggleCandidateCorrection(e),Array.from(this.shadowRoot.querySelectorAll('drop-list [qti-draggable="true"]')).forEach(a=>{a.internals.states.delete("candidate-correct"),a.internals.states.delete("candidate-incorrect")}),!e)return;let i=this.#e(),n=new Map;i.forEach(a=>n.set(a.dropIndex,a.identifier)),Array.from(this.shadowRoot.querySelectorAll("drop-list")).forEach((a,l)=>{let c=a.querySelector('[qti-draggable="true"]');if(!c)return;let p=n.get(l),u=c.getAttribute("identifier");p&&u===p?c.internals.states.add("candidate-correct"):c.internals.states.add("candidate-incorrect")})}getValue(e){return e?.map((t,i)=>`${t} droplist${i}`)||[]}getResponse(){return Array.from(this.shadowRoot.querySelectorAll("drop-list")).map(i=>{let n=i.querySelectorAll('[qti-draggable="true"]');return[...Array.from(n).map(a=>a.getAttribute("identifier"))].join(" ")})}shouldTreatBlockedMaxAsInvalid(){return!1}async firstUpdated(){super.firstUpdated(),this.childrenMap=Array.from(this.querySelectorAll("qti-simple-choice")),this.childrenMap.forEach(e=>e.setAttribute("part","qti-simple-choice"))}};d([M()],Et.prototype,"nrChoices",2),d([M()],Et.prototype,"correctResponses",2),d([M()],Et.prototype,"showCorrectResponses",2),d([g({type:String})],Et.prototype,"orientation",2);customElements.define("qti-order-interaction",Et);var gd=E`
|
|
4754
4764
|
:host {
|
|
4755
4765
|
display: block;
|
|
4756
4766
|
width: 100%;
|
|
@@ -4760,14 +4770,14 @@ CES.load();
|
|
|
4760
4770
|
::slotted(qti-interaction-markup) {
|
|
4761
4771
|
display: none;
|
|
4762
4772
|
}
|
|
4763
|
-
`;var
|
|
4773
|
+
`;var K=class extends V{constructor(){super(...arguments);this._iframeLoaded=!1;this._pendingMessages=[];this._iframeMessageOrigin=null;this._iframeObjectUrl=null;this.requirePathsJson="";this.requireShimJson="";this.requireJsUrl="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js";this.baseUrl="";this.useDefaultPaths=!1;this._errorMessage=null;this.response=null;this.#t=null;this.#r=null;this.#i=null;this.#n="";this.handleIframeMessage=e=>{let{data:t}=e;if(!(!t||t.source!=="qti-pci-iframe")&&!(!this.iframe?.contentWindow||e.source!==this.iframe.contentWindow)&&!(t.responseIdentifier&&t.responseIdentifier!==this.responseIdentifier)){if(this._iframeMessageOrigin===null)this._iframeMessageOrigin=e.origin;else if(e.origin!==this._iframeMessageOrigin)return;switch(t.method){case"iframeReady":this.#q(),this.#y(),this.dispatchEvent(new CustomEvent("qti-portable-custom-interaction-loaded",{bubbles:!0}));break;case"resize":typeof t.height=="number"&&this.iframe&&(this.iframe.style.height=`${t.height}px`,this.iframe.style.width=`${t.width}px`);break;case"console":this.dispatchEvent(new CustomEvent("qti-pci-console",{detail:{level:t.level,args:t.args},bubbles:!0}));break;case"interactionChanged":{let i=t?.params?.value,n=i&&typeof i=="object"?this.#d(i):null,o=typeof t?.params?.valid=="boolean"?t.params.valid:null,a=typeof t?.params?.customValidity=="string"?t.params.customValidity:null;o!==null&&(this.#i=o,o&&a===null&&(this.#n="")),a!==null&&(this.#n=a);let l=t?.params?.state,c;if(l===void 0)c=void 0;else if(l===null)c=null;else if(typeof l=="string")c=l;else try{c=`__qti_json__::${JSON.stringify(l)}`}catch{c=null}if(n===null){let p=this.responseVariable?.cardinality==="single"?"":[];this.response=p,this.validate(),this.saveResponse(p,c);break}this.response=n,this.validate(),this.saveResponse(n,c);break}case"error":this._errorMessage=t.params.message,console.error("Error from PCI iframe:",t.params.message);break}}};this.#m=null}#e;static{this.styles=[gd,E`
|
|
4764
4774
|
:host {
|
|
4765
4775
|
display: block;
|
|
4766
4776
|
width: 100%;
|
|
4767
4777
|
min-height: 50px;
|
|
4768
4778
|
}
|
|
4769
|
-
`]}#t;#r;#i;#o
|
|
4770
|
-
`);this.sendMessageToIframe("setStylesheets",
|
|
4779
|
+
`]}#t;#r;#i;#n;#o(){if(this.#t===null&&this.requirePathsJson)try{let e=JSON.parse(this.requirePathsJson);if(Array.isArray(e)||!e||typeof e!="object")throw new Error("Require paths must be a JSON object.");this.#t=e}catch(e){console.error("Error parsing require paths JSON:",e),this._errorMessage=`Error parsing require paths JSON: ${e.message}`,this.#t={}}return this.#t||{}}#s(){if(this.#r===null&&this.requireShimJson)try{this.#r=JSON.parse(this.requireShimJson)}catch(e){console.error("Error parsing require shim JSON:",e),this._errorMessage=`Error parsing require shim JSON: ${e.message}`,this.#r={}}return this.#r||{}}#a(){return this.#o()}#c(){return this.#s()}#d(e){for(let t in e)if(e.hasOwnProperty(t)){let i=e[t];if(i){for(let n in i)if(i.hasOwnProperty(n)){let o=i[n];if(Array.isArray(o))return o.map(String);if(o!=null)return String(o)}}}return null}getDirectChildrenByTag(e){let t=e.toLowerCase();return Array.from(this.children).filter(i=>i.tagName.toLowerCase()===t)}coerceBaseValue(e,t){if(e==null)return e;switch(t){case"integer":{if(typeof e=="number")return e;let i=parseInt(String(e),10);return Number.isNaN(i)?e:i}case"float":case"duration":{if(typeof e=="number")return e;let i=parseFloat(String(e));return Number.isNaN(i)?e:i}case"boolean":{if(typeof e=="boolean")return e;if(typeof e=="string"){let i=e.toLowerCase();if(i==="true")return!0;if(i==="false")return!1}return e}default:return String(e)}}normalizeListValue(e){return e==null?[]:Array.isArray(e)?e:[e]}variableToQtiVariableJSON(e,t,i){if(t==="record"||i==="record")return this.recordToQtiVariableJSON(e);if(t!=="single"){let n=this.normalizeListValue(e).map(o=>this.coerceBaseValue(o,i));return{list:{[i]:n}}}return{base:{[i]:this.coerceBaseValue(e,i)}}}recordToQtiVariableJSON(e){if(!e||typeof e!="object")return{record:[]};let t=[];for(let[i,n]of Object.entries(e))t.push(this.recordEntryFromValue(i,n));return{record:t}}recordEntryFromValue(e,t){if(Array.isArray(t)){let i=t.filter(n=>n!=null);if(i.length&&i.every(n=>typeof n=="boolean"))return{name:e,list:{boolean:i}};if(i.length&&i.every(n=>typeof n=="number")){let n=i,o=n.every(a=>Number.isInteger(a));return{name:e,list:{[o?"integer":"float"]:n}}}return{name:e,list:{string:t.map(n=>n==null?"":String(n))}}}if(typeof t=="boolean")return{name:e,base:{boolean:t}};if(typeof t=="number")return Number.isInteger(t)?{name:e,base:{integer:t}}:{name:e,base:{float:t}};if(t==null)return{name:e,base:{string:""}};if(typeof t=="object")try{return{name:e,base:{string:JSON.stringify(t)}}}catch{return{name:e,base:{string:String(t)}}}return{name:e,base:{string:String(t)}}}getQtiContextDefaultsFromItem(){let e=this.closest("qti-assessment-item");if(!e)return{};let t={};return e.querySelectorAll('qti-context-declaration[identifier="QTI_CONTEXT"]').forEach(n=>{let o=n.querySelector("qti-default-value");if(!o)return;o.querySelectorAll("qti-value[field-identifier]").forEach(l=>{let c=l.getAttribute("field-identifier");if(!c)return;let p=l.getAttribute("base-type")||"string",u=l.textContent?.trim()||"";t[c]=this.coerceBaseValue(u,p)})}),t}getQtiContextRecord(){let e=this.getQtiContextDefaultsFromItem(),t=this.qtiContext?.QTI_CONTEXT||{},i={...e,...t};if(!Object.keys(i).length)return null;let n={candidateIdentifier:i.candidateIdentifier??"",testIdentifier:i.testIdentifier??"",environmentIdentifier:i.environmentIdentifier??"",...i};return this.recordToQtiVariableJSON(n)}getTemplateVariables(){let e={},t=this.getDirectChildrenByTag("qti-template-variable");return t.length&&t.forEach(i=>{let n=i.getAttribute("template-identifier")||i.getAttribute("identifier")||"";if(!n)return;let o=this.context?.variables?.find(c=>c.identifier===n);if(!o)return;let a=o.cardinality||"single",l=o.baseType||"string";e[n]=this.variableToQtiVariableJSON(o.value,a,l)}),e}getContextVariables(){let e={},t=this.getDirectChildrenByTag("qti-context-variable");return t.length&&t.forEach(i=>{let n=i.getAttribute("identifier")||"";if(!n)return;if(n==="QTI_CONTEXT"){let c=this.getQtiContextRecord();c&&(e[n]=c);return}let o=this.context?.variables?.find(c=>c.identifier===n);if(!o)return;let a=o.cardinality||"single",l=o.baseType||"string";e[n]=this.variableToQtiVariableJSON(o.value,a,l)}),e}#l(e){let t={...e};for(let i in e)if(Object.prototype.hasOwnProperty.call(e,i)){let n=i.replace(/[A-Z]/g,o=>`-${o.toLowerCase()}`);t[n]=e[i]}return t}#u(e){let t={...e},i=(n,o,a)=>{let l=n;for(let c=0;c<o.length;c+=1){let p=o[c];if(c===o.length-1){l[p]=a;return}(!l[p]||typeof l[p]!="object"||Array.isArray(l[p]))&&(l[p]={}),l=l[p]}};for(let[n,o]of Object.entries(e)){if(!n.includes("__"))continue;let a=n.split("__").filter(Boolean);a.length<2||i(t,a,o)}return t}responseVariablesToQtiVariableJSON(e,t,i){if(t!=="single"){let n={list:{}};return n.list[i]=e,n}else{let n={base:{}};return n.base[i]=e,n}}#h(){return this.response===null||this.response===void 0?!1:Array.isArray(this.response)?this.response.length===0?!1:this.response.some(e=>e!==""&&e!==null&&e!==void 0):this.response!==""}#g(e,t){let i=this.dataset.invalidresponsemessage||"Invalid response.",n=e?"":t&&t.trim().length>0?t:i;this._internals.setValidity(e?{}:{customError:!0},n)}validate(){let e=typeof this.#i=="boolean"?this.#i:this.#h();return this.#g(e,this.#n),e}set value(e){e===null?this.#e=[]:this.#e=Array.isArray(e)?e:e.split(",")}get value(){return this.#e===null||this.#e===void 0?null:Array.isArray(this.#e)?this.#e.join(","):String(this.#e)}set boundTo(e){if(!e||!e[this.responseIdentifier])return;let t=this.#d(e[this.responseIdentifier]);this.#e=t,this.saveResponse(t)}get boundTo(){let e={};if(this.context?.variables?.find(i=>i.identifier===this.responseIdentifier)){let i=this.context?.variables?.find(l=>l.identifier===this.responseIdentifier)?.cardinality||"single",n=this.context?.variables?.find(l=>l.identifier===this.responseIdentifier)?.baseType||"string",o=this.context?.variables?.find(l=>l.identifier===this.responseIdentifier)?.value||null,a=this.responseVariablesToQtiVariableJSON(o,i,n);e[this.responseIdentifier]=a}return e}#b(e){return e&&e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/'/g,"'").replace(///g,"/").replace(/`/g,"`").replace(/=/g,"=")}#f(e){let t={};for(let[i,n]of Object.entries(e))typeof n=="string"?t[i]=this.#b(n):t[i]=n;return t}disconnectedCallback(){super.disconnectedCallback(),window.removeEventListener("message",this.handleIframeMessage),this._iframeObjectUrl&&(URL.revokeObjectURL(this._iframeObjectUrl),this._iframeObjectUrl=null)}sendMessageToIframe(e,t){let i=this.iframe?.contentWindow;if(!this._iframeLoaded||!i){this._pendingMessages.push({method:e,params:t});return}i.postMessage({source:"qti-portable-custom-interaction",responseIdentifier:this.responseIdentifier,method:e,params:t},"*")}#y(){this._pendingMessages.length&&(this._pendingMessages.forEach(e=>{this.sendMessageToIframe(e.method,e.params)}),this._pendingMessages=[])}createIframe(){this._iframeObjectUrl&&(URL.revokeObjectURL(this._iframeObjectUrl),this._iframeObjectUrl=null),this.iframe=document.createElement("iframe"),this.iframe.id=`pci-iframe-${this.responseIdentifier}`,this.iframe.setAttribute("title","QTI PCI Iframe"),this.iframe.setAttribute("aria-label","QTI PCI Iframe"),this.iframe.setAttribute("aria-hidden","false"),this.iframe.setAttribute("role","application"),this.iframe.style.width="100%",this.iframe.style.border="none",this.iframe.style.display="block",this.iframe.onload=()=>{this._iframeLoaded=!0,this._iframeObjectUrl&&(URL.revokeObjectURL(this._iframeObjectUrl),this._iframeObjectUrl=null),this.#x(),this.#p()};let e=`qti-pci-${this.responseIdentifier}-${Date.now()}`;this.iframe.name=e;let t=this.generateIframeContent();try{let i=new Blob([t],{type:"text/html"});this._iframeObjectUrl=URL.createObjectURL(i),this.iframe.src=this._iframeObjectUrl}catch{let i=encodeURIComponent(t);this.iframe.src=`data:text/html;charset=utf-8,${i}`}this.appendChild(this.iframe)}#p(){let e=this.#l(this.#u(this.#f({...this.dataset}))),t=this.context?.state?.[this.responseIdentifier],i=typeof t=="string"&&t.length>0?t:null,n={module:this.module,customInteractionTypeIdentifier:this.customInteractionTypeIdentifier,baseUrl:this.baseUrl?this.baseUrl.startsWith("http")||this.baseUrl.startsWith("blob")||this.baseUrl.startsWith("base64")?this.baseUrl:yn(`${window.location.origin}${this.baseUrl}`):window.location.origin,responseIdentifier:this.responseIdentifier,properties:e,contextVariables:this.getContextVariables(),templateVariables:this.getTemplateVariables(),dataAttributes:{...this.dataset},interactionModules:this.#v(),boundTo:i?null:this.boundTo,state:i};this.sendMessageToIframe("initialize",n)}#v(){let e=[],t=this.querySelector("qti-interaction-modules");if(t){let i=t.querySelectorAll("qti-interaction-module");for(let n of i)e.push({id:n.getAttribute("id"),primaryPath:n.getAttribute("primary-path"),fallbackPath:n.getAttribute("fallback-path")})}return e}#x(){let e=this.querySelector("qti-interaction-markup");e&&this.sendMessageToIframe("setMarkup",e.innerHTML);let t=Array.from(this.querySelectorAll("qti-stylesheet"));if(t.length){let n=t.map(o=>o.outerHTML).join(`
|
|
4780
|
+
`);this.sendMessageToIframe("setStylesheets",n)}let i=this.querySelector("properties");i&&this.sendMessageToIframe("setProperties",i.innerHTML)}#q(){}connectedCallback(){super.connectedCallback(),this.#i=null,this.#n="",this.response=this.responseVariable?.value??null,window.addEventListener("message",this.handleIframeMessage),this.createIframe()}generateIframeContent(){let e=window.getComputedStyle(document.body),t=JSON.stringify(this.#a()),i=JSON.stringify(this.#c()),n=this.dataset.baseUrl?this.dataset.baseUrl.startsWith("/")?`${window.location.origin}${this.dataset.baseUrl}`:this.dataset.baseUrl:"",o=this.dataset.forwardConsole==="true",a=window.location.hostname==="localhost"||window.location.hostname==="127.0.0.1",l=a?`${window.location.origin}/cdn/index.js`:"https://unpkg.com/@citolab/qti-components/cdn",c=a?`${window.location.origin}/dist/item.css`:"https://unpkg.com/@citolab/qti-components@latest/dist/item.css",p=this.dataset.componentsCdnUrl||l,u=this.dataset.componentsCssUrl||c,h=`
|
|
4771
4781
|
font-family: ${e.getPropertyValue("font-family")};
|
|
4772
4782
|
font-size: ${e.getPropertyValue("font-size")};
|
|
4773
4783
|
line-height: ${e.getPropertyValue("line-height")};
|
|
@@ -4790,7 +4800,7 @@ CES.load();
|
|
|
4790
4800
|
height: auto;
|
|
4791
4801
|
overflow: hidden;
|
|
4792
4802
|
/* Add the extracted font styles here */
|
|
4793
|
-
${
|
|
4803
|
+
${h}
|
|
4794
4804
|
};
|
|
4795
4805
|
.qti-customInteraction {
|
|
4796
4806
|
width: 100%;
|
|
@@ -4805,10 +4815,10 @@ CES.load();
|
|
|
4805
4815
|
min-height: 50px;
|
|
4806
4816
|
}
|
|
4807
4817
|
</style>
|
|
4808
|
-
<link href="${
|
|
4818
|
+
<link href="${u}" rel="stylesheet" />
|
|
4809
4819
|
<script src="${this.requireJsUrl}"></script>
|
|
4810
4820
|
<script>
|
|
4811
|
-
const forwardConsole = ${
|
|
4821
|
+
const forwardConsole = ${o?"true":"false"};
|
|
4812
4822
|
if (forwardConsole) {
|
|
4813
4823
|
const originalLog = console.log.bind(console);
|
|
4814
4824
|
const originalError = console.error.bind(console);
|
|
@@ -4851,14 +4861,14 @@ CES.load();
|
|
|
4851
4861
|
// Define standard paths and shims
|
|
4852
4862
|
window.requirePaths = ${t};
|
|
4853
4863
|
|
|
4854
|
-
window.requireShim = ${
|
|
4864
|
+
window.requireShim = ${i};
|
|
4855
4865
|
|
|
4856
4866
|
// Single initial RequireJS configuration with error handling
|
|
4857
4867
|
window.requirejs.config({
|
|
4858
4868
|
catchError: true,
|
|
4859
4869
|
waitSeconds: 30,
|
|
4860
4870
|
paths: window.requirePaths,
|
|
4861
|
-
baseUrl: '${
|
|
4871
|
+
baseUrl: '${n}',
|
|
4862
4872
|
shim: window.requireShim,
|
|
4863
4873
|
onNodeCreated: function (node, config, moduleName, url) {
|
|
4864
4874
|
// Add error handler to script node
|
|
@@ -5652,13 +5662,13 @@ CES.load();
|
|
|
5652
5662
|
<body>
|
|
5653
5663
|
<div id="pci-container"></div>
|
|
5654
5664
|
</body>
|
|
5655
|
-
</html>`}toggleInternalCorrectResponse(e){let t=this.responseVariable;this.correctResponse=e?t?.correctResponse:t.cardinality==="single"?"":[];let
|
|
5665
|
+
</html>`}toggleInternalCorrectResponse(e){let t=this.responseVariable;this.correctResponse=e?t?.correctResponse:t.cardinality==="single"?"":[];let i=`correct-response-container-${this.responseIdentifier}`,n=this.parentElement?.querySelectorAll(`#${i}`);if(n&&n.forEach(h=>{h.remove()}),e)this.disable();else{this.enable();return}if(!e||!t?.correctResponse)return;let o=document.createElement("div");o.id=i,o.className="pci-correct-response-container",o.style.position="relative",o.style.marginTop="20px",o.style.border="2px solid green",o.style.padding="16px",o.style.borderRadius="4px",o.style.backgroundColor="rgba(0, 128, 0, 0.05)";let a=document.createElement("div");a.textContent="Correct Response:",a.style.fontWeight="bold",a.style.marginBottom="10px",a.style.color="green",o.appendChild(a);let l=document.createElement("qti-portable-custom-interaction");Array.from(this.attributes).forEach(h=>{h.name!=="id"&&h.name!=="response-identifier"&&l.setAttribute(h.name,h.value)});let c=this.responseIdentifier;l.responseIdentifier=`${c}-correct`,Array.from(this.children).forEach(h=>{let y=h.cloneNode(!0);l.appendChild(y)});let p=t.correctResponse,u=l.connectedCallback;l.connectedCallback=function(){u.call(this);let h=()=>{let y=this.responseVariablesToQtiVariableJSON(p,t.cardinality,t.baseType);this.sendMessageToIframe("setBoundTo",{[c]:y}),this.sendMessageToIframe("setState",{state:"review"})};this._iframeLoaded?h():this.addEventListener("qti-portable-custom-interaction-loaded",h,{once:!0})},l.style.pointerEvents="none",o.appendChild(l),this.after(o)}disable(){if(this.#m={pointerEvents:this.style.pointerEvents,position:this.style.position},this.sendMessageToIframe("setState",{state:"disabled"}),!this.querySelector(".pci-interaction-overlay")){let t=document.createElement("div");t.className="pci-interaction-overlay",t.style.position="absolute",t.style.top="0",t.style.left="0",t.style.width="100%",t.style.height="100%",t.style.backgroundColor="rgba(200, 200, 200, 0.3)",t.style.zIndex="100",t.style.pointerEvents="all",t.style.cursor="not-allowed",getComputedStyle(this).position==="static"&&(this.style.position="relative"),this.appendChild(t)}}enable(){let e=this.querySelector(".pci-interaction-overlay");e&&e.remove(),this.#m&&(this.#m.pointerEvents&&(this.style.pointerEvents=this.#m.pointerEvents),this.#m.position&&(this.style.position=this.#m.position),this.#m=null),this.sendMessageToIframe("setState",{state:"interacting"})}#m;render(){return x`
|
|
5656
5666
|
<slot></slot>
|
|
5657
5667
|
${this._errorMessage?x`<div style="color:red">
|
|
5658
5668
|
<h1>Error</h1>
|
|
5659
5669
|
${this._errorMessage}
|
|
5660
5670
|
</div>`:""}
|
|
5661
|
-
`}};d([
|
|
5671
|
+
`}};d([g({type:String,attribute:"module"})],K.prototype,"module",2),d([g({type:String,attribute:"custom-interaction-type-identifier"})],K.prototype,"customInteractionTypeIdentifier",2),d([g({type:String,attribute:"data-require-paths"})],K.prototype,"requirePathsJson",2),d([g({type:String,attribute:"data-require-shim"})],K.prototype,"requireShimJson",2),d([g({type:String,attribute:"data-require-js-url"})],K.prototype,"requireJsUrl",2),d([g({type:String,attribute:"data-base-url"})],K.prototype,"baseUrl",2),d([g({type:Boolean,attribute:"data-use-default-paths"})],K.prototype,"useDefaultPaths",2),d([M()],K.prototype,"_errorMessage",2),d([$({context:W,subscribe:!0}),M()],K.prototype,"context",2),d([$({context:or,subscribe:!0}),M()],K.prototype,"qtiContext",2),d([M()],K.prototype,"response",2);var fo=class extends K{#e=!1;async getIFrameContent(){return new Promise(r=>{let e=`get-content-${Date.now()}`,t=i=>{let{data:n}=i;n?.source==="qti-pci-iframe"&&(!n?.responseIdentifier||n?.responseIdentifier===this.responseIdentifier)&&n?.method==="getContentResponse"&&n?.messageId===e&&(window.removeEventListener("message",t),r(n.content))};window.addEventListener("message",t),this.sendMessageToIframe("getContent",{messageId:e}),setTimeout(()=>{window.removeEventListener("message",t),r("")},5e3)})}setTestContext(r){this.context=r,this.updateComplete.then(()=>{this.value=r?.variables?.find(e=>e.identifier===this.responseIdentifier).value})}async recreateIframe(){this.#e=!0;try{return this.iframe&&(this._iframeLoaded=!1,this.iframe.remove()),this._pendingMessages=[],this.createIframe(),new Promise(r=>{let e=()=>{this.removeEventListener("qti-portable-custom-interaction-loaded",e),r()};this.addEventListener("qti-portable-custom-interaction-loaded",e),setTimeout(()=>{this.removeEventListener("qti-portable-custom-interaction-loaded",e),r()},5e3)})}finally{this.#e=!1}}disconnectedCallback(){this.#e||super.disconnectedCallback()}async iFrameMouseClick(r,e){return new Promise(t=>{let i=`click-${Date.now()}`,n=o=>{let{data:a}=o;a?.source==="qti-pci-iframe"&&(!a?.responseIdentifier||a?.responseIdentifier===this.responseIdentifier)&&a?.method==="clickResponse"&&a?.messageId===i&&(window.removeEventListener("message",n),t())};window.addEventListener("message",n),this.sendMessageToIframe("simulateClick",{x:r,y:e,messageId:i}),setTimeout(()=>{window.removeEventListener("message",n),t()},5e3)})}async iFrameClickOnElement(r){return new Promise(e=>{let t=`click-selector-${Date.now()}`,i=n=>{let{data:o}=n;o?.source==="qti-pci-iframe"&&(!o?.responseIdentifier||o?.responseIdentifier===this.responseIdentifier)&&o?.method==="clickSelectorResponse"&&o?.messageId===t&&(window.removeEventListener("message",i),e(o.success))};window.addEventListener("message",i),this.sendMessageToIframe("clickOnSelector",{selector:r,messageId:t}),setTimeout(()=>{window.removeEventListener("message",i),e(!1)},5e3)})}async iFrameClickOnElementByText(r){return new Promise(e=>{let t=`click-text-${Date.now()}`,i=n=>{let{data:o}=n;o?.source==="qti-pci-iframe"&&(!o?.responseIdentifier||o?.responseIdentifier===this.responseIdentifier)&&o?.method==="clickTextResponse"&&o?.messageId===t&&(window.removeEventListener("message",i),e(o.success))};window.addEventListener("message",i),this.sendMessageToIframe("clickOnElementByText",{text:r,messageId:t}),setTimeout(()=>{window.removeEventListener("message",i),e(!1)},5e3)})}async iFrameSetValueElement(r,e){return new Promise(t=>{let i=`set-value-${Date.now()}`,n=o=>{let{data:a}=o;a?.source==="qti-pci-iframe"&&(!a?.responseIdentifier||a?.responseIdentifier===this.responseIdentifier)&&a?.method==="setValueResponse"&&a?.messageId===i&&(window.removeEventListener("message",n),t(a.success))};window.addEventListener("message",n),this.sendMessageToIframe("setValueElement",{selector:r,value:e,messageId:i}),setTimeout(()=>{window.removeEventListener("message",n),t(!1)},5e3)})}async iFrameGetBoundingClientRect(r){return new Promise(e=>{let t=`get-bounding-rect-${Date.now()}`,i=n=>{let{data:o}=n;o?.source==="qti-pci-iframe"&&(!o?.responseIdentifier||o?.responseIdentifier===this.responseIdentifier)&&o?.method==="getBoundingRectResponse"&&o?.messageId===t&&(window.removeEventListener("message",i),e(o.rect??null))};window.addEventListener("message",i),this.sendMessageToIframe("getBoundingRect",{selector:r,messageId:t}),setTimeout(()=>{window.removeEventListener("message",i),e(null)},5e3)})}async iFrameSetValueElementByText(r,e){return new Promise(t=>{let i=`set-value-text-${Date.now()}`,n=o=>{let{data:a}=o;a?.source==="qti-pci-iframe"&&(!a?.responseIdentifier||a?.responseIdentifier===this.responseIdentifier)&&a?.method==="setValueByTextResponse"&&a?.messageId===i&&(window.removeEventListener("message",n),t(a.success))};window.addEventListener("message",n),this.sendMessageToIframe("setValueElementByText",{text:r,value:e,messageId:i}),setTimeout(()=>{window.removeEventListener("message",n),t(!1)},5e3)})}async iFrameMousedownOnElement(r){return new Promise(e=>{let t=`mousedown-selector-${Date.now()}`,i=n=>{let{data:o}=n;o?.source==="qti-pci-iframe"&&(!o?.responseIdentifier||o?.responseIdentifier===this.responseIdentifier)&&o?.method==="mousedownSelectorResponse"&&o?.messageId===t&&(window.removeEventListener("message",i),e(o.success))};window.addEventListener("message",i),this.sendMessageToIframe("mousedownOnSelector",{selector:r,messageId:t}),setTimeout(()=>{window.removeEventListener("message",i),e(!1)},5e3)})}generateIframeContent(){let r=super.generateIframeContent(),e=`
|
|
5662
5672
|
// Test helper functions for QtiPortableCustomInteractionTest
|
|
5663
5673
|
// Base iframe implementation already provides PCIManager.getContent
|
|
5664
5674
|
|
|
@@ -5851,7 +5861,7 @@ CES.load();
|
|
|
5851
5861
|
}
|
|
5852
5862
|
},
|
|
5853
5863
|
true
|
|
5854
|
-
);`,t=
|
|
5864
|
+
);`,t=r.lastIndexOf("</script>");return r.substring(0,t)+e+r.substring(t)}};customElements.define("qti-portable-custom-interaction",K);customElements.define("qti-portable-custom-interaction-test",fo);var bd=E`
|
|
5855
5865
|
:host {
|
|
5856
5866
|
display: block;
|
|
5857
5867
|
}
|
|
@@ -5862,12 +5872,12 @@ CES.load();
|
|
|
5862
5872
|
left: 50%;
|
|
5863
5873
|
transform: translateX(-50%);
|
|
5864
5874
|
}
|
|
5865
|
-
`;var
|
|
5875
|
+
`;var go=class extends C{static{this.styles=bd}render(){return x`<slot></slot>`}};var vd=E`
|
|
5866
5876
|
:host {
|
|
5867
5877
|
display: inline-block;
|
|
5868
5878
|
position: relative;
|
|
5869
5879
|
}
|
|
5870
|
-
`;var
|
|
5880
|
+
`;var bo=class extends C{static{this.styles=vd}render(){return x`<slot></slot>`}constructor(){super(),this.removeMoveListener=this.removeMoveListener.bind(this),this.dragElementHandler=this.dragElementHandler.bind(this)}dragElementHandler(r){r.preventDefault();let e=r.clientX-this.startX,t=r.clientY-this.startY;this.dragElement.style.left=this.dragElement.offsetLeft+e+"px",this.dragElement.style.top=this.dragElement.offsetTop+t+"px",this.startX=r.clientX,this.startY=r.clientY}firstUpdated(r){super.firstUpdated(r),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)}};customElements.define("qti-position-object-interaction",go);customElements.define("qti-position-object-stage",bo);var yd="important",Op=" !"+yd,Ts=de(class extends Le{constructor(s){if(super(s),s.type!==ot.ATTRIBUTE||s.name!=="style"||s.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(s){return Object.keys(s).reduce((r,e)=>{let t=s[e];return t==null?r:r+`${e=e.includes("-")?e:e.replace(/(?:^(webkit|moz|ms|o)|)(?=[A-Z])/g,"-$&").toLowerCase()}:${t};`},"")}update(s,[r]){let{style:e}=s.element;if(this.ft===void 0)return this.ft=new Set(Object.keys(r)),this.render(r);for(let t of this.ft)r[t]==null&&(this.ft.delete(t),t.includes("-")?e.removeProperty(t):e[t]=null);for(let t in r){let i=r[t];if(i!=null){this.ft.add(t);let n=typeof i=="string"&&i.endsWith(Op);t.includes("-")||n?e.setProperty(t,n?i.slice(0,-11):i,n?yd:""):e[t]=i}}return Z}});var xd=E`
|
|
5871
5881
|
:host {
|
|
5872
5882
|
display: block;
|
|
5873
5883
|
}
|
|
@@ -5882,25 +5892,25 @@ CES.load();
|
|
|
5882
5892
|
height: auto;
|
|
5883
5893
|
display: block;
|
|
5884
5894
|
}
|
|
5885
|
-
`;var
|
|
5895
|
+
`;var Ze=class extends V{constructor(){super(...arguments);this.maxChoices=1/0;this.minChoices=0;this.response=null;this._correctAreas=[];this._responseCorrection=[];this.#e=null;this.#t=1;this.#r=1;this.#i=0;this.#n=0;this.#o=e=>{if(this.disabled)return;if(!this.#e){console.warn("No <img> element found in <qti-select-point-interaction>");return}this.#a();let t=this.#e.getBoundingClientRect(),i=(e.clientX-t.left)*this.#t,n=(e.clientY-t.top)*this.#r,o=`${i.toFixed()} ${n.toFixed()}`;this.maxChoices===1?this.response=[o]:(this.maxChoices===0||(this.response||[]).length<this.maxChoices)&&(this.response=[...this.response||[],o]),this.saveResponse(this.response)};this.#s=()=>{this.#a()}}static{this.styles=xd}#e;#t;#r;#i;#n;#o;connectedCallback(){super.connectedCallback(),window.addEventListener("resize",this.#s)}#s;get responsePoints(){return(this.response||[]).filter(e=>e).map(e=>{let[t,i]=e.split(" ").map(Number);return{x:t,y:i}})}toggleCandidateCorrection(e){this._responseCorrection=[],e&&this.responsePoints.forEach(t=>{let i=this.responseVariable.areaMapping.areaMapEntries.some(n=>J.isPointInArea(`${t.x} ${t.y}`,`${n.shape},${n.coords}`,this.responseVariable.baseType));this._responseCorrection.push(i)})}toggleCorrectResponse(e){let t=this.responseVariable;if(!e||!t){this._correctAreas=[];return}let i=t.areaMapping,n=[];if(!i||i.areaMapEntries.length===0)if(t.correctResponse){let o=Array.isArray(t.correctResponse)?t.correctResponse:[t.correctResponse];if(o.length===0||o.find(a=>a.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."),n=o.map(a=>({shape:"circle",coords:a.split(" ").join(",").concat(",10"),defaultValue:1,mappedValue:1}))}else{console.error("No area mapping found for the response variable.");return}else n=i.areaMapEntries;this._correctAreas=n.map(o=>({coords:o.coords,shape:o.shape}))}updated(e){super.updated(e);let t=this.#e;t&&e.has("_correctAreas")&&this._correctAreas.length>0&&(this.#a(),this.shadowRoot.querySelectorAll("div").forEach(i=>{let n=i.dataset.coord,o=i.dataset.shape;n&&o&&qt(o,n.split(",").map(a=>+a),t,i)}))}render(){return x` <slot name="prompt"></slot>
|
|
5886
5896
|
<point-container>
|
|
5887
|
-
${
|
|
5897
|
+
${Rr((this.response||[]).filter(e=>e),e=>e,(e,t)=>{let[i,n]=e.split(" ").map(Number),o=i/(this.#i||1)*100,a=n/(this.#n||1)*100,l=16,c=l/(this.#i||1)*100,p=l/(this.#n||1)*100,u="";return this._responseCorrection[t]===!0?u=" correct":this._responseCorrection[t]===!1&&(u=" incorrect"),x`
|
|
5888
5898
|
<button
|
|
5889
|
-
part="point${
|
|
5890
|
-
style=${
|
|
5899
|
+
part="point${u}"
|
|
5900
|
+
style=${Ts({pointerEvents:this.maxChoices===1?"none":"auto",position:"absolute",transform:"translate(-50%, -50%)",left:`${o}%`,top:`${a}%`,width:`min(${c}%, 1rem)`,height:`min(${p}%, 1rem)`,minWidth:`min(${c}%, 1rem)`,minHeight:`min(${p}%, 1rem)`,borderRadius:"50%",background:"red"})}
|
|
5891
5901
|
aria-label="Remove point at ${e}"
|
|
5892
5902
|
?disabled=${this.disabled}
|
|
5893
|
-
@click=${
|
|
5903
|
+
@click=${h=>{h.stopPropagation(),this.response=(this.response||[]).filter((y,v)=>v!==t),this.saveResponse(this.response)}}
|
|
5894
5904
|
></button>
|
|
5895
5905
|
`})}
|
|
5896
|
-
${
|
|
5897
|
-
style=${
|
|
5906
|
+
${Rr(this._correctAreas?.filter(e=>e)||[],e=>e,(e,t)=>x`<div
|
|
5907
|
+
style=${Ts({position:"absolute",pointerEvents:"none",backgroundColor:"var(--qti-correct)",opacity:"0.5"})}
|
|
5898
5908
|
data-coord="${e.coords}"
|
|
5899
5909
|
alt=${`correct-response-${t+1}`}
|
|
5900
5910
|
data-shape="${e.shape}"
|
|
5901
5911
|
></div>`)}
|
|
5902
5912
|
<slot></slot>
|
|
5903
|
-
</point-container>`}validate(){return this.response!==null&&this.response.length>=this.minChoices&&this.response.length<=this.maxChoices}#a(){this.#i=this.#e.getAttribute("width")?parseFloat(this.#e.getAttribute("width")):this.#e.naturalWidth,this.#
|
|
5913
|
+
</point-container>`}validate(){return this.response!==null&&this.response.length>=this.minChoices&&this.response.length<=this.maxChoices}#a(){this.#i=this.#e.getAttribute("width")?parseFloat(this.#e.getAttribute("width")):this.#e.naturalWidth,this.#n=this.#e.getAttribute("height")?parseFloat(this.#e.getAttribute("height")):this.#e.naturalHeight;let e=this.#e.getBoundingClientRect();this.#t=e.width===0?1:this.#i/e.width,this.#r=e.height===0?1:this.#n/e.height}firstUpdated(){this.#e=this.querySelector("img"),this.#e?(this.#a(),this.#e.addEventListener("click",this.#o)):console.warn("No <img> element found in <qti-select-point-interaction>")}disconnectedCallback(){super.disconnectedCallback(),window.removeEventListener("resize",this.#s),this.#e&&this.#e.removeEventListener("click",this.#o)}};d([g({type:Number,attribute:"max-choices"})],Ze.prototype,"maxChoices",2),d([g({type:Number,attribute:"min-choices"})],Ze.prototype,"minChoices",2),d([M()],Ze.prototype,"response",2),d([M()],Ze.prototype,"_correctAreas",2),d([M()],Ze.prototype,"_responseCorrection",2);customElements.define("qti-select-point-interaction",Ze);var qd=E`
|
|
5904
5914
|
:host {
|
|
5905
5915
|
display: block;
|
|
5906
5916
|
--show-bounds: true;
|
|
@@ -5980,7 +5990,7 @@ CES.load();
|
|
|
5980
5990
|
text-align: center;
|
|
5981
5991
|
color: #6b7280; /* text-gray-500 */
|
|
5982
5992
|
}
|
|
5983
|
-
`;var
|
|
5993
|
+
`;var St=class extends V{constructor(){super(...arguments);this.#e=0;this.#t=null;this.min=0;this.max=100;this.step=1}static{this.styles=qd}#e;#t;validate(){return!0}connectedCallback(){super.connectedCallback(),this.#r(this.min),this.setAttribute("tabindex","0"),this.setAttribute("role","slider")}get response(){return this.#e.toString()}set response(e){let t=parseInt(e,10);isNaN(t)||this.#r(t)}toggleCorrectResponse(e){let t=this.responseVariable;if(t?.correctResponse){if(e){this._correctResponse=t.correctResponse.toString();let i=parseFloat(t.correctResponse.toString());if(isNaN(i))this.#t=null;else{this.#t=i;let n=(this.#t-this.min)/(this.max-this.min)*100;this.style.setProperty("--value-percentage-correct",`${n}%`)}}else this.#t=null;this.requestUpdate()}}#r(e){let t=this.#e;if(this.#e=Math.min(this.max,Math.max(this.min,e)),this.#e===t)return;let i=(this.#e-this.min)/(this.max-this.min)*100;this.style.setProperty("--value-percentage",`${i}%`),this._internals.setFormValue(this.value),this.saveResponse(this.response),this.requestUpdate()}render(){return x`
|
|
5984
5994
|
<slot name="prompt"></slot>
|
|
5985
5995
|
<div id="slider" part="slider">
|
|
5986
5996
|
<div id="bounds" part="bounds">
|
|
@@ -5990,7 +6000,7 @@ CES.load();
|
|
|
5990
6000
|
|
|
5991
6001
|
<div id="ticks" part="ticks"></div>
|
|
5992
6002
|
|
|
5993
|
-
<div id="rail" part="rail" @mousedown=${this.#i} @touchstart=${this.#
|
|
6003
|
+
<div id="rail" part="rail" @mousedown=${this.#i} @touchstart=${this.#n}>
|
|
5994
6004
|
<div id="knob" part="knob">
|
|
5995
6005
|
<div id="value" part="value">${this.response}</div>
|
|
5996
6006
|
</div>
|
|
@@ -6002,7 +6012,7 @@ CES.load();
|
|
|
6002
6012
|
`:null}
|
|
6003
6013
|
</div>
|
|
6004
6014
|
</div>
|
|
6005
|
-
`}#i(e){this.#
|
|
6015
|
+
`}#i(e){this.#o(e.pageX);let t=n=>this.#s(n.pageX),i=()=>{document.removeEventListener("mousemove",t),document.removeEventListener("mouseup",i),this.#a()};document.addEventListener("mousemove",t),document.addEventListener("mouseup",i)}#n(e){this.#o(e.touches[0].pageX);let t=n=>this.#s(n.touches[0].pageX),i=()=>{document.removeEventListener("touchmove",t),document.removeEventListener("touchend",i),this.#a()};document.addEventListener("touchmove",t,{passive:!1}),document.addEventListener("touchend",i)}#o(e){this.#s(e)}#s(e){let t=this._rail.getBoundingClientRect(),i=e-t.left,n=Math.min(1,Math.max(0,i/t.width)),o=this.min+Math.round(n*(this.max-this.min)/this.step)*this.step;this.#r(o)}#a(){this.dispatchEvent(new Event("change",{bubbles:!0}))}};d([Jt("#rail")],St.prototype,"_rail",2),d([g({type:Number,attribute:"lower-bound"})],St.prototype,"min",2),d([g({type:Number,attribute:"upper-bound"})],St.prototype,"max",2),d([g({type:Number,attribute:"step"})],St.prototype,"step",2);customElements.define("qti-slider-interaction",St);var wd=()=>new Rs,Rs=class{},Is=new WeakMap,qI=de(class extends at{render(s){return O}update(s,[r]){let e=r!==this.G;return e&&this.G!==void 0&&this.rt(void 0),(e||this.lt!==this.ct)&&(this.G=r,this.ht=s.options?.host,this.rt(this.ct=s.element)),O}rt(s){if(this.isConnected||(s=void 0),typeof this.G=="function"){let r=this.ht??globalThis,e=Is.get(r);e===void 0&&(e=new WeakMap,Is.set(r,e)),e.get(this.G)!==void 0&&this.G.call(this.ht,void 0),e.set(this.G,s),s!==void 0&&this.G.call(this.ht,s)}else this.G.value=s}get lt(){return typeof this.G=="function"?Is.get(this.ht??globalThis)?.get(this.G):this.G?.value}disconnected(){this.lt===this.ct&&this.rt(void 0)}reconnected(){this.rt(this.ct)}});var Cd=E`
|
|
6006
6016
|
:host {
|
|
6007
6017
|
display: inline-block;
|
|
6008
6018
|
}
|
|
@@ -6110,7 +6120,7 @@ CES.load();
|
|
|
6110
6120
|
bottom: 0;
|
|
6111
6121
|
}
|
|
6112
6122
|
}
|
|
6113
|
-
`;var
|
|
6123
|
+
`;var Ie=class extends V{constructor(){super(...arguments);this.inputRef=wd();this.response=null;this._handleValueChange=()=>{this._internals.setFormValue(this.value),this.validate()}}static{this.styles=Cd}get value(){return this.response||null}set value(e){this.response=e||null}get correctness(){let e=this.responseVariable;if(!e)return null;if(e.value===null)return"incorrect";if(e.mapping){let t=e.mapping.mapEntries.reduce((i,n)=>Math.max(n.mappedValue,i),0);for(let i of e.mapping.mapEntries){let n=i.mapKey,o=e.value;if(i.caseSensitive||(n=n.toLowerCase(),o=o.toLowerCase()),n===o)return i.mappedValue===t?"correct":i.mappedValue<=(e.mapping.defaultValue||0)?"incorrect":"partially-correct"}}return e.correctResponse===e.value?"correct":"incorrect"}get isInline(){return!0}validate(){if(!this._input)return!1;if(this.patternMask&&this.dataPatternmaskMessage)this._internals.setValidity({}),this._input.setCustomValidity(""),this._input.checkValidity()||(this._internals.setValidity({customError:!0},this.dataPatternmaskMessage),this._input.setCustomValidity(this.dataPatternmaskMessage));else{let e=this._input.checkValidity();this._internals.setValidity(e?{}:{customError:!1})}return this.response!==""&&this._input.checkValidity()}toggleInternalCorrectResponse(e){let t=this.responseVariable;if(e&&t?.correctResponse){let i=t.correctResponse.toString();this._correctResponse=i}else this._correctResponse=null}render(){return x`
|
|
6114
6124
|
<input
|
|
6115
6125
|
part="input"
|
|
6116
6126
|
name="${this.responseIdentifier}"
|
|
@@ -6121,15 +6131,15 @@ CES.load();
|
|
|
6121
6131
|
@keyup="${this.textChanged}"
|
|
6122
6132
|
@change="${this.textChanged}"
|
|
6123
6133
|
type="${this.patternMask=="[0-9]*"?"number":"text"}"
|
|
6124
|
-
placeholder="${
|
|
6134
|
+
placeholder="${$e(this.placeholderText?this.placeholderText:void 0)}"
|
|
6125
6135
|
.value="${this.response}"
|
|
6126
|
-
pattern="${
|
|
6136
|
+
pattern="${$e(this.patternMask?this.patternMask:void 0)}"
|
|
6127
6137
|
maxlength=${1e3}
|
|
6128
6138
|
?disabled="${this.disabled}"
|
|
6129
6139
|
?readonly="${this.readonly}"
|
|
6130
6140
|
/>
|
|
6131
|
-
${this._correctResponse?x`<div part="correct">${this._correctResponse}</div>`:
|
|
6132
|
-
`}textChanged(e){if(this.disabled||this.readonly)return;let t=e.target;this.#e(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=""}#e(e){this.setAttribute("empty",e===""?"true":"false")}};d([
|
|
6141
|
+
${this._correctResponse?x`<div part="correct">${this._correctResponse}</div>`:O}
|
|
6142
|
+
`}textChanged(e){if(this.disabled||this.readonly)return;let t=e.target;this.#e(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=""}#e(e){this.setAttribute("empty",e===""?"true":"false")}};d([g({type:Number,attribute:"expected-length"})],Ie.prototype,"expectedLength",2),d([g({type:String,attribute:"pattern-mask"})],Ie.prototype,"patternMask",2),d([g({type:String,attribute:"placeholder-text"})],Ie.prototype,"placeholderText",2),d([g({type:String,attribute:"data-patternmask-message"})],Ie.prototype,"dataPatternmaskMessage",2),d([M()],Ie.prototype,"response",2),d([Jt("input")],Ie.prototype,"_input",2),d([B("response",{waitUntilFirstUpdate:!0})],Ie.prototype,"_handleValueChange",2);customElements.define("qti-text-entry-interaction",Ie);var Ed=E`
|
|
6133
6143
|
:host {
|
|
6134
6144
|
display: block;
|
|
6135
6145
|
margin: 1em 0;
|
|
@@ -6138,12 +6148,12 @@ CES.load();
|
|
|
6138
6148
|
display: block;
|
|
6139
6149
|
margin-top: 0.5em;
|
|
6140
6150
|
}
|
|
6141
|
-
`;var
|
|
6151
|
+
`;var vo=class extends V{static{this.styles=Ed}#e=null;#t=null;reset(){this.#e=null,this.#t=null,this.saveResponse(null)}validate(){return this.#t!==null}get response(){return this.#t}set response(r){if(typeof r=="string")this.#t=r,this.saveResponse(r);else if(r===null)this.reset();else throw new Error("Value must be a Base64-encoded string or null")}static get properties(){return{...V.properties}}render(){return x`
|
|
6142
6152
|
<div>
|
|
6143
6153
|
<slot name="prompt"></slot>
|
|
6144
6154
|
<input type="file" @change="${this.#r}" ?disabled="${this.disabled}" ?readonly="${this.readonly}" />
|
|
6145
6155
|
</div>
|
|
6146
|
-
`}async#r(i){let e=i.target;e.files&&e.files.length>0&&(this.#e=e.files[0],this.#t=await this.#i(this.#e),this.saveResponse(this.#t),this.dispatchEvent(new CustomEvent("qti-interaction-response",{detail:{response:this.#t}})))}#i(i){return new Promise((e,t)=>{let r=new FileReader;r.onload=()=>e(r.result),r.onerror=()=>t(r.error),r.readAsDataURL(i)})}};customElements.define("qti-upload-interaction",Fo);var sk=async n=>{let i=n.substring(0,n.lastIndexOf("/")),e=await Kn().load(`${n}`).then(a=>a.assessmentTest()),t=await jt().load(`${i}/${e.href}`).then(a=>a.htmlDoc()),r=await jt().load(`${i}/${e.href}`).then(a=>a.items()),o=`${i}/${e.href}`,s=`${i}/${e.href.substring(0,e.href.lastIndexOf("/"))}`;return{testHTMLDoc:t,testURI:s,testURL:o,items:r,testIdentifier:e.identifier}},nk=async n=>Ae().load(n).then(i=>i.htmlDoc().firstElementChild);var Oe=class extends C{render(){return x`<slot></slot>`}process(){throw new Error("Not implemented")}};Oe=d([k("qti-rule")],Oe);var ki=class extends Oe{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(parseFloat(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:Pr(t)}})),t)}};d([b({type:String})],ki.prototype,"identifier",2),d([P({context:G,subscribe:!0}),R()],ki.prototype,"context",2);customElements.define("qti-lookup-outcome-value",ki);var js=class extends Oe{render(){return x`<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",js);var Ws=class extends Oe{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 Gs(e).process();this.dispatchEvent(new CustomEvent("qti-set-outcome-value",{bubbles:!0,composed:!0,detail:{outcomeIdentifier:i,value:this.#e(r)}}))}#e(i){return Array.isArray(i)?i.map(Pr):i!==null?Pr(i):null}},Gs=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",Ws);var Mi=class extends C{render(){return x`<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",Mi);var Ri=class extends Mi{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",Ri);var Xs=class extends Ri{render(){return x`${super.render()}`}};customElements.define("qti-response-else-if",Xs);var Bo=class extends bd(fe){calculate(){return this.calculateChildren(Array.from(this.children))}};Bo=d([k("qti-and")],Bo);function bd(n){return class extends n{calculateChildren(e){return e.map(r=>{let o=r;if(!o.calculate)return console.error("Element doesn't implement QtiConditionExpression"),null;let s=o.calculate(),a=!1;if(typeof s=="string")if(s==="true")a=!0;else if(s==="false")a=!1;else return console.error("unexpected val in qti-or, expected boolean"),null;else typeof s=="boolean"&&(a=s);return a}).every(r=>typeof r=="boolean"&&r)}}}var Uo=class extends L{constructor(){super(...arguments);this.baseType="string"}getResult(){return this.textContent.trim()}};d([b({type:String,attribute:"base-type"})],Uo.prototype,"baseType",2);customElements.define("qti-base-value",Uo);var Qs=class extends L{getResult(){if(this.children?.length!==1)return console.error("qti-container-size must have exactly one child expression"),0;let i=this.getVariables();if(!i||i?.length===0)return 0;let e=i[0];return e.value===null||e.value===void 0?0:e.cardinality!=="multiple"&&e.cardinality!=="ordered"?(console.error("qti-container-size requires multiple or ordered cardinality"),0):Array.isArray(e.value)?e.value.length:(console.error("qti-container-size: expected array value for multiple/ordered cardinality"),0)}};customElements.define("qti-container-size",Qs);var Js=class extends fe{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,o=t.value;return r.filter(l=>o.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",Js);var Ys=class extends L{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",Ys);var vr=class extends L{constructor(){super(...arguments);this.identifier=""}getResult(){if(!this.identifier)return console.error("qti-default requires an identifier attribute"),null;let e=this.identifier.split("."),t=null,r;if(e.length===2)t=e[0],r=e[1];else if(e.length===1)r=e[0];else return console.error("qti-default: invalid identifier format"),null;if(t){let s=this._testContext.items.find(l=>l.identifier===t);if(console.debug(`itemContext: ${JSON.stringify(s)}`),!this._testContext||!s)return console.warn(`qti-default: item "${t}" not found in test context`),null;let a=this._testContext.items.find(l=>l.identifier===t)?.variables.find(l=>l.identifier===r);return a?a.defaultValue||null:(console.warn(`qti-default: variable "${r}" not found in item "${t}"`),null)}if(!this.context?.variables)return console.warn("qti-default: no variables found in item context"),null;let o=this.context.variables.find(s=>s.identifier===r);return o?o.defaultValue||null:(console.warn(`qti-default: variable "${r}" not found in item context`),null)}};d([b({type:String})],vr.prototype,"identifier",2),d([P({context:G,subscribe:!0}),R()],vr.prototype,"context",2),d([R(),P({context:Ie,subscribe:!0})],vr.prototype,"_testContext",2);customElements.define("qti-default",vr);var zo=class extends L{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 o=parseFloat(t.value),s=parseFloat(r.value);if(!isNaN(o)&&!isNaN(s))return this.roundingMode==="significantFigures"?o.toPrecision(this.figures)===s.toPrecision(this.figures):Math.round(o*Math.pow(10,this.figures))/Math.pow(10,this.figures)===Math.round(s*Math.pow(10,this.figures))/Math.pow(10,this.figures);console.error(`value cannot be casted to numeric value in equalRounded operator: ${o}, ${s}`);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}};d([b({type:String})],zo.prototype,"roundingMode",2);customElements.define("qti-equal-rounded",zo);var Ks=class extends L{getResult(){if(this.children.length!==1)return console.error("qti-round must have exactly one child expression"),null;let i=this.getVariables();if(!i||i.length===0)return null;let e=i[0];if(e.cardinality!=="single")return console.error("qti-round requires single cardinality"),null;if(Array.isArray(e.value))return console.error("qti-round unexpected array value for single cardinality"),null;if(e.value===null||e.value===void 0)return null;if(e.baseType!=="integer"&&e.baseType!=="float")return console.error("qti-round requires numerical base-type (integer or float)"),null;let t=parseFloat(e.value);return isNaN(t)?(console.warn("qti-round: NaN input results in NULL"),null):isFinite(t)?Math.floor(t+.5):t===1/0?1/0:t===-1/0?-1/0:null}};customElements.define("qti-round",Ks);var _i=class extends L{constructor(){super(...arguments);this.roundingMode="significantFigures";this.figures=3}getResult(){if(this.children.length!==1)return console.error("qti-round-to must have exactly one child expression"),null;let e=this.getVariables();if(!e||e.length===0)return null;let t=e[0];if(t.cardinality!=="single")return console.error("qti-round-to requires single cardinality"),null;if(Array.isArray(t.value))return console.error("qti-round-to unexpected array value for single cardinality"),null;if(t.value===null||t.value===void 0)return null;if(t.baseType!=="integer"&&t.baseType!=="float")return console.error("qti-round-to requires numerical base-type"),null;let r=parseFloat(t.value);return isNaN(r)?null:isFinite(r)?this.figures<0?(console.error("qti-round-to: figures must be non-negative"),null):this.roundingMode==="significantFigures"&&this.figures<1?(console.error("qti-round-to: figures must be at least 1 for significantFigures mode"),null):this.roundingMode==="decimalPlaces"?this.#e(r,this.figures):this.#t(r,this.figures):r===1/0?1/0:r===-1/0?-1/0:null}#e(e,t){if(e===0)return 0;let r=Math.pow(10,t);return Math.round(e*r)/r}#t(e,t){if(e===0)return 0;let r=Math.floor(Math.log10(Math.abs(e))),o=Math.pow(10,t-r-1);return Math.round(e*o)/o}};d([b({type:String,attribute:"rounding-mode"})],_i.prototype,"roundingMode",2),d([b({type:Number})],_i.prototype,"figures",2);customElements.define("qti-round-to",_i);var jo=class extends L{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):K.compareSingleValues(t.value,r.value,t.baseType)}return console.error("unexpected number of children in qti-equal"),null}};d([b({type:String})],jo.prototype,"toleranceMode",2);customElements.define("qti-equal",jo);var Zs=class extends L{getResult(){if(this.children.length===0)return console.error("qti-gcd must have at least one child expression"),null;let i=this.getVariables();if(!i||i.length===0)return null;let e=[];for(let t of i){if(t.baseType!=="integer")return console.error("qti-gcd requires integer base-type"),null;if(t.value===null||t.value===void 0)return null;if(t.cardinality==="single"){if(Array.isArray(t.value))return console.error("qti-gcd unexpected array value for single cardinality"),null;let r=parseInt(t.value,10);if(isNaN(r))return console.error("qti-gcd non-numerical value"),null;e.push(r)}else if(t.cardinality==="multiple"||t.cardinality==="ordered"){if(!Array.isArray(t.value))return console.error("qti-gcd expected array value for multiple/ordered cardinality"),null;for(let r of t.value){if(r==null)return null;let o=parseInt(r,10);if(isNaN(o))return console.error("qti-gcd non-numerical value"),null;e.push(o)}}else return console.error("qti-gcd unsupported cardinality"),null}return e.length===0?null:this.#e(e)}#e(i){if(i.length===0)return 0;if(i.length===1)return Math.abs(i[0]);let e=Math.abs(i[0]);for(let t=1;t<i.length&&(e=this.#t(e,Math.abs(i[t])),e!==1);t++);return e}#t(i,e){if(i===0&&e===0)return 0;if(i===0)return e;if(e===0)return i;for(;e!==0;){let t=e;e=i%e,i=t}return i}};customElements.define("qti-gcd",Zs);var en=class extends L{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",en);var tn=class extends fe{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",tn);var rn=class extends L{getResult(){return null}};customElements.define("qti-null",rn);var on=class extends L{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",on);var sn=class extends L{getResult(){let i=this.getAttribute("field-identifier");if(!i)throw new Error("field-identifier attribute is required");if(Array.from(this.children).length!==1)throw new Error("qti-field-value must have exactly one child expression");let t=this.getVariables()[0];if(t.baseType!=="record"||t.value===null)throw new Error("qti-field-value child expression must return a record");let r=t.value[i];if(r===void 0)throw new Error(`Field "${i}" not found in record`);return r}};customElements.define("qti-field-value",sn);var nn=class extends L{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",nn);var an=class extends fe{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",an);var Wo=class extends L{getResult(){let i=this.context.variables.find(o=>o.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 o of t){let s=e.mapEntries.filter(l=>i.baseType==="string"&&!l.caseSensitive?K.compareSingleValues(l.mapKey.toLowerCase(),o.toLowerCase(),i.baseType):K.compareSingleValues(l.mapKey,o,i.baseType)),a=s.reduce((l,c)=>l.mappedValue>c.mappedValue?l:c,s.length>0?s[0]:{mapKey:null,mappedValue:null});a===null||a.mappedValue==null?r+=e.defaultValue:r+=a.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}};d([b({type:String})],Wo.prototype,"identifier",2);customElements.define("qti-map-response",Wo);var Go=class extends L{getResult(){let i=this.context.variables.find(s=>s.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,o=new Set;for(let s of t)for(let a of e.areaMapEntries){if(o.has(a.coords))continue;K.isPointInArea(s,`${a.shape},${a.coords}`,i.baseType)&&(r+=a.mappedValue??0,o.add(a.coords))}return o.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}};d([b({type:String})],Go.prototype,"identifier",2);customElements.define("qti-map-response-point",Go);var Xo=class extends L{constructor(){super(...arguments);this.name=""}getResult(){if(!this.name)return console.error("qti-math-operator requires a name attribute"),null;let e=this.getVariables();if(!e||e.length===0)return null;let t=[];for(let r of e){if(r.cardinality!=="single")return console.error("qti-math-operator requires single cardinality"),null;if(Array.isArray(r.value))return console.error("qti-math-operator unexpected array value for single cardinality"),null;if(r.value===null||r.value===void 0)return null;if(r.baseType!=="integer"&&r.baseType!=="float")return console.error("qti-math-operator requires numerical base-type"),null;let o=parseFloat(r.value);if(isNaN(o))return console.error("qti-math-operator non-numerical value"),null;t.push(o)}return this.#e(this.name,t)}#e(e,t){try{switch(e.toLowerCase()){case"sin":return t.length!==1?null:Math.sin(t[0]);case"cos":return t.length!==1?null:Math.cos(t[0]);case"tan":return t.length!==1?null:Math.tan(t[0]);case"asin":return t.length!==1||t[0]<-1||t[0]>1?null:Math.asin(t[0]);case"acos":return t.length!==1||t[0]<-1||t[0]>1?null:Math.acos(t[0]);case"atan":return t.length!==1?null:Math.atan(t[0]);case"sinh":return t.length!==1?null:Math.sinh(t[0]);case"cosh":return t.length!==1?null:Math.cosh(t[0]);case"tanh":return t.length!==1?null:Math.tanh(t[0]);case"log":return t.length!==1||t[0]<=0?null:Math.log(t[0]);case"ln":return t.length!==1||t[0]<=0?null:Math.log(t[0]);case"log10":return t.length!==1||t[0]<=0?null:Math.log10(t[0]);case"exp":return t.length!==1?null:Math.exp(t[0]);case"abs":return t.length!==1?null:Math.abs(t[0]);case"sqrt":return t.length!==1||t[0]<0?null:Math.sqrt(t[0]);case"signum":return t.length!==1?null:Math.sign(t[0]);case"floor":return t.length!==1?null:Math.floor(t[0]);case"ceil":return t.length!==1?null:Math.ceil(t[0]);case"round":return t.length!==1?null:Math.round(t[0]);case"atan2":return t.length!==2?null:Math.atan2(t[0],t[1]);case"pow":{if(t.length!==2)return null;let r=t[0],o=t[1];return r===0&&o<=0||r<0&&!Number.isInteger(o)?null:Math.pow(r,o)}case"log_base":{if(t.length!==2)return null;let r=t[0],o=t[1];return r<=0||o<=0||o===1?null:Math.log(r)/Math.log(o)}case"mod":return t.length!==2||t[1]===0?null:t[0]%t[1];case"max":return t.length<1?null:Math.max(...t);case"min":return t.length<1?null:Math.min(...t);default:return console.error(`qti-math-operator: unknown operation "${e}"`),null}}catch(r){return console.error(`qti-math-operator: error performing operation "${e}":`,r),null}}};d([b({type:String})],Xo.prototype,"name",2);customElements.define("qti-math-operator",Xo);var ln=class n extends L{getResult(){if(this.children.length===2){let i=this.getVariables(),e=i[0],t=i[1];return n.match(e,t)}return console.error("unexpected number of children in match"),null}static match(i,e){if(i.value===null)return!1;switch(e.cardinality){case"single":return Array.isArray(i.value)||Array.isArray(e.value)?(console.error("unexpected cardinality in qti match"),!1):K.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(!K.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 o=null,s=[...i.value];for(let a of s)if(K.compareSingleValues(r,a,e.baseType)){o=a;break}if(o!==null)s.splice(s.indexOf(o),1);else return!1;t++}return!0}default:return console.error("unexpected cardinality in qti match"),!1}}};customElements.define("qti-match",ln);var cn=class extends L{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",cn);var dn=class extends L{getResult(){console.debug("qti-multiple getResult called",this.innerHTML);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",dn);var pn=class extends L{render(){return x`${super.render()}`}getResult(){return!this.firstElementChild.calculate()}};customElements.define("qti-not",pn);var un=class extends fe{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(),o=!1;if(typeof r=="string")if(r==="true")o=!0;else if(r==="false")o=!1;else return console.error("unexpected val in qti-or, expected boolean"),null;else typeof r=="boolean"&&(o=r);return o}).some(e=>typeof e=="boolean"&&e)}};customElements.define("qti-or",un);var mn=class extends L{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",mn);var hn=class extends L{getResult(){if(this.children.length!==2)return console.error("qti-power must have exactly two child expressions"),null;let i=this.getVariables();if(!i||i.length!==2)return null;let[e,t]=i;if(e.cardinality!=="single"||t.cardinality!=="single")return console.error("qti-power requires single cardinality for both expressions"),null;if(Array.isArray(e.value)||Array.isArray(t.value))return console.error("qti-power unexpected array value for single cardinality"),null;if(e.value===null||e.value===void 0||t.value===null||t.value===void 0)return null;if(e.baseType!=="integer"&&e.baseType!=="float"||t.baseType!=="integer"&&t.baseType!=="float")return console.error("qti-power requires numerical base-types"),null;let r=parseFloat(e.value),o=parseFloat(t.value);if(isNaN(r)||isNaN(o))return console.error("qti-power: non-numerical values encountered"),null;if(r===0&&o<=0||r<0&&!Number.isInteger(o))return null;let s;try{s=Math.pow(r,o)}catch(a){return console.error("qti-power: error calculating power:",a),null}if(isNaN(s))return null;if(s===1/0||s===-1/0)return s;if(!isFinite(s)||Math.abs(s)>Number.MAX_VALUE||s!==0&&Math.abs(s)<Number.MIN_VALUE)return null;if(isFinite(s)&&s!==0){let a=Math.floor(Math.log10(Math.abs(s))),l=Math.max(0,14-a),c=Math.pow(10,l);s=Math.round(s*c)/c}return s}};customElements.define("qti-power",hn);var Li=class extends C{render(){let i=this.context?.variables.find(e=>e.identifier===this.identifier)?.value;return i===null?N:x`${JSON.stringify(i,null,2)}`}calculate(){return this.context.variables.find(e=>e.identifier===this.identifier)||null}};d([b({type:String})],Li.prototype,"identifier",2),d([P({context:G,subscribe:!0}),R()],Li.prototype,"context",2);customElements.define("qti-printed-variable",Li);var fn=class extends L{getResult(){return this.getVariables().reduce((t,r)=>{if(r.baseType=="float"||r.baseType=="integer")try{return t*parseFloat(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",fn);var Qo=class extends vd(L){getResult(){return this.calculateChildren(Array.from(this.children))}};function vd(n){return class extends n{calculateChildren(e){let t=e.map(r=>{if(!r.calculate)return console.error("Element doesn't implement QtiConditionExpression"),null;let o=r.calculate();return Number.isNaN(o)?(console.error("Unexpected value in qti-subtract, expected number"),null):Number(o)});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",Qo);var Jo=class extends L{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 o=this.caseSensitive==="true"?t.value:t.value.toLowerCase(),s=this.caseSensitive==="true"?r.value:r.value.toLowerCase();return K.compareSingleValues(o,s,t.baseType)}return console.error("unexpected number of children in qti-string-match"),null}};d([b({type:String,attribute:"case-sensitive"})],Jo.prototype,"caseSensitive",2);customElements.define("qti-string-match",Jo);var gn=class extends L{getResult(){return new bn(Array.from(this.children)).calculate()}},bn=class{constructor(i){this.expressions=i}calculate(){return this.expressions.filter(t=>t.calculate!==void 0).some(t=>t.calculate()===null)?null:this.expressions.map(t=>{let r=t.calculate();return Number.isNaN(r)?(console.error("unexpected value in qti-sum, expected number"),null):Number(r)}).reduce((t,r)=>t+r,0)}};customElements.define("qti-sum",gn);var vn=class extends L{getResult(){let i=this.getAttribute("identifier");return this.context.variables.find(t=>t.identifier===i).value}};customElements.define("qti-variable",vn);var yr=class extends L{constructor(){super(...arguments);this.min=0;this.max=10;this.step=1}getResult(){if(this.min>this.max)return console.error("qti-random-integer: min cannot be greater than max"),this.min;if(this.step<=0)return console.error("qti-random-integer: step must be positive"),this.min;let e=[],t=0;for(;;){let o=this.min+this.step*t;if(o>this.max)break;Number.isInteger(o)&&e.push(o),t++}if(e.length===0)return console.warn("qti-random-integer: no valid integer values in range"),Number.isInteger(this.min)?this.min:Math.floor(this.min);let r=Math.floor(Math.random()*e.length);return e[r]}getPossibleValues(){let e=[];if(this.min>this.max||this.step<=0)return[Number.isInteger(this.min)?this.min:Math.floor(this.min)];let t=0;for(;;){let r=this.min+this.step*t;if(r>this.max)break;Number.isInteger(r)&&e.push(r),t++}return e.length>0?e:[Number.isInteger(this.min)?this.min:Math.floor(this.min)]}};d([b({type:Number})],yr.prototype,"min",2),d([b({type:Number})],yr.prototype,"max",2),d([b({type:Number})],yr.prototype,"step",2);customElements.define("qti-random-integer",yr);var yn=class extends L{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",yn);var xn=class extends L{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(o=>!e.value.includes(o))}return null}};customElements.define("qti-delete",xn);var Yo,oc,Pi=class extends L{constructor(){super(...arguments);_(this,Yo)}getResult(){if(!this.n)return console.error('qti-index: missing required attribute "n"'),null;if(this.children.length!==1)return console.error("qti-index: must have exactly one child container element"),null;let e=this.getVariables()[0];if(!e)return console.error("qti-index: missing container"),null;let t;if(!isNaN(Number(this.n)))t=Number(this.n);else{let r=D(this,Yo,oc).call(this,this.n);if(r===null)return console.error(`qti-index: variable "${this.n}" is not a valid number`),null;t=Number(r)}if(t<=0||!Number.isInteger(t))return console.error("qti-index: index must be a positive integer"),null;if(e.cardinality==="ordered"){let r=Array.isArray(e.value)?e.value:[e.value];return e.value===null||t>r.length?null:r[t-1]}else return console.error("qti-index: child must have ordered cardinality"),null}};Yo=new WeakSet,oc=function(e){let t=this.context.variables.find(r=>r.identifier===e)?.value;return t===null||isNaN(Number(t))?null:Number(t)},d([b({type:String})],Pi.prototype,"n",2),Pi=d([k("qti-index")],Pi);export{la as Correctness,vs as INITIAL_SESSION_CONTEXT,ys as INITIAL_TEST_CONTEXT,$ as Interaction,qs as IsNullOrUndefined,We as ItemContainer,Pt as ItemCorrectResponseMode,mr as ItemPrintVariables,xe as ItemShowCandidateCorrection,qe as ItemShowCorrectResponse,Bo as QtiAnd,ce as QtiAssessmentItem,Fe as QtiAssessmentItemRef,Be as QtiAssessmentSection,Zt as QtiAssessmentStimulusRef,Ss as QtiAssessmentStimulusRefConnectedEvent,It as QtiAssessmentTest,Co as QtiAssociableHotspot,Si as QtiAssociateInteraction,Uo as QtiBaseValue,Ti as QtiChoiceInteraction,eo as QtiCompanionMaterialsInfo,fe as QtiConditionExpression,Qs as QtiContainerSize,Js as QtiContains,to as QtiContentBody,Mt as QtiContextDeclaration,Ys as QtiCorrect,Ge as QtiCustomInteraction,jr as QtiCustomOperator,vr as QtiDefault,xn as QtiDelete,ft as QtiEndAttemptInteraction,jo as QtiEqual,zo as QtiEqualRounded,L as QtiExpression,me as QtiExtendedTextInteraction,le as QtiFeedback,Gr as QtiFeedbackBlock,Xr as QtiFeedbackInline,sn as QtiFieldValue,yi as QtiGap,xi as QtiGapImg,Lo as QtiGapMatchInteraction,qi as QtiGapText,Zs as QtiGcd,Xe as QtiGraphicAssociateInteraction,Po as QtiGraphicGapMatchInteraction,Do as QtiGraphicOrderInteraction,en as QtiGt,tn as QtiGte,fr as QtiHotspotChoice,$o as QtiHotspotInteraction,Eo as QtiHottext,Ai as QtiHottextInteraction,Pi as QtiIndex,wi as QtiInlineChoice,bt as QtiInlineChoiceInteraction,on as QtiIsNull,hr as QtiItem,Qr as QtiItemBody,ki as QtiLookupOutcomeValue,nn as QtiLt,an as QtiLte,Wo as QtiMapResponse,Go as QtiMapResponsePoint,ln as QtiMatch,vt as QtiMatchInteraction,Xo as QtiMathOperator,Oo as QtiMediaInteraction,cn as QtiMember,kt as QtiModalFeedback,dn as QtiMultiple,pn as QtiNot,rn as QtiNull,un as QtiOr,yt as QtiOrderInteraction,mn as QtiOrdered,_e as QtiOutcomeDeclaration,Z as QtiPortableCustomInteraction,No as QtiPositionObjectInteraction,Ho as QtiPositionObjectStage,hn as QtiPower,Li as QtiPrintedVariable,fn as QtiProduct,So as QtiPrompt,yn as QtiRandom,yr as QtiRandomInteger,js as QtiResponseCondition,ze as QtiResponseDeclaration,Mi as QtiResponseElse,Xs as QtiResponseElseIf,Ri as QtiResponseIf,Yr as QtiResponseProcessing,Ks as QtiRound,_i as QtiRoundTo,Re as QtiRubricBlock,ca as QtiRuleElement,Qe as QtiSelectPointInteraction,Ws as QtiSetOutcomeValue,Gs as QtiSetOutcomeValueRule,Dt as QtiSimpleAssociableChoice,ct as QtiSimpleChoice,xt as QtiSliderInteraction,Jo as QtiStringMatch,ro as QtiStylesheet,Qo as QtiSubtract,gn as QtiSum,bn as QtiSumExpression,Le as QtiTemplateDeclaration,Zi as QtiTest,Kr as QtiTestFeedback,Ue as QtiTestPart,Ee as QtiTextEntryInteraction,Fo as QtiUploadInteraction,vn as QtiVariable,Jt as QtiVariableDeclaration,K as ScoringHelper,mi as TestCheckItem,je as TestContainer,ei as TestEndAttempt,rr as TestItemLink,be as TestNavigation,at as TestNext,ni as TestPagingButtonsStamp,lt as TestPrev,pi as TestPrintContext,sr as TestPrintVariables,Lt as TestScoringButtons,ar as TestScoringFeedback,ci as TestSectionButtonsStamp,nr as TestSectionLink,ye as TestShowCorrectResponse,_t as TestStamp,ie as TestView,ui as TestViewToggle,W as computedContext,Ze as computedItemContext,he as configContext,Pr as convertNumberToUniversalFormat,kc as decimalSeparator,nk as getItemByUri,sk as getManifestInfo,G as itemContext,ta as itemContextVariables,bd as qtiAndMixin,Xt as qtiContext,vd as qtiSubtractMixin,Ae as qtiTransformItem,Kn as qtiTransformManifest,jt as qtiTransformTest,Ki as removeDoubleSlashes,et as sessionContext,Ie as testContext};
|
|
6156
|
+
`}async#r(r){let e=r.target;e.files&&e.files.length>0&&(this.#e=e.files[0],this.#t=await this.#i(this.#e),this.saveResponse(this.#t),this.dispatchEvent(new CustomEvent("qti-interaction-response",{detail:{response:this.#t}})))}#i(r){return new Promise((e,t)=>{let i=new FileReader;i.onload=()=>e(i.result),i.onerror=()=>t(i.error),i.readAsDataURL(r)})}};customElements.define("qti-upload-interaction",vo);var EM=async s=>{let r=s.substring(0,s.lastIndexOf("/")),e=await Za().load(`${s}`).then(a=>a.assessmentTest()),t=await rr().load(`${r}/${e.href}`).then(a=>a.htmlDoc()),i=await rr().load(`${r}/${e.href}`).then(a=>a.items()),n=`${r}/${e.href}`,o=`${r}/${e.href.substring(0,e.href.lastIndexOf("/"))}`;return{testHTMLDoc:t,testURI:o,testURL:n,items:i,testIdentifier:e.identifier}},SM=async s=>Me().load(s).then(r=>r.htmlDoc().firstElementChild);var ae=class extends C{render(){return x`<slot></slot>`}process(){throw new Error("Not implemented")}};ae=d([k("qti-rule")],ae);var Gi=class extends ae{get childExpression(){return this.firstElementChild}process(){let r=this.getAttribute("identifier"),e=this.context.variables.find(i=>i.identifier===r)||null,t;return e.interpolationTable&&(t=e.interpolationTable.get(parseFloat(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:we(t)}})),t)}};d([g({type:String})],Gi.prototype,"identifier",2),d([$({context:W,subscribe:!0}),M()],Gi.prototype,"context",2);customElements.define("qti-lookup-outcome-value",Gi);var ks=class extends ae{render(){return x`<slot></slot>`}process(){let r=[...this.children];for(let e=0;e<r.length;e++){let t=r[e];if(t.calculate()){t.process();return}}}};customElements.define("qti-response-condition",ks);var Ms=class extends ae{process(){let r=this.getAttribute("identifier");if(!r){console.warn('QtiSetOutcomeValue: Missing "identifier" attribute.');return}let e=this.firstElementChild;if(!e){console.warn("QtiSetOutcomeValue: No expression found.");return}let i=new _s(e).process();this.dispatchEvent(new CustomEvent("qti-set-outcome-value",{bubbles:!0,composed:!0,detail:{outcomeIdentifier:r,value:this.#e(i)}}))}#e(r){return Array.isArray(r)?r.map(we):r!==null?we(r):null}},_s=class{constructor(r){this.expression=r}process(){let r=this.expression.calculate()??null;return r===null&&console.warn("QtiSetOutcomeValueRule: Evaluated value is null."),Array.isArray(r)?r.map(e=>e.value?e.value:e):r}};customElements.define("qti-set-outcome-value",Ms);var Xi=class extends C{render(){return x`<slot></slot>`}calculate(){return!0}getSubRules(){return[...this.children]}process(){let r=this.getSubRules();for(let e=0;e<r.length;e++)r[e].process()}};customElements.define("qti-response-else",Xi);var Qi=class extends Xi{calculate(){return this.firstElementChild.calculate()}getSubRules(){let r=[];for(let e=1;e<this.children.length;e++)r.push(this.children[e]);return r}};customElements.define("qti-response-if",Qi);var Ls=class extends Qi{render(){return x`${super.render()}`}};customElements.define("qti-response-else-if",Ls);var yo=class extends Hp(ve){calculate(){return this.calculateChildren(Array.from(this.children))}};yo=d([k("qti-and")],yo);function Hp(s){return class extends s{calculateChildren(e){return e.map(i=>{let n=i;if(!n.calculate)return console.error("Element doesn't implement QtiConditionExpression"),null;let o=n.calculate(),a=!1;if(typeof o=="string")if(o==="true")a=!0;else if(o==="false")a=!1;else return console.error("unexpected val in qti-or, expected boolean"),null;else typeof o=="boolean"&&(a=o);return a}).every(i=>typeof i=="boolean"&&i)}}}var Yi=class extends R{constructor(){super(...arguments);this.min=0;this.max=1/0}getResult(){let e=this.getVariables();if(!e||e.length===0)return console.error("qti-any-n requires at least one child expression"),null;if(this.min<0||this.max<this.min)return console.error("qti-any-n requires 0 <= min <= max"),null;let t=0;for(let i of e){if(i.cardinality!=="single"||Array.isArray(i.value))return console.error("qti-any-n requires single cardinality boolean expressions"),null;if(i.baseType!=="boolean")return console.error("qti-any-n requires boolean base-type"),null;if(i.value===null||i.value===void 0)return null;i.value==="true"&&t++}return t>=this.min&&t<=this.max}};d([g({type:Number})],Yi.prototype,"min",2),d([g({type:Number})],Yi.prototype,"max",2);customElements.define("qti-any-n",Yi);var xo=class extends R{constructor(){super(...arguments);this.baseType="string"}getResult(){return this.textContent.trim()}};d([g({type:String,attribute:"base-type"})],xo.prototype,"baseType",2);customElements.define("qti-base-value",xo);var $s=class extends R{getResult(){if(this.children?.length!==1)return console.error("qti-container-size must have exactly one child expression"),0;let r=this.getVariables();if(!r||r?.length===0)return 0;let e=r[0];return e.value===null||e.value===void 0?0:e.cardinality!=="multiple"&&e.cardinality!=="ordered"?(console.error("qti-container-size requires multiple or ordered cardinality"),0):Array.isArray(e.value)?e.value.length:(console.error("qti-container-size: expected array value for multiple/ordered cardinality"),0)}};customElements.define("qti-container-size",$s);var Ps=class extends ve{getResult(){let r=this.getVariables();if(this.children.length===2){let e=r[0],t=r[1];if(e.baseType==="directedPair"&&t.baseType==="directedPair"&&e.cardinality==="multiple"){let i=e.value,n=t.value;return i.filter(l=>n.includes(l)).length>0}else if(e.baseType==="directedPair"&&t.baseType==="directedPair"&&e.cardinality==="single"){let i=e.value;return t.value.includes(i)}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",Ps);var Vs=class extends R{get interpretation(){return this.getAttribute("interpretation")||""}getResult(){let r=this.getAttribute("identifier")||"",e=this.context.variables.find(t=>t.identifier===r)||null;return e.cardinality!=="single"?e.correctResponse.length>0?e.correctResponse[0]:"":e.correctResponse}};customElements.define("qti-correct",Vs);var kr=class extends R{constructor(){super(...arguments);this.identifier=""}getResult(){if(!this.identifier)return console.error("qti-default requires an identifier attribute"),null;let e=this.identifier.split("."),t=null,i;if(e.length===2)t=e[0],i=e[1];else if(e.length===1)i=e[0];else return console.error("qti-default: invalid identifier format"),null;if(t){let o=this._testContext.items.find(l=>l.identifier===t);if(console.debug(`itemContext: ${JSON.stringify(o)}`),!this._testContext||!o)return console.warn(`qti-default: item "${t}" not found in test context`),null;let a=this._testContext.items.find(l=>l.identifier===t)?.variables.find(l=>l.identifier===i);return a?a.defaultValue||null:(console.warn(`qti-default: variable "${i}" not found in item "${t}"`),null)}if(!this.context?.variables)return console.warn("qti-default: no variables found in item context"),null;let n=this.context.variables.find(o=>o.identifier===i);return n?n.defaultValue||null:(console.warn(`qti-default: variable "${i}" not found in item context`),null)}};d([g({type:String})],kr.prototype,"identifier",2),d([$({context:W,subscribe:!0}),M()],kr.prototype,"context",2),d([M(),$({context:_e,subscribe:!0})],kr.prototype,"_testContext",2);customElements.define("qti-default",kr);var qo=class extends R{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],i=e[1];if(this.roundingMode===null)return null;if(t.cardinality!=="single"||i.cardinality!=="single"||Array.isArray(t.value)||Array.isArray(i.value))return console.error("unexpected cardinality in qti equal"),!1;switch(e[0].baseType){case"integer":case"float":{let n=parseFloat(t.value),o=parseFloat(i.value);if(!isNaN(n)&&!isNaN(o))return this.roundingMode==="significantFigures"?n.toPrecision(this.figures)===o.toPrecision(this.figures):Math.round(n*Math.pow(10,this.figures))/Math.pow(10,this.figures)===Math.round(o*Math.pow(10,this.figures))/Math.pow(10,this.figures);console.error(`value cannot be casted to numeric value in equalRounded operator: ${n}, ${o}`);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}};d([g({type:String})],qo.prototype,"roundingMode",2);customElements.define("qti-equal-rounded",qo);var Ds=class extends R{getResult(){if(this.children.length!==1)return console.error("qti-round must have exactly one child expression"),null;let r=this.getVariables();if(!r||r.length===0)return null;let e=r[0];if(e.cardinality!=="single")return console.error("qti-round requires single cardinality"),null;if(Array.isArray(e.value))return console.error("qti-round unexpected array value for single cardinality"),null;if(e.value===null||e.value===void 0)return null;if(e.baseType!=="integer"&&e.baseType!=="float")return console.error("qti-round requires numerical base-type (integer or float)"),null;let t=parseFloat(e.value);return isNaN(t)?(console.warn("qti-round: NaN input results in NULL"),null):isFinite(t)?Math.floor(t+.5):t===1/0?1/0:t===-1/0?-1/0:null}};customElements.define("qti-round",Ds);var Ji=class extends R{constructor(){super(...arguments);this.roundingMode="significantFigures";this.figures=3}getResult(){if(this.children.length!==1)return console.error("qti-round-to must have exactly one child expression"),null;let e=this.getVariables();if(!e||e.length===0)return null;let t=e[0];if(t.cardinality!=="single")return console.error("qti-round-to requires single cardinality"),null;if(Array.isArray(t.value))return console.error("qti-round-to unexpected array value for single cardinality"),null;if(t.value===null||t.value===void 0)return null;if(t.baseType!=="integer"&&t.baseType!=="float")return console.error("qti-round-to requires numerical base-type"),null;let i=parseFloat(t.value);return isNaN(i)?null:isFinite(i)?this.figures<0?(console.error("qti-round-to: figures must be non-negative"),null):this.roundingMode==="significantFigures"&&this.figures<1?(console.error("qti-round-to: figures must be at least 1 for significantFigures mode"),null):this.roundingMode==="decimalPlaces"?this.#e(i,this.figures):this.#t(i,this.figures):i===1/0?1/0:i===-1/0?-1/0:null}#e(e,t){if(e===0)return 0;let i=Math.pow(10,t);return Math.round(e*i)/i}#t(e,t){if(e===0)return 0;let i=Math.floor(Math.log10(Math.abs(e))),n=Math.pow(10,t-i-1);return Math.round(e*n)/n}};d([g({type:String,attribute:"rounding-mode"})],Ji.prototype,"roundingMode",2),d([g({type:Number})],Ji.prototype,"figures",2);customElements.define("qti-round-to",Ji);var wo=class extends R{constructor(){super(...arguments);this.toleranceMode="exact"}getResult(){if(this.children.length===2){let e=this.getVariables(),t=e[0],i=e[1];return!t||!i?null:this.toleranceMode!=="exact"?(console.error("toleranceMode is not supported yet"),!1):t.cardinality!=="single"||i.cardinality!=="single"||Array.isArray(t.value)||Array.isArray(i.value)?(console.error("unexpected cardinality in qti equal"),!1):t.value===null||i.value===null||t.value===void 0||i.value===void 0?null:J.compareSingleValues(t.value,i.value,t.baseType)}return console.error("unexpected number of children in qti-equal"),null}};d([g({type:String})],wo.prototype,"toleranceMode",2);customElements.define("qti-equal",wo);var Ns=class extends R{getResult(){let r=this.#e(this.getVariables());return r.length!==2?(console.warn("qti-divide: expected exactly 2 numeric values"),null):r[1]===0?(console.warn("qti-divide: division by zero"),null):r[0]/r[1]}#e(r){let e=[];for(let t of r){if(!t)continue;let i=n=>{if(n==null)return;let o=parseFloat(n.toString());if(Number.isNaN(o)){console.warn("qti-divide: non-numeric value encountered");return}e.push(o)};if(Array.isArray(t.value)){t.value.forEach(n=>i(n));continue}i(t.value)}return e}};customElements.define("qti-divide",Ns);var Os=class extends R{getResult(){let r=this.#e();return r?r[0]>=r[1]:null}#e(){let r=this.getVariables();if(r.length!==2)return console.error("qti-duration-gte requires exactly 2 duration expressions"),null;let e=r.map(t=>this.#t(t));return e.some(t=>t===null)?null:e}#t(r){if(r.cardinality!=="single"||Array.isArray(r.value))return console.error("qti-duration-gte requires single cardinality"),null;if(r.baseType!=="duration")return console.error("qti-duration-gte requires duration base-type"),null;if(r.value===null||r.value===void 0)return null;let e=Number.parseFloat(r.value.toString());return Number.isNaN(e)?(console.error(`qti-duration-gte requires duration values expressed in seconds, got "${r.value.toString()}"`),null):e}};customElements.define("qti-duration-gte",Os);var Hs=class extends R{getResult(){let r=this.#e();return r?r[0]<r[1]:null}#e(){let r=this.getVariables();if(r.length!==2)return console.error("qti-duration-lt requires exactly 2 duration expressions"),null;let e=r.map(t=>this.#t(t));return e.some(t=>t===null)?null:e}#t(r){if(r.cardinality!=="single"||Array.isArray(r.value))return console.error("qti-duration-lt requires single cardinality"),null;if(r.baseType!=="duration")return console.error("qti-duration-lt requires duration base-type"),null;if(r.value===null||r.value===void 0)return null;let e=Number.parseFloat(r.value.toString());return Number.isNaN(e)?(console.error(`qti-duration-lt requires duration values expressed in seconds, got "${r.value.toString()}"`),null):e}};customElements.define("qti-duration-lt",Hs);var Fs=class extends R{getResult(){if(this.children.length===0)return console.error("qti-gcd must have at least one child expression"),null;let r=this.getVariables();if(!r||r.length===0)return null;let e=[];for(let t of r){if(t.baseType!=="integer")return console.error("qti-gcd requires integer base-type"),null;if(t.value===null||t.value===void 0)return null;if(t.cardinality==="single"){if(Array.isArray(t.value))return console.error("qti-gcd unexpected array value for single cardinality"),null;let i=parseInt(t.value,10);if(isNaN(i))return console.error("qti-gcd non-numerical value"),null;e.push(i)}else if(t.cardinality==="multiple"||t.cardinality==="ordered"){if(!Array.isArray(t.value))return console.error("qti-gcd expected array value for multiple/ordered cardinality"),null;for(let i of t.value){if(i==null)return null;let n=parseInt(i,10);if(isNaN(n))return console.error("qti-gcd non-numerical value"),null;e.push(n)}}else return console.error("qti-gcd unsupported cardinality"),null}return e.length===0?null:this.#e(e)}#e(r){if(r.length===0)return 0;if(r.length===1)return Math.abs(r[0]);let e=Math.abs(r[0]);for(let t=1;t<r.length&&(e=this.#t(e,Math.abs(r[t])),e!==1);t++);return e}#t(r,e){if(r===0&&e===0)return 0;if(r===0)return e;if(e===0)return r;for(;e!==0;){let t=e;e=r%e,r=t}return r}};customElements.define("qti-gcd",Fs);var Us=class extends R{getResult(){if(this.children.length===2){let r=this.getVariables(),e=r[0],t=r[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",Us);var Bs=class extends ve{getResult(){if(this.children.length===2){let r=this.getVariables(),e=r[0],t=r[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",Bs);var Ki=class extends R{constructor(){super(...arguments);this.shape="";this.coords=""}getResult(){let e=this.getVariables();if(e.length!==1)return console.error("qti-inside requires exactly one point expression"),null;let t=e[0];if(t.cardinality!=="single"||Array.isArray(t.value))return console.error("qti-inside requires single cardinality"),null;if(t.value===null||t.value===void 0)return null;if(!this.shape||!this.coords)return console.error("qti-inside requires shape and coords attributes"),null;let i=this.#e(t.value.toString()),n=this.#t(this.coords);if(!i||n.length===0)return null;switch(this.shape.toLowerCase()){case"circle":return this.#r(i,n);case"rect":return this.#i(i,n);case"ellipse":return this.#n(i,n);case"poly":case"polygon":return this.#o(i,n);default:return console.error(`qti-inside does not support shape "${this.shape}"`),null}}#e(e){let t=e.split(/[,\s]+/).map(o=>o.trim()).filter(Boolean);if(t.length!==2)return console.error('qti-inside requires a point value formatted as "x y" or "x,y"'),null;let i=Number.parseFloat(t[0]),n=Number.parseFloat(t[1]);return Number.isNaN(i)||Number.isNaN(n)?(console.error("qti-inside requires numeric point coordinates"),null):{x:i,y:n}}#t(e){let t=e.split(",").map(i=>i.trim()).filter(Boolean).map(i=>Number.parseFloat(i));return t.some(i=>Number.isNaN(i))?(console.error("qti-inside requires numeric coords"),[]):t}#r(e,t){if(t.length!==3)return console.error("qti-inside circle requires x,y,r"),null;let[i,n,o]=t;return(e.x-i)**2+(e.y-n)**2<=o**2}#i(e,t){if(t.length!==4)return console.error("qti-inside rect requires left,top,right,bottom"),null;let[i,n,o,a]=t,l=Math.min(i,o),c=Math.max(i,o),p=Math.min(n,a),u=Math.max(n,a);return e.x>=l&&e.x<=c&&e.y>=p&&e.y<=u}#n(e,t){if(t.length!==4)return console.error("qti-inside ellipse requires centerX,centerY,radiusX,radiusY"),null;let[i,n,o,a]=t;return o===0||a===0?!1:(e.x-i)**2/o**2+(e.y-n)**2/a**2<=1}#o(e,t){if(t.length<6||t.length%2!==0)return console.error("qti-inside polygon requires at least 3 coordinate pairs"),null;let i=!1;for(let n=0,o=t.length-2;n<t.length;n+=2){let a=t[n],l=t[n+1],c=t[o],p=t[o+1];l>e.y!=p>e.y&&e.x<(c-a)*(e.y-l)/(p-l||Number.EPSILON)+a&&(i=!i),o=n}return i}};d([g({type:String})],Ki.prototype,"shape",2),d([g({type:String})],Ki.prototype,"coords",2);customElements.define("qti-inside",Ki);var zs=class extends R{getResult(){let r=this.#e(this.getVariables());return r.length!==2?(console.error("qti-integer-divide requires exactly 2 integer values"),null):r[1]===0?(console.error("qti-integer-divide: division by zero"),null):Math.floor(r[0]/r[1])}#e(r){let e=[];for(let t of r){if(t.baseType!=="integer")return console.error("qti-integer-divide requires integer base-type"),[];if(t.cardinality!=="single"||Array.isArray(t.value))return console.error("qti-integer-divide requires single cardinality"),[];if(t.value===null||t.value===void 0)return[];let i=Number.parseInt(t.value,10);if(Number.isNaN(i))return console.error("qti-integer-divide requires integer values"),[];e.push(i)}return e}};customElements.define("qti-integer-divide",zs);var js=class extends R{getResult(){let r=this.#e(this.getVariables());return r.length!==2?(console.error("qti-integer-modulus requires exactly 2 integer values"),null):r[1]===0?(console.error("qti-integer-modulus: division by zero"),null):r[0]%r[1]}#e(r){let e=[];for(let t of r){if(t.baseType!=="integer")return console.error("qti-integer-modulus requires integer base-type"),[];if(t.cardinality!=="single"||Array.isArray(t.value))return console.error("qti-integer-modulus requires single cardinality"),[];if(t.value===null||t.value===void 0)return[];let i=Number.parseInt(t.value,10);if(Number.isNaN(i))return console.error("qti-integer-modulus requires integer values"),[];e.push(i)}return e}};customElements.define("qti-integer-modulus",js);var Ws=class extends R{getResult(){let r=this.getVariables();if(r.length!==1)return console.error("qti-integer-to-float requires exactly one child expression"),null;let e=r[0];if(e.baseType!=="integer")return console.error("qti-integer-to-float requires integer base-type"),null;if(e.cardinality!=="single"||Array.isArray(e.value))return console.error("qti-integer-to-float requires single cardinality"),null;if(e.value===null||e.value===void 0)return null;let t=Number.parseInt(e.value,10);return Number.isNaN(t)?(console.error("qti-integer-to-float requires an integer value"),null):t}};customElements.define("qti-integer-to-float",Ws);var Gs=class extends R{getResult(){let r=this.#e(this.getVariables());return r.length===0?(console.error("qti-lcm requires at least one integer value"),null):r.reduce((e,t)=>this.#r(e,t))}#e(r){let e=[];for(let t of r){if(t.baseType!=="integer")return console.error("qti-lcm requires integer base-type"),[];if(t.value===null||t.value===void 0)return[];if(t.cardinality==="single"){if(Array.isArray(t.value))return console.error("qti-lcm unexpected array value for single cardinality"),[];let i=Number.parseInt(t.value,10);if(Number.isNaN(i))return console.error("qti-lcm requires integer values"),[];e.push(i);continue}if(t.cardinality!=="multiple"&&t.cardinality!=="ordered")return console.error("qti-lcm unsupported cardinality"),[];if(!Array.isArray(t.value))return console.error("qti-lcm expected array value for container cardinality"),[];for(let i of t.value){let n=Number.parseInt(i,10);if(Number.isNaN(n))return console.error("qti-lcm requires integer values"),[];e.push(n)}}return e}#t(r,e){let t=Math.abs(r),i=Math.abs(e);for(;i!==0;){let n=t%i;t=i,i=n}return t}#r(r,e){return r===0||e===0?0:Math.abs(r*e/this.#t(r,e))}};customElements.define("qti-lcm",Gs);var Xs=class extends R{getResult(){return null}};customElements.define("qti-null",Xs);var Qs=class extends R{getResult(){if(this.children.length===1){let r=this.getVariables();if(!r)return!0;let e=r[0].value;return e==null||e==null||e===""}return console.error("unexpected number of children in qti Null"),null}};customElements.define("qti-is-null",Qs);var Ys=class extends R{getResult(){let r=this.getAttribute("field-identifier");if(!r)throw new Error("field-identifier attribute is required");if(Array.from(this.children).length!==1)throw new Error("qti-field-value must have exactly one child expression");let t=this.getVariables()[0];if(t.baseType!=="record"||t.value===null)throw new Error("qti-field-value child expression must return a record");let i=t.value[r];if(i===void 0)throw new Error(`Field "${r}" not found in record`);return i}};customElements.define("qti-field-value",Ys);var Js=class extends R{getResult(){if(this.children.length===2){let r=this.getVariables(),e=r[0],t=r[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",Js);var Ks=class extends ve{getResult(){if(this.children.length===2){let r=this.getVariables(),e=r[0],t=r[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",Ks);var Co=class extends R{getResult(){let r=this.context.variables.find(n=>n.identifier===this.identifier);if(!r||!r.mapping)return console.error(`Response ${this.identifier} can not be found`),null;let e=r.mapping,t=Array.isArray(r.value)?r.value:[r.value],i=0;for(let n of t){let o=e.mapEntries.filter(l=>r.baseType==="string"&&!l.caseSensitive?J.compareSingleValues(l.mapKey.toLowerCase(),n.toLowerCase(),r.baseType):J.compareSingleValues(l.mapKey,n,r.baseType)),a=o.reduce((l,c)=>l.mappedValue>c.mappedValue?l:c,o.length>0?o[0]:{mapKey:null,mappedValue:null});a===null||a.mappedValue==null?i+=e.defaultValue:i+=a.mappedValue}return e?.lowerBound!==null&&e?.lowerBound!==void 0&&(i=Math.max(e.lowerBound,i)),e?.upperBound!==null&&e?.upperBound!==void 0&&(i=Math.min(e.upperBound,i)),i}};d([g({type:String})],Co.prototype,"identifier",2);customElements.define("qti-map-response",Co);var Eo=class extends R{getResult(){let r=this.context.variables.find(o=>o.identifier===this.identifier);if(!r)return console.warn(`Response ${this.identifier} cannot be found`),null;let e=r.areaMapping;if(!e)return console.warn(`Area mapping not found for response ${this.identifier}`),null;let t=Array.isArray(r.value)?r.value:[r.value];if(!t||t.length===0)return console.warn(`No candidate responses for response ${this.identifier}`),null;let i=0,n=new Set;for(let o of t)for(let a of e.areaMapEntries){if(n.has(a.coords))continue;J.isPointInArea(o,`${a.shape},${a.coords}`,r.baseType)&&(i+=a.mappedValue??0,n.add(a.coords))}return n.size<t.length&&(i+=e.defaultValue),e.lowerBound!=null&&(i=Math.max(e.lowerBound,i)),e.upperBound!=null&&(i=Math.min(e.upperBound,i)),i}};d([g({type:String})],Eo.prototype,"identifier",2);customElements.define("qti-map-response-point",Eo);var So=class extends R{constructor(){super(...arguments);this.name=""}getResult(){if(!this.name)return console.error("qti-math-operator requires a name attribute"),null;let e=this.getVariables();if(!e||e.length===0)return null;let t=[];for(let i of e){if(i.cardinality!=="single")return console.error("qti-math-operator requires single cardinality"),null;if(Array.isArray(i.value))return console.error("qti-math-operator unexpected array value for single cardinality"),null;if(i.value===null||i.value===void 0)return null;if(i.baseType!=="integer"&&i.baseType!=="float")return console.error("qti-math-operator requires numerical base-type"),null;let n=parseFloat(i.value);if(isNaN(n))return console.error("qti-math-operator non-numerical value"),null;t.push(n)}return this.#e(this.name,t)}#e(e,t){try{switch(e.toLowerCase()){case"sin":return t.length!==1?null:Math.sin(t[0]);case"cos":return t.length!==1?null:Math.cos(t[0]);case"tan":return t.length!==1?null:Math.tan(t[0]);case"asin":return t.length!==1||t[0]<-1||t[0]>1?null:Math.asin(t[0]);case"acos":return t.length!==1||t[0]<-1||t[0]>1?null:Math.acos(t[0]);case"atan":return t.length!==1?null:Math.atan(t[0]);case"sinh":return t.length!==1?null:Math.sinh(t[0]);case"cosh":return t.length!==1?null:Math.cosh(t[0]);case"tanh":return t.length!==1?null:Math.tanh(t[0]);case"log":return t.length!==1||t[0]<=0?null:Math.log(t[0]);case"ln":return t.length!==1||t[0]<=0?null:Math.log(t[0]);case"log10":return t.length!==1||t[0]<=0?null:Math.log10(t[0]);case"exp":return t.length!==1?null:Math.exp(t[0]);case"abs":return t.length!==1?null:Math.abs(t[0]);case"sqrt":return t.length!==1||t[0]<0?null:Math.sqrt(t[0]);case"signum":return t.length!==1?null:Math.sign(t[0]);case"floor":return t.length!==1?null:Math.floor(t[0]);case"ceil":return t.length!==1?null:Math.ceil(t[0]);case"round":return t.length!==1?null:Math.round(t[0]);case"atan2":return t.length!==2?null:Math.atan2(t[0],t[1]);case"pow":{if(t.length!==2)return null;let i=t[0],n=t[1];return i===0&&n<=0||i<0&&!Number.isInteger(n)?null:Math.pow(i,n)}case"log_base":{if(t.length!==2)return null;let i=t[0],n=t[1];return i<=0||n<=0||n===1?null:Math.log(i)/Math.log(n)}case"mod":return t.length!==2||t[1]===0?null:t[0]%t[1];case"max":return t.length<1?null:Math.max(...t);case"min":return t.length<1?null:Math.min(...t);default:return console.error(`qti-math-operator: unknown operation "${e}"`),null}}catch(i){return console.error(`qti-math-operator: error performing operation "${e}":`,i),null}}};d([g({type:String})],So.prototype,"name",2);customElements.define("qti-math-operator",So);var Zs=class s extends R{getResult(){if(this.children.length===2){let r=this.getVariables(),e=r[0],t=r[1];return s.match(e,t)}return console.error("unexpected number of children in match"),null}static match(r,e){if(r.value===null)return!1;switch(e.cardinality){case"single":return Array.isArray(r.value)||Array.isArray(e.value)?(console.error("unexpected cardinality in qti match"),!1):J.compareSingleValues(r.value?.toString(),e.value.toString(),e.baseType);case"ordered":{if(!Array.isArray(r.value)||!Array.isArray(e.value))return console.error("unexpected cardinality in qti match"),!1;if(r.value.length!==e.value.length)return!1;for(let t=0;t<r.value.length;t++)if(!J.compareSingleValues(e.value[t],r.value[t],e.baseType))return!1;return!0}case"multiple":{if(!Array.isArray(r.value)||!Array.isArray(e.value))return console.error("unexpected cardinality in qti match"),!1;if(r.value.length!==e.value.length)return!1;let t=0;for(let i of e.value){let n=null,o=[...r.value];for(let a of o)if(J.compareSingleValues(i,a,e.baseType)){n=a;break}if(n!==null)o.splice(o.indexOf(n),1);else return!1;t++}return!0}default:return console.error("unexpected cardinality in qti match"),!1}}};customElements.define("qti-match",Zs);var ea=class extends R{getResult(){let r=this.#e(this.getVariables());return r.length===0?(console.warn("qti-max: no numeric values provided"),null):Math.max(...r)}#e(r){let e=[];for(let t of r){if(!t)continue;let i=n=>{if(n==null)return;let o=parseFloat(n.toString());if(Number.isNaN(o)){console.warn("qti-max: non-numeric value encountered");return}e.push(o)};if(Array.isArray(t.value)){t.value.forEach(n=>i(n));continue}i(t.value)}return e}};customElements.define("qti-max",ea);var ta=class extends R{getResult(){let r=this.getVariables();this.children.length!==2&&console.warn("The member operator takes two sub-expressions");let[e,t]=r;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 i=e.value;return t.value.includes(i)}};customElements.define("qti-member",ta);var ra=class extends R{getResult(){let r=this.#e(this.getVariables());return r.length===0?(console.warn("qti-min: no numeric values provided"),null):Math.min(...r)}#e(r){let e=[];for(let t of r){if(!t)continue;let i=n=>{if(n==null)return;let o=parseFloat(n.toString());if(Number.isNaN(o)){console.warn("qti-min: non-numeric value encountered");return}e.push(o)};if(Array.isArray(t.value)){t.value.forEach(n=>i(n));continue}i(t.value)}return e}};customElements.define("qti-min",ra);var ia=class extends R{getResult(){console.debug("qti-multiple getResult called",this.innerHTML);let r=this.getVariables();if(r.length===0)return console.error("unexpected number of children in qti multiple"),null;for(let e of r)if(e.cardinality!=="multiple"&&e.cardinality!=="single")return console.error("unexpected cardinality in qti multiple"),[];return r}};customElements.define("qti-multiple",ia);var na=class extends R{render(){return x`${super.render()}`}getResult(){return!this.firstElementChild.calculate()}};customElements.define("qti-not",na);var oa=class extends ve{getResult(){return Array.from(this.children).map(e=>{let t=e;if(!t.calculate)return console.error("Element doesn't implement QtiConditionExpression"),null;let i=t.calculate(),n=!1;if(typeof i=="string")if(i==="true")n=!0;else if(i==="false")n=!1;else return console.error("unexpected val in qti-or, expected boolean"),null;else typeof i=="boolean"&&(n=i);return n}).some(e=>typeof e=="boolean"&&e)}};customElements.define("qti-or",oa);var sa=class extends R{getResult(){let r=this.getVariables();if(r.length===0)return console.error("unexpected number of children in qti multiple"),null;for(let e of r)if(e.cardinality!=="ordered"&&e.cardinality!=="single")return console.error("unexpected cardinality in qti ordered"),[];return r}};customElements.define("qti-ordered",sa);var aa=class extends R{getResult(){if(this.children.length!==2)return console.error("qti-power must have exactly two child expressions"),null;let r=this.getVariables();if(!r||r.length!==2)return null;let[e,t]=r;if(e.cardinality!=="single"||t.cardinality!=="single")return console.error("qti-power requires single cardinality for both expressions"),null;if(Array.isArray(e.value)||Array.isArray(t.value))return console.error("qti-power unexpected array value for single cardinality"),null;if(e.value===null||e.value===void 0||t.value===null||t.value===void 0)return null;if(e.baseType!=="integer"&&e.baseType!=="float"||t.baseType!=="integer"&&t.baseType!=="float")return console.error("qti-power requires numerical base-types"),null;let i=parseFloat(e.value),n=parseFloat(t.value);if(isNaN(i)||isNaN(n))return console.error("qti-power: non-numerical values encountered"),null;if(i===0&&n<=0||i<0&&!Number.isInteger(n))return null;let o;try{o=Math.pow(i,n)}catch(a){return console.error("qti-power: error calculating power:",a),null}if(isNaN(o))return null;if(o===1/0||o===-1/0)return o;if(!isFinite(o)||Math.abs(o)>Number.MAX_VALUE||o!==0&&Math.abs(o)<Number.MIN_VALUE)return null;if(isFinite(o)&&o!==0){let a=Math.floor(Math.log10(Math.abs(o))),l=Math.max(0,14-a),c=Math.pow(10,l);o=Math.round(o*c)/c}return o}};customElements.define("qti-power",aa);var Ao=class extends R{constructor(){super(...arguments);this.pattern=""}getResult(){let e=this.getVariables();if(e.length!==1)return console.error("qti-pattern-match requires exactly one child expression"),null;if(!this.pattern)return console.error("qti-pattern-match requires a pattern attribute"),null;let t=e[0];if(t.cardinality!=="single"||Array.isArray(t.value))return console.error("qti-pattern-match requires single cardinality"),null;if(t.value===null||t.value===void 0)return null;try{return new RegExp(this.pattern).test(t.value.toString())}catch(i){return console.error("qti-pattern-match requires a valid regular expression",i),null}}};d([g({type:String})],Ao.prototype,"pattern",2);customElements.define("qti-pattern-match",Ao);var Zi=class extends C{render(){let r=this.context?.variables.find(e=>e.identifier===this.identifier)?.value;return r===null?O:x`${JSON.stringify(r,null,2)}`}calculate(){return this.context.variables.find(e=>e.identifier===this.identifier)||null}};d([g({type:String})],Zi.prototype,"identifier",2),d([$({context:W,subscribe:!0}),M()],Zi.prototype,"context",2);customElements.define("qti-printed-variable",Zi);var la=class extends R{getResult(){return this.getVariables().reduce((t,i)=>{if(i.baseType=="float"||i.baseType=="integer")try{return t*parseFloat(i.value.toString())}catch{console.warn("can not convert to number")}else console.warn(`has another baseType ${i.baseType}`);return t},1)}};customElements.define("qti-product",la);var To=class extends R{constructor(){super(...arguments);this.numberRepeats=""}getResult(){let e=this.#e();if(e<=0)return[];let t=this.firstElementChild;if(!t)return console.warn("qti-repeat: missing child expression"),[];let i=[];for(let n=0;n<e;n++){let o=t.calculate(),a=this.#t(o);a&&i.push(a)}return i}#e(){if(!this.numberRepeats)return console.warn("qti-repeat: missing number-repeats attribute"),0;let e=parseInt(this.numberRepeats,10);if(!Number.isNaN(e))return e;let t=this.numberRepeats,i=this.context?.variables?.find(a=>a.identifier===t);if(!i)return console.warn(`qti-repeat: unknown identifier "${t}"`),0;let n=Array.isArray(i.value)?i.value[0]:i.value,o=parseInt(n?.toString()??"",10);return Number.isNaN(o)?(console.warn(`qti-repeat: invalid repeat count from "${t}"`),0):o}#t(e){if(e==null)return null;if(typeof e=="number")return{identifier:"",cardinality:"single",baseType:Number.isInteger(e)?"integer":"float",value:e.toString(),type:"response"};if(typeof e=="string"){let t=parseFloat(e);if(!Number.isNaN(t))return{identifier:"",cardinality:"single",baseType:Number.isInteger(t)?"integer":"float",value:e.toString(),type:"response"}}if(e&&typeof e=="object"&&"value"in e){let t=e.value;return{identifier:"",cardinality:"single",baseType:e.baseType??"string",value:t!=null?t.toString():null,type:"response"}}return{identifier:"",cardinality:"single",baseType:"string",value:e.toString(),type:"response"}}};d([g({type:String,attribute:"number-repeats"})],To.prototype,"numberRepeats",2);customElements.define("qti-repeat",To);var ca=class extends ae{process(){let r=this.getAttribute("identifier");if(!r){console.warn('QtiSetCorrectResponse: Missing "identifier" attribute.');return}let e=this.firstElementChild;if(!e){console.warn("QtiSetCorrectResponse: No expression found.");return}let i=new da(e).process();this.dispatchEvent(new CustomEvent("qti-set-correct-response",{bubbles:!0,composed:!0,detail:{responseIdentifier:r,value:this.#e(i)}}))}#e(r){return r==null?null:Array.isArray(r)?r.map(e=>we(this.#t(e))):we(this.#t(r))}#t(r){if(r&&typeof r=="object"&&"value"in r){let e=r.value;return e!=null?e.toString():""}return r?.toString()??""}},da=class{constructor(r){this.expression=r}process(){let r=this.expression.calculate()??null;return r===null&&console.warn("QtiSetCorrectResponseRule: Evaluated value is null."),Array.isArray(r)?r.map(e=>this.#e(e)):this.#e(r)}#e(r){return r&&typeof r=="object"&&"value"in r?r.value:r}};customElements.define("qti-set-correct-response",ca);var pa=class extends ae{process(){let r=this.getAttribute("identifier");if(!r){console.warn('QtiSetTemplateValue: Missing "identifier" attribute.');return}let e=this.firstElementChild;if(!e){console.warn("QtiSetTemplateValue: No expression found.");return}let i=new ua(e).process();this.dispatchEvent(new CustomEvent("qti-set-template-value",{bubbles:!0,composed:!0,detail:{templateIdentifier:r,value:this.#e(i)}}))}#e(r){return r==null?null:Array.isArray(r)?r.map(e=>we(this.#t(e))):we(this.#t(r))}#t(r){if(r&&typeof r=="object"&&"value"in r){let e=r.value;return e!=null?e.toString():""}return r?.toString()??""}},ua=class{constructor(r){this.expression=r}process(){let r=this.expression.calculate()??null;return r===null&&console.warn("QtiSetTemplateValueRule: Evaluated value is null."),Array.isArray(r)?r.map(e=>this.#e(e)):this.#e(r)}#e(r){return r&&typeof r=="object"&&"value"in r?r.value:r}};customElements.define("qti-set-template-value",pa);var Io=class extends R{constructor(){super(...arguments);this.name=""}getResult(){if(!this.name)return console.warn("qti-stats-operator: missing name attribute"),null;let e=this.#t(this.getVariables());if(e.length===0)return console.warn("qti-stats-operator: no numeric values provided"),null;switch(this.name.toLowerCase()){case"mean":return e.reduce((t,i)=>t+i,0)/e.length;case"popsd":return this.#e(e);default:return console.warn(`qti-stats-operator: unsupported operator "${this.name}"`),null}}#e(e){let t=e.reduce((n,o)=>n+o,0)/e.length,i=e.reduce((n,o)=>n+Math.pow(o-t,2),0)/e.length;return Math.sqrt(i)}#t(e){let t=[];for(let i of e){if(!i)continue;let n=o=>{if(o==null)return;let a=parseFloat(o.toString());if(Number.isNaN(a)){console.warn("qti-stats-operator: non-numeric value encountered");return}t.push(a)};if(Array.isArray(i.value)){i.value.forEach(o=>n(o));continue}n(i.value)}return t}};d([g({type:String})],Io.prototype,"name",2);customElements.define("qti-stats-operator",Io);var Ro=class extends Fp(R){getResult(){return this.calculateChildren(Array.from(this.children))}};function Fp(s){return class extends s{calculateChildren(e){let t=e.map(i=>{if(!i.calculate)return console.error("Element doesn't implement QtiConditionExpression"),null;let n=i.calculate();return Number.isNaN(n)?(console.error("Unexpected value in qti-subtract, expected number"),null):Number(n)});return t.some(i=>i===null)?(console.error("One or more child expressions returned invalid values"),0):t[0]-t[1]}}}customElements.define("qti-subtract",Ro);var ko=class extends R{constructor(){super(...arguments);this.caseSensitive="true"}getResult(){let e=this.getVariables();if(e.length!==2)return console.error("qti-substring requires exactly 2 child expressions"),null;let[t,i]=e;if(t.cardinality!=="single"||i.cardinality!=="single"||Array.isArray(t.value)||Array.isArray(i.value))return console.error("qti-substring requires single cardinality"),null;if(t.value===null||i.value===null||t.value===void 0||i.value===void 0)return null;let n=t.value.toString(),o=i.value.toString();return this.caseSensitive!=="true"?o.toLowerCase().includes(n.toLowerCase()):o.includes(n)}};d([g({type:String,attribute:"case-sensitive"})],ko.prototype,"caseSensitive",2);customElements.define("qti-substring",ko);var Mo=class extends R{constructor(){super(...arguments);this.caseSensitive="true"}getResult(){if(this.children.length===2){let e=this.getVariables(),t=e[0],i=e[1];if(t.cardinality!=="single"||i.cardinality!=="single"||Array.isArray(t.value)||Array.isArray(i.value))return console.error("unexpected cardinality in qti string-match"),!1;let n=this.caseSensitive==="true"?t.value:t.value.toLowerCase(),o=this.caseSensitive==="true"?i.value:i.value.toLowerCase();return J.compareSingleValues(n,o,t.baseType)}return console.error("unexpected number of children in qti-string-match"),null}};d([g({type:String,attribute:"case-sensitive"})],Mo.prototype,"caseSensitive",2);customElements.define("qti-string-match",Mo);var ma=class extends R{getResult(){return new ha(Array.from(this.children)).calculate()}},ha=class{constructor(r){this.expressions=r}calculate(){return this.expressions.filter(t=>t.calculate!==void 0).some(t=>t.calculate()===null)?null:this.expressions.map(t=>{let i=t.calculate();return Number.isNaN(i)?(console.error("unexpected value in qti-sum, expected number"),null):Number(i)}).reduce((t,i)=>t+i,0)}};customElements.define("qti-sum",ma);var fa=class extends R{getResult(){let r=this.getVariables();if(r.length!==1)return console.error("qti-truncate requires exactly one child expression"),null;let e=r[0];if(e.cardinality!=="single"||Array.isArray(e.value))return console.error("qti-truncate requires single cardinality"),null;if(e.baseType!=="integer"&&e.baseType!=="float")return console.error("qti-truncate requires numerical base-type"),null;if(e.value===null||e.value===void 0)return null;let t=Number.parseFloat(e.value);return Number.isNaN(t)?(console.error("qti-truncate requires a numerical value"),null):Math.trunc(t)}};customElements.define("qti-truncate",fa);var ga=class extends R{getResult(){let r=this.getAttribute("identifier");return this.context.variables.find(t=>t.identifier===r).value}};customElements.define("qti-variable",ga);var Mr=class extends R{constructor(){super(...arguments);this.min=0;this.max=10;this.step=1}getResult(){if(this.min>this.max)return console.error("qti-random-integer: min cannot be greater than max"),this.min;if(this.step<=0)return console.error("qti-random-integer: step must be positive"),this.min;let e=[],t=0;for(;;){let n=this.min+this.step*t;if(n>this.max)break;Number.isInteger(n)&&e.push(n),t++}if(e.length===0)return console.warn("qti-random-integer: no valid integer values in range"),Number.isInteger(this.min)?this.min:Math.floor(this.min);let i=Math.floor(Math.random()*e.length);return e[i]}getPossibleValues(){let e=[];if(this.min>this.max||this.step<=0)return[Number.isInteger(this.min)?this.min:Math.floor(this.min)];let t=0;for(;;){let i=this.min+this.step*t;if(i>this.max)break;Number.isInteger(i)&&e.push(i),t++}return e.length>0?e:[Number.isInteger(this.min)?this.min:Math.floor(this.min)]}};d([g({type:Number})],Mr.prototype,"min",2),d([g({type:Number})],Mr.prototype,"max",2),d([g({type:Number})],Mr.prototype,"step",2);customElements.define("qti-random-integer",Mr);var ba=class extends R{getResult(){let r=this.getVariables();if(r.length===1){let e=r[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",ba);var va=class extends R{getResult(){if(this.children.length===2){let r=this.getVariables(),e=r[0],t=r[1];return e.cardinality!=="single"||!Array.isArray(t.value)?(console.error("unexpected cardinality in qti equal"),null):r[0].baseType!==r[1].baseType?(console.error("The baseType of the two variables is different"),null):t.value.filter(n=>!e.value.includes(n))}return null}};customElements.define("qti-delete",va);var _o,Sd,en=class extends R{constructor(){super(...arguments);L(this,_o)}getResult(){if(!this.n)return console.error('qti-index: missing required attribute "n"'),null;if(this.children.length!==1)return console.error("qti-index: must have exactly one child container element"),null;let e=this.getVariables()[0];if(!e)return console.error("qti-index: missing container"),null;let t;if(!isNaN(Number(this.n)))t=Number(this.n);else{let i=P(this,_o,Sd).call(this,this.n);if(i===null)return console.error(`qti-index: variable "${this.n}" is not a valid number`),null;t=Number(i)}if(t<=0||!Number.isInteger(t))return console.error("qti-index: index must be a positive integer"),null;if(e.cardinality==="ordered"){let i=Array.isArray(e.value)?e.value:[e.value];return e.value===null||t>i.length?null:i[t-1]}else return console.error("qti-index: child must have ordered cardinality"),null}};_o=new WeakSet,Sd=function(e){let t=this.context.variables.find(i=>i.identifier===e)?.value;return t===null||isNaN(Number(t))?null:Number(t)},d([g({type:String})],en.prototype,"n",2),en=d([k("qti-index")],en);export{dl as Correctness,Ko as INITIAL_SESSION_CONTEXT,Zo as INITIAL_TEST_CONTEXT,V as Interaction,ts as IsNullOrUndefined,Ye as ItemContainer,jt as ItemCorrectResponseMode,Sr as ItemPrintVariables,Ee as ItemShowCandidateCorrection,Se as ItemShowCorrectResponse,yo as QtiAnd,Yi as QtiAnyN,ue as QtiAssessmentItem,ze as QtiAssessmentItemRef,je as QtiAssessmentSection,pr as QtiAssessmentStimulusRef,os as QtiAssessmentStimulusRefConnectedEvent,Lt as QtiAssessmentTest,Zn as QtiAssociableHotspot,Bi as QtiAssociateInteraction,xo as QtiBaseValue,zi as QtiChoiceInteraction,qn as QtiCompanionMaterialsInfo,ve as QtiConditionExpression,$s as QtiContainerSize,Ps as QtiContains,li as QtiContentBody,Pt as QtiContextDeclaration,Vs as QtiCorrect,Je as QtiCustomInteraction,ii as QtiCustomOperator,kr as QtiDefault,va as QtiDelete,Ns as QtiDivide,Os as QtiDurationGte,Hs as QtiDurationLt,xt as QtiEndAttemptInteraction,wo as QtiEqual,qo as QtiEqualRounded,R as QtiExpression,ge as QtiExtendedTextInteraction,pe as QtiFeedback,oi as QtiFeedbackBlock,si as QtiFeedbackInline,Ys as QtiFieldValue,Di as QtiGap,Ni as QtiGapImg,co as QtiGapMatchInteraction,Oi as QtiGapText,Fs as QtiGcd,Ke as QtiGraphicAssociateInteraction,po as QtiGraphicGapMatchInteraction,uo as QtiGraphicOrderInteraction,Us as QtiGt,Bs as QtiGte,Tr as QtiHotspotChoice,mo as QtiHotspotInteraction,eo as QtiHottext,ji as QtiHottextInteraction,en as QtiIndex,Hi as QtiInlineChoice,wt as QtiInlineChoiceInteraction,Ki as QtiInside,zs as QtiIntegerDivide,js as QtiIntegerModulus,Ws as QtiIntegerToFloat,Qs as QtiIsNull,Ar as QtiItem,ai as QtiItemBody,Gs as QtiLcm,Gi as QtiLookupOutcomeValue,Js as QtiLt,Ks as QtiLte,Co as QtiMapResponse,Eo as QtiMapResponsePoint,Zs as QtiMatch,Ct as QtiMatchInteraction,So as QtiMathOperator,ea as QtiMax,ho as QtiMediaInteraction,ta as QtiMember,ra as QtiMin,$t as QtiModalFeedback,ia as QtiMultiple,na as QtiNot,Xs as QtiNull,oa as QtiOr,Et as QtiOrderInteraction,sa as QtiOrdered,Ve as QtiOutcomeDeclaration,Ao as QtiPatternMatch,K as QtiPortableCustomInteraction,go as QtiPositionObjectInteraction,bo as QtiPositionObjectStage,aa as QtiPower,Zi as QtiPrintedVariable,la as QtiProduct,to as QtiPrompt,ba as QtiRandom,Mr as QtiRandomInteger,To as QtiRepeat,ks as QtiResponseCondition,Ge as QtiResponseDeclaration,Xi as QtiResponseElse,Ls as QtiResponseElseIf,Qi as QtiResponseIf,di as QtiResponseProcessing,Ds as QtiRound,Ji as QtiRoundTo,Pe as QtiRubricBlock,pl as QtiRuleElement,Ze as QtiSelectPointInteraction,ca as QtiSetCorrectResponse,da as QtiSetCorrectResponseRule,Ms as QtiSetOutcomeValue,_s as QtiSetOutcomeValueRule,pa as QtiSetTemplateValue,ua as QtiSetTemplateValueRule,Wt as QtiSimpleAssociableChoice,ht as QtiSimpleChoice,St as QtiSliderInteraction,Io as QtiStatsOperator,Mo as QtiStringMatch,Cn as QtiStylesheet,ko as QtiSubstring,Ro as QtiSubtract,ma as QtiSum,ha as QtiSumExpression,An as QtiTemplateConstraint,De as QtiTemplateDeclaration,pi as QtiTemplateProcessing,xn as QtiTest,ui as QtiTestFeedback,We as QtiTestPart,Ie as QtiTextEntryInteraction,fa as QtiTruncate,vo as QtiUploadInteraction,ga as QtiVariable,ar as QtiVariableDeclaration,J as ScoringHelper,Mi as TestCheckItem,Qe as TestContainer,hi as TestEndAttempt,hr as TestItemLink,xe as TestNavigation,ut as TestNext,Ei as TestPagingButtonsStamp,mt as TestPrev,Ri as TestPrintContext,br as TestPrintVariables,zt as TestScoringButtons,yr as TestScoringFeedback,Ti as TestSectionButtonsStamp,vr as TestSectionLink,Ce as TestShowCorrectResponse,Bt as TestStamp,oe as TestView,ki as TestViewToggle,G as computedContext,it as computedItemContext,be as configContext,we as convertNumberToUniversalFormat,Yd as decimalSeparator,SM as getItemByUri,EM as getManifestInfo,W as itemContext,rl as itemContextVariables,Hp as qtiAndMixin,or as qtiContext,Fp as qtiSubtractMixin,Me as qtiTransformItem,Za as qtiTransformManifest,rr as qtiTransformTest,yn as removeDoubleSlashes,nt as sessionContext,_e as testContext};
|
|
6147
6157
|
/*! Bundled license information:
|
|
6148
6158
|
|
|
6149
6159
|
@lit-labs/ssr-dom-shim/lib/element-internals.js:
|
|
@@ -6154,6 +6164,13 @@ CES.load();
|
|
|
6154
6164
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
6155
6165
|
*)
|
|
6156
6166
|
|
|
6167
|
+
@lit-labs/ssr-dom-shim/lib/css.js:
|
|
6168
|
+
(**
|
|
6169
|
+
* @license
|
|
6170
|
+
* Copyright 2024 Google LLC
|
|
6171
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
6172
|
+
*)
|
|
6173
|
+
|
|
6157
6174
|
@lit-labs/ssr-dom-shim/index.js:
|
|
6158
6175
|
@lit/reactive-element/node/css-tag.js:
|
|
6159
6176
|
lit-html/node/private-ssr-support.js:
|
|
@@ -6177,6 +6194,7 @@ lit-element/lit-element.js:
|
|
|
6177
6194
|
@lit/context/lib/decorators/provide.js:
|
|
6178
6195
|
lit-html/node/directive.js:
|
|
6179
6196
|
lit-html/node/async-directive.js:
|
|
6197
|
+
lit-html/node/lit-html.js:
|
|
6180
6198
|
lit-html/node/directives/until.js:
|
|
6181
6199
|
lit-html/node/directives/repeat.js:
|
|
6182
6200
|
lit-html/node/directives/unsafe-html.js:
|