@pie-element/charting 12.1.2-next.0 → 12.1.2-next.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (172) hide show
  1. package/dist/author/correct-response.js +35 -36
  2. package/dist/author/utils.js +1 -1
  3. package/dist/browser/author/index.js +173 -173
  4. package/dist/browser/author/index.js.map +1 -1
  5. package/dist/browser/{chart-Dghjf6JQ.js → chart-C1GUG3cz.js} +13162 -17222
  6. package/dist/browser/chart-C1GUG3cz.js.map +1 -0
  7. package/dist/browser/controller/index.js +67 -106
  8. package/dist/browser/controller/index.js.map +1 -1
  9. package/dist/browser/delivery/index.js +89 -89
  10. package/dist/browser/delivery/index.js.map +1 -1
  11. package/dist/browser/dist-CA-Ok7CW.js +330 -0
  12. package/dist/browser/dist-CA-Ok7CW.js.map +1 -0
  13. package/dist/controller/index.js +13 -15
  14. package/dist/delivery/main.js +46 -46
  15. package/dist/index.iife.js +102 -104
  16. package/dist/runtime-support.d.ts +12 -0
  17. package/dist/runtime-support.js +12 -0
  18. package/package.json +13 -10
  19. package/dist/browser/_baseSet-Cse6EM9A.js +0 -1015
  20. package/dist/browser/_baseSet-Cse6EM9A.js.map +0 -1
  21. package/dist/browser/chart-Dghjf6JQ.js.map +0 -1
  22. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_DataView.js +0 -6
  23. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_Hash.js +0 -16
  24. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_ListCache.js +0 -16
  25. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_Map.js +0 -6
  26. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_MapCache.js +0 -16
  27. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_Promise.js +0 -6
  28. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_Set.js +0 -6
  29. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_SetCache.js +0 -11
  30. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_Stack.js +0 -14
  31. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_Symbol.js +0 -5
  32. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_Uint8Array.js +0 -5
  33. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_WeakMap.js +0 -6
  34. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_apply.js +0 -12
  35. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_arrayEach.js +0 -7
  36. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_arrayFilter.js +0 -10
  37. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_arrayLikeKeys.js +0 -15
  38. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_arrayMap.js +0 -7
  39. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_arrayPush.js +0 -7
  40. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_arraySome.js +0 -7
  41. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_assignValue.js +0 -10
  42. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_assocIndexOf.js +0 -8
  43. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseAssign.js +0 -8
  44. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseAssignIn.js +0 -8
  45. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseAssignValue.js +0 -12
  46. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseClone.js +0 -57
  47. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseCreate.js +0 -14
  48. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseFlatten.js +0 -13
  49. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseGet.js +0 -10
  50. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseGetAllKeys.js +0 -9
  51. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseGetTag.js +0 -10
  52. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseHasIn.js +0 -6
  53. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseIsArguments.js +0 -9
  54. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseIsEqual.js +0 -8
  55. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseIsEqualDeep.js +0 -30
  56. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseIsMap.js +0 -9
  57. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseIsNative.js +0 -11
  58. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseIsSet.js +0 -9
  59. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseIsTypedArray.js +0 -11
  60. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseKeys.js +0 -12
  61. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseKeysIn.js +0 -13
  62. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_basePick.js +0 -10
  63. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_basePickBy.js +0 -13
  64. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseSet.js +0 -22
  65. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseSetToString.js +0 -14
  66. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseTimes.js +0 -7
  67. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseToString.js +0 -15
  68. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseUnary.js +0 -8
  69. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_cacheHas.js +0 -6
  70. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_castPath.js +0 -10
  71. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_cloneArrayBuffer.js +0 -8
  72. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_cloneBuffer.js +0 -10
  73. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_cloneDataView.js +0 -8
  74. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_cloneRegExp.js +0 -8
  75. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_cloneSymbol.js +0 -8
  76. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_cloneTypedArray.js +0 -8
  77. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_copyArray.js +0 -8
  78. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_copyObject.js +0 -14
  79. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_copySymbols.js +0 -8
  80. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_copySymbolsIn.js +0 -8
  81. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_coreJsData.js +0 -5
  82. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_defineProperty.js +0 -10
  83. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_equalArrays.js +0 -35
  84. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_equalByTag.js +0 -35
  85. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_equalObjects.js +0 -32
  86. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_flatRest.js +0 -9
  87. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_freeGlobal.js +0 -4
  88. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getAllKeys.js +0 -9
  89. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getAllKeysIn.js +0 -9
  90. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getMapData.js +0 -8
  91. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getNative.js +0 -9
  92. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getPrototype.js +0 -5
  93. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getRawTag.js +0 -14
  94. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getSymbols.js +0 -10
  95. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getSymbolsIn.js +0 -11
  96. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getTag.js +0 -23
  97. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getValue.js +0 -6
  98. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_hasPath.js +0 -18
  99. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_hashClear.js +0 -7
  100. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_hashDelete.js +0 -7
  101. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_hashGet.js +0 -13
  102. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_hashHas.js +0 -9
  103. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_hashSet.js +0 -9
  104. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_initCloneArray.js +0 -8
  105. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_initCloneByTag.js +0 -33
  106. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_initCloneObject.js +0 -9
  107. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_isFlattenable.js +0 -10
  108. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_isIndex.js +0 -8
  109. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_isKey.js +0 -11
  110. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_isKeyable.js +0 -7
  111. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_isMasked.js +0 -11
  112. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_isPrototype.js +0 -8
  113. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_listCacheClear.js +0 -6
  114. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_listCacheDelete.js +0 -9
  115. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_listCacheGet.js +0 -8
  116. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_listCacheHas.js +0 -7
  117. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_listCacheSet.js +0 -8
  118. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheClear.js +0 -13
  119. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheDelete.js +0 -8
  120. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheGet.js +0 -7
  121. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheHas.js +0 -7
  122. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheSet.js +0 -8
  123. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_mapToArray.js +0 -9
  124. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_memoizeCapped.js +0 -11
  125. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_nativeCreate.js +0 -5
  126. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_nativeKeys.js +0 -5
  127. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_nativeKeysIn.js +0 -8
  128. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_nodeUtil.js +0 -9
  129. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_objectToString.js +0 -7
  130. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_overArg.js +0 -8
  131. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_overRest.js +0 -13
  132. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_root.js +0 -5
  133. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_setCacheAdd.js +0 -7
  134. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_setCacheHas.js +0 -6
  135. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_setToArray.js +0 -9
  136. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_setToString.js +0 -6
  137. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_shortOut.js +0 -14
  138. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_stackClear.js +0 -7
  139. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_stackDelete.js +0 -7
  140. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_stackGet.js +0 -6
  141. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_stackHas.js +0 -6
  142. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_stackSet.js +0 -16
  143. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_stringToPath.js +0 -10
  144. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_toKey.js +0 -10
  145. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_toSource.js +0 -15
  146. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/cloneDeep.js +0 -8
  147. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/constant.js +0 -8
  148. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/eq.js +0 -6
  149. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/flatten.js +0 -7
  150. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/hasIn.js +0 -8
  151. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/identity.js +0 -6
  152. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isArguments.js +0 -10
  153. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isArray.js +0 -4
  154. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isArrayLike.js +0 -8
  155. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isBuffer.js +0 -6
  156. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isEmpty.js +0 -21
  157. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isEqual.js +0 -7
  158. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isFunction.js +0 -11
  159. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isLength.js +0 -7
  160. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isMap.js +0 -7
  161. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isObject.js +0 -7
  162. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isObjectLike.js +0 -6
  163. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isSet.js +0 -7
  164. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isSymbol.js +0 -9
  165. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isTypedArray.js +0 -7
  166. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/keys.js +0 -9
  167. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/keysIn.js +0 -9
  168. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/memoize.js +0 -16
  169. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/pick.js +0 -8
  170. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/stubArray.js +0 -6
  171. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/stubFalse.js +0 -6
  172. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/toString.js +0 -7
