@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.
Files changed (50) hide show
  1. package/cdn/index.global.js +1 -1
  2. package/cdn/index.js +188 -188
  3. package/custom-elements.json +91 -1
  4. package/dist/base.d.ts +2 -2
  5. package/dist/base.js +5 -1
  6. package/dist/chunk-3WBG257S.js +697 -0
  7. package/dist/chunk-3WBG257S.js.map +1 -0
  8. package/dist/{chunk-Z2SUBRH5.js → chunk-3XV26R5M.js} +6 -1
  9. package/dist/chunk-3XV26R5M.js.map +1 -0
  10. package/dist/{chunk-LQZCSHN5.js → chunk-AQ5RJFM6.js} +2 -2
  11. package/dist/{chunk-N7S3GNUP.js → chunk-FLJAKWXL.js} +2 -2
  12. package/dist/{chunk-PINGOK2F.js → chunk-HFCZFWSH.js} +27 -48
  13. package/dist/chunk-HFCZFWSH.js.map +1 -0
  14. package/dist/{chunk-FK2IVMS3.js → chunk-MPC7LIPC.js} +3 -3
  15. package/dist/{chunk-YLIYPNMK.js → chunk-REI3AMCZ.js} +2 -2
  16. package/dist/{chunk-U2FLSHK7.js → chunk-RLTYVS2I.js} +25 -5
  17. package/dist/chunk-RLTYVS2I.js.map +1 -0
  18. package/dist/{chunk-F6WP6WEF.js → chunk-SP6S2WMG.js} +2 -2
  19. package/dist/{chunk-OQ77SE2W.js → chunk-WDO2TRFM.js} +4 -4
  20. package/dist/elements.js +4 -4
  21. package/dist/index.d.ts +3 -3
  22. package/dist/index.js +14 -10
  23. package/dist/interactions.d.ts +1 -1
  24. package/dist/interactions.js +3 -3
  25. package/dist/item.d.ts +7 -0
  26. package/dist/item.js +4 -4
  27. package/dist/loader.js +2 -2
  28. package/dist/processing.d.ts +2 -2
  29. package/dist/processing.js +2 -2
  30. package/dist/qti-components-jsx.d.ts +178 -151
  31. package/dist/{qti-condition-expression-B1BYmCcq.d.ts → qti-condition-expression-Dam-RER6.d.ts} +1 -1
  32. package/dist/{qti-transform-test-DMx816H0.d.ts → qti-transform-test-DoZaWItm.d.ts} +11 -9
  33. package/dist/qti.context-CejJMlfZ.d.ts +50 -0
  34. package/dist/test.d.ts +5 -3
  35. package/dist/test.js +6 -6
  36. package/dist/transformers.d.ts +1 -1
  37. package/dist/transformers.js +1 -1
  38. package/package.json +6 -6
  39. package/dist/chunk-BPIDAS3T.js +0 -495
  40. package/dist/chunk-BPIDAS3T.js.map +0 -1
  41. package/dist/chunk-PINGOK2F.js.map +0 -1
  42. package/dist/chunk-U2FLSHK7.js.map +0 -1
  43. package/dist/chunk-Z2SUBRH5.js.map +0 -1
  44. package/dist/qti.context-B8PSyIWm.d.ts +0 -14
  45. /package/dist/{chunk-LQZCSHN5.js.map → chunk-AQ5RJFM6.js.map} +0 -0
  46. /package/dist/{chunk-N7S3GNUP.js.map → chunk-FLJAKWXL.js.map} +0 -0
  47. /package/dist/{chunk-FK2IVMS3.js.map → chunk-MPC7LIPC.js.map} +0 -0
  48. /package/dist/{chunk-YLIYPNMK.js.map → chunk-REI3AMCZ.js.map} +0 -0
  49. /package/dist/{chunk-F6WP6WEF.js.map → chunk-SP6S2WMG.js.map} +0 -0
  50. /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-N7S3GNUP.js";
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-Z2SUBRH5.js";
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-FK2IVMS3.js.map
9746
+ //# sourceMappingURL=chunk-MPC7LIPC.js.map
@@ -12,7 +12,7 @@ import {
12
12
  r,
13
13
  t,
14
14
  testContext
15
- } from "./chunk-Z2SUBRH5.js";
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-YLIYPNMK.js.map
2750
+ //# sourceMappingURL=chunk-REI3AMCZ.js.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  item_default,
3
3
  m
