@clickview/lite 0.53.4 → 0.53.6-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (188) hide show
  1. package/dist/bundles.json +1 -1
  2. package/dist/css/{6094-lite-bcd14ea6d2.chunk.css → 1019-lite-bbcf2bff27.chunk.css} +3 -2
  3. package/dist/css/{1329-lite-be86e46c78.chunk.css → 1329-lite-458183b24f.chunk.css} +2 -2
  4. package/dist/css/{1838-lite-e6a28b84ed.chunk.css → 1838-lite-981a5e0783.chunk.css} +1 -1
  5. package/dist/css/{1760-lite-bcd14ea6d2.chunk.css → 2548-lite-bbcf2bff27.chunk.css} +3 -2
  6. package/dist/css/{3969-lite-29e14c7861.chunk.css → 3969-lite-ed58852d97.chunk.css} +2 -2
  7. package/dist/css/{422-lite-dace5f41de.chunk.css → 422-lite-b8c1fd1dee.chunk.css} +1 -1
  8. package/dist/css/{4502-lite-92be6697e7.chunk.css → 4502-lite-eaf1a1113c.chunk.css} +1 -1
  9. package/dist/css/{5220-lite-9832e2c2fb.chunk.css → 5220-lite-8a8d5d035f.chunk.css} +1 -1
  10. package/dist/css/{537-lite-56a3fc7e48.chunk.css → 537-lite-4de4c47713.chunk.css} +1 -1
  11. package/dist/css/{6489-lite-9045df4bb9.chunk.css → 6489-lite-e271aaed2d.chunk.css} +1 -1
  12. package/dist/css/{6544-lite-d46c2d634c.chunk.css → 6544-lite-319ed51ccc.chunk.css} +1 -1
  13. package/dist/css/{5549-lite-97ed26d0aa.chunk.css → 6596-lite-bb28584922.chunk.css} +2 -1
  14. package/dist/css/{841-lite-27b6485cd1.chunk.css → 841-lite-46ef623835.chunk.css} +1 -1
  15. package/dist/css/{8522-lite-2f2797038e.chunk.css → 8522-lite-f100606ec5.chunk.css} +1 -1
  16. package/dist/css/{8801-lite-c88eb54bee.chunk.css → 8801-lite-d34200ab29.chunk.css} +2 -2
  17. package/dist/css/{3640-lite-97ed26d0aa.chunk.css → 9010-lite-bb28584922.chunk.css} +2 -1
  18. package/dist/languages/en.json +1 -1
  19. package/dist/scripts/{1760-8d51aa0b08-lite.chunk.js → 1019-8f977b5095-lite.chunk.js} +2 -2
  20. package/dist/scripts/{1760-8d51aa0b08-lite.chunk.js.map → 1019-8f977b5095-lite.chunk.js.map} +1 -1
  21. package/dist/scripts/1080-509aa6e738-lite.chunk.js +2 -0
  22. package/dist/scripts/1080-509aa6e738-lite.chunk.js.map +1 -0
  23. package/dist/scripts/1169-e64f0dbd67-lite.chunk.js +2 -0
  24. package/dist/scripts/1169-e64f0dbd67-lite.chunk.js.map +1 -0
  25. package/dist/scripts/1329-bdbbf6c7fd-lite.chunk.js +3 -0
  26. package/dist/scripts/1329-bdbbf6c7fd-lite.chunk.js.map +1 -0
  27. package/dist/scripts/{1379-976d20185f-lite.chunk.js → 1379-ca519ec56b-lite.chunk.js} +3 -3
  28. package/dist/scripts/{1379-976d20185f-lite.chunk.js.map → 1379-ca519ec56b-lite.chunk.js.map} +1 -1
  29. package/dist/scripts/1518-4f76dbeee8-lite.chunk.js +2 -0
  30. package/dist/scripts/1518-4f76dbeee8-lite.chunk.js.map +1 -0
  31. package/dist/scripts/{1838-87fb96ee2c-lite.chunk.js → 1838-95081e8dea-lite.chunk.js} +1 -1
  32. package/dist/scripts/{1838-87fb96ee2c-lite.chunk.js.map → 1838-95081e8dea-lite.chunk.js.map} +1 -1
  33. package/dist/scripts/184-6ce393c251-lite.chunk.js +2 -0
  34. package/dist/scripts/184-6ce393c251-lite.chunk.js.map +1 -0
  35. package/dist/scripts/{2004-3005565af0-lite.chunk.js → 2004-e20d72976c-lite.chunk.js} +3 -3
  36. package/dist/scripts/{2004-3005565af0-lite.chunk.js.map → 2004-e20d72976c-lite.chunk.js.map} +1 -1
  37. package/dist/scripts/{2094-58390aa60a-lite.chunk.js → 2094-a16bbca3a3-lite.chunk.js} +2 -2
  38. package/dist/scripts/2094-a16bbca3a3-lite.chunk.js.map +1 -0
  39. package/dist/scripts/2142-c46ca4050f-lite.chunk.js +2 -0
  40. package/dist/scripts/2142-c46ca4050f-lite.chunk.js.map +1 -0
  41. package/dist/scripts/2199-be40da7440-lite.chunk.js +2 -0
  42. package/dist/scripts/2199-be40da7440-lite.chunk.js.map +1 -0
  43. package/dist/scripts/2548-c48b8d3e3c-lite.chunk.js +2 -0
  44. package/dist/scripts/2548-c48b8d3e3c-lite.chunk.js.map +1 -0
  45. package/dist/scripts/3969-6d7c342d0c-lite.chunk.js +2 -0
  46. package/dist/scripts/3969-6d7c342d0c-lite.chunk.js.map +1 -0
  47. package/dist/scripts/3999-317a4538c6-lite.chunk.js +3 -0
  48. package/dist/scripts/3999-317a4538c6-lite.chunk.js.map +1 -0
  49. package/dist/scripts/{422-ee640f76c5-lite.chunk.js → 422-a63a7eb901-lite.chunk.js} +1 -1
  50. package/dist/scripts/{422-ee640f76c5-lite.chunk.js.map → 422-a63a7eb901-lite.chunk.js.map} +1 -1
  51. package/dist/scripts/{4502-af4903784e-lite.chunk.js → 4502-a7d60fa257-lite.chunk.js} +1 -1
  52. package/dist/scripts/{4502-af4903784e-lite.chunk.js.map → 4502-a7d60fa257-lite.chunk.js.map} +1 -1
  53. package/dist/scripts/{4554-c0d7490a46-lite.chunk.js → 4554-b9aa07891f-lite.chunk.js} +2 -2
  54. package/dist/scripts/4554-b9aa07891f-lite.chunk.js.map +1 -0
  55. package/dist/scripts/{4591-379f0fe588-lite.chunk.js → 4591-21c0094f28-lite.chunk.js} +2 -2
  56. package/dist/scripts/{4591-379f0fe588-lite.chunk.js.map → 4591-21c0094f28-lite.chunk.js.map} +1 -1
  57. package/dist/scripts/{4683-ce52da47d8-lite.chunk.js → 4683-d3afe2dfa8-lite.chunk.js} +2 -2
  58. package/dist/scripts/4683-d3afe2dfa8-lite.chunk.js.map +1 -0
  59. package/dist/scripts/5220-291b2243ad-lite.chunk.js +3 -0
  60. package/dist/scripts/5220-291b2243ad-lite.chunk.js.map +1 -0
  61. package/dist/scripts/537-6efb9bc099-lite.chunk.js +3 -0
  62. package/dist/scripts/537-6efb9bc099-lite.chunk.js.map +1 -0
  63. package/dist/scripts/5660-6711768c20-lite.chunk.js +2 -0
  64. package/dist/scripts/5660-6711768c20-lite.chunk.js.map +1 -0
  65. package/dist/scripts/5936-e839cb8193-lite.chunk.js +2 -0
  66. package/dist/scripts/5936-e839cb8193-lite.chunk.js.map +1 -0
  67. package/dist/scripts/{624-bf0ff6257f-lite.chunk.js → 624-09b51a9d32-lite.chunk.js} +3 -3
  68. package/dist/scripts/{624-bf0ff6257f-lite.chunk.js.map → 624-09b51a9d32-lite.chunk.js.map} +1 -1
  69. package/dist/scripts/6450-f16821bf09-lite.chunk.js +2 -0
  70. package/dist/scripts/6450-f16821bf09-lite.chunk.js.map +1 -0
  71. package/dist/scripts/6489-c242844567-lite.chunk.js +3 -0
  72. package/dist/scripts/6489-c242844567-lite.chunk.js.map +1 -0
  73. package/dist/scripts/6544-07898e3fa3-lite.chunk.js +2 -0
  74. package/dist/scripts/6544-07898e3fa3-lite.chunk.js.map +1 -0
  75. package/dist/scripts/6596-848fbf79bb-lite.chunk.js +2 -0
  76. package/dist/scripts/6596-848fbf79bb-lite.chunk.js.map +1 -0
  77. package/dist/scripts/{6741-1c125dbc6c-lite.chunk.js → 6741-fe09fea334-lite.chunk.js} +3 -3
  78. package/dist/scripts/{6741-1c125dbc6c-lite.chunk.js.map → 6741-fe09fea334-lite.chunk.js.map} +1 -1
  79. package/dist/scripts/6752-0d139a6c9a-lite.chunk.js +2 -0
  80. package/dist/scripts/6752-0d139a6c9a-lite.chunk.js.map +1 -0
  81. package/dist/scripts/696-fa78eb455f-lite.chunk.js +2 -0
  82. package/dist/scripts/696-fa78eb455f-lite.chunk.js.map +1 -0
  83. package/dist/scripts/{7234-ef6ab1e557-lite.chunk.js → 7234-d15fe07f0e-lite.chunk.js} +2 -2
  84. package/dist/scripts/{7234-ef6ab1e557-lite.chunk.js.map → 7234-d15fe07f0e-lite.chunk.js.map} +1 -1
  85. package/dist/scripts/729-594be12089-lite.chunk.js +2 -0
  86. package/dist/scripts/729-594be12089-lite.chunk.js.map +1 -0
  87. package/dist/scripts/{7293-3e6ad36a7a-lite.chunk.js → 7293-35871fc150-lite.chunk.js} +2 -2
  88. package/dist/scripts/7293-35871fc150-lite.chunk.js.map +1 -0
  89. package/dist/scripts/{8192-e2d9a26cc5-lite.chunk.js → 8192-eb7054ccc6-lite.chunk.js} +2 -2
  90. package/dist/scripts/{8192-e2d9a26cc5-lite.chunk.js.map → 8192-eb7054ccc6-lite.chunk.js.map} +1 -1
  91. package/dist/scripts/841-11af1334bf-lite.chunk.js +3 -0
  92. package/dist/scripts/841-11af1334bf-lite.chunk.js.map +1 -0
  93. package/dist/scripts/{8522-b4b217640c-lite.chunk.js → 8522-8e9c576bf6-lite.chunk.js} +1 -1
  94. package/dist/scripts/{8522-b4b217640c-lite.chunk.js.map → 8522-8e9c576bf6-lite.chunk.js.map} +1 -1
  95. package/dist/scripts/8801-3a7652eb35-lite.chunk.js +2 -0
  96. package/dist/scripts/8801-3a7652eb35-lite.chunk.js.map +1 -0
  97. package/dist/scripts/9010-ef7ea501ee-lite.chunk.js +2 -0
  98. package/dist/scripts/9010-ef7ea501ee-lite.chunk.js.map +1 -0
  99. package/dist/scripts/9139-22fb64f542-lite.chunk.js +2 -0
  100. package/dist/scripts/9139-22fb64f542-lite.chunk.js.map +1 -0
  101. package/dist/scripts/9173-e45847aa35-lite.chunk.js +2 -0
  102. package/dist/scripts/9173-e45847aa35-lite.chunk.js.map +1 -0
  103. package/dist/scripts/{9395-e9b5cdbdce-lite.chunk.js → 9395-e1a02b01ce-lite.chunk.js} +3 -3
  104. package/dist/scripts/{9395-e9b5cdbdce-lite.chunk.js.map → 9395-e1a02b01ce-lite.chunk.js.map} +1 -1
  105. package/dist/scripts/{9478-abfa7ed3cc-lite.chunk.js → 9478-13da35c4ee-lite.chunk.js} +3 -3
  106. package/dist/scripts/{9478-abfa7ed3cc-lite.chunk.js.map → 9478-13da35c4ee-lite.chunk.js.map} +1 -1
  107. package/dist/scripts/{953-bf3d621a33-lite.chunk.js → 953-225db845ab-lite.chunk.js} +3 -3
  108. package/dist/scripts/{953-bf3d621a33-lite.chunk.js.map → 953-225db845ab-lite.chunk.js.map} +1 -1
  109. package/dist/scripts/{9899-68b030d4e2-lite.chunk.js → 9899-fa58471776-lite.chunk.js} +2 -2
  110. package/dist/scripts/{9899-68b030d4e2-lite.chunk.js.map → 9899-fa58471776-lite.chunk.js.map} +1 -1
  111. package/dist/scripts/bundle-7f9a9b650d.min.js +3 -0
  112. package/dist/scripts/bundle-7f9a9b650d.min.js.map +1 -0
  113. package/package.json +1 -1
  114. package/dist/scripts/1080-4173ce26bd-lite.chunk.js +0 -2
  115. package/dist/scripts/1080-4173ce26bd-lite.chunk.js.map +0 -1
  116. package/dist/scripts/1169-d090f0a147-lite.chunk.js +0 -2
  117. package/dist/scripts/1169-d090f0a147-lite.chunk.js.map +0 -1
  118. package/dist/scripts/1329-d48379c043-lite.chunk.js +0 -3
  119. package/dist/scripts/1329-d48379c043-lite.chunk.js.map +0 -1
  120. package/dist/scripts/1518-9756fde01e-lite.chunk.js +0 -2
  121. package/dist/scripts/1518-9756fde01e-lite.chunk.js.map +0 -1
  122. package/dist/scripts/184-ee581fa2e0-lite.chunk.js +0 -2
  123. package/dist/scripts/184-ee581fa2e0-lite.chunk.js.map +0 -1
  124. package/dist/scripts/2094-58390aa60a-lite.chunk.js.map +0 -1
  125. package/dist/scripts/2199-476ac5922f-lite.chunk.js +0 -2
  126. package/dist/scripts/2199-476ac5922f-lite.chunk.js.map +0 -1
  127. package/dist/scripts/3640-1ac0a110f4-lite.chunk.js +0 -2
  128. package/dist/scripts/3640-1ac0a110f4-lite.chunk.js.map +0 -1
  129. package/dist/scripts/3969-c0160d0139-lite.chunk.js +0 -2
  130. package/dist/scripts/3969-c0160d0139-lite.chunk.js.map +0 -1
  131. package/dist/scripts/4063-786732e7b0-lite.chunk.js +0 -2
  132. package/dist/scripts/4063-786732e7b0-lite.chunk.js.map +0 -1
  133. package/dist/scripts/4273-de24896b28-lite.chunk.js +0 -3
  134. package/dist/scripts/4273-de24896b28-lite.chunk.js.map +0 -1
  135. package/dist/scripts/4554-c0d7490a46-lite.chunk.js.map +0 -1
  136. package/dist/scripts/4683-ce52da47d8-lite.chunk.js.map +0 -1
  137. package/dist/scripts/4850-5ddd277550-lite.chunk.js +0 -2
  138. package/dist/scripts/4850-5ddd277550-lite.chunk.js.map +0 -1
  139. package/dist/scripts/5220-85898810a6-lite.chunk.js +0 -3
  140. package/dist/scripts/5220-85898810a6-lite.chunk.js.map +0 -1
  141. package/dist/scripts/537-de7445d41a-lite.chunk.js +0 -3
  142. package/dist/scripts/537-de7445d41a-lite.chunk.js.map +0 -1
  143. package/dist/scripts/5549-e0ed88aaa1-lite.chunk.js +0 -2
  144. package/dist/scripts/5549-e0ed88aaa1-lite.chunk.js.map +0 -1
  145. package/dist/scripts/5660-a356acdbca-lite.chunk.js +0 -2
  146. package/dist/scripts/5660-a356acdbca-lite.chunk.js.map +0 -1
  147. package/dist/scripts/5936-92d9cea005-lite.chunk.js +0 -2
  148. package/dist/scripts/5936-92d9cea005-lite.chunk.js.map +0 -1
  149. package/dist/scripts/6094-8546003d79-lite.chunk.js +0 -2
  150. package/dist/scripts/6094-8546003d79-lite.chunk.js.map +0 -1
  151. package/dist/scripts/6450-601f889072-lite.chunk.js +0 -2
  152. package/dist/scripts/6450-601f889072-lite.chunk.js.map +0 -1
  153. package/dist/scripts/6489-532a022587-lite.chunk.js +0 -3
  154. package/dist/scripts/6489-532a022587-lite.chunk.js.map +0 -1
  155. package/dist/scripts/6544-ae27efabab-lite.chunk.js +0 -2
  156. package/dist/scripts/6544-ae27efabab-lite.chunk.js.map +0 -1
  157. package/dist/scripts/6752-5dddab5e0b-lite.chunk.js +0 -2
  158. package/dist/scripts/6752-5dddab5e0b-lite.chunk.js.map +0 -1
  159. package/dist/scripts/6852-9dfd47d085-lite.chunk.js +0 -2
  160. package/dist/scripts/6852-9dfd47d085-lite.chunk.js.map +0 -1
  161. package/dist/scripts/7293-3e6ad36a7a-lite.chunk.js.map +0 -1
  162. package/dist/scripts/841-73ef4ba5ec-lite.chunk.js +0 -3
  163. package/dist/scripts/841-73ef4ba5ec-lite.chunk.js.map +0 -1
  164. package/dist/scripts/8801-222a1b2e99-lite.chunk.js +0 -2
  165. package/dist/scripts/8801-222a1b2e99-lite.chunk.js.map +0 -1
  166. package/dist/scripts/9139-49023800c6-lite.chunk.js +0 -2
  167. package/dist/scripts/9139-49023800c6-lite.chunk.js.map +0 -1
  168. package/dist/scripts/9173-f9708ec0de-lite.chunk.js +0 -2
  169. package/dist/scripts/9173-f9708ec0de-lite.chunk.js.map +0 -1
  170. package/dist/scripts/bundle-e72459b30e.min.js +0 -3
  171. package/dist/scripts/bundle-e72459b30e.min.js.map +0 -1
  172. /package/dist/css/{4273-lite-a3c7435ba4.chunk.css → 3999-lite-a3c7435ba4.chunk.css} +0 -0
  173. /package/dist/css/{4063-lite-f72fc7b813.chunk.css → 4860-lite-f72fc7b813.chunk.css} +0 -0
  174. /package/dist/css/{4850-lite-f72fc7b813.chunk.css → 729-lite-f72fc7b813.chunk.css} +0 -0
  175. /package/dist/scripts/{1329-d48379c043-lite.chunk.js.LICENSE.txt → 1329-bdbbf6c7fd-lite.chunk.js.LICENSE.txt} +0 -0
  176. /package/dist/scripts/{1379-976d20185f-lite.chunk.js.LICENSE.txt → 1379-ca519ec56b-lite.chunk.js.LICENSE.txt} +0 -0
  177. /package/dist/scripts/{2004-3005565af0-lite.chunk.js.LICENSE.txt → 2004-e20d72976c-lite.chunk.js.LICENSE.txt} +0 -0
  178. /package/dist/scripts/{4273-de24896b28-lite.chunk.js.LICENSE.txt → 3999-317a4538c6-lite.chunk.js.LICENSE.txt} +0 -0
  179. /package/dist/scripts/{5220-85898810a6-lite.chunk.js.LICENSE.txt → 5220-291b2243ad-lite.chunk.js.LICENSE.txt} +0 -0
  180. /package/dist/scripts/{537-de7445d41a-lite.chunk.js.LICENSE.txt → 537-6efb9bc099-lite.chunk.js.LICENSE.txt} +0 -0
  181. /package/dist/scripts/{624-bf0ff6257f-lite.chunk.js.LICENSE.txt → 624-09b51a9d32-lite.chunk.js.LICENSE.txt} +0 -0
  182. /package/dist/scripts/{6489-532a022587-lite.chunk.js.LICENSE.txt → 6489-c242844567-lite.chunk.js.LICENSE.txt} +0 -0
  183. /package/dist/scripts/{6741-1c125dbc6c-lite.chunk.js.LICENSE.txt → 6741-fe09fea334-lite.chunk.js.LICENSE.txt} +0 -0
  184. /package/dist/scripts/{841-73ef4ba5ec-lite.chunk.js.LICENSE.txt → 841-11af1334bf-lite.chunk.js.LICENSE.txt} +0 -0
  185. /package/dist/scripts/{9395-e9b5cdbdce-lite.chunk.js.LICENSE.txt → 9395-e1a02b01ce-lite.chunk.js.LICENSE.txt} +0 -0
  186. /package/dist/scripts/{9478-abfa7ed3cc-lite.chunk.js.LICENSE.txt → 9478-13da35c4ee-lite.chunk.js.LICENSE.txt} +0 -0
  187. /package/dist/scripts/{953-bf3d621a33-lite.chunk.js.LICENSE.txt → 953-225db845ab-lite.chunk.js.LICENSE.txt} +0 -0
  188. /package/dist/scripts/{bundle-e72459b30e.min.js.LICENSE.txt → bundle-7f9a9b650d.min.js.LICENSE.txt} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/6752-5dddab5e0b-lite.chunk.js","mappings":"wIAMYA,E,sQAAZ,SAAYA,GACV,6BACD,CAFD,CAAYA,IAAAA,EAAQ,KAQb,I,MAAMC,G,EAAY,G,EACP,CACdC,KAAM,eACNC,SAAU,mBACVC,KAAM,Q,wRAHPJ,EAASK,Q,2FCXCC,EAAiB,CAC5BC,mBAAkB,SAACC,GAAmD,IAAjCL,EAAA,uDAAqBH,EAASK,IACjE,OAAKG,EAEEC,EAAA,yBAAkCD,EAAUP,EAAaE,GAAUA,UAFpD,EAGxB,EACAO,yBAAwB,SAACF,GAAmD,IAAjCL,EAAA,uDAAqBH,EAASK,IACvE,IAAKG,IAAaL,EAAU,OAAO,IAAIQ,KAEvC,IAAMC,EAAU,IAAID,KAAKH,GAEnBK,EAAmB,IAAIC,KAAKC,eAAe,QAAS,CACxDC,SAAUf,EAAaE,GAAUA,SACjCc,KAAM,UACNC,MAAO,UACPC,IAAK,UACLC,KAAM,UACNC,OAAQ,YACPC,OAAOV,GAEV,OAAO,IAAID,KAAKE,EAClB,G,WCxBF,SAAgB,SAAW,QAAQ,MAAQ,QAAQ,WAAa,QAAQ,cAAgB,S,sGCUxF,IACMU,EAAYC,EAAA,mBADA,yCAYZ,SAAUC,EAAiBC,GAC/B,IAAMC,EAAUlB,EAAA,SACdH,EAAeI,0BAAyB,IAAIC,MAAOiB,cAAeF,EAAMvB,UAAY,MACpFuB,EAAMG,KACN,OAGEC,EAAgB,GAAH,OAAM,WAAe,uBAClCH,IACFG,GAAiB,uBACfJ,EAAMK,kBAAoBL,EAAMM,aAClCF,GAAiB,mBACfJ,EAAMO,WACRH,GAAiB,eACfJ,EAAMQ,YACRJ,GAAiB,IAAJ,OAAQJ,EAAMQ,YAE7B,IAC0E,E,w5BAAA,EAA9C,OAA+B,CAAEC,MAAO,MAAM,GAAlEC,EAAG,KAAEJ,EAAU,KAEvB,OACE,uBAAKE,UAAS,UAAKJ,EAAa,YAAIE,EAAa,aAAoB,IAAMI,IAAKA,GAC9E,uBAAKF,UAAS,UAAK,gBAAoB,YALnB,+EAMjBzB,EAAA,SAAkBiB,EAAMG,KAAM,MAEhCF,GACC,uBAAKO,UAAS,UAAK,QAAY,8CAC5BX,EAAU,UAKrB,C,uICtDA,SAAgB,eAAiB,QAAQ,IAAM,QAAQ,KAAO,QAAQ,gBAAkB,QAAQ,UAAY,QAAQ,QAAU,QAAQ,KAAO,QAAQ,MAAQ,QAAQ,YAAc,QAAQ,MAAQ,QAAQ,QAAU,QAAQ,OAAS,QAAQ,YAAc,QAAQ,MAAQ,QAAQ,UAAY,QAAQ,OAAS,QAAQ,OAAS,QAAQ,MAAQ,QAAQ,UAAY,QAAQ,kBAAoB,QAAQ,iBAAmB,S,sGC8BvZ,SAAUc,EAAeX,G,YACrBY,EAA8BZ,EAA9BY,WAAYC,EAAkBb,EAAlBa,cAEdC,EAAoBd,EAAMe,eAAgCf,EAAMgB,YA2GtDC,MAAK,SAACC,EAAGC,GACrB,OAAKC,EAAYF,IAAME,EAAYD,GAC1B,EAGLC,EAAYF,KAAOE,EAAYD,IACzB,EAGH,CACT,IArHmFnB,EAAMgB,YACrFK,EAAcrB,EAAMgB,YAAYM,OAAS,EACzCC,EAAiBT,EAAkBU,MAAK,SAACC,EAAGC,GAAG,OAAKA,IAAQd,CAAU,IACtEe,IAAkBJ,EAAeK,QAEjCC,EAA0C,QAAxB,EAAA7B,EAAM8B,0BAAkB,sBAAGP,EAAeQ,SAE5DC,EAAwC,QAAvB,EAAAhC,EAAMiC,yBAAiB,sBAAGV,EAAeQ,SAE1DG,EAA0B,QAAhB,EAAAlC,EAAMmC,kBAAU,sBAAGZ,EAAeQ,SAC5CK,EAA4B,QAAjB,EAAApC,EAAMqC,mBAAW,sBAAGd,EAAeQ,SAE9CO,EAAef,EAAeQ,QAAQQ,SAAWC,EAAA,aAEuC,E,w5BAAA,CAA1D,WAAgBxC,EAAMyC,eAAsB,SAAL,IAAmB,GAAtFjC,EAAS,KAAEkC,EAAY,KAE/B,aAAgB,WACd,IAAK1C,EAAMyC,eAAgB,CAEzB,IAAME,EAAeC,KAAKC,MAAsB,IAAhBD,KAAKE,SAAiB,KACtDC,OAAOC,YAAW,WAChBN,EAAa,UACbK,OAAOC,YAAW,WAChBhD,EAAMiD,mBAAkB,EAC1B,GAAG,IACL,GAAGN,EACJ,CACH,GAAG,CAAC3C,EAAMyC,iBAEV,aAAgB,WACVzC,EAAMM,YACRN,EAAMkD,gBAAgB3B,EAE1B,GAAG,CAAEvB,EAAMM,WAAYiB,IAEvB,aAAgB,WACd,OAAO,W,MACDvB,EAAMM,aAAgC,QAAlB,EAAAN,EAAMmD,oBAAY,eAAEC,kBAAmB7B,EAAe6B,gBAC5EpD,EAAMkD,gBAAgB,KAE1B,CACF,GAAG,CAAElD,EAAMM,WAAYN,EAAMmD,aAAc5B,IA8B3C,IAAM8B,EAlBN,WACE,IAAMA,EAA4B,CAChClD,KAAMpB,EAAA,SAAkBiB,EAAMG,KAAM,cACpCmD,eAAgBtD,EAAMsD,eACtBC,WAAYvD,EAAMgB,YAAYM,QAWhC,OARID,GACFgC,EAAcG,QAAUxD,EAAMgB,YAAYyC,KAAI,SAAAhC,GAAC,OAAIA,EAAE2B,cAAc,IAAEM,KAAK,KAC1EL,EAAcM,QAAU3D,EAAMgB,YAAYyC,KAAI,SAAAhC,GAAC,OAAIA,EAAEM,QAAQ6B,EAAE,IAAEF,KAAK,OAEtEL,EAAcG,QAAUjC,EAAe6B,eACvCC,EAAcM,QAAUpC,EAAeQ,QAAQ6B,GAC/CP,EAAcQ,YAActC,EAAeQ,QAAQQ,QAE9Cc,CACT,CAEsBS,GAEhBC,EAAqC,CACzCC,WAAY,WACZC,OAAQ,kBACRC,SAAU,kBAGZ,SAASC,EAAuBhE,GAC9B,OAAOpB,EAAA,SAAkBoB,EAAM,aACjC,CAEA,SAASiE,IAaP,MAZyB,GAAH,OAAMpE,EAAMQ,UAAS,YAAIA,EAAS,KAExC,CACdwB,EAAiB,GAAH,OAAM,iBAAqB,sBAAuB,kBAChEE,EAAU,UAAY,QACtBI,EAAe,aAAoB,GACnCtC,EAAMyC,eAAiB,cAAqB,GAC5CzC,EAAMM,WAAa,YAAc,GACjCN,EAAMqE,iBAAmB,mBAA0B,GACnD,YAAa9C,EAAeQ,QAAU,iBAAmB,IAGzB2B,KAAK,IACzC,CAEA,SAAStC,EAAYkD,GACnB,MAAI,kBAAmBA,EAAMvC,SACpBhD,EAAA,WAAoBuF,EAAMvC,QAAQwC,cAAe,IAAItF,KAGhE,CAgBA,OACE,uBAAKuF,QAAS,WACRlC,GACFmC,EAAA,gBAA8BpB,EAAeU,EACjD,GACE,gBAACW,EAAA,EAAO,CACNC,QAnFN,W,QACE,OAAItD,EAC+B,QAA1B,EAAArB,EAAM4E,4BAAoB,uBAE/BtC,EACK,KAEmB,QAArB,EAAAtC,EAAM6E,uBAAe,sBAAGtD,EAAeQ,QAAS+C,EAAA,UAAmBvD,EAAe/C,MAC3F,CA2EeuG,GACThB,iBAAkBA,EAClBV,cAAeA,EACf7C,UAAS,kEAA6D,WACtEwE,WAAW,iBAEX,uBAAKxE,UAAS,UAAK,UAAc,SAC9B8B,GACC,gBAAC2C,EAAA,EAAa,CAACzE,UAAS,oDAA+C,MAAU,YAAIA,GAAa0E,UAAQ,MAG5GlF,EAAMmF,SACN,gBAACpF,EAAgB,CACfI,KAAMH,EAAMG,KACZE,gBAAiBL,EAAMK,gBACvBG,UAAS,UAAK,OAAW,YAAIA,GAC7BF,WAAYN,EAAMM,WAClB7B,SAAUuB,EAAMvB,SAChB8B,UAAQ,IAIZ,uBACE6E,MAAO,CAAEvD,gBAAAA,GACTrB,UAAS,gHAA2G,YAAgB,YAAIA,EAAS,YAAIR,EAAMM,WAAa,YAAc,GAAE,YAAIN,EAAMqE,iBAAmB,mBAA0B,GAAE,YAAIrE,EAAMQ,UAAS,aAAKR,EAAMM,YAAcc,EAAYG,GAAkB,aAAe,KAEzUW,GAAW,gBAACmD,EAAA,EAAS,CAACC,IAAKpD,EAASqD,IAAKhE,EAAeQ,QAAQvD,KAAMgC,UAAW4D,MAEjFhC,IAAaF,GACZ,uBACEkD,MAAO,CAAEI,gBAAiB,QAAF,OAAUpD,EAAQ,OAC1C5B,UAAW4D,MAIdzC,GACC,uBAAKnB,UAAS,UAAK,gBAChBiF,EAAA,iBAAkClE,EAAemE,UAAWnE,EAAeK,UAGhF,uBAAKpB,UAAS,sBAAiB,QAAY,YAAIa,EAAc,OAAS,SACpE,qBAAGuC,GAAG,gBAAgBpD,UAAS,UAAKR,EAAM2F,eAAiB,YAAmB,GAAE,YAAI3F,EAAMM,WAAa,OAAS,UAAS,OAAOsF,MAAOrE,EAAe/C,MAAO+C,EAAe/C,OAG5K6C,GAA8B,IAAfT,GACf,uBAAKJ,UAAS,oDAA+C,SAC3D,gBAACqF,EAAA,EAAS,CACRrB,QAAS,SAAA/C,GACPA,EAAEqE,kBACFrE,EAAEsE,iBACFlF,GAAc,SAAAmF,GAAC,OAAIA,EAAI,CAAC,IACxBvB,EAAA,gBAA8B,CAAEtE,KAAMgE,EAAuBnE,EAAMG,MAAO8F,OAAQ,WAAY1C,WAAYvD,EAAMgB,YAAYM,QAAUyC,EACxI,GACA,gBAACmC,EAAA,EAAY,CACXC,QAAS,iBACT3F,UAAS,iDAA4C,aAM5Da,GAAeT,IAAeZ,EAAMgB,YAAYM,OAAS,GACxD,uBAAKd,UAAS,oDAA+C,UAC3D,gBAACqF,EAAA,EAAS,CACRrB,QAAS,SAAA/C,GACPA,EAAEqE,kBACFrE,EAAEsE,iBACFlF,GAAc,SAAAmF,GAAC,OAAIA,EAAI,CAAC,IACxBvB,EAAA,gBAA8B,CAAEtE,KAAMgE,EAAuBnE,EAAMG,MAAO8F,OAAQ,OAAQ1C,WAAYvD,EAAMgB,YAAYM,QAAUyC,EACpI,GACA,gBAACmC,EAAA,EAAY,CACXC,QAAS,kBACT3F,UAAS,iDAA4C,aAM5Da,GACC,uBAAKb,UAAS,iBAAY,YAAgB,YAAIa,EAAc,GAAK,sBAC/D,gBAAC+E,EAAA,EAAU,CACTxF,WAAYA,EACZyF,aAAcrG,EAAMgB,YAAYM,OAChCgF,KAAK,KACL9F,UAAS,UAAKR,EAAMM,WAAa,OAAS,QAC1CiG,iBAAkB,SAAAC,GAChB3F,EAAc2F,GACd/B,EAAA,gBAA8B,CAAEtE,KAAMgE,EAAuBnE,EAAMG,MAAO8F,OAAQ,OAAQ1C,WAAYvD,EAAMgB,YAAYM,QAAUyC,EACpI,OAQhB,CArOApD,EAAe8F,aAAe,CAC5Bd,gBAAgB,GC3BlB,SAAgB,KAAO,QAAQ,eAAiB,QAAQ,OAAS,SCY3D,SAAUe,EAAY1G,G,QACpBqE,EAAmB,WACvB,W,YACE,OAAkB,QAAlB,EAAArE,EAAMmD,oBAAY,eAAEvB,WACnB7C,EAAA,SAAkBiB,EAAMG,KAAwB,QAAlB,EAAAH,EAAMmD,oBAAY,eAAEuC,YACnD3G,EAAA,YACEA,EAAA,SAAkBiB,EAAMG,KAAM,cACZ,QAAlB,EAAAH,EAAMmD,oBAAY,eAAEuC,UACF,QAAlB,EAAA1F,EAAMmD,oBAAY,eAAEvB,Q,GAExB,CAAC5B,EAAMmD,eAEHtB,EAAkB7B,EAAMmD,aAAuC,QAAxB,EAAAnD,EAAM8B,0BAAkB,sBAAG9B,EAAMmD,aAAapB,SAAW,KAEtG,OACE,uBAAKvB,UAAS,UAAK,OAAW,kBAC1BR,EAAMmF,SACN,gBAACpF,EAAgB,CACfI,KAAMH,EAAMG,KACZE,gBAAiBL,EAAMK,gBACvB5B,SAAUuB,EAAMvB,WAGnB4F,GACC,uBAAKe,MAAO,CAAEvD,gBAAAA,GAAmBrB,UAAW,oBAE5B,QAAjB,EAAAR,EAAMgB,mBAAW,eAAEM,QAAS,GAAK,gBAACX,EAAc,iBAAKX,EAAK,CAAEqE,iBAAkBA,KAGrF,C,8FCzCA,SAAgB,IAAM,QAAQ,QAAU,SCSxC,IAAMsC,EAAY,qCAOZ,SAAU1B,EAAcjF,GAC5B,OACE,gBAAC4G,EAAA,EAAO,CAAChB,MAAO9F,EAAA,YAA0B6G,EAAW,WAAYE,kBAAiB,kBAAa,WAAkBC,UAAQ,GACvH,uBAAKtG,UAAS,8CAAyC,MAAU,YAAIR,EAAMQ,YACzE,gBAAC0F,EAAA,EAAY,CAACC,QAAS,cACrBnG,EAAMkF,UAAYpF,EAAA,YAA0B6G,EAAW,eAIjE,C,gDCtBalB,EAAqB,CAChCsB,eAAc,SAACrB,EAAmB9D,GAChC,OAAKA,EAID8D,EAAUsB,MAAM,EAAG,KAAOpF,EAAQoF,MAAM,EAAG,GAEtC,GAAP,OAAU,WAAkBtB,EAAW,SAAQ,cAAM,WAAkB9D,EAAS,UAG3E,GAAP,OAAU,WAAkB8D,EAAW,KAAI,cAAM,WAAkB9D,EAAS,KAAI,YAAI,WAAkB8D,EAAW,QAPxG,WAAkBA,EAAW,QAQxC,EAEAuB,iBAAgB,SAACC,EAAiC1H,GAChD,OAAO0H,EAAeC,QAAO,SAAA1F,GAAC,OAAI,WAAkBA,EAAEiE,UAAW,aAAe,WAAkBlG,EAAO,UAAU,GACrH,EAEA4H,eAAc,SAACjH,GACb,MAAO,GAAP,OAAU,wBAA+B,QAAeA,EAAM,SAAQ,YAAI,WAAkBA,EAAM,QACpG,E","sources":["file:///app/packages/libs/shared/src/apps/streamable-learning/constants/Timezones.ts","file:///app/packages/libs/shared/src/apps/streamable-learning/utils/TimezoneHelper.ts","file:///app/packages/libs/shared/src/apps/calendar/components/calendar-cell-date/calendar-cell-date.scss","file:///app/packages/libs/shared/src/apps/calendar/components/calendar-cell-date/CalendarCellDate.tsx","file:///app/packages/libs/shared/src/apps/calendar/components/calendar-events/calendar-events.scss","file:///app/packages/libs/shared/src/apps/calendar/components/calendar-events/CalendarEvents.tsx","file:///app/packages/libs/shared/src/apps/calendar/components/calendar-day/calendar-day.scss","file:///app/packages/libs/shared/src/apps/calendar/components/calendar-day/CalendarDay.tsx","file:///app/packages/libs/shared/src/apps/calendar/components/coming-soon-tag/coming-soon-tag.scss","file:///app/packages/libs/shared/src/apps/calendar/components/coming-soon-tag/ComingSoonTag.tsx","file:///app/packages/libs/shared/src/apps/calendar/utils/SpecialEventHelper.ts"],"sourcesContent":["interface TimezoneInfo {\n name: string;\n timezone: string;\n code: string;\n}\n\nexport enum Timezone {\n EST = 'Eastern Standard Time'\n}\n\nexport type Timezones = {\n [key in Timezone]: TimezoneInfo;\n}\n\nexport const TIMEZONES_US: Timezones = {\n [Timezone.EST]: {\n name: 'Eastern Time',\n timezone: 'America/New_York',\n code: 'EST'\n }\n};","import { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { Timezone, TIMEZONES_US } from 'libs/shared/apps/streamable-learning/constants/Timezones';\n\nexport const TimezoneHelper = {\n convertToUTCString(datetime: string, timezone: Timezone = Timezone.EST) {\n if (!datetime) return '';\n\n return DateHelper.getUtcStringByTimezone(datetime, TIMEZONES_US[timezone].timezone);\n },\n convertUTCToTimezoneDate(datetime: string, timezone: Timezone = Timezone.EST) {\n if (!datetime || !timezone) return new Date();\n \n const utcDate = new Date(datetime);\n \n const timezoneDateTime = new Intl.DateTimeFormat('en-US', {\n timeZone: TIMEZONES_US[timezone].timezone,\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit'\n }).format(utcDate);\n\n return new Date(timezoneDateTime);\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"cellDate\":\"qcD_n\",\"label\":\"sp6Gw\",\"isHovering\":\"_6xWx\",\"numberWrapper\":\"KZfe0\"};","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.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.notCurrentMonth && !props.isHovering)\n dateClassName += ' text-secondary';\n if (props.hasEvent)\n dateClassName += ' text-white';\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}","// extracted by mini-css-extract-plugin\nexport default {\"hardcodedCover\":\"ByD0q\",\"tag\":\"ZHW8B\",\"date\":\"AKOWh\",\"backgroundImage\":\"RDtch\",\"eventCard\":\"YtMiS\",\"wrapper\":\"ylxwf\",\"left\":\"iTqxB\",\"right\":\"bUUXX\",\"noAnimation\":\"oZacR\",\"cover\":\"kpH3Y\",\"tagWrap\":\"KvlZ8\",\"appear\":\"xlSdc\",\"displayDate\":\"rkBJb\",\"title\":\"c4_Kj\",\"titleText\":\"nRMvg\",\"circle\":\"wu4hg\",\"active\":\"tbdFj\",\"arrow\":\"omZKz\",\"bottomBar\":\"hxKUP\",\"bottomPlaceholder\":\"dzeZ7\",\"multiEventFilter\":\"dSxjc\"};","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 { 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 { CalendarEvent, CalendarEventContent } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './calendar-events.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);\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 // a random number between 400 and 1000\n const randomNumber = Math.floor(Math.random() * 600 + 400);\n window.setTimeout(() => {\n setClassName(styles.appear);\n window.setTimeout(() => {\n props.setHasInitialized(true);\n }, 400);\n }, randomNumber);\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 return (\n <div onClick={() => {\n if (isComingSoon)\n AnalyticsHelper.logUserAction(analyticsData, analyticsOptions);\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 svgName={cvSvgLibrary.ChevronLeft}\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 svgName={cvSvgLibrary.ChevronRight}\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}","// extracted by mini-css-extract-plugin\nexport default {\"cell\":\"nsEjO\",\"multiEventCell\":\"vvFYj\",\"fadeIn\":\"BX0cX\"};","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.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 && (\n <div style={{ backgroundColor }} className={styles.multiEventCell}></div>\n )}\n {props.eventsOnDay?.length > 0 && <CalendarEvents {...props} isMultiEventDate={isMultiEventDate} />}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"tag\":\"XRj8d\",\"tooltip\":\"X6mLk\"};","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 { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './coming-soon-tag.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 svgName={cvSvgLibrary.Timer} />\n {!props.onlyIcon && LanguageService.getPhrase(namespace, 'comingSoon')}\n </div>\n </Tooltip>\n );\n}","import { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { CalendarEvent } from 'libs/shared/interfaces';\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 \n // same month event\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};"],"names":["Timezone","TIMEZONES_US","name","timezone","code","EST","TimezoneHelper","convertToUTCString","datetime","DateHelper","convertUTCToTimezoneDate","Date","utcDate","timezoneDateTime","Intl","DateTimeFormat","timeZone","year","month","day","hour","minute","format","getPhrase","LanguageService","CalendarCellDate","props","isToday","toISOString","date","dateClassName","notCurrentMonth","isHovering","hasEvent","className","delay","ref","CalendarEvents","sliderStep","setSliderStep","sortedEventsOnDay","fadePastEvents","eventsOnDay","sort","a","b","isPastEvent","multiEvents","length","displayedEvent","find","e","idx","multiDayEvent","endDate","backgroundColor","getBackgroundColor","content","hardCodedEvent","getHardCodedEvent","iconUrl","getIconUrl","coverUrl","getCoverUrl","isComingSoon","status","ClassificationStatus","hasInitialized","setClassName","randomNumber","Math","floor","random","window","setTimeout","setHasInitialized","setHoveredEvent","hoveredEvent","specialEventId","analyticsData","presentationId","eventCount","eventId","map","join","topicId","id","eventStatus","getAnalyticsData","analyticsOptions","actionType","entity","location","formatAnalyticDataDate","getBgImageClassName","isMultiEventDate","event","startDateTime","onClick","AnalyticsHelper","AppLink","appLink","getEventsListAppLink","getTopicAppLink","TextHelper","getAppLink","labelledBy","ComingSoonTag","onlyIcon","hideDay","style","LazyImage","src","alt","backgroundImage","SpecialEventHelper","startDate","responsiveText","title","DivButton","stopPropagation","preventDefault","s","action","SvgContainer","svgName","SliderDots","sliderLength","size","onSliderDotClick","i","defaultProps","CalendarDay","namespace","Tooltip","spanHackClassName","spanHack","getDisplayDate","slice","getEventsInMonth","calendarEvents","filter","getOrdinalDate"],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[6852],{50690:(e,t,n)=>{n.d(t,{b:()=>r});var a=n(12788),r={renderInPortalIfExists:function(e,t){return t?(0,a.createPortal)(e,t):e}}},49935:(e,t,n)=>{n.d(t,{Oo:()=>f,b2:()=>g});var a=n(32735),r=n(23481),i=n(36848),l=n(86764),o=n(3747),c=n(5859),s=n(35223),d=n(83914);function u(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,i,l,o=[],c=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(a=i.call(n)).done)&&(o.push(a.value),o.length!==t);c=!0);}catch(e){s=!0,r=e}finally{try{if(!c&&null!=n.return&&(l=n.return(),Object(l)!==l))return}finally{if(s)throw r}}return o}}(e,t)||function(e,t){if(e){if("string"==typeof e)return m(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?m(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function m(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var p=r.T.encloseNamespace("shared.breadcrumbComponent"),v=a.forwardRef((function(e,t){var n=e.breadcrumb,r=n.name,l=n.appLink,o=n.active,c=e.withBackIcon;return a.createElement("li",{className:"breadcrumb-item".concat(o?" active":"")},o?a.createElement("strong",null,r):a.createElement(i.F,{appLink:l,ref:t},c&&a.createElement(d.x,{svgName:s.vn.ChevronLeft,size:d.S.Small}),a.createElement("span",{className:c?"ms-2":""},r)))})),f=function(e){var t=e.breadcrumbs,n=(0,o.a)(l.r.XS),r=(null==t?void 0:t.length)||0,i=u(a.useState(!1),2),c=i[0],s=i[1],d=u(a.useState(!1),2),m=d[0],f=d[1],g=a.useRef();if(a.useEffect((function(){var e,n=null!==(e=null==t?void 0:t.reduce((function(e,t){return e+t.name.length}),0))&&void 0!==e?e:0;r>3&&n>56&&s(!0)}),[null==t?void 0:t.length]),a.useLayoutEffect((function(){var e;m&&(null===(e=g.current)||void 0===e||e.focus())}),[g.current,m]),!r||n&&r<2)return a.createElement(a.Fragment,null);if(n)return a.createElement("nav",{"aria-label":"breadcrumb"},a.createElement("ol",{className:"breadcrumb m-0 p-0"},a.createElement(v,{breadcrumb:t[r-2],withBackIcon:!0})));var y=a.createElement(v,{breadcrumb:t[0]}),h=r>2?a.createElement(v,{breadcrumb:t[r-2]}):a.createElement(a.Fragment,null),E=a.createElement(v,{breadcrumb:t[r-1]}),b=t.slice(1,r-2);return a.createElement("nav",{"aria-label":"breadcrumb"},a.createElement("ol",{className:"breadcrumb m-0 p-0"},y,c?a.createElement("li",{className:"breadcrumb-item"},a.createElement("button",{className:"btn-link",onClick:function(){s(!1),f(!0)},"aria-label":p("expand")},"...")):b.map((function(e,t){return a.createElement(v,{key:t,breadcrumb:e,ref:0===t?g:null})})),h,E))},g=a.memo((function(e){var t=e.numItems,n=void 0===t?3:t;return(0,o.a)(l.r.XS)?a.createElement("div",{className:"partial-loading-background",style:{height:"1.3125rem",width:"6rem"}}):a.createElement("nav",{"aria-label":"breadcrumb"},a.createElement("ol",{className:"breadcrumb m-0 p-0"},c.u.getPartialLoadingItems({numItems:n}).map((function(e,t){var n=e.width;return a.createElement("li",{key:t,className:"breadcrumb-item"},a.createElement("span",{className:"d-inline-block partial-loading-background",style:{width:n},dangerouslySetInnerHTML:{__html:"&nbsp"}}))}))))}))},72553:(e,t,n)=>{n.d(t,{j:()=>u});var a=n(32735),r=n(42029),i=n(83345),l=n(49439);const o={copyrightDisclaimer:"z8YoI",overlayContainer:"eJDbJ"};function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var s="shared.copyrightDisclaimer",d=150;function u(e){var t,n,u,m=(n=(0,l.L)({}),u=2,function(e){if(Array.isArray(e))return e}(n)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,i,l,o=[],c=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(a=i.call(n)).done)&&(o.push(a.value),o.length!==t);c=!0);}catch(e){s=!0,r=e}finally{try{if(!c&&null!=n.return&&(l=n.return(),Object(l)!==l))return}finally{if(s)throw r}}return o}}(n,u)||function(e,t){if(e){if("string"==typeof e)return c(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?c(e,t):void 0}}(n,u)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),p=m[0],v=m[1];return a.createElement("div",{ref:p,className:e.className},a.createElement("p",{className:"".concat(o.copyrightDisclaimer," mb-1")},a.createElement(i.x,{namespace:s,phrase:"copyrightDisclaimer"})),a.createElement(r.Z,{target:p.current,show:v,placement:e.overflowPlacement&&document.documentElement.clientHeight-(null===(t=p.current)||void 0===t?void 0:t.getBoundingClientRect().bottom)<d?e.overflowPlacement:e.placement},a.createElement("div",{className:"".concat(o.overlayContainer," mw-100 bg-white border rounded-3 p-2")},a.createElement("p",null,a.createElement(i.x,{namespace:s,phrase:"warning"})),a.createElement("p",{className:"fw-semibold mb-0"},a.createElement(i.x,{namespace:s,phrase:"sharing"})))))}},5640:(e,t,n)=>{n.d(t,{O:()=>h});var a=n(32735),r=n(23481),i=n(28400),l=n(11518),o=n(58704),c=n(59598),s=n(31908),d=n(14070),u=n(97291),m=n(22843),p=n(84591),v=n(68626),f=n(80143),g=a.memo((function(e){var t,n=e.data,r=e.thumbnailSize,i=e.preloadImage,l=e.getAppLink,o=(0,f.n)(null===(t=n.subjectPresentationAudiences)||void 0===t?void 0:t.data,e.audiences);return a.createElement("div",{className:"flex-shrink-0 px-1 col-6 col-sm-4"},a.createElement(p.u,{type:"static",textPosition:v.z.Independent,video:n,appLink:l(n),imageOptions:{size:r},preload:i,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,setFavourite:e.setFavourite,canFavourite:e.canFavourite,imageCdnUrl:e.imageCdnUrl,audience:o,hideDuration:!1,isPlugin:e.isPlugin,showOwner:e.showOwner}),a.createElement("div",{className:"mt-2"},a.createElement(m.h,Object.assign({},e,{video:n,appLink:e.getAppLink(n)}))))})),y="shared.playPageClipsV2";function h(e){var t;if(!e.canViewClips||!(null===(t=e.clips)||void 0===t?void 0:t.length))return a.createElement(a.Fragment,null);var n=s.M.isVideo(e.video),m=r.T.getPhrase(y,n?"clips":"otherClips",{count:e.clips.length});return a.createElement("section",{className:"play-page-section",id:c.K.Clips,ref:function(t){var n;t&&(null===(n=e.headingRef)||void 0===n?void 0:n.current)&&e.headingRef.current.set(c.K.Clips,t)}},a.createElement(l.kM,{name:m,contents:o.z.ClipsV2,collection:e.clips,prefetched:!0,getChildAppLink:function(e){return{application:u.O.CLIPS,action:d.e.Clips.PLAY_CLIP,args:[e.id,i.m.slugify(e.name)]}},appLink:s.M.isVideo(e.video)?{action:d.e.Videos.VIDEO_CLIPS,application:u.O.VIDEOS,args:[e.video.id,i.m.slugify(e.video.name)]}:{action:d.e.Clips.CLIP_CLIPS,application:u.O.CLIPS,args:[e.video.id,i.m.slugify(e.video.name)]},childComponent:g,extraChildComponentProps:{yearGroups:e.yearGroups,audiences:e.audiences,imageCdnUrl:e.imageCdnUrl,setFavourite:e.setFavourite,canFavourite:e.canFavourite,isPlugin:e.isPlugin,showOwner:!0},analyticsData:e.analyticsData}))}},12059:(e,t,n)=>{n.d(t,{a:()=>N});var a=n(32735),r=n(42648),i=n(23481),l=n(110),o=n(78259),c=n(65858),s=n(72553),d=n(25723),u=n(87311),m=n(91743),p=n(83345),v=n(8730),f=n(40178),g=n(44829),y=n(59598),h=n(31908);const E={descriptionBorder:"YUC62"};var b="shared.videoDetailsV2",C=i.T.encloseNamespace(b);function I(e){var t=e.label,n=e.items,r=e.className;if(!(n&&n.data&&n.data.length))return a.createElement(a.Fragment,null);var i=n.data.map((function(e){return e.name})).join(", ");return a.createElement("div",{className:r},t,": ",i)}function w(e){var t,n,r,i,o,c,s,d,u,m=e.video;if(!h.M.isVideo(m)&&!h.M.isClip(m))return a.createElement(a.Fragment,null);var v=h.M.getParentVideo(m);return a.createElement("div",{className:m.description?"col-md-5 ps-md-3 pt-3 pt-md-0":"col-12"},a.createElement("h2",{className:"h6 mb-1"},a.createElement(p.x,{phrase:"details"})),!!v.productionYear&&a.createElement("div",{className:"mb-1"},a.createElement(p.x,{phrase:"productionYear",options:{year:v.productionYear}})),a.createElement(I,{label:C("productionCompanies",{smartCount:null===(n=null===(t=v.productionCompanies)||void 0===t?void 0:t.data)||void 0===n?void 0:n.length}),items:v.productionCompanies,className:"mb-1"}),a.createElement(I,{label:C("distributors",{smartCount:null===(i=null===(r=v.distributors)||void 0===r?void 0:r.data)||void 0===i?void 0:i.length}),items:v.distributors,className:"mb-1"}),a.createElement(I,{label:C("producers",{smartCount:null===(c=null===(o=v.producers)||void 0===o?void 0:o.data)||void 0===c?void 0:c.length}),items:v.producers,className:"mb-1"}),a.createElement(I,{label:C("directors",{smartCount:null===(d=null===(s=v.directors)||void 0===s?void 0:s.data)||void 0===d?void 0:d.length}),items:v.directors,className:"mb-1"}),!!v.dateBroadcast&&a.createElement("div",{className:"mb-1"},a.createElement(p.x,{phrase:"dateBroadcast",options:{date:l.O.format(v.dateBroadcast,"DD/MM/YYYY")}})),!!v.channel&&a.createElement("div",{className:"mb-1"},a.createElement(p.x,{phrase:"channel",options:{channel:v.channel.name}})),!((null===(u=m._isClickViewCurated)||void 0===u?void 0:u.value)||!m.dateCreated)&&a.createElement("div",{className:"mb-1"},a.createElement(p.x,{phrase:"dateUploaded",options:{date:l.O.format(m.dateCreated,"DD/MM/YYYY")}})))}function N(e){var t,n=e.video,i=e.maxHeight,l=void 0===i?f.x:i,C=h.M.getParentVideo(n),I=!!e.video.description,N=(0,v._)(e.video)||!!C.productionYear||!!C.dateBroadcast||!!C.channel||!(!n.dateCreated||(null===(t=n._isClickViewCurated)||void 0===t?void 0:t.value));if(!I&&!N)return a.createElement(a.Fragment,null);var k=function(){var t,n,a,r;return e.hideTags||h.M.isInteractive(e.video)||!(null===(n=null===(t=e.video.tags)||void 0===t?void 0:t.data)||void 0===n?void 0:n.length)?null:null===(r=null===(a=e.video.tags)||void 0===a?void 0:a.data)||void 0===r?void 0:r.filter((function(e){return e.tagType===g.Q.Normal}))}();return a.createElement(p.D.Provider,{value:b},a.createElement("section",{id:y.K.VideoDetails,ref:function(t){var n;t&&(null===(n=e.headingRef)||void 0===n?void 0:n.current)&&e.headingRef.current.set(y.K.VideoDetails,t)},className:"play-page-section"},a.createElement("div",{className:"rounded border p-3 position-relative"},a.createElement(r.$B,{autoHeight:!0,autoHeightMax:l},a.createElement("div",{className:"row g-0"},I&&a.createElement("div",{className:N?"".concat(E.descriptionBorder," pe-3 col-md-7"):"col-12"},a.createElement("div",{className:"d-flex align-items-center"},a.createElement("h2",{className:"h6 mb-1"},a.createElement(p.x,{phrase:"description"})),a.createElement(d.m,{text:n.description,title:n.name,className:"ps-2",onLaunch:e.onLaunchImmersiveReader,onExit:e.onExitImmersiveReader,analyticsOptions:{location:c.LZ.PlayPage,entity:c.py.Video,actionType:c.Vw.Click,descriptor:c._S.LaunchImmersiveReader},analyticsData:{id:n.id,type:"description"}})),a.createElement("p",{className:"mb-0",dangerouslySetInnerHTML:{__html:o.O.linkifyText(e.video.description,{nl2br:!0})}})),N&&a.createElement(w,Object.assign({},e))),!!(null==k?void 0:k.length)&&a.createElement("div",{className:"mt-3"},a.createElement("h2",{className:"h6 mb-1"},a.createElement(p.x,{phrase:"normalTags"})),a.createElement(m.P,Object.assign({tags:k},u.G.getTagActionProps(e.getTagAppLink,null,e.suppressInteractivity),{className:"mt-1"}))),h.M.isBroadcast(e.video)&&a.createElement(s.j,{placement:"bottom-start",className:"d-flex justify-content-start mt-2 mb-n1"})))))}},51184:(e,t,n)=>{n.d(t,{NE:()=>d,RH:()=>m,Wp:()=>u});var a=n(32735),r=n(16367),i=n(34468),l=n(73758),o=n(63847);function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var s=/\[\]\(cv:\/\/poi\?id=\d+\)\n*/g;function d(e,t){var n,i,l,o=(i=(0,a.useState)(""),l=2,function(e){if(Array.isArray(e))return e}(i)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,i,l,o=[],c=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(a=i.call(n)).done)&&(o.push(a.value),o.length!==t);c=!0);}catch(e){s=!0,r=e}finally{try{if(!c&&null!=n.return&&(l=n.return(),Object(l)!==l))return}finally{if(s)throw r}}return o}}(i,l)||function(e,t){if(e){if("string"==typeof e)return c(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?c(e,t):void 0}}(i,l)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),d=o[0],u=o[1];return(0,a.useEffect)((function(){if(t){var n=(a=e.glance,i=a.content.replace(s,""),r(i));u(n)}var a,i}),[null===(n=e.glance)||void 0===n?void 0:n.content,t]),d}function u(e){var t,n;return(null===(t=e.glance)||void 0===t?void 0:t.content)&&"text/markdown"===(null===(n=e.glance)||void 0===n?void 0:n.format)}function m(e,t){var n=(0,a.useRef)();function r(){e&&l.n.trigger("glance:poi:mouseover",e)}function c(){l.n.trigger("glance:poi:mouseleave")}return(0,i.R)("player:poi:mouseover",(function(t){var a,r,i;(null==t?void 0:t.id)&&(null===(a=null==e?void 0:e.id)||void 0===a?void 0:a.toString())===(null===(r=null==t?void 0:t.id)||void 0===r?void 0:r.toString())&&(null===(i=n.current)||void 0===i||i.classList.add(o.Z.highlightPoi))}),null,t),(0,i.R)("player:poi:mouseleave",(function(){var e;null===(e=n.current)||void 0===e||e.classList.remove(o.Z.highlightPoi)}),null,t),(0,a.useEffect)((function(){var e,a;if(n.current&&t)return null===(e=n.current)||void 0===e||e.addEventListener("mouseover",r),null===(a=n.current)||void 0===a||a.addEventListener("mouseleave",c),function(){var e,t;null===(e=n.current)||void 0===e||e.removeEventListener("mouseover",r),null===(t=n.current)||void 0===t||t.removeEventListener("mouseleave",c)}}),[n.current]),n}},64921:(e,t,n)=>{n.d(t,{j:()=>A});var a=n(32735),r=n(59087),i=n.n(r),l=n(42648),o=n(23481),c=n(49985),s=n(65858),d=n(11607),u=n(83345),m=n(93264),p=n(51184);const v={poiEntry:"vr6R9",poiText:"znHZF",public:"v0BZ9",poiTimeStamp:"AdKwe",wideBadge:"YR2Hh"};function f(e){var t=m.T.ToDisplayDuration(1e3*e.poi.startTime),n=(0,p.RH)(e.poi,!e.suppressInteractivity);return e.suppressInteractivity?a.createElement("div",{className:"d-flex ".concat(v.poiEntry," mb-2")},a.createElement("span",{className:"d-flex rounded-pill justify-content-center align-items-center fw-semibold text-info bg-light-blue ".concat(v.poiTimeStamp," ").concat(e.wideBadge?v.wideBadge:"")},t),a.createElement("div",{className:"".concat(v.public," ms-2")},e.poi.description)):a.createElement(d.L,{key:e.poi.startTime,className:"d-flex ".concat(v.poiEntry," mb-2 cursor-pointer"),onClick:function(){return e.onClickPoiItem(e.poi.startTime)},ref:n},a.createElement("div",{className:"d-flex rounded-pill justify-content-center align-items-center fw-semibold text-info bg-light-blue ".concat(v.poiTimeStamp," ").concat(e.wideBadge?v.wideBadge:"")},t),a.createElement("div",{className:"ms-2 ".concat(v.poiText)},e.poi.description))}var g="shared.pointsOfInterestList";function y(e){var t=e.pointsOfInterest.sort((function(e,t){return e.startTime-t.startTime})),n=t.some((function(e){return e.startTime>=3600}));return a.createElement("div",null,a.createElement("h2",{className:"h6 my-2"},a.createElement(u.x,{namespace:g,phrase:"heading"})),a.createElement("div",null,t.map((function(t){return a.createElement(f,{key:t.startTime,poi:t,suppressInteractivity:e.suppressInteractivity,onClickPoiItem:e.onClickPoiItem,wideBadge:n})}))))}var h=n(83914),E=n(87311),b=n(91743),C=n(76177),I=n(44829),w=n(35223),N=n(31908),k=n(63847);function O(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var S="shared.videoAtAGlanceV2",x=o.T.encloseNamespace(S),T=350;function P(e){return e.hideScrollbar?a.createElement(a.Fragment,null,e.children):a.createElement("div",{className:"rounded border mb-4 bg-white"},a.createElement(l.ZP,{autoHeight:!0,autoHeightMax:T},a.createElement("div",{className:"px-3 px-3 pt-3 pb-2"},e.children)))}function A(e){var t,n,r,l=(0,p.NE)(e.video,e.canViewGlance),o=(n=a.useState(""),r=2,function(e){if(Array.isArray(e))return e}(n)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,i,l,o=[],c=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(a=i.call(n)).done)&&(o.push(a.value),o.length!==t);c=!0);}catch(e){s=!0,r=e}finally{try{if(!c&&null!=n.return&&(l=n.return(),Object(l)!==l))return}finally{if(s)throw r}}return o}}(n,r)||function(e,t){if(e){if("string"==typeof e)return O(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?O(e,t):void 0}}(n,r)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),d=o[0],m=o[1],v=function(){var t,n,a,r;return N.M.isInteractive(e.video)||!(null===(n=null===(t=e.video.tags)||void 0===t?void 0:t.data)||void 0===n?void 0:n.length)?null:null===(r=null===(a=e.video.tags)||void 0===a?void 0:a.data)||void 0===r?void 0:r.filter((function(e){return e.tagType===I.Q.Pedagogy||e.tagType===I.Q.Skill}))}(),f=a.useRef(null);return a.useEffect((function(){var e;(null===(e=f.current)||void 0===e?void 0:e.innerText)&&m(f.current.innerText)}),[null===(t=f.current)||void 0===t?void 0:t.innerText]),e.canViewGlance?a.createElement("section",{className:"play-page-section"},a.createElement(P,{hideScrollbar:e.hideScrollbar},a.createElement("h2",{className:"h6 mb-2"},a.createElement(u.x,{namespace:S,phrase:"learningIntention"})),a.createElement("div",{className:"mb-3 ".concat(k.Z.learningIntention)},a.createElement(C.u,{title:x("copy"),spanHack:!0,spanHackClassName:k.Z.icon},a.createElement(i(),{text:d},a.createElement(h.x,{className:"svg-container me-1 cursor-pointer",svgName:w.vn.Copy,size:h.S.Small,onClick:function(){var t={id:e.video.glance.id,videoId:e.video.id,videoName:e.video.name,learningIntention:d},n={actionType:s.Vw.Copy,entity:s.py.Glance,location:s.LZ.PlayPage};c.k.logUserAction(t,n)}}))),a.createElement("div",{dangerouslySetInnerHTML:{__html:l},className:"d-inline",ref:f})),!!(null==v?void 0:v.length)&&a.createElement("div",{className:"mb-1"},a.createElement(b.P,Object.assign({tags:v},E.G.getTagActionProps(e.getTagAppLink,e.onClickTag,e.suppressInteractivity),{className:"mt-2"}))),!!e.pointsOfInterest.length&&a.createElement(y,{pointsOfInterest:e.pointsOfInterest,suppressInteractivity:e.suppressInteractivity,onClickPoiItem:function(t){e.setStartTime(t)}}))):a.createElement(a.Fragment,null)}},17997:(e,t,n)=>{n.d(t,{H:()=>m});var a=n(32735),r=n(23481),i=n(36848),l=n(83345),o=n(22843),c=n(84591),s=n(68626),d="shared.interactiveWidgetItemV2",u=r.T.encloseNamespace(d),m=a.memo((function(e){var t,n,r=e.data,m=e.thumbnailSize,p=e.preloadImage,v=Object.assign(Object.assign({},e.questionsAppLink),{args:[e.data.id]}),f=null===(n=null===(t=r._timepoints)||void 0===t?void 0:t.value)||void 0===n?void 0:n.length;return a.createElement("div",{className:"flex-shrink-0 px-1 col-6 col-sm-4"},a.createElement(c.u,{type:"static",textPosition:s.z.Independent,video:r,appLink:e.getAppLink(r),imageOptions:{size:m},preload:p,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,setFavourite:e.setFavourite,canFavourite:e.canFavourite,hideDuration:!1,imageCdnUrl:e.imageCdnUrl,isPlugin:e.isPlugin,showOwner:e.showOwner}),a.createElement("div",{className:"mt-2"},a.createElement(o.h,Object.assign({},e,{video:r,appLink:e.getAppLink(r)}))),a.createElement("div",{className:"mt-1"},a.createElement(i.F,{appLink:v,className:"cursor-pointer",ariaLabel:"".concat(u("previewQuestions",{count:f,smartCount:f})," ").concat(u("ariaPreview",{name:r.name}))},a.createElement(l.x,{namespace:d,phrase:"previewQuestions",options:{count:f,smartCount:f}}))))}))},95812:(e,t,n)=>{n.d(t,{J:()=>v});var a=n(32735),r=n(23481),i=n(28400),l=n(11518),o=n(58704),c=n(59598),s=n(31908),d=n(14070),u=n(97291),m=n(17997),p="shared.playPageInteractivesV2";function v(e){var t;if(!e.canViewInteractives||!(null===(t=e.interactives)||void 0===t?void 0:t.length))return a.createElement(a.Fragment,null);var n=r.T.getPhrase(p,"interactives",{count:e.interactives.length});return a.createElement("section",{className:"play-page-section",id:c.K.Interactives,ref:function(t){var n;t&&(null===(n=e.headingRef)||void 0===n?void 0:n.current)&&e.headingRef.current.set(c.K.Interactives,t)}},a.createElement(l.kM,{name:n,contents:o.z.InteractivesV2,collection:e.interactives,prefetched:!0,getChildAppLink:function(e){return{application:u.O.INTERACTIVES,action:d.e.Interactives.VIEW_INTERACTIVE,args:[e.id,i.m.slugify(e.name)]}},appLink:s.M.isVideo(e.video)?{action:d.e.Videos.VIDEO_INTERACTIVES,application:u.O.VIDEOS,args:[e.video.id,i.m.slugify(e.video.name)]}:{action:d.e.Clips.CLIP_INTERACTIVES,application:u.O.CLIPS,args:[e.video.id,i.m.slugify(e.video.name)]},childComponent:m.H,extraChildComponentProps:{yearGroups:e.yearGroups,setFavourite:e.setFavourite,canFavourite:e.canFavourite,imageCdnUrl:e.imageCdnUrl,questionsAppLink:{application:u.O.INTERACTIVES,action:d.e.Interactives.PREVIEW_QUESTIONS},isPlugin:e.isPlugin,showOwner:!0},analyticsData:e.analyticsData}))}},53709:(e,t,n)=>{n.d(t,{M:()=>g});var a=n(32735),r=n(23481),i=n(65858),l=n(11518),o=n(16714),c=n(58704),s=n(22902),d=n(59598),u=n(74237),m=n(351);function p(e){return function(e){if(Array.isArray(e))return v(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return v(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?v(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function v(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var f="shared.playPageResources";function g(e){var t=(0,s.T)().hasPermissions,n=function(e,t){var n,a,r,i,l=null!==(a=null===(n=e.resources)||void 0===n?void 0:n.data)&&void 0!==a?a:[],o=null!==(i=null===(r=e.links)||void 0===r?void 0:r.data)&&void 0!==i?i:[];if(!t)return[].concat(p(l),p(o));var c=l.filter((function(e){var t;return["additional-materials","student-activity"].includes(null===(t=e.metadata)||void 0===t?void 0:t.resourceType)}));return[].concat(p(c),p(o))}(e.video,t(o.C.StudentExperience)),v=r.T.getPhrase(f,"resources",{count:n.length});return n.length?a.createElement("section",{id:d.K.Resources,className:"play-page-section",ref:function(t){var n;t&&(null===(n=e.headingRef)||void 0===n?void 0:n.current)&&e.headingRef.current.set(d.K.Resources,t)}},a.createElement(l.kM,{name:v,contents:c.z.PlayPageResourcesV2,collection:n,prefetched:!0,childComponent:m.oA,extraChildComponentProps:{imageCdnUrl:e.imageCdnUrl,imageErrorFallbackUrl:e.resourceThumbnailFallbackUrl,actionBehaviour:e.canViewResources?"normal":"public",location:"play-page",titlePosition:"below",onClickDownload:e.canViewResources?function(t){u.T.downloadResource(t,e.analyticsData,{location:i.LZ.PlayPage,actionType:i.Vw.Download,entity:i.py.Resource})}:null},getChildAppLink:e.getAppLink,analyticsOptions:e.canViewResources?{}:{workflowPhase:i.eu.Start,descriptor:i.Yu.SignUp},analyticsData:e.analyticsData})):a.createElement(a.Fragment,null)}},351:(e,t,n)=>{n.d(t,{$G:()=>w,oA:()=>N,ZS:()=>I});var a=n(32735),r=n(39202),i=n(49985),l=n(65858),o=n(36848),c=n(11607),s=n(75891),d=n(83914),u=n(60995),m=n(76177),p=n(61150),v=n(71063),f=n(4594),g=n(1164),y=n(79967),h=n(45778),E=n(54297),b=n(35223);const C={imageStyle:"bYRn8",item:"CjuxU",dashboard:"IuRN0",playPage:"VdJvp",aspectRatio:"QK8Jh",outerContainer:"eiC_H",innerContainer:"huIRg",actions:"FsIJm",titleBelow:"DpeSr",thumbnailContainer:"ZbalL",titleAbove:"PwOSX",teacherPack:"ZHAEj",text:"k3ei6",hoverState:"BLrWL",atomGuide:"Qz8JE",studentActivity:"qNspk",additionalMaterials:"R0huw",userUploaded:"H_zGf",imageTypeResource:"AgeLb",download:"DKneu"};function I(e,t){var n,a=(0,y.k)();return"public"===t||!a.xs&&!a.sm&&"resource"===e.type&&"metadata"in e&&(e.metadata.type===g.L.Image||(e.metadata.type===g.L.Pdf?!!e.url:!!(null===(n=e.pdf)||void 0===n?void 0:n.url)))}function w(e){var t,n,r,i,l=null;"metadata"in e.data&&(l=e.data.metadata);var o=h.G.isType(e.data,f.E.Resource);return a.createElement(a.Fragment,null,a.createElement("div",{className:C.aspectRatio},a.createElement("div",{className:C.outerContainer},a.createElement("div",{className:function(t){var n,a="\n d-flex flex-column align-items-center justify-content-end rounded-3 h-100\n position-relative ".concat(function(e){switch(e){case"atom-guide":return C.atomGuide;case"student-activity":return C.studentActivity;case"teacher-pack":return C.teacherPack;case"additional-materials":return C.additionalMaterials;default:return C.userUploaded}}(t)," ").concat(C.innerContainer);return(null===(n=e.theme)||void 0===n?void 0:n.containerClass)?a+=" ".concat(e.theme.containerClass):a+=" pt-3 px-3",e.applyHoverState&&(a+=" ".concat(C.hoverState)),a}(null==l?void 0:l.resourceType)},"above"===e.titlePosition&&a.createElement(m.u,{title:e.data.name},a.createElement("h3",{className:"text-center text-break h5 mb-3 ".concat(C.text)},a.createElement("span",{className:"clamp-1"},e.data.name))),a.createElement("div",{className:"\n ".concat(null!==(n=null===(t=e.theme)||void 0===t?void 0:t.thumbnailContainerClass)&&void 0!==n?n:""," w-75 overflow-hidden \n ").concat(C.thumbnailContainer," ").concat("above"===e.titlePosition?C.titleAbove:""," \n ").concat(C.imageStyle,"\n ")},a.createElement(s.C,{resource:e.data,imageCdnUrl:e.imageCdnUrl,imageErrorFallbackUrl:e.imageErrorFallbackUrl,preloadImage:e.preloadImage,dynamicRatioImageOptions:e.dynamicRatioImageOptions})),o&&e.onClickDownload&&"normal"===e.actionBehaviour&&a.createElement("div",{className:C.actions},a.createElement(c.L,{onClick:function(t){t.preventDefault(),t.stopPropagation(),h.G.isResource(e.data)&&"function"==typeof e.onClickDownload&&e.onClickDownload(e.data)},className:"".concat(C.download," d-flex align-items-center justify-content-center")},a.createElement(d.x,{svgName:b.vn.Download}))),!e.hideTypeBadge&&o&&a.createElement(p.y,{typeId:f.E.Resource})))),"below"===e.titlePosition&&a.createElement("div",{className:"mt-1 ".concat(C.titleBelow)},h.G.isType(e.data,f.E.Resource)&&!!(null===(i=null===(r=e.data)||void 0===r?void 0:r.metadata)||void 0===i?void 0:i.resourceType)&&a.createElement(u.m,null,E.C.getResourceTypeName(e.data.metadata.resourceType)),a.createElement("h3",{className:"h6 clamp-2"},e.data.name)))}w.defaultProps={preloadImage:!0,actionBehaviour:"normal"};var N=a.memo((function(e){var t=I(e.data,e.actionBehaviour),n=Object.assign(Object.assign({},e.analyticsData),e.data),c=Object.assign(Object.assign({},e.analyticsOptions),{actionType:l.Vw.Click,entity:e.data.typeId===f.E.Resource?l.py.Resource:l.py.Link});function s(){i.k.logUserAction(n,c)}var d,u=Object.assign(Object.assign({},e),{applyHoverState:t||!!e.data.url});return a.createElement("div",{className:"px-1 flex-shrink-0 ".concat(C.item," ").concat("play-page"===e.location?C.playPage:C.dashboard," ").concat(v.M.RESOURCE_ITEM_SELECTOR)},(d="d-block no-decoration","link"===e.data.type?a.createElement("a",{href:e.data.url,target:"_blank",className:d,onClick:s},a.createElement(w,Object.assign({},u))):t?"public"===e.actionBehaviour?a.createElement("div",{className:"".concat(d," cursor-pointer d-inline"),onClick:function(){s(),r.C$.trigger(e.getAppLink(e.data))}},a.createElement(w,Object.assign({},u))):a.createElement(o.F,{appLink:e.getAppLink(e.data),className:d,analyticsData:n,analyticsOptions:c},a.createElement(w,Object.assign({},u))):e.data.url?a.createElement("a",{href:e.data.url,className:d,onClick:s},a.createElement(w,Object.assign({},u))):a.createElement("div",{className:d},a.createElement(w,Object.assign({},u)))))}))},75838:(e,t,n)=>{n.d(t,{w:()=>s});var a=n(32735),r=n(92869),i=n(65858),l=n(36848),o=n(11607);const c={itemsWrapper:"m6mGm",anchorWrapper:"QptZj",default:"_AZa8",selectedItem:"Nuiel",disabled:"WIzWJ",floatIcon:"ARudn",arrowIcon:"tEF5Q",listIcon:"Ql2wi"};function s(e){var t={actionType:i.Vw.Click,entity:i.py.Widget,location:i.LZ.TableOfContents};function n(t){var n;r.t.preventScrollTop(),e.setControlledId(t.id),null===(n=e.onItemClick)||void 0===n||n.call(e,t),setTimeout((function(){var e;return null===(e=document.getElementById(t.id))||void 0===e?void 0:e.focus()}))}return a.createElement("div",{className:"".concat(c.itemsWrapper)},e.items.map((function(r,i){return e.localState?a.createElement(o.L,{key:r.id,className:"".concat(c.anchorWrapper," ").concat(e.activeId===r.id?c.selectedItem:""),onClick:function(){n(r)}},a.createElement("div",{className:"".concat(e.activeId||0!==i?"":c.default," ")},r.name)):a.createElement(l.F,{key:r.id,appLink:e.getAppLink(r),appLinkOptions:{replace:!0},className:"".concat(c.anchorWrapper," ").concat(e.activeId===r.id?c.selectedItem:""),onClick:function(){n(r)},analyticsData:Object.assign(Object.assign({},e.analyticsData),{id:r.id,name:r.name}),analyticsOptions:t},a.createElement("div",{className:"".concat(e.activeId||0!==i?"":c.default," ")},r.name))})))}},65332:(e,t,n)=>{n.d(t,{D:()=>i});var a,r=n(32735),i=function(e){var t=e.setActiveId,n=e.headingElements,i=e.controlledId,l=e.setControlledId,o=r.useRef(0);r.useEffect((function(){var e=new IntersectionObserver((function(e){e.forEach((function(e){if(i)return t(i),void(a=window.setTimeout((function(){l("")}),800));if(e.isIntersecting)t(e.target.id),o.current=window.scrollY;else{var r=o.current-window.scrollY>0,c=n.findIndex((function(t){return t.id===e.target.id})),s=n[c-1];r&&(null==s?void 0:s.id)&&t(null==s?void 0:s.id)}}))}),{rootMargin:"-67px 0px -80% 0px"});return n.forEach((function(t){return e.observe(t)})),function(){a&&window.clearTimeout(a),e.disconnect()}}),[t,n.length,i])}},74237:(e,t,n)=>{n.d(t,{T:()=>o});var a=n(97395),r=n(49985),i=n(65858),l=null,o={getVideoDownloadUrl:function(e,t){return a._.safeUrlConcat(a._.makeHttps(e),"/download?token=".concat(t))},downloadResource:function(e,t,n){var a,o=l;l||(o=l=document.createElement("iframe"),document.body.appendChild(o),o.style.display="none"),o.src=e.url,r.k.logUserAction(Object.assign({id:null==e?void 0:e.id,name:null==e?void 0:e.name,resourceType:null===(a=null==e?void 0:e.metadata)||void 0===a?void 0:a.resourceType},t),Object.assign({actionType:i.Vw.Download,entity:i.py.Resource,workflowPhase:i.eu.Complete},n))}}},9465:(e,t,n)=>{n.d(t,{h:()=>y});var a=n(32735),r=n(50690),i=n(49985),l=n(65858),o=n(10874),c=n(75838),s=n(83345),d=n(75795),u=n(35223),m=n(53739);const p={container:"qA4yj",aside:"j28IY",collapse:"sFoPk",iconContainer:"PYyBV",arrowIcon:"MTodB",listIcon:"W76p8"};var v="shared.playPage";function f(e){function t(){var t;e.setIsExpanded(!e.isExpanded),t={actionType:e.isExpanded?l.Vw.Hide:l.Vw.Open,entity:l.py.TableOfContents,location:l.LZ.PlayPage},i.k.logUserAction(e.analyticsData,t)}return a.createElement("div",{className:"d-flex justify-content-end"},a.createElement("div",{className:p.container},a.createElement("div",{className:"".concat(p.iconContainer)},a.createElement(o.h,{className:"btn btn-outline-dark ".concat(p.listIcon),svgName:u.vn.TableOfContents,onClick:t}),a.createElement(o.h,{className:"btn btn-outline-dark ".concat(p.arrowIcon),svgName:e.isExpanded?u.vn.CollapseRight:u.vn.ExpandLeft,onClick:t}))))}function g(e){return a.createElement("div",{className:e.showInSide?"":"d-inline-flex gap-1"},a.createElement("aside",{className:"".concat(p.aside," position-relative ").concat(e.showInSide?"pe-1 pt-1 ":"px-3 pt-3 pb-2 border border-dark rounded-1 bg-white")},a.createElement("div",{className:p.container},e.showInSide&&a.createElement(o.h,{className:"btn position-absolute ".concat(p.collapse),svgName:u.vn.CollapseRight,onClick:function(){var t;e.setIsExpanded(!1),t={actionType:l.Vw.Hide,entity:l.py.TableOfContents,location:l.LZ.PlayPage},i.k.logUserAction(e.analyticsData,t)}}),a.createElement("h2",{className:"h5"},a.createElement(s.x,{namespace:v,phrase:"tocHeading"})),a.createElement(c.w,{items:e.items,activeId:e.activeId,getAppLink:function(e){var t=d.O.getCurrentRoute().appLink,n=t.params?Object.assign({},t.params):{};return n.tocId=e.id,Object.assign(Object.assign({},t),{params:n})},setControlledId:e.setControlledId,analyticsData:e.analyticsData,onItemClick:function(){e.showInSide||e.setIsExpanded(!1)}}))),!e.showInSide&&a.createElement(f,Object.assign({},e)))}function y(e){return a.createElement(a.Fragment,null,r.b.renderInPortalIfExists(e.isExpanded?a.createElement(g,Object.assign({},e)):a.createElement(f,Object.assign({},e)),document.getElementById(m.M)))}},53256:(e,t,n)=>{n.d(t,{d:()=>l});var a=n(23481),r=n(59598),i=a.T.encloseNamespace("shared.play"),l={getSectionHeading:function(e,t){switch(e){case r.K.Resources:return i("resourcesHeading",{count:t.resources.length});case r.K.Clips:return t.isPlayClipPage?i("otherClipsHeading",{count:t.clips.length-1}):i("clipsHeading",{count:t.clips.length});case r.K.Interactives:return i("interactivesHeading",{count:t.interactives.length});case r.K.Video:return i("videoHeading");case r.K.VideoDetails:return i("videoDetailsHeading");case r.K.RelatedVideos:return i("upNextHeading");case r.K.CurriculumLinks:return i("curriculumLinksHeading");case r.K.ClippedFrom:return i("clippedFromHeading");default:return""}}}},63010:(e,t,n)=>{n.d(t,{Q:()=>s});var a=n(32735),r=n(57900),i=n(81812);function l(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,i,l,o=[],c=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(a=i.call(n)).done)&&(o.push(a.value),o.length!==t);c=!0);}catch(e){s=!0,r=e}finally{try{if(!c&&null!=n.return&&(l=n.return(),Object(l)!==l))return}finally{if(s)throw r}}return o}}(e,t)||function(e,t){if(e){if("string"==typeof e)return o(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?o(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var c="play-page-toc-expanded";function s(e){var t=(0,i.a)(),n=!1!==r.SG.get(c),o=!!t&&n,s=l(a.useState(e||""),2),d=s[0],u=s[1],m=l(a.useState(""),2),p=m[0],v=m[1],f=l(a.useState(o),2),g=f[0],y=f[1];return a.useEffect((function(){y(!!t&&n)}),[t]),{controlledId:d,setControlledId:u,tableOfContentsExpanded:g,tableOfContentsActiveId:p,setTableOfContentsActiveId:v,onToggleTableOfContents:function(){y(!g),r.SG.set(c,!g)}}}},14476:(e,t,n)=>{n.d(t,{i:()=>o});var a=n(32735),r=n(59598),i=[r.K.Video,r.K.CurriculumLinks,r.K.Resources,r.K.Interactives,r.K.Clips,r.K.VideoDetails,r.K.ClippedFrom,r.K.RelatedVideos],l=[r.K.Video,r.K.VideoDetails,r.K.CurriculumLinks,r.K.Resources,r.K.Interactives,r.K.Clips,r.K.ClippedFrom,r.K.RelatedVideos];function o(e){var t=a.useRef(new Map),n=(e?i:l).map((function(e){return t.current.get(e)})).filter(Boolean);return{headingRef:t,headingElements:n}}},81812:(e,t,n)=>{n.d(t,{a:()=>r});var a=n(79967);function r(){var e=(0,a.k)();return e.lg||e.xl||e.xxl}},63847:(e,t,n)=>{n.d(t,{Z:()=>a});const a={learningIntention:"MHM6O",highlightPoi:"U7Q6x",icon:"H1xbT"}}}]);
