@citolab/qti-components 3.0.43 → 3.0.44

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/index.cjs CHANGED
@@ -4,7 +4,7 @@
4
4
  :host {
5
5
  display: block;
6
6
  }
7
- `,exports.QtiItemBody=m([i.customElement("qti-item-body")],exports.QtiItemBody);class f extends s.LitElement{render(){return s.html` <slot></slot> `}connectedCallback(){this.parentElement.tagName.endsWith("INTERACTION")&&this.setAttribute("slot","prompt")}}function y(e,t){const s=Object.assign({waitUntilFirstUpdate:!1},t);return(t,i)=>{const{update:n}=t;if(e in t){const r=e;t.update=function(e){if(e.has(r)){const t=e.get(r),n=this[r];t!==n&&(s.waitUntilFirstUpdate&&!this.hasUpdated||this[i](t,n))}n.call(this,e)}}}}customElements.define("qti-prompt",f);const x=32;exports.QtiChoice=class extends p{constructor(){super(...arguments),this.tabindex=0,this.disabled=!1,this.readonly=!1,this.checked=!1}handleDisabledChange(e,t){t?(this.tabindex=void 0,this.blur()):this.tabIndex=0}connectedCallback(){super.connectedCallback(),this.addEventListener("keyup",this._onKeyUp),this.addEventListener("click",this._onClick),this.emit(l.ON_REGISTER_CHOICE)}disconnectedCallback(){this.removeEventListener("keyup",this._onKeyUp),this.removeEventListener("click",this._onClick),this.emit(l.ON_LOOSE_CHOICE)}reset(){this.checked=!1,this.disabled=!1}_onKeyUp(e){e.altKey||e.keyCode===x&&(e.preventDefault(),this._toggleChecked())}_onClick(){this._toggleChecked()}_toggleChecked(){this.disabled||this.readonly||(this.checked=!this.checked,this.emit(l.ON_CHOICE_ELEMENT_SELECTED,{detail:{identifier:this.identifier,checked:this.checked}}))}render(){return n.html` <slot></slot> `}},m([i.property({reflect:!0}),g("design:type",String)],exports.QtiChoice.prototype,"identifier",void 0),m([i.property({type:Number,reflect:!0}),g("design:type",Object)],exports.QtiChoice.prototype,"tabindex",void 0),m([i.property({type:Boolean,reflect:!0}),g("design:type",Object)],exports.QtiChoice.prototype,"disabled",void 0),m([i.property({type:Boolean,reflect:!0}),g("design:type",Object)],exports.QtiChoice.prototype,"readonly",void 0),m([i.property({reflect:!0,type:Boolean,attribute:"aria-checked",converter:{toAttribute:e=>`${e}`}}),g("design:type",Object)],exports.QtiChoice.prototype,"checked",void 0),m([y("disabled",{waitUntilFirstUpdate:!0}),g("design:type",Function),g("design:paramtypes",[Object,Boolean]),g("design:returntype",void 0)],exports.QtiChoice.prototype,"handleDisabledChange",null),exports.QtiChoice=m([i.customElement("qti-choice")],exports.QtiChoice);class v extends s.LitElement{render(){return s.html``}}customElements.define("qti-variabledeclaration",v);class E extends v{static get properties(){return{baseType:{type:String,attribute:"base-type"},identifier:{type:String,attribute:"identifier"},cardinality:{type:String,attribute:"cardinality"}}}connectedCallback(){super.connectedCallback();const e=new c({baseType:this.baseType,identifier:this.identifier,correctResponse:this.correctResponse,cardinality:this.cardinality||exports.Cardinality.single,mapping:this.mapping});this.closest("qti-assessment-item").variables.push(e)}get correctResponse(){let e;const t=this.querySelector("qti-correct-response");if(t){const s=t.querySelectorAll("qti-value");if(1===s.length)e=s[0].textContent,s[0].remove();else{e=[];for(let t=0;t<s.length;t++)e.push(s[t].textContent),s[t].remove()}}return e}get mapping(){const e=this.querySelector("qti-mapping");if(e){const t=new Map,s=e.querySelectorAll("qti-map-entry");for(let e=0;e<s.length;e++){const i=s[e],n=i.getAttribute("map-key"),r=i.getAttribute("mapped-value");t.set(n,r?parseFloat(r):null)}return t}return null}}customElements.define("qti-response-declaration",E);class C extends v{static get observedAttributes(){return["identifier","cardinality","base-type"]}connectedCallback(){super.connectedCallback();const e=this.getAttribute("identifier"),t=new d;t.identifier=e;this.closest("qti-assessment-item").variables.push(t)}}customElements.define("qti-outcome-declaration",C),exports.QtiCompanionMaterialsInfo=class extends p{},exports.QtiCompanionMaterialsInfo=m([i.customElement("qti-companion-materials-info")],exports.QtiCompanionMaterialsInfo);const q=r.createContext("logger");exports.qtiRubricBlock=class extends p{constructor(){super(...arguments),this.logger=new r.ContextConsumer(this,q,void 0,!0)}handleclassNamesChange(e,t){this.classNames.split(" ").forEach((e=>{switch(e){case"qti-rubric-discretionary-placement":default:this.setAttribute("slot","qti-rubric-block");break;case"qti-rubric-inline":this.setAttribute("slot","")}}))}render(){return s.html`<slot></slot>`}connectedCallback(){var e;super.connectedCallback(),this.view===(null===(e=this.logger.value)||void 0===e?void 0:e.view)?this.style.visibility="visible":this.style.visibility="hidden"}},exports.qtiRubricBlock.styles=s.css`
7
+ `,exports.QtiItemBody=m([i.customElement("qti-item-body")],exports.QtiItemBody);class f extends s.LitElement{render(){return s.html` <slot></slot> `}connectedCallback(){this.parentElement.tagName.endsWith("INTERACTION")&&this.setAttribute("slot","prompt")}}function y(e,t){const s=Object.assign({waitUntilFirstUpdate:!1},t);return(t,i)=>{const{update:n}=t;if(e in t){const r=e;t.update=function(e){if(e.has(r)){const t=e.get(r),n=this[r];t!==n&&(s.waitUntilFirstUpdate&&!this.hasUpdated||this[i](t,n))}n.call(this,e)}}}}customElements.define("qti-prompt",f);const x=32;exports.QtiChoice=class extends p{constructor(){super(...arguments),this.tabindex=0,this.disabled=!1,this.readonly=!1,this.checked=!1}handleDisabledChange(e,t){t?(this.tabindex=void 0,this.blur()):this.tabIndex=0}connectedCallback(){super.connectedCallback(),this.addEventListener("keyup",this._onKeyUp),this.addEventListener("click",this._onClick),this.emit(l.ON_REGISTER_CHOICE)}disconnectedCallback(){this.removeEventListener("keyup",this._onKeyUp),this.removeEventListener("click",this._onClick),this.emit(l.ON_LOOSE_CHOICE)}reset(){this.checked=!1,this.disabled=!1}_onKeyUp(e){e.altKey||e.keyCode===x&&(e.preventDefault(),this._toggleChecked())}_onClick(){this._toggleChecked()}_toggleChecked(){this.disabled||this.readonly||(this.checked=!this.checked,this.emit(l.ON_CHOICE_ELEMENT_SELECTED,{detail:{identifier:this.identifier,checked:this.checked}}))}render(){return n.html` <slot></slot> `}},m([i.property({reflect:!0}),g("design:type",String)],exports.QtiChoice.prototype,"identifier",void 0),m([i.property({type:Number,reflect:!0}),g("design:type",Object)],exports.QtiChoice.prototype,"tabindex",void 0),m([i.property({type:Boolean,reflect:!0}),g("design:type",Object)],exports.QtiChoice.prototype,"disabled",void 0),m([i.property({type:Boolean,reflect:!0}),g("design:type",Object)],exports.QtiChoice.prototype,"readonly",void 0),m([i.property({reflect:!0,type:Boolean,attribute:"aria-checked",converter:{toAttribute:e=>`${e}`}}),g("design:type",Object)],exports.QtiChoice.prototype,"checked",void 0),m([y("disabled",{waitUntilFirstUpdate:!0}),g("design:type",Function),g("design:paramtypes",[Object,Boolean]),g("design:returntype",void 0)],exports.QtiChoice.prototype,"handleDisabledChange",null),exports.QtiChoice=m([i.customElement("qti-choice")],exports.QtiChoice);class v extends s.LitElement{render(){return s.html``}}customElements.define("qti-variabledeclaration",v);class E extends v{static get properties(){return{baseType:{type:String,attribute:"base-type"},identifier:{type:String,attribute:"identifier"},cardinality:{type:String,attribute:"cardinality"}}}connectedCallback(){super.connectedCallback();const e=new c({baseType:this.baseType,identifier:this.identifier,correctResponse:this.correctResponse,cardinality:this.cardinality||exports.Cardinality.single,mapping:this.mapping});this.closest("qti-assessment-item").variables.push(e)}get correctResponse(){let e;const t=this.querySelector("qti-correct-response");if(t){const s=t.querySelectorAll("qti-value");if(1===s.length)e=s[0].textContent,s[0].remove();else{e=[];for(let t=0;t<s.length;t++)e.push(s[t].textContent),s[t].remove()}}return e}get mapping(){const e=this.querySelector("qti-mapping");if(e){const t=new Map,s=e.querySelectorAll("qti-map-entry");for(let e=0;e<s.length;e++){const i=s[e],n=i.getAttribute("map-key"),r=i.getAttribute("mapped-value");t.set(n,r?parseFloat(r):null)}return t}return null}}customElements.define("qti-response-declaration",E);class C extends v{static get observedAttributes(){return["identifier","cardinality","base-type"]}connectedCallback(){super.connectedCallback();const e=this.getAttribute("identifier"),t=new d;t.identifier=e;this.closest("qti-assessment-item").variables.push(t)}}customElements.define("qti-outcome-declaration",C),exports.QtiCompanionMaterialsInfo=class extends p{},exports.QtiCompanionMaterialsInfo=m([i.customElement("qti-companion-materials-info")],exports.QtiCompanionMaterialsInfo);const q=r.createContext("logger");exports.qtiRubricBlock=class extends p{constructor(){super(...arguments),this.logger=new r.ContextConsumer(this,q,(e=>{this.view===e.view?this.style.display="block":this.style.display="none"}),!0)}handleclassNamesChange(e,t){this.classNames.split(" ").forEach((e=>{switch(e){case"qti-rubric-discretionary-placement":this.setAttribute("slot","qti-rubric-block");break;case"qti-rubric-inline":this.setAttribute("slot","")}}))}render(){return s.html`<slot></slot>`}connectedCallback(){super.connectedCallback(),this.setAttribute("slot","qti-rubric-block")}},exports.qtiRubricBlock.styles=s.css`
8
8
  :host {
9
9
  display: block;
10
10
  }
