@clickview/reports 0.71.0-rc.0 → 0.71.1-dev.0

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 (417) hide show
  1. package/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  2. package/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  3. package/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  4. package/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  5. package/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  6. package/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  7. package/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  8. package/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  9. package/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  10. package/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  11. package/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  12. package/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  13. package/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  14. package/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  15. package/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  16. package/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  17. package/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  18. package/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  19. package/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  20. package/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  21. package/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  22. package/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  23. package/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  24. package/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  25. package/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  26. package/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  27. package/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  28. package/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  29. package/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  30. package/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  31. package/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  32. package/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  33. package/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  34. package/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  35. package/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  36. package/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  37. package/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  38. package/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  39. package/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  40. package/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  41. package/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  42. package/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  43. package/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  44. package/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  45. package/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  46. package/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  47. package/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  48. package/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  49. package/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  50. package/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  51. package/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  52. package/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  53. package/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  54. package/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  55. package/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  56. package/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  57. package/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  58. package/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  59. package/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  60. package/dist/bundles.json +2 -3
  61. package/dist/css/1VpVng8x.chunk.css +1 -0
  62. package/dist/css/BDijM1kt.chunk.css +1 -0
  63. package/dist/css/BMPwvOki.chunk.css +1 -0
  64. package/dist/css/BNt45Kgy.chunk.css +1 -0
  65. package/dist/css/BSGhUWzl.chunk.css +1 -0
  66. package/dist/css/BZ3_uhDP.chunk.css +1 -0
  67. package/dist/css/BaadNO4A.chunk.css +1 -0
  68. package/dist/css/BdUNjJqp.chunk.css +1 -0
  69. package/dist/css/BdeI0FAV.chunk.css +1 -0
  70. package/dist/css/BxcMGr8Y.chunk.css +1 -0
  71. package/dist/css/ByuL_xKJ.chunk.css +1 -0
  72. package/dist/css/C-A0Pj_7.chunk.css +1 -0
  73. package/dist/css/C4jMfPWU.chunk.css +1 -0
  74. package/dist/css/C7XoyEPr.chunk.css +1 -0
  75. package/dist/css/C8sxda3R.chunk.css +1 -0
  76. package/dist/css/CD1qrI1T.chunk.css +1 -0
  77. package/dist/css/CFO--d_R.chunk.css +1 -0
  78. package/dist/css/CX9nw8t8.chunk.css +1 -0
  79. package/dist/css/C_qGRdC2.chunk.css +1 -0
  80. package/dist/css/CdC6ugQR.chunk.css +1 -0
  81. package/dist/css/ClRRGXPb.chunk.css +1 -0
  82. package/dist/css/Cr1bwtZG.chunk.css +1 -0
  83. package/dist/css/DBlPz5Fw.chunk.css +1 -0
  84. package/dist/css/DDnpOnVB.chunk.css +1 -0
  85. package/dist/css/DFZQCLLg.chunk.css +1 -0
  86. package/dist/css/DJwAbl6l.chunk.css +1 -0
  87. package/dist/css/DWjg_0sz.chunk.css +1 -0
  88. package/dist/css/DYV9jjVn.chunk.css +1 -0
  89. package/dist/css/Dgeh4AqU.chunk.css +9 -0
  90. package/dist/css/DlOtoSz0.chunk.css +1 -0
  91. package/dist/css/DlxOgKUu.chunk.css +1 -0
  92. package/dist/css/Dp3arkyy.chunk.css +1 -0
  93. package/dist/css/DwgaDUzz.chunk.css +1 -0
  94. package/dist/css/FPQ_LmXH.chunk.css +1 -0
  95. package/dist/css/H09rC9gw.chunk.css +1 -0
  96. package/dist/css/LAFr2dPT.chunk.css +1 -0
  97. package/dist/css/Pg1TlYG6.chunk.css +1 -0
  98. package/dist/css/PsQn3-kb.chunk.css +1 -0
  99. package/dist/css/alkEuPrr.chunk.css +1 -0
  100. package/dist/css/k4DgCj_g.chunk.css +1 -0
  101. package/dist/en.json +1 -0
  102. package/dist/scripts/5O9SdVRZ.chunk.js +2 -0
  103. package/dist/scripts/5O9SdVRZ.chunk.js.map +1 -0
  104. package/dist/scripts/71lqp_27.chunk.js +2 -0
  105. package/dist/scripts/71lqp_27.chunk.js.map +1 -0
  106. package/dist/scripts/B29cILrj.chunk.js +2 -0
  107. package/dist/scripts/B29cILrj.chunk.js.map +1 -0
  108. package/dist/scripts/B8h79IbE.chunk.js +10 -0
  109. package/dist/scripts/B8h79IbE.chunk.js.map +1 -0
  110. package/dist/scripts/BAY69EEW.chunk.js +4 -0
  111. package/dist/scripts/BAY69EEW.chunk.js.map +1 -0
  112. package/dist/scripts/BAb7U5e_.chunk.js +2 -0
  113. package/dist/scripts/BAb7U5e_.chunk.js.map +1 -0
  114. package/dist/scripts/BENXQfLb.chunk.js +2 -0
  115. package/dist/scripts/BENXQfLb.chunk.js.map +1 -0
  116. package/dist/scripts/BF6robfP.chunk.js +2 -0
  117. package/dist/scripts/BF6robfP.chunk.js.map +1 -0
  118. package/dist/scripts/BHgJhw0m.chunk.js +2 -0
  119. package/dist/scripts/BHgJhw0m.chunk.js.map +1 -0
  120. package/dist/scripts/BJDrvt1V.chunk.js +3 -0
  121. package/dist/scripts/BJDrvt1V.chunk.js.map +1 -0
  122. package/dist/scripts/BKardFg7.chunk.js +2 -0
  123. package/dist/scripts/BKardFg7.chunk.js.map +1 -0
  124. package/dist/scripts/BNPb8jz9.chunk.js +2 -0
  125. package/dist/scripts/BNPb8jz9.chunk.js.map +1 -0
  126. package/dist/scripts/BPjdUUKC.chunk.js +2 -0
  127. package/dist/scripts/BPjdUUKC.chunk.js.map +1 -0
  128. package/dist/scripts/BQIPBrM1.chunk.js +2 -0
  129. package/dist/scripts/BQIPBrM1.chunk.js.map +1 -0
  130. package/dist/scripts/BSOiWR0F.chunk.js +6 -0
  131. package/dist/scripts/BSOiWR0F.chunk.js.map +1 -0
  132. package/dist/scripts/BUXFRkJU.chunk.js +2 -0
  133. package/dist/scripts/BUXFRkJU.chunk.js.map +1 -0
  134. package/dist/scripts/BVwIslOW.chunk.js +2 -0
  135. package/dist/scripts/BVwIslOW.chunk.js.map +1 -0
  136. package/dist/scripts/BWQPt-2Q.chunk.js +2 -0
  137. package/dist/scripts/BWQPt-2Q.chunk.js.map +1 -0
  138. package/dist/scripts/BcPvb8J5.chunk.js +2 -0
  139. package/dist/scripts/BcPvb8J5.chunk.js.map +1 -0
  140. package/dist/scripts/Bf0d_B71.chunk.js +2 -0
  141. package/dist/scripts/Bf0d_B71.chunk.js.map +1 -0
  142. package/dist/scripts/Bic1CpMi.chunk.js +2 -0
  143. package/dist/scripts/Bic1CpMi.chunk.js.map +1 -0
  144. package/dist/scripts/BjgJ1i6i.chunk.js +6 -0
  145. package/dist/scripts/BjgJ1i6i.chunk.js.map +1 -0
  146. package/dist/scripts/BjiBJyQD.chunk.js +2 -0
  147. package/dist/scripts/BjiBJyQD.chunk.js.map +1 -0
  148. package/dist/scripts/BkuaVwYH.chunk.js +2 -0
  149. package/dist/scripts/BkuaVwYH.chunk.js.map +1 -0
  150. package/dist/scripts/BmVEWaPp.chunk.js +4 -0
  151. package/dist/scripts/BmVEWaPp.chunk.js.map +1 -0
  152. package/dist/scripts/BohkY37l.chunk.js +2 -0
  153. package/dist/scripts/BohkY37l.chunk.js.map +1 -0
  154. package/dist/scripts/BvIrLDbv.chunk.js +2 -0
  155. package/dist/scripts/BvIrLDbv.chunk.js.map +1 -0
  156. package/dist/scripts/BvJAziJf.chunk.js +2 -0
  157. package/dist/scripts/BvJAziJf.chunk.js.map +1 -0
  158. package/dist/scripts/BzoD15bZ.chunk.js +2 -0
  159. package/dist/scripts/BzoD15bZ.chunk.js.map +1 -0
  160. package/dist/scripts/C0fIn5Jw.chunk.js +2 -0
  161. package/dist/scripts/C0fIn5Jw.chunk.js.map +1 -0
  162. package/dist/scripts/C1LS2BqQ.chunk.js +2 -0
  163. package/dist/scripts/C1LS2BqQ.chunk.js.map +1 -0
  164. package/dist/scripts/C89Wm2QM.chunk.js +2 -0
  165. package/dist/scripts/C89Wm2QM.chunk.js.map +1 -0
  166. package/dist/scripts/CFp1zKGZ.chunk.js +8 -0
  167. package/dist/scripts/CFp1zKGZ.chunk.js.map +1 -0
  168. package/dist/scripts/CGvB_tzk.chunk.js +2 -0
  169. package/dist/scripts/CGvB_tzk.chunk.js.map +1 -0
  170. package/dist/scripts/CJGzIuaC.chunk.js +2 -0
  171. package/dist/scripts/CJGzIuaC.chunk.js.map +1 -0
  172. package/dist/scripts/CK9SUSD9.chunk.js +2 -0
  173. package/dist/scripts/CK9SUSD9.chunk.js.map +1 -0
  174. package/dist/scripts/CRnFAzfK.chunk.js +2 -0
  175. package/dist/scripts/CRnFAzfK.chunk.js.map +1 -0
  176. package/dist/scripts/CVftTaOh.chunk.js +2 -0
  177. package/dist/scripts/CVftTaOh.chunk.js.map +1 -0
  178. package/dist/scripts/CW7x8M-z.chunk.js +2 -0
  179. package/dist/scripts/CW7x8M-z.chunk.js.map +1 -0
  180. package/dist/scripts/CX5q-0jT.chunk.js +2 -0
  181. package/dist/scripts/CX5q-0jT.chunk.js.map +1 -0
  182. package/dist/scripts/CcJo9tyC.chunk.js +2 -0
  183. package/dist/scripts/CcJo9tyC.chunk.js.map +1 -0
  184. package/dist/scripts/Cd8Y7VGD.chunk.js +2 -0
  185. package/dist/scripts/Cd8Y7VGD.chunk.js.map +1 -0
  186. package/dist/scripts/CdEUIVMJ.chunk.js +2 -0
  187. package/dist/scripts/CdEUIVMJ.chunk.js.map +1 -0
  188. package/dist/scripts/Cf7yxDlS.chunk.js +2 -0
  189. package/dist/scripts/Cf7yxDlS.chunk.js.map +1 -0
  190. package/dist/scripts/Ch38wU3l.chunk.js +2 -0
  191. package/dist/scripts/Ch38wU3l.chunk.js.map +1 -0
  192. package/dist/scripts/Cj1EIzRP.chunk.js +2 -0
  193. package/dist/scripts/Cj1EIzRP.chunk.js.map +1 -0
  194. package/dist/scripts/Ckh8ZMGm.chunk.js +2 -0
  195. package/dist/scripts/Ckh8ZMGm.chunk.js.map +1 -0
  196. package/dist/scripts/ClIb9fji.chunk.js +10 -0
  197. package/dist/scripts/ClIb9fji.chunk.js.map +1 -0
  198. package/dist/scripts/ClkubQ2J.chunk.js +2 -0
  199. package/dist/scripts/ClkubQ2J.chunk.js.map +1 -0
  200. package/dist/scripts/ClngJcaG.chunk.js +2 -0
  201. package/dist/scripts/ClngJcaG.chunk.js.map +1 -0
  202. package/dist/scripts/Cmh_kkGl.chunk.js +2 -0
  203. package/dist/scripts/Cmh_kkGl.chunk.js.map +1 -0
  204. package/dist/scripts/Cmu1J2M7.chunk.js +262 -0
  205. package/dist/scripts/Cmu1J2M7.chunk.js.map +1 -0
  206. package/dist/scripts/CqnFgpqG.chunk.js +2 -0
  207. package/dist/scripts/CqnFgpqG.chunk.js.map +1 -0
  208. package/dist/scripts/Ctl4eE7j.chunk.js +2 -0
  209. package/dist/scripts/Ctl4eE7j.chunk.js.map +1 -0
  210. package/dist/scripts/Cu2SZCs_.chunk.js +3 -0
  211. package/dist/scripts/Cu2SZCs_.chunk.js.map +1 -0
  212. package/dist/scripts/Cus4Epw8.chunk.js +2 -0
  213. package/dist/scripts/Cus4Epw8.chunk.js.map +1 -0
  214. package/dist/scripts/Cwr3w1_A.chunk.js +2 -0
  215. package/dist/scripts/Cwr3w1_A.chunk.js.map +1 -0
  216. package/dist/scripts/CyS0Qcff.chunk.js +2 -0
  217. package/dist/scripts/CyS0Qcff.chunk.js.map +1 -0
  218. package/dist/scripts/Cz6t-6nF.chunk.js +2 -0
  219. package/dist/scripts/Cz6t-6nF.chunk.js.map +1 -0
  220. package/dist/scripts/D22pDzdH.chunk.js +2 -0
  221. package/dist/scripts/D22pDzdH.chunk.js.map +1 -0
  222. package/dist/scripts/D2z6V6KN.chunk.js +2 -0
  223. package/dist/scripts/D2z6V6KN.chunk.js.map +1 -0
  224. package/dist/scripts/D3rgHjw0.chunk.js +2 -0
  225. package/dist/scripts/D3rgHjw0.chunk.js.map +1 -0
  226. package/dist/scripts/D4zllLcC.chunk.js +2 -0
  227. package/dist/scripts/D4zllLcC.chunk.js.map +1 -0
  228. package/dist/scripts/D5FZp_R5.chunk.js +2 -0
  229. package/dist/scripts/D5FZp_R5.chunk.js.map +1 -0
  230. package/dist/scripts/D9PHjOfy.chunk.js +42 -0
  231. package/dist/scripts/D9PHjOfy.chunk.js.map +1 -0
  232. package/dist/scripts/DMIuTLXg.chunk.js +2 -0
  233. package/dist/scripts/DMIuTLXg.chunk.js.map +1 -0
  234. package/dist/scripts/DNgLQx2d.chunk.js +2 -0
  235. package/dist/scripts/DNgLQx2d.chunk.js.map +1 -0
  236. package/dist/scripts/DPPRKUKt.chunk.js +2 -0
  237. package/dist/scripts/DPPRKUKt.chunk.js.map +1 -0
  238. package/dist/scripts/DTDgnfLK.chunk.js +2 -0
  239. package/dist/scripts/DTDgnfLK.chunk.js.map +1 -0
  240. package/dist/scripts/DTUnn1Hh.chunk.js +2 -0
  241. package/dist/scripts/DTUnn1Hh.chunk.js.map +1 -0
  242. package/dist/scripts/DWKdFOij.chunk.js +2 -0
  243. package/dist/scripts/DWKdFOij.chunk.js.map +1 -0
  244. package/dist/scripts/DXjxFPuU.chunk.js +2 -0
  245. package/dist/scripts/DXjxFPuU.chunk.js.map +1 -0
  246. package/dist/scripts/DZYVycui.chunk.js +2 -0
  247. package/dist/scripts/DZYVycui.chunk.js.map +1 -0
  248. package/dist/scripts/D_Q6UyjE.chunk.js +2 -0
  249. package/dist/scripts/D_Q6UyjE.chunk.js.map +1 -0
  250. package/dist/scripts/D_YN6yks.chunk.js +2 -0
  251. package/dist/scripts/D_YN6yks.chunk.js.map +1 -0
  252. package/dist/scripts/DecntqLn.chunk.js +2 -0
  253. package/dist/scripts/DecntqLn.chunk.js.map +1 -0
  254. package/dist/scripts/DfBzbPUM.chunk.js +2 -0
  255. package/dist/scripts/DfBzbPUM.chunk.js.map +1 -0
  256. package/dist/scripts/Di60KvwG.chunk.js +2 -0
  257. package/dist/scripts/Di60KvwG.chunk.js.map +1 -0
  258. package/dist/scripts/Dj0aHq7R.chunk.js +2 -0
  259. package/dist/scripts/Dj0aHq7R.chunk.js.map +1 -0
  260. package/dist/scripts/DjZDmVy9.chunk.js +2 -0
  261. package/dist/scripts/DjZDmVy9.chunk.js.map +1 -0
  262. package/dist/scripts/DjgLQWKh.chunk.js +2 -0
  263. package/dist/scripts/DjgLQWKh.chunk.js.map +1 -0
  264. package/dist/scripts/DljLRdDL.chunk.js +2 -0
  265. package/dist/scripts/DljLRdDL.chunk.js.map +1 -0
  266. package/dist/scripts/DoKirPj2.chunk.js +2 -0
  267. package/dist/scripts/DoKirPj2.chunk.js.map +1 -0
  268. package/dist/scripts/DrZPksO1.chunk.js +2 -0
  269. package/dist/scripts/DrZPksO1.chunk.js.map +1 -0
  270. package/dist/scripts/DwXWjOFd.chunk.js +2 -0
  271. package/dist/scripts/DwXWjOFd.chunk.js.map +1 -0
  272. package/dist/scripts/Dwsvd8p8.chunk.js +3 -0
  273. package/dist/scripts/Dwsvd8p8.chunk.js.map +1 -0
  274. package/dist/scripts/Ewq6yyV4.chunk.js +2 -0
  275. package/dist/scripts/Ewq6yyV4.chunk.js.map +1 -0
  276. package/dist/scripts/GOwzfXiv.chunk.js +2 -0
  277. package/dist/scripts/GOwzfXiv.chunk.js.map +1 -0
  278. package/dist/scripts/GybZtYpZ.chunk.js +3 -0
  279. package/dist/scripts/GybZtYpZ.chunk.js.map +1 -0
  280. package/dist/scripts/H13OLF2T.chunk.js +2 -0
  281. package/dist/scripts/H13OLF2T.chunk.js.map +1 -0
  282. package/dist/scripts/HdH1xgCy.chunk.js +2 -0
  283. package/dist/scripts/HdH1xgCy.chunk.js.map +1 -0
  284. package/dist/scripts/K65Dt7jg.chunk.js +2 -0
  285. package/dist/scripts/K65Dt7jg.chunk.js.map +1 -0
  286. package/dist/scripts/M-TSYEoo.chunk.js +2 -0
  287. package/dist/scripts/M-TSYEoo.chunk.js.map +1 -0
  288. package/dist/scripts/O9F9Sybw.chunk.js +34 -0
  289. package/dist/scripts/O9F9Sybw.chunk.js.map +1 -0
  290. package/dist/scripts/PRj0OsVz.chunk.js +2 -0
  291. package/dist/scripts/PRj0OsVz.chunk.js.map +1 -0
  292. package/dist/scripts/SsbfqiCA.chunk.js +2 -0
  293. package/dist/scripts/SsbfqiCA.chunk.js.map +1 -0
  294. package/dist/scripts/app-BDrXtKwD.js +228 -0
  295. package/dist/scripts/app-BDrXtKwD.js.map +1 -0
  296. package/dist/scripts/bOC-mo3v.chunk.js +2 -0
  297. package/dist/scripts/bOC-mo3v.chunk.js.map +1 -0
  298. package/dist/scripts/cCAKx9a1.chunk.js +2 -0
  299. package/dist/scripts/cCAKx9a1.chunk.js.map +1 -0
  300. package/dist/scripts/csPZD_eN.chunk.js +2 -0
  301. package/dist/scripts/csPZD_eN.chunk.js.map +1 -0
  302. package/dist/scripts/iTBVzKEZ.chunk.js +2 -0
  303. package/dist/scripts/iTBVzKEZ.chunk.js.map +1 -0
  304. package/dist/scripts/jhT3mG38.chunk.js +2 -0
  305. package/dist/scripts/jhT3mG38.chunk.js.map +1 -0
  306. package/dist/scripts/lcnUAi0K.chunk.js +2 -0
  307. package/dist/scripts/lcnUAi0K.chunk.js.map +1 -0
  308. package/dist/scripts/mBxqWw8V.chunk.js +2 -0
  309. package/dist/scripts/mBxqWw8V.chunk.js.map +1 -0
  310. package/dist/scripts/nR79RHo_.chunk.js +15 -0
  311. package/dist/scripts/nR79RHo_.chunk.js.map +1 -0
  312. package/dist/scripts/sFV5nxD4.chunk.js +2 -0
  313. package/dist/scripts/sFV5nxD4.chunk.js.map +1 -0
  314. package/dist/scripts/t5MCaEYl.chunk.js +2 -0
  315. package/dist/scripts/t5MCaEYl.chunk.js.map +1 -0
  316. package/dist/scripts/uoF107dn.chunk.js +380 -0
  317. package/dist/scripts/uoF107dn.chunk.js.map +1 -0
  318. package/dist/scripts/zeFMHqhy.chunk.js +2 -0
  319. package/dist/scripts/zeFMHqhy.chunk.js.map +1 -0
  320. package/package.json +5 -3
  321. package/typings/utils/imports.d.ts +1 -1
  322. package/dist/css/1103-reports-d3d5cc00db.chunk.css +0 -31
  323. package/dist/css/1456-reports-4a5871a275.chunk.css +0 -9
  324. package/dist/css/1648-reports-012456ba48.chunk.css +0 -2
  325. package/dist/css/209-reports-c33663a53e.chunk.css +0 -11
  326. package/dist/css/2150-reports-84ec0e9770.chunk.css +0 -4
  327. package/dist/css/2217-reports-74dec0a3fe.chunk.css +0 -32
  328. package/dist/css/2997-reports-e08318f14b.chunk.css +0 -9
  329. package/dist/css/2999-reports-f190450b10.chunk.css +0 -60
  330. package/dist/css/4582-reports-d3d5cc00db.chunk.css +0 -31
  331. package/dist/css/5304-reports-22c2d8d635.chunk.css +0 -9
  332. package/dist/css/6007-reports-5ba77c55a3.chunk.css +0 -8
  333. package/dist/css/6031-reports-d558076846.chunk.css +0 -6
  334. package/dist/css/6356-reports-8c5b220bf6.chunk.css +0 -1
  335. package/dist/css/6811-reports-baf2e97e71.chunk.css +0 -35
  336. package/dist/css/7723-reports-8c6d3c414b.chunk.css +0 -4
  337. package/dist/css/7747-reports-2d9e191b5a.chunk.css +0 -12
  338. package/dist/css/8087-reports-cfe23ba648.chunk.css +0 -10
  339. package/dist/css/8294-reports-c797263ac2.chunk.css +0 -1
  340. package/dist/css/8418-reports-0ada3f3ce2.chunk.css +0 -29
  341. package/dist/css/8450-reports-06493dfde5.chunk.css +0 -9
  342. package/dist/css/8622-reports-9e8970cc7f.chunk.css +0 -8
  343. package/dist/css/8839-reports-8e46644943.chunk.css +0 -1
  344. package/dist/css/8989-reports-92b4f1dde8.chunk.css +0 -8
  345. package/dist/css/9059-reports-a2ac630ebc.chunk.css +0 -35
  346. package/dist/css/9285-reports-5b9af8380f.chunk.css +0 -13
  347. package/dist/css/9661-reports-7435e94a85.chunk.css +0 -4
  348. package/dist/css/9822-reports-a1db1900c7.chunk.css +0 -8
  349. package/dist/css/9949-reports-f22fa2b407.chunk.css +0 -15
  350. package/dist/css/reports-app-b4c4ec5632.css +0 -32
  351. package/dist/languages/en.json +0 -1
  352. package/dist/scripts/1103-d77d388f5b-reports.chunk.js +0 -1
  353. package/dist/scripts/1177-7cf7817e74-reports.chunk.js +0 -1
  354. package/dist/scripts/1456-019d93e620-reports.chunk.js +0 -1
  355. package/dist/scripts/1648-e892604f5a-reports.chunk.js +0 -1
  356. package/dist/scripts/1934-ca8497c768-reports.chunk.js +0 -2
  357. package/dist/scripts/1934-ca8497c768-reports.chunk.js.LICENSE.txt +0 -9
  358. package/dist/scripts/2087-e0ef668e1f-reports.chunk.js +0 -1
  359. package/dist/scripts/209-79eb8be706-reports.chunk.js +0 -1
  360. package/dist/scripts/2150-4e9e1fb433-reports.chunk.js +0 -1
  361. package/dist/scripts/2217-15fa35197a-reports.chunk.js +0 -1
  362. package/dist/scripts/2476-a700f69dc4-reports.chunk.js +0 -1
  363. package/dist/scripts/2539-04dfb4f4f1-reports.chunk.js +0 -1
  364. package/dist/scripts/2997-62d81c3442-reports.chunk.js +0 -1
  365. package/dist/scripts/2999-785ad6d65a-reports.chunk.js +0 -2
  366. package/dist/scripts/2999-785ad6d65a-reports.chunk.js.LICENSE.txt +0 -1
  367. package/dist/scripts/312-8b006e92ff-reports.chunk.js +0 -1
  368. package/dist/scripts/4234-e3c04f41eb-reports.chunk.js +0 -1
  369. package/dist/scripts/4372-26474a3318-reports.chunk.js +0 -1
  370. package/dist/scripts/438-b444dfb8c6-reports.chunk.js +0 -1
  371. package/dist/scripts/4582-230f130f41-reports.chunk.js +0 -1
  372. package/dist/scripts/4752-db4247883d-reports.chunk.js +0 -2
  373. package/dist/scripts/4752-db4247883d-reports.chunk.js.LICENSE.txt +0 -118
  374. package/dist/scripts/4979-7e14b09f33-reports.chunk.js +0 -1
  375. package/dist/scripts/5051-72c53737e2-reports.chunk.js +0 -1
  376. package/dist/scripts/5091-ddd6f61b55-reports.chunk.js +0 -1
  377. package/dist/scripts/5173-cce3b37672-reports.chunk.js +0 -1
  378. package/dist/scripts/5177-a7372e7b8d-reports.chunk.js +0 -1
  379. package/dist/scripts/5304-d5674b32b4-reports.chunk.js +0 -1
  380. package/dist/scripts/5802-2125536755-reports.chunk.js +0 -1
  381. package/dist/scripts/6007-673706aa31-reports.chunk.js +0 -1
  382. package/dist/scripts/6031-b1c60cc409-reports.chunk.js +0 -1
  383. package/dist/scripts/6081-2bbda6cac3-reports.chunk.js +0 -1
  384. package/dist/scripts/6180-bdb237ffbe-reports.chunk.js +0 -2
  385. package/dist/scripts/6180-bdb237ffbe-reports.chunk.js.LICENSE.txt +0 -1
  386. package/dist/scripts/6198-189ddde870-reports.chunk.js +0 -1
  387. package/dist/scripts/6356-a1b313c73e-reports.chunk.js +0 -1
  388. package/dist/scripts/645-e8b19128e5-reports.chunk.js +0 -1
  389. package/dist/scripts/6545-f07bcd318a-reports.chunk.js +0 -1
  390. package/dist/scripts/6811-40ded4c089-reports.chunk.js +0 -1
  391. package/dist/scripts/7238-de5ef0ebfb-reports.chunk.js +0 -1
  392. package/dist/scripts/7562-748e60c3fc-reports.chunk.js +0 -1
  393. package/dist/scripts/7709-82750ee317-reports.chunk.js +0 -1
  394. package/dist/scripts/7723-1799f5aa26-reports.chunk.js +0 -1
  395. package/dist/scripts/7747-d34db3ff10-reports.chunk.js +0 -2
  396. package/dist/scripts/7747-d34db3ff10-reports.chunk.js.LICENSE.txt +0 -1
  397. package/dist/scripts/7925-c6c532c9c4-reports.chunk.js +0 -1
  398. package/dist/scripts/8087-1d9e9701e5-reports.chunk.js +0 -1
  399. package/dist/scripts/8393-c37cc22b4c-reports.chunk.js +0 -1
  400. package/dist/scripts/8418-9f96caf039-reports.chunk.js +0 -1
  401. package/dist/scripts/8450-f2d5d99614-reports.chunk.js +0 -1
  402. package/dist/scripts/8591-4811082ab0-reports.chunk.js +0 -1
  403. package/dist/scripts/8622-ee045574e2-reports.chunk.js +0 -1
  404. package/dist/scripts/8839-711793a97f-reports.chunk.js +0 -1
  405. package/dist/scripts/8989-ca5cab7f45-reports.chunk.js +0 -1
  406. package/dist/scripts/9059-b2dcf3cdb2-reports.chunk.js +0 -1
  407. package/dist/scripts/9162-7ffc692736-reports.chunk.js +0 -1
  408. package/dist/scripts/9285-ecddd01efb-reports.chunk.js +0 -1
  409. package/dist/scripts/9590-41bb23ae71-reports.chunk.js +0 -1
  410. package/dist/scripts/9647-f0c111d3f0-reports.chunk.js +0 -1
  411. package/dist/scripts/9661-2dee4c3417-reports.chunk.js +0 -1
  412. package/dist/scripts/9822-621fac26e6-reports.chunk.js +0 -1
  413. package/dist/scripts/9895-3b3feb12b9-reports.chunk.js +0 -1
  414. package/dist/scripts/9949-6b1d1f4d32-reports.chunk.js +0 -1
  415. package/dist/scripts/bundle-31e281ea99.min.js +0 -2
  416. package/dist/scripts/bundle-31e281ea99.min.js.LICENSE.txt +0 -108
  417. package/dist/scripts/polyfills-3db3f009d4.min.js +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"O9F9Sybw.chunk.js","sources":["../../../../libs/shared/src/apps/analytics/hooks/UseMarkAnswers.ts","../../../../libs/shared/src/apps/analytics/components/questions-list/interaction-response-item/components/AnswerContainer.tsx","../../../../libs/shared/src/apps/analytics/components/questions-list/interaction-response-item/components/IllustrationResponse.tsx","../../../../libs/shared/src/apps/analytics/components/questions-list/interaction-response-item/components/MissingWordResponse.tsx","../../../../libs/shared/src/apps/analytics/components/questions-list/interaction-response-item/components/MultipleChoiceResponse.tsx","../../../../libs/shared/src/apps/analytics/components/questions-list/interaction-response-item/components/ShortAnswerResponse.tsx","../../../../libs/shared/src/apps/analytics/components/questions-list/interaction-response-item/components/TrueOrFalseResponse.tsx","../../../../libs/shared/src/apps/analytics/components/questions-list/interaction-response-item/ResponseItemComponentLookup.tsx","../../../../libs/shared/src/components/interaction-response/InteractionResponseCorrectness.tsx","../../../../libs/shared/src/components/interaction-response/InteractionStudentDetailsHeader.tsx","../../../../libs/shared/src/images/svg/objects/CrossCircleFilledSvg.tsx","../../../../libs/shared/src/images/svg/objects/CrossCircleSvg.tsx","../../../../libs/shared/src/images/svg/status/CheckCircleSvg.tsx","../../../../libs/shared/src/components/interaction-response/MarkResponse.tsx","../../../../libs/shared/src/components/interaction-response/response-types/NoResponse.tsx","../../../../libs/shared/src/apps/analytics/components/questions-list/interaction-response-item/InteractionResponseItem.tsx","../../../../libs/shared/src/components/interaction-response/response-types/IllustrationResponse.tsx","../../../../libs/shared/src/components/interaction-response/response-types/MissingWordResponse.tsx","../../../../../node_modules/simplebar/dist/simplebar-core.esm.js","../../../../../node_modules/simplebar-react/dist/simplebar-react.esm.js","../../../../libs/shared/src/components/interaction-answers/multiple-choice/MultipleChoiceInteractionAnswers.tsx","../../../../libs/shared/src/components/interaction-response/response-types/MultipleChoiceResponse.tsx","../../../../libs/shared/src/components/interaction-response/response-types/ShortAnswerResponse.tsx","../../../../libs/shared/src/components/interaction-answers/true-or-false/TrueOrFalseInteractionAnswers.tsx","../../../../libs/shared/src/components/interaction-response/response-types/TrueOrFalseResponse.tsx","../../../../libs/shared/src/components/interaction-response/response-types/ResponseComponentLookup.tsx","../../../../libs/shared/src/components/interaction-response/InteractionResponse.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { InteractiveResultsRequests } from 'libs/shared/apps/analytics/flight-requests/InteractiveResultsRequests';\nimport { getMarkedAnswerId } from 'libs/shared/apps/analytics/utils/InteractiveUtils';\nimport { InteractiveAnswerStatus } from 'libs/shared/enums/InteractiveAnswerStatus';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { StudentAnswer } from 'libs/shared/interfaces';\n\nconst getPhrase = LanguageService.encloseNamespace('reportsShared.dataHooks');\n\nexport type MarkedAnswerHash = { [id: string]: StudentAnswer };\n\n/**\n * This hook manages the storing of a marked answer hash in state and then the submitting\n * of those answers via an api call.\n */\nexport const useMarkAnswers = (interactiveId: string, interactiveMetadataId: string, onDone?: () => void) => {\n const [ markedAnswers, setMarkedAnswers ] = useState<MarkedAnswerHash>({});\n\n const dispatch = useDispatch();\n const alerts = useAlerts();\n\n function addMarkedAnswers(answers: StudentAnswer[], status: InteractiveAnswerStatus): void {\n answers.forEach(a => {\n setMarkedAnswers(m => ({ ...m, [getMarkedAnswerId(a)]: { ...a, status } }));\n });\n }\n\n function submitMarkedAnswers(): void {\n const answers = Object.keys(markedAnswers).map(key => markedAnswers[key]);\n\n if (!answers.length)\n return;\n\n let completeCount = 0;\n let successCount = 0;\n\n function onSuccess(): void {\n successCount++;\n }\n\n function onAlways(): void {\n completeCount++;\n\n if (completeCount === answers.length)\n onComplete();\n }\n\n function onComplete(): void {\n let alertMessage = '';\n let useErrorAlert = false;\n\n if (successCount === 0) {\n alertMessage = getPhrase('error', { smartCount: answers.length });\n useErrorAlert = true;\n }\n\n if (successCount < completeCount) {\n alertMessage = getPhrase('success', { smartCount: successCount })\n + ` ${getPhrase('partialError', { smartCount: completeCount - successCount })}`;\n }\n\n if (successCount === completeCount) {\n alertMessage = getPhrase('success', { smartCount: successCount });\n }\n\n useErrorAlert\n ? alerts.error(alertMessage)\n : alerts.success(alertMessage);\n\n setMarkedAnswers({});\n\n onDone && onDone();\n }\n\n answers.forEach(({ id, resultId, questionId, status }) => {\n Flight.fetch(dispatch, InteractiveResultsRequests.mark(\n interactiveId,\n interactiveMetadataId,\n id,\n { id, resultId, questionId, status },\n onSuccess,\n null,\n onAlways\n ));\n });\n }\n\n return {\n markedAnswers,\n addMarkedAnswers,\n submitMarkedAnswers\n };\n};","import React from 'react';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { InteractiveAnswerStatus } from 'libs/shared/enums/InteractiveAnswerStatus';\nimport { CloseSvg } from 'libs/shared/images/svg/actions/CloseSvg';\nimport { CheckSvg } from 'libs/shared/images/svg/status/CheckSvg';\nimport { StudentAnswer } from 'libs/shared/interfaces';\n\ninterface AnswerContainerProps extends React.PropsWithChildren {\n answer: StudentAnswer;\n textClassName?: string;\n customAnswer?: boolean;\n}\n\nexport function AnswerContainer(props: AnswerContainerProps) {\n const { answer } = props;\n\n function getBgColour(status: InteractiveAnswerStatus) {\n switch (status) {\n case InteractiveAnswerStatus.Correct: return 'bg-light-green';\n case InteractiveAnswerStatus.Incorrect: return 'bg-light-red';\n case InteractiveAnswerStatus.PendingReview: return 'bg-light-blue';\n }\n }\n\n return (\n <div key={answer.id} className={`${getBgColour(answer.status)} rounded p-2 mb-2`}>\n <div className='d-flex align-items-center gap-2'>\n {answer.status === InteractiveAnswerStatus.Correct && <SvgContainer svg={CheckSvg} className='svg-container flex-shrink-0 text-success' />}\n {answer.status === InteractiveAnswerStatus.Incorrect && <SvgContainer svg={CloseSvg} className='svg-container flex-shrink-0 text-danger' />}\n {!props.customAnswer && <span className={props.textClassName}>{answer.text}</span>}\n </div>\n {props.children}\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AnswerContainer } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/components/AnswerContainer';\nimport { ResponseItemComponentProps } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/ResponseItemComponentLookup';\n\nconst namespace = 'shared.interactionResponses';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function IllustrationResponse(props: ResponseItemComponentProps): JSX.Element {\n const answer = ArrayHelper.first(props.answers);\n\n if (!answer)\n return <></>;\n\n return (\n <AnswerContainer answer={answer} customAnswer>\n <div className='ratio ratio-16x9'>\n <img\n className='img-fluid bg-white border rounded h-100 w-100'\n src={answer.text}\n alt={`${getPhrase('illustrationAlt')}: ${props.interaction.name}`}\n />\n </div>\n {props.children}\n </AnswerContainer>\n );\n}","import React from 'react';\n\nimport { AnswerContainer } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/components/AnswerContainer';\nimport { ResponseItemComponentProps } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/ResponseItemComponentLookup';\n\n\nexport function MissingWordResponse(props: ResponseItemComponentProps) {\n if (!props.answers.length) return <></>;\n\n return (\n <ul className='list-unstyled'>\n {props.answers.map(answer => (\n <li key={answer.id}>\n <AnswerContainer\n answer={answer}\n textClassName='bg-white p-1 border border-gray-300 rounded'\n />\n </li>\n ))}\n </ul>\n );\n}","import React from 'react';\n\nimport { AnswerContainer } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/components/AnswerContainer';\nimport { ResponseItemComponentProps } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/ResponseItemComponentLookup';\n\nexport function MultipleChoiceResponse(props: ResponseItemComponentProps) {\n if (!props.answers.length) return <></>;\n\n return (\n <ul className='list-unstyled'>\n {props.answers.map(answer => (\n <li key={answer.id}>\n <AnswerContainer answer={answer} />\n </li>\n ))}\n </ul>\n );\n}","import React from 'react';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AnswerContainer } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/components/AnswerContainer';\nimport { ResponseItemComponentProps } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/ResponseItemComponentLookup';\n\nexport function ShortAnswerResponse(props: ResponseItemComponentProps): JSX.Element {\n const answer = ArrayHelper.first(props.answers);\n\n if (!answer)\n return <></>;\n\n return (\n <AnswerContainer answer={answer}>\n {props.children}\n </AnswerContainer>\n );\n}","import React from 'react';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AnswerContainer } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/components/AnswerContainer';\nimport { ResponseItemComponentProps } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/ResponseItemComponentLookup';\n\nexport function TrueOrFalseResponse(props: ResponseItemComponentProps) {\n const answer = ArrayHelper.first(props.answers);\n\n if (!answer)\n return <></>;\n\n return (\n <AnswerContainer answer={answer} />\n );\n}","import React from 'react';\n\nimport { Interaction, InteractionTypeId, StudentAnswer, User } from 'libs/shared/interfaces';\n\nimport { IllustrationResponse } from './components/IllustrationResponse';\nimport { MissingWordResponse } from './components/MissingWordResponse';\nimport { MultipleChoiceResponse } from './components/MultipleChoiceResponse';\nimport { ShortAnswerResponse } from './components/ShortAnswerResponse';\nimport { TrueOrFalseResponse } from './components/TrueOrFalseResponse';\n\nexport interface ResponseItemComponentProps extends React.PropsWithChildren {\n interaction: Interaction;\n answers: StudentAnswer[];\n imageCdnUrl: string;\n user: User;\n showFeedback?: boolean;\n showAvatar?: boolean;\n anonymisedUserName?: string;\n}\nconst NoResponseRequired = () => <></>;\n\nexport const ResponseItemComponentLookup: {\n [typeId: number]: (props: ResponseItemComponentProps) => JSX.Element\n} = {\n [InteractionTypeId.Annotation]: NoResponseRequired,\n [InteractionTypeId.Image]: NoResponseRequired,\n [InteractionTypeId.MissingWord]: MissingWordResponse,\n [InteractionTypeId.MultipleChoice]: MultipleChoiceResponse,\n [InteractionTypeId.TrueOrFalse]: TrueOrFalseResponse,\n [InteractionTypeId.ShortAnswer]: ShortAnswerResponse,\n [InteractionTypeId.Illustration]: IllustrationResponse\n};","import React from 'react';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { InteractionCorrectness } from 'libs/shared/enums/InteractionCorrectness';\nimport { CloseSvg } from 'libs/shared/images/svg/actions/CloseSvg';\nimport { TickSvg } from 'libs/shared/images/svg/status/TickSvg';\n\n\ninterface InteractionResponseCorrectnessProps {\n correctness: InteractionCorrectness;\n}\n\nexport function InteractionResponseCorrectness(props: InteractionResponseCorrectnessProps): JSX.Element {\n return (\n <>\n {props.correctness === InteractionCorrectness.Correct &&\n <div className='ms-2 text-success'>\n <SvgContainer svg={TickSvg} />\n </div>\n }\n {props.correctness === InteractionCorrectness.Incorrect &&\n <div className='ms-2 text-danger'>\n <SvgContainer svg={CloseSvg} />\n </div>\n }\n </>\n );\n}","import React from 'react';\n\nimport { InteractionCorrectness } from 'libs/shared/enums/InteractionCorrectness';\nimport { StudentResults } from 'libs/shared/interfaces';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport { InteractionResponseCorrectness } from './InteractionResponseCorrectness';\n\ninterface InteractionStudentDetailsProps {\n studentResults: StudentResults;\n correctness: InteractionCorrectness;\n anonymisedUserName?: string;\n}\n\nexport function InteractionStudentDetailsHeader(props: InteractionStudentDetailsProps): JSX.Element {\n return (\n <div className='d-flex align-items-center justify-content-between mb-2'>\n <p className='fw-semibold mb-0'>\n {props.anonymisedUserName || UserHelper.getFullName(props.studentResults.user)}\n </p>\n <InteractionResponseCorrectness correctness={props.correctness} />\n </div>\n );\n}","import React from 'react';\n\nexport function CrossCircleFilledSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M12.034 21C7.044 21 3 16.968 3 11.993s4.045-9.006 9.034-9.006 9.034 4.032 9.034 9.006S17.023 21 12.034 21M14.95 8.22l-2.946 2.867-2.89-2.91a.646.646 0 0 0-.909 0 .633.633 0 0 0 0 .9l2.891 2.91-2.89 2.922a.633.633 0 0 0 0 .9c.25.25.657.25.908 0l2.89-2.92 2.946 2.92c.251.25.658.25.909 0a.633.633 0 0 0 0-.9l-2.946-2.921L15.86 9.12a.633.633 0 0 0 0-.9.646.646 0 0 0-.909 0'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function CrossCircleSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <rect width='24' height='24' fill='white'/>\n <path\n fill='currentColor'\n fillRule='evenodd'\n d='M21 12c0-4.972-4.028-9-9-9s-9 4.028-9 9 4.028 9 9 9 9-4.028 9-9M6.492 6.492A7.74 7.74 0 0 1 12 4.212c2.081 0 4.037.809 5.508 2.28A7.74 7.74 0 0 1 19.788 12c0 2.081-.809 4.037-2.28 5.508A7.74 7.74 0 0 1 12 19.788a7.74 7.74 0 0 1-5.508-2.28A7.74 7.74 0 0 1 4.212 12c0-2.081.809-4.037 2.28-5.508m8.46 1.728-2.947 2.867-2.89-2.91a.646.646 0 0 0-.909 0 .633.633 0 0 0 0 .9l2.891 2.91-2.89 2.922a.633.633 0 0 0 0 .9c.25.25.657.25.908 0l2.89-2.92 2.946 2.92c.251.25.658.25.909 0a.633.633 0 0 0 0-.9l-2.946-2.921L15.86 9.12a.633.633 0 0 0 0-.9.646.646 0 0 0-.909 0'\n clipRule='evenodd'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function CheckCircleSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M12 3c4.972 0 9 4.028 9 9s-4.028 9-9 9-9-4.028-9-9 4.028-9 9-9m4.244 5.578a.77.77 0 0 0-1.058.068l-4.722 5.18-1.684-1.615a.77.77 0 0 0-1.06 0 .7.7 0 0 0 0 1.018l2.25 2.16a.77.77 0 0 0 1.094-.035l5.25-5.76a.7.7 0 0 0-.07-1.016'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { InteractionCorrectness } from 'libs/shared/enums/InteractionCorrectness';\nimport { InteractiveAnswerStatus } from 'libs/shared/enums/InteractiveAnswerStatus';\nimport { CrossCircleFilledSvg } from 'libs/shared/images/svg/objects/CrossCircleFilledSvg';\nimport { CrossCircleSvg } from 'libs/shared/images/svg/objects/CrossCircleSvg';\nimport { CheckCircleOutlineSvg } from 'libs/shared/images/svg/status/CheckCircleOutlineSvg';\nimport { CheckCircleSvg } from 'libs/shared/images/svg/status/CheckCircleSvg';\nimport { StudentAnswer, StudentAttempt } from 'libs/shared/interfaces';\n\n\ninterface MarkResponseProps {\n studentAttempt: StudentAttempt;\n correctness: InteractionCorrectness;\n markInteraction: (answers: StudentAnswer[], status: InteractiveAnswerStatus) => void;\n markedStatus?: InteractiveAnswerStatus;\n}\n\nexport function MarkResponse(props: MarkResponseProps): JSX.Element {\n if (props.correctness !== InteractionCorrectness.AwaitingMarking)\n return <></>;\n\n return (\n <div className='d-flex justify-content-end gap-2 mt-2'>\n <div className={\n `d-flex flex-column justify-content-end cursor-pointer\n ${props.markedStatus === InteractiveAnswerStatus.Correct ? 'text-success' : ''}`\n }>\n <SvgContainer\n svg={props.markedStatus === InteractiveAnswerStatus.Correct\n ? CheckCircleSvg\n : CheckCircleOutlineSvg\n }\n onClick={\n () => props.markInteraction(props.studentAttempt.answers, InteractiveAnswerStatus.Correct)\n }\n />\n </div>\n <div className={\n `d-flex flex-column justify-content-end cursor-pointer\n ${props.markedStatus === InteractiveAnswerStatus.Incorrect ? ' text-danger' : ''}`\n }>\n <SvgContainer\n svg={props.markedStatus === InteractiveAnswerStatus.Incorrect\n ? CrossCircleFilledSvg\n : CrossCircleSvg\n }\n onClick={\n () => props.markInteraction(props.studentAttempt.answers, InteractiveAnswerStatus.Incorrect)\n }\n />\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nconst namespace = 'interactives.responseTypes';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function NoResponse(): JSX.Element {\n return (\n <p className='p-2'><em>{getPhrase('noResponse')}</em></p>\n );\n}","import React from 'react';\n\nimport { ResponseItemComponentLookup } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/ResponseItemComponentLookup';\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { InteractionResponseCorrectness } from 'libs/shared/components/interaction-response/InteractionResponseCorrectness';\nimport { InteractionStudentDetailsHeader } from 'libs/shared/components/interaction-response/InteractionStudentDetailsHeader';\nimport { MarkResponse } from 'libs/shared/components/interaction-response/MarkResponse';\nimport { NoResponse } from 'libs/shared/components/interaction-response/response-types/NoResponse';\nimport { InteractiveAnswerStatus } from 'libs/shared/enums/InteractiveAnswerStatus';\nimport { Interaction, StudentAnswer, StudentResults } from 'libs/shared/interfaces';\nimport { InteractiveCorrectnessHelper } from 'libs/shared/utils/InteractiveCorrectnessHelper';\nimport { getStudentAttempt, getStudentResult } from 'libs/shared/utils/InteractiveHelper';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport styles from './interaction-response-item.module.scss';\n\ninterface InteractionResponseProps {\n interaction: Interaction;\n studentResults: StudentResults;\n imageCdnUrl: string;\n markInteraction: (answers: StudentAnswer[], status: InteractiveAnswerStatus) => void;\n markedStatus?: InteractiveAnswerStatus;\n showStudentDetails?: boolean;\n className?: string;\n showFeedback?: boolean;\n showAvatar?: boolean;\n anonymisedUserName?: string;\n responseComponentClass?: string;\n}\n\nexport function InteractionResponseItem(props: InteractionResponseProps): JSX.Element {\n const ResponseItemComponent = ResponseItemComponentLookup[props.interaction.typeId];\n\n if (!ResponseItemComponent)\n return <></>;\n\n const result = getStudentResult(props.studentResults);\n\n const studentAttempt = getStudentAttempt(props.interaction.id, result);\n\n const correctness = InteractiveCorrectnessHelper.isInteractionCorrect(props.interaction, result);\n\n return (\n <div className='position-relative'>\n <div className={`rounded ${props.className ?? ''}`}>\n <div className='d-flex'>\n {!!props.showStudentDetails &&\n <div className='me-2'>\n <div className={styles.avatarContainer}>\n <Avatar\n imageCdnUrl={props.imageCdnUrl}\n initials={props.anonymisedUserName\n ? UserHelper.getInitialsFromFullName(props.anonymisedUserName)\n : UserHelper.getInitials(props.studentResults.user?.name, props.studentResults.user?.surname)\n }\n imageUrl={props.anonymisedUserName ? null : props.studentResults.user?.avatar?.url}\n showAnonymousUser={!!props.studentResults?.user?.sessionId}\n />\n </div>\n \n </div>\n }\n <div className='flex-grow-1'>\n {!!props.showStudentDetails &&\n <InteractionStudentDetailsHeader\n studentResults={props.studentResults}\n correctness={correctness}\n anonymisedUserName={props.anonymisedUserName}\n />\n }\n <div className='d-flex justify-content-between'>\n <div className={`flex-grow-1 mb-2 ${props.responseComponentClass ? props.responseComponentClass : ''}`}>\n {studentAttempt\n ? <ResponseItemComponent\n interaction={props.interaction}\n answers={studentAttempt.answers}\n imageCdnUrl={props.imageCdnUrl}\n user={props.studentResults.user}\n showFeedback={props.showFeedback}\n showAvatar={props.showAvatar}\n >\n <MarkResponse\n studentAttempt={studentAttempt}\n correctness={correctness}\n markInteraction={props.markInteraction}\n markedStatus={props.markedStatus}\n />\n </ResponseItemComponent>\n : <NoResponse />\n }\n </div>\n {!props.showStudentDetails &&\n <InteractionResponseCorrectness correctness={correctness} />\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ResponseComponentProps } from './ResponseComponentLookup';\n\nexport function IllustrationResponse(props: ResponseComponentProps): JSX.Element {\n // There should only be one answer.\n const answer = ArrayHelper.first(props.answers);\n\n if (!answer)\n return <></>;\n\n let className = 'rounded p-2 mb-2 w-50';\n\n if (!props.reportsStyling)\n className += ' text-white';\n \n return (\n <div className={className}>\n <img\n className='img-fluid border rounded'\n src={answer.text}\n alt={`Illustrated answer to the question: ${props.interaction.name}`}\n />\n </div>\n );\n}","import React from 'react';\n\nimport { InteractiveAnswerStatus } from 'libs/shared/enums/InteractiveAnswerStatus';\n\nimport { ResponseComponentProps } from './ResponseComponentLookup';\n\nconst PLACEHOLDER = 'cv-missing-word-';\n\nexport function MissingWordResponse(props: ResponseComponentProps): JSX.Element {\n const cleanedUp = (props.interaction.data.sentence as string).replace(/{([^{}]*)}/g, (match: string, val: string) => {\n return `{${PLACEHOLDER}${val}}`;\n });\n\n const items = cleanedUp.split(/{([^{}]*)}/g);\n\n let className = 'p-2';\n\n if (!props.reportsStyling)\n className += ' border rounded';\n\n return (\n <div className={className}>\n {items.map((item, idx) => {\n if (!item.startsWith(PLACEHOLDER))\n return item;\n\n const order = item.replace(PLACEHOLDER, '');\n\n const actionableItem = props.interaction.actionableItems.find(a => a.order.toString() === order);\n\n if (!actionableItem)\n return;\n\n // eslint-disable-next-line\n const answer = props.answers.find(a => a.id == actionableItem.id);\n \n if (!answer)\n return;\n\n if (!props.showFeedback)\n return <strong key={idx} className='text-info'>{answer.text}</strong>;\n\n const isCorrect = answer.status === InteractiveAnswerStatus.Correct;\n\n return (\n <React.Fragment key={idx}>\n {!isCorrect && <><del className='text-danger'><strong>{answer.text}</strong></del>&nbsp;</>}\n <strong className='text-success'>{actionableItem.name}</strong>\n </React.Fragment>\n );\n })}\n </div>\n );\n}","/**\n * SimpleBar.js - v5.3.0\n * Scrollbars, simpler.\n * https://grsmto.github.io/simplebar/\n *\n * Made by Adrien Denat from a fork by Jonathan Nicol\n * Under MIT License\n */\n\nimport 'core-js/modules/es.array.filter';\nimport 'core-js/modules/es.array.for-each';\nimport 'core-js/modules/es.array.iterator';\nimport 'core-js/modules/es.object.assign';\nimport 'core-js/modules/es.object.to-string';\nimport 'core-js/modules/es.parse-int';\nimport 'core-js/modules/es.string.iterator';\nimport 'core-js/modules/es.weak-map';\nimport 'core-js/modules/web.dom-collections.iterator';\nimport throttle from 'lodash.throttle';\nimport debounce from 'lodash.debounce';\nimport memoize from 'lodash.memoize';\nimport ResizeObserver from 'resize-observer-polyfill';\nimport canUseDOM from 'can-use-dom';\nimport 'core-js/modules/es.array.reduce';\nimport 'core-js/modules/es.function.name';\nimport 'core-js/modules/es.regexp.exec';\nimport 'core-js/modules/es.string.match';\nimport 'core-js/modules/es.string.replace';\n\nvar cachedScrollbarWidth = null;\nvar cachedDevicePixelRatio = null;\n\nif (canUseDOM) {\n window.addEventListener('resize', function () {\n if (cachedDevicePixelRatio !== window.devicePixelRatio) {\n cachedDevicePixelRatio = window.devicePixelRatio;\n cachedScrollbarWidth = null;\n }\n });\n}\n\nfunction scrollbarWidth() {\n if (cachedScrollbarWidth === null) {\n if (typeof document === 'undefined') {\n cachedScrollbarWidth = 0;\n return cachedScrollbarWidth;\n }\n\n var body = document.body;\n var box = document.createElement('div');\n box.classList.add('simplebar-hide-scrollbar');\n body.appendChild(box);\n var width = box.getBoundingClientRect().right;\n body.removeChild(box);\n cachedScrollbarWidth = width;\n }\n\n return cachedScrollbarWidth;\n}\n\nfunction getElementWindow(element) {\n if (!element || !element.ownerDocument || !element.ownerDocument.defaultView) {\n return window;\n }\n\n return element.ownerDocument.defaultView;\n}\nfunction getElementDocument(element) {\n if (!element || !element.ownerDocument) {\n return document;\n }\n\n return element.ownerDocument;\n}\n\nvar SimpleBar =\n/*#__PURE__*/\nfunction () {\n function SimpleBar(element, options) {\n var _this = this;\n\n this.onScroll = function () {\n var elWindow = getElementWindow(_this.el);\n\n if (!_this.scrollXTicking) {\n elWindow.requestAnimationFrame(_this.scrollX);\n _this.scrollXTicking = true;\n }\n\n if (!_this.scrollYTicking) {\n elWindow.requestAnimationFrame(_this.scrollY);\n _this.scrollYTicking = true;\n }\n };\n\n this.scrollX = function () {\n if (_this.axis.x.isOverflowing) {\n _this.showScrollbar('x');\n\n _this.positionScrollbar('x');\n }\n\n _this.scrollXTicking = false;\n };\n\n this.scrollY = function () {\n if (_this.axis.y.isOverflowing) {\n _this.showScrollbar('y');\n\n _this.positionScrollbar('y');\n }\n\n _this.scrollYTicking = false;\n };\n\n this.onMouseEnter = function () {\n _this.showScrollbar('x');\n\n _this.showScrollbar('y');\n };\n\n this.onMouseMove = function (e) {\n _this.mouseX = e.clientX;\n _this.mouseY = e.clientY;\n\n if (_this.axis.x.isOverflowing || _this.axis.x.forceVisible) {\n _this.onMouseMoveForAxis('x');\n }\n\n if (_this.axis.y.isOverflowing || _this.axis.y.forceVisible) {\n _this.onMouseMoveForAxis('y');\n }\n };\n\n this.onMouseLeave = function () {\n _this.onMouseMove.cancel();\n\n if (_this.axis.x.isOverflowing || _this.axis.x.forceVisible) {\n _this.onMouseLeaveForAxis('x');\n }\n\n if (_this.axis.y.isOverflowing || _this.axis.y.forceVisible) {\n _this.onMouseLeaveForAxis('y');\n }\n\n _this.mouseX = -1;\n _this.mouseY = -1;\n };\n\n this.onWindowResize = function () {\n // Recalculate scrollbarWidth in case it's a zoom\n _this.scrollbarWidth = _this.getScrollbarWidth();\n\n _this.hideNativeScrollbar();\n };\n\n this.hideScrollbars = function () {\n _this.axis.x.track.rect = _this.axis.x.track.el.getBoundingClientRect();\n _this.axis.y.track.rect = _this.axis.y.track.el.getBoundingClientRect();\n\n if (!_this.isWithinBounds(_this.axis.y.track.rect)) {\n _this.axis.y.scrollbar.el.classList.remove(_this.classNames.visible);\n\n _this.axis.y.isVisible = false;\n }\n\n if (!_this.isWithinBounds(_this.axis.x.track.rect)) {\n _this.axis.x.scrollbar.el.classList.remove(_this.classNames.visible);\n\n _this.axis.x.isVisible = false;\n }\n };\n\n this.onPointerEvent = function (e) {\n var isWithinTrackXBounds, isWithinTrackYBounds;\n _this.axis.x.track.rect = _this.axis.x.track.el.getBoundingClientRect();\n _this.axis.y.track.rect = _this.axis.y.track.el.getBoundingClientRect();\n\n if (_this.axis.x.isOverflowing || _this.axis.x.forceVisible) {\n isWithinTrackXBounds = _this.isWithinBounds(_this.axis.x.track.rect);\n }\n\n if (_this.axis.y.isOverflowing || _this.axis.y.forceVisible) {\n isWithinTrackYBounds = _this.isWithinBounds(_this.axis.y.track.rect);\n } // If any pointer event is called on the scrollbar\n\n\n if (isWithinTrackXBounds || isWithinTrackYBounds) {\n // Preventing the event's default action stops text being\n // selectable during the drag.\n e.preventDefault(); // Prevent event leaking\n\n e.stopPropagation();\n\n if (e.type === 'mousedown') {\n if (isWithinTrackXBounds) {\n _this.axis.x.scrollbar.rect = _this.axis.x.scrollbar.el.getBoundingClientRect();\n\n if (_this.isWithinBounds(_this.axis.x.scrollbar.rect)) {\n _this.onDragStart(e, 'x');\n } else {\n _this.onTrackClick(e, 'x');\n }\n }\n\n if (isWithinTrackYBounds) {\n _this.axis.y.scrollbar.rect = _this.axis.y.scrollbar.el.getBoundingClientRect();\n\n if (_this.isWithinBounds(_this.axis.y.scrollbar.rect)) {\n _this.onDragStart(e, 'y');\n } else {\n _this.onTrackClick(e, 'y');\n }\n }\n }\n }\n };\n\n this.drag = function (e) {\n var eventOffset;\n var track = _this.axis[_this.draggedAxis].track;\n var trackSize = track.rect[_this.axis[_this.draggedAxis].sizeAttr];\n var scrollbar = _this.axis[_this.draggedAxis].scrollbar;\n var contentSize = _this.contentWrapperEl[_this.axis[_this.draggedAxis].scrollSizeAttr];\n var hostSize = parseInt(_this.elStyles[_this.axis[_this.draggedAxis].sizeAttr], 10);\n e.preventDefault();\n e.stopPropagation();\n\n if (_this.draggedAxis === 'y') {\n eventOffset = e.pageY;\n } else {\n eventOffset = e.pageX;\n } // Calculate how far the user's mouse is from the top/left of the scrollbar (minus the dragOffset).\n\n\n var dragPos = eventOffset - track.rect[_this.axis[_this.draggedAxis].offsetAttr] - _this.axis[_this.draggedAxis].dragOffset; // Convert the mouse position into a percentage of the scrollbar height/width.\n\n var dragPerc = dragPos / (trackSize - scrollbar.size); // Scroll the content by the same percentage.\n\n var scrollPos = dragPerc * (contentSize - hostSize); // Fix browsers inconsistency on RTL\n\n if (_this.draggedAxis === 'x') {\n scrollPos = _this.isRtl && SimpleBar.getRtlHelpers().isRtlScrollbarInverted ? scrollPos - (trackSize + scrollbar.size) : scrollPos;\n scrollPos = _this.isRtl && SimpleBar.getRtlHelpers().isRtlScrollingInverted ? -scrollPos : scrollPos;\n }\n\n _this.contentWrapperEl[_this.axis[_this.draggedAxis].scrollOffsetAttr] = scrollPos;\n };\n\n this.onEndDrag = function (e) {\n var elDocument = getElementDocument(_this.el);\n var elWindow = getElementWindow(_this.el);\n e.preventDefault();\n e.stopPropagation();\n\n _this.el.classList.remove(_this.classNames.dragging);\n\n elDocument.removeEventListener('mousemove', _this.drag, true);\n elDocument.removeEventListener('mouseup', _this.onEndDrag, true);\n _this.removePreventClickId = elWindow.setTimeout(function () {\n // Remove these asynchronously so we still suppress click events\n // generated simultaneously with mouseup.\n elDocument.removeEventListener('click', _this.preventClick, true);\n elDocument.removeEventListener('dblclick', _this.preventClick, true);\n _this.removePreventClickId = null;\n });\n };\n\n this.preventClick = function (e) {\n e.preventDefault();\n e.stopPropagation();\n };\n\n this.el = element;\n this.minScrollbarWidth = 20;\n this.options = Object.assign({}, SimpleBar.defaultOptions, {}, options);\n this.classNames = Object.assign({}, SimpleBar.defaultOptions.classNames, {}, this.options.classNames);\n this.axis = {\n x: {\n scrollOffsetAttr: 'scrollLeft',\n sizeAttr: 'width',\n scrollSizeAttr: 'scrollWidth',\n offsetSizeAttr: 'offsetWidth',\n offsetAttr: 'left',\n overflowAttr: 'overflowX',\n dragOffset: 0,\n isOverflowing: true,\n isVisible: false,\n forceVisible: false,\n track: {},\n scrollbar: {}\n },\n y: {\n scrollOffsetAttr: 'scrollTop',\n sizeAttr: 'height',\n scrollSizeAttr: 'scrollHeight',\n offsetSizeAttr: 'offsetHeight',\n offsetAttr: 'top',\n overflowAttr: 'overflowY',\n dragOffset: 0,\n isOverflowing: true,\n isVisible: false,\n forceVisible: false,\n track: {},\n scrollbar: {}\n }\n };\n this.removePreventClickId = null; // Don't re-instantiate over an existing one\n\n if (SimpleBar.instances.has(this.el)) {\n return;\n }\n\n this.recalculate = throttle(this.recalculate.bind(this), 64);\n this.onMouseMove = throttle(this.onMouseMove.bind(this), 64);\n this.hideScrollbars = debounce(this.hideScrollbars.bind(this), this.options.timeout);\n this.onWindowResize = debounce(this.onWindowResize.bind(this), 64, {\n leading: true\n });\n SimpleBar.getRtlHelpers = memoize(SimpleBar.getRtlHelpers);\n this.init();\n }\n /**\n * Static properties\n */\n\n /**\n * Helper to fix browsers inconsistency on RTL:\n * - Firefox inverts the scrollbar initial position\n * - IE11 inverts both scrollbar position and scrolling offset\n * Directly inspired by @KingSora's OverlayScrollbars https://github.com/KingSora/OverlayScrollbars/blob/master/js/OverlayScrollbars.js#L1634\n */\n\n\n SimpleBar.getRtlHelpers = function getRtlHelpers() {\n var dummyDiv = document.createElement('div');\n dummyDiv.innerHTML = '<div class=\"hs-dummy-scrollbar-size\"><div style=\"height: 200%; width: 200%; margin: 10px 0;\"></div></div>';\n var scrollbarDummyEl = dummyDiv.firstElementChild;\n document.body.appendChild(scrollbarDummyEl);\n var dummyContainerChild = scrollbarDummyEl.firstElementChild;\n scrollbarDummyEl.scrollLeft = 0;\n var dummyContainerOffset = SimpleBar.getOffset(scrollbarDummyEl);\n var dummyContainerChildOffset = SimpleBar.getOffset(dummyContainerChild);\n scrollbarDummyEl.scrollLeft = 999;\n var dummyContainerScrollOffsetAfterScroll = SimpleBar.getOffset(dummyContainerChild);\n return {\n // determines if the scrolling is responding with negative values\n isRtlScrollingInverted: dummyContainerOffset.left !== dummyContainerChildOffset.left && dummyContainerChildOffset.left - dummyContainerScrollOffsetAfterScroll.left !== 0,\n // determines if the origin scrollbar position is inverted or not (positioned on left or right)\n isRtlScrollbarInverted: dummyContainerOffset.left !== dummyContainerChildOffset.left\n };\n };\n\n SimpleBar.getOffset = function getOffset(el) {\n var rect = el.getBoundingClientRect();\n var elDocument = getElementDocument(el);\n var elWindow = getElementWindow(el);\n return {\n top: rect.top + (elWindow.pageYOffset || elDocument.documentElement.scrollTop),\n left: rect.left + (elWindow.pageXOffset || elDocument.documentElement.scrollLeft)\n };\n };\n\n var _proto = SimpleBar.prototype;\n\n _proto.init = function init() {\n // Save a reference to the instance, so we know this DOM node has already been instancied\n SimpleBar.instances.set(this.el, this); // We stop here on server-side\n\n if (canUseDOM) {\n this.initDOM();\n this.scrollbarWidth = this.getScrollbarWidth();\n this.recalculate();\n this.initListeners();\n }\n };\n\n _proto.initDOM = function initDOM() {\n var _this2 = this;\n\n // make sure this element doesn't have the elements yet\n if (Array.prototype.filter.call(this.el.children, function (child) {\n return child.classList.contains(_this2.classNames.wrapper);\n }).length) {\n // assume that element has his DOM already initiated\n this.wrapperEl = this.el.querySelector(\".\" + this.classNames.wrapper);\n this.contentWrapperEl = this.options.scrollableNode || this.el.querySelector(\".\" + this.classNames.contentWrapper);\n this.contentEl = this.options.contentNode || this.el.querySelector(\".\" + this.classNames.contentEl);\n this.offsetEl = this.el.querySelector(\".\" + this.classNames.offset);\n this.maskEl = this.el.querySelector(\".\" + this.classNames.mask);\n this.placeholderEl = this.findChild(this.wrapperEl, \".\" + this.classNames.placeholder);\n this.heightAutoObserverWrapperEl = this.el.querySelector(\".\" + this.classNames.heightAutoObserverWrapperEl);\n this.heightAutoObserverEl = this.el.querySelector(\".\" + this.classNames.heightAutoObserverEl);\n this.axis.x.track.el = this.findChild(this.el, \".\" + this.classNames.track + \".\" + this.classNames.horizontal);\n this.axis.y.track.el = this.findChild(this.el, \".\" + this.classNames.track + \".\" + this.classNames.vertical);\n } else {\n // Prepare DOM\n this.wrapperEl = document.createElement('div');\n this.contentWrapperEl = document.createElement('div');\n this.offsetEl = document.createElement('div');\n this.maskEl = document.createElement('div');\n this.contentEl = document.createElement('div');\n this.placeholderEl = document.createElement('div');\n this.heightAutoObserverWrapperEl = document.createElement('div');\n this.heightAutoObserverEl = document.createElement('div');\n this.wrapperEl.classList.add(this.classNames.wrapper);\n this.contentWrapperEl.classList.add(this.classNames.contentWrapper);\n this.offsetEl.classList.add(this.classNames.offset);\n this.maskEl.classList.add(this.classNames.mask);\n this.contentEl.classList.add(this.classNames.contentEl);\n this.placeholderEl.classList.add(this.classNames.placeholder);\n this.heightAutoObserverWrapperEl.classList.add(this.classNames.heightAutoObserverWrapperEl);\n this.heightAutoObserverEl.classList.add(this.classNames.heightAutoObserverEl);\n\n while (this.el.firstChild) {\n this.contentEl.appendChild(this.el.firstChild);\n }\n\n this.contentWrapperEl.appendChild(this.contentEl);\n this.offsetEl.appendChild(this.contentWrapperEl);\n this.maskEl.appendChild(this.offsetEl);\n this.heightAutoObserverWrapperEl.appendChild(this.heightAutoObserverEl);\n this.wrapperEl.appendChild(this.heightAutoObserverWrapperEl);\n this.wrapperEl.appendChild(this.maskEl);\n this.wrapperEl.appendChild(this.placeholderEl);\n this.el.appendChild(this.wrapperEl);\n }\n\n if (!this.axis.x.track.el || !this.axis.y.track.el) {\n var track = document.createElement('div');\n var scrollbar = document.createElement('div');\n track.classList.add(this.classNames.track);\n scrollbar.classList.add(this.classNames.scrollbar);\n track.appendChild(scrollbar);\n this.axis.x.track.el = track.cloneNode(true);\n this.axis.x.track.el.classList.add(this.classNames.horizontal);\n this.axis.y.track.el = track.cloneNode(true);\n this.axis.y.track.el.classList.add(this.classNames.vertical);\n this.el.appendChild(this.axis.x.track.el);\n this.el.appendChild(this.axis.y.track.el);\n }\n\n this.axis.x.scrollbar.el = this.axis.x.track.el.querySelector(\".\" + this.classNames.scrollbar);\n this.axis.y.scrollbar.el = this.axis.y.track.el.querySelector(\".\" + this.classNames.scrollbar);\n\n if (!this.options.autoHide) {\n this.axis.x.scrollbar.el.classList.add(this.classNames.visible);\n this.axis.y.scrollbar.el.classList.add(this.classNames.visible);\n }\n\n this.el.setAttribute('data-simplebar', 'init');\n };\n\n _proto.initListeners = function initListeners() {\n var _this3 = this;\n\n var elWindow = getElementWindow(this.el); // Event listeners\n\n if (this.options.autoHide) {\n this.el.addEventListener('mouseenter', this.onMouseEnter);\n }\n\n ['mousedown', 'click', 'dblclick'].forEach(function (e) {\n _this3.el.addEventListener(e, _this3.onPointerEvent, true);\n });\n ['touchstart', 'touchend', 'touchmove'].forEach(function (e) {\n _this3.el.addEventListener(e, _this3.onPointerEvent, {\n capture: true,\n passive: true\n });\n });\n this.el.addEventListener('mousemove', this.onMouseMove);\n this.el.addEventListener('mouseleave', this.onMouseLeave);\n this.contentWrapperEl.addEventListener('scroll', this.onScroll); // Browser zoom triggers a window resize\n\n elWindow.addEventListener('resize', this.onWindowResize); // Hack for https://github.com/WICG/ResizeObserver/issues/38\n\n var resizeObserverStarted = false;\n var resizeObserver = elWindow.ResizeObserver || ResizeObserver;\n this.resizeObserver = new resizeObserver(function () {\n if (!resizeObserverStarted) return;\n\n _this3.recalculate();\n });\n this.resizeObserver.observe(this.el);\n this.resizeObserver.observe(this.contentEl);\n elWindow.requestAnimationFrame(function () {\n resizeObserverStarted = true;\n }); // This is required to detect horizontal scroll. Vertical scroll only needs the resizeObserver.\n\n this.mutationObserver = new elWindow.MutationObserver(this.recalculate);\n this.mutationObserver.observe(this.contentEl, {\n childList: true,\n subtree: true,\n characterData: true\n });\n };\n\n _proto.recalculate = function recalculate() {\n var elWindow = getElementWindow(this.el);\n this.elStyles = elWindow.getComputedStyle(this.el);\n this.isRtl = this.elStyles.direction === 'rtl';\n var isHeightAuto = this.heightAutoObserverEl.offsetHeight <= 1;\n var isWidthAuto = this.heightAutoObserverEl.offsetWidth <= 1;\n var contentElOffsetWidth = this.contentEl.offsetWidth;\n var contentWrapperElOffsetWidth = this.contentWrapperEl.offsetWidth;\n var elOverflowX = this.elStyles.overflowX;\n var elOverflowY = this.elStyles.overflowY;\n this.contentEl.style.padding = this.elStyles.paddingTop + \" \" + this.elStyles.paddingRight + \" \" + this.elStyles.paddingBottom + \" \" + this.elStyles.paddingLeft;\n this.wrapperEl.style.margin = \"-\" + this.elStyles.paddingTop + \" -\" + this.elStyles.paddingRight + \" -\" + this.elStyles.paddingBottom + \" -\" + this.elStyles.paddingLeft;\n var contentElScrollHeight = this.contentEl.scrollHeight;\n var contentElScrollWidth = this.contentEl.scrollWidth;\n this.contentWrapperEl.style.height = isHeightAuto ? 'auto' : '100%'; // Determine placeholder size\n\n this.placeholderEl.style.width = isWidthAuto ? contentElOffsetWidth + \"px\" : 'auto';\n this.placeholderEl.style.height = contentElScrollHeight + \"px\";\n var contentWrapperElOffsetHeight = this.contentWrapperEl.offsetHeight;\n this.axis.x.isOverflowing = contentElScrollWidth > contentElOffsetWidth;\n this.axis.y.isOverflowing = contentElScrollHeight > contentWrapperElOffsetHeight; // Set isOverflowing to false if user explicitely set hidden overflow\n\n this.axis.x.isOverflowing = elOverflowX === 'hidden' ? false : this.axis.x.isOverflowing;\n this.axis.y.isOverflowing = elOverflowY === 'hidden' ? false : this.axis.y.isOverflowing;\n this.axis.x.forceVisible = this.options.forceVisible === 'x' || this.options.forceVisible === true;\n this.axis.y.forceVisible = this.options.forceVisible === 'y' || this.options.forceVisible === true;\n this.hideNativeScrollbar(); // Set isOverflowing to false if scrollbar is not necessary (content is shorter than offset)\n\n var offsetForXScrollbar = this.axis.x.isOverflowing ? this.scrollbarWidth : 0;\n var offsetForYScrollbar = this.axis.y.isOverflowing ? this.scrollbarWidth : 0;\n this.axis.x.isOverflowing = this.axis.x.isOverflowing && contentElScrollWidth > contentWrapperElOffsetWidth - offsetForYScrollbar;\n this.axis.y.isOverflowing = this.axis.y.isOverflowing && contentElScrollHeight > contentWrapperElOffsetHeight - offsetForXScrollbar;\n this.axis.x.scrollbar.size = this.getScrollbarSize('x');\n this.axis.y.scrollbar.size = this.getScrollbarSize('y');\n this.axis.x.scrollbar.el.style.width = this.axis.x.scrollbar.size + \"px\";\n this.axis.y.scrollbar.el.style.height = this.axis.y.scrollbar.size + \"px\";\n this.positionScrollbar('x');\n this.positionScrollbar('y');\n this.toggleTrackVisibility('x');\n this.toggleTrackVisibility('y');\n }\n /**\n * Calculate scrollbar size\n */\n ;\n\n _proto.getScrollbarSize = function getScrollbarSize(axis) {\n if (axis === void 0) {\n axis = 'y';\n }\n\n if (!this.axis[axis].isOverflowing) {\n return 0;\n }\n\n var contentSize = this.contentEl[this.axis[axis].scrollSizeAttr];\n var trackSize = this.axis[axis].track.el[this.axis[axis].offsetSizeAttr];\n var scrollbarSize;\n var scrollbarRatio = trackSize / contentSize; // Calculate new height/position of drag handle.\n\n scrollbarSize = Math.max(~~(scrollbarRatio * trackSize), this.options.scrollbarMinSize);\n\n if (this.options.scrollbarMaxSize) {\n scrollbarSize = Math.min(scrollbarSize, this.options.scrollbarMaxSize);\n }\n\n return scrollbarSize;\n };\n\n _proto.positionScrollbar = function positionScrollbar(axis) {\n if (axis === void 0) {\n axis = 'y';\n }\n\n if (!this.axis[axis].isOverflowing) {\n return;\n }\n\n var contentSize = this.contentWrapperEl[this.axis[axis].scrollSizeAttr];\n var trackSize = this.axis[axis].track.el[this.axis[axis].offsetSizeAttr];\n var hostSize = parseInt(this.elStyles[this.axis[axis].sizeAttr], 10);\n var scrollbar = this.axis[axis].scrollbar;\n var scrollOffset = this.contentWrapperEl[this.axis[axis].scrollOffsetAttr];\n scrollOffset = axis === 'x' && this.isRtl && SimpleBar.getRtlHelpers().isRtlScrollingInverted ? -scrollOffset : scrollOffset;\n var scrollPourcent = scrollOffset / (contentSize - hostSize);\n var handleOffset = ~~((trackSize - scrollbar.size) * scrollPourcent);\n handleOffset = axis === 'x' && this.isRtl && SimpleBar.getRtlHelpers().isRtlScrollbarInverted ? handleOffset + (trackSize - scrollbar.size) : handleOffset;\n scrollbar.el.style.transform = axis === 'x' ? \"translate3d(\" + handleOffset + \"px, 0, 0)\" : \"translate3d(0, \" + handleOffset + \"px, 0)\";\n };\n\n _proto.toggleTrackVisibility = function toggleTrackVisibility(axis) {\n if (axis === void 0) {\n axis = 'y';\n }\n\n var track = this.axis[axis].track.el;\n var scrollbar = this.axis[axis].scrollbar.el;\n\n if (this.axis[axis].isOverflowing || this.axis[axis].forceVisible) {\n track.style.visibility = 'visible';\n this.contentWrapperEl.style[this.axis[axis].overflowAttr] = 'scroll';\n } else {\n track.style.visibility = 'hidden';\n this.contentWrapperEl.style[this.axis[axis].overflowAttr] = 'hidden';\n } // Even if forceVisible is enabled, scrollbar itself should be hidden\n\n\n if (this.axis[axis].isOverflowing) {\n scrollbar.style.display = 'block';\n } else {\n scrollbar.style.display = 'none';\n }\n };\n\n _proto.hideNativeScrollbar = function hideNativeScrollbar() {\n this.offsetEl.style[this.isRtl ? 'left' : 'right'] = this.axis.y.isOverflowing || this.axis.y.forceVisible ? \"-\" + this.scrollbarWidth + \"px\" : 0;\n this.offsetEl.style.bottom = this.axis.x.isOverflowing || this.axis.x.forceVisible ? \"-\" + this.scrollbarWidth + \"px\" : 0;\n }\n /**\n * On scroll event handling\n */\n ;\n\n _proto.onMouseMoveForAxis = function onMouseMoveForAxis(axis) {\n if (axis === void 0) {\n axis = 'y';\n }\n\n this.axis[axis].track.rect = this.axis[axis].track.el.getBoundingClientRect();\n this.axis[axis].scrollbar.rect = this.axis[axis].scrollbar.el.getBoundingClientRect();\n var isWithinScrollbarBoundsX = this.isWithinBounds(this.axis[axis].scrollbar.rect);\n\n if (isWithinScrollbarBoundsX) {\n this.axis[axis].scrollbar.el.classList.add(this.classNames.hover);\n } else {\n this.axis[axis].scrollbar.el.classList.remove(this.classNames.hover);\n }\n\n if (this.isWithinBounds(this.axis[axis].track.rect)) {\n this.showScrollbar(axis);\n this.axis[axis].track.el.classList.add(this.classNames.hover);\n } else {\n this.axis[axis].track.el.classList.remove(this.classNames.hover);\n }\n };\n\n _proto.onMouseLeaveForAxis = function onMouseLeaveForAxis(axis) {\n if (axis === void 0) {\n axis = 'y';\n }\n\n this.axis[axis].track.el.classList.remove(this.classNames.hover);\n this.axis[axis].scrollbar.el.classList.remove(this.classNames.hover);\n };\n\n /**\n * Show scrollbar\n */\n _proto.showScrollbar = function showScrollbar(axis) {\n if (axis === void 0) {\n axis = 'y';\n }\n\n var scrollbar = this.axis[axis].scrollbar.el;\n\n if (!this.axis[axis].isVisible) {\n scrollbar.classList.add(this.classNames.visible);\n this.axis[axis].isVisible = true;\n }\n\n if (this.options.autoHide) {\n this.hideScrollbars();\n }\n }\n /**\n * Hide Scrollbar\n */\n ;\n\n /**\n * on scrollbar handle drag movement starts\n */\n _proto.onDragStart = function onDragStart(e, axis) {\n if (axis === void 0) {\n axis = 'y';\n }\n\n var elDocument = getElementDocument(this.el);\n var elWindow = getElementWindow(this.el);\n var scrollbar = this.axis[axis].scrollbar; // Measure how far the user's mouse is from the top of the scrollbar drag handle.\n\n var eventOffset = axis === 'y' ? e.pageY : e.pageX;\n this.axis[axis].dragOffset = eventOffset - scrollbar.rect[this.axis[axis].offsetAttr];\n this.draggedAxis = axis;\n this.el.classList.add(this.classNames.dragging);\n elDocument.addEventListener('mousemove', this.drag, true);\n elDocument.addEventListener('mouseup', this.onEndDrag, true);\n\n if (this.removePreventClickId === null) {\n elDocument.addEventListener('click', this.preventClick, true);\n elDocument.addEventListener('dblclick', this.preventClick, true);\n } else {\n elWindow.clearTimeout(this.removePreventClickId);\n this.removePreventClickId = null;\n }\n }\n /**\n * Drag scrollbar handle\n */\n ;\n\n _proto.onTrackClick = function onTrackClick(e, axis) {\n var _this4 = this;\n\n if (axis === void 0) {\n axis = 'y';\n }\n\n if (!this.options.clickOnTrack) return;\n var elWindow = getElementWindow(this.el);\n this.axis[axis].scrollbar.rect = this.axis[axis].scrollbar.el.getBoundingClientRect();\n var scrollbar = this.axis[axis].scrollbar;\n var scrollbarOffset = scrollbar.rect[this.axis[axis].offsetAttr];\n var hostSize = parseInt(this.elStyles[this.axis[axis].sizeAttr], 10);\n var scrolled = this.contentWrapperEl[this.axis[axis].scrollOffsetAttr];\n var t = axis === 'y' ? this.mouseY - scrollbarOffset : this.mouseX - scrollbarOffset;\n var dir = t < 0 ? -1 : 1;\n var scrollSize = dir === -1 ? scrolled - hostSize : scrolled + hostSize;\n\n var scrollTo = function scrollTo() {\n if (dir === -1) {\n if (scrolled > scrollSize) {\n var _this4$contentWrapper;\n\n scrolled -= _this4.options.clickOnTrackSpeed;\n\n _this4.contentWrapperEl.scrollTo((_this4$contentWrapper = {}, _this4$contentWrapper[_this4.axis[axis].offsetAttr] = scrolled, _this4$contentWrapper));\n\n elWindow.requestAnimationFrame(scrollTo);\n }\n } else {\n if (scrolled < scrollSize) {\n var _this4$contentWrapper2;\n\n scrolled += _this4.options.clickOnTrackSpeed;\n\n _this4.contentWrapperEl.scrollTo((_this4$contentWrapper2 = {}, _this4$contentWrapper2[_this4.axis[axis].offsetAttr] = scrolled, _this4$contentWrapper2));\n\n elWindow.requestAnimationFrame(scrollTo);\n }\n }\n };\n\n scrollTo();\n }\n /**\n * Getter for content element\n */\n ;\n\n _proto.getContentElement = function getContentElement() {\n return this.contentEl;\n }\n /**\n * Getter for original scrolling element\n */\n ;\n\n _proto.getScrollElement = function getScrollElement() {\n return this.contentWrapperEl;\n };\n\n _proto.getScrollbarWidth = function getScrollbarWidth() {\n // Try/catch for FF 56 throwing on undefined computedStyles\n try {\n // Detect browsers supporting CSS scrollbar styling and do not calculate\n if (getComputedStyle(this.contentWrapperEl, '::-webkit-scrollbar').display === 'none' || 'scrollbarWidth' in document.documentElement.style || '-ms-overflow-style' in document.documentElement.style) {\n return 0;\n } else {\n return scrollbarWidth();\n }\n } catch (e) {\n return scrollbarWidth();\n }\n };\n\n _proto.removeListeners = function removeListeners() {\n var _this5 = this;\n\n var elWindow = getElementWindow(this.el); // Event listeners\n\n if (this.options.autoHide) {\n this.el.removeEventListener('mouseenter', this.onMouseEnter);\n }\n\n ['mousedown', 'click', 'dblclick'].forEach(function (e) {\n _this5.el.removeEventListener(e, _this5.onPointerEvent, true);\n });\n ['touchstart', 'touchend', 'touchmove'].forEach(function (e) {\n _this5.el.removeEventListener(e, _this5.onPointerEvent, {\n capture: true,\n passive: true\n });\n });\n this.el.removeEventListener('mousemove', this.onMouseMove);\n this.el.removeEventListener('mouseleave', this.onMouseLeave);\n\n if (this.contentWrapperEl) {\n this.contentWrapperEl.removeEventListener('scroll', this.onScroll);\n }\n\n elWindow.removeEventListener('resize', this.onWindowResize);\n\n if (this.mutationObserver) {\n this.mutationObserver.disconnect();\n }\n\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n } // Cancel all debounced functions\n\n\n this.recalculate.cancel();\n this.onMouseMove.cancel();\n this.hideScrollbars.cancel();\n this.onWindowResize.cancel();\n }\n /**\n * UnMount mutation observer and delete SimpleBar instance from DOM element\n */\n ;\n\n _proto.unMount = function unMount() {\n this.removeListeners();\n SimpleBar.instances.delete(this.el);\n }\n /**\n * Check if mouse is within bounds\n */\n ;\n\n _proto.isWithinBounds = function isWithinBounds(bbox) {\n return this.mouseX >= bbox.left && this.mouseX <= bbox.left + bbox.width && this.mouseY >= bbox.top && this.mouseY <= bbox.top + bbox.height;\n }\n /**\n * Find element children matches query\n */\n ;\n\n _proto.findChild = function findChild(el, query) {\n var matches = el.matches || el.webkitMatchesSelector || el.mozMatchesSelector || el.msMatchesSelector;\n return Array.prototype.filter.call(el.children, function (child) {\n return matches.call(child, query);\n })[0];\n };\n\n return SimpleBar;\n}();\n\nSimpleBar.defaultOptions = {\n autoHide: true,\n forceVisible: false,\n clickOnTrack: true,\n clickOnTrackSpeed: 40,\n classNames: {\n contentEl: 'simplebar-content',\n contentWrapper: 'simplebar-content-wrapper',\n offset: 'simplebar-offset',\n mask: 'simplebar-mask',\n wrapper: 'simplebar-wrapper',\n placeholder: 'simplebar-placeholder',\n scrollbar: 'simplebar-scrollbar',\n track: 'simplebar-track',\n heightAutoObserverWrapperEl: 'simplebar-height-auto-observer-wrapper',\n heightAutoObserverEl: 'simplebar-height-auto-observer',\n visible: 'simplebar-visible',\n horizontal: 'simplebar-horizontal',\n vertical: 'simplebar-vertical',\n hover: 'simplebar-hover',\n dragging: 'simplebar-dragging'\n },\n scrollbarMinSize: 25,\n scrollbarMaxSize: 0,\n timeout: 1000\n};\nSimpleBar.instances = new WeakMap();\n\nexport default SimpleBar;\n//# sourceMappingURL=simplebar-core.esm.js.map\n","/**\n * simplebar-react - v2.3.0\n * React component for SimpleBar\n * https://grsmto.github.io/simplebar/\n *\n * Made by Adrien Denat\n * Under MIT License\n */\n\nimport React, { useRef, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport SimpleBarJS from 'simplebar/dist/simplebar-core.esm';\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(source, true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(source).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\n/* Deprecated\n * Hardcore this here until we can safely deprecated it.\n * Helper function to retrieve options from element attributes\n */\n\nvar getOptions = function getOptions(obj) {\n var options = Array.prototype.reduce.call(obj, function (acc, attribute) {\n var option = attribute.name.match(/data-simplebar-(.+)/);\n\n if (option) {\n var key = option[1].replace(/\\W+(.)/g, function (x, chr) {\n return chr.toUpperCase();\n });\n\n switch (attribute.value) {\n case 'true':\n acc[key] = true;\n break;\n\n case 'false':\n acc[key] = false;\n break;\n\n case undefined:\n acc[key] = true;\n break;\n\n default:\n acc[key] = attribute.value;\n }\n }\n\n return acc;\n }, {});\n return options;\n};\n\nvar SimpleBar = React.forwardRef(function (_ref, ref) {\n var children = _ref.children,\n _ref$scrollableNodePr = _ref.scrollableNodeProps,\n scrollableNodeProps = _ref$scrollableNodePr === void 0 ? {} : _ref$scrollableNodePr,\n otherProps = _objectWithoutProperties(_ref, [\"children\", \"scrollableNodeProps\"]);\n\n var instance;\n var scrollableNodeRef = useRef();\n var elRef = useRef();\n var contentNodeRef = useRef();\n var options = {};\n var rest = {};\n var deprecatedOptions = [];\n Object.keys(otherProps).forEach(function (key) {\n if (Object.prototype.hasOwnProperty.call(SimpleBarJS.defaultOptions, key)) {\n options[key] = otherProps[key];\n } else if (key.match(/data-simplebar-(.+)/) && key !== 'data-simplebar-direction') {\n deprecatedOptions.push({\n name: key,\n value: otherProps[key]\n });\n } else {\n rest[key] = otherProps[key];\n }\n });\n\n if (deprecatedOptions.length) {\n console.warn(\"simplebar-react: this way of passing options is deprecated. Pass it like normal props instead:\\n 'data-simplebar-auto-hide=\\\"false\\\"' \\u2014> 'autoHide=\\\"false\\\"'\\n \");\n }\n\n useEffect(function () {\n scrollableNodeRef = scrollableNodeProps.ref || scrollableNodeRef;\n\n if (elRef.current) {\n instance = new SimpleBarJS(elRef.current, _objectSpread2({}, getOptions(deprecatedOptions), {}, options, {}, scrollableNodeRef && {\n scrollableNode: scrollableNodeRef.current\n }, {}, contentNodeRef.current && {\n contentNode: contentNodeRef.current\n }));\n\n if (ref) {\n ref.current = instance;\n }\n }\n\n return function () {\n instance.unMount();\n instance = null;\n };\n }, []);\n return React.createElement(\"div\", _extends({\n ref: elRef,\n \"data-simplebar\": true\n }, rest), React.createElement(\"div\", {\n className: \"simplebar-wrapper\"\n }, React.createElement(\"div\", {\n className: \"simplebar-height-auto-observer-wrapper\"\n }, React.createElement(\"div\", {\n className: \"simplebar-height-auto-observer\"\n })), React.createElement(\"div\", {\n className: \"simplebar-mask\"\n }, React.createElement(\"div\", {\n className: \"simplebar-offset\"\n }, typeof children === 'function' ? children({\n scrollableNodeRef: scrollableNodeRef,\n contentNodeRef: contentNodeRef\n }) : React.createElement(\"div\", _extends({}, scrollableNodeProps, {\n className: \"simplebar-content-wrapper\".concat(scrollableNodeProps.className ? \" \".concat(scrollableNodeProps.className) : '')\n }), React.createElement(\"div\", {\n className: \"simplebar-content\"\n }, children)))), React.createElement(\"div\", {\n className: \"simplebar-placeholder\"\n })), React.createElement(\"div\", {\n className: \"simplebar-track simplebar-horizontal\"\n }, React.createElement(\"div\", {\n className: \"simplebar-scrollbar\"\n })), React.createElement(\"div\", {\n className: \"simplebar-track simplebar-vertical\"\n }, React.createElement(\"div\", {\n className: \"simplebar-scrollbar\"\n })));\n});\nSimpleBar.displayName = 'SimpleBar';\nSimpleBar.propTypes = {\n children: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n scrollableNodeProps: PropTypes.object\n};\n\nexport default SimpleBar;\n","import React from 'react';\nimport { HtmlPortalNode, InPortal } from 'react-reverse-portal';\nimport SimpleBar from 'simplebar-react';\n\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { CloseSvg } from 'libs/shared/images/svg/actions/CloseSvg';\nimport { CrossCircleFilledSvg } from 'libs/shared/images/svg/objects/CrossCircleFilledSvg';\nimport { CheckCircleSvg } from 'libs/shared/images/svg/status/CheckCircleSvg';\nimport { CheckSvg } from 'libs/shared/images/svg/status/CheckSvg';\nimport { ActionableItem, Interaction } from 'libs/shared/interfaces';\n\nimport styles from './multiple-choice-interaction-answers.module.scss';\n\nconst alphabet = [ 'A', 'B', 'C', 'D' ];\n\ninterface MultipleChoiceInteractionAnswersProps {\n interaction: Interaction;\n showFeedback: boolean;\n getSelectedAnswer?: (actionableItemId: string) => string;\n imageApi?: string;\n userInitials?: string;\n userAvatar?: string;\n submitted?: boolean;\n size?: 'sm' | 'lg';\n showCorrectnessIcons?: boolean;\n\n /**\n * onSelectAnswer can be omitted when showing read-only results.\n */\n onSelectAnswer?: (answer: ActionableItem, checked: boolean) => void;\n\n onlyShowSelectedAnswer?: boolean;\n\n /**\n * Will hide the tick and cross from the answer tiles\n */\n hideFeedbackIcons?: boolean;\n unCheckedBackground?: string;\n\n leftHandSidePortalNode?: HtmlPortalNode;\n\n /**\n * Used when displaying the answer in reports\n */\n isDisplayOnly?: boolean;\n}\n\nMultipleChoiceInteractionAnswers.defaultProps = {\n size: 'lg',\n unCheckedBackground: 'bg-white'\n};\n\nexport function MultipleChoiceInteractionAnswers(props: MultipleChoiceInteractionAnswersProps): JSX.Element {\n const [ previewAnswer, setPreviewAnswer ] = React.useState<string>(null);\n\n const hasImages = !!props.interaction.actionableItems.find(a => !!a.data?.imageUrl);\n\n const scrollRef = React.useRef(null);\n\n const small = props.size === 'sm' || (hasImages && props.interaction.actionableItems.length > 2);\n\n return (\n <ul className={`${hasImages ? `row ${small && !props.isDisplayOnly ? 'px-lg-5 p-0' : ''}` : ''} list-unstyled`}>\n {props.interaction.actionableItems.map((a, index) => {\n const answer = props.getSelectedAnswer?.(a.id);\n const imageUrl = a.data?.imageUrl;\n const hasText = !!a.name;\n\n function onSelectAnswer(): void {\n if (props.submitted)\n return;\n\n if (props.onSelectAnswer)\n props.onSelectAnswer(a, !answer);\n\n setPreviewAnswer(answer ? null : a.id);\n }\n\n if (props.onlyShowSelectedAnswer && !answer)\n return <React.Fragment key={index}></React.Fragment>;\n\n let className = answer ?\n 'bg-blue text-white' :\n props.unCheckedBackground;\n\n let LeftPart = () => <>{alphabet[index]}</>;\n\n if (props.showFeedback) {\n if (!props.showCorrectnessIcons) {\n className = a.isCorrect ?\n 'bg-success text-white' :\n `bg-danger text-white ${styles.incorrect}`;\n }\n\n if (!props.hideFeedbackIcons) {\n LeftPart = () => {\n return (\n <>\n {a.isCorrect ?\n <SvgContainer size={SvgContainerSize.Small} svg={CheckSvg} /> :\n <SvgContainer size={SvgContainerSize.Small} svg={CloseSvg} />}\n </>\n );\n };\n }\n }\n\n /**\n * Allow keyboard controls, but not when we show feedback\n */\n const accessibility = props.showFeedback ? {} : {\n role: 'button',\n tabIndex: 0,\n onKeyDown: (e: React.KeyboardEvent) => e.key === 'Enter' && onSelectAnswer()\n };\n\n let hasImageClass = '';\n if (hasImages) {\n hasImageClass = 'col-6';\n }\n\n const showImagePreview = a.id.toString() === previewAnswer?.toString()\n && props.leftHandSidePortalNode\n && imageUrl\n && !props.submitted;\n\n return (\n <React.Fragment key={index}>\n {showImagePreview &&\n <InPortal node={props.leftHandSidePortalNode}>\n <SimpleBar className='h-100' ref={scrollRef}>\n <div className='p-3 d-flex flex-column h-100'>\n <div className='flex-grow-1'>\n <div className='cv-image-container text-center'>\n <img\n className='img-fluid rounded'\n src={imageUrl}\n alt={a.name || alphabet[index]}\n />\n </div>\n <div className={`${styles.answer} h6 text-center text-dark p-3`}>\n <span className={`d-inline-block ${hasText ? 'me-3' : ''} cv-multiple-choice-bullet`}><LeftPart /></span>\n {hasText && <span className='flex-grow-1 pe-4'>{a.name}</span>}\n </div>\n </div>\n <div className='text-end'>\n <DivButton\n className='btn btn-link'\n onClick={() => setPreviewAnswer(null)}\n >\n Close\n </DivButton>\n </div>\n </div>\n </SimpleBar>\n </InPortal>\n }\n <li className={`${hasImageClass} mb-3`}>\n <label\n className={`\n d-block\n rounded-3\n shadow-sm\n position-relative\n ${props.showFeedback ? '' : 'cursor-pointer'}\n ${styles.answer}\n ${className}\n ${hasImages ? 'mb-0 h-100' : ''}\n `}\n key={index}\n onClick={onSelectAnswer}\n {...accessibility}\n >\n {hasImages &&\n <div>\n {props.showCorrectnessIcons && (\n <div className={`${styles.svgFill} position-absolute top-0 start-0 p-2 z-1`}>\n {a.isCorrect\n ? <SvgContainer svg={CheckCircleSvg} size={SvgContainerSize.ExtraLarge} className='svg-container text-success' />\n : <SvgContainer svg={CrossCircleFilledSvg} size={SvgContainerSize.Large} className='svg-container text-red' />\n }\n </div>\n )}\n <span className={`d-block position-relative ${styles.imageContainer}`}>\n <span\n className={`\n ${styles.image}\n position-absolute\n start-0\n end-0\n top-0\n bottom-0\n rounded-top\n `}\n style={{ backgroundImage: imageUrl ? `url(${imageUrl})` : undefined }}\n title={a.name || alphabet[index]}\n />\n </span>\n </div>\n }\n <span className={`d-flex ${hasText || props.isDisplayOnly ? 'justify-content-between' : 'justify-content-center'} ${small ? 'p-2' : 'p-3'}`}>\n <span className={`d-inline-block ${hasText ? 'me-3' : ''} cv-multiple-choice-bullet`}><LeftPart /></span>\n {hasText && <span className='flex-grow-1 pe-4'>{a.name}</span>}\n {props.userAvatar && !props.onlyShowSelectedAnswer &&\n <span className={`${styles.avatarContainer} ${hasImages ? styles.avatarContainerImage : ''}`}>\n {answer &&\n <Avatar\n imageCdnUrl={props.imageApi}\n initials={props.userInitials}\n imageUrl={props.userAvatar}\n extraClasses={'border border-white'}\n />\n }\n </span>\n }\n </span>\n </label>\n </li>\n </React.Fragment>\n );\n })}\n </ul>\n );\n}","import React from 'react';\n\nimport { MultipleChoiceInteractionAnswers } from 'libs/shared/components/interaction-answers/multiple-choice/MultipleChoiceInteractionAnswers';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport { ResponseComponentProps } from './ResponseComponentLookup';\n\nimport styles from './response-types.module.scss';\n\nexport function MultipleChoiceResponse(props: ResponseComponentProps): JSX.Element {\n function getAnswer(id: string): string {\n // eslint-disable-next-line\n const answer = props.answers.find(a => a.id == id);\n return answer?.id;\n }\n\n let className = 'my-2';\n\n if (props.reportsStyling)\n className += ' mx-2';\n\n return (\n <div className={className}>\n <MultipleChoiceInteractionAnswers\n interaction={props.interaction}\n showFeedback={props.showFeedback}\n getSelectedAnswer={getAnswer}\n imageApi={props.imageCdnUrl}\n userInitials={props.anonymisedUserName\n ? UserHelper.getInitialsFromFullName(props.anonymisedUserName)\n : UserHelper.getInitials(props.user?.name, props.user?.surname)\n }\n userAvatar={props.anonymisedUserName ? null : props.user?.avatar?.url}\n onlyShowSelectedAnswer={!props.showAvatar}\n size='sm'\n unCheckedBackground={props.showFeedback ? '' : `${styles.uncheckedBackground} text-white`}\n isDisplayOnly\n />\n </div>\n );\n}","import React from 'react';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ResponseComponentProps } from './ResponseComponentLookup';\n\nexport function ShortAnswerResponse(props: ResponseComponentProps): JSX.Element {\n // There should only be one answer.\n const answer = ArrayHelper.first(props.answers);\n\n if (!answer)\n return <></>;\n\n let className = 'rounded p-2 mb-2';\n\n if (!props.reportsStyling)\n className += ' bg-blue text-white';\n \n return (\n <div className={className}>\n {answer.text}\n </div>\n );\n}","import React from 'react';\n\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { CloseSvg } from 'libs/shared/images/svg/actions/CloseSvg';\nimport { CheckSvg } from 'libs/shared/images/svg/status/CheckSvg';\nimport { ActionableItem, Interaction } from 'libs/shared/interfaces';\n\nimport styles from './true-or-false-interaction-answers.module.scss';\n\ninterface TrueOrFalseInteractionAnswersProps {\n className?: string;\n interaction: Interaction;\n showFeedback: boolean;\n getSelectedAnswer: (actionableItemId: string) => string;\n imageApi: string;\n userInitials: string;\n userAvatar: string;\n size?: 'sm' | 'lg'\n \n /**\n * onSelectAnswer can be omitted when showing read-only results.\n */\n onSelectAnswer?: (answer: ActionableItem) => void;\n\n /**\n * Will hide the tick and cross from the answer tiles\n */\n hideFeedbackIcons?: boolean;\n unCheckedBackground?: string;\n}\n\nTrueOrFalseInteractionAnswers.defaultProps = {\n size: 'lg',\n unCheckedBackground: 'bg-white'\n};\n\nexport function TrueOrFalseInteractionAnswers(props: TrueOrFalseInteractionAnswersProps): JSX.Element {\n function onSelectAnswer(answer: ActionableItem): void {\n if (props.onSelectAnswer)\n props.onSelectAnswer(answer);\n }\n \n return (\n <div\n className={`d-flex ${props.className ? props.className : ''} ${props.size === 'sm' ? 'mx-n1' : 'mx-n2'}`}>\n {props.interaction.actionableItems.map((a, index) => {\n const answer = props.getSelectedAnswer(a.id);\n\n let className = answer ?\n 'bg-blue text-white' :\n props.unCheckedBackground;\n\n let LeftPart = () => <></>;\n\n if (props.showFeedback) {\n className = a.isCorrect ?\n 'bg-success text-white' :\n `bg-danger text-white ${styles.incorrect}`;\n\n if (!props.hideFeedbackIcons) {\n LeftPart = () => {\n return (\n <>\n {a.isCorrect ?\n <SvgContainer size={SvgContainerSize.Small} svg={CheckSvg} /> :\n <SvgContainer size={SvgContainerSize.Small} svg={CloseSvg} />}\n </>\n );\n };\n }\n }\n\n /**\n * Allow keyboard controls, but not when we show feedback\n */\n const accessibility = props.showFeedback ? {} : {\n role: 'button',\n tabIndex: 0,\n onKeyDown: (e: React.KeyboardEvent) => e.key === 'Enter' && onSelectAnswer(a)\n };\n\n return (\n <label\n key={index}\n htmlFor={a.id}\n className={`\n rounded-3\n shadow-sm\n my-0\n position-relative\n overflow-hidden\n d-flex\n align-items-center\n justify-content-center\n ${props.size === 'sm' ? `${styles.small} mx-1 h5` : `${styles.large} mx-2 h4`}\n ${props.showFeedback ? '' : 'cursor-pointer'}\n ${className}`}\n {...accessibility}\n >\n <input\n id={a.id}\n type={'radio'}\n name='multiple-choice'\n checked={!!answer}\n onChange={() => onSelectAnswer(a)}\n disabled={props.showFeedback}\n hidden\n />\n {a.name}\n <span className={`position-absolute p-2 ${styles.feedback}`}><LeftPart /></span>\n <span className={`${styles.avatarContainer}${props.size === 'sm' ? ` ${styles.avatarContainerSmall}` : ''}`}>\n {answer &&\n <Avatar\n imageCdnUrl={props.imageApi}\n initials={props.userInitials}\n imageUrl={props.userAvatar}\n extraClasses={`border border-white ${props.size === 'sm' ? styles.avatarSmall : ''}`}\n />\n }\n </span>\n </label>\n );\n })}\n </div>\n );\n}","import React from 'react';\n\nimport { TrueOrFalseInteractionAnswers } from 'libs/shared/components/interaction-answers/true-or-false/TrueOrFalseInteractionAnswers';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport { ResponseComponentProps } from './ResponseComponentLookup';\n\nimport styles from './response-types.module.scss';\n\nexport function TrueOrFalseResponse(props: ResponseComponentProps): JSX.Element {\n function getAnswer(id: string): string {\n // eslint-disable-next-line\n const answer = props.answers.find(a => a.id == id);\n return answer?.text;\n }\n\n let className = 'justify-content-start';\n\n if (props.reportsStyling)\n className = 'justify-content-center';\n \n return (\n <div className='my-2'>\n <TrueOrFalseInteractionAnswers\n className={className}\n interaction={props.interaction}\n showFeedback={props.showFeedback}\n hideFeedbackIcons={!props.showAvatar}\n getSelectedAnswer={getAnswer}\n imageApi={props.imageCdnUrl}\n userInitials={props.anonymisedUserName\n ? UserHelper.getInitialsFromFullName(props.anonymisedUserName)\n : UserHelper.getInitials(props.user?.name, props.user?.surname)\n }\n userAvatar={props.anonymisedUserName ? null : props.user?.avatar?.url}\n size='sm'\n unCheckedBackground={props.showFeedback ? '' : `${styles.uncheckedBackground} text-white`}\n />\n </div>\n );\n}","import React from 'react';\n\nimport { IllustrationResponse } from 'libs/shared/components/interaction-response/response-types/IllustrationResponse';\nimport { Interaction, InteractionTypeId, StudentAnswer, User } from 'libs/shared/interfaces';\n\nimport { MissingWordResponse } from './MissingWordResponse';\nimport { MultipleChoiceResponse } from './MultipleChoiceResponse';\nimport { ShortAnswerResponse } from './ShortAnswerResponse';\nimport { TrueOrFalseResponse } from './TrueOrFalseResponse';\n\nexport interface ResponseComponentProps {\n interaction: Interaction;\n answers: StudentAnswer[];\n imageCdnUrl: string;\n user: User;\n showFeedback?: boolean;\n showAvatar?: boolean;\n anonymisedUserName?: string;\n reportsStyling?: boolean;\n}\nconst NoResponseRequired = () => <></>;\n\nexport const ResponseComponentLookup: {\n [typeId: number]: (props: ResponseComponentProps) => JSX.Element\n} = {\n [InteractionTypeId.Annotation]: NoResponseRequired,\n [InteractionTypeId.Image]: NoResponseRequired,\n [InteractionTypeId.MissingWord]: MissingWordResponse,\n [InteractionTypeId.MultipleChoice]: MultipleChoiceResponse,\n [InteractionTypeId.TrueOrFalse]: TrueOrFalseResponse,\n [InteractionTypeId.ShortAnswer]: ShortAnswerResponse,\n [InteractionTypeId.Illustration]: IllustrationResponse\n};","import React from 'react';\n\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { InteractiveAnswerStatus } from 'libs/shared/enums/InteractiveAnswerStatus';\nimport { Interaction, StudentAnswer, StudentResults } from 'libs/shared/interfaces';\nimport { InteractiveCorrectnessHelper } from 'libs/shared/utils/InteractiveCorrectnessHelper';\nimport { getStudentAttempt, getStudentResult } from 'libs/shared/utils/InteractiveHelper';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport { NoResponse } from './response-types/NoResponse';\nimport { ResponseComponentLookup } from './response-types/ResponseComponentLookup';\nimport { InteractionResponseCorrectness } from './InteractionResponseCorrectness';\nimport { InteractionStudentDetailsHeader } from './InteractionStudentDetailsHeader';\nimport { MarkResponse } from './MarkResponse';\n\nimport styles from './interaction-response.module.scss';\n\n\ninterface InteractionResponseProps {\n interaction: Interaction;\n studentResults: StudentResults;\n imageCdnUrl: string;\n markInteraction: (answers: StudentAnswer[], status: InteractiveAnswerStatus) => void;\n markedStatus?: InteractiveAnswerStatus;\n showStudentDetails?: boolean;\n className?: string;\n showFeedback?: boolean;\n showAvatar?: boolean;\n anonymisedUserName?: string;\n reportsStyling?: boolean;\n responseComponentClass?: string;\n}\n\nexport function InteractionResponse(props: InteractionResponseProps): JSX.Element {\n const ResponseComponent = ResponseComponentLookup[props.interaction.typeId];\n\n if (!ResponseComponent)\n return <></>;\n\n const result = getStudentResult(props.studentResults);\n\n const studentAttempt = getStudentAttempt(props.interaction.id, result);\n\n const correctness = InteractiveCorrectnessHelper.isInteractionCorrect(props.interaction, result);\n\n return (\n <div className='position-relative mt-2'>\n <div className={`rounded ${props.className ?? ''}`}>\n <div className='d-flex'>\n {!!props.showStudentDetails &&\n <div className='me-2'>\n <div className={styles.avatarContainer}>\n <Avatar\n imageCdnUrl={props.imageCdnUrl}\n initials={props.anonymisedUserName\n ? UserHelper.getInitialsFromFullName(props.anonymisedUserName)\n : UserHelper.getInitials(props.studentResults.user?.name, props.studentResults.user?.surname)\n }\n imageUrl={props.anonymisedUserName ? null : props.studentResults.user?.avatar?.url}\n />\n </div>\n </div>\n }\n <div className='flex-grow-1'>\n {!!props.showStudentDetails &&\n <InteractionStudentDetailsHeader\n studentResults={props.studentResults}\n correctness={correctness}\n anonymisedUserName={props.anonymisedUserName}\n />\n }\n <div className='d-flex justify-content-between'>\n <div className={`flex-grow-1 ${props.responseComponentClass ? props.responseComponentClass : ''}`}>\n {studentAttempt\n ? <ResponseComponent\n interaction={props.interaction}\n answers={studentAttempt.answers}\n imageCdnUrl={props.imageCdnUrl}\n user={props.studentResults.user}\n showFeedback={props.showFeedback}\n showAvatar={props.showAvatar}\n reportsStyling={props.reportsStyling}\n />\n : <NoResponse />\n }\n </div>\n {!props.showStudentDetails &&\n <InteractionResponseCorrectness correctness={correctness} />\n }\n </div>\n </div>\n </div>\n <MarkResponse\n studentAttempt={studentAttempt}\n correctness={correctness}\n markInteraction={props.markInteraction}\n markedStatus={props.markedStatus}\n />\n </div>\n </div>\n );\n}"],"names":["getPhrase","LanguageService","useMarkAnswers","interactiveId","interactiveMetadataId","onDone","markedAnswers","setMarkedAnswers","useState","dispatch","useDispatch","alerts","useAlerts","addMarkedAnswers","answers","status","a","m","getMarkedAnswerId","submitMarkedAnswers","key","completeCount","successCount","onSuccess","onAlways","onComplete","alertMessage","useErrorAlert","id","resultId","questionId","Flight.fetch","InteractiveResultsRequests","AnswerContainer","props","answer","getBgColour","InteractiveAnswerStatus","jsxs","jsx","SvgContainer","CheckSvg","CloseSvg","namespace","IllustrationResponse","ArrayHelper","Fragment","MissingWordResponse","MultipleChoiceResponse","ShortAnswerResponse","TrueOrFalseResponse","NoResponseRequired","ResponseItemComponentLookup","InteractionTypeId","InteractionResponseCorrectness","InteractionCorrectness","TickSvg","InteractionStudentDetailsHeader","UserHelper","CrossCircleFilledSvg","CrossCircleSvg","CheckCircleSvg","MarkResponse","CheckCircleOutlineSvg","NoResponse","InteractionResponseItem","ResponseItemComponent","result","getStudentResult","studentAttempt","getStudentAttempt","correctness","InteractiveCorrectnessHelper","styles","Avatar","_a","_b","_d","_c","_f","_e","className","PLACEHOLDER","items","match","val","item","idx","order","actionableItem","isCorrect","React","cachedScrollbarWidth","cachedDevicePixelRatio","canUseDOM","scrollbarWidth","body","box","width","getElementWindow","element","getElementDocument","SimpleBar","options","_this","elWindow","e","isWithinTrackXBounds","isWithinTrackYBounds","eventOffset","track","trackSize","scrollbar","contentSize","hostSize","dragPos","dragPerc","scrollPos","elDocument","throttle","debounce","memoize","dummyDiv","scrollbarDummyEl","dummyContainerChild","dummyContainerOffset","dummyContainerChildOffset","dummyContainerScrollOffsetAfterScroll","el","rect","_proto","_this2","child","_this3","resizeObserverStarted","resizeObserver","ResizeObserver","isHeightAuto","isWidthAuto","contentElOffsetWidth","contentWrapperElOffsetWidth","elOverflowX","elOverflowY","contentElScrollHeight","contentElScrollWidth","contentWrapperElOffsetHeight","offsetForXScrollbar","offsetForYScrollbar","axis","scrollbarSize","scrollbarRatio","scrollOffset","scrollPourcent","handleOffset","isWithinScrollbarBoundsX","_this4","scrollbarOffset","scrolled","t","dir","scrollSize","scrollTo","_this4$contentWrapper","_this4$contentWrapper2","_this5","bbox","query","matches","_defineProperty","obj","value","_extends","target","i","source","ownKeys","object","enumerableOnly","keys","symbols","sym","_objectSpread2","_objectWithoutPropertiesLoose","excluded","sourceKeys","_objectWithoutProperties","sourceSymbolKeys","getOptions","acc","attribute","option","x","chr","_ref","ref","children","_ref$scrollableNodePr","scrollableNodeProps","otherProps","instance","scrollableNodeRef","useRef","elRef","contentNodeRef","rest","deprecatedOptions","SimpleBarJS","useEffect","PropTypes","alphabet","MultipleChoiceInteractionAnswers","previewAnswer","setPreviewAnswer","hasImages","scrollRef","small","index","imageUrl","hasText","onSelectAnswer","LeftPart","SvgContainerSize","accessibility","hasImageClass","showImagePreview","InPortal","DivButton","getAnswer","TrueOrFalseInteractionAnswers","ResponseComponentLookup","InteractionResponse","ResponseComponent"],"mappings":"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","x_google_ignoreList":[18,19]}
