@citolab/qti-components 7.0.6-beta.2 → 7.0.6-beta.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/cdn/chunks/{chunk-MJMONWKB.js → chunk-4ILXLVT5.js} +8 -2
  2. package/cdn/chunks/chunk-4PEUIMDK.js +8 -0
  3. package/cdn/chunks/chunk-H2V2RXUW.js +11 -0
  4. package/cdn/chunks/chunk-IQZ7AOCQ.js +8 -0
  5. package/cdn/chunks/chunk-J3JSSCM6.js +5 -0
  6. package/cdn/chunks/chunk-LARBLB7K.js +8 -0
  7. package/cdn/chunks/chunk-PPWEIKLT.js +1 -0
  8. package/cdn/chunks/{chunk-4WXQYE2P.js → chunk-PT523RSK.js} +2 -2
  9. package/cdn/chunks/chunk-QTK4CPHP.js +8 -0
  10. package/cdn/chunks/{chunk-7XYBFL7U.js → chunk-SXM25YH3.js} +89 -89
  11. package/cdn/chunks/chunk-UJP4TGD3.js +1 -0
  12. package/cdn/chunks/{chunk-6S4CDN3T.js → chunk-YHWMZAZD.js} +2 -2
  13. package/cdn/chunks/{chunk-TQBDBMWL.js → chunk-YWH4TGMA.js} +1 -1
  14. package/cdn/exports/interaction.js +1 -1
  15. package/cdn/index.global.js +1 -1
  16. package/cdn/index.js +1 -1
  17. package/cdn/qti-components/index.js +1 -1
  18. package/cdn/qti-item/core/index.js +1 -1
  19. package/cdn/qti-test/components/index.js +1 -1
  20. package/cdn/qti-test/components/test-component.abstract.js +1 -1
  21. package/cdn/qti-test/components/test-end-attempt.js +1 -0
  22. package/cdn/qti-test/components/test-item-link.js +1 -1
  23. package/cdn/qti-test/components/test-next.js +1 -1
  24. package/cdn/qti-test/components/test-paging-buttons-stamp.js +1 -1
  25. package/cdn/qti-test/components/test-prev.js +1 -1
  26. package/cdn/qti-test/components/test-show-correct-response.js +1 -0
  27. package/cdn/qti-test/components/test-view.js +1 -1
  28. package/cdn/qti-test/core/index.js +1 -1
  29. package/dist/chunks/{chunk-GSWZT6N2.js → chunk-4MQV5IRV.js} +12 -3
  30. package/dist/chunks/chunk-4MQV5IRV.js.map +1 -0
  31. package/dist/chunks/{chunk-6JXR63MH.js → chunk-5RTLOB3Q.js} +12 -3
  32. package/dist/chunks/chunk-5RTLOB3Q.js.map +1 -0
  33. package/dist/chunks/{chunk-UFYWCLXF.js → chunk-AUWATZ65.js} +1 -1
  34. package/dist/chunks/{chunk-UFYWCLXF.js.map → chunk-AUWATZ65.js.map} +1 -1
  35. package/dist/chunks/{chunk-7QMCKYDR.js → chunk-CEXAR7BF.js} +13 -4
  36. package/dist/chunks/chunk-CEXAR7BF.js.map +1 -0
  37. package/dist/chunks/chunk-DNHDFXTV.js +59 -0
  38. package/dist/chunks/chunk-DNHDFXTV.js.map +1 -0
  39. package/dist/chunks/chunk-GQ5P3NWC.js +46 -0
  40. package/dist/chunks/chunk-GQ5P3NWC.js.map +1 -0
  41. package/dist/chunks/chunk-HOTNM5DT.js +1 -0
  42. package/dist/chunks/{chunk-K6ATVWMP.js → chunk-MEQM6M67.js} +96 -124
  43. package/dist/chunks/chunk-MEQM6M67.js.map +1 -0
  44. package/dist/chunks/{chunk-3EU75IUF.js → chunk-MLT7V47R.js} +3 -21
  45. package/dist/chunks/chunk-MLT7V47R.js.map +1 -0
  46. package/dist/chunks/chunk-NHA53UTY.js +52 -0
  47. package/dist/chunks/chunk-NHA53UTY.js.map +1 -0
  48. package/dist/chunks/{chunk-J2SHENRN.js → chunk-NZQKGIJP.js} +9 -3
  49. package/dist/chunks/{chunk-J2SHENRN.js.map → chunk-NZQKGIJP.js.map} +1 -1
  50. package/dist/chunks/{chunk-ZPNJ2HP5.js → chunk-OIRWOI3E.js} +2 -1
  51. package/dist/chunks/chunk-OIRWOI3E.js.map +1 -0
  52. package/dist/chunks/chunk-RX3BRYYI.js +59 -0
  53. package/dist/chunks/chunk-RX3BRYYI.js.map +1 -0
  54. package/dist/chunks/chunk-VAPB5TN4.js +46 -0
  55. package/dist/chunks/chunk-VAPB5TN4.js.map +1 -0
  56. package/dist/chunks/chunk-W4272Q5U.js +46 -0
  57. package/dist/chunks/chunk-W4272Q5U.js.map +1 -0
  58. package/dist/chunks/{chunk-A24F75DB.js → chunk-WWN5AD6V.js} +11 -2
  59. package/dist/chunks/chunk-WWN5AD6V.js.map +1 -0
  60. package/dist/chunks/{chunk-HHVRU3AJ.js → chunk-XCHS3RTZ.js} +2 -2
  61. package/dist/chunks/{chunk-KYAIMBP5.js → chunk-YQB6YLNW.js} +3 -3
  62. package/dist/chunks/chunk-YQB6YLNW.js.map +1 -0
  63. package/dist/chunks/chunk-Z5THRO6Z.js +46 -0
  64. package/dist/chunks/chunk-Z5THRO6Z.js.map +1 -0
  65. package/dist/chunks/{chunk-4GNVYCBN.js → chunk-ZQXZ6PK7.js} +92 -70
  66. package/dist/chunks/chunk-ZQXZ6PK7.js.map +1 -0
  67. package/dist/exports/interaction.js +1 -1
  68. package/dist/index.d.ts +4 -2
  69. package/dist/index.js +21 -13
  70. package/dist/item.css +8 -2
  71. package/dist/qti-components/index.d.ts +2 -2
  72. package/dist/qti-components/index.js +2 -2
  73. package/dist/qti-components-jsx.d.ts +62 -46
  74. package/dist/qti-item/core/index.js +2 -2
  75. package/dist/qti-loader/index.d.ts +1 -1
  76. package/dist/{qti-response-declaration-DAeBp8HH.d.ts → qti-response-declaration-Di9CsqiJ.d.ts} +4 -0
  77. package/dist/qti-test/components/index.d.ts +4 -2
  78. package/dist/qti-test/components/index.js +16 -8
  79. package/dist/qti-test/components/test-component.abstract.d.ts +2 -4
  80. package/dist/qti-test/components/test-component.abstract.js +2 -2
  81. package/dist/qti-test/components/test-end-attempt.d.ts +26 -0
  82. package/dist/qti-test/components/test-end-attempt.js +13 -0
  83. package/dist/qti-test/components/test-end-attempt.js.map +1 -0
  84. package/dist/qti-test/components/test-item-link.d.ts +3 -2
  85. package/dist/qti-test/components/test-item-link.js +3 -3
  86. package/dist/qti-test/components/test-next.d.ts +3 -2
  87. package/dist/qti-test/components/test-next.js +3 -3
  88. package/dist/qti-test/components/test-paging-buttons-stamp.d.ts +2 -2
  89. package/dist/qti-test/components/test-paging-buttons-stamp.js +3 -3
  90. package/dist/qti-test/components/test-prev.d.ts +3 -2
  91. package/dist/qti-test/components/test-prev.js +3 -3
  92. package/dist/qti-test/components/test-show-correct-response.d.ts +26 -0
  93. package/dist/qti-test/components/test-show-correct-response.js +13 -0
  94. package/dist/qti-test/components/test-show-correct-response.js.map +1 -0
  95. package/dist/qti-test/components/test-view.d.ts +3 -2
  96. package/dist/qti-test/components/test-view.js +3 -3
  97. package/dist/qti-test/core/index.d.ts +6 -6
  98. package/dist/qti-test/core/index.js +3 -3
  99. package/dist/{test.context-CaENAJNk.d.ts → test.context-CmsDQ8k2.d.ts} +3 -5
  100. package/dist/vscode.html-custom-data.json +36 -17
  101. package/package.json +1 -1
  102. package/cdn/chunks/chunk-3V6LA7B3.js +0 -8
  103. package/cdn/chunks/chunk-5P7CTN7Q.js +0 -11
  104. package/cdn/chunks/chunk-DZCKF45D.js +0 -5
  105. package/cdn/chunks/chunk-IMJOPCFR.js +0 -1
  106. package/cdn/chunks/chunk-N5OHGRGG.js +0 -8
  107. package/cdn/chunks/chunk-NDHSIO2G.js +0 -8
  108. package/cdn/chunks/chunk-PKT2SJQD.js +0 -8
  109. package/cdn/chunks/chunk-QV6I5NVQ.js +0 -8
  110. package/cdn/chunks/chunk-R33OODNX.js +0 -1
  111. package/dist/chunks/chunk-3EU75IUF.js.map +0 -1
  112. package/dist/chunks/chunk-4GNVYCBN.js.map +0 -1
  113. package/dist/chunks/chunk-6JXR63MH.js.map +0 -1
  114. package/dist/chunks/chunk-7QMCKYDR.js.map +0 -1
  115. package/dist/chunks/chunk-A24F75DB.js.map +0 -1
  116. package/dist/chunks/chunk-GSWZT6N2.js.map +0 -1
  117. package/dist/chunks/chunk-K6ATVWMP.js.map +0 -1
  118. package/dist/chunks/chunk-KYAIMBP5.js.map +0 -1
  119. package/dist/chunks/chunk-UN2IFSGC.js +0 -1
  120. package/dist/chunks/chunk-ZPNJ2HP5.js.map +0 -1
  121. /package/cdn/chunks/{chunk-3GO57DNP.js → chunk-6PW2L463.js} +0 -0
  122. /package/dist/chunks/{chunk-UN2IFSGC.js.map → chunk-HOTNM5DT.js.map} +0 -0
  123. /package/dist/chunks/{chunk-HHVRU3AJ.js.map → chunk-XCHS3RTZ.js.map} +0 -0