4
- } from "./chunk-LQZCSHN5.js";
4
+ } from "./chunk-AQ5RJFM6.js";
5
5
  import {
6
6
  qtiTransformItem
7
- } from "./chunk-BPIDAS3T.js";
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-Z2SUBRH5.js";
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 api = await qtiTransformItem().load(this.itemURL);
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-U2FLSHK7.js.map
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":"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","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-BPIDAS3T.js";
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-F6WP6WEF.js.map
31
+ //# sourceMappingURL=chunk-SP6S2WMG.js.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  o
3
- } from "./chunk-N7S3GNUP.js";
3
+ } from "./chunk-FLJAKWXL.js";
4
4
  import {
5
5
  qtiTransformItem
6
- } from "./chunk-BPIDAS3T.js";
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-Z2SUBRH5.js";
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-OQ77SE2W.js.map
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-OQ77SE2W.js";
22
- import "./chunk-N7S3GNUP.js";
23
- import "./chunk-BPIDAS3T.js";
24
- import "./chunk-Z2SUBRH5.js";
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 { L as LoadOptions, M as ModuleResolutionConfig, q as qtiTransformItem, a as qtiTransformTest, t as transformItemApi, b as transformTestApi } from './qti-transform-test-DMx816H0.js';
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-B8PSyIWm.js';
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-B1BYmCcq.js';
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-FK2IVMS3.js";
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-U2FLSHK7.js";
42
+ } from "./chunk-RLTYVS2I.js";
43
43
  import {
44
44
  getItemByUri,
45
45
  getManifestInfo
46
- } from "./chunk-F6WP6WEF.js";
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-YLIYPNMK.js";
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-PINGOK2F.js";
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-OQ77SE2W.js";
164
- import "./chunk-N7S3GNUP.js";
165
- import "./chunk-LQZCSHN5.js";
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-BPIDAS3T.js";
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-Z2SUBRH5.js";
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,
@@ -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-B8PSyIWm.js';
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
  /**
@@ -31,9 +31,9 @@ import {
31
31
  QtiSliderInteraction,
32
32
  QtiTextEntryInteraction,
33
33
  QtiUploadInteraction
34
- } from "./chunk-FK2IVMS3.js";
35
- import "./chunk-N7S3GNUP.js";
36
- import "./chunk-Z2SUBRH5.js";
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-U2FLSHK7.js";
9
- import "./chunk-LQZCSHN5.js";
10
- import "./chunk-BPIDAS3T.js";
11
- import "./chunk-Z2SUBRH5.js";
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
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  getItemByUri,
3
3
  getManifestInfo
4
- } from "./chunk-F6WP6WEF.js";
5
- import "./chunk-BPIDAS3T.js";
4
+ } from "./chunk-SP6S2WMG.js";
5
+ import "./chunk-3WBG257S.js";
6
6
  import "./chunk-QXBXORM3.js";
7
7
  export {
8
8
  getItemByUri,
@@ -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-B1BYmCcq.js';
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-B8PSyIWm.js';
8
+ import './qti.context-CejJMlfZ.js';
9
9
 
10
10
  declare class QtiRule extends LitElement implements QtiRuleBase {
11
11
  render(): lit.TemplateResult<1>;
@@ -67,8 +67,8 @@ import {
67
67
  QtiVariable,
68
68
  qtiAndMixin,
69
69
  qtiSubtractMixin
70
- } from "./chunk-YLIYPNMK.js";
71
- import "./chunk-Z2SUBRH5.js";
70
+ } from "./chunk-REI3AMCZ.js";
71
+ import "./chunk-3XV26R5M.js";
72
72
  import "./chunk-QXBXORM3.js";
73
73
  export {
74
74
  QtiAnd,