@@ -1,45 +1,6 @@
1
- import { G as e, N as t, O as n, R as r, Y as i, _ as a, f as o, g as s, h as c, n as l, r as u, t as d, w as f } from "../_baseSet-Cse6EM9A.js";
2
- //#region ../../../node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseHasIn.js
3
- function p(e, t) {
4
- return e != null && t in Object(e);
5
- }
6
- //#endregion
7
- //#region ../../../node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_hasPath.js
8
- function m(e, i, o) {
9
- i = a(i, e);
10
- for (var c = -1, l = i.length, u = !1; ++c < l;) {
11
- var d = s(i[c]);
12
- if (!(u = e != null && o(e, d))) break;
13
- e = e[d];
14
- }
15
- return u || ++c != l ? u : (l = e == null ? 0 : e.length, !!l && n(l) && t(d, l) && (r(e) || f(e)));
16
- }
17
- //#endregion
18
- //#region ../../../node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/hasIn.js
19
- function h(e, t) {
20
- return e != null && m(e, t, p);
21
- }
22
- //#endregion
23
- //#region ../../../node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_basePickBy.js
24
- function g(e, t, n) {
25
- for (var r = -1, i = t.length, o = {}; ++r < i;) {
26
- var s = t[r], l = c(e, s);
27
- n(l, s) && d(o, a(s, e), l);
28
- }
29
- return o;
30
- }
31
- //#endregion
32
- //#region ../../../node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_basePick.js
33
- function _(e, t) {
34
- return g(e, t, function(t, n) {
35
- return h(e, n);
36
- });
37
- }
38
- //#endregion
39
- //#region ../../../node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/pick.js
40
- var v = o(function(e, t) {
41
- return e == null ? {} : _(e, t);
42
- }), y = /* @__PURE__ */ i(e(), 1), b = {
1
+ import { S as e, o as t, s as n, t as r, v as i } from "../dist-CA-Ok7CW.js";
2
+ //#region src/controller/defaults.ts
3
+ var a = /* @__PURE__ */ e(i(), 1), o = {
43
4
  addCategoryEnabled: !0,
44
5
  changeAddCategoryEnabled: !1,
45
6
  changeEditableEnabled: !1,
@@ -68,40 +29,40 @@ var v = o(function(e, t) {
68
29
  teacherInstructions: "",
69
30
  teacherInstructionsEnabled: !0,
70
31
  title: ""
71
- }, x = Object.defineProperty, S = /* @__PURE__ */ ((e, t) => {
32
+ }, s = Object.defineProperty, c = /* @__PURE__ */ ((e, t) => {
72
33
  let n = {};
73
- for (var r in e) x(n, r, {
34
+ for (var r in e) s(n, r, {
74
35
  get: e[r],
75
36
  enumerable: !0
76
37
  });
77
- return t || x(n, Symbol.toStringTag, { value: "Module" }), n;
78
- })({ enabled: () => C });
79
- function C(e, t, n) {
38
+ return t || s(n, Symbol.toStringTag, { value: "Module" }), n;
39
+ })({ enabled: () => l });
40
+ function l(e, t, n) {
80
41
  return e?.partialScoring === !1 || t?.partialScoring === !1 ? !1 : typeof n == "boolean" ? n : !0;
81
42
  }
82
43
  //#endregion
83
44
  //#region src/controller/index.ts
84
- var w = (0, y.default)("@pie-element:graphing:controller"), T = (e) => (e || "").toLowerCase(), E = (e, t) => T(e) === T(t), D = (e, t) => e ? e.map((e) => ({
45
+ var u = (0, a.default)("@pie-element:graphing:controller"), d = (e) => (e || "").toLowerCase(), f = (e, t) => d(e) === d(t), p = (e, t) => e ? e.map((e) => ({
85
46
  ...e,
86
47
  correctness: {
87
48
  value: t ? "incorrect" : "correct",
88
49
  label: t ? "incorrect" : "correct"
89
50
  }
90
- })) : [], O = (e) => ({
91
- ...b,
51
+ })) : [], m = (e) => ({
52
+ ...o,
92
53
  ...e
93
- }), k = (e, t, n = {}) => {
94
- let { correctAnswer: r, data: i = [], scoringType: a } = e, o = [], s = S.enabled({ partialScoring: a === void 0 ? a : a === "partial scoring" }, n), { data: c = [] } = r || {}, l = j(i), u = D(t && t.answer || l, s), d = 0;
54
+ }), h = (e, t, n = {}) => {
55
+ let { correctAnswer: r, data: i = [], scoringType: a } = e, o = [], s = c.enabled({ partialScoring: a === void 0 ? a : a === "partial scoring" }, n), { data: l = [] } = r || {}, u = _(i), m = p(t && t.answer || u, s), h = 0;
95
56
  if (s) {
96
57
  let e = 0, t = 0, n = (n, r) => {
97
- let { value: i, label: a, index: s } = n, c = i === r.value, l = E(a, r.label);
58
+ let { value: i, label: a, index: s } = n, c = i === r.value, l = f(a, r.label);
98
59
  e += 2, c && (t += 1, n.correctness.value = "correct"), l && (t += 1, n.correctness.label = "correct"), c && l && o.push({
99
60
  label: a,
100
61
  index: s
101
62
  });
102
63
  };
103
- c.forEach((r, i) => {
104
- let a = l[i], s = u[i];
64
+ l.forEach((r, i) => {
65
+ let a = u[i], s = m[i];
105
66
  s ? a ? !a.editable && s.interactive ? (e += 1, s.value === r.value && (t += 1, s.correctness.value = "correct", o.push({
106
67
  label: s.label,
107
68
  index: i
@@ -109,10 +70,10 @@ var w = (0, y.default)("@pie-element:graphing:controller"), T = (e) => (e || "")
109
70
  label: s.label,
110
71
  index: i
111
72
  })) : n(s, r) : e += 2;
112
- }), d = e ? t / e : 0;
113
- } else d = +(c.length === u.length), u = u.map((e, t) => {
114
- let n = c[t], r = n ? e.value === n.value : !1, i = n ? T(e.label) === T(n.label) : !1;
115
- return (!r || !i) && (d = 0), r && i && o.push({
73
+ }), h = e ? t / e : 0;
74
+ } else h = +(l.length === m.length), m = m.map((e, t) => {
75
+ let n = l[t], r = n ? e.value === n.value : !1, i = n ? d(e.label) === d(n.label) : !1;
76
+ return (!r || !i) && (h = 0), r && i && o.push({
116
77
  label: e.label,
117
78
  index: t
118
79
  }), {
@@ -123,26 +84,26 @@ var w = (0, y.default)("@pie-element:graphing:controller"), T = (e) => (e || "")
123
84
  }
124
85
  };
125
86
  });
126
- let f = {
127
- score: parseFloat(d.toFixed(2)),
128
- answers: u
87
+ let g = {
88
+ score: parseFloat(h.toFixed(2)),
89
+ answers: m
129
90
  };
130
- return n.extraProps && n.extraProps.correctResponseEnabled && (f.correctResponses = o), f;
131
- }, A = (e, t, n) => {
132
- let r = [], { correctAnswer: i, data: a = [], scoringType: o } = e || {}, { data: s = [] } = i || {}, c = t && t.answer || [], l = S.enabled({ partialScoring: o === void 0 ? o : o === "partial scoring" }, n), u = j(a), d = c.length > 0 ? j(c) : u;
133
- if (c.length || r.push("Student did not modify the chart. Initial chart is scored."), s.forEach((e, t) => {
134
- let n = u[t], i = d[t];
91
+ return n.extraProps && n.extraProps.correctResponseEnabled && (g.correctResponses = o), g;
92
+ }, g = (e, t, n) => {
93
+ let r = [], { correctAnswer: i, data: a = [], scoringType: o } = e || {}, { data: s = [] } = i || {}, l = t && t.answer || [], u = c.enabled({ partialScoring: o === void 0 ? o : o === "partial scoring" }, n), d = _(a), p = l.length > 0 ? _(l) : d;
94
+ if (l.length || r.push("Student did not modify the chart. Initial chart is scored."), s.forEach((e, t) => {
95
+ let n = d[t], i = p[t];
135
96
  if (!i) {
136
97
  r.push(`Category ${t + 1}: missing (expected value '${e.value}', label '${e.label}').`);
137
98
  return;
138
99
  }
139
- let a = i.value === e.value, o = E(i.label, e.label);
100
+ let a = i.value === e.value, o = f(i.label, e.label);
140
101
  if (!i.interactive) {
141
102
  r.push(`Category ${t + 1}: non-interactive category treated as correct.`);
142
103
  return;
143
104
  }
144
- if (c.length > 0) {
145
- let e = n ? i.value !== n.value : !0, s = n ? !E(i.label, n.label) : !0;
105
+ if (l.length > 0) {
106
+ let e = n ? i.value !== n.value : !0, s = n ? !f(i.label, n.label) : !0;
146
107
  if (!e && !s) {
147
108
  a && o ? r.push(`Category ${t + 1}: unchanged from initial value and correct.`) : r.push(`Category ${t + 1}: unchanged from initial value but incorrect.`);
148
109
  return;
@@ -150,26 +111,26 @@ var w = (0, y.default)("@pie-element:graphing:controller"), T = (e) => (e || "")
150
111
  let c = [];
151
112
  e && c.push(`value ${a ? "correct" : "incorrect"}`), s && c.push(`label ${o ? "correct" : "incorrect"}`), r.push(`Category ${t + 1}: modified - ${c.join(", ")}.`);
152
113
  } else a && o ? r.push(`Category ${t + 1}: initial values are correct.`) : a ? r.push(`Category ${t + 1}: initial value correct, label incorrect.`) : o ? r.push(`Category ${t + 1}: initial value incorrect, label correct.`) : r.push(`Category ${t + 1}: initial value and label incorrect.`);
153
- }), d.length > s.length) {
154
- let e = d.length - s.length;
114
+ }), p.length > s.length) {
115
+ let e = p.length - s.length;
155
116
  r.push(`${e} extra category(ies) provided beyond expected number.`);
156
117
  }
157
- l ? (r.push("Score calculated using partial scoring."), r.push("Student receives credit for each correct value and label independently.")) : (r.push("Score calculated using all-or-nothing scoring."), r.push("Student must match all category values and labels exactly for full credit."));
158
- let f = k(e, t, n);
159
- return r.push(`Score: ${f.score}.`), r;
160
- }, j = (e) => e ? e.map(({ deletable: e, ...t }) => t) : [];
161
- function M(e, t, n) {
118
+ u ? (r.push("Score calculated using partial scoring."), r.push("Student receives credit for each correct value and label independently.")) : (r.push("Score calculated using all-or-nothing scoring."), r.push("Student must match all category values and labels exactly for full credit."));
119
+ let m = h(e, t, n);
120
+ return r.push(`Score: ${m.score}.`), r;
121
+ }, _ = (e) => e ? e.map(({ deletable: e, ...t }) => t) : [];
122
+ function v(e, t, n) {
162
123
  return new Promise((r) => {
163
- let i = O(e), { addCategoryEnabled: a, chartType: o, data: s, domain: c, graph: l, prompt: u, promptEnabled: d, range: f, rationale: p, title: m, rationaleEnabled: h, teacherInstructions: g, teacherInstructionsEnabled: _, correctAnswer: v, scoringType: y, studentNewCategoryDefaultLabel: b, language: x, extraCSSRules: S } = i, C = {
124
+ let i = m(e), { addCategoryEnabled: a, chartType: o, data: s, domain: c, graph: l, prompt: d, promptEnabled: f, range: p, rationale: g, title: v, rationaleEnabled: y, teacherInstructions: b, teacherInstructionsEnabled: x, correctAnswer: S, scoringType: C, studentNewCategoryDefaultLabel: w, language: T, extraCSSRules: E } = i, D = {
164
125
  addCategoryEnabled: a,
165
126
  chartType: o,
166
- data: j(s),
127
+ data: _(s),
167
128
  domain: c,
168
129
  graph: l,
169
- prompt: d ? u : null,
170
- range: f,
171
- rationale: p,
172
- title: m,
130
+ prompt: f ? d : null,
131
+ range: p,
132
+ rationale: g,
133
+ title: v,
173
134
  size: l,
174
135
  showToggle: !1,
175
136
  correctness: {
@@ -177,29 +138,29 @@ function M(e, t, n) {
177
138
  score: "0%"
178
139
  },
179
140
  disabled: n.mode !== "gather",
180
- scoringType: y,
181
- studentNewCategoryDefaultLabel: b,
182
- language: x,
141
+ scoringType: C,
142
+ studentNewCategoryDefaultLabel: w,
143
+ language: T,
183
144
  env: n,
184
- extraCSSRules: S
185
- }, T = k(i, t, n), E = j(T.answers);
186
- n.mode === "view" && (C.correctedAnswer = E.map(({ correctness: e, ...t }) => ({
145
+ extraCSSRules: E
146
+ }, O = h(i, t, n), k = _(O.answers);
147
+ n.mode === "view" && (D.correctedAnswer = k.map(({ correctness: e, ...t }) => ({
187
148
  ...t,
188
149
  interactive: !1
189
- })), C.addCategoryEnabled = !1), n.mode === "evaluate" && (C.correctedAnswer = E, C.correctAnswer = v, C.showToggle = !!v?.data?.length && T.score !== 1, C.addCategoryEnabled = !1, C.showKeyLegend = !0), n.role === "instructor" && (n.mode === "view" || n.mode === "evaluate") ? (C.rationale = h ? p : null, C.teacherInstructions = _ ? g : null) : (C.rationale = null, C.teacherInstructions = null), w("base: ", C), r(C);
150
+ })), D.addCategoryEnabled = !1), n.mode === "evaluate" && (D.correctedAnswer = k, D.correctAnswer = S, D.showToggle = !!S?.data?.length && O.score !== 1, D.addCategoryEnabled = !1, D.showKeyLegend = !0), n.role === "instructor" && (n.mode === "view" || n.mode === "evaluate") ? (D.rationale = y ? g : null, D.teacherInstructions = x ? b : null) : (D.rationale = null, D.teacherInstructions = null), u("base: ", D), r(D);
190
151
  });
191
152
  }
192
- function N(e, t, n) {
193
- return new Promise((r) => {
194
- let i = A(e, t, n), a = k(e, t, n), o = {
195
- score: a.score,
196
- empty: !t || u(t),
197
- traceLog: i
153
+ function y(e, n, r) {
154
+ return new Promise((i) => {
155
+ let a = g(e, n, r), o = h(e, n, r), s = {
156
+ score: o.score,
157
+ empty: !n || t(n),
158
+ traceLog: a
198
159
  };
199
- n.extraProps && n.extraProps.correctResponseEnabled && (o.extraProps = { correctResponse: a.correctResponses }), r(o);
160
+ r.extraProps && r.extraProps.correctResponseEnabled && (s.extraProps = { correctResponse: o.correctResponses }), i(s);
200
161
  });
201
162
  }
202
- var P = (e, t) => new Promise((n) => {
163
+ var b = (e, t) => new Promise((n) => {
203
164
  if (t.mode !== "evaluate" && t.role === "instructor") {
204
165
  let { correctAnswer: r } = e, i = r && r.data;
205
166
  if (t.mode === "gather") {
@@ -214,20 +175,20 @@ var P = (e, t) => new Promise((n) => {
214
175
  id: "1"
215
176
  });
216
177
  } else return n(null);
217
- }), F = (e) => (e || "").replaceAll(/<[^>]*>/g, ""), I = (e) => (e || "").replace(/(<(?!img|iframe|source)([^>]+)>)/gi, ""), L = (e = {}, t = {}) => {
218
- let { correctAnswer: n, data: r } = e || {}, { data: i } = n || {}, a = i || [], o = {}, s = {}, c = {};
178
+ }), x = (e) => (e || "").replaceAll(/<[^>]*>/g, ""), S = (e) => (e || "").replace(/(<(?!img|iframe|source)([^>]+)>)/gi, ""), C = (e = {}, i = {}) => {
179
+ let { correctAnswer: a, data: o } = e || {}, { data: s } = a || {}, c = s || [], l = {}, u = {}, d = {};
219
180
  return [
220
181
  "teacherInstructions",
221
182
  "prompt",
222
183
  "rationale"
223
- ].forEach((n) => {
224
- t[n]?.required && !I(e[n]) && (o[n] = "This field is required.");
225
- }), a.forEach((e, t) => {
184
+ ].forEach((t) => {
185
+ i[t]?.required && !S(e[t]) && (l[t] = "This field is required.");
186
+ }), c.forEach((e, t) => {
226
187
  let { label: n } = e;
227
- F(n) ? a.some((e, r) => e.label === n && t !== r) && (c[t] = "Category names should be unique. ") : c[t] = "Content should not be empty. ";
228
- }), a.length < 1 || a.length > 20 ? s.categoriesError = "The correct answer should include between 1 and 20 categories." : l(r.map((e) => v(e, "value", "label")), i.map((e) => v(e, "value", "label"))) && (s.identicalError = "Correct answer should not be identical to the chart’s initial state"), u(c) || (o.categoryErrors = c), u(s) || (o.correctAnswerErrors = s), o;
188
+ x(n) ? c.some((e, r) => e.label === n && t !== r) && (d[t] = "Category names should be unique. ") : d[t] = "Content should not be empty. ";
189
+ }), c.length < 1 || c.length > 20 ? u.categoriesError = "The correct answer should include between 1 and 20 categories." : r(o.map((e) => n(e, "value", "label")), s.map((e) => n(e, "value", "label"))) && (u.identicalError = "Correct answer should not be identical to the chart’s initial state"), t(d) || (l.categoryErrors = d), t(u) || (l.correctAnswerErrors = u), l;
229
190
  };
230
191
  //#endregion
231
- export { E as checkLabelsEquality, P as createCorrectResponseSession, j as filterCategories, A as getLogTrace, k as getScore, M as model, O as normalize, N as outcome, D as setCorrectness, L as validate };
192
+ export { f as checkLabelsEquality, b as createCorrectResponseSession, _ as filterCategories, g as getLogTrace, h as getScore, v as model, m as normalize, y as outcome, p as setCorrectness, C as validate };
232
193
 
233
194
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../../../node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseHasIn.js","../../../../../../node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_hasPath.js","../../../../../../node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/hasIn.js","../../../../../../node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_basePickBy.js","../../../../../../node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_basePick.js","../../../../../../node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/pick.js","../../../src/controller/defaults.ts","../../../../../shared/controller-utils/dist/index.js","../../../src/controller/index.ts"],"sourcesContent":["/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\nexport default baseHasIn;\n","import castPath from './_castPath.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isIndex from './_isIndex.js';\nimport isLength from './isLength.js';\nimport toKey from './_toKey.js';\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n}\n\nexport default hasPath;\n","import baseHasIn from './_baseHasIn.js';\nimport hasPath from './_hasPath.js';\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n}\n\nexport default hasIn;\n","import baseGet from './_baseGet.js';\nimport baseSet from './_baseSet.js';\nimport castPath from './_castPath.js';\n\n/**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\nfunction basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n}\n\nexport default basePickBy;\n","import basePickBy from './_basePickBy.js';\nimport hasIn from './hasIn.js';\n\n/**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\nfunction basePick(object, paths) {\n return basePickBy(object, paths, function(value, path) {\n return hasIn(object, path);\n });\n}\n\nexport default basePick;\n","import basePick from './_basePick.js';\nimport flatRest from './_flatRest.js';\n\n/**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\nvar pick = flatRest(function(object, paths) {\n return object == null ? {} : basePick(object, paths);\n});\n\nexport default pick;\n","// @ts-nocheck\n/**\n * @synced-from pie-elements/packages/charting/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\n/**\n * NOTE: There's no functionality described for graphTitle,\n * rationale, scoringType, studentInstructions, teacherInstructions\n * so there's no implementation (they are only added in model)\n */\n\nexport default {\n addCategoryEnabled: true,\n changeAddCategoryEnabled: false,\n changeEditableEnabled: false,\n changeInteractiveEnabled: false,\n chartType: 'lineCross',\n correctAnswer: {},\n data: [],\n domain: {},\n graph: { width: 480, height: 480 },\n prompt: '',\n promptEnabled: true,\n range: { label: '', max: 1, min: 0, labelStep: 1 },\n rationale: '',\n rationaleEnabled: true,\n scoringType: 'all or nothing',\n studentInstructionsEnabled: true,\n studentNewCategoryDefaultLabel: 'New Category',\n teacherInstructions: '',\n teacherInstructionsEnabled: true,\n title: '',\n};\n","//#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/charting/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, isEqual, pick } from 'lodash-es';\nimport defaults from './defaults.js';\n\nimport { partialScoring } from '@pie-element/shared-controller-utils';\n\nconst log = debug('@pie-element:graphing:controller');\n\nconst lowerCase = (string) => (string || '').toLowerCase();\n\nexport const checkLabelsEquality = (givenAnswerLabel, correctAnswerLabel) =>\n lowerCase(givenAnswerLabel) === lowerCase(correctAnswerLabel);\n\nexport const setCorrectness = (answers, partialScoring) =>\n answers\n ? answers.map((answer) => ({\n ...answer,\n correctness: {\n value: partialScoring ? 'incorrect' : 'correct',\n label: partialScoring ? 'incorrect' : 'correct',\n },\n }))\n : [];\n\nexport const normalize = (question) => ({ ...defaults, ...question });\n\nexport const getScore = (question, session, env = {}) => {\n const { correctAnswer, data: initialData = [], scoringType } = question;\n let correctResponses = [];\n\n const isPartialScoring = partialScoring.enabled(\n { partialScoring: scoringType !== undefined ? scoringType === 'partial scoring' : scoringType },\n env,\n );\n\n const { data: correctAnswers = [] } = correctAnswer || {};\n const defaultAnswers = filterCategories(initialData);\n\n let answers = setCorrectness((session && session.answer) || defaultAnswers, isPartialScoring);\n\n let result = 0;\n\n if (isPartialScoring) {\n // if score type is \"partial scoring\"\n // maxScore is calculated based on the correct response\n // score is calculated based on the given response\n let maxScore = 0;\n let score = 0;\n\n const scoreForLabelAndValueEditable = (answer, corrAnswer) => {\n const { value, label, index } = answer;\n const valueIsCorrect = value === corrAnswer.value;\n const labelIsCorrect = checkLabelsEquality(label, corrAnswer.label);\n maxScore += 2;\n\n if (valueIsCorrect) {\n score += 1;\n answer.correctness.value = 'correct';\n }\n\n if (labelIsCorrect) {\n score += 1;\n answer.correctness.label = 'correct';\n }\n\n if (valueIsCorrect && labelIsCorrect) {\n correctResponses.push({ label: label, index: index });\n }\n };\n\n // if given answer has more categories than the correct answers, the \"extra\" will be ignored\n correctAnswers.forEach((corrAnswer, index) => {\n const defaultAnswer = defaultAnswers[index];\n const answer = answers[index];\n\n // if there is a corresponding category at the same position in the given answer\n if (answer) {\n // if there is a corresponding category at the same position in the default answer\n if (defaultAnswer) {\n // if category's label (in default answer) was not editable\n // it means that this category values only one point (only the value can be changed)\n if (!defaultAnswer.editable && answer.interactive) {\n maxScore += 1;\n\n if (answer.value === corrAnswer.value) {\n score += 1;\n answer.correctness.value = 'correct';\n correctResponses.push({ label: answer.label, index: index });\n }\n answer.correctness.label = 'correct';\n\n // if category's label (in default answer) was editable\n // it means that this category values 2 points (both label and value can be changed)\n } else if (defaultAnswer.editable && answer.interactive) {\n scoreForLabelAndValueEditable(answer, corrAnswer);\n } else if (!answer.interactive) {\n answer.correctness.value = 'correct';\n answer.correctness.label = 'correct';\n correctResponses.push({ label: answer.label, index: index });\n }\n } else {\n // if there is not a corresponding category at the same position in the default answer\n scoreForLabelAndValueEditable(answer, corrAnswer);\n }\n } else {\n // if there is not a corresponding category at the same position in the given answer\n // it means that the given answer has less categories than the correct answer\n maxScore += 2;\n }\n });\n\n result = maxScore ? score / maxScore : 0;\n } else {\n // all-or-nothing scoring: overall score is 1 only if lengths and all values/labels match\n result = correctAnswers.length === answers.length ? 1 : 0;\n\n // regardless of overall result, mark each answer individually for user feedback\n answers = answers.map((answer, index) => {\n const correctAnswer = correctAnswers[index];\n const valueIsCorrect = correctAnswer ? answer.value === correctAnswer.value : false;\n const labelIsCorrect = correctAnswer ? lowerCase(answer.label) === lowerCase(correctAnswer.label) : false;\n\n if (!valueIsCorrect || !labelIsCorrect) {\n result = 0;\n }\n\n if (valueIsCorrect && labelIsCorrect) {\n correctResponses.push({ label: answer.label, index });\n }\n\n return {\n ...answer,\n correctness: {\n value: valueIsCorrect ? 'correct' : 'incorrect',\n label: labelIsCorrect ? 'correct' : 'incorrect',\n },\n };\n });\n }\n\n const score = {\n score: parseFloat(result.toFixed(2)),\n answers,\n };\n\n if (env.extraProps && env.extraProps.correctResponseEnabled) {\n score.correctResponses = correctResponses;\n }\n\n return score;\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\n const { correctAnswer, data: initialData = [], scoringType } = model || {};\n const { data: correctAnswers = [] } = correctAnswer || {};\n const studentAnswers = (session && session.answer) || [];\n\n const isPartialScoring = partialScoring.enabled(\n { partialScoring: scoringType !== undefined ? scoringType === 'partial scoring' : scoringType },\n env\n );\n\n const defaultAnswers = filterCategories(initialData);\n const answers = studentAnswers.length > 0 ? filterCategories(studentAnswers) : defaultAnswers;\n\n if (!studentAnswers.length) {\n traceLog.push(`Student did not modify the chart. Initial chart is scored.`);\n }\n\n correctAnswers.forEach((correct, index) => {\n const initial = defaultAnswers[index];\n const student = answers[index];\n\n if (!student) {\n traceLog.push(`Category ${index + 1}: missing (expected value '${correct.value}', label '${correct.label}').`);\n return;\n }\n\n const valueCorrect = student.value === correct.value;\n const labelCorrect = checkLabelsEquality(student.label, correct.label);\n\n if (!student.interactive) {\n traceLog.push(`Category ${index + 1}: non-interactive category treated as correct.`);\n return;\n }\n\n if (studentAnswers.length > 0) {\n const valueChanged = initial ? student.value !== initial.value : true;\n const labelChanged = initial ? !checkLabelsEquality(student.label, initial.label) : true;\n\n if (!valueChanged && !labelChanged) {\n if (valueCorrect && labelCorrect) {\n traceLog.push(`Category ${index + 1}: unchanged from initial value and correct.`);\n } else {\n traceLog.push(`Category ${index + 1}: unchanged from initial value but incorrect.`);\n }\n return;\n }\n\n const parts = [];\n if (valueChanged) {\n parts.push(`value ${valueCorrect ? 'correct' : 'incorrect'}`);\n }\n if (labelChanged) {\n parts.push(`label ${labelCorrect ? 'correct' : 'incorrect'}`);\n }\n traceLog.push(`Category ${index + 1}: modified - ${parts.join(', ')}.`);\n } else {\n if (valueCorrect && labelCorrect) {\n traceLog.push(`Category ${index + 1}: initial values are correct.`);\n } else if (valueCorrect) {\n traceLog.push(`Category ${index + 1}: initial value correct, label incorrect.`);\n } else if (labelCorrect) {\n traceLog.push(`Category ${index + 1}: initial value incorrect, label correct.`);\n } else {\n traceLog.push(`Category ${index + 1}: initial value and label incorrect.`);\n }\n }\n });\n\n if (answers.length > correctAnswers.length) {\n const extra = answers.length - correctAnswers.length;\n traceLog.push(`${extra} extra category(ies) provided beyond expected number.`);\n }\n\n if (isPartialScoring) {\n traceLog.push('Score calculated using partial scoring.');\n traceLog.push('Student receives credit for each correct value and label independently.');\n } else {\n traceLog.push('Score calculated using all-or-nothing scoring.');\n traceLog.push('Student must match all category values and labels exactly for full credit.');\n }\n\n const scoreObject = getScore(model, session, env);\n traceLog.push(`Score: ${scoreObject.score}.`);\n\n return traceLog;\n};\n\n\n// eslint-disable-next-line no-unused-vars\nexport const filterCategories = (categories) => (categories ? categories.map(({ deletable, ...rest }) => rest) : []);\n\nexport function model(question, session, env) {\n return new Promise((resolve) => {\n const normalizedQuestion = normalize(question);\n const {\n addCategoryEnabled,\n chartType,\n data,\n domain,\n graph,\n prompt,\n promptEnabled,\n range,\n rationale,\n title,\n rationaleEnabled,\n teacherInstructions,\n teacherInstructionsEnabled,\n correctAnswer,\n scoringType,\n studentNewCategoryDefaultLabel,\n language,\n extraCSSRules,\n } = normalizedQuestion;\n\n const correctInfo = { correctness: 'incorrect', score: '0%' };\n\n const base = {\n addCategoryEnabled,\n chartType,\n data: filterCategories(data),\n domain,\n graph,\n prompt: promptEnabled ? prompt : null,\n range,\n rationale,\n title,\n size: graph,\n showToggle: false,\n correctness: correctInfo,\n disabled: env.mode !== 'gather',\n scoringType,\n studentNewCategoryDefaultLabel,\n language,\n env,\n extraCSSRules,\n };\n\n const scoreObject = getScore(normalizedQuestion, session, env);\n const answers = filterCategories(scoreObject.answers);\n\n if (env.mode === 'view') {\n // eslint-disable-next-line no-unused-vars\n base.correctedAnswer = answers.map(({ correctness, ...rest }) => {\n return { ...rest, interactive: false };\n });\n\n base.addCategoryEnabled = false;\n }\n\n if (env.mode === 'evaluate') {\n base.correctedAnswer = answers;\n base.correctAnswer = correctAnswer;\n base.showToggle = !!correctAnswer?.data?.length && scoreObject.score !== 1;\n base.addCategoryEnabled = false;\n base.showKeyLegend = true;\n }\n\n if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {\n base.rationale = rationaleEnabled ? rationale : null;\n base.teacherInstructions = teacherInstructionsEnabled ? teacherInstructions : null;\n } else {\n base.rationale = null;\n base.teacherInstructions = null;\n }\n\n log('base: ', base);\n resolve(base);\n });\n}\n\nexport function outcome(model, session, env) {\n return new Promise((resolve) => {\n const traceLog = getLogTrace(model, session, env);\n const scoreObject = getScore(model, session, env);\n \n const result = {\n score: scoreObject.score,\n empty: !session || isEmpty(session),\n traceLog\n };\n \n if (env.extraProps && env.extraProps.correctResponseEnabled) {\n result.extraProps = { correctResponse: scoreObject.correctResponses };\n }\n \n resolve(result);\n });\n}\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const { correctAnswer } = question;\n\n let answers = correctAnswer && correctAnswer.data;\n\n // for IBX preview mode\n if (env.mode === 'gather') {\n const { data } = question;\n\n answers = ((correctAnswer && correctAnswer.data) || []).map((answer, index) => {\n return {\n ...data[index],\n ...answer,\n };\n });\n }\n\n resolve({\n answer: answers,\n id: '1',\n });\n } else {\n return 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 { correctAnswer, data } = model || {};\n const { data: correctData } = correctAnswer || {};\n const categories = correctData || [];\n\n const errors = {};\n const correctAnswerErrors = {};\n const categoryErrors = {};\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 categories.forEach((category, index) => {\n const { label } = category;\n\n if (!getInnerText(label)) {\n categoryErrors[index] = 'Content should not be empty. ';\n } else {\n const identicalAnswer = categories.some((c, i) => c.label === label && index !== i);\n\n if (identicalAnswer) {\n categoryErrors[index] = 'Category names should be unique. ';\n }\n }\n });\n\n if (categories.length < 1 || categories.length > 20) {\n correctAnswerErrors.categoriesError = 'The correct answer should include between 1 and 20 categories.';\n } else if (\n isEqual(\n data.map((category) => pick(category, 'value', 'label')),\n correctData.map((category) => pick(category, 'value', 'label')),\n )\n ) {\n correctAnswerErrors.identicalError = 'Correct answer should not be identical to the chart’s initial state';\n }\n\n if (!isEmpty(categoryErrors)) {\n errors.categoryErrors = categoryErrors;\n }\n\n if (!isEmpty(correctAnswerErrors)) {\n errors.correctAnswerErrors = correctAnswerErrors;\n }\n\n return errors;\n};\n"],"x_google_ignoreList":[0,1,2,3,4,5],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/controller/defaults.ts","../../../../../shared/controller-utils/dist/index.js","../../../src/controller/index.ts"],"sourcesContent":["// @ts-nocheck\n/**\n * @synced-from pie-elements/packages/charting/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\n/**\n * NOTE: There's no functionality described for graphTitle,\n * rationale, scoringType, studentInstructions, teacherInstructions\n * so there's no implementation (they are only added in model)\n */\n\nexport default {\n addCategoryEnabled: true,\n changeAddCategoryEnabled: false,\n changeEditableEnabled: false,\n changeInteractiveEnabled: false,\n chartType: 'lineCross',\n correctAnswer: {},\n data: [],\n domain: {},\n graph: { width: 480, height: 480 },\n prompt: '',\n promptEnabled: true,\n range: { label: '', max: 1, min: 0, labelStep: 1 },\n rationale: '',\n rationaleEnabled: true,\n scoringType: 'all or nothing',\n studentInstructionsEnabled: true,\n studentNewCategoryDefaultLabel: 'New Category',\n teacherInstructions: '',\n teacherInstructionsEnabled: true,\n title: '',\n};\n","//#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/charting/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, isEqual, pick } from '@pie-element/shared-lodash';\nimport defaults from './defaults.js';\n\nimport { partialScoring } from '@pie-element/shared-controller-utils';\n\nconst log = debug('@pie-element:graphing:controller');\n\nconst lowerCase = (string) => (string || '').toLowerCase();\n\nexport const checkLabelsEquality = (givenAnswerLabel, correctAnswerLabel) =>\n lowerCase(givenAnswerLabel) === lowerCase(correctAnswerLabel);\n\nexport const setCorrectness = (answers, partialScoring) =>\n answers\n ? answers.map((answer) => ({\n ...answer,\n correctness: {\n value: partialScoring ? 'incorrect' : 'correct',\n label: partialScoring ? 'incorrect' : 'correct',\n },\n }))\n : [];\n\nexport const normalize = (question) => ({ ...defaults, ...question });\n\nexport const getScore = (question, session, env = {}) => {\n const { correctAnswer, data: initialData = [], scoringType } = question;\n let correctResponses = [];\n\n const isPartialScoring = partialScoring.enabled(\n { partialScoring: scoringType !== undefined ? scoringType === 'partial scoring' : scoringType },\n env,\n );\n\n const { data: correctAnswers = [] } = correctAnswer || {};\n const defaultAnswers = filterCategories(initialData);\n\n let answers = setCorrectness((session && session.answer) || defaultAnswers, isPartialScoring);\n\n let result = 0;\n\n if (isPartialScoring) {\n // if score type is \"partial scoring\"\n // maxScore is calculated based on the correct response\n // score is calculated based on the given response\n let maxScore = 0;\n let score = 0;\n\n const scoreForLabelAndValueEditable = (answer, corrAnswer) => {\n const { value, label, index } = answer;\n const valueIsCorrect = value === corrAnswer.value;\n const labelIsCorrect = checkLabelsEquality(label, corrAnswer.label);\n maxScore += 2;\n\n if (valueIsCorrect) {\n score += 1;\n answer.correctness.value = 'correct';\n }\n\n if (labelIsCorrect) {\n score += 1;\n answer.correctness.label = 'correct';\n }\n\n if (valueIsCorrect && labelIsCorrect) {\n correctResponses.push({ label: label, index: index });\n }\n };\n\n // if given answer has more categories than the correct answers, the \"extra\" will be ignored\n correctAnswers.forEach((corrAnswer, index) => {\n const defaultAnswer = defaultAnswers[index];\n const answer = answers[index];\n\n // if there is a corresponding category at the same position in the given answer\n if (answer) {\n // if there is a corresponding category at the same position in the default answer\n if (defaultAnswer) {\n // if category's label (in default answer) was not editable\n // it means that this category values only one point (only the value can be changed)\n if (!defaultAnswer.editable && answer.interactive) {\n maxScore += 1;\n\n if (answer.value === corrAnswer.value) {\n score += 1;\n answer.correctness.value = 'correct';\n correctResponses.push({ label: answer.label, index: index });\n }\n answer.correctness.label = 'correct';\n\n // if category's label (in default answer) was editable\n // it means that this category values 2 points (both label and value can be changed)\n } else if (defaultAnswer.editable && answer.interactive) {\n scoreForLabelAndValueEditable(answer, corrAnswer);\n } else if (!answer.interactive) {\n answer.correctness.value = 'correct';\n answer.correctness.label = 'correct';\n correctResponses.push({ label: answer.label, index: index });\n }\n } else {\n // if there is not a corresponding category at the same position in the default answer\n scoreForLabelAndValueEditable(answer, corrAnswer);\n }\n } else {\n // if there is not a corresponding category at the same position in the given answer\n // it means that the given answer has less categories than the correct answer\n maxScore += 2;\n }\n });\n\n result = maxScore ? score / maxScore : 0;\n } else {\n // all-or-nothing scoring: overall score is 1 only if lengths and all values/labels match\n result = correctAnswers.length === answers.length ? 1 : 0;\n\n // regardless of overall result, mark each answer individually for user feedback\n answers = answers.map((answer, index) => {\n const correctAnswer = correctAnswers[index];\n const valueIsCorrect = correctAnswer ? answer.value === correctAnswer.value : false;\n const labelIsCorrect = correctAnswer ? lowerCase(answer.label) === lowerCase(correctAnswer.label) : false;\n\n if (!valueIsCorrect || !labelIsCorrect) {\n result = 0;\n }\n\n if (valueIsCorrect && labelIsCorrect) {\n correctResponses.push({ label: answer.label, index });\n }\n\n return {\n ...answer,\n correctness: {\n value: valueIsCorrect ? 'correct' : 'incorrect',\n label: labelIsCorrect ? 'correct' : 'incorrect',\n },\n };\n });\n }\n\n const score = {\n score: parseFloat(result.toFixed(2)),\n answers,\n };\n\n if (env.extraProps && env.extraProps.correctResponseEnabled) {\n score.correctResponses = correctResponses;\n }\n\n return score;\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\n const { correctAnswer, data: initialData = [], scoringType } = model || {};\n const { data: correctAnswers = [] } = correctAnswer || {};\n const studentAnswers = (session && session.answer) || [];\n\n const isPartialScoring = partialScoring.enabled(\n { partialScoring: scoringType !== undefined ? scoringType === 'partial scoring' : scoringType },\n env\n );\n\n const defaultAnswers = filterCategories(initialData);\n const answers = studentAnswers.length > 0 ? filterCategories(studentAnswers) : defaultAnswers;\n\n if (!studentAnswers.length) {\n traceLog.push(`Student did not modify the chart. Initial chart is scored.`);\n }\n\n correctAnswers.forEach((correct, index) => {\n const initial = defaultAnswers[index];\n const student = answers[index];\n\n if (!student) {\n traceLog.push(`Category ${index + 1}: missing (expected value '${correct.value}', label '${correct.label}').`);\n return;\n }\n\n const valueCorrect = student.value === correct.value;\n const labelCorrect = checkLabelsEquality(student.label, correct.label);\n\n if (!student.interactive) {\n traceLog.push(`Category ${index + 1}: non-interactive category treated as correct.`);\n return;\n }\n\n if (studentAnswers.length > 0) {\n const valueChanged = initial ? student.value !== initial.value : true;\n const labelChanged = initial ? !checkLabelsEquality(student.label, initial.label) : true;\n\n if (!valueChanged && !labelChanged) {\n if (valueCorrect && labelCorrect) {\n traceLog.push(`Category ${index + 1}: unchanged from initial value and correct.`);\n } else {\n traceLog.push(`Category ${index + 1}: unchanged from initial value but incorrect.`);\n }\n return;\n }\n\n const parts = [];\n if (valueChanged) {\n parts.push(`value ${valueCorrect ? 'correct' : 'incorrect'}`);\n }\n if (labelChanged) {\n parts.push(`label ${labelCorrect ? 'correct' : 'incorrect'}`);\n }\n traceLog.push(`Category ${index + 1}: modified - ${parts.join(', ')}.`);\n } else {\n if (valueCorrect && labelCorrect) {\n traceLog.push(`Category ${index + 1}: initial values are correct.`);\n } else if (valueCorrect) {\n traceLog.push(`Category ${index + 1}: initial value correct, label incorrect.`);\n } else if (labelCorrect) {\n traceLog.push(`Category ${index + 1}: initial value incorrect, label correct.`);\n } else {\n traceLog.push(`Category ${index + 1}: initial value and label incorrect.`);\n }\n }\n });\n\n if (answers.length > correctAnswers.length) {\n const extra = answers.length - correctAnswers.length;\n traceLog.push(`${extra} extra category(ies) provided beyond expected number.`);\n }\n\n if (isPartialScoring) {\n traceLog.push('Score calculated using partial scoring.');\n traceLog.push('Student receives credit for each correct value and label independently.');\n } else {\n traceLog.push('Score calculated using all-or-nothing scoring.');\n traceLog.push('Student must match all category values and labels exactly for full credit.');\n }\n\n const scoreObject = getScore(model, session, env);\n traceLog.push(`Score: ${scoreObject.score}.`);\n\n return traceLog;\n};\n\n\n// eslint-disable-next-line no-unused-vars\nexport const filterCategories = (categories) => (categories ? categories.map(({ deletable, ...rest }) => rest) : []);\n\nexport function model(question, session, env) {\n return new Promise((resolve) => {\n const normalizedQuestion = normalize(question);\n const {\n addCategoryEnabled,\n chartType,\n data,\n domain,\n graph,\n prompt,\n promptEnabled,\n range,\n rationale,\n title,\n rationaleEnabled,\n teacherInstructions,\n teacherInstructionsEnabled,\n correctAnswer,\n scoringType,\n studentNewCategoryDefaultLabel,\n language,\n extraCSSRules,\n } = normalizedQuestion;\n\n const correctInfo = { correctness: 'incorrect', score: '0%' };\n\n const base = {\n addCategoryEnabled,\n chartType,\n data: filterCategories(data),\n domain,\n graph,\n prompt: promptEnabled ? prompt : null,\n range,\n rationale,\n title,\n size: graph,\n showToggle: false,\n correctness: correctInfo,\n disabled: env.mode !== 'gather',\n scoringType,\n studentNewCategoryDefaultLabel,\n language,\n env,\n extraCSSRules,\n };\n\n const scoreObject = getScore(normalizedQuestion, session, env);\n const answers = filterCategories(scoreObject.answers);\n\n if (env.mode === 'view') {\n // eslint-disable-next-line no-unused-vars\n base.correctedAnswer = answers.map(({ correctness, ...rest }) => {\n return { ...rest, interactive: false };\n });\n\n base.addCategoryEnabled = false;\n }\n\n if (env.mode === 'evaluate') {\n base.correctedAnswer = answers;\n base.correctAnswer = correctAnswer;\n base.showToggle = !!correctAnswer?.data?.length && scoreObject.score !== 1;\n base.addCategoryEnabled = false;\n base.showKeyLegend = true;\n }\n\n if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {\n base.rationale = rationaleEnabled ? rationale : null;\n base.teacherInstructions = teacherInstructionsEnabled ? teacherInstructions : null;\n } else {\n base.rationale = null;\n base.teacherInstructions = null;\n }\n\n log('base: ', base);\n resolve(base);\n });\n}\n\nexport function outcome(model, session, env) {\n return new Promise((resolve) => {\n const traceLog = getLogTrace(model, session, env);\n const scoreObject = getScore(model, session, env);\n \n const result = {\n score: scoreObject.score,\n empty: !session || isEmpty(session),\n traceLog\n };\n \n if (env.extraProps && env.extraProps.correctResponseEnabled) {\n result.extraProps = { correctResponse: scoreObject.correctResponses };\n }\n \n resolve(result);\n });\n}\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const { correctAnswer } = question;\n\n let answers = correctAnswer && correctAnswer.data;\n\n // for IBX preview mode\n if (env.mode === 'gather') {\n const { data } = question;\n\n answers = ((correctAnswer && correctAnswer.data) || []).map((answer, index) => {\n return {\n ...data[index],\n ...answer,\n };\n });\n }\n\n resolve({\n answer: answers,\n id: '1',\n });\n } else {\n return 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 { correctAnswer, data } = model || {};\n const { data: correctData } = correctAnswer || {};\n const categories = correctData || [];\n\n const errors = {};\n const correctAnswerErrors = {};\n const categoryErrors = {};\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 categories.forEach((category, index) => {\n const { label } = category;\n\n if (!getInnerText(label)) {\n categoryErrors[index] = 'Content should not be empty. ';\n } else {\n const identicalAnswer = categories.some((c, i) => c.label === label && index !== i);\n\n if (identicalAnswer) {\n categoryErrors[index] = 'Category names should be unique. ';\n }\n }\n });\n\n if (categories.length < 1 || categories.length > 20) {\n correctAnswerErrors.categoriesError = 'The correct answer should include between 1 and 20 categories.';\n } else if (\n isEqual(\n data.map((category) => pick(category, 'value', 'label')),\n correctData.map((category) => pick(category, 'value', 'label')),\n )\n ) {\n correctAnswerErrors.identicalError = 'Correct answer should not be identical to the chart’s initial state';\n }\n\n if (!isEmpty(categoryErrors)) {\n errors.categoryErrors = categoryErrors;\n }\n\n if (!isEmpty(correctAnswerErrors)) {\n errors.correctAnswerErrors = correctAnswerErrors;\n }\n\n return errors;\n};\n"],"mappings":"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"}