@@ -314,7 +314,7 @@
314
314
  `],customElements.define("qti-order-interaction",Ee);class Ce extends T{constructor(){super()}render(){return s.html`<slot></slot>
315
315
  <div class="notification"></div>`}connectedCallback(){super.connectedCallback()}disconnectedCallback(){super.disconnectedCallback()}}Ce.styles=[ae],customElements.define("qti-select-point-interaction",Ce);const qe=37,_e=38,Se=39,Oe=40,ke=33,Re=34,we=35,Ie=36;class Te extends k{constructor(){super(),this.addEventListener("keydown",this._onKeyDown.bind(this))}reset(){}validate(){return!0}set response(e){}set min(e){this._min=e,this.style.setProperty("--qti-slider-interaction-lower-bounds",`${this._min}`)}get min(){return this._min}set max(e){this._max=e,this.style.setProperty("--qti-slider-interaction-upper-bounds",`${this._max}`)}get max(){return this._max}set step(e){this._step=e,this.style.setProperty("--qti-slider-interaction-step",`${this._step}`)}get step(){return this._step}render(){return s.html`
316
316
  <slot name="prompt"></slot>
317
- <slot></slot>`}firstUpdated(){this.addEventListener("mousedown",this._onMouseDown.bind(this)),this.style.setProperty("--qti-slider-interaction-step",this.step?this.step.toString():"10");const e=this.getAttribute("value");this._moveSliderTo(e)}connectedCallback(){super.connectedCallback(),this.setAttribute("tabindex","0"),this.setAttribute("role","slider")}get RAIL_WIDTH(){return this.offsetWidth}_onKeyDown(e){let t=!1;const s=this.value;switch(e.keyCode){case qe:case Oe:this._moveSliderTo(s-this.step),t=!0;break;case Se:case _e:this._moveSliderTo(s+this.step),t=!0;break;case Re:this._moveSliderTo(s-this.step),t=!0;break;case ke:this._moveSliderTo(s+this.step),t=!0;break;case Ie:this._moveSliderTo(this.min),t=!0;break;case we:this._moveSliderTo(this.max),t=!0}t&&(e.preventDefault(),e.stopPropagation())}_onMouseDown(e){const t=e.target,s=this.min,i=this.max,n=e=>{const n=e.pageX-t.offsetLeft,r=s+(i-s)*n/this.RAIL_WIDTH;this._moveSliderTo(r),e.preventDefault(),e.stopPropagation()},r=()=>{document.removeEventListener("mousemove",n),document.removeEventListener("mouseup",r),this.saveResponse({base:{float:this.value}})};document.addEventListener("mousemove",n),document.addEventListener("mouseup",r),e.preventDefault(),e.stopPropagation(),e.target.focus();const o=e.pageX-t.offsetLeft,a=s+(i-s)*o/this.RAIL_WIDTH;this._moveSliderTo(a)}_moveSliderTo(e){const t=this.min,s=this.max;let i=Number(e);i<t&&(i=t),i>s&&(i=s);const n=(i-t)/(s-t)*100;this.style.setProperty("--qti-slider-interaction-aria-valuenow",`${n}%`)}}Te.styles=[ae,s.css``],m([i.property({type:Number,attribute:"lower-bound"}),g("design:type",Number),g("design:paramtypes",[Number])],Te.prototype,"min",null),m([i.property({type:Number,attribute:"upper-bound"}),g("design:type",Number),g("design:paramtypes",[Number])],Te.prototype,"max",null),m([i.property({type:Number,attribute:"step"}),g("design:type",Number),g("design:paramtypes",[Number])],Te.prototype,"step",null),customElements.define("qti-slider-interaction",Te);class Ae extends s.LitElement{constructor(){super(...arguments),this.render=()=>s.html`${this.value}`}levenshtein(e,t){let s;if(0===e.length)return t.length;if(0===t.length)return e.length;e.length>t.length&&(s=e,e=t,t=s);const i=e.length,n=t.length,r=Array(i);let o,a,l;for(o=0;o<=i;o++)r[o]=o;for(o=1;o<=n;o++){for(l=o,a=1;a<=i;a++)s=r[a-1],r[a-1]=l,l=Math.min(s+(t[o-1]!==e[a-1]),l+1,r[a]+1);r[a-1]=l}return l}calculate(){const e=this.firstElementChild,t=this.lastElementChild,s=e.calculate(),i=t.calculate();return this.value=100-this.levenshtein(s.toString().trim(),i.toString().trim())/i.toString().length*100,this.value}}Ae.properties={value:{}},customElements.define("qti-custom-operator-levenshtein",Ae);class Ne extends s.LitElement{render(){return s.html``}calculate(){var e;const t=null===(e=this.firstElementChild.calculate())||void 0===e?void 0:e.toString();return t?t.replace(/[^0-9$.,]/g,""):""}}customElements.define("qti-custom-operator-numeric",Ne);class Le extends s.LitElement{constructor(){super(...arguments),this.render=()=>s.html`${this.value}`}calculate(){var e;const t=null===(e=this.firstElementChild.calculate())||void 0===e?void 0:e.toString();return this.value=t?this.parseNumber(t,undefined):"",this.value}parseNumber(e,t=navigator.languages){const s=Intl.NumberFormat(t).format(1.1),i=new RegExp(`[^-+0-9${s.charAt(1)}]`,"g"),n=e.replace(i,"").replace(s.charAt(1),".");return parseFloat(n)}}Le.properties={value:{}},customElements.define("qti-custom-operator-parse-numeric-nl",Le);class Me extends s.LitElement{render(){return s.html``}calculate(){var e;const t=null===(e=this.firstElementChild.calculate())||void 0===e?void 0:e.toString();return t?t.replace(/ /g,""):""}}customElements.define("qti-custom-operator-remove-spaces",Me);class $e extends s.LitElement{render(){return s.html``}calculate(){return this.firstElementChild.calculate().toString().trim()}}customElements.define("qti-custom-operator-trim",$e);const Qe=(e,t)=>class extends e{_dispatch(){this.dispatchEvent(new CustomEvent(t,{composed:!0,bubbles:!0,detail:+this.getAttribute("index")}))}connectedCallback(){super.connectedCallback(),this.addEventListener("click",this._dispatch)}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("click",this._dispatch)}};customElements.define("qti-test-next",class extends(Qe(s.LitElement,"on-next-item")){constructor(){super(...arguments),this.render=()=>s.html`<slot></slot>`}}),customElements.define("qti-test-item",class extends(Qe(s.LitElement,"on-request-item")){constructor(){super(...arguments),this.render=()=>s.html`<slot></slot>`}}),customElements.define("qti-test-prev",class extends(Qe(s.LitElement,"on-prev-item")){constructor(){super(...arguments),this.render=()=>s.html`<slot></slot>`}}),customElements.define("qti-test-check",class extends(Qe(s.LitElement,"on-check-item")){constructor(){super(...arguments),this.render=()=>s.html`<slot></slot>`}}),customElements.define("qti-test-score",class extends(Qe(s.LitElement,"on-score-item")){constructor(){super(...arguments),this.render=()=>s.html`<slot></slot>`}});const He={ON_ITEM_WAS_FINISHED:"onItemWasFinished",ON_NO_RESPONSE_ON_SUBMIT:"onNoResponseOnSubmit",ON_REQUEST_ITEM:"onRequestItem",ON_TEST_FINISHED:"onTestFinished"};var je,De;exports.NavigationMode=void 0,(je=exports.NavigationMode||(exports.NavigationMode={})).linear="linear",je.nonlinear="nonlinear",exports.SubmissionMode=void 0,(De=exports.SubmissionMode||(exports.SubmissionMode={})).individual="individual",De.simultaneous="simultaneous",exports.QtiTest=class extends s.LitElement{constructor(){super(...arguments),this.disabled=!1,this.readonly=!1,this._navigationMode=exports.NavigationMode.nonlinear,this._submissionMode=exports.SubmissionMode.simultaneous,this.items=[],this.itemIndex=0}handleNavigationModeChange(e,t){this.prevButton.style.visibility=t===exports.NavigationMode.linear?"hidden":"visible"}handleItemIndexChange(e,t){this._dispatchRequestItem(t)}set qtiContext(e){this.provider=new r.ContextProvider(this,q,{log:e=>{console.log(`[my-app] ${e}`)},view:e.view})}set itemXML(e){this._itemRef&&this._itemRef.remove(),this.insertAdjacentHTML("afterbegin",e)}set itemResponse(e){this._itemRef&&(this._itemRef.responses=e,this._navigationMode===exports.NavigationMode.linear&&(this._itemRef.style.filter="blur(5px)",this._itemRef.setAttribute("disabled",""),this.dispatchEvent(new CustomEvent(He.ON_ITEM_WAS_FINISHED))))}_onCheckItem(){return!!this._itemRef.validateResponses()&&(this._itemRef.processResponse(),!0)}_onScoreItem(){this._onCheckItem()&&this._itemRef.processResponse()}_onPrevItem(){this.itemIndex>0&&this._dispatchRequestItem(this.itemIndex-1)}_onNextItem(){this._navigationMode!==exports.NavigationMode.linear||this._itemRef.validateResponses()?this.itemIndex<this.items.length-1?this._dispatchRequestItem(this.itemIndex+1):this.dispatchEvent(new CustomEvent(He.ON_TEST_FINISHED)):this.dispatchEvent(new CustomEvent(He.ON_NO_RESPONSE_ON_SUBMIT))}_dispatchRequestItem(e){this.dispatchEvent(new CustomEvent(He.ON_REQUEST_ITEM,{bubbles:!0,composed:!0,detail:e}))}_onRequestItem(e){this._dispatchRequestItem(e.detail)}_handleSlotchange(e){const t=this.querySelector("qti-assessment-item");t&&(this._itemRef=t,this.disabled&&this._itemRef.setAttribute("disabled",""),this.readonly&&this._itemRef.setAttribute("readonly",""))}render(){return s.html`
317
+ <slot></slot>`}firstUpdated(){this.addEventListener("mousedown",this._onMouseDown.bind(this)),this.style.setProperty("--qti-slider-interaction-step",this.step?this.step.toString():"10");const e=this.getAttribute("value");this._moveSliderTo(e)}connectedCallback(){super.connectedCallback(),this.setAttribute("tabindex","0"),this.setAttribute("role","slider")}get RAIL_WIDTH(){return this.offsetWidth}_onKeyDown(e){let t=!1;const s=this.value;switch(e.keyCode){case qe:case Oe:this._moveSliderTo(s-this.step),t=!0;break;case Se:case _e:this._moveSliderTo(s+this.step),t=!0;break;case Re:this._moveSliderTo(s-this.step),t=!0;break;case ke:this._moveSliderTo(s+this.step),t=!0;break;case Ie:this._moveSliderTo(this.min),t=!0;break;case we:this._moveSliderTo(this.max),t=!0}t&&(e.preventDefault(),e.stopPropagation())}_onMouseDown(e){const t=e.target,s=this.min,i=this.max,n=e=>{const n=e.pageX-t.offsetLeft,r=s+(i-s)*n/this.RAIL_WIDTH;this._moveSliderTo(r),e.preventDefault(),e.stopPropagation()},r=()=>{document.removeEventListener("mousemove",n),document.removeEventListener("mouseup",r),this.saveResponse({base:{float:this.value}})};document.addEventListener("mousemove",n),document.addEventListener("mouseup",r),e.preventDefault(),e.stopPropagation(),e.target.focus();const o=e.pageX-t.offsetLeft,a=s+(i-s)*o/this.RAIL_WIDTH;this._moveSliderTo(a)}_moveSliderTo(e){const t=this.min,s=this.max;let i=Number(e);i<t&&(i=t),i>s&&(i=s);const n=(i-t)/(s-t)*100;this.style.setProperty("--qti-slider-interaction-aria-valuenow",`${n}%`)}}Te.styles=[ae,s.css``],m([i.property({type:Number,attribute:"lower-bound"}),g("design:type",Number),g("design:paramtypes",[Number])],Te.prototype,"min",null),m([i.property({type:Number,attribute:"upper-bound"}),g("design:type",Number),g("design:paramtypes",[Number])],Te.prototype,"max",null),m([i.property({type:Number,attribute:"step"}),g("design:type",Number),g("design:paramtypes",[Number])],Te.prototype,"step",null),customElements.define("qti-slider-interaction",Te);class Ae extends s.LitElement{constructor(){super(...arguments),this.render=()=>s.html`${this.value}`}levenshtein(e,t){let s;if(0===e.length)return t.length;if(0===t.length)return e.length;e.length>t.length&&(s=e,e=t,t=s);const i=e.length,n=t.length,r=Array(i);let o,a,l;for(o=0;o<=i;o++)r[o]=o;for(o=1;o<=n;o++){for(l=o,a=1;a<=i;a++)s=r[a-1],r[a-1]=l,l=Math.min(s+(t[o-1]!==e[a-1]),l+1,r[a]+1);r[a-1]=l}return l}calculate(){const e=this.firstElementChild,t=this.lastElementChild,s=e.calculate(),i=t.calculate();return this.value=100-this.levenshtein(s.toString().trim(),i.toString().trim())/i.toString().length*100,this.value}}Ae.properties={value:{}},customElements.define("qti-custom-operator-levenshtein",Ae);class Ne extends s.LitElement{render(){return s.html``}calculate(){var e;const t=null===(e=this.firstElementChild.calculate())||void 0===e?void 0:e.toString();return t?t.replace(/[^0-9$.,]/g,""):""}}customElements.define("qti-custom-operator-numeric",Ne);class Le extends s.LitElement{constructor(){super(...arguments),this.render=()=>s.html`${this.value}`}calculate(){var e;const t=null===(e=this.firstElementChild.calculate())||void 0===e?void 0:e.toString();return this.value=t?this.parseNumber(t,undefined):"",this.value}parseNumber(e,t=navigator.languages){const s=Intl.NumberFormat(t).format(1.1),i=new RegExp(`[^-+0-9${s.charAt(1)}]`,"g"),n=e.replace(i,"").replace(s.charAt(1),".");return parseFloat(n)}}Le.properties={value:{}},customElements.define("qti-custom-operator-parse-numeric-nl",Le);class Me extends s.LitElement{render(){return s.html``}calculate(){var e;const t=null===(e=this.firstElementChild.calculate())||void 0===e?void 0:e.toString();return t?t.replace(/ /g,""):""}}customElements.define("qti-custom-operator-remove-spaces",Me);class $e extends s.LitElement{render(){return s.html``}calculate(){return this.firstElementChild.calculate().toString().trim()}}customElements.define("qti-custom-operator-trim",$e);const Qe=(e,t)=>class extends e{_dispatch(){this.dispatchEvent(new CustomEvent(t,{composed:!0,bubbles:!0,detail:+this.getAttribute("index")}))}connectedCallback(){super.connectedCallback(),this.addEventListener("click",this._dispatch)}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("click",this._dispatch)}};customElements.define("qti-test-next",class extends(Qe(s.LitElement,"on-next-item")){constructor(){super(...arguments),this.render=()=>s.html`<slot></slot>`}}),customElements.define("qti-test-item",class extends(Qe(s.LitElement,"on-request-item")){constructor(){super(...arguments),this.render=()=>s.html`<slot></slot>`}}),customElements.define("qti-test-prev",class extends(Qe(s.LitElement,"on-prev-item")){constructor(){super(...arguments),this.render=()=>s.html`<slot></slot>`}}),customElements.define("qti-test-check",class extends(Qe(s.LitElement,"on-check-item")){constructor(){super(...arguments),this.render=()=>s.html`<slot></slot>`}}),customElements.define("qti-test-score",class extends(Qe(s.LitElement,"on-score-item")){constructor(){super(...arguments),this.render=()=>s.html`<slot></slot>`}});const He={ON_ITEM_WAS_FINISHED:"onItemWasFinished",ON_NO_RESPONSE_ON_SUBMIT:"onNoResponseOnSubmit",ON_REQUEST_ITEM:"onRequestItem",ON_TEST_FINISHED:"onTestFinished"};var je,De;exports.NavigationMode=void 0,(je=exports.NavigationMode||(exports.NavigationMode={})).linear="linear",je.nonlinear="nonlinear",exports.SubmissionMode=void 0,(De=exports.SubmissionMode||(exports.SubmissionMode={})).individual="individual",De.simultaneous="simultaneous",exports.QtiTest=class extends s.LitElement{constructor(){super(...arguments),this.disabled=!1,this.readonly=!1,this._navigationMode=exports.NavigationMode.nonlinear,this._submissionMode=exports.SubmissionMode.simultaneous,this.items=[],this.itemIndex=0,this.provider=new r.ContextProvider(this,q,{log:e=>{console.log(`[my-app] ${e}`)},view:"candidate"})}handleNavigationModeChange(e,t){this.prevButton.style.visibility=t===exports.NavigationMode.linear?"hidden":"visible"}handleItemIndexChange(e,t){this._dispatchRequestItem(t)}set qtiContext(e){this.provider.value.view=e.view,this.provider.updateObservers()}set itemXML(e){this._itemRef&&this._itemRef.remove(),this.insertAdjacentHTML("afterbegin",e)}set itemResponse(e){this._itemRef&&(this._itemRef.responses=e,this._navigationMode===exports.NavigationMode.linear&&(this._itemRef.style.filter="blur(5px)",this._itemRef.setAttribute("disabled",""),this.dispatchEvent(new CustomEvent(He.ON_ITEM_WAS_FINISHED))))}_onCheckItem(){return!!this._itemRef.validateResponses()&&(this._itemRef.processResponse(),!0)}_onScoreItem(){this._onCheckItem()&&this._itemRef.processResponse()}_onPrevItem(){this.itemIndex>0&&this._dispatchRequestItem(this.itemIndex-1)}_onNextItem(){this._navigationMode!==exports.NavigationMode.linear||this._itemRef.validateResponses()?this.itemIndex<this.items.length-1?this._dispatchRequestItem(this.itemIndex+1):this.dispatchEvent(new CustomEvent(He.ON_TEST_FINISHED)):this.dispatchEvent(new CustomEvent(He.ON_NO_RESPONSE_ON_SUBMIT))}_dispatchRequestItem(e){this.dispatchEvent(new CustomEvent(He.ON_REQUEST_ITEM,{bubbles:!0,composed:!0,detail:e}))}_onRequestItem(e){this._dispatchRequestItem(e.detail)}_handleSlotchange(e){const t=this.querySelector("qti-assessment-item");t&&(this._itemRef=t,this.disabled&&this._itemRef.setAttribute("disabled",""),this.readonly&&this._itemRef.setAttribute("readonly",""))}render(){return s.html`
318
318
  <slot
