@pie-element/hotspot 11.1.1-next.0 → 11.1.1-next.101

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 (340) 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 +198 -0
  36. package/configure/lib/index.js.map +1 -0
  37. package/configure/lib/root.js +331 -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 +213 -0
  79. package/configure/src/root.jsx +342 -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 +342 -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 +330 -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 +122 -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 +160 -0
  110. package/lib/hotspot/circle.js.map +1 -0
  111. package/lib/hotspot/container.js +291 -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 +174 -0
  118. package/lib/hotspot/index.js.map +1 -0
  119. package/lib/hotspot/polygon.js +207 -0
  120. package/lib/hotspot/polygon.js.map +1 -0
  121. package/lib/hotspot/rectangle.js +178 -0
  122. package/lib/hotspot/rectangle.js.map +1 -0
  123. package/lib/index.js +214 -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 +20 -58
  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__/index.test.jsx +64 -0
  135. package/src/hotspot/__tests__/polygon.test.jsx +502 -0
  136. package/src/hotspot/__tests__/rectangle.test.jsx +418 -0
  137. package/src/hotspot/circle.jsx +154 -0
  138. package/src/hotspot/container.jsx +297 -0
  139. package/src/hotspot/icons.js +7 -0
  140. package/src/hotspot/image-konva-tooltip.jsx +76 -0
  141. package/src/hotspot/index.jsx +179 -0
  142. package/src/hotspot/polygon.jsx +197 -0
  143. package/src/hotspot/rectangle.jsx +172 -0
  144. package/src/index.js +227 -0
  145. package/src/session-updater.js +29 -0
  146. package/dist/author/DeleteWidget.d.ts +0 -38
  147. package/dist/author/DeleteWidget.js +0 -46
  148. package/dist/author/button.d.ts +0 -31
  149. package/dist/author/button.js +0 -27
  150. package/dist/author/buttons/circle.d.ts +0 -18
  151. package/dist/author/buttons/circle.js +0 -25
  152. package/dist/author/buttons/polygon.d.ts +0 -18
  153. package/dist/author/buttons/polygon.js +0 -36
  154. package/dist/author/buttons/rectangle.d.ts +0 -18
  155. package/dist/author/buttons/rectangle.js +0 -36
  156. package/dist/author/defaults.d.ts +0 -157
  157. package/dist/author/defaults.js +0 -119
  158. package/dist/author/hotspot-circle.d.ts +0 -21
  159. package/dist/author/hotspot-circle.js +0 -124
  160. package/dist/author/hotspot-container.d.ts +0 -29
  161. package/dist/author/hotspot-container.js +0 -210
  162. package/dist/author/hotspot-drawable.d.ts +0 -31
  163. package/dist/author/hotspot-drawable.js +0 -312
  164. package/dist/author/hotspot-palette.d.ts +0 -14
  165. package/dist/author/hotspot-palette.js +0 -72
  166. package/dist/author/hotspot-polygon.d.ts +0 -38
  167. package/dist/author/hotspot-polygon.js +0 -200
  168. package/dist/author/hotspot-rectangle.d.ts +0 -20
  169. package/dist/author/hotspot-rectangle.js +0 -119
  170. package/dist/author/icons.d.ts +0 -9
  171. package/dist/author/icons.js +0 -4
  172. package/dist/author/image-konva.d.ts +0 -19
  173. package/dist/author/image-konva.js +0 -49
  174. package/dist/author/index.d.ts +0 -52
  175. package/dist/author/index.js +0 -143
  176. package/dist/author/root.d.ts +0 -15
  177. package/dist/author/root.js +0 -215
  178. package/dist/author/shapes/circle.d.ts +0 -18
  179. package/dist/author/shapes/circle.js +0 -47
  180. package/dist/author/shapes/index.d.ts +0 -12
  181. package/dist/author/shapes/polygon.d.ts +0 -19
  182. package/dist/author/shapes/polygon.js +0 -51
  183. package/dist/author/shapes/rectagle.d.ts +0 -18
  184. package/dist/author/shapes/rectagle.js +0 -57
  185. package/dist/author/shapes/utils.d.ts +0 -19
  186. package/dist/author/shapes/utils.js +0 -16
  187. package/dist/author/upload-control.d.ts +0 -29
  188. package/dist/author/upload-control.js +0 -28
  189. package/dist/author/utils.d.ts +0 -24
  190. package/dist/author/utils.js +0 -83
  191. package/dist/controller/defaults.d.ts +0 -35
  192. package/dist/controller/defaults.js +0 -29
  193. package/dist/controller/index.d.ts +0 -22
  194. package/dist/controller/index.js +0 -154
  195. package/dist/controller/utils.d.ts +0 -10
  196. package/dist/controller/utils.js +0 -13
  197. package/dist/delivery/hotspot/circle.d.ts +0 -19
  198. package/dist/delivery/hotspot/circle.js +0 -100
  199. package/dist/delivery/hotspot/container.d.ts +0 -16
  200. package/dist/delivery/hotspot/container.js +0 -150
  201. package/dist/delivery/hotspot/icons.d.ts +0 -10
  202. package/dist/delivery/hotspot/icons.js +0 -4
  203. package/dist/delivery/hotspot/image-konva-tooltip.d.ts +0 -19
  204. package/dist/delivery/hotspot/image-konva-tooltip.js +0 -66
  205. package/dist/delivery/hotspot/index.d.ts +0 -17
  206. package/dist/delivery/hotspot/index.js +0 -114
  207. package/dist/delivery/hotspot/polygon.d.ts +0 -21
  208. package/dist/delivery/hotspot/polygon.js +0 -108
  209. package/dist/delivery/hotspot/rectangle.d.ts +0 -19
  210. package/dist/delivery/hotspot/rectangle.js +0 -104
  211. package/dist/delivery/index.d.ts +0 -20
  212. package/dist/delivery/index.js +0 -107
  213. package/dist/delivery/session-updater.d.ts +0 -10
  214. package/dist/delivery/session-updater.js +0 -14
  215. package/dist/index.d.ts +0 -1
  216. package/dist/index.iife.d.ts +0 -8
  217. package/dist/index.iife.js +0 -169
  218. package/dist/index.js +0 -2
  219. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_DataView.js +0 -6
  220. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_Hash.js +0 -16
  221. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_ListCache.js +0 -16
  222. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_Map.js +0 -6
  223. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_MapCache.js +0 -16
  224. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_Promise.js +0 -6
  225. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_Set.js +0 -6
  226. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_SetCache.js +0 -11
  227. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_Stack.js +0 -14
  228. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_Symbol.js +0 -5
  229. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_Uint8Array.js +0 -5
  230. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_WeakMap.js +0 -6
  231. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_arrayEach.js +0 -7
  232. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_arrayFilter.js +0 -10
  233. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_arrayLikeKeys.js +0 -15
  234. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_arrayPush.js +0 -7
  235. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_arraySome.js +0 -7
  236. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_assignValue.js +0 -10
  237. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_assocIndexOf.js +0 -8
  238. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseAssign.js +0 -8
  239. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseAssignIn.js +0 -8
  240. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseAssignValue.js +0 -12
  241. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseClone.js +0 -57
  242. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseCreate.js +0 -14
  243. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseGetAllKeys.js +0 -9
  244. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseGetTag.js +0 -10
  245. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseIsArguments.js +0 -9
  246. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseIsEqual.js +0 -8
  247. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseIsEqualDeep.js +0 -30
  248. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseIsMap.js +0 -9
  249. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseIsNative.js +0 -11
  250. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseIsSet.js +0 -9
  251. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseIsTypedArray.js +0 -11
  252. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseKeys.js +0 -12
  253. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseKeysIn.js +0 -13
  254. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseTimes.js +0 -7
  255. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseUnary.js +0 -8
  256. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_cacheHas.js +0 -6
  257. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_cloneArrayBuffer.js +0 -8
  258. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_cloneBuffer.js +0 -10
  259. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_cloneDataView.js +0 -8
  260. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_cloneRegExp.js +0 -8
  261. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_cloneSymbol.js +0 -8
  262. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_cloneTypedArray.js +0 -8
  263. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_copyArray.js +0 -8
  264. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_copyObject.js +0 -14
  265. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_copySymbols.js +0 -8
  266. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_copySymbolsIn.js +0 -8
  267. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_coreJsData.js +0 -5
  268. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_defineProperty.js +0 -10
  269. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_equalArrays.js +0 -35
  270. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_equalByTag.js +0 -35
  271. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_equalObjects.js +0 -32
  272. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_freeGlobal.js +0 -4
  273. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getAllKeys.js +0 -9
  274. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getAllKeysIn.js +0 -9
  275. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getMapData.js +0 -8
  276. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getNative.js +0 -9
  277. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getPrototype.js +0 -5
  278. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getRawTag.js +0 -14
  279. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getSymbols.js +0 -10
  280. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getSymbolsIn.js +0 -11
  281. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getTag.js +0 -23
  282. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getValue.js +0 -6
  283. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_hashClear.js +0 -7
  284. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_hashDelete.js +0 -7
  285. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_hashGet.js +0 -13
  286. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_hashHas.js +0 -9
  287. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_hashSet.js +0 -9
  288. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_initCloneArray.js +0 -8
  289. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_initCloneByTag.js +0 -33
  290. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_initCloneObject.js +0 -9
  291. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_isIndex.js +0 -8
  292. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_isKeyable.js +0 -7
  293. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_isMasked.js +0 -11
  294. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_isPrototype.js +0 -8
  295. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_listCacheClear.js +0 -6
  296. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_listCacheDelete.js +0 -9
  297. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_listCacheGet.js +0 -8
  298. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_listCacheHas.js +0 -7
  299. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_listCacheSet.js +0 -8
  300. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheClear.js +0 -13
  301. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheDelete.js +0 -8
  302. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheGet.js +0 -7
  303. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheHas.js +0 -7
  304. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheSet.js +0 -8
  305. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_mapToArray.js +0 -9
  306. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_nativeCreate.js +0 -5
  307. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_nativeKeys.js +0 -5
  308. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_nativeKeysIn.js +0 -8
  309. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_nodeUtil.js +0 -9
  310. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_objectToString.js +0 -7
  311. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_overArg.js +0 -8
  312. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_root.js +0 -5
  313. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_setCacheAdd.js +0 -7
  314. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_setCacheHas.js +0 -6
  315. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_setToArray.js +0 -9
  316. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_stackClear.js +0 -7
  317. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_stackDelete.js +0 -7
  318. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_stackGet.js +0 -6
  319. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_stackHas.js +0 -6
  320. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_stackSet.js +0 -16
  321. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_toSource.js +0 -15
  322. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/cloneDeep.js +0 -8
  323. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/eq.js +0 -6
  324. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isArguments.js +0 -10
  325. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isArray.js +0 -4
  326. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isArrayLike.js +0 -8
  327. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isBuffer.js +0 -6
  328. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isEmpty.js +0 -21
  329. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isEqual.js +0 -7
  330. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isFunction.js +0 -11
  331. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isLength.js +0 -7
  332. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isMap.js +0 -7
  333. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isObject.js +0 -7
  334. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isObjectLike.js +0 -6
  335. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isSet.js +0 -7
  336. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isTypedArray.js +0 -7
  337. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/keys.js +0 -9
  338. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/keysIn.js +0 -9
  339. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/stubArray.js +0 -6
  340. 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,342 @@
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 checkNullish = value => value !== null && value !== undefined;
19
+ const normalize = question => ({
20
+ ..._defaults.default,
21
+ ...question
22
+ });
23
+ exports.normalize = normalize;
24
+ function model(question, session, env) {
25
+ const normalizedQuestion = normalize(question);
26
+ const {
27
+ imageUrl,
28
+ dimensions,
29
+ hotspotColor,
30
+ hoverOutlineColor,
31
+ selectedHotspotColor,
32
+ multipleCorrect,
33
+ outlineColor,
34
+ partialScoring,
35
+ prompt,
36
+ shapes,
37
+ language,
38
+ fontSizeFactor,
39
+ autoplayAudioEnabled,
40
+ completeAudioEnabled,
41
+ customAudioButton
42
+ } = normalizedQuestion;
43
+ const {
44
+ rectangles,
45
+ polygons,
46
+ circles
47
+ } = shapes || {};
48
+ const shouldIncludeCorrectResponse = env.mode === 'evaluate' || env.role === 'instructor' && env.mode === 'view';
49
+ return new Promise(resolve => {
50
+ const out = {
51
+ disabled: env.mode !== 'gather',
52
+ mode: env.mode,
53
+ dimensions,
54
+ imageUrl,
55
+ outlineColor,
56
+ hotspotColor,
57
+ hoverOutlineColor: checkNullish(hoverOutlineColor) ? hoverOutlineColor : 'black',
58
+ selectedHotspotColor,
59
+ multipleCorrect,
60
+ partialScoring,
61
+ language,
62
+ fontSizeFactor,
63
+ autoplayAudioEnabled,
64
+ completeAudioEnabled,
65
+ customAudioButton,
66
+ shapes: {
67
+ ...shapes,
68
+ // eslint-disable-next-line no-unused-vars
69
+ rectangles: (rectangles || []).map(({
70
+ index,
71
+ correct,
72
+ ...rectProps
73
+ }) => shouldIncludeCorrectResponse ? {
74
+ correct,
75
+ ...rectProps
76
+ } : {
77
+ ...rectProps
78
+ }),
79
+ // eslint-disable-next-line no-unused-vars
80
+ polygons: (polygons || []).map(({
81
+ index,
82
+ correct,
83
+ ...polyProps
84
+ }) => shouldIncludeCorrectResponse ? {
85
+ correct,
86
+ ...polyProps
87
+ } : {
88
+ ...polyProps
89
+ }),
90
+ // eslint-disable-next-line no-unused-vars
91
+ circles: (circles || []).map(({
92
+ index,
93
+ correct,
94
+ ...circleProps
95
+ }) => shouldIncludeCorrectResponse ? {
96
+ correct,
97
+ ...circleProps
98
+ } : {
99
+ ...circleProps
100
+ })
101
+ },
102
+ responseCorrect: env.mode === 'evaluate' ? (0, _utils.isResponseCorrect)(normalizedQuestion, session) : undefined,
103
+ extraCSSRules: normalizedQuestion.extraCSSRules
104
+ };
105
+ if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {
106
+ out.rationale = normalizedQuestion.rationaleEnabled ? normalizedQuestion.rationale : null;
107
+ out.teacherInstructions = normalizedQuestion.teacherInstructionsEnabled ? normalizedQuestion.teacherInstructions : null;
108
+ } else {
109
+ out.rationale = null;
110
+ out.teacherInstructions = null;
111
+ }
112
+ out.prompt = normalizedQuestion.promptEnabled ? prompt : null;
113
+ out.strokeWidth = normalizedQuestion.strokeWidth;
114
+ resolve(out);
115
+ });
116
+ }
117
+ const createDefaultModel = (model = {}) => new Promise(resolve => {
118
+ resolve({
119
+ ..._defaults.default,
120
+ ...model
121
+ });
122
+ });
123
+ exports.createDefaultModel = createDefaultModel;
124
+ const getScore = (config, session, env = {}) => {
125
+ const {
126
+ answers
127
+ } = session || {};
128
+ if (!config.shapes || !config.shapes.rectangles && !config.shapes.polygons && !config.shapes.circles) {
129
+ return 0;
130
+ }
131
+ const {
132
+ shapes: {
133
+ rectangles = [],
134
+ polygons = [],
135
+ circles = []
136
+ } = {}
137
+ } = config;
138
+ const partialScoringEnabled = _controllerUtils.partialScoring.enabled(config, env);
139
+ if (!partialScoringEnabled) {
140
+ return (0, _utils.isResponseCorrect)(config, session) ? 1 : 0;
141
+ }
142
+ let correctAnswers = 0;
143
+ let selectedChoices = 0;
144
+ const choices = [...rectangles, ...polygons, ...circles];
145
+ const correctChoices = choices.filter(choice => choice.correct);
146
+ choices.forEach(shape => {
147
+ const selected = answers && answers.filter(answer => answer.id === shape.id)[0];
148
+ const correctlySelected = shape.correct && selected;
149
+ if (selected) {
150
+ selectedChoices += 1;
151
+ }
152
+ if (correctlySelected) {
153
+ correctAnswers += 1;
154
+ }
155
+ });
156
+ const extraAnswers = selectedChoices > correctChoices.length ? selectedChoices - correctChoices.length : 0;
157
+ const total = correctChoices.length === 0 ? 1 : correctChoices.length;
158
+ const str = ((correctAnswers - extraAnswers) / total).toFixed(2);
159
+ return str < 0 ? 0 : parseFloat(str);
160
+ };
161
+
162
+ /**
163
+ * Generates detailed trace log for scoring evaluation
164
+ * @param {Object} model - the question model
165
+ * @param {Object} session - the student session
166
+ * @param {Object} env - the environment
167
+ * @returns {Array} traceLog - array of trace messages
168
+ */
169
+ const getLogTrace = (model, session, env) => {
170
+ const traceLog = [];
171
+ const {
172
+ answers
173
+ } = session || {};
174
+ const {
175
+ shapes
176
+ } = model || {};
177
+ const allShapes = [];
178
+ if (shapes) {
179
+ if (shapes.rectangles) allShapes.push(...shapes.rectangles);
180
+ if (shapes.polygons) allShapes.push(...shapes.polygons);
181
+ if (shapes.circles) allShapes.push(...shapes.circles);
182
+ }
183
+ const correctShapes = allShapes.filter(shape => shape.correct);
184
+ const totalShapes = allShapes.length;
185
+ traceLog.push(`Total of ${totalShapes} hotspot(s) defined, ${correctShapes.length} correct.`);
186
+ if (answers && answers.length > 0) {
187
+ traceLog.push(`Student selected ${answers.length} hotspot(s).`);
188
+ let correctSelections = 0;
189
+ let incorrectSelections = 0;
190
+ answers.forEach(answer => {
191
+ const shape = allShapes.find(s => s.id === answer.id);
192
+ if (shape && shape.correct) {
193
+ correctSelections++;
194
+ } else {
195
+ incorrectSelections++;
196
+ }
197
+ });
198
+ const missedCorrect = correctShapes.filter(correctShape => !answers.some(answer => answer.id === correctShape.id)).length;
199
+ if (correctSelections > 0) {
200
+ traceLog.push(`${correctSelections} correct hotspot(s) selected.`);
201
+ }
202
+ if (incorrectSelections > 0) {
203
+ traceLog.push(`${incorrectSelections} incorrect hotspot(s) selected.`);
204
+ }
205
+ if (missedCorrect > 0) {
206
+ traceLog.push(`${missedCorrect} correct hotspot(s) missed.`);
207
+ }
208
+ } else {
209
+ traceLog.push('No hotspots selected.');
210
+ }
211
+ const partialScoringEnabled = _controllerUtils.partialScoring.enabled(model, env);
212
+ if (partialScoringEnabled) {
213
+ traceLog.push(`Score calculated using partial scoring.`);
214
+ if (answers && answers.length > 0) {
215
+ let correctSelections = 0;
216
+ let incorrectSelections = 0;
217
+ answers.forEach(answer => {
218
+ const shape = allShapes.find(s => s.id === answer.id);
219
+ if (shape && shape.correct) {
220
+ correctSelections++;
221
+ } else {
222
+ incorrectSelections++;
223
+ }
224
+ });
225
+ const totalCorrectAvailable = correctShapes.length;
226
+ traceLog.push(`Partial scoring calculation: ${correctSelections} correct selections out of ${totalCorrectAvailable} available.`);
227
+ if (incorrectSelections > totalCorrectAvailable) {
228
+ const extraSelections = incorrectSelections - (totalCorrectAvailable - correctSelections);
229
+ traceLog.push(`${extraSelections} extra incorrect selection(s) beyond required amount are deducted from score.`);
230
+ }
231
+ }
232
+ } else {
233
+ traceLog.push(`Score calculated using all-or-nothing scoring.`);
234
+ }
235
+ const score = getScore(model, session, env);
236
+ traceLog.push(`Score: ${score}.`);
237
+ return traceLog;
238
+ };
239
+ exports.getLogTrace = getLogTrace;
240
+ function outcome(config, session, env = {}) {
241
+ return new Promise(resolve => {
242
+ log('outcome...');
243
+ if (!session || (0, _lodashEs.isEmpty)(session)) {
244
+ resolve({
245
+ score: 0,
246
+ empty: true,
247
+ traceLog: ['No hotspots selected. Score: 0.']
248
+ });
249
+ }
250
+ if (session.answers) {
251
+ const traceLog = getLogTrace(config, session, env);
252
+ const score = getScore(config, session, env);
253
+ resolve({
254
+ score,
255
+ empty: false,
256
+ traceLog
257
+ });
258
+ } else {
259
+ resolve({
260
+ score: 0,
261
+ empty: true,
262
+ traceLog: ['No hotspots selected. Score: 0.']
263
+ });
264
+ }
265
+ });
266
+ }
267
+ const returnShapesCorrect = shapes => {
268
+ let answers = [];
269
+ shapes.forEach(i => {
270
+ const {
271
+ correct,
272
+ id
273
+ } = i;
274
+ if (correct) {
275
+ answers.push({
276
+ id
277
+ });
278
+ }
279
+ });
280
+ return answers;
281
+ };
282
+ const createCorrectResponseSession = (question, env) => {
283
+ return new Promise(resolve => {
284
+ if (env.mode !== 'evaluate' && env.role === 'instructor') {
285
+ const {
286
+ shapes: {
287
+ rectangles = [],
288
+ circles = [],
289
+ polygons = {}
290
+ } = {}
291
+ } = question;
292
+ const rectangleCorrect = returnShapesCorrect(rectangles);
293
+ const polygonsCorrect = returnShapesCorrect(polygons);
294
+ const circlesCorrect = returnShapesCorrect(circles);
295
+ resolve({
296
+ answers: [...rectangleCorrect, ...polygonsCorrect, ...circlesCorrect],
297
+ id: '1'
298
+ });
299
+ } else {
300
+ resolve(null);
301
+ }
302
+ });
303
+ };
304
+
305
+ // remove all html tags
306
+ exports.createCorrectResponseSession = createCorrectResponseSession;
307
+ const getInnerText = html => (html || '').replaceAll(/<[^>]*>/g, '');
308
+
309
+ // remove all html tags except img, iframe and source tag for audio
310
+ const getContent = html => (html || '').replace(/(<(?!img|iframe|source)([^>]+)>)/gi, '');
311
+ const validate = (model = {}, config = {}) => {
312
+ const {
313
+ shapes
314
+ } = model;
315
+ const {
316
+ minShapes = 2,
317
+ maxShapes,
318
+ maxSelections
319
+ } = config;
320
+ const errors = {};
321
+ ['teacherInstructions', 'prompt', 'rationale'].forEach(field => {
322
+ if (config[field]?.required && !getContent(model[field])) {
323
+ errors[field] = 'This field is required.';
324
+ }
325
+ });
326
+ const allShapes = Object.values(shapes || {}).reduce((acc, shape) => [...acc, ...shape], []);
327
+ const nbOfSelections = (allShapes || []).reduce((acc, shape) => shape.correct ? acc + 1 : acc, 0);
328
+ const nbOfShapes = (allShapes || []).length;
329
+ if (nbOfShapes < minShapes) {
330
+ errors.shapes = `There should be at least ${minShapes} shapes defined.`;
331
+ } else if (nbOfShapes > maxShapes) {
332
+ errors.shapes = `No more than ${maxShapes} shapes should be defined.`;
333
+ }
334
+ if (nbOfSelections < 1) {
335
+ errors.selections = 'There should be at least 1 shape selected.';
336
+ } else if (nbOfSelections > maxSelections) {
337
+ errors.selections = `No more than ${maxSelections} shapes should be selected.`;
338
+ }
339
+ return errors;
340
+ };
341
+ exports.validate = validate;
342
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["_debug","_interopRequireDefault","require","_lodashEs","_controllerUtils","_utils","_defaults","log","debug","checkNullish","value","undefined","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","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\nconst checkNullish = (value) => value !== null && value !== undefined;\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: checkNullish(hoverOutlineColor) ? hoverOutlineColor : 'black',\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.3",
15
+ "debug": "^4.1.1",
16
+ "lodash-es": "^4.17.23"
17
+ }
18
+ }