@clickview/reports 0.71.1-dev.0 → 0.72.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/bundles.json +3 -2
  2. package/dist/css/1103-reports-d3d5cc00db.chunk.css +31 -0
  3. package/dist/css/1456-reports-4a5871a275.chunk.css +9 -0
  4. package/dist/css/1648-reports-012456ba48.chunk.css +2 -0
  5. package/dist/css/209-reports-c33663a53e.chunk.css +11 -0
  6. package/dist/css/2150-reports-84ec0e9770.chunk.css +4 -0
  7. package/dist/css/2217-reports-74dec0a3fe.chunk.css +32 -0
  8. package/dist/css/2997-reports-e08318f14b.chunk.css +9 -0
  9. package/dist/css/2999-reports-f190450b10.chunk.css +60 -0
  10. package/dist/css/4582-reports-d3d5cc00db.chunk.css +31 -0
  11. package/dist/css/5304-reports-22c2d8d635.chunk.css +9 -0
  12. package/dist/css/6007-reports-5ba77c55a3.chunk.css +8 -0
  13. package/dist/css/6031-reports-d558076846.chunk.css +6 -0
  14. package/dist/css/6356-reports-8c5b220bf6.chunk.css +1 -0
  15. package/dist/css/6811-reports-baf2e97e71.chunk.css +35 -0
  16. package/dist/css/7723-reports-8c6d3c414b.chunk.css +4 -0
  17. package/dist/css/7747-reports-2d9e191b5a.chunk.css +12 -0
  18. package/dist/css/8087-reports-cfe23ba648.chunk.css +10 -0
  19. package/dist/css/8294-reports-c797263ac2.chunk.css +1 -0
  20. package/dist/css/8418-reports-0ada3f3ce2.chunk.css +29 -0
  21. package/dist/css/8450-reports-06493dfde5.chunk.css +9 -0
  22. package/dist/css/8622-reports-9e8970cc7f.chunk.css +8 -0
  23. package/dist/css/8839-reports-8e46644943.chunk.css +1 -0
  24. package/dist/css/8989-reports-92b4f1dde8.chunk.css +8 -0
  25. package/dist/css/9059-reports-a2ac630ebc.chunk.css +35 -0
  26. package/dist/css/9285-reports-5b9af8380f.chunk.css +13 -0
  27. package/dist/css/9661-reports-7435e94a85.chunk.css +4 -0
  28. package/dist/css/9822-reports-a1db1900c7.chunk.css +8 -0
  29. package/dist/css/9949-reports-f22fa2b407.chunk.css +15 -0
  30. package/dist/css/reports-app-b4c4ec5632.css +32 -0
  31. package/dist/languages/en.json +1 -0
  32. package/dist/scripts/1103-d77d388f5b-reports.chunk.js +1 -0
  33. package/dist/scripts/1177-7cf7817e74-reports.chunk.js +1 -0
  34. package/dist/scripts/1456-b7f437ef87-reports.chunk.js +1 -0
  35. package/dist/scripts/1648-e892604f5a-reports.chunk.js +1 -0
  36. package/dist/scripts/1934-ca8497c768-reports.chunk.js +2 -0
  37. package/dist/scripts/1934-ca8497c768-reports.chunk.js.LICENSE.txt +9 -0
  38. package/dist/scripts/2087-e0ef668e1f-reports.chunk.js +1 -0
  39. package/dist/scripts/209-72e77f375e-reports.chunk.js +1 -0
  40. package/dist/scripts/2150-4e9e1fb433-reports.chunk.js +1 -0
  41. package/dist/scripts/2217-15fa35197a-reports.chunk.js +1 -0
  42. package/dist/scripts/2476-a700f69dc4-reports.chunk.js +1 -0
  43. package/dist/scripts/2539-04dfb4f4f1-reports.chunk.js +1 -0
  44. package/dist/scripts/2997-444b5bdaf0-reports.chunk.js +1 -0
  45. package/dist/scripts/2999-f5ee243b25-reports.chunk.js +2 -0
  46. package/dist/scripts/2999-f5ee243b25-reports.chunk.js.LICENSE.txt +1 -0
  47. package/dist/scripts/312-8b006e92ff-reports.chunk.js +1 -0
  48. package/dist/scripts/4234-e3c04f41eb-reports.chunk.js +1 -0
  49. package/dist/scripts/4372-26474a3318-reports.chunk.js +1 -0
  50. package/dist/scripts/438-b444dfb8c6-reports.chunk.js +1 -0
  51. package/dist/scripts/4582-230f130f41-reports.chunk.js +1 -0
  52. package/dist/scripts/4752-db4247883d-reports.chunk.js +2 -0
  53. package/dist/scripts/4752-db4247883d-reports.chunk.js.LICENSE.txt +118 -0
  54. package/dist/scripts/4979-7e14b09f33-reports.chunk.js +1 -0
  55. package/dist/scripts/5051-ff0ec9348d-reports.chunk.js +1 -0
  56. package/dist/scripts/5091-ddd6f61b55-reports.chunk.js +1 -0
  57. package/dist/scripts/5173-cce3b37672-reports.chunk.js +1 -0
  58. package/dist/scripts/5177-a7372e7b8d-reports.chunk.js +1 -0
  59. package/dist/scripts/5304-d5674b32b4-reports.chunk.js +1 -0
  60. package/dist/scripts/5802-2125536755-reports.chunk.js +1 -0
  61. package/dist/scripts/6007-42edca6bba-reports.chunk.js +1 -0
  62. package/dist/scripts/6031-b1c60cc409-reports.chunk.js +1 -0
  63. package/dist/scripts/6081-2bbda6cac3-reports.chunk.js +1 -0
  64. package/dist/scripts/6180-bdb237ffbe-reports.chunk.js +2 -0
  65. package/dist/scripts/6180-bdb237ffbe-reports.chunk.js.LICENSE.txt +1 -0
  66. package/dist/scripts/6198-189ddde870-reports.chunk.js +1 -0
  67. package/dist/scripts/6356-a1b313c73e-reports.chunk.js +1 -0
  68. package/dist/scripts/645-e8b19128e5-reports.chunk.js +1 -0
  69. package/dist/scripts/6545-eadce8e749-reports.chunk.js +1 -0
  70. package/dist/scripts/6811-40ded4c089-reports.chunk.js +1 -0
  71. package/dist/scripts/7238-de5ef0ebfb-reports.chunk.js +1 -0
  72. package/dist/scripts/7562-748e60c3fc-reports.chunk.js +1 -0
  73. package/dist/scripts/7709-82750ee317-reports.chunk.js +1 -0
  74. package/dist/scripts/7723-1799f5aa26-reports.chunk.js +1 -0
  75. package/dist/scripts/7747-bc33e51d7b-reports.chunk.js +2 -0
  76. package/dist/scripts/7747-bc33e51d7b-reports.chunk.js.LICENSE.txt +1 -0
  77. package/dist/scripts/7925-c6c532c9c4-reports.chunk.js +1 -0
  78. package/dist/scripts/8087-1d9e9701e5-reports.chunk.js +1 -0
  79. package/dist/scripts/8393-c37cc22b4c-reports.chunk.js +1 -0
  80. package/dist/scripts/8418-9f96caf039-reports.chunk.js +1 -0
  81. package/dist/scripts/8450-f2d5d99614-reports.chunk.js +1 -0
  82. package/dist/scripts/8591-4811082ab0-reports.chunk.js +1 -0
  83. package/dist/scripts/8622-a422eff0c4-reports.chunk.js +1 -0
  84. package/dist/scripts/8839-711793a97f-reports.chunk.js +1 -0
  85. package/dist/scripts/8989-ca5cab7f45-reports.chunk.js +1 -0
  86. package/dist/scripts/9059-b2dcf3cdb2-reports.chunk.js +1 -0
  87. package/dist/scripts/9162-7ffc692736-reports.chunk.js +1 -0
  88. package/dist/scripts/9285-ecddd01efb-reports.chunk.js +1 -0
  89. package/dist/scripts/9590-41bb23ae71-reports.chunk.js +1 -0
  90. package/dist/scripts/9647-f0c111d3f0-reports.chunk.js +1 -0
  91. package/dist/scripts/9661-2dee4c3417-reports.chunk.js +1 -0
  92. package/dist/scripts/9822-1b202f9d49-reports.chunk.js +1 -0
  93. package/dist/scripts/9895-3b3feb12b9-reports.chunk.js +1 -0
  94. package/dist/scripts/9949-63e32c6733-reports.chunk.js +1 -0
  95. package/dist/scripts/bundle-8754f0e6b8.min.js +2 -0
  96. package/dist/scripts/bundle-8754f0e6b8.min.js.LICENSE.txt +108 -0
  97. package/dist/scripts/polyfills-3db3f009d4.min.js +1 -0
  98. package/package.json +3 -5
  99. package/typings/utils/imports.d.ts +1 -1
  100. package/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  101. package/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  102. package/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  103. package/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  104. package/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  105. package/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  106. package/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  107. package/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  108. package/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  109. package/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  110. package/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  111. package/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  112. package/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  113. package/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  114. package/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  115. package/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  116. package/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  117. package/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  118. package/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  119. package/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  120. package/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  121. package/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  122. package/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  123. package/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  124. package/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  125. package/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  126. package/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  127. package/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  128. package/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  129. package/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  130. package/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  131. package/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  132. package/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  133. package/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  134. package/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  135. package/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  136. package/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  137. package/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  138. package/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  139. package/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  140. package/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  141. package/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  142. package/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  143. package/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  144. package/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  145. package/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  146. package/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  147. package/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  148. package/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  149. package/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  150. package/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  151. package/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  152. package/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  153. package/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  154. package/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  155. package/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  156. package/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  157. package/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  158. package/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  159. package/dist/css/1VpVng8x.chunk.css +0 -1
  160. package/dist/css/BDijM1kt.chunk.css +0 -1
  161. package/dist/css/BMPwvOki.chunk.css +0 -1
  162. package/dist/css/BNt45Kgy.chunk.css +0 -1
  163. package/dist/css/BSGhUWzl.chunk.css +0 -1
  164. package/dist/css/BZ3_uhDP.chunk.css +0 -1
  165. package/dist/css/BaadNO4A.chunk.css +0 -1
  166. package/dist/css/BdUNjJqp.chunk.css +0 -1
  167. package/dist/css/BdeI0FAV.chunk.css +0 -1
  168. package/dist/css/BxcMGr8Y.chunk.css +0 -1
  169. package/dist/css/ByuL_xKJ.chunk.css +0 -1
  170. package/dist/css/C-A0Pj_7.chunk.css +0 -1
  171. package/dist/css/C4jMfPWU.chunk.css +0 -1
  172. package/dist/css/C7XoyEPr.chunk.css +0 -1
  173. package/dist/css/C8sxda3R.chunk.css +0 -1
  174. package/dist/css/CD1qrI1T.chunk.css +0 -1
  175. package/dist/css/CFO--d_R.chunk.css +0 -1
  176. package/dist/css/CX9nw8t8.chunk.css +0 -1
  177. package/dist/css/C_qGRdC2.chunk.css +0 -1
  178. package/dist/css/CdC6ugQR.chunk.css +0 -1
  179. package/dist/css/ClRRGXPb.chunk.css +0 -1
  180. package/dist/css/Cr1bwtZG.chunk.css +0 -1
  181. package/dist/css/DBlPz5Fw.chunk.css +0 -1
  182. package/dist/css/DDnpOnVB.chunk.css +0 -1
  183. package/dist/css/DFZQCLLg.chunk.css +0 -1
  184. package/dist/css/DJwAbl6l.chunk.css +0 -1
  185. package/dist/css/DWjg_0sz.chunk.css +0 -1
  186. package/dist/css/DYV9jjVn.chunk.css +0 -1
  187. package/dist/css/Dgeh4AqU.chunk.css +0 -9
  188. package/dist/css/DlOtoSz0.chunk.css +0 -1
  189. package/dist/css/DlxOgKUu.chunk.css +0 -1
  190. package/dist/css/Dp3arkyy.chunk.css +0 -1
  191. package/dist/css/DwgaDUzz.chunk.css +0 -1
  192. package/dist/css/FPQ_LmXH.chunk.css +0 -1
  193. package/dist/css/H09rC9gw.chunk.css +0 -1
  194. package/dist/css/LAFr2dPT.chunk.css +0 -1
  195. package/dist/css/Pg1TlYG6.chunk.css +0 -1
  196. package/dist/css/PsQn3-kb.chunk.css +0 -1
  197. package/dist/css/alkEuPrr.chunk.css +0 -1
  198. package/dist/css/k4DgCj_g.chunk.css +0 -1
  199. package/dist/en.json +0 -1
  200. package/dist/scripts/5O9SdVRZ.chunk.js +0 -2
  201. package/dist/scripts/5O9SdVRZ.chunk.js.map +0 -1
  202. package/dist/scripts/71lqp_27.chunk.js +0 -2
  203. package/dist/scripts/71lqp_27.chunk.js.map +0 -1
  204. package/dist/scripts/B29cILrj.chunk.js +0 -2
  205. package/dist/scripts/B29cILrj.chunk.js.map +0 -1
  206. package/dist/scripts/B8h79IbE.chunk.js +0 -10
  207. package/dist/scripts/B8h79IbE.chunk.js.map +0 -1
  208. package/dist/scripts/BAY69EEW.chunk.js +0 -4
  209. package/dist/scripts/BAY69EEW.chunk.js.map +0 -1
  210. package/dist/scripts/BAb7U5e_.chunk.js +0 -2
  211. package/dist/scripts/BAb7U5e_.chunk.js.map +0 -1
  212. package/dist/scripts/BENXQfLb.chunk.js +0 -2
  213. package/dist/scripts/BENXQfLb.chunk.js.map +0 -1
  214. package/dist/scripts/BF6robfP.chunk.js +0 -2
  215. package/dist/scripts/BF6robfP.chunk.js.map +0 -1
  216. package/dist/scripts/BHgJhw0m.chunk.js +0 -2
  217. package/dist/scripts/BHgJhw0m.chunk.js.map +0 -1
  218. package/dist/scripts/BJDrvt1V.chunk.js +0 -3
  219. package/dist/scripts/BJDrvt1V.chunk.js.map +0 -1
  220. package/dist/scripts/BKardFg7.chunk.js +0 -2
  221. package/dist/scripts/BKardFg7.chunk.js.map +0 -1
  222. package/dist/scripts/BNPb8jz9.chunk.js +0 -2
  223. package/dist/scripts/BNPb8jz9.chunk.js.map +0 -1
  224. package/dist/scripts/BPjdUUKC.chunk.js +0 -2
  225. package/dist/scripts/BPjdUUKC.chunk.js.map +0 -1
  226. package/dist/scripts/BQIPBrM1.chunk.js +0 -2
  227. package/dist/scripts/BQIPBrM1.chunk.js.map +0 -1
  228. package/dist/scripts/BSOiWR0F.chunk.js +0 -6
  229. package/dist/scripts/BSOiWR0F.chunk.js.map +0 -1
  230. package/dist/scripts/BUXFRkJU.chunk.js +0 -2
  231. package/dist/scripts/BUXFRkJU.chunk.js.map +0 -1
  232. package/dist/scripts/BVwIslOW.chunk.js +0 -2
  233. package/dist/scripts/BVwIslOW.chunk.js.map +0 -1
  234. package/dist/scripts/BWQPt-2Q.chunk.js +0 -2
  235. package/dist/scripts/BWQPt-2Q.chunk.js.map +0 -1
  236. package/dist/scripts/BcPvb8J5.chunk.js +0 -2
  237. package/dist/scripts/BcPvb8J5.chunk.js.map +0 -1
  238. package/dist/scripts/Bf0d_B71.chunk.js +0 -2
  239. package/dist/scripts/Bf0d_B71.chunk.js.map +0 -1
  240. package/dist/scripts/Bic1CpMi.chunk.js +0 -2
  241. package/dist/scripts/Bic1CpMi.chunk.js.map +0 -1
  242. package/dist/scripts/BjgJ1i6i.chunk.js +0 -6
  243. package/dist/scripts/BjgJ1i6i.chunk.js.map +0 -1
  244. package/dist/scripts/BjiBJyQD.chunk.js +0 -2
  245. package/dist/scripts/BjiBJyQD.chunk.js.map +0 -1
  246. package/dist/scripts/BkuaVwYH.chunk.js +0 -2
  247. package/dist/scripts/BkuaVwYH.chunk.js.map +0 -1
  248. package/dist/scripts/BmVEWaPp.chunk.js +0 -4
  249. package/dist/scripts/BmVEWaPp.chunk.js.map +0 -1
  250. package/dist/scripts/BohkY37l.chunk.js +0 -2
  251. package/dist/scripts/BohkY37l.chunk.js.map +0 -1
  252. package/dist/scripts/BvIrLDbv.chunk.js +0 -2
  253. package/dist/scripts/BvIrLDbv.chunk.js.map +0 -1
  254. package/dist/scripts/BvJAziJf.chunk.js +0 -2
  255. package/dist/scripts/BvJAziJf.chunk.js.map +0 -1
  256. package/dist/scripts/BzoD15bZ.chunk.js +0 -2
  257. package/dist/scripts/BzoD15bZ.chunk.js.map +0 -1
  258. package/dist/scripts/C0fIn5Jw.chunk.js +0 -2
  259. package/dist/scripts/C0fIn5Jw.chunk.js.map +0 -1
  260. package/dist/scripts/C1LS2BqQ.chunk.js +0 -2
  261. package/dist/scripts/C1LS2BqQ.chunk.js.map +0 -1
  262. package/dist/scripts/C89Wm2QM.chunk.js +0 -2
  263. package/dist/scripts/C89Wm2QM.chunk.js.map +0 -1
  264. package/dist/scripts/CFp1zKGZ.chunk.js +0 -8
  265. package/dist/scripts/CFp1zKGZ.chunk.js.map +0 -1
  266. package/dist/scripts/CGvB_tzk.chunk.js +0 -2
  267. package/dist/scripts/CGvB_tzk.chunk.js.map +0 -1
  268. package/dist/scripts/CJGzIuaC.chunk.js +0 -2
  269. package/dist/scripts/CJGzIuaC.chunk.js.map +0 -1
  270. package/dist/scripts/CK9SUSD9.chunk.js +0 -2
  271. package/dist/scripts/CK9SUSD9.chunk.js.map +0 -1
  272. package/dist/scripts/CRnFAzfK.chunk.js +0 -2
  273. package/dist/scripts/CRnFAzfK.chunk.js.map +0 -1
  274. package/dist/scripts/CVftTaOh.chunk.js +0 -2
  275. package/dist/scripts/CVftTaOh.chunk.js.map +0 -1
  276. package/dist/scripts/CW7x8M-z.chunk.js +0 -2
  277. package/dist/scripts/CW7x8M-z.chunk.js.map +0 -1
  278. package/dist/scripts/CX5q-0jT.chunk.js +0 -2
  279. package/dist/scripts/CX5q-0jT.chunk.js.map +0 -1
  280. package/dist/scripts/CcJo9tyC.chunk.js +0 -2
  281. package/dist/scripts/CcJo9tyC.chunk.js.map +0 -1
  282. package/dist/scripts/Cd8Y7VGD.chunk.js +0 -2
  283. package/dist/scripts/Cd8Y7VGD.chunk.js.map +0 -1
  284. package/dist/scripts/CdEUIVMJ.chunk.js +0 -2
  285. package/dist/scripts/CdEUIVMJ.chunk.js.map +0 -1
  286. package/dist/scripts/Cf7yxDlS.chunk.js +0 -2
  287. package/dist/scripts/Cf7yxDlS.chunk.js.map +0 -1
  288. package/dist/scripts/Ch38wU3l.chunk.js +0 -2
  289. package/dist/scripts/Ch38wU3l.chunk.js.map +0 -1
  290. package/dist/scripts/Cj1EIzRP.chunk.js +0 -2
  291. package/dist/scripts/Cj1EIzRP.chunk.js.map +0 -1
  292. package/dist/scripts/Ckh8ZMGm.chunk.js +0 -2
  293. package/dist/scripts/Ckh8ZMGm.chunk.js.map +0 -1
  294. package/dist/scripts/ClIb9fji.chunk.js +0 -10
  295. package/dist/scripts/ClIb9fji.chunk.js.map +0 -1
  296. package/dist/scripts/ClkubQ2J.chunk.js +0 -2
  297. package/dist/scripts/ClkubQ2J.chunk.js.map +0 -1
  298. package/dist/scripts/ClngJcaG.chunk.js +0 -2
  299. package/dist/scripts/ClngJcaG.chunk.js.map +0 -1
  300. package/dist/scripts/Cmh_kkGl.chunk.js +0 -2
  301. package/dist/scripts/Cmh_kkGl.chunk.js.map +0 -1
  302. package/dist/scripts/Cmu1J2M7.chunk.js +0 -262
  303. package/dist/scripts/Cmu1J2M7.chunk.js.map +0 -1
  304. package/dist/scripts/CqnFgpqG.chunk.js +0 -2
  305. package/dist/scripts/CqnFgpqG.chunk.js.map +0 -1
  306. package/dist/scripts/Ctl4eE7j.chunk.js +0 -2
  307. package/dist/scripts/Ctl4eE7j.chunk.js.map +0 -1
  308. package/dist/scripts/Cu2SZCs_.chunk.js +0 -3
  309. package/dist/scripts/Cu2SZCs_.chunk.js.map +0 -1
  310. package/dist/scripts/Cus4Epw8.chunk.js +0 -2
  311. package/dist/scripts/Cus4Epw8.chunk.js.map +0 -1
  312. package/dist/scripts/Cwr3w1_A.chunk.js +0 -2
  313. package/dist/scripts/Cwr3w1_A.chunk.js.map +0 -1
  314. package/dist/scripts/CyS0Qcff.chunk.js +0 -2
  315. package/dist/scripts/CyS0Qcff.chunk.js.map +0 -1
  316. package/dist/scripts/Cz6t-6nF.chunk.js +0 -2
  317. package/dist/scripts/Cz6t-6nF.chunk.js.map +0 -1
  318. package/dist/scripts/D22pDzdH.chunk.js +0 -2
  319. package/dist/scripts/D22pDzdH.chunk.js.map +0 -1
  320. package/dist/scripts/D2z6V6KN.chunk.js +0 -2
  321. package/dist/scripts/D2z6V6KN.chunk.js.map +0 -1
  322. package/dist/scripts/D3rgHjw0.chunk.js +0 -2
  323. package/dist/scripts/D3rgHjw0.chunk.js.map +0 -1
  324. package/dist/scripts/D4zllLcC.chunk.js +0 -2
  325. package/dist/scripts/D4zllLcC.chunk.js.map +0 -1
  326. package/dist/scripts/D5FZp_R5.chunk.js +0 -2
  327. package/dist/scripts/D5FZp_R5.chunk.js.map +0 -1
  328. package/dist/scripts/D9PHjOfy.chunk.js +0 -42
  329. package/dist/scripts/D9PHjOfy.chunk.js.map +0 -1
  330. package/dist/scripts/DMIuTLXg.chunk.js +0 -2
  331. package/dist/scripts/DMIuTLXg.chunk.js.map +0 -1
  332. package/dist/scripts/DNgLQx2d.chunk.js +0 -2
  333. package/dist/scripts/DNgLQx2d.chunk.js.map +0 -1
  334. package/dist/scripts/DPPRKUKt.chunk.js +0 -2
  335. package/dist/scripts/DPPRKUKt.chunk.js.map +0 -1
  336. package/dist/scripts/DTDgnfLK.chunk.js +0 -2
  337. package/dist/scripts/DTDgnfLK.chunk.js.map +0 -1
  338. package/dist/scripts/DTUnn1Hh.chunk.js +0 -2
  339. package/dist/scripts/DTUnn1Hh.chunk.js.map +0 -1
  340. package/dist/scripts/DWKdFOij.chunk.js +0 -2
  341. package/dist/scripts/DWKdFOij.chunk.js.map +0 -1
  342. package/dist/scripts/DXjxFPuU.chunk.js +0 -2
  343. package/dist/scripts/DXjxFPuU.chunk.js.map +0 -1
  344. package/dist/scripts/DZYVycui.chunk.js +0 -2
  345. package/dist/scripts/DZYVycui.chunk.js.map +0 -1
  346. package/dist/scripts/D_Q6UyjE.chunk.js +0 -2
  347. package/dist/scripts/D_Q6UyjE.chunk.js.map +0 -1
  348. package/dist/scripts/D_YN6yks.chunk.js +0 -2
  349. package/dist/scripts/D_YN6yks.chunk.js.map +0 -1
  350. package/dist/scripts/DecntqLn.chunk.js +0 -2
  351. package/dist/scripts/DecntqLn.chunk.js.map +0 -1
  352. package/dist/scripts/DfBzbPUM.chunk.js +0 -2
  353. package/dist/scripts/DfBzbPUM.chunk.js.map +0 -1
  354. package/dist/scripts/Di60KvwG.chunk.js +0 -2
  355. package/dist/scripts/Di60KvwG.chunk.js.map +0 -1
  356. package/dist/scripts/Dj0aHq7R.chunk.js +0 -2
  357. package/dist/scripts/Dj0aHq7R.chunk.js.map +0 -1
  358. package/dist/scripts/DjZDmVy9.chunk.js +0 -2
  359. package/dist/scripts/DjZDmVy9.chunk.js.map +0 -1
  360. package/dist/scripts/DjgLQWKh.chunk.js +0 -2
  361. package/dist/scripts/DjgLQWKh.chunk.js.map +0 -1
  362. package/dist/scripts/DljLRdDL.chunk.js +0 -2
  363. package/dist/scripts/DljLRdDL.chunk.js.map +0 -1
  364. package/dist/scripts/DoKirPj2.chunk.js +0 -2
  365. package/dist/scripts/DoKirPj2.chunk.js.map +0 -1
  366. package/dist/scripts/DrZPksO1.chunk.js +0 -2
  367. package/dist/scripts/DrZPksO1.chunk.js.map +0 -1
  368. package/dist/scripts/DwXWjOFd.chunk.js +0 -2
  369. package/dist/scripts/DwXWjOFd.chunk.js.map +0 -1
  370. package/dist/scripts/Dwsvd8p8.chunk.js +0 -3
  371. package/dist/scripts/Dwsvd8p8.chunk.js.map +0 -1
  372. package/dist/scripts/Ewq6yyV4.chunk.js +0 -2
  373. package/dist/scripts/Ewq6yyV4.chunk.js.map +0 -1
  374. package/dist/scripts/GOwzfXiv.chunk.js +0 -2
  375. package/dist/scripts/GOwzfXiv.chunk.js.map +0 -1
  376. package/dist/scripts/GybZtYpZ.chunk.js +0 -3
  377. package/dist/scripts/GybZtYpZ.chunk.js.map +0 -1
  378. package/dist/scripts/H13OLF2T.chunk.js +0 -2
  379. package/dist/scripts/H13OLF2T.chunk.js.map +0 -1
  380. package/dist/scripts/HdH1xgCy.chunk.js +0 -2
  381. package/dist/scripts/HdH1xgCy.chunk.js.map +0 -1
  382. package/dist/scripts/K65Dt7jg.chunk.js +0 -2
  383. package/dist/scripts/K65Dt7jg.chunk.js.map +0 -1
  384. package/dist/scripts/M-TSYEoo.chunk.js +0 -2
  385. package/dist/scripts/M-TSYEoo.chunk.js.map +0 -1
  386. package/dist/scripts/O9F9Sybw.chunk.js +0 -34
  387. package/dist/scripts/O9F9Sybw.chunk.js.map +0 -1
  388. package/dist/scripts/PRj0OsVz.chunk.js +0 -2
  389. package/dist/scripts/PRj0OsVz.chunk.js.map +0 -1
  390. package/dist/scripts/SsbfqiCA.chunk.js +0 -2
  391. package/dist/scripts/SsbfqiCA.chunk.js.map +0 -1
  392. package/dist/scripts/app-BDrXtKwD.js +0 -228
  393. package/dist/scripts/app-BDrXtKwD.js.map +0 -1
  394. package/dist/scripts/bOC-mo3v.chunk.js +0 -2
  395. package/dist/scripts/bOC-mo3v.chunk.js.map +0 -1
  396. package/dist/scripts/cCAKx9a1.chunk.js +0 -2
  397. package/dist/scripts/cCAKx9a1.chunk.js.map +0 -1
  398. package/dist/scripts/csPZD_eN.chunk.js +0 -2
  399. package/dist/scripts/csPZD_eN.chunk.js.map +0 -1
  400. package/dist/scripts/iTBVzKEZ.chunk.js +0 -2
  401. package/dist/scripts/iTBVzKEZ.chunk.js.map +0 -1
  402. package/dist/scripts/jhT3mG38.chunk.js +0 -2
  403. package/dist/scripts/jhT3mG38.chunk.js.map +0 -1
  404. package/dist/scripts/lcnUAi0K.chunk.js +0 -2
  405. package/dist/scripts/lcnUAi0K.chunk.js.map +0 -1
  406. package/dist/scripts/mBxqWw8V.chunk.js +0 -2
  407. package/dist/scripts/mBxqWw8V.chunk.js.map +0 -1
  408. package/dist/scripts/nR79RHo_.chunk.js +0 -15
  409. package/dist/scripts/nR79RHo_.chunk.js.map +0 -1
  410. package/dist/scripts/sFV5nxD4.chunk.js +0 -2
  411. package/dist/scripts/sFV5nxD4.chunk.js.map +0 -1
  412. package/dist/scripts/t5MCaEYl.chunk.js +0 -2
  413. package/dist/scripts/t5MCaEYl.chunk.js.map +0 -1
  414. package/dist/scripts/uoF107dn.chunk.js +0 -380
  415. package/dist/scripts/uoF107dn.chunk.js.map +0 -1
  416. package/dist/scripts/zeFMHqhy.chunk.js +0 -2
  417. package/dist/scripts/zeFMHqhy.chunk.js.map +0 -1
