@pie-element/hotspot 11.1.2-next.0 → 11.1.2-next.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/author/hotspot-drawable.js +119 -119
- package/dist/author/utils.js +9 -9
- package/dist/browser/author/index.js +6215 -6866
- package/dist/browser/author/index.js.map +1 -1
- package/dist/browser/browser-CfnAFove.js +13 -4
- package/dist/browser/controller/index.js +1 -1
- package/dist/browser/controller/index.js.map +1 -1
- package/dist/browser/dist-C78LDz6R.js +96 -0
- package/dist/browser/dist-C78LDz6R.js.map +1 -0
- package/dist/controller/index.js +24 -24
- package/dist/controller/utils.d.ts +1 -1
- package/dist/controller/utils.js +1 -2
- package/dist/runtime-support.d.ts +12 -0
- package/dist/runtime-support.js +12 -0
- package/package.json +10 -6
- package/dist/browser/isEqual-D3CTSc6W.js +0 -601
- package/dist/browser/isEqual-D3CTSc6W.js.map +0 -1
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_DataView.js +0 -6
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_Hash.js +0 -16
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_ListCache.js +0 -16
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_Map.js +0 -6
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_MapCache.js +0 -16
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_Promise.js +0 -6
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_Set.js +0 -6
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_SetCache.js +0 -11
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_Stack.js +0 -14
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_Symbol.js +0 -5
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_Uint8Array.js +0 -5
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_WeakMap.js +0 -6
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_arrayEach.js +0 -7
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_arrayFilter.js +0 -10
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_arrayLikeKeys.js +0 -15
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_arrayPush.js +0 -7
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_arraySome.js +0 -7
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_assignValue.js +0 -10
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_assocIndexOf.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseAssign.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseAssignIn.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseAssignValue.js +0 -12
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseClone.js +0 -57
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseCreate.js +0 -14
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseGetAllKeys.js +0 -9
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseGetTag.js +0 -10
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseIsArguments.js +0 -9
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseIsEqual.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseIsEqualDeep.js +0 -30
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseIsMap.js +0 -9
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseIsNative.js +0 -11
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseIsSet.js +0 -9
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseIsTypedArray.js +0 -11
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseKeys.js +0 -12
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseKeysIn.js +0 -13
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseTimes.js +0 -7
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseUnary.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_cacheHas.js +0 -6
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_cloneArrayBuffer.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_cloneBuffer.js +0 -10
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_cloneDataView.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_cloneRegExp.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_cloneSymbol.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_cloneTypedArray.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_copyArray.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_copyObject.js +0 -14
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_copySymbols.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_copySymbolsIn.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_coreJsData.js +0 -5
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_defineProperty.js +0 -10
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_equalArrays.js +0 -35
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_equalByTag.js +0 -35
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_equalObjects.js +0 -32
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_freeGlobal.js +0 -4
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getAllKeys.js +0 -9
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getAllKeysIn.js +0 -9
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getMapData.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getNative.js +0 -9
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getPrototype.js +0 -5
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getRawTag.js +0 -14
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getSymbols.js +0 -10
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getSymbolsIn.js +0 -11
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getTag.js +0 -23
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getValue.js +0 -6
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_hashClear.js +0 -7
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_hashDelete.js +0 -7
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_hashGet.js +0 -13
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_hashHas.js +0 -9
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_hashSet.js +0 -9
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_initCloneArray.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_initCloneByTag.js +0 -33
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_initCloneObject.js +0 -9
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_isIndex.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_isKeyable.js +0 -7
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_isMasked.js +0 -11
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_isPrototype.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_listCacheClear.js +0 -6
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_listCacheDelete.js +0 -9
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_listCacheGet.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_listCacheHas.js +0 -7
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_listCacheSet.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheClear.js +0 -13
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheDelete.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheGet.js +0 -7
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheHas.js +0 -7
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheSet.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_mapToArray.js +0 -9
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_nativeCreate.js +0 -5
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_nativeKeys.js +0 -5
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_nativeKeysIn.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_nodeUtil.js +0 -9
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_objectToString.js +0 -7
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_overArg.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_root.js +0 -5
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_setCacheAdd.js +0 -7
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_setCacheHas.js +0 -6
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_setToArray.js +0 -9
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_stackClear.js +0 -7
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_stackDelete.js +0 -7
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_stackGet.js +0 -6
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_stackHas.js +0 -6
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_stackSet.js +0 -16
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_toSource.js +0 -15
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/cloneDeep.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/eq.js +0 -6
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isArguments.js +0 -10
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isArray.js +0 -4
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isArrayLike.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isBuffer.js +0 -6
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isEmpty.js +0 -21
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isEqual.js +0 -7
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isFunction.js +0 -11
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isLength.js +0 -7
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isMap.js +0 -7
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isObject.js +0 -7
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isObjectLike.js +0 -6
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isSet.js +0 -7
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isTypedArray.js +0 -7
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/keys.js +0 -9
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/keysIn.js +0 -9
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/stubArray.js +0 -6
- package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/stubFalse.js +0 -6
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
import * as __pieBrowserCjsReactRequire from "react";
|
|
2
|
+
const __pieBrowserCjsRequire = (specifier) => {
|
|
3
|
+
switch (specifier) {
|
|
4
|
+
case "react": return __pieBrowserCjsReactRequire;
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
default:
|
|
10
|
+
throw new Error(`Unsupported browser CJS require: ${specifier}`);
|
|
11
|
+
}
|
|
12
|
+
};
|
|
1
13
|
//#region \0rolldown/runtime.js
|
|
2
14
|
var e = Object.create, t = Object.defineProperty, n = Object.getOwnPropertyDescriptor, r = Object.getOwnPropertyNames, i = Object.getPrototypeOf, a = Object.prototype.hasOwnProperty, o = (e, t) => () => (e && (t = e(e = 0)), t), s = (e, t) => () => (t || (e((t = { exports: {} }).exports, t), e = null), t.exports), c = (e, n) => {
|
|
3
15
|
let r = {};
|
|
@@ -15,10 +27,7 @@ var e = Object.create, t = Object.defineProperty, n = Object.getOwnPropertyDescr
|
|
|
15
27
|
}, u = (n, r, a) => (a = n == null ? {} : e(i(n)), l(r || !n || !n.__esModule ? t(a, "default", {
|
|
16
28
|
value: n,
|
|
17
29
|
enumerable: !0
|
|
18
|
-
}) : a, n)), d = (e) => a.call(e, "module.exports") ? e["module.exports"] : l(t({}, "__esModule", { value: !0 }), e), f = /* @__PURE__ */ ((
|
|
19
|
-
if (typeof require < "u") return require.apply(this, arguments);
|
|
20
|
-
throw Error("Calling `require` for \"" + e + "\" in an environment that doesn't expose the `require` function. See https://rolldown.rs/in-depth/bundling-cjs#require-external-modules for more details.");
|
|
21
|
-
}), p = /* @__PURE__ */ s(((e, t) => {
|
|
30
|
+
}) : a, n)), d = (e) => a.call(e, "module.exports") ? e["module.exports"] : l(t({}, "__esModule", { value: !0 }), e), f = __pieBrowserCjsRequire, p = /* @__PURE__ */ s(((e, t) => {
|
|
22
31
|
var n = 1e3, r = n * 60, i = r * 60, a = i * 24, o = a * 7, s = a * 365.25;
|
|
23
32
|
t.exports = function(e, t) {
|
|
24
33
|
t ||= {};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { s as e, t } from "../browser-CfnAFove.js";
|
|
2
|
-
import {
|
|
2
|
+
import { i as n, t as r } from "../dist-C78LDz6R.js";
|
|
3
3
|
//#region ../../shared/controller-utils/dist/index.js
|
|
4
4
|
var i = /* @__PURE__ */ e(t(), 1), a = Object.defineProperty, o = /* @__PURE__ */ ((e, t) => {
|
|
5
5
|
let n = {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../../../shared/controller-utils/dist/index.js","../../../src/controller/utils.ts","../../../src/controller/defaults.ts","../../../src/controller/index.ts"],"sourcesContent":["//#region \\0rolldown/runtime.js\nvar e = Object.defineProperty, t = (t, n) => {\n\tlet r = {};\n\tfor (var i in t) e(r, i, {\n\t\tget: t[i],\n\t\tenumerable: !0\n\t});\n\treturn n || e(r, Symbol.toStringTag, { value: \"Module\" }), r;\n};\n//#endregion\n//#region src/persistence.ts\nfunction n(e) {\n\treturn Array.isArray(e) ? e.filter((e) => e != null) : [];\n}\nfunction r(e) {\n\tlet t = [...e];\n\tfor (let e = t.length - 1; e > 0; e--) {\n\t\tlet n = Math.floor(Math.random() * (e + 1));\n\t\t[t[e], t[n]] = [t[n], t[e]];\n\t}\n\treturn t;\n}\nfunction i(e) {\n\treturn e == null ? !0 : Array.isArray(e) ? e.length === 0 : typeof e == \"object\" ? Object.keys(e).length === 0 : !1;\n}\nasync function a(e, t, a, o = \"value\") {\n\tlet s = n(t?.data?.shuffledValues ?? t?.shuffledValues ?? []);\n\tif (!t) {\n\t\tconsole.warn(\"Unable to save shuffled choices because there's no session.\");\n\t\treturn;\n\t}\n\tif (!i(s)) return n(s.map((t) => e.find((e) => e[o] === t)));\n\tlet c = r(e);\n\tif (a && typeof a == \"function\") try {\n\t\tlet e = n(c.map((e) => e[o]));\n\t\ti(e) ? console.error(`shuffledValues is an empty array - refusing to call updateSession. shuffledChoices: ${JSON.stringify(c)}, key: ${o}`) : t.id && t.element && await a(t.id, t.element, { shuffledValues: e });\n\t} catch (e) {\n\t\tconsole.warn(\"Unable to save shuffled order for choices\"), console.error(e);\n\t}\n\telse console.warn(\"Unable to save shuffled choices, shuffle will happen every time.\");\n\treturn c;\n}\nfunction o(e, t, n) {\n\treturn !!(e.lockChoiceOrder || n[\"@pie-element\"]?.lockChoiceOrder || (n.role ?? \"student\") === \"instructor\");\n}\n//#endregion\n//#region src/partial-scoring.ts\nvar s = /* @__PURE__ */ t({ enabled: () => c });\nfunction c(e, t, n) {\n\treturn e?.partialScoring === !1 || t?.partialScoring === !1 ? !1 : typeof n == \"boolean\" ? n : !0;\n}\n//#endregion\nexport { a as getShuffledChoices, o as lockChoices, s as partialScoring };\n","// @ts-nocheck\n/**\n * @synced-from pie-elements/packages/hotspot/controller/src/utils.js\n * @auto-generated\n *\n * This file is automatically synced from pie-elements and converted to TypeScript.\n * Manual edits will be overwritten on next sync.\n * To make changes, edit the upstream JavaScript file and run sync again.\n */\n\nimport { isEmpty, isEqual } from 'lodash-es';\n\nexport const getCorrectResponse = (choices) =>\n choices\n .filter((c) => c.correct)\n .map((c) => c.id)\n .sort();\n\nexport const isResponseCorrect = (question, session) => {\n const {\n shapes: { rectangles = [], polygons = [], circles = [] },\n } = question;\n const choices = [...rectangles, ...polygons, ...circles];\n let correctResponseIds = getCorrectResponse(choices);\n\n if (!session || isEmpty(session)) {\n return false;\n }\n\n if (session.answers && session.answers.length) {\n let answerIds = (session.answers || []).map((a) => a.id);\n\n return isEqual(answerIds.sort(), correctResponseIds);\n } else if (!(correctResponseIds && correctResponseIds.length)) {\n return true;\n }\n\n return false;\n};\n","// @ts-nocheck\n/**\n * @synced-from pie-elements/packages/hotspot/controller/src/defaults.js\n * @auto-generated\n *\n * This file is automatically synced from pie-elements and converted to TypeScript.\n * Manual edits will be overwritten on next sync.\n * To make changes, edit the upstream JavaScript file and run sync again.\n */\n\nexport default {\n dimensions: { height: 0, width: 0 },\n hotspotColor: 'rgba(137, 183, 244, 0.25)',\n hotspotList: ['rgba(137, 183, 244, 0.25)'],\n imageUrl: '',\n multipleCorrect: true,\n outlineColor: 'blue',\n outlineList: ['blue'],\n partialScoring: false,\n prompt: '',\n promptEnabled: true,\n rationaleEnabled: true,\n shapes: { rectangles: [], polygons: [], circles: [] },\n strokeWidth: 5,\n studentInstructionsEnabled: true,\n teacherInstructions: '',\n teacherInstructionsEnabled: true,\n toolbarEditorPosition: 'bottom',\n};\n","// @ts-nocheck\n/**\n * @synced-from pie-elements/packages/hotspot/controller/src/index.js\n * @auto-generated\n *\n * This file is automatically synced from pie-elements and converted to TypeScript.\n * Manual edits will be overwritten on next sync.\n * To make changes, edit the upstream JavaScript file and run sync again.\n */\n\nimport debug from 'debug';\nimport { isEmpty } from 'lodash-es';\nimport { partialScoring } from '@pie-element/shared-controller-utils';\n\nimport { isResponseCorrect } from './utils.js';\n\nimport defaults from './defaults.js';\n\nconst log = debug('pie-elements:hotspot:controller');\n\nexport const normalize = (question) => ({\n ...defaults,\n ...question,\n});\n\nexport function model(question, session, env) {\n const normalizedQuestion = normalize(question);\n const {\n imageUrl,\n dimensions,\n hotspotColor,\n hoverOutlineColor,\n selectedHotspotColor,\n multipleCorrect,\n outlineColor,\n partialScoring,\n prompt,\n shapes,\n language,\n fontSizeFactor,\n autoplayAudioEnabled,\n completeAudioEnabled,\n customAudioButton,\n } = normalizedQuestion;\n const { rectangles, polygons, circles } = shapes || {};\n\n const shouldIncludeCorrectResponse = env.mode === 'evaluate' || (env.role === 'instructor' && env.mode === 'view');\n\n return new Promise((resolve) => {\n const out = {\n disabled: env.mode !== 'gather',\n mode: env.mode,\n dimensions,\n imageUrl,\n outlineColor,\n hotspotColor,\n hoverOutlineColor,\n selectedHotspotColor,\n multipleCorrect,\n partialScoring,\n language,\n fontSizeFactor,\n autoplayAudioEnabled,\n completeAudioEnabled,\n customAudioButton,\n shapes: {\n ...shapes,\n // eslint-disable-next-line no-unused-vars\n rectangles: (rectangles || []).map(({ index, correct, ...rectProps }) =>\n shouldIncludeCorrectResponse ? { correct, ...rectProps } : { ...rectProps },\n ),\n // eslint-disable-next-line no-unused-vars\n polygons: (polygons || []).map(({ index, correct, ...polyProps }) =>\n shouldIncludeCorrectResponse ? { correct, ...polyProps } : { ...polyProps },\n ),\n // eslint-disable-next-line no-unused-vars\n circles: (circles || []).map(({ index, correct, ...circleProps }) =>\n shouldIncludeCorrectResponse ? { correct, ...circleProps } : { ...circleProps },\n ),\n },\n responseCorrect: env.mode === 'evaluate' ? isResponseCorrect(normalizedQuestion, session) : undefined,\n extraCSSRules: normalizedQuestion.extraCSSRules,\n };\n\n if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {\n out.rationale = normalizedQuestion.rationaleEnabled ? normalizedQuestion.rationale : null;\n out.teacherInstructions = normalizedQuestion.teacherInstructionsEnabled\n ? normalizedQuestion.teacherInstructions\n : null;\n } else {\n out.rationale = null;\n out.teacherInstructions = null;\n }\n\n out.prompt = normalizedQuestion.promptEnabled ? prompt : null;\n out.strokeWidth = normalizedQuestion.strokeWidth;\n\n resolve(out);\n });\n}\n\nexport const createDefaultModel = (model = {}) =>\n new Promise((resolve) => {\n resolve({\n ...defaults,\n ...model,\n });\n });\n\nconst getScore = (config, session, env = {}) => {\n const { answers } = session || {};\n\n if (!config.shapes || (!config.shapes.rectangles && !config.shapes.polygons && !config.shapes.circles)) {\n return 0;\n }\n\n const { shapes: { rectangles = [], polygons = [], circles = [] } = {} } = config;\n const partialScoringEnabled = partialScoring.enabled(config, env);\n\n if (!partialScoringEnabled) {\n return isResponseCorrect(config, session) ? 1 : 0;\n }\n\n let correctAnswers = 0;\n let selectedChoices = 0;\n\n const choices = [...rectangles, ...polygons, ...circles];\n\n const correctChoices = choices.filter((choice) => choice.correct);\n\n choices.forEach((shape) => {\n const selected = answers && answers.filter((answer) => answer.id === shape.id)[0];\n const correctlySelected = shape.correct && selected;\n\n if (selected) {\n selectedChoices += 1;\n }\n\n if (correctlySelected) {\n correctAnswers += 1;\n }\n });\n\n const extraAnswers = selectedChoices > correctChoices.length ? selectedChoices - correctChoices.length : 0;\n\n const total = correctChoices.length === 0 ? 1 : correctChoices.length;\n const str = ((correctAnswers - extraAnswers) / total).toFixed(2);\n\n return str < 0 ? 0 : parseFloat(str);\n};\n\n /**\n * Generates detailed trace log for scoring evaluation\n * @param {Object} model - the question model\n * @param {Object} session - the student session\n * @param {Object} env - the environment\n * @returns {Array} traceLog - array of trace messages\n */\nexport const getLogTrace = (model, session, env) => {\n const traceLog = [];\n const { answers } = session || {};\n const { shapes } = model || {};\n \n const allShapes = [];\n if (shapes) {\n if (shapes.rectangles) allShapes.push(...shapes.rectangles);\n if (shapes.polygons) allShapes.push(...shapes.polygons);\n if (shapes.circles) allShapes.push(...shapes.circles);\n }\n \n const correctShapes = allShapes.filter(shape => shape.correct);\n const totalShapes = allShapes.length;\n \n traceLog.push(`Total of ${totalShapes} hotspot(s) defined, ${correctShapes.length} correct.`);\n \n if (answers && answers.length > 0) {\n traceLog.push(`Student selected ${answers.length} hotspot(s).`);\n \n let correctSelections = 0;\n let incorrectSelections = 0;\n \n answers.forEach(answer => {\n const shape = allShapes.find(s => s.id === answer.id);\n if (shape && shape.correct) {\n correctSelections++;\n } else {\n incorrectSelections++;\n }\n });\n \n const missedCorrect = correctShapes.filter(correctShape => \n !answers.some(answer => answer.id === correctShape.id)\n ).length;\n \n if (correctSelections > 0) {\n traceLog.push(`${correctSelections} correct hotspot(s) selected.`);\n }\n if (incorrectSelections > 0) {\n traceLog.push(`${incorrectSelections} incorrect hotspot(s) selected.`);\n }\n if (missedCorrect > 0) {\n traceLog.push(`${missedCorrect} correct hotspot(s) missed.`);\n }\n } else {\n traceLog.push('No hotspots selected.');\n }\n\n const partialScoringEnabled = partialScoring.enabled(model, env);\n \n if (partialScoringEnabled) {\n traceLog.push(`Score calculated using partial scoring.`);\n \n if (answers && answers.length > 0) {\n let correctSelections = 0;\n let incorrectSelections = 0;\n \n answers.forEach(answer => {\n const shape = allShapes.find(s => s.id === answer.id);\n if (shape && shape.correct) {\n correctSelections++;\n } else {\n incorrectSelections++;\n }\n });\n \n const totalCorrectAvailable = correctShapes.length;\n traceLog.push(`Partial scoring calculation: ${correctSelections} correct selections out of ${totalCorrectAvailable} available.`);\n \n if (incorrectSelections > totalCorrectAvailable) {\n const extraSelections = incorrectSelections - (totalCorrectAvailable - correctSelections);\n traceLog.push(`${extraSelections} extra incorrect selection(s) beyond required amount are deducted from score.`);\n }\n }\n } else {\n traceLog.push(`Score calculated using all-or-nothing scoring.`);\n }\n\n const score = getScore(model, session, env);\n traceLog.push(`Score: ${score}.`);\n\n return traceLog;\n}\n\nexport function outcome(config, session, env = {}) {\n return new Promise((resolve) => {\n log('outcome...');\n\n if (!session || isEmpty(session)) {\n resolve({ \n score: 0, \n empty: true, \n traceLog: ['No hotspots selected. Score: 0.'] \n });\n } \n\n if (session.answers) {\n const traceLog = getLogTrace(config, session, env);\n const score = getScore(config, session, env);\n\n resolve({ score, empty: false, traceLog });\n } else {\n resolve({ \n score: 0, \n empty: true, \n traceLog: ['No hotspots selected. Score: 0.'] \n });\n }\n });\n}\n\nconst returnShapesCorrect = (shapes) => {\n let answers = [];\n\n shapes.forEach((i) => {\n const { correct, id } = i;\n if (correct) {\n answers.push({ id });\n }\n });\n return answers;\n};\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const { shapes: { rectangles = [], circles = [], polygons = {} } = {} } = question;\n\n const rectangleCorrect = returnShapesCorrect(rectangles);\n const polygonsCorrect = returnShapesCorrect(polygons);\n const circlesCorrect = returnShapesCorrect(circles);\n\n resolve({\n answers: [...rectangleCorrect, ...polygonsCorrect, ...circlesCorrect],\n id: '1',\n });\n } else {\n resolve(null);\n }\n });\n};\n\n// remove all html tags\nconst getInnerText = (html) => (html || '').replaceAll(/<[^>]*>/g, '');\n\n// remove all html tags except img, iframe and source tag for audio\nconst getContent = (html) => (html || '').replace(/(<(?!img|iframe|source)([^>]+)>)/gi, '');\n\nexport const validate = (model = {}, config = {}) => {\n const { shapes } = model;\n const { minShapes = 2, maxShapes, maxSelections } = config;\n const errors = {};\n\n ['teacherInstructions', 'prompt', 'rationale'].forEach((field) => {\n if (config[field]?.required && !getContent(model[field])) {\n errors[field] = 'This field is required.';\n }\n });\n\n const allShapes = Object.values(shapes || {}).reduce((acc, shape) => [...acc, ...shape], []);\n\n const nbOfSelections = (allShapes || []).reduce((acc, shape) => (shape.correct ? acc + 1 : acc), 0);\n\n const nbOfShapes = (allShapes || []).length;\n\n if (nbOfShapes < minShapes) {\n errors.shapes = `There should be at least ${minShapes} shapes defined.`;\n } else if (nbOfShapes > maxShapes) {\n errors.shapes = `No more than ${maxShapes} shapes should be defined.`;\n }\n\n if (nbOfSelections < 1) {\n errors.selections = 'There should be at least 1 shape selected.';\n } else if (nbOfSelections > maxSelections) {\n errors.selections = `No more than ${maxSelections} shapes should be selected.`;\n }\n\n return errors;\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../../shared/controller-utils/dist/index.js","../../../src/controller/utils.ts","../../../src/controller/defaults.ts","../../../src/controller/index.ts"],"sourcesContent":["//#region \\0rolldown/runtime.js\nvar e = Object.defineProperty, t = (t, n) => {\n\tlet r = {};\n\tfor (var i in t) e(r, i, {\n\t\tget: t[i],\n\t\tenumerable: !0\n\t});\n\treturn n || e(r, Symbol.toStringTag, { value: \"Module\" }), r;\n};\n//#endregion\n//#region src/persistence.ts\nfunction n(e) {\n\treturn Array.isArray(e) ? e.filter((e) => e != null) : [];\n}\nfunction r(e) {\n\tlet t = [...e];\n\tfor (let e = t.length - 1; e > 0; e--) {\n\t\tlet n = Math.floor(Math.random() * (e + 1));\n\t\t[t[e], t[n]] = [t[n], t[e]];\n\t}\n\treturn t;\n}\nfunction i(e) {\n\treturn e == null ? !0 : Array.isArray(e) ? e.length === 0 : typeof e == \"object\" ? Object.keys(e).length === 0 : !1;\n}\nasync function a(e, t, a, o = \"value\") {\n\tlet s = n(t?.data?.shuffledValues ?? t?.shuffledValues ?? []);\n\tif (!t) {\n\t\tconsole.warn(\"Unable to save shuffled choices because there's no session.\");\n\t\treturn;\n\t}\n\tif (!i(s)) return n(s.map((t) => e.find((e) => e[o] === t)));\n\tlet c = r(e);\n\tif (a && typeof a == \"function\") try {\n\t\tlet e = n(c.map((e) => e[o]));\n\t\ti(e) ? console.error(`shuffledValues is an empty array - refusing to call updateSession. shuffledChoices: ${JSON.stringify(c)}, key: ${o}`) : t.id && t.element && await a(t.id, t.element, { shuffledValues: e });\n\t} catch (e) {\n\t\tconsole.warn(\"Unable to save shuffled order for choices\"), console.error(e);\n\t}\n\telse console.warn(\"Unable to save shuffled choices, shuffle will happen every time.\");\n\treturn c;\n}\nfunction o(e, t, n) {\n\treturn !!(e.lockChoiceOrder || n[\"@pie-element\"]?.lockChoiceOrder || (n.role ?? \"student\") === \"instructor\");\n}\n//#endregion\n//#region src/partial-scoring.ts\nvar s = /* @__PURE__ */ t({ enabled: () => c });\nfunction c(e, t, n) {\n\treturn e?.partialScoring === !1 || t?.partialScoring === !1 ? !1 : typeof n == \"boolean\" ? n : !0;\n}\n//#endregion\nexport { a as getShuffledChoices, o as lockChoices, s as partialScoring };\n","// @ts-nocheck\n/**\n * @synced-from pie-elements/packages/hotspot/controller/src/utils.js\n * @auto-generated\n *\n * This file is automatically synced from pie-elements and converted to TypeScript.\n * Manual edits will be overwritten on next sync.\n * To make changes, edit the upstream JavaScript file and run sync again.\n */\n\nimport { isEmpty, isEqual } from '@pie-element/shared-lodash';\n\nexport const getCorrectResponse = (choices) =>\n choices\n .filter((c) => c.correct)\n .map((c) => c.id)\n .sort();\n\nexport const isResponseCorrect = (question, session) => {\n const {\n shapes: { rectangles = [], polygons = [], circles = [] },\n } = question;\n const choices = [...rectangles, ...polygons, ...circles];\n let correctResponseIds = getCorrectResponse(choices);\n\n if (!session || isEmpty(session)) {\n return false;\n }\n\n if (session.answers && session.answers.length) {\n let answerIds = (session.answers || []).map((a) => a.id);\n\n return isEqual(answerIds.sort(), correctResponseIds);\n } else if (!(correctResponseIds && correctResponseIds.length)) {\n return true;\n }\n\n return false;\n};\n","// @ts-nocheck\n/**\n * @synced-from pie-elements/packages/hotspot/controller/src/defaults.js\n * @auto-generated\n *\n * This file is automatically synced from pie-elements and converted to TypeScript.\n * Manual edits will be overwritten on next sync.\n * To make changes, edit the upstream JavaScript file and run sync again.\n */\n\nexport default {\n dimensions: { height: 0, width: 0 },\n hotspotColor: 'rgba(137, 183, 244, 0.25)',\n hotspotList: ['rgba(137, 183, 244, 0.25)'],\n imageUrl: '',\n multipleCorrect: true,\n outlineColor: 'blue',\n outlineList: ['blue'],\n partialScoring: false,\n prompt: '',\n promptEnabled: true,\n rationaleEnabled: true,\n shapes: { rectangles: [], polygons: [], circles: [] },\n strokeWidth: 5,\n studentInstructionsEnabled: true,\n teacherInstructions: '',\n teacherInstructionsEnabled: true,\n toolbarEditorPosition: 'bottom',\n};\n","// @ts-nocheck\n/**\n * @synced-from pie-elements/packages/hotspot/controller/src/index.js\n * @auto-generated\n *\n * This file is automatically synced from pie-elements and converted to TypeScript.\n * Manual edits will be overwritten on next sync.\n * To make changes, edit the upstream JavaScript file and run sync again.\n */\n\nimport debug from 'debug';\nimport { isEmpty } from '@pie-element/shared-lodash';\nimport { partialScoring } from '@pie-element/shared-controller-utils';\n\nimport { isResponseCorrect } from './utils.js';\n\nimport defaults from './defaults.js';\n\nconst log = debug('pie-elements:hotspot:controller');\n\nexport const normalize = (question) => ({\n ...defaults,\n ...question,\n});\n\nexport function model(question, session, env) {\n const normalizedQuestion = normalize(question);\n const {\n imageUrl,\n dimensions,\n hotspotColor,\n hoverOutlineColor,\n selectedHotspotColor,\n multipleCorrect,\n outlineColor,\n partialScoring,\n prompt,\n shapes,\n language,\n fontSizeFactor,\n autoplayAudioEnabled,\n completeAudioEnabled,\n customAudioButton,\n } = normalizedQuestion;\n const { rectangles, polygons, circles } = shapes || {};\n\n const shouldIncludeCorrectResponse = env.mode === 'evaluate' || (env.role === 'instructor' && env.mode === 'view');\n\n return new Promise((resolve) => {\n const out = {\n disabled: env.mode !== 'gather',\n mode: env.mode,\n dimensions,\n imageUrl,\n outlineColor,\n hotspotColor,\n hoverOutlineColor,\n selectedHotspotColor,\n multipleCorrect,\n partialScoring,\n language,\n fontSizeFactor,\n autoplayAudioEnabled,\n completeAudioEnabled,\n customAudioButton,\n shapes: {\n ...shapes,\n // eslint-disable-next-line no-unused-vars\n rectangles: (rectangles || []).map(({ index, correct, ...rectProps }) =>\n shouldIncludeCorrectResponse ? { correct, ...rectProps } : { ...rectProps },\n ),\n // eslint-disable-next-line no-unused-vars\n polygons: (polygons || []).map(({ index, correct, ...polyProps }) =>\n shouldIncludeCorrectResponse ? { correct, ...polyProps } : { ...polyProps },\n ),\n // eslint-disable-next-line no-unused-vars\n circles: (circles || []).map(({ index, correct, ...circleProps }) =>\n shouldIncludeCorrectResponse ? { correct, ...circleProps } : { ...circleProps },\n ),\n },\n responseCorrect: env.mode === 'evaluate' ? isResponseCorrect(normalizedQuestion, session) : undefined,\n extraCSSRules: normalizedQuestion.extraCSSRules,\n };\n\n if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {\n out.rationale = normalizedQuestion.rationaleEnabled ? normalizedQuestion.rationale : null;\n out.teacherInstructions = normalizedQuestion.teacherInstructionsEnabled\n ? normalizedQuestion.teacherInstructions\n : null;\n } else {\n out.rationale = null;\n out.teacherInstructions = null;\n }\n\n out.prompt = normalizedQuestion.promptEnabled ? prompt : null;\n out.strokeWidth = normalizedQuestion.strokeWidth;\n\n resolve(out);\n });\n}\n\nexport const createDefaultModel = (model = {}) =>\n new Promise((resolve) => {\n resolve({\n ...defaults,\n ...model,\n });\n });\n\nconst getScore = (config, session, env = {}) => {\n const { answers } = session || {};\n\n if (!config.shapes || (!config.shapes.rectangles && !config.shapes.polygons && !config.shapes.circles)) {\n return 0;\n }\n\n const { shapes: { rectangles = [], polygons = [], circles = [] } = {} } = config;\n const partialScoringEnabled = partialScoring.enabled(config, env);\n\n if (!partialScoringEnabled) {\n return isResponseCorrect(config, session) ? 1 : 0;\n }\n\n let correctAnswers = 0;\n let selectedChoices = 0;\n\n const choices = [...rectangles, ...polygons, ...circles];\n\n const correctChoices = choices.filter((choice) => choice.correct);\n\n choices.forEach((shape) => {\n const selected = answers && answers.filter((answer) => answer.id === shape.id)[0];\n const correctlySelected = shape.correct && selected;\n\n if (selected) {\n selectedChoices += 1;\n }\n\n if (correctlySelected) {\n correctAnswers += 1;\n }\n });\n\n const extraAnswers = selectedChoices > correctChoices.length ? selectedChoices - correctChoices.length : 0;\n\n const total = correctChoices.length === 0 ? 1 : correctChoices.length;\n const str = ((correctAnswers - extraAnswers) / total).toFixed(2);\n\n return str < 0 ? 0 : parseFloat(str);\n};\n\n /**\n * Generates detailed trace log for scoring evaluation\n * @param {Object} model - the question model\n * @param {Object} session - the student session\n * @param {Object} env - the environment\n * @returns {Array} traceLog - array of trace messages\n */\nexport const getLogTrace = (model, session, env) => {\n const traceLog = [];\n const { answers } = session || {};\n const { shapes } = model || {};\n \n const allShapes = [];\n if (shapes) {\n if (shapes.rectangles) allShapes.push(...shapes.rectangles);\n if (shapes.polygons) allShapes.push(...shapes.polygons);\n if (shapes.circles) allShapes.push(...shapes.circles);\n }\n \n const correctShapes = allShapes.filter(shape => shape.correct);\n const totalShapes = allShapes.length;\n \n traceLog.push(`Total of ${totalShapes} hotspot(s) defined, ${correctShapes.length} correct.`);\n \n if (answers && answers.length > 0) {\n traceLog.push(`Student selected ${answers.length} hotspot(s).`);\n \n let correctSelections = 0;\n let incorrectSelections = 0;\n \n answers.forEach(answer => {\n const shape = allShapes.find(s => s.id === answer.id);\n if (shape && shape.correct) {\n correctSelections++;\n } else {\n incorrectSelections++;\n }\n });\n \n const missedCorrect = correctShapes.filter(correctShape => \n !answers.some(answer => answer.id === correctShape.id)\n ).length;\n \n if (correctSelections > 0) {\n traceLog.push(`${correctSelections} correct hotspot(s) selected.`);\n }\n if (incorrectSelections > 0) {\n traceLog.push(`${incorrectSelections} incorrect hotspot(s) selected.`);\n }\n if (missedCorrect > 0) {\n traceLog.push(`${missedCorrect} correct hotspot(s) missed.`);\n }\n } else {\n traceLog.push('No hotspots selected.');\n }\n\n const partialScoringEnabled = partialScoring.enabled(model, env);\n \n if (partialScoringEnabled) {\n traceLog.push(`Score calculated using partial scoring.`);\n \n if (answers && answers.length > 0) {\n let correctSelections = 0;\n let incorrectSelections = 0;\n \n answers.forEach(answer => {\n const shape = allShapes.find(s => s.id === answer.id);\n if (shape && shape.correct) {\n correctSelections++;\n } else {\n incorrectSelections++;\n }\n });\n \n const totalCorrectAvailable = correctShapes.length;\n traceLog.push(`Partial scoring calculation: ${correctSelections} correct selections out of ${totalCorrectAvailable} available.`);\n \n if (incorrectSelections > totalCorrectAvailable) {\n const extraSelections = incorrectSelections - (totalCorrectAvailable - correctSelections);\n traceLog.push(`${extraSelections} extra incorrect selection(s) beyond required amount are deducted from score.`);\n }\n }\n } else {\n traceLog.push(`Score calculated using all-or-nothing scoring.`);\n }\n\n const score = getScore(model, session, env);\n traceLog.push(`Score: ${score}.`);\n\n return traceLog;\n}\n\nexport function outcome(config, session, env = {}) {\n return new Promise((resolve) => {\n log('outcome...');\n\n if (!session || isEmpty(session)) {\n resolve({ \n score: 0, \n empty: true, \n traceLog: ['No hotspots selected. Score: 0.'] \n });\n } \n\n if (session.answers) {\n const traceLog = getLogTrace(config, session, env);\n const score = getScore(config, session, env);\n\n resolve({ score, empty: false, traceLog });\n } else {\n resolve({ \n score: 0, \n empty: true, \n traceLog: ['No hotspots selected. Score: 0.'] \n });\n }\n });\n}\n\nconst returnShapesCorrect = (shapes) => {\n let answers = [];\n\n shapes.forEach((i) => {\n const { correct, id } = i;\n if (correct) {\n answers.push({ id });\n }\n });\n return answers;\n};\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const { shapes: { rectangles = [], circles = [], polygons = {} } = {} } = question;\n\n const rectangleCorrect = returnShapesCorrect(rectangles);\n const polygonsCorrect = returnShapesCorrect(polygons);\n const circlesCorrect = returnShapesCorrect(circles);\n\n resolve({\n answers: [...rectangleCorrect, ...polygonsCorrect, ...circlesCorrect],\n id: '1',\n });\n } else {\n resolve(null);\n }\n });\n};\n\n// remove all html tags\nconst getInnerText = (html) => (html || '').replaceAll(/<[^>]*>/g, '');\n\n// remove all html tags except img, iframe and source tag for audio\nconst getContent = (html) => (html || '').replace(/(<(?!img|iframe|source)([^>]+)>)/gi, '');\n\nexport const validate = (model = {}, config = {}) => {\n const { shapes } = model;\n const { minShapes = 2, maxShapes, maxSelections } = config;\n const errors = {};\n\n ['teacherInstructions', 'prompt', 'rationale'].forEach((field) => {\n if (config[field]?.required && !getContent(model[field])) {\n errors[field] = 'This field is required.';\n }\n });\n\n const allShapes = Object.values(shapes || {}).reduce((acc, shape) => [...acc, ...shape], []);\n\n const nbOfSelections = (allShapes || []).reduce((acc, shape) => (shape.correct ? acc + 1 : acc), 0);\n\n const nbOfShapes = (allShapes || []).length;\n\n if (nbOfShapes < minShapes) {\n errors.shapes = `There should be at least ${minShapes} shapes defined.`;\n } else if (nbOfShapes > maxShapes) {\n errors.shapes = `No more than ${maxShapes} shapes should be defined.`;\n }\n\n if (nbOfSelections < 1) {\n errors.selections = 'There should be at least 1 shape selected.';\n } else if (nbOfSelections > maxSelections) {\n errors.selections = `No more than ${maxSelections} shapes should be selected.`;\n }\n\n return errors;\n};\n"],"mappings":";;;mCACA,IAAA,OAAA,gBA8CA,IAAA,kBA9CA,GAAA,MAAA;;;;;;;AAOA,GAuCA,EAAA,eAAA,EAAA,CAAA;AACA,SAAA,EAAA,GAAA,GAAA,GAAA;;AAEA;;;ACtCA,IAAa,KAAsB,MACjC,EACG,QAAQ,MAAM,EAAE,OAAO,EACvB,KAAK,MAAM,EAAE,EAAE,EACf,KAAK,GAEG,KAAqB,GAAU,MAAY;CACtD,IAAM,EACJ,QAAQ,EAAE,gBAAa,CAAC,GAAG,cAAW,CAAC,GAAG,aAAU,CAAC,QACnD,GAEA,IAAqB,EAAmB;EAD3B,GAAG;EAAY,GAAG;EAAU,GAAG;CACJ,CAAO;CAcnD,OAZI,CAAC,KAAW,EAAQ,CAAO,IACtB,KAGL,EAAQ,WAAW,EAAQ,QAAQ,SAG9B,GAFU,EAAQ,WAAW,CAAC,GAAG,KAAK,MAAM,EAAE,EAEtC,EAAU,KAAK,GAAG,CAAkB,IAC9C,EAAM,KAAsB,EAAmB;AAKxD,GC5BA,IAAe;CACb,YAAY;EAAE,QAAQ;EAAG,OAAO;CAAE;CAClC,cAAc;CACd,aAAa,CAAC,2BAA2B;CACzC,UAAU;CACV,iBAAiB;CACjB,cAAc;CACd,aAAa,CAAC,MAAM;CACpB,gBAAgB;CAChB,QAAQ;CACR,eAAe;CACf,kBAAkB;CAClB,QAAQ;EAAE,YAAY,CAAC;EAAG,UAAU,CAAC;EAAG,SAAS,CAAC;CAAE;CACpD,aAAa;CACb,4BAA4B;CAC5B,qBAAqB;CACrB,4BAA4B;CAC5B,uBAAuB;AACzB,GCVM,KAAA,GAAA,EAAA,SAAY,iCAAiC,GAEtC,KAAa,OAAc;CACtC,GAAG;CACH,GAAG;AACL;AAEA,SAAgB,EAAM,GAAU,GAAS,GAAK;CAC5C,IAAM,IAAqB,EAAU,CAAQ,GACvC,EACJ,aACA,eACA,iBACA,sBACA,yBACA,oBACA,iBACA,mBACA,WACA,WACA,aACA,mBACA,yBACA,yBACA,yBACE,GACE,EAAE,eAAY,aAAU,eAAY,KAAU,CAAC,GAE/C,IAA+B,EAAI,SAAS,cAAe,EAAI,SAAS,gBAAgB,EAAI,SAAS;CAE3G,OAAO,IAAI,SAAS,MAAY;EAC9B,IAAM,IAAM;GACV,UAAU,EAAI,SAAS;GACvB,MAAM,EAAI;GACV;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA,QAAQ;IACN,GAAG;IAEH,aAAa,KAAc,CAAC,GAAG,KAAK,EAAE,UAAO,YAAS,GAAG,QACvD,IAA+B;KAAE;KAAS,GAAG;IAAU,IAAI,EAAE,GAAG,EAAU,CAC5E;IAEA,WAAW,KAAY,CAAC,GAAG,KAAK,EAAE,UAAO,YAAS,GAAG,QACnD,IAA+B;KAAE;KAAS,GAAG;IAAU,IAAI,EAAE,GAAG,EAAU,CAC5E;IAEA,UAAU,KAAW,CAAC,GAAG,KAAK,EAAE,UAAO,YAAS,GAAG,QACjD,IAA+B;KAAE;KAAS,GAAG;IAAY,IAAI,EAAE,GAAG,EAAY,CAChF;GACF;GACA,iBAAiB,EAAI,SAAS,aAAa,EAAkB,GAAoB,CAAO,IAAI,KAAA;GAC5F,eAAe,EAAmB;EACpC;EAeA,AAbI,EAAI,SAAS,iBAAiB,EAAI,SAAS,UAAU,EAAI,SAAS,eACpE,EAAI,YAAY,EAAmB,mBAAmB,EAAmB,YAAY,MACrF,EAAI,sBAAsB,EAAmB,6BACzC,EAAmB,sBACnB,SAEJ,EAAI,YAAY,MAChB,EAAI,sBAAsB,OAG5B,EAAI,SAAS,EAAmB,gBAAgB,IAAS,MACzD,EAAI,cAAc,EAAmB,aAErC,EAAQ,CAAG;CACb,CAAC;AACH;AAEA,IAAa,KAAsB,IAAQ,CAAC,MAC1C,IAAI,SAAS,MAAY;CACvB,EAAQ;EACN,GAAG;EACH,GAAG;CACL,CAAC;AACH,CAAC,GAEG,KAAY,GAAQ,GAAS,IAAM,CAAC,MAAM;CAC9C,IAAM,EAAE,eAAY,KAAW,CAAC;CAEhC,IAAI,CAAC,EAAO,UAAW,CAAC,EAAO,OAAO,cAAc,CAAC,EAAO,OAAO,YAAY,CAAC,EAAO,OAAO,SAC5F,OAAO;CAGT,IAAM,EAAE,QAAQ,EAAE,gBAAa,CAAC,GAAG,cAAW,CAAC,GAAG,aAAU,CAAC,MAAM,CAAC,MAAM;CAG1E,IAAI,CAF0B,EAAe,QAAQ,GAAQ,CAExD,GACH,OAAO,KAAkB,GAAQ,CAAO;CAG1C,IAAI,IAAiB,GACjB,IAAkB,GAEhB,IAAU;EAAC,GAAG;EAAY,GAAG;EAAU,GAAG;CAAO,GAEjD,IAAiB,EAAQ,QAAQ,MAAW,EAAO,OAAO;CAEhE,EAAQ,SAAS,MAAU;EACzB,IAAM,IAAW,KAAW,EAAQ,QAAQ,MAAW,EAAO,OAAO,EAAM,EAAE,EAAE,IACzE,IAAoB,EAAM,WAAW;EAM3C,AAJI,MACF,KAAmB,IAGjB,MACF,KAAkB;CAEtB,CAAC;CAED,IAAM,IAAe,IAAkB,EAAe,SAAS,IAAkB,EAAe,SAAS,GAEnG,IAAQ,EAAe,WAAW,IAAI,IAAI,EAAe,QACzD,MAAQ,IAAiB,KAAgB,GAAO,QAAQ,CAAC;CAE/D,OAAO,IAAM,IAAI,IAAI,WAAW,CAAG;AACrC,GASa,KAAe,GAAO,GAAS,MAAQ;CAClD,IAAM,IAAW,CAAC,GACZ,EAAE,eAAY,KAAW,CAAC,GAC1B,EAAE,cAAW,KAAS,CAAC,GAEvB,IAAY,CAAC;CACnB,AAAI,MACE,EAAO,cAAY,EAAU,KAAK,GAAG,EAAO,UAAU,GACtD,EAAO,YAAU,EAAU,KAAK,GAAG,EAAO,QAAQ,GAClD,EAAO,WAAS,EAAU,KAAK,GAAG,EAAO,OAAO;CAGtD,IAAM,IAAgB,EAAU,QAAO,MAAS,EAAM,OAAO,GACvD,IAAc,EAAU;CAI9B,IAFA,EAAS,KAAK,YAAY,EAAY,uBAAuB,EAAc,OAAO,UAAU,GAExF,KAAW,EAAQ,SAAS,GAAG;EACjC,EAAS,KAAK,oBAAoB,EAAQ,OAAO,aAAa;EAE9D,IAAI,IAAoB,GACpB,IAAsB;EAE1B,EAAQ,SAAQ,MAAU;GACxB,IAAM,IAAQ,EAAU,MAAK,MAAK,EAAE,OAAO,EAAO,EAAE;GACpD,AAAI,KAAS,EAAM,UACjB,MAEA;EAEJ,CAAC;EAED,IAAM,IAAgB,EAAc,QAAO,MACzC,CAAC,EAAQ,MAAK,MAAU,EAAO,OAAO,EAAa,EAAE,CACvD,EAAE;EAQF,AANI,IAAoB,KACtB,EAAS,KAAK,GAAG,EAAkB,8BAA8B,GAE/D,IAAsB,KACxB,EAAS,KAAK,GAAG,EAAoB,gCAAgC,GAEnE,IAAgB,KAClB,EAAS,KAAK,GAAG,EAAc,4BAA4B;CAE/D,OACE,EAAS,KAAK,uBAAuB;CAKvC,IAF8B,EAAe,QAAQ,GAAO,CAExD,GAGF;MAFA,EAAS,KAAK,yCAAyC,GAEnD,KAAW,EAAQ,SAAS,GAAG;GACjC,IAAI,IAAoB,GACpB,IAAsB;GAE1B,EAAQ,SAAQ,MAAU;IACxB,IAAM,IAAQ,EAAU,MAAK,MAAK,EAAE,OAAO,EAAO,EAAE;IACpD,AAAI,KAAS,EAAM,UACjB,MAEA;GAEJ,CAAC;GAED,IAAM,IAAwB,EAAc;GAG5C,IAFA,EAAS,KAAK,gCAAgC,EAAkB,6BAA6B,EAAsB,YAAY,GAE3H,IAAsB,GAAuB;IAC/C,IAAM,IAAkB,KAAuB,IAAwB;IACvE,EAAS,KAAK,GAAG,EAAgB,8EAA8E;GACjH;EACF;QAEA,EAAS,KAAK,gDAAgD;CAGhE,IAAM,IAAQ,EAAS,GAAO,GAAS,CAAG;CAG1C,OAFA,EAAS,KAAK,UAAU,EAAM,EAAE,GAEzB;AACT;AAEA,SAAgB,EAAQ,GAAQ,GAAS,IAAM,CAAC,GAAG;CACjD,OAAO,IAAI,SAAS,MAAY;EAW9B,IAVA,EAAI,YAAY,IAEZ,CAAC,KAAW,EAAQ,CAAO,MAC7B,EAAQ;GACN,OAAO;GACP,OAAO;GACP,UAAU,CAAC,iCAAiC;EAC9C,CAAC,GAGC,EAAQ,SAAS;GACnB,IAAM,IAAW,EAAY,GAAQ,GAAS,CAAG;GAGjD,EAAQ;IAAE,OAFI,EAAS,GAAQ,GAAS,CAE9B;IAAO,OAAO;IAAO;GAAS,CAAC;EAC3C,OACE,EAAQ;GACN,OAAO;GACP,OAAO;GACP,UAAU,CAAC,iCAAiC;EAC9C,CAAC;CAEL,CAAC;AACH;AAEA,IAAM,KAAuB,MAAW;CACtC,IAAI,IAAU,CAAC;CAQf,OANA,EAAO,SAAS,MAAM;EACpB,IAAM,EAAE,YAAS,UAAO;EACxB,AAAI,KACF,EAAQ,KAAK,EAAE,MAAG,CAAC;CAEvB,CAAC,GACM;AACT,GAEa,KAAgC,GAAU,MAC9C,IAAI,SAAS,MAAY;CAC9B,IAAI,EAAI,SAAS,cAAc,EAAI,SAAS,cAAc;EACxD,IAAM,EAAE,QAAQ,EAAE,gBAAa,CAAC,GAAG,aAAU,CAAC,GAAG,cAAW,CAAC,MAAM,CAAC,MAAM,GAEpE,IAAmB,EAAoB,CAAU,GACjD,IAAkB,EAAoB,CAAQ,GAC9C,IAAiB,EAAoB,CAAO;EAElD,EAAQ;GACN,SAAS;IAAC,GAAG;IAAkB,GAAG;IAAiB,GAAG;GAAc;GACpE,IAAI;EACN,CAAC;CACH,OACE,EAAQ,IAAI;AAEhB,CAAC,GAOG,KAAc,OAAU,KAAQ,IAAI,QAAQ,sCAAsC,EAAE,GAE7E,KAAY,IAAQ,CAAC,GAAG,IAAS,CAAC,MAAM;CACnD,IAAM,EAAE,cAAW,GACb,EAAE,eAAY,GAAG,cAAW,qBAAkB,GAC9C,IAAS,CAAC;CAEhB;EAAC;EAAuB;EAAU;CAAW,EAAE,SAAS,MAAU;EAChE,AAAI,EAAO,IAAQ,YAAY,CAAC,EAAW,EAAM,EAAM,MACrD,EAAO,KAAS;CAEpB,CAAC;CAED,IAAM,IAAY,OAAO,OAAO,KAAU,CAAC,CAAC,EAAE,QAAQ,GAAK,MAAU,CAAC,GAAG,GAAK,GAAG,CAAK,GAAG,CAAC,CAAC,GAErF,KAAkB,KAAa,CAAC,GAAG,QAAQ,GAAK,MAAW,EAAM,UAAU,IAAM,IAAI,GAAM,CAAC,GAE5F,KAAc,KAAa,CAAC,GAAG;CAcrC,OAZI,IAAa,IACf,EAAO,SAAS,4BAA4B,EAAU,oBAC7C,IAAa,MACtB,EAAO,SAAS,gBAAgB,EAAU,8BAGxC,IAAiB,IACnB,EAAO,aAAa,+CACX,IAAiB,MAC1B,EAAO,aAAa,gBAAgB,EAAc,+BAG7C;AACT"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
//#region ../../shared/lodash/dist/index.js
|
|
2
|
+
var e = Object.prototype;
|
|
3
|
+
function t(e) {
|
|
4
|
+
return typeof e == "object" && !!e;
|
|
5
|
+
}
|
|
6
|
+
function n(e) {
|
|
7
|
+
return Array.isArray(e) ? e : typeof e == "number" ? [e] : e.replace(/\[(\d+)\]/g, ".$1").split(".").filter(Boolean);
|
|
8
|
+
}
|
|
9
|
+
function r(e) {
|
|
10
|
+
if (!t(e)) return e;
|
|
11
|
+
if (e instanceof Date) return new Date(e.getTime());
|
|
12
|
+
if (Array.isArray(e)) return e.map((e) => r(e));
|
|
13
|
+
let n = {};
|
|
14
|
+
for (let [t, i] of Object.entries(e)) n[t] = r(i);
|
|
15
|
+
return n;
|
|
16
|
+
}
|
|
17
|
+
function i(e) {
|
|
18
|
+
return (e ?? []).filter(Boolean);
|
|
19
|
+
}
|
|
20
|
+
function a(e, t = 0, n = {}) {
|
|
21
|
+
let r, i, a, o, s, c = n.leading === !0, l = n.trailing !== !1, u = () => {
|
|
22
|
+
if (!a) return s;
|
|
23
|
+
let t = a, n = o;
|
|
24
|
+
return a = void 0, o = void 0, s = e.apply(n, t), s;
|
|
25
|
+
}, d = () => {
|
|
26
|
+
r && clearTimeout(r), i && clearTimeout(i), r = void 0, i = void 0, a = void 0, o = void 0;
|
|
27
|
+
}, f = function(...e) {
|
|
28
|
+
let d = c && !r;
|
|
29
|
+
return a = e, o = this, d && u(), r && clearTimeout(r), r = setTimeout(() => {
|
|
30
|
+
r = void 0, i &&= (clearTimeout(i), void 0), l ? u() : (a = void 0, o = void 0);
|
|
31
|
+
}, t), n.maxWait !== void 0 && !i && (i = setTimeout(() => {
|
|
32
|
+
r && clearTimeout(r), r = void 0, i = void 0, l || !c ? u() : (a = void 0, o = void 0);
|
|
33
|
+
}, n.maxWait)), s;
|
|
34
|
+
};
|
|
35
|
+
return f.cancel = d, f.flush = () => (r &&= (clearTimeout(r), void 0), i &&= (clearTimeout(i), void 0), u()), f;
|
|
36
|
+
}
|
|
37
|
+
function o(e) {
|
|
38
|
+
let t = [];
|
|
39
|
+
for (let n of e ?? []) Array.isArray(n) ? t.push(...n) : t.push(n);
|
|
40
|
+
return t;
|
|
41
|
+
}
|
|
42
|
+
function s(e, t, r) {
|
|
43
|
+
let i = e;
|
|
44
|
+
for (let e of n(t)) {
|
|
45
|
+
if (i == null) return r;
|
|
46
|
+
i = i[e];
|
|
47
|
+
}
|
|
48
|
+
return i === void 0 ? r : i;
|
|
49
|
+
}
|
|
50
|
+
function c(e) {
|
|
51
|
+
return e == null ? !0 : typeof e == "string" || Array.isArray(e) ? e.length === 0 : e instanceof Map || e instanceof Set ? e.size === 0 : t(e) ? Object.keys(e).length === 0 : !0;
|
|
52
|
+
}
|
|
53
|
+
function l(n, r, i) {
|
|
54
|
+
let a = i?.(n, r);
|
|
55
|
+
if (a !== void 0) return !!a;
|
|
56
|
+
if (Object.is(n, r)) return !0;
|
|
57
|
+
if (!t(n) || !t(r)) return !1;
|
|
58
|
+
if (n instanceof Date || r instanceof Date) return n instanceof Date && r instanceof Date && n.getTime() === r.getTime();
|
|
59
|
+
if (Array.isArray(n) || Array.isArray(r)) return Array.isArray(n) && Array.isArray(r) && n.length === r.length && n.every((e, t) => l(e, r[t], i));
|
|
60
|
+
let o = Object.keys(n), s = Object.keys(r);
|
|
61
|
+
return o.length === s.length && o.every((t) => e.hasOwnProperty.call(r, t) && l(n[t], r[t], i));
|
|
62
|
+
}
|
|
63
|
+
function u(e, t) {
|
|
64
|
+
return l(e, t);
|
|
65
|
+
}
|
|
66
|
+
function d(e) {
|
|
67
|
+
return Number.isFinite(e);
|
|
68
|
+
}
|
|
69
|
+
function f(e, t) {
|
|
70
|
+
let n = { ...e ?? {} };
|
|
71
|
+
for (let e of Array.isArray(t) ? t : [t]) delete n[e];
|
|
72
|
+
return n;
|
|
73
|
+
}
|
|
74
|
+
function p(e, t, r) {
|
|
75
|
+
let i = n(t), a = e;
|
|
76
|
+
return i.forEach((e, t) => {
|
|
77
|
+
if (t === i.length - 1) {
|
|
78
|
+
a[e] = r;
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
let n = i[t + 1];
|
|
82
|
+
a[e] ??= typeof n == "number" || /^\d+$/.test(String(n)) ? [] : {}, a = a[e];
|
|
83
|
+
}), e;
|
|
84
|
+
}
|
|
85
|
+
function m(e, t) {
|
|
86
|
+
let n = t ?? ((e) => e);
|
|
87
|
+
return Array.from({ length: Math.max(0, e) }, (e, t) => n(t));
|
|
88
|
+
}
|
|
89
|
+
function h(...e) {
|
|
90
|
+
let t = Math.max(0, ...e.map((e) => e.length));
|
|
91
|
+
return Array.from({ length: t }, (t, n) => e.map((e) => e[n]));
|
|
92
|
+
}
|
|
93
|
+
//#endregion
|
|
94
|
+
export { f as a, m as c, s as d, o as f, c as i, h as l, p as n, a as o, d as r, r as s, u as t, i as u };
|
|
95
|
+
|
|
96
|
+
//# sourceMappingURL=dist-C78LDz6R.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dist-C78LDz6R.js","names":[],"sources":["../../../../shared/lodash/dist/index.js"],"sourcesContent":["//#region src/index.ts\nvar e = Object.prototype;\nfunction t(e) {\n\treturn typeof e == \"object\" && !!e;\n}\nfunction n(e) {\n\treturn Array.isArray(e) ? e : typeof e == \"number\" ? [e] : e.replace(/\\[(\\d+)\\]/g, \".$1\").split(\".\").filter(Boolean);\n}\nfunction r(e) {\n\treturn (t) => x(t, e);\n}\nfunction i(e) {\n\treturn (n) => t(n) ? Object.entries(e).every(([e, t]) => A(n[e], t)) : !1;\n}\nfunction a(e) {\n\treturn typeof e == \"function\" ? e : typeof e == \"string\" ? r(e) : t(e) ? i(e) : ((e) => e);\n}\nfunction o(e, ...t) {\n\treturn Object.assign(e, ...t.filter(Boolean));\n}\nfunction s(e, t = 1) {\n\tif (!e?.length || t < 1) return [];\n\tlet n = [];\n\tfor (let r = 0; r < e.length; r += t) n.push(e.slice(r, r + t));\n\treturn n;\n}\nfunction c(e) {\n\treturn Array.isArray(e) ? e.slice() : t(e) ? { ...e } : e;\n}\nfunction l(e) {\n\tif (!t(e)) return e;\n\tif (e instanceof Date) return new Date(e.getTime());\n\tif (Array.isArray(e)) return e.map((e) => l(e));\n\tlet n = {};\n\tfor (let [t, r] of Object.entries(e)) n[t] = l(r);\n\treturn n;\n}\nfunction u(e) {\n\treturn (e ?? []).filter(Boolean);\n}\nfunction d(e, ...t) {\n\tlet n = [...e ?? []];\n\tfor (let e of t) Array.isArray(e) ? n.push(...e) : n.push(e);\n\treturn n;\n}\nfunction f(e, t = 0, n = {}) {\n\tlet r, i, a, o, s, c = n.leading === !0, l = n.trailing !== !1, u = () => {\n\t\tif (!a) return s;\n\t\tlet t = a, n = o;\n\t\treturn a = void 0, o = void 0, s = e.apply(n, t), s;\n\t}, d = () => {\n\t\tr && clearTimeout(r), i && clearTimeout(i), r = void 0, i = void 0, a = void 0, o = void 0;\n\t}, f = function(...e) {\n\t\tlet d = c && !r;\n\t\treturn a = e, o = this, d && u(), r && clearTimeout(r), r = setTimeout(() => {\n\t\t\tr = void 0, i &&= (clearTimeout(i), void 0), l ? u() : (a = void 0, o = void 0);\n\t\t}, t), n.maxWait !== void 0 && !i && (i = setTimeout(() => {\n\t\t\tr && clearTimeout(r), r = void 0, i = void 0, l || !c ? u() : (a = void 0, o = void 0);\n\t\t}, n.maxWait)), s;\n\t};\n\treturn f.cancel = d, f.flush = () => (r &&= (clearTimeout(r), void 0), i &&= (clearTimeout(i), void 0), u()), f;\n}\nfunction p(e, ...t) {\n\tfor (let n of t) if (n) for (let [t, r] of Object.entries(n)) e[t] === void 0 && (e[t] = r);\n\treturn e;\n}\nfunction m(e, ...t) {\n\tlet n = new Set(t.flat());\n\treturn (e ?? []).filter((e) => !n.has(e));\n}\nfunction h(e, t, n) {\n\treturn (e ?? []).filter((e) => !(t ?? []).some((t) => n(e, t)));\n}\nfunction g(e, t) {\n\tlet n = a(t), r = Array.isArray(e) ? e.entries() : Object.entries(e ?? {});\n\tfor (let [t, i] of r) if (!n(i, t, e)) return !1;\n\treturn !0;\n}\nfunction ee(e) {\n\treturn String(e).replace(/&/g, \"&\").replace(/</g, \"<\").replace(/>/g, \">\").replace(/\"/g, \""\").replace(/'/g, \"'\");\n}\nfunction _(e, t) {\n\tlet n = a(t), r = Array.isArray(e) ? e.entries() : Object.entries(e ?? {});\n\tfor (let [t, i] of r) if (n(i, t, e)) return i;\n}\nfunction v(e, t) {\n\tlet n = a(t);\n\tfor (let [t, r] of Object.entries(e ?? {})) if (n(r, t, e)) return t;\n}\nfunction y(e) {\n\tlet t = [];\n\tfor (let n of e ?? []) Array.isArray(n) ? t.push(...n) : t.push(n);\n\treturn t;\n}\nfunction te(e, t) {\n\treturn R(e, t).flat();\n}\nfunction b(e, t) {\n\tlet n = Array.isArray(e) ? e.entries() : Object.entries(e ?? {});\n\tfor (let [r, i] of n) t(i, r, e);\n\treturn e;\n}\nfunction x(e, t, r) {\n\tlet i = e;\n\tfor (let e of n(t)) {\n\t\tif (i == null) return r;\n\t\ti = i[e];\n\t}\n\treturn i === void 0 ? r : i;\n}\nfunction S(e, t) {\n\tlet n = a(t);\n\treturn K(e, (t, r, i) => {\n\t\tlet a = String(n(r, i, e));\n\t\treturn (t[a] ??= []).push(r), t;\n\t}, {});\n}\nfunction C(e) {\n\treturn e?.[0];\n}\nfunction w(e) {\n\treturn (e ?? []).slice(0, -1);\n}\nfunction T(e, t) {\n\treturn typeof e == \"string\" ? e.includes(String(t)) : Array.isArray(e) ? e.includes(t) : Object.values(e ?? {}).includes(t);\n}\nfunction E(...e) {\n\tlet [t, ...n] = e;\n\treturn $((t ?? []).filter((e) => n.every((t) => (t ?? []).includes(e))));\n}\nfunction D(e) {\n\treturn Array.isArray(e);\n}\nfunction O(e) {\n\treturn e == null ? !0 : typeof e == \"string\" || Array.isArray(e) ? e.length === 0 : e instanceof Map || e instanceof Set ? e.size === 0 : t(e) ? Object.keys(e).length === 0 : !0;\n}\nfunction k(n, r, i) {\n\tlet a = i?.(n, r);\n\tif (a !== void 0) return !!a;\n\tif (Object.is(n, r)) return !0;\n\tif (!t(n) || !t(r)) return !1;\n\tif (n instanceof Date || r instanceof Date) return n instanceof Date && r instanceof Date && n.getTime() === r.getTime();\n\tif (Array.isArray(n) || Array.isArray(r)) return Array.isArray(n) && Array.isArray(r) && n.length === r.length && n.every((e, t) => k(e, r[t], i));\n\tlet o = Object.keys(n), s = Object.keys(r);\n\treturn o.length === s.length && o.every((t) => e.hasOwnProperty.call(r, t) && k(n[t], r[t], i));\n}\nfunction A(e, t) {\n\treturn k(e, t);\n}\nfunction j(e, t, n) {\n\treturn k(e, t, n);\n}\nfunction M(e) {\n\treturn Number.isFinite(e);\n}\nfunction N(e) {\n\treturn typeof e == \"function\";\n}\nfunction P(e) {\n\treturn typeof e == \"number\" || e instanceof Number;\n}\nfunction F(e) {\n\treturn typeof e == \"object\" && !!e || typeof e == \"function\";\n}\nfunction I(e) {\n\treturn typeof e == \"string\" || e instanceof String;\n}\nfunction L(e) {\n\treturn e === void 0;\n}\nfunction R(e, t) {\n\tlet n = a(t), r = Array.isArray(e) ? e.entries() : Object.entries(e ?? {}), i = [];\n\tfor (let [t, a] of r) i.push(n(a, t, e));\n\treturn i;\n}\nfunction z(e) {\n\treturn e?.length ? Math.max(...e) : void 0;\n}\nfunction B(e, ...n) {\n\tfor (let r of n) if (r) for (let [n, i] of Object.entries(r)) t(i) && !Array.isArray(i) && t(e[n]) ? B(e[n], i) : e[n] = l(i);\n\treturn e;\n}\nfunction V(e, t) {\n\tlet n = { ...e ?? {} };\n\tfor (let e of Array.isArray(t) ? t : [t]) delete n[e];\n\treturn n;\n}\nfunction H(e, t) {\n\tlet n = a(t), r = {};\n\tfor (let [t, i] of Object.entries(e ?? {})) n(i, t, e) || (r[t] = i);\n\treturn r;\n}\nfunction U(e, ...t) {\n\tlet n = {};\n\tfor (let r of t.flat()) e && r in e && (n[r] = e[r]);\n\treturn n;\n}\nfunction W(e, t, n = 1) {\n\tlet r = t ?? e, i = t === void 0 ? 0 : e;\n\tif (n === 0) return [];\n\tlet a = [], o = n > 0;\n\tfor (let e = i; o ? e < r : e > r; e += n) a.push(e);\n\treturn a;\n}\nfunction G(e, t, n = 1) {\n\treturn W(e, t, n).reverse();\n}\nfunction K(e, t, n) {\n\tlet r = n, i = Array.isArray(e) ? e.entries() : Object.entries(e ?? {});\n\tfor (let [n, a] of i) r = t(r, a, n, e);\n\treturn r;\n}\nfunction q(e, t) {\n\tlet n = a(t), r = [];\n\tfor (let t = e.length - 1; t >= 0; t--) n(e[t], t, e) && r.unshift(...e.splice(t, 1));\n\treturn r;\n}\nfunction J(e, t, r) {\n\tlet i = n(t), a = e;\n\treturn i.forEach((e, t) => {\n\t\tif (t === i.length - 1) {\n\t\t\ta[e] = r;\n\t\t\treturn;\n\t\t}\n\t\tlet n = i[t + 1];\n\t\ta[e] ??= typeof n == \"number\" || /^\\d+$/.test(String(n)) ? [] : {}, a = a[e];\n\t}), e;\n}\nfunction Y(e) {\n\tlet t = [...e ?? []];\n\tfor (let e = t.length - 1; e > 0; e--) {\n\t\tlet n = Math.floor(Math.random() * (e + 1));\n\t\t[t[e], t[n]] = [t[n], t[e]];\n\t}\n\treturn t;\n}\nfunction X(e) {\n\treturn (e ?? []).slice(1);\n}\nfunction Z(e, t = 1) {\n\treturn t <= 0 ? [] : (e ?? []).slice(-t);\n}\nfunction Q(e, t = 0, n = {}) {\n\treturn f(e, t, {\n\t\tleading: n.leading !== !1,\n\t\ttrailing: n.trailing !== !1,\n\t\tmaxWait: t\n\t});\n}\nfunction ne(e, t) {\n\tlet n = t ?? ((e) => e);\n\treturn Array.from({ length: Math.max(0, e) }, (e, t) => n(t));\n}\nvar re = 0;\nfunction ie(e = \"\") {\n\treturn re += 1, `${e}${re}`;\n}\nfunction $(e) {\n\treturn Array.from(new Set(e ?? []));\n}\nfunction ae(e, t) {\n\tlet n = [];\n\tfor (let r of e ?? []) n.some((e) => t(r, e)) || n.push(r);\n\treturn n;\n}\nfunction oe(...e) {\n\tlet t = Math.max(0, ...e.map((e) => e.length));\n\treturn Array.from({ length: t }, (t, n) => e.map((e) => e[n]));\n}\nvar se = {\n\tassign: o,\n\tchunk: s,\n\tclone: c,\n\tcloneDeep: l,\n\tcompact: u,\n\tconcat: d,\n\tdebounce: f,\n\tdefaults: p,\n\tdifference: m,\n\tdifferenceWith: h,\n\tevery: g,\n\tescape: ee,\n\tfind: _,\n\tfindKey: v,\n\tflatten: y,\n\tflatMap: te,\n\tforEach: b,\n\tget: x,\n\tgroupBy: S,\n\thead: C,\n\tincludes: T,\n\tinitial: w,\n\tintersection: E,\n\tisArray: D,\n\tisEmpty: O,\n\tisEqual: A,\n\tisEqualWith: j,\n\tisFinite: M,\n\tisFunction: N,\n\tisNumber: P,\n\tisObject: F,\n\tisString: I,\n\tisUndefined: L,\n\tmap: R,\n\tmax: z,\n\tmerge: B,\n\tomit: V,\n\tomitBy: H,\n\tpick: U,\n\trange: W,\n\trangeRight: G,\n\treduce: K,\n\tremove: q,\n\tset: J,\n\tshuffle: Y,\n\ttail: X,\n\ttakeRight: Z,\n\tthrottle: Q,\n\ttimes: ne,\n\tuniqueId: ie,\n\tuniq: $,\n\tuniqWith: ae,\n\tzip: oe\n};\n//#endregion\nexport { o as assign, s as chunk, c as clone, l as cloneDeep, u as compact, d as concat, f as debounce, se as default, p as defaults, m as difference, h as differenceWith, ee as escape, g as every, _ as find, v as findKey, te as flatMap, y as flatten, b as forEach, x as get, S as groupBy, C as head, T as includes, w as initial, E as intersection, D as isArray, O as isEmpty, A as isEqual, j as isEqualWith, M as isFinite, N as isFunction, P as isNumber, F as isObject, I as isString, L as isUndefined, R as map, z as max, B as merge, V as omit, H as omitBy, U as pick, W as range, G as rangeRight, K as reduce, q as remove, J as set, Y as shuffle, X as tail, Z as takeRight, Q as throttle, ne as times, $ as uniq, ae as uniqWith, ie as uniqueId, oe as zip };\n"],"mappings":"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"}
|
package/dist/controller/index.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import e from "
|
|
2
|
-
import
|
|
3
|
-
import n from "
|
|
4
|
-
import r from "
|
|
1
|
+
import { isResponseCorrect as e } from "./utils.js";
|
|
2
|
+
import t from "./defaults.js";
|
|
3
|
+
import n from "debug";
|
|
4
|
+
import { isEmpty as r } from "@pie-element/shared-lodash";
|
|
5
5
|
import { partialScoring as i } from "@pie-element/shared-controller-utils";
|
|
6
6
|
//#region src/controller/index.ts
|
|
7
|
-
var a =
|
|
8
|
-
...
|
|
7
|
+
var a = n("pie-elements:hotspot:controller"), o = (e) => ({
|
|
8
|
+
...t,
|
|
9
9
|
...e
|
|
10
10
|
});
|
|
11
|
-
function s(
|
|
12
|
-
let i = o(
|
|
13
|
-
return new Promise((
|
|
11
|
+
function s(t, n, r) {
|
|
12
|
+
let i = o(t), { imageUrl: a, dimensions: s, hotspotColor: c, hoverOutlineColor: l, selectedHotspotColor: u, multipleCorrect: d, outlineColor: f, partialScoring: p, prompt: m, shapes: h, language: g, fontSizeFactor: _, autoplayAudioEnabled: v, completeAudioEnabled: y, customAudioButton: b } = i, { rectangles: x, polygons: S, circles: C } = h || {}, w = r.mode === "evaluate" || r.role === "instructor" && r.mode === "view";
|
|
13
|
+
return new Promise((t) => {
|
|
14
14
|
let o = {
|
|
15
15
|
disabled: r.mode !== "gather",
|
|
16
16
|
mode: r.mode,
|
|
@@ -42,22 +42,22 @@ function s(e, n, r) {
|
|
|
42
42
|
...n
|
|
43
43
|
} : { ...n })
|
|
44
44
|
},
|
|
45
|
-
responseCorrect: r.mode === "evaluate" ?
|
|
45
|
+
responseCorrect: r.mode === "evaluate" ? e(i, n) : void 0,
|
|
46
46
|
extraCSSRules: i.extraCSSRules
|
|
47
47
|
};
|
|
48
|
-
r.role === "instructor" && (r.mode === "view" || r.mode === "evaluate") ? (o.rationale = i.rationaleEnabled ? i.rationale : null, o.teacherInstructions = i.teacherInstructionsEnabled ? i.teacherInstructions : null) : (o.rationale = null, o.teacherInstructions = null), o.prompt = i.promptEnabled ? m : null, o.strokeWidth = i.strokeWidth,
|
|
48
|
+
r.role === "instructor" && (r.mode === "view" || r.mode === "evaluate") ? (o.rationale = i.rationaleEnabled ? i.rationale : null, o.teacherInstructions = i.teacherInstructionsEnabled ? i.teacherInstructions : null) : (o.rationale = null, o.teacherInstructions = null), o.prompt = i.promptEnabled ? m : null, o.strokeWidth = i.strokeWidth, t(o);
|
|
49
49
|
});
|
|
50
50
|
}
|
|
51
|
-
var c = (e = {}) => new Promise((
|
|
52
|
-
|
|
53
|
-
...
|
|
51
|
+
var c = (e = {}) => new Promise((n) => {
|
|
52
|
+
n({
|
|
53
|
+
...t,
|
|
54
54
|
...e
|
|
55
55
|
});
|
|
56
|
-
}), l = (
|
|
56
|
+
}), l = (t, n, r = {}) => {
|
|
57
57
|
let { answers: a } = n || {};
|
|
58
|
-
if (!
|
|
59
|
-
let { shapes: { rectangles: o = [], polygons: s = [], circles: c = [] } = {} } =
|
|
60
|
-
if (!i.enabled(
|
|
58
|
+
if (!t.shapes || !t.shapes.rectangles && !t.shapes.polygons && !t.shapes.circles) return 0;
|
|
59
|
+
let { shapes: { rectangles: o = [], polygons: s = [], circles: c = [] } = {} } = t;
|
|
60
|
+
if (!i.enabled(t, r)) return +!!e(t, n);
|
|
61
61
|
let l = 0, u = 0, d = [
|
|
62
62
|
...o,
|
|
63
63
|
...s,
|
|
@@ -100,18 +100,18 @@ var c = (e = {}) => new Promise((t) => {
|
|
|
100
100
|
let d = l(e, t, n);
|
|
101
101
|
return r.push(`Score: ${d}.`), r;
|
|
102
102
|
};
|
|
103
|
-
function d(t, n
|
|
103
|
+
function d(e, t, n = {}) {
|
|
104
104
|
return new Promise((i) => {
|
|
105
|
-
if (a("outcome..."), (!
|
|
105
|
+
if (a("outcome..."), (!t || r(t)) && i({
|
|
106
106
|
score: 0,
|
|
107
107
|
empty: !0,
|
|
108
108
|
traceLog: ["No hotspots selected. Score: 0."]
|
|
109
|
-
}),
|
|
110
|
-
let
|
|
109
|
+
}), t.answers) {
|
|
110
|
+
let r = u(e, t, n);
|
|
111
111
|
i({
|
|
112
|
-
score: l(t, n
|
|
112
|
+
score: l(e, t, n),
|
|
113
113
|
empty: !1,
|
|
114
|
-
traceLog:
|
|
114
|
+
traceLog: r
|
|
115
115
|
});
|
|
116
116
|
} else i({
|
|
117
117
|
score: 0,
|
|
@@ -7,4 +7,4 @@
|
|
|
7
7
|
* To make changes, edit the upstream JavaScript file and run sync again.
|
|
8
8
|
*/
|
|
9
9
|
export declare const getCorrectResponse: (choices: any) => any;
|
|
10
|
-
export declare const isResponseCorrect: (question: any, session: any) =>
|
|
10
|
+
export declare const isResponseCorrect: (question: any, session: any) => boolean;
|
package/dist/controller/utils.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import e from "
|
|
2
|
-
import t from "../node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isEqual.js";
|
|
1
|
+
import { isEmpty as e, isEqual as t } from "@pie-element/shared-lodash";
|
|
3
2
|
//#region src/controller/utils.ts
|
|
4
3
|
var n = (e) => e.filter((e) => e.correct).map((e) => e.id).sort(), r = (r, i) => {
|
|
5
4
|
let { shapes: { rectangles: a = [], polygons: o = [], circles: s = [] } } = r, c = n([
|
package/package.json
CHANGED
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pie-element/hotspot",
|
|
3
|
-
"version": "11.1.2-next.
|
|
3
|
+
"version": "11.1.2-next.1",
|
|
4
4
|
"description": "",
|
|
5
5
|
"dependencies": {
|
|
6
6
|
"@emotion/react": "^11.14.0",
|
|
7
7
|
"@emotion/style": "^0.8.0",
|
|
8
8
|
"@mui/icons-material": "^7.3.4",
|
|
9
9
|
"@mui/material": "^7.3.4",
|
|
10
|
-
"@pie-lib/correct-answer-toggle": "4.0.
|
|
11
|
-
"@pie-lib/render-ui": "6.1.0",
|
|
10
|
+
"@pie-lib/correct-answer-toggle": "4.0.3-next.0",
|
|
11
|
+
"@pie-lib/render-ui": "6.1.1-next.0",
|
|
12
12
|
"@pie-lib/test-utils": "2.0.2",
|
|
13
13
|
"konva": "8.3.0",
|
|
14
14
|
"prop-types": "^15.8.1",
|
|
15
15
|
"react-konva": "^18.2.14",
|
|
16
|
-
"lodash
|
|
17
|
-
"@pie-lib/config-ui": "13.0.
|
|
16
|
+
"@pie-element/shared-lodash": "0.1.1-next.0",
|
|
17
|
+
"@pie-lib/config-ui": "13.0.4-next.0",
|
|
18
18
|
"debug": "^4.4.3",
|
|
19
19
|
"@pie-element/shared-configure-events": "0.1.0",
|
|
20
|
-
"@pie-lib/editable-html-tip-tap": "2.1.
|
|
20
|
+
"@pie-lib/editable-html-tip-tap": "2.1.2-next.0",
|
|
21
21
|
"@pie-element/shared-controller-utils": "0.1.1-next.1",
|
|
22
22
|
"@pie-element/shared-math-rendering-mathjax": "0.1.0",
|
|
23
23
|
"@pie-element/shared-player-events": "0.1.0",
|
|
@@ -60,6 +60,10 @@
|
|
|
60
60
|
},
|
|
61
61
|
"./browser/controller": {
|
|
62
62
|
"default": "./dist/browser/controller/index.js"
|
|
63
|
+
},
|
|
64
|
+
"./runtime-support": {
|
|
65
|
+
"types": "./dist/runtime-support.d.ts",
|
|
66
|
+
"default": "./dist/runtime-support.js"
|
|
63
67
|
}
|
|
64
68
|
},
|
|
65
69
|
"type": "module",
|