@@ -32,6 +32,7 @@ var Interaction = class extends LitElement {
32
32
  composed: true,
33
33
  cancelable: false,
34
34
  detail: {
35
+ interactionElement: this,
35
36
  responseIdentifier: this.responseIdentifier
36
37
  }
37
38
  })
@@ -68,4 +69,4 @@ __decorateClass([
68
69
  export {
69
70
  Interaction
70
71
  };
71
- //# sourceMappingURL=chunk-ZPNJ2HP5.js.map
72
+ //# sourceMappingURL=chunk-OIRWOI3E.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/lib/exports/interaction.ts"],"sourcesContent":["import { property, state } from 'lit/decorators.js';\nimport { LitElement } from 'lit';\nimport type { IInteraction } from './interaction.interface';\n\nexport abstract class Interaction extends LitElement implements IInteraction {\n static formAssociated = true;\n\n @property({ type: String, attribute: 'response-identifier' }) responseIdentifier;\n\n @property({ reflect: true, type: Boolean }) disabled = false;\n\n @property({ reflect: true, type: Boolean }) readonly = false;\n\n @state()\n protected _correctResponse: string | string[];\n protected _internals: ElementInternals;\n\n constructor() {\n super();\n this._internals = this.attachInternals();\n }\n\n abstract validate(): boolean;\n\n public reportValidity(): boolean {\n return this._internals.reportValidity();\n }\n\n public reset(): void {\n this.value = '';\n }\n\n abstract get value(): string | string[] | null;\n abstract set value(val: string | string[] | null);\n\n public get correctResponse(): string | string[] {\n return this._correctResponse;\n }\n set correctResponse(value: string | string[]) {\n this._correctResponse = value;\n }\n\n public override connectedCallback() {\n super.connectedCallback();\n\n this.dispatchEvent(\n new CustomEvent('qti-register-interaction', {\n bubbles: true,\n composed: true,\n cancelable: false,\n detail: {\n interactionElement: this,\n responseIdentifier: this.responseIdentifier\n }\n })\n );\n }\n\n public saveResponse(value: string | string[]) {\n this.dispatchEvent(\n new CustomEvent('qti-interaction-response', {\n bubbles: true,\n composed: true,\n cancelable: false,\n detail: {\n responseIdentifier: this.responseIdentifier,\n response: Array.isArray(value) ? [...value] : value\n }\n })\n );\n }\n}\n"],"mappings":";;;;;AAAA,SAAS,UAAU,aAAa;AAChC,SAAS,kBAAkB;AAGpB,IAAe,cAAf,cAAmC,WAAmC;AAAA,EAa3E,cAAc;AACZ,UAAM;AAToC,oBAAW;AAEX,oBAAW;AAQrD,SAAK,aAAa,KAAK,gBAAgB;AAAA,EACzC;AAAA,EAIO,iBAA0B;AAC/B,WAAO,KAAK,WAAW,eAAe;AAAA,EACxC;AAAA,EAEO,QAAc;AACnB,SAAK,QAAQ;AAAA,EACf;AAAA,EAKA,IAAW,kBAAqC;AAC9C,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAI,gBAAgB,OAA0B;AAC5C,SAAK,mBAAmB;AAAA,EAC1B;AAAA,EAEgB,oBAAoB;AAClC,UAAM,kBAAkB;AAExB,SAAK;AAAA,MACH,IAAI,YAAY,4BAA4B;AAAA,QAC1C,SAAS;AAAA,QACT,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,QAAQ;AAAA,UACN,oBAAoB;AAAA,UACpB,oBAAoB,KAAK;AAAA,QAC3B;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEO,aAAa,OAA0B;AAC5C,SAAK;AAAA,MACH,IAAI,YAAY,4BAA4B;AAAA,QAC1C,SAAS;AAAA,QACT,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,QAAQ;AAAA,UACN,oBAAoB,KAAK;AAAA,UACzB,UAAU,MAAM,QAAQ,KAAK,IAAI,CAAC,GAAG,KAAK,IAAI;AAAA,QAChD;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAnEsB,YACb,iBAAiB;AAEsC;AAAA,EAA7D,SAAS,EAAE,MAAM,QAAQ,WAAW,sBAAsB,CAAC;AAAA,GAHxC,YAG0C;AAElB;AAAA,EAA3C,SAAS,EAAE,SAAS,MAAM,MAAM,QAAQ,CAAC;AAAA,GALtB,YAKwB;AAEA;AAAA,EAA3C,SAAS,EAAE,SAAS,MAAM,MAAM,QAAQ,CAAC;AAAA,GAPtB,YAOwB;AAGlC;AAAA,EADT,MAAM;AAAA,GATa,YAUV;","names":[]}
@@ -0,0 +1,59 @@
1
+ import {
2
+ TestComponent
3
+ } from "./chunk-MLT7V47R.js";
4
+ import {
5
+ btn,
6
+ dis
7
+ } from "./chunk-4O5F7WV7.js";
8
+ import {
9
+ __decorateClass
10
+ } from "./chunk-H2JE6IVU.js";
11
+
12
+ // src/lib/qti-test/components/test-next.ts
13
+ import { css, html } from "lit";
14
+ import { customElement } from "lit/decorators.js";
15
+ var TestNext = class extends TestComponent {
16
+ constructor() {
17
+ super();
18
+ this._internals.role = "button";
19
+ this._internals.ariaLabel = "Next item";
20
+ this.addEventListener("click", (e) => {
21
+ e.preventDefault();
22
+ if (!this.disabled) this._requestItem(this.items[this.itemIndex + 1].identifier);
23
+ });
24
+ }
25
+ willUpdate(changedProperties) {
26
+ super.willUpdate(changedProperties);
27
+ if (changedProperties.has("_testContext")) {
28
+ this.disabled = !this._testElement || this.itemIndex < 0 || this.itemIndex >= this.items.length - 1;
29
+ }
30
+ }
31
+ _requestItem(identifier) {
32
+ this.dispatchEvent(
33
+ new CustomEvent("qti-request-test-item", {
34
+ composed: true,
35
+ bubbles: true,
36
+ detail: identifier
37
+ })
38
+ );
39
+ }
40
+ render() {
41
+ return html`<slot></slot>`;
42
+ }
43
+ };
44
+ TestNext.styles = css`
45
+ :host {
46
+ ${btn};
47
+ }
48
+ :host([disabled]) {
49
+ ${dis};
50
+ }
51
+ `;
52
+ TestNext = __decorateClass([
53
+ customElement("test-next")
54
+ ], TestNext);
55
+
56
+ export {
57
+ TestNext
58
+ };
59
+ //# sourceMappingURL=chunk-RX3BRYYI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/lib/qti-test/components/test-next.ts"],"sourcesContent":["import { css, html } from 'lit';\nimport { customElement } from 'lit/decorators.js';\nimport * as styles from './styles';\nimport { TestComponent } from './test-component.abstract';\n\n/**\n * Represents a custom element for navigating to the next test item.\n *\n * @remarks\n * This element provides functionality for navigating to the next test item.\n *\n * @example\n * ```html\n * <test-next></test-next>\n * ```\n */\n@customElement('test-next')\nexport class TestNext extends TestComponent {\n static styles = css`\n :host {\n ${styles.btn};\n }\n :host([disabled]) {\n ${styles.dis};\n }\n `;\n\n constructor() {\n super();\n this._internals.role = 'button';\n this._internals.ariaLabel = 'Next item';\n\n this.addEventListener('click', e => {\n e.preventDefault();\n if (!this.disabled) this._requestItem(this.items[this.itemIndex + 1].identifier);\n });\n }\n\n willUpdate(changedProperties: Map<string | number | symbol, unknown>) {\n super.willUpdate(changedProperties);\n if (changedProperties.has('_testContext')) {\n this.disabled = !this._testElement || this.itemIndex < 0 || this.itemIndex >= this.items.length - 1;\n }\n }\n\n protected _requestItem(identifier: string): void {\n this.dispatchEvent(\n new CustomEvent('qti-request-test-item', {\n composed: true,\n bubbles: true,\n detail: identifier\n })\n );\n }\n\n render() {\n return html`<slot></slot>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'test-next': TestNext;\n }\n}\n"],"mappings":";;;;;;;;;;;;AAAA,SAAS,KAAK,YAAY;AAC1B,SAAS,qBAAqB;AAgBvB,IAAM,WAAN,cAAuB,cAAc;AAAA,EAU1C,cAAc;AACZ,UAAM;AACN,SAAK,WAAW,OAAO;AACvB,SAAK,WAAW,YAAY;AAE5B,SAAK,iBAAiB,SAAS,OAAK;AAClC,QAAE,eAAe;AACjB,UAAI,CAAC,KAAK,SAAU,MAAK,aAAa,KAAK,MAAM,KAAK,YAAY,CAAC,EAAE,UAAU;AAAA,IACjF,CAAC;AAAA,EACH;AAAA,EAEA,WAAW,mBAA2D;AACpE,UAAM,WAAW,iBAAiB;AAClC,QAAI,kBAAkB,IAAI,cAAc,GAAG;AACzC,WAAK,WAAW,CAAC,KAAK,gBAAgB,KAAK,YAAY,KAAK,KAAK,aAAa,KAAK,MAAM,SAAS;AAAA,IACpG;AAAA,EACF;AAAA,EAEU,aAAa,YAA0B;AAC/C,SAAK;AAAA,MACH,IAAI,YAAY,yBAAyB;AAAA,QACvC,UAAU;AAAA,QACV,SAAS;AAAA,QACT,QAAQ;AAAA,MACV,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEA,SAAS;AACP,WAAO;AAAA,EACT;AACF;AAzCa,SACJ,SAAS;AAAA;AAAA,QAEH,GAAG;AAAA;AAAA;AAAA,QAGH,GAAG;AAAA;AAAA;AANL,WAAN;AAAA,EADN,cAAc,WAAW;AAAA,GACb;","names":[]}
@@ -0,0 +1,46 @@
1
+ import {
2
+ btn,
3
+ dis
4
+ } from "./chunk-4O5F7WV7.js";
5
+ import {
6
+ TestComponent
7
+ } from "./chunk-MLT7V47R.js";
8
+ import {
9
+ __decorateClass
10
+ } from "./chunk-H2JE6IVU.js";
11
+
12
+ // src/lib/qti-test/components/test-end-attempt.ts
13
+ import { css, html } from "lit";
14
+ import { customElement } from "lit/decorators.js";
15
+ var TestEndAttempt = class extends TestComponent {
16
+ _processResponse() {
17
+ const qtiItemEl = this._testElement.querySelector(
18
+ `qti-assessment-item-ref[identifier="${this._testContext.navItemId}"]`
19
+ );
20
+ const qtiAssessmentItemEl = qtiItemEl.assessmentItem;
21
+ qtiAssessmentItemEl.processResponse();
22
+ }
23
+ constructor() {
24
+ super();
25
+ this.addEventListener("click", () => this._processResponse());
26
+ }
27
+ render() {
28
+ return html` <slot></slot> `;
29
+ }
30
+ };
31
+ TestEndAttempt.styles = css`
32
+ :host {
33
+ ${btn};
34
+ }
35
+ :host([disabled]) {
36
+ ${dis};
37
+ }
38
+ `;
39
+ TestEndAttempt = __decorateClass([
40
+ customElement("test-end-attempt")
41
+ ], TestEndAttempt);
42
+
43
+ export {
44
+ TestEndAttempt
45
+ };
46
+ //# sourceMappingURL=chunk-VAPB5TN4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/lib/qti-test/components/test-end-attempt.ts"],"sourcesContent":["import { css, html } from 'lit';\n\nimport { customElement } from 'lit/decorators.js';\nimport type { QtiAssessmentItemRef } from '../core';\nimport * as styles from './styles';\nimport { TestComponent } from './test-component.abstract';\n\n@customElement('test-end-attempt')\nexport class TestEndAttempt extends TestComponent {\n static styles = css`\n :host {\n ${styles.btn};\n }\n :host([disabled]) {\n ${styles.dis};\n }\n `;\n\n _processResponse() {\n const qtiItemEl = this._testElement.querySelector<QtiAssessmentItemRef>(\n `qti-assessment-item-ref[identifier=\"${this._testContext.navItemId}\"]`\n );\n const qtiAssessmentItemEl = qtiItemEl.assessmentItem;\n qtiAssessmentItemEl.processResponse();\n }\n\n constructor() {\n super();\n this.addEventListener('click', () => this._processResponse());\n }\n\n render() {\n return html` <slot></slot> `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'test-end-attempt': TestEndAttempt;\n }\n}\n"],"mappings":";;;;;;;;;;;;AAAA,SAAS,KAAK,YAAY;AAE1B,SAAS,qBAAqB;AAMvB,IAAM,iBAAN,cAA6B,cAAc;AAAA,EAUhD,mBAAmB;AACjB,UAAM,YAAY,KAAK,aAAa;AAAA,MAClC,uCAAuC,KAAK,aAAa,SAAS;AAAA,IACpE;AACA,UAAM,sBAAsB,UAAU;AACtC,wBAAoB,gBAAgB;AAAA,EACtC;AAAA,EAEA,cAAc;AACZ,UAAM;AACN,SAAK,iBAAiB,SAAS,MAAM,KAAK,iBAAiB,CAAC;AAAA,EAC9D;AAAA,EAEA,SAAS;AACP,WAAO;AAAA,EACT;AACF;AA1Ba,eACJ,SAAS;AAAA;AAAA,QAEH,GAAG;AAAA;AAAA;AAAA,QAGH,GAAG;AAAA;AAAA;AANL,iBAAN;AAAA,EADN,cAAc,kBAAkB;AAAA,GACpB;","names":[]}
@@ -0,0 +1,46 @@
1
+ import {
2
+ TestComponent
3
+ } from "./chunk-MLT7V47R.js";
4
+ import {
5
+ btn,
6
+ dis
7
+ } from "./chunk-4O5F7WV7.js";
8
+ import {
9
+ __decorateClass
10
+ } from "./chunk-H2JE6IVU.js";
11
+
12
+ // src/lib/qti-test/components/test-end-attempt.ts
13
+ import { css, html } from "lit";
14
+ import { customElement } from "lit/decorators.js";
15
+ var TestEndAttempt = class extends TestComponent {
16
+ _processResponse() {
17
+ const qtiItemEl = this._testElement.querySelector(
18
+ `qti-assessment-item-ref[identifier="${this._testContext.navItemId}"]`
19
+ );
20
+ const qtiAssessmentItemEl = qtiItemEl.assessmentItem;
21
+ qtiAssessmentItemEl.processResponse();
22
+ }
23
+ constructor() {
24
+ super();
25
+ this.addEventListener("click", () => this._processResponse());
26
+ }
27
+ render() {
28
+ return html` <slot></slot> `;
29
+ }
30
+ };
31
+ TestEndAttempt.styles = css`
32
+ :host {
33
+ ${btn};
34
+ }
35
+ :host([disabled]) {
36
+ ${dis};
37
+ }
38
+ `;
39
+ TestEndAttempt = __decorateClass([
40
+ customElement("test-end-attempt")
41
+ ], TestEndAttempt);
42
+
43
+ export {
44
+ TestEndAttempt
45
+ };
46
+ //# sourceMappingURL=chunk-W4272Q5U.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/lib/qti-test/components/test-end-attempt.ts"],"sourcesContent":["import { css, html } from 'lit';\n\nimport { customElement } from 'lit/decorators.js';\nimport type { QtiAssessmentItemRef } from '../core';\nimport * as styles from './styles';\nimport { TestComponent } from './test-component.abstract';\n\n@customElement('test-end-attempt')\nexport class TestEndAttempt extends TestComponent {\n static styles = css`\n :host {\n ${styles.btn};\n }\n :host([disabled]) {\n ${styles.dis};\n }\n `;\n\n _processResponse() {\n const qtiItemEl = this._testElement.querySelector<QtiAssessmentItemRef>(\n `qti-assessment-item-ref[identifier=\"${this._testContext.navItemId}\"]`\n );\n const qtiAssessmentItemEl = qtiItemEl.assessmentItem;\n qtiAssessmentItemEl.processResponse();\n }\n\n constructor() {\n super();\n this.addEventListener('click', () => this._processResponse());\n }\n\n render() {\n return html` <slot></slot> `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'test-end-attempt': TestEndAttempt;\n }\n}\n"],"mappings":";;;;;;;;;;;;AAAA,SAAS,KAAK,YAAY;AAE1B,SAAS,qBAAqB;AAMvB,IAAM,iBAAN,cAA6B,cAAc;AAAA,EAUhD,mBAAmB;AACjB,UAAM,YAAY,KAAK,aAAa;AAAA,MAClC,uCAAuC,KAAK,aAAa,SAAS;AAAA,IACpE;AACA,UAAM,sBAAsB,UAAU;AACtC,wBAAoB,gBAAgB;AAAA,EACtC;AAAA,EAEA,cAAc;AACZ,UAAM;AACN,SAAK,iBAAiB,SAAS,MAAM,KAAK,iBAAiB,CAAC;AAAA,EAC9D;AAAA,EAEA,SAAS;AACP,WAAO;AAAA,EACT;AACF;AA1Ba,eACJ,SAAS;AAAA;AAAA,QAEH,GAAG;AAAA;AAAA;AAAA,QAGH,GAAG;AAAA;AAAA;AANL,iBAAN;AAAA,EADN,cAAc,kBAAkB;AAAA,GACpB;","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  TestComponent
3
- } from "./chunk-3EU75IUF.js";
3
+ } from "./chunk-MLT7V47R.js";
4
4
  import {
5
5
  watch
6
6
  } from "./chunk-ELDMXTUQ.js";