@@ -1,2 +0,0 @@
1
- import{aK as Y,bX as X,j as t,O as m,L as h,T as x,p as C,a7 as J,v as d,h as Z,a6 as ee,bY as te,r as se,w as ne,a4 as M,c as re,u as A,bO as H,e as ae,a as ie,bF as R,V as ce,C as le}from"./app-BDrXtKwD.js";import{I as oe,a as de,M as ue,u as me}from"./O9F9Sybw.chunk.js";import{I as _,a as g}from"./D9PHjOfy.chunk.js";import{a as ge}from"./Dwsvd8p8.chunk.js";import{d as W,I as O,e as D,f as p,a as he,b as fe,h as N,i as xe}from"./BUXFRkJU.chunk.js";import{P as be}from"./CRnFAzfK.chunk.js";import{P as je,a as Ie}from"./K65Dt7jg.chunk.js";import{T as Se}from"./CFp1zKGZ.chunk.js";import{u as we}from"./Cd8Y7VGD.chunk.js";import{u as ye}from"./BAb7U5e_.chunk.js";import{u as pe}from"./BzoD15bZ.chunk.js";import{P as ve}from"./D22pDzdH.chunk.js";import{u as ke}from"./csPZD_eN.chunk.js";import{u as Ne,a as Ce}from"./B29cILrj.chunk.js";import{u as Me}from"./ClkubQ2J.chunk.js";import{u as Ae,I as Re}from"./Ewq6yyV4.chunk.js";import{u as Ue,a as Te}from"./BvIrLDbv.chunk.js";import{u as $e}from"./BENXQfLb.chunk.js";import"./CVftTaOh.chunk.js";import"./mBxqWw8V.chunk.js";import"./BF6robfP.chunk.js";import"./Bf0d_B71.chunk.js";import"./5O9SdVRZ.chunk.js";import"./sFV5nxD4.chunk.js";import"./lcnUAi0K.chunk.js";import"./Ctl4eE7j.chunk.js";import"./nR79RHo_.chunk.js";import"./H13OLF2T.chunk.js";import"./Cmh_kkGl.chunk.js";import"./BcPvb8J5.chunk.js";import"./cCAKx9a1.chunk.js";import"./CX5q-0jT.chunk.js";const Pe={preventScrollTop(){Y.Radio.channel(X.SHELL).trigger("prevent:scroll:top")}},Fe="shared.interactionQuestionsEmptyState",Ee=h.encloseNamespace(Fe);function qe(e){return t.jsxs(m,{className:"rounded h-100 bg-white justify-content-center py-4",children:[t.jsx(m.Image,{src:e.emptyStateImageUrl,size:"small"}),t.jsx(m.Info,{className:"w-100",children:Ee("emptyStateText")})]})}const v="shared.interactionResponseList";function Le(e){function s(){switch(e.filter){case"correct":return e.correctImageUrl;case"incorrect":return e.incorrectImageUrl;case"marking_required":return e.markingRequiredImageUrl;case"skipped":return e.skippedImageUrl}}function n(){switch(e.filter){case"correct":return"correctEmptyState";case"incorrect":return"incorrectEmptyState";case"marking_required":return"markingRequiredEmptyState";case"skipped":return"skippedEmptyState"}}return t.jsx(t.Fragment,{children:t.jsxs(m,{className:"m-4",children:[t.jsx(m.Image,{src:s(),className:"w-25 h-auto"}),t.jsx(m.Info,{children:t.jsx(x,{namespace:v,phrase:n()})})]})})}function He(e){function s(r){return r===e.filter}function n(r){return`rounded-pill bg-light ${s(r)?"bg-dark text-white":""}`}return t.jsxs("div",{className:"d-flex gap-2 m-3",children:[t.jsx("button",{className:n("marking_required"),onClick:()=>e.toggleFilter("marking_required"),children:t.jsx(x,{namespace:v,phrase:"markingRequired"})}),t.jsx("button",{className:n("correct"),onClick:()=>e.toggleFilter("correct"),children:t.jsx(x,{namespace:v,phrase:"correct"})}),t.jsx("button",{className:n("incorrect"),onClick:()=>e.toggleFilter("incorrect"),children:t.jsx(x,{namespace:v,phrase:"incorrect"})}),t.jsx("button",{className:n("skipped"),onClick:()=>e.toggleFilter("skipped"),children:t.jsx(x,{namespace:v,phrase:"skipped"})})]})}const We="interactives.interactionResponseListHeader",Be=h.encloseNamespace(We);function Qe(e){var n;const s=(n=e.interaction.data)==null?void 0:n.suggestedResponse;return t.jsx("div",{className:"rounded bg-white",children:t.jsxs("div",{className:"p-2 position-relative",children:[t.jsx("div",{className:"d-flex",children:t.jsx(_,{interaction:e.interaction,iconClassName:"flex-shrink-0"})}),!!s&&t.jsxs("div",{className:"mt-2",children:[t.jsx("strong",{children:Be("suggestedResponse")}),t.jsx("p",{className:"m-0",children:s})]})]})})}const _e="shared.submitMarkedAnswers",Oe=h.encloseNamespace(_e);function B(e){return t.jsx("div",{className:"d-flex justify-content-end",children:t.jsx("button",{className:"btn btn-outline-dark",onClick:e.submit,disabled:e.disabled,children:Oe("submitAnswers")})})}const De="_awaitingMarking_1nhv5_1",Ve={awaitingMarking:De},V="shared.interactionResponseList",U=h.encloseNamespace(V);function ze(e,s){return s.filter(r=>O.isInteractionCorrect(e,D(r))===p.AwaitingMarking).reduce((r,i)=>{var l,c;return{...r,[((l=i.user)==null?void 0:l.id)||((c=i.user)==null?void 0:c.sessionId)]:!0}},{})}function Ke(e){var u;const[s,n]=C.useState(),r=ze(e.interaction,e.results.students),i=Object.keys(e.markedAnswers).length;if(!((u=e.results.students)!=null&&u.length))return t.jsx("div",{className:"d-flex flex-column h-100",children:t.jsxs(m,{className:"bg-white rounded mt-2 py-5 flex-grow-1 justify-content-center",children:[t.jsx(m.Image,{src:e.emptyStateImageUrl,size:"small"}),t.jsx(m.Heading,{children:U("emptyStateHeading")}),t.jsx(m.Info,{className:"w-100",children:U("emptyStateDescription")})]})});function l(o){n(s===o?null:o)}function c(){return e.results.students.filter(o=>{const b=D(o),j=O.isInteractionCorrect(e.interaction,b),I={correct:p.Correct,incorrect:p.Incorrect,marking_required:p.AwaitingMarking,skipped:p.UnAnswered};return!s||s in I&&j===I[s]})}const a=c();return t.jsxs(t.Fragment,{children:[e.reportsStyling&&t.jsx(Qe,{interaction:e.interaction}),t.jsxs("div",{className:e.reportsStyling?"d-flex justify-content-end":"d-flex align-items-center justify-content-between border-bottom px-3 py-2",children:[!e.reportsStyling&&t.jsx("p",{className:"fw-semibold mb-0",children:t.jsx(x,{namespace:V,phrase:"studentAnswers"})}),!!Object.keys(r).length&&t.jsx(J,{id:"submitAnswers",title:U("demoOnly"),spanHack:e.isDemo,children:t.jsx("div",{className:`${e.isDemo?"pointer-events-none":""} ${e.reportsStyling?"mt-2":""}`,children:t.jsx(B,{submit:e.submitMarkedAnswers,disabled:!i})})})]}),t.jsxs(t.Fragment,{children:[!e.reportsStyling&&t.jsx(He,{filter:s,toggleFilter:l}),!e.reportsStyling&&!a.length&&s&&t.jsx(Le,{filter:s,markingRequiredImageUrl:e.markingRequiredImageUrl,correctImageUrl:e.correctImageUrl,incorrectImageUrl:e.incorrectImageUrl,skippedImageUrl:e.skippedImageUrl}),a&&t.jsx("ul",{className:"list-unstyled mb-0",children:a.map((o,b)=>{var w,y;const j=ge(o.user,e.anonymiseUsers),I=r[((w=o.user)==null?void 0:w.id)||((y=o.user)==null?void 0:y.sessionId)];let S=e.reportsStyling?"bg-white p-2":"bg-white px-3 pt-3 pb-2";return I&&(S+=` ${Ve.awaitingMarking} my-1`),t.jsx("li",{className:e.reportsStyling?"":"border-bottom",children:e.reportsStyling?t.jsx(oe,{interaction:e.interaction,studentResults:o,markedStatus:W(e.interaction.id,o,e.markedAnswers),markInteraction:e.addMarkedAnswers,imageCdnUrl:e.imageCdnUrl,showStudentDetails:!0,anonymisedUserName:j,className:S,showFeedback:!0,reportsStyling:!0,responseComponentClass:"mx-n2"}):t.jsx(de,{interaction:e.interaction,studentResults:o,markedStatus:W(e.interaction.id,o,e.markedAnswers),markInteraction:e.addMarkedAnswers,imageCdnUrl:e.imageCdnUrl,showStudentDetails:!0,anonymisedUserName:j,className:S,showFeedback:!0})},b)})}),e.reportsStyling&&!!r.length&&t.jsx("div",{className:"mt-2",children:t.jsx(B,{submit:e.submitMarkedAnswers,disabled:!i})})]})]})}function Ge(e){const s=n=>n?n.split(/({\d+})/).map((r,i)=>{const l=r.match(/{(\d+)}/);if(l){const c=l[1],a=e.interaction.actionableItems.find(u=>+u.order==+c);if(a)return t.jsx("span",{className:"bg-white border border-gray-300 rounded p-1 lh-lg",children:a.name},i)}return r}):"";return t.jsx("div",{children:t.jsx("p",{className:"mb-0",children:s(e.interaction.data.sentence)})})}const Ye="_answerWidth_nmntd_10",$={answerWidth:Ye};function Xe(e){var n,r;return!((r=d.first((n=e.interaction)==null?void 0:n.actionableItems).data)!=null&&r.imageUrl)?t.jsx("ul",{className:`${$.answerWidth} list-unstyled row g-2`,children:e.interaction.actionableItems.map(i=>t.jsx("li",{className:"col-12",children:t.jsxs("div",{className:`${i.isCorrect?"bg-light-green border-green":"bg-light-red border-red"} rounded border py-1 px-2 m-0`,children:[t.jsxs("span",{className:"fw-semibold",children:[e.indexToLetter(i.order),". "]}),t.jsx("span",{children:i.name})]})},i.id))}):t.jsx("div",{className:$.answerWidth,children:t.jsx(ue,{interaction:e.interaction,size:"sm",showFeedback:!1,showCorrectnessIcons:!0,isDisplayOnly:!0})})}const Je="shared.questionTable";function Ze(e){var n;const s=(n=e.interaction.data)==null?void 0:n.suggestedResponse;return s?t.jsxs("div",{className:`${$.answerWidth} bg-light-blue rounded p-2 mb-2`,children:[t.jsx("div",{className:"d-flex justify-content-between",children:t.jsx("p",{className:"fw-semibold mb-2",children:t.jsx(x,{namespace:Je,phrase:"suggestedResponse"})})}),t.jsx("p",{className:"mb-0",children:s})]}):t.jsx(t.Fragment,{})}function et(e){return t.jsx("ul",{className:"list-unstyled d-flex gap-2",children:e.interaction.actionableItems.map(s=>t.jsxs("li",{className:`${s.isCorrect?"bg-light-green border-green":"bg-light-red border-red"} rounded border px-2 py-1 mb-2 w-50`,children:[t.jsxs("span",{className:"fw-semibold",children:[e.indexToLetter(s.order),". "]}),t.jsx("span",{children:s.name})]},s.id))})}function tt(e){function s(){switch(e.interaction.typeId){case g.MultipleChoice:return t.jsx(Xe,{interaction:e.interaction,indexToLetter:F});case g.TrueOrFalse:return t.jsx(et,{interaction:e.interaction,indexToLetter:F});case g.ShortAnswer:return t.jsx(Ze,{interaction:e.interaction});case g.MissingWord:return t.jsx(Ge,{interaction:e.interaction});default:return null}}const n=s();return n?t.jsx("div",{className:"w-100 mt-3",children:n}):t.jsx(t.Fragment,{})}const st="shared.questionTable",z=h.encloseNamespace(st);function nt(e,s,n){const r=e.cells.find(l=>l.column.id===n).value,i=s.cells.find(l=>l.column.id===n).value;return r.awaitingMarking?-1:i.awaitingMarking||r.percentCorrect>=i.percentCorrect?1:-1}function P(e){return t.jsx("div",{className:`d-flex ${e.className??""}`,children:e.children})}function T(e){return t.jsx(P,{className:e.column.isSorted&&"fw-bold",children:z(e.phraseKey)})}function rt(e){return[{Header:({column:s})=>t.jsx(T,{column:s,phraseKey:"#"}),accessor:"questionNumber",id:"index",Cell:({row:{original:{questionNumber:s}}})=>t.jsxs(P,{children:[s+1,"."]}),width:15,disableSortBy:!0},{Header:({column:s})=>t.jsx(T,{column:s,phraseKey:"question"}),accessor:"data",Cell:({row:{original:s},initialState:{selectedRowIds:n}})=>{const r=n==null?void 0:n[s==null?void 0:s.id];return t.jsxs(P,{className:"flex-column",children:[t.jsx("div",{className:`${r?"":"clamp-1"} pe-2`,children:t.jsx(_,{interaction:s,containerClassName:"d-flex"})}),e&&r&&t.jsx(tt,{interaction:s})]})},disableSortBy:!0},{Header:({column:s})=>t.jsx(T,{column:s,phraseKey:"score"}),accessor:"resultsSummary",id:"correctlyAnswered",Cell:({value:{percentCorrect:s,awaitingMarking:n}})=>n?t.jsx(be,{title:z("markingRequired"),className:"flex-grow-1",tooltipClassName:"d-block",showLabel:!0}):t.jsx(je,{percentage:s,layout:Ie.LabelBefore}),width:60,sortDescFirst:!0,sortType:nt}]}function at(e,s,n,r){return C.useMemo(()=>{const i=he(e),l=i.reduce((a,u,o)=>({...a,[u.id]:o}),{}),c=i.map(a=>({...a,questionNumber:l[a.id],resultsSummary:fe(a,s)}));if((r==null?void 0:r.id)==="correctlyAnswered"){const a=d.sortBy(c,u=>u.resultsSummary.awaitingMarking?-1:u.resultsSummary.percentCorrect);return r.desc?a.reverse():a}return c},[n,r])}function F(e){return String.fromCharCode(e+65)}const it="shared.questionTable",f=h.encloseNamespace(it);function ct(e,s){const n=e.actionableItems.map((r,i)=>({id:r.id,label:e.typeId===g.MultipleChoice?F(i):r.name,isCorrect:r.isCorrect,count:0}));return s.students.forEach(r=>{const i=d.last(r.results).attempts,l=d.findWhere(i,{id:e.id});l&&l.answers.forEach(c=>{const a=d.findWhere(n,{id:c.id});a&&a.count++})}),n}function lt(e,s){const n=e.actionableItems.map(r=>({id:r.id,label:r.name,isCorrect:r.isCorrect,count:0}));return n.push({label:f("incorrect"),count:0,isCorrect:!1}),s.students.forEach(r=>{const i=d.last(r.results).attempts,l=d.findWhere(i,{id:e.id});l&&l.answers.forEach(c=>{const a=d.findWhere(n,{id:c.id});if(a&&c.status===N.Correct)a.count++;else{const u=d.findWhere(n,{label:f("incorrect")});u.count++}})}),n}function ot(e,s){const n=[{label:f("correct"),isCorrect:!0,count:0},{label:f("incorrect"),isCorrect:!1,count:0}];return s.students.forEach(r=>{const i=d.last(r.results).attempts,l=d.findWhere(i,{id:e.id});l&&l.answers.forEach(c=>{if(c.status===N.Correct){const a=d.findWhere(n,{label:f("correct")});a.count++}if(c.status===N.Incorrect){const a=d.findWhere(n,{label:f("incorrect")});a.count++}if(c.status===N.PendingReview){let a=d.findWhere(n,{label:f("pending")});a||(n.push({label:f("pending"),count:0,isCorrect:!1}),a=d.findWhere(n,{label:f("pending")})),a.count++}})}),n}function dt(e){return t.jsx("svg",{...e,children:t.jsx("path",{fill:"currentColor",d:"M12 4c-3.308 0-6 2.692-6 6 0 1.923.916 3.716 2.462 4.846v3.77c0 .763.62 1.384 1.384 1.384h4.308c.763 0 1.385-.621 1.385-1.385v-3.77A6 6 0 0 0 18 10c0-3.308-2.692-6-6-6m.461 8a2.62 2.62 0 0 1 2.154-2.575v.113a2.62 2.62 0 0 1-2.154 2.575zm-.922.113a2.62 2.62 0 0 1-2.154-2.575v-.113A2.62 2.62 0 0 1 11.539 12zm3.076 4.656v.616h-5.23v-.616zm-.461 2.308H9.846a.46.46 0 0 1-.461-.462v-.307h5.23v.307a.46.46 0 0 1-.461.462m.666-4.855a.46.46 0 0 0-.205.384v1.24h-2.154v-2.8a3.544 3.544 0 0 0 3.078-3.508v-.615a.46.46 0 0 0-.462-.461A3.54 3.54 0 0 0 12 10.254a3.54 3.54 0 0 0-3.077-1.792.46.46 0 0 0-.461.461v.615a3.544 3.544 0 0 0 3.077 3.509v2.8H9.385v-1.241a.46.46 0 0 0-.205-.384A5.07 5.07 0 0 1 6.923 10c0-2.8 2.278-5.077 5.077-5.077S17.077 7.201 17.077 10a5.07 5.07 0 0 1-2.257 4.222"})})}const K="shared.questionTable",ut=h.encloseNamespace(K);function mt(e){const s=r(),n=i();function r(){if(!e.interaction||!e.results)return;let c;switch(e.interaction.typeId){case g.ShortAnswer:case g.Illustration:c=ot;break;case g.MissingWord:c=lt;break;case g.MultipleChoice:case g.TrueOrFalse:c=ct;break}return c(e.interaction,e.results)}function i(){return s==null?void 0:s.reduce((c,a)=>a.count>c?a.count:c,0)}function l(c){const a="border rounded me-2";return c.count?c.label===ut("pending")?`${a} border-blue bg-light-blue`:c.isCorrect?`${a} border-green bg-light-green`:`${a} border-red bg-light-red`:`${a} border bg-light px-1`}return t.jsxs("div",{className:"border border rounded p-3 mb-3",children:[t.jsxs("div",{className:"d-flex align-items-center gap-2 mb-3",children:[t.jsx("div",{className:"rounded-circle bg-light-teal text-teal",children:t.jsx(Z,{svg:dt,size:ee.Large})}),t.jsx("h2",{className:"h6 mb-0",children:t.jsx("span",{children:t.jsx(x,{namespace:K,phrase:"questionSummary"})})})]}),t.jsxs("div",{className:"d-flex gap-2",children:[t.jsx("div",{className:"max-w-25",children:s==null?void 0:s.map(c=>t.jsx("p",{className:"text-truncate mb-2",children:c.label},c.label))}),t.jsx("div",{className:"flex-grow-1",children:s==null?void 0:s.map((c,a)=>t.jsxs("div",{className:"d-flex mb-2",children:[t.jsx("div",{className:l(c),style:{width:`${c.count/n*100}%`,height:20}}),t.jsx("span",{children:c.count})]},`${e.interaction.id}${a}`))})]})]})}const gt="shared.selectedInteractionEmptyState",ht=h.encloseNamespace(gt);function ft(e){return t.jsxs(m,{className:"rounded h-100 bg-white justify-content-center py-4",children:[t.jsx(m.Image,{src:e.emptyStateUrl,size:"small"}),t.jsx(m.Info,{className:"w-100",children:ht("emptyStateText")})]})}function xt(e,s){switch(e){case"score_desc":return[{id:s,desc:!0}];case"score_asc":return[{id:s,desc:!1}];default:return[]}}function bt(e){var c;const[s,n]=C.useState(xt(e.sortBy,"correctlyAnswered")),r=at(e.interactive,e.results,e.refreshTable,d.first(s)),i=e.selectedInteractionId&&xe(e.interactive,e.selectedInteractionId);function l({original:a}){Pe.preventScrollTop(),te.updateParams({interactionId:a.id},{merge:!0})}return t.jsxs("div",{className:"row",children:[t.jsx("div",{className:"col-6 flex-grow-1",children:t.jsx(Se,{columns:rt(e.showAnswersInTable),data:r,theme:e.theme,onSelectRow:l,initialSelectedRowIds:i?[i.id]:null,getRowId:a=>a.id,enableSort:!0,manualSort:!0,onSort:n,initialSortBy:s,emptyState:t.jsx(qe,{emptyStateImageUrl:e.emptyQuestionsStateImageUrl})},e.selectedInteractionId)}),t.jsxs("div",{className:"col-6 d-flex flex-column",children:[!e.reportsStyling&&e.selectedInteractionId&&!!((c=e.results.students)!=null&&c.length)&&t.jsx(mt,{interaction:i,results:e.results}),t.jsxs("div",{className:`rounded flex-grow-1 ${e.reportsStyling?"":"border"}`,children:[!!i&&t.jsx(Ke,{interaction:i,results:e.results,markedAnswers:e.markedAnswers,addMarkedAnswers:e.addMarkedAnswers,submitMarkedAnswers:e.submitMarkedAnswers,imageCdnUrl:e.imageCdnUrl,anonymiseUsers:e.anonymiseUsers,emptyStateImageUrl:e.emptyResponseStateImageUrl,markingRequiredImageUrl:e.markingRequiredImageUrl,correctImageUrl:e.correctImageUrl,incorrectImageUrl:e.incorrectImageUrl,skippedImageUrl:e.skippedImageUrl,reportsStyling:e.reportsStyling,isDemo:e.isDemo}),!i&&t.jsx(ft,{emptyStateUrl:e.selectQuestionImageUrl})]})]})]})}const jt="shared.confirmationPopup",Q=h.encloseNamespace(jt);G.defaultProps={confirmButtonVariant:"primary",cancelButtonVariant:"link"};function G(e){const[s,n]=se.useState(!1);return t.jsx(ne,{title:e.title,closePopup:e.closePopup,children:t.jsxs(t.Fragment,{children:[e.children,t.jsxs(M,{children:[t.jsx(M.Cancel,{onClick:e.closePopup,variant:e.cancelButtonVariant,text:e.cancelButtonText||Q("cancel")}),t.jsx(M.Submit,{onClick:()=>{n(!0),e.onClickConfirm()},text:e.confirmButtonText||Q("confirm"),variant:e.confirmButtonVariant,showSpinner:s,disabled:e.disabledConfirmButton})]})]})})}const It="_row_1ygni_1",St={row:It},wt={table:"bg-white rounded pb-2",header:"border-bottom px-2",headerCell:"p-2 d-flex align-items-center",cell:"px-2",row:`m-2 rounded py-1 ${St.row}`,selectedRow:"bg-light",sortIndicator:"ms-2"},yt="interactives.interactiveQuestionList",k=h.encloseNamespace(yt);function ts(e){var w,y,E,q,L;const[s]=re(ce.ANONYMISE_USERS),[n,r]=C.useState(!1),i=A(H.interactiveMetadata(e.interactiveMetadataId)),l=A((w=i.data)!=null&&w.interactiveId?H.interactive(i.data.interactiveId):null),c=ae(),a=we(e.interactiveMetadataId,c),u=A(le.config());ie({title:k("pageTitle",{interactive:(y=i.data)==null?void 0:y.name})}),Me((E=i.data)==null?void 0:E.name),Ne(Ce(i.data)),$e(e.interactiveMetadataId),Ue(a),Ae(e.interactiveMetadataId),ye(i),ke(i),pe([l,a,u]);const o=Te(a),{markedAnswers:b,addMarkedAnswers:j,submitMarkedAnswers:I}=me((q=l.data)==null?void 0:q.id,(L=i.data)==null?void 0:L.id,()=>r(!1)),S=!!l.data&&!!a.data&&!!u.data;return t.jsxs(t.Fragment,{children:[t.jsxs("div",{children:[t.jsx(Re,{interactiveMetadataId:e.interactiveMetadataId}),S?t.jsx(bt,{emptyResponseStateImageUrl:R.EmptyStates.Interactives.NoResponses,emptyQuestionsStateImageUrl:R.EmptyStates.Interactives.NoQuestions,selectQuestionImageUrl:R.EmptyStates.Interactives.NoData,anonymiseUsers:s,interactive:l.data,results:a.data,markedAnswers:b,addMarkedAnswers:j,submitMarkedAnswers:()=>r(!0),imageCdnUrl:u.data.imageCdnUrl,selectedInteractionId:e.interactionId,refreshTable:o,theme:wt,reportsStyling:!0}):t.jsx("div",{className:"row",children:t.jsx("div",{className:"col-6",children:t.jsx(ve,{})})})]}),n&&t.jsx(G,{title:k("markPopupTitle",{smartCount:Object.keys(b).length??0}),closePopup:()=>r(!1),confirmButtonText:k("submit"),confirmButtonVariant:"dark",onClickConfirm:I,children:t.jsx("p",{children:k("markPopupBody")})})]})}export{ts as InteractiveQuestionListView};
2
- //# sourceMappingURL=zeFMHqhy.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"zeFMHqhy.chunk.js","sources":["../../../../libs/common/src/backbone/utils/ScrollHelper.ts","../../../../libs/shared/src/apps/analytics/components/questions-list/interaction-questions-empty-state/InteractionQuestionsEmptyState.tsx","../../../../libs/shared/src/apps/analytics/components/questions-list/interaction-response-list/InteractionResponseListFilters.tsx","../../../../libs/shared/src/apps/analytics/components/questions-list/interaction-response-list/InteractionResponseListHeader.tsx","../../../../libs/shared/src/apps/analytics/components/questions-list/submit-marked-answers/SubmitMarkedAnswers.tsx","../../../../libs/shared/src/apps/analytics/components/questions-list/interaction-response-list/InteractionResponseList.tsx","../../../../libs/shared/src/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableMissingWord.tsx","../../../../libs/shared/src/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableMultipleChoice.tsx","../../../../libs/shared/src/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableShortAnswer.tsx","../../../../libs/shared/src/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableTrueOrFalse.tsx","../../../../libs/shared/src/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableAnswers.tsx","../../../../libs/shared/src/apps/analytics/components/questions-list/question-table/QuestionTableUtils.tsx","../../../../libs/shared/src/apps/analytics/components/questions-list/question-table/question-results-summary/QuestionResultsSummaryUtils.ts","../../../../libs/shared/src/images/svg/objects/LightbulbSvg.tsx","../../../../libs/shared/src/apps/analytics/components/questions-list/question-table/question-results-summary/QuestionResultsSummary.tsx","../../../../libs/shared/src/apps/analytics/components/questions-list/selected-interaction-empty-state/SelectedInteractionEmptyState.tsx","../../../../libs/shared/src/apps/analytics/utils/StudentTableUtils.ts","../../../../libs/shared/src/apps/analytics/components/questions-list/question-table/QuestionTable.tsx","../../../../libs/shared/src/components/confirmation-popup/ConfirmationPopup.tsx","../../src/apps/interactives/views/interactive-question-list/InteractiveQuestionListView.tsx"],"sourcesContent":["import { Radio } from 'backbone';\n\nimport { CommonChannels } from '../constants/CommonChannels';\n\nexport const ScrollHelper = {\n // Will prevent scrolling to the top of the page when applinks are triggered\n preventScrollTop(): void {\n Radio.channel(CommonChannels.SHELL).trigger('prevent:scroll:top');\n }\n};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\n\nconst namespace = 'shared.interactionQuestionsEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InteractionQuestionsEmptyStateProps {\n emptyStateImageUrl: string;\n}\n\nexport function InteractionQuestionsEmptyState(props: InteractionQuestionsEmptyStateProps): JSX.Element {\n return (\n <EmptyState className='rounded h-100 bg-white justify-content-center py-4'>\n <EmptyState.Image\n src={props.emptyStateImageUrl}\n size='small'\n />\n <EmptyState.Info className='w-100'>\n {getPhrase('emptyStateText')}\n </EmptyState.Info>\n </EmptyState>\n );\n}","import React from 'react';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'shared.interactionResponseList';\n\nexport type InteractionResponseFilterType = 'marking_required' | 'correct' | 'incorrect' | 'skipped';\n\ninterface InteractionResponseListFiltersEmptyStatesProps {\n filter: InteractionResponseFilterType;\n markingRequiredImageUrl: string;\n correctImageUrl: string;\n incorrectImageUrl: string;\n skippedImageUrl: string;\n}\n\nexport function InteractionResponseListFiltersEmptyStates(props: InteractionResponseListFiltersEmptyStatesProps) {\n function getFilterEmptyStateImageUrl() {\n switch (props.filter) {\n case 'correct': return props.correctImageUrl;\n case 'incorrect': return props.incorrectImageUrl;\n case 'marking_required': return props.markingRequiredImageUrl;\n case 'skipped': return props.skippedImageUrl;\n }\n }\n\n function getFilterEmptyStatePhrase() {\n switch (props.filter) {\n case 'correct': return 'correctEmptyState';\n case 'incorrect': return 'incorrectEmptyState';\n case 'marking_required': return 'markingRequiredEmptyState';\n case 'skipped': return 'skippedEmptyState';\n }\n }\n\n return (\n <>\n <EmptyState className='m-4'>\n <EmptyState.Image src={getFilterEmptyStateImageUrl()} className='w-25 h-auto' />\n <EmptyState.Info>\n <Text namespace={namespace} phrase={getFilterEmptyStatePhrase()} />\n </EmptyState.Info>\n </EmptyState>\n </>\n );\n}\n\ninterface InteractionResponseListFiltersProps {\n filter: InteractionResponseFilterType;\n toggleFilter: (filter: InteractionResponseFilterType) => void\n}\n\nexport function InteractionResponseListFilters(props: InteractionResponseListFiltersProps) {\n function isFilterSelected(filterButton: InteractionResponseFilterType) {\n return filterButton === props.filter;\n }\n\n function getFilterClassName(filterButton: InteractionResponseFilterType) {\n return `rounded-pill bg-light ${isFilterSelected(filterButton) ? 'bg-dark text-white' : ''}`;\n }\n\n return (\n\n <div className='d-flex gap-2 m-3'>\n <button className={getFilterClassName('marking_required')} onClick={() => props.toggleFilter('marking_required')}>\n <Text namespace={namespace} phrase='markingRequired' />\n </button>\n <button className={getFilterClassName('correct')} onClick={() => props.toggleFilter('correct')}>\n <Text namespace={namespace} phrase='correct' />\n </button>\n <button className={getFilterClassName('incorrect')} onClick={() => props.toggleFilter('incorrect')}>\n <Text namespace={namespace} phrase='incorrect' />\n </button>\n <button className={getFilterClassName('skipped')} onClick={() => props.toggleFilter('skipped')}>\n <Text namespace={namespace} phrase='skipped' />\n </button>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { InteractionLabel } from 'libs/shared/components/interactive-questions/InteractionLabel';\nimport { Interaction } from 'libs/shared/interfaces';\n\nconst namespace = 'interactives.interactionResponseListHeader';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InteractionResponseListHeaderProps {\n interaction: Interaction;\n}\n\nexport function InteractionResponseListHeader(props: InteractionResponseListHeaderProps): JSX.Element {\n const suggestedResponse = props.interaction.data?.suggestedResponse;\n\n return (\n <div className='rounded bg-white'>\n <div className='p-2 position-relative'>\n <div className='d-flex'>\n <InteractionLabel\n interaction={props.interaction}\n iconClassName='flex-shrink-0'\n />\n </div>\n {!!suggestedResponse &&\n <div className='mt-2'>\n <strong>{getPhrase('suggestedResponse')}</strong>\n <p className='m-0'>{suggestedResponse}</p>\n </div>\n }\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nconst namespace = 'shared.submitMarkedAnswers';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SubmitMarkedAnswersProps {\n submit: () => void;\n disabled: boolean\n}\n\nexport function SubmitMarkedAnswers(props: SubmitMarkedAnswersProps): JSX.Element {\n return (\n <div className='d-flex justify-content-end'>\n <button\n className='btn btn-outline-dark'\n onClick={props.submit}\n disabled={props.disabled}\n >\n {getPhrase('submitAnswers')}\n </button>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { InteractionResponseItem } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/InteractionResponseItem';\nimport { InteractionResponseFilterType, InteractionResponseListFilters, InteractionResponseListFiltersEmptyStates } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-list/InteractionResponseListFilters';\nimport { InteractionResponseListHeader } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-list/InteractionResponseListHeader';\nimport { SubmitMarkedAnswers } from 'libs/shared/apps/analytics/components/questions-list/submit-marked-answers/SubmitMarkedAnswers';\nimport { MarkedAnswerHash } from 'libs/shared/apps/analytics/hooks/UseMarkAnswers';\nimport { anonymiseUserName } from 'libs/shared/apps/analytics/utils/AnonymiseUserUtils';\nimport { getMarkedStatus } from 'libs/shared/apps/analytics/utils/InteractiveUtils';\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { InteractionResponse } from 'libs/shared/components/interaction-response/InteractionResponse';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { InteractionCorrectness } from 'libs/shared/enums/InteractionCorrectness';\nimport { InteractiveAnswerStatus } from 'libs/shared/enums/InteractiveAnswerStatus';\nimport { Interaction, InteractiveResultSet, StudentAnswer, StudentResults } from 'libs/shared/interfaces';\nimport { InteractiveCorrectnessHelper } from 'libs/shared/utils/InteractiveCorrectnessHelper';\nimport { getStudentResult } from 'libs/shared/utils/InteractiveHelper';\n\nimport styles from './interaction-response-list.module.scss';\n\nconst namespace = 'shared.interactionResponseList';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getResponsesToMark(\n interaction: Interaction,\n studentResults: StudentResults[]\n): HashObject {\n const responsesToMark = studentResults.filter(s => {\n const correctness = InteractiveCorrectnessHelper.isInteractionCorrect(\n interaction,\n getStudentResult(s)\n );\n return correctness === InteractionCorrectness.AwaitingMarking;\n });\n\n return responsesToMark.reduce((acc, s) => ({\n ...acc,\n [s.user?.id || s.user?.sessionId]: true\n }), {});\n}\n\ninterface InteractionResponseListProps {\n interaction: Interaction\n results: InteractiveResultSet;\n markedAnswers: MarkedAnswerHash;\n addMarkedAnswers: (answer: StudentAnswer[], status: InteractiveAnswerStatus) => void;\n submitMarkedAnswers: () => void;\n imageCdnUrl: string;\n anonymiseUsers: boolean;\n reportsStyling?: boolean;\n emptyStateImageUrl: string;\n markingRequiredImageUrl: string;\n correctImageUrl: string;\n incorrectImageUrl: string;\n skippedImageUrl: string;\n isDemo?: boolean;\n}\n\nexport function InteractionResponseList(props: InteractionResponseListProps): JSX.Element {\n const [ filter, setFilter ] = React.useState<InteractionResponseFilterType>();\n\n const responsesToMark = getResponsesToMark(props.interaction, props.results.students);\n const numMarkedAnswers = Object.keys(props.markedAnswers).length;\n\n if (!props.results.students?.length)\n return (\n <div className='d-flex flex-column h-100'>\n <EmptyState className='bg-white rounded mt-2 py-5 flex-grow-1 justify-content-center'>\n <EmptyState.Image src={props.emptyStateImageUrl} size='small' />\n <EmptyState.Heading>\n {getPhrase('emptyStateHeading')}\n </EmptyState.Heading>\n <EmptyState.Info className='w-100'>\n {getPhrase('emptyStateDescription')}\n </EmptyState.Info>\n </EmptyState>\n </div>\n );\n\n\n function toggleFilter(selectedFilter: InteractionResponseFilterType) {\n setFilter(filter === selectedFilter ? null : selectedFilter);\n }\n\n function filterStudentResults() {\n return props.results.students.filter(s => {\n const result = getStudentResult(s);\n\n const correctness = InteractiveCorrectnessHelper.isInteractionCorrect(props.interaction, result);\n\n const filterMap = {\n correct: InteractionCorrectness.Correct,\n incorrect: InteractionCorrectness.Incorrect,\n marking_required: InteractionCorrectness.AwaitingMarking,\n skipped: InteractionCorrectness.UnAnswered\n };\n\n return !filter || (filter in filterMap && correctness === filterMap[filter]);\n });\n }\n\n const filteredStudentResults = filterStudentResults();\n\n return (\n <>\n {props.reportsStyling && <InteractionResponseListHeader interaction={props.interaction} />}\n <div className={props.reportsStyling\n ? 'd-flex justify-content-end'\n : 'd-flex align-items-center justify-content-between border-bottom px-3 py-2'\n }>\n {!props.reportsStyling && <p className='fw-semibold mb-0'><Text namespace={namespace} phrase='studentAnswers' /></p>}\n {!!Object.keys(responsesToMark).length &&\n <Tooltip id='submitAnswers' title={getPhrase('demoOnly')} spanHack={props.isDemo}>\n <div className={`${props.isDemo ? 'pointer-events-none' : ''} ${props.reportsStyling ? 'mt-2' : ''}`}>\n <SubmitMarkedAnswers submit={props.submitMarkedAnswers} disabled={!numMarkedAnswers} />\n </div>\n </Tooltip>\n }\n </div>\n <>\n {!props.reportsStyling && <InteractionResponseListFilters filter={filter} toggleFilter={toggleFilter} />}\n\n {!props.reportsStyling && !filteredStudentResults.length && filter && (\n <InteractionResponseListFiltersEmptyStates\n filter={filter}\n markingRequiredImageUrl={props.markingRequiredImageUrl}\n correctImageUrl={props.correctImageUrl}\n incorrectImageUrl={props.incorrectImageUrl}\n skippedImageUrl={props.skippedImageUrl}\n />\n )}\n \n {filteredStudentResults && (\n <ul className='list-unstyled mb-0'>\n {filteredStudentResults.map((s, idx) => {\n const anonymisedUserName = anonymiseUserName(s.user, props.anonymiseUsers);\n const markingRequired = responsesToMark[s.user?.id || s.user?.sessionId];\n\n let className = props.reportsStyling ? 'bg-white p-2' : 'bg-white px-3 pt-3 pb-2';\n\n if (markingRequired)\n className += ` ${styles.awaitingMarking} my-1`;\n\n return (\n <li key={idx} className={props.reportsStyling ? '' : 'border-bottom'}>\n {props.reportsStyling ? (\n <InteractionResponse\n interaction={props.interaction}\n studentResults={s}\n markedStatus={getMarkedStatus(props.interaction.id, s, props.markedAnswers)}\n markInteraction={props.addMarkedAnswers}\n imageCdnUrl={props.imageCdnUrl}\n showStudentDetails\n anonymisedUserName={anonymisedUserName}\n className={className}\n showFeedback\n reportsStyling\n responseComponentClass='mx-n2'\n />\n ) : (\n <InteractionResponseItem\n interaction={props.interaction}\n studentResults={s}\n markedStatus={getMarkedStatus(props.interaction.id, s, props.markedAnswers)}\n markInteraction={props.addMarkedAnswers}\n imageCdnUrl={props.imageCdnUrl}\n showStudentDetails\n anonymisedUserName={anonymisedUserName}\n className={className}\n showFeedback\n />\n )}\n </li>\n );\n })}\n </ul>\n )}\n {props.reportsStyling && !!responsesToMark.length &&\n <div className='mt-2'>\n <SubmitMarkedAnswers submit={props.submitMarkedAnswers} disabled={!numMarkedAnswers} />\n </div>\n }\n </>\n </>\n );\n}","import React from 'react';\n\nimport { QuestionTableAnswersProps } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableAnswers';\n\nexport function QuestionTableMissingWord(props: QuestionTableAnswersProps) {\n const replacePlaceholders = (str: string) => {\n if (!str) return '';\n\n return str.split(/({\\d+})/).map((part, index) => {\n const match = part.match(/{(\\d+)}/);\n\n if (match) {\n const key = match[1];\n\n const replacement = props.interaction.actionableItems.find(answer => +answer.order === +key);\n\n\n if (replacement) {\n return <span className='bg-white border border-gray-300 rounded p-1 lh-lg' key={index}>{replacement.name}</span>;\n }\n }\n\n return part;\n });\n };\n\n return (\n <div>\n <p className='mb-0'>{replacePlaceholders(props.interaction.data.sentence)}</p>\n </div>\n );\n}","import React from 'react';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { QuestionTableAnswersProps } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableAnswers';\nimport { MultipleChoiceInteractionAnswers } from 'libs/shared/components/interaction-answers/multiple-choice/MultipleChoiceInteractionAnswers';\n\nimport styles from './question-table-answers.module.scss';\n\nexport function QuestionTableMultipleChoice(props: QuestionTableAnswersProps) {\n const hasImages = !!ArrayHelper.first(props.interaction?.actionableItems).data?.imageUrl;\n\n if (!hasImages) {\n return (\n <ul className={`${styles.answerWidth} list-unstyled row g-2`}>\n {props.interaction.actionableItems.map(option => {\n return (\n <li key={option.id} className='col-12'>\n <div className={`${option.isCorrect ? 'bg-light-green border-green' : 'bg-light-red border-red'} rounded border py-1 px-2 m-0`}>\n <span className='fw-semibold'>{props.indexToLetter(option.order)}. </span>\n <span>{option.name}</span>\n </div>\n </li>\n );\n })}\n </ul>\n );\n }\n\n return (\n <div className={styles.answerWidth}>\n <MultipleChoiceInteractionAnswers\n interaction={props.interaction}\n size='sm'\n showFeedback={false}\n showCorrectnessIcons\n isDisplayOnly\n />\n </div>\n );\n}","import React from 'react';\n\nimport { QuestionTableAnswersProps } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableAnswers';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport styles from './question-table-answers.module.scss';\n\nconst namespace = 'shared.questionTable';\n\nexport function QuestionTableShortAnswer(props: QuestionTableAnswersProps) {\n const suggestedResponse = props.interaction.data?.suggestedResponse;\n\n if (!suggestedResponse) return <></>;\n\n return (\n <div className={`${styles.answerWidth} bg-light-blue rounded p-2 mb-2`}>\n <div className='d-flex justify-content-between'>\n <p className='fw-semibold mb-2'>\n <Text namespace={namespace} phrase='suggestedResponse' />\n </p>\n </div>\n\n <p className='mb-0'>{suggestedResponse}</p>\n </div>\n );\n}","import React from 'react';\n\nimport { QuestionTableAnswersProps } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableAnswers';\n\n\nexport function QuestionTableTrueOrFalse(props: QuestionTableAnswersProps) {\n return (\n <ul className='list-unstyled d-flex gap-2'>\n {props.interaction.actionableItems.map(option => {\n return (\n <li\n key={option.id}\n className={`${option.isCorrect ? 'bg-light-green border-green' : 'bg-light-red border-red'} rounded border px-2 py-1 mb-2 w-50`}\n >\n <span className='fw-semibold'>{props.indexToLetter(option.order)}. </span>\n <span>{option.name}</span>\n </li>\n );\n })}\n </ul>\n );\n}","import React from 'react';\n\nimport { QuestionTableMissingWord } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableMissingWord';\nimport { QuestionTableMultipleChoice } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableMultipleChoice';\nimport { QuestionTableShortAnswer } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableShortAnswer';\nimport { QuestionTableTrueOrFalse } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableTrueOrFalse';\nimport { indexToLetter } from 'libs/shared/apps/analytics/components/questions-list/question-table/QuestionTableUtils';\nimport { Interaction, InteractionTypeId } from 'libs/shared/interfaces';\n\nexport interface QuestionTableAnswersProps {\n interaction: Interaction;\n indexToLetter?: (index: number) => string;\n}\n\nexport function QuestionTableAnswers(props: QuestionTableAnswersProps) {\n function getQuestionTableAnswerComponent(): JSX.Element {\n switch (props.interaction.typeId) {\n case InteractionTypeId.MultipleChoice:\n return <QuestionTableMultipleChoice interaction={props.interaction} indexToLetter={indexToLetter} />;\n case InteractionTypeId.TrueOrFalse:\n return <QuestionTableTrueOrFalse interaction={props.interaction} indexToLetter={indexToLetter} />;\n case InteractionTypeId.ShortAnswer:\n return <QuestionTableShortAnswer interaction={props.interaction} />;\n case InteractionTypeId.MissingWord:\n return <QuestionTableMissingWord interaction={props.interaction} />;\n default: return null;\n }\n }\n\n const QuestionTableAnswerComponent = getQuestionTableAnswerComponent();\n\n if (!QuestionTableAnswerComponent) return <></>;\n\n return (\n <div className='w-100 mt-3'>\n {QuestionTableAnswerComponent}\n </div>\n );\n}","import React from 'react';\nimport { Column, ColumnInstance, Row, SortingRule } from 'react-table';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { PendingIndicator } from 'libs/shared/apps/analytics/components/pending-indicator/PendingIndicator';\nimport { QuestionTableAnswers } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableAnswers';\nimport { InteractionWithResultsSummary } from 'libs/shared/apps/analytics/interfaces/InteractionWithResultsSummary';\nimport { getInteractionResultsSummary } from 'libs/shared/apps/analytics/utils/InteractiveUtils';\nimport { InteractionLabel } from 'libs/shared/components/interactive-questions/InteractionLabel';\nimport { PercentageIndicator, PercentageIndicatorLayout } from 'libs/shared/components/percentage-indicator/PercentageIndicator';\nimport { Interactive, InteractiveResultSet } from 'libs/shared/interfaces';\nimport { getInteractions } from 'libs/shared/utils/InteractiveHelper';\n\nconst namespace = 'shared.questionTable';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction sortScore(\n rowA: Row<InteractionWithResultsSummary>,\n rowB: Row<InteractionWithResultsSummary>,\n columnId: string\n): 1 | -1 {\n const cellA = rowA.cells.find(cell => cell.column.id === columnId).value;\n const cellB = rowB.cells.find(cell => cell.column.id === columnId).value;\n\n if (cellA.awaitingMarking)\n return -1;\n\n if (cellB.awaitingMarking)\n return 1;\n\n return cellA.percentCorrect >= cellB.percentCorrect\n ? 1\n : -1;\n}\ninterface CellWrapperProps {\n className?: string;\n}\n\nfunction CellWrapper(props: React.PropsWithChildren<CellWrapperProps>): JSX.Element {\n return (\n <div className={`d-flex ${props.className ?? ''}`}>\n {props.children}\n </div>\n );\n}\n\ninterface HeaderCellProps {\n column: ColumnInstance<InteractionWithResultsSummary>;\n phraseKey: string;\n}\n\nfunction HeaderCell(props: HeaderCellProps): JSX.Element {\n return (\n <CellWrapper className={props.column.isSorted && 'fw-bold'}>\n {getPhrase(props.phraseKey)}\n </CellWrapper>\n );\n}\n\nexport function getColumns(\n showAnswersInTable: boolean\n): Column<InteractionWithResultsSummary>[] {\n return [\n {\n Header: ({ column }) => <HeaderCell column={column} phraseKey='#' />,\n accessor: 'questionNumber',\n id: 'index',\n Cell: ({ row: { original: { questionNumber } } }) => {\n return <CellWrapper>{questionNumber + 1}.</CellWrapper>;\n },\n width: 15,\n disableSortBy: true\n },\n {\n Header: ({ column }) => <HeaderCell column={column} phraseKey='question' />,\n accessor: 'data', // This isn't used but it's needed for the typings on row,\n Cell: ({ row: { original: interaction }, initialState: { selectedRowIds } }) => {\n const selectedRow = selectedRowIds?.[interaction?.id];\n\n return (\n <CellWrapper className='flex-column'>\n <div className={`${!selectedRow ? 'clamp-1' : ''} pe-2`}>\n <InteractionLabel interaction={interaction} containerClassName='d-flex' />\n </div>\n\n {showAnswersInTable && selectedRow && (\n <QuestionTableAnswers interaction={interaction} />\n )}\n </CellWrapper>\n );\n },\n disableSortBy: true\n },\n {\n Header: ({ column }) => <HeaderCell column={column} phraseKey='score' />,\n accessor: 'resultsSummary',\n id: 'correctlyAnswered',\n Cell: ({ value: { percentCorrect, awaitingMarking } }) => {\n if (awaitingMarking) {\n return (\n <PendingIndicator\n title={getPhrase('markingRequired')}\n className='flex-grow-1'\n tooltipClassName='d-block'\n showLabel\n />\n );\n }\n\n return (\n <PercentageIndicator\n percentage={percentCorrect}\n layout={PercentageIndicatorLayout.LabelBefore}\n />\n );\n },\n width: 60,\n sortDescFirst: true,\n sortType: sortScore\n }\n ];\n}\n\n/**\n * Returns memoized table data. To trigger a recalculation, toggle the value of `refreshData`.\n */\nexport function useGetTableData(\n interactive: Interactive,\n results: InteractiveResultSet,\n refreshData: boolean,\n sortBy?: SortingRule<InteractionWithResultsSummary>\n): InteractionWithResultsSummary[] {\n return React.useMemo(() => {\n const flattenedInteractions = getInteractions(interactive);\n const questionNumbers: HashObject = flattenedInteractions.reduce((acc, interaction, index) => ({\n ...acc, [interaction.id]: index\n }), {});\n\n const interactions = flattenedInteractions.map(i => ({\n ...i,\n questionNumber: questionNumbers[i.id],\n resultsSummary: getInteractionResultsSummary(i, results)\n }));\n\n if (sortBy?.id === 'correctlyAnswered') {\n const sorted = ArrayHelper.sortBy(interactions, interaction => {\n if (interaction.resultsSummary.awaitingMarking)\n return -1;\n\n return interaction.resultsSummary.percentCorrect;\n });\n\n return sortBy.desc ? sorted.reverse() : sorted;\n }\n\n return interactions;\n }, [ refreshData, sortBy ]);\n}\n\nexport function indexToLetter(index: number) {\n return String.fromCharCode(index + 'A'.charCodeAt(0));\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { indexToLetter } from 'libs/shared/apps/analytics/components/questions-list/question-table/QuestionTableUtils';\nimport { InteractiveAnswerStatus } from 'libs/shared/enums/InteractiveAnswerStatus';\nimport { Interaction, InteractionTypeId, InteractiveResultSet } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.questionTable';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface QuestionSummary {\n id?: string;\n count: number;\n isCorrect: boolean;\n label?: string | number;\n}\n\nexport function multipleChoiceSummary(\n interaction: Interaction,\n studentResults: InteractiveResultSet\n): QuestionSummary[] {\n const questionsSummary: QuestionSummary[] = interaction.actionableItems.map((item, i) => {\n return {\n id: item.id,\n label: interaction.typeId === InteractionTypeId.MultipleChoice ? indexToLetter(i) : item.name,\n isCorrect: item.isCorrect,\n count: 0\n };\n });\n\n studentResults.students.forEach(student => {\n const latestAttempts = ArrayHelper.last(student.results).attempts;\n const response = ArrayHelper.findWhere(latestAttempts, { id: interaction.id });\n\n if (!response) return;\n\n response.answers.forEach(answer => {\n const questionSummary = ArrayHelper.findWhere(questionsSummary, { id: answer.id });\n\n if (questionSummary)\n questionSummary.count++;\n });\n });\n\n return questionsSummary;\n}\n\nexport function missingWordSummary(interaction: Interaction, studentResults: InteractiveResultSet): QuestionSummary[] {\n const questionsSummary: QuestionSummary[] = interaction.actionableItems.map(item => {\n return {\n id: item.id,\n label: item.name,\n isCorrect: item.isCorrect,\n count: 0\n };\n });\n\n questionsSummary.push({\n label: getPhrase('incorrect'),\n count: 0,\n isCorrect: false\n });\n\n studentResults.students.forEach(student => {\n const latestAttempts = ArrayHelper.last(student.results).attempts;\n const response = ArrayHelper.findWhere(latestAttempts, { id: interaction.id });\n\n if (!response) return;\n\n response.answers.forEach(answer => {\n const questionSummary = ArrayHelper.findWhere(questionsSummary, { id: answer.id });\n\n if (questionSummary && answer.status === InteractiveAnswerStatus.Correct) {\n questionSummary.count++;\n } else {\n const incorrectSummary = ArrayHelper.findWhere(questionsSummary, { label: getPhrase('incorrect') });\n\n incorrectSummary.count++;\n }\n });\n });\n\n return questionsSummary;\n}\n\nexport function markedSummary(interaction: Interaction, studentResults: InteractiveResultSet): QuestionSummary[] {\n const questionsSummary: QuestionSummary[] = [\n {\n label: getPhrase('correct'),\n isCorrect: true,\n count: 0\n },\n {\n label: getPhrase('incorrect'),\n isCorrect: false,\n count: 0\n }\n ];\n\n studentResults.students.forEach(student => {\n const latestAttempts = ArrayHelper.last(student.results).attempts;\n const response = ArrayHelper.findWhere(latestAttempts, { id: interaction.id });\n\n if (!response) return;\n\n response.answers.forEach(answer => {\n if (answer.status === InteractiveAnswerStatus.Correct) {\n const correctSummary = ArrayHelper.findWhere(questionsSummary, { label: getPhrase('correct') });\n correctSummary.count++;\n }\n if (answer.status === InteractiveAnswerStatus.Incorrect) {\n const incorrectSummary = ArrayHelper.findWhere(questionsSummary, { label: getPhrase('incorrect') });\n incorrectSummary.count++;\n }\n if (answer.status === InteractiveAnswerStatus.PendingReview) {\n let pendingSummary = ArrayHelper.findWhere(questionsSummary, { label: getPhrase('pending') });\n\n if (!pendingSummary) {\n questionsSummary.push({\n label: getPhrase('pending'),\n count: 0,\n isCorrect: false\n });\n pendingSummary = ArrayHelper.findWhere(questionsSummary, { label: getPhrase('pending') });\n }\n\n pendingSummary.count++;\n }\n });\n });\n\n return questionsSummary;\n}","import React from 'react';\n\nexport function LightbulbSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M12 4c-3.308 0-6 2.692-6 6 0 1.923.916 3.716 2.462 4.846v3.77c0 .763.62 1.384 1.384 1.384h4.308c.763 0 1.385-.621 1.385-1.385v-3.77A6 6 0 0 0 18 10c0-3.308-2.692-6-6-6m.461 8a2.62 2.62 0 0 1 2.154-2.575v.113a2.62 2.62 0 0 1-2.154 2.575zm-.922.113a2.62 2.62 0 0 1-2.154-2.575v-.113A2.62 2.62 0 0 1 11.539 12zm3.076 4.656v.616h-5.23v-.616zm-.461 2.308H9.846a.46.46 0 0 1-.461-.462v-.307h5.23v.307a.46.46 0 0 1-.461.462m.666-4.855a.46.46 0 0 0-.205.384v1.24h-2.154v-2.8a3.544 3.544 0 0 0 3.078-3.508v-.615a.46.46 0 0 0-.462-.461A3.54 3.54 0 0 0 12 10.254a3.54 3.54 0 0 0-3.077-1.792.46.46 0 0 0-.461.461v.615a3.544 3.544 0 0 0 3.077 3.509v2.8H9.385v-1.241a.46.46 0 0 0-.205-.384A5.07 5.07 0 0 1 6.923 10c0-2.8 2.278-5.077 5.077-5.077S17.077 7.201 17.077 10a5.07 5.07 0 0 1-2.257 4.222'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { markedSummary, missingWordSummary, multipleChoiceSummary, QuestionSummary } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-results-summary/QuestionResultsSummaryUtils';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { LightbulbSvg } from 'libs/shared/images/svg/objects/LightbulbSvg';\nimport { Interaction, InteractionTypeId, InteractiveResultSet } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.questionTable';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface QuestionResultsSummaryProps {\n interaction: Interaction;\n results: InteractiveResultSet;\n}\n\nexport function QuestionResultsSummary(props: QuestionResultsSummaryProps) {\n const questionSummary = getQuestionSummary();\n const maxResponseCount = getMaxResponseCount();\n\n function getQuestionSummary(): QuestionSummary[] {\n if (!props.interaction || !props.results) return;\n\n let summaryMethod: (\n interaction: Interaction,\n results: InteractiveResultSet,\n interactionTypeId?: InteractionTypeId\n ) => QuestionSummary[];\n\n switch (props.interaction.typeId) {\n case InteractionTypeId.ShortAnswer:\n case InteractionTypeId.Illustration:\n summaryMethod = markedSummary;\n break;\n case InteractionTypeId.MissingWord:\n summaryMethod = missingWordSummary;\n break;\n case InteractionTypeId.MultipleChoice:\n case InteractionTypeId.TrueOrFalse:\n summaryMethod = multipleChoiceSummary;\n break;\n }\n\n return summaryMethod(props.interaction, props.results);\n }\n\n function getMaxResponseCount() {\n return questionSummary?.reduce((acc, summary) => summary.count > acc ? summary.count : acc, 0);\n }\n\n function getBarClassName(summary: QuestionSummary) {\n const className = 'border rounded me-2';\n\n if (!summary.count)\n return `${className} border bg-light px-1`;\n\n if (summary.label === getPhrase('pending'))\n return `${className} border-blue bg-light-blue`;\n\n if (summary.isCorrect)\n return `${className} border-green bg-light-green`;\n\n return `${className} border-red bg-light-red`;\n }\n\n return (\n <div className='border border rounded p-3 mb-3'>\n <div className='d-flex align-items-center gap-2 mb-3'>\n <div className='rounded-circle bg-light-teal text-teal'>\n <SvgContainer svg={LightbulbSvg} size={SvgContainerSize.Large} />\n </div>\n <h2 className='h6 mb-0'>\n <span><Text namespace={namespace} phrase='questionSummary' /></span>\n </h2>\n </div>\n <div className='d-flex gap-2'>\n <div className='max-w-25'>\n {questionSummary?.map(summary => {\n return (\n <p key={summary.label} className='text-truncate mb-2'>{summary.label}</p>\n );\n })}\n </div>\n <div className='flex-grow-1'>\n {questionSummary?.map((summary, i) => {\n return (\n <div key={`${props.interaction.id}${i}`} className='d-flex mb-2'>\n <div\n className={getBarClassName(summary)}\n style={{ width: `${(summary.count / maxResponseCount) * 100}%`, height: 20 }}>\n </div>\n <span>{summary.count}</span>\n </div>\n );\n })}\n </div>\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\n\nconst namespace = 'shared.selectedInteractionEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SelectedInteractionEmptyStateProps {\n emptyStateUrl: string;\n}\n\nexport function SelectedInteractionEmptyState(props: SelectedInteractionEmptyStateProps): JSX.Element {\n return (\n <EmptyState className='rounded h-100 bg-white justify-content-center py-4'>\n <EmptyState.Image\n src={props.emptyStateUrl}\n size='small'\n />\n <EmptyState.Info className='w-100'>\n {getPhrase('emptyStateText')}\n </EmptyState.Info>\n </EmptyState>\n );\n}","import { SortingRule } from 'react-table';\n\nimport { ResultsSummary } from 'libs/shared/apps/analytics/interfaces/ResultsSummary';\nimport { ScoreThresholdInsights } from 'libs/shared/constants/ScoreThresholds';\n\nexport type SortStudentsBy = 'score_desc' | 'score_asc';\n\nexport function getSortStudents(sortBy: SortStudentsBy, id: string): SortingRule<any>[] {\n switch (sortBy) {\n case 'score_desc': return [{ id, desc: true }];\n case 'score_asc': return [{ id, desc: false }];\n default: return [];\n }\n}\n\nexport type FilterStudentsBy = 'not_completed' | 'marking_required' | 'helping_hand';\n\nexport function shouldFilterStudent(filter: FilterStudentsBy, summary: ResultsSummary): boolean {\n if (filter === 'marking_required' && !summary.awaitingMarking)\n return true;\n\n if (filter === 'helping_hand' && summary.percentCorrect >= ScoreThresholdInsights.HIGH)\n return true;\n\n if (filter === 'not_completed' && !summary.unanswered)\n return true;\n \n return false;\n}\n\n","import React from 'react';\nimport { Row, SortingRule } from 'react-table';\n\nimport { ScrollHelper } from 'libs/common/backbone/utils/ScrollHelper';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { InteractionQuestionsEmptyState } from 'libs/shared/apps/analytics/components/questions-list/interaction-questions-empty-state/InteractionQuestionsEmptyState';\nimport { InteractionResponseList } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-list/InteractionResponseList';\nimport { QuestionResultsSummary } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-results-summary/QuestionResultsSummary';\nimport { SelectedInteractionEmptyState } from 'libs/shared/apps/analytics/components/questions-list/selected-interaction-empty-state/SelectedInteractionEmptyState';\nimport { InteractionWithResultsSummary } from 'libs/shared/apps/analytics/interfaces/InteractionWithResultsSummary';\nimport { getInteractionById } from 'libs/shared/apps/analytics/utils/InteractiveUtils';\nimport { getSortStudents, SortStudentsBy } from 'libs/shared/apps/analytics/utils/StudentTableUtils';\nimport { Table, TableTheme } from 'libs/shared/components/table/Table';\nimport { InteractiveAnswerStatus } from 'libs/shared/enums/InteractiveAnswerStatus';\nimport { Interactive, InteractiveResultSet, StudentAnswer } from 'libs/shared/interfaces';\nimport { AppRouteHelper } from 'libs/shared/utils/AppRouteHelper';\n\nimport { getColumns, useGetTableData } from './QuestionTableUtils';\n\ninterface QuestionTableProps {\n interactive: Interactive;\n results: InteractiveResultSet;\n markedAnswers: { [id: string]: StudentAnswer };\n addMarkedAnswers: (answer: StudentAnswer[], status: InteractiveAnswerStatus) => void;\n submitMarkedAnswers: () => void;\n editSuggestedResponse?: () => void;\n imageCdnUrl: string;\n selectQuestionImageUrl: string;\n anonymiseUsers: boolean;\n sortBy?: SortStudentsBy;\n emptyResponseStateImageUrl: string;\n emptyQuestionsStateImageUrl: string;\n markingRequiredImageUrl?: string;\n correctImageUrl?: string;\n incorrectImageUrl?: string;\n skippedImageUrl?: string;\n\n /**\n * As the table data is memoized, it must be prompted to recalculate.\n * Toggle `refreshTable` to do so.\n */\n refreshTable: boolean;\n selectedInteractionId?: string;\n showAnswersInTable?: boolean;\n theme: TableTheme;\n reportsStyling?: boolean;\n isDemo?: boolean;\n}\n\nexport function QuestionTable(props: QuestionTableProps): JSX.Element {\n const [ sortBy, setSortBy ] = React.useState<SortingRule<InteractionWithResultsSummary>[]>(\n getSortStudents(props.sortBy, 'correctlyAnswered')\n );\n const data = useGetTableData(props.interactive, props.results, props.refreshTable, ArrayHelper.first(sortBy));\n\n const selectedInteraction = props.selectedInteractionId &&\n getInteractionById(props.interactive, props.selectedInteractionId);\n\n function onSelectRow({ original: interaction }: Row<InteractionWithResultsSummary>): void {\n ScrollHelper.preventScrollTop();\n\n AppRouteHelper.updateParams(\n { interactionId: interaction.id },\n { merge: true }\n );\n }\n\n return (\n <div className='row'>\n <div className='col-6 flex-grow-1'>\n <Table\n key={props.selectedInteractionId}\n columns={getColumns(props.showAnswersInTable)}\n data={data}\n theme={props.theme}\n onSelectRow={onSelectRow}\n initialSelectedRowIds={selectedInteraction ? [selectedInteraction.id] : null}\n getRowId={(row: InteractionWithResultsSummary) => row.id}\n enableSort\n manualSort\n onSort={setSortBy}\n initialSortBy={sortBy}\n emptyState={<InteractionQuestionsEmptyState emptyStateImageUrl={props.emptyQuestionsStateImageUrl} />}\n />\n </div>\n <div className='col-6 d-flex flex-column'>\n {!props.reportsStyling && props.selectedInteractionId && !!props.results.students?.length && (\n <QuestionResultsSummary\n interaction={selectedInteraction}\n results={props.results}\n />\n )}\n\n <div className={`rounded flex-grow-1 ${props.reportsStyling ? '' : 'border'}`}>\n {!!selectedInteraction &&\n <InteractionResponseList\n interaction={selectedInteraction}\n results={props.results}\n markedAnswers={props.markedAnswers}\n addMarkedAnswers={props.addMarkedAnswers}\n submitMarkedAnswers={props.submitMarkedAnswers}\n imageCdnUrl={props.imageCdnUrl}\n anonymiseUsers={props.anonymiseUsers}\n emptyStateImageUrl={props.emptyResponseStateImageUrl}\n markingRequiredImageUrl={props.markingRequiredImageUrl}\n correctImageUrl={props.correctImageUrl}\n incorrectImageUrl={props.incorrectImageUrl}\n skippedImageUrl={props.skippedImageUrl}\n reportsStyling={props.reportsStyling}\n isDemo={props.isDemo}\n />\n }\n {!selectedInteraction && <SelectedInteractionEmptyState emptyStateUrl={props.selectQuestionImageUrl} />}\n </div>\n </div>\n </div>\n );\n}","import * as React from 'react';\nimport { ButtonProps } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { PopupViewProps } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.confirmationPopup';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface ConfirmationPopupProps {\n title: string;\n onClickConfirm: () => void;\n confirmButtonText?: string;\n cancelButtonText?: string;\n confirmButtonVariant?: ButtonProps['variant'];\n cancelButtonVariant?: ButtonProps['variant'];\n disabledConfirmButton?: boolean;\n}\n\nConfirmationPopup.defaultProps = {\n confirmButtonVariant: 'primary',\n cancelButtonVariant: 'link'\n};\n\ntype PropTypes = React.PropsWithChildren<ConfirmationPopupProps & PopupViewProps>;\n\nexport function ConfirmationPopup(props: PropTypes): React.ReactElement {\n const [ showButtonSpinner, setShowButtonSpinner ] = React.useState(false);\n\n return (\n <Popup title={props.title} closePopup={props.closePopup}>\n <>\n {props.children}\n <PopupButtons>\n <PopupButtons.Cancel\n onClick={props.closePopup}\n variant={props.cancelButtonVariant}\n text={props.cancelButtonText || getPhrase('cancel')}\n />\n <PopupButtons.Submit\n onClick={() => { setShowButtonSpinner(true); props.onClickConfirm(); }}\n text={props.confirmButtonText || getPhrase('confirm')}\n variant={props.confirmButtonVariant}\n showSpinner={showButtonSpinner}\n disabled={props.disabledConfirmButton}\n />\n </PopupButtons>\n </>\n </Popup>\n );\n}","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 { QuestionTable } from 'libs/shared/apps/analytics/components/questions-list/question-table/QuestionTable';\nimport { useFetchInteractiveResults } from 'libs/shared/apps/analytics/hooks/UseFetchInteractiveResults';\nimport { useMarkAnswers } from 'libs/shared/apps/analytics/hooks/UseMarkAnswers';\nimport { ConfirmationPopup } from 'libs/shared/components/confirmation-popup/ConfirmationPopup';\nimport { TableTheme } from 'libs/shared/components/table/Table';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { useCannotConsumeError } from 'libs/shared/hooks/useCannotConsumeError';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Config, Interactive, InteractiveMetadata } from 'libs/shared/interfaces';\n\nimport { PartialTable } from 'shared/components/partial-loading/PartialTable';\nimport { ImageUrls } from 'shared/constants/ReportsImageUrls';\nimport { ViewModelKeys } from 'shared/constants/ReportsViewModels';\nimport { useGetRequestFilter } from 'shared/hooks/UseGetFilterQueryParams';\nimport { useHandleVideoError } from 'shared/hooks/UseHandleVideoError';\nimport { useSetHeaderActions } from 'shared/hooks/UseSetHeaderActions';\nimport { useSetHeaderTitle } from 'shared/hooks/UseSetHeaderTitle';\nimport { useGetObjectHeaderActions } from 'shared/utils/HeaderActionUtils';\n\nimport { InteractiveNav } from 'apps/interactives/components/interactive-nav/InteractiveNav';\nimport { useNoResultsPopup } from 'apps/interactives/hooks/UseNoResultsPopup';\nimport { useRefreshInteractiveResults } from 'apps/interactives/hooks/UseRefreshInteractiveResults';\nimport { useSetInteractiveResultsAudienceFilterCount } from 'apps/interactives/hooks/UseSetInteractiveResultsAudienceFilterCount';\nimport { useSetSuggestedInteractiveResultsAudience } from 'apps/interactives/hooks/UseSetSuggestedInteractiveResultsAudience';\n\nimport styles from './interactive-question-list-view.module.scss';\n\nconst theme: TableTheme = {\n table: 'bg-white rounded pb-2',\n header: 'border-bottom px-2',\n headerCell: 'p-2 d-flex align-items-center',\n cell: 'px-2',\n row: `m-2 rounded py-1 ${styles.row}`,\n selectedRow: 'bg-light',\n sortIndicator: 'ms-2'\n};\n\nconst namespace = 'interactives.interactiveQuestionList';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InteractiveQuestionListViewProps {\n interactiveMetadataId: string;\n interactionId?: string;\n}\n\nexport function InteractiveQuestionListView(props: InteractiveQuestionListViewProps): JSX.Element {\n const [anonymiseUsers] = useViewModel<boolean>(ViewModelKeys.ANONYMISE_USERS);\n\n const [ showMarkConfirmationPopup, setShowMarkConfirmationPopup ] = React.useState(false);\n\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(\n InteractiveRequests.interactiveMetadata(props.interactiveMetadataId)\n );\n const interactive = Flight.useBasicFetch<Interactive>(interactiveMetadata.data?.interactiveId ?\n InteractiveRequests.interactive(interactiveMetadata.data.interactiveId) : null);\n const requestFilter = useGetRequestFilter();\n const results = useFetchInteractiveResults(props.interactiveMetadataId, requestFilter);\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n useSetPageMetadata({ title: getPhrase('pageTitle', { interactive: interactiveMetadata.data?.name }) });\n useSetHeaderTitle(interactiveMetadata.data?.name);\n useSetHeaderActions(useGetObjectHeaderActions(interactiveMetadata.data));\n useSetSuggestedInteractiveResultsAudience(props.interactiveMetadataId);\n useSetInteractiveResultsAudienceFilterCount(results);\n useNoResultsPopup(props.interactiveMetadataId);\n useCannotConsumeError(interactiveMetadata);\n\n useHandleVideoError(interactiveMetadata);\n useHandleObjectError([ interactive, results, config ]);\n\n const refreshTable = useRefreshInteractiveResults(results);\n\n const { markedAnswers, addMarkedAnswers, submitMarkedAnswers } = useMarkAnswers(\n interactive.data?.id,\n interactiveMetadata.data?.id,\n () => setShowMarkConfirmationPopup(false)\n );\n\n const dataLoaded = !!interactive.data && !!results.data && !!config.data;\n\n return (\n <>\n <div>\n <InteractiveNav interactiveMetadataId={props.interactiveMetadataId} />\n {dataLoaded\n ? <QuestionTable\n emptyResponseStateImageUrl={ImageUrls.EmptyStates.Interactives.NoResponses}\n emptyQuestionsStateImageUrl={ImageUrls.EmptyStates.Interactives.NoQuestions}\n selectQuestionImageUrl={ImageUrls.EmptyStates.Interactives.NoData}\n anonymiseUsers={anonymiseUsers}\n interactive={interactive.data}\n results={results.data}\n markedAnswers={markedAnswers}\n addMarkedAnswers={addMarkedAnswers}\n submitMarkedAnswers={() => setShowMarkConfirmationPopup(true)}\n imageCdnUrl={config.data.imageCdnUrl}\n selectedInteractionId={props.interactionId}\n refreshTable={refreshTable}\n theme={theme}\n reportsStyling\n />\n : <div className='row'><div className='col-6'><PartialTable /></div></div>\n }\n </div>\n {showMarkConfirmationPopup &&\n <ConfirmationPopup\n title={getPhrase('markPopupTitle', { smartCount: Object.keys(markedAnswers).length ?? 0 })}\n closePopup={() => setShowMarkConfirmationPopup(false)}\n confirmButtonText={getPhrase('submit')}\n confirmButtonVariant='dark'\n onClickConfirm={submitMarkedAnswers}\n >\n <p>{getPhrase('markPopupBody')}</p>\n </ConfirmationPopup>\n }\n </>\n );\n}"],"names":["ScrollHelper","Radio","CommonChannels","namespace","getPhrase","LanguageService","InteractionQuestionsEmptyState","props","jsxs","EmptyState","jsx","InteractionResponseListFiltersEmptyStates","getFilterEmptyStateImageUrl","getFilterEmptyStatePhrase","Fragment","Text","InteractionResponseListFilters","isFilterSelected","filterButton","getFilterClassName","InteractionResponseListHeader","suggestedResponse","_a","InteractionLabel","SubmitMarkedAnswers","getResponsesToMark","interaction","studentResults","s","InteractiveCorrectnessHelper","getStudentResult","InteractionCorrectness","acc","_b","InteractionResponseList","filter","setFilter","React","responsesToMark","numMarkedAnswers","toggleFilter","selectedFilter","filterStudentResults","result","correctness","filterMap","filteredStudentResults","Tooltip","idx","anonymisedUserName","anonymiseUserName","markingRequired","className","styles","InteractionResponse","getMarkedStatus","InteractionResponseItem","QuestionTableMissingWord","replacePlaceholders","str","part","index","match","key","replacement","answer","QuestionTableMultipleChoice","ArrayHelper","option","MultipleChoiceInteractionAnswers","QuestionTableShortAnswer","QuestionTableTrueOrFalse","QuestionTableAnswers","getQuestionTableAnswerComponent","InteractionTypeId","indexToLetter","QuestionTableAnswerComponent","sortScore","rowA","rowB","columnId","cellA","cell","cellB","CellWrapper","HeaderCell","getColumns","showAnswersInTable","column","questionNumber","selectedRowIds","selectedRow","percentCorrect","awaitingMarking","PendingIndicator","PercentageIndicator","PercentageIndicatorLayout","useGetTableData","interactive","results","refreshData","sortBy","flattenedInteractions","getInteractions","questionNumbers","interactions","i","getInteractionResultsSummary","sorted","multipleChoiceSummary","questionsSummary","item","student","latestAttempts","response","questionSummary","missingWordSummary","InteractiveAnswerStatus","incorrectSummary","markedSummary","correctSummary","pendingSummary","LightbulbSvg","QuestionResultsSummary","getQuestionSummary","maxResponseCount","getMaxResponseCount","summaryMethod","summary","getBarClassName","SvgContainer","SvgContainerSize","SelectedInteractionEmptyState","getSortStudents","id","QuestionTable","setSortBy","data","selectedInteraction","getInteractionById","onSelectRow","AppRouteHelper","Table","row","ConfirmationPopup","showButtonSpinner","setShowButtonSpinner","React.useState","Popup","PopupButtons","theme","InteractiveQuestionListView","anonymiseUsers","useViewModel","ViewModelKeys","showMarkConfirmationPopup","setShowMarkConfirmationPopup","interactiveMetadata","Flight.useBasicFetch","InteractiveRequests","requestFilter","useGetRequestFilter","useFetchInteractiveResults","config","ConfigRequests","useSetPageMetadata","useSetHeaderTitle","_c","useSetHeaderActions","useGetObjectHeaderActions","useSetSuggestedInteractiveResultsAudience","useSetInteractiveResultsAudienceFilterCount","useNoResultsPopup","useCannotConsumeError","useHandleVideoError","useHandleObjectError","refreshTable","useRefreshInteractiveResults","markedAnswers","addMarkedAnswers","submitMarkedAnswers","useMarkAnswers","_d","_e","dataLoaded","InteractiveNav","ImageUrls","PartialTable"],"mappings":"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"}