@citolab/qti-components 6.1.0 → 6.3.2

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.
Files changed (37) hide show
  1. package/dist/chunk-43RGQFGW.cjs +1 -0
  2. package/dist/chunk-BKBZWUX6.cjs +1 -0
  3. package/dist/chunk-DPSTDDQZ.js +1 -0
  4. package/dist/chunk-KESARAC5.js +1 -0
  5. package/dist/{chunk-TSUFNGZN.js → chunk-LNHTXQXY.js} +1 -1
  6. package/dist/{chunk-OI3PY5MR.cjs → chunk-LWL4UHCJ.cjs} +2 -2
  7. package/dist/context/index.cjs +1 -1
  8. package/dist/context/index.js +1 -1
  9. package/dist/custom-elements.json +483 -433
  10. package/dist/index.cjs +172 -128
  11. package/dist/index.d.cts +4 -4
  12. package/dist/index.d.ts +4 -4
  13. package/dist/index.js +179 -135
  14. package/dist/qti-assessment-test-15ffab61.d.ts +34 -0
  15. package/dist/qti-assessment-test-a1f2cb91.d.ts +34 -0
  16. package/dist/qti-components/index.cjs +2 -2
  17. package/dist/qti-components/index.d.cts +1 -1
  18. package/dist/qti-components/index.d.ts +1 -1
  19. package/dist/qti-components/index.js +3 -3
  20. package/dist/qti-item/index.cjs +1 -1
  21. package/dist/qti-item/index.js +1 -1
  22. package/dist/qti-item-react/index.cjs +1 -1
  23. package/dist/qti-item-react/index.d.cts +3 -3
  24. package/dist/qti-item-react/index.d.ts +3 -3
  25. package/dist/qti-item-react/index.js +1 -1
  26. package/dist/qti-test/index.cjs +31 -31
  27. package/dist/qti-test/index.d.cts +8 -34
  28. package/dist/qti-test/index.d.ts +8 -34
  29. package/dist/qti-test/index.js +33 -33
  30. package/dist/qti-test-react/index.cjs +1 -0
  31. package/dist/qti-test-react/index.d.cts +29 -0
  32. package/dist/qti-test-react/index.d.ts +29 -0
  33. package/dist/qti-test-react/index.js +1 -0
  34. package/package.json +29 -21
  35. package/readme.md +3 -3
  36. package/dist/chunk-6YQCE7H6.cjs +0 -1
  37. package/dist/chunk-DKGW23YB.js +0 -1
