@pie-element/hotspot 11.1.1-next.1 → 11.1.1-next.11

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 (339) hide show
  1. package/CHANGELOG.json +997 -0
  2. package/CHANGELOG.md +2210 -0
  3. package/LICENSE.md +5 -0
  4. package/README.md +1 -0
  5. package/configure/CHANGELOG.json +682 -0
  6. package/configure/CHANGELOG.md +1947 -0
  7. package/configure/lib/DeleteWidget.js +64 -0
  8. package/configure/lib/DeleteWidget.js.map +1 -0
  9. package/configure/lib/button.js +42 -0
  10. package/configure/lib/button.js.map +1 -0
  11. package/configure/lib/buttons/circle.js +33 -0
  12. package/configure/lib/buttons/circle.js.map +1 -0
  13. package/configure/lib/buttons/polygon.js +39 -0
  14. package/configure/lib/buttons/polygon.js.map +1 -0
  15. package/configure/lib/buttons/rectangle.js +39 -0
  16. package/configure/lib/buttons/rectangle.js.map +1 -0
  17. package/configure/lib/defaults.js +155 -0
  18. package/configure/lib/defaults.js.map +1 -0
  19. package/configure/lib/hotspot-circle.js +192 -0
  20. package/configure/lib/hotspot-circle.js.map +1 -0
  21. package/configure/lib/hotspot-container.js +320 -0
  22. package/configure/lib/hotspot-container.js.map +1 -0
  23. package/configure/lib/hotspot-drawable.js +519 -0
  24. package/configure/lib/hotspot-drawable.js.map +1 -0
  25. package/configure/lib/hotspot-palette.js +107 -0
  26. package/configure/lib/hotspot-palette.js.map +1 -0
  27. package/configure/lib/hotspot-polygon.js +293 -0
  28. package/configure/lib/hotspot-polygon.js.map +1 -0
  29. package/configure/lib/hotspot-rectangle.js +190 -0
  30. package/configure/lib/hotspot-rectangle.js.map +1 -0
  31. package/configure/lib/icons.js +7 -0
  32. package/configure/lib/icons.js.map +1 -0
  33. package/configure/lib/image-konva.js +66 -0
  34. package/configure/lib/image-konva.js.map +1 -0
  35. package/configure/lib/index.js +194 -0
  36. package/configure/lib/index.js.map +1 -0
  37. package/configure/lib/root.js +330 -0
  38. package/configure/lib/root.js.map +1 -0
  39. package/configure/lib/shapes/circle.js +84 -0
  40. package/configure/lib/shapes/circle.js.map +1 -0
  41. package/configure/lib/shapes/index.js +50 -0
  42. package/configure/lib/shapes/index.js.map +1 -0
  43. package/configure/lib/shapes/polygon.js +82 -0
  44. package/configure/lib/shapes/polygon.js.map +1 -0
  45. package/configure/lib/shapes/rectagle.js +84 -0
  46. package/configure/lib/shapes/rectagle.js.map +1 -0
  47. package/configure/lib/shapes/utils.js +21 -0
  48. package/configure/lib/shapes/utils.js.map +1 -0
  49. package/configure/lib/upload-control.js +41 -0
  50. package/configure/lib/upload-control.js.map +1 -0
  51. package/configure/lib/utils.js +185 -0
  52. package/configure/lib/utils.js.map +1 -0
  53. package/configure/package.json +26 -0
  54. package/configure/src/DeleteWidget.jsx +51 -0
  55. package/configure/src/__tests__/DeleteWidget.test.jsx +366 -0
  56. package/configure/src/__tests__/button.test.jsx +198 -0
  57. package/configure/src/__tests__/hotspot-circle.test.jsx +259 -0
  58. package/configure/src/__tests__/hotspot-container.test.js +366 -0
  59. package/configure/src/__tests__/hotspot-drawable.test.js +271 -0
  60. package/configure/src/__tests__/hotspot-palette.test.jsx +71 -0
  61. package/configure/src/__tests__/image-konva.test.jsx +226 -0
  62. package/configure/src/__tests__/index.test.js +329 -0
  63. package/configure/src/__tests__/root.test.js +400 -0
  64. package/configure/src/__tests__/utils.test.js +241 -0
  65. package/configure/src/button.jsx +35 -0
  66. package/configure/src/buttons/circle.jsx +18 -0
  67. package/configure/src/buttons/polygon.jsx +29 -0
  68. package/configure/src/buttons/rectangle.jsx +29 -0
  69. package/configure/src/defaults.js +109 -0
  70. package/configure/src/hotspot-circle.jsx +183 -0
  71. package/configure/src/hotspot-container.jsx +330 -0
  72. package/configure/src/hotspot-drawable.jsx +527 -0
  73. package/configure/src/hotspot-palette.jsx +90 -0
  74. package/configure/src/hotspot-polygon.jsx +294 -0
  75. package/configure/src/hotspot-rectangle.jsx +169 -0
  76. package/configure/src/icons.js +5 -0
  77. package/configure/src/image-konva.jsx +63 -0
  78. package/configure/src/index.js +208 -0
  79. package/configure/src/root.jsx +346 -0
  80. package/configure/src/shapes/circle.js +81 -0
  81. package/configure/src/shapes/index.js +4 -0
  82. package/configure/src/shapes/polygon.js +81 -0
  83. package/configure/src/shapes/rectagle.js +82 -0
  84. package/configure/src/shapes/utils.js +16 -0
  85. package/configure/src/upload-control.jsx +33 -0
  86. package/configure/src/utils.js +210 -0
  87. package/controller/CHANGELOG.json +362 -0
  88. package/controller/CHANGELOG.md +1300 -0
  89. package/controller/lib/defaults.js +33 -0
  90. package/controller/lib/defaults.js.map +1 -0
  91. package/controller/lib/index.js +341 -0
  92. package/controller/lib/index.js.map +1 -0
  93. package/controller/lib/utils.js +32 -0
  94. package/controller/lib/utils.js.map +1 -0
  95. package/controller/package.json +18 -0
  96. package/controller/src/__tests__/index.test.js +419 -0
  97. package/controller/src/__tests__/utils.test.js +5 -0
  98. package/controller/src/defaults.js +19 -0
  99. package/controller/src/index.js +328 -0
  100. package/controller/src/utils.js +29 -0
  101. package/docs/config-schema.json +2023 -0
  102. package/docs/config-schema.json.md +1495 -0
  103. package/docs/demo/config.js +8 -0
  104. package/docs/demo/generate.js +118 -0
  105. package/docs/demo/index.html +1 -0
  106. package/docs/demo/session.js +11 -0
  107. package/docs/pie-schema.json +1204 -0
  108. package/docs/pie-schema.json.md +851 -0
  109. package/lib/hotspot/circle.js +156 -0
  110. package/lib/hotspot/circle.js.map +1 -0
  111. package/lib/hotspot/container.js +206 -0
  112. package/lib/hotspot/container.js.map +1 -0
  113. package/lib/hotspot/icons.js +8 -0
  114. package/lib/hotspot/icons.js.map +1 -0
  115. package/lib/hotspot/image-konva-tooltip.js +86 -0
  116. package/lib/hotspot/image-konva-tooltip.js.map +1 -0
  117. package/lib/hotspot/index.js +163 -0
  118. package/lib/hotspot/index.js.map +1 -0
  119. package/lib/hotspot/polygon.js +203 -0
  120. package/lib/hotspot/polygon.js.map +1 -0
  121. package/lib/hotspot/rectangle.js +175 -0
  122. package/lib/hotspot/rectangle.js.map +1 -0
  123. package/lib/index.js +213 -0
  124. package/lib/index.js.map +1 -0
  125. package/lib/session-updater.js +42 -0
  126. package/lib/session-updater.js.map +1 -0
  127. package/package.json +19 -57
  128. package/src/__tests__/container.test.jsx +58 -0
  129. package/src/__tests__/index.test.js +123 -0
  130. package/src/__tests__/session-updater.test.jsx +69 -0
  131. package/src/hotspot/__tests__/circle.test.jsx +464 -0
  132. package/src/hotspot/__tests__/container.test.jsx +546 -0
  133. package/src/hotspot/__tests__/image-konva-tooltip.test.jsx +510 -0
  134. package/src/hotspot/__tests__/polygon.test.jsx +502 -0
  135. package/src/hotspot/__tests__/rectangle.test.jsx +418 -0
  136. package/src/hotspot/circle.jsx +152 -0
  137. package/src/hotspot/container.jsx +217 -0
  138. package/src/hotspot/icons.js +7 -0
  139. package/src/hotspot/image-konva-tooltip.jsx +76 -0
  140. package/src/hotspot/index.jsx +165 -0
  141. package/src/hotspot/polygon.jsx +195 -0
  142. package/src/hotspot/rectangle.jsx +171 -0
  143. package/src/index.js +226 -0
  144. package/src/session-updater.js +29 -0
  145. package/dist/author/DeleteWidget.d.ts +0 -38
  146. package/dist/author/DeleteWidget.js +0 -46
  147. package/dist/author/button.d.ts +0 -31
  148. package/dist/author/button.js +0 -27
  149. package/dist/author/buttons/circle.d.ts +0 -18
  150. package/dist/author/buttons/circle.js +0 -25
  151. package/dist/author/buttons/polygon.d.ts +0 -18
  152. package/dist/author/buttons/polygon.js +0 -36
  153. package/dist/author/buttons/rectangle.d.ts +0 -18
  154. package/dist/author/buttons/rectangle.js +0 -36
  155. package/dist/author/defaults.d.ts +0 -157
  156. package/dist/author/defaults.js +0 -119
  157. package/dist/author/hotspot-circle.d.ts +0 -21
  158. package/dist/author/hotspot-circle.js +0 -124
  159. package/dist/author/hotspot-container.d.ts +0 -29
  160. package/dist/author/hotspot-container.js +0 -210
  161. package/dist/author/hotspot-drawable.d.ts +0 -31
  162. package/dist/author/hotspot-drawable.js +0 -312
  163. package/dist/author/hotspot-palette.d.ts +0 -14
  164. package/dist/author/hotspot-palette.js +0 -72
  165. package/dist/author/hotspot-polygon.d.ts +0 -38
  166. package/dist/author/hotspot-polygon.js +0 -200
  167. package/dist/author/hotspot-rectangle.d.ts +0 -20
  168. package/dist/author/hotspot-rectangle.js +0 -119
  169. package/dist/author/icons.d.ts +0 -9
  170. package/dist/author/icons.js +0 -4
  171. package/dist/author/image-konva.d.ts +0 -19
  172. package/dist/author/image-konva.js +0 -49
  173. package/dist/author/index.d.ts +0 -52
  174. package/dist/author/index.js +0 -143
  175. package/dist/author/root.d.ts +0 -15
  176. package/dist/author/root.js +0 -215
  177. package/dist/author/shapes/circle.d.ts +0 -18
  178. package/dist/author/shapes/circle.js +0 -47
  179. package/dist/author/shapes/index.d.ts +0 -12
  180. package/dist/author/shapes/polygon.d.ts +0 -19
  181. package/dist/author/shapes/polygon.js +0 -51
  182. package/dist/author/shapes/rectagle.d.ts +0 -18
  183. package/dist/author/shapes/rectagle.js +0 -57
  184. package/dist/author/shapes/utils.d.ts +0 -19
  185. package/dist/author/shapes/utils.js +0 -16
  186. package/dist/author/upload-control.d.ts +0 -29
  187. package/dist/author/upload-control.js +0 -28
  188. package/dist/author/utils.d.ts +0 -24
  189. package/dist/author/utils.js +0 -83
  190. package/dist/controller/defaults.d.ts +0 -35
  191. package/dist/controller/defaults.js +0 -29
  192. package/dist/controller/index.d.ts +0 -22
  193. package/dist/controller/index.js +0 -154
  194. package/dist/controller/utils.d.ts +0 -10
  195. package/dist/controller/utils.js +0 -13
  196. package/dist/delivery/hotspot/circle.d.ts +0 -19
  197. package/dist/delivery/hotspot/circle.js +0 -100
  198. package/dist/delivery/hotspot/container.d.ts +0 -16
  199. package/dist/delivery/hotspot/container.js +0 -150
  200. package/dist/delivery/hotspot/icons.d.ts +0 -10
  201. package/dist/delivery/hotspot/icons.js +0 -4
  202. package/dist/delivery/hotspot/image-konva-tooltip.d.ts +0 -19
  203. package/dist/delivery/hotspot/image-konva-tooltip.js +0 -66
  204. package/dist/delivery/hotspot/index.d.ts +0 -17
  205. package/dist/delivery/hotspot/index.js +0 -114
  206. package/dist/delivery/hotspot/polygon.d.ts +0 -21
  207. package/dist/delivery/hotspot/polygon.js +0 -108
  208. package/dist/delivery/hotspot/rectangle.d.ts +0 -19
  209. package/dist/delivery/hotspot/rectangle.js +0 -104
  210. package/dist/delivery/index.d.ts +0 -20
  211. package/dist/delivery/index.js +0 -107
  212. package/dist/delivery/session-updater.d.ts +0 -10
  213. package/dist/delivery/session-updater.js +0 -14
  214. package/dist/index.d.ts +0 -1
  215. package/dist/index.iife.d.ts +0 -8
  216. package/dist/index.iife.js +0 -169
  217. package/dist/index.js +0 -2
  218. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_DataView.js +0 -6
  219. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_Hash.js +0 -16
  220. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_ListCache.js +0 -16
  221. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_Map.js +0 -6
  222. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_MapCache.js +0 -16
  223. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_Promise.js +0 -6
  224. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_Set.js +0 -6
  225. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_SetCache.js +0 -11
  226. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_Stack.js +0 -14
  227. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_Symbol.js +0 -5
  228. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_Uint8Array.js +0 -5
  229. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_WeakMap.js +0 -6
  230. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_arrayEach.js +0 -7
  231. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_arrayFilter.js +0 -10
  232. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_arrayLikeKeys.js +0 -15
  233. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_arrayPush.js +0 -7
  234. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_arraySome.js +0 -7
  235. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_assignValue.js +0 -10
  236. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_assocIndexOf.js +0 -8
  237. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseAssign.js +0 -8
  238. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseAssignIn.js +0 -8
  239. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseAssignValue.js +0 -12
  240. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseClone.js +0 -57
  241. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseCreate.js +0 -14
  242. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseGetAllKeys.js +0 -9
  243. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseGetTag.js +0 -10
  244. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseIsArguments.js +0 -9
  245. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseIsEqual.js +0 -8
  246. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseIsEqualDeep.js +0 -30
  247. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseIsMap.js +0 -9
  248. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseIsNative.js +0 -11
  249. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseIsSet.js +0 -9
  250. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseIsTypedArray.js +0 -11
  251. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseKeys.js +0 -12
  252. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseKeysIn.js +0 -13
  253. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseTimes.js +0 -7
  254. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseUnary.js +0 -8
  255. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_cacheHas.js +0 -6
  256. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_cloneArrayBuffer.js +0 -8
  257. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_cloneBuffer.js +0 -10
  258. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_cloneDataView.js +0 -8
  259. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_cloneRegExp.js +0 -8
  260. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_cloneSymbol.js +0 -8
  261. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_cloneTypedArray.js +0 -8
  262. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_copyArray.js +0 -8
  263. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_copyObject.js +0 -14
  264. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_copySymbols.js +0 -8
  265. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_copySymbolsIn.js +0 -8
  266. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_coreJsData.js +0 -5
  267. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_defineProperty.js +0 -10
  268. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_equalArrays.js +0 -35
  269. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_equalByTag.js +0 -35
  270. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_equalObjects.js +0 -32
  271. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_freeGlobal.js +0 -4
  272. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getAllKeys.js +0 -9
  273. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getAllKeysIn.js +0 -9
  274. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getMapData.js +0 -8
  275. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getNative.js +0 -9
  276. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getPrototype.js +0 -5
  277. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getRawTag.js +0 -14
  278. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getSymbols.js +0 -10
  279. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getSymbolsIn.js +0 -11
  280. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getTag.js +0 -23
  281. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getValue.js +0 -6
  282. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_hashClear.js +0 -7
  283. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_hashDelete.js +0 -7
  284. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_hashGet.js +0 -13
  285. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_hashHas.js +0 -9
  286. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_hashSet.js +0 -9
  287. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_initCloneArray.js +0 -8
  288. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_initCloneByTag.js +0 -33
  289. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_initCloneObject.js +0 -9
  290. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_isIndex.js +0 -8
  291. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_isKeyable.js +0 -7
  292. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_isMasked.js +0 -11
  293. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_isPrototype.js +0 -8
  294. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_listCacheClear.js +0 -6
  295. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_listCacheDelete.js +0 -9
  296. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_listCacheGet.js +0 -8
  297. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_listCacheHas.js +0 -7
  298. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_listCacheSet.js +0 -8
  299. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheClear.js +0 -13
  300. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheDelete.js +0 -8
  301. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheGet.js +0 -7
  302. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheHas.js +0 -7
  303. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheSet.js +0 -8
  304. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_mapToArray.js +0 -9
  305. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_nativeCreate.js +0 -5
  306. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_nativeKeys.js +0 -5
  307. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_nativeKeysIn.js +0 -8
  308. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_nodeUtil.js +0 -9
  309. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_objectToString.js +0 -7
  310. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_overArg.js +0 -8
  311. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_root.js +0 -5
  312. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_setCacheAdd.js +0 -7
  313. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_setCacheHas.js +0 -6
  314. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_setToArray.js +0 -9
  315. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_stackClear.js +0 -7
  316. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_stackDelete.js +0 -7
  317. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_stackGet.js +0 -6
  318. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_stackHas.js +0 -6
  319. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_stackSet.js +0 -16
  320. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_toSource.js +0 -15
  321. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/cloneDeep.js +0 -8
  322. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/eq.js +0 -6
  323. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isArguments.js +0 -10
  324. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isArray.js +0 -4
  325. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isArrayLike.js +0 -8
  326. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isBuffer.js +0 -6
  327. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isEmpty.js +0 -21
  328. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isEqual.js +0 -7
  329. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isFunction.js +0 -11
  330. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isLength.js +0 -7
  331. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isMap.js +0 -7
  332. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isObject.js +0 -7
  333. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isObjectLike.js +0 -6
  334. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isSet.js +0 -7
  335. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isTypedArray.js +0 -7
  336. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/keys.js +0 -9
  337. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/keysIn.js +0 -9
  338. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/stubArray.js +0 -6
  339. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/stubFalse.js +0 -6
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _default = exports.default = {
8
+ dimensions: {
9
+ height: 0,
10
+ width: 0
11
+ },
12
+ hotspotColor: 'rgba(137, 183, 244, 0.25)',
13
+ hotspotList: ['rgba(137, 183, 244, 0.25)'],
14
+ imageUrl: '',
15
+ multipleCorrect: true,
16
+ outlineColor: 'blue',
17
+ outlineList: ['blue'],
18
+ partialScoring: false,
19
+ prompt: '',
20
+ promptEnabled: true,
21
+ rationaleEnabled: true,
22
+ shapes: {
23
+ rectangles: [],
24
+ polygons: [],
25
+ circles: []
26
+ },
27
+ strokeWidth: 5,
28
+ studentInstructionsEnabled: true,
29
+ teacherInstructions: '',
30
+ teacherInstructionsEnabled: true,
31
+ toolbarEditorPosition: 'bottom'
32
+ };
33
+ //# sourceMappingURL=defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.js","names":["dimensions","height","width","hotspotColor","hotspotList","imageUrl","multipleCorrect","outlineColor","outlineList","partialScoring","prompt","promptEnabled","rationaleEnabled","shapes","rectangles","polygons","circles","strokeWidth","studentInstructionsEnabled","teacherInstructions","teacherInstructionsEnabled","toolbarEditorPosition"],"sources":["../src/defaults.js"],"sourcesContent":["export 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"],"mappings":";;;;;;iCAAe;EACbA,UAAU,EAAE;IAAEC,MAAM,EAAE,CAAC;IAAEC,KAAK,EAAE;EAAE,CAAC;EACnCC,YAAY,EAAE,2BAA2B;EACzCC,WAAW,EAAE,CAAC,2BAA2B,CAAC;EAC1CC,QAAQ,EAAE,EAAE;EACZC,eAAe,EAAE,IAAI;EACrBC,YAAY,EAAE,MAAM;EACpBC,WAAW,EAAE,CAAC,MAAM,CAAC;EACrBC,cAAc,EAAE,KAAK;EACrBC,MAAM,EAAE,EAAE;EACVC,aAAa,EAAE,IAAI;EACnBC,gBAAgB,EAAE,IAAI;EACtBC,MAAM,EAAE;IAAEC,UAAU,EAAE,EAAE;IAAEC,QAAQ,EAAE,EAAE;IAAEC,OAAO,EAAE;EAAG,CAAC;EACrDC,WAAW,EAAE,CAAC;EACdC,0BAA0B,EAAE,IAAI;EAChCC,mBAAmB,EAAE,EAAE;EACvBC,0BAA0B,EAAE,IAAI;EAChCC,qBAAqB,EAAE;AACzB,CAAC","ignoreList":[]}
@@ -0,0 +1,341 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.getLogTrace = exports.createDefaultModel = exports.createCorrectResponseSession = void 0;
8
+ exports.model = model;
9
+ exports.normalize = void 0;
10
+ exports.outcome = outcome;
11
+ exports.validate = void 0;
12
+ var _debug = _interopRequireDefault(require("debug"));
13
+ var _lodashEs = require("lodash-es");
14
+ var _controllerUtils = require("@pie-lib/controller-utils");
15
+ var _utils = require("./utils");
16
+ var _defaults = _interopRequireDefault(require("./defaults"));
17
+ const log = (0, _debug.default)('pie-elements:hotspot:controller');
18
+ const normalize = question => ({
19
+ ..._defaults.default,
20
+ ...question
21
+ });
22
+ exports.normalize = normalize;
23
+ function model(question, session, env) {
24
+ const normalizedQuestion = normalize(question);
25
+ const {
26
+ imageUrl,
27
+ dimensions,
28
+ hotspotColor,
29
+ hoverOutlineColor,
30
+ selectedHotspotColor,
31
+ multipleCorrect,
32
+ outlineColor,
33
+ partialScoring,
34
+ prompt,
35
+ shapes,
36
+ language,
37
+ fontSizeFactor,
38
+ autoplayAudioEnabled,
39
+ completeAudioEnabled,
40
+ customAudioButton
41
+ } = normalizedQuestion;
42
+ const {
43
+ rectangles,
44
+ polygons,
45
+ circles
46
+ } = shapes || {};
47
+ const shouldIncludeCorrectResponse = env.mode === 'evaluate' || env.role === 'instructor' && env.mode === 'view';
48
+ return new Promise(resolve => {
49
+ const out = {
50
+ disabled: env.mode !== 'gather',
51
+ mode: env.mode,
52
+ dimensions,
53
+ imageUrl,
54
+ outlineColor,
55
+ hotspotColor,
56
+ hoverOutlineColor,
57
+ selectedHotspotColor,
58
+ multipleCorrect,
59
+ partialScoring,
60
+ language,
61
+ fontSizeFactor,
62
+ autoplayAudioEnabled,
63
+ completeAudioEnabled,
64
+ customAudioButton,
65
+ shapes: {
66
+ ...shapes,
67
+ // eslint-disable-next-line no-unused-vars
68
+ rectangles: (rectangles || []).map(({
69
+ index,
70
+ correct,
71
+ ...rectProps
72
+ }) => shouldIncludeCorrectResponse ? {
73
+ correct,
74
+ ...rectProps
75
+ } : {
76
+ ...rectProps
77
+ }),
78
+ // eslint-disable-next-line no-unused-vars
79
+ polygons: (polygons || []).map(({
80
+ index,
81
+ correct,
82
+ ...polyProps
83
+ }) => shouldIncludeCorrectResponse ? {
84
+ correct,
85
+ ...polyProps
86
+ } : {
87
+ ...polyProps
88
+ }),
89
+ // eslint-disable-next-line no-unused-vars
90
+ circles: (circles || []).map(({
91
+ index,
92
+ correct,
93
+ ...circleProps
94
+ }) => shouldIncludeCorrectResponse ? {
95
+ correct,
96
+ ...circleProps
97
+ } : {
98
+ ...circleProps
99
+ })
100
+ },
101
+ responseCorrect: env.mode === 'evaluate' ? (0, _utils.isResponseCorrect)(normalizedQuestion, session) : undefined,
102
+ extraCSSRules: normalizedQuestion.extraCSSRules
103
+ };
104
+ if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {
105
+ out.rationale = normalizedQuestion.rationaleEnabled ? normalizedQuestion.rationale : null;
106
+ out.teacherInstructions = normalizedQuestion.teacherInstructionsEnabled ? normalizedQuestion.teacherInstructions : null;
107
+ } else {
108
+ out.rationale = null;
109
+ out.teacherInstructions = null;
110
+ }
111
+ out.prompt = normalizedQuestion.promptEnabled ? prompt : null;
112
+ out.strokeWidth = normalizedQuestion.strokeWidth;
113
+ resolve(out);
114
+ });
115
+ }
116
+ const createDefaultModel = (model = {}) => new Promise(resolve => {
117
+ resolve({
118
+ ..._defaults.default,
119
+ ...model
120
+ });
121
+ });
122
+ exports.createDefaultModel = createDefaultModel;
123
+ const getScore = (config, session, env = {}) => {
124
+ const {
125
+ answers
126
+ } = session || {};
127
+ if (!config.shapes || !config.shapes.rectangles && !config.shapes.polygons && !config.shapes.circles) {
128
+ return 0;
129
+ }
130
+ const {
131
+ shapes: {
132
+ rectangles = [],
133
+ polygons = [],
134
+ circles = []
135
+ } = {}
136
+ } = config;
137
+ const partialScoringEnabled = _controllerUtils.partialScoring.enabled(config, env);
138
+ if (!partialScoringEnabled) {
139
+ return (0, _utils.isResponseCorrect)(config, session) ? 1 : 0;
140
+ }
141
+ let correctAnswers = 0;
142
+ let selectedChoices = 0;
143
+ const choices = [...rectangles, ...polygons, ...circles];
144
+ const correctChoices = choices.filter(choice => choice.correct);
145
+ choices.forEach(shape => {
146
+ const selected = answers && answers.filter(answer => answer.id === shape.id)[0];
147
+ const correctlySelected = shape.correct && selected;
148
+ if (selected) {
149
+ selectedChoices += 1;
150
+ }
151
+ if (correctlySelected) {
152
+ correctAnswers += 1;
153
+ }
154
+ });
155
+ const extraAnswers = selectedChoices > correctChoices.length ? selectedChoices - correctChoices.length : 0;
156
+ const total = correctChoices.length === 0 ? 1 : correctChoices.length;
157
+ const str = ((correctAnswers - extraAnswers) / total).toFixed(2);
158
+ return str < 0 ? 0 : parseFloat(str);
159
+ };
160
+
161
+ /**
162
+ * Generates detailed trace log for scoring evaluation
163
+ * @param {Object} model - the question model
164
+ * @param {Object} session - the student session
165
+ * @param {Object} env - the environment
166
+ * @returns {Array} traceLog - array of trace messages
167
+ */
168
+ const getLogTrace = (model, session, env) => {
169
+ const traceLog = [];
170
+ const {
171
+ answers
172
+ } = session || {};
173
+ const {
174
+ shapes
175
+ } = model || {};
176
+ const allShapes = [];
177
+ if (shapes) {
178
+ if (shapes.rectangles) allShapes.push(...shapes.rectangles);
179
+ if (shapes.polygons) allShapes.push(...shapes.polygons);
180
+ if (shapes.circles) allShapes.push(...shapes.circles);
181
+ }
182
+ const correctShapes = allShapes.filter(shape => shape.correct);
183
+ const totalShapes = allShapes.length;
184
+ traceLog.push(`Total of ${totalShapes} hotspot(s) defined, ${correctShapes.length} correct.`);
185
+ if (answers && answers.length > 0) {
186
+ traceLog.push(`Student selected ${answers.length} hotspot(s).`);
187
+ let correctSelections = 0;
188
+ let incorrectSelections = 0;
189
+ answers.forEach(answer => {
190
+ const shape = allShapes.find(s => s.id === answer.id);
191
+ if (shape && shape.correct) {
192
+ correctSelections++;
193
+ } else {
194
+ incorrectSelections++;
195
+ }
196
+ });
197
+ const missedCorrect = correctShapes.filter(correctShape => !answers.some(answer => answer.id === correctShape.id)).length;
198
+ if (correctSelections > 0) {
199
+ traceLog.push(`${correctSelections} correct hotspot(s) selected.`);
200
+ }
201
+ if (incorrectSelections > 0) {
202
+ traceLog.push(`${incorrectSelections} incorrect hotspot(s) selected.`);
203
+ }
204
+ if (missedCorrect > 0) {
205
+ traceLog.push(`${missedCorrect} correct hotspot(s) missed.`);
206
+ }
207
+ } else {
208
+ traceLog.push('No hotspots selected.');
209
+ }
210
+ const partialScoringEnabled = _controllerUtils.partialScoring.enabled(model, env);
211
+ if (partialScoringEnabled) {
212
+ traceLog.push(`Score calculated using partial scoring.`);
213
+ if (answers && answers.length > 0) {
214
+ let correctSelections = 0;
215
+ let incorrectSelections = 0;
216
+ answers.forEach(answer => {
217
+ const shape = allShapes.find(s => s.id === answer.id);
218
+ if (shape && shape.correct) {
219
+ correctSelections++;
220
+ } else {
221
+ incorrectSelections++;
222
+ }
223
+ });
224
+ const totalCorrectAvailable = correctShapes.length;
225
+ traceLog.push(`Partial scoring calculation: ${correctSelections} correct selections out of ${totalCorrectAvailable} available.`);
226
+ if (incorrectSelections > totalCorrectAvailable) {
227
+ const extraSelections = incorrectSelections - (totalCorrectAvailable - correctSelections);
228
+ traceLog.push(`${extraSelections} extra incorrect selection(s) beyond required amount are deducted from score.`);
229
+ }
230
+ }
231
+ } else {
232
+ traceLog.push(`Score calculated using all-or-nothing scoring.`);
233
+ }
234
+ const score = getScore(model, session, env);
235
+ traceLog.push(`Score: ${score}.`);
236
+ return traceLog;
237
+ };
238
+ exports.getLogTrace = getLogTrace;
239
+ function outcome(config, session, env = {}) {
240
+ return new Promise(resolve => {
241
+ log('outcome...');
242
+ if (!session || (0, _lodashEs.isEmpty)(session)) {
243
+ resolve({
244
+ score: 0,
245
+ empty: true,
246
+ traceLog: ['No hotspots selected. Score: 0.']
247
+ });
248
+ }
249
+ if (session.answers) {
250
+ const traceLog = getLogTrace(config, session, env);
251
+ const score = getScore(config, session, env);
252
+ resolve({
253
+ score,
254
+ empty: false,
255
+ traceLog
256
+ });
257
+ } else {
258
+ resolve({
259
+ score: 0,
260
+ empty: true,
261
+ traceLog: ['No hotspots selected. Score: 0.']
262
+ });
263
+ }
264
+ });
265
+ }
266
+ const returnShapesCorrect = shapes => {
267
+ let answers = [];
268
+ shapes.forEach(i => {
269
+ const {
270
+ correct,
271
+ id
272
+ } = i;
273
+ if (correct) {
274
+ answers.push({
275
+ id
276
+ });
277
+ }
278
+ });
279
+ return answers;
280
+ };
281
+ const createCorrectResponseSession = (question, env) => {
282
+ return new Promise(resolve => {
283
+ if (env.mode !== 'evaluate' && env.role === 'instructor') {
284
+ const {
285
+ shapes: {
286
+ rectangles = [],
287
+ circles = [],
288
+ polygons = {}
289
+ } = {}
290
+ } = question;
291
+ const rectangleCorrect = returnShapesCorrect(rectangles);
292
+ const polygonsCorrect = returnShapesCorrect(polygons);
293
+ const circlesCorrect = returnShapesCorrect(circles);
294
+ resolve({
295
+ answers: [...rectangleCorrect, ...polygonsCorrect, ...circlesCorrect],
296
+ id: '1'
297
+ });
298
+ } else {
299
+ resolve(null);
300
+ }
301
+ });
302
+ };
303
+
304
+ // remove all html tags
305
+ exports.createCorrectResponseSession = createCorrectResponseSession;
306
+ const getInnerText = html => (html || '').replaceAll(/<[^>]*>/g, '');
307
+
308
+ // remove all html tags except img, iframe and source tag for audio
309
+ const getContent = html => (html || '').replace(/(<(?!img|iframe|source)([^>]+)>)/gi, '');
310
+ const validate = (model = {}, config = {}) => {
311
+ const {
312
+ shapes
313
+ } = model;
314
+ const {
315
+ minShapes = 2,
316
+ maxShapes,
317
+ maxSelections
318
+ } = config;
319
+ const errors = {};
320
+ ['teacherInstructions', 'prompt', 'rationale'].forEach(field => {
321
+ if (config[field]?.required && !getContent(model[field])) {
322
+ errors[field] = 'This field is required.';
323
+ }
324
+ });
325
+ const allShapes = Object.values(shapes || {}).reduce((acc, shape) => [...acc, ...shape], []);
326
+ const nbOfSelections = (allShapes || []).reduce((acc, shape) => shape.correct ? acc + 1 : acc, 0);
327
+ const nbOfShapes = (allShapes || []).length;
328
+ if (nbOfShapes < minShapes) {
329
+ errors.shapes = `There should be at least ${minShapes} shapes defined.`;
330
+ } else if (nbOfShapes > maxShapes) {
331
+ errors.shapes = `No more than ${maxShapes} shapes should be defined.`;
332
+ }
333
+ if (nbOfSelections < 1) {
334
+ errors.selections = 'There should be at least 1 shape selected.';
335
+ } else if (nbOfSelections > maxSelections) {
336
+ errors.selections = `No more than ${maxSelections} shapes should be selected.`;
337
+ }
338
+ return errors;
339
+ };
340
+ exports.validate = validate;
341
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["_debug","_interopRequireDefault","require","_lodashEs","_controllerUtils","_utils","_defaults","log","debug","normalize","question","defaults","exports","model","session","env","normalizedQuestion","imageUrl","dimensions","hotspotColor","hoverOutlineColor","selectedHotspotColor","multipleCorrect","outlineColor","partialScoring","prompt","shapes","language","fontSizeFactor","autoplayAudioEnabled","completeAudioEnabled","customAudioButton","rectangles","polygons","circles","shouldIncludeCorrectResponse","mode","role","Promise","resolve","out","disabled","map","index","correct","rectProps","polyProps","circleProps","responseCorrect","isResponseCorrect","undefined","extraCSSRules","rationale","rationaleEnabled","teacherInstructions","teacherInstructionsEnabled","promptEnabled","strokeWidth","createDefaultModel","getScore","config","answers","partialScoringEnabled","enabled","correctAnswers","selectedChoices","choices","correctChoices","filter","choice","forEach","shape","selected","answer","id","correctlySelected","extraAnswers","length","total","str","toFixed","parseFloat","getLogTrace","traceLog","allShapes","push","correctShapes","totalShapes","correctSelections","incorrectSelections","find","s","missedCorrect","correctShape","some","totalCorrectAvailable","extraSelections","score","outcome","isEmpty","empty","returnShapesCorrect","i","createCorrectResponseSession","rectangleCorrect","polygonsCorrect","circlesCorrect","getInnerText","html","replaceAll","getContent","replace","validate","minShapes","maxShapes","maxSelections","errors","field","required","Object","values","reduce","acc","nbOfSelections","nbOfShapes","selections"],"sources":["../src/index.js"],"sourcesContent":["import debug from 'debug';\nimport { isEmpty } from 'lodash-es';\nimport { partialScoring } from '@pie-lib/controller-utils';\n\nimport { isResponseCorrect } from './utils';\n\nimport defaults from './defaults';\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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","ignoreList":[]}
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.isResponseCorrect = exports.getCorrectResponse = void 0;
7
+ var _lodashEs = require("lodash-es");
8
+ const getCorrectResponse = choices => choices.filter(c => c.correct).map(c => c.id).sort();
9
+ exports.getCorrectResponse = getCorrectResponse;
10
+ const isResponseCorrect = (question, session) => {
11
+ const {
12
+ shapes: {
13
+ rectangles = [],
14
+ polygons = [],
15
+ circles = []
16
+ }
17
+ } = question;
18
+ const choices = [...rectangles, ...polygons, ...circles];
19
+ let correctResponseIds = getCorrectResponse(choices);
20
+ if (!session || (0, _lodashEs.isEmpty)(session)) {
21
+ return false;
22
+ }
23
+ if (session.answers && session.answers.length) {
24
+ let answerIds = (session.answers || []).map(a => a.id);
25
+ return (0, _lodashEs.isEqual)(answerIds.sort(), correctResponseIds);
26
+ } else if (!(correctResponseIds && correctResponseIds.length)) {
27
+ return true;
28
+ }
29
+ return false;
30
+ };
31
+ exports.isResponseCorrect = isResponseCorrect;
32
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","names":["_lodashEs","require","getCorrectResponse","choices","filter","c","correct","map","id","sort","exports","isResponseCorrect","question","session","shapes","rectangles","polygons","circles","correctResponseIds","isEmpty","answers","length","answerIds","a","isEqual"],"sources":["../src/utils.js"],"sourcesContent":["import { 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"],"mappings":";;;;;;AAAA,IAAAA,SAAA,GAAAC,OAAA;AAEO,MAAMC,kBAAkB,GAAIC,OAAO,IACxCA,OAAO,CACJC,MAAM,CAAEC,CAAC,IAAKA,CAAC,CAACC,OAAO,CAAC,CACxBC,GAAG,CAAEF,CAAC,IAAKA,CAAC,CAACG,EAAE,CAAC,CAChBC,IAAI,CAAC,CAAC;AAACC,OAAA,CAAAR,kBAAA,GAAAA,kBAAA;AAEL,MAAMS,iBAAiB,GAAGA,CAACC,QAAQ,EAAEC,OAAO,KAAK;EACtD,MAAM;IACJC,MAAM,EAAE;MAAEC,UAAU,GAAG,EAAE;MAAEC,QAAQ,GAAG,EAAE;MAAEC,OAAO,GAAG;IAAG;EACzD,CAAC,GAAGL,QAAQ;EACZ,MAAMT,OAAO,GAAG,CAAC,GAAGY,UAAU,EAAE,GAAGC,QAAQ,EAAE,GAAGC,OAAO,CAAC;EACxD,IAAIC,kBAAkB,GAAGhB,kBAAkB,CAACC,OAAO,CAAC;EAEpD,IAAI,CAACU,OAAO,IAAI,IAAAM,iBAAO,EAACN,OAAO,CAAC,EAAE;IAChC,OAAO,KAAK;EACd;EAEA,IAAIA,OAAO,CAACO,OAAO,IAAIP,OAAO,CAACO,OAAO,CAACC,MAAM,EAAE;IAC7C,IAAIC,SAAS,GAAG,CAACT,OAAO,CAACO,OAAO,IAAI,EAAE,EAAEb,GAAG,CAAEgB,CAAC,IAAKA,CAAC,CAACf,EAAE,CAAC;IAExD,OAAO,IAAAgB,iBAAO,EAACF,SAAS,CAACb,IAAI,CAAC,CAAC,EAAES,kBAAkB,CAAC;EACtD,CAAC,MAAM,IAAI,EAAEA,kBAAkB,IAAIA,kBAAkB,CAACG,MAAM,CAAC,EAAE;IAC7D,OAAO,IAAI;EACb;EAEA,OAAO,KAAK;AACd,CAAC;AAACX,OAAA,CAAAC,iBAAA,GAAAA,iBAAA","ignoreList":[]}
@@ -0,0 +1,18 @@
1
+ {
2
+ "name": "@pie-element/hotspot-controller",
3
+ "private": true,
4
+ "version": "8.1.0",
5
+ "description": "",
6
+ "scripts": {
7
+ "test": "echo \"Error: no test specified\" && exit 1"
8
+ },
9
+ "author": "",
10
+ "license": "ISC",
11
+ "main": "lib/index.js",
12
+ "module": "src/index.js",
13
+ "dependencies": {
14
+ "@pie-lib/controller-utils": "2.0.2",
15
+ "debug": "^4.1.1",
16
+ "lodash-es": "^4.17.23"
17
+ }
18
+ }