@citolab/qti-components 6.4.2 → 6.4.5

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.
@@ -1929,14 +1929,24 @@ qti-choice-interaction.qti-orientation-horizontal {
1929
1929
  qti-choice-interaction[orientation='horizontal'] {
1930
1930
  flex-direction: row;
1931
1931
  }
1932
- ::host{
1933
- height: 100vh;
1934
- width: 100vw;
1935
- --tw-bg-opacity: 1;
1936
- background-color: rgb(248 250 252 / var(--tw-bg-opacity));
1932
+ /* only applied in qti-test, if present */
1933
+ /*
1934
+ ::host {
1935
+ @apply h-screen w-screen bg-slate-50;
1937
1936
  }
1938
- qti-assessment-test{
1937
+ */
1938
+ /* qti-assessment-test {
1939
+ @apply grid h-full w-full grid-cols-3;
1940
+ qti-test-part {
1941
+ @apply container col-span-3 mx-auto aspect-[4/3];
1942
+ }
1943
+ } */
1944
+ qti-assessment-test qti-test-part qti-assessment-section{
1939
1945
  display: block;
1946
+ overflow-y: auto;
1947
+ border-radius: 0.125rem;
1948
+ --tw-bg-opacity: 1;
1949
+ background-color: rgb(255 255 255 / var(--tw-bg-opacity));
1940
1950
  padding: 2rem;
1941
1951
  }
1942
1952
  qti-assessment-test .nav{
@@ -2086,10 +2096,6 @@ qti-assessment-test test-paging-buttons > button[data-active-item='true']:focus-
2086
2096
  outline-offset: 2px;
2087
2097
  outline-color: #4f46e5;
2088
2098
  }
2089
- qti-assessment-test qti-test-part qti-assessment-section{
2090
- aspect-ratio: 16 / 9;
2091
- width: 100%;
2092
- }
2093
2099
  `;var o=class extends g{constructor(){super();this.itemLocation="";this.disabled=!1;this._xml="";this.audienceContext={view:"candidate"};this.render=()=>d`${l(this._xml)}<slot></slot>`;this.addEventListener("qti-item-first-updated",t=>{this.checkAudienceContext()})}update(t){t.has("disabled")&&this.assessmentItem&&(this.assessmentItem.disabled=this.disabled),t.has("audienceContext")&&this.checkAudienceContext(),super.update(t)}checkAudienceContext(){var t,a;(t=this.shadowRoot.querySelectorAll("[view]"))==null||t.forEach(r=>{r.getAttribute("view")===this.audienceContext.view?r.classList.add("show"):r.classList.remove("show")}),(a=this.assessmentItem)==null||a.showCorrectResponse(this.audienceContext.view==="scorer")}set xml(t){this._xml=n(t).customTypes().cDataToComment().customDefinition().assetsLocation(`${this.itemLocation}`).xml()}set css(t){var r;let a=new CSSStyleSheet;a.replaceSync(t),(r=this.shadowRoot)==null||r.adoptedStyleSheets.push(a)}get assessmentItem(){var t;return(t=this.shadowRoot)==null?void 0:t.querySelector("qti-assessment-item")}connectedCallback(){super.connectedCallback(),this.css=s}};o.styles=c`
2094
2100
  [view],
2095
2101
  qti-outcome-declaration,
@@ -1929,14 +1929,24 @@ qti-choice-interaction.qti-orientation-horizontal {
1929
1929
  qti-choice-interaction[orientation='horizontal'] {
1930
1930
  flex-direction: row;
1931
1931
  }
1932
- ::host{
1933
- height: 100vh;
1934
- width: 100vw;
1935
- --tw-bg-opacity: 1;
1936
- background-color: rgb(248 250 252 / var(--tw-bg-opacity));
1932
+ /* only applied in qti-test, if present */
1933
+ /*
1934
+ ::host {
1935
+ @apply h-screen w-screen bg-slate-50;
1937
1936
  }
1938
- qti-assessment-test{
1937
+ */
1938
+ /* qti-assessment-test {
1939
+ @apply grid h-full w-full grid-cols-3;
1940
+ qti-test-part {
1941
+ @apply container col-span-3 mx-auto aspect-[4/3];
1942
+ }
1943
+ } */
1944
+ qti-assessment-test qti-test-part qti-assessment-section{
1939
1945
  display: block;
1946
+ overflow-y: auto;
1947
+ border-radius: 0.125rem;
1948
+ --tw-bg-opacity: 1;
1949
+ background-color: rgb(255 255 255 / var(--tw-bg-opacity));
1940
1950
  padding: 2rem;
1941
1951
  }
1942
1952
  qti-assessment-test .nav{
@@ -2086,10 +2096,6 @@ qti-assessment-test test-paging-buttons > button[data-active-item='true']:focus-
2086
2096
  outline-offset: 2px;
2087
2097
  outline-color: #4f46e5;
2088
2098
  }
2089
- qti-assessment-test qti-test-part qti-assessment-section{
2090
- aspect-ratio: 16 / 9;
2091
- width: 100%;
2092
- }
2093
2099
  `;var o=class extends _lit.LitElement{constructor(){super();this.itemLocation="";this.disabled=!1;this._xml="";this.audienceContext={view:"candidate"};this.render=()=>_lit.html`${_unsafehtmljs.unsafeHTML.call(void 0, this._xml)}<slot></slot>`;this.addEventListener("qti-item-first-updated",t=>{this.checkAudienceContext()})}update(t){t.has("disabled")&&this.assessmentItem&&(this.assessmentItem.disabled=this.disabled),t.has("audienceContext")&&this.checkAudienceContext(),super.update(t)}checkAudienceContext(){var t,a;(t=this.shadowRoot.querySelectorAll("[view]"))==null||t.forEach(r=>{r.getAttribute("view")===this.audienceContext.view?r.classList.add("show"):r.classList.remove("show")}),(a=this.assessmentItem)==null||a.showCorrectResponse(this.audienceContext.view==="scorer")}set xml(t){this._xml=_chunkCCQXZDO6cjs.a.call(void 0, t).customTypes().cDataToComment().customDefinition().assetsLocation(`${this.itemLocation}`).xml()}set css(t){var r;let a=new CSSStyleSheet;a.replaceSync(t),(r=this.shadowRoot)==null||r.adoptedStyleSheets.push(a)}get assessmentItem(){var t;return(t=this.shadowRoot)==null?void 0:t.querySelector("qti-assessment-item")}connectedCallback(){super.connectedCallback(),this.css=s}};o.styles=_lit.css`
2094
2100
  [view],
2095
2101
  qti-outcome-declaration,
@@ -1,24 +1,35 @@
1
- import{a as ft}from"./chunk-O4MG75IZ.js";import{a as h,b as v,c as n,d as a}from"./chunk-YWGBLO7P.js";import{customElement as Ft,property as ht}from"lit/decorators.js";var q=class extends ft{connectedCallback(){super.connectedCallback();let t=new CustomEvent("register-item-ref",{bubbles:!0,composed:!0,detail:{identifier:this.identifier,href:this.href}});this.dispatchEvent(t)}};n([ht({type:String})],q.prototype,"identifier",2),n([ht({type:String})],q.prototype,"href",2),q=n([Ft("qti-assessment-item-ref")],q);import{html as Ut,LitElement as Vt}from"lit";import{customElement as jt,property as J}from"lit/decorators.js";import{provide as Xt}from"@lit/context";import{createContext as Ht}from"@lit/context";var xt=class{},c=Ht("test");import{signal as Wt,effect as Bt}from"@lit-labs/preact-signals";var E=class extends Vt{constructor(){super();this.itemIndex=0;this._initialValue={itemIndex:0,audienceContext:"candidate",items:[]};this.signalContext=Wt(this._initialValue);this.itemRefEls=new Map;this.restoreContext=t=>{var e;t||(t=this._initialValue),this.signalContext.value.itemIndex=t.itemIndex,(e=t.items)==null||e.forEach(r=>{let i=this.signalContext.value.items.find(m=>m.identifier===r.identifier);i?i.variables=r.variables:this.signalContext.value.items.push(r)})};this.itemConnected=t=>{let e=this.signalContext.value.items.find(r=>(r==null?void 0:r.identifier)===(t==null?void 0:t.identifier));e.variables.length===1?this.copyItemVariables(t.identifier):t.variables=[...e.variables]};this.addEventListener("register-item-ref",this.onItemRefRegistered),this.addEventListener("on-test-request-item",this.onTestRequestItem),this.addEventListener("qti-item-first-updated",t=>this.itemConnected(t.detail)),this.addEventListener("qti-interaction-changed",t=>this.copyItemVariables(t.detail.item)),this.addEventListener("qti-outcome-changed",t=>this.copyItemVariables(t.detail.item)),Bt(()=>this._context=this.signalContext.value)}set context(t){console.log("set context",t),this.signalContext.value=t}updated(t){var e,r;if(t.has("_context")){let i=(e=t.get("_context"))==null?void 0:e.itemIndex;this.signalContext.value.items.length>0&&this.signalContext.value.itemIndex!==null&&i!==this.signalContext.value.itemIndex&&this._requestItem(this.signalContext.value.items[this.signalContext.value.itemIndex].identifier,(r=this.signalContext.value.items[i])==null?void 0:r.identifier)}t.has("audienceContext")&&(this._context=v(h({},this._context),{audienceContext:this.audienceContext}),this.itemRefEls.forEach((i,m)=>i.audienceContext={view:this.audienceContext})),t.has("itemIndex")&&(this.signalContext.value=v(h({},this.signalContext.value),{itemIndex:this.itemIndex}))}copyItemVariables(t){this.signalContext.value=v(h({},this.signalContext.value),{items:this.signalContext.value.items.map(e=>e.identifier==t?v(h({},e),{variables:this.getAssessmentItem(t).context.variables}):e)})}getAssessmentItem(t){return this.querySelector(`qti-assessment-item-ref[identifier="${t}"]`).assessmentItem}get currentAssessmentItem(){return this.querySelector(`qti-assessment-item-ref[identifier="${this.signalContext.value.items[this.signalContext.value.itemIndex].identifier}"]`).assessmentItem}onItemRefRegistered(t){this.itemRefEls.set(t.detail.identifier,t.target);let{href:e,identifier:r}=t.detail;this.signalContext.value.items=[...this.signalContext.value.items,{href:e,identifier:r,variables:[{identifier:"completionStatus",cardinality:"single",baseType:"string",value:"not_attempted",type:"outcome"}]}]}onTestRequestItem(t){t.stopImmediatePropagation(),t.detail!==this.signalContext.value.itemIndex&&(this.signalContext.value=v(h({},this.signalContext.value),{itemIndex:t.detail}))}firstUpdated(t){if(super.firstUpdated(t),this.signalContext.value.items.length===0){console.warn("No items found in the test, please add at least one item");return}this._emit("qti-assessment-first-updated",this)}_requestItem(t,e){this.dispatchEvent(new CustomEvent("on-test-set-item",{bubbles:!0,composed:!0,detail:{old:e,new:t}}))}_emit(t,e=null){this.dispatchEvent(new CustomEvent(t,{bubbles:!0,composed:!0,detail:e}))}render(){return Ut`<slot></slot>`}};n([J({type:String,reflect:!0,attribute:"audience-context"})],E.prototype,"audienceContext",2),n([J({type:Number,reflect:!0,attribute:"item-index"})],E.prototype,"itemIndex",2),n([J({type:String})],E.prototype,"identifier",2),n([Xt({context:c}),J({attribute:!1})],E.prototype,"_context",2),E=n([jt("qti-assessment-test")],E);import{html as Jt,LitElement as Gt}from"lit";import{customElement as Kt,property as bt}from"lit/decorators.js";var $=class extends Gt{constructor(){super(...arguments);this.loading=!1;this._navigationMode="linear"}render(){return Jt`
1
+ import{a as ft}from"./chunk-67E36LYB.js";import{a as x,b as C,c as n,d as m}from"./chunk-YWGBLO7P.js";import{customElement as Ft,property as ht}from"lit/decorators.js";var I=class extends ft{connectedCallback(){super.connectedCallback();let t=new CustomEvent("register-item-ref",{bubbles:!0,composed:!0,detail:{identifier:this.identifier,href:this.href}});this.dispatchEvent(t)}};n([ht({type:String})],I.prototype,"identifier",2),n([ht({type:String})],I.prototype,"href",2),I=n([Ft("qti-assessment-item-ref")],I);import{html as Ut,LitElement as jt}from"lit";import{customElement as Xt,property as G}from"lit/decorators.js";import{provide as Wt}from"@lit/context";import{createContext as Ht}from"@lit/context";var xt=class{},c=Ht("test");import{signal as Jt,effect as Gt}from"@lit-labs/preact-signals";var E=class extends jt{constructor(){super();this.itemIndex=0;this._initialValue={itemIndex:0,audienceContext:"candidate",items:[]};this.signalContext=Jt(this._initialValue);this.itemRefEls=new Map;this.restoreContext=t=>{var e;t||(t=this._initialValue),this.signalContext.value.itemIndex=t.itemIndex,(e=t.items)==null||e.forEach(r=>{let i=this.signalContext.value.items.find(a=>a.identifier===r.identifier);i?i.variables=r.variables:this.signalContext.value.items.push(r)})};this.itemConnected=t=>{let e=this.signalContext.value.items.find(r=>(r==null?void 0:r.identifier)===(t==null?void 0:t.identifier));e.variables.length===1?this.copyItemVariables(t.identifier):t.variables=[...e.variables]};this.addEventListener("register-item-ref",this.onItemRefRegistered),this.addEventListener("on-test-request-item",this.onTestRequestItem),this.addEventListener("qti-item-first-updated",t=>this.itemConnected(t.detail)),this.addEventListener("qti-interaction-changed",t=>this.copyItemVariables(t.detail.item)),this.addEventListener("qti-outcome-changed",t=>this.copyItemVariables(t.detail.item)),Gt(()=>this._context=this.signalContext.value)}set context(t){console.log("set context",t),this.signalContext.value=t}updated(t){var e,r;if(t.has("_context")){let i=(e=t.get("_context"))==null?void 0:e.itemIndex;this.signalContext.value.items.length>0&&this.signalContext.value.itemIndex!==null&&i!==this.signalContext.value.itemIndex&&this._requestItem(this.signalContext.value.items[this.signalContext.value.itemIndex].identifier,(r=this.signalContext.value.items[i])==null?void 0:r.identifier)}t.has("audienceContext")&&(this._context=C(x({},this._context),{audienceContext:this.audienceContext}),this.itemRefEls.forEach((i,a)=>i.audienceContext={view:this.audienceContext})),t.has("itemIndex")&&(this.signalContext.value=C(x({},this.signalContext.value),{itemIndex:this.itemIndex}))}copyItemVariables(t){this.signalContext.value=C(x({},this.signalContext.value),{items:this.signalContext.value.items.map(e=>e.identifier==t?C(x({},e),{variables:this.getAssessmentItem(t).context.variables}):e)})}getAssessmentItem(t){return this.querySelector(`qti-assessment-item-ref[identifier="${t}"]`).assessmentItem}get currentAssessmentItem(){return this.querySelector(`qti-assessment-item-ref[identifier="${this.signalContext.value.items[this.signalContext.value.itemIndex].identifier}"]`).assessmentItem}onItemRefRegistered(t){this.itemRefEls.set(t.detail.identifier,t.target);let{href:e,identifier:r}=t.detail;this.signalContext.value.items=[...this.signalContext.value.items,{href:e,identifier:r,variables:[{identifier:"completionStatus",cardinality:"single",baseType:"string",value:"not_attempted",type:"outcome"}]}]}onTestRequestItem(t){t.stopImmediatePropagation(),t.detail!==this.signalContext.value.itemIndex&&(this.signalContext.value=C(x({},this.signalContext.value),{itemIndex:t.detail}))}firstUpdated(t){if(super.firstUpdated(t),this.signalContext.value.items.length===0){console.warn("No items found in the test, please add at least one item");return}this._emit("qti-assessment-first-updated",this)}_requestItem(t,e){this.dispatchEvent(new CustomEvent("on-test-set-item",{bubbles:!0,composed:!0,detail:{old:e,new:t}}))}_emit(t,e=null){this.dispatchEvent(new CustomEvent(t,{bubbles:!0,composed:!0,detail:e}))}render(){return Ut`<slot></slot>`}};n([G({type:String,reflect:!0,attribute:"audience-context"})],E.prototype,"audienceContext",2),n([G({type:Number,reflect:!0,attribute:"item-index"})],E.prototype,"itemIndex",2),n([G({type:String})],E.prototype,"identifier",2),n([Wt({context:c}),G({attribute:!1})],E.prototype,"_context",2),E=n([Xt("qti-assessment-test")],E);import{html as Kt,LitElement as Tt}from"lit";import{customElement as Yt,property as bt}from"lit/decorators.js";var $=class extends Tt{constructor(){super(...arguments);this.loading=!1;this._navigationMode="linear"}render(){return Kt`
2
2
  <slot name="qti-item"></slot>
3
3
  <slot> </slot>
4
- `}};n([bt({type:Boolean,reflect:!0})],$.prototype,"loading",2),n([bt({type:String,attribute:"navigation-mode"})],$.prototype,"_navigationMode",2),$=n([Kt("qti-test-part")],$);import{html as ue,render as $t}from"lit";var A,gt=0;function tt(o){A=o}function et(){A=null,gt=0}function wt(){return gt++}var G=Symbol("haunted.phase"),L=Symbol("haunted.hook"),st=Symbol("haunted.update"),rt=Symbol("haunted.commit"),g=Symbol("haunted.effects"),_=Symbol("haunted.layoutEffects"),R="haunted.context";var Yt,Zt,Tt,O=class{constructor(s,t){a(this,"update");a(this,"host");a(this,"virtual");a(this,Yt);a(this,Zt);a(this,Tt);this.update=s,this.host=t,this[L]=new Map,this[g]=[],this[_]=[]}run(s){tt(this);let t=s();return et(),t}_runEffects(s){let t=this[s];tt(this);for(let e of t)e.call(this);et()}runEffects(){this._runEffects(g)}runLayoutEffects(){this._runEffects(_)}teardown(){this[L].forEach(t=>{typeof t.teardown=="function"&&t.teardown()})}};Yt=L,Zt=g,Tt=_;var te=Promise.resolve().then.bind(Promise.resolve());function yt(){let o=[],s;function t(){s=null;let e=o;o=[];for(var r=0,i=e.length;r<i;r++)e[r]()}return function(e){o.push(e),s==null&&(s=te(t))}}var ee=yt(),vt=yt(),se,I=class{constructor(s,t){a(this,"renderer");a(this,"host");a(this,"state");a(this,se);a(this,"_updateQueued");this.renderer=s,this.host=t,this.state=new O(this.update.bind(this),t),this[G]=null,this._updateQueued=!1}update(){this._updateQueued||(ee(()=>{let s=this.handlePhase(st);vt(()=>{this.handlePhase(rt,s),vt(()=>{this.handlePhase(g)})}),this._updateQueued=!1}),this._updateQueued=!0)}handlePhase(s,t){switch(this[G]=s,s){case rt:this.commit(t),this.runEffects(_);return;case st:return this.render();case g:return this.runEffects(g)}}render(){return this.state.run(()=>this.renderer.call(this.host,this.host))}runEffects(s){this.state._runEffects(s)}teardown(){this.state.teardown()}};se=G;var re=(o="")=>o.replace(/-+([a-z])?/g,(s,t)=>t?t.toUpperCase():"");function Ct(o){class s extends I{constructor(i,m,u){super(i,u||m);a(this,"frag");this.frag=m}commit(i){o(i,this.frag)}}function t(e,r,i){let m=(i||r||{}).baseElement||HTMLElement,{observedAttributes:u=[],useShadowDOM:l=!0,shadowRootInit:k={}}=i||r||{};class M extends m{constructor(){super();a(this,"_scheduler");l===!1?this._scheduler=new s(e,this):(this.attachShadow(h({mode:"open"},k)),this._scheduler=new s(e,this.shadowRoot,this))}static get observedAttributes(){return e.observedAttributes||u||[]}connectedCallback(){this._scheduler.update()}disconnectedCallback(){this._scheduler.teardown()}attributeChangedCallback(b,w,d){if(w===d)return;let Pt=d===""?!0:d;Reflect.set(this,re(b),Pt)}}function Dt(C){let f=C,b=!1;return Object.freeze({enumerable:!0,configurable:!0,get(){return f},set(w){b&&f===w||(b=!0,f=w,this._scheduler&&this._scheduler.update())}})}let Nt=new Proxy(m.prototype,{getPrototypeOf(C){return C},set(C,f,b,w){let d;return f in C?(d=Object.getOwnPropertyDescriptor(C,f),d&&d.set?(d.set.call(w,b),!0):(Reflect.set(C,f,b,w),!0)):(typeof f=="symbol"||f[0]==="_"?d={enumerable:!0,configurable:!0,writable:!0,value:b}:d=Dt(b),Object.defineProperty(w,f,d),d.set&&d.set.call(w,b),!0)}});return Object.setPrototypeOf(M.prototype,Nt),M}return t}var p=class{constructor(s,t){a(this,"id");a(this,"state");this.id=s,this.state=t}};function oe(o,...s){let t=wt(),e=A[L],r=e.get(t);return r||(r=new o(t,A,...s),e.set(t,r)),r.update(...s)}function x(o){return oe.bind(null,o)}function K(o){return x(class extends p{constructor(t,e,r,i){super(t,e);a(this,"callback");a(this,"lastValues");a(this,"values");a(this,"_teardown");o(e,this)}update(t,e){this.callback=t,this.values=e}call(){(!this.values||this.hasChanged())&&this.run(),this.lastValues=this.values}run(){this.teardown(),this._teardown=this.callback.call(this.state)}teardown(){typeof this._teardown=="function"&&this._teardown()}hasChanged(){return!this.lastValues||this.values.some((t,e)=>this.lastValues[e]!==t)}})}function ot(o,s){o[g].push(s)}var Y=K(ot);var it=x(class extends p{constructor(s,t,e){super(s,t);a(this,"Context");a(this,"value");a(this,"_ranEffect");a(this,"_unsubscribe");this._updater=this._updater.bind(this),this._ranEffect=!1,this._unsubscribe=null,ot(t,this)}update(s){if(this.state.virtual)throw new Error("can't be used with virtual components");return this.Context!==s&&(this._subscribe(s),this.Context=s),this.value}call(){this._ranEffect||(this._ranEffect=!0,this._unsubscribe&&this._unsubscribe(),this._subscribe(this.Context),this.state.update())}_updater(s){this.value=s,this.state.update()}_subscribe(s){let t={Context:s,callback:this._updater};this.state.host.dispatchEvent(new CustomEvent(R,{detail:t,bubbles:!0,cancelable:!0,composed:!0}));let{unsubscribe:e=null,value:r}=t;this.value=e?r:s.defaultValue,this._unsubscribe=e}teardown(){this._unsubscribe&&this._unsubscribe()}});function Et(o){return s=>{let t={Provider:class extends HTMLElement{constructor(){super();a(this,"listeners");a(this,"_value");this.listeners=new Set,this.addEventListener(R,this)}disconnectedCallback(){this.removeEventListener(R,this)}handleEvent(r){let{detail:i}=r;i.Context===t&&(i.value=this.value,i.unsubscribe=this.unsubscribe.bind(this,i.callback),this.listeners.add(i.callback),r.stopPropagation())}unsubscribe(r){this.listeners.delete(r)}set value(r){this._value=r;for(let i of this.listeners)i(r)}get value(){return this._value}},Consumer:o(function({render:e}){let r=it(t);return e(r)}),defaultValue:s};return t}}var nt=x(class extends p{constructor(s,t,e,r){super(s,t);a(this,"value");a(this,"values");this.value=e(),this.values=r}update(s,t){return this.hasChanged(t)&&(this.values=t,this.value=s()),this.value}hasChanged(s=[]){return s.some((t,e)=>this.values[e]!==t)}});function ie(o,s){o[_].push(s)}var _t=K(ie);var Z=x(class extends p{constructor(s,t,e){super(s,t);a(this,"args");this.updater=this.updater.bind(this),typeof e=="function"&&(e=e()),this.makeArgs(e)}update(){return this.args}updater(s){if(typeof s=="function"){let t=s,[e]=this.args;s=t(e)}this.makeArgs(s),this.state.update()}makeArgs(s){this.args=Object.freeze([s,this.updater])}});var Gr=Promise.resolve();var ne=x(class extends p{constructor(s,t,e,r,i){super(s,t);a(this,"reducer");a(this,"currentState");this.dispatch=this.dispatch.bind(this),this.currentState=i!==void 0?i(r):r}update(s){return this.reducer=s,[this.currentState,this.dispatch]}dispatch(s){this.currentState=this.reducer(this.currentState,s),this.state.update()}});function at({render:o}){let s=Ct(o),t=Et(s);return{component:s,createContext:t}}import{directive as ae}from"lit/directive.js";import{noChange as me}from"lit";import{AsyncDirective as ce}from"lit/async-directive.js";var kt=Array.prototype.includes,mt=new WeakMap,It=new WeakMap,ct=class extends I{constructor(t,e,r){super(t,e);a(this,"args");a(this,"setValue");this.state.virtual=!0,this.setValue=r}render(){return this.state.run(()=>this.renderer.apply(this.host,this.args))}commit(t){this.setValue(t)}teardown(){super.teardown();let t=It.get(this);mt.delete(t)}};function qt(){function o(s){class t extends ce{constructor(i){super(i);a(this,"cont");this.cont=void 0}update(i,m){return this.cont=mt.get(i),(!this.cont||this.cont.renderer!==s)&&(this.cont=new ct(s,i,u=>{this.setValue(u)}),mt.set(i,this.cont),It.set(this.cont,i),ut(this.cont,i)),this.cont.args=m,this.cont.update(),this.render(m)}render(i){return me}}return ae(t)}return o}function ut(o,s,t=s.startNode){let e=t.parentNode,r=new MutationObserver(i=>{for(let m of i)if(kt.call(m.removedNodes,t)){r.disconnect(),t.parentNode instanceof ShadowRoot?ut(o,s):o.teardown();break}else if(kt.call(m.addedNodes,t.nextSibling)){r.disconnect(),ut(o,s,t.nextSibling||void 0);break}});r.observe(e,{childList:!0})}var{component:lt,createContext:le}=at({render:$t}),dt=qt();import{ifDefined as fe}from"lit/directives/if-defined.js";import{createRef as he,ref as xe}from"lit/directives/ref.js";import*as pt from"cheerio";var de=async o=>{let t=await(await fetch(o)).text();return pt.load(t,{xmlMode:!0,xml:{xmlMode:!0}})('resource[type="imsqti_test_xmlv3p0"]').first()},pe=async o=>{let t=await(await fetch(o)).text(),e=pt.load(t,{xmlMode:!0,xml:{xmlMode:!0}}),r=[];return e("qti-assessment-item-ref").each((i,m)=>{let u=e(m).attr("identifier"),l=e(m).attr("href"),k=e(m).attr("category");r.push({identifier:u,href:l,category:k})}),r},Q=new AbortController;async function Lt(o){let s=async e=>{try{return await(await fetch(e,{signal:t})).text()}catch(r){r.name==="AbortError"?console.log("Fetch aborted"):console.error(r)}return""};Q==null||Q.abort(),Q=new AbortController;let t=Q.signal;return await s(o)}var St=async o=>{o.endsWith("/")||(o=o+"/");let s=await de(o+"/imsmanifest.xml"),t=await pe(o+s.attr("href"));return{itemLocation:`${o}/${s.attr("href").substring(0,s.attr("href").lastIndexOf("/"))}/`,items:t,testIdentifier:s.attr("identifier")}};import{html as Mt}from"lit";var At=(o,s,t)=>{let e=he();return o?Mt`
4
+ `}};n([bt({type:Boolean,reflect:!0})],$.prototype,"loading",2),n([bt({type:String,attribute:"navigation-mode"})],$.prototype,"_navigationMode",2),$=n([Yt("qti-test-part")],$);import{html as ue,render as $t}from"lit";var A,gt=0;function tt(o){A=o}function et(){A=null,gt=0}function wt(){return gt++}var K=Symbol("haunted.phase"),S=Symbol("haunted.hook"),st=Symbol("haunted.update"),rt=Symbol("haunted.commit"),w=Symbol("haunted.effects"),_=Symbol("haunted.layoutEffects"),R="haunted.context";var Zt,Bt,te,O=class{constructor(s,t){m(this,"update");m(this,"host");m(this,"virtual");m(this,Zt);m(this,Bt);m(this,te);this.update=s,this.host=t,this[S]=new Map,this[w]=[],this[_]=[]}run(s){tt(this);let t=s();return et(),t}_runEffects(s){let t=this[s];tt(this);for(let e of t)e.call(this);et()}runEffects(){this._runEffects(w)}runLayoutEffects(){this._runEffects(_)}teardown(){this[S].forEach(t=>{typeof t.teardown=="function"&&t.teardown()})}};Zt=S,Bt=w,te=_;var ee=Promise.resolve().then.bind(Promise.resolve());function Ct(){let o=[],s;function t(){s=null;let e=o;o=[];for(var r=0,i=e.length;r<i;r++)e[r]()}return function(e){o.push(e),s==null&&(s=ee(t))}}var se=Ct(),vt=Ct(),re,k=class{constructor(s,t){m(this,"renderer");m(this,"host");m(this,"state");m(this,re);m(this,"_updateQueued");this.renderer=s,this.host=t,this.state=new O(this.update.bind(this),t),this[K]=null,this._updateQueued=!1}update(){this._updateQueued||(se(()=>{let s=this.handlePhase(st);vt(()=>{this.handlePhase(rt,s),vt(()=>{this.handlePhase(w)})}),this._updateQueued=!1}),this._updateQueued=!0)}handlePhase(s,t){switch(this[K]=s,s){case rt:this.commit(t),this.runEffects(_);return;case st:return this.render();case w:return this.runEffects(w)}}render(){return this.state.run(()=>this.renderer.call(this.host,this.host))}runEffects(s){this.state._runEffects(s)}teardown(){this.state.teardown()}};re=K;var oe=(o="")=>o.replace(/-+([a-z])?/g,(s,t)=>t?t.toUpperCase():"");function yt(o){class s extends k{constructor(i,a,l){super(i,l||a);m(this,"frag");this.frag=a}commit(i){o(i,this.frag)}}function t(e,r,i){let a=(i||r||{}).baseElement||HTMLElement,{observedAttributes:l=[],useShadowDOM:u=!0,shadowRootInit:f={}}=i||r||{};class q extends a{constructor(){super();m(this,"_scheduler");u===!1?this._scheduler=new s(e,this):(this.attachShadow(x({mode:"open"},f)),this._scheduler=new s(e,this.shadowRoot,this))}static get observedAttributes(){return e.observedAttributes||l||[]}connectedCallback(){this._scheduler.update()}disconnectedCallback(){this._scheduler.teardown()}attributeChangedCallback(g,v,d){if(v===d)return;let Vt=d===""?!0:d;Reflect.set(this,oe(g),Vt)}}function Nt(y){let h=y,g=!1;return Object.freeze({enumerable:!0,configurable:!0,get(){return h},set(v){g&&h===v||(g=!0,h=v,this._scheduler&&this._scheduler.update())}})}let Pt=new Proxy(a.prototype,{getPrototypeOf(y){return y},set(y,h,g,v){let d;return h in y?(d=Object.getOwnPropertyDescriptor(y,h),d&&d.set?(d.set.call(v,g),!0):(Reflect.set(y,h,g,v),!0)):(typeof h=="symbol"||h[0]==="_"?d={enumerable:!0,configurable:!0,writable:!0,value:g}:d=Nt(g),Object.defineProperty(v,h,d),d.set&&d.set.call(v,g),!0)}});return Object.setPrototypeOf(q.prototype,Pt),q}return t}var p=class{constructor(s,t){m(this,"id");m(this,"state");this.id=s,this.state=t}};function ie(o,...s){let t=wt(),e=A[S],r=e.get(t);return r||(r=new o(t,A,...s),e.set(t,r)),r.update(...s)}function b(o){return ie.bind(null,o)}function T(o){return b(class extends p{constructor(t,e,r,i){super(t,e);m(this,"callback");m(this,"lastValues");m(this,"values");m(this,"_teardown");o(e,this)}update(t,e){this.callback=t,this.values=e}call(){(!this.values||this.hasChanged())&&this.run(),this.lastValues=this.values}run(){this.teardown(),this._teardown=this.callback.call(this.state)}teardown(){typeof this._teardown=="function"&&this._teardown()}hasChanged(){return!this.lastValues||this.values.some((t,e)=>this.lastValues[e]!==t)}})}function ot(o,s){o[w].push(s)}var Y=T(ot);var it=b(class extends p{constructor(s,t,e){super(s,t);m(this,"Context");m(this,"value");m(this,"_ranEffect");m(this,"_unsubscribe");this._updater=this._updater.bind(this),this._ranEffect=!1,this._unsubscribe=null,ot(t,this)}update(s){if(this.state.virtual)throw new Error("can't be used with virtual components");return this.Context!==s&&(this._subscribe(s),this.Context=s),this.value}call(){this._ranEffect||(this._ranEffect=!0,this._unsubscribe&&this._unsubscribe(),this._subscribe(this.Context),this.state.update())}_updater(s){this.value=s,this.state.update()}_subscribe(s){let t={Context:s,callback:this._updater};this.state.host.dispatchEvent(new CustomEvent(R,{detail:t,bubbles:!0,cancelable:!0,composed:!0}));let{unsubscribe:e=null,value:r}=t;this.value=e?r:s.defaultValue,this._unsubscribe=e}teardown(){this._unsubscribe&&this._unsubscribe()}});function Et(o){return s=>{let t={Provider:class extends HTMLElement{constructor(){super();m(this,"listeners");m(this,"_value");this.listeners=new Set,this.addEventListener(R,this)}disconnectedCallback(){this.removeEventListener(R,this)}handleEvent(r){let{detail:i}=r;i.Context===t&&(i.value=this.value,i.unsubscribe=this.unsubscribe.bind(this,i.callback),this.listeners.add(i.callback),r.stopPropagation())}unsubscribe(r){this.listeners.delete(r)}set value(r){this._value=r;for(let i of this.listeners)i(r)}get value(){return this._value}},Consumer:o(function({render:e}){let r=it(t);return e(r)}),defaultValue:s};return t}}var nt=b(class extends p{constructor(s,t,e,r){super(s,t);m(this,"value");m(this,"values");this.value=e(),this.values=r}update(s,t){return this.hasChanged(t)&&(this.values=t,this.value=s()),this.value}hasChanged(s=[]){return s.some((t,e)=>this.values[e]!==t)}});function ne(o,s){o[_].push(s)}var _t=T(ne);var Z=b(class extends p{constructor(s,t,e){super(s,t);m(this,"args");this.updater=this.updater.bind(this),typeof e=="function"&&(e=e()),this.makeArgs(e)}update(){return this.args}updater(s){if(typeof s=="function"){let t=s,[e]=this.args;s=t(e)}this.makeArgs(s),this.state.update()}makeArgs(s){this.args=Object.freeze([s,this.updater])}});var oo=Promise.resolve();var ae=b(class extends p{constructor(s,t,e,r,i){super(s,t);m(this,"reducer");m(this,"currentState");this.dispatch=this.dispatch.bind(this),this.currentState=i!==void 0?i(r):r}update(s){return this.reducer=s,[this.currentState,this.dispatch]}dispatch(s){this.currentState=this.reducer(this.currentState,s),this.state.update()}});function at({render:o}){let s=yt(o),t=Et(s);return{component:s,createContext:t}}import{directive as me}from"lit/directive.js";import{noChange as ce}from"lit";import{AsyncDirective as le}from"lit/async-directive.js";var kt=Array.prototype.includes,mt=new WeakMap,qt=new WeakMap,ct=class extends k{constructor(t,e,r){super(t,e);m(this,"args");m(this,"setValue");this.state.virtual=!0,this.setValue=r}render(){return this.state.run(()=>this.renderer.apply(this.host,this.args))}commit(t){this.setValue(t)}teardown(){super.teardown();let t=qt.get(this);mt.delete(t)}};function It(){function o(s){class t extends le{constructor(i){super(i);m(this,"cont");this.cont=void 0}update(i,a){return this.cont=mt.get(i),(!this.cont||this.cont.renderer!==s)&&(this.cont=new ct(s,i,l=>{this.setValue(l)}),mt.set(i,this.cont),qt.set(this.cont,i),lt(this.cont,i)),this.cont.args=a,this.cont.update(),this.render(a)}render(i){return ce}}return me(t)}return o}function lt(o,s,t=s.startNode){let e=t.parentNode,r=new MutationObserver(i=>{for(let a of i)if(kt.call(a.removedNodes,t)){r.disconnect(),t.parentNode instanceof ShadowRoot?lt(o,s):o.teardown();break}else if(kt.call(a.addedNodes,t.nextSibling)){r.disconnect(),lt(o,s,t.nextSibling||void 0);break}});r.observe(e,{childList:!0})}var{component:ut,createContext:de}=at({render:$t}),dt=It();import{ifDefined as he}from"lit/directives/if-defined.js";import{createRef as xe,ref as be}from"lit/directives/ref.js";import*as pt from"cheerio";var pe=async o=>{let t=await(await fetch(o)).text();return pt.load(t,{xmlMode:!0,xml:{xmlMode:!0}})('resource[type="imsqti_test_xmlv3p0"]').first()},fe=async o=>{let t=await(await fetch(o)).text(),e=pt.load(t,{xmlMode:!0,xml:{xmlMode:!0}}),r=[];return e("qti-assessment-item-ref").each((i,a)=>{let l=e(a).attr("identifier"),u=e(a).attr("href"),f=e(a).attr("category");r.push({identifier:l,href:u,category:f})}),r},Q=new AbortController;async function St(o){let s=async e=>{try{return await(await fetch(e,{signal:t})).text()}catch(r){r.name==="AbortError"?console.log("Fetch aborted"):console.error(r)}return""};Q==null||Q.abort(),Q=new AbortController;let t=Q.signal;return await s(o)}var Mt=async o=>{o.endsWith("/")||(o=o+"/");let s=await pe(o+"/imsmanifest.xml"),t=await fe(o+s.attr("href"));return{itemLocation:`${o}/${s.attr("href").substring(0,s.attr("href").lastIndexOf("/"))}/`,items:t,testIdentifier:s.attr("identifier")}};import{html as Lt}from"lit";var At=(o,s,t)=>{let e=xe();return o?Lt`
5
5
  <qti-assessment-test
6
- ${xe(e)}
6
+ ${be(e)}
7
7
  identifier="${o.testIdentifier}"
8
- @on-test-set-item=${async({detail:r})=>{var u;let i=e.value.itemRefEls.get(r.new),m=await Lt(`${o.itemLocation}/${i.href}`);i.xml=m,(u=e.value)==null||u.itemRefEls.forEach((l,k)=>l.identifier!==i.identifier&&(l.xml=""))}}
8
+ @on-test-set-item=${async({detail:r})=>{var l;let i=e.value.itemRefEls.get(r.new),a=await St(`${o.itemLocation}/${i.href}`);i.xml=a,(l=e.value)==null||l.itemRefEls.forEach((u,f)=>u.identifier!==i.identifier&&(u.xml=""))}}
9
9
  @qti-assessment-first-updated=${r=>{t&&(e.value.context=t)}}
10
10
  item-index=${s}
11
11
  >
12
- <test-show-index></test-show-index> : <test-item-id></test-item-id>
12
+ <div>
13
+ <test-show-index></test-show-index>:
14
+ <test-item-id></test-item-id>
15
+ </div>
16
+
17
+ <test-toggle-scoring></test-toggle-scoring>
18
+
19
+ <div>
20
+ <test-scoring-manual></test-scoring-manual>
21
+ <test-scoring-buttons></test-scoring-buttons>
22
+ </div>
13
23
 
14
24
  <qti-test-part>
15
25
  <qti-assessment-section>
16
- ${o.items.map(r=>Mt`<qti-assessment-item-ref
26
+ ${o.items.map(r=>Lt`<qti-assessment-item-ref
17
27
  item-location=${`${o.itemLocation}`}
18
28
  identifier="${r.identifier}"
19
29
  href="${r.href}"
20
- category="${fe(r.category)}"
30
+ category="${he(r.category)}"
21
31
  >
32
+ <item-print-variables></item-print-variables>
22
33
  </qti-assessment-item-ref>`)}
23
34
  </qti-assessment-section>
24
35
  </qti-test-part>
@@ -31,11 +42,14 @@ import{a as ft}from"./chunk-O4MG75IZ.js";import{a as h,b as v,c as n,d as a}from
31
42
 
32
43
  <test-slider></test-slider>
33
44
 
34
- <test-toggle-scoring></test-toggle-scoring>
35
-
36
- <test-manual-scoring></test-manual-scoring>
45
+ <pre>
46
+ <test-script>
47
+ <!--
48
+ return JSON.stringify(itemContext, null, 2);
49
+ -->
50
+ </test-script></pre>
37
51
  </qti-assessment-test>
38
- `:""};import{html as ge}from"lit";var Rt=`*, ::before, ::after {
52
+ `:""};import{html as we}from"lit";var Rt=`*, ::before, ::after {
39
53
  --tw-border-spacing-x: 0;
40
54
  --tw-border-spacing-y: 0;
41
55
  --tw-translate-x: 0;
@@ -133,14 +147,24 @@ import{a as ft}from"./chunk-O4MG75IZ.js";import{a as h,b as v,c as n,d as a}from
133
147
  --tw-backdrop-saturate: ;
134
148
  --tw-backdrop-sepia: ;
135
149
  }
150
+ /* only applied in qti-test, if present */
151
+ /*
136
152
  ::host {
137
- height: 100vh;
138
- width: 100vw;
139
- --tw-bg-opacity: 1;
140
- background-color: rgb(248 250 252 / var(--tw-bg-opacity));
153
+ @apply h-screen w-screen bg-slate-50;
141
154
  }
142
- qti-assessment-test {
155
+ */
156
+ /* qti-assessment-test {
157
+ @apply grid h-full w-full grid-cols-3;
158
+ qti-test-part {
159
+ @apply container col-span-3 mx-auto aspect-[4/3];
160
+ }
161
+ } */
162
+ qti-assessment-test qti-test-part qti-assessment-section {
143
163
  display: block;
164
+ overflow-y: auto;
165
+ border-radius: 0.125rem;
166
+ --tw-bg-opacity: 1;
167
+ background-color: rgb(255 255 255 / var(--tw-bg-opacity));
144
168
  padding: 2rem;
145
169
  }
146
170
  qti-assessment-test .nav {
@@ -290,23 +314,19 @@ qti-assessment-test test-paging-buttons > button[data-active-item='true']:focus-
290
314
  outline-offset: 2px;
291
315
  outline-color: #4f46e5;
292
316
  }
293
- qti-assessment-test qti-test-part qti-assessment-section {
294
- aspect-ratio: 16 / 9;
295
- width: 100%;
296
- }
297
- `;function we(o){let[s,t]=Z();return Y(()=>{var r;let e=new CSSStyleSheet;e.replaceSync(Rt),(r=o.shadowRoot)==null||r.adoptedStyleSheets.push(e)},[]),Y(()=>{(async r=>await St(r))(o.packageUri).then(r=>{t(r)})},[o.packageUri]),ge`${s?dt(At)(s):""}`}var ve=lt(we,{observedAttributes:["package-uri"]});customElements.define("qti-test",ve);import{html as ye,LitElement as Ce}from"lit";import{customElement as Ee,state as _e}from"lit/decorators.js";import{consume as ke}from"@lit/context";var z=class extends Ce{_requestItem(t){this.dispatchEvent(new CustomEvent("on-test-request-item",{composed:!0,bubbles:!0,detail:t}))}render(){var i;let{items:t,itemIndex:e}=this._testContext,r=Math.min(e+1,t.length-1);return ye`
298
- <button part="button" @click=${m=>this._requestItem(r)} id="${(i=t[r])==null?void 0:i.identifier}">
317
+ `;function ve(o){let[s,t]=Z();return Y(()=>{var r;let e=new CSSStyleSheet;e.replaceSync(Rt),(r=o.shadowRoot)==null||r.adoptedStyleSheets.push(e)},[]),Y(()=>{(async r=>await Mt(r))(o.packageUri).then(r=>{t(r)})},[o.packageUri]),we`${s?dt(At)(s):""}`}var Ce=ut(ve,{observedAttributes:["package-uri"]});customElements.define("qti-test",Ce);import{html as ye,LitElement as Ee}from"lit";import{customElement as _e,state as ke}from"lit/decorators.js";import{consume as qe}from"@lit/context";var z=class extends Ee{_requestItem(t){this.dispatchEvent(new CustomEvent("on-test-request-item",{composed:!0,bubbles:!0,detail:t}))}render(){var i;let{items:t,itemIndex:e}=this._testContext,r=Math.min(e+1,t.length-1);return ye`
318
+ <button part="button" @click=${a=>this._requestItem(r)} id="${(i=t[r])==null?void 0:i.identifier}">
299
319
  <slot></slot>
300
320
  </button>
301
- `}};n([ke({context:c,subscribe:!0}),_e()],z.prototype,"_testContext",2),z=n([Ee("test-next")],z);import{html as Ie,LitElement as qe}from"lit";import{customElement as $e,state as Le}from"lit/decorators.js";import{consume as Se}from"@lit/context";var D=class extends qe{_requestItem(t){this.dispatchEvent(new CustomEvent("on-test-request-item",{composed:!0,bubbles:!0,detail:t}))}render(){var i;let{items:t,itemIndex:e}=this._testContext,r=Math.max(e-1,0);return Ie`
302
- <button part="button" @click=${m=>this._requestItem(r)} id="${(i=t[r])==null?void 0:i.identifier}">
321
+ `}};n([qe({context:c,subscribe:!0}),ke()],z.prototype,"_testContext",2),z=n([_e("test-next")],z);import{html as Ie,LitElement as $e}from"lit";import{customElement as Se,state as Me}from"lit/decorators.js";import{consume as Le}from"@lit/context";var D=class extends $e{_requestItem(t){this.dispatchEvent(new CustomEvent("on-test-request-item",{composed:!0,bubbles:!0,detail:t}))}render(){var i;let{items:t,itemIndex:e}=this._testContext,r=Math.max(e-1,0);return Ie`
322
+ <button part="button" @click=${a=>this._requestItem(r)} id="${(i=t[r])==null?void 0:i.identifier}">
303
323
  <slot></slot>
304
324
  </button>
305
- `}};n([Se({context:c,subscribe:!0}),Le()],D.prototype,"_testContext",2),D=n([$e("test-prev")],D);import{consume as Me}from"@lit/context";import{LitElement as Ae,html as Re}from"lit";import{customElement as Oe,state as Qe}from"lit/decorators.js";var N=class extends Ae{render(){let{items:t,itemIndex:e}=this._testProvider;return Re`
325
+ `}};n([Le({context:c,subscribe:!0}),Me()],D.prototype,"_testContext",2),D=n([Se("test-prev")],D);import{consume as Ae}from"@lit/context";import{LitElement as Re,html as Oe}from"lit";import{customElement as Qe,state as ze}from"lit/decorators.js";var N=class extends Re{render(){let{items:t,itemIndex:e}=this._testProvider;return Oe`
306
326
  <progress part="progress" id="file" max=${t.length-1} value=${e}>
307
327
  ${e/(t.length-1)}%
308
328
  </progress>
309
- `}};n([Me({context:c,subscribe:!0}),Qe()],N.prototype,"_testProvider",2),N=n([Oe("test-progress")],N);import{consume as ze}from"@lit/context";import{LitElement as De,html as Ne}from"lit";import{customElement as Pe,state as Fe}from"lit/decorators.js";var P=class extends De{_requestItem(t){this.dispatchEvent(new CustomEvent("on-test-request-item",{composed:!0,bubbles:!0,detail:t}))}render(){let{items:t,itemIndex:e}=this._testProvider;return Ne`
329
+ `}};n([Ae({context:c,subscribe:!0}),ze()],N.prototype,"_testProvider",2),N=n([Qe("test-progress")],N);import{consume as De}from"@lit/context";import{LitElement as Ne,html as Pe}from"lit";import{customElement as Ve,state as Fe}from"lit/decorators.js";var P=class extends Ne{_requestItem(t){this.dispatchEvent(new CustomEvent("on-test-request-item",{composed:!0,bubbles:!0,detail:t}))}render(){let{items:t,itemIndex:e}=this._testProvider;return Pe`
310
330
  <input
311
331
  part="input"
312
332
  type="range"
@@ -315,55 +335,55 @@ qti-assessment-test qti-test-part qti-assessment-section {
315
335
  max=${t.length-1}
316
336
  @input=${r=>this._requestItem(+r.target.value)}
317
337
  />
318
- `}};n([ze({context:c,subscribe:!0}),Fe()],P.prototype,"_testProvider",2),P=n([Pe("test-slider")],P);import{consume as He}from"@lit/context";import{LitElement as Ue,html as Ot}from"lit";import{customElement as Ve,state as je}from"lit/decorators.js";var F=class extends Ue{createRenderRoot(){return this}_requestItem(t){this.dispatchEvent(new CustomEvent("on-test-request-item",{composed:!0,bubbles:!0,detail:t}))}render(){let{items:t,itemIndex:e}=this._testProvider;return Ot`
319
- ${t.map((r,i)=>{var m;return Ot` <label>
338
+ `}};n([De({context:c,subscribe:!0}),Fe()],P.prototype,"_testProvider",2),P=n([Ve("test-slider")],P);import{consume as He}from"@lit/context";import{LitElement as Ue,html as Ot}from"lit";import{customElement as je,state as Xe}from"lit/decorators.js";var V=class extends Ue{createRenderRoot(){return this}_requestItem(t){this.dispatchEvent(new CustomEvent("on-test-request-item",{composed:!0,bubbles:!0,detail:t}))}render(){let{items:t,itemIndex:e}=this._testProvider;return Ot`
339
+ ${t.map((r,i)=>{var a;return Ot` <label>
320
340
  <input
321
341
  type="radio"
322
342
  part="input"
323
343
  name="item"
324
344
  value="${i}"
325
345
  ?checked=${i===e}
326
- @change=${u=>this._requestItem(i)}
327
- data-completion-status=${(m=r.variables.find(u=>u.identifier==="completionStatus"))==null?void 0:m.value}
346
+ @change=${l=>this._requestItem(i)}
347
+ data-completion-status=${(a=r.variables.find(l=>l.identifier==="completionStatus"))==null?void 0:a.value}
328
348
  id="${r.identifier}"
329
349
  />
330
350
  ${i+1}
331
351
  </label>`})}
332
- `}};n([He({context:c,subscribe:!0}),je()],F.prototype,"_testProvider",2),F=n([Ve("test-paging-radio")],F);import{consume as Xe}from"@lit/context";import{LitElement as We,html as Qt}from"lit";import{customElement as Be,property as Je,state as Ge}from"lit/decorators.js";var S=class extends We{constructor(){super(...arguments);this.maxDisplayedItems=5}createRenderRoot(){return this}_requestItem(t){this.dispatchEvent(new CustomEvent("on-test-request-item",{composed:!0,bubbles:!0,detail:t}))}render(){let{items:t,itemIndex:e}=this._testProvider,r=Math.max(0,e-this.maxDisplayedItems),i=Math.min(t.length-1,e+this.maxDisplayedItems),m=t.slice(r,i+1);return Qt`
333
- ${m.map((u,l)=>{var k;return Qt`<button
352
+ `}};n([He({context:c,subscribe:!0}),Xe()],V.prototype,"_testProvider",2),V=n([je("test-paging-radio")],V);import{consume as We}from"@lit/context";import{LitElement as Je,html as Qt}from"lit";import{customElement as Ge,property as Ke,state as Te}from"lit/decorators.js";var M=class extends Je{constructor(){super(...arguments);this.maxDisplayedItems=5}createRenderRoot(){return this}_requestItem(t){this.dispatchEvent(new CustomEvent("on-test-request-item",{composed:!0,bubbles:!0,detail:t}))}render(){let{items:t,itemIndex:e}=this._testProvider,r=Math.max(0,e-this.maxDisplayedItems),i=Math.min(t.length-1,e+this.maxDisplayedItems),a=t.slice(r,i+1);return Qt`
353
+ ${a.map((l,u)=>{var f;return Qt`<button
334
354
  part="button"
335
- data-completion-status=${(k=u.variables.find(M=>M.identifier==="completionStatus"))==null?void 0:k.value}
336
- data-active-item=${r+l===e}
337
- @click=${M=>this._requestItem(r+l)}
338
- id="${u.identifier}"
355
+ data-completion-status=${(f=l.variables.find(q=>q.identifier==="completionStatus"))==null?void 0:f.value}
356
+ data-active-item=${r+u===e}
357
+ @click=${q=>this._requestItem(r+u)}
358
+ id="${l.identifier}"
339
359
  >
340
- ${r+l+1}
360
+ ${r+u+1}
341
361
  </button>`})}
342
- `}};n([Xe({context:c,subscribe:!0}),Ge()],S.prototype,"_testProvider",2),n([Je({type:Number})],S.prototype,"maxDisplayedItems",2),S=n([Be("test-paging-buttons")],S);import{consume as Ke}from"@lit/context";import{LitElement as Ye,html as zt}from"lit";import{customElement as Ze,state as Te}from"lit/decorators.js";var H=class extends Ye{render(){var i,m,u;let{items:t,itemIndex:e}=this._testProvider;if(e==null)return zt``;let r=(u=(m=this.closest("qti-assessment-test"))==null?void 0:m.itemRefEls.get((i=t[e])==null?void 0:i.identifier))==null?void 0:u.assessmentItem;return zt`
343
- <button part="button" @click=${l=>r.showCorrectResponse(!0)}>
362
+ `}};n([We({context:c,subscribe:!0}),Te()],M.prototype,"_testProvider",2),n([Ke({type:Number})],M.prototype,"maxDisplayedItems",2),M=n([Ge("test-paging-buttons")],M);import{consume as Ye}from"@lit/context";import{LitElement as Ze,html as zt}from"lit";import{customElement as Be,state as ts}from"lit/decorators.js";var F=class extends Ze{render(){var i,a,l;let{items:t,itemIndex:e}=this._testProvider;if(e==null)return zt``;let r=(l=(a=this.closest("qti-assessment-test"))==null?void 0:a.itemRefEls.get((i=t[e])==null?void 0:i.identifier))==null?void 0:l.assessmentItem;return zt`
363
+ <button part="button" @click=${u=>r.showCorrectResponse(!0)}>
344
364
  <slot></slot>
345
365
  </button>
346
- `}};n([Ke({context:c,subscribe:!0}),Te()],H.prototype,"_testProvider",2),H=n([Ze("test-show-correct")],H);import{ContextConsumer as ts}from"@lit/context";import{html as es,LitElement as ss}from"lit";import{customElement as rs,state as os}from"lit/decorators.js";var U=class extends ss{constructor(){super(...arguments);this._printed=""}render(){return es`${this._printed}<slot @slotchange=${this.handleSlotChange}></slot>`}handleSlotChange(t){var r,i;let e=Array.from((r=this.childNodes)!=null?r:[]).find(m=>m.nodeType===Node.COMMENT_NODE);try{this.operatorFunction=new Function("context","item",(i=e.textContent)!=null?i:"")}catch(m){console.error("custom-operator contains invalid javascript code",m)}this._context=new ts(this,c,m=>{this._printed=this.operatorFunction(m,this.closest("qti-assessment-item"))},!0)}};n([os()],U.prototype,"_printed",2),U=n([rs("test-script")],U);import{html as is,LitElement as ns}from"lit";import{customElement as as,state as ms}from"lit/decorators.js";import{consume as cs}from"@lit/context";var V=class extends ns{_requestItem(t){this.dispatchEvent(new CustomEvent("on-test-request-item",{composed:!0,bubbles:!0,detail:t}))}render(){let{items:t,itemIndex:e}=this._testContext,r=t[e-1];return is` ${e+1}/${t.length} `}};n([cs({context:c,subscribe:!0}),ms()],V.prototype,"_testContext",2),V=n([as("test-show-index")],V);import{consume as us}from"@lit/context";import{LitElement as ls,html as ds}from"lit";import{customElement as ps,state as fs}from"lit/decorators.js";var j=class extends ls{render(){return ds`
366
+ `}};n([Ye({context:c,subscribe:!0}),ts()],F.prototype,"_testProvider",2),F=n([Be("test-show-correct")],F);import{ContextConsumer as es}from"@lit/context";import{html as ss,LitElement as rs}from"lit";import{customElement as os,state as is}from"lit/decorators.js";var H=class extends rs{constructor(){super(...arguments);this._printed=""}render(){return ss`${this._printed}<slot @slotchange=${this.handleSlotChange}></slot>`}handleSlotChange(t){var r,i;let e=Array.from((r=this.childNodes)!=null?r:[]).find(a=>a.nodeType===Node.COMMENT_NODE);try{this.operatorFunction=new Function("testContext","itemContext",(i=e.textContent)!=null?i:"")}catch(a){console.error("custom-operator contains invalid javascript code",a)}this._context=new es(this,c,a=>{this._printed=this.operatorFunction(a,a.items[a.itemIndex])},!0)}};n([is()],H.prototype,"_printed",2),H=n([os("test-script")],H);import{html as ns,LitElement as as}from"lit";import{customElement as ms,state as cs}from"lit/decorators.js";import{consume as ls}from"@lit/context";var U=class extends as{_requestItem(t){this.dispatchEvent(new CustomEvent("on-test-request-item",{composed:!0,bubbles:!0,detail:t}))}render(){let{items:t,itemIndex:e}=this._testContext,r=t[e-1];return ns` ${e+1}/${t.length} `}};n([ls({context:c,subscribe:!0}),cs()],U.prototype,"_testContext",2),U=n([ms("test-show-index")],U);import{consume as us}from"@lit/context";import{LitElement as ds,html as ps}from"lit";import{customElement as fs,state as hs}from"lit/decorators.js";var j=class extends ds{render(){return ps`
347
367
  <pre>
348
- ${JSON.stringify(v(h({},this._testProvider),{items:this._testProvider.items.map(t=>v(h({},t),{itemEl:null}))}),null,2)}</pre
368
+ ${JSON.stringify(C(x({},this._testProvider),{items:this._testProvider.items.map(t=>C(x({},t),{itemEl:null}))}),null,2)}</pre
349
369
  >
350
- `}};n([us({context:c,subscribe:!0}),fs()],j.prototype,"_testProvider",2),j=n([ps("test-print-variables")],j);import{consume as hs}from"@lit/context";import{LitElement as xs,html as bs}from"lit";import{customElement as gs,state as ws}from"lit/decorators.js";var X=class extends xs{_requestItem(t){this.dispatchEvent(new CustomEvent("on-test-request-item",{composed:!0,bubbles:!0,detail:t}))}render(){let{items:t}=this._testContext,e=t.reduce((i,m)=>{let u=m.variables.find(l=>l.identifier==="SCORE");return i+(u?+u.value:0)},0),r=t.reduce((i,m)=>{let u=m.variables.find(l=>l.identifier==="MAXSCORE");return i+(u?+u.value:0)},0);return bs` ${e}/${r}`}};n([hs({context:c,subscribe:!0}),ws()],X.prototype,"_testContext",2),X=n([gs("test-print-score")],X);import{LitElement as vs,html as ys}from"lit";import{customElement as Cs,property as W}from"lit/decorators.js";var y=class extends vs{constructor(){super(...arguments);this.disabled=!1;this.readonly=!1;this.value=0}textChanged(t){if(this.disabled||this.readonly)return;let e=t.target;this.value=Number(e.value),this.dispatchEvent(new CustomEvent("qti-set-outcome-value",{bubbles:!0,composed:!0,detail:{outcomeIdentifier:"SCORE",value:this.value.toString()}}))}render(){return ys`
370
+ `}};n([us({context:c,subscribe:!0}),hs()],j.prototype,"_testProvider",2),j=n([fs("test-print-variables")],j);import{consume as xs}from"@lit/context";import{LitElement as bs,html as gs}from"lit";import{customElement as ws,state as vs}from"lit/decorators.js";var X=class extends bs{_requestItem(t){this.dispatchEvent(new CustomEvent("on-test-request-item",{composed:!0,bubbles:!0,detail:t}))}render(){let{items:t}=this._testContext,e=t.reduce((i,a)=>{let l=a.variables.find(u=>u.identifier==="SCORE");return i+(l?+l.value:0)},0),r=t.reduce((i,a)=>{let l=a.variables.find(u=>u.identifier==="MAXSCORE");return i+(l?+l.value:0)},0);return gs` ${e}/${r}`}};n([xs({context:c,subscribe:!0}),vs()],X.prototype,"_testContext",2),X=n([ws("test-print-score")],X);import{consume as Cs}from"@lit/context";import{LitElement as ys,html as Es}from"lit";import{customElement as _s,property as ks,state as qs}from"lit/decorators.js";var L=class extends ys{constructor(){super(...arguments);this.disabled=!1}_changeOutcomeScore(t){let e=this._testContext.items[this._testContext.itemIndex].identifier;this.closest("qti-assessment-test").itemRefEls.get(e).assessmentItem.updateOutcomeVariable("SCORE",t.toString())}render(){let{items:t,itemIndex:e}=this._testContext,r=Number(t[e].variables.find(a=>a.identifier=="MAXSCORE").value),i=Number(t[e].variables.find(a=>a.identifier=="SCORE").value);return Es`
351
371
  <input
352
372
  part="input"
353
373
  type="number"
354
374
  spellcheck="false"
355
375
  autocomplete="off"
356
- @keyup=${this.textChanged}
357
- @change=${this.textChanged}
376
+ @keyup=${a=>this._changeOutcomeScore(a.target.value)}
377
+ @change=${a=>this._changeOutcomeScore(a.target.value)}
358
378
  placeholder="score"
359
- min=${this.min}
360
- max=${this.max}
361
- .value=${this.value.toString()}
379
+ min=${0}
380
+ max=${r}
381
+ .value=${i.toString()}
362
382
  size="10"
363
383
  ?disabled=${this.disabled}
364
- ?readonly=${this.readonly}
384
+ id="test-scoring-input"
365
385
  />
366
- `}};n([W({type:Boolean})],y.prototype,"disabled",2),n([W({type:Boolean})],y.prototype,"readonly",2),n([W({type:Number})],y.prototype,"value",2),n([W({type:Number})],y.prototype,"min",2),n([W({type:Number})],y.prototype,"max",2),y=n([Cs("test-manual-scoring")],y);import{LitElement as Es,html as _s}from"lit";import{customElement as ks}from"lit/decorators.js";var T=class extends Es{render(){let s=this.closest("qti-assessment-test");return _s`
386
+ `}};n([Cs({context:c,subscribe:!0}),qs()],L.prototype,"_testContext",2),n([ks({type:Boolean})],L.prototype,"disabled",2),L=n([_s("test-scoring-input")],L);import{LitElement as Is,html as $s}from"lit";import{customElement as Ss}from"lit/decorators.js";var B=class extends Is{render(){let s=this.closest("qti-assessment-test");return $s`
367
387
  <label>
368
388
  <input
369
389
  type="checkbox"
@@ -371,7 +391,20 @@ ${JSON.stringify(v(h({},this._testProvider),{items:this._testProvider.items.map(
371
391
  />
372
392
  Toggle audience context
373
393
  </label>
374
- `}};T=n([ks("test-toggle-scoring")],T);import{html as Is,LitElement as qs}from"lit";import{customElement as $s,state as Ls}from"lit/decorators.js";import{consume as Ss}from"@lit/context";var B=class extends qs{render(){var r;let{items:t,itemIndex:e}=this._testContext;return Is` ${(r=t[e])==null?void 0:r.identifier} `}};n([Ss({context:c,subscribe:!0}),Ls()],B.prototype,"_testContext",2),B=n([$s("test-item-id")],B);export{q as a,xt as b,c,E as d,$ as e,Lt as f,St as g,ve as h,z as i,D as j,N as k,P as l,F as m,S as n,H as o,U as p,V as q,j as r,X as s,y as t,T as u,B as v};
394
+ `}};B=n([Ss("test-toggle-scoring")],B);import{html as Ms,LitElement as Ls}from"lit";import{customElement as As,state as Rs}from"lit/decorators.js";import{consume as Os}from"@lit/context";var W=class extends Ls{render(){var r;let{items:t,itemIndex:e}=this._testContext;return Ms` ${(r=t[e])==null?void 0:r.identifier} `}};n([Os({context:c,subscribe:!0}),Rs()],W.prototype,"_testContext",2),W=n([As("test-item-id")],W);import{consume as Qs}from"@lit/context";import{LitElement as zs,html as Dt,nothing as Ds}from"lit";import{customElement as Ns,state as Ps}from"lit/decorators.js";var J=class extends zs{_changeOutcomeScore(t){let e=this._testContext.items[this._testContext.itemIndex].identifier;this.closest("qti-assessment-test").itemRefEls.get(e).assessmentItem.updateOutcomeVariable("SCORE",t.toString())}render(){var a,l;let{items:t,itemIndex:e}=this._testContext,r=(a=t[e].variables.find(u=>u.identifier=="MAXSCORE"))==null?void 0:a.value,i=(l=t[e].variables.find(u=>u.identifier=="SCORE"))==null?void 0:l.value;return r&&i?Dt`
395
+ ${[...Array(Number(r)+1).keys()].map((u,f)=>Dt` <label>
396
+ <input
397
+ type="radio"
398
+ part="input"
399
+ name="test-scoring-buttons"
400
+ value="${f}"
401
+ ?checked=${f===Number(i)}
402
+ @change=${q=>this._changeOutcomeScore(f)}
403
+ id="test-scoring-buttons"
404
+ />
405
+ ${f}
406
+ </label>`)}
407
+ `:Ds}};n([Qs({context:c,subscribe:!0}),Ps()],J.prototype,"_testContext",2),J=n([Ns("test-scoring-buttons")],J);export{I as a,xt as b,c,E as d,$ as e,St as f,Mt as g,Ce as h,z as i,D as j,N as k,P as l,V as m,M as n,F as o,H as p,U as q,j as r,X as s,L as t,B as u,W as v,J as w};
375
408
  /*! Bundled license information:
376
409
 
377
410
  haunted/lib/use-controller.js: