@qti-components/processing 1.3.3 → 1.3.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.
- package/dist/components/qti-and/qti-and.js +2 -13
- package/dist/components/qti-and/qti-and.js.map +1 -1
- package/dist/components/qti-any-n/qti-any-n.js +0 -1
- package/dist/components/qti-any-n/qti-any-n.js.map +1 -1
- package/dist/components/qti-basevalue/qti-basevalue.js +0 -1
- package/dist/components/qti-basevalue/qti-basevalue.js.map +1 -1
- package/dist/components/qti-container-size/qti-container-size.js +0 -1
- package/dist/components/qti-container-size/qti-container-size.js.map +1 -1
- package/dist/components/qti-contains/qti-contains.js +0 -1
- package/dist/components/qti-contains/qti-contains.js.map +1 -1
- package/dist/components/qti-correct/qti-correct.js +0 -1
- package/dist/components/qti-correct/qti-correct.js.map +1 -1
- package/dist/components/qti-default/qti-default.js +0 -1
- package/dist/components/qti-default/qti-default.js.map +1 -1
- package/dist/components/qti-delete/qti-delete.js +0 -1
- package/dist/components/qti-delete/qti-delete.js.map +1 -1
- package/dist/components/qti-divide/qti-divide.js +0 -1
- package/dist/components/qti-divide/qti-divide.js.map +1 -1
- package/dist/components/qti-duration-gte/qti-duration-gte.js +0 -1
- package/dist/components/qti-duration-gte/qti-duration-gte.js.map +1 -1
- package/dist/components/qti-duration-lt/qti-duration-lt.js +0 -1
- package/dist/components/qti-duration-lt/qti-duration-lt.js.map +1 -1
- package/dist/components/qti-equal/qti-equal.js +0 -1
- package/dist/components/qti-equal/qti-equal.js.map +1 -1
- package/dist/components/qti-equal-rounded/qti-equal-rounded.js +0 -1
- package/dist/components/qti-equal-rounded/qti-equal-rounded.js.map +1 -1
- package/dist/components/qti-field-value/qti-field-value.js +0 -1
- package/dist/components/qti-field-value/qti-field-value.js.map +1 -1
- package/dist/components/qti-gcd/qti.gcd.js +0 -1
- package/dist/components/qti-gcd/qti.gcd.js.map +1 -1
- package/dist/components/qti-gt/qti-gt.js +0 -1
- package/dist/components/qti-gt/qti-gt.js.map +1 -1
- package/dist/components/qti-gte/qti-gte.js +0 -1
- package/dist/components/qti-gte/qti-gte.js.map +1 -1
- package/dist/components/qti-index/qti-index.js +3 -7
- package/dist/components/qti-index/qti-index.js.map +1 -1
- package/dist/components/qti-inside/qti-inside.js +2 -4
- package/dist/components/qti-inside/qti-inside.js.map +1 -1
- package/dist/components/qti-integer-divide/qti-integer-divide.js +0 -1
- package/dist/components/qti-integer-divide/qti-integer-divide.js.map +1 -1
- package/dist/components/qti-integer-modulus/qti-integer-modulus.js +0 -1
- package/dist/components/qti-integer-modulus/qti-integer-modulus.js.map +1 -1
- package/dist/components/qti-integer-to-float/qti-integer-to-float.js +0 -1
- package/dist/components/qti-integer-to-float/qti-integer-to-float.js.map +1 -1
- package/dist/components/qti-is-null/qti-is-null.js +0 -1
- package/dist/components/qti-is-null/qti-is-null.js.map +1 -1
- package/dist/components/qti-lcm/qti-lcm.js +0 -1
- package/dist/components/qti-lcm/qti-lcm.js.map +1 -1
- package/dist/components/qti-lookup-outcome-value/qti-lookup-outcome-value.js +0 -1
- package/dist/components/qti-lookup-outcome-value/qti-lookup-outcome-value.js.map +1 -1
- package/dist/components/qti-lt/qti-lt.js +0 -1
- package/dist/components/qti-lt/qti-lt.js.map +1 -1
- package/dist/components/qti-lte/qti-lte.js +0 -1
- package/dist/components/qti-lte/qti-lte.js.map +1 -1
- package/dist/components/qti-map-response/qti-map-response.js +0 -1
- package/dist/components/qti-map-response/qti-map-response.js.map +1 -1
- package/dist/components/qti-map-response-point/qti-map-response-point.js +0 -1
- package/dist/components/qti-map-response-point/qti-map-response-point.js.map +1 -1
- package/dist/components/qti-match/qti-match.js +0 -1
- package/dist/components/qti-match/qti-match.js.map +1 -1
- package/dist/components/qti-math-operator/qti-math-operator.js +0 -1
- package/dist/components/qti-math-operator/qti-math-operator.js.map +1 -1
- package/dist/components/qti-max/qti-max.js +0 -1
- package/dist/components/qti-max/qti-max.js.map +1 -1
- package/dist/components/qti-member/qti-member.js +0 -1
- package/dist/components/qti-member/qti-member.js.map +1 -1
- package/dist/components/qti-min/qti-min.js +0 -1
- package/dist/components/qti-min/qti-min.js.map +1 -1
- package/dist/components/qti-multiple/qti-multiple.js +0 -1
- package/dist/components/qti-multiple/qti-multiple.js.map +1 -1
- package/dist/components/qti-not/qti-not.js +0 -1
- package/dist/components/qti-not/qti-not.js.map +1 -1
- package/dist/components/qti-null/qti-null.js +0 -1
- package/dist/components/qti-null/qti-null.js.map +1 -1
- package/dist/components/qti-or/qti-or.js +0 -1
- package/dist/components/qti-or/qti-or.js.map +1 -1
- package/dist/components/qti-ordered/qti-ordered.js +0 -1
- package/dist/components/qti-ordered/qti-ordered.js.map +1 -1
- package/dist/components/qti-pattern-match/qti-pattern-match.js +0 -1
- package/dist/components/qti-pattern-match/qti-pattern-match.js.map +1 -1
- package/dist/components/qti-power/qti-power.js +0 -1
- package/dist/components/qti-power/qti-power.js.map +1 -1
- package/dist/components/qti-printed-variable/qti-printed-variable.js +0 -1
- package/dist/components/qti-printed-variable/qti-printed-variable.js.map +1 -1
- package/dist/components/qti-product/qti-product.js +0 -1
- package/dist/components/qti-product/qti-product.js.map +1 -1
- package/dist/components/qti-random/qti-random.js +0 -1
- package/dist/components/qti-random/qti-random.js.map +1 -1
- package/dist/components/qti-random-integer/qti-random-integer.js +0 -1
- package/dist/components/qti-random-integer/qti-random-integer.js.map +1 -1
- package/dist/components/qti-repeat/qti-repeat.js +0 -1
- package/dist/components/qti-repeat/qti-repeat.js.map +1 -1
- package/dist/components/qti-response-condition/qti-response-condition.js +0 -1
- package/dist/components/qti-response-condition/qti-response-condition.js.map +1 -1
- package/dist/components/qti-response-else/qti-response-else.js +0 -1
- package/dist/components/qti-response-else/qti-response-else.js.map +1 -1
- package/dist/components/qti-response-else-if/qti-response-else-if.js +0 -1
- package/dist/components/qti-response-else-if/qti-response-else-if.js.map +1 -1
- package/dist/components/qti-response-if/qti-response-if.js +0 -1
- package/dist/components/qti-response-if/qti-response-if.js.map +1 -1
- package/dist/components/qti-round/qti-round.js +0 -1
- package/dist/components/qti-round/qti-round.js.map +1 -1
- package/dist/components/qti-round-to/qti-round-to.js +0 -1
- package/dist/components/qti-round-to/qti-round-to.js.map +1 -1
- package/dist/components/qti-rule/qti-rule.js +2 -13
- package/dist/components/qti-rule/qti-rule.js.map +1 -1
- package/dist/components/qti-set-correct-response/qti-set-correct-response.js +0 -1
- package/dist/components/qti-set-correct-response/qti-set-correct-response.js.map +1 -1
- package/dist/components/qti-set-outcome-value/qti-set-outcome-value.js +0 -1
- package/dist/components/qti-set-outcome-value/qti-set-outcome-value.js.map +1 -1
- package/dist/components/qti-set-template-value/qti-set-template-value.js +0 -1
- package/dist/components/qti-set-template-value/qti-set-template-value.js.map +1 -1
- package/dist/components/qti-stats-operator/qti-stats-operator.js +0 -1
- package/dist/components/qti-stats-operator/qti-stats-operator.js.map +1 -1
- package/dist/components/qti-string-match/qti-string-match.js +0 -1
- package/dist/components/qti-string-match/qti-string-match.js.map +1 -1
- package/dist/components/qti-substring/qti-substring.js +4 -2
- package/dist/components/qti-substring/qti-substring.js.map +1 -1
- package/dist/components/qti-subtract/index.d.ts +1 -1
- package/dist/components/qti-subtract/index.js +0 -2
- package/dist/components/qti-subtract/index.js.map +1 -1
- package/dist/components/qti-sum/qti-sum.js +0 -1
- package/dist/components/qti-sum/qti-sum.js.map +1 -1
- package/dist/components/qti-truncate/qti-truncate.js +0 -1
- package/dist/components/qti-truncate/qti-truncate.js.map +1 -1
- package/dist/components/qti-variable/qti-variable.js +0 -1
- package/dist/components/qti-variable/qti-variable.js.map +1 -1
- package/dist/elements.d.ts +254 -0
- package/dist/elements.js +130 -0
- package/dist/elements.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/register.d.ts +1 -0
- package/dist/register.js +7 -0
- package/dist/register.js.map +1 -0
- package/package.json +17 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qti-inside.js","sourceRoot":"","sources":["../../../src/components/qti-inside/qti-inside.ts"],"names":[],"mappings":"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","sourcesContent":["import { property } from 'lit/decorators.js';\n\nimport { QtiExpression } from '@qti-components/base';\n\nimport type { ResponseVariable } from '@qti-components/base';\n\ntype Point = { x: number; y: number };\n\nexport class QtiInside extends QtiExpression<boolean | null> {\n @property({ type: String }) shape = '';\n\n @property({ type: String }) coords = '';\n\n public override getResult(): boolean | null {\n const variables = this.getVariables() as ResponseVariable[];\n\n if (variables.length !== 1) {\n console.error('qti-inside requires exactly one point expression');\n return null;\n }\n\n const variable = variables[0];\n if (variable.cardinality !== 'single' || Array.isArray(variable.value)) {\n console.error('qti-inside requires single cardinality');\n return null;\n }\n if (variable.value === null || variable.value === undefined) {\n return null;\n }\n if (!this.shape || !this.coords) {\n console.error('qti-inside requires shape and coords attributes');\n return null;\n }\n\n const point = this.#parsePoint(variable.value.toString());\n const coords = this.#parseCoords(this.coords);\n\n if (!point || coords.length === 0) {\n return null;\n }\n\n switch (this.shape.toLowerCase()) {\n case 'circle':\n return this.#isInsideCircle(point, coords);\n case 'rect':\n return this.#isInsideRect(point, coords);\n case 'ellipse':\n return this.#isInsideEllipse(point, coords);\n case 'poly':\n case 'polygon':\n return this.#isInsidePolygon(point, coords);\n default:\n console.error(`qti-inside does not support shape \"${this.shape}\"`);\n return null;\n }\n }\n\n #parsePoint(value: string): Point | null {\n const tokens = value\n .split(/[,\\s]+/)\n .map(token => token.trim())\n .filter(Boolean);\n\n if (tokens.length !== 2) {\n console.error('qti-inside requires a point value formatted as \"x y\" or \"x,y\"');\n return null;\n }\n\n const x = Number.parseFloat(tokens[0]);\n const y = Number.parseFloat(tokens[1]);\n\n if (Number.isNaN(x) || Number.isNaN(y)) {\n console.error('qti-inside requires numeric point coordinates');\n return null;\n }\n\n return { x, y };\n }\n\n #parseCoords(value: string): number[] {\n const coords = value\n .split(',')\n .map(token => token.trim())\n .filter(Boolean)\n .map(token => Number.parseFloat(token));\n\n if (coords.some(coord => Number.isNaN(coord))) {\n console.error('qti-inside requires numeric coords');\n return [];\n }\n\n return coords;\n }\n\n #isInsideCircle(point: Point, coords: number[]): boolean | null {\n if (coords.length !== 3) {\n console.error('qti-inside circle requires x,y,r');\n return null;\n }\n\n const [centerX, centerY, radius] = coords;\n return (point.x - centerX) ** 2 + (point.y - centerY) ** 2 <= radius ** 2;\n }\n\n #isInsideRect(point: Point, coords: number[]): boolean | null {\n if (coords.length !== 4) {\n console.error('qti-inside rect requires left,top,right,bottom');\n return null;\n }\n\n const [x1, y1, x2, y2] = coords;\n const left = Math.min(x1, x2);\n const right = Math.max(x1, x2);\n const top = Math.min(y1, y2);\n const bottom = Math.max(y1, y2);\n\n return point.x >= left && point.x <= right && point.y >= top && point.y <= bottom;\n }\n\n #isInsideEllipse(point: Point, coords: number[]): boolean | null {\n if (coords.length !== 4) {\n console.error('qti-inside ellipse requires centerX,centerY,radiusX,radiusY');\n return null;\n }\n\n const [centerX, centerY, radiusX, radiusY] = coords;\n if (radiusX === 0 || radiusY === 0) {\n return false;\n }\n\n return ((point.x - centerX) ** 2) / (radiusX ** 2) + ((point.y - centerY) ** 2) / (radiusY ** 2) <= 1;\n }\n\n #isInsidePolygon(point: Point, coords: number[]): boolean | null {\n if (coords.length < 6 || coords.length % 2 !== 0) {\n console.error('qti-inside polygon requires at least 3 coordinate pairs');\n return null;\n }\n\n let inside = false;\n\n for (let current = 0, previous = coords.length - 2; current < coords.length; current += 2) {\n const xi = coords[current];\n const yi = coords[current + 1];\n const xj = coords[previous];\n const yj = coords[previous + 1];\n\n const intersects =\n yi > point.y !== yj > point.y &&\n point.x < ((xj - xi) * (point.y - yi)) / ((yj - yi) || Number.EPSILON) + xi;\n\n if (intersects) {\n inside = !inside;\n }\n\n previous = current;\n }\n\n return inside;\n }\n}\n\ncustomElements.define('qti-inside', QtiInside);\n"]}
|
|
1
|
+
{"version":3,"file":"qti-inside.js","sourceRoot":"","sources":["../../../src/components/qti-inside/qti-inside.ts"],"names":[],"mappings":"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","sourcesContent":["import { property } from 'lit/decorators.js';\n\nimport { QtiExpression } from '@qti-components/base';\n\nimport type { ResponseVariable } from '@qti-components/base';\n\ntype Point = { x: number; y: number };\n\nexport class QtiInside extends QtiExpression<boolean | null> {\n @property({ type: String }) shape = '';\n\n @property({ type: String }) coords = '';\n\n public override getResult(): boolean | null {\n const variables = this.getVariables() as ResponseVariable[];\n\n if (variables.length !== 1) {\n console.error('qti-inside requires exactly one point expression');\n return null;\n }\n\n const variable = variables[0];\n if (variable.cardinality !== 'single' || Array.isArray(variable.value)) {\n console.error('qti-inside requires single cardinality');\n return null;\n }\n if (variable.value === null || variable.value === undefined) {\n return null;\n }\n if (!this.shape || !this.coords) {\n console.error('qti-inside requires shape and coords attributes');\n return null;\n }\n\n const point = this.#parsePoint(variable.value.toString());\n const coords = this.#parseCoords(this.coords);\n\n if (!point || coords.length === 0) {\n return null;\n }\n\n switch (this.shape.toLowerCase()) {\n case 'circle':\n return this.#isInsideCircle(point, coords);\n case 'rect':\n return this.#isInsideRect(point, coords);\n case 'ellipse':\n return this.#isInsideEllipse(point, coords);\n case 'poly':\n case 'polygon':\n return this.#isInsidePolygon(point, coords);\n default:\n console.error(`qti-inside does not support shape \"${this.shape}\"`);\n return null;\n }\n }\n\n #parsePoint(value: string): Point | null {\n const tokens = value\n .split(/[,\\s]+/)\n .map(token => token.trim())\n .filter(Boolean);\n\n if (tokens.length !== 2) {\n console.error('qti-inside requires a point value formatted as \"x y\" or \"x,y\"');\n return null;\n }\n\n const x = Number.parseFloat(tokens[0]);\n const y = Number.parseFloat(tokens[1]);\n\n if (Number.isNaN(x) || Number.isNaN(y)) {\n console.error('qti-inside requires numeric point coordinates');\n return null;\n }\n\n return { x, y };\n }\n\n #parseCoords(value: string): number[] {\n const coords = value\n .split(',')\n .map(token => token.trim())\n .filter(Boolean)\n .map(token => Number.parseFloat(token));\n\n if (coords.some(coord => Number.isNaN(coord))) {\n console.error('qti-inside requires numeric coords');\n return [];\n }\n\n return coords;\n }\n\n #isInsideCircle(point: Point, coords: number[]): boolean | null {\n if (coords.length !== 3) {\n console.error('qti-inside circle requires x,y,r');\n return null;\n }\n\n const [centerX, centerY, radius] = coords;\n return (point.x - centerX) ** 2 + (point.y - centerY) ** 2 <= radius ** 2;\n }\n\n #isInsideRect(point: Point, coords: number[]): boolean | null {\n if (coords.length !== 4) {\n console.error('qti-inside rect requires left,top,right,bottom');\n return null;\n }\n\n const [x1, y1, x2, y2] = coords;\n const left = Math.min(x1, x2);\n const right = Math.max(x1, x2);\n const top = Math.min(y1, y2);\n const bottom = Math.max(y1, y2);\n\n return point.x >= left && point.x <= right && point.y >= top && point.y <= bottom;\n }\n\n #isInsideEllipse(point: Point, coords: number[]): boolean | null {\n if (coords.length !== 4) {\n console.error('qti-inside ellipse requires centerX,centerY,radiusX,radiusY');\n return null;\n }\n\n const [centerX, centerY, radiusX, radiusY] = coords;\n if (radiusX === 0 || radiusY === 0) {\n return false;\n }\n\n return (point.x - centerX) ** 2 / radiusX ** 2 + (point.y - centerY) ** 2 / radiusY ** 2 <= 1;\n }\n\n #isInsidePolygon(point: Point, coords: number[]): boolean | null {\n if (coords.length < 6 || coords.length % 2 !== 0) {\n console.error('qti-inside polygon requires at least 3 coordinate pairs');\n return null;\n }\n\n let inside = false;\n\n for (let current = 0, previous = coords.length - 2; current < coords.length; current += 2) {\n const xi = coords[current];\n const yi = coords[current + 1];\n const xj = coords[previous];\n const yj = coords[previous + 1];\n\n const intersects =\n yi > point.y !== yj > point.y && point.x < ((xj - xi) * (point.y - yi)) / (yj - yi || Number.EPSILON) + xi;\n\n if (intersects) {\n inside = !inside;\n }\n\n previous = current;\n }\n\n return inside;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qti-integer-divide.js","sourceRoot":"","sources":["../../../src/components/qti-integer-divide/qti-integer-divide.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAIrD;;;;;;;GAOG;AACH,MAAM,OAAO,gBAAiB,SAAQ,aAA4B;IAChD,SAAS;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,YAAY,EAAwB,CAAC,CAAC;QAErF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;YACtE,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;YACtD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC;IAED,qBAAqB,CAAC,SAA6B;QACjD,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;gBACpC,OAAO,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;gBAC/D,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,IAAI,QAAQ,CAAC,WAAW,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvE,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;gBAChE,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,IAAI,QAAQ,CAAC,KAAK,KAAK,IAAI,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC5D,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAe,EAAE,EAAE,CAAC,CAAC;YAC5D,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxB,OAAO,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;gBAC5D,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF
|
|
1
|
+
{"version":3,"file":"qti-integer-divide.js","sourceRoot":"","sources":["../../../src/components/qti-integer-divide/qti-integer-divide.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAIrD;;;;;;;GAOG;AACH,MAAM,OAAO,gBAAiB,SAAQ,aAA4B;IAChD,SAAS;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,YAAY,EAAwB,CAAC,CAAC;QAErF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;YACtE,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;YACtD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC;IAED,qBAAqB,CAAC,SAA6B;QACjD,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;gBACpC,OAAO,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;gBAC/D,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,IAAI,QAAQ,CAAC,WAAW,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvE,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;gBAChE,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,IAAI,QAAQ,CAAC,KAAK,KAAK,IAAI,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC5D,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAe,EAAE,EAAE,CAAC,CAAC;YAC5D,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxB,OAAO,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;gBAC5D,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF","sourcesContent":["import { QtiExpression } from '@qti-components/base';\n\nimport type { ResponseVariable } from '@qti-components/base';\n\n/**\n * @summary The qti-integer-divide operator performs integer division rounded down.\n * @documentation https://www.imsglobal.org/spec/qti/v3p0/info/index.html#integerDivide\n *\n * Takes 2 sub-expressions with base-type integer and single cardinality.\n * Returns result of (x / y) rounded down toward negative infinity.\n * Special cases: Returns NULL if any argument is NULL or if divisor is 0.\n */\nexport class QtiIntegerDivide extends QtiExpression<number | null> {\n public override getResult(): number | null {\n const values = this.#collectIntegerValues(this.getVariables() as ResponseVariable[]);\n\n if (values.length !== 2) {\n console.error('qti-integer-divide requires exactly 2 integer values');\n return null;\n }\n\n if (values[1] === 0) {\n console.error('qti-integer-divide: division by zero');\n return null;\n }\n\n return Math.floor(values[0] / values[1]);\n }\n\n #collectIntegerValues(variables: ResponseVariable[]): number[] {\n const values: number[] = [];\n\n for (const variable of variables) {\n if (variable.baseType !== 'integer') {\n console.error('qti-integer-divide requires integer base-type');\n return [];\n }\n if (variable.cardinality !== 'single' || Array.isArray(variable.value)) {\n console.error('qti-integer-divide requires single cardinality');\n return [];\n }\n if (variable.value === null || variable.value === undefined) {\n return [];\n }\n\n const value = Number.parseInt(variable.value as string, 10);\n if (Number.isNaN(value)) {\n console.error('qti-integer-divide requires integer values');\n return [];\n }\n values.push(value);\n }\n\n return values;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qti-integer-modulus.js","sourceRoot":"","sources":["../../../src/components/qti-integer-modulus/qti-integer-modulus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAIrD;;;;;;;GAOG;AACH,MAAM,OAAO,iBAAkB,SAAQ,aAA4B;IACjD,SAAS;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,YAAY,EAAwB,CAAC,CAAC;QAErF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;YACvE,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;YACvD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC;IAED,qBAAqB,CAAC,SAA6B;QACjD,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;gBACpC,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;gBAChE,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,IAAI,QAAQ,CAAC,WAAW,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvE,OAAO,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;gBACjE,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,IAAI,QAAQ,CAAC,KAAK,KAAK,IAAI,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC5D,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAe,EAAE,EAAE,CAAC,CAAC;YAC5D,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxB,OAAO,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;gBAC7D,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF
|
|
1
|
+
{"version":3,"file":"qti-integer-modulus.js","sourceRoot":"","sources":["../../../src/components/qti-integer-modulus/qti-integer-modulus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAIrD;;;;;;;GAOG;AACH,MAAM,OAAO,iBAAkB,SAAQ,aAA4B;IACjD,SAAS;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,YAAY,EAAwB,CAAC,CAAC;QAErF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;YACvE,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;YACvD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC;IAED,qBAAqB,CAAC,SAA6B;QACjD,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;gBACpC,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;gBAChE,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,IAAI,QAAQ,CAAC,WAAW,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvE,OAAO,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;gBACjE,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,IAAI,QAAQ,CAAC,KAAK,KAAK,IAAI,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC5D,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAe,EAAE,EAAE,CAAC,CAAC;YAC5D,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxB,OAAO,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;gBAC7D,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF","sourcesContent":["import { QtiExpression } from '@qti-components/base';\n\nimport type { ResponseVariable } from '@qti-components/base';\n\n/**\n * @summary The qti-integer-modulus operator returns the remainder of integer division.\n * @documentation https://www.imsglobal.org/spec/qti/v3p0/info/index.html#integerModulus\n *\n * Takes 2 sub-expressions with base-type integer and single cardinality.\n * Returns the remainder (x % y).\n * Special cases: Returns NULL if any argument is NULL or if divisor is 0.\n */\nexport class QtiIntegerModulus extends QtiExpression<number | null> {\n public override getResult(): number | null {\n const values = this.#collectIntegerValues(this.getVariables() as ResponseVariable[]);\n\n if (values.length !== 2) {\n console.error('qti-integer-modulus requires exactly 2 integer values');\n return null;\n }\n\n if (values[1] === 0) {\n console.error('qti-integer-modulus: division by zero');\n return null;\n }\n\n return values[0] % values[1];\n }\n\n #collectIntegerValues(variables: ResponseVariable[]): number[] {\n const values: number[] = [];\n\n for (const variable of variables) {\n if (variable.baseType !== 'integer') {\n console.error('qti-integer-modulus requires integer base-type');\n return [];\n }\n if (variable.cardinality !== 'single' || Array.isArray(variable.value)) {\n console.error('qti-integer-modulus requires single cardinality');\n return [];\n }\n if (variable.value === null || variable.value === undefined) {\n return [];\n }\n\n const value = Number.parseInt(variable.value as string, 10);\n if (Number.isNaN(value)) {\n console.error('qti-integer-modulus requires integer values');\n return [];\n }\n values.push(value);\n }\n\n return values;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qti-integer-to-float.js","sourceRoot":"","sources":["../../../src/components/qti-integer-to-float/qti-integer-to-float.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAIrD;;;;;;;GAOG;AACH,MAAM,OAAO,iBAAkB,SAAQ,aAA4B;IACjD,SAAS;QACvB,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAwB,CAAC;QAE5D,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;YAC5E,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACpC,OAAO,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;YACjE,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,QAAQ,CAAC,WAAW,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACvE,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;YAClE,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,QAAQ,CAAC,KAAK,KAAK,IAAI,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC5D,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAe,EAAE,EAAE,CAAC,CAAC;QAC5D,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;YAChE,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;CACF
|
|
1
|
+
{"version":3,"file":"qti-integer-to-float.js","sourceRoot":"","sources":["../../../src/components/qti-integer-to-float/qti-integer-to-float.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAIrD;;;;;;;GAOG;AACH,MAAM,OAAO,iBAAkB,SAAQ,aAA4B;IACjD,SAAS;QACvB,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAwB,CAAC;QAE5D,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;YAC5E,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACpC,OAAO,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;YACjE,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,QAAQ,CAAC,WAAW,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACvE,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;YAClE,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,QAAQ,CAAC,KAAK,KAAK,IAAI,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC5D,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAe,EAAE,EAAE,CAAC,CAAC;QAC5D,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;YAChE,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;CACF","sourcesContent":["import { QtiExpression } from '@qti-components/base';\n\nimport type { ResponseVariable } from '@qti-components/base';\n\n/**\n * @summary The qti-integer-to-float operator converts an integer to a float.\n * @documentation https://www.imsglobal.org/spec/qti/v3p0/info/index.html#integerToFloat\n *\n * Takes 1 sub-expression with base-type integer and single cardinality.\n * Returns a value of base-type float with the same numeric value.\n * Special cases: Returns NULL if sub-expression is NULL.\n */\nexport class QtiIntegerToFloat extends QtiExpression<number | null> {\n public override getResult(): number | null {\n const variables = this.getVariables() as ResponseVariable[];\n\n if (variables.length !== 1) {\n console.error('qti-integer-to-float requires exactly one child expression');\n return null;\n }\n\n const variable = variables[0];\n if (variable.baseType !== 'integer') {\n console.error('qti-integer-to-float requires integer base-type');\n return null;\n }\n if (variable.cardinality !== 'single' || Array.isArray(variable.value)) {\n console.error('qti-integer-to-float requires single cardinality');\n return null;\n }\n if (variable.value === null || variable.value === undefined) {\n return null;\n }\n\n const value = Number.parseInt(variable.value as string, 10);\n if (Number.isNaN(value)) {\n console.error('qti-integer-to-float requires an integer value');\n return null;\n }\n\n return value;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qti-is-null.js","sourceRoot":"","sources":["../../../src/components/qti-is-null/qti-is-null.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAIrD;;;;;;;GAOG;AACH,MAAM,OAAO,SAAU,SAAQ,aAAsB;IACnC,SAAS;QACvB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAwB,CAAC;YAC5D,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YACjC,OAAO,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,SAAS,IAAI,KAAK,KAAK,EAAE,CAAC;QAC7D,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC;IACd,CAAC;CACF
|
|
1
|
+
{"version":3,"file":"qti-is-null.js","sourceRoot":"","sources":["../../../src/components/qti-is-null/qti-is-null.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAIrD;;;;;;;GAOG;AACH,MAAM,OAAO,SAAU,SAAQ,aAAsB;IACnC,SAAS;QACvB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAwB,CAAC;YAC5D,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YACjC,OAAO,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,SAAS,IAAI,KAAK,KAAK,EAAE,CAAC;QAC7D,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC;IACd,CAAC;CACF","sourcesContent":["import { QtiExpression } from '@qti-components/base';\n\nimport type { ResponseVariable } from '@qti-components/base';\n\n/**\n * @summary The qti-is-null operator checks if a variable or expression is missing its value.\n * @documentation https://www.imsglobal.org/spec/qti/v3p0/info/index.html#isNull\n *\n * Takes 1 sub-expression with any base-type or cardinality.\n * Returns true if the sub-expression is NULL, false otherwise.\n * Special cases: Empty containers and empty strings are treated as NULL.\n */\nexport class QtiIsNull extends QtiExpression<boolean> {\n public override getResult(): boolean {\n if (this.children.length === 1) {\n const variables = this.getVariables() as ResponseVariable[];\n if (!variables) {\n return true;\n }\n const value = variables[0].value;\n return value == null || value == undefined || value === '';\n }\n console.error('unexpected number of children in qti Null');\n return null;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qti-lcm.js","sourceRoot":"","sources":["../../../src/components/qti-lcm/qti-lcm.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"qti-lcm.js","sourceRoot":"","sources":["../../../src/components/qti-lcm/qti-lcm.ts"],"names":[],"mappings":"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","sourcesContent":["import { QtiExpression } from '@qti-components/base';\n\nimport type { ResponseVariable } from '@qti-components/base';\n\nexport class QtiLcm extends QtiExpression<number | null> {\n public override getResult(): number | null {\n const values = this.#collectIntegerValues(this.getVariables() as ResponseVariable[]);\n\n if (values.length === 0) {\n console.error('qti-lcm requires at least one integer value');\n return null;\n }\n\n return values.reduce((accumulator, value) => this.#lcm(accumulator, value));\n }\n\n #collectIntegerValues(variables: ResponseVariable[]): number[] {\n const values: number[] = [];\n\n for (const variable of variables) {\n if (variable.baseType !== 'integer') {\n console.error('qti-lcm requires integer base-type');\n return [];\n }\n if (variable.value === null || variable.value === undefined) {\n return [];\n }\n\n if (variable.cardinality === 'single') {\n if (Array.isArray(variable.value)) {\n console.error('qti-lcm unexpected array value for single cardinality');\n return [];\n }\n\n const value = Number.parseInt(variable.value as string, 10);\n if (Number.isNaN(value)) {\n console.error('qti-lcm requires integer values');\n return [];\n }\n values.push(value);\n continue;\n }\n\n if (variable.cardinality !== 'multiple' && variable.cardinality !== 'ordered') {\n console.error('qti-lcm unsupported cardinality');\n return [];\n }\n\n if (!Array.isArray(variable.value)) {\n console.error('qti-lcm expected array value for container cardinality');\n return [];\n }\n\n for (const entry of variable.value) {\n const value = Number.parseInt(entry as string, 10);\n if (Number.isNaN(value)) {\n console.error('qti-lcm requires integer values');\n return [];\n }\n values.push(value);\n }\n }\n\n return values;\n }\n\n #gcd(a: number, b: number): number {\n let left = Math.abs(a);\n let right = Math.abs(b);\n\n while (right !== 0) {\n const remainder = left % right;\n left = right;\n right = remainder;\n }\n\n return left;\n }\n\n #lcm(a: number, b: number): number {\n if (a === 0 || b === 0) {\n return 0;\n }\n\n return Math.abs((a * b) / this.#gcd(a, b));\n }\n}\n"]}
|
|
@@ -47,5 +47,4 @@ __decorate([
|
|
|
47
47
|
consume({ context: itemContext, subscribe: true }),
|
|
48
48
|
state()
|
|
49
49
|
], QtiLookupOutcomeValue.prototype, "context", void 0);
|
|
50
|
-
customElements.define('qti-lookup-outcome-value', QtiLookupOutcomeValue);
|
|
51
50
|
//# sourceMappingURL=qti-lookup-outcome-value.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qti-lookup-outcome-value.js","sourceRoot":"","sources":["../../../src/components/qti-lookup-outcome-value/qti-lookup-outcome-value.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EAAE,8BAA8B,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAM/C;;;;GAIG;AACH,MAAM,OAAO,qBAAsB,SAAQ,OAAO;IAOhD,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,iBAA0C,CAAC;IACzD,CAAC;IAEe,OAAO;QACrB,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;QAEnD,MAAM,eAAe,GACnB,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,UAAU,CAAC,IAAI,IAAI,CAAC;QAExE,IAAI,KAAK,CAAC;QACV,IAAI,eAAe,CAAC,kBAAkB,EAAE,CAAC;YACvC,KAAK,GAAG,eAAe,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAC/F,CAAC;QACD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YAC1C,OAAO,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;YAC/D,OAAO,CAAC,CAAC;QACX,CAAC;QACD,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAA0D,uBAAuB,EAAE;YAChG,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE;gBACN,iBAAiB,EAAE,IAAI,CAAC,UAAU;gBAClC,KAAK,EAAE,8BAA8B,CAAC,KAAK,CAAC;aAC7C;SACF,CAAC,CACH,CAAC;QACF,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AApC6B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;yDAAoB;AAIrC;IAFT,OAAO,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAClD,KAAK,EAAE;sDACwB
|
|
1
|
+
{"version":3,"file":"qti-lookup-outcome-value.js","sourceRoot":"","sources":["../../../src/components/qti-lookup-outcome-value/qti-lookup-outcome-value.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EAAE,8BAA8B,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAM/C;;;;GAIG;AACH,MAAM,OAAO,qBAAsB,SAAQ,OAAO;IAOhD,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,iBAA0C,CAAC;IACzD,CAAC;IAEe,OAAO;QACrB,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;QAEnD,MAAM,eAAe,GACnB,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,UAAU,CAAC,IAAI,IAAI,CAAC;QAExE,IAAI,KAAK,CAAC;QACV,IAAI,eAAe,CAAC,kBAAkB,EAAE,CAAC;YACvC,KAAK,GAAG,eAAe,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAC/F,CAAC;QACD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YAC1C,OAAO,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;YAC/D,OAAO,CAAC,CAAC;QACX,CAAC;QACD,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAA0D,uBAAuB,EAAE;YAChG,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE;gBACN,iBAAiB,EAAE,IAAI,CAAC,UAAU;gBAClC,KAAK,EAAE,8BAA8B,CAAC,KAAK,CAAC;aAC7C;SACF,CAAC,CACH,CAAC;QACF,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AApC6B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;yDAAoB;AAIrC;IAFT,OAAO,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAClD,KAAK,EAAE;sDACwB","sourcesContent":["import { property, state } from 'lit/decorators.js';\nimport { consume } from '@lit/context';\n\nimport { convertNumberToUniversalFormat } from '@qti-components/base';\nimport { itemContext } from '@qti-components/base';\n\nimport { QtiRule } from '../qti-rule/qti-rule';\n\nimport type { QtiExpression } from '@qti-components/base';\nimport type { OutcomeVariable } from '@qti-components/base';\nimport type { ItemContext } from '@qti-components/base';\n\n/**\n * The lookupOutcomeValue rule sets the value of an outcome variable to the value obtained\n * by looking up the value of the associated expression in the lookupTable associated\n * with the outcome's declaration.\n */\nexport class QtiLookupOutcomeValue extends QtiRule {\n @property({ type: String }) identifier: string;\n\n @consume({ context: itemContext, subscribe: true })\n @state()\n protected context?: ItemContext;\n\n get childExpression(): QtiExpression<string> {\n return this.firstElementChild as QtiExpression<string>;\n }\n\n public override process(): number {\n const identifier = this.getAttribute('identifier');\n\n const outcomeVariable: OutcomeVariable | null =\n this.context.variables.find(v => v.identifier === identifier) || null;\n\n let value;\n if (outcomeVariable.interpolationTable) {\n value = outcomeVariable.interpolationTable.get(parseFloat(this.childExpression.calculate()));\n }\n if (value === null || value === undefined) {\n console.warn('lookupOutcomeValue: value is null or undefined');\n return 0;\n }\n this.dispatchEvent(\n new CustomEvent<{ outcomeIdentifier: string; value: string | string[] }>('qti-set-outcome-value', {\n bubbles: true,\n composed: true,\n detail: {\n outcomeIdentifier: this.identifier,\n value: convertNumberToUniversalFormat(value)\n }\n })\n );\n return value;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'qti-lookup-outcome-value': QtiLookupOutcomeValue;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qti-lt.js","sourceRoot":"","sources":["../../../src/components/qti-lt/qti-lt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAIrD,MAAM,OAAO,KAAM,SAAQ,aAAsB;IAC/B,SAAS;QACvB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAwB,CAAC;YACzD,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACzB,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACzB,IACE,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,CAAC;gBAC9D,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,CAAC,EAC9D,CAAC;gBACD,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;YACvC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC;IACd,CAAC;CACF
|
|
1
|
+
{"version":3,"file":"qti-lt.js","sourceRoot":"","sources":["../../../src/components/qti-lt/qti-lt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAIrD,MAAM,OAAO,KAAM,SAAQ,aAAsB;IAC/B,SAAS;QACvB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAwB,CAAC;YACzD,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACzB,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACzB,IACE,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,CAAC;gBAC9D,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,CAAC,EAC9D,CAAC;gBACD,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;YACvC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC;IACd,CAAC;CACF","sourcesContent":["import { QtiExpression } from '@qti-components/base';\n\nimport type { ResponseVariable } from '@qti-components/base';\n\nexport class QtiLt extends QtiExpression<boolean> {\n public override getResult(): boolean {\n if (this.children.length === 2) {\n const values = this.getVariables() as ResponseVariable[];\n const value1 = values[0];\n const value2 = values[1];\n if (\n (value1.baseType === 'integer' || value1.baseType === 'float') &&\n (value2.baseType === 'integer' || value2.baseType === 'float')\n ) {\n return +value1.value < +value2.value;\n } else {\n console.error('unexpected baseType or cardinality in qti lt');\n }\n }\n console.error('unexpected number of children in lt');\n return null;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qti-lte.js","sourceRoot":"","sources":["../../../src/components/qti-lte/qti-lte.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAI9D,oFAAoF;AACpF,0DAA0D;AAC1D,MAAM,OAAO,MAAO,SAAQ,sBAAsB;IAChC,SAAS;QACvB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAwB,CAAC;YACzD,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACzB,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACzB,IACE,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,CAAC;gBAC9D,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,CAAC,EAC9D,CAAC;gBACD,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;YACxC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;gBAC/D,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;QACpD,OAAO,IAAI,CAAC;IACd,CAAC;CACF
|
|
1
|
+
{"version":3,"file":"qti-lte.js","sourceRoot":"","sources":["../../../src/components/qti-lte/qti-lte.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAI9D,oFAAoF;AACpF,0DAA0D;AAC1D,MAAM,OAAO,MAAO,SAAQ,sBAAsB;IAChC,SAAS;QACvB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAwB,CAAC;YACzD,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACzB,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACzB,IACE,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,CAAC;gBAC9D,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,CAAC,EAC9D,CAAC;gBACD,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;YACxC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;gBAC/D,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;QACpD,OAAO,IAAI,CAAC;IACd,CAAC;CACF","sourcesContent":["import { QtiConditionExpression } from '@qti-components/base';\n\nimport type { ResponseVariable } from '@qti-components/base';\n\n// PK: For the contains we assume the expressions to calculate are all directedPairs\n// I don't know it this in QTI is always the case however?\nexport class QtiLte extends QtiConditionExpression {\n public override getResult(): boolean {\n if (this.children.length === 2) {\n const values = this.getVariables() as ResponseVariable[];\n const value1 = values[0];\n const value2 = values[1];\n if (\n (value1.baseType === 'integer' || value1.baseType === 'float') &&\n (value2.baseType === 'integer' || value2.baseType === 'float')\n ) {\n return +value1.value <= +value2.value;\n } else {\n console.error('unexpected baseType or cardinality in qti lte');\n return null;\n }\n }\n console.log('unexpected number of children in lte');\n return null;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qti-map-response.js","sourceRoot":"","sources":["../../../src/components/qti-map-response/qti-map-response.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"qti-map-response.js","sourceRoot":"","sources":["../../../src/components/qti-map-response/qti-map-response.ts"],"names":[],"mappings":"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","sourcesContent":["import { property } from 'lit/decorators.js';\n\nimport { QtiExpression } from '@qti-components/base';\nimport { ScoringHelper } from '@qti-components/base';\n\nimport type { ResponseVariable } from '@qti-components/base';\n\n/**\n * @summary The qti-map-response operator applies a mapping to a candidate's response.\n * @documentation https://www.imsglobal.org/spec/qti/v3p0/info/index.html#mapResponse\n *\n * Transforms the bound response variable using the declaration's qti-mapping.\n * Returns a single float representing the mapped score (or sum of mapped values).\n * Special cases: Returns 0.0 if response is NULL; counts identical values in containers once.\n */\nexport class QtiMapResponse extends QtiExpression<number> {\n @property({ type: String }) identifier: string;\n\n public override getResult(): number {\n const response: ResponseVariable = this.context.variables.find(r => r.identifier === this.identifier);\n if (!response || !response.mapping) {\n console.error(`Response ${this.identifier} can not be found`);\n return null;\n }\n const mapping = response.mapping;\n const candidateResponses = !Array.isArray(response.value) ? [response.value] : response.value;\n let result = 0;\n for (const candidateResponse of candidateResponses) {\n const mappedValues = mapping.mapEntries.filter(entry => {\n if (response.baseType === 'string' && !entry.caseSensitive) {\n return ScoringHelper.compareSingleValues(\n entry.mapKey.toLowerCase(),\n candidateResponse.toLowerCase(),\n response.baseType\n );\n } else {\n return ScoringHelper.compareSingleValues(entry.mapKey, candidateResponse, response.baseType);\n }\n });\n // now find the mapped value with the highest value (if there are multiple)\n const mappedValue = mappedValues.reduce(\n (prev, current) => (prev.mappedValue > current.mappedValue ? prev : current),\n mappedValues.length > 0 ? mappedValues[0] : { mapKey: null, mappedValue: null } // Use the first element instead of a manual initial value\n );\n if (!(mappedValue === null || mappedValue.mappedValue == undefined)) {\n result += mappedValue.mappedValue;\n } else {\n result += mapping.defaultValue;\n }\n }\n if (mapping?.lowerBound !== null && mapping?.lowerBound !== undefined) {\n result = Math.max(mapping.lowerBound, result);\n }\n if (mapping?.upperBound !== null && mapping?.upperBound !== undefined) {\n result = Math.min(mapping.upperBound, result);\n }\n return result;\n }\n}\n"]}
|
|
@@ -56,5 +56,4 @@ export class QtiMapResponsePoint extends QtiExpression {
|
|
|
56
56
|
__decorate([
|
|
57
57
|
property({ type: String })
|
|
58
58
|
], QtiMapResponsePoint.prototype, "identifier", void 0);
|
|
59
|
-
customElements.define('qti-map-response-point', QtiMapResponsePoint);
|
|
60
59
|
//# sourceMappingURL=qti-map-response-point.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qti-map-response-point.js","sourceRoot":"","sources":["../../../src/components/qti-map-response-point/qti-map-response-point.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAKrD,MAAM,OAAO,mBAAoB,SAAQ,aAAqB;IAG5C,SAAS;QACvB,MAAM,QAAQ,GAAqB,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC;QACtG,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,UAAU,kBAAkB,CAAC,CAAC;YAC5D,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,WAAW,GAAmB,QAAQ,CAAC,WAAW,CAAC;QACzD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC,uCAAuC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;YACvE,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,kBAAkB,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC9F,IAAI,CAAC,kBAAkB,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3D,OAAO,CAAC,IAAI,CAAC,uCAAuC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;YACvE,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,MAAM,GAAG,CAAC,CAAC;QAEf,qDAAqD;QACrD,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;QAEtC,KAAK,MAAM,iBAAiB,IAAI,kBAAkB,EAAE,CAAC;YACnD,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,cAAc,EAAE,CAAC;gBAC/C,IAAI,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;oBAClC,SAAS,CAAC,2CAA2C;gBACvD,CAAC;gBACD,MAAM,aAAa,GAAG,aAAa,CAAC,aAAa,CAC/C,iBAAiB,EACjB,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,EAChC,QAAQ,CAAC,QAAQ,CAClB,CAAC;gBACF,IAAI,aAAa,EAAE,CAAC;oBAClB,MAAM,IAAI,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC;oBACjC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAChC,CAAC;YACH,CAAC;QACH,CAAC;QAED,sDAAsD;QACtD,IAAI,WAAW,CAAC,IAAI,GAAG,kBAAkB,CAAC,MAAM,EAAE,CAAC;YACjD,MAAM,IAAI,WAAW,CAAC,YAAY,CAAC;QACrC,CAAC;QAED,0BAA0B;QAC1B,IAAI,WAAW,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC;YACnC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACpD,CAAC;QACD,IAAI,WAAW,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC;YACnC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACpD,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AA1D6B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;uDAAoB
|
|
1
|
+
{"version":3,"file":"qti-map-response-point.js","sourceRoot":"","sources":["../../../src/components/qti-map-response-point/qti-map-response-point.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAKrD,MAAM,OAAO,mBAAoB,SAAQ,aAAqB;IAG5C,SAAS;QACvB,MAAM,QAAQ,GAAqB,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC;QACtG,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,UAAU,kBAAkB,CAAC,CAAC;YAC5D,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,WAAW,GAAmB,QAAQ,CAAC,WAAW,CAAC;QACzD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC,uCAAuC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;YACvE,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,kBAAkB,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC9F,IAAI,CAAC,kBAAkB,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3D,OAAO,CAAC,IAAI,CAAC,uCAAuC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;YACvE,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,MAAM,GAAG,CAAC,CAAC;QAEf,qDAAqD;QACrD,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;QAEtC,KAAK,MAAM,iBAAiB,IAAI,kBAAkB,EAAE,CAAC;YACnD,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,cAAc,EAAE,CAAC;gBAC/C,IAAI,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;oBAClC,SAAS,CAAC,2CAA2C;gBACvD,CAAC;gBACD,MAAM,aAAa,GAAG,aAAa,CAAC,aAAa,CAC/C,iBAAiB,EACjB,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,EAChC,QAAQ,CAAC,QAAQ,CAClB,CAAC;gBACF,IAAI,aAAa,EAAE,CAAC;oBAClB,MAAM,IAAI,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC;oBACjC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAChC,CAAC;YACH,CAAC;QACH,CAAC;QAED,sDAAsD;QACtD,IAAI,WAAW,CAAC,IAAI,GAAG,kBAAkB,CAAC,MAAM,EAAE,CAAC;YACjD,MAAM,IAAI,WAAW,CAAC,YAAY,CAAC;QACrC,CAAC;QAED,0BAA0B;QAC1B,IAAI,WAAW,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC;YACnC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACpD,CAAC;QACD,IAAI,WAAW,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC;YACnC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACpD,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AA1D6B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;uDAAoB","sourcesContent":["import { property } from 'lit/decorators.js';\n\nimport { QtiExpression } from '@qti-components/base';\nimport { ScoringHelper } from '@qti-components/base';\n\nimport type { ResponseVariable } from '@qti-components/base';\nimport type { QtiAreaMapping } from '@qti-components/base';\n\nexport class QtiMapResponsePoint extends QtiExpression<number> {\n @property({ type: String }) identifier: string;\n\n public override getResult(): number {\n const response: ResponseVariable = this.context.variables.find(r => r.identifier === this.identifier);\n if (!response) {\n console.warn(`Response ${this.identifier} cannot be found`);\n return null;\n }\n\n const areaMapping: QtiAreaMapping = response.areaMapping;\n if (!areaMapping) {\n console.warn(`Area mapping not found for response ${this.identifier}`);\n return null;\n }\n\n const candidateResponses = !Array.isArray(response.value) ? [response.value] : response.value;\n if (!candidateResponses || candidateResponses.length === 0) {\n console.warn(`No candidate responses for response ${this.identifier}`);\n return null;\n }\n\n let result = 0;\n\n // Keep track of areas that have already been matched\n const mappedAreas = new Set<string>();\n\n for (const candidateResponse of candidateResponses) {\n for (const entry of areaMapping.areaMapEntries) {\n if (mappedAreas.has(entry.coords)) {\n continue; // Skip areas that have already been mapped\n }\n const isPointInArea = ScoringHelper.isPointInArea(\n candidateResponse,\n `${entry.shape},${entry.coords}`,\n response.baseType\n );\n if (isPointInArea) {\n result += entry.mappedValue ?? 0;\n mappedAreas.add(entry.coords);\n }\n }\n }\n\n // Add default value for unmatched candidate responses\n if (mappedAreas.size < candidateResponses.length) {\n result += areaMapping.defaultValue;\n }\n\n // Apply bounds if defined\n if (areaMapping.lowerBound != null) {\n result = Math.max(areaMapping.lowerBound, result);\n }\n if (areaMapping.upperBound != null) {\n result = Math.min(areaMapping.upperBound, result);\n }\n\n return result;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qti-match.js","sourceRoot":"","sources":["../../../src/components/qti-match/qti-match.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"qti-match.js","sourceRoot":"","sources":["../../../src/components/qti-match/qti-match.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAIrD;;;;;;;GAOG;AACH,MAAM,OAAO,QAAS,SAAQ,aAAsB;IAClD,aAAa;IACb,yFAAyF;IACzF,yEAAyE;IACzE,gCAAgC;IAChC,6EAA6E;IAC7E,yFAAyF;IACzF,0BAA0B;IACV,SAAS;QACvB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAwB,CAAC;YACzD,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YAC7B,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACnC,OAAO,QAAQ,CAAC,KAAK,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;QACtD,CAAC;QAED,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;QACxD,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,UAA4B,EAAE,gBAAkC;QAClF,IAAI,UAAU,CAAC,KAAK,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;QAC5C,QAAQ,gBAAgB,CAAC,WAAW,EAAE,CAAC;YACrC,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC7E,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;oBACrD,OAAO,KAAK,CAAC;gBACf,CAAC;gBACD,OAAO,aAAa,CAAC,mBAAmB,CACtC,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,EAC5B,gBAAgB,CAAC,KAAK,CAAC,QAAQ,EAAE,EACjC,gBAAgB,CAAC,QAAQ,CAC1B,CAAC;YACJ,CAAC;YAED,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC/E,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;oBACrD,OAAO,KAAK,CAAC;gBACf,CAAC;gBACD,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,KAAK,gBAAgB,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;oBAC9D,OAAO,KAAK,CAAC;gBACf,CAAC;gBACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACjD,MAAM,MAAM,GAAG,aAAa,CAAC,mBAAmB,CAC9C,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,EACzB,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EACnB,gBAAgB,CAAC,QAAQ,CAC1B,CAAC;oBACF,IAAI,CAAC,MAAM,EAAE,CAAC;wBACZ,OAAO,KAAK,CAAC;oBACf,CAAC;gBACH,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;YAED,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC/E,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;oBACrD,OAAO,KAAK,CAAC;gBACf,CAAC;gBACD,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,KAAK,gBAAgB,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;oBAC9D,OAAO,KAAK,CAAC;gBACf,CAAC;gBACD,IAAI,WAAW,GAAG,CAAC,CAAC;gBACpB,KAAK,MAAM,aAAa,IAAI,gBAAgB,CAAC,KAAK,EAAE,CAAC;oBACnD,IAAI,aAAa,GAAkB,IAAI,CAAC;oBACxC,MAAM,GAAG,GAAG,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;oBAClC,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;wBACrB,MAAM,MAAM,GAAG,aAAa,CAAC,mBAAmB,CAAC,aAAa,EAAE,EAAE,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC;wBAC/F,IAAI,MAAM,EAAE,CAAC;4BACX,aAAa,GAAG,EAAE,CAAC;4BACnB,MAAM;wBACR,CAAC;oBACH,CAAC;oBACD,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;wBAC1B,GAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC1D,CAAC;yBAAM,CAAC;wBACN,OAAO,KAAK,CAAC;oBACf,CAAC;oBACD,WAAW,EAAE,CAAC;gBAChB,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;YAED;gBACE,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;gBACrD,OAAO,KAAK,CAAC;QACjB,CAAC;IACH,CAAC;CACF","sourcesContent":["import { ScoringHelper } from '@qti-components/base';\nimport { QtiExpression } from '@qti-components/base';\n\nimport type { ResponseVariable } from '@qti-components/base';\n\n/**\n * @summary The qti-match operator compares two expressions for exact value equality.\n * @documentation https://www.imsglobal.org/spec/qti/v3p0/info/index.html#match\n *\n * Takes 2 sub-expressions which must have the same base-type and cardinality.\n * Returns true if they represent the same value, false otherwise.\n * Special cases: Must not be used for float or duration types; returns NULL if any argument is NULL.\n */\nexport class QtiMatch extends QtiExpression<boolean> {\n //PK : FIXME.\n // This was a little experiment if we could call the match function as a static function,\n // This can be used for all kind of things, but now especially for use in\n // qti-response-condition-script\n // in which we pass the expressions as pure functions, and hope for the best.\n // SADLY, the getVariables throws roet in de eten.. weet nog niet precies hoe deze werkt.\n // Maar ik ga erin duiken.\n public override getResult() {\n if (this.children.length === 2) {\n const values = this.getVariables() as ResponseVariable[];\n const valueToMap = values[0];\n const correctValueInfo = values[1];\n return QtiMatch.match(valueToMap, correctValueInfo);\n }\n\n console.error('unexpected number of children in match');\n return null;\n }\n\n public static match(valueToMap: ResponseVariable, correctValueInfo: ResponseVariable) {\n if (valueToMap.value === null) return false;\n switch (correctValueInfo.cardinality) {\n case 'single': {\n if (Array.isArray(valueToMap.value) || Array.isArray(correctValueInfo.value)) {\n console.error('unexpected cardinality in qti match');\n return false;\n }\n return ScoringHelper.compareSingleValues(\n valueToMap.value?.toString(),\n correctValueInfo.value.toString(),\n correctValueInfo.baseType\n );\n }\n\n case 'ordered': {\n if (!Array.isArray(valueToMap.value) || !Array.isArray(correctValueInfo.value)) {\n console.error('unexpected cardinality in qti match');\n return false;\n }\n if (valueToMap.value.length !== correctValueInfo.value.length) {\n return false;\n }\n for (let i = 0; i < valueToMap.value.length; i++) {\n const result = ScoringHelper.compareSingleValues(\n correctValueInfo.value[i],\n valueToMap.value[i],\n correctValueInfo.baseType\n );\n if (!result) {\n return false;\n }\n }\n return true;\n }\n\n case 'multiple': {\n if (!Array.isArray(valueToMap.value) || !Array.isArray(correctValueInfo.value)) {\n console.error('unexpected cardinality in qti match');\n return false;\n }\n if (valueToMap.value.length !== correctValueInfo.value.length) {\n return false;\n }\n let answerIndex = 0;\n for (const correctAnswer of correctValueInfo.value) {\n let matchingValue: string | null = null;\n const arr = [...valueToMap.value];\n for (const mv of arr) {\n const result = ScoringHelper.compareSingleValues(correctAnswer, mv, correctValueInfo.baseType);\n if (result) {\n matchingValue = mv;\n break;\n }\n }\n if (matchingValue !== null) {\n (arr as string[]).splice(arr.indexOf(matchingValue), 1);\n } else {\n return false;\n }\n answerIndex++;\n }\n return true;\n }\n\n default:\n console.error('unexpected cardinality in qti match');\n return false;\n }\n }\n}\n"]}
|
|
@@ -209,5 +209,4 @@ export class QtiMathOperator extends QtiExpression {
|
|
|
209
209
|
__decorate([
|
|
210
210
|
property({ type: String })
|
|
211
211
|
], QtiMathOperator.prototype, "name", void 0);
|
|
212
|
-
customElements.define('qti-math-operator', QtiMathOperator);
|
|
213
212
|
//# sourceMappingURL=qti-math-operator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qti-math-operator.js","sourceRoot":"","sources":["../../../src/components/qti-math-operator/qti-math-operator.ts"],"names":[],"mappings":"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","sourcesContent":["import { property } from 'lit/decorators.js';\n\nimport { QtiExpression } from '@qti-components/base';\n\nimport type { ResponseVariable } from '@qti-components/base';\n\n/**\n * @summary The qti-math-operator performs mathematical operations on numerical values.\n * @documentation https://www.imsglobal.org/spec/qti/v3p0/impl#h.math-operator\n *\n * Takes 1 or more sub-expressions with single cardinality and numerical base-types.\n * The result is a single float, except for signum, floor and ceil which return integers.\n * Returns NULL if any argument is NULL or falls outside the function's natural domain.\n */\nexport class QtiMathOperator extends QtiExpression<number | null> {\n @property({ type: String }) name: string = '';\n\n public override getResult(): number | null {\n if (!this.name) {\n console.error('qti-math-operator requires a name attribute');\n return null;\n }\n\n const variables = this.getVariables() as ResponseVariable[];\n if (!variables || variables.length === 0) {\n return null;\n }\n\n // Extract numerical values and validate\n const values: number[] = [];\n for (const variable of variables) {\n // Check cardinality\n if (variable.cardinality !== 'single') {\n console.error('qti-math-operator requires single cardinality');\n return null;\n }\n\n // Check if value is array (shouldn't be for single cardinality)\n if (Array.isArray(variable.value)) {\n console.error('qti-math-operator unexpected array value for single cardinality');\n return null;\n }\n\n // Handle null values\n if (variable.value === null || variable.value === undefined) {\n return null;\n }\n\n // Check base type\n if (variable.baseType !== 'integer' && variable.baseType !== 'float') {\n console.error('qti-math-operator requires numerical base-type');\n return null;\n }\n\n // Convert to number\n const numValue = parseFloat(variable.value as string);\n if (isNaN(numValue)) {\n console.error('qti-math-operator non-numerical value');\n return null;\n }\n\n values.push(numValue);\n }\n\n // Perform the mathematical operation\n return this.#performOperation(this.name, values);\n }\n\n #performOperation(operation: string, values: number[]): number | null {\n try {\n switch (operation.toLowerCase()) {\n // Single argument functions\n case 'sin':\n if (values.length !== 1) return null;\n return Math.sin(values[0]);\n\n case 'cos':\n if (values.length !== 1) return null;\n return Math.cos(values[0]);\n\n case 'tan':\n if (values.length !== 1) return null;\n return Math.tan(values[0]);\n\n case 'asin':\n if (values.length !== 1) return null;\n if (values[0] < -1 || values[0] > 1) return null; // Outside domain\n return Math.asin(values[0]);\n\n case 'acos':\n if (values.length !== 1) return null;\n if (values[0] < -1 || values[0] > 1) return null; // Outside domain\n return Math.acos(values[0]);\n\n case 'atan':\n if (values.length !== 1) return null;\n return Math.atan(values[0]);\n\n case 'sinh':\n if (values.length !== 1) return null;\n return Math.sinh(values[0]);\n\n case 'cosh':\n if (values.length !== 1) return null;\n return Math.cosh(values[0]);\n\n case 'tanh':\n if (values.length !== 1) return null;\n return Math.tanh(values[0]);\n\n case 'log':\n if (values.length !== 1) return null;\n if (values[0] <= 0) return null; // Outside domain\n return Math.log(values[0]);\n\n case 'ln':\n if (values.length !== 1) return null;\n if (values[0] <= 0) return null; // Outside domain\n return Math.log(values[0]);\n\n case 'log10':\n if (values.length !== 1) return null;\n if (values[0] <= 0) return null; // Outside domain\n return Math.log10(values[0]);\n\n case 'exp':\n if (values.length !== 1) return null;\n return Math.exp(values[0]);\n\n case 'abs':\n if (values.length !== 1) return null;\n return Math.abs(values[0]);\n\n case 'sqrt':\n if (values.length !== 1) return null;\n if (values[0] < 0) return null; // Outside domain\n return Math.sqrt(values[0]);\n\n case 'signum':\n if (values.length !== 1) return null;\n return Math.sign(values[0]); // Returns -1, 0, or 1 (integer)\n\n case 'floor':\n if (values.length !== 1) return null;\n return Math.floor(values[0]); // Returns integer\n\n case 'ceil':\n if (values.length !== 1) return null;\n return Math.ceil(values[0]); // Returns integer\n\n case 'round':\n if (values.length !== 1) return null;\n return Math.round(values[0]);\n\n // Two argument functions\n case 'atan2':\n if (values.length !== 2) return null;\n return Math.atan2(values[0], values[1]);\n\n case 'pow': {\n if (values.length !== 2) {\n return null;\n }\n const base = values[0];\n const exponent = values[1];\n // Check for invalid cases\n if (base === 0 && exponent <= 0) return null;\n if (base < 0 && !Number.isInteger(exponent)) return null;\n return Math.pow(base, exponent);\n }\n case 'log_base': {\n if (values.length !== 2) {\n return null;\n }\n const value = values[0];\n const base = values[1];\n if (value <= 0 || base <= 0 || base === 1) return null; // Outside domain\n return Math.log(value) / Math.log(base);\n }\n case 'mod':\n if (values.length !== 2) return null;\n if (values[1] === 0) return null; // Division by zero\n return values[0] % values[1];\n\n case 'max':\n if (values.length < 1) return null;\n return Math.max(...values);\n\n case 'min':\n if (values.length < 1) return null;\n return Math.min(...values);\n\n default:\n console.error(`qti-math-operator: unknown operation \"${operation}\"`);\n return null;\n }\n } catch (error) {\n console.error(`qti-math-operator: error performing operation \"${operation}\":`, error);\n return null;\n }\n }\n}\n\ncustomElements.define('qti-math-operator', QtiMathOperator);\n"]}
|
|
1
|
+
{"version":3,"file":"qti-math-operator.js","sourceRoot":"","sources":["../../../src/components/qti-math-operator/qti-math-operator.ts"],"names":[],"mappings":"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","sourcesContent":["import { property } from 'lit/decorators.js';\n\nimport { QtiExpression } from '@qti-components/base';\n\nimport type { ResponseVariable } from '@qti-components/base';\n\n/**\n * @summary The qti-math-operator performs mathematical operations on numerical values.\n * @documentation https://www.imsglobal.org/spec/qti/v3p0/impl#h.math-operator\n *\n * Takes 1 or more sub-expressions with single cardinality and numerical base-types.\n * The result is a single float, except for signum, floor and ceil which return integers.\n * Returns NULL if any argument is NULL or falls outside the function's natural domain.\n */\nexport class QtiMathOperator extends QtiExpression<number | null> {\n @property({ type: String }) name: string = '';\n\n public override getResult(): number | null {\n if (!this.name) {\n console.error('qti-math-operator requires a name attribute');\n return null;\n }\n\n const variables = this.getVariables() as ResponseVariable[];\n if (!variables || variables.length === 0) {\n return null;\n }\n\n // Extract numerical values and validate\n const values: number[] = [];\n for (const variable of variables) {\n // Check cardinality\n if (variable.cardinality !== 'single') {\n console.error('qti-math-operator requires single cardinality');\n return null;\n }\n\n // Check if value is array (shouldn't be for single cardinality)\n if (Array.isArray(variable.value)) {\n console.error('qti-math-operator unexpected array value for single cardinality');\n return null;\n }\n\n // Handle null values\n if (variable.value === null || variable.value === undefined) {\n return null;\n }\n\n // Check base type\n if (variable.baseType !== 'integer' && variable.baseType !== 'float') {\n console.error('qti-math-operator requires numerical base-type');\n return null;\n }\n\n // Convert to number\n const numValue = parseFloat(variable.value as string);\n if (isNaN(numValue)) {\n console.error('qti-math-operator non-numerical value');\n return null;\n }\n\n values.push(numValue);\n }\n\n // Perform the mathematical operation\n return this.#performOperation(this.name, values);\n }\n\n #performOperation(operation: string, values: number[]): number | null {\n try {\n switch (operation.toLowerCase()) {\n // Single argument functions\n case 'sin':\n if (values.length !== 1) return null;\n return Math.sin(values[0]);\n\n case 'cos':\n if (values.length !== 1) return null;\n return Math.cos(values[0]);\n\n case 'tan':\n if (values.length !== 1) return null;\n return Math.tan(values[0]);\n\n case 'asin':\n if (values.length !== 1) return null;\n if (values[0] < -1 || values[0] > 1) return null; // Outside domain\n return Math.asin(values[0]);\n\n case 'acos':\n if (values.length !== 1) return null;\n if (values[0] < -1 || values[0] > 1) return null; // Outside domain\n return Math.acos(values[0]);\n\n case 'atan':\n if (values.length !== 1) return null;\n return Math.atan(values[0]);\n\n case 'sinh':\n if (values.length !== 1) return null;\n return Math.sinh(values[0]);\n\n case 'cosh':\n if (values.length !== 1) return null;\n return Math.cosh(values[0]);\n\n case 'tanh':\n if (values.length !== 1) return null;\n return Math.tanh(values[0]);\n\n case 'log':\n if (values.length !== 1) return null;\n if (values[0] <= 0) return null; // Outside domain\n return Math.log(values[0]);\n\n case 'ln':\n if (values.length !== 1) return null;\n if (values[0] <= 0) return null; // Outside domain\n return Math.log(values[0]);\n\n case 'log10':\n if (values.length !== 1) return null;\n if (values[0] <= 0) return null; // Outside domain\n return Math.log10(values[0]);\n\n case 'exp':\n if (values.length !== 1) return null;\n return Math.exp(values[0]);\n\n case 'abs':\n if (values.length !== 1) return null;\n return Math.abs(values[0]);\n\n case 'sqrt':\n if (values.length !== 1) return null;\n if (values[0] < 0) return null; // Outside domain\n return Math.sqrt(values[0]);\n\n case 'signum':\n if (values.length !== 1) return null;\n return Math.sign(values[0]); // Returns -1, 0, or 1 (integer)\n\n case 'floor':\n if (values.length !== 1) return null;\n return Math.floor(values[0]); // Returns integer\n\n case 'ceil':\n if (values.length !== 1) return null;\n return Math.ceil(values[0]); // Returns integer\n\n case 'round':\n if (values.length !== 1) return null;\n return Math.round(values[0]);\n\n // Two argument functions\n case 'atan2':\n if (values.length !== 2) return null;\n return Math.atan2(values[0], values[1]);\n\n case 'pow': {\n if (values.length !== 2) {\n return null;\n }\n const base = values[0];\n const exponent = values[1];\n // Check for invalid cases\n if (base === 0 && exponent <= 0) return null;\n if (base < 0 && !Number.isInteger(exponent)) return null;\n return Math.pow(base, exponent);\n }\n case 'log_base': {\n if (values.length !== 2) {\n return null;\n }\n const value = values[0];\n const base = values[1];\n if (value <= 0 || base <= 0 || base === 1) return null; // Outside domain\n return Math.log(value) / Math.log(base);\n }\n case 'mod':\n if (values.length !== 2) return null;\n if (values[1] === 0) return null; // Division by zero\n return values[0] % values[1];\n\n case 'max':\n if (values.length < 1) return null;\n return Math.max(...values);\n\n case 'min':\n if (values.length < 1) return null;\n return Math.min(...values);\n\n default:\n console.error(`qti-math-operator: unknown operation \"${operation}\"`);\n return null;\n }\n } catch (error) {\n console.error(`qti-math-operator: error performing operation \"${operation}\":`, error);\n return null;\n }\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qti-max.js","sourceRoot":"","sources":["../../../src/components/qti-max/qti-max.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAIrD;;;;;;;GAOG;AACH,MAAM,OAAO,MAAO,SAAQ,aAA4B;IACtC,SAAS;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,YAAY,EAAwB,CAAC,CAAC;QACrF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;YACpD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;IAC7B,CAAC;IAED,qBAAqB,CAAC,SAA6B;QACjD,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,SAAS;YACX,CAAC;YAED,MAAM,SAAS,GAAG,CAAC,GAAY,EAAE,EAAE;gBACjC,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;oBACtC,OAAO;gBACT,CAAC;gBACD,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAC5C,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC3B,OAAO,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;oBACvD,OAAO;gBACT,CAAC;gBACD,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACxB,CAAC,CAAC;YAEF,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;gBAChD,SAAS;YACX,CAAC;YAED,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF
|
|
1
|
+
{"version":3,"file":"qti-max.js","sourceRoot":"","sources":["../../../src/components/qti-max/qti-max.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAIrD;;;;;;;GAOG;AACH,MAAM,OAAO,MAAO,SAAQ,aAA4B;IACtC,SAAS;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,YAAY,EAAwB,CAAC,CAAC;QACrF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;YACpD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;IAC7B,CAAC;IAED,qBAAqB,CAAC,SAA6B;QACjD,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,SAAS;YACX,CAAC;YAED,MAAM,SAAS,GAAG,CAAC,GAAY,EAAE,EAAE;gBACjC,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;oBACtC,OAAO;gBACT,CAAC;gBACD,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAC5C,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC3B,OAAO,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;oBACvD,OAAO;gBACT,CAAC;gBACD,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACxB,CAAC,CAAC;YAEF,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;gBAChD,SAAS;YACX,CAAC;YAED,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF","sourcesContent":["import { QtiExpression } from '@qti-components/base';\n\nimport type { ResponseVariable } from '@qti-components/base';\n\n/**\n * @summary The qti-max operator finds the largest value in a numerical set.\n * @documentation https://www.imsglobal.org/spec/qti/v3p0/info/index.html#max\n *\n * Takes 1 or more numerical sub-expressions of any cardinality.\n * Returns the largest value in the collection.\n * Special cases: Returns NULL if any argument is NULL or non-numerical.\n */\nexport class QtiMax extends QtiExpression<number | null> {\n public override getResult(): number | null {\n const values = this.#collectNumericValues(this.getVariables() as ResponseVariable[]);\n if (values.length === 0) {\n console.warn('qti-max: no numeric values provided');\n return null;\n }\n\n return Math.max(...values);\n }\n\n #collectNumericValues(variables: ResponseVariable[]): number[] {\n const values: number[] = [];\n\n for (const variable of variables) {\n if (!variable) {\n continue;\n }\n\n const pushValue = (raw: unknown) => {\n if (raw === null || raw === undefined) {\n return;\n }\n const numValue = parseFloat(raw.toString());\n if (Number.isNaN(numValue)) {\n console.warn('qti-max: non-numeric value encountered');\n return;\n }\n values.push(numValue);\n };\n\n if (Array.isArray(variable.value)) {\n variable.value.forEach(item => pushValue(item));\n continue;\n }\n\n pushValue(variable.value);\n }\n\n return values;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qti-member.js","sourceRoot":"","sources":["../../../src/components/qti-member/qti-member.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAIrD,MAAM,OAAO,SAAU,SAAQ,aAA6B;IAC1C,SAAS;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAwB,CAAC;QAEzD,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;YAClC,OAAO,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC;QAEhC,IACE,CAAC,CACC,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ;YACnC,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,CAAC;YAC9D,CAAC,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,CAAC,CAC/D,EACD,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;QAC1D,CAAC;QACD,IAAI,CAAC,CAAC,MAAM,CAAC,WAAW,KAAK,UAAU,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS,CAAC,EAAE,CAAC;YAC7E,OAAO,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;QACzE,CAAC;QACD,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YAC/D,OAAO,CAAC,IAAI,CAAC,qFAAqF,CAAC,CAAC;QACtG,CAAC;QACD,IAAI,MAAM,CAAC,QAAQ,KAAK,UAAU,IAAI,MAAM,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;YACrE,OAAO,CAAC,IAAI,CAAC,qEAAqE,CAAC,CAAC;QACtF,CAAC;QAED,2EAA2E;QAC3E,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;YACnD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,iKAAiK;QACjK,MAAM,WAAW,GAAG,MAAM,CAAC,KAAe,CAAC;QAC3C,MAAM,WAAW,GAAG,MAAM,CAAC,KAAiB,CAAC;QAC7C,OAAO,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC3C,CAAC;CACF
|
|
1
|
+
{"version":3,"file":"qti-member.js","sourceRoot":"","sources":["../../../src/components/qti-member/qti-member.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAIrD,MAAM,OAAO,SAAU,SAAQ,aAA6B;IAC1C,SAAS;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAwB,CAAC;QAEzD,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;YAClC,OAAO,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC;QAEhC,IACE,CAAC,CACC,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ;YACnC,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,CAAC;YAC9D,CAAC,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,CAAC,CAC/D,EACD,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;QAC1D,CAAC;QACD,IAAI,CAAC,CAAC,MAAM,CAAC,WAAW,KAAK,UAAU,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS,CAAC,EAAE,CAAC;YAC7E,OAAO,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;QACzE,CAAC;QACD,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YAC/D,OAAO,CAAC,IAAI,CAAC,qFAAqF,CAAC,CAAC;QACtG,CAAC;QACD,IAAI,MAAM,CAAC,QAAQ,KAAK,UAAU,IAAI,MAAM,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;YACrE,OAAO,CAAC,IAAI,CAAC,qEAAqE,CAAC,CAAC;QACtF,CAAC;QAED,2EAA2E;QAC3E,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;YACnD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,iKAAiK;QACjK,MAAM,WAAW,GAAG,MAAM,CAAC,KAAe,CAAC;QAC3C,MAAM,WAAW,GAAG,MAAM,CAAC,KAAiB,CAAC;QAC7C,OAAO,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC3C,CAAC;CACF","sourcesContent":["import { QtiExpression } from '@qti-components/base';\n\nimport type { ResponseVariable } from '@qti-components/base';\n\nexport class QtiMember extends QtiExpression<boolean | null> {\n public override getResult() {\n const values = this.getVariables() as ResponseVariable[];\n\n if (!(this.children.length === 2)) {\n console.warn('The member operator takes two sub-expressions');\n }\n\n const [value1, value2] = values;\n\n if (\n !(\n value1.baseType === value2.baseType ||\n (value1.baseType === 'integer' && value2.baseType === 'float') ||\n (value1.baseType === 'float' && value2.baseType === 'integer')\n )\n ) {\n console.warn('Which must both have the same base-type');\n }\n if (!(value2.cardinality === 'multiple' || value2.cardinality === 'ordered')) {\n console.warn('and the second must be a multiple or ordered container');\n }\n if (value1.baseType === 'float' || value2.baseType === 'float') {\n console.warn('The member operator should not be used on sub-expressions with a base-type of float');\n }\n if (value1.baseType === 'duration' || value2.baseType === 'duration') {\n console.warn('It must not be used on sub-expressions with a base-type of duration');\n }\n\n // If either sub-expression is NULL then the result of the operator is NULL\n if (value1.value === null || value2.value === null) {\n return null;\n }\n\n // The result is a single boolean with a value of 'true' if the value given by the first sub-expression is in the container defined by the second sub-expression.\n const projection1 = value1.value as string;\n const projection2 = value2.value as string[];\n return projection2.includes(projection1);\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qti-min.js","sourceRoot":"","sources":["../../../src/components/qti-min/qti-min.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAIrD;;;;;;;GAOG;AACH,MAAM,OAAO,MAAO,SAAQ,aAA4B;IACtC,SAAS;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,YAAY,EAAwB,CAAC,CAAC;QACrF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;YACpD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;IAC7B,CAAC;IAED,qBAAqB,CAAC,SAA6B;QACjD,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,SAAS;YACX,CAAC;YAED,MAAM,SAAS,GAAG,CAAC,GAAY,EAAE,EAAE;gBACjC,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;oBACtC,OAAO;gBACT,CAAC;gBACD,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAC5C,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC3B,OAAO,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;oBACvD,OAAO;gBACT,CAAC;gBACD,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACxB,CAAC,CAAC;YAEF,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;gBAChD,SAAS;YACX,CAAC;YAED,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF
|
|
1
|
+
{"version":3,"file":"qti-min.js","sourceRoot":"","sources":["../../../src/components/qti-min/qti-min.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAIrD;;;;;;;GAOG;AACH,MAAM,OAAO,MAAO,SAAQ,aAA4B;IACtC,SAAS;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,YAAY,EAAwB,CAAC,CAAC;QACrF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;YACpD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;IAC7B,CAAC;IAED,qBAAqB,CAAC,SAA6B;QACjD,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,SAAS;YACX,CAAC;YAED,MAAM,SAAS,GAAG,CAAC,GAAY,EAAE,EAAE;gBACjC,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;oBACtC,OAAO;gBACT,CAAC;gBACD,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAC5C,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC3B,OAAO,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;oBACvD,OAAO;gBACT,CAAC;gBACD,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACxB,CAAC,CAAC;YAEF,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;gBAChD,SAAS;YACX,CAAC;YAED,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF","sourcesContent":["import { QtiExpression } from '@qti-components/base';\n\nimport type { ResponseVariable } from '@qti-components/base';\n\n/**\n * @summary The qti-min operator finds the smallest value in a numerical set.\n * @documentation https://www.imsglobal.org/spec/qti/v3p0/info/index.html#min\n *\n * Takes 1 or more numerical sub-expressions of any cardinality.\n * Returns the smallest value in the collection.\n * Special cases: Returns NULL if any argument is NULL or non-numerical.\n */\nexport class QtiMin extends QtiExpression<number | null> {\n public override getResult(): number | null {\n const values = this.#collectNumericValues(this.getVariables() as ResponseVariable[]);\n if (values.length === 0) {\n console.warn('qti-min: no numeric values provided');\n return null;\n }\n\n return Math.min(...values);\n }\n\n #collectNumericValues(variables: ResponseVariable[]): number[] {\n const values: number[] = [];\n\n for (const variable of variables) {\n if (!variable) {\n continue;\n }\n\n const pushValue = (raw: unknown) => {\n if (raw === null || raw === undefined) {\n return;\n }\n const numValue = parseFloat(raw.toString());\n if (Number.isNaN(numValue)) {\n console.warn('qti-min: non-numeric value encountered');\n return;\n }\n values.push(numValue);\n };\n\n if (Array.isArray(variable.value)) {\n variable.value.forEach(item => pushValue(item));\n continue;\n }\n\n pushValue(variable.value);\n }\n\n return values;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qti-multiple.js","sourceRoot":"","sources":["../../../src/components/qti-multiple/qti-multiple.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,MAAM,OAAO,WAAY,SAAQ,aAAuD;IACtE,SAAS;QACvB,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC/D,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAwB,CAAC;QAE5D,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;YAC/D,OAAO,IAAI,CAAC;QACd,CAAC;QACD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,IAAI,QAAQ,CAAC,WAAW,KAAK,UAAU,IAAI,QAAQ,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;gBAC7E,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;gBACxD,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QAED,8CAA8C;QAC9C,0BAA0B;QAC1B,sFAAsF;QACtF,kEAAkE;QAClE,UAAU;QACV,yBAAyB;QAEzB,OAAO,SAAS,CAAC;IACnB,CAAC;CACF
|
|
1
|
+
{"version":3,"file":"qti-multiple.js","sourceRoot":"","sources":["../../../src/components/qti-multiple/qti-multiple.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,MAAM,OAAO,WAAY,SAAQ,aAAuD;IACtE,SAAS;QACvB,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC/D,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAwB,CAAC;QAE5D,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;YAC/D,OAAO,IAAI,CAAC;QACd,CAAC;QACD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,IAAI,QAAQ,CAAC,WAAW,KAAK,UAAU,IAAI,QAAQ,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;gBAC7E,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;gBACxD,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QAED,8CAA8C;QAC9C,0BAA0B;QAC1B,sFAAsF;QACtF,kEAAkE;QAClE,UAAU;QACV,yBAAyB;QAEzB,OAAO,SAAS,CAAC;IACnB,CAAC;CACF","sourcesContent":["import { QtiExpression } from '@qti-components/base';\n\nimport type { ResponseVariable, VariableDeclaration } from '@qti-components/base';\nexport class QtiMultiple extends QtiExpression<VariableDeclaration<string | string[]>[]> {\n public override getResult(): ResponseVariable[] {\n console.debug('qti-multiple getResult called', this.innerHTML);\n const variables = this.getVariables() as ResponseVariable[];\n\n if (variables.length === 0) {\n console.error('unexpected number of children in qti multiple');\n return null;\n }\n for (const variable of variables) {\n if (variable.cardinality !== 'multiple' && variable.cardinality !== 'single') {\n console.error('unexpected cardinality in qti multiple');\n return [];\n }\n }\n\n // const values = variables.map(v => v.value);\n // console.log(variables);\n // const flattenedArray = values.reduce((acc: string[], value: string | string[]) => {\n // return acc.concat(Array.isArray(value) ? [...value] : value);\n // }, []);\n // return flattenedArray;\n\n return variables;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qti-not.js","sourceRoot":"","sources":["../../../src/components/qti-not/qti-not.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAE3B,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD;;;;;;;GAOG;AACH,MAAM,OAAO,MAAO,SAAQ,aAAsB;IACvC,MAAM;QACb,OAAO,IAAI,CAAA,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;IACjC,CAAC;IAEe,SAAS;QACvB,MAAM,UAAU,GAAG,IAAI,CAAC,iBAA2C,CAAC;QACpE,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,EAAa,CAAC;QACjD,OAAO,CAAC,MAAM,CAAC;IACjB,CAAC;CACF
|
|
1
|
+
{"version":3,"file":"qti-not.js","sourceRoot":"","sources":["../../../src/components/qti-not/qti-not.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAE3B,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD;;;;;;;GAOG;AACH,MAAM,OAAO,MAAO,SAAQ,aAAsB;IACvC,MAAM;QACb,OAAO,IAAI,CAAA,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;IACjC,CAAC;IAEe,SAAS;QACvB,MAAM,UAAU,GAAG,IAAI,CAAC,iBAA2C,CAAC;QACpE,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,EAAa,CAAC;QACjD,OAAO,CAAC,MAAM,CAAC;IACjB,CAAC;CACF","sourcesContent":["import { html } from 'lit';\n\nimport { QtiExpression } from '@qti-components/base';\n\n/**\n * @summary The qti-not operator performs logical negation.\n * @documentation https://www.imsglobal.org/spec/qti/v3p0/info/index.html#not\n *\n * Takes exactly 1 sub-expression with base-type boolean and single cardinality.\n * Returns true if sub-expression is false, and false if sub-expression is true.\n * Special cases: Returns NULL if sub-expression is NULL.\n */\nexport class QtiNot extends QtiExpression<boolean> {\n override render() {\n return html`${super.render()}`;\n }\n\n public override getResult() {\n const expression = this.firstElementChild as QtiExpression<boolean>;\n const result = expression.calculate() as boolean;\n return !result;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qti-null.js","sourceRoot":"","sources":["../../../src/components/qti-null/qti-null.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD;;;;;;GAMG;AACH,MAAM,OAAO,OAAQ,SAAQ,aAAmB;IAC9B,SAAS;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;CACF
|
|
1
|
+
{"version":3,"file":"qti-null.js","sourceRoot":"","sources":["../../../src/components/qti-null/qti-null.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD;;;;;;GAMG;AACH,MAAM,OAAO,OAAQ,SAAQ,aAAmB;IAC9B,SAAS;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;CACF","sourcesContent":["import { QtiExpression } from '@qti-components/base';\n\n/**\n * @summary The qti-null expression returns the NULL value.\n * @documentation https://www.imsglobal.org/spec/qti/v3p0/impl#h.null\n *\n * A simple expression that returns the NULL value. The null value is treated\n * as if it is of any desired base-type.\n */\nexport class QtiNull extends QtiExpression<null> {\n public override getResult(): null {\n return null;\n }\n}\n"]}
|