@citolab/qti-components 6.0.2 → 6.0.3-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.
@@ -1,61 +0,0 @@
1
- import * as lit_html from 'lit-html';
2
- import { LitElement } from 'lit';
3
- import { I as InputResponseFormat, Q as QtiVariableJSON } from '../ExpressionResult-2192c3d8.js';
4
-
5
- declare const TestEvents: {
6
- ON_ITEM_WAS_FINISHED: string;
7
- ON_NO_RESPONSE_ON_SUBMIT: string;
8
- ON_REQUEST_ITEM: string;
9
- ON_TEST_FINISHED: string;
10
- ON_ITEM_READY: string;
11
- };
12
- declare enum NavigationMode {
13
- linear = "linear",
14
- nonlinear = "nonlinear"
15
- }
16
- declare enum SubmissionMode {
17
- individual = "individual",
18
- simultaneous = "simultaneous"
19
- }
20
- declare class QtiTest extends LitElement {
21
- prevButton: HTMLElement;
22
- nextButton: HTMLElement;
23
- /** TEST CHANGES */
24
- /** if test is disabled every item in the test will be disabled */
25
- private readonly disabled;
26
- /** if test is readonly every item in the test will be readonly */
27
- private readonly readonly;
28
- /** The navigation mode is set to linear mode restricting the candidate to attempt each item in turn. Once the candidate moves on they are not permitted to return */
29
- private _navigationMode;
30
- handleNavigationModeChange(old: any, navMode: NavigationMode): void;
31
- /** The submission mode is set to individual mode requiring the candidate to submit their responses on an item-by-item basis */
32
- private _submissionMode;
33
- /** All the items in the test with, href=file (used for location), identifier=uniqueInTest (used for responses) */
34
- items: {
35
- href: string;
36
- identifier: string;
37
- }[];
38
- /** ITEM CHANGES */
39
- /** The item index, set from outside */
40
- readonly itemIndex = 0;
41
- handleItemIndexChange(old: any, itemIndex: Number): void;
42
- private _itemRef;
43
- set qtiContext(context: {
44
- view: 'author' | 'candidate' | 'proctor' | 'scorer' | 'testConstructor' | 'tutor';
45
- });
46
- set itemXML(xml: string);
47
- set manualOutcomeValue(value: any);
48
- set itemResponse(val: InputResponseFormat<QtiVariableJSON>);
49
- private provider;
50
- private _onCheckItem;
51
- private _onScoreItem;
52
- private _onPrevItem;
53
- private _onNextItem;
54
- private _onShowCorrect;
55
- private _onRequestItem;
56
- private _handleSlotchange;
57
- render(): lit_html.TemplateResult<1>;
58
- emit(name: string, options?: CustomEventInit): void;
59
- }
60
-
61
- export { NavigationMode, QtiTest, SubmissionMode, TestEvents };
@@ -1,12 +0,0 @@
1
- import{a as u}from"../chunk-L6436D6O.js";import{a as d}from"../chunk-JQY6IKDF.js";import{a as h,c as i}from"../chunk-NMCIOGD2.js";import{LitElement as r,html as a}from"lit";var m=(n,c)=>{class e extends n{_dispatch(){this.dispatchEvent(new CustomEvent(c,{composed:!0,bubbles:!0,detail:+this.getAttribute("index")}))}connectedCallback(){super.connectedCallback(),this.addEventListener("click",this._dispatch)}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("click",this._dispatch)}}return e};customElements.define("qti-test-next",class extends m(r,"on-next-item"){constructor(){super(...arguments);this.render=()=>a`<slot></slot>`}});customElements.define("qti-test-item",class extends m(r,"on-request-item"){constructor(){super(...arguments);this.render=()=>a`<slot></slot>`}});customElements.define("qti-test-prev",class extends m(r,"on-prev-item"){constructor(){super(...arguments);this.render=()=>a`<slot></slot>`}});customElements.define("qti-test-check",class extends m(r,"on-check-item"){constructor(){super(...arguments);this.render=()=>a`<slot></slot>`}});customElements.define("qti-test-score",class extends m(r,"on-score-item"){constructor(){super(...arguments);this.render=()=>a`<slot></slot>`}});customElements.define("qti-test-show-correct",class extends m(r,"on-show-correct"){constructor(){super(...arguments);this.render=()=>a`<slot></slot>`}});import{html as _,LitElement as E}from"lit";import{ContextProvider as f}from"@lit-labs/context";import{customElement as I,property as l,query as p,state as R}from"lit/decorators.js";var o={ON_ITEM_WAS_FINISHED:"onItemWasFinished",ON_NO_RESPONSE_ON_SUBMIT:"onNoResponseOnSubmit",ON_REQUEST_ITEM:"onRequestItem",ON_TEST_FINISHED:"onTestFinished",ON_ITEM_READY:"onItemReady"},b=(e=>(e.linear="linear",e.nonlinear="nonlinear",e))(b||{}),x=(e=>(e.individual="individual",e.simultaneous="simultaneous",e))(x||{}),t=class extends E{constructor(){super(...arguments);this.disabled=!1;this.readonly=!1;this._navigationMode="nonlinear";this._submissionMode="simultaneous";this.items=[];this.itemIndex=0;this.provider=new f(this,u,{log:e=>{console.log(`[my-app] ${e}`)},view:"candidate"})}handleNavigationModeChange(e,s){this.prevButton.style.visibility=s==="linear"?"hidden":"visible"}handleItemIndexChange(e,s){this.emit(o.ON_REQUEST_ITEM,{detail:s})}set qtiContext(e){this.provider.value.view=e.view,this.provider.updateObservers()}set itemXML(e){this._itemRef&&this._itemRef.remove(),this.insertAdjacentHTML("afterbegin",e)}set manualOutcomeValue(e){this._itemRef.setOutcomeValue("SCORE",e)}set itemResponse(e){this._itemRef&&(this._itemRef.responses=e,this._navigationMode==="linear"&&(this._itemRef.style.filter="blur(5px)",this._itemRef.setAttribute("disabled",""),this.dispatchEvent(new CustomEvent(o.ON_ITEM_WAS_FINISHED))))}_onCheckItem(){return this._itemRef.validateResponses()?(this._itemRef.processResponse(),!0):!1}_onScoreItem(){this._onCheckItem()&&this._itemRef.processResponse()}_onPrevItem(){this.itemIndex>0&&this.emit(o.ON_REQUEST_ITEM,{detail:this.itemIndex-1})}_onNextItem(){if(this._navigationMode==="linear"&&!this._itemRef.validateResponses()){this.dispatchEvent(new CustomEvent(o.ON_NO_RESPONSE_ON_SUBMIT));return}this.itemIndex<this.items.length-1?this.emit(o.ON_REQUEST_ITEM,{detail:this.itemIndex+1}):this.dispatchEvent(new CustomEvent(o.ON_TEST_FINISHED))}_onShowCorrect(){this._itemRef.showCorrectResponse()}_onRequestItem({detail:e}){this.emit(o.ON_REQUEST_ITEM,{detail:e})}_handleSlotchange(e){let s=this.querySelector("qti-assessment-item");s&&(this._itemRef=s,this.disabled&&this._itemRef.setAttribute("disabled",""),this.readonly&&this._itemRef.setAttribute("readonly",""),this.emit(o.ON_ITEM_READY,{detail:s}))}render(){return _`
2
- <slot
3
- @slotchange=${this._handleSlotchange}
4
- @on-prev-item=${this._onPrevItem}
5
- @on-next-item=${this._onNextItem}
6
- @on-check-item=${this._onCheckItem}
7
- @on-score-item=${this._onScoreItem}
8
- @on-request-item=${this._onRequestItem}
9
- @on-show-correct=${this._onShowCorrect}
10
- >
11
- </slot>
12
- `}emit(e,s){let v=new CustomEvent(e,h({bubbles:!0,cancelable:!1,composed:!0,detail:{}},s));this.dispatchEvent(v)}};i([p("qti-test-prev")],t.prototype,"prevButton",2),i([p("qti-test-next")],t.prototype,"nextButton",2),i([l({type:Boolean})],t.prototype,"disabled",2),i([l({type:Boolean})],t.prototype,"readonly",2),i([l({type:String,attribute:"navigation-mode"})],t.prototype,"_navigationMode",2),i([d("_navigationMode",{waitUntilFirstUpdate:!0})],t.prototype,"handleNavigationModeChange",1),i([l({type:String,attribute:"submission-mode"})],t.prototype,"_submissionMode",2),i([l()],t.prototype,"items",2),i([l({type:Number,attribute:"item-index",reflect:!0})],t.prototype,"itemIndex",2),i([d("itemIndex",{waitUntilFirstUpdate:!0})],t.prototype,"handleItemIndexChange",1),i([R()],t.prototype,"_itemRef",2),t=i([I("qti-test")],t);export{b as NavigationMode,t as QtiTest,x as SubmissionMode,o as TestEvents};
@@ -1,102 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } }require('../chunk-HOQW4KDA.cjs');var _cheerio = require('cheerio'); var p = _interopRequireWildcard(_cheerio);var u=(x="type")=>`<?xml version="1.0" encoding="utf-8"?>
2
- <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:qti="http://www.imsglobal.org/xsd/imsqti_v2p1" xmlns:m="http://www.w3.org/1998/Math/MathML">
3
- <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
4
- <xsl:param name="separator" select="' '" />
5
- <xsl:param name="prefix" select="'type:'" />
6
- <xsl:variable name="prefixElements"></xsl:variable>
7
- <xsl:variable name="suffixElements"></xsl:variable>
8
- <!-- passthrough -->
9
- <xsl:template match="*">
10
- <xsl:copy>
11
- <xsl:apply-templates select="* | @* | text()" />
12
- </xsl:copy>
13
- </xsl:template>
14
- <xsl:template match="@* | text()">
15
- <xsl:copy-of select="." />
16
- </xsl:template>
17
-
18
- <xsl:template match="*">
19
- <xsl:variable name="elementName">
20
- <xsl:call-template name="getTypedElementName">
21
- <xsl:with-param name="input" select="." />
22
- </xsl:call-template>
23
- </xsl:variable>
24
- <xsl:element name="{$elementName}">
25
- <xsl:apply-templates select="* | @* | text()" />
26
- </xsl:element>
27
- </xsl:template>
28
-
29
- <!-- custom names -->
30
- <xsl:template name="getType">
31
- <xsl:param name="input" />
32
- <xsl:param name="separator" select="$separator" />
33
- <xsl:param name="prefix" select="$prefix" />
34
- <xsl:variable name="output">
35
- <xsl:choose>
36
- <xsl:when test="contains($input, $separator)">
37
- <xsl:value-of select="substring-before($input, $separator)" />
38
- </xsl:when>
39
- <xsl:otherwise>
40
- <xsl:value-of select="$input" />
41
- </xsl:otherwise>
42
- </xsl:choose>
43
- </xsl:variable>
44
- <xsl:choose>
45
- <xsl:when test="starts-with($output, $prefix) and $output != $prefix">
46
- <xsl:value-of select="substring-after($output, $prefix)" />
47
- </xsl:when>
48
- <xsl:otherwise>
49
- <xsl:variable name="after" select="substring-after($input, $separator)" />
50
- <xsl:if test="$after">
51
- <xsl:call-template name="getType">
52
- <xsl:with-param name="input" select="$after" />
53
- <xsl:with-param name="separator" select="$separator" />
54
- <xsl:with-param name="prefix" select="$prefix" />
55
- </xsl:call-template>
56
- </xsl:if>
57
- </xsl:otherwise>
58
- </xsl:choose>
59
- </xsl:template>
60
-
61
- <xsl:template name="getTypedElementName">
62
- <xsl:param name="input" />
63
- <xsl:variable name="prefixElements" select="document('')//xsl:variable[@name = 'prefixElements']/element" />
64
- <xsl:variable name="suffixElements" select="document('')//xsl:variable[@name = 'suffixElements']/element" />
65
- <xsl:variable name="originalName" select="name($input)" />
66
- <xsl:variable name="type">
67
- <xsl:call-template name="getType">
68
- <xsl:with-param name="input" select="$input/@class" />
69
- </xsl:call-template>
70
- </xsl:variable>
71
- <xsl:value-of select="$originalName" />
72
- <!-- Add prefix elements -->
73
- <xsl:if test="$prefixElements[text() = $originalName]">
74
- <xsl:text>-</xsl:text>
75
- </xsl:if>
76
- <!-- Add suffix to typed elements -->
77
- <xsl:if test="string-length($type)">
78
- <xsl:text>-</xsl:text>
79
- <xsl:value-of select="$type" />
80
- </xsl:if>
81
- <!-- Add suffix to elements -->
82
- <xsl:if test="$suffixElements[text() = $originalName]">
83
- <xsl:text>-</xsl:text>
84
- </xsl:if>
85
- </xsl:template>
86
- </xsl:stylesheet>`,f=`
87
- <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
88
- <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
89
- <xsl:template match="*">
90
- <!-- remove element prefix -->
91
- <xsl:element name="{local-name()}">
92
- <!-- process attributes -->
93
- <xsl:for-each select="@*">
94
- <!-- remove attribute prefix -->
95
- <xsl:attribute name="{local-name()}">
96
- <xsl:value-of select="."/>
97
- </xsl:attribute>
98
- </xsl:for-each>
99
- <xsl:apply-templates/>
100
- </xsl:element>
101
- </xsl:template>
102
- </xsl:stylesheet>`,b= exports.qtiTransform =x=>{let e=x,i=t=>{let l=new DOMParser().parseFromString(e,"text/xml"),a=new XSLTProcessor,n=new DOMParser().parseFromString(t,"text/xml");a.importStylesheet(n);let r=a.transformToFragment(l,document);e=new XMLSerializer().serializeToString(r)},s={mathml(){let t=p.load(e,{xmlMode:!0,xml:!0});return t("math").each((l,a)=>{a.tagName="math-ml"}).find("*").each((l,a)=>{a.tagName=`math-${a.tagName.substring(1)}`}),e=t.xml(),s},removeNamesSpaces(){return i(f),s},pciHooks(t){let l=["hook","module"],a=t.substring(0,t.lastIndexOf("/")),n=new DOMParser().parseFromString(e,"text/xml");for(let r of l)n.querySelectorAll("["+r+"]").forEach(o=>{let m=o.getAttribute(r);!m.startsWith("data:")&&!m.startsWith("http")&&(o.setAttribute("base-url",t),o.setAttribute("module",a+"/"+encodeURIComponent(m+(m.endsWith(".js")?"":".js"))))});return e=new XMLSerializer().serializeToString(n),s},assetsLocation(t,l=["src","href","data"]){let a=t.substring(0,t.lastIndexOf("/")),n=new DOMParser().parseFromString(e,"text/xml");for(let r of l)n.querySelectorAll("["+r+"]").forEach(o=>{let m=o.getAttribute(r);!m.startsWith("data:")&&!m.startsWith("http")&&o.setAttribute(r,a+"/"+encodeURIComponent(m))});return e=new XMLSerializer().serializeToString(n),s},customTypes(){return i(u()),s},suffix(t,l){let a=p.load(e,{xml:!0,xmlMode:!0});return a("*").each((n,r)=>{t.includes(r.name)&&(r.name=`${r.name}-${l}`)}),e=a.xml(),s},fn(t){return e=t(e),s},fnCh(t){let l=p.load(e,{xml:!0,xmlMode:!0});return t(l),e=l.xml(),s},elementNameAttributes(t){return t.forEach(l=>{e=g(e,l,l+` data-element="${l}" `)}),s},print(){return console.log(e),s},xml(){return e=h(e),e}};return s},h= exports.fixSelfClosingTags =x=>{let e=x.split("/>"),i="";for(let s=0;s<e.length-1;s++){let t=e[s].split("<");i+=e[s]+"></"+t[t.length-1].split(" ")[0]+">"}return i+e[e.length-1]};function g(x,e,i){return x.replace(new RegExp(e,"g"),i)}exports.fixSelfClosingTags = h; exports.qtiTransform = b;
@@ -1,18 +0,0 @@
1
- import * as cheerio from 'cheerio';
2
-
3
- declare const qtiTransform: (xmlValue: string) => {
4
- mathml(): any;
5
- removeNamesSpaces(): any;
6
- pciHooks(uri: string): any;
7
- assetsLocation(uri: string, attributes?: string[]): any;
8
- customTypes(): any;
9
- suffix(elements: string[], suffix: string): any;
10
- fn(fn: (xmlString: string) => string): any;
11
- fnCh(fn: (xmlString: cheerio.CheerioAPI) => void): any;
12
- elementNameAttributes(elements: string[]): any;
13
- print(): any;
14
- xml(): string;
15
- };
16
- declare const fixSelfClosingTags: (xml: string) => string;
17
-
18
- export { fixSelfClosingTags, qtiTransform };
@@ -1,102 +0,0 @@
1
- import"../chunk-NMCIOGD2.js";import*as p from"cheerio";var u=(x="type")=>`<?xml version="1.0" encoding="utf-8"?>
2
- <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:qti="http://www.imsglobal.org/xsd/imsqti_v2p1" xmlns:m="http://www.w3.org/1998/Math/MathML">
3
- <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
4
- <xsl:param name="separator" select="' '" />
5
- <xsl:param name="prefix" select="'type:'" />
6
- <xsl:variable name="prefixElements"></xsl:variable>
7
- <xsl:variable name="suffixElements"></xsl:variable>
8
- <!-- passthrough -->
9
- <xsl:template match="*">
10
- <xsl:copy>
11
- <xsl:apply-templates select="* | @* | text()" />
12
- </xsl:copy>
13
- </xsl:template>
14
- <xsl:template match="@* | text()">
15
- <xsl:copy-of select="." />
16
- </xsl:template>
17
-
18
- <xsl:template match="*">
19
- <xsl:variable name="elementName">
20
- <xsl:call-template name="getTypedElementName">
21
- <xsl:with-param name="input" select="." />
22
- </xsl:call-template>
23
- </xsl:variable>
24
- <xsl:element name="{$elementName}">
25
- <xsl:apply-templates select="* | @* | text()" />
26
- </xsl:element>
27
- </xsl:template>
28
-
29
- <!-- custom names -->
30
- <xsl:template name="getType">
31
- <xsl:param name="input" />
32
- <xsl:param name="separator" select="$separator" />
33
- <xsl:param name="prefix" select="$prefix" />
34
- <xsl:variable name="output">
35
- <xsl:choose>
36
- <xsl:when test="contains($input, $separator)">
37
- <xsl:value-of select="substring-before($input, $separator)" />
38
- </xsl:when>
39
- <xsl:otherwise>
40
- <xsl:value-of select="$input" />
41
- </xsl:otherwise>
42
- </xsl:choose>
43
- </xsl:variable>
44
- <xsl:choose>
45
- <xsl:when test="starts-with($output, $prefix) and $output != $prefix">
46
- <xsl:value-of select="substring-after($output, $prefix)" />
47
- </xsl:when>
48
- <xsl:otherwise>
49
- <xsl:variable name="after" select="substring-after($input, $separator)" />
50
- <xsl:if test="$after">
51
- <xsl:call-template name="getType">
52
- <xsl:with-param name="input" select="$after" />
53
- <xsl:with-param name="separator" select="$separator" />
54
- <xsl:with-param name="prefix" select="$prefix" />
55
- </xsl:call-template>
56
- </xsl:if>
57
- </xsl:otherwise>
58
- </xsl:choose>
59
- </xsl:template>
60
-
61
- <xsl:template name="getTypedElementName">
62
- <xsl:param name="input" />
63
- <xsl:variable name="prefixElements" select="document('')//xsl:variable[@name = 'prefixElements']/element" />
64
- <xsl:variable name="suffixElements" select="document('')//xsl:variable[@name = 'suffixElements']/element" />
65
- <xsl:variable name="originalName" select="name($input)" />
66
- <xsl:variable name="type">
67
- <xsl:call-template name="getType">
68
- <xsl:with-param name="input" select="$input/@class" />
69
- </xsl:call-template>
70
- </xsl:variable>
71
- <xsl:value-of select="$originalName" />
72
- <!-- Add prefix elements -->
73
- <xsl:if test="$prefixElements[text() = $originalName]">
74
- <xsl:text>-</xsl:text>
75
- </xsl:if>
76
- <!-- Add suffix to typed elements -->
77
- <xsl:if test="string-length($type)">
78
- <xsl:text>-</xsl:text>
79
- <xsl:value-of select="$type" />
80
- </xsl:if>
81
- <!-- Add suffix to elements -->
82
- <xsl:if test="$suffixElements[text() = $originalName]">
83
- <xsl:text>-</xsl:text>
84
- </xsl:if>
85
- </xsl:template>
86
- </xsl:stylesheet>`,f=`
87
- <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
88
- <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
89
- <xsl:template match="*">
90
- <!-- remove element prefix -->
91
- <xsl:element name="{local-name()}">
92
- <!-- process attributes -->
93
- <xsl:for-each select="@*">
94
- <!-- remove attribute prefix -->
95
- <xsl:attribute name="{local-name()}">
96
- <xsl:value-of select="."/>
97
- </xsl:attribute>
98
- </xsl:for-each>
99
- <xsl:apply-templates/>
100
- </xsl:element>
101
- </xsl:template>
102
- </xsl:stylesheet>`,b=x=>{let e=x,i=t=>{let l=new DOMParser().parseFromString(e,"text/xml"),a=new XSLTProcessor,n=new DOMParser().parseFromString(t,"text/xml");a.importStylesheet(n);let r=a.transformToFragment(l,document);e=new XMLSerializer().serializeToString(r)},s={mathml(){let t=p.load(e,{xmlMode:!0,xml:!0});return t("math").each((l,a)=>{a.tagName="math-ml"}).find("*").each((l,a)=>{a.tagName=`math-${a.tagName.substring(1)}`}),e=t.xml(),s},removeNamesSpaces(){return i(f),s},pciHooks(t){let l=["hook","module"],a=t.substring(0,t.lastIndexOf("/")),n=new DOMParser().parseFromString(e,"text/xml");for(let r of l)n.querySelectorAll("["+r+"]").forEach(o=>{let m=o.getAttribute(r);!m.startsWith("data:")&&!m.startsWith("http")&&(o.setAttribute("base-url",t),o.setAttribute("module",a+"/"+encodeURIComponent(m+(m.endsWith(".js")?"":".js"))))});return e=new XMLSerializer().serializeToString(n),s},assetsLocation(t,l=["src","href","data"]){let a=t.substring(0,t.lastIndexOf("/")),n=new DOMParser().parseFromString(e,"text/xml");for(let r of l)n.querySelectorAll("["+r+"]").forEach(o=>{let m=o.getAttribute(r);!m.startsWith("data:")&&!m.startsWith("http")&&o.setAttribute(r,a+"/"+encodeURIComponent(m))});return e=new XMLSerializer().serializeToString(n),s},customTypes(){return i(u()),s},suffix(t,l){let a=p.load(e,{xml:!0,xmlMode:!0});return a("*").each((n,r)=>{t.includes(r.name)&&(r.name=`${r.name}-${l}`)}),e=a.xml(),s},fn(t){return e=t(e),s},fnCh(t){let l=p.load(e,{xml:!0,xmlMode:!0});return t(l),e=l.xml(),s},elementNameAttributes(t){return t.forEach(l=>{e=g(e,l,l+` data-element="${l}" `)}),s},print(){return console.log(e),s},xml(){return e=h(e),e}};return s},h=x=>{let e=x.split("/>"),i="";for(let s=0;s<e.length-1;s++){let t=e[s].split("<");i+=e[s]+"></"+t[t.length-1].split(" ")[0]+">"}return i+e[e.length-1]};function g(x,e,i){return x.replace(new RegExp(e,"g"),i)}export{h as fixSelfClosingTags,b as qtiTransform};