@citolab/qti-components 7.28.0 → 7.28.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cdn/index.global.js +1 -1
- package/cdn/index.js +188 -188
- package/custom-elements.json +91 -1
- package/dist/base.d.ts +2 -2
- package/dist/base.js +5 -1
- package/dist/chunk-3WBG257S.js +697 -0
- package/dist/chunk-3WBG257S.js.map +1 -0
- package/dist/{chunk-Z2SUBRH5.js → chunk-3XV26R5M.js} +6 -1
- package/dist/chunk-3XV26R5M.js.map +1 -0
- package/dist/{chunk-LQZCSHN5.js → chunk-AQ5RJFM6.js} +2 -2
- package/dist/{chunk-N7S3GNUP.js → chunk-FLJAKWXL.js} +2 -2
- package/dist/{chunk-PINGOK2F.js → chunk-HFCZFWSH.js} +27 -48
- package/dist/chunk-HFCZFWSH.js.map +1 -0
- package/dist/{chunk-FK2IVMS3.js → chunk-MPC7LIPC.js} +3 -3
- package/dist/{chunk-YLIYPNMK.js → chunk-REI3AMCZ.js} +2 -2
- package/dist/{chunk-U2FLSHK7.js → chunk-RLTYVS2I.js} +25 -5
- package/dist/chunk-RLTYVS2I.js.map +1 -0
- package/dist/{chunk-F6WP6WEF.js → chunk-SP6S2WMG.js} +2 -2
- package/dist/{chunk-OQ77SE2W.js → chunk-WDO2TRFM.js} +4 -4
- package/dist/elements.js +4 -4
- package/dist/index.d.ts +3 -3
- package/dist/index.js +14 -10
- package/dist/interactions.d.ts +1 -1
- package/dist/interactions.js +3 -3
- package/dist/item.d.ts +7 -0
- package/dist/item.js +4 -4
- package/dist/loader.js +2 -2
- package/dist/processing.d.ts +2 -2
- package/dist/processing.js +2 -2
- package/dist/qti-components-jsx.d.ts +178 -151
- package/dist/{qti-condition-expression-B1BYmCcq.d.ts → qti-condition-expression-Dam-RER6.d.ts} +1 -1
- package/dist/{qti-transform-test-DMx816H0.d.ts → qti-transform-test-DoZaWItm.d.ts} +11 -9
- package/dist/qti.context-CejJMlfZ.d.ts +50 -0
- package/dist/test.d.ts +5 -3
- package/dist/test.js +6 -6
- package/dist/transformers.d.ts +1 -1
- package/dist/transformers.js +1 -1
- package/package.json +6 -6
- package/dist/chunk-BPIDAS3T.js +0 -495
- package/dist/chunk-BPIDAS3T.js.map +0 -1
- package/dist/chunk-PINGOK2F.js.map +0 -1
- package/dist/chunk-U2FLSHK7.js.map +0 -1
- package/dist/chunk-Z2SUBRH5.js.map +0 -1
- package/dist/qti.context-B8PSyIWm.d.ts +0 -14
- /package/dist/{chunk-LQZCSHN5.js.map → chunk-AQ5RJFM6.js.map} +0 -0
- /package/dist/{chunk-N7S3GNUP.js.map → chunk-FLJAKWXL.js.map} +0 -0
- /package/dist/{chunk-FK2IVMS3.js.map → chunk-MPC7LIPC.js.map} +0 -0
- /package/dist/{chunk-YLIYPNMK.js.map → chunk-REI3AMCZ.js.map} +0 -0
- /package/dist/{chunk-F6WP6WEF.js.map → chunk-SP6S2WMG.js.map} +0 -0
- /package/dist/{chunk-OQ77SE2W.js.map → chunk-WDO2TRFM.js.map} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
o as o2
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-FLJAKWXL.js";
|
|
4
4
|
import {
|
|
5
5
|
A,
|
|
6
6
|
E,
|
|
@@ -29,7 +29,7 @@ import {
|
|
|
29
29
|
u,
|
|
30
30
|
v,
|
|
31
31
|
watch
|
|
32
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-3XV26R5M.js";
|
|
33
33
|
import {
|
|
34
34
|
__decorateClass
|
|
35
35
|
} from "./chunk-QXBXORM3.js";
|
|
@@ -9743,4 +9743,4 @@ lit-html/node/directives/ref.js:
|
|
|
9743
9743
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
9744
9744
|
*)
|
|
9745
9745
|
*/
|
|
9746
|
-
//# sourceMappingURL=chunk-
|
|
9746
|
+
//# sourceMappingURL=chunk-MPC7LIPC.js.map
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
r,
|
|
13
13
|
t,
|
|
14
14
|
testContext
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-3XV26R5M.js";
|
|
16
16
|
import {
|
|
17
17
|
__decorateClass,
|
|
18
18
|
__privateAdd,
|
|
@@ -2747,4 +2747,4 @@ export {
|
|
|
2747
2747
|
QtiDelete,
|
|
2748
2748
|
QtiIndex
|
|
2749
2749
|
};
|
|
2750
|
-
//# sourceMappingURL=chunk-
|
|
2750
|
+
//# sourceMappingURL=chunk-REI3AMCZ.js.map
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
item_default,
|
|
3
3
|
m
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-AQ5RJFM6.js";
|
|
5
5
|
import {
|
|
6
6
|
qtiTransformItem
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-3WBG257S.js";
|
|
8
8
|
import {
|
|
9
9
|
T,
|
|
10
10
|
c,
|
|
@@ -14,10 +14,11 @@ import {
|
|
|
14
14
|
i,
|
|
15
15
|
i2,
|
|
16
16
|
n,
|
|
17
|
+
qtiContext,
|
|
17
18
|
r,
|
|
18
19
|
t,
|
|
19
20
|
watch
|
|
20
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-3XV26R5M.js";
|
|
21
22
|
import {
|
|
22
23
|
__decorateClass,
|
|
23
24
|
__privateAdd,
|
|
@@ -35,13 +36,17 @@ var ItemContainer = class extends i2 {
|
|
|
35
36
|
this.itemURL = null;
|
|
36
37
|
this.itemDoc = null;
|
|
37
38
|
this.itemXML = null;
|
|
39
|
+
this.qtiContext = {
|
|
40
|
+
QTI_CONTEXT: { testIdentifier: "", candidateIdentifier: "", environmentIdentifier: "default" }
|
|
41
|
+
};
|
|
38
42
|
/** Template content if provided */
|
|
39
43
|
__privateAdd(this, _templateContent, null);
|
|
40
44
|
}
|
|
41
45
|
async handleItemURLChange() {
|
|
42
46
|
if (!this.itemURL) return;
|
|
43
47
|
try {
|
|
44
|
-
const
|
|
48
|
+
const explicitSeed = this.qtiContext?.QTI_CONTEXT?.seed;
|
|
49
|
+
const api = (await qtiTransformItem().load(this.itemURL)).shuffleInteractions(explicitSeed);
|
|
45
50
|
this.itemDoc = api.htmlDoc();
|
|
46
51
|
} catch (error) {
|
|
47
52
|
console.error("Error loading or parsing XML:", error);
|
|
@@ -94,6 +99,10 @@ __decorateClass([
|
|
|
94
99
|
__decorateClass([
|
|
95
100
|
r()
|
|
96
101
|
], ItemContainer.prototype, "itemXML", 2);
|
|
102
|
+
__decorateClass([
|
|
103
|
+
r(),
|
|
104
|
+
c({ context: qtiContext, subscribe: true })
|
|
105
|
+
], ItemContainer.prototype, "qtiContext", 2);
|
|
97
106
|
__decorateClass([
|
|
98
107
|
watch("itemURL", { waitUntilFirstUpdate: true })
|
|
99
108
|
], ItemContainer.prototype, "handleItemURLChange", 1);
|
|
@@ -411,6 +420,13 @@ var QtiItem = class extends i2 {
|
|
|
411
420
|
__privateAdd(this, _QtiItem_instances);
|
|
412
421
|
__privateAdd(this, _qtiAssessmentItem);
|
|
413
422
|
this.configContext = {};
|
|
423
|
+
this.qtiContext = {
|
|
424
|
+
QTI_CONTEXT: {
|
|
425
|
+
testIdentifier: "",
|
|
426
|
+
candidateIdentifier: "",
|
|
427
|
+
environmentIdentifier: "default"
|
|
428
|
+
}
|
|
429
|
+
};
|
|
414
430
|
// Store event handlers as instance properties
|
|
415
431
|
__privateAdd(this, _onItemContextChanged, __privateMethod(this, _QtiItem_instances, handleItemContextChanged_fn).bind(this));
|
|
416
432
|
__privateAdd(this, _onAssessmentItemConnected, __privateMethod(this, _QtiItem_instances, handleAssessmentItemConnected_fn).bind(this));
|
|
@@ -495,6 +511,10 @@ __decorateClass([
|
|
|
495
511
|
r(),
|
|
496
512
|
e({ context: configContext })
|
|
497
513
|
], QtiItem.prototype, "configContext", 2);
|
|
514
|
+
__decorateClass([
|
|
515
|
+
r(),
|
|
516
|
+
e({ context: qtiContext })
|
|
517
|
+
], QtiItem.prototype, "qtiContext", 2);
|
|
498
518
|
QtiItem = __decorateClass([
|
|
499
519
|
t("qti-item")
|
|
500
520
|
], QtiItem);
|
|
@@ -507,4 +527,4 @@ export {
|
|
|
507
527
|
ItemPrintVariables,
|
|
508
528
|
QtiItem
|
|
509
529
|
};
|
|
510
|
-
//# sourceMappingURL=chunk-
|
|
530
|
+
//# sourceMappingURL=chunk-RLTYVS2I.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../qti-item/src/components/item-container/item-container.ts","../../qti-item/src/components/item-correct-response-mode/item-correct-response-mode.ts","../../qti-item/src/components/styles.ts","../../qti-item/src/components/item-show-candidate-correction/item-show-candidate-correction.ts","../../qti-item/src/components/item-show-correct-response/item-show-correct-response.ts","../../qti-item/src/components/item-print-variables/item-print-variables.ts","../../qti-item/src/components/qti-item/qti-item.ts"],"sourcesContent":["import { consume } from '@lit/context';\nimport { LitElement, html } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { until } from 'lit/directives/until.js';\n\nimport { qtiContext } from '@qti-components/base';\nimport { watch } from '@qti-components/utilities';\nimport { qtiTransformItem } from '@qti-components/transformers';\n\n// eslint-disable-next-line import/no-relative-packages\nimport itemCss from '../../../../qti-theme/src/item.css?inline';\n\nimport type { QtiContext } from '@qti-components/base';\n\n/**\n * `<item-container>` is a custom element designed for hosting the qti-assessment-item.\n * The `qti-assessment-item` will be placed inside the shadow DOM of this element.\n * The element loads the item from the provided URL and renders it inside the shadow DOM.\n *\n * ### Styling\n * Add a class to the element for styling.\n *\n * ```html\n * <qti-item>\n * <item-container class=\"m-4 bg-white\" item-url=\"./path/to/item.xml\"></item-container>\n * </qti-item>\n * ```\n */\n@customElement('item-container')\nexport class ItemContainer extends LitElement {\n /** URL of the item to load */\n @property({ type: String, attribute: 'item-url' })\n itemURL: string = null;\n\n /** A parsed HTML document */\n @state()\n itemDoc: DocumentFragment = null;\n\n /** The raw XML string */\n @state()\n itemXML: string = null;\n\n @state()\n @consume({ context: qtiContext, subscribe: true })\n protected qtiContext: QtiContext = {\n QTI_CONTEXT: { testIdentifier: '', candidateIdentifier: '', environmentIdentifier: 'default' }\n };\n\n /** Template content if provided */\n #templateContent: unknown = null;\n\n @watch('itemURL', { waitUntilFirstUpdate: true })\n protected async handleItemURLChange() {\n if (!this.itemURL) return;\n try {\n const explicitSeed = this.qtiContext?.QTI_CONTEXT?.seed;\n const api = (await qtiTransformItem().load(this.itemURL)).shuffleInteractions(explicitSeed);\n this.itemDoc = api.htmlDoc();\n } catch (error) {\n console.error('Error loading or parsing XML:', error);\n }\n }\n\n @watch('itemXML', { waitUntilFirstUpdate: true })\n protected handleItemXMLChange() {\n if (!this.itemXML) return;\n try {\n this.itemDoc = qtiTransformItem().parse(this.itemXML).htmlDoc();\n } catch (error) {\n console.error('Error parsing XML:', error);\n }\n }\n\n override async connectedCallback(): Promise<void> {\n super.connectedCallback();\n this.#initializeTemplateContent();\n this.#applyStyles();\n if (this.itemURL) {\n this.handleItemURLChange();\n }\n if (this.itemXML) {\n this.handleItemXMLChange();\n }\n }\n\n #initializeTemplateContent() {\n const template = this.querySelector('template') as HTMLTemplateElement;\n this.#templateContent = template ? template.content : html``;\n }\n\n #applyStyles() {\n const sheet = new CSSStyleSheet();\n sheet.replaceSync(itemCss);\n this.shadowRoot.adoptedStyleSheets = [sheet];\n }\n\n override render() {\n return html`\n ${this.#templateContent}\n <slot></slot>\n ${until(this.itemDoc, html`<span>Loading...</span>`)}\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'item-container': ItemContainer;\n }\n}\n","import { html, LitElement } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { consume } from '@lit/context';\n\nimport { configContext } from '@qti-components/base';\n\nimport type { ConfigContext, CorrectResponseMode } from '@qti-components/base';\n\n@customElement('item-correct-response-mode')\nexport class ItemCorrectResponseMode extends LitElement {\n @consume({ context: configContext, subscribe: true })\n private itemContext: ConfigContext;\n\n @property({ type: String })\n label = 'Correct response mode';\n\n @state()\n private _options = {\n internal: 'Internal',\n full: 'Full (copy)'\n };\n\n #switchMode(view: CorrectResponseMode) {\n this.dispatchEvent(\n new CustomEvent('item-switch-correct-response-mode', {\n detail: view,\n bubbles: true\n })\n );\n }\n\n override render() {\n return html`\n <label part=\"label\" for=\"modeSelect\">${this.label}</label>\n <select\n part=\"select\"\n id=\"modeSelect\"\n @change=${(e: Event) => {\n const el = e.target as HTMLSelectElement;\n this.#switchMode(el.value as CorrectResponseMode);\n }}\n >\n ${Object.keys(this._options).map(\n value =>\n html`<option value=\"${value}\" ?selected=${value === this.itemContext?.correctResponseMode}>\n ${this._options[value as keyof typeof this._options]}\n </option>`\n )}\n </select>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'item-correct-response-mode': ItemCorrectResponseMode;\n }\n}\n","import { css } from 'lit';\n\nexport const form = css`\n display: inline-flex;\n align-items: center;\n cursor: pointer;\n padding: 0.5rem 1rem;\n border-radius: 0.25rem;\n user-select: none;\n`;\n\nexport const btn = css`\n background-color: lightgray;\n ${form};\n`;\n\nexport const dis = css`\n cursor: not-allowed;\n opacity: 0.8;\n`;\n\nexport const ind = css`\n ${form};\n border: 1px solid gray;\n`;\n","import { css, html, LitElement } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { consume } from '@lit/context';\n\nimport { computedItemContext } from '@qti-components/base';\n\nimport * as styles from '../styles';\n\nimport type { ComputedItemContext } from '@qti-components/base';\n\n@customElement('item-show-candidate-correction')\nexport class ItemShowCandidateCorrection extends LitElement {\n @consume({ context: computedItemContext, subscribe: true })\n public computedContext?: ComputedItemContext;\n\n static override styles = css`\n :host {\n ${styles.btn};\n }\n :host([disabled]) {\n ${styles.dis};\n }\n `;\n\n @property({ type: Boolean, reflect: true }) shown = false;\n @property({ type: Boolean, reflect: true }) disabled = false; // Reflects to `disabled` attribute\n @property({ type: String }) showCandidateCorrectionText = 'Show candidate correction';\n @property({ type: String }) hideCandidateCorrectionText = 'Hide candidate correction';\n @property({ type: String }) noCorrectResponseText = 'No correct response specified';\n\n #hasCorrectResponse = false; // correct response is removed on certain point\n #previousActiveItem = ''; // Store previous active item reference\n\n constructor() {\n super();\n }\n\n override updated() {\n if (!this.#hasCorrectResponse || this.#previousActiveItem !== this.computedContext?.identifier) {\n this.#previousActiveItem = this.computedContext?.identifier;\n const containsCorrectResponse = !!this.computedContext?.variables.some(v => (v as any)['correctResponse']);\n const containsMapping = !!this.computedContext?.variables.some(v => {\n return (v as any)['mapping']?.mapEntries?.length > 0 || (v as any)['areaMapping']?.areaMapEntries?.length > 0;\n });\n this.#hasCorrectResponse = containsCorrectResponse || containsMapping;\n }\n this.disabled = !this.#hasCorrectResponse;\n }\n\n #toggleState() {\n if (this.disabled) return; // Prevent toggle if disabled\n\n this.dispatchEvent(\n new CustomEvent('item-show-candidate-correction', {\n detail: !this.shown,\n bubbles: true\n })\n );\n }\n\n #getDisplayedText(): string {\n return this.disabled\n ? this.noCorrectResponseText\n : this.shown\n ? this.hideCandidateCorrectionText\n : this.showCandidateCorrectionText;\n }\n\n override render() {\n return html` <div @click=\"${this.#toggleState}\">${this.#getDisplayedText()}</div> `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'item-show-candidate-correction': ItemShowCandidateCorrection;\n }\n}\n","import { css, html, LitElement } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { consume } from '@lit/context';\n\nimport { computedItemContext } from '@qti-components/base';\n\nimport * as styles from '../styles';\n\nimport type { ComputedItemContext } from '@qti-components/base';\n\n@customElement('item-show-correct-response')\nexport class ItemShowCorrectResponse extends LitElement {\n @consume({ context: computedItemContext, subscribe: true })\n public computedContext?: ComputedItemContext;\n\n static override styles = css`\n :host {\n ${styles.btn};\n }\n :host([disabled]) {\n ${styles.dis};\n }\n `;\n\n @property({ type: Boolean, reflect: true }) shown = false;\n @property({ type: Boolean, reflect: true }) disabled = false; // Reflects to `disabled` attribute\n @property({ type: String }) showCorrectText = 'Show correct response';\n @property({ type: String }) hideCorrectText = 'Hide correct response';\n @property({ type: String }) noCorrectResponseText = 'No correct response specified';\n\n #hasCorrectResponse = false; // correct response is removed on certain point\n #previousActiveItem = ''; // Store previous active item reference\n\n override updated() {\n if (!this.#hasCorrectResponse || this.#previousActiveItem !== this.computedContext?.identifier) {\n this.#previousActiveItem = this.computedContext?.identifier;\n const containsCorrectResponse = !!this.computedContext?.variables.some(v => (v as any)['correctResponse']);\n const containsMapping = !!this.computedContext?.variables.some(v => {\n return (v as any)['mapping']?.mapEntries?.length > 0 || (v as any)['areaMapping']?.areaMapEntries?.length > 0;\n });\n this.#hasCorrectResponse = containsCorrectResponse || containsMapping;\n }\n this.disabled = !this.#hasCorrectResponse;\n }\n\n #toggleState() {\n if (this.disabled) return; // Prevent toggle if disabled\n\n this.dispatchEvent(\n new CustomEvent('item-show-correct-response', {\n detail: !this.shown,\n bubbles: true\n })\n );\n }\n\n #getDisplayedText(): string {\n return this.disabled ? this.noCorrectResponseText : this.shown ? this.hideCorrectText : this.showCorrectText;\n }\n\n override render() {\n return html` <div @click=\"${this.#toggleState}\">${this.#getDisplayedText()}</div> `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'item-show-correct-response': ItemShowCorrectResponse;\n }\n}\n","import { consume } from '@lit/context';\nimport { css, html, LitElement } from 'lit';\nimport { customElement } from 'lit/decorators.js';\n\nimport { computedItemContext } from '@qti-components/base';\n\nimport type { ResponseVariable } from '@qti-components/base';\nimport type { ComputedItemContext } from '@qti-components/base';\n\n@customElement('item-print-variables')\nexport class ItemPrintVariables extends LitElement {\n @consume({ context: computedItemContext, subscribe: true })\n protected computedContext?: ComputedItemContext;\n\n static override styles = css`\n table {\n width: 100%;\n border-collapse: collapse;\n margin: 20px 0;\n font-size: 14px;\n text-align: left;\n }\n th,\n td {\n border: 1px solid #ddd;\n padding: 8px;\n }\n th {\n background-color: #f4f4f4;\n font-weight: bold;\n }\n h3 {\n margin-top: 20px;\n font-size: 16px;\n }\n `;\n\n override render() {\n const activeItem = this.computedContext;\n\n if (!activeItem || !activeItem.variables) return html``;\n\n const responseVariables: ResponseVariable[] = activeItem.variables.filter(v => v.type === 'response');\n const outcomeVariables = activeItem.variables.filter(v => v.type === 'outcome');\n\n const renderTable = (variables: ResponseVariable[], title: string) => html`\n <h3>${title}</h3>\n <table>\n <thead>\n <tr>\n <th>Identifier</th>\n <th>Value</th>\n <th>Cardinality</th>\n <th>Base Type</th>\n <th>Correct Response / Mappings</th>\n </tr>\n </thead>\n <tbody>\n ${variables.map(v => {\n const correctResponse = v.correctResponse\n ? Array.isArray(v.correctResponse)\n ? v.correctResponse.join(', ')\n : v.correctResponse\n : '';\n\n const mapEntries = v.mapping?.mapEntries?.map(m => `${m.mapKey}=${m.mappedValue}pt`).join(', ') || '';\n\n const areaMapEntries =\n v.areaMapping?.areaMapEntries?.map(m => `${m.shape}(${m.coords})=${m.mappedValue}pt`).join(', ') || '';\n\n return html`\n <tr>\n <td>${v.identifier}</td>\n <td>${Array.isArray(v.value) ? v.value.join(', ') : v.value}</td>\n <td>${v.cardinality}</td>\n <td>${v.baseType}</td>\n <td>${correctResponse || mapEntries || areaMapEntries}</td>\n </tr>\n `;\n })}\n </tbody>\n </table>\n `;\n\n return html`\n ${renderTable(responseVariables, 'Response Variables')} ${renderTable(outcomeVariables, 'Outcome Variables')}\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'item-print-variables': ItemPrintVariables;\n }\n}\n","import { provide } from '@lit/context';\nimport { html, LitElement } from 'lit';\nimport { customElement, state } from 'lit/decorators.js';\n\nimport { computedItemContext } from '@qti-components/base';\nimport { configContext } from '@qti-components/base';\nimport { qtiContext } from '@qti-components/base';\n\nimport type { QtiAssessmentItem } from '@qti-components/elements';\nimport type { ConfigContext, CorrectResponseMode } from '@qti-components/base';\nimport type { QtiContext } from '@qti-components/base';\nimport type { ItemContext } from '@qti-components/base';\nimport type { VariableDeclaration } from '@qti-components/base';\nimport type { ComputedItemContext } from '@qti-components/base';\n\n/**\n * `<qti-item>` is a custom element designed for rendering a single `qti-assessment-item`.\n * It can also host some functionalities to interact with the item like scoring, showing feedback, etc.\n * Placing a mandatory `<item-container>` inside '<qti-item>' will load or parse the item and render it.\n * See `<item-container>` for more details.\n *\n * ```html\n * <qti-item>\n * <item-container class=\"m-4 bg-white\" item-url=\"./path/to/item.xml\"></item-container>\n * </qti-item>\n * ```\n */\n@customElement('qti-item')\nexport class QtiItem extends LitElement {\n @state()\n @provide({ context: computedItemContext })\n public computedContext: ComputedItemContext;\n #qtiAssessmentItem?: QtiAssessmentItem;\n\n @state()\n @provide({ context: configContext })\n public configContext: ConfigContext = {};\n\n /**\n * Provided so that descendants (e.g. `<item-container>`) can read the QTI runtime\n * context for standalone item delivery, including the optional shuffle `seed`.\n */\n @state()\n @provide({ context: qtiContext })\n public qtiContext: QtiContext = {\n QTI_CONTEXT: {\n testIdentifier: '',\n candidateIdentifier: '',\n environmentIdentifier: 'default'\n }\n };\n\n // Store event handlers as instance properties\n #onItemContextChanged = this.#handleItemContextChanged.bind(this);\n #onAssessmentItemConnected = this.#handleAssessmentItemConnected.bind(this);\n\n #onHandleShowCorrectResponse = this.#handleShowCorrectResponse.bind(this);\n #onHandleShowCandidateCorrection = this.#handleShowCandidateCorrection.bind(this);\n #onHandleSwitchCorrectResponseMode = this.#handleSwitchCorrectResponseMode.bind(this);\n\n constructor() {\n super();\n this.addEventListener('qti-item-context-updated', this.#onItemContextChanged);\n this.addEventListener('qti-assessment-item-connected', this.#onAssessmentItemConnected);\n this.addEventListener('item-show-correct-response', this.#onHandleShowCorrectResponse);\n this.addEventListener('item-show-candidate-correction', this.#onHandleShowCandidateCorrection);\n this.addEventListener('item-switch-correct-response-mode', this.#onHandleSwitchCorrectResponseMode);\n }\n\n #handleItemContextChanged(e: CustomEvent<{ itemContext: ItemContext }>) {\n this.#updateItemVariablesInTestContext(e.detail.itemContext.identifier, e.detail?.itemContext?.variables || []);\n }\n\n #handleAssessmentItemConnected(e: CustomEvent<QtiAssessmentItem>) {\n const fullVariables = (e.detail as any)._context.variables;\n this.#qtiAssessmentItem = e.detail;\n this.computedContext =\n this.computedContext?.identifier === this.#qtiAssessmentItem.identifier\n ? { ...this.computedContext, title: this.#qtiAssessmentItem.title }\n : ({\n identifier: this.#qtiAssessmentItem.identifier,\n title: this.#qtiAssessmentItem.title,\n adaptive: this.#qtiAssessmentItem.getAttribute('adaptive')?.toLowerCase() === 'true' || false,\n variables: fullVariables,\n correctResponseMode: 'internal'\n } as ComputedItemContext);\n this.#updateItemVariablesInTestContext(this.#qtiAssessmentItem.identifier, fullVariables || []);\n }\n\n #handleShowCorrectResponse(e: CustomEvent<boolean>) {\n if (this.#qtiAssessmentItem) {\n this.#qtiAssessmentItem.showCorrectResponse(e.detail);\n }\n }\n\n #handleShowCandidateCorrection(e: CustomEvent<boolean>) {\n if (this.#qtiAssessmentItem) {\n this.#qtiAssessmentItem.showCandidateCorrection(e.detail);\n }\n }\n\n #handleSwitchCorrectResponseMode(e: CustomEvent<CorrectResponseMode>) {\n // Switch off the correct response first\n this.#handleShowCorrectResponse(new CustomEvent('item-show-correct-response', { detail: false, bubbles: true }));\n\n this.configContext = {\n ...this.configContext,\n correctResponseMode: e.detail\n };\n }\n\n #updateItemVariablesInTestContext(\n identifier: string,\n variables: readonly VariableDeclaration<string | string[] | null>[]\n ): void {\n const rawscore = variables?.find(vr => vr.identifier == 'SCORE')?.value;\n const score = parseFloat(rawscore?.toString());\n const completionStatus = variables?.find(v => v.identifier === 'completionStatus')?.value;\n\n const correct = score !== undefined && !isNaN(score) && score > 0;\n const incorrect = score !== undefined && !isNaN(score) && score <= 0;\n const completed = completionStatus === 'completed';\n this.computedContext = {\n ...this.computedContext,\n identifier,\n correct,\n incorrect,\n completed,\n variables\n };\n }\n\n override render() {\n return html`<slot></slot>`;\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n this.removeEventListener('qti-item-context-changed', this.#onItemContextChanged);\n this.removeEventListener('qti-assessment-item-connected', this.#onAssessmentItemConnected);\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'qti-item': QtiItem;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AA6BO,IAAM,gBAAN,cAA4BA,GAAW;AAAA,EAAvC;AAAA;AAAA;AAGL,mBAAkB;AAIlB,mBAA4B;AAI5B,mBAAkB;AAIlB,SAAU,aAAyB;AAAA,MACjC,aAAa,EAAE,gBAAgB,IAAI,qBAAqB,IAAI,uBAAuB,UAAU;AAAA,IAC/F;AAGA;AAAA,yCAA4B;AAAA;AAAA,EAG5B,MAAgB,sBAAsB;AACpC,QAAI,CAAC,KAAK,QAAS;AACnB,QAAI;AACF,YAAM,eAAe,KAAK,YAAY,aAAa;AACnD,YAAM,OAAO,MAAM,iBAAiB,EAAE,KAAK,KAAK,OAAO,GAAG,oBAAoB,YAAY;AAC1F,WAAK,UAAU,IAAI,QAAQ;AAAA,IAC7B,SAAS,OAAO;AACd,cAAQ,MAAM,iCAAiC,KAAK;AAAA,IACtD;AAAA,EACF;AAAA,EAGU,sBAAsB;AAC9B,QAAI,CAAC,KAAK,QAAS;AACnB,QAAI;AACF,WAAK,UAAU,iBAAiB,EAAE,MAAM,KAAK,OAAO,EAAE,QAAQ;AAAA,IAChE,SAAS,OAAO;AACd,cAAQ,MAAM,sBAAsB,KAAK;AAAA,IAC3C;AAAA,EACF;AAAA,EAEA,MAAe,oBAAmC;AAChD,UAAM,kBAAkB;AACxB,0BAAK,wDAAL;AACA,0BAAK,0CAAL;AACA,QAAI,KAAK,SAAS;AAChB,WAAK,oBAAoB;AAAA,IAC3B;AACA,QAAI,KAAK,SAAS;AAChB,WAAK,oBAAoB;AAAA,IAC3B;AAAA,EACF;AAAA,EAaS,SAAS;AAChB,WAAO;AAAA,QACH,mBAAK,iBAAgB;AAAA;AAAA,QAErB,EAAM,KAAK,SAAS,0BAA6B,CAAC;AAAA;AAAA,EAExD;AACF;AAtDE;AApBK;AAwDL,+BAA0B,WAAG;AAC3B,QAAM,WAAW,KAAK,cAAc,UAAU;AAC9C,qBAAK,kBAAmB,WAAW,SAAS,UAAU;AACxD;AAEA,iBAAY,WAAG;AACb,QAAM,QAAQ,IAAI,cAAc;AAChC,QAAM,YAAY,YAAO;AACzB,OAAK,WAAW,qBAAqB,CAAC,KAAK;AAC7C;AA9DA;AAAA,EADC,EAAS,EAAE,MAAM,QAAQ,WAAW,WAAW,CAAC;AAAA,GAFtC,cAGX;AAIA;AAAA,EADC,EAAM;AAAA,GANI,cAOX;AAIA;AAAA,EADC,EAAM;AAAA,GAVI,cAWX;AAIU;AAAA,EAFT,EAAM;AAAA,EACN,EAAQ,EAAE,SAAS,YAAY,WAAW,KAAK,CAAC;AAAA,GAdtC,cAeD;AAQM;AAAA,EADf,MAAM,WAAW,EAAE,sBAAsB,KAAK,CAAC;AAAA,GAtBrC,cAuBK;AAYN;AAAA,EADT,MAAM,WAAW,EAAE,sBAAsB,KAAK,CAAC;AAAA,GAlCrC,cAmCD;AAnCC,gBAAN;AAAA,EADN,EAAc,gBAAgB;AAAA,GAClB;;;AC7Bb;AASO,IAAM,0BAAN,cAAsCC,GAAW;AAAA,EAAjD;AAAA;AAAA;AAKL,iBAAQ;AAGR,SAAQ,WAAW;AAAA,MACjB,UAAU;AAAA,MACV,MAAM;AAAA,IACR;AAAA;AAAA,EAWS,SAAS;AAChB,WAAO;AAAA,6CACkC,KAAK,KAAK;AAAA;AAAA;AAAA;AAAA,kBAIrC,CAACC,OAAa;AACtB,YAAM,KAAKA,GAAE;AACb,4BAAK,mDAAL,WAAiB,GAAG;AAAA,IACtB,CAAC;AAAA;AAAA,UAEC,OAAO,KAAK,KAAK,QAAQ,EAAE;AAAA,MAC3B,WACE,mBAAsB,KAAK,eAAe,UAAU,KAAK,aAAa,mBAAmB;AAAA,gBACrF,KAAK,SAAS,KAAmC,CAAC;AAAA;AAAA,IAE1D,CAAC;AAAA;AAAA;AAAA,EAGP;AACF;AA1CO;AAaL,gBAAW,SAAC,MAA2B;AACrC,OAAK;AAAA,IACH,IAAI,YAAY,qCAAqC;AAAA,MACnD,QAAQ;AAAA,MACR,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACF;AAlBQ;AAAA,EADP,EAAQ,EAAE,SAAS,eAAe,WAAW,KAAK,CAAC;AAAA,GADzC,wBAEH;AAGR;AAAA,EADC,EAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GAJf,wBAKX;AAGQ;AAAA,EADP,EAAM;AAAA,GAPI,wBAQH;AARG,0BAAN;AAAA,EADN,EAAc,4BAA4B;AAAA,GAC9B;;;ACPN,IAAM,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASb,IAAM,MAAM;AAAA;AAAA,IAEf,IAAI;AAAA;AAGD,IAAM,MAAM;AAAA;AAAA;AAAA;AAKZ,IAAM,MAAM;AAAA,IACf,IAAI;AAAA;AAAA;;;ACtBR;AAWO,IAAM,8BAAN,cAA0CC,GAAW;AAAA;AAAA,EAsB1D,cAAc;AACZ,UAAM;AAvBH;AAauC,iBAAQ;AACR,oBAAW;AAC3B,uCAA8B;AAC9B,uCAA8B;AAC9B,iCAAwB;AAEpD,4CAAsB;AACtB;AAAA,4CAAsB;AAAA,EAItB;AAAA,EAES,UAAU;AACjB,QAAI,CAAC,mBAAK,wBAAuB,mBAAK,yBAAwB,KAAK,iBAAiB,YAAY;AAC9F,yBAAK,qBAAsB,KAAK,iBAAiB;AACjD,YAAM,0BAA0B,CAAC,CAAC,KAAK,iBAAiB,UAAU,KAAK,OAAM,EAAU,iBAAiB,CAAC;AACzG,YAAM,kBAAkB,CAAC,CAAC,KAAK,iBAAiB,UAAU,KAAK,OAAK;AAClE,eAAQ,EAAU,SAAS,GAAG,YAAY,SAAS,KAAM,EAAU,aAAa,GAAG,gBAAgB,SAAS;AAAA,MAC9G,CAAC;AACD,yBAAK,qBAAsB,2BAA2B;AAAA,IACxD;AACA,SAAK,WAAW,CAAC,mBAAK;AAAA,EACxB;AAAA,EAqBS,SAAS;AAChB,WAAO,kBAAqB,sBAAK,uDAAY,KAAK,sBAAK,6DAAL,UAAwB;AAAA,EAC5E;AACF;AAzCE;AACA;AApBK;AAsCL,iBAAY,WAAG;AACb,MAAI,KAAK,SAAU;AAEnB,OAAK;AAAA,IACH,IAAI,YAAY,kCAAkC;AAAA,MAChD,QAAQ,CAAC,KAAK;AAAA,MACd,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACF;AAEA,sBAAiB,WAAW;AAC1B,SAAO,KAAK,WACR,KAAK,wBACL,KAAK,QACH,KAAK,8BACL,KAAK;AACb;AAvDW,4BAIK,SAAS;AAAA;AAAA,QAEZ,GAAG;AAAA;AAAA;AAAA,QAGH,GAAG;AAAA;AAAA;AAPT;AAAA,EADN,EAAQ,EAAE,SAAS,qBAAqB,WAAW,KAAK,CAAC;AAAA,GAD/C,4BAEJ;AAWqC;AAAA,EAA3C,EAAS,EAAE,MAAM,SAAS,SAAS,KAAK,CAAC;AAAA,GAb/B,4BAaiC;AACA;AAAA,EAA3C,EAAS,EAAE,MAAM,SAAS,SAAS,KAAK,CAAC;AAAA,GAd/B,4BAciC;AAChB;AAAA,EAA3B,EAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GAff,4BAeiB;AACA;AAAA,EAA3B,EAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GAhBf,4BAgBiB;AACA;AAAA,EAA3B,EAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GAjBf,4BAiBiB;AAjBjB,8BAAN;AAAA,EADN,EAAc,gCAAgC;AAAA,GAClC;;;ACXb,IAAAC,sBAAAC,sBAAA,oCAAAC,iBAAAC;AAWO,IAAM,0BAAN,cAAsCC,GAAW;AAAA,EAAjD;AAAA;AAAA;AAauC,iBAAQ;AACR,oBAAW;AAC3B,2BAAkB;AAClB,2BAAkB;AAClB,iCAAwB;AAEpD,uBAAAJ,sBAAsB;AACtB;AAAA,uBAAAC,sBAAsB;AAAA;AAAA;AAAA,EAEb,UAAU;AACjB,QAAI,CAAC,mBAAKD,yBAAuB,mBAAKC,0BAAwB,KAAK,iBAAiB,YAAY;AAC9F,yBAAKA,sBAAsB,KAAK,iBAAiB;AACjD,YAAM,0BAA0B,CAAC,CAAC,KAAK,iBAAiB,UAAU,KAAK,OAAM,EAAU,iBAAiB,CAAC;AACzG,YAAM,kBAAkB,CAAC,CAAC,KAAK,iBAAiB,UAAU,KAAK,OAAK;AAClE,eAAQ,EAAU,SAAS,GAAG,YAAY,SAAS,KAAM,EAAU,aAAa,GAAG,gBAAgB,SAAS;AAAA,MAC9G,CAAC;AACD,yBAAKD,sBAAsB,2BAA2B;AAAA,IACxD;AACA,SAAK,WAAW,CAAC,mBAAKA;AAAA,EACxB;AAAA,EAiBS,SAAS;AAChB,WAAO,kBAAqB,sBAAK,oCAAAE,gBAAY,KAAK,sBAAK,oCAAAC,sBAAL,UAAwB;AAAA,EAC5E;AACF;AAjCEH,uBAAA;AACAC,uBAAA;AApBK;AAkCLC,kBAAY,WAAG;AACb,MAAI,KAAK,SAAU;AAEnB,OAAK;AAAA,IACH,IAAI,YAAY,8BAA8B;AAAA,MAC5C,QAAQ,CAAC,KAAK;AAAA,MACd,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACF;AAEAC,uBAAiB,WAAW;AAC1B,SAAO,KAAK,WAAW,KAAK,wBAAwB,KAAK,QAAQ,KAAK,kBAAkB,KAAK;AAC/F;AA/CW,wBAIK,SAAS;AAAA;AAAA,QAEZ,GAAG;AAAA;AAAA;AAAA,QAGH,GAAG;AAAA;AAAA;AAPT;AAAA,EADN,EAAQ,EAAE,SAAS,qBAAqB,WAAW,KAAK,CAAC;AAAA,GAD/C,wBAEJ;AAWqC;AAAA,EAA3C,EAAS,EAAE,MAAM,SAAS,SAAS,KAAK,CAAC;AAAA,GAb/B,wBAaiC;AACA;AAAA,EAA3C,EAAS,EAAE,MAAM,SAAS,SAAS,KAAK,CAAC;AAAA,GAd/B,wBAciC;AAChB;AAAA,EAA3B,EAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GAff,wBAeiB;AACA;AAAA,EAA3B,EAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GAhBf,wBAgBiB;AACA;AAAA,EAA3B,EAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GAjBf,wBAiBiB;AAjBjB,0BAAN;AAAA,EADN,EAAc,4BAA4B;AAAA,GAC9B;;;ACDN,IAAM,qBAAN,cAAiCE,GAAW;AAAA,EA2BxC,SAAS;AAChB,UAAM,aAAa,KAAK;AAExB,QAAI,CAAC,cAAc,CAAC,WAAW,UAAW,QAAO;AAEjD,UAAM,oBAAwC,WAAW,UAAU,OAAO,OAAK,EAAE,SAAS,UAAU;AACpG,UAAM,mBAAmB,WAAW,UAAU,OAAO,OAAK,EAAE,SAAS,SAAS;AAE9E,UAAM,cAAc,CAAC,WAA+B,UAAkB;AAAA,YAC9D,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAYL,UAAU,IAAI,OAAK;AACnB,YAAM,kBAAkB,EAAE,kBACtB,MAAM,QAAQ,EAAE,eAAe,IAC7B,EAAE,gBAAgB,KAAK,IAAI,IAC3B,EAAE,kBACJ;AAEJ,YAAM,aAAa,EAAE,SAAS,YAAY,IAAI,CAAAC,OAAK,GAAGA,GAAE,MAAM,IAAIA,GAAE,WAAW,IAAI,EAAE,KAAK,IAAI,KAAK;AAEnG,YAAM,iBACJ,EAAE,aAAa,gBAAgB,IAAI,CAAAA,OAAK,GAAGA,GAAE,KAAK,IAAIA,GAAE,MAAM,KAAKA,GAAE,WAAW,IAAI,EAAE,KAAK,IAAI,KAAK;AAEtG,aAAO;AAAA;AAAA,sBAEG,EAAE,UAAU;AAAA,sBACZ,MAAM,QAAQ,EAAE,KAAK,IAAI,EAAE,MAAM,KAAK,IAAI,IAAI,EAAE,KAAK;AAAA,sBACrD,EAAE,WAAW;AAAA,sBACb,EAAE,QAAQ;AAAA,sBACV,mBAAmB,cAAc,cAAc;AAAA;AAAA;AAAA,IAG3D,CAAC,CAAC;AAAA;AAAA;AAAA;AAKR,WAAO;AAAA,QACH,YAAY,mBAAmB,oBAAoB,CAAC,IAAI,YAAY,kBAAkB,mBAAmB,CAAC;AAAA;AAAA,EAEhH;AACF;AA9Ea,mBAIK,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAFf;AAAA,EADT,EAAQ,EAAE,SAAS,qBAAqB,WAAW,KAAK,CAAC;AAAA,GAD/C,mBAED;AAFC,qBAAN;AAAA,EADN,EAAc,sBAAsB;AAAA,GACxB;;;ACVb;AA4BO,IAAM,UAAN,cAAsBC,GAAW;AAAA,EAgCtC,cAAc;AACZ,UAAM;AAjCH;AAIL;AAIA,SAAO,gBAA+B,CAAC;AAQvC,SAAO,aAAyB;AAAA,MAC9B,aAAa;AAAA,QACX,gBAAgB;AAAA,QAChB,qBAAqB;AAAA,QACrB,uBAAuB;AAAA,MACzB;AAAA,IACF;AAGA;AAAA,8CAAwB,sBAAK,iDAA0B,KAAK,IAAI;AAChE,mDAA6B,sBAAK,sDAA+B,KAAK,IAAI;AAE1E,qDAA+B,sBAAK,kDAA2B,KAAK,IAAI;AACxE,yDAAmC,sBAAK,sDAA+B,KAAK,IAAI;AAChF,2DAAqC,sBAAK,wDAAiC,KAAK,IAAI;AAIlF,SAAK,iBAAiB,4BAA4B,mBAAK,sBAAqB;AAC5E,SAAK,iBAAiB,iCAAiC,mBAAK,2BAA0B;AACtF,SAAK,iBAAiB,8BAA8B,mBAAK,6BAA4B;AACrF,SAAK,iBAAiB,kCAAkC,mBAAK,iCAAgC;AAC7F,SAAK,iBAAiB,qCAAqC,mBAAK,mCAAkC;AAAA,EACpG;AAAA,EAiES,SAAS;AAChB,WAAO;AAAA,EACT;AAAA,EAES,uBAAuB;AAC9B,UAAM,qBAAqB;AAC3B,SAAK,oBAAoB,4BAA4B,mBAAK,sBAAqB;AAC/E,SAAK,oBAAoB,iCAAiC,mBAAK,2BAA0B;AAAA,EAC3F;AACF;AA7GE;AAqBA;AACA;AAEA;AACA;AACA;AA9BK;AAyCL,8BAAyB,SAACC,IAA8C;AACtE,wBAAK,yDAAL,WAAuCA,GAAE,OAAO,YAAY,YAAYA,GAAE,QAAQ,aAAa,aAAa,CAAC;AAC/G;AAEA,mCAA8B,SAACA,IAAmC;AAChE,QAAM,gBAAiBA,GAAE,OAAe,SAAS;AACjD,qBAAK,oBAAqBA,GAAE;AAC5B,OAAK,kBACH,KAAK,iBAAiB,eAAe,mBAAK,oBAAmB,aACzD,EAAE,GAAG,KAAK,iBAAiB,OAAO,mBAAK,oBAAmB,MAAM,IAC/D;AAAA,IACC,YAAY,mBAAK,oBAAmB;AAAA,IACpC,OAAO,mBAAK,oBAAmB;AAAA,IAC/B,UAAU,mBAAK,oBAAmB,aAAa,UAAU,GAAG,YAAY,MAAM,UAAU;AAAA,IACxF,WAAW;AAAA,IACX,qBAAqB;AAAA,EACvB;AACN,wBAAK,yDAAL,WAAuC,mBAAK,oBAAmB,YAAY,iBAAiB,CAAC;AAC/F;AAEA,+BAA0B,SAACA,IAAyB;AAClD,MAAI,mBAAK,qBAAoB;AAC3B,uBAAK,oBAAmB,oBAAoBA,GAAE,MAAM;AAAA,EACtD;AACF;AAEA,mCAA8B,SAACA,IAAyB;AACtD,MAAI,mBAAK,qBAAoB;AAC3B,uBAAK,oBAAmB,wBAAwBA,GAAE,MAAM;AAAA,EAC1D;AACF;AAEA,qCAAgC,SAACA,IAAqC;AAEpE,wBAAK,kDAAL,WAAgC,IAAI,YAAY,8BAA8B,EAAE,QAAQ,OAAO,SAAS,KAAK,CAAC;AAE9G,OAAK,gBAAgB;AAAA,IACnB,GAAG,KAAK;AAAA,IACR,qBAAqBA,GAAE;AAAA,EACzB;AACF;AAEA,sCAAiC,SAC/B,YACA,WACM;AACN,QAAM,WAAW,WAAW,KAAK,QAAM,GAAG,cAAc,OAAO,GAAG;AAClE,QAAM,QAAQ,WAAW,UAAU,SAAS,CAAC;AAC7C,QAAM,mBAAmB,WAAW,KAAK,OAAK,EAAE,eAAe,kBAAkB,GAAG;AAEpF,QAAM,UAAU,UAAU,UAAa,CAAC,MAAM,KAAK,KAAK,QAAQ;AAChE,QAAM,YAAY,UAAU,UAAa,CAAC,MAAM,KAAK,KAAK,SAAS;AACnE,QAAM,YAAY,qBAAqB;AACvC,OAAK,kBAAkB;AAAA,IACrB,GAAG,KAAK;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAnGO;AAAA,EAFN,EAAM;AAAA,EACN,EAAQ,EAAE,SAAS,oBAAoB,CAAC;AAAA,GAF9B,QAGJ;AAKA;AAAA,EAFN,EAAM;AAAA,EACN,EAAQ,EAAE,SAAS,cAAc,CAAC;AAAA,GAPxB,QAQJ;AAQA;AAAA,EAFN,EAAM;AAAA,EACN,EAAQ,EAAE,SAAS,WAAW,CAAC;AAAA,GAfrB,QAgBJ;AAhBI,UAAN;AAAA,EADN,EAAc,UAAU;AAAA,GACZ;","names":["i","i","e","i","_hasCorrectResponse","_previousActiveItem","toggleState_fn","getDisplayedText_fn","i","i","m","i","e"]}
|
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
qtiTransformItem,
|
|
3
3
|
qtiTransformManifest,
|
|
4
4
|
qtiTransformTest
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-3WBG257S.js";
|
|
6
6
|
|
|
7
7
|
// ../qti-loader/src/qti-loader.ts
|
|
8
8
|
var getManifestInfo = async (manifestURL) => {
|
|
@@ -28,4 +28,4 @@ export {
|
|
|
28
28
|
getManifestInfo,
|
|
29
29
|
getItemByUri
|
|
30
30
|
};
|
|
31
|
-
//# sourceMappingURL=chunk-
|
|
31
|
+
//# sourceMappingURL=chunk-SP6S2WMG.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
o
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-FLJAKWXL.js";
|
|
4
4
|
import {
|
|
5
5
|
qtiTransformItem
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-3WBG257S.js";
|
|
7
7
|
import {
|
|
8
8
|
QtiFeedback,
|
|
9
9
|
QtiVariableDeclaration,
|
|
@@ -18,7 +18,7 @@ import {
|
|
|
18
18
|
r,
|
|
19
19
|
t,
|
|
20
20
|
watch
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-3XV26R5M.js";
|
|
22
22
|
import {
|
|
23
23
|
__decorateClass,
|
|
24
24
|
__privateAdd,
|
|
@@ -1601,4 +1601,4 @@ export {
|
|
|
1601
1601
|
QtiTemplateConstraint,
|
|
1602
1602
|
QtiContextDeclaration
|
|
1603
1603
|
};
|
|
1604
|
-
//# sourceMappingURL=chunk-
|
|
1604
|
+
//# sourceMappingURL=chunk-WDO2TRFM.js.map
|
package/dist/elements.js
CHANGED
|
@@ -18,10 +18,10 @@ import {
|
|
|
18
18
|
QtiTemplateConstraint,
|
|
19
19
|
QtiTemplateDeclaration,
|
|
20
20
|
QtiTemplateProcessing
|
|
21
|
-
} from "./chunk-
|
|
22
|
-
import "./chunk-
|
|
23
|
-
import "./chunk-
|
|
24
|
-
import "./chunk-
|
|
21
|
+
} from "./chunk-WDO2TRFM.js";
|
|
22
|
+
import "./chunk-FLJAKWXL.js";
|
|
23
|
+
import "./chunk-3WBG257S.js";
|
|
24
|
+
import "./chunk-3XV26R5M.js";
|
|
25
25
|
import "./chunk-QXBXORM3.js";
|
|
26
26
|
export {
|
|
27
27
|
QtiAssessmentItem,
|
package/dist/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ export { IMyQtiTest, IQtiTest, ITestNavigationMixin, ITestProcessingMixin, QtiAs
|
|
|
2
2
|
export { ItemContainer, ItemCorrectResponseMode, ItemPrintVariables, ItemShowCandidateCorrection, ItemShowCorrectResponse, QtiItem } from './item.js';
|
|
3
3
|
export { QtiAssessmentItem, QtiAssessmentStimulusRef, QtiAssessmentStimulusRefConnectedEvent, QtiCompanionMaterialsInfo, QtiContentBody, QtiContextDeclaration, QtiCustomOperator, QtiFeedbackBlock, QtiFeedbackInline, QtiItemBody, QtiModalFeedback, QtiOutcomeDeclaration, QtiResponseDeclaration, QtiResponseProcessing, QtiRubricBlock, QtiStylesheet, QtiTemplateConstraint, QtiTemplateDeclaration, QtiTemplateProcessing } from './elements.js';
|
|
4
4
|
export { Orientation, QtiAssociableHotspot, QtiAssociateInteraction, QtiChoiceInteraction, QtiCustomInteraction, QtiEndAttemptInteraction, QtiExtendedTextInteraction, QtiGap, QtiGapImg, QtiGapMatchInteraction, QtiGapText, QtiGraphicAssociateInteraction, QtiGraphicGapMatchInteraction, QtiGraphicOrderInteraction, QtiHotspotChoice, QtiHotspotInteraction, QtiHottext, QtiHottextInteraction, QtiInlineChoice, QtiInlineChoiceInteraction, QtiMatchInteraction, QtiMediaInteraction, QtiOrderInteraction, QtiPortableCustomInteraction, QtiPositionObjectInteraction, QtiPositionObjectStage, QtiPrompt, QtiSelectPointInteraction, QtiSimpleAssociableChoice, QtiSimpleChoice, QtiSliderInteraction, QtiTextEntryInteraction, QtiUploadInteraction } from './interactions.js';
|
|
5
|
-
export {
|
|
5
|
+
export { M as ModuleResolutionConfig, q as qtiTransformItem, a as qtiTransformTest, t as transformItemApi, b as transformTestApi } from './qti-transform-test-DoZaWItm.js';
|
|
6
6
|
export { qtiTransformManifest } from './transformers.js';
|
|
7
7
|
export { ManifestInfo, getItemByUri, getManifestInfo } from './loader.js';
|
|
8
8
|
export { C as ComputedItemContext, c as computedItemContext } from './computed-item.context-DfsW_96S.js';
|
|
@@ -10,11 +10,11 @@ export { C as ComputedContext, a as ComputedItem, I as INITIAL_SESSION_CONTEXT,
|
|
|
10
10
|
export { C as ConfigContext, a as CorrectResponseMode, c as configContext } from './config.context-BjZ2bZSY.js';
|
|
11
11
|
export { I as ItemContext, i as itemContextVariables } from './item.context-CkUeDcaO.js';
|
|
12
12
|
export { IsNullOrUndefined, ScoringHelper, convertNumberToUniversalFormat, decimalSeparator, itemContext, removeDoubleSlashes } from './base.js';
|
|
13
|
-
export { Q as QtiContext, a as QtiContextType, q as qtiContext } from './qti.context-
|
|
13
|
+
export { Q as QtiContext, a as QtiContextType, S as Seed, b as asSeed, i as isSeed, q as qtiContext } from './qti.context-CejJMlfZ.js';
|
|
14
14
|
export { I as INITIAL_TEST_CONTEXT, T as TestContext, t as testContext } from './test.context-CByZZjkR.js';
|
|
15
15
|
export { C as Correctness, I as IInteraction, a as Interaction } from './interaction-Bgzlw7Iu.js';
|
|
16
16
|
export { Q as QtiFeedback, a as QtiVariableDeclaration } from './qti-feedback-ChmXhZuf.js';
|
|
17
|
-
export { Q as QtiConditionExpression, a as QtiExpression, b as QtiExpressionBase } from './qti-condition-expression-
|
|
17
|
+
export { Q as QtiConditionExpression, a as QtiExpression, b as QtiExpressionBase } from './qti-condition-expression-Dam-RER6.js';
|
|
18
18
|
export { B as BaseType, C as Calculate, a as Cardinality, M as Multiple, O as Ordered, b as OutcomeVariable, Q as QtiAreaMapEntry, c as QtiAreaMapping, d as QtiMapEntry, e as QtiMapping, R as ResponseInteraction, f as ResponseVariable, T as TemplateVariable, V as VariableDeclaration, g as VariableValue, h as areaShape, i as directedPair, j as float, k as integer } from './variables-CMYcDbyW.js';
|
|
19
19
|
export { Q as QtiRuleBase, a as QtiRuleElement } from './qti-rule-base-ajOnfGXY.js';
|
|
20
20
|
export { QtiAnd, QtiAnyN, QtiBaseValue, QtiContainerSize, QtiContains, QtiCorrect, QtiDefault, QtiDelete, QtiDivide, QtiDurationGte, QtiDurationLt, QtiEqual, QtiEqualRounded, QtiFieldValue, QtiGcd, QtiGt, QtiGte, QtiIndex, QtiInside, QtiIntegerDivide, QtiIntegerModulus, QtiIntegerToFloat, QtiIsNull, QtiLcm, QtiLookupOutcomeValue, QtiLt, QtiLte, QtiMapResponse, QtiMapResponsePoint, QtiMatch, QtiMathOperator, QtiMax, QtiMember, QtiMin, QtiMultiple, QtiNot, QtiNull, QtiOr, QtiOrdered, QtiPatternMatch, QtiPower, QtiPrintedVariable, QtiProduct, QtiRandom, QtiRandomInteger, QtiRepeat, QtiResponseCondition, QtiResponseElse, QtiResponseElseIf, QtiResponseIf, QtiRound, QtiRoundTo, QtiSetCorrectResponse, QtiSetCorrectResponseRule, QtiSetOutcomeValue, QtiSetOutcomeValueRule, QtiSetTemplateValue, QtiSetTemplateValueRule, QtiStatsOperator, QtiStringMatch, QtiSubstring, QtiSubtract, QtiSum, QtiSumExpression, QtiTruncate, QtiVariable, qtiAndMixin, qtiSubtractMixin } from './processing.js';
|
package/dist/index.js
CHANGED
|
@@ -31,7 +31,7 @@ import {
|
|
|
31
31
|
QtiSliderInteraction,
|
|
32
32
|
QtiTextEntryInteraction,
|
|
33
33
|
QtiUploadInteraction
|
|
34
|
-
} from "./chunk-
|
|
34
|
+
} from "./chunk-MPC7LIPC.js";
|
|
35
35
|
import {
|
|
36
36
|
ItemContainer,
|
|
37
37
|
ItemCorrectResponseMode,
|
|
@@ -39,11 +39,11 @@ import {
|
|
|
39
39
|
ItemShowCandidateCorrection,
|
|
40
40
|
ItemShowCorrectResponse,
|
|
41
41
|
QtiItem
|
|
42
|
-
} from "./chunk-
|
|
42
|
+
} from "./chunk-RLTYVS2I.js";
|
|
43
43
|
import {
|
|
44
44
|
getItemByUri,
|
|
45
45
|
getManifestInfo
|
|
46
|
-
} from "./chunk-
|
|
46
|
+
} from "./chunk-SP6S2WMG.js";
|
|
47
47
|
import {
|
|
48
48
|
QtiAnd,
|
|
49
49
|
QtiAnyN,
|
|
@@ -113,7 +113,7 @@ import {
|
|
|
113
113
|
QtiVariable,
|
|
114
114
|
qtiAndMixin,
|
|
115
115
|
qtiSubtractMixin
|
|
116
|
-
} from "./chunk-
|
|
116
|
+
} from "./chunk-REI3AMCZ.js";
|
|
117
117
|
import {
|
|
118
118
|
QtiAssessmentItemRef,
|
|
119
119
|
QtiAssessmentSection,
|
|
@@ -139,7 +139,7 @@ import {
|
|
|
139
139
|
TestStamp,
|
|
140
140
|
TestView,
|
|
141
141
|
TestViewToggle
|
|
142
|
-
} from "./chunk-
|
|
142
|
+
} from "./chunk-HFCZFWSH.js";
|
|
143
143
|
import {
|
|
144
144
|
QtiAssessmentItem,
|
|
145
145
|
QtiAssessmentStimulusRef,
|
|
@@ -160,14 +160,14 @@ import {
|
|
|
160
160
|
QtiTemplateConstraint,
|
|
161
161
|
QtiTemplateDeclaration,
|
|
162
162
|
QtiTemplateProcessing
|
|
163
|
-
} from "./chunk-
|
|
164
|
-
import "./chunk-
|
|
165
|
-
import "./chunk-
|
|
163
|
+
} from "./chunk-WDO2TRFM.js";
|
|
164
|
+
import "./chunk-FLJAKWXL.js";
|
|
165
|
+
import "./chunk-AQ5RJFM6.js";
|
|
166
166
|
import {
|
|
167
167
|
qtiTransformItem,
|
|
168
168
|
qtiTransformManifest,
|
|
169
169
|
qtiTransformTest
|
|
170
|
-
} from "./chunk-
|
|
170
|
+
} from "./chunk-3WBG257S.js";
|
|
171
171
|
import {
|
|
172
172
|
Correctness,
|
|
173
173
|
INITIAL_SESSION_CONTEXT,
|
|
@@ -180,18 +180,20 @@ import {
|
|
|
180
180
|
QtiRuleElement,
|
|
181
181
|
QtiVariableDeclaration,
|
|
182
182
|
ScoringHelper,
|
|
183
|
+
asSeed,
|
|
183
184
|
computedContext,
|
|
184
185
|
computedItemContext,
|
|
185
186
|
configContext,
|
|
186
187
|
convertNumberToUniversalFormat,
|
|
187
188
|
decimalSeparator,
|
|
189
|
+
isSeed,
|
|
188
190
|
itemContext,
|
|
189
191
|
itemContextVariables,
|
|
190
192
|
qtiContext,
|
|
191
193
|
removeDoubleSlashes,
|
|
192
194
|
sessionContext,
|
|
193
195
|
testContext
|
|
194
|
-
} from "./chunk-
|
|
196
|
+
} from "./chunk-3XV26R5M.js";
|
|
195
197
|
import "./chunk-QXBXORM3.js";
|
|
196
198
|
export {
|
|
197
199
|
Correctness,
|
|
@@ -352,6 +354,7 @@ export {
|
|
|
352
354
|
TestStamp,
|
|
353
355
|
TestView,
|
|
354
356
|
TestViewToggle,
|
|
357
|
+
asSeed,
|
|
355
358
|
computedContext,
|
|
356
359
|
computedItemContext,
|
|
357
360
|
configContext,
|
|
@@ -359,6 +362,7 @@ export {
|
|
|
359
362
|
decimalSeparator,
|
|
360
363
|
getItemByUri,
|
|
361
364
|
getManifestInfo,
|
|
365
|
+
isSeed,
|
|
362
366
|
itemContext,
|
|
363
367
|
itemContextVariables,
|
|
364
368
|
qtiAndMixin,
|
package/dist/interactions.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ import { a as Interaction, I as IInteraction, C as Correctness } from './interac
|
|
|
4
4
|
import { C as ConfigContext } from './config.context-BjZ2bZSY.js';
|
|
5
5
|
import { a as Cardinality, B as BaseType } from './variables-CMYcDbyW.js';
|
|
6
6
|
import { I as ItemContext } from './item.context-CkUeDcaO.js';
|
|
7
|
-
import { Q as QtiContext } from './qti.context-
|
|
7
|
+
import { Q as QtiContext } from './qti.context-CejJMlfZ.js';
|
|
8
8
|
import * as lit_directives_ref_js from 'lit/directives/ref.js';
|
|
9
9
|
|
|
10
10
|
/**
|
package/dist/interactions.js
CHANGED
|
@@ -31,9 +31,9 @@ import {
|
|
|
31
31
|
QtiSliderInteraction,
|
|
32
32
|
QtiTextEntryInteraction,
|
|
33
33
|
QtiUploadInteraction
|
|
34
|
-
} from "./chunk-
|
|
35
|
-
import "./chunk-
|
|
36
|
-
import "./chunk-
|
|
34
|
+
} from "./chunk-MPC7LIPC.js";
|
|
35
|
+
import "./chunk-FLJAKWXL.js";
|
|
36
|
+
import "./chunk-3XV26R5M.js";
|
|
37
37
|
import "./chunk-QXBXORM3.js";
|
|
38
38
|
export {
|
|
39
39
|
QtiAssociableHotspot,
|
package/dist/item.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as lit from 'lit';
|
|
2
2
|
import { LitElement } from 'lit';
|
|
3
|
+
import { Q as QtiContext } from './qti.context-CejJMlfZ.js';
|
|
3
4
|
import { C as ComputedItemContext } from './computed-item.context-DfsW_96S.js';
|
|
4
5
|
import { C as ConfigContext } from './config.context-BjZ2bZSY.js';
|
|
5
6
|
import './variables-CMYcDbyW.js';
|
|
@@ -26,6 +27,7 @@ declare class ItemContainer extends LitElement {
|
|
|
26
27
|
itemDoc: DocumentFragment;
|
|
27
28
|
/** The raw XML string */
|
|
28
29
|
itemXML: string;
|
|
30
|
+
protected qtiContext: QtiContext;
|
|
29
31
|
protected handleItemURLChange(): Promise<void>;
|
|
30
32
|
protected handleItemXMLChange(): void;
|
|
31
33
|
connectedCallback(): Promise<void>;
|
|
@@ -114,6 +116,11 @@ declare class QtiItem extends LitElement {
|
|
|
114
116
|
#private;
|
|
115
117
|
computedContext: ComputedItemContext;
|
|
116
118
|
configContext: ConfigContext;
|
|
119
|
+
/**
|
|
120
|
+
* Provided so that descendants (e.g. `<item-container>`) can read the QTI runtime
|
|
121
|
+
* context for standalone item delivery, including the optional shuffle `seed`.
|
|
122
|
+
*/
|
|
123
|
+
qtiContext: QtiContext;
|
|
117
124
|
constructor();
|
|
118
125
|
render(): lit.TemplateResult<1>;
|
|
119
126
|
disconnectedCallback(): void;
|
package/dist/item.js
CHANGED
|
@@ -5,10 +5,10 @@ import {
|
|
|
5
5
|
ItemShowCandidateCorrection,
|
|
6
6
|
ItemShowCorrectResponse,
|
|
7
7
|
QtiItem
|
|
8
|
-
} from "./chunk-
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
8
|
+
} from "./chunk-RLTYVS2I.js";
|
|
9
|
+
import "./chunk-AQ5RJFM6.js";
|
|
10
|
+
import "./chunk-3WBG257S.js";
|
|
11
|
+
import "./chunk-3XV26R5M.js";
|
|
12
12
|
import "./chunk-QXBXORM3.js";
|
|
13
13
|
export {
|
|
14
14
|
ItemContainer,
|
package/dist/loader.js
CHANGED
package/dist/processing.d.ts
CHANGED
|
@@ -2,10 +2,10 @@ import * as lit from 'lit';
|
|
|
2
2
|
import { LitElement, nothing } from 'lit';
|
|
3
3
|
import { Q as QtiRuleBase } from './qti-rule-base-ajOnfGXY.js';
|
|
4
4
|
import { I as ItemContext } from './item.context-CkUeDcaO.js';
|
|
5
|
-
import { a as QtiExpression, b as QtiExpressionBase, Q as QtiConditionExpression } from './qti-condition-expression-
|
|
5
|
+
import { a as QtiExpression, b as QtiExpressionBase, Q as QtiConditionExpression } from './qti-condition-expression-Dam-RER6.js';
|
|
6
6
|
import { B as BaseType, f as ResponseVariable, V as VariableDeclaration } from './variables-CMYcDbyW.js';
|
|
7
7
|
import { T as TestContext } from './test.context-CByZZjkR.js';
|
|
8
|
-
import './qti.context-
|
|
8
|
+
import './qti.context-CejJMlfZ.js';
|
|
9
9
|
|
|
10
10
|
declare class QtiRule extends LitElement implements QtiRuleBase {
|
|
11
11
|
render(): lit.TemplateResult<1>;
|
package/dist/processing.js
CHANGED