@citolab/qti-components 7.0.6-beta.3 → 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 (113) 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-N5OHGRGG.js → chunk-PT523RSK.js} +2 -2
  9. package/cdn/chunks/chunk-QTK4CPHP.js +8 -0
  10. package/cdn/chunks/{chunk-TVDTF6P6.js → chunk-SXM25YH3.js} +89 -89
  11. package/cdn/chunks/{chunk-6S4CDN3T.js → chunk-YHWMZAZD.js} +2 -2
  12. package/cdn/chunks/{chunk-TQBDBMWL.js → chunk-YWH4TGMA.js} +1 -1
  13. package/cdn/index.global.js +1 -1
  14. package/cdn/index.js +1 -1
  15. package/cdn/qti-components/index.js +1 -1
  16. package/cdn/qti-item/core/index.js +1 -1
  17. package/cdn/qti-test/components/index.js +1 -1
  18. package/cdn/qti-test/components/test-component.abstract.js +1 -1
  19. package/cdn/qti-test/components/test-end-attempt.js +1 -0
  20. package/cdn/qti-test/components/test-item-link.js +1 -1
  21. package/cdn/qti-test/components/test-next.js +1 -1
  22. package/cdn/qti-test/components/test-paging-buttons-stamp.js +1 -1
  23. package/cdn/qti-test/components/test-prev.js +1 -1
  24. package/cdn/qti-test/components/test-show-correct-response.js +1 -0
  25. package/cdn/qti-test/components/test-view.js +1 -1
  26. package/cdn/qti-test/core/index.js +1 -1
  27. package/dist/chunks/{chunk-GSWZT6N2.js → chunk-4MQV5IRV.js} +12 -3
  28. package/dist/chunks/chunk-4MQV5IRV.js.map +1 -0
  29. package/dist/chunks/{chunk-6JXR63MH.js → chunk-5RTLOB3Q.js} +12 -3
  30. package/dist/chunks/chunk-5RTLOB3Q.js.map +1 -0
  31. package/dist/chunks/{chunk-UFYWCLXF.js → chunk-AUWATZ65.js} +1 -1
  32. package/dist/chunks/{chunk-UFYWCLXF.js.map → chunk-AUWATZ65.js.map} +1 -1
  33. package/dist/chunks/{chunk-7QMCKYDR.js → chunk-CEXAR7BF.js} +13 -4
  34. package/dist/chunks/chunk-CEXAR7BF.js.map +1 -0
  35. package/dist/chunks/chunk-DNHDFXTV.js +59 -0
  36. package/dist/chunks/chunk-DNHDFXTV.js.map +1 -0
  37. package/dist/chunks/chunk-GQ5P3NWC.js +46 -0
  38. package/dist/chunks/chunk-GQ5P3NWC.js.map +1 -0
  39. package/dist/chunks/chunk-HOTNM5DT.js +1 -0
  40. package/dist/chunks/{chunk-ZHAJ3CMP.js → chunk-MEQM6M67.js} +89 -117
  41. package/dist/chunks/chunk-MEQM6M67.js.map +1 -0
  42. package/dist/chunks/{chunk-3EU75IUF.js → chunk-MLT7V47R.js} +3 -21
  43. package/dist/chunks/chunk-MLT7V47R.js.map +1 -0
  44. package/dist/chunks/chunk-NHA53UTY.js +52 -0
  45. package/dist/chunks/chunk-NHA53UTY.js.map +1 -0
  46. package/dist/chunks/{chunk-J2SHENRN.js → chunk-NZQKGIJP.js} +9 -3
  47. package/dist/chunks/{chunk-J2SHENRN.js.map → chunk-NZQKGIJP.js.map} +1 -1
  48. package/dist/chunks/chunk-RX3BRYYI.js +59 -0
  49. package/dist/chunks/chunk-RX3BRYYI.js.map +1 -0
  50. package/dist/chunks/chunk-VAPB5TN4.js +46 -0
  51. package/dist/chunks/chunk-VAPB5TN4.js.map +1 -0
  52. package/dist/chunks/chunk-W4272Q5U.js +46 -0
  53. package/dist/chunks/chunk-W4272Q5U.js.map +1 -0
  54. package/dist/chunks/{chunk-A24F75DB.js → chunk-WWN5AD6V.js} +11 -2
  55. package/dist/chunks/chunk-WWN5AD6V.js.map +1 -0
  56. package/dist/chunks/{chunk-HHVRU3AJ.js → chunk-XCHS3RTZ.js} +2 -2
  57. package/dist/chunks/{chunk-KYAIMBP5.js → chunk-YQB6YLNW.js} +3 -3
  58. package/dist/chunks/chunk-YQB6YLNW.js.map +1 -0
  59. package/dist/chunks/chunk-Z5THRO6Z.js +46 -0
  60. package/dist/chunks/chunk-Z5THRO6Z.js.map +1 -0
  61. package/dist/chunks/{chunk-4GNVYCBN.js → chunk-ZQXZ6PK7.js} +92 -70
  62. package/dist/chunks/chunk-ZQXZ6PK7.js.map +1 -0
  63. package/dist/index.d.ts +4 -2
  64. package/dist/index.js +20 -12
  65. package/dist/item.css +8 -2
  66. package/dist/qti-components/index.d.ts +2 -2
  67. package/dist/qti-components/index.js +1 -1
  68. package/dist/qti-components-jsx.d.ts +62 -46
  69. package/dist/qti-item/core/index.js +2 -2
  70. package/dist/qti-loader/index.d.ts +1 -1
  71. package/dist/{qti-response-declaration-DAeBp8HH.d.ts → qti-response-declaration-Di9CsqiJ.d.ts} +4 -0
  72. package/dist/qti-test/components/index.d.ts +4 -2
  73. package/dist/qti-test/components/index.js +16 -8
  74. package/dist/qti-test/components/test-component.abstract.d.ts +2 -4
  75. package/dist/qti-test/components/test-component.abstract.js +2 -2
  76. package/dist/qti-test/components/test-end-attempt.d.ts +26 -0
  77. package/dist/qti-test/components/test-end-attempt.js +13 -0
  78. package/dist/qti-test/components/test-end-attempt.js.map +1 -0
  79. package/dist/qti-test/components/test-item-link.d.ts +3 -2
  80. package/dist/qti-test/components/test-item-link.js +3 -3
  81. package/dist/qti-test/components/test-next.d.ts +3 -2
  82. package/dist/qti-test/components/test-next.js +3 -3
  83. package/dist/qti-test/components/test-paging-buttons-stamp.d.ts +2 -2
  84. package/dist/qti-test/components/test-paging-buttons-stamp.js +3 -3
  85. package/dist/qti-test/components/test-prev.d.ts +3 -2
  86. package/dist/qti-test/components/test-prev.js +3 -3
  87. package/dist/qti-test/components/test-show-correct-response.d.ts +26 -0
  88. package/dist/qti-test/components/test-show-correct-response.js +13 -0
  89. package/dist/qti-test/components/test-show-correct-response.js.map +1 -0
  90. package/dist/qti-test/components/test-view.d.ts +3 -2
  91. package/dist/qti-test/components/test-view.js +3 -3
  92. package/dist/qti-test/core/index.d.ts +6 -6
  93. package/dist/qti-test/core/index.js +3 -3
  94. package/dist/{test.context-CaENAJNk.d.ts → test.context-CmsDQ8k2.d.ts} +3 -5
  95. package/dist/vscode.html-custom-data.json +36 -17
  96. package/package.json +1 -1
  97. package/cdn/chunks/chunk-5P7CTN7Q.js +0 -11
  98. package/cdn/chunks/chunk-DZCKF45D.js +0 -5
  99. package/cdn/chunks/chunk-IMJOPCFR.js +0 -1
  100. package/cdn/chunks/chunk-NDHSIO2G.js +0 -8
  101. package/cdn/chunks/chunk-QV6I5NVQ.js +0 -8
  102. package/dist/chunks/chunk-3EU75IUF.js.map +0 -1
  103. package/dist/chunks/chunk-4GNVYCBN.js.map +0 -1
  104. package/dist/chunks/chunk-6JXR63MH.js.map +0 -1
  105. package/dist/chunks/chunk-7QMCKYDR.js.map +0 -1
  106. package/dist/chunks/chunk-A24F75DB.js.map +0 -1
  107. package/dist/chunks/chunk-GSWZT6N2.js.map +0 -1
  108. package/dist/chunks/chunk-KYAIMBP5.js.map +0 -1
  109. package/dist/chunks/chunk-UN2IFSGC.js +0 -1
  110. package/dist/chunks/chunk-ZHAJ3CMP.js.map +0 -1
  111. /package/cdn/chunks/{chunk-3GO57DNP.js → chunk-6PW2L463.js} +0 -0
  112. /package/dist/chunks/{chunk-UN2IFSGC.js.map → chunk-HOTNM5DT.js.map} +0 -0
  113. /package/dist/chunks/{chunk-HHVRU3AJ.js.map → chunk-XCHS3RTZ.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/lib/qti-test/core/components/test-container.ts","../../src/lib/qti-test/core/qti-test.ts","../../src/lib/qti-test/core/mixins/test-loader.mixin.ts","../../src/lib/qti-test/core/mixins/test-navigation.mixin.ts","../../src/lib/qti-test/core/mixins/test-view.mixin.ts","../../src/lib/qti-test/core/test-base.ts","../../src/lib/qti-test/core/mixins/test-processing.mixin.ts","../../src/lib/qti-test/core/qti-assessment-test/qti-assessment-item-ref.ts","../../src/lib/qti-test/core/qti-assessment-test/qti-assessment-section.ts","../../src/lib/qti-test/core/qti-assessment-test/qti-assessment-test.ts","../../src/lib/qti-test/core/qti-assessment-test/qti-test-part.ts"],"sourcesContent":["import { LitElement, html } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { until } from 'lit/directives/until.js';\nimport { watch } from '../../../decorators/watch';\nimport itemCss from '../../../../item.css?inline';\nimport { qtiTransformTest } from '../../../qti-transformers';\n\n/**\n * `<test-container>` is a custom element designed for hosting the qti-assessment-item.\n * The `qti-assessment-test` will be placed inside the shadow DOM of this element.\n * The element loads the test from the provided URL and renders it inside the shadow DOM.\n *\n * ```html\n * <qti-test>\n * <test-container class=\"m-4 bg-white\" test-url=\"./path/to/assessmenttest.xml\"></test-container>\n * </qti-test>\n * ```\n */\n@customElement('test-container')\nexport class TestContainer extends LitElement {\n /** URL of the item to load */\n @property({ type: String, attribute: 'test-url' })\n testURL: string = null;\n\n /** A parsed HTML document */\n @state()\n testDoc: DocumentFragment = null;\n\n /** The raw XML string */\n @state()\n testXML: string = null;\n\n /** Template content if provided */\n private templateContent = null;\n\n @watch('testURL', { waitUntilFirstUpdate: true })\n protected async handleTestURLChange() {\n if (!this.testURL) return;\n try {\n const api = await qtiTransformTest().load(this.testURL);\n this.testDoc = api.htmlDoc();\n } catch (error) {\n console.error('Error loading or parsing XML:', error);\n }\n }\n\n @watch('testXML', { waitUntilFirstUpdate: true })\n protected handleTestXMLChange() {\n if (!this.testXML) return;\n try {\n this.testDoc = qtiTransformTest().parse(this.testXML).htmlDoc();\n } catch (error) {\n console.error('Error parsing XML:', error);\n }\n }\n\n async connectedCallback(): Promise<void> {\n super.connectedCallback();\n this.initializeTemplateContent();\n this.applyStyles();\n if (this.testURL) {\n this.handleTestURLChange();\n }\n if (this.testXML) {\n this.handleTestXMLChange();\n }\n }\n\n private initializeTemplateContent() {\n const template = this.querySelector('template') as HTMLTemplateElement;\n this.templateContent = template ? template.content : html``;\n }\n\n private applyStyles() {\n const sheet = new CSSStyleSheet();\n sheet.replaceSync(itemCss);\n this.shadowRoot.adoptedStyleSheets = [sheet];\n }\n\n render() {\n return html`\n ${this.templateContent}\n <slot></slot>\n ${until(this.testDoc, html`<span>Loading...</span>`)}\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'test-container': TestContainer;\n }\n}\n","import { html } from 'lit';\nimport { customElement } from 'lit/decorators.js';\nimport { TestLoaderMixin, TestNavigationMixin, TestViewMixin } from './mixins';\nimport { TestBase } from './test-base';\nimport { TestProcessingMixin } from './mixins/test-processing.mixin';\n\n/**\n * `<qti-test>` is a custom element designed for rendering and interacting with QTI (Question and Test Interoperability) tests.\n *\n * This component leverages several mixins to provide functionality for loading, navigating, processing, and displaying QTI test assessments.\n *\n * ### Example Usage\n *\n * Minimal example including navigation:\n *\n * ```html\n * <qti-test>\n * <test-container test-url=\"./path/to/assessment.xml\"></test-container>\n * <nav class=\"flex\">\n * <test-prev></test-prev>\n * <test-next></test-next>\n * </nav>\n * </qti-test>\n * ```\n *\n * Use the following file structure\n * A qti-test loads a QTI3.0 assessmenttest.xml file from a package folder.\n *\n * ```plaintext\n * Root/\n * ├── index.html\n * └── /assets/api/examples/\n * ├── assessmenttest.xml\n * └── imsmanifest.xml\n *\n * ```\n *\n * ### Test components\n *\n * Use test components inside the qti-test component for added functionality.\n * ### Test next\n * `<test-next> | TestNext`\n *\n * ### Test prev\n *\n * `<test-prev> | TestPrev`\n * ### Test components\n *\n * You can use normal class names to style the elements.\n * And you can use the `test-prev` and `test-next` elements to navigate through the test.\n *\n */\n@customElement('qti-test')\nexport class QtiTest extends TestLoaderMixin(TestProcessingMixin(TestNavigationMixin(TestViewMixin(TestBase)))) {\n /**\n * Renders the component's template.\n * Provides a default `<slot>` for content projection.\n */\n async connectedCallback(): Promise<void> {\n super.connectedCallback();\n await this.updateComplete;\n this.dispatchEvent(new CustomEvent('qti-test-connected', { detail: this }));\n }\n render() {\n return html`<slot></slot>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'qti-test': QtiTest;\n }\n}\n","import { qtiTransformItem } from '../../../qti-transformers';\nimport { property } from 'lit/decorators.js';\nimport type { TestBase } from '../test-base';\nimport type { OutcomeVariable } from '../../../exports/variables';\nimport type { QtiAssessmentItemRef } from '../qti-assessment-test';\n\nconst setSessionData = <T>(key: string, value?: T): void => sessionStorage.setItem(key, JSON.stringify(value));\nconst getSessionData = <T>(key: string): T | null =>\n sessionStorage.getItem(key) ? JSON.parse(sessionStorage.getItem(key)!) : null;\n\ntype Constructor<T = {}> = abstract new (...args: any[]) => T;\n\ndeclare class TestLoaderInterface {}\nexport const TestLoaderMixin = <T extends Constructor<TestBase>>(superClass: T) => {\n abstract class TestLoaderClass extends superClass {\n /** Items will be scored on everyinteraction when `qti-assessment-item` is not set to adaptive, and the `SCORE` outcome identifier is not set to be \"human\" | \"externalMachine\" */\n @property({ type: Boolean, attribute: 'auto-score-items' }) autoScoreItems = false;\n @property({ type: Boolean, attribute: 'auto-store-restore' }) autoStoreRestoreContext = false;\n\n constructor(...args: any[]) {\n super(...args);\n\n // this.addEventListener('qti-load-test-request', (e: CustomEvent /* 1. Request the test */) => {\n // const { testURL } = e.detail;\n // if (!testURL) {\n // console.warn(\n // 'No test found, there should be an attribute test-url with the path to the test on the test-container'\n // );\n // } else {\n // this.testURL = testURL;\n // }\n\n // e.detail.promise = (async () => {\n // e.preventDefault(); /* indicates that the event was catched and handled */\n // const api = await qtiTransformTest().load(`${this.testURL}`); /* 6. load the item */\n // return api.htmlDoc(); /* 3. Return html version of the assessment.xml */\n // })();\n // });\n\n this.addEventListener('qti-test-connected', () => {\n if (this.autoStoreRestoreContext) {\n this.context = getSessionData(`testcontext`); /* 4. Set the context */\n }\n });\n\n this.addEventListener('qti-load-item-request' /* 5. Request the item */, ({ detail }: CustomEvent) => {\n detail.promise = (async () => {\n const api = await qtiTransformItem().load(`${detail.href}`, detail.cancelPreviousRequest);\n return api.htmlDoc();\n })();\n });\n\n this.addEventListener('qti-interaction-changed', (e: CustomEvent<any>) => {\n if (this.autoScoreItems) {\n const qtiItemEl = this.testElement.querySelector<QtiAssessmentItemRef>(\n `qti-assessment-item-ref[identifier=\"${this.context.navItemId}\"]`\n );\n const qtiAssessmentItem = qtiItemEl.assessmentItem;\n const scoreOutcomeIdentifier = qtiAssessmentItem.variables.find(\n v => v.identifier === 'SCORE'\n ) as OutcomeVariable;\n if (scoreOutcomeIdentifier.externalScored === null && qtiAssessmentItem.adaptive === 'false') {\n qtiAssessmentItem.processResponse();\n if (this.autoStoreRestoreContext) {\n setSessionData(`testcontext`, this.context);\n }\n }\n } else {\n if (this.autoStoreRestoreContext) {\n setSessionData(`testcontext`, this.context);\n }\n }\n });\n }\n }\n\n return TestLoaderClass as Constructor<TestLoaderInterface> & T;\n};\n","import type { QtiAssessmentItemRef } from '../qti-assessment-test';\nimport type { TestBase } from '../test-base';\n\ndeclare module '../context/test.context' {\n interface TestContext {\n navPartId?: string | null;\n navSectionId?: string | null;\n navItemId?: string | null;\n navItemLoading?: boolean;\n navTestLoading?: boolean;\n }\n}\n\ntype Constructor<T = {}> = abstract new (...args: any[]) => T;\n\ndeclare class TestNavigationInterface {}\nexport const TestNavigationMixin = <T extends Constructor<TestBase>>(superClass: T) => {\n abstract class TestNavigationClass extends superClass {\n constructor(...args: any[]) {\n super(...args);\n\n // load an item\n this.addEventListener('qti-request-test-item', ({ detail: navItemId }: CustomEvent<string>) => {\n if (!navItemId) return;\n this._clearLoadedItems();\n\n const itemRefEl = this.testElement.querySelector<QtiAssessmentItemRef>(\n `qti-assessment-item-ref[identifier=\"${navItemId}\"]`\n );\n\n const promise = this._loadItemRequest(itemRefEl.href, false);\n\n const navPartId = itemRefEl.closest('qti-test-part').identifier;\n const navSectionId = itemRefEl.closest('qti-assessment-section').identifier;\n this._testContext = { ...this._testContext, navPartId, navSectionId, navItemId, navItemLoading: true };\n\n if (promise) {\n promise\n .then(doc => {\n itemRefEl.xmlDoc = doc;\n requestAnimationFrame(() =>\n this.dispatchEvent(new CustomEvent('qti-item-connected', { bubbles: true, composed: true }))\n );\n this._testContext = { ...this._testContext, navItemLoading: false };\n })\n .catch(error => console.error('Failed to load item:', error));\n } else {\n console.info('Load item request was not handled:', itemRefEl.href);\n }\n });\n\n this.addEventListener('qti-assessment-test-connected', () => {\n let navItemId = this._testContext.navItemId;\n if (!navItemId) {\n const itemRefEl = this.testElement.querySelector<QtiAssessmentItemRef>('qti-assessment-item-ref');\n navItemId = itemRefEl.identifier;\n }\n this.dispatchEvent(\n new CustomEvent('qti-request-test-item', { detail: navItemId, bubbles: true, composed: true })\n );\n });\n }\n\n private _clearLoadedItems(): void {\n const itemRefEls = this.testElement.querySelectorAll(`qti-assessment-test qti-assessment-item-ref`);\n Array.from(itemRefEls).forEach((itemElement: QtiAssessmentItemRef) => {\n itemElement.xmlDoc = null;\n });\n }\n\n private _loadItemRequest(href: string, cancelPreviousRequest: boolean = true): Promise<DocumentFragment> {\n const event = new CustomEvent('qti-load-item-request', {\n bubbles: true,\n composed: true,\n detail: {\n href: href,\n promise: null,\n cancelPreviousRequest\n }\n });\n this.dispatchEvent(event);\n\n return event.detail.promise;\n }\n }\n\n return TestNavigationClass as Constructor<TestNavigationInterface> & T;\n};\n","import type { QtiAssessmentItem } from '../../../qti-components';\nimport type { TestBase } from '../test-base';\n\nexport type View = 'author' | 'candidate' | 'proctor' | 'scorer' | 'testConstructor' | 'tutor' | '';\n\ndeclare module '../context/test.context' {\n interface TestContext {\n view?: View;\n }\n}\n\ntype Constructor<T = {}> = abstract new (...args: any[]) => T;\n\ndeclare class TestViewInterface {}\n\nexport const TestViewMixin = <T extends Constructor<TestBase>>(superClass: T) => {\n abstract class TestViewClass extends superClass {\n constructor(...args: any[]) {\n super(...args);\n this._testContext = { ...this._testContext, view: 'candidate' };\n\n this.addEventListener('on-test-switch-view', (e: CustomEvent<View>) => {\n this._testContext = { ...this._testContext, view: e.detail };\n this._updateElementView();\n });\n this.addEventListener('qti-assessment-test-connected', () => {\n this._updateElementView();\n });\n this.addEventListener('qti-assessment-item-connected', (e: CustomEvent) => {\n this._updateElementView();\n this._setCorrectResponseVisibility(e.detail);\n });\n }\n\n willUpdate(changedProperties: Map<string | number | symbol, unknown>) {\n super.willUpdate(changedProperties);\n if (changedProperties.has('_testContext')) {\n // if (previousContext && previousContext.view !== this._testContext.view) {\n this._updateElementView();\n // }\n }\n }\n\n // Method to handle view updates for elements based on the current context view\n private _updateElementView() {\n if (this.testElement && this.testElement) {\n const viewElements = Array.from(this.testElement.querySelectorAll('[view]'));\n\n viewElements.forEach((element: HTMLElement) => {\n element.classList.toggle('show', element.getAttribute('view') === this._testContext.view);\n });\n\n const assessmentItem = this.testElement.querySelector<QtiAssessmentItem>(\n `qti-assessment-item[identifier=\"${this._testContext.navItemId}\"]`\n );\n if (assessmentItem) {\n assessmentItem.showCorrectResponse(this._testContext.view === 'scorer');\n }\n }\n }\n\n // Event handler for connected QTI assessment items\n private _setCorrectResponseVisibility(assessmentItem: QtiAssessmentItem): void {\n assessmentItem.showCorrectResponse(this._testContext.view === 'scorer');\n }\n }\n\n return TestViewClass as Constructor<TestViewInterface> & T;\n};\n","import { provide } from '@lit/context';\nimport { LitElement } from 'lit';\nimport { state } from 'lit/decorators.js';\nimport type { TestContext, TestElement } from './context';\nimport { testContext, testElement } from './context';\nimport type { QtiAssessmentTest } from './qti-assessment-test';\nimport type { QtiAssessmentItem } from '../../qti-components/';\nimport type { VariableValue } from '../../exports/variables';\n\nexport abstract class TestBase extends LitElement {\n @state()\n @provide({ context: testContext })\n protected _testContext: Readonly<TestContext> = { items: [], testOutcomeVariables: [] };\n\n @state()\n @provide({ context: testElement })\n protected testElement: TestElement = null;\n\n constructor() {\n super();\n\n /**\n * When the test is connected, the items are updated in the test context.\n * An existing context item is updated with the itemRef properties if nessesary.\n */\n this.addEventListener('qti-assessment-test-connected', (e: CustomEvent<QtiAssessmentTest>) => {\n const qtiAssessmentTest = e.detail;\n this.testElement = qtiAssessmentTest;\n\n const items = Array.from(qtiAssessmentTest.querySelectorAll('qti-assessment-item-ref')).map(itemRef => {\n const existingItem = this._testContext.items.find(item => item.identifier === itemRef.identifier);\n\n return {\n ...existingItem, // Spread all existing properties\n href: existingItem?.href || itemRef.href,\n identifier: existingItem?.identifier || itemRef.identifier,\n category: existingItem?.category || itemRef.category,\n variables: existingItem?.variables || [\n {\n identifier: 'completionStatus',\n value: 'not_attempted',\n type: 'outcome'\n }\n ]\n };\n });\n this._testContext = { ...this._testContext, items };\n });\n this.addEventListener('qti-assessment-item-connected', (e: CustomEvent<QtiAssessmentItem>) => {\n this._updateItemInTestContext(e.detail);\n });\n this.addEventListener('qti-outcome-changed', e => {\n const assessmentitem = e.composedPath()[0] as QtiAssessmentItem;\n this._updateItemVariablesInTestContext(assessmentitem.identifier, assessmentitem.variables);\n });\n }\n\n get context(): TestContext {\n return this._testContext;\n }\n\n // /* restores the context by updating existing items and adding new items from the \"contextToRestore\" parameter into the \"this._context.items\" array. */\n set context(testContext: TestContext) {\n if (testContext === null || testContext === undefined) return;\n this._testContext = { ...testContext }; // Clone the context to avoid modifying the original object\n // // append the items that are not yet in the context and replace the ones that are\n testContext.items?.forEach(itemContext => {\n const existingItemContext = this._testContext.items.find(i => i.identifier === itemContext.identifier);\n if (existingItemContext) {\n existingItemContext.variables = itemContext.variables;\n } else {\n this._testContext.items.push(itemContext);\n }\n });\n }\n\n private _updateItemVariablesInTestContext(\n identifier: string,\n variables: VariableValue<string | string[] | null>[]\n ): void {\n // Update the test context with modified variables for the specified item\n this._testContext = {\n ...this._testContext, // Spread existing test context properties\n items: this._testContext.items.map(itemContext => {\n // If the item identifier doesn't match, keep it unchanged\n if (itemContext.identifier !== identifier) {\n return itemContext;\n }\n\n // Update the matching item with new variables\n return {\n ...itemContext, // Keep other properties of the item context\n variables: variables.map(variable => {\n // Find a matching variable in the current item context\n const matchingVariable = itemContext.variables.find(v => v.identifier === variable.identifier);\n\n // Merge matching variable with the new one, or use the new variable if no match\n return matchingVariable ? { ...matchingVariable, ...variable } : variable;\n })\n };\n })\n };\n }\n\n /**\n * Updates the variables of an assessment item in the test context.\n * - Matches the assessment item with the corresponding test context item.\n * - If the item is not found, logs a warning.\n * - Updates variables in the test context if exactly one variable exists.\n * - Otherwise, syncs the assessment item's variables with the test context.\n *\n * @param assessmentItem - The assessment item to update.\n */\n private _updateItemInTestContext = (assessmentItem: QtiAssessmentItem): void => {\n const { identifier, variables } = assessmentItem;\n\n // console.log(this._testContext);\n\n // Find the corresponding item in the test context by identifier\n const itemContext = this._testContext.items.find(i => i?.identifier === identifier);\n\n if (!itemContext) {\n console.warn(`Item IDs between assessment.xml and item.xml should match: ${identifier} is not found!`);\n return;\n }\n\n // Update variables in the test context or sync them to the assessment item\n if (itemContext.variables?.length === 1) {\n // The loaded qti-assessment-item itself has variables which are not in test context yet.\n this._updateItemVariablesInTestContext(identifier, variables);\n } else {\n // Sync the assessment item's variables with the test context\n assessmentItem.variables = [...(itemContext.variables || [])];\n }\n };\n}\n","import type { OutcomeVariable, VariableDeclaration } from '../../../exports/variables';\nimport type { QtiOutcomeProcessing } from '../../../qti-components';\nimport type { TestBase } from '../test-base';\n\ntype Constructor<T = {}> = abstract new (...args: any[]) => T;\n\ndeclare class TestProcessingInterface {\n updateOutcomeVariable(identifier: string, value: string | string[] | undefined): void;\n getOutcome(identifier: string): Readonly<OutcomeVariable>;\n getVariable(identifier: string): Readonly<VariableDeclaration<string | string[] | null>>;\n outcomeProcessing(): boolean;\n}\nexport const TestProcessingMixin = <T extends Constructor<TestBase>>(superClass: T) => {\n abstract class TestProcessingElement extends superClass {\n constructor(...args: any[]) {\n super(...args);\n this.addEventListener('qti-register-variable', (e: CustomEvent<{ variable: any }>) => {\n this._testContext = {\n ...this._testContext,\n testOutcomeVariables: [...this._testContext.testOutcomeVariables, e.detail.variable]\n };\n e.stopPropagation();\n });\n // wordt aangeroepen vanuit de processingtemplate\n this.addEventListener(\n 'qti-set-outcome-value',\n (e: CustomEvent<{ outcomeIdentifier: string; value: string | string[] }>) => {\n const { outcomeIdentifier, value } = e.detail;\n this.updateOutcomeVariable(outcomeIdentifier, value);\n e.stopPropagation();\n }\n );\n }\n\n outcomeProcessing(): boolean {\n const outcomeProcessor = this.querySelector('qti-outcome-processing') as unknown as QtiOutcomeProcessing;\n if (!outcomeProcessor) return false;\n outcomeProcessor?.process();\n return true;\n }\n\n /* --------------------------- ENABLED WHEN UNIT TESTING OUTCOME PROCESSING ------------------------------------ */\n\n public updateOutcomeVariable(identifier: string, value: string | string[] | undefined) {\n const outcomeVariable = this.getOutcome(identifier);\n if (!outcomeVariable) {\n console.warn(`Can not set qti-outcome-identifier: ${identifier}, it is not available`);\n return;\n }\n this._testContext = {\n ...this._testContext,\n testOutcomeVariables: this._testContext.testOutcomeVariables.map(v => {\n if (v.identifier !== identifier) {\n return v;\n }\n return {\n ...v,\n value: outcomeVariable.cardinality === 'single' ? value : [...v.value, value as string]\n };\n })\n };\n }\n\n public getOutcome(identifier: string): Readonly<OutcomeVariable> {\n return this.getVariable(identifier) as OutcomeVariable;\n }\n public getVariable(identifier: string): Readonly<VariableDeclaration<string | string[] | null>> {\n return this._testContext.testOutcomeVariables.find(v => v.identifier === identifier) || null;\n }\n /* --------------------------- ENABLED WHEN UNIT TESTING OUTCOME PROCESSING ------------------------------------ */\n }\n\n return TestProcessingElement as Constructor<TestProcessingInterface> & T;\n};\n","import { consume } from '@lit/context';\nimport { html, LitElement } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport type { TestContext } from '../context';\nimport { testContext } from '../context';\nimport type { QtiAssessmentItem } from '../../../qti-components';\n\n// Converter function to interpret \"true\" and \"false\" as booleans\nconst stringToBooleanConverter = {\n fromAttribute(value: string): boolean {\n return value === 'true';\n },\n toAttribute(value: boolean): string {\n return value ? 'true' : 'false';\n }\n};\n\n// @customElement('qti-assessment-item-ref')\nexport class QtiAssessmentItemRef extends LitElement {\n @property({ type: String }) category?: string;\n @property({ type: String }) identifier?: string;\n @property({ type: Boolean, converter: stringToBooleanConverter }) required?: boolean;\n @property({ type: Boolean, converter: stringToBooleanConverter }) fixed?: boolean;\n @property({ type: String }) href?: string;\n\n @consume({ context: testContext, subscribe: true })\n public _testContext?: TestContext;\n\n weigths: Map<string, number> = new Map();\n\n @property({ type: Object, attribute: false })\n xmlDoc!: DocumentFragment; // the XMLDocument\n\n protected createRenderRoot(): HTMLElement | DocumentFragment {\n return this;\n }\n\n get assessmentItem(): QtiAssessmentItem | null {\n return this.renderRoot?.querySelector('qti-assessment-item');\n }\n\n async connectedCallback(): Promise<void> {\n // debugger;\n super.connectedCallback();\n await this.updateComplete;\n this.dispatchEvent(\n new CustomEvent('qti-assessment-item-ref-connected', {\n bubbles: true,\n composed: true,\n detail: { identifier: this.identifier, href: this.href, category: this.category }\n })\n );\n }\n\n render() {\n return html`${this.xmlDoc}`;\n }\n}\n\nif (!customElements.get('qti-assessment-item-ref')) {\n customElements.define('qti-assessment-item-ref', QtiAssessmentItemRef);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'qti-assessment-item-ref': QtiAssessmentItemRef;\n }\n}\n","import { consume } from '@lit/context';\nimport { html, LitElement } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport type { TestContext } from '../context';\nimport { testContext } from '../context';\n\n// https://www.imsglobal.org/sites/default/files/spec/qti/v3/info/index.html#Root_AssessmentSection\n\nconst stringToBooleanConverter = {\n fromAttribute(value: string): boolean {\n return value === 'true';\n },\n toAttribute(value: boolean): string {\n return value ? 'true' : 'false';\n }\n};\n\nexport class QtiAssessmentSection extends LitElement {\n @property({ type: String }) identifier: string;\n @property({ type: String }) required: string;\n @property({ type: Boolean, converter: stringToBooleanConverter }) fixed: boolean;\n @property({ type: String }) title: string;\n @property({ type: Boolean, converter: stringToBooleanConverter }) visible: boolean;\n @property({ type: Boolean, converter: stringToBooleanConverter, attribute: 'keep-together' }) keepTogether: boolean;\n\n @consume({ context: testContext, subscribe: true })\n public _testContext?: TestContext;\n\n async connectedCallback(): Promise<void> {\n super.connectedCallback();\n await this.updateComplete;\n this.dispatchEvent(\n new Event('qti-assessment-section-connected', {\n bubbles: true,\n composed: true\n })\n );\n }\n\n render() {\n return html`<slot name=\"qti-rubric-block\"></slot><slot></slot>`;\n }\n}\n\nif (!customElements.get('qti-assessment-section')) {\n customElements.define('qti-assessment-section', QtiAssessmentSection);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'qti-assessment-section': QtiAssessmentSection;\n }\n}\n","import { consume } from '@lit/context';\nimport { html, LitElement } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport type { TestContext } from '../context';\nimport { testContext } from '../context';\n\n@customElement('qti-assessment-test')\nexport class QtiAssessmentTest extends LitElement {\n @property({ type: String }) identifier: string;\n @property({ type: String }) title: string;\n\n @consume({ context: testContext, subscribe: true })\n public _testContext?: TestContext;\n\n async connectedCallback(): Promise<void> {\n super.connectedCallback();\n await this.updateComplete;\n this.dispatchEvent(\n new CustomEvent('qti-assessment-test-connected', {\n detail: this,\n bubbles: true,\n composed: true\n })\n );\n }\n\n render() {\n return html` <slot></slot>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'qti-assessment-test': QtiAssessmentTest;\n }\n}\n","import { html, LitElement } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n@customElement('qti-test-part')\nexport class QtiTestPart extends LitElement {\n @property({ type: String }) identifier: string = '';\n @property({ type: String }) title: string = '';\n @property({ type: String }) class: string = '';\n\n @property({ type: String, attribute: 'navigation-mode' })\n NavigationMode: 'linear' | 'nonlinear' = 'nonlinear';\n\n @property({ type: String, attribute: 'submission-mode' })\n submissionMode: 'individual' | 'simultaneous' = 'individual';\n\n async connectedCallback(): Promise<void> {\n super.connectedCallback();\n await this.updateComplete;\n this.dispatchEvent(\n new Event('qti-test-part-connected', {\n bubbles: true,\n composed: true\n })\n );\n }\n\n render() {\n return html` <slot></slot>`;\n }\n}\n\nif (!customElements.get('qti-test-part')) {\n customElements.define('qti-test-part', QtiTestPart);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'qti-test-part': QtiTestPart;\n }\n}\n"],"mappings":"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","names":["html","customElement","property","property","LitElement","state","LitElement","testContext","state","html","customElement","html","LitElement","property","LitElement","html","property","consume","html","LitElement","property","stringToBooleanConverter","LitElement","html","property","consume","consume","html","LitElement","customElement","property","LitElement","html","property","consume","customElement","html","LitElement","customElement","property","LitElement","html","property","customElement"]}
package/dist/index.d.ts CHANGED
@@ -1,13 +1,15 @@
1
- export { O as Orientation, Q as QtiAssessmentItem, a as QtiAssessmentStimulusRef, g as QtiAssociableHotspot, h as QtiAssociateInteraction, i as QtiChoiceInteraction, b as QtiCompanionMaterialsInfo, W as QtiContentBody, j as QtiCustomInteraction, c as QtiCustomOperator, k as QtiEndAttemptInteraction, l as QtiExtendedTextInteraction, d as QtiFeedbackBlock, e as QtiFeedbackInline, p as QtiGap, m as QtiGapImg, n as QtiGapMatchInteraction, o as QtiGapText, q as QtiGraphicAssociateInteraction, r as QtiGraphicGapMatchInteraction, s as QtiGraphicOrderInteraction, t as QtiHotspotChoice, u as QtiHotspotInteraction, w as QtiHottext, v as QtiHottextInteraction, y as QtiInlineChoice, x as QtiInlineChoiceInteraction, K as QtiItemBody, R as QtiLookupOutcomeValue, z as QtiMatchInteraction, A as QtiMediaInteraction, f as QtiModalFeedback, B as QtiOrderInteraction, Z as QtiOutcomeDeclaration, L as QtiOutcomeProcessing, M as QtiOutcomeProcessingProcessor, C as QtiPortableCustomInteraction, D as QtiPositionObjectStage, N as QtiPrompt, _ as QtiResponseDeclaration, P as QtiResponseProcessing, X as QtiRubricBlock, U as QtiRule, V as QtiRuleBase, E as QtiSelectPointInteraction, F as QtiSimpleAssociableChoice, G as QtiSimpleChoice, H as QtiSliderInteraction, Y as QtiStylesheet, S as QtiSubtract, I as QtiTextEntryInteraction, J as QtiUploadInteraction, T as qtiSubtractMixin } from './qti-response-declaration-DAeBp8HH.js';
1
+ export { O as Orientation, Q as QtiAssessmentItem, a as QtiAssessmentStimulusRef, g as QtiAssociableHotspot, h as QtiAssociateInteraction, i as QtiChoiceInteraction, b as QtiCompanionMaterialsInfo, W as QtiContentBody, j as QtiCustomInteraction, c as QtiCustomOperator, k as QtiEndAttemptInteraction, l as QtiExtendedTextInteraction, d as QtiFeedbackBlock, e as QtiFeedbackInline, p as QtiGap, m as QtiGapImg, n as QtiGapMatchInteraction, o as QtiGapText, q as QtiGraphicAssociateInteraction, r as QtiGraphicGapMatchInteraction, s as QtiGraphicOrderInteraction, t as QtiHotspotChoice, u as QtiHotspotInteraction, w as QtiHottext, v as QtiHottextInteraction, y as QtiInlineChoice, x as QtiInlineChoiceInteraction, K as QtiItemBody, R as QtiLookupOutcomeValue, z as QtiMatchInteraction, A as QtiMediaInteraction, f as QtiModalFeedback, B as QtiOrderInteraction, Z as QtiOutcomeDeclaration, L as QtiOutcomeProcessing, M as QtiOutcomeProcessingProcessor, C as QtiPortableCustomInteraction, D as QtiPositionObjectStage, N as QtiPrompt, _ as QtiResponseDeclaration, P as QtiResponseProcessing, X as QtiRubricBlock, U as QtiRule, V as QtiRuleBase, E as QtiSelectPointInteraction, F as QtiSimpleAssociableChoice, G as QtiSimpleChoice, H as QtiSliderInteraction, Y as QtiStylesheet, S as QtiSubtract, I as QtiTextEntryInteraction, J as QtiUploadInteraction, T as qtiSubtractMixin } from './qti-response-declaration-Di9CsqiJ.js';
2
2
  export { QtiAnd, QtiBaseValue, QtiContains, QtiCorrect, QtiEqual, QtiEqualRounded, QtiGt, QtiGte, QtiIsNull, QtiLt, QtiLte, QtiMapResponse, QtiMatch, QtiMember, QtiMultiple, QtiNot, QtiOr, QtiOrdered, QtiPositionObjectInteraction, QtiPrintedVariable, QtiProduct, QtiResponseCondition, QtiResponseElse, QtiResponseElseIf, QtiResponseIf, QtiSetOutcomeValue, QtiSetOutcomeValueRule, QtiStringMatch, QtiSum, QtiSumExpression, QtiVariable, qtiAndMixin } from './qti-components/index.js';
3
3
  export { Q as QtiMapping } from './variables-cO3DzqJy.js';
4
4
  export { QtiTest, TestContainer } from './qti-test/core/index.js';
5
- export { Q as QtiAssessmentItemRef, a as QtiAssessmentSection, b as QtiAssessmentTest, c as QtiTestPart, T as TestContext, d as TestElement, t as testContext, e as testElement } from './test.context-CaENAJNk.js';
5
+ export { Q as QtiAssessmentItemRef, a as QtiAssessmentSection, b as QtiAssessmentTest, c as QtiTestPart, T as TestContext, d as TestElement, t as testContext, e as testElement } from './test.context-CmsDQ8k2.js';
6
6
  export { TestComponent } from './qti-test/components/test-component.abstract.js';
7
7
  export { TestNext } from './qti-test/components/test-next.js';
8
8
  export { TestPrev } from './qti-test/components/test-prev.js';
9
9
  export { TestView } from './qti-test/components/test-view.js';
10
10
  export { TestItemLink } from './qti-test/components/test-item-link.js';
11
+ export { TestEndAttempt } from './qti-test/components/test-end-attempt.js';
12
+ export { TestShowCorrectResponse } from './qti-test/components/test-show-correct-response.js';
11
13
  export { TestPagingButtonsStamp } from './qti-test/components/test-paging-buttons-stamp.js';
12
14
  export { ItemContainer, QtiItem } from './qti-item/core/index.js';
13
15
  export { ManifestInfo, getItemByUri, getManifestInfo } from './qti-loader/index.js';
package/dist/index.js CHANGED
@@ -5,7 +5,7 @@ import {
5
5
  QtiTest,
6
6
  QtiTestPart,
7
7
  TestContainer
8
- } from "./chunks/chunk-4GNVYCBN.js";
8
+ } from "./chunks/chunk-ZQXZ6PK7.js";
9
9
  import {
10
10
  QtiAnd,
11
11
  QtiAssessmentItem,
@@ -91,7 +91,7 @@ import {
91
91
  QtiVariable,
92
92
  qtiAndMixin,
93
93
  qtiSubtractMixin
94
- } from "./chunks/chunk-ZHAJ3CMP.js";
94
+ } from "./chunks/chunk-MEQM6M67.js";
95
95
  import {
96
96
  getItemByUri,
97
97
  getManifestInfo
@@ -99,37 +99,43 @@ import {
99
99
  import {
100
100
  ItemContainer,
101
101
  QtiItem
102
- } from "./chunks/chunk-HHVRU3AJ.js";
103
- import "./chunks/chunk-J2SHENRN.js";
102
+ } from "./chunks/chunk-XCHS3RTZ.js";
103
+ import "./chunks/chunk-NZQKGIJP.js";
104
104
  import {
105
105
  qtiTransformItem,
106
106
  qtiTransformManifest,
107
107
  qtiTransformTest
108
108
  } from "./chunks/chunk-XDMSEAYC.js";
109
- import "./chunks/chunk-UN2IFSGC.js";
109
+ import "./chunks/chunk-HOTNM5DT.js";
110
+ import {
111
+ TestEndAttempt
112
+ } from "./chunks/chunk-VAPB5TN4.js";
110
113
  import {
111
114
  TestItemLink
112
- } from "./chunks/chunk-7QMCKYDR.js";
115
+ } from "./chunks/chunk-NHA53UTY.js";
113
116
  import {
114
117
  TestNext
115
- } from "./chunks/chunk-6JXR63MH.js";
118
+ } from "./chunks/chunk-5RTLOB3Q.js";
116
119
  import {
117
120
  TestPagingButtonsStamp
118
- } from "./chunks/chunk-KYAIMBP5.js";
121
+ } from "./chunks/chunk-YQB6YLNW.js";
119
122
  import {
120
123
  TestPrev
121
- } from "./chunks/chunk-GSWZT6N2.js";
124
+ } from "./chunks/chunk-4MQV5IRV.js";
125
+ import {
126
+ TestShowCorrectResponse
127
+ } from "./chunks/chunk-Z5THRO6Z.js";
122
128
  import {
123
129
  TestView
124
- } from "./chunks/chunk-A24F75DB.js";
130
+ } from "./chunks/chunk-WWN5AD6V.js";
125
131
  import "./chunks/chunk-4O5F7WV7.js";
