@qti-components/processing 1.3.3 → 1.4.0
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-condition/qti-condition-base.d.ts +48 -0
- package/dist/components/qti-condition/qti-condition-base.js +79 -0
- package/dist/components/qti-condition/qti-condition-base.js.map +1 -0
- 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-outcome-condition/qti-outcome-condition.d.ts +3 -0
- package/dist/components/qti-outcome-condition/qti-outcome-condition.js +4 -0
- package/dist/components/qti-outcome-condition/qti-outcome-condition.js.map +1 -0
- package/dist/components/qti-outcome-else/qti-outcome-else.d.ts +3 -0
- package/dist/components/qti-outcome-else/qti-outcome-else.js +4 -0
- package/dist/components/qti-outcome-else/qti-outcome-else.js.map +1 -0
- package/dist/components/qti-outcome-else-if/qti-outcome-else-if.d.ts +3 -0
- package/dist/components/qti-outcome-else-if/qti-outcome-else-if.js +4 -0
- package/dist/components/qti-outcome-else-if/qti-outcome-else-if.js.map +1 -0
- package/dist/components/qti-outcome-if/qti-outcome-if.d.ts +3 -0
- package/dist/components/qti-outcome-if/qti-outcome-if.js +4 -0
- package/dist/components/qti-outcome-if/qti-outcome-if.js.map +1 -0
- 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.d.ts +2 -4
- package/dist/components/qti-response-condition/qti-response-condition.js +2 -17
- package/dist/components/qti-response-condition/qti-response-condition.js.map +1 -1
- package/dist/components/qti-response-else/qti-response-else.d.ts +2 -7
- package/dist/components/qti-response-else/qti-response-else.js +2 -19
- package/dist/components/qti-response-else/qti-response-else.js.map +1 -1
- package/dist/components/qti-response-else-if/qti-response-else-if.d.ts +0 -1
- package/dist/components/qti-response-else-if/qti-response-else-if.js +0 -5
- package/dist/components/qti-response-else-if/qti-response-else-if.js.map +1 -1
- package/dist/components/qti-response-if/qti-response-if.d.ts +2 -5
- package/dist/components/qti-response-if/qti-response-if.js +2 -15
- 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 +270 -0
- package/dist/elements.js +138 -0
- package/dist/elements.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +5 -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-round.js","sourceRoot":"","sources":["../../../src/components/qti-round/qti-round.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAIrD;;;;;;;GAOG;AACH,MAAM,OAAO,QAAS,SAAQ,aAA4B;IACxC,SAAS;QACvB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;YAClE,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAwB,CAAC;QAC5D,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAE9B,oBAAoB;QACpB,IAAI,QAAQ,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;YACtC,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;YACvD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,gEAAgE;QAChE,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAClC,OAAO,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC;YACzE,OAAO,IAAI,CAAC;QACd,CAAC;QAED,qBAAqB;QACrB,IAAI,QAAQ,CAAC,KAAK,KAAK,IAAI,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC5D,OAAO,IAAI,CAAC;QACd,CAAC;QAED,kBAAkB;QAClB,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACrE,OAAO,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;YAC3E,OAAO,IAAI,CAAC;QACd,CAAC;QAED,oBAAoB;QACpB,MAAM,YAAY,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAe,CAAC,CAAC;QAE1D,uBAAuB;QACvB,IAAI,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;YACrD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YAC5B,wBAAwB;YACxB,IAAI,YAAY,KAAK,QAAQ,EAAE,CAAC;gBAC9B,OAAO,QAAQ,CAAC;YAClB,CAAC;YACD,IAAI,YAAY,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAC/B,OAAO,CAAC,QAAQ,CAAC;YACnB,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,sFAAsF;QACtF,iEAAiE;QACjE,wCAAwC;QACxC,4BAA4B;QAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,GAAG,CAAC,CAAC;IACxC,CAAC;CACF
|
|
1
|
+
{"version":3,"file":"qti-round.js","sourceRoot":"","sources":["../../../src/components/qti-round/qti-round.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAIrD;;;;;;;GAOG;AACH,MAAM,OAAO,QAAS,SAAQ,aAA4B;IACxC,SAAS;QACvB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;YAClE,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAwB,CAAC;QAC5D,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAE9B,oBAAoB;QACpB,IAAI,QAAQ,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;YACtC,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;YACvD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,gEAAgE;QAChE,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAClC,OAAO,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC;YACzE,OAAO,IAAI,CAAC;QACd,CAAC;QAED,qBAAqB;QACrB,IAAI,QAAQ,CAAC,KAAK,KAAK,IAAI,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC5D,OAAO,IAAI,CAAC;QACd,CAAC;QAED,kBAAkB;QAClB,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACrE,OAAO,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;YAC3E,OAAO,IAAI,CAAC;QACd,CAAC;QAED,oBAAoB;QACpB,MAAM,YAAY,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAe,CAAC,CAAC;QAE1D,uBAAuB;QACvB,IAAI,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;YACrD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YAC5B,wBAAwB;YACxB,IAAI,YAAY,KAAK,QAAQ,EAAE,CAAC;gBAC9B,OAAO,QAAQ,CAAC;YAClB,CAAC;YACD,IAAI,YAAY,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAC/B,OAAO,CAAC,QAAQ,CAAC;YACnB,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,sFAAsF;QACtF,iEAAiE;QACjE,wCAAwC;QACxC,4BAA4B;QAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,GAAG,CAAC,CAAC;IACxC,CAAC;CACF","sourcesContent":["import { QtiExpression } from '@qti-components/base';\n\nimport type { ResponseVariable } from '@qti-components/base';\n\n/**\n * @summary The qti-round operator rounds a numerical value to the nearest integer.\n * @documentation https://www.imsglobal.org/spec/qti/v3p0/info/index.html#round\n *\n * Takes 1 numerical sub-expression of single cardinality.\n * Returns integer n for input in range [n-0.5, n+0.5).\n * Special cases: Returns NULL if input is NULL or NaN.\n */\nexport class QtiRound extends QtiExpression<number | null> {\n public override getResult(): number | null {\n if (this.children.length !== 1) {\n console.error('qti-round must have exactly one child expression');\n return null;\n }\n\n const variables = this.getVariables() as ResponseVariable[];\n if (!variables || variables.length === 0) {\n return null;\n }\n\n const variable = variables[0];\n\n // Check cardinality\n if (variable.cardinality !== 'single') {\n console.error('qti-round 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-round 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-round requires numerical base-type (integer or float)');\n return null;\n }\n\n // Convert to number\n const numericValue = parseFloat(variable.value as string);\n\n // Handle special cases\n if (isNaN(numericValue)) {\n console.warn('qti-round: NaN input results in NULL');\n return null;\n }\n\n if (!isFinite(numericValue)) {\n // Handle infinity cases\n if (numericValue === Infinity) {\n return Infinity;\n }\n if (numericValue === -Infinity) {\n return -Infinity;\n }\n return null;\n }\n\n // Apply QTI rounding rule: result is integer n for all input values in [n-0.5, n+0.5)\n // This means we need to find n such that: n-0.5 <= value < n+0.5\n // Rearranging: n <= value + 0.5 < n + 1\n // So n = floor(value + 0.5)\n return Math.floor(numericValue + 0.5);\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qti-round-to.js","sourceRoot":"","sources":["../../../src/components/qti-round-to/qti-round-to.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAIrD;;;;;;;GAOG;AACH,MAAM,OAAO,UAAW,SAAQ,aAA4B;IAA5D;;QAEE,iBAAY,GAA2C,oBAAoB,CAAC;QAG5E,YAAO,GAAW,CAAC,CAAC;IAyGtB,CAAC;IAvGiB,SAAS;QACvB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;YACrE,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAwB,CAAC;QAC5D,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAE9B,oBAAoB;QACpB,IAAI,QAAQ,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;YACtC,OAAO,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;YAC1D,OAAO,IAAI,CAAC;QACd,CAAC;QAED,gEAAgE;QAChE,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAClC,OAAO,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;YAC5E,OAAO,IAAI,CAAC;QACd,CAAC;QAED,qBAAqB;QACrB,IAAI,QAAQ,CAAC,KAAK,KAAK,IAAI,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC5D,OAAO,IAAI,CAAC;QACd,CAAC;QAED,kBAAkB;QAClB,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACrE,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;YAC3D,OAAO,IAAI,CAAC;QACd,CAAC;QAED,oBAAoB;QACpB,MAAM,YAAY,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAe,CAAC,CAAC;QAE1D,uBAAuB;QACvB,IAAI,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YAC5B,wBAAwB;YACxB,IAAI,YAAY,KAAK,QAAQ,EAAE,CAAC;gBAC9B,OAAO,QAAQ,CAAC;YAClB,CAAC;YACD,IAAI,YAAY,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAC/B,OAAO,CAAC,QAAQ,CAAC;YACnB,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,mBAAmB;QACnB,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;YACrB,OAAO,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;YAC5D,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,IAAI,CAAC,YAAY,KAAK,oBAAoB,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;YACnE,OAAO,CAAC,KAAK,CAAC,sEAAsE,CAAC,CAAC;YACtF,OAAO,IAAI,CAAC;QACd,CAAC;QAED,mBAAmB;QACnB,IAAI,IAAI,CAAC,YAAY,KAAK,eAAe,EAAE,CAAC;YAC1C,OAAO,IAAI,CAAC,qBAAqB,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAChE,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC,0BAA0B,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IAED;;OAEG;IACH,qBAAqB,CAAC,KAAa,EAAE,aAAqB;QACxD,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YAChB,OAAO,CAAC,CAAC;QACX,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,GAAG,UAAU,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,0BAA0B,CAAC,KAAa,EAAE,kBAA0B;QAClE,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YAChB,OAAO,CAAC,CAAC;QACX,CAAC;QAED,0DAA0D;QAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAE1D,sDAAsD;QACtD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,kBAAkB,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC;QAEpE,uBAAuB;QACvB,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,GAAG,UAAU,CAAC;IACrD,CAAC;CACF;AA5GC;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC;gDACqB;AAG5E;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;2CACP
|
|
1
|
+
{"version":3,"file":"qti-round-to.js","sourceRoot":"","sources":["../../../src/components/qti-round-to/qti-round-to.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-round-to operator rounds a numerical value to specified precision.\n * @documentation https://www.imsglobal.org/spec/qti/v3p0/impl#h.round-to\n *\n * Takes one sub-expression with single cardinality and numerical base-type.\n * Returns a single float rounded by the specified method to the specified precision.\n * Supports rounding to decimal places or significant figures.\n */\nexport class QtiRoundTo extends QtiExpression<number | null> {\n @property({ type: String, attribute: 'rounding-mode' })\n roundingMode: 'decimalPlaces' | 'significantFigures' = 'significantFigures';\n\n @property({ type: Number })\n figures: number = 3;\n\n public override getResult(): number | null {\n if (this.children.length !== 1) {\n console.error('qti-round-to must have exactly one child expression');\n return null;\n }\n\n const variables = this.getVariables() as ResponseVariable[];\n if (!variables || variables.length === 0) {\n return null;\n }\n\n const variable = variables[0];\n\n // Check cardinality\n if (variable.cardinality !== 'single') {\n console.error('qti-round-to 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-round-to 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-round-to requires numerical base-type');\n return null;\n }\n\n // Convert to number\n const numericValue = parseFloat(variable.value as string);\n\n // Handle special cases\n if (isNaN(numericValue)) {\n return null;\n }\n\n if (!isFinite(numericValue)) {\n // Handle infinity cases\n if (numericValue === Infinity) {\n return Infinity;\n }\n if (numericValue === -Infinity) {\n return -Infinity;\n }\n return null;\n }\n\n // Validate figures\n if (this.figures < 0) {\n console.error('qti-round-to: figures must be non-negative');\n return null;\n }\n\n if (this.roundingMode === 'significantFigures' && this.figures < 1) {\n console.error('qti-round-to: figures must be at least 1 for significantFigures mode');\n return null;\n }\n\n // Perform rounding\n if (this.roundingMode === 'decimalPlaces') {\n return this.#roundToDecimalPlaces(numericValue, this.figures);\n } else {\n return this.#roundToSignificantFigures(numericValue, this.figures);\n }\n }\n\n /**\n * Round to specified number of decimal places\n */\n #roundToDecimalPlaces(value: number, decimalPlaces: number): number {\n if (value === 0) {\n return 0;\n }\n\n const multiplier = Math.pow(10, decimalPlaces);\n return Math.round(value * multiplier) / multiplier;\n }\n\n /**\n * Round to specified number of significant figures\n */\n #roundToSignificantFigures(value: number, significantFigures: number): number {\n if (value === 0) {\n return 0;\n }\n\n // Find the order of magnitude of the first non-zero digit\n const magnitude = Math.floor(Math.log10(Math.abs(value)));\n\n // Calculate the multiplier to shift the decimal point\n const multiplier = Math.pow(10, significantFigures - magnitude - 1);\n\n // Round and shift back\n return Math.round(value * multiplier) / multiplier;\n }\n}\n"]}
|
|
@@ -1,21 +1,10 @@
|
|
|
1
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
-
};
|
|
7
|
-
import { customElement } from 'lit/decorators.js';
|
|
8
1
|
import { html, LitElement } from 'lit';
|
|
9
|
-
|
|
2
|
+
export class QtiRule extends LitElement {
|
|
10
3
|
render() {
|
|
11
4
|
return html `<slot></slot>`;
|
|
12
5
|
}
|
|
13
6
|
process() {
|
|
14
7
|
throw new Error('Not implemented');
|
|
15
8
|
}
|
|
16
|
-
}
|
|
17
|
-
QtiRule = __decorate([
|
|
18
|
-
customElement('qti-rule')
|
|
19
|
-
], QtiRule);
|
|
20
|
-
export { QtiRule };
|
|
9
|
+
}
|
|
21
10
|
//# sourceMappingURL=qti-rule.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qti-rule.js","sourceRoot":"","sources":["../../../src/components/qti-rule/qti-rule.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"qti-rule.js","sourceRoot":"","sources":["../../../src/components/qti-rule/qti-rule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAIvC,MAAM,OAAO,OAAQ,SAAQ,UAAU;IAC5B,MAAM;QACb,OAAO,IAAI,CAAA,eAAe,CAAC;IAC7B,CAAC;IAEM,OAAO;QACZ,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;CACF","sourcesContent":["import { html, LitElement } from 'lit';\n\nimport type { QtiRuleBase } from '@qti-components/base';\n\nexport class QtiRule extends LitElement implements QtiRuleBase {\n override render() {\n return html`<slot></slot>`;\n }\n\n public process() {\n throw new Error('Not implemented');\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'qti-rule': QtiRule;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qti-set-correct-response.js","sourceRoot":"","sources":["../../../src/components/qti-set-correct-response/qti-set-correct-response.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"qti-set-correct-response.js","sourceRoot":"","sources":["../../../src/components/qti-set-correct-response/qti-set-correct-response.ts"],"names":[],"mappings":"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","sourcesContent":["import { convertNumberToUniversalFormat } from '@qti-components/base';\n\nimport { QtiRule } from '../qti-rule/qti-rule';\n\nimport type { QtiExpression, QtiExpressionBase, QtiRuleBase, ResponseVariable } from '@qti-components/base';\n\n/**\n * Web component that processes `setCorrectResponse` in QTI.\n */\nexport class QtiSetCorrectResponse extends QtiRule {\n /**\n * Processes the QTI rule and dispatches a custom event with the computed correct response value.\n */\n public override process(): void {\n const responseIdentifier = this.getAttribute('identifier');\n\n if (!responseIdentifier) {\n console.warn('QtiSetCorrectResponse: Missing \"identifier\" attribute.');\n return;\n }\n\n const expression = this.firstElementChild as QtiExpression<unknown> | null;\n\n if (!expression) {\n console.warn('QtiSetCorrectResponse: No expression found.');\n return;\n }\n\n const rule = new QtiSetCorrectResponseRule<unknown>(expression);\n const value = rule.process();\n\n this.dispatchEvent(\n new CustomEvent<{ responseIdentifier: string; value: string | string[] | null }>('qti-set-correct-response', {\n bubbles: true,\n composed: true,\n detail: {\n responseIdentifier,\n value: this.#formatValue(value)\n }\n })\n );\n }\n\n #formatValue(value: unknown): string | string[] | null {\n if (value === null || value === undefined) {\n return null;\n }\n\n if (Array.isArray(value)) {\n return value.map(item => convertNumberToUniversalFormat(this.#unwrapValue(item)));\n }\n\n return convertNumberToUniversalFormat(this.#unwrapValue(value));\n }\n\n #unwrapValue(value: unknown): string {\n if (value && typeof value === 'object' && 'value' in (value as ResponseVariable)) {\n const responseValue = (value as ResponseVariable).value;\n return responseValue !== null && responseValue !== undefined ? responseValue.toString() : '';\n }\n\n return value?.toString() ?? '';\n }\n}\n\n/**\n * Encapsulates the logic for processing QTI setCorrectResponse expressions.\n */\nexport class QtiSetCorrectResponseRule<T> implements QtiRuleBase {\n constructor(private expression: QtiExpressionBase<T>) {}\n\n /**\n * Evaluates the expression and returns its value.\n */\n process(): unknown {\n const value = this.expression.calculate() ?? null;\n\n if (value === null) {\n console.warn('QtiSetCorrectResponseRule: Evaluated value is null.');\n }\n\n if (Array.isArray(value)) {\n return value.map(item => this.#unwrapResult(item));\n }\n\n return this.#unwrapResult(value);\n }\n\n #unwrapResult(value: unknown): unknown {\n if (value && typeof value === 'object' && 'value' in (value as ResponseVariable)) {\n return (value as ResponseVariable).value;\n }\n\n return value;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qti-set-outcome-value.js","sourceRoot":"","sources":["../../../src/components/qti-set-outcome-value/qti-set-outcome-value.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAAE,MAAM,sBAAsB,CAAC;AAEtE,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAM/C;;GAEG;AACH,MAAM,OAAO,kBAAmB,SAAQ,OAAO;IAC7C;;OAEG;IACa,OAAO;QACrB,MAAM,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;QAE1D,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;YACpE,OAAO;QACT,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAsE,CAAC;QAE/F,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;YACzD,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,sBAAsB,CAAqC,UAAU,CAAC,CAAC;QACxF,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAE7B,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAiE,uBAAuB,EAAE;YACvG,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE;gBACN,iBAAiB;gBACjB,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;aAChC;SACF,CAAC,CACH,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,YAAY,CAAC,KAA+B;QAC1C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,8BAA8B,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACvE,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,sBAAsB;IACjC,YAAoB,UAAgC;QAAhC,eAAU,GAAV,UAAU,CAAsB;IAAG,CAAC;IAExD;;OAEG;IACH,OAAO;QACL,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,IAAI,IAAI,CAAwC,CAAC;QAE3F,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;QACnE,CAAC;QAED,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,KAAa,CAAC,GAAG,CAAC,CAAC,CAAiB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC3G,CAAC;CACF;AAED,4BAA4B
|
|
1
|
+
{"version":3,"file":"qti-set-outcome-value.js","sourceRoot":"","sources":["../../../src/components/qti-set-outcome-value/qti-set-outcome-value.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAAE,MAAM,sBAAsB,CAAC;AAEtE,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAM/C;;GAEG;AACH,MAAM,OAAO,kBAAmB,SAAQ,OAAO;IAC7C;;OAEG;IACa,OAAO;QACrB,MAAM,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;QAE1D,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;YACpE,OAAO;QACT,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAsE,CAAC;QAE/F,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;YACzD,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,sBAAsB,CAAqC,UAAU,CAAC,CAAC;QACxF,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAE7B,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAiE,uBAAuB,EAAE;YACvG,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE;gBACN,iBAAiB;gBACjB,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;aAChC;SACF,CAAC,CACH,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,YAAY,CAAC,KAA+B;QAC1C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,8BAA8B,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACvE,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,sBAAsB;IACjC,YAAoB,UAAgC;QAAhC,eAAU,GAAV,UAAU,CAAsB;IAAG,CAAC;IAExD;;OAEG;IACH,OAAO;QACL,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,IAAI,IAAI,CAAwC,CAAC;QAE3F,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;QACnE,CAAC;QAED,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,KAAa,CAAC,GAAG,CAAC,CAAC,CAAiB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC3G,CAAC;CACF;AAED,4BAA4B","sourcesContent":["import { convertNumberToUniversalFormat } from '@qti-components/base';\n\nimport { QtiRule } from '../qti-rule/qti-rule';\n\nimport type { ResponseVariable } from '@qti-components/base';\nimport type { QtiExpression, QtiExpressionBase } from '@qti-components/base';\nimport type { QtiRuleBase } from '@qti-components/base';\n\n/**\n * Web component that processes `setOutcomeValue` in QTI.\n */\nexport class QtiSetOutcomeValue extends QtiRule {\n /**\n * Processes the QTI rule and dispatches a custom event with the computed outcome value.\n */\n public override process(): void {\n const outcomeIdentifier = this.getAttribute('identifier');\n\n if (!outcomeIdentifier) {\n console.warn('QtiSetOutcomeValue: Missing \"identifier\" attribute.');\n return;\n }\n\n const expression = this.firstElementChild as QtiExpression<string | ResponseVariable[]> | null;\n\n if (!expression) {\n console.warn('QtiSetOutcomeValue: No expression found.');\n return;\n }\n\n const rule = new QtiSetOutcomeValueRule<string | ResponseVariable[] | null>(expression);\n const value = rule.process();\n\n this.dispatchEvent(\n new CustomEvent<{ outcomeIdentifier: string; value: string | string[] | null }>('qti-set-outcome-value', {\n bubbles: true,\n composed: true,\n detail: {\n outcomeIdentifier,\n value: this.#formatValue(value)\n }\n })\n );\n }\n\n /**\n * Formats the computed value before dispatching.\n * Ensures numbers are converted to a universal format.\n */\n #formatValue(value: string | string[] | null): string | string[] | null {\n if (Array.isArray(value)) {\n return value.map(convertNumberToUniversalFormat);\n }\n return value !== null ? convertNumberToUniversalFormat(value) : null;\n }\n}\n\n/**\n * Encapsulates the logic for processing QTI setOutcomeValue expressions.\n */\nexport class QtiSetOutcomeValueRule<T> implements QtiRuleBase {\n constructor(private expression: QtiExpressionBase<T>) {}\n\n /**\n * Evaluates the expression and returns its value.\n */\n process(): string | string[] | null {\n const value = (this.expression.calculate() ?? null) as unknown as string | string[] | null;\n\n if (value === null) {\n console.warn('QtiSetOutcomeValueRule: Evaluated value is null.');\n }\n\n return Array.isArray(value) ? (value as any).map((v: { value: any }) => (v.value ? v.value : v)) : value;\n }\n}\n\n// Define the custom element\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qti-set-template-value.js","sourceRoot":"","sources":["../../../src/components/qti-set-template-value/qti-set-template-value.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAAE,MAAM,sBAAsB,CAAC;AAEtE,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAI/C;;GAEG;AACH,MAAM,OAAO,mBAAoB,SAAQ,OAAO;IAC9C;;OAEG;IACa,OAAO;QACrB,MAAM,kBAAkB,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;QAE3D,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;YACrE,OAAO;QACT,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAkD,CAAC;QAE3E,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;YAC1D,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,uBAAuB,CAAU,UAAU,CAAC,CAAC;QAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAE7B,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAkE,wBAAwB,EAAE;YACzG,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE;gBACN,kBAAkB;gBAClB,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;aAChC;SACF,CAAC,CACH,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,YAAY,CAAC,KAAc;QACzB,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YAC1C,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,8BAA8B,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpF,CAAC;QAED,OAAO,8BAA8B,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,YAAY,CAAC,KAAc;QACzB,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,IAAK,KAA0B,EAAE,CAAC;YACjF,MAAM,aAAa,GAAI,KAA0B,CAAC,KAAK,CAAC;YACxD,OAAO,aAAa,KAAK,IAAI,IAAI,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/F,CAAC;QAED,OAAO,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACjC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,uBAAuB;IAClC,YAAoB,UAAgC;QAAhC,eAAU,GAAV,UAAU,CAAsB;IAAG,CAAC;IAExD;;OAEG;IACH,OAAO;QACL,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC;QAElD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;QACpE,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;QACrD,CAAC;QAED,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAED,aAAa,CAAC,KAAc;QAC1B,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,IAAK,KAA0B,EAAE,CAAC;YACjF,OAAQ,KAA0B,CAAC,KAAK,CAAC;QAC3C,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;CACF
|
|
1
|
+
{"version":3,"file":"qti-set-template-value.js","sourceRoot":"","sources":["../../../src/components/qti-set-template-value/qti-set-template-value.ts"],"names":[],"mappings":"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","sourcesContent":["import { convertNumberToUniversalFormat } from '@qti-components/base';\n\nimport { QtiRule } from '../qti-rule/qti-rule';\n\nimport type { QtiExpression, QtiExpressionBase, QtiRuleBase, ResponseVariable } from '@qti-components/base';\n\n/**\n * Web component that processes `setTemplateValue` in QTI.\n */\nexport class QtiSetTemplateValue extends QtiRule {\n /**\n * Processes the QTI rule and dispatches a custom event with the computed template value.\n */\n public override process(): void {\n const templateIdentifier = this.getAttribute('identifier');\n\n if (!templateIdentifier) {\n console.warn('QtiSetTemplateValue: Missing \"identifier\" attribute.');\n return;\n }\n\n const expression = this.firstElementChild as QtiExpression<unknown> | null;\n\n if (!expression) {\n console.warn('QtiSetTemplateValue: No expression found.');\n return;\n }\n\n const rule = new QtiSetTemplateValueRule<unknown>(expression);\n const value = rule.process();\n\n this.dispatchEvent(\n new CustomEvent<{ templateIdentifier: string; value: string | string[] | null }>('qti-set-template-value', {\n bubbles: true,\n composed: true,\n detail: {\n templateIdentifier,\n value: this.#formatValue(value)\n }\n })\n );\n }\n\n /**\n * Formats the computed value before dispatching.\n * Ensures numbers are converted to a universal format.\n */\n #formatValue(value: unknown): string | string[] | null {\n if (value === null || value === undefined) {\n return null;\n }\n\n if (Array.isArray(value)) {\n return value.map(item => convertNumberToUniversalFormat(this.#unwrapValue(item)));\n }\n\n return convertNumberToUniversalFormat(this.#unwrapValue(value));\n }\n\n #unwrapValue(value: unknown): string {\n if (value && typeof value === 'object' && 'value' in (value as ResponseVariable)) {\n const responseValue = (value as ResponseVariable).value;\n return responseValue !== null && responseValue !== undefined ? responseValue.toString() : '';\n }\n\n return value?.toString() ?? '';\n }\n}\n\n/**\n * Encapsulates the logic for processing QTI setTemplateValue expressions.\n */\nexport class QtiSetTemplateValueRule<T> implements QtiRuleBase {\n constructor(private expression: QtiExpressionBase<T>) {}\n\n /**\n * Evaluates the expression and returns its value.\n */\n process(): unknown {\n const value = this.expression.calculate() ?? null;\n\n if (value === null) {\n console.warn('QtiSetTemplateValueRule: Evaluated value is null.');\n }\n\n if (Array.isArray(value)) {\n return value.map(item => this.#unwrapResult(item));\n }\n\n return this.#unwrapResult(value);\n }\n\n #unwrapResult(value: unknown): unknown {\n if (value && typeof value === 'object' && 'value' in (value as ResponseVariable)) {\n return (value as ResponseVariable).value;\n }\n\n return value;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qti-stats-operator.js","sourceRoot":"","sources":["../../../src/components/qti-stats-operator/qti-stats-operator.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"qti-stats-operator.js","sourceRoot":"","sources":["../../../src/components/qti-stats-operator/qti-stats-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-stats-operator performs statistical calculations on a container.\n * @documentation https://www.imsglobal.org/spec/qti/v3p0/info/index.html#statsOperator\n *\n * Takes 1 container (multiple/ordered) of numerical base-type.\n * 'name' attribute identifies function (mean, popSD, popVariance, sampleSD, sampleVariance).\n * Returns result as a single float.\n * Special cases: Returns NULL if any values in container are NULL or non-numerical.\n */\nexport class QtiStatsOperator extends QtiExpression<number | null> {\n @property({ type: String }) name: string = '';\n\n public override getResult(): number | null {\n if (!this.name) {\n console.warn('qti-stats-operator: missing name attribute');\n return null;\n }\n\n const values = this.#collectNumericValues(this.getVariables() as ResponseVariable[]);\n if (values.length === 0) {\n console.warn('qti-stats-operator: no numeric values provided');\n return null;\n }\n\n switch (this.name.toLowerCase()) {\n case 'mean':\n return values.reduce((sum, value) => sum + value, 0) / values.length;\n case 'popsd':\n return this.#populationStandardDeviation(values);\n default:\n console.warn(`qti-stats-operator: unsupported operator \"${this.name}\"`);\n return null;\n }\n }\n\n #populationStandardDeviation(values: number[]): number {\n const mean = values.reduce((sum, value) => sum + value, 0) / values.length;\n const variance = values.reduce((sum, value) => sum + Math.pow(value - mean, 2), 0) / values.length;\n return Math.sqrt(variance);\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-stats-operator: 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"]}
|
|
@@ -35,5 +35,4 @@ export class QtiStringMatch extends QtiExpression {
|
|
|
35
35
|
__decorate([
|
|
36
36
|
property({ type: String, attribute: 'case-sensitive' })
|
|
37
37
|
], QtiStringMatch.prototype, "caseSensitive", void 0);
|
|
38
|
-
customElements.define('qti-string-match', QtiStringMatch);
|
|
39
38
|
//# sourceMappingURL=qti-string-match.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qti-string-match.js","sourceRoot":"","sources":["../../../src/components/qti-string-match/qti-string-match.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;AAIrD,MAAM,OAAO,cAAe,SAAQ,aAAsB;IAA1D;;QAC2D,kBAAa,GAAG,MAAM,CAAC;IAuBlF,CAAC;IArBiB,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,MAAM,CAAC,WAAW,KAAK,QAAQ;gBAC/B,MAAM,CAAC,WAAW,KAAK,QAAQ;gBAC/B,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC3B,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAC3B,CAAC;gBACD,OAAO,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;gBAC5D,OAAO,KAAK,CAAC;YACf,CAAC;YACD,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAE,MAAM,CAAC,KAAgB,CAAC,WAAW,EAAE,CAAC;YACjG,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAE,MAAM,CAAC,KAAgB,CAAC,WAAW,EAAE,CAAC;YACjG,OAAO,aAAa,CAAC,mBAAmB,CAAC,EAAY,EAAE,EAAY,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACxF,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACnE,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAvB0D;IAAxD,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;qDAAwB
|
|
1
|
+
{"version":3,"file":"qti-string-match.js","sourceRoot":"","sources":["../../../src/components/qti-string-match/qti-string-match.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;AAIrD,MAAM,OAAO,cAAe,SAAQ,aAAsB;IAA1D;;QAC2D,kBAAa,GAAG,MAAM,CAAC;IAuBlF,CAAC;IArBiB,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,MAAM,CAAC,WAAW,KAAK,QAAQ;gBAC/B,MAAM,CAAC,WAAW,KAAK,QAAQ;gBAC/B,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC3B,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAC3B,CAAC;gBACD,OAAO,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;gBAC5D,OAAO,KAAK,CAAC;YACf,CAAC;YACD,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAE,MAAM,CAAC,KAAgB,CAAC,WAAW,EAAE,CAAC;YACjG,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAE,MAAM,CAAC,KAAgB,CAAC,WAAW,EAAE,CAAC;YACjG,OAAO,aAAa,CAAC,mBAAmB,CAAC,EAAY,EAAE,EAAY,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACxF,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACnE,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAvB0D;IAAxD,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;qDAAwB","sourcesContent":["import { property } from 'lit/decorators.js';\n\nimport { ScoringHelper } from '@qti-components/base';\nimport { QtiExpression } from '@qti-components/base';\n\nimport type { ResponseVariable } from '@qti-components/base';\n\nexport class QtiStringMatch extends QtiExpression<boolean> {\n @property({ type: String, attribute: 'case-sensitive' }) caseSensitive = 'true';\n\n public override getResult() {\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.cardinality !== 'single' ||\n value2.cardinality !== 'single' ||\n Array.isArray(value1.value) ||\n Array.isArray(value2.value)\n ) {\n console.error('unexpected cardinality in qti string-match');\n return false;\n }\n const v1 = this.caseSensitive === 'true' ? value1.value : (value1.value as string).toLowerCase();\n const v2 = this.caseSensitive === 'true' ? value2.value : (value2.value as string).toLowerCase();\n return ScoringHelper.compareSingleValues(v1 as string, v2 as string, value1.baseType);\n }\n console.error('unexpected number of children in qti-string-match');\n return null;\n }\n}\n"]}
|
|
@@ -33,7 +33,10 @@ export class QtiSubstring extends QtiExpression {
|
|
|
33
33
|
console.error('qti-substring requires single cardinality');
|
|
34
34
|
return null;
|
|
35
35
|
}
|
|
36
|
-
if (needle.value === null ||
|
|
36
|
+
if (needle.value === null ||
|
|
37
|
+
haystack.value === null ||
|
|
38
|
+
needle.value === undefined ||
|
|
39
|
+
haystack.value === undefined) {
|
|
37
40
|
return null;
|
|
38
41
|
}
|
|
39
42
|
const left = needle.value.toString();
|
|
@@ -47,5 +50,4 @@ export class QtiSubstring extends QtiExpression {
|
|
|
47
50
|
__decorate([
|
|
48
51
|
property({ type: String, attribute: 'case-sensitive' })
|
|
49
52
|
], QtiSubstring.prototype, "caseSensitive", void 0);
|
|
50
|
-
customElements.define('qti-substring', QtiSubstring);
|
|
51
53
|
//# sourceMappingURL=qti-substring.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qti-substring.js","sourceRoot":"","sources":["../../../src/components/qti-substring/qti-substring.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAIrD;;;;;;;GAOG;AACH,MAAM,OAAO,YAAa,SAAQ,aAA6B;IAA/D;;QAC2D,kBAAa,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"qti-substring.js","sourceRoot":"","sources":["../../../src/components/qti-substring/qti-substring.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAIrD;;;;;;;GAOG;AACH,MAAM,OAAO,YAAa,SAAQ,aAA6B;IAA/D;;QAC2D,kBAAa,GAAG,MAAM,CAAC;IAqClF,CAAC;IAnCiB,SAAS;QACvB,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAwB,CAAC;QAE5D,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;YACpE,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,SAAS,CAAC;QACrC,IACE,MAAM,CAAC,WAAW,KAAK,QAAQ;YAC/B,QAAQ,CAAC,WAAW,KAAK,QAAQ;YACjC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;YAC3B,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAC7B,CAAC;YACD,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;YAC3D,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IACE,MAAM,CAAC,KAAK,KAAK,IAAI;YACrB,QAAQ,CAAC,KAAK,KAAK,IAAI;YACvB,MAAM,CAAC,KAAK,KAAK,SAAS;YAC1B,QAAQ,CAAC,KAAK,KAAK,SAAS,EAC5B,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QACxC,IAAI,IAAI,CAAC,aAAa,KAAK,MAAM,EAAE,CAAC;YAClC,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAC1D,CAAC;QAED,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;CACF;AArC0D;IAAxD,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;mDAAwB","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-substring operator checks if one string is contained within another.\n * @documentation https://www.imsglobal.org/spec/qti/v3p0/info/index.html#substring\n *\n * Takes 2 sub-expressions with base-type string and single cardinality.\n * Returns true if the first string is a substring of the second.\n * Special cases: Returns NULL if either argument is NULL.\n */\nexport class QtiSubstring extends QtiExpression<boolean | null> {\n @property({ type: String, attribute: 'case-sensitive' }) caseSensitive = 'true';\n\n public override getResult(): boolean | null {\n const variables = this.getVariables() as ResponseVariable[];\n\n if (variables.length !== 2) {\n console.error('qti-substring requires exactly 2 child expressions');\n return null;\n }\n\n const [needle, haystack] = variables;\n if (\n needle.cardinality !== 'single' ||\n haystack.cardinality !== 'single' ||\n Array.isArray(needle.value) ||\n Array.isArray(haystack.value)\n ) {\n console.error('qti-substring requires single cardinality');\n return null;\n }\n if (\n needle.value === null ||\n haystack.value === null ||\n needle.value === undefined ||\n haystack.value === undefined\n ) {\n return null;\n }\n\n const left = needle.value.toString();\n const right = haystack.value.toString();\n if (this.caseSensitive !== 'true') {\n return right.toLowerCase().includes(left.toLowerCase());\n }\n\n return right.includes(left);\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/qti-subtract/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/qti-subtract/index.ts"],"names":[],"mappings":"AAEA,cAAc,gBAAgB,CAAC","sourcesContent":["import type { QtiSubtract } from './qti-subtract';\n\nexport * from './qti-subtract';\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'qti-subtract': QtiSubtract;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qti-sum.js","sourceRoot":"","sources":["../../../src/components/qti-sum/qti-sum.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAIrD;;;;;;;GAOG;AACH,MAAM,OAAO,MAAO,SAAQ,aAAqB;IAC/B,SAAS;QACvB,uEAAuE;QACvE,MAAM,UAAU,GAAG,IAAI,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAkD,CAAC,CAAC,CAAC;QAC7G,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC;QACrC,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAED,MAAM,OAAO,gBAAgB;IAC3B,YAAoB,WAAwC;QAAxC,gBAAW,GAAX,WAAW,CAA6B;IAAG,CAAC;IAEzD,SAAS;QACd,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;QAC5E,wCAAwC;QACxC,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YAClD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YACtC,MAAM,KAAK,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;YAC5B,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxB,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;gBAC9D,OAAO,IAAI,CAAC;YACd,CAAC;YAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3C,CAAC;CACF
|
|
1
|
+
{"version":3,"file":"qti-sum.js","sourceRoot":"","sources":["../../../src/components/qti-sum/qti-sum.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAIrD;;;;;;;GAOG;AACH,MAAM,OAAO,MAAO,SAAQ,aAAqB;IAC/B,SAAS;QACvB,uEAAuE;QACvE,MAAM,UAAU,GAAG,IAAI,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAkD,CAAC,CAAC,CAAC;QAC7G,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC;QACrC,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAED,MAAM,OAAO,gBAAgB;IAC3B,YAAoB,WAAwC;QAAxC,gBAAW,GAAX,WAAW,CAA6B;IAAG,CAAC;IAEzD,SAAS;QACd,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;QAC5E,wCAAwC;QACxC,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YAClD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YACtC,MAAM,KAAK,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;YAC5B,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxB,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;gBAC9D,OAAO,IAAI,CAAC;YACd,CAAC;YAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3C,CAAC;CACF","sourcesContent":["import { QtiExpression } from '@qti-components/base';\n\nimport type { QtiExpressionBase } from '@qti-components/base';\n\n/**\n * @summary The qti-sum operator calculates the total of multiple numerical values.\n * @documentation https://www.imsglobal.org/spec/qti/v3p0/info/index.html#sum\n *\n * Takes 1 or more sub-expressions with numerical base-types and any cardinality.\n * Returns a single float (or integer if all arguments are integers) representing the total.\n * Special cases: Returns NULL if any sub-expression is NULL.\n */\nexport class QtiSum extends QtiExpression<number> {\n public override getResult() {\n // children can be a mix of qti-expression and qti-condition-expression\n const expression = new QtiSumExpression(Array.from(this.children as unknown as QtiExpressionBase<number>[]));\n const value = expression.calculate();\n return value;\n }\n}\n\nexport class QtiSumExpression implements QtiExpressionBase<number> {\n constructor(private expressions: QtiExpressionBase<number>[]) {}\n\n public calculate() {\n const expressions = this.expressions.filter(c => c.calculate !== undefined);\n // check if one expresssion returns null\n if (expressions.some(c => c.calculate() === null)) {\n return null;\n }\n\n const values = this.expressions.map(c => {\n const value = c.calculate();\n if (Number.isNaN(value)) {\n console.error('unexpected value in qti-sum, expected number');\n return null;\n }\n\n return Number(value);\n });\n return values.reduce((a, b) => a + b, 0);\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qti-truncate.js","sourceRoot":"","sources":["../../../src/components/qti-truncate/qti-truncate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAIrD;;;;;;;GAOG;AACH,MAAM,OAAO,WAAY,SAAQ,aAA4B;IAC3C,SAAS;QACvB,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAwB,CAAC;QAE5D,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;YACpE,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,QAAQ,CAAC,WAAW,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACvE,OAAO,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;YAC1D,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACrE,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;YAC3D,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,UAAU,CAAC,QAAQ,CAAC,KAAe,CAAC,CAAC;QAC1D,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;YACzD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;CACF
|
|
1
|
+
{"version":3,"file":"qti-truncate.js","sourceRoot":"","sources":["../../../src/components/qti-truncate/qti-truncate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAIrD;;;;;;;GAOG;AACH,MAAM,OAAO,WAAY,SAAQ,aAA4B;IAC3C,SAAS;QACvB,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAwB,CAAC;QAE5D,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;YACpE,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,QAAQ,CAAC,WAAW,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACvE,OAAO,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;YAC1D,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACrE,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;YAC3D,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,UAAU,CAAC,QAAQ,CAAC,KAAe,CAAC,CAAC;QAC1D,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;YACzD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;CACF","sourcesContent":["import { QtiExpression } from '@qti-components/base';\n\nimport type { ResponseVariable } from '@qti-components/base';\n\n/**\n * @summary The qti-truncate operator removes fractional parts of a number.\n * @documentation https://www.imsglobal.org/spec/qti/v3p0/info/index.html#truncate\n *\n * Takes 1 numerical sub-expression of single cardinality.\n * Returns integer formed by truncating value toward zero.\n * Special cases: Returns NULL if input is NULL or NaN.\n */\nexport class QtiTruncate 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-truncate requires exactly one child expression');\n return null;\n }\n\n const variable = variables[0];\n if (variable.cardinality !== 'single' || Array.isArray(variable.value)) {\n console.error('qti-truncate requires single cardinality');\n return null;\n }\n if (variable.baseType !== 'integer' && variable.baseType !== 'float') {\n console.error('qti-truncate requires numerical base-type');\n return null;\n }\n if (variable.value === null || variable.value === undefined) {\n return null;\n }\n\n const value = Number.parseFloat(variable.value as string);\n if (Number.isNaN(value)) {\n console.error('qti-truncate requires a numerical value');\n return null;\n }\n\n return Math.trunc(value);\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qti-variable.js","sourceRoot":"","sources":["../../../src/components/qti-variable/qti-variable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,OAAO,WAAY,SAAQ,aAAgC;IAC/C,SAAS;QACvB,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,UAAU,CAAC,CAAC,KAAK,CAAC;QACnF,OAAO,MAAM,CAAC;IAChB,CAAC;CACF
|
|
1
|
+
{"version":3,"file":"qti-variable.js","sourceRoot":"","sources":["../../../src/components/qti-variable/qti-variable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,OAAO,WAAY,SAAQ,aAAgC;IAC/C,SAAS;QACvB,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,UAAU,CAAC,CAAC,KAAK,CAAC;QACnF,OAAO,MAAM,CAAC;IAChB,CAAC;CACF","sourcesContent":["import { QtiExpression } from '@qti-components/base';\n\nexport class QtiVariable extends QtiExpression<string | string[]> {\n public override getResult() {\n const identifier = this.getAttribute('identifier');\n const result = this.context.variables.find(v => v.identifier === identifier).value;\n return result;\n }\n}\n"]}
|