@@ -32,6 +32,15 @@ var TestView = class extends TestComponent {
32
32
  this._viewOptions = TestView.DEFAULT_VIEW_OPTIONS;
33
33
  }
34
34
  }
35
+ _switchView(view) {
36
+ this.dispatchEvent(
37
+ new CustomEvent("on-test-switch-view", {
38
+ composed: true,
39
+ bubbles: true,
40
+ detail: view
41
+ })
42
+ );
43
+ }
35
44
  render() {
36
45
  return html`
37
46
  <label part="label" for="viewSelect">${this.label}</label>
@@ -69,4 +78,4 @@ TestView = __decorateClass([
69
78
  export {
70
79
  TestView
71
80
  };
72
- //# sourceMappingURL=chunk-A24F75DB.js.map
81
+ //# sourceMappingURL=chunk-WWN5AD6V.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/lib/qti-test/components/test-view.ts"],"sourcesContent":["import { html } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { TestComponent } from './test-component.abstract';\nimport { watch } from '../../decorators/watch';\n\n@customElement('test-view')\nexport class TestView extends TestComponent {\n static DEFAULT_VIEW_OPTIONS = ['author', 'candidate', 'proctor', 'scorer', 'testConstructor', 'tutor'];\n\n /** label accompanying the select view dropdown */\n @property({ type: String })\n label = 'view';\n\n /** The options to display in the dropdown, default: ['author', 'candidate', 'proctor', 'scorer', 'testConstructor', 'tutor'] */\n @property({ type: String, attribute: 'view-options' }) viewOptions;\n @watch('viewOptions', { waitUntilFirstUpdate: true })\n protected _handleViewOptionsChange = () => {\n this.updateViewOptions();\n };\n\n connectedCallback(): void {\n super.connectedCallback();\n this.updateViewOptions();\n }\n\n @state()\n private _viewOptions: string[] = TestView.DEFAULT_VIEW_OPTIONS;\n\n private updateViewOptions() {\n if (this.viewOptions) {\n const options = this.viewOptions.split(',').map(opt => opt.trim());\n this._viewOptions = options.filter(opt => TestView.DEFAULT_VIEW_OPTIONS.includes(opt));\n } else {\n this._viewOptions = TestView.DEFAULT_VIEW_OPTIONS;\n }\n }\n\n protected _switchView(view: string) {\n this.dispatchEvent(\n new CustomEvent('on-test-switch-view', {\n composed: true,\n bubbles: true,\n detail: view\n })\n );\n }\n\n render() {\n return html`\n <label part=\"label\" for=\"viewSelect\">${this.label}</label>\n <select\n part=\"select\"\n id=\"viewSelect\"\n .disabled=${this.disabled}\n @change=${(e: Event) => {\n const el = e.target as HTMLSelectElement;\n this._switchView(el.value);\n }}\n >\n ${this._viewOptions.map(v => html`<option value=\"${v}\" ?selected=${v === this.view}>${v}</option>`)}\n </select>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'test-view': TestView;\n }\n}\n"],"mappings":";;;;;;;;;;;AAAA,SAAS,YAAY;AACrB,SAAS,eAAe,UAAU,aAAa;AAKxC,IAAM,WAAN,cAAuB,cAAc;AAAA,EAArC;AAAA;AAKL,iBAAQ;AAKR,SAAU,2BAA2B,MAAM;AACzC,WAAK,kBAAkB;AAAA,IACzB;AAQA,SAAQ,eAAyB,SAAS;AAAA;AAAA,EAN1C,oBAA0B;AACxB,UAAM,kBAAkB;AACxB,SAAK,kBAAkB;AAAA,EACzB;AAAA,EAKQ,oBAAoB;AAC1B,QAAI,KAAK,aAAa;AACpB,YAAM,UAAU,KAAK,YAAY,MAAM,GAAG,EAAE,IAAI,SAAO,IAAI,KAAK,CAAC;AACjE,WAAK,eAAe,QAAQ,OAAO,SAAO,SAAS,qBAAqB,SAAS,GAAG,CAAC;AAAA,IACvF,OAAO;AACL,WAAK,eAAe,SAAS;AAAA,IAC/B;AAAA,EACF;AAAA,EAEU,YAAY,MAAc;AAClC,SAAK;AAAA,MACH,IAAI,YAAY,uBAAuB;AAAA,QACrC,UAAU;AAAA,QACV,SAAS;AAAA,QACT,QAAQ;AAAA,MACV,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEA,SAAS;AACP,WAAO;AAAA,6CACkC,KAAK,KAAK;AAAA;AAAA;AAAA;AAAA,oBAInC,KAAK,QAAQ;AAAA,kBACf,CAAC,MAAa;AACtB,YAAM,KAAK,EAAE;AACb,WAAK,YAAY,GAAG,KAAK;AAAA,IAC3B,CAAC;AAAA;AAAA,UAEC,KAAK,aAAa,IAAI,OAAK,sBAAsB,CAAC,eAAe,MAAM,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC;AAAA;AAAA;AAAA,EAGzG;AACF;AAzDa,SACJ,uBAAuB,CAAC,UAAU,aAAa,WAAW,UAAU,mBAAmB,OAAO;AAIrG;AAAA,EADC,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GAJf,SAKX;AAGuD;AAAA,EAAtD,SAAS,EAAE,MAAM,QAAQ,WAAW,eAAe,CAAC;AAAA,GAR1C,SAQ4C;AAE7C;AAAA,EADT,MAAM,eAAe,EAAE,sBAAsB,KAAK,CAAC;AAAA,GATzC,SAUD;AAUF;AAAA,EADP,MAAM;AAAA,GAnBI,SAoBH;AApBG,WAAN;AAAA,EADN,cAAc,WAAW;AAAA,GACb;","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  item_default
3
- } from "./chunk-J2SHENRN.js";
3
+ } from "./chunk-NZQKGIJP.js";
4
4
  import {
5
5
  qtiTransformItem
6
6
  } from "./chunk-XDMSEAYC.js";
