@clickview/streamable-learning 0.35.0 → 0.36.1-dev.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/bundles.json +2 -2
- package/dist/css/B-attovs.chunk.css +9 -0
- package/dist/css/B1NucFMn.chunk.css +1 -0
- package/dist/css/BPdg7JW4.chunk.css +1 -0
- package/dist/css/BPrUSCaY.chunk.css +1 -0
- package/dist/css/BR0fUt9D.chunk.css +1 -0
- package/dist/css/BhYm6SRm.chunk.css +1 -0
- package/dist/css/BiRz4h1c.chunk.css +1 -0
- package/dist/css/Bq1ChJn4.chunk.css +1 -0
- package/dist/css/Bt85j9js.chunk.css +1 -0
- package/dist/css/BuYrqi9E.chunk.css +1 -0
- package/dist/css/BugV1Bpa.chunk.css +1 -0
- package/dist/css/BuuVPl7n.chunk.css +1 -0
- package/dist/css/C1NkrNqQ.chunk.css +1 -0
- package/dist/css/C1qv5jz5.chunk.css +1 -0
- package/dist/css/C7XoyEPr.chunk.css +1 -0
- package/dist/css/C7_MDu56.chunk.css +1 -0
- package/dist/css/CC5F5C8O.chunk.css +1 -0
- package/dist/css/CChSC6Ta.chunk.css +1 -0
- package/dist/css/CCsCPLDG.chunk.css +1 -0
- package/dist/css/CD1qrI1T.chunk.css +1 -0
- package/dist/css/CKqvCBj4.chunk.css +1 -0
- package/dist/css/CLZ0Ycds.chunk.css +1 -0
- package/dist/css/CO7M4rZW.chunk.css +1 -0
- package/dist/css/CY0yvCW4.chunk.css +1 -0
- package/dist/css/CYGsw8FT.chunk.css +1 -0
- package/dist/css/Cbi3KYBa.chunk.css +1 -0
- package/dist/css/CgWQu_Ss.chunk.css +1 -0
- package/dist/css/CliS8Q8r.chunk.css +1 -0
- package/dist/css/D-kQKsZN.chunk.css +1 -0
- package/dist/css/D2NwUVrK.chunk.css +1 -0
- package/dist/css/D4g1IoUU.chunk.css +1 -0
- package/dist/css/DBgpcO3T.chunk.css +1 -0
- package/dist/css/DDnpOnVB.chunk.css +1 -0
- package/dist/css/DZJSONGP.chunk.css +1 -0
- package/dist/css/DeAfaPiD.chunk.css +1 -0
- package/dist/css/Dj731zLm.chunk.css +1 -0
- package/dist/css/DjPPxa0A.chunk.css +1 -0
- package/dist/css/DlOtoSz0.chunk.css +1 -0
- package/dist/css/DwduQat7.chunk.css +1 -0
- package/dist/css/Dzuu2GTx.chunk.css +1 -0
- package/dist/css/JAvsJreH.chunk.css +1 -0
- package/dist/css/NKlFYVOc.chunk.css +1 -0
- package/dist/css/VZd8qGtK.chunk.css +1 -0
- package/dist/css/Y7U--2na.chunk.css +1 -0
- package/dist/css/ir3IcK_l.chunk.css +1 -0
- package/dist/css/jbMisi9r.chunk.css +1 -0
- package/dist/css/kS5aDtIJ.chunk.css +1 -0
- package/dist/css/mqCL1o7m.chunk.css +1 -0
- package/dist/css/qZzkUeZk.chunk.css +1 -0
- package/dist/css/sC_H3yXE.chunk.css +1 -0
- package/dist/css/wR_6C_NV.chunk.css +1 -0
- package/dist/en.json +1 -0
- package/dist/scripts/38Gc6FvJ.chunk.js +2 -0
- package/dist/scripts/38Gc6FvJ.chunk.js.map +1 -0
- package/dist/scripts/9vP26Hjl.chunk.js +2 -0
- package/dist/scripts/9vP26Hjl.chunk.js.map +1 -0
- package/dist/scripts/B-YTLo4E.chunk.js +2 -0
- package/dist/scripts/B-YTLo4E.chunk.js.map +1 -0
- package/dist/scripts/B2rqAGbQ.chunk.js +2 -0
- package/dist/scripts/B2rqAGbQ.chunk.js.map +1 -0
- package/dist/scripts/B46nd_gM.chunk.js +2 -0
- package/dist/scripts/B46nd_gM.chunk.js.map +1 -0
- package/dist/scripts/B61dxODs.chunk.js +2 -0
- package/dist/scripts/B61dxODs.chunk.js.map +1 -0
- package/dist/scripts/B928Y1m-.chunk.js +2 -0
- package/dist/scripts/B928Y1m-.chunk.js.map +1 -0
- package/dist/scripts/BBnDr_iy.chunk.js +2 -0
- package/dist/scripts/BBnDr_iy.chunk.js.map +1 -0
- package/dist/scripts/BDwX0xO5.chunk.js +7 -0
- package/dist/scripts/BDwX0xO5.chunk.js.map +1 -0
- package/dist/scripts/BFcg4phV.chunk.js +15 -0
- package/dist/scripts/BFcg4phV.chunk.js.map +1 -0
- package/dist/scripts/BOH3SvVi.chunk.js +2 -0
- package/dist/scripts/BOH3SvVi.chunk.js.map +1 -0
- package/dist/scripts/BPzvNgkA.chunk.js +10 -0
- package/dist/scripts/BPzvNgkA.chunk.js.map +1 -0
- package/dist/scripts/BWkYFXR0.chunk.js +2 -0
- package/dist/scripts/BWkYFXR0.chunk.js.map +1 -0
- package/dist/scripts/BYrL8Bl0.chunk.js +2 -0
- package/dist/scripts/BYrL8Bl0.chunk.js.map +1 -0
- package/dist/scripts/BaMuTXqa.chunk.js +2 -0
- package/dist/scripts/BaMuTXqa.chunk.js.map +1 -0
- package/dist/scripts/Bbj3u3zY.chunk.js +2 -0
- package/dist/scripts/Bbj3u3zY.chunk.js.map +1 -0
- package/dist/scripts/Bd-gJLT1.chunk.js +2 -0
- package/dist/scripts/Bd-gJLT1.chunk.js.map +1 -0
- package/dist/scripts/BdHxGaRy.chunk.js +2 -0
- package/dist/scripts/BdHxGaRy.chunk.js.map +1 -0
- package/dist/scripts/BdPgUz8g.chunk.js +2 -0
- package/dist/scripts/BdPgUz8g.chunk.js.map +1 -0
- package/dist/scripts/Be6BKGLG.chunk.js +356 -0
- package/dist/scripts/Be6BKGLG.chunk.js.map +1 -0
- package/dist/scripts/BfK6q73t.chunk.js +8 -0
- package/dist/scripts/BfK6q73t.chunk.js.map +1 -0
- package/dist/scripts/Bg1w511R.chunk.js +2 -0
- package/dist/scripts/Bg1w511R.chunk.js.map +1 -0
- package/dist/scripts/Bg6K2hsA.chunk.js +3 -0
- package/dist/scripts/Bg6K2hsA.chunk.js.map +1 -0
- package/dist/scripts/BiLpxxSD.chunk.js +2 -0
- package/dist/scripts/BiLpxxSD.chunk.js.map +1 -0
- package/dist/scripts/BmN5JsPi.chunk.js +5 -0
- package/dist/scripts/BmN5JsPi.chunk.js.map +1 -0
- package/dist/scripts/BnSh6tRF.chunk.js +2 -0
- package/dist/scripts/BnSh6tRF.chunk.js.map +1 -0
- package/dist/scripts/Bnt14Hw8.chunk.js +2 -0
- package/dist/scripts/Bnt14Hw8.chunk.js.map +1 -0
- package/dist/scripts/BpRVTpnA.chunk.js +8 -0
- package/dist/scripts/BpRVTpnA.chunk.js.map +1 -0
- package/dist/scripts/BsoISj2P.chunk.js +2 -0
- package/dist/scripts/BsoISj2P.chunk.js.map +1 -0
- package/dist/scripts/BuNZOfIz.chunk.js +2 -0
- package/dist/scripts/BuNZOfIz.chunk.js.map +1 -0
- package/dist/scripts/BvQxdtl3.chunk.js +2 -0
- package/dist/scripts/BvQxdtl3.chunk.js.map +1 -0
- package/dist/scripts/C2zcSUEr.chunk.js +2 -0
- package/dist/scripts/C2zcSUEr.chunk.js.map +1 -0
- package/dist/scripts/C35NlkUr.chunk.js +2 -0
- package/dist/scripts/C35NlkUr.chunk.js.map +1 -0
- package/dist/scripts/C5Fq7Tf-.chunk.js +2 -0
- package/dist/scripts/C5Fq7Tf-.chunk.js.map +1 -0
- package/dist/scripts/CD-ZU1Sa.chunk.js +2 -0
- package/dist/scripts/CD-ZU1Sa.chunk.js.map +1 -0
- package/dist/scripts/CEmtkty-.chunk.js +2 -0
- package/dist/scripts/CEmtkty-.chunk.js.map +1 -0
- package/dist/scripts/CO1Up6zQ.chunk.js +2 -0
- package/dist/scripts/CO1Up6zQ.chunk.js.map +1 -0
- package/dist/scripts/CPNjAJN5.chunk.js +2 -0
- package/dist/scripts/CPNjAJN5.chunk.js.map +1 -0
- package/dist/scripts/CPXlV0fg.chunk.js +2 -0
- package/dist/scripts/CPXlV0fg.chunk.js.map +1 -0
- package/dist/scripts/CQJIB_e-.chunk.js +2 -0
- package/dist/scripts/CQJIB_e-.chunk.js.map +1 -0
- package/dist/scripts/CRusuLqR.chunk.js +2 -0
- package/dist/scripts/CRusuLqR.chunk.js.map +1 -0
- package/dist/scripts/CTWahyAB.chunk.js +2 -0
- package/dist/scripts/CTWahyAB.chunk.js.map +1 -0
- package/dist/scripts/CU5Dd7rS.chunk.js +2 -0
- package/dist/scripts/CU5Dd7rS.chunk.js.map +1 -0
- package/dist/scripts/CW7x8M-z.chunk.js +2 -0
- package/dist/scripts/CW7x8M-z.chunk.js.map +1 -0
- package/dist/scripts/CX-Bc0hf.chunk.js +2 -0
- package/dist/scripts/CX-Bc0hf.chunk.js.map +1 -0
- package/dist/scripts/CY1om5lx.chunk.js +2 -0
- package/dist/scripts/CY1om5lx.chunk.js.map +1 -0
- package/dist/scripts/C_79jeAr.chunk.js +2 -0
- package/dist/scripts/C_79jeAr.chunk.js.map +1 -0
- package/dist/scripts/C_pobyVf.chunk.js +3 -0
- package/dist/scripts/C_pobyVf.chunk.js.map +1 -0
- package/dist/scripts/Cgf5lDwO.chunk.js +2 -0
- package/dist/scripts/Cgf5lDwO.chunk.js.map +1 -0
- package/dist/scripts/Ci9wGu6N.chunk.js +2 -0
- package/dist/scripts/Ci9wGu6N.chunk.js.map +1 -0
- package/dist/scripts/Cmu1J2M7.chunk.js +262 -0
- package/dist/scripts/Cmu1J2M7.chunk.js.map +1 -0
- package/dist/scripts/Cp-yDIHE.chunk.js +2 -0
- package/dist/scripts/Cp-yDIHE.chunk.js.map +1 -0
- package/dist/scripts/CqWRz_Vd.chunk.js +2 -0
- package/dist/scripts/CqWRz_Vd.chunk.js.map +1 -0
- package/dist/scripts/Cs-XAmfP.chunk.js +2 -0
- package/dist/scripts/Cs-XAmfP.chunk.js.map +1 -0
- package/dist/scripts/CsxsnXoH.chunk.js +2 -0
- package/dist/scripts/CsxsnXoH.chunk.js.map +1 -0
- package/dist/scripts/CvuMDF0y.chunk.js +2 -0
- package/dist/scripts/CvuMDF0y.chunk.js.map +1 -0
- package/dist/scripts/CwRpHtAf.chunk.js +2 -0
- package/dist/scripts/CwRpHtAf.chunk.js.map +1 -0
- package/dist/scripts/D4OCofAF.chunk.js +2 -0
- package/dist/scripts/D4OCofAF.chunk.js.map +1 -0
- package/dist/scripts/D4x4hAdA.chunk.js +2 -0
- package/dist/scripts/D4x4hAdA.chunk.js.map +1 -0
- package/dist/scripts/DBaknZA7.chunk.js +2 -0
- package/dist/scripts/DBaknZA7.chunk.js.map +1 -0
- package/dist/scripts/DBdD19pY.chunk.js +53 -0
- package/dist/scripts/DBdD19pY.chunk.js.map +1 -0
- package/dist/scripts/DELBynwO.chunk.js +2 -0
- package/dist/scripts/DELBynwO.chunk.js.map +1 -0
- package/dist/scripts/DEixuHfi.chunk.js +2 -0
- package/dist/scripts/DEixuHfi.chunk.js.map +1 -0
- package/dist/scripts/DFhkO_lZ.chunk.js +2 -0
- package/dist/scripts/DFhkO_lZ.chunk.js.map +1 -0
- package/dist/scripts/DIIFVn0p.chunk.js +2 -0
- package/dist/scripts/DIIFVn0p.chunk.js.map +1 -0
- package/dist/scripts/DIhfGjAK.chunk.js +2 -0
- package/dist/scripts/DIhfGjAK.chunk.js.map +1 -0
- package/dist/scripts/DK1p1ffZ.chunk.js +2 -0
- package/dist/scripts/DK1p1ffZ.chunk.js.map +1 -0
- package/dist/scripts/DK6BRHnl.chunk.js +2 -0
- package/dist/scripts/DK6BRHnl.chunk.js.map +1 -0
- package/dist/scripts/DNbkIXc2.chunk.js +2 -0
- package/dist/scripts/DNbkIXc2.chunk.js.map +1 -0
- package/dist/scripts/DRmZj7Fw.chunk.js +2 -0
- package/dist/scripts/DRmZj7Fw.chunk.js.map +1 -0
- package/dist/scripts/DTcDjqUi.chunk.js +8 -0
- package/dist/scripts/DTcDjqUi.chunk.js.map +1 -0
- package/dist/scripts/DVmtgkhY.chunk.js +2 -0
- package/dist/scripts/DVmtgkhY.chunk.js.map +1 -0
- package/dist/scripts/DWkg1qc2.chunk.js +2 -0
- package/dist/scripts/DWkg1qc2.chunk.js.map +1 -0
- package/dist/scripts/D_nzH8Cw.chunk.js +2 -0
- package/dist/scripts/D_nzH8Cw.chunk.js.map +1 -0
- package/dist/scripts/DaJTPRJr.chunk.js +2 -0
- package/dist/scripts/DaJTPRJr.chunk.js.map +1 -0
- package/dist/scripts/Dal4C0kV.chunk.js +2 -0
- package/dist/scripts/Dal4C0kV.chunk.js.map +1 -0
- package/dist/scripts/DecSY6Xq.chunk.js +2 -0
- package/dist/scripts/DecSY6Xq.chunk.js.map +1 -0
- package/dist/scripts/DgL-ti6b.chunk.js +2 -0
- package/dist/scripts/DgL-ti6b.chunk.js.map +1 -0
- package/dist/scripts/Dhn0D6IV.chunk.js +2 -0
- package/dist/scripts/Dhn0D6IV.chunk.js.map +1 -0
- package/dist/scripts/DuidBpWd.chunk.js +2 -0
- package/dist/scripts/DuidBpWd.chunk.js.map +1 -0
- package/dist/scripts/DvDdiDQN.chunk.js +7 -0
- package/dist/scripts/DvDdiDQN.chunk.js.map +1 -0
- package/dist/scripts/Dx9ncX-C.chunk.js +2 -0
- package/dist/scripts/Dx9ncX-C.chunk.js.map +1 -0
- package/dist/scripts/Dxt3JwJz.chunk.js +2 -0
- package/dist/scripts/Dxt3JwJz.chunk.js.map +1 -0
- package/dist/scripts/Dy57waqb.chunk.js +2 -0
- package/dist/scripts/Dy57waqb.chunk.js.map +1 -0
- package/dist/scripts/DzLh2mnb.chunk.js +2 -0
- package/dist/scripts/DzLh2mnb.chunk.js.map +1 -0
- package/dist/scripts/F-K8Bwdk.chunk.js +2 -0
- package/dist/scripts/F-K8Bwdk.chunk.js.map +1 -0
- package/dist/scripts/G4u5okSS.chunk.js +2 -0
- package/dist/scripts/G4u5okSS.chunk.js.map +1 -0
- package/dist/scripts/KAizYpNf.chunk.js +2 -0
- package/dist/scripts/KAizYpNf.chunk.js.map +1 -0
- package/dist/scripts/LIBRZSqN.chunk.js +8 -0
- package/dist/scripts/LIBRZSqN.chunk.js.map +1 -0
- package/dist/scripts/LgZBXsgq.chunk.js +2 -0
- package/dist/scripts/LgZBXsgq.chunk.js.map +1 -0
- package/dist/scripts/QlJI4d4R.chunk.js +2 -0
- package/dist/scripts/QlJI4d4R.chunk.js.map +1 -0
- package/dist/scripts/ShERxFU5.chunk.js +2 -0
- package/dist/scripts/ShERxFU5.chunk.js.map +1 -0
- package/dist/scripts/Ynb9IAgu.chunk.js +2 -0
- package/dist/scripts/Ynb9IAgu.chunk.js.map +1 -0
- package/dist/scripts/_8CvUiOV.chunk.js +2 -0
- package/dist/scripts/_8CvUiOV.chunk.js.map +1 -0
- package/dist/scripts/aXDrx9_z.chunk.js +6 -0
- package/dist/scripts/aXDrx9_z.chunk.js.map +1 -0
- package/dist/scripts/app-DiXzpOyg.js +220 -0
- package/dist/scripts/app-DiXzpOyg.js.map +1 -0
- package/dist/scripts/bww2eGbI.chunk.js +2 -0
- package/dist/scripts/bww2eGbI.chunk.js.map +1 -0
- package/dist/scripts/cvX-F_mx.chunk.js +2 -0
- package/dist/scripts/cvX-F_mx.chunk.js.map +1 -0
- package/dist/scripts/gtdeja1H.chunk.js +2 -0
- package/dist/scripts/gtdeja1H.chunk.js.map +1 -0
- package/dist/scripts/m9wd_474.chunk.js +2 -0
- package/dist/scripts/m9wd_474.chunk.js.map +1 -0
- package/dist/scripts/nay4aGaa.chunk.js +2 -0
- package/dist/scripts/nay4aGaa.chunk.js.map +1 -0
- package/dist/scripts/pkzD5BEm.chunk.js +2 -0
- package/dist/scripts/pkzD5BEm.chunk.js.map +1 -0
- package/dist/scripts/qO6ZefON.chunk.js +2 -0
- package/dist/scripts/qO6ZefON.chunk.js.map +1 -0
- package/dist/scripts/s4utqqzH.chunk.js +2 -0
- package/dist/scripts/s4utqqzH.chunk.js.map +1 -0
- package/dist/scripts/sxyRyCzh.chunk.js +2 -0
- package/dist/scripts/sxyRyCzh.chunk.js.map +1 -0
- package/dist/scripts/tzNty_oG.chunk.js +2 -0
- package/dist/scripts/tzNty_oG.chunk.js.map +1 -0
- package/dist/scripts/vjyJbQe4.chunk.js +2 -0
- package/dist/scripts/vjyJbQe4.chunk.js.map +1 -0
- package/dist/scripts/vuoBilPQ.chunk.js +2 -0
- package/dist/scripts/vuoBilPQ.chunk.js.map +1 -0
- package/dist/scripts/vwgUbn2Z.chunk.js +2 -0
- package/dist/scripts/vwgUbn2Z.chunk.js.map +1 -0
- package/dist/scripts/wOGv44_K.chunk.js +2 -0
- package/dist/scripts/wOGv44_K.chunk.js.map +1 -0
- package/dist/scripts/xbvkqJGe.chunk.js +2 -0
- package/dist/scripts/xbvkqJGe.chunk.js.map +1 -0
- package/dist/scripts/xywWSa0t.chunk.js +2 -0
- package/dist/scripts/xywWSa0t.chunk.js.map +1 -0
- package/dist/scripts/zUz4ZfV2.chunk.js +2 -0
- package/dist/scripts/zUz4ZfV2.chunk.js.map +1 -0
- package/package.json +5 -3
- package/typings/utils/imports.d.ts +2 -1
- package/vite.config.ts +6 -0
- package/dist/css/103-streamable-learning-5060b6cda5.chunk.css +0 -7
- package/dist/css/1269-streamable-learning-a12c4ebc99.chunk.css +0 -2
- package/dist/css/1457-streamable-learning-c8c8b3b9b1.chunk.css +0 -50
- package/dist/css/2334-streamable-learning-de03ae073a.chunk.css +0 -2
- package/dist/css/3322-streamable-learning-510e1aa3f3.chunk.css +0 -34
- package/dist/css/3838-streamable-learning-da10685fe8.chunk.css +0 -22
- package/dist/css/4254-streamable-learning-e493f4a027.chunk.css +0 -2
- package/dist/css/4607-streamable-learning-2605302fc2.chunk.css +0 -90
- package/dist/css/4772-streamable-learning-f83b838d71.chunk.css +0 -9
- package/dist/css/5003-streamable-learning-b38d2ddbbe.chunk.css +0 -98
- package/dist/css/5565-streamable-learning-0caae3809b.chunk.css +0 -13
- package/dist/css/6017-streamable-learning-098a205d01.chunk.css +0 -6
- package/dist/css/6356-streamable-learning-8c5b220bf6.chunk.css +0 -1
- package/dist/css/6987-streamable-learning-8f682301c6.chunk.css +0 -1
- package/dist/css/7317-streamable-learning-b5d226bbb6.chunk.css +0 -5
- package/dist/css/8058-streamable-learning-539cf7be18.chunk.css +0 -12
- package/dist/css/8294-streamable-learning-c797263ac2.chunk.css +0 -1
- package/dist/css/8496-streamable-learning-ce19f6ca52.chunk.css +0 -13
- package/dist/css/8601-streamable-learning-f525210660.chunk.css +0 -6
- package/dist/css/9514-streamable-learning-251703c6d1.chunk.css +0 -2
- package/dist/css/9766-streamable-learning-31650ffe5d.chunk.css +0 -8
- package/dist/css/9842-streamable-learning-24729103f7.chunk.css +0 -4
- package/dist/css/9899-streamable-learning-0338f8d2dc.chunk.css +0 -4
- package/dist/css/streamable-learning-dd0c1095d5.css +0 -23
- package/dist/languages/en.json +0 -1
- package/dist/scripts/103-aceced8961-streamable-learning.chunk.js +0 -1
- package/dist/scripts/1097-680a971192-streamable-learning.chunk.js +0 -2
- package/dist/scripts/1097-680a971192-streamable-learning.chunk.js.LICENSE.txt +0 -105
- package/dist/scripts/1269-2d0b903343-streamable-learning.chunk.js +0 -2
- package/dist/scripts/1269-2d0b903343-streamable-learning.chunk.js.LICENSE.txt +0 -1
- package/dist/scripts/1457-899f40d09a-streamable-learning.chunk.js +0 -1
- package/dist/scripts/1482-b1dd75897c-streamable-learning.chunk.js +0 -1
- package/dist/scripts/1934-fc017df0da-streamable-learning.chunk.js +0 -2
- package/dist/scripts/1934-fc017df0da-streamable-learning.chunk.js.LICENSE.txt +0 -9
- package/dist/scripts/2042-d51622d63e-streamable-learning.chunk.js +0 -1
- package/dist/scripts/2087-eba9033b1c-streamable-learning.chunk.js +0 -1
- package/dist/scripts/2245-8cd3224e1b-streamable-learning.chunk.js +0 -1
- package/dist/scripts/2334-00b028191d-streamable-learning.chunk.js +0 -1
- package/dist/scripts/2676-c842ec7e8d-streamable-learning.chunk.js +0 -2
- package/dist/scripts/2676-c842ec7e8d-streamable-learning.chunk.js.LICENSE.txt +0 -1
- package/dist/scripts/2877-5ffc9711f6-streamable-learning.chunk.js +0 -1
- package/dist/scripts/2911-2ec3a6600a-streamable-learning.chunk.js +0 -1
- package/dist/scripts/3057-731a8ca978-streamable-learning.chunk.js +0 -1
- package/dist/scripts/3093-efbcc927ea-streamable-learning.chunk.js +0 -1
- package/dist/scripts/3186-d1a6ccffde-streamable-learning.chunk.js +0 -1
- package/dist/scripts/3322-33c015dec9-streamable-learning.chunk.js +0 -1
- package/dist/scripts/3472-50ca92bde3-streamable-learning.chunk.js +0 -1
- package/dist/scripts/3838-4a38f33dc2-streamable-learning.chunk.js +0 -1
- package/dist/scripts/3941-2ef15ca9ac-streamable-learning.chunk.js +0 -1
- package/dist/scripts/4254-ef581b8105-streamable-learning.chunk.js +0 -1
- package/dist/scripts/4607-a4edb06dba-streamable-learning.chunk.js +0 -2
- package/dist/scripts/4607-a4edb06dba-streamable-learning.chunk.js.LICENSE.txt +0 -1
- package/dist/scripts/4772-3cb280f959-streamable-learning.chunk.js +0 -2
- package/dist/scripts/4772-3cb280f959-streamable-learning.chunk.js.LICENSE.txt +0 -1
- package/dist/scripts/4951-df701c6a8d-streamable-learning.chunk.js +0 -1
- package/dist/scripts/5003-7468a75d64-streamable-learning.chunk.js +0 -2
- package/dist/scripts/5003-7468a75d64-streamable-learning.chunk.js.LICENSE.txt +0 -1
- package/dist/scripts/5088-2e09e1ba6e-streamable-learning.chunk.js +0 -1
- package/dist/scripts/5173-a800a17d0d-streamable-learning.chunk.js +0 -1
- package/dist/scripts/5446-2cbe9f9d1b-streamable-learning.chunk.js +0 -1
- package/dist/scripts/5543-205aaa36a6-streamable-learning.chunk.js +0 -1
- package/dist/scripts/5565-224d86dc1b-streamable-learning.chunk.js +0 -1
- package/dist/scripts/578-2cc99f46f7-streamable-learning.chunk.js +0 -1
- package/dist/scripts/6017-5bd6f9bf7a-streamable-learning.chunk.js +0 -2
- package/dist/scripts/6017-5bd6f9bf7a-streamable-learning.chunk.js.LICENSE.txt +0 -1
- package/dist/scripts/6356-eefa3ff22e-streamable-learning.chunk.js +0 -1
- package/dist/scripts/6979-ef9a3931a2-streamable-learning.chunk.js +0 -2
- package/dist/scripts/6979-ef9a3931a2-streamable-learning.chunk.js.LICENSE.txt +0 -1
- package/dist/scripts/6987-e58de31cfe-streamable-learning.chunk.js +0 -1
- package/dist/scripts/7317-6b7186c85d-streamable-learning.chunk.js +0 -1
- package/dist/scripts/7347-772848ba8a-streamable-learning.chunk.js +0 -1
- package/dist/scripts/7570-cd4f70ff52-streamable-learning.chunk.js +0 -2
- package/dist/scripts/7570-cd4f70ff52-streamable-learning.chunk.js.LICENSE.txt +0 -1
- package/dist/scripts/7904-96574373ca-streamable-learning.chunk.js +0 -1
- package/dist/scripts/7925-1e1cfa2a04-streamable-learning.chunk.js +0 -1
- package/dist/scripts/8058-51c4b442d6-streamable-learning.chunk.js +0 -1
- package/dist/scripts/8126-9d09959b28-streamable-learning.chunk.js +0 -2
- package/dist/scripts/8126-9d09959b28-streamable-learning.chunk.js.LICENSE.txt +0 -60
- package/dist/scripts/8397-39ce77876d-streamable-learning.chunk.js +0 -1
- package/dist/scripts/8496-1b2519f9fd-streamable-learning.chunk.js +0 -2
- package/dist/scripts/8496-1b2519f9fd-streamable-learning.chunk.js.LICENSE.txt +0 -1
- package/dist/scripts/8599-b74e1ab6e3-streamable-learning.chunk.js +0 -1
- package/dist/scripts/8601-37783cf18b-streamable-learning.chunk.js +0 -1
- package/dist/scripts/8819-2a50dd6a9b-streamable-learning.chunk.js +0 -1
- package/dist/scripts/8937-5103db88d8-streamable-learning.chunk.js +0 -1
- package/dist/scripts/9390-bbaf07ad0f-streamable-learning.chunk.js +0 -1
- package/dist/scripts/9514-a31ca9af06-streamable-learning.chunk.js +0 -1
- package/dist/scripts/9766-48d72d9285-streamable-learning.chunk.js +0 -2
- package/dist/scripts/9766-48d72d9285-streamable-learning.chunk.js.LICENSE.txt +0 -1
- package/dist/scripts/9842-36d830ee87-streamable-learning.chunk.js +0 -1
- package/dist/scripts/9899-f33e8f1d43-streamable-learning.chunk.js +0 -2
- package/dist/scripts/9899-f33e8f1d43-streamable-learning.chunk.js.LICENSE.txt +0 -1
- package/dist/scripts/bundle-de4d0d4897.min.js +0 -2
- package/dist/scripts/bundle-de4d0d4897.min.js.LICENSE.txt +0 -108
- package/dist/scripts/pdf.worker.entry-a2092a6670.min.worker.js +0 -2
- package/dist/scripts/pdf.worker.entry-a2092a6670.min.worker.js.LICENSE.txt +0 -21
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DTcDjqUi.chunk.js","sources":["../../../../../node_modules/react-bootstrap/esm/createChainedFunction.js","../../../../../node_modules/react-bootstrap/esm/Collapse.js","../../../../../node_modules/react-bootstrap/esm/AccordionContext.js","../../../../../node_modules/react-bootstrap/esm/AccordionCollapse.js","../../../../../node_modules/react-bootstrap/esm/AccordionItemContext.js","../../../../../node_modules/react-bootstrap/esm/AccordionBody.js","../../../../../node_modules/react-bootstrap/esm/AccordionButton.js","../../../../../node_modules/react-bootstrap/esm/AccordionHeader.js","../../../../../node_modules/react-bootstrap/esm/AccordionItem.js","../../../../../node_modules/react-bootstrap/esm/Accordion.js","../../../../libs/shared/src/components/widgets/curated-widgets/components/animated-border/AnimatedBorder.tsx","../../../../libs/shared/src/images/svg/actions/EditSvg.tsx","../../../../libs/shared/src/images/svg/status/VerifiedSvg.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/author-reviewer/AuthorReviewerWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/author-reviewer/partial-loading/PartialAuthorReviewerWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/items/circle-logo-widget-item/CircleLogoWidgetItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/circle-logo-sliding-list/CircleLogoSlidingListWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/circle-logo-sliding-list/partial-loading/PartialCircleLogoSlidingList.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-pill-list-large/partial-loading/PartialCoverFixedPillListLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/emoji-text/EmojiText.tsx","../../../../libs/shared/src/images/svg/actions/ThumbsDownSvg.tsx","../../../../libs/shared/src/images/svg/actions/ThumbsUpSvg.tsx","../../../../libs/shared/src/components/feedback-form/FeedbackFormValidationSchema.ts","../../../../libs/shared/src/components/feedback-form/FeedbackForm.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-pill-list-xsmall/CoverFixedPillListXSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-pill-list-xsmall/partial-loading/PartialCoverFixedPillListXSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-tile-list/CoverFixedTileListWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-tile-list/partial-loading/PartialCoverFixedTileListWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-sliding-pill-list-small/CoverSlidingPillListSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-sliding-pill-list-small/partial-loading/PartialCoverSlidingPillListSmallWidgetTemplate.tsx","../../../../libs/shared/src/apps/search/components/search-exchange-archive-description/SearchExchangeArchiveDescription.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-vertical-list/ThumbnailVerticalListWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-code-search-results/CurriculumCodeSearchResultsWidgetTemplate.tsx","../../../../libs/shared/src/images/svg/actions/MinusSvg.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/components/accordion-button/AccordionButton.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/components/curriculum-accordion-video-list/CurriculumAccordionVideoList.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/components/audience-section/AudienceSection.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/CurriculumAccordionUtils.ts","../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/CurriculumResourcesAccordionWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/partial-loading/PartialCurriculumResourcesAccordionWidgetTemplate.tsx","../../../../libs/shared/src/images/svg/objects/HamburgerSvg.tsx","../../../../libs/shared/src/components/widgets/items/subject-widget-item/EditableSubjectWidgetItem.tsx","../../../../libs/shared/src/utils/ReorderHelper.ts","../../../../libs/shared/src/components/widgets/curated-widgets/templates/editable-cover-fixed-pill-list-small/EditableCoverFixedPillListSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/editable-cover-fixed-pill-list-small/partial-loading/PartialEditableCoverFixedPillListSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/items/special-event-widget-item/SpecialEventWidgetItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/event-icon-sliding-list/EventIconSlidingListWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/event-icon-sliding-list/partial-loading/PartialEventIconSlidingListWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/items/video-widget-item/v1/VideoWidgetItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/featured-thumbnail-sliding-list/FeaturedThumbnailSlidingListWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/featured-thumbnail-sliding-list/partial-loading/PartialFeaturedThumbnailSlidingListWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/items/rating-widget-item/RatingWidgetItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/filter-sliding-pill-list-small/FilterSlidingPillListSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/filter-sliding-pill-list-small/partial-loading/PartialFilterSlidingPillListSmall.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/heading/HeadingWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/heading/partial-loading/PartialHeadingWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner/HeroBannerWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner/partial-loading/PartialHeroBannerWidgetTemplate.tsx","../../../../libs/shared/src/images/svg/objects/GridSvg.tsx","../../../../libs/shared/src/images/svg/objects/RectanglesSvg.tsx","../../../../libs/shared/src/images/svg/objects/SparkleSvg.tsx","../../../../libs/shared/src/constants/WidgetThemingConstants.ts","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/types/BlurbHeroBannerSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/components/classification-hero-banner-small/ClassificationHeroBannerSmall.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/types/ClassificationHeroBannerSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/types/PresentationsHeroBannerSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/HeroBannerSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/partial-loading/PartialHeroBannerSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-block-colour-small/HeroBlockColourSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-block-colour-small/partial-loading/PartialHeroBlockColourSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-thumbnail-small/HeroThumbnailSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-thumbnail-small/partial-loading/PartialHeroThumbnailSmallWidgetTemplate.tsx","../../../../libs/common/src/backbone/interfaces/BaseCollectionIdentifier.ts","../../../../libs/shared/src/apps/playlists/enums/PlaylistSortType.ts","../../../../libs/shared/src/apps/playlists/enums/PlaylistType.ts","../../../../libs/shared/src/apps/playlists/interfaces/identifiers/PlaylistCollectionIdentifier.ts","../../../../libs/shared/src/apps/playlists/interfaces/identifiers/PlaylistVideoCollectionIdentifier.ts","../../../../libs/shared/src/apps/playlists/utils/PlaylistStateUpdateHelper.ts","../../../../libs/shared/src/flight-requests/PlaylistRequests.ts","../../../../libs/shared/src/apps/onboarding/hooks/useOnboardingPathway.ts","../../../../libs/shared/src/constants/ScoreThresholds.ts","../../../../libs/shared/src/components/percentage-indicator/PercentageIndicatorUtils.ts","../../../../libs/shared/src/components/percentage-indicator/PercentageIndicator.tsx","../../../../libs/shared/src/images/svg/arrows/ArrowRightSvg.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/onboarding-steps/OnboardingStepsWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_large/partial-loading/PartialPopoutThumbnailSlidingListLarge.tsx","../../../../libs/shared/src/components/widgets/items/popout-video-widget-item/PopoutVideoWidgetItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_large/PopoutThumbnailSlidingListLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_small/partial-loading/PartialPopoutThumbnailSlidingListSmall.tsx","../../../../libs/shared/src/components/widgets/items/subject-stats-widget-item/subject-stats-badge/SubjectStatsBadge.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_small/PopoutThumbnailSlidingListSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/items/series-widget-item/PartialSeriesList.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/poster-fixed-list-large/PosterFixedListLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/items/series-widget-item/SeriesWidgetItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-large/PosterSlidingListLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/items/tall-subject-widget-item/PartialTallSubjectWidget.tsx","../../../../libs/shared/src/components/widgets/items/tall-subject-widget-item/TallSubjectWidgetItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-medium/partial-loading/PartialPosterSlidingListMediumWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-medium/PosterSlidingListMediumWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-small/classification/ClassificationPosterSlidingListSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-small/partial-loading/PartialPosterSlidingListSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-small/series/SeriesPosterSlidingListSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/question/partial-loading/PartialQuestionWidgetTemplate.tsx","../../../../libs/shared/src/components/expandable-question/ExpandableQuestion.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/question/QuestionWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/question-accordion/partial-loading/PartialQuestionAccordionWidgetTemplate.tsx","../../../../libs/shared/src/hooks/useFaqJsonLd.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/question-accordion/QuestionAccordionWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/search-suggestions-blurb/partial-loading/PartialSearchSuggestionsBlurbWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/search-suggestions-blurb/SearchSuggestionsBlurbWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/items/subject-stats-widget-item/partial-loading/PartialSubjectStatsWidgetItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/stats-cover-fixed-pill-list-large/partial-loading/PartialStatsCoverFixedPillListLargeWidgetTemplate.tsx","../../../../libs/shared/src/images/svg/objects/BellFilledSvg.tsx","../../../../libs/shared/src/images/svg/objects/BellSvg.tsx","../../../../libs/shared/src/components/widgets/items/subject-stats-widget-item/SubjectStatsWidgetItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/stats-cover-fixed-pill-list-large/StatsCoverFixedPillListLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/tag-sliding-list/partial-loading/PartialTagSlidingListWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/tag-sliding-list/TagSlidingListWidgetTemplate.tsx","../../../../libs/shared/src/components/video-guidance/tag/partial-loading/PartialVideoGuidanceTag.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-featured-media/partial-loading/PartialThumbnailFeaturedMediaWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-featured-media/ThumbnailFeaturedMediaWidgetTemplate.tsx","../../../../libs/shared/src/components/library-folder/LibraryFolder.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-folder-small/ThumbnailFixedListFolderSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-large/partial-loading/PartialThumbnailFixedListLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/items/thumbnail-widget-item/ThumbnailWidgetItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-large/ThumbnailFixedListLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/partial-loading/PartialThumbnailFixedListMediaLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/components/ThumbnailFixedListMediaLargeWidgetTemplateItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/ThumbnailFixedListMediaLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/thumbnails/collection/title/CollectionThumbnailTitle.tsx","../../../../libs/shared/src/components/thumbnails/collection/CollectionThumbnail.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-small/ThumbnailFixedListMediaSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-small/partial-loading/PartialThumbnailFixedListSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-small/ThumbnailFixedListSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-xlarge/partial-loading/PartialThumbnailFixedListXLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-xlarge/ThumbnailFixedListXLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-hero-media/partial-loading/PartialThumbnailHeroMediaWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-hero-media/ThumbnailHeroMediaWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-sliding-list-large/partial-loading/PartialThumbnailSlidingListLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-sliding-list-large/ThumbnailSlidingListLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-sliding-list-small/ThumbnailSlidingListSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/items/video-widget-item/v2/VideoWidgetItemV2.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-sliding-list-small_v2/ThumbnailSlidingListSmallV2WidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-vertical-list/partial-loading/PartialThumbnailVerticalListWidgetTemplate.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateCoverFixedPillListLargeSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateCoverFixedPillListXsmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplatePosterSlidingListLargeSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplatePosterSlidingListMediumSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplatePosterSlidingListSmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateStatsCoverFixedPillListLargeSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailFeaturedMediaSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailHeroMediaSvg.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-code-search-results/partial/PartialCurriculumCodeSearchResultsWidgetTemplate.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateAuthorReviewerSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateCircleLogoSlidingListSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateCoverFixedTileListSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateCoverSlidingPillListSmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateEditableCoverFixedPillListSmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateEventIconSlidingListSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateFeaturedThumbnailSlidingListSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateFilterSlidingPillListSmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateHeadingSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateHeroBannerSmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateHeroBannerSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateHeroBlockColourSmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateHeroThumbnailSmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateOnboardingStepsSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplatePopoutThumbnailSlidingListLargeSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplatePopoutThumbnailSlidingListSmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateQuestionAccordionSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateQuestionSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailFixedListLargeSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailFixedListMediaLargeSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailFixedListSmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailFixedListXlargeSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailSlidingListLargeSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailSlidingListSmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailVerticalListSvg.tsx","../../../../libs/shared/src/constants/WidgetTemplateConfig.ts","../../../../libs/shared/src/components/widgets/curated-widgets/WidgetContainerView.tsx","../../src/shared/hooks/useFetchDashboard.ts"],"sourcesContent":["/**\n * Safe chained function\n *\n * Will only create a new function if needed,\n * otherwise will pass back existing functions or null.\n *\n * @param {function} functions to chain\n * @returns {function|null}\n */\nfunction createChainedFunction(...funcs) {\n return funcs.filter(f => f != null).reduce((acc, f) => {\n if (typeof f !== 'function') {\n throw new Error('Invalid Argument Type, must only provide functions, undefined, or null.');\n }\n if (acc === null) return f;\n return function chainedFunction(...args) {\n // @ts-ignore\n acc.apply(this, args);\n // @ts-ignore\n f.apply(this, args);\n };\n }, null);\n}\nexport default createChainedFunction;","import classNames from 'classnames';\nimport css from 'dom-helpers/css';\nimport React, { useMemo } from 'react';\nimport { ENTERED, ENTERING, EXITED, EXITING } from 'react-transition-group/Transition';\nimport { getChildRef } from '@restart/ui/utils';\nimport transitionEndListener from './transitionEndListener';\nimport createChainedFunction from './createChainedFunction';\nimport triggerBrowserReflow from './triggerBrowserReflow';\nimport TransitionWrapper from './TransitionWrapper';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst MARGINS = {\n height: ['marginTop', 'marginBottom'],\n width: ['marginLeft', 'marginRight']\n};\nfunction getDefaultDimensionValue(dimension, elem) {\n const offset = `offset${dimension[0].toUpperCase()}${dimension.slice(1)}`;\n const value = elem[offset];\n const margins = MARGINS[dimension];\n return value +\n // @ts-ignore\n parseInt(css(elem, margins[0]), 10) +\n // @ts-ignore\n parseInt(css(elem, margins[1]), 10);\n}\nconst collapseStyles = {\n [EXITED]: 'collapse',\n [EXITING]: 'collapsing',\n [ENTERING]: 'collapsing',\n [ENTERED]: 'collapse show'\n};\nconst Collapse = /*#__PURE__*/React.forwardRef(({\n onEnter,\n onEntering,\n onEntered,\n onExit,\n onExiting,\n className,\n children,\n dimension = 'height',\n in: inProp = false,\n timeout = 300,\n mountOnEnter = false,\n unmountOnExit = false,\n appear = false,\n getDimensionValue = getDefaultDimensionValue,\n ...props\n}, ref) => {\n /* Compute dimension */\n const computedDimension = typeof dimension === 'function' ? dimension() : dimension;\n\n /* -- Expanding -- */\n const handleEnter = useMemo(() => createChainedFunction(elem => {\n elem.style[computedDimension] = '0';\n }, onEnter), [computedDimension, onEnter]);\n const handleEntering = useMemo(() => createChainedFunction(elem => {\n const scroll = `scroll${computedDimension[0].toUpperCase()}${computedDimension.slice(1)}`;\n elem.style[computedDimension] = `${elem[scroll]}px`;\n }, onEntering), [computedDimension, onEntering]);\n const handleEntered = useMemo(() => createChainedFunction(elem => {\n elem.style[computedDimension] = null;\n }, onEntered), [computedDimension, onEntered]);\n\n /* -- Collapsing -- */\n const handleExit = useMemo(() => createChainedFunction(elem => {\n elem.style[computedDimension] = `${getDimensionValue(computedDimension, elem)}px`;\n triggerBrowserReflow(elem);\n }, onExit), [onExit, getDimensionValue, computedDimension]);\n const handleExiting = useMemo(() => createChainedFunction(elem => {\n elem.style[computedDimension] = null;\n }, onExiting), [computedDimension, onExiting]);\n return /*#__PURE__*/_jsx(TransitionWrapper, {\n ref: ref,\n addEndListener: transitionEndListener,\n ...props,\n \"aria-expanded\": props.role ? inProp : null,\n onEnter: handleEnter,\n onEntering: handleEntering,\n onEntered: handleEntered,\n onExit: handleExit,\n onExiting: handleExiting,\n childRef: getChildRef(children),\n in: inProp,\n timeout: timeout,\n mountOnEnter: mountOnEnter,\n unmountOnExit: unmountOnExit,\n appear: appear,\n children: (state, innerProps) => /*#__PURE__*/React.cloneElement(children, {\n ...innerProps,\n className: classNames(className, children.props.className, collapseStyles[state], computedDimension === 'width' && 'collapse-horizontal')\n })\n });\n});\n\n// @ts-ignore\n\nexport default Collapse;","\"use client\";\n\nimport * as React from 'react';\nexport function isAccordionItemSelected(activeEventKey, eventKey) {\n return Array.isArray(activeEventKey) ? activeEventKey.includes(eventKey) : activeEventKey === eventKey;\n}\nconst context = /*#__PURE__*/React.createContext({});\ncontext.displayName = 'AccordionContext';\nexport default context;","\"use client\";\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { useContext } from 'react';\nimport { useBootstrapPrefix } from './ThemeProvider';\nimport Collapse from './Collapse';\nimport AccordionContext, { isAccordionItemSelected } from './AccordionContext';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * This component accepts all of [`Collapse`'s props](/docs/utilities/transitions#collapse-1).\n */\nconst AccordionCollapse = /*#__PURE__*/React.forwardRef(({\n as: Component = 'div',\n bsPrefix,\n className,\n children,\n eventKey,\n ...props\n}, ref) => {\n const {\n activeEventKey\n } = useContext(AccordionContext);\n bsPrefix = useBootstrapPrefix(bsPrefix, 'accordion-collapse');\n return /*#__PURE__*/_jsx(Collapse, {\n ref: ref,\n in: isAccordionItemSelected(activeEventKey, eventKey),\n ...props,\n className: classNames(className, bsPrefix),\n children: /*#__PURE__*/_jsx(Component, {\n children: React.Children.only(children)\n })\n });\n});\nAccordionCollapse.displayName = 'AccordionCollapse';\nexport default AccordionCollapse;","\"use client\";\n\nimport * as React from 'react';\nconst context = /*#__PURE__*/React.createContext({\n eventKey: ''\n});\ncontext.displayName = 'AccordionItemContext';\nexport default context;","\"use client\";\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { useContext } from 'react';\nimport { useBootstrapPrefix } from './ThemeProvider';\nimport AccordionCollapse from './AccordionCollapse';\nimport AccordionItemContext from './AccordionItemContext';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst AccordionBody = /*#__PURE__*/React.forwardRef(({\n // Need to define the default \"as\" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595\n as: Component = 'div',\n bsPrefix,\n className,\n onEnter,\n onEntering,\n onEntered,\n onExit,\n onExiting,\n onExited,\n ...props\n}, ref) => {\n bsPrefix = useBootstrapPrefix(bsPrefix, 'accordion-body');\n const {\n eventKey\n } = useContext(AccordionItemContext);\n return /*#__PURE__*/_jsx(AccordionCollapse, {\n eventKey: eventKey,\n onEnter: onEnter,\n onEntering: onEntering,\n onEntered: onEntered,\n onExit: onExit,\n onExiting: onExiting,\n onExited: onExited,\n children: /*#__PURE__*/_jsx(Component, {\n ref: ref,\n ...props,\n className: classNames(className, bsPrefix)\n })\n });\n});\nAccordionBody.displayName = 'AccordionBody';\nexport default AccordionBody;","\"use client\";\n\nimport * as React from 'react';\nimport { useContext } from 'react';\nimport classNames from 'classnames';\nimport AccordionContext, { isAccordionItemSelected } from './AccordionContext';\nimport AccordionItemContext from './AccordionItemContext';\nimport { useBootstrapPrefix } from './ThemeProvider';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function useAccordionButton(eventKey, onClick) {\n const {\n activeEventKey,\n onSelect,\n alwaysOpen\n } = useContext(AccordionContext);\n return e => {\n /*\n Compare the event key in context with the given event key.\n If they are the same, then collapse the component.\n */\n let eventKeyPassed = eventKey === activeEventKey ? null : eventKey;\n if (alwaysOpen) {\n if (Array.isArray(activeEventKey)) {\n if (activeEventKey.includes(eventKey)) {\n eventKeyPassed = activeEventKey.filter(k => k !== eventKey);\n } else {\n eventKeyPassed = [...activeEventKey, eventKey];\n }\n } else {\n // activeEventKey is undefined.\n eventKeyPassed = [eventKey];\n }\n }\n onSelect == null || onSelect(eventKeyPassed, e);\n onClick == null || onClick(e);\n };\n}\nconst AccordionButton = /*#__PURE__*/React.forwardRef(({\n // Need to define the default \"as\" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595\n as: Component = 'button',\n bsPrefix,\n className,\n onClick,\n ...props\n}, ref) => {\n bsPrefix = useBootstrapPrefix(bsPrefix, 'accordion-button');\n const {\n eventKey\n } = useContext(AccordionItemContext);\n const accordionOnClick = useAccordionButton(eventKey, onClick);\n const {\n activeEventKey\n } = useContext(AccordionContext);\n if (Component === 'button') {\n props.type = 'button';\n }\n return /*#__PURE__*/_jsx(Component, {\n ref: ref,\n onClick: accordionOnClick,\n ...props,\n \"aria-expanded\": Array.isArray(activeEventKey) ? activeEventKey.includes(eventKey) : eventKey === activeEventKey,\n className: classNames(className, bsPrefix, !isAccordionItemSelected(activeEventKey, eventKey) && 'collapsed')\n });\n});\nAccordionButton.displayName = 'AccordionButton';\nexport default AccordionButton;","\"use client\";\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { useBootstrapPrefix } from './ThemeProvider';\nimport AccordionButton from './AccordionButton';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst AccordionHeader = /*#__PURE__*/React.forwardRef(({\n // Need to define the default \"as\" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595\n as: Component = 'h2',\n 'aria-controls': ariaControls,\n bsPrefix,\n className,\n children,\n onClick,\n ...props\n}, ref) => {\n bsPrefix = useBootstrapPrefix(bsPrefix, 'accordion-header');\n return /*#__PURE__*/_jsx(Component, {\n ref: ref,\n ...props,\n className: classNames(className, bsPrefix),\n children: /*#__PURE__*/_jsx(AccordionButton, {\n onClick: onClick,\n \"aria-controls\": ariaControls,\n children: children\n })\n });\n});\nAccordionHeader.displayName = 'AccordionHeader';\nexport default AccordionHeader;","\"use client\";\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { useMemo } from 'react';\nimport { useBootstrapPrefix } from './ThemeProvider';\nimport AccordionItemContext from './AccordionItemContext';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst AccordionItem = /*#__PURE__*/React.forwardRef(({\n // Need to define the default \"as\" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595\n as: Component = 'div',\n bsPrefix,\n className,\n eventKey,\n ...props\n}, ref) => {\n bsPrefix = useBootstrapPrefix(bsPrefix, 'accordion-item');\n const contextValue = useMemo(() => ({\n eventKey\n }), [eventKey]);\n return /*#__PURE__*/_jsx(AccordionItemContext.Provider, {\n value: contextValue,\n children: /*#__PURE__*/_jsx(Component, {\n ref: ref,\n ...props,\n className: classNames(className, bsPrefix)\n })\n });\n});\nAccordionItem.displayName = 'AccordionItem';\nexport default AccordionItem;","\"use client\";\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { useMemo } from 'react';\nimport { useUncontrolled } from 'uncontrollable';\nimport { useBootstrapPrefix } from './ThemeProvider';\nimport AccordionBody from './AccordionBody';\nimport AccordionButton from './AccordionButton';\nimport AccordionCollapse from './AccordionCollapse';\nimport AccordionContext from './AccordionContext';\nimport AccordionHeader from './AccordionHeader';\nimport AccordionItem from './AccordionItem';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst Accordion = /*#__PURE__*/React.forwardRef((props, ref) => {\n const {\n // Need to define the default \"as\" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595\n as: Component = 'div',\n activeKey,\n bsPrefix,\n className,\n onSelect,\n flush,\n alwaysOpen,\n ...controlledProps\n } = useUncontrolled(props, {\n activeKey: 'onSelect'\n });\n const prefix = useBootstrapPrefix(bsPrefix, 'accordion');\n const contextValue = useMemo(() => ({\n activeEventKey: activeKey,\n onSelect,\n alwaysOpen\n }), [activeKey, onSelect, alwaysOpen]);\n return /*#__PURE__*/_jsx(AccordionContext.Provider, {\n value: contextValue,\n children: /*#__PURE__*/_jsx(Component, {\n ref: ref,\n ...controlledProps,\n className: classNames(className, prefix, flush && `${prefix}-flush`)\n })\n });\n});\nAccordion.displayName = 'Accordion';\nexport default Object.assign(Accordion, {\n Button: AccordionButton,\n Collapse: AccordionCollapse,\n Item: AccordionItem,\n Header: AccordionHeader,\n Body: AccordionBody\n});","import React from 'react';\n\nimport styles from './animated-border.module.scss';\n\ninterface AnimatedBorderProps {\n enabled: boolean;\n children: React.ReactNode;\n}\n\nexport function AnimatedBorder({ enabled, children }: AnimatedBorderProps): JSX.Element {\n if (!enabled) {\n return <>{children}</>;\n }\n\n return (\n <div className={styles.animatedBorder}>\n <div className={`${styles.animatedBorderContent} p-2`}>\n {children}\n </div>\n </div>\n );\n}\n","import React from 'react';\n\nexport function EditSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n d='m7.636 17.834 8.746-8.745-1.414-1.414-8.8 8.8 1.468 1.36zm-2.42.973q.675-.114 1.685-.29l-1.383-1.282a174 174 0 0 0-.302 1.572m10.459-11.84 1.414 1.415 1.2-1.2a.5.5 0 0 0 0-.707l-.708-.707a.5.5 0 0 0-.707 0zm2.614-1.906.707.707a1.5 1.5 0 0 1 0 2.121L7.45 19.435q-3.414.6-3.45.565t.621-3.393L16.167 5.06a1.5 1.5 0 0 1 2.122 0z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function VerifiedSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n d='m10.407 12.368-1.22-1.22a.49.49 0 0 0-.698.004l-.583.583a.494.494 0 0 0-.004.697l2.135 2.135c.107.108.25.154.388.142a.5.5 0 0 0 .352-.143l4.362-4.362a.494.494 0 0 0-.004-.698l-.582-.582a.495.495 0 0 0-.698-.004zm7.922-.37 1.437 1.406q.312.291.208.728a.72.72 0 0 1-.541.531l-1.957.5.551 1.936a.67.67 0 0 1-.197.729.67.67 0 0 1-.73.198l-1.935-.552-.5 1.957a.72.72 0 0 1-.53.541 1.3 1.3 0 0 1-.199.021.69.69 0 0 1-.53-.229L12 18.328l-1.405 1.436q-.292.313-.729.208a.7.7 0 0 1-.53-.541l-.5-1.957-1.937.552a.67.67 0 0 1-.728-.198.67.67 0 0 1-.198-.729l.551-1.936-1.957-.5a.72.72 0 0 1-.54-.53q-.104-.438.207-.73l1.437-1.405-1.437-1.405q-.312-.291-.208-.729a.72.72 0 0 1 .541-.53l1.957-.5-.551-1.936a.67.67 0 0 1 .198-.73.67.67 0 0 1 .728-.197l1.936.552.5-1.957a.675.675 0 0 1 .531-.531.67.67 0 0 1 .729.198L12 5.68l1.405-1.447a.7.7 0 0 1 .73-.198q.426.104.53.53l.5 1.958L17.1 5.97a.67.67 0 0 1 .729.198.67.67 0 0 1 .197.729l-.551 1.936 1.957.5a.72.72 0 0 1 .541.53q.105.438-.208.73z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { EditSvg } from 'libs/shared/images/svg/actions/EditSvg';\nimport { VerifiedSvg } from 'libs/shared/images/svg/status/VerifiedSvg';\nimport { Author, AuthorWidgetContent } from 'libs/shared/interfaces';\nimport { ArticleHelper } from 'libs/shared/utils/ArticleHelper';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './author-reviewer-widget-template.module.scss';\n\nconst namespace = 'shared.authorReviewerWidgetTemplate';\n\ninterface PersonCardWrapperProps {\n person: Author;\n}\n\nconst DATE_FORMATTER = 'MMMM D, YYYY';\n\nfunction PersonCardWrapper(props: React.PropsWithChildren<PersonCardWrapperProps>): JSX.Element {\n if (!props.person)\n return <></>;\n\n const className = `${styles.card} h-100 rounded-2 d-flex flex-column`;\n\n const externalUrl = props.person.externalUrl;\n const blogUrl = ArticleHelper.getAuthorBlogUrl(props.person.blogSlug);\n\n function onClickAuthorBlogLink(): void {\n AnalyticsHelper.logUserAction({\n id: props.person.id,\n firstName: props.person.firstName,\n lastName: props.person.lastName,\n imageId: props.person.imageId,\n externalUrl,\n blogUrl\n }, {\n entity: EntityType.Author,\n location: LocationContext.AuthorReviewerWidget,\n actionType: UserAction.Click\n });\n }\n\n if (!blogUrl && !externalUrl) {\n return (\n <div className={className}>\n {props.children}\n </div>\n );\n }\n\n return (\n <a\n href={externalUrl || blogUrl}\n target='_blank'\n className={`${className} no-decoration`}\n onClick={onClickAuthorBlogLink}\n >\n {props.children}\n </a>\n );\n}\n\ninterface PersonCardProps {\n person: Author;\n imageCdnUrl: string;\n type: 'reviewer' | 'author';\n lastUpdated: string;\n datePublished: string;\n}\n\nfunction PersonCard(props: PersonCardProps): JSX.Element {\n if (!props.person)\n return <></>;\n\n return (\n <PersonCardWrapper person={props.person}>\n <div className='d-flex mb-2'>\n <div className={`${styles.avatar} rounded-circle me-2 overflow-hidden`}>\n <img\n className='img-fluid'\n src={ImageHelper.getUrlById(props.imageCdnUrl, ImageType.Avatars, props.person.imageId, ImageSize.Medium)}\n alt={`${props.person.firstName} ${props.person.lastName}`}\n />\n </div>\n\n <div>\n <h2 className='h6 mb-0 fw-normal'>\n <SvgContainer\n className='align-middle svg-container d-inline-block'\n svg={props.type === 'reviewer' ? VerifiedSvg : EditSvg}\n />\n\n {props.type === 'reviewer' ? (\n <span className='align-middle'>\n <Text namespace={namespace} phrase='reviewedBy' />\n \n {props.person.firstName} {props.person.lastName}\n </span>\n ) : (\n <span className='align-middle'>\n <Text namespace={namespace} phrase='authoredBy' />\n \n {props.person.firstName} {props.person.lastName}\n </span>\n )}\n </h2>\n <div>\n {props.person.title}\n </div>\n </div>\n </div>\n\n <p className='mb-2 flex-grow-1'>\n {props.person.bio}\n </p>\n\n <div className={styles.time}>\n {props.type === 'reviewer' ? (\n <>\n <Text\n namespace={namespace}\n phrase='reviewed'\n /> <time dateTime={props.lastUpdated}>{DateHelper.format(props.lastUpdated, DATE_FORMATTER)}</time>\n </>\n ) : (\n <>\n <Text\n namespace={namespace}\n phrase='published'\n /> <time dateTime={props.datePublished}>{DateHelper.format(props.datePublished, DATE_FORMATTER)}</time>\n • \n <Text\n namespace={namespace}\n phrase='lastUpdated'\n /> <time dateTime={props.lastUpdated}>{DateHelper.format(props.lastUpdated, DATE_FORMATTER)}</time>\n </>\n )}\n </div>\n </PersonCardWrapper>\n );\n}\n\nexport interface AuthorReviewerWidgetTemplateProps {\n imageCdnUrl: string;\n content: AuthorWidgetContent[];\n}\n\nexport function AuthorReviewerWidgetTemplate(props: AuthorReviewerWidgetTemplateProps): JSX.Element {\n const {\n reviewer,\n author,\n lastUpdated,\n datePublished\n } = props.content[0];\n\n if (!author || !reviewer)\n return <></>;\n\n return (\n <div className='row mb-n3'>\n <div className='col-12 col-md-6 mb-3'>\n <PersonCard\n type='author'\n person={author}\n imageCdnUrl={props.imageCdnUrl}\n datePublished={datePublished}\n lastUpdated={lastUpdated}\n />\n </div>\n <div className='col-12 col-md-6 mb-3'>\n <PersonCard\n type='reviewer'\n person={reviewer}\n imageCdnUrl={props.imageCdnUrl}\n datePublished={datePublished}\n lastUpdated={lastUpdated}\n />\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport styles from '../author-reviewer-widget-template.module.scss';\n\nfunction PartialPersonCard(): JSX.Element {\n return (\n <div className={`${styles.card} rounded-2`}>\n <div className='d-flex mb-2'>\n <div className={`partial-loading-background rounded-circle me-2 ${styles.avatar}`} />\n \n <div className='w-75'>\n <div className={`partial-loading-background mb-1`} style={{ width: '90%', height: '21px' }} />\n <div className={`partial-loading-background`} style={{ width: '65%', height: '1rem' }} />\n </div>\n </div>\n \n <div>\n <div className={`partial-loading-background mb-1`} style={{ width: '100%', height: '1rem' }} />\n <div className={`partial-loading-background mb-1`} style={{ width: '75%', height: '1rem' }} />\n </div>\n \n <div className={`partial-loading-background`} style={{ width: '50%', height: '1rem' }} />\n </div>\n );\n}\n\nexport function PartialAuthorReviewerWidgetTemplate(): JSX.Element {\n return (\n <div className='row mb-n3'>\n <div className='col-12 col-md-6 mb-3'>\n <PartialPersonCard />\n </div>\n <div className='col-12 col-md-6 mb-3'>\n <PartialPersonCard />\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { BG_COLOUR_CLASS_NAMES } from 'libs/shared/constants/ColourClassNames';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Company } from 'libs/shared/interfaces';\nimport { getBgColorClass } from 'libs/shared/utils/getBgColorClass';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './circle-logo-widget-item.module.scss';\n\nexport interface CircleLogoWidgetItemProps extends FixedWidgetItemProps<Company> {\n}\n\nexport const CircleLogoWidgetItem = function(props: CircleLogoWidgetItemProps): JSX.Element {\n const logoUrl = ImageHelper.createUrl(props.data.logo?.url, { size: ImageSize.Medium });\n const logoBgColor = props.data.metadata?.colour;\n // fallback color\n const colourClass = getBgColorClass(props.data.name, BG_COLOUR_CLASS_NAMES);\n\n const analyticsData = {\n ...props.analyticsData,\n id: props.data?.id,\n name: props.data?.name\n };\n\n const analyticsOptions = {\n ...props.analyticsOptions,\n location: LocationContext.CircleLogoSlidingListWidget,\n actionType: UserAction.Click,\n entity: EntityType.Company\n };\n \n const logoStyle: React.CSSProperties = {\n backgroundImage: logoUrl ? `url('${logoUrl}')` : null,\n backgroundColor: logoBgColor\n };\n\n return (\n <AppLink\n appLink={props.getAppLink(props.data)}\n className={`position-relative px-1 flex-shrink-0 ${styles.logoItem}`}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <div\n className={classNames('rounded-circle w-100 h-100', styles.logo, !logoBgColor && colourClass)}\n style={logoStyle}\n >\n </div>\n </AppLink>\n );\n};","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { CircleLogoWidgetItem } from 'libs/shared/components/widgets/items/circle-logo-widget-item/CircleLogoWidgetItem';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Company, Video, WidgetType } from 'libs/shared/interfaces';\n\nexport interface CircleLogoSlidingListWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Video[];\n imageCdnUrl: string;\n showHighlight?: boolean;\n analyticsData?: HashObject;\n \n appLinks: {\n company: (company: Company) => Core.AppLink;\n }\n}\n\nexport function CircleLogoSlidingListWidgetTemplate(props: CircleLogoSlidingListWidgetTemplateProps): JSX.Element {\n return (\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Companies}\n collection={props.content}\n childComponent={CircleLogoWidgetItem}\n extraChildComponentProps={{}}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n getChildAppLink={props.appLinks?.company}\n />\n );\n}\n","import React from 'react';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nimport styles from './partial-circle-logo-sliding-list.module.scss';\n\nexport function PartialCircleLogoSlidingListWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n let itemsCount = 8;\n\n const breakpoints = useBreakpoints();\n if (breakpoints.sm || breakpoints.xs) {\n itemsCount = 4;\n }\n if (breakpoints.md) {\n itemsCount = 6;\n }\n\n return (\n <>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\n <div className='d-flex flex-no-wrap'>\n {Array(itemsCount).fill(null).map((_, i) => {\n return (\n <div key={i} className={styles.logoWrapper}>\n <div className={`${styles.logo} h-100 d-inline-block partial-loading-background rounded-circle`} />\n </div>\n );\n })}\n </div>\n </>\n );\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { PartialLargeSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nexport function PartialCoverFixedPillListLargeWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n return (\n <div className='py-2'>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\n <Row className='g-0'>\n {Array(5).fill(null).map((_, i) => {\n return (\n <Col key={i} xs={12} sm={6} lg={4}>\n <div className={`position-relative mb-2`}>\n <PartialLargeSubjectWidgetItem />\n </div>\n </Col>\n );\n })}\n </Row>\n </div>\n );\n}","import React from 'react';\n\nimport styles from './emoji-text.module.scss';\n\ninterface EmojiTextProps {\n emoji: string;\n}\n\nexport function EmojiText(props: React.PropsWithChildren<EmojiTextProps>): JSX.Element {\n return (\n <>\n <span className={styles.emoji}>{props.emoji}</span>\n {props.children}\n </>\n );\n}","import React from 'react';\n\nexport function ThumbsDownSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n d='M19.4 4.362h-3.119a.6.6 0 0 0-.6.6v.233l-1.774-.705a1.8 1.8 0 0 0-.67-.128H6.731a1.82 1.82 0 0 0-1.798 1.572l-.916 6.804a1.815 1.815 0 0 0 1.797 2.057h3.833l.82 3.173a2.23 2.23 0 0 0 2.155 1.67c1.487 0 2.53-1.33 2.147-2.81l-.361-1.401a1.02 1.02 0 0 1 .61-1.202l.663-.263v.233a.6.6 0 0 0 .6.6H19.4a.6.6 0 0 0 .6-.6V4.962a.6.6 0 0 0-.6-.6m-3.719 8.309-1.106.439a2.22 2.22 0 0 0-1.33 2.617l.363 1.401c.174.676-.22 1.26-.915 1.307a1.03 1.03 0 0 1-1.065-.767l-.936-3.623a.6.6 0 0 0-.58-.45H5.813a.613.613 0 0 1-.608-.697l.916-6.804a.616.616 0 0 1 .609-.532h6.506q.118 0 .227.044l2.217.88zm3.119.924h-1.919V5.562H18.8z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function ThumbsUpSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n d='M4.6 19.638h3.119a.6.6 0 0 0 .6-.6v-.233l1.774.704q.323.128.67.129h6.506a1.82 1.82 0 0 0 1.798-1.572l.916-6.804a1.815 1.815 0 0 0-1.797-2.057h-3.833l-.82-3.173a2.23 2.23 0 0 0-2.155-1.67c-1.487 0-2.53 1.33-2.147 2.81l.362 1.401a1.02 1.02 0 0 1-.61 1.202l-.664.263v-.233a.6.6 0 0 0-.6-.6H4.6a.6.6 0 0 0-.6.6v9.233a.6.6 0 0 0 .6.6m3.719-8.309 1.106-.439a2.22 2.22 0 0 0 1.33-2.617l-.363-1.401c-.174-.676.22-1.26.915-1.307.495-.033.941.289 1.065.767l.936 3.624a.6.6 0 0 0 .58.45h4.298c.373 0 .658.328.608.696l-.916 6.804a.616.616 0 0 1-.609.532h-6.506a.6.6 0 0 1-.227-.044l-2.217-.88zM5.2 10.405h1.919v8.033H5.2z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import * as Yup from 'yup';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nconst namespace = 'shared.feedbackForm';\n\nexport const FeedbackFormValidationSchema = Yup.object().shape({\n feedbackInput: Yup.string().max(5000, () => LanguageService.getPhrase(namespace, 'tooLong'))\n});","import React from 'react';\nimport { Form } from 'formik';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nimport { EmojiText } from 'libs/shared/components/emoji-text/EmojiText';\nimport { FormButtons } from 'libs/shared/components/forms/form-buttons/FormButtons';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { FormSubmissionOptions, FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { ThumbsDownSvg } from 'libs/shared/images/svg/actions/ThumbsDownSvg';\nimport { ThumbsUpSvg } from 'libs/shared/images/svg/actions/ThumbsUpSvg';\n\nimport { FeedbackFormValidationSchema } from './FeedbackFormValidationSchema';\n\nimport styles from './feedback-form.module.scss';\n\nconst namespace = 'shared.feedbackForm';\n\nexport interface DashboardFeedbackData {\n type: 'positive' | 'negative';\n content: string;\n}\n\ntype FormState = 'prompt' | 'yes' | 'no' | 'done';\n\ninterface FeedbackFormProps {\n onSubmit: (feedback: DashboardFeedbackData) => Promise<void>;\n}\n\nexport function FeedbackForm(props: FeedbackFormProps): JSX.Element {\n const [ state, setState ] = React.useState<FormState>('prompt');\n\n const alerts = useAlerts();\n\n function onClickYes(): void {\n setState('yes');\n }\n\n function onClickNo(): void {\n setState('no');\n }\n\n async function onSubmit(\n formData: { feedbackInput: string; },\n onDone: (options: FormSubmissionOptions) => void\n ): Promise<void> {\n try {\n await props.onSubmit({\n content: formData.feedbackInput,\n type: state === 'yes' ? 'positive' : 'negative'\n });\n \n setState('done');\n } catch (ex) {\n setState('prompt');\n\n alerts.error(LanguageService.getPhrase(namespace, 'error'));\n } finally {\n onDone({ reset: true });\n }\n }\n\n if (!FunctionHelper.isFunction(props.onSubmit))\n return <></>;\n\n if (state === 'prompt') {\n return (\n <div className={styles.promptContainer}>\n <p className={`fw-semibold me-2 ${styles.text}`}>\n <EmojiText emoji='🔎'>\n <Text namespace={namespace} phrase='feedbackQuestion' />\n </EmojiText>\n </p>\n\n <div className='d-flex align-items-center'>\n <IconButton\n className='btn btn-outline-dark me-2'\n onClick={onClickYes}\n svg={ThumbsUpSvg}\n >\n <Text namespace={namespace} phrase='yes' />\n </IconButton>\n\n <IconButton\n className='btn btn-outline-dark'\n onClick={onClickNo}\n svg={ThumbsDownSvg}\n >\n <Text namespace={namespace} phrase='no' />\n </IconButton>\n </div>\n </div>\n );\n }\n\n if (state === 'yes') {\n return (\n <FormWrapper\n onSubmit={onSubmit}\n initialValues={{ feedbackInput: '' }}\n validationSchema={FeedbackFormValidationSchema}\n >\n <Form className={styles.form}>\n <p className={`fw-semibold ${styles.text}`}>\n <EmojiText emoji='👏'>\n <Text namespace={namespace} phrase='happyFeedback' />\n </EmojiText>\n </p>\n <FormField\n name='feedbackInput'\n as='textarea'\n autoComplete='off'\n autoFocus\n rows={4}\n placeholder={LanguageService.getPhrase(namespace, 'feedbackPlaceholder')}\n spellCheck={false}\n />\n <div className='d-flex justify-content-end w-100'>\n <button className='btn btn-link' onClick={() => setState('prompt')}>\n <Text namespace={namespace} phrase='back' />\n </button>\n\n <FormButtons\n variant='dark'\n submitText={LanguageService.getPhrase(namespace, 'sendFeedback')}\n />\n </div>\n </Form>\n </FormWrapper>\n );\n }\n\n if (state === 'no') {\n return (\n <FormWrapper\n onSubmit={onSubmit}\n initialValues={{ feedbackInput: '' }}\n validationSchema={FeedbackFormValidationSchema}\n >\n <Form className={styles.form}>\n <p className={`fw-semibold ${styles.text}`}>\n <EmojiText emoji='😢'>\n <Text namespace={namespace} phrase='unhappyFeedback' />\n </EmojiText>\n </p>\n <FormField\n name='feedbackInput'\n as='textarea'\n autoComplete='off'\n autoFocus\n rows={4}\n placeholder={LanguageService.getPhrase(namespace, 'feedbackPlaceholder')}\n spellCheck={false}\n />\n \n <div className='d-flex justify-content-end w-100'>\n <button className='btn btn-link' onClick={() => setState('prompt')}>\n <Text namespace={namespace} phrase='back' />\n </button>\n\n <FormButtons\n variant='dark'\n submitText={LanguageService.getPhrase(namespace, 'sendFeedback')}\n />\n </div>\n </Form>\n </FormWrapper>\n );\n }\n\n if (state === 'done') {\n return (\n <p className='fw-semibold text-center'>\n <EmojiText emoji='🙌'>\n <Text namespace={namespace} phrase='thankYou' />\n </EmojiText>\n </p>\n );\n }\n\n return <></>;\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DashboardFeedbackData, FeedbackForm } from 'libs/shared/components/feedback-form/FeedbackForm';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Classification } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './cover-fixed-pill-list-xsmall.module.scss';\n\nexport interface CoverFixedPillListXSmallWidgetTemplateProps {\n name: string;\n content: Classification[];\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink;\n }\n onSubmitFeedback: (feedback: DashboardFeedbackData) => Promise<void>;\n}\n\nexport function CoverFixedPillListXSmallWidgetTemplate(\n props: CoverFixedPillListXSmallWidgetTemplateProps\n): JSX.Element {\n return (\n <>\n <div className={`${styles.background} px-4 py-3 rounded-3 mb-3`}>\n <h2 className='h5'>\n {props.name}\n </h2>\n\n <Row as='ul' className={`list-unstyled mb-2 w-100`}>\n {props.content.map(classification => {\n const coverUrl = ImageHelper.createUrl(classification.cover?.url, { size: ImageSize.Small });\n\n return (\n <Col as='li' key={classification.id} xs={12} sm={6} lg={4}>\n <AppLink\n appLink={props.appLinks?.classification?.(classification)}\n className='d-flex align-items-center mb-2'\n >\n <div className={`${styles.imageContainer} me-2`}>\n <div className={`${styles.image} rounded`} style={{ backgroundImage: `url('${coverUrl}')` }} />\n </div>\n <div>\n {classification.name}\n </div>\n </AppLink>\n </Col>\n );\n })}\n </Row>\n </div>\n\n <FeedbackForm onSubmit={props.onSubmitFeedback} />\n </>\n );\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport styles from '../cover-fixed-pill-list-xsmall.module.scss';\n\nexport function PartialCoverFixedPillListXSmallWidgetTemplate(): JSX.Element {\n return (\n <div className={`${styles.background} px-4 py-3 rounded-3 mb-3`}>\n <div className='partial-loading-background mb-2' style={{ height: '1.35rem', width: '8rem' }} />\n\n <Row className={`mb-2 ${styles.row}`}>\n {Array(8).fill(null).map((_, i) => {\n return (\n <Col key={i} xs={12} sm={6} lg={4}>\n <div className='d-flex align-items-center mb-2'>\n <div className='partial-loading-background me-2 rounded' style={{ width: '2rem', height: '2rem' }} />\n\n <div className='partial-loading-background' style={{ width: '5rem', height: '1.3125rem' }} />\n </div>\n </Col>\n );\n })}\n </Row>\n </div>\n );\n}","import * as React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { PlaylistItem } from 'libs/shared/apps/playlists/components/playlist-list';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { Playlist, PresentationAudience } from 'libs/shared/interfaces';\n\nconst analyticsOptions: AnalyticsOptions = {\n actionType: UserAction.Click,\n entity: EntityType.Playlist,\n location: LocationContext.PlaylistListItem,\n descriptor: ClickDescriptor.Cover\n};\n\nexport interface CoverFixedTileListWidgetTemplateProps {\n name: string;\n description: string;\n content: Playlist[];\n audiences: PresentationAudience[];\n analyticsData?: HashObject;\n \n appLinks: {\n playlist: (playlist: Playlist) => Core.AppLink;\n }\n}\n\nexport function CoverFixedTileListWidgetTemplate(props: CoverFixedTileListWidgetTemplateProps): JSX.Element {\n return (\n <div>\n <WidgetHeader name={props.name} description={props.description} />\n <Row as='ul' className='list-unstyled mx-n1 mb-n2'>\n {props.content.map(p => (\n <Col as='li' key={p.id} xs={6} sm={4} lg={3} className={`px-1 pb-2 columns-of-five`}>\n <PlaylistItem\n data={p}\n presentationAudiences={props.audiences}\n appLink={props.appLinks?.playlist?.(p)}\n itemStyle='round'\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n />\n </Col>\n ))}\n </Row>\n </div>\n );\n}","import React from 'react';\n\nimport { PartialPlaylistList } from 'libs/shared/apps/playlists/components/playlist-list';\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nexport function PartialCoverFixedTileListWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n return (\n <>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\n <PartialPlaylistList itemClassName='columns-of-five' />\n </>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { DynamicWidget } from 'libs/shared/components/widgets/dynamic-widget/DynamicWidget';\nimport { SubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item';\nimport { PartialSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item/PartialSubjectWidgetItem';\nimport { HardCoded } from 'libs/shared/constants/HardCoded';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { Classification, Cover, CuratedDashboardAppLink } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nconst CLASSIFICATION_LATEST_RELEASES = 'classification-latest-releases';\nconst EXPLORE_ALL_TOPICS = 'explore-all-topics';\n\nexport interface CoverItemContent {\n id: string;\n name: string;\n cover: Cover;\n totalVideos?: number;\n}\n\nfunction getTotalVideos(content: CoverItemContent[]): number {\n return content.reduce((sum, cur) => sum += (cur?.totalVideos || 0), 0);\n}\n\nfunction getSubtitleFromTotalVideos(data: CoverItemContent): string {\n return data.totalVideos ? `${data.totalVideos} new video${data.totalVideos > 1 ? 's' : '' }` : '';\n}\n\nfunction getExtraItem(props: CoverSlidingPillListSmallWidgetTemplateProps, content: CoverItemContent[]) {\n if (\n props.metadata?.appLink === CuratedDashboardAppLink.ClassificationDirectory &&\n props.settings?.hasTopicDirectories\n ) {\n return {\n id: CuratedDashboardAppLink.ClassificationDirectory,\n name: `Explore all topics`,\n cover: {\n url: ImageHelper.createUrl(\n props.classification?.cover?.url,\n { size: ImageSize.Small }\n )\n },\n metadata: {\n backgroundColor: props.classification?.metadata?.backgroundColor\n }\n };\n }\n\n if (props.metadata?.appLink === CuratedDashboardAppLink.ClassificationLatestReleases)\n return {\n id: CLASSIFICATION_LATEST_RELEASES,\n name: 'All new releases',\n cover: {\n url: ImageHelper.getUrlById(props.imageCdnUrl, ImageType.Covers, props.metadata.imageId, ImageSize.Medium)\n },\n totalVideos: getTotalVideos(content)\n };\n\n if (props.metadata?.appLink === CuratedDashboardAppLink.ExploreAllTopics)\n return {\n id: EXPLORE_ALL_TOPICS,\n name: 'Explore all subjects',\n cover: { url: ImageHelper.createUrl(HardCoded.Images.STREAMABLE_TOPIC_COVER, { size: ImageSize.Small }) }\n };\n}\n\nexport interface CoverSlidingPillListSmallWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n imageCdnUrl: string;\n content: CoverItemContent[];\n classification: Classification;\n showHighlight?: boolean;\n analyticsData?: HashObject;\n \n widgetTypeId: WidgetTypeId;\n templateId: WidgetTemplate;\n appLinks: {\n classificationDirectory: (classification: Classification) => Core.AppLink;\n allTopics: (presentationId?: string) => Core.AppLink;\n classificationLatestReleases: (classification: Classification) => Core.AppLink;\n classification: (classification: Classification | null) => Core.AppLink;\n }\n metadata: {\n imageId: string;\n appLink: CuratedDashboardAppLink\n };\n settings: {\n hasTopicDirectories: boolean;\n };\n}\n\nexport function CoverSlidingPillListSmallWidgetTemplate(\n props: CoverSlidingPillListSmallWidgetTemplateProps\n): JSX.Element {\n const extraContent = getExtraItem(props, props.content);\n const isClassificationLatestReleasedWidget =\n props.metadata?.appLink === CuratedDashboardAppLink.ClassificationLatestReleases;\n\n function getHeadingAppLink(): Core.AppLink {\n if (\n !props.classification ||\n !TopicsHelper.isTopLevelTopic(props.classification) ||\n props.widgetTypeId !== WidgetTypeId.Classifications ||\n props.templateId !== WidgetTemplate.CoverSlidingPillListSmall ||\n !props.settings?.hasTopicDirectories\n ) {\n return null;\n }\n\n return props.appLinks?.classificationDirectory?.(props.classification);\n }\n\n function getChildAppLink(data: any): Core.AppLink {\n if (data.id === CuratedDashboardAppLink.ClassificationDirectory)\n return props.appLinks?.classificationDirectory?.(props.classification);\n \n if (data.id === CuratedDashboardAppLink.ExploreAllTopics)\n return props.appLinks?.allTopics?.(data);\n\n return isClassificationLatestReleasedWidget\n ? props.appLinks?.classificationLatestReleases?.(data)\n : props.appLinks?.classification?.(data);\n }\n\n return (\n <DynamicWidget\n id={props.id}\n collection={extraContent ? [ extraContent, ...props.content ] : props.content}\n getChildAppLink={data => getChildAppLink(data)}\n childComponent={SubjectWidgetItem}\n partialLoadingComponent={PartialSubjectWidgetItem}\n heading={props.name}\n headingAppLink={getHeadingAppLink()}\n getSubtitle={\n isClassificationLatestReleasedWidget\n ? getSubtitleFromTotalVideos\n : undefined\n }\n description={props.description}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n childComponentProps={{\n highlightOnHover: props.settings?.hasTopicDirectories,\n shouldHighlight: (data: CoverItemContent) => data.id === CuratedDashboardAppLink.ClassificationDirectory\n }}\n />\n );\n}\n","import React from 'react';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { PartialDynamicWidget } from 'libs/shared/components/widgets/dynamic-widget';\nimport { PartialSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nexport function PartialCoverSlidingPillListSmallWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n return (\n <div className='py-2'>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\n <PartialDynamicWidget partialLoadingComponent={PartialSubjectWidgetItem} />\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\ninterface SearchExchangeArchiveDescriptionProps {\n appLink: Core.AppLink;\n}\n\nconst namespace = 'search.searchExchangeArchiveDescription';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function SearchExchangeArchiveDescription(props: SearchExchangeArchiveDescriptionProps): JSX.Element {\n return (\n <>\n {getPhrase('searchExchangeArchiveDescription')}\n \n <AppLink\n appLink={props.appLink}\n className='info-link'\n >\n {getPhrase('searchExchangeArchiveLink')}\n </AppLink>\n </>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { EntityType, LocationContext } from 'libs/analytics/interfaces';\n\nimport { SearchExchangeArchiveDescription } from 'libs/shared/apps/search/components/search-exchange-archive-description/SearchExchangeArchiveDescription';\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Company, InteractiveMetadata, PresentationAudience, Series, Video } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nexport interface ThumbnailVerticalListWidgetTemplateProps {\n widgetTypeId: WidgetTypeId;\n name: string;\n description: string;\n content: Video[];\n hasPermissions: HasPermissionsFunc;\n audiences: PresentationAudience[];\n\n seeMoreLink: Core.AppLink;\n\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink;\n series: (series: Series) => Core.AppLink;\n company: (company: Company) => Core.AppLink;\n searchSettings: () => Core.AppLink;\n searchHome: (filters?: HashObject) => Core.AppLink;\n getPreviewQuestionsAppLink: (interactive: InteractiveMetadata) => Core.AppLink;\n };\n metadata: {\n hideWidgetHeading: boolean;\n hideWidgetDescription: boolean;\n };\n settings: {\n hasTopicDirectories: boolean;\n };\n\n commonVideoProps: CommonVideoProps;\n badgeComponent: JSX.Element;\n getAnalyticsData?: (itemIndex: number) => HashObject;\n}\n\nexport function ThumbnailVerticalListWidgetTemplate(props: ThumbnailVerticalListWidgetTemplateProps) {\n function getShowSeeMoreLink(): boolean {\n return (!!props.seeMoreLink &&\n [\n WidgetTypeId.SearchExchangeArchive,\n WidgetTypeId.SearchMySchoolLibraryVideos\n ].includes(props.widgetTypeId)\n );\n }\n \n function getDescription() {\n if (props.widgetTypeId === WidgetTypeId.SearchExchangeArchive) {\n return <SearchExchangeArchiveDescription appLink={props.appLinks.searchSettings()} />;\n }\n \n return props.description;\n }\n\n return (\n <>\n <WidgetHeader\n name={!props.metadata?.hideWidgetHeading && props.name}\n description={!props.metadata.hideWidgetDescription && getDescription()}\n showSeeMoreLink={getShowSeeMoreLink()}\n appLink={props.seeMoreLink}\n badgeComponent={props.badgeComponent}\n />\n\n <VideoList\n videos={props.content}\n getVideoAppLink={props.appLinks?.videoType}\n hasPermissions={props.hasPermissions}\n getPreviewQuestionsAppLink={props.appLinks?.getPreviewQuestionsAppLink}\n presentationAudiences={props.audiences}\n commonVideoProps={props.commonVideoProps}\n getAnalyticsData={props.getAnalyticsData}\n analyticsOptions={{\n location: LocationContext.ThumbnailVerticalListWidget,\n entity: EntityType.Video\n }}\n />\n </>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { HashObject, LocationContext } from 'libs/analytics/interfaces';\n\nimport { CurriculumLeaf } from 'libs/shared/components/curriculum-links/CurriculumLinks';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Company, InteractiveMetadata, PresentationAudience, Series, Video } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nimport { ThumbnailVerticalListWidgetTemplate } from '../thumbnail-vertical-list/ThumbnailVerticalListWidgetTemplate';\n\nexport interface CurriculumCodeSearchResultsWidgetTemplateProps {\n name: string;\n content: Video[];\n hasPermissions: HasPermissionsFunc;\n audiences: PresentationAudience[];\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink;\n series: (series: Series) => Core.AppLink;\n company: (company: Company) => Core.AppLink;\n searchSettings: () => Core.AppLink;\n searchHome: (filters?: HashObject) => Core.AppLink;\n getPreviewQuestionsAppLink: (interactive: InteractiveMetadata) => Core.AppLink;\n };\n metadata: {\n curriculumLeafName: string;\n curriculumLeafDescription: string;\n };\n commonVideoProps: CommonVideoProps;\n settings: {\n hasTopicDirectories: boolean;\n };\n getAnalyticsData: (itemIndex: number) => HashObject;\n}\n\nexport function CurriculumCodeSearchResultsWidgetTemplate(\n props: CurriculumCodeSearchResultsWidgetTemplateProps\n): JSX.Element {\n return (\n <>\n <div className='bg-gray-100 p-3 rounded-3 mb-3'>\n <h2 className='h6'>\n {props.name}\n </h2>\n <CurriculumLeaf\n code={props.metadata.curriculumLeafName}\n description={props.metadata.curriculumLeafDescription}\n id={null}\n locationContext={LocationContext.SearchCurriculumCodeWidget}\n />\n </div>\n\n <ThumbnailVerticalListWidgetTemplate\n metadata={{\n hideWidgetHeading: true,\n hideWidgetDescription: true\n }}\n name=''\n description=''\n widgetTypeId={WidgetTypeId.SearchCurriculumCode}\n hasPermissions={props.hasPermissions}\n content={props.content}\n audiences={props.audiences}\n seeMoreLink={null}\n appLinks={props.appLinks}\n commonVideoProps={props.commonVideoProps}\n badgeComponent={null}\n settings={props.settings}\n getAnalyticsData={props.getAnalyticsData}\n />\n </>\n );\n}","import React from 'react';\n\nexport function MinusSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fillRule='evenodd'\n d='M7 11h10c.554 0 1 .446 1 1s-.446 1-1 1H7c-.554 0-1-.446-1-1s.446-1 1-1'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\nimport { AccordionContext, useAccordionButton } from 'react-bootstrap';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { MinusSvg } from 'libs/shared/images/svg/actions/MinusSvg';\nimport { PlusSvg } from 'libs/shared/images/svg/actions/PlusSvg';\n\nimport styles from './accordion-button.module.scss';\n\ninterface AccordionButtonProps extends React.PropsWithChildren {\n name: string;\n}\n\nexport function AccordionButton(props: AccordionButtonProps): JSX.Element {\n const { activeEventKey } = React.useContext(AccordionContext);\n \n const onClick = useAccordionButton(props.name);\n \n const isExpanded = activeEventKey === props.name;\n \n return (\n <button\n type='button'\n onClick={onClick}\n className={`w-100 p-3 ${styles.accordionButton} ${isExpanded ? styles.expanded : ''}`}\n >\n <div className={`d-flex align-items-center justify-content-between`}>\n <h3 className='mb-0 h5 fw-normal'>\n {props.name}\n </h3>\n\n <div className='rounded-circle bg-white me-2'>\n <SvgContainer svg={isExpanded ? MinusSvg : PlusSvg} />\n </div>\n </div>\n </button>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { VideoItemGuidance } from 'libs/shared/components/video-list/components/video-guidance/VideoItemGuidance';\nimport { VideoItemTitle } from 'libs/shared/components/video-list/components/video-item-title/VideoItemTitle';\nimport { VideoSubText } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { CurriculumNode } from 'libs/shared/components/widgets/curated-widgets/templates/curriculum-resources-accordion/CurriculumAccordionUtils';\nimport { CurriculumType } from 'libs/shared/enums/CurriculumType';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Series, Video } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nimport styles from './curriculum-accordion-video-list.module.scss';\n\nconst namespace = 'shared.curriculumAccordionVideoList';\n\ninterface CurriculumAccordionVideoListProps {\n outcome: CurriculumNode<CurriculumType.Leaf>;\n analyticsData: HashObject;\n getVideoAppLink: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink;\n getSeriesAppLink: (series: Series) => Core.AppLink;\n getOutcomeAppLink: (code: string) => Core.AppLink;\n commonVideoProps: CommonVideoProps;\n outcomeIndex: number;\n}\n\nexport function CurriculumAccordionVideoList(props: CurriculumAccordionVideoListProps): JSX.Element {\n const hasCode = !!props.outcome.name && !!props.outcome.description;\n\n return (\n <>\n <h4 className='h6'>\n <Text namespace={namespace} phrase='alignedVideos' />\n </h4>\n\n <ul className='list-unstyled'>\n {props.outcome.videos.map((video, index) => {\n const analyticsProps = {\n analyticsData: props.analyticsData,\n analyticsOptions: {\n entity: EntityType.Video,\n actionType: UserAction.Click,\n location: LocationContext.CurriculumResourcesAccordionWidget\n }\n };\n\n return (\n <li key={`${props.outcomeIndex}:${index}`} className={`${styles.video} d-flex`}>\n <div className={`${styles.thumbnail} me-2`}>\n <VideoThumbnail\n appLink={props.getVideoAppLink(video, {})}\n video={video}\n type='static'\n imageOptions={{ size: ImageSize.Medium }}\n commonVideoProps={props.commonVideoProps}\n hideDuration\n {...analyticsProps}\n />\n </div>\n\n <div className='d-flex flex-column justify-content-between'>\n <div>\n <VideoSubText\n {...analyticsProps}\n video={video}\n appLink={props.getSeriesAppLink(video.series)}\n type='series'\n />\n <VideoItemTitle\n {...analyticsProps}\n video={video}\n appLink={props.getVideoAppLink(video, {})}\n size='sm'\n titleClassName='mb-0'\n yearGroups={props.commonVideoProps.yearGroups}\n showNewVideoIndicator={props.commonVideoProps.showNewVideoIndicator}\n showPadlock={!props.commonVideoProps.hasStudentExperience\n && !props.commonVideoProps.hasGuestExperience}\n />\n </div>\n\n <VideoItemGuidance\n video={video}\n getVideoAppLink={props.getVideoAppLink}\n commonVideoProps={props.commonVideoProps}\n containerClassName={`d-flex justify-content-start align-items-center pt-sm-1 gap-1`}\n responsiveClassName={styles.responsiveGuidance}\n {...analyticsProps}\n />\n </div>\n </li>\n );\n })}\n </ul>\n <AppLink\n appLink={props.getOutcomeAppLink(props.outcome.name)}\n className='info-link mt-2 d-inline-block'\n >\n {hasCode ? (\n <Text namespace={namespace} phrase='viewAllVideosCode' options={{ code: props.outcome.name }} />\n ) : (\n <Text namespace={namespace} phrase='viewAllVideosNoCode' />\n )}\n </AppLink>\n </>\n );\n}","import React from 'react';\nimport { Accordion } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { CurriculumLeaf } from 'libs/shared/components/curriculum-links/CurriculumLinks';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CurriculumAccordionVideoList } from 'libs/shared/components/widgets/curated-widgets/templates/curriculum-resources-accordion/components/curriculum-accordion-video-list/CurriculumAccordionVideoList';\nimport { CurriculumAudienceSection } from 'libs/shared/components/widgets/curated-widgets/templates/curriculum-resources-accordion/CurriculumAccordionUtils';\nimport { Series, Video } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nimport styles from './audience-section.module.scss';\n\nconst namespace = 'shared.audienceSection';\n\ninterface AudienceSectionProps {\n audience: CurriculumAudienceSection;\n getSearchAppLink: (code: string) => Core.AppLink;\n getVideoAppLink: (obj: Video, options: GetVideoAppLinkOptions) => Core.AppLink;\n getSeriesAppLink: (series: Series) => Core.AppLink;\n commonVideoProps: CommonVideoProps;\n analyticsData: HashObject;\n}\n\nexport function AudienceSection(props: AudienceSectionProps): JSX.Element {\n return (\n <Accordion.Collapse eventKey={props.audience.name}>\n <div className={`${styles.audience} px-3 pb-3`}>\n <ul className='bg-white p-3 rounded-3 list-unstyled mb-0'>\n {props.audience.areas.map((area, index) => {\n return (\n <li key={index} className={styles.area}>\n <h3 className='h5 fw-normal mb-3'>{area.name}</h3>\n\n <ul className='list-unstyled'>\n {area.outcomes.map((outcome, outcomeIndex) => {\n return (\n <li key={outcomeIndex} className={styles.outcome}>\n <h4 className='h6'>\n <Text namespace={namespace} phrase='outcome' />\n </h4>\n\n <div className='pb-2'>\n <CurriculumLeaf\n id={outcome.id}\n code={outcome.name}\n description={outcome.description}\n getCodeAppLink={props.getSearchAppLink}\n locationContext={LocationContext.CurriculumResourcesAccordionWidget}\n uiContainsCodes\n />\n </div>\n\n <CurriculumAccordionVideoList\n outcome={outcome}\n analyticsData={props.analyticsData}\n getVideoAppLink={props.getVideoAppLink}\n getSeriesAppLink={props.getSeriesAppLink}\n getOutcomeAppLink={props.getSearchAppLink}\n commonVideoProps={props.commonVideoProps}\n outcomeIndex={outcomeIndex}\n />\n </li>\n );\n })}\n </ul>\n </li>\n );\n })}\n </ul>\n </div>\n </Accordion.Collapse>\n );\n}","import { CurriculumType } from 'libs/shared/enums/CurriculumType';\nimport { Curriculum, Video } from 'libs/shared/interfaces';\n\nexport type CurriculumNode<TType = CurriculumType> = Curriculum<TType> & {\n children: CurriculumNode[];\n videos: Video[];\n};\n\nexport type CurriculumAudienceSection = {\n name: string;\n areas: CurriculumAudienceArea[];\n};\n\nexport type CurriculumOutcomeSection = {\n name: string;\n description: string;\n videos: Video[];\n}\n\ntype CurriculumAudienceArea = {\n name: string;\n outcomes: CurriculumNode<CurriculumType.Leaf>[];\n};\n\nfunction getAudienceAreas(audience: CurriculumNode): CurriculumAudienceArea[] {\n const areas: Map<string, CurriculumAudienceArea> = new Map();\n\n function traverse(node: CurriculumNode, areaName: string): void {\n if (node.type === CurriculumType.Area) {\n if (areaName.length)\n areaName += ` - `;\n\n areaName += node.name;\n\n for (const child of node.children)\n traverse(child, areaName);\n\n return;\n }\n\n if (node.type === CurriculumType.Leaf) {\n if (!areas.has(areaName)) {\n areas.set(areaName, {\n name: areaName,\n outcomes: []\n });\n }\n\n areas.get(areaName).outcomes.push(node as CurriculumNode<CurriculumType.Leaf>);\n }\n }\n\n for (const area of audience.children)\n traverse(area, '');\n\n return Array.from(areas.values());\n}\n\nexport function getCurriculumAccordion(tree: CurriculumNode[]) {\n const audienceLookup: Map<string, CurriculumAudienceSection> = new Map();\n\n for (const subject of tree) {\n for (const audience of subject.children) {\n if (!audienceLookup.has(audience.name)) {\n audienceLookup.set(audience.name, {\n name: audience.name,\n areas: []\n });\n }\n\n audienceLookup.get(audience.name).areas.push(...getAudienceAreas(audience));\n }\n }\n\n return Array.from(audienceLookup.values());\n}","import React from 'react';\nimport { Accordion } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CurriculumData, Series, Video } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nimport { AccordionButton } from './components/accordion-button/AccordionButton';\nimport { AudienceSection } from './components/audience-section/AudienceSection';\nimport { CurriculumNode, getCurriculumAccordion } from './CurriculumAccordionUtils';\n\nconst namespace = 'shared.curriculumResourcesAccordion';\n\nexport interface CurriculumResourcesAccordionWidgetTemplateProps {\n content: CurriculumNode[];\n curriculums: CurriculumData;\n appLinks: {\n editCurriculum: () => Core.AppLink;\n search: (code: string) => Core.AppLink;\n videoType: (video: Video, opts: GetVideoAppLinkOptions) => Core.AppLink;\n series: (series: Series) => Core.AppLink;\n };\n commonVideoProps: CommonVideoProps;\n analyticsData: HashObject;\n}\n\nexport function CurriculumResourcesAccordionWidgetTemplate(\n props: CurriculumResourcesAccordionWidgetTemplateProps\n): JSX.Element {\n const accordion = React.useMemo(() => getCurriculumAccordion(props.content), [props.content]);\n\n return (\n <div>\n <div className='d-flex align-items-end justify-content-between mb-2'>\n <h2 className='h3 mb-0'>\n {props.curriculums.preferredCurriculum.name}\n </h2>\n\n {props.curriculums.availableCurriculums.length > 1 && (\n <AppLink appLink={props.appLinks.editCurriculum()}>\n <Text namespace={namespace} phrase='changeCurriculum' />\n </AppLink>\n )}\n </div>\n\n <Accordion className='mb-n3'>\n {accordion.map((audience, index) => {\n return (\n <div className='mb-3' key={index}>\n <AccordionButton name={audience.name} />\n <AudienceSection\n audience={audience}\n getSearchAppLink={props.appLinks.search}\n getVideoAppLink={props.appLinks.videoType}\n getSeriesAppLink={props.appLinks.series}\n commonVideoProps={props.commonVideoProps}\n analyticsData={props.analyticsData}\n />\n </div>\n );\n })}\n </Accordion>\n </div>\n );\n}","import React from 'react';\n\nconst Item = () => <div className='partial-loading-background mb-3 rounded-3' style={{ height: '3.5rem' }} />;\n\nexport function PartialCurriculumResourcesAccordionWidgetTemplate(): JSX.Element {\n return (\n <>\n <div className='partial-loading-background mb-2 w-25' style={{ height: '1.7325rem' }} />\n <div className='mb-n3'>\n <Item />\n <Item />\n <Item />\n <Item />\n <Item />\n <Item />\n <Item />\n </div>\n </>\n );\n}","import React from 'react';\n\nexport function HamburgerSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n fillRule='nonzero'\n d='M19 15.75a.75.75 0 0 1 .102 1.493L19 17.25H5a.75.75 0 0 1-.102-1.493L5 15.75zm0-5a.75.75 0 0 1 .102 1.493L19 12.25H5a.75.75 0 0 1-.102-1.493L5 10.75zm0-5a.75.75 0 0 1 .102 1.493L19 7.25H5a.75.75 0 0 1-.102-1.493L5 5.75z'\n />\n </svg>\n );\n}\n","import React from 'react';\nimport { DraggableAttributes } from '@dnd-kit/core';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { ToggleSwitch } from 'libs/shared/components/toggle-switch/ToggleSwitch';\nimport { HamburgerSvg } from 'libs/shared/images/svg/objects/HamburgerSvg';\nimport { Classification } from 'libs/shared/interfaces';\n\nimport styles from './cover-pill.module.scss';\n\nconst namespace = 'shared.subjectWidgetItem';\n\ninterface EditableSubjectWidgetItemProps {\n data: Classification;\n onToggleVisibility: (c: Classification) => void;\n isVisible: boolean;\n dragAttributes?: DraggableAttributes;\n dragListeners?: HashObject;\n style?: HashObject;\n isDragging: boolean;\n canToggle: boolean;\n\n multiline?: boolean;\n}\n\nexport const EditableSubjectWidgetItem = React.forwardRef((\n props: EditableSubjectWidgetItemProps,\n ref: React.LegacyRef<HTMLDivElement>\n): JSX.Element => {\n let wrapperClassName = 'px-3 d-flex flex-column justify-content-center';\n let textClassName = `${styles.name} h6`;\n\n if (!props.multiline) {\n wrapperClassName += ' text-nowrap';\n textClassName += ' text-truncate';\n } else {\n textClassName += ` clamp-3`;\n }\n\n function getToggleTooltip(): string {\n if (!props.canToggle)\n return LanguageService.getPhrase(namespace, 'cantToggle');\n\n return LanguageService.getPhrase(namespace, props.isVisible ? 'hideFromDashboard' : 'showOnDashboard');\n }\n\n if (props.style?.visibility === 'hidden') {\n return (\n <div\n ref={ref}\n className={`d-flex align-items-center position-relative clamp-2 ${styles.widgetItem} ${styles.draggingItem}`}\n style={ObjectHelper.omit(props.style, ['visibility'])}\n >\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n className={`border d-flex align-items-center position-relative ${styles.widgetItem}`}\n style={ObjectHelper.omit(props.style, ['visibility'])}\n >\n <div\n className={`\n ${styles.dragHandle} ms-3 d-flex justify-content-center align-items-center \n ${props.isDragging ? 'cursor-grabbing' : 'cursor-grab'} ${props.isVisible ? '' : 'text-secondary'}\n `}\n {...props.dragAttributes}\n {...props.dragListeners}\n >\n <SvgContainer svg={HamburgerSvg} />\n </div>\n <div className={wrapperClassName}>\n <label htmlFor={props.data.id} className={`${textClassName} ${props.isVisible ? '' : 'text-secondary'} mb-0`}>\n {props.data.name}\n </label>\n </div>\n\n <div className='ms-auto me-3'>\n <ToggleSwitch\n id={props.data.id}\n on={props.isVisible}\n onClick={() => props.onToggleVisibility(props.data)}\n tooltipText={getToggleTooltip()}\n disabled={!props.canToggle}\n showStateWhenDisabled\n />\n </div>\n </div>\n );\n});","import { HashObject } from 'libs/common/react/interfaces/HashObject';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { BaseObject, ReorderRequest } from 'libs/shared/interfaces';\n\ninterface ReorderResult<T extends BaseObject> {\n reorderRequest: ReorderRequest;\n reorderedItems: T[];\n}\n\nexport const ReorderHelper = {\n reorder<T extends BaseObject>(items: T[], oldIdx: number, newIdx: number): ReorderResult<T> {\n if (oldIdx === newIdx)\n return { reorderedItems: items, reorderRequest: null };\n\n const reorderedItems: T[] = ArrayHelper.moveItem(items, oldIdx, newIdx);\n\n /**\n * If newIdx is the last idx then we set\n * destinationMemberId to null.\n */\n const destinationMemberId = newIdx < items.length - 1\n ? reorderedItems[newIdx + 1].id\n : null;\n\n const reorderRequest: ReorderRequest = {\n sourceMemberId: reorderedItems[newIdx].id,\n destinationMemberId\n };\n\n return { reorderedItems, reorderRequest };\n },\n\n updateState(\n dataPrefix: string,\n reorderRequest: ReorderRequest,\n data: { [key: string]: HashObject }\n ): { [key: string]: HashObject } {\n const items: BaseObject[] = [];\n const updatedData = ObjectHelper.deepClone(data);\n\n const keys = [dataPrefix]; // Maintain an ordered list of keys.\n let page = data[dataPrefix];\n const pageSize = !!page && !!page.data && page.data.length;\n\n /**\n * Flatten items\n */\n while (page) {\n if (!Array.isArray(page.data))\n break;\n\n items.push(...page.data as BaseObject[]);\n\n const nextCursor = page.pagination\n && page.pagination.cursors\n && page.pagination.cursors.next;\n\n const nextKey = !!nextCursor && `${dataPrefix}:${nextCursor}`;\n\n page = nextCursor && data[nextKey];\n\n if (page)\n keys.push(nextKey);\n }\n\n if (!items.length)\n return data;\n\n /**\n * Reorder items\n */\n const removeIdx = ArrayHelper.findIndex(items, i => i.id === reorderRequest.sourceMemberId);\n\n let reorderedItems = [...items];\n\n const itemToMove = reorderedItems.splice(removeIdx, 1);\n\n const insertIdx = reorderRequest.destinationMemberId\n ? ArrayHelper.findIndex(reorderedItems, r => r.id === reorderRequest.destinationMemberId)\n : reorderedItems.length;\n\n reorderedItems.splice(insertIdx, 0, itemToMove[0]);\n\n reorderedItems = reorderedItems.map(v => ({ id: v.id }));\n\n /**\n * Paginate reordered items\n */\n keys.forEach(key => {\n const itemsToInsert = reorderedItems.splice(0, pageSize);\n updatedData[key].data = itemsToInsert;\n });\n\n return updatedData;\n }\n};","import React from 'react';\nimport { Button, Col, Row } from 'react-bootstrap';\nimport { DragEndEvent, DragStartEvent } from '@dnd-kit/core';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, ToggleDescriptor, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { SortableContainerWrapper } from 'libs/shared/components/sortable/SortableContainerWrapper';\nimport { SortableItemWrapper } from 'libs/shared/components/sortable/SortableItemWrapper';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { EditableSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item/EditableSubjectWidgetItem';\nimport { SubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item/SubjectWidgetItem';\nimport { LocalPermissionName } from 'libs/shared/enums/PermissionName';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { HasLocalPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Classification, Presentation, WidgetPreference } from 'libs/shared/interfaces';\nimport { ReorderHelper } from 'libs/shared/utils/ReorderHelper';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './editable-cover-fixed-pill-list-small.module.scss';\n\ninterface PreferencesHash {\n [classificationId: string]: WidgetPreference;\n}\n\ninterface PresentationSwitchItem extends Classification {\n vanitySlug: string\n}\n\nconst namespace = 'shared.editableCoverFixedPillListSmall';\n\nexport interface EditableCoverFixedPillListSmallWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n presentation: Presentation;\n preferences: WidgetPreference[];\n widgetTypeId: WidgetTypeId;\n content: Classification[];\n isPreviewing: boolean;\n updatePreferences: (\n widgetId: string,\n widgetTypeId: WidgetTypeId,\n oldPreferences: WidgetPreference[],\n newPreferences: WidgetPreference[]\n ) => Promise<void>;\n availablePresentations: Presentation[];\n settings: {\n hasTopicDirectories: boolean;\n };\n isTertiaryCustomerWithoutExchange: boolean;\n hasLocalPermissions: HasLocalPermissionsFunc;\n analyticsData?: HashObject;\n \n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink;\n allTopics: (presentationId?: string) => Core.AppLink;\n discover: (presentationId?: string) => Core.AppLink;\n }\n}\n\nexport function EditableCoverFixedPillListSmallWidgetTemplate(\n props: EditableCoverFixedPillListSmallWidgetTemplateProps\n): JSX.Element {\n const [ isEditing, setIsEditing ] = React.useState(false);\n const [ showSpinner, setShowSpinner ] = React.useState(false);\n\n const processedContent = WidgetHelper.useGetContent(\n props.content,\n props.widgetTypeId,\n props.isPreviewing,\n props.preferences,\n []\n );\n const content = processedContent.unfilteredContent as Classification[];\n\n const isFollowingNothing = React.useMemo(() => {\n return content.every(c => !c.followers?.data?.length);\n }, [content]);\n\n const initialPreferences = React.useMemo(() => {\n return content?.reduce((acc: HashObject, current, index) => {\n const preference: WidgetPreference = {\n id: current.id,\n hidden: !current.followers?.data?.length && !isFollowingNothing,\n index\n };\n\n acc[current.id] = preference;\n return acc;\n }, {}) ?? {};\n }, [ props.preferences, isFollowingNothing ]);\n\n const [ persistedPreferences, setPersistedPreferences ] = React.useState<PreferencesHash>(initialPreferences);\n const [ preferences, setPreferences ] = React.useState<PreferencesHash>(initialPreferences);\n\n const currentSubjects = React.useMemo(() => {\n if (!isEditing) {\n return content\n .filter(c => !!persistedPreferences[c.id] && !persistedPreferences[c.id]?.hidden)\n .sort((a, b) => persistedPreferences[a.id].index - persistedPreferences[b.id].index);\n }\n\n return content\n .filter(c => !!preferences[c.id])\n .sort((a, b) => preferences[a.id].index - preferences[b.id].index);\n }, [ content, preferences, persistedPreferences, isEditing ]);\n \n const alerts = useAlerts();\n\n React.useEffect(() => {\n setIsEditing(false);\n }, [props.presentation?.id]);\n\n /**\n * The \"Explore all subjects\" option displays for users who have hidden some topics\n */\n const showExploreAllTopics = React.useMemo(() => {\n if (isEditing || !currentSubjects.length)\n return false;\n \n return Object.values(preferences).some(p => p.hidden);\n }, [ isEditing, preferences ]);\n\n async function onClickSavePreferences(): Promise<void> {\n setShowSpinner(true);\n\n const oldPreferences = isFollowingNothing\n ? content.map((c, index) => ({ id: c.id, hidden: true, index }))\n : Object.values(persistedPreferences);\n\n props.updatePreferences(props.id, props.widgetTypeId, oldPreferences, Object.values(preferences))\n .then(() => {\n setPersistedPreferences(preferences);\n setShowSpinner(false);\n setIsEditing(false);\n })\n .catch(() => {\n setShowSpinner(false);\n alerts.error(LanguageService.getPhrase(namespace, 'error'));\n });\n }\n\n function onClickCancel(): void {\n setPreferences(persistedPreferences);\n setIsEditing(false);\n }\n\n function getItemIndex(classification: Classification): number {\n if (preferences[classification.id])\n return preferences[classification.id].index;\n \n return currentSubjects.findIndex(c => c.id === classification.id);\n }\n\n function isVisible(classification: Classification): boolean {\n return !preferences[classification.id]?.hidden;\n }\n\n function onToggleVisibility(classification: Classification): void {\n const newPreferences = { ...preferences };\n\n const hidden = isVisible(classification);\n\n newPreferences[classification.id] = {\n id: classification.id,\n hidden,\n index: getItemIndex(classification)\n };\n\n AnalyticsHelper.logUserAction({\n id: classification.id,\n name: classification.name\n }, {\n location: LocationContext.EditableSubjectPreferencesWidget,\n entity: EntityType.Classification,\n actionType: UserAction.Hide,\n descriptor: hidden ? ToggleDescriptor.On : ToggleDescriptor.Off\n });\n\n setPreferences(newPreferences);\n }\n\n function getDragOverlay(id: string): JSX.Element {\n const classification = currentSubjects.find(c => c.id === id);\n\n return (\n <div className={`bg-white rounded-3 ${styles.dragOverlay}`}>\n <EditableSubjectWidgetItem\n data={classification}\n onToggleVisibility={onToggleVisibility}\n isVisible={isVisible(classification)}\n isDragging={true}\n canToggle={\n !isVisible(classification) ||\n Object.values(preferences).filter(c => !c.hidden).length > 1\n }\n />\n </div>\n );\n }\n\n function onSortStart(event: DragStartEvent): void {\n const classification = currentSubjects.find(s => s.id.toString() === event.active.id.toString());\n const index = currentSubjects.findIndex(s => s.id.toString() === event.active.id.toString());\n\n AnalyticsHelper.logUserAction({\n id: classification.id,\n name: classification.name,\n index\n }, {\n location: LocationContext.EditableSubjectPreferencesWidget,\n entity: EntityType.Classification,\n actionType: UserAction.Move,\n workflowPhase: WorkflowPhase.Start\n });\n }\n\n function onSortEnd(event: DragEndEvent): void {\n const { active, over } = event;\n \n const oldIndex = getItemIndex({ id: active.id } as Classification);\n const newIndex = currentSubjects.findIndex(s => s.id.toString() === over.id.toString());\n \n if (oldIndex === newIndex)\n return;\n\n const classification = currentSubjects[oldIndex];\n\n if (!classification)\n return;\n\n const newPreferences = { ...preferences };\n\n const { reorderedItems } = ReorderHelper.reorder(currentSubjects, oldIndex, newIndex);\n\n reorderedItems.forEach((item, index) => {\n newPreferences[item.id] = {\n id: item.id,\n index,\n hidden: !isVisible(item)\n };\n });\n\n setPreferences(newPreferences);\n\n AnalyticsHelper.logUserAction({\n id: classification.id,\n name: classification.name,\n oldIndex,\n newIndex\n }, {\n location: LocationContext.EditableSubjectPreferencesWidget,\n entity: EntityType.Classification,\n actionType: UserAction.Move,\n workflowPhase: WorkflowPhase.Complete\n });\n }\n\n const hasEditedPreferences = React.useMemo(() => {\n return !ObjectHelper.isEqual(initialPreferences, preferences);\n }, [ initialPreferences, preferences ]);\n\n const exploreAllSubjectsItem = {\n id: props.presentation.id,\n name: LanguageService.getPhrase(namespace, 'exploreAll', { name: props.presentation.name }),\n cover: props.presentation.cover,\n metadata: {\n backgroundColor: TopicsHelper.getMappedPresentationBackgroundColourCode(props.presentation.learningLevel)\n }\n } as Classification;\n\n const presentationsSwitchSubjectsItems: PresentationSwitchItem[] = props.availablePresentations\n ? props.availablePresentations.filter(presentation => presentation.id !== props.presentation?.id)\n .map(presentation => {\n return {\n id: presentation.id,\n name: LanguageService.getPhrase(namespace, 'changeTo', { name: presentation.name }),\n cover: presentation.cover,\n vanitySlug: presentation.vanitySlug,\n description: presentation.description,\n metadata: {\n backgroundColor: TopicsHelper.getMappedPresentationBackgroundColourCode(presentation.learningLevel)\n }\n } as PresentationSwitchItem;\n })\n : [];\n // only show presentation switch if there are more than one other presentaitons and with domain option enabled when it's not editing\n const showPresentationSwitch = !isEditing\n && presentationsSwitchSubjectsItems.length > 0\n && props.settings?.hasTopicDirectories;\n\n const canManagePreferences = props.hasLocalPermissions(LocalPermissionName.ManageDiscoverPreferences);\n\n const analyticsOptions = {\n location: LocationContext.EditableSubjectPreferencesWidget\n };\n\n if (!currentSubjects.length)\n return <></>;\n\n return (\n <div>\n <div className={`d-flex flex-wrap align-items-center justify-content-between`}>\n <div className='col'>\n <div className={'d-flex justify-content-between w-100 no-wrap flex-row mb-2'}>\n <h2 className='h4 mb-0 align-self-end flex-shrink-0'>\n {isEditing ? LanguageService.getPhrase(namespace, 'updating') : props.name}\n </h2>\n {(!isEditing && canManagePreferences) && (\n <DivButton className='hover-text-underline' onClick={() => setIsEditing(true)}>\n {LanguageService.getPhrase(namespace, 'edit')}\n </DivButton>\n )}\n </div>\n\n {!!props.description && !isEditing && (\n <p className='text-truncate description mb-2'>{props.description}</p>\n )}\n {isEditing && (\n <p className='description mb-2'><Text namespace={namespace} phrase='editingDescription' /></p>\n )}\n </div>\n\n {(isEditing && canManagePreferences) && (\n <div className={`d-flex align-items-start`}>\n <Button variant='link' className='me-2' onClick={onClickCancel}>\n <Text namespace={namespace} phrase='cancel' />\n </Button>\n <SpinnerButton variant='dark' onClick={onClickSavePreferences} showSpinner={showSpinner} disabled={!hasEditedPreferences}>\n <Text namespace={namespace} phrase='update' />\n </SpinnerButton>\n </div>\n )}\n </div>\n\n <Row as='ul' className='list-unstyled mx-n1 mb-n2'>\n {showExploreAllTopics && (\n <Col as='li' className='position-relative pb-2 px-1' key={props.presentation.id} sm={6} lg={4}>\n <SubjectWidgetItem\n data={exploreAllSubjectsItem}\n getChildAppLink={() => props.appLinks?.allTopics?.(props.presentation.id)}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n multiline\n highlightOnHover={props.settings?.hasTopicDirectories}\n shouldHighlight={() => props.settings?.hasTopicDirectories}\n />\n </Col>\n )}\n \n <SortableContainerWrapper\n ids={currentSubjects.map(c => c.id)}\n getDragOverlay={getDragOverlay}\n onSortStart={onSortStart}\n onSortEnd={onSortEnd}\n vertical={false}\n >\n {currentSubjects.map(c => {\n return (\n <Col as='li' className='position-relative pb-2 px-1' key={c.id} sm={6} lg={4}>\n <>\n {isEditing ? (\n <SortableItemWrapper\n id={c.id}\n childComponent={EditableSubjectWidgetItem}\n childProps={{\n data: c,\n onToggleVisibility,\n isVisible: isVisible(c),\n isDragging: false,\n canToggle: (\n !isVisible(c) ||\n Object.values(preferences).filter(c => !c.hidden).length > 1\n ),\n multiline: true\n }}\n />\n ) : (\n <SubjectWidgetItem\n data={c}\n getChildAppLink={(c: Classification) => props.appLinks?.classification?.(c)}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n multiline\n highlightOnHover={props.settings?.hasTopicDirectories}\n showNewVideosCount={\n props.settings?.hasTopicDirectories &&\n !props.isTertiaryCustomerWithoutExchange\n }\n />\n )}\n </>\n </Col>\n );\n })}\n </SortableContainerWrapper>\n\n {showPresentationSwitch && presentationsSwitchSubjectsItems.map(item => {\n return (\n <Col as='li' className='position-relative pb-2 px-1' key={item.id} sm={6} lg={4}>\n <SubjectWidgetItem\n data={item}\n getChildAppLink={() => props.appLinks?.discover?.(item.id)}\n getChildAppLinkOptions={() => ({\n middlewareOptions: { presentationSlug: item?.vanitySlug }\n })}\n analyticsData={{\n ...props.analyticsData,\n id: item.id,\n presentationId: item.id,\n presentationDescription: item.description\n }}\n analyticsOptions={{\n ...analyticsOptions,\n entity: EntityType.Presentation\n }}\n multiline\n highlightOnHover\n shouldHighlight={() => props.settings?.hasTopicDirectories}\n />\n </Col>\n );\n })\n }\n </Row>\n </div>\n );\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { PartialSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item';\n\nimport styles from './partial-editable-cover-fixed-pill-list-small-widget-template.module.scss';\n\nexport function PartialEditableCoverFixedPillListSmallWidgetTemplate(): JSX.Element {\n return (\n <div className='py-2'>\n <div className={`partial-loading-background mb-2 ${styles.partialLoadingHeading}`} />\n <Row className='g-0'>\n {Array(7).fill(null).map((_, i) => (\n <Col key={i} sm={6} lg={4}>\n <div className={`position-relative mb-2`}>\n <PartialSubjectWidgetItem />\n </div>\n </Col>\n ))}\n </Row>\n </div>\n );\n}","import React from 'react';\n\nimport { AnalyticsOptions, EntityType, HashObject, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { CalendarDay } from 'libs/shared/apps/calendar/components/calendar-day/CalendarDay';\nimport { GenericCalendarDate } from 'libs/shared/apps/calendar/components/generic-calendar-date/GenericCalendarDate';\nimport { CalendarTheme } from 'libs/shared/apps/calendar/interfaces/CalendarTheme';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DateWidgetItem } from 'libs/shared/components/widgets/curated-widgets/templates/event-icon-sliding-list/EventIconSlidingListWidgetTemplate';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { HardCoded } from 'libs/shared/constants/HardCoded';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { CalendarEvent, CalendarEventContent, Classification, Livestream } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './special-event-widget-item.module.scss';\n\ninterface CalendarWidgetItem {\n theme?: CalendarTheme;\n analyticsData?: (content: CalendarEvent<CalendarEventContent>) => HashObject;\n analyticsOptions?: AnalyticsOptions;\n getBackgroundColor?: (content: CalendarEventContent) => string;\n getIconUrl?: (content: CalendarEventContent) => string;\n getHardCodedEvent?: (content: CalendarEventContent) => HashObject;\n}\n\nfunction CalendarWidgetItem<T extends CalendarEventContent>(\n props: CalendarWidgetItem & FixedWidgetItemProps<CalendarEvent<T>>\n) {\n return (\n <div className={`${styles.container} position-relative flex-shrink-0 ${props.theme.backgroundSecondary}`}>\n <AppLink\n appLink={props.getAppLink(props.data)}\n className={`text-decoration-none my-2 mx-1 rounded-3 d-block position-relative`}\n analyticsData={props.analyticsData(props.data)}\n analyticsOptions={props.analyticsOptions}\n >\n <CalendarDay\n isHovering={false}\n date={new Date(props.data.startDate)}\n notCurrentMonth={false}\n monthQuery={null}\n eventsOnDay={[props.data]}\n events={[props.data]}\n sliderStep={0}\n presentationId={props.data.content.presentationId}\n hoveredEvent={null}\n isMultiEventDate={false}\n className='rounded-3'\n getBackgroundColor={props.getBackgroundColor}\n getIconUrl={props.getIconUrl}\n hasInitialized\n responsiveText={false}\n hideDay\n />\n </AppLink>\n </div>\n );\n}\n\nexport type SpecialEventWidgetItemProps = CalendarWidgetItem &\nFixedWidgetItemProps<CalendarEvent<CalendarEventContent> | DateWidgetItem>;\n\nexport function SpecialEventWidgetItem(\n props: SpecialEventWidgetItemProps\n): JSX.Element {\n const { data, ...otherProps } = props;\n\n if (data.type === 'date-widget-item') {\n return (\n <div className={`${styles.container} ${styles.dateItemContainer} flex-shrink-0 ${props.theme.backgroundSecondary} position-relative`}>\n <GenericCalendarDate\n month={data.month}\n body={data.body}\n label={data.label}\n getAppLink={() => props.getAppLink(data)}\n analyticsData={{\n ...props.analyticsData,\n label: data.label,\n month: data.month,\n body: data.body.text\n }}\n analyticsOptions={{\n ...props.analyticsOptions,\n entity: EntityType.Url,\n actionType: UserAction.Click,\n location: LocationContext.EventIconSlidingListWidget\n }}\n className='my-2 mx-1'\n theme={props.theme}\n />\n </div>\n );\n }\n\n if (data.type === 'Livestream')\n return (\n <CalendarWidgetItem\n {...otherProps}\n data={data as CalendarEvent<Livestream>}\n getBackgroundColor={(content: Livestream) => content.company.metadata?.colour}\n getIconUrl={(content: Livestream) => content.company.logo?.url}\n analyticsData={(event: CalendarEvent<Livestream>) => ({\n ...props.analyticsData,\n id: event.content.id,\n name: event.content.name,\n startDateTime: event.content.startDateTime,\n endDateTime: event.content.endDateTime\n })}\n analyticsOptions={{\n ...props.analyticsOptions,\n entity: EntityType.SpecialEvent,\n actionType: UserAction.Click,\n location: LocationContext.EventIconSlidingListWidget\n }}\n />\n );\n\n function getIconUrl(classification: Classification): string {\n // in sliding widget we use icon from classification\n return ImageHelper.createUrl(classification.icon?.url, { size: ImageSize.Small });\n }\n \n function getHardCodedEvent(classification: Classification): HashObject {\n return HardCoded.SpecialEvents[classification.id as keyof typeof HardCoded.SpecialEvents];\n }\n\n return (\n <CalendarWidgetItem {...otherProps}\n data={data as CalendarEvent}\n getBackgroundColor={(classification: Classification) => classification.metadata?.backgroundColor}\n getIconUrl={(classification: Classification) => getIconUrl(classification)}\n getHardCodedEvent={getHardCodedEvent}\n analyticsData={(event: CalendarEvent<Classification>) => ({\n ...props.analyticsData,\n id: event.specialEventId,\n name: event.name,\n startDate: event.startDate,\n endDate: event.endDate,\n classificationId: event.content.id,\n classificationName: event.content.name\n })}\n analyticsOptions={{\n ...props.analyticsOptions,\n entity: EntityType.SpecialEvent,\n actionType: UserAction.Click,\n location: LocationContext.EventIconSlidingListWidget\n }}\n />\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { HashObject } from 'libs/analytics/interfaces';\n\nimport { CalendarTheme } from 'libs/shared/apps/calendar/interfaces/CalendarTheme';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget';\nimport { SpecialEventWidgetItem } from 'libs/shared/components/widgets/items/special-event-widget-item/SpecialEventWidgetItem';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { CalendarEvent, CalendarEventContent, CalendarEventContentType, Classification, Livestream, WidgetType } from 'libs/shared/interfaces';\n\nconst namespace = 'widgets.eventIconSlidingList';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface DateWidgetItem {\n label?: string;\n body: {\n type: 'month' | 'range' | 'day';\n text: string;\n };\n month?: string;\n appLinkMonth: string;\n appLinkYear?: string;\n type: 'date-widget-item';\n}\n\ntype EventGroup = 'today' | 'tomorrow' | 'nextWeek' | 'thisMonth' | 'nextMonth' | 'later' | string;\n\ntype EventGroupingMap = Map<EventGroup, EventGrouping>;\n\ninterface EventGrouping {\n events: CalendarEvent<CalendarEventContent>[];\n label: string;\n body: DateWidgetItem['body'];\n monthLabel: string;\n startDate: string;\n endDate?: string;\n}\n\nfunction getWidgetItems(\n content: CalendarEvent<CalendarEventContent>[] | Livestream[],\n contentType?: CalendarEventContentType\n): (CalendarEvent<CalendarEventContent> | DateWidgetItem)[] {\n let calendarEvents: CalendarEvent<CalendarEventContent>[];\n \n switch (contentType) {\n case CalendarEventContentType.Livestream: {\n calendarEvents = getCalendarEventLivestreams(content as Livestream[]);\n break;\n }\n default: {\n calendarEvents = content as CalendarEvent[];\n }\n }\n\n // We want to process the events in the order that they occur in.\n const rawOrderedEvents = [...calendarEvents].sort((a, b) => a.startDate.localeCompare(b.startDate));\n\n const now = new Date();\n const today = DateHelper.format(now, 'YYYY-MM-DD');\n const tomorrow = DateHelper.format(DateHelper.add(today, 1, 'day'), 'YYYY-MM-DD');\n\n /**\n * Get next Monday's date. We add 8 days to the start of the week because\n * moment's start day is Sunday instead of Monday\n */\n const nextWeekStart = DateHelper.format(DateHelper.add(DateHelper.startOf(now, 'week'), 8, 'days'), 'YYYY-MM-DD');\n const nextWeekEnd = DateHelper.format(DateHelper.add(nextWeekStart, 6, 'days'), 'YYYY-MM-DD');\n\n const thisMonthStart = DateHelper.format(DateHelper.startOf(now, 'month'), 'YYYY-MM-DD');\n const thisMonthEnd = DateHelper.format(DateHelper.endOf(now, 'month'), 'YYYY-MM-DD');\n\n const nextMonthStart = DateHelper.format(DateHelper.startOf(DateHelper.add(now, 1, 'month'), 'month'), 'YYYY-MM-DD');\n const nextMonthEnd = DateHelper.format(DateHelper.endOf(DateHelper.add(now, 1, 'month'), 'month'), 'YYYY-MM-DD');\n\n const laterMonthStart = DateHelper.format(DateHelper.startOf(DateHelper.add(now, 2, 'month'), 'month'), 'YYYY-MM-DD');\n const laterMonthEnd = DateHelper.format(DateHelper.add(now, 1, 'year'), 'YYYY-MM-DD');\n\n // Using a map for this because we want the event ordering to be preserved\n const eventGroupingMap: EventGroupingMap = new Map();\n\n type EventRecord = {\n group: EventGroup;\n startDate: string;\n endDate: string;\n body: DateWidgetItem['body'];\n monthLabel: string;\n event: CalendarEvent<CalendarEventContent>;\n label: string;\n };\n\n function getCalendarEventLivestreams(livestreams: Livestream[]): CalendarEvent<Livestream>[] {\n return livestreams.map((livestream: Livestream) => ({\n id: livestream.id,\n startDate: DateHelper.format(livestream.startDateTime, 'YYYY-MM-DD'),\n type: 'Livestream',\n name: livestream.name,\n description: livestream.description,\n content: livestream\n }));\n }\n\n function addEventToGroup(eventRecord: EventRecord): void {\n if (!eventGroupingMap.has(eventRecord.group)) {\n eventGroupingMap.set(eventRecord.group, {\n events: [eventRecord.event],\n label: eventRecord.label,\n body: eventRecord.body,\n monthLabel: eventRecord.monthLabel,\n startDate: eventRecord.startDate,\n endDate: eventRecord.endDate\n });\n return;\n }\n\n const currentMergedEvent = eventGroupingMap.get(eventRecord.group);\n eventGroupingMap.set(eventRecord.group, {\n ...currentMergedEvent,\n events: [ ...currentMergedEvent.events, eventRecord.event ]\n });\n }\n\n /**\n * Loop through every event, and identify which group it belongs to.\n */\n rawOrderedEvents.forEach(event => {\n // Today's events\n if (event.startDate <= today) {\n addEventToGroup({\n group: 'today',\n startDate: today,\n endDate: null,\n event,\n body: {\n text: DateHelper.format(today, 'DD'),\n type: 'day'\n },\n monthLabel: DateHelper.format(today, 'MMMM'),\n label: getPhrase('today')\n });\n return;\n }\n\n // Tomorrow's events\n if (event.startDate === tomorrow) {\n addEventToGroup({\n group: 'tomorrow',\n startDate: tomorrow,\n endDate: null,\n event,\n body: {\n text: DateHelper.format(tomorrow, 'DD'),\n type: 'day'\n },\n monthLabel: DateHelper.format(event.startDate, 'MMMM'),\n label: getPhrase('tomorrow')\n });\n return;\n }\n\n // This week's events, added separately for each day\n if (event.startDate > tomorrow && event.startDate < nextWeekStart) {\n const day = DateHelper.format(event.startDate, 'dddd');\n addEventToGroup({\n group: day,\n startDate: event.startDate,\n endDate: event.endDate,\n event,\n monthLabel: DateHelper.format(event.startDate, 'MMMM'),\n body: {\n text: DateHelper.format(event.startDate, 'DD'),\n type: 'day'\n },\n label: day\n });\n return;\n }\n\n // Next week's events\n if (event.startDate >= nextWeekStart && event.startDate <= nextWeekEnd) {\n addEventToGroup({\n group: 'nextWeek',\n startDate: nextWeekStart,\n endDate: nextWeekEnd,\n event,\n // Next week may either be in the same month or in different months\n monthLabel: DateHelper.isSame(nextWeekStart, nextWeekEnd, 'month')\n ? DateHelper.format(nextWeekStart, 'MMMM')\n : `${DateHelper.format(nextWeekStart, 'MMM')} - ${DateHelper.format(nextWeekEnd, 'MMM')}`,\n body: {\n text: `${DateHelper.format(nextWeekStart, 'DD')}-${DateHelper.format(nextWeekEnd, 'DD')}`,\n type: 'range'\n },\n label: getPhrase('nextWeek')\n });\n\n return;\n }\n\n // This month's events\n if (event.startDate >= thisMonthStart && event.startDate <= thisMonthEnd) {\n addEventToGroup({\n group: 'thisMonth',\n startDate: thisMonthStart,\n endDate: thisMonthEnd,\n event,\n // We don't display the month label for events where the date card body only displays the month name\n monthLabel: '',\n body: {\n text: DateHelper.format(event.startDate, 'MMM'),\n type: 'month'\n },\n label: getPhrase('thisMonth')\n });\n return;\n }\n\n // Next month's events\n if (event.startDate >= nextMonthStart && event.startDate <= nextMonthEnd) {\n addEventToGroup({\n group: 'nextMonth',\n startDate: nextMonthStart,\n endDate: nextMonthEnd,\n event,\n // We don't display the month label for events where the date card body only displays the month name\n monthLabel: '',\n body: {\n text: DateHelper.format(event.startDate, 'MMM'),\n type: 'month'\n },\n label: getPhrase('nextMonth')\n });\n return;\n }\n\n // Later events\n if (event.startDate >= laterMonthStart && event.startDate <= laterMonthEnd) {\n addEventToGroup({\n group: 'later',\n startDate: laterMonthStart,\n endDate: laterMonthEnd,\n event,\n // We don't display the month label for events where the date card body only displays the month name\n monthLabel: '',\n body: {\n text: DateHelper.format(event.startDate, 'MMM'),\n type: 'month'\n },\n label: getPhrase('later')\n });\n }\n });\n\n const mergedEvents: (CalendarEvent<CalendarEventContent> | DateWidgetItem)[] = [];\n\n for (const eventGrouping of eventGroupingMap.values()) {\n const dateItem: DateWidgetItem = {\n label: eventGrouping.label,\n body: eventGrouping.body,\n month: eventGrouping.monthLabel,\n appLinkMonth: DateHelper.format(eventGrouping.startDate, 'MMMM'),\n appLinkYear: DateHelper.format(eventGrouping.startDate, 'YYYY'),\n type: 'date-widget-item'\n };\n\n mergedEvents.push(dateItem);\n\n eventGrouping.events.forEach(event => {\n mergedEvents.push(event);\n });\n }\n\n return mergedEvents;\n}\n\nexport interface EventIconSlidingListWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n contentType: CalendarEventContentType;\n content: CalendarEvent<CalendarEventContent>[];\n appLinks: {\n calendar: () => Core.AppLink;\n calendarMonth: (month: string, year?: string) => Core.AppLink;\n livestream: (livestream: Livestream) => Core.AppLink;\n classification: (classification: Classification | null) => Core.AppLink;\n }\n analyticsData?: HashObject;\n \n widgetTypeId: WidgetTypeId;\n isPreviewing: boolean;\n}\n\nexport function EventIconSlidingListWidgetTemplate(\n props: EventIconSlidingListWidgetTemplateProps\n): JSX.Element {\n const widgetItems = React.useMemo(() => getWidgetItems(props.content, props.contentType), [props.content]);\n const theme = getTheme(props.contentType);\n\n function getTheme(contentType: CalendarEventContentType): CalendarTheme {\n switch (contentType) {\n case CalendarEventContentType.Livestream:\n return {\n background: 'bg-light-green',\n border: 'border-light-green',\n backgroundSecondary: 'bg-light-blue'\n };\n default:\n return {\n background: 'bg-light-blue',\n border: 'border-light-blue',\n backgroundSecondary: 'bg-light-yellow'\n };\n }\n }\n\n return (\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n appLink={props.appLinks?.calendar?.()}\n type={WidgetType.Row}\n contents={WidgetContents.SpecialEvents}\n getChildAppLink={(item: CalendarEvent<CalendarEventContent> | DateWidgetItem) => {\n if (item.type === 'date-widget-item')\n return props.appLinks?.calendarMonth?.(item.appLinkMonth, item.appLinkYear);\n\n if (item.type === 'Livestream')\n return props.appLinks?.livestream?.(item.content as Livestream);\n\n return props.appLinks?.classification?.(item.content as Classification);\n }}\n collection={widgetItems}\n childComponent={SpecialEventWidgetItem}\n extraChildComponentProps={{ theme }}\n analyticsData={props.analyticsData}\n isPreviewing={props.isPreviewing}\n widgetTypeId={props.widgetTypeId}\n prefetched\n />\n );\n}","import React from 'react';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nfunction useGetTotalItems(): number {\n const breakpoints = useBreakpoints();\n\n if (breakpoints.xs)\n return 2;\n\n if (breakpoints.sm)\n return 3;\n\n if (breakpoints.md)\n return 4;\n\n if (breakpoints.lg)\n return 5;\n\n if (breakpoints.xl || breakpoints.xxl)\n return 6;\n}\n\nexport function PartialEventIconSlidingListWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n const totalItems = useGetTotalItems();\n\n return (\n <>\n <PartialWidgetHeader\n name={props.name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n hideDescription\n />\n <div className='row g-0 mx-n1'>\n {Array(totalItems).fill(null).map((_, index) => (\n <div className='col px-1' key={index}>\n <div className='partial-loading-background rounded-3' style={{ paddingBottom: '100%' }} />\n </div>\n ))}\n </div>\n </>\n );\n}","import React from 'react';\n\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { useHoverIntent } from 'libs/shared/hooks/UseHover';\nimport { PresentationAudience, VideoTypes, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\n\nimport styles from './video-widget-item.module.scss';\n\nexport interface VideoWidgetItemProps extends FixedWidgetItemProps<VideoTypes> {\n presentationAudiences?: PresentationAudience[];\n commonVideoProps: CommonVideoProps;\n}\n\nexport const VideoWidgetItem = React.memo(function(props: VideoWidgetItemProps): JSX.Element {\n const { data: video, context, thumbnailSize, preloadImage } = props;\n\n const getScaleSize = () => {\n if (context?.type === WidgetType.LargeRow)\n return 1.1;\n\n return 1.15;\n };\n\n const [ ref, isHovering ] = useHoverIntent<HTMLDivElement>({\n className: styles.hovering,\n style: {\n transform: `scale(${getScaleSize()})`\n }\n });\n\n React.useEffect(() => {\n props.onHover(isHovering);\n }, [isHovering]);\n\n let width = styles.rowWidth;\n\n if (context.type === WidgetType.LargeRow)\n width = styles.largeRowWidth;\n\n return (\n <div ref={ref} className={`px-1 flex-shrink-0 position-relative ${width} ${styles.transition}`}>\n <VideoThumbnail\n video={props.data}\n type='expandable'\n appLink={props.getAppLink(video)}\n imageOptions={{ size: thumbnailSize }}\n preload={preloadImage}\n hovering={isHovering}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n commonVideoProps={props.commonVideoProps}\n />\n </div>\n );\n});","import React from 'react';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { VideoWidgetItem } from 'libs/shared/components/widgets/items/video-widget-item/v1/VideoWidgetItem';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { CuratedDashboardAppLink, Presentation, Series, Video, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './featured-sliding-heading.module.scss';\n\nexport interface FeaturedThumbnailSlidingListWidgetTemplateProps {\n id: string;\n name: string;\n imageCdnUrl: string;\n content: Video[];\n presentation: Presentation;\n metadata: {\n imageId: string;\n appLink: CuratedDashboardAppLink;\n };\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink;\n series: (series: Series) => Core.AppLink;\n allTopics: (presentationId?: string) => Core.AppLink;\n latestReleases: () => Core.AppLink;\n }\n showHighlight?: boolean;\n analyticsData?: HashObject;\n \n limitTotalItems?: boolean;\n\n commonVideoProps: CommonVideoProps;\n}\n\nexport function FeaturedThumbnailSlidingListWidgetTemplate(\n props: FeaturedThumbnailSlidingListWidgetTemplateProps\n): JSX.Element {\n const widgetAppLink = WidgetHelper.getCustomAppLink(props);\n\n const bannerBackgroundUrl = (props?.imageCdnUrl && props.metadata?.imageId) ? ImageHelper.getUrlById(\n props.imageCdnUrl,\n ImageType.Banners,\n props.metadata.imageId,\n ImageSize.Medium\n ) : '';\n\n return (\n <div>\n <AppLink\n appLink={widgetAppLink}\n style={bannerBackgroundUrl ? { backgroundImage: `url(${bannerBackgroundUrl})` } : {}}\n className={`${styles.banner} mb-2 d-flex justify-content-between no-decoration ${!props.name ? styles.partialBanner : ''}`}\n analyticsData={{\n url: AppLinkHelper.getHref(widgetAppLink)\n }}\n analyticsOptions={{\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.ContentUpdatesBanner\n }}\n >\n <h2 className='h4 text-white mb-0'>\n {props.name}\n </h2>\n </AppLink>\n <FixedWidget\n id={props.id}\n type={WidgetType.Row}\n contents={WidgetContents.Videos}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n collection={props.content}\n childComponent={VideoWidgetItem}\n extraChildComponentProps={{\n commonVideoProps: props.commonVideoProps\n }}\n hideBleedingContent={props.showHighlight}\n analyticsData={props.analyticsData}\n limitTotalItems={props.limitTotalItems}\n prefetched\n hideName\n />\n </div>\n );\n}","import React from 'react';\n\nimport { PartialFixedWidget } from 'libs/shared/components/widgets/fixed-widget';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nimport styles from '../featured-sliding-heading.module.scss';\n\nexport function PartialFeaturedThumbnailSlidingListWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n return (\n <div>\n <div className={`banner rounded-3 position-relative partial-loading-background ${styles.banner} ${styles.partialBanner} mb-1 `}></div>\n <PartialFixedWidget\n name={props.name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n hideDescription\n hideHeading\n />\n </div>\n );\n}","import React from 'react';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { SearchSvg } from 'libs/shared/images/svg/actions/SearchSvg';\nimport { Rating } from 'libs/shared/interfaces';\nimport { VideoDetailsHelper } from 'libs/shared/utils/VideoDetailsHelper';\n\nimport styles from './rating-widget-item.module.scss';\n\nexport interface RatingWidgetItemProps extends FixedWidgetItemProps<Rating> {\n ratingsLength: number;\n}\n\nexport function RatingWidgetItem(props: RatingWidgetItemProps): JSX.Element {\n function getRatingClasses(): string {\n if (props.ratingsLength > 4)\n return styles.rowWidth;\n\n if (props.ratingsLength === 4)\n return 'col-4 col-md-3';\n\n return 'col';\n }\n \n return (\n <AppLink\n appLink={props.getAppLink(props.data)}\n className={`${getRatingClasses()} position-relative flex-shrink-0 px-1 mt-1 text-decoration-none`}\n analyticsData={{\n ...props.analyticsData,\n code: props.data.code,\n id: props.data.id\n }}\n analyticsOptions={{\n ...props.analyticsOptions,\n entity: EntityType.Rating,\n actionType: UserAction.Click,\n location: LocationContext.FilterSlidingPillListSmallWidget\n }}\n >\n <div className={`${VideoDetailsHelper.mapRatingToClass(props.data.value)} py-3 rounded-3`}>\n <div className='d-flex justify-content-center align-items-center text-white text-shadow'>\n <SvgContainer svg={SearchSvg} size={SvgContainerSize.Medium} />\n <h4 className='mb-0'>{props.data.code}</h4>\n </div>\n </div>\n </AppLink>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { RatingWidgetItem } from 'libs/shared/components/widgets/items/rating-widget-item/RatingWidgetItem';\nimport { PresentationLearningLevel } from 'libs/shared/enums/PresentationLearningLevel';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Presentation, Rating, WidgetType } from 'libs/shared/interfaces';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nfunction getMaxRatingValue(presentation: Presentation): number {\n const learningLevel = TopicsHelper.getMappedPresentationLevel(presentation.learningLevel);\n \n switch (learningLevel) {\n /**\n * Primary should only show up to PG\n */\n case PresentationLearningLevel.Level_1:\n return 64;\n\n /**\n * Older levels should filter out high ratings such as R18+\n */\n default:\n return 128;\n }\n}\n\nexport interface FilterSlidingPillListSmallWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n presentation: Presentation;\n content: Rating[];\n appLinks: {\n rating: (rating: Rating, ratings: Rating[]) => Core.AppLink;\n }\n analyticsData?: HashObject;\n \n}\n\nexport function FilterSlidingPillListSmallWidgetTemplate(\n props: FilterSlidingPillListSmallWidgetTemplateProps\n): JSX.Element {\n const maxRating = getMaxRatingValue(props.presentation);\n const ratings = props.content.filter(rating => rating.code && rating.value < maxRating && rating.code !== 'E');\n \n return (\n <>\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Ratings}\n getChildAppLink={rating => props.appLinks?.rating?.(rating, ratings)}\n collection={ratings}\n childComponent={RatingWidgetItem}\n analyticsData={props.analyticsData}\n extraChildComponentProps={{ ratingsLength: ratings.length }}\n prefetched\n />\n </>\n );\n}\n","import React from 'react';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nexport function PartialFilterSlidingPillListSmall(props: PartialWidgetTemplateProps): JSX.Element {\n const breakpoints = useBreakpoints();\n\n function getItemCount(): number {\n if (breakpoints.xs || breakpoints.sm)\n return 3;\n\n if (breakpoints.md || breakpoints.lg)\n return 4;\n\n return 5;\n }\n\n return (\n <>\n <PartialWidgetHeader\n name={props.name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n hideDescription\n />\n <div className='row mx-n1'>\n {[...Array(getItemCount())].map((_, index) => (\n <div key={index} className={`col px-1`}>\n <div className={`d-inline-block w-100 partial-loading-background rounded-3 pb-5`} />\n </div>\n ))}\n </div>\n </>\n );\n}","import React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\nexport interface HeadingWidgetTemplateProps {\n name: string;\n description: string;\n content: HashObject[]; // We need to have content on every widget template\n}\n\nexport function HeadingWidgetTemplate(props: HeadingWidgetTemplateProps): JSX.Element {\n return (\n <div className='curated-widget-header'>\n <h2 className='curated-widget-heading'>{props.name}</h2>\n {!!props.description && (\n <p className='description curated-widget-description'>{props.description}</p>\n )}\n </div>\n );\n}","import React from 'react';\n\nexport function PartialHeadingWidgetTemplate(): JSX.Element {\n return (\n <div className='curated-widget-header'>\n <div className='partial-loading-background curated-widget-heading' style={{ height: '2.099625rem', width: '16.5rem', maxWidth: '80%' }}>\n \n </div>\n <div className='partial-loading-background description curated-widget-description' style={{ width: '21rem', height: '1.3125rem', maxWidth: '90%' }}>\n \n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Classification, WidgetCta } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './hero-banner.module.scss';\n\nexport interface HeroBannerWidgetTemplateProps {\n name: string;\n content: Classification[];\n analyticsData?: HashObject;\n \n\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink;\n };\n\n metadata: {\n cta: WidgetCta;\n }\n}\n\nexport function HeroBannerWidgetTemplate(props: HeroBannerWidgetTemplateProps): JSX.Element {\n const breakpoints = useBreakpoints();\n\n function getBannerUrl(): string {\n const entity = ArrayHelper.first(props.content);\n\n return ImageHelper.createBannerUrl(entity.banner, {\n fallbackBaseUrl: '',\n fallbackCategoryName: entity.name,\n type: ImageType.Banners\n }, { size: ImageSize.Large });\n }\n\n function getAppLink(): Core.AppLink {\n const entity = ArrayHelper.first(props.content);\n return props.appLinks?.classification?.(entity);\n }\n\n function getHeadingClass(): string {\n let className = 'text-white clamp-2';\n\n if (breakpoints.xs || breakpoints.sm)\n className += ' h4';\n else if (breakpoints.md)\n className += ' h3';\n else\n className += ' h2';\n\n className += ' text-white';\n\n return className;\n }\n\n const analyticsOptions = {\n location: LocationContext.Classification,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Banner\n };\n\n return (\n <AppLink\n appLink={getAppLink()}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <div className={`banner rounded-3 position-relative ${styles.banner}`} style={{ backgroundImage: `url('${getBannerUrl()}')` }}>\n {props.name &&\n <div className={styles.bannerContent}>\n <p className={getHeadingClass()}>\n {props.name}\n </p>\n </div>\n }\n\n {!!props.metadata?.cta?.text && (\n <div className={styles.cta}>\n <div className='btn btn-outline-dark text-nowrap'>\n {props.metadata?.cta?.text}\n </div>\n </div>\n )}\n </div>\n </AppLink>\n );\n}","import React from 'react';\n\nimport styles from '../hero-banner.module.scss';\n\nexport function PartialHeroBannerWidgetTemplate(): JSX.Element {\n return (\n <div className={`banner rounded-3 position-relative ${styles.banner}`}>\n <div className={`${styles.bannerContent}`} />\n </div>\n );\n}","import React from 'react';\n\nexport function GridSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M5.5 5a.5.5 0 0 0-.5.5V10a.5.5 0 0 0 .5.5H10a.5.5 0 0 0 .5-.5V5.5A.5.5 0 0 0 10 5zM4 5.5A1.5 1.5 0 0 1 5.5 4H10a1.5 1.5 0 0 1 1.5 1.5V10a1.5 1.5 0 0 1-1.5 1.5H5.5A1.5 1.5 0 0 1 4 10zM14 5a.5.5 0 0 0-.5.5V10a.5.5 0 0 0 .5.5h4.5a.5.5 0 0 0 .5-.5V5.5a.5.5 0 0 0-.5-.5zm-1.5.5A1.5 1.5 0 0 1 14 4h4.5A1.5 1.5 0 0 1 20 5.5V10a1.5 1.5 0 0 1-1.5 1.5H14a1.5 1.5 0 0 1-1.5-1.5zM4 14a1.5 1.5 0 0 1 1.5-1.5H10a1.5 1.5 0 0 1 1.5 1.5v4.5A1.5 1.5 0 0 1 10 20H5.5A1.5 1.5 0 0 1 4 18.5zm1.5-.5a.5.5 0 0 0-.5.5v4.5a.5.5 0 0 0 .5.5H10a.5.5 0 0 0 .5-.5V14a.5.5 0 0 0-.5-.5zm7 .5a1.5 1.5 0 0 1 1.5-1.5h4.5A1.5 1.5 0 0 1 20 14v4.5a1.5 1.5 0 0 1-1.5 1.5H14a1.5 1.5 0 0 1-1.5-1.5zm1.5-.5a.5.5 0 0 0-.5.5v4.5a.5.5 0 0 0 .5.5h4.5a.5.5 0 0 0 .5-.5V14a.5.5 0 0 0-.5-.5z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function RectanglesSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M4 6.4C4 5.627 4.632 5 5.412 5h13.176C19.368 5 20 5.627 20 6.4v3.733c0 .774-.632 1.4-1.412 1.4H5.412c-.78 0-1.412-.626-1.412-1.4zm1.412-.467c-.26 0-.47.21-.47.467v3.733c0 .258.21.467.47.467h13.176c.26 0 .47-.209.47-.467V6.4a.47.47 0 0 0-.47-.467zM4 13.867c0-.774.632-1.4 1.412-1.4h13.176c.78 0 1.412.627 1.412 1.4V17.6c0 .773-.632 1.4-1.412 1.4H5.412C4.632 19 4 18.373 4 17.6zm1.412-.467c-.26 0-.47.209-.47.467V17.6c0 .258.21.467.47.467h13.176c.26 0 .47-.21.47-.467v-3.733a.47.47 0 0 0-.47-.467z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function SparkleSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n fillRule='evenodd'\n d='M16.465 11.636a.469.469 0 0 1-.897-.003 5.11 5.11 0 0 0-3.204-3.202.469.469 0 0 1 .002-.897 5.11 5.11 0 0 0 3.203-3.203.469.469 0 0 1 .897.002 5.11 5.11 0 0 0 3.203 3.202.469.469 0 0 1-.002.897 5.11 5.11 0 0 0-3.202 3.204m-1.46-4.664a6 6 0 0 1-1.343 1.011c.492.273.946.614 1.344 1.011.397.398.738.852 1.01 1.344a6 6 0 0 1 1.012-1.344 6 6 0 0 1 1.344-1.01 6 6 0 0 1-1.344-1.012 6 6 0 0 1-1.011-1.344 6 6 0 0 1-1.011 1.344m-2.104 7.345.754.25a.469.469 0 0 1 0 .89l-.754.251a5.11 5.11 0 0 0-3.218 3.218l-.25.754a.469.469 0 0 1-.89 0l-.251-.754a5.11 5.11 0 0 0-3.218-3.218l-.754-.25a.469.469 0 0 1 0-.89l.754-.251a5.11 5.11 0 0 0 3.218-3.218l.25-.754a.469.469 0 0 1 .89 0l.251.754a5.11 5.11 0 0 0 3.218 3.218m-3.913 3.81a6.1 6.1 0 0 1 1.261-1.852 6.1 6.1 0 0 1 1.852-1.262 6.1 6.1 0 0 1-1.852-1.262 6.1 6.1 0 0 1-1.262-1.852 6.1 6.1 0 0 1-1.261 1.852 6.1 6.1 0 0 1-1.852 1.261c.688.301 1.32.732 1.852 1.262a6.1 6.1 0 0 1 1.262 1.852M4.33 6.924a2.72 2.72 0 0 1 1.698 1.697.469.469 0 0 0 .897.002 2.72 2.72 0 0 1 1.697-1.698.469.469 0 0 0 .002-.897 2.72 2.72 0 0 1-1.698-1.697.469.469 0 0 0-.897-.002 2.72 2.72 0 0 1-1.697 1.698.469.469 0 0 0-.002.897m2.147-1.412c.258.378.586.706.964.964a3.7 3.7 0 0 0-.964.964 3.7 3.7 0 0 0-.964-.964 3.7 3.7 0 0 0 .964-.964m11.495 9.865a2.72 2.72 0 0 0 1.698 1.697.47.47 0 0 1-.002.897 2.72 2.72 0 0 0-1.697 1.698.469.469 0 0 1-.897-.002 2.72 2.72 0 0 0-1.698-1.697.469.469 0 0 1 .002-.897 2.72 2.72 0 0 0 1.697-1.698.47.47 0 0 1 .897.002m-1.413 2.145c.378.258.706.586.964.964.258-.378.586-.706.964-.964a3.7 3.7 0 0 1-.964-.964 3.7 3.7 0 0 1-.964.964'\n clipRule='evenodd'\n />\n </svg>\n );\n}\n","import { NewWindowSvg } from '../images/svg/actions/NewWindowSvg';\nimport { GridSvg } from '../images/svg/objects/GridSvg';\nimport { RectanglesSvg } from '../images/svg/objects/RectanglesSvg';\nimport { SparkleSvg } from '../images/svg/objects/SparkleSvg';\n\nexport enum HeadingSize {\n H1 = 'h1',\n H2 = 'h2',\n H3 = 'h3',\n H4 = 'h4',\n H5 = 'h5',\n H6 = 'h6'\n}\n\nexport enum HeadingColor {\n Dark = 'dark',\n White = 'white'\n}\n\nexport enum ButtonIcon {\n NewWindow = 'new-window',\n TopicDirectory = 'topic-directory',\n TopicNewReleases = 'topic-new-releases',\n CuratedTopic = 'curated-topic'\n}\n\nexport const WIDGET_THEME = {\n HEADING: {\n SIZES: [\n { value: HeadingSize.H1, name: 'Heading 1' },\n { value: HeadingSize.H2, name: 'Heading 2' },\n { value: HeadingSize.H3, name: 'Heading 3' },\n { value: HeadingSize.H4, name: 'Heading 4' },\n { value: HeadingSize.H5, name: 'Heading 5' },\n { value: HeadingSize.H6, name: 'Heading 6' }\n ],\n COLOR: [\n { value: HeadingColor.Dark, name: 'Dark' },\n { value: HeadingColor.White, name: 'White' }\n ]\n },\n BUTTON: {\n ICONS: [\n { value: ButtonIcon.NewWindow, name: 'New Window' }\n ]\n }\n};\n\nexport const BUTTON_ICON_MAP: Record<ButtonIcon, any> = {\n [ButtonIcon.NewWindow]: NewWindowSvg,\n [ButtonIcon.TopicDirectory]: GridSvg,\n [ButtonIcon.TopicNewReleases]: SparkleSvg,\n [ButtonIcon.CuratedTopic]: RectanglesSvg\n};\n\nexport const BOOTSTRAP_CLASS_MAP = {\n [HeadingSize.H1]: 'h1',\n [HeadingSize.H2]: 'h2',\n [HeadingSize.H3]: 'h3',\n [HeadingSize.H4]: 'h4',\n [HeadingSize.H5]: 'h5',\n [HeadingSize.H6]: 'h6',\n [HeadingColor.Dark]: 'text-dark',\n [HeadingColor.White]: 'text-white'\n};\n","import React from 'react';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { BOOTSTRAP_CLASS_MAP, HeadingColor, HeadingSize } from 'libs/shared/constants/WidgetThemingConstants';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { NewWindowSvg } from 'libs/shared/images/svg/actions/NewWindowSvg';\nimport { Classification, WidgetCta } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from '../hero-banner-small.module.scss';\n\nexport interface BlurbHeroBannerSmallWidgetTemplateProps {\n name: string;\n imageCdnUrl: string;\n content: Classification[];\n widgetTypeId: WidgetTypeId;\n metadata: {\n imageId: string;\n theming: {\n headingSize: HeadingSize;\n headingColor: HeadingColor;\n },\n cta: WidgetCta\n }\n}\n\nexport function BlurbHeroBannerSmallWidgetTemplate(props: BlurbHeroBannerSmallWidgetTemplateProps): JSX.Element {\n function getBannerUrl(): string {\n return ImageHelper.getUrlById(\n props.imageCdnUrl,\n ImageType.Banners,\n props.metadata.imageId,\n ImageSize.Large\n );\n }\n\n const headingSize = BOOTSTRAP_CLASS_MAP[props.metadata.theming?.headingSize || HeadingSize.H6];\n const headingColor = BOOTSTRAP_CLASS_MAP[props.metadata.theming?.headingColor || HeadingColor.Dark];\n\n return (\n <div className={`banner rounded-3 position-relative ${styles.banner}`}>\n <div className={`${styles.bannerImage} ${styles.blurb} d-flex`} style={{ backgroundImage: `url('${getBannerUrl()}')` }}>\n {props.name &&\n <div className={`${styles.bannerContent} ${props.widgetTypeId === WidgetTypeId.Blurb ? styles.blurb : ''} d-flex justify-content-between w-100 px-3`}>\n <p className={`${headingSize} ${headingColor} mb-0`}>\n {props.name}\n </p>\n {props.metadata.cta?.text && (\n <IconButton svg={NewWindowSvg} className='btn btn-dark text-nowrap' href={props.metadata.cta.href} openInNewTab>\n {props.metadata.cta.text}\n </IconButton>\n )}\n </div>\n }\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { BUTTON_ICON_MAP } from 'libs/shared/constants/WidgetThemingConstants';\nimport { WidgetCta } from 'libs/shared/interfaces';\n\nimport styles from './classification-hero-thumbnail-small.module.scss';\n\ninterface HeroBannerButtonProps {\n cta: WidgetCta;\n}\n\nfunction HeroBannerButton(props: HeroBannerButtonProps): JSX.Element {\n if (!props.cta?.text)\n return <div />;\n\n const className = `btn btn-outline-dark text-nowrap me-3`;\n\n if (!props.cta?.icon) {\n return (\n <div className={className}>\n {props.cta.text}\n </div>\n );\n }\n\n return (\n <IconButton\n svg={BUTTON_ICON_MAP[props.cta.icon]}\n className={className}\n openInNewTab\n >\n {props.cta.text}\n </IconButton>\n );\n}\n\nexport interface ClassificationHeroBannerSmallProps {\n appLink: Core.AppLink;\n heading: string;\n cta?: WidgetCta;\n analyticsData: HashObject;\n analyticsOptions: AnalyticsOptions;\n style: React.CSSProperties;\n}\n\nexport function ClassificationHeroBannerSmall(props: ClassificationHeroBannerSmallProps): JSX.Element {\n return (\n <AppLink\n appLink={props.appLink}\n className='text-decoration-none'\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n >\n <div className={`banner rounded-3 position-relative ${styles.banner}`}>\n <div className={`${styles.bannerImage} d-flex justify-content-between align-items-center`} style={props.style}>\n {!!props.heading && (\n <div className='d-flex align-items-center ps-3 h-100'>\n <h2 className='text-white text-shadow h4 clamp-1'>\n {props.heading}\n </h2>\n </div>\n )}\n \n <HeroBannerButton cta={props.cta} />\n </div>\n </div>\n </AppLink>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { ClassificationHeroBannerSmall } from 'libs/shared/components/widgets/curated-widgets/components/classification-hero-banner-small/ClassificationHeroBannerSmall';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { Classification, WidgetCta } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nexport interface ClassificationHeroBannerSmallWidgetTemplateProps {\n name: string;\n content: Classification[];\n analyticsData?: HashObject;\n \n\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink;\n };\n\n metadata: {\n cta: WidgetCta;\n }\n}\n\nexport function ClassificationHeroBannerSmallWidgetTemplate(\n props: ClassificationHeroBannerSmallWidgetTemplateProps\n): JSX.Element {\n const classification = ArrayHelper.first(props.content);\n\n function getBannerUrl(): string {\n return ImageHelper.createBannerUrl(classification.banner, {\n fallbackBaseUrl: '',\n fallbackCategoryName: classification.name,\n type: ImageType.Banners\n }, { size: ImageSize.Large });\n }\n\n const analyticsOptions = {\n location: LocationContext.Classification,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Banner\n };\n\n return (\n <ClassificationHeroBannerSmall\n heading={props.name}\n appLink={props.appLinks?.classification?.(classification)}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n style={{\n backgroundImage: `url('${getBannerUrl()}')`,\n backgroundSize: '100%'\n }}\n cta={props.metadata?.cta}\n />\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AnalyticsOptions, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { LocalPermissionName, PermissionName } from 'libs/shared/enums/PermissionName';\nimport { HasLocalPermissionsFunc, HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Presentation } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from '../hero-banner-small.module.scss';\n\nexport interface PresentationsHeroBannerSmallWidgetTemplateProps {\n name: string;\n hasPermissions: HasPermissionsFunc;\n hasLocalPermissions: HasLocalPermissionsFunc;\n content: Presentation[];\n imageCdnUrl: string;\n analyticsData?: HashObject;\n \n metadata: {\n imageId: string;\n };\n appLinks: {\n discover: (presentationId?: string) => Core.AppLink;\n }\n}\n\nexport function PresentationsHeroBannerSmallWidgetTemplate(\n props: PresentationsHeroBannerSmallWidgetTemplateProps\n): JSX.Element {\n const canView = (\n props.hasPermissions(PermissionName.ManageSubjectPreferences) ||\n props.hasLocalPermissions(LocalPermissionName.ManagePublicPresentation)\n );\n\n function getBannerUrl(): string {\n return ImageHelper.getUrlById(\n props.imageCdnUrl,\n ImageType.Banners,\n props.metadata.imageId,\n ImageSize.Large\n );\n }\n\n function getPresentationLink(presentation: Presentation): JSX.Element {\n const appLinkOptions = {\n middlewareOptions: { presentationSlug: presentation?.vanitySlug }\n };\n\n const analyticsData: HashObject = {\n ...props.analyticsData,\n id: presentation.id,\n presentationName: presentation.name\n };\n\n const analyticsOptions: AnalyticsOptions = {\n entity: EntityType.Presentation,\n actionType: UserAction.Click,\n location: LocationContext.HeroBannerSmallWidget\n };\n\n return (\n <AppLink\n className='info-link d-inline'\n appLink={props.appLinks?.discover?.()}\n appLinkOptions={appLinkOptions}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n {presentation.name}\n </AppLink>\n );\n }\n\n function getPresentations(): JSX.Element {\n if (props.content.length === 1) {\n return getPresentationLink(props.content[0]);\n }\n\n if (props.content.length === 2) {\n return <>{getPresentationLink(props.content[0])} or {getPresentationLink(props.content[1])}</>;\n }\n\n return (\n <>\n {props.content.slice(0, props.content.length - 1).map(p => {\n return <React.Fragment key={p.id}>{getPresentationLink(p)}, </React.Fragment>;\n })}\n or {getPresentationLink(ArrayHelper.last(props.content))}\n </>\n );\n }\n\n const prefix = props.name;\n\n if (!canView)\n return <></>;\n\n return (\n <div className={`banner rounded-3 position-relative ${styles.banner}`}>\n <div className={`${styles.bannerImage} ${styles.presentations}`} style={{ backgroundImage: `url('${getBannerUrl()}')` }}>\n {prefix &&\n <div className={`${styles.bannerContent} ${styles.presentations} px-3`}>\n <p className='h6 mb-0'>\n {prefix} {getPresentations()}.\n </p>\n </div>\n }\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { BlurbHeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/types/BlurbHeroBannerSmallWidgetTemplate';\nimport { ClassificationHeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/types/ClassificationHeroBannerSmallWidgetTemplate';\nimport { PresentationsHeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/types/PresentationsHeroBannerSmallWidgetTemplate';\nimport { HeadingColor, HeadingSize } from 'libs/shared/constants/WidgetThemingConstants';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasLocalPermissionsFunc, HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Classification, Presentation, WidgetCta } from 'libs/shared/interfaces';\n\nexport interface HeroBannerSmallWidgetTemplateProps {\n name: string;\n imageCdnUrl: string;\n widgetTypeId: WidgetTypeId;\n content: Classification[] | Presentation[];\n\n metadata: {\n imageId: string;\n theming: {\n headingSize: HeadingSize;\n headingColor: HeadingColor;\n },\n cta: WidgetCta\n }\n\n hasPermissions: HasPermissionsFunc;\n hasLocalPermissions: HasLocalPermissionsFunc;\n\n analyticsData?: HashObject;\n \n\n appLinks: {\n discover: (presentationId?: string) => Core.AppLink;\n classification: (classification: Classification | null) => Core.AppLink;\n }\n}\n\n// TODO: Fix this up, shouldn't have to cast\n// But it makes AllWidgetTemplateProps unknown for some reason\nexport function HeroBannerSmallWidgetTemplate(\n props: HeroBannerSmallWidgetTemplateProps\n): JSX.Element {\n switch (props.widgetTypeId) {\n case WidgetTypeId.Blurb:\n return <BlurbHeroBannerSmallWidgetTemplate {...props} content={props.content as Classification[]} />;\n case WidgetTypeId.Presentations:\n return (\n <PresentationsHeroBannerSmallWidgetTemplate {...props} content={props.content as Presentation[]} />\n );\n default:\n return <ClassificationHeroBannerSmallWidgetTemplate {...props} content={props.content as Classification[]} />;\n }\n}","import React from 'react';\n\nimport styles from '../hero-banner-small.module.scss';\n\nexport function PartialHeroBannerSmallWidgetTemplate(): JSX.Element {\n return (\n <div className={`banner rounded-3 position-relative ${styles.banner}`}>\n <div className={`${styles.bannerContent}`} />\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { ClassificationHeroBannerSmall } from 'libs/shared/components/widgets/curated-widgets/components/classification-hero-banner-small/ClassificationHeroBannerSmall';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Classification, CuratedWidgetCtaAppLink } from 'libs/shared/interfaces';\n\nexport interface HeroBlockColourSmallWidgetTemplateProps {\n name: string;\n content: Classification[];\n metadata: {\n cta: {\n appLink: CuratedWidgetCtaAppLink;\n }\n };\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink;\n classificationDirectory: (classification: Classification) => Core.AppLink;\n }\n}\n\nexport function HeroBlockColourSmallWidgetTemplate(props: HeroBlockColourSmallWidgetTemplateProps): JSX.Element {\n const classification = ArrayHelper.first(props.content);\n\n const breakpoints = useBreakpoints();\n\n function getCustomCtaAppLink(): Core.AppLink | null {\n switch (props.metadata?.cta?.appLink) {\n case CuratedWidgetCtaAppLink.TopicDirectory:\n return props.appLinks?.classificationDirectory?.(classification);\n case CuratedWidgetCtaAppLink.CuratedTopic:\n return props.appLinks?.classification?.(classification);\n case CuratedWidgetCtaAppLink.TopicNewReleases:\n return props.appLinks?.classification?.(classification);\n }\n\n return null;\n }\n\n const analyticsData = {\n id: classification.id,\n name: classification.name,\n presentationId: classification.presentationId\n };\n\n const analyticsOptions = {\n location: LocationContext.ClassificationListItem,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n return (\n <ClassificationHeroBannerSmall\n heading={props.name}\n appLink={getCustomCtaAppLink()}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n style={{\n backgroundColor: classification.metadata?.backgroundColor,\n backgroundSize: '100%'\n }}\n cta={breakpoints.xs ? null : props.metadata?.cta}\n />\n );\n}\n","import React from 'react';\n\nimport { PartialHeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/partial-loading/PartialHeroBannerSmallWidgetTemplate';\n\nexport function PartialHeroBlockColourSmallWidgetTemplate(): JSX.Element {\n return <PartialHeroBannerSmallWidgetTemplate />;\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { ClassificationHeroBannerSmall } from 'libs/shared/components/widgets/curated-widgets/components/classification-hero-banner-small/ClassificationHeroBannerSmall';\nimport { HeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/HeroBannerSmallWidgetTemplate';\nimport { HeadingColor, HeadingSize } from 'libs/shared/constants/WidgetThemingConstants';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasLocalPermissionsFunc, HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Classification, Presentation, WidgetCta } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nconst namespace = 'shared.heroThumbnailSmall';\n\nexport interface HeroThumbnailSmallWidgetTemplateProps {\n name: string;\n widgetTypeId: WidgetTypeId;\n content: Classification[] | Presentation[];\n analyticsData?: HashObject;\n \n imageCdnUrl: string;\n hasPermissions: HasPermissionsFunc;\n hasLocalPermissions: HasLocalPermissionsFunc;\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink;\n discover: (presentationId?: string) => Core.AppLink;\n };\n metadata: {\n imageId: string;\n theming: {\n headingSize: HeadingSize;\n headingColor: HeadingColor;\n },\n cta: WidgetCta\n }\n}\n\nexport function HeroThumbnailSmallWidgetTemplate(props: HeroThumbnailSmallWidgetTemplateProps): JSX.Element {\n const classification = props.content?.[0];\n\n const thumbnailUrl = 'thumbnail' in classification &&\n ImageHelper.createUrl(classification.thumbnail?.url, { size: ImageSize.Medium });\n const backgroundColor = 'metadata' in classification && classification.metadata?.backgroundColor;\n\n const style: React.CSSProperties = {\n backgroundColor,\n backgroundSize: '50%'\n };\n\n if (thumbnailUrl)\n style.backgroundImage = `url('${thumbnailUrl}')`;\n\n const analyticsData = {\n ...props.analyticsData,\n id: classification.id,\n name: classification.name,\n presentationId: 'presentationId' in classification && classification.presentationId\n };\n\n const analyticsOptions = {\n location: LocationContext.ClassificationListItem,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n if (!thumbnailUrl || !backgroundColor)\n return <HeroBannerSmallWidgetTemplate {...props} />;\n\n return (\n <ClassificationHeroBannerSmall\n heading={props.name}\n appLink={props.appLinks?.classification?.(classification)}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n style={style}\n cta={{\n text: LanguageService.getPhrase(namespace, 'buttonLabel'),\n ...(props.metadata?.cta ?? {})\n }}\n />\n );\n}\n","import React from 'react';\n\nimport { PartialHeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/partial-loading/PartialHeroBannerSmallWidgetTemplate';\n\nexport function PartialHeroThumbnailSmallWidgetTemplate(): JSX.Element {\n return <PartialHeroBannerSmallWidgetTemplate />;\n}","import { ObjectHash } from 'backbone';\n\nimport { ErrorHelper } from 'libs/common/backbone/core/BaseError';\nimport { DevError } from 'libs/common/backbone/errors/DevError';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nexport interface BaseCollectionIdentifierOptions<T> {\n collectionPrefix?: string;\n id?: string;\n sort?: T;\n cursor?: string;\n}\n\nexport class BaseCollectionIdentifier<T = HashObject> {\n public id: string;\n public sort: T;\n public cursor: string;\n public collectionPrefix: string;\n\n constructor(options: BaseCollectionIdentifierOptions<T>) {\n this.setData(options);\n }\n\n protected setData(options: BaseCollectionIdentifierOptions<T>): void {\n const { collectionPrefix, id, sort, cursor } = options;\n\n if (id)\n this.id = id;\n\n if (sort)\n this.sort = sort;\n\n if (cursor)\n this.cursor = cursor;\n\n if (collectionPrefix)\n this.collectionPrefix = collectionPrefix;\n }\n\n public toString(): string {\n const params = [\n this.collectionPrefix,\n this.id,\n this.sort,\n this.cursor\n ];\n\n return params.filter(Boolean).join(':');\n }\n\n public toParams(): ObjectHash {\n const params: ObjectHash = {};\n\n if (this.sort)\n params.sort = this.getSortTypeParam().toLowerCase();\n\n if (this.cursor)\n params.cursor = this.cursor;\n\n return params;\n }\n\n protected getSortTypeParam(): string {\n ErrorHelper.throw(new DevError('getSortTypeParam must be implemented when extending BaseCollectionIdentifier'));\n\n return '';\n }\n}","export enum PlaylistSortType {\n Newest = 'newest',\n Oldest = 'oldest',\n RecentlyUpdated = 'recently_added',\n AtoZ = 'atoz',\n ZtoA = 'ztoa'\n}","export enum PlaylistType {\n OwnedByMe = 'owned_by_me',\n Followed = 'followed',\n All = 'all'\n}","import { BaseCollectionIdentifier } from 'libs/common/backbone/interfaces';\n\nimport { PlaylistSortType } from 'libs/shared/apps/playlists/enums/PlaylistSortType';\nimport { PlaylistType } from 'libs/shared/apps/playlists/enums/PlaylistType';\n\nexport class PlaylistCollectionIdentifier extends BaseCollectionIdentifier<PlaylistSortType> {\n public type: PlaylistType;\n\n constructor(sort: PlaylistSortType = PlaylistSortType.Newest, cursor: string = '', type: PlaylistType = PlaylistType.OwnedByMe) {\n super({ collectionPrefix: 'user:playlists', cursor, sort });\n\n this.type = type;\n }\n\n public toString(): string {\n const params = [\n this.collectionPrefix,\n this.sort,\n this.cursor,\n this.type\n ];\n\n return params.filter(Boolean).join(':');\n }\n}","import { BaseCollectionIdentifier } from 'libs/common/backbone/interfaces';\n\nexport class PlaylistVideoCollectionIdentifier extends BaseCollectionIdentifier {\n constructor(id: string, cursor: string = '') {\n super({ collectionPrefix: 'playlist:videos', id, cursor });\n }\n}","import { HashObject } from 'libs/common/react/interfaces/HashObject';\n\ntype StateMap = { [key: string]: HashObject };\n\nexport const PlaylistStateUpdateHelper = {\n deletePlaylist(key: string): (state: StateMap) => StateMap {\n return (state: StateMap) => {\n const updatedState = { ...state };\n\n if (updatedState.hasOwnProperty(key))\n delete updatedState[key];\n\n return updatedState;\n };\n },\n\n incrementVideoCount(key: string, count: number): (state: StateMap) => StateMap {\n return (state: StateMap) => {\n const updatedState = { ...state };\n\n if (!updatedState.hasOwnProperty(key))\n return state;\n\n if (!updatedState[key].videos)\n updatedState[key].videos = {};\n\n updatedState[key].videos.count = updatedState[key].videos.count\n ? updatedState[key].videos.count + count\n : count;\n\n return updatedState;\n };\n }\n};","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { CreateOrUpdatePlaylistRequest, PlaylistCollectionIdentifier, PlaylistVideoCollectionIdentifier } from 'libs/shared/apps/playlists/interfaces';\nimport { PlaylistStateUpdateHelper } from 'libs/shared/apps/playlists/utils/PlaylistStateUpdateHelper';\nimport { SharedWithStatements } from 'libs/shared/constants/WithStatements';\nimport { CurationStatus } from 'libs/shared/enums/CurationStatus';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { PermissionFilterOption } from 'libs/shared/enums/PermissionFilterOption';\nimport { Following, ReorderRequest, UserCollection, VideoTypes } from 'libs/shared/interfaces';\nimport { ObjectApiXhr } from 'libs/shared/interfaces/responses/ErrorResponse';\nimport { ReorderHelper } from 'libs/shared/utils/ReorderHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nexport const PlaylistRequests = {\n // TODO: Get working with objects api (playlist count needs to include clips and ints too)\n getUserPlaylists(collectionIdentifier: PlaylistCollectionIdentifier): Flight.Request {\n const { sort, type } = collectionIdentifier;\n\n const params: HashObject = {\n sort: sort,\n query: `{limit:100}${SharedWithStatements.PLAYLIST_COLLECTION},_isClickViewCurated,_liteOwner`\n };\n\n if (collectionIdentifier.cursor)\n params.cursor = collectionIdentifier.cursor;\n\n return {\n url: UrlHelper.urlBuilder(`/api/domain/v2/me/playlists/${type}`, params),\n key: collectionIdentifier.toString()\n };\n },\n\n getPlaylist(id: string, success?: (data: any) => void, error?: (data: any) => void): Flight.PublicRequest {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/objects/${id}`, {\n query: `${SharedWithStatements.PLAYLIST},_isClickViewCurated,_liteOwner`\n }),\n publicUrl: UrlHelper.urlBuilder(`/api/objects/${id}`, {\n query: `${SharedWithStatements.PLAYLIST},_isClickViewCurated`\n }),\n key: `playlist:${id}`,\n success,\n error\n };\n },\n\n getSharedPlaylist(\n id: string,\n shareId: string,\n success?: (data: any) => void,\n error?: (data: any) => void\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`/api/objects/${id}`, {\n query: `${SharedWithStatements.PLAYLIST},_isClickViewCurated,_liteOwner`,\n shareId\n }),\n key: `shared:playlist:${id}:${shareId}`,\n success,\n error\n };\n },\n\n playlistWithThumbnailAndCount(id: string): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/objects/${id}`, {\n query: `${SharedWithStatements.PLAYLIST},_isClickViewCurated,_liteOwner,videos[count()]{limit:1},interactives[count()]{limit:1},clips[count()]{limit:1}`\n }),\n key: `playlist:${id}:thumbnail:count`\n };\n },\n\n getPlaylistVideos(id: string, cursor?: string): Flight.PublicRequest {\n const { VIDEO_COLLECTION, CLIP_COLLECTION, INTERACTIVE } = SharedWithStatements;\n\n const params: HashObject = {\n query: `(videos[${VIDEO_COLLECTION}]{status:[${CurationStatus.Published},${CurationStatus.Archived}]}|clips[${CLIP_COLLECTION}]{status:[${CurationStatus.Published},${CurationStatus.Archived}]}|interactives[${INTERACTIVE}]){orderBy:orderindex,limit:100}`,\n permissionFilterOption: PermissionFilterOption.StripMetadata\n };\n\n if (cursor)\n params.cursor = cursor;\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/objects/${id}/members`, params),\n publicUrl: UrlHelper.urlBuilder(`/api/objects/${id}/members`, params),\n key: `playlist:${id}:videos${cursor ? `:${cursor}` : ''}`\n };\n },\n\n getSharedPlaylistVideos(id: string, shareId: string, cursor?: string): Flight.Request {\n const { VIDEO_COLLECTION, CLIP_COLLECTION, INTERACTIVE } = SharedWithStatements;\n\n const params: HashObject = {\n query: `(videos[${VIDEO_COLLECTION}]{status:[${CurationStatus.Published},${CurationStatus.Archived}]}|clips[${CLIP_COLLECTION}]{status:[${CurationStatus.Published},${CurationStatus.Archived}]}|interactives[${INTERACTIVE}]){orderBy:orderindex,limit:100}`,\n permissionFilterOption: PermissionFilterOption.StripMetadata,\n shareId\n };\n\n if (cursor)\n params.cursor = cursor;\n\n return {\n url: UrlHelper.urlBuilder(`/api/objects/${id}/members`, params),\n key: `shared:playlist:${id}:${shareId}:videos:${cursor}`\n };\n },\n\n getPlaylistVideosCount(id: string): Flight.PublicRequest {\n const filter = `{limit:0,status:[${CurationStatus.Published},${CurationStatus.Archived}]}`;\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/objects/${id}`, {\n query: `videos[count()]${filter},clips[count()]${filter},interactives[count()]${filter}`\n }),\n publicUrl: UrlHelper.urlBuilder(`/api/objects/${id}`, {\n query: `videos[count()]${filter},clips[count()]${filter},interactives[count()]${filter}`\n }),\n key: `playlist:count:${id}`,\n normalize: false\n };\n },\n\n getSharedPlaylistVideosCount(\n id: string,\n shareId: string\n ): Flight.Request {\n const filter = `{limit:0,status:[${CurationStatus.Published},${CurationStatus.Archived}]}`;\n return {\n url: UrlHelper.urlBuilder(`/api/objects/${id}`, {\n query: `videos[count()]${filter},clips[count()]${filter},interactives[count()]${filter}`,\n shareId\n }),\n key: `shared:playlist:count:${id}:${shareId}`,\n normalize: false\n };\n },\n\n getVideoPlaylists(videoId: string, userId: string, cursor?: string): Flight.Request {\n return {\n url: `{gateway}/v1/objects/${videoId}/playlists?query={limit:100,owner.id:[${userId}]}`,\n key: `video:playlists:${videoId}${cursor ? ':cursor' : ''}`\n };\n },\n\n createPlaylist(\n userId: string,\n data: CreateOrUpdatePlaylistRequest,\n success?: (data: any) => void,\n error?: (data: any) => void,\n always?: () => void\n ): Flight.Request {\n return {\n key: 'create:playlist',\n url: `{gateway}/v1/objects/${userId}/playlists`,\n data,\n type: HttpVerbs.POST,\n success,\n error,\n always,\n invalidationKeys: 'user:playlists'\n };\n },\n\n updatePlaylist(\n id: string,\n data: CreateOrUpdatePlaylistRequest,\n success?: (data: any) => void,\n error?: (data: any) => void,\n always?: () => void\n ): Flight.Request {\n return {\n key: 'update:playlist',\n url: `{gateway}/v1/objects/${id}`,\n data,\n type: HttpVerbs.PUT,\n success,\n error,\n always\n };\n },\n\n deletePlaylist(\n id: string,\n success?: (data: any) => void,\n error?: (data: any) => void,\n always?: () => void\n ): Flight.Request {\n return {\n key: 'delete:playlist',\n url: `{gateway}/v1/objects/${id}`,\n type: HttpVerbs.DELETE,\n success,\n error,\n always,\n invalidationKeys: 'user:playlists',\n updateState: {\n keys: `playlist:${id}`,\n updateData: PlaylistStateUpdateHelper.deletePlaylist(`playlist:${id}`)\n }\n };\n },\n\n copyPlaylist(\n id: string,\n success?: (data: any) => void,\n error?: (xhr: Xhr) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: '{gateway}/v1/playlists/copy',\n key: 'copy:playlist',\n data: { playlistId: id },\n type: HttpVerbs.POST,\n invalidationKeys: 'user:playlists',\n success,\n error,\n always\n };\n },\n\n addToPlaylist(\n playlistId: string,\n videos: VideoTypes[],\n success?: (data: any) => void,\n error?: (data: ObjectApiXhr) => void\n ): Flight.Request {\n /**\n * Invalidate:\n * - Playlists as they are fetched with first video.\n * - Playlist video collection.\n * - Playlists for each video.\n */\n const invalidationKeys = [\n 'user:playlists',\n (new PlaylistVideoCollectionIdentifier(playlistId)).toString(),\n `playlist:${playlistId}:videos`\n ];\n\n videos.forEach(video => {\n invalidationKeys.push(`video:playlists:${video.id}`);\n });\n\n const body = videos.reduce((acc: HashObject, video: VideoTypes) => {\n if (VideoHelper.isClip(video)) {\n if (Array.isArray(acc.clips))\n acc.clips.push({ id: video.id });\n else\n acc.clips = [{ id: video.id }];\n }\n\n if (VideoHelper.isInteractive(video)) {\n if (Array.isArray(acc.interactives))\n acc.interactives.push({ id: video.id });\n else\n acc.interactives = [{ id: video.id }];\n }\n\n if (VideoHelper.isVideo(video)) {\n if (Array.isArray(acc.videos))\n acc.videos.push({ id: video.id });\n else\n acc.videos = [{ id: video.id }];\n }\n\n return acc;\n }, {});\n\n return {\n key: `add:to:playlist:${playlistId}:${videos.map(v => v.id).join(':')}`,\n url: `{gateway}/v1/objects/${playlistId}`,\n data: body,\n type: HttpVerbs.PUT,\n success,\n error,\n invalidationKeys,\n updateState: {\n keys: `playlist:${playlistId}`,\n updateData: PlaylistStateUpdateHelper.incrementVideoCount(`playlist:${playlistId}`, videos.length)\n },\n normalize: false\n };\n },\n\n removePlaylistVideo(\n playlistId: string,\n videoId: string,\n typeId: MasterType,\n success?: (data: any) => void,\n error?: (data: any) => void\n ): Flight.Request {\n let baseUrl = `{gateway}/v1/objects/${playlistId}`;\n\n if (typeId === MasterType.Clip)\n baseUrl += '/clips';\n else if (typeId === MasterType.Interactive)\n baseUrl += '/interactives';\n else\n baseUrl += '/videos';\n\n return {\n key: 'remove:playlist:video',\n url: UrlHelper.urlBuilder(baseUrl, { memberId: videoId }),\n type: HttpVerbs.DELETE,\n success,\n error,\n // Invalidate playlists as they are fetched with the first video.\n invalidationKeys: [\n 'user:playlists',\n `playlist:${playlistId}:videos`,\n `video:playlists:${videoId}`,\n `playlist:${playlistId}`\n ]\n };\n },\n\n getIsFollowingPlaylist(playlistId: string, userId: string): Flight.Request {\n const formatData: ((data: UserCollection) => Following) = (data: UserCollection) => (\n { objectId: playlistId, isFollowing: !!data?.data?.length }\n );\n\n return {\n url: `{gateway}/v1/objects/${userId}/followedPlaylists?query={id:${playlistId}}`,\n key: `playlist:${playlistId}:following:${userId}`,\n formatData,\n normalize: false\n };\n },\n\n followPlaylist(\n playlistId: string,\n userId: string,\n success?: (data: any) => void,\n error?: (xhr: Xhr) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: `{gateway}/v1/objects/${userId}`,\n key: `follow:playlist:${playlistId}`,\n data: { followedPlaylists: playlistId },\n type: HttpVerbs.PUT,\n invalidationKeys: [ 'user:playlists', `playlist:${playlistId}`, 'shared:playlist' ],\n success,\n error,\n always\n };\n },\n\n unfollowPlaylist(\n playlistId: string,\n userId: string,\n success?: (data: any) => void,\n error?: (xhr: Xhr) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: `{gateway}/v1/objects/${userId}/followedPlaylists?memberId=${playlistId}`,\n key: `unfollow:playlist:${playlistId}`,\n type: HttpVerbs.DELETE,\n invalidationKeys: [ 'user:playlists', `playlist:${playlistId}`, 'shared:playlist' ],\n success,\n error,\n always\n };\n },\n\n // TODO: Use objects api and get working with clips + ints\n reorderVideos(\n id: string,\n reorderRequest: ReorderRequest,\n success?: (data: any) => void,\n error?: (data: any) => void\n ): Flight.Request {\n return {\n key: `reorder:playlist`,\n url: `{gateway}/v1/playlists/${id}/reorder`,\n data: reorderRequest,\n type: HttpVerbs.PUT,\n success,\n error,\n // Invalidate playlists as they are fetched with the first video.\n invalidationKeys: 'user:playlists',\n updateState: {\n keys: `playlist:${id}:videos`,\n updateData: (data: { [key: string]: HashObject }) =>\n ReorderHelper.updateState(`playlist:${id}:videos`, reorderRequest, data)\n }\n };\n },\n\n getVideoCandidate(id: string): Flight.Request {\n return {\n url: `{gateway}/v1/objects/${id}?query=_restrictions`,\n key: `add:to:playlist:candidate:${id}`\n };\n }\n};\n","import React from 'react';\n\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { OnboardingScreenAppLinks } from 'libs/shared/apps/onboarding/interfaces/OnboardingScreenAppLinks';\nimport { OnboardingPathway, OnboardingPathwayHelper } from 'libs/shared/apps/onboarding/utils/OnboardingPathwayHelper';\nimport { JobTitles } from 'libs/shared/apps/sign-up/interfaces/JobTitles';\nimport { PresentationType } from 'libs/shared/enums/PresentationType';\nimport { ClassificationRequests } from 'libs/shared/flight-requests/ClassificationRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { PlaylistRequests } from 'libs/shared/flight-requests/PlaylistRequests';\nimport { PreferenceRequests } from 'libs/shared/flight-requests/PreferenceRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Classification, CurrentUser, Customer, PlaylistCollection, Presentation, User } from 'libs/shared/interfaces';\nimport { ContextService } from 'libs/shared/services/ContextService';\n\nimport { PlaylistCollectionIdentifier } from '../../playlists/interfaces';\n\nexport interface GetPathwayOptions {\n jobTitleOverride?: JobTitles;\n preferredPresentationOverride?: Presentation;\n}\n\nexport function useOnboardingPathway(appLinks: OnboardingScreenAppLinks) {\n const [ hasPlaylist, setHasPlaylist ] = useViewModel<boolean>('has:playlist', null);\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const user = Flight.useBasicFetch<User>(currentUser.data?.isAuthenticated && UserRequests.user(currentUser.data.id));\n const customer = Flight.useBasicFetch<Customer>(\n currentUser.data?.isAuthenticated && CustomerRequests.customer(currentUser.data.customerId)\n );\n\n const presentations = Flight.useBasicFetch<Presentation[]>(\n ClassificationRequests.availablePresentations(PresentationType.Subject)\n );\n const preferredPresentation = Flight.useBasicFetch<Presentation>(\n ClassificationRequests.presentation(PresentationType.Subject)\n );\n const curriculums = Flight.useBasicFetch<Presentation[]>(\n ClassificationRequests.availablePresentations(PresentationType.Curriculum)\n );\n const playlists = Flight.useBasicFetch<PlaylistCollection>(\n PlaylistRequests.getUserPlaylists(new PlaylistCollectionIdentifier())\n );\n const preferredSubjects = Flight.useBasicFetch<Classification[]>(\n PreferenceRequests.mySubjectPreferences()\n );\n const { hasPermissions } = usePermissions();\n\n React.useEffect(() => {\n if (!playlists.hasCompleted)\n return;\n\n if (hasPlaylist !== !!playlists.data?.data?.length)\n setHasPlaylist(!!playlists.data?.data?.length);\n }, [playlists.hasCompleted]);\n\n const hasLoadedPathway = (\n currentUser.hasCompleted &&\n user.hasCompleted &&\n customer.hasCompleted &&\n presentations.hasCompleted &&\n curriculums.hasCompleted &&\n preferredPresentation.hasCompleted &&\n playlists.hasCompleted &&\n preferredSubjects.hasCompleted &&\n hasPlaylist !== null\n );\n\n const { userSettings } = useSettings(null);\n\n function getPathway(options: GetPathwayOptions = {}): OnboardingPathway {\n const jobTitle = options.jobTitleOverride || user.data?.userProfile?.metadata?.jobTitle;\n const presentation = options.preferredPresentationOverride || preferredPresentation.data;\n\n if (!hasLoadedPathway) {\n return {\n screens: {},\n currentScreen: null,\n totalScreens: 0,\n totalScreensInProgressBar: 0,\n hasCompletedAllSteps: false\n };\n }\n\n return OnboardingPathwayHelper.getOnboardingPathway({\n jobTitle,\n userSettings: userSettings.data,\n presentations: presentations.data,\n curriculums: curriculums.data,\n preferredSubjects: preferredSubjects.data,\n preferredPresentation: presentation,\n appLink: ContextService.getCurrentRoute().appLink,\n appLinks,\n masterUser: user.data,\n customer: customer.data,\n hasPlaylist,\n hasPermissions,\n currentUser: currentUser.data\n });\n }\n\n return {\n getPathway,\n hasLoadedPathway\n };\n}","export interface ScoreThresholds {\n HIGH: number;\n MODERATE: number;\n}\n\nexport const ScoreThresholdDefaults: ScoreThresholds = {\n HIGH: 0.75,\n MODERATE: 0.5\n};\n\nexport const ScoreThresholdInsights: ScoreThresholds = {\n HIGH: 0.7,\n MODERATE: 0.7\n};","import { ScoreThresholdDefaults, ScoreThresholds } from 'libs/shared/constants/ScoreThresholds';\n\nimport styles from './percentage-indicator.module.scss';\n\n/**\n * Values for width and strokeWidth are taken from progress-circle.scss.\n * If either are changed, they must be updated in both places.\n */\nconst CIRCLE_WIDTH = 2; // rem\nconst CIRCLE_WIDTH_LG = 5.8; // rem\nconst CIRCLE_STROKE_WIDTH = 0.2; // rem\nconst CIRCLE_STROKE_WIDTH_LG = 0.36; // rem\n \nexport enum ProgressCircleSize {\n Small = 'small',\n Large = 'large',\n ExtraSmall = 'extraSmall'\n}\n\nconst ProgressCircleSizeMap = {\n [ProgressCircleSize.ExtraSmall]: {\n size: CIRCLE_WIDTH\n },\n [ProgressCircleSize.Small]: {\n size: CIRCLE_WIDTH\n },\n [ProgressCircleSize.Large]: {\n size: CIRCLE_WIDTH_LG\n }\n};\n\n/**\n * radius = width / 2 - strokeWidth * 2\n */\nexport function getCircleRadius(size: ProgressCircleSize): string {\n const width = ProgressCircleSizeMap[size].size;\n const strokeWidth = size === ProgressCircleSize.Large ? CIRCLE_STROKE_WIDTH_LG : CIRCLE_STROKE_WIDTH;\n return `${width / 2 - strokeWidth * 2}rem`;\n}\n \nexport function getCircleClassName(\n percentage: number,\n scoreThresholds: ScoreThresholds = ScoreThresholdDefaults\n): string {\n if (percentage >= scoreThresholds.HIGH)\n return styles.circleSuccess;\n \n if (percentage >= scoreThresholds.MODERATE)\n return styles.circleWarning;\n \n return styles.circleDanger;\n}\n \nexport function getColouredLabelClassName(\n percentage: number,\n scoreThresholds: ScoreThresholds = ScoreThresholdDefaults\n): string {\n if (percentage >= scoreThresholds.HIGH)\n return 'text-success';\n \n if (percentage >= scoreThresholds.MODERATE)\n return 'text-warning';\n \n return 'text-danger';\n}\n \nexport function getCircleContainerClassName(size: ProgressCircleSize, percentage?: number): string {\n let className = `d-inline-block ${styles.circleContainer}`;\n \n if (size === ProgressCircleSize.Large)\n className += ` ${styles.lgCircleContainer}`;\n\n if (size === ProgressCircleSize.ExtraSmall)\n className += ` ${styles.xsCircleContainer}`;\n\n if (isPending(percentage))\n className += ` ${styles.pendingCircle}`;\n \n return className;\n}\n\nexport function getPercentageToFixed(percentage?: number): number | undefined {\n if (isPending(percentage))\n return;\n \n return +percentage.toFixed(2);\n}\n \nexport function getFormattedPercentage(percentage?: number): string {\n if (isPending(percentage))\n return `--%`;\n\n return `${Math.round(percentage * 100)}%`;\n}\n\nexport function isPending(percentage?: number): boolean {\n return typeof percentage !== 'number';\n}","import React from 'react';\n\nimport { ScoreThresholds } from 'libs/shared/constants/ScoreThresholds';\n\nimport {\n getCircleClassName,\n getCircleContainerClassName,\n getCircleRadius,\n getColouredLabelClassName,\n getFormattedPercentage,\n getPercentageToFixed,\n isPending,\n ProgressCircleSize\n} from './PercentageIndicatorUtils';\n\nimport styles from './percentage-indicator.module.scss';\n\ninterface ProgressCircleProps {\n size: ProgressCircleSize;\n scoreThresholds?: ScoreThresholds;\n percentage?: number;\n}\n\nfunction ProgressCircle(props: ProgressCircleProps): JSX.Element {\n const ref = React.useCallback((circle: SVGCircleElement) => {\n if (!circle)\n return;\n\n const radius = circle.r.baseVal.value;\n const circumference = 2 * Math.PI * radius;\n const offset = circumference - props.percentage * circumference;\n\n circle.style.strokeDasharray = `${circumference} ${circumference}`;\n circle.style.strokeDashoffset = offset.toString();\n }, [props.percentage]);\n\n return (\n <svg>\n <circle r={getCircleRadius(props.size)} className={styles.backgroundCircle} />\n {!isPending(props.percentage) &&\n <circle\n ref={ref}\n r={getCircleRadius(props.size)}\n className={getCircleClassName(props.percentage, props.scoreThresholds)}\n />\n }\n </svg>\n );\n}\n\nexport enum PercentageIndicatorLayout {\n CircleOnly = 'circle_only',\n LabelOnly = 'label_only',\n LabelBefore = 'label_before',\n LabelInside = 'label_inside'\n}\n\ninterface PercentageIndicatorProps {\n layout: PercentageIndicatorLayout;\n percentage?: number; // Between 0 and 1 or undefined for pending\n className?: string;\n customLabel?: string;\n scoreThresholds?: ScoreThresholds;\n size?: ProgressCircleSize;\n}\n\nPercentageIndicator.defaultProps = {\n layout: PercentageIndicatorLayout.CircleOnly\n};\n\nexport function PercentageIndicator(props: PercentageIndicatorProps): JSX.Element {\n const percentageToFixed = getPercentageToFixed(props.percentage);\n\n const size = props.size ||\n (props.layout === PercentageIndicatorLayout.LabelInside\n ? ProgressCircleSize.Large\n : ProgressCircleSize.Small\n );\n\n const label = props.customLabel || getFormattedPercentage(percentageToFixed);\n\n if (props.layout === PercentageIndicatorLayout.LabelOnly)\n return (\n <span className={getColouredLabelClassName(percentageToFixed)}>\n {label}\n </span>\n );\n\n return (\n <div className={`d-flex align-items-center justify-content-between ${props.className ?? ''}`}>\n {props.layout === PercentageIndicatorLayout.LabelBefore &&\n <span className='me-2'>\n {label}\n </span>\n }\n <div className={getCircleContainerClassName(size, percentageToFixed)}>\n <ProgressCircle percentage={percentageToFixed} size={size} scoreThresholds={props.scoreThresholds} />\n {props.layout === PercentageIndicatorLayout.LabelInside &&\n <span className={styles.centredPercentageText}>\n {label}\n </span>\n }\n </div>\n </div>\n );\n}","import React from 'react';\n\nexport function ArrowRightSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n d='M16.818 11H4.928C4.417 11 4 11.448 4 12s.416 1 .929 1h11.89l-3.781 4.22a1.11 1.11 0 0 0 0 1.465c.36.403.943.418 1.311.045l.032-.034 5.343-5.963a1.11 1.11 0 0 0 0-1.466l-5.343-5.963a.883.883 0 0 0-1.333 0 1.115 1.115 0 0 0-.01 1.477z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EntityType, LocationContext, OnboardingDescriptor, UserAction } from 'libs/analytics/interfaces';\n\nimport { OnboardingScreenConfigs } from 'libs/shared/apps/onboarding/constants/OnboardingScreenConfigs';\nimport { useOnboardingPathway } from 'libs/shared/apps/onboarding/hooks/useOnboardingPathway';\nimport { OnboardingScreenAppLinks } from 'libs/shared/apps/onboarding/interfaces/OnboardingScreenAppLinks';\nimport { OnboardingScreenId } from 'libs/shared/apps/onboarding/interfaces/OnboardingScreenId';\nimport { OnboardingPathwayHelper } from 'libs/shared/apps/onboarding/utils/OnboardingPathwayHelper';\nimport { JobTitles } from 'libs/shared/apps/sign-up/interfaces/JobTitles';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { PercentageIndicator, PercentageIndicatorLayout } from 'libs/shared/components/percentage-indicator/PercentageIndicator';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { ArrowRightSvg } from 'libs/shared/images/svg/arrows/ArrowRightSvg';\nimport { EntitySetting } from 'libs/shared/interfaces';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport styles from './onboarding-steps-widget.module.scss';\n\nconst namespace = 'widgets.onboardingSteps';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getDescription(\n currentScreen: OnboardingScreenId,\n currentStepNumber: number,\n totalSteps: number,\n isKdm: boolean\n): string {\n const screenConfig = OnboardingScreenConfigs[currentScreen];\n\n if (currentStepNumber === totalSteps)\n return `${getPhrase('lastStepDescriptionPrefix')} ${screenConfig?.getWidgetDescription(isKdm)}`;\n\n if (currentStepNumber === 1)\n return `${getPhrase('firstStepDescriptionPrefix')} ${screenConfig?.getWidgetDescription(isKdm)}`;\n\n return `${getPhrase('descriptionPrefix')} ${screenConfig?.getWidgetDescription(isKdm)}`;\n}\n\nexport interface OnboardingStepsWidgetTemplateProps {\n content: EntitySetting<boolean>[];\n appLinks: {\n onboardingAppLinks: () => OnboardingScreenAppLinks;\n onboardingStep: (step: OnboardingScreenId) => Core.AppLink;\n };\n jobTitle: JobTitles;\n isPreviewing: boolean;\n settings: {\n hasOnboardingV2: boolean;\n hasCompletedOnboardingV2: boolean;\n };\n hasPermissions: HasPermissionsFunc;\n imageUrls: {\n onboardingTeacherBackground: string;\n }\n}\n\nexport function OnboardingStepsWidgetTemplate(\n props: OnboardingStepsWidgetTemplateProps\n): JSX.Element {\n const { getPathway, hasLoadedPathway } = useOnboardingPathway(props.appLinks?.onboardingAppLinks?.() ?? {});\n\n const pathway = hasLoadedPathway && getPathway();\n const isKdm = UserHelper.isKDM(props.jobTitle);\n\n function hideWidget(): boolean {\n if (props.isPreviewing)\n return false;\n\n if (!hasLoadedPathway)\n return true;\n\n if (props.settings?.hasCompletedOnboardingV2 || !props.settings?.hasOnboardingV2)\n return true;\n\n if (!props.hasPermissions(PermissionName.ViewOnboarding))\n return true;\n\n if (pathway.hasCompletedAllSteps)\n return true;\n\n return false;\n }\n\n if (hideWidget())\n return <div className='mb-n3' />;\n\n function getAnalyticsPayload() {\n if (props.isPreviewing)\n return {};\n\n const screenConfig = OnboardingScreenConfigs[pathway.currentScreen];\n const currentNode = pathway.screens[pathway.currentScreen];\n const nextScreenId = currentNode?.next;\n const previousScreenId = currentNode?.previous;\n\n return {\n currentScreen: screenConfig?.id,\n nextScreen: nextScreenId,\n previousScreen: previousScreenId,\n progress: OnboardingPathwayHelper.getProgress(pathway),\n ...OnboardingPathwayHelper.getOnboardingScreenStates(pathway)\n };\n }\n\n const analyticsData = getAnalyticsPayload();\n\n function getProgress() {\n if (props.isPreviewing) {\n return {\n overallPercentage: 75,\n totalScreens: 8,\n currentStepNumber: 6\n };\n }\n\n const progress = OnboardingPathwayHelper.getProgress(pathway);\n\n if (progress.overallPercentage === 0) {\n return {\n ...progress,\n // Never starting the user at 0%\n overallPercentage: 10\n };\n }\n\n return progress;\n }\n\n const { overallPercentage, totalScreens, currentStepNumber } = getProgress();\n\n return (\n <div className={`rounded-3 bg-light-yellow border border-2 border-dark position-relative d-flex align-items-center ${styles.container}`}>\n <div className={`${styles.leftPanel}`}>\n <div className={styles.percentageContainer}>\n <PercentageIndicator\n percentage={Math.round(overallPercentage) / 100}\n layout={PercentageIndicatorLayout.LabelInside}\n scoreThresholds={{\n HIGH: 0.75,\n MODERATE: 0\n }}\n />\n </div>\n\n <div>\n <h2 className='h4'>\n {props.isPreviewing\n ? OnboardingScreenConfigs['select-videos']?.getWidgetHeading(isKdm)\n : OnboardingScreenConfigs[pathway.currentScreen]?.getWidgetHeading(isKdm)}\n </h2>\n <div className={styles.descriptionContainer}>\n <SvgContainer svg={ArrowRightSvg} className='svg-container me-1' />\n <p className={styles.description}>\n {getDescription(\n props.isPreviewing ? 'select-videos' : pathway.currentScreen,\n currentStepNumber,\n totalScreens,\n isKdm\n )}\n </p>\n </div>\n </div>\n </div>\n\n <div\n className={`align-items-center justify-content-end h-100 ${styles.rightPanel}`}\n style={{ backgroundImage: `url('${props.imageUrls?.onboardingTeacherBackground}')` }}\n >\n <AppLink\n appLink={props.appLinks?.onboardingStep?.(pathway?.currentScreen)}\n className={`btn btn-dark btn-lg ${styles.button}`}\n analyticsData={analyticsData}\n analyticsOptions={{\n actionType: UserAction.Click,\n entity: EntityType.User,\n location: LocationContext.OnboardingStepsWidget,\n descriptor: OnboardingDescriptor.FinishPersonalising\n }}\n >\n <Text namespace={namespace} phrase='completeSetup' />\n </AppLink>\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { PartialFixedWidget, PartialFixedWidgetItemProps } from 'libs/shared/components/widgets/fixed-widget';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nfunction PartialWidgetItem(props: PartialFixedWidgetItemProps): JSX.Element {\n return (\n <div className={`col-${props.colSize} px-1`}>\n <div className={`d-inline-block w-100 partial-loading-background rounded-3`} style={{ paddingBottom: '56.25%' }} />\n <div className='mt-2'>\n <div style={{ height: '1.4rem' }}>\n <div className='partial-loading-background' style={{ height: '1.1rem', width: '70%' }} />\n </div>\n <div className='partial-loading-background' style={{ height: '1.33875rem', width: '80%' }}></div>\n </div>\n </div>\n );\n}\n\nexport function PartialPopoutThumbnailSlidingListLargeWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n return (\n <PartialFixedWidget\n size='lg'\n childComponent={PartialWidgetItem}\n name={props.name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n />\n );\n}","import React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { PresentationAudience, VideoTypes, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\n\nimport styles from './popout-video-widget-item.module.scss';\n\nexport interface PopoutVideoWidgetItemProps extends FixedWidgetItemProps<VideoTypes> {\n presentationAudiences: PresentationAudience[];\n showVideoGuidance: boolean;\n hideTitle?: boolean;\n hideSeries?: boolean;\n onClickRemoveItem: (videoId: string, videoName: string) => void;\n removeButtonTooltip?: string;\n preventPopout?: boolean;\n showNewVideoIndicator?: boolean;\n commonVideoProps: CommonVideoProps;\n}\n\nexport const PopoutVideoWidgetItem = React.memo(function(props: PopoutVideoWidgetItemProps): JSX.Element {\n const { data: video, context, thumbnailSize, preloadImage, presentationAudiences } = props;\n \n const videoAudiences = video?.subjectPresentationAudiences?.data;\n const mergedAudience = useMergeAudiences(videoAudiences, presentationAudiences);\n\n const breakpoints = useBreakpoints();\n\n let width = styles.rowWidth;\n\n if (context.type === WidgetType.LargeRow)\n width = styles.largeRowWidth;\n\n return (\n <div className={`px-1 flex-shrink-0 position-relative ${width}`}>\n <VideoThumbnail\n video={props.data}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n hideTitle={props.hideTitle}\n showVideoGuidance={props.showVideoGuidance}\n type={props.preventPopout || breakpoints.xs ? 'static' : 'popout'}\n textPosition={ThumbnailTextPosition.Below}\n appLink={props.getAppLink(video)}\n imageOptions={{ size: thumbnailSize }}\n preload={preloadImage}\n audience={mergedAudience}\n hideRating={!!mergedAudience}\n hideDuration={false}\n onClickRemove={FunctionHelper.isFunction(props.onClickRemoveItem)\n && (() => props.onClickRemoveItem(video.id, video.name))}\n removeButtonTooltip={props.removeButtonTooltip}\n commonVideoProps={props.commonVideoProps}\n />\n </div>\n );\n});","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { WidgetTypeIdConfig } from 'libs/shared/constants/WidgetTypeIdConfig';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { PresentationAudience, Video, VideoWidgetTemplateContent, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport { PopoutVideoWidgetItem } from '../../../items/popout-video-widget-item/PopoutVideoWidgetItem';\n\nconst namespace = 'widgets.popoutThumbnailSlidingListLarge';\n\nexport interface PopoutThumbnailSlidingListLargeWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n imageCdnUrl: string;\n content: VideoWidgetTemplateContent;\n hasPermissions: HasPermissionsFunc;\n isPreviewing: boolean;\n widgetTypeId: WidgetTypeId;\n metadata: {\n hideWidgetHeading: boolean;\n hideWidgetDescription: boolean;\n hideObjectTitle: boolean;\n hideObjectSeries: boolean;\n };\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink;\n widgetVideoList: (widgetId: string, widgetName: string) => Core.AppLink;\n };\n audiences: PresentationAudience[];\n showHighlight?: boolean;\n analyticsData?: HashObject;\n settings: {\n hasTopicDirectories: boolean\n }\n onClickRemoveItem: (videoId: string, videoName: string, widgetId: string, widgetTypeId: WidgetTypeId) => void;\n commonVideoProps: CommonVideoProps;\n}\n\nexport function PopoutThumbnailSlidingListLargeWidgetTemplate(\n props: PopoutThumbnailSlidingListLargeWidgetTemplateProps\n): JSX.Element {\n const widgetConfig = WidgetTypeIdConfig[props.widgetTypeId];\n const videos = WidgetHelper.getVideoContent(props.content);\n\n function onClickRemoveItem(videoId: string, videoName: string): void {\n props.onClickRemoveItem?.(videoId, videoName, props.id, props.widgetTypeId);\n }\n\n return (\n <FixedWidget\n id={props.id}\n name={!props.metadata?.hideWidgetHeading && props.name}\n description={!props.metadata?.hideWidgetDescription && props.description}\n type={WidgetType.LargeRow}\n contents={WidgetContents.Videos}\n collection={videos}\n childComponent={PopoutVideoWidgetItem}\n extraChildComponentProps={{\n presentationAudiences: props.audiences,\n hideTitle: props.metadata?.hideObjectTitle,\n hideSeries: props.metadata?.hideObjectSeries,\n showVideoGuidance: VideoHelper.showVideoGuidance(props.hasPermissions),\n showNewVideoIndicator: props.settings?.hasTopicDirectories,\n onClickRemoveItem: WidgetHelper.showRemoveButton(props.widgetTypeId) && onClickRemoveItem,\n removeButtonTooltip: WidgetHelper.showRemoveButton(props.widgetTypeId)\n ? LanguageService.getPhrase(namespace, 'removeFromWatchHistory')\n : '',\n commonVideoProps: props.commonVideoProps\n }}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n appLink={\n widgetConfig.getCollectionAppLink?.(props.appLinks, props.content)\n ?? props.appLinks?.widgetVideoList?.(props.id, props.name)\n }\n isPreviewing={props.isPreviewing}\n widgetTypeId={props.widgetTypeId}\n />\n );\n}\n","import React from 'react';\n\nimport { PartialFixedWidget, PartialFixedWidgetItemProps } from 'libs/shared/components/widgets/fixed-widget';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nfunction PartialWidgetItem(props: PartialFixedWidgetItemProps): JSX.Element {\n return (\n <div className={`col-${props.colSize} px-1`}>\n <div className={`d-inline-block w-100 partial-loading-background rounded-3`} style={{ paddingBottom: '56.25%' }} />\n <div className='mt-2'>\n <div style={{ height: '1.4rem' }}>\n <div className='partial-loading-background' style={{ height: '1.1rem', width: '70%' }} />\n </div>\n <div className='partial-loading-background' style={{ height: '1.33875rem', width: '80%' }}></div>\n </div>\n </div>\n );\n}\n\nexport function PartialPopoutThumbnailSlidingListSmallWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n return (\n <PartialFixedWidget\n size='sm'\n childComponent={PartialWidgetItem}\n name={props.name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n hideDescription={props.hideDescription}\n hideHeading={props.hideHeading}\n />\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { TimerSvg } from 'libs/shared/images/svg/status/TimerSvg';\n\nimport styles from './subject-stats-badge.module.scss';\n\nexport type ClassificationBadgeType = 'coming-soon' | 'new-topic' | 'new-videos';\n\nconst namespace = 'shared.subjectStatsBadge';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SubjectStatsBadgeProps {\n badgeType: ClassificationBadgeType;\n newVideoCount?: number;\n}\n\nexport function SubjectStatsBadge(props: SubjectStatsBadgeProps): JSX.Element {\n function getBadgeClass(): string {\n const baseClass = `fw-semibold d-inline-block rounded-pill px-2 ${styles.badge}`;\n\n switch (props.badgeType) {\n case 'coming-soon':\n return baseClass + ' bg-light ps-1 d-inline-flex align-items-center';\n case 'new-topic':\n return baseClass + ` ${styles.isNew}`;\n case 'new-videos':\n return baseClass + ` ${styles.newVideos}`;\n default:\n return '';\n }\n }\n\n function getBadgeText(): string {\n switch (props.badgeType) {\n case 'coming-soon':\n return getPhrase('comingSoon');\n case 'new-topic':\n return getPhrase('new');\n case 'new-videos':\n return getPhrase('newVideos', { smartCount: props.newVideoCount });\n default:\n return '';\n }\n }\n\n return (\n <div className={getBadgeClass()}>\n {props.badgeType === 'coming-soon' && (\n <SvgContainer\n svg={TimerSvg}\n className={`svg-container ${styles.icon}`}\n size={SvgContainerSize.ExtraSmall}\n />\n )}\n\n {getBadgeText()}\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { PopoutVideoWidgetItem } from 'libs/shared/components/widgets/items/popout-video-widget-item/PopoutVideoWidgetItem';\nimport { WidgetTypeIdConfig } from 'libs/shared/constants/WidgetTypeIdConfig';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Classification, PresentationAudience, Video, VideoWidgetTemplateContent, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport { SubjectStatsBadge } from '../../../items/subject-stats-widget-item/subject-stats-badge/SubjectStatsBadge';\n\nconst namespace = 'widgets.popoutThumbnailSlidingListSmall';\n\nfunction VideoCountBadge(props: PopoutThumbnailSlidingListSmallWidgetTemplateProps): JSX.Element {\n if (\n props.isTertiaryCustomerWithoutExchange ||\n props.widgetTypeId !== WidgetTypeId.ClassificationLatestReleasedVideosV2 ||\n !props.classification\n ) {\n return <></>;\n }\n\n const { childDashboardNewVideoCount } = TopicsHelper.getCounts(props.classification);\n\n if (!childDashboardNewVideoCount)\n return <></>;\n\n return (\n <div className='ms-2'>\n <SubjectStatsBadge badgeType='new-videos' newVideoCount={childDashboardNewVideoCount} />\n </div>\n );\n}\n\nexport interface PopoutThumbnailSlidingListSmallWidgetTemplateProps {\n id: string\n name: string;\n widgetTypeId: WidgetTypeId;\n description: string;\n content: VideoWidgetTemplateContent;\n appLinks: {\n widgetVideoList: (widgetId: string, widgetName: string) => Core.AppLink;\n watchHistory: () => Core.AppLink;\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink;\n };\n metadata: {\n hideWidgetHeading: boolean;\n hideWidgetDescription: boolean;\n hideObjectTitle: boolean;\n hideObjectSeries: boolean;\n }\n audiences: PresentationAudience[];\n hasPermissions: HasPermissionsFunc;\n preventPopout?: boolean;\n classification: Classification;\n showHighlight?: boolean;\n analyticsData?: HashObject;\n isTertiaryCustomerWithoutExchange?: boolean;\n onClickRemoveItem: (videoId: string, videoName: string, widgetId: string, widgetTypeId: WidgetTypeId) => void;\n \n isPreviewing: boolean;\n\n settings: {\n hasTopicDirectories: boolean\n }\n\n commonVideoProps: CommonVideoProps;\n}\n\nexport function PopoutThumbnailSlidingListSmallWidgetTemplate(\n props: PopoutThumbnailSlidingListSmallWidgetTemplateProps\n): JSX.Element {\n const widgetConfig = WidgetTypeIdConfig[props.widgetTypeId];\n const videos = WidgetHelper.getVideoContent(props.content);\n\n function onClickRemoveItem(videoId: string, videoName: string): void {\n props.onClickRemoveItem?.(videoId, videoName, props.id, props.widgetTypeId);\n }\n\n return (\n <FixedWidget\n id={props.id}\n name={!props.metadata?.hideWidgetHeading && props.name}\n description={!props.metadata?.hideWidgetDescription && props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Videos}\n collection={videos}\n childComponent={PopoutVideoWidgetItem}\n extraChildComponentProps={{\n presentationAudiences: props.audiences,\n hideTitle: props.metadata?.hideObjectTitle,\n hideSeries: props.metadata?.hideObjectSeries,\n showVideoGuidance: VideoHelper.showVideoGuidance(props.hasPermissions),\n preventPopout: props.preventPopout,\n showNewVideoIndicator: props.settings?.hasTopicDirectories,\n onClickRemoveItem: WidgetHelper.showRemoveButton(props.widgetTypeId) && onClickRemoveItem,\n removeButtonTooltip: WidgetHelper.showRemoveButton(props.widgetTypeId)\n ? LanguageService.getPhrase(namespace, 'removeFromWatchHistory')\n : '',\n commonVideoProps: props.commonVideoProps\n }}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n appLink={\n widgetConfig.getCollectionAppLink?.(props.appLinks, props.content)\n ?? props.appLinks?.widgetVideoList?.(props.id, props.name)\n }\n isPreviewing={props.isPreviewing}\n widgetTypeId={props.widgetTypeId}\n headingBadgeComponent={<VideoCountBadge {...props} />}\n />\n );\n}\n","import * as React from 'react';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nimport { PartialWidgetTemplateProps } from '../../curated-widgets/WidgetProps';\n\nimport styles from './series-widget-item.module.scss';\n\nfunction useGetCount(): number {\n const breakpoints = useBreakpoints();\n\n if (breakpoints.xs)\n return 2;\n\n if (breakpoints.sm)\n return 3;\n\n return 4;\n}\n\nexport const PartialSeriesList = (props: PartialWidgetTemplateProps) => {\n const items = useGetCount();\n\n return (\n <>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\n <div className='row mb-n2'>\n {[...Array(items)].map((s, idx) => (\n <div key={idx} className='col-6 col-sm-4 col-md-3 col-lg-3 pb-2'>\n <div className={`${styles.partialLoading} partial-loading-background rounded-3`} />\n </div>\n ))}\n </div>\n </>\n );\n};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SeriesTallPoster } from 'libs/shared/components/series-tall-poster/SeriesTallPoster';\nimport { PresentationAudience, Series } from 'libs/shared/interfaces';\n\nimport { WidgetHeader } from '../../components/header/WidgetHeader';\n\nexport interface PosterFixedListLargeWidgetTemplateProps {\n name: string;\n description: string;\n content: Series[];\n audiences: PresentationAudience[];\n appLinks: {\n series: (series: Series) => Core.AppLink;\n }\n analyticsData: HashObject;\n badgeComponent: JSX.Element;\n seeMoreLink: Core.AppLink;\n}\n\nexport function PosterFixedListLargeWidgetTemplate(\n props: PosterFixedListLargeWidgetTemplateProps\n): JSX.Element {\n return (\n <>\n <WidgetHeader\n name={props.name}\n description={props.description}\n showSeeMoreLink={!!props.seeMoreLink}\n appLink={props.seeMoreLink}\n badgeComponent={props.badgeComponent}\n />\n <ul className='list-unstyled mx-n1 mb-n2 row'>\n {props.content.map(s => {\n return (\n <li key={s.id} className='px-1 col-lg-3 col-md-4 col-sm-6 col-xs-12'>\n <AppLink\n appLink={props.appLinks.series(s)}\n className='d-block mb-2'\n analyticsData={{\n ...props.analyticsData,\n id: s.id,\n name: s.name\n }}\n analyticsOptions={{\n entity: EntityType.Series,\n actionType: UserAction.Click,\n descriptor: ClickDescriptor.TallPoster,\n location: LocationContext.PosterFixedListLargeWidget\n }}\n >\n <SeriesTallPoster\n series={s}\n presentationAudiences={props.audiences}\n preloadImage={false}\n />\n </AppLink>\n </li>\n );\n })}\n </ul>\n </>\n );\n}","import * as React from 'react';\n\nimport { ClickDescriptor, EntityType, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SeriesTallPoster } from 'libs/shared/components/series-tall-poster/SeriesTallPoster';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { PresentationAudience, Series } from 'libs/shared/interfaces';\n\nimport styles from './series-widget-item.module.scss';\n\nexport interface SeriesWidgetItemProps extends FixedWidgetItemProps<Series> {\n audiences: PresentationAudience[];\n isSmall?: boolean;\n hasTableOfContents?: boolean;\n}\n\nexport function SeriesWidgetItem(props: SeriesWidgetItemProps): JSX.Element {\n const { data: series } = props;\n\n /**\n * Subject audiences currently take render precedence over rating.\n * \n * This means that until we properly add productionCompanies to series, we\n * should expect only CV series to have a subject audience. Any TV series\n * from the Exchange should only have a rating. \n */\n\n const analyticsData = {\n ...props.analyticsData,\n id: series?.id,\n name: series?.name\n };\n\n const analyticsOptions = {\n ...props.analyticsOptions,\n actionType: UserAction.Click,\n entity: EntityType.Series,\n descriptor: ClickDescriptor.TallPoster\n };\n\n return (\n <AppLink\n key={series.id}\n appLink={props.getAppLink(series)}\n className={`position-relative px-1 flex-shrink-0 ${props.isSmall ? styles.smallSeriesItem : styles.largeSeriesItem} `}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <SeriesTallPoster\n series={series}\n presentationAudiences={props.audiences}\n preloadImage={props.preloadImage}\n isSmall={props.isSmall}\n hasTableOfContents={props.hasTableOfContents}\n />\n </AppLink>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { SeriesWidgetItem } from 'libs/shared/components/widgets/items/series-widget-item';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { PresentationAudience, Series, Video, WidgetType } from 'libs/shared/interfaces';\n\nexport interface PosterSlidingListLargeWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Video[];\n audiences: PresentationAudience[];\n hasTableOfContents: boolean;\n appLinks: {\n series: (series: Series) => Core.AppLink;\n }\n showHighlight?: boolean;\n analyticsData?: HashObject;\n badgeComponent: JSX.Element;\n seeMoreLink: Core.AppLink;\n}\n\nexport function PosterSlidingListLargeWidgetTemplate(\n props: PosterSlidingListLargeWidgetTemplateProps\n): JSX.Element {\n return (\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Series}\n collection={props.content}\n childComponent={SeriesWidgetItem}\n extraChildComponentProps={{ audiences: props.audiences, hasTableOfContents: props.hasTableOfContents }}\n getChildAppLink={(item: Series) => props.appLinks?.series?.(item)}\n appLink={props.seeMoreLink}\n showSeeMoreLink={!!props.seeMoreLink}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n headingBadgeComponent={props.badgeComponent}\n />\n );\n}","import React from 'react';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { WidgetType } from 'libs/shared/interfaces';\n\nimport styles from './tall-subject-widget-item.module.scss';\n\nfunction useGetItemCount(type: WidgetType): number {\n const breakpoints = useBreakpoints();\n\n if (breakpoints.xs)\n return 2;\n\n if (breakpoints.sm)\n return 3;\n\n if (breakpoints.md)\n return 4;\n\n if (breakpoints.lg || type === WidgetType.LargeRow)\n return 5;\n\n return 6;\n}\n\nconst PartialLoadingItem = (props: PartialTallSubjectWidgetProps) => (\n <div className={`${props.type === WidgetType.Row ? styles.slidingSubjectSmall : styles.slidingSubjectLarge} px-1`}>\n <div className={`${styles.partialLoading} partial-loading-background rounded-3`} />\n </div>\n);\n\ninterface PartialTallSubjectWidgetProps {\n type: WidgetType;\n}\n\nexport function PartialTallSubjectWidget(props: PartialTallSubjectWidgetProps): JSX.Element {\n const itemCount = useGetItemCount(props.type);\n\n const items = [];\n for (let i = 0; i < itemCount; i++) {\n items.push(<PartialLoadingItem key={i} type={props.type} />);\n }\n\n return (\n <div className='pb-3'>\n <PartialWidgetHeader />\n <div className='row g-0 mx-n1'>\n {items}\n </div>\n </div>\n );\n}","import * as React from 'react';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, UserAction } from 'libs/analytics/interfaces';\n\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { Classification, PresentationAudience, WidgetType } from 'libs/shared/interfaces';\n\nimport styles from './tall-subject-widget-item.module.scss';\n\nexport interface TallSubjectWidgetItemProps extends FixedWidgetItemProps<Classification> {\n audiences: PresentationAudience[];\n}\n\nexport function TallSubjectWidgetItem(props: TallSubjectWidgetItemProps): JSX.Element {\n const { data, preloadImage } = props;\n\n const analyticsOptions: AnalyticsOptions = {\n ...props.analyticsOptions,\n entity: EntityType.Classification,\n actionType: UserAction.Click,\n descriptor: ClickDescriptor.TallPoster\n };\n\n function getClassName(): string {\n let className = styles.posterContainer;\n\n if (props.context.type === WidgetType.Row)\n className += ` ${styles.slidingSubjectSmall}`;\n else\n className += ` ${styles.slidingSubjectLarge}`;\n\n return className;\n }\n\n return (\n <div className={getClassName()}>\n <BaseImage\n data={data.tallPoster}\n alt={data.name}\n appLink={props.getAppLink(data)}\n imageType={ImageType.TallPosters}\n preload={preloadImage}\n imageOptions={{ size: ImageSize.Medium }}\n imageClassName='rounded-3'\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <ImageFallback type={ImageFallbackType.TallSubject} />\n <h3 className={`px-2 ${styles.heading}`}>{data.name}</h3>\n </BaseImage>\n </div>\n );\n}","import React from 'react';\n\nimport { PartialTallSubjectWidget } from 'libs/shared/components/widgets/items/tall-subject-widget-item';\nimport { WidgetType } from 'libs/shared/interfaces';\n\nexport function PartialPosterSlidingListMediumWidgetTemplate(): JSX.Element {\n return <PartialTallSubjectWidget type={WidgetType.LargeRow} />;\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { TallSubjectWidgetItem } from 'libs/shared/components/widgets/items/tall-subject-widget-item';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Classification, Video, WidgetType } from 'libs/shared/interfaces';\n\nexport interface PosterSlidingListMediumWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Video[];\n analyticsData?: HashObject;\n \n showHighlight?: boolean;\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink;\n }\n}\n\nexport function PosterSlidingListMediumWidgetTemplate(props: PosterSlidingListMediumWidgetTemplateProps): JSX.Element {\n return (\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.LargeRow}\n contents={WidgetContents.Subjects}\n collection={props.content}\n childComponent={TallSubjectWidgetItem}\n getChildAppLink={(item: Classification) => props.appLinks?.classification?.(item)}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n />\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { TallSubjectWidgetItem } from 'libs/shared/components/widgets/items/tall-subject-widget-item/TallSubjectWidgetItem';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Classification, CuratedDashboardAppLink, Presentation, PresentationAudience, WidgetType } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nconst EXPLORE_ALL_TOPICS_ID = 'explore-all-topics';\n\nfunction getExtraItem(props: ClassificationPosterSlidingListSmallWidgetTemplateProps) {\n if (props.metadata?.text || props.metadata?.imageId)\n return {\n id: props.metadata?.appLink === CuratedDashboardAppLink.ExploreAllTopics ? EXPLORE_ALL_TOPICS_ID : '',\n name: props.metadata?.text,\n tallPoster: {\n url: props.metadata?.imageId\n ? ImageHelper.getUrlById(props.imageCdnUrl, ImageType.TallPosters, props.metadata.imageId, ImageSize.Medium)\n : ''\n }\n };\n}\n\nexport interface ClassificationPosterSlidingListSmallWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n imageCdnUrl: string;\n audiences: PresentationAudience[];\n content: Classification[];\n metadata: {\n imageId: string;\n text: string;\n appLink: CuratedDashboardAppLink;\n }\n presentation: Presentation;\n appLinks: {\n latestReleases: () => Core.AppLink;\n allTopics: (presentationId?: string) => Core.AppLink;\n classification: (classification: Classification | null) => Core.AppLink;\n }\n analyticsData?: HashObject;\n \n showHighlight?: boolean;\n}\n\nexport function ClassificationPosterSlidingListSmallWidgetTemplate(\n props: ClassificationPosterSlidingListSmallWidgetTemplateProps\n): JSX.Element {\n const extraContent = getExtraItem(props);\n\n const widgetAppLink = WidgetHelper.getCustomAppLink(props);\n\n return (\n <div>\n <FixedWidget\n id={props.id}\n name={props.name}\n appLink={widgetAppLink}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Subjects}\n collection={extraContent ? [ extraContent, ...props.content ] : props.content}\n childComponent={TallSubjectWidgetItem}\n extraChildComponentProps={{ audiences: props.audiences }}\n getChildAppLink={(item: Classification) => {\n if (!item.id)\n return null;\n\n if (item.id === EXPLORE_ALL_TOPICS_ID)\n return props.appLinks?.allTopics?.(props.presentation.id);\n\n return props.appLinks?.classification?.(item);\n }}\n analyticsData={props.analyticsData}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n />\n </div>\n );\n}","import React from 'react';\n\nimport { PartialTallSubjectWidget } from 'libs/shared/components/widgets/items/tall-subject-widget-item';\nimport { WidgetType } from 'libs/shared/interfaces';\n\nexport function PartialPosterSlidingListSmallWidgetTemplate(): JSX.Element {\n return <PartialTallSubjectWidget type={WidgetType.Row} />;\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { HashObject } from 'libs/analytics/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { SeriesWidgetItem } from 'libs/shared/components/widgets/items/series-widget-item';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { PresentationAudience, Series, WidgetType } from 'libs/shared/interfaces';\n\nexport interface SeriesPosterSlidingListSmallWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Series[];\n audiences: PresentationAudience[];\n appLinks: {\n series: (series: Series) => Core.AppLink;\n }\n analyticsData?: HashObject;\n \n showHighlight?: boolean;\n}\n\nexport function SeriesPosterSlidingListSmallWidgetTemplate(\n props: SeriesPosterSlidingListSmallWidgetTemplateProps\n): JSX.Element {\n return (\n <div>\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.SmallSeries}\n collection={props.content}\n childComponent={SeriesWidgetItem}\n extraChildComponentProps={{ audiences: props.audiences, isSmall: true }}\n getChildAppLink={props.appLinks?.series}\n analyticsData={props.analyticsData}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n />\n </div>\n );\n}","import React from 'react';\n\nimport styles from '../question-widget-template.module.scss';\n\nexport function PartialQuestionWidgetTemplate(): JSX.Element {\n return (\n <div className={`${styles.partialQuestion} rounded-3`}>\n <div className='mb-2 partial-loading-background' style={{ height: '1.5rem', width: '75%' }}>\n </div>\n\n <div className='partial-loading-background' style={{ height: '1.2rem', width: '100%' }}>\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { useIsComponentMounted } from 'libs/shared/hooks/UseIsComponentMounted';\nimport { useResizeListener } from 'libs/shared/hooks/UseResizeListener';\nimport { MinusSvg } from 'libs/shared/images/svg/actions/MinusSvg';\nimport { PlusSvg } from 'libs/shared/images/svg/actions/PlusSvg';\nimport { TopicFaqHelper } from 'libs/shared/utils/topic-faq-helper/TopicFaqHelper';\n\nimport styles from './expandable-question.module.scss';\n\nconst DEFAULT_HEIGHT = '1.2rem';\n\n// If you change the transition time here, please also update the transition time in the SCSS file\nconst TRANSITION_TIME = 500; // ms\n\ninterface ExpandableQuestionProps {\n id: string;\n question: string;\n answer: string;\n isBot?: boolean;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\nexport function ExpandableQuestion(props: ExpandableQuestionProps): JSX.Element {\n // Answer should be expanded for anon by default so Google can read it.\n const [ isExpanded, setIsExpanded ] = useViewModel(`should:expand:${props.id}`, props.isBot, {\n storage: StorageType.LocalStorage\n });\n\n const [ height, setHeight ] = React.useState(isExpanded ? '100%' : DEFAULT_HEIGHT);\n const [ shouldClamp, setShouldClamp ] = React.useState<boolean>(!isExpanded);\n\n const [ markdown, setMarkdown ] = React.useState<string | null>(null);\n const isMounted = useIsComponentMounted();\n\n const timeoutRef = React.useRef<number | null>(null);\n const invisibleRef = React.useRef<HTMLDivElement>(null);\n const visibleRef = React.useRef<HTMLParagraphElement>(null);\n\n function onToggleExpander(e: React.MouseEvent<HTMLElement>): void {\n if (TopicFaqHelper.isLink(e.target as HTMLElement))\n return;\n\n // Don't toggle if the user is highlighting text\n if (window.getSelection().toString().length !== 0)\n return;\n\n AnalyticsHelper.logUserAction({\n ...props.analyticsData,\n question: props.question,\n answer: props.answer\n }, {\n ...props.analyticsOptions,\n entity: EntityType.Faq,\n actionType: UserAction.Click,\n descriptor: isExpanded ? ClickDescriptor.Collapse : ClickDescriptor.Expand,\n location: LocationContext.FaqQuestionWidget\n });\n\n isExpanded ? collapse() : expand();\n }\n\n function expand(): void {\n setExpandedHeight();\n setIsExpanded(true);\n\n window.clearTimeout(timeoutRef.current);\n setShouldClamp(false);\n }\n\n function collapse(): void {\n setHeight(DEFAULT_HEIGHT);\n setIsExpanded(false);\n\n timeoutRef.current = window.setTimeout(() => {\n setShouldClamp(true);\n }, TRANSITION_TIME);\n }\n\n function setExpandedHeight(): void {\n const fakeEl = document.createElement('p');\n fakeEl.innerHTML = markdown;\n fakeEl.style.visibility = 'hidden';\n invisibleRef.current.appendChild(fakeEl);\n\n setHeight(`${fakeEl.clientHeight}px`);\n invisibleRef.current.removeChild(fakeEl);\n }\n\n React.useEffect(() => {\n async function update() {\n const newMarkdown = await TopicFaqHelper.parse(props.answer, { focusableLinks: isExpanded });\n\n if (!isMounted.current)\n return;\n \n // Set initial state\n if (markdown === null) {\n setMarkdown(newMarkdown);\n return;\n }\n \n // Don't update if unchanged\n if (markdown === newMarkdown)\n return;\n \n // Collapse if expanded and the content has changed, so that the height can be recalculated\n if (markdown && isExpanded)\n collapse();\n \n setMarkdown(newMarkdown);\n }\n\n update();\n }, [props.answer]);\n\n React.useEffect(() => {\n if (height !== '100%' || !visibleRef.current)\n return;\n\n setHeight(visibleRef.current.clientHeight + 'px');\n }, [height]);\n\n useResizeListener(() => {\n if (isExpanded)\n collapse();\n }, null, [isExpanded]);\n\n if (!props.question || !markdown)\n return <></>;\n\n return (\n <DivButton className={`${styles.question} rounded-3`} onClick={onToggleExpander}>\n <div className='pb-2'>\n <div className='float-end rounded-circle bg-white'>\n <SvgContainer svg={isExpanded ? MinusSvg : PlusSvg} />\n </div>\n\n <h2 className='h4 mb-0 clear-end'>{props.question}</h2>\n </div>\n\n <div\n className={styles.description}\n style={{ height }}\n >\n <p\n className={`mb-0 ${shouldClamp ? 'clamp-1' : ''} ${TopicFaqHelper.getContainerClass()}`}\n dangerouslySetInnerHTML={{ __html: markdown }}\n ref={visibleRef}\n >\n </p>\n\n <div ref={invisibleRef} />\n </div>\n </DivButton>\n );\n}","import React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ExpandableQuestion } from 'libs/shared/components/expandable-question/ExpandableQuestion';\nimport { Faq } from 'libs/shared/interfaces';\n\nexport interface QuestionWidgetTemplateProps {\n id: string;\n content: Faq[];\n isBot: boolean;\n analyticsData?: HashObject;\n \n}\n\nexport function QuestionWidgetTemplate(props: QuestionWidgetTemplateProps): JSX.Element {\n const { question, answer } = ArrayHelper.first(props.content);\n\n return (\n <ExpandableQuestion\n id={props.id}\n answer={answer}\n question={question}\n isBot={props.isBot}\n analyticsData={props.analyticsData}\n />\n );\n}","import React from 'react';\n\nimport styles from '../question-accordion-widget-template.module.scss';\n\nfunction PartialQuestion(): JSX.Element {\n return (\n <div className={`${styles.partialQuestion} ${styles.padding} rounded-2 mb-2`}>\n <div className='partial-loading-background' style={{ height: '1.5rem', width: '75%' }}>\n </div>\n </div>\n );\n}\n\nexport function PartialQuestionAccordionWidgetTemplate(): JSX.Element {\n return (\n <>\n <div className='partial-loading-background mb-2' style={{ height: '2rem', width: '30%' }} />\n\n <div className='mb-n2'>\n <PartialQuestion />\n <PartialQuestion />\n <PartialQuestion />\n </div>\n </>\n );\n}","import * as React from 'react';\n\nimport { usePageMetadataContext } from 'libs/common/react/context/PageMetadataContext';\n\nimport { Faq } from 'libs/shared/interfaces';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\ninterface UseFaqJsonLdProps {\n faqs: Faq[];\n widgetName?: string;\n}\n\nexport function useFaqJsonLd(props: UseFaqJsonLdProps): void {\n const metadataContext = usePageMetadataContext();\n\n React.useEffect(() => {\n if (!props.faqs?.length || !metadataContext.hasProvider)\n return;\n\n async function generateFaqJsonLd() {\n // Create FAQ JSON-LD structure using PageMetadataHelper\n const faqJsonLd = await PageMetadataHelper.buildFaqJsonLd(props.faqs, props.widgetName);\n\n // Add FAQ JSON-LD to the page metadata\n metadataContext.setFaq(faqJsonLd);\n }\n\n generateFaqJsonLd();\n }, [ props.faqs, props.widgetName, metadataContext.hasProvider ]);\n}","import React from 'react';\n\nimport { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { useFaqJsonLd } from 'libs/shared/hooks/useFaqJsonLd';\nimport { useIsComponentMounted } from 'libs/shared/hooks/UseIsComponentMounted';\nimport { useResizeListener } from 'libs/shared/hooks/UseResizeListener';\nimport { MinusSvg } from 'libs/shared/images/svg/actions/MinusSvg';\nimport { PlusSvg } from 'libs/shared/images/svg/actions/PlusSvg';\nimport { Faq } from 'libs/shared/interfaces';\nimport { TopicFaqHelper } from 'libs/shared/utils/topic-faq-helper/TopicFaqHelper';\n\nimport styles from './question-accordion-widget-template.module.scss';\n\nconst DEFAULT_HEIGHT = '0px';\n\ninterface QuestionProps {\n id: string;\n faq: Faq;\n index: number;\n analyticsData?: HashObject;\n \n isBot: boolean;\n}\n\nfunction Question(props: QuestionProps): JSX.Element {\n // Answer should be expanded for anon by default so Google can read it.\n const [ isExpanded, setIsExpanded ] = useViewModel(`should:expand:${props.id}`, props.isBot, {\n storage: StorageType.LocalStorage\n });\n\n const [ height, setHeight ] = React.useState(isExpanded ? '100%' : DEFAULT_HEIGHT);\n const [ markdown, setMarkdown ] = React.useState<string | null>(null);\n\n const invisibleRef = React.useRef<HTMLParagraphElement>(null);\n const visibleRef = React.useRef<HTMLParagraphElement>(null);\n const isMounted = useIsComponentMounted();\n\n function onToggleExpander(e: React.MouseEvent<HTMLElement>): void {\n if (TopicFaqHelper.isLink(e.target as HTMLElement))\n return;\n\n // Don't toggle if the user is highlighting text\n if (window.getSelection().toString().length !== 0)\n return;\n\n AnalyticsHelper.logUserAction({\n ...props.analyticsData,\n ...props.faq,\n questionIndex: props.index\n }, {\n entity: EntityType.Faq,\n actionType: UserAction.Click,\n descriptor: isExpanded ? ClickDescriptor.Collapse : ClickDescriptor.Expand,\n location: LocationContext.FaqQuestionAccordionWidget\n });\n\n isExpanded ? collapse() : expand();\n }\n\n async function expand(): Promise<void> {\n setExpandedHeight();\n setIsExpanded(true);\n\n const newMarkdown = await TopicFaqHelper.parse(props.faq?.answer, { focusableLinks: true });\n\n if (!isMounted.current)\n return;\n\n setMarkdown(newMarkdown);\n }\n\n async function collapse(): Promise<void> {\n setHeight(DEFAULT_HEIGHT);\n setIsExpanded(false);\n\n const newMarkdown = await TopicFaqHelper.parse(props.faq?.answer, { focusableLinks: false });\n\n if (!isMounted.current)\n return;\n\n setMarkdown(newMarkdown);\n }\n\n function setExpandedHeight(): void {\n const fakeEl = document.createElement('p');\n fakeEl.innerHTML = markdown;\n fakeEl.style.visibility = 'hidden';\n fakeEl.classList.add('py-1');\n invisibleRef.current.appendChild(fakeEl);\n\n // 10px is subtracted as this is the padding of the description\n setHeight(`${fakeEl.clientHeight - 10}px`);\n invisibleRef.current.removeChild(fakeEl);\n }\n\n React.useEffect(() => {\n async function onUpdateMarkdown() {\n const newMarkdown = await TopicFaqHelper.parse(props.faq?.answer, { focusableLinks: isExpanded });\n\n if (!isMounted.current)\n return;\n\n setMarkdown(newMarkdown);\n\n if (isExpanded)\n setExpandedHeight();\n }\n\n onUpdateMarkdown();\n }, [props.faq?.answer]);\n\n // When we resize, we want to recalculate the height of the expanded content\n useResizeListener(() => {\n if (isExpanded)\n collapse();\n }, null, [isExpanded]);\n\n if (!props.faq?.question || !props.faq?.answer)\n return <></>;\n\n const questionId = `question-${props.id}`;\n const panelId = `answer-${props.id}`;\n\n return (\n <DivButton\n onClick={onToggleExpander}\n aria-expanded={isExpanded}\n aria-controls={panelId}\n className={`${styles.question} rounded-2`}\n >\n <div className={`d-flex align-items-center ${styles.padding}`}>\n <div className='rounded-circle bg-white me-2'>\n <SvgContainer svg={isExpanded ? MinusSvg : PlusSvg} />\n </div>\n \n <h3 className='mb-0 font-size-normal fw-normal' id={questionId}>{props.faq.question}</h3>\n </div>\n\n <div\n className={`${styles.description}`}\n style={{ height }}\n id={panelId}\n aria-labelledby={questionId}\n aria-live='polite'\n aria-hidden={!isExpanded}\n >\n <p\n className={`mb-0 py-1 ${TopicFaqHelper.getContainerClass()}`}\n dangerouslySetInnerHTML={{ __html: markdown }}\n ref={visibleRef}\n >\n </p>\n \n <div ref={invisibleRef} aria-hidden={true} className={TopicFaqHelper.getContainerClass()} />\n </div>\n </DivButton>\n );\n}\n\nexport interface QuestionAccordionWidgetTemplateProps {\n id: string;\n name: string;\n content: Faq[];\n isBot: boolean;\n analyticsData?: HashObject;\n \n}\n\nexport function QuestionAccordionWidgetTemplate(props: QuestionAccordionWidgetTemplateProps): JSX.Element {\n useFaqJsonLd({\n faqs: props.content,\n widgetName: props.name\n });\n\n if (!props.content.length)\n return <></>;\n\n return (\n <>\n <h2 className='curated-widget-heading'>\n {props.name}\n </h2>\n\n <ul className='list-unstyled mb-n2'>\n {props.content.map((faq, index) => {\n return (\n <li className='mb-2' key={index}>\n <Question\n key={index}\n id={`${props.id}:${index}`}\n faq={faq}\n index={index}\n analyticsData={props.analyticsData}\n isBot={props.isBot}\n />\n </li>\n );\n })}\n </ul>\n </>\n );\n}","import React from 'react';\n\nexport function PartialSearchSuggestionsBlurbWidgetTemplate(): JSX.Element {\n return (\n <div className='d-flex flex-row gap-1'>\n <div className='partial-loading-background' style={{ width: '12rem', height: '1.25rem' }}></div>\n <div className='partial-loading-background' style={{ width: '3rem', height: '1.25rem' }}></div>\n <div className='partial-loading-background' style={{ width: '1rem', height: '1.25rem' }}></div>\n <div className='partial-loading-background' style={{ width: '4rem', height: '1.25rem' }}></div>\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { BaseObject } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.searchSuggestionsBlurbWidgetTemplate';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst DEFAULT_LENGTH = 2;\n\nexport interface SearchSuggestionsBlurbWidgetTemplateProps {\n name: string;\n content: BaseObject[];\n widgetTypeId: WidgetTypeId;\n appLinks: {\n searchHome: (queryParams: HashObject, options: {replace: boolean}) => Core.AppLink;\n }\n}\n\ninterface SearchSuggestionQueryItemProps {\n appLink: Core.AppLink;\n name: string;\n}\n\nfunction SearchSuggestionQueryItem(props: SearchSuggestionQueryItemProps) {\n return (\n <>\n "\n <AppLink appLink={props.appLink} appLinkOptions={{\n replace: true\n }}>\n <span className='text-info hover-text-underline cursor-pointer'>{props.name}</span>\n </AppLink>\n "\n </>\n );\n}\n\nexport function SearchSuggestionsBlurbWidgetTemplate(props: SearchSuggestionsBlurbWidgetTemplateProps): JSX.Element {\n const suggestions = props.content.splice(0, DEFAULT_LENGTH);\n \n if (!suggestions.length)\n return <></>;\n \n return (\n <div className='rounded-2'>\n <Text phrase='prompt' namespace={namespace} /> \n {suggestions.map((item, index) => {\n const lastItem = suggestions.length - 1 === index;\n\n return (\n <React.Fragment key={item.name}>\n <SearchSuggestionQueryItem\n appLink={props.appLinks.searchHome({ query: item.name }, { replace: true }) }\n name={item.name}\n />\n {!lastItem ? <> {getPhrase('or')} </> : '?'}\n </React.Fragment>\n );\n })}\n </div>\n );\n}","import React from 'react';\n\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\n\nimport styles from '../subject-stats-widget-item.module.scss';\n\nexport function PartialSubjectStatsWidgetItem(): JSX.Element {\n return (\n <div className={`d-flex`}>\n <div className={`${styles.cover} me-2 rounded overflow-hidden border rounded d-inline-block`}>\n <div className={styles.partialIcon}>\n <ImageFallback type={ImageFallbackType.Subject} />\n </div>\n </div>\n <div className='d-inline-block' style={{ flexBasis: '50%' }}>\n <div className='partial-loading-background mt-1' style={{ height: '19px', width: '100%' }} />\n <div className='partial-loading-background mt-1' style={{ height: '16.5px', width: '75%' }} />\n </div>\n </div>\n );\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { PartialSubjectStatsWidgetItem } from 'libs/shared/components/widgets/items/subject-stats-widget-item/partial-loading/PartialSubjectStatsWidgetItem';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nexport function PartialStatsCoverFixedPillListLargeWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n return (\n <div className='py-2'>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\n <Row className='g-0'>\n {Array(6).fill(null).map((_, i) => {\n return (\n <Col key={i} xs={12} sm={6} lg={4}>\n <div className={`position-relative mb-2`}>\n <PartialSubjectStatsWidgetItem />\n </div>\n </Col>\n );\n })}\n </Row>\n </div>\n );\n}","import React from 'react';\n\nexport function BellFilledSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M10.33 5.26c-1.023.373-1.72 1.155-2.158 2.369-.466 1.29-.655 3.104-.67 5.533-.002.112-.038.22-.102.305L5.08 16.56A.9.9 0 0 0 5.8 18h3.306q.049.13.112.251c.13.255.32.53.566.784.493.51 1.241.965 2.216.965s1.723-.455 2.216-.965c.246-.255.436-.53.566-.784a3 3 0 0 0 .112-.251H18.2a.9.9 0 0 0 .72-1.44l-2.32-3.093a.5.5 0 0 1-.101-.305c-.018-2.27-.214-4.07-.695-5.392-.447-1.232-1.157-2.09-2.211-2.498a1.8 1.8 0 0 0-.352-.722c-.28-.34-.7-.55-1.24-.55s-.965.208-1.261.53a1.9 1.9 0 0 0-.41.73M13.77 18a2.4 2.4 0 0 1-.274.34c-.353.365-.855.66-1.497.66s-1.144-.295-1.497-.66a2.4 2.4 0 0 1-.274-.34z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function BellSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M8.172 7.629c.438-1.214 1.135-1.996 2.157-2.369a1.9 1.9 0 0 1 .41-.73C11.037 4.208 11.462 4 12 4c.542 0 .96.21 1.241.55.182.22.291.474.352.722 1.054.409 1.764 1.266 2.211 2.498.48 1.323.677 3.122.695 5.392 0 .112.037.22.101.305l2.32 3.093A.9.9 0 0 1 18.2 18h-3.306a3 3 0 0 1-.112.251c-.13.255-.32.53-.566.784-.493.51-1.241.965-2.216.965s-1.723-.455-2.216-.965a3.3 3.3 0 0 1-.566-.784A3 3 0 0 1 9.106 18H5.8a.9.9 0 0 1-.72-1.44l2.32-3.093a.5.5 0 0 0 .101-.305c.016-2.429.205-4.243.67-5.533M18 17l-2.2-2.933a1.5 1.5 0 0 1-.301-.898c-.017-2.241-.215-3.9-.635-5.058-.411-1.134-1.016-1.738-1.854-1.981A3.6 3.6 0 0 0 12 6a4.2 4.2 0 0 0-1.115.132c-.809.223-1.381.752-1.773 1.836-.404 1.12-.595 2.79-.61 5.2-.003.321-.106.638-.302.899L6 17zm-7.771 1c.074.112.166.228.274.34.353.365.855.66 1.497.66s1.144-.295 1.497-.66c.108-.112.2-.228.274-.34z'\n />\n </svg>\n );\n}\n","import * as React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { BellFilledSvg } from 'libs/shared/images/svg/objects/BellFilledSvg';\nimport { BellSvg } from 'libs/shared/images/svg/objects/BellSvg';\nimport { Classification } from 'libs/shared/interfaces';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nimport { ClassificationBadgeType, SubjectStatsBadge } from './subject-stats-badge/SubjectStatsBadge';\n\nimport styles from './subject-stats-widget-item.module.scss';\n\nconst namespace = 'shared.subjectStatsWidgetItem';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SubjectStatsWidgetItemProps {\n classification: Classification;\n getAppLink: (classification: Classification) => Core.AppLink;\n onToggleFollowClassification: (classification: Classification, location: LocationContext) => void;\n canFollowTopics: boolean;\n hideCounts: boolean;\n\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\nexport function SubjectStatsWidgetItem(props: SubjectStatsWidgetItemProps): JSX.Element {\n const [ hasLoadedImage, setHasLoadedImage ] = React.useState(false);\n const isComingSoon = props.classification?.status === ClassificationStatus.ComingSoon;\n const isFollowing = TopicsHelper.isFollowing(props.classification);\n\n const {\n dashboardNewVideosCount,\n childDashboardNewVideoCount,\n dashboardResourceCount,\n childDashboardResourceCount,\n dashboardVideoCount,\n childDashboardVideoCount,\n childClassificationCount\n } = TopicsHelper.getCounts(props.classification);\n\n const videoCount = dashboardVideoCount + childDashboardVideoCount;\n const resourceCount = dashboardResourceCount + childDashboardResourceCount;\n const newVideoCount = dashboardNewVideosCount + childDashboardNewVideoCount;\n\n function onToggleFollowClassification(e: React.MouseEvent<HTMLDivElement>): void {\n e.stopPropagation();\n e.preventDefault();\n\n if (!props.canFollowTopics)\n return;\n\n props.onToggleFollowClassification?.(props.classification, LocationContext.SubjectStatsWidgetItem);\n }\n\n function getSubtext(): string {\n if (props.classification.status === ClassificationStatus.ComingSoon || props.hideCounts)\n return '';\n\n let text = '';\n\n if (videoCount)\n text += `${getPhrase('videos', { smartCount: videoCount })} `;\n\n if (resourceCount)\n text += ` • ${getPhrase('resources', { smartCount: resourceCount })}`;\n\n if (TopicsHelper.isTopLevelTopic(props.classification) && childClassificationCount > 0) {\n if (!text)\n return getPhrase('topics', { smartCount: childClassificationCount });\n\n text = `${getPhrase('topics', { smartCount: childClassificationCount })} • ` + text;\n }\n\n return text;\n }\n\n function getBadgeType(): ClassificationBadgeType {\n if (props.classification.status === ClassificationStatus.ComingSoon)\n return 'coming-soon';\n\n const { datePublished } = props.classification;\n if (!!datePublished && DateHelper.timeSince(datePublished, 'day') <= 30)\n return 'new-topic';\n\n if (newVideoCount > 0 && !props.hideCounts)\n return 'new-videos';\n\n return null;\n }\n\n const subText = getSubtext();\n\n return (\n <AppLink\n className={`d-flex no-decoration rounded ${styles.container}`}\n appLink={props.getAppLink?.(props.classification)}\n analyticsData={{\n ...props.analyticsData,\n id: props.classification?.id,\n name: props.classification?.name,\n presentationId: props.classification.presentationId,\n comingSoon: !!isComingSoon,\n videoCount,\n resourceCount,\n newVideoCount,\n datePublished: props.classification.datePublished,\n countsHidden: !!props.hideCounts\n }}\n analyticsOptions={{\n location: LocationContext.SubjectStatsWidgetItem,\n ...props.analyticsOptions,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Cover\n }}\n >\n {!hasLoadedImage && (\n <ImageFallback\n type={ImageFallbackType.Subject}\n extraClasses={`ms-2 rounded-end-lg ${styles.fallbackImage}`}\n />\n )}\n <div className={`${styles.cover} me-2 rounded overflow-hidden`}>\n <BaseImage\n data={props.classification.cover}\n imageOptions={{ size: ImageSize.Medium }}\n imageClassName={isComingSoon ? 'opacity-50' : ''}\n onLoad={() => setHasLoadedImage(true)}\n >\n {props.canFollowTopics && (\n <DivButton\n onClick={onToggleFollowClassification}\n className={`\n align-items-center justify-content-center cursor-pointer\n ${styles.bellContainer} ${isFollowing ? styles.followed : ''}\n `}\n >\n <SvgContainer\n svg={BellFilledSvg}\n className={`svg-container ${styles.bell}`}\n />\n <SvgContainer\n svg={BellSvg}\n className={`svg-container ${styles.bellOutline}`}\n />\n </DivButton>\n )}\n </BaseImage>\n\n </div>\n <div>\n <h3 className={`h6 mb-0 clamp-2 mt-1`}>\n {props.classification.name}\n </h3>\n\n {!!subText && (\n <p className={`mb-0 ${styles.subText}`}>\n {subText}\n </p>\n )}\n\n <SubjectStatsBadge badgeType={getBadgeType()} newVideoCount={newVideoCount} />\n </div>\n </AppLink>\n );\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { SubjectStatsWidgetItem } from 'libs/shared/components/widgets/items/subject-stats-widget-item/SubjectStatsWidgetItem';\nimport { Classification } from 'libs/shared/interfaces';\n\nexport interface StatsCoverFixedPillListLargeWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Classification[];\n analyticsData?: HashObject;\n \n hasTableOfContents: boolean;\n isTertiaryCustomerWithoutExchange: boolean;\n appLinks: {\n classification: (classification: Classification) => Core.AppLink;\n }\n onToggleFollowClassification: (classification: Classification, location: LocationContext) => void;\n}\n\nexport function StatsCoverFixedPillListLargeWidgetTemplate(\n props: StatsCoverFixedPillListLargeWidgetTemplateProps\n): JSX.Element {\n /**\n * For V1 of the release of topic directories, we will not be exposing the following icon.\n * This is because currently following is useless. Once we have implemented an email for when\n * coming soon topics are released, we will enable this.\n */\n // const canFollowTopics = props.hasPermissions(PermissionName.FollowSubjects) && !!props.onToggleFollowClassification;\n\n return (\n <>\n <WidgetHeader name={props.name} description={props.description} />\n <Row className='mb-n2'>\n {props.content.map(c => {\n return (\n <Col className={`position-relative pb-2`} key={c.id} xs={12} sm={6} lg={props.hasTableOfContents ? 6 : 4} xl={4}>\n <SubjectStatsWidgetItem\n classification={c}\n analyticsData={props.analyticsData}\n getAppLink={props.appLinks?.classification}\n onToggleFollowClassification={props.onToggleFollowClassification}\n // canFollowTopics={canFollowTopics}\n canFollowTopics={false}\n\n /**\n * We're currently hiding counts for tertiary customers without the exchange\n * because all counting is done by a background process that can't take the\n * current users' credentials into account. Because about half of our tertiary\n * customers don't have the exchange, and the other half do, and we use exchange\n * content on our tertiary topics, the counts will be higher for non-exchange\n * customers than they really are for them.\n * \n * This is shit and hopefully we can come up with a better solution one day\n * - Josh\n */\n hideCounts={props.isTertiaryCustomerWithoutExchange}\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}","import React from 'react';\n\nimport { PartialTagItem } from 'libs/shared/components/tags/PartialTagItem';\nimport { PartialDynamicWidget } from 'libs/shared/components/widgets/dynamic-widget';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nexport function PartialTagItemComponent() {\n return (\n <div className='me-2'>\n <PartialTagItem />\n </div>\n );\n}\n\nexport function PartialTagSlidingListWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n const hasDivider = typeof props.predicate === 'function' && props.predicate() || false;\n \n return (\n <>\n <PartialDynamicWidget\n partialLoadingComponent={PartialTagItemComponent}\n partialLoadingOptions={{\n numItems: 4\n }}\n />\n {hasDivider &&\n <hr />\n }\n </>\n );\n}","import React from 'react';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\nimport { Core } from 'libs/common/backbone/index';\n\nimport { DynamicWidget } from 'libs/shared/components/widgets/dynamic-widget';\nimport { TagWidgetItem, type TagWidgetItemProps } from 'libs/shared/components/widgets/items/tag-widget-item/TagWidgetItem';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { BaseObject } from 'libs/shared/interfaces';\n\nimport { PartialTagItemComponent } from './partial-loading/PartialTagSlidingListWidgetTemplate';\n\nexport interface TagSlidingListWidgetTemplateProps {\n name: string;\n content: BaseObject[];\n widgetTypeId: WidgetTypeId;\n appLinks: {\n tag: (tag: BaseObject) => Core.AppLink;\n },\n getSelectedItems: (type: WidgetTypeId) => BaseObject[];\n}\n\nexport function TagSlidingListWidgetTemplate(props: TagSlidingListWidgetTemplateProps): JSX.Element {\n const selectedItems = props.getSelectedItems(props.widgetTypeId);\n\n const unappliedOptions = props.content.filter(item => !selectedItems.find(s => s.id === item.id));\n\n const collection = [ ...selectedItems, ...unappliedOptions ];\n\n function onClick(tag: BaseObject) {\n AppLinkHelper.trigger(props.appLinks.tag(tag));\n }\n \n return (\n <DynamicWidget\n collection={collection}\n childComponent={(childProps: TagWidgetItemProps) => (\n <TagWidgetItem\n {...childProps}\n selectedItems={selectedItems}\n onClick={onClick}\n />\n )}\n partialLoadingComponent={PartialTagItemComponent}\n partialLoadingOptions={{\n numItems: 4\n }}\n />\n );\n}","import React from 'react';\n\nfunction PartialVideoGuidanceTag(): JSX.Element {\n return (\n <div\n className='partial-loading-background rounded-pill me-2'\n style={{ height: '2.5rem', width: '9.375rem' }}\n />\n );\n}\n\nexport function PartialVideoGuidance(): JSX.Element {\n return (\n <div className='d-flex align-items-center mw-100'>\n <PartialVideoGuidanceTag />\n <PartialVideoGuidanceTag />\n </div>\n );\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { PartialVideoGuidance } from 'libs/shared/components/video-guidance/tag/partial-loading/PartialVideoGuidanceTag';\n\nimport styles from './partial-featured-widget-template.module.scss';\n\nexport function PartialThumbnailFeaturedMediaWidgetTemplate(): JSX.Element {\n return (\n <>\n <Row>\n <Col xs={12} md={6}>\n <div className={`${styles.partialHeroThumbnail} partial-loading-background rounded-3`}></div>\n </Col>\n <Col xs={12} md={6}>\n <div className={styles.details}>\n <div>\n <div style={{ height: '1.5rem' }}>\n <div className='partial-loading-background' style={{ height: '1.2rem', width: '12rem' }} />\n </div>\n <div className='partial-loading-background' style={{ height: '1.5625rem', width: '15rem' }}></div>\n </div>\n\n <div className='pt-2 mw-100'>\n <PartialVideoGuidance />\n </div>\n </div>\n </Col>\n </Row>\n </>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { HeroVideo } from 'libs/shared/apps/subjects/components/hero-video/HeroVideo';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { PresentationAudience, Video } from 'libs/shared/interfaces';\nimport { VideoWidgetTemplateContent } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nexport interface ThumbnailFeaturedMediaWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: VideoWidgetTemplateContent;\n audiences: PresentationAudience[];\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink;\n };\n analyticsData?: HashObject;\n \n hasPermissions: HasPermissionsFunc;\n settings: {\n hasTopicDirectories: boolean\n }\n commonVideoProps: CommonVideoProps;\n}\n\nexport function ThumbnailFeaturedMediaWidgetTemplate(props: ThumbnailFeaturedMediaWidgetTemplateProps): JSX.Element {\n const video = ArrayHelper.first(WidgetHelper.getVideoContent(props.content));\n\n return (\n <>\n <WidgetHeader name={props.name} description={props.description} />\n <HeroVideo\n video={video}\n presentationAudiences={props.audiences}\n getVideoAppLink={props.appLinks?.videoType}\n analyticsData={props.analyticsData}\n hideInteractiveBadge\n showVideoGuidance={VideoHelper.showVideoGuidance(props.hasPermissions)}\n showNewVideoIndicator={props.settings?.hasTopicDirectories}\n commonVideoProps={props.commonVideoProps}\n />\n </>\n );\n}","import React from 'react';\n\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Core } from 'libs/common/core';\n\nimport { AnalyticsOptions, EntityType, HashObject, UserAction } from 'libs/analytics/interfaces';\n\nimport { ActionOptions, Actions } from 'libs/shared/components/actions/Actions';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DragDropMoveWrapper } from 'libs/shared/components/drag-drop-move/DragDropMoveWrapper';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { Folder } from 'libs/shared/interfaces';\n\nimport styles from './library-folder.module.scss';\n\ninterface LibraryFolderProps {\n folder: Folder;\n showOwnerLogo?: boolean;\n drag?: boolean;\n drop?: boolean;\n getAppLink: (f: Folder) => Core.AppLink;\n getFolderActions?: (f: Folder) => ActionOptions[];\n analyticsOptions?: AnalyticsOptions;\n analyticsData?: HashObject;\n}\n\nexport function LibraryFolder(props: LibraryFolderProps): JSX.Element {\n const thumbnailUrl = props.folder.thumbnail\n ? UrlHelper.urlBuilder(props.folder.thumbnail.url, { size: ImageSize.Small })\n : null;\n\n const owner = props.folder?.libraries?.data?.[0]?.owner;\n const ownerLogoUrl = props.showOwnerLogo && !!owner?.logo?.url\n ? UrlHelper.urlBuilder(owner.logo.url, { size: ImageSize.Small })\n : null;\n\n const actions = props.getFolderActions?.(props.folder);\n\n const analyticsData = props.analyticsData ? {\n id: props.folder.id.toString(),\n name: props.folder.name,\n ...props.analyticsData\n } : undefined;\n\n const analyticsOptions = props.analyticsOptions ? {\n actionType: UserAction.Click,\n entity: EntityType.Folder,\n\n ...props.analyticsOptions\n } : undefined;\n\n return (\n <DragDropMoveWrapper\n draggable={props.drag && { id: props.folder.id, data: props.folder }}\n droppable={props.drop && { id: props.folder.id, data: props.folder }}\n dropStye={styles.dropStyle}\n dragStyle={styles.dragStyle}\n >\n <div className='position-relative'>\n <AppLink\n className='rounded-3 d-block text-decoration-none'\n appLink={props.getAppLink(props.folder)}\n title={props.folder.name}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <BaseImage\n data={thumbnailUrl}\n imageType={ImageType.Thumbnails}\n imageClassName='rounded-top-lg'\n >\n <ImageFallback\n name={props.folder.name}\n type={ImageFallbackType.Folder}\n extraClasses='rounded-top-lg'\n />\n </BaseImage>\n <h3 className='bg-white border-start border-end border-bottom rounded-bottom-lg font-size-normal fw-semibold mb-0 p-2'>\n <span className='text-truncate d-block'>{props.folder.name}</span>\n </h3>\n </AppLink>\n {actions?.length &&\n <Actions\n actions={actions}\n className={styles.actionsContainer}\n actionsDropdownClassName={styles.actions}\n // Intentionally setting to the default SVG size\n dropdownToggleSvgSize={null}\n />\n }\n {!!ownerLogoUrl &&\n <img src={ownerLogoUrl} className={`rounded-circle ${styles.ownerLogo}`} alt={`${owner?.name} logo`} title={owner?.name || ''} />\n }\n </div>\n </DragDropMoveWrapper>\n );\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/core';\n\nimport { HashObject, LocationContext } from 'libs/analytics/interfaces';\n\nimport { LibraryFolder } from 'libs/shared/components/library-folder/LibraryFolder';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { Folder } from 'libs/shared/interfaces';\n\nexport interface ThumbnailFixedListFolderSmallWidgetTemplateProps {\n name: string;\n seeMoreLink: Core.AppLink;\n content: Folder[];\n appLinks: {\n folder: (folder: Folder, opts?: {libraryId?: string, sort?: string}) => Core.AppLink;\n };\n description: string;\n widgetTypeId: WidgetTypeId;\n badgeComponent: JSX.Element;\n getAnalyticsData?: (itemIndex: number) => HashObject;\n}\n\nexport function ThumbnailFixedListFolderSmallWidgetTemplate(\n props: ThumbnailFixedListFolderSmallWidgetTemplateProps\n): JSX.Element {\n function getAppLink(folder: Folder) {\n if (props.widgetTypeId === WidgetTypeId.SearchMySchoolLibraryFolder) {\n const libraryId = folder?.libraries?.data?.[0]?.id;\n return props.appLinks.folder(folder, { libraryId });\n }\n\n return props.appLinks.folder(folder);\n }\n\n const showOwnerLogo = props.widgetTypeId === WidgetTypeId.SearchMySchoolLibraryFolder;\n \n return (\n <>\n <WidgetHeader\n name={props.name}\n description={props.description}\n showSeeMoreLink={!!props.seeMoreLink}\n appLink={props.seeMoreLink}\n badgeComponent={props.badgeComponent}\n />\n <Row as='ul' className='list-unstyled mx-n1 mb-n2'>\n {props.content.map((f, idx) => {\n const analyticsData = typeof props.getAnalyticsData === 'function' ? props.getAnalyticsData(idx) : {};\n \n return (\n <Col as='li' key={f.id} lg={3} md={4} sm={6} xs={12} className='pb-3 px-1'>\n <LibraryFolder\n folder={f}\n getAppLink={getAppLink}\n showOwnerLogo={showOwnerLogo}\n analyticsData={analyticsData}\n analyticsOptions={{\n location: LocationContext.ThumbnailFixedListFolderSmallWidget\n }}\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nimport styles from './partial-thumbnail-fixed-list-large-widget-template.module.scss';\n\nexport function PartialThumbnailFixedListLargeWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n const PARTIAL_SUBJECTS = [...Array(2)];\n\n return (\n <div>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\n <Row className='mx-n1'>\n {PARTIAL_SUBJECTS.map((_, i) => {\n return (\n <Col key={i} sm={12} md={6} className='p-1'>\n <div className={`${styles.subjectItem} partial-loading-background rounded-3`} />\n </Col>\n );\n })}\n </Row>\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { AnalyticsOptions, HashObject } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport styles from './thumbnail-widget-item.module.scss';\n\nconst namespace = 'shared.thumbnailWidgetItem';\n\ninterface ThumbnailWidgetContentProps extends ThumbnailWidgetItemProps {}\n\nfunction ThumbnailWidgetContent(props: ThumbnailWidgetContentProps): JSX.Element {\n const style: React.CSSProperties = {};\n\n if (props.data.fallbackBackgroundColor)\n style.backgroundColor = props.data.fallbackBackgroundColor;\n \n if (props.data.backgroundColor)\n style.backgroundColor = props.data.backgroundColor;\n\n if (props.data.thumbnailUrl)\n style.backgroundImage = `url('${props.data.thumbnailUrl}')`;\n\n return (\n <div\n className={classNames(\n 'd-flex position-relative rounded-3 h-100',\n styles.container,\n props.isLarge ? styles.large : styles.small\n )}\n style={style}\n >\n <div className={classNames(styles.content, !props.isLarge && 'justify-content-center')}>\n <div className={`${styles.top}`}>\n {props.data.preTitle && props.data.preTitle.length &&\n <p className={`${styles.preTitle} mb-1 text-white`} title={props.data.preTitle}>{props.data.preTitle}</p>\n }\n <p title={props.data.name} className={classNames(\n 'h5 text-shadow hover-text-underline',\n styles.title,\n props.isLarge ? 'mb-0 text-wrap clamp-2' : 'text-wrap clamp-3'\n )}>\n {props.data.name}\n </p>\n\n {props.isLarge && (\n <div className={`text-start text-shadow ${styles.description}`}>\n <p className='clamp-3' title={props.data.description}>{props.data.description}</p>\n </div>\n )}\n </div>\n\n {props.isLarge && (\n <div className={styles.button}>\n <div className={classNames(!props.appLink && 'cursor-default', 'btn btn-outline-dark')}>\n {props.data?.buttonText || LanguageService.getPhrase(namespace, 'buttonLabel')}\n </div>\n </div>\n )}\n </div>\n\n {!props.data.thumbnailUrl && !!props.data.coverUrl && (\n <div\n className={`${styles.cover}`}\n style={{\n backgroundImage: `url('${props.data.coverUrl}')`\n }}>\n </div>\n )}\n\n </div>\n );\n}\n\ninterface ThumbnailWidgetData {\n name: string;\n preTitle?: string;\n \n description?: string;\n coverUrl?: string;\n thumbnailUrl?: string;\n backgroundColor?: string;\n fallbackBackgroundColor?: string;\n buttonText?: string;\n}\n\nexport interface ThumbnailWidgetItemProps {\n data: ThumbnailWidgetData;\n appLink?: Core.AppLink;\n appLinkOptions?: Core.AppLinkOptions;\n isLarge?: boolean;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\nfunction ThumbnailWidgetItem(props: ThumbnailWidgetItemProps): JSX.Element {\n if (props.appLink)\n return (\n <AppLink\n className={styles.appLink}\n appLink={props.appLink}\n appLinkOptions={props.appLinkOptions}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n >\n <ThumbnailWidgetContent {...props} />\n </AppLink>\n );\n\n return <ThumbnailWidgetContent {...props} />;\n}\n\nconst Memoized = React.memo(ThumbnailWidgetItem);\n\nexport { Memoized as ThumbnailWidgetItem };","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { ThumbnailWidgetItem, ThumbnailWidgetItemProps } from 'libs/shared/components/widgets/items/thumbnail-widget-item/ThumbnailWidgetItem';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { Classification } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nconst namespace = 'shared.thumbnailFixedListLargeWidgetTemplate';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface GetThumbnailWidgetItemPropsOptions {\n item: Classification;\n appLinks: ThumbnailFixedListLargeWidgetTemplateProps['appLinks'];\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\n\nfunction getThumbnailWidgetItemProps(options: GetThumbnailWidgetItemPropsOptions): ThumbnailWidgetItemProps {\n const baseProps: ThumbnailWidgetItemProps = {\n data: {\n name: options.item.name,\n description: options.item.description\n }\n };\n\n const isComingSoon = options.item?.status === ClassificationStatus.ComingSoon;\n const analyticsData = {\n ...options.analyticsData,\n id: options.item?.id,\n name: options.item?.name,\n presentationId: options.item?.presentationId,\n comingSoon: !!isComingSoon\n };\n \n const analyticsOptions = {\n location: LocationContext.ClassificationListItem,\n ...options.analyticsOptions,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n return {\n ...baseProps,\n data: {\n ...baseProps.data,\n backgroundColor: options.item.metadata?.backgroundColor,\n coverUrl: ImageHelper.createUrl(options.item.cover?.url, { size: ImageSize.Small }),\n thumbnailUrl: ImageHelper.createUrl(options.item.thumbnail?.url, { size: ImageSize.Medium }),\n buttonText: getPhrase('exploreTopic')\n },\n appLink: options.appLinks?.classification?.(options.item),\n isLarge: true,\n analyticsData,\n analyticsOptions\n };\n}\n\nexport interface ThumbnailFixedListLargeWidgetTemplateProps {\n name: string;\n description: string;\n content: Classification[];\n widgetTypeId: WidgetTypeId;\n isPreviewing: boolean;\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink;\n }\n analyticsData?: HashObject;\n}\n\nexport function ThumbnailFixedListLargeWidgetTemplate(props: ThumbnailFixedListLargeWidgetTemplateProps): JSX.Element {\n return (\n <>\n <WidgetHeader\n name={props.name}\n description={props.description}\n content={props.content}\n widgetTypeId={props.widgetTypeId}\n isPreviewing={props.isPreviewing}\n />\n <Row as='ul' className='list-unstyled mx-n1 mb-n2'>\n {props.content.map(c => {\n return (\n <Col as='li' key={c.id} sm={12} xl={6} className='px-1 pb-2'>\n <ThumbnailWidgetItem\n {...getThumbnailWidgetItemProps({\n appLinks: props.appLinks,\n item: c,\n analyticsData: props.analyticsData\n })}\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}\n","import React from 'react';\n\nimport { PartialVideoGuidance } from 'libs/shared/components/video-guidance/tag/partial-loading/PartialVideoGuidanceTag';\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nimport styles from './partial-thumbnail-fixed-list-media-large-widget-template.module.scss';\n\nexport const PartialThumbnailFixedListMediaLargeWidgetTemplate = (props: PartialWidgetTemplateProps): JSX.Element => {\n return (\n <>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\n <div className={`row ${styles.row}`}>\n <div className='col-sm-12 col-md-6'>\n <div className={`${styles.partialThumbnail} partial-loading-background rounded-3`}></div>\n <PartialThumbnailText />\n\n <div className='pt-1 mw-100'>\n <PartialVideoGuidance />\n </div>\n </div>\n\n <div className='col-sm-12 col-md-6'>\n <div className={`${styles.partialThumbnail} partial-loading-background rounded-3`}></div>\n <PartialThumbnailText />\n\n <div className='pt-1 mw-100'>\n <PartialVideoGuidance />\n </div>\n </div>\n </div>\n </>\n );\n};\n\nconst PartialThumbnailText = (): JSX.Element => {\n return (\n <div className='mt-2'>\n <div style={{ height: '1.4rem' }}>\n <div className='partial-loading-background' style={{ height: '1.1rem', width: '12rem' }} />\n </div>\n <div className='partial-loading-background' style={{ height: '1.33875rem', width: '15rem' }}></div>\n </div>\n );\n};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions, ClickDescriptor, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { ThumbnailText } from 'libs/shared/components/thumbnails/thumbnail-text/ThumbnailText';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { VideoItemGuidance } from 'libs/shared/components/video-list/components/video-guidance/VideoItemGuidance';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { PresentationAudience, Video, VideoTypes } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './thumbnail-fixed-list-media-large-widget.module.scss';\n\nexport interface ThumbnailFixedListMediaLargeWidgetTemplateItemProps {\n video: VideoTypes;\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink;\n }\n audiences: PresentationAudience[];\n hasPermissions: HasPermissionsFunc;\n analyticsData?: HashObject;\n\n settings: {\n hasTopicDirectories: boolean;\n }\n\n commonVideoProps: CommonVideoProps;\n}\n\nexport function ThumbnailFixedListMediaLargeWidgetTemplateItem(\n props: ThumbnailFixedListMediaLargeWidgetTemplateItemProps\n): JSX.Element {\n const videoAppLink = props.appLinks?.videoType?.(props.video, {});\n\n const containerRef = React.useRef(null);\n\n const analyticsOptions: AnalyticsOptions = {\n actionType: UserAction.Click,\n entity: VideoHelper.getAnalyticsEntity(props.video),\n location: LocationContext.ThumbnailFixedListMediaLargeWidget,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n const mergedAudience = useMergeAudiences(props.video.subjectPresentationAudiences?.data, props.audiences);\n\n return (\n <div className='col-md-6'>\n <div ref={containerRef}>\n <VideoThumbnail\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n video={props.video}\n appLink={videoAppLink}\n imageOptions={{ size: ImageSize.Medium }}\n textPosition={ThumbnailTextPosition.Independent}\n type='static'\n audience={mergedAudience}\n hideRating={!!mergedAudience}\n commonVideoProps={{\n ...props.commonVideoProps,\n subTextType: 'none'\n }}\n />\n </div>\n <ThumbnailText\n video={props.video}\n appLink={videoAppLink}\n commonVideoProps={props.commonVideoProps}\n />\n\n {VideoHelper.showVideoGuidance(props.hasPermissions) && (\n <VideoItemGuidance\n commonVideoProps={props.commonVideoProps}\n video={props.video}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n responsiveClassName={styles.responsiveGuidance}\n containerClassName={`d-flex justify-content-start align-items-center pt-1 ${styles.guidance}`}\n />\n )}\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { ThumbnailFixedListMediaLargeWidgetTemplateItem } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/components/ThumbnailFixedListMediaLargeWidgetTemplateItem';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { PresentationAudience, Video } from 'libs/shared/interfaces';\nimport { VideoWidgetTemplateContent } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './thumbnail-fixed-list-media-large-widget-template.module.scss';\n\nexport interface ThumbnailFixedListMediaLargeWidgetTemplateProps {\n name: string;\n description: string;\n content: VideoWidgetTemplateContent;\n\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink;\n }\n audiences: PresentationAudience[];\n analyticsData?: HashObject;\n \n hasPermissions: HasPermissionsFunc;\n\n settings: {\n hasTopicDirectories: boolean;\n }\n\n commonVideoProps: CommonVideoProps;\n}\n\nexport function ThumbnailFixedListMediaLargeWidgetTemplate(\n props: ThumbnailFixedListMediaLargeWidgetTemplateProps\n): JSX.Element {\n const videos = WidgetHelper.getVideoContent(props.content);\n\n return (\n <>\n <WidgetHeader name={props.name} description={props.description} />\n <div className={`row ${styles.row}`}>\n {videos.map(video => (\n <ThumbnailFixedListMediaLargeWidgetTemplateItem key={video.id} video={video} {...props} />\n ))}\n </div>\n </>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport styles from './collection-thumbnail-title.module.scss';\n\ninterface BaseCollectionThumbnailTitleProps {\n title: string;\n}\n\nfunction BaseCollectionThumbnailTitle(props: BaseCollectionThumbnailTitleProps): JSX.Element {\n return (\n <h3 title={props.title} className='h6'>{props.title}</h3>\n );\n}\n\ninterface CollectionThumbnailTitleProps extends BaseCollectionThumbnailTitleProps {\n appLink: Core.AppLink;\n}\n\nexport function CollectionThumbnailTitle(props: CollectionThumbnailTitleProps) {\n if (!props.appLink) {\n return (\n <BaseCollectionThumbnailTitle {...props} />\n );\n }\n \n return (\n <AppLink appLink={props.appLink} className={`${styles.thumbnailTitle}`}>\n <BaseCollectionThumbnailTitle {...props} />\n </AppLink>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AnalyticsOptions, EntityType, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CollectionThumbnailTitle } from 'libs/shared/components/thumbnails/collection/title/CollectionThumbnailTitle';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { TitleSubText } from 'libs/shared/components/title-sub-text/TitleSubText';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { PlaySvg } from 'libs/shared/images/svg/actions/PlaySvg';\nimport { SeriesSvg } from 'libs/shared/images/svg/objects/SeriesSvg';\nimport { Playlist, Series } from 'libs/shared/interfaces';\nimport { ImageOptions } from 'libs/shared/utils/ImageHelper';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\n\nimport styles from './collection-thumbnail.module.scss';\n\nconst namespace = 'shared.collectionThumbnail';\n\ntype SupportedContentType = Playlist | Series;\n\ninterface CollectionThumbnailProps {\n appLink?: Core.AppLink\n collection: SupportedContentType;\n imageOptions?: ImageOptions;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n showMask?: boolean;\n showVideoCount?: boolean;\n onlyCount?: boolean;\n title?: string;\n titleAppLink?: Core.AppLink;\n subText?: string;\n subTextAppLink?: Core.AppLink;\n hoverText?: string;\n}\n\nexport function CollectionThumbnail(props: CollectionThumbnailProps) {\n function getFirstVideo() {\n let collectionVideos = props.collection?.videos;\n\n if (!collectionVideos)\n return;\n\n if (!collectionVideos.count && props.collection.typeId === MasterType.Playlist) {\n const playlist = props.collection as Playlist;\n\n if (playlist.clips.count)\n collectionVideos = playlist.clips;\n\n if (playlist.interactives.count)\n collectionVideos = playlist.interactives;\n }\n\n return ArrayHelper.first(collectionVideos.data);\n }\n\n function getVideoCount() {\n let totalCount = 0;\n\n if (props.collection.videos && props.collection.videos.count) {\n totalCount += props.collection.videos.count;\n }\n\n if (props.collection.typeId === MasterType.Playlist) {\n const playlist = props.collection as Playlist;\n\n if (playlist.interactives?.count)\n totalCount += playlist.interactives.count;\n\n if (playlist.clips?.count)\n totalCount += playlist.clips.count;\n }\n\n return totalCount;\n }\n\n function getEntityType(collection: SupportedContentType) {\n if (MasterTypeHelper.isType<Playlist>(collection, MasterType.Playlist)) {\n return EntityType.Playlist;\n }\n\n if (MasterTypeHelper.isType<Series>(collection, MasterType.Series)) {\n return EntityType.Series;\n }\n }\n\n const firstVideo = getFirstVideo();\n const videoCount = getVideoCount();\n const showTexts = props.title?.length || props.subText?.length;\n\n const analyticsData = {\n id: props.collection.id.toString(),\n name: props.collection.name,\n\n ...props.analyticsData\n };\n\n const analyticsOptions = {\n actionType: UserAction.Click,\n entity: getEntityType(props.collection),\n \n ...props.analyticsOptions\n };\n\n return (\n <div>\n <div className={`position-relative ${styles.thumbnailContainer} z-1`}>\n <AppLink\n appLink={props.appLink}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n preventFocus\n >\n {props.showMask &&\n <div className={`${styles.mask} position-absolute w-100 h-100 rounded-3 bg-dark bg-gradient z-1 bg-opacity-50 pointer-events-none`}>\n <div className={`${styles.badge} d-flex align-items-center w-fit flex-grow-0 bg-dark rounded-pill ps-1 m-2`}>\n <SvgContainer svg={PlaySvg} className='svg-container text-white' />\n <p className='d-inline fw-medium text-white mb-0'>\n {props.hoverText?.length ?\n <span>{props.hoverText}</span> :\n <Text namespace={namespace} phrase='playAll' />\n }\n </p>\n </div>\n </div>\n }\n\n {firstVideo &&\n <VideoThumbnail\n video={firstVideo}\n imageOptions={props.imageOptions}\n textPosition={ThumbnailTextPosition.Independent}\n type='cosmetic'\n hideMask\n hideRating\n hideDuration\n hideVideoTypeBadge\n />\n }\n\n {!firstVideo &&\n <div className='ratio ratio-16x9 bg-light rounded-3'>\n <div className='d-flex justify-content-center align-items-center'>\n <SvgContainer svg={PlaySvg} className='w-33 opacity-25 text-gray-400' />\n </div>\n </div>\n }\n\n {props.showVideoCount &&\n <div className={`${styles.badge} d-flex align-items-center w-fit bg-dark bg-opacity-75 rounded-pill position-absolute bottom-0 end-0 ps-1 m-2`}>\n <SvgContainer svg={SeriesSvg} className='svg-container text-white me-1' />\n <p className='d-inline fw-semibold text-white mb-0'>\n {props.onlyCount\n ? <span>{videoCount}</span>\n : <Text namespace={namespace} phrase='videos' options={{ count: videoCount, smartCount: videoCount }} />\n }\n </p>\n </div>\n }\n </AppLink>\n\n </div>\n \n {showTexts &&\n <div className='mt-2 d-flex flex-column'>\n {props.subText &&\n <TitleSubText title={props.subText} appLink={props.subTextAppLink}>\n {props.subText}\n </TitleSubText>\n }\n {props.title &&\n <CollectionThumbnailTitle\n title={props.collection.name}\n appLink={props.titleAppLink}\n />\n }\n </div>\n }\n </div>\n );\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { HashObject, LocationContext } from 'libs/analytics/interfaces';\n\nimport { CollectionThumbnail } from 'libs/shared/components/thumbnails/collection/CollectionThumbnail';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport type { CurrentUser, Playlist, Series } from 'libs/shared/interfaces';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\n\ntype SupportedContentType = Series | Playlist;\n\nexport interface ThumbnailFixedListMediaSmallWidgetTemplateProps {\n name: string;\n content: SupportedContentType[];\n currentUser: CurrentUser;\n seeMoreLink: Core.AppLink;\n appLinks: {\n playlist: (playlist: Playlist) => Core.AppLink;\n series: (series: Series) => Core.AppLink,\n },\n \n description: string;\n badgeComponent: JSX.Element;\n getAnalyticsData?: (itemIndex: number) => HashObject;\n}\n\nconst namespace = 'widgets.thumbnailFixedListMediaSmallWidgetTemplate';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function ThumbnailFixedListMediaSmallWidgetTemplate(\n props: ThumbnailFixedListMediaSmallWidgetTemplateProps\n): JSX.Element {\n const subTextMap: {[key in MasterType]?: string} = {\n [MasterType.Playlist]: getPhrase('playlist'),\n [MasterType.Series]: getPhrase('series')\n };\n\n const hoverTextMap: {[key in MasterType]?: string} = {\n [MasterType.Playlist]: getPhrase('viewPlaylist'),\n [MasterType.Series]: getPhrase('viewSeries')\n };\n \n function getAppLink(collection: SupportedContentType) {\n if (MasterTypeHelper.isType<Playlist>(collection, MasterType.Playlist)) {\n return props.appLinks.playlist(collection);\n }\n\n if (MasterTypeHelper.isType<Series>(collection, MasterType.Series)) {\n return props.appLinks.series(collection);\n }\n }\n\n return (\n <>\n <WidgetHeader\n name={props.name}\n description={props.description}\n showSeeMoreLink={!!props.seeMoreLink}\n appLink={props.seeMoreLink}\n badgeComponent={props.badgeComponent}\n />\n <Row as='ul' className='list-unstyled mx-n1 mb-n3'>\n {props.content.map((c, idx) => {\n const collectionAppLink = getAppLink(c);\n const subText = subTextMap[c?.typeId];\n const hoverText = hoverTextMap[c?.typeId];\n \n return (\n <Col as='li' key={c.id} lg={3} md={4} sm={6} xs={12} className='mb-3 px-1'>\n <CollectionThumbnail\n collection={c}\n appLink={collectionAppLink}\n analyticsOptions={{\n location: LocationContext.ThumbnailFixedListMediaSmallWidget\n }}\n analyticsData={props.getAnalyticsData(idx)}\n title={c?.name}\n titleAppLink={collectionAppLink}\n imageOptions={{\n size: ImageSize.Medium\n }}\n subText={subText}\n subTextAppLink={collectionAppLink}\n hoverText={hoverText}\n showVideoCount\n showMask\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nimport styles from './partial-thumbnail-fixed-list-small-widget-template.module.scss';\n\nexport function PartialThumbnailFixedSmallWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n const PARTIAL_SUBJECTS = [...Array(3)];\n\n return (\n <>\n <PartialWidgetHeader\n name={props.name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n hideDescription={props.hideDescription}\n />\n <Row className='mx-n1 '>\n {PARTIAL_SUBJECTS.map((_, i) => {\n return (\n <Col key={i} xl={4} md={6} xs={12} className='p-1'>\n <div className={`${styles.subjectItem} partial-loading-background rounded-3`} />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { ThumbnailWidgetItem, ThumbnailWidgetItemProps } from 'libs/shared/components/widgets/items/thumbnail-widget-item/ThumbnailWidgetItem';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { Classification, Company, Presentation } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\n\ntype SupportedContent = Classification | Company;\n\ninterface GetThumbnailWidgetItemPropsOptions {\n item: SupportedContent;\n appLinks: ThumbnailFixedListSmallWidgetTemplateProps['appLinks'];\n appLinkOptions: ThumbnailFixedListSmallWidgetTemplateProps['appLinkOptions'];\n widgetTypeId: WidgetTypeId;\n availablePresentations?: Presentation[];\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\nfunction getPresentationName(item: Classification, presentations: Presentation[]): string {\n if (!item || !presentations)\n return;\n\n const itemPresentation = presentations.find(p => p.id && p.id === item.presentationId);\n\n if (!itemPresentation)\n return;\n\n return itemPresentation.name;\n}\n\nfunction getThumbnailWidgetItemProps(options: GetThumbnailWidgetItemPropsOptions): ThumbnailWidgetItemProps {\n const baseProps: ThumbnailWidgetItemProps = {\n data: {\n name: options.item.name,\n description: options.item.description\n }\n };\n\n if (MasterTypeHelper.isType<Classification>(options.item, MasterType.Subject)) {\n const isComingSoon = options.item?.status === ClassificationStatus.ComingSoon;\n const analyticsData = {\n ...options.analyticsData,\n id: options.item?.id,\n name: options.item?.name,\n presentationId: options.item?.presentationId,\n comingSoon: !!isComingSoon\n };\n \n const analyticsOptions = {\n location: LocationContext.ThumbnailFixedListSmallWidget,\n ...options.analyticsOptions,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n const itemPresentationName = options.widgetTypeId === WidgetTypeId.SearchRelevantTopics &&\n getPresentationName(options.item, options.availablePresentations);\n\n return {\n ...baseProps,\n data: {\n ...baseProps.data,\n preTitle: itemPresentationName,\n backgroundColor: options.item.metadata?.backgroundColor,\n coverUrl: ImageHelper.createUrl(options.item.cover?.url, { size: ImageSize.Small }),\n thumbnailUrl: ImageHelper.createUrl(options.item.thumbnail?.url, { size: ImageSize.Medium })\n },\n appLink: options.appLinks?.classification?.(options.item),\n analyticsData,\n analyticsOptions\n };\n }\n\n if (MasterTypeHelper.isType<Company>(options.item, MasterType.Company)) {\n return {\n ...baseProps,\n data: {\n ...baseProps.data,\n coverUrl: ImageHelper.createUrl(options.item.logo?.url, { size: ImageSize.Small }),\n backgroundColor: options.item.metadata?.colour\n },\n appLink: options.appLinks?.company?.(options.item),\n appLinkOptions: options.appLinkOptions?.company(options.item)\n };\n }\n\n return baseProps;\n}\n\nexport interface ThumbnailFixedListSmallWidgetTemplateProps {\n name: string;\n description: string;\n isPreviewing: boolean;\n widgetTypeId: WidgetTypeId;\n content: SupportedContent[];\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink;\n company: (playlist: Company) => Core.AppLink;\n },\n seeMoreLink: Core.AppLink;\n availablePresentations?: Presentation[];\n analyticsData?: HashObject;\n badgeComponent: JSX.Element;\n getAnalyticsData?: (itemIndex: number) => HashObject;\n appLinkOptions?: {\n company: (company: Company) => Core.AppLinkOptions;\n }\n}\n\nexport function ThumbnailFixedListSmallWidgetTemplate(\n props: ThumbnailFixedListSmallWidgetTemplateProps\n): JSX.Element {\n function getContent(): SupportedContent[] {\n if ([\n WidgetTypeId.SearchRelevantTopics,\n WidgetTypeId.SearchCompanies\n ].includes(props.widgetTypeId)) {\n return props.content;\n }\n \n if (\n props.widgetTypeId !== WidgetTypeId.TrendingClassifications &&\n props.widgetTypeId !== WidgetTypeId.LatestReleasedClassifications\n ) {\n return props.content;\n }\n\n if (props.content.length < 6)\n return props.content.slice(0, 3);\n\n return props.content;\n }\n\n return (\n <>\n <WidgetHeader\n name={props.name}\n description={props.description}\n content={props.content}\n widgetTypeId={props.widgetTypeId}\n isPreviewing={props.isPreviewing}\n showSeeMoreLink={!!props.seeMoreLink}\n appLink={props.seeMoreLink}\n badgeComponent={props.badgeComponent}\n />\n <Row as='ul' className='list-unstyled mx-n1 mb-n2'>\n {getContent().map((c, idx) => {\n const analyticsData = typeof props.getAnalyticsData === 'function'\n ? props.getAnalyticsData(idx)\n : props.analyticsData;\n \n const thumbnailWidgetItemProps = getThumbnailWidgetItemProps({\n item: c,\n widgetTypeId: props.widgetTypeId,\n appLinks: props.appLinks,\n analyticsData: analyticsData,\n availablePresentations: props.availablePresentations,\n appLinkOptions: props.appLinkOptions\n });\n return (\n <Col as='li' key={c.id} xl={4} md={6} xs={12} className='px-1 pb-2'>\n <ThumbnailWidgetItem\n {...thumbnailWidgetItemProps}\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}\n","import React from 'react';\n\nimport { PartialHeroBannerWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner/partial-loading/PartialHeroBannerWidgetTemplate';\n\nexport function PartialThumbnailFixedListXLargeWidgetTemplate(): JSX.Element {\n return <PartialHeroBannerWidgetTemplate />;\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { HeroBannerWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner/HeroBannerWidgetTemplate';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Classification, WidgetCta } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './thumbnail-fixed-list-x-large.module.scss';\n\nconst namespace = 'shared.thumbnailFixedListXLarge';\n\nexport interface ThumbnailFixedListXLargeWidgetTemplateProps {\n name: string;\n content: Classification[];\n analyticsData?: HashObject;\n \n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink;\n };\n metadata: {\n cta: WidgetCta\n }\n}\n\nexport function ThumbnailFixedListXLargeWidgetTemplate(\n props: ThumbnailFixedListXLargeWidgetTemplateProps\n): JSX.Element {\n const classification = ArrayHelper.first(props.content);\n\n const thumbnailUrl = ImageHelper.createUrl(classification.thumbnail?.url, { size: ImageSize.Medium });\n const backgroundColor = classification.metadata?.backgroundColor;\n\n const style: React.CSSProperties = {\n backgroundColor\n };\n\n if (thumbnailUrl)\n style.backgroundImage = `url('${thumbnailUrl}')`;\n\n const analyticsData = {\n ...props.analyticsData,\n id: classification.id,\n name: classification.name,\n presentationId: classification.presentationId\n };\n\n const analyticsOptions = {\n location: LocationContext.ClassificationListItem,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n if (!thumbnailUrl || !backgroundColor)\n return <HeroBannerWidgetTemplate {...props} />;\n\n return (\n <>\n <AppLink\n appLink={props.appLinks?.classification?.(classification)}\n className='text-decoration-none'\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <div\n className={`d-flex position-relative rounded-3 h-100 ${styles.container}`}\n style={style}\n >\n <div className={`${styles.content}`}>\n <div className={`${styles.top}`}>\n <h2 className={`${styles.title} text-decoration-none h4 text-nowrap text-truncate`}>{props.name}</h2>\n\n <div className={`text-start ${styles.description}`}>\n <p className='clamp-3'>{classification.description}</p>\n </div>\n </div>\n\n <div>\n <div className='btn btn-outline-dark text-nowrap'>\n {props.metadata?.cta?.text || LanguageService.getPhrase(namespace, 'buttonLabel')}\n </div>\n </div>\n </div>\n </div>\n </AppLink>\n </>\n );\n}\n","import React from 'react';\n\nimport { PartialVideoGuidance } from 'libs/shared/components/video-guidance/tag/partial-loading/PartialVideoGuidanceTag';\n\nimport styles from './partial-thumbnail-hero-media-widget-template.module.scss';\n\nexport const PartialThumbnailHeroMediaWidgetTemplate = () => (\n <div>\n <div className='w-100 partial-loading-background rounded-3' style={{ paddingBottom: '56.25%' }} />\n\n <div className={styles.details}>\n <div>\n <div style={{ height: '1.5rem' }}>\n <div className='partial-loading-background' style={{ height: '1.2rem', width: '12rem' }} />\n </div>\n <div className='partial-loading-background' style={{ height: '1.5625rem', width: '15rem' }}></div>\n </div>\n\n <div className='pt-2 mw-100'>\n <PartialVideoGuidance />\n </div>\n </div>\n </div>\n);","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ClickDescriptor, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { VideoItemGuidance } from 'libs/shared/components/video-list/components/video-guidance/VideoItemGuidance';\nimport { VideoSubText } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { VideoTitle } from 'libs/shared/components/video-title/VideoTitle';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { PresentationAudience } from 'libs/shared/interfaces';\nimport { VideoWidgetTemplateContent } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { Video } from 'libs/shared/interfaces/models/Video';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './thumbnail-hero-media-widget-template.module.scss';\n\nexport interface ThumbnailHeroMediaWidgetTemplateProps {\n name: string;\n description: string;\n content: VideoWidgetTemplateContent;\n audiences: PresentationAudience[];\n widgetTypeId: WidgetTypeId;\n hasPermissions: HasPermissionsFunc;\n analyticsData?: HashObject;\n\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink;\n }\n\n settings: {\n hasTopicDirectories: boolean;\n }\n\n commonVideoProps: CommonVideoProps;\n}\n\nexport function ThumbnailHeroMediaWidgetTemplate(props: ThumbnailHeroMediaWidgetTemplateProps): JSX.Element {\n const video = ArrayHelper.first(WidgetHelper.getVideoContent(props.content));\n const containerRef = React.useRef(null);\n\n const mergedAudience = useMergeAudiences(video.subjectPresentationAudiences?.data, props.audiences);\n\n const hasSubText = VideoHelper.hasSeries(video) || WidgetHelper.isCompanyWidget(props.widgetTypeId);\n\n const analyticsOptions = {\n actionType: UserAction.Click,\n entity: VideoHelper.getAnalyticsEntity(video),\n location: LocationContext.ThumbnailHeroMediaWidget\n };\n\n const showNewVideoIndicator = props.settings?.hasTopicDirectories;\n\n const { canNavigate } = VideoHelper.getCanBeConsumed(video);\n\n if (!video)\n return <></>;\n\n return (\n <div>\n <WidgetHeader name={props.name} description={props.description} />\n\n <div ref={containerRef}>\n <VideoThumbnail\n video={video}\n imageOptions={{ size: ImageSize.Large }}\n type='static'\n textPosition={ThumbnailTextPosition.Independent}\n analyticsOptions={analyticsOptions}\n audience={mergedAudience}\n hideRating={!!mergedAudience}\n appLink={props.appLinks?.videoType?.(video, {})}\n commonVideoProps={props.commonVideoProps}\n />\n </div>\n\n <div className={styles.details}>\n <div>\n {VideoHelper.isVideo(video) && (\n <VideoSubText\n type={WidgetHelper.isCompanyWidget(props.widgetTypeId) ? 'productionCompany' : props.commonVideoProps.subTextType}\n video={video}\n appLink={props.commonVideoProps.getSubTextAppLink?.(video)}\n analyticsOptions={analyticsOptions}\n className={`mt-2 ${styles.seriesTitleBox}`}\n />\n )}\n\n <div className={hasSubText ? '' : 'mt-2'}>\n <AppLink\n appLink={props.appLinks?.videoType?.(video, {})}\n analyticsData={{\n id: video.id,\n name: video.name\n }}\n analyticsOptions={{\n ...analyticsOptions,\n descriptor: ClickDescriptor.Title\n }}\n className={`d-inline-block ${canNavigate ? '' : 'cursor-default text-decoration-none disabled'}`}\n disabled={!canNavigate}\n >\n <VideoTitle\n video={video}\n yearGroups={props.commonVideoProps.yearGroups}\n showNewVideoIndicator={showNewVideoIndicator}\n showPadlock={!props.commonVideoProps.hasStudentExperience && !props.commonVideoProps.hasGuestExperience}\n titleSize='h4'\n className='mb-0'\n />\n </AppLink>\n </div>\n </div>\n\n {VideoHelper.showVideoGuidance(props.hasPermissions) && (\n <VideoItemGuidance\n video={video}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n responsiveClassName={styles.responsiveGuidance}\n containerClassName={`d-flex mt-2 ${styles.guidance}`}\n commonVideoProps={props.commonVideoProps}\n />\n )}\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { PartialFixedWidget } from 'libs/shared/components/widgets/fixed-widget';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nexport function PartialThumbnailSlidingListLargeWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n return (\n <PartialFixedWidget\n size='lg'\n name={props.name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n />\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { VideoWidgetItem } from 'libs/shared/components/widgets/items/video-widget-item/v1';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Video, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nexport interface ThumbnailSlidingListLargeWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Video[];\n analyticsData?: HashObject;\n \n showHighlight?: boolean;\n\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink;\n widgetVideoList: (widgetId: string, widgetName: string) => Core.AppLink;\n }\n\n commonVideoProps: CommonVideoProps;\n}\n\nexport function ThumbnailSlidingListLargeWidgetTemplate(\n props: ThumbnailSlidingListLargeWidgetTemplateProps\n): JSX.Element {\n return (\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.LargeRow}\n contents={WidgetContents.Videos}\n collection={props.content}\n childComponent={VideoWidgetItem}\n extraChildComponentProps={{\n commonVideoProps: props.commonVideoProps\n }}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n appLink={props.appLinks?.widgetVideoList?.(props.id, props.name)}\n />\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { VideoWidgetItem } from 'libs/shared/components/widgets/items/video-widget-item/v1';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Video, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nexport interface ThumbnailSlidingListSmallWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Video[];\n analyticsData?: HashObject;\n \n showHighlight?: boolean;\n\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink;\n widgetVideoList: (widgetId: string, widgetName: string) => Core.AppLink;\n }\n\n commonVideoProps: CommonVideoProps;\n}\n\nexport function ThumbnailSlidingListSmallWidgetTemplate(\n props: ThumbnailSlidingListSmallWidgetTemplateProps\n): JSX.Element {\n return (\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Videos}\n collection={props.content}\n childComponent={VideoWidgetItem}\n extraChildComponentProps={{\n commonVideoProps: props.commonVideoProps\n }}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n appLink={props.appLinks?.widgetVideoList?.(props.id, props.name)}\n />\n );\n}","import React from 'react';\n\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { PresentationAudience, VideoTypes } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\n\nimport styles from './video-widget-item-v2.module.scss';\n\nexport interface VideoWidgetItemV2Props extends FixedWidgetItemProps<VideoTypes> {\n presentationAudiences: PresentationAudience[];\n commonVideoProps: CommonVideoProps;\n}\n\nexport const VideoWidgetItemV2 = React.memo(function(props: VideoWidgetItemV2Props): JSX.Element {\n const videoAudiences = props.data?.subjectPresentationAudiences?.data;\n const mergedAudience = useMergeAudiences(videoAudiences, props.presentationAudiences);\n\n return (\n <div className={`px-1 flex-shrink-0 position-relative ${styles.rowWidth}`}>\n <VideoThumbnail\n video={props.data}\n preload={props.preloadImage}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n type='static'\n appLink={props.getAppLink(props.data)}\n imageOptions={{ size: props.thumbnailSize }}\n textPosition={ThumbnailTextPosition.Below}\n audience={mergedAudience}\n hideRating={!!mergedAudience}\n hideDuration={false}\n commonVideoProps={props.commonVideoProps}\n />\n </div>\n );\n});","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { LocalPermissionName } from 'libs/shared/enums/PermissionName';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { HasLocalPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { PresentationAudience, Resource, Series, Video, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { DownloadHelper } from 'libs/shared/utils/DownloadHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { ResourceWidgetItem, ResourceWidgetItemProps } from '../../../items/resource-widget-item/ResourceWidgetItem';\nimport { VideoWidgetItemV2, VideoWidgetItemV2Props } from '../../../items/video-widget-item/v2/VideoWidgetItemV2';\n\ntype MultimediaWidgetItemProps = VideoWidgetItemV2Props & ResourceWidgetItemProps;\n\nfunction MultimediaWidgetItem(props: MultimediaWidgetItemProps): JSX.Element {\n if (VideoHelper.isVideoType(props.data)) {\n return <VideoWidgetItemV2 {...props} />;\n }\n\n function onClickDownload(e: React.MouseEvent<HTMLElement>, resource: Resource): void {\n e.preventDefault();\n e.stopPropagation();\n DownloadHelper.downloadResource(resource, props.analyticsData, props.analyticsOptions);\n }\n\n return (\n <ResourceWidgetItem {...props} location='dashboard' onClickDownload={onClickDownload} />\n );\n}\n\nexport interface ThumbnailSlidingListSmallV2WidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Video[];\n hasLocalPermissions: HasLocalPermissionsFunc;\n resourceThumbnailFallbackImageUrl: string;\n audiences: PresentationAudience[];\n analyticsData?: HashObject;\n \n showHighlight?: boolean;\n \n appLinks: {\n series: (series: Series) => Core.AppLink;\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink;\n resource: (resource: Resource, videoId: string, canViewResources: boolean) => Core.AppLink;\n widgetVideoList: (widgetId: string, widgetName: string) => Core.AppLink;\n }\n\n commonVideoProps: CommonVideoProps;\n}\n\nexport function ThumbnailSlidingListSmallV2WidgetTemplate(\n props: ThumbnailSlidingListSmallV2WidgetTemplateProps\n): JSX.Element {\n const canViewResources = props.hasLocalPermissions(LocalPermissionName.ViewVideoResourceItems);\n\n return (\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Videos}\n collection={props.content}\n childComponent={MultimediaWidgetItem}\n extraChildComponentProps={{\n imageErrorFallbackUrl: props.resourceThumbnailFallbackImageUrl,\n location: 'dashboard',\n titlePosition: 'below',\n actionBehaviour: canViewResources ? 'normal' : 'public',\n presentationAudiences: props.audiences,\n commonVideoProps: props.commonVideoProps,\n imageCdnUrl: props.commonVideoProps.imageCdnUrl\n }}\n getChildAppLink={item => {\n if (VideoHelper.isVideoType(item)) {\n return props.appLinks?.videoType?.(item, {});\n }\n\n return props.appLinks?.resource?.(item, item.parentId, canViewResources);\n }}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n appLink={props.appLinks?.widgetVideoList?.(props.id, props.name)}\n />\n );\n}","import React from 'react';\n\nimport { PartialVideoList } from 'libs/shared/components/video-list/partial-loading/PartialVideoList';\n\nexport function PartialThumbnailVerticalListWidgetTemplate() {\n return (\n <PartialVideoList numVideos={3} />\n );\n}","import React from 'react';\n\nexport function WidgetTemplateCoverFixedPillListLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 51'>\n <path\n d='M0 .4C0 .18.18 0 .4 0h34.764a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H.4a.4.4 0 0 1-.4-.4zm14.89.1v13h20.274a.5.5 0 0 0 .5-.5V1a.5.5 0 0 0-.5-.5zM.4 37a.4.4 0 0 0-.4.4v13.2c0 .22.18.4.4.4h34.764a1 1 0 0 0 1-1V38a1 1 0 0 0-1-1zm34.764 13.5H14.89v-13h20.273a.5.5 0 0 1 .5.5v12a.5.5 0 0 1-.5.5m5.254-13.1c0-.22.18-.4.4-.4h34.764a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H40.818a.4.4 0 0 1-.4-.4zm14.891.1v13h20.273a.5.5 0 0 0 .5-.5V38a.5.5 0 0 0-.5-.5zM40.82 0a.4.4 0 0 0-.4.4v13.2c0 .22.178.4.4.4h34.763a1 1 0 0 0 1-1V1a1 1 0 0 0-1-1zm14.49.5h20.273a.5.5 0 0 1 .5.5v12a.5.5 0 0 1-.5.5H55.309zM81.236 0a.4.4 0 0 0-.4.4v13.2c0 .22.18.4.4.4H116a1 1 0 0 0 1-1V1a1 1 0 0 0-1-1zm14.491 13.5V.5H116a.5.5 0 0 1 .5.5v12a.5.5 0 0 1-.5.5zM.4 18a.4.4 0 0 0-.4.4v13.2c0 .22.18.4.4.4h34.764a1 1 0 0 0 1-1V19a1 1 0 0 0-1-1zm14.49.5h20.274a.5.5 0 0 1 .5.5v12a.5.5 0 0 1-.5.5H14.89zm25.928-.5a.4.4 0 0 0-.4.4v13.2c0 .22.18.4.4.4h34.764a1 1 0 0 0 1-1V19a1 1 0 0 0-1-1zm14.491.5h20.273a.5.5 0 0 1 .5.5v12a.5.5 0 0 1-.5.5H55.309zm25.927-.5a.4.4 0 0 0-.4.4v13.2c0 .22.18.4.4.4H116a1 1 0 0 0 1-1V19a1 1 0 0 0-1-1zm14.491 13.5v-13H116a.5.5 0 0 1 .5.5v12a.5.5 0 0 1-.5.5z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateCoverFixedPillListXSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 93 44'>\n <path\n d='M.7 0a.7.7 0 0 0-.7.7v6.6a.7.7 0 0 0 .7.7h6.6a.7.7 0 0 0 .7-.7V.7a.7.7 0 0 0-.7-.7zm11.115 2.5c-.666 0-1.206.537-1.206 1.2v.6c0 .663.54 1.2 1.206 1.2h27.589c.665 0 1.205-.537 1.205-1.2v-.6c0-.663-.54-1.2-1.206-1.2zM52 .7a.7.7 0 0 1 .7-.7h6.6a.7.7 0 0 1 .7.7v6.6a.7.7 0 0 1-.7.7h-6.6a.7.7 0 0 1-.7-.7zm10.61 3c0-.663.54-1.2 1.205-1.2h27.588c.666 0 1.206.537 1.206 1.2v.6c0 .663-.54 1.2-1.206 1.2H63.815a1.203 1.203 0 0 1-1.206-1.2zM52 12.7a.7.7 0 0 1 .7-.7h6.6a.7.7 0 0 1 .7.7v6.6a.7.7 0 0 1-.7.7h-6.6a.7.7 0 0 1-.7-.7zm10.61 3c0-.663.54-1.2 1.205-1.2h27.588c.666 0 1.206.537 1.206 1.2v.6c0 .663-.54 1.2-1.206 1.2H63.815a1.203 1.203 0 0 1-1.206-1.2zM52.7 24a.7.7 0 0 0-.7.7v6.6a.7.7 0 0 0 .7.7h6.6a.7.7 0 0 0 .7-.7v-6.6a.7.7 0 0 0-.7-.7zm11.115 2.5c-.666 0-1.206.537-1.206 1.2v.6c0 .663.54 1.2 1.206 1.2h27.588c.666 0 1.206-.537 1.206-1.2v-.6c0-.663-.54-1.2-1.206-1.2zM52 36.7a.7.7 0 0 1 .7-.7h6.6a.7.7 0 0 1 .7.7v6.6a.7.7 0 0 1-.7.7h-6.6a.7.7 0 0 1-.7-.7zm10.61 3c0-.663.54-1.2 1.205-1.2h27.588c.666 0 1.206.537 1.206 1.2v.6c0 .663-.54 1.2-1.206 1.2H63.815a1.203 1.203 0 0 1-1.206-1.2zM0 12.7a.7.7 0 0 1 .7-.7h6.6a.7.7 0 0 1 .7.7v6.6a.7.7 0 0 1-.7.7H.7a.7.7 0 0 1-.7-.7zm10.61 3c0-.663.54-1.2 1.205-1.2h27.589c.665 0 1.205.537 1.205 1.2v.6c0 .663-.54 1.2-1.206 1.2H11.816a1.203 1.203 0 0 1-1.206-1.2zM.7 24a.7.7 0 0 0-.7.7v6.6a.7.7 0 0 0 .7.7h6.6a.7.7 0 0 0 .7-.7v-6.6a.7.7 0 0 0-.7-.7zm11.115 2.5c-.666 0-1.206.537-1.206 1.2v.6c0 .663.54 1.2 1.206 1.2h27.589c.665 0 1.205-.537 1.205-1.2v-.6c0-.663-.54-1.2-1.206-1.2zM0 36.7a.7.7 0 0 1 .7-.7h6.6a.7.7 0 0 1 .7.7v6.6a.7.7 0 0 1-.7.7H.7a.7.7 0 0 1-.7-.7zm10.61 3c0-.663.54-1.2 1.205-1.2h27.589c.665 0 1.205.537 1.205 1.2v.6c0 .663-.54 1.2-1.206 1.2H11.816a1.203 1.203 0 0 1-1.206-1.2z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplatePosterSlidingListLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 60'>\n <path\n d='M0 2a2 2 0 0 1 2-2h45.852a2 2 0 0 1 2 2v1a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2zm0 8.795C0 10.356.356 10 .795 10h26.406c.439 0 .795.356.795.795V58.99c0 .44-.356.795-.795.795H.795A.795.795 0 0 1 0 58.99zM30.41 10a.795.795 0 0 0-.796.795V58.99c0 .44.356.795.795.795h26.406c.439 0 .795-.355.795-.795V10.795a.795.795 0 0 0-.795-.795zm28.818.795c0-.439.356-.795.795-.795h26.568c.439 0 .795.356.795.795V58.99c0 .44-.356.795-.795.795H60.024a.795.795 0 0 1-.796-.795zM89.638 10a.795.795 0 0 0-.796.795V58.99c0 .44.356.795.796.795h26.567a.795.795 0 0 0 .795-.795V10.795a.795.795 0 0 0-.795-.795z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplatePosterSlidingListMediumSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 50'>\n <path\n d='M2 0a2 2 0 0 0-2 2v1a2 2 0 0 0 2 2h45.852a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zM.632 10a.63.63 0 0 0-.632.632v38.319c0 .349.283.632.632.632h20.994c.35 0 .633-.283.633-.633V10.633a.63.63 0 0 0-.633-.632zm22.913.632c0-.349.283-.632.632-.632h20.994c.35 0 .633.283.633.632v38.319c0 .349-.283.632-.633.632H24.178a.63.63 0 0 1-.633-.633zM47.723 10a.63.63 0 0 0-.633.632v38.319c0 .349.283.632.633.632h21.122c.35 0 .633-.283.633-.633V10.633a.63.63 0 0 0-.633-.632zm46.89.632c0-.349.283-.632.632-.632h21.123c.349 0 .632.283.632.632v38.319c0 .349-.283.632-.632.632H95.245a.63.63 0 0 1-.632-.633zM71.268 10a.63.63 0 0 0-.633.632v38.319c0 .349.283.632.633.632H92.39a.63.63 0 0 0 .632-.633V10.633A.63.63 0 0 0 92.39 10z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplatePosterSlidingListSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 44'>\n <path\n d='M0 2a2 2 0 0 1 2-2h45.852a2 2 0 0 1 2 2v1a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2zm0 8.533C0 10.239.24 10 .537 10H18.05c.296 0 .537.239.537.533v32.302c0 .295-.24.533-.537.533H.537A.535.535 0 0 1 0 42.835zM20.198 10a.535.535 0 0 0-.537.533v32.302c0 .295.24.533.537.533h17.513a.535.535 0 0 0 .537-.533V10.533A.535.535 0 0 0 37.71 10zm19.124.533c0-.294.24-.533.537-.533h17.62c.297 0 .538.239.538.533v32.302c0 .295-.241.533-.538.533H39.86a.535.535 0 0 1-.537-.533zM59.521 10a.535.535 0 0 0-.538.533v32.302c0 .295.241.533.538.533h17.62a.535.535 0 0 0 .537-.533V10.533A.535.535 0 0 0 77.14 10zm19.231.533c0-.294.24-.533.537-.533h17.513c.296 0 .537.239.537.533v32.302c0 .295-.24.533-.537.533H79.289a.535.535 0 0 1-.537-.533zM98.95 10a.535.535 0 0 0-.537.533v32.302c0 .295.24.533.537.533h17.513a.535.535 0 0 0 .537-.533V10.533a.535.535 0 0 0-.537-.533z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateStatsCoverFixedPillListLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 81 31'>\n <g clipPath='url(#a)'>\n <path\n fill='currentColor'\n d='M0 1.643a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1H1a1 1 0 0 1-1-1zm11 0a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H12a1 1 0 0 1-1-1zm-11 11a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1H1a1 1 0 0 1-1-1zm11 0a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H12a1 1 0 0 1-1-1zm-10 10a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1v-6a1 1 0 0 0-1-1zm11 0a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1zm16-21a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1zm11 0a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H40a1 1 0 0 1-1-1zm-10 10a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1v-6a1 1 0 0 0-1-1zm11 0a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1zm-12 12a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1zm11 0a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H40a1 1 0 0 1-1-1zm18-23a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1v-6a1 1 0 0 0-1-1zm11 0a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1zm-12 12a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1zm11 0a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H68a1 1 0 0 1-1-1zm-10 10a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1v-6a1 1 0 0 0-1-1zm11 0a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1z'\n />\n </g>\n <defs>\n <clipPath id='a'>\n <path fill='currentColor' d='M0 .643h81v30H0z' />\n </clipPath>\n </defs>\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailFeaturedMediaSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 44'>\n <path\n d='M2.762 0a2.762 2.762 0 0 0 0 5.524h49.076a2.762 2.762 0 1 0 0-5.524zM1.065 11.048A1.06 1.06 0 0 0 0 12.103v30.085a1.06 1.06 0 0 0 1.065 1.056h54.699a1.06 1.06 0 0 0 1.065-1.056V12.103a1.06 1.06 0 0 0-1.065-1.055zm61.878 0a1.657 1.657 0 1 0 0 3.314h52.4a1.657 1.657 0 0 0 0-3.314zm-1.657 8.285c0-.915.742-1.657 1.657-1.657h52.4a1.657 1.657 0 0 1 0 3.315h-52.4a1.657 1.657 0 0 1-1.657-1.658'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailHeroMediaSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 67'>\n <path\n d='M0 2.192C0 .982.981 0 2.192 0h112.616C116.019 0 117 .981 117 2.192v62.473c0 1.21-.981 2.192-2.192 2.192H2.192A2.19 2.19 0 0 1 0 64.665z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nimport { PartialThumbnailVerticalListWidgetTemplate } from '../../thumbnail-vertical-list/partial-loading/PartialThumbnailVerticalListWidgetTemplate';\n\nexport function PartialCurriculumCodeSearchResultsWidgetTemplate(): JSX.Element {\n return (\n <>\n <div className='partial-loading-background rounded-3 mb-3 w-100' style={{ height: '5rem' }}></div>\n <PartialThumbnailVerticalListWidgetTemplate />\n </>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateAuthorReviewerSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 34'>\n <path\n fill='currentColor'\n d='M55.055.922H1.462C.654.922 0 1.588 0 2.41v29.745c0 .822.654 1.488 1.462 1.488h53.593c.807 0 1.462-.666 1.462-1.488V2.41c0-.822-.655-1.488-1.462-1.488M.975 32.155V2.41c0-.274.218-.496.487-.496h53.593c.27 0 .487.222.487.496v29.745a.49.49 0 0 1-.487.496H1.462a.49.49 0 0 1-.488-.496m10.23-14.873c2.692 0 4.873-2.22 4.873-4.957 0-2.738-2.181-4.958-4.872-4.958s-4.872 2.22-4.872 4.958 2.181 4.958 4.872 4.958m11.408-6.742c-.65 0-1.175.533-1.175 1.19v.595c0 .657.526 1.19 1.175 1.19H39.75c.649 0 1.175-.533 1.175-1.19v-.595c0-.657-.526-1.19-1.175-1.19zM7.509 22.934c-.65 0-1.175.533-1.175 1.19v.595c0 .657.526 1.19 1.175 1.19h42.473c.65 0 1.176-.533 1.176-1.19v-.595c0-.657-.527-1.19-1.176-1.19zM115.513.922H60.979c-.822 0-1.487.666-1.487 1.488v29.745c0 .822.666 1.488 1.487 1.488h54.534c.821 0 1.487-.666 1.487-1.488V2.41c0-.822-.666-1.488-1.487-1.488m-55.03 31.233V2.41c0-.274.222-.496.496-.496h54.534c.273 0 .495.222.495.496v29.745a.496.496 0 0 1-.495.496H60.979a.496.496 0 0 1-.496-.496m10.411-14.873a4.958 4.958 0 1 0 0-9.915 4.958 4.958 0 0 0 0 9.915m11.607-6.742c-.66 0-1.196.533-1.196 1.19v.595c0 .657.535 1.19 1.196 1.19H99.94c.66 0 1.196-.533 1.196-1.19v-.595c0-.657-.536-1.19-1.196-1.19zM67.132 22.934c-.66 0-1.196.533-1.196 1.19v.595c0 .657.536 1.19 1.196 1.19h43.219c.66 0 1.196-.533 1.196-1.19v-.595c0-.657-.536-1.19-1.196-1.19z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateCircleLogoSlidingListSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 22'>\n <path\n d='M0 2C0 .895.844 0 1.886 0h43.228C46.156 0 47 .895 47 2v1c0 1.105-.844 2-1.886 2H1.886C.844 5 0 4.105 0 3zm11.524 14.238a5.762 5.762 0 1 1-11.524 0 5.762 5.762 0 0 1 11.524 0M20.429 22a5.762 5.762 0 1 0 0-11.524 5.762 5.762 0 0 0 0 11.524m21.476-5.762a5.762 5.762 0 1 1-11.524 0 5.762 5.762 0 0 1 11.524 0M50.809 22a5.762 5.762 0 1 0 0-11.524 5.762 5.762 0 0 0 0 11.524m20.43-5.762a5.762 5.762 0 1 1-11.525 0 5.762 5.762 0 0 1 11.524 0M80.142 22a5.762 5.762 0 1 0 0-11.524 5.762 5.762 0 0 0 0 11.524m20.428-5.762a5.762 5.762 0 1 1-11.523 0 5.762 5.762 0 0 1 11.523 0M110.524 22a5.762 5.762 0 1 0 0-11.524 5.762 5.762 0 0 0 0 11.524'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateCoverFixedTileListSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 57'>\n <path\n d='M0 2.543A2.543 2.543 0 0 1 2.543 0H47.31a2.544 2.544 0 0 1 0 5.087H2.543A2.543 2.543 0 0 1 0 2.543m47.817 8.14c0-.281.228-.51.51-.51h20.347c.28 0 .509.229.509.51v21.365a.51.51 0 0 1-.51.508H48.327a.51.51 0 0 1-.509-.508zm-22.89-.51a.51.51 0 0 0-.51.51v21.365c0 .28.228.508.51.508h20.347a.51.51 0 0 0 .509-.508V10.683a.51.51 0 0 0-.51-.51zm69.69.51c0-.281.228-.51.51-.51h21.364a.51.51 0 0 1 .509.51v21.365a.51.51 0 0 1-.509.508H95.126a.51.51 0 0 1-.509-.508zm-22.89-.51a.51.51 0 0 0-.51.51v21.365c0 .28.228.508.51.508h20.347a.51.51 0 0 0 .509-.508V10.683a.51.51 0 0 0-.51-.51zM0 10.684c0-.281.228-.51.509-.51h21.365c.28 0 .509.229.509.51v21.365a.51.51 0 0 1-.51.508H.51A.51.51 0 0 1 0 32.048zM48.326 34.59a.51.51 0 0 0-.509.51v21.364c0 .281.228.509.51.509h20.347a.51.51 0 0 0 .509-.509V35.1a.51.51 0 0 0-.51-.509zm-23.909.51c0-.282.228-.51.51-.51h20.347c.28 0 .509.228.509.51v21.364a.51.51 0 0 1-.51.509H24.927a.51.51 0 0 1-.509-.509zM.51 34.59a.51.51 0 0 0-.509.51v21.364c0 .281.228.509.509.509h21.365a.51.51 0 0 0 .509-.509V35.1a.51.51 0 0 0-.51-.509z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateCoverSlidingPillListSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 19'>\n <path\n d='M0 2a2 2 0 0 1 2-2h45.755a2 2 0 0 1 2 2v1a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2zm27.432 7H1a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h26.432a1 1 0 0 0 1-1v-8a1 1 0 0 0-1-1m0 9.5H10.154v-9h17.278a.5.5 0 0 1 .5.5v8a.5.5 0 0 1-.5.5m60.91-8.5a1 1 0 0 0-1-1h-22.37a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h22.37a1 1 0 0 0 1-1zm-1 8.5H74.124v-9h13.216a.5.5 0 0 1 .5.5v8a.5.5 0 0 1-.5.5M60.94 9H31.462a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1H60.94a1 1 0 0 0 1-1v-8a1 1 0 0 0-1-1m0 9.5H40.617v-9H60.94a.5.5 0 0 1 .5.5v8a.5.5 0 0 1-.5.5m55.833-8.5a1 1 0 0 0-1-1h-24.4a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h24.4a1 1 0 0 0 1-1zm-1 8.5h-15.247v-9h15.247a.5.5 0 0 1 .5.5v8a.5.5 0 0 1-.5.5'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateEditableCoverFixedPillListSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 40'>\n <path\n d='M.976 0h25.798c.539 0 .976.537.976 1.2v9.6c0 .663-.437 1.2-.976 1.2H.976C.437 12 0 11.463 0 10.8V1.2C0 .537.437 0 .976 0m8.935 11.4h16.863c.27 0 .488-.269.488-.6V1.2c0-.331-.218-.6-.488-.6H9.911zM30.726 0h25.798c.539 0 .976.537.976 1.2v9.6c0 .663-.437 1.2-.976 1.2H30.726c-.539 0-.976-.537-.976-1.2V1.2c0-.663.437-1.2.976-1.2m8.935 11.4h16.863c.27 0 .488-.269.488-.6V1.2c0-.331-.218-.6-.488-.6H39.661zM86.274 0H60.476c-.539 0-.976.537-.976 1.2v9.6c0 .663.437 1.2.976 1.2h25.798c.539 0 .976-.537.976-1.2V1.2c0-.663-.437-1.2-.976-1.2m0 11.4H69.411V.6h16.863c.27 0 .488.269.488.6v9.6c0 .331-.219.6-.488.6M90.226 0h25.798c.539 0 .976.537.976 1.2v9.6c0 .663-.437 1.2-.976 1.2H90.226c-.539 0-.976-.537-.976-1.2V1.2c0-.663.437-1.2.976-1.2m8.935 11.4h16.863c.27 0 .488-.269.488-.6V1.2c0-.331-.218-.6-.488-.6H99.161zM26.774 14H.976C.437 14 0 14.537 0 15.2v9.6c0 .663.437 1.2.976 1.2h25.798c.539 0 .976-.537.976-1.2v-9.6c0-.663-.437-1.2-.976-1.2m0 11.4H9.911V14.6h16.863c.27 0 .488.269.488.6v9.6c0 .331-.218.6-.488.6M30.726 14h25.798c.539 0 .976.537.976 1.2v9.6c0 .663-.437 1.2-.976 1.2H30.726c-.539 0-.976-.537-.976-1.2v-9.6c0-.663.437-1.2.976-1.2m8.935 11.4h16.863c.27 0 .488-.269.488-.6v-9.6c0-.331-.218-.6-.488-.6H39.661zM86.274 14H60.476c-.539 0-.976.537-.976 1.2v9.6c0 .663.437 1.2.976 1.2h25.798c.539 0 .976-.537.976-1.2v-9.6c0-.663-.437-1.2-.976-1.2m0 11.4H69.411V14.6h16.863c.27 0 .488.269.488.6v9.6c0 .331-.219.6-.488.6M90.226 14h25.798c.539 0 .976.537.976 1.2v9.6c0 .663-.437 1.2-.976 1.2H90.226c-.539 0-.976-.537-.976-1.2v-9.6c0-.663.437-1.2.976-1.2m8.935 11.4h16.863c.27 0 .488-.269.488-.6v-9.6c0-.331-.218-.6-.488-.6H99.161zM26.774 28H.976C.437 28 0 28.537 0 29.2v9.6c0 .663.437 1.2.976 1.2h25.798c.539 0 .976-.537.976-1.2v-9.6c0-.663-.437-1.2-.976-1.2m0 11.4H9.911V28.6h16.863c.27 0 .488.269.488.6v9.6c0 .331-.218.6-.488.6M30.726 28h25.798c.539 0 .976.537.976 1.2v9.6c0 .663-.437 1.2-.976 1.2H30.726c-.539 0-.976-.537-.976-1.2v-9.6c0-.663.437-1.2.976-1.2m8.935 11.4h16.863c.27 0 .488-.269.488-.6v-9.6c0-.331-.218-.6-.488-.6H39.661z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateEventIconSlidingListSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 32'>\n <path\n d='M2.5 0a2.5 2.5 0 0 0 0 5h44.852a2.5 2.5 0 0 0 0-5zm46.317 31h20V11h-20zm-1-20.5a.5.5 0 0 1 .5-.5h21a.5.5 0 0 1 .5.5v21a.5.5 0 0 1-.5.5h-21a.5.5 0 0 1-.5-.5zM57.1 24.701h.136q.944 0 1.573-.246.634-.253 1.011-.697t.54-1.046q.117-.426.15-.903l-.013.014q-.375.41-.882.657a2.4 2.4 0 0 1-1.087.246q-.71 0-1.258-.267a2.64 2.64 0 0 1-.902-.738 3.3 3.3 0 0 1-.533-1.067 4.4 4.4 0 0 1-.178-1.264q0-.718.219-1.347.219-.63.636-1.107a2.86 2.86 0 0 1 1.011-.752 3.25 3.25 0 0 1 1.36-.274q.808 0 1.416.315t1.025.868q.417.553.63 1.285.21.732.211 1.572v.581q0 .883-.157 1.702a5.7 5.7 0 0 1-.513 1.511q-.348.69-.923 1.217a4 4 0 0 1-1.394.813q-.82.288-1.928.287h-.15zm3.424-5.01v.658q-.135.305-.369.551-.24.253-.56.404a1.7 1.7 0 0 1-.704.143q-.404 0-.704-.17a1.5 1.5 0 0 1-.5-.466 2.2 2.2 0 0 1-.3-.67 3.3 3.3 0 0 1-.096-.792q0-.439.103-.82.11-.39.307-.677a1.5 1.5 0 0 1 .5-.458q.3-.171.676-.171.342 0 .636.157.3.157.526.472.232.307.355.772.13.457.13 1.066M24.917 10a.5.5 0 0 0-.5.5v21a.5.5 0 0 0 .5.5h21a.5.5 0 0 0 .5-.5v-21a.5.5 0 0 0-.5-.5zM95 10.5a.5.5 0 0 1 .5-.5h21a.5.5 0 0 1 .5.5v21a.5.5 0 0 1-.5.5h-21a.5.5 0 0 1-.5-.5zM71.717 10a.5.5 0 0 0-.5.5v21a.5.5 0 0 0 .5.5h21a.5.5 0 0 0 .5-.5v-21a.5.5 0 0 0-.5-.5zM1 11h20v20H1zm-.5-1a.5.5 0 0 0-.5.5v21a.5.5 0 0 0 .5.5h21a.5.5 0 0 0 .5-.5v-21a.5.5 0 0 0-.5-.5zm13.884 6.95v-.903H7.486v1.312h5.155L8.669 26h1.736z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateFeaturedThumbnailSlidingListSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 27'>\n <path\n d='M5 0a5 5 0 0 0-5 5 4 4 0 0 0 4 4h109a4 4 0 0 0 4-4 5 5 0 0 0-5-5zM0 11.5a.5.5 0 0 1 .5-.5h27a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5zm30.5-.5a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h27a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5zm29.5.5a.5.5 0 0 1 .5-.5h26a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-.5.5h-26a.5.5 0 0 1-.5-.5zm29 0a.5.5 0 0 1 .5-.5h27a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-.5.5h-27a.5.5 0 0 1-.5-.5z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateFilterSlidingPillListSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 19'>\n <path\n d='M2 0a2 2 0 0 0-2 2v1a2 2 0 0 0 2 2h45.755a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zM1 9a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h25a1 1 0 0 0 1-1v-8a1 1 0 0 0-1-1zm59 1a1 1 0 0 1 1-1h25a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1H61a1 1 0 0 1-1-1zM31 9a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h25a1 1 0 0 0 1-1v-8a1 1 0 0 0-1-1zm59 1a1 1 0 0 1 1-1h25a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1H91a1 1 0 0 1-1-1z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateHeadingSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props} viewBox='0 0 117 25'>\n <path\n d='M4.77.78h48.839a4.5 4.5 0 1 1 0 9H4.769a4.5 4.5 0 1 1 0-9M.27 16.479c0 .914.74 1.655 1.655 1.655h112.932a1.655 1.655 0 0 0 0-3.31H1.925c-.915 0-1.655.741-1.655 1.655m0 6c0-.914.74-1.655 1.655-1.655h112.932a1.655 1.655 0 0 1 0 3.31H1.925A1.655 1.655 0 0 1 .27 22.478'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateHeroBannerSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 10'>\n <path\n d='M0 .391C0 .175.38 0 .847 0h115.306c.468 0 .847.175.847.391V9.61c0 .216-.379.391-.847.391H.847C.38 10 0 9.825 0 9.609z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateHeroBannerSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 22'>\n <path\n d='M0 .847C0 .38.38 0 .847 0h115.306c.468 0 .847.38.847.847v19.95a.847.847 0 0 1-.847.848H.847A.847.847 0 0 1 0 20.798z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateHeroBlockColourSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 119 12'>\n <path\n fill='currentColor'\n d='M1.847.143c-.29 0-.576.053-.809.16C.848.391.5.613.5 1.034v9.217c0 .42.348.643.538.731.233.107.52.16.81.16h115.305c.289 0 .576-.053.809-.16.19-.088.538-.31.538-.73V1.033c0-.42-.348-.643-.538-.73a2 2 0 0 0-.809-.161zM1.5 10.09V1.194c.079-.027.199-.051.347-.051H117.5v9H1.847c-.148 0-.268-.024-.347-.052'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateHeroThumbnailSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 119 12'>\n <path\n fill='currentColor'\n d='M1.847.5c-.29 0-.576.053-.809.16C.848.75.5.972.5 1.392v9.218c0 .42.348.642.538.73.233.108.52.161.81.161h115.305c.289 0 .576-.053.809-.16.19-.089.538-.311.538-.731V1.39c0-.42-.348-.642-.538-.73a2 2 0 0 0-.809-.161zM1.5 10.448V1.552c.079-.028.199-.052.347-.052H82v9H1.847c-.148 0-.268-.024-.347-.052'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateOnboardingStepsSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 118 23'>\n <path\n d='M116.5 0H1.5A1.5 1.5 0 0 0 0 1.5v20A1.5 1.5 0 0 0 1.5 23h115a1.5 1.5 0 0 0 1.5-1.5v-20a1.5 1.5 0 0 0-1.5-1.5M1 21.5v-20a.5.5 0 0 1 .5-.5h115a.5.5 0 0 1 .5.5v20a.5.5 0 0 1-.5.5H1.5a.5.5 0 0 1-.5-.5m10.5-5a5 5 0 1 0 0-10 5 5 0 0 0 0 10m76-8a1 1 0 0 1 1-1h22a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1h-22a1 1 0 0 1-1-1zm-67.5 3a.5.5 0 0 0 0 1h23a.5.5 0 0 0 0-1z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplatePopoutThumbnailSlidingListLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 38'>\n <path\n d='M0 2.688a2.5 2.5 0 0 1 2.5-2.5h45.733a2.5 2.5 0 0 1 0 5H2.5a2.5 2.5 0 0 1-2.5-2.5m79.427 8a.5.5 0 0 1 .5-.5H116.5a.5.5 0 0 1 .5.5V30.64a.5.5 0 0 1-.5.5H79.927a.5.5 0 0 1-.5-.5zm-39.714 0a.5.5 0 0 1 .5-.5h36.573a.5.5 0 0 1 .5.5V30.64a.5.5 0 0 1-.5.5H40.213a.5.5 0 0 1-.5-.5zM0 10.688a.5.5 0 0 1 .5-.5h36.573a.5.5 0 0 1 .5.5V30.64a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5zm.028 24.466a2 2 0 0 1 2-2h24.497a2 2 0 0 1 0 4H2.028a2 2 0 0 1-2-2m39.75 0a2 2 0 0 1 2-2h24.498a2 2 0 1 1 0 4H41.78a2 2 0 0 1-2-2m39.61 0a2 2 0 0 1 2-2h24.498a2 2 0 1 1 0 4H81.389a2 2 0 0 1-2-2'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplatePopoutThumbnailSlidingListSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 32'>\n <path\n d='M2.5 0a2.5 2.5 0 0 0 0 5h44a2.5 2.5 0 0 0 0-5zm58 10a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h26a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5zm29 0a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h27a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5zm-59 0a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h27a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5zm-30 0a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h27a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5zM0 30c0-1.105.628-2 1.404-2h17.192c.776 0 1.404.895 1.404 2s-.628 2-1.404 2H1.404C.628 32 0 31.105 0 30m89 0c0-1.105.628-2 1.404-2h17.192c.776 0 1.404.895 1.404 2s-.628 2-1.404 2H90.404C89.628 32 89 31.105 89 30m-29 0c0-1.105.628-2 1.404-2h17.192c.776 0 1.404.895 1.404 2s-.628 2-1.404 2H61.404C60.628 32 60 31.105 60 30m-30 0c0-1.105.628-2 1.404-2h17.192c.776 0 1.404.895 1.404 2s-.628 2-1.404 2H31.404C30.628 32 30 31.105 30 30'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateQuestionAccordionSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 34'>\n <path\n fill='currentColor'\n d='M1.655 0h22.932a1.655 1.655 0 0 1 0 3.31H1.656a1.655 1.655 0 0 1 0-3.31M116 10V6H1v4zM1 11a1 1 0 0 1-1-1V6a1 1 0 0 1 1-1h115a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1zm0 14.31v-11h115v11zm-1 0a1 1 0 0 0 1 1h115a1 1 0 0 0 1-1v-11a1 1 0 0 0-1-1H1a1 1 0 0 0-1 1zm3.833-9.477H2.167a.166.166 0 1 0 0 .333h1.666A.17.17 0 0 0 4 16l-.001-.02a.17.17 0 0 0-.166-.147M1 33v-4h115v4zm-1 0a1 1 0 0 0 1 1h115a1 1 0 0 0 1-1v-4a1 1 0 0 0-1-1H1a1 1 0 0 0-1 1zm3-3c.092 0 .167.076.167.167v.666h.666c.086 0 .156.064.166.147L4 31a.17.17 0 0 1-.167.167h-.666v.666a.17.17 0 0 1-.147.166L3 32a.17.17 0 0 1-.167-.167v-.666h-.666a.166.166 0 1 1 0-.334h.666v-.666c0-.092.074-.167.167-.167m.167-22.833a.166.166 0 1 0-.333 0v.666h-.667a.166.166 0 1 0 0 .333h.666v.667c0 .091.075.167.167.167l.02-.001a.17.17 0 0 0 .147-.166v-.666h.666A.17.17 0 0 0 4 8l-.001-.02a.17.17 0 0 0-.166-.147h-.666z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateQuestionSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 20'>\n <path\n fill='currentColor'\n d='M24.588 1.285H1.654a1.655 1.655 0 0 0 0 3.31h22.932a1.655 1.655 0 0 0 0-3.31M1 7.595v11h115v-11zm0 12a1 1 0 0 1-1-1v-11a1 1 0 0 1 1-1h115a1 1 0 0 1 1 1v11a1 1 0 0 1-1 1zm113.167-10.5a.17.17 0 0 0-.167-.167.167.167 0 0 0-.167.167v.666h-.666a.167.167 0 1 0 0 .333h.666v.667c0 .091.075.167.167.167l.02-.001a.17.17 0 0 0 .147-.166v-.666h.666a.17.17 0 0 0 .167-.167l-.001-.02a.17.17 0 0 0-.166-.147h-.666zm-109.501.19c-.92 0-1.666.672-1.666 1.5 0 .829.746 1.5 1.666 1.5h52.668c.92 0 1.666-.671 1.666-1.5 0-.828-.746-1.5-1.666-1.5z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailFixedListLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 22'>\n <path\n d='M.413 0C.185 0 0 .385 0 .861v20.278c0 .476.185.861.413.861h56.174c.228 0 .413-.386.413-.861V.861C57 .385 56.815 0 56.587 0zm60 0C60.185 0 60 .385 60 .861v20.278c0 .476.185.861.413.861h56.174c.228 0 .413-.386.413-.861V.861c0-.476-.185-.861-.413-.861z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailFixedListMediaLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 43'>\n <path\n d='M2.5 0a2.5 2.5 0 0 0 0 5h45.733a2.5 2.5 0 0 0 0-5zM0 11.119a1 1 0 0 1 1-1h55.498a1 1 0 0 1 1 1V41.82a1 1 0 0 1-1 1H1a1 1 0 0 1-1-1zm59.502 0a1 1 0 0 1 1-1H116a1 1 0 0 1 1 1V41.82a1 1 0 0 1-1 1H60.502a1 1 0 0 1-1-1z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailFixedListSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 30'>\n <path\n d='M.268 0C.12 0 0 .245 0 .548v12.904c0 .303.12.548.268.548h36.464c.148 0 .268-.245.268-.548V.548C37 .245 36.88 0 36.732 0zm40 0C40.12 0 40 .245 40 .548v12.904c0 .303.12.548.268.548h36.464c.148 0 .268-.245.268-.548V.548C77 .245 76.88 0 76.732 0zM80 .548c0-.303.12-.548.268-.548h36.464c.148 0 .268.245.268.548v12.904c0 .303-.12.548-.268.548H80.268c-.148 0-.268-.245-.268-.548zM.268 16C.12 16 0 16.245 0 16.548v12.904c0 .303.12.548.268.548h36.464c.148 0 .268-.245.268-.548V16.548c0-.303-.12-.548-.268-.548zM40 16.548c0-.303.12-.548.268-.548h36.464c.148 0 .268.245.268.548v12.904c0 .303-.12.548-.268.548H40.268c-.148 0-.268-.245-.268-.548zM80.268 16c-.148 0-.268.245-.268.548v12.904c0 .303.12.548.268.548h36.464c.148 0 .268-.245.268-.548V16.548c0-.303-.12-.548-.268-.548z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailFixedListXLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 119 24'>\n <path\n fill='currentColor'\n d='M1.847.5C1.103.5.5 1.103.5 1.847v19.95c0 .745.603 1.348 1.347 1.348h115.306c.744 0 1.347-.603 1.347-1.347V1.848c0-.745-.603-1.348-1.347-1.348zM1.5 1.847c0-.192.155-.347.347-.347h76.18Q78 1.666 78 1.861v20.284H1.847a.347.347 0 0 1-.347-.347z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailSlidingListLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 31'>\n <path\n d='M2.5 0a2.5 2.5 0 0 0 0 5h45.733a2.5 2.5 0 0 0 0-5zm77.427 10a.5.5 0 0 0-.5.5v19.953a.5.5 0 0 0 .5.5H116.5a.5.5 0 0 0 .5-.5V10.5a.5.5 0 0 0-.5-.5zm-40.214.5a.5.5 0 0 1 .5-.5h36.573a.5.5 0 0 1 .5.5v19.953a.5.5 0 0 1-.5.5H40.213a.5.5 0 0 1-.5-.5zM.5 10a.5.5 0 0 0-.5.5v19.953a.5.5 0 0 0 .5.5h36.573a.5.5 0 0 0 .5-.5V10.5a.5.5 0 0 0-.5-.5z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailSlidingListSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 26'>\n <path\n d='M0 2.5A2.5 2.5 0 0 1 2.5 0h44a2.5 2.5 0 0 1 0 5h-44A2.5 2.5 0 0 1 0 2.5m60 8a.5.5 0 0 1 .5-.5h26a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-.5.5h-26a.5.5 0 0 1-.5-.5zm29.5-.5a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h27a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5zm-59.5.5a.5.5 0 0 1 .5-.5h27a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-.5.5h-27a.5.5 0 0 1-.5-.5zM.5 10a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h27a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailVerticalListSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 36'>\n <path\n fill='currentColor'\n d='M0 .5A.5.5 0 0 1 .5 0h27a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5zM31.913 0a1.655 1.655 0 0 0 0 3.31h22.932a1.655 1.655 0 0 0 0-3.31zm-1.655 7.655c0-.914.74-1.655 1.655-1.655h82.932a1.655 1.655 0 0 1 0 3.31H31.913a1.655 1.655 0 0 1-1.655-1.655m1.655 4.535a1.655 1.655 0 0 0 0 3.31h62.932a1.655 1.655 0 0 0 0-3.31zM.5 20a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h27a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5zm31.413 0a1.655 1.655 0 0 0 0 3.31h22.932a1.655 1.655 0 0 0 0-3.31zm-1.655 7.655c0-.914.74-1.655 1.655-1.655h82.932a1.655 1.655 0 0 1 0 3.31H31.913a1.655 1.655 0 0 1-1.655-1.655m1.655 4.535a1.655 1.655 0 0 0 0 3.31h62.932a1.655 1.655 0 0 0 0-3.31z'\n />\n </svg>\n );\n}\n","import { AuthorReviewerWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/author-reviewer/AuthorReviewerWidgetTemplate';\nimport { PartialAuthorReviewerWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/author-reviewer/partial-loading/PartialAuthorReviewerWidgetTemplate';\nimport { CircleLogoSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/circle-logo-sliding-list/CircleLogoSlidingListWidgetTemplate';\nimport { PartialCircleLogoSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/circle-logo-sliding-list/partial-loading/PartialCircleLogoSlidingList';\nimport { CoverFixedPillListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-fixed-pill-list-large/CoverFixedPillListLargeWidgetTemplate';\nimport { PartialCoverFixedPillListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-fixed-pill-list-large/partial-loading/PartialCoverFixedPillListLargeWidgetTemplate';\nimport { CoverFixedPillListXSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-fixed-pill-list-xsmall/CoverFixedPillListXSmallWidgetTemplate';\nimport { PartialCoverFixedPillListXSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-fixed-pill-list-xsmall/partial-loading/PartialCoverFixedPillListXSmallWidgetTemplate';\nimport { CoverFixedTileListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-fixed-tile-list/CoverFixedTileListWidgetTemplate';\nimport { PartialCoverFixedTileListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-fixed-tile-list/partial-loading/PartialCoverFixedTileListWidgetTemplate';\nimport { CoverSlidingPillListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-sliding-pill-list-small/CoverSlidingPillListSmallWidgetTemplate';\nimport { PartialCoverSlidingPillListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-sliding-pill-list-small/partial-loading/PartialCoverSlidingPillListSmallWidgetTemplate';\nimport { CurriculumCodeSearchResultsWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/curriculum-code-search-results/CurriculumCodeSearchResultsWidgetTemplate';\nimport { CurriculumResourcesAccordionWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/curriculum-resources-accordion/CurriculumResourcesAccordionWidgetTemplate';\nimport { PartialCurriculumResourcesAccordionWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/curriculum-resources-accordion/partial-loading/PartialCurriculumResourcesAccordionWidgetTemplate';\nimport { EditableCoverFixedPillListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/editable-cover-fixed-pill-list-small/EditableCoverFixedPillListSmallWidgetTemplate';\nimport { PartialEditableCoverFixedPillListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/editable-cover-fixed-pill-list-small/partial-loading/PartialEditableCoverFixedPillListSmallWidgetTemplate';\nimport { EventIconSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/event-icon-sliding-list/EventIconSlidingListWidgetTemplate';\nimport { PartialEventIconSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/event-icon-sliding-list/partial-loading/PartialEventIconSlidingListWidgetTemplate';\nimport { FeaturedThumbnailSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/featured-thumbnail-sliding-list/FeaturedThumbnailSlidingListWidgetTemplate';\nimport { PartialFeaturedThumbnailSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/featured-thumbnail-sliding-list/partial-loading/PartialFeaturedThumbnailSlidingListWidgetTemplate';\nimport { FilterSlidingPillListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/filter-sliding-pill-list-small/FilterSlidingPillListSmallWidgetTemplate';\nimport { PartialFilterSlidingPillListSmall } from 'libs/shared/components/widgets/curated-widgets/templates/filter-sliding-pill-list-small/partial-loading/PartialFilterSlidingPillListSmall';\nimport { HeadingWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/heading/HeadingWidgetTemplate';\nimport { PartialHeadingWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/heading/partial-loading/PartialHeadingWidgetTemplate';\nimport { HeroBannerWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner/HeroBannerWidgetTemplate';\nimport { PartialHeroBannerWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner/partial-loading/PartialHeroBannerWidgetTemplate';\nimport { HeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/HeroBannerSmallWidgetTemplate';\nimport { PartialHeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/partial-loading/PartialHeroBannerSmallWidgetTemplate';\nimport { HeroBlockColourSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-block-colour-small/HeroBlockColourSmallWidgetTemplate';\nimport { PartialHeroBlockColourSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-block-colour-small/partial-loading/PartialHeroBlockColourSmallWidgetTemplate';\nimport { HeroThumbnailSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-thumbnail-small/HeroThumbnailSmallWidgetTemplate';\nimport { PartialHeroThumbnailSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-thumbnail-small/partial-loading/PartialHeroThumbnailSmallWidgetTemplate';\nimport { OnboardingStepsWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/onboarding-steps/OnboardingStepsWidgetTemplate';\nimport { PartialPopoutThumbnailSlidingListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_large/partial-loading/PartialPopoutThumbnailSlidingListLarge';\nimport { PopoutThumbnailSlidingListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_large/PopoutThumbnailSlidingListLargeWidgetTemplate';\nimport { PartialPopoutThumbnailSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_small/partial-loading/PartialPopoutThumbnailSlidingListSmall';\nimport { PopoutThumbnailSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_small/PopoutThumbnailSlidingListSmallWidgetTemplate';\nimport { PartialPosterFixedListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-fixed-list-large/partial-loading/PartialPosterFixedListLargeWidgetTemplate';\nimport { PosterFixedListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-fixed-list-large/PosterFixedListLargeWidgetTemplate';\nimport { PartialPosterSlidingListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-large/partial-loading/PartialPosterSlidingListLargeWidgetTemplate';\nimport { PosterSlidingListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-large/PosterSlidingListLargeWidgetTemplate';\nimport { PartialPosterSlidingListMediumWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-medium/partial-loading/PartialPosterSlidingListMediumWidgetTemplate';\nimport { PosterSlidingListMediumWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-medium/PosterSlidingListMediumWidgetTemplate';\nimport { ClassificationPosterSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-small/classification/ClassificationPosterSlidingListSmallWidgetTemplate';\nimport { PartialPosterSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-small/partial-loading/PartialPosterSlidingListSmallWidgetTemplate';\nimport { SeriesPosterSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-small/series/SeriesPosterSlidingListSmallWidgetTemplate';\nimport { PartialQuestionWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/question/partial-loading/PartialQuestionWidgetTemplate';\nimport { QuestionWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/question/QuestionWidgetTemplate';\nimport { PartialQuestionAccordionWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/question-accordion/partial-loading/PartialQuestionAccordionWidgetTemplate';\nimport { QuestionAccordionWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/question-accordion/QuestionAccordionWidgetTemplate';\nimport { PartialSearchSuggestionsBlurbWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/search-suggestions-blurb/partial-loading/PartialSearchSuggestionsBlurbWidgetTemplate';\nimport { SearchSuggestionsBlurbWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/search-suggestions-blurb/SearchSuggestionsBlurbWidgetTemplate';\nimport { PartialStatsCoverFixedPillListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/stats-cover-fixed-pill-list-large/partial-loading/PartialStatsCoverFixedPillListLargeWidgetTemplate';\nimport { StatsCoverFixedPillListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/stats-cover-fixed-pill-list-large/StatsCoverFixedPillListLargeWidgetTemplate';\nimport { PartialTagSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/tag-sliding-list/partial-loading/PartialTagSlidingListWidgetTemplate';\nimport { TagSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/tag-sliding-list/TagSlidingListWidgetTemplate';\nimport { PartialThumbnailFeaturedMediaWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-featured-media/partial-loading/PartialThumbnailFeaturedMediaWidgetTemplate';\nimport { ThumbnailFeaturedMediaWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-featured-media/ThumbnailFeaturedMediaWidgetTemplate';\nimport { PartialThumbnailFixedListFolderSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-folder-small/partial-loading/PartialThumbnailFixedListFolderSmallWidgetTemplate';\nimport { ThumbnailFixedListFolderSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-folder-small/ThumbnailFixedListFolderSmallWidgetTemplate';\nimport { PartialThumbnailFixedListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-large/partial-loading/PartialThumbnailFixedListLargeWidgetTemplate';\nimport { ThumbnailFixedListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-large/ThumbnailFixedListLargeWidgetTemplate';\nimport { PartialThumbnailFixedListMediaLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/partial-loading/PartialThumbnailFixedListMediaLargeWidgetTemplate';\nimport { ThumbnailFixedListMediaLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/ThumbnailFixedListMediaLargeWidgetTemplate';\nimport { PartialThumbnailFixedListMediaSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-small/partial-loading/PartialThumbnailFixedListMediaSmallWidgetTemplate';\nimport { ThumbnailFixedListMediaSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-small/ThumbnailFixedListMediaSmallWidgetTemplate';\nimport { PartialThumbnailFixedSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-small/partial-loading/PartialThumbnailFixedListSmallWidgetTemplate';\nimport { ThumbnailFixedListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-small/ThumbnailFixedListSmallWidgetTemplate';\nimport { PartialThumbnailFixedListXLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-xlarge/partial-loading/PartialThumbnailFixedListXLargeWidgetTemplate';\nimport { ThumbnailFixedListXLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-xlarge/ThumbnailFixedListXLargeWidgetTemplate';\nimport { PartialThumbnailHeroMediaWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-hero-media/partial-loading/PartialThumbnailHeroMediaWidgetTemplate';\nimport { ThumbnailHeroMediaWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-hero-media/ThumbnailHeroMediaWidgetTemplate';\nimport { PartialThumbnailSlidingListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-sliding-list-large/partial-loading/PartialThumbnailSlidingListLargeWidgetTemplate';\nimport { ThumbnailSlidingListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-sliding-list-large/ThumbnailSlidingListLargeWidgetTemplate';\nimport { PartialThumbnailSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-sliding-list-small/partial-loading/PartialThumbnailSlidingListSmallWidgetTemplate';\nimport { ThumbnailSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-sliding-list-small/ThumbnailSlidingListSmallWidgetTemplate';\nimport { PartialThumbnailSlidingListSmallV2WidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-sliding-list-small_v2/partial-loading/PartialThumbnailSlidingListSmallV2WidgetTemplate';\nimport { ThumbnailSlidingListSmallV2WidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-sliding-list-small_v2/ThumbnailSlidingListSmallV2WidgetTemplate';\nimport { PartialThumbnailVerticalListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-vertical-list/partial-loading/PartialThumbnailVerticalListWidgetTemplate';\nimport { ThumbnailVerticalListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-vertical-list/ThumbnailVerticalListWidgetTemplate';\nimport { AnyWidgetTemplateProps, PartialWidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { WidgetTemplateCoverFixedPillListLargeSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplateCoverFixedPillListLargeSvg';\nimport { WidgetTemplateCoverFixedPillListXSmallSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplateCoverFixedPillListXsmallSvg';\nimport { WidgetTemplatePosterSlidingListLargeSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplatePosterSlidingListLargeSvg';\nimport { WidgetTemplatePosterSlidingListMediumSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplatePosterSlidingListMediumSvg';\nimport { WidgetTemplatePosterSlidingListSmallSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplatePosterSlidingListSmallSvg';\nimport { WidgetTemplateStatsCoverFixedPillListLargeSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplateStatsCoverFixedPillListLargeSvg';\nimport { WidgetTemplateThumbnailFeaturedMediaSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplateThumbnailFeaturedMediaSvg';\nimport { WidgetTemplateThumbnailHeroMediaSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplateThumbnailHeroMediaSvg';\nimport { DashboardTargetType } from 'libs/shared/interfaces';\nimport { SvgIcon } from 'libs/shared/utils/SvgHelper';\n\nimport { PartialCurriculumCodeSearchResultsWidgetTemplate } from '../components/widgets/curated-widgets/templates/curriculum-code-search-results/partial/PartialCurriculumCodeSearchResultsWidgetTemplate';\nimport { WidgetTemplateAuthorReviewerSvg } from '../images/svg/widgets/templates/WidgetTemplateAuthorReviewerSvg';\nimport { WidgetTemplateCircleLogoSlidingListSvg } from '../images/svg/widgets/templates/WidgetTemplateCircleLogoSlidingListSvg';\nimport { WidgetTemplateCoverFixedTileListSvg } from '../images/svg/widgets/templates/WidgetTemplateCoverFixedTileListSvg';\nimport { WidgetTemplateCoverSlidingPillListSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateCoverSlidingPillListSmallSvg';\nimport { WidgetTemplateEditableCoverFixedPillListSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateEditableCoverFixedPillListSmallSvg';\nimport { WidgetTemplateEventIconSlidingListSvg } from '../images/svg/widgets/templates/WidgetTemplateEventIconSlidingListSvg';\nimport { WidgetTemplateFeaturedThumbnailSlidingListSvg } from '../images/svg/widgets/templates/WidgetTemplateFeaturedThumbnailSlidingListSvg';\nimport { WidgetTemplateFilterSlidingPillListSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateFilterSlidingPillListSmallSvg';\nimport { WidgetTemplateHeadingSvg } from '../images/svg/widgets/templates/WidgetTemplateHeadingSvg';\nimport { WidgetTemplateHeroBannerSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateHeroBannerSmallSvg';\nimport { WidgetTemplateHeroBannerSvg } from '../images/svg/widgets/templates/WidgetTemplateHeroBannerSvg';\nimport { WidgetTemplateHeroBlockColourSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateHeroBlockColourSmallSvg';\nimport { WidgetTemplateHeroThumbnailSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateHeroThumbnailSmallSvg';\nimport { WidgetTemplateOnboardingStepsSvg } from '../images/svg/widgets/templates/WidgetTemplateOnboardingStepsSvg';\nimport { WidgetTemplatePopoutThumbnailSlidingListLargeSvg } from '../images/svg/widgets/templates/WidgetTemplatePopoutThumbnailSlidingListLargeSvg';\nimport { WidgetTemplatePopoutThumbnailSlidingListSmallSvg } from '../images/svg/widgets/templates/WidgetTemplatePopoutThumbnailSlidingListSmallSvg';\nimport { WidgetTemplateQuestionAccordionSvg } from '../images/svg/widgets/templates/WidgetTemplateQuestionAccordionSvg';\nimport { WidgetTemplateQuestionSvg } from '../images/svg/widgets/templates/WidgetTemplateQuestionSvg';\nimport { WidgetTemplateThumbnailFixedListLargeSvg } from '../images/svg/widgets/templates/WidgetTemplateThumbnailFixedListLargeSvg';\nimport { WidgetTemplateThumbnailFixedListMediaLargeSvg } from '../images/svg/widgets/templates/WidgetTemplateThumbnailFixedListMediaLargeSvg';\nimport { WidgetTemplateThumbnailFixedListSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateThumbnailFixedListSmallSvg';\nimport { WidgetTemplateThumbnailFixedListXLargeSvg } from '../images/svg/widgets/templates/WidgetTemplateThumbnailFixedListXlargeSvg';\nimport { WidgetTemplateThumbnailSlidingListLargeSvg } from '../images/svg/widgets/templates/WidgetTemplateThumbnailSlidingListLargeSvg';\nimport { WidgetTemplateThumbnailSlidingListSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateThumbnailSlidingListSmallSvg';\nimport { WidgetTemplateThumbnailVerticalListSvg } from '../images/svg/widgets/templates/WidgetTemplateThumbnailVerticalListSvg';\ninterface PredicateOptions {\n targetType: DashboardTargetType;\n product: ProductId;\n widgetTypeId: WidgetTypeId;\n isTopLevelClassification?: boolean;\n}\n\ninterface WidgetTemplateConfigType {\n getComponent: (widgetId: WidgetTypeId)=>((props: AnyWidgetTemplateProps) => JSX.Element);\n partialLoading: (props: PartialWidgetTemplateProps) => JSX.Element;\n icon: SvgIcon;\n predicate: (options: PredicateOptions) => boolean,\n className: string;\n}\n\nexport const WidgetTemplateConfig: Record<WidgetTemplate, WidgetTemplateConfigType> = {\n [WidgetTemplate.ThumbnailHeroMedia]: {\n getComponent: () => ThumbnailHeroMediaWidgetTemplate,\n partialLoading: PartialThumbnailHeroMediaWidgetTemplate,\n icon: WidgetTemplateThumbnailHeroMediaSvg,\n predicate: ({ targetType }) => {\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.PosterSlidingListLarge]: {\n getComponent: () => PosterSlidingListLargeWidgetTemplate,\n partialLoading: PartialPosterSlidingListLargeWidgetTemplate,\n icon: WidgetTemplatePosterSlidingListLargeSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.Company\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.PosterSlidingListMedium]: {\n getComponent: () => PosterSlidingListMediumWidgetTemplate,\n partialLoading: PartialPosterSlidingListMediumWidgetTemplate,\n icon: WidgetTemplatePosterSlidingListMediumSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.Company\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.PosterSlidingListSmall]: {\n getComponent: widgetId => {\n switch (widgetId) {\n case WidgetTypeId.CuratedClassifications:\n return ClassificationPosterSlidingListSmallWidgetTemplate;\n case WidgetTypeId.CuratedSeries:\n return SeriesPosterSlidingListSmallWidgetTemplate;\n default:\n // fall back to ClassificationPosterSlidingListSmallWidgetTemplate\n return ClassificationPosterSlidingListSmallWidgetTemplate;\n }\n },\n partialLoading: PartialPosterSlidingListSmallWidgetTemplate,\n icon: WidgetTemplatePosterSlidingListSmallSvg,\n predicate: ({ targetType, widgetTypeId, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n switch (widgetTypeId) {\n case WidgetTypeId.CuratedClassifications: {\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n }\n case WidgetTypeId.CuratedSeries: {\n return [\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.Company\n ].includes(targetType);\n }\n default: {\n return false;\n }\n }\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailFeaturedMedia]: {\n getComponent: () => ThumbnailFeaturedMediaWidgetTemplate,\n partialLoading: PartialThumbnailFeaturedMediaWidgetTemplate,\n icon: WidgetTemplateThumbnailFeaturedMediaSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.CoverFixedPillListLarge]: {\n getComponent: () => CoverFixedPillListLargeWidgetTemplate,\n partialLoading: PartialCoverFixedPillListLargeWidgetTemplate,\n icon: WidgetTemplateCoverFixedPillListLargeSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return [\n DashboardTargetType.Classification\n ].includes(targetType);\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.StatsCoverFixedPillListLarge]: {\n getComponent: () => StatsCoverFixedPillListLargeWidgetTemplate,\n partialLoading: PartialStatsCoverFixedPillListLargeWidgetTemplate,\n icon: WidgetTemplateStatsCoverFixedPillListLargeSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.ClassificationDirectory\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.CoverFixedPillListXSmall]: {\n getComponent: () => CoverFixedPillListXSmallWidgetTemplate,\n partialLoading: PartialCoverFixedPillListXSmallWidgetTemplate,\n icon: WidgetTemplateCoverFixedPillListXSmallSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return [\n DashboardTargetType.Discover\n ].includes(targetType);\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.CoverSlidingPillListSmall]: {\n getComponent: () => CoverSlidingPillListSmallWidgetTemplate,\n partialLoading: PartialCoverSlidingPillListSmallWidgetTemplate,\n icon: WidgetTemplateCoverSlidingPillListSmallSvg,\n predicate: ({ targetType, widgetTypeId, product }) => {\n if (product === ProductId.StreamableLearning) {\n if (widgetTypeId === WidgetTypeId.Classifications) return false;\n\n return [\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.Classification\n ].includes(targetType);\n }\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.Company\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.CoverFixedTileList]: {\n getComponent: () => CoverFixedTileListWidgetTemplate,\n partialLoading: PartialCoverFixedTileListWidgetTemplate,\n icon: WidgetTemplateCoverFixedTileListSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.FeaturedThumbnailSlidingList]: {\n getComponent: () => FeaturedThumbnailSlidingListWidgetTemplate,\n partialLoading: PartialFeaturedThumbnailSlidingListWidgetTemplate,\n icon: WidgetTemplateFeaturedThumbnailSlidingListSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.HeroBanner]: {\n getComponent: () => HeroBannerWidgetTemplate,\n partialLoading: PartialHeroBannerWidgetTemplate,\n icon: WidgetTemplateHeroBannerSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.OnboardingSteps]: {\n getComponent: () => OnboardingStepsWidgetTemplate,\n partialLoading: PartialHeroBannerWidgetTemplate,\n icon: WidgetTemplateOnboardingStepsSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Discover\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.HeroBannerSmall]: {\n getComponent: () => HeroBannerSmallWidgetTemplate,\n partialLoading: PartialHeroBannerSmallWidgetTemplate,\n icon: WidgetTemplateHeroBannerSmallSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.HeroThumbnailSmall]: {\n getComponent: () => HeroThumbnailSmallWidgetTemplate,\n partialLoading: PartialHeroThumbnailSmallWidgetTemplate,\n icon: WidgetTemplateHeroThumbnailSmallSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.HeroBlockColourSmall]: {\n getComponent: () => HeroBlockColourSmallWidgetTemplate,\n partialLoading: PartialHeroBlockColourSmallWidgetTemplate,\n icon: WidgetTemplateHeroBlockColourSmallSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.ClassificationDirectory,\n DashboardTargetType.ClassificationCurriculum\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailFixedListXLarge]: {\n getComponent: () => ThumbnailFixedListXLargeWidgetTemplate,\n partialLoading: PartialThumbnailFixedListXLargeWidgetTemplate,\n icon: WidgetTemplateThumbnailFixedListXLargeSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailFixedListLarge]: {\n getComponent: () => ThumbnailFixedListLargeWidgetTemplate,\n partialLoading: PartialThumbnailFixedListLargeWidgetTemplate,\n icon: WidgetTemplateThumbnailFixedListLargeSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailFixedListSmall]: {\n getComponent: () => ThumbnailFixedListSmallWidgetTemplate,\n partialLoading: PartialThumbnailFixedSmallWidgetTemplate,\n icon: WidgetTemplateThumbnailFixedListSmallSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.EditableCoverFixedPillListSmall]: {\n getComponent: () => EditableCoverFixedPillListSmallWidgetTemplate,\n partialLoading: PartialEditableCoverFixedPillListSmallWidgetTemplate,\n icon: WidgetTemplateEditableCoverFixedPillListSmallSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Discover\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.Heading]: {\n getComponent: () => HeadingWidgetTemplate,\n partialLoading: PartialHeadingWidgetTemplate,\n icon: WidgetTemplateHeadingSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.ClassificationDirectory,\n DashboardTargetType.Discover\n ].includes(targetType);\n },\n className: 'heading-widget-template'\n },\n\n [WidgetTemplate.AuthorReviewer]: {\n getComponent: () => AuthorReviewerWidgetTemplate,\n partialLoading: PartialAuthorReviewerWidgetTemplate,\n icon: WidgetTemplateAuthorReviewerSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [DashboardTargetType.Classification].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.Question]: {\n getComponent: () => QuestionWidgetTemplate,\n partialLoading: PartialQuestionWidgetTemplate,\n icon: WidgetTemplateQuestionSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.QuestionAccordion]: {\n getComponent: () => QuestionAccordionWidgetTemplate,\n partialLoading: PartialQuestionAccordionWidgetTemplate,\n icon: WidgetTemplateQuestionAccordionSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailFixedListMediaLarge]: {\n getComponent: () => ThumbnailFixedListMediaLargeWidgetTemplate,\n partialLoading: PartialThumbnailFixedListMediaLargeWidgetTemplate,\n icon: WidgetTemplateThumbnailFixedListMediaLargeSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.PopoutThumbnailSlidingListLarge]: {\n getComponent: () => PopoutThumbnailSlidingListLargeWidgetTemplate,\n partialLoading: PartialPopoutThumbnailSlidingListLargeWidgetTemplate,\n icon: WidgetTemplatePopoutThumbnailSlidingListLargeSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.PopoutThumbnailSlidingListSmall]: {\n getComponent: () => PopoutThumbnailSlidingListSmallWidgetTemplate,\n partialLoading: PartialPopoutThumbnailSlidingListSmallWidgetTemplate,\n icon: WidgetTemplatePopoutThumbnailSlidingListSmallSvg,\n predicate: ({ targetType, product, isTopLevelClassification }) => {\n if (product === ProductId.StreamableLearning) {\n return [\n DashboardTargetType.Discover,\n DashboardTargetType.Company\n ].includes(targetType);\n }\n\n if (targetType === DashboardTargetType.Classification)\n return isTopLevelClassification;\n\n return [\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.Discover,\n DashboardTargetType.Company\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.FilterSlidingPillListSmall]: {\n getComponent: () => FilterSlidingPillListSmallWidgetTemplate,\n partialLoading: PartialFilterSlidingPillListSmall,\n icon: WidgetTemplateFilterSlidingPillListSmallSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.CircleLogoSlidingList]: {\n getComponent: () => CircleLogoSlidingListWidgetTemplate,\n partialLoading: PartialCircleLogoSlidingListWidgetTemplate,\n icon: WidgetTemplateCircleLogoSlidingListSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning) {\n return [\n DashboardTargetType.Discover,\n DashboardTargetType.Company\n ].includes(targetType);\n }\n\n return [\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.EventIconSlidingList]: {\n getComponent: () => EventIconSlidingListWidgetTemplate,\n partialLoading: PartialEventIconSlidingListWidgetTemplate,\n icon: WidgetTemplateEventIconSlidingListSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return [\n DashboardTargetType.Discover,\n DashboardTargetType.Classification,\n DashboardTargetType.Company\n ].includes(targetType);\n\n return [\n DashboardTargetType.Discover,\n DashboardTargetType.Classification\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailVerticalList]: {\n getComponent: () => ThumbnailVerticalListWidgetTemplate,\n partialLoading: PartialThumbnailVerticalListWidgetTemplate,\n icon: WidgetTemplateThumbnailVerticalListSvg,\n predicate: ({ targetType, product }) => {\n if (!(product === ProductId.StreamableLearning)) return false;\n\n return [\n DashboardTargetType.Company,\n DashboardTargetType.Classification\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailSlidingListSmallV2]: {\n getComponent: () => ThumbnailSlidingListSmallV2WidgetTemplate,\n partialLoading: PartialThumbnailSlidingListSmallV2WidgetTemplate,\n icon: WidgetTemplateThumbnailSlidingListSmallSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning) {\n return false;\n }\n\n return [DashboardTargetType.Classification].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.CurriculumResourcesAccordion]: {\n getComponent: () => CurriculumResourcesAccordionWidgetTemplate,\n partialLoading: PartialCurriculumResourcesAccordionWidgetTemplate,\n icon: null,\n predicate: () => false,\n className: ''\n },\n\n /**\n * Templates currently specific to Search\n */\n [WidgetTemplate.ThumbnailFixedListMediaSmall]: {\n getComponent: () => ThumbnailFixedListMediaSmallWidgetTemplate,\n partialLoading: PartialThumbnailFixedListMediaSmallWidgetTemplate,\n icon: null,\n predicate: () => false,\n className: 'thumbnail-fixed-list-media-small-widget-template'\n },\n\n [WidgetTemplate.ThumbnailFixedListFolderSmall]: {\n getComponent: () => ThumbnailFixedListFolderSmallWidgetTemplate,\n partialLoading: PartialThumbnailFixedListFolderSmallWidgetTemplate,\n icon: null,\n predicate: () => false,\n className: ''\n },\n \n [WidgetTemplate.TagSlidingList]: {\n getComponent: () => TagSlidingListWidgetTemplate,\n partialLoading: null,\n icon: PartialTagSlidingListWidgetTemplate,\n predicate: () => false,\n className: 'tag-sliding-list-widget-template'\n },\n\n [WidgetTemplate.CurriculumCodeSearchResults]: {\n getComponent: () => CurriculumCodeSearchResultsWidgetTemplate,\n partialLoading: PartialCurriculumCodeSearchResultsWidgetTemplate,\n icon: null,\n predicate: () => false,\n className: ''\n },\n\n [WidgetTemplate.PosterFixedListLarge]: {\n getComponent: () => PosterFixedListLargeWidgetTemplate,\n partialLoading: PartialPosterFixedListLargeWidgetTemplate,\n icon: null,\n predicate: () => false,\n className: 'poster-fixed-list-large-widget-template'\n },\n\n [WidgetTemplate.SearchSuggestionsBlurb]: {\n getComponent: () => SearchSuggestionsBlurbWidgetTemplate,\n partialLoading: PartialSearchSuggestionsBlurbWidgetTemplate,\n icon: null,\n predicate: () => false,\n className: ''\n },\n\n /**\n * The templates below are currently not in use, but are still supported\n */\n [WidgetTemplate.ThumbnailSlidingListSmall]: {\n getComponent: () => ThumbnailSlidingListSmallWidgetTemplate,\n partialLoading: PartialThumbnailSlidingListSmallWidgetTemplate,\n icon: WidgetTemplateThumbnailSlidingListSmallSvg,\n predicate: () => false,\n className: ''\n },\n\n [WidgetTemplate.ThumbnailSlidingListLarge]: {\n getComponent: () => ThumbnailSlidingListLargeWidgetTemplate,\n partialLoading: PartialThumbnailSlidingListLargeWidgetTemplate,\n icon: WidgetTemplateThumbnailSlidingListLargeSvg,\n predicate: () => false,\n className: ''\n }\n};","import React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Flight } from 'libs/common/flight';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { AnimatedBorder } from 'libs/shared/components/widgets/curated-widgets/components/animated-border/AnimatedBorder';\nimport { AllClassificationWidgetTemplates, AllCompanyWidgetTemplates, AllDiscoverWidgetTemplates, AllMoviesAndTvWidgetTemplates, AllSearchWidgetTemplates, AllWidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { WidgetTemplateConfig } from 'libs/shared/constants/WidgetTemplateConfig';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { useLazyLoad } from 'libs/shared/hooks/UseLazyLoad';\nimport { CuratedWidget, CuratedWidgetContent, DashboardTargetType, Video, WidgetMetadata } from 'libs/shared/interfaces';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './widget-container-view.module.scss';\n\nfunction isEmptyWidget<TContent = CuratedWidgetContent>(widgetTypeId: WidgetTypeId, content: TContent): boolean {\n if (WidgetHelper.hasNoContent(widgetTypeId))\n return false;\n \n if (!content)\n return true;\n\n if (Array.isArray(content) && !content.length)\n return true;\n\n return false;\n}\n\ninterface BaseWidgetContainerViewProps {\n id: string;\n name: string;\n description: string;\n templateId: WidgetTemplate;\n \n widgetIndex?: number;\n widgetTypeId: WidgetTypeId;\n setIsEmpty?: (id: string, isEmpty: boolean) => void;\n onClickRemoveItem?: (itemId: string, itemName: string, widgetId: string, widgetTypeId: WidgetTypeId) => void;\n isEditing?: boolean;\n isScrollToTargetWidget?: boolean;\n headingElementRef?: React.MutableRefObject<Set<Element>>;\n lazyLoad?: boolean;\n metadata: Partial<WidgetMetadata>;\n isPreviewing?: boolean;\n dashboardTarget?: DashboardTargetType;\n className?: string;\n}\n\ntype ClassificationWidgetContainerViewProps = Omit<AllClassificationWidgetTemplates, 'content' | 'metadata'> &\n { widgetCollection?: DashboardTargetType.Classification; }\n\ntype DiscoverWidgetContainerViewProps = Omit<AllDiscoverWidgetTemplates, 'content' | 'metadata'> &\n { widgetCollection?: DashboardTargetType.Discover; }\n\ntype CompanyWidgetContainerViewProps = Omit<AllCompanyWidgetTemplates, 'content' | 'metadata'> &\n { widgetCollection?: DashboardTargetType.Company; }\n\ntype MoviesAndTvWidgetContainerViewProps = Omit<AllMoviesAndTvWidgetTemplates, 'content' | 'metadata'> &\n { widgetCollection?: DashboardTargetType.MoviesAndTv; }\n\ntype SearchWidgetContainerViewProps = Omit<AllSearchWidgetTemplates, 'content' | 'metadata'> &\n { widgetCollection?: DashboardTargetType.Search; }\n\ntype CuratorWidgetContainerViewProps = Omit<Partial<AllWidgetTemplateProps>, 'content' | 'metadata'> &\n { location: 'curator' };\n\ntype CommonContainerViewProps =\n BaseWidgetContainerViewProps & (\n ClassificationWidgetContainerViewProps |\n DiscoverWidgetContainerViewProps |\n CompanyWidgetContainerViewProps |\n MoviesAndTvWidgetContainerViewProps |\n CuratorWidgetContainerViewProps |\n SearchWidgetContainerViewProps\n );\n\ntype PropsWithFetch = CommonContainerViewProps & {\n getContentRequest: (id: string, widgetTypeId: WidgetTypeId, templateId: WidgetTemplate) => Flight.Request;\n content?: never;\n};\n\ntype PropsWithoutFetch = CommonContainerViewProps & {\n content: CuratedWidgetContent;\n getContentRequest?: never;\n};\n\ntype WidgetContainerViewProps = PropsWithFetch | PropsWithoutFetch;\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function WidgetContainerView(props: WidgetContainerViewProps): JSX.Element {\n const scrollToRef = React.createRef<HTMLDivElement>();\n\n const [ removedItemIds, setRemovedItemIds ] = React.useState<string[]>([]);\n\n const shouldLazyLoad = props.lazyLoad ?? true;\n\n const { ref: partialLoadingRef, inView } = useLazyLoad({ prevent: !shouldLazyLoad });\n \n const willFetch = FunctionHelper.isFunction(props.getContentRequest);\n\n const lazyWidget = Flight.useBasicFetch<CuratedWidget>(!!(inView && props.getContentRequest) &&\n props.getContentRequest(props.id, props.widgetTypeId, props.templateId));\n\n const { content } = WidgetHelper.useGetContent(\n props.content || lazyWidget.data?.content,\n props.widgetTypeId,\n props.isPreviewing,\n lazyWidget.data?.preferences,\n removedItemIds\n );\n\n const breakpoints = useBreakpoints();\n\n const isEmpty = isEmptyWidget(props.widgetTypeId, content);\n const shouldHideWidget = !WidgetHelper.canDisplayOnScreenSize(breakpoints, props.widgetTypeId, props.templateId);\n\n React.useEffect(() => {\n if ((willFetch && !lazyWidget.hasCompleted))\n return;\n\n props.setIsEmpty?.(props.id, isEmpty || shouldHideWidget);\n }, [ lazyWidget.hasCompleted, isEmpty, shouldHideWidget, willFetch, props.setIsEmpty ]);\n\n React.useEffect(() => {\n if (!props.isScrollToTargetWidget || !scrollToRef.current)\n return;\n\n scrollToRef.current.scrollIntoView({\n behavior: 'smooth',\n block: 'start'\n });\n }, [ props.isScrollToTargetWidget, scrollToRef.current ]);\n\n function onClickRemoveItem(itemId: string, itemName: string): void {\n if (!props.onClickRemoveItem)\n return;\n\n setRemovedItemIds([ ...removedItemIds, itemId ]);\n return props.onClickRemoveItem(itemId, itemName, props.id, props.widgetTypeId);\n }\n\n /**\n * Our videos require widget id for context, so we're enclosing the video type applink function here.\n */\n const appLinks = props.appLinks ? { ...props.appLinks } : null;\n if (appLinks?.videoType) {\n const getVideoTypeAppLink = (video: Video, options: GetVideoAppLinkOptions) => {\n return props.appLinks?.videoType(\n video,\n { ...options, contextId: props.id, includeContext: options.includeContext }\n );\n };\n \n appLinks.videoType = getVideoTypeAppLink;\n }\n\n const analyticsData = {\n ...props.analyticsData,\n widgetId: props.widgetTypeId,\n templateId: props.templateId,\n dashboardTarget: props?.dashboardTarget,\n widgetIndex: props?.widgetIndex,\n widgetName: props.name\n };\n\n const showPartialLoadingComponent = (willFetch && !lazyWidget.hasCompleted) || (props.isEditing && isEmpty);\n\n const template = WidgetTemplateConfig[props.templateId];\n\n if (!template || !showPartialLoadingComponent && (isEmpty || shouldHideWidget))\n return <></>;\n \n const PartialTemplate = template.partialLoading;\n const Template = template.getComponent(props.widgetTypeId);\n const widgetTemplateClass = classNames(template.className, props.className);\n\n const hasNewVideoHighlight = props.isEditing && props.metadata.aiAddedVideo;\n\n return (\n <div\n id={props.widgetTypeId === WidgetTypeId.ContinueWatching ? 'continue-watching-videos-widget' : null}\n ref={scrollToRef}\n className={`curated-widget ${widgetTemplateClass} ${props.name ? 'has-heading' : ''} ${props.isScrollToTargetWidget ? 'my-n2 mx-n3' : ''}`}\n >\n <AnimatedBorder enabled={hasNewVideoHighlight}>\n <div className={props.isScrollToTargetWidget ? `py-2 px-3 rounded-3 ${styles.widgetHighlight}` : ''}>\n {WidgetHelper.isWidgetInTableOfContents(props.metadata) && (\n <a\n href={`#${props.id}`}\n id={`${props.id}`}\n className={`${styles.anchor}`}\n ref={el => { (el && props.headingElementRef?.current) && props.headingElementRef.current.add(el); }}\n />\n )}\n\n {showPartialLoadingComponent ? (\n <div ref={partialLoadingRef}>\n <PartialTemplate\n name={props.name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n />\n </div>\n ) : (\n <Template\n {...props}\n appLinks={appLinks}\n content={content}\n preferences={lazyWidget.data?.preferences}\n analyticsData={analyticsData}\n showHighlight={props.isScrollToTargetWidget}\n isPreviewing={props.isPreviewing}\n onClickRemoveItem={onClickRemoveItem}\n />\n )}\n </div>\n </AnimatedBorder>\n </div>\n );\n}","\nimport { Flight } from 'libs/common/flight';\n\nimport { DashboardRequests } from 'libs/shared/flight-requests/DashboardRequests';\nimport { CuratedDashboard, DashboardStatus, DashboardTargetType, DashboardUserType, Presentation } from 'libs/shared/interfaces';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nimport { PresentationRequests } from 'shared/flight-requests/PresentationRequests';\n\ninterface UseFetchDashboardOptions {\n targetType: DashboardTargetType;\n dashboardId?: string;\n companyId?: string;\n classificationId?: string;\n}\n\nexport function useFetchDashboard(options: UseFetchDashboardOptions) {\n const presentation = Flight.useBasicFetch<Presentation>(\n PresentationRequests.streamablePresentation()\n );\n\n function shouldFetchDashboard(): boolean {\n return (\n presentation.hasCompleted\n );\n }\n\n function getStatuses(): DashboardStatus[] {\n if (options.dashboardId)\n return [ DashboardStatus.Published, DashboardStatus.Draft ];\n\n return [DashboardStatus.Published];\n }\n\n const dashboard = Flight.useBasicFetch<CuratedDashboard>(\n shouldFetchDashboard() &&\n DashboardRequests.getDashboard(\n DashboardUserType.Any,\n getStatuses(),\n CuratedDashboardHelper.getUnknownDashboardTarget({\n targetType: options.targetType,\n presentationId: presentation.data.id,\n companyId: options.companyId,\n classificationId: options.classificationId\n }),\n null,\n options.dashboardId\n )\n );\n\n return {\n dashboard,\n isPreviewing: !!options.dashboardId\n };\n}"],"names":["createChainedFunction","funcs","f","acc","args","MARGINS","getDefaultDimensionValue","dimension","elem","offset","value","margins","css","collapseStyles","EXITED","EXITING","ENTERING","ENTERED","Collapse","React","onEnter","onEntering","onEntered","onExit","onExiting","className","children","inProp","timeout","mountOnEnter","unmountOnExit","appear","getDimensionValue","props","ref","computedDimension","handleEnter","useMemo","handleEntering","scroll","handleEntered","handleExit","triggerBrowserReflow","handleExiting","_jsx","TransitionWrapper","transitionEndListener","getChildRef","state","innerProps","classNames","isAccordionItemSelected","activeEventKey","eventKey","context","React.createContext","AccordionCollapse","React.forwardRef","Component","bsPrefix","useContext","AccordionContext","useBootstrapPrefix","React.Children","AccordionBody","onExited","AccordionItemContext","useAccordionButton","onClick","onSelect","alwaysOpen","e","eventKeyPassed","k","AccordionButton","accordionOnClick","AccordionHeader","ariaControls","AccordionItem","contextValue","Accordion","activeKey","flush","controlledProps","useUncontrolled","prefix","Accordion$1","AnimatedBorder","enabled","jsx","styles","EditSvg","VerifiedSvg","namespace","DATE_FORMATTER","PersonCardWrapper","Fragment","externalUrl","blogUrl","ArticleHelper","onClickAuthorBlogLink","AnalyticsHelper","EntityType","LocationContext","UserAction","PersonCard","jsxs","ImageHelper","ImageType","ImageSize","SvgContainer","Text","AuthorReviewerWidgetTemplate","reviewer","author","lastUpdated","datePublished","PartialPersonCard","PartialAuthorReviewerWidgetTemplate","CircleLogoWidgetItem","logoUrl","_a","logoBgColor","_b","colourClass","getBgColorClass","BG_COLOUR_CLASS_NAMES","analyticsData","_c","_d","analyticsOptions","logoStyle","AppLink","CircleLogoSlidingListWidgetTemplate","FixedWidget","WidgetType","WidgetContents","PartialCircleLogoSlidingListWidgetTemplate","itemsCount","breakpoints","useBreakpoints","PartialWidgetHeader","_","i","PartialCoverFixedPillListLargeWidgetTemplate","Row","Col","PartialLargeSubjectWidgetItem","EmojiText","ThumbsDownSvg","ThumbsUpSvg","FeedbackFormValidationSchema","Yup.object","Yup.string","LanguageService","FeedbackForm","setState","alerts","useAlerts","onClickYes","onClickNo","onSubmit","formData","onDone","FunctionHelper","IconButton","FormWrapper","Form","FormField","FormButtons","CoverFixedPillListXSmallWidgetTemplate","classification","coverUrl","PartialCoverFixedPillListXSmallWidgetTemplate","ClickDescriptor","CoverFixedTileListWidgetTemplate","WidgetHeader","p","PlaylistItem","PartialCoverFixedTileListWidgetTemplate","PartialPlaylistList","CLASSIFICATION_LATEST_RELEASES","EXPLORE_ALL_TOPICS","getTotalVideos","content","sum","cur","getSubtitleFromTotalVideos","data","getExtraItem","CuratedDashboardAppLink","_f","_e","_g","_h","HardCoded","CoverSlidingPillListSmallWidgetTemplate","extraContent","isClassificationLatestReleasedWidget","getHeadingAppLink","TopicsHelper","WidgetTypeId","WidgetTemplate","getChildAppLink","DynamicWidget","SubjectWidgetItem","PartialSubjectWidgetItem","PartialCoverSlidingPillListSmallWidgetTemplate","PartialDynamicWidget","getPhrase","SearchExchangeArchiveDescription","ThumbnailVerticalListWidgetTemplate","getShowSeeMoreLink","getDescription","VideoList","CurriculumCodeSearchResultsWidgetTemplate","CurriculumLeaf","MinusSvg","isExpanded","PlusSvg","CurriculumAccordionVideoList","hasCode","video","index","analyticsProps","VideoThumbnail","VideoSubText","VideoItemTitle","VideoItemGuidance","AudienceSection","area","outcome","outcomeIndex","getAudienceAreas","audience","areas","traverse","node","areaName","CurriculumType","child","getCurriculumAccordion","tree","audienceLookup","subject","CurriculumResourcesAccordionWidgetTemplate","accordion","Item","PartialCurriculumResourcesAccordionWidgetTemplate","HamburgerSvg","EditableSubjectWidgetItem","wrapperClassName","textClassName","getToggleTooltip","ObjectHelper","ToggleSwitch","ReorderHelper","items","oldIdx","newIdx","reorderedItems","ArrayHelper","destinationMemberId","reorderRequest","dataPrefix","updatedData","keys","page","pageSize","nextCursor","nextKey","removeIdx","itemToMove","insertIdx","r","v","key","itemsToInsert","EditableCoverFixedPillListSmallWidgetTemplate","isEditing","setIsEditing","showSpinner","setShowSpinner","WidgetHelper","isFollowingNothing","c","initialPreferences","current","preference","persistedPreferences","setPersistedPreferences","preferences","setPreferences","currentSubjects","a","b","showExploreAllTopics","onClickSavePreferences","oldPreferences","onClickCancel","getItemIndex","isVisible","onToggleVisibility","newPreferences","hidden","ToggleDescriptor","getDragOverlay","id","onSortStart","event","s","WorkflowPhase","onSortEnd","active","over","oldIndex","newIndex","item","hasEditedPreferences","exploreAllSubjectsItem","presentationsSwitchSubjectsItems","presentation","showPresentationSwitch","canManagePreferences","LocalPermissionName","DivButton","Button","SpinnerButton","SortableContainerWrapper","SortableItemWrapper","PartialEditableCoverFixedPillListSmallWidgetTemplate","CalendarWidgetItem","CalendarDay","SpecialEventWidgetItem","otherProps","GenericCalendarDate","getIconUrl","getHardCodedEvent","getWidgetItems","contentType","calendarEvents","CalendarEventContentType","getCalendarEventLivestreams","rawOrderedEvents","now","today","DateHelper","tomorrow","nextWeekStart","nextWeekEnd","thisMonthStart","thisMonthEnd","nextMonthStart","nextMonthEnd","laterMonthStart","laterMonthEnd","eventGroupingMap","livestreams","livestream","addEventToGroup","eventRecord","currentMergedEvent","day","mergedEvents","eventGrouping","dateItem","EventIconSlidingListWidgetTemplate","widgetItems","theme","getTheme","useGetTotalItems","PartialEventIconSlidingListWidgetTemplate","totalItems","VideoWidgetItem","thumbnailSize","preloadImage","getScaleSize","isHovering","useHoverIntent","width","FeaturedThumbnailSlidingListWidgetTemplate","widgetAppLink","bannerBackgroundUrl","AppLinkHelper","PartialFeaturedThumbnailSlidingListWidgetTemplate","PartialFixedWidget","RatingWidgetItem","getRatingClasses","VideoDetailsHelper","SearchSvg","SvgContainerSize","getMaxRatingValue","PresentationLearningLevel","FilterSlidingPillListSmallWidgetTemplate","maxRating","ratings","rating","PartialFilterSlidingPillListSmall","getItemCount","HeadingWidgetTemplate","PartialHeadingWidgetTemplate","HeroBannerWidgetTemplate","getBannerUrl","entity","getAppLink","getHeadingClass","PartialHeroBannerWidgetTemplate","GridSvg","RectanglesSvg","SparkleSvg","HeadingSize","HeadingColor","BUTTON_ICON_MAP","NewWindowSvg","BOOTSTRAP_CLASS_MAP","BlurbHeroBannerSmallWidgetTemplate","headingSize","headingColor","HeroBannerButton","ClassificationHeroBannerSmall","ClassificationHeroBannerSmallWidgetTemplate","PresentationsHeroBannerSmallWidgetTemplate","canView","PermissionName","getPresentationLink","appLinkOptions","getPresentations","HeroBannerSmallWidgetTemplate","PartialHeroBannerSmallWidgetTemplate","HeroBlockColourSmallWidgetTemplate","getCustomCtaAppLink","CuratedWidgetCtaAppLink","PartialHeroBlockColourSmallWidgetTemplate","HeroThumbnailSmallWidgetTemplate","thumbnailUrl","backgroundColor","style","PartialHeroThumbnailSmallWidgetTemplate","BaseCollectionIdentifier","options","collectionPrefix","sort","cursor","params","ErrorHelper","DevError","PlaylistSortType","PlaylistType","PlaylistCollectionIdentifier","type","PlaylistVideoCollectionIdentifier","PlaylistStateUpdateHelper","updatedState","count","PlaylistRequests","collectionIdentifier","SharedWithStatements","UrlHelper","success","error","shareId","VIDEO_COLLECTION","CLIP_COLLECTION","INTERACTIVE","CurationStatus","PermissionFilterOption","filter","videoId","userId","always","HttpVerbs","playlistId","videos","invalidationKeys","body","VideoHelper","typeId","baseUrl","MasterType","formatData","useOnboardingPathway","appLinks","hasPlaylist","setHasPlaylist","useViewModel","currentUser","Flight.useBasicFetch","UserRequests","user","customer","CustomerRequests","presentations","ClassificationRequests","PresentationType","preferredPresentation","curriculums","playlists","preferredSubjects","PreferenceRequests","hasPermissions","usePermissions","hasLoadedPathway","userSettings","useSettings","getPathway","jobTitle","OnboardingPathwayHelper","ContextService","ScoreThresholdDefaults","CIRCLE_WIDTH","CIRCLE_WIDTH_LG","CIRCLE_STROKE_WIDTH","CIRCLE_STROKE_WIDTH_LG","ProgressCircleSize","ProgressCircleSizeMap","getCircleRadius","size","strokeWidth","getCircleClassName","percentage","scoreThresholds","getColouredLabelClassName","getCircleContainerClassName","isPending","getPercentageToFixed","getFormattedPercentage","ProgressCircle","circle","radius","circumference","PercentageIndicatorLayout","PercentageIndicator","percentageToFixed","label","ArrowRightSvg","currentScreen","currentStepNumber","totalSteps","isKdm","screenConfig","OnboardingScreenConfigs","OnboardingStepsWidgetTemplate","pathway","UserHelper","hideWidget","getAnalyticsPayload","currentNode","nextScreenId","previousScreenId","getProgress","progress","overallPercentage","totalScreens","OnboardingDescriptor","PartialWidgetItem","PartialPopoutThumbnailSlidingListLargeWidgetTemplate","PopoutVideoWidgetItem","presentationAudiences","videoAudiences","mergedAudience","useMergeAudiences","ThumbnailTextPosition","PopoutThumbnailSlidingListLargeWidgetTemplate","widgetConfig","WidgetTypeIdConfig","onClickRemoveItem","videoName","PartialPopoutThumbnailSlidingListSmallWidgetTemplate","SubjectStatsBadge","getBadgeClass","baseClass","getBadgeText","TimerSvg","VideoCountBadge","childDashboardNewVideoCount","PopoutThumbnailSlidingListSmallWidgetTemplate","useGetCount","PartialSeriesList","idx","PosterFixedListLargeWidgetTemplate","SeriesTallPoster","SeriesWidgetItem","series","PosterSlidingListLargeWidgetTemplate","useGetItemCount","PartialLoadingItem","PartialTallSubjectWidget","itemCount","TallSubjectWidgetItem","getClassName","BaseImage","ImageFallback","ImageFallbackType","PartialPosterSlidingListMediumWidgetTemplate","PosterSlidingListMediumWidgetTemplate","EXPLORE_ALL_TOPICS_ID","ClassificationPosterSlidingListSmallWidgetTemplate","PartialPosterSlidingListSmallWidgetTemplate","SeriesPosterSlidingListSmallWidgetTemplate","PartialQuestionWidgetTemplate","DEFAULT_HEIGHT","TRANSITION_TIME","ExpandableQuestion","setIsExpanded","StorageType","height","setHeight","shouldClamp","setShouldClamp","markdown","setMarkdown","isMounted","useIsComponentMounted","timeoutRef","invisibleRef","visibleRef","onToggleExpander","TopicFaqHelper","collapse","expand","setExpandedHeight","fakeEl","update","newMarkdown","useResizeListener","QuestionWidgetTemplate","question","answer","PartialQuestion","PartialQuestionAccordionWidgetTemplate","useFaqJsonLd","metadataContext","usePageMetadataContext","React.useEffect","generateFaqJsonLd","faqJsonLd","PageMetadataHelper","Question","onUpdateMarkdown","questionId","panelId","QuestionAccordionWidgetTemplate","faq","PartialSearchSuggestionsBlurbWidgetTemplate","DEFAULT_LENGTH","SearchSuggestionQueryItem","SearchSuggestionsBlurbWidgetTemplate","suggestions","lastItem","PartialSubjectStatsWidgetItem","PartialStatsCoverFixedPillListLargeWidgetTemplate","BellFilledSvg","BellSvg","SubjectStatsWidgetItem","hasLoadedImage","setHasLoadedImage","React.useState","isComingSoon","ClassificationStatus","isFollowing","dashboardNewVideosCount","dashboardResourceCount","childDashboardResourceCount","dashboardVideoCount","childDashboardVideoCount","childClassificationCount","videoCount","resourceCount","newVideoCount","onToggleFollowClassification","getSubtext","text","getBadgeType","subText","StatsCoverFixedPillListLargeWidgetTemplate","PartialTagItemComponent","PartialTagItem","PartialTagSlidingListWidgetTemplate","hasDivider","TagSlidingListWidgetTemplate","selectedItems","unappliedOptions","collection","tag","childProps","TagWidgetItem","PartialVideoGuidanceTag","PartialVideoGuidance","PartialThumbnailFeaturedMediaWidgetTemplate","ThumbnailFeaturedMediaWidgetTemplate","HeroVideo","LibraryFolder","owner","ownerLogoUrl","actions","DragDropMoveWrapper","Actions","ThumbnailFixedListFolderSmallWidgetTemplate","folder","libraryId","showOwnerLogo","PartialThumbnailFixedListLargeWidgetTemplate","PARTIAL_SUBJECTS","ThumbnailWidgetContent","ThumbnailWidgetItem","Memoized","getThumbnailWidgetItemProps","baseProps","_i","ThumbnailFixedListLargeWidgetTemplate","PartialThumbnailFixedListMediaLargeWidgetTemplate","PartialThumbnailText","ThumbnailFixedListMediaLargeWidgetTemplateItem","videoAppLink","containerRef","ThumbnailText","ThumbnailFixedListMediaLargeWidgetTemplate","BaseCollectionThumbnailTitle","CollectionThumbnailTitle","CollectionThumbnail","getFirstVideo","collectionVideos","playlist","getVideoCount","totalCount","getEntityType","MasterTypeHelper","firstVideo","showTexts","PlaySvg","SeriesSvg","TitleSubText","ThumbnailFixedListMediaSmallWidgetTemplate","subTextMap","hoverTextMap","collectionAppLink","hoverText","PartialThumbnailFixedSmallWidgetTemplate","getPresentationName","itemPresentation","itemPresentationName","_j","_k","_m","_l","_n","ThumbnailFixedListSmallWidgetTemplate","getContent","thumbnailWidgetItemProps","PartialThumbnailFixedListXLargeWidgetTemplate","ThumbnailFixedListXLargeWidgetTemplate","PartialThumbnailHeroMediaWidgetTemplate","ThumbnailHeroMediaWidgetTemplate","hasSubText","showNewVideoIndicator","canNavigate","VideoTitle","PartialThumbnailSlidingListLargeWidgetTemplate","ThumbnailSlidingListLargeWidgetTemplate","ThumbnailSlidingListSmallWidgetTemplate","VideoWidgetItemV2","MultimediaWidgetItem","onClickDownload","resource","DownloadHelper","ResourceWidgetItem","ThumbnailSlidingListSmallV2WidgetTemplate","canViewResources","PartialThumbnailVerticalListWidgetTemplate","PartialVideoList","WidgetTemplateCoverFixedPillListLargeSvg","WidgetTemplateCoverFixedPillListXSmallSvg","WidgetTemplatePosterSlidingListLargeSvg","WidgetTemplatePosterSlidingListMediumSvg","WidgetTemplatePosterSlidingListSmallSvg","WidgetTemplateStatsCoverFixedPillListLargeSvg","WidgetTemplateThumbnailFeaturedMediaSvg","WidgetTemplateThumbnailHeroMediaSvg","PartialCurriculumCodeSearchResultsWidgetTemplate","WidgetTemplateAuthorReviewerSvg","WidgetTemplateCircleLogoSlidingListSvg","WidgetTemplateCoverFixedTileListSvg","WidgetTemplateCoverSlidingPillListSmallSvg","WidgetTemplateEditableCoverFixedPillListSmallSvg","WidgetTemplateEventIconSlidingListSvg","WidgetTemplateFeaturedThumbnailSlidingListSvg","WidgetTemplateFilterSlidingPillListSmallSvg","WidgetTemplateHeadingSvg","WidgetTemplateHeroBannerSmallSvg","WidgetTemplateHeroBannerSvg","WidgetTemplateHeroBlockColourSmallSvg","WidgetTemplateHeroThumbnailSmallSvg","WidgetTemplateOnboardingStepsSvg","WidgetTemplatePopoutThumbnailSlidingListLargeSvg","WidgetTemplatePopoutThumbnailSlidingListSmallSvg","WidgetTemplateQuestionAccordionSvg","WidgetTemplateQuestionSvg","WidgetTemplateThumbnailFixedListLargeSvg","WidgetTemplateThumbnailFixedListMediaLargeSvg","WidgetTemplateThumbnailFixedListSmallSvg","WidgetTemplateThumbnailFixedListXLargeSvg","WidgetTemplateThumbnailSlidingListLargeSvg","WidgetTemplateThumbnailSlidingListSmallSvg","WidgetTemplateThumbnailVerticalListSvg","WidgetTemplateConfig","targetType","DashboardTargetType","PartialPosterSlidingListLargeWidgetTemplate","product","ProductId","widgetId","widgetTypeId","CoverFixedPillListLargeWidgetTemplate","isTopLevelClassification","PartialThumbnailSlidingListSmallV2WidgetTemplate","PartialThumbnailFixedListMediaSmallWidgetTemplate","PartialThumbnailFixedListFolderSmallWidgetTemplate","PartialPosterFixedListLargeWidgetTemplate","PartialThumbnailSlidingListSmallWidgetTemplate","isEmptyWidget","WidgetContainerView","scrollToRef","removedItemIds","setRemovedItemIds","shouldLazyLoad","partialLoadingRef","inView","useLazyLoad","willFetch","lazyWidget","isEmpty","shouldHideWidget","itemId","itemName","getVideoTypeAppLink","showPartialLoadingComponent","template","PartialTemplate","Template","widgetTemplateClass","hasNewVideoHighlight","el","useFetchDashboard","PresentationRequests","shouldFetchDashboard","getStatuses","DashboardStatus","DashboardRequests","DashboardUserType","CuratedDashboardHelper"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9]}
|