126
132
  import {
127
133
  TestComponent
128
- } from "./chunks/chunk-3EU75IUF.js";
134
+ } from "./chunks/chunk-MLT7V47R.js";
129
135
  import {
130
136
  testContext,
131
137
  testElement
132
- } from "./chunks/chunk-UFYWCLXF.js";
138
+ } from "./chunks/chunk-AUWATZ65.js";
133
139
  import "./chunks/chunk-D3RGDWKP.js";
134
140
  import "./chunks/chunk-ELDMXTUQ.js";
135
141
  import "./chunks/chunk-OIRWOI3E.js";
@@ -230,10 +236,12 @@ export {
230
236
  QtiVariable,
231
237
  TestComponent,
232
238
  TestContainer,
239
+ TestEndAttempt,
233
240
  TestItemLink,
234
241
  TestNext,
235
242
  TestPagingButtonsStamp,
236
243
  TestPrev,
244
+ TestShowCorrectResponse,
237
245
  TestView,
238
246
  getItemByUri,
239
247
  getManifestInfo,
package/dist/item.css CHANGED
@@ -2620,6 +2620,14 @@ qti-response-declaration {
2620
2620
  mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='currentColor' width='100%' height='100%' viewBox='0 0 24 24'%3E%3Cpath d='M20.285 2l-11.285 11.567-5.286-5.011-3.714 3.716 9 8.728 15-15.285z'/%3E%3C/svg%3E");
2621
2621
  }
2622
2622
 
2623
+ &:state(correct-response),
2624
+ &[data-correct-response='true'] {
2625
+ &::after {
2626
+ content: '\02714';
2627
+ color: #16a34a; /* text-green-600 */
2628
+ }
2629
+ }
2630
+
2623
2631
  gap: 0.5rem;
2624
2632
 
2625
2633
  border-radius: var(--qti-border-radius);
@@ -2631,8 +2639,6 @@ qti-response-declaration {
2631
2639
  cursor: pointer
2632
2640
  }
2633
2641
 
2634
- /* } */
2635
-
2636
2642
  &.qti-input-control-hidden {
2637
2643
  qti-hottext {
2638
2644
  /* --qti-padding-md: 0.1rem;
@@ -1,5 +1,5 @@
1
- import { U as QtiRule, V as QtiRuleBase } from '../qti-response-declaration-DAeBp8HH.js';
2
- export { O as Orientation, Q as QtiAssessmentItem, a as QtiAssessmentStimulusRef, g as QtiAssociableHotspot, h as QtiAssociateInteraction, i as QtiChoiceInteraction, b as QtiCompanionMaterialsInfo, W as QtiContentBody, j as QtiCustomInteraction, c as QtiCustomOperator, k as QtiEndAttemptInteraction, l as QtiExtendedTextInteraction, d as QtiFeedbackBlock, e as QtiFeedbackInline, p as QtiGap, m as QtiGapImg, n as QtiGapMatchInteraction, o as QtiGapText, q as QtiGraphicAssociateInteraction, r as QtiGraphicGapMatchInteraction, s as QtiGraphicOrderInteraction, t as QtiHotspotChoice, u as QtiHotspotInteraction, w as QtiHottext, v as QtiHottextInteraction, y as QtiInlineChoice, x as QtiInlineChoiceInteraction, K as QtiItemBody, R as QtiLookupOutcomeValue, z as QtiMatchInteraction, A as QtiMediaInteraction, f as QtiModalFeedback, B as QtiOrderInteraction, Z as QtiOutcomeDeclaration, L as QtiOutcomeProcessing, M as QtiOutcomeProcessingProcessor, C as QtiPortableCustomInteraction, D as QtiPositionObjectStage, N as QtiPrompt, _ as QtiResponseDeclaration, P as QtiResponseProcessing, X as QtiRubricBlock, E as QtiSelectPointInteraction, F as QtiSimpleAssociableChoice, G as QtiSimpleChoice, H as QtiSliderInteraction, Y as QtiStylesheet, S as QtiSubtract, I as QtiTextEntryInteraction, J as QtiUploadInteraction, T as qtiSubtractMixin } from '../qti-response-declaration-DAeBp8HH.js';
1
+ import { U as QtiRule, V as QtiRuleBase } from '../qti-response-declaration-Di9CsqiJ.js';
2
+ export { O as Orientation, Q as QtiAssessmentItem, a as QtiAssessmentStimulusRef, g as QtiAssociableHotspot, h as QtiAssociateInteraction, i as QtiChoiceInteraction, b as QtiCompanionMaterialsInfo, W as QtiContentBody, j as QtiCustomInteraction, c as QtiCustomOperator, k as QtiEndAttemptInteraction, l as QtiExtendedTextInteraction, d as QtiFeedbackBlock, e as QtiFeedbackInline, p as QtiGap, m as QtiGapImg, n as QtiGapMatchInteraction, o as QtiGapText, q as QtiGraphicAssociateInteraction, r as QtiGraphicGapMatchInteraction, s as QtiGraphicOrderInteraction, t as QtiHotspotChoice, u as QtiHotspotInteraction, w as QtiHottext, v as QtiHottextInteraction, y as QtiInlineChoice, x as QtiInlineChoiceInteraction, K as QtiItemBody, R as QtiLookupOutcomeValue, z as QtiMatchInteraction, A as QtiMediaInteraction, f as QtiModalFeedback, B as QtiOrderInteraction, Z as QtiOutcomeDeclaration, L as QtiOutcomeProcessing, M as QtiOutcomeProcessingProcessor, C as QtiPortableCustomInteraction, D as QtiPositionObjectStage, N as QtiPrompt, _ as QtiResponseDeclaration, P as QtiResponseProcessing, X as QtiRubricBlock, E as QtiSelectPointInteraction, F as QtiSimpleAssociableChoice, G as QtiSimpleChoice, H as QtiSliderInteraction, Y as QtiStylesheet, S as QtiSubtract, I as QtiTextEntryInteraction, J as QtiUploadInteraction, T as qtiSubtractMixin } from '../qti-response-declaration-Di9CsqiJ.js';
3
3
  import * as lit from 'lit';
4
4
  import { LitElement } from 'lit';
5
5
  import * as lit_html from 'lit-html';
@@ -83,7 +83,7 @@ import {
83
83
  QtiVariable,
84
84
  qtiAndMixin,
85
85
  qtiSubtractMixin
86
- } from "../chunks/chunk-ZHAJ3CMP.js";
86
+ } from "../chunks/chunk-MEQM6M67.js";
87
87
  import "../chunks/chunk-XDMSEAYC.js";
88
88
  import "../chunks/chunk-D3RGDWKP.js";
89
89
  import "../chunks/chunk-ELDMXTUQ.js";
@@ -839,8 +839,6 @@ export type TestNextProps = {
839
839
  /** */
840
840
  disabled?: boolean;
841
841
  /** */
842
- "onon-test-switch-view"?: (e: CustomEvent<CustomEvent>) => void;
843
- /** */
844
842
  "onqti-request-test-item"?: (e: CustomEvent<CustomEvent>) => void;
845
843
  };
846
844
 
@@ -852,8 +850,6 @@ export type TestPrevProps = {
852
850
  /** */
853
851
  disabled?: boolean;
854
852
  /** */
855
- "onon-test-switch-view"?: (e: CustomEvent<CustomEvent>) => void;
856
- /** */
857
853
  "onqti-request-test-item"?: (e: CustomEvent<CustomEvent>) => void;
858
854
  };
859
855
 
@@ -866,8 +862,6 @@ export type TestViewProps = {
866
862
  disabled?: boolean;
867
863
  /** */
868
864
  "onon-test-switch-view"?: (e: CustomEvent<CustomEvent>) => void;
869
- /** */
870
- "onqti-request-test-item"?: (e: CustomEvent<CustomEvent>) => void;
871
865
  };
872
866
 
873
867
  export type TestItemLinkProps = {
@@ -876,38 +870,48 @@ export type TestItemLinkProps = {
876
870
  /** */
877
871
  disabled?: boolean;
878
872
  /** */
879
- "onon-test-switch-view"?: (e: CustomEvent<CustomEvent>) => void;
880
- /** */
881
873
  "onqti-request-test-item"?: (e: CustomEvent<CustomEvent>) => void;
882
874
  };
883
875
 
884
- export type TestPagingButtonsStampProps = {
876
+ export type TestContainerProps = {
877
+ /** URL of the item to load */
878
+ "test-url"?: string;
879
+ /** A parsed HTML document */
880
+ testDoc?: DocumentFragment;
881
+ /** The raw XML string */
882
+ testXML?: string;
883
+ };
884
+
885
+ export type QtiTestProps = {
886
+ /** Items will be scored on everyinteraction when `qti-assessment-item` is not set to adaptive, and the `SCORE` outcome identifier is not set to be "human" | "externalMachine" */
887
+ "auto-score-items"?: boolean;
885
888
  /** */
886
- "max-displayed-items"?: number;
889
+ "auto-store-restore"?: boolean;
887
890
  /** */
888
- "skip-on-category"?: string;
891
+ context?: TestContext;
889
892
  /** */
890
- ariaLabel?: string;
893
+ "onqti-test-connected"?: (e: CustomEvent<CustomEvent>) => void;
894
+ };
895
+
896
+ export type TestEndAttemptProps = {
891
897
  /** */
892
898
  disabled?: boolean;
893
- /** */
894
- "onon-test-switch-view"?: (e: CustomEvent<CustomEvent>) => void;
895
- /** */
896
- "onqti-request-test-item"?: (e: CustomEvent<CustomEvent>) => void;
897
899
  };
898
900
 
899
- export type QtiTestProps = {
901
+ export type TestShowCorrectResponseProps = {
900
902
  /** */
901
- context?: TestContext;
903
+ disabled?: boolean;
902
904
  };
903
905
 
904
- export type TestContainerProps = {
905
- /** URL of the item to load */
906
- "test-url"?: string;
907
- /** A parsed HTML document */
908
- testDoc?: DocumentFragment;
909
- /** The raw XML string */
910
- testXML?: string;
906
+ export type TestPagingButtonsStampProps = {
907
+ /** */
908
+ "max-displayed-items"?: number;
909
+ /** */
910
+ "skip-on-category"?: string;
911
+ /** */
912
+ ariaLabel?: string;
913
+ /** */
914
+ disabled?: boolean;
911
915
  };
912
916
 
913
917
  export type QtiTestVariablesProps = {
@@ -1163,6 +1167,9 @@ export type CustomElements = {
1163
1167
  * - **qti-outcome-changed** - Emitted when an outcome has changed.
1164
1168
  * - **qti-response-processing** - Emitted when response-processing is called.
1165
1169
  *
1170
+ * ### **Methods:**
1171
+ * - **showCorrectResponse(show: _boolean_): _void_** - Toggles the display of correct responses for interactions.
1172
+ *
1166
1173
  * ### **Slots:**
1167
1174
  * - _default_ - The default slot where all the other QTI 3 item structures go.
1168
1175
  */
@@ -1700,8 +1707,7 @@ export type CustomElements = {
1700
1707
  *
1701
1708
  *
1702
1709
  * ### **Events:**
1703
- * - **on-test-switch-view**
1704
- * - **qti-request-test-item**
1710
+ * - **qti-request-test-item**
1705
1711
  */
1706
1712
  "test-next": Partial<TestNextProps & BaseProps & BaseEvents>;
1707
1713
 
@@ -1711,8 +1717,7 @@ export type CustomElements = {
1711
1717
  *
1712
1718
  *
1713
1719
  * ### **Events:**
1714
- * - **on-test-switch-view**
1715
- * - **qti-request-test-item**
1720
+ * - **qti-request-test-item**
1716
1721
  */
1717
1722
  "test-prev": Partial<TestPrevProps & BaseProps & BaseEvents>;
1718
1723
 
@@ -1723,7 +1728,6 @@ export type CustomElements = {
1723
1728
  *
1724
1729
  * ### **Events:**
1725
1730
  * - **on-test-switch-view**
1726
- * - **qti-request-test-item**
1727
1731
  */
1728
1732
  "test-view": Partial<TestViewProps & BaseProps & BaseEvents>;
1729
1733
 
@@ -1733,21 +1737,24 @@ export type CustomElements = {
1733
1737
  *
1734
1738
  *
1735
1739
  * ### **Events:**
1736
- * - **on-test-switch-view**
1737
- * - **qti-request-test-item**
1740
+ * - **qti-request-test-item**
1738
1741
  */
1739
1742
  "test-item-link": Partial<TestItemLinkProps & BaseProps & BaseEvents>;
1740
1743
 
1741
1744
  /**
1745
+ * `<test-container>` is a custom element designed for hosting the qti-assessment-item.
1746
+ * The `qti-assessment-test` will be placed inside the shadow DOM of this element.
1747
+ * The element loads the test from the provided URL and renders it inside the shadow DOM.
1742
1748
  *
1749
+ * ```html
1750
+ * <qti-test>
1751
+ * <test-container class="m-4 bg-white" test-url="./path/to/assessmenttest.xml"></test-container>
1752
+ * </qti-test>
1753
+ * ```
1743
1754
  * ---
1744
1755
  *
1745
- *
1746
- * ### **Events:**
1747
- * - **on-test-switch-view**
1748
- * - **qti-request-test-item**
1749
1756
  */
1750
- "test-paging-buttons-stamp": Partial<TestPagingButtonsStampProps & BaseProps & BaseEvents>;
1757
+ "test-container": Partial<TestContainerProps & BaseProps & BaseEvents>;
1751
1758
 
1752
1759
  /**
1753
1760
  * `<qti-test>` is a custom element designed for rendering and interacting with QTI (Question and Test Interoperability) tests.
@@ -1795,23 +1802,32 @@ export type CustomElements = {
1795
1802
  * And you can use the `test-prev` and `test-next` elements to navigate through the test.
1796
1803
  * ---
1797
1804
  *
1805
+ *
1806
+ * ### **Events:**
1807
+ * - **qti-test-connected**
1798
1808
  */
1799
1809
  "qti-test": Partial<QtiTestProps & BaseProps & BaseEvents>;
1800
1810
 
1801
1811
  /**
1802
- * `<test-container>` is a custom element designed for hosting the qti-assessment-item.
1803
- * The `qti-assessment-test` will be placed inside the shadow DOM of this element.
1804
- * The element loads the test from the provided URL and renders it inside the shadow DOM.
1805
1812
  *
1806
- * ```html
1807
- * <qti-test>
1808
- * <test-container class="m-4 bg-white" test-url="./path/to/assessmenttest.xml"></test-container>
1809
- * </qti-test>
1810
- * ```
1811
1813
  * ---
1812
1814
  *
1813
1815
  */
1814
- "test-container": Partial<TestContainerProps & BaseProps & BaseEvents>;
1816
+ "test-end-attempt": Partial<TestEndAttemptProps & BaseProps & BaseEvents>;
1817
+
1818
+ /**
1819
+ *
1820
+ * ---
1821
+ *
1822
+ */
1823
+ "test-show-correct-response": Partial<TestShowCorrectResponseProps & BaseProps & BaseEvents>;
1824
+
1825
+ /**
1826
+ *
1827
+ * ---
1828
+ *
1829
+ */
1830
+ "test-paging-buttons-stamp": Partial<TestPagingButtonsStampProps & BaseProps & BaseEvents>;
1815
1831
 
1816
1832
  /**
1817
1833
  *
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  ItemContainer,
3
3
  QtiItem
4
- } from "../../chunks/chunk-HHVRU3AJ.js";
5
- import "../../chunks/chunk-J2SHENRN.js";
4
+ } from "../../chunks/chunk-XCHS3RTZ.js";
5
+ import "../../chunks/chunk-NZQKGIJP.js";
6
6
  import "../../chunks/chunk-XDMSEAYC.js";
7
7
  import "../../chunks/chunk-ELDMXTUQ.js";
8
8
  import "../../chunks/chunk-H2JE6IVU.js";
@@ -1,4 +1,4 @@
1
- import { Q as QtiAssessmentItem } from '../qti-response-declaration-DAeBp8HH.js';
1
+ import { Q as QtiAssessmentItem } from '../qti-response-declaration-Di9CsqiJ.js';
2
2
  import 'lit-html';
3
3
  import 'lit';
4
4
  import '../exports/expression-result.js';
@@ -45,6 +45,10 @@ declare class QtiAssessmentItem extends LitElement {
45
45
  set responses(myResponses: ResponseInteraction[]);
46
46
  render(): lit_html.TemplateResult<1>;
47
47
  constructor();
48
+ /**
49
+ * Toggles the display of correct responses for interactions.
50
+ * @param show - A boolean indicating whether to show or hide correct responses.
51
+ */
48
52
  showCorrectResponse(show: boolean): void;
49
53
  processResponse(countNumAttempts?: boolean): boolean;
50
54
  resetResponses(): void;
@@ -3,14 +3,16 @@ export { TestNext } from './test-next.js';
3
3
  export { TestPrev } from './test-prev.js';
4
4
  export { TestView } from './test-view.js';
5
5
  export { TestItemLink } from './test-item-link.js';
6
+ export { TestEndAttempt } from './test-end-attempt.js';
7
+ export { TestShowCorrectResponse } from './test-show-correct-response.js';
6
8
  export { TestPagingButtonsStamp } from './test-paging-buttons-stamp.js';
7
9
  import 'lit';
8
- import '../../test.context-CaENAJNk.js';
10
+ import '../../test.context-CmsDQ8k2.js';
9
11
  import 'lit-html';
10
12
  import '../../variables-cO3DzqJy.js';
11
13
  import '../../exports/expression-result.js';
12
14
  import '../../exports/item.context.js';
13
- import '../../qti-response-declaration-DAeBp8HH.js';
15
+ import '../../qti-response-declaration-Di9CsqiJ.js';
14
16
  import '../../exports/interaction.interface.js';
15
17
  import '../../exports/interaction.js';
16
18
  import 'lit-html/directives/ref.js';
@@ -1,33 +1,41 @@
1
- import "../../chunks/chunk-UN2IFSGC.js";
1
+ import "../../chunks/chunk-HOTNM5DT.js";
2
+ import {
3
+ TestEndAttempt
4
+ } from "../../chunks/chunk-VAPB5TN4.js";
2
5
  import {
3
6
  TestItemLink
4
- } from "../../chunks/chunk-7QMCKYDR.js";
7
+ } from "../../chunks/chunk-NHA53UTY.js";
5
8
  import {
6
9
  TestNext
7
- } from "../../chunks/chunk-6JXR63MH.js";
10
+ } from "../../chunks/chunk-5RTLOB3Q.js";
8
11
  import {
9
12
  TestPagingButtonsStamp
10
- } from "../../chunks/chunk-KYAIMBP5.js";
13
+ } from "../../chunks/chunk-YQB6YLNW.js";
11
14
  import {
12
15
  TestPrev
13
- } from "../../chunks/chunk-GSWZT6N2.js";
16
+ } from "../../chunks/chunk-4MQV5IRV.js";
17
+ import {
18
+ TestShowCorrectResponse
19
+ } from "../../chunks/chunk-Z5THRO6Z.js";
14
20
  import {
15
21
  TestView
16
- } from "../../chunks/chunk-A24F75DB.js";
22
+ } from "../../chunks/chunk-WWN5AD6V.js";
17
23
  import "../../chunks/chunk-4O5F7WV7.js";
18
24
  import {
19
25
  TestComponent
20
- } from "../../chunks/chunk-3EU75IUF.js";
21
- import "../../chunks/chunk-UFYWCLXF.js";
26
+ } from "../../chunks/chunk-MLT7V47R.js";
27
+ import "../../chunks/chunk-AUWATZ65.js";
22
28
  import "../../chunks/chunk-D3RGDWKP.js";
23
29
  import "../../chunks/chunk-ELDMXTUQ.js";
24
30
  import "../../chunks/chunk-H2JE6IVU.js";
25
31
  export {
26
32
  TestComponent,
33
+ TestEndAttempt,
27
34
  TestItemLink,
28
35
  TestNext,
29
36
  TestPagingButtonsStamp,
30
37
  TestPrev,
38
+ TestShowCorrectResponse,
31
39
  TestView
32
40
  };
33
41
  //# sourceMappingURL=index.js.map
@@ -1,10 +1,10 @@
1
1
  import { LitElement } from 'lit';
2
- import { T as TestContext, d as TestElement } from '../../test.context-CaENAJNk.js';
2
+ import { T as TestContext, d as TestElement } from '../../test.context-CmsDQ8k2.js';
3
3
  import 'lit-html';
4
4
  import '../../variables-cO3DzqJy.js';
5
5
  import '../../exports/expression-result.js';
6
6
  import '../../exports/item.context.js';
7
- import '../../qti-response-declaration-DAeBp8HH.js';
7
+ import '../../qti-response-declaration-Di9CsqiJ.js';
8
8
  import '../../exports/interaction.interface.js';
9
9
  import '../../exports/interaction.js';
10
10
  import 'lit-html/directives/ref.js';
@@ -21,8 +21,6 @@ declare abstract class TestComponent extends LitElement {
21
21
  protected view: any;
22
22
  constructor();
23
23
  protected willUpdate(changedProperties: Map<string | number | symbol, unknown>): void;
24
- protected _switchView(view: string): void;
25
- protected _requestItem(identifier: string): void;
26
24
  }
27
25
 
28
26
  export { TestComponent };
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  TestComponent
3
- } from "../../chunks/chunk-3EU75IUF.js";
4
- import "../../chunks/chunk-UFYWCLXF.js";
3
+ } from "../../chunks/chunk-MLT7V47R.js";
4
+ import "../../chunks/chunk-AUWATZ65.js";
5
5
  import "../../chunks/chunk-D3RGDWKP.js";
6
6
  import "../../chunks/chunk-ELDMXTUQ.js";
7
7
  import "../../chunks/chunk-H2JE6IVU.js";
@@ -0,0 +1,26 @@
1
+ import * as lit_html from 'lit-html';
2
+ import * as lit from 'lit';
3
+ import { TestComponent } from './test-component.abstract.js';
4
+ import '../../test.context-CmsDQ8k2.js';
5
+ import '../../variables-cO3DzqJy.js';
6
+ import '../../exports/expression-result.js';
7
+ import '../../exports/item.context.js';
8
+ import '../../qti-response-declaration-Di9CsqiJ.js';
9
+ import '../../exports/interaction.interface.js';
10
+ import '../../exports/interaction.js';
11
+ import 'lit-html/directives/ref.js';
12
+ import '../../exports/qti-expression.js';
13
+
14
+ declare class TestEndAttempt extends TestComponent {
15
+ static styles: lit.CSSResult;
16
+ _processResponse(): void;
17
+ constructor();
18
+ render(): lit_html.TemplateResult<1>;
19
+ }
20
+ declare global {
21
+ interface HTMLElementTagNameMap {
22
+ 'test-end-attempt': TestEndAttempt;
23
+ }
24
+ }
25
+
26
+ export { TestEndAttempt };
@@ -0,0 +1,13 @@
1
+ import {
2
+ TestEndAttempt
3
+ } from "../../chunks/chunk-VAPB5TN4.js";
4
+ import "../../chunks/chunk-4O5F7WV7.js";
5
+ import "../../chunks/chunk-MLT7V47R.js";
6
+ import "../../chunks/chunk-AUWATZ65.js";
7
+ import "../../chunks/chunk-D3RGDWKP.js";
8
+ import "../../chunks/chunk-ELDMXTUQ.js";
9
+ import "../../chunks/chunk-H2JE6IVU.js";
10
+ export {
11
+ TestEndAttempt
12
+ };
13
+ //# sourceMappingURL=test-end-attempt.js.map