319
319
  @slotchange=${this._handleSlotchange}
320
320
  @on-prev-item=${this._onPrevItem}
package/index.css CHANGED
@@ -2170,8 +2170,11 @@ qti-prompt {
2170
2170
  .qti-input-control-hidden qti-choice:before, .qti-input-control-hidden qti-choice:after {
2171
2171
  content: unset !important;
2172
2172
  }
2173
- qti-rubric-block {
2173
+ qti-rubric-block qti-content-body:not(:empty) {
2174
2174
  display: block;
2175
+ padding: 1rem;
2176
+ border: 1px solid #dddddd;
2177
+ margin-bottom: 1rem;
2175
2178
  }
2176
2179
  qti-content-body {
2177
2180
  display: block;
package/index.js CHANGED
@@ -4,7 +4,7 @@ import{LitElement as e,html as t,css as s,render as i}from"lit";import{customEle
4
4
  :host {
5
5
  display: block;
6
6
  }
7
- `,w=C([n("qti-item-body")],w);class k extends e{render(){return t` <slot></slot> `}connectedCallback(){this.parentElement.tagName.endsWith("INTERACTION")&&this.setAttribute("slot","prompt")}}function R(e,t){const s=Object.assign({waitUntilFirstUpdate:!1},t);return(t,i)=>{const{update:n}=t;if(e in t){const r=e;t.update=function(e){if(e.has(r)){const t=e.get(r),n=this[r];t!==n&&(s.waitUntilFirstUpdate&&!this.hasUpdated||this[i](t,n))}n.call(this,e)}}}}customElements.define("qti-prompt",k);const A=32;let N=class extends x{constructor(){super(...arguments),this.tabindex=0,this.disabled=!1,this.readonly=!1,this.checked=!1}handleDisabledChange(e,t){t?(this.tabindex=void 0,this.blur()):this.tabIndex=0}connectedCallback(){super.connectedCallback(),this.addEventListener("keyup",this._onKeyUp),this.addEventListener("click",this._onClick),this.emit(f.ON_REGISTER_CHOICE)}disconnectedCallback(){this.removeEventListener("keyup",this._onKeyUp),this.removeEventListener("click",this._onClick),this.emit(f.ON_LOOSE_CHOICE)}reset(){this.checked=!1,this.disabled=!1}_onKeyUp(e){e.altKey||e.keyCode===A&&(e.preventDefault(),this._toggleChecked())}_onClick(){this._toggleChecked()}_toggleChecked(){this.disabled||this.readonly||(this.checked=!this.checked,this.emit(f.ON_CHOICE_ELEMENT_SELECTED,{detail:{identifier:this.identifier,checked:this.checked}}))}render(){return l` <slot></slot> `}};C([r({reflect:!0}),O("design:type",String)],N.prototype,"identifier",void 0),C([r({type:Number,reflect:!0}),O("design:type",Object)],N.prototype,"tabindex",void 0),C([r({type:Boolean,reflect:!0}),O("design:type",Object)],N.prototype,"disabled",void 0),C([r({type:Boolean,reflect:!0}),O("design:type",Object)],N.prototype,"readonly",void 0),C([r({reflect:!0,type:Boolean,attribute:"aria-checked",converter:{toAttribute:e=>`${e}`}}),O("design:type",Object)],N.prototype,"checked",void 0),C([R("disabled",{waitUntilFirstUpdate:!0}),O("design:type",Function),O("design:paramtypes",[Object,Boolean]),O("design:returntype",void 0)],N.prototype,"handleDisabledChange",null),N=C([n("qti-choice")],N);class I extends e{render(){return t``}}customElements.define("qti-variabledeclaration",I);class T extends I{static get properties(){return{baseType:{type:String,attribute:"base-type"},identifier:{type:String,attribute:"identifier"},cardinality:{type:String,attribute:"cardinality"}}}connectedCallback(){super.connectedCallback();const e=new v({baseType:this.baseType,identifier:this.identifier,correctResponse:this.correctResponse,cardinality:this.cardinality||b.single,mapping:this.mapping});this.closest("qti-assessment-item").variables.push(e)}get correctResponse(){let e;const t=this.querySelector("qti-correct-response");if(t){const s=t.querySelectorAll("qti-value");if(1===s.length)e=s[0].textContent,s[0].remove();else{e=[];for(let t=0;t<s.length;t++)e.push(s[t].textContent),s[t].remove()}}return e}get mapping(){const e=this.querySelector("qti-mapping");if(e){const t=new Map,s=e.querySelectorAll("qti-map-entry");for(let e=0;e<s.length;e++){const i=s[e],n=i.getAttribute("map-key"),r=i.getAttribute("mapped-value");t.set(n,r?parseFloat(r):null)}return t}return null}}customElements.define("qti-response-declaration",T);class $ extends I{static get observedAttributes(){return["identifier","cardinality","base-type"]}connectedCallback(){super.connectedCallback();const e=this.getAttribute("identifier"),t=new E;t.identifier=e;this.closest("qti-assessment-item").variables.push(t)}}customElements.define("qti-outcome-declaration",$);let L=class extends x{};L=C([n("qti-companion-materials-info")],L);const M=c("logger");let H=class extends x{constructor(){super(...arguments),this.logger=new d(this,M,void 0,!0)}handleclassNamesChange(e,t){this.classNames.split(" ").forEach((e=>{switch(e){case"qti-rubric-discretionary-placement":default:this.setAttribute("slot","qti-rubric-block");break;case"qti-rubric-inline":this.setAttribute("slot","")}}))}render(){return t`<slot></slot>`}connectedCallback(){var e;super.connectedCallback(),this.view===(null===(e=this.logger.value)||void 0===e?void 0:e.view)?this.style.visibility="visible":this.style.visibility="hidden"}};H.styles=s`
7
+ `,w=C([n("qti-item-body")],w);class k extends e{render(){return t` <slot></slot> `}connectedCallback(){this.parentElement.tagName.endsWith("INTERACTION")&&this.setAttribute("slot","prompt")}}function R(e,t){const s=Object.assign({waitUntilFirstUpdate:!1},t);return(t,i)=>{const{update:n}=t;if(e in t){const r=e;t.update=function(e){if(e.has(r)){const t=e.get(r),n=this[r];t!==n&&(s.waitUntilFirstUpdate&&!this.hasUpdated||this[i](t,n))}n.call(this,e)}}}}customElements.define("qti-prompt",k);const A=32;let N=class extends x{constructor(){super(...arguments),this.tabindex=0,this.disabled=!1,this.readonly=!1,this.checked=!1}handleDisabledChange(e,t){t?(this.tabindex=void 0,this.blur()):this.tabIndex=0}connectedCallback(){super.connectedCallback(),this.addEventListener("keyup",this._onKeyUp),this.addEventListener("click",this._onClick),this.emit(f.ON_REGISTER_CHOICE)}disconnectedCallback(){this.removeEventListener("keyup",this._onKeyUp),this.removeEventListener("click",this._onClick),this.emit(f.ON_LOOSE_CHOICE)}reset(){this.checked=!1,this.disabled=!1}_onKeyUp(e){e.altKey||e.keyCode===A&&(e.preventDefault(),this._toggleChecked())}_onClick(){this._toggleChecked()}_toggleChecked(){this.disabled||this.readonly||(this.checked=!this.checked,this.emit(f.ON_CHOICE_ELEMENT_SELECTED,{detail:{identifier:this.identifier,checked:this.checked}}))}render(){return l` <slot></slot> `}};C([r({reflect:!0}),O("design:type",String)],N.prototype,"identifier",void 0),C([r({type:Number,reflect:!0}),O("design:type",Object)],N.prototype,"tabindex",void 0),C([r({type:Boolean,reflect:!0}),O("design:type",Object)],N.prototype,"disabled",void 0),C([r({type:Boolean,reflect:!0}),O("design:type",Object)],N.prototype,"readonly",void 0),C([r({reflect:!0,type:Boolean,attribute:"aria-checked",converter:{toAttribute:e=>`${e}`}}),O("design:type",Object)],N.prototype,"checked",void 0),C([R("disabled",{waitUntilFirstUpdate:!0}),O("design:type",Function),O("design:paramtypes",[Object,Boolean]),O("design:returntype",void 0)],N.prototype,"handleDisabledChange",null),N=C([n("qti-choice")],N);class I extends e{render(){return t``}}customElements.define("qti-variabledeclaration",I);class T extends I{static get properties(){return{baseType:{type:String,attribute:"base-type"},identifier:{type:String,attribute:"identifier"},cardinality:{type:String,attribute:"cardinality"}}}connectedCallback(){super.connectedCallback();const e=new v({baseType:this.baseType,identifier:this.identifier,correctResponse:this.correctResponse,cardinality:this.cardinality||b.single,mapping:this.mapping});this.closest("qti-assessment-item").variables.push(e)}get correctResponse(){let e;const t=this.querySelector("qti-correct-response");if(t){const s=t.querySelectorAll("qti-value");if(1===s.length)e=s[0].textContent,s[0].remove();else{e=[];for(let t=0;t<s.length;t++)e.push(s[t].textContent),s[t].remove()}}return e}get mapping(){const e=this.querySelector("qti-mapping");if(e){const t=new Map,s=e.querySelectorAll("qti-map-entry");for(let e=0;e<s.length;e++){const i=s[e],n=i.getAttribute("map-key"),r=i.getAttribute("mapped-value");t.set(n,r?parseFloat(r):null)}return t}return null}}customElements.define("qti-response-declaration",T);class $ extends I{static get observedAttributes(){return["identifier","cardinality","base-type"]}connectedCallback(){super.connectedCallback();const e=this.getAttribute("identifier"),t=new E;t.identifier=e;this.closest("qti-assessment-item").variables.push(t)}}customElements.define("qti-outcome-declaration",$);let L=class extends x{};L=C([n("qti-companion-materials-info")],L);const M=c("logger");let H=class extends x{constructor(){super(...arguments),this.logger=new d(this,M,(e=>{this.view===e.view?this.style.display="block":this.style.display="none"}),!0)}handleclassNamesChange(e,t){this.classNames.split(" ").forEach((e=>{switch(e){case"qti-rubric-discretionary-placement":this.setAttribute("slot","qti-rubric-block");break;case"qti-rubric-inline":this.setAttribute("slot","")}}))}render(){return t`<slot></slot>`}connectedCallback(){super.connectedCallback(),this.setAttribute("slot","qti-rubric-block")}};H.styles=s`
8
8
  :host {
9
9
  display: block;
10
10
  }
@@ -314,7 +314,7 @@ import{LitElement as e,html as t,css as s,render as i}from"lit";import{customEle
314
314
  `],customElements.define("qti-order-interaction",je);class De extends V{constructor(){super()}render(){return t`<slot></slot>
315
315
  <div class="notification"></div>`}connectedCallback(){super.connectedCallback()}disconnectedCallback(){super.disconnectedCallback()}}De.styles=[Ce],customElements.define("qti-select-point-interaction",De);const Fe=37,Pe=38,Ue=39,Be=40,Ge=33,ze=34,We=35,Ve=36;class Ke extends U{constructor(){super(),this.addEventListener("keydown",this._onKeyDown.bind(this))}reset(){}validate(){return!0}set response(e){}set min(e){this._min=e,this.style.setProperty("--qti-slider-interaction-lower-bounds",`${this._min}`)}get min(){return this._min}set max(e){this._max=e,this.style.setProperty("--qti-slider-interaction-upper-bounds",`${this._max}`)}get max(){return this._max}set step(e){this._step=e,this.style.setProperty("--qti-slider-interaction-step",`${this._step}`)}get step(){return this._step}render(){return t`
316
316
  <slot name="prompt"></slot>
317
- <slot></slot>`}firstUpdated(){this.addEventListener("mousedown",this._onMouseDown.bind(this)),this.style.setProperty("--qti-slider-interaction-step",this.step?this.step.toString():"10");const e=this.getAttribute("value");this._moveSliderTo(e)}connectedCallback(){super.connectedCallback(),this.setAttribute("tabindex","0"),this.setAttribute("role","slider")}get RAIL_WIDTH(){return this.offsetWidth}_onKeyDown(e){let t=!1;const s=this.value;switch(e.keyCode){case Fe:case Be:this._moveSliderTo(s-this.step),t=!0;break;case Ue:case Pe:this._moveSliderTo(s+this.step),t=!0;break;case ze:this._moveSliderTo(s-this.step),t=!0;break;case Ge:this._moveSliderTo(s+this.step),t=!0;break;case Ve:this._moveSliderTo(this.min),t=!0;break;case We:this._moveSliderTo(this.max),t=!0}t&&(e.preventDefault(),e.stopPropagation())}_onMouseDown(e){const t=e.target,s=this.min,i=this.max,n=e=>{const n=e.pageX-t.offsetLeft,r=s+(i-s)*n/this.RAIL_WIDTH;this._moveSliderTo(r),e.preventDefault(),e.stopPropagation()},r=()=>{document.removeEventListener("mousemove",n),document.removeEventListener("mouseup",r),this.saveResponse({base:{float:this.value}})};document.addEventListener("mousemove",n),document.addEventListener("mouseup",r),e.preventDefault(),e.stopPropagation(),e.target.focus();const o=e.pageX-t.offsetLeft,a=s+(i-s)*o/this.RAIL_WIDTH;this._moveSliderTo(a)}_moveSliderTo(e){const t=this.min,s=this.max;let i=Number(e);i<t&&(i=t),i>s&&(i=s);const n=(i-t)/(s-t)*100;this.style.setProperty("--qti-slider-interaction-aria-valuenow",`${n}%`)}}Ke.styles=[Ce,s``],C([r({type:Number,attribute:"lower-bound"}),O("design:type",Number),O("design:paramtypes",[Number])],Ke.prototype,"min",null),C([r({type:Number,attribute:"upper-bound"}),O("design:type",Number),O("design:paramtypes",[Number])],Ke.prototype,"max",null),C([r({type:Number,attribute:"step"}),O("design:type",Number),O("design:paramtypes",[Number])],Ke.prototype,"step",null),customElements.define("qti-slider-interaction",Ke);class Xe extends e{constructor(){super(...arguments),this.render=()=>t`${this.value}`}levenshtein(e,t){let s;if(0===e.length)return t.length;if(0===t.length)return e.length;e.length>t.length&&(s=e,e=t,t=s);const i=e.length,n=t.length,r=Array(i);let o,a,l;for(o=0;o<=i;o++)r[o]=o;for(o=1;o<=n;o++){for(l=o,a=1;a<=i;a++)s=r[a-1],r[a-1]=l,l=Math.min(s+(t[o-1]!==e[a-1]),l+1,r[a]+1);r[a-1]=l}return l}calculate(){const e=this.firstElementChild,t=this.lastElementChild,s=e.calculate(),i=t.calculate();return this.value=100-this.levenshtein(s.toString().trim(),i.toString().trim())/i.toString().length*100,this.value}}Xe.properties={value:{}},customElements.define("qti-custom-operator-levenshtein",Xe);class Qe extends e{render(){return t``}calculate(){var e;const t=null===(e=this.firstElementChild.calculate())||void 0===e?void 0:e.toString();return t?t.replace(/[^0-9$.,]/g,""):""}}customElements.define("qti-custom-operator-numeric",Qe);class Ye extends e{constructor(){super(...arguments),this.render=()=>t`${this.value}`}calculate(){var e;const t=null===(e=this.firstElementChild.calculate())||void 0===e?void 0:e.toString();return this.value=t?this.parseNumber(t,undefined):"",this.value}parseNumber(e,t=navigator.languages){const s=Intl.NumberFormat(t).format(1.1),i=new RegExp(`[^-+0-9${s.charAt(1)}]`,"g"),n=e.replace(i,"").replace(s.charAt(1),".");return parseFloat(n)}}Ye.properties={value:{}},customElements.define("qti-custom-operator-parse-numeric-nl",Ye);class Je extends e{render(){return t``}calculate(){var e;const t=null===(e=this.firstElementChild.calculate())||void 0===e?void 0:e.toString();return t?t.replace(/ /g,""):""}}customElements.define("qti-custom-operator-remove-spaces",Je);class Ze extends e{render(){return t``}calculate(){return this.firstElementChild.calculate().toString().trim()}}customElements.define("qti-custom-operator-trim",Ze);const et=(e,t)=>class extends e{_dispatch(){this.dispatchEvent(new CustomEvent(t,{composed:!0,bubbles:!0,detail:+this.getAttribute("index")}))}connectedCallback(){super.connectedCallback(),this.addEventListener("click",this._dispatch)}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("click",this._dispatch)}};customElements.define("qti-test-next",class extends(et(e,"on-next-item")){constructor(){super(...arguments),this.render=()=>t`<slot></slot>`}}),customElements.define("qti-test-item",class extends(et(e,"on-request-item")){constructor(){super(...arguments),this.render=()=>t`<slot></slot>`}}),customElements.define("qti-test-prev",class extends(et(e,"on-prev-item")){constructor(){super(...arguments),this.render=()=>t`<slot></slot>`}}),customElements.define("qti-test-check",class extends(et(e,"on-check-item")){constructor(){super(...arguments),this.render=()=>t`<slot></slot>`}}),customElements.define("qti-test-score",class extends(et(e,"on-score-item")){constructor(){super(...arguments),this.render=()=>t`<slot></slot>`}});const tt={ON_ITEM_WAS_FINISHED:"onItemWasFinished",ON_NO_RESPONSE_ON_SUBMIT:"onNoResponseOnSubmit",ON_REQUEST_ITEM:"onRequestItem",ON_TEST_FINISHED:"onTestFinished"};var st,it;!function(e){e.linear="linear",e.nonlinear="nonlinear"}(st||(st={})),function(e){e.individual="individual",e.simultaneous="simultaneous"}(it||(it={}));let nt=class extends e{constructor(){super(...arguments),this.disabled=!1,this.readonly=!1,this._navigationMode=st.nonlinear,this._submissionMode=it.simultaneous,this.items=[],this.itemIndex=0}handleNavigationModeChange(e,t){this.prevButton.style.visibility=t===st.linear?"hidden":"visible"}handleItemIndexChange(e,t){this._dispatchRequestItem(t)}set qtiContext(e){this.provider=new h(this,M,{log:e=>{console.log(`[my-app] ${e}`)},view:e.view})}set itemXML(e){this._itemRef&&this._itemRef.remove(),this.insertAdjacentHTML("afterbegin",e)}set itemResponse(e){this._itemRef&&(this._itemRef.responses=e,this._navigationMode===st.linear&&(this._itemRef.style.filter="blur(5px)",this._itemRef.setAttribute("disabled",""),this.dispatchEvent(new CustomEvent(tt.ON_ITEM_WAS_FINISHED))))}_onCheckItem(){return!!this._itemRef.validateResponses()&&(this._itemRef.processResponse(),!0)}_onScoreItem(){this._onCheckItem()&&this._itemRef.processResponse()}_onPrevItem(){this.itemIndex>0&&this._dispatchRequestItem(this.itemIndex-1)}_onNextItem(){this._navigationMode!==st.linear||this._itemRef.validateResponses()?this.itemIndex<this.items.length-1?this._dispatchRequestItem(this.itemIndex+1):this.dispatchEvent(new CustomEvent(tt.ON_TEST_FINISHED)):this.dispatchEvent(new CustomEvent(tt.ON_NO_RESPONSE_ON_SUBMIT))}_dispatchRequestItem(e){this.dispatchEvent(new CustomEvent(tt.ON_REQUEST_ITEM,{bubbles:!0,composed:!0,detail:e}))}_onRequestItem(e){this._dispatchRequestItem(e.detail)}_handleSlotchange(e){const t=this.querySelector("qti-assessment-item");t&&(this._itemRef=t,this.disabled&&this._itemRef.setAttribute("disabled",""),this.readonly&&this._itemRef.setAttribute("readonly",""))}render(){return t`
317
+ <slot></slot>`}firstUpdated(){this.addEventListener("mousedown",this._onMouseDown.bind(this)),this.style.setProperty("--qti-slider-interaction-step",this.step?this.step.toString():"10");const e=this.getAttribute("value");this._moveSliderTo(e)}connectedCallback(){super.connectedCallback(),this.setAttribute("tabindex","0"),this.setAttribute("role","slider")}get RAIL_WIDTH(){return this.offsetWidth}_onKeyDown(e){let t=!1;const s=this.value;switch(e.keyCode){case Fe:case Be:this._moveSliderTo(s-this.step),t=!0;break;case Ue:case Pe:this._moveSliderTo(s+this.step),t=!0;break;case ze:this._moveSliderTo(s-this.step),t=!0;break;case Ge:this._moveSliderTo(s+this.step),t=!0;break;case Ve:this._moveSliderTo(this.min),t=!0;break;case We:this._moveSliderTo(this.max),t=!0}t&&(e.preventDefault(),e.stopPropagation())}_onMouseDown(e){const t=e.target,s=this.min,i=this.max,n=e=>{const n=e.pageX-t.offsetLeft,r=s+(i-s)*n/this.RAIL_WIDTH;this._moveSliderTo(r),e.preventDefault(),e.stopPropagation()},r=()=>{document.removeEventListener("mousemove",n),document.removeEventListener("mouseup",r),this.saveResponse({base:{float:this.value}})};document.addEventListener("mousemove",n),document.addEventListener("mouseup",r),e.preventDefault(),e.stopPropagation(),e.target.focus();const o=e.pageX-t.offsetLeft,a=s+(i-s)*o/this.RAIL_WIDTH;this._moveSliderTo(a)}_moveSliderTo(e){const t=this.min,s=this.max;let i=Number(e);i<t&&(i=t),i>s&&(i=s);const n=(i-t)/(s-t)*100;this.style.setProperty("--qti-slider-interaction-aria-valuenow",`${n}%`)}}Ke.styles=[Ce,s``],C([r({type:Number,attribute:"lower-bound"}),O("design:type",Number),O("design:paramtypes",[Number])],Ke.prototype,"min",null),C([r({type:Number,attribute:"upper-bound"}),O("design:type",Number),O("design:paramtypes",[Number])],Ke.prototype,"max",null),C([r({type:Number,attribute:"step"}),O("design:type",Number),O("design:paramtypes",[Number])],Ke.prototype,"step",null),customElements.define("qti-slider-interaction",Ke);class Xe extends e{constructor(){super(...arguments),this.render=()=>t`${this.value}`}levenshtein(e,t){let s;if(0===e.length)return t.length;if(0===t.length)return e.length;e.length>t.length&&(s=e,e=t,t=s);const i=e.length,n=t.length,r=Array(i);let o,a,l;for(o=0;o<=i;o++)r[o]=o;for(o=1;o<=n;o++){for(l=o,a=1;a<=i;a++)s=r[a-1],r[a-1]=l,l=Math.min(s+(t[o-1]!==e[a-1]),l+1,r[a]+1);r[a-1]=l}return l}calculate(){const e=this.firstElementChild,t=this.lastElementChild,s=e.calculate(),i=t.calculate();return this.value=100-this.levenshtein(s.toString().trim(),i.toString().trim())/i.toString().length*100,this.value}}Xe.properties={value:{}},customElements.define("qti-custom-operator-levenshtein",Xe);class Qe extends e{render(){return t``}calculate(){var e;const t=null===(e=this.firstElementChild.calculate())||void 0===e?void 0:e.toString();return t?t.replace(/[^0-9$.,]/g,""):""}}customElements.define("qti-custom-operator-numeric",Qe);class Ye extends e{constructor(){super(...arguments),this.render=()=>t`${this.value}`}calculate(){var e;const t=null===(e=this.firstElementChild.calculate())||void 0===e?void 0:e.toString();return this.value=t?this.parseNumber(t,undefined):"",this.value}parseNumber(e,t=navigator.languages){const s=Intl.NumberFormat(t).format(1.1),i=new RegExp(`[^-+0-9${s.charAt(1)}]`,"g"),n=e.replace(i,"").replace(s.charAt(1),".");return parseFloat(n)}}Ye.properties={value:{}},customElements.define("qti-custom-operator-parse-numeric-nl",Ye);class Je extends e{render(){return t``}calculate(){var e;const t=null===(e=this.firstElementChild.calculate())||void 0===e?void 0:e.toString();return t?t.replace(/ /g,""):""}}customElements.define("qti-custom-operator-remove-spaces",Je);class Ze extends e{render(){return t``}calculate(){return this.firstElementChild.calculate().toString().trim()}}customElements.define("qti-custom-operator-trim",Ze);const et=(e,t)=>class extends e{_dispatch(){this.dispatchEvent(new CustomEvent(t,{composed:!0,bubbles:!0,detail:+this.getAttribute("index")}))}connectedCallback(){super.connectedCallback(),this.addEventListener("click",this._dispatch)}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("click",this._dispatch)}};customElements.define("qti-test-next",class extends(et(e,"on-next-item")){constructor(){super(...arguments),this.render=()=>t`<slot></slot>`}}),customElements.define("qti-test-item",class extends(et(e,"on-request-item")){constructor(){super(...arguments),this.render=()=>t`<slot></slot>`}}),customElements.define("qti-test-prev",class extends(et(e,"on-prev-item")){constructor(){super(...arguments),this.render=()=>t`<slot></slot>`}}),customElements.define("qti-test-check",class extends(et(e,"on-check-item")){constructor(){super(...arguments),this.render=()=>t`<slot></slot>`}}),customElements.define("qti-test-score",class extends(et(e,"on-score-item")){constructor(){super(...arguments),this.render=()=>t`<slot></slot>`}});const tt={ON_ITEM_WAS_FINISHED:"onItemWasFinished",ON_NO_RESPONSE_ON_SUBMIT:"onNoResponseOnSubmit",ON_REQUEST_ITEM:"onRequestItem",ON_TEST_FINISHED:"onTestFinished"};var st,it;!function(e){e.linear="linear",e.nonlinear="nonlinear"}(st||(st={})),function(e){e.individual="individual",e.simultaneous="simultaneous"}(it||(it={}));let nt=class extends e{constructor(){super(...arguments),this.disabled=!1,this.readonly=!1,this._navigationMode=st.nonlinear,this._submissionMode=it.simultaneous,this.items=[],this.itemIndex=0,this.provider=new h(this,M,{log:e=>{console.log(`[my-app] ${e}`)},view:"candidate"})}handleNavigationModeChange(e,t){this.prevButton.style.visibility=t===st.linear?"hidden":"visible"}handleItemIndexChange(e,t){this._dispatchRequestItem(t)}set qtiContext(e){this.provider.value.view=e.view,this.provider.updateObservers()}set itemXML(e){this._itemRef&&this._itemRef.remove(),this.insertAdjacentHTML("afterbegin",e)}set itemResponse(e){this._itemRef&&(this._itemRef.responses=e,this._navigationMode===st.linear&&(this._itemRef.style.filter="blur(5px)",this._itemRef.setAttribute("disabled",""),this.dispatchEvent(new CustomEvent(tt.ON_ITEM_WAS_FINISHED))))}_onCheckItem(){return!!this._itemRef.validateResponses()&&(this._itemRef.processResponse(),!0)}_onScoreItem(){this._onCheckItem()&&this._itemRef.processResponse()}_onPrevItem(){this.itemIndex>0&&this._dispatchRequestItem(this.itemIndex-1)}_onNextItem(){this._navigationMode!==st.linear||this._itemRef.validateResponses()?this.itemIndex<this.items.length-1?this._dispatchRequestItem(this.itemIndex+1):this.dispatchEvent(new CustomEvent(tt.ON_TEST_FINISHED)):this.dispatchEvent(new CustomEvent(tt.ON_NO_RESPONSE_ON_SUBMIT))}_dispatchRequestItem(e){this.dispatchEvent(new CustomEvent(tt.ON_REQUEST_ITEM,{bubbles:!0,composed:!0,detail:e}))}_onRequestItem(e){this._dispatchRequestItem(e.detail)}_handleSlotchange(e){const t=this.querySelector("qti-assessment-item");t&&(this._itemRef=t,this.disabled&&this._itemRef.setAttribute("disabled",""),this.readonly&&this._itemRef.setAttribute("readonly",""))}render(){return t`
318
318
  <slot
319
319
  @slotchange=${this._handleSlotchange}
320
320
  @on-prev-item=${this._onPrevItem}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@citolab/qti-components",
3
- "version": "3.0.43",
3
+ "version": "3.0.44",
4
4
  "repository": "@citolab/qti-components",
5
5
  "author": "Patrick de Klein",
6
6
  "license": "MIT",