@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,213 @@
1
+ import React from 'react';
2
+ import { createRoot } from 'react-dom/client';
3
+ import debug from 'debug';
4
+ import {
5
+ ModelUpdatedEvent,
6
+ DeleteImageEvent,
7
+ InsertImageEvent,
8
+ InsertSoundEvent,
9
+ DeleteSoundEvent,
10
+ } from '@pie-framework/pie-configure-events';
11
+
12
+ import Root from './root';
13
+ import sensibleDefaults from './defaults';
14
+
15
+ const log = debug('hotspot:configure');
16
+
17
+ export default class HotspotConfigure extends HTMLElement {
18
+ static createDefaultModel = (model = {}) => ({
19
+ ...sensibleDefaults.model,
20
+ ...model,
21
+ hotspotList: model.hotspotList || [model.hotspotColor] || sensibleDefaults.model.hotspotList,
22
+ outlineList: model.outlineList || [model.outlineColor] || sensibleDefaults.model.outlineList,
23
+ shapes: model.shapes || sensibleDefaults.model.shapes || {},
24
+ });
25
+
26
+ constructor() {
27
+ super();
28
+ this._root = null;
29
+ this._model = HotspotConfigure.createDefaultModel();
30
+ this._configuration = sensibleDefaults.configuration;
31
+ this.onModelChanged = this.onModelChanged.bind(this);
32
+ }
33
+
34
+ set model(s) {
35
+ this._model = HotspotConfigure.createDefaultModel(s);
36
+ this._render();
37
+ }
38
+
39
+ set configuration(c) {
40
+ const newConfiguration = {
41
+ ...sensibleDefaults.configuration,
42
+ ...c,
43
+ };
44
+
45
+ this._configuration = newConfiguration;
46
+
47
+ // if language:enabled is true, then the corresponding default item model should include a language value;
48
+ // if it is false, then the language field should be omitted from the item model.
49
+ // if a default item model includes a language value (e.g., en_US) and the corresponding authoring view settings have language:settings = true,
50
+ // then (a) language:enabled should also be true, and (b) that default language value should be represented in languageChoices[] (as a key).
51
+ if (newConfiguration?.language?.enabled) {
52
+ if (newConfiguration?.languageChoices?.options?.length) {
53
+ this._model.language = newConfiguration?.languageChoices.options[0].value;
54
+ }
55
+ } else if (newConfiguration.language.settings && this._model.language) {
56
+ this._configuration.language.enabled = true;
57
+
58
+ if (!this._configuration.languageChoices.options || !this._configuration.languageChoices.options.length) {
59
+ this._configuration.languageChoices.options = [];
60
+ }
61
+
62
+ // check if the language is already included in the languageChoices.options array
63
+ // and if not, then add it.
64
+ if (!this._configuration.languageChoices.options.find((option) => option.value === this._model.language)) {
65
+ this._configuration.languageChoices.options.push({
66
+ value: this._model.language,
67
+ label: this._model.language,
68
+ });
69
+ }
70
+ } else {
71
+ delete this._model.language;
72
+ }
73
+
74
+ this._render();
75
+ }
76
+
77
+ dispatchModelUpdated(reset) {
78
+ const resetValue = !!reset;
79
+
80
+ this.dispatchEvent(new ModelUpdatedEvent(this._model, resetValue));
81
+ }
82
+
83
+ onModelChanged(m, reset) {
84
+ this._model = m;
85
+ this.dispatchModelUpdated(reset);
86
+ this._render();
87
+ }
88
+
89
+ onConfigurationChanged = (c) => {
90
+ this._configuration = c;
91
+ this._render();
92
+ };
93
+
94
+ onModelChangedByConfig = (m, propertyType) => {
95
+ const _model = m;
96
+
97
+ if (propertyType === 'multipleCorrect') {
98
+ const { rectangles = [], polygons = [], circles = [] } = _model.shapes || {};
99
+
100
+ _model.shapes.rectangles = rectangles.map((shape) => ({ ...shape, correct: false }));
101
+ _model.shapes.polygons = polygons.map((shape) => ({ ...shape, correct: false }));
102
+ _model.shapes.circles = circles.map((shape) => ({ ...shape, correct: false }));
103
+ }
104
+
105
+ this.onModelChanged(_model);
106
+ };
107
+
108
+ onColorChanged = (colorType, color) => {
109
+ this.onModelChanged({
110
+ ...this._model,
111
+ [colorType]: color,
112
+ });
113
+ };
114
+
115
+ onPromptChanged = (prompt) => {
116
+ this.onModelChanged({
117
+ ...this._model,
118
+ prompt,
119
+ });
120
+ };
121
+
122
+ onRationaleChanged = (rationale) => {
123
+ this.onModelChanged({
124
+ ...this._model,
125
+ rationale,
126
+ });
127
+ };
128
+
129
+ onTeacherInstructionsChanged = (teacherInstructions) => {
130
+ this.onModelChanged({
131
+ ...this._model,
132
+ teacherInstructions,
133
+ });
134
+ };
135
+
136
+ onUpdateImageDimension = (dimensions) => {
137
+ this.onModelChanged({
138
+ ...this._model,
139
+ dimensions,
140
+ });
141
+ };
142
+
143
+ onUpdateShapes = (shapes) => {
144
+ this.onModelChanged({
145
+ ...this._model,
146
+ shapes,
147
+ });
148
+ };
149
+
150
+ onImageUpload = (imageUrl) => {
151
+ this.onModelChanged({
152
+ ...this._model,
153
+ imageUrl,
154
+ });
155
+ };
156
+
157
+ insertImage = (handler) => {
158
+ this.dispatchEvent(new InsertImageEvent(handler));
159
+ };
160
+
161
+ onDeleteImage = (src, done) => {
162
+ this.dispatchEvent(new DeleteImageEvent(src, done));
163
+ };
164
+
165
+ insertSound(handler) {
166
+ this.dispatchEvent(new InsertSoundEvent(handler));
167
+ }
168
+
169
+ onDeleteSound(src, done) {
170
+ this.dispatchEvent(new DeleteSoundEvent(src, done));
171
+ }
172
+
173
+ _render() {
174
+ log('_render');
175
+ let element = React.createElement(Root, {
176
+ configuration: this._configuration,
177
+ model: this._model,
178
+ onColorChanged: this.onColorChanged,
179
+ onImageUpload: this.onImageUpload,
180
+ onRationaleChanged: this.onRationaleChanged,
181
+ onConfigurationChanged: this.onConfigurationChanged,
182
+ onPromptChanged: this.onPromptChanged,
183
+ onUpdateImageDimension: this.onUpdateImageDimension,
184
+ imageSupport: {
185
+ add: this.insertImage,
186
+ delete: this.onDeleteImage,
187
+ },
188
+ uploadSoundSupport: {
189
+ add: this.insertSound.bind(this),
190
+ delete: this.onDeleteSound.bind(this),
191
+ },
192
+ onUpdateShapes: this.onUpdateShapes,
193
+ onModelChangedByConfig: this.onModelChangedByConfig,
194
+ onTeacherInstructionsChanged: this.onTeacherInstructionsChanged,
195
+ });
196
+
197
+ if (!this._root) {
198
+ this._root = createRoot(this);
199
+ }
200
+ this._root.render(element);
201
+ }
202
+
203
+ connectedCallback() {
204
+ this._render();
205
+ }
206
+
207
+ disconnectedCallback() {
208
+ if (this._root) {
209
+ this._root.unmount();
210
+ this._root = null;
211
+ }
212
+ }
213
+ }
@@ -0,0 +1,342 @@
1
+ import React from 'react';
2
+ import { settings, layout, InputContainer, NumberTextField } from '@pie-lib/config-ui';
3
+ import PropTypes from 'prop-types';
4
+ import EditableHtml from '@pie-lib/editable-html-tip-tap';
5
+ import { styled } from '@mui/material/styles';
6
+ import Typography from '@mui/material/Typography';
7
+ import Info from '@mui/icons-material/Info';
8
+ import Tooltip from '@mui/material/Tooltip';
9
+ import HotspotPalette from './hotspot-palette';
10
+ import HotspotContainer from './hotspot-container';
11
+ import { updateImageDimensions, generateValidationMessage, getUpdatedShapes, getAllShapes, groupShapes } from './utils';
12
+
13
+ const { Panel, toggle, dropdown } = settings;
14
+
15
+ const checkNullish = (value) => value !== null && value !== undefined;
16
+
17
+ const DimensionsContainer = styled('div')(({ theme }) => ({
18
+ display: 'flex',
19
+ marginBottom: theme.spacing(1.5),
20
+ }));
21
+
22
+ const FieldContainer = styled('div')({
23
+ flex: 1,
24
+ width: '90%',
25
+ });
26
+
27
+ const PromptContainer = styled(InputContainer)(({ theme }) => ({
28
+ paddingTop: theme.spacing(1),
29
+ marginTop: theme.spacing(2),
30
+ marginBottom: theme.spacing(2),
31
+ width: '100%',
32
+ }));
33
+
34
+ const SubHeading = styled(Typography)(({ theme }) => ({
35
+ marginRight: theme.spacing(1),
36
+ }));
37
+
38
+ const FlexContainer = styled('div')({
39
+ display: 'flex',
40
+ alignItems: 'center',
41
+ });
42
+
43
+ const StyledTooltip = styled(Tooltip)(({ theme }) => ({
44
+ '& .MuiTooltip-tooltip': {
45
+ fontSize: theme.typography.fontSize - 2,
46
+ whiteSpace: 'pre',
47
+ maxWidth: '500px',
48
+ },
49
+ }));
50
+
51
+ const ErrorText = styled('div')(({ theme }) => ({
52
+ fontSize: theme.typography.fontSize - 2,
53
+ color: theme.palette.error.main,
54
+ paddingTop: theme.spacing(1),
55
+ }));
56
+
57
+ export class Root extends React.Component {
58
+ handleColorChange = (fieldType, color) => {
59
+ const { onColorChanged } = this.props;
60
+ const cType = `${fieldType}Color`;
61
+
62
+ onColorChanged(cType, color);
63
+ };
64
+
65
+ handleOnUpdateImageDimensions = (value, resizeType) => {
66
+ const {
67
+ model: { dimensions, shapes },
68
+ configuration: { preserveAspectRatio = {} },
69
+ onUpdateImageDimension,
70
+ onUpdateShapes,
71
+ } = this.props;
72
+
73
+ const nextImageDimensions = { ...dimensions, [resizeType]: value };
74
+
75
+ // if preserveAspectRatio.enabled, updateImageDimensions function makes sure aspect ratio is kept
76
+ const updatedDimensions = updateImageDimensions(
77
+ dimensions,
78
+ nextImageDimensions,
79
+ preserveAspectRatio.enabled,
80
+ resizeType,
81
+ );
82
+ // transform shapes map into shapes array
83
+ const shapesArray = getAllShapes(shapes);
84
+ // transform all the shapes to fit the re-sized image
85
+ const updatedShapes = getUpdatedShapes(dimensions, updatedDimensions, shapesArray);
86
+ // transform shapes array back into shapes map
87
+
88
+ onUpdateShapes(groupShapes(updatedShapes));
89
+ onUpdateImageDimension(updatedDimensions);
90
+ };
91
+
92
+ render() {
93
+ const {
94
+ configuration,
95
+ model,
96
+ imageSupport,
97
+ uploadSoundSupport,
98
+ onConfigurationChanged,
99
+ onImageUpload,
100
+ onModelChangedByConfig,
101
+ onPromptChanged,
102
+ onRationaleChanged,
103
+ onUpdateImageDimension,
104
+ onTeacherInstructionsChanged,
105
+ onUpdateShapes,
106
+ } = this.props;
107
+ const {
108
+ baseInputConfiguration = {},
109
+ contentDimensions = {},
110
+ maxImageWidth = {},
111
+ maxImageHeight = {},
112
+ multipleCorrect = {},
113
+ partialScoring = {},
114
+ preserveAspectRatio = {},
115
+ prompt = {},
116
+ rationale = {},
117
+ settingsPanelDisabled,
118
+ spellCheck = {},
119
+ teacherInstructions = {},
120
+ withRubric = {},
121
+ mathMlOptions = {},
122
+ language = {},
123
+ languageChoices = {},
124
+ } = configuration || {};
125
+ const {
126
+ errors,
127
+ extraCSSRules,
128
+ promptEnabled,
129
+ rationaleEnabled,
130
+ spellCheckEnabled,
131
+ teacherInstructionsEnabled,
132
+ toolbarEditorPosition,
133
+ } = model || {};
134
+ const {
135
+ prompt: promptError,
136
+ rationale: rationaleError,
137
+ shapes: shapesError,
138
+ selections: selectionsError,
139
+ teacherInstructions: teacherInstructionsError,
140
+ } = errors || {};
141
+ const validationMessage = generateValidationMessage(configuration);
142
+
143
+ const defaultImageMaxWidth = maxImageWidth && maxImageWidth.prompt;
144
+ const defaultImageMaxHeight = maxImageHeight && maxImageHeight.prompt;
145
+
146
+ const toolbarOpts = {
147
+ position: toolbarEditorPosition === 'top' ? 'top' : 'bottom',
148
+ };
149
+
150
+ const panelSettings = {
151
+ multipleCorrect: multipleCorrect.settings && toggle(multipleCorrect.label),
152
+ partialScoring: partialScoring.settings && toggle(partialScoring.label),
153
+ promptEnabled: prompt.settings && toggle(prompt.label),
154
+ 'language.enabled': language.settings && toggle(language.label, true),
155
+ language: language.settings && language.enabled && dropdown(languageChoices.label, languageChoices.options),
156
+ };
157
+ const panelProperties = {
158
+ teacherInstructionsEnabled: teacherInstructions.settings && toggle(teacherInstructions.label),
159
+ rationaleEnabled: rationale.settings && toggle(rationale.label),
160
+ spellCheckEnabled: spellCheck.settings && toggle(spellCheck.label),
161
+ rubricEnabled: withRubric?.settings && toggle(withRubric?.label),
162
+ };
163
+
164
+ const getPluginProps = (props = {}) => ({
165
+ ...baseInputConfiguration,
166
+ ...props,
167
+ });
168
+
169
+
170
+ return (
171
+ <layout.ConfigLayout
172
+ extraCSSRules={extraCSSRules}
173
+ dimensions={contentDimensions}
174
+ hideSettings={settingsPanelDisabled}
175
+ settings={
176
+ <Panel
177
+ model={model}
178
+ onChangeModel={onModelChangedByConfig}
179
+ configuration={configuration}
180
+ onChangeConfiguration={onConfigurationChanged}
181
+ groups={{
182
+ Settings: panelSettings,
183
+ Properties: panelProperties,
184
+ }}
185
+ />
186
+ }
187
+ >
188
+ {teacherInstructionsEnabled && (
189
+ <PromptContainer label={teacherInstructions.label}>
190
+ <EditableHtml
191
+ markup={model.teacherInstructions || ''}
192
+ onChange={onTeacherInstructionsChanged}
193
+ imageSupport={imageSupport}
194
+ nonEmpty={false}
195
+ error={teacherInstructionsError}
196
+ toolbarOpts={toolbarOpts}
197
+ pluginProps={getPluginProps(teacherInstructions?.inputConfiguration)}
198
+ spellCheck={spellCheckEnabled}
199
+ maxImageWidth={(maxImageWidth && maxImageWidth.teacherInstructions) || defaultImageMaxWidth}
200
+ maxImageHeight={(maxImageHeight && maxImageHeight.teacherInstructions) || defaultImageMaxHeight}
201
+ uploadSoundSupport={uploadSoundSupport}
202
+ languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}
203
+ mathMlOptions={mathMlOptions}
204
+ />
205
+ {teacherInstructionsError && <ErrorText>{teacherInstructionsError}</ErrorText>}
206
+ </PromptContainer>
207
+ )}
208
+
209
+ {promptEnabled && (
210
+ <PromptContainer label={prompt.label}>
211
+ <EditableHtml
212
+ markup={model.prompt || ''}
213
+ onChange={onPromptChanged}
214
+ imageSupport={imageSupport}
215
+ nonEmpty={false}
216
+ error={promptError}
217
+ toolbarOpts={toolbarOpts}
218
+ pluginProps={getPluginProps(prompt?.inputConfiguration)}
219
+ spellCheck={spellCheckEnabled}
220
+ maxImageWidth={defaultImageMaxWidth}
221
+ maxImageHeight={defaultImageMaxHeight}
222
+ uploadSoundSupport={uploadSoundSupport}
223
+ languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}
224
+ mathMlOptions={mathMlOptions}
225
+ />
226
+ {promptError && <ErrorText>{promptError}</ErrorText>}
227
+ </PromptContainer>
228
+ )}
229
+
230
+ <FlexContainer>
231
+ <SubHeading variant="h6">Define Hotspot</SubHeading>
232
+ <StyledTooltip disableFocusListener disableTouchListener placement={'left'} title={validationMessage}>
233
+ <Info fontSize={'small'} color={'primary'} style={{ float: 'right' }} />
234
+ </StyledTooltip>
235
+ </FlexContainer>
236
+
237
+ <HotspotPalette
238
+ hotspotColor={model.hotspotColor}
239
+ hotspotList={model.hotspotList}
240
+ outlineColor={model.outlineColor}
241
+ outlineList={model.outlineList}
242
+ onHotspotColorChange={(color) => this.handleColorChange('hotspot', color)}
243
+ onOutlineColorChange={(color) => this.handleColorChange('outline', color)}
244
+ />
245
+
246
+ <HotspotContainer
247
+ dimensions={model.dimensions}
248
+ imageUrl={model.imageUrl}
249
+ multipleCorrect={model.multipleCorrect}
250
+ hasErrors={!!shapesError || !!selectionsError}
251
+ hotspotColor={model.hotspotColor}
252
+ outlineColor={model.outlineColor}
253
+ selectedHotspotColor={model.selectedHotspotColor}
254
+ hoverOutlineColor={checkNullish(model.hoverOutlineColor) ? model.hoverOutlineColor : 'black'}
255
+ onUpdateImageDimension={onUpdateImageDimension}
256
+ onUpdateShapes={onUpdateShapes}
257
+ onImageUpload={onImageUpload}
258
+ shapes={model.shapes}
259
+ strokeWidth={model.strokeWidth}
260
+ preserveAspectRatioEnabled={preserveAspectRatio.enabled}
261
+ insertImage={imageSupport && imageSupport.add}
262
+ />
263
+ {shapesError && <ErrorText>{shapesError}</ErrorText>}
264
+ {selectionsError && <ErrorText>{selectionsError}</ErrorText>}
265
+
266
+ {model.imageUrl && (
267
+ <React.Fragment>
268
+ <Typography variant="h6">Image Dimensions</Typography>
269
+
270
+ <DimensionsContainer>
271
+ <FieldContainer>
272
+ <NumberTextField
273
+ key="hotspot-manual-width"
274
+ label="Width"
275
+ value={model.dimensions.width}
276
+ min={0}
277
+ onChange={(e, value) => this.handleOnUpdateImageDimensions(value, 'width')}
278
+ showErrorWhenOutsideRange
279
+ />
280
+ </FieldContainer>
281
+
282
+ <FieldContainer>
283
+ <NumberTextField
284
+ key="hotspot-manual-height"
285
+ label="Height"
286
+ value={model.dimensions.height}
287
+ min={0}
288
+ onChange={(e, value) => this.handleOnUpdateImageDimensions(value, 'height')}
289
+ showErrorWhenOutsideRange
290
+ />
291
+ </FieldContainer>
292
+ </DimensionsContainer>
293
+ </React.Fragment>
294
+ )}
295
+
296
+ {rationaleEnabled && (
297
+ <PromptContainer label={rationale.label}>
298
+ <EditableHtml
299
+ markup={model.rationale || ''}
300
+ onChange={onRationaleChanged}
301
+ imageSupport={imageSupport}
302
+ error={rationaleError}
303
+ toolbarOpts={toolbarOpts}
304
+ pluginProps={getPluginProps(rationale?.inputConfiguration)}
305
+ spellCheck={spellCheckEnabled}
306
+ maxImageWidth={(maxImageWidth && maxImageWidth.rationale) || defaultImageMaxWidth}
307
+ maxImageHeight={(maxImageHeight && maxImageHeight.rationale) || defaultImageMaxHeight}
308
+ uploadSoundSupport={uploadSoundSupport}
309
+ languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}
310
+ mathMlOptions={mathMlOptions}
311
+ />
312
+ {rationaleError && <ErrorText>{rationaleError}</ErrorText>}
313
+ </PromptContainer>
314
+ )}
315
+ </layout.ConfigLayout>
316
+ );
317
+ }
318
+ }
319
+
320
+ Root.propTypes = {
321
+ configuration: PropTypes.object,
322
+ model: PropTypes.object.isRequired,
323
+ imageSupport: PropTypes.shape({
324
+ add: PropTypes.func,
325
+ delete: PropTypes.func,
326
+ }),
327
+ uploadSoundSupport: PropTypes.shape({
328
+ add: PropTypes.func,
329
+ delete: PropTypes.func,
330
+ }),
331
+ onImageUpload: PropTypes.func.isRequired,
332
+ onColorChanged: PropTypes.func.isRequired,
333
+ onPromptChanged: PropTypes.func.isRequired,
334
+ onUpdateImageDimension: PropTypes.func.isRequired,
335
+ onUpdateShapes: PropTypes.func.isRequired,
336
+ onModelChangedByConfig: PropTypes.func.isRequired,
337
+ onRationaleChanged: PropTypes.func.isRequired,
338
+ onConfigurationChanged: PropTypes.func.isRequired,
339
+ onTeacherInstructionsChanged: PropTypes.func.isRequired,
340
+ };
341
+
342
+ export default Root;
@@ -0,0 +1,81 @@
1
+ export class CircleShape {
2
+ static name = 'circle'
3
+
4
+ static create(shapes, e) {
5
+ const newShapes = [...shapes];
6
+ const highestId = Math.max(...newShapes.map((shape) => parseInt(shape.id)), 0);
7
+ const newCircle = {
8
+ id: `${highestId + 1}`,
9
+ radius: 0,
10
+ x: e.evt.layerX,
11
+ y: e.evt.layerY,
12
+ group: 'circles',
13
+ index: newShapes.length,
14
+ };
15
+
16
+ newShapes.push(newCircle);
17
+
18
+ return {
19
+ shapes: newShapes,
20
+ isDrawing: true,
21
+ isDrawingShapeId: newCircle.id,
22
+ };
23
+ }
24
+
25
+ static finalizeCreation(state, props) {
26
+ const currentShapeIndex = state.shapes.findIndex((shape) => shape.id === state.isDrawingShapeId);
27
+
28
+ if (currentShapeIndex !== -1) {
29
+ const currentShape = state.shapes[currentShapeIndex];
30
+
31
+ // Check if the shape is a valid circle (has more than 0 radius) before finalizing
32
+ if (currentShape.radius > 0) {
33
+ return {
34
+ ...state,
35
+ isDrawing: false,
36
+ stateShapes: false,
37
+ isDrawingShapeId: undefined,
38
+ };
39
+ } else {
40
+ return {
41
+ ...state,
42
+ isDrawing: false,
43
+ stateShapes: false,
44
+ isDrawingShapeId: undefined,
45
+ shapes: state.shapes.filter((shape) => shape.id !== state.isDrawingShapeId),
46
+ };
47
+ }
48
+ }
49
+
50
+ return {
51
+ ...state,
52
+ isDrawing: false,
53
+ stateShapes: false,
54
+ isDrawingShapeId: undefined,
55
+ };
56
+ }
57
+
58
+ static handleMouseMove(state, e) {
59
+ const { isDrawing, isDrawingShapeId, shapes } = state;
60
+
61
+ if (isDrawing) {
62
+ const tempShapes = [...shapes];
63
+ const resizingShapeIndex = tempShapes.findIndex((shape) => shape.id === isDrawingShapeId);
64
+
65
+ if (resizingShapeIndex !== -1) {
66
+ const resizingShape = tempShapes[resizingShapeIndex];
67
+
68
+ // Calculate radius based on mouse position
69
+ const dx = e.evt.layerX - resizingShape.x;
70
+ const dy = e.evt.layerY - resizingShape.y;
71
+ resizingShape.radius = Math.sqrt(dx * dx + dy * dy);
72
+
73
+ return {
74
+ shapes: tempShapes,
75
+ };
76
+ }
77
+ }
78
+
79
+ return state;
80
+ }
81
+ }
@@ -0,0 +1,4 @@
1
+ export * from './circle';
2
+ export * from './rectagle';
3
+ export * from './polygon';
4
+ export * from './utils';