@@ -1,7 +1,7 @@
1
- import"../chunk-MTPOYN4D.js";import{a as L}from"../chunk-TSUFNGZN.js";import"../chunk-DKGW23YB.js";import"../chunk-AWSFYZS5.js";import{a as p,b as l,c as e}from"../chunk-343LZK3D.js";import{customElement as U,property as w}from"lit/decorators.js";var d=class extends L{connectedCallback(){super.connectedCallback();let t=new CustomEvent("register-item-ref",{bubbles:!0,composed:!0,detail:{identifier:this.identifier,href:this.href}});this.dispatchEvent(t)}};e([w({type:String})],d.prototype,"identifier",2),e([w({type:String})],d.prototype,"href",2),d=e([U("qti-assessment-item-ref")],d);import{html as X,LitElement as j}from"lit";import{customElement as D,property as H}from"lit/decorators.js";import{provide as J}from"@lit-labs/context";import{createContext as N}from"@lit-labs/context";var i=N("test");var x=class extends j{constructor(){super();this.context={itemIndex:null,items:[]};this.itemRefEls=new Map;this.itemConnected=t=>{let s=this.context.items.findIndex(o=>o.identifier===t.identifier);this.context=l(p({},this.context),{itemIndex:s});let r=this.context.items.find(o=>(o==null?void 0:o.identifier)===(t==null?void 0:t.identifier));r.variables.length===1?this.copyItemVariables(t.identifier):t.variables=[...r.variables]};this.addEventListener("register-item-ref",this.onItemRefRegistered),this.addEventListener("on-test-request-item",this.onTestRequestItem),this.addEventListener("qti-item-connected",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))}copyItemVariables(t){this.context=l(p({},this.context),{items:this.context.items.map(s=>s.identifier==t?l(p({},s),{variables:this.getAssessmentItem(t).context.variables}):s)})}getAssessmentItem(t){return this.querySelector(`qti-assessment-item-ref[identifier="${t}"]`).assessmentItem}onItemRefRegistered(t){this.itemRefEls.set(t.detail.identifier,t.target);let{href:s,identifier:r}=t.detail;this.context.items=[...this.context.items,{href:s,identifier:r,variables:[{identifier:"completionStatus",cardinality:"single",baseType:"string",value:"not_attempted",type:"outcome"}]}]}onTestRequestItem(t){t.stopImmediatePropagation(),t.detail!==this.context.itemIndex&&(this.context=l(p({},this.context),{itemIndex:null}),this._requestItem(this.context.items[t.detail].identifier))}firstUpdated(t){super.firstUpdated(t),this._requestItem(this.context.items[0].identifier)}_requestItem(t){this.dispatchEvent(new CustomEvent("on-test-set-item",{bubbles:!0,composed:!0,detail:t}))}render(){return X`<slot></slot>`}};e([J({context:i}),H({attribute:!1})],x.prototype,"context",2),x=e([D("qti-assessment-test")],x);import{html as S,LitElement as V}from"lit";import{customElement as z,property as G}from"lit/decorators.js";var h=class extends V{constructor(){super(...arguments);this._navigationMode="linear"}render(){return S`
1
+ import"../chunk-MTPOYN4D.js";import{a as w}from"../chunk-LNHTXQXY.js";import"../chunk-DPSTDDQZ.js";import"../chunk-AWSFYZS5.js";import{a as o,b as Ht}from"../chunk-KESARAC5.js";import{a as I,b as y,c as e}from"../chunk-343LZK3D.js";import{customElement as O,property as L}from"lit/decorators.js";var a=class extends w{connectedCallback(){super.connectedCallback();let t=new CustomEvent("register-item-ref",{bubbles:!0,composed:!0,detail:{identifier:this.identifier,href:this.href}});this.dispatchEvent(t)}};e([L({type:String})],a.prototype,"identifier",2),e([L({type:String})],a.prototype,"href",2),a=e([O("qti-assessment-item-ref")],a);import{html as N,LitElement as U}from"lit";import{customElement as X,property as j}from"lit/decorators.js";var d=class extends U{constructor(){super(...arguments);this._navigationMode="linear"}render(){return N`
2
2
  <slot name="qti-item"></slot>
3
3
  <slot> </slot>
4
- `}};e([G({type:String,attribute:"navigation-mode"})],h.prototype,"_navigationMode",2),h=e([z("qti-test-part")],h);import{useRef as K}from"haunted";import{html as M,LitElement as W}from"lit";import{customElement as Y,property as A}from"lit/decorators.js";var f=class extends W{constructor(){super(...arguments);this._navigationMode="linear";this.loadedItems=[];this.itemRefEls=K(new Map);this.controller=new AbortController}requestItem(t){let s=async()=>{for(let m of this.itemRefEls.current.values())m.xml="";let r=this.itemRefEls.current.get(t),n=new AbortController().signal;try{let u=await(await fetch(`${this.assessmentTestURI}/items/${r.href}`,{signal:n})).text();r.xml=u}catch(m){m.name==="AbortError"?console.log("Fetch aborted"):console.error(m)}};this.controller&&this.controller.abort(),s()}render(){return M`
4
+ `}};e([j({type:String,attribute:"navigation-mode"})],d.prototype,"_navigationMode",2),d=e([X("qti-test-part")],d);import{useRef as D}from"haunted";import{html as R,LitElement as H}from"lit";import{customElement as J,property as M}from"lit/decorators.js";var u=class extends H{constructor(){super(...arguments);this._navigationMode="linear";this.loadedItems=[];this.itemRefEls=D(new Map);this.controller=new AbortController}requestItem(t){let r=async()=>{for(let m of this.itemRefEls.current.values())m.xml="";let s=this.itemRefEls.current.get(t),i=new AbortController().signal;try{let l=await(await fetch(`${this.assessmentTestURI}/items/${s.href}`,{signal:i})).text();s.xml=l}catch(m){m.name==="AbortError"?console.log("Fetch aborted"):console.error(m)}};this.controller&&this.controller.abort(),r()}render(){return R`
5
5
  <qti-assessment-test
6
6
  @register-item-ref=${t=>{this.itemRefEls.current.set(t.target.identifier,t.target),t.target.itemLocation=`${this.assessmentTestURI}/items/${t.target.href}`}}
7
7
  @on-test-set-item=${({detail:t})=>this.requestItem(t)}
@@ -9,7 +9,7 @@ import"../chunk-MTPOYN4D.js";import{a as L}from"../chunk-TSUFNGZN.js";import"../
9
9
  <test-show-index></test-show-index>
10
10
  <qti-test-part identifier="part1" navigation-mode="nonlinear" submission-mode="individual">
11
11
  <qti-assessment-section identifier="section-1" title="Section 1" visible="true" required="true">
12
- ${this.loadedItems.map(t=>M`<qti-assessment-item-ref identifier="${t.identifier}" href="${t.href}">
12
+ ${this.loadedItems.map(t=>R`<qti-assessment-item-ref identifier="${t.identifier}" href="${t.href}">
13
13
  </qti-assessment-item-ref>`)}
14
14
  </qti-assessment-section>
15
15
  </qti-test-part>
@@ -23,57 +23,57 @@ import"../chunk-MTPOYN4D.js";import{a as L}from"../chunk-TSUFNGZN.js";import"../
23
23
  <test-show-correct>correct</test-show-correct>
24
24
  <test-print-variables></test-print-variables>
25
25
  </qti-assessment-test>
26
- `}};e([A({type:String,attribute:"navigation-mode"})],f.prototype,"_navigationMode",2),e([A({type:String,attribute:"assessment-test-uri"})],f.prototype,"assessmentTestURI",2),f=e([Y("qti-test")],f);import{html as Z,LitElement as B}from"lit";import{customElement as P,state as T}from"lit/decorators.js";import{consume as Q}from"@lit-labs/context";var b=class extends B{_requestItem(t){this.dispatchEvent(new CustomEvent("on-test-request-item",{composed:!0,bubbles:!0,detail:t}))}render(){let{items:t,itemIndex:s}=this._testContext,r=Math.min(s+1,t.length-1);return Z`
27
- <button part="button" @click=${o=>this._requestItem(r)} id="${t[r].identifier}">
26
+ `}};e([M({type:String,attribute:"navigation-mode"})],u.prototype,"_navigationMode",2),e([M({type:String,attribute:"assessment-test-uri"})],u.prototype,"assessmentTestURI",2),u=e([J("qti-test")],u);import{html as z,LitElement as G}from"lit";import{customElement as K,state as W}from"lit/decorators.js";import{consume as Y}from"@lit/context";var f=class extends G{_requestItem(t){this.dispatchEvent(new CustomEvent("on-test-request-item",{composed:!0,bubbles:!0,detail:t}))}render(){let{items:t,itemIndex:r}=this._testContext,s=Math.min(r+1,t.length-1);return z`
27
+ <button part="button" @click=${n=>this._requestItem(s)} id="${t[s].identifier}">
28
28
  <slot></slot>
29
29
  </button>
30
- `}};e([Q({context:i,subscribe:!0}),T()],b.prototype,"_testContext",2),b=e([P("test-next")],b);import{html as tt,LitElement as et}from"lit";import{customElement as st,state as rt}from"lit/decorators.js";import{consume as ot}from"@lit-labs/context";var v=class extends et{_requestItem(t){this.dispatchEvent(new CustomEvent("on-test-request-item",{composed:!0,bubbles:!0,detail:t}))}render(){let{items:t,itemIndex:s}=this._testContext,r=Math.max(s-1,0);return tt`
31
- <button part="button" @click=${o=>this._requestItem(r)} id="${t[r].identifier}">
30
+ `}};e([Y({context:o,subscribe:!0}),W()],f.prototype,"_testContext",2),f=e([K("test-next")],f);import{html as Z,LitElement as S}from"lit";import{customElement as V,state as B}from"lit/decorators.js";import{consume as P}from"@lit/context";var x=class extends S{_requestItem(t){this.dispatchEvent(new CustomEvent("on-test-request-item",{composed:!0,bubbles:!0,detail:t}))}render(){let{items:t,itemIndex:r}=this._testContext,s=Math.max(r-1,0);return Z`
31
+ <button part="button" @click=${n=>this._requestItem(s)} id="${t[s].identifier}">
32
32
  <slot></slot>
33
33
  </button>
34
- `}};e([ot({context:i,subscribe:!0}),rt()],v.prototype,"_testContext",2),v=e([st("test-prev")],v);import{consume as it}from"@lit-labs/context";import{LitElement as nt,html as mt}from"lit";import{customElement as at,state as ct}from"lit/decorators.js";var E=class extends nt{render(){let{items:t,itemIndex:s}=this._testProvider;return mt`
35
- <progress part="progress" id="file" max=${t.length-1} value=${s}>
36
- ${s/(t.length-1)}%
34
+ `}};e([P({context:o,subscribe:!0}),B()],x.prototype,"_testContext",2),x=e([V("test-prev")],x);import{consume as T}from"@lit/context";import{LitElement as Q,html as tt}from"lit";import{customElement as et,state as rt}from"lit/decorators.js";var h=class extends Q{render(){let{items:t,itemIndex:r}=this._testProvider;return tt`
35
+ <progress part="progress" id="file" max=${t.length-1} value=${r}>
36
+ ${r/(t.length-1)}%
37
37
  </progress>
38
- `}};e([it({context:i,subscribe:!0}),ct()],E.prototype,"_testProvider",2),E=e([at("test-progress")],E);import{consume as pt}from"@lit-labs/context";import{LitElement as lt,html as ut}from"lit";import{customElement as dt,state as ft}from"lit/decorators.js";var C=class extends lt{_requestItem(t){this.dispatchEvent(new CustomEvent("on-test-request-item",{composed:!0,bubbles:!0,detail:t}))}render(){let{items:t,itemIndex:s}=this._testProvider;return ut`
38
+ `}};e([T({context:o,subscribe:!0}),rt()],h.prototype,"_testProvider",2),h=e([et("test-progress")],h);import{consume as st}from"@lit/context";import{LitElement as ot,html as nt}from"lit";import{customElement as it,state as mt}from"lit/decorators.js";var b=class extends ot{_requestItem(t){this.dispatchEvent(new CustomEvent("on-test-request-item",{composed:!0,bubbles:!0,detail:t}))}render(){let{items:t,itemIndex:r}=this._testProvider;return nt`
39
39
  <input
40
40
  part="input"
41
41
  type="range"
42
- value=${s}
42
+ value=${r}
43
43
  class="absolute w-full appearance-none bg-transparent"
44
44
  max=${t.length-1}
45
- @input=${r=>this._requestItem(+r.target.value)}
45
+ @input=${s=>this._requestItem(+s.target.value)}
46
46
  />
47
- `}};e([pt({context:i,subscribe:!0}),ft()],C.prototype,"_testProvider",2),C=e([dt("test-slider")],C);import{consume as xt}from"@lit-labs/context";import{LitElement as ht,html as F}from"lit";import{customElement as bt,state as vt}from"lit/decorators.js";var I=class extends ht{createRenderRoot(){return this}_requestItem(t){this.dispatchEvent(new CustomEvent("on-test-request-item",{composed:!0,bubbles:!0,detail:t}))}render(){let{items:t,itemIndex:s}=this._testProvider;return F`
48
- ${t.map((r,o)=>{var n;return F` <label>
47
+ `}};e([st({context:o,subscribe:!0}),mt()],b.prototype,"_testProvider",2),b=e([it("test-slider")],b);import{consume as pt}from"@lit/context";import{LitElement as ct,html as F}from"lit";import{customElement as lt,state as at}from"lit/decorators.js";var v=class extends ct{createRenderRoot(){return this}_requestItem(t){this.dispatchEvent(new CustomEvent("on-test-request-item",{composed:!0,bubbles:!0,detail:t}))}render(){let{items:t,itemIndex:r}=this._testProvider;return F`
48
+ ${t.map((s,n)=>{var i;return F` <label>
49
49
  <input
50
50
  type="radio"
51
51
  part="input"
52
52
  name="item"
53
- value="${o}"
54
- ?checked=${o===s}
55
- @change=${m=>this._requestItem(o)}
56
- data-completion-status=${(n=r.variables.find(m=>m.identifier==="completionStatus"))==null?void 0:n.value}
57
- id="${r.identifier}"
53
+ value="${n}"
54
+ ?checked=${n===r}
55
+ @change=${m=>this._requestItem(n)}
56
+ data-completion-status=${(i=s.variables.find(m=>m.identifier==="completionStatus"))==null?void 0:i.value}
57
+ id="${s.identifier}"
58
58
  />
59
- ${o+1}
59
+ ${n+1}
60
60
  </label>`})}
61
- `}};e([xt({context:i,subscribe:!0}),vt()],I.prototype,"_testProvider",2),I=e([bt("test-paging-radio")],I);import{consume as Et}from"@lit-labs/context";import{LitElement as Ct,html as k}from"lit";import{customElement as It,state as gt}from"lit/decorators.js";var g=class extends Ct{createRenderRoot(){return this}_requestItem(t){this.dispatchEvent(new CustomEvent("on-test-request-item",{composed:!0,bubbles:!0,detail:t}))}render(){let{items:t,itemIndex:s}=this._testProvider;return k`
62
- ${t.map((r,o)=>{var n;return k` <button
61
+ `}};e([pt({context:o,subscribe:!0}),at()],v.prototype,"_testProvider",2),v=e([lt("test-paging-radio")],v);import{consume as ut}from"@lit/context";import{LitElement as dt,html as k}from"lit";import{customElement as ft,state as xt}from"lit/decorators.js";var E=class extends dt{createRenderRoot(){return this}_requestItem(t){this.dispatchEvent(new CustomEvent("on-test-request-item",{composed:!0,bubbles:!0,detail:t}))}render(){let{items:t,itemIndex:r}=this._testProvider;return k`
62
+ ${t.map((s,n)=>{var i;return k` <button
63
63
  part="button"
64
- data-completion-status=${(n=r.variables.find(m=>m.identifier==="completionStatus"))==null?void 0:n.value}
65
- data-active-item=${o===s}
66
- @click=${m=>this._requestItem(o)}
67
- id="${r.identifier}"
64
+ data-completion-status=${(i=s.variables.find(m=>m.identifier==="completionStatus"))==null?void 0:i.value}
65
+ data-active-item=${n===r}
66
+ @click=${m=>this._requestItem(n)}
67
+ id="${s.identifier}"
68
68
  >
69
- ${o+1}
69
+ ${n+1}
70
70
  </button>`})}
71
- `}};e([Et({context:i,subscribe:!0}),gt()],g.prototype,"_testProvider",2),g=e([It("test-paging-buttons")],g);import{consume as qt}from"@lit-labs/context";import{LitElement as _t,html as O}from"lit";import{customElement as $t,state as yt}from"lit/decorators.js";var q=class extends _t{render(){var o,n,m;let{items:t,itemIndex:s}=this._testProvider;if(s==null)return O``;let r=(m=(n=this.closest("qti-assessment-test"))==null?void 0:n.itemRefEls.get((o=t[s])==null?void 0:o.identifier))==null?void 0:m.assessmentItem;return O`
72
- <button part="button" @click=${u=>r.showCorrectResponse()}>
71
+ `}};e([ut({context:o,subscribe:!0}),xt()],E.prototype,"_testProvider",2),E=e([ft("test-paging-buttons")],E);import{consume as ht}from"@lit/context";import{LitElement as bt,html as A}from"lit";import{customElement as vt,state as Et}from"lit/decorators.js";var C=class extends bt{render(){var n,i,m;let{items:t,itemIndex:r}=this._testProvider;if(r==null)return A``;let s=(m=(i=this.closest("qti-assessment-test"))==null?void 0:i.itemRefEls.get((n=t[r])==null?void 0:n.identifier))==null?void 0:m.assessmentItem;return A`
72
+ <button part="button" @click=${l=>s.showCorrectResponse()}>
73
73
  <slot></slot>
74
74
  </button>
75
- `}};e([qt({context:i,subscribe:!0}),yt()],q.prototype,"_testProvider",2),q=e([$t("test-show-correct")],q);import{ContextConsumer as Rt}from"@lit-labs/context";import{html as Lt,LitElement as wt}from"lit";import{customElement as Mt,state as At}from"lit/decorators.js";var _=class extends wt{constructor(){super(...arguments);this._printed=""}render(){return Lt`${this._printed}<slot @slotchange=${this.handleSlotChange}></slot>`}handleSlotChange(t){var r,o;let s=Array.from((r=this.childNodes)!=null?r:[]).find(n=>n.nodeType===Node.COMMENT_NODE);try{this.operatorFunction=new Function("context","item",(o=s.textContent)!=null?o:"")}catch(n){console.error("custom-operator contains invalid javascript code",n)}this._context=new Rt(this,i,n=>{this._printed=this.operatorFunction(n,this.closest("qti-assessment-item"))},!0)}};e([At()],_.prototype,"_printed",2),_=e([Mt("test-script")],_);import{html as Ft,LitElement as kt}from"lit";import{customElement as Ot,state as Ut}from"lit/decorators.js";import{consume as Nt}from"@lit-labs/context";var $=class extends kt{_requestItem(t){this.dispatchEvent(new CustomEvent("on-test-request-item",{composed:!0,bubbles:!0,detail:t}))}render(){let{items:t,itemIndex:s}=this._testContext,r=t[s-1];return Ft` ${s+1}/${t.length} `}};e([Nt({context:i,subscribe:!0}),Ut()],$.prototype,"_testContext",2),$=e([Ot("test-show-index")],$);import{consume as Xt}from"@lit-labs/context";import{LitElement as jt,html as Dt}from"lit";import{customElement as Ht,state as Jt}from"lit/decorators.js";var y=class extends jt{render(){return Dt`
75
+ `}};e([ht({context:o,subscribe:!0}),Et()],C.prototype,"_testProvider",2),C=e([vt("test-show-correct")],C);import{ContextConsumer as Ct}from"@lit/context";import{html as _t,LitElement as $t}from"lit";import{customElement as qt,state as gt}from"lit/decorators.js";var _=class extends $t{constructor(){super(...arguments);this._printed=""}render(){return _t`${this._printed}<slot @slotchange=${this.handleSlotChange}></slot>`}handleSlotChange(t){var s,n;let r=Array.from((s=this.childNodes)!=null?s:[]).find(i=>i.nodeType===Node.COMMENT_NODE);try{this.operatorFunction=new Function("context","item",(n=r.textContent)!=null?n:"")}catch(i){console.error("custom-operator contains invalid javascript code",i)}this._context=new Ct(this,o,i=>{this._printed=this.operatorFunction(i,this.closest("qti-assessment-item"))},!0)}};e([gt()],_.prototype,"_printed",2),_=e([qt("test-script")],_);import{html as It,LitElement as yt}from"lit";import{customElement as wt,state as Lt}from"lit/decorators.js";import{consume as Rt}from"@lit/context";var $=class extends yt{_requestItem(t){this.dispatchEvent(new CustomEvent("on-test-request-item",{composed:!0,bubbles:!0,detail:t}))}render(){let{items:t,itemIndex:r}=this._testContext,s=t[r-1];return It` ${r+1}/${t.length} `}};e([Rt({context:o,subscribe:!0}),Lt()],$.prototype,"_testContext",2),$=e([wt("test-show-index")],$);import{consume as Mt}from"@lit/context";import{LitElement as Ft,html as kt}from"lit";import{customElement as At,state as Ot}from"lit/decorators.js";var q=class extends Ft{render(){return kt`
76
76
  <pre>
77
- ${JSON.stringify(l(p({},this._testProvider),{items:this._testProvider.items.map(t=>l(p({},t),{itemEl:null}))}),null,2)}</pre
77
+ ${JSON.stringify(y(I({},this._testProvider),{items:this._testProvider.items.map(t=>y(I({},t),{itemEl:null}))}),null,2)}</pre
78
78
  >
79
- `}};e([Xt({context:i,subscribe:!0}),Jt()],y.prototype,"_testProvider",2),y=e([Ht("test-print-variables")],y);import{consume as St}from"@lit-labs/context";import{LitElement as Vt,html as zt}from"lit";import{customElement as Gt,state as Kt}from"lit/decorators.js";var R=class extends Vt{_requestItem(t){this.dispatchEvent(new CustomEvent("on-test-request-item",{composed:!0,bubbles:!0,detail:t}))}render(){let{items:t}=this._testContext,s=t.reduce((o,n)=>{let m=n.variables.find(u=>u.identifier==="SCORE");return o+(m?+m.value:0)},0),r=t.reduce((o,n)=>{let m=n.variables.find(u=>u.identifier==="MAXSCORE");return o+(m?+m.value:0)},0);return zt` ${s}/${r}`}};e([St({context:i,subscribe:!0}),Kt()],R.prototype,"_testContext",2),R=e([Gt("test-print-score")],R);export{d as QtiAssessmentItemRef,x as QtiAssessmentTest,y as QtiPrintVariables,f as QtiTest,g as QtiTestPagingButtons,I as QtiTestPagingRadio,h as QtiTestPart,R as QtiTestPrintScore,E as QtiTestProgress,q as QtiTestShowCorrect,C as QtiTestSlider,b as TestNext,v as TestPrev,_ as TestScript,$ as TestShowIndex};
79
+ `}};e([Mt({context:o,subscribe:!0}),Ot()],q.prototype,"_testProvider",2),q=e([At("test-print-variables")],q);import{consume as Nt}from"@lit/context";import{LitElement as Ut,html as Xt}from"lit";import{customElement as jt,state as Dt}from"lit/decorators.js";var g=class extends Ut{_requestItem(t){this.dispatchEvent(new CustomEvent("on-test-request-item",{composed:!0,bubbles:!0,detail:t}))}render(){let{items:t}=this._testContext,r=t.reduce((n,i)=>{let m=i.variables.find(l=>l.identifier==="SCORE");return n+(m?+m.value:0)},0),s=t.reduce((n,i)=>{let m=i.variables.find(l=>l.identifier==="MAXSCORE");return n+(m?+m.value:0)},0);return Xt` ${r}/${s}`}};e([Nt({context:o,subscribe:!0}),Dt()],g.prototype,"_testContext",2),g=e([jt("test-print-score")],g);export{a as QtiAssessmentItemRef,Ht as QtiAssessmentTest,q as QtiPrintVariables,u as QtiTest,E as QtiTestPagingButtons,v as QtiTestPagingRadio,d as QtiTestPart,g as QtiTestPrintScore,h as QtiTestProgress,C as QtiTestShowCorrect,b as QtiTestSlider,f as TestNext,x as TestPrev,_ as TestScript,$ as TestShowIndex};
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }var _chunk43RGQFGWcjs = require('../chunk-43RGQFGW.cjs');require('../chunk-6G76D2MI.cjs');var _react = require('react'); var _react2 = _interopRequireDefault(_react);var _react3 = require('@lit/react');var d=_react3.createComponent.call(void 0, {tagName:"qti-item",react:_react2.default,elementClass:_chunk43RGQFGWcjs.b,events:{onOutcomeChanged:"qti-outcome-changed",onInteractionChanged:"qti-interaction-changed",onItemConnected:"qti-item-connected",onRegisterItem:"register-item-ref",onTestRequestItem:"on-test-request-item"}});exports.QtiTest = d;
@@ -0,0 +1,29 @@
1
+ import React, { ReactNode, Ref } from 'react';
2
+ import { O as OutcomeChangedDetails, I as InteractionChangedDetails, Q as QtiAssessmentItem } from '../qti-simple-choice-5902cb37.js';
3
+ import { T as TestContext, Q as QtiAssessmentTest } from '../qti-assessment-test-15ffab61.js';
4
+ import 'lit-html';
5
+ import 'lit';
6
+ import 'lit-html/directives/ref';
7
+ import '../qti-item/index.cjs';
8
+ import '../context/index.cjs';
9
+
10
+ interface OutcomeChangedDetailsExtended extends OutcomeChangedDetails {
11
+ identifier: string;
12
+ }
13
+ interface QtiAssessmentTestProps {
14
+ children?: ReactNode;
15
+ className?: string;
16
+ context: TestContext;
17
+ ref?: Ref<QtiAssessmentTest | undefined>;
18
+ onOutcomeChanged?: (e: CustomEvent<OutcomeChangedDetails>) => void;
19
+ onInteractionChanged?: (e: CustomEvent<InteractionChangedDetails>) => void;
20
+ onRegisterItem?: (e: CustomEvent<{
21
+ href: string;
22
+ identifier: string;
23
+ }>) => void;
24
+ onTestRequestItem?: (e: CustomEvent<number>) => void;
25
+ onItemConnected?: (e: CustomEvent<QtiAssessmentItem>) => void;
26
+ }
27
+ declare const QtiTest: React.ForwardRefExoticComponent<QtiAssessmentTestProps>;
28
+
29
+ export { OutcomeChangedDetailsExtended, QtiTest };
@@ -0,0 +1,29 @@
1
+ import React, { ReactNode, Ref } from 'react';
2
+ import { O as OutcomeChangedDetails, I as InteractionChangedDetails, Q as QtiAssessmentItem } from '../qti-simple-choice-5902cb37.js';
3
+ import { T as TestContext, Q as QtiAssessmentTest } from '../qti-assessment-test-a1f2cb91.js';
4
+ import 'lit-html';
5
+ import 'lit';
6
+ import 'lit-html/directives/ref';
7
+ import '../qti-item/index.js';
8
+ import '../context/index.js';
9
+
10
+ interface OutcomeChangedDetailsExtended extends OutcomeChangedDetails {
11
+ identifier: string;
12
+ }
13
+ interface QtiAssessmentTestProps {
14
+ children?: ReactNode;
15
+ className?: string;
16
+ context: TestContext;
17
+ ref?: Ref<QtiAssessmentTest | undefined>;
18
+ onOutcomeChanged?: (e: CustomEvent<OutcomeChangedDetails>) => void;
19
+ onInteractionChanged?: (e: CustomEvent<InteractionChangedDetails>) => void;
20
+ onRegisterItem?: (e: CustomEvent<{
21
+ href: string;
22
+ identifier: string;
23
+ }>) => void;
24
+ onTestRequestItem?: (e: CustomEvent<number>) => void;
25
+ onItemConnected?: (e: CustomEvent<QtiAssessmentItem>) => void;
26
+ }
27
+ declare const QtiTest: React.ForwardRefExoticComponent<QtiAssessmentTestProps>;
28
+
29
+ export { OutcomeChangedDetailsExtended, QtiTest };
@@ -0,0 +1 @@
1
+ import{b as e}from"../chunk-KESARAC5.js";import"../chunk-343LZK3D.js";import t from"react";import{createComponent as n}from"@lit/react";var d=n({tagName:"qti-item",react:t,elementClass:e,events:{onOutcomeChanged:"qti-outcome-changed",onInteractionChanged:"qti-interaction-changed",onItemConnected:"qti-item-connected",onRegisterItem:"register-item-ref",onTestRequestItem:"on-test-request-item"}});export{d as QtiTest};
package/package.json CHANGED
@@ -12,7 +12,7 @@
12
12
  "engines": {
13
13
  "node": ">=16.0.0"
14
14
  },
15
- "version": "6.1.0",
15
+ "version": "6.3.2",
16
16
  "type": "module",
17
17
  "main": "dist/index.js",
18
18
  "exports": {
@@ -43,6 +43,10 @@
43
43
  "import": "./dist/qti-item-react/index.js",
44
44
  "require": "./dist/qti-item-react/index.cjs"
45
45
  },
46
+ "./react/qti-test": {
47
+ "import": "./dist/qti-test-react/index.js",
48
+ "require": "./dist/qti-test-react/index.cjs"
49
+ },
46
50
  "./qti-transform": {
47
51
  "import": "./dist/qti-transform/index.js",
48
52
  "require": "./dist/qti-transform/index.cjs"
@@ -76,6 +80,9 @@
76
80
  "react/qti-item": [
77
81
  "./dist/qti-item-react/index.d.ts"
78
82
  ],
83
+ "react/qti-test": [
84
+ "./dist/qti-item-react/index.d.ts"
85
+ ],
79
86
  "qti-transform": [
80
87
  "./dist/qti-transform/index.d.ts"
81
88
  ]
@@ -104,45 +111,46 @@
104
111
  "kill 6006": "sudo lsof -i :6006 | grep LISTEN | awk '{print $2}' | xargs kill",
105
112
  "list-outdated-dependencies": "npx npm-check-updates --format repo --peer",
106
113
  "update-dependencies": "npx npm-check-updates --peer -u && npm install",
107
- "arethetypeswrong": "attw --pack",
114
+ "arethetypeswrong": "npm run build-lib && attw --pack",
108
115
  "----hooks----": "",
109
116
  "prepublishOnly": "echo 'calling prepublishOnly as npm lifecycle hook to build-lib!' && npm run build-lib",
110
117
  "postpublish": "npm run deploy"
111
118
  },
112
119
  "dependencies": {
113
- "@lit-labs/context": "^0.5.0",
114
- "@lit-labs/react": "^2.1.1",
120
+ "@lit/context": "^1.0.0",
121
+ "@lit/react": "^1.0.0",
115
122
  "@tailwindcss/nesting": "^0.0.0-insiders.565cd3e",
116
123
  "cheerio": "^1.0.0-rc.12",
117
124
  "haunted": "^5.0.0",
118
- "lit": "^2.8.0",
125
+ "lit": "^3.0.0",
119
126
  "lit-xml": "^0.6.0",
120
127
  "remark-gfm": "^4.0.0"
121
128
  },
122
129
  "peerdependencies": {
123
- "@lit-labs/context": "> 0.3",
124
- "@lit-labs/react": "> 1.2",
130
+ "@lit/context": "> 0.3",
131
+ "@lit/react": "> 1.2",
125
132
  "lit": ">= 3 < 4",
126
133
  "react": "> 18"
127
134
  },
128
135
  "devDependencies": {
129
- "@arethetypeswrong/cli": "^0.12.1",
130
- "@custom-elements-manifest/analyzer": "^0.8.4",
136
+ "@arethetypeswrong/cli": "^0.12.2",
137
+ "@custom-elements-manifest/analyzer": "^0.9.0",
131
138
  "@jest/globals": "^29.7.0",
132
- "@storybook/addon-a11y": "^7.4.6",
133
- "@storybook/addon-essentials": "^7.4.6",
134
- "@storybook/addon-interactions": "^7.4.6",
135
- "@storybook/addon-jest": "^7.4.6",
136
- "@storybook/addon-links": "^7.4.6",
137
- "@storybook/blocks": "^7.4.6",
139
+ "@storybook/addon-a11y": "^7.5.0",
140
+ "@storybook/addon-essentials": "^7.5.0",
141
+ "@storybook/addon-interactions": "^7.5.0",
142
+ "@storybook/addon-jest": "^7.5.0",
143
+ "@storybook/addon-links": "^7.5.0",
144
+ "@storybook/addon-mdx-gfm": "^7.5.0",
145
+ "@storybook/blocks": "^7.5.0",
138
146
  "@storybook/jest": "^0.2.3",
139
147
  "@storybook/test-runner": "^0.13.0",
140
148
  "@storybook/testing-library": "^0.2.2",
141
- "@storybook/web-components": "^7.4.6",
142
- "@storybook/web-components-vite": "^7.4.6",
149
+ "@storybook/web-components": "^7.5.0",
150
+ "@storybook/web-components-vite": "^7.5.0",
143
151
  "@tailwindcss/typography": "^0.5.10",
144
- "@types/node": "^20.8.5",
145
- "@typescript-eslint/eslint-plugin": "^6.7.5",
152
+ "@types/node": "^20.8.7",
153
+ "@typescript-eslint/eslint-plugin": "^6.8.0",
146
154
  "autoprefixer": "^10.4.16",
147
155
  "cem-plugin-vs-code-custom-data-generator": "^1.4.2",
148
156
  "eslint": "^8.51.0",
@@ -164,13 +172,13 @@
164
172
  "prettier-plugin-tailwindcss": "^0.5.6",
165
173
  "react": "^18.2.0",
166
174
  "react-dom": "^18.2.0",
167
- "storybook": "^7.4.6",
175
+ "storybook": "^7.5.0",
168
176
  "tailwindcss": "^3.3.2",
169
177
  "ts-jest": "^29.1.1",
170
178
  "ts-node": "^10.9.1",
171
179
  "tsup": "^7.2.0",
172
180
  "typescript": "^5.2.2",
173
- "vite": "^4.4.11"
181
+ "vite": "^4.5.0"
174
182
  },
175
183
  "customElements": "custom-elements.json"
176
184
  }
package/readme.md CHANGED
@@ -66,13 +66,13 @@ For a bit more advanced example using React and the QTIItem React wrapper from t
66
66
  <QtiItem
67
67
  className="w-full h-[480px] bg-white shadow p-4"
68
68
  responses={itemResponses.current.get(itemId!)}
69
- qtiinteractionchanged={({ detail }: { detail: any }) => {
69
+ onInteractionChanged={({ detail }: { detail: any }) => {
70
70
  storeResponse(detail.item, detail.response, detail.responseIdentifier);
71
71
  }}
72
- qtioutcomechanged={(e: any) => {
72
+ onOutcomeChanged={(e: any) => {
73
73
  itemOutcomes.current.set(items[itemIndex].identifier, e.detail.value);
74
74
  }}
75
- qtiitemconnected={(e: any) => {
75
+ onItemConnected={(e: any) => {
76
76
  qtiItem.current = e.target;
77
77
  setItemId(e.detail.identifier);
78
78
  }}
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _context = require('@lit-labs/context');var o=_context.createContext.call(void 0, "audience");exports.a = o;
@@ -1 +0,0 @@
1
- import{createContext as t}from"@lit-labs/context";var o=t("audience");export{o as a};