@clickview/reports 0.72.0 → 0.73.0-rc.2

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 (418) hide show
  1. package/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  2. package/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  3. package/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  4. package/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  5. package/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  6. package/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  7. package/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  8. package/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  9. package/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  10. package/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  11. package/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  12. package/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  13. package/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  14. package/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  15. package/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  16. package/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  17. package/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  18. package/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  19. package/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  20. package/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  21. package/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  22. package/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  23. package/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  24. package/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  25. package/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  26. package/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  27. package/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  28. package/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  29. package/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  30. package/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  31. package/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  32. package/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  33. package/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  34. package/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  35. package/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  36. package/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  37. package/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  38. package/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  39. package/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  40. package/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  41. package/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  42. package/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  43. package/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  44. package/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  45. package/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  46. package/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  47. package/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  48. package/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  49. package/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  50. package/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  51. package/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  52. package/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  53. package/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  54. package/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  55. package/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  56. package/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  57. package/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  58. package/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  59. package/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  60. package/dist/bundles.json +2 -3
  61. package/dist/css/1VpVng8x.chunk.css +1 -0
  62. package/dist/css/BDijM1kt.chunk.css +1 -0
  63. package/dist/css/BMPwvOki.chunk.css +1 -0
  64. package/dist/css/BNt45Kgy.chunk.css +1 -0
  65. package/dist/css/BSGhUWzl.chunk.css +1 -0
  66. package/dist/css/BZ3_uhDP.chunk.css +1 -0
  67. package/dist/css/BaadNO4A.chunk.css +1 -0
  68. package/dist/css/BdUNjJqp.chunk.css +1 -0
  69. package/dist/css/BdeI0FAV.chunk.css +1 -0
  70. package/dist/css/BxcMGr8Y.chunk.css +1 -0
  71. package/dist/css/ByuL_xKJ.chunk.css +1 -0
  72. package/dist/css/C-A0Pj_7.chunk.css +1 -0
  73. package/dist/css/C4jMfPWU.chunk.css +1 -0
  74. package/dist/css/C7XoyEPr.chunk.css +1 -0
  75. package/dist/css/C8sxda3R.chunk.css +1 -0
  76. package/dist/css/CD1qrI1T.chunk.css +1 -0
  77. package/dist/css/CFO--d_R.chunk.css +1 -0
  78. package/dist/css/CX9nw8t8.chunk.css +1 -0
  79. package/dist/css/C_qGRdC2.chunk.css +1 -0
  80. package/dist/css/CdC6ugQR.chunk.css +1 -0
  81. package/dist/css/ClRRGXPb.chunk.css +1 -0
  82. package/dist/css/Cr1bwtZG.chunk.css +1 -0
  83. package/dist/css/DBlPz5Fw.chunk.css +1 -0
  84. package/dist/css/DDnpOnVB.chunk.css +1 -0
  85. package/dist/css/DFZQCLLg.chunk.css +1 -0
  86. package/dist/css/DJwAbl6l.chunk.css +1 -0
  87. package/dist/css/DWjg_0sz.chunk.css +1 -0
  88. package/dist/css/DYV9jjVn.chunk.css +1 -0
  89. package/dist/css/Dgeh4AqU.chunk.css +9 -0
  90. package/dist/css/DlOtoSz0.chunk.css +1 -0
  91. package/dist/css/DlxOgKUu.chunk.css +1 -0
  92. package/dist/css/Dp3arkyy.chunk.css +1 -0
  93. package/dist/css/DwgaDUzz.chunk.css +1 -0
  94. package/dist/css/FPQ_LmXH.chunk.css +1 -0
  95. package/dist/css/H09rC9gw.chunk.css +1 -0
  96. package/dist/css/LAFr2dPT.chunk.css +1 -0
  97. package/dist/css/Pg1TlYG6.chunk.css +1 -0
  98. package/dist/css/PsQn3-kb.chunk.css +1 -0
  99. package/dist/css/alkEuPrr.chunk.css +1 -0
  100. package/dist/css/k4DgCj_g.chunk.css +1 -0
  101. package/dist/en.json +1 -0
  102. package/dist/scripts/0Uji-0Ig.chunk.js +2 -0
  103. package/dist/scripts/0Uji-0Ig.chunk.js.map +1 -0
  104. package/dist/scripts/1uUClbTi.chunk.js +2 -0
  105. package/dist/scripts/1uUClbTi.chunk.js.map +1 -0
  106. package/dist/scripts/5O9SdVRZ.chunk.js +2 -0
  107. package/dist/scripts/5O9SdVRZ.chunk.js.map +1 -0
  108. package/dist/scripts/9-ob4xwW.chunk.js +2 -0
  109. package/dist/scripts/9-ob4xwW.chunk.js.map +1 -0
  110. package/dist/scripts/B-0CRp8U.chunk.js +15 -0
  111. package/dist/scripts/B-0CRp8U.chunk.js.map +1 -0
  112. package/dist/scripts/B-M_POW7.chunk.js +2 -0
  113. package/dist/scripts/B-M_POW7.chunk.js.map +1 -0
  114. package/dist/scripts/B0HNQPjj.chunk.js +2 -0
  115. package/dist/scripts/B0HNQPjj.chunk.js.map +1 -0
  116. package/dist/scripts/B2kHUvkf.chunk.js +2 -0
  117. package/dist/scripts/B2kHUvkf.chunk.js.map +1 -0
  118. package/dist/scripts/BADbeO_o.chunk.js +2 -0
  119. package/dist/scripts/BADbeO_o.chunk.js.map +1 -0
  120. package/dist/scripts/BAR_V9AM.chunk.js +2 -0
  121. package/dist/scripts/BAR_V9AM.chunk.js.map +1 -0
  122. package/dist/scripts/BArX7fyb.chunk.js +2 -0
  123. package/dist/scripts/BArX7fyb.chunk.js.map +1 -0
  124. package/dist/scripts/BAt5WimN.chunk.js +2 -0
  125. package/dist/scripts/BAt5WimN.chunk.js.map +1 -0
  126. package/dist/scripts/BBKDp0Ea.chunk.js +4 -0
  127. package/dist/scripts/BBKDp0Ea.chunk.js.map +1 -0
  128. package/dist/scripts/BE4qMmvm.chunk.js +2 -0
  129. package/dist/scripts/BE4qMmvm.chunk.js.map +1 -0
  130. package/dist/scripts/BEjQ8YiC.chunk.js +10 -0
  131. package/dist/scripts/BEjQ8YiC.chunk.js.map +1 -0
  132. package/dist/scripts/BFH1W3y4.chunk.js +2 -0
  133. package/dist/scripts/BFH1W3y4.chunk.js.map +1 -0
  134. package/dist/scripts/BGYUqEPH.chunk.js +2 -0
  135. package/dist/scripts/BGYUqEPH.chunk.js.map +1 -0
  136. package/dist/scripts/BI4Pc5Qp.chunk.js +3 -0
  137. package/dist/scripts/BI4Pc5Qp.chunk.js.map +1 -0
  138. package/dist/scripts/BIcuRL8o.chunk.js +2 -0
  139. package/dist/scripts/BIcuRL8o.chunk.js.map +1 -0
  140. package/dist/scripts/BK5Lddwt.chunk.js +2 -0
  141. package/dist/scripts/BK5Lddwt.chunk.js.map +1 -0
  142. package/dist/scripts/BM1URibR.chunk.js +2 -0
  143. package/dist/scripts/BM1URibR.chunk.js.map +1 -0
  144. package/dist/scripts/BOenBxfx.chunk.js +34 -0
  145. package/dist/scripts/BOenBxfx.chunk.js.map +1 -0
  146. package/dist/scripts/BOoxRruH.chunk.js +2 -0
  147. package/dist/scripts/BOoxRruH.chunk.js.map +1 -0
  148. package/dist/scripts/BP4vyxCh.chunk.js +2 -0
  149. package/dist/scripts/BP4vyxCh.chunk.js.map +1 -0
  150. package/dist/scripts/BRR3J_Zy.chunk.js +2 -0
  151. package/dist/scripts/BRR3J_Zy.chunk.js.map +1 -0
  152. package/dist/scripts/BUJR0SBs.chunk.js +2 -0
  153. package/dist/scripts/BUJR0SBs.chunk.js.map +1 -0
  154. package/dist/scripts/BY58fjpA.chunk.js +2 -0
  155. package/dist/scripts/BY58fjpA.chunk.js.map +1 -0
  156. package/dist/scripts/BZV5U3ST.chunk.js +2 -0
  157. package/dist/scripts/BZV5U3ST.chunk.js.map +1 -0
  158. package/dist/scripts/BfaprYhg.chunk.js +2 -0
  159. package/dist/scripts/BfaprYhg.chunk.js.map +1 -0
  160. package/dist/scripts/Bfbk7XQF.chunk.js +2 -0
  161. package/dist/scripts/Bfbk7XQF.chunk.js.map +1 -0
  162. package/dist/scripts/BgBDu2hA.chunk.js +2 -0
  163. package/dist/scripts/BgBDu2hA.chunk.js.map +1 -0
  164. package/dist/scripts/BoLC4I50.chunk.js +2 -0
  165. package/dist/scripts/BoLC4I50.chunk.js.map +1 -0
  166. package/dist/scripts/BsXmQt2a.chunk.js +2 -0
  167. package/dist/scripts/BsXmQt2a.chunk.js.map +1 -0
  168. package/dist/scripts/ByUxUi78.chunk.js +2 -0
  169. package/dist/scripts/ByUxUi78.chunk.js.map +1 -0
  170. package/dist/scripts/BzFtDyVZ.chunk.js +2 -0
  171. package/dist/scripts/BzFtDyVZ.chunk.js.map +1 -0
  172. package/dist/scripts/C1TqvuUF.chunk.js +2 -0
  173. package/dist/scripts/C1TqvuUF.chunk.js.map +1 -0
  174. package/dist/scripts/C5lK-q9T.chunk.js +2 -0
  175. package/dist/scripts/C5lK-q9T.chunk.js.map +1 -0
  176. package/dist/scripts/C7IXStcD.chunk.js +2 -0
  177. package/dist/scripts/C7IXStcD.chunk.js.map +1 -0
  178. package/dist/scripts/CANX99lP.chunk.js +2 -0
  179. package/dist/scripts/CANX99lP.chunk.js.map +1 -0
  180. package/dist/scripts/CBjj_ih-.chunk.js +2 -0
  181. package/dist/scripts/CBjj_ih-.chunk.js.map +1 -0
  182. package/dist/scripts/CCIDM29p.chunk.js +2 -0
  183. package/dist/scripts/CCIDM29p.chunk.js.map +1 -0
  184. package/dist/scripts/CFjwQ5Sg.chunk.js +2 -0
  185. package/dist/scripts/CFjwQ5Sg.chunk.js.map +1 -0
  186. package/dist/scripts/CGbmnb6g.chunk.js +380 -0
  187. package/dist/scripts/CGbmnb6g.chunk.js.map +1 -0
  188. package/dist/scripts/CSd_qFwj.chunk.js +2 -0
  189. package/dist/scripts/CSd_qFwj.chunk.js.map +1 -0
  190. package/dist/scripts/CW7x8M-z.chunk.js +2 -0
  191. package/dist/scripts/CW7x8M-z.chunk.js.map +1 -0
  192. package/dist/scripts/CX5q-0jT.chunk.js +2 -0
  193. package/dist/scripts/CX5q-0jT.chunk.js.map +1 -0
  194. package/dist/scripts/CZHffw7D.chunk.js +2 -0
  195. package/dist/scripts/CZHffw7D.chunk.js.map +1 -0
  196. package/dist/scripts/C_Famtl1.chunk.js +2 -0
  197. package/dist/scripts/C_Famtl1.chunk.js.map +1 -0
  198. package/dist/scripts/C_TaaD_7.chunk.js +2 -0
  199. package/dist/scripts/C_TaaD_7.chunk.js.map +1 -0
  200. package/dist/scripts/C_zppm7j.chunk.js +2 -0
  201. package/dist/scripts/C_zppm7j.chunk.js.map +1 -0
  202. package/dist/scripts/CbrfSCTb.chunk.js +2 -0
  203. package/dist/scripts/CbrfSCTb.chunk.js.map +1 -0
  204. package/dist/scripts/CjL3q_zy.chunk.js +6 -0
  205. package/dist/scripts/CjL3q_zy.chunk.js.map +1 -0
  206. package/dist/scripts/CjQHXyx0.chunk.js +2 -0
  207. package/dist/scripts/CjQHXyx0.chunk.js.map +1 -0
  208. package/dist/scripts/Cmu1J2M7.chunk.js +262 -0
  209. package/dist/scripts/Cmu1J2M7.chunk.js.map +1 -0
  210. package/dist/scripts/Co9J1lM_.chunk.js +2 -0
  211. package/dist/scripts/Co9J1lM_.chunk.js.map +1 -0
  212. package/dist/scripts/Cq8XHkfC.chunk.js +2 -0
  213. package/dist/scripts/Cq8XHkfC.chunk.js.map +1 -0
  214. package/dist/scripts/Crxtdvtr.chunk.js +2 -0
  215. package/dist/scripts/Crxtdvtr.chunk.js.map +1 -0
  216. package/dist/scripts/CvkQEqoz.chunk.js +2 -0
  217. package/dist/scripts/CvkQEqoz.chunk.js.map +1 -0
  218. package/dist/scripts/DC24UA5G.chunk.js +2 -0
  219. package/dist/scripts/DC24UA5G.chunk.js.map +1 -0
  220. package/dist/scripts/DDQPxnFm.chunk.js +2 -0
  221. package/dist/scripts/DDQPxnFm.chunk.js.map +1 -0
  222. package/dist/scripts/DGmD-zcu.chunk.js +3 -0
  223. package/dist/scripts/DGmD-zcu.chunk.js.map +1 -0
  224. package/dist/scripts/DIqHgqYU.chunk.js +42 -0
  225. package/dist/scripts/DIqHgqYU.chunk.js.map +1 -0
  226. package/dist/scripts/DLNH1FET.chunk.js +2 -0
  227. package/dist/scripts/DLNH1FET.chunk.js.map +1 -0
  228. package/dist/scripts/DREQwdto.chunk.js +2 -0
  229. package/dist/scripts/DREQwdto.chunk.js.map +1 -0
  230. package/dist/scripts/DSJfyygS.chunk.js +2 -0
  231. package/dist/scripts/DSJfyygS.chunk.js.map +1 -0
  232. package/dist/scripts/DUPqT4A_.chunk.js +2 -0
  233. package/dist/scripts/DUPqT4A_.chunk.js.map +1 -0
  234. package/dist/scripts/DZWKI51S.chunk.js +2 -0
  235. package/dist/scripts/DZWKI51S.chunk.js.map +1 -0
  236. package/dist/scripts/DaLaLgLY.chunk.js +2 -0
  237. package/dist/scripts/DaLaLgLY.chunk.js.map +1 -0
  238. package/dist/scripts/DcnG6LJL.chunk.js +2 -0
  239. package/dist/scripts/DcnG6LJL.chunk.js.map +1 -0
  240. package/dist/scripts/DdCE2h3h.chunk.js +2 -0
  241. package/dist/scripts/DdCE2h3h.chunk.js.map +1 -0
  242. package/dist/scripts/DdaZekkP.chunk.js +2 -0
  243. package/dist/scripts/DdaZekkP.chunk.js.map +1 -0
  244. package/dist/scripts/DkJdzeV5.chunk.js +2 -0
  245. package/dist/scripts/DkJdzeV5.chunk.js.map +1 -0
  246. package/dist/scripts/DlVmB7me.chunk.js +4 -0
  247. package/dist/scripts/DlVmB7me.chunk.js.map +1 -0
  248. package/dist/scripts/Dm6PeyeG.chunk.js +2 -0
  249. package/dist/scripts/Dm6PeyeG.chunk.js.map +1 -0
  250. package/dist/scripts/DqMufS1U.chunk.js +2 -0
  251. package/dist/scripts/DqMufS1U.chunk.js.map +1 -0
  252. package/dist/scripts/DtMtah8Q.chunk.js +2 -0
  253. package/dist/scripts/DtMtah8Q.chunk.js.map +1 -0
  254. package/dist/scripts/DwxW4_xW.chunk.js +2 -0
  255. package/dist/scripts/DwxW4_xW.chunk.js.map +1 -0
  256. package/dist/scripts/Dx4VsESo.chunk.js +2 -0
  257. package/dist/scripts/Dx4VsESo.chunk.js.map +1 -0
  258. package/dist/scripts/DyhdHLt7.chunk.js +2 -0
  259. package/dist/scripts/DyhdHLt7.chunk.js.map +1 -0
  260. package/dist/scripts/EpoqEdEt.chunk.js +2 -0
  261. package/dist/scripts/EpoqEdEt.chunk.js.map +1 -0
  262. package/dist/scripts/Etwv4iY4.chunk.js +2 -0
  263. package/dist/scripts/Etwv4iY4.chunk.js.map +1 -0
  264. package/dist/scripts/GlEgn_rx.chunk.js +2 -0
  265. package/dist/scripts/GlEgn_rx.chunk.js.map +1 -0
  266. package/dist/scripts/H-GxGp0N.chunk.js +2 -0
  267. package/dist/scripts/H-GxGp0N.chunk.js.map +1 -0
  268. package/dist/scripts/HFbpCC17.chunk.js +2 -0
  269. package/dist/scripts/HFbpCC17.chunk.js.map +1 -0
  270. package/dist/scripts/HVSLS_Hw.chunk.js +2 -0
  271. package/dist/scripts/HVSLS_Hw.chunk.js.map +1 -0
  272. package/dist/scripts/Hdw9KpzY.chunk.js +10 -0
  273. package/dist/scripts/Hdw9KpzY.chunk.js.map +1 -0
  274. package/dist/scripts/L-FEMlca.chunk.js +2 -0
  275. package/dist/scripts/L-FEMlca.chunk.js.map +1 -0
  276. package/dist/scripts/OUlVmzyS.chunk.js +2 -0
  277. package/dist/scripts/OUlVmzyS.chunk.js.map +1 -0
  278. package/dist/scripts/SdlfGvLH.chunk.js +2 -0
  279. package/dist/scripts/SdlfGvLH.chunk.js.map +1 -0
  280. package/dist/scripts/Us8IAQKV.chunk.js +2 -0
  281. package/dist/scripts/Us8IAQKV.chunk.js.map +1 -0
  282. package/dist/scripts/ZPrCrk06.chunk.js +2 -0
  283. package/dist/scripts/ZPrCrk06.chunk.js.map +1 -0
  284. package/dist/scripts/app-CQEXKRTo.js +228 -0
  285. package/dist/scripts/app-CQEXKRTo.js.map +1 -0
  286. package/dist/scripts/bDb9_r6g.chunk.js +8 -0
  287. package/dist/scripts/bDb9_r6g.chunk.js.map +1 -0
  288. package/dist/scripts/bfga3fp9.chunk.js +6 -0
  289. package/dist/scripts/bfga3fp9.chunk.js.map +1 -0
  290. package/dist/scripts/ckwYvamH.chunk.js +2 -0
  291. package/dist/scripts/ckwYvamH.chunk.js.map +1 -0
  292. package/dist/scripts/gVHcxSzg.chunk.js +2 -0
  293. package/dist/scripts/gVHcxSzg.chunk.js.map +1 -0
  294. package/dist/scripts/j7UObMj5.chunk.js +3 -0
  295. package/dist/scripts/j7UObMj5.chunk.js.map +1 -0
  296. package/dist/scripts/jNUTSO6y.chunk.js +2 -0
  297. package/dist/scripts/jNUTSO6y.chunk.js.map +1 -0
  298. package/dist/scripts/mLe4zPMQ.chunk.js +2 -0
  299. package/dist/scripts/mLe4zPMQ.chunk.js.map +1 -0
  300. package/dist/scripts/oXJu4dT2.chunk.js +2 -0
  301. package/dist/scripts/oXJu4dT2.chunk.js.map +1 -0
  302. package/dist/scripts/pW31gVxo.chunk.js +2 -0
  303. package/dist/scripts/pW31gVxo.chunk.js.map +1 -0
  304. package/dist/scripts/pmJce9de.chunk.js +2 -0
  305. package/dist/scripts/pmJce9de.chunk.js.map +1 -0
  306. package/dist/scripts/rO0zPagv.chunk.js +2 -0
  307. package/dist/scripts/rO0zPagv.chunk.js.map +1 -0
  308. package/dist/scripts/rf9OuobP.chunk.js +2 -0
  309. package/dist/scripts/rf9OuobP.chunk.js.map +1 -0
  310. package/dist/scripts/sBa2VMAv.chunk.js +2 -0
  311. package/dist/scripts/sBa2VMAv.chunk.js.map +1 -0
  312. package/dist/scripts/sFV5nxD4.chunk.js +2 -0
  313. package/dist/scripts/sFV5nxD4.chunk.js.map +1 -0
  314. package/dist/scripts/vDUMsOFT.chunk.js +2 -0
  315. package/dist/scripts/vDUMsOFT.chunk.js.map +1 -0
  316. package/dist/scripts/z0Is6h8v.chunk.js +2 -0
  317. package/dist/scripts/z0Is6h8v.chunk.js.map +1 -0
  318. package/dist/scripts/zVke3nt7.chunk.js +3 -0
  319. package/dist/scripts/zVke3nt7.chunk.js.map +1 -0
  320. package/package.json +5 -3
  321. package/typings/utils/env.d.ts +3 -0
  322. package/typings/utils/imports.d.ts +1 -1
  323. package/dist/css/1103-reports-d3d5cc00db.chunk.css +0 -31
  324. package/dist/css/1456-reports-4a5871a275.chunk.css +0 -9
  325. package/dist/css/1648-reports-012456ba48.chunk.css +0 -2
  326. package/dist/css/209-reports-c33663a53e.chunk.css +0 -11
  327. package/dist/css/2150-reports-84ec0e9770.chunk.css +0 -4
  328. package/dist/css/2217-reports-74dec0a3fe.chunk.css +0 -32
  329. package/dist/css/2997-reports-e08318f14b.chunk.css +0 -9
  330. package/dist/css/2999-reports-f190450b10.chunk.css +0 -60
  331. package/dist/css/4582-reports-d3d5cc00db.chunk.css +0 -31
  332. package/dist/css/5304-reports-22c2d8d635.chunk.css +0 -9
  333. package/dist/css/6007-reports-5ba77c55a3.chunk.css +0 -8
  334. package/dist/css/6031-reports-d558076846.chunk.css +0 -6
  335. package/dist/css/6356-reports-8c5b220bf6.chunk.css +0 -1
  336. package/dist/css/6811-reports-baf2e97e71.chunk.css +0 -35
  337. package/dist/css/7723-reports-8c6d3c414b.chunk.css +0 -4
  338. package/dist/css/7747-reports-2d9e191b5a.chunk.css +0 -12
  339. package/dist/css/8087-reports-cfe23ba648.chunk.css +0 -10
  340. package/dist/css/8294-reports-c797263ac2.chunk.css +0 -1
  341. package/dist/css/8418-reports-0ada3f3ce2.chunk.css +0 -29
  342. package/dist/css/8450-reports-06493dfde5.chunk.css +0 -9
  343. package/dist/css/8622-reports-9e8970cc7f.chunk.css +0 -8
  344. package/dist/css/8839-reports-8e46644943.chunk.css +0 -1
  345. package/dist/css/8989-reports-92b4f1dde8.chunk.css +0 -8
  346. package/dist/css/9059-reports-a2ac630ebc.chunk.css +0 -35
  347. package/dist/css/9285-reports-5b9af8380f.chunk.css +0 -13
  348. package/dist/css/9661-reports-7435e94a85.chunk.css +0 -4
  349. package/dist/css/9822-reports-a1db1900c7.chunk.css +0 -8
  350. package/dist/css/9949-reports-f22fa2b407.chunk.css +0 -15
  351. package/dist/css/reports-app-b4c4ec5632.css +0 -32
  352. package/dist/languages/en.json +0 -1
  353. package/dist/scripts/1103-d77d388f5b-reports.chunk.js +0 -1
  354. package/dist/scripts/1177-7cf7817e74-reports.chunk.js +0 -1
  355. package/dist/scripts/1456-b7f437ef87-reports.chunk.js +0 -1
  356. package/dist/scripts/1648-e892604f5a-reports.chunk.js +0 -1
  357. package/dist/scripts/1934-ca8497c768-reports.chunk.js +0 -2
  358. package/dist/scripts/1934-ca8497c768-reports.chunk.js.LICENSE.txt +0 -9
  359. package/dist/scripts/2087-e0ef668e1f-reports.chunk.js +0 -1
  360. package/dist/scripts/209-72e77f375e-reports.chunk.js +0 -1
  361. package/dist/scripts/2150-4e9e1fb433-reports.chunk.js +0 -1
  362. package/dist/scripts/2217-15fa35197a-reports.chunk.js +0 -1
  363. package/dist/scripts/2476-a700f69dc4-reports.chunk.js +0 -1
  364. package/dist/scripts/2539-04dfb4f4f1-reports.chunk.js +0 -1
  365. package/dist/scripts/2997-444b5bdaf0-reports.chunk.js +0 -1
  366. package/dist/scripts/2999-f5ee243b25-reports.chunk.js +0 -2
  367. package/dist/scripts/2999-f5ee243b25-reports.chunk.js.LICENSE.txt +0 -1
  368. package/dist/scripts/312-8b006e92ff-reports.chunk.js +0 -1
  369. package/dist/scripts/4234-e3c04f41eb-reports.chunk.js +0 -1
  370. package/dist/scripts/4372-26474a3318-reports.chunk.js +0 -1
  371. package/dist/scripts/438-b444dfb8c6-reports.chunk.js +0 -1
  372. package/dist/scripts/4582-230f130f41-reports.chunk.js +0 -1
  373. package/dist/scripts/4752-db4247883d-reports.chunk.js +0 -2
  374. package/dist/scripts/4752-db4247883d-reports.chunk.js.LICENSE.txt +0 -118
  375. package/dist/scripts/4979-7e14b09f33-reports.chunk.js +0 -1
  376. package/dist/scripts/5051-ff0ec9348d-reports.chunk.js +0 -1
  377. package/dist/scripts/5091-ddd6f61b55-reports.chunk.js +0 -1
  378. package/dist/scripts/5173-cce3b37672-reports.chunk.js +0 -1
  379. package/dist/scripts/5177-a7372e7b8d-reports.chunk.js +0 -1
  380. package/dist/scripts/5304-d5674b32b4-reports.chunk.js +0 -1
  381. package/dist/scripts/5802-2125536755-reports.chunk.js +0 -1
  382. package/dist/scripts/6007-42edca6bba-reports.chunk.js +0 -1
  383. package/dist/scripts/6031-b1c60cc409-reports.chunk.js +0 -1
  384. package/dist/scripts/6081-2bbda6cac3-reports.chunk.js +0 -1
  385. package/dist/scripts/6180-bdb237ffbe-reports.chunk.js +0 -2
  386. package/dist/scripts/6180-bdb237ffbe-reports.chunk.js.LICENSE.txt +0 -1
  387. package/dist/scripts/6198-189ddde870-reports.chunk.js +0 -1
  388. package/dist/scripts/6356-a1b313c73e-reports.chunk.js +0 -1
  389. package/dist/scripts/645-e8b19128e5-reports.chunk.js +0 -1
  390. package/dist/scripts/6545-eadce8e749-reports.chunk.js +0 -1
  391. package/dist/scripts/6811-40ded4c089-reports.chunk.js +0 -1
  392. package/dist/scripts/7238-de5ef0ebfb-reports.chunk.js +0 -1
  393. package/dist/scripts/7562-748e60c3fc-reports.chunk.js +0 -1
  394. package/dist/scripts/7709-82750ee317-reports.chunk.js +0 -1
  395. package/dist/scripts/7723-1799f5aa26-reports.chunk.js +0 -1
  396. package/dist/scripts/7747-bc33e51d7b-reports.chunk.js +0 -2
  397. package/dist/scripts/7747-bc33e51d7b-reports.chunk.js.LICENSE.txt +0 -1
  398. package/dist/scripts/7925-c6c532c9c4-reports.chunk.js +0 -1
  399. package/dist/scripts/8087-1d9e9701e5-reports.chunk.js +0 -1
  400. package/dist/scripts/8393-c37cc22b4c-reports.chunk.js +0 -1
  401. package/dist/scripts/8418-9f96caf039-reports.chunk.js +0 -1
  402. package/dist/scripts/8450-f2d5d99614-reports.chunk.js +0 -1
  403. package/dist/scripts/8591-4811082ab0-reports.chunk.js +0 -1
  404. package/dist/scripts/8622-a422eff0c4-reports.chunk.js +0 -1
  405. package/dist/scripts/8839-711793a97f-reports.chunk.js +0 -1
  406. package/dist/scripts/8989-ca5cab7f45-reports.chunk.js +0 -1
  407. package/dist/scripts/9059-b2dcf3cdb2-reports.chunk.js +0 -1
  408. package/dist/scripts/9162-7ffc692736-reports.chunk.js +0 -1
  409. package/dist/scripts/9285-ecddd01efb-reports.chunk.js +0 -1
  410. package/dist/scripts/9590-41bb23ae71-reports.chunk.js +0 -1
  411. package/dist/scripts/9647-f0c111d3f0-reports.chunk.js +0 -1
  412. package/dist/scripts/9661-2dee4c3417-reports.chunk.js +0 -1
  413. package/dist/scripts/9822-1b202f9d49-reports.chunk.js +0 -1
  414. package/dist/scripts/9895-3b3feb12b9-reports.chunk.js +0 -1
  415. package/dist/scripts/9949-63e32c6733-reports.chunk.js +0 -1
  416. package/dist/scripts/bundle-8754f0e6b8.min.js +0 -2
  417. package/dist/scripts/bundle-8754f0e6b8.min.js.LICENSE.txt +0 -108
  418. package/dist/scripts/polyfills-3db3f009d4.min.js +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BOenBxfx.chunk.js","sources":["../../../../libs/shared/src/apps/analytics/hooks/UseMarkAnswers.ts","../../../../libs/shared/src/apps/analytics/components/questions-list/interaction-response-item/components/AnswerContainer.tsx","../../../../libs/shared/src/apps/analytics/components/questions-list/interaction-response-item/components/IllustrationResponse.tsx","../../../../libs/shared/src/apps/analytics/components/questions-list/interaction-response-item/components/MissingWordResponse.tsx","../../../../libs/shared/src/apps/analytics/components/questions-list/interaction-response-item/components/MultipleChoiceResponse.tsx","../../../../libs/shared/src/apps/analytics/components/questions-list/interaction-response-item/components/ShortAnswerResponse.tsx","../../../../libs/shared/src/apps/analytics/components/questions-list/interaction-response-item/components/TrueOrFalseResponse.tsx","../../../../libs/shared/src/apps/analytics/components/questions-list/interaction-response-item/ResponseItemComponentLookup.tsx","../../../../libs/shared/src/components/interaction-response/InteractionResponseCorrectness.tsx","../../../../libs/shared/src/components/interaction-response/InteractionStudentDetailsHeader.tsx","../../../../libs/shared/src/images/svg/objects/CrossCircleFilledSvg.tsx","../../../../libs/shared/src/images/svg/objects/CrossCircleSvg.tsx","../../../../libs/shared/src/images/svg/status/CheckCircleSvg.tsx","../../../../libs/shared/src/components/interaction-response/MarkResponse.tsx","../../../../libs/shared/src/components/interaction-response/response-types/NoResponse.tsx","../../../../libs/shared/src/apps/analytics/components/questions-list/interaction-response-item/InteractionResponseItem.tsx","../../../../libs/shared/src/components/interaction-response/response-types/IllustrationResponse.tsx","../../../../libs/shared/src/components/interaction-response/response-types/MissingWordResponse.tsx","../../../../../node_modules/simplebar/dist/simplebar-core.esm.js","../../../../../node_modules/simplebar-react/dist/simplebar-react.esm.js","../../../../libs/shared/src/components/interaction-answers/multiple-choice/MultipleChoiceInteractionAnswers.tsx","../../../../libs/shared/src/components/interaction-response/response-types/MultipleChoiceResponse.tsx","../../../../libs/shared/src/components/interaction-response/response-types/ShortAnswerResponse.tsx","../../../../libs/shared/src/components/interaction-answers/true-or-false/TrueOrFalseInteractionAnswers.tsx","../../../../libs/shared/src/components/interaction-response/response-types/TrueOrFalseResponse.tsx","../../../../libs/shared/src/components/interaction-response/response-types/ResponseComponentLookup.tsx","../../../../libs/shared/src/components/interaction-response/InteractionResponse.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { InteractiveResultsRequests } from 'libs/shared/apps/analytics/flight-requests/InteractiveResultsRequests';\nimport { getMarkedAnswerId } from 'libs/shared/apps/analytics/utils/InteractiveUtils';\nimport { InteractiveAnswerStatus } from 'libs/shared/enums/InteractiveAnswerStatus';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { StudentAnswer } from 'libs/shared/interfaces';\n\nconst getPhrase = LanguageService.encloseNamespace('reportsShared.dataHooks');\n\nexport type MarkedAnswerHash = { [id: string]: StudentAnswer };\n\n/**\n * This hook manages the storing of a marked answer hash in state and then the submitting\n * of those answers via an api call.\n */\nexport const useMarkAnswers = (interactiveId: string, interactiveMetadataId: string, onDone?: () => void) => {\n const [ markedAnswers, setMarkedAnswers ] = useState<MarkedAnswerHash>({});\n\n const dispatch = useDispatch();\n const alerts = useAlerts();\n\n function addMarkedAnswers(answers: StudentAnswer[], status: InteractiveAnswerStatus): void {\n answers.forEach(a => {\n setMarkedAnswers(m => ({ ...m, [getMarkedAnswerId(a)]: { ...a, status } }));\n });\n }\n\n function submitMarkedAnswers(): void {\n const answers = Object.keys(markedAnswers).map(key => markedAnswers[key]);\n\n if (!answers.length)\n return;\n\n let completeCount = 0;\n let successCount = 0;\n\n function onSuccess(): void {\n successCount++;\n }\n\n function onAlways(): void {\n completeCount++;\n\n if (completeCount === answers.length)\n onComplete();\n }\n\n function onComplete(): void {\n let alertMessage = '';\n let useErrorAlert = false;\n\n if (successCount === 0) {\n alertMessage = getPhrase('error', { smartCount: answers.length });\n useErrorAlert = true;\n }\n\n if (successCount < completeCount) {\n alertMessage = getPhrase('success', { smartCount: successCount })\n + ` ${getPhrase('partialError', { smartCount: completeCount - successCount })}`;\n }\n\n if (successCount === completeCount) {\n alertMessage = getPhrase('success', { smartCount: successCount });\n }\n\n useErrorAlert\n ? alerts.error(alertMessage)\n : alerts.success(alertMessage);\n\n setMarkedAnswers({});\n\n onDone && onDone();\n }\n\n answers.forEach(({ id, resultId, questionId, status }) => {\n Flight.fetch(dispatch, InteractiveResultsRequests.mark(\n interactiveId,\n interactiveMetadataId,\n id,\n { id, resultId, questionId, status },\n onSuccess,\n null,\n onAlways\n ));\n });\n }\n\n return {\n markedAnswers,\n addMarkedAnswers,\n submitMarkedAnswers\n };\n};","import React from 'react';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { InteractiveAnswerStatus } from 'libs/shared/enums/InteractiveAnswerStatus';\nimport { CloseSvg } from 'libs/shared/images/svg/actions/CloseSvg';\nimport { CheckSvg } from 'libs/shared/images/svg/status/CheckSvg';\nimport { StudentAnswer } from 'libs/shared/interfaces';\n\ninterface AnswerContainerProps extends React.PropsWithChildren {\n answer: StudentAnswer;\n textClassName?: string;\n customAnswer?: boolean;\n}\n\nexport function AnswerContainer(props: AnswerContainerProps) {\n const { answer } = props;\n\n function getBgColour(status: InteractiveAnswerStatus) {\n switch (status) {\n case InteractiveAnswerStatus.Correct: return 'bg-light-green';\n case InteractiveAnswerStatus.Incorrect: return 'bg-light-red';\n case InteractiveAnswerStatus.PendingReview: return 'bg-light-blue';\n }\n }\n\n return (\n <div key={answer.id} className={`${getBgColour(answer.status)} rounded p-2 mb-2`}>\n <div className='d-flex align-items-center gap-2'>\n {answer.status === InteractiveAnswerStatus.Correct && <SvgContainer svg={CheckSvg} className='svg-container flex-shrink-0 text-success' />}\n {answer.status === InteractiveAnswerStatus.Incorrect && <SvgContainer svg={CloseSvg} className='svg-container flex-shrink-0 text-danger' />}\n {!props.customAnswer && <span className={props.textClassName}>{answer.text}</span>}\n </div>\n {props.children}\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AnswerContainer } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/components/AnswerContainer';\nimport { ResponseItemComponentProps } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/ResponseItemComponentLookup';\n\nconst namespace = 'shared.interactionResponses';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function IllustrationResponse(props: ResponseItemComponentProps): JSX.Element {\n const answer = ArrayHelper.first(props.answers);\n\n if (!answer)\n return <></>;\n\n return (\n <AnswerContainer answer={answer} customAnswer>\n <div className='ratio ratio-16x9'>\n <img\n className='img-fluid bg-white border rounded h-100 w-100'\n src={answer.text}\n alt={`${getPhrase('illustrationAlt')}: ${props.interaction.name}`}\n />\n </div>\n {props.children}\n </AnswerContainer>\n );\n}","import React from 'react';\n\nimport { AnswerContainer } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/components/AnswerContainer';\nimport { ResponseItemComponentProps } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/ResponseItemComponentLookup';\n\n\nexport function MissingWordResponse(props: ResponseItemComponentProps) {\n if (!props.answers.length) return <></>;\n\n return (\n <ul className='list-unstyled'>\n {props.answers.map(answer => (\n <li key={answer.id}>\n <AnswerContainer\n answer={answer}\n textClassName='bg-white p-1 border border-gray-300 rounded'\n />\n </li>\n ))}\n </ul>\n );\n}","import React from 'react';\n\nimport { AnswerContainer } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/components/AnswerContainer';\nimport { ResponseItemComponentProps } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/ResponseItemComponentLookup';\n\nexport function MultipleChoiceResponse(props: ResponseItemComponentProps) {\n if (!props.answers.length) return <></>;\n\n return (\n <ul className='list-unstyled'>\n {props.answers.map(answer => (\n <li key={answer.id}>\n <AnswerContainer answer={answer} />\n </li>\n ))}\n </ul>\n );\n}","import React from 'react';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AnswerContainer } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/components/AnswerContainer';\nimport { ResponseItemComponentProps } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/ResponseItemComponentLookup';\n\nexport function ShortAnswerResponse(props: ResponseItemComponentProps): JSX.Element {\n const answer = ArrayHelper.first(props.answers);\n\n if (!answer)\n return <></>;\n\n return (\n <AnswerContainer answer={answer}>\n {props.children}\n </AnswerContainer>\n );\n}","import React from 'react';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AnswerContainer } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/components/AnswerContainer';\nimport { ResponseItemComponentProps } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/ResponseItemComponentLookup';\n\nexport function TrueOrFalseResponse(props: ResponseItemComponentProps) {\n const answer = ArrayHelper.first(props.answers);\n\n if (!answer)\n return <></>;\n\n return (\n <AnswerContainer answer={answer} />\n );\n}","import React from 'react';\n\nimport { Interaction, InteractionTypeId, StudentAnswer, User } from 'libs/shared/interfaces';\n\nimport { IllustrationResponse } from './components/IllustrationResponse';\nimport { MissingWordResponse } from './components/MissingWordResponse';\nimport { MultipleChoiceResponse } from './components/MultipleChoiceResponse';\nimport { ShortAnswerResponse } from './components/ShortAnswerResponse';\nimport { TrueOrFalseResponse } from './components/TrueOrFalseResponse';\n\nexport interface ResponseItemComponentProps extends React.PropsWithChildren {\n interaction: Interaction;\n answers: StudentAnswer[];\n imageCdnUrl: string;\n user: User;\n showFeedback?: boolean;\n showAvatar?: boolean;\n anonymisedUserName?: string;\n}\nconst NoResponseRequired = () => <></>;\n\nexport const ResponseItemComponentLookup: {\n [typeId: number]: (props: ResponseItemComponentProps) => JSX.Element\n} = {\n [InteractionTypeId.Annotation]: NoResponseRequired,\n [InteractionTypeId.Image]: NoResponseRequired,\n [InteractionTypeId.MissingWord]: MissingWordResponse,\n [InteractionTypeId.MultipleChoice]: MultipleChoiceResponse,\n [InteractionTypeId.TrueOrFalse]: TrueOrFalseResponse,\n [InteractionTypeId.ShortAnswer]: ShortAnswerResponse,\n [InteractionTypeId.Illustration]: IllustrationResponse\n};","import React from 'react';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { InteractionCorrectness } from 'libs/shared/enums/InteractionCorrectness';\nimport { CloseSvg } from 'libs/shared/images/svg/actions/CloseSvg';\nimport { TickSvg } from 'libs/shared/images/svg/status/TickSvg';\n\n\ninterface InteractionResponseCorrectnessProps {\n correctness: InteractionCorrectness;\n}\n\nexport function InteractionResponseCorrectness(props: InteractionResponseCorrectnessProps): JSX.Element {\n return (\n <>\n {props.correctness === InteractionCorrectness.Correct &&\n <div className='ms-2 text-success'>\n <SvgContainer svg={TickSvg} />\n </div>\n }\n {props.correctness === InteractionCorrectness.Incorrect &&\n <div className='ms-2 text-danger'>\n <SvgContainer svg={CloseSvg} />\n </div>\n }\n </>\n );\n}","import React from 'react';\n\nimport { InteractionCorrectness } from 'libs/shared/enums/InteractionCorrectness';\nimport { StudentResults } from 'libs/shared/interfaces';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport { InteractionResponseCorrectness } from './InteractionResponseCorrectness';\n\ninterface InteractionStudentDetailsProps {\n studentResults: StudentResults;\n correctness: InteractionCorrectness;\n anonymisedUserName?: string;\n}\n\nexport function InteractionStudentDetailsHeader(props: InteractionStudentDetailsProps): JSX.Element {\n return (\n <div className='d-flex align-items-center justify-content-between mb-2'>\n <p className='fw-semibold mb-0'>\n {props.anonymisedUserName || UserHelper.getFullName(props.studentResults.user)}\n </p>\n <InteractionResponseCorrectness correctness={props.correctness} />\n </div>\n );\n}","import React from 'react';\n\nexport function CrossCircleFilledSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M12.034 21C7.044 21 3 16.968 3 11.993s4.045-9.006 9.034-9.006 9.034 4.032 9.034 9.006S17.023 21 12.034 21M14.95 8.22l-2.946 2.867-2.89-2.91a.646.646 0 0 0-.909 0 .633.633 0 0 0 0 .9l2.891 2.91-2.89 2.922a.633.633 0 0 0 0 .9c.25.25.657.25.908 0l2.89-2.92 2.946 2.92c.251.25.658.25.909 0a.633.633 0 0 0 0-.9l-2.946-2.921L15.86 9.12a.633.633 0 0 0 0-.9.646.646 0 0 0-.909 0'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function CrossCircleSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <rect width='24' height='24' fill='white'/>\n <path\n fill='currentColor'\n fillRule='evenodd'\n d='M21 12c0-4.972-4.028-9-9-9s-9 4.028-9 9 4.028 9 9 9 9-4.028 9-9M6.492 6.492A7.74 7.74 0 0 1 12 4.212c2.081 0 4.037.809 5.508 2.28A7.74 7.74 0 0 1 19.788 12c0 2.081-.809 4.037-2.28 5.508A7.74 7.74 0 0 1 12 19.788a7.74 7.74 0 0 1-5.508-2.28A7.74 7.74 0 0 1 4.212 12c0-2.081.809-4.037 2.28-5.508m8.46 1.728-2.947 2.867-2.89-2.91a.646.646 0 0 0-.909 0 .633.633 0 0 0 0 .9l2.891 2.91-2.89 2.922a.633.633 0 0 0 0 .9c.25.25.657.25.908 0l2.89-2.92 2.946 2.92c.251.25.658.25.909 0a.633.633 0 0 0 0-.9l-2.946-2.921L15.86 9.12a.633.633 0 0 0 0-.9.646.646 0 0 0-.909 0'\n clipRule='evenodd'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function CheckCircleSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M12 3c4.972 0 9 4.028 9 9s-4.028 9-9 9-9-4.028-9-9 4.028-9 9-9m4.244 5.578a.77.77 0 0 0-1.058.068l-4.722 5.18-1.684-1.615a.77.77 0 0 0-1.06 0 .7.7 0 0 0 0 1.018l2.25 2.16a.77.77 0 0 0 1.094-.035l5.25-5.76a.7.7 0 0 0-.07-1.016'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { InteractionCorrectness } from 'libs/shared/enums/InteractionCorrectness';\nimport { InteractiveAnswerStatus } from 'libs/shared/enums/InteractiveAnswerStatus';\nimport { CrossCircleFilledSvg } from 'libs/shared/images/svg/objects/CrossCircleFilledSvg';\nimport { CrossCircleSvg } from 'libs/shared/images/svg/objects/CrossCircleSvg';\nimport { CheckCircleOutlineSvg } from 'libs/shared/images/svg/status/CheckCircleOutlineSvg';\nimport { CheckCircleSvg } from 'libs/shared/images/svg/status/CheckCircleSvg';\nimport { StudentAnswer, StudentAttempt } from 'libs/shared/interfaces';\n\n\ninterface MarkResponseProps {\n studentAttempt: StudentAttempt;\n correctness: InteractionCorrectness;\n markInteraction: (answers: StudentAnswer[], status: InteractiveAnswerStatus) => void;\n markedStatus?: InteractiveAnswerStatus;\n}\n\nexport function MarkResponse(props: MarkResponseProps): JSX.Element {\n if (props.correctness !== InteractionCorrectness.AwaitingMarking)\n return <></>;\n\n return (\n <div className='d-flex justify-content-end gap-2 mt-2'>\n <div className={\n `d-flex flex-column justify-content-end cursor-pointer\n ${props.markedStatus === InteractiveAnswerStatus.Correct ? 'text-success' : ''}`\n }>\n <SvgContainer\n svg={props.markedStatus === InteractiveAnswerStatus.Correct\n ? CheckCircleSvg\n : CheckCircleOutlineSvg\n }\n onClick={\n () => props.markInteraction(props.studentAttempt.answers, InteractiveAnswerStatus.Correct)\n }\n />\n </div>\n <div className={\n `d-flex flex-column justify-content-end cursor-pointer\n ${props.markedStatus === InteractiveAnswerStatus.Incorrect ? ' text-danger' : ''}`\n }>\n <SvgContainer\n svg={props.markedStatus === InteractiveAnswerStatus.Incorrect\n ? CrossCircleFilledSvg\n : CrossCircleSvg\n }\n onClick={\n () => props.markInteraction(props.studentAttempt.answers, InteractiveAnswerStatus.Incorrect)\n }\n />\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nconst namespace = 'interactives.responseTypes';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function NoResponse(): JSX.Element {\n return (\n <p className='p-2'><em>{getPhrase('noResponse')}</em></p>\n );\n}","import React from 'react';\n\nimport { ResponseItemComponentLookup } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/ResponseItemComponentLookup';\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { InteractionResponseCorrectness } from 'libs/shared/components/interaction-response/InteractionResponseCorrectness';\nimport { InteractionStudentDetailsHeader } from 'libs/shared/components/interaction-response/InteractionStudentDetailsHeader';\nimport { MarkResponse } from 'libs/shared/components/interaction-response/MarkResponse';\nimport { NoResponse } from 'libs/shared/components/interaction-response/response-types/NoResponse';\nimport { InteractiveAnswerStatus } from 'libs/shared/enums/InteractiveAnswerStatus';\nimport { Interaction, StudentAnswer, StudentResults } from 'libs/shared/interfaces';\nimport { InteractiveCorrectnessHelper } from 'libs/shared/utils/InteractiveCorrectnessHelper';\nimport { getStudentAttempt, getStudentResult } from 'libs/shared/utils/InteractiveHelper';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport styles from './interaction-response-item.module.scss';\n\ninterface InteractionResponseProps {\n interaction: Interaction;\n studentResults: StudentResults;\n imageCdnUrl: string;\n markInteraction: (answers: StudentAnswer[], status: InteractiveAnswerStatus) => void;\n markedStatus?: InteractiveAnswerStatus;\n showStudentDetails?: boolean;\n className?: string;\n showFeedback?: boolean;\n showAvatar?: boolean;\n anonymisedUserName?: string;\n responseComponentClass?: string;\n}\n\nexport function InteractionResponseItem(props: InteractionResponseProps): JSX.Element {\n const ResponseItemComponent = ResponseItemComponentLookup[props.interaction.typeId];\n\n if (!ResponseItemComponent)\n return <></>;\n\n const result = getStudentResult(props.studentResults);\n\n const studentAttempt = getStudentAttempt(props.interaction.id, result);\n\n const correctness = InteractiveCorrectnessHelper.isInteractionCorrect(props.interaction, result);\n\n return (\n <div className='position-relative'>\n <div className={`rounded ${props.className ?? ''}`}>\n <div className='d-flex'>\n {!!props.showStudentDetails &&\n <div className='me-2'>\n <div className={styles.avatarContainer}>\n <Avatar\n imageCdnUrl={props.imageCdnUrl}\n initials={props.anonymisedUserName\n ? UserHelper.getInitialsFromFullName(props.anonymisedUserName)\n : UserHelper.getInitials(props.studentResults.user?.name, props.studentResults.user?.surname)\n }\n imageUrl={props.anonymisedUserName ? null : props.studentResults.user?.avatar?.url}\n showAnonymousUser={!!props.studentResults?.user?.sessionId}\n />\n </div>\n \n </div>\n }\n <div className='flex-grow-1'>\n {!!props.showStudentDetails &&\n <InteractionStudentDetailsHeader\n studentResults={props.studentResults}\n correctness={correctness}\n anonymisedUserName={props.anonymisedUserName}\n />\n }\n <div className='d-flex justify-content-between'>\n <div className={`flex-grow-1 mb-2 ${props.responseComponentClass ? props.responseComponentClass : ''}`}>\n {studentAttempt\n ? <ResponseItemComponent\n interaction={props.interaction}\n answers={studentAttempt.answers}\n imageCdnUrl={props.imageCdnUrl}\n user={props.studentResults.user}\n showFeedback={props.showFeedback}\n showAvatar={props.showAvatar}\n >\n <MarkResponse\n studentAttempt={studentAttempt}\n correctness={correctness}\n markInteraction={props.markInteraction}\n markedStatus={props.markedStatus}\n />\n </ResponseItemComponent>\n : <NoResponse />\n }\n </div>\n {!props.showStudentDetails &&\n <InteractionResponseCorrectness correctness={correctness} />\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ResponseComponentProps } from './ResponseComponentLookup';\n\nexport function IllustrationResponse(props: ResponseComponentProps): JSX.Element {\n // There should only be one answer.\n const answer = ArrayHelper.first(props.answers);\n\n if (!answer)\n return <></>;\n\n let className = 'rounded p-2 mb-2 w-50';\n\n if (!props.reportsStyling)\n className += ' text-white';\n \n return (\n <div className={className}>\n <img\n className='img-fluid border rounded'\n src={answer.text}\n alt={`Illustrated answer to the question: ${props.interaction.name}`}\n />\n </div>\n );\n}","import React from 'react';\n\nimport { InteractiveAnswerStatus } from 'libs/shared/enums/InteractiveAnswerStatus';\n\nimport { ResponseComponentProps } from './ResponseComponentLookup';\n\nconst PLACEHOLDER = 'cv-missing-word-';\n\nexport function MissingWordResponse(props: ResponseComponentProps): JSX.Element {\n const cleanedUp = (props.interaction.data.sentence as string).replace(/{([^{}]*)}/g, (match: string, val: string) => {\n return `{${PLACEHOLDER}${val}}`;\n });\n\n const items = cleanedUp.split(/{([^{}]*)}/g);\n\n let className = 'p-2';\n\n if (!props.reportsStyling)\n className += ' border rounded';\n\n return (\n <div className={className}>\n {items.map((item, idx) => {\n if (!item.startsWith(PLACEHOLDER))\n return item;\n\n const order = item.replace(PLACEHOLDER, '');\n\n const actionableItem = props.interaction.actionableItems.find(a => a.order.toString() === order);\n\n if (!actionableItem)\n return;\n\n // eslint-disable-next-line\n const answer = props.answers.find(a => a.id == actionableItem.id);\n \n if (!answer)\n return;\n\n if (!props.showFeedback)\n return <strong key={idx} className='text-info'>{answer.text}</strong>;\n\n const isCorrect = answer.status === InteractiveAnswerStatus.Correct;\n\n return (\n <React.Fragment key={idx}>\n {!isCorrect && <><del className='text-danger'><strong>{answer.text}</strong></del>&nbsp;</>}\n <strong className='text-success'>{actionableItem.name}</strong>\n </React.Fragment>\n );\n })}\n </div>\n );\n}","/**\n * SimpleBar.js - v5.3.0\n * Scrollbars, simpler.\n * https://grsmto.github.io/simplebar/\n *\n * Made by Adrien Denat from a fork by Jonathan Nicol\n * Under MIT License\n */\n\nimport 'core-js/modules/es.array.filter';\nimport 'core-js/modules/es.array.for-each';\nimport 'core-js/modules/es.array.iterator';\nimport 'core-js/modules/es.object.assign';\nimport 'core-js/modules/es.object.to-string';\nimport 'core-js/modules/es.parse-int';\nimport 'core-js/modules/es.string.iterator';\nimport 'core-js/modules/es.weak-map';\nimport 'core-js/modules/web.dom-collections.iterator';\nimport throttle from 'lodash.throttle';\nimport debounce from 'lodash.debounce';\nimport memoize from 'lodash.memoize';\nimport ResizeObserver from 'resize-observer-polyfill';\nimport canUseDOM from 'can-use-dom';\nimport 'core-js/modules/es.array.reduce';\nimport 'core-js/modules/es.function.name';\nimport 'core-js/modules/es.regexp.exec';\nimport 'core-js/modules/es.string.match';\nimport 'core-js/modules/es.string.replace';\n\nvar cachedScrollbarWidth = null;\nvar cachedDevicePixelRatio = null;\n\nif (canUseDOM) {\n window.addEventListener('resize', function () {\n if (cachedDevicePixelRatio !== window.devicePixelRatio) {\n cachedDevicePixelRatio = window.devicePixelRatio;\n cachedScrollbarWidth = null;\n }\n });\n}\n\nfunction scrollbarWidth() {\n if (cachedScrollbarWidth === null) {\n if (typeof document === 'undefined') {\n cachedScrollbarWidth = 0;\n return cachedScrollbarWidth;\n }\n\n var body = document.body;\n var box = document.createElement('div');\n box.classList.add('simplebar-hide-scrollbar');\n body.appendChild(box);\n var width = box.getBoundingClientRect().right;\n body.removeChild(box);\n cachedScrollbarWidth = width;\n }\n\n return cachedScrollbarWidth;\n}\n\nfunction getElementWindow(element) {\n if (!element || !element.ownerDocument || !element.ownerDocument.defaultView) {\n return window;\n }\n\n return element.ownerDocument.defaultView;\n}\nfunction getElementDocument(element) {\n if (!element || !element.ownerDocument) {\n return document;\n }\n\n return element.ownerDocument;\n}\n\nvar SimpleBar =\n/*#__PURE__*/\nfunction () {\n function SimpleBar(element, options) {\n var _this = this;\n\n this.onScroll = function () {\n var elWindow = getElementWindow(_this.el);\n\n if (!_this.scrollXTicking) {\n elWindow.requestAnimationFrame(_this.scrollX);\n _this.scrollXTicking = true;\n }\n\n if (!_this.scrollYTicking) {\n elWindow.requestAnimationFrame(_this.scrollY);\n _this.scrollYTicking = true;\n }\n };\n\n this.scrollX = function () {\n if (_this.axis.x.isOverflowing) {\n _this.showScrollbar('x');\n\n _this.positionScrollbar('x');\n }\n\n _this.scrollXTicking = false;\n };\n\n this.scrollY = function () {\n if (_this.axis.y.isOverflowing) {\n _this.showScrollbar('y');\n\n _this.positionScrollbar('y');\n }\n\n _this.scrollYTicking = false;\n };\n\n this.onMouseEnter = function () {\n _this.showScrollbar('x');\n\n _this.showScrollbar('y');\n };\n\n this.onMouseMove = function (e) {\n _this.mouseX = e.clientX;\n _this.mouseY = e.clientY;\n\n if (_this.axis.x.isOverflowing || _this.axis.x.forceVisible) {\n _this.onMouseMoveForAxis('x');\n }\n\n if (_this.axis.y.isOverflowing || _this.axis.y.forceVisible) {\n _this.onMouseMoveForAxis('y');\n }\n };\n\n this.onMouseLeave = function () {\n _this.onMouseMove.cancel();\n\n if (_this.axis.x.isOverflowing || _this.axis.x.forceVisible) {\n _this.onMouseLeaveForAxis('x');\n }\n\n if (_this.axis.y.isOverflowing || _this.axis.y.forceVisible) {\n _this.onMouseLeaveForAxis('y');\n }\n\n _this.mouseX = -1;\n _this.mouseY = -1;\n };\n\n this.onWindowResize = function () {\n // Recalculate scrollbarWidth in case it's a zoom\n _this.scrollbarWidth = _this.getScrollbarWidth();\n\n _this.hideNativeScrollbar();\n };\n\n this.hideScrollbars = function () {\n _this.axis.x.track.rect = _this.axis.x.track.el.getBoundingClientRect();\n _this.axis.y.track.rect = _this.axis.y.track.el.getBoundingClientRect();\n\n if (!_this.isWithinBounds(_this.axis.y.track.rect)) {\n _this.axis.y.scrollbar.el.classList.remove(_this.classNames.visible);\n\n _this.axis.y.isVisible = false;\n }\n\n if (!_this.isWithinBounds(_this.axis.x.track.rect)) {\n _this.axis.x.scrollbar.el.classList.remove(_this.classNames.visible);\n\n _this.axis.x.isVisible = false;\n }\n };\n\n this.onPointerEvent = function (e) {\n var isWithinTrackXBounds, isWithinTrackYBounds;\n _this.axis.x.track.rect = _this.axis.x.track.el.getBoundingClientRect();\n _this.axis.y.track.rect = _this.axis.y.track.el.getBoundingClientRect();\n\n if (_this.axis.x.isOverflowing || _this.axis.x.forceVisible) {\n isWithinTrackXBounds = _this.isWithinBounds(_this.axis.x.track.rect);\n }\n\n if (_this.axis.y.isOverflowing || _this.axis.y.forceVisible) {\n isWithinTrackYBounds = _this.isWithinBounds(_this.axis.y.track.rect);\n } // If any pointer event is called on the scrollbar\n\n\n if (isWithinTrackXBounds || isWithinTrackYBounds) {\n // Preventing the event's default action stops text being\n // selectable during the drag.\n e.preventDefault(); // Prevent event leaking\n\n e.stopPropagation();\n\n if (e.type === 'mousedown') {\n if (isWithinTrackXBounds) {\n _this.axis.x.scrollbar.rect = _this.axis.x.scrollbar.el.getBoundingClientRect();\n\n if (_this.isWithinBounds(_this.axis.x.scrollbar.rect)) {\n _this.onDragStart(e, 'x');\n } else {\n _this.onTrackClick(e, 'x');\n }\n }\n\n if (isWithinTrackYBounds) {\n _this.axis.y.scrollbar.rect = _this.axis.y.scrollbar.el.getBoundingClientRect();\n\n if (_this.isWithinBounds(_this.axis.y.scrollbar.rect)) {\n _this.onDragStart(e, 'y');\n } else {\n _this.onTrackClick(e, 'y');\n }\n }\n }\n }\n };\n\n this.drag = function (e) {\n var eventOffset;\n var track = _this.axis[_this.draggedAxis].track;\n var trackSize = track.rect[_this.axis[_this.draggedAxis].sizeAttr];\n var scrollbar = _this.axis[_this.draggedAxis].scrollbar;\n var contentSize = _this.contentWrapperEl[_this.axis[_this.draggedAxis].scrollSizeAttr];\n var hostSize = parseInt(_this.elStyles[_this.axis[_this.draggedAxis].sizeAttr], 10);\n e.preventDefault();\n e.stopPropagation();\n\n if (_this.draggedAxis === 'y') {\n eventOffset = e.pageY;\n } else {\n eventOffset = e.pageX;\n } // Calculate how far the user's mouse is from the top/left of the scrollbar (minus the dragOffset).\n\n\n var dragPos = eventOffset - track.rect[_this.axis[_this.draggedAxis].offsetAttr] - _this.axis[_this.draggedAxis].dragOffset; // Convert the mouse position into a percentage of the scrollbar height/width.\n\n var dragPerc = dragPos / (trackSize - scrollbar.size); // Scroll the content by the same percentage.\n\n var scrollPos = dragPerc * (contentSize - hostSize); // Fix browsers inconsistency on RTL\n\n if (_this.draggedAxis === 'x') {\n scrollPos = _this.isRtl && SimpleBar.getRtlHelpers().isRtlScrollbarInverted ? scrollPos - (trackSize + scrollbar.size) : scrollPos;\n scrollPos = _this.isRtl && SimpleBar.getRtlHelpers().isRtlScrollingInverted ? -scrollPos : scrollPos;\n }\n\n _this.contentWrapperEl[_this.axis[_this.draggedAxis].scrollOffsetAttr] = scrollPos;\n };\n\n this.onEndDrag = function (e) {\n var elDocument = getElementDocument(_this.el);\n var elWindow = getElementWindow(_this.el);\n e.preventDefault();\n e.stopPropagation();\n\n _this.el.classList.remove(_this.classNames.dragging);\n\n elDocument.removeEventListener('mousemove', _this.drag, true);\n elDocument.removeEventListener('mouseup', _this.onEndDrag, true);\n _this.removePreventClickId = elWindow.setTimeout(function () {\n // Remove these asynchronously so we still suppress click events\n // generated simultaneously with mouseup.\n elDocument.removeEventListener('click', _this.preventClick, true);\n elDocument.removeEventListener('dblclick', _this.preventClick, true);\n _this.removePreventClickId = null;\n });\n };\n\n this.preventClick = function (e) {\n e.preventDefault();\n e.stopPropagation();\n };\n\n this.el = element;\n this.minScrollbarWidth = 20;\n this.options = Object.assign({}, SimpleBar.defaultOptions, {}, options);\n this.classNames = Object.assign({}, SimpleBar.defaultOptions.classNames, {}, this.options.classNames);\n this.axis = {\n x: {\n scrollOffsetAttr: 'scrollLeft',\n sizeAttr: 'width',\n scrollSizeAttr: 'scrollWidth',\n offsetSizeAttr: 'offsetWidth',\n offsetAttr: 'left',\n overflowAttr: 'overflowX',\n dragOffset: 0,\n isOverflowing: true,\n isVisible: false,\n forceVisible: false,\n track: {},\n scrollbar: {}\n },\n y: {\n scrollOffsetAttr: 'scrollTop',\n sizeAttr: 'height',\n scrollSizeAttr: 'scrollHeight',\n offsetSizeAttr: 'offsetHeight',\n offsetAttr: 'top',\n overflowAttr: 'overflowY',\n dragOffset: 0,\n isOverflowing: true,\n isVisible: false,\n forceVisible: false,\n track: {},\n scrollbar: {}\n }\n };\n this.removePreventClickId = null; // Don't re-instantiate over an existing one\n\n if (SimpleBar.instances.has(this.el)) {\n return;\n }\n\n this.recalculate = throttle(this.recalculate.bind(this), 64);\n this.onMouseMove = throttle(this.onMouseMove.bind(this), 64);\n this.hideScrollbars = debounce(this.hideScrollbars.bind(this), this.options.timeout);\n this.onWindowResize = debounce(this.onWindowResize.bind(this), 64, {\n leading: true\n });\n SimpleBar.getRtlHelpers = memoize(SimpleBar.getRtlHelpers);\n this.init();\n }\n /**\n * Static properties\n */\n\n /**\n * Helper to fix browsers inconsistency on RTL:\n * - Firefox inverts the scrollbar initial position\n * - IE11 inverts both scrollbar position and scrolling offset\n * Directly inspired by @KingSora's OverlayScrollbars https://github.com/KingSora/OverlayScrollbars/blob/master/js/OverlayScrollbars.js#L1634\n */\n\n\n SimpleBar.getRtlHelpers = function getRtlHelpers() {\n var dummyDiv = document.createElement('div');\n dummyDiv.innerHTML = '<div class=\"hs-dummy-scrollbar-size\"><div style=\"height: 200%; width: 200%; margin: 10px 0;\"></div></div>';\n var scrollbarDummyEl = dummyDiv.firstElementChild;\n document.body.appendChild(scrollbarDummyEl);\n var dummyContainerChild = scrollbarDummyEl.firstElementChild;\n scrollbarDummyEl.scrollLeft = 0;\n var dummyContainerOffset = SimpleBar.getOffset(scrollbarDummyEl);\n var dummyContainerChildOffset = SimpleBar.getOffset(dummyContainerChild);\n scrollbarDummyEl.scrollLeft = 999;\n var dummyContainerScrollOffsetAfterScroll = SimpleBar.getOffset(dummyContainerChild);\n return {\n // determines if the scrolling is responding with negative values\n isRtlScrollingInverted: dummyContainerOffset.left !== dummyContainerChildOffset.left && dummyContainerChildOffset.left - dummyContainerScrollOffsetAfterScroll.left !== 0,\n // determines if the origin scrollbar position is inverted or not (positioned on left or right)\n isRtlScrollbarInverted: dummyContainerOffset.left !== dummyContainerChildOffset.left\n };\n };\n\n SimpleBar.getOffset = function getOffset(el) {\n var rect = el.getBoundingClientRect();\n var elDocument = getElementDocument(el);\n var elWindow = getElementWindow(el);\n return {\n top: rect.top + (elWindow.pageYOffset || elDocument.documentElement.scrollTop),\n left: rect.left + (elWindow.pageXOffset || elDocument.documentElement.scrollLeft)\n };\n };\n\n var _proto = SimpleBar.prototype;\n\n _proto.init = function init() {\n // Save a reference to the instance, so we know this DOM node has already been instancied\n SimpleBar.instances.set(this.el, this); // We stop here on server-side\n\n if (canUseDOM) {\n this.initDOM();\n this.scrollbarWidth = this.getScrollbarWidth();\n this.recalculate();\n this.initListeners();\n }\n };\n\n _proto.initDOM = function initDOM() {\n var _this2 = this;\n\n // make sure this element doesn't have the elements yet\n if (Array.prototype.filter.call(this.el.children, function (child) {\n return child.classList.contains(_this2.classNames.wrapper);\n }).length) {\n // assume that element has his DOM already initiated\n this.wrapperEl = this.el.querySelector(\".\" + this.classNames.wrapper);\n this.contentWrapperEl = this.options.scrollableNode || this.el.querySelector(\".\" + this.classNames.contentWrapper);\n this.contentEl = this.options.contentNode || this.el.querySelector(\".\" + this.classNames.contentEl);\n this.offsetEl = this.el.querySelector(\".\" + this.classNames.offset);\n this.maskEl = this.el.querySelector(\".\" + this.classNames.mask);\n this.placeholderEl = this.findChild(this.wrapperEl, \".\" + this.classNames.placeholder);\n this.heightAutoObserverWrapperEl = this.el.querySelector(\".\" + this.classNames.heightAutoObserverWrapperEl);\n this.heightAutoObserverEl = this.el.querySelector(\".\" + this.classNames.heightAutoObserverEl);\n this.axis.x.track.el = this.findChild(this.el, \".\" + this.classNames.track + \".\" + this.classNames.horizontal);\n this.axis.y.track.el = this.findChild(this.el, \".\" + this.classNames.track + \".\" + this.classNames.vertical);\n } else {\n // Prepare DOM\n this.wrapperEl = document.createElement('div');\n this.contentWrapperEl = document.createElement('div');\n this.offsetEl = document.createElement('div');\n this.maskEl = document.createElement('div');\n this.contentEl = document.createElement('div');\n this.placeholderEl = document.createElement('div');\n this.heightAutoObserverWrapperEl = document.createElement('div');\n this.heightAutoObserverEl = document.createElement('div');\n this.wrapperEl.classList.add(this.classNames.wrapper);\n this.contentWrapperEl.classList.add(this.classNames.contentWrapper);\n this.offsetEl.classList.add(this.classNames.offset);\n this.maskEl.classList.add(this.classNames.mask);\n this.contentEl.classList.add(this.classNames.contentEl);\n this.placeholderEl.classList.add(this.classNames.placeholder);\n this.heightAutoObserverWrapperEl.classList.add(this.classNames.heightAutoObserverWrapperEl);\n this.heightAutoObserverEl.classList.add(this.classNames.heightAutoObserverEl);\n\n while (this.el.firstChild) {\n this.contentEl.appendChild(this.el.firstChild);\n }\n\n this.contentWrapperEl.appendChild(this.contentEl);\n this.offsetEl.appendChild(this.contentWrapperEl);\n this.maskEl.appendChild(this.offsetEl);\n this.heightAutoObserverWrapperEl.appendChild(this.heightAutoObserverEl);\n this.wrapperEl.appendChild(this.heightAutoObserverWrapperEl);\n this.wrapperEl.appendChild(this.maskEl);\n this.wrapperEl.appendChild(this.placeholderEl);\n this.el.appendChild(this.wrapperEl);\n }\n\n if (!this.axis.x.track.el || !this.axis.y.track.el) {\n var track = document.createElement('div');\n var scrollbar = document.createElement('div');\n track.classList.add(this.classNames.track);\n scrollbar.classList.add(this.classNames.scrollbar);\n track.appendChild(scrollbar);\n this.axis.x.track.el = track.cloneNode(true);\n this.axis.x.track.el.classList.add(this.classNames.horizontal);\n this.axis.y.track.el = track.cloneNode(true);\n this.axis.y.track.el.classList.add(this.classNames.vertical);\n this.el.appendChild(this.axis.x.track.el);\n this.el.appendChild(this.axis.y.track.el);\n }\n\n this.axis.x.scrollbar.el = this.axis.x.track.el.querySelector(\".\" + this.classNames.scrollbar);\n this.axis.y.scrollbar.el = this.axis.y.track.el.querySelector(\".\" + this.classNames.scrollbar);\n\n if (!this.options.autoHide) {\n this.axis.x.scrollbar.el.classList.add(this.classNames.visible);\n this.axis.y.scrollbar.el.classList.add(this.classNames.visible);\n }\n\n this.el.setAttribute('data-simplebar', 'init');\n };\n\n _proto.initListeners = function initListeners() {\n var _this3 = this;\n\n var elWindow = getElementWindow(this.el); // Event listeners\n\n if (this.options.autoHide) {\n this.el.addEventListener('mouseenter', this.onMouseEnter);\n }\n\n ['mousedown', 'click', 'dblclick'].forEach(function (e) {\n _this3.el.addEventListener(e, _this3.onPointerEvent, true);\n });\n ['touchstart', 'touchend', 'touchmove'].forEach(function (e) {\n _this3.el.addEventListener(e, _this3.onPointerEvent, {\n capture: true,\n passive: true\n });\n });\n this.el.addEventListener('mousemove', this.onMouseMove);\n this.el.addEventListener('mouseleave', this.onMouseLeave);\n this.contentWrapperEl.addEventListener('scroll', this.onScroll); // Browser zoom triggers a window resize\n\n elWindow.addEventListener('resize', this.onWindowResize); // Hack for https://github.com/WICG/ResizeObserver/issues/38\n\n var resizeObserverStarted = false;\n var resizeObserver = elWindow.ResizeObserver || ResizeObserver;\n this.resizeObserver = new resizeObserver(function () {\n if (!resizeObserverStarted) return;\n\n _this3.recalculate();\n });\n this.resizeObserver.observe(this.el);\n this.resizeObserver.observe(this.contentEl);\n elWindow.requestAnimationFrame(function () {\n resizeObserverStarted = true;\n }); // This is required to detect horizontal scroll. Vertical scroll only needs the resizeObserver.\n\n this.mutationObserver = new elWindow.MutationObserver(this.recalculate);\n this.mutationObserver.observe(this.contentEl, {\n childList: true,\n subtree: true,\n characterData: true\n });\n };\n\n _proto.recalculate = function recalculate() {\n var elWindow = getElementWindow(this.el);\n this.elStyles = elWindow.getComputedStyle(this.el);\n this.isRtl = this.elStyles.direction === 'rtl';\n var isHeightAuto = this.heightAutoObserverEl.offsetHeight <= 1;\n var isWidthAuto = this.heightAutoObserverEl.offsetWidth <= 1;\n var contentElOffsetWidth = this.contentEl.offsetWidth;\n var contentWrapperElOffsetWidth = this.contentWrapperEl.offsetWidth;\n var elOverflowX = this.elStyles.overflowX;\n var elOverflowY = this.elStyles.overflowY;\n this.contentEl.style.padding = this.elStyles.paddingTop + \" \" + this.elStyles.paddingRight + \" \" + this.elStyles.paddingBottom + \" \" + this.elStyles.paddingLeft;\n this.wrapperEl.style.margin = \"-\" + this.elStyles.paddingTop + \" -\" + this.elStyles.paddingRight + \" -\" + this.elStyles.paddingBottom + \" -\" + this.elStyles.paddingLeft;\n var contentElScrollHeight = this.contentEl.scrollHeight;\n var contentElScrollWidth = this.contentEl.scrollWidth;\n this.contentWrapperEl.style.height = isHeightAuto ? 'auto' : '100%'; // Determine placeholder size\n\n this.placeholderEl.style.width = isWidthAuto ? contentElOffsetWidth + \"px\" : 'auto';\n this.placeholderEl.style.height = contentElScrollHeight + \"px\";\n var contentWrapperElOffsetHeight = this.contentWrapperEl.offsetHeight;\n this.axis.x.isOverflowing = contentElScrollWidth > contentElOffsetWidth;\n this.axis.y.isOverflowing = contentElScrollHeight > contentWrapperElOffsetHeight; // Set isOverflowing to false if user explicitely set hidden overflow\n\n this.axis.x.isOverflowing = elOverflowX === 'hidden' ? false : this.axis.x.isOverflowing;\n this.axis.y.isOverflowing = elOverflowY === 'hidden' ? false : this.axis.y.isOverflowing;\n this.axis.x.forceVisible = this.options.forceVisible === 'x' || this.options.forceVisible === true;\n this.axis.y.forceVisible = this.options.forceVisible === 'y' || this.options.forceVisible === true;\n this.hideNativeScrollbar(); // Set isOverflowing to false if scrollbar is not necessary (content is shorter than offset)\n\n var offsetForXScrollbar = this.axis.x.isOverflowing ? this.scrollbarWidth : 0;\n var offsetForYScrollbar = this.axis.y.isOverflowing ? this.scrollbarWidth : 0;\n this.axis.x.isOverflowing = this.axis.x.isOverflowing && contentElScrollWidth > contentWrapperElOffsetWidth - offsetForYScrollbar;\n this.axis.y.isOverflowing = this.axis.y.isOverflowing && contentElScrollHeight > contentWrapperElOffsetHeight - offsetForXScrollbar;\n this.axis.x.scrollbar.size = this.getScrollbarSize('x');\n this.axis.y.scrollbar.size = this.getScrollbarSize('y');\n this.axis.x.scrollbar.el.style.width = this.axis.x.scrollbar.size + \"px\";\n this.axis.y.scrollbar.el.style.height = this.axis.y.scrollbar.size + \"px\";\n this.positionScrollbar('x');\n this.positionScrollbar('y');\n this.toggleTrackVisibility('x');\n this.toggleTrackVisibility('y');\n }\n /**\n * Calculate scrollbar size\n */\n ;\n\n _proto.getScrollbarSize = function getScrollbarSize(axis) {\n if (axis === void 0) {\n axis = 'y';\n }\n\n if (!this.axis[axis].isOverflowing) {\n return 0;\n }\n\n var contentSize = this.contentEl[this.axis[axis].scrollSizeAttr];\n var trackSize = this.axis[axis].track.el[this.axis[axis].offsetSizeAttr];\n var scrollbarSize;\n var scrollbarRatio = trackSize / contentSize; // Calculate new height/position of drag handle.\n\n scrollbarSize = Math.max(~~(scrollbarRatio * trackSize), this.options.scrollbarMinSize);\n\n if (this.options.scrollbarMaxSize) {\n scrollbarSize = Math.min(scrollbarSize, this.options.scrollbarMaxSize);\n }\n\n return scrollbarSize;\n };\n\n _proto.positionScrollbar = function positionScrollbar(axis) {\n if (axis === void 0) {\n axis = 'y';\n }\n\n if (!this.axis[axis].isOverflowing) {\n return;\n }\n\n var contentSize = this.contentWrapperEl[this.axis[axis].scrollSizeAttr];\n var trackSize = this.axis[axis].track.el[this.axis[axis].offsetSizeAttr];\n var hostSize = parseInt(this.elStyles[this.axis[axis].sizeAttr], 10);\n var scrollbar = this.axis[axis].scrollbar;\n var scrollOffset = this.contentWrapperEl[this.axis[axis].scrollOffsetAttr];\n scrollOffset = axis === 'x' && this.isRtl && SimpleBar.getRtlHelpers().isRtlScrollingInverted ? -scrollOffset : scrollOffset;\n var scrollPourcent = scrollOffset / (contentSize - hostSize);\n var handleOffset = ~~((trackSize - scrollbar.size) * scrollPourcent);\n handleOffset = axis === 'x' && this.isRtl && SimpleBar.getRtlHelpers().isRtlScrollbarInverted ? handleOffset + (trackSize - scrollbar.size) : handleOffset;\n scrollbar.el.style.transform = axis === 'x' ? \"translate3d(\" + handleOffset + \"px, 0, 0)\" : \"translate3d(0, \" + handleOffset + \"px, 0)\";\n };\n\n _proto.toggleTrackVisibility = function toggleTrackVisibility(axis) {\n if (axis === void 0) {\n axis = 'y';\n }\n\n var track = this.axis[axis].track.el;\n var scrollbar = this.axis[axis].scrollbar.el;\n\n if (this.axis[axis].isOverflowing || this.axis[axis].forceVisible) {\n track.style.visibility = 'visible';\n this.contentWrapperEl.style[this.axis[axis].overflowAttr] = 'scroll';\n } else {\n track.style.visibility = 'hidden';\n this.contentWrapperEl.style[this.axis[axis].overflowAttr] = 'hidden';\n } // Even if forceVisible is enabled, scrollbar itself should be hidden\n\n\n if (this.axis[axis].isOverflowing) {\n scrollbar.style.display = 'block';\n } else {\n scrollbar.style.display = 'none';\n }\n };\n\n _proto.hideNativeScrollbar = function hideNativeScrollbar() {\n this.offsetEl.style[this.isRtl ? 'left' : 'right'] = this.axis.y.isOverflowing || this.axis.y.forceVisible ? \"-\" + this.scrollbarWidth + \"px\" : 0;\n this.offsetEl.style.bottom = this.axis.x.isOverflowing || this.axis.x.forceVisible ? \"-\" + this.scrollbarWidth + \"px\" : 0;\n }\n /**\n * On scroll event handling\n */\n ;\n\n _proto.onMouseMoveForAxis = function onMouseMoveForAxis(axis) {\n if (axis === void 0) {\n axis = 'y';\n }\n\n this.axis[axis].track.rect = this.axis[axis].track.el.getBoundingClientRect();\n this.axis[axis].scrollbar.rect = this.axis[axis].scrollbar.el.getBoundingClientRect();\n var isWithinScrollbarBoundsX = this.isWithinBounds(this.axis[axis].scrollbar.rect);\n\n if (isWithinScrollbarBoundsX) {\n this.axis[axis].scrollbar.el.classList.add(this.classNames.hover);\n } else {\n this.axis[axis].scrollbar.el.classList.remove(this.classNames.hover);\n }\n\n if (this.isWithinBounds(this.axis[axis].track.rect)) {\n this.showScrollbar(axis);\n this.axis[axis].track.el.classList.add(this.classNames.hover);\n } else {\n this.axis[axis].track.el.classList.remove(this.classNames.hover);\n }\n };\n\n _proto.onMouseLeaveForAxis = function onMouseLeaveForAxis(axis) {\n if (axis === void 0) {\n axis = 'y';\n }\n\n this.axis[axis].track.el.classList.remove(this.classNames.hover);\n this.axis[axis].scrollbar.el.classList.remove(this.classNames.hover);\n };\n\n /**\n * Show scrollbar\n */\n _proto.showScrollbar = function showScrollbar(axis) {\n if (axis === void 0) {\n axis = 'y';\n }\n\n var scrollbar = this.axis[axis].scrollbar.el;\n\n if (!this.axis[axis].isVisible) {\n scrollbar.classList.add(this.classNames.visible);\n this.axis[axis].isVisible = true;\n }\n\n if (this.options.autoHide) {\n this.hideScrollbars();\n }\n }\n /**\n * Hide Scrollbar\n */\n ;\n\n /**\n * on scrollbar handle drag movement starts\n */\n _proto.onDragStart = function onDragStart(e, axis) {\n if (axis === void 0) {\n axis = 'y';\n }\n\n var elDocument = getElementDocument(this.el);\n var elWindow = getElementWindow(this.el);\n var scrollbar = this.axis[axis].scrollbar; // Measure how far the user's mouse is from the top of the scrollbar drag handle.\n\n var eventOffset = axis === 'y' ? e.pageY : e.pageX;\n this.axis[axis].dragOffset = eventOffset - scrollbar.rect[this.axis[axis].offsetAttr];\n this.draggedAxis = axis;\n this.el.classList.add(this.classNames.dragging);\n elDocument.addEventListener('mousemove', this.drag, true);\n elDocument.addEventListener('mouseup', this.onEndDrag, true);\n\n if (this.removePreventClickId === null) {\n elDocument.addEventListener('click', this.preventClick, true);\n elDocument.addEventListener('dblclick', this.preventClick, true);\n } else {\n elWindow.clearTimeout(this.removePreventClickId);\n this.removePreventClickId = null;\n }\n }\n /**\n * Drag scrollbar handle\n */\n ;\n\n _proto.onTrackClick = function onTrackClick(e, axis) {\n var _this4 = this;\n\n if (axis === void 0) {\n axis = 'y';\n }\n\n if (!this.options.clickOnTrack) return;\n var elWindow = getElementWindow(this.el);\n this.axis[axis].scrollbar.rect = this.axis[axis].scrollbar.el.getBoundingClientRect();\n var scrollbar = this.axis[axis].scrollbar;\n var scrollbarOffset = scrollbar.rect[this.axis[axis].offsetAttr];\n var hostSize = parseInt(this.elStyles[this.axis[axis].sizeAttr], 10);\n var scrolled = this.contentWrapperEl[this.axis[axis].scrollOffsetAttr];\n var t = axis === 'y' ? this.mouseY - scrollbarOffset : this.mouseX - scrollbarOffset;\n var dir = t < 0 ? -1 : 1;\n var scrollSize = dir === -1 ? scrolled - hostSize : scrolled + hostSize;\n\n var scrollTo = function scrollTo() {\n if (dir === -1) {\n if (scrolled > scrollSize) {\n var _this4$contentWrapper;\n\n scrolled -= _this4.options.clickOnTrackSpeed;\n\n _this4.contentWrapperEl.scrollTo((_this4$contentWrapper = {}, _this4$contentWrapper[_this4.axis[axis].offsetAttr] = scrolled, _this4$contentWrapper));\n\n elWindow.requestAnimationFrame(scrollTo);\n }\n } else {\n if (scrolled < scrollSize) {\n var _this4$contentWrapper2;\n\n scrolled += _this4.options.clickOnTrackSpeed;\n\n _this4.contentWrapperEl.scrollTo((_this4$contentWrapper2 = {}, _this4$contentWrapper2[_this4.axis[axis].offsetAttr] = scrolled, _this4$contentWrapper2));\n\n elWindow.requestAnimationFrame(scrollTo);\n }\n }\n };\n\n scrollTo();\n }\n /**\n * Getter for content element\n */\n ;\n\n _proto.getContentElement = function getContentElement() {\n return this.contentEl;\n }\n /**\n * Getter for original scrolling element\n */\n ;\n\n _proto.getScrollElement = function getScrollElement() {\n return this.contentWrapperEl;\n };\n\n _proto.getScrollbarWidth = function getScrollbarWidth() {\n // Try/catch for FF 56 throwing on undefined computedStyles\n try {\n // Detect browsers supporting CSS scrollbar styling and do not calculate\n if (getComputedStyle(this.contentWrapperEl, '::-webkit-scrollbar').display === 'none' || 'scrollbarWidth' in document.documentElement.style || '-ms-overflow-style' in document.documentElement.style) {\n return 0;\n } else {\n return scrollbarWidth();\n }\n } catch (e) {\n return scrollbarWidth();\n }\n };\n\n _proto.removeListeners = function removeListeners() {\n var _this5 = this;\n\n var elWindow = getElementWindow(this.el); // Event listeners\n\n if (this.options.autoHide) {\n this.el.removeEventListener('mouseenter', this.onMouseEnter);\n }\n\n ['mousedown', 'click', 'dblclick'].forEach(function (e) {\n _this5.el.removeEventListener(e, _this5.onPointerEvent, true);\n });\n ['touchstart', 'touchend', 'touchmove'].forEach(function (e) {\n _this5.el.removeEventListener(e, _this5.onPointerEvent, {\n capture: true,\n passive: true\n });\n });\n this.el.removeEventListener('mousemove', this.onMouseMove);\n this.el.removeEventListener('mouseleave', this.onMouseLeave);\n\n if (this.contentWrapperEl) {\n this.contentWrapperEl.removeEventListener('scroll', this.onScroll);\n }\n\n elWindow.removeEventListener('resize', this.onWindowResize);\n\n if (this.mutationObserver) {\n this.mutationObserver.disconnect();\n }\n\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n } // Cancel all debounced functions\n\n\n this.recalculate.cancel();\n this.onMouseMove.cancel();\n this.hideScrollbars.cancel();\n this.onWindowResize.cancel();\n }\n /**\n * UnMount mutation observer and delete SimpleBar instance from DOM element\n */\n ;\n\n _proto.unMount = function unMount() {\n this.removeListeners();\n SimpleBar.instances.delete(this.el);\n }\n /**\n * Check if mouse is within bounds\n */\n ;\n\n _proto.isWithinBounds = function isWithinBounds(bbox) {\n return this.mouseX >= bbox.left && this.mouseX <= bbox.left + bbox.width && this.mouseY >= bbox.top && this.mouseY <= bbox.top + bbox.height;\n }\n /**\n * Find element children matches query\n */\n ;\n\n _proto.findChild = function findChild(el, query) {\n var matches = el.matches || el.webkitMatchesSelector || el.mozMatchesSelector || el.msMatchesSelector;\n return Array.prototype.filter.call(el.children, function (child) {\n return matches.call(child, query);\n })[0];\n };\n\n return SimpleBar;\n}();\n\nSimpleBar.defaultOptions = {\n autoHide: true,\n forceVisible: false,\n clickOnTrack: true,\n clickOnTrackSpeed: 40,\n classNames: {\n contentEl: 'simplebar-content',\n contentWrapper: 'simplebar-content-wrapper',\n offset: 'simplebar-offset',\n mask: 'simplebar-mask',\n wrapper: 'simplebar-wrapper',\n placeholder: 'simplebar-placeholder',\n scrollbar: 'simplebar-scrollbar',\n track: 'simplebar-track',\n heightAutoObserverWrapperEl: 'simplebar-height-auto-observer-wrapper',\n heightAutoObserverEl: 'simplebar-height-auto-observer',\n visible: 'simplebar-visible',\n horizontal: 'simplebar-horizontal',\n vertical: 'simplebar-vertical',\n hover: 'simplebar-hover',\n dragging: 'simplebar-dragging'\n },\n scrollbarMinSize: 25,\n scrollbarMaxSize: 0,\n timeout: 1000\n};\nSimpleBar.instances = new WeakMap();\n\nexport default SimpleBar;\n//# sourceMappingURL=simplebar-core.esm.js.map\n","/**\n * simplebar-react - v2.3.0\n * React component for SimpleBar\n * https://grsmto.github.io/simplebar/\n *\n * Made by Adrien Denat\n * Under MIT License\n */\n\nimport React, { useRef, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport SimpleBarJS from 'simplebar/dist/simplebar-core.esm';\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(source, true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(source).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\n/* Deprecated\n * Hardcore this here until we can safely deprecated it.\n * Helper function to retrieve options from element attributes\n */\n\nvar getOptions = function getOptions(obj) {\n var options = Array.prototype.reduce.call(obj, function (acc, attribute) {\n var option = attribute.name.match(/data-simplebar-(.+)/);\n\n if (option) {\n var key = option[1].replace(/\\W+(.)/g, function (x, chr) {\n return chr.toUpperCase();\n });\n\n switch (attribute.value) {\n case 'true':\n acc[key] = true;\n break;\n\n case 'false':\n acc[key] = false;\n break;\n\n case undefined:\n acc[key] = true;\n break;\n\n default:\n acc[key] = attribute.value;\n }\n }\n\n return acc;\n }, {});\n return options;\n};\n\nvar SimpleBar = React.forwardRef(function (_ref, ref) {\n var children = _ref.children,\n _ref$scrollableNodePr = _ref.scrollableNodeProps,\n scrollableNodeProps = _ref$scrollableNodePr === void 0 ? {} : _ref$scrollableNodePr,\n otherProps = _objectWithoutProperties(_ref, [\"children\", \"scrollableNodeProps\"]);\n\n var instance;\n var scrollableNodeRef = useRef();\n var elRef = useRef();\n var contentNodeRef = useRef();\n var options = {};\n var rest = {};\n var deprecatedOptions = [];\n Object.keys(otherProps).forEach(function (key) {\n if (Object.prototype.hasOwnProperty.call(SimpleBarJS.defaultOptions, key)) {\n options[key] = otherProps[key];\n } else if (key.match(/data-simplebar-(.+)/) && key !== 'data-simplebar-direction') {\n deprecatedOptions.push({\n name: key,\n value: otherProps[key]\n });\n } else {\n rest[key] = otherProps[key];\n }\n });\n\n if (deprecatedOptions.length) {\n console.warn(\"simplebar-react: this way of passing options is deprecated. Pass it like normal props instead:\\n 'data-simplebar-auto-hide=\\\"false\\\"' \\u2014> 'autoHide=\\\"false\\\"'\\n \");\n }\n\n useEffect(function () {\n scrollableNodeRef = scrollableNodeProps.ref || scrollableNodeRef;\n\n if (elRef.current) {\n instance = new SimpleBarJS(elRef.current, _objectSpread2({}, getOptions(deprecatedOptions), {}, options, {}, scrollableNodeRef && {\n scrollableNode: scrollableNodeRef.current\n }, {}, contentNodeRef.current && {\n contentNode: contentNodeRef.current\n }));\n\n if (ref) {\n ref.current = instance;\n }\n }\n\n return function () {\n instance.unMount();\n instance = null;\n };\n }, []);\n return React.createElement(\"div\", _extends({\n ref: elRef,\n \"data-simplebar\": true\n }, rest), React.createElement(\"div\", {\n className: \"simplebar-wrapper\"\n }, React.createElement(\"div\", {\n className: \"simplebar-height-auto-observer-wrapper\"\n }, React.createElement(\"div\", {\n className: \"simplebar-height-auto-observer\"\n })), React.createElement(\"div\", {\n className: \"simplebar-mask\"\n }, React.createElement(\"div\", {\n className: \"simplebar-offset\"\n }, typeof children === 'function' ? children({\n scrollableNodeRef: scrollableNodeRef,\n contentNodeRef: contentNodeRef\n }) : React.createElement(\"div\", _extends({}, scrollableNodeProps, {\n className: \"simplebar-content-wrapper\".concat(scrollableNodeProps.className ? \" \".concat(scrollableNodeProps.className) : '')\n }), React.createElement(\"div\", {\n className: \"simplebar-content\"\n }, children)))), React.createElement(\"div\", {\n className: \"simplebar-placeholder\"\n })), React.createElement(\"div\", {\n className: \"simplebar-track simplebar-horizontal\"\n }, React.createElement(\"div\", {\n className: \"simplebar-scrollbar\"\n })), React.createElement(\"div\", {\n className: \"simplebar-track simplebar-vertical\"\n }, React.createElement(\"div\", {\n className: \"simplebar-scrollbar\"\n })));\n});\nSimpleBar.displayName = 'SimpleBar';\nSimpleBar.propTypes = {\n children: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n scrollableNodeProps: PropTypes.object\n};\n\nexport default SimpleBar;\n","import React from 'react';\nimport { HtmlPortalNode, InPortal } from 'react-reverse-portal';\nimport SimpleBar from 'simplebar-react';\n\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { CloseSvg } from 'libs/shared/images/svg/actions/CloseSvg';\nimport { CrossCircleFilledSvg } from 'libs/shared/images/svg/objects/CrossCircleFilledSvg';\nimport { CheckCircleSvg } from 'libs/shared/images/svg/status/CheckCircleSvg';\nimport { CheckSvg } from 'libs/shared/images/svg/status/CheckSvg';\nimport { ActionableItem, Interaction } from 'libs/shared/interfaces';\n\nimport styles from './multiple-choice-interaction-answers.module.scss';\n\nconst alphabet = [ 'A', 'B', 'C', 'D' ];\n\ninterface MultipleChoiceInteractionAnswersProps {\n interaction: Interaction;\n showFeedback: boolean;\n getSelectedAnswer?: (actionableItemId: string) => string;\n imageApi?: string;\n userInitials?: string;\n userAvatar?: string;\n submitted?: boolean;\n size?: 'sm' | 'lg';\n showCorrectnessIcons?: boolean;\n\n /**\n * onSelectAnswer can be omitted when showing read-only results.\n */\n onSelectAnswer?: (answer: ActionableItem, checked: boolean) => void;\n\n onlyShowSelectedAnswer?: boolean;\n\n /**\n * Will hide the tick and cross from the answer tiles\n */\n hideFeedbackIcons?: boolean;\n unCheckedBackground?: string;\n\n leftHandSidePortalNode?: HtmlPortalNode;\n\n /**\n * Used when displaying the answer in reports\n */\n isDisplayOnly?: boolean;\n}\n\nMultipleChoiceInteractionAnswers.defaultProps = {\n size: 'lg',\n unCheckedBackground: 'bg-white'\n};\n\nexport function MultipleChoiceInteractionAnswers(props: MultipleChoiceInteractionAnswersProps): JSX.Element {\n const [ previewAnswer, setPreviewAnswer ] = React.useState<string>(null);\n\n const hasImages = !!props.interaction.actionableItems.find(a => !!a.data?.imageUrl);\n\n const scrollRef = React.useRef(null);\n\n const small = props.size === 'sm' || (hasImages && props.interaction.actionableItems.length > 2);\n\n return (\n <ul className={`${hasImages ? `row ${small && !props.isDisplayOnly ? 'px-lg-5 p-0' : ''}` : ''} list-unstyled`}>\n {props.interaction.actionableItems.map((a, index) => {\n const answer = props.getSelectedAnswer?.(a.id);\n const imageUrl = a.data?.imageUrl;\n const hasText = !!a.name;\n\n function onSelectAnswer(): void {\n if (props.submitted)\n return;\n\n if (props.onSelectAnswer)\n props.onSelectAnswer(a, !answer);\n\n setPreviewAnswer(answer ? null : a.id);\n }\n\n if (props.onlyShowSelectedAnswer && !answer)\n return <React.Fragment key={index}></React.Fragment>;\n\n let className = answer ?\n 'bg-blue text-white' :\n props.unCheckedBackground;\n\n let LeftPart = () => <>{alphabet[index]}</>;\n\n if (props.showFeedback) {\n if (!props.showCorrectnessIcons) {\n className = a.isCorrect ?\n 'bg-success text-white' :\n `bg-danger text-white ${styles.incorrect}`;\n }\n\n if (!props.hideFeedbackIcons) {\n LeftPart = () => {\n return (\n <>\n {a.isCorrect ?\n <SvgContainer size={SvgContainerSize.Small} svg={CheckSvg} /> :\n <SvgContainer size={SvgContainerSize.Small} svg={CloseSvg} />}\n </>\n );\n };\n }\n }\n\n /**\n * Allow keyboard controls, but not when we show feedback\n */\n const accessibility = props.showFeedback ? {} : {\n role: 'button',\n tabIndex: 0,\n onKeyDown: (e: React.KeyboardEvent) => e.key === 'Enter' && onSelectAnswer()\n };\n\n let hasImageClass = '';\n if (hasImages) {\n hasImageClass = 'col-6';\n }\n\n const showImagePreview = a.id.toString() === previewAnswer?.toString()\n && props.leftHandSidePortalNode\n && imageUrl\n && !props.submitted;\n\n return (\n <React.Fragment key={index}>\n {showImagePreview &&\n <InPortal node={props.leftHandSidePortalNode}>\n <SimpleBar className='h-100' ref={scrollRef}>\n <div className='p-3 d-flex flex-column h-100'>\n <div className='flex-grow-1'>\n <div className='cv-image-container text-center'>\n <img\n className='img-fluid rounded'\n src={imageUrl}\n alt={a.name || alphabet[index]}\n />\n </div>\n <div className={`${styles.answer} h6 text-center text-dark p-3`}>\n <span className={`d-inline-block ${hasText ? 'me-3' : ''} cv-multiple-choice-bullet`}><LeftPart /></span>\n {hasText && <span className='flex-grow-1 pe-4'>{a.name}</span>}\n </div>\n </div>\n <div className='text-end'>\n <DivButton\n className='btn btn-link'\n onClick={() => setPreviewAnswer(null)}\n >\n Close\n </DivButton>\n </div>\n </div>\n </SimpleBar>\n </InPortal>\n }\n <li className={`${hasImageClass} mb-3`}>\n <label\n className={`\n d-block\n rounded-3\n shadow-sm\n position-relative\n ${props.showFeedback ? '' : 'cursor-pointer'}\n ${styles.answer}\n ${className}\n ${hasImages ? 'mb-0 h-100' : ''}\n `}\n key={index}\n onClick={onSelectAnswer}\n {...accessibility}\n >\n {hasImages &&\n <div>\n {props.showCorrectnessIcons && (\n <div className={`${styles.svgFill} position-absolute top-0 start-0 p-2 z-1`}>\n {a.isCorrect\n ? <SvgContainer svg={CheckCircleSvg} size={SvgContainerSize.ExtraLarge} className='svg-container text-success' />\n : <SvgContainer svg={CrossCircleFilledSvg} size={SvgContainerSize.Large} className='svg-container text-red' />\n }\n </div>\n )}\n <span className={`d-block position-relative ${styles.imageContainer}`}>\n <span\n className={`\n ${styles.image}\n position-absolute\n start-0\n end-0\n top-0\n bottom-0\n rounded-top\n `}\n style={{ backgroundImage: imageUrl ? `url(${imageUrl})` : undefined }}\n title={a.name || alphabet[index]}\n />\n </span>\n </div>\n }\n <span className={`d-flex ${hasText || props.isDisplayOnly ? 'justify-content-between' : 'justify-content-center'} ${small ? 'p-2' : 'p-3'}`}>\n <span className={`d-inline-block ${hasText ? 'me-3' : ''} cv-multiple-choice-bullet`}><LeftPart /></span>\n {hasText && <span className='flex-grow-1 pe-4'>{a.name}</span>}\n {props.userAvatar && !props.onlyShowSelectedAnswer &&\n <span className={`${styles.avatarContainer} ${hasImages ? styles.avatarContainerImage : ''}`}>\n {answer &&\n <Avatar\n imageCdnUrl={props.imageApi}\n initials={props.userInitials}\n imageUrl={props.userAvatar}\n extraClasses={'border border-white'}\n />\n }\n </span>\n }\n </span>\n </label>\n </li>\n </React.Fragment>\n );\n })}\n </ul>\n );\n}","import React from 'react';\n\nimport { MultipleChoiceInteractionAnswers } from 'libs/shared/components/interaction-answers/multiple-choice/MultipleChoiceInteractionAnswers';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport { ResponseComponentProps } from './ResponseComponentLookup';\n\nimport styles from './response-types.module.scss';\n\nexport function MultipleChoiceResponse(props: ResponseComponentProps): JSX.Element {\n function getAnswer(id: string): string {\n // eslint-disable-next-line\n const answer = props.answers.find(a => a.id == id);\n return answer?.id;\n }\n\n let className = 'my-2';\n\n if (props.reportsStyling)\n className += ' mx-2';\n\n return (\n <div className={className}>\n <MultipleChoiceInteractionAnswers\n interaction={props.interaction}\n showFeedback={props.showFeedback}\n getSelectedAnswer={getAnswer}\n imageApi={props.imageCdnUrl}\n userInitials={props.anonymisedUserName\n ? UserHelper.getInitialsFromFullName(props.anonymisedUserName)\n : UserHelper.getInitials(props.user?.name, props.user?.surname)\n }\n userAvatar={props.anonymisedUserName ? null : props.user?.avatar?.url}\n onlyShowSelectedAnswer={!props.showAvatar}\n size='sm'\n unCheckedBackground={props.showFeedback ? '' : `${styles.uncheckedBackground} text-white`}\n isDisplayOnly\n />\n </div>\n );\n}","import React from 'react';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ResponseComponentProps } from './ResponseComponentLookup';\n\nexport function ShortAnswerResponse(props: ResponseComponentProps): JSX.Element {\n // There should only be one answer.\n const answer = ArrayHelper.first(props.answers);\n\n if (!answer)\n return <></>;\n\n let className = 'rounded p-2 mb-2';\n\n if (!props.reportsStyling)\n className += ' bg-blue text-white';\n \n return (\n <div className={className}>\n {answer.text}\n </div>\n );\n}","import React from 'react';\n\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { CloseSvg } from 'libs/shared/images/svg/actions/CloseSvg';\nimport { CheckSvg } from 'libs/shared/images/svg/status/CheckSvg';\nimport { ActionableItem, Interaction } from 'libs/shared/interfaces';\n\nimport styles from './true-or-false-interaction-answers.module.scss';\n\ninterface TrueOrFalseInteractionAnswersProps {\n className?: string;\n interaction: Interaction;\n showFeedback: boolean;\n getSelectedAnswer: (actionableItemId: string) => string;\n imageApi: string;\n userInitials: string;\n userAvatar: string;\n size?: 'sm' | 'lg'\n \n /**\n * onSelectAnswer can be omitted when showing read-only results.\n */\n onSelectAnswer?: (answer: ActionableItem) => void;\n\n /**\n * Will hide the tick and cross from the answer tiles\n */\n hideFeedbackIcons?: boolean;\n unCheckedBackground?: string;\n}\n\nTrueOrFalseInteractionAnswers.defaultProps = {\n size: 'lg',\n unCheckedBackground: 'bg-white'\n};\n\nexport function TrueOrFalseInteractionAnswers(props: TrueOrFalseInteractionAnswersProps): JSX.Element {\n function onSelectAnswer(answer: ActionableItem): void {\n if (props.onSelectAnswer)\n props.onSelectAnswer(answer);\n }\n \n return (\n <div\n className={`d-flex ${props.className ? props.className : ''} ${props.size === 'sm' ? 'mx-n1' : 'mx-n2'}`}>\n {props.interaction.actionableItems.map((a, index) => {\n const answer = props.getSelectedAnswer(a.id);\n\n let className = answer ?\n 'bg-blue text-white' :\n props.unCheckedBackground;\n\n let LeftPart = () => <></>;\n\n if (props.showFeedback) {\n className = a.isCorrect ?\n 'bg-success text-white' :\n `bg-danger text-white ${styles.incorrect}`;\n\n if (!props.hideFeedbackIcons) {\n LeftPart = () => {\n return (\n <>\n {a.isCorrect ?\n <SvgContainer size={SvgContainerSize.Small} svg={CheckSvg} /> :\n <SvgContainer size={SvgContainerSize.Small} svg={CloseSvg} />}\n </>\n );\n };\n }\n }\n\n /**\n * Allow keyboard controls, but not when we show feedback\n */\n const accessibility = props.showFeedback ? {} : {\n role: 'button',\n tabIndex: 0,\n onKeyDown: (e: React.KeyboardEvent) => e.key === 'Enter' && onSelectAnswer(a)\n };\n\n return (\n <label\n key={index}\n htmlFor={a.id}\n className={`\n rounded-3\n shadow-sm\n my-0\n position-relative\n overflow-hidden\n d-flex\n align-items-center\n justify-content-center\n ${props.size === 'sm' ? `${styles.small} mx-1 h5` : `${styles.large} mx-2 h4`}\n ${props.showFeedback ? '' : 'cursor-pointer'}\n ${className}`}\n {...accessibility}\n >\n <input\n id={a.id}\n type={'radio'}\n name='multiple-choice'\n checked={!!answer}\n onChange={() => onSelectAnswer(a)}\n disabled={props.showFeedback}\n hidden\n />\n {a.name}\n <span className={`position-absolute p-2 ${styles.feedback}`}><LeftPart /></span>\n <span className={`${styles.avatarContainer}${props.size === 'sm' ? ` ${styles.avatarContainerSmall}` : ''}`}>\n {answer &&\n <Avatar\n imageCdnUrl={props.imageApi}\n initials={props.userInitials}\n imageUrl={props.userAvatar}\n extraClasses={`border border-white ${props.size === 'sm' ? styles.avatarSmall : ''}`}\n />\n }\n </span>\n </label>\n );\n })}\n </div>\n );\n}","import React from 'react';\n\nimport { TrueOrFalseInteractionAnswers } from 'libs/shared/components/interaction-answers/true-or-false/TrueOrFalseInteractionAnswers';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport { ResponseComponentProps } from './ResponseComponentLookup';\n\nimport styles from './response-types.module.scss';\n\nexport function TrueOrFalseResponse(props: ResponseComponentProps): JSX.Element {\n function getAnswer(id: string): string {\n // eslint-disable-next-line\n const answer = props.answers.find(a => a.id == id);\n return answer?.text;\n }\n\n let className = 'justify-content-start';\n\n if (props.reportsStyling)\n className = 'justify-content-center';\n \n return (\n <div className='my-2'>\n <TrueOrFalseInteractionAnswers\n className={className}\n interaction={props.interaction}\n showFeedback={props.showFeedback}\n hideFeedbackIcons={!props.showAvatar}\n getSelectedAnswer={getAnswer}\n imageApi={props.imageCdnUrl}\n userInitials={props.anonymisedUserName\n ? UserHelper.getInitialsFromFullName(props.anonymisedUserName)\n : UserHelper.getInitials(props.user?.name, props.user?.surname)\n }\n userAvatar={props.anonymisedUserName ? null : props.user?.avatar?.url}\n size='sm'\n unCheckedBackground={props.showFeedback ? '' : `${styles.uncheckedBackground} text-white`}\n />\n </div>\n );\n}","import React from 'react';\n\nimport { IllustrationResponse } from 'libs/shared/components/interaction-response/response-types/IllustrationResponse';\nimport { Interaction, InteractionTypeId, StudentAnswer, User } from 'libs/shared/interfaces';\n\nimport { MissingWordResponse } from './MissingWordResponse';\nimport { MultipleChoiceResponse } from './MultipleChoiceResponse';\nimport { ShortAnswerResponse } from './ShortAnswerResponse';\nimport { TrueOrFalseResponse } from './TrueOrFalseResponse';\n\nexport interface ResponseComponentProps {\n interaction: Interaction;\n answers: StudentAnswer[];\n imageCdnUrl: string;\n user: User;\n showFeedback?: boolean;\n showAvatar?: boolean;\n anonymisedUserName?: string;\n reportsStyling?: boolean;\n}\nconst NoResponseRequired = () => <></>;\n\nexport const ResponseComponentLookup: {\n [typeId: number]: (props: ResponseComponentProps) => JSX.Element\n} = {\n [InteractionTypeId.Annotation]: NoResponseRequired,\n [InteractionTypeId.Image]: NoResponseRequired,\n [InteractionTypeId.MissingWord]: MissingWordResponse,\n [InteractionTypeId.MultipleChoice]: MultipleChoiceResponse,\n [InteractionTypeId.TrueOrFalse]: TrueOrFalseResponse,\n [InteractionTypeId.ShortAnswer]: ShortAnswerResponse,\n [InteractionTypeId.Illustration]: IllustrationResponse\n};","import React from 'react';\n\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { InteractiveAnswerStatus } from 'libs/shared/enums/InteractiveAnswerStatus';\nimport { Interaction, StudentAnswer, StudentResults } from 'libs/shared/interfaces';\nimport { InteractiveCorrectnessHelper } from 'libs/shared/utils/InteractiveCorrectnessHelper';\nimport { getStudentAttempt, getStudentResult } from 'libs/shared/utils/InteractiveHelper';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport { NoResponse } from './response-types/NoResponse';\nimport { ResponseComponentLookup } from './response-types/ResponseComponentLookup';\nimport { InteractionResponseCorrectness } from './InteractionResponseCorrectness';\nimport { InteractionStudentDetailsHeader } from './InteractionStudentDetailsHeader';\nimport { MarkResponse } from './MarkResponse';\n\nimport styles from './interaction-response.module.scss';\n\n\ninterface InteractionResponseProps {\n interaction: Interaction;\n studentResults: StudentResults;\n imageCdnUrl: string;\n markInteraction: (answers: StudentAnswer[], status: InteractiveAnswerStatus) => void;\n markedStatus?: InteractiveAnswerStatus;\n showStudentDetails?: boolean;\n className?: string;\n showFeedback?: boolean;\n showAvatar?: boolean;\n anonymisedUserName?: string;\n reportsStyling?: boolean;\n responseComponentClass?: string;\n}\n\nexport function InteractionResponse(props: InteractionResponseProps): JSX.Element {\n const ResponseComponent = ResponseComponentLookup[props.interaction.typeId];\n\n if (!ResponseComponent)\n return <></>;\n\n const result = getStudentResult(props.studentResults);\n\n const studentAttempt = getStudentAttempt(props.interaction.id, result);\n\n const correctness = InteractiveCorrectnessHelper.isInteractionCorrect(props.interaction, result);\n\n return (\n <div className='position-relative mt-2'>\n <div className={`rounded ${props.className ?? ''}`}>\n <div className='d-flex'>\n {!!props.showStudentDetails &&\n <div className='me-2'>\n <div className={styles.avatarContainer}>\n <Avatar\n imageCdnUrl={props.imageCdnUrl}\n initials={props.anonymisedUserName\n ? UserHelper.getInitialsFromFullName(props.anonymisedUserName)\n : UserHelper.getInitials(props.studentResults.user?.name, props.studentResults.user?.surname)\n }\n imageUrl={props.anonymisedUserName ? null : props.studentResults.user?.avatar?.url}\n />\n </div>\n </div>\n }\n <div className='flex-grow-1'>\n {!!props.showStudentDetails &&\n <InteractionStudentDetailsHeader\n studentResults={props.studentResults}\n correctness={correctness}\n anonymisedUserName={props.anonymisedUserName}\n />\n }\n <div className='d-flex justify-content-between'>\n <div className={`flex-grow-1 ${props.responseComponentClass ? props.responseComponentClass : ''}`}>\n {studentAttempt\n ? <ResponseComponent\n interaction={props.interaction}\n answers={studentAttempt.answers}\n imageCdnUrl={props.imageCdnUrl}\n user={props.studentResults.user}\n showFeedback={props.showFeedback}\n showAvatar={props.showAvatar}\n reportsStyling={props.reportsStyling}\n />\n : <NoResponse />\n }\n </div>\n {!props.showStudentDetails &&\n <InteractionResponseCorrectness correctness={correctness} />\n }\n </div>\n </div>\n </div>\n <MarkResponse\n studentAttempt={studentAttempt}\n correctness={correctness}\n markInteraction={props.markInteraction}\n markedStatus={props.markedStatus}\n />\n </div>\n </div>\n );\n}"],"names":["getPhrase","LanguageService","useMarkAnswers","interactiveId","interactiveMetadataId","onDone","markedAnswers","setMarkedAnswers","useState","dispatch","useDispatch","alerts","useAlerts","addMarkedAnswers","answers","status","a","m","getMarkedAnswerId","submitMarkedAnswers","key","completeCount","successCount","onSuccess","onAlways","onComplete","alertMessage","useErrorAlert","id","resultId","questionId","Flight.fetch","InteractiveResultsRequests","AnswerContainer","props","answer","getBgColour","InteractiveAnswerStatus","jsxs","jsx","SvgContainer","CheckSvg","CloseSvg","namespace","IllustrationResponse","ArrayHelper","Fragment","MissingWordResponse","MultipleChoiceResponse","ShortAnswerResponse","TrueOrFalseResponse","NoResponseRequired","ResponseItemComponentLookup","InteractionTypeId","InteractionResponseCorrectness","InteractionCorrectness","TickSvg","InteractionStudentDetailsHeader","UserHelper","CrossCircleFilledSvg","CrossCircleSvg","CheckCircleSvg","MarkResponse","CheckCircleOutlineSvg","NoResponse","InteractionResponseItem","ResponseItemComponent","result","getStudentResult","studentAttempt","getStudentAttempt","correctness","InteractiveCorrectnessHelper","styles","Avatar","_a","_b","_d","_c","_f","_e","className","PLACEHOLDER","items","match","val","item","idx","order","actionableItem","isCorrect","React","cachedScrollbarWidth","cachedDevicePixelRatio","canUseDOM","scrollbarWidth","body","box","width","getElementWindow","element","getElementDocument","SimpleBar","options","_this","elWindow","e","isWithinTrackXBounds","isWithinTrackYBounds","eventOffset","track","trackSize","scrollbar","contentSize","hostSize","dragPos","dragPerc","scrollPos","elDocument","throttle","debounce","memoize","dummyDiv","scrollbarDummyEl","dummyContainerChild","dummyContainerOffset","dummyContainerChildOffset","dummyContainerScrollOffsetAfterScroll","el","rect","_proto","_this2","child","_this3","resizeObserverStarted","resizeObserver","ResizeObserver","isHeightAuto","isWidthAuto","contentElOffsetWidth","contentWrapperElOffsetWidth","elOverflowX","elOverflowY","contentElScrollHeight","contentElScrollWidth","contentWrapperElOffsetHeight","offsetForXScrollbar","offsetForYScrollbar","axis","scrollbarSize","scrollbarRatio","scrollOffset","scrollPourcent","handleOffset","isWithinScrollbarBoundsX","_this4","scrollbarOffset","scrolled","t","dir","scrollSize","scrollTo","_this4$contentWrapper","_this4$contentWrapper2","_this5","bbox","query","matches","_defineProperty","obj","value","_extends","target","i","source","ownKeys","object","enumerableOnly","keys","symbols","sym","_objectSpread2","_objectWithoutPropertiesLoose","excluded","sourceKeys","_objectWithoutProperties","sourceSymbolKeys","getOptions","acc","attribute","option","x","chr","_ref","ref","children","_ref$scrollableNodePr","scrollableNodeProps","otherProps","instance","scrollableNodeRef","useRef","elRef","contentNodeRef","rest","deprecatedOptions","SimpleBarJS","useEffect","PropTypes","alphabet","MultipleChoiceInteractionAnswers","previewAnswer","setPreviewAnswer","hasImages","scrollRef","small","index","imageUrl","hasText","onSelectAnswer","LeftPart","SvgContainerSize","accessibility","hasImageClass","showImagePreview","InPortal","DivButton","getAnswer","TrueOrFalseInteractionAnswers","ResponseComponentLookup","InteractionResponse","ResponseComponent"],"mappings":"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","x_google_ignoreList":[18,19]}
@@ -0,0 +1,2 @@
1
+ import{j as o,t}from"./app-CQEXKRTo.js";function i({error:r}){return o.jsx(t,{error:r})}export{i as NotFoundView};
2
+ //# sourceMappingURL=BOoxRruH.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BOoxRruH.chunk.js","sources":["../../src/apps/default/views/not-found/ReportsNotFoundView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { ErrorPageError } from 'libs/shared/errors/primitives/ErrorPageError';\n\nimport { ErrorView } from 'apps/default/views/error/ReportsErrorView';\n\ninterface NotFoundViewProps {\n error: ErrorPageError;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function NotFoundView({ error }: NotFoundViewProps): React.ReactElement {\n return <ErrorView error={error} />;\n}"],"names":["NotFoundView","error","jsx","ErrorView"],"mappings":"wCAWO,SAASA,EAAa,CAAE,MAAAC,GAAgD,CAC7E,OAAOC,MAACC,GAAU,MAAAF,EAAc,CAClC"}
@@ -0,0 +1,2 @@
1
+ import{b as r,P as d,e as m,c as h,V as l,r as E}from"./app-CQEXKRTo.js";import{u as F}from"./CZHffw7D.chunk.js";function I(a){const{hasPermissions:n}=r(),o=n(d.ViewCustomerAnalytics),s=m(),e=F(o&&!!s&&a,{start:s==null?void 0:s.start,end:s==null?void 0:s.end}),[,i]=h(l.AUDIENCE_FILTER_SUGGESTIONS);E.useEffect(()=>{var t,u;e.data&&i("users",(u=(t=e.data)==null?void 0:t.students)==null?void 0:u.map(c=>c.user.id))},[e.isFetching])}export{I as u};
2
+ //# sourceMappingURL=BP4vyxCh.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BP4vyxCh.chunk.js","sources":["../../src/apps/interactives/hooks/UseSetSuggestedInteractiveResultsAudience.ts"],"sourcesContent":["import { useEffect } from 'react';\n\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\n\nimport { useFetchInteractiveResults } from 'libs/shared/apps/analytics/hooks/UseFetchInteractiveResults';\nimport { AudienceFilterSuggestions } from 'libs/shared/apps/analytics/interfaces/AudienceFilterSuggestions';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\n\nimport { ViewModelKeys } from 'shared/constants/ReportsViewModels';\nimport { useGetRequestFilter } from 'shared/hooks/UseGetFilterQueryParams';\n\n\n/**\n * This hooks fetches interactive results for all users within the set date range\n * (ignoring the audience filter) and sets any users with results as audience suggestions.\n * \n * Note: this is only for admins as teachers have a different audience filter.\n */\nexport function useSetSuggestedInteractiveResultsAudience(interactiveMetadataId: string): void {\n const { hasPermissions } = usePermissions();\n const canViewCustomerAnalytics = hasPermissions(PermissionName.ViewCustomerAnalytics);\n\n const filter = useGetRequestFilter();\n\n const shouldFetch = canViewCustomerAnalytics && !!filter;\n\n const results = useFetchInteractiveResults(\n shouldFetch && interactiveMetadataId,\n { start: filter?.start, end: filter?.end }\n );\n\n const [ , setSuggestions ] = useViewModel<AudienceFilterSuggestions>(ViewModelKeys.AUDIENCE_FILTER_SUGGESTIONS);\n\n useEffect(() => {\n if (!results.data)\n return;\n\n setSuggestions('users', results.data?.students?.map(s => s.user.id));\n }, [results.isFetching]);\n}"],"names":["useSetSuggestedInteractiveResultsAudience","interactiveMetadataId","hasPermissions","usePermissions","canViewCustomerAnalytics","PermissionName","filter","useGetRequestFilter","results","useFetchInteractiveResults","setSuggestions","useViewModel","ViewModelKeys","useEffect","_b","_a","s"],"mappings":"iHAmBO,SAASA,EAA0CC,EAAqC,CAC7F,KAAM,CAAE,eAAAC,CAAA,EAAmBC,EAAA,EACrBC,EAA2BF,EAAeG,EAAe,qBAAqB,EAE9EC,EAASC,EAAA,EAITC,EAAUC,EAFIL,GAA4B,CAAC,CAACE,GAGjCL,EACf,CAAE,MAAOK,GAAA,YAAAA,EAAQ,MAAO,IAAKA,GAAA,YAAAA,EAAQ,GAAA,CAAI,EAGrC,CAAA,CAAII,CAAe,EAAIC,EAAwCC,EAAc,2BAA2B,EAE9GC,EAAAA,UAAU,IAAM,SACTL,EAAQ,MAGbE,EAAe,SAASI,GAAAC,EAAAP,EAAQ,OAAR,YAAAO,EAAc,WAAd,YAAAD,EAAwB,IAAIE,GAAKA,EAAE,KAAK,GAAG,CACrE,EAAG,CAACR,EAAQ,UAAU,CAAC,CACzB"}
@@ -0,0 +1,2 @@
1
+ import{b as R,ad as O,c as T,d as A,e as F,u as i,bO as f,f as q,a as G,L,P as K,j as e,V as H,U as D,C as $}from"./app-CQEXKRTo.js";import{P as k,M as W,V as B,a as Q,E as Y}from"./CGbmnb6g.chunk.js";import{u as z}from"./CZHffw7D.chunk.js";import{g as j}from"./CX5q-0jT.chunk.js";import{V as M}from"./j7UObMj5.chunk.js";import{u as J}from"./DSJfyygS.chunk.js";import{u as X}from"./HFbpCC17.chunk.js";import{P as Z}from"./DyhdHLt7.chunk.js";import{u as ee}from"./BArX7fyb.chunk.js";import{u as ae}from"./Co9J1lM_.chunk.js";import{u as te}from"./BAR_V9AM.chunk.js";import{u as ie,a as se}from"./CjQHXyx0.chunk.js";import{u as ne}from"./CvkQEqoz.chunk.js";import{E as re}from"./zVke3nt7.chunk.js";import{V as oe}from"./BM1URibR.chunk.js";import{u as me,I as de}from"./pmJce9de.chunk.js";import{O as ce}from"./SdlfGvLH.chunk.js";import"./bDb9_r6g.chunk.js";import"./BI4Pc5Qp.chunk.js";import"./Cq8XHkfC.chunk.js";import"./5O9SdVRZ.chunk.js";import"./CW7x8M-z.chunk.js";import"./GlEgn_rx.chunk.js";import"./z0Is6h8v.chunk.js";import"./EpoqEdEt.chunk.js";import"./DqMufS1U.chunk.js";import"./BIcuRL8o.chunk.js";import"./9-ob4xwW.chunk.js";import"./BGYUqEPH.chunk.js";import"./sBa2VMAv.chunk.js";import"./DGmD-zcu.chunk.js";import"./DIqHgqYU.chunk.js";import"./sFV5nxD4.chunk.js";import"./BZV5U3ST.chunk.js";import"./Bfbk7XQF.chunk.js";import"./mLe4zPMQ.chunk.js";import"./H-GxGp0N.chunk.js";import"./OUlVmzyS.chunk.js";import"./DLNH1FET.chunk.js";import"./CFjwQ5Sg.chunk.js";import"./DDQPxnFm.chunk.js";import"./B-0CRp8U.chunk.js";import"./rO0zPagv.chunk.js";import"./DdCE2h3h.chunk.js";const ge="_viewCountContainer_8jne3_1",le="_engagementPercentageContainer_8jne3_4",ue="_engagementGraphContainer_8jne3_7",pe="_partialTable_8jne3_10",m={viewCountContainer:ge,engagementPercentageContainer:le,engagementGraphContainer:ue,partialTable:pe},ve="reportsInteractives.interactiveEngagement",he=L.encloseNamespace(ve);function oa(a){var u,p,v,h,C,I;const{hasPermissions:P}=R(),{hasShareFlowV2:x}=O(null),[E]=T(H.ANONYMISE_USERS),g=A(),n=F(),r=i(D.currentUser()),t=i(f.interactiveMetadata(a.interactiveMetadataId)),l=i(!!t.data&&f.interactive(t.data.interactiveId)),d=i(!!r.data&&!!n&&M.aggregateEngagement(a.interactiveMetadataId,n,r.data.id)),s=i(!!r.data&&!!n&&M.individualEngagement(a.interactiveMetadataId,n,r.data.id)),{users:b,isLoading:w,usersResponse:y}=q((p=(u=s.data)==null?void 0:u.data)==null?void 0:p.map(_=>_.userId)),c=i(k.createViewKey(a.interactiveMetadataId,W.MasterObject)),o=i($.config()),V=z(a.interactiveMetadataId,n);G({title:he("pageTitle",{interactive:(v=t.data)==null?void 0:v.name})}),ne((h=t.data)==null?void 0:h.name),ie(se(t.data)),te(a.interactiveMetadataId),ae(s),me(a.interactiveMetadataId),ee(t),X([l,d,s,...y.responses,c]),J(t);const S=x&&P(K.ViewMyShares),N=!!l.data&&!!t.data&&!!d.data&&!!c.data&&!!o.data,U=!!s.data&&(!s.data.data.length||!w);return e.jsxs("div",{className:"pb-3",children:[e.jsx(de,{interactiveMetadataId:a.interactiveMetadataId,hasInsights:S}),((C=V.data)==null?void 0:C.hasWatchedInLite)===!1&&e.jsx("div",{className:"mb-3",children:e.jsx(ce,{})}),e.jsxs("div",{className:"d-flex pb-3",children:[e.jsx("div",{className:`pe-2 ${m.viewCountContainer}`,children:e.jsx(oe,{objectId:a.interactiveMetadataId,useSharerId:!0,className:"h-100"})}),e.jsx("div",{className:`px-2 ${m.engagementPercentageContainer}`,children:e.jsx(re,{objectId:a.interactiveMetadataId,useSharerId:!0,className:"h-100",layout:"vertical"})}),e.jsx("div",{className:`ps-2 ${m.engagementGraphContainer}`,children:N?e.jsx(B,{engagement:d.data,viewKey:c.data.viewKey,imageCdnUrl:o.data.imageCdnUrl,playerApiUrl:o.data.playerApiUrl},j(g)):e.jsx(Q,{})})]}),U?e.jsx(Y,{engagement:s.data.data,users:b,imageCdnUrl:(I=o.data)==null?void 0:I.imageCdnUrl,anonymiseUsers:E,enableSort:!0},j(g)):e.jsx(Z,{className:m.partialTable})]})}export{oa as InteractiveEngagementView};
2
+ //# sourceMappingURL=BRR3J_Zy.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BRR3J_Zy.chunk.js","sources":["../../src/apps/interactives/views/interactive-engagement/InteractiveEngagementView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\n\nimport { EngagementTable } from 'libs/shared/apps/analytics/components/engagement-table/EngagementTable';\nimport { useChunkedUsersResponse } from 'libs/shared/apps/analytics/hooks/UseEngagementUsers';\nimport { useFetchInteractiveResults } from 'libs/shared/apps/analytics/hooks/UseFetchInteractiveResults';\nimport { getFilterParamsKey } from 'libs/shared/apps/analytics/utils/FilterParamUtils';\nimport { MediaIdType } from 'libs/shared/enums/MediaIdType';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { PlayerRequests } from 'libs/shared/flight-requests/PlayerRequests';\nimport { UserRequests as SharedUserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoViewRequests } from 'libs/shared/flight-requests/VideoViewRequests';\nimport { useCannotConsumeError } from 'libs/shared/hooks/useCannotConsumeError';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Config, CurrentUser, Interactive, InteractiveMetadata, PlayerViewKey } from 'libs/shared/interfaces';\nimport { Engagement, IndividualEngagementResponse } from 'libs/shared/interfaces';\n\nimport { PartialTable } from 'shared/components/partial-loading/PartialTable';\nimport { PartialVideoEngagementOverlay } from 'shared/components/video-engagement-overlay/PartialVideoEngagementOverlay';\nimport { VideoEngagementOverlay } from 'shared/components/video-engagement-overlay/VideoEngagementOverlay';\nimport { ViewModelKeys } from 'shared/constants/ReportsViewModels';\nimport { useGetAppLinkFilterParams, useGetRequestFilter } from 'shared/hooks/UseGetFilterQueryParams';\nimport { useHandleVideoError } from 'shared/hooks/UseHandleVideoError';\nimport { useSetAudienceFilterCount } from 'shared/hooks/UseSetAudienceFilterCount';\nimport { useSetEngagementAudienceSuggestions } from 'shared/hooks/UseSetEngagementAudienceSuggestions';\nimport { useSetHeaderActions } from 'shared/hooks/UseSetHeaderActions';\nimport { useSetHeaderTitle } from 'shared/hooks/UseSetHeaderTitle';\nimport { useGetObjectHeaderActions } from 'shared/utils/HeaderActionUtils';\nimport { EngagementOverviewCardView } from 'shared/views/overview-cards/engagement-overview-card/EngagementOverviewCardView';\nimport { ViewCountPieChartCardView } from 'shared/views/overview-cards/view-count-pie-chart-card/ViewCountPieChartCardView';\n\nimport { InteractiveNav } from 'apps/interactives/components/interactive-nav/InteractiveNav';\nimport { OnlineDataWarning } from 'apps/interactives/components/online-data-warning/OnlineDataWarning';\nimport { useNoResultsPopup } from 'apps/interactives/hooks/UseNoResultsPopup';\n\nimport styles from './interactive-engagement.module.scss';\n\nconst namespace = 'reportsInteractives.interactiveEngagement';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InteractiveEngagementViewProps {\n interactiveMetadataId: string;\n}\n\nexport function InteractiveEngagementView(props: InteractiveEngagementViewProps): JSX.Element {\n const { hasPermissions } = usePermissions();\n const { hasShareFlowV2 } = useSettings(null);\n\n\n const [anonymiseUsers] = useViewModel<boolean>(ViewModelKeys.ANONYMISE_USERS);\n\n const filterQueryParams = useGetAppLinkFilterParams();\n const requestFilter = useGetRequestFilter();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(SharedUserRequests.currentUser());\n\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(\n InteractiveRequests.interactiveMetadata(props.interactiveMetadataId)\n );\n const interactive = Flight.useBasicFetch<Interactive>(!!interactiveMetadata.data &&\n InteractiveRequests.interactive(interactiveMetadata.data.interactiveId));\n const aggregateEngagement = Flight.useBasicFetch<Engagement>(\n !!currentUser.data && !!requestFilter &&\n VideoViewRequests.aggregateEngagement(props.interactiveMetadataId, requestFilter, currentUser.data.id)\n );\n const individualEngagement = Flight.useBasicFetch<IndividualEngagementResponse>(\n !!currentUser.data && !!requestFilter &&\n VideoViewRequests.individualEngagement(props.interactiveMetadataId, requestFilter, currentUser.data.id)\n );\n\n const { users, isLoading, usersResponse } = useChunkedUsersResponse(\n individualEngagement.data?.data?.map(d => d.userId)\n );\n\n const viewKey = Flight.useBasicFetch<PlayerViewKey>(\n PlayerRequests.createViewKey(props.interactiveMetadataId, MediaIdType.MasterObject)\n );\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const results = useFetchInteractiveResults(props.interactiveMetadataId, requestFilter);\n\n useSetPageMetadata({ title: getPhrase('pageTitle', { interactive: interactiveMetadata.data?.name }) });\n\n useSetHeaderTitle(interactiveMetadata.data?.name);\n useSetHeaderActions(useGetObjectHeaderActions(interactiveMetadata.data));\n useSetEngagementAudienceSuggestions(props.interactiveMetadataId);\n useSetAudienceFilterCount(individualEngagement);\n useNoResultsPopup(props.interactiveMetadataId);\n\n useHandleVideoError(interactiveMetadata);\n useHandleObjectError([ interactive, aggregateEngagement, individualEngagement, ...usersResponse.responses, viewKey ]);\n useCannotConsumeError(interactiveMetadata);\n\n const hasInsightsPermission = hasShareFlowV2 && hasPermissions(PermissionName.ViewMyShares);\n\n const engagementOverlayDataLoaded = !!interactive.data\n && !!interactiveMetadata.data\n && !!aggregateEngagement.data\n && !!viewKey.data\n && !!config.data;\n\n const tableDataLoaded = !!individualEngagement.data && (!individualEngagement.data.data.length || !isLoading);\n\n return (\n <div className='pb-3'>\n <InteractiveNav interactiveMetadataId={props.interactiveMetadataId} hasInsights={hasInsightsPermission} />\n {results.data?.hasWatchedInLite === false && <div className='mb-3'><OnlineDataWarning /></div>}\n <div className='d-flex pb-3'>\n <div className={`pe-2 ${styles.viewCountContainer}`}>\n <ViewCountPieChartCardView\n objectId={props.interactiveMetadataId}\n // Currently we don't have a way to support admins viewing all results so we scope views by sharer\n // to align with the results data.\n useSharerId\n className='h-100'\n />\n </div>\n <div className={`px-2 ${styles.engagementPercentageContainer}`}>\n <EngagementOverviewCardView\n objectId={props.interactiveMetadataId}\n // Currently we don't have a way to support admins viewing all results so we scope views by sharer\n // to align with the results data.\n useSharerId\n className='h-100'\n layout='vertical'\n />\n </div>\n <div className={`ps-2 ${styles.engagementGraphContainer}`}>\n {engagementOverlayDataLoaded\n ? <VideoEngagementOverlay\n // key is used to trigger player re-render\n key={getFilterParamsKey(filterQueryParams)}\n engagement={aggregateEngagement.data}\n viewKey={viewKey.data.viewKey}\n imageCdnUrl={config.data.imageCdnUrl}\n playerApiUrl={config.data.playerApiUrl}\n />\n : <PartialVideoEngagementOverlay />\n }\n </div>\n </div>\n {tableDataLoaded\n ? <EngagementTable\n key={getFilterParamsKey(filterQueryParams)}\n engagement={individualEngagement.data.data}\n users={users}\n imageCdnUrl={config.data?.imageCdnUrl}\n anonymiseUsers={anonymiseUsers}\n enableSort\n />\n : <PartialTable className={styles.partialTable} />\n }\n </div>\n );\n}"],"names":["namespace","getPhrase","LanguageService","InteractiveEngagementView","props","hasPermissions","usePermissions","hasShareFlowV2","useSettings","anonymiseUsers","useViewModel","ViewModelKeys","filterQueryParams","useGetAppLinkFilterParams","requestFilter","useGetRequestFilter","currentUser","Flight.useBasicFetch","SharedUserRequests","interactiveMetadata","InteractiveRequests","interactive","aggregateEngagement","VideoViewRequests","individualEngagement","users","isLoading","usersResponse","useChunkedUsersResponse","_b","_a","d","viewKey","PlayerRequests","MediaIdType","config","ConfigRequests","results","useFetchInteractiveResults","useSetPageMetadata","_c","useSetHeaderTitle","_d","useSetHeaderActions","useGetObjectHeaderActions","useSetEngagementAudienceSuggestions","useSetAudienceFilterCount","useNoResultsPopup","useHandleVideoError","useHandleObjectError","useCannotConsumeError","hasInsightsPermission","PermissionName","engagementOverlayDataLoaded","tableDataLoaded","jsxs","jsx","InteractiveNav","_e","OnlineDataWarning","styles","ViewCountPieChartCardView","EngagementOverviewCardView","VideoEngagementOverlay","getFilterParamsKey","PartialVideoEngagementOverlay","EngagementTable","_f","PartialTable"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{j as c,bD as s,v as y,e as T}from"./app-CQEXKRTo.js";import{a as D,H as Y,b as C}from"./DGmD-zcu.chunk.js";import{m as _,u as x}from"./CFjwQ5Sg.chunk.js";const A="_chartContainer_aj1wj_1",j="_heading_aj1wj_4",H="_partialHeading_aj1wj_9",u={chartContainer:A,heading:j,partialHeading:H};function v(){return c.jsx("div",{className:`partial-loading-background mb-2 ${u.partialHeading}`})}const p=45,m={MONTH:35,YEAR:365},g={day:"YYYY-MM-DD",month:"YYYY-MM",year:"YYYY"},O={day:"D MMM",month:"MMM",year:"YYYY"},M={enabled:!0,align:"right",verticalAlign:"top",floating:!0,y:-p},b={title:{text:null},credits:{enabled:!1},yAxis:{title:{text:null},min:0,minRange:10,minPadding:0,maxPadding:.02,endOnTick:!1},chart:{backgroundColor:"transparent",spacing:[p,0,0,4]},plotOptions:{series:{stacking:"normal"}}};function N(a){const t=s.diffBetween(a.end,a.start,"day");return t>m.YEAR?"year":t>m.MONTH?"month":"day"}function R(a,t){const r=[];let n=s.format(a.start,g[t]);do r.push(n),n=s.format(s.add(n,1,t),g[t]);while(!s.isAfter(n,a.end,t));return r}function P(a,t,r){const n=N(r),l=R(r,n),i={};a.forEach(e=>{if(!e.userType)return;const o=s.format(s.convertUTCToLocal(t(e)),g[n]);i[e.userType]=i[e.userType]??{},i[e.userType][o]=i[e.userType][o]??0,i[e.userType][o]+=e.count});const d=Object.keys(i),f=d.length?y.sortBy(d.map(e=>({name:D(e),type:"column",data:l.map(o=>i[e][o]??0)})),"name"):[{type:"column",data:l.map(()=>0)}],h={...M};return d.length||(h.enabled=!1),{categories:l.map(e=>s.format(e,O[n])),legendOptions:h,seriesData:_(f)}}function E(a,t,r){const n=P(a,t,r);return{...b,xAxis:{categories:n.categories},legend:n.legendOptions,series:n.seriesData}}function G(a){const t=T();return x(),c.jsxs("div",{className:"position-relative h-100",children:[c.jsx("h3",{className:`h6 ${u.heading}`,children:a.title}),!!t&&c.jsx(Y,{highcharts:C,options:E(a.events,a.getEventDate,t),containerProps:{className:`${u.chartContainer} position-absolute w-100 h-100`}})]})}export{v as P,G as U};
2
+ //# sourceMappingURL=BUJR0SBs.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BUJR0SBs.chunk.js","sources":["../../src/shared/components/user-activity-bar-chart/PartialUserActivityBarChart.tsx","../../src/shared/components/user-activity-bar-chart/UserActivityBarChartConstants.ts","../../src/shared/components/user-activity-bar-chart/UserActivityBarChartUtils.ts","../../src/shared/components/user-activity-bar-chart/UserActivityBarChart.tsx"],"sourcesContent":["import React from 'react';\n\nimport styles from './user-activity-bar-chart.module.scss';\n\nexport function PartialUserActivityBarChart(): JSX.Element {\n return (\n <div className={`partial-loading-background mb-2 ${styles.partialHeading}`} />\n );\n}","import Highcharts from 'highcharts';\n\nconst CHART_PADDING_TOP = 45;\n\nexport const GroupByThresholds = {\n MONTH: 35,\n YEAR: 365\n};\n\nexport const DateFormats = {\n day: 'YYYY-MM-DD',\n month: 'YYYY-MM',\n year: 'YYYY'\n};\n\nexport const DisplayFormats = {\n day: 'D MMM',\n month: 'MMM',\n year: 'YYYY'\n};\n\nexport const DEFAULT_LEGEND_OPTIONS: Highcharts.LegendOptions = {\n enabled: true,\n align: 'right',\n verticalAlign: 'top',\n floating: true,\n y: -CHART_PADDING_TOP\n};\n\nexport const STATIC_CHART_OPTIONS: Highcharts.Options = {\n title: {\n text: null\n },\n credits: {\n enabled: false\n },\n yAxis: {\n title: {\n text: null\n },\n min: 0,\n minRange: 10,\n minPadding: 0,\n maxPadding: 0.02,\n endOnTick: false\n },\n chart: {\n backgroundColor: 'transparent',\n spacing: [ CHART_PADDING_TOP, 0, 0, 4 ]\n },\n plotOptions: {\n series: {\n stacking: 'normal'\n }\n }\n};","import Highcharts from 'highcharts';\n\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { BaseAnalyticsEvent } from 'libs/shared/apps/analytics/interfaces/BaseAnalyticsEvent';\nimport { mixinSeriesColours } from 'libs/shared/apps/analytics/utils/ChartColourUtils';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { AnalyticsRequestFilter } from 'libs/shared/interfaces';\n\nimport { mapUserTypeToChartLabel } from 'shared/utils/UserUtils';\n\nimport { DateFormats, DEFAULT_LEGEND_OPTIONS, DisplayFormats, GroupByThresholds, STATIC_CHART_OPTIONS } from './UserActivityBarChartConstants';\n\ntype GroupBy = 'day' | 'month' | 'year';\n\ninterface ChartData {\n categories: string[];\n legendOptions: Highcharts.LegendOptions;\n seriesData: Highcharts.SeriesColumnOptions[];\n}\n\nfunction getGroupBy(requestFilter: AnalyticsRequestFilter): GroupBy {\n const range = DateHelper.diffBetween(requestFilter.end, requestFilter.start, 'day');\n\n if (range > GroupByThresholds.YEAR)\n return 'year';\n\n if (range > GroupByThresholds.MONTH)\n return 'month';\n\n return 'day';\n}\n\nfunction getFullDateRange(requestFilter: AnalyticsRequestFilter, groupBy: GroupBy): string[] {\n const range: string[] = [];\n\n let currentDate = DateHelper.format(requestFilter.start, DateFormats[groupBy]);\n\n do {\n range.push(currentDate);\n currentDate = DateHelper.format(DateHelper.add(currentDate, 1, groupBy), DateFormats[groupBy]);\n } while (!DateHelper.isAfter(currentDate, requestFilter.end, groupBy));\n\n return range;\n}\n\nfunction getChartData<T extends BaseAnalyticsEvent>(\n events: T[],\n getEventDate: (ev: T) => string,\n requestFilter: AnalyticsRequestFilter\n): ChartData {\n const groupBy = getGroupBy(requestFilter);\n const fullDateRange = getFullDateRange(requestFilter, groupBy);\n\n /**\n * e.g. { 'staff': { '2021-01-01': 2, '2021-01-02': 4 }, 'learner': { '2021-01-01': 10, '2021-01-04': 40 }}\n */\n const grouped: HashObject<HashObject<number>> = {};\n\n events.forEach(ev => {\n if (!ev.userType)\n return;\n\n const eventDate = DateHelper.format(DateHelper.convertUTCToLocal(getEventDate(ev)), DateFormats[groupBy]);\n\n grouped[ev.userType] = grouped[ev.userType] ?? {};\n grouped[ev.userType][eventDate] = grouped[ev.userType][eventDate] ?? 0;\n grouped[ev.userType][eventDate] += ev.count;\n });\n\n const roles = Object.keys(grouped) as UserGroup[];\n\n const seriesData: Highcharts.SeriesColumnOptions[] = roles.length\n ? ArrayHelper.sortBy(roles.map(r => ({\n name: mapUserTypeToChartLabel(r),\n type: 'column',\n data: fullDateRange.map(d => grouped[r][d] ?? 0)\n })), 'name')\n : [{\n type: 'column',\n data: fullDateRange.map(() => 0)\n }];\n\n const legendOptions = { ...DEFAULT_LEGEND_OPTIONS };\n\n if (!roles.length)\n legendOptions.enabled = false;\n\n return {\n categories: fullDateRange.map(d => DateHelper.format(d, DisplayFormats[groupBy])),\n legendOptions,\n seriesData: mixinSeriesColours(seriesData)\n };\n}\n\nexport function getChartOptions<T extends BaseAnalyticsEvent>(\n events: T[],\n getEventDate: (ev: T) => string,\n requestFilter: AnalyticsRequestFilter\n): Highcharts.Options {\n const data = getChartData(events, getEventDate, requestFilter);\n\n return {\n ...STATIC_CHART_OPTIONS,\n xAxis: {\n categories: data.categories\n },\n legend: data.legendOptions,\n series: data.seriesData\n };\n}","import React from 'react';\nimport Highcharts from 'highcharts';\nimport HighchartsReact from 'highcharts-react-official';\n\nimport { BaseAnalyticsEvent } from 'libs/shared/apps/analytics/interfaces/BaseAnalyticsEvent';\n\nimport { useGetRequestFilter } from 'shared/hooks/UseGetFilterQueryParams';\nimport { useListenToNavState } from 'shared/hooks/UseListenToNavState';\n\nimport { getChartOptions } from './UserActivityBarChartUtils';\n\nimport styles from './user-activity-bar-chart.module.scss';\n\ninterface UserActivityBarChartProps<T extends BaseAnalyticsEvent> {\n events: T[];\n getEventDate: (ev: T) => string;\n title: string;\n}\n\nexport function UserActivityBarChart<T extends BaseAnalyticsEvent>(props: UserActivityBarChartProps<T>): JSX.Element {\n const requestFilter = useGetRequestFilter();\n useListenToNavState();\n\n return (\n <div className='position-relative h-100'>\n <h3 className={`h6 ${styles.heading}`}>{props.title}</h3>\n {!!requestFilter &&\n <HighchartsReact\n highcharts={Highcharts}\n options={getChartOptions(props.events, props.getEventDate, requestFilter)}\n containerProps={{\n className: `${styles.chartContainer} position-absolute w-100 h-100`\n }}\n />\n }\n </div>\n );\n}"],"names":["PartialUserActivityBarChart","styles","CHART_PADDING_TOP","GroupByThresholds","DateFormats","DisplayFormats","DEFAULT_LEGEND_OPTIONS","STATIC_CHART_OPTIONS","getGroupBy","requestFilter","range","DateHelper","getFullDateRange","groupBy","currentDate","getChartData","events","getEventDate","fullDateRange","grouped","ev","eventDate","roles","seriesData","ArrayHelper","r","mapUserTypeToChartLabel","d","legendOptions","mixinSeriesColours","getChartOptions","data","UserActivityBarChart","props","useGetRequestFilter","useListenToNavState","jsxs","jsx","HighchartsReact","Highcharts"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{d as i,j as n,A as s,g as a,L as r}from"./app-CQEXKRTo.js";import{S as p}from"./B-0CRp8U.chunk.js";const c="reportsVideos.customerVideosNav",t=r.encloseNamespace(c);function m(e){return[{label:t("overview"),appLink:{application:a.VIDEOS,action:s.Videos.HOME,params:e}},{label:t("views"),appLink:{application:a.VIDEOS,action:s.Videos.VIEWS,params:e}}]}function v(){const e=i(),o=m(e);return n.jsx(p,{items:o})}export{v as C};
2
+ //# sourceMappingURL=BY58fjpA.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BY58fjpA.chunk.js","sources":["../../src/apps/videos/components/customer-videos-nav/CustomerVideosNav.tsx"],"sourcesContent":["import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { FilterQueryParams } from 'libs/shared/apps/analytics/interfaces/FilterQueryParams';\n\nimport { SubNav, SubNavItem } from 'shared/components/sub-nav/SubNav';\nimport { Actions } from 'shared/constants/ReportsActions';\nimport { AppChannels } from 'shared/constants/ReportsRadioChannels';\nimport { useGetAppLinkFilterParams } from 'shared/hooks/UseGetFilterQueryParams';\n\nconst namespace = 'reportsVideos.customerVideosNav';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getNavItems(params: FilterQueryParams): SubNavItem[] {\n return [\n {\n label: getPhrase('overview'),\n appLink: { application: AppChannels.VIDEOS, action: Actions.Videos.HOME, params }\n },\n {\n label: getPhrase('views'),\n appLink: { application: AppChannels.VIDEOS, action: Actions.Videos.VIEWS, params }\n }\n ];\n}\n\nexport function CustomerVideosNav(): JSX.Element {\n const filterQueryParams = useGetAppLinkFilterParams();\n\n const navItems = getNavItems(filterQueryParams);\n\n return (\n <SubNav items={navItems} />\n );\n}"],"names":["namespace","getPhrase","LanguageService","getNavItems","params","AppChannels","Actions","CustomerVideosNav","filterQueryParams","useGetAppLinkFilterParams","navItems","jsx","SubNav"],"mappings":"0GAWA,MAAMA,EAAY,kCACZC,EAAYC,EAAgB,iBAAiBF,CAAS,EAE5D,SAASG,EAAYC,EAAyC,CAC5D,MAAO,CACL,CACE,MAAOH,EAAU,UAAU,EAC3B,QAAS,CAAE,YAAaI,EAAY,OAAQ,OAAQC,EAAQ,OAAO,KAAM,OAAAF,CAAA,CAAO,EAElF,CACE,MAAOH,EAAU,OAAO,EACxB,QAAS,CAAE,YAAaI,EAAY,OAAQ,OAAQC,EAAQ,OAAO,MAAO,OAAAF,CAAA,CAAO,CACnF,CAEJ,CAEO,SAASG,GAAiC,CAC/C,MAAMC,EAAoBC,EAAA,EAEpBC,EAAWP,EAAYK,CAAiB,EAE9C,OACEG,EAAAA,IAACC,EAAA,CAAO,MAAOF,CAAA,CAAU,CAE7B"}
@@ -0,0 +1,2 @@
1
+ import{j as e,h as v,a6 as c}from"./app-CQEXKRTo.js";import{a as C}from"./Bfbk7XQF.chunk.js";const _=["bg-green","bg-cyan","bg-teal","bg-blue","bg-indigo","bg-purple"],j=["bg-pink","bg-orange",..._];function k(a){return e.jsx("svg",{...a,children:e.jsx("path",{fill:"currentColor",fillRule:"evenodd",d:"M7.76 6.078a.5.5 0 0 0-.76.427v11a.5.5 0 0 0 .76.426l9.003-5.5a.5.5 0 0 0 0-.853z",clipRule:"evenodd"})})}function d(a){return e.jsx("svg",{...a,viewBox:"0 0 24 21",children:e.jsx("path",{d:"M22.5 1A1.5 1.5 0 0 1 24 2.5v18a1.5 1.5 0 0 1-1.5 1.5h-21A1.5 1.5 0 0 1 0 20.5v-18A1.5 1.5 0 0 1 1.5 1zm0 1.5h-21v18h21zm-8.21 4.092 5.84 9a.75.75 0 0 1-1.26.816L13.638 8.34l-2.523 3.591a.75.75 0 0 1-1.144.1l-.889-.89L5.1 16.45a.75.75 0 0 1-1.2-.9l4.5-6a.75.75 0 0 1 1.13-.08l.87.869 2.648-3.77a.75.75 0 0 1 1.243.023M6 4.75a2.25 2.25 0 1 1 0 4.5 2.25 2.25 0 0 1 0-4.5m0 1.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5",fill:"currentColor"})})}function f(a){return e.jsx("svg",{...a,children:e.jsx("path",{fill:"currentColor",d:"M20.283 4C21.229 4 22 4.745 22 5.66v8.74c0 .726-.478 1.338-1.151 1.565l.088-10.22a.657.657 0 0 0-.664-.66H6.351A1.71 1.71 0 0 1 7.951 4zm-2.059 1.933c.947 0 1.718.745 1.718 1.65v8.74c.01.726-.479 1.339-1.142 1.565l.088-10.24a.647.647 0 0 0-.664-.64H4.293a1.7 1.7 0 0 1 1.6-1.075zM16.05 7.95c.946 0 1.707.744 1.707 1.659v8.74c0 .915-.77 1.65-1.707 1.65H3.707C2.761 20 2 19.255 2 18.35V9.61c0-.915.77-1.66 1.707-1.66zm-.01 1.084H3.717a.647.647 0 0 0-.663.64v8.609c0 .358.292.641.663.641H16.03c.371 0 .664-.283.664-.641V9.676c.01-.358-.283-.641-.654-.641M8.546 12.39v3.178c0 .17.205.264.342.17l2.254-1.594c.117-.085.117-.255 0-.33l-2.264-1.593c-.137-.095-.332 0-.332.17"})})}function F(a,t){return t[a.charCodeAt(0)%t.length]}const g="_baseFallbackContainer_14tjv_1",m="_svgFallbackContainer_14tjv_1",S="_subjectFallbackContainer_14tjv_9",h="_subjectFallbackContainerSmall_14tjv_18",x="_subjectFallbackContainerLarge_14tjv_21",$="_seriesItemFallback_14tjv_24",z="_playlistItemFallback_14tjv_24",L="_playlistFallback_14tjv_28",A="_posterFallback_14tjv_29",M="_subjectFallback_14tjv_9",N="_fallbackThumbnailImage_14tjv_47",P="_videoFallback_14tjv_55",B="_folderFallback_14tjv_56",l={baseFallbackContainer:g,svgFallbackContainer:m,subjectFallbackContainer:S,subjectFallbackContainerSmall:h,subjectFallbackContainerLarge:x,seriesItemFallback:$,playlistItemFallback:z,playlistFallback:L,posterFallback:A,subjectFallback:M,fallbackThumbnailImage:N,videoFallback:P,folderFallback:B};var E=(a=>(a[a.Playlist=0]="Playlist",a[a.PlaylistThumbnail=1]="PlaylistThumbnail",a[a.Series=2]="Series",a[a.SeriesThumbnail=3]="SeriesThumbnail",a[a.Subject=4]="Subject",a[a.TallSubject=5]="TallSubject",a[a.Video=6]="Video",a[a.Folder=7]="Folder",a))(E||{});function H(a,t,n){if(t===4){const s=n===0?l.subjectFallbackContainerLarge:l.subjectFallbackContainerSmall;return`${l.subjectFallbackContainer} ${s}`}return a===0?t===3||t===1?`${l.svgFallbackContainer} rounded-3`:l.svgFallbackContainer:l.baseFallbackContainer}function O(a){return a===3?l.seriesItemFallback:a===1?l.playlistItemFallback:a===0?l.playlistFallback:a===2||a===5?l.posterFallback:a===4?`${l.subjectFallback} svg-container d-inline-block`:""}function R(a){return a===3||a===1?k:a===0?d:a===2?f:a===4||a===5?C:null}function V(a){return a===4?c.ExtraLarge:c.Standard}G.defaultProps={mediaType:0,containerClassSize:0};function G(a){const{type:t,mediaType:n,extraClasses:s,containerClassSize:o}=a;if(t===6)return e.jsx("div",{className:`${l.videoFallback} ${a.extraClasses} bg-light-blue`});if(t===7)return e.jsx("div",{className:`${l.folderFallback} ${a.extraClasses} ${F(a.name,j)}`});const b=O(t),r=R(t),u=V(t);let i=`${H(n,t,o)}`;return s&&(i+=` ${a.extraClasses}`),e.jsx("div",{className:i,children:n===0?e.jsx(v,{svg:r,className:`${b} ${a.svgContainerClassName??""}`,tagName:"div",size:u}):e.jsx("div",{className:l.fallbackThumbnailImage,style:{backgroundImage:`url('${r}')`}})})}export{j as B,G as I,k as P,f as S,E as a,F as g};
2
+ //# sourceMappingURL=BZV5U3ST.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BZV5U3ST.chunk.js","sources":["../../../../libs/shared/src/constants/ColourClassNames.ts","../../../../libs/shared/src/images/svg/actions/PlaySvg.tsx","../../../../libs/shared/src/images/svg/objects/ImageSvg.tsx","../../../../libs/shared/src/images/svg/objects/SeriesSvg.tsx","../../../../libs/shared/src/utils/getBgColorClass.ts","../../../../libs/shared/src/components/image/ImageFallback.tsx"],"sourcesContent":["/**\n * Use this instead of the list below if you need to render the clickview logo\n * on the background you're rendering.\n */\nexport const LOGO_SAFE_BG_CLASS_NAMES = [\n 'bg-green',\n 'bg-cyan',\n 'bg-teal',\n 'bg-blue',\n 'bg-indigo',\n 'bg-purple'\n];\n\nexport const BG_COLOUR_CLASS_NAMES = [\n 'bg-pink',\n 'bg-orange',\n ...LOGO_SAFE_BG_CLASS_NAMES\n];","import React from 'react';\n\nexport function PlaySvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n fillRule='evenodd'\n d='M7.76 6.078a.5.5 0 0 0-.76.427v11a.5.5 0 0 0 .76.426l9.003-5.5a.5.5 0 0 0 0-.853z'\n clipRule='evenodd'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function ImageSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props} viewBox='0 0 24 21'>\n <path\n d='M22.5 1A1.5 1.5 0 0 1 24 2.5v18a1.5 1.5 0 0 1-1.5 1.5h-21A1.5 1.5 0 0 1 0 20.5v-18A1.5 1.5 0 0 1 1.5 1zm0 1.5h-21v18h21zm-8.21 4.092 5.84 9a.75.75 0 0 1-1.26.816L13.638 8.34l-2.523 3.591a.75.75 0 0 1-1.144.1l-.889-.89L5.1 16.45a.75.75 0 0 1-1.2-.9l4.5-6a.75.75 0 0 1 1.13-.08l.87.869 2.648-3.77a.75.75 0 0 1 1.243.023M6 4.75a2.25 2.25 0 1 1 0 4.5 2.25 2.25 0 0 1 0-4.5m0 1.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function SeriesSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M20.283 4C21.229 4 22 4.745 22 5.66v8.74c0 .726-.478 1.338-1.151 1.565l.088-10.22a.657.657 0 0 0-.664-.66H6.351A1.71 1.71 0 0 1 7.951 4zm-2.059 1.933c.947 0 1.718.745 1.718 1.65v8.74c.01.726-.479 1.339-1.142 1.565l.088-10.24a.647.647 0 0 0-.664-.64H4.293a1.7 1.7 0 0 1 1.6-1.075zM16.05 7.95c.946 0 1.707.744 1.707 1.659v8.74c0 .915-.77 1.65-1.707 1.65H3.707C2.761 20 2 19.255 2 18.35V9.61c0-.915.77-1.66 1.707-1.66zm-.01 1.084H3.717a.647.647 0 0 0-.663.64v8.609c0 .358.292.641.663.641H16.03c.371 0 .664-.283.664-.641V9.676c.01-.358-.283-.641-.654-.641M8.546 12.39v3.178c0 .17.205.264.342.17l2.254-1.594c.117-.085.117-.255 0-.33l-2.264-1.593c-.137-.095-.332 0-.332.17'\n />\n </svg>\n );\n}\n","export function getBgColorClass(name: string, classNames: string[]): string {\n return classNames[name.charCodeAt(0) % classNames.length];\n}\n\nexport function getDeterministicBgColorClass(name: string, classNames: string[]): string {\n const sum = name\n .split('')\n .reduce(\n (acc, char) => acc + char.charCodeAt(0),\n 0\n );\n \n return classNames[sum % classNames.length];\n}","import * as React from 'react';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { BG_COLOUR_CLASS_NAMES } from 'libs/shared/constants/ColourClassNames';\nimport { PlaySvg } from 'libs/shared/images/svg/actions/PlaySvg';\nimport { FileImgSvg } from 'libs/shared/images/svg/objects/FileImgSvg';\nimport { ImageSvg } from 'libs/shared/images/svg/objects/ImageSvg';\nimport { SeriesSvg } from 'libs/shared/images/svg/objects/SeriesSvg';\nimport { getBgColorClass } from 'libs/shared/utils/getBgColorClass';\n\nimport styles from './image-fallback.module.scss';\n\nexport enum ImageFallbackType {\n Playlist,\n PlaylistThumbnail,\n Series,\n SeriesThumbnail,\n Subject,\n TallSubject,\n Video,\n Folder\n}\n\nexport enum ImageFallbackMediaType {\n Svg,\n Image\n}\n\nexport enum ContainerClassSize {\n Large,\n Small\n}\n\nfunction getContainerClass(\n type: ImageFallbackMediaType,\n objectType: ImageFallbackType,\n containerClassSize: ContainerClassSize\n): string {\n if (objectType === ImageFallbackType.Subject) {\n const containerSizeClass = containerClassSize === ContainerClassSize.Large\n ? styles.subjectFallbackContainerLarge\n : styles.subjectFallbackContainerSmall;\n\n return `${styles.subjectFallbackContainer} ${containerSizeClass}`;\n }\n\n if (type === ImageFallbackMediaType.Svg) {\n if (objectType === ImageFallbackType.SeriesThumbnail || objectType === ImageFallbackType.PlaylistThumbnail)\n return `${styles.svgFallbackContainer} rounded-3`;\n \n return styles.svgFallbackContainer;\n }\n\n return styles.baseFallbackContainer;\n}\n\nfunction getClassByType(type: ImageFallbackType): string {\n if (type === ImageFallbackType.SeriesThumbnail)\n return styles.seriesItemFallback;\n\n if (type === ImageFallbackType.PlaylistThumbnail)\n return styles.playlistItemFallback;\n\n if (type === ImageFallbackType.Playlist)\n return styles.playlistFallback;\n\n if (type === ImageFallbackType.Series || type === ImageFallbackType.TallSubject)\n return styles.posterFallback;\n\n if (type === ImageFallbackType.Subject)\n return `${styles.subjectFallback} svg-container d-inline-block`;\n\n return '';\n}\n\nfunction getMedia(type: ImageFallbackType) {\n if (type === ImageFallbackType.SeriesThumbnail || type === ImageFallbackType.PlaylistThumbnail)\n return PlaySvg;\n\n if (type === ImageFallbackType.Playlist)\n return ImageSvg;\n\n if (type === ImageFallbackType.Series)\n return SeriesSvg;\n\n if (type === ImageFallbackType.Subject || type === ImageFallbackType.TallSubject)\n return FileImgSvg;\n\n return null;\n}\n\nfunction getSize(type: ImageFallbackType): SvgContainerSize {\n if (type === ImageFallbackType.Subject)\n return SvgContainerSize.ExtraLarge;\n\n return SvgContainerSize.Standard;\n}\n\ninterface ImageFallbackProps {\n type: ImageFallbackType;\n mediaType?: ImageFallbackMediaType;\n extraClasses?: string;\n svgContainerClassName?: string;\n name?: string;\n containerClassSize?: ContainerClassSize\n}\n\nImageFallback.defaultProps = {\n mediaType: ImageFallbackMediaType.Svg,\n containerClassSize: ContainerClassSize.Large\n};\n\nexport function ImageFallback(props: ImageFallbackProps): JSX.Element {\n const { type, mediaType, extraClasses, containerClassSize } = props;\n\n if (type === ImageFallbackType.Video)\n return <div className={`${styles.videoFallback} ${props.extraClasses} bg-light-blue`} />;\n\n if (type === ImageFallbackType.Folder)\n return <div className={`${styles.folderFallback} ${props.extraClasses} ${getBgColorClass(props.name, BG_COLOUR_CLASS_NAMES)}`} />;\n\n const typeClass = getClassByType(type);\n const media = getMedia(type);\n const size = getSize(type);\n\n let className = `${getContainerClass(mediaType, type, containerClassSize)}`;\n\n if (extraClasses)\n className += ` ${props.extraClasses}`;\n\n return (\n <div className={className}>\n {mediaType === ImageFallbackMediaType.Svg\n ? (\n <SvgContainer\n svg={media}\n className={`${typeClass} ${props.svgContainerClassName ?? ''}`}\n tagName='div'\n size={size}\n />\n ) : (\n <div className={styles.fallbackThumbnailImage} style={{ backgroundImage: `url('${media}')` }} />\n )\n }\n </div>\n );\n}"],"names":["LOGO_SAFE_BG_CLASS_NAMES","BG_COLOUR_CLASS_NAMES","PlaySvg","props","jsx","ImageSvg","SeriesSvg","getBgColorClass","name","classNames","ImageFallbackType","getContainerClass","type","objectType","containerClassSize","containerSizeClass","styles","getClassByType","getMedia","FileImgSvg","getSize","SvgContainerSize","ImageFallback","mediaType","extraClasses","typeClass","media","size","className","SvgContainer"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{j as e,T as o,e as g,u as v,S as b,h as f,N as S,E as w,d as y,L as N,i as j,A as m,g as p,k as V,I as k,l as T,m as C,n as _,a as I}from"./app-CQEXKRTo.js";import{T as L}from"./DDQPxnFm.chunk.js";import{u as A}from"./CvkQEqoz.chunk.js";import{S as E,a as F}from"./jNUTSO6y.chunk.js";import{T as O}from"./BADbeO_o.chunk.js";import{S as D}from"./CbrfSCTb.chunk.js";import{u as P}from"./H-GxGp0N.chunk.js";import{V as q,T as $,a as R}from"./BEjQ8YiC.chunk.js";import{u as M}from"./C_TaaD_7.chunk.js";import{V as H}from"./B-M_POW7.chunk.js";import"./sFV5nxD4.chunk.js";import"./pW31gVxo.chunk.js";import"./DGmD-zcu.chunk.js";import"./Dm6PeyeG.chunk.js";import"./CBjj_ih-.chunk.js";import"./BZV5U3ST.chunk.js";import"./Bfbk7XQF.chunk.js";import"./rO0zPagv.chunk.js";import"./BGYUqEPH.chunk.js";import"./DZWKI51S.chunk.js";import"./sBa2VMAv.chunk.js";import"./EpoqEdEt.chunk.js";import"./z0Is6h8v.chunk.js";import"./9-ob4xwW.chunk.js";import"./BzFtDyVZ.chunk.js";const z="reportsDashboard.topSearchesCardEmptyStateV2";function B(){return e.jsx("div",{className:"d-flex align-items-center justify-content-center text-center h-100",children:e.jsx(o,{namespace:z,phrase:"message"})})}function G(){return e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"partial-loading-background w-50 mb-3",children:" "}),e.jsx("div",{className:"partial-loading-background mb-3 w-25",children:" "}),e.jsx("div",{className:"partial-loading-background mb-3 w-33",children:" "}),e.jsx("div",{className:"partial-loading-background mb-3 w-33",children:" "}),e.jsx("div",{className:"partial-loading-background mb-3 w-50",children:" "}),e.jsx("div",{className:"partial-loading-background mb-3 w-25",children:" "}),e.jsx("div",{className:"partial-loading-background mb-3 w-100",children:" "}),e.jsx("div",{className:"partial-loading-background mb-3 w-25",children:" "}),e.jsx("div",{className:"partial-loading-background mb-3 w-75",children:" "}),e.jsx("div",{className:"partial-loading-background mb-3 w-33",children:" "}),e.jsx("div",{className:"partial-loading-background mb-3 w-100",children:" "})]})}const U="reportsDashboard.topSearchesCardV2";function Q(){const i=g(),s=v(D.topSearches(i)),n=P(w.getPrimarySearchUrl);return e.jsx("div",{className:"d-flex flex-column h-100 bg-white overflow-hidden rounded pt-3 px-3",children:s.data?e.jsxs(e.Fragment,{children:[e.jsx("h2",{className:"h6 mb-3",children:e.jsx(o,{namespace:U,phrase:"topSearches"})}),s.data.length?e.jsx(e.Fragment,{children:e.jsx(b,{className:"position-relative",children:e.jsx("ol",{className:"position-absolute w-100 ps-4",children:s.data.map((t,d)=>e.jsx("li",{className:"mb-3",children:e.jsxs("a",{href:n(t.query),target:"_blank",className:"position-relative d-flex justify-content-between align-items-center pe-5",children:[e.jsx("span",{children:t.query}),e.jsx("div",{className:"position-absolute w-100 text-end opacity-0 opacity-100-hover pe-3",children:e.jsx(f,{svg:S})})]})},d))})})}):e.jsx(B,{})]}):e.jsx(G,{})})}const W="reportsDashboard.topStreamsCardEmptyState";function J(){return e.jsx("div",{className:"d-flex align-items-center justify-content-center text-center h-100",children:e.jsx(o,{namespace:W,phrase:"message"})})}function K(){return e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"partial-loading-background w-50 mb-3",children:" "}),e.jsx("div",{className:"position-relative",children:e.jsx("ul",{className:"list-unstyled position-absolute top-0 start-0 w-100 h-100",children:Array(10).fill(null).map((i,s)=>e.jsx("li",{className:"mb-3",children:e.jsxs("div",{className:"row g-0",children:[e.jsx("div",{className:"col-5",children:e.jsx("div",{className:"ratio ratio-16x9 rounded partial-loading-background"})}),e.jsx("div",{className:"col-7 d-flex align-items-center",children:e.jsxs("div",{className:"mx-2 w-100",children:[e.jsx("div",{className:"w-100 partial-loading-background mb-1",children:" "}),e.jsx("div",{className:"w-75 partial-loading-background",children:" "})]})})]})},s))})})]})}const h="reportsDashboard.topStreamsCard",X=N.encloseNamespace(h),Y=10;function Z(){var x,u;const i=y(),s=g(),n=v(H.topStreams(Y,s)),t=M(((x=n.data)==null?void 0:x.map(c=>c.objectId))??[],C.videos),d=n.hasCompleted&&!t.isFetching;return e.jsx("div",{className:"d-flex flex-column h-100 bg-white overflow-hidden px-3 rounded pt-3",children:d?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"d-flex justify-content-between",children:[e.jsx("h2",{className:"h6 mb-3",children:X("topVideos")}),e.jsx(j,{appLink:{application:p.VIDEOS,action:m.Videos.TOP_VIDEOS},className:"text-info",children:e.jsx(o,{namespace:h,phrase:"seeAll"})})]}),(u=t.itemsArr)!=null&&u.length?e.jsx(b,{className:"position-relative",children:e.jsx("div",{className:"position-absolute w-100",children:e.jsx("ul",{className:"list-unstyled",children:n.data.map(c=>{const a=t.items[c.objectId];if(a)return e.jsx("li",{className:"mb-3",children:e.jsx(j,{appLink:V(a,i),children:e.jsxs("div",{className:"row g-0",children:[e.jsx("div",{className:"col-5",children:e.jsx(q,{video:a,imageOptions:{size:k.Small},textPosition:$.Independent,type:"cosmetic",hideMask:!0,size:"sm"})}),e.jsx("div",{className:"col-7",children:e.jsxs("div",{className:"d-flex flex-column mx-2",children:[T.isVideoType(a)&&e.jsx(R,{type:"series",video:a,analyticsOptions:null,className:"d-inline clamp-1"}),e.jsx("span",{className:"clamp-2 fw-medium",children:a.name}),e.jsx(o,{namespace:h,phrase:"views",options:{smartCount:c.count}})]})})]})})},a.id)})})})}):e.jsx(J,{})]}):e.jsx(K,{})})}const ee="_column1_1303k_1",se="_column2_1303k_4",ae="_column3_1303k_7",ie="_videoViews_1303k_14",te="_topClassifications_1303k_20",l={column1:ee,column2:se,column3:ae,videoViews:ie,topClassifications:te},re=10,ne="reportsDashboard.schoolAnalyticsDashboard",r=N.encloseNamespace(ne);function Ae(){const i=_(),s=r(i?"tertiaryDashboard":"dashboard");return I({title:s}),A(s),e.jsxs("div",{className:"d-flex",children:[e.jsxs("div",{className:`d-flex flex-column gap-3 ${l.column1}`,children:[e.jsx("div",{className:"h-50",children:e.jsx(E,{type:"year_group",appLink:{application:p.VIDEOS,action:m.Videos.HOME},appLinkText:r("seeOverview")})}),e.jsx("div",{className:"h-50",children:e.jsx(Q,{})})]}),e.jsx("div",{className:`${l.column2} px-3`,children:e.jsx(Z,{})}),e.jsxs("div",{className:`d-flex flex-column gap-3 ${l.column3}`,children:[e.jsx("div",{className:l.videoViews,children:e.jsx(F,{type:"user_type"})}),e.jsx("div",{className:l.topClassifications,children:e.jsx(O,{type:L.RootTopic,heading:r("subjects"),appLink:{application:p.VIDEOS,action:m.Videos.HOME},appLinkText:r("seeOverview"),emptyStateText:r("emptySubjects"),limit:re})})]})]})}export{Ae as SchoolAnalyticsDashboardView};
2
+ //# sourceMappingURL=BfaprYhg.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BfaprYhg.chunk.js","sources":["../../src/apps/dashboard/views/overview-cards/top-searches-v2/empty-state/TopSearchesCardEmptyStateV2.tsx","../../src/apps/dashboard/views/overview-cards/top-searches-v2/partial-loading/PartialTopSearchesCardV2.tsx","../../src/apps/dashboard/views/overview-cards/top-searches-v2/TopSearchesCardV2View.tsx","../../src/apps/dashboard/views/overview-cards/top-streams/empty-state/TopStreamsCardEmptyState.tsx","../../src/apps/dashboard/views/overview-cards/top-streams/partial-loading/PartialTopStreamsCard.tsx","../../src/apps/dashboard/views/overview-cards/top-streams/TopStreamsCardView.tsx","../../src/apps/dashboard/views/school-analytics-dashboard/SchoolAnalyticsDashboardView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'reportsDashboard.topSearchesCardEmptyStateV2';\n\nexport function TopSearchesCardEmptyStateV2() {\n return (\n <div className='d-flex align-items-center justify-content-center text-center h-100'>\n <Text namespace={namespace} phrase='message' />\n </div>\n );\n}","import React from 'react';\n\nexport function PartialTopSearchesCardV2() {\n return (\n <>\n <div className='partial-loading-background w-50 mb-3'>&nbsp;</div>\n\n <div className='partial-loading-background mb-3 w-25'>&nbsp;</div>\n <div className='partial-loading-background mb-3 w-33'>&nbsp;</div>\n <div className='partial-loading-background mb-3 w-33'>&nbsp;</div>\n <div className='partial-loading-background mb-3 w-50'>&nbsp;</div>\n <div className='partial-loading-background mb-3 w-25'>&nbsp;</div>\n <div className='partial-loading-background mb-3 w-100'>&nbsp;</div>\n <div className='partial-loading-background mb-3 w-25'>&nbsp;</div>\n <div className='partial-loading-background mb-3 w-75'>&nbsp;</div>\n <div className='partial-loading-background mb-3 w-33'>&nbsp;</div>\n <div className='partial-loading-background mb-3 w-100'>&nbsp;</div>\n </>\n );\n}","import React from 'react';\nimport Scrollbars from 'react-custom-scrollbars-2';\n\nimport { Flight } from 'libs/common/react/index';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { NewWindowSvg } from 'libs/shared/images/svg/actions/NewWindowSvg';\n\nimport { SearchRequests } from 'shared/flight-requests/SearchRequests';\nimport { useGetExternalUrl } from 'shared/hooks/UseGetExternalUrl';\nimport { useGetRequestFilter } from 'shared/hooks/UseGetFilterQueryParams';\nimport { TopSearch } from 'shared/interfaces';\nimport { ExternalRouteHelper } from 'shared/utils/ExternalRouteHelper';\n\nimport { TopSearchesCardEmptyStateV2 } from 'apps/dashboard/views/overview-cards/top-searches-v2/empty-state/TopSearchesCardEmptyStateV2';\nimport { PartialTopSearchesCardV2 } from 'apps/dashboard/views/overview-cards/top-searches-v2/partial-loading/PartialTopSearchesCardV2';\n\nconst namespace = 'reportsDashboard.topSearchesCardV2';\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function TopSearchesCardV2View() {\n const requestFilter = useGetRequestFilter();\n\n const searches = Flight.useBasicFetch<TopSearch[]>(SearchRequests.topSearches(requestFilter));\n\n const getSearchUrl = useGetExternalUrl(ExternalRouteHelper.getPrimarySearchUrl);\n\n return (\n <div className='d-flex flex-column h-100 bg-white overflow-hidden rounded pt-3 px-3'>\n {searches.data ? (\n <>\n <h2 className='h6 mb-3'><Text namespace={namespace} phrase='topSearches' /></h2>\n\n {searches.data.length ?\n <>\n <Scrollbars className='position-relative'>\n <ol className='position-absolute w-100 ps-4'>\n {searches.data.map((s, idx) => {\n return (\n <li\n key={idx}\n className='mb-3'\n >\n <a\n href={getSearchUrl(s.query)}\n target='_blank'\n className='position-relative d-flex justify-content-between align-items-center pe-5'\n >\n <span>\n {s.query}\n </span>\n <div className='position-absolute w-100 text-end opacity-0 opacity-100-hover pe-3'>\n <SvgContainer svg={NewWindowSvg} />\n </div>\n </a>\n </li>\n );\n })}\n </ol>\n </Scrollbars>\n </>\n : <TopSearchesCardEmptyStateV2 />\n }\n </>\n ) : <PartialTopSearchesCardV2 />}\n </div>\n );\n}","import React from 'react';\n\nimport { Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'reportsDashboard.topStreamsCardEmptyState';\n\nexport function TopStreamsCardEmptyState() {\n return (\n <div className='d-flex align-items-center justify-content-center text-center h-100'>\n <Text namespace={namespace} phrase='message' />\n </div>\n );\n}","import React from 'react';\n\nexport function PartialTopStreamsCard(): JSX.Element {\n return (\n <>\n <div className='partial-loading-background w-50 mb-3'>&nbsp;</div>\n\n <div className='position-relative'>\n <ul className='list-unstyled position-absolute top-0 start-0 w-100 h-100'>\n {Array(10).fill(null).map((_, i) => (\n <li key={i} className='mb-3'>\n <div className='row g-0'>\n <div className='col-5'>\n <div className='ratio ratio-16x9 rounded partial-loading-background' />\n </div>\n <div className='col-7 d-flex align-items-center'>\n <div className='mx-2 w-100'>\n <div className='w-100 partial-loading-background mb-1'>&nbsp;</div>\n <div className='w-75 partial-loading-background'>&nbsp;</div>\n </div>\n </div>\n </div>\n </li>\n ))}\n </ul>\n </div>\n </>\n );\n}","import React from 'react';\nimport Scrollbars from 'react-custom-scrollbars-2';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { VideoSubText } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useBatchFetch } from 'libs/shared/hooks/UseBatchFetch';\nimport { VideoTypes } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { Actions } from 'shared/constants/ReportsActions';\nimport { AppChannels } from 'shared/constants/ReportsRadioChannels';\nimport { VideoViewsV2Requests } from 'shared/flight-requests/VideoViewsV2Requests';\nimport { useGetAppLinkFilterParams, useGetRequestFilter } from 'shared/hooks/UseGetFilterQueryParams';\nimport { TopVideoV2 } from 'shared/interfaces';\nimport { getSchoolVideoAppLink } from 'shared/utils/ReportsAppLinkUtils';\n\nimport { TopStreamsCardEmptyState } from 'apps/dashboard/views/overview-cards/top-streams/empty-state/TopStreamsCardEmptyState';\nimport { PartialTopStreamsCard } from 'apps/dashboard/views/overview-cards/top-streams/partial-loading/PartialTopStreamsCard';\n\nconst namespace = 'reportsDashboard.topStreamsCard';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst LIMIT = 10;\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function TopStreamsCardView() {\n const filterQueryParams = useGetAppLinkFilterParams();\n const requestFilter = useGetRequestFilter();\n\n const topStreams = Flight.useBasicFetch<TopVideoV2[]>(VideoViewsV2Requests.topStreams(LIMIT, requestFilter));\n\n const videos = useBatchFetch<VideoTypes>(\n topStreams.data?.map(v => v.objectId) ?? [],\n VideoRequests.videos\n );\n\n const hasLoaded = (\n topStreams.hasCompleted &&\n !videos.isFetching\n );\n\n return (\n <div className='d-flex flex-column h-100 bg-white overflow-hidden px-3 rounded pt-3'>\n {hasLoaded ?\n <>\n <div className='d-flex justify-content-between'>\n <h2 className='h6 mb-3'>{getPhrase('topVideos')}</h2>\n <AppLink\n appLink={{ application: AppChannels.VIDEOS, action: Actions.Videos.TOP_VIDEOS }}\n className='text-info'\n >\n <Text namespace={namespace} phrase='seeAll' />\n </AppLink>\n </div>\n\n {videos.itemsArr?.length ?\n <Scrollbars className='position-relative'>\n <div className='position-absolute w-100'>\n <ul className='list-unstyled'>\n {topStreams.data.map(stream => {\n const video = videos.items[stream.objectId];\n\n if (!video)\n return;\n\n return (\n <li key={video.id} className='mb-3'>\n <AppLink appLink={getSchoolVideoAppLink(video, filterQueryParams)}>\n <div className='row g-0'>\n <div className='col-5'>\n <VideoThumbnail\n video={video}\n imageOptions={{ size: ImageSize.Small }}\n textPosition={ThumbnailTextPosition.Independent}\n type='cosmetic'\n hideMask\n size='sm'\n />\n </div>\n <div className='col-7'>\n <div className='d-flex flex-column mx-2'>\n {VideoHelper.isVideoType(video) && (\n <VideoSubText\n type='series'\n video={video}\n analyticsOptions={null}\n className='d-inline clamp-1'\n />\n )}\n <span className='clamp-2 fw-medium'>\n {video.name}\n </span>\n <Text namespace={namespace} phrase='views' options={{ smartCount: stream.count }} />\n </div>\n </div>\n </div>\n </AppLink>\n </li>\n );\n })}\n </ul>\n </div>\n </Scrollbars>\n : <TopStreamsCardEmptyState />\n }\n </>\n : <PartialTopStreamsCard />\n }\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\n\nimport { Actions } from 'shared/constants/ReportsActions';\nimport { AppChannels } from 'shared/constants/ReportsRadioChannels';\nimport { TopicAnalyticsType } from 'shared/enums/TopicAnalyticsType';\nimport { useIsTertiary } from 'shared/hooks/useIsTertiary';\nimport { useSetHeaderTitle } from 'shared/hooks/UseSetHeaderTitle';\nimport { StreamsBarChartCardView } from 'shared/views/overview-cards/streams-bar-chart-card/StreamsBarChartCardView';\nimport { StreamsChartCardView } from 'shared/views/overview-cards/streams-chart-card/StreamsChartCardView';\nimport { TopClassificationsCardView } from 'shared/views/overview-cards/top-classifications-card/TopClassificationsCardView';\n\nimport { TopSearchesCardV2View } from 'apps/dashboard/views/overview-cards/top-searches-v2/TopSearchesCardV2View';\nimport { TopStreamsCardView } from 'apps/dashboard/views/overview-cards/top-streams/TopStreamsCardView';\n\nimport styles from './school-analytics-dashboard.module.scss';\n\nconst TOP_CLASSIFICATIONS_LIMIT = 10;\n\nconst namespace = 'reportsDashboard.schoolAnalyticsDashboard';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function SchoolAnalyticsDashboardView(): JSX.Element {\n const isTertiary = useIsTertiary();\n\n const header = isTertiary ? getPhrase('tertiaryDashboard') : getPhrase('dashboard');\n\n useSetPageMetadata({ title: header });\n useSetHeaderTitle(header);\n\n return (\n <div className='d-flex'>\n <div className={`d-flex flex-column gap-3 ${styles.column1}`}>\n <div className='h-50'>\n <StreamsBarChartCardView\n type='year_group'\n appLink={{ application: AppChannels.VIDEOS, action: Actions.Videos.HOME }}\n appLinkText={getPhrase('seeOverview')}\n />\n </div>\n <div className='h-50'>\n <TopSearchesCardV2View />\n </div>\n </div>\n <div className={`${styles.column2} px-3`}>\n <TopStreamsCardView />\n </div>\n <div className={`d-flex flex-column gap-3 ${styles.column3}`}>\n <div className={styles.videoViews}>\n <StreamsChartCardView type='user_type' />\n </div>\n <div className={styles.topClassifications}>\n <TopClassificationsCardView\n type={TopicAnalyticsType.RootTopic}\n heading={getPhrase('subjects')}\n appLink={{ application: AppChannels.VIDEOS, action: Actions.Videos.HOME }}\n appLinkText={getPhrase('seeOverview')}\n emptyStateText={getPhrase('emptySubjects')}\n limit={TOP_CLASSIFICATIONS_LIMIT}\n />\n </div>\n </div>\n </div>\n );\n}"],"names":["namespace","TopSearchesCardEmptyStateV2","jsx","Text","PartialTopSearchesCardV2","jsxs","Fragment","TopSearchesCardV2View","requestFilter","useGetRequestFilter","searches","Flight.useBasicFetch","SearchRequests","getSearchUrl","useGetExternalUrl","ExternalRouteHelper","Scrollbars","s","idx","SvgContainer","NewWindowSvg","TopStreamsCardEmptyState","PartialTopStreamsCard","_","i","getPhrase","LanguageService","LIMIT","TopStreamsCardView","filterQueryParams","useGetAppLinkFilterParams","topStreams","VideoViewsV2Requests","videos","useBatchFetch","_a","v","VideoRequests","hasLoaded","AppLink","AppChannels","Actions","_b","stream","video","getSchoolVideoAppLink","VideoThumbnail","ImageSize","ThumbnailTextPosition","VideoHelper","VideoSubText","TOP_CLASSIFICATIONS_LIMIT","SchoolAnalyticsDashboardView","isTertiary","useIsTertiary","header","useSetPageMetadata","useSetHeaderTitle","styles","StreamsBarChartCardView","StreamsChartCardView","TopClassificationsCardView","TopicAnalyticsType"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{j as a}from"./app-CQEXKRTo.js";function h(l){return a.jsx("svg",{...l,children:a.jsx("path",{d:"M5 6v12h14V6zm0-1h14a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V6a1 1 0 0 1 1-1m2.4 10.3a.5.5 0 0 1-.8-.6l3-4a.5.5 0 0 1 .754-.054l.579.58 1.765-2.513a.5.5 0 0 1 .83.015l3.891 6a.5.5 0 0 1-.838.544l-3.49-5.379-1.682 2.394a.5.5 0 0 1-.763.067l-.592-.593zm.6-4.8a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3m0-1a.5.5 0 1 0 0-1 .5.5 0 0 0 0 1",fill:"currentColor"})})}function t(l){return a.jsx("svg",{...l,children:a.jsx("path",{fill:"currentColor",d:"M4.007 5.007A1.73 1.73 0 0 1 5.23 4.5h3.077a1.73 1.73 0 0 1 1.384.692l1.327 1.77h7.75a1.73 1.73 0 0 1 1.731 1.73v8.616a1.73 1.73 0 0 1-1.73 1.73H5.23a1.73 1.73 0 0 1-1.73-1.73V6.23c0-.46.182-.9.507-1.224M5.23 5.5a.73.73 0 0 0-.731.73V9.5h15v-.808a.73.73 0 0 0-.73-.73h-8a.5.5 0 0 1-.4-.2l-1.478-1.97a.73.73 0 0 0-.584-.292zm14.269 5h-15v6.808a.73.73 0 0 0 .73.73h13.54a.73.73 0 0 0 .73-.73z"})})}export{t as F,h as a};
2
+ //# sourceMappingURL=Bfbk7XQF.chunk.js.map