2
- //# sourceMappingURL=6852-9dfd47d085-lite.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/6852-9dfd47d085-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/common/src/react/utils/PortalHelper.ts","file:///app/packages/libs/shared/src/components/breadcrumbs/Breadcrumbs.tsx","file:///app/packages/libs/shared/src/components/copyright-disclaimer/copyright-disclaimer.scss","file:///app/packages/libs/shared/src/components/copyright-disclaimer/CopyrightDisclaimer.tsx","file:///app/packages/libs/shared/src/components/play-page-v2/clips-widget/ClipWidgetItemV2.tsx","file:///app/packages/libs/shared/src/components/play-page-v2/clips-widget/PlayPageClips.tsx","file:///app/packages/libs/shared/src/components/play-page-v2/details/video-details.scss","file:///app/packages/libs/shared/src/components/play-page-v2/details/VideoDetailsV2.tsx","file:///app/packages/libs/shared/src/components/play-page-v2/glance/VideoAtAGlanceUtilsV2.ts","file:///app/packages/libs/shared/src/components/play-page-v2/glance/points-of-interest-list/points-of-interest-list.scss","file:///app/packages/libs/shared/src/components/play-page-v2/glance/points-of-interest-list/PointsOfInterestList.tsx","file:///app/packages/libs/shared/src/components/play-page-v2/glance/VideoAtAGlanceV2.tsx","file:///app/packages/libs/shared/src/components/play-page-v2/interactives-widget/InteractiveWidgetItemV2.tsx","file:///app/packages/libs/shared/src/components/play-page-v2/interactives-widget/PlayPageInteractives.tsx","file:///app/packages/libs/shared/src/components/play-page-v2/resources-widget/PlayPageResources.tsx","file:///app/packages/libs/shared/src/components/play-page-v2/resources-widget/resource-widget-item.scss","file:///app/packages/libs/shared/src/components/play-page-v2/resources-widget/ResourceWidgetItemV2.tsx","file:///app/packages/libs/shared/src/components/table-of-contents-list/table-of-contents-list.scss","file:///app/packages/libs/shared/src/components/table-of-contents-list/TableOfContentsList.tsx","file:///app/packages/libs/shared/src/hooks/useTableOfContentsActiveHeading.tsx","file:///app/packages/libs/shared/src/utils/DownloadHelper.ts","file:///app/packages/projects/lite/src/shared/components/play-page/components/table-of-contents/table-of-contents.scss","file:///app/packages/projects/lite/src/shared/components/play-page/components/table-of-contents/TableOfContents.tsx","file:///app/packages/projects/lite/src/shared/views/play/v2/PlayPageUtilV2.tsx","file:///app/packages/projects/lite/src/shared/views/play/v2/hooks/usePlayPageTableOfContent.ts","file:///app/packages/projects/lite/src/shared/constants/PlayPageSectionsOrder.ts","file:///app/packages/projects/lite/src/shared/views/play/v2/hooks/useSectionHeadings.ts","file:///app/packages/projects/lite/src/shared/views/play/v2/hooks/useShouldShowTableOfContents.ts","file:///app/packages/libs/shared/src/components/play-page-v2/glance/video-at-a-glance.scss"],"sourcesContent":["import React from 'react';\nimport { createPortal } from 'react-dom';\n\nexport const PortalHelper = {\n renderInPortalIfExists(component: React.ReactElement, portalContainer: Element | null): React.ReactElement {\n if (portalContainer)\n return createPortal(component, portalContainer);\n\n return component;\n }\n};","import * as React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\nimport { useMediaQuery } from 'libs/shared/hooks/UseMediaQuery';\nimport { PartialLoadingHelper } from 'libs/shared/utils/PartialLoadingHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { SvgContainer, SvgContainerSize } from '../svg-container/SvgContainer';\n\nconst namespace = 'shared.breadcrumbComponent';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst COLLAPSE_CHARACTER_COUNT = 56;\n\nexport interface Breadcrumb {\n name: string;\n appLink?: Core.AppLink;\n active?: boolean;\n}\n\ninterface BreadcrumbItemProps {\n breadcrumb: Breadcrumb;\n withBackIcon?: boolean;\n}\n\nexport const BreadcrumbItem = React.forwardRef((\n props: BreadcrumbItemProps,\n ref: React.ForwardedRef<HTMLElement>\n) => {\n const { breadcrumb: { name, appLink, active }, withBackIcon } = props;\n return (\n <li className={`breadcrumb-item${active ? ' active' : ''}`}>\n {active\n ? <strong>{name}</strong>\n : <AppLink appLink={appLink} ref={ref}>\n {withBackIcon && <SvgContainer svgName={cvSvgLibrary.ChevronLeft} size={SvgContainerSize.Small} />}\n <span className={withBackIcon ? 'ms-2' : ''}>{name}</span>\n </AppLink>\n }\n </li>\n );\n});\n\ninterface BreadcrumbsProps {\n breadcrumbs: Breadcrumb[];\n}\n\nexport const Breadcrumbs = ({ breadcrumbs }: BreadcrumbsProps) => {\n const isMobile = useMediaQuery(MediaQueryStrings.XS);\n\n const length = breadcrumbs?.length || 0;\n \n const [ collapse, setCollapse ] = React.useState(false);\n const [ shouldFocus, setShouldFocus ] = React.useState(false);\n const expandRef = React.useRef<HTMLElement>();\n\n React.useEffect(() => {\n const characterLength = breadcrumbs?.reduce((prev, next) => prev + next.name.length, 0) ?? 0;\n\n if (length > 3 && characterLength > COLLAPSE_CHARACTER_COUNT)\n setCollapse(true);\n }, [breadcrumbs?.length]);\n\n /**\n * Focus our first expanded item the first time it appears.\n */\n React.useLayoutEffect(() => {\n if (shouldFocus)\n expandRef.current?.focus();\n }, [ expandRef.current, shouldFocus ]);\n\n function onClickExpand() {\n setCollapse(false);\n setShouldFocus(true);\n }\n\n if (!length || (isMobile && length < 2))\n return <></>;\n\n if (isMobile)\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n <BreadcrumbItem breadcrumb={breadcrumbs[length - 2]} withBackIcon />\n </ol>\n </nav>\n );\n\n const first = <BreadcrumbItem breadcrumb={breadcrumbs[0]} />;\n const secondLast = length > 2 ? <BreadcrumbItem breadcrumb={breadcrumbs[length - 2]} /> : <></>;\n const last = <BreadcrumbItem breadcrumb={breadcrumbs[length - 1]} />;\n const rest = breadcrumbs.slice(1, length - 2);\n\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n {first}\n {collapse ?\n <li className='breadcrumb-item'>\n <button\n className='btn-link'\n onClick={onClickExpand}\n aria-label={getPhrase('expand')}\n >\n ...\n </button>\n </li> :\n rest.map((breadcrumb, idx) => (\n <BreadcrumbItem\n key={idx}\n breadcrumb={breadcrumb}\n ref={idx === 0 ? expandRef : null}\n />\n ))\n }\n {secondLast}\n {last}\n </ol>\n </nav>\n );\n};\n\nexport const PartialBreadcrumbs = React.memo(function({ numItems = 3 }: { numItems?: number; }) {\n const isMobile = useMediaQuery(MediaQueryStrings.XS);\n\n if (isMobile) {\n return (\n <div className='partial-loading-background' style={{ height: '1.3125rem', width: '6rem' }} />\n );\n }\n\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n {PartialLoadingHelper.getPartialLoadingItems({ numItems }).map(({ width }, idx) => (\n <li key={idx} className='breadcrumb-item'>\n <span className='d-inline-block partial-loading-background' style={{ width }} dangerouslySetInnerHTML={{ __html: '&nbsp' }} />\n </li>\n ))}\n </ol>\n </nav>\n );\n});","// extracted by mini-css-extract-plugin\nexport default {\"copyrightDisclaimer\":\"z8YoI\",\"overlayContainer\":\"eJDbJ\"};","import React from 'react';\nimport { Overlay } from 'react-bootstrap';\nimport { Placement } from 'react-bootstrap/esm/types';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useHoverIntent } from 'libs/shared/hooks/UseHover';\n\nimport styles from './copyright-disclaimer.scss';\n\nconst namespace = 'shared.copyrightDisclaimer';\n\nconst CONTAINER_HEIGHT = 150; // px\n\ninterface CopyrightDisclaimerProps {\n placement: Placement;\n overflowPlacement?: Placement;\n className?: string;\n}\n\nexport function CopyrightDisclaimer(props: CopyrightDisclaimerProps) {\n const [ ref, isHovering ] = useHoverIntent<HTMLDivElement>({});\n\n function preventOverflow() {\n const spaceBelow = document.documentElement.clientHeight - ref.current?.getBoundingClientRect().bottom;\n\n return spaceBelow < CONTAINER_HEIGHT;\n }\n\n return (\n <div ref={ref} className={props.className}>\n <p className={`${styles.copyrightDisclaimer} mb-1`}><Text namespace={namespace} phrase='copyrightDisclaimer' /></p>\n <Overlay\n target={ref.current}\n show={isHovering}\n placement={props.overflowPlacement && preventOverflow() ? props.overflowPlacement : props.placement}\n >\n <div className={`${styles.overlayContainer} mw-100 bg-white border rounded-3 p-2`}>\n <p><Text namespace={namespace} phrase='warning' /></p>\n <p className='fw-semibold mb-0'><Text namespace={namespace} phrase='sharing' /></p>\n </div>\n </Overlay>\n </div>\n );\n}","import React from 'react';\n\nimport { ThumbnailText } from 'libs/shared/components/thumbnails/thumbnail-text/ThumbnailText';\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 { CanFavouriteFunc, Clip, FavouriteFunc, PresentationAudience, YearGroup } from 'libs/shared/interfaces';\n\nexport interface ClipWidgetItemV2Props extends FixedWidgetItemProps<Clip> {\n imageCdnUrl: string;\n setFavourite: FavouriteFunc;\n canFavourite: CanFavouriteFunc;\n audiences: PresentationAudience[];\n yearGroups: YearGroup[];\n isPlugin: boolean;\n showOwner?: boolean;\n}\n\nexport const ClipWidgetItemV2 = React.memo(function(props: ClipWidgetItemV2Props): JSX.Element {\n const { data: clip, thumbnailSize, preloadImage, getAppLink } = props;\n const mergedAudience = useMergeAudiences(clip.subjectPresentationAudiences?.data, props.audiences);\n\n return (\n <div className={`flex-shrink-0 px-1 col-6 col-sm-4`}>\n <VideoThumbnail\n type='static'\n textPosition={ThumbnailTextPosition.Independent}\n video={clip}\n appLink={getAppLink(clip)}\n imageOptions={{ size: thumbnailSize }}\n preload={preloadImage}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n imageCdnUrl={props.imageCdnUrl}\n audience={mergedAudience}\n hideDuration={false}\n isPlugin={props.isPlugin}\n showOwner={props.showOwner}\n />\n\n <div className='mt-2'>\n <ThumbnailText\n {...props}\n video={clip}\n appLink={props.getAppLink(clip)}\n />\n </div>\n </div>\n );\n});","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { CanFavouriteFunc, Clip, FavouriteFunc, PresentationAudience, Video, YearGroup } from 'libs/shared/interfaces';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { ClipWidgetItemV2, ClipWidgetItemV2Props } from './ClipWidgetItemV2';\n\nconst namespace = 'shared.playPageClipsV2';\n\ninterface PlayPageClipsProps {\n video: Video | Clip;\n clips: Clip[];\n canViewClips: boolean;\n yearGroups: YearGroup[];\n audiences: PresentationAudience[];\n imageCdnUrl: string;\n setFavourite: FavouriteFunc;\n canFavourite: CanFavouriteFunc;\n analyticsData: HashObject;\n headingRef?: React.MutableRefObject<Map<PlayPageAnchor, HTMLElement>>;\n isPlugin: boolean;\n}\n\nexport function PlayPageClips(props: PlayPageClipsProps): JSX.Element {\n if (!props.canViewClips || !props.clips?.length)\n return <></>;\n\n const parentIsVideo = VideoHelper.isVideo(props.video);\n\n function getAppLink() {\n if (VideoHelper.isVideo(props.video)) {\n return {\n action: Actions.Videos.VIDEO_CLIPS,\n application: AppChannels.VIDEOS,\n args: [ props.video.id, TextHelper.slugify(props.video.name) ]\n };\n }\n return {\n action: Actions.Clips.CLIP_CLIPS,\n application: AppChannels.CLIPS,\n args: [ props.video.id, TextHelper.slugify(props.video.name) ]\n };\n }\n\n const title = LanguageService.getPhrase(\n namespace,\n parentIsVideo ? 'clips' : 'otherClips',\n { count: props.clips.length }\n );\n\n return (\n <section\n className='play-page-section'\n id={PlayPageAnchor.Clips}\n ref={el => {\n (el && props.headingRef?.current) && props.headingRef.current.set(PlayPageAnchor.Clips, el);\n }}\n >\n <FixedWidget<ClipWidgetItemV2Props>\n name={title}\n contents={WidgetContents.ClipsV2}\n collection={props.clips}\n prefetched\n getChildAppLink={(clip: Clip) => {\n return {\n application: AppChannels.CLIPS,\n action: Actions.Clips.PLAY_CLIP,\n args: [ clip.id, TextHelper.slugify(clip.name) ]\n };\n }}\n appLink={getAppLink()}\n childComponent={ClipWidgetItemV2}\n extraChildComponentProps={{\n yearGroups: props.yearGroups,\n audiences: props.audiences,\n imageCdnUrl: props.imageCdnUrl,\n setFavourite: props.setFavourite,\n canFavourite: props.canFavourite,\n isPlugin: props.isPlugin,\n showOwner: true\n }}\n analyticsData={props.analyticsData}\n />\n </section>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"descriptionBorder\":\"YUC62\"};","import * as React from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\nimport { LinkifyHelper } from 'libs/common/react/utils/LinkifyHelper';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { CopyrightDisclaimer } from 'libs/shared/components/copyright-disclaimer/CopyrightDisclaimer';\nimport { ImmersiveReader } from 'libs/shared/components/immersive-reader/ImmersiveReader';\nimport { TagHelper } from 'libs/shared/components/tags/TagHelper';\nimport { TagList } from 'libs/shared/components/tags/TagList';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { hasPPDD } from 'libs/shared/components/video-details/VideoDetailsUtils';\nimport { MINIMUM_GLANCE_HEIGHT } from 'libs/shared/constants/MinimumGlanceHeight';\nimport { TagType } from 'libs/shared/enums/TagType';\nimport { BaseObject, BasePaginatedCollection, Tag, VideoTypes } from 'libs/shared/interfaces';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './video-details.scss';\n\nconst namespace = 'shared.videoDetailsV2';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface CommaListProps {\n label: string;\n items: BasePaginatedCollection<BaseObject>;\n className?: string;\n}\n\nfunction CommaList(props: CommaListProps): React.ReactElement {\n const { label, items, className } = props;\n\n const hasItems = items && items.data && items.data.length;\n\n if (!hasItems)\n return <></>;\n\n const commaSeperated = items.data.map(i => i.name).join(', ');\n\n return (\n <div className={className}>{label}: {commaSeperated}</div>\n );\n}\n\nfunction DetailsSection(props: VideoDetailsWithScrollbarV2Props): React.ReactElement {\n const { video } = props;\n\n if (!VideoHelper.isVideo(video) && !VideoHelper.isClip(video))\n return <></>;\n\n const parentVideo = VideoHelper.getParentVideo(video);\n\n return (\n <div className={video.description ? 'col-md-5 ps-md-3 pt-3 pt-md-0' : 'col-12'}>\n <h2 className='h6 mb-1'><Text phrase='details' /></h2>\n {!!parentVideo.productionYear && (\n <div className='mb-1'>\n <Text phrase='productionYear' options={{ year: parentVideo.productionYear }} />\n </div>\n )}\n <CommaList\n label={getPhrase('productionCompanies', { smartCount: parentVideo.productionCompanies?.data?.length })}\n items={parentVideo.productionCompanies}\n className='mb-1'\n />\n <CommaList\n label={getPhrase('distributors', { smartCount: parentVideo.distributors?.data?.length })}\n items={parentVideo.distributors}\n className='mb-1'\n />\n <CommaList\n label={getPhrase('producers', { smartCount: parentVideo.producers?.data?.length })}\n items={parentVideo.producers}\n className='mb-1'\n />\n <CommaList\n label={getPhrase('directors', { smartCount: parentVideo.directors?.data?.length })}\n items={parentVideo.directors}\n className='mb-1'\n />\n {!!parentVideo.dateBroadcast && (\n <div className='mb-1'>\n <Text phrase='dateBroadcast' options={{ date: DateHelper.format(parentVideo.dateBroadcast, 'DD/MM/YYYY') }} />\n </div>\n )}\n {!!parentVideo.channel && (\n <div className='mb-1'>\n <Text phrase='channel' options={{ channel: parentVideo.channel.name }} />\n </div>\n )}\n {!!(!video._isClickViewCurated?.value && video.dateCreated) && (\n <div className='mb-1'>\n <Text phrase='dateUploaded' options={{ date: DateHelper.format(video.dateCreated, 'DD/MM/YYYY') }} />\n </div>\n )}\n </div>\n );\n}\n\ninterface VideoDetailsWithScrollbarV2Props {\n video: VideoTypes;\n getTagAppLink?: (tag: Tag) => Core.AppLink;\n onLaunchImmersiveReader?: () => void;\n onExitImmersiveReader?: () => void;\n maxHeight?: number;\n suppressInteractivity?: boolean;\n hideTags?: boolean;\n headingRef?: React.MutableRefObject<Map<PlayPageAnchor, HTMLElement>>;\n}\n\nexport function VideoDetailsWithScrollbarV2(props: VideoDetailsWithScrollbarV2Props): React.ReactElement {\n const { video, maxHeight = MINIMUM_GLANCE_HEIGHT } = props;\n\n const parentVideo = VideoHelper.getParentVideo(video);\n\n const showDescription = !!props.video.description;\n\n const showDetails = (\n hasPPDD(props.video) ||\n !!parentVideo.productionYear ||\n !!parentVideo.dateBroadcast ||\n !!parentVideo.channel ||\n !!(video.dateCreated && !video._isClickViewCurated?.value)\n );\n\n if (!showDescription && !showDetails)\n return <></>;\n\n function getTags(): Tag[] {\n if (props.hideTags || VideoHelper.isInteractive(props.video) || !props.video.tags?.data?.length)\n return null;\n\n return props.video.tags?.data?.filter(tag => tag.tagType === TagType.Normal);\n }\n const tags = getTags();\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <section\n id={PlayPageAnchor.VideoDetails}\n ref={el => {\n (el && props.headingRef?.current) && props.headingRef.current.set(PlayPageAnchor.VideoDetails, el);\n }}\n className='play-page-section'\n >\n <div className='rounded border p-3 position-relative'>\n <Scrollbars autoHeight autoHeightMax={maxHeight}>\n <div className='row g-0'>\n {showDescription && (\n <div className={showDetails ? `${styles.descriptionBorder} pe-3 col-md-7` : 'col-12'}>\n <div className='d-flex align-items-center'>\n <h2 className='h6 mb-1'>\n <Text phrase='description' />\n </h2>\n <ImmersiveReader\n text={video.description}\n title={video.name}\n className='ps-2'\n onLaunch={props.onLaunchImmersiveReader}\n onExit={props.onExitImmersiveReader}\n analyticsOptions={{\n location: LocationContext.PlayPage,\n entity: EntityType.Video,\n actionType: UserAction.Click,\n descriptor: ClickDescriptor.LaunchImmersiveReader\n }}\n analyticsData={{ id: video.id, type: 'description' }}\n />\n </div>\n <p className='mb-0' dangerouslySetInnerHTML={{ __html: LinkifyHelper.linkifyText(props.video.description, { nl2br: true }) }} />\n </div>\n )}\n\n {showDetails && (\n <DetailsSection {...props} />\n )}\n </div>\n\n {!!tags?.length && (\n <div className='mt-3'>\n <h2 className='h6 mb-1'><Text phrase='normalTags' /></h2>\n <TagList\n tags={tags}\n {...TagHelper.getTagActionProps(props.getTagAppLink, null, props.suppressInteractivity)}\n className='mt-1'\n />\n </div>\n )}\n\n {VideoHelper.isBroadcast(props.video) && <CopyrightDisclaimer placement='bottom-start' className='d-flex justify-content-start mt-2 mb-n1' />}\n\n </Scrollbars>\n </div>\n </section>\n </LanguageNamespaceContext.Provider>\n );\n}","import { MutableRefObject, useEffect, useRef, useState } from 'react';\nimport * as marked from 'marked';\n\nimport { useEventsServiceSubscribe } from 'libs/common/react/hooks/UseEventsServiceSubscribe';\nimport { EventsService } from 'libs/common/react/services/EventsService';\n\nimport { Clip, Glance, PointOfInterest, Video } from 'libs/shared/interfaces';\n\nimport styles from './video-at-a-glance.scss';\n\nconst POI_LINK_LINE = /\\[\\]\\(cv:\\/\\/poi\\?id=\\d+\\)\\n*/g;\n\nfunction stripPoisFromGlanceContent(glanceContent: string): string {\n return glanceContent.replace(POI_LINK_LINE, '');\n}\n\nfunction getLearningIntentionHTML(glance: Glance): string {\n const learningIntention = stripPoisFromGlanceContent(glance.content);\n\n return marked(learningIntention);\n}\n\nexport function useLearningIntentionMarkdown(\n video: Video,\n hasGlanceData?: boolean\n): string {\n const [ markdownHTML, setMarkdownHTML ] = useState('');\n\n useEffect(() => {\n if (!hasGlanceData)\n return;\n\n const content = getLearningIntentionHTML(video.glance);\n\n setMarkdownHTML(content);\n }, [ video.glance?.content, hasGlanceData ]);\n\n return markdownHTML;\n}\n\nexport function hasGlanceData(video: Video | Clip): boolean {\n return video.glance?.content && video.glance?.format === 'text/markdown';\n}\n\nexport function useHighlightPointOfInterest(\n pointOfInterest: PointOfInterest,\n shouldHighlight: boolean\n): MutableRefObject<HTMLDivElement> {\n const ref = useRef<HTMLDivElement>();\n\n useEventsServiceSubscribe('player:poi:mouseover', onPlayerPoiMouseOver, null, shouldHighlight);\n useEventsServiceSubscribe('player:poi:mouseleave', onPlayerPoiMouseLeave, null, shouldHighlight);\n\n useEffect(() => {\n if (!ref.current || !shouldHighlight)\n return;\n\n ref.current?.addEventListener('mouseover', onGlancePoiMouseOver);\n ref.current?.addEventListener('mouseleave', onGlancePoiMouseLeave);\n\n return () => {\n ref.current?.removeEventListener('mouseover', onGlancePoiMouseOver);\n ref.current?.removeEventListener('mouseleave', onGlancePoiMouseLeave);\n };\n }, [ref.current]);\n\n function onPlayerPoiMouseOver(hoveredPoi: PointOfInterest): void {\n if (!hoveredPoi?.id || pointOfInterest?.id?.toString() !== hoveredPoi?.id?.toString())\n return;\n\n ref.current?.classList.add(styles.highlightPoi);\n }\n\n function onPlayerPoiMouseLeave(): void {\n ref.current?.classList.remove(styles.highlightPoi);\n }\n\n /**\n * `this` will be the element to which the eventListener is bound.\n */\n function onGlancePoiMouseOver(): void {\n if (pointOfInterest)\n EventsService.trigger('glance:poi:mouseover', pointOfInterest);\n }\n\n function onGlancePoiMouseLeave(): void {\n EventsService.trigger('glance:poi:mouseleave');\n }\n\n return ref;\n}","// extracted by mini-css-extract-plugin\nexport default {\"poiEntry\":\"vr6R9\",\"poiText\":\"znHZF\",\"public\":\"v0BZ9\",\"poiTimeStamp\":\"AdKwe\",\"wideBadge\":\"YR2Hh\"};","import React from 'react';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { PointOfInterest } from 'libs/shared/interfaces';\nimport { DurationHelper } from 'libs/shared/utils/DurationHelper';\n\nimport { useHighlightPointOfInterest } from '../VideoAtAGlanceUtilsV2';\n\nimport styles from './points-of-interest-list.scss';\n\ninterface PointOfInterestProps {\n poi: PointOfInterest;\n suppressInteractivity?: boolean;\n onClickPoiItem: (time: number) => void;\n wideBadge?: boolean;\n}\n\nfunction PointOfInterest(props: PointOfInterestProps): JSX.Element {\n const timeStamp = DurationHelper.ToDisplayDuration(props.poi.startTime * 1000);\n\n const ref = useHighlightPointOfInterest(props.poi, !props.suppressInteractivity);\n\n if (props.suppressInteractivity) {\n return (\n <div className={`d-flex ${styles.poiEntry} mb-2`}>\n <span className={`d-flex rounded-pill justify-content-center align-items-center fw-semibold text-info bg-light-blue ${styles.poiTimeStamp} ${props.wideBadge ? styles.wideBadge : ''}`}>{timeStamp}</span>\n <div className={`${styles.public} ms-2`}>{props.poi.description}</div>\n </div>\n );\n }\n\n return (\n <DivButton\n key={props.poi.startTime}\n className={`d-flex ${styles.poiEntry} mb-2 cursor-pointer`}\n onClick={() => props.onClickPoiItem(props.poi.startTime)}\n ref={ref}\n >\n <div className={`d-flex rounded-pill justify-content-center align-items-center fw-semibold text-info bg-light-blue ${styles.poiTimeStamp} ${props.wideBadge ? styles.wideBadge : ''}`}>{timeStamp}</div>\n <div className={`ms-2 ${styles.poiText}`}>{props.poi.description}</div>\n </DivButton>\n );\n}\n\ninterface PointOfInterestListProps{\n pointsOfInterest: PointOfInterest[];\n suppressInteractivity?: boolean;\n onClickPoiItem: (time: number) => void\n}\n\nconst namespace = 'shared.pointsOfInterestList';\n\nexport function PointOfInterestList(props: PointOfInterestListProps) {\n const sortedPointsOfInterest = props.pointsOfInterest.sort((a, b) => a.startTime - b.startTime);\n const hasTimePointOverHours = sortedPointsOfInterest.some(poi => poi.startTime >= 3600);\n\n return (\n <div>\n <h2 className='h6 my-2'><Text namespace={namespace} phrase='heading' /></h2>\n\n <div>\n {sortedPointsOfInterest.map(poi => {\n return (\n <PointOfInterest\n key={poi.startTime}\n poi={poi}\n suppressInteractivity={props.suppressInteractivity}\n onClickPoiItem={props.onClickPoiItem}\n wideBadge={hasTimePointOverHours}\n />\n );\n })}\n\n </div>\n </div>\n );\n}","import * as React from 'react';\nimport CopyToClipboard from 'react-copy-to-clipboard';\nimport Scrollbars from 'react-custom-scrollbars-2';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { PointOfInterestList } from 'libs/shared/components/play-page-v2/glance/points-of-interest-list/PointsOfInterestList';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { TagHelper } from 'libs/shared/components/tags/TagHelper';\nimport { TagList } from 'libs/shared/components/tags/TagList';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { TagType } from 'libs/shared/enums/TagType';\nimport { PointOfInterest, Tag, Video } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { useLearningIntentionMarkdown } from './VideoAtAGlanceUtilsV2';\n\nimport styles from './video-at-a-glance.scss';\n\nconst namespace = 'shared.videoAtAGlanceV2';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst SCROLL_HEIGHT_MAX = 350; // in px\n\ninterface ScrollbarWrapperProps {\n hideScrollbar?: boolean;\n}\n\nfunction ScrollbarWrapper(props: React.PropsWithChildren<ScrollbarWrapperProps>): JSX.Element {\n if (props.hideScrollbar)\n return <>{props.children}</>;\n\n return (\n <div className='rounded border mb-4 bg-white'>\n <Scrollbars\n autoHeight\n autoHeightMax={SCROLL_HEIGHT_MAX}\n >\n <div className='px-3 px-3 pt-3 pb-2'>\n {props.children}\n </div>\n </Scrollbars>\n </div>\n );\n}\n\ninterface VideoAtAGlanceV2Props {\n video: Video;\n pointsOfInterest?: PointOfInterest[];\n suppressInteractivity?: boolean;\n setStartTime?: (time: number) => void;\n getTagAppLink?: (tag: Tag) => Core.AppLink;\n onClickTag?: () => void;\n hideScrollbar?: boolean;\n canViewGlance: boolean;\n}\n\nexport function VideoAtAGlanceV2(props: VideoAtAGlanceV2Props): JSX.Element {\n const learningIntentionMarkdownHTML = useLearningIntentionMarkdown(props.video, props.canViewGlance);\n const [ textToCopy, setTextToCopy ] = React.useState('');\n\n function logUserAction(): void {\n const analyticsData = {\n id: props.video.glance.id,\n videoId: props.video.id,\n videoName: props.video.name,\n learningIntention: textToCopy\n };\n\n const analyticsOptions = {\n actionType: UserAction.Copy,\n entity: EntityType.Glance,\n location: LocationContext.PlayPage\n };\n AnalyticsHelper.logUserAction(analyticsData, analyticsOptions);\n }\n\n function getTags(): Tag[] {\n if (VideoHelper.isInteractive(props.video) || !props.video.tags?.data?.length)\n return null;\n\n return props.video.tags?.data?.filter(tag => tag.tagType === TagType.Pedagogy || tag.tagType === TagType.Skill);\n }\n const tags = getTags();\n\n const ref = React.useRef<HTMLDivElement>(null);\n\n React.useEffect(() => {\n if (ref.current?.innerText)\n setTextToCopy(ref.current.innerText);\n }, [ref.current?.innerText]);\n\n if (!props.canViewGlance)\n return <></>;\n\n function onClickPoiItem(time: number) {\n props.setStartTime(time);\n }\n\n return (\n <section className='play-page-section'>\n <ScrollbarWrapper hideScrollbar={props.hideScrollbar}>\n <h2 className='h6 mb-2'><Text namespace={namespace} phrase='learningIntention' /></h2>\n \n <div className={`mb-3 ${styles.learningIntention}`}>\n <Tooltip title={getPhrase('copy')} spanHack spanHackClassName={styles.icon}>\n <CopyToClipboard text={textToCopy}>\n <SvgContainer\n className='svg-container me-1 cursor-pointer'\n svgName={cvSvgLibrary.Copy}\n size={SvgContainerSize.Small}\n onClick={logUserAction}\n />\n </CopyToClipboard>\n </Tooltip>\n \n <div\n dangerouslySetInnerHTML={{ __html: learningIntentionMarkdownHTML }}\n className='d-inline'\n ref={ref}\n >\n </div>\n </div>\n\n {!!tags?.length && (\n <div className='mb-1'>\n <TagList\n tags={tags}\n {...TagHelper.getTagActionProps(props.getTagAppLink, props.onClickTag, props.suppressInteractivity)}\n className='mt-2'\n />\n </div>\n )}\n\n {!!props.pointsOfInterest.length && (\n <PointOfInterestList\n pointsOfInterest={props.pointsOfInterest}\n suppressInteractivity={props.suppressInteractivity}\n onClickPoiItem={onClickPoiItem}\n />\n )}\n </ScrollbarWrapper>\n </section>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ThumbnailText } from 'libs/shared/components/thumbnails/thumbnail-text/ThumbnailText';\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 { CanFavouriteFunc, FavouriteFunc, InteractiveMetadata, YearGroup } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.interactiveWidgetItemV2';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface InteractiveWidgetItemV2Props extends FixedWidgetItemProps<InteractiveMetadata> {\n imageCdnUrl: string;\n questionsAppLink: Core.AppLink;\n setFavourite?: FavouriteFunc;\n canFavourite?: CanFavouriteFunc;\n yearGroups: YearGroup[];\n isPlugin: boolean;\n showOwner?: boolean;\n}\n\nexport const InteractiveWidgetItemV2 = React.memo(function(props: InteractiveWidgetItemV2Props): JSX.Element {\n const { data: interactive, thumbnailSize, preloadImage } = props;\n\n const questionsAppLink: Core.AppLink = {\n ...props.questionsAppLink,\n args: [props.data.id]\n };\n\n const questionsNumber = interactive._timepoints?.value?.length;\n\n return (\n <div className={`flex-shrink-0 px-1 col-6 col-sm-4`}>\n <VideoThumbnail\n type='static'\n textPosition={ThumbnailTextPosition.Independent}\n video={interactive}\n appLink={props.getAppLink(interactive)}\n imageOptions={{ size: thumbnailSize }}\n preload={preloadImage}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n hideDuration={false}\n imageCdnUrl={props.imageCdnUrl}\n isPlugin={props.isPlugin}\n showOwner={props.showOwner}\n />\n\n <div className='mt-2'>\n <ThumbnailText\n {...props}\n video={interactive}\n appLink={props.getAppLink(interactive)}\n />\n </div>\n\n <div className='mt-1'>\n <AppLink\n appLink={questionsAppLink}\n className='cursor-pointer'\n ariaLabel={`${getPhrase('previewQuestions', { count: questionsNumber, smartCount: questionsNumber })} ${getPhrase('ariaPreview', { name: interactive.name })}`}\n >\n <Text namespace={namespace} phrase='previewQuestions' options={{ count: questionsNumber, smartCount: questionsNumber }}/>\n </AppLink>\n </div>\n\n </div>\n );\n});\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { CanFavouriteFunc, Clip, FavouriteFunc, Interactive, InteractiveMetadata, Video, YearGroup } from 'libs/shared/interfaces';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { InteractiveWidgetItemV2, InteractiveWidgetItemV2Props } from './InteractiveWidgetItemV2';\n\nconst namespace = 'shared.playPageInteractivesV2';\n\ninterface PlayPageInteractivesProps {\n canViewInteractives: boolean;\n video: Video | Clip;\n interactives: InteractiveMetadata[];\n imageCdnUrl: string;\n analyticsData: HashObject;\n yearGroups: YearGroup[];\n setFavourite: FavouriteFunc;\n canFavourite: CanFavouriteFunc;\n isPlugin: boolean;\n headingRef?: React.MutableRefObject<Map<PlayPageAnchor, HTMLElement>>;\n}\n\nexport function PlayPageInteractives(props: PlayPageInteractivesProps): JSX.Element {\n if (!props.canViewInteractives || !props.interactives?.length)\n return <></>;\n\n function getAppLink() {\n if (VideoHelper.isVideo(props.video))\n return {\n action: Actions.Videos.VIDEO_INTERACTIVES,\n application: AppChannels.VIDEOS,\n args: [ props.video.id, TextHelper.slugify(props.video.name) ]\n };\n\n return {\n action: Actions.Clips.CLIP_INTERACTIVES,\n application: AppChannels.CLIPS,\n args: [ props.video.id, TextHelper.slugify(props.video.name) ]\n };\n }\n\n const title = LanguageService.getPhrase(namespace, 'interactives', { count: props.interactives.length });\n \n return (\n <section className='play-page-section'\n id={PlayPageAnchor.Interactives}\n ref={el => {\n (el && props.headingRef?.current) && props.headingRef.current.set(PlayPageAnchor.Interactives, el);\n }}\n >\n <FixedWidget<InteractiveWidgetItemV2Props>\n name={title}\n contents={WidgetContents.InteractivesV2}\n collection={props.interactives}\n prefetched\n getChildAppLink={(interactive: Interactive) => {\n return {\n application: AppChannels.INTERACTIVES,\n action: Actions.Interactives.VIEW_INTERACTIVE,\n args: [ interactive.id, TextHelper.slugify(interactive.name) ]\n };\n }}\n appLink={getAppLink()}\n childComponent={InteractiveWidgetItemV2}\n extraChildComponentProps={{\n yearGroups: props.yearGroups,\n setFavourite: props.setFavourite,\n canFavourite: props.canFavourite,\n imageCdnUrl: props.imageCdnUrl,\n questionsAppLink: {\n application: AppChannels.INTERACTIVES,\n action: Actions.Interactives.PREVIEW_QUESTIONS\n },\n isPlugin: props.isPlugin,\n showOwner: true\n }}\n analyticsData={props.analyticsData}\n />\n </section>\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 { EntityType, LocationContext, SignUpDescriptors, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { Clip, Link, Resource, Video } from 'libs/shared/interfaces';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { DownloadHelper } from 'libs/shared/utils/DownloadHelper';\n\nimport { ResourceWidgetItemV2, ResourceWidgetItemV2Props } from './ResourceWidgetItemV2';\n\nconst namespace = 'shared.playPageResources';\n\nfunction getResources(\n video: Video,\n isLearner: boolean\n): Array<Resource | Link> {\n const resources = video.resources?.data ?? [];\n const links = video.links?.data ?? [];\n\n if (!isLearner)\n return [ ...resources, ...links ];\n\n const filteredResources = resources.filter(r => {\n return [ 'additional-materials', 'student-activity' ].includes(r.metadata?.resourceType);\n });\n\n return [ ...filteredResources, ...links ];\n}\n\ninterface PlayPageResourcesProps {\n video: Video | Clip;\n imageCdnUrl: string;\n canViewResources: boolean;\n getAppLink: (resource: Resource) => Core.AppLink;\n analyticsData: HashObject;\n resourceThumbnailFallbackUrl: string;\n headingRef?: React.MutableRefObject<Map<PlayPageAnchor, HTMLElement>>;\n}\n\nexport function PlayPageResources(props: PlayPageResourcesProps): JSX.Element {\n const { hasPermissions } = usePermissions();\n\n function onClickDownload(resource: Resource): void {\n DownloadHelper.downloadResource(\n resource,\n props.analyticsData,\n { location: LocationContext.PlayPage, actionType: UserAction.Download, entity: EntityType.Resource }\n );\n }\n\n const resources = getResources(props.video, hasPermissions(PermissionName.StudentExperience));\n const title = LanguageService.getPhrase(namespace, 'resources', { count: resources.length });\n\n if (!resources.length)\n return <></>;\n\n return (\n <section\n id={PlayPageAnchor.Resources}\n className='play-page-section'\n ref={el => {\n (el && props.headingRef?.current) && props.headingRef.current.set(PlayPageAnchor.Resources, el);\n }}\n >\n <FixedWidget<ResourceWidgetItemV2Props>\n name={title}\n contents={WidgetContents.PlayPageResourcesV2}\n collection={resources}\n prefetched\n childComponent={ResourceWidgetItemV2}\n extraChildComponentProps={{\n imageCdnUrl: props.imageCdnUrl,\n imageErrorFallbackUrl: props.resourceThumbnailFallbackUrl,\n actionBehaviour: props.canViewResources ? 'normal' : 'public',\n location: 'play-page',\n titlePosition: 'below',\n onClickDownload: props.canViewResources ? onClickDownload : null\n }}\n getChildAppLink={props.getAppLink}\n analyticsOptions={(() => {\n if (props.canViewResources)\n return {};\n \n return {\n workflowPhase: WorkflowPhase.Start,\n descriptor: SignUpDescriptors.SignUp\n };\n })()}\n analyticsData={props.analyticsData}\n />\n </section>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"imageStyle\":\"bYRn8\",\"item\":\"CjuxU\",\"dashboard\":\"IuRN0\",\"playPage\":\"VdJvp\",\"aspectRatio\":\"QK8Jh\",\"outerContainer\":\"eiC_H\",\"innerContainer\":\"huIRg\",\"actions\":\"FsIJm\",\"titleBelow\":\"DpeSr\",\"thumbnailContainer\":\"ZbalL\",\"titleAbove\":\"PwOSX\",\"teacherPack\":\"ZHAEj\",\"text\":\"k3ei6\",\"hoverState\":\"BLrWL\",\"atomGuide\":\"Qz8JE\",\"studentActivity\":\"qNspk\",\"additionalMaterials\":\"R0huw\",\"userUploaded\":\"H_zGf\",\"imageTypeResource\":\"AgeLb\",\"download\":\"DKneu\"};","import React from 'react';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, EntityType, 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 { ResourceThumbnail } from 'libs/shared/components/resource-thumbnail/ResourceThumbnail';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { TitleSubText } from 'libs/shared/components/title-sub-text/TitleSubText';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { TypeBadge } from 'libs/shared/components/type-badge/TypeBadge';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { SeoConstants } from 'libs/shared/constants/SeoConstants';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ResourceFileType } from 'libs/shared/enums/ResourceFileType';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Link, Resource, ResourceType } from 'libs/shared/interfaces';\nimport { ImageOptions } from 'libs/shared/utils/ImageHelper';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\nimport { ResourceHelper } from 'libs/shared/utils/ResourceHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './resource-widget-item.scss';\n\nfunction getColour(resourceType?: ResourceType): string {\n switch (resourceType) {\n case 'atom-guide':\n return styles.atomGuide;\n case 'student-activity':\n return styles.studentActivity;\n case 'teacher-pack':\n return styles.teacherPack;\n case 'additional-materials':\n return styles.additionalMaterials;\n default:\n return styles.userUploaded;\n }\n}\n\nexport function useCanPreviewResource(data: Resource | Link, actionBehaviour: 'normal' | 'public'): boolean {\n const breakpoints = useBreakpoints();\n\n /**\n * When viewing publicly, the resource applink will\n * prompt the user to sign-up (not preview the underlying resource)\n */\n if (actionBehaviour === 'public')\n return true;\n\n if (breakpoints.xs || breakpoints.sm)\n return false;\n\n if (data.type !== 'resource')\n return false;\n \n // Require metadata\n if (!('metadata' in data))\n return false;\n\n // We can preview images\n if (data.metadata.type === ResourceFileType.Image)\n return true;\n\n // If we are a pdf and have a url\n if (data.metadata.type === ResourceFileType.Pdf)\n return !!data.url;\n\n // If we have a pdf assoc\n return !!data.pdf?.url;\n}\n\ninterface ResourceTheme {\n containerClass?: string;\n thumbnailContainerClass?: string;\n}\n\nexport interface ResourceTileProps {\n data: Resource | Link;\n imageCdnUrl: string;\n imageErrorFallbackUrl?: string;\n theme?: ResourceTheme;\n\n titlePosition: 'above' | 'below' | 'none';\n hideTypeBadge?: boolean;\n onClickDownload?: (resource: Resource) => void;\n applyHoverState?: boolean;\n preloadImage: boolean;\n actionBehaviour?: 'normal' | 'public';\n dynamicRatioImageOptions?: ImageOptions;\n}\n\nResourceTileV2.defaultProps = {\n preloadImage: true,\n actionBehaviour: 'normal'\n};\n\n/**\n * This component intentionally doesn't contain an appLink/download link\n * so that the resource download behaviour can be handled differently depending\n * on where this is rendered (e.g. primary play page vs embedded player)\n */\nexport function ResourceTileV2(props: ResourceTileProps): JSX.Element {\n let metadata = null;\n\n if ('metadata' in props.data) {\n metadata = props.data.metadata;\n }\n\n const isResource = MasterTypeHelper.isType<Resource>(props.data, MasterType.Resource);\n\n function getInnerContainerClass(resourceType: ResourceType): string {\n let baseClass = `\n d-flex flex-column align-items-center justify-content-end rounded-3 h-100\n position-relative ${getColour(resourceType)} ${styles.innerContainer}`;\n\n if (props.theme?.containerClass) {\n baseClass += ` ${props.theme.containerClass}`;\n } else {\n baseClass += ` pt-3 px-3`;\n }\n\n if (props.applyHoverState) {\n baseClass += ` ${styles.hoverState}`;\n }\n\n return baseClass;\n }\n\n function onDownload() {\n if (!MasterTypeHelper.isResource(props.data))\n return;\n\n if (typeof props.onClickDownload === 'function') {\n props.onClickDownload(props.data);\n }\n }\n\n return (\n <>\n <div className={styles.aspectRatio}>\n <div className={styles.outerContainer}>\n <div className={getInnerContainerClass(metadata?.resourceType)}>\n {props.titlePosition === 'above' && (\n <Tooltip title={props.data.name}>\n <h3 className={`text-center text-break h5 mb-3 ${styles.text}`}>\n <span className='clamp-1'>{props.data.name}</span>\n </h3>\n </Tooltip>\n )}\n\n <div className={`\n ${props.theme?.thumbnailContainerClass ?? ''} w-75 overflow-hidden \n ${styles.thumbnailContainer} ${props.titlePosition === 'above' ? styles.titleAbove : ''} \n ${styles.imageStyle}\n `}>\n <ResourceThumbnail\n resource={props.data}\n imageCdnUrl={props.imageCdnUrl}\n imageErrorFallbackUrl={props.imageErrorFallbackUrl}\n preloadImage={props.preloadImage}\n dynamicRatioImageOptions={props.dynamicRatioImageOptions}\n />\n </div>\n\n {isResource && props.onClickDownload && props.actionBehaviour === 'normal' && (\n <div className={styles.actions}>\n <DivButton\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n onDownload();\n }}\n className={`${styles.download} d-flex align-items-center justify-content-center`}\n >\n <SvgContainer svgName={cvSvgLibrary.Download} />\n </DivButton>\n </div>\n )}\n\n {!props.hideTypeBadge && isResource && (\n <TypeBadge typeId={MasterType.Resource} />\n )}\n </div>\n </div>\n </div>\n {props.titlePosition === 'below' && (\n <div className={`mt-1 ${styles.titleBelow}`}>\n {(\n MasterTypeHelper.isType<Resource>(props.data, MasterType.Resource) &&\n !!props.data?.metadata?.resourceType\n ) && (\n <TitleSubText>\n {ResourceHelper.getResourceTypeName(props.data.metadata.resourceType)}\n </TitleSubText>\n )}\n\n <h3 className='h6 clamp-2'>\n {props.data.name}\n </h3>\n </div>\n )}\n </>\n );\n}\n\nexport interface ResourceWidgetItemV2Props extends ResourceTileProps, FixedWidgetItemProps<Resource | Link> {\n location: 'play-page' | 'dashboard';\n}\n\nexport const ResourceWidgetItemV2 = React.memo(function(props: ResourceWidgetItemV2Props): JSX.Element {\n // Mobile is not allowed to preview\n const canPreview = useCanPreviewResource(props.data, props.actionBehaviour);\n\n function getLocationClass(): string {\n if (props.location === 'play-page')\n return styles.playPage;\n\n return styles.dashboard;\n }\n\n const analyticsData = { ...props.analyticsData, ...props.data };\n\n const analyticsOptions: AnalyticsOptions = {\n ...props.analyticsOptions,\n actionType: UserAction.Click,\n entity: props.data.typeId === MasterType.Resource ? EntityType.Resource : EntityType.Link\n };\n\n function logAction(): void {\n AnalyticsHelper.logUserAction(analyticsData, analyticsOptions);\n }\n\n const tileProps: ResourceTileProps = {\n ...props,\n // Apply the hover state if we have a url or the resource can be previewed\n applyHoverState: canPreview || !!props.data.url\n };\n\n return (\n <div className={`px-1 flex-shrink-0 ${styles.item} ${getLocationClass()} ${SeoConstants.RESOURCE_ITEM_SELECTOR}`}>\n {(() => {\n const className = `d-block no-decoration`;\n\n // Handle resource links\n if (props.data.type === 'link') {\n return (\n <a href={props.data.url} target='_blank' className={className} onClick={logAction}>\n <ResourceTileV2 {...tileProps} />\n </a>\n );\n }\n\n if (canPreview) {\n /**\n * Previewing resources in a public context will always display the sign-up popup, so there \n * will never be a full URL. For SEO purposes, we deliberately use a span over an anchor\n * to ensure we're not creating self-referencing elements that will burn crawl budget.\n */\n if (props.actionBehaviour === 'public') {\n return (\n <div className={`${className} cursor-pointer d-inline`} onClick={() => {\n logAction();\n AppLinkHelper.trigger(props.getAppLink(props.data));\n }}>\n <ResourceTileV2 {...tileProps} />\n </div>\n );\n }\n\n return (\n <AppLink\n appLink={props.getAppLink(props.data)}\n className={className}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <ResourceTileV2 {...tileProps} />\n </AppLink>\n );\n }\n\n // URLs cannot be previewed\n if (props.data.url) {\n return (\n <a href={props.data.url} className={className} onClick={logAction}>\n <ResourceTileV2 {...tileProps} />\n </a>\n );\n }\n\n // Theres no url, so don't render an <a>\n return (\n <div className={className}>\n <ResourceTileV2 {...tileProps} />\n </div>\n );\n })()}\n </div>\n );\n});","// extracted by mini-css-extract-plugin\nexport default {\"itemsWrapper\":\"m6mGm\",\"anchorWrapper\":\"QptZj\",\"default\":\"_AZa8\",\"selectedItem\":\"Nuiel\",\"disabled\":\"WIzWJ\",\"floatIcon\":\"ARudn\",\"arrowIcon\":\"tEF5Q\",\"listIcon\":\"Ql2wi\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { ScrollHelper } from 'libs/common/backbone/utils/ScrollHelper';\n\nimport { EntityType, HashObject, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\n\nimport styles from './table-of-contents-list.scss';\n\nexport interface TableOfContentsItem<T=string> {\n name: string;\n id: T;\n}\n\ninterface TableOfContentsProps<T> {\n items: TableOfContentsItem<T>[];\n activeId: string;\n appLink?: Core.AppLink;\n analyticsData?: HashObject;\n setControlledId: (arg: string) => void;\n // set to true if the TOC is controlled by a local state rather than query params\n localState?: boolean;\n getAppLink?: (args: TableOfContentsItem<T>) => Core.AppLink;\n onItemClick?: (args: TableOfContentsItem<T>) => void;\n}\n\nexport function TableOfContentsList<T extends string>(props: TableOfContentsProps<T>): JSX.Element {\n const analyticsOptions = {\n actionType: UserAction.Click,\n entity: EntityType.Widget,\n location: LocationContext.TableOfContents\n };\n\n function onItemSelect(item: TableOfContentsItem<T>) {\n ScrollHelper.preventScrollTop();\n props.setControlledId(item.id);\n \n props.onItemClick?.(item);\n \n setTimeout(() => document.getElementById(item.id)?.focus());\n }\n\n return (\n <div className={`${styles.itemsWrapper}`}>\n {props.items.map((item, idx) => {\n if (props.localState) {\n return (\n <DivButton\n key={item.id}\n className={`${styles.anchorWrapper} ${props.activeId === item.id ? styles.selectedItem : ''}`}\n onClick={() => {\n onItemSelect(item);\n }}\n >\n <div className={`${!props.activeId && idx === 0 ? styles.default : ''} `}>\n {item.name}\n </div>\n </DivButton>\n );\n }\n\n return (\n <AppLink\n key={item.id}\n appLink={props.getAppLink(item)}\n appLinkOptions={{ replace: true }}\n className={`${styles.anchorWrapper} ${props.activeId === item.id ? styles.selectedItem : ''}`}\n onClick={() => {\n onItemSelect(item);\n }}\n analyticsData={{\n ...props.analyticsData,\n id: item.id,\n name: item.name\n }}\n analyticsOptions={analyticsOptions}\n >\n <div className={`${!props.activeId && idx === 0 ? styles.default : ''} `}>\n {item.name}\n </div>\n </AppLink>\n );\n })}\n </div>\n );\n}","import React from 'react';\n\ntype TableOfContentsActiveOption = {\n setActiveId: (id: string) => void;\n headingElements: Element[];\n controlledId?: string;\n setControlledId?: (arg: string) => void;\n}\n\nlet timer: number;\n\nexport const useTableOfContentsActiveHeading = (\n { setActiveId, headingElements, controlledId, setControlledId }: TableOfContentsActiveOption\n) => {\n const scrollPositionRef = React.useRef(0);\n\n React.useEffect(() => {\n const callback = (headings: IntersectionObserverEntry[]) => {\n headings.forEach(heading => {\n if (controlledId) {\n setActiveId(controlledId);\n // can use scrollEnd event when the new event type is supported\n timer = window.setTimeout(() => {\n setControlledId('');\n }, 800);\n return;\n }\n if (heading.isIntersecting) {\n setActiveId(heading.target.id);\n scrollPositionRef.current = window.scrollY;\n } else {\n const scrollDistance = scrollPositionRef.current - window.scrollY;\n const isScrollingUp = scrollDistance > 0;\n const curIndex = headingElements.findIndex(h => h.id === heading.target.id);\n const prevHeading = headingElements[curIndex - 1];\n if (isScrollingUp && prevHeading?.id) {\n setActiveId(prevHeading?.id);\n }\n }\n });\n };\n\n const observer = new IntersectionObserver(callback, {\n // rootMargin top: same as the cv-nav-height\n rootMargin: '-67px 0px -80% 0px'\n });\n\n headingElements.forEach(element => observer.observe(element));\n\n return () => {\n timer && window.clearTimeout(timer);\n observer.disconnect();\n };\n }, [ setActiveId, headingElements.length, controlledId ]);\n};\n\n","import { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, EntityType, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { Resource } from '../interfaces';\n\nlet downloadRef: HTMLIFrameElement = null;\n\nexport const DownloadHelper = {\n getVideoDownloadUrl(downloadProxyUrl: string, token: string): string {\n return UrlHelper.safeUrlConcat(UrlHelper.makeHttps(downloadProxyUrl), `/download?token=${token}`);\n },\n\n downloadResource(\n resource: Resource,\n analyticsData: HashObject,\n analyticsOptions: AnalyticsOptions\n ): void {\n let iframe = downloadRef;\n\n if (!downloadRef) {\n iframe = downloadRef = document.createElement('iframe');\n document.body.appendChild(iframe);\n\n iframe.style.display = 'none';\n }\n\n iframe.src = resource.url;\n\n AnalyticsHelper.logUserAction({\n id: resource?.id,\n name: resource?.name,\n resourceType: resource?.metadata?.resourceType,\n ...analyticsData\n }, {\n actionType: UserAction.Download,\n entity: EntityType.Resource,\n workflowPhase: WorkflowPhase.Complete,\n ...analyticsOptions\n });\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"qA4yj\",\"aside\":\"j28IY\",\"collapse\":\"sFoPk\",\"iconContainer\":\"PYyBV\",\"arrowIcon\":\"MTodB\",\"listIcon\":\"W76p8\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { PortalHelper } from 'libs/common/react/utils/PortalHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, HashObject, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { TableOfContentsList } from 'libs/shared/components/table-of-contents-list/TableOfContentsList';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { ContextService } from 'libs/shared/services/ContextService';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { PLAY_PAGE_TOC_PORTAL_ID } from 'shared/layouts/teacher-layout/TeacherLayoutComponent';\n\nimport styles from './table-of-contents.scss';\n\nconst namespace = 'shared.playPage';\n\nexport interface TableOfContentsItem {\n name: string;\n id: PlayPageAnchor;\n}\n\ninterface TableOfContentsProps {\n items: TableOfContentsItem[];\n activeId: string;\n appLink?: Core.AppLink;\n analyticsData?: HashObject;\n setControlledId: (arg: string) => void;\n isExpanded: boolean;\n setIsExpanded: (arg: boolean) => void;\n showInSide: boolean;\n}\n\nfunction TableOfContentsIcon(props: TableOfContentsProps) {\n function logUserAction() {\n const analyticsOptions = {\n actionType: !props.isExpanded ? UserAction.Open : UserAction.Hide,\n entity: EntityType.TableOfContents,\n location: LocationContext.PlayPage\n };\n\n AnalyticsHelper.logUserAction(props.analyticsData, analyticsOptions);\n }\n\n function onClickIcon() {\n props.setIsExpanded(!props.isExpanded);\n logUserAction();\n }\n\n return (\n <div className='d-flex justify-content-end'>\n <div className={styles.container}>\n <div className={`${styles.iconContainer}`} >\n <IconButton\n className={`btn btn-outline-dark ${styles.listIcon}`}\n svgName={cvSvgLibrary.TableOfContents}\n onClick={onClickIcon}\n />\n \n <IconButton\n className={`btn btn-outline-dark ${styles.arrowIcon}`}\n svgName={!props.isExpanded ? cvSvgLibrary.ExpandLeft : cvSvgLibrary.CollapseRight}\n onClick={onClickIcon}\n />\n </div>\n </div>\n </div>\n );\n}\n\nfunction TableOfContents(props: TableOfContentsProps) {\n function logUserAction() {\n const analyticsOptions = {\n actionType: UserAction.Hide,\n entity: EntityType.TableOfContents,\n location: LocationContext.PlayPage\n };\n\n AnalyticsHelper.logUserAction(props.analyticsData, analyticsOptions);\n }\n\n function getAppLink(item: any): Core.AppLink {\n const currentAppLink = ContextService.getCurrentRoute().appLink;\n\n const params: HashObject = currentAppLink.params\n ? { ...(currentAppLink.params as HashObject) }\n : {};\n\n params.tocId = item.id;\n\n return {\n ...currentAppLink,\n params\n };\n }\n\n function onClickTableOfContentsHeading() {\n if (!props.showInSide) {\n // in mobile version, collapse once user hit the TOC item\n props.setIsExpanded(false);\n }\n }\n\n return (\n <div className={!props.showInSide ? 'd-inline-flex gap-1' : ''}>\n <aside className={`${styles.aside} position-relative ${!props.showInSide ? 'px-3 pt-3 pb-2 border border-dark rounded-1 bg-white' : 'pe-1 pt-1 '}`}>\n <div className={styles.container}>\n {props.showInSide && (\n <IconButton\n className={`btn position-absolute ${styles.collapse}`}\n svgName={cvSvgLibrary.CollapseRight}\n onClick={() => {\n props.setIsExpanded(false);\n logUserAction();\n }}\n />\n )}\n <h2 className='h5'><Text namespace={namespace} phrase='tocHeading' /></h2>\n \n <TableOfContentsList\n items={props.items}\n activeId={props.activeId}\n getAppLink={getAppLink}\n setControlledId={props.setControlledId}\n analyticsData={props.analyticsData}\n onItemClick={() => onClickTableOfContentsHeading()}\n />\n </div>\n \n </aside>\n {/* in mobile version, always show icon on the right */}\n {!props.showInSide && <TableOfContentsIcon {...props}/>}\n </div>\n );\n}\n\nexport function TableOfContentsContainer(props: TableOfContentsProps): JSX.Element {\n return (\n <>\n {PortalHelper.renderInPortalIfExists(\n props.isExpanded\n ? <TableOfContents {...props} />\n : <TableOfContentsIcon {...props}/>,\n document.getElementById(PLAY_PAGE_TOC_PORTAL_ID)\n )}\n </>\n );\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Clip, InteractiveMetadata, Resource } from 'libs/shared/interfaces';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\n\ninterface SectionHeadingOptions{\n clips: Clip[];\n interactives: InteractiveMetadata[];\n resources: Resource[];\n isPlayClipPage?: boolean;\n}\n\nconst namespace = 'shared.play';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport const PlayPageUtils = {\n getSectionHeading(id: PlayPageAnchor, options: SectionHeadingOptions) {\n switch (id) {\n case PlayPageAnchor.Resources:\n return getPhrase('resourcesHeading', { count: options.resources.length });\n\n case PlayPageAnchor.Clips:\n if (options.isPlayClipPage)\n return getPhrase('otherClipsHeading', { count: options.clips.length - 1 });\n return getPhrase('clipsHeading', { count: options.clips.length });\n\n case PlayPageAnchor.Interactives:\n return getPhrase('interactivesHeading', { count: options.interactives.length });\n\n case PlayPageAnchor.Video:\n return getPhrase('videoHeading');\n\n case PlayPageAnchor.VideoDetails:\n return getPhrase('videoDetailsHeading');\n\n case PlayPageAnchor.RelatedVideos:\n return getPhrase('upNextHeading');\n \n case PlayPageAnchor.CurriculumLinks:\n return getPhrase('curriculumLinksHeading');\n \n case PlayPageAnchor.ClippedFrom:\n return getPhrase('clippedFromHeading');\n\n default:\n return '';\n }\n }\n\n};","import React from 'react';\n\nimport { LocalStorageHelper } from 'libs/common/backbone/utils/LocalStorageHelper';\n\nimport { useShouldShowSideTableOfContents } from 'shared/views/play/v2/hooks/useShouldShowTableOfContents';\n\nconst PLAY_PAGE_TOC_EXPANDED = 'play-page-toc-expanded';\n\nexport function usePlayPageTableOfContent(tocId: string) {\n const showInSide = useShouldShowSideTableOfContents();\n\n const localValue = LocalStorageHelper.get(PLAY_PAGE_TOC_EXPANDED) !== false;\n const tocDefaultExpanded = !showInSide ? false : localValue;\n\n const [ controlledId, setControlledId ] = React.useState(tocId || '');\n const [ tableOfContentsActiveId, setTableOfContentsActiveId ] = React.useState<string>('');\n const [ tableOfContentsExpanded, setTableOfContentsExpanded ] = React.useState(tocDefaultExpanded);\n \n React.useEffect(() => {\n if (!showInSide) {\n // automatically collpase on mobile version\n setTableOfContentsExpanded(false);\n } else {\n setTableOfContentsExpanded(localValue);\n }\n }, [showInSide]);\n\n function onToggleTableOfContents() {\n setTableOfContentsExpanded(!tableOfContentsExpanded);\n LocalStorageHelper.set(PLAY_PAGE_TOC_EXPANDED, !tableOfContentsExpanded);\n }\n\n return {\n controlledId,\n setControlledId,\n tableOfContentsExpanded,\n tableOfContentsActiveId,\n setTableOfContentsActiveId,\n onToggleTableOfContents\n };\n}","import { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\n\nexport const PLAY_PAGE_SECTIONS_ORDER = [\n PlayPageAnchor.Video,\n PlayPageAnchor.CurriculumLinks,\n PlayPageAnchor.Resources,\n PlayPageAnchor.Interactives,\n PlayPageAnchor.Clips,\n PlayPageAnchor.VideoDetails,\n PlayPageAnchor.ClippedFrom,\n PlayPageAnchor.RelatedVideos\n];\n\nexport const PLAY_PAGE_SECTIONS_ORDER_NO_GLANCE = [\n PlayPageAnchor.Video,\n PlayPageAnchor.VideoDetails,\n PlayPageAnchor.CurriculumLinks,\n PlayPageAnchor.Resources,\n PlayPageAnchor.Interactives,\n PlayPageAnchor.Clips,\n PlayPageAnchor.ClippedFrom,\n PlayPageAnchor.RelatedVideos\n];","import React from 'react';\n\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\n\nimport { PLAY_PAGE_SECTIONS_ORDER, PLAY_PAGE_SECTIONS_ORDER_NO_GLANCE } from 'shared/constants/PlayPageSectionsOrder';\n\nexport function useSectionHeadings(hasGlance: boolean) {\n const headingRef = React.useRef<Map<PlayPageAnchor, HTMLElement>>(new Map());\n const headingElements = (hasGlance ? PLAY_PAGE_SECTIONS_ORDER : PLAY_PAGE_SECTIONS_ORDER_NO_GLANCE).map(id => {\n return headingRef.current.get(id);\n }).filter(Boolean);\n\n return { headingRef, headingElements };\n}","import { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\n// returns boolean value for if we should show the TOC on the side\nexport function useShouldShowSideTableOfContents(): boolean {\n const breakpoints = useBreakpoints();\n const shouldShowSideTableOfContents = breakpoints.lg || breakpoints.xl || breakpoints.xxl;\n return shouldShowSideTableOfContents;\n}","// extracted by mini-css-extract-plugin\nexport default {\"learningIntention\":\"MHM6O\",\"highlightPoi\":\"U7Q6x\",\"icon\":\"H1xbT\"};"],"names":["PortalHelper","renderInPortalIfExists","component","portalContainer","createPortal","getPhrase","BreadcrumbItem","props","ref","breadcrumb","name","appLink","active","withBackIcon","className","svgName","size","S","Breadcrumbs","breadcrumbs","isMobile","length","collapse","setCollapse","shouldFocus","setShouldFocus","expandRef","characterLength","reduce","prev","next","current","focus","first","secondLast","last","rest","slice","onClick","map","idx","key","PartialBreadcrumbs","numItems","style","height","width","dangerouslySetInnerHTML","__html","namespace","CONTAINER_HEIGHT","CopyrightDisclaimer","isHovering","Text","phrase","Overlay","target","show","placement","overflowPlacement","document","documentElement","clientHeight","getBoundingClientRect","bottom","ClipWidgetItemV2","clip","data","thumbnailSize","preloadImage","getAppLink","mergedAudience","subjectPresentationAudiences","audiences","VideoThumbnail","type","textPosition","ThumbnailTextPosition","video","imageOptions","preload","analyticsData","analyticsOptions","setFavourite","canFavourite","imageCdnUrl","audience","hideDuration","isPlugin","showOwner","ThumbnailText","PlayPageClips","canViewClips","clips","parentIsVideo","VideoHelper","title","LanguageService","count","id","PlayPageAnchor","el","headingRef","set","contents","WidgetContents","collection","prefetched","getChildAppLink","application","action","args","TextHelper","childComponent","extraChildComponentProps","yearGroups","CommaList","label","items","commaSeperated","i","join","DetailsSection","parentVideo","description","productionYear","options","year","smartCount","productionCompanies","distributors","producers","directors","dateBroadcast","date","DateHelper","channel","_isClickViewCurated","value","dateCreated","VideoDetailsWithScrollbarV2","maxHeight","showDescription","showDetails","tags","hideTags","filter","tag","tagType","TagType","getTags","autoHeight","autoHeightMax","ImmersiveReader","text","onLaunch","onLaunchImmersiveReader","onExit","onExitImmersiveReader","location","entity","actionType","descriptor","LinkifyHelper","nl2br","TagList","TagHelper","getTagAppLink","suppressInteractivity","POI_LINK_LINE","useLearningIntentionMarkdown","hasGlanceData","useState","markdownHTML","setMarkdownHTML","useEffect","content","glance","learningIntention","replace","format","useHighlightPointOfInterest","pointOfInterest","shouldHighlight","useRef","onGlancePoiMouseOver","onGlancePoiMouseLeave","hoveredPoi","toString","classList","add","remove","addEventListener","removeEventListener","PointOfInterest","timeStamp","DurationHelper","poi","startTime","wideBadge","DivButton","onClickPoiItem","PointOfInterestList","sortedPointsOfInterest","pointsOfInterest","sort","a","b","hasTimePointOverHours","some","SCROLL_HEIGHT_MAX","ScrollbarWrapper","hideScrollbar","children","VideoAtAGlanceV2","learningIntentionMarkdownHTML","canViewGlance","textToCopy","setTextToCopy","innerText","Tooltip","spanHack","spanHackClassName","SvgContainer","videoId","videoName","AnalyticsHelper","onClickTag","time","setStartTime","InteractiveWidgetItemV2","interactive","questionsAppLink","questionsNumber","_timepoints","ariaLabel","PlayPageInteractives","canViewInteractives","interactives","PlayPageResources","hasPermissions","resources","isLearner","links","filteredResources","r","includes","metadata","resourceType","getResources","imageErrorFallbackUrl","resourceThumbnailFallbackUrl","actionBehaviour","canViewResources","titlePosition","onClickDownload","resource","workflowPhase","SignUp","useCanPreviewResource","breakpoints","useBreakpoints","xs","sm","ResourceFileType","url","pdf","ResourceTileV2","isResource","MasterTypeHelper","MasterType","baseClass","getColour","theme","containerClass","applyHoverState","getInnerContainerClass","thumbnailContainerClass","ResourceThumbnail","dynamicRatioImageOptions","e","preventDefault","stopPropagation","hideTypeBadge","TypeBadge","typeId","TitleSubText","ResourceHelper","defaultProps","ResourceWidgetItemV2","canPreview","logAction","tileProps","SeoConstants","href","AppLink","TableOfContentsList","onItemSelect","item","ScrollHelper","setControlledId","onItemClick","setTimeout","getElementById","localState","activeId","appLinkOptions","timer","useTableOfContentsActiveHeading","setActiveId","headingElements","controlledId","scrollPositionRef","observer","IntersectionObserver","headings","forEach","heading","window","isIntersecting","scrollY","isScrollingUp","curIndex","findIndex","h","prevHeading","rootMargin","element","observe","clearTimeout","disconnect","downloadRef","DownloadHelper","getVideoDownloadUrl","downloadProxyUrl","token","downloadResource","iframe","createElement","body","appendChild","display","src","TableOfContentsIcon","onClickIcon","setIsExpanded","isExpanded","IconButton","TableOfContents","showInSide","currentAppLink","ContextService","params","tocId","TableOfContentsContainer","PlayPageUtils","getSectionHeading","isPlayClipPage","PLAY_PAGE_TOC_EXPANDED","usePlayPageTableOfContent","localValue","tocDefaultExpanded","tableOfContentsActiveId","setTableOfContentsActiveId","tableOfContentsExpanded","setTableOfContentsExpanded","onToggleTableOfContents","PLAY_PAGE_SECTIONS_ORDER","PLAY_PAGE_SECTIONS_ORDER_NO_GLANCE","useSectionHeadings","hasGlance","Map","get","Boolean","useShouldShowSideTableOfContents","lg","xl","xxl"],"sourceRoot":""}