@@ -104,4 +104,4 @@ export {
104
104
  ItemContainer,
105
105
  QtiItem
106
106
  };
107
- //# sourceMappingURL=chunk-HHVRU3AJ.js.map
107
+ //# sourceMappingURL=chunk-XCHS3RTZ.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  TestComponent
3
- } from "./chunk-3EU75IUF.js";
3
+ } from "./chunk-MLT7V47R.js";
4
4
  import {
5
5
  __decorateClass
6
6
  } from "./chunk-H2JE6IVU.js";
@@ -12,7 +12,7 @@ import { prepareTemplate } from "stampino";
12
12
  var TestPagingButtonsStamp = class extends TestComponent {
13
13
  constructor() {
14
14
  super();
15
- this.maxDisplayedItems = 2;
15
+ this.maxDisplayedItems = 20;
16
16
  this.skipOnCategory = "dep-informational";
17
17
  this._internals.ariaLabel = "pagination";
18
18
  }
@@ -75,4 +75,4 @@ TestPagingButtonsStamp = __decorateClass([
75
75
  export {
76
76
  TestPagingButtonsStamp
77
77
  };
78
- //# sourceMappingURL=chunk-KYAIMBP5.js.map
78
+ //# sourceMappingURL=chunk-YQB6YLNW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/lib/qti-test/components/test-paging-buttons-stamp.ts"],"sourcesContent":["import { html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\nimport { TestComponent } from './test-component.abstract';\nimport { prepareTemplate } from 'stampino';\n\n@customElement('test-paging-buttons-stamp')\nexport class TestPagingButtonsStamp extends TestComponent {\n @property({ type: Number, attribute: 'max-displayed-items' })\n private maxDisplayedItems = 20;\n\n @property({ type: String, attribute: 'skip-on-category' })\n private skipOnCategory = 'dep-informational';\n\n protected createRenderRoot() {\n return this;\n }\n\n constructor() {\n super();\n this._internals.ariaLabel = 'pagination';\n }\n\n render() {\n const items = this._testContext.items.reduce(\n (acc, item) => {\n const isDepInfoItem = item.category?.split(' ').includes(this.skipOnCategory);\n const newIndex = isDepInfoItem ? 'i' : acc.counter++;\n acc.result.push({\n ...item,\n newIndex // Assign the new index, which only increments for non-info items\n });\n return acc;\n },\n { counter: 0, result: [] }\n ).result;\n\n // Get the index of the current item\n const itemIndex = items.findIndex(item => item.identifier === this._testContext.navItemId);\n\n // Calculate the start and end range based on maxDisplayedItems\n const start = Math.max(0, itemIndex - this.maxDisplayedItems);\n const end = Math.min(items.length, itemIndex + this.maxDisplayedItems + 1);\n\n // console.log('start', start, 'end', end);\n // Adjust the items array to only include the clamped range\n const clampedItems = items.slice(start, end);\n\n return html`\n ${clampedItems.map(item => {\n const rawscore = item.variables.find(vr => vr.identifier == 'SCORE');\n const score = parseInt(rawscore?.value?.toString());\n const completionStatus = item.variables.find(v => v.identifier === 'completionStatus')?.value;\n const type = item.category !== this.skipOnCategory ? 'regular' : 'info'; // rounded-full\n const active = this._testContext.navItemId === item.identifier; // !border-sky-600\n const correct =\n this._testContext.view === 'scorer' && type == 'regular' && score !== undefined && !isNaN(score) && score > 0; // bg-green-100 border-green-400\n const incorrect =\n this._testContext.view === 'scorer' &&\n type == 'regular' &&\n score !== undefined &&\n !isNaN(score) &&\n score <= 0; // bg-red-100 border-red-400\n const answered =\n this._testContext.view === 'candidate' &&\n completionStatus === 'completed' &&\n item.category !== this.skipOnCategory; // bg-slate-300 shadow-sm\n\n const computedItem = {\n ...item,\n type,\n active,\n correct,\n incorrect,\n answered\n };\n\n const templateElement = this.firstElementChild as HTMLTemplateElement;\n const myTemplate = prepareTemplate(templateElement);\n return myTemplate({ item: computedItem });\n })}\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'test-paging-buttons-stamp': TestPagingButtonsStamp;\n }\n}\n"],"mappings":";;;;;;;;AAAA,SAAS,YAAY;AACrB,SAAS,eAAe,gBAAgB;AAGxC,SAAS,uBAAuB;AAGzB,IAAM,yBAAN,cAAqC,cAAc;AAAA,EAWxD,cAAc;AACZ,UAAM;AAVR,SAAQ,oBAAoB;AAG5B,SAAQ,iBAAiB;AAQvB,SAAK,WAAW,YAAY;AAAA,EAC9B;AAAA,EAPU,mBAAmB;AAC3B,WAAO;AAAA,EACT;AAAA,EAOA,SAAS;AACP,UAAM,QAAQ,KAAK,aAAa,MAAM;AAAA,MACpC,CAAC,KAAK,SAAS;AACb,cAAM,gBAAgB,KAAK,UAAU,MAAM,GAAG,EAAE,SAAS,KAAK,cAAc;AAC5E,cAAM,WAAW,gBAAgB,MAAM,IAAI;AAC3C,YAAI,OAAO,KAAK;AAAA,UACd,GAAG;AAAA,UACH;AAAA;AAAA,QACF,CAAC;AACD,eAAO;AAAA,MACT;AAAA,MACA,EAAE,SAAS,GAAG,QAAQ,CAAC,EAAE;AAAA,IAC3B,EAAE;AAGF,UAAM,YAAY,MAAM,UAAU,UAAQ,KAAK,eAAe,KAAK,aAAa,SAAS;AAGzF,UAAM,QAAQ,KAAK,IAAI,GAAG,YAAY,KAAK,iBAAiB;AAC5D,UAAM,MAAM,KAAK,IAAI,MAAM,QAAQ,YAAY,KAAK,oBAAoB,CAAC;AAIzE,UAAM,eAAe,MAAM,MAAM,OAAO,GAAG;AAE3C,WAAO;AAAA,QACH,aAAa,IAAI,UAAQ;AACzB,YAAM,WAAW,KAAK,UAAU,KAAK,QAAM,GAAG,cAAc,OAAO;AACnE,YAAM,QAAQ,SAAS,UAAU,OAAO,SAAS,CAAC;AAClD,YAAM,mBAAmB,KAAK,UAAU,KAAK,OAAK,EAAE,eAAe,kBAAkB,GAAG;AACxF,YAAM,OAAO,KAAK,aAAa,KAAK,iBAAiB,YAAY;AACjE,YAAM,SAAS,KAAK,aAAa,cAAc,KAAK;AACpD,YAAM,UACJ,KAAK,aAAa,SAAS,YAAY,QAAQ,aAAa,UAAU,UAAa,CAAC,MAAM,KAAK,KAAK,QAAQ;AAC9G,YAAM,YACJ,KAAK,aAAa,SAAS,YAC3B,QAAQ,aACR,UAAU,UACV,CAAC,MAAM,KAAK,KACZ,SAAS;AACX,YAAM,WACJ,KAAK,aAAa,SAAS,eAC3B,qBAAqB,eACrB,KAAK,aAAa,KAAK;AAEzB,YAAM,eAAe;AAAA,QACnB,GAAG;AAAA,QACH;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAEA,YAAM,kBAAkB,KAAK;AAC7B,YAAM,aAAa,gBAAgB,eAAe;AAClD,aAAO,WAAW,EAAE,MAAM,aAAa,CAAC;AAAA,IAC1C,CAAC,CAAC;AAAA;AAAA,EAEN;AACF;AA1EU;AAAA,EADP,SAAS,EAAE,MAAM,QAAQ,WAAW,sBAAsB,CAAC;AAAA,GADjD,uBAEH;AAGA;AAAA,EADP,SAAS,EAAE,MAAM,QAAQ,WAAW,mBAAmB,CAAC;AAAA,GAJ9C,uBAKH;AALG,yBAAN;AAAA,EADN,cAAc,2BAA2B;AAAA,GAC7B;","names":[]}
@@ -0,0 +1,46 @@
1
+ import {
2
+ btn,
3
+ dis
4
+ } from "./chunk-4O5F7WV7.js";
5
+ import {
6
+ TestComponent
7
+ } from "./chunk-MLT7V47R.js";
8
+ import {
9
+ __decorateClass
10
+ } from "./chunk-H2JE6IVU.js";
11
+
12
+ // src/lib/qti-test/components/test-show-correct-response.ts
13
+ import { css, html } from "lit";
14
+ import { customElement } from "lit/decorators.js";
15
+ var TestShowCorrectResponse = class extends TestComponent {
16
+ _processResponse() {
17
+ const qtiItemEl = this._testElement.querySelector(
18
+ `qti-assessment-item-ref[identifier="${this._testContext.navItemId}"]`
19
+ );
20
+ const qtiAssessmentItemEl = qtiItemEl.assessmentItem;
21
+ qtiAssessmentItemEl.showCorrectResponse(true);
22
+ }
23
+ constructor() {
24
+ super();
25
+ this.addEventListener("click", () => this._processResponse());
26
+ }
27
+ render() {
28
+ return html` <slot></slot> `;
29
+ }
30
+ };
31
+ TestShowCorrectResponse.styles = css`
32
+ :host {
33
+ ${btn};
34
+ }
35
+ :host([disabled]) {
36
+ ${dis};
37
+ }
38
+ `;
39
+ TestShowCorrectResponse = __decorateClass([
40
+ customElement("test-show-correct-response")
41
+ ], TestShowCorrectResponse);
42
+
43
+ export {
44
+ TestShowCorrectResponse
45
+ };
46
+ //# sourceMappingURL=chunk-Z5THRO6Z.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/lib/qti-test/components/test-show-correct-response.ts"],"sourcesContent":["import { css, html } from 'lit';\n\nimport { customElement } from 'lit/decorators.js';\nimport type { QtiAssessmentItemRef } from '../core';\nimport * as styles from './styles';\nimport { TestComponent } from './test-component.abstract';\n\n@customElement('test-show-correct-response')\nexport class TestShowCorrectResponse extends TestComponent {\n static styles = css`\n :host {\n ${styles.btn};\n }\n :host([disabled]) {\n ${styles.dis};\n }\n `;\n\n _processResponse() {\n const qtiItemEl = this._testElement.querySelector<QtiAssessmentItemRef>(\n `qti-assessment-item-ref[identifier=\"${this._testContext.navItemId}\"]`\n );\n const qtiAssessmentItemEl = qtiItemEl.assessmentItem;\n qtiAssessmentItemEl.showCorrectResponse(true);\n }\n\n constructor() {\n super();\n this.addEventListener('click', () => this._processResponse());\n }\n\n render() {\n return html` <slot></slot> `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'test-show-correct-response': TestShowCorrectResponse;\n }\n}\n"],"mappings":";;;;;;;;;;;;AAAA,SAAS,KAAK,YAAY;AAE1B,SAAS,qBAAqB;AAMvB,IAAM,0BAAN,cAAsC,cAAc;AAAA,EAUzD,mBAAmB;AACjB,UAAM,YAAY,KAAK,aAAa;AAAA,MAClC,uCAAuC,KAAK,aAAa,SAAS;AAAA,IACpE;AACA,UAAM,sBAAsB,UAAU;AACtC,wBAAoB,oBAAoB,IAAI;AAAA,EAC9C;AAAA,EAEA,cAAc;AACZ,UAAM;AACN,SAAK,iBAAiB,SAAS,MAAM,KAAK,iBAAiB,CAAC;AAAA,EAC9D;AAAA,EAEA,SAAS;AACP,WAAO;AAAA,EACT;AACF;AA1Ba,wBACJ,SAAS;AAAA;AAAA,QAEH,GAAG;AAAA;AAAA;AAAA,QAGH,GAAG;AAAA;AAAA;AANL,0BAAN;AAAA,EADN,cAAc,4BAA4B;AAAA,GAC9B;","names":[]}