@clickview/curator 1.100.0-rc.1 → 1.100.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (321) hide show
  1. package/dist/.vite/manifest.json +1779 -1779
  2. package/dist/Assets/js/dist/scripts/{CYhNyVj0.chunk.js → -6zuD8lo.chunk.js} +2 -2
  3. package/dist/Assets/js/dist/scripts/{CYhNyVj0.chunk.js.map → -6zuD8lo.chunk.js.map} +1 -1
  4. package/dist/Assets/js/dist/scripts/{D28bEsam.chunk.js → 0A42jU2r.chunk.js} +2 -2
  5. package/dist/Assets/js/dist/scripts/{D28bEsam.chunk.js.map → 0A42jU2r.chunk.js.map} +1 -1
  6. package/dist/Assets/js/dist/scripts/{oYHUjbwb2.chunk.js → 0ogjGD4J2.chunk.js} +2 -2
  7. package/dist/Assets/js/dist/scripts/{oYHUjbwb2.chunk.js.map → 0ogjGD4J2.chunk.js.map} +1 -1
  8. package/dist/Assets/js/dist/scripts/{PeuFojmJ2.chunk.js → 2aCj1HHJ2.chunk.js} +2 -2
  9. package/dist/Assets/js/dist/scripts/{PeuFojmJ2.chunk.js.map → 2aCj1HHJ2.chunk.js.map} +1 -1
  10. package/dist/Assets/js/dist/scripts/{q7pjZoNd.chunk.js → 2zbtFQka.chunk.js} +2 -2
  11. package/dist/Assets/js/dist/scripts/{q7pjZoNd.chunk.js.map → 2zbtFQka.chunk.js.map} +1 -1
  12. package/dist/Assets/js/dist/scripts/{0S5J0xX22.chunk.js → 3IQ_8AZP2.chunk.js} +2 -2
  13. package/dist/Assets/js/dist/scripts/{0S5J0xX22.chunk.js.map → 3IQ_8AZP2.chunk.js.map} +1 -1
  14. package/dist/Assets/js/dist/scripts/{DvP7S5Uq.chunk.js → 3eMwLZ5D.chunk.js} +2 -2
  15. package/dist/Assets/js/dist/scripts/{DvP7S5Uq.chunk.js.map → 3eMwLZ5D.chunk.js.map} +1 -1
  16. package/dist/Assets/js/dist/scripts/{y1L3G7XA2.chunk.js → 4Tx2JSvk2.chunk.js} +2 -2
  17. package/dist/Assets/js/dist/scripts/{y1L3G7XA2.chunk.js.map → 4Tx2JSvk2.chunk.js.map} +1 -1
  18. package/dist/Assets/js/dist/scripts/{BbR7yW4A2.chunk.js → 5uVJfyDx2.chunk.js} +2 -2
  19. package/dist/Assets/js/dist/scripts/{BbR7yW4A2.chunk.js.map → 5uVJfyDx2.chunk.js.map} +1 -1
  20. package/dist/Assets/js/dist/scripts/{B52yjTo5.chunk.js → 6l2s6d3Q.chunk.js} +2 -2
  21. package/dist/Assets/js/dist/scripts/{B52yjTo5.chunk.js.map → 6l2s6d3Q.chunk.js.map} +1 -1
  22. package/dist/Assets/js/dist/scripts/{DezIbRcB2.chunk.js → 8RAh0VA72.chunk.js} +2 -2
  23. package/dist/Assets/js/dist/scripts/{DezIbRcB2.chunk.js.map → 8RAh0VA72.chunk.js.map} +1 -1
  24. package/dist/Assets/js/dist/scripts/{CixcMUHF.chunk.js → 9nk_zFtT.chunk.js} +2 -2
  25. package/dist/Assets/js/dist/scripts/{CixcMUHF.chunk.js.map → 9nk_zFtT.chunk.js.map} +1 -1
  26. package/dist/Assets/js/dist/scripts/{Bk9vy70e2.chunk.js → Ae4rMqFm2.chunk.js} +2 -2
  27. package/dist/Assets/js/dist/scripts/{Bk9vy70e2.chunk.js.map → Ae4rMqFm2.chunk.js.map} +1 -1
  28. package/dist/Assets/js/dist/scripts/{Bzh_AwaG.chunk.js → B0mCquXn.chunk.js} +2 -2
  29. package/dist/Assets/js/dist/scripts/{Bzh_AwaG.chunk.js.map → B0mCquXn.chunk.js.map} +1 -1
  30. package/dist/Assets/js/dist/scripts/B1pBJzjh.chunk.js +1 -0
  31. package/dist/Assets/js/dist/scripts/{BswFY0mR2.chunk.js → B6IinlWw2.chunk.js} +2 -2
  32. package/dist/Assets/js/dist/scripts/{BswFY0mR2.chunk.js.map → B6IinlWw2.chunk.js.map} +1 -1
  33. package/dist/Assets/js/dist/scripts/{ClpIRgLR.chunk.js → B6NMAAhW.chunk.js} +2 -2
  34. package/dist/Assets/js/dist/scripts/{ClpIRgLR.chunk.js.map → B6NMAAhW.chunk.js.map} +1 -1
  35. package/dist/Assets/js/dist/scripts/{BCMXlwdC2.chunk.js → B8RZKQTs2.chunk.js} +2 -2
  36. package/dist/Assets/js/dist/scripts/{BCMXlwdC2.chunk.js.map → B8RZKQTs2.chunk.js.map} +1 -1
  37. package/dist/Assets/js/dist/scripts/{CymdouaN.chunk.js → B9R92bqj.chunk.js} +2 -2
  38. package/dist/Assets/js/dist/scripts/{CymdouaN.chunk.js.map → B9R92bqj.chunk.js.map} +1 -1
  39. package/dist/Assets/js/dist/scripts/{CtVYDK7g.chunk.js → BAFYJZ4c.chunk.js} +2 -2
  40. package/dist/Assets/js/dist/scripts/{CtVYDK7g.chunk.js.map → BAFYJZ4c.chunk.js.map} +1 -1
  41. package/dist/Assets/js/dist/scripts/{_wZpe632.chunk.js → BFPSIGJg.chunk.js} +2 -2
  42. package/dist/Assets/js/dist/scripts/{_wZpe632.chunk.js.map → BFPSIGJg.chunk.js.map} +1 -1
  43. package/dist/Assets/js/dist/scripts/{BNHULwJy2.chunk.js → BGiLDtc92.chunk.js} +2 -2
  44. package/dist/Assets/js/dist/scripts/{BNHULwJy2.chunk.js.map → BGiLDtc92.chunk.js.map} +1 -1
  45. package/dist/Assets/js/dist/scripts/{DA9R8atp2.chunk.js → BH6LIpwu2.chunk.js} +2 -2
  46. package/dist/Assets/js/dist/scripts/{DA9R8atp2.chunk.js.map → BH6LIpwu2.chunk.js.map} +1 -1
  47. package/dist/Assets/js/dist/scripts/{DbrVjVdn.chunk.js → BMj3pXcm.chunk.js} +2 -2
  48. package/dist/Assets/js/dist/scripts/{DbrVjVdn.chunk.js.map → BMj3pXcm.chunk.js.map} +1 -1
  49. package/dist/Assets/js/dist/scripts/{CDvLjxwS.chunk.js → BQTfNBFU.chunk.js} +2 -2
  50. package/dist/Assets/js/dist/scripts/{CDvLjxwS.chunk.js.map → BQTfNBFU.chunk.js.map} +1 -1
  51. package/dist/Assets/js/dist/scripts/{mStmtFRo.chunk.js → BT-jeT7C.chunk.js} +2 -2
  52. package/dist/Assets/js/dist/scripts/{mStmtFRo.chunk.js.map → BT-jeT7C.chunk.js.map} +1 -1
  53. package/dist/Assets/js/dist/scripts/{FlF2O19P2.chunk.js → BUD4osIg2.chunk.js} +2 -2
  54. package/dist/Assets/js/dist/scripts/{FlF2O19P2.chunk.js.map → BUD4osIg2.chunk.js.map} +1 -1
  55. package/dist/Assets/js/dist/scripts/{DWS9yr24.chunk.js → BVoG71Kc.chunk.js} +2 -2
  56. package/dist/Assets/js/dist/scripts/{DWS9yr24.chunk.js.map → BVoG71Kc.chunk.js.map} +1 -1
  57. package/dist/Assets/js/dist/scripts/{B9tf3oT62.chunk.js → BW5iVK1B2.chunk.js} +2 -2
  58. package/dist/Assets/js/dist/scripts/{B9tf3oT62.chunk.js.map → BW5iVK1B2.chunk.js.map} +1 -1
  59. package/dist/Assets/js/dist/scripts/{C2mEE4FT.chunk.js → BW9r-3iO.chunk.js} +2 -2
  60. package/dist/Assets/js/dist/scripts/{C2mEE4FT.chunk.js.map → BW9r-3iO.chunk.js.map} +1 -1
  61. package/dist/Assets/js/dist/scripts/{Dpgqkqbp.chunk.js → BX1tMzoa.chunk.js} +2 -2
  62. package/dist/Assets/js/dist/scripts/{Dpgqkqbp.chunk.js.map → BX1tMzoa.chunk.js.map} +1 -1
  63. package/dist/Assets/js/dist/scripts/{DVRzbAn6.chunk.js → BXaC-l33.chunk.js} +2 -2
  64. package/dist/Assets/js/dist/scripts/{DVRzbAn6.chunk.js.map → BXaC-l33.chunk.js.map} +1 -1
  65. package/dist/Assets/js/dist/scripts/{BaR7D4NT2.chunk.js → BY-c3M2b2.chunk.js} +2 -2
  66. package/dist/Assets/js/dist/scripts/{BaR7D4NT2.chunk.js.map → BY-c3M2b2.chunk.js.map} +1 -1
  67. package/dist/Assets/js/dist/scripts/{CJpVJtZk.chunk.js → BYMuPFbe.chunk.js} +2 -2
  68. package/dist/Assets/js/dist/scripts/{CJpVJtZk.chunk.js.map → BYMuPFbe.chunk.js.map} +1 -1
  69. package/dist/Assets/js/dist/scripts/{C5INFWaM2.chunk.js → BaOAOuSc2.chunk.js} +2 -2
  70. package/dist/Assets/js/dist/scripts/{C5INFWaM2.chunk.js.map → BaOAOuSc2.chunk.js.map} +1 -1
  71. package/dist/Assets/js/dist/scripts/{wAWlO6hc.chunk.js → Bb_f3Lku.chunk.js} +2 -2
  72. package/dist/Assets/js/dist/scripts/{wAWlO6hc.chunk.js.map → Bb_f3Lku.chunk.js.map} +1 -1
  73. package/dist/Assets/js/dist/scripts/{BLJO44vl.chunk.js → BdJYoUIO.chunk.js} +2 -2
  74. package/dist/Assets/js/dist/scripts/{BLJO44vl.chunk.js.map → BdJYoUIO.chunk.js.map} +1 -1
  75. package/dist/Assets/js/dist/scripts/{CW2k5Ut-2.chunk.js → Bf-6iyfX2.chunk.js} +2 -2
  76. package/dist/Assets/js/dist/scripts/{CW2k5Ut-2.chunk.js.map → Bf-6iyfX2.chunk.js.map} +1 -1
  77. package/dist/Assets/js/dist/scripts/{DxL0ZEcN2.chunk.js → BiPUuGEE2.chunk.js} +2 -2
  78. package/dist/Assets/js/dist/scripts/{DxL0ZEcN2.chunk.js.map → BiPUuGEE2.chunk.js.map} +1 -1
  79. package/dist/Assets/js/dist/scripts/{2XS-c0Xo.chunk.js → Bj4-NRWf.chunk.js} +2 -2
  80. package/dist/Assets/js/dist/scripts/{2XS-c0Xo.chunk.js.map → Bj4-NRWf.chunk.js.map} +1 -1
  81. package/dist/Assets/js/dist/scripts/{D13ViJt82.chunk.js → BkVcraos2.chunk.js} +2 -2
  82. package/dist/Assets/js/dist/scripts/{D13ViJt82.chunk.js.map → BkVcraos2.chunk.js.map} +1 -1
  83. package/dist/Assets/js/dist/scripts/{U1L4Dfoc.chunk.js → BkZ7WS_H.chunk.js} +2 -2
  84. package/dist/Assets/js/dist/scripts/{U1L4Dfoc.chunk.js.map → BkZ7WS_H.chunk.js.map} +1 -1
  85. package/dist/Assets/js/dist/scripts/{DoQiTqRX2.chunk.js → BoMt5mMW2.chunk.js} +2 -2
  86. package/dist/Assets/js/dist/scripts/{DoQiTqRX2.chunk.js.map → BoMt5mMW2.chunk.js.map} +1 -1
  87. package/dist/Assets/js/dist/scripts/{Da_9BBKD2.chunk.js → Bo_WsHZq2.chunk.js} +2 -2
  88. package/dist/Assets/js/dist/scripts/{Da_9BBKD2.chunk.js.map → Bo_WsHZq2.chunk.js.map} +1 -1
  89. package/dist/Assets/js/dist/scripts/{CnyrKBG0.chunk.js → BpV5ErII.chunk.js} +2 -2
  90. package/dist/Assets/js/dist/scripts/{CnyrKBG0.chunk.js.map → BpV5ErII.chunk.js.map} +1 -1
  91. package/dist/Assets/js/dist/scripts/{Dfhl7nI62.chunk.js → BrBPGjLi2.chunk.js} +2 -2
  92. package/dist/Assets/js/dist/scripts/{Dfhl7nI62.chunk.js.map → BrBPGjLi2.chunk.js.map} +1 -1
  93. package/dist/Assets/js/dist/scripts/{DcxGcCkR.chunk.js → BrHyZG_m.chunk.js} +2 -2
  94. package/dist/Assets/js/dist/scripts/{DcxGcCkR.chunk.js.map → BrHyZG_m.chunk.js.map} +1 -1
  95. package/dist/Assets/js/dist/scripts/{FXPxauLF.chunk.js → Bu4F3uuX.chunk.js} +2 -2
  96. package/dist/Assets/js/dist/scripts/{FXPxauLF.chunk.js.map → Bu4F3uuX.chunk.js.map} +1 -1
  97. package/dist/Assets/js/dist/scripts/{DZdJx-7j.chunk.js → BvW9SXzy.chunk.js} +2 -2
  98. package/dist/Assets/js/dist/scripts/{DZdJx-7j.chunk.js.map → BvW9SXzy.chunk.js.map} +1 -1
  99. package/dist/Assets/js/dist/scripts/{CAU0Lbgd.chunk.js → BwKHls91.chunk.js} +2 -2
  100. package/dist/Assets/js/dist/scripts/{CAU0Lbgd.chunk.js.map → BwKHls91.chunk.js.map} +1 -1
  101. package/dist/Assets/js/dist/scripts/{BiTzUyxj2.chunk.js → BxZNJjbX2.chunk.js} +2 -2
  102. package/dist/Assets/js/dist/scripts/{BiTzUyxj2.chunk.js.map → BxZNJjbX2.chunk.js.map} +1 -1
  103. package/dist/Assets/js/dist/scripts/{cymXuIcM.chunk.js → BygVW5WL.chunk.js} +2 -2
  104. package/dist/Assets/js/dist/scripts/{cymXuIcM.chunk.js.map → BygVW5WL.chunk.js.map} +1 -1
  105. package/dist/Assets/js/dist/scripts/{Dx07A6Ct.chunk.js → ByzsHBuo.chunk.js} +2 -2
  106. package/dist/Assets/js/dist/scripts/{Dx07A6Ct.chunk.js.map → ByzsHBuo.chunk.js.map} +1 -1
  107. package/dist/Assets/js/dist/scripts/C-M2om56.chunk.js +3 -0
  108. package/dist/Assets/js/dist/scripts/C-M2om56.chunk.js.map +1 -0
  109. package/dist/Assets/js/dist/scripts/{B6dlmRQL.chunk.js → C0UYMHUe.chunk.js} +2 -2
  110. package/dist/Assets/js/dist/scripts/{B6dlmRQL.chunk.js.map → C0UYMHUe.chunk.js.map} +1 -1
  111. package/dist/Assets/js/dist/scripts/{V0N7tCBl.chunk.js → C0_pEFCD.chunk.js} +2 -2
  112. package/dist/Assets/js/dist/scripts/{V0N7tCBl.chunk.js.map → C0_pEFCD.chunk.js.map} +1 -1
  113. package/dist/Assets/js/dist/scripts/{Cpr1J8Rk2.chunk.js → C2jRLu4_2.chunk.js} +2 -2
  114. package/dist/Assets/js/dist/scripts/{Cpr1J8Rk2.chunk.js.map → C2jRLu4_2.chunk.js.map} +1 -1
  115. package/dist/Assets/js/dist/scripts/{CY56FWb9.chunk.js → C2tBl3l9.chunk.js} +2 -2
  116. package/dist/Assets/js/dist/scripts/{CY56FWb9.chunk.js.map → C2tBl3l9.chunk.js.map} +1 -1
  117. package/dist/Assets/js/dist/scripts/{C3Lx9PwR.chunk.js → C4eazpDh.chunk.js} +2 -2
  118. package/dist/Assets/js/dist/scripts/{C3Lx9PwR.chunk.js.map → C4eazpDh.chunk.js.map} +1 -1
  119. package/dist/Assets/js/dist/scripts/{puobgAYi.chunk.js → CBq4vrjT.chunk.js} +2 -2
  120. package/dist/Assets/js/dist/scripts/{puobgAYi.chunk.js.map → CBq4vrjT.chunk.js.map} +1 -1
  121. package/dist/Assets/js/dist/scripts/{Bcx1C8ae.chunk.js → CBzqRw-k.chunk.js} +2 -2
  122. package/dist/Assets/js/dist/scripts/{Bcx1C8ae.chunk.js.map → CBzqRw-k.chunk.js.map} +1 -1
  123. package/dist/Assets/js/dist/scripts/{BD6DIPGL2.chunk.js → CDAdfAL02.chunk.js} +2 -2
  124. package/dist/Assets/js/dist/scripts/{BD6DIPGL2.chunk.js.map → CDAdfAL02.chunk.js.map} +1 -1
  125. package/dist/Assets/js/dist/scripts/{Ddp1uNfH.chunk.js → CE1Dxq8p.chunk.js} +2 -2
  126. package/dist/Assets/js/dist/scripts/{Ddp1uNfH.chunk.js.map → CE1Dxq8p.chunk.js.map} +1 -1
  127. package/dist/Assets/js/dist/scripts/{C99MPG7E.chunk.js → CG2julEA.chunk.js} +2 -2
  128. package/dist/Assets/js/dist/scripts/{C99MPG7E.chunk.js.map → CG2julEA.chunk.js.map} +1 -1
  129. package/dist/Assets/js/dist/scripts/{tyY3GHEC2.chunk.js → CGcN4g0d2.chunk.js} +2 -2
  130. package/dist/Assets/js/dist/scripts/{tyY3GHEC2.chunk.js.map → CGcN4g0d2.chunk.js.map} +1 -1
  131. package/dist/Assets/js/dist/scripts/{wODD7tmB2.chunk.js → CJmV_FfR2.chunk.js} +2 -2
  132. package/dist/Assets/js/dist/scripts/{wODD7tmB2.chunk.js.map → CJmV_FfR2.chunk.js.map} +1 -1
  133. package/dist/Assets/js/dist/scripts/{DavA1dZZ.chunk.js → CKvVGIRL.chunk.js} +2 -2
  134. package/dist/Assets/js/dist/scripts/{DavA1dZZ.chunk.js.map → CKvVGIRL.chunk.js.map} +1 -1
  135. package/dist/Assets/js/dist/scripts/{CrndJnZp.chunk.js → CL1DcbTZ.chunk.js} +2 -2
  136. package/dist/Assets/js/dist/scripts/{CrndJnZp.chunk.js.map → CL1DcbTZ.chunk.js.map} +1 -1
  137. package/dist/Assets/js/dist/scripts/{DLLL2lwS.chunk.js → CNLx6_fS.chunk.js} +2 -2
  138. package/dist/Assets/js/dist/scripts/{DLLL2lwS.chunk.js.map → CNLx6_fS.chunk.js.map} +1 -1
  139. package/dist/Assets/js/dist/scripts/{w2lackHw.chunk.js → CNUVs80P.chunk.js} +2 -2
  140. package/dist/Assets/js/dist/scripts/{w2lackHw.chunk.js.map → CNUVs80P.chunk.js.map} +1 -1
  141. package/dist/Assets/js/dist/scripts/{CCzvD0H4.chunk.js → CPa__SNX.chunk.js} +2 -2
  142. package/dist/Assets/js/dist/scripts/{CCzvD0H4.chunk.js.map → CPa__SNX.chunk.js.map} +1 -1
  143. package/dist/Assets/js/dist/scripts/{DeDh-wVP.chunk.js → CSA2Tnv9.chunk.js} +2 -2
  144. package/dist/Assets/js/dist/scripts/{DeDh-wVP.chunk.js.map → CSA2Tnv9.chunk.js.map} +1 -1
  145. package/dist/Assets/js/dist/scripts/{CjZJx6-O2.chunk.js → CT-xEpNT2.chunk.js} +2 -2
  146. package/dist/Assets/js/dist/scripts/{CjZJx6-O2.chunk.js.map → CT-xEpNT2.chunk.js.map} +1 -1
  147. package/dist/Assets/js/dist/scripts/{BRPP3VZ1.chunk.js → CT0vfLa0.chunk.js} +2 -2
  148. package/dist/Assets/js/dist/scripts/{BRPP3VZ1.chunk.js.map → CT0vfLa0.chunk.js.map} +1 -1
  149. package/dist/Assets/js/dist/scripts/{DGjNB2Bz.chunk.js → CUDnXypB.chunk.js} +2 -2
  150. package/dist/Assets/js/dist/scripts/{DGjNB2Bz.chunk.js.map → CUDnXypB.chunk.js.map} +1 -1
  151. package/dist/Assets/js/dist/scripts/{cXanUGwK.chunk.js → CeMQZB5J.chunk.js} +2 -2
  152. package/dist/Assets/js/dist/scripts/{cXanUGwK.chunk.js.map → CeMQZB5J.chunk.js.map} +1 -1
  153. package/dist/Assets/js/dist/scripts/Cf5cjLzK.chunk.js +2 -0
  154. package/dist/Assets/js/dist/scripts/{D2iK_uRt.chunk.js.map → Cf5cjLzK.chunk.js.map} +1 -1
  155. package/dist/Assets/js/dist/scripts/{CRNBuqmR.chunk.js → CfGaxIgd.chunk.js} +2 -2
  156. package/dist/Assets/js/dist/scripts/{CRNBuqmR.chunk.js.map → CfGaxIgd.chunk.js.map} +1 -1
  157. package/dist/Assets/js/dist/scripts/{BNr7ZL3F2.chunk.js → Cqfub35W2.chunk.js} +2 -2
  158. package/dist/Assets/js/dist/scripts/{BNr7ZL3F2.chunk.js.map → Cqfub35W2.chunk.js.map} +1 -1
  159. package/dist/Assets/js/dist/scripts/{DRmwJ1it2.chunk.js → Cv8UpP5_2.chunk.js} +2 -2
  160. package/dist/Assets/js/dist/scripts/{DRmwJ1it2.chunk.js.map → Cv8UpP5_2.chunk.js.map} +1 -1
  161. package/dist/Assets/js/dist/scripts/{DOfeXfSj.chunk.js → CvV6jx2d.chunk.js} +2 -2
  162. package/dist/Assets/js/dist/scripts/{DOfeXfSj.chunk.js.map → CvV6jx2d.chunk.js.map} +1 -1
  163. package/dist/Assets/js/dist/scripts/{DnGnhqys.chunk.js → CxENQntH.chunk.js} +2 -2
  164. package/dist/Assets/js/dist/scripts/{DnGnhqys.chunk.js.map → CxENQntH.chunk.js.map} +1 -1
  165. package/dist/Assets/js/dist/scripts/{NMDkdR-8.chunk.js → CxIfJCSc.chunk.js} +2 -2
  166. package/dist/Assets/js/dist/scripts/{NMDkdR-8.chunk.js.map → CxIfJCSc.chunk.js.map} +1 -1
  167. package/dist/Assets/js/dist/scripts/{B9H-d-YC.chunk.js → CxggKQxV.chunk.js} +2 -2
  168. package/dist/Assets/js/dist/scripts/{B9H-d-YC.chunk.js.map → CxggKQxV.chunk.js.map} +1 -1
  169. package/dist/Assets/js/dist/scripts/{B3I44IzQ.chunk.js → CyNNZ1So.chunk.js} +2 -2
  170. package/dist/Assets/js/dist/scripts/{B3I44IzQ.chunk.js.map → CyNNZ1So.chunk.js.map} +1 -1
  171. package/dist/Assets/js/dist/scripts/{B2V1N14S.chunk.js → Cz-WSyAE.chunk.js} +2 -2
  172. package/dist/Assets/js/dist/scripts/{B2V1N14S.chunk.js.map → Cz-WSyAE.chunk.js.map} +1 -1
  173. package/dist/Assets/js/dist/scripts/{S9cTzcQc2.chunk.js → D2aQFJWt2.chunk.js} +2 -2
  174. package/dist/Assets/js/dist/scripts/{S9cTzcQc2.chunk.js.map → D2aQFJWt2.chunk.js.map} +1 -1
  175. package/dist/Assets/js/dist/scripts/{CEsXUxxo2.chunk.js → D2h9W4GA2.chunk.js} +2 -2
  176. package/dist/Assets/js/dist/scripts/{CEsXUxxo2.chunk.js.map → D2h9W4GA2.chunk.js.map} +1 -1
  177. package/dist/Assets/js/dist/scripts/{DqCsVhOS.chunk.js → D3NAhMJm.chunk.js} +2 -2
  178. package/dist/Assets/js/dist/scripts/{DqCsVhOS.chunk.js.map → D3NAhMJm.chunk.js.map} +1 -1
  179. package/dist/Assets/js/dist/scripts/{DpM1KgHy.chunk.js → D3aWaqBW.chunk.js} +2 -2
  180. package/dist/Assets/js/dist/scripts/{DpM1KgHy.chunk.js.map → D3aWaqBW.chunk.js.map} +1 -1
  181. package/dist/Assets/js/dist/scripts/{CxtxOtyF2.chunk.js → D4xcR0492.chunk.js} +2 -2
  182. package/dist/Assets/js/dist/scripts/{CxtxOtyF2.chunk.js.map → D4xcR0492.chunk.js.map} +1 -1
  183. package/dist/Assets/js/dist/scripts/{BEeh_Vbr.chunk.js → D5ek2PiI.chunk.js} +2 -2
  184. package/dist/Assets/js/dist/scripts/{BEeh_Vbr.chunk.js.map → D5ek2PiI.chunk.js.map} +1 -1
  185. package/dist/Assets/js/dist/scripts/{DjqQYm43.chunk.js → D61ei_h6.chunk.js} +2 -2
  186. package/dist/Assets/js/dist/scripts/{DjqQYm43.chunk.js.map → D61ei_h6.chunk.js.map} +1 -1
  187. package/dist/Assets/js/dist/scripts/{lgpeNdac.chunk.js → D6wyTufc.chunk.js} +2 -2
  188. package/dist/Assets/js/dist/scripts/{lgpeNdac.chunk.js.map → D6wyTufc.chunk.js.map} +1 -1
  189. package/dist/Assets/js/dist/scripts/{B8li8ced.chunk.js → D7I90XOo.chunk.js} +2 -2
  190. package/dist/Assets/js/dist/scripts/{B8li8ced.chunk.js.map → D7I90XOo.chunk.js.map} +1 -1
  191. package/dist/Assets/js/dist/scripts/{DBAwgllB.chunk.js → DArfNv9S.chunk.js} +2 -2
  192. package/dist/Assets/js/dist/scripts/{DBAwgllB.chunk.js.map → DArfNv9S.chunk.js.map} +1 -1
  193. package/dist/Assets/js/dist/scripts/{B6uYrrzJ2.chunk.js → DB-51xws2.chunk.js} +2 -2
  194. package/dist/Assets/js/dist/scripts/{B6uYrrzJ2.chunk.js.map → DB-51xws2.chunk.js.map} +1 -1
  195. package/dist/Assets/js/dist/scripts/{C-flCrUr.chunk.js → DENdEA1F.chunk.js} +2 -2
  196. package/dist/Assets/js/dist/scripts/{C-flCrUr.chunk.js.map → DENdEA1F.chunk.js.map} +1 -1
  197. package/dist/Assets/js/dist/scripts/{BuF_pg9-2.chunk.js → DFYiLmms2.chunk.js} +2 -2
  198. package/dist/Assets/js/dist/scripts/{BuF_pg9-2.chunk.js.map → DFYiLmms2.chunk.js.map} +1 -1
  199. package/dist/Assets/js/dist/scripts/{BE6LUVEo2.chunk.js → DHa-x1js2.chunk.js} +2 -2
  200. package/dist/Assets/js/dist/scripts/{BE6LUVEo2.chunk.js.map → DHa-x1js2.chunk.js.map} +1 -1
  201. package/dist/Assets/js/dist/scripts/{DDHep0UM.chunk.js → DHeA2NJS.chunk.js} +2 -2
  202. package/dist/Assets/js/dist/scripts/{DDHep0UM.chunk.js.map → DHeA2NJS.chunk.js.map} +1 -1
  203. package/dist/Assets/js/dist/scripts/{D5OaPA-v.chunk.js → DIDxfMO_.chunk.js} +2 -2
  204. package/dist/Assets/js/dist/scripts/{D5OaPA-v.chunk.js.map → DIDxfMO_.chunk.js.map} +1 -1
  205. package/dist/Assets/js/dist/scripts/{CV7UIOmh2.chunk.js → DMq1wDNm2.chunk.js} +2 -2
  206. package/dist/Assets/js/dist/scripts/{CV7UIOmh2.chunk.js.map → DMq1wDNm2.chunk.js.map} +1 -1
  207. package/dist/Assets/js/dist/scripts/{ByMU9ltp2.chunk.js → DNWM9yfh2.chunk.js} +2 -2
  208. package/dist/Assets/js/dist/scripts/{ByMU9ltp2.chunk.js.map → DNWM9yfh2.chunk.js.map} +1 -1
  209. package/dist/Assets/js/dist/scripts/{DFwtjofq2.chunk.js → DSj7VCEo2.chunk.js} +2 -2
  210. package/dist/Assets/js/dist/scripts/{DFwtjofq2.chunk.js.map → DSj7VCEo2.chunk.js.map} +1 -1
  211. package/dist/Assets/js/dist/scripts/{BSYuzR8N2.chunk.js → DSvehN9D2.chunk.js} +2 -2
  212. package/dist/Assets/js/dist/scripts/{BSYuzR8N2.chunk.js.map → DSvehN9D2.chunk.js.map} +1 -1
  213. package/dist/Assets/js/dist/scripts/{FS74_jrx.chunk.js → DTvCgZ4c.chunk.js} +2 -2
  214. package/dist/Assets/js/dist/scripts/{FS74_jrx.chunk.js.map → DTvCgZ4c.chunk.js.map} +1 -1
  215. package/dist/Assets/js/dist/scripts/{C7Gmh7eY.chunk.js → DWHKdmdQ.chunk.js} +2 -2
  216. package/dist/Assets/js/dist/scripts/{C7Gmh7eY.chunk.js.map → DWHKdmdQ.chunk.js.map} +1 -1
  217. package/dist/Assets/js/dist/scripts/{DXcaOjI_.chunk.js → DYFGF9Pe.chunk.js} +2 -2
  218. package/dist/Assets/js/dist/scripts/{DXcaOjI_.chunk.js.map → DYFGF9Pe.chunk.js.map} +1 -1
  219. package/dist/Assets/js/dist/scripts/{CIw53qNO2.chunk.js → DYOxTenc2.chunk.js} +2 -2
  220. package/dist/Assets/js/dist/scripts/{CIw53qNO2.chunk.js.map → DYOxTenc2.chunk.js.map} +1 -1
  221. package/dist/Assets/js/dist/scripts/{CignflP_2.chunk.js → DZthp5T62.chunk.js} +2 -2
  222. package/dist/Assets/js/dist/scripts/{CignflP_2.chunk.js.map → DZthp5T62.chunk.js.map} +1 -1
  223. package/dist/Assets/js/dist/scripts/{BlqDwJRY.chunk.js → Djgwr16q.chunk.js} +2 -2
  224. package/dist/Assets/js/dist/scripts/{BlqDwJRY.chunk.js.map → Djgwr16q.chunk.js.map} +1 -1
  225. package/dist/Assets/js/dist/scripts/{BwToh2X9.chunk.js → DjnvbVQs.chunk.js} +2 -2
  226. package/dist/Assets/js/dist/scripts/{BwToh2X9.chunk.js.map → DjnvbVQs.chunk.js.map} +1 -1
  227. package/dist/Assets/js/dist/scripts/{UelJUmgx2.chunk.js → DmrhyI9D2.chunk.js} +2 -2
  228. package/dist/Assets/js/dist/scripts/{UelJUmgx2.chunk.js.map → DmrhyI9D2.chunk.js.map} +1 -1
  229. package/dist/Assets/js/dist/scripts/{0KUhq7W7.chunk.js → DnZGILQc.chunk.js} +2 -2
  230. package/dist/Assets/js/dist/scripts/{0KUhq7W7.chunk.js.map → DnZGILQc.chunk.js.map} +1 -1
  231. package/dist/Assets/js/dist/scripts/{BSPrErub.chunk.js → DqnZw1cj.chunk.js} +2 -2
  232. package/dist/Assets/js/dist/scripts/{BSPrErub.chunk.js.map → DqnZw1cj.chunk.js.map} +1 -1
  233. package/dist/Assets/js/dist/scripts/{Bkx2vKcX2.chunk.js → DrAKpy8L2.chunk.js} +2 -2
  234. package/dist/Assets/js/dist/scripts/{Bkx2vKcX2.chunk.js.map → DrAKpy8L2.chunk.js.map} +1 -1
  235. package/dist/Assets/js/dist/scripts/{DX9DFxX2.chunk.js → DsM1bfoR.chunk.js} +2 -2
  236. package/dist/Assets/js/dist/scripts/{DX9DFxX2.chunk.js.map → DsM1bfoR.chunk.js.map} +1 -1
  237. package/dist/Assets/js/dist/scripts/{Dh3G-ann.chunk.js → Dt2TCPUI.chunk.js} +2 -2
  238. package/dist/Assets/js/dist/scripts/{Dh3G-ann.chunk.js.map → Dt2TCPUI.chunk.js.map} +1 -1
  239. package/dist/Assets/js/dist/scripts/{DA6Ynhan.chunk.js → DtylOK55.chunk.js} +2 -2
  240. package/dist/Assets/js/dist/scripts/{DA6Ynhan.chunk.js.map → DtylOK55.chunk.js.map} +1 -1
  241. package/dist/Assets/js/dist/scripts/{CJBiVila2.chunk.js → DuTcsFNo2.chunk.js} +2 -2
  242. package/dist/Assets/js/dist/scripts/{CJBiVila2.chunk.js.map → DuTcsFNo2.chunk.js.map} +1 -1
  243. package/dist/Assets/js/dist/scripts/{BBFS0f7w.chunk.js → Dw0mo6Cf.chunk.js} +2 -2
  244. package/dist/Assets/js/dist/scripts/{BBFS0f7w.chunk.js.map → Dw0mo6Cf.chunk.js.map} +1 -1
  245. package/dist/Assets/js/dist/scripts/{Cg5KHpRA.chunk.js → DwISzabN.chunk.js} +2 -2
  246. package/dist/Assets/js/dist/scripts/{Cg5KHpRA.chunk.js.map → DwISzabN.chunk.js.map} +1 -1
  247. package/dist/Assets/js/dist/scripts/{DMxtE2iS.chunk.js → DxW67uUT.chunk.js} +2 -2
  248. package/dist/Assets/js/dist/scripts/{DMxtE2iS.chunk.js.map → DxW67uUT.chunk.js.map} +1 -1
  249. package/dist/Assets/js/dist/scripts/{BOGS-BOS.chunk.js → Eg4zYYCO.chunk.js} +2 -2
  250. package/dist/Assets/js/dist/scripts/{BOGS-BOS.chunk.js.map → Eg4zYYCO.chunk.js.map} +1 -1
  251. package/dist/Assets/js/dist/scripts/{CSuC7le7.chunk.js → GT6nO4Jv.chunk.js} +2 -2
  252. package/dist/Assets/js/dist/scripts/{CSuC7le7.chunk.js.map → GT6nO4Jv.chunk.js.map} +1 -1
  253. package/dist/Assets/js/dist/scripts/{BhKv6dKl2.chunk.js → GpDEun8c2.chunk.js} +2 -2
  254. package/dist/Assets/js/dist/scripts/{BhKv6dKl2.chunk.js.map → GpDEun8c2.chunk.js.map} +1 -1
  255. package/dist/Assets/js/dist/scripts/{DKJC5qg0.chunk.js → OKjYL31I.chunk.js} +2 -2
  256. package/dist/Assets/js/dist/scripts/{DKJC5qg0.chunk.js.map → OKjYL31I.chunk.js.map} +1 -1
  257. package/dist/Assets/js/dist/scripts/{D8rrJ-jY2.chunk.js → OrCUhFjq2.chunk.js} +2 -2
  258. package/dist/Assets/js/dist/scripts/{D8rrJ-jY2.chunk.js.map → OrCUhFjq2.chunk.js.map} +1 -1
  259. package/dist/Assets/js/dist/scripts/{D3exV_Ay2.chunk.js → SVXAAhk02.chunk.js} +2 -2
  260. package/dist/Assets/js/dist/scripts/{D3exV_Ay2.chunk.js.map → SVXAAhk02.chunk.js.map} +1 -1
  261. package/dist/Assets/js/dist/scripts/{CcZKy7SH.chunk.js → SmmnJrec.chunk.js} +2 -2
  262. package/dist/Assets/js/dist/scripts/{CcZKy7SH.chunk.js.map → SmmnJrec.chunk.js.map} +1 -1
  263. package/dist/Assets/js/dist/scripts/{Dy4nscVE2.chunk.js → T3BageSw2.chunk.js} +2 -2
  264. package/dist/Assets/js/dist/scripts/{Dy4nscVE2.chunk.js.map → T3BageSw2.chunk.js.map} +1 -1
  265. package/dist/Assets/js/dist/scripts/{B8PM5Ji3.chunk.js → T6xxjp_W.chunk.js} +2 -2
  266. package/dist/Assets/js/dist/scripts/{B8PM5Ji3.chunk.js.map → T6xxjp_W.chunk.js.map} +1 -1
  267. package/dist/Assets/js/dist/scripts/{Cp6Af16p.chunk.js → Uc2eW092.chunk.js} +2 -2
  268. package/dist/Assets/js/dist/scripts/{Cp6Af16p.chunk.js.map → Uc2eW092.chunk.js.map} +1 -1
  269. package/dist/Assets/js/dist/scripts/{DmKyGgLu.chunk.js → XHoEdG1q.chunk.js} +2 -2
  270. package/dist/Assets/js/dist/scripts/{DmKyGgLu.chunk.js.map → XHoEdG1q.chunk.js.map} +1 -1
  271. package/dist/Assets/js/dist/scripts/{BdVoyBI02.chunk.js → Y14NYZ692.chunk.js} +2 -2
  272. package/dist/Assets/js/dist/scripts/{BdVoyBI02.chunk.js.map → Y14NYZ692.chunk.js.map} +1 -1
  273. package/dist/Assets/js/dist/scripts/{DrszevCi.chunk.js → Y_IcNhI9.chunk.js} +2 -2
  274. package/dist/Assets/js/dist/scripts/{DrszevCi.chunk.js.map → Y_IcNhI9.chunk.js.map} +1 -1
  275. package/dist/Assets/js/dist/scripts/{CMGpVYHd.chunk.js → Yr5eNz05.chunk.js} +2 -2
  276. package/dist/Assets/js/dist/scripts/{CMGpVYHd.chunk.js.map → Yr5eNz05.chunk.js.map} +1 -1
  277. package/dist/Assets/js/dist/scripts/{QnwProbJ2.chunk.js → Yrc9o6bG2.chunk.js} +2 -2
  278. package/dist/Assets/js/dist/scripts/{QnwProbJ2.chunk.js.map → Yrc9o6bG2.chunk.js.map} +1 -1
  279. package/dist/Assets/js/dist/scripts/{app-Dl-tzfIp.js → app-RphP4Ht0.js} +4 -4
  280. package/dist/Assets/js/dist/scripts/{app-Dl-tzfIp.js.map → app-RphP4Ht0.js.map} +1 -1
  281. package/dist/Assets/js/dist/scripts/{B96Bwi2D.chunk.js → cUgHqo-u.chunk.js} +2 -2
  282. package/dist/Assets/js/dist/scripts/{B96Bwi2D.chunk.js.map → cUgHqo-u.chunk.js.map} +1 -1
  283. package/dist/Assets/js/dist/scripts/{oGkpmMft2.chunk.js → dmUfJoJz2.chunk.js} +2 -2
  284. package/dist/Assets/js/dist/scripts/{oGkpmMft2.chunk.js.map → dmUfJoJz2.chunk.js.map} +1 -1
  285. package/dist/Assets/js/dist/scripts/{DjlPflaG.chunk.js → fapHSEex.chunk.js} +2 -2
  286. package/dist/Assets/js/dist/scripts/{DjlPflaG.chunk.js.map → fapHSEex.chunk.js.map} +1 -1
  287. package/dist/Assets/js/dist/scripts/{CaEXONXp2.chunk.js → jf0e_ii92.chunk.js} +2 -2
  288. package/dist/Assets/js/dist/scripts/{CaEXONXp2.chunk.js.map → jf0e_ii92.chunk.js.map} +1 -1
  289. package/dist/Assets/js/dist/scripts/{Co7TevGA.chunk.js → kp4jXqVv.chunk.js} +2 -2
  290. package/dist/Assets/js/dist/scripts/{Co7TevGA.chunk.js.map → kp4jXqVv.chunk.js.map} +1 -1
  291. package/dist/Assets/js/dist/scripts/lAvSm0ti.chunk.js +2 -0
  292. package/dist/Assets/js/dist/scripts/lAvSm0ti.chunk.js.map +1 -0
  293. package/dist/Assets/js/dist/scripts/{Dmf5vYc42.chunk.js → n7lzp_Mc2.chunk.js} +2 -2
  294. package/dist/Assets/js/dist/scripts/{Dmf5vYc42.chunk.js.map → n7lzp_Mc2.chunk.js.map} +1 -1
  295. package/dist/Assets/js/dist/scripts/{CG9yCT4r2.chunk.js → nvtWO4PW2.chunk.js} +2 -2
  296. package/dist/Assets/js/dist/scripts/{CG9yCT4r2.chunk.js.map → nvtWO4PW2.chunk.js.map} +1 -1
  297. package/dist/Assets/js/dist/scripts/{CACu0hGi2.chunk.js → oYKM19q12.chunk.js} +2 -2
  298. package/dist/Assets/js/dist/scripts/{CACu0hGi2.chunk.js.map → oYKM19q12.chunk.js.map} +1 -1
  299. package/dist/Assets/js/dist/scripts/{B5v11U7g.chunk.js → ohTu1tHz.chunk.js} +2 -2
  300. package/dist/Assets/js/dist/scripts/{B5v11U7g.chunk.js.map → ohTu1tHz.chunk.js.map} +1 -1
  301. package/dist/Assets/js/dist/scripts/{BrT-onLe2.chunk.js → uCRnfBEw2.chunk.js} +2 -2
  302. package/dist/Assets/js/dist/scripts/{BrT-onLe2.chunk.js.map → uCRnfBEw2.chunk.js.map} +1 -1
  303. package/dist/Assets/js/dist/scripts/{3XkTogZ22.chunk.js → udVWVmrH2.chunk.js} +2 -2
  304. package/dist/Assets/js/dist/scripts/{3XkTogZ22.chunk.js.map → udVWVmrH2.chunk.js.map} +1 -1
  305. package/dist/Assets/js/dist/scripts/{DW-yUqjB2.chunk.js → v0VARBBE2.chunk.js} +2 -2
  306. package/dist/Assets/js/dist/scripts/{DW-yUqjB2.chunk.js.map → v0VARBBE2.chunk.js.map} +1 -1
  307. package/dist/Assets/js/dist/scripts/{B4lIRWK22.chunk.js → vf9_5VGa2.chunk.js} +2 -2
  308. package/dist/Assets/js/dist/scripts/{B4lIRWK22.chunk.js.map → vf9_5VGa2.chunk.js.map} +1 -1
  309. package/dist/Assets/js/dist/scripts/{pOwOak4Z2.chunk.js → wTEWtWoE2.chunk.js} +2 -2
  310. package/dist/Assets/js/dist/scripts/{pOwOak4Z2.chunk.js.map → wTEWtWoE2.chunk.js.map} +1 -1
  311. package/dist/Assets/js/dist/scripts/{DPYIBfGB.chunk.js → xj8_Pfx7.chunk.js} +2 -2
  312. package/dist/Assets/js/dist/scripts/{DPYIBfGB.chunk.js.map → xj8_Pfx7.chunk.js.map} +1 -1
  313. package/dist/bundles.json +1 -1
  314. package/dist/en.json +1 -1
  315. package/package.json +1 -1
  316. package/dist/Assets/js/dist/scripts/D2iK_uRt.chunk.js +0 -2
  317. package/dist/Assets/js/dist/scripts/DBUreHJA.chunk.js +0 -3
  318. package/dist/Assets/js/dist/scripts/DBUreHJA.chunk.js.map +0 -1
  319. package/dist/Assets/js/dist/scripts/Dh5DbdtP.chunk.js +0 -2
  320. package/dist/Assets/js/dist/scripts/Dh5DbdtP.chunk.js.map +0 -1
  321. package/dist/Assets/js/dist/scripts/DrBVabtm.chunk.js +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"DMxtE2iS.chunk.js","names":["context","AccordionContext","AccordionItemContext","AccordionContext","AccordionButton","AccordionItemContext","AccordionButton","AccordionItemContext"],"sources":["../../../../../../../libs/shared/src/interfaces/models/Widget.ts","../../../../../../../../node_modules/react-bootstrap/esm/AccordionContext.js","../../../../../../../../node_modules/react-bootstrap/esm/AccordionCollapse.js","../../../../../../../../node_modules/react-bootstrap/esm/AccordionItemContext.js","../../../../../../../../node_modules/react-bootstrap/esm/AccordionBody.js","../../../../../../../../node_modules/react-bootstrap/esm/AccordionButton.js","../../../../../../../../node_modules/react-bootstrap/esm/AccordionHeader.js","../../../../../../../../node_modules/react-bootstrap/esm/AccordionItem.js","../../../../../../../../node_modules/react-bootstrap/esm/Accordion.js","../../../../../../../libs/shared/src/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/rectangular-logo-sliding-list/partial-loading/PartialRectangularLogoSlidingList.tsx","../../../../../../../libs/shared/src/enums/WidgetContents.ts","../../../../../../../libs/shared/src/components/widgets/fixed-widget/FixedWidgetUtils.ts","../../../../../../../libs/shared/src/components/widgets/fixed-widget/FixedWidgetReducer.tsx","../../../../../../../libs/shared/src/components/widgets/fixed-widget/fixed-widget.module.scss","../../../../../../../libs/shared/src/components/widgets/fixed-widget/PartialFixedWidget.tsx","../../../../../../../libs/shared/src/components/widgets/fixed-widget/FixedWidget.tsx","../../../../../../../libs/shared/src/components/widgets/items/popout-video-widget-item/popout-video-widget-item.module.scss","../../../../../../../libs/shared/src/components/widgets/items/popout-video-widget-item/PopoutVideoWidgetItem.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/all-videos-list/thumbnail-fixed-list-search-cta-template.module.scss","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/all-videos-list/ThumbnailFixedListSearchCtaWidgetTemplate.tsx","../../../../../../../libs/shared/src/images/svg/status/VerifiedSvg.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/author-reviewer/author-reviewer-widget-template.module.scss","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/author-reviewer/AuthorReviewerWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/author-reviewer/partial-loading/PartialAuthorReviewerWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/items/circle-logo-widget-item/circle-logo-widget-item.module.scss","../../../../../../../libs/shared/src/components/widgets/items/circle-logo-widget-item/CircleLogoWidgetItem.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/circle-logo-sliding-list/CircleLogoSlidingListWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/circle-logo-sliding-list/partial-loading/partial-circle-logo-sliding-list.module.scss","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/circle-logo-sliding-list/partial-loading/PartialCircleLogoSlidingList.tsx","../../../../../../../libs/shared/src/components/widgets/items/subject-widget-item/cover-pill.module.scss","../../../../../../../libs/shared/src/components/widgets/items/subject-widget-item/CoverPill.tsx","../../../../../../../libs/shared/src/components/widgets/items/subject-widget-item/SubjectWidgetItem.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-pill-list-large/CoverFixedPillListLargeWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/items/subject-widget-item/PartialSubjectWidgetItem.tsx","../../../../../../../libs/shared/src/components/widgets/items/subject-widget-item/EditSubjectsWidgetLink.tsx","../../../../../../../libs/shared/src/components/widgets/items/subject-widget-item/AllSubjectsWidgetLink.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-pill-list-large/partial-loading/PartialCoverFixedPillListLargeWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/emoji-text/emoji-text.module.scss","../../../../../../../libs/shared/src/components/emoji-text/EmojiText.tsx","../../../../../../../libs/shared/src/components/feedback-form/FeedbackFormValidationSchema.ts","../../../../../../../libs/shared/src/components/feedback-form/feedback-form.module.scss","../../../../../../../libs/shared/src/components/feedback-form/FeedbackForm.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-pill-list-xsmall/cover-fixed-pill-list-xsmall.module.scss","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-pill-list-xsmall/CoverFixedPillListXSmallWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-pill-list-xsmall/partial-loading/PartialCoverFixedPillListXSmallWidgetTemplate.tsx","../../../../../../../libs/shared/src/apps/playlists/components/playlist-list/playlist.module.scss","../../../../../../../libs/shared/src/apps/playlists/components/playlist-list/PartialPlaylistList.tsx","../../../../../../../libs/shared/src/apps/playlists/components/playlist-count/PlaylistCount.tsx","../../../../../../../libs/shared/src/apps/playlists/components/playlist-list/PlaylistOwnerAvatar.tsx","../../../../../../../libs/shared/src/apps/playlists/components/playlist-list/PlaylistItem.tsx","../../../../../../../libs/shared/src/apps/playlists/components/playlist-list/PlaylistList.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-tile-list/CoverFixedTileListWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-tile-list/partial-loading/PartialCoverFixedTileListWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-sliding-pill-list-small/CoverSlidingPillListSmallWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-sliding-pill-list-small/partial-loading/PartialCoverSlidingPillListSmallWidgetTemplate.tsx","../../../../../../../libs/shared/src/apps/search/components/search-exchange-archive-description/SearchExchangeArchiveDescription.tsx","../../../../../../../libs/shared/src/components/drag-drop-move/DragDropMoveWrapper.tsx","../../../../../../../libs/shared/src/components/video-list/components/video-item-left-content/video-item-left-content.module.scss","../../../../../../../libs/shared/src/components/video-list/components/video-item-left-content/VideoItemLeftContent.tsx","../../../../../../../libs/shared/src/components/sign-in-to-watch/SignInToWatch.tsx","../../../../../../../libs/shared/src/context/VideoActionsContext.tsx","../../../../../../../libs/shared/src/components/video-list/components/video-item-actions/VideoItemActions.tsx","../../../../../../../libs/shared/src/components/video-list/components/video-item-top-right/VideoItemTopRight.tsx","../../../../../../../libs/shared/src/components/video-list/VideoListHelper.tsx","../../../../../../../libs/shared/src/components/video-list/clip-item/clip-item.module.scss","../../../../../../../libs/shared/src/components/video-list/clip-item/ClipItem.tsx","../../../../../../../libs/shared/src/components/video-list/interactive-item/InteractiveItem.tsx","../../../../../../../libs/shared/src/components/video-list/video-item/video-item.module.scss","../../../../../../../libs/shared/src/components/video-list/video-item/VideoItem.tsx","../../../../../../../libs/shared/src/components/video-list/video-list.module.scss","../../../../../../../libs/shared/src/components/video-list/VideoList.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-vertical-list/ThumbnailVerticalListWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-code-search-results/CurriculumCodeSearchResultsWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/video-list/partial-loading/partial-video-list.module.scss","../../../../../../../libs/shared/src/components/video-list/partial-loading/PartialVideoList.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-vertical-list/partial-loading/PartialThumbnailVerticalListWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-code-search-results/partial/PartialCurriculumCodeSearchResultsWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/components/accordion-button/accordion-button.module.scss","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/components/accordion-button/AccordionButton.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/components/curriculum-accordion-video-list/curriculum-accordion-video-list.module.scss","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/components/curriculum-accordion-video-list/CurriculumAccordionVideoList.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/components/audience-section/audience-section.module.scss","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/components/audience-section/AudienceSection.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/CurriculumAccordionUtils.ts","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/CurriculumResourcesAccordionWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/partial-loading/PartialCurriculumResourcesAccordionWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/items/subject-widget-item/EditableSubjectWidgetItem.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/editable-cover-fixed-pill-list-small/editable-cover-fixed-pill-list-small.module.scss","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/editable-cover-fixed-pill-list-small/EditableCoverFixedPillListSmallWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/editable-cover-fixed-pill-list-small/partial-loading/partial-editable-cover-fixed-pill-list-small-widget-template.module.scss","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/editable-cover-fixed-pill-list-small/partial-loading/PartialEditableCoverFixedPillListSmallWidgetTemplate.tsx","../../../../../../../libs/shared/src/apps/calendar/components/calendar-cell-date/calendar-cell-date.module.scss","../../../../../../../libs/shared/src/apps/calendar/components/calendar-cell-date/CalendarCellDate.tsx","../../../../../../../libs/shared/src/apps/calendar/components/coming-soon-tag/coming-soon-tag.module.scss","../../../../../../../libs/shared/src/apps/calendar/components/coming-soon-tag/ComingSoonTag.tsx","../../../../../../../libs/shared/src/apps/calendar/constants/CalendarAnimation.ts","../../../../../../../libs/shared/src/apps/calendar/utils/CalendarHelper.ts","../../../../../../../libs/shared/src/constants/CommonRegionMap.ts","../../../../../../../libs/shared/src/apps/calendar/utils/SpecialEventHelper.ts","../../../../../../../libs/shared/src/components/slider-dots/slider-dots.module.scss","../../../../../../../libs/shared/src/components/slider-dots/SliderDots.tsx","../../../../../../../libs/shared/src/apps/calendar/components/calendar-events/calendar-events.module.scss","../../../../../../../libs/shared/src/apps/calendar/components/calendar-events/CalendarEvents.tsx","../../../../../../../libs/shared/src/apps/calendar/components/calendar-day/calendar-day.module.scss","../../../../../../../libs/shared/src/apps/calendar/components/calendar-day/CalendarDay.tsx","../../../../../../../libs/shared/src/apps/calendar/components/generic-calendar-date/generic-calendar-date.module.scss","../../../../../../../libs/shared/src/apps/calendar/components/generic-calendar-date/GenericCalendarDate.tsx","../../../../../../../libs/shared/src/components/widgets/items/special-event-widget-item/special-event-widget-item.module.scss","../../../../../../../libs/shared/src/components/widgets/items/special-event-widget-item/SpecialEventWidgetItem.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/event-icon-sliding-list/EventIconSlidingListWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/event-icon-sliding-list/partial-loading/PartialEventIconSlidingListWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/items/video-widget-item/v1/video-widget-item.module.scss","../../../../../../../libs/shared/src/components/widgets/items/video-widget-item/v1/VideoWidgetItem.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/featured-thumbnail-sliding-list/featured-sliding-heading.module.scss","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/featured-thumbnail-sliding-list/FeaturedThumbnailSlidingListWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/featured-thumbnail-sliding-list/partial-loading/PartialFeaturedThumbnailSlidingListWidgetTemplate.tsx","../../../../../../../libs/shared/src/views/feedback/enums/FeedbackOption.ts","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/feedback/FeedbackWidgetContent.ts","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/feedback/feedback-widget-template.module.scss","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/feedback/FeedbackWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/feedback/partial-loading/PartialFeedbackWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/items/rating-widget-item/rating-widget-item.module.scss","../../../../../../../libs/shared/src/components/widgets/items/rating-widget-item/RatingWidgetItem.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/filter-sliding-pill-list-small/FilterSlidingPillListSmallWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/filter-sliding-pill-list-small/partial-loading/PartialFilterSlidingPillListSmall.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/heading/HeadingWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/heading/partial-loading/PartialHeadingWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner/hero-banner.module.scss","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner/HeroBannerWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner/partial-loading/PartialHeroBannerWidgetTemplate.tsx","../../../../../../../libs/shared/src/images/svg/objects/GridSvg.tsx","../../../../../../../libs/shared/src/images/svg/objects/RectanglesSvg.tsx","../../../../../../../libs/shared/src/images/svg/objects/SparkleSvg.tsx","../../../../../../../libs/shared/src/constants/WidgetThemingConstants.ts","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/hero-banner-small.module.scss","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/types/BlurbHeroBannerSmallWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/components/classification-hero-banner-small/classification-hero-thumbnail-small.module.scss","../../../../../../../libs/shared/src/components/widgets/curated-widgets/components/classification-hero-banner-small/ClassificationHeroBannerSmall.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/types/ClassificationHeroBannerSmallWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/types/PresentationsHeroBannerSmallWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/HeroBannerSmallWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/partial-loading/PartialHeroBannerSmallWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-block-colour-small/HeroBlockColourSmallWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-block-colour-small/partial-loading/PartialHeroBlockColourSmallWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-thumbnail-small/HeroThumbnailSmallWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-thumbnail-small/partial-loading/PartialHeroThumbnailSmallWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_large/partial-loading/PartialPopoutThumbnailSlidingListLarge.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_large/PopoutThumbnailSlidingListLargeWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_small/partial-loading/PartialPopoutThumbnailSlidingListSmall.tsx","../../../../../../../libs/shared/src/components/widgets/items/subject-stats-widget-item/subject-stats-badge/subject-stats-badge.module.scss","../../../../../../../libs/shared/src/components/widgets/items/subject-stats-widget-item/subject-stats-badge/SubjectStatsBadge.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_small/PopoutThumbnailSlidingListSmallWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/items/series-widget-item/series-widget-item.module.scss","../../../../../../../libs/shared/src/components/widgets/items/series-widget-item/PartialSeriesList.tsx","../../../../../../../libs/shared/src/components/series-tall-poster/series-tall-poster.module.scss","../../../../../../../libs/shared/src/components/series-tall-poster/SeriesTallPoster.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/poster-fixed-list-large/PosterFixedListLargeWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/items/series-widget-item/SeriesWidgetItem.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-large/PosterSlidingListLargeWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/items/tall-subject-widget-item/tall-subject-widget-item.module.scss","../../../../../../../libs/shared/src/components/widgets/items/tall-subject-widget-item/PartialTallSubjectWidget.tsx","../../../../../../../libs/shared/src/components/widgets/items/tall-subject-widget-item/TallSubjectWidgetItem.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-medium/partial-loading/PartialPosterSlidingListMediumWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-medium/PosterSlidingListMediumWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-small/classification/ClassificationPosterSlidingListSmallWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-small/partial-loading/PartialPosterSlidingListSmallWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-small/series/SeriesPosterSlidingListSmallWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/question/question-widget-template.module.scss","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/question/partial-loading/PartialQuestionWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/expandable-question/expandable-question.module.scss","../../../../../../../libs/shared/src/components/expandable-question/ExpandableQuestion.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/question/QuestionWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/question-accordion/question-accordion-widget-template.module.scss","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/question-accordion/partial-loading/PartialQuestionAccordionWidgetTemplate.tsx","../../../../../../../libs/shared/src/hooks/useFaqJsonLd.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/question-accordion/QuestionAccordionWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/rectangular-logo/RectangularLogo.tsx","../../../../../../../libs/shared/src/enums/PartnerType.ts","../../../../../../../libs/shared/src/components/widgets/items/rectangular-logo-widget-item/RectangularLogoWidgetItem.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/rectangular-logo-sliding-list/RectangularLogoSlidingListWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/search-suggestions-blurb/partial-loading/PartialSearchSuggestionsBlurbWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/search-suggestions-blurb/SearchSuggestionsBlurbWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/items/subject-stats-widget-item/subject-stats-widget-item.module.scss","../../../../../../../libs/shared/src/components/widgets/items/subject-stats-widget-item/partial-loading/PartialSubjectStatsWidgetItem.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/stats-cover-fixed-pill-list-large/partial-loading/PartialStatsCoverFixedPillListLargeWidgetTemplate.tsx","../../../../../../../libs/shared/src/images/svg/objects/BellFilledSvg.tsx","../../../../../../../libs/shared/src/images/svg/objects/BellSvg.tsx","../../../../../../../libs/shared/src/components/widgets/items/subject-stats-widget-item/SubjectStatsWidgetItem.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/stats-cover-fixed-pill-list-large/StatsCoverFixedPillListLargeWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/tag-sliding-list/partial-loading/PartialTagSlidingListWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/tag-sliding-list/TagSlidingListWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/video-guidance/tag/partial-loading/PartialVideoGuidanceTag.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-featured-media/partial-loading/partial-featured-widget-template.module.scss","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-featured-media/partial-loading/PartialThumbnailFeaturedMediaWidgetTemplate.tsx","../../../../../../../libs/shared/src/apps/subjects/components/hero-video/hero-video.module.scss","../../../../../../../libs/shared/src/apps/subjects/components/hero-video/HeroVideo.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-featured-media/ThumbnailFeaturedMediaWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/library-folder/library-folder.module.scss","../../../../../../../libs/shared/src/components/library-folder/LibraryFolder.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-folder-small/ThumbnailFixedListFolderSmallWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-large/partial-loading/partial-thumbnail-fixed-list-large-widget-template.module.scss","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-large/partial-loading/PartialThumbnailFixedListLargeWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/items/thumbnail-widget-item/thumbnail-widget-item.module.scss","../../../../../../../libs/shared/src/components/widgets/items/thumbnail-widget-item/ThumbnailWidgetItem.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-large/ThumbnailFixedListLargeWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/partial-loading/partial-thumbnail-fixed-list-media-large-widget-template.module.scss","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/partial-loading/PartialThumbnailFixedListMediaLargeWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/components/thumbnail-fixed-list-media-large-widget.module.scss","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/components/ThumbnailFixedListMediaLargeWidgetTemplateItem.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/thumbnail-fixed-list-media-large-widget-template.module.scss","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/ThumbnailFixedListMediaLargeWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/thumbnails/collection/title/collection-thumbnail-title.module.scss","../../../../../../../libs/shared/src/components/thumbnails/collection/title/CollectionThumbnailTitle.tsx","../../../../../../../libs/shared/src/components/thumbnails/collection/collection-thumbnail.module.scss","../../../../../../../libs/shared/src/components/thumbnails/collection/CollectionThumbnail.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-small/ThumbnailFixedListMediaSmallWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-small/partial-loading/partial-thumbnail-fixed-list-small-widget-template.module.scss","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-small/partial-loading/PartialThumbnailFixedListSmallWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-small/ThumbnailFixedListSmallWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-xlarge/partial-loading/PartialThumbnailFixedListXLargeWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-xlarge/thumbnail-fixed-list-x-large.module.scss","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-xlarge/ThumbnailFixedListXLargeWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-hero-media/partial-loading/partial-thumbnail-hero-media-widget-template.module.scss","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-hero-media/partial-loading/PartialThumbnailHeroMediaWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-hero-media/thumbnail-hero-media-widget-template.module.scss","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-hero-media/ThumbnailHeroMediaWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-sliding-list-large/partial-loading/PartialThumbnailSlidingListLargeWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-sliding-list-large/ThumbnailSlidingListLargeWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-sliding-list-small/ThumbnailSlidingListSmallWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/items/video-widget-item/v2/video-widget-item-v2.module.scss","../../../../../../../libs/shared/src/components/widgets/items/video-widget-item/v2/VideoWidgetItemV2.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/components/download-all-resources-button/download-all-resources-button.module.scss","../../../../../../../libs/shared/src/components/widgets/curated-widgets/components/download-all-resources-button/DownloadAllResourcesButton.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-sliding-list-small_v2/ThumbnailSlidingListSmallV2WidgetTemplate.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateCoverFixedPillListLargeSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateCoverFixedPillListXsmallSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateFeedbackCtaSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplatePopoutThumbnailSlidingListSmallCtaSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplatePosterSlidingListLargeSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplatePosterSlidingListMediumSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplatePosterSlidingListSmallSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateStatsCoverFixedPillListLargeSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailFeaturedMediaSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailHeroMediaSvg.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/rectangular-logo-fixed-list/RectangularLogoFixedListWidgetTemplate.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateAuthorReviewerSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateCircleLogoSlidingListSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateCoverFixedTileListSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateCoverSlidingPillListSmallSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateEditableCoverFixedPillListSmallSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateEventIconSlidingListSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateFeaturedThumbnailSlidingListSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateFilterSlidingPillListSmallSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateHeadingSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateHeroBannerSmallSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateHeroBannerSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateHeroBlockColourSmallSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateHeroThumbnailSmallSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplatePopoutThumbnailSlidingListLargeSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplatePopoutThumbnailSlidingListSmallSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateQuestionAccordionSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateQuestionSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateRectangularLogoSlidingListSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailFixedListLargeSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailFixedListMediaLargeSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailFixedListSmallSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailFixedListXlargeSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailSlidingListLargeSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailSlidingListSmallSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailVerticalListSvg.tsx","../../../../../../../libs/shared/src/constants/WidgetTemplateConfig.ts"],"sourcesContent":["import { BaseObject } from 'libs/shared/interfaces';\n\n/**\n * This maps directly against the widget types from Domain.\n * Update is only required where the backend changes.\n */\nexport enum WidgetType {\n Row = 0, // At full-size, this will contain a row of 4 items\n LargeRow = 1, // At full-size, this will contain a row of 3 times\n Hero = 2,\n ResourcesTile = 3 // Deprecated. Widget's with this type will fall back to the `Row` type (0).\n}\n\nexport interface Widget extends Omit<BaseObject, 'type'> {\n collectionId: string;\n dashboardId: string;\n type: WidgetType;\n}\n","\"use client\";\n\nimport * as React from 'react';\nexport function isAccordionItemSelected(activeEventKey, eventKey) {\n return Array.isArray(activeEventKey) ? activeEventKey.includes(eventKey) : activeEventKey === eventKey;\n}\nconst context = /*#__PURE__*/React.createContext({});\ncontext.displayName = 'AccordionContext';\nexport default context;","\"use client\";\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { useContext } from 'react';\nimport { useBootstrapPrefix } from './ThemeProvider';\nimport Collapse from './Collapse';\nimport AccordionContext, { isAccordionItemSelected } from './AccordionContext';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * This component accepts all of [`Collapse`'s props](/docs/utilities/transitions#collapse-1).\n */\nconst AccordionCollapse = /*#__PURE__*/React.forwardRef(({\n as: Component = 'div',\n bsPrefix,\n className,\n children,\n eventKey,\n ...props\n}, ref) => {\n const {\n activeEventKey\n } = useContext(AccordionContext);\n bsPrefix = useBootstrapPrefix(bsPrefix, 'accordion-collapse');\n return /*#__PURE__*/_jsx(Collapse, {\n ref: ref,\n in: isAccordionItemSelected(activeEventKey, eventKey),\n ...props,\n className: classNames(className, bsPrefix),\n children: /*#__PURE__*/_jsx(Component, {\n children: React.Children.only(children)\n })\n });\n});\nAccordionCollapse.displayName = 'AccordionCollapse';\nexport default AccordionCollapse;","\"use client\";\n\nimport * as React from 'react';\nconst context = /*#__PURE__*/React.createContext({\n eventKey: ''\n});\ncontext.displayName = 'AccordionItemContext';\nexport default context;","\"use client\";\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { useContext } from 'react';\nimport { useBootstrapPrefix } from './ThemeProvider';\nimport AccordionCollapse from './AccordionCollapse';\nimport AccordionItemContext from './AccordionItemContext';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst AccordionBody = /*#__PURE__*/React.forwardRef(({\n // Need to define the default \"as\" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595\n as: Component = 'div',\n bsPrefix,\n className,\n onEnter,\n onEntering,\n onEntered,\n onExit,\n onExiting,\n onExited,\n ...props\n}, ref) => {\n bsPrefix = useBootstrapPrefix(bsPrefix, 'accordion-body');\n const {\n eventKey\n } = useContext(AccordionItemContext);\n return /*#__PURE__*/_jsx(AccordionCollapse, {\n eventKey: eventKey,\n onEnter: onEnter,\n onEntering: onEntering,\n onEntered: onEntered,\n onExit: onExit,\n onExiting: onExiting,\n onExited: onExited,\n children: /*#__PURE__*/_jsx(Component, {\n ref: ref,\n ...props,\n className: classNames(className, bsPrefix)\n })\n });\n});\nAccordionBody.displayName = 'AccordionBody';\nexport default AccordionBody;","\"use client\";\n\nimport * as React from 'react';\nimport { useContext } from 'react';\nimport classNames from 'classnames';\nimport AccordionContext, { isAccordionItemSelected } from './AccordionContext';\nimport AccordionItemContext from './AccordionItemContext';\nimport { useBootstrapPrefix } from './ThemeProvider';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function useAccordionButton(eventKey, onClick) {\n const {\n activeEventKey,\n onSelect,\n alwaysOpen\n } = useContext(AccordionContext);\n return e => {\n /*\n Compare the event key in context with the given event key.\n If they are the same, then collapse the component.\n */\n let eventKeyPassed = eventKey === activeEventKey ? null : eventKey;\n if (alwaysOpen) {\n if (Array.isArray(activeEventKey)) {\n if (activeEventKey.includes(eventKey)) {\n eventKeyPassed = activeEventKey.filter(k => k !== eventKey);\n } else {\n eventKeyPassed = [...activeEventKey, eventKey];\n }\n } else {\n // activeEventKey is undefined.\n eventKeyPassed = [eventKey];\n }\n }\n onSelect == null || onSelect(eventKeyPassed, e);\n onClick == null || onClick(e);\n };\n}\nconst AccordionButton = /*#__PURE__*/React.forwardRef(({\n // Need to define the default \"as\" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595\n as: Component = 'button',\n bsPrefix,\n className,\n onClick,\n ...props\n}, ref) => {\n bsPrefix = useBootstrapPrefix(bsPrefix, 'accordion-button');\n const {\n eventKey\n } = useContext(AccordionItemContext);\n const accordionOnClick = useAccordionButton(eventKey, onClick);\n const {\n activeEventKey\n } = useContext(AccordionContext);\n if (Component === 'button') {\n props.type = 'button';\n }\n return /*#__PURE__*/_jsx(Component, {\n ref: ref,\n onClick: accordionOnClick,\n ...props,\n \"aria-expanded\": Array.isArray(activeEventKey) ? activeEventKey.includes(eventKey) : eventKey === activeEventKey,\n className: classNames(className, bsPrefix, !isAccordionItemSelected(activeEventKey, eventKey) && 'collapsed')\n });\n});\nAccordionButton.displayName = 'AccordionButton';\nexport default AccordionButton;","\"use client\";\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { useBootstrapPrefix } from './ThemeProvider';\nimport AccordionButton from './AccordionButton';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst AccordionHeader = /*#__PURE__*/React.forwardRef(({\n // Need to define the default \"as\" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595\n as: Component = 'h2',\n 'aria-controls': ariaControls,\n bsPrefix,\n className,\n children,\n onClick,\n ...props\n}, ref) => {\n bsPrefix = useBootstrapPrefix(bsPrefix, 'accordion-header');\n return /*#__PURE__*/_jsx(Component, {\n ref: ref,\n ...props,\n className: classNames(className, bsPrefix),\n children: /*#__PURE__*/_jsx(AccordionButton, {\n onClick: onClick,\n \"aria-controls\": ariaControls,\n children: children\n })\n });\n});\nAccordionHeader.displayName = 'AccordionHeader';\nexport default AccordionHeader;","\"use client\";\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { useMemo } from 'react';\nimport { useBootstrapPrefix } from './ThemeProvider';\nimport AccordionItemContext from './AccordionItemContext';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst AccordionItem = /*#__PURE__*/React.forwardRef(({\n // Need to define the default \"as\" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595\n as: Component = 'div',\n bsPrefix,\n className,\n eventKey,\n ...props\n}, ref) => {\n bsPrefix = useBootstrapPrefix(bsPrefix, 'accordion-item');\n const contextValue = useMemo(() => ({\n eventKey\n }), [eventKey]);\n return /*#__PURE__*/_jsx(AccordionItemContext.Provider, {\n value: contextValue,\n children: /*#__PURE__*/_jsx(Component, {\n ref: ref,\n ...props,\n className: classNames(className, bsPrefix)\n })\n });\n});\nAccordionItem.displayName = 'AccordionItem';\nexport default AccordionItem;","\"use client\";\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { useMemo } from 'react';\nimport { useUncontrolled } from 'uncontrollable';\nimport { useBootstrapPrefix } from './ThemeProvider';\nimport AccordionBody from './AccordionBody';\nimport AccordionButton from './AccordionButton';\nimport AccordionCollapse from './AccordionCollapse';\nimport AccordionContext from './AccordionContext';\nimport AccordionHeader from './AccordionHeader';\nimport AccordionItem from './AccordionItem';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst Accordion = /*#__PURE__*/React.forwardRef((props, ref) => {\n const {\n // Need to define the default \"as\" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595\n as: Component = 'div',\n activeKey,\n bsPrefix,\n className,\n onSelect,\n flush,\n alwaysOpen,\n ...controlledProps\n } = useUncontrolled(props, {\n activeKey: 'onSelect'\n });\n const prefix = useBootstrapPrefix(bsPrefix, 'accordion');\n const contextValue = useMemo(() => ({\n activeEventKey: activeKey,\n onSelect,\n alwaysOpen\n }), [activeKey, onSelect, alwaysOpen]);\n return /*#__PURE__*/_jsx(AccordionContext.Provider, {\n value: contextValue,\n children: /*#__PURE__*/_jsx(Component, {\n ref: ref,\n ...controlledProps,\n className: classNames(className, prefix, flush && `${prefix}-flush`)\n })\n });\n});\nAccordion.displayName = 'Accordion';\nexport default Object.assign(Accordion, {\n Button: AccordionButton,\n Collapse: AccordionCollapse,\n Item: AccordionItem,\n Header: AccordionHeader,\n Body: AccordionBody\n});","import React from 'react';\n\nimport { WidgetHeader } from '../WidgetHeader';\n\ninterface PartialWidgetHeaderProps {\n hideHeading?: boolean;\n hideDescription?: boolean;\n name?: string;\n description?: string;\n isPreviewing?: boolean;\n}\n\nexport function PartialWidgetHeader(props: PartialWidgetHeaderProps): JSX.Element {\n if (props.hideDescription && props.hideHeading)\n return <></>;\n\n if (props.isPreviewing) {\n return (\n <WidgetHeader\n name={props.name}\n description={props.description}\n />\n );\n }\n\n return (\n <div className='curated-widget-header'>\n {!props.hideHeading && (\n <div className='partial-loading-background curated-widget-heading' style={{ height: '1.5rem', width: '12rem' }} />\n )}\n\n {!props.hideDescription && (\n <div className='partial-loading-background curated-widget-description' style={{ height: '1.434375rem', width: '16rem' }} />\n )}\n </div>\n );\n}\n","import React from 'react';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { PartialWidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nexport function PartialRectangularLogoSlidingListWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n let itemsCount = 5;\n\n const breakpoints = useBreakpoints();\n if (breakpoints.sm || breakpoints.xs) {\n itemsCount = 2;\n }\n if (breakpoints.md) {\n itemsCount = 3;\n }\n\n return (\n <>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\n <div className='d-flex flex-no-wrap'>\n {Array(itemsCount)\n .fill(null)\n .map((_, i) => {\n return (\n <div key={i} style={{ flex: 1 }}>\n <div\n style={{ width: '90%' }}\n className='h-auto d-inline-block partial-loading-background rounded-3 ratio ratio-16x9'\n />\n <div style={{ width: '90%', height: '1.25rem' }} className='partial-loading-background mt-1' />\n </div>\n );\n })}\n </div>\n </>\n );\n}\n","export enum WidgetContents {\n Videos = 'videos',\n FeedVideos = 'feed videos',\n Series = 'series',\n Subjects = 'subjects',\n Playlists = 'playlists',\n Interactives = 'interactives',\n Clips = 'clips',\n PlayPageResources = 'play page resources',\n DashboardResources = 'dashboard resources',\n Libraries = 'Libraries',\n Folders = 'Folders',\n RecentActivities = 'recent activities',\n SmallSeries = 'small series',\n Companies = 'companies',\n PartnerProfiles = 'partner profiles',\n Ratings = 'ratings',\n SpecialEvents = 'special events',\n\n InteractivesV2 = 'interactives v2',\n ClipsV2 = 'clips v2',\n PlayPageResourcesV2 = 'playpage resources v2'\n}\n","import * as React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\nimport { ReducerActions } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { WidgetInteraction } from 'libs/shared/enums/WidgetInteraction';\nimport { Breakpoints, useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { BaseObject, WidgetType } from 'libs/shared/interfaces';\n\nimport { FixedWidgetProps, WIDGET_ITEM_LIMIT } from './FixedWidget';\nimport { FixedWidgetPayload, FixedWidgetState } from './FixedWidgetReducer';\n\nexport interface WidgetData {\n id?: string;\n name?: string;\n description?: string;\n}\n\nexport function useFetchData<T extends React.ComponentType<FixedWidgetItemProps>>(\n props: FixedWidgetProps<T>,\n dispatch: React.Dispatch<ReducerActions<WidgetInteraction, FixedWidgetPayload>>,\n shouldFetch: boolean\n): Flight.Response<any> {\n let data = props.collection;\n let res: Flight.Response<any>;\n\n if ((!data || ObjectHelper.isEmpty(data)) && !props.prefetched) {\n res = props.fetch(shouldFetch);\n data = res.data;\n }\n\n /**\n * Once we have the widget data, lazily update our state with the new collection\n */\n const collection = (FunctionHelper.isFunction(props.setData) && data) ? props.setData(data) : data;\n let collectionToDisplay = collection;\n\n const breakpoints = useBreakpoints();\n\n React.useEffect(() => {\n if (!data || ObjectHelper.isEmpty(data))\n return;\n\n if (props.limitTotalItems)\n collectionToDisplay = collection.length > WIDGET_ITEM_LIMIT ? collection.slice(0, WIDGET_ITEM_LIMIT) : collection;\n\n let type = props.type;\n\n // The ResourcesTile widget type is deprecated. We render the Row type instead in this case\n if (type === WidgetType.ResourcesTile)\n type = WidgetType.Row;\n\n dispatch({\n type: WidgetInteraction.Init,\n payload: {\n totalItems: collectionToDisplay.length,\n breakpoints,\n type,\n contents: props.contents\n }\n });\n }, [collection?.length]);\n\n return res;\n}\n\n/**\n * This function wrapper determines which widget item images should be pre-fetched by the LazyImage component.\n * It does this by looking at which images are going to be shown after the users clicks on the \"Next\"\n * widget button.\n */\nexport function getShouldPreload(state: FixedWidgetState, collection: any[]): (widgetItem: any) => boolean {\n const { offset, viewableItems } = state;\n\n // The index of the latest item that has been fetched\n const maxLoadedIndex = offset;\n\n /**\n * The indicesToPreload is an array of indices of widget items that should be prefetched by the\n * LazyImage component\n */\n const indicesToPreload: number[] = [];\n for (let i = 0; i < maxLoadedIndex + viewableItems; i++) {\n indicesToPreload.push(i);\n }\n\n /**\n * A widget item calls this function to determine whether or not its image can be pre-fetched.\n * This is determined by whether or not its index has been deemed valid to be pre-fetched\n * by the scope above\n */\n return function shouldPreload(widgetItem: any): boolean {\n const index = collection.indexOf(widgetItem);\n\n return indicesToPreload.includes(index);\n };\n}\n\nexport function getCollectionAppLink(appLink: Core.AppLink, data: WidgetData): Core.AppLink {\n if (!appLink)\n return;\n\n return {\n ...appLink,\n args: appLink.args || [ data.id, TextHelper.slugify(data.name) ]\n };\n}\n\n/**\n * Allow explicit name and description props to override the fetched\n * data properties.\n * \n * @param props \n * @param data \n */\nexport function formatData<T extends React.ComponentType<FixedWidgetItemProps>>(\n props: FixedWidgetProps<T>,\n data: BaseObject\n): WidgetData {\n const { id, name, description } = props;\n\n const overrideProps: WidgetData = {};\n\n if (Array.isArray(data))\n return { id, name, description };\n\n if (props.id) overrideProps.id = id;\n if (props.name) overrideProps.name = name;\n if (props.description) overrideProps.description = description;\n\n return { ...data, ...overrideProps };\n}\n\n/**\n * The functions below are used by the reducer to compute the number of widget items\n * displayed on the screen based on the media query, widget type, and total number of items.\n */\ntype ComputeFunction = (breakpoints: Breakpoints, type: WidgetType, itemCount: number) => number;\n\n/**\n * TODO:\n * This and the `WidgetType` enum need to be replaced entirely as this is no longer maintainable.\n * Each widget type + template combination should define it's own item count per\n * breakpoint and pass it in as props.\n */\nexport function getComputeFunction(contents: WidgetContents): ComputeFunction {\n switch (contents) {\n case WidgetContents.Playlists:\n return computeViewablePlaylists;\n\n case WidgetContents.Videos:\n return computeViewableVideos;\n\n case WidgetContents.RecentActivities:\n return computeViewableRecentActivities;\n\n case WidgetContents.FeedVideos:\n return computeViewableFeedVideos;\n\n case WidgetContents.Subjects:\n return computeViewableSubjects;\n\n case WidgetContents.InteractivesV2:\n return computeViewableInteractivesV2;\n\n case WidgetContents.Interactives:\n return computeViewableInteractives;\n\n case WidgetContents.ClipsV2:\n return computeViewableClipsV2;\n\n case WidgetContents.Clips:\n return computeViewableClips;\n\n case WidgetContents.PlayPageResources:\n return computeViewablePlayPageResources;\n\n case WidgetContents.PlayPageResourcesV2:\n return computeViewablePlayPageResourcesV2;\n\n case WidgetContents.DashboardResources:\n return computeViewableVideos;\n\n case WidgetContents.Libraries:\n case WidgetContents.Folders:\n return computeViewableLibraries;\n\n case WidgetContents.Ratings:\n return computeViewableRatings;\n\n case WidgetContents.SpecialEvents:\n return computeViewableSpecialEvents;\n\n case WidgetContents.Companies:\n return computeViewableCompanies;\n\n case WidgetContents.SmallSeries:\n return computeViewableSmallSeries;\n\n case WidgetContents.PartnerProfiles:\n return computeViewablePartnerProfiles;\n\n case WidgetContents.Series:\n default:\n return computeViewableSeries;\n }\n}\n\nfunction computeViewablePartnerProfiles(breakpoints: Breakpoints, type: WidgetType, itemCount: number): number {\n let maxItems: number = 6;\n\n if (breakpoints.xs || breakpoints.sm)\n maxItems = 2;\n else if (breakpoints.md)\n maxItems = 4;\n\n if (itemCount < maxItems)\n maxItems = itemCount;\n\n return maxItems;\n}\n\nfunction computeViewablePlaylists(breakpoints: Breakpoints, type: WidgetType, itemCount: number): number {\n let maxItems: number = 5;\n\n if (breakpoints.xs)\n maxItems = 2;\n else if (breakpoints.sm)\n maxItems = 3;\n else if (breakpoints.md)\n maxItems = 4;\n\n if (itemCount < maxItems)\n maxItems = itemCount;\n\n return maxItems;\n}\n\nfunction computeViewableCompanies(breakpoints: Breakpoints, type: WidgetType, itemCount: number): number {\n let maxItems: number = 8;\n\n if (breakpoints.xs || breakpoints.sm)\n maxItems = 4;\n else if (breakpoints.md)\n maxItems = 6;\n\n if (itemCount < maxItems)\n maxItems = itemCount;\n\n return maxItems;\n}\n\nfunction computeViewableLibraries(breakpoints: Breakpoints, type: WidgetType, itemCount: number): number {\n let maxItems: number = 3;\n\n if (breakpoints.xs || breakpoints.sm)\n maxItems = 1;\n else if (breakpoints.md)\n maxItems = 2;\n else if (breakpoints.lg)\n maxItems = 3;\n\n if (itemCount < maxItems)\n maxItems = itemCount;\n\n return maxItems;\n}\n\nfunction computeViewableVideos(breakpoints: Breakpoints, type: WidgetType, itemCount: number): number {\n let maxItems = 4;\n\n if (breakpoints.xs)\n maxItems = 1;\n\n if (breakpoints.sm)\n maxItems = 2;\n\n if (breakpoints.md || breakpoints.lg)\n maxItems = 3;\n\n if (type === WidgetType.LargeRow && maxItems > 3)\n maxItems = 3;\n\n if (itemCount < maxItems)\n maxItems = itemCount;\n\n return maxItems;\n}\n\nfunction computeViewableRecentActivities(breakpoints: Breakpoints, type: WidgetType, itemCount: number): number {\n let maxItems = 4;\n\n if (breakpoints.xs)\n maxItems = 2;\n\n if (breakpoints.sm)\n maxItems = 3;\n\n if (itemCount < maxItems)\n maxItems = itemCount;\n\n return maxItems;\n}\n\n// eslint-disable-next-line\nfunction computeViewableFeedVideos(breakpoints: Breakpoints, type: WidgetType, itemCount: number): number {\n return 1;\n}\n\nfunction computeViewableSubjects(breakpoints: Breakpoints, type: WidgetType, itemCount: number): number {\n if (type === WidgetType.LargeRow) {\n let maxItems: number = 5;\n\n if (breakpoints.xs)\n maxItems = 2;\n else if (breakpoints.sm)\n maxItems = 3;\n else if (breakpoints.md)\n maxItems = 4;\n\n if (itemCount < maxItems)\n maxItems = itemCount;\n\n return maxItems;\n }\n\n let maxItems: number = 6;\n\n if (breakpoints.xs)\n maxItems = 2;\n else if (breakpoints.sm)\n maxItems = 3;\n else if (breakpoints.md)\n maxItems = 4;\n else if (breakpoints.lg)\n maxItems = 5;\n else if (breakpoints.xl || breakpoints.xxl)\n maxItems = 6;\n\n if (itemCount < maxItems)\n maxItems = itemCount;\n\n return maxItems;\n}\n\nfunction computeViewableInteractives(breakpoints: Breakpoints, type: WidgetType, itemCount: number): number {\n let maxItems: number = 3;\n\n if (breakpoints.md || breakpoints.sm)\n maxItems = 2;\n\n if (breakpoints.xs)\n maxItems = 1;\n\n if (itemCount < Math.ceil(maxItems))\n maxItems = itemCount;\n\n return maxItems;\n}\n\nfunction computeViewableClips(breakpoints: Breakpoints, type: WidgetType, itemCount: number): number {\n let maxItems: number = 3;\n\n if (breakpoints.md || breakpoints.sm)\n maxItems = 2;\n\n if (breakpoints.xs)\n maxItems = 1;\n\n if (itemCount < Math.ceil(maxItems))\n maxItems = itemCount;\n\n return maxItems;\n}\n\nfunction computeViewableInteractivesV2(breakpoints: Breakpoints, type: WidgetType, itemCount: number): number {\n let maxItems: number = 3;\n\n if (breakpoints.xs)\n maxItems = 2;\n\n if (itemCount < maxItems)\n maxItems = itemCount;\n\n return maxItems;\n}\n\nfunction computeViewableClipsV2(breakpoints: Breakpoints, type: WidgetType, itemCount: number): number {\n let maxItems: number = 3;\n\n if (breakpoints.xs)\n maxItems = 2;\n\n if (itemCount < maxItems)\n maxItems = itemCount;\n\n return maxItems;\n}\n\nfunction computeViewablePlayPageResources(breakpoints: Breakpoints, type: WidgetType, itemCount: number): number {\n let maxItems: number = 4;\n\n if (breakpoints.sm)\n maxItems = 3;\n\n if (breakpoints.xs)\n maxItems = 2;\n\n if (itemCount < maxItems)\n maxItems = itemCount;\n\n return maxItems;\n}\n\nfunction computeViewablePlayPageResourcesV2(breakpoints: Breakpoints, type: WidgetType, itemCount: number): number {\n let maxItems: number = 3;\n\n if (breakpoints.xs)\n maxItems = 2;\n\n if (itemCount < maxItems)\n maxItems = itemCount;\n\n return maxItems;\n}\n\nfunction computeViewableSeries(breakpoints: Breakpoints, type: WidgetType, itemCount: number): number {\n let maxItems: number = 4;\n\n if (breakpoints.xs)\n maxItems = 2;\n else if (breakpoints.sm)\n maxItems = 3;\n\n if (itemCount < maxItems)\n maxItems = itemCount;\n\n return maxItems;\n}\n\nfunction computeViewableSmallSeries(breakpoints: Breakpoints, type: WidgetType, itemCount: number): number {\n let maxItems: number = 6;\n\n if (breakpoints.xs)\n maxItems = 2;\n else if (breakpoints.sm)\n maxItems = 3;\n else if (breakpoints.md)\n maxItems = 4;\n\n else if (breakpoints.lg)\n maxItems = 5;\n\n if (itemCount < maxItems)\n maxItems = itemCount;\n\n return maxItems;\n}\n\nfunction computeViewableRatings(breakpoints: Breakpoints, type: WidgetType, itemCount: number): number {\n if (itemCount < 4)\n return itemCount;\n\n let maxItems: number = 5;\n\n if (breakpoints.xs || breakpoints.sm)\n maxItems = 3;\n\n if (breakpoints.md || breakpoints.lg)\n maxItems = 4;\n\n if (itemCount === 4 && (breakpoints.xs || breakpoints.sm)) {\n maxItems = 3;\n }\n\n if (itemCount < maxItems)\n maxItems = itemCount;\n\n return maxItems;\n}\n\nfunction computeViewableSpecialEvents(breakpoints: Breakpoints, type: WidgetType, itemCount: number): number {\n let maxItems: number = 6;\n\n if (breakpoints.xs)\n maxItems = 2;\n\n if (breakpoints.sm)\n maxItems = 3;\n\n if (breakpoints.md)\n maxItems = 4;\n\n if (breakpoints.lg)\n maxItems = 5;\n\n if (breakpoints.xl || breakpoints.xxl)\n maxItems = 6;\n\n if (itemCount < maxItems)\n maxItems = itemCount;\n\n return maxItems;\n}\n\n/**\n * Touch event handlers\n */\nexport function getOnTouchStart(\n widgetState: FixedWidgetState,\n containerRef: React.MutableRefObject<HTMLUListElement>,\n containerWidth: number,\n setContainerWidth: React.Dispatch<number>,\n initialTouchX: number,\n setInitialTouchX: React.Dispatch<number>,\n setPercentageDragged: React.Dispatch<number>\n): (event: React.TouchEvent<HTMLUListElement>) => void {\n return function(event: React.TouchEvent<HTMLUListElement>): void {\n const firstTouch = event.touches.item(0);\n const touchX = firstTouch.clientX;\n\n /**\n * Runs only on the very first touch event.\n * \n * Sets the initial x-coordinate as a reference point to calculate how far the user has dragged before\n * they release their finder\n */\n if (!initialTouchX) {\n containerRef.current.style.transition = '';\n\n setContainerWidth(containerRef.current.getBoundingClientRect().width);\n setInitialTouchX(touchX);\n }\n\n const pixelsDragged = initialTouchX - touchX;\n\n // Calculate how far the user has moved their finger as a percentage of the widget's container element\n let currentPercentageDragged = ((pixelsDragged / containerWidth) * 100);\n\n /**\n * These 2 if statements prevent the user from dragging the widget beyond its limits.\n * One if statement handles if they have dragged to the left, and the other is for dragging to the right.\n * \n * The same logic is used to hide the widget buttons (see the `hide` prop passed to `<WidgetButton />`)\n */\n if (currentPercentageDragged < 0 && (widgetState.offset === widgetState.viewableItems))\n currentPercentageDragged = 0;\n\n else if (currentPercentageDragged > 0 && (widgetState.offset === widgetState.totalItems))\n currentPercentageDragged = 0;\n\n setPercentageDragged(currentPercentageDragged);\n };\n}\n\nconst DRAG_TOLERANCE = 7.5; // % of container width using to trigger a transition.\n\nexport function getOnTouchEnd(\n containerRef: React.MutableRefObject<HTMLDivElement>,\n setInitialTouchX: React.Dispatch<number>,\n percentageDragged: number,\n setPercentageDragged: React.Dispatch<number>,\n dispatch: React.Dispatch<ReducerActions<WidgetInteraction, FixedWidgetPayload>>,\n onNext: () => void,\n onPrevious: () => void\n): () => void {\n return function (): void {\n containerRef.current.style.transition = 'transform .4s ease-in-out';\n setInitialTouchX(null);\n\n /**\n * Only trigger a Next/Previous widget event if the user has dragged beyond DRAG_TOLERANCE% either way of the\n * container's width. This means if the user only drags left/right a tiny little bit, the widget\n * will simply slide back into its original place.\n */\n if (Math.abs(percentageDragged) >= DRAG_TOLERANCE) {\n const reducerAction = percentageDragged > 0 ? WidgetInteraction.Next : WidgetInteraction.Previous;\n\n dispatch({\n type: reducerAction\n });\n\n if (percentageDragged > 0 && onNext) {\n onNext();\n } else if (percentageDragged < 0 && onPrevious) {\n onPrevious();\n }\n }\n\n setPercentageDragged(0);\n };\n}\n\nexport function hideBackButton(\n isHoveringOnFarLeft: boolean,\n isHoveringOnWidget: boolean,\n widgetOffset: number,\n maxViewableItems: number,\n widgetCollectionSize: number,\n isTabbing: boolean\n): boolean {\n // When hovering on the very far left widget item, hide the back button\n if (isHoveringOnFarLeft)\n return true;\n\n // if the collection size is smaller than the max viewable items, hide the back button\n if (widgetCollectionSize <= maxViewableItems)\n return true;\n\n // When hovering on the entire widget area, hide the back button if the widget is in the far left position\n if (isHoveringOnWidget)\n return (widgetOffset === maxViewableItems);\n\n if (isTabbing)\n return widgetOffset === maxViewableItems;\n\n return true;\n}\n\nexport function hideNextButton(\n isHoveringOnFarRight: boolean,\n isHoveringOnWidget: boolean,\n widgetOffset: number,\n maxViewableItems: number,\n widgetCollectionSize: number,\n showSeeMoreButton: boolean,\n isTabbing: boolean\n): boolean {\n // When hovering on the very far right widget item, hide the next button\n if (isHoveringOnFarRight)\n return true;\n\n // if the collection size is smaller than the max viewable items, hide the next button\n if (widgetCollectionSize <= maxViewableItems)\n return true;\n\n // Always show the next button if the widget is in the far left position\n if (widgetOffset === maxViewableItems)\n return false;\n\n // When the user is hovering over the entire widget area...\n if (isHoveringOnWidget) {\n // If we want to show the \"See more\" button, don't hide the next button\n if (showSeeMoreButton)\n return false;\n\n // Only show the next button if there are still more items to show\n return widgetCollectionSize <= widgetOffset;\n }\n\n if (isTabbing)\n return widgetOffset === widgetCollectionSize;\n\n return true;\n}\n\nexport interface FixedWidgetControls {\n jumpToIndex: (index: number) => void;\n}\n\n/**\n * If a component consuming FixedWidget needs to dispatch events to FixedWidget,\n * it can pass in a `controlsRef` prop, which will receive the API defined\n * below. This API can be extended as needed.\n * See FeedVideoCollection.tsx for an example\n */\nexport function useControlsRef(\n ref: React.MutableRefObject<FixedWidgetControls>,\n dispatch: React.Dispatch<ReducerActions<WidgetInteraction, FixedWidgetPayload>>\n): void {\n React.useEffect(() => {\n if (!ref || ref.current)\n return;\n\n ref.current = {\n jumpToIndex: (index: number) => dispatch({\n type: WidgetInteraction.JumpToIndex,\n payload: {\n offset: index + 1\n }\n })\n };\n }, [ref?.current]);\n}\n","import { ReducerActions } from 'libs/common/react/interfaces';\n\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { WidgetInteraction } from 'libs/shared/enums/WidgetInteraction';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { WidgetType } from 'libs/shared/interfaces';\n\nimport { getComputeFunction } from './FixedWidgetUtils';\n\nexport interface FixedWidgetPayload {\n breakpoints?: Breakpoints;\n contents?: WidgetContents;\n type?: WidgetType;\n offset?: number;\n totalItems?: number;\n}\n\nexport interface FixedWidgetState {\n // Current position within the widget collection\n offset: number;\n // Number of items viewable in slider for the current breakpoint/viewport size\n viewableItems: number;\n // Relative position of slider in the window. Used for an inline translate3d().\n position: number;\n // Type of widget being managed. May change on `Resize`.\n type: WidgetType;\n // What object type the widget uses :vomit: (this needs to be phased out of this god forsaken component)\n contents: WidgetContents;\n // Total number of items in the widget\n totalItems: number;\n}\n\nexport const initialWidgetState: FixedWidgetState = {\n offset: 0,\n viewableItems: 4,\n position: 0,\n totalItems: 0,\n contents: null,\n type: WidgetType.Row\n};\n\nconst computeNextPosition = (prevState: FixedWidgetState) => {\n const { viewableItems, offset, position, totalItems } = prevState;\n\n const remainingCount = totalItems - offset;\n\n /**\n * If the remaining items are evening divisible by the items in view, or,\n * we have more items that can be displayed in the view, move the slider a full 100%.\n */\n if (remainingCount % viewableItems === 0 || remainingCount > viewableItems)\n return {\n position: position - 100,\n offset: offset + viewableItems\n };\n\n /**\n * Where there are less items than we can show in a full slide, \n * calculate the % movement required to only show those items.\n */\n if (remainingCount < viewableItems)\n return {\n position: position - (remainingCount / viewableItems * 100),\n offset: offset + remainingCount\n };\n\n /**\n * Default back to the current state as a fallback\n */\n return {\n position: position,\n offset: offset\n };\n};\n\nconst computePreviousPosition = (prevState: FixedWidgetState) => {\n const { viewableItems, offset, position } = prevState;\n\n const remainingCount = offset - viewableItems;\n\n if (remainingCount % viewableItems === 0 || remainingCount > viewableItems)\n return {\n position: position + 100,\n offset: offset - viewableItems\n };\n\n if (remainingCount < viewableItems)\n return {\n position: position + (remainingCount / viewableItems * 100),\n offset: offset - remainingCount\n };\n\n return {\n position: position,\n offset: offset\n };\n};\n\nexport function FixedWidgetReducer(\n prevState: FixedWidgetState,\n action: ReducerActions<WidgetInteraction, FixedWidgetPayload>\n): FixedWidgetState {\n const { type, payload = {} } = action;\n\n switch (type) {\n case WidgetInteraction.Next: {\n return {\n ...prevState,\n ...computeNextPosition(prevState)\n };\n }\n\n case WidgetInteraction.Previous: {\n return {\n ...prevState,\n ...computePreviousPosition(prevState)\n };\n }\n\n case WidgetInteraction.JumpToIndex: {\n return {\n ...prevState,\n offset: payload.offset,\n position: (payload.offset - 1) * -100\n };\n }\n\n case WidgetInteraction.Resize: {\n const computeViewableItems = getComputeFunction(prevState.contents);\n const initialSeen = computeViewableItems(payload.breakpoints, prevState.type, prevState.totalItems);\n\n return {\n ...prevState,\n position: 0,\n offset: initialSeen,\n viewableItems: initialSeen\n };\n }\n\n case WidgetInteraction.Init: {\n const computeViewableItems = getComputeFunction(payload.contents);\n const initialSeen = computeViewableItems(payload.breakpoints, payload.type, payload.totalItems);\n\n return lazyWidgetInit({\n ...prevState,\n offset: initialSeen,\n viewableItems: initialSeen,\n type: payload.type,\n contents: payload.contents,\n totalItems: payload.totalItems,\n position: 0\n });\n }\n\n case WidgetInteraction.Update: {\n return {\n ...prevState,\n totalItems: payload.totalItems\n };\n }\n\n default:\n return prevState;\n }\n}\n\nexport function lazyWidgetInit(newState: FixedWidgetState): FixedWidgetState {\n return { ...initialWidgetState, ...newState };\n}\n",":local {\n %overflowGradient {\n position: absolute;\n width: 2.5rem;\n height: 101%;\n z-index: 2;\n top: 50%;\n transform: translateY(-50%);\n }\n\n .leftOverflowGradient {\n @extend %overflowGradient;\n left: 0;\n margin-left: -#{map-get($spacers, 4)};\n background-image: linear-gradient(to left, $cv-safe-transparent 0%, $white 70%);\n }\n\n .rightOverflowGradient {\n @extend %overflowGradient;\n right: 0;\n margin-right: -#{map-get($spacers, 4)};\n background-image: linear-gradient(to right, $cv-safe-transparent 0%, $white 70%);\n }\n\n .partialItem {\n display: inline-block;\n width: 100%;\n padding-bottom: percentage(calc(9 / 16));\n }\n\n .mobileScroll {\n overflow-x: scroll;\n -ms-overflow-style: none;\n scrollbar-width: none;\n\n &::-webkit-scrollbar {\n display: none;\n }\n }\n\n .widgetItemWrapper {\n display: contents;\n }\n}\n","import * as React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nimport { PartialWidgetTemplateProps } from '../curated-widgets/WidgetProps';\n\nimport styles from './fixed-widget.module.scss';\n\nfunction useGetSize(size?: 'sm' | 'lg'): HashObject {\n const breakpoints = useBreakpoints();\n\n if (breakpoints.xs)\n return {\n itemCount: 1,\n colSize: 12\n };\n\n if (breakpoints.sm)\n return {\n itemCount: 2,\n colSize: 6\n };\n\n if (breakpoints.md || breakpoints.lg)\n return {\n itemCount: 3,\n colSize: 4\n };\n\n return {\n itemCount: size === 'sm' ? 4 : 3,\n colSize: size === 'sm' ? 3 : 4\n };\n}\n\nexport interface PartialFixedWidgetItemProps {\n colSize: number;\n}\n\nconst PartialLoadingItem = ({ colSize }: PartialFixedWidgetItemProps) => (\n <div className={`col-${colSize} px-1`}>\n <div className={`${styles.partialItem} partial-loading-background rounded-3`} />\n </div>\n);\n\nexport interface PartialFixedWidgetProps {\n hideDescription?: boolean;\n hideHeading?: boolean;\n size?: 'sm' | 'lg';\n childComponent?: (props: PartialFixedWidgetItemProps) => JSX.Element;\n}\n\nPartialFixedWidget.defaultProps = {\n size: 'sm',\n childComponent: PartialLoadingItem\n};\n\nexport function PartialFixedWidget(props: PartialWidgetTemplateProps): JSX.Element {\n const { itemCount, colSize } = useGetSize(props.size);\n\n const ChildComponent = props.childComponent;\n\n const items = [];\n for (let i = 0; i < itemCount; i++) {\n items.push(<ChildComponent key={i} colSize={colSize} />);\n }\n\n return (\n <div className='widget'>\n <PartialWidgetHeader\n hideHeading={props.hideHeading}\n hideDescription={props.hideDescription}\n name={props.name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n />\n <div className='row g-0 mx-n1'>\n {items}\n </div>\n </div>\n );\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { UserAgentHelper } from 'libs/common/backbone/utils/UserAgentHelper';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, HashObject } from 'libs/analytics/interfaces';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { useWidgetKeyboard } from 'libs/shared/components/widgets/hooks/useWidgetKeyboard';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { SlidingListContainer } from 'libs/shared/components/widgets/sliding-list/SlidingListContainer';\nimport { WidgetButton, WidgetButtonDirection } from 'libs/shared/components/widgets/widget-button/WidgetButton';\nimport { CssMeasurement } from 'libs/shared/enums/CssMeasurement';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { WidgetInteraction } from 'libs/shared/enums/WidgetInteraction';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { useHover } from 'libs/shared/hooks/UseHover';\nimport { useLazyLoad } from 'libs/shared/hooks/UseLazyLoad';\nimport { WidgetContext, WidgetType } from 'libs/shared/interfaces';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport { FixedWidgetReducer, initialWidgetState, lazyWidgetInit } from './FixedWidgetReducer';\nimport { FixedWidgetControls, formatData, getCollectionAppLink, getOnTouchEnd, getOnTouchStart, getShouldPreload, hideBackButton, hideNextButton, useControlsRef, useFetchData } from './FixedWidgetUtils';\nimport { PartialFixedWidget } from './PartialFixedWidget';\n\nimport styles from './fixed-widget.module.scss';\n\nconst namespace = 'shared.fixedWidget';\n\n// Max number of widget items whenever `props.limitTotalItems` is `true`\nexport const WIDGET_ITEM_LIMIT = 12;\n\ninterface BaseFixedWidgetProps<\n T extends React.ComponentType<FixedWidgetItemProps>\n> {\n id?: string;\n name?: string;\n description?: string;\n\n type: WidgetType;\n contents: WidgetContents;\n thumbnailSize?: ImageSize;\n minimumItemCount?: number;\n limitTotalItems?: boolean;\n setData?: (data: any) => any[] | null;\n isPreviewing?: boolean;\n widgetTypeId?: WidgetTypeId;\n\n childComponent: T;\n extraChildComponentProps: Omit<React.ComponentProps<T>, keyof FixedWidgetItemProps>;\n\n partialComponent?: React.ElementType;\n getChildAppLink?: (item?: any) => Core.AppLink;\n appLink?: Core.AppLink;\n onAppLinkClick?: () => void;\n headingBadgeComponent?: JSX.Element;\n headerRightComponent?: JSX.Element;\n showSeeMoreLink?: boolean;\n isUpselling?: boolean;\n\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n\n getWidgetItemAnalyticsData?: (data: any) => HashObject;\n\n onNext?: () => void;\n onPrevious?: () => void;\n onClose?: () => void;\n onFollow?: (shouldFollow: boolean) => void;\n isFollowing?: boolean;\n showFollowSpinner?: boolean;\n controlsRef?: React.MutableRefObject<FixedWidgetControls>;\n touchBehavior?: 'drag' | 'scroll';\n\n leftWidgetButtonClassName?: string;\n rightWidgetButtonClassName?: string;\n\n hideName?: boolean;\n hideBleedingContent?: boolean;\n hideExtendedClickableArea?: boolean;\n hideButtons?: boolean;\n // This is for any additional items that need to be rendered at the end of the widget item list\n // such as a \"See More\" card.\n trailingItems?: JSX.Element;\n // Indicate how many extra items we added through trailingItems\n trailingItemLength?: number;\n}\n\ntype FixedWidgetWithFetchProps<T extends React.ComponentType<FixedWidgetItemProps>> = BaseFixedWidgetProps<T> &\n {\n lazyLoad: true,\n collection?: never,\n fetch: (...args: any) => Flight.Response<any>,\n prefetched?: false\n };\n\ntype FixedWidgetWithCollectionProps<T extends React.ComponentType<FixedWidgetItemProps>> = BaseFixedWidgetProps<T> &\n {\n collection: any,\n lazyLoad?: false,\n fetch?: never,\n prefetched: true\n };\n\nexport type FixedWidgetProps<T extends React.ComponentType<FixedWidgetItemProps>> =\n FixedWidgetWithCollectionProps<T> |\n FixedWidgetWithFetchProps<T>;\n\nFixedWidget.defaultProps = {\n type: WidgetType.Row,\n minimumItemCount: 0,\n extraChildComponentProps: {},\n touchBehavior: 'scroll'\n};\n\n/**\n * If your childProps complains that \"value\" is not assignable ot type \n */\nexport function FixedWidget<T extends React.ComponentType<FixedWidgetItemProps>>(\n props: FixedWidgetProps<T>\n): JSX.Element {\n const { analyticsData = {}, getWidgetItemAnalyticsData = () => {} } = props;\n\n const [ initialTouchX, setInitialTouchX ] = React.useState(null);\n const [ containerWidth, setContainerWidth ] = React.useState(null);\n const [ percentageDragged, setPercentageDragged ] = React.useState(0);\n\n const [ state, dispatch ] = React.useReducer(FixedWidgetReducer, initialWidgetState, lazyWidgetInit);\n\n const containerRef = React.useRef(null);\n const [ buttonsRef, isHovering ] = useHover<HTMLDivElement>();\n\n const [ isHoveringOnFarLeft, setIsHoveringOnFarLeft ] = React.useState(false);\n const [ isHoveringOnFarRight, setIsHoveringOnFarRight ] = React.useState(false);\n\n useControlsRef(props.controlsRef, dispatch);\n\n const { ref, inView: shouldFetch } = useLazyLoad({ prevent: !props.lazyLoad });\n\n const response = useFetchData(props, dispatch, shouldFetch);\n\n function getWidgetCollection(limit: number): any[] {\n const responseData = props.prefetched ? props.collection : response.data;\n\n if (!responseData)\n return [];\n\n const formattedResponse = FunctionHelper.isFunction(props.setData) ? props.setData(responseData) : responseData;\n return formattedResponse?.slice(0, limit) ?? [];\n }\n\n const widgetItems = getWidgetCollection(props.limitTotalItems ? WIDGET_ITEM_LIMIT : Infinity);\n const widgetLength = props.trailingItems && props.trailingItemLength ?\n widgetItems.length + props.trailingItemLength :\n widgetItems.length;\n\n function hasMoreItems(): boolean {\n if (!props.limitTotalItems)\n return false;\n\n const unlimitedItems = getWidgetCollection(Infinity);\n\n return unlimitedItems.length > widgetLength;\n }\n\n const hasReachedEnd = state.offset === widgetLength;\n\n const breakpoints = useBreakpoints();\n \n const { onFocusWidget, onBlurWidget, isTabbing, getFixedAttributes, focusNext, focusPrev } = useWidgetKeyboard({ type: 'fixed', state, containerRef });\n\n React.useEffect(() => {\n dispatch({\n type: WidgetInteraction.Resize,\n payload: { breakpoints }\n });\n }, [breakpoints]);\n\n React.useEffect(() => {\n if (!props.prefetched)\n return;\n\n let type = props.type;\n\n // The ResourcesTile widget type is deprecated. We render the Row type instead in this case\n if (type === WidgetType.ResourcesTile)\n type = WidgetType.Row;\n\n // If the prefetched collection changes, re-initialize the widget state.\n dispatch({\n type: WidgetInteraction.Init,\n payload: {\n breakpoints,\n type,\n contents: props.contents,\n totalItems: widgetLength\n }\n });\n }, [ props.collection?.length, props.prefetched ]);\n\n function onSetIsHovering(hovering: boolean, index: number): void {\n if (widgetLength === state.viewableItems) {\n setIsHoveringOnFarLeft(hovering);\n setIsHoveringOnFarRight(hovering);\n return;\n }\n\n // This callback will hide the far left button if the user is hovering on the far left widget item.\n // Same goes for the far right button & widget item.\n if (index + 1 === widgetLength) {\n setIsHoveringOnFarRight(hovering);\n return;\n }\n\n if (index === 0) {\n setIsHoveringOnFarLeft(hovering);\n return;\n }\n\n if ((index + 1 - (state.offset % state.viewableItems)) % state.viewableItems === 0) {\n setIsHoveringOnFarRight(hovering);\n return;\n }\n\n if ((index - (state.offset % state.viewableItems)) % state.viewableItems === 0) {\n setIsHoveringOnFarLeft(hovering);\n return;\n }\n }\n\n function shouldScroll(): boolean {\n if (props.touchBehavior !== 'scroll')\n return false;\n\n return UserAgentHelper.isTabletOrMobile();\n }\n\n const widgetContext: WidgetContext = {\n type: state.type,\n collectionSize: widgetLength,\n contents: props.contents\n };\n\n const data = formatData(props, response?.data || props.collection);\n\n if (response?.hasError)\n return <></>;\n\n if (!props.prefetched && !response?.data) {\n const PartialComponent = props.partialComponent || PartialFixedWidget;\n\n return (\n <div ref={ref}>\n <PartialComponent />\n </div>\n );\n }\n\n if (!widgetLength || widgetLength < props.minimumItemCount)\n return <></>;\n\n /**\n * Don't merge this if Sha forgot to fix it.\n */\n const WidgetItemComponent = props.childComponent as React.ComponentType<FixedWidgetItemProps>;\n\n const getSliderAnalyticsData = (type: WidgetInteraction) => ({\n id: data?.id,\n name: data?.name,\n direction: type === WidgetInteraction.Next ? 'right' : 'left',\n ...props.analyticsData\n });\n\n const showSeeMoreButton = (() => {\n // Only show if there is an applink and we've reached the end of the widget\n if (!props.appLink || !hasReachedEnd)\n return false;\n\n // Also only show if we've exceeded the widget limit, if one has been set\n return hasMoreItems();\n })();\n\n const hideButtons = shouldScroll() || props.hideButtons;\n const hideBackGradient = state.offset === state.viewableItems;\n const hideNextGradient = widgetLength <= state.offset;\n const hasMoreThanViewable = state.viewableItems < widgetLength;\n\n return (\n <div className='mx-n4 mb-n3'>\n <div className={shouldScroll() ? 'pb-3 overflow-hidden' : 'px-4 pb-3 overflow-hidden'}>\n {!props.hideName &&\n <div className={shouldScroll() ? 'px-4' : ''}>\n <WidgetHeader\n name={data.name}\n description={data.description}\n appLink={getCollectionAppLink(props.appLink, data)}\n onAppLinkClick={props.onAppLinkClick}\n analyticsData={{ id: data?.id, name: data?.name, ...props.analyticsData }}\n analyticsOptions={WidgetHelper.getSliderHeadingAnalyticsOptions()}\n showSeeMoreLink={props.showSeeMoreLink ?? hasMoreThanViewable}\n content={widgetItems}\n isPreviewing={props.isPreviewing}\n widgetTypeId={props.widgetTypeId}\n badgeComponent={props.headingBadgeComponent}\n rightComponent={props.headerRightComponent}\n isUpselling={props.isUpselling}\n onClose={props.onClose}\n onFollow={props.onFollow}\n isFollowing={props.isFollowing}\n showFollowSpinner={props.showFollowSpinner}\n />\n </div>\n }\n <div\n ref={buttonsRef}\n className={`position-relative mx-n1 ${shouldScroll() ? `${styles.mobileScroll} px-4` : ''} ${props.hideBleedingContent ? 'overflow-hidden-x' : ''}`}\n >\n {!hideButtons && (\n <>\n {(!props.hideBleedingContent && !isHoveringOnFarLeft && !hideBackGradient) && (\n <div className={styles.leftOverflowGradient} />\n )}\n <WidgetButton\n direction={WidgetButtonDirection.Left}\n onClick={() => {\n focusPrev();\n\n dispatch({ type: WidgetInteraction.Previous });\n AnalyticsHelper.logUserAction(\n getSliderAnalyticsData(WidgetInteraction.Previous),\n WidgetHelper.getSliderAnalyticsOptions()\n );\n\n FunctionHelper.isFunction(props.onPrevious) && props.onPrevious();\n }}\n hide={!!props.hideButtons || hideBackButton(\n isHoveringOnFarLeft,\n isHovering,\n state.offset,\n state.viewableItems,\n widgetLength,\n isTabbing\n )}\n contents={props.contents}\n className={props.leftWidgetButtonClassName}\n hideExtendedClickableArea={props.hideExtendedClickableArea}\n state={state}\n />\n </>\n )}\n \n <SlidingListContainer\n position={state.position}\n positionType={CssMeasurement.Percentage}\n onTouchMove={props.touchBehavior === 'drag' && getOnTouchStart(\n state,\n containerRef,\n containerWidth,\n setContainerWidth,\n initialTouchX,\n setInitialTouchX,\n setPercentageDragged\n )}\n onTouchEnd={props.touchBehavior === 'drag' && getOnTouchEnd(\n containerRef,\n setInitialTouchX,\n percentageDragged,\n setPercentageDragged,\n dispatch,\n props.onNext,\n props.onPrevious\n )}\n ref={containerRef}\n percentageDragged={percentageDragged}\n >\n {widgetItems.map((widgetItem: any, index: number) => {\n return (\n <li\n key={`${widgetItem.id}:${index}`}\n onFocus={() => onFocusWidget(index)}\n onBlur={onBlurWidget}\n className={styles.widgetItemWrapper}\n {...getFixedAttributes(index)}\n >\n <WidgetItemComponent\n data={widgetItem}\n collectionAppLink={props.appLink}\n getAppLink={\n props.getChildAppLink ? () => props.getChildAppLink(widgetItem) : () => null as any\n }\n context={widgetContext}\n preloadImage={getShouldPreload(state, widgetItems)(widgetItem)}\n thumbnailSize={props.thumbnailSize || ImageSize.Medium}\n analyticsData={{\n widgetId: data.id,\n widgetName: data.name,\n itemIndex: index,\n ...analyticsData,\n ...getWidgetItemAnalyticsData(widgetItem)\n }}\n analyticsOptions={{ ...props.analyticsOptions, ...WidgetHelper.getSliderItemAnalyticsOptions() }}\n onHover={(hovering: boolean) => {\n if (shouldScroll())\n return;\n /**\n * For some reason this needs to be called after a set timeout, otherwise\n * the `useHover` listener on the `buttonsRef` element will not detect it's hover\n * event. A delay of 200ms is used for when `hovering` is false so that the effects of\n * setting `isHoveringOnFarX` aren't applied until the CSS transform transition has\n * completed.\n */\n window.setTimeout(() => {\n onSetIsHovering(hovering, index);\n }, hovering ? 0 : 200);\n }}\n {...props.extraChildComponentProps}\n />\n </li>\n );\n })}\n {props.trailingItems}\n {shouldScroll() && <div className='ps-4'></div>}\n </SlidingListContainer>\n\n {!hideButtons && (\n <>\n <WidgetButton\n direction={WidgetButtonDirection.Right}\n onClick={() => {\n if (showSeeMoreButton) {\n Core.AppLinkHelper.trigger(getCollectionAppLink(props.appLink, data));\n return;\n }\n focusNext();\n\n dispatch({ type: WidgetInteraction.Next });\n AnalyticsHelper.logUserAction(\n getSliderAnalyticsData(WidgetInteraction.Next),\n WidgetHelper.getSliderAnalyticsOptions()\n );\n\n FunctionHelper.isFunction(props.onNext) && props.onNext();\n }}\n hide={!!props.hideButtons || hideNextButton(\n isHoveringOnFarRight,\n isHovering,\n state.offset,\n state.viewableItems,\n widgetLength,\n showSeeMoreButton,\n isTabbing\n )}\n contents={props.contents}\n hoverText={showSeeMoreButton && LanguageService.getPhrase(namespace, 'seeMore')}\n className={props.rightWidgetButtonClassName}\n hideExtendedClickableArea={props.hideExtendedClickableArea}\n state={state}\n />\n {(!props.hideBleedingContent && !isHoveringOnFarRight && !hideNextGradient) && (\n <div className={styles.rightOverflowGradient} />\n )}\n </>\n )}\n </div>\n </div>\n </div>\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .rowWidth {\n width: 25%;\n }\n\n .largeRowWidth {\n width: 33.33333%;\n }\n\n @include media('<=xl') {\n .rowWidth {\n width: 33.33333%;\n }\n }\n\n @include media('<=md') {\n .rowWidth,\n .largeRowWidth {\n width: 50%;\n }\n }\n\n @include media('<=sm') {\n .rowWidth,\n .largeRowWidth {\n width: 100%;\n }\n }\n}","import React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { PresentationAudience, VideoTypes, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\n\nimport styles from './popout-video-widget-item.module.scss';\n\nexport interface PopoutVideoWidgetItemProps extends FixedWidgetItemProps<VideoTypes> {\n presentationAudiences: PresentationAudience[];\n showVideoGuidance: boolean;\n hideTitle?: boolean;\n hideSeries?: boolean;\n onClickRemoveItem: (videoId: string, videoName: string) => void;\n removeButtonTooltip?: string;\n preventPopout?: boolean;\n showNewVideoIndicator?: boolean;\n commonVideoProps: CommonVideoProps;\n}\n\nexport const PopoutVideoWidgetItem = React.memo(function(props: PopoutVideoWidgetItemProps): JSX.Element {\n const { data: video, context, thumbnailSize, preloadImage, presentationAudiences } = props;\n \n const videoAudiences = video?.subjectPresentationAudiences?.data;\n const mergedAudience = useMergeAudiences(videoAudiences, presentationAudiences);\n\n const breakpoints = useBreakpoints();\n\n let width = styles.rowWidth;\n\n if (context.type === WidgetType.LargeRow)\n width = styles.largeRowWidth;\n\n return (\n <div className={`px-1 flex-shrink-0 position-relative ${width}`}>\n <VideoThumbnail\n video={props.data}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n hideTitle={props.hideTitle}\n showVideoGuidance={props.showVideoGuidance}\n type={props.preventPopout || breakpoints.xs ? 'static' : 'popout'}\n textPosition={ThumbnailTextPosition.Below}\n appLink={props.getAppLink(video)}\n imageOptions={{ size: thumbnailSize }}\n preload={preloadImage}\n audience={mergedAudience}\n hideRating={!!mergedAudience}\n hideDuration={false}\n onClickRemove={FunctionHelper.isFunction(props.onClickRemoveItem)\n && (() => props.onClickRemoveItem(video.id, video.name))}\n removeButtonTooltip={props.removeButtonTooltip}\n commonVideoProps={props.commonVideoProps}\n />\n </div>\n );\n});\n","@import '~styles/utils/include-media';\n\n:local {\n .placeholderItem {\n width: 25%;\n\n @include media('<=xl') {\n width: 33.33333%;\n }\n\n @include media('<=md') {\n width: 50%;\n }\n\n @include media('<=sm') {\n width: 100%;\n }\n }\n\n .placeholderInner {\n cursor: pointer;\n\n &:hover .placeholderContent {\n opacity: 0.8;\n }\n }\n\n .placeholderContent {\n transition: opacity 0.2s ease;\n }\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { PopoutVideoWidgetItem } from 'libs/shared/components/widgets/items/popout-video-widget-item/PopoutVideoWidgetItem';\nimport { WidgetTypeIdConfig } from 'libs/shared/constants/WidgetTypeIdConfig';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { SearchSvg } from 'libs/shared/images/svg/actions/SearchSvg';\nimport { PresentationAudience, Video, VideoWidgetTemplateContent, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './thumbnail-fixed-list-search-cta-template.module.scss';\n\nconst namespace = 'widgets.thumbnailFixedListSearchCtaWidgetTemplate';\n\nexport interface ThumbnailFixedListSearchCtaWidgetTemplateProps {\n id: string;\n name: string;\n widgetTypeId: WidgetTypeId;\n description: string;\n content: VideoWidgetTemplateContent;\n appLinks: {\n widgetVideoList: (widgetId: string, widgetName: string) => Core.AppLink,\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink\n };\n metadata: {\n hideWidgetHeading: boolean,\n hideWidgetDescription: boolean,\n hideObjectTitle: boolean,\n hideObjectSeries: boolean\n };\n audiences?: PresentationAudience[];\n hasPermissions: HasPermissionsFunc;\n preventPopout?: boolean;\n analyticsData?: HashObject;\n\n isPreviewing: boolean;\n\n settings: {\n hasTopicDirectories: boolean\n };\n\n commonVideoProps: CommonVideoProps;\n onClickSearchAllVideos?: () => void;\n}\n\nconst MAX_VIDEO_ITEMS = 3;\n\nexport function ThumbnailFixedListSearchCtaWidgetTemplate(\n props: ThumbnailFixedListSearchCtaWidgetTemplateProps\n): JSX.Element {\n const widgetConfig = WidgetTypeIdConfig[props.widgetTypeId];\n const videos = WidgetHelper.getVideoContent(props.content);\n const displayVideos = videos.slice(0, MAX_VIDEO_ITEMS);\n\n if (!displayVideos.length)\n return <></>;\n\n const appLink = widgetConfig.getCollectionAppLink?.(props.appLinks, props.content) ??\n props.appLinks?.widgetVideoList?.(props.id, props.name);\n\n return (\n <FixedWidget\n id={props.id}\n name={!props.metadata?.hideWidgetHeading && props.name}\n description={!props.metadata?.hideWidgetDescription && props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Videos}\n collection={displayVideos}\n childComponent={PopoutVideoWidgetItem}\n extraChildComponentProps={{\n presentationAudiences: props.audiences,\n showVideoGuidance: VideoHelper.showVideoGuidance(props.hasPermissions),\n hideTitle: props.metadata?.hideObjectTitle,\n hideSeries: props.metadata?.hideObjectSeries,\n preventPopout: props.preventPopout,\n showNewVideoIndicator: props.settings?.hasTopicDirectories,\n onClickRemoveItem: undefined,\n commonVideoProps: props.commonVideoProps\n }}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n prefetched\n analyticsData={props.analyticsData}\n appLink={appLink}\n isPreviewing={props.isPreviewing}\n widgetTypeId={props.widgetTypeId}\n trailingItemLength={1}\n trailingItems={\n <li className={classNames('flex-shrink-0 position-relative px-1', styles.placeholderItem)}>\n <button\n onClick={props.onClickSearchAllVideos}\n className={classNames('d-block ratio ratio-16x9 bg-light rounded-1 overflow-hidden text-decoration-none border-0 p-0 w-100', styles.placeholderInner)}\n >\n <div className={classNames('position-absolute top-0 start-0 bottom-0 end-0 d-flex flex-column align-items-center justify-content-center gap-2', styles.placeholderContent)}>\n <span className='text-center px-2 fw-semi-bold'>\n <SvgContainer svg={SearchSvg} size={SvgContainerSize.Small} /> {LanguageService.getPhrase(namespace, 'search')}\n </span>\n </div>\n </button>\n </li>\n }\n />\n );\n}\n","import React from 'react';\n\nexport function VerifiedSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n d='m10.407 12.368-1.22-1.22a.49.49 0 0 0-.698.004l-.583.583a.494.494 0 0 0-.004.697l2.135 2.135c.107.108.25.154.388.142a.5.5 0 0 0 .352-.143l4.362-4.362a.494.494 0 0 0-.004-.698l-.582-.582a.495.495 0 0 0-.698-.004zm7.922-.37 1.437 1.406q.312.291.208.728a.72.72 0 0 1-.541.531l-1.957.5.551 1.936a.67.67 0 0 1-.197.729.67.67 0 0 1-.73.198l-1.935-.552-.5 1.957a.72.72 0 0 1-.53.541 1.3 1.3 0 0 1-.199.021.69.69 0 0 1-.53-.229L12 18.328l-1.405 1.436q-.292.313-.729.208a.7.7 0 0 1-.53-.541l-.5-1.957-1.937.552a.67.67 0 0 1-.728-.198.67.67 0 0 1-.198-.729l.551-1.936-1.957-.5a.72.72 0 0 1-.54-.53q-.104-.438.207-.73l1.437-1.405-1.437-1.405q-.312-.291-.208-.729a.72.72 0 0 1 .541-.53l1.957-.5-.551-1.936a.67.67 0 0 1 .198-.73.67.67 0 0 1 .728-.197l1.936.552.5-1.957a.675.675 0 0 1 .531-.531.67.67 0 0 1 .729.198L12 5.68l1.405-1.447a.7.7 0 0 1 .73-.198q.426.104.53.53l.5 1.958L17.1 5.97a.67.67 0 0 1 .729.198.67.67 0 0 1 .197.729l-.551 1.936 1.957.5a.72.72 0 0 1 .541.53q.105.438-.208.73z'\n fill='currentColor'\n />\n </svg>\n );\n}\n",":local {\n .card {\n background-color: $gray-100;\n padding: 0.75rem;\n }\n\n .avatar {\n width: 3rem;\n min-width: 3rem;\n height: 3rem;\n }\n\n .time {\n font-size: 0.6875rem; //11px\n }\n}","import React from 'react';\n\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { EditSvg } from 'libs/shared/images/svg/actions/EditSvg';\nimport { VerifiedSvg } from 'libs/shared/images/svg/status/VerifiedSvg';\nimport { Author, AuthorWidgetContent } from 'libs/shared/interfaces';\nimport { ArticleHelper } from 'libs/shared/utils/ArticleHelper';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './author-reviewer-widget-template.module.scss';\n\nconst namespace = 'shared.authorReviewerWidgetTemplate';\n\ninterface PersonCardWrapperProps {\n person: Author;\n}\n\nconst DATE_FORMATTER = 'MMMM D, YYYY';\n\nfunction PersonCardWrapper(props: React.PropsWithChildren<PersonCardWrapperProps>): JSX.Element {\n if (!props.person)\n return <></>;\n\n const className = `${styles.card} h-100 rounded-2 d-flex flex-column`;\n\n const externalUrl = props.person.externalUrl;\n const blogUrl = ArticleHelper.getAuthorBlogUrl(props.person.blogSlug);\n\n function onClickAuthorBlogLink(): void {\n AnalyticsHelper.logUserAction({\n id: props.person.id,\n firstName: props.person.firstName,\n lastName: props.person.lastName,\n imageId: props.person.imageId,\n externalUrl,\n blogUrl\n }, {\n entity: EntityType.Author,\n location: LocationContext.AuthorReviewerWidget,\n actionType: UserAction.Click\n });\n }\n\n if (!blogUrl && !externalUrl) {\n return (\n <div className={className}>\n {props.children}\n </div>\n );\n }\n\n return (\n <a\n href={externalUrl || blogUrl}\n target='_blank'\n className={`${className} no-decoration`}\n onClick={onClickAuthorBlogLink}\n >\n {props.children}\n </a>\n );\n}\n\ninterface PersonCardProps {\n person: Author;\n imageCdnUrl: string;\n type: 'reviewer' | 'author';\n lastUpdated: string;\n datePublished: string;\n}\n\nfunction PersonCard(props: PersonCardProps): JSX.Element {\n if (!props.person)\n return <></>;\n\n return (\n <PersonCardWrapper person={props.person}>\n <div className='d-flex mb-2'>\n <div className={`${styles.avatar} rounded-circle me-2 overflow-hidden`}>\n <img\n className='img-fluid'\n src={ImageHelper.getUrlById(props.imageCdnUrl, ImageType.Avatars, props.person.imageId, ImageSize.Medium)}\n alt={`${props.person.firstName} ${props.person.lastName}`}\n />\n </div>\n\n <div>\n <h2 className='h6 mb-0 fw-normal'>\n <SvgContainer\n className='align-middle svg-container d-inline-block'\n svg={props.type === 'reviewer' ? VerifiedSvg : EditSvg}\n />\n\n {props.type === 'reviewer' ? (\n <span className='align-middle'>\n <Text namespace={namespace} phrase='reviewedBy' />\n &nbsp;\n {props.person.firstName} {props.person.lastName}\n </span>\n ) : (\n <span className='align-middle'>\n <Text namespace={namespace} phrase='authoredBy' />\n &nbsp;\n {props.person.firstName} {props.person.lastName}\n </span>\n )}\n </h2>\n <div>\n {props.person.title}\n </div>\n </div>\n </div>\n\n <p className='mb-2 flex-grow-1'>\n {props.person.bio}\n </p>\n\n <div className={styles.time}>\n {props.type === 'reviewer' ? (\n <>\n <Text\n namespace={namespace}\n phrase='reviewed'\n /> <time dateTime={props.lastUpdated}>{DateHelper.format(props.lastUpdated, DATE_FORMATTER)}</time>\n </>\n ) : (\n <>\n <Text\n namespace={namespace}\n phrase='published'\n /> <time dateTime={props.datePublished}>{DateHelper.format(props.datePublished, DATE_FORMATTER)}</time>\n &nbsp;&bull;&nbsp;\n <Text\n namespace={namespace}\n phrase='lastUpdated'\n /> <time dateTime={props.lastUpdated}>{DateHelper.format(props.lastUpdated, DATE_FORMATTER)}</time>\n </>\n )}\n </div>\n </PersonCardWrapper>\n );\n}\n\nexport interface AuthorReviewerWidgetTemplateProps {\n imageCdnUrl: string;\n content: AuthorWidgetContent[];\n}\n\nexport function AuthorReviewerWidgetTemplate(props: AuthorReviewerWidgetTemplateProps): JSX.Element {\n const {\n reviewer,\n author,\n lastUpdated,\n datePublished\n } = props.content[0];\n\n if (!author || !reviewer)\n return <></>;\n\n return (\n <div className='row mb-n3'>\n <div className='col-12 col-md-6 mb-3'>\n <PersonCard\n type='author'\n person={author}\n imageCdnUrl={props.imageCdnUrl}\n datePublished={datePublished}\n lastUpdated={lastUpdated}\n />\n </div>\n <div className='col-12 col-md-6 mb-3'>\n <PersonCard\n type='reviewer'\n person={reviewer}\n imageCdnUrl={props.imageCdnUrl}\n datePublished={datePublished}\n lastUpdated={lastUpdated}\n />\n </div>\n </div>\n );\n}\n","import React from 'react';\n\nimport styles from '../author-reviewer-widget-template.module.scss';\n\nfunction PartialPersonCard(): JSX.Element {\n return (\n <div className={`${styles.card} rounded-2`}>\n <div className='d-flex mb-2'>\n <div className={`partial-loading-background rounded-circle me-2 ${styles.avatar}`} />\n \n <div className='w-75'>\n <div className='partial-loading-background mb-1' style={{ width: '90%', height: '21px' }} />\n <div className='partial-loading-background' style={{ width: '65%', height: '1rem' }} />\n </div>\n </div>\n \n <div>\n <div className='partial-loading-background mb-1' style={{ width: '100%', height: '1rem' }} />\n <div className='partial-loading-background mb-1' style={{ width: '75%', height: '1rem' }} />\n </div>\n \n <div className='partial-loading-background' style={{ width: '50%', height: '1rem' }} />\n </div>\n );\n}\n\nexport function PartialAuthorReviewerWidgetTemplate(): JSX.Element {\n return (\n <div className='row mb-n3'>\n <div className='col-12 col-md-6 mb-3'>\n <PartialPersonCard />\n </div>\n <div className='col-12 col-md-6 mb-3'>\n <PartialPersonCard />\n </div>\n </div>\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .logoItem {\n width: percentage(calc(1 / 8));\n\n @include media('<=lg') {\n width: percentage(calc(1 / 6));\n }\n\n @include media('<=md') {\n width: percentage(calc(1 / 4));\n }\n }\n\n .logo {\n aspect-ratio: 1;\n background-size: cover;\n border: 2px solid $gray-300;\n background-clip: padding-box;\n }\n}","import React from 'react';\n\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { BG_COLOUR_CLASS_NAMES } from 'libs/shared/constants/ColourClassNames';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Company } from 'libs/shared/interfaces';\nimport { getBgColorClass } from 'libs/shared/utils/getBgColorClass';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './circle-logo-widget-item.module.scss';\n\nexport interface CircleLogoWidgetItemProps extends FixedWidgetItemProps<Company> {\n}\n\nexport const CircleLogoWidgetItem = function(props: CircleLogoWidgetItemProps): JSX.Element {\n const logoUrl = ImageHelper.createUrl(props.data.logo?.url, { size: ImageSize.Medium });\n const logoBgColor = props.data.metadata?.colour;\n // fallback color\n const colourClass = getBgColorClass(props.data.name, BG_COLOUR_CLASS_NAMES);\n\n const analyticsData = {\n ...props.analyticsData,\n id: props.data?.id,\n name: props.data?.name\n };\n\n const analyticsOptions = {\n ...props.analyticsOptions,\n location: LocationContext.CircleLogoSlidingListWidget,\n actionType: UserAction.Click,\n entity: EntityType.Company\n };\n \n const logoStyle: React.CSSProperties = {\n backgroundImage: logoUrl ? `url('${logoUrl}')` : null,\n backgroundColor: logoBgColor\n };\n\n return (\n <AppLink\n appLink={props.getAppLink(props.data)}\n className={`position-relative px-1 flex-shrink-0 ${styles.logoItem}`}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <div\n className={classNames('rounded-circle w-100 h-100', styles.logo, !logoBgColor && colourClass)}\n style={logoStyle}\n >\n </div>\n </AppLink>\n );\n};\n","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { CircleLogoWidgetItem } from 'libs/shared/components/widgets/items/circle-logo-widget-item/CircleLogoWidgetItem';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Company, Video, WidgetType } from 'libs/shared/interfaces';\n\nexport interface CircleLogoSlidingListWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Video[];\n imageCdnUrl: string;\n showHighlight?: boolean;\n analyticsData?: HashObject;\n isUpselling?: boolean;\n\n appLinks: {\n company: (company: Company) => Core.AppLink\n };\n}\n\nexport function CircleLogoSlidingListWidgetTemplate(props: CircleLogoSlidingListWidgetTemplateProps): JSX.Element {\n return (\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Companies}\n collection={props.content}\n childComponent={CircleLogoWidgetItem}\n extraChildComponentProps={{}}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n getChildAppLink={props.appLinks?.company}\n isUpselling={props.isUpselling}\n />\n );\n}\n",":local {\n .logo {\n aspect-ratio: 1;\n width: 90%;\n }\n .logoWrapper {\n flex: 1;\n }\n}","import React from 'react';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nimport styles from './partial-circle-logo-sliding-list.module.scss';\n\nexport function PartialCircleLogoSlidingListWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n let itemsCount = 8;\n\n const breakpoints = useBreakpoints();\n if (breakpoints.sm || breakpoints.xs) {\n itemsCount = 4;\n }\n if (breakpoints.md) {\n itemsCount = 6;\n }\n\n return (\n <>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\n <div className='d-flex flex-no-wrap'>\n {Array(itemsCount).fill(null).map((_, i) => {\n return (\n <div key={i} className={styles.logoWrapper}>\n <div className={`${styles.logo} h-100 d-inline-block partial-loading-background rounded-circle`} />\n </div>\n );\n })}\n </div>\n </>\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n $classification-cover-height: 5rem; // 80px\n $classification-cover-height-lg: 8rem; // 128px\n\n .appLink:hover {\n text-decoration: none;\n\n .name {\n text-decoration: underline;\n }\n }\n\n .selectedMask {\n background-color: rgba($green, 0.1);\n position: absolute;\n z-index: 3;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n }\n\n .widgetItem {\n border-radius: $border-radius-lg;\n overflow: hidden;\n \n &.hasThemeColor {\n border: 0.0625rem solid var(--themeColor);\n background-color: color-mix(in srgb, var(--themeColor) 10%, white);\n &:hover {\n background-color: color-mix(in srgb, var(--themeColor) 15%, white);\n }\n }\n\n .text {\n font-size: $font-size-base;\n }\n\n .imagePanel {\n position: relative;\n background-position: top;\n background-size: cover;\n width: $classification-cover-height;\n height: $classification-cover-height;\n flex-shrink: 0;\n\n .selected {\n width: 2.5rem;\n height: 2.5rem;\n position: absolute;\n top: 50%;\n z-index: 5;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n\n .image {\n z-index: 2;\n position: relative;\n width: 100%;\n height: 100%;\n background-position: center;\n background-size: cover;\n background-repeat: no-repeat;\n }\n }\n\n .dragHandle {\n height: $classification-cover-height;\n color: $gray-700;\n }\n\n .large {\n width: $classification-cover-height-lg;\n height: $classification-cover-height-lg;\n \n @include media(\">=sm\", \"<=700px\") {\n width: $classification-cover-height;\n height: $classification-cover-height;\n }\n }\n\n .comingSoonPanel {\n line-height: 1;\n }\n\n .name {\n color: $gray-900;\n }\n }\n\n .newVideos {\n font-size: 0.6875rem; // 11px\n }\n\n .editSubjectsItem {\n height: $classification-cover-height;\n border-radius: $border-radius-lg;\n color: $gray-500;\n border: 1px dashed $gray-400;\n }\n\n .allSubjectsItem {\n height: $classification-cover-height;\n color: $white;\n border-radius: $border-radius-lg;\n border: 1px solid $gray-400;\n\n .logoContainer {\n height: 1.1rem;\n width: 6rem;\n }\n }\n\n .draggingItem {\n border: 2px dashed $border-color;\n height: $classification-cover-height;\n }\n\n .partialLargeImage {\n @extend .imagePanel;\n width: $classification-cover-height-lg !important;\n height: $classification-cover-height-lg !important;\n }\n\n .partialLargeFallback {\n width: $classification-cover-height-lg;\n height: $classification-cover-height-lg;\n }\n\n .partialIcon {\n z-index: 1;\n }\n}\n","import * as React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\nimport { RandomHelper } from 'libs/common/react/utils/RandomHelper';\n\nimport { AnalyticsOptions, HashObject } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { IconCircle } from 'libs/shared/components/icon-circle/IconCircle';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { 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 { CheckSvg } from 'libs/shared/images/svg/status/CheckSvg';\nimport { BaseObject, Classification, Presentation } from 'libs/shared/interfaces';\nimport { getBgColorClass } from 'libs/shared/utils/getBgColorClass';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\n\nimport styles from './cover-pill.module.scss';\n\nconst namespace = 'shared.subjectWidgetItem';\n\ninterface NamePanelProps {\n name: string;\n multiline?: boolean;\n subtitle?: string;\n noUnderLine?: boolean;\n newVideosCount?: number;\n}\n\nconst ComingSoonNamePanel = ({ name, multiline, noUnderLine }: NamePanelProps) => {\n let wrapperClassName = `${styles.comingSoonPanel} \n d-flex flex-column align-items-center justify-content-center px-3 text-center`;\n\n let textClassName = '';\n\n if (!multiline) {\n wrapperClassName += ' text-nowrap';\n textClassName += ' text-truncate';\n } else {\n textClassName += ` ${styles.clamped} clamp-2`;\n }\n\n return (\n <div className={wrapperClassName}>\n <small className='text-secondary'><Text namespace={namespace} phrase='comingSoon' /></small>\n <p className={`${noUnderLine ? '' : styles.name} h6`}><span className={textClassName}>{name}</span></p>\n </div>\n );\n};\n\nconst NormalNamePanel = ({ name, multiline, subtitle, noUnderLine, newVideosCount }: NamePanelProps) => {\n let wrapperClassName = 'px-3 d-flex flex-column justify-content-center';\n let textClassName = `${noUnderLine ? '' : styles.name} h6`;\n\n if (!multiline) {\n wrapperClassName += ' text-nowrap text-truncate';\n textClassName += ' text-truncate mb-0';\n } else {\n textClassName += ` ${newVideosCount ? 'clamp-2' : 'clamp-3'} text-start`;\n }\n\n return (\n <div className={wrapperClassName}>\n {subtitle && <div className={`text-secondary clamp-1 ${styles.text}`}>{subtitle}</div>}\n <div className={textClassName} title={name}>{name}</div>\n {!!newVideosCount && (\n <div className={`fw-semibold d-inline-block rounded-pill px-2 mt-1 bg-light-green w-fit h-fit text-green ${styles.newVideos}`}>\n <Text namespace={namespace} phrase='newVideos' options={{ smartCount: newVideosCount }} />\n </div>\n )}\n </div>\n );\n};\n\nexport interface CoverPillWidgetItemProps<T extends BaseObject> {\n data: T;\n getChildAppLink?: (data: T) => Core.AppLink;\n getChildAppLinkOptions?: () => Core.AppLinkOptions;\n isLarge?: boolean;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n availablePresentations?: Presentation[];\n getSubtitle?: (data: T) => string;\n multiline?: boolean;\n // set to true it will highlight on hover and also remove the hover text underline\n highlightOnHover?: boolean;\n showNewVideosCount?: boolean;\n shouldHighlight?: (data: T) => boolean;\n showFallbackBackgroundColour?: boolean;\n onClick?: () => void;\n}\n\nCoverPillWidgetContent.defaultProps = {\n showFallbackBackgroundColour: true\n};\n\ninterface CoverPillWidgetContentProps<T> extends CoverPillWidgetItemProps<T> {\n coverUrl?: string;\n coverBgColor?: string;\n subtitle?: string;\n isComingSoon?: boolean;\n className?: string;\n imageClassName?: string;\n isSelected?: boolean;\n hideFallback?: boolean;\n hideCheckmark?: boolean;\n themeColor?: string;\n}\n\nexport function CoverPillWidgetContent(props: CoverPillWidgetContentProps<BaseObject>): JSX.Element {\n const coverUrl = ImageHelper.createUrl(props.coverUrl, { size: props.isLarge ? ImageSize.Medium : ImageSize.Small });\n\n let classification: Classification | undefined = undefined;\n if (MasterTypeHelper.isClassification(props.data)) {\n classification = props.data;\n }\n\n const childProps = {\n name: props.data.name,\n multiline: props.isLarge || props.multiline,\n subtitle: props.subtitle,\n noUnderLine: props.highlightOnHover,\n newVideosCount: props.showNewVideosCount ? classification?.externalMetadata?.childDashboardNewVideoCount : 0\n };\n\n const coverStyle: React.CSSProperties = {\n backgroundImage: coverUrl ? `url('${coverUrl}')` : null,\n backgroundColor: props.coverBgColor\n };\n\n const fallbackCoverBgClassName = getBgColorClass(props.data.name, BG_COLOUR_CLASS_NAMES);\n\n return (\n <div\n className={classNames(\n props.themeColor ? styles.hasThemeColor : 'border',\n 'd-flex position-relative',\n props.className,\n styles.widgetItem,\n props.isSelected ? 'border-success border-2' : '',\n props.highlightOnHover && !props.themeColor ? 'bg-light-blue-hover' : ''\n )}\n style={props.themeColor ? { '--themeColor': props.themeColor } as unknown as React.CSSProperties : {}}\n id={`${props.data.id}-${RandomHelper.getRandomInt()}`}\n onClick={props.onClick}\n >\n {props.isSelected && (\n <div className={`${styles.selectedMask} border-2`} />\n )}\n\n <div className={`${styles.imagePanel} ${props.isLarge ? styles.large : ''}`}>\n {props.isSelected && !props.hideCheckmark && (\n <div className={styles.selected}>\n <IconCircle svg={CheckSvg} svgSize={SvgContainerSize.Large} textVariant='white' variant='green' />\n </div>\n )}\n\n {coverUrl &&\n <div\n className={classNames(\n styles.image,\n props.imageClassName,\n !props.coverBgColor && props.showFallbackBackgroundColour && fallbackCoverBgClassName\n )}\n style={coverStyle}\n />\n }\n {!props.hideFallback && (\n <ImageFallback\n type={ImageFallbackType.Subject}\n extraClasses={props.isLarge ? styles.large : ''}\n />\n )}\n </div>\n\n {props.isComingSoon ?\n <ComingSoonNamePanel {...childProps} /> :\n <NormalNamePanel {...childProps} />\n }\n </div>\n );\n}\n\nexport function CoverPillWidgetContentWrapper(props: CoverPillWidgetContentProps<BaseObject>) {\n const appLink = props.getChildAppLink ? props.getChildAppLink(props.data) : null;\n\n return (\n <>\n {appLink ? (\n <AppLink\n className={styles.appLink}\n appLink={appLink}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n appLinkOptions={props.getChildAppLinkOptions?.()}\n >\n <CoverPillWidgetContent {...props} />\n </AppLink>\n ) : (<CoverPillWidgetContent {...props} />)\n }\n </>\n );\n}\n","import * as React from 'react';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { CoverPillWidgetContentWrapper, CoverPillWidgetItemProps } from 'libs/shared/components/widgets/items/subject-widget-item/CoverPill';\nimport { TopicsConstants } from 'libs/shared/constants/TopicsConstants';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { Classification, Presentation } from 'libs/shared/interfaces';\n\nfunction usePresentationName(presentationId: string, availablePresentations: Presentation[]): string {\n const showPresentationName = availablePresentations?.length >= TopicsConstants.MULTI_PRESENTATION_THRESHOLD;\n\n if (!showPresentationName) {\n return undefined;\n }\n\n return availablePresentations?.find(p => p.id === presentationId)?.name;\n}\n\nfunction SubjectWidgetItem(props: CoverPillWidgetItemProps<Classification>): JSX.Element {\n const isComingSoon = props.data?.status === ClassificationStatus.ComingSoon;\n const presentationName = usePresentationName(props.data.presentationId, props?.availablePresentations);\n\n const analyticsData = {\n ...props.analyticsData,\n id: props.analyticsData?.id || props.data?.id,\n name: props.data?.name,\n presentationId: props.analyticsData?.presentationId || props.data.presentationId,\n comingSoon: !!isComingSoon\n };\n\n const analyticsOptions = {\n location: LocationContext.ClassificationListItem,\n entity: EntityType.Classification,\n ...props.analyticsOptions,\n actionType: UserAction.Click,\n descriptor: ClickDescriptor.Cover\n };\n\n return (\n <CoverPillWidgetContentWrapper\n {...props}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n coverUrl={props.data.cover?.url}\n coverBgColor={props.data?.metadata?.backgroundColor}\n subtitle={props.getSubtitle?.(props.data) || presentationName}\n isComingSoon={isComingSoon}\n themeColor={props.shouldHighlight?.(props.data) ? props.data?.metadata?.backgroundColor ?? '' : ''}\n />\n );\n}\n\nconst Memoized = React.memo(SubjectWidgetItem);\n\nexport { Memoized as SubjectWidgetItem };\n","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { SubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item/SubjectWidgetItem';\nimport { Classification } from 'libs/shared/interfaces';\n\nexport interface CoverFixedPillListLargeWidgetTemplateProps {\n name: string;\n description: string;\n hasTableOfContents: boolean;\n \n analyticsData?: HashObject;\n\n content: Classification[];\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink\n };\n settings: {\n hasTopicDirectories: boolean\n };\n}\n\nexport function CoverFixedPillListLargeWidgetTemplate(props: CoverFixedPillListLargeWidgetTemplateProps): JSX.Element {\n return (\n <>\n <WidgetHeader name={props.name} description={props.description} />\n <Row className='mb-n2'>\n {props.content.map(c => {\n return (\n <Col className='position-relative pb-2' key={c.id} xs={12} sm={6} lg={props.hasTableOfContents ? 6 : 4} xl={4}>\n <SubjectWidgetItem\n data={c}\n getChildAppLink={(c: Classification) => props.appLinks?.classification?.(c)}\n analyticsData={props.analyticsData}\n highlightOnHover={props.settings?.hasTopicDirectories}\n isLarge\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}\n","import * as React from 'react';\n\nimport { RandomHelper } from 'libs/common/react/utils/RandomHelper';\n\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\n\nimport styles from './cover-pill.module.scss';\n\nexport const PartialSubjectWidgetItem = () => {\n const [width] = React.useState(RandomHelper.getRandomInt(5) + 3 + 'rem');\n\n return (\n <div className={`border d-flex position-relative me-2 ${styles.widgetItem}`}>\n <div className={styles.imagePanel} />\n <div className='px-2' style={{ width }} />\n <div className={styles.partialIcon}>\n <ImageFallback type={ImageFallbackType.Subject} />\n </div>\n </div>\n );\n};\n\nexport const PartialLargeSubjectWidgetItem = () => {\n return (\n <div className={`border d-flex position-relative me-2 ${styles.widgetItem}`}>\n <div className={`${styles.partialLargeImage}`} />\n <div className='px-2' />\n <div className={styles.partialIcon}>\n <ImageFallback type={ImageFallbackType.Subject} extraClasses={styles.partialLargeFallback} />\n </div>\n </div>\n );\n};\n","import * as React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, HashObject, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { EditSvg } from 'libs/shared/images/svg/actions/EditSvg';\n\nimport styles from './cover-pill.module.scss';\n\ninterface EditSubjectsWidgetLinkProps {\n appLink: Core.AppLink;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\nconst analyticsOptions: AnalyticsOptions = {\n actionType: UserAction.Click,\n entity: EntityType.UserSetting,\n descriptor: ClickDescriptor.Tile\n};\n\nexport function EditSubjectsWidgetLink(props: EditSubjectsWidgetLinkProps): JSX.Element {\n const className =\n `${styles.editSubjectsItem} d-flex position-relative px-3 justify-content-center align-items-center`;\n\n return (\n <AppLink\n appLink={props.appLink}\n className='text-decoration-none'\n analyticsData={{ ...props.analyticsData, type: 'subject-preference' }}\n analyticsOptions={ { ...props.analyticsOptions, ...analyticsOptions }}\n >\n <div className={className}>\n <SvgContainer svg={EditSvg} className='me-2 align-middle d-inline-block svg-container' />\n <p className='h6 align-middle text-truncate'><Text namespace='shared.subjectWidgetItem' phrase='edit' /></p>\n </div>\n </AppLink>\n );\n}\n","import * as React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, HashObject, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { ClickViewLogoInverted } from 'libs/shared/components/svgs/clickview-logo/ClickViewLogo';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport styles from './cover-pill.module.scss';\n\ninterface AllSubjectsWidgetLinkProps {\n appLink: Core.AppLink;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\nconst analyticsOptions: AnalyticsOptions = {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n descriptor: ClickDescriptor.Tile\n};\n\nexport function AllSubjectsWidgetLink(props: AllSubjectsWidgetLinkProps): JSX.Element {\n const className =\n `${styles.allSubjectsItem}\n d-flex flex-column position-relative px-2\n align-items-center justify-content-center text-nowrap bg-navy`;\n\n return (\n <AppLink\n appLink={props.appLink}\n className='text-decoration-none'\n analyticsData={{ ...props.analyticsData, type: 'subject-all' }}\n analyticsOptions={ { ...props.analyticsOptions, ...analyticsOptions }}\n >\n <div className={className}>\n <div className={styles.logoContainer}>\n <ClickViewLogoInverted />\n </div>\n <p className='h6 pt-2 px-3 mb-0'><Text namespace='shared.subjectWidgetItem' phrase='all' /></p>\n </div>\n </AppLink>\n );\n}\n","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { PartialLargeSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nexport function PartialCoverFixedPillListLargeWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n return (\n <div className='py-2'>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\n <Row className='g-0'>\n {Array(5).fill(null).map((_, i) => {\n return (\n <Col key={i} xs={12} sm={6} lg={4}>\n <div className='position-relative mb-2'>\n <PartialLargeSubjectWidgetItem />\n </div>\n </Col>\n );\n })}\n </Row>\n </div>\n );\n}\n",":local {\n .emoji {\n letter-spacing: map-get($spacers, 1);\n }\n}","import React from 'react';\n\nimport styles from './emoji-text.module.scss';\n\ninterface EmojiTextProps {\n emoji: string;\n}\n\nexport function EmojiText(props: React.PropsWithChildren<EmojiTextProps>): JSX.Element {\n return (\n <>\n <span className={styles.emoji}>{props.emoji}</span>\n {props.children}\n </>\n );\n}\n","import * as Yup from 'yup';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nconst namespace = 'shared.feedbackForm';\n\nexport const FeedbackFormValidationSchema = Yup.object().shape({\n feedbackInput: Yup.string().max(5000, () => LanguageService.getPhrase(namespace, 'tooLong'))\n});\n","@import '~styles/utils/include-media';\n:local {\n .promptContainer {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n margin: 0 auto;\n\n .text {\n margin-bottom: 0;\n text-align: center;\n }\n\n @include media(\"<sm\") {\n flex-direction: column;\n\n .text {\n margin-bottom: map-get($spacers, 2);\n }\n }\n }\n\n .form {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 50%;\n margin: 0 auto;\n flex-direction: column;\n\n :global(.form-group) {\n width: 100%;\n }\n\n .text {\n text-align: center;\n margin-bottom: map-get($spacers, 2);\n }\n\n @include media('<=lg') {\n width: 75%;\n }\n\n @include media('<=sm') {\n width: 100%;\n }\n }\n}","import React from 'react';\nimport { Form } from 'formik';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nimport { EmojiText } from 'libs/shared/components/emoji-text/EmojiText';\nimport { FormButtons } from 'libs/shared/components/forms/form-buttons/FormButtons';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { FormSubmissionOptions, FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { ThumbsDownSvg } from 'libs/shared/images/svg/actions/ThumbsDownSvg';\nimport { ThumbsUpSvg } from 'libs/shared/images/svg/actions/ThumbsUpSvg';\n\nimport { FeedbackFormValidationSchema } from './FeedbackFormValidationSchema';\n\nimport styles from './feedback-form.module.scss';\n\nconst namespace = 'shared.feedbackForm';\n\nexport interface DashboardFeedbackData {\n type: 'positive' | 'negative';\n content: string;\n}\n\ntype FormState = 'prompt' | 'yes' | 'no' | 'done';\n\ninterface FeedbackFormProps {\n onSubmit: (feedback: DashboardFeedbackData) => Promise<void>;\n}\n\nexport function FeedbackForm(props: FeedbackFormProps): JSX.Element {\n const [ state, setState ] = React.useState<FormState>('prompt');\n\n const alerts = useAlerts();\n\n function onClickYes(): void {\n setState('yes');\n }\n\n function onClickNo(): void {\n setState('no');\n }\n\n async function onSubmit(\n formData: { feedbackInput: string },\n onDone: (options: FormSubmissionOptions) => void\n ): Promise<void> {\n try {\n await props.onSubmit({\n content: formData.feedbackInput,\n type: state === 'yes' ? 'positive' : 'negative'\n });\n \n setState('done');\n } catch {\n setState('prompt');\n\n alerts.error(LanguageService.getPhrase(namespace, 'error'));\n } finally {\n onDone({ reset: true });\n }\n }\n\n if (!FunctionHelper.isFunction(props.onSubmit))\n return <></>;\n\n if (state === 'prompt') {\n return (\n <div className={styles.promptContainer}>\n <p className={`fw-semibold me-2 ${styles.text}`}>\n <EmojiText emoji='🔎'>\n <Text namespace={namespace} phrase='feedbackQuestion' />\n </EmojiText>\n </p>\n\n <div className='d-flex align-items-center'>\n <IconButton\n className='btn btn-outline-dark me-2'\n onClick={onClickYes}\n svg={ThumbsUpSvg}\n >\n <Text namespace={namespace} phrase='yes' />\n </IconButton>\n\n <IconButton\n className='btn btn-outline-dark'\n onClick={onClickNo}\n svg={ThumbsDownSvg}\n >\n <Text namespace={namespace} phrase='no' />\n </IconButton>\n </div>\n </div>\n );\n }\n\n if (state === 'yes') {\n return (\n <FormWrapper\n onSubmit={onSubmit}\n initialValues={{ feedbackInput: '' }}\n validationSchema={FeedbackFormValidationSchema}\n >\n <Form className={styles.form}>\n <p className={`fw-semibold ${styles.text}`}>\n <EmojiText emoji='👏'>\n <Text namespace={namespace} phrase='happyFeedback' />\n </EmojiText>\n </p>\n <FormField\n name='feedbackInput'\n as='textarea'\n autoComplete='off'\n autoFocus\n rows={4}\n placeholder={LanguageService.getPhrase(namespace, 'feedbackPlaceholder')}\n spellCheck={false}\n />\n <div className='d-flex justify-content-end w-100'>\n <button className='btn btn-link' onClick={() => setState('prompt')}>\n <Text namespace={namespace} phrase='back' />\n </button>\n\n <FormButtons\n variant='dark'\n submitText={LanguageService.getPhrase(namespace, 'sendFeedback')}\n />\n </div>\n </Form>\n </FormWrapper>\n );\n }\n\n if (state === 'no') {\n return (\n <FormWrapper\n onSubmit={onSubmit}\n initialValues={{ feedbackInput: '' }}\n validationSchema={FeedbackFormValidationSchema}\n >\n <Form className={styles.form}>\n <p className={`fw-semibold ${styles.text}`}>\n <EmojiText emoji='😢'>\n <Text namespace={namespace} phrase='unhappyFeedback' />\n </EmojiText>\n </p>\n <FormField\n name='feedbackInput'\n as='textarea'\n autoComplete='off'\n autoFocus\n rows={4}\n placeholder={LanguageService.getPhrase(namespace, 'feedbackPlaceholder')}\n spellCheck={false}\n />\n \n <div className='d-flex justify-content-end w-100'>\n <button className='btn btn-link' onClick={() => setState('prompt')}>\n <Text namespace={namespace} phrase='back' />\n </button>\n\n <FormButtons\n variant='dark'\n submitText={LanguageService.getPhrase(namespace, 'sendFeedback')}\n />\n </div>\n </Form>\n </FormWrapper>\n );\n }\n\n if (state === 'done') {\n return (\n <p className='fw-semibold text-center'>\n <EmojiText emoji='🙌'>\n <Text namespace={namespace} phrase='thankYou' />\n </EmojiText>\n </p>\n );\n }\n\n return <></>;\n}\n",":local {\n .imageContainer {\n position: relative;\n background-position: top;\n background-size: cover;\n width: 2rem;\n height: 2rem;\n flex-shrink: 0;\n\n .image {\n width: 100%;\n height: 100%;\n background-position: center;\n background-size: cover;\n background-repeat: no-repeat;\n }\n }\n\n .background {\n background-color: $gray-100;\n }\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DashboardFeedbackData, FeedbackForm } from 'libs/shared/components/feedback-form/FeedbackForm';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Classification } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './cover-fixed-pill-list-xsmall.module.scss';\n\nconst getPhrase = LanguageService.encloseNamespace('shared.coverFixedPillListXSmall');\n\nexport interface CoverFixedPillListXSmallWidgetTemplateProps {\n name: string;\n content: Classification[];\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink\n };\n onSubmitFeedback: (feedback: DashboardFeedbackData) => Promise<void>;\n isUpselling?: boolean;\n}\n\nexport function CoverFixedPillListXSmallWidgetTemplate(\n props: CoverFixedPillListXSmallWidgetTemplateProps\n): JSX.Element {\n return (\n <>\n <div className={`${styles.background} px-4 py-3 rounded-3 mb-3`}>\n <h2 className='h5'>\n {\n props.isUpselling ?\n getPhrase('upsellHeading', { smartCount: props.content.length }) :\n props.name\n }\n </h2>\n\n <Row as='ul' className='list-unstyled mb-2 w-100'>\n {props.content.map(classification => {\n const coverUrl = ImageHelper.createUrl(classification.cover?.url, { size: ImageSize.Small });\n\n return (\n <Col as='li' key={classification.id} xs={12} sm={6} lg={4}>\n <AppLink\n appLink={props.appLinks?.classification?.(classification)}\n className='d-flex align-items-center mb-2'\n >\n <div className={`${styles.imageContainer} me-2`}>\n <div className={`${styles.image} rounded`} style={{ backgroundImage: `url('${coverUrl}')` }} />\n </div>\n <div>\n {classification.name}\n </div>\n </AppLink>\n </Col>\n );\n })}\n </Row>\n </div>\n\n {!props.isUpselling && <FeedbackForm onSubmit={props.onSubmitFeedback} />}\n </>\n );\n}\n","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport styles from '../cover-fixed-pill-list-xsmall.module.scss';\n\nexport function PartialCoverFixedPillListXSmallWidgetTemplate(): JSX.Element {\n return (\n <div className={`${styles.background} px-4 py-3 rounded-3 mb-3`}>\n <div className='partial-loading-background mb-2' style={{ height: '1.35rem', width: '8rem' }} />\n\n <Row className={`mb-2 ${styles.row}`}>\n {Array(8).fill(null).map((_, i) => {\n return (\n <Col key={i} xs={12} sm={6} lg={4}>\n <div className='d-flex align-items-center mb-2'>\n <div className='partial-loading-background me-2 rounded' style={{ width: '2rem', height: '2rem' }} />\n\n <div className='partial-loading-background' style={{ width: '5rem', height: '1.3125rem' }} />\n </div>\n </Col>\n );\n })}\n </Row>\n </div>\n );\n}\n",":local {\n .playlistItem {\n padding-bottom: 100%; // 1:1 aspect ratio\n }\n\n .playlistItemGradient {\n &::after {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: linear-gradient(\n to top,\n rgba(0, 0, 0, 0.55) 00%,\n rgba(0, 0, 0, 0.50) 05%,\n rgba(0, 0, 0, 0.40) 10%,\n rgba(0, 0, 0, 0.20) 25%,\n rgba(0, 0, 0, 0.05) 50%,\n rgba(0, 0, 0, 0.02) 60%,\n rgba(0, 0, 0, 0.00) 80%\n );\n }\n }\n\n .playlistMetadata {\n position: absolute;\n left: map-get($spacers, 2);\n right: map-get($spacers, 2);\n bottom: map-get($spacers, 2);\n z-index: 1;\n }\n\n .partialHeading {\n height: 2rem;\n width: 17rem;\n }\n\n .ownerAvatarContainer {\n position: absolute;\n right: map-get($spacers, 2);\n top: map-get($spacers, 2);\n z-index: 1;\n width: 15%;\n height: 15%;\n }\n}","import * as React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport styles from './playlist.module.scss';\n\ninterface PartialPlaylistListProps {\n numItems?: number;\n itemClassName?: string;\n showHeading?: boolean;\n}\n\nPartialPlaylistList.defaultProps = {\n numItems: 8\n};\n\nexport function PartialPlaylistList(props: PartialPlaylistListProps): JSX.Element {\n const PARTIAL_PLAYLISTS = [...Array(props.numItems)];\n\n const className = props.itemClassName || '';\n\n return (\n <>\n {props.showHeading && <div className={`${styles.partialHeading} mb-1 partial-loading-background`} />}\n <Row className='mx-n1 mb-n2'>\n {PARTIAL_PLAYLISTS.map((p, idx) => (\n <Col key={idx} xs={6} sm={4} lg={3} className={`${className} px-1 pb-2`}>\n <div className={`${styles.playlistItem} partial-loading-background rounded-3`} />\n </Col>\n ))}\n </Row>\n </>\n );\n}\n","import React from 'react';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Playlist } from 'libs/shared/interfaces';\n\nconst namespace = 'playlists.playlistCount';\n\nfunction getCount(playlist: Playlist): number | false {\n if (!playlist)\n return false;\n\n const videos = playlist.videos?.count ?? 0;\n const interactives = playlist.interactives?.count ?? 0;\n const clips = playlist.clips?.count ?? 0;\n\n return videos + interactives + clips;\n}\n\ninterface PlaylistCountProps {\n playlist: Playlist;\n}\n\nexport function PlaylistCount(props: PlaylistCountProps): JSX.Element {\n const count = getCount(props.playlist);\n\n if (count === false || Number.isNaN(count))\n return <></>;\n\n return (\n <span className='text-shadow font-size-sm'>\n <Text namespace={namespace} phrase='count' options={{ smartCount: count }} />\n </span>\n );\n}\n","import * as React from 'react';\n\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { ClickViewAvatar } from 'libs/shared/components/clickview-avatar/ClickViewAvatar';\nimport { CurrentUser, Playlist } from 'libs/shared/interfaces';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\ninterface PlaylistOwnerAvatarProps {\n playlist: Playlist;\n imageCdnUrl: string;\n currentUser?: CurrentUser;\n}\n\nexport function PlaylistOwnerAvatar(props: PlaylistOwnerAvatarProps): JSX.Element {\n const { _liteOwner } = props.playlist;\n\n if (props.playlist._curationTags?.value?.isClickViewCurated)\n return (\n <ClickViewAvatar />\n );\n\n if (!_liteOwner?.id || !props.currentUser?.id)\n return <></>;\n\n const currentUserIsOwner = _liteOwner.id.toString() === props.currentUser.id.toString();\n\n if (currentUserIsOwner)\n return <></>;\n\n const url = typeof _liteOwner.avatar === 'string' ? _liteOwner.avatar : _liteOwner.avatar?.url;\n\n return (\n <Avatar\n imageUrl={url}\n imageCdnUrl={props.imageCdnUrl}\n initials={UserHelper.getInitials(_liteOwner.name, _liteOwner.surname)}\n />\n );\n}\n","import * as React from 'react';\nimport { format } from 'timeago.js';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { AnalyticsOptions, EntityType, HashObject } from 'libs/analytics/interfaces';\n\nimport { PlaylistCount } from 'libs/shared/apps/playlists/components/playlist-count/PlaylistCount';\nimport { PlaylistOwnerAvatar } from 'libs/shared/apps/playlists/components/playlist-list/PlaylistOwnerAvatar';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { AudienceLabel } from 'libs/shared/components/audience-label/AudienceLabel';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { ImageSize, ResizeType } from 'libs/shared/enums/Images';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { CurrentUser, Playlist, PresentationAudience } from 'libs/shared/interfaces';\nimport { getBgColorClass } from 'libs/shared/utils/getBgColorClass';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './playlist.module.scss';\n\nconst namespace = 'playlists.playlistList';\n\nexport type PlaylistItemStyle = 'square' | 'round' | 'round-left';\n\nexport interface PlaylistItemProps {\n data: Playlist;\n appLink: Core.AppLink;\n currentUser?: CurrentUser;\n presentationAudiences?: PresentationAudience[];\n bgColourClassNames?: string[];\n titleClassName?: string;\n imageCdnUrl?: string;\n itemStyle?: PlaylistItemStyle;\n showCount?: boolean;\n showOwner?: boolean;\n showFallbackImage?: boolean;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n audienceLabelClass?: string;\n}\n\nPlaylistItem.defaultProps = {\n itemStyle: 'square'\n};\n\nexport function PlaylistItem(props: PlaylistItemProps): JSX.Element {\n const imageUrl = ImageHelper.createUrl(props.data.cover && props.data.cover.url, {\n size: ImageSize.Medium,\n resizeType: ResizeType.Cover\n });\n\n const audiences = props.data.subjectPresentationAudiences &&\n props.data.subjectPresentationAudiences.data;\n\n const mergedAudience = useMergeAudiences(audiences, props.presentationAudiences);\n\n let className = styles.playlistItem;\n\n const showImage = !!imageUrl || !!props.showFallbackImage;\n\n if (showImage)\n className += ` ${styles.playlistItemGradient}`;\n\n if (!showImage && props.bgColourClassNames)\n className += ` ${styles.playlistItem} ${getBgColorClass(props.data.name, props.bgColourClassNames)}`;\n\n if (props.itemStyle === 'round')\n className += ` rounded-3 overflow-hidden`;\n\n if (props.itemStyle === 'round-left')\n className += ` rounded-start-lg overflow-hidden`;\n\n const analyticsData = { ...props.analyticsData,\n id: props.data?.id,\n name: props.data?.name\n };\n\n const analyticsOptions = {\n ...props.analyticsOptions,\n entity: EntityType.Playlist\n };\n\n const getTitle = () => {\n if (!props.data.contentModifiedDate || props.data._curationTags?.value?.isClickViewCurated)\n return '';\n\n return LanguageService.getPhrase(namespace, 'lastUpdated', {\n timeago: format(DateHelper.convertUTCToLocal(props.data.contentModifiedDate))\n });\n };\n\n return (\n <AppLink\n appLink={props.appLink}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n title={getTitle()}\n >\n <BaseImage data={imageUrl} alt={props.data.name} className={className}>\n {!!props.showFallbackImage && <ImageFallback type={ImageFallbackType.Playlist} />}\n <div className={`text-white ${styles.playlistMetadata}`}>\n {!!props.showCount && (\n <PlaylistCount playlist={props.data} />\n )}\n <h6 className={`mb-0 ${props.titleClassName || ''}`}><span className='text-shadow clamp-2'>{props.data.name}</span></h6>\n {!!audiences && !!audiences.length && !!mergedAudience &&\n <AudienceLabel\n className={`${props.audienceLabelClass ? props.audienceLabelClass : ''} mt-1`}\n audience={mergedAudience}\n border='white'\n />\n }\n </div>\n {!!props.showOwner && !!props.imageCdnUrl &&\n <div className={styles.ownerAvatarContainer}>\n <PlaylistOwnerAvatar\n playlist={props.data}\n currentUser={props.currentUser}\n imageCdnUrl={props.imageCdnUrl}\n />\n </div>\n }\n </BaseImage>\n </AppLink>\n );\n}\n","import * as React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/core';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, HashObject, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { CurrentUser, Playlist, PresentationAudience } from 'libs/shared/interfaces';\n\nimport { PlaylistItem, PlaylistItemStyle } from './PlaylistItem';\n\ninterface PlaylistListProps {\n playlists: Playlist[];\n getPlaylistAppLink: (playlist: Playlist) => Core.AppLink;\n currentUser?: CurrentUser;\n presentationAudiences?: PresentationAudience[];\n itemContainerClassName?: string;\n itemTitleClassName?: string;\n bgColourClassNames?: string[];\n itemStyle?: PlaylistItemStyle;\n imageCdnUrl?: string;\n showCount?: boolean;\n showOwner?: boolean;\n showFallbackImage?: boolean;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n extraPlaylistItem?: JSX.Element;\n}\n\nconst analyticsOptions: AnalyticsOptions = {\n actionType: UserAction.Click,\n entity: EntityType.Playlist,\n location: LocationContext.PlaylistListItem,\n descriptor: ClickDescriptor.Cover\n};\n\nexport function PlaylistList(props: PlaylistListProps): JSX.Element {\n return (\n <Row as='ul' className='list-unstyled mx-n1'>\n {props.extraPlaylistItem && (\n <Col as='li' key='extra-playlist-item' xs={6} sm={4} lg={3} className={`mb-2 px-1 ${props.itemContainerClassName ? props.itemContainerClassName : ''}`}>\n {props.extraPlaylistItem}\n </Col>\n )}\n\n {props.playlists.map(p => (\n <Col as='li' key={p.id} xs={6} sm={4} lg={3} className={`mb-2 px-1 ${props.itemContainerClassName ? props.itemContainerClassName : ''}`}>\n <PlaylistItem\n data={p}\n appLink={props.getPlaylistAppLink(p)}\n imageCdnUrl={props.imageCdnUrl}\n currentUser={props.currentUser}\n presentationAudiences={props.presentationAudiences}\n bgColourClassNames={props.bgColourClassNames}\n showCount={props.showCount}\n showOwner={props.showOwner}\n showFallbackImage={props.showFallbackImage}\n titleClassName={props.itemTitleClassName}\n itemStyle={props.itemStyle}\n analyticsData={props.analyticsData}\n analyticsOptions={{ ...props.analyticsOptions, ...analyticsOptions }}\n />\n </Col>\n ))}\n </Row>\n );\n}\n","import * as React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { PlaylistItem } from 'libs/shared/apps/playlists/components/playlist-list';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { Playlist, PresentationAudience } from 'libs/shared/interfaces';\n\nconst analyticsOptions: AnalyticsOptions = {\n actionType: UserAction.Click,\n entity: EntityType.Playlist,\n location: LocationContext.PlaylistListItem,\n descriptor: ClickDescriptor.Cover\n};\n\nexport interface CoverFixedTileListWidgetTemplateProps {\n name: string;\n description: string;\n content: Playlist[];\n audiences: PresentationAudience[];\n analyticsData?: HashObject;\n \n appLinks: {\n playlist: (playlist: Playlist) => Core.AppLink\n };\n}\n\nexport function CoverFixedTileListWidgetTemplate(props: CoverFixedTileListWidgetTemplateProps): JSX.Element {\n return (\n <div>\n <WidgetHeader name={props.name} description={props.description} />\n <Row as='ul' className='list-unstyled mx-n1 mb-n2'>\n {props.content.map(p => (\n <Col as='li' key={p.id} xs={6} sm={4} lg={3} className='px-1 pb-2 columns-of-five'>\n <PlaylistItem\n data={p}\n presentationAudiences={props.audiences}\n appLink={props.appLinks?.playlist?.(p)}\n itemStyle='round'\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n />\n </Col>\n ))}\n </Row>\n </div>\n );\n}\n","import React from 'react';\n\nimport { PartialPlaylistList } from 'libs/shared/apps/playlists/components/playlist-list';\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nexport function PartialCoverFixedTileListWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n return (\n <>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\n <PartialPlaylistList itemClassName='columns-of-five' />\n </>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { DynamicWidget } from 'libs/shared/components/widgets/dynamic-widget/DynamicWidget';\nimport { SubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item';\nimport { PartialSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item/PartialSubjectWidgetItem';\nimport { HardCoded } from 'libs/shared/constants/HardCoded';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { Classification, Cover, CuratedDashboardAppLink } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nconst CLASSIFICATION_LATEST_RELEASES = 'classification-latest-releases';\nconst EXPLORE_ALL_TOPICS = 'explore-all-topics';\n\nexport interface CoverItemContent {\n id: string;\n name: string;\n cover: Cover;\n totalVideos?: number;\n}\n\nfunction getTotalVideos(content: CoverItemContent[]): number {\n return content.reduce((sum, cur) => sum += (cur?.totalVideos || 0), 0);\n}\n\nfunction getSubtitleFromTotalVideos(data: CoverItemContent): string {\n return data.totalVideos ? `${data.totalVideos} new video${data.totalVideos > 1 ? 's' : '' }` : '';\n}\n\nfunction getExtraItem(props: CoverSlidingPillListSmallWidgetTemplateProps, content: CoverItemContent[]) {\n if (\n props.metadata?.appLink === CuratedDashboardAppLink.ClassificationDirectory &&\n props.settings?.hasTopicDirectories\n ) {\n return {\n id: CuratedDashboardAppLink.ClassificationDirectory,\n name: `Explore all topics`,\n cover: {\n url: ImageHelper.createUrl(\n props.classification?.cover?.url,\n { size: ImageSize.Small }\n )\n },\n metadata: {\n backgroundColor: props.classification?.metadata?.backgroundColor\n }\n };\n }\n\n if (props.metadata?.appLink === CuratedDashboardAppLink.ClassificationLatestReleases)\n return {\n id: CLASSIFICATION_LATEST_RELEASES,\n name: 'All new releases',\n cover: {\n url: ImageHelper.getUrlById(props.imageCdnUrl, ImageType.Covers, props.metadata.imageId, ImageSize.Medium)\n },\n totalVideos: getTotalVideos(content)\n };\n\n if (props.metadata?.appLink === CuratedDashboardAppLink.ExploreAllTopics)\n return {\n id: EXPLORE_ALL_TOPICS,\n name: 'Explore all subjects',\n cover: { url: ImageHelper.createUrl(HardCoded.Images.STREAMABLE_TOPIC_COVER, { size: ImageSize.Small }) }\n };\n}\n\nexport interface CoverSlidingPillListSmallWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n imageCdnUrl: string;\n content: CoverItemContent[];\n classification: Classification;\n showHighlight?: boolean;\n analyticsData?: HashObject;\n \n widgetTypeId: WidgetTypeId;\n templateId: WidgetTemplate;\n appLinks: {\n classificationDirectory: (classification: Classification) => Core.AppLink,\n allTopics: (presentationId?: string) => Core.AppLink,\n classificationLatestReleases: (classification: Classification) => Core.AppLink,\n classification: (classification: Classification | null) => Core.AppLink\n };\n metadata: {\n imageId: string,\n appLink: CuratedDashboardAppLink\n };\n settings: {\n hasTopicDirectories: boolean\n };\n}\n\nexport function CoverSlidingPillListSmallWidgetTemplate(\n props: CoverSlidingPillListSmallWidgetTemplateProps\n): JSX.Element {\n const extraContent = getExtraItem(props, props.content);\n const isClassificationLatestReleasedWidget =\n props.metadata?.appLink === CuratedDashboardAppLink.ClassificationLatestReleases;\n\n function getHeadingAppLink(): Core.AppLink {\n if (\n !props.classification ||\n !TopicsHelper.isTopLevelTopic(props.classification) ||\n props.widgetTypeId !== WidgetTypeId.Classifications ||\n props.templateId !== WidgetTemplate.CoverSlidingPillListSmall ||\n !props.settings?.hasTopicDirectories\n ) {\n return null;\n }\n\n return props.appLinks?.classificationDirectory?.(props.classification);\n }\n\n function getChildAppLink(data: any): Core.AppLink {\n if (data.id === CuratedDashboardAppLink.ClassificationDirectory)\n return props.appLinks?.classificationDirectory?.(props.classification);\n \n if (data.id === CuratedDashboardAppLink.ExploreAllTopics)\n return props.appLinks?.allTopics?.(data);\n\n return isClassificationLatestReleasedWidget ?\n props.appLinks?.classificationLatestReleases?.(data) :\n props.appLinks?.classification?.(data);\n }\n\n return (\n <DynamicWidget\n id={props.id}\n collection={extraContent ? [ extraContent, ...props.content ] : props.content}\n getChildAppLink={data => getChildAppLink(data)}\n childComponent={SubjectWidgetItem}\n partialLoadingComponent={PartialSubjectWidgetItem}\n heading={props.name}\n headingAppLink={getHeadingAppLink()}\n getSubtitle={\n isClassificationLatestReleasedWidget ?\n getSubtitleFromTotalVideos :\n undefined\n }\n description={props.description}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n childComponentProps={{\n highlightOnHover: props.settings?.hasTopicDirectories,\n shouldHighlight: (data: CoverItemContent) => data.id === CuratedDashboardAppLink.ClassificationDirectory\n }}\n />\n );\n}\n","import React from 'react';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { PartialDynamicWidget } from 'libs/shared/components/widgets/dynamic-widget';\nimport { PartialSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nexport function PartialCoverSlidingPillListSmallWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n return (\n <div className='py-2'>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\n <PartialDynamicWidget partialLoadingComponent={PartialSubjectWidgetItem} />\n </div>\n );\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\ninterface SearchExchangeArchiveDescriptionProps {\n appLink: Core.AppLink;\n}\n\nconst namespace = 'search.searchExchangeArchiveDescription';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function SearchExchangeArchiveDescription(props: SearchExchangeArchiveDescriptionProps): JSX.Element {\n return (\n <>\n {getPhrase('searchExchangeArchiveDescription')}\n &nbsp;\n <AppLink\n appLink={props.appLink}\n className='info-link'\n >\n {getPhrase('searchExchangeArchiveLink')}\n </AppLink>\n </>\n );\n}\n","import React from 'react';\nimport { useDraggable, UseDraggableArguments, useDroppable, UseDroppableArguments } from '@dnd-kit/core';\n\ninterface DragDropMoveWrapperProps extends React.PropsWithChildren {\n droppable?: UseDroppableArguments;\n draggable?: UseDraggableArguments;\n dragStyle?: string;\n dropStye?: string;\n setIsDragging?: React.Dispatch<React.SetStateAction<boolean>>;\n isDragging?: boolean;\n}\n\nexport function DragDropMoveWrapper(props: DragDropMoveWrapperProps) {\n const {\n active: dragActive,\n isDragging,\n attributes,\n listeners,\n setNodeRef: draggableRef\n } = useDraggable({ ...props.draggable, disabled: !props.draggable, attributes: { role: 'drag', tabIndex: -1 } });\n const {\n isOver,\n over,\n active: dropActive,\n setNodeRef: droppableRef\n } = useDroppable({ ...props.droppable, disabled: !props.droppable });\n\n React.useEffect(() => {\n const data = props.draggable?.data;\n if (Array.isArray(data) && data?.includes(dragActive?.id.toString())) {\n props.setIsDragging?.(isDragging);\n } else {\n props.setIsDragging?.(false);\n }\n }, [isDragging]);\n\n function isSelected() {\n const data = props.draggable?.data;\n return Array.isArray(data) && data.includes(props.draggable.id.toString());\n }\n\n return (\n <div\n ref={draggableRef}\n {...listeners}\n {...attributes}\n className={`${props.draggable ? 'cursor-grab' : 'cursor-default'} ${(isDragging && dragActive) || (props.isDragging && isSelected()) ? props.dragStyle : null}`}\n >\n <div\n ref={droppableRef}\n className={(dropActive && isOver && dragActive?.id !== over?.id) ? props.dropStye : null}\n >\n {props.children}\n </div>\n </div>\n );\n}\n",":local {\n .dragHandleContainer {\n color: $gray-700;\n }\n}","import React from 'react';\nimport { Col } from 'react-bootstrap';\n\nimport { PropsWithSortableItemProps } from 'libs/shared/components/sortable/SortableItemWrapper';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { HandleSvg } from 'libs/shared/images/svg/objects/HandleSvg';\nimport { SvgIcon } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './video-item-left-content.module.scss';\n\ninterface VideoItemLeftContentProps {\n index: number;\n showDragHandle: boolean;\n showIndexes: boolean;\n dragHandleIcon: SvgIcon;\n dragHandleIconSize: SvgContainerSize;\n}\n\nfunction getClassName(showDragHandle: boolean): string {\n const baseClassName = 'd-flex justify-content-center align-items-center';\n if (!showDragHandle) return baseClassName;\n\n return `${baseClassName} cursor-pointer ${styles.dragHandleContainer}`;\n}\n\nexport function VideoItemLeftContent(props: PropsWithSortableItemProps<VideoItemLeftContentProps>): JSX.Element {\n const dragProps = props.showDragHandle ? { ...props.dragAttributes, ...props.dragListeners } : {};\n const className = getClassName(props.showDragHandle);\n\n if (!props.showDragHandle && !props.showIndexes) return <></>;\n\n return (\n <Col\n xs={2}\n className={className}\n {...dragProps}\n >\n {!!props.showDragHandle &&\n <SvgContainer svg={props.dragHandleIcon} size={props.dragHandleIconSize} />\n }\n {!!props.showIndexes &&\n <span className='fw-semibold'>{props.index + 1}</span>\n }\n </Col>\n );\n}\n\nVideoItemLeftContent.defaultProps = {\n dragHandleIcon: HandleSvg,\n dragHandleIconSize: SvgContainerSize.Small\n};\n","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'shared.signInToWatch';\n\ninterface SignInToWatchProps {\n appLink: Core.AppLink;\n className: string;\n}\n\nexport function SignInToWatch(props: SignInToWatchProps): React.ReactElement {\n return (\n <AppLink appLink={props.appLink} className={props.className}>\n <Text namespace={namespace} phrase='signInToWatch'></Text>\n </AppLink>\n );\n}\n","import * as React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces/AnalyticsTypes';\n\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nexport interface VideoActionsOptions {\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\ntype GetVideoActions = (video: VideoTypes, options: VideoActionsOptions) => ActionOptions[];\ntype FetchMoreActions = (video: VideoTypes) => void;\n\ninterface VideoActionsContextData {\n getVideoActions: GetVideoActions;\n fetchMoreActions?: FetchMoreActions;\n}\n\nexport const VideoActionsContext = React.createContext<VideoActionsContextData>(null);\n","import * as React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces/AnalyticsTypes';\n\nimport { Actions } from 'libs/shared/components/actions/Actions';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { VideoActionsContext } from 'libs/shared/context/VideoActionsContext';\nimport { Video } from 'libs/shared/interfaces';\n\ninterface VideoItemActionsProps {\n video: Video;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\nexport function VideoItemActions(props: VideoItemActionsProps): JSX.Element {\n const videoActions = React.useContext(VideoActionsContext);\n\n if (!FunctionHelper.isFunction(videoActions?.getVideoActions))\n return <></>;\n\n const actions = videoActions.getVideoActions(props.video, {\n analyticsData: props.analyticsData,\n analyticsOptions: props.analyticsOptions\n });\n\n return (\n <Actions\n actions={actions}\n className='align-items-start gap-2'\n actionsDropdownClassName='btn btn-link py-0'\n dropdownToggleSvgSize={SvgContainerSize.Standard}\n fetchMore={videoActions.fetchMoreActions ? () => videoActions.fetchMoreActions(props.video) : null}\n customSize\n />\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces/AnalyticsTypes';\n\nimport { SignInToWatch } from 'libs/shared/components/sign-in-to-watch/SignInToWatch';\nimport { VideoItemActions } from 'libs/shared/components/video-list/components/video-item-actions/VideoItemActions';\nimport { Video } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\ninterface VideoItemTopRightProps {\n video: Video;\n showSignIn: boolean;\n signInAppLink?: Core.AppLink;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\nexport function VideoItemTopRight(props: VideoItemTopRightProps): JSX.Element {\n const { canNavigate } = VideoHelper.getCanBeConsumed(props.video);\n\n if (props.showSignIn && !canNavigate)\n return <SignInToWatch appLink={props.signInAppLink} className='btn btn-outline-dark align-self-start' />;\n\n return (\n <VideoItemActions\n video={props.video}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n />\n );\n}\n","import { ColProps } from 'react-bootstrap';\n\nimport { VideoItemSize } from 'libs/shared/components/video-list/BaseVideoItemProps';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nexport const VideoListHelper = {\n getThumbnailColumns(): ColProps {\n return {\n xs: 12,\n sm: 5,\n lg: 3\n };\n },\n\n getDetailsColumns(): ColProps {\n return {\n xs: 12,\n sm: 7,\n lg: 9\n };\n },\n\n getSize(breakpoints: Breakpoints, size: VideoItemSize): VideoItemSize {\n if (breakpoints.sm)\n return 'sm';\n \n return size || 'md';\n },\n\n getThumbnailColSize(hasDragHandle: boolean): number {\n return hasDragHandle ? 10 : 12;\n }\n};\n","@import '~styles/utils/mixins';\n@import '~styles/utils/include-media';\n:local {\n .responsiveGuidance {\n @include media('<=lg') {\n @include responsive-guidance-tags;\n }\n }\n}","import * as React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { EntityType, LocationContext } from 'libs/analytics/interfaces';\n\nimport { SortableItemWrapper } from 'libs/shared/components/sortable/SortableItemWrapper';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { BaseVideoItemProps } from 'libs/shared/components/video-list/BaseVideoItemProps';\nimport { VideoItemGuidance } from 'libs/shared/components/video-list/components/video-guidance/VideoItemGuidance';\nimport { VideoItemDescription } from 'libs/shared/components/video-list/components/video-item-description/VideoItemDescription';\nimport { VideoItemLeftContent } from 'libs/shared/components/video-list/components/video-item-left-content/VideoItemLeftContent';\nimport { VideoItemRestrictionBadge } from 'libs/shared/components/video-list/components/video-item-restriction-badge/VideoItemRestrictionBadge';\nimport { VideoItemTitle } from 'libs/shared/components/video-list/components/video-item-title/VideoItemTitle';\nimport { VideoItemTopRight } from 'libs/shared/components/video-list/components/video-item-top-right/VideoItemTopRight';\nimport { SortableVideoListContext } from 'libs/shared/components/video-list/VideoList';\nimport { VideoListHelper } from 'libs/shared/components/video-list/VideoListHelper';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { useHover } from 'libs/shared/hooks/UseHover';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { Clip } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './clip-item.module.scss';\n\nexport type ClipItemProps = BaseVideoItemProps<Clip>;\n\nexport const ClipItem = React.forwardRef((props: ClipItemProps, ref: React.LegacyRef<HTMLDivElement>) => {\n const breakpoints = useBreakpoints();\n const [ hoverRef, hovered ] = useHover<HTMLDivElement>();\n \n const size = VideoListHelper.getSize(breakpoints, props.size);\n const isSmall = size === 'sm';\n\n const { isSortable } = React.useContext(SortableVideoListContext);\n\n const mergedAudience = useMergeAudiences(props.video.subjectPresentationAudiences?.data, props.presentationAudiences);\n\n const showDragHandle = isSortable && !breakpoints.xs && (hovered || typeof props.index === 'undefined' || !props.showIndexes);\n const showIndexes = (props.showIndexes && !showDragHandle) && !breakpoints.xs;\n const hasIconOrIndex = (showDragHandle || props.showIndexes) && !breakpoints.xs;\n\n const appLink = props.getVideoAppLink(props.video, {});\n const analyticsProps = {\n analyticsData: props.analyticsData,\n analyticsOptions: {\n entity: EntityType.Clip,\n location: LocationContext.ClipListItem\n }\n };\n\n return (\n <div ref={hoverRef} className='w-100'>\n <div className={`row g-0 ${isSmall ? '' : 'py-2'}`} ref={ref} style={props.style}>\n <Col {...VideoListHelper.getThumbnailColumns()} className={`flex-column align-items-flex-start ${isSmall ? `pb-2 pe-2` : 'mb-1 px-2'}`}>\n <Row>\n <VideoItemLeftContent\n index={props.index}\n showDragHandle={showDragHandle}\n showIndexes={showIndexes}\n dragHandleIcon={props.dragHandleIcon}\n dragHandleIconSize={props.dragHandleIconSize}\n dragAttributes={props.dragAttributes}\n dragListeners={props.dragListeners}\n />\n \n <Col xs={VideoListHelper.getThumbnailColSize(hasIconOrIndex)}>\n <VideoThumbnail\n {...analyticsProps}\n video={props.video}\n appLink={appLink}\n shareId={props.shareId}\n audience={mergedAudience}\n imageOptions={{ size: ImageSize.Medium }}\n textPosition={ThumbnailTextPosition.Independent}\n type='static'\n commonVideoProps={{\n ...props.commonVideoProps,\n subTextType: 'none'\n }}\n showOwner={props.showOwner}\n />\n </Col>\n </Row>\n </Col>\n\n <Col\n {...VideoListHelper.getDetailsColumns()}\n className={`${isSmall ? 'pb-2' : 'px-2'} d-flex position-relative flex-column`}\n >\n <div className='d-flex justify-content-between'>\n <VideoItemTitle\n video={props.video}\n appLink={appLink}\n size={size}\n yearGroups={props.commonVideoProps.yearGroups}\n showPadlock={!props.commonVideoProps.hasStudentExperience && !props.commonVideoProps.hasGuestExperience}\n linkClassName='flex-grow-1'\n {...analyticsProps}\n />\n \n <VideoItemTopRight\n {...analyticsProps}\n video={props.video}\n showSignIn={props.showSignIn}\n signInAppLink={props.getSignInAppLink?.(appLink)}\n />\n </div>\n\n <div>\n {!isSmall && (\n <VideoItemDescription\n video={props.video}\n showSignIn={props.showSignIn}\n hasStudentExperience={props.commonVideoProps.hasStudentExperience}\n hasGuestExperience={props.commonVideoProps.hasGuestExperience}\n />\n )}\n {!props.commonVideoProps.hasStudentExperience && !props.commonVideoProps.hasGuestExperience && (\n <VideoItemRestrictionBadge video={props.video} yearGroups={props.commonVideoProps.yearGroups}/>\n )}\n </div>\n\n {VideoHelper.showVideoGuidance(props.hasPermissions) && (\n <VideoItemGuidance\n video={props.video}\n getVideoAppLink={props.getVideoAppLink}\n containerClassName='d-flex justify-content-start align-items-center pt-sm-1 gap-1'\n responsiveClassName={styles.responsiveGuidance}\n commonVideoProps={props.commonVideoProps}\n {...analyticsProps}\n />\n )}\n </Col>\n </div>\n </div>\n );\n});\n\ntype SortableClipItemProps = ClipItemProps & {\n index: number\n};\n\nexport const SortableClipItem = (props: SortableClipItemProps) => {\n return (\n <SortableItemWrapper id={props.video.id} childComponent={ClipItem} childProps={props} />\n );\n};\n","import * as React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { EntityType, LocationContext } from 'libs/analytics/interfaces';\n\nimport { SortableItemWrapper } from 'libs/shared/components/sortable/SortableItemWrapper';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { BaseVideoItemProps } from 'libs/shared/components/video-list/BaseVideoItemProps';\nimport { VideoItemDescription } from 'libs/shared/components/video-list/components/video-item-description/VideoItemDescription';\nimport { VideoItemLeftContent } from 'libs/shared/components/video-list/components/video-item-left-content/VideoItemLeftContent';\nimport { VideoItemRestrictionBadge } from 'libs/shared/components/video-list/components/video-item-restriction-badge/VideoItemRestrictionBadge';\nimport { VideoItemTitle } from 'libs/shared/components/video-list/components/video-item-title/VideoItemTitle';\nimport { VideoItemTopRight } from 'libs/shared/components/video-list/components/video-item-top-right/VideoItemTopRight';\nimport { InteractiveItemQuestions } from 'libs/shared/components/video-list/interactive-item/InteractiveItemQuestions';\nimport { SortableVideoListContext } from 'libs/shared/components/video-list/VideoList';\nimport { VideoListHelper } from 'libs/shared/components/video-list/VideoListHelper';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { useHover } from 'libs/shared/hooks/UseHover';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { InteractiveMetadata } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nexport interface InteractiveItemProps extends BaseVideoItemProps<InteractiveMetadata> {\n getPreviewQuestionsAppLink: (interactive: InteractiveMetadata) => Core.AppLink;\n}\n\nexport const InteractiveItem = React.forwardRef((props: InteractiveItemProps, ref: React.LegacyRef<HTMLDivElement>) => {\n const breakpoints = useBreakpoints();\n const [ hoverRef, hovered ] = useHover<HTMLDivElement>();\n\n const size = VideoListHelper.getSize(breakpoints, props.size);\n const isSmall = size === 'sm';\n\n const { isSortable } = React.useContext(SortableVideoListContext);\n\n const mergedAudience = useMergeAudiences(props.video.subjectPresentationAudiences?.data, props.presentationAudiences);\n\n const showDragHandle = isSortable && !breakpoints.xs && (hovered || typeof props.index === 'undefined' || !props.showIndexes);\n const showIndexes = (props.showIndexes && !showDragHandle) && !breakpoints.xs;\n const hasIconOrIndex = (showDragHandle || props.showIndexes) && !breakpoints.xs;\n\n const appLink = props.getVideoAppLink(props.video, {});\n const analyticsProps = {\n analyticsData: props.analyticsData,\n analyticsOptions: {\n entity: EntityType.Interactive,\n location: LocationContext.InteractiveListItem\n }\n };\n\n const { canNavigate } = VideoHelper.getCanBeConsumed(props.video);\n\n return (\n <div ref={hoverRef} className='w-100'>\n <div className='row g-0 py-2' ref={ref} style={props.style}>\n <Col {...VideoListHelper.getThumbnailColumns()} className={`flex-column align-items-flex-start ${isSmall ? `pb-2 pe-2` : 'mb-1 px-2'}`}>\n <Row>\n <VideoItemLeftContent\n index={props.index}\n showDragHandle={showDragHandle}\n showIndexes={showIndexes}\n dragHandleIcon={props.dragHandleIcon}\n dragHandleIconSize={props.dragHandleIconSize}\n dragAttributes={props.dragAttributes}\n dragListeners={props.dragListeners}\n />\n \n <Col xs={VideoListHelper.getThumbnailColSize(hasIconOrIndex)}>\n <VideoThumbnail\n {...analyticsProps}\n video={props.video}\n appLink={appLink}\n shareId={props.shareId}\n audience={mergedAudience}\n imageOptions={{ size: ImageSize.Medium }}\n textPosition={ThumbnailTextPosition.Independent}\n type='static'\n hideDuration={isSmall}\n commonVideoProps={{\n ...props.commonVideoProps,\n subTextType: 'none'\n }}\n showOwner={props.showOwner}\n />\n </Col>\n </Row>\n </Col>\n\n <Col {...VideoListHelper.getDetailsColumns()} className={`position-relative ${isSmall ? 'pb-2' : 'px-2'}`}>\n <div className='d-flex justify-content-between'>\n <VideoItemTitle\n video={props.video}\n appLink={appLink}\n size={size}\n yearGroups={props.commonVideoProps.yearGroups}\n showPadlock={!props.commonVideoProps.hasStudentExperience && !props.commonVideoProps.hasGuestExperience}\n linkClassName='flex-grow-1'\n {...analyticsProps}\n />\n <VideoItemTopRight\n {...analyticsProps}\n video={props.video}\n showSignIn={props.showSignIn}\n signInAppLink={props.getSignInAppLink?.(appLink)}\n />\n </div>\n\n {canNavigate ? (\n <div className='pt-sm-1 pt-md-0'>\n <InteractiveItemQuestions\n timepoints={props.video._timepoints?.value}\n appLink={appLink}\n previewAppLink={props.getPreviewQuestionsAppLink(props.video)}\n />\n </div>\n ) : (\n <VideoItemDescription\n video={props.video}\n showSignIn={props.showSignIn}\n hasStudentExperience={props.commonVideoProps.hasStudentExperience}\n hasGuestExperience={props.commonVideoProps.hasGuestExperience}\n />\n )}\n\n {!props.commonVideoProps.hasStudentExperience && !props.commonVideoProps.hasGuestExperience && (\n <VideoItemRestrictionBadge video={props.video} yearGroups={props.commonVideoProps.yearGroups}/>\n )}\n </Col>\n </div>\n </div>\n );\n});\n\ntype SortableInteractiveItemProps = InteractiveItemProps & {\n index: number\n};\n\nexport const SortableInteractiveItem = (props: SortableInteractiveItemProps) => {\n return (\n <SortableItemWrapper id={props.video.id} childComponent={InteractiveItem} childProps={props} />\n );\n};\n","@import '~styles/utils/mixins';\n@import '~styles/utils/include-media';\n:local {\n .responsiveGuidance {\n @include media('<=lg') {\n @include responsive-guidance-tags;\n }\n }\n}","import * as React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/core';\n\nimport { EntityType, LocationContext } from 'libs/analytics/interfaces';\n\nimport { SortableItemWrapper } from 'libs/shared/components/sortable/SortableItemWrapper';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { BaseVideoItemProps } from 'libs/shared/components/video-list/BaseVideoItemProps';\nimport { VideoItemGuidance } from 'libs/shared/components/video-list/components/video-guidance/VideoItemGuidance';\nimport { VideoItemDescription } from 'libs/shared/components/video-list/components/video-item-description/VideoItemDescription';\nimport { VideoItemLeftContent } from 'libs/shared/components/video-list/components/video-item-left-content/VideoItemLeftContent';\nimport { VideoItemRestrictionBadge } from 'libs/shared/components/video-list/components/video-item-restriction-badge/VideoItemRestrictionBadge';\nimport { VideoItemTitle } from 'libs/shared/components/video-list/components/video-item-title/VideoItemTitle';\nimport { VideoItemTopRight } from 'libs/shared/components/video-list/components/video-item-top-right/VideoItemTopRight';\nimport { SortableVideoListContext } from 'libs/shared/components/video-list/VideoList';\nimport { VideoListHelper } from 'libs/shared/components/video-list/VideoListHelper';\nimport { VideoSubText } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { useHover } from 'libs/shared/hooks/UseHover';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { HandleSvg } from 'libs/shared/images/svg/objects/HandleSvg';\nimport { Video } from 'libs/shared/interfaces';\n\nimport styles from './video-item.module.scss';\n\nexport interface VideoItemProps extends BaseVideoItemProps<Video> {}\n\nexport const VideoItem = React.forwardRef((props: VideoItemProps, ref: React.LegacyRef<HTMLDivElement>) => {\n const breakpoints = useBreakpoints();\n const [ hoverRef, hovered ] = useHover<HTMLDivElement>();\n\n const size = VideoListHelper.getSize(breakpoints, props.size);\n\n const isSmall = size === 'sm';\n\n const { isSortable } = React.useContext(SortableVideoListContext);\n\n const videoAudiences = props.video?.subjectPresentationAudiences?.data;\n const mergedAudience = useMergeAudiences(videoAudiences, props.presentationAudiences);\n\n const showDragHandle = isSortable && !breakpoints.xs && (hovered || typeof props.index === 'undefined' || !props.showIndexes);\n const showIndexes = (props.showIndexes && !showDragHandle) && !breakpoints.xs;\n const hasIconOrIndex = (showDragHandle || props.showIndexes) && !breakpoints.xs;\n\n const appLink = props.getVideoAppLink?.(props.video, {});\n\n function getSubTextAppLink(): Core.AppLink {\n return props.commonVideoProps.getSubTextAppLink?.(props.video);\n }\n\n const subTextType = props.commonVideoProps.getSubTextType?.(props.video);\n\n const subTextAppLink = getSubTextAppLink();\n const analyticsProps = {\n analyticsData: props.analyticsData,\n analyticsOptions: props.analyticsOptions ?? {\n entity: EntityType.Video,\n location: LocationContext.VideoListItem\n }\n };\n\n return (\n <div ref={hoverRef} className='w-100'>\n <div className={`row g-0 ${isSmall ? '' : 'py-2'}`} style={props.style} ref={ref}>\n <Col\n {...VideoListHelper.getThumbnailColumns()}\n className='flex-column align-items-flex-start mb-1 mb-sm-0 pb-sm-2 pe-sm-2 px-md-2 pb-md-0'\n >\n <Row>\n <VideoItemLeftContent\n index={props.index}\n showDragHandle={showDragHandle}\n showIndexes={showIndexes}\n dragHandleIcon={props.dragHandleIcon}\n dragHandleIconSize={props.dragHandleIconSize}\n dragAttributes={props.dragAttributes}\n dragListeners={props.dragListeners}\n />\n \n <Col xs={VideoListHelper.getThumbnailColSize(hasIconOrIndex)}>\n <VideoThumbnail\n {...analyticsProps}\n video={props.video}\n appLink={appLink}\n shareId={props.shareId}\n audience={mergedAudience}\n imageOptions={{ size: hasIconOrIndex ? ImageSize.Small : ImageSize.Medium }}\n textPosition={ThumbnailTextPosition.Independent}\n type='static'\n hideRating={false}\n commonVideoProps={props.commonVideoProps}\n />\n </Col>\n </Row>\n </Col>\n <Col\n {...VideoListHelper.getDetailsColumns()}\n className='d-flex position-relative flex-column px-0 px-md-2 pb-0 pb-sm-2 pb-md-0 justify-content-md-between'\n >\n <div>\n <div className='d-flex justify-content-between'>\n <div className='flex-grow-1'>\n <VideoSubText\n {...analyticsProps}\n video={props.video}\n appLink={subTextAppLink}\n type={subTextType}\n />\n <VideoItemTitle\n {...analyticsProps}\n video={props.video}\n appLink={appLink}\n size={size}\n yearGroups={props.commonVideoProps.yearGroups}\n showNewVideoIndicator={props.commonVideoProps.showNewVideoIndicator}\n showPadlock={!props.commonVideoProps.hasStudentExperience\n && !props.commonVideoProps.hasGuestExperience}\n titleClassName='mb-0'\n />\n </div>\n <VideoItemTopRight\n {...analyticsProps}\n video={props.video}\n showSignIn={props.showSignIn}\n signInAppLink={props.getSignInAppLink?.(appLink)}\n />\n </div>\n\n {!isSmall && (\n <VideoItemDescription\n video={props.video}\n showSignIn={props.showSignIn}\n hasStudentExperience={props.commonVideoProps.hasStudentExperience}\n hasGuestExperience={props.commonVideoProps.hasGuestExperience}\n />\n )}\n\n {!props.commonVideoProps.hasStudentExperience && !props.commonVideoProps.hasGuestExperience && (\n <VideoItemRestrictionBadge video={props.video} yearGroups={props.commonVideoProps.yearGroups}/>\n )}\n </div>\n\n {!props.hideVideoGuidance && (\n <VideoItemGuidance\n video={props.video}\n getVideoAppLink={props.getVideoAppLink}\n commonVideoProps={props.commonVideoProps}\n containerClassName='d-flex justify-content-start align-items-center pt-sm-1 gap-1'\n responsiveClassName={styles.responsiveGuidance}\n {...analyticsProps}\n />\n )}\n </Col>\n </div>\n </div>\n );\n});\n\nVideoItem.defaultProps = {\n dragHandleIcon: HandleSvg,\n dragHandleIconSize: SvgContainerSize.Small,\n size: 'md'\n};\n\ntype SortableVideoItemProps = VideoItemProps & {\n index: number\n};\n\nexport const SortableVideoItem = (props: SortableVideoItemProps) => {\n return (\n <SortableItemWrapper id={props.video.id} childComponent={VideoItem} childProps={props} />\n );\n};\n","@import '~styles/utils/include-media';\n:local {\n .sortableVideo {\n box-shadow: 0px 5px 10px rgba($black, 0.3);\n }\n\n .videoList {\n margin: 0 -#{map-get($spacers, 2)};\n \n @include media('<=md') {\n margin: 0;\n }\n }\n\n .badgeContainer {\n :global(.rating-badge) {\n height: 1.3rem;\n font-size: 90%;\n font-weight: 500;\n }\n \n :global(.duration-badge-new) {\n height: 1.3rem;\n font-size: 90%;\n font-weight: 500;\n }\n \n :global(.draft-badge) {\n height: 1.3rem;\n font-size: 90%;\n font-weight: 500;\n }\n\n :global(.audience-label) {\n height: 1.3rem;\n font-size: 90%;\n }\n }\n\n .dragStyle {\n opacity: 0.5;\n }\n}","import * as React from 'react';\nimport { DragEndEvent, DragStartEvent } from '@dnd-kit/core';\n\nimport { Cursors } from 'libs/common/backbone/interfaces';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { AnalyticsOptions, HashObject } from 'libs/analytics/interfaces';\n\nimport { SearchIndices } from 'libs/shared/apps/search/interfaces';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { DragDropMoveWrapper } from 'libs/shared/components/drag-drop-move/DragDropMoveWrapper';\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { Pagination } from 'libs/shared/components/pagination/Pagination';\nimport { SortableContainerWrapper } from 'libs/shared/components/sortable/SortableContainerWrapper';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { BulkCheckboxManager } from 'libs/shared/hooks/useBulkCheckboxManager';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { InteractiveMetadata, PresentationAudience, VideoTypes } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { SvgIcon } from 'libs/shared/utils/SvgHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { ClipItem, ClipItemProps, SortableClipItem } from './clip-item/ClipItem';\nimport { InteractiveItem, InteractiveItemProps, SortableInteractiveItem } from './interactive-item/InteractiveItem';\nimport { SortableVideoItem, VideoItem, VideoItemProps } from './video-item/VideoItem';\n\nimport styles from './video-list.module.scss';\n\nconst namespace = 'shared.videoList';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ntype ItemComponent = (props: ClipItemProps | InteractiveItemProps | VideoItemProps) => JSX.Element;\n\nfunction getItemComponent(video: VideoTypes, isSortable: boolean): ItemComponent {\n if (VideoHelper.isClip(video))\n return isSortable ? SortableClipItem : ClipItem;\n\n if (VideoHelper.isInteractive(video))\n return isSortable ? SortableInteractiveItem : InteractiveItem;\n\n return isSortable ? SortableVideoItem : VideoItem;\n}\n\ninterface SortableVideoListContextProps {\n isSortable: boolean;\n currentSortingIndex?: number;\n}\n\nexport const SortableVideoListContext = React.createContext<SortableVideoListContextProps>({\n isSortable: false\n});\n\nexport interface VideoListProps {\n videos: VideoTypes[];\n getVideoAppLink: (video: VideoTypes, options: GetVideoAppLinkOptions) => Core.AppLink;\n getSignInAppLink?: (appLink: Core.AppLink) => Core.AppLink;\n getPreviewQuestionsAppLink?: (interactive: InteractiveMetadata) => Core.AppLink;\n hideVideoGuidance?: boolean;\n cursors?: Cursors;\n dragHandleIcon?: SvgIcon;\n dragHandleIconSize?: SvgContainerSize;\n showSignIn?: boolean;\n showIndexes?: boolean;\n startingPositionIndex?: number;\n canRemovePrivateVideos?: boolean;\n presentationAudiences?: PresentationAudience[];\n allowBulkAction?: boolean;\n getVideosBulkAction?: (items: string[]) => ActionOptions[];\n drag?: boolean;\n typeFilter?: SearchIndices | SearchIndices[];\n checkboxHelper?: BulkCheckboxManager;\n hasPermissions: HasPermissionsFunc;\n showOwner?: boolean;\n shareId?: string;\n getAnalyticsData?: (itemIndex: number) => HashObject;\n analyticsOptions?: AnalyticsOptions;\n commonVideoProps: CommonVideoProps;\n}\n\nexport function VideoList(props: VideoListProps): JSX.Element {\n const { isSortable } = React.useContext(SortableVideoListContext);\n const [ isDragging, setIsDragging ] = React.useState<boolean>(false);\n const { checkboxHelper: CheckboxHelper } = props;\n \n const currentAppLink = Core.AppLinkHelper.getCurrentAppLink();\n\n return (\n <>\n <div className={`position-relative ${styles.videoList}`}>\n \n {props.videos.map((v, idx) => {\n const Component = getItemComponent(v, isSortable);\n \n /**\n * Where we're provided with a starting position index by the parent, \n * we'll use that as the starting position instead of the local index.\n */\n const pagePositionStartingIndex = Number.isInteger(props.startingPositionIndex) ?\n props.startingPositionIndex :\n 0;\n\n const dragData = CheckboxHelper && CheckboxHelper.getSelectedCount() > 1 && CheckboxHelper.isChecked(v.id) ?\n CheckboxHelper.getSelected() :\n v;\n\n const analyticsData = typeof props.getAnalyticsData === 'function' ?\n props.getAnalyticsData(idx) :\n {\n pagePositionIndex: pagePositionStartingIndex + idx\n };\n\n return (\n <DragDropMoveWrapper\n draggable={(props.drag && !isSortable) && ({ id: v.id, data: dragData })}\n dragStyle={styles.dragStyle}\n isDragging={isDragging}\n setIsDragging={setIsDragging}\n key={`${v.id}:${idx}`}\n >\n <div className='d-flex flex-row align-items-center'>\n {props.allowBulkAction && (\n <Checkbox\n className='mx-0 mx-md-2'\n id={v.id}\n ariaLabel={`${getPhrase('ariaBulkAction')}: ${v.name}`}\n onChange={() => CheckboxHelper.onToggleItem(v.id)}\n checked={CheckboxHelper.isChecked(v.id)}\n />\n )}\n <Component\n video={v}\n index={idx}\n getVideoAppLink={props.getVideoAppLink}\n dragHandleIcon={props.dragHandleIcon}\n dragHandleIconSize={props.dragHandleIconSize}\n showSignIn={props.showSignIn}\n getSignInAppLink={props.getSignInAppLink}\n analyticsData={analyticsData}\n hasPermissions={props.hasPermissions}\n canRemovePrivateVideos={props.canRemovePrivateVideos}\n presentationAudiences={props.presentationAudiences}\n showIndexes={props.showIndexes}\n getPreviewQuestionsAppLink={props.getPreviewQuestionsAppLink}\n hideVideoGuidance={props.hideVideoGuidance}\n showOwner={props.showOwner}\n shareId={props.shareId}\n commonVideoProps={props.commonVideoProps}\n analyticsOptions={props.analyticsOptions}\n />\n </div>\n </DragDropMoveWrapper>\n );\n })}\n </div>\n\n {props.cursors &&\n <Pagination appLink={currentAppLink} cursors={props.cursors} />\n }\n </>\n );\n}\n\ninterface SortableVideoListProps extends VideoListProps {\n currentSortingIndex?: number;\n onSortEnd: (event: DragEndEvent) => void;\n onSortStart: (event: DragStartEvent) => void;\n\n}\n\nexport const SortableVideoList = (props: SortableVideoListProps) => {\n const ids = props.videos.map(v => v.id);\n\n const getDragOverlay = (id: string) => {\n const video = props.videos.find(v => v.id === id);\n const Component = getItemComponent(video, true);\n\n return (\n <div className={`bg-white ${styles.sortableVideo}`}>\n <SortableVideoListContext.Provider value={{ isSortable: true }}>\n <Component\n video={video}\n getVideoAppLink={props.getVideoAppLink}\n dragHandleIcon={props.dragHandleIcon}\n dragHandleIconSize={props.dragHandleIconSize}\n showSignIn={props.showSignIn}\n getSignInAppLink={props.getSignInAppLink}\n hasPermissions={props.hasPermissions}\n hideVideoGuidance={props.hideVideoGuidance}\n getPreviewQuestionsAppLink={props.getPreviewQuestionsAppLink}\n shareId={props.shareId}\n commonVideoProps={props.commonVideoProps}\n />\n </SortableVideoListContext.Provider>\n </div>\n );\n };\n\n return (\n <SortableContainerWrapper\n ids={ids}\n getDragOverlay={getDragOverlay}\n onSortEnd={props.onSortEnd}\n onSortStart={props.onSortStart}\n >\n <SortableVideoListContext.Provider value={{ isSortable: true, currentSortingIndex: props.currentSortingIndex }}>\n <VideoList {...props} />\n </SortableVideoListContext.Provider>\n </SortableContainerWrapper>\n );\n};\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { EntityType, LocationContext } from 'libs/analytics/interfaces';\n\nimport { SearchExchangeArchiveDescription } from 'libs/shared/apps/search/components/search-exchange-archive-description/SearchExchangeArchiveDescription';\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Company, InteractiveMetadata, PresentationAudience, Series, Video } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nexport interface ThumbnailVerticalListWidgetTemplateProps {\n widgetTypeId: WidgetTypeId;\n name: string;\n description: string;\n content: Video[];\n hasPermissions: HasPermissionsFunc;\n audiences: PresentationAudience[];\n\n seeMoreLink: Core.AppLink;\n\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink,\n series: (series: Series) => Core.AppLink,\n company: (company: Company) => Core.AppLink,\n searchSettings: () => Core.AppLink,\n searchHome: (filters?: HashObject) => Core.AppLink,\n getPreviewQuestionsAppLink: (interactive: InteractiveMetadata) => Core.AppLink\n };\n metadata: {\n hideWidgetHeading: boolean,\n hideWidgetDescription: boolean\n };\n settings: {\n hasTopicDirectories: boolean\n };\n\n commonVideoProps: CommonVideoProps;\n badgeComponent: JSX.Element;\n getAnalyticsData?: (itemIndex: number) => HashObject;\n}\n\nexport function ThumbnailVerticalListWidgetTemplate(props: ThumbnailVerticalListWidgetTemplateProps) {\n function getShowSeeMoreLink(): boolean {\n return (!!props.seeMoreLink &&\n [\n WidgetTypeId.SearchExchangeArchive,\n WidgetTypeId.SearchMySchoolLibraryVideos,\n WidgetTypeId.SearchClickViewLive\n ].includes(props.widgetTypeId)\n );\n }\n \n function getDescription() {\n if (props.widgetTypeId === WidgetTypeId.SearchExchangeArchive) {\n return <SearchExchangeArchiveDescription appLink={props.appLinks.searchSettings()} />;\n }\n \n return props.description;\n }\n\n return (\n <>\n <WidgetHeader\n name={!props.metadata?.hideWidgetHeading && props.name}\n description={!props.metadata.hideWidgetDescription && getDescription()}\n showSeeMoreLink={getShowSeeMoreLink()}\n appLink={props.seeMoreLink}\n badgeComponent={props.badgeComponent}\n />\n\n <VideoList\n videos={props.content}\n getVideoAppLink={props.appLinks?.videoType}\n hasPermissions={props.hasPermissions}\n getPreviewQuestionsAppLink={props.appLinks?.getPreviewQuestionsAppLink}\n presentationAudiences={props.audiences}\n commonVideoProps={props.commonVideoProps}\n getAnalyticsData={props.getAnalyticsData}\n analyticsOptions={{\n location: LocationContext.ThumbnailVerticalListWidget,\n entity: EntityType.Video\n }}\n />\n </>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { HashObject, LocationContext } from 'libs/analytics/interfaces';\n\nimport { CurriculumLeaf } from 'libs/shared/components/curriculum-links/CurriculumLinks';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Company, InteractiveMetadata, PresentationAudience, Series, Video } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nimport { ThumbnailVerticalListWidgetTemplate } from '../thumbnail-vertical-list/ThumbnailVerticalListWidgetTemplate';\n\nexport interface CurriculumCodeSearchResultsWidgetTemplateProps {\n name: string;\n content: Video[];\n hasPermissions: HasPermissionsFunc;\n audiences: PresentationAudience[];\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink,\n series: (series: Series) => Core.AppLink,\n company: (company: Company) => Core.AppLink,\n searchSettings: () => Core.AppLink,\n searchHome: (filters?: HashObject) => Core.AppLink,\n getPreviewQuestionsAppLink: (interactive: InteractiveMetadata) => Core.AppLink\n };\n metadata: {\n curriculumLeafName: string,\n curriculumLeafDescription: string\n };\n commonVideoProps: CommonVideoProps;\n settings: {\n hasTopicDirectories: boolean\n };\n getAnalyticsData: (itemIndex: number) => HashObject;\n}\n\nexport function CurriculumCodeSearchResultsWidgetTemplate(\n props: CurriculumCodeSearchResultsWidgetTemplateProps\n): JSX.Element {\n return (\n <>\n <div className='bg-gray-100 p-3 rounded-3 mb-3'>\n <h2 className='h6'>\n {props.name}\n </h2>\n <CurriculumLeaf\n code={props.metadata.curriculumLeafName}\n description={props.metadata.curriculumLeafDescription}\n id={null}\n locationContext={LocationContext.SearchCurriculumCodeWidget}\n />\n </div>\n\n <ThumbnailVerticalListWidgetTemplate\n metadata={{\n hideWidgetHeading: true,\n hideWidgetDescription: true\n }}\n name=''\n description=''\n widgetTypeId={WidgetTypeId.SearchCurriculumCode}\n hasPermissions={props.hasPermissions}\n content={props.content}\n audiences={props.audiences}\n seeMoreLink={null}\n appLinks={props.appLinks}\n commonVideoProps={props.commonVideoProps}\n badgeComponent={null}\n settings={props.settings}\n getAnalyticsData={props.getAnalyticsData}\n />\n </>\n );\n}\n",":local {\n .partialOptions {\n width: 5.375rem;\n }\n\n .partialName {\n width: 18.75rem;\n height: 1.3125rem;\n }\n\n .partialDescription {\n width: 12.5rem;\n height: 1.3125rem;\n }\n\n .partialThumbnail {\n padding-bottom: 56.25%;\n }\n\n .partialDragHandle {\n width: 1.25rem;\n height: 1.25rem;\n }\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { VideoListHelper } from 'libs/shared/components/video-list/VideoListHelper';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nimport styles from './partial-video-list.module.scss';\n\ninterface PartialVideoListProps {\n withReordering?: boolean;\n numVideos?: number;\n allowBulkActions?: boolean;\n}\n\nPartialVideoList.defaultProps = {\n numVideos: 15\n};\n\nexport function PartialVideoList(props: PartialVideoListProps): JSX.Element {\n return (\n <>\n {Array(props.numVideos).fill(null).map((_, i) => (\n <div className='d-flex' key={i}>\n {props.allowBulkActions && <div className='form-check pe-3 pe-sm-2 mx-0 mx-md-2' />}\n <PartialVideoItem {...props} />\n </div>\n ))}\n </>\n );\n}\n\nexport function PartialVideoItem(props: PartialVideoListProps): JSX.Element {\n const breakpoints = useBreakpoints();\n\n const size = VideoListHelper.getSize(breakpoints, 'md');\n const isSmall = size === 'sm';\n\n const withDragHandle = props.withReordering && !breakpoints.xs;\n\n return (\n <Row className={`${isSmall ? '' : 'py-2'} flex-grow-1`}>\n <Col {...VideoListHelper.getThumbnailColumns()} className={`flex-column align-items-flex-start ${isSmall ? `pb-2 pe-1` : 'mb-1 pe-3 pe-md-2'}`}>\n <Row>\n {!!withDragHandle && (\n <div className='d-flex align-items-center justify-content-center col-2'>\n <div className={`partial-loading-background ${styles.partialDragHandle}`} />\n </div>\n )}\n <Col xs={VideoListHelper.getThumbnailColSize(withDragHandle)}>\n <div className={`partial-loading-background ${isSmall ? 'rounded' : 'rounded-3'} ${styles.partialThumbnail}`} />\n </Col>\n </Row>\n </Col>\n <Col {...VideoListHelper.getDetailsColumns()} className={isSmall ? 'pb-2' : 'px-2'}>\n <div className={`partial-loading-background mb-1 ${styles.partialName}`} />\n <div className={`partial-loading-background ${styles.partialDescription}`} />\n </Col>\n </Row>\n );\n}\n\n","import React from 'react';\n\nimport { PartialVideoList } from 'libs/shared/components/video-list/partial-loading/PartialVideoList';\n\nexport function PartialThumbnailVerticalListWidgetTemplate() {\n return (\n <PartialVideoList numVideos={3} />\n );\n}\n","import React from 'react';\n\nimport { PartialThumbnailVerticalListWidgetTemplate } from '../../thumbnail-vertical-list/partial-loading/PartialThumbnailVerticalListWidgetTemplate';\n\nexport function PartialCurriculumCodeSearchResultsWidgetTemplate(): JSX.Element {\n return (\n <>\n <div className='partial-loading-background rounded-3 mb-3 w-100' style={{ height: '5rem' }}></div>\n <PartialThumbnailVerticalListWidgetTemplate />\n </>\n );\n}\n",":local {\n .accordionButton {\n background-color: $gray-100;\n border-radius: $border-radius;\n\n &:hover {\n background-color: $light-blue;\n }\n\n &.expanded {\n border-top-left-radius: $border-radius;\n border-top-right-radius: $border-radius;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n }\n }\n}","import React from 'react';\nimport { AccordionContext, useAccordionButton } from 'react-bootstrap';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { MinusSvg } from 'libs/shared/images/svg/actions/MinusSvg';\nimport { PlusSvg } from 'libs/shared/images/svg/actions/PlusSvg';\n\nimport styles from './accordion-button.module.scss';\n\ninterface AccordionButtonProps extends React.PropsWithChildren {\n name: string;\n}\n\nexport function AccordionButton(props: AccordionButtonProps): JSX.Element {\n const { activeEventKey } = React.useContext(AccordionContext);\n \n const onClick = useAccordionButton(props.name);\n \n const isExpanded = activeEventKey === props.name;\n \n return (\n <button\n type='button'\n onClick={onClick}\n className={`w-100 p-3 ${styles.accordionButton} ${isExpanded ? styles.expanded : ''}`}\n >\n <div className='d-flex align-items-center justify-content-between'>\n <h3 className='mb-0 h5 fw-normal'>\n {props.name}\n </h3>\n\n <div className='rounded-circle bg-white me-2'>\n <SvgContainer svg={isExpanded ? MinusSvg : PlusSvg} />\n </div>\n </div>\n </button>\n );\n}\n",":local {\n .video:not(:last-child) {\n margin-bottom: map-get($spacers, 3);\n }\n\n .thumbnail {\n flex-grow: 1;\n min-width: 8rem;\n max-width: 10rem;\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { VideoItemGuidance } from 'libs/shared/components/video-list/components/video-guidance/VideoItemGuidance';\nimport { VideoItemTitle } from 'libs/shared/components/video-list/components/video-item-title/VideoItemTitle';\nimport { VideoSubText } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { CurriculumNode } from 'libs/shared/components/widgets/curated-widgets/templates/curriculum-resources-accordion/CurriculumAccordionUtils';\nimport { CurriculumType } from 'libs/shared/enums/CurriculumType';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Series, Video } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nimport styles from './curriculum-accordion-video-list.module.scss';\n\nconst namespace = 'shared.curriculumAccordionVideoList';\n\ninterface CurriculumAccordionVideoListProps {\n outcome: CurriculumNode<CurriculumType.Leaf>;\n analyticsData: HashObject;\n getVideoAppLink: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink;\n getSeriesAppLink: (series: Series) => Core.AppLink;\n getOutcomeAppLink: (code: string) => Core.AppLink;\n commonVideoProps: CommonVideoProps;\n outcomeIndex: number;\n}\n\nexport function CurriculumAccordionVideoList(props: CurriculumAccordionVideoListProps): JSX.Element {\n const hasCode = !!props.outcome.name && !!props.outcome.description;\n\n return (\n <>\n <h4 className='h6'>\n <Text namespace={namespace} phrase='alignedVideos' />\n </h4>\n\n <ul className='list-unstyled'>\n {props.outcome.videos.map((video, index) => {\n const analyticsProps = {\n analyticsData: props.analyticsData,\n analyticsOptions: {\n entity: EntityType.Video,\n actionType: UserAction.Click,\n location: LocationContext.CurriculumResourcesAccordionWidget\n }\n };\n\n return (\n <li key={`${props.outcomeIndex}:${index}`} className={`${styles.video} d-flex`}>\n <div className={`${styles.thumbnail} me-2`}>\n <VideoThumbnail\n appLink={props.getVideoAppLink(video, {})}\n video={video}\n type='static'\n imageOptions={{ size: ImageSize.Medium }}\n commonVideoProps={props.commonVideoProps}\n hideDuration\n {...analyticsProps}\n />\n </div>\n\n <div className='d-flex flex-column justify-content-between'>\n <div>\n <VideoSubText\n {...analyticsProps}\n video={video}\n appLink={props.getSeriesAppLink(video.series)}\n type='series'\n />\n <VideoItemTitle\n {...analyticsProps}\n video={video}\n appLink={props.getVideoAppLink(video, {})}\n size='sm'\n titleClassName='mb-0'\n yearGroups={props.commonVideoProps.yearGroups}\n showNewVideoIndicator={props.commonVideoProps.showNewVideoIndicator}\n showPadlock={!props.commonVideoProps.hasStudentExperience\n && !props.commonVideoProps.hasGuestExperience}\n />\n </div>\n\n <VideoItemGuidance\n video={video}\n getVideoAppLink={props.getVideoAppLink}\n commonVideoProps={props.commonVideoProps}\n containerClassName='d-flex justify-content-start align-items-center pt-sm-1 gap-1'\n responsiveClassName={styles.responsiveGuidance}\n {...analyticsProps}\n />\n </div>\n </li>\n );\n })}\n </ul>\n <AppLink\n appLink={props.getOutcomeAppLink(props.outcome.name)}\n className='info-link mt-2 d-inline-block'\n >\n {hasCode ? (\n <Text namespace={namespace} phrase='viewAllVideosCode' options={{ code: props.outcome.name }} />\n ) : (\n <Text namespace={namespace} phrase='viewAllVideosNoCode' />\n )}\n </AppLink>\n </>\n );\n}\n",":local {\n .audience {\n background-color: $gray-100;\n border-bottom-right-radius: $border-radius;\n border-bottom-left-radius: $border-radius;\n }\n\n .area:not(:last-child) {\n margin-bottom: map-get($spacers, 5);\n }\n\n .outcome:not(:last-child) {\n margin-bottom: map-get($spacers, 4);\n }\n}","import React from 'react';\nimport { Accordion } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { CurriculumLeaf } from 'libs/shared/components/curriculum-links/CurriculumLinks';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CurriculumAccordionVideoList } from 'libs/shared/components/widgets/curated-widgets/templates/curriculum-resources-accordion/components/curriculum-accordion-video-list/CurriculumAccordionVideoList';\nimport { CurriculumAudienceSection } from 'libs/shared/components/widgets/curated-widgets/templates/curriculum-resources-accordion/CurriculumAccordionUtils';\nimport { Series, Video } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nimport styles from './audience-section.module.scss';\n\nconst namespace = 'shared.audienceSection';\n\ninterface AudienceSectionProps {\n audience: CurriculumAudienceSection;\n getSearchAppLink: (code: string) => Core.AppLink;\n getVideoAppLink: (obj: Video, options: GetVideoAppLinkOptions) => Core.AppLink;\n getSeriesAppLink: (series: Series) => Core.AppLink;\n commonVideoProps: CommonVideoProps;\n analyticsData: HashObject;\n}\n\nexport function AudienceSection(props: AudienceSectionProps): JSX.Element {\n return (\n <Accordion.Collapse eventKey={props.audience.name}>\n <div className={`${styles.audience} px-3 pb-3`}>\n <ul className='bg-white p-3 rounded-3 list-unstyled mb-0'>\n {props.audience.areas.map((area, index) => {\n return (\n <li key={index} className={styles.area}>\n <h3 className='h5 fw-normal mb-3'>{area.name}</h3>\n\n <ul className='list-unstyled'>\n {area.outcomes.map((outcome, outcomeIndex) => {\n return (\n <li key={outcomeIndex} className={styles.outcome}>\n <h4 className='h6'>\n <Text namespace={namespace} phrase='outcome' />\n </h4>\n\n <div className='pb-2'>\n <CurriculumLeaf\n id={outcome.id}\n code={outcome.name}\n description={outcome.description}\n getCodeAppLink={props.getSearchAppLink}\n locationContext={LocationContext.CurriculumResourcesAccordionWidget}\n uiContainsCodes\n />\n </div>\n\n <CurriculumAccordionVideoList\n outcome={outcome}\n analyticsData={props.analyticsData}\n getVideoAppLink={props.getVideoAppLink}\n getSeriesAppLink={props.getSeriesAppLink}\n getOutcomeAppLink={props.getSearchAppLink}\n commonVideoProps={props.commonVideoProps}\n outcomeIndex={outcomeIndex}\n />\n </li>\n );\n })}\n </ul>\n </li>\n );\n })}\n </ul>\n </div>\n </Accordion.Collapse>\n );\n}\n","import { CurriculumType } from 'libs/shared/enums/CurriculumType';\nimport { Curriculum, Video } from 'libs/shared/interfaces';\n\nexport type CurriculumNode<TType = CurriculumType> = Curriculum<TType> & {\n children: CurriculumNode[],\n videos: Video[]\n};\n\nexport type CurriculumAudienceSection = {\n name: string,\n areas: CurriculumAudienceArea[]\n};\n\nexport type CurriculumOutcomeSection = {\n name: string,\n description: string,\n videos: Video[]\n};\n\ntype CurriculumAudienceArea = {\n name: string,\n outcomes: CurriculumNode<CurriculumType.Leaf>[]\n};\n\nfunction getAudienceAreas(audience: CurriculumNode): CurriculumAudienceArea[] {\n const areas: Map<string, CurriculumAudienceArea> = new Map();\n\n function traverse(node: CurriculumNode, areaName: string): void {\n if (node.type === CurriculumType.Area) {\n if (areaName.length)\n areaName += ` - `;\n\n areaName += node.name;\n\n for (const child of node.children)\n traverse(child, areaName);\n\n return;\n }\n\n if (node.type === CurriculumType.Leaf) {\n if (!areas.has(areaName)) {\n areas.set(areaName, {\n name: areaName,\n outcomes: []\n });\n }\n\n areas.get(areaName).outcomes.push(node as CurriculumNode<CurriculumType.Leaf>);\n }\n }\n\n for (const area of audience.children)\n traverse(area, '');\n\n return Array.from(areas.values());\n}\n\nexport function getCurriculumAccordion(tree: CurriculumNode[]) {\n const audienceLookup: Map<string, CurriculumAudienceSection> = new Map();\n\n for (const subject of tree) {\n for (const audience of subject.children) {\n if (!audienceLookup.has(audience.name)) {\n audienceLookup.set(audience.name, {\n name: audience.name,\n areas: []\n });\n }\n\n audienceLookup.get(audience.name).areas.push(...getAudienceAreas(audience));\n }\n }\n\n return Array.from(audienceLookup.values());\n}\n","import React from 'react';\nimport { Accordion } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CurriculumData, Series, Video } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nimport { AccordionButton } from './components/accordion-button/AccordionButton';\nimport { AudienceSection } from './components/audience-section/AudienceSection';\nimport { CurriculumNode, getCurriculumAccordion } from './CurriculumAccordionUtils';\n\nconst namespace = 'shared.curriculumResourcesAccordion';\n\nexport interface CurriculumResourcesAccordionWidgetTemplateProps {\n content: CurriculumNode[];\n curriculums: CurriculumData;\n appLinks: {\n editCurriculum: () => Core.AppLink,\n search: (code: string) => Core.AppLink,\n videoType: (video: Video, opts: GetVideoAppLinkOptions) => Core.AppLink,\n series: (series: Series) => Core.AppLink\n };\n commonVideoProps: CommonVideoProps;\n analyticsData: HashObject;\n}\n\nexport function CurriculumResourcesAccordionWidgetTemplate(\n props: CurriculumResourcesAccordionWidgetTemplateProps\n): JSX.Element {\n const accordion = React.useMemo(() => getCurriculumAccordion(props.content), [props.content]);\n\n return (\n <div>\n <div className='d-flex align-items-end justify-content-between mb-2'>\n <h2 className='h3 mb-0'>\n {props.curriculums.preferredCurriculum.name}\n </h2>\n\n {props.curriculums.availableCurriculums.length > 1 && (\n <AppLink appLink={props.appLinks.editCurriculum()}>\n <Text namespace={namespace} phrase='changeCurriculum' />\n </AppLink>\n )}\n </div>\n\n <Accordion className='mb-n3'>\n {accordion.map((audience, index) => {\n return (\n <div className='mb-3' key={index}>\n <AccordionButton name={audience.name} />\n <AudienceSection\n audience={audience}\n getSearchAppLink={props.appLinks.search}\n getVideoAppLink={props.appLinks.videoType}\n getSeriesAppLink={props.appLinks.series}\n commonVideoProps={props.commonVideoProps}\n analyticsData={props.analyticsData}\n />\n </div>\n );\n })}\n </Accordion>\n </div>\n );\n}\n","import React from 'react';\n\nconst Item = () => <div className='partial-loading-background mb-3 rounded-3' style={{ height: '3.5rem' }} />;\n\nexport function PartialCurriculumResourcesAccordionWidgetTemplate(): JSX.Element {\n return (\n <>\n <div className='partial-loading-background mb-2 w-25' style={{ height: '1.7325rem' }} />\n <div className='mb-n3'>\n <Item />\n <Item />\n <Item />\n <Item />\n <Item />\n <Item />\n <Item />\n </div>\n </>\n );\n}\n","import React from 'react';\nimport { DraggableAttributes } from '@dnd-kit/core';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { ToggleSwitch } from 'libs/shared/components/toggle-switch/ToggleSwitch';\nimport { HamburgerSvg } from 'libs/shared/images/svg/objects/HamburgerSvg';\nimport { Classification } from 'libs/shared/interfaces';\n\nimport styles from './cover-pill.module.scss';\n\nconst namespace = 'shared.subjectWidgetItem';\n\ninterface EditableSubjectWidgetItemProps {\n data: Classification;\n onToggleVisibility: (c: Classification) => void;\n isVisible: boolean;\n dragAttributes?: DraggableAttributes;\n dragListeners?: HashObject;\n style?: HashObject;\n isDragging: boolean;\n canToggle: boolean;\n\n multiline?: boolean;\n}\n\nexport const EditableSubjectWidgetItem = React.forwardRef((\n props: EditableSubjectWidgetItemProps,\n ref: React.LegacyRef<HTMLDivElement>\n): JSX.Element => {\n let wrapperClassName = 'px-3 d-flex flex-column justify-content-center';\n let textClassName = `${styles.name} h6`;\n\n if (!props.multiline) {\n wrapperClassName += ' text-nowrap';\n textClassName += ' text-truncate';\n } else {\n textClassName += ` clamp-3`;\n }\n\n function getToggleTooltip(): string {\n if (!props.canToggle)\n return LanguageService.getPhrase(namespace, 'cantToggle');\n\n return LanguageService.getPhrase(namespace, props.isVisible ? 'hideFromDashboard' : 'showOnDashboard');\n }\n\n if (props.style?.visibility === 'hidden') {\n return (\n <div\n ref={ref}\n className={`d-flex align-items-center position-relative clamp-2 ${styles.widgetItem} ${styles.draggingItem}`}\n style={ObjectHelper.omit(props.style, ['visibility'])}\n >\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n className={`border d-flex align-items-center position-relative ${styles.widgetItem}`}\n style={ObjectHelper.omit(props.style, ['visibility'])}\n >\n <div\n className={`\n ${styles.dragHandle} ms-3 d-flex justify-content-center align-items-center \n ${props.isDragging ? 'cursor-grabbing' : 'cursor-grab'} ${props.isVisible ? '' : 'text-secondary'}\n `}\n {...props.dragAttributes}\n {...props.dragListeners}\n >\n <SvgContainer svg={HamburgerSvg} />\n </div>\n <div className={wrapperClassName}>\n <label htmlFor={props.data.id} className={`${textClassName} ${props.isVisible ? '' : 'text-secondary'} mb-0`}>\n {props.data.name}\n </label>\n </div>\n\n <div className='ms-auto me-3'>\n <ToggleSwitch\n id={props.data.id}\n on={props.isVisible}\n onClick={() => props.onToggleVisibility(props.data)}\n tooltipText={getToggleTooltip()}\n disabled={!props.canToggle}\n showStateWhenDisabled\n />\n </div>\n </div>\n );\n});\n",":local {\n .dragOverlay {\n box-shadow: 0px 5px 10px rgba($black, 0.3);\n }\n\n .headingContainer {\n height: 2.5rem; // Sets a consistent height on the heading section so that the size doesn't change when you switch to editing mode\n }\n}","import React from 'react';\nimport { Button, Col, Row } from 'react-bootstrap';\nimport { DragEndEvent, DragStartEvent } from '@dnd-kit/core';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, ToggleDescriptor, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { SortableContainerWrapper } from 'libs/shared/components/sortable/SortableContainerWrapper';\nimport { SortableItemWrapper } from 'libs/shared/components/sortable/SortableItemWrapper';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { EditableSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item/EditableSubjectWidgetItem';\nimport { SubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item/SubjectWidgetItem';\nimport { LocalPermissionName } from 'libs/shared/enums/PermissionName';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { HasLocalPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Classification, Presentation, WidgetPreference } from 'libs/shared/interfaces';\nimport { ReorderHelper } from 'libs/shared/utils/ReorderHelper';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './editable-cover-fixed-pill-list-small.module.scss';\n\ninterface PreferencesHash {\n [classificationId: string]: WidgetPreference;\n}\n\ninterface PresentationSwitchItem extends Classification {\n vanitySlug: string;\n}\n\nconst namespace = 'shared.editableCoverFixedPillListSmall';\n\nexport interface EditableCoverFixedPillListSmallWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n presentation: Presentation;\n preferences: WidgetPreference[];\n widgetTypeId: WidgetTypeId;\n content: Classification[];\n isPreviewing: boolean;\n updatePreferences: (\n widgetId: string,\n widgetTypeId: WidgetTypeId,\n oldPreferences: WidgetPreference[],\n newPreferences: WidgetPreference[]\n ) => Promise<void>;\n availablePresentations: Presentation[];\n settings: {\n hasTopicDirectories: boolean\n };\n isTertiaryCustomerWithoutExchange: boolean;\n hasLocalPermissions: HasLocalPermissionsFunc;\n analyticsData?: HashObject;\n \n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink,\n allTopics: (presentationId?: string) => Core.AppLink,\n discover: (presentationSlug: string) => Core.AppLink\n };\n\n reminderComponent?: JSX.Element;\n}\n\nexport function EditableCoverFixedPillListSmallWidgetTemplate(\n props: EditableCoverFixedPillListSmallWidgetTemplateProps\n): JSX.Element {\n const [ isEditing, setIsEditing ] = React.useState(false);\n const [ showSpinner, setShowSpinner ] = React.useState(false);\n\n const processedContent = WidgetHelper.useGetContent(\n props.content,\n props.widgetTypeId,\n props.isPreviewing,\n props.preferences,\n []\n );\n const content = processedContent.unfilteredContent as Classification[];\n\n const isFollowingNothing = React.useMemo(() => {\n return content.every(c => !c.followers?.data?.length);\n }, [content]);\n\n const initialPreferences = React.useMemo(() => {\n return content?.reduce((acc: HashObject, current, index) => {\n const preference: WidgetPreference = {\n id: current.id,\n hidden: !current.followers?.data?.length && !isFollowingNothing,\n index\n };\n\n acc[current.id] = preference;\n return acc;\n }, {}) ?? {};\n }, [ props.preferences, isFollowingNothing ]);\n\n const [ persistedPreferences, setPersistedPreferences ] = React.useState<PreferencesHash>(initialPreferences);\n const [ preferences, setPreferences ] = React.useState<PreferencesHash>(initialPreferences);\n\n const currentSubjects = React.useMemo(() => {\n if (!isEditing) {\n return content\n .filter(c => !!persistedPreferences[c.id] && !persistedPreferences[c.id]?.hidden)\n .sort((a, b) => persistedPreferences[a.id].index - persistedPreferences[b.id].index);\n }\n\n return content\n .filter(c => !!preferences[c.id])\n .sort((a, b) => preferences[a.id].index - preferences[b.id].index);\n }, [ content, preferences, persistedPreferences, isEditing ]);\n \n const alerts = useAlerts();\n\n React.useEffect(() => {\n setIsEditing(false);\n }, [props.presentation?.id]);\n\n /**\n * The \"Explore all subjects\" option displays for users who have hidden some topics\n */\n const showExploreAllTopics = React.useMemo(() => {\n if (isEditing || !currentSubjects.length)\n return false;\n \n return Object.values(preferences).some(p => p.hidden);\n }, [ isEditing, preferences ]);\n\n async function onClickSavePreferences(): Promise<void> {\n setShowSpinner(true);\n\n const oldPreferences = isFollowingNothing ?\n content.map((c, index) => ({ id: c.id, hidden: true, index })) :\n Object.values(persistedPreferences);\n\n props.updatePreferences(props.id, props.widgetTypeId, oldPreferences, Object.values(preferences))\n .then(() => {\n setPersistedPreferences(preferences);\n setShowSpinner(false);\n setIsEditing(false);\n })\n .catch(() => {\n setShowSpinner(false);\n alerts.error(LanguageService.getPhrase(namespace, 'error'));\n });\n }\n\n function onClickCancel(): void {\n setPreferences(persistedPreferences);\n setIsEditing(false);\n }\n\n function getItemIndex(classification: Classification): number {\n if (preferences[classification.id])\n return preferences[classification.id].index;\n \n return currentSubjects.findIndex(c => c.id === classification.id);\n }\n\n function isVisible(classification: Classification): boolean {\n return !preferences[classification.id]?.hidden;\n }\n\n function onToggleVisibility(classification: Classification): void {\n const newPreferences = { ...preferences };\n\n const hidden = isVisible(classification);\n\n newPreferences[classification.id] = {\n id: classification.id,\n hidden,\n index: getItemIndex(classification)\n };\n\n AnalyticsHelper.logUserAction({\n id: classification.id,\n name: classification.name\n }, {\n location: LocationContext.EditableSubjectPreferencesWidget,\n entity: EntityType.Classification,\n actionType: UserAction.Hide,\n descriptor: hidden ? ToggleDescriptor.On : ToggleDescriptor.Off\n });\n\n setPreferences(newPreferences);\n }\n\n function getDragOverlay(id: string): JSX.Element {\n const classification = currentSubjects.find(c => c.id === id);\n\n return (\n <div className={`bg-white rounded-3 ${styles.dragOverlay}`}>\n <EditableSubjectWidgetItem\n data={classification}\n onToggleVisibility={onToggleVisibility}\n isVisible={isVisible(classification)}\n isDragging={true}\n canToggle={\n !isVisible(classification) ||\n Object.values(preferences).filter(c => !c.hidden).length > 1\n }\n />\n </div>\n );\n }\n\n function onSortStart(event: DragStartEvent): void {\n const classification = currentSubjects.find(s => s.id.toString() === event.active.id.toString());\n const index = currentSubjects.findIndex(s => s.id.toString() === event.active.id.toString());\n\n AnalyticsHelper.logUserAction({\n id: classification.id,\n name: classification.name,\n index\n }, {\n location: LocationContext.EditableSubjectPreferencesWidget,\n entity: EntityType.Classification,\n actionType: UserAction.Move,\n workflowPhase: WorkflowPhase.Start\n });\n }\n\n function onSortEnd(event: DragEndEvent): void {\n const { active, over } = event;\n \n const oldIndex = getItemIndex({ id: active.id } as Classification);\n const newIndex = currentSubjects.findIndex(s => s.id.toString() === over.id.toString());\n \n if (oldIndex === newIndex)\n return;\n\n const classification = currentSubjects[oldIndex];\n\n if (!classification)\n return;\n\n const newPreferences = { ...preferences };\n\n const { reorderedItems } = ReorderHelper.reorder(currentSubjects, oldIndex, newIndex);\n\n reorderedItems.forEach((item, index) => {\n newPreferences[item.id] = {\n id: item.id,\n index,\n hidden: !isVisible(item)\n };\n });\n\n setPreferences(newPreferences);\n\n AnalyticsHelper.logUserAction({\n id: classification.id,\n name: classification.name,\n oldIndex,\n newIndex\n }, {\n location: LocationContext.EditableSubjectPreferencesWidget,\n entity: EntityType.Classification,\n actionType: UserAction.Move,\n workflowPhase: WorkflowPhase.Complete\n });\n }\n\n const hasEditedPreferences = React.useMemo(() => {\n return !ObjectHelper.isEqual(initialPreferences, preferences);\n }, [ initialPreferences, preferences ]);\n\n const exploreAllSubjectsItem = {\n id: props.presentation.id,\n name: LanguageService.getPhrase(namespace, 'exploreAll', { name: props.presentation.name }),\n cover: props.availablePresentations?.find(p => p.id === props.presentation.id)?.cover ?? props.presentation.cover,\n metadata: {\n backgroundColor: TopicsHelper.getMappedPresentationBackgroundColourCode(\n props.presentation.learningLevel,\n props.presentation.type\n )\n }\n } as Classification;\n\n const presentationsSwitchSubjectsItems: PresentationSwitchItem[] = props.availablePresentations ?\n props.availablePresentations.filter(presentation => presentation.id !== props.presentation?.id)\n .map(presentation => {\n return {\n id: presentation.id,\n name: LanguageService.getPhrase(namespace, 'changeTo', { name: presentation.name }),\n cover: presentation.cover,\n vanitySlug: presentation.vanitySlug,\n description: presentation.description,\n metadata: {\n backgroundColor: TopicsHelper.getMappedPresentationBackgroundColourCode(\n presentation.learningLevel,\n presentation.type\n )\n }\n } as PresentationSwitchItem;\n }) :\n [];\n // only show presentation switch if there are more than one other presentaitons and with domain option enabled when it's not editing\n const showPresentationSwitch = !isEditing\n && presentationsSwitchSubjectsItems.length > 0\n && props.settings?.hasTopicDirectories;\n\n const canManagePreferences = props.hasLocalPermissions(LocalPermissionName.ManageDiscoverPreferences);\n\n const analyticsOptions = {\n location: LocationContext.EditableSubjectPreferencesWidget\n };\n\n if (!currentSubjects.length)\n return <></>;\n\n return (\n <div>\n <div className='d-flex flex-wrap align-items-center justify-content-between'>\n <div className='col'>\n <div className='d-flex justify-content-between w-100 no-wrap flex-row mb-2'>\n <h2 className='h4 mb-0 align-self-end flex-shrink-0'>\n {isEditing ? LanguageService.getPhrase(namespace, 'updating') : props.name}\n </h2>\n {(!isEditing && canManagePreferences) && (\n <DivButton className='hover-text-underline' onClick={() => setIsEditing(true)}>\n {LanguageService.getPhrase(namespace, 'edit')}\n </DivButton>\n )}\n </div>\n {!!props.description && !isEditing && (\n <p className='text-truncate description mb-2'>{props.description}</p>\n )}\n {isEditing && (\n <p className='description mb-2'><Text namespace={namespace} phrase='editingDescription' /></p>\n )}\n </div>\n\n {(isEditing && canManagePreferences) && (\n <div className='d-flex align-items-start'>\n <Button variant='link' className='me-2' onClick={onClickCancel}>\n <Text namespace={namespace} phrase='cancel' />\n </Button>\n <SpinnerButton variant='dark' onClick={onClickSavePreferences} showSpinner={showSpinner} disabled={!hasEditedPreferences}>\n <Text namespace={namespace} phrase='update' />\n </SpinnerButton>\n </div>\n )}\n </div>\n\n {!isEditing && React.isValidElement(props.reminderComponent) && props.reminderComponent}\n\n <Row as='ul' className='list-unstyled mx-n1 mb-n2'>\n {showExploreAllTopics && (\n <Col as='li' className='position-relative pb-2 px-1' key={props.presentation.id} sm={6} lg={4}>\n <SubjectWidgetItem\n data={exploreAllSubjectsItem}\n getChildAppLink={() => props.appLinks?.allTopics?.(props.presentation.id)}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n multiline\n highlightOnHover={props.settings?.hasTopicDirectories}\n shouldHighlight={() => props.settings?.hasTopicDirectories}\n />\n </Col>\n )}\n \n <SortableContainerWrapper\n ids={currentSubjects.map(c => c.id)}\n getDragOverlay={getDragOverlay}\n onSortStart={onSortStart}\n onSortEnd={onSortEnd}\n vertical={false}\n >\n {currentSubjects.map(c => {\n return (\n <Col as='li' className='position-relative pb-2 px-1' key={c.id} sm={6} lg={4}>\n <>\n {isEditing ? (\n <SortableItemWrapper\n id={c.id}\n childComponent={EditableSubjectWidgetItem}\n childProps={{\n data: c,\n onToggleVisibility,\n isVisible: isVisible(c),\n isDragging: false,\n canToggle: (\n !isVisible(c) ||\n Object.values(preferences).filter(c => !c.hidden).length > 1\n ),\n multiline: true\n }}\n />\n ) : (\n <SubjectWidgetItem\n data={c}\n getChildAppLink={(c: Classification) => props.appLinks?.classification?.(c)}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n multiline\n highlightOnHover={props.settings?.hasTopicDirectories}\n showNewVideosCount={\n props.settings?.hasTopicDirectories &&\n !props.isTertiaryCustomerWithoutExchange\n }\n />\n )}\n </>\n </Col>\n );\n })}\n </SortableContainerWrapper>\n\n {showPresentationSwitch && presentationsSwitchSubjectsItems.map(item => {\n return (\n <Col as='li' className='position-relative pb-2 px-1' key={item.id} sm={6} lg={4}>\n <SubjectWidgetItem\n data={item}\n getChildAppLink={() => props.appLinks?.discover?.(item?.vanitySlug)}\n analyticsData={{\n ...props.analyticsData,\n id: item.id,\n presentationId: item.id,\n presentationDescription: item.description\n }}\n analyticsOptions={{\n ...analyticsOptions,\n entity: EntityType.Presentation\n }}\n multiline\n highlightOnHover\n shouldHighlight={() => props.settings?.hasTopicDirectories}\n />\n </Col>\n );\n })\n }\n </Row>\n </div>\n );\n}\n",":local {\n .partialLoadingHeading {\n width: 12rem;\n height: 2rem;\n }\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { PartialSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item';\n\nimport styles from './partial-editable-cover-fixed-pill-list-small-widget-template.module.scss';\n\nexport function PartialEditableCoverFixedPillListSmallWidgetTemplate(): JSX.Element {\n return (\n <div className='py-2'>\n <div className={`partial-loading-background mb-2 ${styles.partialLoadingHeading}`} />\n <Row className='g-0'>\n {Array(7).fill(null).map((_, i) => (\n <Col key={i} sm={6} lg={4}>\n <div className='position-relative mb-2'>\n <PartialSubjectWidgetItem />\n </div>\n </Col>\n ))}\n </Row>\n </div>\n );\n}\n",":local {\n .cellDate {\n z-index: 100;\n position: absolute;\n top: map-get($spacers, 1);\n left: map-get($spacers, 1);\n width: 2rem;\n height: 2rem;\n border-radius: 2rem;\n line-height: 0;\n transition: width 150ms ease-in !important;\n overflow: hidden;\n .label{\n display: flex;\n }\n &.isHovering {\n width: 5.18rem;\n }\n }\n\n .numberWrapper {\n width: 2rem;\n height: 2rem;\n border-radius: 2rem;\n }\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { Timezone } from 'libs/shared/apps/streamable-learning/constants/Timezones';\nimport { TimezoneHelper } from 'libs/shared/apps/streamable-learning/utils/TimezoneHelper';\nimport { useHoverIntent } from 'libs/shared/hooks/UseHover';\n\nimport styles from './calendar-cell-date.module.scss';\n\nconst namespace = 'specialEventCalendar.calendarCellDate';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface CalendarCellDateProps {\n date: Date;\n notCurrentMonth: boolean;\n hasEvent?: boolean;\n className?: string;\n isHovering?: boolean;\n timezone?: Timezone;\n}\n\nexport function CalendarCellDate(props: CalendarCellDateProps): JSX.Element {\n const isToday = DateHelper.isSame(\n TimezoneHelper.convertUTCToTimezoneDate(new Date().toISOString(), props.timezone || null),\n props.date,\n 'day'\n );\n\n let dateClassName = `${styles.cellDate} d-flex flex-nowrap`;\n if (isToday)\n dateClassName += ' bg-dark text-white';\n if (props.hasEvent)\n dateClassName += ' text-white';\n else if (props.notCurrentMonth && !props.isHovering)\n dateClassName += ' text-secondary';\n if (props.className)\n dateClassName += ` ${props.className}`;\n \n const numberClassName = 'd-flex text-center justify-content-center align-items-center flex-shrink-0';\n const [ ref, isHovering ] = useHoverIntent<HTMLDivElement>({ delay: 250 });\n\n return (\n <div className={`${dateClassName} ${isHovering ? styles.isHovering : ''}`} ref={ref}>\n <div className={`${styles.numberWrapper} ${numberClassName}`}>\n {DateHelper.format(props.date, 'D')}\n </div>\n {isToday && (\n <div className={`${styles.label} justify-content-start align-items-center`}>\n {getPhrase('today')}\n </div>\n )}\n </div>\n );\n}\n",":local{\n .tag {\n background-color: $gray-100;\n padding-left: 0.25rem;\n }\n .tooltip {\n width: fit-content;\n }\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { TimerSvg } from 'libs/shared/images/svg/status/TimerSvg';\n\nimport styles from './coming-soon-tag.module.scss';\n\nconst namespace = 'specialEventCalendar.comingSoonTag';\n\ninterface ComingSoonProps {\n className?: string;\n onlyIcon?: boolean;\n}\n\nexport function ComingSoonTag(props: ComingSoonProps): JSX.Element {\n return (\n <Tooltip title={LanguageService.getPhrase(namespace, 'tooltip')} spanHackClassName={`d-block ${styles.tooltip}`} spanHack>\n <div className={`d-flex text-dark align-items-center ${styles.tag} ${props.className}`}>\n <SvgContainer svg={TimerSvg} />\n {!props.onlyIcon && LanguageService.getPhrase(namespace, 'comingSoon')}\n </div>\n </Tooltip>\n );\n}\n","export const CALENDAR_STAGGER_INTERVAL_MS = 50;\nexport const CALENDAR_FADE_TRANSITION_MS = 200;\n\n// Extra buffer after the last row's fade completes, so the \"disable transitions\" flip\n// can never race ahead of the fade it's timed against.\nconst CALENDAR_ANIMATION_SAFETY_MARGIN_MS = 50;\n\nexport function getCalendarRowDelayMs(rowIndex: number): number {\n return rowIndex * CALENDAR_STAGGER_INTERVAL_MS;\n}\n\nexport function getCalendarAnimationDurationMs(maxRowIndex: number): number {\n return getCalendarRowDelayMs(maxRowIndex) + CALENDAR_FADE_TRANSITION_MS + CALENDAR_ANIMATION_SAFETY_MARGIN_MS;\n}\n","/**\n * Inspired by nghilevi/moment-calendar-2\n */\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nexport type PatchedDate = Date & { notCurrentMonth: boolean };\nexport type WeeksTable = PatchedDate[][];\nexport type DatePositionMap = Record<string, { row: number, col: number }>;\n\nconst CALENDAR_START_DATE = new Date('2023-01-01');\nconst NEXT_MONTH_LIMIT = 12; // in month\n\nfunction getDaysOfMonth(date: Date): PatchedDate[] {\n const numberOfDays = DateHelper.daysInMonth(date);\n\n const daysArray = [];\n\n for (let i = 1; i <= numberOfDays; i++) {\n const day = DateHelper.set(date, 'date', i);\n daysArray.push(Object.assign(day, { notCurrentMonth: false }));\n }\n\n return daysArray;\n}\n\n// Get days from previous month overlapping current month\nfunction getPreviousMonthOverlappingDays(date: Date, startAtMon: boolean): PatchedDate[] {\n const firstDay = DateHelper.startOf(date, 'month');\n const firstWeekDay = DateHelper.getWeekday(firstDay);\n const prevMonthDays = [];\n const prevMonthDaysCount = startAtMon ? firstWeekDay === 0 ? 6 : firstWeekDay - 1 : firstWeekDay;\n\n for (let i = startAtMon ? 1 : 0; i <= prevMonthDaysCount; i++) {\n const originalDay = firstDay;\n const preDay = DateHelper.weekday(originalDay, firstWeekDay - i);\n prevMonthDays.push(Object.assign(preDay, { notCurrentMonth: true }));\n }\n\n return prevMonthDays.reverse();\n}\n\n// Get days from previous month overlapping current month\nfunction getNextMonthOverlappingDays(date: Date, startAtMon: boolean): PatchedDate[] {\n const lastDay = DateHelper.endOf(date, 'month');\n const lastWeekDay = DateHelper.getWeekday(lastDay);\n const nextMonthDays = [];\n const nextMonthDaysCount = startAtMon ? 7 - (lastWeekDay === 0 ? 7 : lastWeekDay) : 7 - lastWeekDay;\n\n for (let i = 1; i <= nextMonthDaysCount; i += 1) {\n const nextDay = DateHelper.add(lastDay, i, 'days');\n nextMonthDays.push(Object.assign(nextDay, { notCurrentMonth: true }));\n }\n\n return nextMonthDays;\n}\n\nexport function initWeekDays(startAtMon: boolean): string[] {\n const weekdays = startAtMon ? [ 1, 2, 3, 4, 5, 6, 0 ] : [ 0, 1, 2, 3, 4, 5, 6 ];\n const date = new Date();\n return weekdays.map(w => DateHelper.format(DateHelper.weekday(date, w), 'ddd'));\n}\n\nexport function buildWeeksTable(date: Date, startAtMon: boolean) {\n const weeksTable: WeeksTable = [];\n const datePositionMap: DatePositionMap = {};\n\n const monthDays = getPreviousMonthOverlappingDays(date, startAtMon)\n .concat(getDaysOfMonth(date))\n .concat(getNextMonthOverlappingDays(date, startAtMon));\n\n for (let j = 0, rowId = 0; j < monthDays.length; j = j + 7) {\n const week = monthDays.slice(j, j + 7);\n week.forEach((day, colId) => {\n datePositionMap[DateHelper.format(day, 'YYYY-MM-DD')] = { row: rowId, col: colId };\n });\n\n weeksTable.push(week);\n rowId++;\n }\n\n return {\n datePositionMap,\n weeksTable\n };\n}\n\nexport function getFirstCellInCalendar(monthDate: Date) {\n const firstDayOfMonth = DateHelper.startOf(monthDate, 'month');\n if (DateHelper.getWeekday(firstDayOfMonth) === 1) {\n return firstDayOfMonth;\n }\n return ArrayHelper.first(getPreviousMonthOverlappingDays(monthDate, true));\n}\n\nfunction getLastCellInCalendar(monthDate: Date) {\n const lastDayOfMonth = DateHelper.endOf(monthDate, 'month');\n if (DateHelper.getWeekday(lastDayOfMonth) === 0) {\n return lastDayOfMonth;\n }\n return ArrayHelper.last(getNextMonthOverlappingDays(monthDate, true));\n}\n\nexport function getCalendarRange(monthDate: Date) {\n return [ getFirstCellInCalendar(monthDate), getLastCellInCalendar(monthDate) ];\n}\n\nfunction capitalizeMonthString(monthStr: string) {\n return monthStr.charAt(0).toUpperCase() + monthStr.slice(1);\n}\n\nexport function getIsValidMonth(monthDateString: string) {\n if (!monthDateString)\n return true;\n const capitalized = capitalizeMonthString(monthDateString);\n const isValidMonthString = DateHelper.formatIsValid(capitalized, 'MMMM-YYYY', true);\n\n if (!isValidMonthString)\n return false;\n\n const monthDate = DateHelper.parseDateString(capitalized, 'MMMM-YYYY');\n\n return DateHelper.isSame(monthDate, CALENDAR_START_DATE, 'month') || DateHelper.isAfter(monthDate, CALENDAR_START_DATE, 'month');\n}\n\nconst CUR_DATE = new Date();\nexport function canNavToOtherMonths(monthDate: Date) {\n const monthDiff = DateHelper.diffBetween(DateHelper.startOf(monthDate, 'month'), DateHelper.startOf(CUR_DATE, 'month'), 'months');\n const showPrev = DateHelper.isAfter(monthDate, CALENDAR_START_DATE, 'month');\n const showNext = monthDiff < NEXT_MONTH_LIMIT;\n return { showPrev, showNext };\n}\n\nexport function parseMonthString(monthStr: string) {\n if (!monthStr)\n return DateHelper.parseDateString();\n\n const capitalized = capitalizeMonthString(monthStr);\n return DateHelper.parseDateString(capitalized, 'MMMM-YYYY');\n}\n","import { Locale } from 'libs/common/react/interfaces/Locale';\n\nimport { InstanceRegion } from 'libs/shared/enums/InstanceRegion';\n\ntype CommonRegionMap = {\n [key in InstanceRegion]?: Locale;\n};\n\nexport const COMMON_REGION_MAP: CommonRegionMap = {\n [InstanceRegion.US]: 'en-us'\n};\n","import { DateHelper } from 'libs/common/react/utils/DateHelper';\nimport { RegionDateFormatHelper } from 'libs/common/react/utils/RegionDateFormatHelper';\n\nimport { getFirstCellInCalendar } from 'libs/shared/apps/calendar/utils/CalendarHelper';\nimport { COMMON_REGION_MAP } from 'libs/shared/constants/CommonRegionMap';\nimport { InstanceRegion } from 'libs/shared/enums/InstanceRegion';\nimport { CalendarEvent, CalendarEventContent } from 'libs/shared/interfaces';\n\nfunction deduplicateEvents(events: CalendarEvent<CalendarEventContent>[]): CalendarEvent<CalendarEventContent>[] {\n const seen = new Set<string>();\n return events.filter(event => {\n if (seen.has(event.specialEventId)) {\n return false;\n }\n seen.add(event.specialEventId);\n return true;\n });\n}\n\nexport const SpecialEventHelper = {\n getDisplayDate(startDate: string, endDate: string): string {\n if (!endDate)\n // one day event\n return DateHelper.format(startDate, 'D MMM');\n\n if (startDate.slice(5, 7) !== endDate.slice(5, 7))\n // span across months\n return `${DateHelper.format(startDate, 'D MMM')} - ${DateHelper.format(endDate, 'D MMM')}`;\n // same month event\n\n if (RegionDateFormatHelper.getCurrentRegion() === COMMON_REGION_MAP[InstanceRegion.US])\n return `${DateHelper.format(startDate, 'MMM')} ${DateHelper.format(startDate, 'D')} - ${DateHelper.format(endDate, 'D')}`;\n\n return `${DateHelper.format(startDate, 'D')} - ${DateHelper.format(endDate, 'D')} ${DateHelper.format(startDate, 'MMM')}`;\n },\n\n getEventsInMonth(calendarEvents: CalendarEvent[], month: Date) {\n return calendarEvents.filter(e => DateHelper.format(e.startDate, 'YYYY-MM') === DateHelper.format(month, 'YYYY-MM'));\n },\n\n getOrdinalDate(date: string): string {\n return `${DateHelper.getLocalDateOrdinal(DateHelper.get(date, 'date'))} ${DateHelper.format(date, 'MMMM')}`;\n },\n\n isEventFromPreviousMonth(event: CalendarEvent<CalendarEventContent>, month: Date): boolean {\n if (!event.endDate) return false;\n\n const eventStartMonth = DateHelper.format(event.startDate, 'YYYY-MM');\n const targetMonth = DateHelper.format(month, 'YYYY-MM');\n\n return eventStartMonth < targetMonth && event.endDate >= DateHelper.format(month, 'YYYY-MM-DD');\n },\n\n getEventsForDay(\n date: Date,\n allEvents: CalendarEvent<CalendarEventContent>[],\n crossMonthEventsForFirstDay: CalendarEvent<CalendarEventContent>[] = [],\n monthDate: Date\n ): CalendarEvent<CalendarEventContent>[] {\n const eventsStartingOnDay = allEvents.filter(e => DateHelper.isSame(date, e.startDate)) || [];\n const isFirstCellOfCalendar = DateHelper.isSame(getFirstCellInCalendar(monthDate), date, 'day');\n\n if (isFirstCellOfCalendar) {\n return deduplicateEvents([ ...eventsStartingOnDay, ...crossMonthEventsForFirstDay ]);\n }\n\n return eventsStartingOnDay;\n },\n\n getCrossMonthEventsForDate(\n date: Date,\n allEvents: CalendarEvent<CalendarEventContent>[],\n monthDate: Date\n ): CalendarEvent<CalendarEventContent>[] {\n const isFirstCellOfCalendar = DateHelper.isSame(getFirstCellInCalendar(monthDate), date, 'day');\n if (!isFirstCellOfCalendar) return [];\n\n return allEvents.filter(e => {\n const isFromPreviousMonth = SpecialEventHelper.isEventFromPreviousMonth(e, date);\n // Only include if the event's start date is not the same as the target date\n const startDateIsSameDay = DateHelper.isSame(date, e.startDate);\n return isFromPreviousMonth && !startDateIsSameDay;\n });\n },\n\n getAllEventsForDate(\n date: Date,\n allEvents: CalendarEvent[],\n monthDate: Date\n ): CalendarEvent<CalendarEventContent>[] {\n const dateStr = DateHelper.format(date, 'YYYY-MM-DD');\n const eventsStartingOnDay = allEvents.filter(e => e.startDate === dateStr);\n const crossMonthEvents = SpecialEventHelper.getCrossMonthEventsForDate(date, allEvents, monthDate);\n\n return deduplicateEvents([ ...eventsStartingOnDay, ...crossMonthEvents ]);\n }\n};\n",":local {\n .sliderDot {\n width: 0.5rem;\n height: 0.5rem;\n background-color: $gray-400;\n\n &.sm {\n width: 0.3125rem;\n height: 0.3125rem;\n }\n\n &.active {\n background-color: $blue;\n }\n }\n\n .dotContainer {\n gap: 0.625rem;\n }\n \n .defaultCursor {\n cursor: initial !important;\n }\n}","import React from 'react';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\n\nimport styles from './slider-dots.module.scss';\n\ninterface SliderDotsProps {\n sliderStep: number;\n sliderLength: number;\n onSliderDotClick: (i: number) => void;\n isDisabled?: (indicatorIndex: number) => boolean;\n\n size?: 'sm' | 'md';\n className?: string;\n}\n\nexport function SliderDots(props: SliderDotsProps) {\n function onSliderDotClick(e: MouseEvent, i: number) {\n e.stopPropagation();\n e.preventDefault();\n props.onSliderDotClick(i);\n }\n\n function getSliderDotClassName(active: boolean, index: number) {\n let className = `${styles.sliderDot} rounded-3`;\n\n if (active)\n className += ` ${styles.active}`;\n\n if (props.size === 'sm')\n className += ` ${styles.sm}`;\n\n if (props.isDisabled?.(index))\n className += ` pointer-events-none ${styles.defaultCursor}`;\n\n return className;\n }\n \n return (\n <div className={`${props.className} w-100 d-flex justify-content-around`}>\n <div className={`${styles.dotContainer} d-flex`}>\n {[...Array(props.sliderLength)].map((_, i) => {\n const active = i === props.sliderStep;\n\n return (\n <DivButton\n key={i}\n className={getSliderDotClassName(active, i)}\n onClick={e => onSliderDotClick?.(e, i)}\n />\n );\n })}\n </div>\n </div>\n );\n}\n","@import '~styles/utils/mixins';\n@import '~styles/utils/include-media';\n:local {\n $button-bottom: 2.15rem;\n $circle-size: map-get($spacers, 1);\n \n %fade-in {\n opacity: 0;\n transition: opacity var(--calendar-fade-duration, 200ms) ease-in-out;\n }\n\n %slider-on-hover {\n display: none;\n &:hover{\n display: block;\n }\n }\n\n .wrapper {\n &:hover{\n .left {\n display: block;\n }\n .right {\n display: block;\n }\n }\n }\n\n .eventCard {\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n @extend %fade-in;\n //fall-back color\n background-color: $gray-900;\n\n }\n .backgroundImage {\n height: 4.5rem;\n width: 4.5rem;\n \n @extend %fade-in;\n &.noAnimation {\n transition: none;\n }\n &.cover{\n top:0;\n left:0;\n width: 100%;\n height: 100%;\n z-index: 1;\n background-repeat: no-repeat;\n background-position: 0 0 !important;\n background-size: cover;\n }\n }\n \n .date {\n @extend %fade-in;\n }\n\n .tagWrap {\n z-index: 4;\n position: absolute;\n right: 0;\n }\n\n .tag {\n @extend %fade-in;\n width: 2rem;\n height: 2rem;\n top: map-get($spacers, 1);\n right: map-get($spacers, 1);\n }\n\n .appear {\n opacity: 1;\n }\n\n .displayDate {\n font-size: 0.625rem;\n z-index: 2;\n }\n\n .title {\n z-index: 2;\n }\n\n $title-font-size: clamp(0.75rem, 1.25vw, 1rem);\n .titleText {\n font-size: $title-font-size;\n padding-bottom: calc($title-font-size * 0.05) !important;\n\n @include media('<=sm') {\n @include clamp(1);\n }\n }\n\n .circle {\n width: $circle-size;\n height: $circle-size;\n border-radius: 50%;\n background-color: $gray-400;\n z-index: 2;\n\n &.active {\n background-color: $blue;\n }\n\n &:not(:last-child) {\n margin-right: map-get($spacers, 2);\n }\n }\n\n .left {\n left: map-get($spacers, 1);\n bottom: 50%;\n transform: translateY(50%);\n z-index: 2;\n .arrow {\n padding-right: 0.1rem;\n }\n display: none;\n\n }\n .right {\n right: map-get($spacers, 1);\n bottom: 50%;\n transform: translateY(50%);\n z-index: 2;\n .arrow {\n padding-left: 0.1rem;\n }\n display: none;\n\n }\n .bottomBar {\n z-index: 3;\n margin-top: 0.125rem;\n }\n .bottomPlaceholder {\n visibility: hidden;\n }\n\n .hardcodedCover {\n top:0;\n left:0;\n width: 100%;\n height: 100%;\n z-index: 1;\n background-size: 100%;\n @extend %fade-in;\n &.noAnimation {\n transition: none;\n }\n }\n\n .multiEventFilter {\n &::before {\n content: '';\n position: absolute;\n height: 100%;\n width: 100%;\n top: 0;\n left: 0;\n background: rgba(255, 255, 255, 0.4);\n }\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/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 { AnalyticsOptions, EntityType, HashObject, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { CalendarCellDate } from 'libs/shared/apps/calendar/components/calendar-cell-date/CalendarCellDate';\nimport { ComingSoonTag } from 'libs/shared/apps/calendar/components/coming-soon-tag/ComingSoonTag';\nimport { CALENDAR_FADE_TRANSITION_MS, getCalendarRowDelayMs } from 'libs/shared/apps/calendar/constants/CalendarAnimation';\nimport { CalendarCellProps } from 'libs/shared/apps/calendar/interfaces/CalendarCellProps';\nimport { SpecialEventHelper } from 'libs/shared/apps/calendar/utils/SpecialEventHelper';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { HoverableProps } from 'libs/shared/components/hover-to-portal-container/HoverToPortalContainer';\nimport { LazyImage } from 'libs/shared/components/lazy-image/LazyImage';\nimport { SliderDots } from 'libs/shared/components/slider-dots/SliderDots';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { ChevronLeftSvg } from 'libs/shared/images/svg/arrows/ChevronLeftSvg';\nimport { ChevronRightSvg } from 'libs/shared/images/svg/arrows/ChevronRightSvg';\nimport { CalendarEvent, CalendarEventContent } from 'libs/shared/interfaces';\n\nimport styles from './calendar-events.module.scss';\n\ntype CalendarEventsProps = HoverableProps & CalendarCellProps;\n\nCalendarEvents.defaultProps = {\n responsiveText: true\n};\n\nexport function CalendarEvents(props: CalendarEventsProps): JSX.Element {\n const { sliderStep, setSliderStep } = props;\n\n const sortedEventsOnDay = props.fadePastEvents ? sortPastEvents(props.eventsOnDay) : props.eventsOnDay;\n const multiEvents = props.eventsOnDay.length > 1;\n const displayedEvent = sortedEventsOnDay.find((e, idx) => idx === sliderStep) || sortedEventsOnDay[0];\n const multiDayEvent = !!displayedEvent.endDate;\n\n const backgroundColor = props.getBackgroundColor?.(displayedEvent.content);\n\n const hardCodedEvent = props.getHardCodedEvent?.(displayedEvent.content);\n\n const iconUrl = props.getIconUrl?.(displayedEvent.content);\n const coverUrl = props.getCoverUrl?.(displayedEvent.content);\n\n const isComingSoon = displayedEvent.content.status === ClassificationStatus.ComingSoon;\n\n const [ className, setClassName ] = React.useState(!props.hasInitialized ? '' : styles.appear);\n\n React.useEffect(() => {\n if (!props.hasInitialized) {\n const delay = getCalendarRowDelayMs(props.rowIndex ?? 0);\n const timeoutId = window.setTimeout(() => {\n setClassName(styles.appear);\n }, delay);\n return () => window.clearTimeout(timeoutId);\n }\n }, [props.hasInitialized]);\n\n React.useEffect(() => {\n if (props.isHovering) {\n props.setHoveredEvent(displayedEvent);\n }\n }, [ props.isHovering, displayedEvent ]);\n\n React.useEffect(() => {\n return () => {\n if (props.isHovering && props.hoveredEvent?.specialEventId === displayedEvent.specialEventId) {\n props.setHoveredEvent(null);\n }\n };\n }, [ props.isHovering, props.hoveredEvent, displayedEvent ]);\n\n function getAppLink(): Core.AppLink {\n if (multiEvents)\n return props.getEventsListAppLink?.();\n\n if (isComingSoon)\n return null;\n\n return props.getTopicAppLink?.(displayedEvent.content, TextHelper.slugify(displayedEvent.name));\n }\n\n function getAnalyticsData() {\n const analyticsData: HashObject = {\n date: DateHelper.format(props.date, 'YYYY-MM-DD'),\n presentationId: props.presentationId,\n eventCount: props.eventsOnDay.length\n };\n\n if (multiEvents) {\n analyticsData.eventId = props.eventsOnDay.map(e => e.specialEventId).join(',');\n analyticsData.topicId = props.eventsOnDay.map(e => e.content.id).join(',');\n } else {\n analyticsData.eventId = displayedEvent.specialEventId;\n analyticsData.topicId = displayedEvent.content.id;\n analyticsData.eventStatus = displayedEvent.content.status;\n }\n return analyticsData;\n }\n\n const analyticsData = getAnalyticsData();\n\n const analyticsOptions: AnalyticsOptions = {\n actionType: UserAction.Click,\n entity: EntityType.SpecialEvent,\n location: LocationContext.CalendarDay\n };\n\n function formatAnalyticDataDate(date: Date): string {\n return DateHelper.format(date, 'YYYY-MM-DD');\n }\n\n function getBgImageClassName(): string {\n const defaultClassName = `${props.className} ${className} `;\n\n const classes = [\n hardCodedEvent ? `${styles.hardcodedCover} position-absolute` : styles.backgroundImage,\n iconUrl ? 'my-auto' : styles.cover,\n isComingSoon ? styles.comingSoon : '',\n props.hasInitialized ? styles.noAnimation : '',\n props.isHovering ? `rounded-3` : '',\n props.isMultiEventDate ? styles.multiEventFilter : '',\n 'company' in displayedEvent.content ? 'rounded-circle' : ''\n ];\n\n return defaultClassName + classes.join(' ');\n }\n\n function isPastEvent(event: CalendarEvent<CalendarEventContent>) {\n if ('startDateTime' in event.content) {\n return DateHelper.isBefore(event.content.startDateTime, new Date());\n }\n return false;\n }\n\n function sortPastEvents(events: CalendarEvent<CalendarEventContent>[]) {\n return events.sort((a, b) => {\n if (!isPastEvent(a) && isPastEvent(b)) {\n return 1;\n }\n\n if (isPastEvent(a) && !isPastEvent(b)) {\n return -1;\n }\n\n return 0;\n });\n }\n\n const fadeTransitionStyle = { '--calendar-fade-duration': `${CALENDAR_FADE_TRANSITION_MS}ms` } as React.CSSProperties;\n\n return (\n <div\n style={fadeTransitionStyle}\n onClick={() => {\n if (isComingSoon)\n AnalyticsHelper.logUserAction(analyticsData, analyticsOptions);\n }}\n >\n <AppLink\n appLink={getAppLink()}\n analyticsOptions={analyticsOptions}\n analyticsData={analyticsData}\n className={`position-absolute top-0 start-0 h-100 w-100 text-shadow ${styles.wrapper}`}\n labelledBy='calendarEvent'\n >\n <div className={`${styles.tagWrap} p-1`}>\n {isComingSoon && (\n <ComingSoonTag className={`justify-content-center p-0 rounded-circle ${styles.tag} ${className}`} onlyIcon />\n )}\n </div>\n {!props.hideDay && (\n <CalendarCellDate\n date={props.date}\n notCurrentMonth={props.notCurrentMonth}\n className={`${styles.date} ${className}`}\n isHovering={props.isHovering}\n timezone={props.timezone}\n hasEvent\n />\n )}\n\n <div\n style={{ backgroundColor } }\n className={`position-absolute d-flex flex-column justify-content-end align-items-center text-white px-1 pt-2 pb-1 ${styles.eventCard} ${className} ${props.isHovering ? 'rounded-3' : ''} ${props.isMultiEventDate ? styles.multiEventFilter : ''} ${props.className} ${!props.isHovering && isPastEvent(displayedEvent) ? 'opacity-50' : ''}`}\n >\n {iconUrl && <LazyImage src={iconUrl} alt={displayedEvent.content.name} className={getBgImageClassName()} />}\n\n {coverUrl && !iconUrl && (\n <div\n style={{ backgroundImage: `url('${coverUrl}')` }}\n className={getBgImageClassName()}\n />\n )}\n\n {multiDayEvent && (\n <div className={`${styles.displayDate}`}>\n {SpecialEventHelper.getDisplayDate(displayedEvent.startDate, displayedEvent.endDate)}\n </div>\n )}\n <div className={`text-center ${styles.title} ${multiEvents ? 'mb-1' : 'mb-2'}`}>\n <p id='calendarEvent' className={`${props.responsiveText ? styles.titleText : ''} ${props.isHovering ? 'mb-0' : 'clamp-2'} h6`} title={displayedEvent.name}>{displayedEvent.name}</p>\n </div>\n\n {(multiEvents && sliderStep !== 0) && (\n <div className={`position-absolute bg-white rounded-circle ${styles.left}`}>\n <DivButton\n onClick={e => {\n e.stopPropagation();\n e.preventDefault();\n setSliderStep(s => s - 1);\n AnalyticsHelper.logUserAction({ date: formatAnalyticDataDate(props.date), action: 'previous', eventCount: props.eventsOnDay.length }, analyticsOptions);\n }}>\n <SvgContainer\n svg={ChevronLeftSvg}\n className={`d-inline-block svg-container text-dark ${styles.arrow}`}\n />\n </DivButton>\n </div>\n )}\n\n {multiEvents && sliderStep !== props.eventsOnDay.length - 1 && (\n <div className={`position-absolute bg-white rounded-circle ${styles.right}`}>\n <DivButton\n onClick={e => {\n e.stopPropagation();\n e.preventDefault();\n setSliderStep(s => s + 1);\n AnalyticsHelper.logUserAction({ date: formatAnalyticDataDate(props.date), action: 'next', eventCount: props.eventsOnDay.length }, analyticsOptions);\n }}>\n <SvgContainer\n svg={ChevronRightSvg}\n className={`d-inline-block svg-container text-dark ${styles.arrow}`}\n />\n </DivButton>\n </div>\n )}\n\n {multiEvents && (\n <div className={`d-flex ${styles.bottomBar} ${multiEvents ? '' : styles.bottomPlaceholder}`}>\n <SliderDots\n sliderStep={sliderStep}\n sliderLength={props.eventsOnDay.length}\n size='sm'\n className={`${props.isHovering ? 'mb-2' : 'mb-1'}`}\n onSliderDotClick={i => {\n setSliderStep(i);\n AnalyticsHelper.logUserAction({ date: formatAnalyticDataDate(props.date), action: 'jump', eventCount: props.eventsOnDay.length }, analyticsOptions);\n }}\n />\n </div>\n )}\n </div>\n </AppLink>\n </div>\n );\n}\n",":local {\n .cell {\n padding-bottom: 100%;\n }\n\n .multiEventCell {\n height: 100%;\n width: 100%;\n position: absolute;\n top: 0;\n left: 0;\n opacity: 0.25;\n z-index: 100;\n animation: fadeIn 0.8s ease-in;\n }\n @keyframes :local(fadeIn) {\n 0% {\n opacity: 0.1;\n }\n 20% {\n opacity: 0.25;\n }\n }\n}","import React from 'react';\n\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { CalendarCellDate } from 'libs/shared/apps/calendar/components/calendar-cell-date/CalendarCellDate';\nimport { CalendarEvents } from 'libs/shared/apps/calendar/components/calendar-events/CalendarEvents';\nimport { CalendarCellProps } from 'libs/shared/apps/calendar/interfaces/CalendarCellProps';\nimport { HoverableProps } from 'libs/shared/components/hover-to-portal-container/HoverToPortalContainer';\n\nimport styles from './calendar-day.module.scss';\n\ntype CalendarDayProps = HoverableProps & CalendarCellProps;\n\nexport function CalendarDay(props: CalendarDayProps) {\n const isMultiEventDate = React.useMemo(\n () =>\n props.hoveredEvent?.endDate &&\n !DateHelper.isSame(props.date, props.hoveredEvent?.startDate) &&\n DateHelper.isBetween(\n DateHelper.format(props.date, 'YYYY-MM-DD'),\n props.hoveredEvent?.startDate,\n props.hoveredEvent?.endDate\n ),\n [props.hoveredEvent]\n );\n const backgroundColor = props.hoveredEvent ? props.getBackgroundColor?.(props.hoveredEvent.content) : null;\n\n return (\n <div className={`${styles.cell} fw-semibold`}>\n {!props.hideDay && (\n <CalendarCellDate\n date={props.date}\n notCurrentMonth={props.notCurrentMonth}\n timezone={props.timezone}\n />\n )}\n {isMultiEventDate && !props.isHovering && (\n <div style={{ backgroundColor }} className={styles.multiEventCell}></div>\n )}\n {props.eventsOnDay?.length > 0 && (\n <CalendarEvents {...props}\n isMultiEventDate={isMultiEventDate && !props.isHovering}\n />\n )}\n </div>\n );\n}\n",":local {\n .dateItem {\n padding-bottom: 100%;\n\n .label {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n height: 20%;\n }\n\n .body {\n position: absolute;\n top: 45%;\n left: 50%;\n transform: translate(-50%, -50%);\n line-height: 1;\n width: 100%;\n \n &.bodyDay {\n font-size: 3.5em;\n }\n\n &.bodyRange {\n font-size: 2.5em;\n }\n\n &.bodyMonth {\n font-size: 3em;\n top: 50%;\n }\n }\n\n .month {\n position: absolute;\n bottom: 0.1em;\n left: 0;\n right: 0;\n font-size: 1.1em;\n font-weight: 600;\n }\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { CalendarTheme } from 'libs/shared/apps/calendar/interfaces/CalendarTheme';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport styles from './generic-calendar-date.module.scss';\n\nexport interface GenericCalendarDateProps {\n label?: string;\n body: {\n type: 'month' | 'range' | 'day',\n text: string\n };\n month?: string;\n getAppLink?: () => Core.AppLink;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n className?: string;\n theme?: CalendarTheme;\n}\n\nexport function GenericCalendarDate(props: GenericCalendarDateProps): JSX.Element {\n function getBodyClass(): string {\n switch (props.body.type) {\n case 'range':\n return styles.bodyRange;\n case 'day':\n return styles.bodyDay;\n case 'month':\n return styles.bodyMonth;\n }\n }\n\n return (\n <AppLink\n appLink={props.getAppLink?.()}\n className={`text-decoration-none text-center bg-white text-dark border border-3 ${props.theme?.border} rounded-3 d-block fw-semibold ${props.className}`}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n >\n <div className={`position-relative ${styles.dateItem}`}>\n <div className={`${props.theme?.background} py-1 ${styles.label} d-flex align-items-center justify-content-center`}>\n {props.label ? props.label : <>&nbsp;</>}\n </div>\n <div className={`${getBodyClass()} ${styles.body} my-2`}>\n {props.body.text}\n </div>\n <div className={`mb-0 ${styles.month}`}>\n {props.month}\n </div>\n </div>\n </AppLink>\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .dateItemContainer {\n font-size: 1rem;\n\n @media (max-width: 650px) and (min-width: #{map-get($grid-breakpoints, sm)}) {\n font-size: 0.8rem;\n }\n\n @media (max-width: 400px) {\n font-size: 0.8rem;\n }\n }\n\n .container {\n width: 16.666667%;\n aspect-ratio: 1 / 1;\n\n &:first-child {\n &::before {\n content: \"\";\n width: 5px;\n height: 100%;\n background-color: inherit;\n position: absolute;\n top: 0;\n left: -5px;\n border-top-left-radius: $border-radius-lg;\n border-bottom-left-radius: $border-radius-lg;\n }\n }\n\n &:last-child {\n &::before {\n content: \"\";\n width: 5px;\n height: 100%;\n background-color: inherit;\n position: absolute;\n top: 0;\n right: -5px;\n border-top-right-radius: $border-radius-lg;\n border-bottom-right-radius: $border-radius-lg;\n }\n }\n }\n\n @include media('<=xl') {\n .container {\n width: 20%;\n }\n }\n\n @include media('<=lg') {\n .container {\n width: 25%;\n }\n }\n\n @include media('<=md') {\n .container {\n width: 33.33333%;\n }\n }\n\n @include media('<=sm') {\n .container {\n width: 50%;\n }\n }\n}","import React from 'react';\n\nimport { AnalyticsOptions, EntityType, HashObject, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { CalendarDay } from 'libs/shared/apps/calendar/components/calendar-day/CalendarDay';\nimport { GenericCalendarDate } from 'libs/shared/apps/calendar/components/generic-calendar-date/GenericCalendarDate';\nimport { CalendarTheme } from 'libs/shared/apps/calendar/interfaces/CalendarTheme';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DateWidgetItem } from 'libs/shared/components/widgets/curated-widgets/templates/event-icon-sliding-list/EventIconSlidingListWidgetTemplate';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { HardCoded } from 'libs/shared/constants/HardCoded';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { CalendarEvent, CalendarEventContent, Classification, Livestream } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './special-event-widget-item.module.scss';\n\ninterface CalendarWidgetItem {\n theme?: CalendarTheme;\n analyticsData?: (content: CalendarEvent<CalendarEventContent>) => HashObject;\n analyticsOptions?: AnalyticsOptions;\n getBackgroundColor?: (content: CalendarEventContent) => string;\n getIconUrl?: (content: CalendarEventContent) => string;\n getHardCodedEvent?: (content: CalendarEventContent) => HashObject;\n}\n\nfunction CalendarWidgetItem<T extends CalendarEventContent>(\n props: CalendarWidgetItem & FixedWidgetItemProps<CalendarEvent<T>>\n) {\n return (\n <div className={`${styles.container} position-relative flex-shrink-0 ${props.theme.backgroundSecondary}`}>\n <AppLink\n appLink={props.getAppLink(props.data)}\n className='text-decoration-none my-2 mx-1 rounded-3 d-block position-relative'\n analyticsData={props.analyticsData(props.data)}\n analyticsOptions={props.analyticsOptions}\n >\n <CalendarDay\n isHovering={false}\n date={new Date(props.data.startDate)}\n notCurrentMonth={false}\n monthQuery={null}\n eventsOnDay={[props.data]}\n events={[props.data]}\n sliderStep={0}\n presentationId={props.data.content.presentationId}\n hoveredEvent={null}\n isMultiEventDate={false}\n className='rounded-3'\n getBackgroundColor={props.getBackgroundColor}\n getIconUrl={props.getIconUrl}\n hasInitialized\n responsiveText={false}\n hideDay\n />\n </AppLink>\n </div>\n );\n}\n\nexport type SpecialEventWidgetItemProps = CalendarWidgetItem &\nFixedWidgetItemProps<CalendarEvent<CalendarEventContent> | DateWidgetItem>;\n\nexport function SpecialEventWidgetItem(\n props: SpecialEventWidgetItemProps\n): JSX.Element {\n const { data, ...otherProps } = props;\n\n if (data.type === 'date-widget-item') {\n return (\n <div className={`${styles.container} ${styles.dateItemContainer} flex-shrink-0 ${props.theme.backgroundSecondary} position-relative`}>\n <GenericCalendarDate\n month={data.month}\n body={data.body}\n label={data.label}\n getAppLink={() => props.getAppLink(data)}\n analyticsData={{\n ...props.analyticsData,\n label: data.label,\n month: data.month,\n body: data.body.text\n }}\n analyticsOptions={{\n ...props.analyticsOptions,\n entity: EntityType.Url,\n actionType: UserAction.Click,\n location: LocationContext.EventIconSlidingListWidget\n }}\n className='my-2 mx-1'\n theme={props.theme}\n />\n </div>\n );\n }\n\n if (data.type === 'Livestream')\n return (\n <CalendarWidgetItem\n {...otherProps}\n data={data as CalendarEvent<Livestream>}\n getBackgroundColor={(content: Livestream) => content.company.metadata?.colour}\n getIconUrl={(content: Livestream) => content.company.logo?.url}\n analyticsData={(event: CalendarEvent<Livestream>) => ({\n ...props.analyticsData,\n id: event.content.id,\n name: event.content.name,\n startDateTime: event.content.startDateTime,\n endDateTime: event.content.endDateTime\n })}\n analyticsOptions={{\n ...props.analyticsOptions,\n entity: EntityType.SpecialEvent,\n actionType: UserAction.Click,\n location: LocationContext.EventIconSlidingListWidget\n }}\n />\n );\n\n function getIconUrl(classification: Classification): string {\n // in sliding widget we use icon from classification\n return ImageHelper.createUrl(classification.icon?.url, { size: ImageSize.Small });\n }\n \n function getHardCodedEvent(classification: Classification): HashObject {\n return HardCoded.SpecialEvents[classification.id as keyof typeof HardCoded.SpecialEvents];\n }\n\n return (\n <CalendarWidgetItem {...otherProps}\n data={data as CalendarEvent}\n getBackgroundColor={(classification: Classification) => classification.metadata?.backgroundColor}\n getIconUrl={(classification: Classification) => getIconUrl(classification)}\n getHardCodedEvent={getHardCodedEvent}\n analyticsData={(event: CalendarEvent<Classification>) => ({\n ...props.analyticsData,\n id: event.specialEventId,\n name: event.name,\n startDate: event.startDate,\n endDate: event.endDate,\n classificationId: event.content.id,\n classificationName: event.content.name\n })}\n analyticsOptions={{\n ...props.analyticsOptions,\n entity: EntityType.SpecialEvent,\n actionType: UserAction.Click,\n location: LocationContext.EventIconSlidingListWidget\n }}\n />\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { HashObject } from 'libs/analytics/interfaces';\n\nimport { CalendarTheme } from 'libs/shared/apps/calendar/interfaces/CalendarTheme';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget';\nimport { SpecialEventWidgetItem } from 'libs/shared/components/widgets/items/special-event-widget-item/SpecialEventWidgetItem';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { CalendarEvent, CalendarEventContent, CalendarEventContentType, Classification, Livestream, WidgetType } from 'libs/shared/interfaces';\n\nconst namespace = 'widgets.eventIconSlidingList';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface DateWidgetItem {\n label?: string;\n body: {\n type: 'month' | 'range' | 'day',\n text: string\n };\n month?: string;\n appLinkMonth: string;\n appLinkYear?: string;\n type: 'date-widget-item';\n}\n\ntype EventGroup = 'today' | 'tomorrow' | 'nextWeek' | 'thisMonth' | 'nextMonth' | 'later' | string;\n\ntype EventGroupingMap = Map<EventGroup, EventGrouping>;\n\ninterface EventGrouping {\n events: CalendarEvent<CalendarEventContent>[];\n label: string;\n body: DateWidgetItem['body'];\n monthLabel: string;\n startDate: string;\n endDate?: string;\n}\n\nfunction getWidgetItems(\n content: CalendarEvent<CalendarEventContent>[] | Livestream[],\n contentType?: CalendarEventContentType\n): (CalendarEvent<CalendarEventContent> | DateWidgetItem)[] {\n let calendarEvents: CalendarEvent<CalendarEventContent>[];\n \n switch (contentType) {\n case CalendarEventContentType.Livestream: {\n calendarEvents = getCalendarEventLivestreams(content as Livestream[]);\n break;\n }\n default: {\n calendarEvents = content as CalendarEvent[];\n }\n }\n\n // We want to process the events in the order that they occur in.\n const rawOrderedEvents = [...calendarEvents].sort((a, b) => a.startDate.localeCompare(b.startDate));\n\n const now = new Date();\n const today = DateHelper.format(now, 'YYYY-MM-DD');\n const tomorrow = DateHelper.format(DateHelper.add(today, 1, 'day'), 'YYYY-MM-DD');\n\n /**\n * Get next Monday's date. We add 8 days to the start of the week because\n * moment's start day is Sunday instead of Monday\n */\n const nextWeekStart = DateHelper.format(DateHelper.add(DateHelper.startOf(now, 'week'), 8, 'days'), 'YYYY-MM-DD');\n const nextWeekEnd = DateHelper.format(DateHelper.add(nextWeekStart, 6, 'days'), 'YYYY-MM-DD');\n\n const thisMonthStart = DateHelper.format(DateHelper.startOf(now, 'month'), 'YYYY-MM-DD');\n const thisMonthEnd = DateHelper.format(DateHelper.endOf(now, 'month'), 'YYYY-MM-DD');\n\n const nextMonthStart = DateHelper.format(DateHelper.startOf(DateHelper.add(now, 1, 'month'), 'month'), 'YYYY-MM-DD');\n const nextMonthEnd = DateHelper.format(DateHelper.endOf(DateHelper.add(now, 1, 'month'), 'month'), 'YYYY-MM-DD');\n\n const laterMonthStart = DateHelper.format(DateHelper.startOf(DateHelper.add(now, 2, 'month'), 'month'), 'YYYY-MM-DD');\n const laterMonthEnd = DateHelper.format(DateHelper.add(now, 1, 'year'), 'YYYY-MM-DD');\n\n // Using a map for this because we want the event ordering to be preserved\n const eventGroupingMap: EventGroupingMap = new Map();\n\n type EventRecord = {\n group: EventGroup,\n startDate: string,\n endDate: string,\n body: DateWidgetItem['body'],\n monthLabel: string,\n event: CalendarEvent<CalendarEventContent>,\n label: string\n };\n\n function getCalendarEventLivestreams(livestreams: Livestream[]): CalendarEvent<Livestream>[] {\n return livestreams.map((livestream: Livestream) => ({\n id: livestream.id,\n startDate: DateHelper.format(livestream.startDateTime, 'YYYY-MM-DD'),\n type: 'Livestream',\n name: livestream.name,\n description: livestream.description,\n content: livestream\n }));\n }\n\n function addEventToGroup(eventRecord: EventRecord): void {\n if (!eventGroupingMap.has(eventRecord.group)) {\n eventGroupingMap.set(eventRecord.group, {\n events: [eventRecord.event],\n label: eventRecord.label,\n body: eventRecord.body,\n monthLabel: eventRecord.monthLabel,\n startDate: eventRecord.startDate,\n endDate: eventRecord.endDate\n });\n return;\n }\n\n const currentMergedEvent = eventGroupingMap.get(eventRecord.group);\n eventGroupingMap.set(eventRecord.group, {\n ...currentMergedEvent,\n events: [ ...currentMergedEvent.events, eventRecord.event ]\n });\n }\n\n /**\n * Loop through every event, and identify which group it belongs to.\n */\n rawOrderedEvents.forEach(event => {\n // Today's events\n if (event.startDate <= today) {\n addEventToGroup({\n group: 'today',\n startDate: today,\n endDate: null,\n event,\n body: {\n text: DateHelper.format(today, 'DD'),\n type: 'day'\n },\n monthLabel: DateHelper.format(today, 'MMMM'),\n label: getPhrase('today')\n });\n return;\n }\n\n // Tomorrow's events\n if (event.startDate === tomorrow) {\n addEventToGroup({\n group: 'tomorrow',\n startDate: tomorrow,\n endDate: null,\n event,\n body: {\n text: DateHelper.format(tomorrow, 'DD'),\n type: 'day'\n },\n monthLabel: DateHelper.format(event.startDate, 'MMMM'),\n label: getPhrase('tomorrow')\n });\n return;\n }\n\n // This week's events, added separately for each day\n if (event.startDate > tomorrow && event.startDate < nextWeekStart) {\n const day = DateHelper.format(event.startDate, 'dddd');\n addEventToGroup({\n group: day,\n startDate: event.startDate,\n endDate: event.endDate,\n event,\n monthLabel: DateHelper.format(event.startDate, 'MMMM'),\n body: {\n text: DateHelper.format(event.startDate, 'DD'),\n type: 'day'\n },\n label: day\n });\n return;\n }\n\n // Next week's events\n if (event.startDate >= nextWeekStart && event.startDate <= nextWeekEnd) {\n addEventToGroup({\n group: 'nextWeek',\n startDate: nextWeekStart,\n endDate: nextWeekEnd,\n event,\n // Next week may either be in the same month or in different months\n monthLabel: DateHelper.isSame(nextWeekStart, nextWeekEnd, 'month') ?\n DateHelper.format(nextWeekStart, 'MMMM') :\n `${DateHelper.format(nextWeekStart, 'MMM')} - ${DateHelper.format(nextWeekEnd, 'MMM')}`,\n body: {\n text: `${DateHelper.format(nextWeekStart, 'DD')}-${DateHelper.format(nextWeekEnd, 'DD')}`,\n type: 'range'\n },\n label: getPhrase('nextWeek')\n });\n\n return;\n }\n\n // This month's events\n if (event.startDate >= thisMonthStart && event.startDate <= thisMonthEnd) {\n addEventToGroup({\n group: 'thisMonth',\n startDate: thisMonthStart,\n endDate: thisMonthEnd,\n event,\n // We don't display the month label for events where the date card body only displays the month name\n monthLabel: '',\n body: {\n text: DateHelper.format(event.startDate, 'MMM'),\n type: 'month'\n },\n label: getPhrase('thisMonth')\n });\n return;\n }\n\n // Next month's events\n if (event.startDate >= nextMonthStart && event.startDate <= nextMonthEnd) {\n addEventToGroup({\n group: 'nextMonth',\n startDate: nextMonthStart,\n endDate: nextMonthEnd,\n event,\n // We don't display the month label for events where the date card body only displays the month name\n monthLabel: '',\n body: {\n text: DateHelper.format(event.startDate, 'MMM'),\n type: 'month'\n },\n label: getPhrase('nextMonth')\n });\n return;\n }\n\n // Later events\n if (event.startDate >= laterMonthStart && event.startDate <= laterMonthEnd) {\n addEventToGroup({\n group: 'later',\n startDate: laterMonthStart,\n endDate: laterMonthEnd,\n event,\n // We don't display the month label for events where the date card body only displays the month name\n monthLabel: '',\n body: {\n text: DateHelper.format(event.startDate, 'MMM'),\n type: 'month'\n },\n label: getPhrase('later')\n });\n }\n });\n\n const mergedEvents: (CalendarEvent<CalendarEventContent> | DateWidgetItem)[] = [];\n\n for (const eventGrouping of eventGroupingMap.values()) {\n const dateItem: DateWidgetItem = {\n label: eventGrouping.label,\n body: eventGrouping.body,\n month: eventGrouping.monthLabel,\n appLinkMonth: DateHelper.format(eventGrouping.startDate, 'MMMM'),\n appLinkYear: DateHelper.format(eventGrouping.startDate, 'YYYY'),\n type: 'date-widget-item'\n };\n\n mergedEvents.push(dateItem);\n\n eventGrouping.events.forEach(event => {\n mergedEvents.push(event);\n });\n }\n\n return mergedEvents;\n}\n\nexport interface EventIconSlidingListWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n contentType: CalendarEventContentType;\n content: CalendarEvent<CalendarEventContent>[];\n appLinks: {\n calendar: () => Core.AppLink,\n calendarMonth: (month: string, year?: string) => Core.AppLink,\n livestream: (livestream: Livestream) => Core.AppLink,\n classification: (classification: Classification | null) => Core.AppLink\n };\n analyticsData?: HashObject;\n \n widgetTypeId: WidgetTypeId;\n isPreviewing: boolean;\n isUpselling?: boolean;\n}\n\nexport function EventIconSlidingListWidgetTemplate(\n props: EventIconSlidingListWidgetTemplateProps\n): JSX.Element {\n const widgetItems = React.useMemo(() => getWidgetItems(props.content, props.contentType), [props.content]);\n const theme = getTheme(props.contentType);\n\n function getTheme(contentType: CalendarEventContentType): CalendarTheme {\n switch (contentType) {\n case CalendarEventContentType.Livestream:\n return {\n background: 'bg-light-green',\n border: 'border-light-green',\n backgroundSecondary: 'bg-light-blue'\n };\n default:\n return {\n background: 'bg-light-blue',\n border: 'border-light-blue',\n backgroundSecondary: 'bg-light-yellow'\n };\n }\n }\n\n return (\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n appLink={props.appLinks?.calendar?.()}\n type={WidgetType.Row}\n contents={WidgetContents.SpecialEvents}\n getChildAppLink={(item: CalendarEvent<CalendarEventContent> | DateWidgetItem) => {\n if (item.type === 'date-widget-item')\n return props.appLinks?.calendarMonth?.(item.appLinkMonth, item.appLinkYear);\n\n if (item.type === 'Livestream')\n return props.appLinks?.livestream?.(item.content as Livestream);\n\n return props.appLinks?.classification?.(item.content as Classification);\n }}\n collection={widgetItems}\n childComponent={SpecialEventWidgetItem}\n extraChildComponentProps={{ theme }}\n analyticsData={props.analyticsData}\n isPreviewing={props.isPreviewing}\n widgetTypeId={props.widgetTypeId}\n isUpselling={props.isUpselling}\n prefetched\n />\n );\n}\n","import React from 'react';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nfunction useGetTotalItems(): number {\n const breakpoints = useBreakpoints();\n\n if (breakpoints.xs)\n return 2;\n\n if (breakpoints.sm)\n return 3;\n\n if (breakpoints.md)\n return 4;\n\n if (breakpoints.lg)\n return 5;\n\n if (breakpoints.xl || breakpoints.xxl)\n return 6;\n}\n\nexport function PartialEventIconSlidingListWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n const totalItems = useGetTotalItems();\n\n return (\n <>\n <PartialWidgetHeader\n name={props.name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n hideDescription\n />\n <div className='row g-0 mx-n1'>\n {Array(totalItems).fill(null).map((_, index) => (\n <div className='col px-1' key={index}>\n <div className='partial-loading-background rounded-3' style={{ paddingBottom: '100%' }} />\n </div>\n ))}\n </div>\n </>\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .hovering {\n z-index: 10;\n border-radius: $border-radius-lg;\n position: relative;\n }\n\n .transition {\n transition: transform .2s ease;\n }\n\n .rowWidth {\n width: 25%;\n }\n\n .largeRowWidth {\n width: 33.33333%;\n }\n\n @include media('<=xl') {\n .rowWidth {\n width: 33.33333%;\n }\n }\n\n @include media('<=md') {\n .rowWidth,\n .largeRowWidth {\n width: 50%;\n }\n }\n\n @include media('<=sm') {\n .rowWidth,\n .largeRowWidth {\n width: 100%;\n }\n }\n}","import React from 'react';\n\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { useHoverIntent } from 'libs/shared/hooks/UseHover';\nimport { PresentationAudience, VideoTypes, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\n\nimport styles from './video-widget-item.module.scss';\n\nexport interface VideoWidgetItemProps extends FixedWidgetItemProps<VideoTypes> {\n presentationAudiences?: PresentationAudience[];\n commonVideoProps: CommonVideoProps;\n}\n\nexport const VideoWidgetItem = React.memo(function(props: VideoWidgetItemProps): JSX.Element {\n const { data: video, context, thumbnailSize, preloadImage } = props;\n\n const getScaleSize = () => {\n if (context?.type === WidgetType.LargeRow)\n return 1.1;\n\n return 1.15;\n };\n\n const [ ref, isHovering ] = useHoverIntent<HTMLDivElement>({\n className: styles.hovering,\n style: {\n transform: `scale(${getScaleSize()})`\n }\n });\n\n React.useEffect(() => {\n props.onHover(isHovering);\n }, [isHovering]);\n\n let width = styles.rowWidth;\n\n if (context.type === WidgetType.LargeRow)\n width = styles.largeRowWidth;\n\n return (\n <div ref={ref} className={`px-1 flex-shrink-0 position-relative ${width} ${styles.transition}`}>\n <VideoThumbnail\n video={props.data}\n type='expandable'\n appLink={props.getAppLink(video)}\n imageOptions={{ size: thumbnailSize }}\n preload={preloadImage}\n hovering={isHovering}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n commonVideoProps={props.commonVideoProps}\n />\n </div>\n );\n});\n",":local {\n .banner {\n padding: $spacer;\n background-position: center;\n background-size: 100%;\n border-top-left-radius: $border-radius;\n border-top-right-radius: $border-radius;\n background-color: $gray-200;\n\n &:hover {\n opacity: 0.95;\n }\n }\n .partialBanner {\n height: 3.7rem;\n }\n}","import React from 'react';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { VideoWidgetItem } from 'libs/shared/components/widgets/items/video-widget-item/v1/VideoWidgetItem';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { CuratedDashboardAppLink, Presentation, Series, Video, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './featured-sliding-heading.module.scss';\n\nexport interface FeaturedThumbnailSlidingListWidgetTemplateProps {\n id: string;\n name: string;\n imageCdnUrl: string;\n content: Video[];\n presentation: Presentation;\n metadata: {\n imageId: string,\n appLink: CuratedDashboardAppLink\n };\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink,\n series: (series: Series) => Core.AppLink,\n allTopics: (presentationId?: string) => Core.AppLink,\n latestReleases: () => Core.AppLink\n };\n showHighlight?: boolean;\n analyticsData?: HashObject;\n \n limitTotalItems?: boolean;\n\n commonVideoProps: CommonVideoProps;\n}\n\nexport function FeaturedThumbnailSlidingListWidgetTemplate(\n props: FeaturedThumbnailSlidingListWidgetTemplateProps\n): JSX.Element {\n const widgetAppLink = WidgetHelper.getCustomAppLink(props);\n\n const bannerBackgroundUrl = (props?.imageCdnUrl && props.metadata?.imageId) ? ImageHelper.getUrlById(\n props.imageCdnUrl,\n ImageType.Banners,\n props.metadata.imageId,\n ImageSize.Medium\n ) : '';\n\n return (\n <div>\n <AppLink\n appLink={widgetAppLink}\n style={bannerBackgroundUrl ? { backgroundImage: `url(${bannerBackgroundUrl})` } : {}}\n className={`${styles.banner} mb-2 d-flex justify-content-between no-decoration ${!props.name ? styles.partialBanner : ''}`}\n analyticsData={{\n url: AppLinkHelper.getHref(widgetAppLink)\n }}\n analyticsOptions={{\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.ContentUpdatesBanner\n }}\n >\n <h2 className='h4 text-white mb-0'>\n {props.name}\n </h2>\n </AppLink>\n <FixedWidget\n id={props.id}\n type={WidgetType.Row}\n contents={WidgetContents.Videos}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n collection={props.content}\n childComponent={VideoWidgetItem}\n extraChildComponentProps={{\n commonVideoProps: props.commonVideoProps\n }}\n hideBleedingContent={props.showHighlight}\n analyticsData={props.analyticsData}\n limitTotalItems={props.limitTotalItems}\n prefetched\n hideName\n />\n </div>\n );\n}\n","import React from 'react';\n\nimport { PartialFixedWidget } from 'libs/shared/components/widgets/fixed-widget';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nimport styles from '../featured-sliding-heading.module.scss';\n\nexport function PartialFeaturedThumbnailSlidingListWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n return (\n <div>\n <div className={`banner rounded-3 position-relative partial-loading-background ${styles.banner} ${styles.partialBanner} mb-1 `}></div>\n <PartialFixedWidget\n name={props.name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n hideDescription\n hideHeading\n />\n </div>\n );\n}\n","export enum FeedbackOption {\n SUGGEST_IMPROVEMENT = 'suggestImprovement',\n REPORT_BUG = 'reportBug',\n REQUEST_VIDEO = 'requestVideo',\n REQUEST_LIVESTREAM = 'requestLivestream',\n GIVE_PRAISE = 'givePraise',\n RAISE_ISSUE = 'raiseIssue',\n OTHER = 'other'\n}\n","import { FeedbackOption } from 'libs/shared/views/feedback/enums/FeedbackOption';\n\ninterface FeedbackWidgetContent {\n text: string;\n ctaText: string;\n}\n\n/**\n * Only REQUEST_VIDEO is wired up on the widget for now.\n * Uncomment an option below once its copy is confirmed and the widget should support it.\n */\nexport const FEEDBACK_WIDGET_CONTENT: Partial<Record<FeedbackOption, FeedbackWidgetContent>> = {\n [FeedbackOption.REQUEST_VIDEO]: {\n text: 'Did you find what you were looking for?',\n ctaText: 'Request a video'\n }\n\n // [FeedbackOption.REQUEST_LIVESTREAM]: {\n // text: '',\n // ctaText: ''\n // },\n // [FeedbackOption.SUGGEST_IMPROVEMENT]: {\n // text: '',\n // ctaText: ''\n // },\n // [FeedbackOption.REPORT_BUG]: {\n // text: '',\n // ctaText: ''\n // },\n // [FeedbackOption.GIVE_PRAISE]: {\n // text: '',\n // ctaText: ''\n // },\n // [FeedbackOption.RAISE_ISSUE]: {\n // text: '',\n // ctaText: ''\n // },\n // [FeedbackOption.OTHER]: {\n // text: '',\n // ctaText: ''\n // }\n};\n",":local {\n .icon {\n height: 2rem;\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { FeedbackOption } from 'libs/shared/views/feedback/enums/FeedbackOption';\n\nimport { FEEDBACK_WIDGET_CONTENT } from './FeedbackWidgetContent';\n\nimport styles from './feedback-widget-template.module.scss';\n\nexport interface FeedbackWidgetTemplateProps {\n name?: string;\n content: HashObject[]; // We need to have content on every widget template\n metadata?: {\n feedbackType?: FeedbackOption\n };\n appLinks?: {\n giveFeedback?: (option: FeedbackOption) => Core.AppLink\n };\n imageUrls: {\n telescope: string\n };\n}\n\nexport function FeedbackWidgetTemplate(props: FeedbackWidgetTemplateProps): JSX.Element {\n const feedbackType = props.metadata?.feedbackType ?? FeedbackOption.REQUEST_VIDEO;\n const feedbackContent = FEEDBACK_WIDGET_CONTENT[feedbackType];\n\n return (\n <div className='d-flex align-items-center justify-content-center flex-wrap gap-3 p-3'>\n <div className='d-flex align-items-center gap-2'>\n <img src={props.imageUrls?.telescope} className={`img-fluid ${styles.icon}`} />\n <span>{props.name || feedbackContent?.text}</span>\n </div>\n\n <AppLink\n appLink={props.appLinks?.giveFeedback?.(feedbackType)}\n className='btn btn-outline-dark'\n >\n {feedbackContent?.ctaText}\n </AppLink>\n </div>\n );\n}\n","import React from 'react';\n\nexport function PartialFeedbackWidgetTemplate(): JSX.Element {\n return (\n <div className='d-flex align-items-center justify-content-between flex-wrap gap-3 p-3 bg-light rounded-3'>\n <div className='partial-loading-background' style={{ width: '18rem', height: '1.5rem', maxWidth: '60%' }} />\n <div className='partial-loading-background' style={{ width: '9rem', height: '2.5rem', borderRadius: '0.375rem' }} />\n </div>\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .rowWidth {\n width: 20%;\n }\n\n @include media('<=xl') {\n .rowWidth {\n width: 25%;\n }\n }\n\n @include media('<=md') {\n .rowWidth {\n width: 33.33%;\n }\n }\n}","import React from 'react';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { SearchSvg } from 'libs/shared/images/svg/actions/SearchSvg';\nimport { Rating } from 'libs/shared/interfaces';\nimport { VideoDetailsHelper } from 'libs/shared/utils/VideoDetailsHelper';\n\nimport styles from './rating-widget-item.module.scss';\n\nexport interface RatingWidgetItemProps extends FixedWidgetItemProps<Rating> {\n ratingsLength: number;\n}\n\nexport function RatingWidgetItem(props: RatingWidgetItemProps): JSX.Element {\n function getRatingClasses(): string {\n if (props.ratingsLength > 4)\n return styles.rowWidth;\n\n if (props.ratingsLength === 4)\n return 'col-4 col-md-3';\n\n return 'col';\n }\n \n return (\n <AppLink\n appLink={props.getAppLink(props.data)}\n className={`${getRatingClasses()} position-relative flex-shrink-0 px-1 mt-1 text-decoration-none`}\n analyticsData={{\n ...props.analyticsData,\n code: props.data.code,\n id: props.data.id\n }}\n analyticsOptions={{\n ...props.analyticsOptions,\n entity: EntityType.Rating,\n actionType: UserAction.Click,\n location: LocationContext.FilterSlidingPillListSmallWidget\n }}\n >\n <div className={`${VideoDetailsHelper.mapRatingToClass(props.data.value)} py-3 rounded-3`}>\n <div className='d-flex justify-content-center align-items-center text-white text-shadow'>\n <SvgContainer svg={SearchSvg} size={SvgContainerSize.Medium} />\n <h4 className='mb-0'>{props.data.code}</h4>\n </div>\n </div>\n </AppLink>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { RatingWidgetItem } from 'libs/shared/components/widgets/items/rating-widget-item/RatingWidgetItem';\nimport { PresentationLearningLevel } from 'libs/shared/enums/PresentationLearningLevel';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Presentation, Rating, WidgetType } from 'libs/shared/interfaces';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nfunction getMaxRatingValue(presentation: Presentation): number {\n const learningLevel = TopicsHelper.getMappedPresentationLevel(presentation.learningLevel);\n \n switch (learningLevel) {\n /**\n * Primary should only show up to PG\n */\n case PresentationLearningLevel.Level_1:\n return 64;\n\n /**\n * Older levels should filter out high ratings such as R18+\n */\n default:\n return 128;\n }\n}\n\nexport interface FilterSlidingPillListSmallWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n presentation: Presentation;\n content: Rating[];\n appLinks: {\n rating: (rating: Rating, ratings: Rating[]) => Core.AppLink\n };\n analyticsData?: HashObject;\n \n}\n\nexport function FilterSlidingPillListSmallWidgetTemplate(\n props: FilterSlidingPillListSmallWidgetTemplateProps\n): JSX.Element {\n const maxRating = getMaxRatingValue(props.presentation);\n const ratings = props.content.filter(rating => rating.code && rating.value < maxRating && rating.code !== 'E');\n \n return (\n <>\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Ratings}\n getChildAppLink={rating => props.appLinks?.rating?.(rating, ratings)}\n collection={ratings}\n childComponent={RatingWidgetItem}\n analyticsData={props.analyticsData}\n extraChildComponentProps={{ ratingsLength: ratings.length }}\n prefetched\n />\n </>\n );\n}\n","import React from 'react';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nexport function PartialFilterSlidingPillListSmall(props: PartialWidgetTemplateProps): JSX.Element {\n const breakpoints = useBreakpoints();\n\n function getItemCount(): number {\n if (breakpoints.xs || breakpoints.sm)\n return 3;\n\n if (breakpoints.md || breakpoints.lg)\n return 4;\n\n return 5;\n }\n\n return (\n <>\n <PartialWidgetHeader\n name={props.name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n hideDescription\n />\n <div className='row mx-n1'>\n {[...Array(getItemCount())].map((_, index) => (\n <div key={index} className='col px-1'>\n <div className='d-inline-block w-100 partial-loading-background rounded-3 pb-5' />\n </div>\n ))}\n </div>\n </>\n );\n}\n","import React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\nexport interface HeadingWidgetTemplateProps {\n name: string;\n description: string;\n content: HashObject[]; // We need to have content on every widget template\n}\n\nexport function HeadingWidgetTemplate(props: HeadingWidgetTemplateProps): JSX.Element {\n return (\n <div className='curated-widget-header'>\n <h2 className='curated-widget-heading'>{props.name}</h2>\n {!!props.description && (\n <p className='description curated-widget-description'>{props.description}</p>\n )}\n </div>\n );\n}\n","import React from 'react';\n\nexport function PartialHeadingWidgetTemplate(): JSX.Element {\n return (\n <div className='curated-widget-header'>\n <div className='partial-loading-background curated-widget-heading' style={{ height: '2.099625rem', width: '16.5rem', maxWidth: '80%' }}>\n &nbsp;\n </div>\n <div className='partial-loading-background description curated-widget-description' style={{ width: '21rem', height: '1.3125rem', maxWidth: '90%' }}>\n &nbsp;\n </div>\n </div>\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .banner {\n padding-bottom: $cv-banner-padding-bottom;\n }\n\n .bannerContent {\n position: absolute;\n top: map-get($spacers, 3);\n left: map-get($spacers, 3);\n max-width: 18rem;\n }\n\n .cta {\n position: absolute;\n bottom: map-get($spacers, 3);\n left: map-get($spacers, 3);\n max-width: 18rem;\n }\n\n @include media('<=lg') {\n .bannerContent {\n max-width: 16rem;\n }\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Classification, WidgetCta } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './hero-banner.module.scss';\n\nexport interface HeroBannerWidgetTemplateProps {\n name: string;\n content: Classification[];\n analyticsData?: HashObject;\n\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink\n };\n\n metadata: {\n cta: WidgetCta\n };\n}\n\nexport function HeroBannerWidgetTemplate(props: HeroBannerWidgetTemplateProps): JSX.Element {\n const breakpoints = useBreakpoints();\n\n function getBannerUrl(): string {\n const entity = ArrayHelper.first(props.content);\n\n return ImageHelper.createBannerUrl(entity.banner, {\n fallbackBaseUrl: '',\n fallbackCategoryName: entity.name,\n type: ImageType.Banners\n }, { size: ImageSize.Large });\n }\n\n function getAppLink(): Core.AppLink {\n const entity = ArrayHelper.first(props.content);\n return props.appLinks?.classification?.(entity);\n }\n\n function getHeadingClass(): string {\n let className = 'text-white clamp-2';\n\n if (breakpoints.xs || breakpoints.sm)\n className += ' h4';\n else if (breakpoints.md)\n className += ' h3';\n else\n className += ' h2';\n\n className += ' text-white';\n\n return className;\n }\n\n const analyticsOptions = {\n location: LocationContext.Classification,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Banner\n };\n\n return (\n <AppLink\n appLink={getAppLink()}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <div className={`banner rounded-3 position-relative ${styles.banner}`} style={{ backgroundImage: `url('${getBannerUrl()}')` }}>\n {props.name &&\n <div className={styles.bannerContent}>\n <p className={getHeadingClass()}>\n {props.name}\n </p>\n </div>\n }\n\n {!!props.metadata?.cta?.text && (\n <div className={styles.cta}>\n <div className='btn btn-outline-dark text-nowrap'>\n {props.metadata?.cta?.text}\n </div>\n </div>\n )}\n </div>\n </AppLink>\n );\n}\n","import React from 'react';\n\nimport styles from '../hero-banner.module.scss';\n\nexport function PartialHeroBannerWidgetTemplate(): JSX.Element {\n return (\n <div className={`banner rounded-3 position-relative ${styles.banner}`}>\n <div className={`${styles.bannerContent}`} />\n </div>\n );\n}\n","import React from 'react';\n\nexport function GridSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M5.5 5a.5.5 0 0 0-.5.5V10a.5.5 0 0 0 .5.5H10a.5.5 0 0 0 .5-.5V5.5A.5.5 0 0 0 10 5zM4 5.5A1.5 1.5 0 0 1 5.5 4H10a1.5 1.5 0 0 1 1.5 1.5V10a1.5 1.5 0 0 1-1.5 1.5H5.5A1.5 1.5 0 0 1 4 10zM14 5a.5.5 0 0 0-.5.5V10a.5.5 0 0 0 .5.5h4.5a.5.5 0 0 0 .5-.5V5.5a.5.5 0 0 0-.5-.5zm-1.5.5A1.5 1.5 0 0 1 14 4h4.5A1.5 1.5 0 0 1 20 5.5V10a1.5 1.5 0 0 1-1.5 1.5H14a1.5 1.5 0 0 1-1.5-1.5zM4 14a1.5 1.5 0 0 1 1.5-1.5H10a1.5 1.5 0 0 1 1.5 1.5v4.5A1.5 1.5 0 0 1 10 20H5.5A1.5 1.5 0 0 1 4 18.5zm1.5-.5a.5.5 0 0 0-.5.5v4.5a.5.5 0 0 0 .5.5H10a.5.5 0 0 0 .5-.5V14a.5.5 0 0 0-.5-.5zm7 .5a1.5 1.5 0 0 1 1.5-1.5h4.5A1.5 1.5 0 0 1 20 14v4.5a1.5 1.5 0 0 1-1.5 1.5H14a1.5 1.5 0 0 1-1.5-1.5zm1.5-.5a.5.5 0 0 0-.5.5v4.5a.5.5 0 0 0 .5.5h4.5a.5.5 0 0 0 .5-.5V14a.5.5 0 0 0-.5-.5z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function RectanglesSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M4 6.4C4 5.627 4.632 5 5.412 5h13.176C19.368 5 20 5.627 20 6.4v3.733c0 .774-.632 1.4-1.412 1.4H5.412c-.78 0-1.412-.626-1.412-1.4zm1.412-.467c-.26 0-.47.21-.47.467v3.733c0 .258.21.467.47.467h13.176c.26 0 .47-.209.47-.467V6.4a.47.47 0 0 0-.47-.467zM4 13.867c0-.774.632-1.4 1.412-1.4h13.176c.78 0 1.412.627 1.412 1.4V17.6c0 .773-.632 1.4-1.412 1.4H5.412C4.632 19 4 18.373 4 17.6zm1.412-.467c-.26 0-.47.209-.47.467V17.6c0 .258.21.467.47.467h13.176c.26 0 .47-.21.47-.467v-3.733a.47.47 0 0 0-.47-.467z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function SparkleSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n fillRule='evenodd'\n d='M16.465 11.636a.469.469 0 0 1-.897-.003 5.11 5.11 0 0 0-3.204-3.202.469.469 0 0 1 .002-.897 5.11 5.11 0 0 0 3.203-3.203.469.469 0 0 1 .897.002 5.11 5.11 0 0 0 3.203 3.202.469.469 0 0 1-.002.897 5.11 5.11 0 0 0-3.202 3.204m-1.46-4.664a6 6 0 0 1-1.343 1.011c.492.273.946.614 1.344 1.011.397.398.738.852 1.01 1.344a6 6 0 0 1 1.012-1.344 6 6 0 0 1 1.344-1.01 6 6 0 0 1-1.344-1.012 6 6 0 0 1-1.011-1.344 6 6 0 0 1-1.011 1.344m-2.104 7.345.754.25a.469.469 0 0 1 0 .89l-.754.251a5.11 5.11 0 0 0-3.218 3.218l-.25.754a.469.469 0 0 1-.89 0l-.251-.754a5.11 5.11 0 0 0-3.218-3.218l-.754-.25a.469.469 0 0 1 0-.89l.754-.251a5.11 5.11 0 0 0 3.218-3.218l.25-.754a.469.469 0 0 1 .89 0l.251.754a5.11 5.11 0 0 0 3.218 3.218m-3.913 3.81a6.1 6.1 0 0 1 1.261-1.852 6.1 6.1 0 0 1 1.852-1.262 6.1 6.1 0 0 1-1.852-1.262 6.1 6.1 0 0 1-1.262-1.852 6.1 6.1 0 0 1-1.261 1.852 6.1 6.1 0 0 1-1.852 1.261c.688.301 1.32.732 1.852 1.262a6.1 6.1 0 0 1 1.262 1.852M4.33 6.924a2.72 2.72 0 0 1 1.698 1.697.469.469 0 0 0 .897.002 2.72 2.72 0 0 1 1.697-1.698.469.469 0 0 0 .002-.897 2.72 2.72 0 0 1-1.698-1.697.469.469 0 0 0-.897-.002 2.72 2.72 0 0 1-1.697 1.698.469.469 0 0 0-.002.897m2.147-1.412c.258.378.586.706.964.964a3.7 3.7 0 0 0-.964.964 3.7 3.7 0 0 0-.964-.964 3.7 3.7 0 0 0 .964-.964m11.495 9.865a2.72 2.72 0 0 0 1.698 1.697.47.47 0 0 1-.002.897 2.72 2.72 0 0 0-1.697 1.698.469.469 0 0 1-.897-.002 2.72 2.72 0 0 0-1.698-1.697.469.469 0 0 1 .002-.897 2.72 2.72 0 0 0 1.697-1.698.47.47 0 0 1 .897.002m-1.413 2.145c.378.258.706.586.964.964.258-.378.586-.706.964-.964a3.7 3.7 0 0 1-.964-.964 3.7 3.7 0 0 1-.964.964'\n clipRule='evenodd'\n />\n </svg>\n );\n}\n","import { NewWindowSvg } from '../images/svg/actions/NewWindowSvg';\nimport { GridSvg } from '../images/svg/objects/GridSvg';\nimport { RectanglesSvg } from '../images/svg/objects/RectanglesSvg';\nimport { SparkleSvg } from '../images/svg/objects/SparkleSvg';\n\nexport enum HeadingSize {\n H1 = 'h1',\n H2 = 'h2',\n H3 = 'h3',\n H4 = 'h4',\n H5 = 'h5',\n H6 = 'h6'\n}\n\nexport enum HeadingColor {\n Dark = 'dark',\n White = 'white'\n}\n\nexport enum ButtonIcon {\n NewWindow = 'new-window',\n TopicDirectory = 'topic-directory',\n TopicNewReleases = 'topic-new-releases',\n CuratedTopic = 'curated-topic'\n}\n\nexport const WIDGET_THEME = {\n HEADING: {\n SIZES: [\n { value: HeadingSize.H1, name: 'Heading 1' },\n { value: HeadingSize.H2, name: 'Heading 2' },\n { value: HeadingSize.H3, name: 'Heading 3' },\n { value: HeadingSize.H4, name: 'Heading 4' },\n { value: HeadingSize.H5, name: 'Heading 5' },\n { value: HeadingSize.H6, name: 'Heading 6' }\n ],\n COLOR: [\n { value: HeadingColor.Dark, name: 'Dark' },\n { value: HeadingColor.White, name: 'White' }\n ]\n },\n BUTTON: {\n ICONS: [\n { value: ButtonIcon.NewWindow, name: 'New Window' }\n ]\n }\n};\n\nexport const BUTTON_ICON_MAP: Record<ButtonIcon, any> = {\n [ButtonIcon.NewWindow]: NewWindowSvg,\n [ButtonIcon.TopicDirectory]: GridSvg,\n [ButtonIcon.TopicNewReleases]: SparkleSvg,\n [ButtonIcon.CuratedTopic]: RectanglesSvg\n};\n\nexport const BOOTSTRAP_CLASS_MAP = {\n [HeadingSize.H1]: 'h1',\n [HeadingSize.H2]: 'h2',\n [HeadingSize.H3]: 'h3',\n [HeadingSize.H4]: 'h4',\n [HeadingSize.H5]: 'h5',\n [HeadingSize.H6]: 'h6',\n [HeadingColor.Dark]: 'text-dark',\n [HeadingColor.White]: 'text-white'\n};\n","@import '~styles/utils/include-media';\n:local {\n .cta {\n position: absolute;\n bottom: map-get($spacers, 3);\n left: map-get($spacers, 3);\n }\n\n .banner {\n height: 5rem;\n padding-bottom: 0;\n overflow: hidden;\n position: relative;\n }\n\n .bannerImage {\n height: 100%;\n position: absolute;\n top: 50%;\n width: 100%;\n transform: translateY(-50%);\n background-repeat: no-repeat;\n\n background-position: center;\n background-size: cover;\n\n // Blurb images are right aligned\n &.blurb {\n // Normal banner height\n height: 13.875rem;\n right: 0;\n background-size: auto 100%;\n background-position: right;\n }\n\n // Presentations images are right aligned\n &.presentations {\n // Normal banner height\n height: 13.875rem;\n right: 0;\n background-size: auto 100%;\n background-position: right;\n\n @include media('<=lg') {\n background-position: 75%;\n }\n\n @include media('<=md') {\n background-position: 60%;\n }\n\n @include media('<=sm') {\n background-position: 0%;\n }\n }\n }\n\n .bannerContent {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n max-width: 18rem;\n display: flex;\n align-items: center;\n\n &.blurb {\n max-width: 100%;\n }\n\n &.presentations {\n max-width: 100%;\n }\n }\n\n @include media('<=lg') {\n .bannerContent {\n max-width: 16rem;\n }\n }\n}","import React from 'react';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { BOOTSTRAP_CLASS_MAP, HeadingColor, HeadingSize } from 'libs/shared/constants/WidgetThemingConstants';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { NewWindowSvg } from 'libs/shared/images/svg/actions/NewWindowSvg';\nimport { Classification, WidgetCta } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from '../hero-banner-small.module.scss';\n\nexport interface BlurbHeroBannerSmallWidgetTemplateProps {\n name: string;\n imageCdnUrl: string;\n content: Classification[];\n widgetTypeId: WidgetTypeId;\n metadata: {\n imageId: string,\n theming: {\n headingSize: HeadingSize,\n headingColor: HeadingColor\n },\n cta: WidgetCta\n };\n}\n\nexport function BlurbHeroBannerSmallWidgetTemplate(props: BlurbHeroBannerSmallWidgetTemplateProps): JSX.Element {\n function getBannerUrl(): string {\n return ImageHelper.getUrlById(\n props.imageCdnUrl,\n ImageType.Banners,\n props.metadata.imageId,\n ImageSize.Large\n );\n }\n\n const headingSize = BOOTSTRAP_CLASS_MAP[props.metadata.theming?.headingSize || HeadingSize.H6];\n const headingColor = BOOTSTRAP_CLASS_MAP[props.metadata.theming?.headingColor || HeadingColor.Dark];\n\n return (\n <div className={`banner rounded-3 position-relative ${styles.banner}`}>\n <div className={`${styles.bannerImage} ${styles.blurb} d-flex`} style={{ backgroundImage: `url('${getBannerUrl()}')` }}>\n {props.name &&\n <div className={`${styles.bannerContent} ${props.widgetTypeId === WidgetTypeId.Blurb ? styles.blurb : ''} d-flex justify-content-between w-100 px-3`}>\n <p className={`${headingSize} ${headingColor} mb-0`}>\n {props.name}\n </p>\n {props.metadata.cta?.text && (\n <IconButton svg={NewWindowSvg} className='btn btn-dark text-nowrap' href={props.metadata.cta.href} openInNewTab>\n {props.metadata.cta.text}\n </IconButton>\n )}\n </div>\n }\n </div>\n </div>\n );\n}\n",":local {\n .banner {\n height: 5rem;\n padding-bottom: 0;\n overflow: hidden;\n position: relative;\n }\n\n .bannerImage {\n height: 100%;\n position: absolute;\n top: 50%;\n width: 100%;\n transform: translateY(-50%);\n background-repeat: no-repeat;\n\n background-position: right;\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { BUTTON_ICON_MAP } from 'libs/shared/constants/WidgetThemingConstants';\nimport { WidgetCta } from 'libs/shared/interfaces';\n\nimport styles from './classification-hero-thumbnail-small.module.scss';\n\ninterface HeroBannerButtonProps {\n cta: WidgetCta;\n}\n\nfunction HeroBannerButton(props: HeroBannerButtonProps): JSX.Element {\n if (!props.cta?.text)\n return <div />;\n\n const className = `btn btn-outline-dark text-nowrap me-3`;\n\n if (!props.cta?.icon) {\n return (\n <div className={className}>\n {props.cta.text}\n </div>\n );\n }\n\n return (\n <IconButton\n svg={BUTTON_ICON_MAP[props.cta.icon]}\n className={className}\n openInNewTab\n >\n {props.cta.text}\n </IconButton>\n );\n}\n\nexport interface ClassificationHeroBannerSmallProps {\n appLink: Core.AppLink;\n heading: string;\n cta?: WidgetCta;\n analyticsData: HashObject;\n analyticsOptions: AnalyticsOptions;\n style: React.CSSProperties;\n}\n\nexport function ClassificationHeroBannerSmall(props: ClassificationHeroBannerSmallProps): JSX.Element {\n return (\n <AppLink\n appLink={props.appLink}\n className='text-decoration-none'\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n >\n <div className={`banner rounded-3 position-relative ${styles.banner}`}>\n <div className={`${styles.bannerImage} d-flex justify-content-between align-items-center`} style={props.style}>\n {!!props.heading && (\n <div className='d-flex align-items-center ps-3 h-100'>\n <h2 className='text-white text-shadow h4 clamp-1'>\n {props.heading}\n </h2>\n </div>\n )}\n \n <HeroBannerButton cta={props.cta} />\n </div>\n </div>\n </AppLink>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { ClassificationHeroBannerSmall } from 'libs/shared/components/widgets/curated-widgets/components/classification-hero-banner-small/ClassificationHeroBannerSmall';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { Classification, WidgetCta } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nexport interface ClassificationHeroBannerSmallWidgetTemplateProps {\n name: string;\n content: Classification[];\n analyticsData?: HashObject;\n\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink\n };\n\n metadata: {\n cta: WidgetCta\n };\n}\n\nexport function ClassificationHeroBannerSmallWidgetTemplate(\n props: ClassificationHeroBannerSmallWidgetTemplateProps\n): JSX.Element {\n const classification = ArrayHelper.first(props.content);\n\n function getBannerUrl(): string {\n return ImageHelper.createBannerUrl(classification.banner, {\n fallbackBaseUrl: '',\n fallbackCategoryName: classification.name,\n type: ImageType.Banners\n }, { size: ImageSize.Large });\n }\n\n const analyticsOptions = {\n location: LocationContext.Classification,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Banner\n };\n\n return (\n <ClassificationHeroBannerSmall\n heading={props.name}\n appLink={props.appLinks?.classification?.(classification)}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n style={{\n backgroundImage: `url('${getBannerUrl()}')`,\n backgroundSize: '100%'\n }}\n cta={props.metadata?.cta}\n />\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AnalyticsOptions, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { LocalPermissionName, PermissionName } from 'libs/shared/enums/PermissionName';\nimport { HasLocalPermissionsFunc, HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Presentation } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from '../hero-banner-small.module.scss';\n\nexport interface PresentationsHeroBannerSmallWidgetTemplateProps {\n name: string;\n hasPermissions: HasPermissionsFunc;\n hasLocalPermissions: HasLocalPermissionsFunc;\n content: Presentation[];\n imageCdnUrl: string;\n analyticsData?: HashObject;\n \n metadata: {\n imageId: string\n };\n appLinks: {\n discover: (presentationId?: string) => Core.AppLink\n };\n}\n\nexport function PresentationsHeroBannerSmallWidgetTemplate(\n props: PresentationsHeroBannerSmallWidgetTemplateProps\n): JSX.Element {\n const canView = (\n props.hasPermissions(PermissionName.ManageSubjectPreferences) ||\n props.hasLocalPermissions(LocalPermissionName.ManagePublicPresentation)\n );\n\n function getBannerUrl(): string {\n return ImageHelper.getUrlById(\n props.imageCdnUrl,\n ImageType.Banners,\n props.metadata.imageId,\n ImageSize.Large\n );\n }\n\n function getPresentationLink(presentation: Presentation): JSX.Element {\n const appLinkOptions = {\n middlewareOptions: { presentationSlug: presentation?.vanitySlug }\n };\n\n const analyticsData: HashObject = {\n ...props.analyticsData,\n id: presentation.id,\n presentationName: presentation.name\n };\n\n const analyticsOptions: AnalyticsOptions = {\n entity: EntityType.Presentation,\n actionType: UserAction.Click,\n location: LocationContext.HeroBannerSmallWidget\n };\n\n return (\n <AppLink\n className='info-link d-inline'\n appLink={props.appLinks?.discover?.()}\n appLinkOptions={appLinkOptions}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n {presentation.name}\n </AppLink>\n );\n }\n\n function getPresentations(): JSX.Element {\n if (props.content.length === 1) {\n return getPresentationLink(props.content[0]);\n }\n\n if (props.content.length === 2) {\n return <>{getPresentationLink(props.content[0])} or {getPresentationLink(props.content[1])}</>;\n }\n\n return (\n <>\n {props.content.slice(0, props.content.length - 1).map(p => {\n return <React.Fragment key={p.id}>{getPresentationLink(p)}, </React.Fragment>;\n })}\n or {getPresentationLink(ArrayHelper.last(props.content))}\n </>\n );\n }\n\n const prefix = props.name;\n\n if (!canView)\n return <></>;\n\n return (\n <div className={`banner rounded-3 position-relative ${styles.banner}`}>\n <div className={`${styles.bannerImage} ${styles.presentations}`} style={{ backgroundImage: `url('${getBannerUrl()}')` }}>\n {prefix &&\n <div className={`${styles.bannerContent} ${styles.presentations} px-3`}>\n <p className='h6 mb-0'>\n {prefix} {getPresentations()}.\n </p>\n </div>\n }\n </div>\n </div>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { BlurbHeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/types/BlurbHeroBannerSmallWidgetTemplate';\nimport { ClassificationHeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/types/ClassificationHeroBannerSmallWidgetTemplate';\nimport { PresentationsHeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/types/PresentationsHeroBannerSmallWidgetTemplate';\nimport { HeadingColor, HeadingSize } from 'libs/shared/constants/WidgetThemingConstants';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasLocalPermissionsFunc, HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Classification, Presentation, WidgetCta } from 'libs/shared/interfaces';\n\nexport interface HeroBannerSmallWidgetTemplateProps {\n name: string;\n imageCdnUrl: string;\n widgetTypeId: WidgetTypeId;\n content: Classification[] | Presentation[];\n\n metadata: {\n imageId: string,\n theming: {\n headingSize: HeadingSize,\n headingColor: HeadingColor\n },\n cta: WidgetCta\n };\n\n hasPermissions: HasPermissionsFunc;\n hasLocalPermissions: HasLocalPermissionsFunc;\n\n analyticsData?: HashObject;\n\n appLinks: {\n discover: (presentationId?: string) => Core.AppLink,\n classification: (classification: Classification | null) => Core.AppLink\n };\n}\n\n// TODO: Fix this up, shouldn't have to cast\n// But it makes AllWidgetTemplateProps unknown for some reason\nexport function HeroBannerSmallWidgetTemplate(\n props: HeroBannerSmallWidgetTemplateProps\n): JSX.Element {\n switch (props.widgetTypeId) {\n case WidgetTypeId.Blurb:\n return <BlurbHeroBannerSmallWidgetTemplate {...props} content={props.content as Classification[]} />;\n case WidgetTypeId.Presentations:\n return (\n <PresentationsHeroBannerSmallWidgetTemplate {...props} content={props.content as Presentation[]} />\n );\n default:\n return <ClassificationHeroBannerSmallWidgetTemplate {...props} content={props.content as Classification[]} />;\n }\n}\n","import React from 'react';\n\nimport styles from '../hero-banner-small.module.scss';\n\nexport function PartialHeroBannerSmallWidgetTemplate(): JSX.Element {\n return (\n <div className={`banner rounded-3 position-relative ${styles.banner}`}>\n <div className={`${styles.bannerContent}`} />\n </div>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { ClassificationHeroBannerSmall } from 'libs/shared/components/widgets/curated-widgets/components/classification-hero-banner-small/ClassificationHeroBannerSmall';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Classification, CuratedWidgetCtaAppLink } from 'libs/shared/interfaces';\n\nexport interface HeroBlockColourSmallWidgetTemplateProps {\n name: string;\n content: Classification[];\n metadata: {\n cta: {\n appLink: CuratedWidgetCtaAppLink\n }\n };\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink,\n classificationDirectory: (classification: Classification) => Core.AppLink\n };\n}\n\nexport function HeroBlockColourSmallWidgetTemplate(props: HeroBlockColourSmallWidgetTemplateProps): JSX.Element {\n const classification = ArrayHelper.first(props.content);\n\n const breakpoints = useBreakpoints();\n\n function getCustomCtaAppLink(): Core.AppLink | null {\n switch (props.metadata?.cta?.appLink) {\n case CuratedWidgetCtaAppLink.TopicDirectory:\n return props.appLinks?.classificationDirectory?.(classification);\n case CuratedWidgetCtaAppLink.CuratedTopic:\n return props.appLinks?.classification?.(classification);\n case CuratedWidgetCtaAppLink.TopicNewReleases:\n return props.appLinks?.classification?.(classification);\n }\n\n return null;\n }\n\n const analyticsData = {\n id: classification.id,\n name: classification.name,\n presentationId: classification.presentationId\n };\n\n const analyticsOptions = {\n location: LocationContext.ClassificationListItem,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n return (\n <ClassificationHeroBannerSmall\n heading={props.name}\n appLink={getCustomCtaAppLink()}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n style={{\n backgroundColor: classification.metadata?.backgroundColor,\n backgroundSize: '100%'\n }}\n cta={breakpoints.xs ? null : props.metadata?.cta}\n />\n );\n}\n","import React from 'react';\n\nimport { PartialHeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/partial-loading/PartialHeroBannerSmallWidgetTemplate';\n\nexport function PartialHeroBlockColourSmallWidgetTemplate(): JSX.Element {\n return <PartialHeroBannerSmallWidgetTemplate />;\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { ClassificationHeroBannerSmall } from 'libs/shared/components/widgets/curated-widgets/components/classification-hero-banner-small/ClassificationHeroBannerSmall';\nimport { HeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/HeroBannerSmallWidgetTemplate';\nimport { HeadingColor, HeadingSize } from 'libs/shared/constants/WidgetThemingConstants';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasLocalPermissionsFunc, HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Classification, Presentation, WidgetCta } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nconst namespace = 'shared.heroThumbnailSmall';\n\nexport interface HeroThumbnailSmallWidgetTemplateProps {\n name: string;\n widgetTypeId: WidgetTypeId;\n content: Classification[] | Presentation[];\n analyticsData?: HashObject;\n \n imageCdnUrl: string;\n hasPermissions: HasPermissionsFunc;\n hasLocalPermissions: HasLocalPermissionsFunc;\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink,\n discover: (presentationId?: string) => Core.AppLink\n };\n metadata: {\n imageId: string,\n theming: {\n headingSize: HeadingSize,\n headingColor: HeadingColor\n },\n cta: WidgetCta\n };\n}\n\nexport function HeroThumbnailSmallWidgetTemplate(props: HeroThumbnailSmallWidgetTemplateProps): JSX.Element {\n const classification = props.content?.[0];\n\n const thumbnailUrl = 'thumbnail' in classification &&\n ImageHelper.createUrl(classification.thumbnail?.url, { size: ImageSize.Medium });\n const backgroundColor = 'metadata' in classification && classification.metadata?.backgroundColor;\n\n const style: React.CSSProperties = {\n backgroundColor,\n backgroundSize: '50%'\n };\n\n if (thumbnailUrl)\n style.backgroundImage = `url('${thumbnailUrl}')`;\n\n const analyticsData = {\n ...props.analyticsData,\n id: classification.id,\n name: classification.name,\n presentationId: 'presentationId' in classification && classification.presentationId\n };\n\n const analyticsOptions = {\n location: LocationContext.ClassificationListItem,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n if (!thumbnailUrl || !backgroundColor)\n return <HeroBannerSmallWidgetTemplate {...props} />;\n\n return (\n <ClassificationHeroBannerSmall\n heading={props.name}\n appLink={props.appLinks?.classification?.(classification)}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n style={style}\n cta={{\n text: LanguageService.getPhrase(namespace, 'buttonLabel'),\n ...(props.metadata?.cta ?? {})\n }}\n />\n );\n}\n","import React from 'react';\n\nimport { PartialHeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/partial-loading/PartialHeroBannerSmallWidgetTemplate';\n\nexport function PartialHeroThumbnailSmallWidgetTemplate(): JSX.Element {\n return <PartialHeroBannerSmallWidgetTemplate />;\n}\n","import React from 'react';\n\nimport { PartialFixedWidget, PartialFixedWidgetItemProps } from 'libs/shared/components/widgets/fixed-widget';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nfunction PartialWidgetItem(props: PartialFixedWidgetItemProps): JSX.Element {\n return (\n <div className={`col-${props.colSize} px-1`}>\n <div className='d-inline-block w-100 partial-loading-background rounded-3' style={{ paddingBottom: '56.25%' }} />\n <div className='mt-2'>\n <div style={{ height: '1.4rem' }}>\n <div className='partial-loading-background' style={{ height: '1.1rem', width: '70%' }} />\n </div>\n <div className='partial-loading-background' style={{ height: '1.33875rem', width: '80%' }}></div>\n </div>\n </div>\n );\n}\n\nexport function PartialPopoutThumbnailSlidingListLargeWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n return (\n <PartialFixedWidget\n size='lg'\n childComponent={PartialWidgetItem}\n name={props.name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n />\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { WidgetTypeIdConfig } from 'libs/shared/constants/WidgetTypeIdConfig';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { PresentationAudience, Video, VideoWidgetTemplateContent, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport { PopoutVideoWidgetItem } from '../../../items/popout-video-widget-item/PopoutVideoWidgetItem';\n\nconst namespace = 'widgets.popoutThumbnailSlidingListLarge';\n\nexport interface PopoutThumbnailSlidingListLargeWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n imageCdnUrl: string;\n content: VideoWidgetTemplateContent;\n hasPermissions: HasPermissionsFunc;\n isPreviewing: boolean;\n widgetTypeId: WidgetTypeId;\n metadata: {\n hideWidgetHeading: boolean,\n hideWidgetDescription: boolean,\n hideObjectTitle: boolean,\n hideObjectSeries: boolean\n };\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink,\n widgetVideoList: (widgetId: string, widgetName: string) => Core.AppLink\n };\n audiences: PresentationAudience[];\n showHighlight?: boolean;\n analyticsData?: HashObject;\n settings: {\n hasTopicDirectories: boolean\n };\n onClickRemoveItem: (videoId: string, videoName: string, widgetId: string, widgetTypeId: WidgetTypeId) => void;\n commonVideoProps: CommonVideoProps;\n isUpselling?: boolean;\n}\n\nexport function PopoutThumbnailSlidingListLargeWidgetTemplate(\n props: PopoutThumbnailSlidingListLargeWidgetTemplateProps\n): JSX.Element {\n const widgetConfig = WidgetTypeIdConfig[props.widgetTypeId];\n const videos = WidgetHelper.getVideoContent(props.content);\n\n function onClickRemoveItem(videoId: string, videoName: string): void {\n props.onClickRemoveItem?.(videoId, videoName, props.id, props.widgetTypeId);\n }\n\n return (\n <FixedWidget\n id={props.id}\n name={!props.metadata?.hideWidgetHeading && props.name}\n description={!props.metadata?.hideWidgetDescription && props.description}\n type={WidgetType.LargeRow}\n contents={WidgetContents.Videos}\n collection={videos}\n childComponent={PopoutVideoWidgetItem}\n extraChildComponentProps={{\n presentationAudiences: props.audiences,\n hideTitle: props.metadata?.hideObjectTitle,\n hideSeries: props.metadata?.hideObjectSeries,\n showVideoGuidance: VideoHelper.showVideoGuidance(props.hasPermissions),\n showNewVideoIndicator: props.settings?.hasTopicDirectories,\n onClickRemoveItem: WidgetHelper.showRemoveButton(props.widgetTypeId) && onClickRemoveItem,\n removeButtonTooltip: WidgetHelper.showRemoveButton(props.widgetTypeId) ?\n LanguageService.getPhrase(namespace, 'removeFromWatchHistory') :\n '',\n commonVideoProps: props.commonVideoProps\n }}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n appLink={\n widgetConfig.getCollectionAppLink?.(props.appLinks, props.content) ??\n props.appLinks?.widgetVideoList?.(props.id, props.name)\n }\n isPreviewing={props.isPreviewing}\n widgetTypeId={props.widgetTypeId}\n isUpselling={props.isUpselling}\n />\n );\n}\n","import React from 'react';\n\nimport { PartialFixedWidget, PartialFixedWidgetItemProps } from 'libs/shared/components/widgets/fixed-widget';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nfunction PartialWidgetItem(props: PartialFixedWidgetItemProps): JSX.Element {\n return (\n <div className={`col-${props.colSize} px-1`}>\n <div className='d-inline-block w-100 partial-loading-background rounded-3' style={{ paddingBottom: '56.25%' }} />\n <div className='mt-2'>\n <div style={{ height: '1.4rem' }}>\n <div className='partial-loading-background' style={{ height: '1.1rem', width: '70%' }} />\n </div>\n <div className='partial-loading-background' style={{ height: '1.33875rem', width: '80%' }}></div>\n </div>\n </div>\n );\n}\n\nexport function PartialPopoutThumbnailSlidingListSmallWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n return (\n <PartialFixedWidget\n size='sm'\n childComponent={PartialWidgetItem}\n name={props.name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n hideDescription={props.hideDescription}\n hideHeading={props.hideHeading}\n />\n );\n}\n",":local {\n .isNew {\n color: $ultramarine;\n background-color: lighten($ultramarine, 35%);\n }\n\n .newVideos {\n color: $green;\n background-color: lighten($green, 40%);\n }\n\n .badge {\n font-size: 0.6875rem;\n }\n\n .icon {\n margin-right: 0.1rem;\n }\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { TimerSvg } from 'libs/shared/images/svg/status/TimerSvg';\n\nimport styles from './subject-stats-badge.module.scss';\n\nexport type ClassificationBadgeType = 'coming-soon' | 'new-topic' | 'new-videos';\n\nconst namespace = 'shared.subjectStatsBadge';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SubjectStatsBadgeProps {\n badgeType: ClassificationBadgeType;\n newVideoCount?: number;\n}\n\nexport function SubjectStatsBadge(props: SubjectStatsBadgeProps): JSX.Element {\n function getBadgeClass(): string {\n const baseClass = `fw-semibold d-inline-block rounded-pill px-2 ${styles.badge}`;\n\n switch (props.badgeType) {\n case 'coming-soon':\n return baseClass + ' bg-light ps-1 d-inline-flex align-items-center';\n case 'new-topic':\n return baseClass + ` ${styles.isNew}`;\n case 'new-videos':\n return baseClass + ` ${styles.newVideos}`;\n default:\n return '';\n }\n }\n\n function getBadgeText(): string {\n switch (props.badgeType) {\n case 'coming-soon':\n return getPhrase('comingSoon');\n case 'new-topic':\n return getPhrase('new');\n case 'new-videos':\n return getPhrase('newVideos', { smartCount: props.newVideoCount });\n default:\n return '';\n }\n }\n\n return (\n <div className={getBadgeClass()}>\n {props.badgeType === 'coming-soon' && (\n <SvgContainer\n svg={TimerSvg}\n className={`svg-container ${styles.icon}`}\n size={SvgContainerSize.ExtraSmall}\n />\n )}\n\n {getBadgeText()}\n </div>\n );\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { PopoutVideoWidgetItem } from 'libs/shared/components/widgets/items/popout-video-widget-item/PopoutVideoWidgetItem';\nimport { WidgetTypeIdConfig } from 'libs/shared/constants/WidgetTypeIdConfig';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Classification, PresentationAudience, Video, VideoWidgetTemplateContent, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport { SubjectStatsBadge } from '../../../items/subject-stats-widget-item/subject-stats-badge/SubjectStatsBadge';\n\nconst namespace = 'widgets.popoutThumbnailSlidingListSmall';\n\nfunction VideoCountBadge(props: PopoutThumbnailSlidingListSmallWidgetTemplateProps): JSX.Element {\n if (\n props.isTertiaryCustomerWithoutExchange ||\n props.widgetTypeId !== WidgetTypeId.ClassificationLatestReleasedVideosV2 ||\n !props.classification\n ) {\n return <></>;\n }\n\n const { childDashboardNewVideoCount } = TopicsHelper.getCounts(props.classification);\n\n if (!childDashboardNewVideoCount)\n return <></>;\n\n return (\n <div className='ms-2'>\n <SubjectStatsBadge badgeType='new-videos' newVideoCount={childDashboardNewVideoCount} />\n </div>\n );\n}\n\nexport interface PopoutThumbnailSlidingListSmallWidgetTemplateProps {\n id: string;\n name: string;\n widgetTypeId: WidgetTypeId;\n description: string;\n content: VideoWidgetTemplateContent;\n appLinks: {\n widgetVideoList: (widgetId: string, widgetName: string) => Core.AppLink,\n watchHistory: () => Core.AppLink,\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink\n };\n metadata: {\n hideWidgetHeading: boolean,\n hideWidgetDescription: boolean,\n hideObjectTitle: boolean,\n hideObjectSeries: boolean\n };\n audiences: PresentationAudience[];\n hasPermissions: HasPermissionsFunc;\n preventPopout?: boolean;\n classification: Classification;\n showHighlight?: boolean;\n analyticsData?: HashObject;\n isTertiaryCustomerWithoutExchange?: boolean;\n onClickRemoveItem: (videoId: string, videoName: string, widgetId: string, widgetTypeId: WidgetTypeId) => void;\n \n isPreviewing: boolean;\n\n settings: {\n hasTopicDirectories: boolean\n };\n\n commonVideoProps: CommonVideoProps;\n isUpselling?: boolean;\n}\n\nexport function PopoutThumbnailSlidingListSmallWidgetTemplate(\n props: PopoutThumbnailSlidingListSmallWidgetTemplateProps\n): JSX.Element {\n const widgetConfig = WidgetTypeIdConfig[props.widgetTypeId];\n const videos = WidgetHelper.getVideoContent(props.content);\n\n function onClickRemoveItem(videoId: string, videoName: string): void {\n props.onClickRemoveItem?.(videoId, videoName, props.id, props.widgetTypeId);\n }\n\n return (\n <FixedWidget\n id={props.id}\n name={!props.metadata?.hideWidgetHeading && props.name}\n description={!props.metadata?.hideWidgetDescription && props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Videos}\n collection={videos}\n childComponent={PopoutVideoWidgetItem}\n extraChildComponentProps={{\n presentationAudiences: props.audiences,\n hideTitle: props.metadata?.hideObjectTitle,\n hideSeries: props.metadata?.hideObjectSeries,\n showVideoGuidance: VideoHelper.showVideoGuidance(props.hasPermissions),\n preventPopout: props.preventPopout,\n showNewVideoIndicator: props.settings?.hasTopicDirectories,\n onClickRemoveItem: WidgetHelper.showRemoveButton(props.widgetTypeId) && onClickRemoveItem,\n removeButtonTooltip: WidgetHelper.showRemoveButton(props.widgetTypeId) ?\n LanguageService.getPhrase(namespace, 'removeFromWatchHistory') :\n '',\n commonVideoProps: props.commonVideoProps\n }}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n appLink={\n widgetConfig.getCollectionAppLink?.(props.appLinks, props.content) ??\n props.appLinks?.widgetVideoList?.(props.id, props.name)\n }\n isPreviewing={props.isPreviewing}\n widgetTypeId={props.widgetTypeId}\n headingBadgeComponent={<VideoCountBadge {...props} />}\n isUpselling={props.isUpselling}\n />\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .largeSeriesItem {\n width: 25%;\n\n @include media('<=md') {\n width: percentage(calc(1 / 3));\n }\n\n @include media('<=sm') {\n width: 50%;\n }\n }\n\n .smallSeriesItem {\n width: percentage(calc(1 / 6));\n\n @include media('<=xl') {\n width: percentage(calc(1 / 5));\n }\n\n @include media('<=lg') {\n width: percentage(calc(1 / 4));\n }\n\n @include media('<=md') {\n width: percentage(calc(1 / 3));\n }\n\n @include media('<=sm') {\n width: percentage(calc(1 / 2));\n }\n }\n\n .partialLoading {\n width: 100%;\n padding-bottom: 200%; // 1:2 aspect ratio\n position: relative;\n }\n}","import * as React from 'react';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nimport { PartialWidgetTemplateProps } from '../../curated-widgets/WidgetProps';\n\nimport styles from './series-widget-item.module.scss';\n\nfunction useGetCount(): number {\n const breakpoints = useBreakpoints();\n\n if (breakpoints.xs)\n return 2;\n\n if (breakpoints.sm)\n return 3;\n\n return 4;\n}\n\nexport const PartialSeriesList = (props: PartialWidgetTemplateProps) => {\n const items = useGetCount();\n\n return (\n <>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\n <div className='row mb-n2'>\n {[...Array(items)].map((s, idx) => (\n <div key={idx} className='col-6 col-sm-4 col-md-3 col-lg-3 pb-2'>\n <div className={`${styles.partialLoading} partial-loading-background rounded-3`} />\n </div>\n ))}\n </div>\n </>\n );\n};\n","@import '~styles/utils/mixins';\n@import '~styles/utils/include-media';\n:local {\n .labelContainer {\n z-index: 1;\n bottom: map-get($spacers, 2);\n left: 50%;\n transform: translate(-50%, 0%);\n\n :global(.rating-badge) {\n @include thumbnail-poster-badge;\n }\n }\n\n .labelContainerOverlay {\n :global(.rating-badge) {\n @include thumbnail-poster-badge;\n }\n }\n\n .hoverActive {\n transform: translate3D(0, -1px, 0) scale(1.01);\n transition: all .1s ease;\n\n &:after {\n content: '';\n\n position: absolute;\n top: 0;\n left: -(map-get($spacers, 1));\n right: -(map-get($spacers, 1));\n bottom: 0;\n\n margin: 0 map-get($spacers, 1);\n\n border-radius: $border-radius-lg;\n }\n }\n\n .mask {\n z-index: 2;\n position: absolute;\n bottom: map-get($spacers, 2);\n right: 0;\n left: 0;\n\n max-height: calc(100% - (map-get($spacers, 2) * 2));\n \n @include media('<=lg') {\n padding: map-get($spacers, 3) map-get($spacers, 1);\n }\n\n .largeHoverTitle {\n font-size: $h4-font-size;\n\n @include media('<=lg') {\n font-size: $h5-font-size;\n }\n\n @include media('<=md') {\n font-size: $h6-font-size;\n margin-bottom: map-get($spacers, 1);\n }\n\n @include media('<=sm') {\n font-size: $h5-font-size;\n }\n }\n\n .smallHoverTitle {\n font-size: $h5-font-size;\n\n @include media('<=xl') {\n font-size: $h6-font-size;\n }\n\n @include media('<=lg') {\n font-size: $h6-font-size;\n }\n\n @include media('<=md') {\n @include clamp(5);\n }\n }\n\n .description {\n text-overflow: ellipsis;\n overflow: hidden;\n -webkit-box-orient: vertical;\n display: -webkit-box;\n }\n\n .largeHoverDescription {\n @include clamp(11);\n\n @include media('<=xl') {\n @include clamp(9);\n }\n @include media('<=lg') {\n @include clamp(7);\n }\n @include media(\"<=878px\") {\n @include clamp(4);\n }\n\n &.hasTableOfContents {\n @include clamp(7);\n\n @include media('<=xl') {\n @include clamp(5);\n }\n @include media(\"<=1003px\") {\n @include clamp(4);\n }\n @include media('<=lg') {\n @include clamp(7);\n }\n @include media(\"<=878px\") {\n @include clamp(4);\n }\n }\n }\n\n .smallHoverDescription {\n @include clamp(8);\n\n @include media('<=xl') {\n @include clamp(8);\n font-size: 12px;\n }\n\n @include media('<=md') {\n @include clamp(6);\n }\n @include media('<=sm') {\n @include clamp(9);\n }\n } \n }\n}","import React from 'react';\n\nimport { AudienceLabel } from 'libs/shared/components/audience-label/AudienceLabel';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { useHoverIntent } from 'libs/shared/hooks/UseHover';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { PresentationAudience, Series } from 'libs/shared/interfaces';\nimport { SeriesHelper } from 'libs/shared/utils/SeriesHelper';\n\nimport styles from './series-tall-poster.module.scss';\n\ninterface SeriesTallPosterHoverOverlay {\n series: Series;\n mergedAudience: PresentationAudience;\n isSmall?: boolean;\n hasTableOfContents?: boolean;\n}\n\nfunction SeriesTallPosterHoverOverlay(props: SeriesTallPosterHoverOverlay): JSX.Element {\n return (\n <div className={`py-3 mx-2 px-2 rounded bg-white text-center ${styles.mask} d-flex flex-column align-items-center`}>\n <h3 className={`fw-semibold mb-0 ${styles.hoverTitle} ${props.isSmall ? styles.smallHoverTitle : styles.largeHoverTitle}`}>\n <span className='clamp-3'>\n {props.series.name}\n </span>\n </h3>\n\n {!!props.series.description && (\n <p className={`${props.hasTableOfContents ? styles.hasTableOfContents : ''} ${styles.hoverDescription} ${props.isSmall ? styles.smallHoverDescription : styles.largeHoverDescription} mb-0`}>{props.series.description}</p>\n )}\n <div className={`${styles.labelContainerOverlay}`}>\n {props.mergedAudience ?\n <AudienceLabel audience={props.mergedAudience} border='dark' className='mt-2 w-fit'/> :\n <Badge type={BadgeType.Rating} data={SeriesHelper.getRating(props.series)} className='mt-2' />\n }\n </div>\n </div>\n );\n}\n\ninterface SeriesTallPosterMaskProps {\n series: Series;\n presentationAudiences: PresentationAudience[];\n preloadImage: boolean;\n imageClass?: string;\n isSmall?: boolean;\n hasTableOfContents?: boolean;\n}\n\nexport function SeriesTallPoster(props: SeriesTallPosterMaskProps): JSX.Element {\n const [ hoverRef, isHovering ] = useHoverIntent<HTMLDivElement>({ className: styles.hoverActive });\n \n const audiences = props.series && props.series.subjectPresentationAudiences &&\n props.series.subjectPresentationAudiences.data || [];\n\n const mergedAudience = useMergeAudiences(audiences, props.presentationAudiences);\n const displayAudience = !!(audiences && audiences.length && mergedAudience);\n\n return (\n <div ref={hoverRef}>\n <BaseImage\n data={props.series.tallPoster}\n alt={props.series.name}\n imageType={ImageType.TallPosters}\n preload={props.preloadImage}\n imageOptions={{ size: ImageSize.Large }}\n imageClassName={props.imageClass ? props.imageClass : 'rounded-3'}\n >\n {isHovering && (\n <SeriesTallPosterHoverOverlay\n isSmall={props.isSmall}\n series={props.series}\n mergedAudience={audiences && audiences.length ? mergedAudience : null}\n hasTableOfContents={props.hasTableOfContents}\n />\n )}\n \n <ImageFallback type={ImageFallbackType.Series} />\n <div className={`position-absolute text-white ${styles.labelContainer}`}>\n {displayAudience ?\n <AudienceLabel audience={mergedAudience} className='bg-white text-dark' border='dark' /> :\n <Badge className='text-shadow' type={BadgeType.Rating} data={SeriesHelper.getRating(props.series)} />\n }\n </div>\n </BaseImage>\n </div>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SeriesTallPoster } from 'libs/shared/components/series-tall-poster/SeriesTallPoster';\nimport { PresentationAudience, Series } from 'libs/shared/interfaces';\n\nimport { WidgetHeader } from '../../components/header/WidgetHeader';\n\nexport interface PosterFixedListLargeWidgetTemplateProps {\n name: string;\n description: string;\n content: Series[];\n audiences: PresentationAudience[];\n appLinks: {\n series: (series: Series) => Core.AppLink\n };\n analyticsData: HashObject;\n badgeComponent: JSX.Element;\n seeMoreLink: Core.AppLink;\n}\n\nexport function PosterFixedListLargeWidgetTemplate(\n props: PosterFixedListLargeWidgetTemplateProps\n): JSX.Element {\n return (\n <>\n <WidgetHeader\n name={props.name}\n description={props.description}\n showSeeMoreLink={!!props.seeMoreLink}\n appLink={props.seeMoreLink}\n badgeComponent={props.badgeComponent}\n />\n <ul className='list-unstyled mx-n1 mb-n2 row'>\n {props.content.map(s => {\n return (\n <li key={s.id} className='px-1 col-lg-3 col-md-4 col-sm-6 col-xs-12'>\n <AppLink\n appLink={props.appLinks.series(s)}\n className='d-block mb-2'\n analyticsData={{\n ...props.analyticsData,\n id: s.id,\n name: s.name\n }}\n analyticsOptions={{\n entity: EntityType.Series,\n actionType: UserAction.Click,\n descriptor: ClickDescriptor.TallPoster,\n location: LocationContext.PosterFixedListLargeWidget\n }}\n >\n <SeriesTallPoster\n series={s}\n presentationAudiences={props.audiences}\n preloadImage={false}\n />\n </AppLink>\n </li>\n );\n })}\n </ul>\n </>\n );\n}\n","import * as React from 'react';\n\nimport { ClickDescriptor, EntityType, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SeriesTallPoster } from 'libs/shared/components/series-tall-poster/SeriesTallPoster';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { PresentationAudience, Series } from 'libs/shared/interfaces';\n\nimport styles from './series-widget-item.module.scss';\n\nexport interface SeriesWidgetItemProps extends FixedWidgetItemProps<Series> {\n audiences: PresentationAudience[];\n isSmall?: boolean;\n hasTableOfContents?: boolean;\n}\n\nexport function SeriesWidgetItem(props: SeriesWidgetItemProps): JSX.Element {\n const { data: series } = props;\n\n /**\n * Subject audiences currently take render precedence over rating.\n * \n * This means that until we properly add productionCompanies to series, we\n * should expect only CV series to have a subject audience. Any TV series\n * from the Exchange should only have a rating. \n */\n\n const analyticsData = {\n ...props.analyticsData,\n id: series?.id,\n name: series?.name\n };\n\n const analyticsOptions = {\n ...props.analyticsOptions,\n actionType: UserAction.Click,\n entity: EntityType.Series,\n descriptor: ClickDescriptor.TallPoster\n };\n\n return (\n <AppLink\n key={series.id}\n appLink={props.getAppLink(series)}\n className={`position-relative px-1 flex-shrink-0 ${props.isSmall ? styles.smallSeriesItem : styles.largeSeriesItem} `}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <SeriesTallPoster\n series={series}\n presentationAudiences={props.audiences}\n preloadImage={props.preloadImage}\n isSmall={props.isSmall}\n hasTableOfContents={props.hasTableOfContents}\n />\n </AppLink>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { SeriesWidgetItem } from 'libs/shared/components/widgets/items/series-widget-item';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { PresentationAudience, Series, Video, WidgetType } from 'libs/shared/interfaces';\n\nexport interface PosterSlidingListLargeWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Video[];\n audiences: PresentationAudience[];\n hasTableOfContents: boolean;\n appLinks: {\n series: (series: Series) => Core.AppLink,\n scopedSearchHome?: (filters?: HashObject) => Core.AppLink\n };\n showHighlight?: boolean;\n analyticsData?: HashObject;\n badgeComponent: JSX.Element;\n seeMoreLink: Core.AppLink;\n}\n\nexport function PosterSlidingListLargeWidgetTemplate(\n props: PosterSlidingListLargeWidgetTemplateProps\n): JSX.Element {\n return (\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Series}\n collection={props.content}\n childComponent={SeriesWidgetItem}\n extraChildComponentProps={{ audiences: props.audiences, hasTableOfContents: props.hasTableOfContents }}\n getChildAppLink={(item: Series) => props.appLinks?.series?.(item)}\n appLink={props.seeMoreLink}\n showSeeMoreLink={!!props.seeMoreLink}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n headingBadgeComponent={props.badgeComponent}\n />\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .slidingSubjectSmall {\n position: relative;\n flex: 0 0 auto;\n width: 16.6667%;\n\n @include media('<=xl') {\n width: 20%;\n }\n \n @include media('<=lg') {\n width: 25%;\n }\n \n @include media('<=md') {\n width: 33.33333%;\n }\n \n @include media('<=sm') {\n width: 50%;\n }\n }\n\n .slidingSubjectLarge {\n position: relative;\n flex: 0 0 auto;\n width: 20%;\n\n @include media('<=lg') {\n width: 25%;\n }\n \n @include media('<=md') {\n width: 33.33333%;\n }\n \n @include media('<=sm') {\n width: 50%;\n }\n }\n\n .heading {\n z-index: 1;\n color: $gray-100;\n text-align: center;\n\n position: absolute;\n left: 0;\n right: 0;\n top: map-get($spacers, 3);\n\n font-size: $h5-font-size;\n\n // With the table of contents displaying, the font size needs to shrink to fit\n @include media('<=xl') {\n font-size: $h6-font-size;\n }\n\n @include media('<=lg') {\n font-size: $h5-font-size;\n }\n\n @include media(\"<400px\") {\n font-size: $h6-font-size;\n }\n }\n\n .posterContainer {\n position: relative;\n padding: 0 map-get($spacers, 1);\n }\n\n .partialLoading {\n width: 100%;\n padding-bottom: percentage(calc(16 / 9));\n position: relative;\n }\n\n .labelContainer {\n z-index: 1;\n bottom: map-get($spacers, 2);\n left: 50%;\n transform: translate(-50%, 0%);\n }\n}","import React from 'react';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { WidgetType } from 'libs/shared/interfaces';\n\nimport styles from './tall-subject-widget-item.module.scss';\n\nfunction useGetItemCount(type: WidgetType): number {\n const breakpoints = useBreakpoints();\n\n if (breakpoints.xs)\n return 2;\n\n if (breakpoints.sm)\n return 3;\n\n if (breakpoints.md)\n return 4;\n\n if (breakpoints.lg || type === WidgetType.LargeRow)\n return 5;\n\n return 6;\n}\n\nconst PartialLoadingItem = (props: PartialTallSubjectWidgetProps) => (\n <div className={`${props.type === WidgetType.Row ? styles.slidingSubjectSmall : styles.slidingSubjectLarge} px-1`}>\n <div className={`${styles.partialLoading} partial-loading-background rounded-3`} />\n </div>\n);\n\ninterface PartialTallSubjectWidgetProps {\n type: WidgetType;\n}\n\nexport function PartialTallSubjectWidget(props: PartialTallSubjectWidgetProps): JSX.Element {\n const itemCount = useGetItemCount(props.type);\n\n const items = [];\n for (let i = 0; i < itemCount; i++) {\n items.push(<PartialLoadingItem key={i} type={props.type} />);\n }\n\n return (\n <div className='pb-3'>\n <PartialWidgetHeader />\n <div className='row g-0 mx-n1'>\n {items}\n </div>\n </div>\n );\n}\n","import * as React from 'react';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, UserAction } from 'libs/analytics/interfaces';\n\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { Classification, PresentationAudience, WidgetType } from 'libs/shared/interfaces';\n\nimport styles from './tall-subject-widget-item.module.scss';\n\nexport interface TallSubjectWidgetItemProps extends FixedWidgetItemProps<Classification> {\n audiences: PresentationAudience[];\n}\n\nexport function TallSubjectWidgetItem(props: TallSubjectWidgetItemProps): JSX.Element {\n const { data, preloadImage } = props;\n\n const analyticsOptions: AnalyticsOptions = {\n ...props.analyticsOptions,\n entity: EntityType.Classification,\n actionType: UserAction.Click,\n descriptor: ClickDescriptor.TallPoster\n };\n\n function getClassName(): string {\n let className = styles.posterContainer;\n\n if (props.context.type === WidgetType.Row)\n className += ` ${styles.slidingSubjectSmall}`;\n else\n className += ` ${styles.slidingSubjectLarge}`;\n\n return className;\n }\n\n return (\n <div className={getClassName()}>\n <BaseImage\n data={data.tallPoster}\n alt={data.name}\n appLink={props.getAppLink(data)}\n imageType={ImageType.TallPosters}\n preload={preloadImage}\n imageOptions={{ size: ImageSize.Medium }}\n imageClassName='rounded-3'\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <ImageFallback type={ImageFallbackType.TallSubject} />\n <h3 className={`px-2 ${styles.heading}`}>{data.name}</h3>\n </BaseImage>\n </div>\n );\n}\n","import React from 'react';\n\nimport { PartialTallSubjectWidget } from 'libs/shared/components/widgets/items/tall-subject-widget-item';\nimport { WidgetType } from 'libs/shared/interfaces';\n\nexport function PartialPosterSlidingListMediumWidgetTemplate(): JSX.Element {\n return <PartialTallSubjectWidget type={WidgetType.LargeRow} />;\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { TallSubjectWidgetItem } from 'libs/shared/components/widgets/items/tall-subject-widget-item';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Classification, Video, WidgetType } from 'libs/shared/interfaces';\n\nexport interface PosterSlidingListMediumWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Video[];\n analyticsData?: HashObject;\n \n showHighlight?: boolean;\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink\n };\n}\n\nexport function PosterSlidingListMediumWidgetTemplate(props: PosterSlidingListMediumWidgetTemplateProps): JSX.Element {\n return (\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.LargeRow}\n contents={WidgetContents.Subjects}\n collection={props.content}\n childComponent={TallSubjectWidgetItem}\n getChildAppLink={(item: Classification) => props.appLinks?.classification?.(item)}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n />\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { TallSubjectWidgetItem } from 'libs/shared/components/widgets/items/tall-subject-widget-item/TallSubjectWidgetItem';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Classification, CuratedDashboardAppLink, Presentation, PresentationAudience, WidgetType } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nconst EXPLORE_ALL_TOPICS_ID = 'explore-all-topics';\n\nfunction getExtraItem(props: ClassificationPosterSlidingListSmallWidgetTemplateProps) {\n if (props.metadata?.text || props.metadata?.imageId)\n return {\n id: props.metadata?.appLink === CuratedDashboardAppLink.ExploreAllTopics ? EXPLORE_ALL_TOPICS_ID : '',\n name: props.metadata?.text,\n tallPoster: {\n url: props.metadata?.imageId ?\n ImageHelper.getUrlById(props.imageCdnUrl, ImageType.TallPosters, props.metadata.imageId, ImageSize.Medium) :\n ''\n }\n };\n}\n\nexport interface ClassificationPosterSlidingListSmallWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n imageCdnUrl: string;\n audiences: PresentationAudience[];\n content: Classification[];\n metadata: {\n imageId: string,\n text: string,\n appLink: CuratedDashboardAppLink\n };\n presentation: Presentation;\n appLinks: {\n latestReleases: () => Core.AppLink,\n allTopics: (presentationId?: string) => Core.AppLink,\n classification: (classification: Classification | null) => Core.AppLink\n };\n analyticsData?: HashObject;\n \n showHighlight?: boolean;\n}\n\nexport function ClassificationPosterSlidingListSmallWidgetTemplate(\n props: ClassificationPosterSlidingListSmallWidgetTemplateProps\n): JSX.Element {\n const extraContent = getExtraItem(props);\n\n const widgetAppLink = WidgetHelper.getCustomAppLink(props);\n\n return (\n <div>\n <FixedWidget\n id={props.id}\n name={props.name}\n appLink={widgetAppLink}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Subjects}\n collection={extraContent ? [ extraContent, ...props.content ] : props.content}\n childComponent={TallSubjectWidgetItem}\n extraChildComponentProps={{ audiences: props.audiences }}\n getChildAppLink={(item: Classification) => {\n if (!item.id)\n return null;\n\n if (item.id === EXPLORE_ALL_TOPICS_ID)\n return props.appLinks?.allTopics?.(props.presentation.id);\n\n return props.appLinks?.classification?.(item);\n }}\n analyticsData={props.analyticsData}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n />\n </div>\n );\n}\n","import React from 'react';\n\nimport { PartialTallSubjectWidget } from 'libs/shared/components/widgets/items/tall-subject-widget-item';\nimport { WidgetType } from 'libs/shared/interfaces';\n\nexport function PartialPosterSlidingListSmallWidgetTemplate(): JSX.Element {\n return <PartialTallSubjectWidget type={WidgetType.Row} />;\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { HashObject } from 'libs/analytics/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { SeriesWidgetItem } from 'libs/shared/components/widgets/items/series-widget-item';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { PresentationAudience, Series, WidgetType } from 'libs/shared/interfaces';\n\nexport interface SeriesPosterSlidingListSmallWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Series[];\n audiences: PresentationAudience[];\n appLinks: {\n series: (series: Series) => Core.AppLink\n };\n analyticsData?: HashObject;\n \n showHighlight?: boolean;\n}\n\nexport function SeriesPosterSlidingListSmallWidgetTemplate(\n props: SeriesPosterSlidingListSmallWidgetTemplateProps\n): JSX.Element {\n return (\n <div>\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.SmallSeries}\n collection={props.content}\n childComponent={SeriesWidgetItem}\n extraChildComponentProps={{ audiences: props.audiences, isSmall: true }}\n getChildAppLink={props.appLinks?.series}\n analyticsData={props.analyticsData}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n />\n </div>\n );\n}\n",":local {\n .question {\n background-color: $gray-100;\n padding: 0.75rem;\n\n &:hover {\n background-color: $light-blue;\n }\n }\n\n .partialQuestion {\n background-color: $gray-100;\n padding: 0.75rem;\n }\n\n .description {\n overflow: hidden;\n // If you change the transition time here, please also update the variable in the component\n transition: height 0.5s ease-in-out;\n }\n}","import React from 'react';\n\nimport styles from '../question-widget-template.module.scss';\n\nexport function PartialQuestionWidgetTemplate(): JSX.Element {\n return (\n <div className={`${styles.partialQuestion} rounded-3`}>\n <div className='mb-2 partial-loading-background' style={{ height: '1.5rem', width: '75%' }}>\n </div>\n\n <div className='partial-loading-background' style={{ height: '1.2rem', width: '100%' }}>\n </div>\n </div>\n );\n}\n",":local {\n .question {\n background-color: $gray-100;\n padding: 0.75rem;\n\n &.disabled:hover {\n background-color: $gray-100;\n cursor: default !important;\n }\n\n &:hover {\n background-color: $light-blue;\n }\n\n table,\n th,\n td {\n border: 1px solid $dark;\n padding: map-get($spacers, 2);\n }\n }\n\n .partialQuestion {\n background-color: $gray-100;\n padding: 0.75rem;\n }\n\n .description {\n overflow: hidden;\n // If you change the transition time here, please also update the variable in the component\n transition: height 0.5s ease-in-out;\n }\n}","import React from 'react';\n\nimport { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { useIsComponentMounted } from 'libs/shared/hooks/UseIsComponentMounted';\nimport { useResizeListener } from 'libs/shared/hooks/UseResizeListener';\nimport { MinusSvg } from 'libs/shared/images/svg/actions/MinusSvg';\nimport { PlusSvg } from 'libs/shared/images/svg/actions/PlusSvg';\nimport { TopicFaqHelper } from 'libs/shared/utils/topic-faq-helper/TopicFaqHelper';\n\nimport styles from './expandable-question.module.scss';\n\nconst DEFAULT_HEIGHT = '1.2rem';\n\n// If you change the transition time here, please also update the transition time in the SCSS file\nconst TRANSITION_TIME = 500; // ms\n\ninterface ExpandableQuestionProps {\n id: string;\n question: string;\n answer: string;\n isBot?: boolean;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\nexport function ExpandableQuestion(props: ExpandableQuestionProps): JSX.Element {\n // Answer should be expanded for anon by default so Google can read it.\n const [ isExpanded, setIsExpanded ] = useViewModel(`should:expand:${props.id}`, props.isBot, {\n storage: StorageType.LocalStorage\n });\n\n const [ height, setHeight ] = React.useState(isExpanded ? '100%' : DEFAULT_HEIGHT);\n const [ shouldClamp, setShouldClamp ] = React.useState<boolean>(!isExpanded);\n const [ isExpandable, setIsExpandable ] = React.useState<boolean>(true);\n\n const [ markdown, setMarkdown ] = React.useState<string | null>(null);\n const isMounted = useIsComponentMounted();\n\n const timeoutRef = React.useRef<number | null>(null);\n const invisibleRef = React.useRef<HTMLDivElement>(null);\n const visibleRef = React.useRef<HTMLParagraphElement>(null);\n\n const checkIsExpandable = React.useCallback(() => {\n if (!markdown || !invisibleRef.current) return;\n\n // Use a clone to measure full height without constraints\n const fullEl = document.createElement('p');\n fullEl.innerHTML = markdown;\n // Match styles of the visible element\n fullEl.className = `mb-0 ${TopicFaqHelper.getContainerClass()}`;\n fullEl.style.visibility = 'hidden';\n\n invisibleRef.current.appendChild(fullEl);\n const fullHeight = fullEl.clientHeight;\n invisibleRef.current.removeChild(fullEl);\n\n // Use a clone to measure single line height\n const singleEl = document.createElement('p');\n singleEl.innerHTML = '&nbsp;';\n singleEl.className = `mb-0 ${TopicFaqHelper.getContainerClass()}`;\n singleEl.style.visibility = 'hidden';\n\n invisibleRef.current.appendChild(singleEl);\n const singleLineHeight = singleEl.clientHeight;\n invisibleRef.current.removeChild(singleEl);\n\n setIsExpandable(fullHeight > singleLineHeight + 5);\n }, [markdown]);\n\n function onToggleExpander(e: React.MouseEvent<HTMLElement>): void {\n if (!isExpandable) return;\n if (TopicFaqHelper.isLink(e.target as HTMLElement)) return;\n\n // Don't toggle if the user is highlighting text\n if (window.getSelection().toString().length !== 0) return;\n\n AnalyticsHelper.logUserAction(\n {\n ...props.analyticsData,\n question: props.question,\n answer: props.answer\n },\n {\n ...props.analyticsOptions,\n entity: EntityType.Faq,\n actionType: UserAction.Click,\n descriptor: isExpanded ? ClickDescriptor.Collapse : ClickDescriptor.Expand,\n location: LocationContext.FaqQuestionWidget\n }\n );\n\n isExpanded ? collapse() : expand();\n }\n\n function expand(): void {\n setExpandedHeight();\n setIsExpanded(true);\n\n window.clearTimeout(timeoutRef.current);\n setShouldClamp(false);\n }\n\n function collapse(): void {\n setHeight(DEFAULT_HEIGHT);\n setIsExpanded(false);\n\n timeoutRef.current = window.setTimeout(() => {\n setShouldClamp(true);\n }, TRANSITION_TIME);\n }\n\n function setExpandedHeight(): void {\n const fakeEl = document.createElement('p');\n fakeEl.innerHTML = markdown;\n fakeEl.style.visibility = 'hidden';\n invisibleRef.current.appendChild(fakeEl);\n\n setHeight(`${fakeEl.clientHeight}px`);\n invisibleRef.current.removeChild(fakeEl);\n }\n\n React.useEffect(() => {\n async function update() {\n const newMarkdown = await TopicFaqHelper.parse(props.answer, { focusableLinks: isExpanded });\n\n if (!isMounted.current) return;\n\n // Set initial state\n if (markdown === null) {\n setMarkdown(newMarkdown);\n return;\n }\n\n // Don't update if unchanged\n if (markdown === newMarkdown) return;\n\n // Collapse if expanded and the content has changed, so that the height can be recalculated\n if (markdown && isExpanded) collapse();\n\n setMarkdown(newMarkdown);\n }\n\n update();\n }, [props.answer]);\n\n React.useEffect(() => {\n if (height !== '100%' || !visibleRef.current) return;\n\n setHeight(visibleRef.current.clientHeight + 'px');\n }, [height]);\n\n React.useEffect(() => {\n checkIsExpandable();\n }, [checkIsExpandable]);\n\n useResizeListener(\n () => {\n if (isExpanded) collapse();\n },\n checkIsExpandable,\n [ isExpanded, checkIsExpandable ]\n );\n\n if (!props.question || !markdown) return <></>;\n\n return (\n <DivButton\n className={classNames(\n styles.question,\n 'rounded-3',\n !isExpandable && styles.disabled\n )}\n onClick={onToggleExpander}\n >\n <div className='pb-3'>\n <div className='float-end rounded-circle bg-white'>\n {isExpandable && <SvgContainer svg={isExpanded ? MinusSvg : PlusSvg} />}\n </div>\n\n <h2 className='h4 mb-0 clear-end'>{props.question}</h2>\n </div>\n\n <div className={styles.description} style={{ height }}>\n <p\n className={`mb-0 ${shouldClamp ? 'clamp-1' : ''} ${TopicFaqHelper.getContainerClass()}`}\n dangerouslySetInnerHTML={{ __html: TextHelper.sanitize(markdown) }}\n ref={visibleRef}\n ></p>\n\n <div ref={invisibleRef} />\n </div>\n </DivButton>\n );\n}\n","import React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ExpandableQuestion } from 'libs/shared/components/expandable-question/ExpandableQuestion';\nimport { Faq } from 'libs/shared/interfaces';\n\nexport interface QuestionWidgetTemplateProps {\n id: string;\n content: Faq[];\n isBot: boolean;\n analyticsData?: HashObject;\n \n}\n\nexport function QuestionWidgetTemplate(props: QuestionWidgetTemplateProps): JSX.Element {\n const { question, answer } = ArrayHelper.first(props.content);\n\n return (\n <ExpandableQuestion\n id={props.id}\n answer={answer}\n question={question}\n isBot={props.isBot}\n analyticsData={props.analyticsData}\n />\n );\n}\n",":local {\n .question {\n background-color: $gray-100;\n\n &:hover {\n background-color: $light-blue;\n }\n }\n\n .padding {\n padding: 0.75rem;\n }\n\n .partialQuestion {\n background-color: $gray-100;\n }\n\n .description {\n overflow: hidden;\n transition: height 0.5s ease-in-out;\n padding: 0 0.75rem;\n }\n}","import React from 'react';\n\nimport styles from '../question-accordion-widget-template.module.scss';\n\nfunction PartialQuestion(): JSX.Element {\n return (\n <div className={`${styles.partialQuestion} ${styles.padding} rounded-2 mb-2`}>\n <div className='partial-loading-background' style={{ height: '1.5rem', width: '75%' }}>\n </div>\n </div>\n );\n}\n\nexport function PartialQuestionAccordionWidgetTemplate(): JSX.Element {\n return (\n <>\n <div className='partial-loading-background mb-2' style={{ height: '2rem', width: '30%' }} />\n\n <div className='mb-n2'>\n <PartialQuestion />\n <PartialQuestion />\n <PartialQuestion />\n </div>\n </>\n );\n}\n","import * as React from 'react';\n\nimport { usePageMetadataContext } from 'libs/common/react/context/PageMetadataContext';\n\nimport { Faq } from 'libs/shared/interfaces';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\ninterface UseFaqJsonLdProps {\n faqs: Faq[];\n widgetName?: string;\n}\n\nexport function useFaqJsonLd(props: UseFaqJsonLdProps): void {\n const metadataContext = usePageMetadataContext();\n\n React.useEffect(() => {\n if (!props.faqs?.length || !metadataContext.hasProvider)\n return;\n\n async function generateFaqJsonLd() {\n // Create FAQ JSON-LD structure using PageMetadataHelper\n const faqJsonLd = await PageMetadataHelper.buildFaqJsonLd(props.faqs, props.widgetName);\n\n // Add FAQ JSON-LD to the page metadata\n metadataContext.setFaq(faqJsonLd);\n }\n\n generateFaqJsonLd();\n }, [ props.faqs, props.widgetName, metadataContext.hasProvider ]);\n}\n","import React from 'react';\n\nimport { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { useFaqJsonLd } from 'libs/shared/hooks/useFaqJsonLd';\nimport { useIsComponentMounted } from 'libs/shared/hooks/UseIsComponentMounted';\nimport { useResizeListener } from 'libs/shared/hooks/UseResizeListener';\nimport { MinusSvg } from 'libs/shared/images/svg/actions/MinusSvg';\nimport { PlusSvg } from 'libs/shared/images/svg/actions/PlusSvg';\nimport { Faq } from 'libs/shared/interfaces';\nimport { TopicFaqHelper } from 'libs/shared/utils/topic-faq-helper/TopicFaqHelper';\n\nimport styles from './question-accordion-widget-template.module.scss';\n\nconst DEFAULT_HEIGHT = '0px';\n\ninterface QuestionProps {\n id: string;\n faq: Faq;\n index: number;\n analyticsData?: HashObject;\n \n isBot: boolean;\n}\n\nfunction Question(props: QuestionProps): JSX.Element {\n // Answer should be expanded for anon by default so Google can read it.\n const [ isExpanded, setIsExpanded ] = useViewModel(`should:expand:${props.id}`, props.isBot, {\n storage: StorageType.LocalStorage\n });\n\n const [ height, setHeight ] = React.useState(isExpanded ? '100%' : DEFAULT_HEIGHT);\n const [ markdown, setMarkdown ] = React.useState<string | null>(null);\n\n const invisibleRef = React.useRef<HTMLParagraphElement>(null);\n const visibleRef = React.useRef<HTMLParagraphElement>(null);\n const isMounted = useIsComponentMounted();\n\n function onToggleExpander(e: React.MouseEvent<HTMLElement>): void {\n if (TopicFaqHelper.isLink(e.target as HTMLElement))\n return;\n\n // Don't toggle if the user is highlighting text\n if (window.getSelection().toString().length !== 0)\n return;\n\n AnalyticsHelper.logUserAction({\n ...props.analyticsData,\n ...props.faq,\n questionIndex: props.index\n }, {\n entity: EntityType.Faq,\n actionType: UserAction.Click,\n descriptor: isExpanded ? ClickDescriptor.Collapse : ClickDescriptor.Expand,\n location: LocationContext.FaqQuestionAccordionWidget\n });\n\n isExpanded ? collapse() : expand();\n }\n\n async function expand(): Promise<void> {\n setExpandedHeight();\n setIsExpanded(true);\n\n const newMarkdown = await TopicFaqHelper.parse(props.faq?.answer, { focusableLinks: true });\n\n if (!isMounted.current)\n return;\n\n setMarkdown(newMarkdown);\n }\n\n async function collapse(): Promise<void> {\n setHeight(DEFAULT_HEIGHT);\n setIsExpanded(false);\n\n const newMarkdown = await TopicFaqHelper.parse(props.faq?.answer, { focusableLinks: false });\n\n if (!isMounted.current)\n return;\n\n setMarkdown(newMarkdown);\n }\n\n function setExpandedHeight(): void {\n const fakeEl = document.createElement('p');\n fakeEl.innerHTML = markdown;\n fakeEl.style.visibility = 'hidden';\n fakeEl.classList.add('py-1');\n invisibleRef.current.appendChild(fakeEl);\n\n // 10px is subtracted as this is the padding of the description\n setHeight(`${fakeEl.clientHeight - 10}px`);\n invisibleRef.current.removeChild(fakeEl);\n }\n\n React.useEffect(() => {\n async function onUpdateMarkdown() {\n const newMarkdown = await TopicFaqHelper.parse(props.faq?.answer, { focusableLinks: isExpanded });\n\n if (!isMounted.current)\n return;\n\n setMarkdown(newMarkdown);\n\n if (isExpanded)\n setExpandedHeight();\n }\n\n onUpdateMarkdown();\n }, [props.faq?.answer]);\n\n // When we resize, we want to recalculate the height of the expanded content\n useResizeListener(() => {\n if (isExpanded)\n collapse();\n }, null, [isExpanded]);\n\n if (!props.faq?.question || !props.faq?.answer)\n return <></>;\n\n const questionId = `question-${props.id}`;\n const panelId = `answer-${props.id}`;\n\n return (\n <DivButton\n onClick={onToggleExpander}\n aria-expanded={isExpanded}\n aria-controls={panelId}\n className={`${styles.question} rounded-2`}\n >\n <div className={`d-flex align-items-center ${styles.padding}`}>\n <div className='rounded-circle bg-white me-2'>\n <SvgContainer svg={isExpanded ? MinusSvg : PlusSvg} />\n </div>\n \n <h3 className='mb-0 font-size-normal fw-normal' id={questionId}>{props.faq.question}</h3>\n </div>\n\n <div\n className={`${styles.description}`}\n style={{ height }}\n id={panelId}\n aria-labelledby={questionId}\n aria-live='polite'\n aria-hidden={!isExpanded}\n >\n <p\n className={`mb-0 py-1 ${TopicFaqHelper.getContainerClass()}`}\n dangerouslySetInnerHTML={{ __html: markdown }}\n ref={visibleRef}\n >\n </p>\n \n <div ref={invisibleRef} aria-hidden={true} className={TopicFaqHelper.getContainerClass()} />\n </div>\n </DivButton>\n );\n}\n\nexport interface QuestionAccordionWidgetTemplateProps {\n id: string;\n name: string;\n content: Faq[];\n isBot: boolean;\n analyticsData?: HashObject;\n \n}\n\nexport function QuestionAccordionWidgetTemplate(props: QuestionAccordionWidgetTemplateProps): JSX.Element {\n useFaqJsonLd({\n faqs: props.content,\n widgetName: props.name\n });\n\n if (!props.content.length)\n return <></>;\n\n return (\n <>\n <h2 className='curated-widget-heading'>\n {props.name}\n </h2>\n\n <ul className='list-unstyled mb-n2'>\n {props.content.map((faq, index) => {\n return (\n <li className='mb-2' key={index}>\n <Question\n key={index}\n id={`${props.id}:${index}`}\n faq={faq}\n index={index}\n analyticsData={props.analyticsData}\n isBot={props.isBot}\n />\n </li>\n );\n })}\n </ul>\n </>\n );\n}\n","import React from 'react';\n\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { BG_COLOUR_CLASS_NAMES } from 'libs/shared/constants/ColourClassNames';\nimport { getDeterministicBgColorClass } from 'libs/shared/utils/getBgColorClass';\n\ninterface RectangularLogoProps {\n logoUrl?: string;\n bgColor?: string;\n name: string;\n classNames?: {\n container?: string,\n text?: string\n };\n}\n\nexport function RectangularLogo(props: RectangularLogoProps): JSX.Element {\n const colourClass = getDeterministicBgColorClass(props.name, BG_COLOUR_CLASS_NAMES);\n\n const logoStyle: React.CSSProperties = {\n backgroundImage: props.logoUrl ? `url('${props.logoUrl}')` : null,\n backgroundColor: props.bgColor\n };\n\n return (\n <div\n className={classNames(\n 'rounded-3 w-100 h-full',\n 'ratio ratio-16x9 bg-no-repeat bg-contain bg-center bg-clip-padding',\n !props.bgColor && colourClass,\n props.classNames?.container\n )}\n style={logoStyle}\n >\n {!props.logoUrl && (\n <div className='d-flex align-items-center justify-content-center w-100 h-100'>\n <span className={classNames(\n 'text-white text-center fs-5 fw-semibold text-decoration-none text-truncate p-2',\n props.classNames?.text\n )}>\n {props.name}\n </span>\n </div>\n )}\n </div>\n );\n}\n","/**\n * Tier of partners:\n * Spotlight: Highly curated page where we have devoted lot of time and effort\n * Curated: Lightly curated page\n * System generated: These partner profiles are generated using tools and hasn't been reviewed\n */\nexport enum PartnerType {\n SystemGenerated = 1,\n Curated = 2,\n Spotlight = 3\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AnalyticsOptions, EntityType, HashObject, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { RectangularLogo } from 'libs/shared/components/rectangular-logo/RectangularLogo';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { PartnerType } from 'libs/shared/enums/PartnerType';\nimport { PartnerProfile } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nconst namespace = 'shared.rectangularLogoWidgetItem';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface GetPartnerWidgetItemOptions {\n partner: PartnerProfile;\n appLink: Core.AppLink;\n analyticsData: HashObject;\n analyticsOptions: AnalyticsOptions;\n}\n\nfunction getEntityType(partner: PartnerProfile): EntityType {\n if (partner.company)\n return EntityType.Company;\n \n return EntityType.Person;\n}\n\nfunction getTitle(partner: PartnerProfile): string {\n if (partner.partnerType === PartnerType.Spotlight)\n return getPhrase('featured', { name: partner.name });\n \n if (partner.partnerType === PartnerType.Curated)\n return getPhrase('curated', { name: partner.name });\n \n return partner.name;\n}\n\nexport function getPartnerWidgetItemProps(option: GetPartnerWidgetItemOptions): RectangularLogoWidgetItemProps {\n const { partner, appLink } = option;\n\n const analyticsData = {\n ...option.analyticsData,\n id: partner.id,\n name: partner.name,\n entity: getEntityType(partner)\n };\n\n const analyticsOptions = {\n ...option.analyticsOptions,\n location: LocationContext.RectangularLogoSlidingListWidget,\n actionType: UserAction.Click,\n entity: EntityType.Person\n };\n\n const logo: RectangularLogoWidgetItemProps['logo'] = partner._logo?.value?.url ?\n {\n url: ImageHelper.createUrl(partner._logo.value.url, { size: ImageSize.Medium }),\n bgColor: partner._colour?.value\n } :\n undefined;\n\n return {\n name: partner.name,\n logo,\n appLink,\n analyticsData,\n analyticsOptions,\n title: getTitle(partner)\n };\n}\n\ninterface RectangularLogoWidgetItemProps {\n name: string;\n appLink: Core.AppLink;\n logo?: {\n url: string,\n bgColor: string\n };\n analyticsOptions: AnalyticsOptions;\n analyticsData: HashObject;\n title?: string;\n}\n\nexport function RectangularLogoWidgetItem(props: RectangularLogoWidgetItemProps): JSX.Element {\n return (\n <AppLink\n appLink={props.appLink}\n className='position-relative px-1 flex-shrink-0 col-6 col-md-3 col-lg-2'\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n title={props.title}\n >\n <RectangularLogo\n logoUrl={props.logo?.url}\n bgColor={props.logo?.bgColor}\n name={props.name}\n />\n <h2 className='h6 mt-2'>{props.name}</h2>\n </AppLink>\n );\n}\n\nexport interface RectangleLogoFixedWidgetItemProps extends FixedWidgetItemProps<PartnerProfile> {}\nexport function RectangluarLogoFixedWidgetItem(props: RectangleLogoFixedWidgetItemProps): JSX.Element {\n const widgetProps = getPartnerWidgetItemProps({\n analyticsData: props.analyticsData,\n analyticsOptions: props.analyticsOptions,\n partner: props.data,\n appLink: props.getAppLink(props.data)\n });\n\n return <RectangularLogoWidgetItem {...widgetProps} />;\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { HashObject } from 'libs/analytics/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { RectangluarLogoFixedWidgetItem } from 'libs/shared/components/widgets/items/rectangular-logo-widget-item/RectangularLogoWidgetItem';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { PartnerProfile, WidgetType } from 'libs/shared/interfaces';\n\nexport interface RectangularLogoSlidingListWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: PartnerProfile[];\n showHighlight?: boolean;\n analyticsData?: HashObject;\n appLinks: {\n partner: (partnerProfile: PartnerProfile) => Core.AppLink,\n partnerHome: () => Core.AppLink\n };\n}\n\nexport function RectangularLogoSlidingListWidgetTemplate(\n props: RectangularLogoSlidingListWidgetTemplateProps\n): JSX.Element {\n return (\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.PartnerProfiles}\n collection={props.content}\n childComponent={RectangluarLogoFixedWidgetItem}\n extraChildComponentProps={{}}\n \n prefetched\n showSeeMoreLink\n hideBleedingContent={props.showHighlight}\n analyticsData={props.analyticsData}\n getChildAppLink={props.appLinks?.partner}\n appLink={props.appLinks?.partnerHome?.()}\n />\n );\n}\n","import React from 'react';\n\nexport function PartialSearchSuggestionsBlurbWidgetTemplate(): JSX.Element {\n return (\n <div className='d-flex flex-row gap-1'>\n <div className='partial-loading-background' style={{ width: '12rem', height: '1.25rem' }}></div>\n <div className='partial-loading-background' style={{ width: '3rem', height: '1.25rem' }}></div>\n <div className='partial-loading-background' style={{ width: '1rem', height: '1.25rem' }}></div>\n <div className='partial-loading-background' style={{ width: '4rem', height: '1.25rem' }}></div>\n </div>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { BaseObject } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.searchSuggestionsBlurbWidgetTemplate';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst DEFAULT_LENGTH = 2;\n\nexport interface SearchSuggestionsBlurbWidgetTemplateProps {\n name: string;\n content: BaseObject[];\n widgetTypeId: WidgetTypeId;\n appLinks: {\n searchHome: (queryParams: HashObject, options: { replace: boolean }) => Core.AppLink\n };\n}\n\ninterface SearchSuggestionQueryItemProps {\n appLink: Core.AppLink;\n name: string;\n}\n\nfunction SearchSuggestionQueryItem(props: SearchSuggestionQueryItemProps) {\n return (\n <>\n &quot;\n <AppLink appLink={props.appLink} appLinkOptions={{\n replace: true\n }}>\n <span className='text-info hover-text-underline cursor-pointer'>{props.name}</span>\n </AppLink>\n &quot;\n </>\n );\n}\n\nexport function SearchSuggestionsBlurbWidgetTemplate(props: SearchSuggestionsBlurbWidgetTemplateProps): JSX.Element {\n const suggestions = props.content.splice(0, DEFAULT_LENGTH);\n \n if (!suggestions.length)\n return <></>;\n \n return (\n <div className='rounded-2'>\n <Text phrase='prompt' namespace={namespace} />&nbsp;\n {suggestions.map((item, index) => {\n const lastItem = suggestions.length - 1 === index;\n\n return (\n <React.Fragment key={item.name}>\n <SearchSuggestionQueryItem\n appLink={props.appLinks.searchHome({ query: item.name }, { replace: false }) }\n name={item.name}\n />\n {!lastItem ? <>&nbsp;{getPhrase('or')}&nbsp;</> : '?'}\n </React.Fragment>\n );\n })}\n </div>\n );\n}\n",":local {\n $badge-size: 1.875rem;\n\n .container:hover {\n background-color: $light-blue;\n\n .bellContainer {\n display: flex;\n }\n }\n\n .bell {\n display: none;\n }\n\n .bellContainer {\n color: $dark;\n background-color: rgba($gray-200, 0.8);\n border-radius: 50%;\n z-index: 1;\n position: absolute;\n top: map-get($spacers, 1);\n right: map-get($spacers, 1);\n\n display: none;\n\n width: $badge-size;\n height: $badge-size;\n\n &:hover,\n &.followed {\n background-color: rgba($gray-200, 0.9);\n display: flex;\n\n .bellOutline {\n display: none;\n }\n\n .bell {\n opacity: 0.75;\n display: block;\n }\n }\n }\n\n .cover {\n height: 5rem;\n width: 5rem;\n min-width: 5rem;\n }\n\n .fallbackImage {\n height: 5rem;\n min-width: 5rem;\n border: none;\n }\n\n .subText {\n font-size: 0.6875rem;\n }\n}","import React from 'react';\n\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\n\nimport styles from '../subject-stats-widget-item.module.scss';\n\nexport function PartialSubjectStatsWidgetItem(): JSX.Element {\n return (\n <div className='d-flex'>\n <div className={`${styles.cover} me-2 rounded overflow-hidden border rounded d-inline-block`}>\n <div className={styles.partialIcon}>\n <ImageFallback type={ImageFallbackType.Subject} />\n </div>\n </div>\n <div className='d-inline-block' style={{ flexBasis: '50%' }}>\n <div className='partial-loading-background mt-1' style={{ height: '19px', width: '100%' }} />\n <div className='partial-loading-background mt-1' style={{ height: '16.5px', width: '75%' }} />\n </div>\n </div>\n );\n}\n","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { PartialSubjectStatsWidgetItem } from 'libs/shared/components/widgets/items/subject-stats-widget-item/partial-loading/PartialSubjectStatsWidgetItem';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nexport function PartialStatsCoverFixedPillListLargeWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n return (\n <div className='py-2'>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\n <Row className='g-0'>\n {Array(6).fill(null).map((_, i) => {\n return (\n <Col key={i} xs={12} sm={6} lg={4}>\n <div className='position-relative mb-2'>\n <PartialSubjectStatsWidgetItem />\n </div>\n </Col>\n );\n })}\n </Row>\n </div>\n );\n}\n","import React from 'react';\n\nexport function BellFilledSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M10.33 5.26c-1.023.373-1.72 1.155-2.158 2.369-.466 1.29-.655 3.104-.67 5.533-.002.112-.038.22-.102.305L5.08 16.56A.9.9 0 0 0 5.8 18h3.306q.049.13.112.251c.13.255.32.53.566.784.493.51 1.241.965 2.216.965s1.723-.455 2.216-.965c.246-.255.436-.53.566-.784a3 3 0 0 0 .112-.251H18.2a.9.9 0 0 0 .72-1.44l-2.32-3.093a.5.5 0 0 1-.101-.305c-.018-2.27-.214-4.07-.695-5.392-.447-1.232-1.157-2.09-2.211-2.498a1.8 1.8 0 0 0-.352-.722c-.28-.34-.7-.55-1.24-.55s-.965.208-1.261.53a1.9 1.9 0 0 0-.41.73M13.77 18a2.4 2.4 0 0 1-.274.34c-.353.365-.855.66-1.497.66s-1.144-.295-1.497-.66a2.4 2.4 0 0 1-.274-.34z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function BellSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M8.172 7.629c.438-1.214 1.135-1.996 2.157-2.369a1.9 1.9 0 0 1 .41-.73C11.037 4.208 11.462 4 12 4c.542 0 .96.21 1.241.55.182.22.291.474.352.722 1.054.409 1.764 1.266 2.211 2.498.48 1.323.677 3.122.695 5.392 0 .112.037.22.101.305l2.32 3.093A.9.9 0 0 1 18.2 18h-3.306a3 3 0 0 1-.112.251c-.13.255-.32.53-.566.784-.493.51-1.241.965-2.216.965s-1.723-.455-2.216-.965a3.3 3.3 0 0 1-.566-.784A3 3 0 0 1 9.106 18H5.8a.9.9 0 0 1-.72-1.44l2.32-3.093a.5.5 0 0 0 .101-.305c.016-2.429.205-4.243.67-5.533M18 17l-2.2-2.933a1.5 1.5 0 0 1-.301-.898c-.017-2.241-.215-3.9-.635-5.058-.411-1.134-1.016-1.738-1.854-1.981A3.6 3.6 0 0 0 12 6a4.2 4.2 0 0 0-1.115.132c-.809.223-1.381.752-1.773 1.836-.404 1.12-.595 2.79-.61 5.2-.003.321-.106.638-.302.899L6 17zm-7.771 1c.074.112.166.228.274.34.353.365.855.66 1.497.66s1.144-.295 1.497-.66c.108-.112.2-.228.274-.34z'\n />\n </svg>\n );\n}\n","import * as React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { BellFilledSvg } from 'libs/shared/images/svg/objects/BellFilledSvg';\nimport { BellSvg } from 'libs/shared/images/svg/objects/BellSvg';\nimport { Classification } from 'libs/shared/interfaces';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nimport { ClassificationBadgeType, SubjectStatsBadge } from './subject-stats-badge/SubjectStatsBadge';\n\nimport styles from './subject-stats-widget-item.module.scss';\n\nconst namespace = 'shared.subjectStatsWidgetItem';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SubjectStatsWidgetItemProps {\n classification: Classification;\n getAppLink: (classification: Classification) => Core.AppLink;\n onToggleFollowClassification: (classification: Classification, location: LocationContext) => void;\n canFollowTopics: boolean;\n hideCounts: boolean;\n\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\nexport function SubjectStatsWidgetItem(props: SubjectStatsWidgetItemProps): JSX.Element {\n const [ hasLoadedImage, setHasLoadedImage ] = React.useState(false);\n const isComingSoon = props.classification?.status === ClassificationStatus.ComingSoon;\n const isFollowing = TopicsHelper.isFollowing(props.classification);\n\n const {\n dashboardNewVideosCount,\n childDashboardNewVideoCount,\n dashboardResourceCount,\n childDashboardResourceCount,\n dashboardVideoCount,\n childDashboardVideoCount,\n childClassificationCount\n } = TopicsHelper.getCounts(props.classification);\n\n const videoCount = dashboardVideoCount + childDashboardVideoCount;\n const resourceCount = dashboardResourceCount + childDashboardResourceCount;\n const newVideoCount = dashboardNewVideosCount + childDashboardNewVideoCount;\n\n function onToggleFollowClassification(e: React.MouseEvent<HTMLDivElement>): void {\n e.stopPropagation();\n e.preventDefault();\n\n if (!props.canFollowTopics)\n return;\n\n props.onToggleFollowClassification?.(props.classification, LocationContext.SubjectStatsWidgetItem);\n }\n\n function getSubtext(): string {\n if (props.classification.status === ClassificationStatus.ComingSoon || props.hideCounts)\n return '';\n\n let text = '';\n\n if (videoCount)\n text += `${getPhrase('videos', { smartCount: videoCount })} `;\n\n if (resourceCount)\n text += ` • ${getPhrase('resources', { smartCount: resourceCount })}`;\n\n if (TopicsHelper.isTopLevelTopic(props.classification) && childClassificationCount > 0) {\n if (!text)\n return getPhrase('topics', { smartCount: childClassificationCount });\n\n text = `${getPhrase('topics', { smartCount: childClassificationCount })} • ` + text;\n }\n\n return text;\n }\n\n function getBadgeType(): ClassificationBadgeType {\n if (props.classification.status === ClassificationStatus.ComingSoon)\n return 'coming-soon';\n\n const { datePublished } = props.classification;\n if (!!datePublished && DateHelper.timeSince(datePublished, 'day') <= 30)\n return 'new-topic';\n\n if (newVideoCount > 0 && !props.hideCounts)\n return 'new-videos';\n\n return null;\n }\n\n const subText = getSubtext();\n\n return (\n <AppLink\n className={`d-flex no-decoration rounded ${styles.container}`}\n appLink={props.getAppLink?.(props.classification)}\n analyticsData={{\n ...props.analyticsData,\n id: props.classification?.id,\n name: props.classification?.name,\n presentationId: props.classification.presentationId,\n comingSoon: !!isComingSoon,\n videoCount,\n resourceCount,\n newVideoCount,\n datePublished: props.classification.datePublished,\n countsHidden: !!props.hideCounts\n }}\n analyticsOptions={{\n location: LocationContext.SubjectStatsWidgetItem,\n ...props.analyticsOptions,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Cover\n }}\n >\n {!hasLoadedImage && (\n <ImageFallback\n type={ImageFallbackType.Subject}\n extraClasses={`ms-2 rounded-end-lg ${styles.fallbackImage}`}\n />\n )}\n <div className={`${styles.cover} me-2 rounded overflow-hidden`}>\n <BaseImage\n data={props.classification.cover}\n imageOptions={{ size: ImageSize.Medium }}\n imageClassName={isComingSoon ? 'opacity-50' : ''}\n onLoad={() => setHasLoadedImage(true)}\n >\n {props.canFollowTopics && (\n <DivButton\n onClick={onToggleFollowClassification}\n className={`\n align-items-center justify-content-center cursor-pointer\n ${styles.bellContainer} ${isFollowing ? styles.followed : ''}\n `}\n >\n <SvgContainer\n svg={BellFilledSvg}\n className={`svg-container ${styles.bell}`}\n />\n <SvgContainer\n svg={BellSvg}\n className={`svg-container ${styles.bellOutline}`}\n />\n </DivButton>\n )}\n </BaseImage>\n\n </div>\n <div>\n <h3 className='h6 mb-0 clamp-2 mt-1'>\n {props.classification.name}\n </h3>\n\n {!!subText && (\n <p className={`mb-0 ${styles.subText}`}>\n {subText}\n </p>\n )}\n\n <SubjectStatsBadge badgeType={getBadgeType()} newVideoCount={newVideoCount} />\n </div>\n </AppLink>\n );\n}\n","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { SubjectStatsWidgetItem } from 'libs/shared/components/widgets/items/subject-stats-widget-item/SubjectStatsWidgetItem';\nimport { Classification } from 'libs/shared/interfaces';\n\nexport interface StatsCoverFixedPillListLargeWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Classification[];\n analyticsData?: HashObject;\n \n hasTableOfContents: boolean;\n isTertiaryCustomerWithoutExchange: boolean;\n appLinks: {\n classification: (classification: Classification) => Core.AppLink\n };\n onToggleFollowClassification: (classification: Classification, location: LocationContext) => void;\n}\n\nexport function StatsCoverFixedPillListLargeWidgetTemplate(\n props: StatsCoverFixedPillListLargeWidgetTemplateProps\n): JSX.Element {\n /**\n * For V1 of the release of topic directories, we will not be exposing the following icon.\n * This is because currently following is useless. Once we have implemented an email for when\n * coming soon topics are released, we will enable this.\n */\n // const canFollowTopics = props.hasPermissions(PermissionName.FollowSubjects) && !!props.onToggleFollowClassification;\n\n return (\n <>\n <WidgetHeader name={props.name} description={props.description} />\n <Row className='mb-n2'>\n {props.content.map(c => {\n return (\n <Col className='position-relative pb-2' key={c.id} xs={12} sm={6} lg={props.hasTableOfContents ? 6 : 4} xl={4}>\n <SubjectStatsWidgetItem\n classification={c}\n analyticsData={props.analyticsData}\n getAppLink={props.appLinks?.classification}\n onToggleFollowClassification={props.onToggleFollowClassification}\n // canFollowTopics={canFollowTopics}\n canFollowTopics={false}\n\n /**\n * We're currently hiding counts for tertiary customers without the exchange\n * because all counting is done by a background process that can't take the\n * current users' credentials into account. Because about half of our tertiary\n * customers don't have the exchange, and the other half do, and we use exchange\n * content on our tertiary topics, the counts will be higher for non-exchange\n * customers than they really are for them.\n * \n * This is shit and hopefully we can come up with a better solution one day\n * - Josh\n */\n hideCounts={props.isTertiaryCustomerWithoutExchange}\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}\n","import React from 'react';\n\nimport { PartialTagItem } from 'libs/shared/components/tags/PartialTagItem';\nimport { PartialDynamicWidget } from 'libs/shared/components/widgets/dynamic-widget';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nexport function PartialTagItemComponent() {\n return (\n <div className='me-2'>\n <PartialTagItem />\n </div>\n );\n}\n\nexport function PartialTagSlidingListWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n const hasDivider = typeof props.predicate === 'function' && props.predicate() || false;\n \n return (\n <>\n <PartialDynamicWidget\n partialLoadingComponent={PartialTagItemComponent}\n partialLoadingOptions={{\n numItems: 4\n }}\n />\n {hasDivider &&\n <hr />\n }\n </>\n );\n}\n","import React from 'react';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\nimport { Core } from 'libs/common/backbone/index';\n\nimport { DynamicWidget } from 'libs/shared/components/widgets/dynamic-widget';\nimport { TagWidgetItem, type TagWidgetItemProps } from 'libs/shared/components/widgets/items/tag-widget-item/TagWidgetItem';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { BaseObject } from 'libs/shared/interfaces';\n\nimport { PartialTagItemComponent } from './partial-loading/PartialTagSlidingListWidgetTemplate';\n\nexport interface TagSlidingListWidgetTemplateProps {\n name: string;\n content: BaseObject[];\n widgetTypeId: WidgetTypeId;\n appLinks: {\n tag: (tag: BaseObject) => Core.AppLink\n };\n getSelectedItems: (type: WidgetTypeId) => BaseObject[];\n}\n\nexport function TagSlidingListWidgetTemplate(props: TagSlidingListWidgetTemplateProps): JSX.Element {\n const selectedItems = props.getSelectedItems(props.widgetTypeId);\n\n const unappliedOptions = props.content.filter(item => !selectedItems.find(s => s.id === item.id));\n\n const collection = [ ...selectedItems, ...unappliedOptions ];\n\n function onClick(tag: BaseObject) {\n AppLinkHelper.trigger(props.appLinks.tag(tag));\n }\n \n return (\n <DynamicWidget\n collection={collection}\n childComponent={(childProps: TagWidgetItemProps) => (\n <TagWidgetItem\n {...childProps}\n selectedItems={selectedItems}\n onClick={onClick}\n />\n )}\n partialLoadingComponent={PartialTagItemComponent}\n partialLoadingOptions={{\n numItems: 4\n }}\n />\n );\n}\n","import React from 'react';\n\nfunction PartialVideoGuidanceTag(): JSX.Element {\n return (\n <div\n className='partial-loading-background rounded-pill me-2'\n style={{ height: '2.5rem', width: '9.375rem' }}\n />\n );\n}\n\nexport function PartialVideoGuidance(): JSX.Element {\n return (\n <div className='d-flex align-items-center mw-100'>\n <PartialVideoGuidanceTag />\n <PartialVideoGuidanceTag />\n </div>\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .partialHeroThumbnail {\n position: relative;\n width: 100%;\n padding-bottom: 56.25%;\n }\n\n .partialVideoTitleText {\n width: 12rem;\n height: 1.5rem;\n }\n\n .partialDescription {\n width: 80%;\n height: 3rem;\n\n @include media(\"<=md\") {\n display: none;\n }\n }\n \n .details {\n display: flex;\n justify-content: space-between;\n height: 100%;\n flex-direction: column;\n\n @include media(\"<=md\") {\n padding-top: map-get($spacers, 2);\n }\n }\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { PartialVideoGuidance } from 'libs/shared/components/video-guidance/tag/partial-loading/PartialVideoGuidanceTag';\n\nimport styles from './partial-featured-widget-template.module.scss';\n\nexport function PartialThumbnailFeaturedMediaWidgetTemplate(): JSX.Element {\n return (\n <>\n <Row>\n <Col xs={12} md={6}>\n <div className={`${styles.partialHeroThumbnail} partial-loading-background rounded-3`}></div>\n </Col>\n <Col xs={12} md={6}>\n <div className={styles.details}>\n <div>\n <div style={{ height: '1.5rem' }}>\n <div className='partial-loading-background' style={{ height: '1.2rem', width: '12rem' }} />\n </div>\n <div className='partial-loading-background' style={{ height: '1.5625rem', width: '15rem' }}></div>\n </div>\n\n <div className='pt-2 mw-100'>\n <PartialVideoGuidance />\n </div>\n </div>\n </Col>\n </Row>\n </>\n );\n}\n","@import '~styles/utils/mixins';\n@import '~styles/utils/include-media';\n:local {\n .partialHeroThumbnail {\n position: relative;\n width: 100%;\n padding-bottom: 56.25%;\n }\n\n .partialSeriesText {\n width: 6.25rem;\n height: 1rem;\n }\n\n .partialVideoTitleText {\n width: 16rem;\n height: 2rem;\n }\n\n .partialBadge {\n width: 4rem;\n height: 1rem;\n }\n\n .partialDescription {\n width: 80%;\n height: 4rem;\n }\n\n .partialSubject {\n width: 6.25rem;\n height: 1.5rem;\n }\n\n .partialHeading {\n height: 1.5rem;\n width: 8.4375rem;\n }\n\n .guidance {\n position: absolute;\n bottom: 0;\n gap: map-get($spacers, 1);\n\n @include media(\"<md\") {\n position: relative;\n }\n }\n\n .responsiveGuidance {\n @include media('>md') {\n @include responsive-guidance-tags;\n }\n\n @include media('<=sm') {\n @include responsive-guidance-tags;\n }\n }\n\n .description {\n @include clamp(4);\n \n @include media(\"<xl\") {\n @include clamp(3);\n }\n \n @include media(\"<md\") {\n display: none;\n }\n }\n\n .details {\n @include media(\"<md\") {\n padding-top: map-get($spacers, 2);\n }\n }\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, LocationContext } from 'libs/analytics/interfaces';\n\nimport { AudienceLabel } from 'libs/shared/components/audience-label/AudienceLabel';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { BadgeListContainer } from 'libs/shared/components/badges/BadgeListContainer';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { VideoItemGuidance } from 'libs/shared/components/video-list/components/video-guidance/VideoItemGuidance';\nimport { VideoItemActions } from 'libs/shared/components/video-list/components/video-item-actions/VideoItemActions';\nimport { VideoItemTitle } from 'libs/shared/components/video-list/components/video-item-title/VideoItemTitle';\nimport { VideoSubText } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { PresentationAudience, Video } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './hero-video.module.scss';\n\ninterface HeroVideoProps {\n video: Video;\n presentationAudiences: PresentationAudience[];\n showVideoGuidance: boolean;\n getVideoAppLink: (video: Video, opts: GetVideoAppLinkOptions) => Core.AppLink;\n hideInteractiveBadge?: boolean;\n badgePosition?: 'thumbnail' | 'info-panel';\n titleClassName?: string;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n commonVideoProps: CommonVideoProps;\n showNewVideoIndicator?: boolean;\n}\n\nHeroVideo.defaultProps = {\n newDurationStyle: true,\n badgePosition: 'thumbnail'\n};\n\nexport function HeroVideo(props: HeroVideoProps): JSX.Element {\n const videoAudiences = props.video?.subjectPresentationAudiences?.data;\n const mergedAudience = useMergeAudiences(videoAudiences, props.presentationAudiences);\n\n const analyticsOptions = AnalyticsHelper.mergeOptions(props.analyticsOptions, {\n location: LocationContext.ClassificationHero,\n entity: VideoHelper.getAnalyticsEntity(props.video)\n });\n\n const containerRef = React.useRef(null);\n \n if (!props.video)\n return <></>;\n\n return (\n <Row>\n <Col xs={12} md={6}>\n <div ref={containerRef} >\n <VideoThumbnail\n analyticsOptions={analyticsOptions}\n video={props.video}\n appLink={props.getVideoAppLink?.(props.video, {})}\n imageOptions={{ size: ImageSize.Medium }}\n textPosition={ThumbnailTextPosition.Independent}\n type='static'\n audience={props.badgePosition === 'thumbnail' ? mergedAudience : null}\n hideRating={props.badgePosition === 'thumbnail' ? !!mergedAudience : true}\n commonVideoProps={props.commonVideoProps}\n />\n </div>\n </Col>\n <Col xs={12} md={6} className={`${styles.details} position-relative`}>\n <div className='d-flex justify-content-between'>\n <div className='overflow-hidden'>\n <VideoSubText\n type={props.commonVideoProps.subTextType}\n appLink={props.commonVideoProps.getSubTextAppLink?.(props.video)}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n video={props.video}\n className='text-reset clamp-1'\n />\n <VideoItemTitle\n yearGroups={props.commonVideoProps.yearGroups}\n video={props.video}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n appLink={props.getVideoAppLink?.(props.video, {})}\n titleSize='h4'\n showNewVideoIndicator={props.showNewVideoIndicator}\n showPadlock={!props.commonVideoProps.hasStudentExperience && !props.commonVideoProps.hasGuestExperience}\n titleClassName={props.titleClassName}\n clampLevel={2}\n />\n </div>\n <VideoItemActions\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n video={props.video}\n />\n </div>\n\n {props.badgePosition === 'info-panel' && (\n <BadgeListContainer className='pb-1'>\n {!props.hideInteractiveBadge && <Badge type={ BadgeType.Interactive } data={props.video.interactives} />}\n <Badge type={ BadgeType.Rating } data={VideoHelper.getRating(props.video)} />\n <Badge type={ BadgeType.ProductionYear } data={props.video.productionYear} />\n </BadgeListContainer>\n )}\n\n <p className='mb-1'><span className={styles.description}>{props.video.description}</span></p>\n \n {props.badgePosition === 'info-panel' && (\n <AudienceLabel\n audience={mergedAudience}\n className='mt-1'\n border='dark'\n />\n )}\n\n {props.showVideoGuidance && (\n <VideoItemGuidance\n video={props.video}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n containerClassName={`d-flex ${styles.guidance}`}\n responsiveClassName={styles.responsiveGuidance}\n commonVideoProps={props.commonVideoProps}\n />\n )}\n </Col>\n </Row>\n );\n}\n\nexport function PartialHeroVideo(): JSX.Element {\n return (\n <>\n <div className={`partial-loading-background mb-2 ${styles.partialHeading}`} />\n <div className='row pb-3'>\n <div className='col-6 p1'>\n <div className={`${styles.partialHeroThumbnail} partial-loading-background rounded-3`}></div>\n </div>\n <div className='col-6 p1'>\n <div className={`partial-loading-background mb-1 ${styles.partialSeriesText}`}></div>\n <div className={`partial-loading-background my-1 ${styles.partialVideoTitleText}`}></div>\n <div className='d-flex'>\n <div className={`partial-loading-background my-1 me-1 ${styles.partialBadge}`}></div>\n <div className={`partial-loading-background my-1 ms-1 ${styles.partialBadge}`}></div>\n </div>\n <div className={`partial-loading-background my-1 ${styles.partialDescription}`}></div>\n <div className={`partial-loading-background mt-2 ${styles.partialSubject}`}></div>\n </div>\n </div>\n </>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { HeroVideo } from 'libs/shared/apps/subjects/components/hero-video/HeroVideo';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { PresentationAudience, Video } from 'libs/shared/interfaces';\nimport { VideoWidgetTemplateContent } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nexport interface ThumbnailFeaturedMediaWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: VideoWidgetTemplateContent;\n audiences: PresentationAudience[];\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink\n };\n analyticsData?: HashObject;\n \n hasPermissions: HasPermissionsFunc;\n settings: {\n hasTopicDirectories: boolean\n };\n commonVideoProps: CommonVideoProps;\n}\n\nexport function ThumbnailFeaturedMediaWidgetTemplate(props: ThumbnailFeaturedMediaWidgetTemplateProps): JSX.Element {\n const video = ArrayHelper.first(WidgetHelper.getVideoContent(props.content));\n\n return (\n <>\n <WidgetHeader name={props.name} description={props.description} />\n <HeroVideo\n video={video}\n presentationAudiences={props.audiences}\n getVideoAppLink={props.appLinks?.videoType}\n analyticsData={props.analyticsData}\n hideInteractiveBadge\n showVideoGuidance={VideoHelper.showVideoGuidance(props.hasPermissions)}\n showNewVideoIndicator={props.settings?.hasTopicDirectories}\n commonVideoProps={props.commonVideoProps}\n />\n </>\n );\n}\n",":local {\n .actions {\n background: none;\n color: $white;\n border: none;\n padding: 0;\n outline: inherit;\n border-radius: 50%;\n width: 1.5rem;\n height: 1.5rem;\n\n &:hover {\n background-color: rgba(0, 0, 0, .5);\n }\n }\n\n .actionsContainer {\n position: absolute;\n top: 0;\n right: 0;\n width: 1.5rem;\n height: 1.5rem;\n margin-top: 0.9375rem;\n margin-right: 0.9375rem;\n z-index: 10;\n }\n\n .ownerLogo {\n position: absolute;\n top: 0;\n left: 0;\n width: 2rem;\n height: 2rem;\n margin-top: 0.9375rem;\n margin-left: 0.9375rem;\n }\n\n .dropStyle {\n box-shadow: 0 0 $focus-ring-blur 2px $gray-900;\n border-radius: $border-radius-lg;\n background: $gray-900;\n }\n\n .dragStyle {\n opacity: 0.5;\n }\n}","import React from 'react';\n\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Core } from 'libs/common/core';\n\nimport { AnalyticsOptions, EntityType, HashObject, UserAction } from 'libs/analytics/interfaces';\n\nimport { ActionOptions, Actions } from 'libs/shared/components/actions/Actions';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DragDropMoveWrapper } from 'libs/shared/components/drag-drop-move/DragDropMoveWrapper';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { Folder } from 'libs/shared/interfaces';\n\nimport styles from './library-folder.module.scss';\n\ninterface LibraryFolderProps {\n folder: Folder;\n showOwnerLogo?: boolean;\n drag?: boolean;\n drop?: boolean;\n getAppLink: (f: Folder) => Core.AppLink;\n getFolderActions?: (f: Folder) => ActionOptions[];\n analyticsOptions?: AnalyticsOptions;\n analyticsData?: HashObject;\n}\n\nexport function LibraryFolder(props: LibraryFolderProps): JSX.Element {\n const thumbnailUrl = props.folder.thumbnail ?\n UrlHelper.urlBuilder(props.folder.thumbnail.url, { size: ImageSize.Small }) :\n null;\n\n const owner = props.folder?.libraries?.data?.[0]?.owner;\n const ownerLogoUrl = props.showOwnerLogo && !!owner?.logo?.url ?\n UrlHelper.urlBuilder(owner.logo.url, { size: ImageSize.Small }) :\n null;\n\n const actions = props.getFolderActions?.(props.folder);\n\n const analyticsData = props.analyticsData ? {\n id: props.folder.id.toString(),\n name: props.folder.name,\n ...props.analyticsData\n } : undefined;\n\n const analyticsOptions = props.analyticsOptions ? {\n actionType: UserAction.Click,\n entity: EntityType.Folder,\n\n ...props.analyticsOptions\n } : undefined;\n\n return (\n <DragDropMoveWrapper\n draggable={props.drag && { id: props.folder.id, data: props.folder }}\n droppable={props.drop && { id: props.folder.id, data: props.folder }}\n dropStye={styles.dropStyle}\n dragStyle={styles.dragStyle}\n >\n <div className='position-relative'>\n <AppLink\n className='rounded-3 d-block text-decoration-none'\n appLink={props.getAppLink(props.folder)}\n title={props.folder.name}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <BaseImage\n data={thumbnailUrl}\n imageType={ImageType.Thumbnails}\n imageClassName='rounded-top-lg'\n >\n <ImageFallback\n name={props.folder.name}\n type={ImageFallbackType.Folder}\n extraClasses='rounded-top-lg'\n />\n </BaseImage>\n <h3 className='bg-white border-start border-end border-bottom rounded-bottom-lg font-size-normal fw-semibold mb-0 p-2'>\n <span className='text-truncate d-block'>{props.folder.name}</span>\n </h3>\n </AppLink>\n {actions?.length &&\n <Actions\n actions={actions}\n className={styles.actionsContainer}\n actionsDropdownClassName={styles.actions}\n // Intentionally setting to the default SVG size\n dropdownToggleSvgSize={null}\n />\n }\n {!!ownerLogoUrl &&\n <img src={ownerLogoUrl} className={`rounded-circle ${styles.ownerLogo}`} alt={`${owner?.name} logo`} title={owner?.name || ''} />\n }\n </div>\n </DragDropMoveWrapper>\n );\n}\n","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/core';\n\nimport { HashObject, LocationContext } from 'libs/analytics/interfaces';\n\nimport { LibraryFolder } from 'libs/shared/components/library-folder/LibraryFolder';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { Folder } from 'libs/shared/interfaces';\n\nexport interface ThumbnailFixedListFolderSmallWidgetTemplateProps {\n name: string;\n seeMoreLink: Core.AppLink;\n content: Folder[];\n appLinks: {\n folder: (folder: Folder, opts?: { libraryId?: string, sort?: string }) => Core.AppLink\n };\n description: string;\n widgetTypeId: WidgetTypeId;\n badgeComponent: JSX.Element;\n getAnalyticsData?: (itemIndex: number) => HashObject;\n}\n\nexport function ThumbnailFixedListFolderSmallWidgetTemplate(\n props: ThumbnailFixedListFolderSmallWidgetTemplateProps\n): JSX.Element {\n function getAppLink(folder: Folder) {\n if (props.widgetTypeId === WidgetTypeId.SearchMySchoolLibraryFolder) {\n const libraryId = folder?.libraries?.data?.[0]?.id;\n return props.appLinks.folder(folder, { libraryId });\n }\n\n return props.appLinks.folder(folder);\n }\n\n const showOwnerLogo = props.widgetTypeId === WidgetTypeId.SearchMySchoolLibraryFolder;\n \n return (\n <>\n <WidgetHeader\n name={props.name}\n description={props.description}\n showSeeMoreLink={!!props.seeMoreLink}\n appLink={props.seeMoreLink}\n badgeComponent={props.badgeComponent}\n />\n <Row as='ul' className='list-unstyled mx-n1 mb-n2'>\n {props.content.map((f, idx) => {\n const analyticsData = typeof props.getAnalyticsData === 'function' ? props.getAnalyticsData(idx) : {};\n \n return (\n <Col as='li' key={f.id} lg={3} md={4} sm={6} xs={12} className='pb-3 px-1'>\n <LibraryFolder\n folder={f}\n getAppLink={getAppLink}\n showOwnerLogo={showOwnerLogo}\n analyticsData={analyticsData}\n analyticsOptions={{\n location: LocationContext.ThumbnailFixedListFolderSmallWidget\n }}\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}\n",":local {\n .subjectItem {\n aspect-ratio: 14 / 5;\n }\n} ","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nimport styles from './partial-thumbnail-fixed-list-large-widget-template.module.scss';\n\nexport function PartialThumbnailFixedListLargeWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n const PARTIAL_SUBJECTS = [...Array(2)];\n\n return (\n <div>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\n <Row className='mx-n1'>\n {PARTIAL_SUBJECTS.map((_, i) => {\n return (\n <Col key={i} sm={12} md={6} className='p-1'>\n <div className={`${styles.subjectItem} partial-loading-background rounded-3`} />\n </Col>\n );\n })}\n </Row>\n </div>\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .appLink:hover {\n text-decoration: none;\n cursor: pointer;\n }\n\n .container {\n padding: $spacer;\n background-repeat: no-repeat;\n background-size: contain;\n background-position: right;\n\n //fallback color\n background-color: $gray-900;\n\n &.large {\n min-height: 9.7rem; // 155.2px\n }\n\n &.small {\n min-height: 7.653rem; // 122.44px\n\n >.content {\n @include media('>lg') {\n width: 70%;\n }\n }\n }\n }\n\n .content {\n width: 50%;\n padding-right: 1rem;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n\n .top {\n color: $white;\n font-size: 1rem;\n }\n\n .title {\n margin-bottom: 0.0725rem;\n line-height: normal;\n overflow-y: clip;\n overflow-x: visible;\n }\n\n .preTitle {\n font-size: 0.875rem;\n }\n\n .description {\n font-size: 0.875rem;\n margin-bottom: 0.937rem;\n }\n }\n\n .cover {\n width: 25%;\n background-size: contain;\n aspect-ratio: 1;\n margin: auto;\n }\n\n .button {\n @include media('<=md') {\n display: none;\n }\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { AnalyticsOptions, HashObject } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport styles from './thumbnail-widget-item.module.scss';\n\nconst namespace = 'shared.thumbnailWidgetItem';\n\ninterface ThumbnailWidgetContentProps extends ThumbnailWidgetItemProps {}\n\nfunction ThumbnailWidgetContent(props: ThumbnailWidgetContentProps): JSX.Element {\n const style: React.CSSProperties = {};\n\n if (props.data.fallbackBackgroundColor)\n style.backgroundColor = props.data.fallbackBackgroundColor;\n \n if (props.data.backgroundColor)\n style.backgroundColor = props.data.backgroundColor;\n\n if (props.data.thumbnailUrl)\n style.backgroundImage = `url('${props.data.thumbnailUrl}')`;\n\n return (\n <div\n className={classNames(\n 'd-flex position-relative rounded-3 h-100',\n styles.container,\n props.isLarge ? styles.large : styles.small\n )}\n style={style}\n >\n <div className={classNames(styles.content, !props.isLarge && 'justify-content-center')}>\n <div className={`${styles.top}`}>\n {props.data.preTitle && props.data.preTitle.length &&\n <p className={`${styles.preTitle} mb-1 text-white`} title={props.data.preTitle}>{props.data.preTitle}</p>\n }\n <p title={props.data.name} className={classNames(\n 'h5 text-shadow hover-text-underline',\n styles.title,\n props.isLarge ? 'mb-0 text-wrap clamp-2' : 'text-wrap clamp-3'\n )}>\n {props.data.name}\n </p>\n\n {props.isLarge && (\n <div className={`text-start text-shadow ${styles.description}`}>\n <p className='clamp-3' title={props.data.description}>{props.data.description}</p>\n </div>\n )}\n </div>\n\n {props.isLarge && (\n <div className={styles.button}>\n <div className={classNames(!props.appLink && 'cursor-default', 'btn btn-outline-dark')}>\n {props.data?.buttonText || LanguageService.getPhrase(namespace, 'buttonLabel')}\n </div>\n </div>\n )}\n </div>\n\n {!props.data.thumbnailUrl && !!props.data.coverUrl && (\n <div\n className={`${styles.cover}`}\n style={{\n backgroundImage: `url('${props.data.coverUrl}')`\n }}>\n </div>\n )}\n\n </div>\n );\n}\n\ninterface ThumbnailWidgetData {\n name: string;\n preTitle?: string;\n \n description?: string;\n coverUrl?: string;\n thumbnailUrl?: string;\n backgroundColor?: string;\n fallbackBackgroundColor?: string;\n buttonText?: string;\n}\n\nexport interface ThumbnailWidgetItemProps {\n data: ThumbnailWidgetData;\n appLink?: Core.AppLink;\n appLinkOptions?: Core.AppLinkOptions;\n isLarge?: boolean;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\nfunction ThumbnailWidgetItem(props: ThumbnailWidgetItemProps): JSX.Element {\n if (props.appLink)\n return (\n <AppLink\n className={styles.appLink}\n appLink={props.appLink}\n appLinkOptions={props.appLinkOptions}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n >\n <ThumbnailWidgetContent {...props} />\n </AppLink>\n );\n\n return <ThumbnailWidgetContent {...props} />;\n}\n\nconst Memoized = React.memo(ThumbnailWidgetItem);\n\nexport { Memoized as ThumbnailWidgetItem };\n","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { ThumbnailWidgetItem, ThumbnailWidgetItemProps } from 'libs/shared/components/widgets/items/thumbnail-widget-item/ThumbnailWidgetItem';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { Classification } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nconst namespace = 'shared.thumbnailFixedListLargeWidgetTemplate';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface GetThumbnailWidgetItemPropsOptions {\n item: Classification;\n appLinks: ThumbnailFixedListLargeWidgetTemplateProps['appLinks'];\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\nfunction getThumbnailWidgetItemProps(options: GetThumbnailWidgetItemPropsOptions): ThumbnailWidgetItemProps {\n const baseProps: ThumbnailWidgetItemProps = {\n data: {\n name: options.item.name,\n description: options.item.description\n }\n };\n\n const isComingSoon = options.item?.status === ClassificationStatus.ComingSoon;\n const analyticsData = {\n ...options.analyticsData,\n id: options.item?.id,\n name: options.item?.name,\n presentationId: options.item?.presentationId,\n comingSoon: !!isComingSoon\n };\n \n const analyticsOptions = {\n location: LocationContext.ClassificationListItem,\n ...options.analyticsOptions,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n return {\n ...baseProps,\n data: {\n ...baseProps.data,\n backgroundColor: options.item.metadata?.backgroundColor,\n coverUrl: ImageHelper.createUrl(options.item.cover?.url, { size: ImageSize.Small }),\n thumbnailUrl: ImageHelper.createUrl(options.item.thumbnail?.url, { size: ImageSize.Medium }),\n buttonText: getPhrase('exploreTopic')\n },\n appLink: options.appLinks?.classification?.(options.item),\n isLarge: true,\n analyticsData,\n analyticsOptions\n };\n}\n\nexport interface ThumbnailFixedListLargeWidgetTemplateProps {\n name: string;\n description: string;\n content: Classification[];\n widgetTypeId: WidgetTypeId;\n isPreviewing: boolean;\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink\n };\n analyticsData?: HashObject;\n}\n\nexport function ThumbnailFixedListLargeWidgetTemplate(props: ThumbnailFixedListLargeWidgetTemplateProps): JSX.Element {\n return (\n <>\n <WidgetHeader\n name={props.name}\n description={props.description}\n content={props.content}\n widgetTypeId={props.widgetTypeId}\n isPreviewing={props.isPreviewing}\n />\n <Row as='ul' className='list-unstyled mx-n1 mb-n2'>\n {props.content.map(c => {\n return (\n <Col as='li' key={c.id} sm={12} xl={6} className='px-1 pb-2'>\n <ThumbnailWidgetItem\n {...getThumbnailWidgetItemProps({\n appLinks: props.appLinks,\n item: c,\n analyticsData: props.analyticsData\n })}\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}\n",":local {\n .partialThumbnail {\n position: relative;\n width: 100%;\n padding-bottom: 56.25%;\n }\n\n .row {\n row-gap: map-get($spacers, 3);\n }\n}","import React from 'react';\n\nimport { PartialVideoGuidance } from 'libs/shared/components/video-guidance/tag/partial-loading/PartialVideoGuidanceTag';\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nimport styles from './partial-thumbnail-fixed-list-media-large-widget-template.module.scss';\n\nexport const PartialThumbnailFixedListMediaLargeWidgetTemplate = (props: PartialWidgetTemplateProps): JSX.Element => {\n return (\n <>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\n <div className={`row ${styles.row}`}>\n <div className='col-sm-12 col-md-6'>\n <div className={`${styles.partialThumbnail} partial-loading-background rounded-3`}></div>\n <PartialThumbnailText />\n\n <div className='pt-1 mw-100'>\n <PartialVideoGuidance />\n </div>\n </div>\n\n <div className='col-sm-12 col-md-6'>\n <div className={`${styles.partialThumbnail} partial-loading-background rounded-3`}></div>\n <PartialThumbnailText />\n\n <div className='pt-1 mw-100'>\n <PartialVideoGuidance />\n </div>\n </div>\n </div>\n </>\n );\n};\n\nconst PartialThumbnailText = (): JSX.Element => {\n return (\n <div className='mt-2'>\n <div style={{ height: '1.4rem' }}>\n <div className='partial-loading-background' style={{ height: '1.1rem', width: '12rem' }} />\n </div>\n <div className='partial-loading-background' style={{ height: '1.33875rem', width: '15rem' }}></div>\n </div>\n );\n};\n","@import '~styles/utils/mixins';\n@import '~styles/utils/include-media';\n:local {\n .guidance { \n gap: map-get($spacers, 1);\n }\n\n .responsiveGuidance {\n @include media('>md') {\n @include responsive-guidance-tags;\n }\n\n @include media('<=sm') {\n @include responsive-guidance-tags;\n }\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions, ClickDescriptor, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { ThumbnailText } from 'libs/shared/components/thumbnails/thumbnail-text/ThumbnailText';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { VideoItemGuidance } from 'libs/shared/components/video-list/components/video-guidance/VideoItemGuidance';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { PresentationAudience, Video, VideoTypes } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './thumbnail-fixed-list-media-large-widget.module.scss';\n\nexport interface ThumbnailFixedListMediaLargeWidgetTemplateItemProps {\n video: VideoTypes;\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink\n };\n audiences: PresentationAudience[];\n hasPermissions: HasPermissionsFunc;\n analyticsData?: HashObject;\n\n settings: {\n hasTopicDirectories: boolean\n };\n\n commonVideoProps: CommonVideoProps;\n}\n\nexport function ThumbnailFixedListMediaLargeWidgetTemplateItem(\n props: ThumbnailFixedListMediaLargeWidgetTemplateItemProps\n): JSX.Element {\n const videoAppLink = props.appLinks?.videoType?.(props.video, {});\n\n const containerRef = React.useRef(null);\n\n const analyticsOptions: AnalyticsOptions = {\n actionType: UserAction.Click,\n entity: VideoHelper.getAnalyticsEntity(props.video),\n location: LocationContext.ThumbnailFixedListMediaLargeWidget,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n const mergedAudience = useMergeAudiences(props.video.subjectPresentationAudiences?.data, props.audiences);\n\n return (\n <div className='col-md-6'>\n <div ref={containerRef}>\n <VideoThumbnail\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n video={props.video}\n appLink={videoAppLink}\n imageOptions={{ size: ImageSize.Medium }}\n textPosition={ThumbnailTextPosition.Independent}\n type='static'\n audience={mergedAudience}\n hideRating={!!mergedAudience}\n commonVideoProps={{\n ...props.commonVideoProps,\n subTextType: 'none'\n }}\n />\n </div>\n <ThumbnailText\n video={props.video}\n appLink={videoAppLink}\n commonVideoProps={props.commonVideoProps}\n />\n\n {VideoHelper.showVideoGuidance(props.hasPermissions) && (\n <VideoItemGuidance\n commonVideoProps={props.commonVideoProps}\n video={props.video}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n responsiveClassName={styles.responsiveGuidance}\n containerClassName={`d-flex justify-content-start align-items-center pt-1 ${styles.guidance}`}\n />\n )}\n </div>\n );\n}\n",":local {\n .row {\n row-gap: map-get($spacers, 3);\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { ThumbnailFixedListMediaLargeWidgetTemplateItem } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/components/ThumbnailFixedListMediaLargeWidgetTemplateItem';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { PresentationAudience, Video } from 'libs/shared/interfaces';\nimport { VideoWidgetTemplateContent } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './thumbnail-fixed-list-media-large-widget-template.module.scss';\n\nexport interface ThumbnailFixedListMediaLargeWidgetTemplateProps {\n name: string;\n description: string;\n content: VideoWidgetTemplateContent;\n\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink\n };\n audiences: PresentationAudience[];\n analyticsData?: HashObject;\n \n hasPermissions: HasPermissionsFunc;\n\n settings: {\n hasTopicDirectories: boolean\n };\n\n commonVideoProps: CommonVideoProps;\n}\n\nexport function ThumbnailFixedListMediaLargeWidgetTemplate(\n props: ThumbnailFixedListMediaLargeWidgetTemplateProps\n): JSX.Element {\n const videos = WidgetHelper.getVideoContent(props.content);\n\n return (\n <>\n <WidgetHeader name={props.name} description={props.description} />\n <div className={`row ${styles.row}`}>\n {videos.map(video => (\n <ThumbnailFixedListMediaLargeWidgetTemplateItem key={video.id} video={video} {...props} />\n ))}\n </div>\n </>\n );\n}\n",":local {\n .thumbnailTitle:hover {\n text-decoration: underline;\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport styles from './collection-thumbnail-title.module.scss';\n\ninterface BaseCollectionThumbnailTitleProps {\n title: string;\n}\n\nfunction BaseCollectionThumbnailTitle(props: BaseCollectionThumbnailTitleProps): JSX.Element {\n return (\n <h3 title={props.title} className='h6'>{props.title}</h3>\n );\n}\n\ninterface CollectionThumbnailTitleProps extends BaseCollectionThumbnailTitleProps {\n appLink: Core.AppLink;\n}\n\nexport function CollectionThumbnailTitle(props: CollectionThumbnailTitleProps) {\n if (!props.appLink) {\n return (\n <BaseCollectionThumbnailTitle {...props} />\n );\n }\n \n return (\n <AppLink appLink={props.appLink} className={`${styles.thumbnailTitle}`}>\n <BaseCollectionThumbnailTitle {...props} />\n </AppLink>\n );\n}\n",":local {\n .badge {\n height: 1.5rem;\n }\n\n .mask {\n opacity: 0;\n }\n\n .thumbnailContainer:hover {\n .mask {\n opacity: 1;\n }\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AnalyticsOptions, EntityType, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CollectionThumbnailTitle } from 'libs/shared/components/thumbnails/collection/title/CollectionThumbnailTitle';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { TitleSubText } from 'libs/shared/components/title-sub-text/TitleSubText';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { PlaySvg } from 'libs/shared/images/svg/actions/PlaySvg';\nimport { SeriesSvg } from 'libs/shared/images/svg/objects/SeriesSvg';\nimport { Playlist, Series } from 'libs/shared/interfaces';\nimport { ImageOptions } from 'libs/shared/utils/ImageHelper';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\n\nimport styles from './collection-thumbnail.module.scss';\n\nconst namespace = 'shared.collectionThumbnail';\n\ntype SupportedContentType = Playlist | Series;\n\ninterface CollectionThumbnailProps {\n appLink?: Core.AppLink;\n collection: SupportedContentType;\n imageOptions?: ImageOptions;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n showMask?: boolean;\n showVideoCount?: boolean;\n onlyCount?: boolean;\n title?: string;\n titleAppLink?: Core.AppLink;\n subText?: string;\n subTextAppLink?: Core.AppLink;\n hoverText?: string;\n}\n\nexport function CollectionThumbnail(props: CollectionThumbnailProps) {\n function getFirstVideo() {\n let collectionVideos = props.collection?.videos;\n\n if (!collectionVideos)\n return;\n\n if (!collectionVideos.count && props.collection.typeId === MasterType.Playlist) {\n const playlist = props.collection as Playlist;\n\n if (playlist.clips.count)\n collectionVideos = playlist.clips;\n\n if (playlist.interactives.count)\n collectionVideos = playlist.interactives;\n }\n\n return ArrayHelper.first(collectionVideos.data);\n }\n\n function getVideoCount() {\n let totalCount = 0;\n\n if (props.collection.videos && props.collection.videos.count) {\n totalCount += props.collection.videos.count;\n }\n\n if (props.collection.typeId === MasterType.Playlist) {\n const playlist = props.collection as Playlist;\n\n if (playlist.interactives?.count)\n totalCount += playlist.interactives.count;\n\n if (playlist.clips?.count)\n totalCount += playlist.clips.count;\n }\n\n return totalCount;\n }\n\n function getEntityType(collection: SupportedContentType) {\n if (MasterTypeHelper.isType<Playlist>(collection, MasterType.Playlist)) {\n return EntityType.Playlist;\n }\n\n if (MasterTypeHelper.isType<Series>(collection, MasterType.Series)) {\n return EntityType.Series;\n }\n }\n\n const firstVideo = getFirstVideo();\n const videoCount = getVideoCount();\n const showTexts = props.title?.length || props.subText?.length;\n\n const analyticsData = {\n id: props.collection.id.toString(),\n name: props.collection.name,\n\n ...props.analyticsData\n };\n\n const analyticsOptions = {\n actionType: UserAction.Click,\n entity: getEntityType(props.collection),\n \n ...props.analyticsOptions\n };\n\n return (\n <div>\n <div className={`position-relative ${styles.thumbnailContainer} z-1`}>\n <AppLink\n appLink={props.appLink}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n preventFocus\n >\n {props.showMask &&\n <div className={`${styles.mask} position-absolute w-100 h-100 rounded-3 bg-dark bg-gradient z-1 bg-opacity-50 pointer-events-none`}>\n <div className={`${styles.badge} d-flex align-items-center w-fit flex-grow-0 bg-dark rounded-pill ps-1 m-2`}>\n <SvgContainer svg={PlaySvg} className='svg-container text-white' />\n <p className='d-inline fw-medium text-white mb-0'>\n {props.hoverText?.length ?\n <span>{props.hoverText}</span> :\n <Text namespace={namespace} phrase='playAll' />\n }\n </p>\n </div>\n </div>\n }\n\n {firstVideo &&\n <VideoThumbnail\n video={firstVideo}\n imageOptions={props.imageOptions}\n textPosition={ThumbnailTextPosition.Independent}\n type='cosmetic'\n hideMask\n hideRating\n hideDuration\n hideVideoTypeBadge\n />\n }\n\n {!firstVideo &&\n <div className='ratio ratio-16x9 bg-light rounded-3'>\n <div className='d-flex justify-content-center align-items-center'>\n <SvgContainer svg={PlaySvg} className='w-33 opacity-25 text-gray-400' />\n </div>\n </div>\n }\n\n {props.showVideoCount &&\n <div className={`${styles.badge} d-flex align-items-center w-fit bg-dark bg-opacity-75 rounded-pill position-absolute bottom-0 end-0 ps-1 m-2`}>\n <SvgContainer svg={SeriesSvg} className='svg-container text-white me-1' />\n <p className='d-inline fw-semibold text-white mb-0'>\n {props.onlyCount ?\n <span>{videoCount}</span> :\n <Text namespace={namespace} phrase='videos' options={{ count: videoCount, smartCount: videoCount }} />\n }\n </p>\n </div>\n }\n </AppLink>\n\n </div>\n \n {showTexts &&\n <div className='mt-2 d-flex flex-column'>\n {props.subText &&\n <TitleSubText title={props.subText} appLink={props.subTextAppLink}>\n {props.subText}\n </TitleSubText>\n }\n {props.title &&\n <CollectionThumbnailTitle\n title={props.collection.name}\n appLink={props.titleAppLink}\n />\n }\n </div>\n }\n </div>\n );\n}\n","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { HashObject, LocationContext } from 'libs/analytics/interfaces';\n\nimport { CollectionThumbnail } from 'libs/shared/components/thumbnails/collection/CollectionThumbnail';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport type { CurrentUser, Playlist, Series } from 'libs/shared/interfaces';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\n\ntype SupportedContentType = Series | Playlist;\n\nexport interface ThumbnailFixedListMediaSmallWidgetTemplateProps {\n name: string;\n content: SupportedContentType[];\n currentUser: CurrentUser;\n seeMoreLink: Core.AppLink;\n appLinks: {\n playlist: (playlist: Playlist) => Core.AppLink,\n series: (series: Series) => Core.AppLink\n };\n \n description: string;\n badgeComponent: JSX.Element;\n getAnalyticsData?: (itemIndex: number) => HashObject;\n}\n\nconst namespace = 'widgets.thumbnailFixedListMediaSmallWidgetTemplate';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function ThumbnailFixedListMediaSmallWidgetTemplate(\n props: ThumbnailFixedListMediaSmallWidgetTemplateProps\n): JSX.Element {\n const subTextMap: {[key in MasterType]?: string } = {\n [MasterType.Playlist]: getPhrase('playlist'),\n [MasterType.Series]: getPhrase('series')\n };\n\n const hoverTextMap: {[key in MasterType]?: string } = {\n [MasterType.Playlist]: getPhrase('viewPlaylist'),\n [MasterType.Series]: getPhrase('viewSeries')\n };\n \n function getAppLink(collection: SupportedContentType) {\n if (MasterTypeHelper.isType<Playlist>(collection, MasterType.Playlist)) {\n return props.appLinks.playlist(collection);\n }\n\n if (MasterTypeHelper.isType<Series>(collection, MasterType.Series)) {\n return props.appLinks.series(collection);\n }\n }\n\n return (\n <>\n <WidgetHeader\n name={props.name}\n description={props.description}\n showSeeMoreLink={!!props.seeMoreLink}\n appLink={props.seeMoreLink}\n badgeComponent={props.badgeComponent}\n />\n <Row as='ul' className='list-unstyled mx-n1 mb-n3'>\n {props.content.map((c, idx) => {\n const collectionAppLink = getAppLink(c);\n const subText = subTextMap[c?.typeId];\n const hoverText = hoverTextMap[c?.typeId];\n \n return (\n <Col as='li' key={c.id} lg={3} md={4} sm={6} xs={12} className='mb-3 px-1'>\n <CollectionThumbnail\n collection={c}\n appLink={collectionAppLink}\n analyticsOptions={{\n location: LocationContext.ThumbnailFixedListMediaSmallWidget\n }}\n analyticsData={props.getAnalyticsData(idx)}\n title={c?.name}\n titleAppLink={collectionAppLink}\n imageOptions={{\n size: ImageSize.Medium\n }}\n subText={subText}\n subTextAppLink={collectionAppLink}\n hoverText={hoverText}\n showVideoCount\n showMask\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}\n",":local {\n .subjectItem {\n aspect-ratio: 14 / 5;\n }\n} ","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nimport styles from './partial-thumbnail-fixed-list-small-widget-template.module.scss';\n\nexport function PartialThumbnailFixedSmallWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n const PARTIAL_SUBJECTS = [...Array(3)];\n\n return (\n <>\n <PartialWidgetHeader\n name={props.name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n hideDescription={props.hideDescription}\n />\n <Row className='mx-n1 '>\n {PARTIAL_SUBJECTS.map((_, i) => {\n return (\n <Col key={i} xl={4} md={6} xs={12} className='p-1'>\n <div className={`${styles.subjectItem} partial-loading-background rounded-3`} />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}\n","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { ThumbnailWidgetItem, ThumbnailWidgetItemProps } from 'libs/shared/components/widgets/items/thumbnail-widget-item/ThumbnailWidgetItem';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { Classification, Company, Presentation } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\n\ntype SupportedContent = Classification | Company;\n\ninterface GetThumbnailWidgetItemPropsOptions {\n item: SupportedContent;\n appLinks: ThumbnailFixedListSmallWidgetTemplateProps['appLinks'];\n appLinkOptions: ThumbnailFixedListSmallWidgetTemplateProps['appLinkOptions'];\n widgetTypeId: WidgetTypeId;\n availablePresentations?: Presentation[];\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\nfunction getPresentationName(item: Classification, presentations: Presentation[]): string {\n if (!item || !presentations)\n return;\n\n const itemPresentation = presentations.find(p => p.id && p.id === item.presentationId);\n\n if (!itemPresentation)\n return;\n\n return itemPresentation.name;\n}\n\nfunction getThumbnailWidgetItemProps(options: GetThumbnailWidgetItemPropsOptions): ThumbnailWidgetItemProps {\n const baseProps: ThumbnailWidgetItemProps = {\n data: {\n name: options.item.name,\n description: options.item.description\n }\n };\n\n if (MasterTypeHelper.isType<Classification>(options.item, MasterType.Subject)) {\n const isComingSoon = options.item?.status === ClassificationStatus.ComingSoon;\n const analyticsData = {\n ...options.analyticsData,\n id: options.item?.id,\n name: options.item?.name,\n presentationId: options.item?.presentationId,\n comingSoon: !!isComingSoon\n };\n \n const analyticsOptions = {\n location: LocationContext.ThumbnailFixedListSmallWidget,\n ...options.analyticsOptions,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n const itemPresentationName = options.widgetTypeId === WidgetTypeId.SearchRelevantTopics &&\n getPresentationName(options.item, options.availablePresentations);\n\n return {\n ...baseProps,\n data: {\n ...baseProps.data,\n preTitle: itemPresentationName,\n backgroundColor: options.item.metadata?.backgroundColor,\n coverUrl: ImageHelper.createUrl(options.item.cover?.url, { size: ImageSize.Small }),\n thumbnailUrl: ImageHelper.createUrl(options.item.thumbnail?.url, { size: ImageSize.Medium })\n },\n appLink: options.appLinks?.classification?.(options.item),\n analyticsData,\n analyticsOptions\n };\n }\n\n if (MasterTypeHelper.isType<Company>(options.item, MasterType.Company)) {\n return {\n ...baseProps,\n data: {\n ...baseProps.data,\n coverUrl: ImageHelper.createUrl(options.item.logo?.url, { size: ImageSize.Small }),\n backgroundColor: options.item.metadata?.colour\n },\n appLink: options.appLinks?.company?.(options.item),\n appLinkOptions: options.appLinkOptions?.company(options.item)\n };\n }\n\n return baseProps;\n}\n\nexport interface ThumbnailFixedListSmallWidgetTemplateProps {\n name: string;\n description: string;\n isPreviewing: boolean;\n widgetTypeId: WidgetTypeId;\n content: SupportedContent[];\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink,\n company: (playlist: Company) => Core.AppLink\n };\n seeMoreLink?: Core.AppLink;\n availablePresentations?: Presentation[];\n analyticsData?: HashObject;\n badgeComponent?: JSX.Element;\n getAnalyticsData?: (itemIndex: number) => HashObject;\n appLinkOptions?: {\n company: (company: Company) => Core.AppLinkOptions\n };\n isUpselling?: boolean;\n}\n\nexport function ThumbnailFixedListSmallWidgetTemplate(\n props: ThumbnailFixedListSmallWidgetTemplateProps\n): JSX.Element {\n function getContent(): SupportedContent[] {\n if ([\n WidgetTypeId.SearchRelevantTopics,\n WidgetTypeId.SearchCompanies\n ].includes(props.widgetTypeId)) {\n return props.content;\n }\n \n if (\n props.widgetTypeId !== WidgetTypeId.TrendingClassifications &&\n props.widgetTypeId !== WidgetTypeId.LatestReleasedClassifications\n ) {\n return props.content;\n }\n\n if (props.content.length < 6)\n return props.content.slice(0, 3);\n\n return props.content;\n }\n\n return (\n <>\n <WidgetHeader\n name={props.name}\n description={props.description}\n content={props.content}\n widgetTypeId={props.widgetTypeId}\n isPreviewing={props.isPreviewing}\n showSeeMoreLink={!!props.seeMoreLink}\n appLink={props.seeMoreLink}\n badgeComponent={props.badgeComponent}\n isUpselling={props.isUpselling}\n />\n <Row as='ul' className='list-unstyled mx-n1 mb-n2'>\n {getContent().map((c, idx) => {\n const analyticsData = typeof props.getAnalyticsData === 'function' ?\n props.getAnalyticsData(idx) :\n props.analyticsData;\n \n const thumbnailWidgetItemProps = getThumbnailWidgetItemProps({\n item: c,\n widgetTypeId: props.widgetTypeId,\n appLinks: props.appLinks,\n analyticsData: analyticsData,\n availablePresentations: props.availablePresentations,\n appLinkOptions: props.appLinkOptions\n });\n return (\n <Col as='li' key={c.id} xl={4} md={6} xs={12} className='px-1 pb-2'>\n <ThumbnailWidgetItem\n {...thumbnailWidgetItemProps}\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}\n","import React from 'react';\n\nimport { PartialHeroBannerWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner/partial-loading/PartialHeroBannerWidgetTemplate';\n\nexport function PartialThumbnailFixedListXLargeWidgetTemplate(): JSX.Element {\n return <PartialHeroBannerWidgetTemplate />;\n}\n","@import '~styles/utils/include-media';\n:local {\n .appLink:hover {\n text-decoration: none;\n cursor: pointer;\n }\n\n .container {\n background-repeat: no-repeat;\n background-position: right;\n background-size: contain;\n //fallback color\n background-color: $gray-900;\n\n padding: 0.9375rem;\n min-height: 9.7rem;\n }\n\n .content {\n width: 60%;\n padding-right: 1rem;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n\n .top {\n color: $white;\n font-size: 1rem;\n }\n\n .title {\n margin-bottom: 0.0725rem;\n line-height: normal;\n overflow-y: clip;\n overflow-x: visible;\n }\n\n .title:hover{\n text-decoration: underline;\n }\n\n .description {\n font-size: 0.875rem;\n margin-bottom: 0.937rem;\n }\n\n @include media('<=sm') {\n width: 100%;\n }\n }\n\n .description {\n @include media('<=sm') {\n display: none;\n }\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { HeroBannerWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner/HeroBannerWidgetTemplate';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Classification, WidgetCta } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './thumbnail-fixed-list-x-large.module.scss';\n\nconst namespace = 'shared.thumbnailFixedListXLarge';\n\nexport interface ThumbnailFixedListXLargeWidgetTemplateProps {\n name: string;\n content: Classification[];\n analyticsData?: HashObject;\n \n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink\n };\n metadata: {\n cta: WidgetCta\n };\n}\n\nexport function ThumbnailFixedListXLargeWidgetTemplate(\n props: ThumbnailFixedListXLargeWidgetTemplateProps\n): JSX.Element {\n const classification = ArrayHelper.first(props.content);\n\n const thumbnailUrl = ImageHelper.createUrl(classification.thumbnail?.url, { size: ImageSize.Medium });\n const backgroundColor = classification.metadata?.backgroundColor;\n\n const style: React.CSSProperties = {\n backgroundColor\n };\n\n if (thumbnailUrl)\n style.backgroundImage = `url('${thumbnailUrl}')`;\n\n const analyticsData = {\n ...props.analyticsData,\n id: classification.id,\n name: classification.name,\n presentationId: classification.presentationId\n };\n\n const analyticsOptions = {\n location: LocationContext.ClassificationListItem,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n if (!thumbnailUrl || !backgroundColor)\n return <HeroBannerWidgetTemplate {...props} />;\n\n return (\n <>\n <AppLink\n appLink={props.appLinks?.classification?.(classification)}\n className='text-decoration-none'\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <div\n className={`d-flex position-relative rounded-3 h-100 ${styles.container}`}\n style={style}\n >\n <div className={`${styles.content}`}>\n <div className={`${styles.top}`}>\n <h2 className={`${styles.title} text-decoration-none h4 text-nowrap text-truncate`}>{props.name}</h2>\n\n <div className={`text-start ${styles.description}`}>\n <p className='clamp-3'>{classification.description}</p>\n </div>\n </div>\n\n <div>\n <div className='btn btn-outline-dark text-nowrap'>\n {props.metadata?.cta?.text || LanguageService.getPhrase(namespace, 'buttonLabel')}\n </div>\n </div>\n </div>\n </div>\n </AppLink>\n </>\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .details {\n padding-top: map-get($spacers, 2);\n display: flex;\n justify-content: space-between;\n align-items: center;\n\n @include media(\"<md\") {\n flex-direction: column;\n align-items: flex-start;\n }\n }\n}","import React from 'react';\n\nimport { PartialVideoGuidance } from 'libs/shared/components/video-guidance/tag/partial-loading/PartialVideoGuidanceTag';\n\nimport styles from './partial-thumbnail-hero-media-widget-template.module.scss';\n\nexport const PartialThumbnailHeroMediaWidgetTemplate = () => (\n <div>\n <div className='w-100 partial-loading-background rounded-3' style={{ paddingBottom: '56.25%' }} />\n\n <div className={styles.details}>\n <div>\n <div style={{ height: '1.5rem' }}>\n <div className='partial-loading-background' style={{ height: '1.2rem', width: '12rem' }} />\n </div>\n <div className='partial-loading-background' style={{ height: '1.5625rem', width: '15rem' }}></div>\n </div>\n\n <div className='pt-2 mw-100'>\n <PartialVideoGuidance />\n </div>\n </div>\n </div>\n);\n","@import '~styles/utils/mixins';\n@import '~styles/utils/include-media';\n:local {\n .details {\n display: flex;\n justify-content: space-between;\n align-items: center;\n\n .guidance {\n gap: map-get($spacers, 1);\n }\n\n @include media('<=md') {\n flex-direction: column;\n align-items: flex-start;\n \n .guidance {\n margin-top: map-get($spacers, 1);\n }\n }\n }\n\n .responsiveGuidance {\n @include media('>md') {\n @include responsive-guidance-tags;\n }\n\n @include media('<=sm') {\n @include responsive-guidance-tags;\n }\n }\n\n .seriesTitleBox {\n height: 1.5rem;\n line-height: 1.5rem;\n }\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ClickDescriptor, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { VideoItemGuidance } from 'libs/shared/components/video-list/components/video-guidance/VideoItemGuidance';\nimport { VideoSubText } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { VideoTitle } from 'libs/shared/components/video-title/VideoTitle';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { PresentationAudience } from 'libs/shared/interfaces';\nimport { VideoWidgetTemplateContent } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { Video } from 'libs/shared/interfaces/models/Video';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './thumbnail-hero-media-widget-template.module.scss';\n\nexport interface ThumbnailHeroMediaWidgetTemplateProps {\n name: string;\n description: string;\n content: VideoWidgetTemplateContent;\n audiences: PresentationAudience[];\n widgetTypeId: WidgetTypeId;\n hasPermissions: HasPermissionsFunc;\n analyticsData?: HashObject;\n\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink\n };\n\n settings: {\n hasTopicDirectories: boolean\n };\n\n commonVideoProps: CommonVideoProps;\n}\n\nexport function ThumbnailHeroMediaWidgetTemplate(props: ThumbnailHeroMediaWidgetTemplateProps): JSX.Element {\n const video = ArrayHelper.first(WidgetHelper.getVideoContent(props.content));\n const containerRef = React.useRef(null);\n\n const mergedAudience = useMergeAudiences(video.subjectPresentationAudiences?.data, props.audiences);\n\n const hasSubText = VideoHelper.hasSeries(video) || WidgetHelper.isCompanyWidget(props.widgetTypeId);\n\n const analyticsOptions = {\n actionType: UserAction.Click,\n entity: VideoHelper.getAnalyticsEntity(video),\n location: LocationContext.ThumbnailHeroMediaWidget\n };\n\n const showNewVideoIndicator = props.settings?.hasTopicDirectories;\n\n const { canNavigate } = VideoHelper.getCanBeConsumed(video);\n\n if (!video)\n return <></>;\n\n return (\n <div>\n <WidgetHeader name={props.name} description={props.description} />\n\n <div ref={containerRef}>\n <VideoThumbnail\n video={video}\n imageOptions={{ size: ImageSize.Large }}\n type='static'\n textPosition={ThumbnailTextPosition.Independent}\n analyticsOptions={analyticsOptions}\n audience={mergedAudience}\n hideRating={!!mergedAudience}\n appLink={props.appLinks?.videoType?.(video, {})}\n commonVideoProps={props.commonVideoProps}\n />\n </div>\n\n <div className={styles.details}>\n <div>\n {VideoHelper.isVideo(video) && (\n <VideoSubText\n type={WidgetHelper.isCompanyWidget(props.widgetTypeId) ? 'productionCompany' : props.commonVideoProps.subTextType}\n video={video}\n appLink={props.commonVideoProps.getSubTextAppLink?.(video)}\n analyticsOptions={analyticsOptions}\n className={`mt-2 ${styles.seriesTitleBox}`}\n />\n )}\n\n <div className={hasSubText ? '' : 'mt-2'}>\n <AppLink\n appLink={props.appLinks?.videoType?.(video, {})}\n analyticsData={{\n id: video.id,\n name: video.name\n }}\n analyticsOptions={{\n ...analyticsOptions,\n descriptor: ClickDescriptor.Title\n }}\n className={`d-inline-block ${canNavigate ? '' : 'cursor-default text-decoration-none disabled'}`}\n disabled={!canNavigate}\n >\n <VideoTitle\n video={video}\n yearGroups={props.commonVideoProps.yearGroups}\n showNewVideoIndicator={showNewVideoIndicator}\n showPadlock={!props.commonVideoProps.hasStudentExperience && !props.commonVideoProps.hasGuestExperience}\n titleSize='h4'\n className='mb-0'\n />\n </AppLink>\n </div>\n </div>\n\n {VideoHelper.showVideoGuidance(props.hasPermissions) && (\n <VideoItemGuidance\n video={video}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n responsiveClassName={styles.responsiveGuidance}\n containerClassName={`d-flex mt-2 ${styles.guidance}`}\n commonVideoProps={props.commonVideoProps}\n />\n )}\n </div>\n </div>\n );\n}\n","import React from 'react';\n\nimport { PartialFixedWidget } from 'libs/shared/components/widgets/fixed-widget';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nexport function PartialThumbnailSlidingListLargeWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n return (\n <PartialFixedWidget\n size='lg'\n name={props.name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n />\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { VideoWidgetItem } from 'libs/shared/components/widgets/items/video-widget-item/v1';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Video, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nexport interface ThumbnailSlidingListLargeWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Video[];\n analyticsData?: HashObject;\n \n showHighlight?: boolean;\n\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink,\n widgetVideoList: (widgetId: string, widgetName: string) => Core.AppLink\n };\n\n commonVideoProps: CommonVideoProps;\n}\n\nexport function ThumbnailSlidingListLargeWidgetTemplate(\n props: ThumbnailSlidingListLargeWidgetTemplateProps\n): JSX.Element {\n return (\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.LargeRow}\n contents={WidgetContents.Videos}\n collection={props.content}\n childComponent={VideoWidgetItem}\n extraChildComponentProps={{\n commonVideoProps: props.commonVideoProps\n }}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n appLink={props.appLinks?.widgetVideoList?.(props.id, props.name)}\n />\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { VideoWidgetItem } from 'libs/shared/components/widgets/items/video-widget-item/v1';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Video, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nexport interface ThumbnailSlidingListSmallWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Video[];\n analyticsData?: HashObject;\n \n showHighlight?: boolean;\n\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink,\n widgetVideoList: (widgetId: string, widgetName: string) => Core.AppLink\n };\n\n commonVideoProps: CommonVideoProps;\n}\n\nexport function ThumbnailSlidingListSmallWidgetTemplate(\n props: ThumbnailSlidingListSmallWidgetTemplateProps\n): JSX.Element {\n return (\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Videos}\n collection={props.content}\n childComponent={VideoWidgetItem}\n extraChildComponentProps={{\n commonVideoProps: props.commonVideoProps\n }}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n appLink={props.appLinks?.widgetVideoList?.(props.id, props.name)}\n />\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .rowWidth {\n width: 25%;\n }\n\n @include media('<=xl') {\n .rowWidth {\n width: 33.33333%;\n }\n }\n\n @include media('<=md') {\n .rowWidth {\n width: 50%;\n }\n }\n\n @include media('<=sm') {\n .rowWidth {\n width: 100%;\n }\n }\n}","import React from 'react';\n\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { PresentationAudience, VideoTypes } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\n\nimport styles from './video-widget-item-v2.module.scss';\n\nexport interface VideoWidgetItemV2Props extends FixedWidgetItemProps<VideoTypes> {\n presentationAudiences: PresentationAudience[];\n commonVideoProps: CommonVideoProps;\n}\n\nexport const VideoWidgetItemV2 = React.memo(function(props: VideoWidgetItemV2Props): JSX.Element {\n const videoAudiences = props.data?.subjectPresentationAudiences?.data;\n const mergedAudience = useMergeAudiences(videoAudiences, props.presentationAudiences);\n\n return (\n <div className={`px-1 flex-shrink-0 position-relative ${styles.rowWidth}`}>\n <VideoThumbnail\n video={props.data}\n preload={props.preloadImage}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n type='static'\n appLink={props.getAppLink(props.data)}\n imageOptions={{ size: props.thumbnailSize }}\n textPosition={ThumbnailTextPosition.Below}\n audience={mergedAudience}\n hideRating={!!mergedAudience}\n hideDuration={false}\n commonVideoProps={props.commonVideoProps}\n />\n </div>\n );\n});\n",":local {\n .widgetTextButton {\n margin-top: 0.1rem;\n flex-shrink: 0;\n }\n\n // have to render this element with `widget-hover-reveal-boundary` class\n .revealOnHover {\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.15s ease-in-out;\n\n :global(.widget-hover-reveal-boundary):hover &,\n :global(.widget-hover-reveal-boundary):focus-within & {\n opacity: 1;\n pointer-events: auto;\n }\n }\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { Resource } from 'libs/shared/interfaces';\n\nimport styles from './download-all-resources-button.module.scss';\n\nconst namespace = 'shared.downloadAllResourcesButton';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface DownloadAllResourcesButtonProps {\n resources: Resource[];\n fileName: string;\n analyticsData?: HashObject;\n onDownloadAllClick: (resources: Resource[], fileName: string, analyticsData?: HashObject) => void;\n revealOnHover?: boolean;\n}\n\nexport function DownloadAllResourcesButton(props: DownloadAllResourcesButtonProps): JSX.Element {\n return (\n <div className={classNames('ms-3', styles.widgetTextButton, { [styles.revealOnHover]: props.revealOnHover })}>\n <DivButton\n onClick={() => props.onDownloadAllClick(props.resources, props.fileName, props.analyticsData)}\n >\n {getPhrase('downloadAll')}\n </DivButton>\n </div>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { LocalPermissionName } from 'libs/shared/enums/PermissionName';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { HasLocalPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { PresentationAudience, Resource, Series, Video, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { DownloadHelper } from 'libs/shared/utils/DownloadHelper';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { ResourceWidgetItem, ResourceWidgetItemProps } from '../../../items/resource-widget-item/ResourceWidgetItem';\nimport { VideoWidgetItemV2, VideoWidgetItemV2Props } from '../../../items/video-widget-item/v2/VideoWidgetItemV2';\nimport { DownloadAllResourcesButton } from '../../components/download-all-resources-button/DownloadAllResourcesButton';\n\ntype MultimediaWidgetItemProps = VideoWidgetItemV2Props & ResourceWidgetItemProps;\n\nfunction MultimediaWidgetItem(props: MultimediaWidgetItemProps): JSX.Element {\n if (VideoHelper.isVideoType(props.data)) {\n return <VideoWidgetItemV2 {...props} />;\n }\n\n function onClickDownload(e: React.MouseEvent<HTMLElement>, resource: Resource): void {\n e.preventDefault();\n e.stopPropagation();\n DownloadHelper.downloadResource(resource, props.analyticsData, props.analyticsOptions);\n }\n\n return (\n <ResourceWidgetItem {...props} location='dashboard' onClickDownload={onClickDownload} />\n );\n}\n\nexport interface ThumbnailSlidingListSmallV2WidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Video[];\n hasLocalPermissions: HasLocalPermissionsFunc;\n resourceThumbnailFallbackImageUrl: string;\n audiences: PresentationAudience[];\n analyticsData?: HashObject;\n \n showHighlight?: boolean;\n \n appLinks: {\n series: (series: Series) => Core.AppLink,\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink,\n resource: (resource: Resource, videoId: string, canViewResources: boolean) => Core.AppLink,\n widgetVideoList: (widgetId: string, widgetName: string) => Core.AppLink\n };\n\n commonVideoProps: CommonVideoProps;\n\n onDownloadAllClick?: (resources: Resource[], fileName: string, analyticsData?: HashObject) => void;\n}\n\nexport function ThumbnailSlidingListSmallV2WidgetTemplate(\n props: ThumbnailSlidingListSmallV2WidgetTemplateProps\n): JSX.Element {\n const canViewResources = props.hasLocalPermissions(LocalPermissionName.ViewVideoResourceItems);\n const downloadableResources = props.content.filter(MasterTypeHelper.isResource);\n // all content should be resource to be able to download in bulk\n const showDownloadAll = canViewResources &&\n downloadableResources.length > 0 && downloadableResources.length === props.content.length;\n\n return (\n <div className='widget-hover-reveal-boundary'>\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Videos}\n collection={props.content}\n childComponent={MultimediaWidgetItem}\n headerRightComponent={showDownloadAll ? (\n <DownloadAllResourcesButton\n resources={downloadableResources}\n fileName={`${props.name}-resources`}\n analyticsData={props.analyticsData}\n onDownloadAllClick={props.onDownloadAllClick}\n revealOnHover\n />\n ) : undefined}\n extraChildComponentProps={{\n imageErrorFallbackUrl: props.resourceThumbnailFallbackImageUrl,\n location: 'dashboard',\n titlePosition: 'below',\n actionBehaviour: canViewResources ? 'normal' : 'public',\n presentationAudiences: props.audiences,\n commonVideoProps: props.commonVideoProps,\n imageCdnUrl: props.commonVideoProps.imageCdnUrl\n }}\n getChildAppLink={item => {\n if (VideoHelper.isVideoType(item)) {\n return props.appLinks?.videoType?.(item, {});\n }\n\n return props.appLinks?.resource?.(item, item.parentId, canViewResources);\n }}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n appLink={props.appLinks?.widgetVideoList?.(props.id, props.name)}\n />\n </div>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateCoverFixedPillListLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 51'>\n <path\n d='M0 .4C0 .18.18 0 .4 0h34.764a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H.4a.4.4 0 0 1-.4-.4zm14.89.1v13h20.274a.5.5 0 0 0 .5-.5V1a.5.5 0 0 0-.5-.5zM.4 37a.4.4 0 0 0-.4.4v13.2c0 .22.18.4.4.4h34.764a1 1 0 0 0 1-1V38a1 1 0 0 0-1-1zm34.764 13.5H14.89v-13h20.273a.5.5 0 0 1 .5.5v12a.5.5 0 0 1-.5.5m5.254-13.1c0-.22.18-.4.4-.4h34.764a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H40.818a.4.4 0 0 1-.4-.4zm14.891.1v13h20.273a.5.5 0 0 0 .5-.5V38a.5.5 0 0 0-.5-.5zM40.82 0a.4.4 0 0 0-.4.4v13.2c0 .22.178.4.4.4h34.763a1 1 0 0 0 1-1V1a1 1 0 0 0-1-1zm14.49.5h20.273a.5.5 0 0 1 .5.5v12a.5.5 0 0 1-.5.5H55.309zM81.236 0a.4.4 0 0 0-.4.4v13.2c0 .22.18.4.4.4H116a1 1 0 0 0 1-1V1a1 1 0 0 0-1-1zm14.491 13.5V.5H116a.5.5 0 0 1 .5.5v12a.5.5 0 0 1-.5.5zM.4 18a.4.4 0 0 0-.4.4v13.2c0 .22.18.4.4.4h34.764a1 1 0 0 0 1-1V19a1 1 0 0 0-1-1zm14.49.5h20.274a.5.5 0 0 1 .5.5v12a.5.5 0 0 1-.5.5H14.89zm25.928-.5a.4.4 0 0 0-.4.4v13.2c0 .22.18.4.4.4h34.764a1 1 0 0 0 1-1V19a1 1 0 0 0-1-1zm14.491.5h20.273a.5.5 0 0 1 .5.5v12a.5.5 0 0 1-.5.5H55.309zm25.927-.5a.4.4 0 0 0-.4.4v13.2c0 .22.18.4.4.4H116a1 1 0 0 0 1-1V19a1 1 0 0 0-1-1zm14.491 13.5v-13H116a.5.5 0 0 1 .5.5v12a.5.5 0 0 1-.5.5z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateCoverFixedPillListXSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 93 44'>\n <path\n d='M.7 0a.7.7 0 0 0-.7.7v6.6a.7.7 0 0 0 .7.7h6.6a.7.7 0 0 0 .7-.7V.7a.7.7 0 0 0-.7-.7zm11.115 2.5c-.666 0-1.206.537-1.206 1.2v.6c0 .663.54 1.2 1.206 1.2h27.589c.665 0 1.205-.537 1.205-1.2v-.6c0-.663-.54-1.2-1.206-1.2zM52 .7a.7.7 0 0 1 .7-.7h6.6a.7.7 0 0 1 .7.7v6.6a.7.7 0 0 1-.7.7h-6.6a.7.7 0 0 1-.7-.7zm10.61 3c0-.663.54-1.2 1.205-1.2h27.588c.666 0 1.206.537 1.206 1.2v.6c0 .663-.54 1.2-1.206 1.2H63.815a1.203 1.203 0 0 1-1.206-1.2zM52 12.7a.7.7 0 0 1 .7-.7h6.6a.7.7 0 0 1 .7.7v6.6a.7.7 0 0 1-.7.7h-6.6a.7.7 0 0 1-.7-.7zm10.61 3c0-.663.54-1.2 1.205-1.2h27.588c.666 0 1.206.537 1.206 1.2v.6c0 .663-.54 1.2-1.206 1.2H63.815a1.203 1.203 0 0 1-1.206-1.2zM52.7 24a.7.7 0 0 0-.7.7v6.6a.7.7 0 0 0 .7.7h6.6a.7.7 0 0 0 .7-.7v-6.6a.7.7 0 0 0-.7-.7zm11.115 2.5c-.666 0-1.206.537-1.206 1.2v.6c0 .663.54 1.2 1.206 1.2h27.588c.666 0 1.206-.537 1.206-1.2v-.6c0-.663-.54-1.2-1.206-1.2zM52 36.7a.7.7 0 0 1 .7-.7h6.6a.7.7 0 0 1 .7.7v6.6a.7.7 0 0 1-.7.7h-6.6a.7.7 0 0 1-.7-.7zm10.61 3c0-.663.54-1.2 1.205-1.2h27.588c.666 0 1.206.537 1.206 1.2v.6c0 .663-.54 1.2-1.206 1.2H63.815a1.203 1.203 0 0 1-1.206-1.2zM0 12.7a.7.7 0 0 1 .7-.7h6.6a.7.7 0 0 1 .7.7v6.6a.7.7 0 0 1-.7.7H.7a.7.7 0 0 1-.7-.7zm10.61 3c0-.663.54-1.2 1.205-1.2h27.589c.665 0 1.205.537 1.205 1.2v.6c0 .663-.54 1.2-1.206 1.2H11.816a1.203 1.203 0 0 1-1.206-1.2zM.7 24a.7.7 0 0 0-.7.7v6.6a.7.7 0 0 0 .7.7h6.6a.7.7 0 0 0 .7-.7v-6.6a.7.7 0 0 0-.7-.7zm11.115 2.5c-.666 0-1.206.537-1.206 1.2v.6c0 .663.54 1.2 1.206 1.2h27.589c.665 0 1.205-.537 1.205-1.2v-.6c0-.663-.54-1.2-1.206-1.2zM0 36.7a.7.7 0 0 1 .7-.7h6.6a.7.7 0 0 1 .7.7v6.6a.7.7 0 0 1-.7.7H.7a.7.7 0 0 1-.7-.7zm10.61 3c0-.663.54-1.2 1.205-1.2h27.589c.665 0 1.205.537 1.205 1.2v.6c0 .663-.54 1.2-1.206 1.2H11.816a1.203 1.203 0 0 1-1.206-1.2z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateFeedbackCtaSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props} viewBox='0 0 117 14'>\n <path d='M2 0h10a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2z' fill='currentColor' />\n <path d='M18 5h56a2 2 0 0 1 0 4H18a2 2 0 0 1 0-4z' fill='currentColor' />\n <path\n fillRule='evenodd'\n d='M84 1h27a6 6 0 0 1 0 12H84a6 6 0 0 1 0-12zm0 2h27a4 4 0 0 1 0 8H84a4 4 0 0 1 0-8z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplatePopoutThumbnailSlidingListSmallCtaSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 32'>\n <path d='M18.5967 28C19.3721 28.0003 20 28.8956 20 30C20 31.1042 19.3721 31.9997 18.5967 32H1.40332C0.628292 31.9997 9.25822e-05 31.1042 0 30C0 28.8956 0.628235 28.0003 1.40332 28H18.5967Z'/>\n <path d='M48.5967 28C49.3721 28.0002 50 28.8955 50 30C50 31.1042 49.372 31.9998 48.5967 32H31.4033C30.6282 31.9997 30 31.1042 30 30C30 28.8956 30.6282 28.0003 31.4033 28H48.5967Z'/>\n <path d='M78.5967 28C79.372 28.0002 80 28.8955 80 30C80 31.1042 79.372 31.9998 78.5967 32H61.4033C60.6282 31.9997 60 31.1042 60 30C60 28.8956 60.6282 28.0003 61.4033 28H78.5967Z'/>\n <path d='M107.596 28C108.372 28 109 28.8954 109 30C109 31.1043 108.372 32 107.596 32H90.4033C89.6283 31.9998 89 31.1042 89 30C89 28.8955 89.6283 28.0002 90.4033 28H107.596Z'/>\n <path d='M27.5 10C27.7761 10 28 10.2239 28 10.5V25.5C27.9998 25.7759 27.7761 26 27.5 26H0.5C0.223944 26 0.00013193 25.7759 0 25.5V10.5C0 10.2239 0.223862 10 0.5 10H27.5Z'/>\n <path d='M57.5 10C57.7761 10 58 10.2239 58 10.5V25.5C57.9998 25.7759 57.7761 26 57.5 26H30.5C30.2239 26 30.0002 25.7759 30 25.5V10.5C30 10.2239 30.2239 10 30.5 10H57.5Z'/>\n <path d='M86.5 10C86.7761 10 87 10.2239 87 10.5V25.5C86.9998 25.7759 86.7761 26 86.5 26H60.5C60.2239 26 60.0002 25.7759 60 25.5V10.5C60 10.2239 60.2239 10 60.5 10H86.5Z'/>\n <path d='M102.4 14.5C104.002 14.5004 105.3 15.799 105.3 17.4004C105.3 18.1875 104.984 18.8994 104.475 19.4219C104.465 19.4298 104.455 19.4375 104.446 19.4463C104.437 19.4552 104.43 19.4653 104.422 19.4746C103.899 19.9838 103.188 20.2996 102.4 20.2998C100.799 20.2998 99.5004 19.0017 99.5 17.4004C99.5 15.7988 100.799 14.5 102.4 14.5Z'/>\n <path d='M116.5 10C116.776 10 117 10.2239 117 10.5V25.5C117 25.7759 116.776 26 116.5 26H89.5C89.2239 26 89.0002 25.7759 89 25.5V10.5C89 10.2239 89.2239 10 89.5 10H116.5ZM102.4 13.5C100.246 13.5 98.5 15.2465 98.5 17.4004C98.5004 19.554 100.247 21.2998 102.4 21.2998C103.297 21.2996 104.122 20.9957 104.78 20.4873L107.047 22.7539C107.242 22.9487 107.559 22.9489 107.754 22.7539C107.949 22.5588 107.949 22.2422 107.754 22.0469L105.487 19.7803C105.996 19.1216 106.3 18.2967 106.3 17.4004C106.3 15.2467 104.554 13.5004 102.4 13.5Z'/>\n <path d='M46.5 0C47.8807 0 49 1.11929 49 2.5C48.9998 3.88059 47.8807 5 46.5 5H2.5C1.11937 5 0.000131935 3.88059 0 2.5C0 1.11929 1.11929 0 2.5 0H46.5Z'/>\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplatePosterSlidingListLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 60'>\n <path\n d='M0 2a2 2 0 0 1 2-2h45.852a2 2 0 0 1 2 2v1a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2zm0 8.795C0 10.356.356 10 .795 10h26.406c.439 0 .795.356.795.795V58.99c0 .44-.356.795-.795.795H.795A.795.795 0 0 1 0 58.99zM30.41 10a.795.795 0 0 0-.796.795V58.99c0 .44.356.795.795.795h26.406c.439 0 .795-.355.795-.795V10.795a.795.795 0 0 0-.795-.795zm28.818.795c0-.439.356-.795.795-.795h26.568c.439 0 .795.356.795.795V58.99c0 .44-.356.795-.795.795H60.024a.795.795 0 0 1-.796-.795zM89.638 10a.795.795 0 0 0-.796.795V58.99c0 .44.356.795.796.795h26.567a.795.795 0 0 0 .795-.795V10.795a.795.795 0 0 0-.795-.795z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplatePosterSlidingListMediumSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 50'>\n <path\n d='M2 0a2 2 0 0 0-2 2v1a2 2 0 0 0 2 2h45.852a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zM.632 10a.63.63 0 0 0-.632.632v38.319c0 .349.283.632.632.632h20.994c.35 0 .633-.283.633-.633V10.633a.63.63 0 0 0-.633-.632zm22.913.632c0-.349.283-.632.632-.632h20.994c.35 0 .633.283.633.632v38.319c0 .349-.283.632-.633.632H24.178a.63.63 0 0 1-.633-.633zM47.723 10a.63.63 0 0 0-.633.632v38.319c0 .349.283.632.633.632h21.122c.35 0 .633-.283.633-.633V10.633a.63.63 0 0 0-.633-.632zm46.89.632c0-.349.283-.632.632-.632h21.123c.349 0 .632.283.632.632v38.319c0 .349-.283.632-.632.632H95.245a.63.63 0 0 1-.632-.633zM71.268 10a.63.63 0 0 0-.633.632v38.319c0 .349.283.632.633.632H92.39a.63.63 0 0 0 .632-.633V10.633A.63.63 0 0 0 92.39 10z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplatePosterSlidingListSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 44'>\n <path\n d='M0 2a2 2 0 0 1 2-2h45.852a2 2 0 0 1 2 2v1a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2zm0 8.533C0 10.239.24 10 .537 10H18.05c.296 0 .537.239.537.533v32.302c0 .295-.24.533-.537.533H.537A.535.535 0 0 1 0 42.835zM20.198 10a.535.535 0 0 0-.537.533v32.302c0 .295.24.533.537.533h17.513a.535.535 0 0 0 .537-.533V10.533A.535.535 0 0 0 37.71 10zm19.124.533c0-.294.24-.533.537-.533h17.62c.297 0 .538.239.538.533v32.302c0 .295-.241.533-.538.533H39.86a.535.535 0 0 1-.537-.533zM59.521 10a.535.535 0 0 0-.538.533v32.302c0 .295.241.533.538.533h17.62a.535.535 0 0 0 .537-.533V10.533A.535.535 0 0 0 77.14 10zm19.231.533c0-.294.24-.533.537-.533h17.513c.296 0 .537.239.537.533v32.302c0 .295-.24.533-.537.533H79.289a.535.535 0 0 1-.537-.533zM98.95 10a.535.535 0 0 0-.537.533v32.302c0 .295.24.533.537.533h17.513a.535.535 0 0 0 .537-.533V10.533a.535.535 0 0 0-.537-.533z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateStatsCoverFixedPillListLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 81 31'>\n <g clipPath='url(#a)'>\n <path\n fill='currentColor'\n d='M0 1.643a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1H1a1 1 0 0 1-1-1zm11 0a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H12a1 1 0 0 1-1-1zm-11 11a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1H1a1 1 0 0 1-1-1zm11 0a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H12a1 1 0 0 1-1-1zm-10 10a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1v-6a1 1 0 0 0-1-1zm11 0a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1zm16-21a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1zm11 0a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H40a1 1 0 0 1-1-1zm-10 10a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1v-6a1 1 0 0 0-1-1zm11 0a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1zm-12 12a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1zm11 0a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H40a1 1 0 0 1-1-1zm18-23a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1v-6a1 1 0 0 0-1-1zm11 0a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1zm-12 12a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1zm11 0a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H68a1 1 0 0 1-1-1zm-10 10a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1v-6a1 1 0 0 0-1-1zm11 0a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1z'\n />\n </g>\n <defs>\n <clipPath id='a'>\n <path fill='currentColor' d='M0 .643h81v30H0z' />\n </clipPath>\n </defs>\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailFeaturedMediaSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 44'>\n <path\n d='M2.762 0a2.762 2.762 0 0 0 0 5.524h49.076a2.762 2.762 0 1 0 0-5.524zM1.065 11.048A1.06 1.06 0 0 0 0 12.103v30.085a1.06 1.06 0 0 0 1.065 1.056h54.699a1.06 1.06 0 0 0 1.065-1.056V12.103a1.06 1.06 0 0 0-1.065-1.055zm61.878 0a1.657 1.657 0 1 0 0 3.314h52.4a1.657 1.657 0 0 0 0-3.314zm-1.657 8.285c0-.915.742-1.657 1.657-1.657h52.4a1.657 1.657 0 0 1 0 3.315h-52.4a1.657 1.657 0 0 1-1.657-1.658'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailHeroMediaSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 67'>\n <path\n d='M0 2.192C0 .982.981 0 2.192 0h112.616C116.019 0 117 .981 117 2.192v62.473c0 1.21-.981 2.192-2.192 2.192H2.192A2.19 2.19 0 0 1 0 64.665z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\nimport { Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { AnalyticsOptions, HashObject } from 'libs/analytics/interfaces';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport {\n getPartnerWidgetItemProps,\n RectangularLogoWidgetItem\n} from 'libs/shared/components/widgets/items/rectangular-logo-widget-item/RectangularLogoWidgetItem';\nimport { PartnerProfile } from 'libs/shared/interfaces';\n\nexport interface RectangularLogoFixedListWidgetTemplateProps {\n name: string;\n description?: string;\n badgeComponent?: JSX.Element;\n content: PartnerProfile[];\n appLinks: {\n partner: (partnerProfile: PartnerProfile) => Core.AppLink\n };\n seeMoreLink?: Core.AppLink;\n analyticsOptions?: AnalyticsOptions;\n analyticsData?: HashObject;\n}\n\nexport function RectangularLogoFixedListWidgetTemplate(\n props: RectangularLogoFixedListWidgetTemplateProps\n): JSX.Element {\n return (\n <>\n <WidgetHeader\n name={props.name}\n description={props.description}\n badgeComponent={props.badgeComponent}\n appLink={props.seeMoreLink}\n showSeeMoreLink={!!props.seeMoreLink}\n />\n <Row as='ul' className='list-unstyled mx-n1 mb-n1 row-gap-3'>\n {props.content.map((c, idx) => {\n const widgetProps = getPartnerWidgetItemProps({\n analyticsData: props.analyticsData,\n analyticsOptions: props.analyticsOptions,\n partner: c,\n appLink: props.appLinks.partner(c)\n });\n\n return <RectangularLogoWidgetItem key={idx} {...widgetProps} />;\n })}\n </Row>\n </>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateAuthorReviewerSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 34'>\n <path\n fill='currentColor'\n d='M55.055.922H1.462C.654.922 0 1.588 0 2.41v29.745c0 .822.654 1.488 1.462 1.488h53.593c.807 0 1.462-.666 1.462-1.488V2.41c0-.822-.655-1.488-1.462-1.488M.975 32.155V2.41c0-.274.218-.496.487-.496h53.593c.27 0 .487.222.487.496v29.745a.49.49 0 0 1-.487.496H1.462a.49.49 0 0 1-.488-.496m10.23-14.873c2.692 0 4.873-2.22 4.873-4.957 0-2.738-2.181-4.958-4.872-4.958s-4.872 2.22-4.872 4.958 2.181 4.958 4.872 4.958m11.408-6.742c-.65 0-1.175.533-1.175 1.19v.595c0 .657.526 1.19 1.175 1.19H39.75c.649 0 1.175-.533 1.175-1.19v-.595c0-.657-.526-1.19-1.175-1.19zM7.509 22.934c-.65 0-1.175.533-1.175 1.19v.595c0 .657.526 1.19 1.175 1.19h42.473c.65 0 1.176-.533 1.176-1.19v-.595c0-.657-.527-1.19-1.176-1.19zM115.513.922H60.979c-.822 0-1.487.666-1.487 1.488v29.745c0 .822.666 1.488 1.487 1.488h54.534c.821 0 1.487-.666 1.487-1.488V2.41c0-.822-.666-1.488-1.487-1.488m-55.03 31.233V2.41c0-.274.222-.496.496-.496h54.534c.273 0 .495.222.495.496v29.745a.496.496 0 0 1-.495.496H60.979a.496.496 0 0 1-.496-.496m10.411-14.873a4.958 4.958 0 1 0 0-9.915 4.958 4.958 0 0 0 0 9.915m11.607-6.742c-.66 0-1.196.533-1.196 1.19v.595c0 .657.535 1.19 1.196 1.19H99.94c.66 0 1.196-.533 1.196-1.19v-.595c0-.657-.536-1.19-1.196-1.19zM67.132 22.934c-.66 0-1.196.533-1.196 1.19v.595c0 .657.536 1.19 1.196 1.19h43.219c.66 0 1.196-.533 1.196-1.19v-.595c0-.657-.536-1.19-1.196-1.19z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateCircleLogoSlidingListSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 22'>\n <path\n d='M0 2C0 .895.844 0 1.886 0h43.228C46.156 0 47 .895 47 2v1c0 1.105-.844 2-1.886 2H1.886C.844 5 0 4.105 0 3zm11.524 14.238a5.762 5.762 0 1 1-11.524 0 5.762 5.762 0 0 1 11.524 0M20.429 22a5.762 5.762 0 1 0 0-11.524 5.762 5.762 0 0 0 0 11.524m21.476-5.762a5.762 5.762 0 1 1-11.524 0 5.762 5.762 0 0 1 11.524 0M50.809 22a5.762 5.762 0 1 0 0-11.524 5.762 5.762 0 0 0 0 11.524m20.43-5.762a5.762 5.762 0 1 1-11.525 0 5.762 5.762 0 0 1 11.524 0M80.142 22a5.762 5.762 0 1 0 0-11.524 5.762 5.762 0 0 0 0 11.524m20.428-5.762a5.762 5.762 0 1 1-11.523 0 5.762 5.762 0 0 1 11.523 0M110.524 22a5.762 5.762 0 1 0 0-11.524 5.762 5.762 0 0 0 0 11.524'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateCoverFixedTileListSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 57'>\n <path\n d='M0 2.543A2.543 2.543 0 0 1 2.543 0H47.31a2.544 2.544 0 0 1 0 5.087H2.543A2.543 2.543 0 0 1 0 2.543m47.817 8.14c0-.281.228-.51.51-.51h20.347c.28 0 .509.229.509.51v21.365a.51.51 0 0 1-.51.508H48.327a.51.51 0 0 1-.509-.508zm-22.89-.51a.51.51 0 0 0-.51.51v21.365c0 .28.228.508.51.508h20.347a.51.51 0 0 0 .509-.508V10.683a.51.51 0 0 0-.51-.51zm69.69.51c0-.281.228-.51.51-.51h21.364a.51.51 0 0 1 .509.51v21.365a.51.51 0 0 1-.509.508H95.126a.51.51 0 0 1-.509-.508zm-22.89-.51a.51.51 0 0 0-.51.51v21.365c0 .28.228.508.51.508h20.347a.51.51 0 0 0 .509-.508V10.683a.51.51 0 0 0-.51-.51zM0 10.684c0-.281.228-.51.509-.51h21.365c.28 0 .509.229.509.51v21.365a.51.51 0 0 1-.51.508H.51A.51.51 0 0 1 0 32.048zM48.326 34.59a.51.51 0 0 0-.509.51v21.364c0 .281.228.509.51.509h20.347a.51.51 0 0 0 .509-.509V35.1a.51.51 0 0 0-.51-.509zm-23.909.51c0-.282.228-.51.51-.51h20.347c.28 0 .509.228.509.51v21.364a.51.51 0 0 1-.51.509H24.927a.51.51 0 0 1-.509-.509zM.51 34.59a.51.51 0 0 0-.509.51v21.364c0 .281.228.509.509.509h21.365a.51.51 0 0 0 .509-.509V35.1a.51.51 0 0 0-.51-.509z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateCoverSlidingPillListSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 19'>\n <path\n d='M0 2a2 2 0 0 1 2-2h45.755a2 2 0 0 1 2 2v1a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2zm27.432 7H1a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h26.432a1 1 0 0 0 1-1v-8a1 1 0 0 0-1-1m0 9.5H10.154v-9h17.278a.5.5 0 0 1 .5.5v8a.5.5 0 0 1-.5.5m60.91-8.5a1 1 0 0 0-1-1h-22.37a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h22.37a1 1 0 0 0 1-1zm-1 8.5H74.124v-9h13.216a.5.5 0 0 1 .5.5v8a.5.5 0 0 1-.5.5M60.94 9H31.462a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1H60.94a1 1 0 0 0 1-1v-8a1 1 0 0 0-1-1m0 9.5H40.617v-9H60.94a.5.5 0 0 1 .5.5v8a.5.5 0 0 1-.5.5m55.833-8.5a1 1 0 0 0-1-1h-24.4a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h24.4a1 1 0 0 0 1-1zm-1 8.5h-15.247v-9h15.247a.5.5 0 0 1 .5.5v8a.5.5 0 0 1-.5.5'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateEditableCoverFixedPillListSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 40'>\n <path\n d='M.976 0h25.798c.539 0 .976.537.976 1.2v9.6c0 .663-.437 1.2-.976 1.2H.976C.437 12 0 11.463 0 10.8V1.2C0 .537.437 0 .976 0m8.935 11.4h16.863c.27 0 .488-.269.488-.6V1.2c0-.331-.218-.6-.488-.6H9.911zM30.726 0h25.798c.539 0 .976.537.976 1.2v9.6c0 .663-.437 1.2-.976 1.2H30.726c-.539 0-.976-.537-.976-1.2V1.2c0-.663.437-1.2.976-1.2m8.935 11.4h16.863c.27 0 .488-.269.488-.6V1.2c0-.331-.218-.6-.488-.6H39.661zM86.274 0H60.476c-.539 0-.976.537-.976 1.2v9.6c0 .663.437 1.2.976 1.2h25.798c.539 0 .976-.537.976-1.2V1.2c0-.663-.437-1.2-.976-1.2m0 11.4H69.411V.6h16.863c.27 0 .488.269.488.6v9.6c0 .331-.219.6-.488.6M90.226 0h25.798c.539 0 .976.537.976 1.2v9.6c0 .663-.437 1.2-.976 1.2H90.226c-.539 0-.976-.537-.976-1.2V1.2c0-.663.437-1.2.976-1.2m8.935 11.4h16.863c.27 0 .488-.269.488-.6V1.2c0-.331-.218-.6-.488-.6H99.161zM26.774 14H.976C.437 14 0 14.537 0 15.2v9.6c0 .663.437 1.2.976 1.2h25.798c.539 0 .976-.537.976-1.2v-9.6c0-.663-.437-1.2-.976-1.2m0 11.4H9.911V14.6h16.863c.27 0 .488.269.488.6v9.6c0 .331-.218.6-.488.6M30.726 14h25.798c.539 0 .976.537.976 1.2v9.6c0 .663-.437 1.2-.976 1.2H30.726c-.539 0-.976-.537-.976-1.2v-9.6c0-.663.437-1.2.976-1.2m8.935 11.4h16.863c.27 0 .488-.269.488-.6v-9.6c0-.331-.218-.6-.488-.6H39.661zM86.274 14H60.476c-.539 0-.976.537-.976 1.2v9.6c0 .663.437 1.2.976 1.2h25.798c.539 0 .976-.537.976-1.2v-9.6c0-.663-.437-1.2-.976-1.2m0 11.4H69.411V14.6h16.863c.27 0 .488.269.488.6v9.6c0 .331-.219.6-.488.6M90.226 14h25.798c.539 0 .976.537.976 1.2v9.6c0 .663-.437 1.2-.976 1.2H90.226c-.539 0-.976-.537-.976-1.2v-9.6c0-.663.437-1.2.976-1.2m8.935 11.4h16.863c.27 0 .488-.269.488-.6v-9.6c0-.331-.218-.6-.488-.6H99.161zM26.774 28H.976C.437 28 0 28.537 0 29.2v9.6c0 .663.437 1.2.976 1.2h25.798c.539 0 .976-.537.976-1.2v-9.6c0-.663-.437-1.2-.976-1.2m0 11.4H9.911V28.6h16.863c.27 0 .488.269.488.6v9.6c0 .331-.218.6-.488.6M30.726 28h25.798c.539 0 .976.537.976 1.2v9.6c0 .663-.437 1.2-.976 1.2H30.726c-.539 0-.976-.537-.976-1.2v-9.6c0-.663.437-1.2.976-1.2m8.935 11.4h16.863c.27 0 .488-.269.488-.6v-9.6c0-.331-.218-.6-.488-.6H39.661z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateEventIconSlidingListSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 32'>\n <path\n d='M2.5 0a2.5 2.5 0 0 0 0 5h44.852a2.5 2.5 0 0 0 0-5zm46.317 31h20V11h-20zm-1-20.5a.5.5 0 0 1 .5-.5h21a.5.5 0 0 1 .5.5v21a.5.5 0 0 1-.5.5h-21a.5.5 0 0 1-.5-.5zM57.1 24.701h.136q.944 0 1.573-.246.634-.253 1.011-.697t.54-1.046q.117-.426.15-.903l-.013.014q-.375.41-.882.657a2.4 2.4 0 0 1-1.087.246q-.71 0-1.258-.267a2.64 2.64 0 0 1-.902-.738 3.3 3.3 0 0 1-.533-1.067 4.4 4.4 0 0 1-.178-1.264q0-.718.219-1.347.219-.63.636-1.107a2.86 2.86 0 0 1 1.011-.752 3.25 3.25 0 0 1 1.36-.274q.808 0 1.416.315t1.025.868q.417.553.63 1.285.21.732.211 1.572v.581q0 .883-.157 1.702a5.7 5.7 0 0 1-.513 1.511q-.348.69-.923 1.217a4 4 0 0 1-1.394.813q-.82.288-1.928.287h-.15zm3.424-5.01v.658q-.135.305-.369.551-.24.253-.56.404a1.7 1.7 0 0 1-.704.143q-.404 0-.704-.17a1.5 1.5 0 0 1-.5-.466 2.2 2.2 0 0 1-.3-.67 3.3 3.3 0 0 1-.096-.792q0-.439.103-.82.11-.39.307-.677a1.5 1.5 0 0 1 .5-.458q.3-.171.676-.171.342 0 .636.157.3.157.526.472.232.307.355.772.13.457.13 1.066M24.917 10a.5.5 0 0 0-.5.5v21a.5.5 0 0 0 .5.5h21a.5.5 0 0 0 .5-.5v-21a.5.5 0 0 0-.5-.5zM95 10.5a.5.5 0 0 1 .5-.5h21a.5.5 0 0 1 .5.5v21a.5.5 0 0 1-.5.5h-21a.5.5 0 0 1-.5-.5zM71.717 10a.5.5 0 0 0-.5.5v21a.5.5 0 0 0 .5.5h21a.5.5 0 0 0 .5-.5v-21a.5.5 0 0 0-.5-.5zM1 11h20v20H1zm-.5-1a.5.5 0 0 0-.5.5v21a.5.5 0 0 0 .5.5h21a.5.5 0 0 0 .5-.5v-21a.5.5 0 0 0-.5-.5zm13.884 6.95v-.903H7.486v1.312h5.155L8.669 26h1.736z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateFeaturedThumbnailSlidingListSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 27'>\n <path\n d='M5 0a5 5 0 0 0-5 5 4 4 0 0 0 4 4h109a4 4 0 0 0 4-4 5 5 0 0 0-5-5zM0 11.5a.5.5 0 0 1 .5-.5h27a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5zm30.5-.5a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h27a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5zm29.5.5a.5.5 0 0 1 .5-.5h26a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-.5.5h-26a.5.5 0 0 1-.5-.5zm29 0a.5.5 0 0 1 .5-.5h27a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-.5.5h-27a.5.5 0 0 1-.5-.5z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateFilterSlidingPillListSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 19'>\n <path\n d='M2 0a2 2 0 0 0-2 2v1a2 2 0 0 0 2 2h45.755a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zM1 9a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h25a1 1 0 0 0 1-1v-8a1 1 0 0 0-1-1zm59 1a1 1 0 0 1 1-1h25a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1H61a1 1 0 0 1-1-1zM31 9a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h25a1 1 0 0 0 1-1v-8a1 1 0 0 0-1-1zm59 1a1 1 0 0 1 1-1h25a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1H91a1 1 0 0 1-1-1z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateHeadingSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props} viewBox='0 0 117 25'>\n <path\n d='M4.77.78h48.839a4.5 4.5 0 1 1 0 9H4.769a4.5 4.5 0 1 1 0-9M.27 16.479c0 .914.74 1.655 1.655 1.655h112.932a1.655 1.655 0 0 0 0-3.31H1.925c-.915 0-1.655.741-1.655 1.655m0 6c0-.914.74-1.655 1.655-1.655h112.932a1.655 1.655 0 0 1 0 3.31H1.925A1.655 1.655 0 0 1 .27 22.478'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateHeroBannerSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 10'>\n <path\n d='M0 .391C0 .175.38 0 .847 0h115.306c.468 0 .847.175.847.391V9.61c0 .216-.379.391-.847.391H.847C.38 10 0 9.825 0 9.609z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateHeroBannerSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 22'>\n <path\n d='M0 .847C0 .38.38 0 .847 0h115.306c.468 0 .847.38.847.847v19.95a.847.847 0 0 1-.847.848H.847A.847.847 0 0 1 0 20.798z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateHeroBlockColourSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 119 12'>\n <path\n fill='currentColor'\n d='M1.847.143c-.29 0-.576.053-.809.16C.848.391.5.613.5 1.034v9.217c0 .42.348.643.538.731.233.107.52.16.81.16h115.305c.289 0 .576-.053.809-.16.19-.088.538-.31.538-.73V1.033c0-.42-.348-.643-.538-.73a2 2 0 0 0-.809-.161zM1.5 10.09V1.194c.079-.027.199-.051.347-.051H117.5v9H1.847c-.148 0-.268-.024-.347-.052'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateHeroThumbnailSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 119 12'>\n <path\n fill='currentColor'\n d='M1.847.5c-.29 0-.576.053-.809.16C.848.75.5.972.5 1.392v9.218c0 .42.348.642.538.73.233.108.52.161.81.161h115.305c.289 0 .576-.053.809-.16.19-.089.538-.311.538-.731V1.39c0-.42-.348-.642-.538-.73a2 2 0 0 0-.809-.161zM1.5 10.448V1.552c.079-.028.199-.052.347-.052H82v9H1.847c-.148 0-.268-.024-.347-.052'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplatePopoutThumbnailSlidingListLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 38'>\n <path\n d='M0 2.688a2.5 2.5 0 0 1 2.5-2.5h45.733a2.5 2.5 0 0 1 0 5H2.5a2.5 2.5 0 0 1-2.5-2.5m79.427 8a.5.5 0 0 1 .5-.5H116.5a.5.5 0 0 1 .5.5V30.64a.5.5 0 0 1-.5.5H79.927a.5.5 0 0 1-.5-.5zm-39.714 0a.5.5 0 0 1 .5-.5h36.573a.5.5 0 0 1 .5.5V30.64a.5.5 0 0 1-.5.5H40.213a.5.5 0 0 1-.5-.5zM0 10.688a.5.5 0 0 1 .5-.5h36.573a.5.5 0 0 1 .5.5V30.64a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5zm.028 24.466a2 2 0 0 1 2-2h24.497a2 2 0 0 1 0 4H2.028a2 2 0 0 1-2-2m39.75 0a2 2 0 0 1 2-2h24.498a2 2 0 1 1 0 4H41.78a2 2 0 0 1-2-2m39.61 0a2 2 0 0 1 2-2h24.498a2 2 0 1 1 0 4H81.389a2 2 0 0 1-2-2'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplatePopoutThumbnailSlidingListSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 32'>\n <path\n d='M2.5 0a2.5 2.5 0 0 0 0 5h44a2.5 2.5 0 0 0 0-5zm58 10a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h26a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5zm29 0a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h27a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5zm-59 0a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h27a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5zm-30 0a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h27a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5zM0 30c0-1.105.628-2 1.404-2h17.192c.776 0 1.404.895 1.404 2s-.628 2-1.404 2H1.404C.628 32 0 31.105 0 30m89 0c0-1.105.628-2 1.404-2h17.192c.776 0 1.404.895 1.404 2s-.628 2-1.404 2H90.404C89.628 32 89 31.105 89 30m-29 0c0-1.105.628-2 1.404-2h17.192c.776 0 1.404.895 1.404 2s-.628 2-1.404 2H61.404C60.628 32 60 31.105 60 30m-30 0c0-1.105.628-2 1.404-2h17.192c.776 0 1.404.895 1.404 2s-.628 2-1.404 2H31.404C30.628 32 30 31.105 30 30'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateQuestionAccordionSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 34'>\n <path\n fill='currentColor'\n d='M1.655 0h22.932a1.655 1.655 0 0 1 0 3.31H1.656a1.655 1.655 0 0 1 0-3.31M116 10V6H1v4zM1 11a1 1 0 0 1-1-1V6a1 1 0 0 1 1-1h115a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1zm0 14.31v-11h115v11zm-1 0a1 1 0 0 0 1 1h115a1 1 0 0 0 1-1v-11a1 1 0 0 0-1-1H1a1 1 0 0 0-1 1zm3.833-9.477H2.167a.166.166 0 1 0 0 .333h1.666A.17.17 0 0 0 4 16l-.001-.02a.17.17 0 0 0-.166-.147M1 33v-4h115v4zm-1 0a1 1 0 0 0 1 1h115a1 1 0 0 0 1-1v-4a1 1 0 0 0-1-1H1a1 1 0 0 0-1 1zm3-3c.092 0 .167.076.167.167v.666h.666c.086 0 .156.064.166.147L4 31a.17.17 0 0 1-.167.167h-.666v.666a.17.17 0 0 1-.147.166L3 32a.17.17 0 0 1-.167-.167v-.666h-.666a.166.166 0 1 1 0-.334h.666v-.666c0-.092.074-.167.167-.167m.167-22.833a.166.166 0 1 0-.333 0v.666h-.667a.166.166 0 1 0 0 .333h.666v.667c0 .091.075.167.167.167l.02-.001a.17.17 0 0 0 .147-.166v-.666h.666A.17.17 0 0 0 4 8l-.001-.02a.17.17 0 0 0-.166-.147h-.666z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateQuestionSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 20'>\n <path\n fill='currentColor'\n d='M24.588 1.285H1.654a1.655 1.655 0 0 0 0 3.31h22.932a1.655 1.655 0 0 0 0-3.31M1 7.595v11h115v-11zm0 12a1 1 0 0 1-1-1v-11a1 1 0 0 1 1-1h115a1 1 0 0 1 1 1v11a1 1 0 0 1-1 1zm113.167-10.5a.17.17 0 0 0-.167-.167.167.167 0 0 0-.167.167v.666h-.666a.167.167 0 1 0 0 .333h.666v.667c0 .091.075.167.167.167l.02-.001a.17.17 0 0 0 .147-.166v-.666h.666a.17.17 0 0 0 .167-.167l-.001-.02a.17.17 0 0 0-.166-.147h-.666zm-109.501.19c-.92 0-1.666.672-1.666 1.5 0 .829.746 1.5 1.666 1.5h52.668c.92 0 1.666-.671 1.666-1.5 0-.828-.746-1.5-1.666-1.5z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateRectangularLogoSlidingListSvg() {\n return (\n <svg viewBox='0 0 117 23'>\n <path d='M2.5 0C1.11929 0 0 1.11929 0 2.5C0 3.88071 1.11929 5 2.5 5H46.5C47.8807 5 49 3.88071 49 2.5C49 1.11929 47.8807 0 46.5 0H2.5Z' fill='#D7D7D7'/>\n <path d='M0 2.5C0 1.11929 1.11929 0 2.5 0H46.5C47.8807 0 49 1.11929 49 2.5C49 3.88071 47.8807 5 46.5 5H2.5C1.11929 5 0 3.88071 0 2.5Z' fill='#D7D7D7'/>\n <path d='M0 10.9334C0 10.4968 0.353937 10.1428 0.790541 10.1428H21.3446C21.7812 10.1428 22.1351 10.4968 22.1351 10.9334V22.0009C22.1351 22.4375 21.7812 22.7915 21.3446 22.7915H0.79054C0.353937 22.7915 0 22.4375 0 22.0009V10.9334Z' fill='#D7D7D7'/>\n <path d='M23.7162 10.9334C23.7162 10.4968 24.0702 10.1428 24.5068 10.1428H45.0608C45.4974 10.1428 45.8514 10.4968 45.8514 10.9334V22.0009C45.8514 22.4375 45.4974 22.7915 45.0608 22.7915H24.5068C24.0702 22.7915 23.7162 22.4375 23.7162 22.0009V10.9334Z' fill='#D7D7D7'/>\n <path d='M47.4324 10.9334C47.4324 10.4968 47.7864 10.1428 48.223 10.1428H68.777C69.2136 10.1428 69.5676 10.4968 69.5676 10.9334V22.0009C69.5676 22.4375 69.2136 22.7915 68.777 22.7915H48.223C47.7864 22.7915 47.4324 22.4375 47.4324 22.0009V10.9334Z' fill='#D7D7D7'/>\n <path d='M71.1487 10.9334C71.1487 10.4968 71.5026 10.1428 71.9392 10.1428H92.4933C92.9299 10.1428 93.2838 10.4968 93.2838 10.9334V22.0009C93.2838 22.4375 92.9299 22.7915 92.4933 22.7915H71.9392C71.5026 22.7915 71.1487 22.4375 71.1487 22.0009V10.9334Z' fill='#D7D7D7'/>\n <path d='M94.8648 10.9334C94.8648 10.4968 95.2188 10.1428 95.6554 10.1428H116.209C116.646 10.1428 117 10.4968 117 10.9334V22.0009C117 22.4375 116.646 22.7915 116.209 22.7915H95.6554C95.2188 22.7915 94.8648 22.4375 94.8648 22.0009V10.9334Z' fill='#D7D7D7'/>\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailFixedListLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 22'>\n <path\n d='M.413 0C.185 0 0 .385 0 .861v20.278c0 .476.185.861.413.861h56.174c.228 0 .413-.386.413-.861V.861C57 .385 56.815 0 56.587 0zm60 0C60.185 0 60 .385 60 .861v20.278c0 .476.185.861.413.861h56.174c.228 0 .413-.386.413-.861V.861c0-.476-.185-.861-.413-.861z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailFixedListMediaLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 43'>\n <path\n d='M2.5 0a2.5 2.5 0 0 0 0 5h45.733a2.5 2.5 0 0 0 0-5zM0 11.119a1 1 0 0 1 1-1h55.498a1 1 0 0 1 1 1V41.82a1 1 0 0 1-1 1H1a1 1 0 0 1-1-1zm59.502 0a1 1 0 0 1 1-1H116a1 1 0 0 1 1 1V41.82a1 1 0 0 1-1 1H60.502a1 1 0 0 1-1-1z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailFixedListSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 30'>\n <path\n d='M.268 0C.12 0 0 .245 0 .548v12.904c0 .303.12.548.268.548h36.464c.148 0 .268-.245.268-.548V.548C37 .245 36.88 0 36.732 0zm40 0C40.12 0 40 .245 40 .548v12.904c0 .303.12.548.268.548h36.464c.148 0 .268-.245.268-.548V.548C77 .245 76.88 0 76.732 0zM80 .548c0-.303.12-.548.268-.548h36.464c.148 0 .268.245.268.548v12.904c0 .303-.12.548-.268.548H80.268c-.148 0-.268-.245-.268-.548zM.268 16C.12 16 0 16.245 0 16.548v12.904c0 .303.12.548.268.548h36.464c.148 0 .268-.245.268-.548V16.548c0-.303-.12-.548-.268-.548zM40 16.548c0-.303.12-.548.268-.548h36.464c.148 0 .268.245.268.548v12.904c0 .303-.12.548-.268.548H40.268c-.148 0-.268-.245-.268-.548zM80.268 16c-.148 0-.268.245-.268.548v12.904c0 .303.12.548.268.548h36.464c.148 0 .268-.245.268-.548V16.548c0-.303-.12-.548-.268-.548z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailFixedListXLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 119 24'>\n <path\n fill='currentColor'\n d='M1.847.5C1.103.5.5 1.103.5 1.847v19.95c0 .745.603 1.348 1.347 1.348h115.306c.744 0 1.347-.603 1.347-1.347V1.848c0-.745-.603-1.348-1.347-1.348zM1.5 1.847c0-.192.155-.347.347-.347h76.18Q78 1.666 78 1.861v20.284H1.847a.347.347 0 0 1-.347-.347z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailSlidingListLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 31'>\n <path\n d='M2.5 0a2.5 2.5 0 0 0 0 5h45.733a2.5 2.5 0 0 0 0-5zm77.427 10a.5.5 0 0 0-.5.5v19.953a.5.5 0 0 0 .5.5H116.5a.5.5 0 0 0 .5-.5V10.5a.5.5 0 0 0-.5-.5zm-40.214.5a.5.5 0 0 1 .5-.5h36.573a.5.5 0 0 1 .5.5v19.953a.5.5 0 0 1-.5.5H40.213a.5.5 0 0 1-.5-.5zM.5 10a.5.5 0 0 0-.5.5v19.953a.5.5 0 0 0 .5.5h36.573a.5.5 0 0 0 .5-.5V10.5a.5.5 0 0 0-.5-.5z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailSlidingListSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 26'>\n <path\n d='M0 2.5A2.5 2.5 0 0 1 2.5 0h44a2.5 2.5 0 0 1 0 5h-44A2.5 2.5 0 0 1 0 2.5m60 8a.5.5 0 0 1 .5-.5h26a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-.5.5h-26a.5.5 0 0 1-.5-.5zm29.5-.5a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h27a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5zm-59.5.5a.5.5 0 0 1 .5-.5h27a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-.5.5h-27a.5.5 0 0 1-.5-.5zM.5 10a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h27a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailVerticalListSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 36'>\n <path\n fill='currentColor'\n d='M0 .5A.5.5 0 0 1 .5 0h27a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5zM31.913 0a1.655 1.655 0 0 0 0 3.31h22.932a1.655 1.655 0 0 0 0-3.31zm-1.655 7.655c0-.914.74-1.655 1.655-1.655h82.932a1.655 1.655 0 0 1 0 3.31H31.913a1.655 1.655 0 0 1-1.655-1.655m1.655 4.535a1.655 1.655 0 0 0 0 3.31h62.932a1.655 1.655 0 0 0 0-3.31zM.5 20a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h27a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5zm31.413 0a1.655 1.655 0 0 0 0 3.31h22.932a1.655 1.655 0 0 0 0-3.31zm-1.655 7.655c0-.914.74-1.655 1.655-1.655h82.932a1.655 1.655 0 0 1 0 3.31H31.913a1.655 1.655 0 0 1-1.655-1.655m1.655 4.535a1.655 1.655 0 0 0 0 3.31h62.932a1.655 1.655 0 0 0 0-3.31z'\n />\n </svg>\n );\n}\n","import { ThumbnailFixedListSearchCtaWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/all-videos-list/ThumbnailFixedListSearchCtaWidgetTemplate';\nimport { AuthorReviewerWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/author-reviewer/AuthorReviewerWidgetTemplate';\nimport { PartialAuthorReviewerWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/author-reviewer/partial-loading/PartialAuthorReviewerWidgetTemplate';\nimport { CircleLogoSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/circle-logo-sliding-list/CircleLogoSlidingListWidgetTemplate';\nimport { PartialCircleLogoSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/circle-logo-sliding-list/partial-loading/PartialCircleLogoSlidingList';\nimport { CoverFixedPillListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-fixed-pill-list-large/CoverFixedPillListLargeWidgetTemplate';\nimport { PartialCoverFixedPillListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-fixed-pill-list-large/partial-loading/PartialCoverFixedPillListLargeWidgetTemplate';\nimport { CoverFixedPillListXSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-fixed-pill-list-xsmall/CoverFixedPillListXSmallWidgetTemplate';\nimport { PartialCoverFixedPillListXSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-fixed-pill-list-xsmall/partial-loading/PartialCoverFixedPillListXSmallWidgetTemplate';\nimport { CoverFixedTileListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-fixed-tile-list/CoverFixedTileListWidgetTemplate';\nimport { PartialCoverFixedTileListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-fixed-tile-list/partial-loading/PartialCoverFixedTileListWidgetTemplate';\nimport { CoverSlidingPillListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-sliding-pill-list-small/CoverSlidingPillListSmallWidgetTemplate';\nimport { PartialCoverSlidingPillListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-sliding-pill-list-small/partial-loading/PartialCoverSlidingPillListSmallWidgetTemplate';\nimport { CurriculumCodeSearchResultsWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/curriculum-code-search-results/CurriculumCodeSearchResultsWidgetTemplate';\nimport { PartialCurriculumCodeSearchResultsWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/curriculum-code-search-results/partial/PartialCurriculumCodeSearchResultsWidgetTemplate';\nimport { CurriculumResourcesAccordionWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/curriculum-resources-accordion/CurriculumResourcesAccordionWidgetTemplate';\nimport { PartialCurriculumResourcesAccordionWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/curriculum-resources-accordion/partial-loading/PartialCurriculumResourcesAccordionWidgetTemplate';\nimport { EditableCoverFixedPillListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/editable-cover-fixed-pill-list-small/EditableCoverFixedPillListSmallWidgetTemplate';\nimport { PartialEditableCoverFixedPillListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/editable-cover-fixed-pill-list-small/partial-loading/PartialEditableCoverFixedPillListSmallWidgetTemplate';\nimport { EventIconSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/event-icon-sliding-list/EventIconSlidingListWidgetTemplate';\nimport { PartialEventIconSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/event-icon-sliding-list/partial-loading/PartialEventIconSlidingListWidgetTemplate';\nimport { FeaturedThumbnailSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/featured-thumbnail-sliding-list/FeaturedThumbnailSlidingListWidgetTemplate';\nimport { PartialFeaturedThumbnailSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/featured-thumbnail-sliding-list/partial-loading/PartialFeaturedThumbnailSlidingListWidgetTemplate';\nimport { FeedbackWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/feedback/FeedbackWidgetTemplate';\nimport { PartialFeedbackWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/feedback/partial-loading/PartialFeedbackWidgetTemplate';\nimport { FilterSlidingPillListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/filter-sliding-pill-list-small/FilterSlidingPillListSmallWidgetTemplate';\nimport { PartialFilterSlidingPillListSmall } from 'libs/shared/components/widgets/curated-widgets/templates/filter-sliding-pill-list-small/partial-loading/PartialFilterSlidingPillListSmall';\nimport { HeadingWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/heading/HeadingWidgetTemplate';\nimport { PartialHeadingWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/heading/partial-loading/PartialHeadingWidgetTemplate';\nimport { HeroBannerWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner/HeroBannerWidgetTemplate';\nimport { PartialHeroBannerWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner/partial-loading/PartialHeroBannerWidgetTemplate';\nimport { HeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/HeroBannerSmallWidgetTemplate';\nimport { PartialHeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/partial-loading/PartialHeroBannerSmallWidgetTemplate';\nimport { HeroBlockColourSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-block-colour-small/HeroBlockColourSmallWidgetTemplate';\nimport { PartialHeroBlockColourSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-block-colour-small/partial-loading/PartialHeroBlockColourSmallWidgetTemplate';\nimport { HeroThumbnailSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-thumbnail-small/HeroThumbnailSmallWidgetTemplate';\nimport { PartialHeroThumbnailSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-thumbnail-small/partial-loading/PartialHeroThumbnailSmallWidgetTemplate';\nimport { PartialPopoutThumbnailSlidingListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_large/partial-loading/PartialPopoutThumbnailSlidingListLarge';\nimport { PopoutThumbnailSlidingListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_large/PopoutThumbnailSlidingListLargeWidgetTemplate';\nimport { PartialPopoutThumbnailSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_small/partial-loading/PartialPopoutThumbnailSlidingListSmall';\nimport { PopoutThumbnailSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_small/PopoutThumbnailSlidingListSmallWidgetTemplate';\nimport { PartialPosterFixedListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-fixed-list-large/partial-loading/PartialPosterFixedListLargeWidgetTemplate';\nimport { PosterFixedListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-fixed-list-large/PosterFixedListLargeWidgetTemplate';\nimport { PartialPosterSlidingListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-large/partial-loading/PartialPosterSlidingListLargeWidgetTemplate';\nimport { PosterSlidingListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-large/PosterSlidingListLargeWidgetTemplate';\nimport { PartialPosterSlidingListMediumWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-medium/partial-loading/PartialPosterSlidingListMediumWidgetTemplate';\nimport { PosterSlidingListMediumWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-medium/PosterSlidingListMediumWidgetTemplate';\nimport { ClassificationPosterSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-small/classification/ClassificationPosterSlidingListSmallWidgetTemplate';\nimport { PartialPosterSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-small/partial-loading/PartialPosterSlidingListSmallWidgetTemplate';\nimport { SeriesPosterSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-small/series/SeriesPosterSlidingListSmallWidgetTemplate';\nimport { PartialQuestionWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/question/partial-loading/PartialQuestionWidgetTemplate';\nimport { QuestionWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/question/QuestionWidgetTemplate';\nimport { PartialQuestionAccordionWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/question-accordion/partial-loading/PartialQuestionAccordionWidgetTemplate';\nimport { QuestionAccordionWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/question-accordion/QuestionAccordionWidgetTemplate';\nimport { PartialRectangularLogoSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/rectangular-logo-sliding-list/partial-loading/PartialRectangularLogoSlidingList';\nimport { RectangularLogoSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/rectangular-logo-sliding-list/RectangularLogoSlidingListWidgetTemplate';\nimport { PartialSearchSuggestionsBlurbWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/search-suggestions-blurb/partial-loading/PartialSearchSuggestionsBlurbWidgetTemplate';\nimport { SearchSuggestionsBlurbWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/search-suggestions-blurb/SearchSuggestionsBlurbWidgetTemplate';\nimport { PartialStatsCoverFixedPillListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/stats-cover-fixed-pill-list-large/partial-loading/PartialStatsCoverFixedPillListLargeWidgetTemplate';\nimport { StatsCoverFixedPillListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/stats-cover-fixed-pill-list-large/StatsCoverFixedPillListLargeWidgetTemplate';\nimport { PartialTagSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/tag-sliding-list/partial-loading/PartialTagSlidingListWidgetTemplate';\nimport { TagSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/tag-sliding-list/TagSlidingListWidgetTemplate';\nimport { PartialThumbnailFeaturedMediaWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-featured-media/partial-loading/PartialThumbnailFeaturedMediaWidgetTemplate';\nimport { ThumbnailFeaturedMediaWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-featured-media/ThumbnailFeaturedMediaWidgetTemplate';\nimport { PartialThumbnailFixedListFolderSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-folder-small/partial-loading/PartialThumbnailFixedListFolderSmallWidgetTemplate';\nimport { ThumbnailFixedListFolderSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-folder-small/ThumbnailFixedListFolderSmallWidgetTemplate';\nimport { PartialThumbnailFixedListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-large/partial-loading/PartialThumbnailFixedListLargeWidgetTemplate';\nimport { ThumbnailFixedListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-large/ThumbnailFixedListLargeWidgetTemplate';\nimport { PartialThumbnailFixedListMediaLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/partial-loading/PartialThumbnailFixedListMediaLargeWidgetTemplate';\nimport { ThumbnailFixedListMediaLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/ThumbnailFixedListMediaLargeWidgetTemplate';\nimport { PartialThumbnailFixedListMediaSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-small/partial-loading/PartialThumbnailFixedListMediaSmallWidgetTemplate';\nimport { ThumbnailFixedListMediaSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-small/ThumbnailFixedListMediaSmallWidgetTemplate';\nimport { PartialThumbnailFixedSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-small/partial-loading/PartialThumbnailFixedListSmallWidgetTemplate';\nimport { ThumbnailFixedListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-small/ThumbnailFixedListSmallWidgetTemplate';\nimport { PartialThumbnailFixedListXLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-xlarge/partial-loading/PartialThumbnailFixedListXLargeWidgetTemplate';\nimport { ThumbnailFixedListXLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-xlarge/ThumbnailFixedListXLargeWidgetTemplate';\nimport { PartialThumbnailHeroMediaWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-hero-media/partial-loading/PartialThumbnailHeroMediaWidgetTemplate';\nimport { ThumbnailHeroMediaWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-hero-media/ThumbnailHeroMediaWidgetTemplate';\nimport { PartialThumbnailSlidingListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-sliding-list-large/partial-loading/PartialThumbnailSlidingListLargeWidgetTemplate';\nimport { ThumbnailSlidingListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-sliding-list-large/ThumbnailSlidingListLargeWidgetTemplate';\nimport { PartialThumbnailSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-sliding-list-small/partial-loading/PartialThumbnailSlidingListSmallWidgetTemplate';\nimport { ThumbnailSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-sliding-list-small/ThumbnailSlidingListSmallWidgetTemplate';\nimport { PartialThumbnailSlidingListSmallV2WidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-sliding-list-small_v2/partial-loading/PartialThumbnailSlidingListSmallV2WidgetTemplate';\nimport { ThumbnailSlidingListSmallV2WidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-sliding-list-small_v2/ThumbnailSlidingListSmallV2WidgetTemplate';\nimport { PartialThumbnailVerticalListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-vertical-list/partial-loading/PartialThumbnailVerticalListWidgetTemplate';\nimport { ThumbnailVerticalListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-vertical-list/ThumbnailVerticalListWidgetTemplate';\nimport { AnyWidgetTemplateProps, PartialWidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { WidgetTemplateCoverFixedPillListLargeSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplateCoverFixedPillListLargeSvg';\nimport { WidgetTemplateCoverFixedPillListXSmallSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplateCoverFixedPillListXsmallSvg';\nimport { WidgetTemplateFeedbackCtaSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplateFeedbackCtaSvg';\nimport { WidgetTemplatePopoutThumbnailSlidingListSmallCtaSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplatePopoutThumbnailSlidingListSmallCtaSvg';\nimport { WidgetTemplatePosterSlidingListLargeSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplatePosterSlidingListLargeSvg';\nimport { WidgetTemplatePosterSlidingListMediumSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplatePosterSlidingListMediumSvg';\nimport { WidgetTemplatePosterSlidingListSmallSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplatePosterSlidingListSmallSvg';\nimport { WidgetTemplateStatsCoverFixedPillListLargeSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplateStatsCoverFixedPillListLargeSvg';\nimport { WidgetTemplateThumbnailFeaturedMediaSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplateThumbnailFeaturedMediaSvg';\nimport { WidgetTemplateThumbnailHeroMediaSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplateThumbnailHeroMediaSvg';\nimport { DashboardTargetType } from 'libs/shared/interfaces';\nimport { SvgIcon } from 'libs/shared/utils/SvgHelper';\n\nimport { RectangularLogoFixedListWidgetTemplate } from '../components/widgets/curated-widgets/templates/rectangular-logo-fixed-list/RectangularLogoFixedListWidgetTemplate';\nimport { WidgetTemplateAuthorReviewerSvg } from '../images/svg/widgets/templates/WidgetTemplateAuthorReviewerSvg';\nimport { WidgetTemplateCircleLogoSlidingListSvg } from '../images/svg/widgets/templates/WidgetTemplateCircleLogoSlidingListSvg';\nimport { WidgetTemplateCoverFixedTileListSvg } from '../images/svg/widgets/templates/WidgetTemplateCoverFixedTileListSvg';\nimport { WidgetTemplateCoverSlidingPillListSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateCoverSlidingPillListSmallSvg';\nimport { WidgetTemplateEditableCoverFixedPillListSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateEditableCoverFixedPillListSmallSvg';\nimport { WidgetTemplateEventIconSlidingListSvg } from '../images/svg/widgets/templates/WidgetTemplateEventIconSlidingListSvg';\nimport { WidgetTemplateFeaturedThumbnailSlidingListSvg } from '../images/svg/widgets/templates/WidgetTemplateFeaturedThumbnailSlidingListSvg';\nimport { WidgetTemplateFilterSlidingPillListSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateFilterSlidingPillListSmallSvg';\nimport { WidgetTemplateHeadingSvg } from '../images/svg/widgets/templates/WidgetTemplateHeadingSvg';\nimport { WidgetTemplateHeroBannerSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateHeroBannerSmallSvg';\nimport { WidgetTemplateHeroBannerSvg } from '../images/svg/widgets/templates/WidgetTemplateHeroBannerSvg';\nimport { WidgetTemplateHeroBlockColourSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateHeroBlockColourSmallSvg';\nimport { WidgetTemplateHeroThumbnailSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateHeroThumbnailSmallSvg';\nimport { WidgetTemplatePopoutThumbnailSlidingListLargeSvg } from '../images/svg/widgets/templates/WidgetTemplatePopoutThumbnailSlidingListLargeSvg';\nimport { WidgetTemplatePopoutThumbnailSlidingListSmallSvg } from '../images/svg/widgets/templates/WidgetTemplatePopoutThumbnailSlidingListSmallSvg';\nimport { WidgetTemplateQuestionAccordionSvg } from '../images/svg/widgets/templates/WidgetTemplateQuestionAccordionSvg';\nimport { WidgetTemplateQuestionSvg } from '../images/svg/widgets/templates/WidgetTemplateQuestionSvg';\nimport { WidgetTemplateRectangularLogoSlidingListSvg } from '../images/svg/widgets/templates/WidgetTemplateRectangularLogoSlidingListSvg';\nimport { WidgetTemplateThumbnailFixedListLargeSvg } from '../images/svg/widgets/templates/WidgetTemplateThumbnailFixedListLargeSvg';\nimport { WidgetTemplateThumbnailFixedListMediaLargeSvg } from '../images/svg/widgets/templates/WidgetTemplateThumbnailFixedListMediaLargeSvg';\nimport { WidgetTemplateThumbnailFixedListSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateThumbnailFixedListSmallSvg';\nimport { WidgetTemplateThumbnailFixedListXLargeSvg } from '../images/svg/widgets/templates/WidgetTemplateThumbnailFixedListXlargeSvg';\nimport { WidgetTemplateThumbnailSlidingListLargeSvg } from '../images/svg/widgets/templates/WidgetTemplateThumbnailSlidingListLargeSvg';\nimport { WidgetTemplateThumbnailSlidingListSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateThumbnailSlidingListSmallSvg';\nimport { WidgetTemplateThumbnailVerticalListSvg } from '../images/svg/widgets/templates/WidgetTemplateThumbnailVerticalListSvg';\n\ninterface PredicateOptions {\n targetType: DashboardTargetType;\n product: ProductId;\n widgetTypeId: WidgetTypeId;\n isTopLevelClassification?: boolean;\n}\n\ninterface WidgetTemplateConfigType {\n getComponent: (widgetId: WidgetTypeId) => ((props: AnyWidgetTemplateProps) => JSX.Element);\n partialLoading: (props: PartialWidgetTemplateProps) => JSX.Element;\n icon: SvgIcon;\n predicate: (options: PredicateOptions) => boolean;\n className: string;\n displayName?: string;\n}\n\nexport const WidgetTemplateConfig: Record<WidgetTemplate, WidgetTemplateConfigType> = {\n [WidgetTemplate.ThumbnailHeroMedia]: {\n getComponent: () => ThumbnailHeroMediaWidgetTemplate,\n partialLoading: PartialThumbnailHeroMediaWidgetTemplate,\n icon: WidgetTemplateThumbnailHeroMediaSvg,\n predicate: ({ targetType }) => {\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.PartnerProfile\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.PosterSlidingListLarge]: {\n getComponent: () => PosterSlidingListLargeWidgetTemplate,\n partialLoading: PartialPosterSlidingListLargeWidgetTemplate,\n icon: WidgetTemplatePosterSlidingListLargeSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.Company,\n DashboardTargetType.PartnerProfile\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.PosterSlidingListMedium]: {\n getComponent: () => PosterSlidingListMediumWidgetTemplate,\n partialLoading: PartialPosterSlidingListMediumWidgetTemplate,\n icon: WidgetTemplatePosterSlidingListMediumSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.Company\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.PosterSlidingListSmall]: {\n getComponent: widgetId => {\n switch (widgetId) {\n case WidgetTypeId.CuratedClassifications:\n return ClassificationPosterSlidingListSmallWidgetTemplate;\n case WidgetTypeId.CuratedSeries:\n return SeriesPosterSlidingListSmallWidgetTemplate;\n default:\n // fall back to ClassificationPosterSlidingListSmallWidgetTemplate\n return ClassificationPosterSlidingListSmallWidgetTemplate;\n }\n },\n partialLoading: PartialPosterSlidingListSmallWidgetTemplate,\n icon: WidgetTemplatePosterSlidingListSmallSvg,\n predicate: ({ targetType, widgetTypeId, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n switch (widgetTypeId) {\n case WidgetTypeId.CuratedClassifications: {\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n }\n case WidgetTypeId.CuratedSeries: {\n return [\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.Company,\n DashboardTargetType.PartnerProfile\n ].includes(targetType);\n }\n default: {\n return false;\n }\n }\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailFeaturedMedia]: {\n getComponent: () => ThumbnailFeaturedMediaWidgetTemplate,\n partialLoading: PartialThumbnailFeaturedMediaWidgetTemplate,\n icon: WidgetTemplateThumbnailFeaturedMediaSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.PartnerProfile\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.CoverFixedPillListLarge]: {\n getComponent: () => CoverFixedPillListLargeWidgetTemplate,\n partialLoading: PartialCoverFixedPillListLargeWidgetTemplate,\n icon: WidgetTemplateCoverFixedPillListLargeSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return [\n DashboardTargetType.Classification\n ].includes(targetType);\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.StatsCoverFixedPillListLarge]: {\n getComponent: () => StatsCoverFixedPillListLargeWidgetTemplate,\n partialLoading: PartialStatsCoverFixedPillListLargeWidgetTemplate,\n icon: WidgetTemplateStatsCoverFixedPillListLargeSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.ClassificationDirectory\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.CoverFixedPillListXSmall]: {\n getComponent: () => CoverFixedPillListXSmallWidgetTemplate,\n partialLoading: PartialCoverFixedPillListXSmallWidgetTemplate,\n icon: WidgetTemplateCoverFixedPillListXSmallSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return [\n DashboardTargetType.Discover\n ].includes(targetType);\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.CoverSlidingPillListSmall]: {\n getComponent: () => CoverSlidingPillListSmallWidgetTemplate,\n partialLoading: PartialCoverSlidingPillListSmallWidgetTemplate,\n icon: WidgetTemplateCoverSlidingPillListSmallSvg,\n predicate: ({ targetType, widgetTypeId, product }) => {\n if (product === ProductId.StreamableLearning) {\n if (widgetTypeId === WidgetTypeId.Classifications) return false;\n\n return [\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.Classification\n ].includes(targetType);\n }\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.Company\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.CoverFixedTileList]: {\n getComponent: () => CoverFixedTileListWidgetTemplate,\n partialLoading: PartialCoverFixedTileListWidgetTemplate,\n icon: WidgetTemplateCoverFixedTileListSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.FeaturedThumbnailSlidingList]: {\n getComponent: () => FeaturedThumbnailSlidingListWidgetTemplate,\n partialLoading: PartialFeaturedThumbnailSlidingListWidgetTemplate,\n icon: WidgetTemplateFeaturedThumbnailSlidingListSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.PartnerProfile\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.HeroBanner]: {\n getComponent: () => HeroBannerWidgetTemplate,\n partialLoading: PartialHeroBannerWidgetTemplate,\n icon: WidgetTemplateHeroBannerSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.HeroBannerSmall]: {\n getComponent: () => HeroBannerSmallWidgetTemplate,\n partialLoading: PartialHeroBannerSmallWidgetTemplate,\n icon: WidgetTemplateHeroBannerSmallSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.PartnerProfile\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.HeroThumbnailSmall]: {\n getComponent: () => HeroThumbnailSmallWidgetTemplate,\n partialLoading: PartialHeroThumbnailSmallWidgetTemplate,\n icon: WidgetTemplateHeroThumbnailSmallSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.HeroBlockColourSmall]: {\n getComponent: () => HeroBlockColourSmallWidgetTemplate,\n partialLoading: PartialHeroBlockColourSmallWidgetTemplate,\n icon: WidgetTemplateHeroBlockColourSmallSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.ClassificationDirectory,\n DashboardTargetType.ClassificationCurriculum\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailFixedListXLarge]: {\n getComponent: () => ThumbnailFixedListXLargeWidgetTemplate,\n partialLoading: PartialThumbnailFixedListXLargeWidgetTemplate,\n icon: WidgetTemplateThumbnailFixedListXLargeSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailFixedListLarge]: {\n getComponent: () => ThumbnailFixedListLargeWidgetTemplate,\n partialLoading: PartialThumbnailFixedListLargeWidgetTemplate,\n icon: WidgetTemplateThumbnailFixedListLargeSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.PartnerProfile\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailFixedListSmall]: {\n getComponent: () => ThumbnailFixedListSmallWidgetTemplate,\n partialLoading: PartialThumbnailFixedSmallWidgetTemplate,\n icon: WidgetTemplateThumbnailFixedListSmallSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.EditableCoverFixedPillListSmall]: {\n getComponent: () => EditableCoverFixedPillListSmallWidgetTemplate,\n partialLoading: PartialEditableCoverFixedPillListSmallWidgetTemplate,\n icon: WidgetTemplateEditableCoverFixedPillListSmallSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Discover\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.Heading]: {\n getComponent: () => HeadingWidgetTemplate,\n partialLoading: PartialHeadingWidgetTemplate,\n icon: WidgetTemplateHeadingSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.ClassificationDirectory,\n DashboardTargetType.Discover,\n DashboardTargetType.PartnerProfile\n ].includes(targetType);\n },\n className: 'heading-widget-template'\n },\n\n [WidgetTemplate.AuthorReviewer]: {\n getComponent: () => AuthorReviewerWidgetTemplate,\n partialLoading: PartialAuthorReviewerWidgetTemplate,\n icon: WidgetTemplateAuthorReviewerSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [DashboardTargetType.Classification].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.Question]: {\n getComponent: () => QuestionWidgetTemplate,\n partialLoading: PartialQuestionWidgetTemplate,\n icon: WidgetTemplateQuestionSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.QuestionAccordion]: {\n getComponent: () => QuestionAccordionWidgetTemplate,\n partialLoading: PartialQuestionAccordionWidgetTemplate,\n icon: WidgetTemplateQuestionAccordionSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.FeedbackCta]: {\n getComponent: () => FeedbackWidgetTemplate,\n partialLoading: PartialFeedbackWidgetTemplate,\n icon: WidgetTemplateFeedbackCtaSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailFixedListMediaLarge]: {\n getComponent: () => ThumbnailFixedListMediaLargeWidgetTemplate,\n partialLoading: PartialThumbnailFixedListMediaLargeWidgetTemplate,\n icon: WidgetTemplateThumbnailFixedListMediaLargeSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.PopoutThumbnailSlidingListLarge]: {\n getComponent: () => PopoutThumbnailSlidingListLargeWidgetTemplate,\n partialLoading: PartialPopoutThumbnailSlidingListLargeWidgetTemplate,\n icon: WidgetTemplatePopoutThumbnailSlidingListLargeSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.PartnerProfile,\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.PopoutThumbnailSlidingListSmall]: {\n getComponent: () => PopoutThumbnailSlidingListSmallWidgetTemplate,\n partialLoading: PartialPopoutThumbnailSlidingListSmallWidgetTemplate,\n icon: WidgetTemplatePopoutThumbnailSlidingListSmallSvg,\n predicate: ({ targetType, product, isTopLevelClassification }) => {\n if (product === ProductId.StreamableLearning) {\n return [\n DashboardTargetType.Discover,\n DashboardTargetType.Company\n ].includes(targetType);\n }\n\n if (targetType === DashboardTargetType.Classification)\n return isTopLevelClassification;\n\n return [\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.PartnerProfile\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.FilterSlidingPillListSmall]: {\n getComponent: () => FilterSlidingPillListSmallWidgetTemplate,\n partialLoading: PartialFilterSlidingPillListSmall,\n icon: WidgetTemplateFilterSlidingPillListSmallSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.CircleLogoSlidingList]: {\n getComponent: () => CircleLogoSlidingListWidgetTemplate,\n partialLoading: PartialCircleLogoSlidingListWidgetTemplate,\n icon: WidgetTemplateCircleLogoSlidingListSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning) {\n return [\n DashboardTargetType.Discover,\n DashboardTargetType.Company\n ].includes(targetType);\n }\n\n return [\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.RectangularLogoSlidingList]: {\n getComponent: () => RectangularLogoSlidingListWidgetTemplate,\n partialLoading: PartialRectangularLogoSlidingListWidgetTemplate,\n icon: WidgetTemplateRectangularLogoSlidingListSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Discover,\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.Search,\n DashboardTargetType.PartnerProfile\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.RectangularLogoFixedList]: {\n getComponent: () => RectangularLogoFixedListWidgetTemplate,\n partialLoading: PartialRectangularLogoSlidingListWidgetTemplate,\n // @partner TODO: Update this\n icon: null,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Discover,\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.Search,\n DashboardTargetType.DiscoverPartnerProfiles\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.EventIconSlidingList]: {\n getComponent: () => EventIconSlidingListWidgetTemplate,\n partialLoading: PartialEventIconSlidingListWidgetTemplate,\n icon: WidgetTemplateEventIconSlidingListSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return [\n DashboardTargetType.Discover,\n DashboardTargetType.Classification,\n DashboardTargetType.Company\n ].includes(targetType);\n\n return [\n DashboardTargetType.Discover,\n DashboardTargetType.Classification\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailVerticalList]: {\n getComponent: () => ThumbnailVerticalListWidgetTemplate,\n partialLoading: PartialThumbnailVerticalListWidgetTemplate,\n icon: WidgetTemplateThumbnailVerticalListSvg,\n predicate: ({ targetType, product }) => {\n if (DashboardTargetType.PartnerProfile === targetType)\n return true;\n\n if (!(product === ProductId.StreamableLearning))\n return false;\n\n return [\n DashboardTargetType.Company,\n DashboardTargetType.Classification,\n DashboardTargetType.PartnerProfile\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.InfiniteThumbnailVerticalList]: {\n getComponent: () => ThumbnailVerticalListWidgetTemplate,\n partialLoading: PartialThumbnailVerticalListWidgetTemplate,\n icon: WidgetTemplateThumbnailVerticalListSvg,\n displayName: 'Vertical list with infinite scroll',\n predicate: ({ targetType }) => {\n if (DashboardTargetType.PartnerProfile === targetType)\n return true;\n return false;\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailFixedListSearchCta]: {\n getComponent: () => ThumbnailFixedListSearchCtaWidgetTemplate,\n partialLoading: PartialPopoutThumbnailSlidingListSmallWidgetTemplate,\n icon: WidgetTemplatePopoutThumbnailSlidingListSmallCtaSvg,\n displayName: 'Fixed List with Search CTA',\n predicate: ({ targetType }) => {\n if (DashboardTargetType.PartnerProfile === targetType)\n return true;\n return false;\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailSlidingListSmallV2]: {\n getComponent: () => ThumbnailSlidingListSmallV2WidgetTemplate,\n partialLoading: PartialThumbnailSlidingListSmallV2WidgetTemplate,\n icon: WidgetTemplateThumbnailSlidingListSmallSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning) {\n return false;\n }\n\n return [ DashboardTargetType.Classification, DashboardTargetType.PartnerProfile ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.CurriculumResourcesAccordion]: {\n getComponent: () => CurriculumResourcesAccordionWidgetTemplate,\n partialLoading: PartialCurriculumResourcesAccordionWidgetTemplate,\n icon: null,\n predicate: () => false,\n className: ''\n },\n\n /**\n * Templates currently specific to Search\n */\n [WidgetTemplate.ThumbnailFixedListMediaSmall]: {\n getComponent: () => ThumbnailFixedListMediaSmallWidgetTemplate,\n partialLoading: PartialThumbnailFixedListMediaSmallWidgetTemplate,\n icon: null,\n predicate: () => false,\n className: 'thumbnail-fixed-list-media-small-widget-template'\n },\n\n [WidgetTemplate.ThumbnailFixedListFolderSmall]: {\n getComponent: () => ThumbnailFixedListFolderSmallWidgetTemplate,\n partialLoading: PartialThumbnailFixedListFolderSmallWidgetTemplate,\n icon: null,\n predicate: () => false,\n className: ''\n },\n \n [WidgetTemplate.TagSlidingList]: {\n getComponent: () => TagSlidingListWidgetTemplate,\n partialLoading: PartialTagSlidingListWidgetTemplate,\n icon: null,\n predicate: () => false,\n className: 'tag-sliding-list-widget-template'\n },\n\n [WidgetTemplate.CurriculumCodeSearchResults]: {\n getComponent: () => CurriculumCodeSearchResultsWidgetTemplate,\n partialLoading: PartialCurriculumCodeSearchResultsWidgetTemplate,\n icon: null,\n predicate: () => false,\n className: ''\n },\n\n [WidgetTemplate.PosterFixedListLarge]: {\n getComponent: () => PosterFixedListLargeWidgetTemplate,\n partialLoading: PartialPosterFixedListLargeWidgetTemplate,\n icon: null,\n predicate: () => false,\n className: 'poster-fixed-list-large-widget-template'\n },\n\n [WidgetTemplate.SearchSuggestionsBlurb]: {\n getComponent: () => SearchSuggestionsBlurbWidgetTemplate,\n partialLoading: PartialSearchSuggestionsBlurbWidgetTemplate,\n icon: null,\n predicate: () => false,\n className: ''\n },\n\n /**\n * The templates below are currently not in use, but are still supported\n */\n [WidgetTemplate.ThumbnailSlidingListSmall]: {\n getComponent: () => ThumbnailSlidingListSmallWidgetTemplate,\n partialLoading: PartialThumbnailSlidingListSmallWidgetTemplate,\n icon: WidgetTemplateThumbnailSlidingListSmallSvg,\n predicate: () => false,\n className: ''\n },\n\n [WidgetTemplate.ThumbnailSlidingListLarge]: {\n getComponent: () => ThumbnailSlidingListLargeWidgetTemplate,\n partialLoading: PartialThumbnailSlidingListLargeWidgetTemplate,\n icon: WidgetTemplateThumbnailSlidingListLargeSvg,\n predicate: () => false,\n className: ''\n }\n};\n"],"x_google_ignoreList":[1,2,3,4,5,6,7,8],"mappings":"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"}
1
+ {"version":3,"file":"DxW67uUT.chunk.js","names":["context","AccordionContext","AccordionItemContext","AccordionContext","AccordionButton","AccordionItemContext","AccordionButton","AccordionItemContext"],"sources":["../../../../../../../libs/shared/src/interfaces/models/Widget.ts","../../../../../../../../node_modules/react-bootstrap/esm/AccordionContext.js","../../../../../../../../node_modules/react-bootstrap/esm/AccordionCollapse.js","../../../../../../../../node_modules/react-bootstrap/esm/AccordionItemContext.js","../../../../../../../../node_modules/react-bootstrap/esm/AccordionBody.js","../../../../../../../../node_modules/react-bootstrap/esm/AccordionButton.js","../../../../../../../../node_modules/react-bootstrap/esm/AccordionHeader.js","../../../../../../../../node_modules/react-bootstrap/esm/AccordionItem.js","../../../../../../../../node_modules/react-bootstrap/esm/Accordion.js","../../../../../../../libs/shared/src/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/rectangular-logo-sliding-list/partial-loading/PartialRectangularLogoSlidingList.tsx","../../../../../../../libs/shared/src/enums/WidgetContents.ts","../../../../../../../libs/shared/src/components/widgets/fixed-widget/FixedWidgetUtils.ts","../../../../../../../libs/shared/src/components/widgets/fixed-widget/FixedWidgetReducer.tsx","../../../../../../../libs/shared/src/components/widgets/fixed-widget/fixed-widget.module.scss","../../../../../../../libs/shared/src/components/widgets/fixed-widget/PartialFixedWidget.tsx","../../../../../../../libs/shared/src/components/widgets/fixed-widget/FixedWidget.tsx","../../../../../../../libs/shared/src/components/widgets/items/popout-video-widget-item/popout-video-widget-item.module.scss","../../../../../../../libs/shared/src/components/widgets/items/popout-video-widget-item/PopoutVideoWidgetItem.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/all-videos-list/thumbnail-fixed-list-search-cta-template.module.scss","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/all-videos-list/ThumbnailFixedListSearchCtaWidgetTemplate.tsx","../../../../../../../libs/shared/src/images/svg/status/VerifiedSvg.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/author-reviewer/author-reviewer-widget-template.module.scss","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/author-reviewer/AuthorReviewerWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/author-reviewer/partial-loading/PartialAuthorReviewerWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/items/circle-logo-widget-item/circle-logo-widget-item.module.scss","../../../../../../../libs/shared/src/components/widgets/items/circle-logo-widget-item/CircleLogoWidgetItem.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/circle-logo-sliding-list/CircleLogoSlidingListWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/circle-logo-sliding-list/partial-loading/partial-circle-logo-sliding-list.module.scss","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/circle-logo-sliding-list/partial-loading/PartialCircleLogoSlidingList.tsx","../../../../../../../libs/shared/src/components/widgets/items/subject-widget-item/cover-pill.module.scss","../../../../../../../libs/shared/src/components/widgets/items/subject-widget-item/CoverPill.tsx","../../../../../../../libs/shared/src/components/widgets/items/subject-widget-item/SubjectWidgetItem.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-pill-list-large/CoverFixedPillListLargeWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/items/subject-widget-item/PartialSubjectWidgetItem.tsx","../../../../../../../libs/shared/src/components/widgets/items/subject-widget-item/EditSubjectsWidgetLink.tsx","../../../../../../../libs/shared/src/components/widgets/items/subject-widget-item/AllSubjectsWidgetLink.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-pill-list-large/partial-loading/PartialCoverFixedPillListLargeWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/emoji-text/emoji-text.module.scss","../../../../../../../libs/shared/src/components/emoji-text/EmojiText.tsx","../../../../../../../libs/shared/src/components/feedback-form/FeedbackFormValidationSchema.ts","../../../../../../../libs/shared/src/components/feedback-form/feedback-form.module.scss","../../../../../../../libs/shared/src/components/feedback-form/FeedbackForm.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-pill-list-xsmall/cover-fixed-pill-list-xsmall.module.scss","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-pill-list-xsmall/CoverFixedPillListXSmallWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-pill-list-xsmall/partial-loading/PartialCoverFixedPillListXSmallWidgetTemplate.tsx","../../../../../../../libs/shared/src/apps/playlists/components/playlist-list/playlist.module.scss","../../../../../../../libs/shared/src/apps/playlists/components/playlist-list/PartialPlaylistList.tsx","../../../../../../../libs/shared/src/apps/playlists/components/playlist-count/PlaylistCount.tsx","../../../../../../../libs/shared/src/apps/playlists/components/playlist-list/PlaylistOwnerAvatar.tsx","../../../../../../../libs/shared/src/apps/playlists/components/playlist-list/PlaylistItem.tsx","../../../../../../../libs/shared/src/apps/playlists/components/playlist-list/PlaylistList.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-tile-list/CoverFixedTileListWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-tile-list/partial-loading/PartialCoverFixedTileListWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-sliding-pill-list-small/CoverSlidingPillListSmallWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-sliding-pill-list-small/partial-loading/PartialCoverSlidingPillListSmallWidgetTemplate.tsx","../../../../../../../libs/shared/src/apps/search/components/search-exchange-archive-description/SearchExchangeArchiveDescription.tsx","../../../../../../../libs/shared/src/components/drag-drop-move/DragDropMoveWrapper.tsx","../../../../../../../libs/shared/src/components/video-list/components/video-item-left-content/video-item-left-content.module.scss","../../../../../../../libs/shared/src/components/video-list/components/video-item-left-content/VideoItemLeftContent.tsx","../../../../../../../libs/shared/src/components/sign-in-to-watch/SignInToWatch.tsx","../../../../../../../libs/shared/src/context/VideoActionsContext.tsx","../../../../../../../libs/shared/src/components/video-list/components/video-item-actions/VideoItemActions.tsx","../../../../../../../libs/shared/src/components/video-list/components/video-item-top-right/VideoItemTopRight.tsx","../../../../../../../libs/shared/src/components/video-list/VideoListHelper.tsx","../../../../../../../libs/shared/src/components/video-list/clip-item/clip-item.module.scss","../../../../../../../libs/shared/src/components/video-list/clip-item/ClipItem.tsx","../../../../../../../libs/shared/src/components/video-list/interactive-item/InteractiveItem.tsx","../../../../../../../libs/shared/src/components/video-list/video-item/video-item.module.scss","../../../../../../../libs/shared/src/components/video-list/video-item/VideoItem.tsx","../../../../../../../libs/shared/src/components/video-list/video-list.module.scss","../../../../../../../libs/shared/src/components/video-list/VideoList.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-vertical-list/ThumbnailVerticalListWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-code-search-results/CurriculumCodeSearchResultsWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/video-list/partial-loading/partial-video-list.module.scss","../../../../../../../libs/shared/src/components/video-list/partial-loading/PartialVideoList.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-vertical-list/partial-loading/PartialThumbnailVerticalListWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-code-search-results/partial/PartialCurriculumCodeSearchResultsWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/components/accordion-button/accordion-button.module.scss","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/components/accordion-button/AccordionButton.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/components/curriculum-accordion-video-list/curriculum-accordion-video-list.module.scss","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/components/curriculum-accordion-video-list/CurriculumAccordionVideoList.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/components/audience-section/audience-section.module.scss","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/components/audience-section/AudienceSection.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/CurriculumAccordionUtils.ts","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/CurriculumResourcesAccordionWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/partial-loading/PartialCurriculumResourcesAccordionWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/items/subject-widget-item/EditableSubjectWidgetItem.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/editable-cover-fixed-pill-list-small/editable-cover-fixed-pill-list-small.module.scss","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/editable-cover-fixed-pill-list-small/EditableCoverFixedPillListSmallWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/editable-cover-fixed-pill-list-small/partial-loading/partial-editable-cover-fixed-pill-list-small-widget-template.module.scss","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/editable-cover-fixed-pill-list-small/partial-loading/PartialEditableCoverFixedPillListSmallWidgetTemplate.tsx","../../../../../../../libs/shared/src/apps/calendar/components/calendar-cell-date/calendar-cell-date.module.scss","../../../../../../../libs/shared/src/apps/calendar/components/calendar-cell-date/CalendarCellDate.tsx","../../../../../../../libs/shared/src/apps/calendar/components/coming-soon-tag/coming-soon-tag.module.scss","../../../../../../../libs/shared/src/apps/calendar/components/coming-soon-tag/ComingSoonTag.tsx","../../../../../../../libs/shared/src/apps/calendar/constants/CalendarAnimation.ts","../../../../../../../libs/shared/src/apps/calendar/utils/CalendarHelper.ts","../../../../../../../libs/shared/src/constants/CommonRegionMap.ts","../../../../../../../libs/shared/src/apps/calendar/utils/SpecialEventHelper.ts","../../../../../../../libs/shared/src/components/slider-dots/slider-dots.module.scss","../../../../../../../libs/shared/src/components/slider-dots/SliderDots.tsx","../../../../../../../libs/shared/src/apps/calendar/components/calendar-events/calendar-events.module.scss","../../../../../../../libs/shared/src/apps/calendar/components/calendar-events/CalendarEvents.tsx","../../../../../../../libs/shared/src/apps/calendar/components/calendar-day/calendar-day.module.scss","../../../../../../../libs/shared/src/apps/calendar/components/calendar-day/CalendarDay.tsx","../../../../../../../libs/shared/src/apps/calendar/components/generic-calendar-date/generic-calendar-date.module.scss","../../../../../../../libs/shared/src/apps/calendar/components/generic-calendar-date/GenericCalendarDate.tsx","../../../../../../../libs/shared/src/components/widgets/items/special-event-widget-item/special-event-widget-item.module.scss","../../../../../../../libs/shared/src/components/widgets/items/special-event-widget-item/SpecialEventWidgetItem.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/event-icon-sliding-list/EventIconSlidingListWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/event-icon-sliding-list/partial-loading/PartialEventIconSlidingListWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/items/video-widget-item/v1/video-widget-item.module.scss","../../../../../../../libs/shared/src/components/widgets/items/video-widget-item/v1/VideoWidgetItem.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/featured-thumbnail-sliding-list/featured-sliding-heading.module.scss","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/featured-thumbnail-sliding-list/FeaturedThumbnailSlidingListWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/featured-thumbnail-sliding-list/partial-loading/PartialFeaturedThumbnailSlidingListWidgetTemplate.tsx","../../../../../../../libs/shared/src/views/feedback/enums/FeedbackOption.ts","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/feedback/FeedbackWidgetContent.ts","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/feedback/feedback-widget-template.module.scss","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/feedback/FeedbackWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/feedback/partial-loading/PartialFeedbackWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/items/rating-widget-item/rating-widget-item.module.scss","../../../../../../../libs/shared/src/components/widgets/items/rating-widget-item/RatingWidgetItem.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/filter-sliding-pill-list-small/FilterSlidingPillListSmallWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/filter-sliding-pill-list-small/partial-loading/PartialFilterSlidingPillListSmall.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/heading/HeadingWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/heading/partial-loading/PartialHeadingWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner/hero-banner.module.scss","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner/HeroBannerWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner/partial-loading/PartialHeroBannerWidgetTemplate.tsx","../../../../../../../libs/shared/src/images/svg/objects/GridSvg.tsx","../../../../../../../libs/shared/src/images/svg/objects/RectanglesSvg.tsx","../../../../../../../libs/shared/src/images/svg/objects/SparkleSvg.tsx","../../../../../../../libs/shared/src/constants/WidgetThemingConstants.ts","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/hero-banner-small.module.scss","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/types/BlurbHeroBannerSmallWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/components/classification-hero-banner-small/classification-hero-thumbnail-small.module.scss","../../../../../../../libs/shared/src/components/widgets/curated-widgets/components/classification-hero-banner-small/ClassificationHeroBannerSmall.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/types/ClassificationHeroBannerSmallWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/types/PresentationsHeroBannerSmallWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/HeroBannerSmallWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/partial-loading/PartialHeroBannerSmallWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-block-colour-small/HeroBlockColourSmallWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-block-colour-small/partial-loading/PartialHeroBlockColourSmallWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-thumbnail-small/HeroThumbnailSmallWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-thumbnail-small/partial-loading/PartialHeroThumbnailSmallWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_large/partial-loading/PartialPopoutThumbnailSlidingListLarge.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_large/PopoutThumbnailSlidingListLargeWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_small/partial-loading/PartialPopoutThumbnailSlidingListSmall.tsx","../../../../../../../libs/shared/src/components/widgets/items/subject-stats-widget-item/subject-stats-badge/subject-stats-badge.module.scss","../../../../../../../libs/shared/src/components/widgets/items/subject-stats-widget-item/subject-stats-badge/SubjectStatsBadge.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_small/PopoutThumbnailSlidingListSmallWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/items/series-widget-item/series-widget-item.module.scss","../../../../../../../libs/shared/src/components/widgets/items/series-widget-item/PartialSeriesList.tsx","../../../../../../../libs/shared/src/components/series-tall-poster/series-tall-poster.module.scss","../../../../../../../libs/shared/src/components/series-tall-poster/SeriesTallPoster.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/poster-fixed-list-large/PosterFixedListLargeWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/items/series-widget-item/SeriesWidgetItem.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-large/PosterSlidingListLargeWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/items/tall-subject-widget-item/tall-subject-widget-item.module.scss","../../../../../../../libs/shared/src/components/widgets/items/tall-subject-widget-item/PartialTallSubjectWidget.tsx","../../../../../../../libs/shared/src/components/widgets/items/tall-subject-widget-item/TallSubjectWidgetItem.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-medium/partial-loading/PartialPosterSlidingListMediumWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-medium/PosterSlidingListMediumWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-small/classification/ClassificationPosterSlidingListSmallWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-small/partial-loading/PartialPosterSlidingListSmallWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-small/series/SeriesPosterSlidingListSmallWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/question/question-widget-template.module.scss","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/question/partial-loading/PartialQuestionWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/expandable-question/expandable-question.module.scss","../../../../../../../libs/shared/src/components/expandable-question/ExpandableQuestion.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/question/QuestionWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/question-accordion/question-accordion-widget-template.module.scss","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/question-accordion/partial-loading/PartialQuestionAccordionWidgetTemplate.tsx","../../../../../../../libs/shared/src/hooks/useFaqJsonLd.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/question-accordion/QuestionAccordionWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/rectangular-logo/RectangularLogo.tsx","../../../../../../../libs/shared/src/enums/PartnerType.ts","../../../../../../../libs/shared/src/components/widgets/items/rectangular-logo-widget-item/RectangularLogoWidgetItem.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/rectangular-logo-sliding-list/RectangularLogoSlidingListWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/search-suggestions-blurb/partial-loading/PartialSearchSuggestionsBlurbWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/search-suggestions-blurb/SearchSuggestionsBlurbWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/items/subject-stats-widget-item/subject-stats-widget-item.module.scss","../../../../../../../libs/shared/src/components/widgets/items/subject-stats-widget-item/partial-loading/PartialSubjectStatsWidgetItem.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/stats-cover-fixed-pill-list-large/partial-loading/PartialStatsCoverFixedPillListLargeWidgetTemplate.tsx","../../../../../../../libs/shared/src/images/svg/objects/BellFilledSvg.tsx","../../../../../../../libs/shared/src/images/svg/objects/BellSvg.tsx","../../../../../../../libs/shared/src/components/widgets/items/subject-stats-widget-item/SubjectStatsWidgetItem.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/stats-cover-fixed-pill-list-large/StatsCoverFixedPillListLargeWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/tag-sliding-list/partial-loading/PartialTagSlidingListWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/tag-sliding-list/TagSlidingListWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/video-guidance/tag/partial-loading/PartialVideoGuidanceTag.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-featured-media/partial-loading/partial-featured-widget-template.module.scss","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-featured-media/partial-loading/PartialThumbnailFeaturedMediaWidgetTemplate.tsx","../../../../../../../libs/shared/src/apps/subjects/components/hero-video/hero-video.module.scss","../../../../../../../libs/shared/src/apps/subjects/components/hero-video/HeroVideo.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-featured-media/ThumbnailFeaturedMediaWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/library-folder/library-folder.module.scss","../../../../../../../libs/shared/src/components/library-folder/LibraryFolder.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-folder-small/ThumbnailFixedListFolderSmallWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-large/partial-loading/partial-thumbnail-fixed-list-large-widget-template.module.scss","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-large/partial-loading/PartialThumbnailFixedListLargeWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/items/thumbnail-widget-item/thumbnail-widget-item.module.scss","../../../../../../../libs/shared/src/components/widgets/items/thumbnail-widget-item/ThumbnailWidgetItem.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-large/ThumbnailFixedListLargeWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/partial-loading/partial-thumbnail-fixed-list-media-large-widget-template.module.scss","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/partial-loading/PartialThumbnailFixedListMediaLargeWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/components/thumbnail-fixed-list-media-large-widget.module.scss","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/components/ThumbnailFixedListMediaLargeWidgetTemplateItem.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/thumbnail-fixed-list-media-large-widget-template.module.scss","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/ThumbnailFixedListMediaLargeWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/thumbnails/collection/title/collection-thumbnail-title.module.scss","../../../../../../../libs/shared/src/components/thumbnails/collection/title/CollectionThumbnailTitle.tsx","../../../../../../../libs/shared/src/components/thumbnails/collection/collection-thumbnail.module.scss","../../../../../../../libs/shared/src/components/thumbnails/collection/CollectionThumbnail.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-small/ThumbnailFixedListMediaSmallWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-small/partial-loading/partial-thumbnail-fixed-list-small-widget-template.module.scss","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-small/partial-loading/PartialThumbnailFixedListSmallWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-small/ThumbnailFixedListSmallWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-xlarge/partial-loading/PartialThumbnailFixedListXLargeWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-xlarge/thumbnail-fixed-list-x-large.module.scss","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-xlarge/ThumbnailFixedListXLargeWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-hero-media/partial-loading/partial-thumbnail-hero-media-widget-template.module.scss","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-hero-media/partial-loading/PartialThumbnailHeroMediaWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-hero-media/thumbnail-hero-media-widget-template.module.scss","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-hero-media/ThumbnailHeroMediaWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-sliding-list-large/partial-loading/PartialThumbnailSlidingListLargeWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-sliding-list-large/ThumbnailSlidingListLargeWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-sliding-list-small/ThumbnailSlidingListSmallWidgetTemplate.tsx","../../../../../../../libs/shared/src/components/widgets/items/video-widget-item/v2/video-widget-item-v2.module.scss","../../../../../../../libs/shared/src/components/widgets/items/video-widget-item/v2/VideoWidgetItemV2.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/components/download-all-resources-button/download-all-resources-button.module.scss","../../../../../../../libs/shared/src/components/widgets/curated-widgets/components/download-all-resources-button/DownloadAllResourcesButton.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-sliding-list-small_v2/ThumbnailSlidingListSmallV2WidgetTemplate.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateCoverFixedPillListLargeSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateCoverFixedPillListXsmallSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateFeedbackCtaSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplatePopoutThumbnailSlidingListSmallCtaSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplatePosterSlidingListLargeSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplatePosterSlidingListMediumSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplatePosterSlidingListSmallSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateStatsCoverFixedPillListLargeSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailFeaturedMediaSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailHeroMediaSvg.tsx","../../../../../../../libs/shared/src/components/widgets/curated-widgets/templates/rectangular-logo-fixed-list/RectangularLogoFixedListWidgetTemplate.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateAuthorReviewerSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateCircleLogoSlidingListSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateCoverFixedTileListSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateCoverSlidingPillListSmallSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateEditableCoverFixedPillListSmallSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateEventIconSlidingListSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateFeaturedThumbnailSlidingListSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateFilterSlidingPillListSmallSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateHeadingSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateHeroBannerSmallSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateHeroBannerSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateHeroBlockColourSmallSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateHeroThumbnailSmallSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplatePopoutThumbnailSlidingListLargeSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplatePopoutThumbnailSlidingListSmallSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateQuestionAccordionSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateQuestionSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateRectangularLogoSlidingListSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailFixedListLargeSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailFixedListMediaLargeSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailFixedListSmallSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailFixedListXlargeSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailSlidingListLargeSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailSlidingListSmallSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailVerticalListSvg.tsx","../../../../../../../libs/shared/src/constants/WidgetTemplateConfig.ts"],"sourcesContent":["import { BaseObject } from 'libs/shared/interfaces';\n\n/**\n * This maps directly against the widget types from Domain.\n * Update is only required where the backend changes.\n */\nexport enum WidgetType {\n Row = 0, // At full-size, this will contain a row of 4 items\n LargeRow = 1, // At full-size, this will contain a row of 3 times\n Hero = 2,\n ResourcesTile = 3 // Deprecated. Widget's with this type will fall back to the `Row` type (0).\n}\n\nexport interface Widget extends Omit<BaseObject, 'type'> {\n collectionId: string;\n dashboardId: string;\n type: WidgetType;\n}\n","\"use client\";\n\nimport * as React from 'react';\nexport function isAccordionItemSelected(activeEventKey, eventKey) {\n return Array.isArray(activeEventKey) ? activeEventKey.includes(eventKey) : activeEventKey === eventKey;\n}\nconst context = /*#__PURE__*/React.createContext({});\ncontext.displayName = 'AccordionContext';\nexport default context;","\"use client\";\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { useContext } from 'react';\nimport { useBootstrapPrefix } from './ThemeProvider';\nimport Collapse from './Collapse';\nimport AccordionContext, { isAccordionItemSelected } from './AccordionContext';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * This component accepts all of [`Collapse`'s props](/docs/utilities/transitions#collapse-1).\n */\nconst AccordionCollapse = /*#__PURE__*/React.forwardRef(({\n as: Component = 'div',\n bsPrefix,\n className,\n children,\n eventKey,\n ...props\n}, ref) => {\n const {\n activeEventKey\n } = useContext(AccordionContext);\n bsPrefix = useBootstrapPrefix(bsPrefix, 'accordion-collapse');\n return /*#__PURE__*/_jsx(Collapse, {\n ref: ref,\n in: isAccordionItemSelected(activeEventKey, eventKey),\n ...props,\n className: classNames(className, bsPrefix),\n children: /*#__PURE__*/_jsx(Component, {\n children: React.Children.only(children)\n })\n });\n});\nAccordionCollapse.displayName = 'AccordionCollapse';\nexport default AccordionCollapse;","\"use client\";\n\nimport * as React from 'react';\nconst context = /*#__PURE__*/React.createContext({\n eventKey: ''\n});\ncontext.displayName = 'AccordionItemContext';\nexport default context;","\"use client\";\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { useContext } from 'react';\nimport { useBootstrapPrefix } from './ThemeProvider';\nimport AccordionCollapse from './AccordionCollapse';\nimport AccordionItemContext from './AccordionItemContext';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst AccordionBody = /*#__PURE__*/React.forwardRef(({\n // Need to define the default \"as\" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595\n as: Component = 'div',\n bsPrefix,\n className,\n onEnter,\n onEntering,\n onEntered,\n onExit,\n onExiting,\n onExited,\n ...props\n}, ref) => {\n bsPrefix = useBootstrapPrefix(bsPrefix, 'accordion-body');\n const {\n eventKey\n } = useContext(AccordionItemContext);\n return /*#__PURE__*/_jsx(AccordionCollapse, {\n eventKey: eventKey,\n onEnter: onEnter,\n onEntering: onEntering,\n onEntered: onEntered,\n onExit: onExit,\n onExiting: onExiting,\n onExited: onExited,\n children: /*#__PURE__*/_jsx(Component, {\n ref: ref,\n ...props,\n className: classNames(className, bsPrefix)\n })\n });\n});\nAccordionBody.displayName = 'AccordionBody';\nexport default AccordionBody;","\"use client\";\n\nimport * as React from 'react';\nimport { useContext } from 'react';\nimport classNames from 'classnames';\nimport AccordionContext, { isAccordionItemSelected } from './AccordionContext';\nimport AccordionItemContext from './AccordionItemContext';\nimport { useBootstrapPrefix } from './ThemeProvider';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function useAccordionButton(eventKey, onClick) {\n const {\n activeEventKey,\n onSelect,\n alwaysOpen\n } = useContext(AccordionContext);\n return e => {\n /*\n Compare the event key in context with the given event key.\n If they are the same, then collapse the component.\n */\n let eventKeyPassed = eventKey === activeEventKey ? null : eventKey;\n if (alwaysOpen) {\n if (Array.isArray(activeEventKey)) {\n if (activeEventKey.includes(eventKey)) {\n eventKeyPassed = activeEventKey.filter(k => k !== eventKey);\n } else {\n eventKeyPassed = [...activeEventKey, eventKey];\n }\n } else {\n // activeEventKey is undefined.\n eventKeyPassed = [eventKey];\n }\n }\n onSelect == null || onSelect(eventKeyPassed, e);\n onClick == null || onClick(e);\n };\n}\nconst AccordionButton = /*#__PURE__*/React.forwardRef(({\n // Need to define the default \"as\" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595\n as: Component = 'button',\n bsPrefix,\n className,\n onClick,\n ...props\n}, ref) => {\n bsPrefix = useBootstrapPrefix(bsPrefix, 'accordion-button');\n const {\n eventKey\n } = useContext(AccordionItemContext);\n const accordionOnClick = useAccordionButton(eventKey, onClick);\n const {\n activeEventKey\n } = useContext(AccordionContext);\n if (Component === 'button') {\n props.type = 'button';\n }\n return /*#__PURE__*/_jsx(Component, {\n ref: ref,\n onClick: accordionOnClick,\n ...props,\n \"aria-expanded\": Array.isArray(activeEventKey) ? activeEventKey.includes(eventKey) : eventKey === activeEventKey,\n className: classNames(className, bsPrefix, !isAccordionItemSelected(activeEventKey, eventKey) && 'collapsed')\n });\n});\nAccordionButton.displayName = 'AccordionButton';\nexport default AccordionButton;","\"use client\";\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { useBootstrapPrefix } from './ThemeProvider';\nimport AccordionButton from './AccordionButton';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst AccordionHeader = /*#__PURE__*/React.forwardRef(({\n // Need to define the default \"as\" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595\n as: Component = 'h2',\n 'aria-controls': ariaControls,\n bsPrefix,\n className,\n children,\n onClick,\n ...props\n}, ref) => {\n bsPrefix = useBootstrapPrefix(bsPrefix, 'accordion-header');\n return /*#__PURE__*/_jsx(Component, {\n ref: ref,\n ...props,\n className: classNames(className, bsPrefix),\n children: /*#__PURE__*/_jsx(AccordionButton, {\n onClick: onClick,\n \"aria-controls\": ariaControls,\n children: children\n })\n });\n});\nAccordionHeader.displayName = 'AccordionHeader';\nexport default AccordionHeader;","\"use client\";\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { useMemo } from 'react';\nimport { useBootstrapPrefix } from './ThemeProvider';\nimport AccordionItemContext from './AccordionItemContext';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst AccordionItem = /*#__PURE__*/React.forwardRef(({\n // Need to define the default \"as\" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595\n as: Component = 'div',\n bsPrefix,\n className,\n eventKey,\n ...props\n}, ref) => {\n bsPrefix = useBootstrapPrefix(bsPrefix, 'accordion-item');\n const contextValue = useMemo(() => ({\n eventKey\n }), [eventKey]);\n return /*#__PURE__*/_jsx(AccordionItemContext.Provider, {\n value: contextValue,\n children: /*#__PURE__*/_jsx(Component, {\n ref: ref,\n ...props,\n className: classNames(className, bsPrefix)\n })\n });\n});\nAccordionItem.displayName = 'AccordionItem';\nexport default AccordionItem;","\"use client\";\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { useMemo } from 'react';\nimport { useUncontrolled } from 'uncontrollable';\nimport { useBootstrapPrefix } from './ThemeProvider';\nimport AccordionBody from './AccordionBody';\nimport AccordionButton from './AccordionButton';\nimport AccordionCollapse from './AccordionCollapse';\nimport AccordionContext from './AccordionContext';\nimport AccordionHeader from './AccordionHeader';\nimport AccordionItem from './AccordionItem';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst Accordion = /*#__PURE__*/React.forwardRef((props, ref) => {\n const {\n // Need to define the default \"as\" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595\n as: Component = 'div',\n activeKey,\n bsPrefix,\n className,\n onSelect,\n flush,\n alwaysOpen,\n ...controlledProps\n } = useUncontrolled(props, {\n activeKey: 'onSelect'\n });\n const prefix = useBootstrapPrefix(bsPrefix, 'accordion');\n const contextValue = useMemo(() => ({\n activeEventKey: activeKey,\n onSelect,\n alwaysOpen\n }), [activeKey, onSelect, alwaysOpen]);\n return /*#__PURE__*/_jsx(AccordionContext.Provider, {\n value: contextValue,\n children: /*#__PURE__*/_jsx(Component, {\n ref: ref,\n ...controlledProps,\n className: classNames(className, prefix, flush && `${prefix}-flush`)\n })\n });\n});\nAccordion.displayName = 'Accordion';\nexport default Object.assign(Accordion, {\n Button: AccordionButton,\n Collapse: AccordionCollapse,\n Item: AccordionItem,\n Header: AccordionHeader,\n Body: AccordionBody\n});","import React from 'react';\n\nimport { WidgetHeader } from '../WidgetHeader';\n\ninterface PartialWidgetHeaderProps {\n hideHeading?: boolean;\n hideDescription?: boolean;\n name?: string;\n description?: string;\n isPreviewing?: boolean;\n}\n\nexport function PartialWidgetHeader(props: PartialWidgetHeaderProps): JSX.Element {\n if (props.hideDescription && props.hideHeading)\n return <></>;\n\n if (props.isPreviewing) {\n return (\n <WidgetHeader\n name={props.name}\n description={props.description}\n />\n );\n }\n\n return (\n <div className='curated-widget-header'>\n {!props.hideHeading && (\n <div className='partial-loading-background curated-widget-heading' style={{ height: '1.5rem', width: '12rem' }} />\n )}\n\n {!props.hideDescription && (\n <div className='partial-loading-background curated-widget-description' style={{ height: '1.434375rem', width: '16rem' }} />\n )}\n </div>\n );\n}\n","import React from 'react';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { PartialWidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nexport function PartialRectangularLogoSlidingListWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n let itemsCount = 5;\n\n const breakpoints = useBreakpoints();\n if (breakpoints.sm || breakpoints.xs) {\n itemsCount = 2;\n }\n if (breakpoints.md) {\n itemsCount = 3;\n }\n\n return (\n <>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\n <div className='d-flex flex-no-wrap'>\n {Array(itemsCount)\n .fill(null)\n .map((_, i) => {\n return (\n <div key={i} style={{ flex: 1 }}>\n <div\n style={{ width: '90%' }}\n className='h-auto d-inline-block partial-loading-background rounded-3 ratio ratio-16x9'\n />\n <div style={{ width: '90%', height: '1.25rem' }} className='partial-loading-background mt-1' />\n </div>\n );\n })}\n </div>\n </>\n );\n}\n","export enum WidgetContents {\n Videos = 'videos',\n FeedVideos = 'feed videos',\n Series = 'series',\n Subjects = 'subjects',\n Playlists = 'playlists',\n Interactives = 'interactives',\n Clips = 'clips',\n PlayPageResources = 'play page resources',\n DashboardResources = 'dashboard resources',\n Libraries = 'Libraries',\n Folders = 'Folders',\n RecentActivities = 'recent activities',\n SmallSeries = 'small series',\n Companies = 'companies',\n PartnerProfiles = 'partner profiles',\n Ratings = 'ratings',\n SpecialEvents = 'special events',\n\n InteractivesV2 = 'interactives v2',\n ClipsV2 = 'clips v2',\n PlayPageResourcesV2 = 'playpage resources v2'\n}\n","import * as React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\nimport { ReducerActions } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { WidgetInteraction } from 'libs/shared/enums/WidgetInteraction';\nimport { Breakpoints, useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { BaseObject, WidgetType } from 'libs/shared/interfaces';\n\nimport { FixedWidgetProps, WIDGET_ITEM_LIMIT } from './FixedWidget';\nimport { FixedWidgetPayload, FixedWidgetState } from './FixedWidgetReducer';\n\nexport interface WidgetData {\n id?: string;\n name?: string;\n description?: string;\n}\n\nexport function useFetchData<T extends React.ComponentType<FixedWidgetItemProps>>(\n props: FixedWidgetProps<T>,\n dispatch: React.Dispatch<ReducerActions<WidgetInteraction, FixedWidgetPayload>>,\n shouldFetch: boolean\n): Flight.Response<any> {\n let data = props.collection;\n let res: Flight.Response<any>;\n\n if ((!data || ObjectHelper.isEmpty(data)) && !props.prefetched) {\n res = props.fetch(shouldFetch);\n data = res.data;\n }\n\n /**\n * Once we have the widget data, lazily update our state with the new collection\n */\n const collection = (FunctionHelper.isFunction(props.setData) && data) ? props.setData(data) : data;\n let collectionToDisplay = collection;\n\n const breakpoints = useBreakpoints();\n\n React.useEffect(() => {\n if (!data || ObjectHelper.isEmpty(data))\n return;\n\n if (props.limitTotalItems)\n collectionToDisplay = collection.length > WIDGET_ITEM_LIMIT ? collection.slice(0, WIDGET_ITEM_LIMIT) : collection;\n\n let type = props.type;\n\n // The ResourcesTile widget type is deprecated. We render the Row type instead in this case\n if (type === WidgetType.ResourcesTile)\n type = WidgetType.Row;\n\n dispatch({\n type: WidgetInteraction.Init,\n payload: {\n totalItems: collectionToDisplay.length,\n breakpoints,\n type,\n contents: props.contents\n }\n });\n }, [collection?.length]);\n\n return res;\n}\n\n/**\n * This function wrapper determines which widget item images should be pre-fetched by the LazyImage component.\n * It does this by looking at which images are going to be shown after the users clicks on the \"Next\"\n * widget button.\n */\nexport function getShouldPreload(state: FixedWidgetState, collection: any[]): (widgetItem: any) => boolean {\n const { offset, viewableItems } = state;\n\n // The index of the latest item that has been fetched\n const maxLoadedIndex = offset;\n\n /**\n * The indicesToPreload is an array of indices of widget items that should be prefetched by the\n * LazyImage component\n */\n const indicesToPreload: number[] = [];\n for (let i = 0; i < maxLoadedIndex + viewableItems; i++) {\n indicesToPreload.push(i);\n }\n\n /**\n * A widget item calls this function to determine whether or not its image can be pre-fetched.\n * This is determined by whether or not its index has been deemed valid to be pre-fetched\n * by the scope above\n */\n return function shouldPreload(widgetItem: any): boolean {\n const index = collection.indexOf(widgetItem);\n\n return indicesToPreload.includes(index);\n };\n}\n\nexport function getCollectionAppLink(appLink: Core.AppLink, data: WidgetData): Core.AppLink {\n if (!appLink)\n return;\n\n return {\n ...appLink,\n args: appLink.args || [ data.id, TextHelper.slugify(data.name) ]\n };\n}\n\n/**\n * Allow explicit name and description props to override the fetched\n * data properties.\n * \n * @param props \n * @param data \n */\nexport function formatData<T extends React.ComponentType<FixedWidgetItemProps>>(\n props: FixedWidgetProps<T>,\n data: BaseObject\n): WidgetData {\n const { id, name, description } = props;\n\n const overrideProps: WidgetData = {};\n\n if (Array.isArray(data))\n return { id, name, description };\n\n if (props.id) overrideProps.id = id;\n if (props.name) overrideProps.name = name;\n if (props.description) overrideProps.description = description;\n\n return { ...data, ...overrideProps };\n}\n\n/**\n * The functions below are used by the reducer to compute the number of widget items\n * displayed on the screen based on the media query, widget type, and total number of items.\n */\ntype ComputeFunction = (breakpoints: Breakpoints, type: WidgetType, itemCount: number) => number;\n\n/**\n * TODO:\n * This and the `WidgetType` enum need to be replaced entirely as this is no longer maintainable.\n * Each widget type + template combination should define it's own item count per\n * breakpoint and pass it in as props.\n */\nexport function getComputeFunction(contents: WidgetContents): ComputeFunction {\n switch (contents) {\n case WidgetContents.Playlists:\n return computeViewablePlaylists;\n\n case WidgetContents.Videos:\n return computeViewableVideos;\n\n case WidgetContents.RecentActivities:\n return computeViewableRecentActivities;\n\n case WidgetContents.FeedVideos:\n return computeViewableFeedVideos;\n\n case WidgetContents.Subjects:\n return computeViewableSubjects;\n\n case WidgetContents.InteractivesV2:\n return computeViewableInteractivesV2;\n\n case WidgetContents.Interactives:\n return computeViewableInteractives;\n\n case WidgetContents.ClipsV2:\n return computeViewableClipsV2;\n\n case WidgetContents.Clips:\n return computeViewableClips;\n\n case WidgetContents.PlayPageResources:\n return computeViewablePlayPageResources;\n\n case WidgetContents.PlayPageResourcesV2:\n return computeViewablePlayPageResourcesV2;\n\n case WidgetContents.DashboardResources:\n return computeViewableVideos;\n\n case WidgetContents.Libraries:\n case WidgetContents.Folders:\n return computeViewableLibraries;\n\n case WidgetContents.Ratings:\n return computeViewableRatings;\n\n case WidgetContents.SpecialEvents:\n return computeViewableSpecialEvents;\n\n case WidgetContents.Companies:\n return computeViewableCompanies;\n\n case WidgetContents.SmallSeries:\n return computeViewableSmallSeries;\n\n case WidgetContents.PartnerProfiles:\n return computeViewablePartnerProfiles;\n\n case WidgetContents.Series:\n default:\n return computeViewableSeries;\n }\n}\n\nfunction computeViewablePartnerProfiles(breakpoints: Breakpoints, type: WidgetType, itemCount: number): number {\n let maxItems: number = 6;\n\n if (breakpoints.xs || breakpoints.sm)\n maxItems = 2;\n else if (breakpoints.md)\n maxItems = 4;\n\n if (itemCount < maxItems)\n maxItems = itemCount;\n\n return maxItems;\n}\n\nfunction computeViewablePlaylists(breakpoints: Breakpoints, type: WidgetType, itemCount: number): number {\n let maxItems: number = 5;\n\n if (breakpoints.xs)\n maxItems = 2;\n else if (breakpoints.sm)\n maxItems = 3;\n else if (breakpoints.md)\n maxItems = 4;\n\n if (itemCount < maxItems)\n maxItems = itemCount;\n\n return maxItems;\n}\n\nfunction computeViewableCompanies(breakpoints: Breakpoints, type: WidgetType, itemCount: number): number {\n let maxItems: number = 8;\n\n if (breakpoints.xs || breakpoints.sm)\n maxItems = 4;\n else if (breakpoints.md)\n maxItems = 6;\n\n if (itemCount < maxItems)\n maxItems = itemCount;\n\n return maxItems;\n}\n\nfunction computeViewableLibraries(breakpoints: Breakpoints, type: WidgetType, itemCount: number): number {\n let maxItems: number = 3;\n\n if (breakpoints.xs || breakpoints.sm)\n maxItems = 1;\n else if (breakpoints.md)\n maxItems = 2;\n else if (breakpoints.lg)\n maxItems = 3;\n\n if (itemCount < maxItems)\n maxItems = itemCount;\n\n return maxItems;\n}\n\nfunction computeViewableVideos(breakpoints: Breakpoints, type: WidgetType, itemCount: number): number {\n let maxItems = 4;\n\n if (breakpoints.xs)\n maxItems = 1;\n\n if (breakpoints.sm)\n maxItems = 2;\n\n if (breakpoints.md || breakpoints.lg)\n maxItems = 3;\n\n if (type === WidgetType.LargeRow && maxItems > 3)\n maxItems = 3;\n\n if (itemCount < maxItems)\n maxItems = itemCount;\n\n return maxItems;\n}\n\nfunction computeViewableRecentActivities(breakpoints: Breakpoints, type: WidgetType, itemCount: number): number {\n let maxItems = 4;\n\n if (breakpoints.xs)\n maxItems = 2;\n\n if (breakpoints.sm)\n maxItems = 3;\n\n if (itemCount < maxItems)\n maxItems = itemCount;\n\n return maxItems;\n}\n\n// eslint-disable-next-line\nfunction computeViewableFeedVideos(breakpoints: Breakpoints, type: WidgetType, itemCount: number): number {\n return 1;\n}\n\nfunction computeViewableSubjects(breakpoints: Breakpoints, type: WidgetType, itemCount: number): number {\n if (type === WidgetType.LargeRow) {\n let maxItems: number = 5;\n\n if (breakpoints.xs)\n maxItems = 2;\n else if (breakpoints.sm)\n maxItems = 3;\n else if (breakpoints.md)\n maxItems = 4;\n\n if (itemCount < maxItems)\n maxItems = itemCount;\n\n return maxItems;\n }\n\n let maxItems: number = 6;\n\n if (breakpoints.xs)\n maxItems = 2;\n else if (breakpoints.sm)\n maxItems = 3;\n else if (breakpoints.md)\n maxItems = 4;\n else if (breakpoints.lg)\n maxItems = 5;\n else if (breakpoints.xl || breakpoints.xxl)\n maxItems = 6;\n\n if (itemCount < maxItems)\n maxItems = itemCount;\n\n return maxItems;\n}\n\nfunction computeViewableInteractives(breakpoints: Breakpoints, type: WidgetType, itemCount: number): number {\n let maxItems: number = 3;\n\n if (breakpoints.md || breakpoints.sm)\n maxItems = 2;\n\n if (breakpoints.xs)\n maxItems = 1;\n\n if (itemCount < Math.ceil(maxItems))\n maxItems = itemCount;\n\n return maxItems;\n}\n\nfunction computeViewableClips(breakpoints: Breakpoints, type: WidgetType, itemCount: number): number {\n let maxItems: number = 3;\n\n if (breakpoints.md || breakpoints.sm)\n maxItems = 2;\n\n if (breakpoints.xs)\n maxItems = 1;\n\n if (itemCount < Math.ceil(maxItems))\n maxItems = itemCount;\n\n return maxItems;\n}\n\nfunction computeViewableInteractivesV2(breakpoints: Breakpoints, type: WidgetType, itemCount: number): number {\n let maxItems: number = 3;\n\n if (breakpoints.xs)\n maxItems = 2;\n\n if (itemCount < maxItems)\n maxItems = itemCount;\n\n return maxItems;\n}\n\nfunction computeViewableClipsV2(breakpoints: Breakpoints, type: WidgetType, itemCount: number): number {\n let maxItems: number = 3;\n\n if (breakpoints.xs)\n maxItems = 2;\n\n if (itemCount < maxItems)\n maxItems = itemCount;\n\n return maxItems;\n}\n\nfunction computeViewablePlayPageResources(breakpoints: Breakpoints, type: WidgetType, itemCount: number): number {\n let maxItems: number = 4;\n\n if (breakpoints.sm)\n maxItems = 3;\n\n if (breakpoints.xs)\n maxItems = 2;\n\n if (itemCount < maxItems)\n maxItems = itemCount;\n\n return maxItems;\n}\n\nfunction computeViewablePlayPageResourcesV2(breakpoints: Breakpoints, type: WidgetType, itemCount: number): number {\n let maxItems: number = 3;\n\n if (breakpoints.xs)\n maxItems = 2;\n\n if (itemCount < maxItems)\n maxItems = itemCount;\n\n return maxItems;\n}\n\nfunction computeViewableSeries(breakpoints: Breakpoints, type: WidgetType, itemCount: number): number {\n let maxItems: number = 4;\n\n if (breakpoints.xs)\n maxItems = 2;\n else if (breakpoints.sm)\n maxItems = 3;\n\n if (itemCount < maxItems)\n maxItems = itemCount;\n\n return maxItems;\n}\n\nfunction computeViewableSmallSeries(breakpoints: Breakpoints, type: WidgetType, itemCount: number): number {\n let maxItems: number = 6;\n\n if (breakpoints.xs)\n maxItems = 2;\n else if (breakpoints.sm)\n maxItems = 3;\n else if (breakpoints.md)\n maxItems = 4;\n\n else if (breakpoints.lg)\n maxItems = 5;\n\n if (itemCount < maxItems)\n maxItems = itemCount;\n\n return maxItems;\n}\n\nfunction computeViewableRatings(breakpoints: Breakpoints, type: WidgetType, itemCount: number): number {\n if (itemCount < 4)\n return itemCount;\n\n let maxItems: number = 5;\n\n if (breakpoints.xs || breakpoints.sm)\n maxItems = 3;\n\n if (breakpoints.md || breakpoints.lg)\n maxItems = 4;\n\n if (itemCount === 4 && (breakpoints.xs || breakpoints.sm)) {\n maxItems = 3;\n }\n\n if (itemCount < maxItems)\n maxItems = itemCount;\n\n return maxItems;\n}\n\nfunction computeViewableSpecialEvents(breakpoints: Breakpoints, type: WidgetType, itemCount: number): number {\n let maxItems: number = 6;\n\n if (breakpoints.xs)\n maxItems = 2;\n\n if (breakpoints.sm)\n maxItems = 3;\n\n if (breakpoints.md)\n maxItems = 4;\n\n if (breakpoints.lg)\n maxItems = 5;\n\n if (breakpoints.xl || breakpoints.xxl)\n maxItems = 6;\n\n if (itemCount < maxItems)\n maxItems = itemCount;\n\n return maxItems;\n}\n\n/**\n * Touch event handlers\n */\nexport function getOnTouchStart(\n widgetState: FixedWidgetState,\n containerRef: React.MutableRefObject<HTMLUListElement>,\n containerWidth: number,\n setContainerWidth: React.Dispatch<number>,\n initialTouchX: number,\n setInitialTouchX: React.Dispatch<number>,\n setPercentageDragged: React.Dispatch<number>\n): (event: React.TouchEvent<HTMLUListElement>) => void {\n return function(event: React.TouchEvent<HTMLUListElement>): void {\n const firstTouch = event.touches.item(0);\n const touchX = firstTouch.clientX;\n\n /**\n * Runs only on the very first touch event.\n * \n * Sets the initial x-coordinate as a reference point to calculate how far the user has dragged before\n * they release their finder\n */\n if (!initialTouchX) {\n containerRef.current.style.transition = '';\n\n setContainerWidth(containerRef.current.getBoundingClientRect().width);\n setInitialTouchX(touchX);\n }\n\n const pixelsDragged = initialTouchX - touchX;\n\n // Calculate how far the user has moved their finger as a percentage of the widget's container element\n let currentPercentageDragged = ((pixelsDragged / containerWidth) * 100);\n\n /**\n * These 2 if statements prevent the user from dragging the widget beyond its limits.\n * One if statement handles if they have dragged to the left, and the other is for dragging to the right.\n * \n * The same logic is used to hide the widget buttons (see the `hide` prop passed to `<WidgetButton />`)\n */\n if (currentPercentageDragged < 0 && (widgetState.offset === widgetState.viewableItems))\n currentPercentageDragged = 0;\n\n else if (currentPercentageDragged > 0 && (widgetState.offset === widgetState.totalItems))\n currentPercentageDragged = 0;\n\n setPercentageDragged(currentPercentageDragged);\n };\n}\n\nconst DRAG_TOLERANCE = 7.5; // % of container width using to trigger a transition.\n\nexport function getOnTouchEnd(\n containerRef: React.MutableRefObject<HTMLDivElement>,\n setInitialTouchX: React.Dispatch<number>,\n percentageDragged: number,\n setPercentageDragged: React.Dispatch<number>,\n dispatch: React.Dispatch<ReducerActions<WidgetInteraction, FixedWidgetPayload>>,\n onNext: () => void,\n onPrevious: () => void\n): () => void {\n return function (): void {\n containerRef.current.style.transition = 'transform .4s ease-in-out';\n setInitialTouchX(null);\n\n /**\n * Only trigger a Next/Previous widget event if the user has dragged beyond DRAG_TOLERANCE% either way of the\n * container's width. This means if the user only drags left/right a tiny little bit, the widget\n * will simply slide back into its original place.\n */\n if (Math.abs(percentageDragged) >= DRAG_TOLERANCE) {\n const reducerAction = percentageDragged > 0 ? WidgetInteraction.Next : WidgetInteraction.Previous;\n\n dispatch({\n type: reducerAction\n });\n\n if (percentageDragged > 0 && onNext) {\n onNext();\n } else if (percentageDragged < 0 && onPrevious) {\n onPrevious();\n }\n }\n\n setPercentageDragged(0);\n };\n}\n\nexport function hideBackButton(\n isHoveringOnFarLeft: boolean,\n isHoveringOnWidget: boolean,\n widgetOffset: number,\n maxViewableItems: number,\n widgetCollectionSize: number,\n isTabbing: boolean\n): boolean {\n // When hovering on the very far left widget item, hide the back button\n if (isHoveringOnFarLeft)\n return true;\n\n // if the collection size is smaller than the max viewable items, hide the back button\n if (widgetCollectionSize <= maxViewableItems)\n return true;\n\n // When hovering on the entire widget area, hide the back button if the widget is in the far left position\n if (isHoveringOnWidget)\n return (widgetOffset === maxViewableItems);\n\n if (isTabbing)\n return widgetOffset === maxViewableItems;\n\n return true;\n}\n\nexport function hideNextButton(\n isHoveringOnFarRight: boolean,\n isHoveringOnWidget: boolean,\n widgetOffset: number,\n maxViewableItems: number,\n widgetCollectionSize: number,\n showSeeMoreButton: boolean,\n isTabbing: boolean\n): boolean {\n // When hovering on the very far right widget item, hide the next button\n if (isHoveringOnFarRight)\n return true;\n\n // if the collection size is smaller than the max viewable items, hide the next button\n if (widgetCollectionSize <= maxViewableItems)\n return true;\n\n // Always show the next button if the widget is in the far left position\n if (widgetOffset === maxViewableItems)\n return false;\n\n // When the user is hovering over the entire widget area...\n if (isHoveringOnWidget) {\n // If we want to show the \"See more\" button, don't hide the next button\n if (showSeeMoreButton)\n return false;\n\n // Only show the next button if there are still more items to show\n return widgetCollectionSize <= widgetOffset;\n }\n\n if (isTabbing)\n return widgetOffset === widgetCollectionSize;\n\n return true;\n}\n\nexport interface FixedWidgetControls {\n jumpToIndex: (index: number) => void;\n}\n\n/**\n * If a component consuming FixedWidget needs to dispatch events to FixedWidget,\n * it can pass in a `controlsRef` prop, which will receive the API defined\n * below. This API can be extended as needed.\n * See FeedVideoCollection.tsx for an example\n */\nexport function useControlsRef(\n ref: React.MutableRefObject<FixedWidgetControls>,\n dispatch: React.Dispatch<ReducerActions<WidgetInteraction, FixedWidgetPayload>>\n): void {\n React.useEffect(() => {\n if (!ref || ref.current)\n return;\n\n ref.current = {\n jumpToIndex: (index: number) => dispatch({\n type: WidgetInteraction.JumpToIndex,\n payload: {\n offset: index + 1\n }\n })\n };\n }, [ref?.current]);\n}\n","import { ReducerActions } from 'libs/common/react/interfaces';\n\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { WidgetInteraction } from 'libs/shared/enums/WidgetInteraction';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { WidgetType } from 'libs/shared/interfaces';\n\nimport { getComputeFunction } from './FixedWidgetUtils';\n\nexport interface FixedWidgetPayload {\n breakpoints?: Breakpoints;\n contents?: WidgetContents;\n type?: WidgetType;\n offset?: number;\n totalItems?: number;\n}\n\nexport interface FixedWidgetState {\n // Current position within the widget collection\n offset: number;\n // Number of items viewable in slider for the current breakpoint/viewport size\n viewableItems: number;\n // Relative position of slider in the window. Used for an inline translate3d().\n position: number;\n // Type of widget being managed. May change on `Resize`.\n type: WidgetType;\n // What object type the widget uses :vomit: (this needs to be phased out of this god forsaken component)\n contents: WidgetContents;\n // Total number of items in the widget\n totalItems: number;\n}\n\nexport const initialWidgetState: FixedWidgetState = {\n offset: 0,\n viewableItems: 4,\n position: 0,\n totalItems: 0,\n contents: null,\n type: WidgetType.Row\n};\n\nconst computeNextPosition = (prevState: FixedWidgetState) => {\n const { viewableItems, offset, position, totalItems } = prevState;\n\n const remainingCount = totalItems - offset;\n\n /**\n * If the remaining items are evening divisible by the items in view, or,\n * we have more items that can be displayed in the view, move the slider a full 100%.\n */\n if (remainingCount % viewableItems === 0 || remainingCount > viewableItems)\n return {\n position: position - 100,\n offset: offset + viewableItems\n };\n\n /**\n * Where there are less items than we can show in a full slide, \n * calculate the % movement required to only show those items.\n */\n if (remainingCount < viewableItems)\n return {\n position: position - (remainingCount / viewableItems * 100),\n offset: offset + remainingCount\n };\n\n /**\n * Default back to the current state as a fallback\n */\n return {\n position: position,\n offset: offset\n };\n};\n\nconst computePreviousPosition = (prevState: FixedWidgetState) => {\n const { viewableItems, offset, position } = prevState;\n\n const remainingCount = offset - viewableItems;\n\n if (remainingCount % viewableItems === 0 || remainingCount > viewableItems)\n return {\n position: position + 100,\n offset: offset - viewableItems\n };\n\n if (remainingCount < viewableItems)\n return {\n position: position + (remainingCount / viewableItems * 100),\n offset: offset - remainingCount\n };\n\n return {\n position: position,\n offset: offset\n };\n};\n\nexport function FixedWidgetReducer(\n prevState: FixedWidgetState,\n action: ReducerActions<WidgetInteraction, FixedWidgetPayload>\n): FixedWidgetState {\n const { type, payload = {} } = action;\n\n switch (type) {\n case WidgetInteraction.Next: {\n return {\n ...prevState,\n ...computeNextPosition(prevState)\n };\n }\n\n case WidgetInteraction.Previous: {\n return {\n ...prevState,\n ...computePreviousPosition(prevState)\n };\n }\n\n case WidgetInteraction.JumpToIndex: {\n return {\n ...prevState,\n offset: payload.offset,\n position: (payload.offset - 1) * -100\n };\n }\n\n case WidgetInteraction.Resize: {\n const computeViewableItems = getComputeFunction(prevState.contents);\n const initialSeen = computeViewableItems(payload.breakpoints, prevState.type, prevState.totalItems);\n\n return {\n ...prevState,\n position: 0,\n offset: initialSeen,\n viewableItems: initialSeen\n };\n }\n\n case WidgetInteraction.Init: {\n const computeViewableItems = getComputeFunction(payload.contents);\n const initialSeen = computeViewableItems(payload.breakpoints, payload.type, payload.totalItems);\n\n return lazyWidgetInit({\n ...prevState,\n offset: initialSeen,\n viewableItems: initialSeen,\n type: payload.type,\n contents: payload.contents,\n totalItems: payload.totalItems,\n position: 0\n });\n }\n\n case WidgetInteraction.Update: {\n return {\n ...prevState,\n totalItems: payload.totalItems\n };\n }\n\n default:\n return prevState;\n }\n}\n\nexport function lazyWidgetInit(newState: FixedWidgetState): FixedWidgetState {\n return { ...initialWidgetState, ...newState };\n}\n",":local {\n %overflowGradient {\n position: absolute;\n width: 2.5rem;\n height: 101%;\n z-index: 2;\n top: 50%;\n transform: translateY(-50%);\n }\n\n .leftOverflowGradient {\n @extend %overflowGradient;\n left: 0;\n margin-left: -#{map-get($spacers, 4)};\n background-image: linear-gradient(to left, $cv-safe-transparent 0%, $white 70%);\n }\n\n .rightOverflowGradient {\n @extend %overflowGradient;\n right: 0;\n margin-right: -#{map-get($spacers, 4)};\n background-image: linear-gradient(to right, $cv-safe-transparent 0%, $white 70%);\n }\n\n .partialItem {\n display: inline-block;\n width: 100%;\n padding-bottom: percentage(calc(9 / 16));\n }\n\n .mobileScroll {\n overflow-x: scroll;\n -ms-overflow-style: none;\n scrollbar-width: none;\n\n &::-webkit-scrollbar {\n display: none;\n }\n }\n\n .widgetItemWrapper {\n display: contents;\n }\n}\n","import * as React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nimport { PartialWidgetTemplateProps } from '../curated-widgets/WidgetProps';\n\nimport styles from './fixed-widget.module.scss';\n\nfunction useGetSize(size?: 'sm' | 'lg'): HashObject {\n const breakpoints = useBreakpoints();\n\n if (breakpoints.xs)\n return {\n itemCount: 1,\n colSize: 12\n };\n\n if (breakpoints.sm)\n return {\n itemCount: 2,\n colSize: 6\n };\n\n if (breakpoints.md || breakpoints.lg)\n return {\n itemCount: 3,\n colSize: 4\n };\n\n return {\n itemCount: size === 'sm' ? 4 : 3,\n colSize: size === 'sm' ? 3 : 4\n };\n}\n\nexport interface PartialFixedWidgetItemProps {\n colSize: number;\n}\n\nconst PartialLoadingItem = ({ colSize }: PartialFixedWidgetItemProps) => (\n <div className={`col-${colSize} px-1`}>\n <div className={`${styles.partialItem} partial-loading-background rounded-3`} />\n </div>\n);\n\nexport interface PartialFixedWidgetProps {\n hideDescription?: boolean;\n hideHeading?: boolean;\n size?: 'sm' | 'lg';\n childComponent?: (props: PartialFixedWidgetItemProps) => JSX.Element;\n}\n\nPartialFixedWidget.defaultProps = {\n size: 'sm',\n childComponent: PartialLoadingItem\n};\n\nexport function PartialFixedWidget(props: PartialWidgetTemplateProps): JSX.Element {\n const { itemCount, colSize } = useGetSize(props.size);\n\n const ChildComponent = props.childComponent;\n\n const items = [];\n for (let i = 0; i < itemCount; i++) {\n items.push(<ChildComponent key={i} colSize={colSize} />);\n }\n\n return (\n <div className='widget'>\n <PartialWidgetHeader\n hideHeading={props.hideHeading}\n hideDescription={props.hideDescription}\n name={props.name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n />\n <div className='row g-0 mx-n1'>\n {items}\n </div>\n </div>\n );\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { UserAgentHelper } from 'libs/common/backbone/utils/UserAgentHelper';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, HashObject } from 'libs/analytics/interfaces';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { useWidgetKeyboard } from 'libs/shared/components/widgets/hooks/useWidgetKeyboard';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { SlidingListContainer } from 'libs/shared/components/widgets/sliding-list/SlidingListContainer';\nimport { WidgetButton, WidgetButtonDirection } from 'libs/shared/components/widgets/widget-button/WidgetButton';\nimport { CssMeasurement } from 'libs/shared/enums/CssMeasurement';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { WidgetInteraction } from 'libs/shared/enums/WidgetInteraction';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { useHover } from 'libs/shared/hooks/UseHover';\nimport { useLazyLoad } from 'libs/shared/hooks/UseLazyLoad';\nimport { WidgetContext, WidgetType } from 'libs/shared/interfaces';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport { FixedWidgetReducer, initialWidgetState, lazyWidgetInit } from './FixedWidgetReducer';\nimport { FixedWidgetControls, formatData, getCollectionAppLink, getOnTouchEnd, getOnTouchStart, getShouldPreload, hideBackButton, hideNextButton, useControlsRef, useFetchData } from './FixedWidgetUtils';\nimport { PartialFixedWidget } from './PartialFixedWidget';\n\nimport styles from './fixed-widget.module.scss';\n\nconst namespace = 'shared.fixedWidget';\n\n// Max number of widget items whenever `props.limitTotalItems` is `true`\nexport const WIDGET_ITEM_LIMIT = 12;\n\ninterface BaseFixedWidgetProps<\n T extends React.ComponentType<FixedWidgetItemProps>\n> {\n id?: string;\n name?: string;\n description?: string;\n\n type: WidgetType;\n contents: WidgetContents;\n thumbnailSize?: ImageSize;\n minimumItemCount?: number;\n limitTotalItems?: boolean;\n setData?: (data: any) => any[] | null;\n isPreviewing?: boolean;\n widgetTypeId?: WidgetTypeId;\n\n childComponent: T;\n extraChildComponentProps: Omit<React.ComponentProps<T>, keyof FixedWidgetItemProps>;\n\n partialComponent?: React.ElementType;\n getChildAppLink?: (item?: any) => Core.AppLink;\n appLink?: Core.AppLink;\n onAppLinkClick?: () => void;\n headingBadgeComponent?: JSX.Element;\n headerRightComponent?: JSX.Element;\n showSeeMoreLink?: boolean;\n isUpselling?: boolean;\n\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n\n getWidgetItemAnalyticsData?: (data: any) => HashObject;\n\n onNext?: () => void;\n onPrevious?: () => void;\n onClose?: () => void;\n onFollow?: (shouldFollow: boolean) => void;\n isFollowing?: boolean;\n showFollowSpinner?: boolean;\n controlsRef?: React.MutableRefObject<FixedWidgetControls>;\n touchBehavior?: 'drag' | 'scroll';\n\n leftWidgetButtonClassName?: string;\n rightWidgetButtonClassName?: string;\n\n hideName?: boolean;\n hideBleedingContent?: boolean;\n hideExtendedClickableArea?: boolean;\n hideButtons?: boolean;\n // This is for any additional items that need to be rendered at the end of the widget item list\n // such as a \"See More\" card.\n trailingItems?: JSX.Element;\n // Indicate how many extra items we added through trailingItems\n trailingItemLength?: number;\n}\n\ntype FixedWidgetWithFetchProps<T extends React.ComponentType<FixedWidgetItemProps>> = BaseFixedWidgetProps<T> &\n {\n lazyLoad: true,\n collection?: never,\n fetch: (...args: any) => Flight.Response<any>,\n prefetched?: false\n };\n\ntype FixedWidgetWithCollectionProps<T extends React.ComponentType<FixedWidgetItemProps>> = BaseFixedWidgetProps<T> &\n {\n collection: any,\n lazyLoad?: false,\n fetch?: never,\n prefetched: true\n };\n\nexport type FixedWidgetProps<T extends React.ComponentType<FixedWidgetItemProps>> =\n FixedWidgetWithCollectionProps<T> |\n FixedWidgetWithFetchProps<T>;\n\nFixedWidget.defaultProps = {\n type: WidgetType.Row,\n minimumItemCount: 0,\n extraChildComponentProps: {},\n touchBehavior: 'scroll'\n};\n\n/**\n * If your childProps complains that \"value\" is not assignable ot type \n */\nexport function FixedWidget<T extends React.ComponentType<FixedWidgetItemProps>>(\n props: FixedWidgetProps<T>\n): JSX.Element {\n const { analyticsData = {}, getWidgetItemAnalyticsData = () => {} } = props;\n\n const [ initialTouchX, setInitialTouchX ] = React.useState(null);\n const [ containerWidth, setContainerWidth ] = React.useState(null);\n const [ percentageDragged, setPercentageDragged ] = React.useState(0);\n\n const [ state, dispatch ] = React.useReducer(FixedWidgetReducer, initialWidgetState, lazyWidgetInit);\n\n const containerRef = React.useRef(null);\n const [ buttonsRef, isHovering ] = useHover<HTMLDivElement>();\n\n const [ isHoveringOnFarLeft, setIsHoveringOnFarLeft ] = React.useState(false);\n const [ isHoveringOnFarRight, setIsHoveringOnFarRight ] = React.useState(false);\n\n useControlsRef(props.controlsRef, dispatch);\n\n const { ref, inView: shouldFetch } = useLazyLoad({ prevent: !props.lazyLoad });\n\n const response = useFetchData(props, dispatch, shouldFetch);\n\n function getWidgetCollection(limit: number): any[] {\n const responseData = props.prefetched ? props.collection : response.data;\n\n if (!responseData)\n return [];\n\n const formattedResponse = FunctionHelper.isFunction(props.setData) ? props.setData(responseData) : responseData;\n return formattedResponse?.slice(0, limit) ?? [];\n }\n\n const widgetItems = getWidgetCollection(props.limitTotalItems ? WIDGET_ITEM_LIMIT : Infinity);\n const widgetLength = props.trailingItems && props.trailingItemLength ?\n widgetItems.length + props.trailingItemLength :\n widgetItems.length;\n\n function hasMoreItems(): boolean {\n if (!props.limitTotalItems)\n return false;\n\n const unlimitedItems = getWidgetCollection(Infinity);\n\n return unlimitedItems.length > widgetLength;\n }\n\n const hasReachedEnd = state.offset === widgetLength;\n\n const breakpoints = useBreakpoints();\n \n const { onFocusWidget, onBlurWidget, isTabbing, getFixedAttributes, focusNext, focusPrev } = useWidgetKeyboard({ type: 'fixed', state, containerRef });\n\n React.useEffect(() => {\n dispatch({\n type: WidgetInteraction.Resize,\n payload: { breakpoints }\n });\n }, [breakpoints]);\n\n React.useEffect(() => {\n if (!props.prefetched)\n return;\n\n let type = props.type;\n\n // The ResourcesTile widget type is deprecated. We render the Row type instead in this case\n if (type === WidgetType.ResourcesTile)\n type = WidgetType.Row;\n\n // If the prefetched collection changes, re-initialize the widget state.\n dispatch({\n type: WidgetInteraction.Init,\n payload: {\n breakpoints,\n type,\n contents: props.contents,\n totalItems: widgetLength\n }\n });\n }, [ props.collection?.length, props.prefetched ]);\n\n function onSetIsHovering(hovering: boolean, index: number): void {\n if (widgetLength === state.viewableItems) {\n setIsHoveringOnFarLeft(hovering);\n setIsHoveringOnFarRight(hovering);\n return;\n }\n\n // This callback will hide the far left button if the user is hovering on the far left widget item.\n // Same goes for the far right button & widget item.\n if (index + 1 === widgetLength) {\n setIsHoveringOnFarRight(hovering);\n return;\n }\n\n if (index === 0) {\n setIsHoveringOnFarLeft(hovering);\n return;\n }\n\n if ((index + 1 - (state.offset % state.viewableItems)) % state.viewableItems === 0) {\n setIsHoveringOnFarRight(hovering);\n return;\n }\n\n if ((index - (state.offset % state.viewableItems)) % state.viewableItems === 0) {\n setIsHoveringOnFarLeft(hovering);\n return;\n }\n }\n\n function shouldScroll(): boolean {\n if (props.touchBehavior !== 'scroll')\n return false;\n\n return UserAgentHelper.isTabletOrMobile();\n }\n\n const widgetContext: WidgetContext = {\n type: state.type,\n collectionSize: widgetLength,\n contents: props.contents\n };\n\n const data = formatData(props, response?.data || props.collection);\n\n if (response?.hasError)\n return <></>;\n\n if (!props.prefetched && !response?.data) {\n const PartialComponent = props.partialComponent || PartialFixedWidget;\n\n return (\n <div ref={ref}>\n <PartialComponent />\n </div>\n );\n }\n\n if (!widgetLength || widgetLength < props.minimumItemCount)\n return <></>;\n\n /**\n * Don't merge this if Sha forgot to fix it.\n */\n const WidgetItemComponent = props.childComponent as React.ComponentType<FixedWidgetItemProps>;\n\n const getSliderAnalyticsData = (type: WidgetInteraction) => ({\n id: data?.id,\n name: data?.name,\n direction: type === WidgetInteraction.Next ? 'right' : 'left',\n ...props.analyticsData\n });\n\n const showSeeMoreButton = (() => {\n // Only show if there is an applink and we've reached the end of the widget\n if (!props.appLink || !hasReachedEnd)\n return false;\n\n // Also only show if we've exceeded the widget limit, if one has been set\n return hasMoreItems();\n })();\n\n const hideButtons = shouldScroll() || props.hideButtons;\n const hideBackGradient = state.offset === state.viewableItems;\n const hideNextGradient = widgetLength <= state.offset;\n const hasMoreThanViewable = state.viewableItems < widgetLength;\n\n return (\n <div className='mx-n4 mb-n3'>\n <div className={shouldScroll() ? 'pb-3 overflow-hidden' : 'px-4 pb-3 overflow-hidden'}>\n {!props.hideName &&\n <div className={shouldScroll() ? 'px-4' : ''}>\n <WidgetHeader\n name={data.name}\n description={data.description}\n appLink={getCollectionAppLink(props.appLink, data)}\n onAppLinkClick={props.onAppLinkClick}\n analyticsData={{ id: data?.id, name: data?.name, ...props.analyticsData }}\n analyticsOptions={WidgetHelper.getSliderHeadingAnalyticsOptions()}\n showSeeMoreLink={props.showSeeMoreLink ?? hasMoreThanViewable}\n content={widgetItems}\n isPreviewing={props.isPreviewing}\n widgetTypeId={props.widgetTypeId}\n badgeComponent={props.headingBadgeComponent}\n rightComponent={props.headerRightComponent}\n isUpselling={props.isUpselling}\n onClose={props.onClose}\n onFollow={props.onFollow}\n isFollowing={props.isFollowing}\n showFollowSpinner={props.showFollowSpinner}\n />\n </div>\n }\n <div\n ref={buttonsRef}\n className={`position-relative mx-n1 ${shouldScroll() ? `${styles.mobileScroll} px-4` : ''} ${props.hideBleedingContent ? 'overflow-hidden-x' : ''}`}\n >\n {!hideButtons && (\n <>\n {(!props.hideBleedingContent && !isHoveringOnFarLeft && !hideBackGradient) && (\n <div className={styles.leftOverflowGradient} />\n )}\n <WidgetButton\n direction={WidgetButtonDirection.Left}\n onClick={() => {\n focusPrev();\n\n dispatch({ type: WidgetInteraction.Previous });\n AnalyticsHelper.logUserAction(\n getSliderAnalyticsData(WidgetInteraction.Previous),\n WidgetHelper.getSliderAnalyticsOptions()\n );\n\n FunctionHelper.isFunction(props.onPrevious) && props.onPrevious();\n }}\n hide={!!props.hideButtons || hideBackButton(\n isHoveringOnFarLeft,\n isHovering,\n state.offset,\n state.viewableItems,\n widgetLength,\n isTabbing\n )}\n contents={props.contents}\n className={props.leftWidgetButtonClassName}\n hideExtendedClickableArea={props.hideExtendedClickableArea}\n state={state}\n />\n </>\n )}\n \n <SlidingListContainer\n position={state.position}\n positionType={CssMeasurement.Percentage}\n onTouchMove={props.touchBehavior === 'drag' && getOnTouchStart(\n state,\n containerRef,\n containerWidth,\n setContainerWidth,\n initialTouchX,\n setInitialTouchX,\n setPercentageDragged\n )}\n onTouchEnd={props.touchBehavior === 'drag' && getOnTouchEnd(\n containerRef,\n setInitialTouchX,\n percentageDragged,\n setPercentageDragged,\n dispatch,\n props.onNext,\n props.onPrevious\n )}\n ref={containerRef}\n percentageDragged={percentageDragged}\n >\n {widgetItems.map((widgetItem: any, index: number) => {\n return (\n <li\n key={`${widgetItem.id}:${index}`}\n onFocus={() => onFocusWidget(index)}\n onBlur={onBlurWidget}\n className={styles.widgetItemWrapper}\n {...getFixedAttributes(index)}\n >\n <WidgetItemComponent\n data={widgetItem}\n collectionAppLink={props.appLink}\n getAppLink={\n props.getChildAppLink ? () => props.getChildAppLink(widgetItem) : () => null as any\n }\n context={widgetContext}\n preloadImage={getShouldPreload(state, widgetItems)(widgetItem)}\n thumbnailSize={props.thumbnailSize || ImageSize.Medium}\n analyticsData={{\n widgetId: data.id,\n widgetName: data.name,\n itemIndex: index,\n ...analyticsData,\n ...getWidgetItemAnalyticsData(widgetItem)\n }}\n analyticsOptions={{ ...props.analyticsOptions, ...WidgetHelper.getSliderItemAnalyticsOptions() }}\n onHover={(hovering: boolean) => {\n if (shouldScroll())\n return;\n /**\n * For some reason this needs to be called after a set timeout, otherwise\n * the `useHover` listener on the `buttonsRef` element will not detect it's hover\n * event. A delay of 200ms is used for when `hovering` is false so that the effects of\n * setting `isHoveringOnFarX` aren't applied until the CSS transform transition has\n * completed.\n */\n window.setTimeout(() => {\n onSetIsHovering(hovering, index);\n }, hovering ? 0 : 200);\n }}\n {...props.extraChildComponentProps}\n />\n </li>\n );\n })}\n {props.trailingItems}\n {shouldScroll() && <div className='ps-4'></div>}\n </SlidingListContainer>\n\n {!hideButtons && (\n <>\n <WidgetButton\n direction={WidgetButtonDirection.Right}\n onClick={() => {\n if (showSeeMoreButton) {\n Core.AppLinkHelper.trigger(getCollectionAppLink(props.appLink, data));\n return;\n }\n focusNext();\n\n dispatch({ type: WidgetInteraction.Next });\n AnalyticsHelper.logUserAction(\n getSliderAnalyticsData(WidgetInteraction.Next),\n WidgetHelper.getSliderAnalyticsOptions()\n );\n\n FunctionHelper.isFunction(props.onNext) && props.onNext();\n }}\n hide={!!props.hideButtons || hideNextButton(\n isHoveringOnFarRight,\n isHovering,\n state.offset,\n state.viewableItems,\n widgetLength,\n showSeeMoreButton,\n isTabbing\n )}\n contents={props.contents}\n hoverText={showSeeMoreButton && LanguageService.getPhrase(namespace, 'seeMore')}\n className={props.rightWidgetButtonClassName}\n hideExtendedClickableArea={props.hideExtendedClickableArea}\n state={state}\n />\n {(!props.hideBleedingContent && !isHoveringOnFarRight && !hideNextGradient) && (\n <div className={styles.rightOverflowGradient} />\n )}\n </>\n )}\n </div>\n </div>\n </div>\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .rowWidth {\n width: 25%;\n }\n\n .largeRowWidth {\n width: 33.33333%;\n }\n\n @include media('<=xl') {\n .rowWidth {\n width: 33.33333%;\n }\n }\n\n @include media('<=md') {\n .rowWidth,\n .largeRowWidth {\n width: 50%;\n }\n }\n\n @include media('<=sm') {\n .rowWidth,\n .largeRowWidth {\n width: 100%;\n }\n }\n}","import React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { PresentationAudience, VideoTypes, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\n\nimport styles from './popout-video-widget-item.module.scss';\n\nexport interface PopoutVideoWidgetItemProps extends FixedWidgetItemProps<VideoTypes> {\n presentationAudiences: PresentationAudience[];\n showVideoGuidance: boolean;\n hideTitle?: boolean;\n hideSeries?: boolean;\n onClickRemoveItem: (videoId: string, videoName: string) => void;\n removeButtonTooltip?: string;\n preventPopout?: boolean;\n showNewVideoIndicator?: boolean;\n commonVideoProps: CommonVideoProps;\n}\n\nexport const PopoutVideoWidgetItem = React.memo(function(props: PopoutVideoWidgetItemProps): JSX.Element {\n const { data: video, context, thumbnailSize, preloadImage, presentationAudiences } = props;\n \n const videoAudiences = video?.subjectPresentationAudiences?.data;\n const mergedAudience = useMergeAudiences(videoAudiences, presentationAudiences);\n\n const breakpoints = useBreakpoints();\n\n let width = styles.rowWidth;\n\n if (context.type === WidgetType.LargeRow)\n width = styles.largeRowWidth;\n\n return (\n <div className={`px-1 flex-shrink-0 position-relative ${width}`}>\n <VideoThumbnail\n video={props.data}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n hideTitle={props.hideTitle}\n showVideoGuidance={props.showVideoGuidance}\n type={props.preventPopout || breakpoints.xs ? 'static' : 'popout'}\n textPosition={ThumbnailTextPosition.Below}\n appLink={props.getAppLink(video)}\n imageOptions={{ size: thumbnailSize }}\n preload={preloadImage}\n audience={mergedAudience}\n hideRating={!!mergedAudience}\n hideDuration={false}\n onClickRemove={FunctionHelper.isFunction(props.onClickRemoveItem)\n && (() => props.onClickRemoveItem(video.id, video.name))}\n removeButtonTooltip={props.removeButtonTooltip}\n commonVideoProps={props.commonVideoProps}\n />\n </div>\n );\n});\n","@import '~styles/utils/include-media';\n\n:local {\n .placeholderItem {\n width: 25%;\n\n @include media('<=xl') {\n width: 33.33333%;\n }\n\n @include media('<=md') {\n width: 50%;\n }\n\n @include media('<=sm') {\n width: 100%;\n }\n }\n\n .placeholderInner {\n cursor: pointer;\n\n &:hover .placeholderContent {\n opacity: 0.8;\n }\n }\n\n .placeholderContent {\n transition: opacity 0.2s ease;\n }\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { PopoutVideoWidgetItem } from 'libs/shared/components/widgets/items/popout-video-widget-item/PopoutVideoWidgetItem';\nimport { WidgetTypeIdConfig } from 'libs/shared/constants/WidgetTypeIdConfig';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { SearchSvg } from 'libs/shared/images/svg/actions/SearchSvg';\nimport { PresentationAudience, Video, VideoWidgetTemplateContent, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './thumbnail-fixed-list-search-cta-template.module.scss';\n\nconst namespace = 'widgets.thumbnailFixedListSearchCtaWidgetTemplate';\n\nexport interface ThumbnailFixedListSearchCtaWidgetTemplateProps {\n id: string;\n name: string;\n widgetTypeId: WidgetTypeId;\n description: string;\n content: VideoWidgetTemplateContent;\n appLinks: {\n widgetVideoList: (widgetId: string, widgetName: string) => Core.AppLink,\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink\n };\n metadata: {\n hideWidgetHeading: boolean,\n hideWidgetDescription: boolean,\n hideObjectTitle: boolean,\n hideObjectSeries: boolean\n };\n audiences?: PresentationAudience[];\n hasPermissions: HasPermissionsFunc;\n preventPopout?: boolean;\n analyticsData?: HashObject;\n\n isPreviewing: boolean;\n\n settings: {\n hasTopicDirectories: boolean\n };\n\n commonVideoProps: CommonVideoProps;\n onClickSearchAllVideos?: () => void;\n}\n\nconst MAX_VIDEO_ITEMS = 3;\n\nexport function ThumbnailFixedListSearchCtaWidgetTemplate(\n props: ThumbnailFixedListSearchCtaWidgetTemplateProps\n): JSX.Element {\n const widgetConfig = WidgetTypeIdConfig[props.widgetTypeId];\n const videos = WidgetHelper.getVideoContent(props.content);\n const displayVideos = videos.slice(0, MAX_VIDEO_ITEMS);\n\n if (!displayVideos.length)\n return <></>;\n\n const appLink = widgetConfig.getCollectionAppLink?.(props.appLinks, props.content) ??\n props.appLinks?.widgetVideoList?.(props.id, props.name);\n\n return (\n <FixedWidget\n id={props.id}\n name={!props.metadata?.hideWidgetHeading && props.name}\n description={!props.metadata?.hideWidgetDescription && props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Videos}\n collection={displayVideos}\n childComponent={PopoutVideoWidgetItem}\n extraChildComponentProps={{\n presentationAudiences: props.audiences,\n showVideoGuidance: VideoHelper.showVideoGuidance(props.hasPermissions),\n hideTitle: props.metadata?.hideObjectTitle,\n hideSeries: props.metadata?.hideObjectSeries,\n preventPopout: props.preventPopout,\n showNewVideoIndicator: props.settings?.hasTopicDirectories,\n onClickRemoveItem: undefined,\n commonVideoProps: props.commonVideoProps\n }}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n prefetched\n analyticsData={props.analyticsData}\n appLink={appLink}\n isPreviewing={props.isPreviewing}\n widgetTypeId={props.widgetTypeId}\n trailingItemLength={1}\n trailingItems={\n <li className={classNames('flex-shrink-0 position-relative px-1', styles.placeholderItem)}>\n <button\n onClick={props.onClickSearchAllVideos}\n className={classNames('d-block ratio ratio-16x9 bg-light rounded-1 overflow-hidden text-decoration-none border-0 p-0 w-100', styles.placeholderInner)}\n >\n <div className={classNames('position-absolute top-0 start-0 bottom-0 end-0 d-flex flex-column align-items-center justify-content-center gap-2', styles.placeholderContent)}>\n <span className='text-center px-2 fw-semi-bold'>\n <SvgContainer svg={SearchSvg} size={SvgContainerSize.Small} /> {LanguageService.getPhrase(namespace, 'search')}\n </span>\n </div>\n </button>\n </li>\n }\n />\n );\n}\n","import React from 'react';\n\nexport function VerifiedSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n d='m10.407 12.368-1.22-1.22a.49.49 0 0 0-.698.004l-.583.583a.494.494 0 0 0-.004.697l2.135 2.135c.107.108.25.154.388.142a.5.5 0 0 0 .352-.143l4.362-4.362a.494.494 0 0 0-.004-.698l-.582-.582a.495.495 0 0 0-.698-.004zm7.922-.37 1.437 1.406q.312.291.208.728a.72.72 0 0 1-.541.531l-1.957.5.551 1.936a.67.67 0 0 1-.197.729.67.67 0 0 1-.73.198l-1.935-.552-.5 1.957a.72.72 0 0 1-.53.541 1.3 1.3 0 0 1-.199.021.69.69 0 0 1-.53-.229L12 18.328l-1.405 1.436q-.292.313-.729.208a.7.7 0 0 1-.53-.541l-.5-1.957-1.937.552a.67.67 0 0 1-.728-.198.67.67 0 0 1-.198-.729l.551-1.936-1.957-.5a.72.72 0 0 1-.54-.53q-.104-.438.207-.73l1.437-1.405-1.437-1.405q-.312-.291-.208-.729a.72.72 0 0 1 .541-.53l1.957-.5-.551-1.936a.67.67 0 0 1 .198-.73.67.67 0 0 1 .728-.197l1.936.552.5-1.957a.675.675 0 0 1 .531-.531.67.67 0 0 1 .729.198L12 5.68l1.405-1.447a.7.7 0 0 1 .73-.198q.426.104.53.53l.5 1.958L17.1 5.97a.67.67 0 0 1 .729.198.67.67 0 0 1 .197.729l-.551 1.936 1.957.5a.72.72 0 0 1 .541.53q.105.438-.208.73z'\n fill='currentColor'\n />\n </svg>\n );\n}\n",":local {\n .card {\n background-color: $gray-100;\n padding: 0.75rem;\n }\n\n .avatar {\n width: 3rem;\n min-width: 3rem;\n height: 3rem;\n }\n\n .time {\n font-size: 0.6875rem; //11px\n }\n}","import React from 'react';\n\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { EditSvg } from 'libs/shared/images/svg/actions/EditSvg';\nimport { VerifiedSvg } from 'libs/shared/images/svg/status/VerifiedSvg';\nimport { Author, AuthorWidgetContent } from 'libs/shared/interfaces';\nimport { ArticleHelper } from 'libs/shared/utils/ArticleHelper';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './author-reviewer-widget-template.module.scss';\n\nconst namespace = 'shared.authorReviewerWidgetTemplate';\n\ninterface PersonCardWrapperProps {\n person: Author;\n}\n\nconst DATE_FORMATTER = 'MMMM D, YYYY';\n\nfunction PersonCardWrapper(props: React.PropsWithChildren<PersonCardWrapperProps>): JSX.Element {\n if (!props.person)\n return <></>;\n\n const className = `${styles.card} h-100 rounded-2 d-flex flex-column`;\n\n const externalUrl = props.person.externalUrl;\n const blogUrl = ArticleHelper.getAuthorBlogUrl(props.person.blogSlug);\n\n function onClickAuthorBlogLink(): void {\n AnalyticsHelper.logUserAction({\n id: props.person.id,\n firstName: props.person.firstName,\n lastName: props.person.lastName,\n imageId: props.person.imageId,\n externalUrl,\n blogUrl\n }, {\n entity: EntityType.Author,\n location: LocationContext.AuthorReviewerWidget,\n actionType: UserAction.Click\n });\n }\n\n if (!blogUrl && !externalUrl) {\n return (\n <div className={className}>\n {props.children}\n </div>\n );\n }\n\n return (\n <a\n href={externalUrl || blogUrl}\n target='_blank'\n className={`${className} no-decoration`}\n onClick={onClickAuthorBlogLink}\n >\n {props.children}\n </a>\n );\n}\n\ninterface PersonCardProps {\n person: Author;\n imageCdnUrl: string;\n type: 'reviewer' | 'author';\n lastUpdated: string;\n datePublished: string;\n}\n\nfunction PersonCard(props: PersonCardProps): JSX.Element {\n if (!props.person)\n return <></>;\n\n return (\n <PersonCardWrapper person={props.person}>\n <div className='d-flex mb-2'>\n <div className={`${styles.avatar} rounded-circle me-2 overflow-hidden`}>\n <img\n className='img-fluid'\n src={ImageHelper.getUrlById(props.imageCdnUrl, ImageType.Avatars, props.person.imageId, ImageSize.Medium)}\n alt={`${props.person.firstName} ${props.person.lastName}`}\n />\n </div>\n\n <div>\n <h2 className='h6 mb-0 fw-normal'>\n <SvgContainer\n className='align-middle svg-container d-inline-block'\n svg={props.type === 'reviewer' ? VerifiedSvg : EditSvg}\n />\n\n {props.type === 'reviewer' ? (\n <span className='align-middle'>\n <Text namespace={namespace} phrase='reviewedBy' />\n &nbsp;\n {props.person.firstName} {props.person.lastName}\n </span>\n ) : (\n <span className='align-middle'>\n <Text namespace={namespace} phrase='authoredBy' />\n &nbsp;\n {props.person.firstName} {props.person.lastName}\n </span>\n )}\n </h2>\n <div>\n {props.person.title}\n </div>\n </div>\n </div>\n\n <p className='mb-2 flex-grow-1'>\n {props.person.bio}\n </p>\n\n <div className={styles.time}>\n {props.type === 'reviewer' ? (\n <>\n <Text\n namespace={namespace}\n phrase='reviewed'\n /> <time dateTime={props.lastUpdated}>{DateHelper.format(props.lastUpdated, DATE_FORMATTER)}</time>\n </>\n ) : (\n <>\n <Text\n namespace={namespace}\n phrase='published'\n /> <time dateTime={props.datePublished}>{DateHelper.format(props.datePublished, DATE_FORMATTER)}</time>\n &nbsp;&bull;&nbsp;\n <Text\n namespace={namespace}\n phrase='lastUpdated'\n /> <time dateTime={props.lastUpdated}>{DateHelper.format(props.lastUpdated, DATE_FORMATTER)}</time>\n </>\n )}\n </div>\n </PersonCardWrapper>\n );\n}\n\nexport interface AuthorReviewerWidgetTemplateProps {\n imageCdnUrl: string;\n content: AuthorWidgetContent[];\n}\n\nexport function AuthorReviewerWidgetTemplate(props: AuthorReviewerWidgetTemplateProps): JSX.Element {\n const {\n reviewer,\n author,\n lastUpdated,\n datePublished\n } = props.content[0];\n\n if (!author || !reviewer)\n return <></>;\n\n return (\n <div className='row mb-n3'>\n <div className='col-12 col-md-6 mb-3'>\n <PersonCard\n type='author'\n person={author}\n imageCdnUrl={props.imageCdnUrl}\n datePublished={datePublished}\n lastUpdated={lastUpdated}\n />\n </div>\n <div className='col-12 col-md-6 mb-3'>\n <PersonCard\n type='reviewer'\n person={reviewer}\n imageCdnUrl={props.imageCdnUrl}\n datePublished={datePublished}\n lastUpdated={lastUpdated}\n />\n </div>\n </div>\n );\n}\n","import React from 'react';\n\nimport styles from '../author-reviewer-widget-template.module.scss';\n\nfunction PartialPersonCard(): JSX.Element {\n return (\n <div className={`${styles.card} rounded-2`}>\n <div className='d-flex mb-2'>\n <div className={`partial-loading-background rounded-circle me-2 ${styles.avatar}`} />\n \n <div className='w-75'>\n <div className='partial-loading-background mb-1' style={{ width: '90%', height: '21px' }} />\n <div className='partial-loading-background' style={{ width: '65%', height: '1rem' }} />\n </div>\n </div>\n \n <div>\n <div className='partial-loading-background mb-1' style={{ width: '100%', height: '1rem' }} />\n <div className='partial-loading-background mb-1' style={{ width: '75%', height: '1rem' }} />\n </div>\n \n <div className='partial-loading-background' style={{ width: '50%', height: '1rem' }} />\n </div>\n );\n}\n\nexport function PartialAuthorReviewerWidgetTemplate(): JSX.Element {\n return (\n <div className='row mb-n3'>\n <div className='col-12 col-md-6 mb-3'>\n <PartialPersonCard />\n </div>\n <div className='col-12 col-md-6 mb-3'>\n <PartialPersonCard />\n </div>\n </div>\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .logoItem {\n width: percentage(calc(1 / 8));\n\n @include media('<=lg') {\n width: percentage(calc(1 / 6));\n }\n\n @include media('<=md') {\n width: percentage(calc(1 / 4));\n }\n }\n\n .logo {\n aspect-ratio: 1;\n background-size: cover;\n border: 2px solid $gray-300;\n background-clip: padding-box;\n }\n}","import React from 'react';\n\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { BG_COLOUR_CLASS_NAMES } from 'libs/shared/constants/ColourClassNames';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Company } from 'libs/shared/interfaces';\nimport { getBgColorClass } from 'libs/shared/utils/getBgColorClass';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './circle-logo-widget-item.module.scss';\n\nexport interface CircleLogoWidgetItemProps extends FixedWidgetItemProps<Company> {\n}\n\nexport const CircleLogoWidgetItem = function(props: CircleLogoWidgetItemProps): JSX.Element {\n const logoUrl = ImageHelper.createUrl(props.data.logo?.url, { size: ImageSize.Medium });\n const logoBgColor = props.data.metadata?.colour;\n // fallback color\n const colourClass = getBgColorClass(props.data.name, BG_COLOUR_CLASS_NAMES);\n\n const analyticsData = {\n ...props.analyticsData,\n id: props.data?.id,\n name: props.data?.name\n };\n\n const analyticsOptions = {\n ...props.analyticsOptions,\n location: LocationContext.CircleLogoSlidingListWidget,\n actionType: UserAction.Click,\n entity: EntityType.Company\n };\n \n const logoStyle: React.CSSProperties = {\n backgroundImage: logoUrl ? `url('${logoUrl}')` : null,\n backgroundColor: logoBgColor\n };\n\n return (\n <AppLink\n appLink={props.getAppLink(props.data)}\n className={`position-relative px-1 flex-shrink-0 ${styles.logoItem}`}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <div\n className={classNames('rounded-circle w-100 h-100', styles.logo, !logoBgColor && colourClass)}\n style={logoStyle}\n >\n </div>\n </AppLink>\n );\n};\n","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { CircleLogoWidgetItem } from 'libs/shared/components/widgets/items/circle-logo-widget-item/CircleLogoWidgetItem';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Company, Video, WidgetType } from 'libs/shared/interfaces';\n\nexport interface CircleLogoSlidingListWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Video[];\n imageCdnUrl: string;\n showHighlight?: boolean;\n analyticsData?: HashObject;\n isUpselling?: boolean;\n\n appLinks: {\n company: (company: Company) => Core.AppLink\n };\n}\n\nexport function CircleLogoSlidingListWidgetTemplate(props: CircleLogoSlidingListWidgetTemplateProps): JSX.Element {\n return (\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Companies}\n collection={props.content}\n childComponent={CircleLogoWidgetItem}\n extraChildComponentProps={{}}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n getChildAppLink={props.appLinks?.company}\n isUpselling={props.isUpselling}\n />\n );\n}\n",":local {\n .logo {\n aspect-ratio: 1;\n width: 90%;\n }\n .logoWrapper {\n flex: 1;\n }\n}","import React from 'react';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nimport styles from './partial-circle-logo-sliding-list.module.scss';\n\nexport function PartialCircleLogoSlidingListWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n let itemsCount = 8;\n\n const breakpoints = useBreakpoints();\n if (breakpoints.sm || breakpoints.xs) {\n itemsCount = 4;\n }\n if (breakpoints.md) {\n itemsCount = 6;\n }\n\n return (\n <>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\n <div className='d-flex flex-no-wrap'>\n {Array(itemsCount).fill(null).map((_, i) => {\n return (\n <div key={i} className={styles.logoWrapper}>\n <div className={`${styles.logo} h-100 d-inline-block partial-loading-background rounded-circle`} />\n </div>\n );\n })}\n </div>\n </>\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n $classification-cover-height: 5rem; // 80px\n $classification-cover-height-lg: 8rem; // 128px\n\n .appLink:hover {\n text-decoration: none;\n\n .name {\n text-decoration: underline;\n }\n }\n\n .selectedMask {\n background-color: rgba($green, 0.1);\n position: absolute;\n z-index: 3;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n }\n\n .widgetItem {\n border-radius: $border-radius-lg;\n overflow: hidden;\n \n &.hasThemeColor {\n border: 0.0625rem solid var(--themeColor);\n background-color: color-mix(in srgb, var(--themeColor) 10%, white);\n &:hover {\n background-color: color-mix(in srgb, var(--themeColor) 15%, white);\n }\n }\n\n .text {\n font-size: $font-size-base;\n }\n\n .imagePanel {\n position: relative;\n background-position: top;\n background-size: cover;\n width: $classification-cover-height;\n height: $classification-cover-height;\n flex-shrink: 0;\n\n .selected {\n width: 2.5rem;\n height: 2.5rem;\n position: absolute;\n top: 50%;\n z-index: 5;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n\n .image {\n z-index: 2;\n position: relative;\n width: 100%;\n height: 100%;\n background-position: center;\n background-size: cover;\n background-repeat: no-repeat;\n }\n }\n\n .dragHandle {\n height: $classification-cover-height;\n color: $gray-700;\n }\n\n .large {\n width: $classification-cover-height-lg;\n height: $classification-cover-height-lg;\n \n @include media(\">=sm\", \"<=700px\") {\n width: $classification-cover-height;\n height: $classification-cover-height;\n }\n }\n\n .comingSoonPanel {\n line-height: 1;\n }\n\n .name {\n color: $gray-900;\n }\n }\n\n .newVideos {\n font-size: 0.6875rem; // 11px\n }\n\n .editSubjectsItem {\n height: $classification-cover-height;\n border-radius: $border-radius-lg;\n color: $gray-500;\n border: 1px dashed $gray-400;\n }\n\n .allSubjectsItem {\n height: $classification-cover-height;\n color: $white;\n border-radius: $border-radius-lg;\n border: 1px solid $gray-400;\n\n .logoContainer {\n height: 1.1rem;\n width: 6rem;\n }\n }\n\n .draggingItem {\n border: 2px dashed $border-color;\n height: $classification-cover-height;\n }\n\n .partialLargeImage {\n @extend .imagePanel;\n width: $classification-cover-height-lg !important;\n height: $classification-cover-height-lg !important;\n }\n\n .partialLargeFallback {\n width: $classification-cover-height-lg;\n height: $classification-cover-height-lg;\n }\n\n .partialIcon {\n z-index: 1;\n }\n}\n","import * as React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\nimport { RandomHelper } from 'libs/common/react/utils/RandomHelper';\n\nimport { AnalyticsOptions, HashObject } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { IconCircle } from 'libs/shared/components/icon-circle/IconCircle';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { 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 { CheckSvg } from 'libs/shared/images/svg/status/CheckSvg';\nimport { BaseObject, Classification, Presentation } from 'libs/shared/interfaces';\nimport { getBgColorClass } from 'libs/shared/utils/getBgColorClass';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\n\nimport styles from './cover-pill.module.scss';\n\nconst namespace = 'shared.subjectWidgetItem';\n\ninterface NamePanelProps {\n name: string;\n multiline?: boolean;\n subtitle?: string;\n noUnderLine?: boolean;\n newVideosCount?: number;\n}\n\nconst ComingSoonNamePanel = ({ name, multiline, noUnderLine }: NamePanelProps) => {\n let wrapperClassName = `${styles.comingSoonPanel} \n d-flex flex-column align-items-center justify-content-center px-3 text-center`;\n\n let textClassName = '';\n\n if (!multiline) {\n wrapperClassName += ' text-nowrap';\n textClassName += ' text-truncate';\n } else {\n textClassName += ` ${styles.clamped} clamp-2`;\n }\n\n return (\n <div className={wrapperClassName}>\n <small className='text-secondary'><Text namespace={namespace} phrase='comingSoon' /></small>\n <p className={`${noUnderLine ? '' : styles.name} h6`}><span className={textClassName}>{name}</span></p>\n </div>\n );\n};\n\nconst NormalNamePanel = ({ name, multiline, subtitle, noUnderLine, newVideosCount }: NamePanelProps) => {\n let wrapperClassName = 'px-3 d-flex flex-column justify-content-center';\n let textClassName = `${noUnderLine ? '' : styles.name} h6`;\n\n if (!multiline) {\n wrapperClassName += ' text-nowrap text-truncate';\n textClassName += ' text-truncate mb-0';\n } else {\n textClassName += ` ${newVideosCount ? 'clamp-2' : 'clamp-3'} text-start`;\n }\n\n return (\n <div className={wrapperClassName}>\n {subtitle && <div className={`text-secondary clamp-1 ${styles.text}`}>{subtitle}</div>}\n <div className={textClassName} title={name}>{name}</div>\n {!!newVideosCount && (\n <div className={`fw-semibold d-inline-block rounded-pill px-2 mt-1 bg-light-green w-fit h-fit text-green ${styles.newVideos}`}>\n <Text namespace={namespace} phrase='newVideos' options={{ smartCount: newVideosCount }} />\n </div>\n )}\n </div>\n );\n};\n\nexport interface CoverPillWidgetItemProps<T extends BaseObject> {\n data: T;\n getChildAppLink?: (data: T) => Core.AppLink;\n getChildAppLinkOptions?: () => Core.AppLinkOptions;\n isLarge?: boolean;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n availablePresentations?: Presentation[];\n getSubtitle?: (data: T) => string;\n multiline?: boolean;\n // set to true it will highlight on hover and also remove the hover text underline\n highlightOnHover?: boolean;\n showNewVideosCount?: boolean;\n shouldHighlight?: (data: T) => boolean;\n showFallbackBackgroundColour?: boolean;\n onClick?: () => void;\n}\n\nCoverPillWidgetContent.defaultProps = {\n showFallbackBackgroundColour: true\n};\n\ninterface CoverPillWidgetContentProps<T> extends CoverPillWidgetItemProps<T> {\n coverUrl?: string;\n coverBgColor?: string;\n subtitle?: string;\n isComingSoon?: boolean;\n className?: string;\n imageClassName?: string;\n isSelected?: boolean;\n hideFallback?: boolean;\n hideCheckmark?: boolean;\n themeColor?: string;\n}\n\nexport function CoverPillWidgetContent(props: CoverPillWidgetContentProps<BaseObject>): JSX.Element {\n const coverUrl = ImageHelper.createUrl(props.coverUrl, { size: props.isLarge ? ImageSize.Medium : ImageSize.Small });\n\n let classification: Classification | undefined = undefined;\n if (MasterTypeHelper.isClassification(props.data)) {\n classification = props.data;\n }\n\n const childProps = {\n name: props.data.name,\n multiline: props.isLarge || props.multiline,\n subtitle: props.subtitle,\n noUnderLine: props.highlightOnHover,\n newVideosCount: props.showNewVideosCount ? classification?.externalMetadata?.childDashboardNewVideoCount : 0\n };\n\n const coverStyle: React.CSSProperties = {\n backgroundImage: coverUrl ? `url('${coverUrl}')` : null,\n backgroundColor: props.coverBgColor\n };\n\n const fallbackCoverBgClassName = getBgColorClass(props.data.name, BG_COLOUR_CLASS_NAMES);\n\n return (\n <div\n className={classNames(\n props.themeColor ? styles.hasThemeColor : 'border',\n 'd-flex position-relative',\n props.className,\n styles.widgetItem,\n props.isSelected ? 'border-success border-2' : '',\n props.highlightOnHover && !props.themeColor ? 'bg-light-blue-hover' : ''\n )}\n style={props.themeColor ? { '--themeColor': props.themeColor } as unknown as React.CSSProperties : {}}\n id={`${props.data.id}-${RandomHelper.getRandomInt()}`}\n onClick={props.onClick}\n >\n {props.isSelected && (\n <div className={`${styles.selectedMask} border-2`} />\n )}\n\n <div className={`${styles.imagePanel} ${props.isLarge ? styles.large : ''}`}>\n {props.isSelected && !props.hideCheckmark && (\n <div className={styles.selected}>\n <IconCircle svg={CheckSvg} svgSize={SvgContainerSize.Large} textVariant='white' variant='green' />\n </div>\n )}\n\n {coverUrl &&\n <div\n className={classNames(\n styles.image,\n props.imageClassName,\n !props.coverBgColor && props.showFallbackBackgroundColour && fallbackCoverBgClassName\n )}\n style={coverStyle}\n />\n }\n {!props.hideFallback && (\n <ImageFallback\n type={ImageFallbackType.Subject}\n extraClasses={props.isLarge ? styles.large : ''}\n />\n )}\n </div>\n\n {props.isComingSoon ?\n <ComingSoonNamePanel {...childProps} /> :\n <NormalNamePanel {...childProps} />\n }\n </div>\n );\n}\n\nexport function CoverPillWidgetContentWrapper(props: CoverPillWidgetContentProps<BaseObject>) {\n const appLink = props.getChildAppLink ? props.getChildAppLink(props.data) : null;\n\n return (\n <>\n {appLink ? (\n <AppLink\n className={styles.appLink}\n appLink={appLink}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n appLinkOptions={props.getChildAppLinkOptions?.()}\n >\n <CoverPillWidgetContent {...props} />\n </AppLink>\n ) : (<CoverPillWidgetContent {...props} />)\n }\n </>\n );\n}\n","import * as React from 'react';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { CoverPillWidgetContentWrapper, CoverPillWidgetItemProps } from 'libs/shared/components/widgets/items/subject-widget-item/CoverPill';\nimport { TopicsConstants } from 'libs/shared/constants/TopicsConstants';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { Classification, Presentation } from 'libs/shared/interfaces';\n\nfunction usePresentationName(presentationId: string, availablePresentations: Presentation[]): string {\n const showPresentationName = availablePresentations?.length >= TopicsConstants.MULTI_PRESENTATION_THRESHOLD;\n\n if (!showPresentationName) {\n return undefined;\n }\n\n return availablePresentations?.find(p => p.id === presentationId)?.name;\n}\n\nfunction SubjectWidgetItem(props: CoverPillWidgetItemProps<Classification>): JSX.Element {\n const isComingSoon = props.data?.status === ClassificationStatus.ComingSoon;\n const presentationName = usePresentationName(props.data.presentationId, props?.availablePresentations);\n\n const analyticsData = {\n ...props.analyticsData,\n id: props.analyticsData?.id || props.data?.id,\n name: props.data?.name,\n presentationId: props.analyticsData?.presentationId || props.data.presentationId,\n comingSoon: !!isComingSoon\n };\n\n const analyticsOptions = {\n location: LocationContext.ClassificationListItem,\n entity: EntityType.Classification,\n ...props.analyticsOptions,\n actionType: UserAction.Click,\n descriptor: ClickDescriptor.Cover\n };\n\n return (\n <CoverPillWidgetContentWrapper\n {...props}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n coverUrl={props.data.cover?.url}\n coverBgColor={props.data?.metadata?.backgroundColor}\n subtitle={props.getSubtitle?.(props.data) || presentationName}\n isComingSoon={isComingSoon}\n themeColor={props.shouldHighlight?.(props.data) ? props.data?.metadata?.backgroundColor ?? '' : ''}\n />\n );\n}\n\nconst Memoized = React.memo(SubjectWidgetItem);\n\nexport { Memoized as SubjectWidgetItem };\n","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { SubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item/SubjectWidgetItem';\nimport { Classification } from 'libs/shared/interfaces';\n\nexport interface CoverFixedPillListLargeWidgetTemplateProps {\n name: string;\n description: string;\n hasTableOfContents: boolean;\n \n analyticsData?: HashObject;\n\n content: Classification[];\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink\n };\n settings: {\n hasTopicDirectories: boolean\n };\n}\n\nexport function CoverFixedPillListLargeWidgetTemplate(props: CoverFixedPillListLargeWidgetTemplateProps): JSX.Element {\n return (\n <>\n <WidgetHeader name={props.name} description={props.description} />\n <Row className='mb-n2'>\n {props.content.map(c => {\n return (\n <Col className='position-relative pb-2' key={c.id} xs={12} sm={6} lg={props.hasTableOfContents ? 6 : 4} xl={4}>\n <SubjectWidgetItem\n data={c}\n getChildAppLink={(c: Classification) => props.appLinks?.classification?.(c)}\n analyticsData={props.analyticsData}\n highlightOnHover={props.settings?.hasTopicDirectories}\n isLarge\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}\n","import * as React from 'react';\n\nimport { RandomHelper } from 'libs/common/react/utils/RandomHelper';\n\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\n\nimport styles from './cover-pill.module.scss';\n\nexport const PartialSubjectWidgetItem = () => {\n const [width] = React.useState(RandomHelper.getRandomInt(5) + 3 + 'rem');\n\n return (\n <div className={`border d-flex position-relative me-2 ${styles.widgetItem}`}>\n <div className={styles.imagePanel} />\n <div className='px-2' style={{ width }} />\n <div className={styles.partialIcon}>\n <ImageFallback type={ImageFallbackType.Subject} />\n </div>\n </div>\n );\n};\n\nexport const PartialLargeSubjectWidgetItem = () => {\n return (\n <div className={`border d-flex position-relative me-2 ${styles.widgetItem}`}>\n <div className={`${styles.partialLargeImage}`} />\n <div className='px-2' />\n <div className={styles.partialIcon}>\n <ImageFallback type={ImageFallbackType.Subject} extraClasses={styles.partialLargeFallback} />\n </div>\n </div>\n );\n};\n","import * as React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, HashObject, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { EditSvg } from 'libs/shared/images/svg/actions/EditSvg';\n\nimport styles from './cover-pill.module.scss';\n\ninterface EditSubjectsWidgetLinkProps {\n appLink: Core.AppLink;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\nconst analyticsOptions: AnalyticsOptions = {\n actionType: UserAction.Click,\n entity: EntityType.UserSetting,\n descriptor: ClickDescriptor.Tile\n};\n\nexport function EditSubjectsWidgetLink(props: EditSubjectsWidgetLinkProps): JSX.Element {\n const className =\n `${styles.editSubjectsItem} d-flex position-relative px-3 justify-content-center align-items-center`;\n\n return (\n <AppLink\n appLink={props.appLink}\n className='text-decoration-none'\n analyticsData={{ ...props.analyticsData, type: 'subject-preference' }}\n analyticsOptions={ { ...props.analyticsOptions, ...analyticsOptions }}\n >\n <div className={className}>\n <SvgContainer svg={EditSvg} className='me-2 align-middle d-inline-block svg-container' />\n <p className='h6 align-middle text-truncate'><Text namespace='shared.subjectWidgetItem' phrase='edit' /></p>\n </div>\n </AppLink>\n );\n}\n","import * as React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, HashObject, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { ClickViewLogoInverted } from 'libs/shared/components/svgs/clickview-logo/ClickViewLogo';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport styles from './cover-pill.module.scss';\n\ninterface AllSubjectsWidgetLinkProps {\n appLink: Core.AppLink;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\nconst analyticsOptions: AnalyticsOptions = {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n descriptor: ClickDescriptor.Tile\n};\n\nexport function AllSubjectsWidgetLink(props: AllSubjectsWidgetLinkProps): JSX.Element {\n const className =\n `${styles.allSubjectsItem}\n d-flex flex-column position-relative px-2\n align-items-center justify-content-center text-nowrap bg-navy`;\n\n return (\n <AppLink\n appLink={props.appLink}\n className='text-decoration-none'\n analyticsData={{ ...props.analyticsData, type: 'subject-all' }}\n analyticsOptions={ { ...props.analyticsOptions, ...analyticsOptions }}\n >\n <div className={className}>\n <div className={styles.logoContainer}>\n <ClickViewLogoInverted />\n </div>\n <p className='h6 pt-2 px-3 mb-0'><Text namespace='shared.subjectWidgetItem' phrase='all' /></p>\n </div>\n </AppLink>\n );\n}\n","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { PartialLargeSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nexport function PartialCoverFixedPillListLargeWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n return (\n <div className='py-2'>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\n <Row className='g-0'>\n {Array(5).fill(null).map((_, i) => {\n return (\n <Col key={i} xs={12} sm={6} lg={4}>\n <div className='position-relative mb-2'>\n <PartialLargeSubjectWidgetItem />\n </div>\n </Col>\n );\n })}\n </Row>\n </div>\n );\n}\n",":local {\n .emoji {\n letter-spacing: map-get($spacers, 1);\n }\n}","import React from 'react';\n\nimport styles from './emoji-text.module.scss';\n\ninterface EmojiTextProps {\n emoji: string;\n}\n\nexport function EmojiText(props: React.PropsWithChildren<EmojiTextProps>): JSX.Element {\n return (\n <>\n <span className={styles.emoji}>{props.emoji}</span>\n {props.children}\n </>\n );\n}\n","import * as Yup from 'yup';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nconst namespace = 'shared.feedbackForm';\n\nexport const FeedbackFormValidationSchema = Yup.object().shape({\n feedbackInput: Yup.string().max(5000, () => LanguageService.getPhrase(namespace, 'tooLong'))\n});\n","@import '~styles/utils/include-media';\n:local {\n .promptContainer {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n margin: 0 auto;\n\n .text {\n margin-bottom: 0;\n text-align: center;\n }\n\n @include media(\"<sm\") {\n flex-direction: column;\n\n .text {\n margin-bottom: map-get($spacers, 2);\n }\n }\n }\n\n .form {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 50%;\n margin: 0 auto;\n flex-direction: column;\n\n :global(.form-group) {\n width: 100%;\n }\n\n .text {\n text-align: center;\n margin-bottom: map-get($spacers, 2);\n }\n\n @include media('<=lg') {\n width: 75%;\n }\n\n @include media('<=sm') {\n width: 100%;\n }\n }\n}","import React from 'react';\nimport { Form } from 'formik';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nimport { EmojiText } from 'libs/shared/components/emoji-text/EmojiText';\nimport { FormButtons } from 'libs/shared/components/forms/form-buttons/FormButtons';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { FormSubmissionOptions, FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { ThumbsDownSvg } from 'libs/shared/images/svg/actions/ThumbsDownSvg';\nimport { ThumbsUpSvg } from 'libs/shared/images/svg/actions/ThumbsUpSvg';\n\nimport { FeedbackFormValidationSchema } from './FeedbackFormValidationSchema';\n\nimport styles from './feedback-form.module.scss';\n\nconst namespace = 'shared.feedbackForm';\n\nexport interface DashboardFeedbackData {\n type: 'positive' | 'negative';\n content: string;\n}\n\ntype FormState = 'prompt' | 'yes' | 'no' | 'done';\n\ninterface FeedbackFormProps {\n onSubmit: (feedback: DashboardFeedbackData) => Promise<void>;\n}\n\nexport function FeedbackForm(props: FeedbackFormProps): JSX.Element {\n const [ state, setState ] = React.useState<FormState>('prompt');\n\n const alerts = useAlerts();\n\n function onClickYes(): void {\n setState('yes');\n }\n\n function onClickNo(): void {\n setState('no');\n }\n\n async function onSubmit(\n formData: { feedbackInput: string },\n onDone: (options: FormSubmissionOptions) => void\n ): Promise<void> {\n try {\n await props.onSubmit({\n content: formData.feedbackInput,\n type: state === 'yes' ? 'positive' : 'negative'\n });\n \n setState('done');\n } catch {\n setState('prompt');\n\n alerts.error(LanguageService.getPhrase(namespace, 'error'));\n } finally {\n onDone({ reset: true });\n }\n }\n\n if (!FunctionHelper.isFunction(props.onSubmit))\n return <></>;\n\n if (state === 'prompt') {\n return (\n <div className={styles.promptContainer}>\n <p className={`fw-semibold me-2 ${styles.text}`}>\n <EmojiText emoji='🔎'>\n <Text namespace={namespace} phrase='feedbackQuestion' />\n </EmojiText>\n </p>\n\n <div className='d-flex align-items-center'>\n <IconButton\n className='btn btn-outline-dark me-2'\n onClick={onClickYes}\n svg={ThumbsUpSvg}\n >\n <Text namespace={namespace} phrase='yes' />\n </IconButton>\n\n <IconButton\n className='btn btn-outline-dark'\n onClick={onClickNo}\n svg={ThumbsDownSvg}\n >\n <Text namespace={namespace} phrase='no' />\n </IconButton>\n </div>\n </div>\n );\n }\n\n if (state === 'yes') {\n return (\n <FormWrapper\n onSubmit={onSubmit}\n initialValues={{ feedbackInput: '' }}\n validationSchema={FeedbackFormValidationSchema}\n >\n <Form className={styles.form}>\n <p className={`fw-semibold ${styles.text}`}>\n <EmojiText emoji='👏'>\n <Text namespace={namespace} phrase='happyFeedback' />\n </EmojiText>\n </p>\n <FormField\n name='feedbackInput'\n as='textarea'\n autoComplete='off'\n autoFocus\n rows={4}\n placeholder={LanguageService.getPhrase(namespace, 'feedbackPlaceholder')}\n spellCheck={false}\n />\n <div className='d-flex justify-content-end w-100'>\n <button className='btn btn-link' onClick={() => setState('prompt')}>\n <Text namespace={namespace} phrase='back' />\n </button>\n\n <FormButtons\n variant='dark'\n submitText={LanguageService.getPhrase(namespace, 'sendFeedback')}\n />\n </div>\n </Form>\n </FormWrapper>\n );\n }\n\n if (state === 'no') {\n return (\n <FormWrapper\n onSubmit={onSubmit}\n initialValues={{ feedbackInput: '' }}\n validationSchema={FeedbackFormValidationSchema}\n >\n <Form className={styles.form}>\n <p className={`fw-semibold ${styles.text}`}>\n <EmojiText emoji='😢'>\n <Text namespace={namespace} phrase='unhappyFeedback' />\n </EmojiText>\n </p>\n <FormField\n name='feedbackInput'\n as='textarea'\n autoComplete='off'\n autoFocus\n rows={4}\n placeholder={LanguageService.getPhrase(namespace, 'feedbackPlaceholder')}\n spellCheck={false}\n />\n \n <div className='d-flex justify-content-end w-100'>\n <button className='btn btn-link' onClick={() => setState('prompt')}>\n <Text namespace={namespace} phrase='back' />\n </button>\n\n <FormButtons\n variant='dark'\n submitText={LanguageService.getPhrase(namespace, 'sendFeedback')}\n />\n </div>\n </Form>\n </FormWrapper>\n );\n }\n\n if (state === 'done') {\n return (\n <p className='fw-semibold text-center'>\n <EmojiText emoji='🙌'>\n <Text namespace={namespace} phrase='thankYou' />\n </EmojiText>\n </p>\n );\n }\n\n return <></>;\n}\n",":local {\n .imageContainer {\n position: relative;\n background-position: top;\n background-size: cover;\n width: 2rem;\n height: 2rem;\n flex-shrink: 0;\n\n .image {\n width: 100%;\n height: 100%;\n background-position: center;\n background-size: cover;\n background-repeat: no-repeat;\n }\n }\n\n .background {\n background-color: $gray-100;\n }\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DashboardFeedbackData, FeedbackForm } from 'libs/shared/components/feedback-form/FeedbackForm';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Classification } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './cover-fixed-pill-list-xsmall.module.scss';\n\nconst getPhrase = LanguageService.encloseNamespace('shared.coverFixedPillListXSmall');\n\nexport interface CoverFixedPillListXSmallWidgetTemplateProps {\n name: string;\n content: Classification[];\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink\n };\n onSubmitFeedback: (feedback: DashboardFeedbackData) => Promise<void>;\n isUpselling?: boolean;\n}\n\nexport function CoverFixedPillListXSmallWidgetTemplate(\n props: CoverFixedPillListXSmallWidgetTemplateProps\n): JSX.Element {\n return (\n <>\n <div className={`${styles.background} px-4 py-3 rounded-3 mb-3`}>\n <h2 className='h5'>\n {\n props.isUpselling ?\n getPhrase('upsellHeading', { smartCount: props.content.length }) :\n props.name\n }\n </h2>\n\n <Row as='ul' className='list-unstyled mb-2 w-100'>\n {props.content.map(classification => {\n const coverUrl = ImageHelper.createUrl(classification.cover?.url, { size: ImageSize.Small });\n\n return (\n <Col as='li' key={classification.id} xs={12} sm={6} lg={4}>\n <AppLink\n appLink={props.appLinks?.classification?.(classification)}\n className='d-flex align-items-center mb-2'\n >\n <div className={`${styles.imageContainer} me-2`}>\n <div className={`${styles.image} rounded`} style={{ backgroundImage: `url('${coverUrl}')` }} />\n </div>\n <div>\n {classification.name}\n </div>\n </AppLink>\n </Col>\n );\n })}\n </Row>\n </div>\n\n {!props.isUpselling && <FeedbackForm onSubmit={props.onSubmitFeedback} />}\n </>\n );\n}\n","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport styles from '../cover-fixed-pill-list-xsmall.module.scss';\n\nexport function PartialCoverFixedPillListXSmallWidgetTemplate(): JSX.Element {\n return (\n <div className={`${styles.background} px-4 py-3 rounded-3 mb-3`}>\n <div className='partial-loading-background mb-2' style={{ height: '1.35rem', width: '8rem' }} />\n\n <Row className={`mb-2 ${styles.row}`}>\n {Array(8).fill(null).map((_, i) => {\n return (\n <Col key={i} xs={12} sm={6} lg={4}>\n <div className='d-flex align-items-center mb-2'>\n <div className='partial-loading-background me-2 rounded' style={{ width: '2rem', height: '2rem' }} />\n\n <div className='partial-loading-background' style={{ width: '5rem', height: '1.3125rem' }} />\n </div>\n </Col>\n );\n })}\n </Row>\n </div>\n );\n}\n",":local {\n .playlistItem {\n padding-bottom: 100%; // 1:1 aspect ratio\n }\n\n .playlistItemGradient {\n &::after {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: linear-gradient(\n to top,\n rgba(0, 0, 0, 0.55) 00%,\n rgba(0, 0, 0, 0.50) 05%,\n rgba(0, 0, 0, 0.40) 10%,\n rgba(0, 0, 0, 0.20) 25%,\n rgba(0, 0, 0, 0.05) 50%,\n rgba(0, 0, 0, 0.02) 60%,\n rgba(0, 0, 0, 0.00) 80%\n );\n }\n }\n\n .playlistMetadata {\n position: absolute;\n left: map-get($spacers, 2);\n right: map-get($spacers, 2);\n bottom: map-get($spacers, 2);\n z-index: 1;\n }\n\n .partialHeading {\n height: 2rem;\n width: 17rem;\n }\n\n .ownerAvatarContainer {\n position: absolute;\n right: map-get($spacers, 2);\n top: map-get($spacers, 2);\n z-index: 1;\n width: 15%;\n height: 15%;\n }\n}","import * as React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport styles from './playlist.module.scss';\n\ninterface PartialPlaylistListProps {\n numItems?: number;\n itemClassName?: string;\n showHeading?: boolean;\n}\n\nPartialPlaylistList.defaultProps = {\n numItems: 8\n};\n\nexport function PartialPlaylistList(props: PartialPlaylistListProps): JSX.Element {\n const PARTIAL_PLAYLISTS = [...Array(props.numItems)];\n\n const className = props.itemClassName || '';\n\n return (\n <>\n {props.showHeading && <div className={`${styles.partialHeading} mb-1 partial-loading-background`} />}\n <Row className='mx-n1 mb-n2'>\n {PARTIAL_PLAYLISTS.map((p, idx) => (\n <Col key={idx} xs={6} sm={4} lg={3} className={`${className} px-1 pb-2`}>\n <div className={`${styles.playlistItem} partial-loading-background rounded-3`} />\n </Col>\n ))}\n </Row>\n </>\n );\n}\n","import React from 'react';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Playlist } from 'libs/shared/interfaces';\n\nconst namespace = 'playlists.playlistCount';\n\nfunction getCount(playlist: Playlist): number | false {\n if (!playlist)\n return false;\n\n const videos = playlist.videos?.count ?? 0;\n const interactives = playlist.interactives?.count ?? 0;\n const clips = playlist.clips?.count ?? 0;\n\n return videos + interactives + clips;\n}\n\ninterface PlaylistCountProps {\n playlist: Playlist;\n}\n\nexport function PlaylistCount(props: PlaylistCountProps): JSX.Element {\n const count = getCount(props.playlist);\n\n if (count === false || Number.isNaN(count))\n return <></>;\n\n return (\n <span className='text-shadow font-size-sm'>\n <Text namespace={namespace} phrase='count' options={{ smartCount: count }} />\n </span>\n );\n}\n","import * as React from 'react';\n\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { ClickViewAvatar } from 'libs/shared/components/clickview-avatar/ClickViewAvatar';\nimport { CurrentUser, Playlist } from 'libs/shared/interfaces';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\ninterface PlaylistOwnerAvatarProps {\n playlist: Playlist;\n imageCdnUrl: string;\n currentUser?: CurrentUser;\n}\n\nexport function PlaylistOwnerAvatar(props: PlaylistOwnerAvatarProps): JSX.Element {\n const { _liteOwner } = props.playlist;\n\n if (props.playlist._curationTags?.value?.isClickViewCurated)\n return (\n <ClickViewAvatar />\n );\n\n if (!_liteOwner?.id || !props.currentUser?.id)\n return <></>;\n\n const currentUserIsOwner = _liteOwner.id.toString() === props.currentUser.id.toString();\n\n if (currentUserIsOwner)\n return <></>;\n\n const url = typeof _liteOwner.avatar === 'string' ? _liteOwner.avatar : _liteOwner.avatar?.url;\n\n return (\n <Avatar\n imageUrl={url}\n imageCdnUrl={props.imageCdnUrl}\n initials={UserHelper.getInitials(_liteOwner.name, _liteOwner.surname)}\n />\n );\n}\n","import * as React from 'react';\nimport { format } from 'timeago.js';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { AnalyticsOptions, EntityType, HashObject } from 'libs/analytics/interfaces';\n\nimport { PlaylistCount } from 'libs/shared/apps/playlists/components/playlist-count/PlaylistCount';\nimport { PlaylistOwnerAvatar } from 'libs/shared/apps/playlists/components/playlist-list/PlaylistOwnerAvatar';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { AudienceLabel } from 'libs/shared/components/audience-label/AudienceLabel';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { ImageSize, ResizeType } from 'libs/shared/enums/Images';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { CurrentUser, Playlist, PresentationAudience } from 'libs/shared/interfaces';\nimport { getBgColorClass } from 'libs/shared/utils/getBgColorClass';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './playlist.module.scss';\n\nconst namespace = 'playlists.playlistList';\n\nexport type PlaylistItemStyle = 'square' | 'round' | 'round-left';\n\nexport interface PlaylistItemProps {\n data: Playlist;\n appLink: Core.AppLink;\n currentUser?: CurrentUser;\n presentationAudiences?: PresentationAudience[];\n bgColourClassNames?: string[];\n titleClassName?: string;\n imageCdnUrl?: string;\n itemStyle?: PlaylistItemStyle;\n showCount?: boolean;\n showOwner?: boolean;\n showFallbackImage?: boolean;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n audienceLabelClass?: string;\n}\n\nPlaylistItem.defaultProps = {\n itemStyle: 'square'\n};\n\nexport function PlaylistItem(props: PlaylistItemProps): JSX.Element {\n const imageUrl = ImageHelper.createUrl(props.data.cover && props.data.cover.url, {\n size: ImageSize.Medium,\n resizeType: ResizeType.Cover\n });\n\n const audiences = props.data.subjectPresentationAudiences &&\n props.data.subjectPresentationAudiences.data;\n\n const mergedAudience = useMergeAudiences(audiences, props.presentationAudiences);\n\n let className = styles.playlistItem;\n\n const showImage = !!imageUrl || !!props.showFallbackImage;\n\n if (showImage)\n className += ` ${styles.playlistItemGradient}`;\n\n if (!showImage && props.bgColourClassNames)\n className += ` ${styles.playlistItem} ${getBgColorClass(props.data.name, props.bgColourClassNames)}`;\n\n if (props.itemStyle === 'round')\n className += ` rounded-3 overflow-hidden`;\n\n if (props.itemStyle === 'round-left')\n className += ` rounded-start-lg overflow-hidden`;\n\n const analyticsData = { ...props.analyticsData,\n id: props.data?.id,\n name: props.data?.name\n };\n\n const analyticsOptions = {\n ...props.analyticsOptions,\n entity: EntityType.Playlist\n };\n\n const getTitle = () => {\n if (!props.data.contentModifiedDate || props.data._curationTags?.value?.isClickViewCurated)\n return '';\n\n return LanguageService.getPhrase(namespace, 'lastUpdated', {\n timeago: format(DateHelper.convertUTCToLocal(props.data.contentModifiedDate))\n });\n };\n\n return (\n <AppLink\n appLink={props.appLink}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n title={getTitle()}\n >\n <BaseImage data={imageUrl} alt={props.data.name} className={className}>\n {!!props.showFallbackImage && <ImageFallback type={ImageFallbackType.Playlist} />}\n <div className={`text-white ${styles.playlistMetadata}`}>\n {!!props.showCount && (\n <PlaylistCount playlist={props.data} />\n )}\n <h6 className={`mb-0 ${props.titleClassName || ''}`}><span className='text-shadow clamp-2'>{props.data.name}</span></h6>\n {!!audiences && !!audiences.length && !!mergedAudience &&\n <AudienceLabel\n className={`${props.audienceLabelClass ? props.audienceLabelClass : ''} mt-1`}\n audience={mergedAudience}\n border='white'\n />\n }\n </div>\n {!!props.showOwner && !!props.imageCdnUrl &&\n <div className={styles.ownerAvatarContainer}>\n <PlaylistOwnerAvatar\n playlist={props.data}\n currentUser={props.currentUser}\n imageCdnUrl={props.imageCdnUrl}\n />\n </div>\n }\n </BaseImage>\n </AppLink>\n );\n}\n","import * as React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/core';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, HashObject, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { CurrentUser, Playlist, PresentationAudience } from 'libs/shared/interfaces';\n\nimport { PlaylistItem, PlaylistItemStyle } from './PlaylistItem';\n\ninterface PlaylistListProps {\n playlists: Playlist[];\n getPlaylistAppLink: (playlist: Playlist) => Core.AppLink;\n currentUser?: CurrentUser;\n presentationAudiences?: PresentationAudience[];\n itemContainerClassName?: string;\n itemTitleClassName?: string;\n bgColourClassNames?: string[];\n itemStyle?: PlaylistItemStyle;\n imageCdnUrl?: string;\n showCount?: boolean;\n showOwner?: boolean;\n showFallbackImage?: boolean;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n extraPlaylistItem?: JSX.Element;\n}\n\nconst analyticsOptions: AnalyticsOptions = {\n actionType: UserAction.Click,\n entity: EntityType.Playlist,\n location: LocationContext.PlaylistListItem,\n descriptor: ClickDescriptor.Cover\n};\n\nexport function PlaylistList(props: PlaylistListProps): JSX.Element {\n return (\n <Row as='ul' className='list-unstyled mx-n1'>\n {props.extraPlaylistItem && (\n <Col as='li' key='extra-playlist-item' xs={6} sm={4} lg={3} className={`mb-2 px-1 ${props.itemContainerClassName ? props.itemContainerClassName : ''}`}>\n {props.extraPlaylistItem}\n </Col>\n )}\n\n {props.playlists.map(p => (\n <Col as='li' key={p.id} xs={6} sm={4} lg={3} className={`mb-2 px-1 ${props.itemContainerClassName ? props.itemContainerClassName : ''}`}>\n <PlaylistItem\n data={p}\n appLink={props.getPlaylistAppLink(p)}\n imageCdnUrl={props.imageCdnUrl}\n currentUser={props.currentUser}\n presentationAudiences={props.presentationAudiences}\n bgColourClassNames={props.bgColourClassNames}\n showCount={props.showCount}\n showOwner={props.showOwner}\n showFallbackImage={props.showFallbackImage}\n titleClassName={props.itemTitleClassName}\n itemStyle={props.itemStyle}\n analyticsData={props.analyticsData}\n analyticsOptions={{ ...props.analyticsOptions, ...analyticsOptions }}\n />\n </Col>\n ))}\n </Row>\n );\n}\n","import * as React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { PlaylistItem } from 'libs/shared/apps/playlists/components/playlist-list';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { Playlist, PresentationAudience } from 'libs/shared/interfaces';\n\nconst analyticsOptions: AnalyticsOptions = {\n actionType: UserAction.Click,\n entity: EntityType.Playlist,\n location: LocationContext.PlaylistListItem,\n descriptor: ClickDescriptor.Cover\n};\n\nexport interface CoverFixedTileListWidgetTemplateProps {\n name: string;\n description: string;\n content: Playlist[];\n audiences: PresentationAudience[];\n analyticsData?: HashObject;\n \n appLinks: {\n playlist: (playlist: Playlist) => Core.AppLink\n };\n}\n\nexport function CoverFixedTileListWidgetTemplate(props: CoverFixedTileListWidgetTemplateProps): JSX.Element {\n return (\n <div>\n <WidgetHeader name={props.name} description={props.description} />\n <Row as='ul' className='list-unstyled mx-n1 mb-n2'>\n {props.content.map(p => (\n <Col as='li' key={p.id} xs={6} sm={4} lg={3} className='px-1 pb-2 columns-of-five'>\n <PlaylistItem\n data={p}\n presentationAudiences={props.audiences}\n appLink={props.appLinks?.playlist?.(p)}\n itemStyle='round'\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n />\n </Col>\n ))}\n </Row>\n </div>\n );\n}\n","import React from 'react';\n\nimport { PartialPlaylistList } from 'libs/shared/apps/playlists/components/playlist-list';\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nexport function PartialCoverFixedTileListWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n return (\n <>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\n <PartialPlaylistList itemClassName='columns-of-five' />\n </>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { DynamicWidget } from 'libs/shared/components/widgets/dynamic-widget/DynamicWidget';\nimport { SubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item';\nimport { PartialSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item/PartialSubjectWidgetItem';\nimport { HardCoded } from 'libs/shared/constants/HardCoded';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { Classification, Cover, CuratedDashboardAppLink } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nconst CLASSIFICATION_LATEST_RELEASES = 'classification-latest-releases';\nconst EXPLORE_ALL_TOPICS = 'explore-all-topics';\n\nexport interface CoverItemContent {\n id: string;\n name: string;\n cover: Cover;\n totalVideos?: number;\n}\n\nfunction getTotalVideos(content: CoverItemContent[]): number {\n return content.reduce((sum, cur) => sum += (cur?.totalVideos || 0), 0);\n}\n\nfunction getSubtitleFromTotalVideos(data: CoverItemContent): string {\n return data.totalVideos ? `${data.totalVideos} new video${data.totalVideos > 1 ? 's' : '' }` : '';\n}\n\nfunction getExtraItem(props: CoverSlidingPillListSmallWidgetTemplateProps, content: CoverItemContent[]) {\n if (\n props.metadata?.appLink === CuratedDashboardAppLink.ClassificationDirectory &&\n props.settings?.hasTopicDirectories\n ) {\n return {\n id: CuratedDashboardAppLink.ClassificationDirectory,\n name: `Explore all topics`,\n cover: {\n url: ImageHelper.createUrl(\n props.classification?.cover?.url,\n { size: ImageSize.Small }\n )\n },\n metadata: {\n backgroundColor: props.classification?.metadata?.backgroundColor\n }\n };\n }\n\n if (props.metadata?.appLink === CuratedDashboardAppLink.ClassificationLatestReleases)\n return {\n id: CLASSIFICATION_LATEST_RELEASES,\n name: 'All new releases',\n cover: {\n url: ImageHelper.getUrlById(props.imageCdnUrl, ImageType.Covers, props.metadata.imageId, ImageSize.Medium)\n },\n totalVideos: getTotalVideos(content)\n };\n\n if (props.metadata?.appLink === CuratedDashboardAppLink.ExploreAllTopics)\n return {\n id: EXPLORE_ALL_TOPICS,\n name: 'Explore all subjects',\n cover: { url: ImageHelper.createUrl(HardCoded.Images.STREAMABLE_TOPIC_COVER, { size: ImageSize.Small }) }\n };\n}\n\nexport interface CoverSlidingPillListSmallWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n imageCdnUrl: string;\n content: CoverItemContent[];\n classification: Classification;\n showHighlight?: boolean;\n analyticsData?: HashObject;\n \n widgetTypeId: WidgetTypeId;\n templateId: WidgetTemplate;\n appLinks: {\n classificationDirectory: (classification: Classification) => Core.AppLink,\n allTopics: (presentationId?: string) => Core.AppLink,\n classificationLatestReleases: (classification: Classification) => Core.AppLink,\n classification: (classification: Classification | null) => Core.AppLink\n };\n metadata: {\n imageId: string,\n appLink: CuratedDashboardAppLink\n };\n settings: {\n hasTopicDirectories: boolean\n };\n}\n\nexport function CoverSlidingPillListSmallWidgetTemplate(\n props: CoverSlidingPillListSmallWidgetTemplateProps\n): JSX.Element {\n const extraContent = getExtraItem(props, props.content);\n const isClassificationLatestReleasedWidget =\n props.metadata?.appLink === CuratedDashboardAppLink.ClassificationLatestReleases;\n\n function getHeadingAppLink(): Core.AppLink {\n if (\n !props.classification ||\n !TopicsHelper.isTopLevelTopic(props.classification) ||\n props.widgetTypeId !== WidgetTypeId.Classifications ||\n props.templateId !== WidgetTemplate.CoverSlidingPillListSmall ||\n !props.settings?.hasTopicDirectories\n ) {\n return null;\n }\n\n return props.appLinks?.classificationDirectory?.(props.classification);\n }\n\n function getChildAppLink(data: any): Core.AppLink {\n if (data.id === CuratedDashboardAppLink.ClassificationDirectory)\n return props.appLinks?.classificationDirectory?.(props.classification);\n \n if (data.id === CuratedDashboardAppLink.ExploreAllTopics)\n return props.appLinks?.allTopics?.(data);\n\n return isClassificationLatestReleasedWidget ?\n props.appLinks?.classificationLatestReleases?.(data) :\n props.appLinks?.classification?.(data);\n }\n\n return (\n <DynamicWidget\n id={props.id}\n collection={extraContent ? [ extraContent, ...props.content ] : props.content}\n getChildAppLink={data => getChildAppLink(data)}\n childComponent={SubjectWidgetItem}\n partialLoadingComponent={PartialSubjectWidgetItem}\n heading={props.name}\n headingAppLink={getHeadingAppLink()}\n getSubtitle={\n isClassificationLatestReleasedWidget ?\n getSubtitleFromTotalVideos :\n undefined\n }\n description={props.description}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n childComponentProps={{\n highlightOnHover: props.settings?.hasTopicDirectories,\n shouldHighlight: (data: CoverItemContent) => data.id === CuratedDashboardAppLink.ClassificationDirectory\n }}\n />\n );\n}\n","import React from 'react';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { PartialDynamicWidget } from 'libs/shared/components/widgets/dynamic-widget';\nimport { PartialSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nexport function PartialCoverSlidingPillListSmallWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n return (\n <div className='py-2'>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\n <PartialDynamicWidget partialLoadingComponent={PartialSubjectWidgetItem} />\n </div>\n );\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\ninterface SearchExchangeArchiveDescriptionProps {\n appLink: Core.AppLink;\n}\n\nconst namespace = 'search.searchExchangeArchiveDescription';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function SearchExchangeArchiveDescription(props: SearchExchangeArchiveDescriptionProps): JSX.Element {\n return (\n <>\n {getPhrase('searchExchangeArchiveDescription')}\n &nbsp;\n <AppLink\n appLink={props.appLink}\n className='info-link'\n >\n {getPhrase('searchExchangeArchiveLink')}\n </AppLink>\n </>\n );\n}\n","import React from 'react';\nimport { useDraggable, UseDraggableArguments, useDroppable, UseDroppableArguments } from '@dnd-kit/core';\n\ninterface DragDropMoveWrapperProps extends React.PropsWithChildren {\n droppable?: UseDroppableArguments;\n draggable?: UseDraggableArguments;\n dragStyle?: string;\n dropStye?: string;\n setIsDragging?: React.Dispatch<React.SetStateAction<boolean>>;\n isDragging?: boolean;\n}\n\nexport function DragDropMoveWrapper(props: DragDropMoveWrapperProps) {\n const {\n active: dragActive,\n isDragging,\n attributes,\n listeners,\n setNodeRef: draggableRef\n } = useDraggable({ ...props.draggable, disabled: !props.draggable, attributes: { role: 'drag', tabIndex: -1 } });\n const {\n isOver,\n over,\n active: dropActive,\n setNodeRef: droppableRef\n } = useDroppable({ ...props.droppable, disabled: !props.droppable });\n\n React.useEffect(() => {\n const data = props.draggable?.data;\n if (Array.isArray(data) && data?.includes(dragActive?.id.toString())) {\n props.setIsDragging?.(isDragging);\n } else {\n props.setIsDragging?.(false);\n }\n }, [isDragging]);\n\n function isSelected() {\n const data = props.draggable?.data;\n return Array.isArray(data) && data.includes(props.draggable.id.toString());\n }\n\n return (\n <div\n ref={draggableRef}\n {...listeners}\n {...attributes}\n className={`${props.draggable ? 'cursor-grab' : 'cursor-default'} ${(isDragging && dragActive) || (props.isDragging && isSelected()) ? props.dragStyle : null}`}\n >\n <div\n ref={droppableRef}\n className={(dropActive && isOver && dragActive?.id !== over?.id) ? props.dropStye : null}\n >\n {props.children}\n </div>\n </div>\n );\n}\n",":local {\n .dragHandleContainer {\n color: $gray-700;\n }\n}","import React from 'react';\nimport { Col } from 'react-bootstrap';\n\nimport { PropsWithSortableItemProps } from 'libs/shared/components/sortable/SortableItemWrapper';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { HandleSvg } from 'libs/shared/images/svg/objects/HandleSvg';\nimport { SvgIcon } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './video-item-left-content.module.scss';\n\ninterface VideoItemLeftContentProps {\n index: number;\n showDragHandle: boolean;\n showIndexes: boolean;\n dragHandleIcon: SvgIcon;\n dragHandleIconSize: SvgContainerSize;\n}\n\nfunction getClassName(showDragHandle: boolean): string {\n const baseClassName = 'd-flex justify-content-center align-items-center';\n if (!showDragHandle) return baseClassName;\n\n return `${baseClassName} cursor-pointer ${styles.dragHandleContainer}`;\n}\n\nexport function VideoItemLeftContent(props: PropsWithSortableItemProps<VideoItemLeftContentProps>): JSX.Element {\n const dragProps = props.showDragHandle ? { ...props.dragAttributes, ...props.dragListeners } : {};\n const className = getClassName(props.showDragHandle);\n\n if (!props.showDragHandle && !props.showIndexes) return <></>;\n\n return (\n <Col\n xs={2}\n className={className}\n {...dragProps}\n >\n {!!props.showDragHandle &&\n <SvgContainer svg={props.dragHandleIcon} size={props.dragHandleIconSize} />\n }\n {!!props.showIndexes &&\n <span className='fw-semibold'>{props.index + 1}</span>\n }\n </Col>\n );\n}\n\nVideoItemLeftContent.defaultProps = {\n dragHandleIcon: HandleSvg,\n dragHandleIconSize: SvgContainerSize.Small\n};\n","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'shared.signInToWatch';\n\ninterface SignInToWatchProps {\n appLink: Core.AppLink;\n className: string;\n}\n\nexport function SignInToWatch(props: SignInToWatchProps): React.ReactElement {\n return (\n <AppLink appLink={props.appLink} className={props.className}>\n <Text namespace={namespace} phrase='signInToWatch'></Text>\n </AppLink>\n );\n}\n","import * as React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces/AnalyticsTypes';\n\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nexport interface VideoActionsOptions {\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\ntype GetVideoActions = (video: VideoTypes, options: VideoActionsOptions) => ActionOptions[];\ntype FetchMoreActions = (video: VideoTypes) => void;\n\ninterface VideoActionsContextData {\n getVideoActions: GetVideoActions;\n fetchMoreActions?: FetchMoreActions;\n}\n\nexport const VideoActionsContext = React.createContext<VideoActionsContextData>(null);\n","import * as React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces/AnalyticsTypes';\n\nimport { Actions } from 'libs/shared/components/actions/Actions';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { VideoActionsContext } from 'libs/shared/context/VideoActionsContext';\nimport { Video } from 'libs/shared/interfaces';\n\ninterface VideoItemActionsProps {\n video: Video;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\nexport function VideoItemActions(props: VideoItemActionsProps): JSX.Element {\n const videoActions = React.useContext(VideoActionsContext);\n\n if (!FunctionHelper.isFunction(videoActions?.getVideoActions))\n return <></>;\n\n const actions = videoActions.getVideoActions(props.video, {\n analyticsData: props.analyticsData,\n analyticsOptions: props.analyticsOptions\n });\n\n return (\n <Actions\n actions={actions}\n className='align-items-start gap-2'\n actionsDropdownClassName='btn btn-link py-0'\n dropdownToggleSvgSize={SvgContainerSize.Standard}\n fetchMore={videoActions.fetchMoreActions ? () => videoActions.fetchMoreActions(props.video) : null}\n customSize\n />\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces/AnalyticsTypes';\n\nimport { SignInToWatch } from 'libs/shared/components/sign-in-to-watch/SignInToWatch';\nimport { VideoItemActions } from 'libs/shared/components/video-list/components/video-item-actions/VideoItemActions';\nimport { Video } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\ninterface VideoItemTopRightProps {\n video: Video;\n showSignIn: boolean;\n signInAppLink?: Core.AppLink;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\nexport function VideoItemTopRight(props: VideoItemTopRightProps): JSX.Element {\n const { canNavigate } = VideoHelper.getCanBeConsumed(props.video);\n\n if (props.showSignIn && !canNavigate)\n return <SignInToWatch appLink={props.signInAppLink} className='btn btn-outline-dark align-self-start' />;\n\n return (\n <VideoItemActions\n video={props.video}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n />\n );\n}\n","import { ColProps } from 'react-bootstrap';\n\nimport { VideoItemSize } from 'libs/shared/components/video-list/BaseVideoItemProps';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nexport const VideoListHelper = {\n getThumbnailColumns(): ColProps {\n return {\n xs: 12,\n sm: 5,\n lg: 3\n };\n },\n\n getDetailsColumns(): ColProps {\n return {\n xs: 12,\n sm: 7,\n lg: 9\n };\n },\n\n getSize(breakpoints: Breakpoints, size: VideoItemSize): VideoItemSize {\n if (breakpoints.sm)\n return 'sm';\n \n return size || 'md';\n },\n\n getThumbnailColSize(hasDragHandle: boolean): number {\n return hasDragHandle ? 10 : 12;\n }\n};\n","@import '~styles/utils/mixins';\n@import '~styles/utils/include-media';\n:local {\n .responsiveGuidance {\n @include media('<=lg') {\n @include responsive-guidance-tags;\n }\n }\n}","import * as React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { EntityType, LocationContext } from 'libs/analytics/interfaces';\n\nimport { SortableItemWrapper } from 'libs/shared/components/sortable/SortableItemWrapper';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { BaseVideoItemProps } from 'libs/shared/components/video-list/BaseVideoItemProps';\nimport { VideoItemGuidance } from 'libs/shared/components/video-list/components/video-guidance/VideoItemGuidance';\nimport { VideoItemDescription } from 'libs/shared/components/video-list/components/video-item-description/VideoItemDescription';\nimport { VideoItemLeftContent } from 'libs/shared/components/video-list/components/video-item-left-content/VideoItemLeftContent';\nimport { VideoItemRestrictionBadge } from 'libs/shared/components/video-list/components/video-item-restriction-badge/VideoItemRestrictionBadge';\nimport { VideoItemTitle } from 'libs/shared/components/video-list/components/video-item-title/VideoItemTitle';\nimport { VideoItemTopRight } from 'libs/shared/components/video-list/components/video-item-top-right/VideoItemTopRight';\nimport { SortableVideoListContext } from 'libs/shared/components/video-list/VideoList';\nimport { VideoListHelper } from 'libs/shared/components/video-list/VideoListHelper';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { useHover } from 'libs/shared/hooks/UseHover';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { Clip } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './clip-item.module.scss';\n\nexport type ClipItemProps = BaseVideoItemProps<Clip>;\n\nexport const ClipItem = React.forwardRef((props: ClipItemProps, ref: React.LegacyRef<HTMLDivElement>) => {\n const breakpoints = useBreakpoints();\n const [ hoverRef, hovered ] = useHover<HTMLDivElement>();\n \n const size = VideoListHelper.getSize(breakpoints, props.size);\n const isSmall = size === 'sm';\n\n const { isSortable } = React.useContext(SortableVideoListContext);\n\n const mergedAudience = useMergeAudiences(props.video.subjectPresentationAudiences?.data, props.presentationAudiences);\n\n const showDragHandle = isSortable && !breakpoints.xs && (hovered || typeof props.index === 'undefined' || !props.showIndexes);\n const showIndexes = (props.showIndexes && !showDragHandle) && !breakpoints.xs;\n const hasIconOrIndex = (showDragHandle || props.showIndexes) && !breakpoints.xs;\n\n const appLink = props.getVideoAppLink(props.video, {});\n const analyticsProps = {\n analyticsData: props.analyticsData,\n analyticsOptions: {\n entity: EntityType.Clip,\n location: LocationContext.ClipListItem\n }\n };\n\n return (\n <div ref={hoverRef} className='w-100'>\n <div className={`row g-0 ${isSmall ? '' : 'py-2'}`} ref={ref} style={props.style}>\n <Col {...VideoListHelper.getThumbnailColumns()} className={`flex-column align-items-flex-start ${isSmall ? `pb-2 pe-2` : 'mb-1 px-2'}`}>\n <Row>\n <VideoItemLeftContent\n index={props.index}\n showDragHandle={showDragHandle}\n showIndexes={showIndexes}\n dragHandleIcon={props.dragHandleIcon}\n dragHandleIconSize={props.dragHandleIconSize}\n dragAttributes={props.dragAttributes}\n dragListeners={props.dragListeners}\n />\n \n <Col xs={VideoListHelper.getThumbnailColSize(hasIconOrIndex)}>\n <VideoThumbnail\n {...analyticsProps}\n video={props.video}\n appLink={appLink}\n shareId={props.shareId}\n audience={mergedAudience}\n imageOptions={{ size: ImageSize.Medium }}\n textPosition={ThumbnailTextPosition.Independent}\n type='static'\n commonVideoProps={{\n ...props.commonVideoProps,\n subTextType: 'none'\n }}\n showOwner={props.showOwner}\n />\n </Col>\n </Row>\n </Col>\n\n <Col\n {...VideoListHelper.getDetailsColumns()}\n className={`${isSmall ? 'pb-2' : 'px-2'} d-flex position-relative flex-column`}\n >\n <div className='d-flex justify-content-between'>\n <VideoItemTitle\n video={props.video}\n appLink={appLink}\n size={size}\n yearGroups={props.commonVideoProps.yearGroups}\n showPadlock={!props.commonVideoProps.hasStudentExperience && !props.commonVideoProps.hasGuestExperience}\n linkClassName='flex-grow-1'\n {...analyticsProps}\n />\n \n <VideoItemTopRight\n {...analyticsProps}\n video={props.video}\n showSignIn={props.showSignIn}\n signInAppLink={props.getSignInAppLink?.(appLink)}\n />\n </div>\n\n <div>\n {!isSmall && (\n <VideoItemDescription\n video={props.video}\n showSignIn={props.showSignIn}\n hasStudentExperience={props.commonVideoProps.hasStudentExperience}\n hasGuestExperience={props.commonVideoProps.hasGuestExperience}\n />\n )}\n {!props.commonVideoProps.hasStudentExperience && !props.commonVideoProps.hasGuestExperience && (\n <VideoItemRestrictionBadge video={props.video} yearGroups={props.commonVideoProps.yearGroups}/>\n )}\n </div>\n\n {VideoHelper.showVideoGuidance(props.hasPermissions) && (\n <VideoItemGuidance\n video={props.video}\n getVideoAppLink={props.getVideoAppLink}\n containerClassName='d-flex justify-content-start align-items-center pt-sm-1 gap-1'\n responsiveClassName={styles.responsiveGuidance}\n commonVideoProps={props.commonVideoProps}\n {...analyticsProps}\n />\n )}\n </Col>\n </div>\n </div>\n );\n});\n\ntype SortableClipItemProps = ClipItemProps & {\n index: number\n};\n\nexport const SortableClipItem = (props: SortableClipItemProps) => {\n return (\n <SortableItemWrapper id={props.video.id} childComponent={ClipItem} childProps={props} />\n );\n};\n","import * as React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { EntityType, LocationContext } from 'libs/analytics/interfaces';\n\nimport { SortableItemWrapper } from 'libs/shared/components/sortable/SortableItemWrapper';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { BaseVideoItemProps } from 'libs/shared/components/video-list/BaseVideoItemProps';\nimport { VideoItemDescription } from 'libs/shared/components/video-list/components/video-item-description/VideoItemDescription';\nimport { VideoItemLeftContent } from 'libs/shared/components/video-list/components/video-item-left-content/VideoItemLeftContent';\nimport { VideoItemRestrictionBadge } from 'libs/shared/components/video-list/components/video-item-restriction-badge/VideoItemRestrictionBadge';\nimport { VideoItemTitle } from 'libs/shared/components/video-list/components/video-item-title/VideoItemTitle';\nimport { VideoItemTopRight } from 'libs/shared/components/video-list/components/video-item-top-right/VideoItemTopRight';\nimport { InteractiveItemQuestions } from 'libs/shared/components/video-list/interactive-item/InteractiveItemQuestions';\nimport { SortableVideoListContext } from 'libs/shared/components/video-list/VideoList';\nimport { VideoListHelper } from 'libs/shared/components/video-list/VideoListHelper';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { useHover } from 'libs/shared/hooks/UseHover';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { InteractiveMetadata } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nexport interface InteractiveItemProps extends BaseVideoItemProps<InteractiveMetadata> {\n getPreviewQuestionsAppLink: (interactive: InteractiveMetadata) => Core.AppLink;\n}\n\nexport const InteractiveItem = React.forwardRef((props: InteractiveItemProps, ref: React.LegacyRef<HTMLDivElement>) => {\n const breakpoints = useBreakpoints();\n const [ hoverRef, hovered ] = useHover<HTMLDivElement>();\n\n const size = VideoListHelper.getSize(breakpoints, props.size);\n const isSmall = size === 'sm';\n\n const { isSortable } = React.useContext(SortableVideoListContext);\n\n const mergedAudience = useMergeAudiences(props.video.subjectPresentationAudiences?.data, props.presentationAudiences);\n\n const showDragHandle = isSortable && !breakpoints.xs && (hovered || typeof props.index === 'undefined' || !props.showIndexes);\n const showIndexes = (props.showIndexes && !showDragHandle) && !breakpoints.xs;\n const hasIconOrIndex = (showDragHandle || props.showIndexes) && !breakpoints.xs;\n\n const appLink = props.getVideoAppLink(props.video, {});\n const analyticsProps = {\n analyticsData: props.analyticsData,\n analyticsOptions: {\n entity: EntityType.Interactive,\n location: LocationContext.InteractiveListItem\n }\n };\n\n const { canNavigate } = VideoHelper.getCanBeConsumed(props.video);\n\n return (\n <div ref={hoverRef} className='w-100'>\n <div className='row g-0 py-2' ref={ref} style={props.style}>\n <Col {...VideoListHelper.getThumbnailColumns()} className={`flex-column align-items-flex-start ${isSmall ? `pb-2 pe-2` : 'mb-1 px-2'}`}>\n <Row>\n <VideoItemLeftContent\n index={props.index}\n showDragHandle={showDragHandle}\n showIndexes={showIndexes}\n dragHandleIcon={props.dragHandleIcon}\n dragHandleIconSize={props.dragHandleIconSize}\n dragAttributes={props.dragAttributes}\n dragListeners={props.dragListeners}\n />\n \n <Col xs={VideoListHelper.getThumbnailColSize(hasIconOrIndex)}>\n <VideoThumbnail\n {...analyticsProps}\n video={props.video}\n appLink={appLink}\n shareId={props.shareId}\n audience={mergedAudience}\n imageOptions={{ size: ImageSize.Medium }}\n textPosition={ThumbnailTextPosition.Independent}\n type='static'\n hideDuration={isSmall}\n commonVideoProps={{\n ...props.commonVideoProps,\n subTextType: 'none'\n }}\n showOwner={props.showOwner}\n />\n </Col>\n </Row>\n </Col>\n\n <Col {...VideoListHelper.getDetailsColumns()} className={`position-relative ${isSmall ? 'pb-2' : 'px-2'}`}>\n <div className='d-flex justify-content-between'>\n <VideoItemTitle\n video={props.video}\n appLink={appLink}\n size={size}\n yearGroups={props.commonVideoProps.yearGroups}\n showPadlock={!props.commonVideoProps.hasStudentExperience && !props.commonVideoProps.hasGuestExperience}\n linkClassName='flex-grow-1'\n {...analyticsProps}\n />\n <VideoItemTopRight\n {...analyticsProps}\n video={props.video}\n showSignIn={props.showSignIn}\n signInAppLink={props.getSignInAppLink?.(appLink)}\n />\n </div>\n\n {canNavigate ? (\n <div className='pt-sm-1 pt-md-0'>\n <InteractiveItemQuestions\n timepoints={props.video._timepoints?.value}\n appLink={appLink}\n previewAppLink={props.getPreviewQuestionsAppLink(props.video)}\n />\n </div>\n ) : (\n <VideoItemDescription\n video={props.video}\n showSignIn={props.showSignIn}\n hasStudentExperience={props.commonVideoProps.hasStudentExperience}\n hasGuestExperience={props.commonVideoProps.hasGuestExperience}\n />\n )}\n\n {!props.commonVideoProps.hasStudentExperience && !props.commonVideoProps.hasGuestExperience && (\n <VideoItemRestrictionBadge video={props.video} yearGroups={props.commonVideoProps.yearGroups}/>\n )}\n </Col>\n </div>\n </div>\n );\n});\n\ntype SortableInteractiveItemProps = InteractiveItemProps & {\n index: number\n};\n\nexport const SortableInteractiveItem = (props: SortableInteractiveItemProps) => {\n return (\n <SortableItemWrapper id={props.video.id} childComponent={InteractiveItem} childProps={props} />\n );\n};\n","@import '~styles/utils/mixins';\n@import '~styles/utils/include-media';\n:local {\n .responsiveGuidance {\n @include media('<=lg') {\n @include responsive-guidance-tags;\n }\n }\n}","import * as React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/core';\n\nimport { EntityType, LocationContext } from 'libs/analytics/interfaces';\n\nimport { SortableItemWrapper } from 'libs/shared/components/sortable/SortableItemWrapper';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { BaseVideoItemProps } from 'libs/shared/components/video-list/BaseVideoItemProps';\nimport { VideoItemGuidance } from 'libs/shared/components/video-list/components/video-guidance/VideoItemGuidance';\nimport { VideoItemDescription } from 'libs/shared/components/video-list/components/video-item-description/VideoItemDescription';\nimport { VideoItemLeftContent } from 'libs/shared/components/video-list/components/video-item-left-content/VideoItemLeftContent';\nimport { VideoItemRestrictionBadge } from 'libs/shared/components/video-list/components/video-item-restriction-badge/VideoItemRestrictionBadge';\nimport { VideoItemTitle } from 'libs/shared/components/video-list/components/video-item-title/VideoItemTitle';\nimport { VideoItemTopRight } from 'libs/shared/components/video-list/components/video-item-top-right/VideoItemTopRight';\nimport { SortableVideoListContext } from 'libs/shared/components/video-list/VideoList';\nimport { VideoListHelper } from 'libs/shared/components/video-list/VideoListHelper';\nimport { VideoSubText } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { useHover } from 'libs/shared/hooks/UseHover';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { HandleSvg } from 'libs/shared/images/svg/objects/HandleSvg';\nimport { Video } from 'libs/shared/interfaces';\n\nimport styles from './video-item.module.scss';\n\nexport interface VideoItemProps extends BaseVideoItemProps<Video> {}\n\nexport const VideoItem = React.forwardRef((props: VideoItemProps, ref: React.LegacyRef<HTMLDivElement>) => {\n const breakpoints = useBreakpoints();\n const [ hoverRef, hovered ] = useHover<HTMLDivElement>();\n\n const size = VideoListHelper.getSize(breakpoints, props.size);\n\n const isSmall = size === 'sm';\n\n const { isSortable } = React.useContext(SortableVideoListContext);\n\n const videoAudiences = props.video?.subjectPresentationAudiences?.data;\n const mergedAudience = useMergeAudiences(videoAudiences, props.presentationAudiences);\n\n const showDragHandle = isSortable && !breakpoints.xs && (hovered || typeof props.index === 'undefined' || !props.showIndexes);\n const showIndexes = (props.showIndexes && !showDragHandle) && !breakpoints.xs;\n const hasIconOrIndex = (showDragHandle || props.showIndexes) && !breakpoints.xs;\n\n const appLink = props.getVideoAppLink?.(props.video, {});\n\n function getSubTextAppLink(): Core.AppLink {\n return props.commonVideoProps.getSubTextAppLink?.(props.video);\n }\n\n const subTextType = props.commonVideoProps.getSubTextType?.(props.video);\n\n const subTextAppLink = getSubTextAppLink();\n const analyticsProps = {\n analyticsData: props.analyticsData,\n analyticsOptions: props.analyticsOptions ?? {\n entity: EntityType.Video,\n location: LocationContext.VideoListItem\n }\n };\n\n return (\n <div ref={hoverRef} className='w-100'>\n <div className={`row g-0 ${isSmall ? '' : 'py-2'}`} style={props.style} ref={ref}>\n <Col\n {...VideoListHelper.getThumbnailColumns()}\n className='flex-column align-items-flex-start mb-1 mb-sm-0 pb-sm-2 pe-sm-2 px-md-2 pb-md-0'\n >\n <Row>\n <VideoItemLeftContent\n index={props.index}\n showDragHandle={showDragHandle}\n showIndexes={showIndexes}\n dragHandleIcon={props.dragHandleIcon}\n dragHandleIconSize={props.dragHandleIconSize}\n dragAttributes={props.dragAttributes}\n dragListeners={props.dragListeners}\n />\n \n <Col xs={VideoListHelper.getThumbnailColSize(hasIconOrIndex)}>\n <VideoThumbnail\n {...analyticsProps}\n video={props.video}\n appLink={appLink}\n shareId={props.shareId}\n audience={mergedAudience}\n imageOptions={{ size: hasIconOrIndex ? ImageSize.Small : ImageSize.Medium }}\n textPosition={ThumbnailTextPosition.Independent}\n type='static'\n hideRating={false}\n commonVideoProps={props.commonVideoProps}\n />\n </Col>\n </Row>\n </Col>\n <Col\n {...VideoListHelper.getDetailsColumns()}\n className='d-flex position-relative flex-column px-0 px-md-2 pb-0 pb-sm-2 pb-md-0 justify-content-md-between'\n >\n <div>\n <div className='d-flex justify-content-between'>\n <div className='flex-grow-1'>\n <VideoSubText\n {...analyticsProps}\n video={props.video}\n appLink={subTextAppLink}\n type={subTextType}\n />\n <VideoItemTitle\n {...analyticsProps}\n video={props.video}\n appLink={appLink}\n size={size}\n yearGroups={props.commonVideoProps.yearGroups}\n showNewVideoIndicator={props.commonVideoProps.showNewVideoIndicator}\n showPadlock={!props.commonVideoProps.hasStudentExperience\n && !props.commonVideoProps.hasGuestExperience}\n titleClassName='mb-0'\n />\n </div>\n <VideoItemTopRight\n {...analyticsProps}\n video={props.video}\n showSignIn={props.showSignIn}\n signInAppLink={props.getSignInAppLink?.(appLink)}\n />\n </div>\n\n {!isSmall && (\n <VideoItemDescription\n video={props.video}\n showSignIn={props.showSignIn}\n hasStudentExperience={props.commonVideoProps.hasStudentExperience}\n hasGuestExperience={props.commonVideoProps.hasGuestExperience}\n />\n )}\n\n {!props.commonVideoProps.hasStudentExperience && !props.commonVideoProps.hasGuestExperience && (\n <VideoItemRestrictionBadge video={props.video} yearGroups={props.commonVideoProps.yearGroups}/>\n )}\n </div>\n\n {!props.hideVideoGuidance && (\n <VideoItemGuidance\n video={props.video}\n getVideoAppLink={props.getVideoAppLink}\n commonVideoProps={props.commonVideoProps}\n containerClassName='d-flex justify-content-start align-items-center pt-sm-1 gap-1'\n responsiveClassName={styles.responsiveGuidance}\n {...analyticsProps}\n />\n )}\n </Col>\n </div>\n </div>\n );\n});\n\nVideoItem.defaultProps = {\n dragHandleIcon: HandleSvg,\n dragHandleIconSize: SvgContainerSize.Small,\n size: 'md'\n};\n\ntype SortableVideoItemProps = VideoItemProps & {\n index: number\n};\n\nexport const SortableVideoItem = (props: SortableVideoItemProps) => {\n return (\n <SortableItemWrapper id={props.video.id} childComponent={VideoItem} childProps={props} />\n );\n};\n","@import '~styles/utils/include-media';\n:local {\n .sortableVideo {\n box-shadow: 0px 5px 10px rgba($black, 0.3);\n }\n\n .videoList {\n margin: 0 -#{map-get($spacers, 2)};\n \n @include media('<=md') {\n margin: 0;\n }\n }\n\n .badgeContainer {\n :global(.rating-badge) {\n height: 1.3rem;\n font-size: 90%;\n font-weight: 500;\n }\n \n :global(.duration-badge-new) {\n height: 1.3rem;\n font-size: 90%;\n font-weight: 500;\n }\n \n :global(.draft-badge) {\n height: 1.3rem;\n font-size: 90%;\n font-weight: 500;\n }\n\n :global(.audience-label) {\n height: 1.3rem;\n font-size: 90%;\n }\n }\n\n .dragStyle {\n opacity: 0.5;\n }\n}","import * as React from 'react';\nimport { DragEndEvent, DragStartEvent } from '@dnd-kit/core';\n\nimport { Cursors } from 'libs/common/backbone/interfaces';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { AnalyticsOptions, HashObject } from 'libs/analytics/interfaces';\n\nimport { SearchIndices } from 'libs/shared/apps/search/interfaces';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { DragDropMoveWrapper } from 'libs/shared/components/drag-drop-move/DragDropMoveWrapper';\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { Pagination } from 'libs/shared/components/pagination/Pagination';\nimport { SortableContainerWrapper } from 'libs/shared/components/sortable/SortableContainerWrapper';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { BulkCheckboxManager } from 'libs/shared/hooks/useBulkCheckboxManager';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { InteractiveMetadata, PresentationAudience, VideoTypes } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { SvgIcon } from 'libs/shared/utils/SvgHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { ClipItem, ClipItemProps, SortableClipItem } from './clip-item/ClipItem';\nimport { InteractiveItem, InteractiveItemProps, SortableInteractiveItem } from './interactive-item/InteractiveItem';\nimport { SortableVideoItem, VideoItem, VideoItemProps } from './video-item/VideoItem';\n\nimport styles from './video-list.module.scss';\n\nconst namespace = 'shared.videoList';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ntype ItemComponent = (props: ClipItemProps | InteractiveItemProps | VideoItemProps) => JSX.Element;\n\nfunction getItemComponent(video: VideoTypes, isSortable: boolean): ItemComponent {\n if (VideoHelper.isClip(video))\n return isSortable ? SortableClipItem : ClipItem;\n\n if (VideoHelper.isInteractive(video))\n return isSortable ? SortableInteractiveItem : InteractiveItem;\n\n return isSortable ? SortableVideoItem : VideoItem;\n}\n\ninterface SortableVideoListContextProps {\n isSortable: boolean;\n currentSortingIndex?: number;\n}\n\nexport const SortableVideoListContext = React.createContext<SortableVideoListContextProps>({\n isSortable: false\n});\n\nexport interface VideoListProps {\n videos: VideoTypes[];\n getVideoAppLink: (video: VideoTypes, options: GetVideoAppLinkOptions) => Core.AppLink;\n getSignInAppLink?: (appLink: Core.AppLink) => Core.AppLink;\n getPreviewQuestionsAppLink?: (interactive: InteractiveMetadata) => Core.AppLink;\n hideVideoGuidance?: boolean;\n cursors?: Cursors;\n dragHandleIcon?: SvgIcon;\n dragHandleIconSize?: SvgContainerSize;\n showSignIn?: boolean;\n showIndexes?: boolean;\n startingPositionIndex?: number;\n canRemovePrivateVideos?: boolean;\n presentationAudiences?: PresentationAudience[];\n allowBulkAction?: boolean;\n getVideosBulkAction?: (items: string[]) => ActionOptions[];\n drag?: boolean;\n typeFilter?: SearchIndices | SearchIndices[];\n checkboxHelper?: BulkCheckboxManager;\n hasPermissions: HasPermissionsFunc;\n showOwner?: boolean;\n shareId?: string;\n getAnalyticsData?: (itemIndex: number) => HashObject;\n analyticsOptions?: AnalyticsOptions;\n commonVideoProps: CommonVideoProps;\n}\n\nexport function VideoList(props: VideoListProps): JSX.Element {\n const { isSortable } = React.useContext(SortableVideoListContext);\n const [ isDragging, setIsDragging ] = React.useState<boolean>(false);\n const { checkboxHelper: CheckboxHelper } = props;\n \n const currentAppLink = Core.AppLinkHelper.getCurrentAppLink();\n\n return (\n <>\n <div className={`position-relative ${styles.videoList}`}>\n \n {props.videos.map((v, idx) => {\n const Component = getItemComponent(v, isSortable);\n \n /**\n * Where we're provided with a starting position index by the parent, \n * we'll use that as the starting position instead of the local index.\n */\n const pagePositionStartingIndex = Number.isInteger(props.startingPositionIndex) ?\n props.startingPositionIndex :\n 0;\n\n const dragData = CheckboxHelper && CheckboxHelper.getSelectedCount() > 1 && CheckboxHelper.isChecked(v.id) ?\n CheckboxHelper.getSelected() :\n v;\n\n const analyticsData = typeof props.getAnalyticsData === 'function' ?\n props.getAnalyticsData(idx) :\n {\n pagePositionIndex: pagePositionStartingIndex + idx\n };\n\n return (\n <DragDropMoveWrapper\n draggable={(props.drag && !isSortable) && ({ id: v.id, data: dragData })}\n dragStyle={styles.dragStyle}\n isDragging={isDragging}\n setIsDragging={setIsDragging}\n key={`${v.id}:${idx}`}\n >\n <div className='d-flex flex-row align-items-center'>\n {props.allowBulkAction && (\n <Checkbox\n className='mx-0 mx-md-2'\n id={v.id}\n ariaLabel={`${getPhrase('ariaBulkAction')}: ${v.name}`}\n onChange={() => CheckboxHelper.onToggleItem(v.id)}\n checked={CheckboxHelper.isChecked(v.id)}\n />\n )}\n <Component\n video={v}\n index={idx}\n getVideoAppLink={props.getVideoAppLink}\n dragHandleIcon={props.dragHandleIcon}\n dragHandleIconSize={props.dragHandleIconSize}\n showSignIn={props.showSignIn}\n getSignInAppLink={props.getSignInAppLink}\n analyticsData={analyticsData}\n hasPermissions={props.hasPermissions}\n canRemovePrivateVideos={props.canRemovePrivateVideos}\n presentationAudiences={props.presentationAudiences}\n showIndexes={props.showIndexes}\n getPreviewQuestionsAppLink={props.getPreviewQuestionsAppLink}\n hideVideoGuidance={props.hideVideoGuidance}\n showOwner={props.showOwner}\n shareId={props.shareId}\n commonVideoProps={props.commonVideoProps}\n analyticsOptions={props.analyticsOptions}\n />\n </div>\n </DragDropMoveWrapper>\n );\n })}\n </div>\n\n {props.cursors &&\n <Pagination appLink={currentAppLink} cursors={props.cursors} />\n }\n </>\n );\n}\n\ninterface SortableVideoListProps extends VideoListProps {\n currentSortingIndex?: number;\n onSortEnd: (event: DragEndEvent) => void;\n onSortStart: (event: DragStartEvent) => void;\n\n}\n\nexport const SortableVideoList = (props: SortableVideoListProps) => {\n const ids = props.videos.map(v => v.id);\n\n const getDragOverlay = (id: string) => {\n const video = props.videos.find(v => v.id === id);\n const Component = getItemComponent(video, true);\n\n return (\n <div className={`bg-white ${styles.sortableVideo}`}>\n <SortableVideoListContext.Provider value={{ isSortable: true }}>\n <Component\n video={video}\n getVideoAppLink={props.getVideoAppLink}\n dragHandleIcon={props.dragHandleIcon}\n dragHandleIconSize={props.dragHandleIconSize}\n showSignIn={props.showSignIn}\n getSignInAppLink={props.getSignInAppLink}\n hasPermissions={props.hasPermissions}\n hideVideoGuidance={props.hideVideoGuidance}\n getPreviewQuestionsAppLink={props.getPreviewQuestionsAppLink}\n shareId={props.shareId}\n commonVideoProps={props.commonVideoProps}\n />\n </SortableVideoListContext.Provider>\n </div>\n );\n };\n\n return (\n <SortableContainerWrapper\n ids={ids}\n getDragOverlay={getDragOverlay}\n onSortEnd={props.onSortEnd}\n onSortStart={props.onSortStart}\n >\n <SortableVideoListContext.Provider value={{ isSortable: true, currentSortingIndex: props.currentSortingIndex }}>\n <VideoList {...props} />\n </SortableVideoListContext.Provider>\n </SortableContainerWrapper>\n );\n};\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { EntityType, LocationContext } from 'libs/analytics/interfaces';\n\nimport { SearchExchangeArchiveDescription } from 'libs/shared/apps/search/components/search-exchange-archive-description/SearchExchangeArchiveDescription';\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Company, InteractiveMetadata, PresentationAudience, Series, Video } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nexport interface ThumbnailVerticalListWidgetTemplateProps {\n widgetTypeId: WidgetTypeId;\n name: string;\n description: string;\n content: Video[];\n hasPermissions: HasPermissionsFunc;\n audiences: PresentationAudience[];\n\n seeMoreLink: Core.AppLink;\n\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink,\n series: (series: Series) => Core.AppLink,\n company: (company: Company) => Core.AppLink,\n searchSettings: () => Core.AppLink,\n searchHome: (filters?: HashObject) => Core.AppLink,\n getPreviewQuestionsAppLink: (interactive: InteractiveMetadata) => Core.AppLink\n };\n metadata: {\n hideWidgetHeading: boolean,\n hideWidgetDescription: boolean\n };\n settings: {\n hasTopicDirectories: boolean\n };\n\n commonVideoProps: CommonVideoProps;\n badgeComponent: JSX.Element;\n getAnalyticsData?: (itemIndex: number) => HashObject;\n}\n\nexport function ThumbnailVerticalListWidgetTemplate(props: ThumbnailVerticalListWidgetTemplateProps) {\n function getShowSeeMoreLink(): boolean {\n return (!!props.seeMoreLink &&\n [\n WidgetTypeId.SearchExchangeArchive,\n WidgetTypeId.SearchMySchoolLibraryVideos,\n WidgetTypeId.SearchClickViewLive\n ].includes(props.widgetTypeId)\n );\n }\n \n function getDescription() {\n if (props.widgetTypeId === WidgetTypeId.SearchExchangeArchive) {\n return <SearchExchangeArchiveDescription appLink={props.appLinks.searchSettings()} />;\n }\n \n return props.description;\n }\n\n return (\n <>\n <WidgetHeader\n name={!props.metadata?.hideWidgetHeading && props.name}\n description={!props.metadata.hideWidgetDescription && getDescription()}\n showSeeMoreLink={getShowSeeMoreLink()}\n appLink={props.seeMoreLink}\n badgeComponent={props.badgeComponent}\n />\n\n <VideoList\n videos={props.content}\n getVideoAppLink={props.appLinks?.videoType}\n hasPermissions={props.hasPermissions}\n getPreviewQuestionsAppLink={props.appLinks?.getPreviewQuestionsAppLink}\n presentationAudiences={props.audiences}\n commonVideoProps={props.commonVideoProps}\n getAnalyticsData={props.getAnalyticsData}\n analyticsOptions={{\n location: LocationContext.ThumbnailVerticalListWidget,\n entity: EntityType.Video\n }}\n />\n </>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { HashObject, LocationContext } from 'libs/analytics/interfaces';\n\nimport { CurriculumLeaf } from 'libs/shared/components/curriculum-links/CurriculumLinks';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Company, InteractiveMetadata, PresentationAudience, Series, Video } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nimport { ThumbnailVerticalListWidgetTemplate } from '../thumbnail-vertical-list/ThumbnailVerticalListWidgetTemplate';\n\nexport interface CurriculumCodeSearchResultsWidgetTemplateProps {\n name: string;\n content: Video[];\n hasPermissions: HasPermissionsFunc;\n audiences: PresentationAudience[];\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink,\n series: (series: Series) => Core.AppLink,\n company: (company: Company) => Core.AppLink,\n searchSettings: () => Core.AppLink,\n searchHome: (filters?: HashObject) => Core.AppLink,\n getPreviewQuestionsAppLink: (interactive: InteractiveMetadata) => Core.AppLink\n };\n metadata: {\n curriculumLeafName: string,\n curriculumLeafDescription: string\n };\n commonVideoProps: CommonVideoProps;\n settings: {\n hasTopicDirectories: boolean\n };\n getAnalyticsData: (itemIndex: number) => HashObject;\n}\n\nexport function CurriculumCodeSearchResultsWidgetTemplate(\n props: CurriculumCodeSearchResultsWidgetTemplateProps\n): JSX.Element {\n return (\n <>\n <div className='bg-gray-100 p-3 rounded-3 mb-3'>\n <h2 className='h6'>\n {props.name}\n </h2>\n <CurriculumLeaf\n code={props.metadata.curriculumLeafName}\n description={props.metadata.curriculumLeafDescription}\n id={null}\n locationContext={LocationContext.SearchCurriculumCodeWidget}\n />\n </div>\n\n <ThumbnailVerticalListWidgetTemplate\n metadata={{\n hideWidgetHeading: true,\n hideWidgetDescription: true\n }}\n name=''\n description=''\n widgetTypeId={WidgetTypeId.SearchCurriculumCode}\n hasPermissions={props.hasPermissions}\n content={props.content}\n audiences={props.audiences}\n seeMoreLink={null}\n appLinks={props.appLinks}\n commonVideoProps={props.commonVideoProps}\n badgeComponent={null}\n settings={props.settings}\n getAnalyticsData={props.getAnalyticsData}\n />\n </>\n );\n}\n",":local {\n .partialOptions {\n width: 5.375rem;\n }\n\n .partialName {\n width: 18.75rem;\n height: 1.3125rem;\n }\n\n .partialDescription {\n width: 12.5rem;\n height: 1.3125rem;\n }\n\n .partialThumbnail {\n padding-bottom: 56.25%;\n }\n\n .partialDragHandle {\n width: 1.25rem;\n height: 1.25rem;\n }\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { VideoListHelper } from 'libs/shared/components/video-list/VideoListHelper';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nimport styles from './partial-video-list.module.scss';\n\ninterface PartialVideoListProps {\n withReordering?: boolean;\n numVideos?: number;\n allowBulkActions?: boolean;\n}\n\nPartialVideoList.defaultProps = {\n numVideos: 15\n};\n\nexport function PartialVideoList(props: PartialVideoListProps): JSX.Element {\n return (\n <>\n {Array(props.numVideos).fill(null).map((_, i) => (\n <div className='d-flex' key={i}>\n {props.allowBulkActions && <div className='form-check pe-3 pe-sm-2 mx-0 mx-md-2' />}\n <PartialVideoItem {...props} />\n </div>\n ))}\n </>\n );\n}\n\nexport function PartialVideoItem(props: PartialVideoListProps): JSX.Element {\n const breakpoints = useBreakpoints();\n\n const size = VideoListHelper.getSize(breakpoints, 'md');\n const isSmall = size === 'sm';\n\n const withDragHandle = props.withReordering && !breakpoints.xs;\n\n return (\n <Row className={`${isSmall ? '' : 'py-2'} flex-grow-1`}>\n <Col {...VideoListHelper.getThumbnailColumns()} className={`flex-column align-items-flex-start ${isSmall ? `pb-2 pe-1` : 'mb-1 pe-3 pe-md-2'}`}>\n <Row>\n {!!withDragHandle && (\n <div className='d-flex align-items-center justify-content-center col-2'>\n <div className={`partial-loading-background ${styles.partialDragHandle}`} />\n </div>\n )}\n <Col xs={VideoListHelper.getThumbnailColSize(withDragHandle)}>\n <div className={`partial-loading-background ${isSmall ? 'rounded' : 'rounded-3'} ${styles.partialThumbnail}`} />\n </Col>\n </Row>\n </Col>\n <Col {...VideoListHelper.getDetailsColumns()} className={isSmall ? 'pb-2' : 'px-2'}>\n <div className={`partial-loading-background mb-1 ${styles.partialName}`} />\n <div className={`partial-loading-background ${styles.partialDescription}`} />\n </Col>\n </Row>\n );\n}\n\n","import React from 'react';\n\nimport { PartialVideoList } from 'libs/shared/components/video-list/partial-loading/PartialVideoList';\n\nexport function PartialThumbnailVerticalListWidgetTemplate() {\n return (\n <PartialVideoList numVideos={3} />\n );\n}\n","import React from 'react';\n\nimport { PartialThumbnailVerticalListWidgetTemplate } from '../../thumbnail-vertical-list/partial-loading/PartialThumbnailVerticalListWidgetTemplate';\n\nexport function PartialCurriculumCodeSearchResultsWidgetTemplate(): JSX.Element {\n return (\n <>\n <div className='partial-loading-background rounded-3 mb-3 w-100' style={{ height: '5rem' }}></div>\n <PartialThumbnailVerticalListWidgetTemplate />\n </>\n );\n}\n",":local {\n .accordionButton {\n background-color: $gray-100;\n border-radius: $border-radius;\n\n &:hover {\n background-color: $light-blue;\n }\n\n &.expanded {\n border-top-left-radius: $border-radius;\n border-top-right-radius: $border-radius;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n }\n }\n}","import React from 'react';\nimport { AccordionContext, useAccordionButton } from 'react-bootstrap';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { MinusSvg } from 'libs/shared/images/svg/actions/MinusSvg';\nimport { PlusSvg } from 'libs/shared/images/svg/actions/PlusSvg';\n\nimport styles from './accordion-button.module.scss';\n\ninterface AccordionButtonProps extends React.PropsWithChildren {\n name: string;\n}\n\nexport function AccordionButton(props: AccordionButtonProps): JSX.Element {\n const { activeEventKey } = React.useContext(AccordionContext);\n \n const onClick = useAccordionButton(props.name);\n \n const isExpanded = activeEventKey === props.name;\n \n return (\n <button\n type='button'\n onClick={onClick}\n className={`w-100 p-3 ${styles.accordionButton} ${isExpanded ? styles.expanded : ''}`}\n >\n <div className='d-flex align-items-center justify-content-between'>\n <h3 className='mb-0 h5 fw-normal'>\n {props.name}\n </h3>\n\n <div className='rounded-circle bg-white me-2'>\n <SvgContainer svg={isExpanded ? MinusSvg : PlusSvg} />\n </div>\n </div>\n </button>\n );\n}\n",":local {\n .video:not(:last-child) {\n margin-bottom: map-get($spacers, 3);\n }\n\n .thumbnail {\n flex-grow: 1;\n min-width: 8rem;\n max-width: 10rem;\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { VideoItemGuidance } from 'libs/shared/components/video-list/components/video-guidance/VideoItemGuidance';\nimport { VideoItemTitle } from 'libs/shared/components/video-list/components/video-item-title/VideoItemTitle';\nimport { VideoSubText } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { CurriculumNode } from 'libs/shared/components/widgets/curated-widgets/templates/curriculum-resources-accordion/CurriculumAccordionUtils';\nimport { CurriculumType } from 'libs/shared/enums/CurriculumType';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Series, Video } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nimport styles from './curriculum-accordion-video-list.module.scss';\n\nconst namespace = 'shared.curriculumAccordionVideoList';\n\ninterface CurriculumAccordionVideoListProps {\n outcome: CurriculumNode<CurriculumType.Leaf>;\n analyticsData: HashObject;\n getVideoAppLink: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink;\n getSeriesAppLink: (series: Series) => Core.AppLink;\n getOutcomeAppLink: (code: string) => Core.AppLink;\n commonVideoProps: CommonVideoProps;\n outcomeIndex: number;\n}\n\nexport function CurriculumAccordionVideoList(props: CurriculumAccordionVideoListProps): JSX.Element {\n const hasCode = !!props.outcome.name && !!props.outcome.description;\n\n return (\n <>\n <h4 className='h6'>\n <Text namespace={namespace} phrase='alignedVideos' />\n </h4>\n\n <ul className='list-unstyled'>\n {props.outcome.videos.map((video, index) => {\n const analyticsProps = {\n analyticsData: props.analyticsData,\n analyticsOptions: {\n entity: EntityType.Video,\n actionType: UserAction.Click,\n location: LocationContext.CurriculumResourcesAccordionWidget\n }\n };\n\n return (\n <li key={`${props.outcomeIndex}:${index}`} className={`${styles.video} d-flex`}>\n <div className={`${styles.thumbnail} me-2`}>\n <VideoThumbnail\n appLink={props.getVideoAppLink(video, {})}\n video={video}\n type='static'\n imageOptions={{ size: ImageSize.Medium }}\n commonVideoProps={props.commonVideoProps}\n hideDuration\n {...analyticsProps}\n />\n </div>\n\n <div className='d-flex flex-column justify-content-between'>\n <div>\n <VideoSubText\n {...analyticsProps}\n video={video}\n appLink={props.getSeriesAppLink(video.series)}\n type='series'\n />\n <VideoItemTitle\n {...analyticsProps}\n video={video}\n appLink={props.getVideoAppLink(video, {})}\n size='sm'\n titleClassName='mb-0'\n yearGroups={props.commonVideoProps.yearGroups}\n showNewVideoIndicator={props.commonVideoProps.showNewVideoIndicator}\n showPadlock={!props.commonVideoProps.hasStudentExperience\n && !props.commonVideoProps.hasGuestExperience}\n />\n </div>\n\n <VideoItemGuidance\n video={video}\n getVideoAppLink={props.getVideoAppLink}\n commonVideoProps={props.commonVideoProps}\n containerClassName='d-flex justify-content-start align-items-center pt-sm-1 gap-1'\n responsiveClassName={styles.responsiveGuidance}\n {...analyticsProps}\n />\n </div>\n </li>\n );\n })}\n </ul>\n <AppLink\n appLink={props.getOutcomeAppLink(props.outcome.name)}\n className='info-link mt-2 d-inline-block'\n >\n {hasCode ? (\n <Text namespace={namespace} phrase='viewAllVideosCode' options={{ code: props.outcome.name }} />\n ) : (\n <Text namespace={namespace} phrase='viewAllVideosNoCode' />\n )}\n </AppLink>\n </>\n );\n}\n",":local {\n .audience {\n background-color: $gray-100;\n border-bottom-right-radius: $border-radius;\n border-bottom-left-radius: $border-radius;\n }\n\n .area:not(:last-child) {\n margin-bottom: map-get($spacers, 5);\n }\n\n .outcome:not(:last-child) {\n margin-bottom: map-get($spacers, 4);\n }\n}","import React from 'react';\nimport { Accordion } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { CurriculumLeaf } from 'libs/shared/components/curriculum-links/CurriculumLinks';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CurriculumAccordionVideoList } from 'libs/shared/components/widgets/curated-widgets/templates/curriculum-resources-accordion/components/curriculum-accordion-video-list/CurriculumAccordionVideoList';\nimport { CurriculumAudienceSection } from 'libs/shared/components/widgets/curated-widgets/templates/curriculum-resources-accordion/CurriculumAccordionUtils';\nimport { Series, Video } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nimport styles from './audience-section.module.scss';\n\nconst namespace = 'shared.audienceSection';\n\ninterface AudienceSectionProps {\n audience: CurriculumAudienceSection;\n getSearchAppLink: (code: string) => Core.AppLink;\n getVideoAppLink: (obj: Video, options: GetVideoAppLinkOptions) => Core.AppLink;\n getSeriesAppLink: (series: Series) => Core.AppLink;\n commonVideoProps: CommonVideoProps;\n analyticsData: HashObject;\n}\n\nexport function AudienceSection(props: AudienceSectionProps): JSX.Element {\n return (\n <Accordion.Collapse eventKey={props.audience.name}>\n <div className={`${styles.audience} px-3 pb-3`}>\n <ul className='bg-white p-3 rounded-3 list-unstyled mb-0'>\n {props.audience.areas.map((area, index) => {\n return (\n <li key={index} className={styles.area}>\n <h3 className='h5 fw-normal mb-3'>{area.name}</h3>\n\n <ul className='list-unstyled'>\n {area.outcomes.map((outcome, outcomeIndex) => {\n return (\n <li key={outcomeIndex} className={styles.outcome}>\n <h4 className='h6'>\n <Text namespace={namespace} phrase='outcome' />\n </h4>\n\n <div className='pb-2'>\n <CurriculumLeaf\n id={outcome.id}\n code={outcome.name}\n description={outcome.description}\n getCodeAppLink={props.getSearchAppLink}\n locationContext={LocationContext.CurriculumResourcesAccordionWidget}\n uiContainsCodes\n />\n </div>\n\n <CurriculumAccordionVideoList\n outcome={outcome}\n analyticsData={props.analyticsData}\n getVideoAppLink={props.getVideoAppLink}\n getSeriesAppLink={props.getSeriesAppLink}\n getOutcomeAppLink={props.getSearchAppLink}\n commonVideoProps={props.commonVideoProps}\n outcomeIndex={outcomeIndex}\n />\n </li>\n );\n })}\n </ul>\n </li>\n );\n })}\n </ul>\n </div>\n </Accordion.Collapse>\n );\n}\n","import { CurriculumType } from 'libs/shared/enums/CurriculumType';\nimport { Curriculum, Video } from 'libs/shared/interfaces';\n\nexport type CurriculumNode<TType = CurriculumType> = Curriculum<TType> & {\n children: CurriculumNode[],\n videos: Video[]\n};\n\nexport type CurriculumAudienceSection = {\n name: string,\n areas: CurriculumAudienceArea[]\n};\n\nexport type CurriculumOutcomeSection = {\n name: string,\n description: string,\n videos: Video[]\n};\n\ntype CurriculumAudienceArea = {\n name: string,\n outcomes: CurriculumNode<CurriculumType.Leaf>[]\n};\n\nfunction getAudienceAreas(audience: CurriculumNode): CurriculumAudienceArea[] {\n const areas: Map<string, CurriculumAudienceArea> = new Map();\n\n function traverse(node: CurriculumNode, areaName: string): void {\n if (node.type === CurriculumType.Area) {\n if (areaName.length)\n areaName += ` - `;\n\n areaName += node.name;\n\n for (const child of node.children)\n traverse(child, areaName);\n\n return;\n }\n\n if (node.type === CurriculumType.Leaf) {\n if (!areas.has(areaName)) {\n areas.set(areaName, {\n name: areaName,\n outcomes: []\n });\n }\n\n areas.get(areaName).outcomes.push(node as CurriculumNode<CurriculumType.Leaf>);\n }\n }\n\n for (const area of audience.children)\n traverse(area, '');\n\n return Array.from(areas.values());\n}\n\nexport function getCurriculumAccordion(tree: CurriculumNode[]) {\n const audienceLookup: Map<string, CurriculumAudienceSection> = new Map();\n\n for (const subject of tree) {\n for (const audience of subject.children) {\n if (!audienceLookup.has(audience.name)) {\n audienceLookup.set(audience.name, {\n name: audience.name,\n areas: []\n });\n }\n\n audienceLookup.get(audience.name).areas.push(...getAudienceAreas(audience));\n }\n }\n\n return Array.from(audienceLookup.values());\n}\n","import React from 'react';\nimport { Accordion } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CurriculumData, Series, Video } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nimport { AccordionButton } from './components/accordion-button/AccordionButton';\nimport { AudienceSection } from './components/audience-section/AudienceSection';\nimport { CurriculumNode, getCurriculumAccordion } from './CurriculumAccordionUtils';\n\nconst namespace = 'shared.curriculumResourcesAccordion';\n\nexport interface CurriculumResourcesAccordionWidgetTemplateProps {\n content: CurriculumNode[];\n curriculums: CurriculumData;\n appLinks: {\n editCurriculum: () => Core.AppLink,\n search: (code: string) => Core.AppLink,\n videoType: (video: Video, opts: GetVideoAppLinkOptions) => Core.AppLink,\n series: (series: Series) => Core.AppLink\n };\n commonVideoProps: CommonVideoProps;\n analyticsData: HashObject;\n}\n\nexport function CurriculumResourcesAccordionWidgetTemplate(\n props: CurriculumResourcesAccordionWidgetTemplateProps\n): JSX.Element {\n const accordion = React.useMemo(() => getCurriculumAccordion(props.content), [props.content]);\n\n return (\n <div>\n <div className='d-flex align-items-end justify-content-between mb-2'>\n <h2 className='h3 mb-0'>\n {props.curriculums.preferredCurriculum.name}\n </h2>\n\n {props.curriculums.availableCurriculums.length > 1 && (\n <AppLink appLink={props.appLinks.editCurriculum()}>\n <Text namespace={namespace} phrase='changeCurriculum' />\n </AppLink>\n )}\n </div>\n\n <Accordion className='mb-n3'>\n {accordion.map((audience, index) => {\n return (\n <div className='mb-3' key={index}>\n <AccordionButton name={audience.name} />\n <AudienceSection\n audience={audience}\n getSearchAppLink={props.appLinks.search}\n getVideoAppLink={props.appLinks.videoType}\n getSeriesAppLink={props.appLinks.series}\n commonVideoProps={props.commonVideoProps}\n analyticsData={props.analyticsData}\n />\n </div>\n );\n })}\n </Accordion>\n </div>\n );\n}\n","import React from 'react';\n\nconst Item = () => <div className='partial-loading-background mb-3 rounded-3' style={{ height: '3.5rem' }} />;\n\nexport function PartialCurriculumResourcesAccordionWidgetTemplate(): JSX.Element {\n return (\n <>\n <div className='partial-loading-background mb-2 w-25' style={{ height: '1.7325rem' }} />\n <div className='mb-n3'>\n <Item />\n <Item />\n <Item />\n <Item />\n <Item />\n <Item />\n <Item />\n </div>\n </>\n );\n}\n","import React from 'react';\nimport { DraggableAttributes } from '@dnd-kit/core';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { ToggleSwitch } from 'libs/shared/components/toggle-switch/ToggleSwitch';\nimport { HamburgerSvg } from 'libs/shared/images/svg/objects/HamburgerSvg';\nimport { Classification } from 'libs/shared/interfaces';\n\nimport styles from './cover-pill.module.scss';\n\nconst namespace = 'shared.subjectWidgetItem';\n\ninterface EditableSubjectWidgetItemProps {\n data: Classification;\n onToggleVisibility: (c: Classification) => void;\n isVisible: boolean;\n dragAttributes?: DraggableAttributes;\n dragListeners?: HashObject;\n style?: HashObject;\n isDragging: boolean;\n canToggle: boolean;\n\n multiline?: boolean;\n}\n\nexport const EditableSubjectWidgetItem = React.forwardRef((\n props: EditableSubjectWidgetItemProps,\n ref: React.LegacyRef<HTMLDivElement>\n): JSX.Element => {\n let wrapperClassName = 'px-3 d-flex flex-column justify-content-center';\n let textClassName = `${styles.name} h6`;\n\n if (!props.multiline) {\n wrapperClassName += ' text-nowrap';\n textClassName += ' text-truncate';\n } else {\n textClassName += ` clamp-3`;\n }\n\n function getToggleTooltip(): string {\n if (!props.canToggle)\n return LanguageService.getPhrase(namespace, 'cantToggle');\n\n return LanguageService.getPhrase(namespace, props.isVisible ? 'hideFromDashboard' : 'showOnDashboard');\n }\n\n if (props.style?.visibility === 'hidden') {\n return (\n <div\n ref={ref}\n className={`d-flex align-items-center position-relative clamp-2 ${styles.widgetItem} ${styles.draggingItem}`}\n style={ObjectHelper.omit(props.style, ['visibility'])}\n >\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n className={`border d-flex align-items-center position-relative ${styles.widgetItem}`}\n style={ObjectHelper.omit(props.style, ['visibility'])}\n >\n <div\n className={`\n ${styles.dragHandle} ms-3 d-flex justify-content-center align-items-center \n ${props.isDragging ? 'cursor-grabbing' : 'cursor-grab'} ${props.isVisible ? '' : 'text-secondary'}\n `}\n {...props.dragAttributes}\n {...props.dragListeners}\n >\n <SvgContainer svg={HamburgerSvg} />\n </div>\n <div className={wrapperClassName}>\n <label htmlFor={props.data.id} className={`${textClassName} ${props.isVisible ? '' : 'text-secondary'} mb-0`}>\n {props.data.name}\n </label>\n </div>\n\n <div className='ms-auto me-3'>\n <ToggleSwitch\n id={props.data.id}\n on={props.isVisible}\n onClick={() => props.onToggleVisibility(props.data)}\n tooltipText={getToggleTooltip()}\n disabled={!props.canToggle}\n showStateWhenDisabled\n />\n </div>\n </div>\n );\n});\n",":local {\n .dragOverlay {\n box-shadow: 0px 5px 10px rgba($black, 0.3);\n }\n\n .headingContainer {\n height: 2.5rem; // Sets a consistent height on the heading section so that the size doesn't change when you switch to editing mode\n }\n}","import React from 'react';\nimport { Button, Col, Row } from 'react-bootstrap';\nimport { DragEndEvent, DragStartEvent } from '@dnd-kit/core';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, ToggleDescriptor, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { SortableContainerWrapper } from 'libs/shared/components/sortable/SortableContainerWrapper';\nimport { SortableItemWrapper } from 'libs/shared/components/sortable/SortableItemWrapper';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { EditableSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item/EditableSubjectWidgetItem';\nimport { SubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item/SubjectWidgetItem';\nimport { LocalPermissionName } from 'libs/shared/enums/PermissionName';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { HasLocalPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Classification, Presentation, WidgetPreference } from 'libs/shared/interfaces';\nimport { ReorderHelper } from 'libs/shared/utils/ReorderHelper';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './editable-cover-fixed-pill-list-small.module.scss';\n\ninterface PreferencesHash {\n [classificationId: string]: WidgetPreference;\n}\n\ninterface PresentationSwitchItem extends Classification {\n vanitySlug: string;\n}\n\nconst namespace = 'shared.editableCoverFixedPillListSmall';\n\nexport interface EditableCoverFixedPillListSmallWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n presentation: Presentation;\n preferences: WidgetPreference[];\n widgetTypeId: WidgetTypeId;\n content: Classification[];\n isPreviewing: boolean;\n updatePreferences: (\n widgetId: string,\n widgetTypeId: WidgetTypeId,\n oldPreferences: WidgetPreference[],\n newPreferences: WidgetPreference[]\n ) => Promise<void>;\n availablePresentations: Presentation[];\n settings: {\n hasTopicDirectories: boolean\n };\n isTertiaryCustomerWithoutExchange: boolean;\n hasLocalPermissions: HasLocalPermissionsFunc;\n analyticsData?: HashObject;\n \n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink,\n allTopics: (presentationId?: string) => Core.AppLink,\n discover: (presentationSlug: string) => Core.AppLink\n };\n\n reminderComponent?: JSX.Element;\n}\n\nexport function EditableCoverFixedPillListSmallWidgetTemplate(\n props: EditableCoverFixedPillListSmallWidgetTemplateProps\n): JSX.Element {\n const [ isEditing, setIsEditing ] = React.useState(false);\n const [ showSpinner, setShowSpinner ] = React.useState(false);\n\n const processedContent = WidgetHelper.useGetContent(\n props.content,\n props.widgetTypeId,\n props.isPreviewing,\n props.preferences,\n []\n );\n const content = processedContent.unfilteredContent as Classification[];\n\n const isFollowingNothing = React.useMemo(() => {\n return content.every(c => !c.followers?.data?.length);\n }, [content]);\n\n const initialPreferences = React.useMemo(() => {\n return content?.reduce((acc: HashObject, current, index) => {\n const preference: WidgetPreference = {\n id: current.id,\n hidden: !current.followers?.data?.length && !isFollowingNothing,\n index\n };\n\n acc[current.id] = preference;\n return acc;\n }, {}) ?? {};\n }, [ props.preferences, isFollowingNothing ]);\n\n const [ persistedPreferences, setPersistedPreferences ] = React.useState<PreferencesHash>(initialPreferences);\n const [ preferences, setPreferences ] = React.useState<PreferencesHash>(initialPreferences);\n\n const currentSubjects = React.useMemo(() => {\n if (!isEditing) {\n return content\n .filter(c => !!persistedPreferences[c.id] && !persistedPreferences[c.id]?.hidden)\n .sort((a, b) => persistedPreferences[a.id].index - persistedPreferences[b.id].index);\n }\n\n return content\n .filter(c => !!preferences[c.id])\n .sort((a, b) => preferences[a.id].index - preferences[b.id].index);\n }, [ content, preferences, persistedPreferences, isEditing ]);\n \n const alerts = useAlerts();\n\n React.useEffect(() => {\n setIsEditing(false);\n }, [props.presentation?.id]);\n\n /**\n * The \"Explore all subjects\" option displays for users who have hidden some topics\n */\n const showExploreAllTopics = React.useMemo(() => {\n if (isEditing || !currentSubjects.length)\n return false;\n \n return Object.values(preferences).some(p => p.hidden);\n }, [ isEditing, preferences ]);\n\n async function onClickSavePreferences(): Promise<void> {\n setShowSpinner(true);\n\n const oldPreferences = isFollowingNothing ?\n content.map((c, index) => ({ id: c.id, hidden: true, index })) :\n Object.values(persistedPreferences);\n\n props.updatePreferences(props.id, props.widgetTypeId, oldPreferences, Object.values(preferences))\n .then(() => {\n setPersistedPreferences(preferences);\n setShowSpinner(false);\n setIsEditing(false);\n })\n .catch(() => {\n setShowSpinner(false);\n alerts.error(LanguageService.getPhrase(namespace, 'error'));\n });\n }\n\n function onClickCancel(): void {\n setPreferences(persistedPreferences);\n setIsEditing(false);\n }\n\n function getItemIndex(classification: Classification): number {\n if (preferences[classification.id])\n return preferences[classification.id].index;\n \n return currentSubjects.findIndex(c => c.id === classification.id);\n }\n\n function isVisible(classification: Classification): boolean {\n return !preferences[classification.id]?.hidden;\n }\n\n function onToggleVisibility(classification: Classification): void {\n const newPreferences = { ...preferences };\n\n const hidden = isVisible(classification);\n\n newPreferences[classification.id] = {\n id: classification.id,\n hidden,\n index: getItemIndex(classification)\n };\n\n AnalyticsHelper.logUserAction({\n id: classification.id,\n name: classification.name\n }, {\n location: LocationContext.EditableSubjectPreferencesWidget,\n entity: EntityType.Classification,\n actionType: UserAction.Hide,\n descriptor: hidden ? ToggleDescriptor.On : ToggleDescriptor.Off\n });\n\n setPreferences(newPreferences);\n }\n\n function getDragOverlay(id: string): JSX.Element {\n const classification = currentSubjects.find(c => c.id === id);\n\n return (\n <div className={`bg-white rounded-3 ${styles.dragOverlay}`}>\n <EditableSubjectWidgetItem\n data={classification}\n onToggleVisibility={onToggleVisibility}\n isVisible={isVisible(classification)}\n isDragging={true}\n canToggle={\n !isVisible(classification) ||\n Object.values(preferences).filter(c => !c.hidden).length > 1\n }\n />\n </div>\n );\n }\n\n function onSortStart(event: DragStartEvent): void {\n const classification = currentSubjects.find(s => s.id.toString() === event.active.id.toString());\n const index = currentSubjects.findIndex(s => s.id.toString() === event.active.id.toString());\n\n AnalyticsHelper.logUserAction({\n id: classification.id,\n name: classification.name,\n index\n }, {\n location: LocationContext.EditableSubjectPreferencesWidget,\n entity: EntityType.Classification,\n actionType: UserAction.Move,\n workflowPhase: WorkflowPhase.Start\n });\n }\n\n function onSortEnd(event: DragEndEvent): void {\n const { active, over } = event;\n \n const oldIndex = getItemIndex({ id: active.id } as Classification);\n const newIndex = currentSubjects.findIndex(s => s.id.toString() === over.id.toString());\n \n if (oldIndex === newIndex)\n return;\n\n const classification = currentSubjects[oldIndex];\n\n if (!classification)\n return;\n\n const newPreferences = { ...preferences };\n\n const { reorderedItems } = ReorderHelper.reorder(currentSubjects, oldIndex, newIndex);\n\n reorderedItems.forEach((item, index) => {\n newPreferences[item.id] = {\n id: item.id,\n index,\n hidden: !isVisible(item)\n };\n });\n\n setPreferences(newPreferences);\n\n AnalyticsHelper.logUserAction({\n id: classification.id,\n name: classification.name,\n oldIndex,\n newIndex\n }, {\n location: LocationContext.EditableSubjectPreferencesWidget,\n entity: EntityType.Classification,\n actionType: UserAction.Move,\n workflowPhase: WorkflowPhase.Complete\n });\n }\n\n const hasEditedPreferences = React.useMemo(() => {\n return !ObjectHelper.isEqual(initialPreferences, preferences);\n }, [ initialPreferences, preferences ]);\n\n const exploreAllSubjectsItem = {\n id: props.presentation.id,\n name: LanguageService.getPhrase(namespace, 'exploreAll', { name: props.presentation.name }),\n cover: props.availablePresentations?.find(p => p.id === props.presentation.id)?.cover ?? props.presentation.cover,\n metadata: {\n backgroundColor: TopicsHelper.getMappedPresentationBackgroundColourCode(\n props.presentation.learningLevel,\n props.presentation.type\n )\n }\n } as Classification;\n\n const presentationsSwitchSubjectsItems: PresentationSwitchItem[] = props.availablePresentations ?\n props.availablePresentations.filter(presentation => presentation.id !== props.presentation?.id)\n .map(presentation => {\n return {\n id: presentation.id,\n name: LanguageService.getPhrase(namespace, 'changeTo', { name: presentation.name }),\n cover: presentation.cover,\n vanitySlug: presentation.vanitySlug,\n description: presentation.description,\n metadata: {\n backgroundColor: TopicsHelper.getMappedPresentationBackgroundColourCode(\n presentation.learningLevel,\n presentation.type\n )\n }\n } as PresentationSwitchItem;\n }) :\n [];\n // only show presentation switch if there are more than one other presentaitons and with domain option enabled when it's not editing\n const showPresentationSwitch = !isEditing\n && presentationsSwitchSubjectsItems.length > 0\n && props.settings?.hasTopicDirectories;\n\n const canManagePreferences = props.hasLocalPermissions(LocalPermissionName.ManageDiscoverPreferences);\n\n const analyticsOptions = {\n location: LocationContext.EditableSubjectPreferencesWidget\n };\n\n if (!currentSubjects.length)\n return <></>;\n\n return (\n <div>\n <div className='d-flex flex-wrap align-items-center justify-content-between'>\n <div className='col'>\n <div className='d-flex justify-content-between w-100 no-wrap flex-row mb-2'>\n <h2 className='h4 mb-0 align-self-end flex-shrink-0'>\n {isEditing ? LanguageService.getPhrase(namespace, 'updating') : props.name}\n </h2>\n {(!isEditing && canManagePreferences) && (\n <DivButton className='hover-text-underline' onClick={() => setIsEditing(true)}>\n {LanguageService.getPhrase(namespace, 'edit')}\n </DivButton>\n )}\n </div>\n {!!props.description && !isEditing && (\n <p className='text-truncate description mb-2'>{props.description}</p>\n )}\n {isEditing && (\n <p className='description mb-2'><Text namespace={namespace} phrase='editingDescription' /></p>\n )}\n </div>\n\n {(isEditing && canManagePreferences) && (\n <div className='d-flex align-items-start'>\n <Button variant='link' className='me-2' onClick={onClickCancel}>\n <Text namespace={namespace} phrase='cancel' />\n </Button>\n <SpinnerButton variant='dark' onClick={onClickSavePreferences} showSpinner={showSpinner} disabled={!hasEditedPreferences}>\n <Text namespace={namespace} phrase='update' />\n </SpinnerButton>\n </div>\n )}\n </div>\n\n {!isEditing && React.isValidElement(props.reminderComponent) && props.reminderComponent}\n\n <Row as='ul' className='list-unstyled mx-n1 mb-n2'>\n {showExploreAllTopics && (\n <Col as='li' className='position-relative pb-2 px-1' key={props.presentation.id} sm={6} lg={4}>\n <SubjectWidgetItem\n data={exploreAllSubjectsItem}\n getChildAppLink={() => props.appLinks?.allTopics?.(props.presentation.id)}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n multiline\n highlightOnHover={props.settings?.hasTopicDirectories}\n shouldHighlight={() => props.settings?.hasTopicDirectories}\n />\n </Col>\n )}\n \n <SortableContainerWrapper\n ids={currentSubjects.map(c => c.id)}\n getDragOverlay={getDragOverlay}\n onSortStart={onSortStart}\n onSortEnd={onSortEnd}\n vertical={false}\n >\n {currentSubjects.map(c => {\n return (\n <Col as='li' className='position-relative pb-2 px-1' key={c.id} sm={6} lg={4}>\n <>\n {isEditing ? (\n <SortableItemWrapper\n id={c.id}\n childComponent={EditableSubjectWidgetItem}\n childProps={{\n data: c,\n onToggleVisibility,\n isVisible: isVisible(c),\n isDragging: false,\n canToggle: (\n !isVisible(c) ||\n Object.values(preferences).filter(c => !c.hidden).length > 1\n ),\n multiline: true\n }}\n />\n ) : (\n <SubjectWidgetItem\n data={c}\n getChildAppLink={(c: Classification) => props.appLinks?.classification?.(c)}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n multiline\n highlightOnHover={props.settings?.hasTopicDirectories}\n showNewVideosCount={\n props.settings?.hasTopicDirectories &&\n !props.isTertiaryCustomerWithoutExchange\n }\n />\n )}\n </>\n </Col>\n );\n })}\n </SortableContainerWrapper>\n\n {showPresentationSwitch && presentationsSwitchSubjectsItems.map(item => {\n return (\n <Col as='li' className='position-relative pb-2 px-1' key={item.id} sm={6} lg={4}>\n <SubjectWidgetItem\n data={item}\n getChildAppLink={() => props.appLinks?.discover?.(item?.vanitySlug)}\n analyticsData={{\n ...props.analyticsData,\n id: item.id,\n presentationId: item.id,\n presentationDescription: item.description\n }}\n analyticsOptions={{\n ...analyticsOptions,\n entity: EntityType.Presentation\n }}\n multiline\n highlightOnHover\n shouldHighlight={() => props.settings?.hasTopicDirectories}\n />\n </Col>\n );\n })\n }\n </Row>\n </div>\n );\n}\n",":local {\n .partialLoadingHeading {\n width: 12rem;\n height: 2rem;\n }\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { PartialSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item';\n\nimport styles from './partial-editable-cover-fixed-pill-list-small-widget-template.module.scss';\n\nexport function PartialEditableCoverFixedPillListSmallWidgetTemplate(): JSX.Element {\n return (\n <div className='py-2'>\n <div className={`partial-loading-background mb-2 ${styles.partialLoadingHeading}`} />\n <Row className='g-0'>\n {Array(7).fill(null).map((_, i) => (\n <Col key={i} sm={6} lg={4}>\n <div className='position-relative mb-2'>\n <PartialSubjectWidgetItem />\n </div>\n </Col>\n ))}\n </Row>\n </div>\n );\n}\n",":local {\n .cellDate {\n z-index: 100;\n position: absolute;\n top: map-get($spacers, 1);\n left: map-get($spacers, 1);\n width: 2rem;\n height: 2rem;\n border-radius: 2rem;\n line-height: 0;\n transition: width 150ms ease-in !important;\n overflow: hidden;\n .label{\n display: flex;\n }\n &.isHovering {\n width: 5.18rem;\n }\n }\n\n .numberWrapper {\n width: 2rem;\n height: 2rem;\n border-radius: 2rem;\n }\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { Timezone } from 'libs/shared/apps/streamable-learning/constants/Timezones';\nimport { TimezoneHelper } from 'libs/shared/apps/streamable-learning/utils/TimezoneHelper';\nimport { useHoverIntent } from 'libs/shared/hooks/UseHover';\n\nimport styles from './calendar-cell-date.module.scss';\n\nconst namespace = 'specialEventCalendar.calendarCellDate';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface CalendarCellDateProps {\n date: Date;\n notCurrentMonth: boolean;\n hasEvent?: boolean;\n className?: string;\n isHovering?: boolean;\n timezone?: Timezone;\n}\n\nexport function CalendarCellDate(props: CalendarCellDateProps): JSX.Element {\n const isToday = DateHelper.isSame(\n TimezoneHelper.convertUTCToTimezoneDate(new Date().toISOString(), props.timezone || null),\n props.date,\n 'day'\n );\n\n let dateClassName = `${styles.cellDate} d-flex flex-nowrap`;\n if (isToday)\n dateClassName += ' bg-dark text-white';\n if (props.hasEvent)\n dateClassName += ' text-white';\n else if (props.notCurrentMonth && !props.isHovering)\n dateClassName += ' text-secondary';\n if (props.className)\n dateClassName += ` ${props.className}`;\n \n const numberClassName = 'd-flex text-center justify-content-center align-items-center flex-shrink-0';\n const [ ref, isHovering ] = useHoverIntent<HTMLDivElement>({ delay: 250 });\n\n return (\n <div className={`${dateClassName} ${isHovering ? styles.isHovering : ''}`} ref={ref}>\n <div className={`${styles.numberWrapper} ${numberClassName}`}>\n {DateHelper.format(props.date, 'D')}\n </div>\n {isToday && (\n <div className={`${styles.label} justify-content-start align-items-center`}>\n {getPhrase('today')}\n </div>\n )}\n </div>\n );\n}\n",":local{\n .tag {\n background-color: $gray-100;\n padding-left: 0.25rem;\n }\n .tooltip {\n width: fit-content;\n }\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { TimerSvg } from 'libs/shared/images/svg/status/TimerSvg';\n\nimport styles from './coming-soon-tag.module.scss';\n\nconst namespace = 'specialEventCalendar.comingSoonTag';\n\ninterface ComingSoonProps {\n className?: string;\n onlyIcon?: boolean;\n}\n\nexport function ComingSoonTag(props: ComingSoonProps): JSX.Element {\n return (\n <Tooltip title={LanguageService.getPhrase(namespace, 'tooltip')} spanHackClassName={`d-block ${styles.tooltip}`} spanHack>\n <div className={`d-flex text-dark align-items-center ${styles.tag} ${props.className}`}>\n <SvgContainer svg={TimerSvg} />\n {!props.onlyIcon && LanguageService.getPhrase(namespace, 'comingSoon')}\n </div>\n </Tooltip>\n );\n}\n","export const CALENDAR_STAGGER_INTERVAL_MS = 50;\nexport const CALENDAR_FADE_TRANSITION_MS = 200;\n\n// Extra buffer after the last row's fade completes, so the \"disable transitions\" flip\n// can never race ahead of the fade it's timed against.\nconst CALENDAR_ANIMATION_SAFETY_MARGIN_MS = 50;\n\nexport function getCalendarRowDelayMs(rowIndex: number): number {\n return rowIndex * CALENDAR_STAGGER_INTERVAL_MS;\n}\n\nexport function getCalendarAnimationDurationMs(maxRowIndex: number): number {\n return getCalendarRowDelayMs(maxRowIndex) + CALENDAR_FADE_TRANSITION_MS + CALENDAR_ANIMATION_SAFETY_MARGIN_MS;\n}\n","/**\n * Inspired by nghilevi/moment-calendar-2\n */\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nexport type PatchedDate = Date & { notCurrentMonth: boolean };\nexport type WeeksTable = PatchedDate[][];\nexport type DatePositionMap = Record<string, { row: number, col: number }>;\n\nconst CALENDAR_START_DATE = new Date('2023-01-01');\nconst NEXT_MONTH_LIMIT = 12; // in month\n\nfunction getDaysOfMonth(date: Date): PatchedDate[] {\n const numberOfDays = DateHelper.daysInMonth(date);\n\n const daysArray = [];\n\n for (let i = 1; i <= numberOfDays; i++) {\n const day = DateHelper.set(date, 'date', i);\n daysArray.push(Object.assign(day, { notCurrentMonth: false }));\n }\n\n return daysArray;\n}\n\n// Get days from previous month overlapping current month\nfunction getPreviousMonthOverlappingDays(date: Date, startAtMon: boolean): PatchedDate[] {\n const firstDay = DateHelper.startOf(date, 'month');\n const firstWeekDay = DateHelper.getWeekday(firstDay);\n const prevMonthDays = [];\n const prevMonthDaysCount = startAtMon ? firstWeekDay === 0 ? 6 : firstWeekDay - 1 : firstWeekDay;\n\n for (let i = startAtMon ? 1 : 0; i <= prevMonthDaysCount; i++) {\n const originalDay = firstDay;\n const preDay = DateHelper.weekday(originalDay, firstWeekDay - i);\n prevMonthDays.push(Object.assign(preDay, { notCurrentMonth: true }));\n }\n\n return prevMonthDays.reverse();\n}\n\n// Get days from previous month overlapping current month\nfunction getNextMonthOverlappingDays(date: Date, startAtMon: boolean): PatchedDate[] {\n const lastDay = DateHelper.endOf(date, 'month');\n const lastWeekDay = DateHelper.getWeekday(lastDay);\n const nextMonthDays = [];\n const nextMonthDaysCount = startAtMon ? 7 - (lastWeekDay === 0 ? 7 : lastWeekDay) : 7 - lastWeekDay;\n\n for (let i = 1; i <= nextMonthDaysCount; i += 1) {\n const nextDay = DateHelper.add(lastDay, i, 'days');\n nextMonthDays.push(Object.assign(nextDay, { notCurrentMonth: true }));\n }\n\n return nextMonthDays;\n}\n\nexport function initWeekDays(startAtMon: boolean): string[] {\n const weekdays = startAtMon ? [ 1, 2, 3, 4, 5, 6, 0 ] : [ 0, 1, 2, 3, 4, 5, 6 ];\n const date = new Date();\n return weekdays.map(w => DateHelper.format(DateHelper.weekday(date, w), 'ddd'));\n}\n\nexport function buildWeeksTable(date: Date, startAtMon: boolean) {\n const weeksTable: WeeksTable = [];\n const datePositionMap: DatePositionMap = {};\n\n const monthDays = getPreviousMonthOverlappingDays(date, startAtMon)\n .concat(getDaysOfMonth(date))\n .concat(getNextMonthOverlappingDays(date, startAtMon));\n\n for (let j = 0, rowId = 0; j < monthDays.length; j = j + 7) {\n const week = monthDays.slice(j, j + 7);\n week.forEach((day, colId) => {\n datePositionMap[DateHelper.format(day, 'YYYY-MM-DD')] = { row: rowId, col: colId };\n });\n\n weeksTable.push(week);\n rowId++;\n }\n\n return {\n datePositionMap,\n weeksTable\n };\n}\n\nexport function getFirstCellInCalendar(monthDate: Date) {\n const firstDayOfMonth = DateHelper.startOf(monthDate, 'month');\n if (DateHelper.getWeekday(firstDayOfMonth) === 1) {\n return firstDayOfMonth;\n }\n return ArrayHelper.first(getPreviousMonthOverlappingDays(monthDate, true));\n}\n\nfunction getLastCellInCalendar(monthDate: Date) {\n const lastDayOfMonth = DateHelper.endOf(monthDate, 'month');\n if (DateHelper.getWeekday(lastDayOfMonth) === 0) {\n return lastDayOfMonth;\n }\n return ArrayHelper.last(getNextMonthOverlappingDays(monthDate, true));\n}\n\nexport function getCalendarRange(monthDate: Date) {\n return [ getFirstCellInCalendar(monthDate), getLastCellInCalendar(monthDate) ];\n}\n\nfunction capitalizeMonthString(monthStr: string) {\n return monthStr.charAt(0).toUpperCase() + monthStr.slice(1);\n}\n\nexport function getIsValidMonth(monthDateString: string) {\n if (!monthDateString)\n return true;\n const capitalized = capitalizeMonthString(monthDateString);\n const isValidMonthString = DateHelper.formatIsValid(capitalized, 'MMMM-YYYY', true);\n\n if (!isValidMonthString)\n return false;\n\n const monthDate = DateHelper.parseDateString(capitalized, 'MMMM-YYYY');\n\n return DateHelper.isSame(monthDate, CALENDAR_START_DATE, 'month') || DateHelper.isAfter(monthDate, CALENDAR_START_DATE, 'month');\n}\n\nconst CUR_DATE = new Date();\nexport function canNavToOtherMonths(monthDate: Date) {\n const monthDiff = DateHelper.diffBetween(DateHelper.startOf(monthDate, 'month'), DateHelper.startOf(CUR_DATE, 'month'), 'months');\n const showPrev = DateHelper.isAfter(monthDate, CALENDAR_START_DATE, 'month');\n const showNext = monthDiff < NEXT_MONTH_LIMIT;\n return { showPrev, showNext };\n}\n\nexport function parseMonthString(monthStr: string) {\n if (!monthStr)\n return DateHelper.parseDateString();\n\n const capitalized = capitalizeMonthString(monthStr);\n return DateHelper.parseDateString(capitalized, 'MMMM-YYYY');\n}\n","import { Locale } from 'libs/common/react/interfaces/Locale';\n\nimport { InstanceRegion } from 'libs/shared/enums/InstanceRegion';\n\ntype CommonRegionMap = {\n [key in InstanceRegion]?: Locale;\n};\n\nexport const COMMON_REGION_MAP: CommonRegionMap = {\n [InstanceRegion.US]: 'en-us'\n};\n","import { DateHelper } from 'libs/common/react/utils/DateHelper';\nimport { RegionDateFormatHelper } from 'libs/common/react/utils/RegionDateFormatHelper';\n\nimport { getFirstCellInCalendar } from 'libs/shared/apps/calendar/utils/CalendarHelper';\nimport { COMMON_REGION_MAP } from 'libs/shared/constants/CommonRegionMap';\nimport { InstanceRegion } from 'libs/shared/enums/InstanceRegion';\nimport { CalendarEvent, CalendarEventContent } from 'libs/shared/interfaces';\n\nfunction deduplicateEvents(events: CalendarEvent<CalendarEventContent>[]): CalendarEvent<CalendarEventContent>[] {\n const seen = new Set<string>();\n return events.filter(event => {\n if (seen.has(event.specialEventId)) {\n return false;\n }\n seen.add(event.specialEventId);\n return true;\n });\n}\n\nexport const SpecialEventHelper = {\n getDisplayDate(startDate: string, endDate: string): string {\n if (!endDate)\n // one day event\n return DateHelper.format(startDate, 'D MMM');\n\n if (startDate.slice(5, 7) !== endDate.slice(5, 7))\n // span across months\n return `${DateHelper.format(startDate, 'D MMM')} - ${DateHelper.format(endDate, 'D MMM')}`;\n // same month event\n\n if (RegionDateFormatHelper.getCurrentRegion() === COMMON_REGION_MAP[InstanceRegion.US])\n return `${DateHelper.format(startDate, 'MMM')} ${DateHelper.format(startDate, 'D')} - ${DateHelper.format(endDate, 'D')}`;\n\n return `${DateHelper.format(startDate, 'D')} - ${DateHelper.format(endDate, 'D')} ${DateHelper.format(startDate, 'MMM')}`;\n },\n\n getEventsInMonth(calendarEvents: CalendarEvent[], month: Date) {\n return calendarEvents.filter(e => DateHelper.format(e.startDate, 'YYYY-MM') === DateHelper.format(month, 'YYYY-MM'));\n },\n\n getOrdinalDate(date: string): string {\n return `${DateHelper.getLocalDateOrdinal(DateHelper.get(date, 'date'))} ${DateHelper.format(date, 'MMMM')}`;\n },\n\n isEventFromPreviousMonth(event: CalendarEvent<CalendarEventContent>, month: Date): boolean {\n if (!event.endDate) return false;\n\n const eventStartMonth = DateHelper.format(event.startDate, 'YYYY-MM');\n const targetMonth = DateHelper.format(month, 'YYYY-MM');\n\n return eventStartMonth < targetMonth && event.endDate >= DateHelper.format(month, 'YYYY-MM-DD');\n },\n\n getEventsForDay(\n date: Date,\n allEvents: CalendarEvent<CalendarEventContent>[],\n crossMonthEventsForFirstDay: CalendarEvent<CalendarEventContent>[] = [],\n monthDate: Date\n ): CalendarEvent<CalendarEventContent>[] {\n const eventsStartingOnDay = allEvents.filter(e => DateHelper.isSame(date, e.startDate)) || [];\n const isFirstCellOfCalendar = DateHelper.isSame(getFirstCellInCalendar(monthDate), date, 'day');\n\n if (isFirstCellOfCalendar) {\n return deduplicateEvents([ ...eventsStartingOnDay, ...crossMonthEventsForFirstDay ]);\n }\n\n return eventsStartingOnDay;\n },\n\n getCrossMonthEventsForDate(\n date: Date,\n allEvents: CalendarEvent<CalendarEventContent>[],\n monthDate: Date\n ): CalendarEvent<CalendarEventContent>[] {\n const isFirstCellOfCalendar = DateHelper.isSame(getFirstCellInCalendar(monthDate), date, 'day');\n if (!isFirstCellOfCalendar) return [];\n\n return allEvents.filter(e => {\n const isFromPreviousMonth = SpecialEventHelper.isEventFromPreviousMonth(e, date);\n // Only include if the event's start date is not the same as the target date\n const startDateIsSameDay = DateHelper.isSame(date, e.startDate);\n return isFromPreviousMonth && !startDateIsSameDay;\n });\n },\n\n getAllEventsForDate(\n date: Date,\n allEvents: CalendarEvent[],\n monthDate: Date\n ): CalendarEvent<CalendarEventContent>[] {\n const dateStr = DateHelper.format(date, 'YYYY-MM-DD');\n const eventsStartingOnDay = allEvents.filter(e => e.startDate === dateStr);\n const crossMonthEvents = SpecialEventHelper.getCrossMonthEventsForDate(date, allEvents, monthDate);\n\n return deduplicateEvents([ ...eventsStartingOnDay, ...crossMonthEvents ]);\n }\n};\n",":local {\n .sliderDot {\n width: 0.5rem;\n height: 0.5rem;\n background-color: $gray-400;\n\n &.sm {\n width: 0.3125rem;\n height: 0.3125rem;\n }\n\n &.active {\n background-color: $blue;\n }\n }\n\n .dotContainer {\n gap: 0.625rem;\n }\n \n .defaultCursor {\n cursor: initial !important;\n }\n}","import React from 'react';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\n\nimport styles from './slider-dots.module.scss';\n\ninterface SliderDotsProps {\n sliderStep: number;\n sliderLength: number;\n onSliderDotClick: (i: number) => void;\n isDisabled?: (indicatorIndex: number) => boolean;\n\n size?: 'sm' | 'md';\n className?: string;\n}\n\nexport function SliderDots(props: SliderDotsProps) {\n function onSliderDotClick(e: MouseEvent, i: number) {\n e.stopPropagation();\n e.preventDefault();\n props.onSliderDotClick(i);\n }\n\n function getSliderDotClassName(active: boolean, index: number) {\n let className = `${styles.sliderDot} rounded-3`;\n\n if (active)\n className += ` ${styles.active}`;\n\n if (props.size === 'sm')\n className += ` ${styles.sm}`;\n\n if (props.isDisabled?.(index))\n className += ` pointer-events-none ${styles.defaultCursor}`;\n\n return className;\n }\n \n return (\n <div className={`${props.className} w-100 d-flex justify-content-around`}>\n <div className={`${styles.dotContainer} d-flex`}>\n {[...Array(props.sliderLength)].map((_, i) => {\n const active = i === props.sliderStep;\n\n return (\n <DivButton\n key={i}\n className={getSliderDotClassName(active, i)}\n onClick={e => onSliderDotClick?.(e, i)}\n />\n );\n })}\n </div>\n </div>\n );\n}\n","@import '~styles/utils/mixins';\n@import '~styles/utils/include-media';\n:local {\n $button-bottom: 2.15rem;\n $circle-size: map-get($spacers, 1);\n \n %fade-in {\n opacity: 0;\n transition: opacity var(--calendar-fade-duration, 200ms) ease-in-out;\n }\n\n %slider-on-hover {\n display: none;\n &:hover{\n display: block;\n }\n }\n\n .wrapper {\n &:hover{\n .left {\n display: block;\n }\n .right {\n display: block;\n }\n }\n }\n\n .eventCard {\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n @extend %fade-in;\n //fall-back color\n background-color: $gray-900;\n\n }\n .backgroundImage {\n height: 4.5rem;\n width: 4.5rem;\n \n @extend %fade-in;\n &.noAnimation {\n transition: none;\n }\n &.cover{\n top:0;\n left:0;\n width: 100%;\n height: 100%;\n z-index: 1;\n background-repeat: no-repeat;\n background-position: 0 0 !important;\n background-size: cover;\n }\n }\n \n .date {\n @extend %fade-in;\n }\n\n .tagWrap {\n z-index: 4;\n position: absolute;\n right: 0;\n }\n\n .tag {\n @extend %fade-in;\n width: 2rem;\n height: 2rem;\n top: map-get($spacers, 1);\n right: map-get($spacers, 1);\n }\n\n .appear {\n opacity: 1;\n }\n\n .displayDate {\n font-size: 0.625rem;\n z-index: 2;\n }\n\n .title {\n z-index: 2;\n }\n\n $title-font-size: clamp(0.75rem, 1.25vw, 1rem);\n .titleText {\n font-size: $title-font-size;\n padding-bottom: calc($title-font-size * 0.05) !important;\n\n @include media('<=sm') {\n @include clamp(1);\n }\n }\n\n .circle {\n width: $circle-size;\n height: $circle-size;\n border-radius: 50%;\n background-color: $gray-400;\n z-index: 2;\n\n &.active {\n background-color: $blue;\n }\n\n &:not(:last-child) {\n margin-right: map-get($spacers, 2);\n }\n }\n\n .left {\n left: map-get($spacers, 1);\n bottom: 50%;\n transform: translateY(50%);\n z-index: 2;\n .arrow {\n padding-right: 0.1rem;\n }\n display: none;\n\n }\n .right {\n right: map-get($spacers, 1);\n bottom: 50%;\n transform: translateY(50%);\n z-index: 2;\n .arrow {\n padding-left: 0.1rem;\n }\n display: none;\n\n }\n .bottomBar {\n z-index: 3;\n margin-top: 0.125rem;\n }\n .bottomPlaceholder {\n visibility: hidden;\n }\n\n .hardcodedCover {\n top:0;\n left:0;\n width: 100%;\n height: 100%;\n z-index: 1;\n background-size: 100%;\n @extend %fade-in;\n &.noAnimation {\n transition: none;\n }\n }\n\n .multiEventFilter {\n &::before {\n content: '';\n position: absolute;\n height: 100%;\n width: 100%;\n top: 0;\n left: 0;\n background: rgba(255, 255, 255, 0.4);\n }\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/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 { AnalyticsOptions, EntityType, HashObject, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { CalendarCellDate } from 'libs/shared/apps/calendar/components/calendar-cell-date/CalendarCellDate';\nimport { ComingSoonTag } from 'libs/shared/apps/calendar/components/coming-soon-tag/ComingSoonTag';\nimport { CALENDAR_FADE_TRANSITION_MS, getCalendarRowDelayMs } from 'libs/shared/apps/calendar/constants/CalendarAnimation';\nimport { CalendarCellProps } from 'libs/shared/apps/calendar/interfaces/CalendarCellProps';\nimport { SpecialEventHelper } from 'libs/shared/apps/calendar/utils/SpecialEventHelper';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { HoverableProps } from 'libs/shared/components/hover-to-portal-container/HoverToPortalContainer';\nimport { LazyImage } from 'libs/shared/components/lazy-image/LazyImage';\nimport { SliderDots } from 'libs/shared/components/slider-dots/SliderDots';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { ChevronLeftSvg } from 'libs/shared/images/svg/arrows/ChevronLeftSvg';\nimport { ChevronRightSvg } from 'libs/shared/images/svg/arrows/ChevronRightSvg';\nimport { CalendarEvent, CalendarEventContent } from 'libs/shared/interfaces';\n\nimport styles from './calendar-events.module.scss';\n\ntype CalendarEventsProps = HoverableProps & CalendarCellProps;\n\nCalendarEvents.defaultProps = {\n responsiveText: true\n};\n\nexport function CalendarEvents(props: CalendarEventsProps): JSX.Element {\n const { sliderStep, setSliderStep } = props;\n\n const sortedEventsOnDay = props.fadePastEvents ? sortPastEvents(props.eventsOnDay) : props.eventsOnDay;\n const multiEvents = props.eventsOnDay.length > 1;\n const displayedEvent = sortedEventsOnDay.find((e, idx) => idx === sliderStep) || sortedEventsOnDay[0];\n const multiDayEvent = !!displayedEvent.endDate;\n\n const backgroundColor = props.getBackgroundColor?.(displayedEvent.content);\n\n const hardCodedEvent = props.getHardCodedEvent?.(displayedEvent.content);\n\n const iconUrl = props.getIconUrl?.(displayedEvent.content);\n const coverUrl = props.getCoverUrl?.(displayedEvent.content);\n\n const isComingSoon = displayedEvent.content.status === ClassificationStatus.ComingSoon;\n\n const [ className, setClassName ] = React.useState(!props.hasInitialized ? '' : styles.appear);\n\n React.useEffect(() => {\n if (!props.hasInitialized) {\n const delay = getCalendarRowDelayMs(props.rowIndex ?? 0);\n const timeoutId = window.setTimeout(() => {\n setClassName(styles.appear);\n }, delay);\n return () => window.clearTimeout(timeoutId);\n }\n }, [props.hasInitialized]);\n\n React.useEffect(() => {\n if (props.isHovering) {\n props.setHoveredEvent(displayedEvent);\n }\n }, [ props.isHovering, displayedEvent ]);\n\n React.useEffect(() => {\n return () => {\n if (props.isHovering && props.hoveredEvent?.specialEventId === displayedEvent.specialEventId) {\n props.setHoveredEvent(null);\n }\n };\n }, [ props.isHovering, props.hoveredEvent, displayedEvent ]);\n\n function getAppLink(): Core.AppLink {\n if (multiEvents)\n return props.getEventsListAppLink?.();\n\n if (isComingSoon)\n return null;\n\n return props.getTopicAppLink?.(displayedEvent.content, TextHelper.slugify(displayedEvent.name));\n }\n\n function getAnalyticsData() {\n const analyticsData: HashObject = {\n date: DateHelper.format(props.date, 'YYYY-MM-DD'),\n presentationId: props.presentationId,\n eventCount: props.eventsOnDay.length\n };\n\n if (multiEvents) {\n analyticsData.eventId = props.eventsOnDay.map(e => e.specialEventId).join(',');\n analyticsData.topicId = props.eventsOnDay.map(e => e.content.id).join(',');\n } else {\n analyticsData.eventId = displayedEvent.specialEventId;\n analyticsData.topicId = displayedEvent.content.id;\n analyticsData.eventStatus = displayedEvent.content.status;\n }\n return analyticsData;\n }\n\n const analyticsData = getAnalyticsData();\n\n const analyticsOptions: AnalyticsOptions = {\n actionType: UserAction.Click,\n entity: EntityType.SpecialEvent,\n location: LocationContext.CalendarDay\n };\n\n function formatAnalyticDataDate(date: Date): string {\n return DateHelper.format(date, 'YYYY-MM-DD');\n }\n\n function getBgImageClassName(): string {\n const defaultClassName = `${props.className} ${className} `;\n\n const classes = [\n hardCodedEvent ? `${styles.hardcodedCover} position-absolute` : styles.backgroundImage,\n iconUrl ? 'my-auto' : styles.cover,\n isComingSoon ? styles.comingSoon : '',\n props.hasInitialized ? styles.noAnimation : '',\n props.isHovering ? `rounded-3` : '',\n props.isMultiEventDate ? styles.multiEventFilter : '',\n 'company' in displayedEvent.content ? 'rounded-circle' : ''\n ];\n\n return defaultClassName + classes.join(' ');\n }\n\n function isPastEvent(event: CalendarEvent<CalendarEventContent>) {\n if ('startDateTime' in event.content) {\n return DateHelper.isBefore(event.content.startDateTime, new Date());\n }\n return false;\n }\n\n function sortPastEvents(events: CalendarEvent<CalendarEventContent>[]) {\n return events.sort((a, b) => {\n if (!isPastEvent(a) && isPastEvent(b)) {\n return 1;\n }\n\n if (isPastEvent(a) && !isPastEvent(b)) {\n return -1;\n }\n\n return 0;\n });\n }\n\n const fadeTransitionStyle = { '--calendar-fade-duration': `${CALENDAR_FADE_TRANSITION_MS}ms` } as React.CSSProperties;\n\n return (\n <div\n style={fadeTransitionStyle}\n onClick={() => {\n if (isComingSoon)\n AnalyticsHelper.logUserAction(analyticsData, analyticsOptions);\n }}\n >\n <AppLink\n appLink={getAppLink()}\n analyticsOptions={analyticsOptions}\n analyticsData={analyticsData}\n className={`position-absolute top-0 start-0 h-100 w-100 text-shadow ${styles.wrapper}`}\n labelledBy='calendarEvent'\n >\n <div className={`${styles.tagWrap} p-1`}>\n {isComingSoon && (\n <ComingSoonTag className={`justify-content-center p-0 rounded-circle ${styles.tag} ${className}`} onlyIcon />\n )}\n </div>\n {!props.hideDay && (\n <CalendarCellDate\n date={props.date}\n notCurrentMonth={props.notCurrentMonth}\n className={`${styles.date} ${className}`}\n isHovering={props.isHovering}\n timezone={props.timezone}\n hasEvent\n />\n )}\n\n <div\n style={{ backgroundColor } }\n className={`position-absolute d-flex flex-column justify-content-end align-items-center text-white px-1 pt-2 pb-1 ${styles.eventCard} ${className} ${props.isHovering ? 'rounded-3' : ''} ${props.isMultiEventDate ? styles.multiEventFilter : ''} ${props.className} ${!props.isHovering && isPastEvent(displayedEvent) ? 'opacity-50' : ''}`}\n >\n {iconUrl && <LazyImage src={iconUrl} alt={displayedEvent.content.name} className={getBgImageClassName()} />}\n\n {coverUrl && !iconUrl && (\n <div\n style={{ backgroundImage: `url('${coverUrl}')` }}\n className={getBgImageClassName()}\n />\n )}\n\n {multiDayEvent && (\n <div className={`${styles.displayDate}`}>\n {SpecialEventHelper.getDisplayDate(displayedEvent.startDate, displayedEvent.endDate)}\n </div>\n )}\n <div className={`text-center ${styles.title} ${multiEvents ? 'mb-1' : 'mb-2'}`}>\n <p id='calendarEvent' className={`${props.responsiveText ? styles.titleText : ''} ${props.isHovering ? 'mb-0' : 'clamp-2'} h6`} title={displayedEvent.name}>{displayedEvent.name}</p>\n </div>\n\n {(multiEvents && sliderStep !== 0) && (\n <div className={`position-absolute bg-white rounded-circle ${styles.left}`}>\n <DivButton\n onClick={e => {\n e.stopPropagation();\n e.preventDefault();\n setSliderStep(s => s - 1);\n AnalyticsHelper.logUserAction({ date: formatAnalyticDataDate(props.date), action: 'previous', eventCount: props.eventsOnDay.length }, analyticsOptions);\n }}>\n <SvgContainer\n svg={ChevronLeftSvg}\n className={`d-inline-block svg-container text-dark ${styles.arrow}`}\n />\n </DivButton>\n </div>\n )}\n\n {multiEvents && sliderStep !== props.eventsOnDay.length - 1 && (\n <div className={`position-absolute bg-white rounded-circle ${styles.right}`}>\n <DivButton\n onClick={e => {\n e.stopPropagation();\n e.preventDefault();\n setSliderStep(s => s + 1);\n AnalyticsHelper.logUserAction({ date: formatAnalyticDataDate(props.date), action: 'next', eventCount: props.eventsOnDay.length }, analyticsOptions);\n }}>\n <SvgContainer\n svg={ChevronRightSvg}\n className={`d-inline-block svg-container text-dark ${styles.arrow}`}\n />\n </DivButton>\n </div>\n )}\n\n {multiEvents && (\n <div className={`d-flex ${styles.bottomBar} ${multiEvents ? '' : styles.bottomPlaceholder}`}>\n <SliderDots\n sliderStep={sliderStep}\n sliderLength={props.eventsOnDay.length}\n size='sm'\n className={`${props.isHovering ? 'mb-2' : 'mb-1'}`}\n onSliderDotClick={i => {\n setSliderStep(i);\n AnalyticsHelper.logUserAction({ date: formatAnalyticDataDate(props.date), action: 'jump', eventCount: props.eventsOnDay.length }, analyticsOptions);\n }}\n />\n </div>\n )}\n </div>\n </AppLink>\n </div>\n );\n}\n",":local {\n .cell {\n padding-bottom: 100%;\n }\n\n .multiEventCell {\n height: 100%;\n width: 100%;\n position: absolute;\n top: 0;\n left: 0;\n opacity: 0.25;\n z-index: 100;\n animation: fadeIn 0.8s ease-in;\n }\n @keyframes :local(fadeIn) {\n 0% {\n opacity: 0.1;\n }\n 20% {\n opacity: 0.25;\n }\n }\n}","import React from 'react';\n\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { CalendarCellDate } from 'libs/shared/apps/calendar/components/calendar-cell-date/CalendarCellDate';\nimport { CalendarEvents } from 'libs/shared/apps/calendar/components/calendar-events/CalendarEvents';\nimport { CalendarCellProps } from 'libs/shared/apps/calendar/interfaces/CalendarCellProps';\nimport { HoverableProps } from 'libs/shared/components/hover-to-portal-container/HoverToPortalContainer';\n\nimport styles from './calendar-day.module.scss';\n\ntype CalendarDayProps = HoverableProps & CalendarCellProps;\n\nexport function CalendarDay(props: CalendarDayProps) {\n const isMultiEventDate = React.useMemo(\n () =>\n props.hoveredEvent?.endDate &&\n !DateHelper.isSame(props.date, props.hoveredEvent?.startDate) &&\n DateHelper.isBetween(\n DateHelper.format(props.date, 'YYYY-MM-DD'),\n props.hoveredEvent?.startDate,\n props.hoveredEvent?.endDate\n ),\n [props.hoveredEvent]\n );\n const backgroundColor = props.hoveredEvent ? props.getBackgroundColor?.(props.hoveredEvent.content) : null;\n\n return (\n <div className={`${styles.cell} fw-semibold`}>\n {!props.hideDay && (\n <CalendarCellDate\n date={props.date}\n notCurrentMonth={props.notCurrentMonth}\n timezone={props.timezone}\n />\n )}\n {isMultiEventDate && !props.isHovering && (\n <div style={{ backgroundColor }} className={styles.multiEventCell}></div>\n )}\n {props.eventsOnDay?.length > 0 && (\n <CalendarEvents {...props}\n isMultiEventDate={isMultiEventDate && !props.isHovering}\n />\n )}\n </div>\n );\n}\n",":local {\n .dateItem {\n padding-bottom: 100%;\n\n .label {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n height: 20%;\n }\n\n .body {\n position: absolute;\n top: 45%;\n left: 50%;\n transform: translate(-50%, -50%);\n line-height: 1;\n width: 100%;\n \n &.bodyDay {\n font-size: 3.5em;\n }\n\n &.bodyRange {\n font-size: 2.5em;\n }\n\n &.bodyMonth {\n font-size: 3em;\n top: 50%;\n }\n }\n\n .month {\n position: absolute;\n bottom: 0.1em;\n left: 0;\n right: 0;\n font-size: 1.1em;\n font-weight: 600;\n }\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { CalendarTheme } from 'libs/shared/apps/calendar/interfaces/CalendarTheme';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport styles from './generic-calendar-date.module.scss';\n\nexport interface GenericCalendarDateProps {\n label?: string;\n body: {\n type: 'month' | 'range' | 'day',\n text: string\n };\n month?: string;\n getAppLink?: () => Core.AppLink;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n className?: string;\n theme?: CalendarTheme;\n}\n\nexport function GenericCalendarDate(props: GenericCalendarDateProps): JSX.Element {\n function getBodyClass(): string {\n switch (props.body.type) {\n case 'range':\n return styles.bodyRange;\n case 'day':\n return styles.bodyDay;\n case 'month':\n return styles.bodyMonth;\n }\n }\n\n return (\n <AppLink\n appLink={props.getAppLink?.()}\n className={`text-decoration-none text-center bg-white text-dark border border-3 ${props.theme?.border} rounded-3 d-block fw-semibold ${props.className}`}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n >\n <div className={`position-relative ${styles.dateItem}`}>\n <div className={`${props.theme?.background} py-1 ${styles.label} d-flex align-items-center justify-content-center`}>\n {props.label ? props.label : <>&nbsp;</>}\n </div>\n <div className={`${getBodyClass()} ${styles.body} my-2`}>\n {props.body.text}\n </div>\n <div className={`mb-0 ${styles.month}`}>\n {props.month}\n </div>\n </div>\n </AppLink>\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .dateItemContainer {\n font-size: 1rem;\n\n @media (max-width: 650px) and (min-width: #{map-get($grid-breakpoints, sm)}) {\n font-size: 0.8rem;\n }\n\n @media (max-width: 400px) {\n font-size: 0.8rem;\n }\n }\n\n .container {\n width: 16.666667%;\n aspect-ratio: 1 / 1;\n\n &:first-child {\n &::before {\n content: \"\";\n width: 5px;\n height: 100%;\n background-color: inherit;\n position: absolute;\n top: 0;\n left: -5px;\n border-top-left-radius: $border-radius-lg;\n border-bottom-left-radius: $border-radius-lg;\n }\n }\n\n &:last-child {\n &::before {\n content: \"\";\n width: 5px;\n height: 100%;\n background-color: inherit;\n position: absolute;\n top: 0;\n right: -5px;\n border-top-right-radius: $border-radius-lg;\n border-bottom-right-radius: $border-radius-lg;\n }\n }\n }\n\n @include media('<=xl') {\n .container {\n width: 20%;\n }\n }\n\n @include media('<=lg') {\n .container {\n width: 25%;\n }\n }\n\n @include media('<=md') {\n .container {\n width: 33.33333%;\n }\n }\n\n @include media('<=sm') {\n .container {\n width: 50%;\n }\n }\n}","import React from 'react';\n\nimport { AnalyticsOptions, EntityType, HashObject, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { CalendarDay } from 'libs/shared/apps/calendar/components/calendar-day/CalendarDay';\nimport { GenericCalendarDate } from 'libs/shared/apps/calendar/components/generic-calendar-date/GenericCalendarDate';\nimport { CalendarTheme } from 'libs/shared/apps/calendar/interfaces/CalendarTheme';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DateWidgetItem } from 'libs/shared/components/widgets/curated-widgets/templates/event-icon-sliding-list/EventIconSlidingListWidgetTemplate';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { HardCoded } from 'libs/shared/constants/HardCoded';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { CalendarEvent, CalendarEventContent, Classification, Livestream } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './special-event-widget-item.module.scss';\n\ninterface CalendarWidgetItem {\n theme?: CalendarTheme;\n analyticsData?: (content: CalendarEvent<CalendarEventContent>) => HashObject;\n analyticsOptions?: AnalyticsOptions;\n getBackgroundColor?: (content: CalendarEventContent) => string;\n getIconUrl?: (content: CalendarEventContent) => string;\n getHardCodedEvent?: (content: CalendarEventContent) => HashObject;\n}\n\nfunction CalendarWidgetItem<T extends CalendarEventContent>(\n props: CalendarWidgetItem & FixedWidgetItemProps<CalendarEvent<T>>\n) {\n return (\n <div className={`${styles.container} position-relative flex-shrink-0 ${props.theme.backgroundSecondary}`}>\n <AppLink\n appLink={props.getAppLink(props.data)}\n className='text-decoration-none my-2 mx-1 rounded-3 d-block position-relative'\n analyticsData={props.analyticsData(props.data)}\n analyticsOptions={props.analyticsOptions}\n >\n <CalendarDay\n isHovering={false}\n date={new Date(props.data.startDate)}\n notCurrentMonth={false}\n monthQuery={null}\n eventsOnDay={[props.data]}\n events={[props.data]}\n sliderStep={0}\n presentationId={props.data.content.presentationId}\n hoveredEvent={null}\n isMultiEventDate={false}\n className='rounded-3'\n getBackgroundColor={props.getBackgroundColor}\n getIconUrl={props.getIconUrl}\n hasInitialized\n responsiveText={false}\n hideDay\n />\n </AppLink>\n </div>\n );\n}\n\nexport type SpecialEventWidgetItemProps = CalendarWidgetItem &\nFixedWidgetItemProps<CalendarEvent<CalendarEventContent> | DateWidgetItem>;\n\nexport function SpecialEventWidgetItem(\n props: SpecialEventWidgetItemProps\n): JSX.Element {\n const { data, ...otherProps } = props;\n\n if (data.type === 'date-widget-item') {\n return (\n <div className={`${styles.container} ${styles.dateItemContainer} flex-shrink-0 ${props.theme.backgroundSecondary} position-relative`}>\n <GenericCalendarDate\n month={data.month}\n body={data.body}\n label={data.label}\n getAppLink={() => props.getAppLink(data)}\n analyticsData={{\n ...props.analyticsData,\n label: data.label,\n month: data.month,\n body: data.body.text\n }}\n analyticsOptions={{\n ...props.analyticsOptions,\n entity: EntityType.Url,\n actionType: UserAction.Click,\n location: LocationContext.EventIconSlidingListWidget\n }}\n className='my-2 mx-1'\n theme={props.theme}\n />\n </div>\n );\n }\n\n if (data.type === 'Livestream')\n return (\n <CalendarWidgetItem\n {...otherProps}\n data={data as CalendarEvent<Livestream>}\n getBackgroundColor={(content: Livestream) => content.company.metadata?.colour}\n getIconUrl={(content: Livestream) => content.company.logo?.url}\n analyticsData={(event: CalendarEvent<Livestream>) => ({\n ...props.analyticsData,\n id: event.content.id,\n name: event.content.name,\n startDateTime: event.content.startDateTime,\n endDateTime: event.content.endDateTime\n })}\n analyticsOptions={{\n ...props.analyticsOptions,\n entity: EntityType.SpecialEvent,\n actionType: UserAction.Click,\n location: LocationContext.EventIconSlidingListWidget\n }}\n />\n );\n\n function getIconUrl(classification: Classification): string {\n // in sliding widget we use icon from classification\n return ImageHelper.createUrl(classification.icon?.url, { size: ImageSize.Small });\n }\n \n function getHardCodedEvent(classification: Classification): HashObject {\n return HardCoded.SpecialEvents[classification.id as keyof typeof HardCoded.SpecialEvents];\n }\n\n return (\n <CalendarWidgetItem {...otherProps}\n data={data as CalendarEvent}\n getBackgroundColor={(classification: Classification) => classification.metadata?.backgroundColor}\n getIconUrl={(classification: Classification) => getIconUrl(classification)}\n getHardCodedEvent={getHardCodedEvent}\n analyticsData={(event: CalendarEvent<Classification>) => ({\n ...props.analyticsData,\n id: event.specialEventId,\n name: event.name,\n startDate: event.startDate,\n endDate: event.endDate,\n classificationId: event.content.id,\n classificationName: event.content.name\n })}\n analyticsOptions={{\n ...props.analyticsOptions,\n entity: EntityType.SpecialEvent,\n actionType: UserAction.Click,\n location: LocationContext.EventIconSlidingListWidget\n }}\n />\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { HashObject } from 'libs/analytics/interfaces';\n\nimport { CalendarTheme } from 'libs/shared/apps/calendar/interfaces/CalendarTheme';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget';\nimport { SpecialEventWidgetItem } from 'libs/shared/components/widgets/items/special-event-widget-item/SpecialEventWidgetItem';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { CalendarEvent, CalendarEventContent, CalendarEventContentType, Classification, Livestream, WidgetType } from 'libs/shared/interfaces';\n\nconst namespace = 'widgets.eventIconSlidingList';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface DateWidgetItem {\n label?: string;\n body: {\n type: 'month' | 'range' | 'day',\n text: string\n };\n month?: string;\n appLinkMonth: string;\n appLinkYear?: string;\n type: 'date-widget-item';\n}\n\ntype EventGroup = 'today' | 'tomorrow' | 'nextWeek' | 'thisMonth' | 'nextMonth' | 'later' | string;\n\ntype EventGroupingMap = Map<EventGroup, EventGrouping>;\n\ninterface EventGrouping {\n events: CalendarEvent<CalendarEventContent>[];\n label: string;\n body: DateWidgetItem['body'];\n monthLabel: string;\n startDate: string;\n endDate?: string;\n}\n\nfunction getWidgetItems(\n content: CalendarEvent<CalendarEventContent>[] | Livestream[],\n contentType?: CalendarEventContentType\n): (CalendarEvent<CalendarEventContent> | DateWidgetItem)[] {\n let calendarEvents: CalendarEvent<CalendarEventContent>[];\n \n switch (contentType) {\n case CalendarEventContentType.Livestream: {\n calendarEvents = getCalendarEventLivestreams(content as Livestream[]);\n break;\n }\n default: {\n calendarEvents = content as CalendarEvent[];\n }\n }\n\n // We want to process the events in the order that they occur in.\n const rawOrderedEvents = [...calendarEvents].sort((a, b) => a.startDate.localeCompare(b.startDate));\n\n const now = new Date();\n const today = DateHelper.format(now, 'YYYY-MM-DD');\n const tomorrow = DateHelper.format(DateHelper.add(today, 1, 'day'), 'YYYY-MM-DD');\n\n /**\n * Get next Monday's date. We add 8 days to the start of the week because\n * moment's start day is Sunday instead of Monday\n */\n const nextWeekStart = DateHelper.format(DateHelper.add(DateHelper.startOf(now, 'week'), 8, 'days'), 'YYYY-MM-DD');\n const nextWeekEnd = DateHelper.format(DateHelper.add(nextWeekStart, 6, 'days'), 'YYYY-MM-DD');\n\n const thisMonthStart = DateHelper.format(DateHelper.startOf(now, 'month'), 'YYYY-MM-DD');\n const thisMonthEnd = DateHelper.format(DateHelper.endOf(now, 'month'), 'YYYY-MM-DD');\n\n const nextMonthStart = DateHelper.format(DateHelper.startOf(DateHelper.add(now, 1, 'month'), 'month'), 'YYYY-MM-DD');\n const nextMonthEnd = DateHelper.format(DateHelper.endOf(DateHelper.add(now, 1, 'month'), 'month'), 'YYYY-MM-DD');\n\n const laterMonthStart = DateHelper.format(DateHelper.startOf(DateHelper.add(now, 2, 'month'), 'month'), 'YYYY-MM-DD');\n const laterMonthEnd = DateHelper.format(DateHelper.add(now, 1, 'year'), 'YYYY-MM-DD');\n\n // Using a map for this because we want the event ordering to be preserved\n const eventGroupingMap: EventGroupingMap = new Map();\n\n type EventRecord = {\n group: EventGroup,\n startDate: string,\n endDate: string,\n body: DateWidgetItem['body'],\n monthLabel: string,\n event: CalendarEvent<CalendarEventContent>,\n label: string\n };\n\n function getCalendarEventLivestreams(livestreams: Livestream[]): CalendarEvent<Livestream>[] {\n return livestreams.map((livestream: Livestream) => ({\n id: livestream.id,\n startDate: DateHelper.format(livestream.startDateTime, 'YYYY-MM-DD'),\n type: 'Livestream',\n name: livestream.name,\n description: livestream.description,\n content: livestream\n }));\n }\n\n function addEventToGroup(eventRecord: EventRecord): void {\n if (!eventGroupingMap.has(eventRecord.group)) {\n eventGroupingMap.set(eventRecord.group, {\n events: [eventRecord.event],\n label: eventRecord.label,\n body: eventRecord.body,\n monthLabel: eventRecord.monthLabel,\n startDate: eventRecord.startDate,\n endDate: eventRecord.endDate\n });\n return;\n }\n\n const currentMergedEvent = eventGroupingMap.get(eventRecord.group);\n eventGroupingMap.set(eventRecord.group, {\n ...currentMergedEvent,\n events: [ ...currentMergedEvent.events, eventRecord.event ]\n });\n }\n\n /**\n * Loop through every event, and identify which group it belongs to.\n */\n rawOrderedEvents.forEach(event => {\n // Today's events\n if (event.startDate <= today) {\n addEventToGroup({\n group: 'today',\n startDate: today,\n endDate: null,\n event,\n body: {\n text: DateHelper.format(today, 'DD'),\n type: 'day'\n },\n monthLabel: DateHelper.format(today, 'MMMM'),\n label: getPhrase('today')\n });\n return;\n }\n\n // Tomorrow's events\n if (event.startDate === tomorrow) {\n addEventToGroup({\n group: 'tomorrow',\n startDate: tomorrow,\n endDate: null,\n event,\n body: {\n text: DateHelper.format(tomorrow, 'DD'),\n type: 'day'\n },\n monthLabel: DateHelper.format(event.startDate, 'MMMM'),\n label: getPhrase('tomorrow')\n });\n return;\n }\n\n // This week's events, added separately for each day\n if (event.startDate > tomorrow && event.startDate < nextWeekStart) {\n const day = DateHelper.format(event.startDate, 'dddd');\n addEventToGroup({\n group: day,\n startDate: event.startDate,\n endDate: event.endDate,\n event,\n monthLabel: DateHelper.format(event.startDate, 'MMMM'),\n body: {\n text: DateHelper.format(event.startDate, 'DD'),\n type: 'day'\n },\n label: day\n });\n return;\n }\n\n // Next week's events\n if (event.startDate >= nextWeekStart && event.startDate <= nextWeekEnd) {\n addEventToGroup({\n group: 'nextWeek',\n startDate: nextWeekStart,\n endDate: nextWeekEnd,\n event,\n // Next week may either be in the same month or in different months\n monthLabel: DateHelper.isSame(nextWeekStart, nextWeekEnd, 'month') ?\n DateHelper.format(nextWeekStart, 'MMMM') :\n `${DateHelper.format(nextWeekStart, 'MMM')} - ${DateHelper.format(nextWeekEnd, 'MMM')}`,\n body: {\n text: `${DateHelper.format(nextWeekStart, 'DD')}-${DateHelper.format(nextWeekEnd, 'DD')}`,\n type: 'range'\n },\n label: getPhrase('nextWeek')\n });\n\n return;\n }\n\n // This month's events\n if (event.startDate >= thisMonthStart && event.startDate <= thisMonthEnd) {\n addEventToGroup({\n group: 'thisMonth',\n startDate: thisMonthStart,\n endDate: thisMonthEnd,\n event,\n // We don't display the month label for events where the date card body only displays the month name\n monthLabel: '',\n body: {\n text: DateHelper.format(event.startDate, 'MMM'),\n type: 'month'\n },\n label: getPhrase('thisMonth')\n });\n return;\n }\n\n // Next month's events\n if (event.startDate >= nextMonthStart && event.startDate <= nextMonthEnd) {\n addEventToGroup({\n group: 'nextMonth',\n startDate: nextMonthStart,\n endDate: nextMonthEnd,\n event,\n // We don't display the month label for events where the date card body only displays the month name\n monthLabel: '',\n body: {\n text: DateHelper.format(event.startDate, 'MMM'),\n type: 'month'\n },\n label: getPhrase('nextMonth')\n });\n return;\n }\n\n // Later events\n if (event.startDate >= laterMonthStart && event.startDate <= laterMonthEnd) {\n addEventToGroup({\n group: 'later',\n startDate: laterMonthStart,\n endDate: laterMonthEnd,\n event,\n // We don't display the month label for events where the date card body only displays the month name\n monthLabel: '',\n body: {\n text: DateHelper.format(event.startDate, 'MMM'),\n type: 'month'\n },\n label: getPhrase('later')\n });\n }\n });\n\n const mergedEvents: (CalendarEvent<CalendarEventContent> | DateWidgetItem)[] = [];\n\n for (const eventGrouping of eventGroupingMap.values()) {\n const dateItem: DateWidgetItem = {\n label: eventGrouping.label,\n body: eventGrouping.body,\n month: eventGrouping.monthLabel,\n appLinkMonth: DateHelper.format(eventGrouping.startDate, 'MMMM'),\n appLinkYear: DateHelper.format(eventGrouping.startDate, 'YYYY'),\n type: 'date-widget-item'\n };\n\n mergedEvents.push(dateItem);\n\n eventGrouping.events.forEach(event => {\n mergedEvents.push(event);\n });\n }\n\n return mergedEvents;\n}\n\nexport interface EventIconSlidingListWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n contentType: CalendarEventContentType;\n content: CalendarEvent<CalendarEventContent>[];\n appLinks: {\n calendar: () => Core.AppLink,\n calendarMonth: (month: string, year?: string) => Core.AppLink,\n livestream: (livestream: Livestream) => Core.AppLink,\n classification: (classification: Classification | null) => Core.AppLink\n };\n analyticsData?: HashObject;\n \n widgetTypeId: WidgetTypeId;\n isPreviewing: boolean;\n isUpselling?: boolean;\n}\n\nexport function EventIconSlidingListWidgetTemplate(\n props: EventIconSlidingListWidgetTemplateProps\n): JSX.Element {\n const widgetItems = React.useMemo(() => getWidgetItems(props.content, props.contentType), [props.content]);\n const theme = getTheme(props.contentType);\n\n function getTheme(contentType: CalendarEventContentType): CalendarTheme {\n switch (contentType) {\n case CalendarEventContentType.Livestream:\n return {\n background: 'bg-light-green',\n border: 'border-light-green',\n backgroundSecondary: 'bg-light-blue'\n };\n default:\n return {\n background: 'bg-light-blue',\n border: 'border-light-blue',\n backgroundSecondary: 'bg-light-yellow'\n };\n }\n }\n\n return (\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n appLink={props.appLinks?.calendar?.()}\n type={WidgetType.Row}\n contents={WidgetContents.SpecialEvents}\n getChildAppLink={(item: CalendarEvent<CalendarEventContent> | DateWidgetItem) => {\n if (item.type === 'date-widget-item')\n return props.appLinks?.calendarMonth?.(item.appLinkMonth, item.appLinkYear);\n\n if (item.type === 'Livestream')\n return props.appLinks?.livestream?.(item.content as Livestream);\n\n return props.appLinks?.classification?.(item.content as Classification);\n }}\n collection={widgetItems}\n childComponent={SpecialEventWidgetItem}\n extraChildComponentProps={{ theme }}\n analyticsData={props.analyticsData}\n isPreviewing={props.isPreviewing}\n widgetTypeId={props.widgetTypeId}\n isUpselling={props.isUpselling}\n prefetched\n />\n );\n}\n","import React from 'react';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nfunction useGetTotalItems(): number {\n const breakpoints = useBreakpoints();\n\n if (breakpoints.xs)\n return 2;\n\n if (breakpoints.sm)\n return 3;\n\n if (breakpoints.md)\n return 4;\n\n if (breakpoints.lg)\n return 5;\n\n if (breakpoints.xl || breakpoints.xxl)\n return 6;\n}\n\nexport function PartialEventIconSlidingListWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n const totalItems = useGetTotalItems();\n\n return (\n <>\n <PartialWidgetHeader\n name={props.name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n hideDescription\n />\n <div className='row g-0 mx-n1'>\n {Array(totalItems).fill(null).map((_, index) => (\n <div className='col px-1' key={index}>\n <div className='partial-loading-background rounded-3' style={{ paddingBottom: '100%' }} />\n </div>\n ))}\n </div>\n </>\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .hovering {\n z-index: 10;\n border-radius: $border-radius-lg;\n position: relative;\n }\n\n .transition {\n transition: transform .2s ease;\n }\n\n .rowWidth {\n width: 25%;\n }\n\n .largeRowWidth {\n width: 33.33333%;\n }\n\n @include media('<=xl') {\n .rowWidth {\n width: 33.33333%;\n }\n }\n\n @include media('<=md') {\n .rowWidth,\n .largeRowWidth {\n width: 50%;\n }\n }\n\n @include media('<=sm') {\n .rowWidth,\n .largeRowWidth {\n width: 100%;\n }\n }\n}","import React from 'react';\n\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { useHoverIntent } from 'libs/shared/hooks/UseHover';\nimport { PresentationAudience, VideoTypes, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\n\nimport styles from './video-widget-item.module.scss';\n\nexport interface VideoWidgetItemProps extends FixedWidgetItemProps<VideoTypes> {\n presentationAudiences?: PresentationAudience[];\n commonVideoProps: CommonVideoProps;\n}\n\nexport const VideoWidgetItem = React.memo(function(props: VideoWidgetItemProps): JSX.Element {\n const { data: video, context, thumbnailSize, preloadImage } = props;\n\n const getScaleSize = () => {\n if (context?.type === WidgetType.LargeRow)\n return 1.1;\n\n return 1.15;\n };\n\n const [ ref, isHovering ] = useHoverIntent<HTMLDivElement>({\n className: styles.hovering,\n style: {\n transform: `scale(${getScaleSize()})`\n }\n });\n\n React.useEffect(() => {\n props.onHover(isHovering);\n }, [isHovering]);\n\n let width = styles.rowWidth;\n\n if (context.type === WidgetType.LargeRow)\n width = styles.largeRowWidth;\n\n return (\n <div ref={ref} className={`px-1 flex-shrink-0 position-relative ${width} ${styles.transition}`}>\n <VideoThumbnail\n video={props.data}\n type='expandable'\n appLink={props.getAppLink(video)}\n imageOptions={{ size: thumbnailSize }}\n preload={preloadImage}\n hovering={isHovering}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n commonVideoProps={props.commonVideoProps}\n />\n </div>\n );\n});\n",":local {\n .banner {\n padding: $spacer;\n background-position: center;\n background-size: 100%;\n border-top-left-radius: $border-radius;\n border-top-right-radius: $border-radius;\n background-color: $gray-200;\n\n &:hover {\n opacity: 0.95;\n }\n }\n .partialBanner {\n height: 3.7rem;\n }\n}","import React from 'react';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { VideoWidgetItem } from 'libs/shared/components/widgets/items/video-widget-item/v1/VideoWidgetItem';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { CuratedDashboardAppLink, Presentation, Series, Video, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './featured-sliding-heading.module.scss';\n\nexport interface FeaturedThumbnailSlidingListWidgetTemplateProps {\n id: string;\n name: string;\n imageCdnUrl: string;\n content: Video[];\n presentation: Presentation;\n metadata: {\n imageId: string,\n appLink: CuratedDashboardAppLink\n };\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink,\n series: (series: Series) => Core.AppLink,\n allTopics: (presentationId?: string) => Core.AppLink,\n latestReleases: () => Core.AppLink\n };\n showHighlight?: boolean;\n analyticsData?: HashObject;\n \n limitTotalItems?: boolean;\n\n commonVideoProps: CommonVideoProps;\n}\n\nexport function FeaturedThumbnailSlidingListWidgetTemplate(\n props: FeaturedThumbnailSlidingListWidgetTemplateProps\n): JSX.Element {\n const widgetAppLink = WidgetHelper.getCustomAppLink(props);\n\n const bannerBackgroundUrl = (props?.imageCdnUrl && props.metadata?.imageId) ? ImageHelper.getUrlById(\n props.imageCdnUrl,\n ImageType.Banners,\n props.metadata.imageId,\n ImageSize.Medium\n ) : '';\n\n return (\n <div>\n <AppLink\n appLink={widgetAppLink}\n style={bannerBackgroundUrl ? { backgroundImage: `url(${bannerBackgroundUrl})` } : {}}\n className={`${styles.banner} mb-2 d-flex justify-content-between no-decoration ${!props.name ? styles.partialBanner : ''}`}\n analyticsData={{\n url: AppLinkHelper.getHref(widgetAppLink)\n }}\n analyticsOptions={{\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.ContentUpdatesBanner\n }}\n >\n <h2 className='h4 text-white mb-0'>\n {props.name}\n </h2>\n </AppLink>\n <FixedWidget\n id={props.id}\n type={WidgetType.Row}\n contents={WidgetContents.Videos}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n collection={props.content}\n childComponent={VideoWidgetItem}\n extraChildComponentProps={{\n commonVideoProps: props.commonVideoProps\n }}\n hideBleedingContent={props.showHighlight}\n analyticsData={props.analyticsData}\n limitTotalItems={props.limitTotalItems}\n prefetched\n hideName\n />\n </div>\n );\n}\n","import React from 'react';\n\nimport { PartialFixedWidget } from 'libs/shared/components/widgets/fixed-widget';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nimport styles from '../featured-sliding-heading.module.scss';\n\nexport function PartialFeaturedThumbnailSlidingListWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n return (\n <div>\n <div className={`banner rounded-3 position-relative partial-loading-background ${styles.banner} ${styles.partialBanner} mb-1 `}></div>\n <PartialFixedWidget\n name={props.name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n hideDescription\n hideHeading\n />\n </div>\n );\n}\n","export enum FeedbackOption {\n SUGGEST_IMPROVEMENT = 'suggestImprovement',\n REPORT_BUG = 'reportBug',\n REQUEST_VIDEO = 'requestVideo',\n REQUEST_LIVESTREAM = 'requestLivestream',\n GIVE_PRAISE = 'givePraise',\n RAISE_ISSUE = 'raiseIssue',\n OTHER = 'other'\n}\n","import { FeedbackOption } from 'libs/shared/views/feedback/enums/FeedbackOption';\n\ninterface FeedbackWidgetContent {\n text: string;\n ctaText: string;\n}\n\n/**\n * Only REQUEST_VIDEO is wired up on the widget for now.\n * Uncomment an option below once its copy is confirmed and the widget should support it.\n */\nexport const FEEDBACK_WIDGET_CONTENT: Partial<Record<FeedbackOption, FeedbackWidgetContent>> = {\n [FeedbackOption.REQUEST_VIDEO]: {\n text: 'Did you find what you were looking for?',\n ctaText: 'Request a video'\n }\n\n // [FeedbackOption.REQUEST_LIVESTREAM]: {\n // text: '',\n // ctaText: ''\n // },\n // [FeedbackOption.SUGGEST_IMPROVEMENT]: {\n // text: '',\n // ctaText: ''\n // },\n // [FeedbackOption.REPORT_BUG]: {\n // text: '',\n // ctaText: ''\n // },\n // [FeedbackOption.GIVE_PRAISE]: {\n // text: '',\n // ctaText: ''\n // },\n // [FeedbackOption.RAISE_ISSUE]: {\n // text: '',\n // ctaText: ''\n // },\n // [FeedbackOption.OTHER]: {\n // text: '',\n // ctaText: ''\n // }\n};\n",":local {\n .icon {\n height: 2rem;\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { FeedbackOption } from 'libs/shared/views/feedback/enums/FeedbackOption';\n\nimport { FEEDBACK_WIDGET_CONTENT } from './FeedbackWidgetContent';\n\nimport styles from './feedback-widget-template.module.scss';\n\nexport interface FeedbackWidgetTemplateProps {\n name?: string;\n content: HashObject[]; // We need to have content on every widget template\n metadata?: {\n feedbackType?: FeedbackOption\n };\n appLinks?: {\n giveFeedback?: (option: FeedbackOption) => Core.AppLink\n };\n imageUrls: {\n telescope: string\n };\n}\n\nexport function FeedbackWidgetTemplate(props: FeedbackWidgetTemplateProps): JSX.Element {\n const feedbackType = props.metadata?.feedbackType ?? FeedbackOption.REQUEST_VIDEO;\n const feedbackContent = FEEDBACK_WIDGET_CONTENT[feedbackType];\n\n return (\n <div className='d-flex align-items-center justify-content-center flex-wrap gap-3 p-3'>\n <div className='d-flex align-items-center gap-2'>\n <img src={props.imageUrls?.telescope} className={`img-fluid ${styles.icon}`} />\n <span>{props.name || feedbackContent?.text}</span>\n </div>\n\n <AppLink\n appLink={props.appLinks?.giveFeedback?.(feedbackType)}\n className='btn btn-outline-dark'\n >\n {feedbackContent?.ctaText}\n </AppLink>\n </div>\n );\n}\n","import React from 'react';\n\nexport function PartialFeedbackWidgetTemplate(): JSX.Element {\n return (\n <div className='d-flex align-items-center justify-content-between flex-wrap gap-3 p-3 bg-light rounded-3'>\n <div className='partial-loading-background' style={{ width: '18rem', height: '1.5rem', maxWidth: '60%' }} />\n <div className='partial-loading-background' style={{ width: '9rem', height: '2.5rem', borderRadius: '0.375rem' }} />\n </div>\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .rowWidth {\n width: 20%;\n }\n\n @include media('<=xl') {\n .rowWidth {\n width: 25%;\n }\n }\n\n @include media('<=md') {\n .rowWidth {\n width: 33.33%;\n }\n }\n}","import React from 'react';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { SearchSvg } from 'libs/shared/images/svg/actions/SearchSvg';\nimport { Rating } from 'libs/shared/interfaces';\nimport { VideoDetailsHelper } from 'libs/shared/utils/VideoDetailsHelper';\n\nimport styles from './rating-widget-item.module.scss';\n\nexport interface RatingWidgetItemProps extends FixedWidgetItemProps<Rating> {\n ratingsLength: number;\n}\n\nexport function RatingWidgetItem(props: RatingWidgetItemProps): JSX.Element {\n function getRatingClasses(): string {\n if (props.ratingsLength > 4)\n return styles.rowWidth;\n\n if (props.ratingsLength === 4)\n return 'col-4 col-md-3';\n\n return 'col';\n }\n \n return (\n <AppLink\n appLink={props.getAppLink(props.data)}\n className={`${getRatingClasses()} position-relative flex-shrink-0 px-1 mt-1 text-decoration-none`}\n analyticsData={{\n ...props.analyticsData,\n code: props.data.code,\n id: props.data.id\n }}\n analyticsOptions={{\n ...props.analyticsOptions,\n entity: EntityType.Rating,\n actionType: UserAction.Click,\n location: LocationContext.FilterSlidingPillListSmallWidget\n }}\n >\n <div className={`${VideoDetailsHelper.mapRatingToClass(props.data.value)} py-3 rounded-3`}>\n <div className='d-flex justify-content-center align-items-center text-white text-shadow'>\n <SvgContainer svg={SearchSvg} size={SvgContainerSize.Medium} />\n <h4 className='mb-0'>{props.data.code}</h4>\n </div>\n </div>\n </AppLink>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { RatingWidgetItem } from 'libs/shared/components/widgets/items/rating-widget-item/RatingWidgetItem';\nimport { PresentationLearningLevel } from 'libs/shared/enums/PresentationLearningLevel';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Presentation, Rating, WidgetType } from 'libs/shared/interfaces';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nfunction getMaxRatingValue(presentation: Presentation): number {\n const learningLevel = TopicsHelper.getMappedPresentationLevel(presentation.learningLevel);\n \n switch (learningLevel) {\n /**\n * Primary should only show up to PG\n */\n case PresentationLearningLevel.Level_1:\n return 64;\n\n /**\n * Older levels should filter out high ratings such as R18+\n */\n default:\n return 128;\n }\n}\n\nexport interface FilterSlidingPillListSmallWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n presentation: Presentation;\n content: Rating[];\n appLinks: {\n rating: (rating: Rating, ratings: Rating[]) => Core.AppLink\n };\n analyticsData?: HashObject;\n \n}\n\nexport function FilterSlidingPillListSmallWidgetTemplate(\n props: FilterSlidingPillListSmallWidgetTemplateProps\n): JSX.Element {\n const maxRating = getMaxRatingValue(props.presentation);\n const ratings = props.content.filter(rating => rating.code && rating.value < maxRating && rating.code !== 'E');\n \n return (\n <>\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Ratings}\n getChildAppLink={rating => props.appLinks?.rating?.(rating, ratings)}\n collection={ratings}\n childComponent={RatingWidgetItem}\n analyticsData={props.analyticsData}\n extraChildComponentProps={{ ratingsLength: ratings.length }}\n prefetched\n />\n </>\n );\n}\n","import React from 'react';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nexport function PartialFilterSlidingPillListSmall(props: PartialWidgetTemplateProps): JSX.Element {\n const breakpoints = useBreakpoints();\n\n function getItemCount(): number {\n if (breakpoints.xs || breakpoints.sm)\n return 3;\n\n if (breakpoints.md || breakpoints.lg)\n return 4;\n\n return 5;\n }\n\n return (\n <>\n <PartialWidgetHeader\n name={props.name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n hideDescription\n />\n <div className='row mx-n1'>\n {[...Array(getItemCount())].map((_, index) => (\n <div key={index} className='col px-1'>\n <div className='d-inline-block w-100 partial-loading-background rounded-3 pb-5' />\n </div>\n ))}\n </div>\n </>\n );\n}\n","import React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\nexport interface HeadingWidgetTemplateProps {\n name: string;\n description: string;\n content: HashObject[]; // We need to have content on every widget template\n}\n\nexport function HeadingWidgetTemplate(props: HeadingWidgetTemplateProps): JSX.Element {\n return (\n <div className='curated-widget-header'>\n <h2 className='curated-widget-heading'>{props.name}</h2>\n {!!props.description && (\n <p className='description curated-widget-description'>{props.description}</p>\n )}\n </div>\n );\n}\n","import React from 'react';\n\nexport function PartialHeadingWidgetTemplate(): JSX.Element {\n return (\n <div className='curated-widget-header'>\n <div className='partial-loading-background curated-widget-heading' style={{ height: '2.099625rem', width: '16.5rem', maxWidth: '80%' }}>\n &nbsp;\n </div>\n <div className='partial-loading-background description curated-widget-description' style={{ width: '21rem', height: '1.3125rem', maxWidth: '90%' }}>\n &nbsp;\n </div>\n </div>\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .banner {\n padding-bottom: $cv-banner-padding-bottom;\n }\n\n .bannerContent {\n position: absolute;\n top: map-get($spacers, 3);\n left: map-get($spacers, 3);\n max-width: 18rem;\n }\n\n .cta {\n position: absolute;\n bottom: map-get($spacers, 3);\n left: map-get($spacers, 3);\n max-width: 18rem;\n }\n\n @include media('<=lg') {\n .bannerContent {\n max-width: 16rem;\n }\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Classification, WidgetCta } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './hero-banner.module.scss';\n\nexport interface HeroBannerWidgetTemplateProps {\n name: string;\n content: Classification[];\n analyticsData?: HashObject;\n\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink\n };\n\n metadata: {\n cta: WidgetCta\n };\n}\n\nexport function HeroBannerWidgetTemplate(props: HeroBannerWidgetTemplateProps): JSX.Element {\n const breakpoints = useBreakpoints();\n\n function getBannerUrl(): string {\n const entity = ArrayHelper.first(props.content);\n\n return ImageHelper.createBannerUrl(entity.banner, {\n fallbackBaseUrl: '',\n fallbackCategoryName: entity.name,\n type: ImageType.Banners\n }, { size: ImageSize.Large });\n }\n\n function getAppLink(): Core.AppLink {\n const entity = ArrayHelper.first(props.content);\n return props.appLinks?.classification?.(entity);\n }\n\n function getHeadingClass(): string {\n let className = 'text-white clamp-2';\n\n if (breakpoints.xs || breakpoints.sm)\n className += ' h4';\n else if (breakpoints.md)\n className += ' h3';\n else\n className += ' h2';\n\n className += ' text-white';\n\n return className;\n }\n\n const analyticsOptions = {\n location: LocationContext.Classification,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Banner\n };\n\n return (\n <AppLink\n appLink={getAppLink()}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <div className={`banner rounded-3 position-relative ${styles.banner}`} style={{ backgroundImage: `url('${getBannerUrl()}')` }}>\n {props.name &&\n <div className={styles.bannerContent}>\n <p className={getHeadingClass()}>\n {props.name}\n </p>\n </div>\n }\n\n {!!props.metadata?.cta?.text && (\n <div className={styles.cta}>\n <div className='btn btn-outline-dark text-nowrap'>\n {props.metadata?.cta?.text}\n </div>\n </div>\n )}\n </div>\n </AppLink>\n );\n}\n","import React from 'react';\n\nimport styles from '../hero-banner.module.scss';\n\nexport function PartialHeroBannerWidgetTemplate(): JSX.Element {\n return (\n <div className={`banner rounded-3 position-relative ${styles.banner}`}>\n <div className={`${styles.bannerContent}`} />\n </div>\n );\n}\n","import React from 'react';\n\nexport function GridSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M5.5 5a.5.5 0 0 0-.5.5V10a.5.5 0 0 0 .5.5H10a.5.5 0 0 0 .5-.5V5.5A.5.5 0 0 0 10 5zM4 5.5A1.5 1.5 0 0 1 5.5 4H10a1.5 1.5 0 0 1 1.5 1.5V10a1.5 1.5 0 0 1-1.5 1.5H5.5A1.5 1.5 0 0 1 4 10zM14 5a.5.5 0 0 0-.5.5V10a.5.5 0 0 0 .5.5h4.5a.5.5 0 0 0 .5-.5V5.5a.5.5 0 0 0-.5-.5zm-1.5.5A1.5 1.5 0 0 1 14 4h4.5A1.5 1.5 0 0 1 20 5.5V10a1.5 1.5 0 0 1-1.5 1.5H14a1.5 1.5 0 0 1-1.5-1.5zM4 14a1.5 1.5 0 0 1 1.5-1.5H10a1.5 1.5 0 0 1 1.5 1.5v4.5A1.5 1.5 0 0 1 10 20H5.5A1.5 1.5 0 0 1 4 18.5zm1.5-.5a.5.5 0 0 0-.5.5v4.5a.5.5 0 0 0 .5.5H10a.5.5 0 0 0 .5-.5V14a.5.5 0 0 0-.5-.5zm7 .5a1.5 1.5 0 0 1 1.5-1.5h4.5A1.5 1.5 0 0 1 20 14v4.5a1.5 1.5 0 0 1-1.5 1.5H14a1.5 1.5 0 0 1-1.5-1.5zm1.5-.5a.5.5 0 0 0-.5.5v4.5a.5.5 0 0 0 .5.5h4.5a.5.5 0 0 0 .5-.5V14a.5.5 0 0 0-.5-.5z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function RectanglesSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M4 6.4C4 5.627 4.632 5 5.412 5h13.176C19.368 5 20 5.627 20 6.4v3.733c0 .774-.632 1.4-1.412 1.4H5.412c-.78 0-1.412-.626-1.412-1.4zm1.412-.467c-.26 0-.47.21-.47.467v3.733c0 .258.21.467.47.467h13.176c.26 0 .47-.209.47-.467V6.4a.47.47 0 0 0-.47-.467zM4 13.867c0-.774.632-1.4 1.412-1.4h13.176c.78 0 1.412.627 1.412 1.4V17.6c0 .773-.632 1.4-1.412 1.4H5.412C4.632 19 4 18.373 4 17.6zm1.412-.467c-.26 0-.47.209-.47.467V17.6c0 .258.21.467.47.467h13.176c.26 0 .47-.21.47-.467v-3.733a.47.47 0 0 0-.47-.467z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function SparkleSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n fillRule='evenodd'\n d='M16.465 11.636a.469.469 0 0 1-.897-.003 5.11 5.11 0 0 0-3.204-3.202.469.469 0 0 1 .002-.897 5.11 5.11 0 0 0 3.203-3.203.469.469 0 0 1 .897.002 5.11 5.11 0 0 0 3.203 3.202.469.469 0 0 1-.002.897 5.11 5.11 0 0 0-3.202 3.204m-1.46-4.664a6 6 0 0 1-1.343 1.011c.492.273.946.614 1.344 1.011.397.398.738.852 1.01 1.344a6 6 0 0 1 1.012-1.344 6 6 0 0 1 1.344-1.01 6 6 0 0 1-1.344-1.012 6 6 0 0 1-1.011-1.344 6 6 0 0 1-1.011 1.344m-2.104 7.345.754.25a.469.469 0 0 1 0 .89l-.754.251a5.11 5.11 0 0 0-3.218 3.218l-.25.754a.469.469 0 0 1-.89 0l-.251-.754a5.11 5.11 0 0 0-3.218-3.218l-.754-.25a.469.469 0 0 1 0-.89l.754-.251a5.11 5.11 0 0 0 3.218-3.218l.25-.754a.469.469 0 0 1 .89 0l.251.754a5.11 5.11 0 0 0 3.218 3.218m-3.913 3.81a6.1 6.1 0 0 1 1.261-1.852 6.1 6.1 0 0 1 1.852-1.262 6.1 6.1 0 0 1-1.852-1.262 6.1 6.1 0 0 1-1.262-1.852 6.1 6.1 0 0 1-1.261 1.852 6.1 6.1 0 0 1-1.852 1.261c.688.301 1.32.732 1.852 1.262a6.1 6.1 0 0 1 1.262 1.852M4.33 6.924a2.72 2.72 0 0 1 1.698 1.697.469.469 0 0 0 .897.002 2.72 2.72 0 0 1 1.697-1.698.469.469 0 0 0 .002-.897 2.72 2.72 0 0 1-1.698-1.697.469.469 0 0 0-.897-.002 2.72 2.72 0 0 1-1.697 1.698.469.469 0 0 0-.002.897m2.147-1.412c.258.378.586.706.964.964a3.7 3.7 0 0 0-.964.964 3.7 3.7 0 0 0-.964-.964 3.7 3.7 0 0 0 .964-.964m11.495 9.865a2.72 2.72 0 0 0 1.698 1.697.47.47 0 0 1-.002.897 2.72 2.72 0 0 0-1.697 1.698.469.469 0 0 1-.897-.002 2.72 2.72 0 0 0-1.698-1.697.469.469 0 0 1 .002-.897 2.72 2.72 0 0 0 1.697-1.698.47.47 0 0 1 .897.002m-1.413 2.145c.378.258.706.586.964.964.258-.378.586-.706.964-.964a3.7 3.7 0 0 1-.964-.964 3.7 3.7 0 0 1-.964.964'\n clipRule='evenodd'\n />\n </svg>\n );\n}\n","import { NewWindowSvg } from '../images/svg/actions/NewWindowSvg';\nimport { GridSvg } from '../images/svg/objects/GridSvg';\nimport { RectanglesSvg } from '../images/svg/objects/RectanglesSvg';\nimport { SparkleSvg } from '../images/svg/objects/SparkleSvg';\n\nexport enum HeadingSize {\n H1 = 'h1',\n H2 = 'h2',\n H3 = 'h3',\n H4 = 'h4',\n H5 = 'h5',\n H6 = 'h6'\n}\n\nexport enum HeadingColor {\n Dark = 'dark',\n White = 'white'\n}\n\nexport enum ButtonIcon {\n NewWindow = 'new-window',\n TopicDirectory = 'topic-directory',\n TopicNewReleases = 'topic-new-releases',\n CuratedTopic = 'curated-topic'\n}\n\nexport const WIDGET_THEME = {\n HEADING: {\n SIZES: [\n { value: HeadingSize.H1, name: 'Heading 1' },\n { value: HeadingSize.H2, name: 'Heading 2' },\n { value: HeadingSize.H3, name: 'Heading 3' },\n { value: HeadingSize.H4, name: 'Heading 4' },\n { value: HeadingSize.H5, name: 'Heading 5' },\n { value: HeadingSize.H6, name: 'Heading 6' }\n ],\n COLOR: [\n { value: HeadingColor.Dark, name: 'Dark' },\n { value: HeadingColor.White, name: 'White' }\n ]\n },\n BUTTON: {\n ICONS: [\n { value: ButtonIcon.NewWindow, name: 'New Window' }\n ]\n }\n};\n\nexport const BUTTON_ICON_MAP: Record<ButtonIcon, any> = {\n [ButtonIcon.NewWindow]: NewWindowSvg,\n [ButtonIcon.TopicDirectory]: GridSvg,\n [ButtonIcon.TopicNewReleases]: SparkleSvg,\n [ButtonIcon.CuratedTopic]: RectanglesSvg\n};\n\nexport const BOOTSTRAP_CLASS_MAP = {\n [HeadingSize.H1]: 'h1',\n [HeadingSize.H2]: 'h2',\n [HeadingSize.H3]: 'h3',\n [HeadingSize.H4]: 'h4',\n [HeadingSize.H5]: 'h5',\n [HeadingSize.H6]: 'h6',\n [HeadingColor.Dark]: 'text-dark',\n [HeadingColor.White]: 'text-white'\n};\n","@import '~styles/utils/include-media';\n:local {\n .cta {\n position: absolute;\n bottom: map-get($spacers, 3);\n left: map-get($spacers, 3);\n }\n\n .banner {\n height: 5rem;\n padding-bottom: 0;\n overflow: hidden;\n position: relative;\n }\n\n .bannerImage {\n height: 100%;\n position: absolute;\n top: 50%;\n width: 100%;\n transform: translateY(-50%);\n background-repeat: no-repeat;\n\n background-position: center;\n background-size: cover;\n\n // Blurb images are right aligned\n &.blurb {\n // Normal banner height\n height: 13.875rem;\n right: 0;\n background-size: auto 100%;\n background-position: right;\n }\n\n // Presentations images are right aligned\n &.presentations {\n // Normal banner height\n height: 13.875rem;\n right: 0;\n background-size: auto 100%;\n background-position: right;\n\n @include media('<=lg') {\n background-position: 75%;\n }\n\n @include media('<=md') {\n background-position: 60%;\n }\n\n @include media('<=sm') {\n background-position: 0%;\n }\n }\n }\n\n .bannerContent {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n max-width: 18rem;\n display: flex;\n align-items: center;\n\n &.blurb {\n max-width: 100%;\n }\n\n &.presentations {\n max-width: 100%;\n }\n }\n\n @include media('<=lg') {\n .bannerContent {\n max-width: 16rem;\n }\n }\n}","import React from 'react';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { BOOTSTRAP_CLASS_MAP, HeadingColor, HeadingSize } from 'libs/shared/constants/WidgetThemingConstants';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { NewWindowSvg } from 'libs/shared/images/svg/actions/NewWindowSvg';\nimport { Classification, WidgetCta } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from '../hero-banner-small.module.scss';\n\nexport interface BlurbHeroBannerSmallWidgetTemplateProps {\n name: string;\n imageCdnUrl: string;\n content: Classification[];\n widgetTypeId: WidgetTypeId;\n metadata: {\n imageId: string,\n theming: {\n headingSize: HeadingSize,\n headingColor: HeadingColor\n },\n cta: WidgetCta\n };\n}\n\nexport function BlurbHeroBannerSmallWidgetTemplate(props: BlurbHeroBannerSmallWidgetTemplateProps): JSX.Element {\n function getBannerUrl(): string {\n return ImageHelper.getUrlById(\n props.imageCdnUrl,\n ImageType.Banners,\n props.metadata.imageId,\n ImageSize.Large\n );\n }\n\n const headingSize = BOOTSTRAP_CLASS_MAP[props.metadata.theming?.headingSize || HeadingSize.H6];\n const headingColor = BOOTSTRAP_CLASS_MAP[props.metadata.theming?.headingColor || HeadingColor.Dark];\n\n return (\n <div className={`banner rounded-3 position-relative ${styles.banner}`}>\n <div className={`${styles.bannerImage} ${styles.blurb} d-flex`} style={{ backgroundImage: `url('${getBannerUrl()}')` }}>\n {props.name &&\n <div className={`${styles.bannerContent} ${props.widgetTypeId === WidgetTypeId.Blurb ? styles.blurb : ''} d-flex justify-content-between w-100 px-3`}>\n <p className={`${headingSize} ${headingColor} mb-0`}>\n {props.name}\n </p>\n {props.metadata.cta?.text && (\n <IconButton svg={NewWindowSvg} className='btn btn-dark text-nowrap' href={props.metadata.cta.href} openInNewTab>\n {props.metadata.cta.text}\n </IconButton>\n )}\n </div>\n }\n </div>\n </div>\n );\n}\n",":local {\n .banner {\n height: 5rem;\n padding-bottom: 0;\n overflow: hidden;\n position: relative;\n }\n\n .bannerImage {\n height: 100%;\n position: absolute;\n top: 50%;\n width: 100%;\n transform: translateY(-50%);\n background-repeat: no-repeat;\n\n background-position: right;\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { BUTTON_ICON_MAP } from 'libs/shared/constants/WidgetThemingConstants';\nimport { WidgetCta } from 'libs/shared/interfaces';\n\nimport styles from './classification-hero-thumbnail-small.module.scss';\n\ninterface HeroBannerButtonProps {\n cta: WidgetCta;\n}\n\nfunction HeroBannerButton(props: HeroBannerButtonProps): JSX.Element {\n if (!props.cta?.text)\n return <div />;\n\n const className = `btn btn-outline-dark text-nowrap me-3`;\n\n if (!props.cta?.icon) {\n return (\n <div className={className}>\n {props.cta.text}\n </div>\n );\n }\n\n return (\n <IconButton\n svg={BUTTON_ICON_MAP[props.cta.icon]}\n className={className}\n openInNewTab\n >\n {props.cta.text}\n </IconButton>\n );\n}\n\nexport interface ClassificationHeroBannerSmallProps {\n appLink: Core.AppLink;\n heading: string;\n cta?: WidgetCta;\n analyticsData: HashObject;\n analyticsOptions: AnalyticsOptions;\n style: React.CSSProperties;\n}\n\nexport function ClassificationHeroBannerSmall(props: ClassificationHeroBannerSmallProps): JSX.Element {\n return (\n <AppLink\n appLink={props.appLink}\n className='text-decoration-none'\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n >\n <div className={`banner rounded-3 position-relative ${styles.banner}`}>\n <div className={`${styles.bannerImage} d-flex justify-content-between align-items-center`} style={props.style}>\n {!!props.heading && (\n <div className='d-flex align-items-center ps-3 h-100'>\n <h2 className='text-white text-shadow h4 clamp-1'>\n {props.heading}\n </h2>\n </div>\n )}\n \n <HeroBannerButton cta={props.cta} />\n </div>\n </div>\n </AppLink>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { ClassificationHeroBannerSmall } from 'libs/shared/components/widgets/curated-widgets/components/classification-hero-banner-small/ClassificationHeroBannerSmall';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { Classification, WidgetCta } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nexport interface ClassificationHeroBannerSmallWidgetTemplateProps {\n name: string;\n content: Classification[];\n analyticsData?: HashObject;\n\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink\n };\n\n metadata: {\n cta: WidgetCta\n };\n}\n\nexport function ClassificationHeroBannerSmallWidgetTemplate(\n props: ClassificationHeroBannerSmallWidgetTemplateProps\n): JSX.Element {\n const classification = ArrayHelper.first(props.content);\n\n function getBannerUrl(): string {\n return ImageHelper.createBannerUrl(classification.banner, {\n fallbackBaseUrl: '',\n fallbackCategoryName: classification.name,\n type: ImageType.Banners\n }, { size: ImageSize.Large });\n }\n\n const analyticsOptions = {\n location: LocationContext.Classification,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Banner\n };\n\n return (\n <ClassificationHeroBannerSmall\n heading={props.name}\n appLink={props.appLinks?.classification?.(classification)}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n style={{\n backgroundImage: `url('${getBannerUrl()}')`,\n backgroundSize: '100%'\n }}\n cta={props.metadata?.cta}\n />\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AnalyticsOptions, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { LocalPermissionName, PermissionName } from 'libs/shared/enums/PermissionName';\nimport { HasLocalPermissionsFunc, HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Presentation } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from '../hero-banner-small.module.scss';\n\nexport interface PresentationsHeroBannerSmallWidgetTemplateProps {\n name: string;\n hasPermissions: HasPermissionsFunc;\n hasLocalPermissions: HasLocalPermissionsFunc;\n content: Presentation[];\n imageCdnUrl: string;\n analyticsData?: HashObject;\n \n metadata: {\n imageId: string\n };\n appLinks: {\n discover: (presentationId?: string) => Core.AppLink\n };\n}\n\nexport function PresentationsHeroBannerSmallWidgetTemplate(\n props: PresentationsHeroBannerSmallWidgetTemplateProps\n): JSX.Element {\n const canView = (\n props.hasPermissions(PermissionName.ManageSubjectPreferences) ||\n props.hasLocalPermissions(LocalPermissionName.ManagePublicPresentation)\n );\n\n function getBannerUrl(): string {\n return ImageHelper.getUrlById(\n props.imageCdnUrl,\n ImageType.Banners,\n props.metadata.imageId,\n ImageSize.Large\n );\n }\n\n function getPresentationLink(presentation: Presentation): JSX.Element {\n const appLinkOptions = {\n middlewareOptions: { presentationSlug: presentation?.vanitySlug }\n };\n\n const analyticsData: HashObject = {\n ...props.analyticsData,\n id: presentation.id,\n presentationName: presentation.name\n };\n\n const analyticsOptions: AnalyticsOptions = {\n entity: EntityType.Presentation,\n actionType: UserAction.Click,\n location: LocationContext.HeroBannerSmallWidget\n };\n\n return (\n <AppLink\n className='info-link d-inline'\n appLink={props.appLinks?.discover?.()}\n appLinkOptions={appLinkOptions}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n {presentation.name}\n </AppLink>\n );\n }\n\n function getPresentations(): JSX.Element {\n if (props.content.length === 1) {\n return getPresentationLink(props.content[0]);\n }\n\n if (props.content.length === 2) {\n return <>{getPresentationLink(props.content[0])} or {getPresentationLink(props.content[1])}</>;\n }\n\n return (\n <>\n {props.content.slice(0, props.content.length - 1).map(p => {\n return <React.Fragment key={p.id}>{getPresentationLink(p)}, </React.Fragment>;\n })}\n or {getPresentationLink(ArrayHelper.last(props.content))}\n </>\n );\n }\n\n const prefix = props.name;\n\n if (!canView)\n return <></>;\n\n return (\n <div className={`banner rounded-3 position-relative ${styles.banner}`}>\n <div className={`${styles.bannerImage} ${styles.presentations}`} style={{ backgroundImage: `url('${getBannerUrl()}')` }}>\n {prefix &&\n <div className={`${styles.bannerContent} ${styles.presentations} px-3`}>\n <p className='h6 mb-0'>\n {prefix} {getPresentations()}.\n </p>\n </div>\n }\n </div>\n </div>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { BlurbHeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/types/BlurbHeroBannerSmallWidgetTemplate';\nimport { ClassificationHeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/types/ClassificationHeroBannerSmallWidgetTemplate';\nimport { PresentationsHeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/types/PresentationsHeroBannerSmallWidgetTemplate';\nimport { HeadingColor, HeadingSize } from 'libs/shared/constants/WidgetThemingConstants';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasLocalPermissionsFunc, HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Classification, Presentation, WidgetCta } from 'libs/shared/interfaces';\n\nexport interface HeroBannerSmallWidgetTemplateProps {\n name: string;\n imageCdnUrl: string;\n widgetTypeId: WidgetTypeId;\n content: Classification[] | Presentation[];\n\n metadata: {\n imageId: string,\n theming: {\n headingSize: HeadingSize,\n headingColor: HeadingColor\n },\n cta: WidgetCta\n };\n\n hasPermissions: HasPermissionsFunc;\n hasLocalPermissions: HasLocalPermissionsFunc;\n\n analyticsData?: HashObject;\n\n appLinks: {\n discover: (presentationId?: string) => Core.AppLink,\n classification: (classification: Classification | null) => Core.AppLink\n };\n}\n\n// TODO: Fix this up, shouldn't have to cast\n// But it makes AllWidgetTemplateProps unknown for some reason\nexport function HeroBannerSmallWidgetTemplate(\n props: HeroBannerSmallWidgetTemplateProps\n): JSX.Element {\n switch (props.widgetTypeId) {\n case WidgetTypeId.Blurb:\n return <BlurbHeroBannerSmallWidgetTemplate {...props} content={props.content as Classification[]} />;\n case WidgetTypeId.Presentations:\n return (\n <PresentationsHeroBannerSmallWidgetTemplate {...props} content={props.content as Presentation[]} />\n );\n default:\n return <ClassificationHeroBannerSmallWidgetTemplate {...props} content={props.content as Classification[]} />;\n }\n}\n","import React from 'react';\n\nimport styles from '../hero-banner-small.module.scss';\n\nexport function PartialHeroBannerSmallWidgetTemplate(): JSX.Element {\n return (\n <div className={`banner rounded-3 position-relative ${styles.banner}`}>\n <div className={`${styles.bannerContent}`} />\n </div>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { ClassificationHeroBannerSmall } from 'libs/shared/components/widgets/curated-widgets/components/classification-hero-banner-small/ClassificationHeroBannerSmall';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Classification, CuratedWidgetCtaAppLink } from 'libs/shared/interfaces';\n\nexport interface HeroBlockColourSmallWidgetTemplateProps {\n name: string;\n content: Classification[];\n metadata: {\n cta: {\n appLink: CuratedWidgetCtaAppLink\n }\n };\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink,\n classificationDirectory: (classification: Classification) => Core.AppLink\n };\n}\n\nexport function HeroBlockColourSmallWidgetTemplate(props: HeroBlockColourSmallWidgetTemplateProps): JSX.Element {\n const classification = ArrayHelper.first(props.content);\n\n const breakpoints = useBreakpoints();\n\n function getCustomCtaAppLink(): Core.AppLink | null {\n switch (props.metadata?.cta?.appLink) {\n case CuratedWidgetCtaAppLink.TopicDirectory:\n return props.appLinks?.classificationDirectory?.(classification);\n case CuratedWidgetCtaAppLink.CuratedTopic:\n return props.appLinks?.classification?.(classification);\n case CuratedWidgetCtaAppLink.TopicNewReleases:\n return props.appLinks?.classification?.(classification);\n }\n\n return null;\n }\n\n const analyticsData = {\n id: classification.id,\n name: classification.name,\n presentationId: classification.presentationId\n };\n\n const analyticsOptions = {\n location: LocationContext.ClassificationListItem,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n return (\n <ClassificationHeroBannerSmall\n heading={props.name}\n appLink={getCustomCtaAppLink()}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n style={{\n backgroundColor: classification.metadata?.backgroundColor,\n backgroundSize: '100%'\n }}\n cta={breakpoints.xs ? null : props.metadata?.cta}\n />\n );\n}\n","import React from 'react';\n\nimport { PartialHeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/partial-loading/PartialHeroBannerSmallWidgetTemplate';\n\nexport function PartialHeroBlockColourSmallWidgetTemplate(): JSX.Element {\n return <PartialHeroBannerSmallWidgetTemplate />;\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { ClassificationHeroBannerSmall } from 'libs/shared/components/widgets/curated-widgets/components/classification-hero-banner-small/ClassificationHeroBannerSmall';\nimport { HeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/HeroBannerSmallWidgetTemplate';\nimport { HeadingColor, HeadingSize } from 'libs/shared/constants/WidgetThemingConstants';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasLocalPermissionsFunc, HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Classification, Presentation, WidgetCta } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nconst namespace = 'shared.heroThumbnailSmall';\n\nexport interface HeroThumbnailSmallWidgetTemplateProps {\n name: string;\n widgetTypeId: WidgetTypeId;\n content: Classification[] | Presentation[];\n analyticsData?: HashObject;\n \n imageCdnUrl: string;\n hasPermissions: HasPermissionsFunc;\n hasLocalPermissions: HasLocalPermissionsFunc;\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink,\n discover: (presentationId?: string) => Core.AppLink\n };\n metadata: {\n imageId: string,\n theming: {\n headingSize: HeadingSize,\n headingColor: HeadingColor\n },\n cta: WidgetCta\n };\n}\n\nexport function HeroThumbnailSmallWidgetTemplate(props: HeroThumbnailSmallWidgetTemplateProps): JSX.Element {\n const classification = props.content?.[0];\n\n const thumbnailUrl = 'thumbnail' in classification &&\n ImageHelper.createUrl(classification.thumbnail?.url, { size: ImageSize.Medium });\n const backgroundColor = 'metadata' in classification && classification.metadata?.backgroundColor;\n\n const style: React.CSSProperties = {\n backgroundColor,\n backgroundSize: '50%'\n };\n\n if (thumbnailUrl)\n style.backgroundImage = `url('${thumbnailUrl}')`;\n\n const analyticsData = {\n ...props.analyticsData,\n id: classification.id,\n name: classification.name,\n presentationId: 'presentationId' in classification && classification.presentationId\n };\n\n const analyticsOptions = {\n location: LocationContext.ClassificationListItem,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n if (!thumbnailUrl || !backgroundColor)\n return <HeroBannerSmallWidgetTemplate {...props} />;\n\n return (\n <ClassificationHeroBannerSmall\n heading={props.name}\n appLink={props.appLinks?.classification?.(classification)}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n style={style}\n cta={{\n text: LanguageService.getPhrase(namespace, 'buttonLabel'),\n ...(props.metadata?.cta ?? {})\n }}\n />\n );\n}\n","import React from 'react';\n\nimport { PartialHeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/partial-loading/PartialHeroBannerSmallWidgetTemplate';\n\nexport function PartialHeroThumbnailSmallWidgetTemplate(): JSX.Element {\n return <PartialHeroBannerSmallWidgetTemplate />;\n}\n","import React from 'react';\n\nimport { PartialFixedWidget, PartialFixedWidgetItemProps } from 'libs/shared/components/widgets/fixed-widget';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nfunction PartialWidgetItem(props: PartialFixedWidgetItemProps): JSX.Element {\n return (\n <div className={`col-${props.colSize} px-1`}>\n <div className='d-inline-block w-100 partial-loading-background rounded-3' style={{ paddingBottom: '56.25%' }} />\n <div className='mt-2'>\n <div style={{ height: '1.4rem' }}>\n <div className='partial-loading-background' style={{ height: '1.1rem', width: '70%' }} />\n </div>\n <div className='partial-loading-background' style={{ height: '1.33875rem', width: '80%' }}></div>\n </div>\n </div>\n );\n}\n\nexport function PartialPopoutThumbnailSlidingListLargeWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n return (\n <PartialFixedWidget\n size='lg'\n childComponent={PartialWidgetItem}\n name={props.name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n />\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { WidgetTypeIdConfig } from 'libs/shared/constants/WidgetTypeIdConfig';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { PresentationAudience, Video, VideoWidgetTemplateContent, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport { PopoutVideoWidgetItem } from '../../../items/popout-video-widget-item/PopoutVideoWidgetItem';\n\nconst namespace = 'widgets.popoutThumbnailSlidingListLarge';\n\nexport interface PopoutThumbnailSlidingListLargeWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n imageCdnUrl: string;\n content: VideoWidgetTemplateContent;\n hasPermissions: HasPermissionsFunc;\n isPreviewing: boolean;\n widgetTypeId: WidgetTypeId;\n metadata: {\n hideWidgetHeading: boolean,\n hideWidgetDescription: boolean,\n hideObjectTitle: boolean,\n hideObjectSeries: boolean\n };\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink,\n widgetVideoList: (widgetId: string, widgetName: string) => Core.AppLink\n };\n audiences: PresentationAudience[];\n showHighlight?: boolean;\n analyticsData?: HashObject;\n settings: {\n hasTopicDirectories: boolean\n };\n onClickRemoveItem: (videoId: string, videoName: string, widgetId: string, widgetTypeId: WidgetTypeId) => void;\n commonVideoProps: CommonVideoProps;\n isUpselling?: boolean;\n}\n\nexport function PopoutThumbnailSlidingListLargeWidgetTemplate(\n props: PopoutThumbnailSlidingListLargeWidgetTemplateProps\n): JSX.Element {\n const widgetConfig = WidgetTypeIdConfig[props.widgetTypeId];\n const videos = WidgetHelper.getVideoContent(props.content);\n\n function onClickRemoveItem(videoId: string, videoName: string): void {\n props.onClickRemoveItem?.(videoId, videoName, props.id, props.widgetTypeId);\n }\n\n return (\n <FixedWidget\n id={props.id}\n name={!props.metadata?.hideWidgetHeading && props.name}\n description={!props.metadata?.hideWidgetDescription && props.description}\n type={WidgetType.LargeRow}\n contents={WidgetContents.Videos}\n collection={videos}\n childComponent={PopoutVideoWidgetItem}\n extraChildComponentProps={{\n presentationAudiences: props.audiences,\n hideTitle: props.metadata?.hideObjectTitle,\n hideSeries: props.metadata?.hideObjectSeries,\n showVideoGuidance: VideoHelper.showVideoGuidance(props.hasPermissions),\n showNewVideoIndicator: props.settings?.hasTopicDirectories,\n onClickRemoveItem: WidgetHelper.showRemoveButton(props.widgetTypeId) && onClickRemoveItem,\n removeButtonTooltip: WidgetHelper.showRemoveButton(props.widgetTypeId) ?\n LanguageService.getPhrase(namespace, 'removeFromWatchHistory') :\n '',\n commonVideoProps: props.commonVideoProps\n }}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n appLink={\n widgetConfig.getCollectionAppLink?.(props.appLinks, props.content) ??\n props.appLinks?.widgetVideoList?.(props.id, props.name)\n }\n isPreviewing={props.isPreviewing}\n widgetTypeId={props.widgetTypeId}\n isUpselling={props.isUpselling}\n />\n );\n}\n","import React from 'react';\n\nimport { PartialFixedWidget, PartialFixedWidgetItemProps } from 'libs/shared/components/widgets/fixed-widget';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nfunction PartialWidgetItem(props: PartialFixedWidgetItemProps): JSX.Element {\n return (\n <div className={`col-${props.colSize} px-1`}>\n <div className='d-inline-block w-100 partial-loading-background rounded-3' style={{ paddingBottom: '56.25%' }} />\n <div className='mt-2'>\n <div style={{ height: '1.4rem' }}>\n <div className='partial-loading-background' style={{ height: '1.1rem', width: '70%' }} />\n </div>\n <div className='partial-loading-background' style={{ height: '1.33875rem', width: '80%' }}></div>\n </div>\n </div>\n );\n}\n\nexport function PartialPopoutThumbnailSlidingListSmallWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n return (\n <PartialFixedWidget\n size='sm'\n childComponent={PartialWidgetItem}\n name={props.name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n hideDescription={props.hideDescription}\n hideHeading={props.hideHeading}\n />\n );\n}\n",":local {\n .isNew {\n color: $ultramarine;\n background-color: lighten($ultramarine, 35%);\n }\n\n .newVideos {\n color: $green;\n background-color: lighten($green, 40%);\n }\n\n .badge {\n font-size: 0.6875rem;\n }\n\n .icon {\n margin-right: 0.1rem;\n }\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { TimerSvg } from 'libs/shared/images/svg/status/TimerSvg';\n\nimport styles from './subject-stats-badge.module.scss';\n\nexport type ClassificationBadgeType = 'coming-soon' | 'new-topic' | 'new-videos';\n\nconst namespace = 'shared.subjectStatsBadge';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SubjectStatsBadgeProps {\n badgeType: ClassificationBadgeType;\n newVideoCount?: number;\n}\n\nexport function SubjectStatsBadge(props: SubjectStatsBadgeProps): JSX.Element {\n function getBadgeClass(): string {\n const baseClass = `fw-semibold d-inline-block rounded-pill px-2 ${styles.badge}`;\n\n switch (props.badgeType) {\n case 'coming-soon':\n return baseClass + ' bg-light ps-1 d-inline-flex align-items-center';\n case 'new-topic':\n return baseClass + ` ${styles.isNew}`;\n case 'new-videos':\n return baseClass + ` ${styles.newVideos}`;\n default:\n return '';\n }\n }\n\n function getBadgeText(): string {\n switch (props.badgeType) {\n case 'coming-soon':\n return getPhrase('comingSoon');\n case 'new-topic':\n return getPhrase('new');\n case 'new-videos':\n return getPhrase('newVideos', { smartCount: props.newVideoCount });\n default:\n return '';\n }\n }\n\n return (\n <div className={getBadgeClass()}>\n {props.badgeType === 'coming-soon' && (\n <SvgContainer\n svg={TimerSvg}\n className={`svg-container ${styles.icon}`}\n size={SvgContainerSize.ExtraSmall}\n />\n )}\n\n {getBadgeText()}\n </div>\n );\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { PopoutVideoWidgetItem } from 'libs/shared/components/widgets/items/popout-video-widget-item/PopoutVideoWidgetItem';\nimport { WidgetTypeIdConfig } from 'libs/shared/constants/WidgetTypeIdConfig';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Classification, PresentationAudience, Video, VideoWidgetTemplateContent, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport { SubjectStatsBadge } from '../../../items/subject-stats-widget-item/subject-stats-badge/SubjectStatsBadge';\n\nconst namespace = 'widgets.popoutThumbnailSlidingListSmall';\n\nfunction VideoCountBadge(props: PopoutThumbnailSlidingListSmallWidgetTemplateProps): JSX.Element {\n if (\n props.isTertiaryCustomerWithoutExchange ||\n props.widgetTypeId !== WidgetTypeId.ClassificationLatestReleasedVideosV2 ||\n !props.classification\n ) {\n return <></>;\n }\n\n const { childDashboardNewVideoCount } = TopicsHelper.getCounts(props.classification);\n\n if (!childDashboardNewVideoCount)\n return <></>;\n\n return (\n <div className='ms-2'>\n <SubjectStatsBadge badgeType='new-videos' newVideoCount={childDashboardNewVideoCount} />\n </div>\n );\n}\n\nexport interface PopoutThumbnailSlidingListSmallWidgetTemplateProps {\n id: string;\n name: string;\n widgetTypeId: WidgetTypeId;\n description: string;\n content: VideoWidgetTemplateContent;\n appLinks: {\n widgetVideoList: (widgetId: string, widgetName: string) => Core.AppLink,\n watchHistory: () => Core.AppLink,\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink\n };\n metadata: {\n hideWidgetHeading: boolean,\n hideWidgetDescription: boolean,\n hideObjectTitle: boolean,\n hideObjectSeries: boolean\n };\n audiences: PresentationAudience[];\n hasPermissions: HasPermissionsFunc;\n preventPopout?: boolean;\n classification: Classification;\n showHighlight?: boolean;\n analyticsData?: HashObject;\n isTertiaryCustomerWithoutExchange?: boolean;\n onClickRemoveItem: (videoId: string, videoName: string, widgetId: string, widgetTypeId: WidgetTypeId) => void;\n \n isPreviewing: boolean;\n\n settings: {\n hasTopicDirectories: boolean\n };\n\n commonVideoProps: CommonVideoProps;\n isUpselling?: boolean;\n}\n\nexport function PopoutThumbnailSlidingListSmallWidgetTemplate(\n props: PopoutThumbnailSlidingListSmallWidgetTemplateProps\n): JSX.Element {\n const widgetConfig = WidgetTypeIdConfig[props.widgetTypeId];\n const videos = WidgetHelper.getVideoContent(props.content);\n\n function onClickRemoveItem(videoId: string, videoName: string): void {\n props.onClickRemoveItem?.(videoId, videoName, props.id, props.widgetTypeId);\n }\n\n return (\n <FixedWidget\n id={props.id}\n name={!props.metadata?.hideWidgetHeading && props.name}\n description={!props.metadata?.hideWidgetDescription && props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Videos}\n collection={videos}\n childComponent={PopoutVideoWidgetItem}\n extraChildComponentProps={{\n presentationAudiences: props.audiences,\n hideTitle: props.metadata?.hideObjectTitle,\n hideSeries: props.metadata?.hideObjectSeries,\n showVideoGuidance: VideoHelper.showVideoGuidance(props.hasPermissions),\n preventPopout: props.preventPopout,\n showNewVideoIndicator: props.settings?.hasTopicDirectories,\n onClickRemoveItem: WidgetHelper.showRemoveButton(props.widgetTypeId) && onClickRemoveItem,\n removeButtonTooltip: WidgetHelper.showRemoveButton(props.widgetTypeId) ?\n LanguageService.getPhrase(namespace, 'removeFromWatchHistory') :\n '',\n commonVideoProps: props.commonVideoProps\n }}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n appLink={\n widgetConfig.getCollectionAppLink?.(props.appLinks, props.content) ??\n props.appLinks?.widgetVideoList?.(props.id, props.name)\n }\n isPreviewing={props.isPreviewing}\n widgetTypeId={props.widgetTypeId}\n headingBadgeComponent={<VideoCountBadge {...props} />}\n isUpselling={props.isUpselling}\n />\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .largeSeriesItem {\n width: 25%;\n\n @include media('<=md') {\n width: percentage(calc(1 / 3));\n }\n\n @include media('<=sm') {\n width: 50%;\n }\n }\n\n .smallSeriesItem {\n width: percentage(calc(1 / 6));\n\n @include media('<=xl') {\n width: percentage(calc(1 / 5));\n }\n\n @include media('<=lg') {\n width: percentage(calc(1 / 4));\n }\n\n @include media('<=md') {\n width: percentage(calc(1 / 3));\n }\n\n @include media('<=sm') {\n width: percentage(calc(1 / 2));\n }\n }\n\n .partialLoading {\n width: 100%;\n padding-bottom: 200%; // 1:2 aspect ratio\n position: relative;\n }\n}","import * as React from 'react';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nimport { PartialWidgetTemplateProps } from '../../curated-widgets/WidgetProps';\n\nimport styles from './series-widget-item.module.scss';\n\nfunction useGetCount(): number {\n const breakpoints = useBreakpoints();\n\n if (breakpoints.xs)\n return 2;\n\n if (breakpoints.sm)\n return 3;\n\n return 4;\n}\n\nexport const PartialSeriesList = (props: PartialWidgetTemplateProps) => {\n const items = useGetCount();\n\n return (\n <>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\n <div className='row mb-n2'>\n {[...Array(items)].map((s, idx) => (\n <div key={idx} className='col-6 col-sm-4 col-md-3 col-lg-3 pb-2'>\n <div className={`${styles.partialLoading} partial-loading-background rounded-3`} />\n </div>\n ))}\n </div>\n </>\n );\n};\n","@import '~styles/utils/mixins';\n@import '~styles/utils/include-media';\n:local {\n .labelContainer {\n z-index: 1;\n bottom: map-get($spacers, 2);\n left: 50%;\n transform: translate(-50%, 0%);\n\n :global(.rating-badge) {\n @include thumbnail-poster-badge;\n }\n }\n\n .labelContainerOverlay {\n :global(.rating-badge) {\n @include thumbnail-poster-badge;\n }\n }\n\n .hoverActive {\n transform: translate3D(0, -1px, 0) scale(1.01);\n transition: all .1s ease;\n\n &:after {\n content: '';\n\n position: absolute;\n top: 0;\n left: -(map-get($spacers, 1));\n right: -(map-get($spacers, 1));\n bottom: 0;\n\n margin: 0 map-get($spacers, 1);\n\n border-radius: $border-radius-lg;\n }\n }\n\n .mask {\n z-index: 2;\n position: absolute;\n bottom: map-get($spacers, 2);\n right: 0;\n left: 0;\n\n max-height: calc(100% - (map-get($spacers, 2) * 2));\n \n @include media('<=lg') {\n padding: map-get($spacers, 3) map-get($spacers, 1);\n }\n\n .largeHoverTitle {\n font-size: $h4-font-size;\n\n @include media('<=lg') {\n font-size: $h5-font-size;\n }\n\n @include media('<=md') {\n font-size: $h6-font-size;\n margin-bottom: map-get($spacers, 1);\n }\n\n @include media('<=sm') {\n font-size: $h5-font-size;\n }\n }\n\n .smallHoverTitle {\n font-size: $h5-font-size;\n\n @include media('<=xl') {\n font-size: $h6-font-size;\n }\n\n @include media('<=lg') {\n font-size: $h6-font-size;\n }\n\n @include media('<=md') {\n @include clamp(5);\n }\n }\n\n .description {\n text-overflow: ellipsis;\n overflow: hidden;\n -webkit-box-orient: vertical;\n display: -webkit-box;\n }\n\n .largeHoverDescription {\n @include clamp(11);\n\n @include media('<=xl') {\n @include clamp(9);\n }\n @include media('<=lg') {\n @include clamp(7);\n }\n @include media(\"<=878px\") {\n @include clamp(4);\n }\n\n &.hasTableOfContents {\n @include clamp(7);\n\n @include media('<=xl') {\n @include clamp(5);\n }\n @include media(\"<=1003px\") {\n @include clamp(4);\n }\n @include media('<=lg') {\n @include clamp(7);\n }\n @include media(\"<=878px\") {\n @include clamp(4);\n }\n }\n }\n\n .smallHoverDescription {\n @include clamp(8);\n\n @include media('<=xl') {\n @include clamp(8);\n font-size: 12px;\n }\n\n @include media('<=md') {\n @include clamp(6);\n }\n @include media('<=sm') {\n @include clamp(9);\n }\n } \n }\n}","import React from 'react';\n\nimport { AudienceLabel } from 'libs/shared/components/audience-label/AudienceLabel';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { useHoverIntent } from 'libs/shared/hooks/UseHover';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { PresentationAudience, Series } from 'libs/shared/interfaces';\nimport { SeriesHelper } from 'libs/shared/utils/SeriesHelper';\n\nimport styles from './series-tall-poster.module.scss';\n\ninterface SeriesTallPosterHoverOverlay {\n series: Series;\n mergedAudience: PresentationAudience;\n isSmall?: boolean;\n hasTableOfContents?: boolean;\n}\n\nfunction SeriesTallPosterHoverOverlay(props: SeriesTallPosterHoverOverlay): JSX.Element {\n return (\n <div className={`py-3 mx-2 px-2 rounded bg-white text-center ${styles.mask} d-flex flex-column align-items-center`}>\n <h3 className={`fw-semibold mb-0 ${styles.hoverTitle} ${props.isSmall ? styles.smallHoverTitle : styles.largeHoverTitle}`}>\n <span className='clamp-3'>\n {props.series.name}\n </span>\n </h3>\n\n {!!props.series.description && (\n <p className={`${props.hasTableOfContents ? styles.hasTableOfContents : ''} ${styles.hoverDescription} ${props.isSmall ? styles.smallHoverDescription : styles.largeHoverDescription} mb-0`}>{props.series.description}</p>\n )}\n <div className={`${styles.labelContainerOverlay}`}>\n {props.mergedAudience ?\n <AudienceLabel audience={props.mergedAudience} border='dark' className='mt-2 w-fit'/> :\n <Badge type={BadgeType.Rating} data={SeriesHelper.getRating(props.series)} className='mt-2' />\n }\n </div>\n </div>\n );\n}\n\ninterface SeriesTallPosterMaskProps {\n series: Series;\n presentationAudiences: PresentationAudience[];\n preloadImage: boolean;\n imageClass?: string;\n isSmall?: boolean;\n hasTableOfContents?: boolean;\n}\n\nexport function SeriesTallPoster(props: SeriesTallPosterMaskProps): JSX.Element {\n const [ hoverRef, isHovering ] = useHoverIntent<HTMLDivElement>({ className: styles.hoverActive });\n \n const audiences = props.series && props.series.subjectPresentationAudiences &&\n props.series.subjectPresentationAudiences.data || [];\n\n const mergedAudience = useMergeAudiences(audiences, props.presentationAudiences);\n const displayAudience = !!(audiences && audiences.length && mergedAudience);\n\n return (\n <div ref={hoverRef}>\n <BaseImage\n data={props.series.tallPoster}\n alt={props.series.name}\n imageType={ImageType.TallPosters}\n preload={props.preloadImage}\n imageOptions={{ size: ImageSize.Large }}\n imageClassName={props.imageClass ? props.imageClass : 'rounded-3'}\n >\n {isHovering && (\n <SeriesTallPosterHoverOverlay\n isSmall={props.isSmall}\n series={props.series}\n mergedAudience={audiences && audiences.length ? mergedAudience : null}\n hasTableOfContents={props.hasTableOfContents}\n />\n )}\n \n <ImageFallback type={ImageFallbackType.Series} />\n <div className={`position-absolute text-white ${styles.labelContainer}`}>\n {displayAudience ?\n <AudienceLabel audience={mergedAudience} className='bg-white text-dark' border='dark' /> :\n <Badge className='text-shadow' type={BadgeType.Rating} data={SeriesHelper.getRating(props.series)} />\n }\n </div>\n </BaseImage>\n </div>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SeriesTallPoster } from 'libs/shared/components/series-tall-poster/SeriesTallPoster';\nimport { PresentationAudience, Series } from 'libs/shared/interfaces';\n\nimport { WidgetHeader } from '../../components/header/WidgetHeader';\n\nexport interface PosterFixedListLargeWidgetTemplateProps {\n name: string;\n description: string;\n content: Series[];\n audiences: PresentationAudience[];\n appLinks: {\n series: (series: Series) => Core.AppLink\n };\n analyticsData: HashObject;\n badgeComponent: JSX.Element;\n seeMoreLink: Core.AppLink;\n}\n\nexport function PosterFixedListLargeWidgetTemplate(\n props: PosterFixedListLargeWidgetTemplateProps\n): JSX.Element {\n return (\n <>\n <WidgetHeader\n name={props.name}\n description={props.description}\n showSeeMoreLink={!!props.seeMoreLink}\n appLink={props.seeMoreLink}\n badgeComponent={props.badgeComponent}\n />\n <ul className='list-unstyled mx-n1 mb-n2 row'>\n {props.content.map(s => {\n return (\n <li key={s.id} className='px-1 col-lg-3 col-md-4 col-sm-6 col-xs-12'>\n <AppLink\n appLink={props.appLinks.series(s)}\n className='d-block mb-2'\n analyticsData={{\n ...props.analyticsData,\n id: s.id,\n name: s.name\n }}\n analyticsOptions={{\n entity: EntityType.Series,\n actionType: UserAction.Click,\n descriptor: ClickDescriptor.TallPoster,\n location: LocationContext.PosterFixedListLargeWidget\n }}\n >\n <SeriesTallPoster\n series={s}\n presentationAudiences={props.audiences}\n preloadImage={false}\n />\n </AppLink>\n </li>\n );\n })}\n </ul>\n </>\n );\n}\n","import * as React from 'react';\n\nimport { ClickDescriptor, EntityType, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SeriesTallPoster } from 'libs/shared/components/series-tall-poster/SeriesTallPoster';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { PresentationAudience, Series } from 'libs/shared/interfaces';\n\nimport styles from './series-widget-item.module.scss';\n\nexport interface SeriesWidgetItemProps extends FixedWidgetItemProps<Series> {\n audiences: PresentationAudience[];\n isSmall?: boolean;\n hasTableOfContents?: boolean;\n}\n\nexport function SeriesWidgetItem(props: SeriesWidgetItemProps): JSX.Element {\n const { data: series } = props;\n\n /**\n * Subject audiences currently take render precedence over rating.\n * \n * This means that until we properly add productionCompanies to series, we\n * should expect only CV series to have a subject audience. Any TV series\n * from the Exchange should only have a rating. \n */\n\n const analyticsData = {\n ...props.analyticsData,\n id: series?.id,\n name: series?.name\n };\n\n const analyticsOptions = {\n ...props.analyticsOptions,\n actionType: UserAction.Click,\n entity: EntityType.Series,\n descriptor: ClickDescriptor.TallPoster\n };\n\n return (\n <AppLink\n key={series.id}\n appLink={props.getAppLink(series)}\n className={`position-relative px-1 flex-shrink-0 ${props.isSmall ? styles.smallSeriesItem : styles.largeSeriesItem} `}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <SeriesTallPoster\n series={series}\n presentationAudiences={props.audiences}\n preloadImage={props.preloadImage}\n isSmall={props.isSmall}\n hasTableOfContents={props.hasTableOfContents}\n />\n </AppLink>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { SeriesWidgetItem } from 'libs/shared/components/widgets/items/series-widget-item';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { PresentationAudience, Series, Video, WidgetType } from 'libs/shared/interfaces';\n\nexport interface PosterSlidingListLargeWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Video[];\n audiences: PresentationAudience[];\n hasTableOfContents: boolean;\n appLinks: {\n series: (series: Series) => Core.AppLink,\n scopedSearchHome?: (filters?: HashObject) => Core.AppLink\n };\n showHighlight?: boolean;\n analyticsData?: HashObject;\n badgeComponent: JSX.Element;\n seeMoreLink: Core.AppLink;\n}\n\nexport function PosterSlidingListLargeWidgetTemplate(\n props: PosterSlidingListLargeWidgetTemplateProps\n): JSX.Element {\n return (\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Series}\n collection={props.content}\n childComponent={SeriesWidgetItem}\n extraChildComponentProps={{ audiences: props.audiences, hasTableOfContents: props.hasTableOfContents }}\n getChildAppLink={(item: Series) => props.appLinks?.series?.(item)}\n appLink={props.seeMoreLink}\n showSeeMoreLink={!!props.seeMoreLink}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n headingBadgeComponent={props.badgeComponent}\n />\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .slidingSubjectSmall {\n position: relative;\n flex: 0 0 auto;\n width: 16.6667%;\n\n @include media('<=xl') {\n width: 20%;\n }\n \n @include media('<=lg') {\n width: 25%;\n }\n \n @include media('<=md') {\n width: 33.33333%;\n }\n \n @include media('<=sm') {\n width: 50%;\n }\n }\n\n .slidingSubjectLarge {\n position: relative;\n flex: 0 0 auto;\n width: 20%;\n\n @include media('<=lg') {\n width: 25%;\n }\n \n @include media('<=md') {\n width: 33.33333%;\n }\n \n @include media('<=sm') {\n width: 50%;\n }\n }\n\n .heading {\n z-index: 1;\n color: $gray-100;\n text-align: center;\n\n position: absolute;\n left: 0;\n right: 0;\n top: map-get($spacers, 3);\n\n font-size: $h5-font-size;\n\n // With the table of contents displaying, the font size needs to shrink to fit\n @include media('<=xl') {\n font-size: $h6-font-size;\n }\n\n @include media('<=lg') {\n font-size: $h5-font-size;\n }\n\n @include media(\"<400px\") {\n font-size: $h6-font-size;\n }\n }\n\n .posterContainer {\n position: relative;\n padding: 0 map-get($spacers, 1);\n }\n\n .partialLoading {\n width: 100%;\n padding-bottom: percentage(calc(16 / 9));\n position: relative;\n }\n\n .labelContainer {\n z-index: 1;\n bottom: map-get($spacers, 2);\n left: 50%;\n transform: translate(-50%, 0%);\n }\n}","import React from 'react';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { WidgetType } from 'libs/shared/interfaces';\n\nimport styles from './tall-subject-widget-item.module.scss';\n\nfunction useGetItemCount(type: WidgetType): number {\n const breakpoints = useBreakpoints();\n\n if (breakpoints.xs)\n return 2;\n\n if (breakpoints.sm)\n return 3;\n\n if (breakpoints.md)\n return 4;\n\n if (breakpoints.lg || type === WidgetType.LargeRow)\n return 5;\n\n return 6;\n}\n\nconst PartialLoadingItem = (props: PartialTallSubjectWidgetProps) => (\n <div className={`${props.type === WidgetType.Row ? styles.slidingSubjectSmall : styles.slidingSubjectLarge} px-1`}>\n <div className={`${styles.partialLoading} partial-loading-background rounded-3`} />\n </div>\n);\n\ninterface PartialTallSubjectWidgetProps {\n type: WidgetType;\n}\n\nexport function PartialTallSubjectWidget(props: PartialTallSubjectWidgetProps): JSX.Element {\n const itemCount = useGetItemCount(props.type);\n\n const items = [];\n for (let i = 0; i < itemCount; i++) {\n items.push(<PartialLoadingItem key={i} type={props.type} />);\n }\n\n return (\n <div className='pb-3'>\n <PartialWidgetHeader />\n <div className='row g-0 mx-n1'>\n {items}\n </div>\n </div>\n );\n}\n","import * as React from 'react';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, UserAction } from 'libs/analytics/interfaces';\n\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { Classification, PresentationAudience, WidgetType } from 'libs/shared/interfaces';\n\nimport styles from './tall-subject-widget-item.module.scss';\n\nexport interface TallSubjectWidgetItemProps extends FixedWidgetItemProps<Classification> {\n audiences: PresentationAudience[];\n}\n\nexport function TallSubjectWidgetItem(props: TallSubjectWidgetItemProps): JSX.Element {\n const { data, preloadImage } = props;\n\n const analyticsOptions: AnalyticsOptions = {\n ...props.analyticsOptions,\n entity: EntityType.Classification,\n actionType: UserAction.Click,\n descriptor: ClickDescriptor.TallPoster\n };\n\n function getClassName(): string {\n let className = styles.posterContainer;\n\n if (props.context.type === WidgetType.Row)\n className += ` ${styles.slidingSubjectSmall}`;\n else\n className += ` ${styles.slidingSubjectLarge}`;\n\n return className;\n }\n\n return (\n <div className={getClassName()}>\n <BaseImage\n data={data.tallPoster}\n alt={data.name}\n appLink={props.getAppLink(data)}\n imageType={ImageType.TallPosters}\n preload={preloadImage}\n imageOptions={{ size: ImageSize.Medium }}\n imageClassName='rounded-3'\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <ImageFallback type={ImageFallbackType.TallSubject} />\n <h3 className={`px-2 ${styles.heading}`}>{data.name}</h3>\n </BaseImage>\n </div>\n );\n}\n","import React from 'react';\n\nimport { PartialTallSubjectWidget } from 'libs/shared/components/widgets/items/tall-subject-widget-item';\nimport { WidgetType } from 'libs/shared/interfaces';\n\nexport function PartialPosterSlidingListMediumWidgetTemplate(): JSX.Element {\n return <PartialTallSubjectWidget type={WidgetType.LargeRow} />;\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { TallSubjectWidgetItem } from 'libs/shared/components/widgets/items/tall-subject-widget-item';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Classification, Video, WidgetType } from 'libs/shared/interfaces';\n\nexport interface PosterSlidingListMediumWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Video[];\n analyticsData?: HashObject;\n \n showHighlight?: boolean;\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink\n };\n}\n\nexport function PosterSlidingListMediumWidgetTemplate(props: PosterSlidingListMediumWidgetTemplateProps): JSX.Element {\n return (\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.LargeRow}\n contents={WidgetContents.Subjects}\n collection={props.content}\n childComponent={TallSubjectWidgetItem}\n getChildAppLink={(item: Classification) => props.appLinks?.classification?.(item)}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n />\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { TallSubjectWidgetItem } from 'libs/shared/components/widgets/items/tall-subject-widget-item/TallSubjectWidgetItem';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Classification, CuratedDashboardAppLink, Presentation, PresentationAudience, WidgetType } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nconst EXPLORE_ALL_TOPICS_ID = 'explore-all-topics';\n\nfunction getExtraItem(props: ClassificationPosterSlidingListSmallWidgetTemplateProps) {\n if (props.metadata?.text || props.metadata?.imageId)\n return {\n id: props.metadata?.appLink === CuratedDashboardAppLink.ExploreAllTopics ? EXPLORE_ALL_TOPICS_ID : '',\n name: props.metadata?.text,\n tallPoster: {\n url: props.metadata?.imageId ?\n ImageHelper.getUrlById(props.imageCdnUrl, ImageType.TallPosters, props.metadata.imageId, ImageSize.Medium) :\n ''\n }\n };\n}\n\nexport interface ClassificationPosterSlidingListSmallWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n imageCdnUrl: string;\n audiences: PresentationAudience[];\n content: Classification[];\n metadata: {\n imageId: string,\n text: string,\n appLink: CuratedDashboardAppLink\n };\n presentation: Presentation;\n appLinks: {\n latestReleases: () => Core.AppLink,\n allTopics: (presentationId?: string) => Core.AppLink,\n classification: (classification: Classification | null) => Core.AppLink\n };\n analyticsData?: HashObject;\n \n showHighlight?: boolean;\n}\n\nexport function ClassificationPosterSlidingListSmallWidgetTemplate(\n props: ClassificationPosterSlidingListSmallWidgetTemplateProps\n): JSX.Element {\n const extraContent = getExtraItem(props);\n\n const widgetAppLink = WidgetHelper.getCustomAppLink(props);\n\n return (\n <div>\n <FixedWidget\n id={props.id}\n name={props.name}\n appLink={widgetAppLink}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Subjects}\n collection={extraContent ? [ extraContent, ...props.content ] : props.content}\n childComponent={TallSubjectWidgetItem}\n extraChildComponentProps={{ audiences: props.audiences }}\n getChildAppLink={(item: Classification) => {\n if (!item.id)\n return null;\n\n if (item.id === EXPLORE_ALL_TOPICS_ID)\n return props.appLinks?.allTopics?.(props.presentation.id);\n\n return props.appLinks?.classification?.(item);\n }}\n analyticsData={props.analyticsData}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n />\n </div>\n );\n}\n","import React from 'react';\n\nimport { PartialTallSubjectWidget } from 'libs/shared/components/widgets/items/tall-subject-widget-item';\nimport { WidgetType } from 'libs/shared/interfaces';\n\nexport function PartialPosterSlidingListSmallWidgetTemplate(): JSX.Element {\n return <PartialTallSubjectWidget type={WidgetType.Row} />;\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { HashObject } from 'libs/analytics/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { SeriesWidgetItem } from 'libs/shared/components/widgets/items/series-widget-item';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { PresentationAudience, Series, WidgetType } from 'libs/shared/interfaces';\n\nexport interface SeriesPosterSlidingListSmallWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Series[];\n audiences: PresentationAudience[];\n appLinks: {\n series: (series: Series) => Core.AppLink\n };\n analyticsData?: HashObject;\n \n showHighlight?: boolean;\n}\n\nexport function SeriesPosterSlidingListSmallWidgetTemplate(\n props: SeriesPosterSlidingListSmallWidgetTemplateProps\n): JSX.Element {\n return (\n <div>\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.SmallSeries}\n collection={props.content}\n childComponent={SeriesWidgetItem}\n extraChildComponentProps={{ audiences: props.audiences, isSmall: true }}\n getChildAppLink={props.appLinks?.series}\n analyticsData={props.analyticsData}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n />\n </div>\n );\n}\n",":local {\n .question {\n background-color: $gray-100;\n padding: 0.75rem;\n\n &:hover {\n background-color: $light-blue;\n }\n }\n\n .partialQuestion {\n background-color: $gray-100;\n padding: 0.75rem;\n }\n\n .description {\n overflow: hidden;\n // If you change the transition time here, please also update the variable in the component\n transition: height 0.5s ease-in-out;\n }\n}","import React from 'react';\n\nimport styles from '../question-widget-template.module.scss';\n\nexport function PartialQuestionWidgetTemplate(): JSX.Element {\n return (\n <div className={`${styles.partialQuestion} rounded-3`}>\n <div className='mb-2 partial-loading-background' style={{ height: '1.5rem', width: '75%' }}>\n </div>\n\n <div className='partial-loading-background' style={{ height: '1.2rem', width: '100%' }}>\n </div>\n </div>\n );\n}\n",":local {\n .question {\n background-color: $gray-100;\n padding: 0.75rem;\n\n &.disabled:hover {\n background-color: $gray-100;\n cursor: default !important;\n }\n\n &:hover {\n background-color: $light-blue;\n }\n\n table,\n th,\n td {\n border: 1px solid $dark;\n padding: map-get($spacers, 2);\n }\n }\n\n .partialQuestion {\n background-color: $gray-100;\n padding: 0.75rem;\n }\n\n .description {\n overflow: hidden;\n // If you change the transition time here, please also update the variable in the component\n transition: height 0.5s ease-in-out;\n }\n}","import React from 'react';\n\nimport { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { useIsComponentMounted } from 'libs/shared/hooks/UseIsComponentMounted';\nimport { useResizeListener } from 'libs/shared/hooks/UseResizeListener';\nimport { MinusSvg } from 'libs/shared/images/svg/actions/MinusSvg';\nimport { PlusSvg } from 'libs/shared/images/svg/actions/PlusSvg';\nimport { TopicFaqHelper } from 'libs/shared/utils/topic-faq-helper/TopicFaqHelper';\n\nimport styles from './expandable-question.module.scss';\n\nconst DEFAULT_HEIGHT = '1.2rem';\n\n// If you change the transition time here, please also update the transition time in the SCSS file\nconst TRANSITION_TIME = 500; // ms\n\ninterface ExpandableQuestionProps {\n id: string;\n question: string;\n answer: string;\n isBot?: boolean;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\nexport function ExpandableQuestion(props: ExpandableQuestionProps): JSX.Element {\n // Answer should be expanded for anon by default so Google can read it.\n const [ isExpanded, setIsExpanded ] = useViewModel(`should:expand:${props.id}`, props.isBot, {\n storage: StorageType.LocalStorage\n });\n\n const [ height, setHeight ] = React.useState(isExpanded ? '100%' : DEFAULT_HEIGHT);\n const [ shouldClamp, setShouldClamp ] = React.useState<boolean>(!isExpanded);\n const [ isExpandable, setIsExpandable ] = React.useState<boolean>(true);\n\n const [ markdown, setMarkdown ] = React.useState<string | null>(null);\n const isMounted = useIsComponentMounted();\n\n const timeoutRef = React.useRef<number | null>(null);\n const invisibleRef = React.useRef<HTMLDivElement>(null);\n const visibleRef = React.useRef<HTMLParagraphElement>(null);\n\n const checkIsExpandable = React.useCallback(() => {\n if (!markdown || !invisibleRef.current) return;\n\n // Use a clone to measure full height without constraints\n const fullEl = document.createElement('p');\n fullEl.innerHTML = markdown;\n // Match styles of the visible element\n fullEl.className = `mb-0 ${TopicFaqHelper.getContainerClass()}`;\n fullEl.style.visibility = 'hidden';\n\n invisibleRef.current.appendChild(fullEl);\n const fullHeight = fullEl.clientHeight;\n invisibleRef.current.removeChild(fullEl);\n\n // Use a clone to measure single line height\n const singleEl = document.createElement('p');\n singleEl.innerHTML = '&nbsp;';\n singleEl.className = `mb-0 ${TopicFaqHelper.getContainerClass()}`;\n singleEl.style.visibility = 'hidden';\n\n invisibleRef.current.appendChild(singleEl);\n const singleLineHeight = singleEl.clientHeight;\n invisibleRef.current.removeChild(singleEl);\n\n setIsExpandable(fullHeight > singleLineHeight + 5);\n }, [markdown]);\n\n function onToggleExpander(e: React.MouseEvent<HTMLElement>): void {\n if (!isExpandable) return;\n if (TopicFaqHelper.isLink(e.target as HTMLElement)) return;\n\n // Don't toggle if the user is highlighting text\n if (window.getSelection().toString().length !== 0) return;\n\n AnalyticsHelper.logUserAction(\n {\n ...props.analyticsData,\n question: props.question,\n answer: props.answer\n },\n {\n ...props.analyticsOptions,\n entity: EntityType.Faq,\n actionType: UserAction.Click,\n descriptor: isExpanded ? ClickDescriptor.Collapse : ClickDescriptor.Expand,\n location: LocationContext.FaqQuestionWidget\n }\n );\n\n isExpanded ? collapse() : expand();\n }\n\n function expand(): void {\n setExpandedHeight();\n setIsExpanded(true);\n\n window.clearTimeout(timeoutRef.current);\n setShouldClamp(false);\n }\n\n function collapse(): void {\n setHeight(DEFAULT_HEIGHT);\n setIsExpanded(false);\n\n timeoutRef.current = window.setTimeout(() => {\n setShouldClamp(true);\n }, TRANSITION_TIME);\n }\n\n function setExpandedHeight(): void {\n const fakeEl = document.createElement('p');\n fakeEl.innerHTML = markdown;\n fakeEl.style.visibility = 'hidden';\n invisibleRef.current.appendChild(fakeEl);\n\n setHeight(`${fakeEl.clientHeight}px`);\n invisibleRef.current.removeChild(fakeEl);\n }\n\n React.useEffect(() => {\n async function update() {\n const newMarkdown = await TopicFaqHelper.parse(props.answer, { focusableLinks: isExpanded });\n\n if (!isMounted.current) return;\n\n // Set initial state\n if (markdown === null) {\n setMarkdown(newMarkdown);\n return;\n }\n\n // Don't update if unchanged\n if (markdown === newMarkdown) return;\n\n // Collapse if expanded and the content has changed, so that the height can be recalculated\n if (markdown && isExpanded) collapse();\n\n setMarkdown(newMarkdown);\n }\n\n update();\n }, [props.answer]);\n\n React.useEffect(() => {\n if (height !== '100%' || !visibleRef.current) return;\n\n setHeight(visibleRef.current.clientHeight + 'px');\n }, [height]);\n\n React.useEffect(() => {\n checkIsExpandable();\n }, [checkIsExpandable]);\n\n useResizeListener(\n () => {\n if (isExpanded) collapse();\n },\n checkIsExpandable,\n [ isExpanded, checkIsExpandable ]\n );\n\n if (!props.question || !markdown) return <></>;\n\n return (\n <DivButton\n className={classNames(\n styles.question,\n 'rounded-3',\n !isExpandable && styles.disabled\n )}\n onClick={onToggleExpander}\n >\n <div className='pb-3'>\n <div className='float-end rounded-circle bg-white'>\n {isExpandable && <SvgContainer svg={isExpanded ? MinusSvg : PlusSvg} />}\n </div>\n\n <h2 className='h4 mb-0 clear-end'>{props.question}</h2>\n </div>\n\n <div className={styles.description} style={{ height }}>\n <p\n className={`mb-0 ${shouldClamp ? 'clamp-1' : ''} ${TopicFaqHelper.getContainerClass()}`}\n dangerouslySetInnerHTML={{ __html: TextHelper.sanitize(markdown) }}\n ref={visibleRef}\n ></p>\n\n <div ref={invisibleRef} />\n </div>\n </DivButton>\n );\n}\n","import React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ExpandableQuestion } from 'libs/shared/components/expandable-question/ExpandableQuestion';\nimport { Faq } from 'libs/shared/interfaces';\n\nexport interface QuestionWidgetTemplateProps {\n id: string;\n content: Faq[];\n isBot: boolean;\n analyticsData?: HashObject;\n \n}\n\nexport function QuestionWidgetTemplate(props: QuestionWidgetTemplateProps): JSX.Element {\n const { question, answer } = ArrayHelper.first(props.content);\n\n return (\n <ExpandableQuestion\n id={props.id}\n answer={answer}\n question={question}\n isBot={props.isBot}\n analyticsData={props.analyticsData}\n />\n );\n}\n",":local {\n .question {\n background-color: $gray-100;\n\n &:hover {\n background-color: $light-blue;\n }\n }\n\n .padding {\n padding: 0.75rem;\n }\n\n .partialQuestion {\n background-color: $gray-100;\n }\n\n .description {\n overflow: hidden;\n transition: height 0.5s ease-in-out;\n padding: 0 0.75rem;\n }\n}","import React from 'react';\n\nimport styles from '../question-accordion-widget-template.module.scss';\n\nfunction PartialQuestion(): JSX.Element {\n return (\n <div className={`${styles.partialQuestion} ${styles.padding} rounded-2 mb-2`}>\n <div className='partial-loading-background' style={{ height: '1.5rem', width: '75%' }}>\n </div>\n </div>\n );\n}\n\nexport function PartialQuestionAccordionWidgetTemplate(): JSX.Element {\n return (\n <>\n <div className='partial-loading-background mb-2' style={{ height: '2rem', width: '30%' }} />\n\n <div className='mb-n2'>\n <PartialQuestion />\n <PartialQuestion />\n <PartialQuestion />\n </div>\n </>\n );\n}\n","import * as React from 'react';\n\nimport { usePageMetadataContext } from 'libs/common/react/context/PageMetadataContext';\n\nimport { Faq } from 'libs/shared/interfaces';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\ninterface UseFaqJsonLdProps {\n faqs: Faq[];\n widgetName?: string;\n}\n\nexport function useFaqJsonLd(props: UseFaqJsonLdProps): void {\n const metadataContext = usePageMetadataContext();\n\n React.useEffect(() => {\n if (!props.faqs?.length || !metadataContext.hasProvider)\n return;\n\n async function generateFaqJsonLd() {\n // Create FAQ JSON-LD structure using PageMetadataHelper\n const faqJsonLd = await PageMetadataHelper.buildFaqJsonLd(props.faqs, props.widgetName);\n\n // Add FAQ JSON-LD to the page metadata\n metadataContext.setFaq(faqJsonLd);\n }\n\n generateFaqJsonLd();\n }, [ props.faqs, props.widgetName, metadataContext.hasProvider ]);\n}\n","import React from 'react';\n\nimport { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { useFaqJsonLd } from 'libs/shared/hooks/useFaqJsonLd';\nimport { useIsComponentMounted } from 'libs/shared/hooks/UseIsComponentMounted';\nimport { useResizeListener } from 'libs/shared/hooks/UseResizeListener';\nimport { MinusSvg } from 'libs/shared/images/svg/actions/MinusSvg';\nimport { PlusSvg } from 'libs/shared/images/svg/actions/PlusSvg';\nimport { Faq } from 'libs/shared/interfaces';\nimport { TopicFaqHelper } from 'libs/shared/utils/topic-faq-helper/TopicFaqHelper';\n\nimport styles from './question-accordion-widget-template.module.scss';\n\nconst DEFAULT_HEIGHT = '0px';\n\ninterface QuestionProps {\n id: string;\n faq: Faq;\n index: number;\n analyticsData?: HashObject;\n \n isBot: boolean;\n}\n\nfunction Question(props: QuestionProps): JSX.Element {\n // Answer should be expanded for anon by default so Google can read it.\n const [ isExpanded, setIsExpanded ] = useViewModel(`should:expand:${props.id}`, props.isBot, {\n storage: StorageType.LocalStorage\n });\n\n const [ height, setHeight ] = React.useState(isExpanded ? '100%' : DEFAULT_HEIGHT);\n const [ markdown, setMarkdown ] = React.useState<string | null>(null);\n\n const invisibleRef = React.useRef<HTMLParagraphElement>(null);\n const visibleRef = React.useRef<HTMLParagraphElement>(null);\n const isMounted = useIsComponentMounted();\n\n function onToggleExpander(e: React.MouseEvent<HTMLElement>): void {\n if (TopicFaqHelper.isLink(e.target as HTMLElement))\n return;\n\n // Don't toggle if the user is highlighting text\n if (window.getSelection().toString().length !== 0)\n return;\n\n AnalyticsHelper.logUserAction({\n ...props.analyticsData,\n ...props.faq,\n questionIndex: props.index\n }, {\n entity: EntityType.Faq,\n actionType: UserAction.Click,\n descriptor: isExpanded ? ClickDescriptor.Collapse : ClickDescriptor.Expand,\n location: LocationContext.FaqQuestionAccordionWidget\n });\n\n isExpanded ? collapse() : expand();\n }\n\n async function expand(): Promise<void> {\n setExpandedHeight();\n setIsExpanded(true);\n\n const newMarkdown = await TopicFaqHelper.parse(props.faq?.answer, { focusableLinks: true });\n\n if (!isMounted.current)\n return;\n\n setMarkdown(newMarkdown);\n }\n\n async function collapse(): Promise<void> {\n setHeight(DEFAULT_HEIGHT);\n setIsExpanded(false);\n\n const newMarkdown = await TopicFaqHelper.parse(props.faq?.answer, { focusableLinks: false });\n\n if (!isMounted.current)\n return;\n\n setMarkdown(newMarkdown);\n }\n\n function setExpandedHeight(): void {\n const fakeEl = document.createElement('p');\n fakeEl.innerHTML = markdown;\n fakeEl.style.visibility = 'hidden';\n fakeEl.classList.add('py-1');\n invisibleRef.current.appendChild(fakeEl);\n\n // 10px is subtracted as this is the padding of the description\n setHeight(`${fakeEl.clientHeight - 10}px`);\n invisibleRef.current.removeChild(fakeEl);\n }\n\n React.useEffect(() => {\n async function onUpdateMarkdown() {\n const newMarkdown = await TopicFaqHelper.parse(props.faq?.answer, { focusableLinks: isExpanded });\n\n if (!isMounted.current)\n return;\n\n setMarkdown(newMarkdown);\n\n if (isExpanded)\n setExpandedHeight();\n }\n\n onUpdateMarkdown();\n }, [props.faq?.answer]);\n\n // When we resize, we want to recalculate the height of the expanded content\n useResizeListener(() => {\n if (isExpanded)\n collapse();\n }, null, [isExpanded]);\n\n if (!props.faq?.question || !props.faq?.answer)\n return <></>;\n\n const questionId = `question-${props.id}`;\n const panelId = `answer-${props.id}`;\n\n return (\n <DivButton\n onClick={onToggleExpander}\n aria-expanded={isExpanded}\n aria-controls={panelId}\n className={`${styles.question} rounded-2`}\n >\n <div className={`d-flex align-items-center ${styles.padding}`}>\n <div className='rounded-circle bg-white me-2'>\n <SvgContainer svg={isExpanded ? MinusSvg : PlusSvg} />\n </div>\n \n <h3 className='mb-0 font-size-normal fw-normal' id={questionId}>{props.faq.question}</h3>\n </div>\n\n <div\n className={`${styles.description}`}\n style={{ height }}\n id={panelId}\n aria-labelledby={questionId}\n aria-live='polite'\n aria-hidden={!isExpanded}\n >\n <p\n className={`mb-0 py-1 ${TopicFaqHelper.getContainerClass()}`}\n dangerouslySetInnerHTML={{ __html: markdown }}\n ref={visibleRef}\n >\n </p>\n \n <div ref={invisibleRef} aria-hidden={true} className={TopicFaqHelper.getContainerClass()} />\n </div>\n </DivButton>\n );\n}\n\nexport interface QuestionAccordionWidgetTemplateProps {\n id: string;\n name: string;\n content: Faq[];\n isBot: boolean;\n analyticsData?: HashObject;\n \n}\n\nexport function QuestionAccordionWidgetTemplate(props: QuestionAccordionWidgetTemplateProps): JSX.Element {\n useFaqJsonLd({\n faqs: props.content,\n widgetName: props.name\n });\n\n if (!props.content.length)\n return <></>;\n\n return (\n <>\n <h2 className='curated-widget-heading'>\n {props.name}\n </h2>\n\n <ul className='list-unstyled mb-n2'>\n {props.content.map((faq, index) => {\n return (\n <li className='mb-2' key={index}>\n <Question\n key={index}\n id={`${props.id}:${index}`}\n faq={faq}\n index={index}\n analyticsData={props.analyticsData}\n isBot={props.isBot}\n />\n </li>\n );\n })}\n </ul>\n </>\n );\n}\n","import React from 'react';\n\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { BG_COLOUR_CLASS_NAMES } from 'libs/shared/constants/ColourClassNames';\nimport { getDeterministicBgColorClass } from 'libs/shared/utils/getBgColorClass';\n\ninterface RectangularLogoProps {\n logoUrl?: string;\n bgColor?: string;\n name: string;\n classNames?: {\n container?: string,\n text?: string\n };\n}\n\nexport function RectangularLogo(props: RectangularLogoProps): JSX.Element {\n const colourClass = getDeterministicBgColorClass(props.name, BG_COLOUR_CLASS_NAMES);\n\n const logoStyle: React.CSSProperties = {\n backgroundImage: props.logoUrl ? `url('${props.logoUrl}')` : null,\n backgroundColor: props.bgColor\n };\n\n return (\n <div\n className={classNames(\n 'rounded-3 w-100 h-full',\n 'ratio ratio-16x9 bg-no-repeat bg-contain bg-center bg-clip-padding',\n !props.bgColor && colourClass,\n props.classNames?.container\n )}\n style={logoStyle}\n >\n {!props.logoUrl && (\n <div className='d-flex align-items-center justify-content-center w-100 h-100'>\n <span className={classNames(\n 'text-white text-center fs-5 fw-semibold text-decoration-none text-truncate p-2',\n props.classNames?.text\n )}>\n {props.name}\n </span>\n </div>\n )}\n </div>\n );\n}\n","/**\n * Tier of partners:\n * Spotlight: Highly curated page where we have devoted lot of time and effort\n * Curated: Lightly curated page\n * System generated: These partner profiles are generated using tools and hasn't been reviewed\n */\nexport enum PartnerType {\n SystemGenerated = 1,\n Curated = 2,\n Spotlight = 3\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AnalyticsOptions, EntityType, HashObject, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { RectangularLogo } from 'libs/shared/components/rectangular-logo/RectangularLogo';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { PartnerType } from 'libs/shared/enums/PartnerType';\nimport { PartnerProfile } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nconst namespace = 'shared.rectangularLogoWidgetItem';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface GetPartnerWidgetItemOptions {\n partner: PartnerProfile;\n appLink: Core.AppLink;\n analyticsData: HashObject;\n analyticsOptions: AnalyticsOptions;\n}\n\nfunction getEntityType(partner: PartnerProfile): EntityType {\n if (partner.company)\n return EntityType.Company;\n \n return EntityType.Person;\n}\n\nfunction getTitle(partner: PartnerProfile): string {\n if (partner.partnerType === PartnerType.Spotlight)\n return getPhrase('featured', { name: partner.name });\n \n if (partner.partnerType === PartnerType.Curated)\n return getPhrase('curated', { name: partner.name });\n \n return partner.name;\n}\n\nexport function getPartnerWidgetItemProps(option: GetPartnerWidgetItemOptions): RectangularLogoWidgetItemProps {\n const { partner, appLink } = option;\n\n const analyticsData = {\n ...option.analyticsData,\n id: partner.id,\n name: partner.name,\n entity: getEntityType(partner)\n };\n\n const analyticsOptions = {\n ...option.analyticsOptions,\n location: LocationContext.RectangularLogoSlidingListWidget,\n actionType: UserAction.Click,\n entity: EntityType.Person\n };\n\n const logo: RectangularLogoWidgetItemProps['logo'] = partner._logo?.value?.url ?\n {\n url: ImageHelper.createUrl(partner._logo.value.url, { size: ImageSize.Medium }),\n bgColor: partner._colour?.value\n } :\n undefined;\n\n return {\n name: partner.name,\n logo,\n appLink,\n analyticsData,\n analyticsOptions,\n title: getTitle(partner)\n };\n}\n\ninterface RectangularLogoWidgetItemProps {\n name: string;\n appLink: Core.AppLink;\n logo?: {\n url: string,\n bgColor: string\n };\n analyticsOptions: AnalyticsOptions;\n analyticsData: HashObject;\n title?: string;\n}\n\nexport function RectangularLogoWidgetItem(props: RectangularLogoWidgetItemProps): JSX.Element {\n return (\n <AppLink\n appLink={props.appLink}\n className='position-relative px-1 flex-shrink-0 col-6 col-md-3 col-lg-2'\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n title={props.title}\n >\n <RectangularLogo\n logoUrl={props.logo?.url}\n bgColor={props.logo?.bgColor}\n name={props.name}\n />\n <h2 className='h6 mt-2'>{props.name}</h2>\n </AppLink>\n );\n}\n\nexport interface RectangleLogoFixedWidgetItemProps extends FixedWidgetItemProps<PartnerProfile> {}\nexport function RectangluarLogoFixedWidgetItem(props: RectangleLogoFixedWidgetItemProps): JSX.Element {\n const widgetProps = getPartnerWidgetItemProps({\n analyticsData: props.analyticsData,\n analyticsOptions: props.analyticsOptions,\n partner: props.data,\n appLink: props.getAppLink(props.data)\n });\n\n return <RectangularLogoWidgetItem {...widgetProps} />;\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { HashObject } from 'libs/analytics/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { RectangluarLogoFixedWidgetItem } from 'libs/shared/components/widgets/items/rectangular-logo-widget-item/RectangularLogoWidgetItem';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { PartnerProfile, WidgetType } from 'libs/shared/interfaces';\n\nexport interface RectangularLogoSlidingListWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: PartnerProfile[];\n showHighlight?: boolean;\n analyticsData?: HashObject;\n appLinks: {\n partner: (partnerProfile: PartnerProfile) => Core.AppLink,\n partnerHome: () => Core.AppLink\n };\n}\n\nexport function RectangularLogoSlidingListWidgetTemplate(\n props: RectangularLogoSlidingListWidgetTemplateProps\n): JSX.Element {\n return (\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.PartnerProfiles}\n collection={props.content}\n childComponent={RectangluarLogoFixedWidgetItem}\n extraChildComponentProps={{}}\n \n prefetched\n showSeeMoreLink\n hideBleedingContent={props.showHighlight}\n analyticsData={props.analyticsData}\n getChildAppLink={props.appLinks?.partner}\n appLink={props.appLinks?.partnerHome?.()}\n />\n );\n}\n","import React from 'react';\n\nexport function PartialSearchSuggestionsBlurbWidgetTemplate(): JSX.Element {\n return (\n <div className='d-flex flex-row gap-1'>\n <div className='partial-loading-background' style={{ width: '12rem', height: '1.25rem' }}></div>\n <div className='partial-loading-background' style={{ width: '3rem', height: '1.25rem' }}></div>\n <div className='partial-loading-background' style={{ width: '1rem', height: '1.25rem' }}></div>\n <div className='partial-loading-background' style={{ width: '4rem', height: '1.25rem' }}></div>\n </div>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { BaseObject } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.searchSuggestionsBlurbWidgetTemplate';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst DEFAULT_LENGTH = 2;\n\nexport interface SearchSuggestionsBlurbWidgetTemplateProps {\n name: string;\n content: BaseObject[];\n widgetTypeId: WidgetTypeId;\n appLinks: {\n searchHome: (queryParams: HashObject, options: { replace: boolean }) => Core.AppLink\n };\n}\n\ninterface SearchSuggestionQueryItemProps {\n appLink: Core.AppLink;\n name: string;\n}\n\nfunction SearchSuggestionQueryItem(props: SearchSuggestionQueryItemProps) {\n return (\n <>\n &quot;\n <AppLink appLink={props.appLink} appLinkOptions={{\n replace: true\n }}>\n <span className='text-info hover-text-underline cursor-pointer'>{props.name}</span>\n </AppLink>\n &quot;\n </>\n );\n}\n\nexport function SearchSuggestionsBlurbWidgetTemplate(props: SearchSuggestionsBlurbWidgetTemplateProps): JSX.Element {\n const suggestions = props.content.splice(0, DEFAULT_LENGTH);\n \n if (!suggestions.length)\n return <></>;\n \n return (\n <div className='rounded-2'>\n <Text phrase='prompt' namespace={namespace} />&nbsp;\n {suggestions.map((item, index) => {\n const lastItem = suggestions.length - 1 === index;\n\n return (\n <React.Fragment key={item.name}>\n <SearchSuggestionQueryItem\n appLink={props.appLinks.searchHome({ query: item.name }, { replace: false }) }\n name={item.name}\n />\n {!lastItem ? <>&nbsp;{getPhrase('or')}&nbsp;</> : '?'}\n </React.Fragment>\n );\n })}\n </div>\n );\n}\n",":local {\n $badge-size: 1.875rem;\n\n .container:hover {\n background-color: $light-blue;\n\n .bellContainer {\n display: flex;\n }\n }\n\n .bell {\n display: none;\n }\n\n .bellContainer {\n color: $dark;\n background-color: rgba($gray-200, 0.8);\n border-radius: 50%;\n z-index: 1;\n position: absolute;\n top: map-get($spacers, 1);\n right: map-get($spacers, 1);\n\n display: none;\n\n width: $badge-size;\n height: $badge-size;\n\n &:hover,\n &.followed {\n background-color: rgba($gray-200, 0.9);\n display: flex;\n\n .bellOutline {\n display: none;\n }\n\n .bell {\n opacity: 0.75;\n display: block;\n }\n }\n }\n\n .cover {\n height: 5rem;\n width: 5rem;\n min-width: 5rem;\n }\n\n .fallbackImage {\n height: 5rem;\n min-width: 5rem;\n border: none;\n }\n\n .subText {\n font-size: 0.6875rem;\n }\n}","import React from 'react';\n\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\n\nimport styles from '../subject-stats-widget-item.module.scss';\n\nexport function PartialSubjectStatsWidgetItem(): JSX.Element {\n return (\n <div className='d-flex'>\n <div className={`${styles.cover} me-2 rounded overflow-hidden border rounded d-inline-block`}>\n <div className={styles.partialIcon}>\n <ImageFallback type={ImageFallbackType.Subject} />\n </div>\n </div>\n <div className='d-inline-block' style={{ flexBasis: '50%' }}>\n <div className='partial-loading-background mt-1' style={{ height: '19px', width: '100%' }} />\n <div className='partial-loading-background mt-1' style={{ height: '16.5px', width: '75%' }} />\n </div>\n </div>\n );\n}\n","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { PartialSubjectStatsWidgetItem } from 'libs/shared/components/widgets/items/subject-stats-widget-item/partial-loading/PartialSubjectStatsWidgetItem';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nexport function PartialStatsCoverFixedPillListLargeWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n return (\n <div className='py-2'>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\n <Row className='g-0'>\n {Array(6).fill(null).map((_, i) => {\n return (\n <Col key={i} xs={12} sm={6} lg={4}>\n <div className='position-relative mb-2'>\n <PartialSubjectStatsWidgetItem />\n </div>\n </Col>\n );\n })}\n </Row>\n </div>\n );\n}\n","import React from 'react';\n\nexport function BellFilledSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M10.33 5.26c-1.023.373-1.72 1.155-2.158 2.369-.466 1.29-.655 3.104-.67 5.533-.002.112-.038.22-.102.305L5.08 16.56A.9.9 0 0 0 5.8 18h3.306q.049.13.112.251c.13.255.32.53.566.784.493.51 1.241.965 2.216.965s1.723-.455 2.216-.965c.246-.255.436-.53.566-.784a3 3 0 0 0 .112-.251H18.2a.9.9 0 0 0 .72-1.44l-2.32-3.093a.5.5 0 0 1-.101-.305c-.018-2.27-.214-4.07-.695-5.392-.447-1.232-1.157-2.09-2.211-2.498a1.8 1.8 0 0 0-.352-.722c-.28-.34-.7-.55-1.24-.55s-.965.208-1.261.53a1.9 1.9 0 0 0-.41.73M13.77 18a2.4 2.4 0 0 1-.274.34c-.353.365-.855.66-1.497.66s-1.144-.295-1.497-.66a2.4 2.4 0 0 1-.274-.34z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function BellSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M8.172 7.629c.438-1.214 1.135-1.996 2.157-2.369a1.9 1.9 0 0 1 .41-.73C11.037 4.208 11.462 4 12 4c.542 0 .96.21 1.241.55.182.22.291.474.352.722 1.054.409 1.764 1.266 2.211 2.498.48 1.323.677 3.122.695 5.392 0 .112.037.22.101.305l2.32 3.093A.9.9 0 0 1 18.2 18h-3.306a3 3 0 0 1-.112.251c-.13.255-.32.53-.566.784-.493.51-1.241.965-2.216.965s-1.723-.455-2.216-.965a3.3 3.3 0 0 1-.566-.784A3 3 0 0 1 9.106 18H5.8a.9.9 0 0 1-.72-1.44l2.32-3.093a.5.5 0 0 0 .101-.305c.016-2.429.205-4.243.67-5.533M18 17l-2.2-2.933a1.5 1.5 0 0 1-.301-.898c-.017-2.241-.215-3.9-.635-5.058-.411-1.134-1.016-1.738-1.854-1.981A3.6 3.6 0 0 0 12 6a4.2 4.2 0 0 0-1.115.132c-.809.223-1.381.752-1.773 1.836-.404 1.12-.595 2.79-.61 5.2-.003.321-.106.638-.302.899L6 17zm-7.771 1c.074.112.166.228.274.34.353.365.855.66 1.497.66s1.144-.295 1.497-.66c.108-.112.2-.228.274-.34z'\n />\n </svg>\n );\n}\n","import * as React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { BellFilledSvg } from 'libs/shared/images/svg/objects/BellFilledSvg';\nimport { BellSvg } from 'libs/shared/images/svg/objects/BellSvg';\nimport { Classification } from 'libs/shared/interfaces';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nimport { ClassificationBadgeType, SubjectStatsBadge } from './subject-stats-badge/SubjectStatsBadge';\n\nimport styles from './subject-stats-widget-item.module.scss';\n\nconst namespace = 'shared.subjectStatsWidgetItem';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SubjectStatsWidgetItemProps {\n classification: Classification;\n getAppLink: (classification: Classification) => Core.AppLink;\n onToggleFollowClassification: (classification: Classification, location: LocationContext) => void;\n canFollowTopics: boolean;\n hideCounts: boolean;\n\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\nexport function SubjectStatsWidgetItem(props: SubjectStatsWidgetItemProps): JSX.Element {\n const [ hasLoadedImage, setHasLoadedImage ] = React.useState(false);\n const isComingSoon = props.classification?.status === ClassificationStatus.ComingSoon;\n const isFollowing = TopicsHelper.isFollowing(props.classification);\n\n const {\n dashboardNewVideosCount,\n childDashboardNewVideoCount,\n dashboardResourceCount,\n childDashboardResourceCount,\n dashboardVideoCount,\n childDashboardVideoCount,\n childClassificationCount\n } = TopicsHelper.getCounts(props.classification);\n\n const videoCount = dashboardVideoCount + childDashboardVideoCount;\n const resourceCount = dashboardResourceCount + childDashboardResourceCount;\n const newVideoCount = dashboardNewVideosCount + childDashboardNewVideoCount;\n\n function onToggleFollowClassification(e: React.MouseEvent<HTMLDivElement>): void {\n e.stopPropagation();\n e.preventDefault();\n\n if (!props.canFollowTopics)\n return;\n\n props.onToggleFollowClassification?.(props.classification, LocationContext.SubjectStatsWidgetItem);\n }\n\n function getSubtext(): string {\n if (props.classification.status === ClassificationStatus.ComingSoon || props.hideCounts)\n return '';\n\n let text = '';\n\n if (videoCount)\n text += `${getPhrase('videos', { smartCount: videoCount })} `;\n\n if (resourceCount)\n text += ` • ${getPhrase('resources', { smartCount: resourceCount })}`;\n\n if (TopicsHelper.isTopLevelTopic(props.classification) && childClassificationCount > 0) {\n if (!text)\n return getPhrase('topics', { smartCount: childClassificationCount });\n\n text = `${getPhrase('topics', { smartCount: childClassificationCount })} • ` + text;\n }\n\n return text;\n }\n\n function getBadgeType(): ClassificationBadgeType {\n if (props.classification.status === ClassificationStatus.ComingSoon)\n return 'coming-soon';\n\n const { datePublished } = props.classification;\n if (!!datePublished && DateHelper.timeSince(datePublished, 'day') <= 30)\n return 'new-topic';\n\n if (newVideoCount > 0 && !props.hideCounts)\n return 'new-videos';\n\n return null;\n }\n\n const subText = getSubtext();\n\n return (\n <AppLink\n className={`d-flex no-decoration rounded ${styles.container}`}\n appLink={props.getAppLink?.(props.classification)}\n analyticsData={{\n ...props.analyticsData,\n id: props.classification?.id,\n name: props.classification?.name,\n presentationId: props.classification.presentationId,\n comingSoon: !!isComingSoon,\n videoCount,\n resourceCount,\n newVideoCount,\n datePublished: props.classification.datePublished,\n countsHidden: !!props.hideCounts\n }}\n analyticsOptions={{\n location: LocationContext.SubjectStatsWidgetItem,\n ...props.analyticsOptions,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Cover\n }}\n >\n {!hasLoadedImage && (\n <ImageFallback\n type={ImageFallbackType.Subject}\n extraClasses={`ms-2 rounded-end-lg ${styles.fallbackImage}`}\n />\n )}\n <div className={`${styles.cover} me-2 rounded overflow-hidden`}>\n <BaseImage\n data={props.classification.cover}\n imageOptions={{ size: ImageSize.Medium }}\n imageClassName={isComingSoon ? 'opacity-50' : ''}\n onLoad={() => setHasLoadedImage(true)}\n >\n {props.canFollowTopics && (\n <DivButton\n onClick={onToggleFollowClassification}\n className={`\n align-items-center justify-content-center cursor-pointer\n ${styles.bellContainer} ${isFollowing ? styles.followed : ''}\n `}\n >\n <SvgContainer\n svg={BellFilledSvg}\n className={`svg-container ${styles.bell}`}\n />\n <SvgContainer\n svg={BellSvg}\n className={`svg-container ${styles.bellOutline}`}\n />\n </DivButton>\n )}\n </BaseImage>\n\n </div>\n <div>\n <h3 className='h6 mb-0 clamp-2 mt-1'>\n {props.classification.name}\n </h3>\n\n {!!subText && (\n <p className={`mb-0 ${styles.subText}`}>\n {subText}\n </p>\n )}\n\n <SubjectStatsBadge badgeType={getBadgeType()} newVideoCount={newVideoCount} />\n </div>\n </AppLink>\n );\n}\n","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { SubjectStatsWidgetItem } from 'libs/shared/components/widgets/items/subject-stats-widget-item/SubjectStatsWidgetItem';\nimport { Classification } from 'libs/shared/interfaces';\n\nexport interface StatsCoverFixedPillListLargeWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Classification[];\n analyticsData?: HashObject;\n \n hasTableOfContents: boolean;\n isTertiaryCustomerWithoutExchange: boolean;\n appLinks: {\n classification: (classification: Classification) => Core.AppLink\n };\n onToggleFollowClassification: (classification: Classification, location: LocationContext) => void;\n}\n\nexport function StatsCoverFixedPillListLargeWidgetTemplate(\n props: StatsCoverFixedPillListLargeWidgetTemplateProps\n): JSX.Element {\n /**\n * For V1 of the release of topic directories, we will not be exposing the following icon.\n * This is because currently following is useless. Once we have implemented an email for when\n * coming soon topics are released, we will enable this.\n */\n // const canFollowTopics = props.hasPermissions(PermissionName.FollowSubjects) && !!props.onToggleFollowClassification;\n\n return (\n <>\n <WidgetHeader name={props.name} description={props.description} />\n <Row className='mb-n2'>\n {props.content.map(c => {\n return (\n <Col className='position-relative pb-2' key={c.id} xs={12} sm={6} lg={props.hasTableOfContents ? 6 : 4} xl={4}>\n <SubjectStatsWidgetItem\n classification={c}\n analyticsData={props.analyticsData}\n getAppLink={props.appLinks?.classification}\n onToggleFollowClassification={props.onToggleFollowClassification}\n // canFollowTopics={canFollowTopics}\n canFollowTopics={false}\n\n /**\n * We're currently hiding counts for tertiary customers without the exchange\n * because all counting is done by a background process that can't take the\n * current users' credentials into account. Because about half of our tertiary\n * customers don't have the exchange, and the other half do, and we use exchange\n * content on our tertiary topics, the counts will be higher for non-exchange\n * customers than they really are for them.\n * \n * This is shit and hopefully we can come up with a better solution one day\n * - Josh\n */\n hideCounts={props.isTertiaryCustomerWithoutExchange}\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}\n","import React from 'react';\n\nimport { PartialTagItem } from 'libs/shared/components/tags/PartialTagItem';\nimport { PartialDynamicWidget } from 'libs/shared/components/widgets/dynamic-widget';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nexport function PartialTagItemComponent() {\n return (\n <div className='me-2'>\n <PartialTagItem />\n </div>\n );\n}\n\nexport function PartialTagSlidingListWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n const hasDivider = typeof props.predicate === 'function' && props.predicate() || false;\n \n return (\n <>\n <PartialDynamicWidget\n partialLoadingComponent={PartialTagItemComponent}\n partialLoadingOptions={{\n numItems: 4\n }}\n />\n {hasDivider &&\n <hr />\n }\n </>\n );\n}\n","import React from 'react';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\nimport { Core } from 'libs/common/backbone/index';\n\nimport { DynamicWidget } from 'libs/shared/components/widgets/dynamic-widget';\nimport { TagWidgetItem, type TagWidgetItemProps } from 'libs/shared/components/widgets/items/tag-widget-item/TagWidgetItem';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { BaseObject } from 'libs/shared/interfaces';\n\nimport { PartialTagItemComponent } from './partial-loading/PartialTagSlidingListWidgetTemplate';\n\nexport interface TagSlidingListWidgetTemplateProps {\n name: string;\n content: BaseObject[];\n widgetTypeId: WidgetTypeId;\n appLinks: {\n tag: (tag: BaseObject) => Core.AppLink\n };\n getSelectedItems: (type: WidgetTypeId) => BaseObject[];\n}\n\nexport function TagSlidingListWidgetTemplate(props: TagSlidingListWidgetTemplateProps): JSX.Element {\n const selectedItems = props.getSelectedItems(props.widgetTypeId);\n\n const unappliedOptions = props.content.filter(item => !selectedItems.find(s => s.id === item.id));\n\n const collection = [ ...selectedItems, ...unappliedOptions ];\n\n function onClick(tag: BaseObject) {\n AppLinkHelper.trigger(props.appLinks.tag(tag));\n }\n \n return (\n <DynamicWidget\n collection={collection}\n childComponent={(childProps: TagWidgetItemProps) => (\n <TagWidgetItem\n {...childProps}\n selectedItems={selectedItems}\n onClick={onClick}\n />\n )}\n partialLoadingComponent={PartialTagItemComponent}\n partialLoadingOptions={{\n numItems: 4\n }}\n />\n );\n}\n","import React from 'react';\n\nfunction PartialVideoGuidanceTag(): JSX.Element {\n return (\n <div\n className='partial-loading-background rounded-pill me-2'\n style={{ height: '2.5rem', width: '9.375rem' }}\n />\n );\n}\n\nexport function PartialVideoGuidance(): JSX.Element {\n return (\n <div className='d-flex align-items-center mw-100'>\n <PartialVideoGuidanceTag />\n <PartialVideoGuidanceTag />\n </div>\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .partialHeroThumbnail {\n position: relative;\n width: 100%;\n padding-bottom: 56.25%;\n }\n\n .partialVideoTitleText {\n width: 12rem;\n height: 1.5rem;\n }\n\n .partialDescription {\n width: 80%;\n height: 3rem;\n\n @include media(\"<=md\") {\n display: none;\n }\n }\n \n .details {\n display: flex;\n justify-content: space-between;\n height: 100%;\n flex-direction: column;\n\n @include media(\"<=md\") {\n padding-top: map-get($spacers, 2);\n }\n }\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { PartialVideoGuidance } from 'libs/shared/components/video-guidance/tag/partial-loading/PartialVideoGuidanceTag';\n\nimport styles from './partial-featured-widget-template.module.scss';\n\nexport function PartialThumbnailFeaturedMediaWidgetTemplate(): JSX.Element {\n return (\n <>\n <Row>\n <Col xs={12} md={6}>\n <div className={`${styles.partialHeroThumbnail} partial-loading-background rounded-3`}></div>\n </Col>\n <Col xs={12} md={6}>\n <div className={styles.details}>\n <div>\n <div style={{ height: '1.5rem' }}>\n <div className='partial-loading-background' style={{ height: '1.2rem', width: '12rem' }} />\n </div>\n <div className='partial-loading-background' style={{ height: '1.5625rem', width: '15rem' }}></div>\n </div>\n\n <div className='pt-2 mw-100'>\n <PartialVideoGuidance />\n </div>\n </div>\n </Col>\n </Row>\n </>\n );\n}\n","@import '~styles/utils/mixins';\n@import '~styles/utils/include-media';\n:local {\n .partialHeroThumbnail {\n position: relative;\n width: 100%;\n padding-bottom: 56.25%;\n }\n\n .partialSeriesText {\n width: 6.25rem;\n height: 1rem;\n }\n\n .partialVideoTitleText {\n width: 16rem;\n height: 2rem;\n }\n\n .partialBadge {\n width: 4rem;\n height: 1rem;\n }\n\n .partialDescription {\n width: 80%;\n height: 4rem;\n }\n\n .partialSubject {\n width: 6.25rem;\n height: 1.5rem;\n }\n\n .partialHeading {\n height: 1.5rem;\n width: 8.4375rem;\n }\n\n .guidance {\n position: absolute;\n bottom: 0;\n gap: map-get($spacers, 1);\n\n @include media(\"<md\") {\n position: relative;\n }\n }\n\n .responsiveGuidance {\n @include media('>md') {\n @include responsive-guidance-tags;\n }\n\n @include media('<=sm') {\n @include responsive-guidance-tags;\n }\n }\n\n .description {\n @include clamp(4);\n \n @include media(\"<xl\") {\n @include clamp(3);\n }\n \n @include media(\"<md\") {\n display: none;\n }\n }\n\n .details {\n @include media(\"<md\") {\n padding-top: map-get($spacers, 2);\n }\n }\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, LocationContext } from 'libs/analytics/interfaces';\n\nimport { AudienceLabel } from 'libs/shared/components/audience-label/AudienceLabel';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { BadgeListContainer } from 'libs/shared/components/badges/BadgeListContainer';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { VideoItemGuidance } from 'libs/shared/components/video-list/components/video-guidance/VideoItemGuidance';\nimport { VideoItemActions } from 'libs/shared/components/video-list/components/video-item-actions/VideoItemActions';\nimport { VideoItemTitle } from 'libs/shared/components/video-list/components/video-item-title/VideoItemTitle';\nimport { VideoSubText } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { PresentationAudience, Video } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './hero-video.module.scss';\n\ninterface HeroVideoProps {\n video: Video;\n presentationAudiences: PresentationAudience[];\n showVideoGuidance: boolean;\n getVideoAppLink: (video: Video, opts: GetVideoAppLinkOptions) => Core.AppLink;\n hideInteractiveBadge?: boolean;\n badgePosition?: 'thumbnail' | 'info-panel';\n titleClassName?: string;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n commonVideoProps: CommonVideoProps;\n showNewVideoIndicator?: boolean;\n}\n\nHeroVideo.defaultProps = {\n newDurationStyle: true,\n badgePosition: 'thumbnail'\n};\n\nexport function HeroVideo(props: HeroVideoProps): JSX.Element {\n const videoAudiences = props.video?.subjectPresentationAudiences?.data;\n const mergedAudience = useMergeAudiences(videoAudiences, props.presentationAudiences);\n\n const analyticsOptions = AnalyticsHelper.mergeOptions(props.analyticsOptions, {\n location: LocationContext.ClassificationHero,\n entity: VideoHelper.getAnalyticsEntity(props.video)\n });\n\n const containerRef = React.useRef(null);\n \n if (!props.video)\n return <></>;\n\n return (\n <Row>\n <Col xs={12} md={6}>\n <div ref={containerRef} >\n <VideoThumbnail\n analyticsOptions={analyticsOptions}\n video={props.video}\n appLink={props.getVideoAppLink?.(props.video, {})}\n imageOptions={{ size: ImageSize.Medium }}\n textPosition={ThumbnailTextPosition.Independent}\n type='static'\n audience={props.badgePosition === 'thumbnail' ? mergedAudience : null}\n hideRating={props.badgePosition === 'thumbnail' ? !!mergedAudience : true}\n commonVideoProps={props.commonVideoProps}\n />\n </div>\n </Col>\n <Col xs={12} md={6} className={`${styles.details} position-relative`}>\n <div className='d-flex justify-content-between'>\n <div className='overflow-hidden'>\n <VideoSubText\n type={props.commonVideoProps.subTextType}\n appLink={props.commonVideoProps.getSubTextAppLink?.(props.video)}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n video={props.video}\n className='text-reset clamp-1'\n />\n <VideoItemTitle\n yearGroups={props.commonVideoProps.yearGroups}\n video={props.video}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n appLink={props.getVideoAppLink?.(props.video, {})}\n titleSize='h4'\n showNewVideoIndicator={props.showNewVideoIndicator}\n showPadlock={!props.commonVideoProps.hasStudentExperience && !props.commonVideoProps.hasGuestExperience}\n titleClassName={props.titleClassName}\n clampLevel={2}\n />\n </div>\n <VideoItemActions\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n video={props.video}\n />\n </div>\n\n {props.badgePosition === 'info-panel' && (\n <BadgeListContainer className='pb-1'>\n {!props.hideInteractiveBadge && <Badge type={ BadgeType.Interactive } data={props.video.interactives} />}\n <Badge type={ BadgeType.Rating } data={VideoHelper.getRating(props.video)} />\n <Badge type={ BadgeType.ProductionYear } data={props.video.productionYear} />\n </BadgeListContainer>\n )}\n\n <p className='mb-1'><span className={styles.description}>{props.video.description}</span></p>\n \n {props.badgePosition === 'info-panel' && (\n <AudienceLabel\n audience={mergedAudience}\n className='mt-1'\n border='dark'\n />\n )}\n\n {props.showVideoGuidance && (\n <VideoItemGuidance\n video={props.video}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n containerClassName={`d-flex ${styles.guidance}`}\n responsiveClassName={styles.responsiveGuidance}\n commonVideoProps={props.commonVideoProps}\n />\n )}\n </Col>\n </Row>\n );\n}\n\nexport function PartialHeroVideo(): JSX.Element {\n return (\n <>\n <div className={`partial-loading-background mb-2 ${styles.partialHeading}`} />\n <div className='row pb-3'>\n <div className='col-6 p1'>\n <div className={`${styles.partialHeroThumbnail} partial-loading-background rounded-3`}></div>\n </div>\n <div className='col-6 p1'>\n <div className={`partial-loading-background mb-1 ${styles.partialSeriesText}`}></div>\n <div className={`partial-loading-background my-1 ${styles.partialVideoTitleText}`}></div>\n <div className='d-flex'>\n <div className={`partial-loading-background my-1 me-1 ${styles.partialBadge}`}></div>\n <div className={`partial-loading-background my-1 ms-1 ${styles.partialBadge}`}></div>\n </div>\n <div className={`partial-loading-background my-1 ${styles.partialDescription}`}></div>\n <div className={`partial-loading-background mt-2 ${styles.partialSubject}`}></div>\n </div>\n </div>\n </>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { HeroVideo } from 'libs/shared/apps/subjects/components/hero-video/HeroVideo';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { PresentationAudience, Video } from 'libs/shared/interfaces';\nimport { VideoWidgetTemplateContent } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nexport interface ThumbnailFeaturedMediaWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: VideoWidgetTemplateContent;\n audiences: PresentationAudience[];\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink\n };\n analyticsData?: HashObject;\n \n hasPermissions: HasPermissionsFunc;\n settings: {\n hasTopicDirectories: boolean\n };\n commonVideoProps: CommonVideoProps;\n}\n\nexport function ThumbnailFeaturedMediaWidgetTemplate(props: ThumbnailFeaturedMediaWidgetTemplateProps): JSX.Element {\n const video = ArrayHelper.first(WidgetHelper.getVideoContent(props.content));\n\n return (\n <>\n <WidgetHeader name={props.name} description={props.description} />\n <HeroVideo\n video={video}\n presentationAudiences={props.audiences}\n getVideoAppLink={props.appLinks?.videoType}\n analyticsData={props.analyticsData}\n hideInteractiveBadge\n showVideoGuidance={VideoHelper.showVideoGuidance(props.hasPermissions)}\n showNewVideoIndicator={props.settings?.hasTopicDirectories}\n commonVideoProps={props.commonVideoProps}\n />\n </>\n );\n}\n",":local {\n .actions {\n background: none;\n color: $white;\n border: none;\n padding: 0;\n outline: inherit;\n border-radius: 50%;\n width: 1.5rem;\n height: 1.5rem;\n\n &:hover {\n background-color: rgba(0, 0, 0, .5);\n }\n }\n\n .actionsContainer {\n position: absolute;\n top: 0;\n right: 0;\n width: 1.5rem;\n height: 1.5rem;\n margin-top: 0.9375rem;\n margin-right: 0.9375rem;\n z-index: 10;\n }\n\n .ownerLogo {\n position: absolute;\n top: 0;\n left: 0;\n width: 2rem;\n height: 2rem;\n margin-top: 0.9375rem;\n margin-left: 0.9375rem;\n }\n\n .dropStyle {\n box-shadow: 0 0 $focus-ring-blur 2px $gray-900;\n border-radius: $border-radius-lg;\n background: $gray-900;\n }\n\n .dragStyle {\n opacity: 0.5;\n }\n}","import React from 'react';\n\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Core } from 'libs/common/core';\n\nimport { AnalyticsOptions, EntityType, HashObject, UserAction } from 'libs/analytics/interfaces';\n\nimport { ActionOptions, Actions } from 'libs/shared/components/actions/Actions';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DragDropMoveWrapper } from 'libs/shared/components/drag-drop-move/DragDropMoveWrapper';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { Folder } from 'libs/shared/interfaces';\n\nimport styles from './library-folder.module.scss';\n\ninterface LibraryFolderProps {\n folder: Folder;\n showOwnerLogo?: boolean;\n drag?: boolean;\n drop?: boolean;\n getAppLink: (f: Folder) => Core.AppLink;\n getFolderActions?: (f: Folder) => ActionOptions[];\n analyticsOptions?: AnalyticsOptions;\n analyticsData?: HashObject;\n}\n\nexport function LibraryFolder(props: LibraryFolderProps): JSX.Element {\n const thumbnailUrl = props.folder.thumbnail ?\n UrlHelper.urlBuilder(props.folder.thumbnail.url, { size: ImageSize.Small }) :\n null;\n\n const owner = props.folder?.libraries?.data?.[0]?.owner;\n const ownerLogoUrl = props.showOwnerLogo && !!owner?.logo?.url ?\n UrlHelper.urlBuilder(owner.logo.url, { size: ImageSize.Small }) :\n null;\n\n const actions = props.getFolderActions?.(props.folder);\n\n const analyticsData = props.analyticsData ? {\n id: props.folder.id.toString(),\n name: props.folder.name,\n ...props.analyticsData\n } : undefined;\n\n const analyticsOptions = props.analyticsOptions ? {\n actionType: UserAction.Click,\n entity: EntityType.Folder,\n\n ...props.analyticsOptions\n } : undefined;\n\n return (\n <DragDropMoveWrapper\n draggable={props.drag && { id: props.folder.id, data: props.folder }}\n droppable={props.drop && { id: props.folder.id, data: props.folder }}\n dropStye={styles.dropStyle}\n dragStyle={styles.dragStyle}\n >\n <div className='position-relative'>\n <AppLink\n className='rounded-3 d-block text-decoration-none'\n appLink={props.getAppLink(props.folder)}\n title={props.folder.name}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <BaseImage\n data={thumbnailUrl}\n imageType={ImageType.Thumbnails}\n imageClassName='rounded-top-lg'\n >\n <ImageFallback\n name={props.folder.name}\n type={ImageFallbackType.Folder}\n extraClasses='rounded-top-lg'\n />\n </BaseImage>\n <h3 className='bg-white border-start border-end border-bottom rounded-bottom-lg font-size-normal fw-semibold mb-0 p-2'>\n <span className='text-truncate d-block'>{props.folder.name}</span>\n </h3>\n </AppLink>\n {actions?.length &&\n <Actions\n actions={actions}\n className={styles.actionsContainer}\n actionsDropdownClassName={styles.actions}\n // Intentionally setting to the default SVG size\n dropdownToggleSvgSize={null}\n />\n }\n {!!ownerLogoUrl &&\n <img src={ownerLogoUrl} className={`rounded-circle ${styles.ownerLogo}`} alt={`${owner?.name} logo`} title={owner?.name || ''} />\n }\n </div>\n </DragDropMoveWrapper>\n );\n}\n","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/core';\n\nimport { HashObject, LocationContext } from 'libs/analytics/interfaces';\n\nimport { LibraryFolder } from 'libs/shared/components/library-folder/LibraryFolder';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { Folder } from 'libs/shared/interfaces';\n\nexport interface ThumbnailFixedListFolderSmallWidgetTemplateProps {\n name: string;\n seeMoreLink: Core.AppLink;\n content: Folder[];\n appLinks: {\n folder: (folder: Folder, opts?: { libraryId?: string, sort?: string }) => Core.AppLink\n };\n description: string;\n widgetTypeId: WidgetTypeId;\n badgeComponent: JSX.Element;\n getAnalyticsData?: (itemIndex: number) => HashObject;\n}\n\nexport function ThumbnailFixedListFolderSmallWidgetTemplate(\n props: ThumbnailFixedListFolderSmallWidgetTemplateProps\n): JSX.Element {\n function getAppLink(folder: Folder) {\n if (props.widgetTypeId === WidgetTypeId.SearchMySchoolLibraryFolder) {\n const libraryId = folder?.libraries?.data?.[0]?.id;\n return props.appLinks.folder(folder, { libraryId });\n }\n\n return props.appLinks.folder(folder);\n }\n\n const showOwnerLogo = props.widgetTypeId === WidgetTypeId.SearchMySchoolLibraryFolder;\n \n return (\n <>\n <WidgetHeader\n name={props.name}\n description={props.description}\n showSeeMoreLink={!!props.seeMoreLink}\n appLink={props.seeMoreLink}\n badgeComponent={props.badgeComponent}\n />\n <Row as='ul' className='list-unstyled mx-n1 mb-n2'>\n {props.content.map((f, idx) => {\n const analyticsData = typeof props.getAnalyticsData === 'function' ? props.getAnalyticsData(idx) : {};\n \n return (\n <Col as='li' key={f.id} lg={3} md={4} sm={6} xs={12} className='pb-3 px-1'>\n <LibraryFolder\n folder={f}\n getAppLink={getAppLink}\n showOwnerLogo={showOwnerLogo}\n analyticsData={analyticsData}\n analyticsOptions={{\n location: LocationContext.ThumbnailFixedListFolderSmallWidget\n }}\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}\n",":local {\n .subjectItem {\n aspect-ratio: 14 / 5;\n }\n} ","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nimport styles from './partial-thumbnail-fixed-list-large-widget-template.module.scss';\n\nexport function PartialThumbnailFixedListLargeWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n const PARTIAL_SUBJECTS = [...Array(2)];\n\n return (\n <div>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\n <Row className='mx-n1'>\n {PARTIAL_SUBJECTS.map((_, i) => {\n return (\n <Col key={i} sm={12} md={6} className='p-1'>\n <div className={`${styles.subjectItem} partial-loading-background rounded-3`} />\n </Col>\n );\n })}\n </Row>\n </div>\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .appLink:hover {\n text-decoration: none;\n cursor: pointer;\n }\n\n .container {\n padding: $spacer;\n background-repeat: no-repeat;\n background-size: contain;\n background-position: right;\n\n //fallback color\n background-color: $gray-900;\n\n &.large {\n min-height: 9.7rem; // 155.2px\n }\n\n &.small {\n min-height: 7.653rem; // 122.44px\n\n >.content {\n @include media('>lg') {\n width: 70%;\n }\n }\n }\n }\n\n .content {\n width: 50%;\n padding-right: 1rem;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n\n .top {\n color: $white;\n font-size: 1rem;\n }\n\n .title {\n margin-bottom: 0.0725rem;\n line-height: normal;\n overflow-y: clip;\n overflow-x: visible;\n }\n\n .preTitle {\n font-size: 0.875rem;\n }\n\n .description {\n font-size: 0.875rem;\n margin-bottom: 0.937rem;\n }\n }\n\n .cover {\n width: 25%;\n background-size: contain;\n aspect-ratio: 1;\n margin: auto;\n }\n\n .button {\n @include media('<=md') {\n display: none;\n }\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { AnalyticsOptions, HashObject } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport styles from './thumbnail-widget-item.module.scss';\n\nconst namespace = 'shared.thumbnailWidgetItem';\n\ninterface ThumbnailWidgetContentProps extends ThumbnailWidgetItemProps {}\n\nfunction ThumbnailWidgetContent(props: ThumbnailWidgetContentProps): JSX.Element {\n const style: React.CSSProperties = {};\n\n if (props.data.fallbackBackgroundColor)\n style.backgroundColor = props.data.fallbackBackgroundColor;\n \n if (props.data.backgroundColor)\n style.backgroundColor = props.data.backgroundColor;\n\n if (props.data.thumbnailUrl)\n style.backgroundImage = `url('${props.data.thumbnailUrl}')`;\n\n return (\n <div\n className={classNames(\n 'd-flex position-relative rounded-3 h-100',\n styles.container,\n props.isLarge ? styles.large : styles.small\n )}\n style={style}\n >\n <div className={classNames(styles.content, !props.isLarge && 'justify-content-center')}>\n <div className={`${styles.top}`}>\n {props.data.preTitle && props.data.preTitle.length &&\n <p className={`${styles.preTitle} mb-1 text-white`} title={props.data.preTitle}>{props.data.preTitle}</p>\n }\n <p title={props.data.name} className={classNames(\n 'h5 text-shadow hover-text-underline',\n styles.title,\n props.isLarge ? 'mb-0 text-wrap clamp-2' : 'text-wrap clamp-3'\n )}>\n {props.data.name}\n </p>\n\n {props.isLarge && (\n <div className={`text-start text-shadow ${styles.description}`}>\n <p className='clamp-3' title={props.data.description}>{props.data.description}</p>\n </div>\n )}\n </div>\n\n {props.isLarge && (\n <div className={styles.button}>\n <div className={classNames(!props.appLink && 'cursor-default', 'btn btn-outline-dark')}>\n {props.data?.buttonText || LanguageService.getPhrase(namespace, 'buttonLabel')}\n </div>\n </div>\n )}\n </div>\n\n {!props.data.thumbnailUrl && !!props.data.coverUrl && (\n <div\n className={`${styles.cover}`}\n style={{\n backgroundImage: `url('${props.data.coverUrl}')`\n }}>\n </div>\n )}\n\n </div>\n );\n}\n\ninterface ThumbnailWidgetData {\n name: string;\n preTitle?: string;\n \n description?: string;\n coverUrl?: string;\n thumbnailUrl?: string;\n backgroundColor?: string;\n fallbackBackgroundColor?: string;\n buttonText?: string;\n}\n\nexport interface ThumbnailWidgetItemProps {\n data: ThumbnailWidgetData;\n appLink?: Core.AppLink;\n appLinkOptions?: Core.AppLinkOptions;\n isLarge?: boolean;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\nfunction ThumbnailWidgetItem(props: ThumbnailWidgetItemProps): JSX.Element {\n if (props.appLink)\n return (\n <AppLink\n className={styles.appLink}\n appLink={props.appLink}\n appLinkOptions={props.appLinkOptions}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n >\n <ThumbnailWidgetContent {...props} />\n </AppLink>\n );\n\n return <ThumbnailWidgetContent {...props} />;\n}\n\nconst Memoized = React.memo(ThumbnailWidgetItem);\n\nexport { Memoized as ThumbnailWidgetItem };\n","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { ThumbnailWidgetItem, ThumbnailWidgetItemProps } from 'libs/shared/components/widgets/items/thumbnail-widget-item/ThumbnailWidgetItem';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { Classification } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nconst namespace = 'shared.thumbnailFixedListLargeWidgetTemplate';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface GetThumbnailWidgetItemPropsOptions {\n item: Classification;\n appLinks: ThumbnailFixedListLargeWidgetTemplateProps['appLinks'];\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\nfunction getThumbnailWidgetItemProps(options: GetThumbnailWidgetItemPropsOptions): ThumbnailWidgetItemProps {\n const baseProps: ThumbnailWidgetItemProps = {\n data: {\n name: options.item.name,\n description: options.item.description\n }\n };\n\n const isComingSoon = options.item?.status === ClassificationStatus.ComingSoon;\n const analyticsData = {\n ...options.analyticsData,\n id: options.item?.id,\n name: options.item?.name,\n presentationId: options.item?.presentationId,\n comingSoon: !!isComingSoon\n };\n \n const analyticsOptions = {\n location: LocationContext.ClassificationListItem,\n ...options.analyticsOptions,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n return {\n ...baseProps,\n data: {\n ...baseProps.data,\n backgroundColor: options.item.metadata?.backgroundColor,\n coverUrl: ImageHelper.createUrl(options.item.cover?.url, { size: ImageSize.Small }),\n thumbnailUrl: ImageHelper.createUrl(options.item.thumbnail?.url, { size: ImageSize.Medium }),\n buttonText: getPhrase('exploreTopic')\n },\n appLink: options.appLinks?.classification?.(options.item),\n isLarge: true,\n analyticsData,\n analyticsOptions\n };\n}\n\nexport interface ThumbnailFixedListLargeWidgetTemplateProps {\n name: string;\n description: string;\n content: Classification[];\n widgetTypeId: WidgetTypeId;\n isPreviewing: boolean;\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink\n };\n analyticsData?: HashObject;\n}\n\nexport function ThumbnailFixedListLargeWidgetTemplate(props: ThumbnailFixedListLargeWidgetTemplateProps): JSX.Element {\n return (\n <>\n <WidgetHeader\n name={props.name}\n description={props.description}\n content={props.content}\n widgetTypeId={props.widgetTypeId}\n isPreviewing={props.isPreviewing}\n />\n <Row as='ul' className='list-unstyled mx-n1 mb-n2'>\n {props.content.map(c => {\n return (\n <Col as='li' key={c.id} sm={12} xl={6} className='px-1 pb-2'>\n <ThumbnailWidgetItem\n {...getThumbnailWidgetItemProps({\n appLinks: props.appLinks,\n item: c,\n analyticsData: props.analyticsData\n })}\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}\n",":local {\n .partialThumbnail {\n position: relative;\n width: 100%;\n padding-bottom: 56.25%;\n }\n\n .row {\n row-gap: map-get($spacers, 3);\n }\n}","import React from 'react';\n\nimport { PartialVideoGuidance } from 'libs/shared/components/video-guidance/tag/partial-loading/PartialVideoGuidanceTag';\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nimport styles from './partial-thumbnail-fixed-list-media-large-widget-template.module.scss';\n\nexport const PartialThumbnailFixedListMediaLargeWidgetTemplate = (props: PartialWidgetTemplateProps): JSX.Element => {\n return (\n <>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\n <div className={`row ${styles.row}`}>\n <div className='col-sm-12 col-md-6'>\n <div className={`${styles.partialThumbnail} partial-loading-background rounded-3`}></div>\n <PartialThumbnailText />\n\n <div className='pt-1 mw-100'>\n <PartialVideoGuidance />\n </div>\n </div>\n\n <div className='col-sm-12 col-md-6'>\n <div className={`${styles.partialThumbnail} partial-loading-background rounded-3`}></div>\n <PartialThumbnailText />\n\n <div className='pt-1 mw-100'>\n <PartialVideoGuidance />\n </div>\n </div>\n </div>\n </>\n );\n};\n\nconst PartialThumbnailText = (): JSX.Element => {\n return (\n <div className='mt-2'>\n <div style={{ height: '1.4rem' }}>\n <div className='partial-loading-background' style={{ height: '1.1rem', width: '12rem' }} />\n </div>\n <div className='partial-loading-background' style={{ height: '1.33875rem', width: '15rem' }}></div>\n </div>\n );\n};\n","@import '~styles/utils/mixins';\n@import '~styles/utils/include-media';\n:local {\n .guidance { \n gap: map-get($spacers, 1);\n }\n\n .responsiveGuidance {\n @include media('>md') {\n @include responsive-guidance-tags;\n }\n\n @include media('<=sm') {\n @include responsive-guidance-tags;\n }\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions, ClickDescriptor, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { ThumbnailText } from 'libs/shared/components/thumbnails/thumbnail-text/ThumbnailText';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { VideoItemGuidance } from 'libs/shared/components/video-list/components/video-guidance/VideoItemGuidance';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { PresentationAudience, Video, VideoTypes } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './thumbnail-fixed-list-media-large-widget.module.scss';\n\nexport interface ThumbnailFixedListMediaLargeWidgetTemplateItemProps {\n video: VideoTypes;\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink\n };\n audiences: PresentationAudience[];\n hasPermissions: HasPermissionsFunc;\n analyticsData?: HashObject;\n\n settings: {\n hasTopicDirectories: boolean\n };\n\n commonVideoProps: CommonVideoProps;\n}\n\nexport function ThumbnailFixedListMediaLargeWidgetTemplateItem(\n props: ThumbnailFixedListMediaLargeWidgetTemplateItemProps\n): JSX.Element {\n const videoAppLink = props.appLinks?.videoType?.(props.video, {});\n\n const containerRef = React.useRef(null);\n\n const analyticsOptions: AnalyticsOptions = {\n actionType: UserAction.Click,\n entity: VideoHelper.getAnalyticsEntity(props.video),\n location: LocationContext.ThumbnailFixedListMediaLargeWidget,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n const mergedAudience = useMergeAudiences(props.video.subjectPresentationAudiences?.data, props.audiences);\n\n return (\n <div className='col-md-6'>\n <div ref={containerRef}>\n <VideoThumbnail\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n video={props.video}\n appLink={videoAppLink}\n imageOptions={{ size: ImageSize.Medium }}\n textPosition={ThumbnailTextPosition.Independent}\n type='static'\n audience={mergedAudience}\n hideRating={!!mergedAudience}\n commonVideoProps={{\n ...props.commonVideoProps,\n subTextType: 'none'\n }}\n />\n </div>\n <ThumbnailText\n video={props.video}\n appLink={videoAppLink}\n commonVideoProps={props.commonVideoProps}\n />\n\n {VideoHelper.showVideoGuidance(props.hasPermissions) && (\n <VideoItemGuidance\n commonVideoProps={props.commonVideoProps}\n video={props.video}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n responsiveClassName={styles.responsiveGuidance}\n containerClassName={`d-flex justify-content-start align-items-center pt-1 ${styles.guidance}`}\n />\n )}\n </div>\n );\n}\n",":local {\n .row {\n row-gap: map-get($spacers, 3);\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { ThumbnailFixedListMediaLargeWidgetTemplateItem } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/components/ThumbnailFixedListMediaLargeWidgetTemplateItem';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { PresentationAudience, Video } from 'libs/shared/interfaces';\nimport { VideoWidgetTemplateContent } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './thumbnail-fixed-list-media-large-widget-template.module.scss';\n\nexport interface ThumbnailFixedListMediaLargeWidgetTemplateProps {\n name: string;\n description: string;\n content: VideoWidgetTemplateContent;\n\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink\n };\n audiences: PresentationAudience[];\n analyticsData?: HashObject;\n \n hasPermissions: HasPermissionsFunc;\n\n settings: {\n hasTopicDirectories: boolean\n };\n\n commonVideoProps: CommonVideoProps;\n}\n\nexport function ThumbnailFixedListMediaLargeWidgetTemplate(\n props: ThumbnailFixedListMediaLargeWidgetTemplateProps\n): JSX.Element {\n const videos = WidgetHelper.getVideoContent(props.content);\n\n return (\n <>\n <WidgetHeader name={props.name} description={props.description} />\n <div className={`row ${styles.row}`}>\n {videos.map(video => (\n <ThumbnailFixedListMediaLargeWidgetTemplateItem key={video.id} video={video} {...props} />\n ))}\n </div>\n </>\n );\n}\n",":local {\n .thumbnailTitle:hover {\n text-decoration: underline;\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport styles from './collection-thumbnail-title.module.scss';\n\ninterface BaseCollectionThumbnailTitleProps {\n title: string;\n}\n\nfunction BaseCollectionThumbnailTitle(props: BaseCollectionThumbnailTitleProps): JSX.Element {\n return (\n <h3 title={props.title} className='h6'>{props.title}</h3>\n );\n}\n\ninterface CollectionThumbnailTitleProps extends BaseCollectionThumbnailTitleProps {\n appLink: Core.AppLink;\n}\n\nexport function CollectionThumbnailTitle(props: CollectionThumbnailTitleProps) {\n if (!props.appLink) {\n return (\n <BaseCollectionThumbnailTitle {...props} />\n );\n }\n \n return (\n <AppLink appLink={props.appLink} className={`${styles.thumbnailTitle}`}>\n <BaseCollectionThumbnailTitle {...props} />\n </AppLink>\n );\n}\n",":local {\n .badge {\n height: 1.5rem;\n }\n\n .mask {\n opacity: 0;\n }\n\n .thumbnailContainer:hover {\n .mask {\n opacity: 1;\n }\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AnalyticsOptions, EntityType, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CollectionThumbnailTitle } from 'libs/shared/components/thumbnails/collection/title/CollectionThumbnailTitle';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { TitleSubText } from 'libs/shared/components/title-sub-text/TitleSubText';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { PlaySvg } from 'libs/shared/images/svg/actions/PlaySvg';\nimport { SeriesSvg } from 'libs/shared/images/svg/objects/SeriesSvg';\nimport { Playlist, Series } from 'libs/shared/interfaces';\nimport { ImageOptions } from 'libs/shared/utils/ImageHelper';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\n\nimport styles from './collection-thumbnail.module.scss';\n\nconst namespace = 'shared.collectionThumbnail';\n\ntype SupportedContentType = Playlist | Series;\n\ninterface CollectionThumbnailProps {\n appLink?: Core.AppLink;\n collection: SupportedContentType;\n imageOptions?: ImageOptions;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n showMask?: boolean;\n showVideoCount?: boolean;\n onlyCount?: boolean;\n title?: string;\n titleAppLink?: Core.AppLink;\n subText?: string;\n subTextAppLink?: Core.AppLink;\n hoverText?: string;\n}\n\nexport function CollectionThumbnail(props: CollectionThumbnailProps) {\n function getFirstVideo() {\n let collectionVideos = props.collection?.videos;\n\n if (!collectionVideos)\n return;\n\n if (!collectionVideos.count && props.collection.typeId === MasterType.Playlist) {\n const playlist = props.collection as Playlist;\n\n if (playlist.clips.count)\n collectionVideos = playlist.clips;\n\n if (playlist.interactives.count)\n collectionVideos = playlist.interactives;\n }\n\n return ArrayHelper.first(collectionVideos.data);\n }\n\n function getVideoCount() {\n let totalCount = 0;\n\n if (props.collection.videos && props.collection.videos.count) {\n totalCount += props.collection.videos.count;\n }\n\n if (props.collection.typeId === MasterType.Playlist) {\n const playlist = props.collection as Playlist;\n\n if (playlist.interactives?.count)\n totalCount += playlist.interactives.count;\n\n if (playlist.clips?.count)\n totalCount += playlist.clips.count;\n }\n\n return totalCount;\n }\n\n function getEntityType(collection: SupportedContentType) {\n if (MasterTypeHelper.isType<Playlist>(collection, MasterType.Playlist)) {\n return EntityType.Playlist;\n }\n\n if (MasterTypeHelper.isType<Series>(collection, MasterType.Series)) {\n return EntityType.Series;\n }\n }\n\n const firstVideo = getFirstVideo();\n const videoCount = getVideoCount();\n const showTexts = props.title?.length || props.subText?.length;\n\n const analyticsData = {\n id: props.collection.id.toString(),\n name: props.collection.name,\n\n ...props.analyticsData\n };\n\n const analyticsOptions = {\n actionType: UserAction.Click,\n entity: getEntityType(props.collection),\n \n ...props.analyticsOptions\n };\n\n return (\n <div>\n <div className={`position-relative ${styles.thumbnailContainer} z-1`}>\n <AppLink\n appLink={props.appLink}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n preventFocus\n >\n {props.showMask &&\n <div className={`${styles.mask} position-absolute w-100 h-100 rounded-3 bg-dark bg-gradient z-1 bg-opacity-50 pointer-events-none`}>\n <div className={`${styles.badge} d-flex align-items-center w-fit flex-grow-0 bg-dark rounded-pill ps-1 m-2`}>\n <SvgContainer svg={PlaySvg} className='svg-container text-white' />\n <p className='d-inline fw-medium text-white mb-0'>\n {props.hoverText?.length ?\n <span>{props.hoverText}</span> :\n <Text namespace={namespace} phrase='playAll' />\n }\n </p>\n </div>\n </div>\n }\n\n {firstVideo &&\n <VideoThumbnail\n video={firstVideo}\n imageOptions={props.imageOptions}\n textPosition={ThumbnailTextPosition.Independent}\n type='cosmetic'\n hideMask\n hideRating\n hideDuration\n hideVideoTypeBadge\n />\n }\n\n {!firstVideo &&\n <div className='ratio ratio-16x9 bg-light rounded-3'>\n <div className='d-flex justify-content-center align-items-center'>\n <SvgContainer svg={PlaySvg} className='w-33 opacity-25 text-gray-400' />\n </div>\n </div>\n }\n\n {props.showVideoCount &&\n <div className={`${styles.badge} d-flex align-items-center w-fit bg-dark bg-opacity-75 rounded-pill position-absolute bottom-0 end-0 ps-1 m-2`}>\n <SvgContainer svg={SeriesSvg} className='svg-container text-white me-1' />\n <p className='d-inline fw-semibold text-white mb-0'>\n {props.onlyCount ?\n <span>{videoCount}</span> :\n <Text namespace={namespace} phrase='videos' options={{ count: videoCount, smartCount: videoCount }} />\n }\n </p>\n </div>\n }\n </AppLink>\n\n </div>\n \n {showTexts &&\n <div className='mt-2 d-flex flex-column'>\n {props.subText &&\n <TitleSubText title={props.subText} appLink={props.subTextAppLink}>\n {props.subText}\n </TitleSubText>\n }\n {props.title &&\n <CollectionThumbnailTitle\n title={props.collection.name}\n appLink={props.titleAppLink}\n />\n }\n </div>\n }\n </div>\n );\n}\n","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { HashObject, LocationContext } from 'libs/analytics/interfaces';\n\nimport { CollectionThumbnail } from 'libs/shared/components/thumbnails/collection/CollectionThumbnail';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport type { CurrentUser, Playlist, Series } from 'libs/shared/interfaces';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\n\ntype SupportedContentType = Series | Playlist;\n\nexport interface ThumbnailFixedListMediaSmallWidgetTemplateProps {\n name: string;\n content: SupportedContentType[];\n currentUser: CurrentUser;\n seeMoreLink: Core.AppLink;\n appLinks: {\n playlist: (playlist: Playlist) => Core.AppLink,\n series: (series: Series) => Core.AppLink\n };\n \n description: string;\n badgeComponent: JSX.Element;\n getAnalyticsData?: (itemIndex: number) => HashObject;\n}\n\nconst namespace = 'widgets.thumbnailFixedListMediaSmallWidgetTemplate';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function ThumbnailFixedListMediaSmallWidgetTemplate(\n props: ThumbnailFixedListMediaSmallWidgetTemplateProps\n): JSX.Element {\n const subTextMap: {[key in MasterType]?: string } = {\n [MasterType.Playlist]: getPhrase('playlist'),\n [MasterType.Series]: getPhrase('series')\n };\n\n const hoverTextMap: {[key in MasterType]?: string } = {\n [MasterType.Playlist]: getPhrase('viewPlaylist'),\n [MasterType.Series]: getPhrase('viewSeries')\n };\n \n function getAppLink(collection: SupportedContentType) {\n if (MasterTypeHelper.isType<Playlist>(collection, MasterType.Playlist)) {\n return props.appLinks.playlist(collection);\n }\n\n if (MasterTypeHelper.isType<Series>(collection, MasterType.Series)) {\n return props.appLinks.series(collection);\n }\n }\n\n return (\n <>\n <WidgetHeader\n name={props.name}\n description={props.description}\n showSeeMoreLink={!!props.seeMoreLink}\n appLink={props.seeMoreLink}\n badgeComponent={props.badgeComponent}\n />\n <Row as='ul' className='list-unstyled mx-n1 mb-n3'>\n {props.content.map((c, idx) => {\n const collectionAppLink = getAppLink(c);\n const subText = subTextMap[c?.typeId];\n const hoverText = hoverTextMap[c?.typeId];\n \n return (\n <Col as='li' key={c.id} lg={3} md={4} sm={6} xs={12} className='mb-3 px-1'>\n <CollectionThumbnail\n collection={c}\n appLink={collectionAppLink}\n analyticsOptions={{\n location: LocationContext.ThumbnailFixedListMediaSmallWidget\n }}\n analyticsData={props.getAnalyticsData(idx)}\n title={c?.name}\n titleAppLink={collectionAppLink}\n imageOptions={{\n size: ImageSize.Medium\n }}\n subText={subText}\n subTextAppLink={collectionAppLink}\n hoverText={hoverText}\n showVideoCount\n showMask\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}\n",":local {\n .subjectItem {\n aspect-ratio: 14 / 5;\n }\n} ","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nimport styles from './partial-thumbnail-fixed-list-small-widget-template.module.scss';\n\nexport function PartialThumbnailFixedSmallWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n const PARTIAL_SUBJECTS = [...Array(3)];\n\n return (\n <>\n <PartialWidgetHeader\n name={props.name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n hideDescription={props.hideDescription}\n />\n <Row className='mx-n1 '>\n {PARTIAL_SUBJECTS.map((_, i) => {\n return (\n <Col key={i} xl={4} md={6} xs={12} className='p-1'>\n <div className={`${styles.subjectItem} partial-loading-background rounded-3`} />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}\n","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { ThumbnailWidgetItem, ThumbnailWidgetItemProps } from 'libs/shared/components/widgets/items/thumbnail-widget-item/ThumbnailWidgetItem';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { Classification, Company, Presentation } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\n\ntype SupportedContent = Classification | Company;\n\ninterface GetThumbnailWidgetItemPropsOptions {\n item: SupportedContent;\n appLinks: ThumbnailFixedListSmallWidgetTemplateProps['appLinks'];\n appLinkOptions: ThumbnailFixedListSmallWidgetTemplateProps['appLinkOptions'];\n widgetTypeId: WidgetTypeId;\n availablePresentations?: Presentation[];\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\nfunction getPresentationName(item: Classification, presentations: Presentation[]): string {\n if (!item || !presentations)\n return;\n\n const itemPresentation = presentations.find(p => p.id && p.id === item.presentationId);\n\n if (!itemPresentation)\n return;\n\n return itemPresentation.name;\n}\n\nfunction getThumbnailWidgetItemProps(options: GetThumbnailWidgetItemPropsOptions): ThumbnailWidgetItemProps {\n const baseProps: ThumbnailWidgetItemProps = {\n data: {\n name: options.item.name,\n description: options.item.description\n }\n };\n\n if (MasterTypeHelper.isType<Classification>(options.item, MasterType.Subject)) {\n const isComingSoon = options.item?.status === ClassificationStatus.ComingSoon;\n const analyticsData = {\n ...options.analyticsData,\n id: options.item?.id,\n name: options.item?.name,\n presentationId: options.item?.presentationId,\n comingSoon: !!isComingSoon\n };\n \n const analyticsOptions = {\n location: LocationContext.ThumbnailFixedListSmallWidget,\n ...options.analyticsOptions,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n const itemPresentationName = options.widgetTypeId === WidgetTypeId.SearchRelevantTopics &&\n getPresentationName(options.item, options.availablePresentations);\n\n return {\n ...baseProps,\n data: {\n ...baseProps.data,\n preTitle: itemPresentationName,\n backgroundColor: options.item.metadata?.backgroundColor,\n coverUrl: ImageHelper.createUrl(options.item.cover?.url, { size: ImageSize.Small }),\n thumbnailUrl: ImageHelper.createUrl(options.item.thumbnail?.url, { size: ImageSize.Medium })\n },\n appLink: options.appLinks?.classification?.(options.item),\n analyticsData,\n analyticsOptions\n };\n }\n\n if (MasterTypeHelper.isType<Company>(options.item, MasterType.Company)) {\n return {\n ...baseProps,\n data: {\n ...baseProps.data,\n coverUrl: ImageHelper.createUrl(options.item.logo?.url, { size: ImageSize.Small }),\n backgroundColor: options.item.metadata?.colour\n },\n appLink: options.appLinks?.company?.(options.item),\n appLinkOptions: options.appLinkOptions?.company(options.item)\n };\n }\n\n return baseProps;\n}\n\nexport interface ThumbnailFixedListSmallWidgetTemplateProps {\n name: string;\n description: string;\n isPreviewing: boolean;\n widgetTypeId: WidgetTypeId;\n content: SupportedContent[];\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink,\n company: (playlist: Company) => Core.AppLink\n };\n seeMoreLink?: Core.AppLink;\n availablePresentations?: Presentation[];\n analyticsData?: HashObject;\n badgeComponent?: JSX.Element;\n getAnalyticsData?: (itemIndex: number) => HashObject;\n appLinkOptions?: {\n company: (company: Company) => Core.AppLinkOptions\n };\n isUpselling?: boolean;\n}\n\nexport function ThumbnailFixedListSmallWidgetTemplate(\n props: ThumbnailFixedListSmallWidgetTemplateProps\n): JSX.Element {\n function getContent(): SupportedContent[] {\n if ([\n WidgetTypeId.SearchRelevantTopics,\n WidgetTypeId.SearchCompanies\n ].includes(props.widgetTypeId)) {\n return props.content;\n }\n \n if (\n props.widgetTypeId !== WidgetTypeId.TrendingClassifications &&\n props.widgetTypeId !== WidgetTypeId.LatestReleasedClassifications\n ) {\n return props.content;\n }\n\n if (props.content.length < 6)\n return props.content.slice(0, 3);\n\n return props.content;\n }\n\n return (\n <>\n <WidgetHeader\n name={props.name}\n description={props.description}\n content={props.content}\n widgetTypeId={props.widgetTypeId}\n isPreviewing={props.isPreviewing}\n showSeeMoreLink={!!props.seeMoreLink}\n appLink={props.seeMoreLink}\n badgeComponent={props.badgeComponent}\n isUpselling={props.isUpselling}\n />\n <Row as='ul' className='list-unstyled mx-n1 mb-n2'>\n {getContent().map((c, idx) => {\n const analyticsData = typeof props.getAnalyticsData === 'function' ?\n props.getAnalyticsData(idx) :\n props.analyticsData;\n \n const thumbnailWidgetItemProps = getThumbnailWidgetItemProps({\n item: c,\n widgetTypeId: props.widgetTypeId,\n appLinks: props.appLinks,\n analyticsData: analyticsData,\n availablePresentations: props.availablePresentations,\n appLinkOptions: props.appLinkOptions\n });\n return (\n <Col as='li' key={c.id} xl={4} md={6} xs={12} className='px-1 pb-2'>\n <ThumbnailWidgetItem\n {...thumbnailWidgetItemProps}\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}\n","import React from 'react';\n\nimport { PartialHeroBannerWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner/partial-loading/PartialHeroBannerWidgetTemplate';\n\nexport function PartialThumbnailFixedListXLargeWidgetTemplate(): JSX.Element {\n return <PartialHeroBannerWidgetTemplate />;\n}\n","@import '~styles/utils/include-media';\n:local {\n .appLink:hover {\n text-decoration: none;\n cursor: pointer;\n }\n\n .container {\n background-repeat: no-repeat;\n background-position: right;\n background-size: contain;\n //fallback color\n background-color: $gray-900;\n\n padding: 0.9375rem;\n min-height: 9.7rem;\n }\n\n .content {\n width: 60%;\n padding-right: 1rem;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n\n .top {\n color: $white;\n font-size: 1rem;\n }\n\n .title {\n margin-bottom: 0.0725rem;\n line-height: normal;\n overflow-y: clip;\n overflow-x: visible;\n }\n\n .title:hover{\n text-decoration: underline;\n }\n\n .description {\n font-size: 0.875rem;\n margin-bottom: 0.937rem;\n }\n\n @include media('<=sm') {\n width: 100%;\n }\n }\n\n .description {\n @include media('<=sm') {\n display: none;\n }\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { HeroBannerWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner/HeroBannerWidgetTemplate';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Classification, WidgetCta } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './thumbnail-fixed-list-x-large.module.scss';\n\nconst namespace = 'shared.thumbnailFixedListXLarge';\n\nexport interface ThumbnailFixedListXLargeWidgetTemplateProps {\n name: string;\n content: Classification[];\n analyticsData?: HashObject;\n \n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink\n };\n metadata: {\n cta: WidgetCta\n };\n}\n\nexport function ThumbnailFixedListXLargeWidgetTemplate(\n props: ThumbnailFixedListXLargeWidgetTemplateProps\n): JSX.Element {\n const classification = ArrayHelper.first(props.content);\n\n const thumbnailUrl = ImageHelper.createUrl(classification.thumbnail?.url, { size: ImageSize.Medium });\n const backgroundColor = classification.metadata?.backgroundColor;\n\n const style: React.CSSProperties = {\n backgroundColor\n };\n\n if (thumbnailUrl)\n style.backgroundImage = `url('${thumbnailUrl}')`;\n\n const analyticsData = {\n ...props.analyticsData,\n id: classification.id,\n name: classification.name,\n presentationId: classification.presentationId\n };\n\n const analyticsOptions = {\n location: LocationContext.ClassificationListItem,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n if (!thumbnailUrl || !backgroundColor)\n return <HeroBannerWidgetTemplate {...props} />;\n\n return (\n <>\n <AppLink\n appLink={props.appLinks?.classification?.(classification)}\n className='text-decoration-none'\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <div\n className={`d-flex position-relative rounded-3 h-100 ${styles.container}`}\n style={style}\n >\n <div className={`${styles.content}`}>\n <div className={`${styles.top}`}>\n <h2 className={`${styles.title} text-decoration-none h4 text-nowrap text-truncate`}>{props.name}</h2>\n\n <div className={`text-start ${styles.description}`}>\n <p className='clamp-3'>{classification.description}</p>\n </div>\n </div>\n\n <div>\n <div className='btn btn-outline-dark text-nowrap'>\n {props.metadata?.cta?.text || LanguageService.getPhrase(namespace, 'buttonLabel')}\n </div>\n </div>\n </div>\n </div>\n </AppLink>\n </>\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .details {\n padding-top: map-get($spacers, 2);\n display: flex;\n justify-content: space-between;\n align-items: center;\n\n @include media(\"<md\") {\n flex-direction: column;\n align-items: flex-start;\n }\n }\n}","import React from 'react';\n\nimport { PartialVideoGuidance } from 'libs/shared/components/video-guidance/tag/partial-loading/PartialVideoGuidanceTag';\n\nimport styles from './partial-thumbnail-hero-media-widget-template.module.scss';\n\nexport const PartialThumbnailHeroMediaWidgetTemplate = () => (\n <div>\n <div className='w-100 partial-loading-background rounded-3' style={{ paddingBottom: '56.25%' }} />\n\n <div className={styles.details}>\n <div>\n <div style={{ height: '1.5rem' }}>\n <div className='partial-loading-background' style={{ height: '1.2rem', width: '12rem' }} />\n </div>\n <div className='partial-loading-background' style={{ height: '1.5625rem', width: '15rem' }}></div>\n </div>\n\n <div className='pt-2 mw-100'>\n <PartialVideoGuidance />\n </div>\n </div>\n </div>\n);\n","@import '~styles/utils/mixins';\n@import '~styles/utils/include-media';\n:local {\n .details {\n display: flex;\n justify-content: space-between;\n align-items: center;\n\n .guidance {\n gap: map-get($spacers, 1);\n }\n\n @include media('<=md') {\n flex-direction: column;\n align-items: flex-start;\n \n .guidance {\n margin-top: map-get($spacers, 1);\n }\n }\n }\n\n .responsiveGuidance {\n @include media('>md') {\n @include responsive-guidance-tags;\n }\n\n @include media('<=sm') {\n @include responsive-guidance-tags;\n }\n }\n\n .seriesTitleBox {\n height: 1.5rem;\n line-height: 1.5rem;\n }\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ClickDescriptor, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { VideoItemGuidance } from 'libs/shared/components/video-list/components/video-guidance/VideoItemGuidance';\nimport { VideoSubText } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { VideoTitle } from 'libs/shared/components/video-title/VideoTitle';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { PresentationAudience } from 'libs/shared/interfaces';\nimport { VideoWidgetTemplateContent } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { Video } from 'libs/shared/interfaces/models/Video';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './thumbnail-hero-media-widget-template.module.scss';\n\nexport interface ThumbnailHeroMediaWidgetTemplateProps {\n name: string;\n description: string;\n content: VideoWidgetTemplateContent;\n audiences: PresentationAudience[];\n widgetTypeId: WidgetTypeId;\n hasPermissions: HasPermissionsFunc;\n analyticsData?: HashObject;\n\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink\n };\n\n settings: {\n hasTopicDirectories: boolean\n };\n\n commonVideoProps: CommonVideoProps;\n}\n\nexport function ThumbnailHeroMediaWidgetTemplate(props: ThumbnailHeroMediaWidgetTemplateProps): JSX.Element {\n const video = ArrayHelper.first(WidgetHelper.getVideoContent(props.content));\n const containerRef = React.useRef(null);\n\n const mergedAudience = useMergeAudiences(video.subjectPresentationAudiences?.data, props.audiences);\n\n const hasSubText = VideoHelper.hasSeries(video) || WidgetHelper.isCompanyWidget(props.widgetTypeId);\n\n const analyticsOptions = {\n actionType: UserAction.Click,\n entity: VideoHelper.getAnalyticsEntity(video),\n location: LocationContext.ThumbnailHeroMediaWidget\n };\n\n const showNewVideoIndicator = props.settings?.hasTopicDirectories;\n\n const { canNavigate } = VideoHelper.getCanBeConsumed(video);\n\n if (!video)\n return <></>;\n\n return (\n <div>\n <WidgetHeader name={props.name} description={props.description} />\n\n <div ref={containerRef}>\n <VideoThumbnail\n video={video}\n imageOptions={{ size: ImageSize.Large }}\n type='static'\n textPosition={ThumbnailTextPosition.Independent}\n analyticsOptions={analyticsOptions}\n audience={mergedAudience}\n hideRating={!!mergedAudience}\n appLink={props.appLinks?.videoType?.(video, {})}\n commonVideoProps={props.commonVideoProps}\n />\n </div>\n\n <div className={styles.details}>\n <div>\n {VideoHelper.isVideo(video) && (\n <VideoSubText\n type={WidgetHelper.isCompanyWidget(props.widgetTypeId) ? 'productionCompany' : props.commonVideoProps.subTextType}\n video={video}\n appLink={props.commonVideoProps.getSubTextAppLink?.(video)}\n analyticsOptions={analyticsOptions}\n className={`mt-2 ${styles.seriesTitleBox}`}\n />\n )}\n\n <div className={hasSubText ? '' : 'mt-2'}>\n <AppLink\n appLink={props.appLinks?.videoType?.(video, {})}\n analyticsData={{\n id: video.id,\n name: video.name\n }}\n analyticsOptions={{\n ...analyticsOptions,\n descriptor: ClickDescriptor.Title\n }}\n className={`d-inline-block ${canNavigate ? '' : 'cursor-default text-decoration-none disabled'}`}\n disabled={!canNavigate}\n >\n <VideoTitle\n video={video}\n yearGroups={props.commonVideoProps.yearGroups}\n showNewVideoIndicator={showNewVideoIndicator}\n showPadlock={!props.commonVideoProps.hasStudentExperience && !props.commonVideoProps.hasGuestExperience}\n titleSize='h4'\n className='mb-0'\n />\n </AppLink>\n </div>\n </div>\n\n {VideoHelper.showVideoGuidance(props.hasPermissions) && (\n <VideoItemGuidance\n video={video}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n responsiveClassName={styles.responsiveGuidance}\n containerClassName={`d-flex mt-2 ${styles.guidance}`}\n commonVideoProps={props.commonVideoProps}\n />\n )}\n </div>\n </div>\n );\n}\n","import React from 'react';\n\nimport { PartialFixedWidget } from 'libs/shared/components/widgets/fixed-widget';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nexport function PartialThumbnailSlidingListLargeWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n return (\n <PartialFixedWidget\n size='lg'\n name={props.name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n />\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { VideoWidgetItem } from 'libs/shared/components/widgets/items/video-widget-item/v1';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Video, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nexport interface ThumbnailSlidingListLargeWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Video[];\n analyticsData?: HashObject;\n \n showHighlight?: boolean;\n\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink,\n widgetVideoList: (widgetId: string, widgetName: string) => Core.AppLink\n };\n\n commonVideoProps: CommonVideoProps;\n}\n\nexport function ThumbnailSlidingListLargeWidgetTemplate(\n props: ThumbnailSlidingListLargeWidgetTemplateProps\n): JSX.Element {\n return (\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.LargeRow}\n contents={WidgetContents.Videos}\n collection={props.content}\n childComponent={VideoWidgetItem}\n extraChildComponentProps={{\n commonVideoProps: props.commonVideoProps\n }}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n appLink={props.appLinks?.widgetVideoList?.(props.id, props.name)}\n />\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { VideoWidgetItem } from 'libs/shared/components/widgets/items/video-widget-item/v1';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Video, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nexport interface ThumbnailSlidingListSmallWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Video[];\n analyticsData?: HashObject;\n \n showHighlight?: boolean;\n\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink,\n widgetVideoList: (widgetId: string, widgetName: string) => Core.AppLink\n };\n\n commonVideoProps: CommonVideoProps;\n}\n\nexport function ThumbnailSlidingListSmallWidgetTemplate(\n props: ThumbnailSlidingListSmallWidgetTemplateProps\n): JSX.Element {\n return (\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Videos}\n collection={props.content}\n childComponent={VideoWidgetItem}\n extraChildComponentProps={{\n commonVideoProps: props.commonVideoProps\n }}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n appLink={props.appLinks?.widgetVideoList?.(props.id, props.name)}\n />\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .rowWidth {\n width: 25%;\n }\n\n @include media('<=xl') {\n .rowWidth {\n width: 33.33333%;\n }\n }\n\n @include media('<=md') {\n .rowWidth {\n width: 50%;\n }\n }\n\n @include media('<=sm') {\n .rowWidth {\n width: 100%;\n }\n }\n}","import React from 'react';\n\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { PresentationAudience, VideoTypes } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\n\nimport styles from './video-widget-item-v2.module.scss';\n\nexport interface VideoWidgetItemV2Props extends FixedWidgetItemProps<VideoTypes> {\n presentationAudiences: PresentationAudience[];\n commonVideoProps: CommonVideoProps;\n}\n\nexport const VideoWidgetItemV2 = React.memo(function(props: VideoWidgetItemV2Props): JSX.Element {\n const videoAudiences = props.data?.subjectPresentationAudiences?.data;\n const mergedAudience = useMergeAudiences(videoAudiences, props.presentationAudiences);\n\n return (\n <div className={`px-1 flex-shrink-0 position-relative ${styles.rowWidth}`}>\n <VideoThumbnail\n video={props.data}\n preload={props.preloadImage}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n type='static'\n appLink={props.getAppLink(props.data)}\n imageOptions={{ size: props.thumbnailSize }}\n textPosition={ThumbnailTextPosition.Below}\n audience={mergedAudience}\n hideRating={!!mergedAudience}\n hideDuration={false}\n commonVideoProps={props.commonVideoProps}\n />\n </div>\n );\n});\n",":local {\n .widgetTextButton {\n margin-top: 0.1rem;\n flex-shrink: 0;\n }\n\n // have to render this element with `widget-hover-reveal-boundary` class\n .revealOnHover {\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.15s ease-in-out;\n\n :global(.widget-hover-reveal-boundary):hover &,\n :global(.widget-hover-reveal-boundary):focus-within & {\n opacity: 1;\n pointer-events: auto;\n }\n }\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { Resource } from 'libs/shared/interfaces';\n\nimport styles from './download-all-resources-button.module.scss';\n\nconst namespace = 'shared.downloadAllResourcesButton';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface DownloadAllResourcesButtonProps {\n resources: Resource[];\n fileName: string;\n analyticsData?: HashObject;\n onDownloadAllClick: (resources: Resource[], fileName: string, analyticsData?: HashObject) => void;\n revealOnHover?: boolean;\n}\n\nexport function DownloadAllResourcesButton(props: DownloadAllResourcesButtonProps): JSX.Element {\n return (\n <div className={classNames('ms-3', styles.widgetTextButton, { [styles.revealOnHover]: props.revealOnHover })}>\n <DivButton\n onClick={() => props.onDownloadAllClick(props.resources, props.fileName, props.analyticsData)}\n >\n {getPhrase('downloadAll')}\n </DivButton>\n </div>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { LocalPermissionName } from 'libs/shared/enums/PermissionName';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { HasLocalPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { PresentationAudience, Resource, Series, Video, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { DownloadHelper } from 'libs/shared/utils/DownloadHelper';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { ResourceWidgetItem, ResourceWidgetItemProps } from '../../../items/resource-widget-item/ResourceWidgetItem';\nimport { VideoWidgetItemV2, VideoWidgetItemV2Props } from '../../../items/video-widget-item/v2/VideoWidgetItemV2';\nimport { DownloadAllResourcesButton } from '../../components/download-all-resources-button/DownloadAllResourcesButton';\n\ntype MultimediaWidgetItemProps = VideoWidgetItemV2Props & ResourceWidgetItemProps;\n\nfunction MultimediaWidgetItem(props: MultimediaWidgetItemProps): JSX.Element {\n if (VideoHelper.isVideoType(props.data)) {\n return <VideoWidgetItemV2 {...props} />;\n }\n\n function onClickDownload(e: React.MouseEvent<HTMLElement>, resource: Resource): void {\n e.preventDefault();\n e.stopPropagation();\n DownloadHelper.downloadResource(resource, props.analyticsData, props.analyticsOptions);\n }\n\n return (\n <ResourceWidgetItem {...props} location='dashboard' onClickDownload={onClickDownload} />\n );\n}\n\nexport interface ThumbnailSlidingListSmallV2WidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Video[];\n hasLocalPermissions: HasLocalPermissionsFunc;\n resourceThumbnailFallbackImageUrl: string;\n audiences: PresentationAudience[];\n analyticsData?: HashObject;\n \n showHighlight?: boolean;\n \n appLinks: {\n series: (series: Series) => Core.AppLink,\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink,\n resource: (resource: Resource, videoId: string, canViewResources: boolean) => Core.AppLink,\n widgetVideoList: (widgetId: string, widgetName: string) => Core.AppLink\n };\n\n commonVideoProps: CommonVideoProps;\n\n onDownloadAllClick?: (resources: Resource[], fileName: string, analyticsData?: HashObject) => void;\n}\n\nexport function ThumbnailSlidingListSmallV2WidgetTemplate(\n props: ThumbnailSlidingListSmallV2WidgetTemplateProps\n): JSX.Element {\n const canViewResources = props.hasLocalPermissions(LocalPermissionName.ViewVideoResourceItems);\n const downloadableResources = props.content.filter(MasterTypeHelper.isResource);\n // all content should be resource to be able to download in bulk\n const showDownloadAll = canViewResources &&\n downloadableResources.length > 0 && downloadableResources.length === props.content.length;\n\n return (\n <div className='widget-hover-reveal-boundary'>\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Videos}\n collection={props.content}\n childComponent={MultimediaWidgetItem}\n headerRightComponent={showDownloadAll ? (\n <DownloadAllResourcesButton\n resources={downloadableResources}\n fileName={`${props.name}-resources`}\n analyticsData={props.analyticsData}\n onDownloadAllClick={props.onDownloadAllClick}\n revealOnHover\n />\n ) : undefined}\n extraChildComponentProps={{\n imageErrorFallbackUrl: props.resourceThumbnailFallbackImageUrl,\n location: 'dashboard',\n titlePosition: 'below',\n actionBehaviour: canViewResources ? 'normal' : 'public',\n presentationAudiences: props.audiences,\n commonVideoProps: props.commonVideoProps,\n imageCdnUrl: props.commonVideoProps.imageCdnUrl\n }}\n getChildAppLink={item => {\n if (VideoHelper.isVideoType(item)) {\n return props.appLinks?.videoType?.(item, {});\n }\n\n return props.appLinks?.resource?.(item, item.parentId, canViewResources);\n }}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n appLink={props.appLinks?.widgetVideoList?.(props.id, props.name)}\n />\n </div>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateCoverFixedPillListLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 51'>\n <path\n d='M0 .4C0 .18.18 0 .4 0h34.764a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H.4a.4.4 0 0 1-.4-.4zm14.89.1v13h20.274a.5.5 0 0 0 .5-.5V1a.5.5 0 0 0-.5-.5zM.4 37a.4.4 0 0 0-.4.4v13.2c0 .22.18.4.4.4h34.764a1 1 0 0 0 1-1V38a1 1 0 0 0-1-1zm34.764 13.5H14.89v-13h20.273a.5.5 0 0 1 .5.5v12a.5.5 0 0 1-.5.5m5.254-13.1c0-.22.18-.4.4-.4h34.764a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H40.818a.4.4 0 0 1-.4-.4zm14.891.1v13h20.273a.5.5 0 0 0 .5-.5V38a.5.5 0 0 0-.5-.5zM40.82 0a.4.4 0 0 0-.4.4v13.2c0 .22.178.4.4.4h34.763a1 1 0 0 0 1-1V1a1 1 0 0 0-1-1zm14.49.5h20.273a.5.5 0 0 1 .5.5v12a.5.5 0 0 1-.5.5H55.309zM81.236 0a.4.4 0 0 0-.4.4v13.2c0 .22.18.4.4.4H116a1 1 0 0 0 1-1V1a1 1 0 0 0-1-1zm14.491 13.5V.5H116a.5.5 0 0 1 .5.5v12a.5.5 0 0 1-.5.5zM.4 18a.4.4 0 0 0-.4.4v13.2c0 .22.18.4.4.4h34.764a1 1 0 0 0 1-1V19a1 1 0 0 0-1-1zm14.49.5h20.274a.5.5 0 0 1 .5.5v12a.5.5 0 0 1-.5.5H14.89zm25.928-.5a.4.4 0 0 0-.4.4v13.2c0 .22.18.4.4.4h34.764a1 1 0 0 0 1-1V19a1 1 0 0 0-1-1zm14.491.5h20.273a.5.5 0 0 1 .5.5v12a.5.5 0 0 1-.5.5H55.309zm25.927-.5a.4.4 0 0 0-.4.4v13.2c0 .22.18.4.4.4H116a1 1 0 0 0 1-1V19a1 1 0 0 0-1-1zm14.491 13.5v-13H116a.5.5 0 0 1 .5.5v12a.5.5 0 0 1-.5.5z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateCoverFixedPillListXSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 93 44'>\n <path\n d='M.7 0a.7.7 0 0 0-.7.7v6.6a.7.7 0 0 0 .7.7h6.6a.7.7 0 0 0 .7-.7V.7a.7.7 0 0 0-.7-.7zm11.115 2.5c-.666 0-1.206.537-1.206 1.2v.6c0 .663.54 1.2 1.206 1.2h27.589c.665 0 1.205-.537 1.205-1.2v-.6c0-.663-.54-1.2-1.206-1.2zM52 .7a.7.7 0 0 1 .7-.7h6.6a.7.7 0 0 1 .7.7v6.6a.7.7 0 0 1-.7.7h-6.6a.7.7 0 0 1-.7-.7zm10.61 3c0-.663.54-1.2 1.205-1.2h27.588c.666 0 1.206.537 1.206 1.2v.6c0 .663-.54 1.2-1.206 1.2H63.815a1.203 1.203 0 0 1-1.206-1.2zM52 12.7a.7.7 0 0 1 .7-.7h6.6a.7.7 0 0 1 .7.7v6.6a.7.7 0 0 1-.7.7h-6.6a.7.7 0 0 1-.7-.7zm10.61 3c0-.663.54-1.2 1.205-1.2h27.588c.666 0 1.206.537 1.206 1.2v.6c0 .663-.54 1.2-1.206 1.2H63.815a1.203 1.203 0 0 1-1.206-1.2zM52.7 24a.7.7 0 0 0-.7.7v6.6a.7.7 0 0 0 .7.7h6.6a.7.7 0 0 0 .7-.7v-6.6a.7.7 0 0 0-.7-.7zm11.115 2.5c-.666 0-1.206.537-1.206 1.2v.6c0 .663.54 1.2 1.206 1.2h27.588c.666 0 1.206-.537 1.206-1.2v-.6c0-.663-.54-1.2-1.206-1.2zM52 36.7a.7.7 0 0 1 .7-.7h6.6a.7.7 0 0 1 .7.7v6.6a.7.7 0 0 1-.7.7h-6.6a.7.7 0 0 1-.7-.7zm10.61 3c0-.663.54-1.2 1.205-1.2h27.588c.666 0 1.206.537 1.206 1.2v.6c0 .663-.54 1.2-1.206 1.2H63.815a1.203 1.203 0 0 1-1.206-1.2zM0 12.7a.7.7 0 0 1 .7-.7h6.6a.7.7 0 0 1 .7.7v6.6a.7.7 0 0 1-.7.7H.7a.7.7 0 0 1-.7-.7zm10.61 3c0-.663.54-1.2 1.205-1.2h27.589c.665 0 1.205.537 1.205 1.2v.6c0 .663-.54 1.2-1.206 1.2H11.816a1.203 1.203 0 0 1-1.206-1.2zM.7 24a.7.7 0 0 0-.7.7v6.6a.7.7 0 0 0 .7.7h6.6a.7.7 0 0 0 .7-.7v-6.6a.7.7 0 0 0-.7-.7zm11.115 2.5c-.666 0-1.206.537-1.206 1.2v.6c0 .663.54 1.2 1.206 1.2h27.589c.665 0 1.205-.537 1.205-1.2v-.6c0-.663-.54-1.2-1.206-1.2zM0 36.7a.7.7 0 0 1 .7-.7h6.6a.7.7 0 0 1 .7.7v6.6a.7.7 0 0 1-.7.7H.7a.7.7 0 0 1-.7-.7zm10.61 3c0-.663.54-1.2 1.205-1.2h27.589c.665 0 1.205.537 1.205 1.2v.6c0 .663-.54 1.2-1.206 1.2H11.816a1.203 1.203 0 0 1-1.206-1.2z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateFeedbackCtaSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props} viewBox='0 0 117 14'>\n <path d='M2 0h10a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2z' fill='currentColor' />\n <path d='M18 5h56a2 2 0 0 1 0 4H18a2 2 0 0 1 0-4z' fill='currentColor' />\n <path\n fillRule='evenodd'\n d='M84 1h27a6 6 0 0 1 0 12H84a6 6 0 0 1 0-12zm0 2h27a4 4 0 0 1 0 8H84a4 4 0 0 1 0-8z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplatePopoutThumbnailSlidingListSmallCtaSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 32'>\n <path d='M18.5967 28C19.3721 28.0003 20 28.8956 20 30C20 31.1042 19.3721 31.9997 18.5967 32H1.40332C0.628292 31.9997 9.25822e-05 31.1042 0 30C0 28.8956 0.628235 28.0003 1.40332 28H18.5967Z'/>\n <path d='M48.5967 28C49.3721 28.0002 50 28.8955 50 30C50 31.1042 49.372 31.9998 48.5967 32H31.4033C30.6282 31.9997 30 31.1042 30 30C30 28.8956 30.6282 28.0003 31.4033 28H48.5967Z'/>\n <path d='M78.5967 28C79.372 28.0002 80 28.8955 80 30C80 31.1042 79.372 31.9998 78.5967 32H61.4033C60.6282 31.9997 60 31.1042 60 30C60 28.8956 60.6282 28.0003 61.4033 28H78.5967Z'/>\n <path d='M107.596 28C108.372 28 109 28.8954 109 30C109 31.1043 108.372 32 107.596 32H90.4033C89.6283 31.9998 89 31.1042 89 30C89 28.8955 89.6283 28.0002 90.4033 28H107.596Z'/>\n <path d='M27.5 10C27.7761 10 28 10.2239 28 10.5V25.5C27.9998 25.7759 27.7761 26 27.5 26H0.5C0.223944 26 0.00013193 25.7759 0 25.5V10.5C0 10.2239 0.223862 10 0.5 10H27.5Z'/>\n <path d='M57.5 10C57.7761 10 58 10.2239 58 10.5V25.5C57.9998 25.7759 57.7761 26 57.5 26H30.5C30.2239 26 30.0002 25.7759 30 25.5V10.5C30 10.2239 30.2239 10 30.5 10H57.5Z'/>\n <path d='M86.5 10C86.7761 10 87 10.2239 87 10.5V25.5C86.9998 25.7759 86.7761 26 86.5 26H60.5C60.2239 26 60.0002 25.7759 60 25.5V10.5C60 10.2239 60.2239 10 60.5 10H86.5Z'/>\n <path d='M102.4 14.5C104.002 14.5004 105.3 15.799 105.3 17.4004C105.3 18.1875 104.984 18.8994 104.475 19.4219C104.465 19.4298 104.455 19.4375 104.446 19.4463C104.437 19.4552 104.43 19.4653 104.422 19.4746C103.899 19.9838 103.188 20.2996 102.4 20.2998C100.799 20.2998 99.5004 19.0017 99.5 17.4004C99.5 15.7988 100.799 14.5 102.4 14.5Z'/>\n <path d='M116.5 10C116.776 10 117 10.2239 117 10.5V25.5C117 25.7759 116.776 26 116.5 26H89.5C89.2239 26 89.0002 25.7759 89 25.5V10.5C89 10.2239 89.2239 10 89.5 10H116.5ZM102.4 13.5C100.246 13.5 98.5 15.2465 98.5 17.4004C98.5004 19.554 100.247 21.2998 102.4 21.2998C103.297 21.2996 104.122 20.9957 104.78 20.4873L107.047 22.7539C107.242 22.9487 107.559 22.9489 107.754 22.7539C107.949 22.5588 107.949 22.2422 107.754 22.0469L105.487 19.7803C105.996 19.1216 106.3 18.2967 106.3 17.4004C106.3 15.2467 104.554 13.5004 102.4 13.5Z'/>\n <path d='M46.5 0C47.8807 0 49 1.11929 49 2.5C48.9998 3.88059 47.8807 5 46.5 5H2.5C1.11937 5 0.000131935 3.88059 0 2.5C0 1.11929 1.11929 0 2.5 0H46.5Z'/>\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplatePosterSlidingListLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 60'>\n <path\n d='M0 2a2 2 0 0 1 2-2h45.852a2 2 0 0 1 2 2v1a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2zm0 8.795C0 10.356.356 10 .795 10h26.406c.439 0 .795.356.795.795V58.99c0 .44-.356.795-.795.795H.795A.795.795 0 0 1 0 58.99zM30.41 10a.795.795 0 0 0-.796.795V58.99c0 .44.356.795.795.795h26.406c.439 0 .795-.355.795-.795V10.795a.795.795 0 0 0-.795-.795zm28.818.795c0-.439.356-.795.795-.795h26.568c.439 0 .795.356.795.795V58.99c0 .44-.356.795-.795.795H60.024a.795.795 0 0 1-.796-.795zM89.638 10a.795.795 0 0 0-.796.795V58.99c0 .44.356.795.796.795h26.567a.795.795 0 0 0 .795-.795V10.795a.795.795 0 0 0-.795-.795z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplatePosterSlidingListMediumSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 50'>\n <path\n d='M2 0a2 2 0 0 0-2 2v1a2 2 0 0 0 2 2h45.852a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zM.632 10a.63.63 0 0 0-.632.632v38.319c0 .349.283.632.632.632h20.994c.35 0 .633-.283.633-.633V10.633a.63.63 0 0 0-.633-.632zm22.913.632c0-.349.283-.632.632-.632h20.994c.35 0 .633.283.633.632v38.319c0 .349-.283.632-.633.632H24.178a.63.63 0 0 1-.633-.633zM47.723 10a.63.63 0 0 0-.633.632v38.319c0 .349.283.632.633.632h21.122c.35 0 .633-.283.633-.633V10.633a.63.63 0 0 0-.633-.632zm46.89.632c0-.349.283-.632.632-.632h21.123c.349 0 .632.283.632.632v38.319c0 .349-.283.632-.632.632H95.245a.63.63 0 0 1-.632-.633zM71.268 10a.63.63 0 0 0-.633.632v38.319c0 .349.283.632.633.632H92.39a.63.63 0 0 0 .632-.633V10.633A.63.63 0 0 0 92.39 10z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplatePosterSlidingListSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 44'>\n <path\n d='M0 2a2 2 0 0 1 2-2h45.852a2 2 0 0 1 2 2v1a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2zm0 8.533C0 10.239.24 10 .537 10H18.05c.296 0 .537.239.537.533v32.302c0 .295-.24.533-.537.533H.537A.535.535 0 0 1 0 42.835zM20.198 10a.535.535 0 0 0-.537.533v32.302c0 .295.24.533.537.533h17.513a.535.535 0 0 0 .537-.533V10.533A.535.535 0 0 0 37.71 10zm19.124.533c0-.294.24-.533.537-.533h17.62c.297 0 .538.239.538.533v32.302c0 .295-.241.533-.538.533H39.86a.535.535 0 0 1-.537-.533zM59.521 10a.535.535 0 0 0-.538.533v32.302c0 .295.241.533.538.533h17.62a.535.535 0 0 0 .537-.533V10.533A.535.535 0 0 0 77.14 10zm19.231.533c0-.294.24-.533.537-.533h17.513c.296 0 .537.239.537.533v32.302c0 .295-.24.533-.537.533H79.289a.535.535 0 0 1-.537-.533zM98.95 10a.535.535 0 0 0-.537.533v32.302c0 .295.24.533.537.533h17.513a.535.535 0 0 0 .537-.533V10.533a.535.535 0 0 0-.537-.533z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateStatsCoverFixedPillListLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 81 31'>\n <g clipPath='url(#a)'>\n <path\n fill='currentColor'\n d='M0 1.643a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1H1a1 1 0 0 1-1-1zm11 0a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H12a1 1 0 0 1-1-1zm-11 11a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1H1a1 1 0 0 1-1-1zm11 0a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H12a1 1 0 0 1-1-1zm-10 10a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1v-6a1 1 0 0 0-1-1zm11 0a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1zm16-21a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1zm11 0a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H40a1 1 0 0 1-1-1zm-10 10a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1v-6a1 1 0 0 0-1-1zm11 0a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1zm-12 12a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1zm11 0a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H40a1 1 0 0 1-1-1zm18-23a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1v-6a1 1 0 0 0-1-1zm11 0a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1zm-12 12a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1zm11 0a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H68a1 1 0 0 1-1-1zm-10 10a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1v-6a1 1 0 0 0-1-1zm11 0a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1z'\n />\n </g>\n <defs>\n <clipPath id='a'>\n <path fill='currentColor' d='M0 .643h81v30H0z' />\n </clipPath>\n </defs>\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailFeaturedMediaSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 44'>\n <path\n d='M2.762 0a2.762 2.762 0 0 0 0 5.524h49.076a2.762 2.762 0 1 0 0-5.524zM1.065 11.048A1.06 1.06 0 0 0 0 12.103v30.085a1.06 1.06 0 0 0 1.065 1.056h54.699a1.06 1.06 0 0 0 1.065-1.056V12.103a1.06 1.06 0 0 0-1.065-1.055zm61.878 0a1.657 1.657 0 1 0 0 3.314h52.4a1.657 1.657 0 0 0 0-3.314zm-1.657 8.285c0-.915.742-1.657 1.657-1.657h52.4a1.657 1.657 0 0 1 0 3.315h-52.4a1.657 1.657 0 0 1-1.657-1.658'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailHeroMediaSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 67'>\n <path\n d='M0 2.192C0 .982.981 0 2.192 0h112.616C116.019 0 117 .981 117 2.192v62.473c0 1.21-.981 2.192-2.192 2.192H2.192A2.19 2.19 0 0 1 0 64.665z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\nimport { Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { AnalyticsOptions, HashObject } from 'libs/analytics/interfaces';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport {\n getPartnerWidgetItemProps,\n RectangularLogoWidgetItem\n} from 'libs/shared/components/widgets/items/rectangular-logo-widget-item/RectangularLogoWidgetItem';\nimport { PartnerProfile } from 'libs/shared/interfaces';\n\nexport interface RectangularLogoFixedListWidgetTemplateProps {\n name: string;\n description?: string;\n badgeComponent?: JSX.Element;\n content: PartnerProfile[];\n appLinks: {\n partner: (partnerProfile: PartnerProfile) => Core.AppLink\n };\n seeMoreLink?: Core.AppLink;\n analyticsOptions?: AnalyticsOptions;\n analyticsData?: HashObject;\n}\n\nexport function RectangularLogoFixedListWidgetTemplate(\n props: RectangularLogoFixedListWidgetTemplateProps\n): JSX.Element {\n return (\n <>\n <WidgetHeader\n name={props.name}\n description={props.description}\n badgeComponent={props.badgeComponent}\n appLink={props.seeMoreLink}\n showSeeMoreLink={!!props.seeMoreLink}\n />\n <Row as='ul' className='list-unstyled mx-n1 mb-n1 row-gap-3'>\n {props.content.map((c, idx) => {\n const widgetProps = getPartnerWidgetItemProps({\n analyticsData: props.analyticsData,\n analyticsOptions: props.analyticsOptions,\n partner: c,\n appLink: props.appLinks.partner(c)\n });\n\n return <RectangularLogoWidgetItem key={idx} {...widgetProps} />;\n })}\n </Row>\n </>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateAuthorReviewerSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 34'>\n <path\n fill='currentColor'\n d='M55.055.922H1.462C.654.922 0 1.588 0 2.41v29.745c0 .822.654 1.488 1.462 1.488h53.593c.807 0 1.462-.666 1.462-1.488V2.41c0-.822-.655-1.488-1.462-1.488M.975 32.155V2.41c0-.274.218-.496.487-.496h53.593c.27 0 .487.222.487.496v29.745a.49.49 0 0 1-.487.496H1.462a.49.49 0 0 1-.488-.496m10.23-14.873c2.692 0 4.873-2.22 4.873-4.957 0-2.738-2.181-4.958-4.872-4.958s-4.872 2.22-4.872 4.958 2.181 4.958 4.872 4.958m11.408-6.742c-.65 0-1.175.533-1.175 1.19v.595c0 .657.526 1.19 1.175 1.19H39.75c.649 0 1.175-.533 1.175-1.19v-.595c0-.657-.526-1.19-1.175-1.19zM7.509 22.934c-.65 0-1.175.533-1.175 1.19v.595c0 .657.526 1.19 1.175 1.19h42.473c.65 0 1.176-.533 1.176-1.19v-.595c0-.657-.527-1.19-1.176-1.19zM115.513.922H60.979c-.822 0-1.487.666-1.487 1.488v29.745c0 .822.666 1.488 1.487 1.488h54.534c.821 0 1.487-.666 1.487-1.488V2.41c0-.822-.666-1.488-1.487-1.488m-55.03 31.233V2.41c0-.274.222-.496.496-.496h54.534c.273 0 .495.222.495.496v29.745a.496.496 0 0 1-.495.496H60.979a.496.496 0 0 1-.496-.496m10.411-14.873a4.958 4.958 0 1 0 0-9.915 4.958 4.958 0 0 0 0 9.915m11.607-6.742c-.66 0-1.196.533-1.196 1.19v.595c0 .657.535 1.19 1.196 1.19H99.94c.66 0 1.196-.533 1.196-1.19v-.595c0-.657-.536-1.19-1.196-1.19zM67.132 22.934c-.66 0-1.196.533-1.196 1.19v.595c0 .657.536 1.19 1.196 1.19h43.219c.66 0 1.196-.533 1.196-1.19v-.595c0-.657-.536-1.19-1.196-1.19z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateCircleLogoSlidingListSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 22'>\n <path\n d='M0 2C0 .895.844 0 1.886 0h43.228C46.156 0 47 .895 47 2v1c0 1.105-.844 2-1.886 2H1.886C.844 5 0 4.105 0 3zm11.524 14.238a5.762 5.762 0 1 1-11.524 0 5.762 5.762 0 0 1 11.524 0M20.429 22a5.762 5.762 0 1 0 0-11.524 5.762 5.762 0 0 0 0 11.524m21.476-5.762a5.762 5.762 0 1 1-11.524 0 5.762 5.762 0 0 1 11.524 0M50.809 22a5.762 5.762 0 1 0 0-11.524 5.762 5.762 0 0 0 0 11.524m20.43-5.762a5.762 5.762 0 1 1-11.525 0 5.762 5.762 0 0 1 11.524 0M80.142 22a5.762 5.762 0 1 0 0-11.524 5.762 5.762 0 0 0 0 11.524m20.428-5.762a5.762 5.762 0 1 1-11.523 0 5.762 5.762 0 0 1 11.523 0M110.524 22a5.762 5.762 0 1 0 0-11.524 5.762 5.762 0 0 0 0 11.524'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateCoverFixedTileListSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 57'>\n <path\n d='M0 2.543A2.543 2.543 0 0 1 2.543 0H47.31a2.544 2.544 0 0 1 0 5.087H2.543A2.543 2.543 0 0 1 0 2.543m47.817 8.14c0-.281.228-.51.51-.51h20.347c.28 0 .509.229.509.51v21.365a.51.51 0 0 1-.51.508H48.327a.51.51 0 0 1-.509-.508zm-22.89-.51a.51.51 0 0 0-.51.51v21.365c0 .28.228.508.51.508h20.347a.51.51 0 0 0 .509-.508V10.683a.51.51 0 0 0-.51-.51zm69.69.51c0-.281.228-.51.51-.51h21.364a.51.51 0 0 1 .509.51v21.365a.51.51 0 0 1-.509.508H95.126a.51.51 0 0 1-.509-.508zm-22.89-.51a.51.51 0 0 0-.51.51v21.365c0 .28.228.508.51.508h20.347a.51.51 0 0 0 .509-.508V10.683a.51.51 0 0 0-.51-.51zM0 10.684c0-.281.228-.51.509-.51h21.365c.28 0 .509.229.509.51v21.365a.51.51 0 0 1-.51.508H.51A.51.51 0 0 1 0 32.048zM48.326 34.59a.51.51 0 0 0-.509.51v21.364c0 .281.228.509.51.509h20.347a.51.51 0 0 0 .509-.509V35.1a.51.51 0 0 0-.51-.509zm-23.909.51c0-.282.228-.51.51-.51h20.347c.28 0 .509.228.509.51v21.364a.51.51 0 0 1-.51.509H24.927a.51.51 0 0 1-.509-.509zM.51 34.59a.51.51 0 0 0-.509.51v21.364c0 .281.228.509.509.509h21.365a.51.51 0 0 0 .509-.509V35.1a.51.51 0 0 0-.51-.509z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateCoverSlidingPillListSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 19'>\n <path\n d='M0 2a2 2 0 0 1 2-2h45.755a2 2 0 0 1 2 2v1a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2zm27.432 7H1a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h26.432a1 1 0 0 0 1-1v-8a1 1 0 0 0-1-1m0 9.5H10.154v-9h17.278a.5.5 0 0 1 .5.5v8a.5.5 0 0 1-.5.5m60.91-8.5a1 1 0 0 0-1-1h-22.37a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h22.37a1 1 0 0 0 1-1zm-1 8.5H74.124v-9h13.216a.5.5 0 0 1 .5.5v8a.5.5 0 0 1-.5.5M60.94 9H31.462a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1H60.94a1 1 0 0 0 1-1v-8a1 1 0 0 0-1-1m0 9.5H40.617v-9H60.94a.5.5 0 0 1 .5.5v8a.5.5 0 0 1-.5.5m55.833-8.5a1 1 0 0 0-1-1h-24.4a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h24.4a1 1 0 0 0 1-1zm-1 8.5h-15.247v-9h15.247a.5.5 0 0 1 .5.5v8a.5.5 0 0 1-.5.5'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateEditableCoverFixedPillListSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 40'>\n <path\n d='M.976 0h25.798c.539 0 .976.537.976 1.2v9.6c0 .663-.437 1.2-.976 1.2H.976C.437 12 0 11.463 0 10.8V1.2C0 .537.437 0 .976 0m8.935 11.4h16.863c.27 0 .488-.269.488-.6V1.2c0-.331-.218-.6-.488-.6H9.911zM30.726 0h25.798c.539 0 .976.537.976 1.2v9.6c0 .663-.437 1.2-.976 1.2H30.726c-.539 0-.976-.537-.976-1.2V1.2c0-.663.437-1.2.976-1.2m8.935 11.4h16.863c.27 0 .488-.269.488-.6V1.2c0-.331-.218-.6-.488-.6H39.661zM86.274 0H60.476c-.539 0-.976.537-.976 1.2v9.6c0 .663.437 1.2.976 1.2h25.798c.539 0 .976-.537.976-1.2V1.2c0-.663-.437-1.2-.976-1.2m0 11.4H69.411V.6h16.863c.27 0 .488.269.488.6v9.6c0 .331-.219.6-.488.6M90.226 0h25.798c.539 0 .976.537.976 1.2v9.6c0 .663-.437 1.2-.976 1.2H90.226c-.539 0-.976-.537-.976-1.2V1.2c0-.663.437-1.2.976-1.2m8.935 11.4h16.863c.27 0 .488-.269.488-.6V1.2c0-.331-.218-.6-.488-.6H99.161zM26.774 14H.976C.437 14 0 14.537 0 15.2v9.6c0 .663.437 1.2.976 1.2h25.798c.539 0 .976-.537.976-1.2v-9.6c0-.663-.437-1.2-.976-1.2m0 11.4H9.911V14.6h16.863c.27 0 .488.269.488.6v9.6c0 .331-.218.6-.488.6M30.726 14h25.798c.539 0 .976.537.976 1.2v9.6c0 .663-.437 1.2-.976 1.2H30.726c-.539 0-.976-.537-.976-1.2v-9.6c0-.663.437-1.2.976-1.2m8.935 11.4h16.863c.27 0 .488-.269.488-.6v-9.6c0-.331-.218-.6-.488-.6H39.661zM86.274 14H60.476c-.539 0-.976.537-.976 1.2v9.6c0 .663.437 1.2.976 1.2h25.798c.539 0 .976-.537.976-1.2v-9.6c0-.663-.437-1.2-.976-1.2m0 11.4H69.411V14.6h16.863c.27 0 .488.269.488.6v9.6c0 .331-.219.6-.488.6M90.226 14h25.798c.539 0 .976.537.976 1.2v9.6c0 .663-.437 1.2-.976 1.2H90.226c-.539 0-.976-.537-.976-1.2v-9.6c0-.663.437-1.2.976-1.2m8.935 11.4h16.863c.27 0 .488-.269.488-.6v-9.6c0-.331-.218-.6-.488-.6H99.161zM26.774 28H.976C.437 28 0 28.537 0 29.2v9.6c0 .663.437 1.2.976 1.2h25.798c.539 0 .976-.537.976-1.2v-9.6c0-.663-.437-1.2-.976-1.2m0 11.4H9.911V28.6h16.863c.27 0 .488.269.488.6v9.6c0 .331-.218.6-.488.6M30.726 28h25.798c.539 0 .976.537.976 1.2v9.6c0 .663-.437 1.2-.976 1.2H30.726c-.539 0-.976-.537-.976-1.2v-9.6c0-.663.437-1.2.976-1.2m8.935 11.4h16.863c.27 0 .488-.269.488-.6v-9.6c0-.331-.218-.6-.488-.6H39.661z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateEventIconSlidingListSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 32'>\n <path\n d='M2.5 0a2.5 2.5 0 0 0 0 5h44.852a2.5 2.5 0 0 0 0-5zm46.317 31h20V11h-20zm-1-20.5a.5.5 0 0 1 .5-.5h21a.5.5 0 0 1 .5.5v21a.5.5 0 0 1-.5.5h-21a.5.5 0 0 1-.5-.5zM57.1 24.701h.136q.944 0 1.573-.246.634-.253 1.011-.697t.54-1.046q.117-.426.15-.903l-.013.014q-.375.41-.882.657a2.4 2.4 0 0 1-1.087.246q-.71 0-1.258-.267a2.64 2.64 0 0 1-.902-.738 3.3 3.3 0 0 1-.533-1.067 4.4 4.4 0 0 1-.178-1.264q0-.718.219-1.347.219-.63.636-1.107a2.86 2.86 0 0 1 1.011-.752 3.25 3.25 0 0 1 1.36-.274q.808 0 1.416.315t1.025.868q.417.553.63 1.285.21.732.211 1.572v.581q0 .883-.157 1.702a5.7 5.7 0 0 1-.513 1.511q-.348.69-.923 1.217a4 4 0 0 1-1.394.813q-.82.288-1.928.287h-.15zm3.424-5.01v.658q-.135.305-.369.551-.24.253-.56.404a1.7 1.7 0 0 1-.704.143q-.404 0-.704-.17a1.5 1.5 0 0 1-.5-.466 2.2 2.2 0 0 1-.3-.67 3.3 3.3 0 0 1-.096-.792q0-.439.103-.82.11-.39.307-.677a1.5 1.5 0 0 1 .5-.458q.3-.171.676-.171.342 0 .636.157.3.157.526.472.232.307.355.772.13.457.13 1.066M24.917 10a.5.5 0 0 0-.5.5v21a.5.5 0 0 0 .5.5h21a.5.5 0 0 0 .5-.5v-21a.5.5 0 0 0-.5-.5zM95 10.5a.5.5 0 0 1 .5-.5h21a.5.5 0 0 1 .5.5v21a.5.5 0 0 1-.5.5h-21a.5.5 0 0 1-.5-.5zM71.717 10a.5.5 0 0 0-.5.5v21a.5.5 0 0 0 .5.5h21a.5.5 0 0 0 .5-.5v-21a.5.5 0 0 0-.5-.5zM1 11h20v20H1zm-.5-1a.5.5 0 0 0-.5.5v21a.5.5 0 0 0 .5.5h21a.5.5 0 0 0 .5-.5v-21a.5.5 0 0 0-.5-.5zm13.884 6.95v-.903H7.486v1.312h5.155L8.669 26h1.736z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateFeaturedThumbnailSlidingListSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 27'>\n <path\n d='M5 0a5 5 0 0 0-5 5 4 4 0 0 0 4 4h109a4 4 0 0 0 4-4 5 5 0 0 0-5-5zM0 11.5a.5.5 0 0 1 .5-.5h27a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5zm30.5-.5a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h27a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5zm29.5.5a.5.5 0 0 1 .5-.5h26a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-.5.5h-26a.5.5 0 0 1-.5-.5zm29 0a.5.5 0 0 1 .5-.5h27a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-.5.5h-27a.5.5 0 0 1-.5-.5z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateFilterSlidingPillListSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 19'>\n <path\n d='M2 0a2 2 0 0 0-2 2v1a2 2 0 0 0 2 2h45.755a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zM1 9a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h25a1 1 0 0 0 1-1v-8a1 1 0 0 0-1-1zm59 1a1 1 0 0 1 1-1h25a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1H61a1 1 0 0 1-1-1zM31 9a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h25a1 1 0 0 0 1-1v-8a1 1 0 0 0-1-1zm59 1a1 1 0 0 1 1-1h25a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1H91a1 1 0 0 1-1-1z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateHeadingSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props} viewBox='0 0 117 25'>\n <path\n d='M4.77.78h48.839a4.5 4.5 0 1 1 0 9H4.769a4.5 4.5 0 1 1 0-9M.27 16.479c0 .914.74 1.655 1.655 1.655h112.932a1.655 1.655 0 0 0 0-3.31H1.925c-.915 0-1.655.741-1.655 1.655m0 6c0-.914.74-1.655 1.655-1.655h112.932a1.655 1.655 0 0 1 0 3.31H1.925A1.655 1.655 0 0 1 .27 22.478'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateHeroBannerSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 10'>\n <path\n d='M0 .391C0 .175.38 0 .847 0h115.306c.468 0 .847.175.847.391V9.61c0 .216-.379.391-.847.391H.847C.38 10 0 9.825 0 9.609z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateHeroBannerSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 22'>\n <path\n d='M0 .847C0 .38.38 0 .847 0h115.306c.468 0 .847.38.847.847v19.95a.847.847 0 0 1-.847.848H.847A.847.847 0 0 1 0 20.798z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateHeroBlockColourSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 119 12'>\n <path\n fill='currentColor'\n d='M1.847.143c-.29 0-.576.053-.809.16C.848.391.5.613.5 1.034v9.217c0 .42.348.643.538.731.233.107.52.16.81.16h115.305c.289 0 .576-.053.809-.16.19-.088.538-.31.538-.73V1.033c0-.42-.348-.643-.538-.73a2 2 0 0 0-.809-.161zM1.5 10.09V1.194c.079-.027.199-.051.347-.051H117.5v9H1.847c-.148 0-.268-.024-.347-.052'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateHeroThumbnailSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 119 12'>\n <path\n fill='currentColor'\n d='M1.847.5c-.29 0-.576.053-.809.16C.848.75.5.972.5 1.392v9.218c0 .42.348.642.538.73.233.108.52.161.81.161h115.305c.289 0 .576-.053.809-.16.19-.089.538-.311.538-.731V1.39c0-.42-.348-.642-.538-.73a2 2 0 0 0-.809-.161zM1.5 10.448V1.552c.079-.028.199-.052.347-.052H82v9H1.847c-.148 0-.268-.024-.347-.052'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplatePopoutThumbnailSlidingListLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 38'>\n <path\n d='M0 2.688a2.5 2.5 0 0 1 2.5-2.5h45.733a2.5 2.5 0 0 1 0 5H2.5a2.5 2.5 0 0 1-2.5-2.5m79.427 8a.5.5 0 0 1 .5-.5H116.5a.5.5 0 0 1 .5.5V30.64a.5.5 0 0 1-.5.5H79.927a.5.5 0 0 1-.5-.5zm-39.714 0a.5.5 0 0 1 .5-.5h36.573a.5.5 0 0 1 .5.5V30.64a.5.5 0 0 1-.5.5H40.213a.5.5 0 0 1-.5-.5zM0 10.688a.5.5 0 0 1 .5-.5h36.573a.5.5 0 0 1 .5.5V30.64a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5zm.028 24.466a2 2 0 0 1 2-2h24.497a2 2 0 0 1 0 4H2.028a2 2 0 0 1-2-2m39.75 0a2 2 0 0 1 2-2h24.498a2 2 0 1 1 0 4H41.78a2 2 0 0 1-2-2m39.61 0a2 2 0 0 1 2-2h24.498a2 2 0 1 1 0 4H81.389a2 2 0 0 1-2-2'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplatePopoutThumbnailSlidingListSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 32'>\n <path\n d='M2.5 0a2.5 2.5 0 0 0 0 5h44a2.5 2.5 0 0 0 0-5zm58 10a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h26a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5zm29 0a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h27a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5zm-59 0a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h27a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5zm-30 0a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h27a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5zM0 30c0-1.105.628-2 1.404-2h17.192c.776 0 1.404.895 1.404 2s-.628 2-1.404 2H1.404C.628 32 0 31.105 0 30m89 0c0-1.105.628-2 1.404-2h17.192c.776 0 1.404.895 1.404 2s-.628 2-1.404 2H90.404C89.628 32 89 31.105 89 30m-29 0c0-1.105.628-2 1.404-2h17.192c.776 0 1.404.895 1.404 2s-.628 2-1.404 2H61.404C60.628 32 60 31.105 60 30m-30 0c0-1.105.628-2 1.404-2h17.192c.776 0 1.404.895 1.404 2s-.628 2-1.404 2H31.404C30.628 32 30 31.105 30 30'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateQuestionAccordionSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 34'>\n <path\n fill='currentColor'\n d='M1.655 0h22.932a1.655 1.655 0 0 1 0 3.31H1.656a1.655 1.655 0 0 1 0-3.31M116 10V6H1v4zM1 11a1 1 0 0 1-1-1V6a1 1 0 0 1 1-1h115a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1zm0 14.31v-11h115v11zm-1 0a1 1 0 0 0 1 1h115a1 1 0 0 0 1-1v-11a1 1 0 0 0-1-1H1a1 1 0 0 0-1 1zm3.833-9.477H2.167a.166.166 0 1 0 0 .333h1.666A.17.17 0 0 0 4 16l-.001-.02a.17.17 0 0 0-.166-.147M1 33v-4h115v4zm-1 0a1 1 0 0 0 1 1h115a1 1 0 0 0 1-1v-4a1 1 0 0 0-1-1H1a1 1 0 0 0-1 1zm3-3c.092 0 .167.076.167.167v.666h.666c.086 0 .156.064.166.147L4 31a.17.17 0 0 1-.167.167h-.666v.666a.17.17 0 0 1-.147.166L3 32a.17.17 0 0 1-.167-.167v-.666h-.666a.166.166 0 1 1 0-.334h.666v-.666c0-.092.074-.167.167-.167m.167-22.833a.166.166 0 1 0-.333 0v.666h-.667a.166.166 0 1 0 0 .333h.666v.667c0 .091.075.167.167.167l.02-.001a.17.17 0 0 0 .147-.166v-.666h.666A.17.17 0 0 0 4 8l-.001-.02a.17.17 0 0 0-.166-.147h-.666z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateQuestionSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 20'>\n <path\n fill='currentColor'\n d='M24.588 1.285H1.654a1.655 1.655 0 0 0 0 3.31h22.932a1.655 1.655 0 0 0 0-3.31M1 7.595v11h115v-11zm0 12a1 1 0 0 1-1-1v-11a1 1 0 0 1 1-1h115a1 1 0 0 1 1 1v11a1 1 0 0 1-1 1zm113.167-10.5a.17.17 0 0 0-.167-.167.167.167 0 0 0-.167.167v.666h-.666a.167.167 0 1 0 0 .333h.666v.667c0 .091.075.167.167.167l.02-.001a.17.17 0 0 0 .147-.166v-.666h.666a.17.17 0 0 0 .167-.167l-.001-.02a.17.17 0 0 0-.166-.147h-.666zm-109.501.19c-.92 0-1.666.672-1.666 1.5 0 .829.746 1.5 1.666 1.5h52.668c.92 0 1.666-.671 1.666-1.5 0-.828-.746-1.5-1.666-1.5z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateRectangularLogoSlidingListSvg() {\n return (\n <svg viewBox='0 0 117 23'>\n <path d='M2.5 0C1.11929 0 0 1.11929 0 2.5C0 3.88071 1.11929 5 2.5 5H46.5C47.8807 5 49 3.88071 49 2.5C49 1.11929 47.8807 0 46.5 0H2.5Z' fill='#D7D7D7'/>\n <path d='M0 2.5C0 1.11929 1.11929 0 2.5 0H46.5C47.8807 0 49 1.11929 49 2.5C49 3.88071 47.8807 5 46.5 5H2.5C1.11929 5 0 3.88071 0 2.5Z' fill='#D7D7D7'/>\n <path d='M0 10.9334C0 10.4968 0.353937 10.1428 0.790541 10.1428H21.3446C21.7812 10.1428 22.1351 10.4968 22.1351 10.9334V22.0009C22.1351 22.4375 21.7812 22.7915 21.3446 22.7915H0.79054C0.353937 22.7915 0 22.4375 0 22.0009V10.9334Z' fill='#D7D7D7'/>\n <path d='M23.7162 10.9334C23.7162 10.4968 24.0702 10.1428 24.5068 10.1428H45.0608C45.4974 10.1428 45.8514 10.4968 45.8514 10.9334V22.0009C45.8514 22.4375 45.4974 22.7915 45.0608 22.7915H24.5068C24.0702 22.7915 23.7162 22.4375 23.7162 22.0009V10.9334Z' fill='#D7D7D7'/>\n <path d='M47.4324 10.9334C47.4324 10.4968 47.7864 10.1428 48.223 10.1428H68.777C69.2136 10.1428 69.5676 10.4968 69.5676 10.9334V22.0009C69.5676 22.4375 69.2136 22.7915 68.777 22.7915H48.223C47.7864 22.7915 47.4324 22.4375 47.4324 22.0009V10.9334Z' fill='#D7D7D7'/>\n <path d='M71.1487 10.9334C71.1487 10.4968 71.5026 10.1428 71.9392 10.1428H92.4933C92.9299 10.1428 93.2838 10.4968 93.2838 10.9334V22.0009C93.2838 22.4375 92.9299 22.7915 92.4933 22.7915H71.9392C71.5026 22.7915 71.1487 22.4375 71.1487 22.0009V10.9334Z' fill='#D7D7D7'/>\n <path d='M94.8648 10.9334C94.8648 10.4968 95.2188 10.1428 95.6554 10.1428H116.209C116.646 10.1428 117 10.4968 117 10.9334V22.0009C117 22.4375 116.646 22.7915 116.209 22.7915H95.6554C95.2188 22.7915 94.8648 22.4375 94.8648 22.0009V10.9334Z' fill='#D7D7D7'/>\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailFixedListLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 22'>\n <path\n d='M.413 0C.185 0 0 .385 0 .861v20.278c0 .476.185.861.413.861h56.174c.228 0 .413-.386.413-.861V.861C57 .385 56.815 0 56.587 0zm60 0C60.185 0 60 .385 60 .861v20.278c0 .476.185.861.413.861h56.174c.228 0 .413-.386.413-.861V.861c0-.476-.185-.861-.413-.861z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailFixedListMediaLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 43'>\n <path\n d='M2.5 0a2.5 2.5 0 0 0 0 5h45.733a2.5 2.5 0 0 0 0-5zM0 11.119a1 1 0 0 1 1-1h55.498a1 1 0 0 1 1 1V41.82a1 1 0 0 1-1 1H1a1 1 0 0 1-1-1zm59.502 0a1 1 0 0 1 1-1H116a1 1 0 0 1 1 1V41.82a1 1 0 0 1-1 1H60.502a1 1 0 0 1-1-1z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailFixedListSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 30'>\n <path\n d='M.268 0C.12 0 0 .245 0 .548v12.904c0 .303.12.548.268.548h36.464c.148 0 .268-.245.268-.548V.548C37 .245 36.88 0 36.732 0zm40 0C40.12 0 40 .245 40 .548v12.904c0 .303.12.548.268.548h36.464c.148 0 .268-.245.268-.548V.548C77 .245 76.88 0 76.732 0zM80 .548c0-.303.12-.548.268-.548h36.464c.148 0 .268.245.268.548v12.904c0 .303-.12.548-.268.548H80.268c-.148 0-.268-.245-.268-.548zM.268 16C.12 16 0 16.245 0 16.548v12.904c0 .303.12.548.268.548h36.464c.148 0 .268-.245.268-.548V16.548c0-.303-.12-.548-.268-.548zM40 16.548c0-.303.12-.548.268-.548h36.464c.148 0 .268.245.268.548v12.904c0 .303-.12.548-.268.548H40.268c-.148 0-.268-.245-.268-.548zM80.268 16c-.148 0-.268.245-.268.548v12.904c0 .303.12.548.268.548h36.464c.148 0 .268-.245.268-.548V16.548c0-.303-.12-.548-.268-.548z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailFixedListXLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 119 24'>\n <path\n fill='currentColor'\n d='M1.847.5C1.103.5.5 1.103.5 1.847v19.95c0 .745.603 1.348 1.347 1.348h115.306c.744 0 1.347-.603 1.347-1.347V1.848c0-.745-.603-1.348-1.347-1.348zM1.5 1.847c0-.192.155-.347.347-.347h76.18Q78 1.666 78 1.861v20.284H1.847a.347.347 0 0 1-.347-.347z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailSlidingListLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 31'>\n <path\n d='M2.5 0a2.5 2.5 0 0 0 0 5h45.733a2.5 2.5 0 0 0 0-5zm77.427 10a.5.5 0 0 0-.5.5v19.953a.5.5 0 0 0 .5.5H116.5a.5.5 0 0 0 .5-.5V10.5a.5.5 0 0 0-.5-.5zm-40.214.5a.5.5 0 0 1 .5-.5h36.573a.5.5 0 0 1 .5.5v19.953a.5.5 0 0 1-.5.5H40.213a.5.5 0 0 1-.5-.5zM.5 10a.5.5 0 0 0-.5.5v19.953a.5.5 0 0 0 .5.5h36.573a.5.5 0 0 0 .5-.5V10.5a.5.5 0 0 0-.5-.5z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailSlidingListSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 26'>\n <path\n d='M0 2.5A2.5 2.5 0 0 1 2.5 0h44a2.5 2.5 0 0 1 0 5h-44A2.5 2.5 0 0 1 0 2.5m60 8a.5.5 0 0 1 .5-.5h26a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-.5.5h-26a.5.5 0 0 1-.5-.5zm29.5-.5a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h27a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5zm-59.5.5a.5.5 0 0 1 .5-.5h27a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-.5.5h-27a.5.5 0 0 1-.5-.5zM.5 10a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h27a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailVerticalListSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 36'>\n <path\n fill='currentColor'\n d='M0 .5A.5.5 0 0 1 .5 0h27a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5zM31.913 0a1.655 1.655 0 0 0 0 3.31h22.932a1.655 1.655 0 0 0 0-3.31zm-1.655 7.655c0-.914.74-1.655 1.655-1.655h82.932a1.655 1.655 0 0 1 0 3.31H31.913a1.655 1.655 0 0 1-1.655-1.655m1.655 4.535a1.655 1.655 0 0 0 0 3.31h62.932a1.655 1.655 0 0 0 0-3.31zM.5 20a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h27a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5zm31.413 0a1.655 1.655 0 0 0 0 3.31h22.932a1.655 1.655 0 0 0 0-3.31zm-1.655 7.655c0-.914.74-1.655 1.655-1.655h82.932a1.655 1.655 0 0 1 0 3.31H31.913a1.655 1.655 0 0 1-1.655-1.655m1.655 4.535a1.655 1.655 0 0 0 0 3.31h62.932a1.655 1.655 0 0 0 0-3.31z'\n />\n </svg>\n );\n}\n","import { ThumbnailFixedListSearchCtaWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/all-videos-list/ThumbnailFixedListSearchCtaWidgetTemplate';\nimport { AuthorReviewerWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/author-reviewer/AuthorReviewerWidgetTemplate';\nimport { PartialAuthorReviewerWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/author-reviewer/partial-loading/PartialAuthorReviewerWidgetTemplate';\nimport { CircleLogoSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/circle-logo-sliding-list/CircleLogoSlidingListWidgetTemplate';\nimport { PartialCircleLogoSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/circle-logo-sliding-list/partial-loading/PartialCircleLogoSlidingList';\nimport { CoverFixedPillListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-fixed-pill-list-large/CoverFixedPillListLargeWidgetTemplate';\nimport { PartialCoverFixedPillListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-fixed-pill-list-large/partial-loading/PartialCoverFixedPillListLargeWidgetTemplate';\nimport { CoverFixedPillListXSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-fixed-pill-list-xsmall/CoverFixedPillListXSmallWidgetTemplate';\nimport { PartialCoverFixedPillListXSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-fixed-pill-list-xsmall/partial-loading/PartialCoverFixedPillListXSmallWidgetTemplate';\nimport { CoverFixedTileListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-fixed-tile-list/CoverFixedTileListWidgetTemplate';\nimport { PartialCoverFixedTileListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-fixed-tile-list/partial-loading/PartialCoverFixedTileListWidgetTemplate';\nimport { CoverSlidingPillListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-sliding-pill-list-small/CoverSlidingPillListSmallWidgetTemplate';\nimport { PartialCoverSlidingPillListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-sliding-pill-list-small/partial-loading/PartialCoverSlidingPillListSmallWidgetTemplate';\nimport { CurriculumCodeSearchResultsWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/curriculum-code-search-results/CurriculumCodeSearchResultsWidgetTemplate';\nimport { PartialCurriculumCodeSearchResultsWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/curriculum-code-search-results/partial/PartialCurriculumCodeSearchResultsWidgetTemplate';\nimport { CurriculumResourcesAccordionWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/curriculum-resources-accordion/CurriculumResourcesAccordionWidgetTemplate';\nimport { PartialCurriculumResourcesAccordionWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/curriculum-resources-accordion/partial-loading/PartialCurriculumResourcesAccordionWidgetTemplate';\nimport { EditableCoverFixedPillListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/editable-cover-fixed-pill-list-small/EditableCoverFixedPillListSmallWidgetTemplate';\nimport { PartialEditableCoverFixedPillListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/editable-cover-fixed-pill-list-small/partial-loading/PartialEditableCoverFixedPillListSmallWidgetTemplate';\nimport { EventIconSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/event-icon-sliding-list/EventIconSlidingListWidgetTemplate';\nimport { PartialEventIconSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/event-icon-sliding-list/partial-loading/PartialEventIconSlidingListWidgetTemplate';\nimport { FeaturedThumbnailSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/featured-thumbnail-sliding-list/FeaturedThumbnailSlidingListWidgetTemplate';\nimport { PartialFeaturedThumbnailSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/featured-thumbnail-sliding-list/partial-loading/PartialFeaturedThumbnailSlidingListWidgetTemplate';\nimport { FeedbackWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/feedback/FeedbackWidgetTemplate';\nimport { PartialFeedbackWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/feedback/partial-loading/PartialFeedbackWidgetTemplate';\nimport { FilterSlidingPillListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/filter-sliding-pill-list-small/FilterSlidingPillListSmallWidgetTemplate';\nimport { PartialFilterSlidingPillListSmall } from 'libs/shared/components/widgets/curated-widgets/templates/filter-sliding-pill-list-small/partial-loading/PartialFilterSlidingPillListSmall';\nimport { HeadingWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/heading/HeadingWidgetTemplate';\nimport { PartialHeadingWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/heading/partial-loading/PartialHeadingWidgetTemplate';\nimport { HeroBannerWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner/HeroBannerWidgetTemplate';\nimport { PartialHeroBannerWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner/partial-loading/PartialHeroBannerWidgetTemplate';\nimport { HeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/HeroBannerSmallWidgetTemplate';\nimport { PartialHeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/partial-loading/PartialHeroBannerSmallWidgetTemplate';\nimport { HeroBlockColourSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-block-colour-small/HeroBlockColourSmallWidgetTemplate';\nimport { PartialHeroBlockColourSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-block-colour-small/partial-loading/PartialHeroBlockColourSmallWidgetTemplate';\nimport { HeroThumbnailSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-thumbnail-small/HeroThumbnailSmallWidgetTemplate';\nimport { PartialHeroThumbnailSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-thumbnail-small/partial-loading/PartialHeroThumbnailSmallWidgetTemplate';\nimport { PartialPopoutThumbnailSlidingListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_large/partial-loading/PartialPopoutThumbnailSlidingListLarge';\nimport { PopoutThumbnailSlidingListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_large/PopoutThumbnailSlidingListLargeWidgetTemplate';\nimport { PartialPopoutThumbnailSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_small/partial-loading/PartialPopoutThumbnailSlidingListSmall';\nimport { PopoutThumbnailSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_small/PopoutThumbnailSlidingListSmallWidgetTemplate';\nimport { PartialPosterFixedListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-fixed-list-large/partial-loading/PartialPosterFixedListLargeWidgetTemplate';\nimport { PosterFixedListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-fixed-list-large/PosterFixedListLargeWidgetTemplate';\nimport { PartialPosterSlidingListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-large/partial-loading/PartialPosterSlidingListLargeWidgetTemplate';\nimport { PosterSlidingListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-large/PosterSlidingListLargeWidgetTemplate';\nimport { PartialPosterSlidingListMediumWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-medium/partial-loading/PartialPosterSlidingListMediumWidgetTemplate';\nimport { PosterSlidingListMediumWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-medium/PosterSlidingListMediumWidgetTemplate';\nimport { ClassificationPosterSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-small/classification/ClassificationPosterSlidingListSmallWidgetTemplate';\nimport { PartialPosterSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-small/partial-loading/PartialPosterSlidingListSmallWidgetTemplate';\nimport { SeriesPosterSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-small/series/SeriesPosterSlidingListSmallWidgetTemplate';\nimport { PartialQuestionWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/question/partial-loading/PartialQuestionWidgetTemplate';\nimport { QuestionWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/question/QuestionWidgetTemplate';\nimport { PartialQuestionAccordionWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/question-accordion/partial-loading/PartialQuestionAccordionWidgetTemplate';\nimport { QuestionAccordionWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/question-accordion/QuestionAccordionWidgetTemplate';\nimport { PartialRectangularLogoSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/rectangular-logo-sliding-list/partial-loading/PartialRectangularLogoSlidingList';\nimport { RectangularLogoSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/rectangular-logo-sliding-list/RectangularLogoSlidingListWidgetTemplate';\nimport { PartialSearchSuggestionsBlurbWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/search-suggestions-blurb/partial-loading/PartialSearchSuggestionsBlurbWidgetTemplate';\nimport { SearchSuggestionsBlurbWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/search-suggestions-blurb/SearchSuggestionsBlurbWidgetTemplate';\nimport { PartialStatsCoverFixedPillListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/stats-cover-fixed-pill-list-large/partial-loading/PartialStatsCoverFixedPillListLargeWidgetTemplate';\nimport { StatsCoverFixedPillListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/stats-cover-fixed-pill-list-large/StatsCoverFixedPillListLargeWidgetTemplate';\nimport { PartialTagSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/tag-sliding-list/partial-loading/PartialTagSlidingListWidgetTemplate';\nimport { TagSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/tag-sliding-list/TagSlidingListWidgetTemplate';\nimport { PartialThumbnailFeaturedMediaWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-featured-media/partial-loading/PartialThumbnailFeaturedMediaWidgetTemplate';\nimport { ThumbnailFeaturedMediaWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-featured-media/ThumbnailFeaturedMediaWidgetTemplate';\nimport { PartialThumbnailFixedListFolderSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-folder-small/partial-loading/PartialThumbnailFixedListFolderSmallWidgetTemplate';\nimport { ThumbnailFixedListFolderSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-folder-small/ThumbnailFixedListFolderSmallWidgetTemplate';\nimport { PartialThumbnailFixedListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-large/partial-loading/PartialThumbnailFixedListLargeWidgetTemplate';\nimport { ThumbnailFixedListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-large/ThumbnailFixedListLargeWidgetTemplate';\nimport { PartialThumbnailFixedListMediaLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/partial-loading/PartialThumbnailFixedListMediaLargeWidgetTemplate';\nimport { ThumbnailFixedListMediaLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/ThumbnailFixedListMediaLargeWidgetTemplate';\nimport { PartialThumbnailFixedListMediaSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-small/partial-loading/PartialThumbnailFixedListMediaSmallWidgetTemplate';\nimport { ThumbnailFixedListMediaSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-small/ThumbnailFixedListMediaSmallWidgetTemplate';\nimport { PartialThumbnailFixedSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-small/partial-loading/PartialThumbnailFixedListSmallWidgetTemplate';\nimport { ThumbnailFixedListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-small/ThumbnailFixedListSmallWidgetTemplate';\nimport { PartialThumbnailFixedListXLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-xlarge/partial-loading/PartialThumbnailFixedListXLargeWidgetTemplate';\nimport { ThumbnailFixedListXLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-xlarge/ThumbnailFixedListXLargeWidgetTemplate';\nimport { PartialThumbnailHeroMediaWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-hero-media/partial-loading/PartialThumbnailHeroMediaWidgetTemplate';\nimport { ThumbnailHeroMediaWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-hero-media/ThumbnailHeroMediaWidgetTemplate';\nimport { PartialThumbnailSlidingListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-sliding-list-large/partial-loading/PartialThumbnailSlidingListLargeWidgetTemplate';\nimport { ThumbnailSlidingListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-sliding-list-large/ThumbnailSlidingListLargeWidgetTemplate';\nimport { PartialThumbnailSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-sliding-list-small/partial-loading/PartialThumbnailSlidingListSmallWidgetTemplate';\nimport { ThumbnailSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-sliding-list-small/ThumbnailSlidingListSmallWidgetTemplate';\nimport { PartialThumbnailSlidingListSmallV2WidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-sliding-list-small_v2/partial-loading/PartialThumbnailSlidingListSmallV2WidgetTemplate';\nimport { ThumbnailSlidingListSmallV2WidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-sliding-list-small_v2/ThumbnailSlidingListSmallV2WidgetTemplate';\nimport { PartialThumbnailVerticalListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-vertical-list/partial-loading/PartialThumbnailVerticalListWidgetTemplate';\nimport { ThumbnailVerticalListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-vertical-list/ThumbnailVerticalListWidgetTemplate';\nimport { AnyWidgetTemplateProps, PartialWidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { WidgetTemplateCoverFixedPillListLargeSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplateCoverFixedPillListLargeSvg';\nimport { WidgetTemplateCoverFixedPillListXSmallSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplateCoverFixedPillListXsmallSvg';\nimport { WidgetTemplateFeedbackCtaSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplateFeedbackCtaSvg';\nimport { WidgetTemplatePopoutThumbnailSlidingListSmallCtaSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplatePopoutThumbnailSlidingListSmallCtaSvg';\nimport { WidgetTemplatePosterSlidingListLargeSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplatePosterSlidingListLargeSvg';\nimport { WidgetTemplatePosterSlidingListMediumSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplatePosterSlidingListMediumSvg';\nimport { WidgetTemplatePosterSlidingListSmallSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplatePosterSlidingListSmallSvg';\nimport { WidgetTemplateStatsCoverFixedPillListLargeSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplateStatsCoverFixedPillListLargeSvg';\nimport { WidgetTemplateThumbnailFeaturedMediaSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplateThumbnailFeaturedMediaSvg';\nimport { WidgetTemplateThumbnailHeroMediaSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplateThumbnailHeroMediaSvg';\nimport { DashboardTargetType } from 'libs/shared/interfaces';\nimport { SvgIcon } from 'libs/shared/utils/SvgHelper';\n\nimport { RectangularLogoFixedListWidgetTemplate } from '../components/widgets/curated-widgets/templates/rectangular-logo-fixed-list/RectangularLogoFixedListWidgetTemplate';\nimport { WidgetTemplateAuthorReviewerSvg } from '../images/svg/widgets/templates/WidgetTemplateAuthorReviewerSvg';\nimport { WidgetTemplateCircleLogoSlidingListSvg } from '../images/svg/widgets/templates/WidgetTemplateCircleLogoSlidingListSvg';\nimport { WidgetTemplateCoverFixedTileListSvg } from '../images/svg/widgets/templates/WidgetTemplateCoverFixedTileListSvg';\nimport { WidgetTemplateCoverSlidingPillListSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateCoverSlidingPillListSmallSvg';\nimport { WidgetTemplateEditableCoverFixedPillListSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateEditableCoverFixedPillListSmallSvg';\nimport { WidgetTemplateEventIconSlidingListSvg } from '../images/svg/widgets/templates/WidgetTemplateEventIconSlidingListSvg';\nimport { WidgetTemplateFeaturedThumbnailSlidingListSvg } from '../images/svg/widgets/templates/WidgetTemplateFeaturedThumbnailSlidingListSvg';\nimport { WidgetTemplateFilterSlidingPillListSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateFilterSlidingPillListSmallSvg';\nimport { WidgetTemplateHeadingSvg } from '../images/svg/widgets/templates/WidgetTemplateHeadingSvg';\nimport { WidgetTemplateHeroBannerSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateHeroBannerSmallSvg';\nimport { WidgetTemplateHeroBannerSvg } from '../images/svg/widgets/templates/WidgetTemplateHeroBannerSvg';\nimport { WidgetTemplateHeroBlockColourSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateHeroBlockColourSmallSvg';\nimport { WidgetTemplateHeroThumbnailSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateHeroThumbnailSmallSvg';\nimport { WidgetTemplatePopoutThumbnailSlidingListLargeSvg } from '../images/svg/widgets/templates/WidgetTemplatePopoutThumbnailSlidingListLargeSvg';\nimport { WidgetTemplatePopoutThumbnailSlidingListSmallSvg } from '../images/svg/widgets/templates/WidgetTemplatePopoutThumbnailSlidingListSmallSvg';\nimport { WidgetTemplateQuestionAccordionSvg } from '../images/svg/widgets/templates/WidgetTemplateQuestionAccordionSvg';\nimport { WidgetTemplateQuestionSvg } from '../images/svg/widgets/templates/WidgetTemplateQuestionSvg';\nimport { WidgetTemplateRectangularLogoSlidingListSvg } from '../images/svg/widgets/templates/WidgetTemplateRectangularLogoSlidingListSvg';\nimport { WidgetTemplateThumbnailFixedListLargeSvg } from '../images/svg/widgets/templates/WidgetTemplateThumbnailFixedListLargeSvg';\nimport { WidgetTemplateThumbnailFixedListMediaLargeSvg } from '../images/svg/widgets/templates/WidgetTemplateThumbnailFixedListMediaLargeSvg';\nimport { WidgetTemplateThumbnailFixedListSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateThumbnailFixedListSmallSvg';\nimport { WidgetTemplateThumbnailFixedListXLargeSvg } from '../images/svg/widgets/templates/WidgetTemplateThumbnailFixedListXlargeSvg';\nimport { WidgetTemplateThumbnailSlidingListLargeSvg } from '../images/svg/widgets/templates/WidgetTemplateThumbnailSlidingListLargeSvg';\nimport { WidgetTemplateThumbnailSlidingListSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateThumbnailSlidingListSmallSvg';\nimport { WidgetTemplateThumbnailVerticalListSvg } from '../images/svg/widgets/templates/WidgetTemplateThumbnailVerticalListSvg';\n\ninterface PredicateOptions {\n targetType: DashboardTargetType;\n product: ProductId;\n widgetTypeId: WidgetTypeId;\n isTopLevelClassification?: boolean;\n}\n\ninterface WidgetTemplateConfigType {\n getComponent: (widgetId: WidgetTypeId) => ((props: AnyWidgetTemplateProps) => JSX.Element);\n partialLoading: (props: PartialWidgetTemplateProps) => JSX.Element;\n icon: SvgIcon;\n predicate: (options: PredicateOptions) => boolean;\n className: string;\n displayName?: string;\n}\n\nexport const WidgetTemplateConfig: Record<WidgetTemplate, WidgetTemplateConfigType> = {\n [WidgetTemplate.ThumbnailHeroMedia]: {\n getComponent: () => ThumbnailHeroMediaWidgetTemplate,\n partialLoading: PartialThumbnailHeroMediaWidgetTemplate,\n icon: WidgetTemplateThumbnailHeroMediaSvg,\n predicate: ({ targetType }) => {\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.PartnerProfile\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.PosterSlidingListLarge]: {\n getComponent: () => PosterSlidingListLargeWidgetTemplate,\n partialLoading: PartialPosterSlidingListLargeWidgetTemplate,\n icon: WidgetTemplatePosterSlidingListLargeSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.Company,\n DashboardTargetType.PartnerProfile\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.PosterSlidingListMedium]: {\n getComponent: () => PosterSlidingListMediumWidgetTemplate,\n partialLoading: PartialPosterSlidingListMediumWidgetTemplate,\n icon: WidgetTemplatePosterSlidingListMediumSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.Company\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.PosterSlidingListSmall]: {\n getComponent: widgetId => {\n switch (widgetId) {\n case WidgetTypeId.CuratedClassifications:\n return ClassificationPosterSlidingListSmallWidgetTemplate;\n case WidgetTypeId.CuratedSeries:\n return SeriesPosterSlidingListSmallWidgetTemplate;\n default:\n // fall back to ClassificationPosterSlidingListSmallWidgetTemplate\n return ClassificationPosterSlidingListSmallWidgetTemplate;\n }\n },\n partialLoading: PartialPosterSlidingListSmallWidgetTemplate,\n icon: WidgetTemplatePosterSlidingListSmallSvg,\n predicate: ({ targetType, widgetTypeId, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n switch (widgetTypeId) {\n case WidgetTypeId.CuratedClassifications: {\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n }\n case WidgetTypeId.CuratedSeries: {\n return [\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.Company,\n DashboardTargetType.PartnerProfile\n ].includes(targetType);\n }\n default: {\n return false;\n }\n }\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailFeaturedMedia]: {\n getComponent: () => ThumbnailFeaturedMediaWidgetTemplate,\n partialLoading: PartialThumbnailFeaturedMediaWidgetTemplate,\n icon: WidgetTemplateThumbnailFeaturedMediaSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.PartnerProfile\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.CoverFixedPillListLarge]: {\n getComponent: () => CoverFixedPillListLargeWidgetTemplate,\n partialLoading: PartialCoverFixedPillListLargeWidgetTemplate,\n icon: WidgetTemplateCoverFixedPillListLargeSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return [\n DashboardTargetType.Classification\n ].includes(targetType);\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.StatsCoverFixedPillListLarge]: {\n getComponent: () => StatsCoverFixedPillListLargeWidgetTemplate,\n partialLoading: PartialStatsCoverFixedPillListLargeWidgetTemplate,\n icon: WidgetTemplateStatsCoverFixedPillListLargeSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.ClassificationDirectory\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.CoverFixedPillListXSmall]: {\n getComponent: () => CoverFixedPillListXSmallWidgetTemplate,\n partialLoading: PartialCoverFixedPillListXSmallWidgetTemplate,\n icon: WidgetTemplateCoverFixedPillListXSmallSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return [\n DashboardTargetType.Discover\n ].includes(targetType);\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.CoverSlidingPillListSmall]: {\n getComponent: () => CoverSlidingPillListSmallWidgetTemplate,\n partialLoading: PartialCoverSlidingPillListSmallWidgetTemplate,\n icon: WidgetTemplateCoverSlidingPillListSmallSvg,\n predicate: ({ targetType, widgetTypeId, product }) => {\n if (product === ProductId.StreamableLearning) {\n if (widgetTypeId === WidgetTypeId.Classifications) return false;\n\n return [\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.Classification\n ].includes(targetType);\n }\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.Company\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.CoverFixedTileList]: {\n getComponent: () => CoverFixedTileListWidgetTemplate,\n partialLoading: PartialCoverFixedTileListWidgetTemplate,\n icon: WidgetTemplateCoverFixedTileListSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.FeaturedThumbnailSlidingList]: {\n getComponent: () => FeaturedThumbnailSlidingListWidgetTemplate,\n partialLoading: PartialFeaturedThumbnailSlidingListWidgetTemplate,\n icon: WidgetTemplateFeaturedThumbnailSlidingListSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.PartnerProfile\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.HeroBanner]: {\n getComponent: () => HeroBannerWidgetTemplate,\n partialLoading: PartialHeroBannerWidgetTemplate,\n icon: WidgetTemplateHeroBannerSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.HeroBannerSmall]: {\n getComponent: () => HeroBannerSmallWidgetTemplate,\n partialLoading: PartialHeroBannerSmallWidgetTemplate,\n icon: WidgetTemplateHeroBannerSmallSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.PartnerProfile\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.HeroThumbnailSmall]: {\n getComponent: () => HeroThumbnailSmallWidgetTemplate,\n partialLoading: PartialHeroThumbnailSmallWidgetTemplate,\n icon: WidgetTemplateHeroThumbnailSmallSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.HeroBlockColourSmall]: {\n getComponent: () => HeroBlockColourSmallWidgetTemplate,\n partialLoading: PartialHeroBlockColourSmallWidgetTemplate,\n icon: WidgetTemplateHeroBlockColourSmallSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.ClassificationDirectory,\n DashboardTargetType.ClassificationCurriculum\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailFixedListXLarge]: {\n getComponent: () => ThumbnailFixedListXLargeWidgetTemplate,\n partialLoading: PartialThumbnailFixedListXLargeWidgetTemplate,\n icon: WidgetTemplateThumbnailFixedListXLargeSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailFixedListLarge]: {\n getComponent: () => ThumbnailFixedListLargeWidgetTemplate,\n partialLoading: PartialThumbnailFixedListLargeWidgetTemplate,\n icon: WidgetTemplateThumbnailFixedListLargeSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.PartnerProfile\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailFixedListSmall]: {\n getComponent: () => ThumbnailFixedListSmallWidgetTemplate,\n partialLoading: PartialThumbnailFixedSmallWidgetTemplate,\n icon: WidgetTemplateThumbnailFixedListSmallSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.EditableCoverFixedPillListSmall]: {\n getComponent: () => EditableCoverFixedPillListSmallWidgetTemplate,\n partialLoading: PartialEditableCoverFixedPillListSmallWidgetTemplate,\n icon: WidgetTemplateEditableCoverFixedPillListSmallSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Discover\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.Heading]: {\n getComponent: () => HeadingWidgetTemplate,\n partialLoading: PartialHeadingWidgetTemplate,\n icon: WidgetTemplateHeadingSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.ClassificationDirectory,\n DashboardTargetType.Discover,\n DashboardTargetType.PartnerProfile\n ].includes(targetType);\n },\n className: 'heading-widget-template'\n },\n\n [WidgetTemplate.AuthorReviewer]: {\n getComponent: () => AuthorReviewerWidgetTemplate,\n partialLoading: PartialAuthorReviewerWidgetTemplate,\n icon: WidgetTemplateAuthorReviewerSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [DashboardTargetType.Classification].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.Question]: {\n getComponent: () => QuestionWidgetTemplate,\n partialLoading: PartialQuestionWidgetTemplate,\n icon: WidgetTemplateQuestionSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.QuestionAccordion]: {\n getComponent: () => QuestionAccordionWidgetTemplate,\n partialLoading: PartialQuestionAccordionWidgetTemplate,\n icon: WidgetTemplateQuestionAccordionSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.FeedbackCta]: {\n getComponent: () => FeedbackWidgetTemplate,\n partialLoading: PartialFeedbackWidgetTemplate,\n icon: WidgetTemplateFeedbackCtaSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailFixedListMediaLarge]: {\n getComponent: () => ThumbnailFixedListMediaLargeWidgetTemplate,\n partialLoading: PartialThumbnailFixedListMediaLargeWidgetTemplate,\n icon: WidgetTemplateThumbnailFixedListMediaLargeSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.PopoutThumbnailSlidingListLarge]: {\n getComponent: () => PopoutThumbnailSlidingListLargeWidgetTemplate,\n partialLoading: PartialPopoutThumbnailSlidingListLargeWidgetTemplate,\n icon: WidgetTemplatePopoutThumbnailSlidingListLargeSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.PartnerProfile,\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.PopoutThumbnailSlidingListSmall]: {\n getComponent: () => PopoutThumbnailSlidingListSmallWidgetTemplate,\n partialLoading: PartialPopoutThumbnailSlidingListSmallWidgetTemplate,\n icon: WidgetTemplatePopoutThumbnailSlidingListSmallSvg,\n predicate: ({ targetType, product, isTopLevelClassification }) => {\n if (product === ProductId.StreamableLearning) {\n return [\n DashboardTargetType.Discover,\n DashboardTargetType.Company\n ].includes(targetType);\n }\n\n if (targetType === DashboardTargetType.Classification)\n return isTopLevelClassification;\n\n return [\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.PartnerProfile\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.FilterSlidingPillListSmall]: {\n getComponent: () => FilterSlidingPillListSmallWidgetTemplate,\n partialLoading: PartialFilterSlidingPillListSmall,\n icon: WidgetTemplateFilterSlidingPillListSmallSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.CircleLogoSlidingList]: {\n getComponent: () => CircleLogoSlidingListWidgetTemplate,\n partialLoading: PartialCircleLogoSlidingListWidgetTemplate,\n icon: WidgetTemplateCircleLogoSlidingListSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning) {\n return [\n DashboardTargetType.Discover,\n DashboardTargetType.Company\n ].includes(targetType);\n }\n\n return [\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.RectangularLogoSlidingList]: {\n getComponent: () => RectangularLogoSlidingListWidgetTemplate,\n partialLoading: PartialRectangularLogoSlidingListWidgetTemplate,\n icon: WidgetTemplateRectangularLogoSlidingListSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Discover,\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.Search,\n DashboardTargetType.PartnerProfile\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.RectangularLogoFixedList]: {\n getComponent: () => RectangularLogoFixedListWidgetTemplate,\n partialLoading: PartialRectangularLogoSlidingListWidgetTemplate,\n // @partner TODO: Update this\n icon: null,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Discover,\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.Search,\n DashboardTargetType.DiscoverPartnerProfiles\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.EventIconSlidingList]: {\n getComponent: () => EventIconSlidingListWidgetTemplate,\n partialLoading: PartialEventIconSlidingListWidgetTemplate,\n icon: WidgetTemplateEventIconSlidingListSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return [\n DashboardTargetType.Discover,\n DashboardTargetType.Classification,\n DashboardTargetType.Company\n ].includes(targetType);\n\n return [\n DashboardTargetType.Discover,\n DashboardTargetType.Classification\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailVerticalList]: {\n getComponent: () => ThumbnailVerticalListWidgetTemplate,\n partialLoading: PartialThumbnailVerticalListWidgetTemplate,\n icon: WidgetTemplateThumbnailVerticalListSvg,\n predicate: ({ targetType, product }) => {\n if (DashboardTargetType.PartnerProfile === targetType)\n return true;\n\n if (!(product === ProductId.StreamableLearning))\n return false;\n\n return [\n DashboardTargetType.Company,\n DashboardTargetType.Classification,\n DashboardTargetType.PartnerProfile\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.InfiniteThumbnailVerticalList]: {\n getComponent: () => ThumbnailVerticalListWidgetTemplate,\n partialLoading: PartialThumbnailVerticalListWidgetTemplate,\n icon: WidgetTemplateThumbnailVerticalListSvg,\n displayName: 'Vertical list with infinite scroll',\n predicate: ({ targetType }) => {\n if (DashboardTargetType.PartnerProfile === targetType)\n return true;\n return false;\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailFixedListSearchCta]: {\n getComponent: () => ThumbnailFixedListSearchCtaWidgetTemplate,\n partialLoading: PartialPopoutThumbnailSlidingListSmallWidgetTemplate,\n icon: WidgetTemplatePopoutThumbnailSlidingListSmallCtaSvg,\n displayName: 'Fixed List with Search CTA',\n predicate: ({ targetType }) => {\n if (DashboardTargetType.PartnerProfile === targetType)\n return true;\n return false;\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailSlidingListSmallV2]: {\n getComponent: () => ThumbnailSlidingListSmallV2WidgetTemplate,\n partialLoading: PartialThumbnailSlidingListSmallV2WidgetTemplate,\n icon: WidgetTemplateThumbnailSlidingListSmallSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning) {\n return false;\n }\n\n return [ DashboardTargetType.Classification, DashboardTargetType.PartnerProfile ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.CurriculumResourcesAccordion]: {\n getComponent: () => CurriculumResourcesAccordionWidgetTemplate,\n partialLoading: PartialCurriculumResourcesAccordionWidgetTemplate,\n icon: null,\n predicate: () => false,\n className: ''\n },\n\n /**\n * Templates currently specific to Search\n */\n [WidgetTemplate.ThumbnailFixedListMediaSmall]: {\n getComponent: () => ThumbnailFixedListMediaSmallWidgetTemplate,\n partialLoading: PartialThumbnailFixedListMediaSmallWidgetTemplate,\n icon: null,\n predicate: () => false,\n className: 'thumbnail-fixed-list-media-small-widget-template'\n },\n\n [WidgetTemplate.ThumbnailFixedListFolderSmall]: {\n getComponent: () => ThumbnailFixedListFolderSmallWidgetTemplate,\n partialLoading: PartialThumbnailFixedListFolderSmallWidgetTemplate,\n icon: null,\n predicate: () => false,\n className: ''\n },\n \n [WidgetTemplate.TagSlidingList]: {\n getComponent: () => TagSlidingListWidgetTemplate,\n partialLoading: PartialTagSlidingListWidgetTemplate,\n icon: null,\n predicate: () => false,\n className: 'tag-sliding-list-widget-template'\n },\n\n [WidgetTemplate.CurriculumCodeSearchResults]: {\n getComponent: () => CurriculumCodeSearchResultsWidgetTemplate,\n partialLoading: PartialCurriculumCodeSearchResultsWidgetTemplate,\n icon: null,\n predicate: () => false,\n className: ''\n },\n\n [WidgetTemplate.PosterFixedListLarge]: {\n getComponent: () => PosterFixedListLargeWidgetTemplate,\n partialLoading: PartialPosterFixedListLargeWidgetTemplate,\n icon: null,\n predicate: () => false,\n className: 'poster-fixed-list-large-widget-template'\n },\n\n [WidgetTemplate.SearchSuggestionsBlurb]: {\n getComponent: () => SearchSuggestionsBlurbWidgetTemplate,\n partialLoading: PartialSearchSuggestionsBlurbWidgetTemplate,\n icon: null,\n predicate: () => false,\n className: ''\n },\n\n /**\n * The templates below are currently not in use, but are still supported\n */\n [WidgetTemplate.ThumbnailSlidingListSmall]: {\n getComponent: () => ThumbnailSlidingListSmallWidgetTemplate,\n partialLoading: PartialThumbnailSlidingListSmallWidgetTemplate,\n icon: WidgetTemplateThumbnailSlidingListSmallSvg,\n predicate: () => false,\n className: ''\n },\n\n [WidgetTemplate.ThumbnailSlidingListLarge]: {\n getComponent: () => ThumbnailSlidingListLargeWidgetTemplate,\n partialLoading: PartialThumbnailSlidingListLargeWidgetTemplate,\n icon: WidgetTemplateThumbnailSlidingListLargeSvg,\n predicate: () => false,\n className: ''\n }\n};\n"],"x_google_ignoreList":[1,2,3,4,5,6,7,8],"mappings":"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"}