@@ -0,0 +1,2 @@
1
+ import{c as N,d as U,e as _,b as R,P as A,u as s,f as T,a as I,L as O,j as e,V as q,U as G,C as M}from"./app-BDrXtKwD.js";import{P as F,M as K,V as L,a as H,E as $}from"./uoF107dn.chunk.js";import{g as h}from"./CX5q-0jT.chunk.js";import{V as d}from"./GybZtYpZ.chunk.js";import{u as k}from"./BzoD15bZ.chunk.js";import{P as B}from"./D22pDzdH.chunk.js";import{C as D,a as Q}from"./ClngJcaG.chunk.js";import{u as Y}from"./csPZD_eN.chunk.js";import{u as z}from"./M-TSYEoo.chunk.js";import{u as J}from"./CK9SUSD9.chunk.js";import{u as W,a as X}from"./B29cILrj.chunk.js";import{u as Z}from"./ClkubQ2J.chunk.js";import{E as ee}from"./BJDrvt1V.chunk.js";import{V as ae}from"./BvJAziJf.chunk.js";import"./CFp1zKGZ.chunk.js";import"./Dwsvd8p8.chunk.js";import"./K65Dt7jg.chunk.js";import"./5O9SdVRZ.chunk.js";import"./CW7x8M-z.chunk.js";import"./BF6robfP.chunk.js";import"./DfBzbPUM.chunk.js";import"./mBxqWw8V.chunk.js";import"./CyS0Qcff.chunk.js";import"./DZYVycui.chunk.js";import"./Cf7yxDlS.chunk.js";import"./Cmh_kkGl.chunk.js";import"./CVftTaOh.chunk.js";import"./Cu2SZCs_.chunk.js";import"./D9PHjOfy.chunk.js";import"./sFV5nxD4.chunk.js";import"./D4zllLcC.chunk.js";import"./BcPvb8J5.chunk.js";import"./DjgLQWKh.chunk.js";import"./nR79RHo_.chunk.js";import"./H13OLF2T.chunk.js";import"./BAb7U5e_.chunk.js";import"./lcnUAi0K.chunk.js";import"./Ctl4eE7j.chunk.js";import"./BKardFg7.chunk.js";import"./HdH1xgCy.chunk.js";import"./DTDgnfLK.chunk.js";const te="_viewCountContainer_8jne3_1",ie="_engagementPercentageContainer_8jne3_4",se="_engagementGraphContainer_8jne3_7",ne="_partialTable_8jne3_10",g={viewCountContainer:te,engagementPercentageContainer:ie,engagementGraphContainer:se,partialTable:ne},re="reportsClips.clipEngagement",oe=O.encloseNamespace(re);function ze(a){var u,C,j,v,f;const[E]=N(q.ANONYMISE_USERS),p=U(),t=_(),{hasPermissions:y}=R(),n=!y(A.ViewCustomerAnalytics),o=s(n&&G.currentUser()),r=s(D.clip(a.id)),l=s(!!t&&(n?!!o.data&&d.aggregateEngagement(a.id,t,o.data.id):d.aggregateEngagement(a.id,t))),i=s(!!t&&(n?!!o.data&&d.individualEngagement(a.id,t,o.data.id):d.individualEngagement(a.id,t))),{users:P,isLoading:w,usersResponse:x}=T((C=(u=i.data)==null?void 0:u.data)==null?void 0:C.map(S=>S.userId)),c=s(F.createViewKey(a.id,K.MasterObject)),m=s(M.config());I({title:oe("pageTitle",{clip:(j=r.data)==null?void 0:j.name})}),Z((v=r.data)==null?void 0:v.name),W(X(r.data)),J(a.id),z(i),Y(r),k([c,l,i,...x.responses]);const V=!!r.data&&!!l.data&&!!c.data&&!!m.data,b=!!i.data&&(!i.data.data.length||!w);return e.jsxs("div",{className:"pb-3",children:[e.jsx(Q,{id:a.id}),e.jsxs("div",{className:"d-flex pb-3",children:[e.jsx("div",{className:`pe-2 ${g.viewCountContainer}`,children:e.jsx(ae,{useSharerId:n,objectId:a.id,className:"h-100"})}),e.jsx("div",{className:`px-2 ${g.engagementPercentageContainer}`,children:e.jsx(ee,{objectId:a.id,useSharerId:n,className:"h-100",layout:"vertical"})}),e.jsx("div",{className:`ps-2 ${g.engagementGraphContainer}`,children:V?e.jsx(L,{engagement:l.data,viewKey:c.data.viewKey,imageCdnUrl:m.data.imageCdnUrl,playerApiUrl:m.data.playerApiUrl},h(p)):e.jsx(H,{})})]}),b?e.jsx($,{engagement:i.data.data,users:P,imageCdnUrl:(f=m.data)==null?void 0:f.imageCdnUrl,anonymiseUsers:E,enableSort:!0},h(p)):e.jsx(B,{className:g.partialTable})]})}export{ze as ClipEngagementView};
2
+ //# sourceMappingURL=PRj0OsVz.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PRj0OsVz.chunk.js","sources":["../../src/apps/clips/views/clip-engagement/ClipEngagementView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\n\nimport { EngagementTable } from 'libs/shared/apps/analytics/components/engagement-table/EngagementTable';\nimport { useChunkedUsersResponse } from 'libs/shared/apps/analytics/hooks/UseEngagementUsers';\nimport { getFilterParamsKey } from 'libs/shared/apps/analytics/utils/FilterParamUtils';\nimport { MediaIdType } from 'libs/shared/enums/MediaIdType';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { PlayerRequests } from 'libs/shared/flight-requests/PlayerRequests';\nimport { UserRequests as SharedUserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoViewRequests } from 'libs/shared/flight-requests/VideoViewRequests';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Config, CurrentUser, PlayerViewKey, Video } from 'libs/shared/interfaces';\nimport { Engagement, IndividualEngagementResponse } from 'libs/shared/interfaces';\n\nimport { PartialTable } from 'shared/components/partial-loading/PartialTable';\nimport { PartialVideoEngagementOverlay } from 'shared/components/video-engagement-overlay/PartialVideoEngagementOverlay';\nimport { VideoEngagementOverlay } from 'shared/components/video-engagement-overlay/VideoEngagementOverlay';\nimport { ViewModelKeys } from 'shared/constants/ReportsViewModels';\nimport { ClipRequests } from 'shared/flight-requests/ClipRequests';\nimport { useGetAppLinkFilterParams, useGetRequestFilter } from 'shared/hooks/UseGetFilterQueryParams';\nimport { useHandleVideoError } from 'shared/hooks/UseHandleVideoError';\nimport { useSetAudienceFilterCount } from 'shared/hooks/UseSetAudienceFilterCount';\nimport { useSetEngagementAudienceSuggestions } from 'shared/hooks/UseSetEngagementAudienceSuggestions';\nimport { useSetHeaderActions } from 'shared/hooks/UseSetHeaderActions';\nimport { useSetHeaderTitle } from 'shared/hooks/UseSetHeaderTitle';\nimport { useGetObjectHeaderActions } from 'shared/utils/HeaderActionUtils';\nimport { EngagementOverviewCardView } from 'shared/views/overview-cards/engagement-overview-card/EngagementOverviewCardView';\nimport { ViewCountPieChartCardView } from 'shared/views/overview-cards/view-count-pie-chart-card/ViewCountPieChartCardView';\n\nimport { ClipNav } from 'apps/clips/components/clip-nav/ClipNav';\n\nimport styles from './clip-engagement.module.scss';\n\nconst namespace = 'reportsClips.clipEngagement';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface ClipEngagementViewProps {\n id: string;\n}\n\nexport function ClipEngagementView(props: ClipEngagementViewProps): JSX.Element {\n const [anonymiseUsers] = useViewModel<boolean>(ViewModelKeys.ANONYMISE_USERS);\n\n const filterQueryParams = useGetAppLinkFilterParams();\n const requestFilter = useGetRequestFilter();\n\n const { hasPermissions } = usePermissions();\n\n const scopeBySharerId = !hasPermissions(PermissionName.ViewCustomerAnalytics);\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(scopeBySharerId && SharedUserRequests.currentUser());\n\n const clip = Flight.useBasicFetch<Video>(ClipRequests.clip(props.id));\n\n const aggregateEngagement = Flight.useBasicFetch<Engagement>(!!requestFilter && (scopeBySharerId\n ? !!currentUser.data && VideoViewRequests.aggregateEngagement(props.id, requestFilter, currentUser.data.id)\n : VideoViewRequests.aggregateEngagement(props.id, requestFilter)\n ));\n\n const individualEngagement = Flight.useBasicFetch<IndividualEngagementResponse>(!!requestFilter && (scopeBySharerId\n ? !!currentUser.data && VideoViewRequests.individualEngagement(props.id, requestFilter, currentUser.data.id)\n : VideoViewRequests.individualEngagement(props.id, requestFilter)\n ));\n\n const { users, isLoading, usersResponse } = useChunkedUsersResponse(\n individualEngagement.data?.data?.map(d => d.userId)\n );\n\n const viewKey = Flight.useBasicFetch<PlayerViewKey>(\n PlayerRequests.createViewKey(props.id, MediaIdType.MasterObject)\n );\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n useSetPageMetadata({ title: getPhrase('pageTitle', { clip: clip.data?.name }) });\n useSetHeaderTitle(clip.data?.name);\n useSetHeaderActions(useGetObjectHeaderActions(clip.data));\n useSetEngagementAudienceSuggestions(props.id);\n useSetAudienceFilterCount(individualEngagement);\n\n useHandleVideoError(clip);\n useHandleObjectError([ viewKey, aggregateEngagement, individualEngagement, ...usersResponse.responses ]);\n\n const engagementOverlayDataLoaded = !!clip.data\n && !!aggregateEngagement.data\n && !!viewKey.data\n && !!config.data;\n\n const tableDataLoaded = !!individualEngagement.data && (!individualEngagement.data.data.length || !isLoading);\n\n return (\n <div className='pb-3'>\n <ClipNav id={props.id} />\n <div className='d-flex pb-3'>\n <div className={`pe-2 ${styles.viewCountContainer}`}>\n <ViewCountPieChartCardView\n useSharerId={scopeBySharerId}\n objectId={props.id}\n className='h-100'\n />\n </div>\n <div className={`px-2 ${styles.engagementPercentageContainer}`}>\n <EngagementOverviewCardView\n objectId={props.id}\n useSharerId={scopeBySharerId}\n className='h-100'\n layout='vertical'\n />\n </div>\n <div className={`ps-2 ${styles.engagementGraphContainer}`}>\n {engagementOverlayDataLoaded\n ? <VideoEngagementOverlay\n // key is used to trigger player re-render\n key={getFilterParamsKey(filterQueryParams)}\n engagement={aggregateEngagement.data}\n viewKey={viewKey.data.viewKey}\n imageCdnUrl={config.data.imageCdnUrl}\n playerApiUrl={config.data.playerApiUrl}\n />\n : <PartialVideoEngagementOverlay />\n }\n </div>\n </div>\n {tableDataLoaded\n ? <EngagementTable\n key={getFilterParamsKey(filterQueryParams)}\n engagement={individualEngagement.data.data}\n users={users}\n imageCdnUrl={config.data?.imageCdnUrl}\n anonymiseUsers={anonymiseUsers}\n enableSort\n />\n : <PartialTable className={styles.partialTable} />\n }\n </div>\n );\n}"],"names":["namespace","getPhrase","LanguageService","ClipEngagementView","props","anonymiseUsers","useViewModel","ViewModelKeys","filterQueryParams","useGetAppLinkFilterParams","requestFilter","useGetRequestFilter","hasPermissions","usePermissions","scopeBySharerId","PermissionName","currentUser","Flight.useBasicFetch","SharedUserRequests","clip","ClipRequests","aggregateEngagement","VideoViewRequests","individualEngagement","users","isLoading","usersResponse","useChunkedUsersResponse","_b","_a","d","viewKey","PlayerRequests","MediaIdType","config","ConfigRequests","useSetPageMetadata","_c","useSetHeaderTitle","_d","useSetHeaderActions","useGetObjectHeaderActions","useSetEngagementAudienceSuggestions","useSetAudienceFilterCount","useHandleVideoError","useHandleObjectError","engagementOverlayDataLoaded","tableDataLoaded","jsxs","jsx","ClipNav","styles","ViewCountPieChartCardView","EngagementOverviewCardView","VideoEngagementOverlay","getFilterParamsKey","PartialVideoEngagementOverlay","EngagementTable","_e","PartialTable"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{s as t}from"./app-BDrXtKwD.js";import{g as s}from"./sFV5nxD4.chunk.js";function g(a){const{userId:e,customerId:r,...i}=a;return{...i,uid:e,cid:r}}const l={aggregation(a,e){return{url:t.urlBuilder(`{gateway}/v2/analytics/streams/aggregation/${a}`,g(e)),key:s("video:views:v2:aggregation",e,a),normalize:!1}},videoAggregation(a,e,r){return{url:t.urlBuilder(`{gateway}/v2/analytics/streams/videos/${a}/aggregation/${e}`,g(r)),key:s(`video:views:v2:aggregation:${a}`,r,e),normalize:!1}},aggregationChart(a,e){return{url:t.urlBuilder(`{gateway}/v2/analytics/streams/aggregation/${a}/chart`,g(e)),key:s("video:views:v2:aggregation:chart",e,a),normalize:!1}},videoAggregationChart(a,e,r){return{url:t.urlBuilder(`{gateway}/v2/analytics/streams/videos/${a}/aggregation/${e}/chart`,g(r)),key:s(`video:views:v2:aggregation:chart:${a}`,r,e),normalize:!1}},topStreams(a,e){return{url:t.urlBuilder("{gateway}/v2/analytics/streams/top",{...g(e),limit:a}),key:s(`video:views:v2:top:streams:${a}`,e),normalize:!1}},videoHeatMap(a,e,r){return{url:t.urlBuilder(`{gateway}/v2/analytics/streams/videos/${a}/heat-map`,{...g(e),cursor:r}),key:s(`video:views:v2:heatmap:${a}`,e,r),normalize:!1}},videoHeatMapAggregation(a,e){return{url:t.urlBuilder(`{gateway}/v2/analytics/streams/videos/${a}/aggregation/heat-map`,g(e)),key:s(`video:views:v2:aggregation:heatmap:${a}`,e),normalize:!1}}};export{l as V};
2
+ //# sourceMappingURL=SsbfqiCA.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SsbfqiCA.chunk.js","sources":["../../src/shared/flight-requests/VideoViewsV2Requests.ts"],"sourcesContent":["\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/react/index';\n\nimport { StreamAggregationType } from 'libs/shared/apps/analytics/interfaces/StreamAggregationType';\nimport { AnalyticsRequestFilter } from 'libs/shared/interfaces';\nimport { getAnalyticsRequestKey } from 'libs/shared/utils/AnalyticsRequestUtils';\n\n/**\n * Becasue the V2 endpoints take the user context,\n * userId and customerId cannot be used for these values so instead\n * we are using uid and cid - sha\n */\nfunction formatFilter(filter: AnalyticsRequestFilter) {\n const { userId, customerId, ...rest } = filter;\n return { ...rest, uid: userId, cid: customerId };\n}\n\nexport const VideoViewsV2Requests = {\n aggregation(\n type: StreamAggregationType,\n filter: AnalyticsRequestFilter\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/aggregation/${type}`, formatFilter(filter)),\n key: getAnalyticsRequestKey('video:views:v2:aggregation', filter, type),\n normalize: false\n };\n },\n\n videoAggregation(\n videoId: string,\n type: StreamAggregationType,\n filter: AnalyticsRequestFilter\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/videos/${videoId}/aggregation/${type}`, formatFilter(filter)),\n key: getAnalyticsRequestKey(`video:views:v2:aggregation:${videoId}`, filter, type),\n normalize: false\n };\n },\n\n aggregationChart(\n type: StreamAggregationType,\n filter: AnalyticsRequestFilter\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/aggregation/${type}/chart`, formatFilter(filter)),\n key: getAnalyticsRequestKey('video:views:v2:aggregation:chart', filter, type),\n normalize: false\n };\n },\n\n videoAggregationChart(\n videoId: string,\n type: StreamAggregationType,\n filter: AnalyticsRequestFilter\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/videos/${videoId}/aggregation/${type}/chart`, formatFilter(filter)),\n key: getAnalyticsRequestKey(`video:views:v2:aggregation:chart:${videoId}`, filter, type),\n normalize: false\n };\n },\n\n topStreams(limit: number, filter: AnalyticsRequestFilter): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/top`, { ...formatFilter(filter), limit }),\n key: getAnalyticsRequestKey(`video:views:v2:top:streams:${limit}`, filter),\n normalize: false\n };\n },\n\n videoHeatMap(\n videoId: string,\n filter: AnalyticsRequestFilter,\n cursor?: string\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/videos/${videoId}/heat-map`, { ...formatFilter(filter), cursor }),\n key: getAnalyticsRequestKey(`video:views:v2:heatmap:${videoId}`, filter, cursor),\n normalize: false\n };\n },\n\n videoHeatMapAggregation(\n videoId: string,\n filter: AnalyticsRequestFilter\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/videos/${videoId}/aggregation/heat-map`, formatFilter(filter)),\n key: getAnalyticsRequestKey(`video:views:v2:aggregation:heatmap:${videoId}`, filter),\n normalize: false\n };\n }\n};"],"names":["formatFilter","filter","userId","customerId","rest","VideoViewsV2Requests","type","UrlHelper","getAnalyticsRequestKey","videoId","limit","cursor"],"mappings":"8EAaA,SAASA,EAAaC,EAAgC,CACpD,KAAM,CAAE,OAAAC,EAAQ,WAAAC,EAAY,GAAGC,GAASH,EACxC,MAAO,CAAE,GAAGG,EAAM,IAAKF,EAAQ,IAAKC,CAAA,CACtC,CAEO,MAAME,EAAuB,CAClC,YACEC,EACAL,EACgB,CAChB,MAAO,CACL,IAAKM,EAAU,WAAW,8CAA8CD,CAAI,GAAIN,EAAaC,CAAM,CAAC,EACpG,IAAKO,EAAuB,6BAA8BP,EAAQK,CAAI,EACtE,UAAW,EAAA,CAEf,EAEA,iBACEG,EACAH,EACAL,EACgB,CAChB,MAAO,CACL,IAAKM,EAAU,WAAW,yCAAyCE,CAAO,gBAAgBH,CAAI,GAAIN,EAAaC,CAAM,CAAC,EACtH,IAAKO,EAAuB,8BAA8BC,CAAO,GAAIR,EAAQK,CAAI,EACjF,UAAW,EAAA,CAEf,EAEA,iBACEA,EACAL,EACgB,CAChB,MAAO,CACL,IAAKM,EAAU,WAAW,8CAA8CD,CAAI,SAAUN,EAAaC,CAAM,CAAC,EAC1G,IAAKO,EAAuB,mCAAoCP,EAAQK,CAAI,EAC5E,UAAW,EAAA,CAEf,EAEA,sBACEG,EACAH,EACAL,EACgB,CAChB,MAAO,CACL,IAAKM,EAAU,WAAW,yCAAyCE,CAAO,gBAAgBH,CAAI,SAAUN,EAAaC,CAAM,CAAC,EAC5H,IAAKO,EAAuB,oCAAoCC,CAAO,GAAIR,EAAQK,CAAI,EACvF,UAAW,EAAA,CAEf,EAEA,WAAWI,EAAeT,EAAgD,CACxE,MAAO,CACL,IAAKM,EAAU,WAAW,qCAAsC,CAAE,GAAGP,EAAaC,CAAM,EAAG,MAAAS,EAAO,EAClG,IAAKF,EAAuB,8BAA8BE,CAAK,GAAIT,CAAM,EACzE,UAAW,EAAA,CAEf,EAEA,aACEQ,EACAR,EACAU,EACgB,CAChB,MAAO,CACL,IAAKJ,EAAU,WAAW,yCAAyCE,CAAO,YAAa,CAAE,GAAGT,EAAaC,CAAM,EAAG,OAAAU,CAAA,CAAQ,EAC1H,IAAKH,EAAuB,0BAA0BC,CAAO,GAAIR,EAAQU,CAAM,EAC/E,UAAW,EAAA,CAEf,EAEA,wBACEF,EACAR,EACgB,CAChB,MAAO,CACL,IAAKM,EAAU,WAAW,yCAAyCE,CAAO,wBAAyBT,EAAaC,CAAM,CAAC,EACvH,IAAKO,EAAuB,sCAAsCC,CAAO,GAAIR,CAAM,EACnF,UAAW,EAAA,CAEf,CACF"}