@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/2142-c46ca4050f-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-description/video-description.scss","file:///app/packages/libs/shared/src/components/play-page-v2/details/video-description/VideoDescription.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/useExpandableTextButton.ts","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 {\"container\":\"G5zMm\",\"collapsed\":\"kkd1X\",\"seeMore\":\"DS4QF\"};","import React from 'react';\n\nimport { LinkifyHelper } from 'libs/common/react/utils/LinkifyHelper';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useExpandableTextButton } from 'libs/shared/hooks/useExpandableTextButton';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nimport styles from './video-description.scss';\n\nconst namespace = 'shared.videoDetailsV2';\n\ninterface VideoDescriptionProps {\n video: VideoTypes;\n}\n\nexport function VideoDescription(props: VideoDescriptionProps): React.ReactElement {\n const [ expanded, setExpanded ] = React.useState(false);\n const { containerRef, showButton } = useExpandableTextButton();\n\n return (\n <div className={`${styles.container} ${expanded ? '' : styles.collapsed}`} >\n {(!expanded && showButton) && (\n <DivButton\n onClick={() => setExpanded(true)}\n className={`ms-1 text-info hover-text-underline ${styles.seeMore}`}\n >\n <Text namespace={namespace} phrase='seeMore' />\n </DivButton>\n )}\n <p\n ref={containerRef}\n className={`mb-0 ${expanded ? 'd-inline' : ''}`}\n dangerouslySetInnerHTML={{\n __html: LinkifyHelper.linkifyText(props.video.description, { nl2br: true })\n }}\n />\n {expanded && (\n <DivButton\n onClick={() => setExpanded(false)}\n className={`ms-1 hover-text-underline d-inline text-info`}\n >\n <Text namespace={namespace} phrase='seeLess' />\n </DivButton>\n )}\n </div>\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';\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 { VideoDescription } from 'libs/shared/components/play-page-v2/details/video-description/VideoDescription';\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, CurrentUser, 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 function showDateUploaded(): boolean {\n if (!props.currentUser?.isAuthenticated)\n return false;\n\n return !!video.dateCreated && !video._isClickViewCurated?.value;\n }\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 {showDateUploaded() && (\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 currentUser: CurrentUser;\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 showHeading?: boolean;\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 {props.showHeading && (\n <h2 className='h4 curated-widget-header'><Text phrase='heading' /></h2>\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\n <VideoDescription video={props.video} />\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-n1'>\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 </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 tocIndentation?: number;\n}\n\ninterface TableOfContentsProps<T> {\n items: TableOfContentsItem<T>[];\n activeId: string;\n appLink?: Core.AppLink;\n analyticsData?: HashObject;\n setControlledId: (arg: string) => void;\n // set to true if the TOC is controlled by a local state rather than query params\n localState?: boolean;\n getAppLink?: (args: TableOfContentsItem<T>) => Core.AppLink;\n onItemClick?: (args: TableOfContentsItem<T>) => void;\n}\n\nexport function TableOfContentsList<T extends string>(props: TableOfContentsProps<T>): JSX.Element {\n const analyticsOptions = {\n actionType: UserAction.Click,\n entity: EntityType.Widget,\n location: LocationContext.TableOfContents\n };\n\n function onItemSelect(item: TableOfContentsItem<T>) {\n ScrollHelper.preventScrollTop();\n props.setControlledId(item.id);\n \n props.onItemClick?.(item);\n \n setTimeout(() => document.getElementById(item.id)?.focus());\n }\n\n 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 : ''} ${item.tocIndentation ? 'ms-3' : ''}`}>\n {item.name}\n </div>\n </AppLink>\n );\n })}\n </div>\n );\n}","import React from 'react';\n\nimport { useResizeListener } from 'libs/shared/hooks/UseResizeListener';\n\nexport function useExpandableTextButton() {\n const containerRef = React.useRef<HTMLDivElement>(null);\n\n const memoClientHeight = React.useRef<number>(0);\n\n React.useEffect(() => {\n if (containerRef.current.clientHeight)\n // memo the initial clientHeight, cuz after expand and collapse the clientHeight will change\n memoClientHeight.current = containerRef.current.clientHeight;\n }, []);\n\n const [ showButton, setShowButton ] = React.useState(containerRef.current?.scrollHeight > memoClientHeight.current);\n\n useResizeListener(() => {\n if (containerRef.current.clientHeight) {\n // update memo value on resize\n memoClientHeight.current = containerRef.current.clientHeight;\n setShowButton(containerRef.current?.scrollHeight > memoClientHeight.current);\n }\n });\n\n React.useEffect(() => {\n if (containerRef.current?.scrollHeight) {\n setShowButton(containerRef.current?.scrollHeight > memoClientHeight.current);\n }\n }, [ containerRef.current?.scrollHeight, memoClientHeight.current ]);\n\n return { containerRef, showButton };\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\",\"showInSide\":\"kd9hB\",\"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' : `col col-2 ps-4`}>\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} ${!props.showInSide ? '' : styles.showInSide}`}>\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 {/* web version show table of contents next to player */}\n {props.isExpanded && props.showInSide && <TableOfContents {...props}/>}\n \n {/* web version show icon in portal (RHS of window) */}\n {PortalHelper.renderInPortalIfExists(\n !props.isExpanded && <TableOfContentsIcon {...props}/>,\n document.getElementById(PLAY_PAGE_TOC_PORTAL_ID)\n )}\n\n {/* mobile version show in portal */}\n {PortalHelper.renderInPortalIfExists(\n !props.showInSide && props.isExpanded && <TableOfContents {...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","VideoDescription","expanded","setExpanded","useExpandableTextButton","containerRef","showButton","DivButton","LinkifyHelper","description","nl2br","CommaList","label","items","commaSeperated","i","join","DetailsSection","parentVideo","productionYear","options","year","smartCount","productionCompanies","distributors","producers","directors","dateBroadcast","date","DateHelper","channel","currentUser","isAuthenticated","dateCreated","_isClickViewCurated","value","showDateUploaded","VideoDetailsWithScrollbarV2","maxHeight","showDescription","showDetails","tags","hideTags","filter","tag","tagType","TagType","getTags","showHeading","autoHeight","autoHeightMax","ImmersiveReader","text","onLaunch","onLaunchImmersiveReader","onExit","onExitImmersiveReader","location","entity","actionType","descriptor","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","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","tocIndentation","memoClientHeight","scrollHeight","setShowButton","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":""}
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[2199],{78259:(e,t,n)=>{n.d(t,{O:()=>i});var a=n(58176),o=n.n(a),c=n(39479),l={className:"info-link",defaultProtocol:"https"},i={linkifyText:function(e,t){if(e){var n=t?c.extend({},l,t):l;return o()(e,n)}}}},84963:(e,t,n)=>{n.d(t,{r:()=>d});var a=n(32735),o=n(23481),c=n(83914),l=n(76177),i=n(35223);const r={tag:"XRj8d",tooltip:"X6mLk"};var s="specialEventCalendar.comingSoonTag";function d(e){return a.createElement(l.u,{title:o.T.getPhrase(s,"tooltip"),spanHackClassName:"d-block ".concat(r.tooltip),spanHack:!0},a.createElement("div",{className:"d-flex text-dark align-items-center ".concat(r.tag," ").concat(e.className)},a.createElement(c.x,{svgName:i.vn.Timer}),!e.onlyIcon&&o.T.getPhrase(s,"comingSoon")))}},6107:(e,t,n)=>{n.d(t,{b:()=>D});var a=n(32735),o=n(110),c=n(78259),l=n(28400),i=n(49985),r=n(65858),s=n(84963),d=n(12324),m=n(42735),v=n(36848),u=n(75163),p=n(83914),f=n(83345),g=n(2284),b=n(35223);const E={modalWidth:"SgHYb",banner:"PLw1p",pill:"UNBr0",logo:"xv_tc"};var k="shared.specialEventListItem";function D(e){var t,n,D,h,M,N,Y=e.getAppLink(e.event.content,l.m.slugify(e.event.name)),w=null===(t=e.getBackgroundColor)||void 0===t?void 0:t.call(e,e.event.content),x=null===(n=e.getIconUrl)||void 0===n?void 0:n.call(e,e.event.content),y=null===(D=e.getBannerUrl)||void 0===D?void 0:D.call(e,e.event.content),O=!!e.event.endDate,C=e.event.content.status===g.W.ComingSoon,L=null===(h=e.getStartTime)||void 0===h?void 0:h.call(e,e.event.content),P=null===(M=e.getActionLabel)||void 0===M?void 0:M.call(e),T=null===(N=e.isPastEvent)||void 0===N?void 0:N.call(e,e.event.content),I={actionType:r.Vw.Click,entity:r.py.SpecialEvent,location:e.inPopup?r.LZ.CalendarPopup:r.LZ.CalendarDay},S={topicId:e.event.content.id,eventId:e.event.specialEventId,presentationId:e.presentationId,date:o.O.format(new Date(e.event.startDate),"YYYY-MM-DD"),status:e.event.content.status};return a.createElement("div",null,L&&a.createElement("h6",null,L),a.createElement("div",{onClick:function(){C&&i.k.logUserAction(S,I)}},a.createElement(v.F,{appLink:!C&&Y,className:"".concat(C?"":"cursor-pointer"," text-decoration-none"),onClick:e.onClick,analyticsOptions:I,analyticsData:S},a.createElement("div",{className:"banner rounded-3 position-relative position-relative ".concat(E.banner),style:{backgroundColor:w,backgroundImage:"url('".concat(y,"')")}},T&&a.createElement("div",{className:"bg-white w-100 h-100 opacity-50 position-absolute top-0 left-0 z-0"}),a.createElement("div",{className:"d-flex justify-content-between align-items-center w-100 h-100 px-3"},a.createElement("div",{className:"d-flex align-items-center z-1"},x&&a.createElement("div",{className:"".concat(E.logo," rounded-circle flex-shrink-0 overflow-hidden me-2")},a.createElement(u.Z,{data:x})),a.createElement("div",null,C&&a.createElement(s.r,{className:"pe-2 fw-semibold mb-1 rounded-pill justify-content-start ".concat(E.pill)}),T&&a.createElement("div",{className:"d-inline-block rounded-pill bg-light-green mb-1"},a.createElement(p.x,{svgName:b.vn.CalendarCheck}),a.createElement("p",{className:"d-inline ms-1 mb-0"},a.createElement(f.x,{namespace:k,phrase:"pastEvent"}))),O&&a.createElement("p",{className:"text-white text-shadow mb-1"},d.T.getDisplayDate(e.event.startDate,e.event.endDate)),a.createElement("h2",{className:"h4 text-white text-shadow ".concat(e.event.description?"clamp-2":"clamp-1"),title:e.event.name},e.event.name))),a.createElement("div",{className:"d-none d-sm-block flex-shrink-0 z-1"},!C&&a.createElement(m.K,{className:"btn ".concat(T?"btn-outline-dark":"btn-dark"," fw-semibold")},P))))),a.createElement("div",{className:"mt-2 mb-3 pre-wrap text-break",dangerouslySetInnerHTML:{__html:c.O.linkifyText(e.event.description||e.event.content.description)}})))}},7870:(e,t,n)=>{n.d(t,{N:()=>i});var a=n(97395),o=n(75896),c=n(110),l=n(40424),i={calendarEvents:function(e,t,n){return{url:a._.urlBuilder("{gateway}/v1/discover/special-events/content",{from:e,to:t,presentationId:n}),publicUrl:a._.urlBuilder("/api/discover/special-events/content",{from:e,to:t,presentationId:n}),key:"presentation:".concat(n,":events:from:").concat(e,":to").concat(t)}},nextTopicSpecialEvent:function(e,t){var n={presentationId:t,limit:1,from:c.O.format(new Date,"YYYY-MM-DD"),objectType:l.VH.Classification};return{url:a._.urlBuilder("{gateway}/v1/discover/special-events/object/".concat(e,"/next-events"),n),publicUrl:a._.urlBuilder("/api/discover/special-events/object/".concat(e,"/next-events"),n),key:"presentation:".concat(t,":events:classification:").concat(e),formatData:function(e){return o.m.first(e)}}}}},12324:(e,t,n)=>{n.d(t,{T:()=>o});var a=n(110),o={getDisplayDate:function(e,t){return t?e.slice(5,7)!==t.slice(5,7)?"".concat(a.O.format(e,"D MMM")," - ").concat(a.O.format(t,"D MMM")):"".concat(a.O.format(e,"D")," - ").concat(a.O.format(t,"D")," ").concat(a.O.format(e,"MMM")):a.O.format(e,"D MMM")},getEventsInMonth:function(e,t){return e.filter((function(e){return a.O.format(e.startDate,"YYYY-MM")===a.O.format(t,"YYYY-MM")}))},getOrdinalDate:function(e){return"".concat(a.O.getLocalDateOrdinal(a.O.get(e,"date"))," ").concat(a.O.format(e,"MMMM"))}}},2284:(e,t,n)=>{var a;n.d(t,{W:()=>a}),function(e){e.Draft="Draft",e.ComingSoon="ComingSoon",e.Published="Published"}(a||(a={}))},72199:(e,t,n)=>{n.r(t),n.d(t,{SpecialEventListView:()=>D});var a=n(32735),o=n(42648),c=n(23481),l=n(20354),i=n(110),r=n(6107),s=n(7870),d=n(12324),m=n(9111),v=n(13876),u=n(86698),p=n(34181);const f={modalWidth:"LrMq0",buttons:"jAfM0"};var g="specialEventCalendar.eventListPopup",b=c.T.encloseNamespace(g),E=400,k=300;function D(e){var t,n=(0,u.y)({redirectOnError:!0}).activePresentation,D=new Date(e.from),h=new Date(e.to),M=l.a.useBasicFetch((null==n?void 0:n.id)&&s.N.calendarEvents(i.O.format(D,"YYYY-MM-DD"),i.O.format(h,"YYYY-MM-DD"),n.id)),N=(null===(t=M.data)||void 0===t?void 0:t.filter((function(t){return t.startDate===i.O.format(new Date(e.date),"YYYY-MM-DD")})))||[];return(null==n?void 0:n.id)?a.createElement(m.G,{title:"Events on ".concat(d.T.getOrdinalDate(e.date)),closePopup:e.closePopup,dialogClassName:f.modalWidth,bodyClassName:"p-0",showLoadingSpinner:!M.data},a.createElement(o.$B,{autoHeight:!0,autoHeightMin:k,autoHeightMax:E},a.createElement("div",{className:"px-3 pt-2"},N.map((function(t){return a.createElement(r.b,{key:t.content.id,getAppLink:function(e,t){return p.L.getAppLink(Object.assign(Object.assign({},e),{name:t}))},event:t,onClick:e.closePopup,inPopup:!0,presentationId:n.id,getActionLabel:function(){return b("buttonLabel")},getBannerUrl:function(e){var t;return null===(t=e.banner)||void 0===t?void 0:t.url}})})))),a.createElement("div",{className:"ms-3"},a.createElement(v.u,{className:f.buttons},a.createElement(v.u.Cancel,{variant:"outline-dark",className:"mb-3",onClick:e.closePopup,text:c.T.getPhrase(g,"close")})))):a.createElement(a.Fragment,null)}}}]);
2
+ //# sourceMappingURL=2199-be40da7440-lite.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/2199-be40da7440-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/common/src/react/utils/LinkifyHelper.ts","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/components/special-event-list-item/special-event-list-item.scss","file:///app/packages/libs/shared/src/apps/calendar/components/special-event-list-item/SpecialEventListItem.tsx","file:///app/packages/libs/shared/src/apps/calendar/flight-request/CalendarRequests.ts","file:///app/packages/libs/shared/src/apps/calendar/utils/SpecialEventHelper.ts","file:///app/packages/libs/shared/src/enums/ClassificationStatus.ts","file:///app/packages/projects/lite/src/apps/calendar/views/special-event-list-view/special-event-list-view.scss","file:///app/packages/projects/lite/src/apps/calendar/views/special-event-list-view/SpecialEventListView.tsx"],"sourcesContent":["import { ObjectHash } from 'backbone';\nimport linkifyStr from 'linkifyjs/string';\nimport * as _ from 'underscore';\n\nconst BaseLinkifyOptions = {\n className: 'info-link',\n defaultProtocol: 'https'\n};\n\nexport const LinkifyHelper = {\n /**\n * The underlying linkifyStr interface escapes text within the input string\n */\n linkifyText(text: string, options?: ObjectHash): string {\n if (!text) return;\n const ops = options ? _.extend({}, BaseLinkifyOptions, options) : BaseLinkifyOptions;\n return linkifyStr(text, ops);\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}","// extracted by mini-css-extract-plugin\nexport default {\"modalWidth\":\"SgHYb\",\"banner\":\"PLw1p\",\"pill\":\"UNBr0\",\"logo\":\"xv_tc\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\nimport { LinkifyHelper } from 'libs/common/react/utils/LinkifyHelper';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { ComingSoonTag } from 'libs/shared/apps/calendar/components/coming-soon-tag/ComingSoonTag';\nimport { SpecialEventHelper } from 'libs/shared/apps/calendar/utils/SpecialEventHelper';\nimport { ActionButton } from 'libs/shared/components/actions/ActionButton';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { CalendarEvent, CalendarEventContent } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './special-event-list-item.scss';\n\nconst namespace = 'shared.specialEventListItem';\n\ninterface SpecialEventListItemProps {\n getAppLink: (content: CalendarEventContent, name: string) => Core.AppLink;\n event: CalendarEvent<CalendarEventContent>;\n onClick?: () => void;\n inPopup?: boolean;\n presentationId: string;\n headingClassName?: string;\n getIconUrl?: (content: CalendarEventContent) => string;\n getBackgroundColor?: (content: CalendarEventContent) => string;\n getBannerUrl?: (content: CalendarEventContent) => string;\n getActionLabel?: () => string;\n getStartTime?: (content: CalendarEventContent) => string;\n isPastEvent?: (content: CalendarEventContent) => boolean;\n}\n\nexport function SpecialEventListItem(props: SpecialEventListItemProps): JSX.Element {\n const appLink = props.getAppLink(props.event.content, TextHelper.slugify(props.event.name));\n\n const backgroundColor = props.getBackgroundColor?.(props.event.content);\n const iconUrl = props.getIconUrl?.(props.event.content);\n const bannerUrl = props.getBannerUrl?.(props.event.content);\n const multiDayEvent = !!props.event.endDate;\n const isComingSoon = props.event.content.status === ClassificationStatus.ComingSoon;\n const startTime = props.getStartTime?.(props.event.content);\n const actionLabel = props.getActionLabel?.();\n const isPastEvent = props.isPastEvent?.(props.event.content);\n\n const analyticsOptions: AnalyticsOptions = {\n actionType: UserAction.Click,\n entity: EntityType.SpecialEvent,\n location: props.inPopup ? LocationContext.CalendarPopup : LocationContext.CalendarDay\n };\n const analyticsData = {\n topicId: props.event.content.id,\n eventId: props.event.specialEventId,\n presentationId: props.presentationId,\n date: DateHelper.format(new Date(props.event.startDate), 'YYYY-MM-DD'),\n status: props.event.content.status\n };\n\n return (\n <div>\n {startTime && (\n <h6>{startTime}</h6>\n )}\n\n <div onClick={() => {\n if (isComingSoon)\n AnalyticsHelper.logUserAction(analyticsData, analyticsOptions);\n }}>\n <AppLink\n appLink={!isComingSoon && appLink}\n className={`${!isComingSoon ? 'cursor-pointer' : ''} text-decoration-none`}\n onClick={props.onClick}\n analyticsOptions={analyticsOptions}\n analyticsData={analyticsData}\n >\n <div\n className={`banner rounded-3 position-relative position-relative ${styles.banner}`}\n style={{ backgroundColor, backgroundImage: `url('${bannerUrl}')` }}\n >\n {isPastEvent && (\n <div className='bg-white w-100 h-100 opacity-50 position-absolute top-0 left-0 z-0' />\n )}\n <div className={`d-flex justify-content-between align-items-center w-100 h-100 px-3`}>\n <div className='d-flex align-items-center z-1'>\n {iconUrl && (\n <div className={`${styles.logo} rounded-circle flex-shrink-0 overflow-hidden me-2`}>\n <BaseImage data={iconUrl} />\n </div>\n )}\n <div>\n {isComingSoon && <ComingSoonTag className={`pe-2 fw-semibold mb-1 rounded-pill justify-content-start ${styles.pill}`}/>}\n\n {isPastEvent &&\n <div className='d-inline-block rounded-pill bg-light-green mb-1'>\n <SvgContainer svgName={cvSvgLibrary.CalendarCheck} />\n <p className='d-inline ms-1 mb-0'><Text namespace={namespace} phrase='pastEvent' /></p>\n </div>}\n \n {multiDayEvent && (\n <p className='text-white text-shadow mb-1'>{SpecialEventHelper.getDisplayDate(props.event.startDate, props.event.endDate)}</p>\n )}\n <h2 className={`h4 text-white text-shadow ${props.event.description ? 'clamp-2' : 'clamp-1'}`} title={props.event.name}>{props.event.name}</h2>\n \n </div>\n </div>\n\n <div className='d-none d-sm-block flex-shrink-0 z-1'>\n {!isComingSoon && (\n <ActionButton className={`btn ${isPastEvent ? 'btn-outline-dark' : 'btn-dark'} fw-semibold`}>\n {actionLabel}\n </ActionButton>\n )}\n </div>\n </div>\n </div>\n </AppLink>\n <div className='mt-2 mb-3 pre-wrap text-break' dangerouslySetInnerHTML={{ __html: LinkifyHelper.linkifyText(props.event.description || props.event.content.description) }}/>\n </div>\n </div>\n );\n}\n","import { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { CalendarEvent, CalendarEventContentType } from 'libs/shared/interfaces';\n\nexport const CalendarRequests = {\n calendarEvents(\n from: string,\n to: string,\n presentationId: string\n ): Flight.PublicRequest {\n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/discover/special-events/content', { from, to, presentationId }),\n publicUrl: UrlHelper.urlBuilder(`/api/discover/special-events/content`, { from, to, presentationId }),\n key: `presentation:${presentationId}:events:from:${from}:to${to}`\n };\n },\n\n nextTopicSpecialEvent(\n classificationId: string,\n presentationId: string\n ): Flight.PublicRequest {\n const params = {\n presentationId,\n limit: 1,\n from: DateHelper.format(new Date(), 'YYYY-MM-DD'),\n objectType: CalendarEventContentType.Classification\n };\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/discover/special-events/object/${classificationId}/next-events`, params),\n publicUrl: UrlHelper.urlBuilder(`/api/discover/special-events/object/${classificationId}/next-events`, params),\n key: `presentation:${presentationId}:events:classification:${classificationId}`,\n formatData: (events: CalendarEvent[]) => ArrayHelper.first(events)\n };\n }\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};","// Maps to enum in SubjectApi but uses the\n// key rather than the value as SubjectsApi returns the key.\nexport enum ClassificationStatus {\n Draft = 'Draft',\n ComingSoon = 'ComingSoon',\n Published = 'Published'\n}","// extracted by mini-css-extract-plugin\nexport default {\"modalWidth\":\"LrMq0\",\"buttons\":\"jAfM0\"};","import React from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { SpecialEventListItem } from 'libs/shared/apps/calendar/components/special-event-list-item/SpecialEventListItem';\nimport { CalendarRequests } from 'libs/shared/apps/calendar/flight-request/CalendarRequests';\nimport { SpecialEventHelper } from 'libs/shared/apps/calendar/utils/SpecialEventHelper';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { Classification, PopupViewProps } from 'libs/shared/interfaces';\nimport { CalendarEvent } from 'libs/shared/interfaces';\n\nimport { usePresentation } from 'shared/hooks/usePresentation';\nimport { ClassificationAppLinkHelper } from 'shared/utils/ClassificationAppLinkHelper';\n\nimport styles from './special-event-list-view.scss';\n\nconst namespace = 'specialEventCalendar.eventListPopup';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst SCROLL_HEIGHT_MAX = 400;// in px\nconst SCROLL_HEIGHT_MIN = 300;// in px\nexport interface SpecialEventsViewQueryParams extends PopupViewProps {\n from: string;\n to: string;\n date: string;\n}\n\nexport function SpecialEventListView(props: SpecialEventsViewQueryParams): JSX.Element {\n const { activePresentation } = usePresentation({ redirectOnError: true });\n\n const fromDate = new Date(props.from);\n const toDate = new Date(props.to);\n\n const events = Flight.useBasicFetch<CalendarEvent[]>(activePresentation?.id\n && CalendarRequests.calendarEvents(DateHelper.format(fromDate, 'YYYY-MM-DD'), DateHelper.format(toDate, 'YYYY-MM-DD'), activePresentation.id));\n const eventsOnDay = events.data?.filter(e => e.startDate === DateHelper.format(new Date(props.date), 'YYYY-MM-DD')) || [];\n\n if (!activePresentation?.id)\n return <></>;\n\n return (\n <Popup\n title={`Events on ${SpecialEventHelper.getOrdinalDate(props.date)}`}\n closePopup={props.closePopup}\n dialogClassName={styles.modalWidth}\n bodyClassName={'p-0'}\n showLoadingSpinner={!events.data}\n >\n <Scrollbars\n autoHeight\n autoHeightMin={SCROLL_HEIGHT_MIN}\n autoHeightMax={SCROLL_HEIGHT_MAX}\n >\n <div className='px-3 pt-2'>\n {eventsOnDay.map(e => (\n <SpecialEventListItem\n key={e.content.id}\n getAppLink={(content, name) =>\n ClassificationAppLinkHelper.getAppLink({ ...content as Classification, name })}\n event={e}\n onClick={props.closePopup}\n inPopup\n presentationId={activePresentation.id}\n getActionLabel={() => getPhrase('buttonLabel')}\n getBannerUrl={(classification: Classification) => classification.banner?.url}\n />\n ))}\n </div>\n </Scrollbars>\n <div className='ms-3'>\n <PopupButtons className={styles.buttons}>\n <PopupButtons.Cancel\n variant='outline-dark'\n className='mb-3'\n onClick={props.closePopup}\n text={LanguageService.getPhrase(namespace, 'close')}\n />\n </PopupButtons>\n </div>\n </Popup>\n\n );\n}"],"names":["BaseLinkifyOptions","className","defaultProtocol","LinkifyHelper","linkifyText","text","options","ops","namespace","ComingSoonTag","props","Tooltip","title","LanguageService","spanHackClassName","spanHack","SvgContainer","svgName","onlyIcon","SpecialEventListItem","appLink","getAppLink","event","content","TextHelper","name","backgroundColor","getBackgroundColor","iconUrl","getIconUrl","bannerUrl","getBannerUrl","multiDayEvent","endDate","isComingSoon","status","ClassificationStatus","startTime","getStartTime","actionLabel","getActionLabel","isPastEvent","analyticsOptions","actionType","entity","location","inPopup","analyticsData","topicId","id","eventId","specialEventId","presentationId","date","DateHelper","Date","startDate","onClick","AnalyticsHelper","AppLink","style","backgroundImage","BaseImage","data","Text","phrase","SpecialEventHelper","description","ActionButton","dangerouslySetInnerHTML","__html","CalendarRequests","calendarEvents","from","to","url","publicUrl","key","nextTopicSpecialEvent","classificationId","params","limit","objectType","formatData","events","getDisplayDate","slice","getEventsInMonth","month","filter","e","getOrdinalDate","getPhrase","SCROLL_HEIGHT_MAX","SCROLL_HEIGHT_MIN","SpecialEventListView","activePresentation","usePresentation","redirectOnError","fromDate","toDate","eventsOnDay","Popup","closePopup","dialogClassName","bodyClassName","showLoadingSpinner","autoHeight","autoHeightMin","autoHeightMax","map","ClassificationAppLinkHelper","classification","banner","PopupButtons","variant"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[2548],{94644:(e,t,a)=>{a.d(t,{r:()=>c});var n=a(50242),r=a(81886),i=a(67058),o=a(14553),s=a(49267),d=a(49075),u={notFound:i.d,forbidden:{rating:o.q,yearLevel:o.q,region:s.a,privacy:o.q},badRequest:d._};function c(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e){var i;i="number"==typeof e?e:e.status;var o=Object.assign(Object.assign({},u),t);i&&r.Q.Ry.isStatusCodeError(i)&&(i!==n.o.NotFound?i!==n.o.Forbidden?a.badRequest||r.Q.Ry.throw(new o.badRequest):a.forbidden||r.Q.Ry.throw(new o.forbidden.privacy):a.notFound||r.Q.Ry.throw(new o.notFound))}}},91286:(e,t,a)=>{a.d(t,{v:()=>o});var n=a(32735),r=a(94644);function i(e){return e.map((function(e){return e.statusCode})).join(":")}function o(e,t,a){var o=Array.isArray(e)?e:[e];(0,n.useEffect)((function(){o.forEach((function(e){(0,r.r)(e.statusCode,t,a)}))}),[i(o),t,a])}},63719:(e,t,a)=>{a.d(t,{h:()=>s});var n=a(32735),r=a(77316);function i(e,t){if(e){if("string"==typeof e)return o(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?o(e,t):void 0}}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=Array(t);a<t;a++)n[a]=e[a];return n}function s(e){var t,a,s=(t=n.useMemo((function(){return r.p.getBuilder()}),[]),a=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var n,r,i,o,s=[],d=!0,u=!1;try{if(i=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;d=!1}else for(;!(d=(n=i.call(a)).done)&&(s.push(n.value),s.length!==t);d=!0);}catch(e){u=!0,r=e}finally{try{if(!d&&null!=a.return&&(o=a.return(),Object(o)!==o))return}finally{if(u)throw r}}return s}}(t,a)||i(t,a)||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=s[0],u=(0,s[1])(d);return u&&e?[].concat(function(e){return function(e){if(Array.isArray(e))return o(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||i(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.")}()}(u),[Object.assign(Object.assign({},e),{active:!0})]):u}},75085:(e,t,a)=>{a.r(t),a.d(t,{PlayViewV2:()=>H});var n=a(32735),r=a(50242),i=a(81886),o=a(23481),s=a(20354),d=a(28400),u=a(65858),c=a(78417),l=a(16714),f=a(67058),v=a(61990),y=a(33803),h=a(89454),p=a(43012),m=a(39151),b=a(1666),g=a(20768),w=a(98064),C=a(31949),F=a(1575),I=a(63719),A=a(26304),P=a(91286),O=a(22902),S=a(79612),B=a(76753),R=a(14070),V=a(97291),j=a(51855),q=a(82817),x=a(7179),E=a(49948),k=a(36873),L=a(27638),M=a(86698),T=a(35014),U=a(97816),_=a(33192),G=a(81812),N=a(61169),Q=o.T.encloseNamespace("shared.play"),D={notFound:v.l,forbidden:{privacy:y.G}};function H(e){var t,a,o,v,y=e.queryParams,H=y.context,Y=y.contextId,Z=y.playNext,$=y.mtv,z=(0,L.u)(u.LZ.PlayPage),J=z.setFavourite,K=z.canFavourite,W=(0,O.T)().hasPermissions,X=(0,j.G)().isPlugin,ee=(0,M.y)().activePresentation,te=(0,T.I)(),ae=s.a.useBasicFetch(w.D.streamableLearning()),ne=s.a.useBasicFetch(C.N.currentUser()),re=s.a.useBasicFetch(F.R.video(e.id)),ie=s.a.useBasicFetch(te.canViewClips&&p.e.videoClips(e.id)),oe=s.a.useBasicFetch(te.canViewInteractives&&g.b.videoInteractives(e.id)),se=s.a.useBasicFetch(m.L.config()),de=s.a.useBasicFetch((null===(t=ne.data)||void 0===t?void 0:t.isAuthenticated)&&b.h.yearGroups(ne.data.customerId)),ue=s.a.useBasicFetch(ee&&h.O.audiencesByPresentationId(ee.id)),ce=(0,G.a)(),le=s.a.useBasicFetch(re.statusCode===r.o.Forbidden&&F.R.video(e.id,c.r.StripMetadata)),fe=(0,q.M)(e.id,!0),ve=(0,k.k)({video:re.data,context:H,contextId:Y,moviesAndTv:$,currentUser:ne.data}),ye=(0,E.l)(e.id,!0),he=s.a.useBasicFetch(F.R.regionAlternatives(e.id)),pe=(0,I.h)({name:null===(a=re.data)||void 0===a?void 0:a.name});return(0,S.M)(B.CG.getVideoMetadata({content:re.data,regionAlternatives:he.data,phraseContext:{phraseHandler:Q,titlePhrase:"pageTitle",descriptionPhrase:"pageDescription"},canonicalLink:_.f.getCanonicalLink({stripPresentationSlug:!0}),allowIndexing:_.f.allowIndexing(),hrefLang:_.f.getContentHrefLang(he.data,(function(e,t){return{application:V.O.VIDEOS,action:R.e.Videos.PLAY_VIDEO,args:[e,d.m.slugify(t)]}}))})),(0,P.v)(re,D,{forbidden:!0}),(0,U.V)(null!==(o=ve.videos)&&void 0!==o?o:[]),(0,x.P)({id:e.id,app:"videos"}),(0,A.b)(le),n.useEffect((function(){var e;re.data&&ae.data&&(null===(e=re.data.libraries)||void 0===e?void 0:e.data.find((function(e){return e.id===ae.data.objectId})))&&i.Q.Ry.throw(new f.d)}),[re.hasCompleted,ae.hasCompleted]),re.data&&ne.hasCompleted&&se.hasCompleted&&ye.hasCompleted?n.createElement(N.R,{video:re.data,clips:ie.data,interactives:oe.data,yearGroups:de.data,curriculums:fe,relatedVideos:ve,setFavourite:J,canFavourite:K,imageCdnUrl:se.data.imageCdnUrl,currentUser:ne.data,pointsOfInterest:ye.items,playNext:Z,featureAccess:te,audiences:ue.data,params:e.queryParams,canManageVideoAccess:W(l.C.ManageVideoAccess),shouldShowSideTableOfContents:ce,tableOfContentsId:null===(v=e.queryParams)||void 0===v?void 0:v.tocId,isPlugin:X,breadcrumbs:pe}):n.createElement(n.Fragment,null)}H.defaultProps={queryParams:{}}}}]);
2
+ //# sourceMappingURL=2548-c48b8d3e3c-lite.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/2548-c48b8d3e3c-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/libs/shared/src/hooks/UseHandleObjectError.ts","file:///app/packages/libs/shared/src/hooks/useBreadcrumbs.ts","file:///app/packages/projects/lite/src/shared/views/play/v2/PlayViewV2.tsx"],"sourcesContent":["import { BaseError } from 'libs/common/backbone/core/BaseError';\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Core } from 'libs/common/core';\n\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { PrivateResourceError } from 'libs/shared/errors/general/private-resource/PrivateResourceError';\nimport { RegionLockedResourceError } from 'libs/shared/errors/general/region-locked-resource/RegionLockedResourceError';\nimport { UnspecifiedError } from 'libs/shared/errors/general/unspecified-error/UnspecifiedError';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nexport interface HttpErrorMap {\n notFound?: new () => BaseError;\n forbidden?: {\n rating?: new (description: string) => BaseError;\n yearLevel?: new (description: string) => BaseError;\n region?: new () => BaseError;\n privacy?: new (video?: VideoTypes) => BaseError;\n };\n badRequest?: new () => BaseError;\n}\n\nexport type IgnoreHttpErrorMap = {\n [key in keyof HttpErrorMap]: boolean;\n};\n\nconst defaultErrors: HttpErrorMap = {\n notFound: NotFoundError,\n forbidden: {\n rating: PrivateResourceError,\n yearLevel: PrivateResourceError,\n region: RegionLockedResourceError,\n privacy: PrivateResourceError\n },\n badRequest: UnspecifiedError\n};\n\nexport function handleHttpError(\n info: HttpStatus | Xhr,\n customErrorMap: HttpErrorMap = {},\n /**\n * Prevent certain errors in the errorMap from being thrown\n * so that you may implement your own handler\n */\n ignoreMap: IgnoreHttpErrorMap = {}\n): void {\n if (!info)\n return;\n\n let statusCode: HttpStatus;\n\n if (typeof(info) === 'number') {\n statusCode = info;\n } else {\n statusCode = info.status;\n }\n\n const errorMap = {\n ...defaultErrors,\n ...customErrorMap\n };\n\n if (!statusCode)\n return;\n\n if (!Core.ErrorHelper.isStatusCodeError(statusCode))\n return;\n\n if (statusCode === HttpStatus.NotFound) {\n if (!ignoreMap.notFound)\n Core.ErrorHelper.throw(new errorMap.notFound());\n return;\n }\n\n if (statusCode === HttpStatus.Forbidden) {\n /**\n * TODO: Work out how to go about handling all forbidden errors, such as region locking, year levels,\n * ratings, and privacy.\n */\n if (!ignoreMap.forbidden)\n Core.ErrorHelper.throw(new errorMap.forbidden.privacy());\n return;\n }\n\n if (!ignoreMap.badRequest)\n Core.ErrorHelper.throw(new errorMap.badRequest());\n}\n\nexport function handleXhrError(xhr: Xhr, customErrorMap?: HttpErrorMap): void {\n handleHttpError(xhr.status, customErrorMap);\n}","import { useEffect } from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { handleHttpError, HttpErrorMap, IgnoreHttpErrorMap } from 'libs/shared/errors/handlers/HttpErrorHandlers';\n\nfunction generateCacheKey(flightObjs: Array<Flight.Response<any>>): string {\n return flightObjs.map(obj => obj.statusCode).join(':');\n}\n\n// TODO: Change this to just `useHandleHttpError` and only accept a status code.\nexport function useHandleObjectError(\n _flightObjs: Flight.Response<any> | Array<Flight.Response<any>>,\n customErrors?: HttpErrorMap,\n ignoreErrors?: IgnoreHttpErrorMap\n): void {\n const flightObjs = Array.isArray(_flightObjs) ? _flightObjs : [_flightObjs];\n\n useEffect(() => {\n flightObjs.forEach(obj => {\n handleHttpError(obj.statusCode, customErrors, ignoreErrors);\n });\n }, [ generateCacheKey(flightObjs), customErrors, ignoreErrors ]);\n}","import React from 'react';\n\nimport { Breadcrumb } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { BreadcrumbService } from 'libs/shared/services/BreadcrumbService';\n\nexport function useBreadcrumbs(current: Breadcrumb): Breadcrumb[] {\n const [ match, useBuilder ] = React.useMemo(() => BreadcrumbService.getBuilder(), []);\n\n const breadcrumbs = useBuilder(match);\n\n if (!breadcrumbs || !current)\n return breadcrumbs;\n\n return [ ...breadcrumbs, { ...current, active: true }];\n}\n\n","import * as React from 'react';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { PermissionFilterOption } from 'libs/shared/enums/PermissionFilterOption';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { VideoNotFoundError } from 'libs/shared/errors/videos/video-not-found/VideoNotFoundError';\nimport { VideoPrivateError } from 'libs/shared/errors/videos/video-private/VideoPrivateError';\nimport { AudienceRequests } from 'libs/shared/flight-requests/AudienceRequests';\nimport { ClipRequests } from 'libs/shared/flight-requests/ClipRequests';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { LibraryRequests } from 'libs/shared/flight-requests/LibraryRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useBreadcrumbs } from 'libs/shared/hooks/useBreadcrumbs';\nimport { useCannotConsumeError } from 'libs/shared/hooks/useCannotConsumeError';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Clip, Config, CurrentUser, InteractiveMetadata, PresentationAudience, RegionAlternative, Video, YearGroup } from 'libs/shared/interfaces';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { usePluginHelper } from 'shared/hooks/use-plugin-helper/usePluginHelper';\nimport { useCurriculums } from 'shared/hooks/useCurriculums';\nimport { useDeepLinks } from 'shared/hooks/useDeepLinks';\nimport { useFetchPointsOfInterest } from 'shared/hooks/useFetchPointsOfInterest';\nimport { useGetRelatedVideos } from 'shared/hooks/useGetRelatedVideos';\nimport { useLiteFavourites } from 'shared/hooks/useLiteFavourites';\nimport { usePresentation } from 'shared/hooks/usePresentation';\nimport { useVideoFeatureAccess } from 'shared/hooks/useVideoFeatureAccess';\nimport { useVideoMixin } from 'shared/hooks/useVideoMixin';\nimport { SeoHelper } from 'shared/utils/SeoHelper';\nimport { useShouldShowSideTableOfContents } from 'shared/views/play/v2/hooks/useShouldShowTableOfContents';\n\nimport { PlayViewProps } from '../PlayViewContainer';\n\nimport { PlayPageV2 } from './components/play-page/PlayPageV2';\n\nconst namespace = 'shared.play';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst videoErrors = {\n notFound: VideoNotFoundError,\n forbidden: {\n privacy: VideoPrivateError\n }\n};\n\nPlayViewV2.defaultProps = {\n queryParams: {}\n};\n\nexport function PlayViewV2(props: PlayViewProps): React.ReactElement {\n const { context, contextId, playNext, mtv } = props.queryParams;\n\n const { setFavourite, canFavourite } = useLiteFavourites(LocationContext.PlayPage);\n\n const { hasPermissions } = usePermissions();\n\n const { isPlugin } = usePluginHelper();\n\n const { activePresentation } = usePresentation();\n\n const featureAccess = useVideoFeatureAccess();\n\n const streamableLibrary = Flight.useBasicFetch<HashObject>(LibraryRequests.streamableLearning());\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const video = Flight.useBasicFetch<Video>(VideoRequests.video(props.id));\n const clips = Flight.useBasicFetch<Clip[]>(\n featureAccess.canViewClips && ClipRequests.videoClips(props.id)\n );\n const interactives = Flight.useBasicFetch<InteractiveMetadata[]>(\n featureAccess.canViewInteractives && InteractiveRequests.videoInteractives(props.id)\n );\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n \n const audiences = Flight.useBasicFetch<PresentationAudience[]>(\n activePresentation &&\n AudienceRequests.audiencesByPresentationId(activePresentation.id)\n );\n \n const shouldShowSideTableOfContents = useShouldShowSideTableOfContents();\n\n const strippedVideo = Flight.useBasicFetch<Video>(video.statusCode === HttpStatus.Forbidden &&\n VideoRequests.video(props.id, PermissionFilterOption.StripMetadata));\n\n const curriculums = useCurriculums(props.id, true);\n\n const relatedVideos = useGetRelatedVideos({\n video: video.data,\n context,\n contextId,\n moviesAndTv: mtv,\n currentUser: currentUser.data\n });\n const pointsOfInterest = useFetchPointsOfInterest(props.id, true);\n\n const regionAlternatives = Flight.useBasicFetch<RegionAlternative[]>(\n VideoRequests.regionAlternatives(props.id)\n );\n\n const breadcrumbs = useBreadcrumbs({ name: video.data?.name });\n\n useSetPageMetadata(PageMetadataHelper.getVideoMetadata({\n content: video.data,\n regionAlternatives: regionAlternatives.data,\n phraseContext: {\n phraseHandler: getPhrase,\n titlePhrase: 'pageTitle',\n descriptionPhrase: 'pageDescription'\n },\n canonicalLink: SeoHelper.getCanonicalLink({ stripPresentationSlug: true }),\n allowIndexing: SeoHelper.allowIndexing(),\n hrefLang: SeoHelper.getContentHrefLang(regionAlternatives.data, (id: string, name: string) => ({\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PLAY_VIDEO,\n args: [ id, TextHelper.slugify(name) ]\n }))\n }));\n\n useHandleObjectError(video, videoErrors, { forbidden: true });\n useVideoMixin(relatedVideos.videos ?? []);\n useDeepLinks({ id: props.id, app: 'videos' });\n useCannotConsumeError(strippedVideo);\n\n React.useEffect(() => {\n if (!video.data || !streamableLibrary.data)\n return;\n\n if (video.data.libraries?.data.find(library => library.id === streamableLibrary.data.objectId))\n Core.ErrorHelper.throw(new NotFoundError());\n }, [ video.hasCompleted, streamableLibrary.hasCompleted ]);\n\n const dataLoaded = (\n video.data &&\n currentUser.hasCompleted &&\n config.hasCompleted &&\n pointsOfInterest.hasCompleted\n );\n\n if (!dataLoaded)\n return <></>;\n\n return (\n <PlayPageV2\n video={video.data}\n clips={clips.data}\n interactives={interactives.data}\n yearGroups={yearGroups.data}\n curriculums={curriculums}\n relatedVideos={relatedVideos}\n setFavourite={setFavourite}\n canFavourite={canFavourite}\n imageCdnUrl={config.data.imageCdnUrl}\n currentUser={currentUser.data}\n pointsOfInterest={pointsOfInterest.items}\n playNext={playNext}\n featureAccess={featureAccess}\n audiences={audiences.data}\n params={props.queryParams}\n canManageVideoAccess={hasPermissions(PermissionName.ManageVideoAccess)}\n shouldShowSideTableOfContents={shouldShowSideTableOfContents}\n tableOfContentsId={props.queryParams?.tocId}\n isPlugin={isPlugin}\n breadcrumbs={breadcrumbs}\n />\n );\n}"],"names":["defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap","generateCacheKey","flightObjs","map","obj","join","useHandleObjectError","_flightObjs","customErrors","ignoreErrors","Array","isArray","useEffect","forEach","useBreadcrumbs","current","match","breadcrumbs","useBuilder","active","getPhrase","videoErrors","PlayViewV2","props","queryParams","context","contextId","playNext","mtv","u","setFavourite","canFavourite","hasPermissions","isPlugin","activePresentation","featureAccess","streamableLibrary","currentUser","video","id","clips","canViewClips","interactives","canViewInteractives","config","yearGroups","data","isAuthenticated","customerId","audiences","shouldShowSideTableOfContents","strippedVideo","curriculums","relatedVideos","moviesAndTv","pointsOfInterest","regionAlternatives","name","content","phraseContext","phraseHandler","titlePhrase","descriptionPhrase","canonicalLink","stripPresentationSlug","allowIndexing","hrefLang","application","action","args","videos","app","libraries","find","library","objectId","hasCompleted","imageCdnUrl","items","params","canManageVideoAccess","tableOfContentsId","tocId","defaultProps"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[3969],{71020:(e,t,n)=>{n.d(t,{_:()=>u});var a=n(32735),i=n(80247),r=n(34152),s=n(83914),o=n(35223);const l={container:"VwD1b",spinner:"eJ85e"};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}function u(e){var t,n,u=(t=(0,r.YD)(),n=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,i,r,s,o=[],l=!0,c=!1;try{if(r=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=r.call(n)).done)&&(o.push(a.value),o.length!==t);l=!0);}catch(e){c=!0,i=e}finally{try{if(!l&&null!=n.return&&(s=n.return(),Object(s)!==s))return}finally{if(c)throw i}}return o}}(t,n)||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}}(t,n)||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=u[0],p=u[1];return a.useEffect((function(){var t;e.fetchOnScroll&&p&&!e.isFetching&&(null===(t=e.fetchNext)||void 0===t||t.call(e,e.nextCursor))}),[p,e.isFetching]),a.createElement("div",{className:"p-3 text-center ".concat(l.container),ref:d},e.isFetching?a.createElement(i.Z,{as:"span",animation:"border",role:"status",className:l.spinner}):a.createElement(s.x,{svgName:o.vn.ChevronDown,className:"svg-container cursor-pointer",size:s.S.Large,onClick:function(){var t;return null===(t=e.fetchNext)||void 0===t?void 0:t.call(e,e.nextCursor)}}))}u.defaultProps={fetchOnScroll:!1}},16930:(e,t,n)=>{n.d(t,{W:()=>d,f:()=>c});var a=n(32735),i=n(23481),r=n(83914),s=n(35223);const o="VSAPU",l="kgeXh";var c,u=i.T.encloseNamespace("shared.widgetButton");!function(e){e[e.Left=0]="Left",e[e.Right=1]="Right"}(c||(c={}));var d=a.memo((function(e){var t,n,i,d=e.direction===c.Left,p=d?s.vn.ChevronLeft:s.vn.ChevronRight;return e.hide?a.createElement(a.Fragment,null):a.createElement("div",{className:"_ejId",style:"videos"===(null===(n=e.state)||void 0===n?void 0:n.contents)?{paddingBottom:56.25/(null===(i=e.state)||void 0===i?void 0:i.viewableItems)+"%"}:{height:"100%"}},e.useGradientBackdrop&&a.createElement("div",{className:d?"".concat("Pt3nx"," ").concat(e.leftGradientClassName):"".concat("ZuAif"," ").concat(e.rightGradientClassName)}),!e.hideExtendedClickableArea&&a.createElement("button",{onClick:e.onClick,className:"".concat("AtsWP"," ").concat(d?o:l),tabIndex:-1}),a.createElement("button",{className:"".concat((t="BVcIS",t+=d?" ".concat(o," ").concat(e.leftButtonClassName):" ".concat(l," ").concat(e.rightButtonClassName))," ").concat("gAsE9"," ").concat(e.className||""),onClick:e.onClick,"aria-label":u(d?"previous":"next")},e.hoverText&&a.createElement("span",{className:"ps-3 pe-2 ".concat("APA36")},e.hoverText),a.createElement(r.x,{svgName:p,size:r.S.Medium,className:"svg-container d-inline-block ".concat("Ev4hr")})))}))},60115:(e,t,n)=>{n.d(t,{K:()=>c});var a=n(32735),i=n(50242),r=n(91967),s=400,o=n(45719);function l(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}function c(e,t,n,c,u,d){var p,m,v,g,y=(p=(0,a.useState)(0),m=2,function(e){if(Array.isArray(e))return e}(p)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,i,r,s,o=[],l=!0,c=!1;try{if(r=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=r.call(n)).done)&&(o.push(a.value),o.length!==t);l=!0);}catch(e){c=!0,i=e}finally{try{if(!l&&null!=n.return&&(s=n.return(),Object(s)!==s))return}finally{if(c)throw i}}return o}}(p,m)||function(e,t){if(e){if("string"==typeof e)return l(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)?l(e,t):void 0}}(p,m)||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.")}()),f=y[0],h=y[1],b=t,L=(0,o.P)((function(t){if(!e)return null;var n=e(t);return n?n.key:null}),c,u);return v={fetchNextPage:function(){if(t&&e&&L)return h((function(e){return e+1})),b(L.nextCursor)},hasMore:!!(null==L?void 0:L.nextCursor),isFetching:null==L?void 0:L.isFetching,scrollContainer:d},g=function(){if(!v.isFetching){if(v.scrollContainer){var e=v.scrollContainer;if(e.getBoundingClientRect().height+e.scrollTop<e.scrollHeight-s)return}else if(window.innerHeight+document.documentElement.scrollTop<document.documentElement.scrollHeight-s)return;v.fetchNextPage()}},(0,a.useEffect)((function(){var e=r.q.throttle(g,200),t=v.scrollContainer||window;return v.hasMore&&t.addEventListener("scroll",e),function(){return t.removeEventListener("scroll",e)}}),[v.hasMore,v.fetchNextPage,v.scrollContainer]),(0,a.useEffect)((function(){L&&L.shouldInitialFetch&&t&&(b(),h((function(e){return e+1})))}),[null==L?void 0:L.shouldInitialFetch,t]),(0,a.useEffect)((function(){var e,t;if((null==L?void 0:L.statusCode)&&r.q.isFunction(n)){var a=+(null===(t=null===(e=L.statusCode)||void 0===e?void 0:e.toString())||void 0===t?void 0:t.substr(0,1));a!==i.k.ClientError&&a!==i.k.ServerError||n(f,L.statusCode)}}),[null==L?void 0:L.statusCode]),{items:null==L?void 0:L.items,hasMore:!!(null==L?void 0:L.nextCursor),nextCursor:null==L?void 0:L.nextCursor,isFetching:null==L?void 0:L.isFetching,totalItems:null==L?void 0:L.totalItems,hasFirstPageCompleted:null==L?void 0:L.hasFirstPageCompleted}}},55493:(e,t,n)=>{n.r(t),n.d(t,{SearchResultsView:()=>Pt,namespace:()=>Et});var a=n(32735),i=n(23481),r=n(65858),s=n(68050),o=n(83345),l=n(79967),c=n(31908),u=n(69111),d=n(2192);function p(e){var t,n,i,s=Object.assign(Object.assign({},e.analyticsData),{id:null===(t=e.data)||void 0===t?void 0:t.id,name:null===(n=e.data)||void 0===n?void 0:n.name}),o=Object.assign(Object.assign({location:r.LZ.ClassificationListItem},e.analyticsOptions),{actionType:r.Vw.Click,entity:r.py.Company,descriptor:r._S.Cover});return a.createElement(d.Q,Object.assign({},e,{analyticsData:s,analyticsOptions:o,coverUrl:null===(i=e.data.logo)||void 0===i?void 0:i.url}))}function m(e){return a.createElement(u.Z,{as:"li",sm:6,md:e.useLargeStyle?6:4,lg:e.useLargeStyle?4:3},a.createElement("div",{className:"position-relative px-1 mb-2"},a.createElement(p,{data:e.item,getChildAppLink:e.appLinks.getCompanyAppLink,getChildAppLinkOptions:function(){var t,n;return null===(n=(t=e.appLinks).getCompanyAppLinkOptions)||void 0===n?void 0:n.call(t,e.item)},analyticsData:{itemIndex:e.itemIndex,search:{query:e.queryParams.query,score:e.item._score,maxScore:e.item._maxScore,featured:e.item._featured},pagePositionIndex:0},isLarge:e.useLargeStyle})))}var v=n(81886),g=n(43500),y=n(36848),f=n(82072);const h="ZhLPS";function b(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 L="search.exchangeVideoGroup";function A(e){var t,n,i=e.item.showCount>=3?3:e.item.showCount,s=v.Q.C$.getCurrentAppLink(),l=null!==(t=s.params)&&void 0!==t?t:{},c=null!==(n=null==l?void 0:l.source)&&void 0!==n?n:[];c&&!Array.isArray(c)&&(c=[c]);var u,d=Object.assign(Object.assign({},s),{params:Object.assign(Object.assign({},l),{source:[].concat((u=c,function(e){if(Array.isArray(e))return b(e)}(u)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(u)||function(e,t){if(e){if("string"==typeof e)return b(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)?b(e,t):void 0}}(u)||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.")}()),[g.fi.ExchangeArchive])})}),p={query:e.queryParams.query,itemIndex:e.itemIndex,pagePositionIndex:e.pagePositionIndex},m={entity:r.py.SearchResults,location:r.LZ.ExchangeSearchGroupItem,actionType:r.Vw.Click,descriptor:r.Bk.ExchangeArchive};return a.createElement("div",{className:0===e.pagePositionIndex?"border-bottom pb-1 mb-3":"border-top border-bottom pt-3 mt-2 pb-1 mb-3"},a.createElement(y.F,{appLink:d,analyticsData:p,analyticsOptions:m},a.createElement("h2",{className:"h4"},a.createElement(o.x,{namespace:L,phrase:"heading"}))),a.createElement("p",null,a.createElement(o.x,{namespace:L,phrase:"message"})," ",a.createElement(y.F,{appLink:e.appLinks.searchSettings,className:"text-info",analyticsData:p,analyticsOptions:Object.assign(Object.assign({},m),{descriptor:r._S.Settings})},a.createElement(o.x,{namespace:L,phrase:"searchSettings"})),"."),a.createElement("div",{className:"position-relative ".concat(h)},e.item.videos.slice(0,i).map((function(t,n){return a.createElement(f.m,{key:n,video:t,yearGroups:e.yearGroups,getVideoAppLink:e.appLinks.getVideoAppLink,getSubTextAppLink:e.appLinks.getSubTextAppLink,presentationAudiences:e.audiences,setFavourite:e.setFavourite,canFavourite:e.canFavourite,analyticsData:{search:{query:e.queryParams.query,score:t._score,maxScore:t._maxScore,featured:t._featured},pagePositionIndex:e.pagePositionIndex},companyLogoFallbackUrl:e.companyLogoFallbackUrl,subTextType:e.subTextType,hasPermissions:e.hasPermissions,getClassroomGuideAppLink:e.appLinks.getClassroomGuideAppLink,getResourceGuidanceAppLink:e.appLinks.getResourceGuidanceAppLink,getInteractiveGuidanceAppLink:e.appLinks.getInteractiveGuidanceAppLink,isPlugin:e.isPlugin})}))),a.createElement("div",{className:"text-center py-2"},a.createElement(y.F,{className:"text-secondary",appLink:d,analyticsData:p,analyticsOptions:m},a.createElement(o.x,{namespace:L,phrase:"seeMore"}))))}var k=n(3626);function x(e){return a.createElement("div",{className:"pb-3"},a.createElement(k.J,{video:e.item,presentationAudiences:e.audiences,getVideoAppLink:function(t,n){return e.appLinks.getVideoAppLink(t,n)},subTextAppLink:e.appLinks.getSubTextAppLink(e.item),setFavourite:e.setFavourite,canFavourite:e.canFavourite,analyticsData:{search:{query:e.queryParams.query,score:e.item._score,maxScore:e.item._maxScore,featured:e.item._featured},pagePositionIndex:e.pagePositionIndex},hideInteractiveBadge:!0,yearGroups:e.yearGroups,companyLogoFallbackUrl:e.companyLogoFallbackUrl,subTextType:e.subTextType,showVideoGuidance:c.M.showVideoGuidance(e.hasPermissions),imageCdnUrl:e.imageCdnUrl,isPlugin:e.isPlugin,getInteractiveGuidanceAppLink:e.appLinks.getInteractiveGuidanceAppLink,getResourceGuidanceAppLink:e.appLinks.getResourceGuidanceAppLink,getClassroomGuideAppLink:e.appLinks.getClassroomGuideAppLink}))}var E=n(98981),S=n(7733);const P={videoList:"eEZEe"};var O="search.playlistWithVideos";function C(e){var t,n=(t=(0,l.k)()).xl||t.xxl?3:2,i=e.playlist.videos.data.slice(0,n),c={actionType:r.Vw.Click,entity:r.py.Playlist,location:r.LZ.PlaylistWithVideos},d=Object.assign(Object.assign({},e.analyticsData),{id:e.playlist.id,name:e.playlist.name});return a.createElement("div",{className:"ps-2 py-2"},a.createElement(s.Z,{className:"g-0 border border-light rounded-3"},a.createElement(u.Z,{xs:4,lg:3,className:"pe-3"},a.createElement(E.tN,{appLink:e.playlistAppLink,analyticsData:e.analyticsData,analyticsOptions:Object.assign(Object.assign({},c),{descriptor:r._S.Cover}),data:e.playlist,presentationAudiences:e.presentationAudiences,bgColourClassNames:S.o,itemStyle:"round-left",imageCdnUrl:e.imageCdnUrl,currentUser:e.currentUser,showCount:!1,showOwner:!0})),a.createElement(u.Z,{xs:8,lg:9},a.createElement("div",{className:"d-flex justify-content-between"},a.createElement("div",{className:"pt-3 mb-n2 ".concat(P.videoList)},null==i?void 0:i.map((function(t){var n=Object.assign(Object.assign({},d),{videoId:t.id,videoName:t.name});return a.createElement("div",{key:t.id,className:"mb-2"},a.createElement(f.m,{video:t,getSubTextAppLink:e.getSubTextAppLink,canFavourite:function(){return!1},setFavourite:null,getVideoAppLink:e.getVideoAppLink,analyticsData:n,analyticsOptions:{entity:r.py.Video,location:r.LZ.PlaylistWithVideos},size:"sm",yearGroups:e.yearGroups,companyLogoFallbackUrl:e.companyLogoFallbackUrl,subTextType:e.subTextType,hasPermissions:e.hasPermissions,isPlugin:e.isPlugin,hideVideoGuidance:!0}))}))),a.createElement("div",{className:"text-end pt-3 pe-3"},a.createElement(y.F,{className:"info-link fw-semibold",appLink:e.playlistAppLink,analyticsData:d,analyticsOptions:Object.assign(Object.assign({},c),{descriptor:r._S.Link})},a.createElement(o.x,{namespace:O,phrase:"seeAllVideos"})))))))}function I(e){return a.createElement("div",{className:"mx-n2"},a.createElement(C,{playlist:e.item,yearGroups:e.yearGroups,playlistAppLink:e.appLinks.getPlaylistAppLink(e.item),presentationAudiences:e.audiences,analyticsData:{search:{query:e.queryParams.query,score:e.item._score,maxScore:e.item._maxScore,featured:e.item._featured},pagePositionIndex:e.pagePositionIndex},imageCdnUrl:e.imageCdnUrl,currentUser:e.currentUser,preloadImage:!0,getSubTextAppLink:e.appLinks.getSubTextAppLink,getVideoAppLink:e.appLinks.getVideoAppLink,companyLogoFallbackUrl:e.companyLogoFallbackUrl,subTextType:e.subTextType,hasPermissions:e.hasPermissions,isPlugin:e.isPlugin}))}var j=n(34004);const T={videoList:"UT8bc"};var F="search.seriesWithVideos";function w(e){var t,n=(t=(0,l.k)()).xl||t.xxl?5:t.lg||t.md?4:3,i=e.series.videos.data.slice(0,n),c={actionType:r.Vw.Click,entity:r.py.Series,location:r.LZ.SeriesWithVideos},d=Object.assign(Object.assign({},e.analyticsData),{id:e.series.id,name:e.series.name});return a.createElement("div",{className:"ps-2 py-2"},a.createElement(s.Z,{className:"g-0 border border-light rounded-3"},a.createElement(u.Z,{xs:4,lg:3,className:"pe-3"},a.createElement(y.F,{appLink:e.seriesAppLink,className:"position-relative",analyticsData:d,analyticsOptions:Object.assign(Object.assign({},c),{descriptor:r._S.TallPoster})},a.createElement(j.r,{series:e.series,presentationAudiences:e.presentationAudiences,preloadImage:e.preloadImage,imageClass:"rounded-start-lg"}))),a.createElement(u.Z,{xs:8,lg:9},a.createElement("div",{className:"d-flex justify-content-between"},a.createElement("div",{className:"pt-3 mb-n2 ".concat(T.videoList)},null==i?void 0:i.map((function(t){var n=Object.assign(Object.assign({},d),{videoId:t.id,videoName:t.name});return t=Object.assign(Object.assign({},t),{series:e.series}),a.createElement("div",{key:t.id,className:"mb-2"},a.createElement(f.m,{video:t,getSubTextAppLink:e.subTextAppLink,canFavourite:function(){return!1},setFavourite:null,getVideoAppLink:e.getVideoAppLink,analyticsData:n,analyticsOptions:{entity:r.py.Video,location:r.LZ.SeriesWithVideos},size:"sm",yearGroups:e.yearGroups,companyLogoFallbackUrl:e.companyLogoFallbackUrl,subTextType:e.subTextType,hasPermissions:e.hasPermissions,isPlugin:e.isPlugin,hideVideoGuidance:!0}))}))),a.createElement("div",{className:"text-end pt-3 pe-3"},a.createElement(y.F,{className:"info-link fw-semibold",appLink:e.seriesAppLink,analyticsData:d,analyticsOptions:Object.assign(Object.assign({},c),{descriptor:r._S.Link})},a.createElement(o.x,{namespace:F,phrase:"seeAllVideos"})))))))}function N(e){return a.createElement("div",{className:"mx-n2"},a.createElement(w,{yearGroups:e.yearGroups,presentationAudiences:e.audiences,series:e.item,seriesAppLink:e.appLinks.getSeriesAppLink(e.item),subTextAppLink:e.appLinks.getSubTextAppLink,getVideoAppLink:e.appLinks.getVideoAppLink,analyticsData:{search:{query:e.queryParams.query,score:e.item._score,maxScore:e.item._maxScore,featured:e.item._featured},pagePositionIndex:e.pagePositionIndex},preloadImage:!0,companyLogoFallbackUrl:e.companyLogoFallbackUrl,subTextType:e.subTextType,hasPermissions:e.hasPermissions,isPlugin:e.isPlugin}))}var _=n(5465),V=n(24900),q=n(11882),R="search.collectionVideoList";function U(e){var t,n=(t=(0,l.k)()).xs?2:t.sm?1:3,i={analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions};return a.createElement(a.Fragment,null,a.createElement("ul",{className:"list-unstyled my-1"},e.videos.slice(0,n).map((function(t){var n,r=!!t.episodeNumber&&!!(null===(n=t.season)||void 0===n?void 0:n.id);return a.createElement("li",{key:"".concat(e.collectionId,":").concat(t.id),className:"d-flex align-items-center"},a.createElement(y.F,Object.assign({},i,{className:"clamp-1",appLink:e.getVideoAppLink(t)}),r&&a.createElement(a.Fragment,null,a.createElement(q.Q,{video:t})," "),t.name))}))),a.createElement(y.F,Object.assign({},i,{className:"info-link",appLink:e.appLink}),a.createElement(o.x,{namespace:R,phrase:"seeAll"})))}var D=n(83657),G=n(18559),M=n(17464),B=n(75163),Z=n(9977),Q=n(54610);const W={overlayContainer:"MnBcv",overlay:"AZSmh"};var $="search.collectionThumbnail";function H(e){var t,n,i,s,c=(0,l.k)(),d="sm"===Z.O.getSize(c,"md"),p=!!(null===(n=null===(t=e.collection.videos)||void 0===t?void 0:t.data)||void 0===n?void 0:n.length),m=p&&e.collection.videos.data.find((function(e){var t;return!!(null===(t=e.thumbnail)||void 0===t?void 0:t.url)})),v=(s=Object.assign(Object.assign({},e.analyticsData),{id:e.collection.id,name:e.collection.name}),m&&(s.videoId=m.id,s.videoName=m.name),s),g="series"===e.collectionType;return a.createElement("div",{className:"row g-0 ".concat(d?"":"py-2")},a.createElement(u.Z,Object.assign({},Z.O.getThumbnailColumns(),{className:"flex-column align-items-flex-start ".concat(d?"pb-2 pe-2":"mb-1 px-2")}),a.createElement("div",{className:"position-relative overflow-hidden ".concat(d?"rounded":"rounded-3")},a.createElement(B.Z,{data:null==m?void 0:m.thumbnail,appLink:e.appLink,imageType:Q.__.Thumbnails,analyticsData:v,analyticsOptions:Object.assign(Object.assign({},e.analyticsOptions),{descriptor:r._S.Thumbnail})},a.createElement(V.z,{type:e.maskType}),a.createElement(_.oy,{type:e.imageFallbackType}),a.createElement("div",{className:"d-flex flex-column align-items-center justify-content-center text-white h-100 ".concat(W.overlay)},a.createElement(o.x,{namespace:$,phrase:"seeAll"}))))),a.createElement(u.Z,Object.assign({},Z.O.getDetailsColumns(),{className:d?"pb-2":"px-2"}),!e.isPlugin&&a.createElement(D.e,{actions:e.getCollectionActions(e.collection,e.showActions,e.collectionType,e.analyticsOptions),className:"float-end mt-n1",actionsDropdownClassName:"btn btn-link ms-1"}),a.createElement(y.F,{appLink:e.appLink,analyticsData:v,analyticsOptions:Object.assign(Object.assign({},e.analyticsOptions),{descriptor:r._S.Title})},a.createElement("h5",{className:"m-0 mb-1"},a.createElement("span",{className:"clamp-1"},e.collection.name))),g&&!e.hideBadges&&a.createElement(M.c,null,a.createElement(G.C,{type:G.g.Rating,data:e.collection.rating}),a.createElement(G.C,{type:G.g.ProductionYear,data:null===(i=e.collection.metadata)||void 0===i?void 0:i.year})),p&&a.createElement(U,{collectionId:e.collection.id,videos:e.collection.videos.data,appLink:e.appLink,analyticsData:v,analyticsOptions:Object.assign(Object.assign({},e.analyticsOptions),{descriptor:r._S.Link}),getVideoAppLink:e.getVideoAppLink})))}function z(e){return a.createElement("div",{className:"position-relative ".concat(h)},a.createElement(H,{analyticsData:{search:{query:e.queryParams.query,score:e.item._score,maxScore:e.item._maxScore,featured:e.item._featured},pagePositionIndex:e.pagePositionIndex},analyticsOptions:{entity:r.py.Playlist,actionType:r.Vw.Click,location:r.LZ.PlaylistListItem},appLink:e.appLinks.getPlaylistAppLink(e.item),showActions:e.showActions,collection:e.item,collectionType:"playlist",maskType:V.O.Playlist,imageFallbackType:_.mS.PlaylistThumbnail,isPlugin:e.isPlugin,getVideoAppLink:e.appLinks.getVideoAppLink,getCollectionActions:e.appLinks.getCollectionActions}))}function J(e){return a.createElement("div",{className:"position-relative ".concat(h)},a.createElement(H,{analyticsData:{search:{query:e.queryParams.query,score:e.item._score,maxScore:e.item._maxScore,featured:e.item._featured},pagePositionIndex:e.pagePositionIndex},analyticsOptions:{entity:r.py.Series,actionType:r.Vw.Click,location:r.LZ.SeriesListItem},appLink:e.appLinks.getSeriesAppLink(e.item),collectionType:"series",collection:e.item,showActions:e.showActions,maskType:V.O.Series,imageFallbackType:_.mS.SeriesThumbnail,hideBadges:!0,isPlugin:e.isPlugin,getVideoAppLink:e.appLinks.getVideoAppLink,getCollectionActions:e.appLinks.getCollectionActions}))}var X=n(9513);function K(e){return a.createElement(u.Z,{as:"li",sm:6,md:e.useLargeStyle?6:4,lg:e.useLargeStyle?4:3},a.createElement("div",{className:"position-relative px-1 mb-2"},a.createElement(X.Vz,{data:e.item,getChildAppLink:e.appLinks.getClassificationAppLink,getChildAppLinkOptions:function(){var t,n;return null===(n=(t=e.appLinks).getClassificationAppLinkOptions)||void 0===n?void 0:n.call(t,e.item)},availablePresentations:e.availablePresentations,analyticsData:{itemIndex:e.itemIndex,search:{query:e.queryParams.query,score:e.item._score,maxScore:e.item._maxScore,featured:e.item._featured},pagePositionIndex:0},isLarge:e.useLargeStyle,highlightOnHover:e.hasTopicDirectories})))}var Y=n(34550),ee=n(66133);function te(e){var t,n=(t=e.item,c.M.isClip(t)?Y.I:c.M.isInteractive(t)?ee.H:f.m);return a.createElement("div",{className:"position-relative ".concat(h)},a.createElement(n,{video:e.item,yearGroups:e.yearGroups,getVideoAppLink:e.appLinks.getVideoAppLink,getSubTextAppLink:e.appLinks.getSubTextAppLink,getPreviewQuestionsAppLink:e.appLinks.getPreviewQuestionsAppLink,presentationAudiences:e.audiences,setFavourite:e.setFavourite,canFavourite:e.canFavourite,analyticsData:{search:{query:e.queryParams.query,score:e.item._score,maxScore:e.item._maxScore,featured:e.item._featured},pagePositionIndex:e.pagePositionIndex},companyLogoFallbackUrl:e.companyLogoFallbackUrl,subTextType:e.subTextType,hasPermissions:e.hasPermissions,imageCdnUrl:e.imageCdnUrl,isPlugin:e.isPlugin,getClassroomGuideAppLink:e.appLinks.getClassroomGuideAppLink,getResourceGuidanceAppLink:e.appLinks.getResourceGuidanceAppLink,getInteractiveGuidanceAppLink:e.appLinks.getInteractiveGuidanceAppLink}))}function ne(e){return function(e){if(Array.isArray(e))return ae(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 ae(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)?ae(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 ae(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 ie=a.memo((function(e){var t,n,i,r,u,d,p,v,g=(0,l.k)(),y=g.xs||g.sm;if(!(null===(t=e.results)||void 0===t?void 0:t.length)&&!(null===(n=e.topics)||void 0===n?void 0:n.totalResults)&&!(null===(i=e.companies)||void 0===i?void 0:i.totalResults))return a.createElement(a.Fragment,null);var f=[].concat(ne(null!==(u=null===(r=e.companies)||void 0===r?void 0:r.results)&&void 0!==u?u:[]),ne(null!==(p=null===(d=e.topics)||void 0===d?void 0:d.results)&&void 0!==p?p:[])),h=Object.assign({useLargeStyle:f.length<4},e);return a.createElement("div",{className:"position-relative"},a.createElement("p",{role:"status",className:"visually-hidden"},a.createElement(o.x,{namespace:"shared.mixedSearchResults",phrase:"ariaSearch"})),!!f.length&&a.createElement(s.Z,{as:"ul",className:"list-unstyled g-0 pb-3 mx-n1"},f.slice(0,8).map((function(e,t){switch(e.type.toLowerCase()){case"company":return a.createElement(m,Object.assign({key:t,item:e,itemIndex:t},h));case"subject":return a.createElement(K,Object.assign({key:t,item:e,itemIndex:t},h))}}))),null===(v=e.results)||void 0===v?void 0:v.map((function(e,t){var n,i,r=f.length?t+1:t;if("isExchangeVideoGroup"in e&&e.isExchangeVideoGroup)return a.createElement(A,Object.assign({key:t,item:e,pagePositionIndex:r},h));switch(null===(n=e.type)||void 0===n?void 0:n.toLowerCase()){case"interactive":case"clip":case"video":return 0===t&&e._featured&&c.M.isVideo(e)?a.createElement(x,Object.assign({key:t,item:e,pagePositionIndex:r},h)):a.createElement(te,Object.assign({key:t,item:e,pagePositionIndex:r},h));case"playlist":return y?a.createElement(z,Object.assign({key:t,item:e,pagePositionIndex:r},h)):a.createElement(I,Object.assign({key:t,item:e,pagePositionIndex:r},h));case"series":return y||!(null===(i=e.tallPoster)||void 0===i?void 0:i.id)?a.createElement(J,Object.assign({key:t,item:e,pagePositionIndex:r},h)):a.createElement(N,Object.assign({key:t,item:e,pagePositionIndex:r},h))}})))})),re=n(93659),se="search.searchSubstitute";function oe(e){return e.substitute?a.createElement("div",{className:"pb-3"},a.createElement("p",{className:"mb-1 h6"},a.createElement(o.x,{namespace:se,phrase:"showingFor"})," ",a.createElement(y.F,{className:"info-link",appLink:e.getAppLink(e.substitute,e.queryParams),appLinkOptions:{replace:!0}},e.substitute)),a.createElement("p",{className:"mb-0 h6 fw-normal"},a.createElement(o.x,{namespace:se,phrase:"searchInsteadFor"}),a.createElement(y.F,{className:"info-link",appLink:e.getAppLink(e.queryParams.query,Object.assign(Object.assign({},e.queryParams),{allowSubstitute:"false"}))},e.queryParams.query),a.createElement(o.x,{namespace:se,phrase:"endOriginal"}))):a.createElement(a.Fragment,null)}var le="search.searchSuggestions";function ce(e){var t;return(null===(t=e.suggestions)||void 0===t?void 0:t.length)?a.createElement("div",{className:"d-flex align-items-center mb-3"},a.createElement(o.x,{namespace:le,phrase:"didYouMean"})," ",e.suggestions.map((function(t,n){return a.createElement(a.Fragment,{key:"".concat(t,":").concat(n)},0!==n&&a.createElement("span",{className:"mx-1"},"•"),a.createElement(y.F,{className:"info-link",appLink:e.getAppLink(t,e.queryParams),appLinkOptions:{replace:!0}},t))}))):a.createElement(a.Fragment,null)}ce.defaultProps={suggestions:[],queryParams:{}};var ue=n(71020),de=n(51365),pe=n(79612),me=n(37802),ve=n(76753),ge=n(14070),ye=n(97291),fe=n(51855),he=n(10671),be=n(27638),Le=n(20354),Ae=n(96560),ke=n(16714),xe=n(72639),Ee=n(12754),Se=n(21750),Pe=n(39151),Oe=n(1666),Ce=n(98064),Ie=n(31949),je=n(22902),Te=n(15311),Fe=n(40424),we=n(87114),Ne=n(24965),_e=n(82817),Ve=n(86698),qe=n(44110),Re=n(23737),Ue=n(1211),De=n(99940),Ge=n(97395),Me=n(2997),Be=n(27898);function Ze(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}function Qe(e){return Qe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Qe(e)}function We(e){var t,n,a,i=e.totalResults,r=null!==(n=null===(t=null==e?void 0:e.results)||void 0===t?void 0:t.filter((function(e){var t,n,a,r,s,o,l,c;if("series"!==e._index&&"playlist"!==e._index)return!0;if("playlist"===e._index){var u=e;return!!((null===(n=null===(t=u.clips)||void 0===t?void 0:t.data)||void 0===n?void 0:n.length)||(null===(r=null===(a=u.interactives)||void 0===a?void 0:a.data)||void 0===r?void 0:r.length)||(null===(o=null===(s=u.videos)||void 0===s?void 0:s.data)||void 0===o?void 0:o.length))||(i--,!1)}return 0!==(null===(c=null===(l=e.videos)||void 0===l?void 0:l.data)||void 0===c?void 0:c.length)||(i--,!1)})))&&void 0!==n?n:[];e.results=r,e.totalResults=i;var s=null===(a=r[0])||void 0===a?void 0:a._score;return Object.assign(Object.assign({},e),{results:Be.Q.mapMaxScoreToSearchResults(r,s)})}var $e={searchV4:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},a=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],i=arguments.length>4?arguments[4]:void 0,r=arguments.length>5?arguments[5]:void 0,s="search:v4:".concat(e,":").concat(a,":").concat(t,":").concat(i);s+=Object.keys(n).map((function(e){var t=n[e];return Array.isArray(t)?t.join(";"):t})).join(";");var o=n,l="".concat(Me.w.FILTER_PARAM_PREFIX,"excludeLibraryExclusive"),c=o[l],u=o.isLearner,d=function(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(n[a]=e[a]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var i=0;for(a=Object.getOwnPropertySymbols(e);i<a.length;i++)t.indexOf(a[i])<0&&Object.prototype.propertyIsEnumerable.call(e,a[i])&&(n[a[i]]=e[a[i]])}return n}(o,["symbol"===Qe(l)?l:l+"","isLearner"]),p={searchType:"content",indices:t.map((function(e){return"video"===e&&c?{index:e,filters:{excludeLibraryExclusive:c}}:{index:e}})),filters:Object.entries(d).reduce((function(e,t){var n,a,i=(a=2,function(e){if(Array.isArray(e))return e}(n=t)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,i,r,s,o=[],l=!0,c=!1;try{if(r=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=r.call(n)).done)&&(o.push(a.value),o.length!==t);l=!0);}catch(e){c=!0,i=e}finally{try{if(!l&&null!=n.return&&(s=n.return(),Object(s)!==s))return}finally{if(c)throw i}}return o}}(n,a)||function(e,t){if(e){if("string"==typeof e)return Ze(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)?Ze(e,t):void 0}}(n,a)||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.")}()),r=i[0],s=i[1];return Object.assign(Object.assign({},e),function(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=Qe(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,"string");if("object"!=Qe(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==Qe(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}({},r.replace("filters.",""),s))}),{}),query:e,allowSubstitute:a,cursor:null!=i?i:void 0,isLearner:!!u,limit:r};return{url:"{gateway}/v4/search",publicUrl:"/api/search/v4",type:De.k.POST,data:p,key:s,formatData:We}},search:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},a=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],i=arguments.length>4?arguments[4]:void 0,r=arguments.length>5?arguments[5]:void 0,s=arguments.length>6?arguments[6]:void 0,o=arguments.length>7?arguments[7]:void 0,l="search:".concat(e,":").concat(a,":").concat(t,":").concat(i);l+=Object.keys(n).map((function(e){var t=n[e];return Array.isArray(t)?t.join(";"):t})).join(";");var c=Object.assign({},Object.assign({index:t,cursor:null!=i?i:void 0,query:e,allowSubstitute:a,limit:r},n));return{url:Ge._.urlBuilder("{gateway}/v3/search",c),publicUrl:Ge._.urlBuilder("/api/search",c),key:l,formatData:We,success:s,error:o}},tagsAndClassifications:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},a=arguments.length>3?arguments[3]:void 0,i=arguments.length>4?arguments[4]:void 0,r=arguments.length>5?arguments[5]:void 0,s=Object.assign({},Object.assign({index:t,cursor:a,query:e},n));return{url:Ge._.urlBuilder("{gateway}/v3/search/tags-and-classifications",s),publicUrl:Ge._.urlBuilder("/api/search/tags-and-classifications",s),key:"filter:options:".concat(e,":").concat(t.join(":"),":").concat(a),success:i,error:r,normalize:!1}}},He=n(97514),ze=n(4499);function Je(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 Xe=n(1048),Ke=n(2284),Ye=n(85594),et=n(24598);function tt(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 nt=["filters.classification","filters.presentation"],at=["filters.classification","filters.presentation","isLearner"];function it(e){return function(e){if(Array.isArray(e))return rt(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 rt(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)?rt(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 rt(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}function st(e){var t,n,a,i,r,s,o=Le.a.useBasicFetch(Ie.N.currentUser()),l=Le.a.useBasicFetch((null===(t=o.data)||void 0===t?void 0:t.id)&&Ie.N.user(o.data.id)),c=Le.a.useBasicFetch(Pe.L.config()),u=Le.a.useBasicFetch((null===(n=o.data)||void 0===n?void 0:n.isAuthenticated)&&Oe.h.yearGroups(o.data.customerId)),d=(0,Te.r)(),p=(0,me.r)(null),m=function(){var e,t,n,a,i,r=Le.a.useBasicFetch(Ie.N.currentUser()),s=(0,Te.r)(),o=(0,me.r)(null),l=Le.a.useBasicFetch(Ce.D.streamableLearning()),c=null===(e=l.data)||void 0===e?void 0:e.objectId,u=s.hasProduct(Ee.x.Exchange)&&o.showExchangeSearchResults,d=Le.a.useBasicFetch((null===(t=r.data)||void 0===t?void 0:t.isAuthenticated)&&Ce.D.domainLibraries(["sharedLibrary","customLibrary","workspace","hostedLibrary","exchange"])),p=null!==(n=d.data)&&void 0!==n?n:[],m=null==p?void 0:p.findIndex((function(e){return e.type===Ae.r.Exchange})),v=null===(a=p[m])||void 0===a?void 0:a.id;if(u||(p=[].concat(it(p.slice(0,m)),it(p.slice(m+1)))),c){var g=null==p?void 0:p.findIndex((function(e){return e.id.toString()===c.toString()}));p=[].concat(it(p.slice(0,g)),it(p.slice(g+1)))}return{hasLibrariesCompleted:l.hasCompleted&&(!(null===(i=r.data)||void 0===i?void 0:i.isAuthenticated)||d.hasCompleted),libraries:p,exchangeLibraryId:v,streamableLibraryId:c,showExchangeSearchResults:u}}(),v=m.hasLibrariesCompleted,g=m.libraries,y=m.exchangeLibraryId,f=m.streamableLibraryId,h=m.showExchangeSearchResults,b=(0,Ve.y)(),L=b.activePresentation,A=b.availablePresentations,k=b.getFallbackPresentation,x=b.hasPresentationsLoaded,E=L||k(),S=null==E?void 0:E.id,P=(0,_e.M)(),O=(0,qe.i)(),C=function(e){var t=(0,(0,je.T)().hasPermissions)(ke.C.StudentExperience),n=(0,Ve.y)(),a=n.availablePresentations,i=n.hasPresentationsLoaded,r=t?e?[null==e?void 0:e.id]:null:null==a?void 0:a.map((function(e){return e.id}));return Le.a.useBasicFetch(i&&r&&Ue.J.schoolLevels(r))}(E),I=null===(i=null===(a=C.data)||void 0===a?void 0:a.schoolLevels)||void 0===i?void 0:i.map((function(e){return e.id})),j=Le.a.useBasicFetch((null==C?void 0:C.data)&&Se.x.topicsFromAllAvailablePresentations(I)),T=function(){var e,t,n=Le.a.useBasicFetch(Ie.N.currentUser()),a=Le.a.useBasicFetch(Ne.Z.ratings(null===(e=n.data)||void 0===e?void 0:e.countryCode)),i=(0,Ve.y)(),r=i.activePresentation,s=i.availablePresentations,o=i.getFallbackPresentation,l=i.hasPresentationsLoaded,c=r||o();return l?(null==s?void 0:s.length)>1||!c||we.i.getMappedPresentationLevel(c.learningLevel)!==xe.p.Level_1?a:Object.assign(Object.assign({},a),{data:null===(t=a.data)||void 0===t?void 0:t.filter((function(e){return e.code&&e.value<64}))}):a}(),F=(0,je.T)(),w=F.hasPermissions,N=F.hasLocalPermissions,_=w(ke.C.StudentExperience),V=w(ke.C.ViewCurriculums),q=N(ke.E.UseSeriesActions),R=w(ke.C.ViewLibraries),U=w(ke.C.ViewMoviesTv),D=function(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],a=arguments.length>2?arguments[2]:void 0,i=arguments.length>3?arguments[3]:void 0,r=arguments.length>4?arguments[4]:void 0,s=(null==n?void 0:n.length)&&He.qr.buildBackendFilterParams(e,n,[a],r,[]),o=Xe.t.pick(s,r?at:nt);o["filters.classificationType"]=Ye.A.Subject,o["filters.status"]=Ke.W.Published,(null==e?void 0:e.moviesAndTv)&&(o["filters.curationTag"]=et.b.MOVIES_AND_TV),i.length&&(o["filters.presentation"]=i.map((function(e){return e.id})));var l=null!==(t=null==i?void 0:i.reduce((function(e,t){return e[t.id]=t,e}),{}))&&void 0!==t?t:{},c=!He.qr.getAppliedIndices(e).includes("classification"),u=$e.search(ze.y.getQuery(e),["classification"],o,"false"!==e.allowSubstitute),d=!c,p=Le.a.useBasicFetch(d&&u);if(!d)return null;if(!p.data)return p;if(!i||(null==i?void 0:i.length)<2)return p;var m,v=(m=p.data.results,function(e){if(Array.isArray(e))return tt(e)}(m)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(m)||function(e,t){if(e){if("string"==typeof e)return tt(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)?tt(e,t):void 0}}(m)||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.")}()).sort((function(e,t){if(e._score!==t._score)return 0;var n=l[e.presentationId],a=l[t.presentationId];return n?a?n.value-a.value:-1:1}));return Object.assign(Object.assign({},p),{data:Object.assign(Object.assign({},p.data),{results:v})})}(e,T.data,S,A,_),G=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>3?arguments[3]:void 0,a=(arguments.length>2?arguments[2]:void 0).map((function(e){return e.id})),i=(null==t?void 0:t.length)&&He.qr.buildBackendFilterParams(e,t,a,!1,[])||{};(null==a?void 0:a.length)&&(i["filters.presentation"]=a);var r,s=!He.qr.getAppliedIndices(e).includes("company"),o=$e.search(ze.y.getQuery(e),["company"],i,"false"!==e.allowSubstitute),l=!s&&n,c=Le.a.useBasicFetch(l&&o);return l?c.data?Object.assign(Object.assign({},c),{data:Object.assign(Object.assign({},c.data),{results:(r=c.data.results,function(e){if(Array.isArray(e))return Je(e)}(r)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(r)||function(e,t){if(e){if("string"==typeof e)return Je(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)?Je(e,t):void 0}}(r)||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.")}())})}):c:null}(e,T.data,A,U);return{queryParams:e,currentUser:o,userDetails:l,config:c,yearGroups:u,products:d,settings:p,curriculums:P,audiences:O,schoolLevels:C,currentPresentation:E,availablePresentations:A,availableTopics:j,ratings:T,topics:D,companies:G,moviesAndTvDashboard:(0,Re.y)({targetType:Fe.ku.MoviesAndTv,queryParams:e}).dashboard,currentPresentationId:S,isLearner:_,canViewCurriculums:V,canUseSeriesActions:q,libraries:g,hasDataLoaded:O.hasCompleted&&x&&o.hasCompleted&&(!(null===(r=o.data)||void 0===r?void 0:r.isAuthenticated)||l.hasCompleted)&&T.hasCompleted&&c.hasCompleted&&A&&(!(null===(s=o.data)||void 0===s?void 0:s.isAuthenticated)||!d.isLoadingProducts)&&!p.isLoadingSettings&&v,exchangeLibraryId:y,streamableLibraryId:f,showExchangeSearchResults:h,hasPermissions:w,hasCustomLibraries:R,hasMoviesAndTv:U}}var ot=n(94644),lt=n(69883),ct=n(60115),ut=n(97816),dt=n(4594);function pt(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}function mt(e){return mt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},mt(e)}function vt(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 gt="search.utils";function yt(e){var t,n,r,s,o,l,u=e.queryParams,d=e.appliedIndices,p=e.backendFilters,m=(0,lt.Z)(),v=Le.a.useGetFetch(),g=Le.a.useGetResponse(null===(t=b())||void 0===t?void 0:t.key),y=function(t){var n,a,i;return!!t&&(null===(i=null===(a=null===(n=e.backendFilters)||void 0===n?void 0:n["".concat(Me.w.FILTER_PARAM_PREFIX,"library")])||void 0===a?void 0:a.some)||void 0===i?void 0:i.call(a,(function(e){return e.toString()===t})))}(null===(n=e.exchangeLibraryId)||void 0===n?void 0:n.toString()),f=e.hasDataLoaded&&(null==d?void 0:d.length)&&e.showExchangeSearchResults&&!y,h=Le.a.useBasicFetch(f&&$e.searchV4(u.query,d,p,"false"!==u.allowSubstitute,null,10));function b(t){if(e.hasDataLoaded&&(null==d?void 0:d.length)){var n=Object.assign({},e.backendFilters);if(e.showExchangeSearchResults&&!y){var a="".concat(Me.w.FILTER_PARAM_PREFIX,"excludeLibraryExclusive");n=Object.assign(Object.assign({},n),function(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=mt(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,"string");if("object"!=mt(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==mt(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}({},a,[].concat(function(e){if(Array.isArray(e))return vt(e)}(i=n[a])||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(i)||function(e,t){if(e){if("string"==typeof e)return vt(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)?vt(e,t):void 0}}(i)||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.")}(),[e.exchangeLibraryId])))}return $e.searchV4(u.query,d,n,"false"!==u.allowSubstitute,t)}var i}function L(e){v(b(e))}var A=(0,ct.K)(b,L,(function(e,t){if(1===e)return(0,ot.r)(t);m.error(i.T.getPhrase(gt,"error"))}),(function(e){return e.results})),k=null===(r=A.items)||void 0===r?void 0:r.filter((function(e){return"video"===e._index||"clip"===e._index}));(0,ut.V)(k);var x=function(e){var t;return a.useMemo((function(){var t,n;if(!(null===(t=e.searchResults)||void 0===t?void 0:t.length)||!(null===(n=e.mixedExchangeSearchResults)||void 0===n?void 0:n.length)||"untouched"===e.groupingType)return e.searchResults;var a,i,r,s=function(e){if(Array.isArray(e))return pt(e)}(r=e.searchResults)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(r)||function(e,t){if(e){if("string"==typeof e)return pt(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)?pt(e,t):void 0}}(r)||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.")}(),o=[],l=!1;e.mixedExchangeSearchResults.forEach((function(e,t){var n,r,s;if(3!==o.length){if(c.M.isVideo(e)&&1===(null===(n=e.libraries.data)||void 0===n?void 0:n.length)&&(null===(s=null===(r=e.libraries.data)||void 0===r?void 0:r[0])||void 0===s?void 0:s.typeId)===dt.E.ExchangeCollection)return void 0===a&&(a=t,i=0,l=!0),l&&i++,void o.push(e);l=!1}}));var u={id:null,type:null,name:null,videos:o,showCount:0===a?1:i,isExchangeVideoGroup:!0,_index:null};return"group"===e.groupingType&&o.length&&s.splice(a,0,u),s}),[e.searchResultsResponse,null===(t=e.searchResults)||void 0===t?void 0:t.length,e.mixedExchangeSearchResults,e.groupingType])}({searchResults:A.items,mixedExchangeSearchResults:null===(s=h.data)||void 0===s?void 0:s.results,searchResultsResponse:g.data,groupingType:e.showExchangeSearchResults?y?"untouched":"group":"omit"});return Object.assign(Object.assign({},A),{hasFirstPageCompleted:A.hasFirstPageCompleted||!e.hasDataLoaded||!(null==d?void 0:d.length),items:x,fetchNext:L,substituteQuery:null===(o=g.data)||void 0===o?void 0:o.substituteQuery,suggestions:null===(l=g.data)||void 0===l?void 0:l.suggestions})}var ft=n(2948),ht=n(86702);function bt(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 Lt=n(23232),At=n(99742),kt="search.searchResultsEmptyState";function xt(e){var t,n,i=e.scotland&&"nessie"===(null===(n=null===(t=e.query)||void 0===t?void 0:t.trim())||void 0===n?void 0:n.toLowerCase())?At.W.EmptyStates.Search.RESULTS_SCOTLAND:At.W.EmptyStates.Search.RESULTS;return a.createElement(o.D.Provider,{value:kt},a.createElement(Lt.u,null,a.createElement(Lt.u.Image,{src:i}),a.createElement(Lt.u.Heading,null,e.query?a.createElement(o.x,{phrase:"headingWithQuery",options:{query:e.query}}):a.createElement(o.x,{phrase:"headingWithoutQuery"})),a.createElement(Lt.u.Info,null,a.createElement(o.x,{phrase:"info"}),a.createElement(y.F,{className:"info-link",appLink:{application:ye.O.SUBJECT,action:ge.e.Subjects.CLASSIFICATION_ALL}},a.createElement(o.x,{phrase:"topicsAppLink"})))))}var Et="search.searchResults",St=i.T.encloseNamespace(Et);function Pt(e){var t,n,i,s,o,l,c,u,d,p,m,v,g=e.queryParams,y=void 0===g?{}:g,f=(0,he._)({location:he.i.VideoItem}),h=(0,be.u)(r.LZ.VideoThumbnail),b=h.setFavourite,L=h.canFavourite,A=(0,fe.G)().isPlugin,k=(0,me.r)(null).hasTopicDirectories,x=st(y),E=ze.y.getBackendFilters(x),S=!!(null==E?void 0:E.appliedIndices.length),P=(v=S&&E,Le.a.useBasicFetch(v&&$e.tagsAndClassifications(v.queryParams.query,v.appliedIndices,v.backendFilters))),O=yt(Object.assign(Object.assign({},E),x)),C=ze.y.getFilters(x,null==E?void 0:E.inaccessibleIndices,S&&P);(0,pe.M)(ve.CG.getDefaultMetadata({title:null!==(t=y.query)&&void 0!==t?t:"",phraseContext:{phraseHandler:St,titlePhrase:"pageTitle",descriptionPhrase:"pageDescription"},allowIndexing:!1}));var I,j,T,F,w,N,_=x.hasDataLoaded&&C,V=O.hasFirstPageCompleted&&(!x.topics||x.topics.hasCompleted)&&(!x.companies||x.companies.hasCompleted)&&(!S||P.hasCompleted)&&!!C,q=(null===(n=O.items)||void 0===n?void 0:n.length)||(null===(s=null===(i=x.topics)||void 0===i?void 0:i.data)||void 0===s?void 0:s.totalResults)||(null===(l=null===(o=x.companies)||void 0===o?void 0:o.data)||void 0===l?void 0:l.totalResults);return I=V,w=(0,ft.D)(ht.y.SHOW_SEARCH_MASK,!0),N=2,j=function(e){if(Array.isArray(e))return e}(w)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,i,r,s,o=[],l=!0,c=!1;try{if(r=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=r.call(n)).done)&&(o.push(a.value),o.length!==t);l=!0);}catch(e){c=!0,i=e}finally{try{if(!l&&null!=n.return&&(s=n.return(),Object(s)!==s))return}finally{if(c)throw i}}return o}}(w,N)||function(e,t){if(e){if("string"==typeof e)return bt(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)?bt(e,t):void 0}}(w,N)||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.")}(),T=j[0],F=j[1],a.useEffect((function(){T&&I&&F(!1)}),[I]),_?a.createElement("div",{className:"px-4"},a.createElement(oe,{substitute:O.substituteQuery,queryParams:y,getAppLink:ze.y.getSearchAppLink}),!O.substituteQuery&&a.createElement(ce,{suggestions:O.suggestions,queryParams:y,getAppLink:ze.y.getSearchAppLink}),!!x.audiences.data&&!!x.ratings.data&&!!x.availableTopics.data&&a.createElement(re.J,{queryParams:y,mainFilters:null==C?void 0:C.mainFilters,moreFilters:null==C?void 0:C.moreFilters,analyticsOptions:{entity:r.py.SearchResults,location:r.LZ.SearchFilters},appLink:{application:ye.O.SEARCH,action:ge.e.Search.HOME},isFetchingOptions:P.isFetching}),V&&a.createElement("section",null,q?a.createElement(de.M.Provider,{value:f},a.createElement(ie,{queryParams:y,results:O.items,topics:null===(c=x.topics)||void 0===c?void 0:c.data,companies:null===(u=x.companies)||void 0===u?void 0:u.data,setFavourite:b,canFavourite:L,audiences:!y.moviesAndTv&&x.audiences.data,currentUser:x.currentUser.data,imageCdnUrl:x.config.data.imageCdnUrl,availablePresentations:x.availablePresentations,showActions:!x.isLearner&&x.canUseSeriesActions,hasPermissions:x.hasPermissions,yearGroups:x.yearGroups.data,isPlugin:A,appLinks:ze.y.getAppLinks(x.currentPresentation,x.availablePresentations,y.moviesAndTv),hasTopicDirectories:k,subTextType:"series"})):a.createElement(xt,{query:y.query,scotland:null!==(m=!!(null===(p=null===(d=x.currentPresentation)||void 0===d?void 0:d.description)||void 0===p?void 0:p.toLowerCase().includes("scotland")))&&void 0!==m&&m}),(O.hasMore||O.isFetching)&&a.createElement(ue._,{isFetching:O.isFetching,fetchNext:O.fetchNext,nextCursor:O.nextCursor,fetchOnScroll:!0}))):a.createElement(a.Fragment,null)}},24965:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(97395),i={ratings:function(e){return{url:"/api/domain/v2/me/ratings",publicUrl:a._.urlBuilder("/api/domain/v2/me/ratings",{countryCode:e}),key:"ratings",formatData:function(e){return e.sort((function(e,t){return e.value-t.value}))}}}}},44110:(e,t,n)=>{n.d(t,{i:()=>s});var a=n(20354),i=n(89454),r=n(86698),s=function(){var e=(0,r.y)({redirectOnError:!0}),t=e.activePresentation,n=e.getFallbackPresentation,s=t||n();return a.a.useBasicFetch(!!s&&i.O.presentationAudiences(s.id))}},97816:(e,t,n)=>{n.d(t,{V:()=>d});var a=n(32735),i=n(20354),r=n(21750),s=n(31949),o=n(1575),l=n(31908);function c(e,t){if(e){if("string"==typeof e)return u(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)?u(e,t):void 0}}function u(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}function d(e){var t,n,d=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},p=i.a.useBasicFetch(s.N.currentUser()),m=a.useRef(new Set),v=function(e){return e?Array.isArray(e)?e.filter((function(e){return!!e&&(l.M.isVideo(e)||l.M.isClip(e))})):"data"in e?e.data.filter((function(e){return!!e&&(l.M.isVideo(e)||l.M.isClip(e))})):[]:[]}(e),g=v.map((function(e){return e.id})),y=(t=a.useState([]),n=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,i,r,s,o=[],l=!0,c=!1;try{if(r=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=r.call(n)).done)&&(o.push(a.value),o.length!==t);l=!0);}catch(e){c=!0,i=e}finally{try{if(!l&&null!=n.return&&(s=n.return(),Object(s)!==s))return}finally{if(c)throw i}}return o}}(t,n)||c(t,n)||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.")}()),f=y[0],h=y[1];a.useEffect((function(){if((null==g?void 0:g.length)&&p.hasCompleted){var e=[];g.forEach((function(t){m.current.has(t)||(e.push(t),m.current.add(t))})),e.length&&h((function(t){var n,a=[].concat(function(e){return function(e){if(Array.isArray(e))return u(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||c(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.")}()}(t),[o.R.videoMixinAssocs(e,d.flightNamespace)]);return(null===(n=p.data)||void 0===n?void 0:n.isAuthenticated)&&a.push(r.x.hasCurriculumLinks(e,null,d.flightNamespace)),a}))}}),[null==g?void 0:g.length,p.hasCompleted]),i.a.useBasicFetchAll(f)}}}]);
2
+ //# sourceMappingURL=3969-6d7c342d0c-lite.chunk.js.map