@clickview/streamable-learning 0.34.1-dev.1 → 0.35.0-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundles.json +2 -2
- package/dist/css/103-streamable-learning-5060b6cda5.chunk.css +7 -0
- package/dist/css/1269-streamable-learning-a12c4ebc99.chunk.css +2 -0
- package/dist/css/1457-streamable-learning-c8c8b3b9b1.chunk.css +50 -0
- package/dist/css/2334-streamable-learning-de03ae073a.chunk.css +2 -0
- package/dist/css/3322-streamable-learning-510e1aa3f3.chunk.css +34 -0
- package/dist/css/3838-streamable-learning-da10685fe8.chunk.css +22 -0
- package/dist/css/4254-streamable-learning-e493f4a027.chunk.css +2 -0
- package/dist/css/4607-streamable-learning-2605302fc2.chunk.css +90 -0
- package/dist/css/4772-streamable-learning-f83b838d71.chunk.css +9 -0
- package/dist/css/5003-streamable-learning-b38d2ddbbe.chunk.css +98 -0
- package/dist/css/5565-streamable-learning-0caae3809b.chunk.css +13 -0
- package/dist/css/6017-streamable-learning-098a205d01.chunk.css +6 -0
- package/dist/css/6356-streamable-learning-8c5b220bf6.chunk.css +1 -0
- package/dist/css/6987-streamable-learning-8f682301c6.chunk.css +1 -0
- package/dist/css/7317-streamable-learning-b5d226bbb6.chunk.css +5 -0
- package/dist/css/8058-streamable-learning-539cf7be18.chunk.css +12 -0
- package/dist/css/8294-streamable-learning-c797263ac2.chunk.css +1 -0
- package/dist/css/8496-streamable-learning-ce19f6ca52.chunk.css +13 -0
- package/dist/css/8601-streamable-learning-f525210660.chunk.css +6 -0
- package/dist/css/9514-streamable-learning-251703c6d1.chunk.css +2 -0
- package/dist/css/9766-streamable-learning-31650ffe5d.chunk.css +8 -0
- package/dist/css/9842-streamable-learning-24729103f7.chunk.css +4 -0
- package/dist/css/9899-streamable-learning-0338f8d2dc.chunk.css +4 -0
- package/dist/css/streamable-learning-dd0c1095d5.css +23 -0
- package/dist/languages/en.json +1 -0
- package/dist/scripts/103-aceced8961-streamable-learning.chunk.js +1 -0
- package/dist/scripts/1097-680a971192-streamable-learning.chunk.js +2 -0
- package/dist/scripts/1097-680a971192-streamable-learning.chunk.js.LICENSE.txt +105 -0
- package/dist/scripts/1269-2d0b903343-streamable-learning.chunk.js +2 -0
- package/dist/scripts/1269-2d0b903343-streamable-learning.chunk.js.LICENSE.txt +1 -0
- package/dist/scripts/1457-899f40d09a-streamable-learning.chunk.js +1 -0
- package/dist/scripts/1482-b1dd75897c-streamable-learning.chunk.js +1 -0
- package/dist/scripts/1934-fc017df0da-streamable-learning.chunk.js +2 -0
- package/dist/scripts/1934-fc017df0da-streamable-learning.chunk.js.LICENSE.txt +9 -0
- package/dist/scripts/2042-d51622d63e-streamable-learning.chunk.js +1 -0
- package/dist/scripts/2087-eba9033b1c-streamable-learning.chunk.js +1 -0
- package/dist/scripts/2245-8cd3224e1b-streamable-learning.chunk.js +1 -0
- package/dist/scripts/2334-00b028191d-streamable-learning.chunk.js +1 -0
- package/dist/scripts/2676-c842ec7e8d-streamable-learning.chunk.js +2 -0
- package/dist/scripts/2676-c842ec7e8d-streamable-learning.chunk.js.LICENSE.txt +1 -0
- package/dist/scripts/2877-5ffc9711f6-streamable-learning.chunk.js +1 -0
- package/dist/scripts/2911-2ec3a6600a-streamable-learning.chunk.js +1 -0
- package/dist/scripts/3057-731a8ca978-streamable-learning.chunk.js +1 -0
- package/dist/scripts/3093-efbcc927ea-streamable-learning.chunk.js +1 -0
- package/dist/scripts/3186-d1a6ccffde-streamable-learning.chunk.js +1 -0
- package/dist/scripts/3322-33c015dec9-streamable-learning.chunk.js +1 -0
- package/dist/scripts/3472-50ca92bde3-streamable-learning.chunk.js +1 -0
- package/dist/scripts/3838-4a38f33dc2-streamable-learning.chunk.js +1 -0
- package/dist/scripts/3941-2ef15ca9ac-streamable-learning.chunk.js +1 -0
- package/dist/scripts/4254-ef581b8105-streamable-learning.chunk.js +1 -0
- package/dist/scripts/4607-a4edb06dba-streamable-learning.chunk.js +2 -0
- package/dist/scripts/4607-a4edb06dba-streamable-learning.chunk.js.LICENSE.txt +1 -0
- package/dist/scripts/4772-3cb280f959-streamable-learning.chunk.js +2 -0
- package/dist/scripts/4772-3cb280f959-streamable-learning.chunk.js.LICENSE.txt +1 -0
- package/dist/scripts/4951-df701c6a8d-streamable-learning.chunk.js +1 -0
- package/dist/scripts/5003-7468a75d64-streamable-learning.chunk.js +2 -0
- package/dist/scripts/5003-7468a75d64-streamable-learning.chunk.js.LICENSE.txt +1 -0
- package/dist/scripts/5088-2e09e1ba6e-streamable-learning.chunk.js +1 -0
- package/dist/scripts/5173-a800a17d0d-streamable-learning.chunk.js +1 -0
- package/dist/scripts/5446-2cbe9f9d1b-streamable-learning.chunk.js +1 -0
- package/dist/scripts/5543-205aaa36a6-streamable-learning.chunk.js +1 -0
- package/dist/scripts/5565-224d86dc1b-streamable-learning.chunk.js +1 -0
- package/dist/scripts/578-2cc99f46f7-streamable-learning.chunk.js +1 -0
- package/dist/scripts/6017-5bd6f9bf7a-streamable-learning.chunk.js +2 -0
- package/dist/scripts/6017-5bd6f9bf7a-streamable-learning.chunk.js.LICENSE.txt +1 -0
- package/dist/scripts/6356-eefa3ff22e-streamable-learning.chunk.js +1 -0
- package/dist/scripts/6979-ef9a3931a2-streamable-learning.chunk.js +2 -0
- package/dist/scripts/6979-ef9a3931a2-streamable-learning.chunk.js.LICENSE.txt +1 -0
- package/dist/scripts/6987-e58de31cfe-streamable-learning.chunk.js +1 -0
- package/dist/scripts/7317-6b7186c85d-streamable-learning.chunk.js +1 -0
- package/dist/scripts/7347-772848ba8a-streamable-learning.chunk.js +1 -0
- package/dist/scripts/7570-cd4f70ff52-streamable-learning.chunk.js +2 -0
- package/dist/scripts/7570-cd4f70ff52-streamable-learning.chunk.js.LICENSE.txt +1 -0
- package/dist/scripts/7904-96574373ca-streamable-learning.chunk.js +1 -0
- package/dist/scripts/7925-1e1cfa2a04-streamable-learning.chunk.js +1 -0
- package/dist/scripts/8058-51c4b442d6-streamable-learning.chunk.js +1 -0
- package/dist/scripts/8126-9d09959b28-streamable-learning.chunk.js +2 -0
- package/dist/scripts/8126-9d09959b28-streamable-learning.chunk.js.LICENSE.txt +60 -0
- package/dist/scripts/8397-39ce77876d-streamable-learning.chunk.js +1 -0
- package/dist/scripts/8496-1b2519f9fd-streamable-learning.chunk.js +2 -0
- package/dist/scripts/8496-1b2519f9fd-streamable-learning.chunk.js.LICENSE.txt +1 -0
- package/dist/scripts/8599-b74e1ab6e3-streamable-learning.chunk.js +1 -0
- package/dist/scripts/8601-37783cf18b-streamable-learning.chunk.js +1 -0
- package/dist/scripts/8819-2a50dd6a9b-streamable-learning.chunk.js +1 -0
- package/dist/scripts/8937-5103db88d8-streamable-learning.chunk.js +1 -0
- package/dist/scripts/9390-bbaf07ad0f-streamable-learning.chunk.js +1 -0
- package/dist/scripts/9514-a31ca9af06-streamable-learning.chunk.js +1 -0
- package/dist/scripts/9766-48d72d9285-streamable-learning.chunk.js +2 -0
- package/dist/scripts/9766-48d72d9285-streamable-learning.chunk.js.LICENSE.txt +1 -0
- package/dist/scripts/9842-36d830ee87-streamable-learning.chunk.js +1 -0
- package/dist/scripts/9899-f33e8f1d43-streamable-learning.chunk.js +2 -0
- package/dist/scripts/9899-f33e8f1d43-streamable-learning.chunk.js.LICENSE.txt +1 -0
- package/dist/scripts/bundle-7ea4deeaa8.min.js +2 -0
- package/dist/scripts/bundle-7ea4deeaa8.min.js.LICENSE.txt +108 -0
- package/dist/scripts/pdf.worker.entry-a2092a6670.min.worker.js +2 -0
- package/dist/scripts/pdf.worker.entry-a2092a6670.min.worker.js.LICENSE.txt +21 -0
- package/package.json +3 -5
- package/typings/utils/imports.d.ts +1 -2
- package/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- package/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- package/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- package/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- package/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- package/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- package/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- package/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- package/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- package/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- package/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- package/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- package/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- package/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- package/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- package/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- package/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- package/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- package/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- package/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- package/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- package/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- package/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- package/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- package/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- package/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- package/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- package/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- package/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- package/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- package/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- package/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- package/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- package/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- package/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- package/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- package/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- package/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- package/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- package/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- package/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- package/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- package/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- package/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- package/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- package/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- package/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- package/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- package/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- package/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- package/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- package/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- package/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- package/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- package/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- package/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- package/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- package/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- package/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- package/dist/css/B-attovs.chunk.css +0 -9
- package/dist/css/B1NucFMn.chunk.css +0 -1
- package/dist/css/BPdg7JW4.chunk.css +0 -1
- package/dist/css/BPrUSCaY.chunk.css +0 -1
- package/dist/css/BR0fUt9D.chunk.css +0 -1
- package/dist/css/BhYm6SRm.chunk.css +0 -1
- package/dist/css/BiRz4h1c.chunk.css +0 -1
- package/dist/css/Bq1ChJn4.chunk.css +0 -1
- package/dist/css/Bt85j9js.chunk.css +0 -1
- package/dist/css/BuYrqi9E.chunk.css +0 -1
- package/dist/css/BugV1Bpa.chunk.css +0 -1
- package/dist/css/BuuVPl7n.chunk.css +0 -1
- package/dist/css/C1NkrNqQ.chunk.css +0 -1
- package/dist/css/C1qv5jz5.chunk.css +0 -1
- package/dist/css/C7XoyEPr.chunk.css +0 -1
- package/dist/css/C7_MDu56.chunk.css +0 -1
- package/dist/css/CC5F5C8O.chunk.css +0 -1
- package/dist/css/CChSC6Ta.chunk.css +0 -1
- package/dist/css/CCsCPLDG.chunk.css +0 -1
- package/dist/css/CD1qrI1T.chunk.css +0 -1
- package/dist/css/CKqvCBj4.chunk.css +0 -1
- package/dist/css/CLZ0Ycds.chunk.css +0 -1
- package/dist/css/CO7M4rZW.chunk.css +0 -1
- package/dist/css/CY0yvCW4.chunk.css +0 -1
- package/dist/css/CYGsw8FT.chunk.css +0 -1
- package/dist/css/Cbi3KYBa.chunk.css +0 -1
- package/dist/css/CliS8Q8r.chunk.css +0 -1
- package/dist/css/D-kQKsZN.chunk.css +0 -1
- package/dist/css/D2NwUVrK.chunk.css +0 -1
- package/dist/css/D4g1IoUU.chunk.css +0 -1
- package/dist/css/DBgpcO3T.chunk.css +0 -1
- package/dist/css/DDnpOnVB.chunk.css +0 -1
- package/dist/css/DZJSONGP.chunk.css +0 -1
- package/dist/css/Dc0zNt2E.chunk.css +0 -1
- package/dist/css/DeAfaPiD.chunk.css +0 -1
- package/dist/css/Dj731zLm.chunk.css +0 -1
- package/dist/css/DjPPxa0A.chunk.css +0 -1
- package/dist/css/DlOtoSz0.chunk.css +0 -1
- package/dist/css/DwduQat7.chunk.css +0 -1
- package/dist/css/Dzuu2GTx.chunk.css +0 -1
- package/dist/css/JAvsJreH.chunk.css +0 -1
- package/dist/css/NKlFYVOc.chunk.css +0 -1
- package/dist/css/VZd8qGtK.chunk.css +0 -1
- package/dist/css/Y7U--2na.chunk.css +0 -1
- package/dist/css/ir3IcK_l.chunk.css +0 -1
- package/dist/css/jbMisi9r.chunk.css +0 -1
- package/dist/css/kS5aDtIJ.chunk.css +0 -1
- package/dist/css/mqCL1o7m.chunk.css +0 -1
- package/dist/css/qZzkUeZk.chunk.css +0 -1
- package/dist/css/sC_H3yXE.chunk.css +0 -1
- package/dist/css/wR_6C_NV.chunk.css +0 -1
- package/dist/en.json +0 -1
- package/dist/scripts/-Oi3rE3V.chunk.js +0 -5
- package/dist/scripts/-Oi3rE3V.chunk.js.map +0 -1
- package/dist/scripts/-cwk-1Iv.chunk.js +0 -2
- package/dist/scripts/-cwk-1Iv.chunk.js.map +0 -1
- package/dist/scripts/4oi1ldJ4.chunk.js +0 -3
- package/dist/scripts/4oi1ldJ4.chunk.js.map +0 -1
- package/dist/scripts/6UeJLeAd.chunk.js +0 -2
- package/dist/scripts/6UeJLeAd.chunk.js.map +0 -1
- package/dist/scripts/8zar0u1i.chunk.js +0 -2
- package/dist/scripts/8zar0u1i.chunk.js.map +0 -1
- package/dist/scripts/9NIa7Pi_.chunk.js +0 -2
- package/dist/scripts/9NIa7Pi_.chunk.js.map +0 -1
- package/dist/scripts/B5OOLcT3.chunk.js +0 -2
- package/dist/scripts/B5OOLcT3.chunk.js.map +0 -1
- package/dist/scripts/B8XJmK96.chunk.js +0 -8
- package/dist/scripts/B8XJmK96.chunk.js.map +0 -1
- package/dist/scripts/BA6k9XoA.chunk.js +0 -2
- package/dist/scripts/BA6k9XoA.chunk.js.map +0 -1
- package/dist/scripts/BBnDr_iy.chunk.js +0 -2
- package/dist/scripts/BBnDr_iy.chunk.js.map +0 -1
- package/dist/scripts/BEL0opwe.chunk.js +0 -2
- package/dist/scripts/BEL0opwe.chunk.js.map +0 -1
- package/dist/scripts/BHmtLW9C.chunk.js +0 -2
- package/dist/scripts/BHmtLW9C.chunk.js.map +0 -1
- package/dist/scripts/BJ0C6oH6.chunk.js +0 -2
- package/dist/scripts/BJ0C6oH6.chunk.js.map +0 -1
- package/dist/scripts/BPcJv8Nj.chunk.js +0 -2
- package/dist/scripts/BPcJv8Nj.chunk.js.map +0 -1
- package/dist/scripts/BQQ9SPei.chunk.js +0 -10
- package/dist/scripts/BQQ9SPei.chunk.js.map +0 -1
- package/dist/scripts/BQQZ0Zva.chunk.js +0 -2
- package/dist/scripts/BQQZ0Zva.chunk.js.map +0 -1
- package/dist/scripts/BRKKXF-k.chunk.js +0 -2
- package/dist/scripts/BRKKXF-k.chunk.js.map +0 -1
- package/dist/scripts/BUhbk0mt.chunk.js +0 -2
- package/dist/scripts/BUhbk0mt.chunk.js.map +0 -1
- package/dist/scripts/BXKrMYdw.chunk.js +0 -2
- package/dist/scripts/BXKrMYdw.chunk.js.map +0 -1
- package/dist/scripts/B_eK8A25.chunk.js +0 -2
- package/dist/scripts/B_eK8A25.chunk.js.map +0 -1
- package/dist/scripts/BbjveACT.chunk.js +0 -2
- package/dist/scripts/BbjveACT.chunk.js.map +0 -1
- package/dist/scripts/BdHxGaRy.chunk.js +0 -2
- package/dist/scripts/BdHxGaRy.chunk.js.map +0 -1
- package/dist/scripts/BeHz9c4V.chunk.js +0 -2
- package/dist/scripts/BeHz9c4V.chunk.js.map +0 -1
- package/dist/scripts/BexFb8rj.chunk.js +0 -2
- package/dist/scripts/BexFb8rj.chunk.js.map +0 -1
- package/dist/scripts/Bi8YRFeY.chunk.js +0 -2
- package/dist/scripts/Bi8YRFeY.chunk.js.map +0 -1
- package/dist/scripts/Bj3i6I7i.chunk.js +0 -2
- package/dist/scripts/Bj3i6I7i.chunk.js.map +0 -1
- package/dist/scripts/BktU87GA.chunk.js +0 -2
- package/dist/scripts/BktU87GA.chunk.js.map +0 -1
- package/dist/scripts/Bl1HvG0b.chunk.js +0 -2
- package/dist/scripts/Bl1HvG0b.chunk.js.map +0 -1
- package/dist/scripts/BnWlQ7-4.chunk.js +0 -2
- package/dist/scripts/BnWlQ7-4.chunk.js.map +0 -1
- package/dist/scripts/BoqzK1u7.chunk.js +0 -2
- package/dist/scripts/BoqzK1u7.chunk.js.map +0 -1
- package/dist/scripts/Bsa3zcW0.chunk.js +0 -2
- package/dist/scripts/Bsa3zcW0.chunk.js.map +0 -1
- package/dist/scripts/Bt3kaRtU.chunk.js +0 -6
- package/dist/scripts/Bt3kaRtU.chunk.js.map +0 -1
- package/dist/scripts/BtiKTu8r.chunk.js +0 -2
- package/dist/scripts/BtiKTu8r.chunk.js.map +0 -1
- package/dist/scripts/BwOoIPmc.chunk.js +0 -2
- package/dist/scripts/BwOoIPmc.chunk.js.map +0 -1
- package/dist/scripts/BwuSNwcs.chunk.js +0 -2
- package/dist/scripts/BwuSNwcs.chunk.js.map +0 -1
- package/dist/scripts/Byn8R7bs.chunk.js +0 -2
- package/dist/scripts/Byn8R7bs.chunk.js.map +0 -1
- package/dist/scripts/C2Zu5vKc.chunk.js +0 -2
- package/dist/scripts/C2Zu5vKc.chunk.js.map +0 -1
- package/dist/scripts/C2uxO8e2.chunk.js +0 -2
- package/dist/scripts/C2uxO8e2.chunk.js.map +0 -1
- package/dist/scripts/C35NlkUr.chunk.js +0 -2
- package/dist/scripts/C35NlkUr.chunk.js.map +0 -1
- package/dist/scripts/C5QPXJGU.chunk.js +0 -15
- package/dist/scripts/C5QPXJGU.chunk.js.map +0 -1
- package/dist/scripts/C6mGMCz4.chunk.js +0 -2
- package/dist/scripts/C6mGMCz4.chunk.js.map +0 -1
- package/dist/scripts/C8ZuWYfb.chunk.js +0 -2
- package/dist/scripts/C8ZuWYfb.chunk.js.map +0 -1
- package/dist/scripts/CEmtkty-.chunk.js +0 -2
- package/dist/scripts/CEmtkty-.chunk.js.map +0 -1
- package/dist/scripts/CICkmQW6.chunk.js +0 -2
- package/dist/scripts/CICkmQW6.chunk.js.map +0 -1
- package/dist/scripts/CLumRL-T.chunk.js +0 -2
- package/dist/scripts/CLumRL-T.chunk.js.map +0 -1
- package/dist/scripts/CO_D2O4I.chunk.js +0 -2
- package/dist/scripts/CO_D2O4I.chunk.js.map +0 -1
- package/dist/scripts/CPXlV0fg.chunk.js +0 -2
- package/dist/scripts/CPXlV0fg.chunk.js.map +0 -1
- package/dist/scripts/CQZOieOF.chunk.js +0 -2
- package/dist/scripts/CQZOieOF.chunk.js.map +0 -1
- package/dist/scripts/CQoWqq54.chunk.js +0 -2
- package/dist/scripts/CQoWqq54.chunk.js.map +0 -1
- package/dist/scripts/CRT9qru0.chunk.js +0 -2
- package/dist/scripts/CRT9qru0.chunk.js.map +0 -1
- package/dist/scripts/CU6iZ8MR.chunk.js +0 -2
- package/dist/scripts/CU6iZ8MR.chunk.js.map +0 -1
- package/dist/scripts/CUltMbyK.chunk.js +0 -2
- package/dist/scripts/CUltMbyK.chunk.js.map +0 -1
- package/dist/scripts/CW7x8M-z.chunk.js +0 -2
- package/dist/scripts/CW7x8M-z.chunk.js.map +0 -1
- package/dist/scripts/CYlwi5iC.chunk.js +0 -7
- package/dist/scripts/CYlwi5iC.chunk.js.map +0 -1
- package/dist/scripts/CgJckl-g.chunk.js +0 -2
- package/dist/scripts/CgJckl-g.chunk.js.map +0 -1
- package/dist/scripts/Cj5ETNHP.chunk.js +0 -2
- package/dist/scripts/Cj5ETNHP.chunk.js.map +0 -1
- package/dist/scripts/Cmu1J2M7.chunk.js +0 -262
- package/dist/scripts/Cmu1J2M7.chunk.js.map +0 -1
- package/dist/scripts/Cr8fUgj9.chunk.js +0 -2
- package/dist/scripts/Cr8fUgj9.chunk.js.map +0 -1
- package/dist/scripts/CtM_cXum.chunk.js +0 -2
- package/dist/scripts/CtM_cXum.chunk.js.map +0 -1
- package/dist/scripts/Cv1FGdNu.chunk.js +0 -2
- package/dist/scripts/Cv1FGdNu.chunk.js.map +0 -1
- package/dist/scripts/CvPDjx7y.chunk.js +0 -2
- package/dist/scripts/CvPDjx7y.chunk.js.map +0 -1
- package/dist/scripts/D0bydDVL.chunk.js +0 -2
- package/dist/scripts/D0bydDVL.chunk.js.map +0 -1
- package/dist/scripts/D1EE4AEz.chunk.js +0 -356
- package/dist/scripts/D1EE4AEz.chunk.js.map +0 -1
- package/dist/scripts/D84-WY3k.chunk.js +0 -2
- package/dist/scripts/D84-WY3k.chunk.js.map +0 -1
- package/dist/scripts/DAh7Ea13.chunk.js +0 -2
- package/dist/scripts/DAh7Ea13.chunk.js.map +0 -1
- package/dist/scripts/DBIkG3Bu.chunk.js +0 -2
- package/dist/scripts/DBIkG3Bu.chunk.js.map +0 -1
- package/dist/scripts/DCcI7sWt.chunk.js +0 -2
- package/dist/scripts/DCcI7sWt.chunk.js.map +0 -1
- package/dist/scripts/DEP24A-f.chunk.js +0 -2
- package/dist/scripts/DEP24A-f.chunk.js.map +0 -1
- package/dist/scripts/DGFORsAE.chunk.js +0 -2
- package/dist/scripts/DGFORsAE.chunk.js.map +0 -1
- package/dist/scripts/DGaf-Jy9.chunk.js +0 -2
- package/dist/scripts/DGaf-Jy9.chunk.js.map +0 -1
- package/dist/scripts/DJyZ6Hx7.chunk.js +0 -2
- package/dist/scripts/DJyZ6Hx7.chunk.js.map +0 -1
- package/dist/scripts/DOCam-GK.chunk.js +0 -2
- package/dist/scripts/DOCam-GK.chunk.js.map +0 -1
- package/dist/scripts/DSLX3H2r.chunk.js +0 -2
- package/dist/scripts/DSLX3H2r.chunk.js.map +0 -1
- package/dist/scripts/DSq4f4jm.chunk.js +0 -2
- package/dist/scripts/DSq4f4jm.chunk.js.map +0 -1
- package/dist/scripts/DXxBqeLg.chunk.js +0 -2
- package/dist/scripts/DXxBqeLg.chunk.js.map +0 -1
- package/dist/scripts/DZ6Jrm23.chunk.js +0 -2
- package/dist/scripts/DZ6Jrm23.chunk.js.map +0 -1
- package/dist/scripts/Daes5Wgy.chunk.js +0 -2
- package/dist/scripts/Daes5Wgy.chunk.js.map +0 -1
- package/dist/scripts/DeUbJqVo.chunk.js +0 -2
- package/dist/scripts/DeUbJqVo.chunk.js.map +0 -1
- package/dist/scripts/DgEqkZy0.chunk.js +0 -8
- package/dist/scripts/DgEqkZy0.chunk.js.map +0 -1
- package/dist/scripts/DhB-Uugx.chunk.js +0 -2
- package/dist/scripts/DhB-Uugx.chunk.js.map +0 -1
- package/dist/scripts/DhqAA1wT.chunk.js +0 -2
- package/dist/scripts/DhqAA1wT.chunk.js.map +0 -1
- package/dist/scripts/Di5-l4QJ.chunk.js +0 -2
- package/dist/scripts/Di5-l4QJ.chunk.js.map +0 -1
- package/dist/scripts/DiQkAtUx.chunk.js +0 -53
- package/dist/scripts/DiQkAtUx.chunk.js.map +0 -1
- package/dist/scripts/DireiQEp.chunk.js +0 -2
- package/dist/scripts/DireiQEp.chunk.js.map +0 -1
- package/dist/scripts/Dj66TI5y.chunk.js +0 -2
- package/dist/scripts/Dj66TI5y.chunk.js.map +0 -1
- package/dist/scripts/DkFkYS-j.chunk.js +0 -2
- package/dist/scripts/DkFkYS-j.chunk.js.map +0 -1
- package/dist/scripts/Dkq5GtOV.chunk.js +0 -2
- package/dist/scripts/Dkq5GtOV.chunk.js.map +0 -1
- package/dist/scripts/DmSSmUHZ.chunk.js +0 -2
- package/dist/scripts/DmSSmUHZ.chunk.js.map +0 -1
- package/dist/scripts/DoQU9vjn.chunk.js +0 -2
- package/dist/scripts/DoQU9vjn.chunk.js.map +0 -1
- package/dist/scripts/DtHh_hpg.chunk.js +0 -2
- package/dist/scripts/DtHh_hpg.chunk.js.map +0 -1
- package/dist/scripts/DvDdiDQN.chunk.js +0 -7
- package/dist/scripts/DvDdiDQN.chunk.js.map +0 -1
- package/dist/scripts/DwhG2uva.chunk.js +0 -2
- package/dist/scripts/DwhG2uva.chunk.js.map +0 -1
- package/dist/scripts/DxJlWHZr.chunk.js +0 -2
- package/dist/scripts/DxJlWHZr.chunk.js.map +0 -1
- package/dist/scripts/DxmeZ4C9.chunk.js +0 -2
- package/dist/scripts/DxmeZ4C9.chunk.js.map +0 -1
- package/dist/scripts/KuveJuNy.chunk.js +0 -2
- package/dist/scripts/KuveJuNy.chunk.js.map +0 -1
- package/dist/scripts/LKCLmV2A.chunk.js +0 -2
- package/dist/scripts/LKCLmV2A.chunk.js.map +0 -1
- package/dist/scripts/RnuR8yr3.chunk.js +0 -2
- package/dist/scripts/RnuR8yr3.chunk.js.map +0 -1
- package/dist/scripts/XxrnElSv.chunk.js +0 -2
- package/dist/scripts/XxrnElSv.chunk.js.map +0 -1
- package/dist/scripts/YF_QoXEj.chunk.js +0 -3
- package/dist/scripts/YF_QoXEj.chunk.js.map +0 -1
- package/dist/scripts/Z2sDSVPb.chunk.js +0 -2
- package/dist/scripts/Z2sDSVPb.chunk.js.map +0 -1
- package/dist/scripts/Zbze2j9b.chunk.js +0 -2
- package/dist/scripts/Zbze2j9b.chunk.js.map +0 -1
- package/dist/scripts/app-C56EnOMP.js +0 -216
- package/dist/scripts/app-C56EnOMP.js.map +0 -1
- package/dist/scripts/cvX-F_mx.chunk.js +0 -2
- package/dist/scripts/cvX-F_mx.chunk.js.map +0 -1
- package/dist/scripts/h34ZSRKe.chunk.js +0 -2
- package/dist/scripts/h34ZSRKe.chunk.js.map +0 -1
- package/dist/scripts/leubTuJo.chunk.js +0 -2
- package/dist/scripts/leubTuJo.chunk.js.map +0 -1
- package/dist/scripts/m5XtnRaH.chunk.js +0 -2
- package/dist/scripts/m5XtnRaH.chunk.js.map +0 -1
- package/dist/scripts/nay4aGaa.chunk.js +0 -2
- package/dist/scripts/nay4aGaa.chunk.js.map +0 -1
- package/dist/scripts/p61U8kXz.chunk.js +0 -2
- package/dist/scripts/p61U8kXz.chunk.js.map +0 -1
- package/dist/scripts/pkzD5BEm.chunk.js +0 -2
- package/dist/scripts/pkzD5BEm.chunk.js.map +0 -1
- package/dist/scripts/sc9-PV9Y.chunk.js +0 -2
- package/dist/scripts/sc9-PV9Y.chunk.js.map +0 -1
- package/dist/scripts/tAsRziXo.chunk.js +0 -8
- package/dist/scripts/tAsRziXo.chunk.js.map +0 -1
- package/dist/scripts/xrHhD6CF.chunk.js +0 -8
- package/dist/scripts/xrHhD6CF.chunk.js.map +0 -1
- package/dist/scripts/xxo027lm.chunk.js +0 -2
- package/dist/scripts/xxo027lm.chunk.js.map +0 -1
- package/vite.config.ts +0 -6
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BktU87GA.chunk.js","sources":["../../../../libs/shared/src/apps/subjects/components/classification-dashboard/classification-header-details/ClassificationHeaderDetails.tsx","../../../../libs/shared/src/apps/subjects/components/classification-dashboard/empty-state/CuratedClassificationEmptyState.tsx","../../../../libs/shared/src/components/table-of-contents-list/TableOfContentsList.tsx","../../../../libs/shared/src/apps/subjects/components/classification-dashboard/table-of-contents/TableOfContents.tsx","../../../../libs/shared/src/apps/subjects/components/classification-dashboard/teacher-only/TeacherOnlyEmptyState.tsx","../../../../libs/shared/src/apps/subjects/hooks/useGetTopicsWidgets.ts","../../../../libs/shared/src/hooks/useTableOfContentsActiveHeading.tsx","../../../../libs/shared/src/hooks/usePrevious.ts","../../../../libs/shared/src/hooks/useTableOfContentsScroll.tsx","../../../../libs/shared/src/apps/subjects/components/classification-dashboard/classification-coming-soon/ClassificationComingSoon.tsx","../../../../libs/shared/src/apps/subjects/components/classification-dashboard/audiences/ClassificationDashboardAudiences.tsx","../../../../libs/shared/src/context/product-tips-context/ProductTipsContext.tsx","../../../../libs/shared/src/images/svg/widgets/WidgetSeriesSvg.tsx","../../../../libs/shared/src/apps/subjects/hooks/useDirectoryTabProductTipSwitcher.ts","../../../../libs/shared/src/apps/subjects/components/classification-dashboard/classification-tabs/ClassificationTabs.tsx","../../../../libs/shared/src/apps/subjects/components/classification-dashboard/classification-dashboard-nav/ClassificationDashboardNav.tsx","../../../../libs/shared/src/apps/subjects/components/classification-dashboard/ClassificationDashboard.tsx","../../src/apps/subjects/errors/TopicNotFoundError.ts","../../src/apps/subjects/views/classification/partial-loading/PartialClassification.tsx","../../src/apps/subjects/views/classification/StreamableClassificationViewUtils.ts","../../src/apps/subjects/views/classification/StreamableClassificationView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Classification } from 'libs/shared/interfaces';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nconst namespace = 'subject.classificationHeaderDetails';\n\nconst Separator = ({ className }: { className: string }) =>\n <span className={className}>•</span>;\n\ninterface ClassificationHeaderDetailsProps {\n classification: Classification;\n}\n\nexport function ClassificationHeaderDetails(props: ClassificationHeaderDetailsProps): React.ReactElement {\n const {\n dashboardVideoCount,\n childDashboardVideoCount,\n dashboardResourceCount,\n childDashboardResourceCount,\n childClassificationCount\n } = TopicsHelper.getCounts(props.classification);\n\n const videoCount = dashboardVideoCount + childDashboardVideoCount;\n const resourceCount = dashboardResourceCount + childDashboardResourceCount;\n\n return (\n <p className='mb-n1 font-size-normal fw-normal mt-1'>\n {!!childClassificationCount && (\n <Text\n namespace={namespace}\n phrase='topics'\n options={{ count: childClassificationCount.toLocaleString(), smartCount: childClassificationCount }}\n />\n )}\n\n {!!videoCount && (\n <>\n {childClassificationCount > 0 && <Separator className='mx-2' />}\n <Text\n namespace={namespace}\n phrase='videos'\n options={{ count: videoCount.toLocaleString(), smartCount: videoCount }}\n />\n </>\n )}\n {!!resourceCount && (\n <>\n <Separator className='mx-2' />\n <Text\n namespace={namespace}\n phrase='resources'\n options={{ count: resourceCount.toLocaleString(), smartCount: resourceCount }}\n />\n </>\n )}\n </p>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { PlusSvg } from 'libs/shared/images/svg/actions/PlusSvg';\nimport { CuratedDashboard, DashboardStatus } from 'libs/shared/interfaces';\n\n\nconst namespace = 'subjects.curatedClassificationEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface CuratedClassificationEmptyStateProps {\n dashboard: CuratedDashboard;\n imageUrl: string;\n isReadonly: boolean;\n addWidgetApplink?: () => Core.AppLink;\n}\n\nexport function CuratedClassificationEmptyState(props: CuratedClassificationEmptyStateProps): JSX.Element {\n const isArchived = props.dashboard?.status === DashboardStatus.Archived;\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={props.imageUrl} altText={getPhrase('headingForNP')} />\n {!props.isReadonly ? (\n <EmptyState.Heading>\n <Text phrase='headingForNP' />\n </EmptyState.Heading>\n ) : (\n <>\n <EmptyState.Heading>\n <Text namespace={namespace} phrase='headingForCurator' />\n </EmptyState.Heading>\n <EmptyState.Info>\n <Text namespace={namespace} phrase='info' />\n </EmptyState.Info>\n <Tooltip title={isArchived ? LanguageService.getPhrase(namespace, 'archivedCtaTooltip') : ''} spanHack>\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'add')}\n appLink={props.addWidgetApplink?.()}\n className='btn btn-dark'\n icon={PlusSvg}\n disabled={isArchived}\n />\n </Tooltip>\n </>\n )}\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { ScrollHelper } from 'libs/common/backbone/utils/ScrollHelper';\n\nimport { EntityType, HashObject, 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';\n\nimport styles from './table-of-contents-list.module.scss';\n\nexport interface TableOfContentsItem<T=string> {\n name: string;\n id: T;\n tocIndentation?: number;\n}\n\ninterface TableOfContentsProps<T> {\n items: TableOfContentsItem<T>[];\n activeId: string;\n appLink?: Core.AppLink;\n analyticsData?: HashObject;\n setControlledId: (arg: string) => void;\n // set to true if the TOC is controlled by a local state rather than query params\n localState?: boolean;\n getAppLink?: (args: TableOfContentsItem<T>) => Core.AppLink;\n onItemClick?: (args: TableOfContentsItem<T>) => void;\n}\n\nexport function TableOfContentsList<T extends string>(props: TableOfContentsProps<T>): JSX.Element {\n const analyticsOptions = {\n actionType: UserAction.Click,\n entity: EntityType.Widget,\n location: LocationContext.TableOfContents\n };\n\n function onItemSelect(item: TableOfContentsItem<T>) {\n ScrollHelper.preventScrollTop();\n props.setControlledId(item.id);\n \n props.onItemClick?.(item);\n \n setTimeout(() => document.getElementById(item.id)?.focus());\n }\n\n function getTocIndentClass(item: TableOfContentsItem<T>): string {\n if (item.tocIndentation === 1)\n return styles.tocIndent1;\n \n if (item.tocIndentation === 2)\n return styles.tocIndent2;\n\n return '';\n }\n\n return (\n <div className={`${styles.itemsWrapper}`}>\n {props.items.map((item, idx) => {\n if (props.localState) {\n return (\n <DivButton\n key={item.id}\n className={`${styles.anchorWrapper} ${props.activeId === item.id ? styles.selectedItem : ''}`}\n onClick={() => {\n onItemSelect(item);\n }}\n >\n <div className={`${!props.activeId && idx === 0 ? styles.default : ''} `}>\n {item.name}\n </div>\n </DivButton>\n );\n }\n\n return (\n <AppLink\n key={item.id}\n appLink={props.getAppLink(item)}\n appLinkOptions={{ replace: true }}\n className={`${styles.anchorWrapper} ${props.activeId === item.id ? styles.selectedItem : ''}`}\n onClick={() => {\n onItemSelect(item);\n }}\n analyticsData={{\n ...props.analyticsData,\n id: item.id,\n name: item.name\n }}\n analyticsOptions={analyticsOptions}\n >\n <div className={`${!props.activeId && idx === 0 ? styles.default : ''} ${getTocIndentClass(item)}`}>\n {item.name}\n </div>\n </AppLink>\n );\n })}\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, HashObject, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { TableOfContentsList } from 'libs/shared/components/table-of-contents-list/TableOfContentsList';\nimport { TableOfContentsSvg } from 'libs/shared/images/svg/objects/TableOfContentsSvg';\nimport { CuratedWidget } from 'libs/shared/interfaces';\nimport { ContextService } from 'libs/shared/services/ContextService';\n\nimport styles from './table-of-contents.module.scss';\n\ninterface TableOfContentsContainerProps {\n widgets: CuratedWidget[];\n title: string;\n activeId: string;\n appLink?: Core.AppLink;\n clickable?: boolean;\n analyticsData?: HashObject;\n setControlledId: (arg: string) => void;\n isSmallScreen?: boolean;\n}\ninterface TableOfContentsProps extends TableOfContentsContainerProps {\n getAppLink: (widget: CuratedWidget) => Core.AppLink\n}\n\nfunction TableOfContentsMobile(props: TableOfContentsProps) {\n const [ isExpanded, setIsExpanded ] = React.useState(false);\n\n function logUserAction() {\n const analyticsOptions = {\n actionType: !isExpanded ? UserAction.Open : UserAction.Hide,\n entity: EntityType.TableOfContents,\n location: LocationContext.Dashboard\n };\n\n AnalyticsHelper.logUserAction(props.analyticsData, analyticsOptions);\n }\n\n function onClickIcon() {\n setIsExpanded(!isExpanded);\n logUserAction();\n }\n\n return (\n <div className={`${styles.mobile} d-inline-flex gap-1`}>\n \n {isExpanded && (\n <div className='bg-white px-3 pt-3 pb-2 border border-dark rounded-1 ps-3'>\n <h2 className='h5'>{props.title}</h2>\n <TableOfContentsList\n items={props.widgets.map(widget => (\n { name: widget.name, id: widget.id, tocIndentation: widget.metadata.tocIndentation }\n ))}\n activeId={props.activeId}\n appLink={props.appLink}\n analyticsData={props.analyticsData}\n setControlledId={props.setControlledId}\n getAppLink={props.getAppLink}\n onItemClick={() => setIsExpanded(false)}\n />\n </div>\n )}\n <div className={styles.container}>\n <IconButton\n className='btn btn-outline-dark'\n svg={TableOfContentsSvg}\n onClick={onClickIcon}\n />\n </div>\n </div>\n );\n}\n\nfunction TableOfContents(props: TableOfContentsProps): JSX.Element {\n return (\n <aside className='col-3 order-1'>\n <div className={`${styles.container} ps-3`}>\n <h2 className='h5'>{props.title}</h2>\n \n <TableOfContentsList\n items={props.widgets.map(widget => (\n { name: widget.name, id: widget.id, tocIndentation: widget.metadata.tocIndentation }\n ))}\n activeId={props.activeId}\n appLink={props.appLink}\n analyticsData={props.analyticsData}\n setControlledId={props.setControlledId}\n getAppLink={props.getAppLink}\n />\n </div>\n </aside>\n );\n}\n\nexport function TableOfContentsContainer(props: TableOfContentsContainerProps): JSX.Element {\n function getAppLink(widget: CuratedWidget): Core.AppLink {\n const currentAppLink = ContextService.getCurrentRoute().appLink;\n \n const params: HashObject = currentAppLink.params\n ? { ...(currentAppLink.params as HashObject) }\n : {};\n\n params.tocId = widget.id;\n\n return {\n ...currentAppLink,\n params\n };\n }\n\n return (\n <>\n {!props.isSmallScreen\n ? <TableOfContents {...props} getAppLink={getAppLink} />\n : <TableOfContentsMobile {...props} getAppLink={getAppLink} />\n }\n </>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'subjects.teacherOnlyEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface TeacherOnlyEmptyStateProps {\n imageUrl: string;\n ctaAppLink?: () => Core.AppLink;\n}\n\nexport function TeacherOnlyEmptyState(props: TeacherOnlyEmptyStateProps): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={props.imageUrl} altText={getPhrase('heading')} />\n <EmptyState.Heading>\n <Text phrase='heading' />\n </EmptyState.Heading>\n <EmptyState.Info>\n <Text phrase='info' />\n </EmptyState.Info>\n\n <EmptyState.Cta\n text={getPhrase('cta')}\n appLink={props.ctaAppLink?.()}\n className='btn btn-dark'\n />\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}","import React from 'react';\n\nimport { Flight } from 'libs/common/react/index';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { DashboardRequests } from 'libs/shared/flight-requests/DashboardRequests';\nimport { CuratedDashboard, CuratedMediaWidget, CuratedWidget, PresentationAudience, Video } from 'libs/shared/interfaces';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nexport interface Response {\n widgets: CuratedWidget[];\n\n videoList?: Video[];\n videoListWidgetId?: string;\n}\n\n/**\n * This hook helps us with custom logic for to display system generated dashboards in a slightly\n * different way.\n */\nexport function useGetTopicsWidgets(dashboard: CuratedDashboard, activeAudiences: PresentationAudience[]): Response {\n const {\n isSystemGeneratedDashboard,\n systemGeneratedVideoWidget\n } = React.useMemo(() => {\n if (!dashboard) {\n return {\n isSystemGeneratedDashboard: false,\n systemGeneratedVideoWidget: null\n };\n }\n\n const isSystemGeneratedDashboard = CuratedDashboardHelper.isSystemGeneratedDashboard(dashboard.widgets);\n\n return {\n isSystemGeneratedDashboard,\n systemGeneratedVideoWidget: dashboard.widgets.find(widget => {\n return (\n widget.widgetId === WidgetTypeId.ClassificationPinnedVideos &&\n widget.templateId !== WidgetTemplate.ThumbnailVerticalList\n );\n })\n };\n }, [dashboard?.id]);\n\n const systemGeneratedVideoContent = Flight.useBasicFetch<CuratedMediaWidget<Video[]>>(\n !!systemGeneratedVideoWidget &&\n DashboardRequests.dashboardWidgetContent(\n systemGeneratedVideoWidget?.id,\n CuratedDashboardHelper.getWidgetParams(\n systemGeneratedVideoWidget.widgetId,\n systemGeneratedVideoWidget.templateId,\n CuratedDashboardHelper.getDashboardTargetType(dashboard),\n activeAudiences?.map(a => a.masterId)\n ),\n systemGeneratedVideoWidget?.templateId\n )\n );\n\n // Non system generated dashboards are returned as per usual\n if (!isSystemGeneratedDashboard)\n return { widgets: ArrayHelper.sortBy(dashboard?.widgets, 'index') };\n\n // System generated dashboard have the video widget removed and returned as a separate video list\n return {\n widgets: dashboard?.widgets?.filter(widget => {\n if (widget.widgetId !== WidgetTypeId.ClassificationPinnedVideos)\n return true;\n\n if (widget.templateId === WidgetTemplate.ThumbnailVerticalList)\n return true;\n\n return false;\n }) ?? [],\n videoList: systemGeneratedVideoContent.data?.content ?? [],\n videoListWidgetId: systemGeneratedVideoWidget?.id\n };\n}","import React from 'react';\n\ntype TableOfContentsActiveOption = {\n setActiveId: (id: string) => void;\n headingElements: Element[];\n controlledId?: string;\n setControlledId?: (arg: string) => void;\n}\n\nlet timer: number;\n\nexport const useTableOfContentsActiveHeading = (\n { setActiveId, headingElements, controlledId, setControlledId }: TableOfContentsActiveOption\n) => {\n const scrollPositionRef = React.useRef(0);\n\n React.useEffect(() => {\n const callback = (headings: IntersectionObserverEntry[]) => {\n headings.forEach(heading => {\n if (controlledId) {\n setActiveId(controlledId);\n // can use scrollEnd event when the new event type is supported\n timer = window.setTimeout(() => {\n setControlledId('');\n }, 800);\n return;\n }\n if (heading.isIntersecting) {\n setActiveId(heading.target.id);\n scrollPositionRef.current = window.scrollY;\n } else {\n const scrollDistance = scrollPositionRef.current - window.scrollY;\n const isScrollingUp = scrollDistance > 0;\n const curIndex = headingElements.findIndex(h => h.id === heading.target.id);\n const prevHeading = headingElements[curIndex - 1];\n if (isScrollingUp && prevHeading?.id) {\n setActiveId(prevHeading?.id);\n }\n }\n });\n };\n\n const observer = new IntersectionObserver(callback, {\n // rootMargin top: same as the cv-nav-height\n rootMargin: '-67px 0px -80% 0px'\n });\n\n headingElements.forEach(element => observer.observe(element));\n\n return () => {\n timer && window.clearTimeout(timer);\n observer.disconnect();\n };\n }, [ setActiveId, headingElements.length, controlledId ]);\n};\n\n","import React from 'react';\n\n// https://reactjs.org/docs/hooks-faq.html#how-to-get-the-previous-props-or-state\nexport function usePrevious<T>(value: T): T {\n const ref = React.useRef<T>(null);\n React.useEffect(() => {\n ref.current = value;\n });\n return ref.current;\n}","import React from 'react';\n\nimport { usePrevious } from './usePrevious';\n\nconst HEADER_OFFSET = 80; // Size of header + some extra spacing\n\nexport const useTableOfContentsScroll = (elements: Element[], activeId: string) => {\n const [ hasDoneInitialScroll, setHasDoneInitialScroll ] = React.useState(false);\n\n const previousId = usePrevious(activeId);\n const currentId = activeId;\n\n React.useLayoutEffect(() => {\n if (!hasDoneInitialScroll || previousId !== currentId) {\n const target = elements.find(heading => heading && (heading?.id === currentId));\n\n if (target) {\n const rec = target.getBoundingClientRect();\n\n window.scrollBy({\n top: rec.top - HEADER_OFFSET,\n behavior: 'smooth'\n });\n \n if (!hasDoneInitialScroll)\n setHasDoneInitialScroll(true);\n }\n }\n }, [ elements, previousId, currentId, hasDoneInitialScroll ]);\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, SignUpDescriptors, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { ActionButton } from 'libs/shared/components/actions/ActionButton';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { BellFilledSvg } from 'libs/shared/images/svg/objects/BellFilledSvg';\nimport { BellSvg } from 'libs/shared/images/svg/objects/BellSvg';\nimport { Classification } from 'libs/shared/interfaces';\n\n\nconst namespace = 'subjects.classificationComingSoon';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface ComingSoonProps {\n data: Classification;\n onToggleFollow?: () => void;\n canFollowSubjects: boolean;\n imageUrl: string;\n showFollowButtonSpinner: boolean;\n showSignUp: boolean;\n signUpAppLink: Core.AppLink;\n}\n\nexport function ClassificationComingSoon(props: ComingSoonProps): JSX.Element {\n const isFollowing = !!props.data.followers?.data?.length;\n function onClick(): void {\n props.onToggleFollow?.();\n }\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState className='pt-0'>\n <EmptyState.Image src={props.imageUrl} altText={getPhrase('comingSoon')} />\n\n <EmptyState.Heading>\n <Text phrase='comingSoon' />\n </EmptyState.Heading>\n\n <EmptyState.Info>\n <Text phrase={props.showSignUp ? 'infoAnon' : 'info'} />\n </EmptyState.Info>\n\n {props.canFollowSubjects && (\n <ActionButton\n svg={isFollowing ? BellFilledSvg : BellSvg}\n onClick={onClick}\n showSpinner={props.showFollowButtonSpinner}\n className={`btn follow-btn me-2 ${isFollowing ? 'btn-outline-dark' : 'btn-dark'}`}\n >\n <Text phrase={isFollowing ? 'following' : 'follow'} />\n </ActionButton>\n )}\n\n {props.showSignUp && !props.canFollowSubjects && (\n <AppLink\n appLink={props.signUpAppLink}\n className='btn btn-dark d-none d-lg-inline-block'\n analyticsOptions={{\n actionType: UserAction.Click,\n location: LocationContext.ClassificationComingSoon,\n entity: EntityType.AppLink,\n workflowPhase: WorkflowPhase.Start,\n descriptor: SignUpDescriptors.SignUp\n }}\n analyticsData={{}}\n tag='button'\n >\n {getPhrase('signUp')}\n </AppLink>\n )}\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { AudienceFilter } from 'libs/shared/apps/subjects/components/audience-filter/AudienceFilter';\nimport { PresentationAudience } from 'libs/shared/interfaces';\n\ninterface ClassificationDashboardAudiencesProps {\n audiences: PresentationAudience[];\n activeAudiences: PresentationAudience[];\n appLink: Core.AppLink;\n disabled: boolean;\n disablePersist: boolean;\n tooltip: string;\n}\n\nexport function ClassificationDashboardAudiences(props: ClassificationDashboardAudiencesProps): JSX.Element {\n return (\n <AudienceFilter\n audiences={props.audiences}\n activeAudiences={props.activeAudiences}\n disabled={props.disabled}\n appLink={props.appLink}\n disablePersist={props.disablePersist}\n tooltip={props.tooltip}\n />\n );\n}","import React from 'react';\n\nimport { ProductTipId } from 'libs/shared/interfaces';\n\ntype RefsHash = Partial<Record<ProductTipId, HTMLElement | null>>;\n\nexport interface ProductTipsContextValues {\n refs?: RefsHash;\n setProductTipRef?: (id: ProductTipId, ref: HTMLElement) => void;\n cleanUpProductTipRef?: (id: ProductTipId) => void;\n}\n\nconst ProductTipsContext = React.createContext<ProductTipsContextValues>({\n setProductTipRef: () => {},\n cleanUpProductTipRef: () => {},\n refs: {}\n});\n\nexport function useProductTipsContext(tipId?: ProductTipId) {\n const { setProductTipRef, cleanUpProductTipRef, refs } = React.useContext(ProductTipsContext);\n\n React.useEffect(() => {\n if (!tipId)\n return;\n\n return () => cleanUpProductTipRef(tipId);\n }, [tipId]);\n\n return {\n setProductTipRef: (ref: HTMLElement) => setProductTipRef(tipId, ref),\n refs\n };\n}\n\n\nexport function ProductTipsContextProvider(props: React.PropsWithChildren) {\n const [ refs, setRefs ] = React.useState<RefsHash>({});\n\n function setProductTipRef(id: ProductTipId, element: HTMLElement) {\n if (refs[id] || !element || !id)\n return;\n \n setRefs({\n ...refs,\n [id]: element\n });\n }\n\n function cleanUpProductTipRef(id: ProductTipId) {\n if (!id)\n return;\n\n setRefs({\n ...refs,\n [id]: null\n });\n }\n\n return (\n <ProductTipsContext.Provider value={{\n refs,\n setProductTipRef,\n cleanUpProductTipRef\n }}>\n {props.children}\n </ProductTipsContext.Provider>\n );\n}","import React from 'react';\n\nexport function WidgetSeriesSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n d='M4.5 4a.5.5 0 0 0 0 1h16a.5.5 0 0 1 .5.5v12a.5.5 0 0 0 1 0v-12A1.5 1.5 0 0 0 20.5 4zM9 10.26a.256.256 0 0 1 .39-.218l4.482 2.74a.256.256 0 0 1 0 .437L9.39 15.958A.256.256 0 0 1 9 15.739zM18.5 6A1.5 1.5 0 0 1 20 7.5v11a1.5 1.5 0 0 1-1.5 1.5h-15A1.5 1.5 0 0 1 2 18.5v-11A1.5 1.5 0 0 1 3.5 6zm-15 1a.5.5 0 0 0-.5.5v11a.5.5 0 0 0 .5.5h15a.5.5 0 0 0 .5-.5v-11a.5.5 0 0 0-.5-.5z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\n\nimport { ClassificationTab } from '../components/classification-dashboard/classification-tabs/ClassificationTabs';\n\ninterface ViewModel {\n tab: ClassificationTab;\n on: boolean;\n}\n\nexport function useDirectoryTabProductTipSwitcher(initialTab?: ClassificationTab) {\n const initialState: ViewModel = {\n on: false,\n tab: initialTab || 'new-releases'\n };\n\n const [ viewModel, setViewModel ] = useViewModel<ViewModel>('directory:product:tip:switcher', initialState);\n\n React.useEffect(() => {\n if (!initialTab)\n return;\n\n setViewModel('tab', initialTab);\n }, [initialTab]);\n\n React.useEffect(() => {\n let interval: number = null;\n\n if (viewModel.on) {\n interval = window.setInterval(() => {\n if (viewModel.tab === 'new-releases' || viewModel.tab === 'all-topics')\n setViewModel('tab', viewModel.tab === 'new-releases' ? 'all-topics' : 'new-releases');\n else\n setViewModel('tab', viewModel.tab === 'curated-topic' ? 'video-list' : 'curated-topic');\n }, 2000);\n }\n\n return () => {\n window.clearInterval(interval);\n };\n }, [ viewModel.on, viewModel.tab ]);\n\n return {\n tab: viewModel.tab,\n isHighlighting: viewModel.on,\n start: () => setViewModel('on', true),\n stop: () => {\n setViewModel({\n on: false,\n tab: initialTab || viewModel.tab\n });\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, UserAction } from 'libs/analytics/interfaces';\n\nimport { PillTab, PillTabSelector } from 'libs/shared/components/pill-tab-selector/PillTabSelector';\nimport { useProductTipsContext } from 'libs/shared/context/product-tips-context/ProductTipsContext';\nimport { Breakpoints, useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { GridSvg } from 'libs/shared/images/svg/objects/GridSvg';\nimport { RectanglesSvg } from 'libs/shared/images/svg/objects/RectanglesSvg';\nimport { SparkleSvg } from 'libs/shared/images/svg/objects/SparkleSvg';\nimport { WidgetSeriesSvg } from 'libs/shared/images/svg/widgets/WidgetSeriesSvg';\nimport { Classification, Presentation } from 'libs/shared/interfaces';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nimport { useDirectoryTabProductTipSwitcher } from '../../../hooks/useDirectoryTabProductTipSwitcher';\n\nimport styles from './classification-tabs.module.scss';\n\nconst namespace = 'shared.classificationDashboard';\n\nexport type ClassificationTab = 'new-releases' | 'all-topics' | 'curated-topic' | 'curriculum';\n\nfunction getTabs(\n props: ClassificationTabsProps,\n breakpoints: Breakpoints,\n activeTab: ClassificationTab,\n isHighlighting: boolean\n): PillTab[] {\n const showText = breakpoints.lg || breakpoints.xl || breakpoints.xxl || breakpoints.xs;\n\n function getTopicTabClassName(): string {\n let className = isHighlighting ? styles.tabTransition : '';\n\n if (breakpoints.xs)\n return className + ' w-100';\n\n if (showText)\n return className = ` ${styles.curatedTopicTab}`;\n\n return className;\n }\n\n if (TopicsHelper.isTopLevelTopic(props.classification)) {\n return [{\n name: showText ? LanguageService.getPhrase(namespace, 'newReleases') : '',\n appLink: props.appLinks?.classification?.(props.classification),\n active: activeTab === 'new-releases',\n svg: SparkleSvg,\n analyticsData: {\n id: 'new-releases',\n classificationId: props.classification.id,\n classificationName: props.classification.name,\n presentationId: props.presentation.id,\n presentationDescription: props.presentation.description,\n name: LanguageService.getPhrase(namespace, 'newReleases'),\n url: Core.AppLinkHelper.getHref(props.appLinks?.classification?.(props.classification))\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n },\n className: `${breakpoints.xs ? 'w-100' : ''} ${isHighlighting ? styles.tabTransition : ''}`\n }, {\n name: showText ? LanguageService.getPhrase(namespace, 'allTopics') : '',\n appLink: props.appLinks?.classificationDirectory?.(props.classification),\n active: activeTab === 'all-topics',\n svg: GridSvg,\n analyticsData: {\n id: 'all-topics',\n classificationId: props.classification.id,\n classificationName: props.classification.name,\n presentationId: props.presentation.id,\n presentationDescription: props.presentation.description,\n name: LanguageService.getPhrase(namespace, 'allTopics'),\n url: Core.AppLinkHelper.getHref(props.appLinks?.classificationDirectory?.(props.classification))\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n },\n className: `${breakpoints.xs ? 'w-100' : ''} ${isHighlighting ? styles.tabTransition : ''}`\n }];\n }\n\n return [{\n name: showText ? LanguageService.getPhrase(namespace, 'topic') : '',\n appLink: props.appLinks?.classification?.(props.classification),\n active: activeTab === 'curated-topic',\n svg: RectanglesSvg,\n analyticsData: {\n id: 'curated-topic',\n classificationId: props.classification.id,\n classificationName: props.classification.name,\n presentationId: props.presentation.id,\n presentationDescription: props.presentation.description,\n name: LanguageService.getPhrase(namespace, 'topic'),\n url: Core.AppLinkHelper.getHref(props.appLinks?.classification?.(props.classification))\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n },\n className: getTopicTabClassName()\n }, {\n name: showText ? LanguageService.getPhrase(namespace, 'curriculum') : '',\n appLink: props.appLinks?.classificationCurriculum?.(props.classification),\n active: activeTab === 'curriculum',\n svg: WidgetSeriesSvg,\n analyticsData: {\n id: 'curriculum',\n classificationId: props.classification.id,\n classificationName: props.classification.name,\n presentationId: props.presentation.id,\n presentationDescription: props.presentation.description,\n name: LanguageService.getPhrase(namespace, 'curriculum'),\n url: Core.AppLinkHelper.getHref(props.appLinks?.classificationCurriculum?.(props.classification))\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n },\n className: `${breakpoints.xs ? 'w-100' : ''} ${isHighlighting ? styles.tabTransition : ''}`\n }];\n}\n\ninterface ClassificationTabsProps {\n classification: Classification;\n presentation: Presentation;\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink;\n classificationDirectory: (classification: Classification) => Core.AppLink;\n classificationCurriculum: (classification: Classification) => Core.AppLink;\n };\n activeTab: ClassificationTab;\n}\n\nexport function ClassificationTabs(props: ClassificationTabsProps): JSX.Element {\n const breakpoints = useBreakpoints();\n const { tab, isHighlighting } = useDirectoryTabProductTipSwitcher(props.activeTab);\n\n const { setProductTipRef } = useProductTipsContext('topics-directory-tab');\n\n return (\n <PillTabSelector\n borderRadius='sm'\n containerRef={el => setProductTipRef(el)}\n className={breakpoints.xs ? 'w-100' : ''}\n listClassName='d-flex flex-nowrap'\n tabs={getTabs(props, breakpoints, tab, isHighlighting)}\n />\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { Breadcrumb, Breadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Classification, CuratedDashboard, Presentation, PresentationAudience } from 'libs/shared/interfaces';\nimport { AudienceHelper } from 'libs/shared/utils/audience-helper/AudienceHelper';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nimport { ClassificationDashboardAudiences } from '../audiences/ClassificationDashboardAudiences';\nimport { ClassificationTab, ClassificationTabs } from '../classification-tabs/ClassificationTabs';\n\nfunction shouldHideAudiences(\n audiences: PresentationAudience[],\n activeAudiences: PresentationAudience[],\n activeTab: ClassificationTab,\n isEmpty: boolean,\n isComingSoon: boolean\n): boolean {\n if (isComingSoon)\n return true;\n\n if (isEmpty && !activeAudiences?.length)\n return true;\n\n if (!AudienceHelper.shouldShowAudiences(audiences))\n return true;\n\n if (activeTab === 'curriculum')\n return true;\n\n return false;\n}\n\ninterface ClassificationDashboardNavProps {\n dashboard: CuratedDashboard;\n classification: Classification;\n presentation: Presentation;\n appLinks: {\n audience: () => Core.AppLink;\n classification: (classification: Classification | null) => Core.AppLink;\n classificationDirectory: (classification: Classification) => Core.AppLink;\n classificationCurriculum: (classification: Classification) => Core.AppLink;\n };\n activeTab: ClassificationTab;\n audiences: PresentationAudience[];\n activeAudiences: PresentationAudience[];\n getBreadcrumbs: () => Breadcrumb[];\n\n hasTopicDirectoryDashboard: boolean;\n hasTopicCurriculumDashboard: boolean;\n isComingSoon: boolean;\n isEmpty: boolean;\n isViewingCurrentPresentation: boolean;\n disableAudiences: boolean;\n audienceTooltip: string;\n}\n\nexport function ClassificationDashboardNav(props: ClassificationDashboardNavProps): JSX.Element {\n const breakpoints = useBreakpoints();\n\n const hideAudiences = shouldHideAudiences(\n props.audiences,\n props.activeAudiences,\n props.activeTab,\n props.isEmpty,\n props.isComingSoon\n );\n\n function canShowTabs(): boolean {\n if (!props.classification || !props.dashboard)\n return false;\n\n if (CuratedDashboardHelper.isSystemGeneratedDashboard(props.dashboard.widgets))\n return false;\n\n /**\n * For our top-level topics, we can show the topic tab if the topic has a directory dashboard.\n */\n if (TopicsHelper.isTopLevelTopic(props.classification))\n return props.hasTopicDirectoryDashboard;\n\n /**\n * For our curated topics, we can show the curriculum tab if the topic has one, which it should\n */\n if (props.classification.externalMetadata?.isCurated && props.hasTopicCurriculumDashboard)\n return true;\n\n return false;\n }\n\n function getContainerClass(): string {\n let className = 'd-flex flex-column py-3 mb-3';\n\n if (!props.isComingSoon)\n className += ' border-bottom';\n\n if ((canShowTabs() || hideAudiences) && !breakpoints.xs)\n return className;\n\n return className + ' row-gap-3';\n }\n\n function getTopRowClass(): string {\n if (hideAudiences) {\n if (breakpoints.xs)\n return 'd-flex flex-column justify-content-between row-gap-3';\n\n return 'd-flex align-items-center justify-content-between';\n }\n\n let className = '';\n\n className += 'd-flex align-items-center justify-content-between mb-1';\n\n if (breakpoints.xs)\n className += ' row-gap-3 mb-0';\n\n return className;\n }\n\n function getBottomRowClass(): string {\n let className = 'd-flex align-items-end justify-content-between';\n\n if (breakpoints.xs)\n className += ' row-gap-3 flex-wrap';\n\n return className;\n }\n\n return (\n <div className={getContainerClass()}>\n <div className={getTopRowClass()}>\n <Breadcrumbs breadcrumbs={props.getBreadcrumbs?.()} />\n\n {canShowTabs() && hideAudiences && (\n <ClassificationTabs\n classification={props.classification}\n activeTab={props.activeTab}\n appLinks={props.appLinks}\n presentation={props.presentation}\n />\n )}\n </div>\n\n <div className={getBottomRowClass()}>\n {!hideAudiences && (\n <ClassificationDashboardAudiences\n audiences={props.audiences}\n activeAudiences={props.activeAudiences}\n appLink={props.appLinks.audience?.()}\n disabled={props.disableAudiences}\n tooltip={props.audienceTooltip}\n disablePersist={!props.isViewingCurrentPresentation}\n />\n )}\n\n {canShowTabs() && !hideAudiences && (\n <ClassificationTabs\n classification={props.classification}\n activeTab={props.activeTab}\n appLinks={props.appLinks}\n presentation={props.presentation}\n />\n )}\n </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 { Flight } from 'libs/common/flight';\n\nimport { AnalyticsOptions, HashObject, LocationContext } from 'libs/analytics/interfaces';\n\nimport { ClassificationHeaderDetails } from 'libs/shared/apps/subjects/components/classification-dashboard/classification-header-details/ClassificationHeaderDetails';\nimport { CuratedClassificationEmptyState } from 'libs/shared/apps/subjects/components/classification-dashboard/empty-state/CuratedClassificationEmptyState';\nimport { TableOfContentsContainer } from 'libs/shared/apps/subjects/components/classification-dashboard/table-of-contents/TableOfContents';\nimport { TeacherOnlyEmptyState } from 'libs/shared/apps/subjects/components/classification-dashboard/teacher-only/TeacherOnlyEmptyState';\nimport { useGetTopicsWidgets } from 'libs/shared/apps/subjects/hooks/useGetTopicsWidgets';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { BannerHeader } from 'libs/shared/components/banner-header/BannerHeader';\nimport { Breadcrumb } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { DashboardFeedbackData } from 'libs/shared/components/feedback-form/FeedbackForm';\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { AllClassificationWidgetTemplates } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\nimport { LocalPermissionName } from 'libs/shared/enums/PermissionName';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { useMediaQuery } from 'libs/shared/hooks/UseMediaQuery';\nimport { HasLocalPermissionsFunc, HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { useTableOfContentsActiveHeading } from 'libs/shared/hooks/useTableOfContentsActiveHeading';\nimport { useTableOfContentsScroll } from 'libs/shared/hooks/useTableOfContentsScroll';\nimport { CalendarEvent, CalendarEventContentType, Classification, CuratedDashboard, CuratedWidget, CuratedWidgetQueryParams, CurriculumData, DashboardStatus, DashboardTargetType, InteractiveMetadata, Presentation, PresentationAudience } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nimport { ClassificationComingSoon } from './classification-coming-soon/ClassificationComingSoon';\nimport { ClassificationDashboardNav } from './classification-dashboard-nav/ClassificationDashboardNav';\nimport { ClassificationTab } from './classification-tabs/ClassificationTabs';\n\nconst namespace = 'shared.classificationDashboard';\n\nfunction isHeadingWidget(widget: CuratedWidget) {\n return widget.widgetId === WidgetTypeId.Blurb && widget.templateId === WidgetTemplate.Heading;\n}\n\nfunction isTopicWidget(widget: CuratedWidget) {\n return widget.widgetId === WidgetTypeId.CuratedClassifications || widget.widgetId === WidgetTypeId.Classifications;\n}\n\nexport interface ClassificationDashboardProps {\n dashboard: CuratedDashboard;\n classification: Classification;\n presentation: Presentation;\n hasPermissions: HasPermissionsFunc;\n hasLocalPermissions: HasLocalPermissionsFunc;\n resourceThumbnailFallbackImageUrl: string;\n hasTopicDirectoryDashboard: boolean;\n hasTopicCurriculumDashboard: boolean;\n isTertiaryCustomerWithoutExchange: boolean;\n tab: ClassificationTab;\n specialEvent?: CalendarEvent;\n curriculums: CurriculumData;\n\n audiences: PresentationAudience[];\n activeAudiences?: PresentationAudience[];\n\n getWidgetContentRequest: (\n id: string,\n params: CuratedWidgetQueryParams,\n widgetTemplate: WidgetTemplate\n ) => Flight.Request;\n\n getBannerActions?: () => ActionOptions[];\n getBreadcrumbs?: () => Breadcrumb[];\n onToggleFollow?: (classification: Classification, locationContext: LocationContext) => void;\n canFollowSubjects: boolean;\n onSubmitFeedback?: (feedback: DashboardFeedbackData) => Promise<void>;\n\n appLinks?: AllClassificationWidgetTemplates['appLinks'] & {\n signUp: () => Core.AppLink;\n widgetWizard: () => Core.AppLink;\n previewQuestions: (interactive: InteractiveMetadata) => Core.AppLink\n classificationCurriculum: (classification: Classification) => Core.AppLink;\n audience: () => Core.AppLink;\n };\n\n imageCdnUrl: string\n emptyImageUrl: string;\n comingSoonImageUrl?: string;\n\n analyticsOptions?: AnalyticsOptions;\n analyticsData?: HashObject;\n\n scrollToWidgetId?: string;\n tableOfContentsId?: string;\n\n // Means the dashboard contains no linked or working filters\n isReadonly?: boolean;\n\n // Means the dashboard is being previewed by ClickView staff either in product or in curator\n isPreviewing?: boolean;\n\n // Means the parent topic for the dashboard has a status of \"Coming Soon\"\n isComingSoon?: boolean;\n\n showFollowButtonSpinner?: boolean;\n \n isViewCurrentPresentation?: boolean;\n\n // By default widgets will always be lazyloaded. We override this behaviour only in extenuating \n // circumstances, such as dynamic rendering for SEO.\n lazyLoad?: boolean;\n\n moviesAndTv?: boolean;\n\n isTeacherOnly?: boolean;\n \n contentType?: CalendarEventContentType;\n\n isBot?: boolean;\n\n settings?: AllClassificationWidgetTemplates['settings'];\n\n commonVideoProps: CommonVideoProps;\n}\n\nClassificationDashboard.defaultProps = {\n appLinks: {}\n};\n\nexport function ClassificationDashboard(props: ClassificationDashboardProps): JSX.Element {\n const { widgets, videoList, videoListWidgetId } = useGetTopicsWidgets(props.dashboard, props.activeAudiences);\n\n const isSmallScreen = useMediaQuery(MediaQueryStrings.LGDown);\n const headingRef = React.useRef<Set<Element>>(new Set());\n\n const initialEmptyWidgets = React.useMemo(() => {\n return widgets.reduce((acc: HashObject<boolean>, widget) => {\n acc[widget.id] = false;\n return acc;\n }, {});\n }, [widgets?.length]);\n\n const [ emptyWidgets, setEmptyWidgets ] = React.useState(initialEmptyWidgets);\n\n const [ controlledId, setControlledId ] = React.useState(props.tableOfContentsId);\n\n const [ tableOfContentActiveId, setTableOfContentActiveId ] = React.useState<string>('');\n\n const headingElements = Array.from(headingRef.current);\n useTableOfContentsScroll(headingElements, controlledId);\n useTableOfContentsActiveHeading({\n setActiveId: setTableOfContentActiveId,\n headingElements,\n controlledId,\n setControlledId\n });\n\n function shouldShowEmptyState(): boolean {\n if (props.isComingSoon)\n return false;\n\n if (props.isTeacherOnly)\n return false;\n\n if (!props.dashboard)\n return true;\n\n if (props.dashboard.status === DashboardStatus.Archived && !props.isReadonly)\n return true;\n\n if (props.dashboard.status === DashboardStatus.Draft && !props.isPreviewing)\n return true;\n\n if (!widgets?.length)\n return true;\n\n if (videoList && videoList.length)\n return false;\n\n return Object.values(emptyWidgets).every(state => !!state);\n }\n\n function getWidgetContentRequest(id: string, widgetTypeId: WidgetTypeId, template: WidgetTemplate): Flight.Request {\n const params = CuratedDashboardHelper.getWidgetParams(\n widgetTypeId,\n template,\n CuratedDashboardHelper.getDashboardTargetType(props.dashboard),\n props.activeAudiences?.map(a => a.masterId),\n props.curriculums.preferredCurriculum?.id\n );\n\n return props.getWidgetContentRequest(id, params, template);\n }\n\n const showEmptyState = shouldShowEmptyState();\n\n React.useEffect(() => {\n /**\n * When we add the first widget of the dashboard, the showEmptyState is `true`, the WidgetContainer is not going to be rendered to lazyload the `content`\n * so we set the emptyWidget to initial make sure the widget container is rendered to lazyload `widget.content`\n * and let the WidgetContainer to re-set the empty state based on the actual `widget.content` from backend\n */\n if (showEmptyState) {\n setEmptyWidgets(initialEmptyWidgets);\n }\n }, [widgets?.length]);\n\n const onSetIsEmpty = React.useCallback((widgetId: string, isEmpty: boolean) => {\n if (emptyWidgets[widgetId] === isEmpty)\n return;\n\n const newEmptyState = {\n ...emptyWidgets,\n [widgetId]: isEmpty\n };\n\n // The logic beneath this if-block doesn't apply to classification directories. This is because\n // classification directories don't support audience filtering, so widgets should never be empty,\n // meaning headings should never be hidden.\n if (CuratedDashboardHelper.isType(props.dashboard, DashboardTargetType.ClassificationDirectory)) {\n setEmptyWidgets(newEmptyState);\n return;\n }\n\n let index = 0;\n\n /**\n * Every time a widget is identified as empty, we check each heading blurb widget\n * to see if it should be hidden. This will be the case when all widgets beneath a heading\n * (up until the next heading) are empty.\n */\n while (index < widgets.length) {\n const currentWidget = widgets[index];\n\n if (!isHeadingWidget(currentWidget)) {\n index++;\n continue;\n }\n\n let isHeadingEmpty = true;\n let subWidgetIndex = index + 1;\n\n while (isHeadingEmpty && subWidgetIndex < widgets.length) {\n const headingSubWidget = widgets[subWidgetIndex];\n\n if (isHeadingWidget(headingSubWidget))\n break;\n\n if (!newEmptyState[headingSubWidget.id] && !isTopicWidget(headingSubWidget))\n isHeadingEmpty = false;\n\n subWidgetIndex++;\n }\n\n index = subWidgetIndex;\n\n newEmptyState[currentWidget.id] = isHeadingEmpty;\n }\n\n setEmptyWidgets(newEmptyState);\n }, [ emptyWidgets, widgets ]);\n\n function hideWidget(widget: CuratedWidget): boolean {\n return isHeadingWidget(widget) && emptyWidgets[widget.id];\n }\n\n function useLargeDashboardSpacing(): boolean {\n const target = CuratedDashboardHelper.getDashboardTargetType(props.dashboard);\n\n if (props.moviesAndTv || target === DashboardTargetType.ClassificationCurriculum)\n return false;\n\n return true;\n }\n\n function getWidgetHeading(widget: CuratedWidget, index: number): string {\n if (widget.widgetId === WidgetTypeId.ClassificationDashboardExternalMedia) {\n const previousWidget = widgets[index - 1];\n\n if (emptyWidgets[previousWidget.id])\n return widget.name.replace('Other videos', 'Videos');\n\n return widget.name;\n }\n\n return widget.name;\n }\n\n const widgetsInTableOfContents = widgets.filter(w => {\n return !hideWidget(w) && !!w.metadata?.showInTableOfContents;\n });\n\n const isTopicOnlyDashboard = widgets.every(isTopicWidget);\n\n const shouldShowTableOfContents = widgetsInTableOfContents.length >= 2;\n const shouldShowSideTableOfContents = shouldShowTableOfContents && !isSmallScreen;\n\n const shouldShowTopicCounts = (\n props.settings?.hasTopicDirectories &&\n TopicsHelper.isTopLevelTopic(props.classification) &&\n !props.isTertiaryCustomerWithoutExchange\n );\n\n /**\n * We don't put the .topic-dashboard class when we're in a movies and tv classification\n * because we don't want the extra padding between widgets.\n */\n return (\n <div className={`bg-white px-4 ${useLargeDashboardSpacing() ? 'dashboard-spacing-lg' : ''}`}>\n <BannerHeader\n heading={props.classification.name}\n banner={props.classification.banner}\n imageCdnUrl={props.imageCdnUrl}\n actions={props.getBannerActions?.()}\n actionsDropdownClassName='btn btn-outline-dark'\n specialEvent={props.specialEvent}\n calendarTheme={{\n background: 'bg-light-blue',\n border: 'border-light-blue'\n }}\n showComingSoon={props.isComingSoon}\n detailsComponent={shouldShowTopicCounts\n ? () => <ClassificationHeaderDetails classification={props.classification} />\n : null\n }\n />\n\n <ClassificationDashboardNav\n dashboard={props.dashboard}\n classification={props.classification}\n presentation={props.presentation}\n appLinks={props.appLinks}\n activeTab={props.tab}\n audiences={props.audiences}\n activeAudiences={props.activeAudiences}\n getBreadcrumbs={props.getBreadcrumbs}\n hasTopicDirectoryDashboard={props.hasTopicDirectoryDashboard}\n hasTopicCurriculumDashboard={props.hasTopicCurriculumDashboard}\n isComingSoon={props.isComingSoon}\n isEmpty={showEmptyState}\n isViewingCurrentPresentation={props.isViewCurrentPresentation}\n disableAudiences={isTopicOnlyDashboard || props.isReadonly}\n audienceTooltip={isTopicOnlyDashboard ? LanguageService.getPhrase(namespace, 'audienceTooltip') : ''}\n />\n\n {props.isComingSoon && (\n <ClassificationComingSoon\n imageUrl={props.comingSoonImageUrl}\n data={props.classification}\n canFollowSubjects={props.canFollowSubjects}\n showFollowButtonSpinner={props.showFollowButtonSpinner}\n onToggleFollow={() => props.onToggleFollow(props.classification, LocationContext.ClassificationComingSoon)}\n showSignUp={!props.hasLocalPermissions(LocalPermissionName.FollowComingSoonTopics)}\n signUpAppLink={props.appLinks.signUp?.()}\n />\n )}\n\n {!props.isComingSoon && (\n <div className={`${shouldShowSideTableOfContents ? 'row no-wrap' : ''}`}>\n {shouldShowTableOfContents && (\n <TableOfContentsContainer\n widgets={widgetsInTableOfContents}\n title={props.classification.name}\n activeId={tableOfContentActiveId}\n clickable={!props.isReadonly}\n analyticsData={props.analyticsData}\n setControlledId={setControlledId}\n isSmallScreen={isSmallScreen}\n />\n )}\n\n <div className={shouldShowSideTableOfContents ? 'col-9 order-0' : ''}>\n {widgets.map((widget, idx) => {\n if (hideWidget(widget))\n return <React.Fragment key={widget.id}></React.Fragment>;\n\n return (\n <WidgetContainerView\n widgetCollection={DashboardTargetType.Classification}\n headingElementRef={headingRef}\n key={widget.id}\n id={widget.id}\n name={getWidgetHeading(widget, idx)}\n description={widget.description}\n classification={props.classification}\n templateId={widget.templateId}\n widgetTypeId={widget.widgetId}\n audiences={props.audiences}\n getContentRequest={getWidgetContentRequest}\n setIsEmpty={onSetIsEmpty}\n appLinks={props.appLinks}\n presentation={props.presentation}\n analyticsData={props.analyticsData}\n isScrollToTargetWidget={props.scrollToWidgetId === widget.id}\n imageCdnUrl={props.imageCdnUrl}\n onSubmitFeedback={props.onSubmitFeedback}\n metadata={widget.metadata}\n isBot={props.isBot}\n hasTableOfContents={shouldShowSideTableOfContents}\n lazyLoad={props.lazyLoad}\n dashboardTarget={CuratedDashboardHelper.getDashboardTargetType(props.dashboard)}\n widgetIndex={idx}\n hasPermissions={props.hasPermissions}\n hasLocalPermissions={props.hasLocalPermissions}\n isPreviewing={props.isReadonly}\n contentType={props.contentType}\n resourceThumbnailFallbackImageUrl={props.resourceThumbnailFallbackImageUrl}\n onToggleFollowClassification={props.onToggleFollow}\n settings={props.settings}\n isEditing={props.isReadonly}\n isTertiaryCustomerWithoutExchange={props.isTertiaryCustomerWithoutExchange}\n commonVideoProps={props.commonVideoProps}\n curriculums={props.curriculums}\n\n // TODO: Do we actually need this shit if it wasn't even being passed in?\n limitTotalItems={false}\n seeMoreLink={null}\n onClickRemoveItem={null}\n badgeComponent={null}\n />\n );\n })}\n </div>\n\n {!!videoList?.length && (\n <>\n <WidgetHeader name={LanguageService.getPhrase(namespace, 'videos')} />\n <VideoList\n videos={videoList}\n getVideoAppLink={(video, opts) => props.appLinks.videoType(\n video,\n { ...opts, contextId: videoListWidgetId, includeContext: opts.includeContext }\n )}\n hasPermissions={props.hasPermissions}\n presentationAudiences={props.audiences}\n getPreviewQuestionsAppLink={props.appLinks.previewQuestions}\n commonVideoProps={props.commonVideoProps}\n />\n </>\n )}\n </div>\n )}\n\n {showEmptyState && (\n <CuratedClassificationEmptyState\n dashboard={props.dashboard}\n isReadonly={props.isReadonly}\n imageUrl={props.emptyImageUrl}\n addWidgetApplink={props.appLinks.widgetWizard}\n />\n )}\n\n {props.isTeacherOnly && (\n <TeacherOnlyEmptyState\n imageUrl={props.emptyImageUrl}\n ctaAppLink={() => props.appLinks.allTopics(props.classification.presentationId)}\n />\n )}\n </div>\n );\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { ErrorCta, ErrorPageError } from 'libs/shared/errors/primitives/ErrorPageError';\n\nimport { Actions } from 'shared/constants/StreamableActions';\nimport { AppChannels } from 'shared/constants/StreamableRadioChannels';\n\nconst namespace = 'subjects.topicNotFoundError';\n\nexport class TopicNotFoundError extends ErrorPageError {\n constructor() {\n super('Topic doesn\\'t exist');\n }\n\n // @ts-ignore\n public get name(): string {\n return 'TopicNotFoundError';\n }\n\n // @ts-ignore\n public get heading(): string {\n return LanguageService.getPhrase(namespace, 'heading');\n }\n\n // @ts-ignore\n public get description(): string {\n return LanguageService.getPhrase(namespace, 'description');\n }\n\n // @ts-ignore\n public get cta(): ErrorCta {\n return {\n text: LanguageService.getPhrase(namespace, 'cta'),\n appLink: {\n application: AppChannels.SUBJECTS,\n action: Actions.Subjects.CLASSIFICATION_ALL\n }\n };\n }\n}","import React from 'react';\n\nimport { PartialAudienceFilter } from 'libs/shared/apps/subjects/components/audience-filter/AudienceFilter';\nimport { PartialBannerHeader } from 'libs/shared/components/banner-header/BannerHeader';\nimport { PartialBreadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\n\nexport function PartialClassification(): JSX.Element {\n return (\n <div className='bg-white px-4'>\n <PartialBannerHeader />\n\n <div className='d-flex flex-column row-gap-3 py-3 mb-3 border-bottom'>\n <PartialBreadcrumbs />\n <PartialAudienceFilter />\n </div>\n </div>\n );\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { ClassificationDashboardProps } from 'libs/shared/apps/subjects/components/classification-dashboard/ClassificationDashboard';\nimport { Breadcrumb } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { Classification } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/StreamableActions';\nimport { AppChannels } from 'shared/constants/StreamableRadioChannels';\nimport { StreamableAppLinks } from 'shared/utils/StreamableAppLinks';\n\nconst namespace = 'subjects.classificationView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function getClassificationAppLinks(\n classification: Classification,\n params: HashObject\n): ClassificationDashboardProps['appLinks'] {\n return {\n ...StreamableAppLinks,\n classification: c => StreamableAppLinks.classification(c || classification, params),\n classificationDirectory: () => StreamableAppLinks.classificationDirectory(params),\n audience: () => StreamableAppLinks.classification(classification, params),\n\n // TODO: Find a nice way around having to pass these in\n previewQuestions: () => null,\n series: () => null,\n latestReleases: () => null,\n classificationLatestReleases: () => null,\n playlist: () => null,\n signUp: () => null,\n widgetWizard: () => null,\n classificationCurriculum: () => null,\n searchSettings: () => null,\n searchHome: () => null,\n search: () => null,\n editCurriculum: () => null\n };\n}\n\ninterface GetClassificationBreadcrumbsOptions {\n classification: Classification;\n path: Classification[];\n appLinks: ClassificationDashboardProps['appLinks'];\n}\n\nexport function getClassificationBreadcrumbs(\n options: GetClassificationBreadcrumbsOptions\n): Breadcrumb[] {\n const { classification, path, appLinks } = options;\n\n const breadcrumbs: Breadcrumb[] = [{\n name: getPhrase('discover'),\n appLink: {\n application: AppChannels.DASHBOARD,\n action: Actions.Dashboard.HOME\n }\n }, {\n name: getPhrase('exploreAllTopicsHeading'),\n appLink: {\n application: AppChannels.SUBJECTS,\n action: Actions.Subjects.CLASSIFICATION_ALL\n }\n }];\n\n path.forEach(item => {\n breadcrumbs.push({\n name: item.name,\n appLink: appLinks.classification(item),\n active: item.name === classification.name\n });\n });\n\n return breadcrumbs;\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { ClassificationDashboard } from 'libs/shared/apps/subjects/components/classification-dashboard/ClassificationDashboard';\nimport { PreviewBanner } from 'libs/shared/apps/subjects/components/preview-banner/PreviewBanner';\nimport { Breadcrumb } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { VideoActionsContext } from 'libs/shared/context/VideoActionsContext';\nimport { PresentationType } from 'libs/shared/enums/PresentationType';\nimport { AudienceRequests } from 'libs/shared/flight-requests/AudienceRequests';\nimport { ClassificationRequests } from 'libs/shared/flight-requests/ClassificationRequests';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { DashboardRequests } from 'libs/shared/flight-requests/DashboardRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { AudienceFilterParams, CalendarEventContentType, Classification, Config, CurrentUser, DashboardTargetType, Presentation, PresentationAudience } from 'libs/shared/interfaces';\nimport { AudienceHelper } from 'libs/shared/utils/audience-helper/AudienceHelper';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { StreamableConstants } from 'shared/constants/StreamableConstants';\nimport { PresentationRequests } from 'shared/flight-requests/PresentationRequests';\nimport { useCommonVideoProps } from 'shared/hooks/useCommonVideoProps';\nimport { useFetchDashboard } from 'shared/hooks/useFetchDashboard';\nimport { useStreamableVideoActions } from 'shared/hooks/useStreamableVideoActions';\nimport { SeoHelper } from 'shared/utils/StreamableSeoHelper';\n\nimport { TopicNotFoundError } from 'apps/subjects/errors/TopicNotFoundError';\nimport { useCurriculums } from 'apps/videos/hooks/useCurriculums';\n\nimport { PartialClassification } from './partial-loading/PartialClassification';\nimport { getClassificationAppLinks, getClassificationBreadcrumbs } from './StreamableClassificationViewUtils';\n\nconst namespace = 'subjects.classificationView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface StreamableClassificationViewQueryParams extends AudienceFilterParams {\n dashboardId?: string;\n tocId?: string;\n}\n\nexport function sanitizeStreamableClassificationParams(\n queryParams: StreamableClassificationViewQueryParams\n): StreamableClassificationViewQueryParams {\n if (!queryParams)\n return {};\n\n return ObjectHelper.pick(queryParams, [ 'a', 'dashboardId', 'tocId' ]);\n}\n\ninterface StreamableClassificationViewProps {\n id: string;\n queryParams: StreamableClassificationViewQueryParams;\n}\n\nexport function StreamableClassificationView(props: StreamableClassificationViewProps): JSX.Element {\n const getVideoActions = useStreamableVideoActions('video-list');\n\n const { commonVideoProps } = useCommonVideoProps();\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const curriculumData = useCurriculums();\n\n const presentation = Flight.useBasicFetch<Presentation>(\n PresentationRequests.streamablePresentation()\n );\n\n const classification = Flight.useBasicFetch<Classification>(\n ClassificationRequests.classification(props.id, currentUser.data?.id)\n );\n\n const { dashboard, isPreviewing } = useFetchDashboard({\n targetType: DashboardTargetType.Classification,\n dashboardId: props.queryParams?.dashboardId,\n classificationId: props.id\n });\n\n const appLinks = getClassificationAppLinks(classification.data, props.queryParams);\n\n useSetPageMetadata(PageMetadataHelper.getClassificationMetadata({\n content: { classification: classification.data },\n phraseContext: {\n phraseHandler: getPhrase,\n titlePhrase: 'pageTitle',\n descriptionPhrase: 'pageDescription'\n },\n canonicalLink: SeoHelper.getCanonicalLink({\n customAppLink: appLinks.classification(classification.data)\n }),\n allowIndexing: true,\n product: StreamableConstants.PRODUCT_NAME\n }));\n\n useHandleObjectError(classification, {\n notFound: TopicNotFoundError\n });\n\n const audiences = Flight.useBasicFetch<PresentationAudience[]>(presentation.data &&\n AudienceRequests.presentationAudiences(presentation.data.id, PresentationType.StreamableLearning));\n\n const path = Flight.useBasicFetch<Classification[]>(\n ClassificationRequests.path(props.id, PresentationType.StreamableLearning)\n );\n\n /**\n * We use the current active audiences to re-fetch content for that specific audience set.\n */\n const activeAudiences = AudienceHelper.getActiveAudiencesFromParams(audiences.data, props.queryParams);\n const activeAudienceIds = activeAudiences?.map(a => a.masterId) ?? [];\n\n /**\n * Additional topics data to be mixed in with lower-level component analytics collection\n */\n const analyticsData = {\n presentationId: presentation.data?.id,\n presentationName: presentation.data?.name,\n currentClassificationId: classification.data?.id,\n currentClassificationName: classification.data?.name,\n followingCurrentClassification: !!classification.data?.followers?.data?.length,\n activeAudienceNames: activeAudiences?.length ? activeAudiences.map(a => a.name) : null,\n activeAudienceIds: activeAudienceIds.length ? activeAudienceIds : null\n };\n\n\n function getBreadcrumbs(): () => Breadcrumb[] {\n return () => getClassificationBreadcrumbs({\n appLinks: appLinks,\n classification: classification.data,\n path: path.data\n });\n }\n\n const dataLoaded = !!config.data\n && dashboard.hasCompleted\n && !!classification.data\n && !!presentation.data\n && !!path.data\n && !!audiences.data;\n\n if (!dataLoaded)\n return <PartialClassification />;\n\n return (\n <VideoActionsContext.Provider value={{ getVideoActions }}>\n <div className='position-relative'>\n {!!(isPreviewing && dashboard.data) && <PreviewBanner status={dashboard.data.status} type='topic' />}\n <ClassificationDashboard\n dashboard={dashboard.data}\n classification={classification.data}\n getWidgetContentRequest={DashboardRequests.dashboardWidgetContent}\n getBreadcrumbs={getBreadcrumbs()}\n hasPermissions={() => false}\n hasLocalPermissions={() => false}\n presentation={presentation.data}\n getBannerActions={() => []}\n audiences={audiences.data}\n activeAudiences={activeAudiences}\n analyticsData={analyticsData}\n imageCdnUrl={config.data.imageCdnUrl}\n resourceThumbnailFallbackImageUrl={ImageUrls.Fallbacks.RESOURCE_THUMBNAIL}\n emptyImageUrl={ImageUrls.EmptyStates.Topics.TOPIC}\n appLinks={appLinks}\n isPreviewing={isPreviewing}\n isViewCurrentPresentation\n canFollowSubjects={false}\n tableOfContentsId={props.queryParams.tocId}\n lazyLoad={!SeoHelper.isBot()}\n isTeacherOnly={false}\n contentType={CalendarEventContentType.Livestream}\n hasTopicDirectoryDashboard={false}\n hasTopicCurriculumDashboard={false}\n isTertiaryCustomerWithoutExchange={false}\n tab='curated-topic'\n curriculums={curriculumData}\n // just... one... more.. prop....\n commonVideoProps={commonVideoProps}\n />\n </div>\n </VideoActionsContext.Provider>\n );\n}"],"names":["namespace","Separator","className","jsx","ClassificationHeaderDetails","props","dashboardVideoCount","childDashboardVideoCount","dashboardResourceCount","childDashboardResourceCount","childClassificationCount","TopicsHelper","videoCount","resourceCount","jsxs","Text","Fragment","getPhrase","LanguageService","CuratedClassificationEmptyState","isArchived","_a","DashboardStatus","LanguageNamespaceContext","EmptyState","Tooltip","_b","PlusSvg","TableOfContentsList","analyticsOptions","UserAction","EntityType","LocationContext","onItemSelect","item","ScrollHelper","getTocIndentClass","styles","idx","DivButton","AppLink","TableOfContentsMobile","isExpanded","setIsExpanded","React","logUserAction","AnalyticsHelper","onClickIcon","widget","IconButton","TableOfContentsSvg","TableOfContents","TableOfContentsContainer","getAppLink","currentAppLink","ContextService","params","TeacherOnlyEmptyState","useGetTopicsWidgets","dashboard","activeAudiences","isSystemGeneratedDashboard","systemGeneratedVideoWidget","CuratedDashboardHelper","WidgetTypeId","WidgetTemplate","systemGeneratedVideoContent","Flight.useBasicFetch","DashboardRequests","a","ArrayHelper","timer","useTableOfContentsActiveHeading","setActiveId","headingElements","controlledId","setControlledId","scrollPositionRef","callback","headings","heading","isScrollingUp","curIndex","h","prevHeading","observer","element","usePrevious","value","ref","HEADER_OFFSET","useTableOfContentsScroll","elements","activeId","hasDoneInitialScroll","setHasDoneInitialScroll","previousId","currentId","target","rec","ClassificationComingSoon","isFollowing","onClick","ActionButton","BellFilledSvg","BellSvg","WorkflowPhase","SignUpDescriptors","ClassificationDashboardAudiences","AudienceFilter","ProductTipsContext","useProductTipsContext","tipId","setProductTipRef","cleanUpProductTipRef","refs","WidgetSeriesSvg","useDirectoryTabProductTipSwitcher","initialTab","initialState","viewModel","setViewModel","useViewModel","interval","getTabs","breakpoints","activeTab","isHighlighting","showText","getTopicTabClassName","SparkleSvg","Core.AppLinkHelper","_d","_c","_f","_e","GridSvg","_h","_g","_j","_i","RectanglesSvg","_l","_k","_n","_m","_p","_o","ClassificationTabs","useBreakpoints","tab","PillTabSelector","el","shouldHideAudiences","audiences","isEmpty","isComingSoon","AudienceHelper","ClassificationDashboardNav","hideAudiences","canShowTabs","getContainerClass","getTopRowClass","getBottomRowClass","Breadcrumbs","isHeadingWidget","isTopicWidget","ClassificationDashboard","widgets","videoList","videoListWidgetId","isSmallScreen","useMediaQuery","MediaQueryStrings","headingRef","initialEmptyWidgets","acc","emptyWidgets","setEmptyWidgets","tableOfContentActiveId","setTableOfContentActiveId","shouldShowEmptyState","state","getWidgetContentRequest","id","widgetTypeId","template","showEmptyState","onSetIsEmpty","widgetId","newEmptyState","DashboardTargetType","index","currentWidget","isHeadingEmpty","subWidgetIndex","headingSubWidget","hideWidget","useLargeDashboardSpacing","getWidgetHeading","previousWidget","widgetsInTableOfContents","w","isTopicOnlyDashboard","shouldShowTableOfContents","shouldShowSideTableOfContents","shouldShowTopicCounts","BannerHeader","LocalPermissionName","WidgetContainerView","WidgetHeader","VideoList","video","opts","TopicNotFoundError","ErrorPageError","AppChannels","Actions","PartialClassification","PartialBannerHeader","PartialBreadcrumbs","PartialAudienceFilter","getClassificationAppLinks","classification","StreamableAppLinks","c","getClassificationBreadcrumbs","options","path","appLinks","breadcrumbs","sanitizeStreamableClassificationParams","queryParams","ObjectHelper","StreamableClassificationView","getVideoActions","useStreamableVideoActions","commonVideoProps","useCommonVideoProps","config","ConfigRequests","currentUser","UserRequests","curriculumData","useCurriculums","presentation","PresentationRequests","ClassificationRequests","isPreviewing","useFetchDashboard","useSetPageMetadata","PageMetadataHelper","SeoHelper","StreamableConstants","useHandleObjectError","AudienceRequests","PresentationType","activeAudienceIds","analyticsData","getBreadcrumbs","VideoActionsContext","PreviewBanner","ImageUrls","CalendarEventContentType"],"mappings":"0mFAMA,MAAMA,GAAY,sCAEZC,GAAY,CAAC,CAAE,UAAAC,CAAA,IACnBC,EAAAA,IAAC,OAAA,CAAK,UAAAD,EAAsB,SAAA,IAAM,EAM7B,SAASE,GAA4BC,EAA6D,CACvG,KAAM,CACJ,oBAAAC,EACA,yBAAAC,EACA,uBAAAC,EACA,4BAAAC,EACA,yBAAAC,CAAA,EACEC,EAAa,UAAUN,EAAM,cAAc,EAEzCO,EAAaN,EAAsBC,EACnCM,EAAgBL,EAAyBC,EAE/C,OACEK,EAAAA,KAAC,IAAA,CAAE,UAAU,wCACV,SAAA,CAAA,CAAC,CAACJ,GACDP,EAAAA,IAACY,EAAA,CAAA,UACCf,GACA,OAAO,SACP,QAAS,CAAE,MAAOU,EAAyB,eAAA,EAAkB,WAAYA,CAAA,CAAyB,CAAA,EAIrG,CAAC,CAACE,GACDE,EAAAA,KAAAE,EAAAA,SAAA,CACG,SAAA,CAAAN,EAA2B,GAAKP,EAAAA,IAACF,GAAA,CAAU,UAAU,OAAO,EAC7DE,EAAAA,IAACY,EAAA,CAAA,UACCf,GACA,OAAO,SACP,QAAS,CAAE,MAAOY,EAAW,eAAA,EAAkB,WAAYA,CAAA,CAAW,CAAA,CACxE,EACF,EAED,CAAC,CAACC,GACDC,EAAAA,KAAAE,EAAAA,SAAA,CACE,SAAA,CAAAb,EAAAA,IAACF,GAAA,CAAU,UAAU,MAAA,CAAO,EAC5BE,EAAAA,IAACY,EAAA,CAAA,UACCf,GACA,OAAO,YACP,QAAS,CAAE,MAAOa,EAAc,eAAA,EAAkB,WAAYA,CAAA,CAAc,CAAA,CAC9E,CAAA,CACF,CAAA,EAEJ,CAEJ,CC/CA,MAAMb,EAAY,2CACZiB,GAAYC,EAAgB,iBAAiBlB,CAAS,EASrD,SAASmB,GAAgCd,EAA0D,SACxG,MAAMe,IAAaC,EAAAhB,EAAM,YAAN,YAAAgB,EAAiB,UAAWC,GAAgB,SAE/D,aACGC,GAAyB,SAAzB,CAAkC,MAAOvB,EACxC,gBAACwB,EAAA,CACC,SAAA,CAAArB,EAAAA,IAACqB,EAAW,MAAX,CAAiB,IAAKnB,EAAM,SAAU,QAASY,GAAU,cAAc,EAAG,EACzEZ,EAAM,WAKNS,OAAAE,EAAAA,SAAA,CACE,SAAA,CAAAb,EAAAA,IAACqB,EAAW,QAAX,CACC,SAAArB,EAAAA,IAACY,aAAKf,EAAsB,OAAO,oBAAoB,CAAA,CACzD,EACAG,EAAAA,IAACqB,EAAW,KAAX,CACC,eAACT,EAAA,CAAA,UAAKf,EAAsB,OAAO,MAAA,CAAO,CAAA,CAC5C,EACAG,EAAAA,IAACsB,GAAA,CAAQ,MAAOL,EAAaF,EAAgB,UAAUlB,EAAW,oBAAoB,EAAI,GAAI,SAAQ,GACpG,SAAAG,EAAAA,IAACqB,EAAW,IAAX,CACC,KAAMN,EAAgB,UAAUlB,EAAW,KAAK,EAChD,SAAS0B,EAAArB,EAAM,mBAAN,YAAAqB,EAAA,KAAArB,GACT,UAAU,eACV,KAAMsB,GACN,SAAUP,CAAA,CAAA,CACZ,CACF,CAAA,CAAA,CACF,EApBAjB,EAAAA,IAACqB,EAAW,QAAX,CACC,SAAArB,EAAAA,IAACY,EAAA,CAAK,OAAO,eAAe,CAAA,CAC9B,CAkBA,CAAA,CAEJ,CAAA,CACF,CAEJ,2PCzBO,SAASa,GAAsCvB,EAA6C,CACjG,MAAMwB,EAAmB,CACvB,WAAYC,EAAW,MACvB,OAAQC,EAAW,OACnB,SAAUC,EAAgB,eAAA,EAG5B,SAASC,EAAaC,EAA8B,OAClDC,GAAa,iBAAA,EACb9B,EAAM,gBAAgB6B,EAAK,EAAE,GAE7Bb,EAAAhB,EAAM,cAAN,MAAAgB,EAAA,KAAAhB,EAAoB6B,GAEpB,WAAW,IAAA,OAAM,OAAAb,EAAA,SAAS,eAAea,EAAK,EAAE,IAA/B,YAAAb,EAAkC,QAAO,CAC5D,CAEA,SAASe,EAAkBF,EAAsC,CAC/D,OAAIA,EAAK,iBAAmB,EACnBG,EAAO,WAEZH,EAAK,iBAAmB,EACnBG,EAAO,WAET,EACT,CAEA,OACElC,EAAAA,IAAC,MAAA,CAAI,UAAW,GAAGkC,EAAO,YAAY,GACnC,SAAAhC,EAAM,MAAM,IAAI,CAAC6B,EAAMI,IAClBjC,EAAM,WAENF,EAAAA,IAACoC,GAAA,CAEC,UAAW,GAAGF,EAAO,aAAa,IAAIhC,EAAM,WAAa6B,EAAK,GAAKG,EAAO,aAAe,EAAE,GAC3F,QAAS,IAAM,CACbJ,EAAaC,CAAI,CACnB,EAEA,SAAA/B,EAAAA,IAAC,MAAA,CAAI,UAAW,GAAG,CAACE,EAAM,UAAYiC,IAAQ,EAAID,EAAO,QAAU,EAAE,IAClE,WAAK,IAAA,CACR,CAAA,EARKH,EAAK,EAAA,EAcd/B,EAAAA,IAACqC,GAAA,CAEC,QAASnC,EAAM,WAAW6B,CAAI,EAC9B,eAAgB,CAAE,QAAS,EAAA,EAC3B,UAAW,GAAGG,EAAO,aAAa,IAAIhC,EAAM,WAAa6B,EAAK,GAAKG,EAAO,aAAe,EAAE,GAC3F,QAAS,IAAM,CACbJ,EAAaC,CAAI,CACnB,EACA,cAAe,CACb,GAAG7B,EAAM,cACT,GAAI6B,EAAK,GACT,KAAMA,EAAK,IAAA,EAEb,iBAAAL,EAEA,eAAC,MAAA,CAAI,UAAW,GAAG,CAACxB,EAAM,UAAYiC,IAAQ,EAAID,EAAO,QAAU,EAAE,IAAID,EAAkBF,CAAI,CAAC,GAC7F,WAAK,IAAA,CACR,CAAA,EAhBKA,EAAK,EAAA,CAmBf,CAAA,CACH,CAEJ,gFCtEA,SAASO,GAAsBpC,EAA6B,CAC1D,KAAM,CAAEqC,EAAYC,CAAc,EAAIC,EAAM,SAAS,EAAK,EAE1D,SAASC,GAAgB,CACvB,MAAMhB,EAAmB,CACvB,WAAaa,EAA+BZ,EAAW,KAA7BA,EAAW,KACrC,OAAQC,EAAW,gBACnB,SAAUC,EAAgB,SAAA,EAG5Bc,GAAgB,cAAczC,EAAM,cAAewB,CAAgB,CACrE,CAEA,SAASkB,GAAc,CACrBJ,EAAc,CAACD,CAAU,EACzBG,EAAA,CACF,CAEA,cACG,MAAA,CAAI,UAAW,GAAGR,GAAO,MAAM,uBAE7B,SAAA,CAAAK,GACC5B,EAAAA,KAAC,MAAA,CAAI,UAAU,6DACb,SAAA,CAAAX,EAAAA,IAAC,KAAA,CAAG,UAAU,KAAM,SAAAE,EAAM,MAAM,EAChCF,EAAAA,IAACyB,GAAA,CACC,MAAOvB,EAAM,QAAQ,IAAI2C,IACvB,CAAE,KAAMA,EAAO,KAAM,GAAIA,EAAO,GAAI,eAAgBA,EAAO,SAAS,gBACrE,EACD,SAAU3C,EAAM,SAChB,QAASA,EAAM,QACf,cAAeA,EAAM,cACrB,gBAAiBA,EAAM,gBACvB,WAAYA,EAAM,WAClB,YAAa,IAAMsC,EAAc,EAAK,CAAA,CAAA,CACxC,EACF,EAEFxC,EAAAA,IAAC,MAAA,CAAI,UAAWkC,GAAO,UACrB,SAAAlC,EAAAA,IAAC8C,GAAA,CACC,UAAU,uBACV,IAAKC,GACL,QAASH,CAAA,CAAA,CACX,CACF,CAAA,EACF,CAEJ,CAEA,SAASI,GAAgB9C,EAA0C,CACjE,OACEF,EAAAA,IAAC,QAAA,CAAM,UAAU,gBACf,SAAAW,EAAAA,KAAC,OAAI,UAAW,GAAGuB,GAAO,SAAS,QACjC,SAAA,CAAAlC,EAAAA,IAAC,KAAA,CAAG,UAAU,KAAM,SAAAE,EAAM,MAAM,EAEhCF,EAAAA,IAACyB,GAAA,CACC,MAAOvB,EAAM,QAAQ,IAAI2C,IACvB,CAAE,KAAMA,EAAO,KAAM,GAAIA,EAAO,GAAI,eAAgBA,EAAO,SAAS,gBACrE,EACD,SAAU3C,EAAM,SAChB,QAASA,EAAM,QACf,cAAeA,EAAM,cACrB,gBAAiBA,EAAM,gBACvB,WAAYA,EAAM,UAAA,CAAA,CACpB,CAAA,CACF,CAAA,CACF,CAEJ,CAEO,SAAS+C,GAAyB/C,EAAmD,CAC1F,SAASgD,EAAWL,EAAqC,CACvD,MAAMM,EAAiBC,GAAe,gBAAA,EAAkB,QAElDC,EAAqBF,EAAe,OACtC,CAAE,GAAIA,EAAe,MAAA,EACrB,CAAA,EAEJ,OAAAE,EAAO,MAAQR,EAAO,GAEf,CACL,GAAGM,EACH,OAAAE,CAAA,CAEJ,CAEA,OACErD,EAAAA,IAAAa,EAAAA,SAAA,CACG,SAACX,EAAM,cAEJF,MAACsC,GAAA,CAAuB,GAAGpC,EAAO,WAAAgD,EAAwB,QADzDF,GAAA,CAAiB,GAAG9C,EAAO,WAAAgD,CAAA,CAAwB,EAG1D,CAEJ,CClHA,MAAMrD,GAAY,iCACZiB,GAAYC,EAAgB,iBAAiBlB,EAAS,EAOrD,SAASyD,GAAsBpD,EAAgD,OACpF,aACGkB,GAAyB,SAAzB,CAAkC,MAAOvB,GACxC,gBAACwB,EAAA,CACC,SAAA,CAAArB,EAAAA,IAACqB,EAAW,MAAX,CAAiB,IAAKnB,EAAM,SAAU,QAASY,GAAU,SAAS,EAAG,EACtEd,EAAAA,IAACqB,EAAW,QAAX,CACC,eAACT,EAAA,CAAK,OAAO,UAAU,EACzB,EACAZ,EAAAA,IAACqB,EAAW,KAAX,CACC,eAACT,EAAA,CAAK,OAAO,OAAO,EACtB,EAEAZ,EAAAA,IAACqB,EAAW,IAAX,CACC,KAAMP,GAAU,KAAK,EACrB,SAASI,EAAAhB,EAAM,aAAN,YAAAgB,EAAA,KAAAhB,GACT,UAAU,cAAA,CAAA,CACZ,CAAA,CACF,CAAA,CACF,CAEJ,CCdO,SAASqD,GAAoBC,EAA6BC,EAAmD,SAClH,KAAM,CACJ,2BAAAC,EACA,2BAAAC,CAAA,EACElB,EAAM,QAAQ,IACXe,EASE,CACL,2BAHiCI,EAAuB,2BAA2BJ,EAAU,OAAO,EAIpG,2BAA4BA,EAAU,QAAQ,KAAKX,GAE/CA,EAAO,WAAagB,EAAa,4BACjChB,EAAO,aAAeiB,GAAe,qBAExC,CAAA,EAfM,CACL,2BAA4B,GAC5B,2BAA4B,IAAA,EAe/B,CAACN,GAAA,YAAAA,EAAW,EAAE,CAAC,EAEZO,EAA8BC,EAClC,CAAC,CAACL,GACFM,GAAkB,uBAChBN,GAAA,YAAAA,EAA4B,GAC5BC,EAAuB,gBACrBD,EAA2B,SAC3BA,EAA2B,WAC3BC,EAAuB,uBAAuBJ,CAAS,EACvDC,GAAA,YAAAA,EAAiB,IAAIS,GAAKA,EAAE,SAAQ,EAEtCP,GAAA,YAAAA,EAA4B,UAAA,CAC9B,EAIF,OAAKD,EAIE,CACL,UAASxC,EAAAsC,GAAA,YAAAA,EAAW,UAAX,YAAAtC,EAAoB,OAAO2B,GAC9BA,EAAO,WAAagB,EAAa,4BAGjChB,EAAO,aAAeiB,GAAe,yBAIrC,CAAA,EACN,YAAWvC,EAAAwC,EAA4B,OAA5B,YAAAxC,EAAkC,UAAW,CAAA,EACxD,kBAAmBoC,GAAA,YAAAA,EAA4B,EAAA,EAdxC,CAAE,QAASQ,GAAY,OAAOX,GAAA,YAAAA,EAAW,QAAS,OAAO,CAAA,CAgBpE,CCtEA,IAAIY,GAEG,MAAMC,GAAkC,CAC7C,CAAE,YAAAC,EAAa,gBAAAC,EAAiB,aAAAC,EAAc,gBAAAC,KAC3C,CACH,MAAMC,EAAoBjC,EAAM,OAAO,CAAC,EAExCA,EAAM,UAAU,IAAM,CACpB,MAAMkC,EAAYC,GAA0C,CAC1DA,EAAS,QAAQC,GAAW,CAC1B,GAAIL,EAAc,CAChBF,EAAYE,CAAY,EAExBJ,GAAQ,OAAO,WAAW,IAAM,CAC9BK,EAAgB,EAAE,CACpB,EAAG,GAAG,EACN,MACF,CACA,GAAII,EAAQ,eACVP,EAAYO,EAAQ,OAAO,EAAE,EAC7BH,EAAkB,QAAU,OAAO,YAC9B,CAEL,MAAMI,EADiBJ,EAAkB,QAAU,OAAO,QACnB,EACjCK,EAAWR,EAAgB,UAAUS,GAAKA,EAAE,KAAOH,EAAQ,OAAO,EAAE,EACpEI,EAAcV,EAAgBQ,EAAW,CAAC,EAC5CD,IAAiBG,GAAA,MAAAA,EAAa,KAChCX,EAAYW,GAAA,YAAAA,EAAa,EAAE,CAE/B,CACF,CAAC,CACH,EAEMC,EAAW,IAAI,qBAAqBP,EAAU,CAElD,WAAY,oBAAA,CACb,EAED,OAAAJ,EAAgB,QAAQY,GAAWD,EAAS,QAAQC,CAAO,CAAC,EAErD,IAAM,CACXf,IAAS,OAAO,aAAaA,EAAK,EAClCc,EAAS,WAAA,CACX,CACF,EAAG,CAAEZ,EAAaC,EAAgB,OAAQC,CAAa,CAAC,CAC1D,ECnDO,SAASY,GAAeC,EAAa,CAC1C,MAAMC,EAAM7C,EAAM,OAAU,IAAI,EAChC,OAAAA,EAAM,UAAU,IAAM,CACpB6C,EAAI,QAAUD,CAChB,CAAC,EACMC,EAAI,OACb,CCLA,MAAMC,GAAgB,GAETC,GAA2B,CAACC,EAAqBC,IAAqB,CACjF,KAAM,CAAEC,EAAsBC,CAAwB,EAAInD,EAAM,SAAS,EAAK,EAExEoD,EAAaT,GAAYM,CAAQ,EACjCI,EAAYJ,EAElBjD,EAAM,gBAAgB,IAAM,CAC1B,GAAI,CAACkD,GAAwBE,IAAeC,EAAW,CACrD,MAAMC,EAASN,EAAS,QAAgBZ,IAAYA,GAAA,YAAAA,EAAS,MAAOiB,CAAU,EAE9E,GAAIC,EAAQ,CACV,MAAMC,EAAMD,EAAO,sBAAA,EAEnB,OAAO,SAAS,CACd,IAAKC,EAAI,IAAMT,GACf,SAAU,QAAA,CACX,EAEII,GACHC,EAAwB,EAAI,CAChC,CACF,CACF,EAAG,CAAEH,EAAUI,EAAYC,EAAWH,CAAqB,CAAC,CAC9D,ECbM9F,GAAY,oCACZiB,GAAYC,EAAgB,iBAAiBlB,EAAS,EAYrD,SAASoG,GAAyB/F,EAAqC,SAC5E,MAAMgG,EAAc,CAAC,GAAC3E,GAAAL,EAAAhB,EAAM,KAAK,YAAX,YAAAgB,EAAsB,OAAtB,MAAAK,EAA4B,QAClD,SAAS4E,GAAgB,QACvBjF,EAAAhB,EAAM,iBAAN,MAAAgB,EAAA,KAAAhB,EACF,CAEA,OACEF,EAAAA,IAACoB,GAAyB,SAAzB,CAAkC,MAAOvB,GACxC,SAAAc,EAAAA,KAACU,EAAA,CAAW,UAAU,OACpB,SAAA,CAAArB,EAAAA,IAACqB,EAAW,MAAX,CAAiB,IAAKnB,EAAM,SAAU,QAASY,GAAU,YAAY,EAAG,EAEzEd,EAAAA,IAACqB,EAAW,QAAX,CACC,eAACT,EAAA,CAAK,OAAO,aAAa,EAC5B,EAEAZ,EAAAA,IAACqB,EAAW,KAAX,CACC,SAAArB,EAAAA,IAACY,EAAA,CAAK,OAAQV,EAAM,WAAa,WAAa,MAAA,CAAQ,CAAA,CACxD,EAECA,EAAM,mBACLF,EAAAA,IAACoG,GAAA,CACC,IAAKF,EAAcG,GAAgBC,GACnC,QAAAH,EACA,YAAajG,EAAM,wBACnB,UAAW,uBAAuBgG,EAAc,mBAAqB,UAAU,GAE/E,SAAAlG,EAAAA,IAACY,EAAA,CAAK,OAAQsF,EAAc,YAAc,QAAA,CAAU,CAAA,CAAA,EAIvDhG,EAAM,YAAc,CAACA,EAAM,mBAC1BF,EAAAA,IAACqC,GAAA,CACC,QAASnC,EAAM,cACf,UAAU,wCACV,iBAAkB,CAChB,WAAYyB,EAAW,MACvB,SAAUE,EAAgB,yBAC1B,OAAQD,EAAW,QACnB,cAAe2E,GAAc,MAC7B,WAAYC,GAAkB,MAAA,EAEhC,cAAe,CAAA,EACf,IAAI,SAEH,YAAU,QAAQ,CAAA,CAAA,CACrB,CAAA,CAEJ,CAAA,CACF,CAEJ,CC/DO,SAASC,GAAiCvG,EAA2D,CAC1G,OACEF,EAAAA,IAAC0G,GAAA,CACC,UAAWxG,EAAM,UACjB,gBAAiBA,EAAM,gBACvB,SAAUA,EAAM,SAChB,QAASA,EAAM,QACf,eAAgBA,EAAM,eACtB,QAASA,EAAM,OAAA,CAAA,CAGrB,CCfA,MAAMyG,GAAqBlE,EAAM,cAAwC,CACvE,iBAAkB,IAAM,CAAC,EACzB,qBAAsB,IAAM,CAAC,EAC7B,KAAM,CAAA,CACR,CAAC,EAEM,SAASmE,GAAsBC,EAAsB,CAC1D,KAAM,CAAE,iBAAAC,EAAkB,qBAAAC,EAAsB,KAAAC,GAASvE,EAAM,WAAWkE,EAAkB,EAE5F,OAAAlE,EAAM,UAAU,IAIP,IAAMsE,EAAqBF,CAAK,EACtC,CAACA,CAAK,CAAC,EAEH,CACL,iBAAmBvB,GAAqBwB,EAAiBD,EAAOvB,CAAG,EACnE,KAAA0B,CAAA,CAEJ,CC9BO,SAASC,GAAgB/G,EAAsC,CACpE,OACEF,EAAAA,IAAC,MAAA,CAAK,GAAGE,EACP,SAAAF,EAAAA,IAAC,OAAA,CACC,EAAE,uXACF,KAAK,cAAA,CAAA,EAET,CAEJ,CCAO,SAASkH,GAAkCC,EAAgC,CAChF,MAAMC,EAA0B,CAC9B,GAAI,GACJ,IAAKD,GAAc,cAAA,EAGf,CAAEE,EAAWC,CAAa,EAAIC,GAAwB,iCAAkCH,CAAY,EAE1G,OAAA3E,EAAM,UAAU,IAAM,CACf0E,GAGLG,EAAa,MAAOH,CAAU,CAChC,EAAG,CAACA,CAAU,CAAC,EAEf1E,EAAM,UAAU,IAAM,CACpB,IAAI+E,EAAmB,KAEvB,OAAIH,EAAU,KACZG,EAAW,OAAO,YAAY,IAAM,CAC9BH,EAAU,MAAQ,gBAAkBA,EAAU,MAAQ,aACxDC,EAAa,MAAOD,EAAU,MAAQ,eAAiB,aAAe,cAAc,EAEpFC,EAAa,MAAOD,EAAU,MAAQ,gBAAkB,aAAe,eAAe,CAC1F,EAAG,GAAI,GAGF,IAAM,CACX,OAAO,cAAcG,CAAQ,CAC/B,CACF,EAAG,CAAEH,EAAU,GAAIA,EAAU,GAAI,CAAC,EAE3B,CACL,IAAKA,EAAU,IACf,eAAgBA,EAAU,GAC1B,MAAO,IAAMC,EAAa,KAAM,EAAI,EACpC,KAAM,IAAM,CACVA,EAAa,CACX,GAAI,GACJ,IAAKH,GAAcE,EAAU,GAAA,CAC9B,CACH,CAAA,CAEJ,yGCjCMxH,EAAY,iCAIlB,SAAS4H,GACPvH,EACAwH,EACAC,EACAC,EACW,qCACX,MAAMC,EAAWH,EAAY,IAAMA,EAAY,IAAMA,EAAY,KAAOA,EAAY,GAEpF,SAASI,GAA+B,CACtC,IAAI/H,EAAY6H,EAAiB1F,EAAO,cAAgB,GAExD,OAAIwF,EAAY,GACP3H,EAAY,SAEjB8H,EACK9H,EAAY,IAAImC,EAAO,eAAe,GAExCnC,CACT,CAEA,OAAIS,EAAa,gBAAgBN,EAAM,cAAc,EAC5C,CAAC,CACN,KAAM2H,EAAW9G,EAAgB,UAAUlB,EAAW,aAAa,EAAI,GACvE,SAAS0B,GAAAL,EAAAhB,EAAM,WAAN,YAAAgB,EAAgB,iBAAhB,YAAAK,EAAA,KAAAL,EAAiChB,EAAM,gBAChD,OAAQyH,IAAc,eACtB,IAAKI,GACL,cAAe,CACb,GAAI,eACJ,iBAAkB7H,EAAM,eAAe,GACvC,mBAAoBA,EAAM,eAAe,KACzC,eAAgBA,EAAM,aAAa,GACnC,wBAAyBA,EAAM,aAAa,YAC5C,KAAMa,EAAgB,UAAUlB,EAAW,aAAa,EACxD,IAAKmI,EAAmB,SAAQC,GAAAC,EAAAhI,EAAM,WAAN,YAAAgI,EAAgB,iBAAhB,YAAAD,EAAA,KAAAC,EAAiChI,EAAM,eAAe,CAAA,EAExF,iBAAkB,CAChB,WAAYyB,EAAW,MACvB,OAAQC,EAAW,IACnB,SAAUC,EAAgB,SAAA,EAE5B,UAAW,GAAG6F,EAAY,GAAK,QAAU,EAAE,IAAIE,EAAiB1F,EAAO,cAAgB,EAAE,EAAA,EACxF,CACD,KAAM2F,EAAW9G,EAAgB,UAAUlB,EAAW,WAAW,EAAI,GACrE,SAASsI,GAAAC,EAAAlI,EAAM,WAAN,YAAAkI,EAAgB,0BAAhB,YAAAD,EAAA,KAAAC,EAA0ClI,EAAM,gBACzD,OAAQyH,IAAc,aACtB,IAAKU,GACL,cAAe,CACb,GAAI,aACJ,iBAAkBnI,EAAM,eAAe,GACvC,mBAAoBA,EAAM,eAAe,KACzC,eAAgBA,EAAM,aAAa,GACnC,wBAAyBA,EAAM,aAAa,YAC5C,KAAMa,EAAgB,UAAUlB,EAAW,WAAW,EACtD,IAAKmI,EAAmB,SAAQM,GAAAC,EAAArI,EAAM,WAAN,YAAAqI,EAAgB,0BAAhB,YAAAD,EAAA,KAAAC,EAA0CrI,EAAM,eAAe,CAAA,EAEjG,iBAAkB,CAChB,WAAYyB,EAAW,MACvB,OAAQC,EAAW,IACnB,SAAUC,EAAgB,SAAA,EAE5B,UAAW,GAAG6F,EAAY,GAAK,QAAU,EAAE,IAAIE,EAAiB1F,EAAO,cAAgB,EAAE,EAAA,CAC1F,EAGI,CAAC,CACN,KAAM2F,EAAW9G,EAAgB,UAAUlB,EAAW,OAAO,EAAI,GACjE,SAAS2I,GAAAC,EAAAvI,EAAM,WAAN,YAAAuI,EAAgB,iBAAhB,YAAAD,EAAA,KAAAC,EAAiCvI,EAAM,gBAChD,OAAQyH,IAAc,gBACtB,IAAKe,GACL,cAAe,CACb,GAAI,gBACJ,iBAAkBxI,EAAM,eAAe,GACvC,mBAAoBA,EAAM,eAAe,KACzC,eAAgBA,EAAM,aAAa,GACnC,wBAAyBA,EAAM,aAAa,YAC5C,KAAMa,EAAgB,UAAUlB,EAAW,OAAO,EAClD,IAAKmI,EAAmB,SAAQW,GAAAC,EAAA1I,EAAM,WAAN,YAAA0I,EAAgB,iBAAhB,YAAAD,EAAA,KAAAC,EAAiC1I,EAAM,eAAe,CAAA,EAExF,iBAAkB,CAChB,WAAYyB,EAAW,MACvB,OAAQC,EAAW,IACnB,SAAUC,EAAgB,SAAA,EAE5B,UAAWiG,EAAA,CAAqB,EAC/B,CACD,KAAMD,EAAW9G,EAAgB,UAAUlB,EAAW,YAAY,EAAI,GACtE,SAASgJ,GAAAC,EAAA5I,EAAM,WAAN,YAAA4I,EAAgB,2BAAhB,YAAAD,EAAA,KAAAC,EAA2C5I,EAAM,gBAC1D,OAAQyH,IAAc,aACtB,IAAKV,GACL,cAAe,CACb,GAAI,aACJ,iBAAkB/G,EAAM,eAAe,GACvC,mBAAoBA,EAAM,eAAe,KACzC,eAAgBA,EAAM,aAAa,GACnC,wBAAyBA,EAAM,aAAa,YAC5C,KAAMa,EAAgB,UAAUlB,EAAW,YAAY,EACvD,IAAKmI,EAAmB,SAAQe,GAAAC,EAAA9I,EAAM,WAAN,YAAA8I,EAAgB,2BAAhB,YAAAD,EAAA,KAAAC,EAA2C9I,EAAM,eAAe,CAAA,EAElG,iBAAkB,CAChB,WAAYyB,EAAW,MACvB,OAAQC,EAAW,IACnB,SAAUC,EAAgB,SAAA,EAE5B,UAAW,GAAG6F,EAAY,GAAK,QAAU,EAAE,IAAIE,EAAiB1F,EAAO,cAAgB,EAAE,EAAA,CAC1F,CACH,CAaO,SAAS+G,GAAmB/I,EAA6C,CAC9E,MAAMwH,EAAcwB,GAAA,EACd,CAAE,IAAAC,EAAK,eAAAvB,CAAA,EAAmBV,GAAkChH,EAAM,SAAS,EAE3E,CAAE,iBAAA4G,CAAA,EAAqBF,GAAsB,sBAAsB,EAEzE,OACE5G,EAAAA,IAACoJ,GAAA,CACC,aAAa,KACb,aAAcC,GAAMvC,EAAiBuC,CAAE,EACvC,UAAW3B,EAAY,GAAK,QAAU,GACtC,cAAc,qBACd,KAAMD,GAAQvH,EAAOwH,EAAayB,EAAKvB,CAAc,CAAA,CAAA,CAG3D,CChJA,SAAS0B,GACPC,EACA9F,EACAkE,EACA6B,EACAC,EACS,CAUT,MATI,GAAAA,GAGAD,GAAW,EAAC/F,GAAA,MAAAA,EAAiB,SAG7B,CAACiG,GAAe,oBAAoBH,CAAS,GAG7C5B,IAAc,aAIpB,CA0BO,SAASgC,GAA2BzJ,EAAqD,WAC9F,MAAMwH,EAAcwB,GAAA,EAEdU,EAAgBN,GACpBpJ,EAAM,UACNA,EAAM,gBACNA,EAAM,UACNA,EAAM,QACNA,EAAM,YAAA,EAGR,SAAS2J,GAAuB,OAI9B,MAHI,CAAC3J,EAAM,gBAAkB,CAACA,EAAM,WAGhC0D,EAAuB,2BAA2B1D,EAAM,UAAU,OAAO,EACpE,GAKLM,EAAa,gBAAgBN,EAAM,cAAc,EAC5CA,EAAM,2BAKX,IAAAgB,EAAAhB,EAAM,eAAe,mBAArB,MAAAgB,EAAuC,WAAahB,EAAM,4BAIhE,CAEA,SAAS4J,GAA4B,CACnC,IAAI/J,EAAY,+BAKhB,OAHKG,EAAM,eACTH,GAAa,mBAEV8J,EAAA,GAAiBD,IAAkB,CAAClC,EAAY,GAC5C3H,EAEFA,EAAY,YACrB,CAEA,SAASgK,GAAyB,CAChC,GAAIH,EACF,OAAIlC,EAAY,GACP,uDAEF,oDAGT,IAAI3H,EAAY,GAEhB,OAAAA,GAAa,yDAET2H,EAAY,KACd3H,GAAa,mBAERA,CACT,CAEA,SAASiK,GAA4B,CACnC,IAAIjK,EAAY,iDAEhB,OAAI2H,EAAY,KACd3H,GAAa,wBAERA,CACT,CAEA,OACEY,EAAAA,KAAC,MAAA,CAAI,UAAWmJ,EAAA,EACd,SAAA,CAAAnJ,EAAAA,KAAC,MAAA,CAAI,UAAWoJ,EAAA,EACd,SAAA,CAAA/J,EAAAA,IAACiK,GAAA,CAAY,aAAa/I,EAAAhB,EAAM,iBAAN,YAAAgB,EAAA,KAAAhB,EAAuB,CAAG,EAEnD2J,EAAA,GAAiBD,GAChB5J,EAAAA,IAACiJ,GAAA,CACC,eAAgB/I,EAAM,eACtB,UAAWA,EAAM,UACjB,SAAUA,EAAM,SAChB,aAAcA,EAAM,YAAA,CAAA,CACtB,EAEJ,EAEAS,EAAAA,KAAC,MAAA,CAAI,UAAWqJ,EAAA,EACb,SAAA,CAAA,CAACJ,GACA5J,EAAAA,IAACyG,GAAA,CACC,UAAWvG,EAAM,UACjB,gBAAiBA,EAAM,gBACvB,SAASgI,GAAA3G,EAAArB,EAAM,UAAS,WAAf,YAAAgI,EAAA,KAAA3G,GACT,SAAUrB,EAAM,iBAChB,QAASA,EAAM,gBACf,eAAgB,CAACA,EAAM,4BAAA,CAAA,EAI1B2J,EAAA,GAAiB,CAACD,GACjB5J,EAAAA,IAACiJ,GAAA,CACC,eAAgB/I,EAAM,eACtB,UAAWA,EAAM,UACjB,SAAUA,EAAM,SAChB,aAAcA,EAAM,YAAA,CAAA,CACtB,CAAA,CAEJ,CAAA,EACF,CAEJ,CCpIA,MAAML,GAAY,iCAElB,SAASqK,GAAgBrH,EAAuB,CAC9C,OAAOA,EAAO,WAAagB,EAAa,OAAShB,EAAO,aAAeiB,GAAe,OACxF,CAEA,SAASqG,GAActH,EAAuB,CAC5C,OAAOA,EAAO,WAAagB,EAAa,wBAA0BhB,EAAO,WAAagB,EAAa,eACrG,CA+EAuG,GAAwB,aAAe,CACrC,SAAU,CAAA,CACZ,EAEO,SAASA,GAAwBlK,EAAkD,eACxF,KAAM,CAAE,QAAAmK,EAAS,UAAAC,EAAW,kBAAAC,CAAA,EAAsBhH,GAAoBrD,EAAM,UAAWA,EAAM,eAAe,EAEtGsK,EAAgBC,GAAcC,GAAkB,MAAM,EACtDC,EAAalI,EAAM,OAAqB,IAAI,GAAK,EAEjDmI,EAAsBnI,EAAM,QAAQ,IACjC4H,EAAQ,OAAO,CAACQ,EAA0BhI,KAC/CgI,EAAIhI,EAAO,EAAE,EAAI,GACVgI,GACN,CAAA,CAAE,EACJ,CAACR,GAAA,YAAAA,EAAS,MAAM,CAAC,EAEd,CAAES,EAAcC,CAAgB,EAAItI,EAAM,SAASmI,CAAmB,EAEtE,CAAEpG,EAAcC,CAAgB,EAAIhC,EAAM,SAASvC,EAAM,iBAAiB,EAE1E,CAAE8K,EAAwBC,CAA0B,EAAIxI,EAAM,SAAiB,EAAE,EAEjF8B,EAAkB,MAAM,KAAKoG,EAAW,OAAO,EACrDnF,GAAyBjB,EAAiBC,CAAY,EACtDH,GAAgC,CAC9B,YAAa4G,EACb,gBAAA1G,EACA,aAAAC,EACA,gBAAAC,CAAA,CACD,EAED,SAASyG,GAAgC,CAIvC,OAHIhL,EAAM,cAGNA,EAAM,cACD,GAEL,CAACA,EAAM,WAGPA,EAAM,UAAU,SAAWiB,GAAgB,UAAY,CAACjB,EAAM,YAG9DA,EAAM,UAAU,SAAWiB,GAAgB,OAAS,CAACjB,EAAM,cAG3D,EAACmK,GAAA,MAAAA,EAAS,QACL,GAELC,GAAaA,EAAU,OAClB,GAEF,OAAO,OAAOQ,CAAY,EAAE,MAAMK,GAAS,CAAC,CAACA,CAAK,CAC3D,CAEA,SAASC,EAAwBC,EAAYC,EAA4BC,EAA0C,SACjH,MAAMlI,EAASO,EAAuB,gBACpC0H,EACAC,EACA3H,EAAuB,uBAAuB1D,EAAM,SAAS,GAC7DgB,EAAAhB,EAAM,kBAAN,YAAAgB,EAAuB,IAAIgD,GAAKA,EAAE,WAClC3C,EAAArB,EAAM,YAAY,sBAAlB,YAAAqB,EAAuC,EAAA,EAGzC,OAAOrB,EAAM,wBAAwBmL,EAAIhI,EAAQkI,CAAQ,CAC3D,CAEA,MAAMC,EAAiBN,EAAA,EAEvBzI,EAAM,UAAU,IAAM,CAMhB+I,GACFT,EAAgBH,CAAmB,CAEvC,EAAG,CAACP,GAAA,YAAAA,EAAS,MAAM,CAAC,EAEpB,MAAMoB,EAAehJ,EAAM,YAAY,CAACiJ,EAAkBlC,IAAqB,CAC7E,GAAIsB,EAAaY,CAAQ,IAAMlC,EAC7B,OAEF,MAAMmC,EAAgB,CACpB,GAAGb,EACH,CAACY,CAAQ,EAAGlC,CAAA,EAMd,GAAI5F,EAAuB,OAAO1D,EAAM,UAAW0L,EAAoB,uBAAuB,EAAG,CAC/Fb,EAAgBY,CAAa,EAC7B,MACF,CAEA,IAAIE,EAAQ,EAOZ,KAAOA,EAAQxB,EAAQ,QAAQ,CAC7B,MAAMyB,EAAgBzB,EAAQwB,CAAK,EAEnC,GAAI,CAAC3B,GAAgB4B,CAAa,EAAG,CACnCD,IACA,QACF,CAEA,IAAIE,EAAiB,GACjBC,EAAiBH,EAAQ,EAE7B,KAAOE,GAAkBC,EAAiB3B,EAAQ,QAAQ,CACxD,MAAM4B,GAAmB5B,EAAQ2B,CAAc,EAE/C,GAAI9B,GAAgB+B,EAAgB,EAClC,MAEE,CAACN,EAAcM,GAAiB,EAAE,GAAK,CAAC9B,GAAc8B,EAAgB,IACxEF,EAAiB,IAEnBC,GACF,CAEAH,EAAQG,EAERL,EAAcG,EAAc,EAAE,EAAIC,CACpC,CAEAhB,EAAgBY,CAAa,CAC/B,EAAG,CAAEb,EAAcT,CAAQ,CAAC,EAE5B,SAAS6B,EAAWrJ,EAAgC,CAClD,OAAOqH,GAAgBrH,CAAM,GAAKiI,EAAajI,EAAO,EAAE,CAC1D,CAEA,SAASsJ,GAAoC,CAC3C,MAAMpG,EAASnC,EAAuB,uBAAuB1D,EAAM,SAAS,EAE5E,MAAI,EAAAA,EAAM,aAAe6F,IAAW6F,EAAoB,yBAI1D,CAEA,SAASQ,EAAiBvJ,EAAuBgJ,EAAuB,CACtE,GAAIhJ,EAAO,WAAagB,EAAa,qCAAsC,CACzE,MAAMwI,EAAiBhC,EAAQwB,EAAQ,CAAC,EAExC,OAAIf,EAAauB,EAAe,EAAE,EACzBxJ,EAAO,KAAK,QAAQ,eAAgB,QAAQ,EAE9CA,EAAO,IAChB,CAEA,OAAOA,EAAO,IAChB,CAEA,MAAMyJ,EAA2BjC,EAAQ,OAAOkC,GAAK,OACnD,MAAO,CAACL,EAAWK,CAAC,GAAK,CAAC,GAACrL,EAAAqL,EAAE,WAAF,MAAArL,EAAY,sBACzC,CAAC,EAEKsL,EAAuBnC,EAAQ,MAAMF,EAAa,EAElDsC,EAA4BH,EAAyB,QAAU,EAC/DI,EAAgCD,GAA6B,CAACjC,EAE9DmC,IACJzL,EAAAhB,EAAM,WAAN,YAAAgB,EAAgB,sBAChBV,EAAa,gBAAgBN,EAAM,cAAc,GACjD,CAACA,EAAM,kCAOT,OACES,OAAC,OAAI,UAAW,iBAAiBwL,IAA6B,uBAAyB,EAAE,GACvF,SAAA,CAAAnM,EAAAA,IAAC4M,GAAA,CACC,QAAS1M,EAAM,eAAe,KAC9B,OAAQA,EAAM,eAAe,OAC7B,YAAaA,EAAM,YACnB,SAASqB,EAAArB,EAAM,mBAAN,YAAAqB,EAAA,KAAArB,GACT,yBAAyB,uBACzB,aAAcA,EAAM,aACpB,cAAe,CACb,WAAY,gBACZ,OAAQ,mBAAA,EAEV,eAAgBA,EAAM,aACtB,iBAAkByM,EACd,IAAM3M,MAACC,IAA4B,eAAgBC,EAAM,eAAgB,EACzE,IAAA,CAAA,EAINF,EAAAA,IAAC2J,GAAA,CACC,UAAWzJ,EAAM,UACjB,eAAgBA,EAAM,eACtB,aAAcA,EAAM,aACpB,SAAUA,EAAM,SAChB,UAAWA,EAAM,IACjB,UAAWA,EAAM,UACjB,gBAAiBA,EAAM,gBACvB,eAAgBA,EAAM,eACtB,2BAA4BA,EAAM,2BAClC,4BAA6BA,EAAM,4BACnC,aAAcA,EAAM,aACpB,QAASsL,EACT,6BAA8BtL,EAAM,0BACpC,iBAAkBsM,GAAwBtM,EAAM,WAChD,gBAAiBsM,EAAuBzL,EAAgB,UAAUlB,GAAW,iBAAiB,EAAI,EAAA,CAAA,EAGnGK,EAAM,cACLF,EAAAA,IAACiG,GAAA,CACC,SAAU/F,EAAM,mBAChB,KAAMA,EAAM,eACZ,kBAAmBA,EAAM,kBACzB,wBAAyBA,EAAM,wBAC/B,eAAgB,IAAMA,EAAM,eAAeA,EAAM,eAAgB2B,EAAgB,wBAAwB,EACzG,WAAY,CAAC3B,EAAM,oBAAoB2M,GAAoB,sBAAsB,EACjF,eAAe5E,IAAAC,GAAAhI,EAAM,UAAS,SAAf,YAAA+H,GAAA,KAAAC,GAAwB,CAAA,EAI1C,CAAChI,EAAM,cACNS,EAAAA,KAAC,MAAA,CAAI,UAAW,GAAG+L,EAAgC,cAAgB,EAAE,GAClE,SAAA,CAAAD,GACCzM,EAAAA,IAACiD,GAAA,CACC,QAASqJ,EACT,MAAOpM,EAAM,eAAe,KAC5B,SAAU8K,EACV,UAAW,CAAC9K,EAAM,WAClB,cAAeA,EAAM,cACrB,gBAAAuE,EACA,cAAA+F,CAAA,CAAA,EAIJxK,EAAAA,IAAC,MAAA,CAAI,UAAW0M,EAAgC,gBAAkB,GAC/D,SAAArC,EAAQ,IAAI,CAACxH,EAAQV,IAChB+J,EAAWrJ,CAAM,EACZ7C,EAAAA,IAACyC,EAAM,SAAN,CAAA,EAAoBI,EAAO,EAAI,EAGvC7C,EAAAA,IAAC8M,GAAA,CACC,iBAAkBlB,EAAoB,eACtC,kBAAmBjB,EAEnB,GAAI9H,EAAO,GACX,KAAMuJ,EAAiBvJ,EAAQV,CAAG,EAClC,YAAaU,EAAO,YACpB,eAAgB3C,EAAM,eACtB,WAAY2C,EAAO,WACnB,aAAcA,EAAO,SACrB,UAAW3C,EAAM,UACjB,kBAAmBkL,EACnB,WAAYK,EACZ,SAAUvL,EAAM,SAChB,aAAcA,EAAM,aACpB,cAAeA,EAAM,cACrB,uBAAwBA,EAAM,mBAAqB2C,EAAO,GAC1D,YAAa3C,EAAM,YACnB,iBAAkBA,EAAM,iBACxB,SAAU2C,EAAO,SACjB,MAAO3C,EAAM,MACb,mBAAoBwM,EACpB,SAAUxM,EAAM,SAChB,gBAAiB0D,EAAuB,uBAAuB1D,EAAM,SAAS,EAC9E,YAAaiC,EACb,eAAgBjC,EAAM,eACtB,oBAAqBA,EAAM,oBAC3B,aAAcA,EAAM,WACpB,YAAaA,EAAM,YACnB,kCAAmCA,EAAM,kCACzC,6BAA8BA,EAAM,eACpC,SAAUA,EAAM,SAChB,UAAWA,EAAM,WACjB,kCAAmCA,EAAM,kCACzC,iBAAkBA,EAAM,iBACxB,YAAaA,EAAM,YAGnB,gBAAiB,GACjB,YAAa,KACb,kBAAmB,KACnB,eAAgB,IAAA,EAtCX2C,EAAO,EAAA,CAyCjB,CAAA,CACH,EAEC,CAAC,EAACyH,GAAA,MAAAA,EAAW,SACZ3J,EAAAA,KAAAE,EAAAA,SAAA,CACE,SAAA,CAAAb,MAAC+M,IAAa,KAAMhM,EAAgB,UAAUlB,GAAW,QAAQ,EAAG,EACpEG,EAAAA,IAACgN,GAAA,CACC,OAAQ1C,EACR,gBAAiB,CAAC2C,EAAOC,IAAShN,EAAM,SAAS,UAC/C+M,EACA,CAAE,GAAGC,EAAM,UAAW3C,EAAmB,eAAgB2C,EAAK,cAAA,CAAe,EAE/E,eAAgBhN,EAAM,eACtB,sBAAuBA,EAAM,UAC7B,2BAA4BA,EAAM,SAAS,iBAC3C,iBAAkBA,EAAM,gBAAA,CAAA,CAC1B,CAAA,CACF,CAAA,EAEJ,EAGDsL,GACCxL,EAAAA,IAACgB,GAAA,CACC,UAAWd,EAAM,UACjB,WAAYA,EAAM,WAClB,SAAUA,EAAM,cAChB,iBAAkBA,EAAM,SAAS,YAAA,CAAA,EAIpCA,EAAM,eACLF,EAAAA,IAACsD,GAAA,CACC,SAAUpD,EAAM,cAChB,WAAY,IAAMA,EAAM,SAAS,UAAUA,EAAM,eAAe,cAAc,CAAA,CAAA,CAChF,EAEJ,CAEJ,CCrcA,MAAML,GAAY,8BAEX,MAAMsN,WAA2BC,EAAe,CACrD,aAAc,CACZ,MAAM,qBAAsB,CAC9B,CAGA,IAAW,MAAe,CACxB,MAAO,oBACT,CAGA,IAAW,SAAkB,CAC3B,OAAOrM,EAAgB,UAAUlB,GAAW,SAAS,CACvD,CAGA,IAAW,aAAsB,CAC/B,OAAOkB,EAAgB,UAAUlB,GAAW,aAAa,CAC3D,CAGA,IAAW,KAAgB,CACzB,MAAO,CACL,KAAMkB,EAAgB,UAAUlB,GAAW,KAAK,EAChD,QAAS,CACP,YAAawN,GAAY,SACzB,OAAQC,GAAQ,SAAS,kBAAA,CAC3B,CAEJ,CACF,CCjCO,SAASC,IAAqC,CACnD,OACE5M,EAAAA,KAAC,MAAA,CAAI,UAAU,gBACb,SAAA,CAAAX,EAAAA,IAACwN,GAAA,EAAoB,EAErB7M,EAAAA,KAAC,MAAA,CAAI,UAAU,uDACb,SAAA,CAAAX,EAAAA,IAACyN,GAAA,EAAmB,QACnBC,GAAA,CAAA,CAAsB,CAAA,CAAA,CACzB,CAAA,EACF,CAEJ,CCNA,MAAM7N,GAAY,8BACZiB,GAAYC,EAAgB,iBAAiBlB,EAAS,EAErD,SAAS8N,GACdC,EACAvK,EAC0C,CAC1C,MAAO,CACL,GAAGwK,EACH,eAAgBC,GAAKD,EAAmB,eAAeC,GAAKF,EAAgBvK,CAAM,EAClF,wBAAyB,IAAMwK,EAAmB,wBAAwBxK,CAAM,EAChF,SAAU,IAAMwK,EAAmB,eAAeD,EAAgBvK,CAAM,EAGxE,iBAAkB,IAAM,KACxB,OAAQ,IAAM,KACd,eAAgB,IAAM,KACtB,6BAA8B,IAAM,KACpC,SAAU,IAAM,KAChB,OAAQ,IAAM,KACd,aAAc,IAAM,KACpB,yBAA0B,IAAM,KAChC,eAAgB,IAAM,KACtB,WAAY,IAAM,KAClB,OAAQ,IAAM,KACd,eAAgB,IAAM,IAAA,CAE1B,CAQO,SAAS0K,GACdC,EACc,CACd,KAAM,CAAE,eAAAJ,EAAgB,KAAAK,EAAM,SAAAC,CAAA,EAAaF,EAErCG,EAA4B,CAAC,CACjC,KAAMrN,GAAU,UAAU,EAC1B,QAAS,CACP,YAAauM,GAAY,UACzB,OAAQC,GAAQ,UAAU,IAAA,CAC5B,EACC,CACD,KAAMxM,GAAU,yBAAyB,EACzC,QAAS,CACP,YAAauM,GAAY,SACzB,OAAQC,GAAQ,SAAS,kBAAA,CAC3B,CACD,EAED,OAAAW,EAAK,QAAQlM,GAAQ,CACnBoM,EAAY,KAAK,CACf,KAAMpM,EAAK,KACX,QAASmM,EAAS,eAAenM,CAAI,EACrC,OAAQA,EAAK,OAAS6L,EAAe,IAAA,CACtC,CACH,CAAC,EAEMO,CACT,CCtCA,MAAMtO,GAAY,8BACZiB,GAAYC,EAAgB,iBAAiBlB,EAAS,EAOrD,SAASuO,GACdC,EACyC,CACzC,OAAKA,EAGEC,GAAa,KAAKD,EAAa,CAAE,IAAK,cAAe,OAAQ,CAAC,EAF5D,CAAA,CAGX,CAOO,SAASE,GAA6BrO,EAAuD,uBAClG,MAAMsO,EAAkBC,GAAsC,EAExD,CAAE,iBAAAC,CAAA,EAAqBC,GAAA,EAEvBC,EAAS5K,EAA6B6K,GAAe,QAAQ,EAC7DC,EAAc9K,EAAkC+K,GAAa,aAAa,EAC1EC,EAAiBC,GAAA,EAEjBC,EAAelL,EACnBmL,GAAqB,uBAAA,CAAuB,EAGxCvB,EAAiB5J,EACrBoL,GAAuB,eAAelP,EAAM,IAAIgB,EAAA4N,EAAY,OAAZ,YAAA5N,EAAkB,EAAE,CAAA,EAGhE,CAAE,UAAAsC,EAAW,aAAA6L,CAAA,EAAiBC,GAAkB,CACpD,WAAY1D,EAAoB,eAChC,aAAarK,EAAArB,EAAM,cAAN,YAAAqB,EAAmB,YAChC,iBAAkBrB,EAAM,EAAA,CACzB,EAEKgO,EAAWP,GAA0BC,EAAe,KAAM1N,EAAM,WAAW,EAEjFqP,GAAmBC,GAAmB,0BAA0B,CAC9D,QAAS,CAAE,eAAgB5B,EAAe,IAAA,EAC1C,cAAe,CACb,cAAe9M,GACf,YAAa,YACb,kBAAmB,iBAAA,EAErB,cAAe2O,GAAU,iBAAiB,CACxC,cAAevB,EAAS,eAAeN,EAAe,IAAI,CAAA,CAC3D,EACD,cAAe,GACf,QAAS8B,GAAoB,YAAA,CAC9B,CAAC,EAEFC,GAAqB/B,EAAgB,CACnC,SAAUT,EAAA,CACX,EAED,MAAM5D,EAAYvF,EAA6CkL,EAAa,MAC1EU,GAAiB,sBAAsBV,EAAa,KAAK,GAAIW,GAAiB,kBAAkB,CAAC,EAE7F5B,EAAOjK,EACXoL,GAAuB,KAAKlP,EAAM,GAAI2P,GAAiB,kBAAkB,CAAA,EAMrEpM,EAAkBiG,GAAe,6BAA6BH,EAAU,KAAMrJ,EAAM,WAAW,EAC/F4P,GAAoBrM,GAAA,YAAAA,EAAiB,OAASS,EAAE,YAAa,CAAA,EAK7D6L,EAAgB,CACpB,gBAAgB7H,EAAAgH,EAAa,OAAb,YAAAhH,EAAmB,GACnC,kBAAkBD,EAAAiH,EAAa,OAAb,YAAAjH,EAAmB,KACrC,yBAAyBG,EAAAwF,EAAe,OAAf,YAAAxF,EAAqB,GAC9C,2BAA2BD,EAAAyF,EAAe,OAAf,YAAAzF,EAAqB,KAChD,+BAAgC,CAAC,GAACM,GAAAH,GAAAC,EAAAqF,EAAe,OAAf,YAAArF,EAAqB,YAArB,YAAAD,EAAgC,OAAhC,MAAAG,EAAsC,QACxE,oBAAqBhF,GAAA,MAAAA,EAAiB,OAASA,EAAgB,IAAIS,GAAKA,EAAE,IAAI,EAAI,KAClF,kBAAmB4L,EAAkB,OAASA,EAAoB,IAAA,EAIpE,SAASE,GAAqC,CAC5C,MAAO,IAAMjC,GAA6B,CACxC,SAAAG,EACA,eAAgBN,EAAe,KAC/B,KAAMK,EAAK,IAAA,CACZ,CACH,CASA,MAPmB,CAAC,CAACW,EAAO,MACvBpL,EAAU,cACV,CAAC,CAACoK,EAAe,MACjB,CAAC,CAACsB,EAAa,MACf,CAAC,CAACjB,EAAK,MACP,CAAC,CAAC1E,EAAU,KAMfvJ,EAAAA,IAACiQ,GAAoB,SAApB,CAA6B,MAAO,CAAE,gBAAAzB,CAAA,EACrC,SAAA7N,EAAAA,KAAC,MAAA,CAAI,UAAU,oBACZ,SAAA,CAAA,CAAC,EAAE0O,GAAgB7L,EAAU,OAASxD,EAAAA,IAACkQ,GAAA,CAAc,OAAQ1M,EAAU,KAAK,OAAQ,KAAK,OAAA,CAAQ,EAClGxD,EAAAA,IAACoK,GAAA,CACC,UAAW5G,EAAU,KACrB,eAAgBoK,EAAe,KAC/B,wBAAyB3J,GAAkB,uBAC3C,eAAgB+L,EAAA,EAChB,eAAgB,IAAM,GACtB,oBAAqB,IAAM,GAC3B,aAAcd,EAAa,KAC3B,iBAAkB,IAAM,CAAA,EACxB,UAAW3F,EAAU,KACrB,gBAAA9F,EACA,cAAAsM,EACA,YAAanB,EAAO,KAAK,YACzB,kCAAmCuB,GAAU,UAAU,mBACvD,cAAeA,GAAU,YAAY,OAAO,MAC5C,SAAAjC,EACA,aAAAmB,EACA,0BAAyB,GACzB,kBAAmB,GACnB,kBAAmBnP,EAAM,YAAY,MACrC,SAAU,CAACuP,GAAU,MAAA,EACrB,cAAe,GACf,YAAaW,GAAyB,WACtC,2BAA4B,GAC5B,4BAA6B,GAC7B,kCAAmC,GACnC,IAAI,gBACJ,YAAapB,EAEb,iBAAAN,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CACF,QAtCQnB,GAAA,EAAsB,CAwClC"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{j as e,b3 as j,l as r,Y as x,ar as m,d as b,M as N,aK as v,m as f,ah as h,K as y,I as k}from"./app-C56EnOMP.js";function T(n){return e.jsx("svg",{...n,children:e.jsx("path",{d:"M12 13.5a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3m0 5.5a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3m0-11a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3",fill:"currentColor"})})}const C="_dropdownToggle_1jkd1_1",S={dropdownToggle:C};function p(){return e.jsxs(e.Fragment,{children:[e.jsx("div",{style:{padding:"0.53125rem 1rem"},children:e.jsx("div",{className:"partial-loading-background",style:{height:"1.0625rem",width:"8rem"}})}),e.jsx("div",{style:{padding:"0.53125rem 1rem"},children:e.jsx("div",{className:"partial-loading-background",style:{height:"1.0625rem",width:"12rem"}})}),e.jsx("div",{style:{padding:"0.53125rem 1rem"},children:e.jsx("div",{className:"partial-loading-background",style:{height:"1.0625rem",width:"11rem"}})}),e.jsx("div",{style:{padding:"0.53125rem 1rem"},children:e.jsx("div",{className:"partial-loading-background",style:{height:"1.0625rem",width:"9rem"}})})]})}function g(n){let o="dropdown-item";return n&&(o+=` ${n}`),o}function u(n){const o=m.isFunction(n.action.label)?n.action.label():e.jsx(e.Fragment,{children:n.action.label});if(n.action.appLink)return e.jsxs(b,{appLink:n.action.appLink,onClick:n.action.onClick,className:g(n.action.className),analyticsData:n.action.analyticsData,analyticsOptions:n.action.analyticsOptions,openInNewTab:n.action.openInNewTab,disabled:n.action.disabled,children:[n.action.svg&&e.jsx(r,{svg:n.action.svg,className:"d-inline-block svg-container me-2 align-middle"}),e.jsx("span",{className:"align-middle",children:o})]});function l(t){t.preventDefault(),n.action.analyticsData&&n.action.analyticsOptions&&N.logUserAction(n.action.analyticsData,n.action.analyticsOptions),m.isFunction(n.action.onClick)&&n.action.onClick(),n.action.href&&v.PageLoad(n.action.href,n.action.openInNewTab)}return n.action.href?e.jsxs("a",{className:g(n.action.className),onClick:l,href:n.action.href,children:[n.action.svg&&e.jsx(r,{svg:n.action.svg,className:"d-inline-block svg-container me-2 align-middle"}),e.jsx("span",{className:"align-middle",children:o})]}):e.jsxs("span",{className:`cursor-pointer ${g(n.action.className)}`,onClick:l,role:"button",tabIndex:0,onKeyDown:t=>t.key==="Enter"&&l(t),children:[n.action.svg&&e.jsx(r,{svg:n.action.svg,className:"d-inline-block svg-container me-2"}),o]})}w.defaultProps={dropdownToggleClassName:"btn btn-light",dropdownToggleSvgSize:f.Small};function w(n){if(!n.actions||!n.actions.length)return e.jsx(e.Fragment,{});const o=n.actions.some(i=>i.lazyPlaceholder);let l="dropdown";n.className&&(l+=` ${n.className}`);const t=`actions-dropdown-${j.getRandomInt()}`;let s=`dropdown-toggle px-0 ${S.dropdownToggle}`;n.dropdownToggleClassName&&(s+=` ${n.dropdownToggleClassName}`);let a;return e.jsxs("div",{className:l,children:[e.jsx("button",{className:s,type:"button",id:t,"data-bs-toggle":"dropdown","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false","aria-label":"More actions dropdown",onClick:o?n.fetchMore:null,children:e.jsx(r,{svg:T,size:n.dropdownToggleSvgSize})}),e.jsx("ul",{className:"dropdown-menu dropdown-menu-end dropdown-menu-right font-size-normal","aria-labelledby":t,children:o?e.jsx(p,{}):n.actions.map((i,c)=>{const d=a!==void 0&&a!==i.group;return a=i.group,i.tooltip?e.jsxs("li",{children:[d&&e.jsx("hr",{className:"dropdown-divider",role:"separator"}),e.jsx(x,{title:i.tooltip,spanHack:!0,children:e.jsx(u,{action:i})})]},c):e.jsxs("li",{children:[d&&e.jsx("hr",{className:"dropdown-divider",role:"separator"}),e.jsx(u,{action:i})]},c)})})]})}function I(n){const o=h.useMemo(()=>n.actions.sort((a,i)=>a.order-i.order),[n.actions]),l=[],t=[];o.forEach(a=>{a.button?l.push(a):t.push(a)});let s="d-flex";return n.className&&(s+=` ${n.className}`),!l.length&&!t.length?e.jsx(e.Fragment,{}):e.jsxs("div",{className:s,children:[l.length?l.map((a,i)=>e.jsx(h.Fragment,{children:(()=>{if(a.label){const d=m.isFunction(a.label)?a.label():e.jsx(e.Fragment,{children:a.label});return e.jsx(y,{appLink:a.appLink,href:a.href,onClick:a.onClick,svg:a.svg,svgSize:n.dropdownToggleSvgSize,className:a.className,tooltip:a.tooltip,showSpinner:a.showSpinner,analyticsData:a.analyticsData,analyticsOptions:a.analyticsOptions,openInNewTab:a.openInNewTab,disabled:a.disabled,children:d})}const c=e.jsx(k,{appLink:a.appLink,href:a.href,onClick:a.onClick,svg:a.svg,className:a.className,analyticsData:a.analyticsData,analyticsOptions:a.analyticsOptions,openInNewTab:a.openInNewTab,disabled:a.disabled,showBorder:a.showBorder,customSize:n.customSize,ariaLabel:a.tooltip});return a.tooltip?e.jsx(x,{title:a.tooltip,spanHack:!0,children:c}):c})()},i)):e.jsx(e.Fragment,{}),n.sortComponent&&n.sortComponent,t.length?e.jsx(w,{actions:t,dropdownToggleClassName:n.actionsDropdownClassName,dropdownToggleSvgSize:n.dropdownToggleSvgSize,fetchMore:n.fetchMore}):e.jsx(e.Fragment,{})]})}export{I as A};
|
|
2
|
-
//# sourceMappingURL=Bl1HvG0b.chunk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Bl1HvG0b.chunk.js","sources":["../../../../libs/shared/src/images/svg/actions/MoreSvg.tsx","../../../../libs/shared/src/components/actions/ActionsDropdown.tsx","../../../../libs/shared/src/components/actions/Actions.tsx"],"sourcesContent":["import React from 'react';\n\nexport function MoreSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n d='M12 13.5a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3m0 5.5a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3m0-11a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import * as React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Core } from 'libs/common/core';\nimport { RandomHelper } from 'libs/common/react/utils/RandomHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { MoreSvg } from 'libs/shared/images/svg/actions/MoreSvg';\n\nimport { ActionOptions } from './Actions';\n\nimport styles from './actions.module.scss';\n\nfunction LazyDropdownItems(): JSX.Element {\n return (\n <>\n <div style={{ padding: '0.53125rem 1rem' }}>\n <div className='partial-loading-background' style={{ height: '1.0625rem', width: '8rem' }}></div>\n </div>\n <div style={{ padding: '0.53125rem 1rem' }}>\n <div className='partial-loading-background' style={{ height: '1.0625rem', width: '12rem' }}></div>\n </div>\n <div style={{ padding: '0.53125rem 1rem' }}>\n <div className='partial-loading-background' style={{ height: '1.0625rem', width: '11rem' }}></div>\n </div>\n <div style={{ padding: '0.53125rem 1rem' }}>\n <div className='partial-loading-background' style={{ height: '1.0625rem', width: '9rem' }}></div>\n </div>\n </>\n );\n}\n\nfunction getDropdownItemClassName(actionClassName?: string): string {\n let className = 'dropdown-item';\n\n if (actionClassName)\n className += ` ${actionClassName}`;\n\n return className;\n}\n\nexport type DropdownActionOptions = Omit<ActionOptions, 'button'>;\n\ninterface ActionsDropdownItemProps {\n action: DropdownActionOptions;\n}\n\nfunction ActionsDropdownItem(props: ActionsDropdownItemProps): React.ReactElement {\n const label = FunctionHelper.isFunction(props.action.label)\n ? props.action.label()\n : <>{props.action.label}</>;\n\n if (props.action.appLink)\n return (\n <AppLink\n appLink={props.action.appLink}\n onClick={props.action.onClick}\n className={getDropdownItemClassName(props.action.className)}\n analyticsData={props.action.analyticsData}\n analyticsOptions={props.action.analyticsOptions}\n openInNewTab={props.action.openInNewTab}\n disabled={props.action.disabled}\n >\n {props.action.svg && <SvgContainer svg={props.action.svg} className='d-inline-block svg-container me-2 align-middle' />}\n <span className='align-middle'>{label}</span>\n </AppLink>\n );\n\n function onClick(e: React.MouseEvent | React.KeyboardEvent): void {\n e.preventDefault();\n\n if (props.action.analyticsData && props.action.analyticsOptions)\n AnalyticsHelper.logUserAction(props.action.analyticsData, props.action.analyticsOptions);\n\n if (FunctionHelper.isFunction(props.action.onClick))\n props.action.onClick();\n\n if (props.action.href)\n Core.LocationUtils.PageLoad(props.action.href, props.action.openInNewTab);\n }\n\n if (props.action.href) {\n return (\n <a\n className={getDropdownItemClassName(props.action.className)}\n onClick={onClick}\n href={props.action.href}\n >\n {props.action.svg && <SvgContainer svg={props.action.svg} className='d-inline-block svg-container me-2 align-middle' />}\n <span className='align-middle'>{label}</span>\n </a>\n );\n }\n\n return (\n <span\n className={`cursor-pointer ${getDropdownItemClassName(props.action.className)}`}\n onClick={onClick}\n role='button'\n tabIndex={0}\n onKeyDown={(e: React.KeyboardEvent) => e.key === 'Enter' && onClick(e)}\n >\n {props.action.svg && <SvgContainer svg={props.action.svg} className='d-inline-block svg-container me-2' />}\n {label}\n </span>\n );\n}\n\ninterface ActionsDropdownProps {\n actions: DropdownActionOptions[];\n className?: string;\n dropdownToggleClassName?: string;\n dropdownToggleSvgSize?: SvgContainerSize;\n fetchMore?: () => void;\n}\n\nActionsDropdown.defaultProps = {\n dropdownToggleClassName: 'btn btn-light',\n dropdownToggleSvgSize: SvgContainerSize.Small\n};\n\nexport function ActionsDropdown(props: ActionsDropdownProps): React.ReactElement {\n if (!props.actions || !props.actions.length)\n return <></>;\n\n const isLazy = props.actions.some(a => a.lazyPlaceholder);\n\n let className = 'dropdown';\n\n if (props.className)\n className += ` ${props.className}`;\n\n // Generate unique id to avoid collisions.\n const dropdownToggleId = `actions-dropdown-${RandomHelper.getRandomInt()}`;\n\n let dropdownToggleClassName = `dropdown-toggle px-0 ${styles.dropdownToggle}`;\n\n if (props.dropdownToggleClassName)\n dropdownToggleClassName += ` ${props.dropdownToggleClassName}`;\n\n let currentGroup: string;\n\n return (\n <div className={className}>\n <button\n className={dropdownToggleClassName}\n type='button'\n id={dropdownToggleId}\n data-bs-toggle='dropdown'\n data-toggle='dropdown'\n aria-haspopup='true'\n aria-expanded='false'\n aria-label={'More actions dropdown'}\n onClick={isLazy ? props.fetchMore : null}\n >\n <SvgContainer svg={MoreSvg} size={props.dropdownToggleSvgSize} />\n </button>\n <ul className='dropdown-menu dropdown-menu-end dropdown-menu-right font-size-normal' aria-labelledby={dropdownToggleId}>\n {isLazy ?\n <LazyDropdownItems /> :\n props.actions.map((a, idx) => {\n const showDivider = currentGroup !== undefined && currentGroup !== a.group;\n currentGroup = a.group;\n \n if (a.tooltip) {\n return (\n <li key={idx}>\n {showDivider && <hr className='dropdown-divider' role='separator'></hr>}\n <Tooltip title={a.tooltip} spanHack>\n <ActionsDropdownItem action={a} />\n </Tooltip>\n \n </li>\n );\n }\n \n return (\n <li key={idx}>\n {showDivider && <hr className='dropdown-divider' role='separator'></hr>}\n <ActionsDropdownItem action={a} />\n </li>\n );\n })\n }\n </ul>\n </div>\n );\n}","import * as React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { BaseObject } from 'libs/shared/interfaces';\nimport { SvgIcon } from 'libs/shared/utils/SvgHelper';\n\nimport { ActionButton } from './ActionButton';\nimport { ActionsDropdown } from './ActionsDropdown';\n\nexport interface ActionOptions {\n order?: number;\n label?: string | (() => JSX.Element);\n appLink?: Core.AppLink;\n href?: string;\n onClick?: () => void;\n svg?: SvgIcon;\n className?: string;\n button?: boolean; // If true, a button will be rendered. Otherwise the action will be rendered in the dropdown.\n tooltip?: string;\n showSpinner?: boolean;\n showBorder?: boolean; // only works for button without text label\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n disabled?: boolean;\n openInNewTab?: boolean; // Only used if appLink or href is provided\n group?: string;\n lazyPlaceholder?: boolean;\n}\n\nexport type ActionGenerator = (obj: BaseObject) => ActionOptions[];\n\ninterface ActionsProps {\n actions: ActionOptions[];\n className?: string;\n actionsDropdownClassName?: string;\n dropdownToggleSvgSize?: SvgContainerSize;\n sortComponent?: JSX.Element;\n customSize?: boolean;\n fetchMore?: () => void;\n}\n\nexport function Actions(props: ActionsProps): JSX.Element {\n const orderedActions = React.useMemo(() => props.actions.sort((a, b) => a.order - b.order), [props.actions]);\n\n const buttonActions: ActionOptions[] = [];\n const moreActions: ActionOptions[] = [];\n\n orderedActions.forEach(a => {\n if (a.button)\n buttonActions.push(a);\n else\n moreActions.push(a);\n });\n\n let className = 'd-flex';\n\n if (props.className)\n className += ` ${props.className}`;\n\n if (!buttonActions.length && !moreActions.length)\n return <></>;\n\n return (\n <div className={className}>\n {buttonActions.length ? buttonActions.map((a, idx) => (\n <React.Fragment key={idx}>\n {(() => {\n if (a.label) {\n const label: JSX.Element = FunctionHelper.isFunction(a.label)\n ? a.label()\n : <>{a.label}</>;\n\n return (\n <ActionButton\n appLink={a.appLink}\n href={a.href}\n onClick={a.onClick}\n svg={a.svg}\n svgSize={props.dropdownToggleSvgSize}\n className={a.className}\n tooltip={a.tooltip}\n showSpinner={a.showSpinner}\n analyticsData={a.analyticsData}\n analyticsOptions={a.analyticsOptions}\n openInNewTab={a.openInNewTab}\n disabled={a.disabled}\n >\n {label}\n </ActionButton>\n );\n }\n\n const iconButton = (\n <IconButton\n appLink={a.appLink}\n href={a.href}\n onClick={a.onClick}\n svg={a.svg}\n className={a.className}\n analyticsData={a.analyticsData}\n analyticsOptions={a.analyticsOptions}\n openInNewTab={a.openInNewTab}\n disabled={a.disabled}\n showBorder={a.showBorder}\n customSize={props.customSize}\n ariaLabel={a.tooltip}\n />\n );\n\n return a.tooltip\n ? <Tooltip title={a.tooltip} spanHack>{iconButton}</Tooltip>\n : iconButton;\n })()}\n </React.Fragment>\n )) : <></>}\n {props.sortComponent && props.sortComponent}\n {moreActions.length ? (\n <ActionsDropdown\n actions={moreActions}\n dropdownToggleClassName={props.actionsDropdownClassName}\n dropdownToggleSvgSize={props.dropdownToggleSvgSize}\n fetchMore={props.fetchMore}\n />\n ) : <></>}\n </div>\n );\n}"],"names":["MoreSvg","props","jsx","LazyDropdownItems","jsxs","Fragment","getDropdownItemClassName","actionClassName","className","ActionsDropdownItem","label","FunctionHelper","AppLink","SvgContainer","onClick","e","AnalyticsHelper","Core.LocationUtils","ActionsDropdown","SvgContainerSize","isLazy","a","dropdownToggleId","RandomHelper","dropdownToggleClassName","styles","currentGroup","idx","showDivider","Tooltip","Actions","orderedActions","React.useMemo","b","buttonActions","moreActions","React.Fragment","ActionButton","iconButton","IconButton"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{bX as p,c as j,j as a,d as z,l as A,m as P,ah as g,cB as M,D as r,bx as H,z as C,ba as x,T as W,F as N,u as U}from"./app-C56EnOMP.js";import{C as R}from"./Bj3i6I7i.chunk.js";import{G}from"./BwOoIPmc.chunk.js";import{A as O}from"./Bl1HvG0b.chunk.js";import{C as Y}from"./-cwk-1Iv.chunk.js";import{L as F}from"./B5OOLcT3.chunk.js";import{g as X,B as q}from"./BBnDr_iy.chunk.js";import{I as $}from"./CgJckl-g.chunk.js";const w={renderInPortalIfExists(e,t){return t?p.createPortal(e,t):e}},B="shared.backButton";v.defaultProps={color:"black",extraClasses:""};function v(e){const{backToName:t,appLink:i,color:l,extraClasses:d,textShadow:u}={textShadow:!0,...e},m=t?j.getPhrase(B,"backTo",{backToName:t}):j.getPhrase(B,"back"),n=l==="black"?"":"text-white",c=u?"text-shadow":"";return a.jsxs(z,{appLink:i,className:`d-inline-flex align-items-center h5 mb-0 ${d} ${n} ${c}`,children:[a.jsx(A,{svg:Y,size:P.Medium}),a.jsx("span",{className:"ms-1",children:m})]})}const J="_bannerContent_168u8_1",K="_actionsContainer_168u8_9",Q="_bannerContentWithLogo_168u8_18",V="_container_168u8_22",Z="_logoContainer_168u8_26",ee="_logoContainerLeft_168u8_37",ae="_specialEventContainer_168u8_44",ne="_headingLarge_168u8_68",te="_heading_168u8_68",s={bannerContent:J,actionsContainer:K,bannerContentWithLogo:Q,container:V,logoContainer:Z,logoContainerLeft:ee,specialEventContainer:ae,headingLarge:ne,heading:te},oe=`${$[x.Banners].width}:${$[x.Banners].height}`,se=1200,re=1920;function ie(){return U().xxl?re:se}function le(e){return e.length<160?"h1":s.headingLarge}const ce="shared.bannerHeader",be=g.memo(function(e){var D,L,_,k;const{heading:t,banner:i,imageCdnUrl:l,actions:d,sortComponent:u,blockColourClass:m,specialEvent:n}=e,c=g.useContext(M),y=ie(),S=g.useMemo(()=>{if(!n||e.showComingSoon)return!1;const o=r.format(new Date,"YYYY-MM-DD");return n.endDate?n.startDate<=o&&n.endDate>=o:n.startDate===o},[n]);function I(o){return o.endDate?r.isSame(o.startDate,o.endDate,"month")?r.format(o.startDate,"MMMM"):`${r.format(o.startDate,"MMM")} - ${r.format(o.endDate,"MMM")}`:r.format(o.startDate,"MMMM")}const T=e.imageOptions||{width:y,ratio:oe,resizeType:H.Cover},f=!!i&&!!l&&C.createBannerUrl(i,{fallbackBaseUrl:l,fallbackCategoryName:t,type:x.Banners},T),h={className:`banner banner-header ${e.bannerClassName}`,style:f?{backgroundImage:`url('${f}')`}:{}};!i&&m&&(delete h.style,h.className+=` ${m}`);const b=e.detailsComponent,E=X(e.heading,q);return w.renderInPortalIfExists(a.jsx("header",{...h,children:a.jsxs("div",{className:`container ${s.container} position-relative inner-banner`,children:[e.backButtonAppLink&&a.jsx("div",{className:"pt-3",children:a.jsx(v,{appLink:e.backButtonAppLink,backToName:e.backButtonText,extraClasses:e.backButtonClasses,color:"white"})}),a.jsxs("div",{className:`${e.alignLogoLeft?"position-absolute top-50 start-0 translate-middle-y w-100 ps-4":`${s.bannerContent} px-2 ${(D=e.logo)!=null&&D.url?s.bannerContentWithLogo:""}`}`,children:[!!n&&a.jsx("div",{className:`position-relative ${s.specialEventContainer}`,children:a.jsx(G,{body:{type:n.endDate?"range":"day",text:n.endDate?`${r.format(n.startDate,"DD")}-${r.format(n.endDate,"DD")}`:r.format(n.startDate,"DD")},month:I(n),theme:e.calendarTheme})}),a.jsxs("div",{children:[S&&a.jsx("div",{className:"rounded-pill py-1 px-2 my-1 me-1 fw-semibold bg-light-blue lh-1 d-inline-block",children:a.jsx(W,{namespace:ce,phrase:"onToday"})}),e.showComingSoon&&a.jsx(R,{className:"pe-2 fw-semibold mb-1 rounded-pill justify-content-start text-nowrap"}),a.jsxs("div",{className:"d-flex align-items-center",children:[e.alignLogoLeft&&((L=e.logo)==null?void 0:L.url)&&a.jsx("div",{className:`${s.logoContainerLeft} d-none d-md-block rounded-circle overflow-hidden me-3 ${E}`,children:a.jsx(F,{src:C.createUrl((_=e.logo)==null?void 0:_.url,{size:N.Medium}),style:{backgroundColor:e.logoBgColour}})}),a.jsxs("h1",{className:`text-white text-shadow pe-3 position-static ${s.heading} ${le(t)} ${e.alignLogoLeft?"w-50":""}`,children:[t,b&&a.jsx(b,{})]})]})]}),!!d&&a.jsx("div",{className:s.actionsContainer,children:a.jsx(O,{actions:d,sortComponent:u,actionsDropdownClassName:e.actionsDropdownClassName})})]}),!e.alignLogoLeft&&!!((k=e.logo)!=null&&k.url)&&a.jsx("div",{className:s.logoContainer,children:a.jsx("img",{src:C.createUrl(e.logo.url,{size:N.Medium}),className:"rounded-circle"})})]})}),c==null?void 0:c.container)},(e,t)=>{var i,l;return e.actions===t.actions&&e.heading===t.heading&&((i=e.logo)==null?void 0:i.url)===((l=t.logo)==null?void 0:l.url)});function De(){const e=g.useContext(M);return w.renderInPortalIfExists(a.jsx("div",{className:`partial-banner partial-loading-background ${s.banner}`}),e==null?void 0:e.container)}export{be as B,De as P};
|
|
2
|
-
//# sourceMappingURL=BnWlQ7-4.chunk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BnWlQ7-4.chunk.js","sources":["../../../../libs/common/src/react/utils/PortalHelper.ts","../../../../libs/shared/src/components/back-button/BackButton.tsx","../../../../libs/shared/src/components/banner-header/BannerHeader.tsx"],"sourcesContent":["import React from 'react';\nimport { createPortal } from 'react-dom';\n\nexport const PortalHelper = {\n renderInPortalIfExists(component: React.ReactElement, portalContainer: Element | null): React.ReactElement {\n if (portalContainer)\n return createPortal(component, portalContainer);\n\n return component;\n }\n};","import * as 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';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { ChevronLeftSvg } from 'libs/shared/images/svg/arrows/ChevronLeftSvg';\n\n\nconst namespace = 'shared.backButton';\n\ninterface BackButtonProps {\n appLink: Core.AppLink;\n backToName?: string;\n color?: 'black' | 'white';\n extraClasses?: string;\n /**\n * Whether or not the button text has a text shadow. Defaults to true\n */\n textShadow?: boolean;\n}\n\nBackButton.defaultProps = {\n color: 'black',\n extraClasses: ''\n};\n\nexport function BackButton(props: BackButtonProps): React.ReactElement {\n const { backToName, appLink, color, extraClasses, textShadow } = {\n textShadow: true,\n ...props\n };\n\n const backPhrase = backToName\n ? LanguageService.getPhrase(namespace, 'backTo', { backToName })\n : LanguageService.getPhrase(namespace, 'back');\n\n const colorClass = color === 'black' ? '' : 'text-white';\n const textShadowClass = textShadow ? 'text-shadow' : '';\n\n return (\n <AppLink\n appLink={appLink}\n className={`d-inline-flex align-items-center h5 mb-0 ${extraClasses} ${colorClass} ${textShadowClass}`}\n >\n <SvgContainer svg={ChevronLeftSvg} size={SvgContainerSize.Medium} />\n <span className='ms-1'>{backPhrase}</span>\n </AppLink>\n );\n}","import * as React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\nimport { PortalHelper } from 'libs/common/react/utils/PortalHelper';\n\nimport { ComingSoonTag } from 'libs/shared/apps/calendar/components/coming-soon-tag/ComingSoonTag';\nimport { GenericCalendarDate } from 'libs/shared/apps/calendar/components/generic-calendar-date/GenericCalendarDate';\nimport { CalendarTheme } from 'libs/shared/apps/calendar/interfaces/CalendarTheme';\nimport { ActionOptions, Actions } from 'libs/shared/components/actions/Actions';\nimport { BackButton } from 'libs/shared/components/back-button/BackButton';\nimport { LazyImage } from 'libs/shared/components/lazy-image/LazyImage';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { BG_COLOUR_CLASS_NAMES } from 'libs/shared/constants/ColourClassNames';\nimport { ImageMinDimensions } from 'libs/shared/constants/ImageSizes';\nimport { BannerPortalContext } from 'libs/shared/context/BannerPortalContext';\nimport { ImageSize, ImageType, ResizeType } from 'libs/shared/enums/Images';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Banner, CalendarEvent, Logo } from 'libs/shared/interfaces';\nimport { getBgColorClass } from 'libs/shared/utils/getBgColorClass';\nimport { ImageHelper, ImageOptions } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './banner-header.module.scss';\n\nconst RATIO = `${ImageMinDimensions[ImageType.Banners].width}:${ImageMinDimensions[ImageType.Banners].height}`;\nconst DEFAULT_WIDTH = 1200; // This is ImageSize.Large for a Banner.\nconst LARGE_SCREEN_WIDTH = 1920;\n\nfunction useGetImageWidth(): number {\n const breakpoints = useBreakpoints();\n\n if (breakpoints.xxl)\n return LARGE_SCREEN_WIDTH;\n\n return DEFAULT_WIDTH;\n}\n\nfunction getSizeClass(heading: string): string {\n if (heading.length < 160)\n return 'h1';\n\n return styles.headingLarge;\n}\n\ninterface BannerHeaderProps {\n heading: string;\n banner?: Banner;\n bannerClassName?: string;\n imageCdnUrl?: string;\n logo?: Logo;\n logoBgColour?: string;\n actions?: ActionOptions[];\n specialEvent?: CalendarEvent;\n backButtonAppLink?: Core.AppLink;\n backButtonText?: string;\n backButtonClasses?: string;\n sortComponent?: JSX.Element;\n blockColourClass?: string;\n actionsDropdownClassName?: string;\n detailsComponent?: () => React.ReactElement;\n imageOptions?: ImageOptions;\n showComingSoon?: boolean;\n alignLogoLeft?: boolean;\n calendarTheme?: CalendarTheme;\n}\n\nconst namespace = 'shared.bannerHeader';\n\nexport const BannerHeader = React.memo(function(props: React.PropsWithChildren<BannerHeaderProps>): React.ReactElement {\n const { heading, banner, imageCdnUrl, actions, sortComponent, blockColourClass, specialEvent } = props;\n\n const portalContainerContext = React.useContext(BannerPortalContext);\n\n const imageWidth = useGetImageWidth();\n\n const specialEventIsToday = React.useMemo(() => {\n if (!specialEvent || props.showComingSoon)\n return false;\n\n const today = DateHelper.format(new Date(), 'YYYY-MM-DD');\n\n if (!specialEvent.endDate)\n return specialEvent.startDate === today;\n\n return specialEvent.startDate <= today && specialEvent.endDate >= today;\n }, [specialEvent]);\n\n function getSpecialEventMonthText(specialEvent: CalendarEvent): string {\n if (!specialEvent.endDate)\n return DateHelper.format(specialEvent.startDate, 'MMMM');\n\n if (DateHelper.isSame(specialEvent.startDate, specialEvent.endDate, 'month'))\n return DateHelper.format(specialEvent.startDate, 'MMMM');\n\n return `${DateHelper.format(specialEvent.startDate, 'MMM')} - ${DateHelper.format(specialEvent.endDate, 'MMM')}`;\n }\n\n const imageOptions = props.imageOptions || {\n width: imageWidth,\n ratio: RATIO,\n resizeType: ResizeType.Cover\n };\n\n const url = !!banner && !!imageCdnUrl && ImageHelper.createBannerUrl(banner, {\n fallbackBaseUrl: imageCdnUrl,\n fallbackCategoryName: heading,\n type: ImageType.Banners\n }, imageOptions);\n\n const containerProps: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> = {\n className: `banner banner-header ${props.bannerClassName}`,\n style: url ? { backgroundImage: `url('${url}')` } : {}\n };\n\n if (!banner && blockColourClass) {\n delete containerProps.style;\n containerProps.className += ` ${blockColourClass}`;\n }\n\n const DetailsComponent = props.detailsComponent;\n\n const logoFallbackBgClassName = getBgColorClass(props.heading, BG_COLOUR_CLASS_NAMES);\n\n return PortalHelper.renderInPortalIfExists(\n // \"banner\" is used in playlists in Online. banner-header is used by all other projects\n <header {...containerProps}>\n <div className={`container ${styles.container} position-relative inner-banner`}>\n {props.backButtonAppLink && (\n <div className='pt-3'>\n <BackButton\n appLink={props.backButtonAppLink}\n backToName={props.backButtonText}\n extraClasses={props.backButtonClasses}\n color='white'\n />\n </div>\n )}\n \n <div className={`${props.alignLogoLeft ? 'position-absolute top-50 start-0 translate-middle-y w-100 ps-4' : `${styles.bannerContent} px-2 ${props.logo?.url ? styles.bannerContentWithLogo : ''}`}`}>\n {!!specialEvent && (\n <div className={`position-relative ${styles.specialEventContainer}`}>\n <GenericCalendarDate\n body={{\n type: specialEvent.endDate ? 'range' : 'day',\n text: specialEvent.endDate\n ? `${DateHelper.format(specialEvent.startDate, 'DD')}-${DateHelper.format(specialEvent.endDate, 'DD')}`\n : DateHelper.format(specialEvent.startDate, 'DD')\n }}\n month={getSpecialEventMonthText(specialEvent)}\n theme={props.calendarTheme}\n />\n </div>\n )}\n <div>\n {specialEventIsToday && (\n <div className='rounded-pill py-1 px-2 my-1 me-1 fw-semibold bg-light-blue lh-1 d-inline-block'>\n <Text namespace={namespace} phrase='onToday' />\n </div>\n )}\n {props.showComingSoon && (\n <ComingSoonTag className='pe-2 fw-semibold mb-1 rounded-pill justify-content-start text-nowrap' />\n )}\n <div className='d-flex align-items-center'>\n {props.alignLogoLeft && props.logo?.url &&\n <div className={`${styles.logoContainerLeft} d-none d-md-block rounded-circle overflow-hidden me-3 ${logoFallbackBgClassName}`}>\n <LazyImage\n src={ImageHelper.createUrl(props.logo?.url, { size: ImageSize.Medium })}\n style={{ backgroundColor: props.logoBgColour }}\n />\n </div>\n }\n <h1 className={`text-white text-shadow pe-3 position-static ${styles.heading} ${getSizeClass(heading)} ${props.alignLogoLeft ? 'w-50' : ''}`}>\n {heading}\n {DetailsComponent && <DetailsComponent />}\n </h1>\n </div>\n </div>\n {!!actions && (\n <div className={styles.actionsContainer}>\n <Actions\n actions={actions}\n sortComponent={sortComponent}\n actionsDropdownClassName={props.actionsDropdownClassName}\n />\n </div>\n )}\n </div>\n {!props.alignLogoLeft && !!props.logo?.url &&\n <div className={styles.logoContainer}>\n <img\n src={ImageHelper.createUrl(props.logo.url, { size: ImageSize.Medium })}\n className='rounded-circle'\n />\n </div>\n }\n </div>\n </header>,\n portalContainerContext?.container\n );\n}, (prevProps, nextProps): boolean => (\n prevProps.actions === nextProps.actions\n && prevProps.heading === nextProps.heading\n && prevProps.logo?.url === nextProps.logo?.url\n));\n\nexport function PartialBannerHeader(): JSX.Element {\n const portalContainerContext = React.useContext(BannerPortalContext);\n\n return PortalHelper.renderInPortalIfExists(\n <div className={`partial-banner partial-loading-background ${styles.banner}`} />,\n portalContainerContext?.container\n );\n}"],"names":["PortalHelper","component","portalContainer","createPortal","namespace","BackButton","props","backToName","appLink","color","extraClasses","textShadow","backPhrase","LanguageService","colorClass","textShadowClass","jsxs","AppLink","jsx","SvgContainer","ChevronLeftSvg","SvgContainerSize","RATIO","ImageMinDimensions","ImageType","DEFAULT_WIDTH","LARGE_SCREEN_WIDTH","useGetImageWidth","useBreakpoints","getSizeClass","heading","styles","BannerHeader","React.memo","banner","imageCdnUrl","actions","sortComponent","blockColourClass","specialEvent","portalContainerContext","React.useContext","BannerPortalContext","imageWidth","specialEventIsToday","React.useMemo","today","DateHelper","getSpecialEventMonthText","imageOptions","ResizeType","url","ImageHelper","containerProps","DetailsComponent","logoFallbackBgClassName","getBgColorClass","BG_COLOUR_CLASS_NAMES","_a","GenericCalendarDate","Text","ComingSoonTag","_b","LazyImage","_c","ImageSize","Actions","_d","prevProps","nextProps","PartialBannerHeader"],"mappings":"uaAGO,MAAMA,EAAe,CAC1B,uBAAuBC,EAA+BC,EAAqD,CACzG,OAAIA,EACKC,EAAAA,aAAaF,EAAWC,CAAe,EAEzCD,CACT,CACF,ECAMG,EAAY,oBAalBC,EAAW,aAAe,CACxB,MAAO,QACP,aAAc,EAChB,EAEO,SAASA,EAAWC,EAA4C,CACrE,KAAM,CAAE,WAAAC,EAAY,QAAAC,EAAS,MAAAC,EAAO,aAAAC,EAAc,WAAAC,GAAe,CAC/D,WAAY,GACZ,GAAGL,CAAA,EAGCM,EAAaL,EACfM,EAAgB,UAAUT,EAAW,SAAU,CAAE,WAAAG,CAAA,CAAY,EAC7DM,EAAgB,UAAUT,EAAW,MAAM,EAEzCU,EAAaL,IAAU,QAAU,GAAK,aACtCM,EAAkBJ,EAAa,cAAgB,GAErD,OACEK,EAAAA,KAACC,EAAA,CACC,QAAAT,EACA,UAAW,4CAA4CE,CAAY,IAAII,CAAU,IAAIC,CAAe,GAEpG,SAAA,CAAAG,EAAAA,IAACC,EAAA,CAAa,IAAKC,EAAgB,KAAMC,EAAiB,OAAQ,EAClEH,EAAAA,IAAC,OAAA,CAAK,UAAU,OAAQ,SAAAN,CAAA,CAAW,CAAA,CAAA,CAAA,CAGzC,qbC1BMU,GAAQ,GAAGC,EAAmBC,EAAU,OAAO,EAAE,KAAK,IAAID,EAAmBC,EAAU,OAAO,EAAE,MAAM,GACtGC,GAAgB,KAChBC,GAAqB,KAE3B,SAASC,IAA2B,CAGlC,OAFoBC,EAAA,EAEJ,IACPF,GAEFD,EACT,CAEA,SAASI,GAAaC,EAAyB,CAC7C,OAAIA,EAAQ,OAAS,IACZ,KAEFC,EAAO,YAChB,CAwBA,MAAM3B,GAAY,sBAEL4B,GAAeC,EAAAA,KAAW,SAAS3B,EAAuE,aACrH,KAAM,CAAE,QAAAwB,EAAS,OAAAI,EAAQ,YAAAC,EAAa,QAAAC,EAAS,cAAAC,EAAe,iBAAAC,EAAkB,aAAAC,GAAiBjC,EAE3FkC,EAAyBC,EAAAA,WAAiBC,CAAmB,EAE7DC,EAAahB,GAAA,EAEbiB,EAAsBC,EAAAA,QAAc,IAAM,CAC9C,GAAI,CAACN,GAAgBjC,EAAM,eACzB,MAAO,GAET,MAAMwC,EAAQC,EAAW,OAAO,IAAI,KAAQ,YAAY,EAExD,OAAKR,EAAa,QAGXA,EAAa,WAAaO,GAASP,EAAa,SAAWO,EAFzDP,EAAa,YAAcO,CAGtC,EAAG,CAACP,CAAY,CAAC,EAEjB,SAASS,EAAyBT,EAAqC,CACrE,OAAKA,EAAa,QAGdQ,EAAW,OAAOR,EAAa,UAAWA,EAAa,QAAS,OAAO,EAClEQ,EAAW,OAAOR,EAAa,UAAW,MAAM,EAElD,GAAGQ,EAAW,OAAOR,EAAa,UAAW,KAAK,CAAC,MAAMQ,EAAW,OAAOR,EAAa,QAAS,KAAK,CAAC,GALrGQ,EAAW,OAAOR,EAAa,UAAW,MAAM,CAM3D,CAEA,MAAMU,EAAe3C,EAAM,cAAgB,CACzC,MAAOqC,EACP,MAAOrB,GACP,WAAY4B,EAAW,KAAA,EAGnBC,EAAM,CAAC,CAACjB,GAAU,CAAC,CAACC,GAAeiB,EAAY,gBAAgBlB,EAAQ,CAC3E,gBAAiBC,EACjB,qBAAsBL,EACtB,KAAMN,EAAU,OAAA,EACfyB,CAAY,EAETI,EAAgG,CACpG,UAAW,wBAAwB/C,EAAM,eAAe,GACxD,MAAO6C,EAAM,CAAE,gBAAiB,QAAQA,CAAG,MAAS,CAAA,CAAC,EAGnD,CAACjB,GAAUI,IACb,OAAOe,EAAe,MACtBA,EAAe,WAAa,IAAIf,CAAgB,IAGlD,MAAMgB,EAAmBhD,EAAM,iBAEzBiD,EAA0BC,EAAgBlD,EAAM,QAASmD,CAAqB,EAEpF,OAAOzD,EAAa,uBAElBkB,EAAAA,IAAC,SAAA,CAAQ,GAAGmC,EACV,SAAArC,EAAAA,KAAC,OAAI,UAAW,aAAae,EAAO,SAAS,kCAC1C,SAAA,CAAAzB,EAAM,mBACLY,MAAC,MAAA,CAAI,UAAU,OACb,SAAAA,EAAAA,IAACb,EAAA,CACC,QAASC,EAAM,kBACf,WAAYA,EAAM,eAClB,aAAcA,EAAM,kBACpB,MAAM,OAAA,CAAA,EAEV,SAGD,MAAA,CAAI,UAAW,GAAGA,EAAM,cAAgB,iEAAmE,GAAGyB,EAAO,aAAa,UAAS2B,EAAApD,EAAM,OAAN,MAAAoD,EAAY,IAAM3B,EAAO,sBAAwB,EAAE,EAAE,GAC9L,SAAA,CAAA,CAAC,CAACQ,GACDrB,MAAC,MAAA,CAAI,UAAW,qBAAqBa,EAAO,qBAAqB,GAC/D,SAAAb,EAAAA,IAACyC,EAAA,CACC,KAAM,CACJ,KAAMpB,EAAa,QAAU,QAAU,MACvC,KAAMA,EAAa,QACf,GAAGQ,EAAW,OAAOR,EAAa,UAAW,IAAI,CAAC,IAAIQ,EAAW,OAAOR,EAAa,QAAS,IAAI,CAAC,GACnGQ,EAAW,OAAOR,EAAa,UAAW,IAAI,CAAA,EAEpD,MAAOS,EAAyBT,CAAY,EAC5C,MAAOjC,EAAM,aAAA,CAAA,EAEjB,SAED,MAAA,CACE,SAAA,CAAAsC,GACC1B,EAAAA,IAAC,OAAI,UAAU,iFACb,eAAC0C,EAAA,CAAK,UAAAxD,GAAsB,OAAO,SAAA,CAAU,CAAA,CAC/C,EAEDE,EAAM,gBACLY,EAAAA,IAAC2C,EAAA,CAAc,UAAU,uEAAuE,EAElG7C,EAAAA,KAAC,MAAA,CAAI,UAAU,4BACZ,SAAA,CAAAV,EAAM,iBAAiBwD,EAAAxD,EAAM,OAAN,YAAAwD,EAAY,MAClC5C,EAAAA,IAAC,MAAA,CAAI,UAAW,GAAGa,EAAO,iBAAiB,0DAA0DwB,CAAuB,GAC1H,SAAArC,EAAAA,IAAC6C,EAAA,CACC,IAAKX,EAAY,WAAUY,EAAA1D,EAAM,OAAN,YAAA0D,EAAY,IAAK,CAAE,KAAMC,EAAU,OAAQ,EACtE,MAAO,CAAE,gBAAiB3D,EAAM,YAAA,CAAa,CAAA,EAEjD,EAEFU,EAAAA,KAAC,KAAA,CAAG,UAAW,+CAA+Ce,EAAO,OAAO,IAAIF,GAAaC,CAAO,CAAC,IAAIxB,EAAM,cAAgB,OAAS,EAAE,GACvI,SAAA,CAAAwB,EACAwB,SAAqBA,EAAA,CAAA,CAAiB,CAAA,CAAA,CACzC,CAAA,CAAA,CACF,CAAA,EACF,EACC,CAAC,CAAClB,SACA,MAAA,CAAI,UAAWL,EAAO,iBACrB,SAAAb,EAAAA,IAACgD,EAAA,CACC,QAAA9B,EACA,cAAAC,EACA,yBAA0B/B,EAAM,wBAAA,CAAA,CAClC,CACF,CAAA,EAEJ,EACC,CAACA,EAAM,eAAiB,CAAC,GAAC6D,EAAA7D,EAAM,OAAN,MAAA6D,EAAY,MACrCjD,MAAC,MAAA,CAAI,UAAWa,EAAO,cACrB,SAAAb,EAAAA,IAAC,MAAA,CACC,IAAKkC,EAAY,UAAU9C,EAAM,KAAK,IAAK,CAAE,KAAM2D,EAAU,OAAQ,EACrE,UAAU,gBAAA,CAAA,CACZ,CACF,CAAA,CAAA,CAEJ,CAAA,CACF,EACAzB,GAAA,YAAAA,EAAwB,SAAA,CAE5B,EAAG,CAAC4B,EAAWC,IAAA,SACb,OAAAD,EAAU,UAAYC,EAAU,SAC7BD,EAAU,UAAYC,EAAU,WAChCX,EAAAU,EAAU,OAAV,YAAAV,EAAgB,SAAQI,EAAAO,EAAU,OAAV,YAAAP,EAAgB,KAC5C,EAEM,SAASQ,IAAmC,CACjD,MAAM9B,EAAyBC,EAAAA,WAAiBC,CAAmB,EAEnE,OAAO1C,EAAa,6BACjB,MAAA,CAAI,UAAW,6CAA6C+B,EAAO,MAAM,GAAI,EAC9ES,GAAA,YAAAA,EAAwB,SAAA,CAE5B"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{ah as m,aN as B,cD as d,cE as R,j as $,aP as j}from"./app-C56EnOMP.js";const w=m.forwardRef(({bsPrefix:c,className:n,as:i="div",...o},l)=>{const t=B(c,"row"),f=d(),p=R(),u=`${t}-cols`,r=[];return f.forEach(s=>{const e=o[s];delete o[s];let a;e!=null&&typeof e=="object"?{cols:a}=e:a=e;const x=s!==p?`-${s}`:"";a!=null&&r.push(`${u}${x}-${a}`)}),$.jsx(i,{ref:l,...o,className:j(n,t,...r)})});w.displayName="Row";export{w as R};
|
|
2
|
-
//# sourceMappingURL=BoqzK1u7.chunk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BoqzK1u7.chunk.js","sources":["../../../../../node_modules/react-bootstrap/esm/Row.js"],"sourcesContent":["\"use client\";\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { useBootstrapPrefix, useBootstrapBreakpoints, useBootstrapMinBreakpoint } from './ThemeProvider';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst Row = /*#__PURE__*/React.forwardRef(({\n bsPrefix,\n className,\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 ...props\n}, ref) => {\n const decoratedBsPrefix = useBootstrapPrefix(bsPrefix, 'row');\n const breakpoints = useBootstrapBreakpoints();\n const minBreakpoint = useBootstrapMinBreakpoint();\n const sizePrefix = `${decoratedBsPrefix}-cols`;\n const classes = [];\n breakpoints.forEach(brkPoint => {\n const propValue = props[brkPoint];\n delete props[brkPoint];\n let cols;\n if (propValue != null && typeof propValue === 'object') {\n ({\n cols\n } = propValue);\n } else {\n cols = propValue;\n }\n const infix = brkPoint !== minBreakpoint ? `-${brkPoint}` : '';\n if (cols != null) classes.push(`${sizePrefix}${infix}-${cols}`);\n });\n return /*#__PURE__*/_jsx(Component, {\n ref: ref,\n ...props,\n className: classNames(className, decoratedBsPrefix, ...classes)\n });\n});\nRow.displayName = 'Row';\nexport default Row;"],"names":["Row","React.forwardRef","bsPrefix","className","Component","props","ref","decoratedBsPrefix","useBootstrapPrefix","breakpoints","useBootstrapBreakpoints","minBreakpoint","useBootstrapMinBreakpoint","sizePrefix","classes","brkPoint","propValue","cols","infix","_jsx","classNames"],"mappings":"8EAMK,MAACA,EAAmBC,EAAAA,WAAiB,CAAC,CACzC,SAAAC,EACA,UAAAC,EAEA,GAAIC,EAAY,MAChB,GAAGC,CACL,EAAGC,IAAQ,CACT,MAAMC,EAAoBC,EAAmBN,EAAU,KAAK,EACtDO,EAAcC,EAAuB,EACrCC,EAAgBC,EAAyB,EACzCC,EAAa,GAAGN,CAAiB,QACjCO,EAAU,CAAA,EAChB,OAAAL,EAAY,QAAQM,GAAY,CAC9B,MAAMC,EAAYX,EAAMU,CAAQ,EAChC,OAAOV,EAAMU,CAAQ,EACrB,IAAIE,EACAD,GAAa,MAAQ,OAAOA,GAAc,SAC3C,CACC,KAAAC,CACR,EAAUD,EAEJC,EAAOD,EAET,MAAME,EAAQH,IAAaJ,EAAgB,IAAII,CAAQ,GAAK,GACxDE,GAAQ,MAAMH,EAAQ,KAAK,GAAGD,CAAU,GAAGK,CAAK,IAAID,CAAI,EAAE,CAChE,CAAC,EACmBE,EAAAA,IAAKf,EAAW,CAClC,IAAKE,EACL,GAAGD,EACH,UAAWe,EAAWjB,EAAWI,EAAmB,GAAGO,CAAO,CAClE,CAAG,CACH,CAAC,EACDd,EAAI,YAAc","x_google_ignoreList":[0]}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{j as a,d as C,z,F as H,l as L,T as d,m as V,D as B,N as Ne,Q as je,a5 as Se,aY as ye,V as Le,c as me,R as x,aA as Ae,ab as ke,aV as Ce,o as q,aB as Te,p as Pe,q as we,aZ as De,r as Fe,P as Ie,w as Ue,x as _e,a0 as Be,v as Ee,a1 as Re,a2 as Ve,a6 as qe,aD as Oe,$ as Me,aJ as se,G as ze,n as M,e as ie,W as A,X as k,M as He,a_ as ne,h as $e,k as Ge,i as Ke,aW as re}from"./app-C56EnOMP.js";import{a as We}from"./DvDdiDQN.chunk.js";import{S as Ye}from"./DhqAA1wT.chunk.js";import{S as Je,a as Ze,J as Qe,u as Xe,b as ea,B as oe,c as aa,d as ta,e as sa}from"./Bi8YRFeY.chunk.js";import{L as ia}from"./-Oi3rE3V.chunk.js";import{B as de}from"./DkFkYS-j.chunk.js";import{g as na,B as ra}from"./BBnDr_iy.chunk.js";import{C as oa,L as la}from"./BXKrMYdw.chunk.js";import{C as ca}from"./Cv1FGdNu.chunk.js";import{G as ma}from"./6UeJLeAd.chunk.js";import{T as da}from"./m5XtnRaH.chunk.js";import{A as ua}from"./8zar0u1i.chunk.js";import{C as ga}from"./CEmtkty-.chunk.js";import{u as ha}from"./BtiKTu8r.chunk.js";import{S as xa}from"./C8ZuWYfb.chunk.js";import{a as pa,l as p,u as va,F as j}from"./Bt3kaRtU.chunk.js";import"./Dkq5GtOV.chunk.js";import"./B5OOLcT3.chunk.js";import"./CU6iZ8MR.chunk.js";import"./Cj5ETNHP.chunk.js";import"./CW7x8M-z.chunk.js";import"./C35NlkUr.chunk.js";const fa="_logoContainer_vn3gg_1",ba={logoContainer:fa},Na="streamable.livestreamDetails";function ue(e){var h;function t(){return`${B.diffBetween(e.endTime,e.startTime,"minutes")}m`}function n(r){return je.convertUTCToTimezoneDate(r)}function l(r){return B.format(n(r),"h:mma")}function v(r){return B.format(n(r),"Do MMMM")}function m(r){var b;return(b=Ne[r])==null?void 0:b.name}function g(){var r;return(r=ua.getMergedPresentationAudienceString(e.audiences))==null?void 0:r.name}const f=na(e.companyName,ra);return a.jsxs(a.Fragment,{children:[a.jsxs("div",{className:"d-flex align-items-center mb-2",children:[e.logoUrl&&a.jsx(C,{appLink:e.companyAppLink,children:a.jsx("div",{className:`${ba.logoContainer} rounded-circle flex-shrink-0 overflow-hidden partial-loading-background me-2`,children:a.jsx(de,{data:z.createUrl(e.logoUrl,{size:H.Small}),alt:e.companyName,className:!e.logoBgColour&&f,imageStyle:{backgroundColor:e.logoBgColour},preload:!0})})}),a.jsxs("div",{className:"d-flex flex-column justify-content-between",children:[e.companyName&&a.jsx(C,{appLink:e.companyAppLink,className:"text-uppercase text-wrap d-block text-truncate mb-0",title:e.companyName,children:e.companyName}),a.jsx("h1",{className:"h4 mb-0",children:e.eventName})]})]}),a.jsxs("div",{className:"d-flex gap-2 mb-3",children:[!!((h=e.audiences)!=null&&h.length)&&a.jsx("div",{className:"rounded-pill border border-dark px-2",children:g()}),a.jsx("div",{className:"rounded-pill fw-semibold bg-dark text-white px-2",children:a.jsx("span",{className:"align-middle",children:t()})})]}),e.isPastLivestream&&a.jsxs("div",{className:"d-inline-block bg-light-green rounded-pill mb-3",children:[a.jsx(L,{svg:oa}),a.jsx("p",{className:"d-inline ms-1 mb-0",children:a.jsx(d,{namespace:Na,phrase:"pastEvent"})})]}),!e.isPastLivestream&&a.jsxs(a.Fragment,{children:[a.jsxs("p",{className:"mb-2",children:[a.jsx(L,{svg:da,size:V.Small}),a.jsx("span",{className:"ms-1",children:l(e.startTime)})]}),a.jsxs("p",{className:"mb-2",children:[a.jsx(L,{svg:ca,size:V.Small}),a.jsx("span",{className:"ms-1",children:v(e.startTime)})]}),a.jsxs("p",{className:"mb-3",children:[a.jsx(L,{svg:ma,size:V.Small}),a.jsx("span",{className:"ms-1",children:m(e.timezone)})]})]}),e.description&&a.jsx("p",{className:"mb-3 pre-wrap text-break",dangerouslySetInnerHTML:{__html:ia.linkifyText(e.description)}})]})}const ja={createBooking(e){return{publicUrl:"/api/integrations/api/v1/bookings",url:"{gateway}/v1/events/booking",key:"streamable:create:booking",type:Se.POST,data:e}}},Sa="_logo_1uhpx_1",ya={logo:Sa},le="streamable.bookingSuccess";function La(e){var t;return a.jsxs(a.Fragment,{children:[a.jsx("div",{className:`${ya.logo} rounded-circle flex-shrink-0 overflow-hidden partial-loading-background mx-auto mb-3`,children:a.jsx(de,{data:z.createUrl((t=e.livestream.company.logo)==null?void 0:t.url,{size:H.Small}),alt:e.livestream.company.name,preload:!0})}),a.jsxs("div",{className:"d-flex align-items-center justify-content-center mb-3 gap-1",children:[a.jsx(L,{svg:ye,className:"svg-container std text-success"}),a.jsx("h1",{className:"h3 mb-0 fw-semibold",children:a.jsx(d,{namespace:le,phrase:"booked"})})]}),a.jsx("div",{className:"my-3",children:a.jsx(ue,{companyId:e.livestream.company.id,companyName:e.livestream.company.name,eventName:e.livestream.name,audiences:e.livestream.audiences,startTime:e.livestream.startDateTime,endTime:e.livestream.endDateTime,timezone:e.livestream.timezone})}),a.jsx("p",{children:a.jsx(d,{namespace:le,phrase:"emailReminder"})})]})}const Aa="_image_e4ebg_1",ce={image:Aa},O="streamable.bookingError";function ka(e){return a.jsxs("div",{className:"d-flex flex-column justify-content-center",children:[a.jsx("div",{className:`${ce.logo} rounded-circle flex-shrink-0 overflow-hidden partial-loading-background mx-auto mb-3`,children:a.jsx("img",{className:ce.image,src:Le.General.LOST_MESSAGE_BOTTLE})}),a.jsx("h3",{className:"text-center mb-3",children:a.jsx(d,{namespace:O,phrase:"heading"})}),a.jsx("p",{className:"text-center mb-3",children:a.jsx(d,{namespace:O,phrase:"description"})}),a.jsx("button",{className:"btn btn-dark",onClick:e.onTryAgain,children:a.jsx(d,{namespace:O,phrase:"buttonLabel"})})]})}function ge(e){return a.jsx("div",{className:`${e.className}`,style:e.coverImageUrl&&{backgroundImage:`url(${z._createUrl(e.coverImageUrl,{size:H.Large})})`}})}const he="streamable.livestreamView",i=me.encloseNamespace(he),xe=p.object({firstName:p.string().required(i("firstNameRequired")),lastName:p.string().required(i("lastNameRequired")),email:p.string().email(i("emailValid")).required(i("emailRequired")),attendees:p.string().required(i("attendeesRequired"))}),Ca=xe.concat(p.object({schoolOrDistrict:p.string().required(i("schoolOrDistrictRequired")),jobTitle:p.string().required(i("jobTitleRequired")),phoneNumber:p.string().required(i("phoneNumberRequired")).matches(/^[0-9]+$/,i("phoneNumberValid"))}));function Ta(e){var y,w,D,u,o,F,I,U,_;const t=va(),[n,l]=x.useState({}),[v,m]=x.useState(!1);function g(){t.setFieldValue("schoolOrDistrict",""),t.setFieldValue("country",""),t.setFieldValue("province",""),t.setFieldValue("prospectId",""),N()}function f(c){l({...n,...c}),g()}function h(){l({}),g()}function r(c){l({...n,...c}),t.setFieldValue("schoolOrDistrict",c.schoolName),t.setFieldValue("country",c.country),t.setFieldValue("province",c.province),t.setFieldValue("prospectId",c.prospectId),N()}function b(){l({...n,prospectId:void 0,schoolName:void 0,schoolPostCode:void 0}),g()}function P(c){m(!0),t.setFieldValue("schoolOrDistrict",c),N()}function N(){window.setTimeout(()=>t.validateForm(),0)}return a.jsxs(Ae,{children:[a.jsxs("div",{className:"row my-3",children:[a.jsx("div",{className:"col-12 col-sm-6",children:a.jsx(j,{label:i("firstName"),name:"firstName",placeholder:i("firstNamePlaceholder"),value:(y=t.values)==null?void 0:y.firstName,disabled:e.isAuthenticated,showRequiredStar:!e.isAuthenticated})}),a.jsx("div",{className:"col-12 col-sm-6",children:a.jsx(j,{label:i("lastName"),name:"lastName",placeholder:i("lastNamePlaceholder"),value:(w=t.values)==null?void 0:w.lastName,disabled:e.isAuthenticated,showRequiredStar:!e.isAuthenticated})}),a.jsx("div",{className:"col-12",children:a.jsx(j,{label:i("email"),name:"email",placeholder:i("emailPlaceholder"),value:(D=t.values)==null?void 0:D.email,disabled:e.isAuthenticated&&!!e.emailAddress,showRequiredStar:!e.isAuthenticated||!e.emailAddress})}),!e.isAuthenticated&&a.jsxs(a.Fragment,{children:[a.jsx("div",{className:"col-12",children:v?a.jsx(j,{label:i("schoolOrDistrict"),name:"schoolOrDistrict",value:(u=t.values)==null?void 0:u.schoolOrDistrict,showRequiredStar:!0,placeholder:i("schoolOrDistrictPlaceholder"),autoFocus:!0}):a.jsxs(a.Fragment,{children:[a.jsx(Je,{data:n,setData:f,clearData:h,labelClassName:"form-label",geoLocation:{countryCode:"US"},googleMapsApiKey:e.googleMapsApiKey,required:!0,hideOnBlur:!0}),a.jsx(Ze,{data:n,setData:r,clearData:b,disabled:!n.schoolLocality,searchUrl:e.searchProspectsUrl,onClickNoSuggestions:P,required:!0,placeholder:!n.schoolLocality&&i("schoolPlaceholder"),hideOnBlur:!0})]})}),a.jsx("div",{className:"col-12",children:a.jsx(Qe,{id:"job-title",error:((o=t.touched)==null?void 0:o.jobTitle)&&((F=t.errors)==null?void 0:F.jobTitle),countryCode:ke.US,initialValue:(I=t.values)==null?void 0:I.jobTitle,onChange:c=>t.setFieldValue("jobTitle",c,!1),labelClassName:"form-label",isTertiary:!1,required:!0})})]}),a.jsx("div",{className:"col-12 col-sm-6 col-xl-4",children:a.jsx(j,{type:"number",label:i("attendees"),name:"attendees",placeholder:i("attendeesPlaceholder"),min:1,value:(U=t.values)==null?void 0:U.attendees,showRequiredStar:!0})}),!e.isAuthenticated&&a.jsx("div",{className:"col",children:a.jsx(j,{label:i("phoneNumber"),name:"phoneNumber",placeholder:i("phoneNumberPlaceholder"),value:(_=t.values)==null?void 0:_.phoneNumber,showRequiredStar:!0})})]}),a.jsx(Ce,{type:"submit",className:"w-100",variant:"dark",showSpinner:e.showSpinner,disabled:!t.isValid,children:a.jsx(d,{namespace:he,phrase:"book"})})]})}function Pa(e){return a.jsx(pa,{initialValues:e.initialValues,validationSchema:e.isAuthenticated?xe:Ca,validateOnMount:!0,onSubmit:e.onSubmit,children:a.jsx(Ta,{emailAddress:e.emailAddress,isAuthenticated:e.isAuthenticated,showSpinner:e.showSpinner,googleMapsApiKey:e.googleMapsApiKey,searchProspectsUrl:e.searchProspectsUrl})})}const wa="_noRecording_uwnqe_1",Da="_coverImage_uwnqe_4",Fa="_popup_uwnqe_10",Ia="_page_uwnqe_15",T={noRecording:wa,coverImage:Da,popup:Fa,page:Ia},S="streamable.livestreamView",Ua=me.encloseNamespace(S);function pe(e){var h,r;const t=M.getHref(M.getCurrentAppLink()),n=t!=="/"?{redirectUrl:t}:{},l=e.origin==="newsletter",v=!e.isAuthenticated&&!l&&!e.livestream.recording,m=!e.isPastLivestream&&!e.formStage&&(e.isAuthenticated&&!e.isStudent||l),g={application:k.DEFAULT,action:A.Default.CHALLENGE,params:n},f={application:k.DASHBOARD,action:A.Dashboard.COMPANY_DASHBOARD,args:[e.livestream.company.id,ie.slugify(e.livestream.company.name)]};return a.jsxs(a.Fragment,{children:[!e.success&&!e.error&&a.jsxs(a.Fragment,{children:[a.jsx(ue,{logoUrl:(h=e.livestream.company.logo)==null?void 0:h.url,logoBgColour:(r=e.livestream.company.metadata)==null?void 0:r.colour,companyId:e.livestream.company.id,companyName:e.livestream.company.name,eventName:e.livestream.name,audiences:e.livestream.audiences,startTime:e.livestream.startDateTime,endTime:e.livestream.endDateTime,timezone:e.livestream.timezone,description:!e.formStage&&e.livestream.description,isPastLivestream:e.isPastLivestream,companyAppLink:f}),e.formStage&&a.jsx(Pa,{emailAddress:e.emailAddress,initialValues:e.initialValues,isAuthenticated:e.isAuthenticated,showSpinner:e.showSpinner,onSubmit:e.onSubmit,googleMapsApiKey:e.googleMapsApiKey,searchProspectsUrl:e.searchProspectsUrl}),m&&a.jsx("button",{className:"btn btn-dark w-100",onClick:()=>e.setFormStage(!0),children:a.jsx(d,{namespace:S,phrase:"book"})}),e.isPastLivestream&&!e.livestream.recording&&a.jsx("div",{className:`${T.noRecording} p-2 rounded`,children:a.jsx(d,{namespace:S,phrase:"noRecording"})}),e.livestream.recording&&a.jsx(C,{appLink:{application:k.VIDEOS,action:A.Videos.PLAY_VIDEO,args:[e.livestream.recording.id,ie.slugify(e.livestream.recording.name)]},children:a.jsx("button",{className:"btn btn-outline-dark w-100",children:a.jsx(d,{namespace:S,phrase:"recording"})})}),v&&a.jsxs(a.Fragment,{children:[a.jsx(C,{className:"mt-3 btn btn-dark w-100",appLink:g,children:a.jsx(d,{namespace:S,phrase:"signInButton"})}),a.jsx(C,{className:"d-flex justify-content-center align-items-center mt-3 text-info",appLink:{application:k.DEFAULT,action:A.Default.CONTACT_US_POPUP},children:a.jsx(d,{namespace:S,phrase:"contactUsLink"})})]})]}),e.success&&a.jsx(La,{livestream:e.livestream}),e.error&&a.jsx(ka,{onTryAgain:e.onTryAgain})]})}function _a(e){var n;function t(){var m;e.closePopup(),Ye.preventScrollTop();const l=re.getCurrentRoute().appLink;l.application===k.LIVESTREAMS&&l.action===A.Livestreams.LIVESTREAM&&M.trigger((m=re.getPreviousRoute())==null?void 0:m.appLink)}return a.jsxs(ze,{size:"xl",bodyClassName:"rounded-3 overflow-hidden p-0",closePopup:t,children:[a.jsx("button",{className:"btn-close position-absolute top-0 end-0 p-3",onClick:t}),a.jsxs("div",{className:"row g-0",children:[a.jsx("div",{className:"col-12 col-lg-6",children:a.jsx(ge,{className:`${T.coverImage} ${T.popup}`,coverImageUrl:(n=e.livestream.company.cover)==null?void 0:n.url})}),a.jsx("div",{className:"col-12 col-lg p-4 m-lg-2",children:a.jsx(pe,{...e})})]})]})}function Ba(e){var t;return a.jsxs("div",{className:"row g-0 px-3",children:[a.jsx("div",{className:"col-12 col-md-6 col-lg-5",children:a.jsx(ge,{className:`${T.coverImage} ${T.page} rounded`,coverImageUrl:(t=e.livestream.company.cover)==null?void 0:t.url})}),a.jsx("div",{className:"col-12 col-md px-md-3 pt-2 pt-md-0",children:a.jsx(pe,{...e})})]})}function rt(e){var K,W,Y,J,Z,Q;const t=q(Me.config()),n=Te(),l=Xe(),[v,m]=x.useState(!1),[g,f]=x.useState(!1),[h,r]=x.useState(!1),[b,P]=x.useState(!1),[N,y]=x.useState({firstName:"",lastName:"",email:"",attendees:"",schoolOrDistrict:"",jobTitle:"",phoneNumber:"",country:"",province:"",prospectId:""}),{createOrUpdateProfile:w}=ea(),[D]=Pe(De,null,{storage:we.SessionStorage}),u=q(Oe.currentUser()),o=q(la.livestream(e.id)),{hasPermissions:F}=Fe(),I=F(Ie.StudentExperience),U=Ue.getDefaultMetadata({title:(K=o.data)==null?void 0:K.name,description:(W=o.data)==null?void 0:W.description,phraseContext:{phraseHandler:Ua,titlePhrase:"pageTitle",descriptionPhrase:"pageDescription"},canonicalLink:xa.getCanonicalLink({customAppLink:Be.livestream(o.data)}),allowIndexing:!0,product:_e.PRODUCT_NAME});Ee({...U,_isPopupUp:!e.fromPageLoad}),ha(o),x.useEffect(()=>{var s;!o.data||((s=o.data)==null?void 0:s.status)===ga.Published||Re.throw(new Ve)},[(Y=o.data)==null?void 0:Y.status]),x.useEffect(()=>{var s;(s=u.data)!=null&&s.isAuthenticated&&y({...N,firstName:u.data.givenName,lastName:u.data.familyName,email:u.data.email})},[(J=u.data)==null?void 0:J.isAuthenticated]);async function _(s){var X,ee,ae;try{if(P(!0),y(s),await n(ja.createBooking({eventId:o.data.id,eventType:"Livestream",firstName:s.firstName,lastName:s.lastName,email:s.email,attendees:s.attendees,status:1})),$(se.Complete),!((X=u.data)!=null&&X.isAuthenticated)){const E=await n(oe.checkEmail(s.email));let te;if(s.prospectId){const R=await n(oe.prospectLookups(s.prospectId));te=(ee=R==null?void 0:R.find(be=>be.type==="crm_id"))==null?void 0:ee.externalId}w({email:s.email,firstName:s.firstName,lastName:s.lastName,phone:s.phoneNumber,countryCode:s.country});const fe={email:s.email,firstName:s.firstName,lastName:s.lastName,phone:s.phoneNumber,custom:{accountAddress:s!=null&&s.province?{countryCode:s==null?void 0:s.country,province:aa.parseProvince((s==null?void 0:s.province)||"")}:void 0,accountName:s.schoolOrDistrict,jobTitle:s.jobTitle,syncToCrm:(ae=E==null?void 0:E.users)!=null&&ae.length?void 0:!0,crmId:te||void 0}};l.logFormSubmission({eventType:We.StreamableFormEvent.LivestreamBookingFormSubmit,source:sa.LivestreamBooking,topic:ta.LivestreamBooking,user:fe,productType:"sl"})}f(!0)}catch{r(!0),m(!1)}finally{P(!1)}}function c(){r(!1),m(!0)}function ve(){m(!0),$(se.Start)}function $(s){He.logUserAction({id:o.data.id,name:o.data.name},{entity:Ke.Livestream,actionType:Ge.Submit,location:$e.LivestreamBookingForm,descriptor:e.fromPageLoad?ne.FullPage:ne.Popup,workflowPhase:s})}if(!(o.hasCompleted&&t.hasCompleted))return a.jsx(a.Fragment,{});const G={livestream:o.data,formStage:v,initialValues:N,isAuthenticated:(Z=u.data)==null?void 0:Z.isAuthenticated,isStudent:I,success:g,error:h,isPastLivestream:B.isBefore(o.data.endDateTime,new Date),showSpinner:b,origin:D,onSubmit:_,onTryAgain:c,setFormStage:ve,googleMapsApiKey:t.data.googleMapsApiKey,searchProspectsUrl:qe.safeUrlConcat(t.data.gatewayApiUrl,"/v1/search/prospects"),emailAddress:(Q=u.data)==null?void 0:Q.email};return e.fromPageLoad?a.jsx(Ba,{...G}):a.jsx(_a,{...G,closePopup:e.closePopup})}export{rt as LivestreamView};
|
|
2
|
-
//# sourceMappingURL=Bsa3zcW0.chunk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Bsa3zcW0.chunk.js","sources":["../../../../libs/shared/src/apps/streamable-learning/components/livestream-details/LivestreamDetails.tsx","../../../../libs/shared/src/apps/streamable-learning/flight-requests/BookingRequests.ts","../../src/apps/livestreams/components/livestream-booking-success/LivestreamBookingSuccess.tsx","../../src/apps/livestreams/components/livestream-boooking-error/LivestreamBookingError.tsx","../../src/apps/livestreams/components/livestream-cover-image/LivestreamCoverImage.tsx","../../src/apps/livestreams/components/livestream-form/LivestreamForm.tsx","../../src/apps/livestreams/views/LivestreamView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\nimport { LinkifyHelper } from 'libs/common/react/utils/LinkifyHelper';\n\nimport { Timezone, TIMEZONES_US } from 'libs/shared/apps/streamable-learning/constants/Timezones';\nimport { TimezoneHelper } from 'libs/shared/apps/streamable-learning/utils/TimezoneHelper';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { BG_COLOUR_CLASS_NAMES } from 'libs/shared/constants/ColourClassNames';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { CalendarCheckSvg } from 'libs/shared/images/svg/objects/CalendarCheckSvg';\nimport { CalendarSvg } from 'libs/shared/images/svg/objects/CalendarSvg';\nimport { GlobeSvg } from 'libs/shared/images/svg/objects/GlobeSvg';\nimport { TimerSvg } from 'libs/shared/images/svg/status/TimerSvg';\nimport { Audience, PresentationAudience } from 'libs/shared/interfaces';\nimport { AudienceHelper } from 'libs/shared/utils/audience-helper/AudienceHelper';\nimport { getBgColorClass } from 'libs/shared/utils/getBgColorClass';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './livestream-details.module.scss';\n\nconst namespace = 'streamable.livestreamDetails';\n\ninterface LivestreamDetailsProps {\n logoUrl?: string;\n logoBgColour?: string;\n companyId?: string;\n companyName?: string;\n companyAppLink?: Core.AppLink;\n eventName: string;\n audiences?: Audience[];\n startTime: string;\n endTime: string;\n timezone: Timezone;\n description?: string;\n isPastLivestream?: boolean;\n}\n\nexport function LivestreamDetails(props: LivestreamDetailsProps) {\n function getDuration() {\n return `${DateHelper.diffBetween(props.endTime, props.startTime, 'minutes')}m`;\n }\n\n function getTimezoneDateTime(dateTime: string): Date {\n return TimezoneHelper.convertUTCToTimezoneDate(dateTime);\n }\n\n function getTime(time: string): string {\n return DateHelper.format(getTimezoneDateTime(time), 'h:mma');\n }\n\n function getDate(date: string): string {\n return DateHelper.format(getTimezoneDateTime(date), 'Do MMMM');\n }\n\n function getDisplayTimezone(timezone: Timezone): string {\n return TIMEZONES_US[timezone]?.name;\n }\n\n function getMergedAudienceName(): string {\n return AudienceHelper.getMergedPresentationAudienceString(props.audiences as PresentationAudience[])?.name;\n }\n\n const logoFallbackBgClassName = getBgColorClass(props.companyName, BG_COLOUR_CLASS_NAMES);\n\n return (\n <>\n <div className='d-flex align-items-center mb-2'>\n {props.logoUrl && (\n <AppLink\n appLink={props.companyAppLink}\n >\n <div className={`${styles.logoContainer} rounded-circle flex-shrink-0 overflow-hidden partial-loading-background me-2`}>\n <BaseImage\n data={ImageHelper.createUrl(props.logoUrl, { size: ImageSize.Small })}\n alt={props.companyName}\n className={!props.logoBgColour && logoFallbackBgClassName}\n imageStyle={{\n backgroundColor: props.logoBgColour\n }}\n preload\n />\n </div>\n </AppLink>\n\n )}\n <div className='d-flex flex-column justify-content-between'>\n {props.companyName &&\n <AppLink\n appLink={props.companyAppLink}\n className='text-uppercase text-wrap d-block text-truncate mb-0'\n title={props.companyName}\n >\n {props.companyName}\n </AppLink>\n }\n <h1 className='h4 mb-0'>{props.eventName}</h1>\n </div>\n </div>\n\n <div className='d-flex gap-2 mb-3'>\n {!!props.audiences?.length && (\n <div className='rounded-pill border border-dark px-2'>\n {getMergedAudienceName()}\n </div>\n )}\n <div className='rounded-pill fw-semibold bg-dark text-white px-2'>\n <span className='align-middle'>{getDuration()}</span>\n </div>\n </div>\n\n {props.isPastLivestream && (\n <div className='d-inline-block bg-light-green rounded-pill mb-3'>\n <SvgContainer svg={CalendarCheckSvg} />\n <p className='d-inline ms-1 mb-0'><Text namespace={namespace} phrase='pastEvent' /></p>\n </div>\n )}\n\n {!props.isPastLivestream && (\n <>\n <p className='mb-2'>\n <SvgContainer svg={TimerSvg} size={SvgContainerSize.Small} />\n <span className='ms-1'>{getTime(props.startTime)}</span>\n </p>\n <p className='mb-2'>\n <SvgContainer svg={CalendarSvg} size={SvgContainerSize.Small} />\n <span className='ms-1'>{getDate(props.startTime)}</span>\n </p>\n <p className='mb-3'>\n <SvgContainer svg={GlobeSvg} size={SvgContainerSize.Small} />\n <span className='ms-1'>{getDisplayTimezone(props.timezone)}</span>\n </p>\n </>\n )}\n\n {props.description && <p className='mb-3 pre-wrap text-break' dangerouslySetInnerHTML={{ __html: LinkifyHelper.linkifyText(props.description) }} />}\n </>\n );\n}","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Flight } from 'libs/common/react/index';\n\nimport { CreateBookingRequest } from 'libs/shared/apps/streamable-learning/requests/CreateBookingRequest';\n\nexport const BookingRequests = {\n createBooking(data: CreateBookingRequest): Flight.PublicRequest {\n return {\n publicUrl: '/api/integrations/api/v1/bookings',\n url: '{gateway}/v1/events/booking',\n key: `streamable:create:booking`,\n type: HttpVerbs.POST,\n data\n };\n }\n};","import React from 'react';\n\nimport { LivestreamDetails } from 'libs/shared/apps/streamable-learning/components/livestream-details/LivestreamDetails';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { CheckCircleSvg } from 'libs/shared/images/svg/status/CheckCircleSvg';\nimport { Livestream } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './livestream-booking-success.module.scss';\n\nconst namespace = 'streamable.bookingSuccess';\n\ninterface LivestreamBookingSuccessProps {\n livestream: Livestream;\n}\n\nexport function LivestreamBookingSuccess(props: LivestreamBookingSuccessProps) {\n return (\n <>\n <div\n className={`${styles.logo} rounded-circle flex-shrink-0 overflow-hidden partial-loading-background mx-auto mb-3`}\n >\n <BaseImage\n data={ImageHelper.createUrl(props.livestream.company.logo?.url, { size: ImageSize.Small })}\n alt={props.livestream.company.name}\n preload\n />\n </div>\n <div className='d-flex align-items-center justify-content-center mb-3 gap-1'>\n <SvgContainer svg={CheckCircleSvg} className='svg-container std text-success' />\n <h1 className='h3 mb-0 fw-semibold'><Text namespace={namespace} phrase='booked' /></h1>\n </div>\n <div className='my-3'>\n <LivestreamDetails\n companyId={props.livestream.company.id}\n companyName={props.livestream.company.name}\n eventName={props.livestream.name}\n audiences={props.livestream.audiences}\n startTime={props.livestream.startDateTime}\n endTime={props.livestream.endDateTime}\n timezone={props.livestream.timezone}\n />\n </div>\n <p><Text namespace={namespace} phrase='emailReminder' /></p>\n </>\n );\n}","import React from 'react';\n\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nimport styles from './livestream-booking-error.module.scss';\n\nconst namespace = 'streamable.bookingError';\n\ninterface LivestreamBookingErrorProps {\n onTryAgain: () => void\n}\n\nexport function LivestreamBookingError(props: LivestreamBookingErrorProps) {\n return (\n <div className='d-flex flex-column justify-content-center'>\n <div\n className={`${styles.logo} rounded-circle flex-shrink-0 overflow-hidden partial-loading-background mx-auto mb-3`}\n >\n <img\n className={styles.image}\n src={ImageUrls.General.LOST_MESSAGE_BOTTLE}\n />\n </div>\n <h3 className='text-center mb-3'><Text namespace={namespace} phrase='heading' /></h3>\n <p className='text-center mb-3'><Text namespace={namespace} phrase='description' /></p>\n <button className='btn btn-dark' onClick={props.onTryAgain}><Text namespace={namespace} phrase='buttonLabel' /></button>\n </div>\n );\n}","import React from 'react';\n\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\ninterface LivestreamCoverImageProps {\n coverImageUrl: string;\n className?: string;\n}\n\nexport function LivestreamCoverImage(props: LivestreamCoverImageProps) {\n return (\n <div\n className={`${props.className}`}\n style={props.coverImageUrl && { backgroundImage: `url(${ImageHelper._createUrl(props.coverImageUrl, { size: ImageSize.Large })})` }}\n />\n );\n}","import React from 'react';\nimport { Form } from 'formik';\nimport * as Yup from 'yup';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { JobTitleInput } from 'libs/shared/apps/sign-up/components/steps/add-to-braze-step-item/JobTitleInput';\nimport { SearchLocalityInput } from 'libs/shared/apps/sign-up/components/steps/search-school-step-item/SearchLocalityInput';\nimport { SearchSchoolInput } from 'libs/shared/apps/sign-up/components/steps/search-school-step-item/SearchSchoolInput';\nimport { SearchSchoolData } from 'libs/shared/apps/sign-up/interfaces/SearchSchoolData';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { FormWrapper, useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CountryCode } from 'libs/shared/enums/CountryCode';\n\nconst namespace = 'streamable.livestreamView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst baseValidationSchema = Yup.object({\n firstName: Yup.string().required(getPhrase('firstNameRequired')),\n lastName: Yup.string().required(getPhrase('lastNameRequired')),\n email: Yup.string().email(getPhrase('emailValid')).required(getPhrase('emailRequired')),\n attendees: Yup.string().required(getPhrase('attendeesRequired'))\n});\n\nconst guestValidationSchema = baseValidationSchema.concat(Yup.object({\n schoolOrDistrict: Yup.string().required(getPhrase('schoolOrDistrictRequired')),\n jobTitle: Yup.string().required(getPhrase('jobTitleRequired')),\n phoneNumber: Yup.string().required(getPhrase('phoneNumberRequired')).matches(/^[0-9]+$/, getPhrase('phoneNumberValid'))\n}));\n\ninterface LivestreamFormFieldsProps {\n isAuthenticated: boolean;\n showSpinner: boolean;\n googleMapsApiKey: string;\n searchProspectsUrl: string;\n emailAddress: string;\n}\n\nfunction LivestreamFormFields(props: LivestreamFormFieldsProps) {\n const formikProps = useFormikContextWrapper<LivestreamBookingFormValues>();\n\n const [ searchSchoolData, setSearchSchoolData ] = React.useState<SearchSchoolData>({});\n const [ cantFindSchool, setCantFindSchool ] = React.useState<boolean>(false);\n\n function clearFormikSchoolData() {\n formikProps.setFieldValue('schoolOrDistrict', '');\n formikProps.setFieldValue('country', '');\n formikProps.setFieldValue('province', '');\n formikProps.setFieldValue('prospectId', '');\n triggerValidation();\n }\n\n function setLocalityData(data: SearchSchoolData): void {\n setSearchSchoolData({ ...searchSchoolData, ...data });\n clearFormikSchoolData();\n }\n\n function clearLocalityData(): void {\n setSearchSchoolData({});\n clearFormikSchoolData();\n }\n\n function setSchoolData(data: SearchSchoolData): void {\n setSearchSchoolData({ ...searchSchoolData, ...data });\n\n formikProps.setFieldValue('schoolOrDistrict', data.schoolName);\n formikProps.setFieldValue('country', data.country);\n formikProps.setFieldValue('province', data.province);\n formikProps.setFieldValue('prospectId', data.prospectId);\n\n triggerValidation();\n }\n\n function clearSchooldata(): void {\n setSearchSchoolData({\n ...searchSchoolData,\n prospectId: undefined,\n schoolName: undefined,\n schoolPostCode: undefined\n });\n clearFormikSchoolData();\n }\n\n function onClickNoSuggestions(name: string) {\n setCantFindSchool(true);\n\n formikProps.setFieldValue('schoolOrDistrict', name);\n\n triggerValidation();\n }\n\n function triggerValidation() {\n // For whatever reason, forcing the form the validate needs to happen in a setTimeout to work\n // I genuinely have no idea why - Sha\n window.setTimeout(() => formikProps.validateForm(), 0);\n }\n\n return (\n <Form>\n <div className='row my-3'>\n <div className='col-12 col-sm-6'>\n <FormField\n label={getPhrase('firstName')}\n name='firstName'\n placeholder={getPhrase('firstNamePlaceholder')}\n value={formikProps.values?.firstName}\n disabled={props.isAuthenticated}\n showRequiredStar={!props.isAuthenticated}\n />\n </div>\n <div className='col-12 col-sm-6'>\n <FormField\n label={getPhrase('lastName')}\n name='lastName'\n placeholder={getPhrase('lastNamePlaceholder')}\n value={formikProps.values?.lastName}\n disabled={props.isAuthenticated}\n showRequiredStar={!props.isAuthenticated}\n />\n </div>\n <div className='col-12'>\n <FormField\n label={getPhrase('email')}\n name='email'\n placeholder={getPhrase('emailPlaceholder')}\n value={formikProps.values?.email}\n disabled={props.isAuthenticated && !!props.emailAddress}\n showRequiredStar={!props.isAuthenticated || !props.emailAddress}\n />\n </div>\n {!props.isAuthenticated &&\n <>\n <div className='col-12'>\n {!cantFindSchool ?\n <>\n <SearchLocalityInput\n data={searchSchoolData}\n setData={setLocalityData}\n clearData={clearLocalityData}\n labelClassName='form-label'\n geoLocation={{ countryCode: 'US' }}\n googleMapsApiKey={props.googleMapsApiKey}\n required\n hideOnBlur\n />\n <SearchSchoolInput\n data={searchSchoolData}\n setData={setSchoolData}\n clearData={clearSchooldata}\n disabled={!searchSchoolData.schoolLocality}\n searchUrl={props.searchProspectsUrl}\n onClickNoSuggestions={onClickNoSuggestions}\n required\n placeholder={!searchSchoolData.schoolLocality && getPhrase('schoolPlaceholder')}\n hideOnBlur\n />\n </> :\n <FormField\n label={getPhrase('schoolOrDistrict')}\n name='schoolOrDistrict'\n value={formikProps.values?.schoolOrDistrict}\n showRequiredStar={true}\n placeholder={getPhrase('schoolOrDistrictPlaceholder')}\n autoFocus\n />\n }\n </div>\n <div className='col-12'>\n <JobTitleInput\n id='job-title'\n error={formikProps.touched?.jobTitle && formikProps.errors?.jobTitle}\n countryCode={CountryCode.US}\n initialValue={formikProps.values?.jobTitle}\n onChange={jobTitle => formikProps.setFieldValue('jobTitle', jobTitle, false)}\n labelClassName='form-label'\n isTertiary={false}\n required\n />\n </div>\n </>\n }\n <div className='col-12 col-sm-6 col-xl-4'>\n <FormField\n type='number'\n label={getPhrase('attendees')}\n name='attendees'\n placeholder={getPhrase('attendeesPlaceholder')}\n min={1}\n value={formikProps.values?.attendees}\n showRequiredStar\n />\n </div>\n {!props.isAuthenticated && (\n <div className='col'>\n <FormField\n label={getPhrase('phoneNumber')}\n name='phoneNumber'\n placeholder={getPhrase('phoneNumberPlaceholder')}\n value={formikProps.values?.phoneNumber}\n showRequiredStar\n />\n </div>\n )}\n </div>\n <SpinnerButton type='submit' className='w-100' variant='dark' showSpinner={props.showSpinner} disabled={!formikProps.isValid} >\n <Text namespace={namespace} phrase='book' />\n </SpinnerButton>\n </Form>\n );\n}\n\nexport interface LivestreamBookingFormValues {\n firstName: string;\n lastName: string;\n email: string;\n attendees: string;\n schoolOrDistrict: string;\n jobTitle: string;\n phoneNumber: string;\n country: string;\n province: string;\n prospectId: string;\n}\n\ninterface LivestreamFormProps {\n initialValues: LivestreamBookingFormValues;\n isAuthenticated: boolean;\n showSpinner: boolean;\n onSubmit: (values: LivestreamBookingFormValues) => void;\n googleMapsApiKey: string;\n searchProspectsUrl: string;\n emailAddress: string;\n}\n\nexport function LivestreamForm(props: LivestreamFormProps) {\n return (\n <FormWrapper<LivestreamBookingFormValues>\n initialValues={props.initialValues}\n validationSchema={props.isAuthenticated ? baseValidationSchema : guestValidationSchema}\n validateOnMount={true}\n onSubmit={props.onSubmit}>\n <LivestreamFormFields\n emailAddress={props.emailAddress}\n isAuthenticated={props.isAuthenticated}\n showSpinner={props.showSpinner}\n googleMapsApiKey={props.googleMapsApiKey}\n searchProspectsUrl={props.searchProspectsUrl}\n />\n </FormWrapper>\n );\n}","import React from 'react';\nimport { type BrazeUser, StreamableFormEvent } from '@clickview/braze-client';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { ScrollHelper } from 'libs/common/backbone/utils/ScrollHelper';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { useGetFetchAsync } from 'libs/common/react/flight';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LivestreamBookingDescriptor, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { ProspectLookup } from 'libs/shared/apps/sign-up/enums/ProspectLookup';\nimport { BrazeCheckEmailResponse, BrazeHelper } from 'libs/shared/apps/sign-up/helpers/BrazeHelper';\nimport { LivestreamDetails } from 'libs/shared/apps/streamable-learning/components/livestream-details/LivestreamDetails';\nimport { BookingRequests } from 'libs/shared/apps/streamable-learning/flight-requests/BookingRequests';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Popup, PopupProps } from 'libs/shared/components/popup/Popup';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CurationStatusString } from 'libs/shared/enums/CurationStatus';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { BrazeRequests } from 'libs/shared/flight-requests/BrazeRequests';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useProfileApiClient } from 'libs/shared/hooks/UseProfileApiClient';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Config, CurrentUser, Livestream } from 'libs/shared/interfaces';\nimport { ContextService } from 'libs/shared/services/ContextService';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\nimport { Actions } from 'shared/constants/StreamableActions';\nimport { StreamableConstants } from 'shared/constants/StreamableConstants';\nimport { AppChannels } from 'shared/constants/StreamableRadioChannels';\nimport { BrazeSource } from 'shared/enums/BrazeSource';\nimport { BrazeTopic } from 'shared/enums/BrazeTopic';\nimport { PUBLIC_ORIGIN_VIEW_MODEL_KEY, PublicOriginViewModel } from 'shared/filters/OriginFilter';\nimport { LivestreamRequests } from 'shared/flight-requests/LivestreamRequests';\nimport { useStreamableBrazeClientService } from 'shared/hooks/useStreamableBrazeClientService';\nimport { StreamableAppLinks } from 'shared/utils/StreamableAppLinks';\nimport { SeoHelper } from 'shared/utils/StreamableSeoHelper';\n\nimport { LivestreamBookingSuccess } from 'apps/livestreams/components/livestream-booking-success/LivestreamBookingSuccess';\nimport { LivestreamBookingError } from 'apps/livestreams/components/livestream-boooking-error/LivestreamBookingError';\nimport { LivestreamCoverImage } from 'apps/livestreams/components/livestream-cover-image/LivestreamCoverImage';\nimport { LivestreamBookingFormValues, LivestreamForm } from 'apps/livestreams/components/livestream-form/LivestreamForm';\n\nimport styles from './livestream.module.scss';\n\nconst namespace = 'streamable.livestreamView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface LivestreamBookingProps {\n livestream: Livestream;\n formStage: boolean;\n initialValues: LivestreamBookingFormValues;\n isAuthenticated: boolean;\n isStudent: boolean;\n success: boolean;\n error: boolean;\n isPastLivestream: boolean;\n showSpinner: boolean;\n origin?: PublicOriginViewModel;\n onSubmit: (values: LivestreamBookingFormValues) => void;\n onTryAgain: () => void;\n setFormStage: React.Dispatch<React.SetStateAction<boolean>>\n googleMapsApiKey: string;\n searchProspectsUrl: string;\n emailAddress: string;\n}\n\nfunction LivestreamContent(props: LivestreamBookingProps) {\n const redirectUrl = Core.AppLinkHelper.getHref(Core.AppLinkHelper.getCurrentAppLink());\n const signInParams = redirectUrl !== '/' ? { redirectUrl } : {};\n const originNewsletter = props.origin === 'newsletter';\n const showSignInLink = !props.isAuthenticated && !originNewsletter && !props.livestream.recording;\n const showBook =\n !props.isPastLivestream &&\n !props.formStage &&\n ((props.isAuthenticated && !props.isStudent) || originNewsletter);\n\n const signInLink = {\n application: AppChannels.DEFAULT,\n action: Actions.Default.CHALLENGE,\n params: signInParams\n };\n\n const companyAppLink = {\n application: AppChannels.DASHBOARD,\n action: Actions.Dashboard.COMPANY_DASHBOARD,\n args: [ props.livestream.company.id, TextHelper.slugify(props.livestream.company.name) ]\n };\n\n return (\n <>\n {!props.success && !props.error && (\n <>\n <LivestreamDetails\n logoUrl={props.livestream.company.logo?.url}\n logoBgColour={props.livestream.company.metadata?.colour}\n companyId={props.livestream.company.id}\n companyName={props.livestream.company.name}\n eventName={props.livestream.name}\n audiences={props.livestream.audiences}\n startTime={props.livestream.startDateTime}\n endTime={props.livestream.endDateTime}\n timezone={props.livestream.timezone}\n description={!props.formStage && props.livestream.description}\n isPastLivestream={props.isPastLivestream}\n companyAppLink={companyAppLink}\n />\n {props.formStage && (\n <LivestreamForm\n emailAddress={props.emailAddress}\n initialValues={props.initialValues}\n isAuthenticated={props.isAuthenticated}\n showSpinner={props.showSpinner}\n onSubmit={props.onSubmit}\n googleMapsApiKey={props.googleMapsApiKey}\n searchProspectsUrl={props.searchProspectsUrl}\n />\n )}\n {showBook && (\n <button\n className='btn btn-dark w-100'\n onClick={() => props.setFormStage(true)}\n >\n <Text namespace={namespace} phrase='book' />\n </button>\n )}\n {props.isPastLivestream && !props.livestream.recording &&\n <div className={`${styles.noRecording} p-2 rounded`}>\n <Text namespace={namespace} phrase='noRecording' />\n </div>\n }\n {props.livestream.recording &&\n <AppLink\n appLink={{\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PLAY_VIDEO,\n args: [ props.livestream.recording.id, TextHelper.slugify(props.livestream.recording.name) ]\n }}>\n <button className='btn btn-outline-dark w-100'><Text namespace={namespace} phrase='recording' /></button>\n </AppLink>\n }\n {showSignInLink &&\n <>\n <AppLink\n className='mt-3 btn btn-dark w-100'\n appLink={signInLink}\n >\n <Text namespace={namespace} phrase='signInButton' />\n </AppLink>\n <AppLink\n className='d-flex justify-content-center align-items-center mt-3 text-info'\n appLink={{\n application: AppChannels.DEFAULT,\n action: Actions.Default.CONTACT_US_POPUP\n }}\n >\n <Text namespace={namespace} phrase='contactUsLink' />\n </AppLink>\n </>\n }\n </>\n )}\n {props.success && (\n <LivestreamBookingSuccess livestream={props.livestream} />\n )}\n {props.error && (\n <LivestreamBookingError onTryAgain={props.onTryAgain} />\n )}\n </>\n );\n}\n\ninterface LivestreamPopupProps extends LivestreamBookingProps {\n closePopup: () => void;\n}\n\nfunction LivestreamPopup(props: LivestreamPopupProps) {\n function onClose() {\n props.closePopup();\n\n ScrollHelper.preventScrollTop();\n\n const currentAppLink = ContextService.getCurrentRoute().appLink;\n const isLivestreamAppLink =\n currentAppLink.application === AppChannels.LIVESTREAMS &&\n currentAppLink.action === Actions.Livestreams.LIVESTREAM;\n if (isLivestreamAppLink)\n Core.AppLinkHelper.trigger(ContextService.getPreviousRoute()?.appLink);\n }\n\n return (\n <Popup\n size='xl'\n bodyClassName='rounded-3 overflow-hidden p-0'\n closePopup={onClose}\n >\n <button className='btn-close position-absolute top-0 end-0 p-3' onClick={onClose} />\n\n <div className={`row g-0`}>\n <div className='col-12 col-lg-6'>\n <LivestreamCoverImage className={`${styles.coverImage} ${styles.popup}`} coverImageUrl={props.livestream.company.cover?.url} />\n </div>\n <div className={`col-12 col-lg p-4 m-lg-2`}>\n <LivestreamContent {...props} />\n </div>\n </div>\n </Popup>\n );\n}\n\ninterface LivestreamPageProps extends LivestreamBookingProps { }\n\nfunction LivestreamPage(props: LivestreamPageProps) {\n return (\n <div className={`row g-0 px-3`}>\n <div className='col-12 col-md-6 col-lg-5'>\n <LivestreamCoverImage className={`${styles.coverImage} ${styles.page} rounded`} coverImageUrl={props.livestream.company.cover?.url} />\n </div>\n <div className={`col-12 col-md px-md-3 pt-2 pt-md-0`}>\n <LivestreamContent {...props} />\n </div>\n </div>\n );\n}\n\ninterface LivestreamViewProps extends PopupProps {\n id: string;\n fromPageLoad: boolean;\n}\n\nexport function LivestreamView(props: LivestreamViewProps) {\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const fetchAsync = useGetFetchAsync();\n const braze = useStreamableBrazeClientService();\n const [ formStage, _setFormStage ] = React.useState(false);\n const [ success, setSuccess ] = React.useState(false);\n const [ error, setError ] = React.useState(false);\n const [ submitting, setSubmitting ] = React.useState(false);\n const [ initialValues, setInitialValues ] = React.useState<LivestreamBookingFormValues>({\n firstName: '',\n lastName: '',\n email: '',\n attendees: '',\n schoolOrDistrict: '',\n jobTitle: '',\n phoneNumber: '',\n country: '',\n province: '',\n prospectId: ''\n });\n\n const { createOrUpdateProfile } = useProfileApiClient();\n\n const [origin] = useViewModel<PublicOriginViewModel>(\n PUBLIC_ORIGIN_VIEW_MODEL_KEY,\n null,\n { storage: StorageType.SessionStorage }\n );\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const livestream = Flight.useBasicFetch<Livestream>(LivestreamRequests.livestream(props.id));\n\n const { hasPermissions } = usePermissions();\n const isStudent = hasPermissions(PermissionName.StudentExperience);\n\n const pageMetadata = PageMetadataHelper.getDefaultMetadata({\n title: livestream.data?.name,\n description: livestream.data?.description,\n phraseContext: {\n phraseHandler: getPhrase,\n titlePhrase: 'pageTitle',\n descriptionPhrase: 'pageDescription'\n },\n canonicalLink: SeoHelper.getCanonicalLink({\n customAppLink: StreamableAppLinks.livestream(livestream.data)\n }),\n allowIndexing: true,\n product: StreamableConstants.PRODUCT_NAME\n });\n\n useSetPageMetadata({\n ...pageMetadata,\n _isPopupUp: !props.fromPageLoad\n });\n\n useHandleObjectError(livestream);\n\n React.useEffect(() => {\n if (!livestream.data || livestream.data?.status === CurationStatusString.Published) return;\n\n Core.ErrorHelper.throw(new NotFoundError());\n }, [livestream.data?.status]);\n\n React.useEffect(() => {\n if (!currentUser.data?.isAuthenticated) return;\n\n setInitialValues({\n ...initialValues,\n firstName: currentUser.data.givenName,\n lastName: currentUser.data.familyName,\n email: currentUser.data.email\n });\n }, [currentUser.data?.isAuthenticated]);\n\n async function onSubmit(values: LivestreamBookingFormValues) {\n try {\n setSubmitting(true);\n setInitialValues(values);\n\n await fetchAsync(BookingRequests.createBooking({\n eventId: livestream.data.id,\n eventType: 'Livestream',\n firstName: values.firstName,\n lastName: values.lastName,\n email: values.email,\n attendees: values.attendees,\n status: 1\n }));\n\n logEvent(WorkflowPhase.Complete);\n\n if (!currentUser.data?.isAuthenticated) {\n const checkEmail = await fetchAsync<BrazeCheckEmailResponse>(BrazeRequests.checkEmail(values.email));\n\n let crmId: string;\n if (values.prospectId) {\n const prospectLookups = await fetchAsync<ProspectLookup[]>(BrazeRequests.prospectLookups(values.prospectId));\n crmId = prospectLookups?.find(l => l.type === 'crm_id')?.externalId;\n }\n\n createOrUpdateProfile({\n email: values.email,\n firstName: values.firstName,\n lastName: values.lastName,\n phone: values.phoneNumber,\n countryCode: values.country\n });\n\n const brazeUser: BrazeUser = {\n email: values.email,\n firstName: values.firstName,\n lastName: values.lastName,\n phone: values.phoneNumber,\n custom: {\n accountAddress: values?.province ? {\n countryCode: values?.country,\n province: BrazeHelper.parseProvince(values?.province || '')\n } : undefined,\n accountName: values.schoolOrDistrict,\n jobTitle: values.jobTitle,\n syncToCrm: checkEmail?.users?.length ? undefined : true,\n crmId: crmId || undefined\n }\n };\n\n braze.logFormSubmission({\n eventType: StreamableFormEvent.LivestreamBookingFormSubmit,\n source: BrazeSource.LivestreamBooking,\n topic: BrazeTopic.LivestreamBooking,\n user: brazeUser,\n productType: 'sl'\n });\n }\n\n setSuccess(true);\n } catch {\n setError(true);\n _setFormStage(false);\n } finally {\n setSubmitting(false);\n }\n }\n\n function onTryAgain() {\n setError(false);\n _setFormStage(true);\n }\n\n function setFormStage() {\n _setFormStage(true);\n logEvent(WorkflowPhase.Start);\n }\n\n function logEvent(workflowPhase: WorkflowPhase) {\n AnalyticsHelper.logUserAction({\n id: livestream.data.id,\n name: livestream.data.name\n }, {\n entity: EntityType.Livestream,\n actionType: UserAction.Submit,\n location: LocationContext.LivestreamBookingForm,\n descriptor: props.fromPageLoad ?\n LivestreamBookingDescriptor.FullPage :\n LivestreamBookingDescriptor.Popup,\n workflowPhase\n });\n }\n\n const hasLoaded = (\n livestream.hasCompleted &&\n config.hasCompleted\n );\n\n if (!hasLoaded)\n return <></>;\n\n const livestreamBookingProps: LivestreamBookingProps = {\n livestream: livestream.data,\n formStage,\n initialValues,\n isAuthenticated: currentUser.data?.isAuthenticated,\n isStudent,\n success,\n error,\n isPastLivestream: DateHelper.isBefore(livestream.data.endDateTime, new Date()),\n showSpinner: submitting,\n origin,\n onSubmit,\n onTryAgain,\n setFormStage,\n googleMapsApiKey: config.data.googleMapsApiKey,\n searchProspectsUrl: UrlHelper.safeUrlConcat(config.data.gatewayApiUrl, '/v1/search/prospects'),\n emailAddress: currentUser.data?.email\n };\n\n if (props.fromPageLoad) {\n return (\n <LivestreamPage {...livestreamBookingProps} />\n );\n }\n\n return <LivestreamPopup {...livestreamBookingProps} closePopup={props.closePopup} />;\n}"],"names":["namespace","LivestreamDetails","props","getDuration","DateHelper","getTimezoneDateTime","dateTime","TimezoneHelper","getTime","time","getDate","date","getDisplayTimezone","timezone","_a","TIMEZONES_US","getMergedAudienceName","AudienceHelper","logoFallbackBgClassName","getBgColorClass","BG_COLOUR_CLASS_NAMES","jsxs","Fragment","jsx","AppLink","styles","BaseImage","ImageHelper","ImageSize","SvgContainer","CalendarCheckSvg","Text","TimerSvg","SvgContainerSize","CalendarSvg","GlobeSvg","LinkifyHelper","BookingRequests","data","HttpVerbs","LivestreamBookingSuccess","CheckCircleSvg","LivestreamBookingError","ImageUrls","LivestreamCoverImage","getPhrase","LanguageService","baseValidationSchema","Yup.object","Yup.string","guestValidationSchema","LivestreamFormFields","formikProps","useFormikContextWrapper","searchSchoolData","setSearchSchoolData","React","cantFindSchool","setCantFindSchool","clearFormikSchoolData","triggerValidation","setLocalityData","clearLocalityData","setSchoolData","clearSchooldata","onClickNoSuggestions","name","Form","FormField","_b","_c","_d","SearchLocalityInput","SearchSchoolInput","JobTitleInput","_e","_f","CountryCode","_g","jobTitle","_h","_i","SpinnerButton","LivestreamForm","FormWrapper","LivestreamContent","redirectUrl","Core.AppLinkHelper","signInParams","originNewsletter","showSignInLink","showBook","signInLink","AppChannels","Actions","companyAppLink","TextHelper","LivestreamPopup","onClose","ScrollHelper","currentAppLink","ContextService","Popup","LivestreamPage","LivestreamView","config","Flight.useBasicFetch","ConfigRequests","fetchAsync","useGetFetchAsync","braze","useStreamableBrazeClientService","formStage","_setFormStage","success","setSuccess","error","setError","submitting","setSubmitting","initialValues","setInitialValues","createOrUpdateProfile","useProfileApiClient","origin","useViewModel","PUBLIC_ORIGIN_VIEW_MODEL_KEY","StorageType","currentUser","UserRequests","livestream","LivestreamRequests","hasPermissions","usePermissions","isStudent","PermissionName","pageMetadata","PageMetadataHelper","SeoHelper","StreamableAppLinks","StreamableConstants","useSetPageMetadata","useHandleObjectError","CurationStatusString","Core.ErrorHelper","NotFoundError","onSubmit","values","logEvent","WorkflowPhase","checkEmail","BrazeRequests","crmId","prospectLookups","l","brazeUser","BrazeHelper","StreamableFormEvent","BrazeSource","BrazeTopic","onTryAgain","setFormStage","workflowPhase","AnalyticsHelper","EntityType","UserAction","LocationContext","LivestreamBookingDescriptor","livestreamBookingProps","UrlHelper"],"mappings":"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"}
|