@clickview/reports 0.69.1-dev.0 โ 0.70.0-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundles.json +3 -2
- package/dist/css/1103-reports-d3d5cc00db.chunk.css +31 -0
- package/dist/css/1456-reports-4a5871a275.chunk.css +9 -0
- package/dist/css/1648-reports-012456ba48.chunk.css +2 -0
- package/dist/css/209-reports-c33663a53e.chunk.css +11 -0
- package/dist/css/2150-reports-84ec0e9770.chunk.css +4 -0
- package/dist/css/2217-reports-74dec0a3fe.chunk.css +32 -0
- package/dist/css/2997-reports-e08318f14b.chunk.css +9 -0
- package/dist/css/2999-reports-f190450b10.chunk.css +60 -0
- package/dist/css/4582-reports-d3d5cc00db.chunk.css +31 -0
- package/dist/css/5304-reports-22c2d8d635.chunk.css +9 -0
- package/dist/css/6007-reports-5ba77c55a3.chunk.css +8 -0
- package/dist/css/6031-reports-d558076846.chunk.css +6 -0
- package/dist/css/6356-reports-8c5b220bf6.chunk.css +1 -0
- package/dist/css/6811-reports-baf2e97e71.chunk.css +35 -0
- package/dist/css/7723-reports-8c6d3c414b.chunk.css +4 -0
- package/dist/css/7747-reports-2d9e191b5a.chunk.css +12 -0
- package/dist/css/8087-reports-cfe23ba648.chunk.css +10 -0
- package/dist/css/8294-reports-c797263ac2.chunk.css +1 -0
- package/dist/css/8418-reports-0ada3f3ce2.chunk.css +29 -0
- package/dist/css/8450-reports-06493dfde5.chunk.css +9 -0
- package/dist/css/8622-reports-9e8970cc7f.chunk.css +8 -0
- package/dist/css/8839-reports-8e46644943.chunk.css +1 -0
- package/dist/css/8989-reports-92b4f1dde8.chunk.css +8 -0
- package/dist/css/9059-reports-a2ac630ebc.chunk.css +35 -0
- package/dist/css/9285-reports-5b9af8380f.chunk.css +13 -0
- package/dist/css/9661-reports-7435e94a85.chunk.css +4 -0
- package/dist/css/9822-reports-a1db1900c7.chunk.css +8 -0
- package/dist/css/9949-reports-f22fa2b407.chunk.css +15 -0
- package/dist/css/reports-app-b4c4ec5632.css +32 -0
- package/dist/languages/en.json +1 -0
- package/dist/scripts/1103-d77d388f5b-reports.chunk.js +1 -0
- package/dist/scripts/1177-7cf7817e74-reports.chunk.js +1 -0
- package/dist/scripts/1456-019d93e620-reports.chunk.js +1 -0
- package/dist/scripts/1648-e892604f5a-reports.chunk.js +1 -0
- package/dist/scripts/1934-ca8497c768-reports.chunk.js +2 -0
- package/dist/scripts/1934-ca8497c768-reports.chunk.js.LICENSE.txt +9 -0
- package/dist/scripts/2087-e0ef668e1f-reports.chunk.js +1 -0
- package/dist/scripts/209-79eb8be706-reports.chunk.js +1 -0
- package/dist/scripts/2150-4e9e1fb433-reports.chunk.js +1 -0
- package/dist/scripts/2217-15fa35197a-reports.chunk.js +1 -0
- package/dist/scripts/2476-a700f69dc4-reports.chunk.js +1 -0
- package/dist/scripts/2539-04dfb4f4f1-reports.chunk.js +1 -0
- package/dist/scripts/2997-62d81c3442-reports.chunk.js +1 -0
- package/dist/scripts/2999-c1890ca868-reports.chunk.js +2 -0
- package/dist/scripts/2999-c1890ca868-reports.chunk.js.LICENSE.txt +1 -0
- package/dist/scripts/312-8b006e92ff-reports.chunk.js +1 -0
- package/dist/scripts/4234-e3c04f41eb-reports.chunk.js +1 -0
- package/dist/scripts/4372-26474a3318-reports.chunk.js +1 -0
- package/dist/scripts/438-b444dfb8c6-reports.chunk.js +1 -0
- package/dist/scripts/4582-230f130f41-reports.chunk.js +1 -0
- package/dist/scripts/4752-db4247883d-reports.chunk.js +2 -0
- package/dist/scripts/4752-db4247883d-reports.chunk.js.LICENSE.txt +118 -0
- package/dist/scripts/4979-7e14b09f33-reports.chunk.js +1 -0
- package/dist/scripts/5051-72c53737e2-reports.chunk.js +1 -0
- package/dist/scripts/5091-ddd6f61b55-reports.chunk.js +1 -0
- package/dist/scripts/5173-cce3b37672-reports.chunk.js +1 -0
- package/dist/scripts/5177-a7372e7b8d-reports.chunk.js +1 -0
- package/dist/scripts/5304-d5674b32b4-reports.chunk.js +1 -0
- package/dist/scripts/5802-2125536755-reports.chunk.js +1 -0
- package/dist/scripts/6007-673706aa31-reports.chunk.js +1 -0
- package/dist/scripts/6031-b1c60cc409-reports.chunk.js +1 -0
- package/dist/scripts/6081-2bbda6cac3-reports.chunk.js +1 -0
- package/dist/scripts/6180-bdb237ffbe-reports.chunk.js +2 -0
- package/dist/scripts/6180-bdb237ffbe-reports.chunk.js.LICENSE.txt +1 -0
- package/dist/scripts/6198-189ddde870-reports.chunk.js +1 -0
- package/dist/scripts/6356-a1b313c73e-reports.chunk.js +1 -0
- package/dist/scripts/645-e8b19128e5-reports.chunk.js +1 -0
- package/dist/scripts/6545-f07bcd318a-reports.chunk.js +1 -0
- package/dist/scripts/6811-40ded4c089-reports.chunk.js +1 -0
- package/dist/scripts/7238-de5ef0ebfb-reports.chunk.js +1 -0
- package/dist/scripts/7562-748e60c3fc-reports.chunk.js +1 -0
- package/dist/scripts/7709-82750ee317-reports.chunk.js +1 -0
- package/dist/scripts/7723-1799f5aa26-reports.chunk.js +1 -0
- package/dist/scripts/7747-d34db3ff10-reports.chunk.js +2 -0
- package/dist/scripts/7747-d34db3ff10-reports.chunk.js.LICENSE.txt +1 -0
- package/dist/scripts/7925-c6c532c9c4-reports.chunk.js +1 -0
- package/dist/scripts/8087-1d9e9701e5-reports.chunk.js +1 -0
- package/dist/scripts/8393-c37cc22b4c-reports.chunk.js +1 -0
- package/dist/scripts/8418-9f96caf039-reports.chunk.js +1 -0
- package/dist/scripts/8450-f2d5d99614-reports.chunk.js +1 -0
- package/dist/scripts/8591-4811082ab0-reports.chunk.js +1 -0
- package/dist/scripts/8622-ee045574e2-reports.chunk.js +1 -0
- package/dist/scripts/8839-711793a97f-reports.chunk.js +1 -0
- package/dist/scripts/8989-ca5cab7f45-reports.chunk.js +1 -0
- package/dist/scripts/9059-b2dcf3cdb2-reports.chunk.js +1 -0
- package/dist/scripts/9162-7ffc692736-reports.chunk.js +1 -0
- package/dist/scripts/9285-ecddd01efb-reports.chunk.js +1 -0
- package/dist/scripts/9590-41bb23ae71-reports.chunk.js +1 -0
- package/dist/scripts/9647-f0c111d3f0-reports.chunk.js +1 -0
- package/dist/scripts/9661-2dee4c3417-reports.chunk.js +1 -0
- package/dist/scripts/9822-621fac26e6-reports.chunk.js +1 -0
- package/dist/scripts/9895-3b3feb12b9-reports.chunk.js +1 -0
- package/dist/scripts/9949-6b1d1f4d32-reports.chunk.js +1 -0
- package/dist/scripts/bundle-44f8e893eb.min.js +2 -0
- package/dist/scripts/bundle-44f8e893eb.min.js.LICENSE.txt +108 -0
- package/dist/scripts/polyfills-3db3f009d4.min.js +1 -0
- package/package.json +3 -5
- package/typings/utils/imports.d.ts +1 -1
- package/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- package/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- package/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- package/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- package/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- package/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- package/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- package/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- package/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- package/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- package/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- package/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- package/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- package/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- package/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- package/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- package/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- package/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- package/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- package/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- package/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- package/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- package/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- package/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- package/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- package/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- package/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- package/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- package/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- package/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- package/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- package/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- package/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- package/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- package/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- package/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- package/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- package/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- package/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- package/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- package/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- package/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- package/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- package/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- package/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- package/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- package/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- package/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- package/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- package/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- package/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- package/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- package/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- package/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- package/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- package/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- package/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- package/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- package/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- package/dist/css/1VpVng8x.chunk.css +0 -1
- package/dist/css/BBwBgFf_.chunk.css +0 -1
- package/dist/css/BDijM1kt.chunk.css +0 -1
- package/dist/css/BMPwvOki.chunk.css +0 -1
- package/dist/css/BNt45Kgy.chunk.css +0 -1
- package/dist/css/BSGhUWzl.chunk.css +0 -1
- package/dist/css/BZ3_uhDP.chunk.css +0 -1
- package/dist/css/BaadNO4A.chunk.css +0 -1
- package/dist/css/BdUNjJqp.chunk.css +0 -1
- package/dist/css/BdeI0FAV.chunk.css +0 -1
- package/dist/css/BxcMGr8Y.chunk.css +0 -1
- package/dist/css/ByuL_xKJ.chunk.css +0 -1
- package/dist/css/C-A0Pj_7.chunk.css +0 -1
- package/dist/css/C4jMfPWU.chunk.css +0 -1
- package/dist/css/C7XoyEPr.chunk.css +0 -1
- package/dist/css/C8sxda3R.chunk.css +0 -1
- package/dist/css/CD1qrI1T.chunk.css +0 -1
- package/dist/css/CFO--d_R.chunk.css +0 -1
- package/dist/css/CX9nw8t8.chunk.css +0 -1
- package/dist/css/C_qGRdC2.chunk.css +0 -1
- package/dist/css/CdC6ugQR.chunk.css +0 -1
- package/dist/css/ClRRGXPb.chunk.css +0 -1
- package/dist/css/Cr1bwtZG.chunk.css +0 -1
- package/dist/css/DBlPz5Fw.chunk.css +0 -1
- package/dist/css/DDnpOnVB.chunk.css +0 -1
- package/dist/css/DFZQCLLg.chunk.css +0 -1
- package/dist/css/DJwAbl6l.chunk.css +0 -1
- package/dist/css/DWjg_0sz.chunk.css +0 -1
- package/dist/css/DYV9jjVn.chunk.css +0 -1
- package/dist/css/Dgeh4AqU.chunk.css +0 -9
- package/dist/css/DlOtoSz0.chunk.css +0 -1
- package/dist/css/DlxOgKUu.chunk.css +0 -1
- package/dist/css/DwgaDUzz.chunk.css +0 -1
- package/dist/css/FPQ_LmXH.chunk.css +0 -1
- package/dist/css/H09rC9gw.chunk.css +0 -1
- package/dist/css/LAFr2dPT.chunk.css +0 -1
- package/dist/css/Pg1TlYG6.chunk.css +0 -1
- package/dist/css/PsQn3-kb.chunk.css +0 -1
- package/dist/css/alkEuPrr.chunk.css +0 -1
- package/dist/css/k4DgCj_g.chunk.css +0 -1
- package/dist/en.json +0 -1
- package/dist/scripts/-b_h0A4y.chunk.js +0 -2
- package/dist/scripts/-b_h0A4y.chunk.js.map +0 -1
- package/dist/scripts/0UfVJrf5.chunk.js +0 -2
- package/dist/scripts/0UfVJrf5.chunk.js.map +0 -1
- package/dist/scripts/2cd-ulth.chunk.js +0 -2
- package/dist/scripts/2cd-ulth.chunk.js.map +0 -1
- package/dist/scripts/5O9SdVRZ.chunk.js +0 -2
- package/dist/scripts/5O9SdVRZ.chunk.js.map +0 -1
- package/dist/scripts/72EXv822.chunk.js +0 -2
- package/dist/scripts/72EXv822.chunk.js.map +0 -1
- package/dist/scripts/8CNwntVY.chunk.js +0 -2
- package/dist/scripts/8CNwntVY.chunk.js.map +0 -1
- package/dist/scripts/9pagDMWN.chunk.js +0 -2
- package/dist/scripts/9pagDMWN.chunk.js.map +0 -1
- package/dist/scripts/AKgZQGT0.chunk.js +0 -2
- package/dist/scripts/AKgZQGT0.chunk.js.map +0 -1
- package/dist/scripts/ASoPpgM4.chunk.js +0 -2
- package/dist/scripts/ASoPpgM4.chunk.js.map +0 -1
- package/dist/scripts/B0ZIDriY.chunk.js +0 -6
- package/dist/scripts/B0ZIDriY.chunk.js.map +0 -1
- package/dist/scripts/B3PA8QNB.chunk.js +0 -2
- package/dist/scripts/B3PA8QNB.chunk.js.map +0 -1
- package/dist/scripts/B6QS1MPy.chunk.js +0 -4
- package/dist/scripts/B6QS1MPy.chunk.js.map +0 -1
- package/dist/scripts/B9I2jvNY.chunk.js +0 -2
- package/dist/scripts/B9I2jvNY.chunk.js.map +0 -1
- package/dist/scripts/B9IzwFHp.chunk.js +0 -2
- package/dist/scripts/B9IzwFHp.chunk.js.map +0 -1
- package/dist/scripts/BBGDjrt-.chunk.js +0 -2
- package/dist/scripts/BBGDjrt-.chunk.js.map +0 -1
- package/dist/scripts/BHZ8VWq7.chunk.js +0 -2
- package/dist/scripts/BHZ8VWq7.chunk.js.map +0 -1
- package/dist/scripts/BIIsc-MA.chunk.js +0 -2
- package/dist/scripts/BIIsc-MA.chunk.js.map +0 -1
- package/dist/scripts/BLEXuU9u.chunk.js +0 -2
- package/dist/scripts/BLEXuU9u.chunk.js.map +0 -1
- package/dist/scripts/BLIHpHXi.chunk.js +0 -2
- package/dist/scripts/BLIHpHXi.chunk.js.map +0 -1
- package/dist/scripts/BLSeaGtL.chunk.js +0 -2
- package/dist/scripts/BLSeaGtL.chunk.js.map +0 -1
- package/dist/scripts/BLuY6AYO.chunk.js +0 -2
- package/dist/scripts/BLuY6AYO.chunk.js.map +0 -1
- package/dist/scripts/BSe8MmUc.chunk.js +0 -2
- package/dist/scripts/BSe8MmUc.chunk.js.map +0 -1
- package/dist/scripts/BZf-mjTJ.chunk.js +0 -380
- package/dist/scripts/BZf-mjTJ.chunk.js.map +0 -1
- package/dist/scripts/BbvzsNLZ.chunk.js +0 -2
- package/dist/scripts/BbvzsNLZ.chunk.js.map +0 -1
- package/dist/scripts/BdX0pSRt.chunk.js +0 -2
- package/dist/scripts/BdX0pSRt.chunk.js.map +0 -1
- package/dist/scripts/Bgidb-to.chunk.js +0 -2
- package/dist/scripts/Bgidb-to.chunk.js.map +0 -1
- package/dist/scripts/BhPjzT2a.chunk.js +0 -2
- package/dist/scripts/BhPjzT2a.chunk.js.map +0 -1
- package/dist/scripts/BihcsiRl.chunk.js +0 -2
- package/dist/scripts/BihcsiRl.chunk.js.map +0 -1
- package/dist/scripts/BlUKEHqx.chunk.js +0 -2
- package/dist/scripts/BlUKEHqx.chunk.js.map +0 -1
- package/dist/scripts/BpWIcknK.chunk.js +0 -2
- package/dist/scripts/BpWIcknK.chunk.js.map +0 -1
- package/dist/scripts/BqY3bZyH.chunk.js +0 -2
- package/dist/scripts/BqY3bZyH.chunk.js.map +0 -1
- package/dist/scripts/BrXmRwXi.chunk.js +0 -2
- package/dist/scripts/BrXmRwXi.chunk.js.map +0 -1
- package/dist/scripts/BsOLqypJ.chunk.js +0 -2
- package/dist/scripts/BsOLqypJ.chunk.js.map +0 -1
- package/dist/scripts/BvArNs1K.chunk.js +0 -2
- package/dist/scripts/BvArNs1K.chunk.js.map +0 -1
- package/dist/scripts/BxBPX67V.chunk.js +0 -2
- package/dist/scripts/BxBPX67V.chunk.js.map +0 -1
- package/dist/scripts/C0Ak1kpS.chunk.js +0 -3
- package/dist/scripts/C0Ak1kpS.chunk.js.map +0 -1
- package/dist/scripts/C0GFlX65.chunk.js +0 -2
- package/dist/scripts/C0GFlX65.chunk.js.map +0 -1
- package/dist/scripts/C0nQ0Xnx.chunk.js +0 -6
- package/dist/scripts/C0nQ0Xnx.chunk.js.map +0 -1
- package/dist/scripts/C6UUJ8P5.chunk.js +0 -2
- package/dist/scripts/C6UUJ8P5.chunk.js.map +0 -1
- package/dist/scripts/C8oA7_zY.chunk.js +0 -2
- package/dist/scripts/C8oA7_zY.chunk.js.map +0 -1
- package/dist/scripts/CEy1YX0b.chunk.js +0 -2
- package/dist/scripts/CEy1YX0b.chunk.js.map +0 -1
- package/dist/scripts/CNfESBlK.chunk.js +0 -2
- package/dist/scripts/CNfESBlK.chunk.js.map +0 -1
- package/dist/scripts/CNgTzzan.chunk.js +0 -42
- package/dist/scripts/CNgTzzan.chunk.js.map +0 -1
- package/dist/scripts/CP2i5uhZ.chunk.js +0 -2
- package/dist/scripts/CP2i5uhZ.chunk.js.map +0 -1
- package/dist/scripts/CSmXZuTZ.chunk.js +0 -2
- package/dist/scripts/CSmXZuTZ.chunk.js.map +0 -1
- package/dist/scripts/CTMVj7AR.chunk.js +0 -2
- package/dist/scripts/CTMVj7AR.chunk.js.map +0 -1
- package/dist/scripts/CW7x8M-z.chunk.js +0 -2
- package/dist/scripts/CW7x8M-z.chunk.js.map +0 -1
- package/dist/scripts/CWEUVMEm.chunk.js +0 -2
- package/dist/scripts/CWEUVMEm.chunk.js.map +0 -1
- package/dist/scripts/CWViZWyh.chunk.js +0 -34
- package/dist/scripts/CWViZWyh.chunk.js.map +0 -1
- package/dist/scripts/CX5q-0jT.chunk.js +0 -2
- package/dist/scripts/CX5q-0jT.chunk.js.map +0 -1
- package/dist/scripts/CbBaa9Aj.chunk.js +0 -2
- package/dist/scripts/CbBaa9Aj.chunk.js.map +0 -1
- package/dist/scripts/Ce_zROQ3.chunk.js +0 -2
- package/dist/scripts/Ce_zROQ3.chunk.js.map +0 -1
- package/dist/scripts/CfTCpF5i.chunk.js +0 -4
- package/dist/scripts/CfTCpF5i.chunk.js.map +0 -1
- package/dist/scripts/Cl1c9Acb.chunk.js +0 -2
- package/dist/scripts/Cl1c9Acb.chunk.js.map +0 -1
- package/dist/scripts/Cmu1J2M7.chunk.js +0 -262
- package/dist/scripts/Cmu1J2M7.chunk.js.map +0 -1
- package/dist/scripts/Cn0ghy_D.chunk.js +0 -2
- package/dist/scripts/Cn0ghy_D.chunk.js.map +0 -1
- package/dist/scripts/Cs1UnwSi.chunk.js +0 -2
- package/dist/scripts/Cs1UnwSi.chunk.js.map +0 -1
- package/dist/scripts/CsP3Lruv.chunk.js +0 -3
- package/dist/scripts/CsP3Lruv.chunk.js.map +0 -1
- package/dist/scripts/CsROrwVV.chunk.js +0 -2
- package/dist/scripts/CsROrwVV.chunk.js.map +0 -1
- package/dist/scripts/Ctu1A4hw.chunk.js +0 -2
- package/dist/scripts/Ctu1A4hw.chunk.js.map +0 -1
- package/dist/scripts/D1UdZdfs.chunk.js +0 -2
- package/dist/scripts/D1UdZdfs.chunk.js.map +0 -1
- package/dist/scripts/D2pFW6EB.chunk.js +0 -2
- package/dist/scripts/D2pFW6EB.chunk.js.map +0 -1
- package/dist/scripts/D9oCeDYw.chunk.js +0 -10
- package/dist/scripts/D9oCeDYw.chunk.js.map +0 -1
- package/dist/scripts/DAajosqn.chunk.js +0 -2
- package/dist/scripts/DAajosqn.chunk.js.map +0 -1
- package/dist/scripts/DDGxV4ns.chunk.js +0 -2
- package/dist/scripts/DDGxV4ns.chunk.js.map +0 -1
- package/dist/scripts/DFlfmBPU.chunk.js +0 -2
- package/dist/scripts/DFlfmBPU.chunk.js.map +0 -1
- package/dist/scripts/DHZefNDC.chunk.js +0 -2
- package/dist/scripts/DHZefNDC.chunk.js.map +0 -1
- package/dist/scripts/DJzpw8qX.chunk.js +0 -2
- package/dist/scripts/DJzpw8qX.chunk.js.map +0 -1
- package/dist/scripts/DKEdZyAE.chunk.js +0 -2
- package/dist/scripts/DKEdZyAE.chunk.js.map +0 -1
- package/dist/scripts/DKu8iTnz.chunk.js +0 -2
- package/dist/scripts/DKu8iTnz.chunk.js.map +0 -1
- package/dist/scripts/DMd0fZar.chunk.js +0 -2
- package/dist/scripts/DMd0fZar.chunk.js.map +0 -1
- package/dist/scripts/DNDksLLJ.chunk.js +0 -2
- package/dist/scripts/DNDksLLJ.chunk.js.map +0 -1
- package/dist/scripts/DNP9cLqQ.chunk.js +0 -2
- package/dist/scripts/DNP9cLqQ.chunk.js.map +0 -1
- package/dist/scripts/DO-V6YKu.chunk.js +0 -2
- package/dist/scripts/DO-V6YKu.chunk.js.map +0 -1
- package/dist/scripts/DQA8MZy3.chunk.js +0 -2
- package/dist/scripts/DQA8MZy3.chunk.js.map +0 -1
- package/dist/scripts/DT1lPNaD.chunk.js +0 -2
- package/dist/scripts/DT1lPNaD.chunk.js.map +0 -1
- package/dist/scripts/DTL-Rceb.chunk.js +0 -2
- package/dist/scripts/DTL-Rceb.chunk.js.map +0 -1
- package/dist/scripts/DTotSVIi.chunk.js +0 -2
- package/dist/scripts/DTotSVIi.chunk.js.map +0 -1
- package/dist/scripts/DWkaXclo.chunk.js +0 -10
- package/dist/scripts/DWkaXclo.chunk.js.map +0 -1
- package/dist/scripts/DXFcNENa.chunk.js +0 -2
- package/dist/scripts/DXFcNENa.chunk.js.map +0 -1
- package/dist/scripts/Ddy6mQmA.chunk.js +0 -2
- package/dist/scripts/Ddy6mQmA.chunk.js.map +0 -1
- package/dist/scripts/DlxDC-9E.chunk.js +0 -2
- package/dist/scripts/DlxDC-9E.chunk.js.map +0 -1
- package/dist/scripts/Dn5-Zvws.chunk.js +0 -2
- package/dist/scripts/Dn5-Zvws.chunk.js.map +0 -1
- package/dist/scripts/DnhffgUu.chunk.js +0 -2
- package/dist/scripts/DnhffgUu.chunk.js.map +0 -1
- package/dist/scripts/Dv9OgzKw.chunk.js +0 -2
- package/dist/scripts/Dv9OgzKw.chunk.js.map +0 -1
- package/dist/scripts/DvV9e2O3.chunk.js +0 -3
- package/dist/scripts/DvV9e2O3.chunk.js.map +0 -1
- package/dist/scripts/Dvf_hOR3.chunk.js +0 -2
- package/dist/scripts/Dvf_hOR3.chunk.js.map +0 -1
- package/dist/scripts/DxOc33K6.chunk.js +0 -3
- package/dist/scripts/DxOc33K6.chunk.js.map +0 -1
- package/dist/scripts/DxbQzyJg.chunk.js +0 -2
- package/dist/scripts/DxbQzyJg.chunk.js.map +0 -1
- package/dist/scripts/DyaAoFDP.chunk.js +0 -2
- package/dist/scripts/DyaAoFDP.chunk.js.map +0 -1
- package/dist/scripts/EBNeK_uD.chunk.js +0 -2
- package/dist/scripts/EBNeK_uD.chunk.js.map +0 -1
- package/dist/scripts/HBvGjr-A.chunk.js +0 -2
- package/dist/scripts/HBvGjr-A.chunk.js.map +0 -1
- package/dist/scripts/IC6KSiqE.chunk.js +0 -2
- package/dist/scripts/IC6KSiqE.chunk.js.map +0 -1
- package/dist/scripts/LT6WE6TB.chunk.js +0 -2
- package/dist/scripts/LT6WE6TB.chunk.js.map +0 -1
- package/dist/scripts/P0RdEZGz.chunk.js +0 -2
- package/dist/scripts/P0RdEZGz.chunk.js.map +0 -1
- package/dist/scripts/P3PkkK_o.chunk.js +0 -2
- package/dist/scripts/P3PkkK_o.chunk.js.map +0 -1
- package/dist/scripts/SA1hxE7y.chunk.js +0 -15
- package/dist/scripts/SA1hxE7y.chunk.js.map +0 -1
- package/dist/scripts/YHL8PX91.chunk.js +0 -2
- package/dist/scripts/YHL8PX91.chunk.js.map +0 -1
- package/dist/scripts/app-5iiM5qQY.js +0 -224
- package/dist/scripts/app-5iiM5qQY.js.map +0 -1
- package/dist/scripts/fORcC1yd.chunk.js +0 -2
- package/dist/scripts/fORcC1yd.chunk.js.map +0 -1
- package/dist/scripts/hU1zzvt8.chunk.js +0 -2
- package/dist/scripts/hU1zzvt8.chunk.js.map +0 -1
- package/dist/scripts/kFXLewpU.chunk.js +0 -2
- package/dist/scripts/kFXLewpU.chunk.js.map +0 -1
- package/dist/scripts/k_p1R4KR.chunk.js +0 -2
- package/dist/scripts/k_p1R4KR.chunk.js.map +0 -1
- package/dist/scripts/mqFCEyYv.chunk.js +0 -2
- package/dist/scripts/mqFCEyYv.chunk.js.map +0 -1
- package/dist/scripts/qwzILhQ0.chunk.js +0 -8
- package/dist/scripts/qwzILhQ0.chunk.js.map +0 -1
- package/dist/scripts/sFV5nxD4.chunk.js +0 -2
- package/dist/scripts/sFV5nxD4.chunk.js.map +0 -1
- package/dist/scripts/uBcZoYae.chunk.js +0 -2
- package/dist/scripts/uBcZoYae.chunk.js.map +0 -1
- package/dist/scripts/yaRKidLW.chunk.js +0 -2
- package/dist/scripts/yaRKidLW.chunk.js.map +0 -1
- package/dist/scripts/ysP6mL-L.chunk.js +0 -2
- package/dist/scripts/ysP6mL-L.chunk.js.map +0 -1
- package/vite.config.ts +0 -6
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"CWViZWyh.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> </>}\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]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"CX5q-0jT.chunk.js","sources":["../../../../libs/shared/src/apps/analytics/utils/FilterParamUtils.ts"],"sourcesContent":["import { FilterQueryParams } from 'libs/shared/apps/analytics/interfaces/FilterQueryParams';\n\nexport function getFilterParamsKey(filters: FilterQueryParams): string {\n const keys: string[] = [];\n\n Object.keys(filters).forEach((key: keyof FilterQueryParams) => {\n const val = filters[key];\n\n if (!val)\n return;\n\n keys.push(`${key}:${Array.isArray(val) ? val.join(',') : val}`);\n });\n\n return keys.join(':');\n}"],"names":["getFilterParamsKey","filters","keys","key","val"],"mappings":"AAEO,SAASA,EAAmBC,EAAoC,CACrE,MAAMC,EAAiB,CAAA,EAEvB,cAAO,KAAKD,CAAO,EAAE,QAASE,GAAiC,CAC7D,MAAMC,EAAMH,EAAQE,CAAG,EAElBC,GAGLF,EAAK,KAAK,GAAGC,CAAG,IAAI,MAAM,QAAQC,CAAG,EAAIA,EAAI,KAAK,GAAG,EAAIA,CAAG,EAAE,CAChE,CAAC,EAEMF,EAAK,KAAK,GAAG,CACtB"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{p as L,r as s,ah as M,F as d}from"./app-5iiM5qQY.js";const g=()=>{const e=L.useRef(!0);return L.useEffect(()=>()=>{e.current=!1},[]),e},R=275,y=5,T={className:"",delay:0,style:null},Y={screenX:0,screenY:0};function H(e,t){var n;e.current&&(t.className&&((n=e.current.classList)==null||n.add(t.className)),t.style&&Object.keys(t.style).forEach(u=>{e.current.style[u]=t.style[u]}))}function h(e,t){var n;e.current&&(t.className&&((n=e.current.classList)==null||n.remove(t.className)),t.style&&Object.keys(t.style).forEach(u=>{e.current.style[u]=null}))}function b(e,t){return Math.abs(e.screenX-t.screenX)>y||Math.abs(e.screenY-t.screenY)>y}function X(e=T){const t=g(),[n,u]=s.useState(e),[l,c]=s.useState(!1),r=s.useRef(null);s.useEffect(()=>{M.isEqual(e,n)||u(e)},[e]);const i=d.throttle(()=>{H(r,n),t.current&&c(!0)},n.delay,{leading:!1}),f=()=>{d.isFunction(i.cancel)&&i.cancel(),h(r,n),t.current&&c(!1)};return s.useLayoutEffect(()=>{const o=r.current;if(o)return o.addEventListener("mouseenter",i),o.addEventListener("mouseleave",f),()=>{o.removeEventListener("mouseenter",i),o.removeEventListener("mouseleave",f)}},[r.current,n]),[r,l]}function w(e){const[t,n]=s.useState(e),u=s.useRef({...Y}),l=s.useRef(!1),c=s.useRef(0),r=s.useRef(null),[i,f]=s.useState(!1);s.useEffect(()=>{M.isEqual(e,t)||n(e)},[e]);function o(){c.current&&(window.clearTimeout(c.current),c.current=0)}function O(a,v){c.current||(c.current=window.setTimeout(a,v))}function m(){l.current=!0}function S(a){if(!l.current)return;const v={...u.current};u.current.screenX=a.screenX,u.current.screenY=a.screenY,b(v,a)&&o(),O(()=>{H(r,t),f(!0)},t.delay||R)}function E(){o(),h(r,t),l.current=!1,f(!1)}return s.useLayoutEffect(()=>{if(!r.current)return;const a=d.throttle(S,25,{leading:!1});return r.current.addEventListener("mouseenter",m),r.current.addEventListener("mousemove",a),r.current.addEventListener("mouseleave",E),()=>{r.current&&(r.current.removeEventListener("mouseenter",m),r.current.removeEventListener("mousemove",a),r.current.removeEventListener("mouseleave",E))}},[r.current,t]),[r,i]}export{w as a,X as u};
|
|
2
|
-
//# sourceMappingURL=CbBaa9Aj.chunk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"CbBaa9Aj.chunk.js","sources":["../../../../libs/shared/src/hooks/UseIsComponentMounted.ts","../../../../libs/shared/src/hooks/UseHover.ts"],"sourcesContent":["import React from 'react';\n\nexport const useIsComponentMounted = () => {\n const isMounted = React.useRef(true);\n\n React.useEffect(() => {\n return () => { isMounted.current = false; };\n }, []);\n\n return isMounted;\n};","import * as React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { useIsComponentMounted } from 'libs/shared/hooks/UseIsComponentMounted';\n\nconst DEFAULT_HOVER_DELAY = 275;\nconst MOUSE_MOVE_THRESHOLD = 5; // value is in pixels\n\ninterface HoverOptions {\n /**\n * Classes to be applied to the target element on hover. Useful if you want to style the element on hover\n * after a delay (controlled by the `timeout` option below)\n */\n className?: string;\n\n /**\n * Style attribute to be applied to the target element on hover. Should only be used \n */\n style?: HashObject;\n\n /**\n * A delay between when the user actually hovers on the element, and when the hook returns `true` for `isHovering`.\n * This can be used to determine whether a user has actually intended for a hover event on an element to be\n * triggered or not. Defaults to 0.\n */\n delay?: number;\n}\n\nconst defaultOptions: HoverOptions = {\n className: '',\n delay: 0,\n style: null\n};\n\ninterface MousePosition {\n screenX: number;\n screenY: number;\n}\n\nconst defaultHoverState: MousePosition = {\n screenX: 0,\n screenY: 0\n};\n\nfunction setHoveringStyles<T extends HTMLElement>(\n ref: React.MutableRefObject<T>,\n options: HoverOptions\n): void {\n if (!ref.current)\n return;\n\n if (options.className)\n ref.current.classList?.add(options.className);\n\n if (options.style) {\n Object.keys(options.style).forEach((styleName: any) => {\n ref.current.style[styleName] = options.style[styleName];\n });\n }\n}\n\nfunction unSetHoveringStyles<T extends HTMLElement>(\n ref: React.MutableRefObject<T>,\n options: HoverOptions\n): void {\n if (!ref.current)\n return;\n\n if (options.className)\n ref.current.classList?.remove(options.className);\n\n if (options.style) {\n Object.keys(options.style).forEach((styleName: any) => {\n ref.current.style[styleName] = null;\n });\n }\n}\n\nfunction hasMouseMoved(prev: MousePosition, current: MousePosition): boolean {\n return Math.abs(prev.screenX - current.screenX) > MOUSE_MOVE_THRESHOLD ||\n Math.abs(prev.screenY - current.screenY) > MOUSE_MOVE_THRESHOLD;\n}\n\n/**\n * This hook detects hover events on an element.\n * This should only be used where CSS hover events won't suffice for what you are trying to achieve.\n * It will trigger after the delay regardless of pointer movement within the container, if you want\n * it to trigger only after the pointer has stopped moving, consider the `useHoverIntent` hook.\n */\nexport function useHover<T extends HTMLElement>(\n options: HoverOptions = defaultOptions\n): [ React.MutableRefObject<T>, boolean ] {\n const isMounted = useIsComponentMounted();\n const [ cachedOptions, setCachedOptions ] = React.useState(options);\n const [ isHovering, setIsHovering ] = React.useState(false);\n\n const ref = React.useRef<T>(null);\n\n React.useEffect(() => {\n if (ObjectHelper.isEqual(options, cachedOptions))\n return;\n\n setCachedOptions(options);\n }, [options]);\n\n const triggerHover = FunctionHelper.throttle(() => {\n setHoveringStyles(ref, cachedOptions);\n if (isMounted.current)\n setIsHovering(true);\n }, cachedOptions.delay, { leading: false });\n\n const handleMouseOut = () => {\n if (FunctionHelper.isFunction(triggerHover.cancel))\n triggerHover.cancel();\n\n unSetHoveringStyles(ref, cachedOptions);\n\n if (isMounted.current)\n setIsHovering(false);\n };\n\n React.useLayoutEffect(() => {\n const node = ref.current;\n\n if (node) {\n node.addEventListener('mouseenter', triggerHover);\n node.addEventListener('mouseleave', handleMouseOut);\n\n return () => {\n node.removeEventListener('mouseenter', triggerHover);\n node.removeEventListener('mouseleave', handleMouseOut);\n };\n }\n }, [ ref.current, cachedOptions ]);\n\n return [ ref, isHovering ];\n}\n\n\n/**\n * This hook detects hover events on an element with intent.\n * This should only be used where CSS hover events won't suffice for what you are trying to achieve.\n * It will trigger after the pointer has stopped moving and the delay has elapsed, if you want it to trigger\n * regardless of pointer movement within the container, consider the `useHover` hook`.\n */\nexport function useHoverIntent<T extends HTMLElement>(options: HoverOptions): [ React.MutableRefObject<T>, boolean ] {\n const [ cachedOptions, setCachedOptions ] = React.useState(options);\n\n /**\n * Using refs for frequently updated state in order to not trigger react rendering\n */\n const mousePosition = React.useRef<MousePosition>({ ...defaultHoverState });\n const isInside = React.useRef<boolean>(false);\n const timeout = React.useRef<number>(0);\n\n const ref = React.useRef<T>(null);\n const [ isHovering, setIsHovering ] = React.useState(false);\n\n React.useEffect(() => {\n if (ObjectHelper.isEqual(options, cachedOptions))\n return;\n\n setCachedOptions(options);\n }, [options]);\n\n function localClearTimeout(): void {\n if (!timeout.current)\n return;\n\n window.clearTimeout(timeout.current);\n timeout.current = 0;\n }\n\n function localSetTimeout(fn: () => void, delay: number): void {\n if (timeout.current)\n return;\n\n timeout.current = window.setTimeout(fn, delay);\n }\n\n function onMouseEnter(): void {\n isInside.current = true;\n }\n\n function onMouseMove(event: MouseEvent): void {\n if (!isInside.current)\n return;\n\n const prev = { ...mousePosition.current };\n mousePosition.current.screenX = event.screenX;\n mousePosition.current.screenY = event.screenY;\n\n if (hasMouseMoved(prev, event))\n localClearTimeout();\n \n localSetTimeout(() => {\n setHoveringStyles(ref, cachedOptions);\n setIsHovering(true);\n }, cachedOptions.delay || DEFAULT_HOVER_DELAY);\n }\n\n function onMouseLeave(): void {\n localClearTimeout();\n unSetHoveringStyles(ref, cachedOptions);\n isInside.current = false;\n setIsHovering(false);\n }\n\n React.useLayoutEffect(() => {\n if (!ref.current)\n return;\n\n const throttledMouseMove = FunctionHelper.throttle(onMouseMove, 25, { leading: false });\n ref.current.addEventListener('mouseenter', onMouseEnter);\n ref.current.addEventListener('mousemove', throttledMouseMove);\n ref.current.addEventListener('mouseleave', onMouseLeave);\n \n return () => {\n if (!ref.current)\n return;\n ref.current.removeEventListener('mouseenter', onMouseEnter);\n ref.current.removeEventListener('mousemove', throttledMouseMove);\n ref.current.removeEventListener('mouseleave', onMouseLeave);\n };\n }, [ ref.current, cachedOptions ]);\n \n return [ ref, isHovering ];\n}"],"names":["useIsComponentMounted","isMounted","React","DEFAULT_HOVER_DELAY","MOUSE_MOVE_THRESHOLD","defaultOptions","defaultHoverState","setHoveringStyles","ref","options","_a","styleName","unSetHoveringStyles","hasMouseMoved","prev","current","useHover","cachedOptions","setCachedOptions","React.useState","isHovering","setIsHovering","React.useRef","React.useEffect","ObjectHelper","triggerHover","FunctionHelper","handleMouseOut","React.useLayoutEffect","node","useHoverIntent","mousePosition","isInside","timeout","localClearTimeout","localSetTimeout","fn","delay","onMouseEnter","onMouseMove","event","onMouseLeave","throttledMouseMove"],"mappings":"4DAEO,MAAMA,EAAwB,IAAM,CACzC,MAAMC,EAAYC,EAAM,OAAO,EAAI,EAEnC,OAAAA,EAAM,UAAU,IACP,IAAM,CAAED,EAAU,QAAU,EAAO,EACzC,CAAA,CAAE,EAEEA,CACT,ECFME,EAAsB,IACtBC,EAAuB,EAsBvBC,EAA+B,CACnC,UAAW,GACX,MAAO,EACP,MAAO,IACT,EAOMC,EAAmC,CACvC,QAAS,EACT,QAAS,CACX,EAEA,SAASC,EACPC,EACAC,EACM,OACDD,EAAI,UAGLC,EAAQ,aACVC,EAAAF,EAAI,QAAQ,YAAZ,MAAAE,EAAuB,IAAID,EAAQ,YAEjCA,EAAQ,OACV,OAAO,KAAKA,EAAQ,KAAK,EAAE,QAASE,GAAmB,CACrDH,EAAI,QAAQ,MAAMG,CAAS,EAAIF,EAAQ,MAAME,CAAS,CACxD,CAAC,EAEL,CAEA,SAASC,EACPJ,EACAC,EACM,OACDD,EAAI,UAGLC,EAAQ,aACVC,EAAAF,EAAI,QAAQ,YAAZ,MAAAE,EAAuB,OAAOD,EAAQ,YAEpCA,EAAQ,OACV,OAAO,KAAKA,EAAQ,KAAK,EAAE,QAASE,GAAmB,CACrDH,EAAI,QAAQ,MAAMG,CAAS,EAAI,IACjC,CAAC,EAEL,CAEA,SAASE,EAAcC,EAAqBC,EAAiC,CAC3E,OAAO,KAAK,IAAID,EAAK,QAAUC,EAAQ,OAAO,EAAIX,GAChD,KAAK,IAAIU,EAAK,QAAUC,EAAQ,OAAO,EAAIX,CAC/C,CAQO,SAASY,EACdP,EAAwBJ,EACgB,CACxC,MAAMJ,EAAYD,EAAA,EACZ,CAAEiB,EAAeC,CAAiB,EAAIC,EAAAA,SAAeV,CAAO,EAC5D,CAAEW,EAAYC,CAAc,EAAIF,EAAAA,SAAe,EAAK,EAEpDX,EAAMc,EAAAA,OAAgB,IAAI,EAEhCC,EAAAA,UAAgB,IAAM,CAChBC,EAAa,QAAQf,EAASQ,CAAa,GAG/CC,EAAiBT,CAAO,CAC1B,EAAG,CAACA,CAAO,CAAC,EAEZ,MAAMgB,EAAeC,EAAe,SAAS,IAAM,CACjDnB,EAAkBC,EAAKS,CAAa,EAChChB,EAAU,SACZoB,EAAc,EAAI,CACtB,EAAGJ,EAAc,MAAO,CAAE,QAAS,GAAO,EAEpCU,EAAiB,IAAM,CACvBD,EAAe,WAAWD,EAAa,MAAM,GAC/CA,EAAa,OAAA,EAEfb,EAAoBJ,EAAKS,CAAa,EAElChB,EAAU,SACZoB,EAAc,EAAK,CACvB,EAEAO,OAAAA,EAAAA,gBAAsB,IAAM,CAC1B,MAAMC,EAAOrB,EAAI,QAEjB,GAAIqB,EACF,OAAAA,EAAK,iBAAiB,aAAcJ,CAAY,EAChDI,EAAK,iBAAiB,aAAcF,CAAc,EAE3C,IAAM,CACXE,EAAK,oBAAoB,aAAcJ,CAAY,EACnDI,EAAK,oBAAoB,aAAcF,CAAc,CACvD,CAEJ,EAAG,CAAEnB,EAAI,QAASS,CAAc,CAAC,EAE1B,CAAET,EAAKY,CAAW,CAC3B,CASO,SAASU,EAAsCrB,EAA+D,CACnH,KAAM,CAAEQ,EAAeC,CAAiB,EAAIC,EAAAA,SAAeV,CAAO,EAK5DsB,EAAgBT,EAAAA,OAA4B,CAAE,GAAGhB,EAAmB,EACpE0B,EAAWV,EAAAA,OAAsB,EAAK,EACtCW,EAAUX,EAAAA,OAAqB,CAAC,EAEhCd,EAAMc,EAAAA,OAAgB,IAAI,EAC1B,CAAEF,EAAYC,CAAc,EAAIF,EAAAA,SAAe,EAAK,EAE1DI,EAAAA,UAAgB,IAAM,CAChBC,EAAa,QAAQf,EAASQ,CAAa,GAG/CC,EAAiBT,CAAO,CAC1B,EAAG,CAACA,CAAO,CAAC,EAEZ,SAASyB,GAA0B,CAC5BD,EAAQ,UAGb,OAAO,aAAaA,EAAQ,OAAO,EACnCA,EAAQ,QAAU,EACpB,CAEA,SAASE,EAAgBC,EAAgBC,EAAqB,CACxDJ,EAAQ,UAGZA,EAAQ,QAAU,OAAO,WAAWG,EAAIC,CAAK,EAC/C,CAEA,SAASC,GAAqB,CAC5BN,EAAS,QAAU,EACrB,CAEA,SAASO,EAAYC,EAAyB,CAC5C,GAAI,CAACR,EAAS,QACZ,OAEF,MAAMlB,EAAO,CAAE,GAAGiB,EAAc,OAAA,EAChCA,EAAc,QAAQ,QAAUS,EAAM,QACtCT,EAAc,QAAQ,QAAUS,EAAM,QAElC3B,EAAcC,EAAM0B,CAAK,GAC3BN,EAAA,EAEFC,EAAgB,IAAM,CACpB5B,EAAkBC,EAAKS,CAAa,EACpCI,EAAc,EAAI,CACpB,EAAGJ,EAAc,OAASd,CAAmB,CAC/C,CAEA,SAASsC,GAAqB,CAC5BP,EAAA,EACAtB,EAAoBJ,EAAKS,CAAa,EACtCe,EAAS,QAAU,GACnBX,EAAc,EAAK,CACrB,CAEAO,OAAAA,EAAAA,gBAAsB,IAAM,CAC1B,GAAI,CAACpB,EAAI,QACP,OAEF,MAAMkC,EAAqBhB,EAAe,SAASa,EAAa,GAAI,CAAE,QAAS,GAAO,EACtF,OAAA/B,EAAI,QAAQ,iBAAiB,aAAc8B,CAAY,EACvD9B,EAAI,QAAQ,iBAAiB,YAAakC,CAAkB,EAC5DlC,EAAI,QAAQ,iBAAiB,aAAciC,CAAY,EAEhD,IAAM,CACNjC,EAAI,UAETA,EAAI,QAAQ,oBAAoB,aAAc8B,CAAY,EAC1D9B,EAAI,QAAQ,oBAAoB,YAAakC,CAAkB,EAC/DlC,EAAI,QAAQ,oBAAoB,aAAciC,CAAY,EAC5D,CACF,EAAG,CAAEjC,EAAI,QAASS,CAAc,CAAC,EAE1B,CAAET,EAAKY,CAAW,CAC3B"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{ar as A,e as g,p as U,u as o,bN as h,j as t,X as k,w as E,L as G,T as i,a1 as u,aU as N,U as T}from"./app-5iiM5qQY.js";import{u as D,I as L}from"./DJzpw8qX.chunk.js";import{g as M,b as H}from"./P3PkkK_o.chunk.js";import{a as B,I as Q,e as V,f as s}from"./DTL-Rceb.chunk.js";import{u as X}from"./BLuY6AYO.chunk.js";import{u as z,g as v}from"./Ddy6mQmA.chunk.js";import{b as J}from"./B6QS1MPy.chunk.js";import"./sFV5nxD4.chunk.js";import"./5O9SdVRZ.chunk.js";import"./CNgTzzan.chunk.js";import"./BdX0pSRt.chunk.js";import"./CsP3Lruv.chunk.js";import"./Cs1UnwSi.chunk.js";const R="interactives.generateReport",r=G.encloseNamespace(R);function oe(a){var d;const x=X(),I=A(),l=g(),[f,j]=U.useState(!1),{loading:y,handleGenerateReportError:C}=z(),n=o(T.currentUser()),c=o(h.interactiveMetadata(a.interactiveId)),m=o((d=c.data)!=null&&d.interactiveId?h.interactive(c.data.interactiveId):null),P=g(),w=D(a.interactiveId,P),p=B(m.data),F=J(m.data,w.data,!1);function S(){j(!0);const b={interactiveName:c.data.name,userId:n.data.id,customerId:n.data.customerId,questions:p.map(e=>e.name),rows:F.map(e=>({name:N.getFullName(e.user),unanswered:e.summary.unanswered,percentage:M(H(e.summary.percentCorrect)),correct:e.summary.correct,totalQuestions:e.summary.answered+e.summary.unanswered,results:p.map(q=>{switch(Q.isInteractionCorrect(q,V(e))){case s.Correct:return r("correct");case s.Incorrect:return r("incorrect");case s.NotApplicable:return"-";case s.AwaitingMarking:return r("awaitingMarking");case s.UnAnswered:case s.Answered:default:return""}})}))};I(L.interactiveResultsReport(b)).then(()=>{x.success(r("success"))}).catch(e=>C(e,r("error"),r("noEmailError"))).finally(a.closePopup)}return t.jsx(k.Provider,{value:R,children:t.jsxs(E,{title:r("title"),showLoadingSpinner:!n.hasCompleted||y,closePopup:a.closePopup,children:[t.jsx("p",{children:t.jsx(i,{phrase:"description"})}),t.jsx("p",{children:t.jsx(i,{phrase:"dateRange",options:{dateFrom:v(l.start),dateTo:v(l.end)}})}),t.jsx("p",{children:t.jsx(i,{phrase:"emailDescription"})}),t.jsxs(u,{children:[t.jsx(u.Cancel,{onClick:a.closePopup}),t.jsx(u.Submit,{variant:"dark",onClick:S,text:r("generateReport"),showSpinner:f})]})]})})}export{oe as GenerateInteractiveResultsReportView};
|
|
2
|
-
//# sourceMappingURL=Ce_zROQ3.chunk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Ce_zROQ3.chunk.js","sources":["../../src/apps/interactives/views/generate-report/GenerateInteractiveResultsReportView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\n\nimport { InteractiveResultsRequests } from 'libs/shared/apps/analytics/flight-requests/InteractiveResultsRequests';\nimport { useFetchInteractiveResults } from 'libs/shared/apps/analytics/hooks/UseFetchInteractiveResults';\nimport { InteractiveResultsReport } from 'libs/shared/apps/analytics/interfaces/requests/InteractiveResultsReport';\nimport { getFormattedPercentage, getPercentageToFixed } from 'libs/shared/components/percentage-indicator/PercentageIndicatorUtils';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { InteractionCorrectness } from 'libs/shared/enums/InteractionCorrectness';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useVerifiedEmailRequiredErrorHandler } from 'libs/shared/hooks/useVerifiedEmailRequiredErrorHandler';\nimport { CurrentUser, Interactive, InteractiveMetadata, PopupViewProps } from 'libs/shared/interfaces';\nimport { InteractiveCorrectnessHelper } from 'libs/shared/utils/InteractiveCorrectnessHelper';\nimport { getInteractions, getStudentResult } from 'libs/shared/utils/InteractiveHelper';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport { useGetRequestFilter } from 'shared/hooks/UseGetFilterQueryParams';\nimport { getReportFriendlyDate } from 'shared/views/generate-report/GenerateReportView';\n\nimport { useGetResultsTableData } from 'apps/interactives/views/interactive-student-results-list/components/student-results-table/StudentResultsTableUtils';\n\nconst namespace = 'interactives.generateReport';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface GenerateInteractiveResultsReportViewProps extends PopupViewProps {\n interactiveId: string;\n}\n\nexport function GenerateInteractiveResultsReportView(props: GenerateInteractiveResultsReportViewProps): JSX.Element {\n const alerts = useAlerts();\n const fetchAsync = Flight.useGetFetchAsync();\n const filterQueryParams = useGetRequestFilter();\n const [ showSpinner, setShowSpinner ] = React.useState(false);\n\n const { loading, handleGenerateReportError } = useVerifiedEmailRequiredErrorHandler();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(\n InteractiveRequests.interactiveMetadata(props.interactiveId)\n );\n const interactive = Flight.useBasicFetch<Interactive>(interactiveMetadata.data?.interactiveId ?\n InteractiveRequests.interactive(interactiveMetadata.data.interactiveId) : null);\n const requestFilter = useGetRequestFilter();\n const results = useFetchInteractiveResults(props.interactiveId, requestFilter);\n\n const interactions = getInteractions(interactive.data);\n\n const answerData = useGetResultsTableData(interactive.data, results.data, false);\n\n function onClickGenerate(): void {\n setShowSpinner(true);\n\n const body: InteractiveResultsReport = {\n interactiveName: interactiveMetadata.data.name,\n userId: currentUser.data.id,\n customerId: currentUser.data.customerId,\n questions: interactions.map(i => i.name),\n rows: answerData.map(answer => {\n return {\n name: UserHelper.getFullName(answer.user),\n unanswered: answer.summary.unanswered,\n percentage: getFormattedPercentage(getPercentageToFixed(answer.summary.percentCorrect)),\n correct: answer.summary.correct,\n totalQuestions: answer.summary.answered + answer.summary.unanswered,\n results: interactions.map(interaction => {\n const correctness = InteractiveCorrectnessHelper.isInteractionCorrect(\n interaction,\n getStudentResult(answer)\n );\n\n switch (correctness) {\n case InteractionCorrectness.Correct:\n return getPhrase('correct');\n\n case InteractionCorrectness.Incorrect:\n return getPhrase('incorrect');\n\n case InteractionCorrectness.NotApplicable:\n return '-';\n\n case InteractionCorrectness.AwaitingMarking:\n return getPhrase('awaitingMarking');\n\n case InteractionCorrectness.UnAnswered:\n case InteractionCorrectness.Answered:\n default:\n return '';\n }\n })\n };\n })\n };\n\n fetchAsync(InteractiveResultsRequests.interactiveResultsReport(body))\n .then(() => {\n alerts.success(getPhrase('success'));\n })\n .catch((xhr: Xhr) => handleGenerateReportError(xhr, getPhrase('error'), getPhrase('noEmailError')))\n .finally(props.closePopup);\n }\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <Popup\n title={getPhrase('title')}\n showLoadingSpinner={!currentUser.hasCompleted || loading}\n closePopup={props.closePopup}\n >\n <p>\n <Text phrase='description' />\n </p>\n <p>\n <Text phrase='dateRange' options={({\n dateFrom: getReportFriendlyDate(filterQueryParams.start),\n dateTo: getReportFriendlyDate(filterQueryParams.end)\n })} />\n </p>\n <p>\n <Text phrase='emailDescription' />\n </p>\n <PopupButtons>\n <PopupButtons.Cancel onClick={props.closePopup} />\n <PopupButtons.Submit\n variant='dark'\n onClick={onClickGenerate}\n text={getPhrase('generateReport')}\n showSpinner={showSpinner}\n />\n </PopupButtons>\n </Popup>\n </LanguageNamespaceContext.Provider>\n );\n}"],"names":["namespace","getPhrase","LanguageService","GenerateInteractiveResultsReportView","props","alerts","useAlerts","fetchAsync","Flight.useGetFetchAsync","filterQueryParams","useGetRequestFilter","showSpinner","setShowSpinner","React","loading","handleGenerateReportError","useVerifiedEmailRequiredErrorHandler","currentUser","Flight.useBasicFetch","UserRequests","interactiveMetadata","InteractiveRequests","interactive","_a","requestFilter","results","useFetchInteractiveResults","interactions","getInteractions","answerData","useGetResultsTableData","onClickGenerate","body","i","answer","UserHelper","getFormattedPercentage","getPercentageToFixed","interaction","InteractiveCorrectnessHelper","getStudentResult","InteractionCorrectness","InteractiveResultsRequests","xhr","jsx","LanguageNamespaceContext","jsxs","Popup","Text","getReportFriendlyDate","PopupButtons"],"mappings":"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"}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{j as e,u,bN as h,e as f,L as v,v as w,O as p,bE as $,c as H,V,d as L,i as T,A as q,g as D,b as F,ad as O,a as G,P as U,T as B}from"./app-5iiM5qQY.js";import{u as S}from"./DJzpw8qX.chunk.js";import{u as Q}from"./CSmXZuTZ.chunk.js";import{u as N}from"./BvArNs1K.chunk.js";import{u as b}from"./D2pFW6EB.chunk.js";import{u as K,a as W}from"./DFlfmBPU.chunk.js";import{u as z}from"./BxBPX67V.chunk.js";import{P as Y,E as J}from"./DxOc33K6.chunk.js";import{V as X}from"./DAajosqn.chunk.js";import{V as Z}from"./8CNwntVY.chunk.js";import{u as ee,I as te}from"./BLEXuU9u.chunk.js";import{M as ae}from"./BsOLqypJ.chunk.js";import{O as se}from"./BhPjzT2a.chunk.js";import{u as ne}from"./yaRKidLW.chunk.js";import{g as re,a as ie,b as ce,c as de}from"./DTL-Rceb.chunk.js";import{S as g}from"./5O9SdVRZ.chunk.js";import{I as oe}from"./CNgTzzan.chunk.js";import{P as k,a as C}from"./P3PkkK_o.chunk.js";import{a as le}from"./CsP3Lruv.chunk.js";import{E as me}from"./BIIsc-MA.chunk.js";import"./sFV5nxD4.chunk.js";import"./C8oA7_zY.chunk.js";import"./Ddy6mQmA.chunk.js";import"./BLuY6AYO.chunk.js";import"./C0Ak1kpS.chunk.js";import"./DNP9cLqQ.chunk.js";import"./DMd0fZar.chunk.js";import"./C6UUJ8P5.chunk.js";import"./B9I2jvNY.chunk.js";import"./DvV9e2O3.chunk.js";import"./k_p1R4KR.chunk.js";import"./uBcZoYae.chunk.js";import"./Bgidb-to.chunk.js";import"./BlUKEHqx.chunk.js";import"./SA1hxE7y.chunk.js";import"./BqY3bZyH.chunk.js";import"./Cs1UnwSi.chunk.js";import"./DTotSVIi.chunk.js";const ue="_container_eav1c_1",he={container:ue};function ge(t){return e.jsx("div",{className:`rounded bg-white p-3 ${he.container}`,children:t.children})}function xe(t){return t>=g.HIGH?"text-success":t>=g.MODERATE?"text-warning":"text-danger"}function ve(t){return`${Math.round(t*100)}%`}function pe(t){return t.markingRequired?{subheading:"markingRequiredSubheading",description:"markingRequiredDescription"}:typeof t.score!="number"?{subheading:"noScoresSubheading",description:"noScoresDescription"}:t.score>=g.HIGH?{subheading:"highScoreSubheading",description:"highScoreDescription"}:t.score>=g.MODERATE?{subheading:"moderateScoreSubheading",description:"moderateScoreDescription"}:{subheading:"lowScoreSubheading",description:"lowScoreDescription"}}function je(t,n){const s=[];let r=!1;return n.students.forEach(c=>{const a=re(t,c);s.push(a.percentCorrect),a.awaitingMarking&&(r=!0)}),{score:s.length?s.reduce((c,a)=>c+a,0)/s.length:null,markingRequired:r}}const Ie="_percentage_aor5o_1",fe={percentage:Ie},Se="interactives.averageScoreCard",j=v.encloseNamespace(Se);function Ne(t){var x;const n=u(h.interactiveMetadata(t.interactiveMetadataId)),s=u((x=n.data)!=null&&x.interactiveId?h.interactive(n.data.interactiveId):null),r=f(),c=S(t.interactiveMetadataId,r);b(n),N([n,c]);const a=!!s.data&&!!c.data,i=a&&je(s.data,c.data),{subheading:d,description:o}=pe(i);return a?e.jsxs("div",{className:"rounded bg-white p-3",children:[e.jsx("h3",{className:"h6 mb-3",children:j("heading")}),e.jsxs(e.Fragment,{children:[e.jsx("div",{className:`${fe.percentage} text-center py-2`,children:!i.markingRequired&&typeof i.score=="number"?e.jsx("span",{className:xe(i.score),children:ve(i.score)}):e.jsx("span",{className:"text-info",children:"--%"})}),e.jsxs("div",{className:"text-center",children:[e.jsx("p",{className:"m-0",children:e.jsx("strong",{children:j(d)})}),e.jsx("p",{className:"m-0",children:j(o)})]})]})]}):e.jsx(ge,{children:e.jsx("h3",{className:"h6",children:j("heading")})})}const be="interactives.hardestQuestionCard",R=v.encloseNamespace(be);function ye(t,n){const r=ie(t).map(a=>({...a,resultsSummary:ce(a,n)})).filter(a=>!!a.resultsSummary.answered&&!a.resultsSummary.awaitingMarking),c=w.sortBy(r,a=>a.resultsSummary.percentCorrect);return w.first(c)}function we(t){var d,o;const n=u(h.interactiveMetadata(t.interactiveMetadataId)),s=u((d=n.data)!=null&&d.interactiveId?h.interactive(n.data.interactiveId):null),r=f(),c=S(t.interactiveMetadataId,r);b(n),N([n,c]);const a=!!s.data&&!!c.data,i=a&&ye(s.data,c.data);return e.jsxs("div",{className:"rounded bg-white p-3",children:[e.jsx("h3",{className:"h6 mb-2",children:R("heading")}),a&&e.jsxs("div",{className:"d-flex align-items-center",children:[e.jsx(k,{percentage:(o=i==null?void 0:i.resultsSummary)==null?void 0:o.percentCorrect,layout:C.LabelInside}),i?e.jsx("div",{className:"d-flex ms-2",children:e.jsx(oe,{interaction:i,iconClassName:"flex-shrink-0"})}):e.jsx("span",{className:"ms-2",children:R("empty")})]}),!a&&e.jsx(Y,{layout:C.LabelInside})]})}const Ce="_container_1n7u9_1",Me={container:Ce};function y(){return e.jsx("div",{className:`bg-white rounded mt-3 ${Me.container}`})}const _e="_emptyState_f6c1y_1",Re={emptyState:_e},Ee="interactives.studentResultInsightsEmptyState",E=v.encloseNamespace(Ee);function Pe(){return e.jsxs(p,{className:`${Re.emptyState} justify-content-center`,children:[e.jsx(p.Image,{src:$.EmptyStates.Interactives.StudentInsights,className:"w-75 h-auto"}),e.jsx(p.Heading,{children:E("heading")}),e.jsx(p.Info,{className:"w-100",children:E("description")})]})}const ke="_numberCircle_11ecw_1",Ae="_studentsContainer_11ecw_5",$e="_studentRow_11ecw_8",He="_indicatorRing_11ecw_11",Ve="_ringSuccess_11ecw_29",Le="_ringDanger_11ecw_32",Te="_ringInfo_11ecw_35",qe="_percentageIndicator_11ecw_38",m={numberCircle:ke,studentsContainer:Ae,studentRow:$e,indicatorRing:He,ringSuccess:Ve,ringDanger:Le,ringInfo:Te,percentageIndicator:qe},De="0.3rem";function Fe(t){const n=w.first(t);return n.summary.awaitingMarking?"bg-blue":n.summary.percentCorrect>=g.HIGH?"bg-success":"bg-danger"}function Oe(t){return t.summary.awaitingMarking?m.ringInfo:t.summary.percentCorrect>=g.HIGH?m.ringSuccess:m.ringDanger}I.defaultProps={displayLimit:3};function I(t){const[n]=H(V.ANONYMISE_USERS);return e.jsxs("div",{className:"bg-white rounded p-3 mt-3",children:[e.jsxs("div",{className:"d-flex justify-content-between align-items-center mb-2",children:[e.jsx("h4",{className:"h6 m-0",children:e.jsx(me,{emoji:t.headingEmoji,children:t.heading})}),!!t.students.length&&e.jsx("div",{className:`
|
|
2
|
-
text-white text-center rounded-circle
|
|
3
|
-
${m.numberCircle} ${Fe(t.students)}`,children:t.students.length})]}),e.jsx("div",{className:m.studentsContainer,children:t.students.length?e.jsx("ul",{className:"list-unstyled m-0",children:t.students.slice(0,t.displayLimit).map((s,r)=>e.jsxs("li",{className:`d-flex justify-content-between align-items-center ${m.studentRow}`,children:[e.jsxs("span",{className:"d-flex align-items-center text-truncate",children:[e.jsx("div",{className:m.indicatorRing,children:e.jsx("svg",{children:e.jsx("circle",{r:De,className:Oe(s)})})}),e.jsx("span",{className:"text-truncate",children:le(s.user,n)})]}),!s.summary.awaitingMarking&&e.jsx("span",{className:m.percentageIndicator,children:e.jsx(k,{percentage:s.summary.percentCorrect,layout:C.LabelBefore})})]},r))}):e.jsx("p",{className:"mt-1 mb-0",children:t.emptyStateText})})]})}const Ge="interactives.studentResultInsightsCard",l=v.encloseNamespace(Ge);function Ue(t){var o;const n=L(),s=u(h.interactiveMetadata(t.interactiveMetadataId)),r=u((o=s.data)!=null&&o.interactiveId?h.interactive(s.data.interactiveId):null),c=f(),a=S(t.interactiveMetadataId,c);b(s),N([s,a]);const i=!!r.data&&!!a.data,d=i&&de(r.data,a.data);return e.jsxs("div",{className:"d-flex flex-column",children:[e.jsxs("div",{className:"bg-white rounded p-3",children:[e.jsx("h3",{className:"h6 m-0",children:l("heading")}),i&&!a.data.students.length&&e.jsx(Pe,{})]}),i&&!!a.data.students.length&&e.jsxs(e.Fragment,{children:[e.jsx(I,{heading:l("markingRequired"),headingEmoji:"๐",students:d.markingRequired,emptyStateText:l("markingRequiredEmpty")}),e.jsx(I,{heading:l("needHelp"),headingEmoji:"โ",students:d.lowScore,emptyStateText:l("needHelpEmpty")}),e.jsx(I,{heading:l("topAchievers"),headingEmoji:"๐
",students:d.highScore,emptyStateText:l("topAchieversEmpty")}),e.jsx(T,{className:"btn btn-outline-dark mt-3",appLink:{application:D.INTERACTIVES,action:q.Interactives.RESULTS,args:[t.interactiveMetadataId],params:n},children:l("seeAll")})]}),!i&&e.jsxs(e.Fragment,{children:[e.jsx(y,{}),e.jsx(y,{}),e.jsx(y,{}),e.jsx("button",{className:"btn btn-outline-dark mt-3 cursor-default",children:"ย "})]})]})}const Be="_pieChart_1xbkb_1",Qe="_barChart_1xbkb_4",P={pieChart:Be,barChart:Qe},A="reportsInteractives.interactiveOverview",Ke=v.encloseNamespace(A);function kt(t){var o,x,M,_;const{hasPermissions:n}=F(),{hasShareFlowV2:s}=O(null),r=u(h.interactiveMetadata(t.interactiveMetadataId)),c=u((o=r.data)!=null&&o.interactiveId?h.interactive(r.data.interactiveId):null),a=f(),i=S(t.interactiveMetadataId,a);G({title:Ke("pageTitle",{interactive:(x=r.data)==null?void 0:x.name})}),z((M=r.data)==null?void 0:M.name),K(W(r.data)),ne(t.interactiveMetadataId),ee(t.interactiveMetadataId),b(r),N([c,i]),Q(r);const d=s&&n(U.ViewMyShares);return e.jsxs("div",{children:[e.jsx(te,{interactiveMetadataId:t.interactiveMetadataId,hasInsights:d}),!d&&!!c.data&&!!i.data&&e.jsx(ae,{interactive:c.data,results:i.data,interactiveMetadataId:t.interactiveMetadataId}),e.jsxs("div",{className:"row",children:[e.jsxs("div",{className:"col-4",children:[e.jsx(Z,{objectId:t.interactiveMetadataId,useSharerId:!0,className:P.pieChart}),!d&&e.jsx("div",{className:"mt-3",children:e.jsx(Ne,{interactiveMetadataId:t.interactiveMetadataId})})]}),e.jsxs("div",{className:"col-5",children:[e.jsx(X,{objectId:t.interactiveMetadataId,useSharerId:!0,className:P.barChart}),((_=i.data)==null?void 0:_.hasWatchedInLite)===!1?e.jsxs("div",{className:"mt-3 bg-white p-3 pb-3",children:[e.jsx("h3",{className:"h6 mb-2",children:e.jsx(B,{namespace:A,phrase:"averageAmountPlaceholder"})}),e.jsx(se,{})]}):e.jsx("div",{className:"mt-3",children:e.jsx(J,{objectId:t.interactiveMetadataId,layout:"horizontal",useSharerId:!0})}),!d&&e.jsx("div",{className:"mt-3",children:e.jsx(we,{interactiveMetadataId:t.interactiveMetadataId})})]}),!d&&e.jsx("div",{className:"col-3",children:e.jsx(Ue,{interactiveMetadataId:t.interactiveMetadataId})})]})]})}export{kt as InteractiveOverviewView};
|
|
4
|
-
//# sourceMappingURL=CfTCpF5i.chunk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"CfTCpF5i.chunk.js","sources":["../../src/apps/interactives/views/overview-cards/average-score/components/partial-average-score-card/PartialAverageScoreCard.tsx","../../src/apps/interactives/views/overview-cards/average-score/AverageScoreCardUtils.ts","../../src/apps/interactives/views/overview-cards/average-score/AverageScoreCardView.tsx","../../src/apps/interactives/views/overview-cards/hardest-question-card/HardestQuestionCardView.tsx","../../src/apps/interactives/views/overview-cards/student-result-insights-card/components/partial-student-insights-section/PartialStudentInsightsSection.tsx","../../src/apps/interactives/views/overview-cards/student-result-insights-card/components/student-result-insights-empty-state/StudentResultInsightsEmptyState.tsx","../../src/apps/interactives/views/overview-cards/student-result-insights-card/components/student-result-insights-section/StudentResultInsightsSection.tsx","../../src/apps/interactives/views/overview-cards/student-result-insights-card/StudentResultInsightsCardView.tsx","../../src/apps/interactives/views/interactive-overview/InteractiveOverviewView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport styles from './partial-average-score-card.module.scss';\n\nexport function PartialAverageScoreCard(props: React.PropsWithChildren<HashObject>): JSX.Element {\n return (\n <div className={`rounded bg-white p-3 ${styles.container}`}>\n {props.children}\n </div>\n );\n}","import { getStudentResultsSummary } from 'libs/shared/apps/analytics/utils/InteractiveUtils';\nimport { ScoreThresholdDefaults } from 'libs/shared/constants/ScoreThresholds';\nimport { Interactive, InteractiveResultSet } from 'libs/shared/interfaces';\n\ninterface AverageScoreSummary {\n markingRequired: boolean;\n score?: number;\n}\n\nexport function getTextColourClass(score: number): string {\n if (score >= ScoreThresholdDefaults.HIGH)\n return 'text-success';\n\n if (score >= ScoreThresholdDefaults.MODERATE)\n return 'text-warning';\n\n return 'text-danger';\n}\n\nexport function formatPercentage(score: number): string {\n return `${Math.round(score * 100)}%`;\n}\n\nexport function getPhraseKeys(averageScoreSummary: AverageScoreSummary): { subheading: string; description: string } {\n if (averageScoreSummary.markingRequired)\n return { subheading: 'markingRequiredSubheading', description: 'markingRequiredDescription' };\n\n if (typeof averageScoreSummary.score !== 'number')\n return { subheading: 'noScoresSubheading', description: 'noScoresDescription' };\n\n if (averageScoreSummary.score >= ScoreThresholdDefaults.HIGH)\n return { subheading: 'highScoreSubheading', description: 'highScoreDescription' };\n\n if (averageScoreSummary.score >= ScoreThresholdDefaults.MODERATE)\n return { subheading: 'moderateScoreSubheading', description: 'moderateScoreDescription' };\n\n return { subheading: 'lowScoreSubheading', description: 'lowScoreDescription' };\n}\n\nexport function getAverageScoreSummary(interactive: Interactive, results: InteractiveResultSet): AverageScoreSummary {\n const scores: number[] = [];\n let markingRequired = false;\n\n results.students.forEach(s => {\n const summary = getStudentResultsSummary(interactive, s);\n scores.push(summary.percentCorrect);\n\n if (summary.awaitingMarking)\n markingRequired = true;\n });\n\n return {\n score: scores.length ? scores.reduce((a, b) => a + b, 0) / scores.length : null,\n markingRequired\n };\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { useFetchInteractiveResults } from 'libs/shared/apps/analytics/hooks/UseFetchInteractiveResults';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { Interactive, InteractiveMetadata } from 'libs/shared/interfaces';\n\nimport { useGetRequestFilter } from 'shared/hooks/UseGetFilterQueryParams';\nimport { useHandleVideoError } from 'shared/hooks/UseHandleVideoError';\n\nimport { PartialAverageScoreCard } from './components/partial-average-score-card/PartialAverageScoreCard';\nimport { formatPercentage, getAverageScoreSummary, getPhraseKeys, getTextColourClass } from './AverageScoreCardUtils';\n\nimport styles from './average-score-card.module.scss';\n\nconst namespace = 'interactives.averageScoreCard';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface AverageScoreCardViewProps {\n interactiveMetadataId: string;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function AverageScoreCardView(props: AverageScoreCardViewProps): JSX.Element {\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(\n InteractiveRequests.interactiveMetadata(props.interactiveMetadataId)\n );\n const interactive = Flight.useBasicFetch<Interactive>(interactiveMetadata.data?.interactiveId ?\n InteractiveRequests.interactive(interactiveMetadata.data.interactiveId) : null);\n const requestFilter = useGetRequestFilter();\n const results = useFetchInteractiveResults(props.interactiveMetadataId, requestFilter);\n\n useHandleVideoError(interactiveMetadata);\n useHandleObjectError([ interactiveMetadata, results ]);\n\n const dataLoaded = !!interactive.data && !!results.data;\n\n const averageScore = dataLoaded && getAverageScoreSummary(interactive.data, results.data);\n\n const { subheading, description } = getPhraseKeys(averageScore);\n\n if (!dataLoaded) {\n return (\n <PartialAverageScoreCard>\n <h3 className='h6'>{getPhrase('heading')}</h3>\n </PartialAverageScoreCard>\n );\n }\n\n return (\n <div className='rounded bg-white p-3'>\n <h3 className='h6 mb-3'>{getPhrase('heading')}</h3>\n <>\n <div className={`${styles.percentage} text-center py-2`}>\n {(!averageScore.markingRequired && typeof averageScore.score === 'number')\n ? <span className={getTextColourClass(averageScore.score)}>{formatPercentage(averageScore.score)}</span>\n : <span className='text-info'>--%</span>\n }\n </div>\n <div className='text-center'>\n <p className='m-0'><strong>{getPhrase(subheading)}</strong></p>\n <p className='m-0'>{getPhrase(description)}</p>\n </div>\n </>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { useFetchInteractiveResults } from 'libs/shared/apps/analytics/hooks/UseFetchInteractiveResults';\nimport { InteractionWithResultsSummary } from 'libs/shared/apps/analytics/interfaces/InteractionWithResultsSummary';\nimport { getInteractionResultsSummary } from 'libs/shared/apps/analytics/utils/InteractiveUtils';\nimport { InteractionLabel } from 'libs/shared/components/interactive-questions/InteractionLabel';\nimport { PartialPercentageIndicator } from 'libs/shared/components/percentage-indicator/PartialPercentageIndicator';\nimport { PercentageIndicator, PercentageIndicatorLayout } from 'libs/shared/components/percentage-indicator/PercentageIndicator';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { Interactive, InteractiveMetadata, InteractiveResultSet } from 'libs/shared/interfaces';\nimport { getInteractions } from 'libs/shared/utils/InteractiveHelper';\n\nimport { useGetRequestFilter } from 'shared/hooks/UseGetFilterQueryParams';\nimport { useHandleVideoError } from 'shared/hooks/UseHandleVideoError';\n\nconst namespace = 'interactives.hardestQuestionCard';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getHardestQuestion(interactive: Interactive, results: InteractiveResultSet): InteractionWithResultsSummary {\n const interactions: InteractionWithResultsSummary[] = getInteractions(interactive).map(i => ({\n ...i,\n resultsSummary: getInteractionResultsSummary(i, results)\n }));\n\n const answeredInteractions = interactions.filter(i =>\n !!i.resultsSummary.answered && !i.resultsSummary.awaitingMarking);\n\n const sortedInteractions = ArrayHelper.sortBy(\n answeredInteractions,\n i => i.resultsSummary.percentCorrect\n );\n\n return ArrayHelper.first(sortedInteractions);\n}\n\ninterface HardestQuestionCardViewProps {\n interactiveMetadataId: string;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function HardestQuestionCardView(props: HardestQuestionCardViewProps): JSX.Element {\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(\n InteractiveRequests.interactiveMetadata(props.interactiveMetadataId)\n );\n const interactive = Flight.useBasicFetch<Interactive>(interactiveMetadata.data?.interactiveId ?\n InteractiveRequests.interactive(interactiveMetadata.data.interactiveId) : null);\n const requestFilter = useGetRequestFilter();\n const results = useFetchInteractiveResults(props.interactiveMetadataId, requestFilter);\n\n useHandleVideoError(interactiveMetadata);\n useHandleObjectError([ interactiveMetadata, results ]);\n\n const dataLoaded = !!interactive.data && !!results.data;\n\n const hardestQuestion = dataLoaded && getHardestQuestion(interactive.data, results.data);\n\n return (\n <div className='rounded bg-white p-3'>\n <h3 className='h6 mb-2'>{getPhrase('heading')}</h3>\n {dataLoaded &&\n <div className='d-flex align-items-center'>\n <PercentageIndicator\n percentage={hardestQuestion?.resultsSummary?.percentCorrect}\n layout={PercentageIndicatorLayout.LabelInside}\n />\n {hardestQuestion\n ? <div className='d-flex ms-2'>\n <InteractionLabel interaction={hardestQuestion} iconClassName='flex-shrink-0' />\n </div>\n : <span className='ms-2'>{getPhrase('empty')}</span>\n }\n </div>\n }\n {!dataLoaded && <PartialPercentageIndicator layout={PercentageIndicatorLayout.LabelInside} />}\n </div>\n );\n}","import React from 'react';\n\nimport styles from './partial-student-insights-section.module.scss';\n\nexport function PartialStudentInsightsSection(): JSX.Element {\n return (\n <div className={`bg-white rounded mt-3 ${styles.container}`} />\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\n\nimport { ImageUrls } from 'shared/constants/ReportsImageUrls';\n\nimport styles from './student-results-insights-empty-state.module.scss';\n\nconst namespace = 'interactives.studentResultInsightsEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function StudentResultInsightsEmptyState(): JSX.Element {\n return (\n <EmptyState className={`${styles.emptyState} justify-content-center`}>\n <EmptyState.Image\n src={ImageUrls.EmptyStates.Interactives.StudentInsights}\n className='w-75 h-auto'\n />\n <EmptyState.Heading>\n {getPhrase('heading')}\n </EmptyState.Heading>\n <EmptyState.Info className='w-100'>\n {getPhrase('description')}\n </EmptyState.Info>\n </EmptyState>\n );\n}","import React from 'react';\n\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { StudentResultsWithSummary } from 'libs/shared/apps/analytics/interfaces/StudentResultsWithSummary';\nimport { anonymiseUserName } from 'libs/shared/apps/analytics/utils/AnonymiseUserUtils';\nimport { EmojiText } from 'libs/shared/components/emoji-text/EmojiText';\nimport { PercentageIndicator, PercentageIndicatorLayout } from 'libs/shared/components/percentage-indicator/PercentageIndicator';\nimport { ScoreThresholdDefaults } from 'libs/shared/constants/ScoreThresholds';\n\nimport { ViewModelKeys } from 'shared/constants/ReportsViewModels';\n\nimport styles from './student-result-insights-section.module.scss';\n\n// If this is changed it must be changed in student-result-insights-section.scss too\nconst INDICATOR_RING_RADIUS = '0.3rem';\n\nfunction getIndicatorBackgroundColour(students: StudentResultsWithSummary[]): string {\n const firstStudent = ArrayHelper.first(students);\n\n if (firstStudent.summary.awaitingMarking)\n return 'bg-blue';\n\n if (firstStudent.summary.percentCorrect >= ScoreThresholdDefaults.HIGH)\n return 'bg-success';\n\n return 'bg-danger';\n}\n\nfunction getIndicatorRingColourClass(student: StudentResultsWithSummary): string {\n if (student.summary.awaitingMarking)\n return styles.ringInfo;\n\n if (student.summary.percentCorrect >= ScoreThresholdDefaults.HIGH)\n return styles.ringSuccess;\n\n return styles.ringDanger;\n}\n\ninterface StudentResultInsightsSectionProps {\n heading: string;\n headingEmoji: string;\n students: StudentResultsWithSummary[];\n emptyStateText: string;\n displayLimit: number;\n}\n\nStudentResultInsightsSection.defaultProps = {\n displayLimit: 3\n};\n\nexport function StudentResultInsightsSection(props: StudentResultInsightsSectionProps): JSX.Element {\n const [anonymiseUsers] = useViewModel<boolean>(ViewModelKeys.ANONYMISE_USERS);\n\n return (\n <div className='bg-white rounded p-3 mt-3'>\n <div className='d-flex justify-content-between align-items-center mb-2'>\n <h4 className='h6 m-0'>\n <EmojiText emoji={props.headingEmoji}>{props.heading}</EmojiText>\n </h4>\n {!!props.students.length &&\n <div\n className={`\n text-white text-center rounded-circle\n ${styles.numberCircle} ${getIndicatorBackgroundColour(props.students)}`\n }\n >\n {props.students.length}\n </div>\n }\n </div>\n <div className={styles.studentsContainer}>\n {props.students.length\n ? <ul className='list-unstyled m-0'>\n {props.students.slice(0, props.displayLimit).map((s, idx) => (\n <li key={idx} className={`d-flex justify-content-between align-items-center ${styles.studentRow}`}>\n <span className='d-flex align-items-center text-truncate'>\n <div className={styles.indicatorRing}>\n <svg>\n <circle r={INDICATOR_RING_RADIUS} className={getIndicatorRingColourClass(s)} />\n </svg>\n </div>\n <span className='text-truncate'>{anonymiseUserName(s.user, anonymiseUsers)}</span>\n </span>\n {!s.summary.awaitingMarking &&\n <span className={styles.percentageIndicator}>\n <PercentageIndicator\n percentage={s.summary.percentCorrect}\n layout={PercentageIndicatorLayout.LabelBefore}\n />\n </span>\n }\n </li>\n ))}\n </ul>\n : <p className='mt-1 mb-0'>{props.emptyStateText}</p>\n }\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { useFetchInteractiveResults } from 'libs/shared/apps/analytics/hooks/UseFetchInteractiveResults';\nimport { groupStudents } from 'libs/shared/apps/analytics/utils/InteractiveUtils';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { Interactive, InteractiveMetadata } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/ReportsActions';\nimport { AppChannels } from 'shared/constants/ReportsRadioChannels';\nimport { useGetAppLinkFilterParams, useGetRequestFilter } from 'shared/hooks/UseGetFilterQueryParams';\nimport { useHandleVideoError } from 'shared/hooks/UseHandleVideoError';\n\nimport { PartialStudentInsightsSection } from './components/partial-student-insights-section/PartialStudentInsightsSection';\nimport { StudentResultInsightsEmptyState } from './components/student-result-insights-empty-state/StudentResultInsightsEmptyState';\nimport { StudentResultInsightsSection } from './components/student-result-insights-section/StudentResultInsightsSection';\n\nconst namespace = 'interactives.studentResultInsightsCard';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface StudentResultInsightsCardViewProps {\n interactiveMetadataId: string;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function StudentResultInsightsCardView(props: StudentResultInsightsCardViewProps): JSX.Element {\n const filterQueryParams = useGetAppLinkFilterParams();\n\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(\n InteractiveRequests.interactiveMetadata(props.interactiveMetadataId)\n );\n const interactive = Flight.useBasicFetch<Interactive>(interactiveMetadata.data?.interactiveId ?\n InteractiveRequests.interactive(interactiveMetadata.data.interactiveId) : null);\n const requestFilter = useGetRequestFilter();\n const results = useFetchInteractiveResults(props.interactiveMetadataId, requestFilter);\n\n useHandleVideoError(interactiveMetadata);\n useHandleObjectError([ interactiveMetadata, results ]);\n\n const dataLoaded = !!interactive.data && !!results.data;\n\n const studentGroups = dataLoaded && groupStudents(interactive.data, results.data);\n\n return (\n <div className='d-flex flex-column'>\n <div className='bg-white rounded p-3'>\n <h3 className='h6 m-0'>{getPhrase('heading')}</h3>\n {dataLoaded && !results.data.students.length &&\n <StudentResultInsightsEmptyState />\n }\n </div>\n {dataLoaded && !!results.data.students.length &&\n <>\n <StudentResultInsightsSection\n heading={getPhrase('markingRequired')}\n headingEmoji='๐'\n students={studentGroups.markingRequired}\n emptyStateText={getPhrase('markingRequiredEmpty')}\n />\n <StudentResultInsightsSection\n heading={getPhrase('needHelp')}\n headingEmoji='โ'\n students={studentGroups.lowScore}\n emptyStateText={getPhrase('needHelpEmpty')}\n />\n <StudentResultInsightsSection\n heading={getPhrase('topAchievers')}\n headingEmoji='๐
'\n students={studentGroups.highScore}\n emptyStateText={getPhrase('topAchieversEmpty')}\n />\n <AppLink\n className='btn btn-outline-dark mt-3'\n appLink={{\n application: AppChannels.INTERACTIVES,\n action: Actions.Interactives.RESULTS,\n args: [props.interactiveMetadataId],\n params: filterQueryParams\n }}\n >\n {getPhrase('seeAll')}\n </AppLink>\n </>\n }\n {!dataLoaded &&\n <>\n <PartialStudentInsightsSection />\n <PartialStudentInsightsSection />\n <PartialStudentInsightsSection />\n <button className='btn btn-outline-dark mt-3 cursor-default'>\n \n </button>\n </>\n }\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { useFetchInteractiveResults } from 'libs/shared/apps/analytics/hooks/UseFetchInteractiveResults';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\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 { Interactive, InteractiveMetadata } from 'libs/shared/interfaces';\n\nimport { useGetRequestFilter } from 'shared/hooks/UseGetFilterQueryParams';\nimport { useHandleVideoError } from 'shared/hooks/UseHandleVideoError';\nimport { useSetHeaderActions } from 'shared/hooks/UseSetHeaderActions';\nimport { useSetHeaderTitle } from 'shared/hooks/UseSetHeaderTitle';\nimport { useGetObjectHeaderActions } from 'shared/utils/HeaderActionUtils';\nimport { EngagementOverviewCardView } from 'shared/views/overview-cards/engagement-overview-card/EngagementOverviewCardView';\nimport { ViewCountBarChartCardView } from 'shared/views/overview-cards/view-count-bar-chart-card/ViewCountBarChartCardView';\nimport { ViewCountPieChartCardView } from 'shared/views/overview-cards/view-count-pie-chart-card/ViewCountPieChartCardView';\n\nimport { InteractiveNav } from 'apps/interactives/components/interactive-nav/InteractiveNav';\nimport { MarkingRequiredAlert } from 'apps/interactives/components/marking-required-alert/MarkingRequiredAlert';\nimport { OnlineDataWarning } from 'apps/interactives/components/online-data-warning/OnlineDataWarning';\nimport { useNoResultsPopup } from 'apps/interactives/hooks/UseNoResultsPopup';\nimport { useSetSuggestedInteractiveResultsAudience } from 'apps/interactives/hooks/UseSetSuggestedInteractiveResultsAudience';\nimport { AverageScoreCardView } from 'apps/interactives/views/overview-cards/average-score/AverageScoreCardView';\nimport { HardestQuestionCardView } from 'apps/interactives/views/overview-cards/hardest-question-card/HardestQuestionCardView';\nimport { StudentResultInsightsCardView } from 'apps/interactives/views/overview-cards/student-result-insights-card/StudentResultInsightsCardView';\n\nimport styles from './interactive-overview.module.scss';\n\nconst namespace = 'reportsInteractives.interactiveOverview';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InteractiveOverviewViewProps {\n interactiveMetadataId: string;\n}\n\nexport function InteractiveOverviewView(props: InteractiveOverviewViewProps): JSX.Element {\n const { hasPermissions } = usePermissions();\n const { hasShareFlowV2 } = useSettings(null);\n\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(\n InteractiveRequests.interactiveMetadata(props.interactiveMetadataId)\n );\n const interactive = Flight.useBasicFetch<Interactive>(interactiveMetadata.data?.interactiveId ?\n InteractiveRequests.interactive(interactiveMetadata.data.interactiveId) : null);\n const requestFilter = useGetRequestFilter();\n const results = useFetchInteractiveResults(props.interactiveMetadataId, requestFilter);\n\n useSetPageMetadata({ title: getPhrase('pageTitle', { interactive: interactiveMetadata.data?.name }) });\n useSetHeaderTitle(interactiveMetadata.data?.name);\n useSetHeaderActions(useGetObjectHeaderActions(interactiveMetadata.data));\n useSetSuggestedInteractiveResultsAudience(props.interactiveMetadataId);\n useNoResultsPopup(props.interactiveMetadataId);\n\n useHandleVideoError(interactiveMetadata);\n useHandleObjectError([ interactive, results ]);\n useCannotConsumeError(interactiveMetadata);\n\n const hasInsightsPermission = hasShareFlowV2 && hasPermissions(PermissionName.ViewMyShares);\n\n return (\n <div>\n <InteractiveNav\n interactiveMetadataId={props.interactiveMetadataId}\n hasInsights={hasInsightsPermission}\n />\n {!hasInsightsPermission && !!interactive.data && !!results.data &&\n <MarkingRequiredAlert\n interactive={interactive.data}\n results={results.data}\n interactiveMetadataId={props.interactiveMetadataId}\n />\n }\n <div className='row'>\n <div className='col-4'>\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={styles.pieChart}\n />\n {!hasInsightsPermission && <div className='mt-3'>\n <AverageScoreCardView interactiveMetadataId={props.interactiveMetadataId} />\n </div>}\n </div>\n <div className='col-5'>\n <ViewCountBarChartCardView\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={styles.barChart}\n />\n {results.data?.hasWatchedInLite === false\n ? <div className='mt-3 bg-white p-3 pb-3'>\n <h3 className='h6 mb-2'><Text namespace={namespace} phrase='averageAmountPlaceholder' /></h3>\n <OnlineDataWarning />\n </div>\n : <div className='mt-3'>\n <EngagementOverviewCardView\n objectId={props.interactiveMetadataId}\n layout='horizontal'\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 />\n </div>\n }\n {!hasInsightsPermission && <div className='mt-3'>\n <HardestQuestionCardView interactiveMetadataId={props.interactiveMetadataId} />\n </div>}\n </div>\n {!hasInsightsPermission && <div className='col-3'>\n <StudentResultInsightsCardView interactiveMetadataId={props.interactiveMetadataId} />\n </div>}\n </div>\n </div>\n );\n}"],"names":["PartialAverageScoreCard","props","jsx","styles","getTextColourClass","score","ScoreThresholdDefaults","formatPercentage","getPhraseKeys","averageScoreSummary","getAverageScoreSummary","interactive","results","scores","markingRequired","s","summary","getStudentResultsSummary","a","b","namespace","getPhrase","LanguageService","AverageScoreCardView","interactiveMetadata","Flight.useBasicFetch","InteractiveRequests","_a","requestFilter","useGetRequestFilter","useFetchInteractiveResults","useHandleVideoError","useHandleObjectError","dataLoaded","averageScore","subheading","description","jsxs","Fragment","getHardestQuestion","answeredInteractions","getInteractions","i","getInteractionResultsSummary","sortedInteractions","ArrayHelper","HardestQuestionCardView","hardestQuestion","PercentageIndicator","_b","PercentageIndicatorLayout","InteractionLabel","PartialPercentageIndicator","PartialStudentInsightsSection","StudentResultInsightsEmptyState","EmptyState","ImageUrls","INDICATOR_RING_RADIUS","getIndicatorBackgroundColour","students","firstStudent","getIndicatorRingColourClass","student","StudentResultInsightsSection","anonymiseUsers","useViewModel","ViewModelKeys","EmojiText","idx","StudentResultInsightsCardView","filterQueryParams","useGetAppLinkFilterParams","studentGroups","groupStudents","AppLink","AppChannels","Actions","InteractiveOverviewView","hasPermissions","usePermissions","hasShareFlowV2","useSettings","useSetPageMetadata","useSetHeaderTitle","_c","useSetHeaderActions","useGetObjectHeaderActions","useSetSuggestedInteractiveResultsAudience","useNoResultsPopup","useCannotConsumeError","hasInsightsPermission","PermissionName","InteractiveNav","MarkingRequiredAlert","ViewCountPieChartCardView","ViewCountBarChartCardView","_d","Text","OnlineDataWarning","EngagementOverviewCardView"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Cl1c9Acb.chunk.js","sources":["../../../../libs/shared/src/context/player-context/PlayerContext.tsx"],"sourcesContent":["import React from 'react';\nimport { createHtmlPortalNode, HtmlPortalNode } from 'react-reverse-portal';\n\nimport { PlayerInitializationData } from 'libs/shared/context/player-context/interfaces/PlayerContextAction';\nimport { PlayerContextState } from 'libs/shared/context/player-context/interfaces/PlayerContextState';\nimport { PlayerMode } from 'libs/shared/context/player-context/interfaces/PlayerMode';\nimport { PlayerReference } from 'libs/shared/context/player-context/interfaces/PlayerReference';\nimport { playerContextReducer } from 'libs/shared/context/player-context/reducer/PlayerContextReducer';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\n\nexport interface PlayerContextValues extends PlayerContextState {\n playerRef?: React.MutableRefObject<PlayerReference>;\n portalNode?: HtmlPortalNode;\n questionListPortalNode?: HtmlPortalNode;\n\n useInitialize?: (initializeData: PlayerInitializationData) => void;\n dispose?: () => void;\n setPlayerRef?: (player: any) => void;\n setPlayerMode?: (mode: PlayerMode) => void;\n setStarted?: (started: boolean) => void;\n setPersist?: () => void;\n\n /**\n * Tells components if an instance of <PlayerContextProvider /> exists\n * above them in the tree. I.e. When this is used in curator.\n */\n hasProvider: boolean;\n}\n\nconst PlayerContext = React.createContext<PlayerContextValues>({ hasProvider: false });\n\nexport function usePlayerContext() {\n return React.useContext(PlayerContext);\n}\n\nexport function PlayerContextProvider(props: React.PropsWithChildren) {\n const [ state, dispatch ] = React.useReducer(playerContextReducer, {});\n\n const { hasPreviewVideos } = useSettings(null);\n\n const playerRef = React.useRef<any>(null);\n const portalNode = React.useMemo(() => createHtmlPortalNode(\n { attributes: { class: 'cv-theatre-mode-video-container' } }\n ), []);\n\n const questionListPortalNode = React.useMemo(createHtmlPortalNode, []);\n\n function setPlayerRef(player: PlayerReference) {\n playerRef.current = player;\n }\n\n function useInitialize(initializeData: PlayerInitializationData) {\n const enabled = hasPreviewVideos || initializeData.mode !== 'hover';\n\n React.useEffect(() => {\n if (!enabled)\n return;\n\n /**\n * Cannot initialize a hover player if we already have a player elsewhere.\n */\n if (initializeData.mode === 'hover' && state.mode)\n return;\n\n /**\n * No hover to play on interactives. This feature is ComingSoonโข๏ธ - Sha\n */\n if (initializeData.mode === 'hover' && initializeData.objectTypeId === MasterType.Interactive)\n return;\n\n dispatch({\n type: 'initialize',\n data: initializeData\n });\n\n return disposeInternal;\n }, []);\n\n React.useEffect(() => {\n if (!enabled)\n return;\n\n return () => {\n if (!state.disposed)\n return;\n\n playerRef.current = null;\n };\n }, [state.disposed]);\n }\n\n function setPlayerMode(mode: PlayerMode) {\n dispatch({ type: 'mode', data: { mode } });\n }\n\n function setStarted(): void {\n dispatch({ type: 'started' });\n }\n\n function disposeInternal(force: boolean = false): void {\n dispatch({ type: 'dispose', data: { force: force } });\n }\n\n function setPersist(): void {\n dispatch({ type: 'persist' });\n }\n\n /**\n * If anything external calls dispose, we ignore the persist flag and force a disposal\n */\n function dispose(): void {\n disposeInternal(true);\n }\n\n const playerContextValues: PlayerContextValues = {\n ...state,\n playerRef,\n setPlayerRef,\n portalNode,\n questionListPortalNode,\n useInitialize,\n setPlayerMode,\n setStarted,\n dispose,\n setPersist,\n hasProvider: true\n };\n\n return (\n <PlayerContext.Provider value={playerContextValues}>\n {props.children}\n </PlayerContext.Provider>\n );\n}"],"names":["PlayerContext","React","usePlayerContext"],"mappings":"kEA8BA,MAAMA,EAAgBC,EAAM,cAAmC,CAAE,YAAa,GAAO,EAE9E,SAASC,GAAmB,CACjC,OAAOD,EAAM,WAAWD,CAAa,CACvC"}
|