@clickview/lite 0.52.3-dev.0 → 0.52.3-dev.2

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 (291) hide show
  1. package/dist/bundles.json +1 -1
  2. package/dist/css/{1760-lite-d230b51c8b.chunk.css → 1019-lite-402889ede4.chunk.css} +2 -1
  3. package/dist/css/{6094-lite-d230b51c8b.chunk.css → 2548-lite-402889ede4.chunk.css} +2 -1
  4. package/dist/css/{6546-lite-991b6e8255.chunk.css → 6596-lite-e22262b911.chunk.css} +2 -1
  5. package/dist/css/{1867-lite-991b6e8255.chunk.css → 9010-lite-e22262b911.chunk.css} +2 -1
  6. package/dist/languages/en.json +1 -1
  7. package/dist/scripts/{1760-33f1791560-lite.chunk.js → 1019-8fc84c7c2e-lite.chunk.js} +2 -2
  8. package/dist/scripts/{1760-33f1791560-lite.chunk.js.map → 1019-8fc84c7c2e-lite.chunk.js.map} +1 -1
  9. package/dist/scripts/1063-5a732288dc-lite.chunk.js +2 -0
  10. package/dist/scripts/1063-5a732288dc-lite.chunk.js.map +1 -0
  11. package/dist/scripts/{9173-2392d447a6-lite.chunk.js → 1104-f057c6dea1-lite.chunk.js} +3 -3
  12. package/dist/scripts/{9173-2392d447a6-lite.chunk.js.map → 1104-f057c6dea1-lite.chunk.js.map} +1 -1
  13. package/dist/scripts/{1125-aac132b88f-lite.chunk.js → 1125-c5138ef662-lite.chunk.js} +2 -2
  14. package/dist/scripts/1125-c5138ef662-lite.chunk.js.map +1 -0
  15. package/dist/scripts/1169-9b7d850bab-lite.chunk.js +2 -0
  16. package/dist/scripts/1169-9b7d850bab-lite.chunk.js.map +1 -0
  17. package/dist/scripts/{1379-082bbab71a-lite.chunk.js → 1379-ca519ec56b-lite.chunk.js} +3 -3
  18. package/dist/scripts/{1379-082bbab71a-lite.chunk.js.map → 1379-ca519ec56b-lite.chunk.js.map} +1 -1
  19. package/dist/scripts/1672-0d1fc90529-lite.chunk.js +3 -0
  20. package/dist/scripts/1672-0d1fc90529-lite.chunk.js.map +1 -0
  21. package/dist/scripts/1725-99450ed637-lite.chunk.js +2 -0
  22. package/dist/scripts/1725-99450ed637-lite.chunk.js.map +1 -0
  23. package/dist/scripts/1891-5914c54eca-lite.chunk.js +2 -0
  24. package/dist/scripts/1891-5914c54eca-lite.chunk.js.map +1 -0
  25. package/dist/scripts/1896-399a91d18c-lite.chunk.js +2 -0
  26. package/dist/scripts/1896-399a91d18c-lite.chunk.js.map +1 -0
  27. package/dist/scripts/193-797b89797a-lite.chunk.js +2 -0
  28. package/dist/scripts/193-797b89797a-lite.chunk.js.map +1 -0
  29. package/dist/scripts/209-fe96739cb5-lite.chunk.js +2 -0
  30. package/dist/scripts/209-fe96739cb5-lite.chunk.js.map +1 -0
  31. package/dist/scripts/2134-b8d5c46887-lite.chunk.js +2 -0
  32. package/dist/scripts/2134-b8d5c46887-lite.chunk.js.map +1 -0
  33. package/dist/scripts/2142-f71cf5c71f-lite.chunk.js +2 -0
  34. package/dist/scripts/2142-f71cf5c71f-lite.chunk.js.map +1 -0
  35. package/dist/scripts/2402-ff1b4adf1a-lite.chunk.js +2 -0
  36. package/dist/scripts/2402-ff1b4adf1a-lite.chunk.js.map +1 -0
  37. package/dist/scripts/2548-c5dd2899df-lite.chunk.js +2 -0
  38. package/dist/scripts/2548-c5dd2899df-lite.chunk.js.map +1 -0
  39. package/dist/scripts/2952-c3a826b714-lite.chunk.js +2 -0
  40. package/dist/scripts/2952-c3a826b714-lite.chunk.js.map +1 -0
  41. package/dist/scripts/3404-23125f10ea-lite.chunk.js +2 -0
  42. package/dist/scripts/3404-23125f10ea-lite.chunk.js.map +1 -0
  43. package/dist/scripts/3633-f3609526a5-lite.chunk.js +2 -0
  44. package/dist/scripts/3633-f3609526a5-lite.chunk.js.map +1 -0
  45. package/dist/scripts/3728-eed9e78985-lite.chunk.js +2 -0
  46. package/dist/scripts/3728-eed9e78985-lite.chunk.js.map +1 -0
  47. package/dist/scripts/4063-5fa157657f-lite.chunk.js +2 -0
  48. package/dist/scripts/4063-5fa157657f-lite.chunk.js.map +1 -0
  49. package/dist/scripts/4182-ba03f3ce3c-lite.chunk.js +2 -0
  50. package/dist/scripts/4182-ba03f3ce3c-lite.chunk.js.map +1 -0
  51. package/dist/scripts/4273-e42f763f00-lite.chunk.js +3 -0
  52. package/dist/scripts/4273-e42f763f00-lite.chunk.js.map +1 -0
  53. package/dist/scripts/4395-d0815835c8-lite.chunk.js +2 -0
  54. package/dist/scripts/4395-d0815835c8-lite.chunk.js.map +1 -0
  55. package/dist/scripts/4502-af4903784e-lite.chunk.js +2 -0
  56. package/dist/scripts/4502-af4903784e-lite.chunk.js.map +1 -0
  57. package/dist/scripts/4850-bb9541d3ed-lite.chunk.js +2 -0
  58. package/dist/scripts/4850-bb9541d3ed-lite.chunk.js.map +1 -0
  59. package/dist/scripts/5573-4352a3537e-lite.chunk.js +2 -0
  60. package/dist/scripts/5573-4352a3537e-lite.chunk.js.map +1 -0
  61. package/dist/scripts/5595-3acc9593bf-lite.chunk.js +2 -0
  62. package/dist/scripts/5595-3acc9593bf-lite.chunk.js.map +1 -0
  63. package/dist/scripts/5606-69c0ca2b97-lite.chunk.js +2 -0
  64. package/dist/scripts/5606-69c0ca2b97-lite.chunk.js.map +1 -0
  65. package/dist/scripts/5877-628732da21-lite.chunk.js +2 -0
  66. package/dist/scripts/5877-628732da21-lite.chunk.js.map +1 -0
  67. package/dist/scripts/5936-cd98109a7b-lite.chunk.js +2 -0
  68. package/dist/scripts/5936-cd98109a7b-lite.chunk.js.map +1 -0
  69. package/dist/scripts/{5940-f335f8c290-lite.chunk.js → 5940-2767b40c40-lite.chunk.js} +2 -2
  70. package/dist/scripts/5940-2767b40c40-lite.chunk.js.map +1 -0
  71. package/dist/scripts/6054-1e9b86d631-lite.chunk.js +2 -0
  72. package/dist/scripts/6054-1e9b86d631-lite.chunk.js.map +1 -0
  73. package/dist/scripts/6138-2ef7ee071a-lite.chunk.js +2 -0
  74. package/dist/scripts/6138-2ef7ee071a-lite.chunk.js.map +1 -0
  75. package/dist/scripts/{624-7ab5fb3f3b-lite.chunk.js → 624-09b51a9d32-lite.chunk.js} +3 -3
  76. package/dist/scripts/{624-7ab5fb3f3b-lite.chunk.js.map → 624-09b51a9d32-lite.chunk.js.map} +1 -1
  77. package/dist/scripts/6263-8a7931bf51-lite.chunk.js +2 -0
  78. package/dist/scripts/6263-8a7931bf51-lite.chunk.js.map +1 -0
  79. package/dist/scripts/6290-28ae0e8a60-lite.chunk.js +2 -0
  80. package/dist/scripts/6290-28ae0e8a60-lite.chunk.js.map +1 -0
  81. package/dist/scripts/6470-9a700cabce-lite.chunk.js +2 -0
  82. package/dist/scripts/6470-9a700cabce-lite.chunk.js.map +1 -0
  83. package/dist/scripts/6481-035d218a77-lite.chunk.js +2 -0
  84. package/dist/scripts/6481-035d218a77-lite.chunk.js.map +1 -0
  85. package/dist/scripts/6532-59e9abf69d-lite.chunk.js +2 -0
  86. package/dist/scripts/6532-59e9abf69d-lite.chunk.js.map +1 -0
  87. package/dist/scripts/6596-f75129c039-lite.chunk.js +2 -0
  88. package/dist/scripts/6596-f75129c039-lite.chunk.js.map +1 -0
  89. package/dist/scripts/6604-9adec889c7-lite.chunk.js +2 -0
  90. package/dist/scripts/6604-9adec889c7-lite.chunk.js.map +1 -0
  91. package/dist/scripts/6746-3f501b95cf-lite.chunk.js +2 -0
  92. package/dist/scripts/6746-3f501b95cf-lite.chunk.js.map +1 -0
  93. package/dist/scripts/714-c00ad56229-lite.chunk.js +2 -0
  94. package/dist/scripts/714-c00ad56229-lite.chunk.js.map +1 -0
  95. package/dist/scripts/7163-84c2b15394-lite.chunk.js +2 -0
  96. package/dist/scripts/7163-84c2b15394-lite.chunk.js.map +1 -0
  97. package/dist/scripts/7178-ed74c33056-lite.chunk.js +2 -0
  98. package/dist/scripts/7178-ed74c33056-lite.chunk.js.map +1 -0
  99. package/dist/scripts/7223-0bfab7e57a-lite.chunk.js +2 -0
  100. package/dist/scripts/7223-0bfab7e57a-lite.chunk.js.map +1 -0
  101. package/dist/scripts/7234-84c087600e-lite.chunk.js +2 -0
  102. package/dist/scripts/7234-84c087600e-lite.chunk.js.map +1 -0
  103. package/dist/scripts/7267-fd5085f5c9-lite.chunk.js +2 -0
  104. package/dist/scripts/7267-fd5085f5c9-lite.chunk.js.map +1 -0
  105. package/dist/scripts/7633-6c1ffdd082-lite.chunk.js +2 -0
  106. package/dist/scripts/7633-6c1ffdd082-lite.chunk.js.map +1 -0
  107. package/dist/scripts/7679-8f2d6a3487-lite.chunk.js +2 -0
  108. package/dist/scripts/7679-8f2d6a3487-lite.chunk.js.map +1 -0
  109. package/dist/scripts/7757-7e293be936-lite.chunk.js +2 -0
  110. package/dist/scripts/7757-7e293be936-lite.chunk.js.map +1 -0
  111. package/dist/scripts/7795-c6d38bc3e5-lite.chunk.js +2 -0
  112. package/dist/scripts/7795-c6d38bc3e5-lite.chunk.js.map +1 -0
  113. package/dist/scripts/7818-230982fc27-lite.chunk.js +2 -0
  114. package/dist/scripts/7818-230982fc27-lite.chunk.js.map +1 -0
  115. package/dist/scripts/8323-360541a2a8-lite.chunk.js +3 -0
  116. package/dist/scripts/8323-360541a2a8-lite.chunk.js.map +1 -0
  117. package/dist/scripts/8709-c4f1068232-lite.chunk.js +2 -0
  118. package/dist/scripts/8709-c4f1068232-lite.chunk.js.map +1 -0
  119. package/dist/scripts/8982-a3dc4a6b3c-lite.chunk.js +2 -0
  120. package/dist/scripts/8982-a3dc4a6b3c-lite.chunk.js.map +1 -0
  121. package/dist/scripts/9010-024dcc8f9a-lite.chunk.js +2 -0
  122. package/dist/scripts/9010-024dcc8f9a-lite.chunk.js.map +1 -0
  123. package/dist/scripts/9016-82d7e0afb9-lite.chunk.js +3 -0
  124. package/dist/scripts/9016-82d7e0afb9-lite.chunk.js.map +1 -0
  125. package/dist/scripts/9173-f9708ec0de-lite.chunk.js +2 -0
  126. package/dist/scripts/9173-f9708ec0de-lite.chunk.js.map +1 -0
  127. package/dist/scripts/9230-ae200d2bd3-lite.chunk.js +3 -0
  128. package/dist/scripts/9230-ae200d2bd3-lite.chunk.js.map +1 -0
  129. package/dist/scripts/9359-1fb4413e0d-lite.chunk.js +2 -0
  130. package/dist/scripts/9359-1fb4413e0d-lite.chunk.js.map +1 -0
  131. package/dist/scripts/{9395-90b87097fa-lite.chunk.js → 9395-e1a02b01ce-lite.chunk.js} +3 -3
  132. package/dist/scripts/{9395-90b87097fa-lite.chunk.js.map → 9395-e1a02b01ce-lite.chunk.js.map} +1 -1
  133. package/dist/scripts/9399-d7a92ce84a-lite.chunk.js +2 -0
  134. package/dist/scripts/9399-d7a92ce84a-lite.chunk.js.map +1 -0
  135. package/dist/scripts/{9478-99486906b9-lite.chunk.js → 9478-abfa7ed3cc-lite.chunk.js} +3 -3
  136. package/dist/scripts/{9478-99486906b9-lite.chunk.js.map → 9478-abfa7ed3cc-lite.chunk.js.map} +1 -1
  137. package/dist/scripts/{953-cbc7f0571e-lite.chunk.js → 953-225db845ab-lite.chunk.js} +3 -3
  138. package/dist/scripts/{953-cbc7f0571e-lite.chunk.js.map → 953-225db845ab-lite.chunk.js.map} +1 -1
  139. package/dist/scripts/9620-95e6cc7b2b-lite.chunk.js +3 -0
  140. package/dist/scripts/9620-95e6cc7b2b-lite.chunk.js.map +1 -0
  141. package/dist/scripts/9719-9736913451-lite.chunk.js +3 -0
  142. package/dist/scripts/9719-9736913451-lite.chunk.js.map +1 -0
  143. package/dist/scripts/999-bdc7956050-lite.chunk.js +2 -0
  144. package/dist/scripts/999-bdc7956050-lite.chunk.js.map +1 -0
  145. package/dist/scripts/bundle-9f8729bedb.min.js +3 -0
  146. package/dist/scripts/bundle-9f8729bedb.min.js.map +1 -0
  147. package/package.json +1 -1
  148. package/dist/scripts/1125-aac132b88f-lite.chunk.js.map +0 -1
  149. package/dist/scripts/1169-534a29a204-lite.chunk.js +0 -2
  150. package/dist/scripts/1169-534a29a204-lite.chunk.js.map +0 -1
  151. package/dist/scripts/1672-672f298d82-lite.chunk.js +0 -3
  152. package/dist/scripts/1672-672f298d82-lite.chunk.js.map +0 -1
  153. package/dist/scripts/1725-075015497e-lite.chunk.js +0 -2
  154. package/dist/scripts/1725-075015497e-lite.chunk.js.map +0 -1
  155. package/dist/scripts/1818-64a145c5fe-lite.chunk.js +0 -2
  156. package/dist/scripts/1818-64a145c5fe-lite.chunk.js.map +0 -1
  157. package/dist/scripts/1820-993521951d-lite.chunk.js +0 -2
  158. package/dist/scripts/1820-993521951d-lite.chunk.js.map +0 -1
  159. package/dist/scripts/1867-260ef9f8c2-lite.chunk.js +0 -2
  160. package/dist/scripts/1867-260ef9f8c2-lite.chunk.js.map +0 -1
  161. package/dist/scripts/1891-e80f9f17ee-lite.chunk.js +0 -2
  162. package/dist/scripts/1891-e80f9f17ee-lite.chunk.js.map +0 -1
  163. package/dist/scripts/1896-32a6eeda5c-lite.chunk.js +0 -2
  164. package/dist/scripts/1896-32a6eeda5c-lite.chunk.js.map +0 -1
  165. package/dist/scripts/193-f08b054631-lite.chunk.js +0 -2
  166. package/dist/scripts/193-f08b054631-lite.chunk.js.map +0 -1
  167. package/dist/scripts/209-de1729d1b1-lite.chunk.js +0 -2
  168. package/dist/scripts/209-de1729d1b1-lite.chunk.js.map +0 -1
  169. package/dist/scripts/2134-bca2f4697e-lite.chunk.js +0 -2
  170. package/dist/scripts/2134-bca2f4697e-lite.chunk.js.map +0 -1
  171. package/dist/scripts/2703-591ccf069c-lite.chunk.js +0 -2
  172. package/dist/scripts/2703-591ccf069c-lite.chunk.js.map +0 -1
  173. package/dist/scripts/3404-171fdee802-lite.chunk.js +0 -2
  174. package/dist/scripts/3404-171fdee802-lite.chunk.js.map +0 -1
  175. package/dist/scripts/3633-66d28be6f8-lite.chunk.js +0 -2
  176. package/dist/scripts/3633-66d28be6f8-lite.chunk.js.map +0 -1
  177. package/dist/scripts/3728-d7ecfc6667-lite.chunk.js +0 -2
  178. package/dist/scripts/3728-d7ecfc6667-lite.chunk.js.map +0 -1
  179. package/dist/scripts/4182-7aecc28a6f-lite.chunk.js +0 -2
  180. package/dist/scripts/4182-7aecc28a6f-lite.chunk.js.map +0 -1
  181. package/dist/scripts/4395-64da004753-lite.chunk.js +0 -2
  182. package/dist/scripts/4395-64da004753-lite.chunk.js.map +0 -1
  183. package/dist/scripts/4502-2e30d86385-lite.chunk.js +0 -2
  184. package/dist/scripts/4502-2e30d86385-lite.chunk.js.map +0 -1
  185. package/dist/scripts/5143-b6896dad98-lite.chunk.js +0 -2
  186. package/dist/scripts/5143-b6896dad98-lite.chunk.js.map +0 -1
  187. package/dist/scripts/5573-6cd98b69f2-lite.chunk.js +0 -2
  188. package/dist/scripts/5573-6cd98b69f2-lite.chunk.js.map +0 -1
  189. package/dist/scripts/5595-c4397e12a8-lite.chunk.js +0 -2
  190. package/dist/scripts/5595-c4397e12a8-lite.chunk.js.map +0 -1
  191. package/dist/scripts/5606-6c25caedc4-lite.chunk.js +0 -2
  192. package/dist/scripts/5606-6c25caedc4-lite.chunk.js.map +0 -1
  193. package/dist/scripts/5877-ddfaf6a7f5-lite.chunk.js +0 -2
  194. package/dist/scripts/5877-ddfaf6a7f5-lite.chunk.js.map +0 -1
  195. package/dist/scripts/5936-6fe810d3cb-lite.chunk.js +0 -2
  196. package/dist/scripts/5936-6fe810d3cb-lite.chunk.js.map +0 -1
  197. package/dist/scripts/5940-f335f8c290-lite.chunk.js.map +0 -1
  198. package/dist/scripts/6054-14d4ceeae3-lite.chunk.js +0 -2
  199. package/dist/scripts/6054-14d4ceeae3-lite.chunk.js.map +0 -1
  200. package/dist/scripts/6094-24c430efb3-lite.chunk.js +0 -2
  201. package/dist/scripts/6094-24c430efb3-lite.chunk.js.map +0 -1
  202. package/dist/scripts/6138-21ae042a7b-lite.chunk.js +0 -2
  203. package/dist/scripts/6138-21ae042a7b-lite.chunk.js.map +0 -1
  204. package/dist/scripts/6263-3455286798-lite.chunk.js +0 -2
  205. package/dist/scripts/6263-3455286798-lite.chunk.js.map +0 -1
  206. package/dist/scripts/6290-56412c6663-lite.chunk.js +0 -2
  207. package/dist/scripts/6290-56412c6663-lite.chunk.js.map +0 -1
  208. package/dist/scripts/6415-b29029aa1b-lite.chunk.js +0 -2
  209. package/dist/scripts/6415-b29029aa1b-lite.chunk.js.map +0 -1
  210. package/dist/scripts/6470-6216086d63-lite.chunk.js +0 -2
  211. package/dist/scripts/6470-6216086d63-lite.chunk.js.map +0 -1
  212. package/dist/scripts/6481-899eba8b3d-lite.chunk.js +0 -2
  213. package/dist/scripts/6481-899eba8b3d-lite.chunk.js.map +0 -1
  214. package/dist/scripts/6532-a6b65c91a7-lite.chunk.js +0 -2
  215. package/dist/scripts/6532-a6b65c91a7-lite.chunk.js.map +0 -1
  216. package/dist/scripts/6546-faa6f93a0e-lite.chunk.js +0 -2
  217. package/dist/scripts/6546-faa6f93a0e-lite.chunk.js.map +0 -1
  218. package/dist/scripts/6587-ba8e36be0b-lite.chunk.js +0 -2
  219. package/dist/scripts/6587-ba8e36be0b-lite.chunk.js.map +0 -1
  220. package/dist/scripts/6604-92193d6d68-lite.chunk.js +0 -2
  221. package/dist/scripts/6604-92193d6d68-lite.chunk.js.map +0 -1
  222. package/dist/scripts/6746-b5b2739944-lite.chunk.js +0 -2
  223. package/dist/scripts/6746-b5b2739944-lite.chunk.js.map +0 -1
  224. package/dist/scripts/679-e18e7956d0-lite.chunk.js +0 -2
  225. package/dist/scripts/679-e18e7956d0-lite.chunk.js.map +0 -1
  226. package/dist/scripts/714-432082f4fa-lite.chunk.js +0 -2
  227. package/dist/scripts/714-432082f4fa-lite.chunk.js.map +0 -1
  228. package/dist/scripts/7178-e603ea6b58-lite.chunk.js +0 -2
  229. package/dist/scripts/7178-e603ea6b58-lite.chunk.js.map +0 -1
  230. package/dist/scripts/7223-135cc7d675-lite.chunk.js +0 -2
  231. package/dist/scripts/7223-135cc7d675-lite.chunk.js.map +0 -1
  232. package/dist/scripts/729-c704d587d3-lite.chunk.js +0 -2
  233. package/dist/scripts/729-c704d587d3-lite.chunk.js.map +0 -1
  234. package/dist/scripts/7679-b01da2c09d-lite.chunk.js +0 -2
  235. package/dist/scripts/7679-b01da2c09d-lite.chunk.js.map +0 -1
  236. package/dist/scripts/7757-320e868e90-lite.chunk.js +0 -2
  237. package/dist/scripts/7757-320e868e90-lite.chunk.js.map +0 -1
  238. package/dist/scripts/7795-3ca0855d3a-lite.chunk.js +0 -2
  239. package/dist/scripts/7795-3ca0855d3a-lite.chunk.js.map +0 -1
  240. package/dist/scripts/7818-2eafc5f812-lite.chunk.js +0 -2
  241. package/dist/scripts/7818-2eafc5f812-lite.chunk.js.map +0 -1
  242. package/dist/scripts/8323-99cb03891e-lite.chunk.js +0 -3
  243. package/dist/scripts/8323-99cb03891e-lite.chunk.js.map +0 -1
  244. package/dist/scripts/8766-bcc7f11eac-lite.chunk.js +0 -2
  245. package/dist/scripts/8766-bcc7f11eac-lite.chunk.js.map +0 -1
  246. package/dist/scripts/8800-335154fe11-lite.chunk.js +0 -2
  247. package/dist/scripts/8800-335154fe11-lite.chunk.js.map +0 -1
  248. package/dist/scripts/8982-63c31685bf-lite.chunk.js +0 -2
  249. package/dist/scripts/8982-63c31685bf-lite.chunk.js.map +0 -1
  250. package/dist/scripts/9016-0c078a39cb-lite.chunk.js +0 -3
  251. package/dist/scripts/9016-0c078a39cb-lite.chunk.js.map +0 -1
  252. package/dist/scripts/9226-c236c0eeb1-lite.chunk.js +0 -2
  253. package/dist/scripts/9226-c236c0eeb1-lite.chunk.js.map +0 -1
  254. package/dist/scripts/9230-6dee40b1fb-lite.chunk.js +0 -3
  255. package/dist/scripts/9230-6dee40b1fb-lite.chunk.js.map +0 -1
  256. package/dist/scripts/9308-362f86711f-lite.chunk.js +0 -3
  257. package/dist/scripts/9308-362f86711f-lite.chunk.js.map +0 -1
  258. package/dist/scripts/9359-cc085d48a4-lite.chunk.js +0 -2
  259. package/dist/scripts/9359-cc085d48a4-lite.chunk.js.map +0 -1
  260. package/dist/scripts/9399-2a314327ac-lite.chunk.js +0 -2
  261. package/dist/scripts/9399-2a314327ac-lite.chunk.js.map +0 -1
  262. package/dist/scripts/9620-f1d717b02b-lite.chunk.js +0 -3
  263. package/dist/scripts/9620-f1d717b02b-lite.chunk.js.map +0 -1
  264. package/dist/scripts/9719-cf7d4172b6-lite.chunk.js +0 -3
  265. package/dist/scripts/9719-cf7d4172b6-lite.chunk.js.map +0 -1
  266. package/dist/scripts/bundle-724fc2e388.min.js +0 -3
  267. package/dist/scripts/bundle-724fc2e388.min.js.map +0 -1
  268. /package/dist/css/{5143-lite-676baa8218.chunk.css → 1063-lite-676baa8218.chunk.css} +0 -0
  269. /package/dist/css/{9173-lite-b361d438f6.chunk.css → 1104-lite-b361d438f6.chunk.css} +0 -0
  270. /package/dist/css/{679-lite-00eb7dadb2.chunk.css → 2952-lite-00eb7dadb2.chunk.css} +0 -0
  271. /package/dist/css/{4860-lite-93d7fad455.chunk.css → 4063-lite-93d7fad455.chunk.css} +0 -0
  272. /package/dist/css/{9308-lite-a3c7435ba4.chunk.css → 4273-lite-a3c7435ba4.chunk.css} +0 -0
  273. /package/dist/css/{729-lite-93d7fad455.chunk.css → 4850-lite-93d7fad455.chunk.css} +0 -0
  274. /package/dist/css/{8766-lite-8c5d7658ec.chunk.css → 7163-lite-8c5d7658ec.chunk.css} +0 -0
  275. /package/dist/css/{1818-lite-5ef1706d69.chunk.css → 7234-lite-5ef1706d69.chunk.css} +0 -0
  276. /package/dist/css/{6415-lite-707657102b.chunk.css → 9173-lite-707657102b.chunk.css} +0 -0
  277. /package/dist/css/{1820-lite-c88eb54bee.chunk.css → 999-lite-c88eb54bee.chunk.css} +0 -0
  278. /package/dist/scripts/{1379-082bbab71a-lite.chunk.js.LICENSE.txt → 1104-f057c6dea1-lite.chunk.js.LICENSE.txt} +0 -0
  279. /package/dist/scripts/{1672-672f298d82-lite.chunk.js.LICENSE.txt → 1379-ca519ec56b-lite.chunk.js.LICENSE.txt} +0 -0
  280. /package/dist/scripts/{624-7ab5fb3f3b-lite.chunk.js.LICENSE.txt → 1672-0d1fc90529-lite.chunk.js.LICENSE.txt} +0 -0
  281. /package/dist/scripts/{8323-99cb03891e-lite.chunk.js.LICENSE.txt → 4273-e42f763f00-lite.chunk.js.LICENSE.txt} +0 -0
  282. /package/dist/scripts/{9173-2392d447a6-lite.chunk.js.LICENSE.txt → 624-09b51a9d32-lite.chunk.js.LICENSE.txt} +0 -0
  283. /package/dist/scripts/{9230-6dee40b1fb-lite.chunk.js.LICENSE.txt → 8323-360541a2a8-lite.chunk.js.LICENSE.txt} +0 -0
  284. /package/dist/scripts/{9016-0c078a39cb-lite.chunk.js.LICENSE.txt → 9016-82d7e0afb9-lite.chunk.js.LICENSE.txt} +0 -0
  285. /package/dist/scripts/{9308-362f86711f-lite.chunk.js.LICENSE.txt → 9230-ae200d2bd3-lite.chunk.js.LICENSE.txt} +0 -0
  286. /package/dist/scripts/{9395-90b87097fa-lite.chunk.js.LICENSE.txt → 9395-e1a02b01ce-lite.chunk.js.LICENSE.txt} +0 -0
  287. /package/dist/scripts/{9478-99486906b9-lite.chunk.js.LICENSE.txt → 9478-abfa7ed3cc-lite.chunk.js.LICENSE.txt} +0 -0
  288. /package/dist/scripts/{953-cbc7f0571e-lite.chunk.js.LICENSE.txt → 953-225db845ab-lite.chunk.js.LICENSE.txt} +0 -0
  289. /package/dist/scripts/{9620-f1d717b02b-lite.chunk.js.LICENSE.txt → 9620-95e6cc7b2b-lite.chunk.js.LICENSE.txt} +0 -0
  290. /package/dist/scripts/{9719-cf7d4172b6-lite.chunk.js.LICENSE.txt → 9719-9736913451-lite.chunk.js.LICENSE.txt} +0 -0
  291. /package/dist/scripts/{bundle-724fc2e388.min.js.LICENSE.txt → bundle-9f8729bedb.min.js.LICENSE.txt} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/2142-f71cf5c71f-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/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 { useResizeListener } from 'libs/shared/hooks/UseResizeListener';\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 containerRef = React.useRef<HTMLDivElement>(null);\n\n const [ expanded, setExpanded ] = React.useState(false);\n const memoClientHeight = React.useRef<number>(0);\n const [ showButton, setShowButton ] = React.useState(containerRef.current?.scrollHeight > memoClientHeight.current);\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 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 (\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, Tag, VideoTypes } from 'libs/shared/interfaces';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './video-details.scss';\n\nconst namespace = 'shared.videoDetailsV2';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface CommaListProps {\n label: string;\n items: BasePaginatedCollection<BaseObject>;\n className?: string;\n}\n\nfunction CommaList(props: CommaListProps): React.ReactElement {\n const { label, items, className } = props;\n\n const hasItems = items && items.data && items.data.length;\n\n if (!hasItems)\n return <></>;\n\n const commaSeperated = items.data.map(i => i.name).join(', ');\n\n return (\n <div className={className}>{label}: {commaSeperated}</div>\n );\n}\n\nfunction DetailsSection(props: VideoDetailsWithScrollbarV2Props): React.ReactElement {\n const { video } = props;\n\n if (!VideoHelper.isVideo(video) && !VideoHelper.isClip(video))\n return <></>;\n\n const parentVideo = VideoHelper.getParentVideo(video);\n\n return (\n <div className={video.description ? 'col-md-5 ps-md-3 pt-3 pt-md-0' : 'col-12'}>\n <h2 className='h6 mb-1'><Text phrase='details' /></h2>\n {!!parentVideo.productionYear && (\n <div className='mb-1'>\n <Text phrase='productionYear' options={{ year: parentVideo.productionYear }} />\n </div>\n )}\n <CommaList\n label={getPhrase('productionCompanies', { smartCount: parentVideo.productionCompanies?.data?.length })}\n items={parentVideo.productionCompanies}\n className='mb-1'\n />\n <CommaList\n label={getPhrase('distributors', { smartCount: parentVideo.distributors?.data?.length })}\n items={parentVideo.distributors}\n className='mb-1'\n />\n <CommaList\n label={getPhrase('producers', { smartCount: parentVideo.producers?.data?.length })}\n items={parentVideo.producers}\n className='mb-1'\n />\n <CommaList\n label={getPhrase('directors', { smartCount: parentVideo.directors?.data?.length })}\n items={parentVideo.directors}\n className='mb-1'\n />\n {!!parentVideo.dateBroadcast && (\n <div className='mb-1'>\n <Text phrase='dateBroadcast' options={{ date: DateHelper.format(parentVideo.dateBroadcast, 'DD/MM/YYYY') }} />\n </div>\n )}\n {!!parentVideo.channel && (\n <div className='mb-1'>\n <Text phrase='channel' options={{ channel: parentVideo.channel.name }} />\n </div>\n )}\n {!!(!video._isClickViewCurated?.value && video.dateCreated) && (\n <div className='mb-1'>\n <Text phrase='dateUploaded' options={{ date: DateHelper.format(video.dateCreated, 'DD/MM/YYYY') }} />\n </div>\n )}\n </div>\n );\n}\n\ninterface VideoDetailsWithScrollbarV2Props {\n video: VideoTypes;\n getTagAppLink?: (tag: Tag) => Core.AppLink;\n onLaunchImmersiveReader?: () => void;\n onExitImmersiveReader?: () => void;\n maxHeight?: number;\n suppressInteractivity?: boolean;\n hideTags?: boolean;\n headingRef?: React.MutableRefObject<Map<PlayPageAnchor, HTMLElement>>;\n 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\"};","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}\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}`}>{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}`}>{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 return (\n <div>\n <h2 className='h6 my-2'><Text namespace={namespace} phrase='heading' /></h2>\n\n <div>\n {props.pointsOfInterest.map(poi => {\n return (\n <PointOfInterest\n key={poi.startTime}\n poi={poi}\n suppressInteractivity={props.suppressInteractivity}\n onClickPoiItem={props.onClickPoiItem}\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';\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';\n\nexport interface InteractiveWidgetItemV2Props extends FixedWidgetItemProps<InteractiveMetadata> {\n imageCdnUrl: string;\n questionsAppLink: Core.AppLink;\n setFavourite?: FavouriteFunc;\n canFavourite?: CanFavouriteFunc;\n yearGroups: YearGroup[];\n isPlugin: boolean;\n showOwner?: boolean;\n}\n\nexport const InteractiveWidgetItemV2 = React.memo(function(props: InteractiveWidgetItemV2Props): JSX.Element {\n const { data: interactive, thumbnailSize, preloadImage } = props;\n\n const questionsAppLink: Core.AppLink = {\n ...props.questionsAppLink,\n args: [props.data.id]\n };\n\n const questionsNumber = interactive._timepoints?.value?.length;\n\n return (\n <div className={`flex-shrink-0 px-1 col-6 col-sm-4`}>\n <VideoThumbnail\n type='static'\n textPosition={ThumbnailTextPosition.Independent}\n video={interactive}\n appLink={props.getAppLink(interactive)}\n imageOptions={{ size: thumbnailSize }}\n preload={preloadImage}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n hideDuration={false}\n imageCdnUrl={props.imageCdnUrl}\n isPlugin={props.isPlugin}\n showOwner={props.showOwner}\n />\n\n <div className='mt-2'>\n <ThumbnailText\n {...props}\n video={interactive}\n appLink={props.getAppLink(interactive)}\n />\n </div>\n\n <div className='mt-1'>\n <AppLink appLink={questionsAppLink} className='cursor-pointer'>\n <Text namespace={namespace} phrase='previewQuestions' options={{ count: questionsNumber, smartCount: questionsNumber }}/>\n </AppLink>\n </div>\n\n </div>\n );\n});\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { CanFavouriteFunc, Clip, FavouriteFunc, Interactive, InteractiveMetadata, Video, YearGroup } from 'libs/shared/interfaces';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { InteractiveWidgetItemV2, InteractiveWidgetItemV2Props } from './InteractiveWidgetItemV2';\n\nconst namespace = 'shared.playPageInteractivesV2';\n\ninterface PlayPageInteractivesProps {\n canViewInteractives: boolean;\n video: Video | Clip;\n interactives: InteractiveMetadata[];\n imageCdnUrl: string;\n analyticsData: HashObject;\n yearGroups: YearGroup[];\n setFavourite: FavouriteFunc;\n canFavourite: CanFavouriteFunc;\n isPlugin: boolean;\n headingRef?: React.MutableRefObject<Map<PlayPageAnchor, HTMLElement>>;\n}\n\nexport function PlayPageInteractives(props: PlayPageInteractivesProps): JSX.Element {\n if (!props.canViewInteractives || !props.interactives?.length)\n return <></>;\n\n function getAppLink() {\n if (VideoHelper.isVideo(props.video))\n return {\n action: Actions.Videos.VIDEO_INTERACTIVES,\n application: AppChannels.VIDEOS,\n args: [ props.video.id, TextHelper.slugify(props.video.name) ]\n };\n\n return {\n action: Actions.Clips.CLIP_INTERACTIVES,\n application: AppChannels.CLIPS,\n args: [ props.video.id, TextHelper.slugify(props.video.name) ]\n };\n }\n\n const title = LanguageService.getPhrase(namespace, 'interactives', { count: props.interactives.length });\n \n return (\n <section className='play-page-section'\n id={PlayPageAnchor.Interactives}\n ref={el => {\n (el && props.headingRef?.current) && props.headingRef.current.set(PlayPageAnchor.Interactives, el);\n }}\n >\n <FixedWidget<InteractiveWidgetItemV2Props>\n name={title}\n contents={WidgetContents.InteractivesV2}\n collection={props.interactives}\n prefetched\n getChildAppLink={(interactive: Interactive) => {\n return {\n application: AppChannels.INTERACTIVES,\n action: Actions.Interactives.VIEW_INTERACTIVE,\n args: [ interactive.id, TextHelper.slugify(interactive.name) ]\n };\n }}\n appLink={getAppLink()}\n childComponent={InteractiveWidgetItemV2}\n extraChildComponentProps={{\n yearGroups: props.yearGroups,\n setFavourite: props.setFavourite,\n canFavourite: props.canFavourite,\n imageCdnUrl: props.imageCdnUrl,\n questionsAppLink: {\n application: AppChannels.INTERACTIVES,\n action: Actions.Interactives.PREVIEW_QUESTIONS\n },\n isPlugin: props.isPlugin,\n showOwner: true\n }}\n analyticsData={props.analyticsData}\n />\n </section>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { EntityType, LocationContext, SignUpDescriptors, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { Clip, Link, Resource, Video } from 'libs/shared/interfaces';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { DownloadHelper } from 'libs/shared/utils/DownloadHelper';\n\nimport { ResourceWidgetItemV2, ResourceWidgetItemV2Props } from './ResourceWidgetItemV2';\n\nconst namespace = 'shared.playPageResources';\n\nfunction getResources(\n video: Video,\n isLearner: boolean\n): Array<Resource | Link> {\n const resources = video.resources?.data ?? [];\n const links = video.links?.data ?? [];\n\n if (!isLearner)\n return [ ...resources, ...links ];\n\n const filteredResources = resources.filter(r => {\n return [ 'additional-materials', 'student-activity' ].includes(r.metadata?.resourceType);\n });\n\n return [ ...filteredResources, ...links ];\n}\n\ninterface PlayPageResourcesProps {\n video: Video | Clip;\n imageCdnUrl: string;\n canViewResources: boolean;\n getAppLink: (resource: Resource) => Core.AppLink;\n analyticsData: HashObject;\n resourceThumbnailFallbackUrl: string;\n headingRef?: React.MutableRefObject<Map<PlayPageAnchor, HTMLElement>>;\n}\n\nexport function PlayPageResources(props: PlayPageResourcesProps): JSX.Element {\n const { hasPermissions } = usePermissions();\n\n function onClickDownload(resource: Resource): void {\n DownloadHelper.downloadResource(\n resource,\n props.analyticsData,\n { location: LocationContext.PlayPage, actionType: UserAction.Download, entity: EntityType.Resource }\n );\n }\n\n const resources = getResources(props.video, hasPermissions(PermissionName.StudentExperience));\n const title = LanguageService.getPhrase(namespace, 'resources', { count: resources.length });\n\n if (!resources.length)\n return <></>;\n\n return (\n <section\n id={PlayPageAnchor.Resources}\n className='play-page-section'\n ref={el => {\n (el && props.headingRef?.current) && props.headingRef.current.set(PlayPageAnchor.Resources, el);\n }}\n >\n <FixedWidget<ResourceWidgetItemV2Props>\n name={title}\n contents={WidgetContents.PlayPageResourcesV2}\n collection={resources}\n prefetched\n childComponent={ResourceWidgetItemV2}\n extraChildComponentProps={{\n imageCdnUrl: props.imageCdnUrl,\n imageErrorFallbackUrl: props.resourceThumbnailFallbackUrl,\n actionBehaviour: props.canViewResources ? 'normal' : 'public',\n location: 'play-page',\n titlePosition: 'below',\n onClickDownload: props.canViewResources ? onClickDownload : null\n }}\n getChildAppLink={props.getAppLink}\n analyticsOptions={(() => {\n if (props.canViewResources)\n return {};\n \n return {\n workflowPhase: WorkflowPhase.Start,\n descriptor: SignUpDescriptors.SignUp\n };\n })()}\n analyticsData={props.analyticsData}\n />\n </section>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"imageStyle\":\"bYRn8\",\"item\":\"CjuxU\",\"dashboard\":\"IuRN0\",\"playPage\":\"VdJvp\",\"aspectRatio\":\"QK8Jh\",\"outerContainer\":\"eiC_H\",\"innerContainer\":\"huIRg\",\"actions\":\"FsIJm\",\"titleBelow\":\"DpeSr\",\"thumbnailContainer\":\"ZbalL\",\"titleAbove\":\"PwOSX\",\"teacherPack\":\"ZHAEj\",\"text\":\"k3ei6\",\"hoverState\":\"BLrWL\",\"atomGuide\":\"Qz8JE\",\"studentActivity\":\"qNspk\",\"additionalMaterials\":\"R0huw\",\"userUploaded\":\"H_zGf\",\"imageTypeResource\":\"AgeLb\",\"download\":\"DKneu\"};","import React from 'react';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, EntityType, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { ResourceThumbnail } from 'libs/shared/components/resource-thumbnail/ResourceThumbnail';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { TitleSubText } from 'libs/shared/components/title-sub-text/TitleSubText';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { TypeBadge } from 'libs/shared/components/type-badge/TypeBadge';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { SeoConstants } from 'libs/shared/constants/SeoConstants';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ResourceFileType } from 'libs/shared/enums/ResourceFileType';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Link, Resource, ResourceType } from 'libs/shared/interfaces';\nimport { ImageOptions } from 'libs/shared/utils/ImageHelper';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\nimport { ResourceHelper } from 'libs/shared/utils/ResourceHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './resource-widget-item.scss';\n\nfunction getColour(resourceType?: ResourceType): string {\n switch (resourceType) {\n case 'atom-guide':\n return styles.atomGuide;\n case 'student-activity':\n return styles.studentActivity;\n case 'teacher-pack':\n return styles.teacherPack;\n case 'additional-materials':\n return styles.additionalMaterials;\n default:\n return styles.userUploaded;\n }\n}\n\nexport function useCanPreviewResource(data: Resource | Link, actionBehaviour: 'normal' | 'public'): boolean {\n const breakpoints = useBreakpoints();\n\n /**\n * When viewing publicly, the resource applink will\n * prompt the user to sign-up (not preview the underlying resource)\n */\n if (actionBehaviour === 'public')\n return true;\n\n if (breakpoints.xs || breakpoints.sm)\n return false;\n\n if (data.type !== 'resource')\n return false;\n \n // Require metadata\n if (!('metadata' in data))\n return false;\n\n // We can preview images\n if (data.metadata.type === ResourceFileType.Image)\n return true;\n\n // If we are a pdf and have a url\n if (data.metadata.type === ResourceFileType.Pdf)\n return !!data.url;\n\n // If we have a pdf assoc\n return !!data.pdf?.url;\n}\n\ninterface ResourceTheme {\n containerClass?: string;\n thumbnailContainerClass?: string;\n}\n\nexport interface ResourceTileProps {\n data: Resource | Link;\n imageCdnUrl: string;\n imageErrorFallbackUrl?: string;\n theme?: ResourceTheme;\n\n titlePosition: 'above' | 'below' | 'none';\n hideTypeBadge?: boolean;\n onClickDownload?: (resource: Resource) => void;\n applyHoverState?: boolean;\n preloadImage: boolean;\n actionBehaviour?: 'normal' | 'public';\n dynamicRatioImageOptions?: ImageOptions;\n}\n\nResourceTileV2.defaultProps = {\n preloadImage: true,\n actionBehaviour: 'normal'\n};\n\n/**\n * This component intentionally doesn't contain an appLink/download link\n * so that the resource download behaviour can be handled differently depending\n * on where this is rendered (e.g. primary play page vs embedded player)\n */\nexport function ResourceTileV2(props: ResourceTileProps): JSX.Element {\n let metadata = null;\n\n if ('metadata' in props.data) {\n metadata = props.data.metadata;\n }\n\n const isResource = MasterTypeHelper.isType<Resource>(props.data, MasterType.Resource);\n\n function getInnerContainerClass(resourceType: ResourceType): string {\n let baseClass = `\n d-flex flex-column align-items-center justify-content-end rounded-3 h-100\n position-relative ${getColour(resourceType)} ${styles.innerContainer}`;\n\n if (props.theme?.containerClass) {\n baseClass += ` ${props.theme.containerClass}`;\n } else {\n baseClass += ` pt-3 px-3`;\n }\n\n if (props.applyHoverState) {\n baseClass += ` ${styles.hoverState}`;\n }\n\n return baseClass;\n }\n\n function onDownload() {\n if (!MasterTypeHelper.isResource(props.data))\n return;\n\n if (typeof props.onClickDownload === 'function') {\n props.onClickDownload(props.data);\n }\n }\n\n return (\n <>\n <div className={styles.aspectRatio}>\n <div className={styles.outerContainer}>\n <div className={getInnerContainerClass(metadata?.resourceType)}>\n {props.titlePosition === 'above' && (\n <Tooltip title={props.data.name}>\n <h3 className={`text-center text-break h5 mb-3 ${styles.text}`}>\n <span className='clamp-1'>{props.data.name}</span>\n </h3>\n </Tooltip>\n )}\n\n <div className={`\n ${props.theme?.thumbnailContainerClass ?? ''} w-75 overflow-hidden \n ${styles.thumbnailContainer} ${props.titlePosition === 'above' ? styles.titleAbove : ''} \n ${styles.imageStyle}\n `}>\n <ResourceThumbnail\n resource={props.data}\n imageCdnUrl={props.imageCdnUrl}\n imageErrorFallbackUrl={props.imageErrorFallbackUrl}\n preloadImage={props.preloadImage}\n dynamicRatioImageOptions={props.dynamicRatioImageOptions}\n />\n </div>\n\n {isResource && props.onClickDownload && props.actionBehaviour === 'normal' && (\n <div className={styles.actions}>\n <DivButton\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n onDownload();\n }}\n className={`${styles.download} d-flex align-items-center justify-content-center`}\n >\n <SvgContainer svgName={cvSvgLibrary.Download} />\n </DivButton>\n </div>\n )}\n\n {!props.hideTypeBadge && isResource && (\n <TypeBadge typeId={MasterType.Resource} />\n )}\n </div>\n </div>\n </div>\n {props.titlePosition === 'below' && (\n <div className={`mt-1 ${styles.titleBelow}`}>\n {(\n MasterTypeHelper.isType<Resource>(props.data, MasterType.Resource) &&\n !!props.data?.metadata?.resourceType\n ) && (\n <TitleSubText>\n {ResourceHelper.getResourceTypeName(props.data.metadata.resourceType)}\n </TitleSubText>\n )}\n\n <h3 className='h6 clamp-2'>\n {props.data.name}\n </h3>\n </div>\n )}\n </>\n );\n}\n\nexport interface ResourceWidgetItemV2Props extends ResourceTileProps, FixedWidgetItemProps<Resource | Link> {\n location: 'play-page' | 'dashboard';\n}\n\nexport const ResourceWidgetItemV2 = React.memo(function(props: ResourceWidgetItemV2Props): JSX.Element {\n // Mobile is not allowed to preview\n const canPreview = useCanPreviewResource(props.data, props.actionBehaviour);\n\n function getLocationClass(): string {\n if (props.location === 'play-page')\n return styles.playPage;\n\n return styles.dashboard;\n }\n\n const analyticsData = { ...props.analyticsData, ...props.data };\n\n const analyticsOptions: AnalyticsOptions = {\n ...props.analyticsOptions,\n actionType: UserAction.Click,\n entity: props.data.typeId === MasterType.Resource ? EntityType.Resource : EntityType.Link\n };\n\n function logAction(): void {\n AnalyticsHelper.logUserAction(analyticsData, analyticsOptions);\n }\n\n const tileProps: ResourceTileProps = {\n ...props,\n // Apply the hover state if we have a url or the resource can be previewed\n applyHoverState: canPreview || !!props.data.url\n };\n\n return (\n <div className={`px-1 flex-shrink-0 ${styles.item} ${getLocationClass()} ${SeoConstants.RESOURCE_ITEM_SELECTOR}`}>\n {(() => {\n const className = `d-block no-decoration`;\n\n // Handle resource links\n if (props.data.type === 'link') {\n return (\n <a href={props.data.url} target='_blank' className={className} onClick={logAction}>\n <ResourceTileV2 {...tileProps} />\n </a>\n );\n }\n\n if (canPreview) {\n /**\n * Previewing resources in a public context will always display the sign-up popup, so there \n * will never be a full URL. For SEO purposes, we deliberately use a span over an anchor\n * to ensure we're not creating self-referencing elements that will burn crawl budget.\n */\n if (props.actionBehaviour === 'public') {\n return (\n <div className={`${className} cursor-pointer d-inline`} onClick={() => {\n logAction();\n AppLinkHelper.trigger(props.getAppLink(props.data));\n }}>\n <ResourceTileV2 {...tileProps} />\n </div>\n );\n }\n\n return (\n <AppLink\n appLink={props.getAppLink(props.data)}\n className={className}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <ResourceTileV2 {...tileProps} />\n </AppLink>\n );\n }\n\n // URLs cannot be previewed\n if (props.data.url) {\n return (\n <a href={props.data.url} className={className} onClick={logAction}>\n <ResourceTileV2 {...tileProps} />\n </a>\n );\n }\n\n // Theres no url, so don't render an <a>\n return (\n <div className={className}>\n <ResourceTileV2 {...tileProps} />\n </div>\n );\n })()}\n </div>\n );\n});","// extracted by mini-css-extract-plugin\nexport default {\"itemsWrapper\":\"m6mGm\",\"anchorWrapper\":\"QptZj\",\"default\":\"_AZa8\",\"selectedItem\":\"Nuiel\",\"disabled\":\"WIzWJ\",\"floatIcon\":\"ARudn\",\"arrowIcon\":\"tEF5Q\",\"listIcon\":\"Ql2wi\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { ScrollHelper } from 'libs/common/backbone/utils/ScrollHelper';\n\nimport { EntityType, HashObject, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\n\nimport styles from './table-of-contents-list.scss';\n\nexport interface TableOfContentsItem<T=string> {\n name: string;\n id: T;\n}\n\ninterface TableOfContentsProps<T> {\n items: TableOfContentsItem<T>[];\n activeId: string;\n appLink?: Core.AppLink;\n analyticsData?: HashObject;\n setControlledId: (arg: string) => void;\n // set to true if the TOC is controlled by a local state rather than query params\n localState?: boolean;\n getAppLink?: (args: TableOfContentsItem<T>) => Core.AppLink;\n onItemClick?: (args: TableOfContentsItem<T>) => void;\n}\n\nexport function TableOfContentsList<T extends string>(props: TableOfContentsProps<T>): JSX.Element {\n const analyticsOptions = {\n actionType: UserAction.Click,\n entity: EntityType.Widget,\n location: LocationContext.TableOfContents\n };\n\n 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 ScrollHelper.preventScrollTop();\n props.setControlledId(item.id);\n\n props.onItemClick?.(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 ScrollHelper.preventScrollTop();\n props.setControlledId(item.id);\n\n props.onItemClick?.(item);\n }}\n analyticsData={{\n ...props.analyticsData,\n id: item.id,\n name: item.name\n }}\n analyticsOptions={analyticsOptions}\n >\n <div className={`${!props.activeId && idx === 0 ? styles.default : ''} `}>\n {item.name}\n </div>\n </AppLink>\n );\n })}\n </div>\n );\n}","import React from 'react';\n\ntype TableOfContentsActiveOption = {\n setActiveId: (id: string) => void;\n headingElements: Element[];\n controlledId?: string;\n setControlledId?: (arg: string) => void;\n}\n\nlet timer: number;\n\nexport const useTableOfContentsActiveHeading = (\n { setActiveId, headingElements, controlledId, setControlledId }: TableOfContentsActiveOption\n) => {\n const scrollPositionRef = React.useRef(0);\n\n React.useEffect(() => {\n const callback = (headings: IntersectionObserverEntry[]) => {\n headings.forEach(heading => {\n if (controlledId) {\n setActiveId(controlledId);\n // can use scrollEnd event when the new event type is supported\n timer = window.setTimeout(() => {\n setControlledId('');\n }, 800);\n return;\n }\n if (heading.isIntersecting) {\n setActiveId(heading.target.id);\n scrollPositionRef.current = window.scrollY;\n } else {\n const scrollDistance = scrollPositionRef.current - window.scrollY;\n const isScrollingUp = scrollDistance > 0;\n const curIndex = headingElements.findIndex(h => h.id === heading.target.id);\n const prevHeading = headingElements[curIndex - 1];\n if (isScrollingUp && prevHeading?.id) {\n setActiveId(prevHeading?.id);\n }\n }\n });\n };\n\n const observer = new IntersectionObserver(callback, {\n // rootMargin top: same as the cv-nav-height\n rootMargin: '-67px 0px -80% 0px'\n });\n\n headingElements.forEach(element => observer.observe(element));\n\n return () => {\n timer && window.clearTimeout(timer);\n observer.disconnect();\n };\n }, [ setActiveId, headingElements.length, controlledId ]);\n};\n\n","import { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, EntityType, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { Resource } from '../interfaces';\n\nlet downloadRef: HTMLIFrameElement = null;\n\nexport const DownloadHelper = {\n getVideoDownloadUrl(downloadProxyUrl: string, token: string): string {\n return UrlHelper.safeUrlConcat(UrlHelper.makeHttps(downloadProxyUrl), `/download?token=${token}`);\n },\n\n downloadResource(\n resource: Resource,\n analyticsData: HashObject,\n analyticsOptions: AnalyticsOptions\n ): void {\n let iframe = downloadRef;\n\n if (!downloadRef) {\n iframe = downloadRef = document.createElement('iframe');\n document.body.appendChild(iframe);\n\n iframe.style.display = 'none';\n }\n\n iframe.src = resource.url;\n\n AnalyticsHelper.logUserAction({\n id: resource?.id,\n name: resource?.name,\n resourceType: resource?.metadata?.resourceType,\n ...analyticsData\n }, {\n actionType: UserAction.Download,\n entity: EntityType.Resource,\n workflowPhase: WorkflowPhase.Complete,\n ...analyticsOptions\n });\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"qA4yj\",\"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`}>\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","containerRef","expanded","setExpanded","memoClientHeight","scrollHeight","showButton","setShowButton","DivButton","LinkifyHelper","description","nl2br","CommaList","label","items","commaSeperated","i","join","DetailsSection","parentVideo","productionYear","options","year","smartCount","productionCompanies","distributors","producers","directors","dateBroadcast","date","DateHelper","channel","_isClickViewCurated","value","dateCreated","VideoDetailsWithScrollbarV2","maxHeight","showDescription","showDetails","tags","hideTags","filter","tag","tagType","TagType","getTags","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","onClickPoiItem","PointOfInterestList","pointsOfInterest","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","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","item","localState","activeId","ScrollHelper","setControlledId","onItemClick","appLinkOptions","timer","useTableOfContentsActiveHeading","setActiveId","headingElements","controlledId","scrollPositionRef","observer","IntersectionObserver","headings","forEach","heading","window","setTimeout","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","getElementById","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([[2402],{66537:(e,n,t)=>{t.d(n,{j:()=>B});var a=t(32735),r=t(92802),o=t(75896),i=t(23201),s=t(82644),l=t(83345),c=t(24833),u=t(99705),m=t(12778),d=new RegExp(/^(?!-)[A-Za-z0-9-]+([\-\.]{1}[a-z0-9]+)*\.[A-Za-z]{2,6}$/),f=function(e){var n=e.domains,t=e.selectedOption,a={domains:[]};return n.forEach((function(e,r){("allowed"===t||e.domain)&&(e.domain?n.find((function(n,t){return t!==r&&n.domain===e.domain&&e.hasChanged}))?a.domains[r]={domain:"domain-duplicated"}:d.test(e.domain)||(a.domains[r]={domain:"domain-invalid"}):a.domains[r]={domain:"domain-empty"})})),a.domains.length?a:{}},p=t(10874),v=t(35223),b=t(23481),y=t(42328),g=t(36848);const h={domainFieldContainer:"F9EW7"};function E(e){return E="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},E(e)}function w(e,n,t){return(n=function(e){var n=function(e,n){if("object"!=E(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var a=t.call(e,"string");if("object"!=E(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==E(n)?n:n+""}(n))in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}var A="settings.domainField",S=b.T.encloseNamespace(A),O={"domain-duplicated":"domainDuplicatedErrorMessage","domain-not-certified":"domainNotCertifiedErrorMessage","domain-invalid":"domainInvalidErrorMessage","domain-empty":"domainEmptyErrorMessage","domain-already-exists":{requestingAccess:"joinRequestsDomainAlreadyExistsErrorMessage",automaticAccess:"accessBehaviourDomainAlreadyExistsErrorMessage"}};function j(e){var n=(0,r.u6)(),t=e.index,o=e.domain,i=e.view,s=e.appLinks,u=e.onChangeDomain,m=e.removeDomainField,d=w(w({},c.C.RequestingAccess,s.automaticAccess.action),c.C.AutomaticAccess,s.requestingAccess.action),f={application:s[i].application,action:d[i],args:s[i].args};function p(e){return(0,r.u9)(n.errors,"domains.".concat(e,".domain"))}return a.createElement("div",{className:h.domainFieldContainer},a.createElement(y.w,{type:"text",name:"domains.".concat(t,".domain"),className:"form-control form-control-lg ".concat(p(t)?"is-invalid":""),placeholder:S("domainPlaceholder"),value:o.domain,onChange:function(e){return function(e,n){e.preventDefault();var t=Object.assign(Object.assign({},o),{domain:e.currentTarget.value,hasChanged:!0});u(t,n)}(e,t)},onClickClear:function(){return m(t)},autoComplete:"off",showClearButton:0!==t||!!o.domain}),p(t)&&a.createElement("div",{className:"invalid-feedback d-block"},function(e,n){var t=p(e);switch(t){case"domain-duplicated":case"domain-invalid":case"domain-not-certified":case"domain-empty":return a.createElement(l.x,{namespace:A,phrase:O[t],options:{domain:n}});case"domain-already-exists":return a.createElement(a.Fragment,null,a.createElement(l.x,{namespace:A,phrase:O[t][i],options:{domain:n}}),a.createElement(g.F,{appLink:f,className:"text-red text-underline"},a.createElement(l.x,{namespace:A,phrase:"viewLinkText"})),a.createElement("span",null,"."))}}(t,o.domain)))}var C="settings.domainFields";function x(e){var n=(0,r.u6)(),t=n.values.domains,i=e.view,s=e.errors,c=e.appLinks,u=e.addDomainField,m=e.onChangeDomain,d=e.removeDomainField;return a.useEffect((function(){(null==s?void 0:s.length)&&s.forEach((function(e){var a=o.m.findIndex(t,(function(n){return n.hasChanged&&n.domain===e.domain}));n.setFieldError("domains.".concat(a,".domain"),e.errorCode)}))}),[s]),a.createElement(a.Fragment,null,a.createElement(r.F2,{name:"domains",render:function(){return a.createElement(a.Fragment,null,t.length>0&&t.map((function(e,n){return a.createElement(j,{key:n,domain:e,index:n,appLinks:c,onChangeDomain:m,removeDomainField:d,view:i})})))}}),a.createElement("div",null,a.createElement(p.h,{svgName:v.vn.Plus,className:"ms-3 btn btn-link text-info",onClick:u},a.createElement(l.x,{namespace:C,phrase:"addButtonLabel"}))))}var N=t(45140);const F={radioDescription:"Q4JXA"};var k="settings.domainSettingsRadio",I=b.T.encloseNamespace(k),R={automaticAccess:{none:{label:"accessBehaviourNoneLabel",description:"accessBehaviorNoneDescription"},allowed:{label:"accessBehaviourAllowedLabel",description:"accessBehaviourAllowedDescription"}},requestingAccess:{none:{label:"joinRequestsNoneLabel",description:"joinRequestsNoneDescription"},allowed:{label:"joinRequestsAllowedLabel",description:"joinRequestsAllowedDescription"},any:{label:"joinRequestsAnyLabel",description:"joinRequestsAnyDescription"}}};function q(e){var n=e.option,t=e.selectedOption,r=e.view,o=e.hasDescription,i=e.url,s=e.onSelectValue,c=e.children;return a.createElement("div",{className:"mb-3"},a.createElement(N.Z,{type:"radio",id:n,label:I(R[r][n].label),className:"fw-normal",value:n,onChange:function(){return s(n)},checked:t===n}),t===n&&a.createElement(a.Fragment,null,o&&a.createElement("p",{className:"".concat(F.radioDescription," mb-0")},a.createElement(l.x,{namespace:k,phrase:R[r][n].description})," ",!!i&&a.createElement("a",{className:"text-info",target:"_blank",href:i},a.createElement(l.x,{namespace:k,phrase:"learnMore"}))),c))}function D(e){return D="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},D(e)}function L(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,a=Array(n);t<n;t++)a[t]=e[t];return a}function T(e,n,t){return(n=function(e){var n=function(e,n){if("object"!=D(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var a=t.call(e,"string");if("object"!=D(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==D(n)?n:n+""}(n))in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}var V="settings.domainSettingsForm",M=T(T({},c.C.RequestingAccess,{none:"joinRequestsNoneInfoMessage",allowed:"joinRequestsAllowedInfoMessage",any:"joinRequestsAnyInfoMessage"}),c.C.AutomaticAccess,{none:"accessBehaviourNoneInfoMessage",allowed:"accessBehaviourAllowedInfoMessage"});function P(e){var n=e.view,t=e.options,s=e.errors,c=e.appLinks,d=(0,r.u6)(),f=d.values,p=f.domains,v=f.selectedOption;function b(e){d.setFieldValue("selectedOption",e),d.setErrors({}),p.length||y()}function y(){var e;d.setFieldValue("domains",[].concat(function(e){if(Array.isArray(e))return L(e)}(e=p)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,n){if(e){if("string"==typeof e)return L(e,n);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?L(e,n):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.")}(),[{domain:""}]))}function g(e){p.length>1?d.setFieldValue("domains",o.m.removeItemFromIndex(p,e)):d.setFieldValue("domains",o.m.cloneAndReplaceAtIdx(p,e,Object.assign(Object.assign({},p[e]),{domain:""}))),E(e)}function h(e,n){d.setFieldValue("domains",o.m.cloneAndReplaceAtIdx(p,n,e)),E(n)}function E(e){if(d.errors.domains){var n=d.errors.domains,t=o.m.removeItemFromIndex(n,e);d.setErrors(t.filter((function(e){return e})).length?{domains:t}:{})}}return a.createElement(r.l0,null,a.createElement("div",{className:"col-12 col-md-7 card p-3 mb-3"},t.map((function(e){return a.createElement("div",{key:e},"none"===e&&a.createElement(q,{option:e,selectedOption:v,hasDescription:!0,view:n,onSelectValue:b}),"allowed"===e&&a.createElement(q,{option:e,selectedOption:v,view:n,hasDescription:!0,url:m.o.getLiteArticle(u.b.AccessSettings,"articles"),onSelectValue:b},a.createElement(x,{errors:s,view:n,appLinks:c,addDomainField:y,onChangeDomain:h,removeDomainField:g})),"any"===e&&a.createElement(q,{option:e,view:n,selectedOption:v,hasDescription:!0,url:m.o.getLiteArticle(u.b.AccessSettings,"articles"),onSelectValue:b}))})),a.createElement("div",{className:"d-flex"},a.createElement("div",{className:"rounded p-2 bg-light-blue text-info fw-semibold"},a.createElement(l.x,{namespace:V,phrase:M[n][v]})))),a.createElement(i.A,{isNew:!1,variant:"dark"}))}function B(e){var n=e.initialValues,t=e.view,r=e.options,o=e.errors,i=e.appLinks,l=e.onSaveChanges;return a.createElement(s.n,{initialValues:n,validate:f,validateOnChange:!1,validateOnBlur:!1,onSubmit:l},a.createElement(P,{view:t,options:r,errors:o,appLinks:i}))}},42328:(e,n,t)=>{t.d(n,{w:()=>o});var a=t(32735);function r(){return a.createElement("svg",{viewBox:"0 0 24 24"},a.createElement("path",{d:"M11.959 10.641l4.402-4.296a.964.964 0 0 1 1.358 0 .951.951 0 0 1 0 1.35l-4.403 4.297 4.403 4.378a.951.951 0 0 1 0 1.35.964.964 0 0 1-1.358 0l-4.402-4.378-4.32 4.378a.964.964 0 0 1-1.358 0 .951.951 0 0 1 0-1.35l4.32-4.378-4.32-4.362a.951.951 0 0 1 0-1.35.964.964 0 0 1 1.358 0l4.32 4.361z"}))}var o=a.forwardRef((function(e,n){var t=e.onClickClear,o=e.showClearButton,i=function(e,n){var t={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&n.indexOf(a)<0&&(t[a]=e[a]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(a=Object.getOwnPropertySymbols(e);r<a.length;r++)n.indexOf(a[r])<0&&Object.prototype.propertyIsEnumerable.call(e,a[r])&&(t[a[r]]=e[a[r]])}return t}(e,["onClickClear","showClearButton"]);return a.createElement("div",{className:"position-relative"},a.createElement("input",Object.assign({},i,{ref:n,className:"".concat(e.className," ").concat("aYpO7")})),(!!e.value||o)&&a.createElement("span",{className:"".concat("ygMgF"," position-absolute cursor-pointer text-secondary"),role:"button",onClick:t},a.createElement("div",{className:"d-inline-block svg-container md"},a.createElement(r,null))))}))},23201:(e,n,t)=>{t.d(n,{A:()=>c});var a=t(32735),r=t(92802),o=t(2102),i=t(83345),s=t(33936),l="shared.formButtons";function c(e){var n=(0,r.u6)(),t=(0,s.l)(n);return a.createElement(o.m,{variant:e.variant||"primary",type:"submit",disabled:!t,size:e.size,className:e.className?e.className:"",showSpinner:n.isSubmitting},e.submitText?a.createElement(a.Fragment,null,e.submitText):a.createElement(i.x,{namespace:l,phrase:e.isNew?"create":"save"}))}},82644:(e,n,t)=>{t.d(n,{b:()=>u,n:()=>c});var a=t(32735),r=t(92802),o=t(91967),i=t(1048);function s(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,a=Array(n);t<n;t++)a[t]=e[t];return a}var l=function(e,n){var t={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&n.indexOf(a)<0&&(t[a]=e[a]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(a=Object.getOwnPropertySymbols(e);r<a.length;r++)n.indexOf(a[r])<0&&Object.prototype.propertyIsEnumerable.call(e,a[r])&&(t[a[r]]=e[a[r]])}return t};function c(e){var n=e.castInitialValues,t=e.castValuesOnSubmit,c=e.initialValues,u=e.onSubmit,m=l(e,["castInitialValues","castValuesOnSubmit","initialValues","onSubmit"]),d=n&&e.validationSchema?e.validationSchema.cast(function(e){if(!e)return{};var n=i.t.deepClone(e);return function e(t){Object.keys(n).forEach((function(a){n.hasOwnProperty(a)&&(i.t.isObject(t[a])?e(t[a]):null===n[a]&&delete n[a])}))}(n),n}(c)):c,f={allowInitialSubmit:e.allowInitialSubmit};return a.createElement(r.J9,Object.assign({enableReinitialize:!0},m,{initialValues:d,onSubmit:function(n,a){var r=a.setSubmitting,o=a.resetForm,i=a.setFieldError,l=t&&e.validationSchema?e.validationSchema.cast(n):n;u(l,(function(){var e,n,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(t.reset&&o(),t.errors)for(var a=0,l=Object.entries(t.errors);a<l.length;a++){var c=(e=l[a],n=2,function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var a,r,o,i,s=[],l=!0,c=!1;try{if(o=(t=t.call(e)).next,0===n){if(Object(t)!==t)return;l=!1}else for(;!(l=(a=o.call(t)).done)&&(s.push(a.value),s.length!==n);l=!0);}catch(e){c=!0,r=e}finally{try{if(!l&&null!=t.return&&(i=t.return(),Object(i)!==i))return}finally{if(c)throw r}}return s}}(e,n)||function(e,n){if(e){if("string"==typeof e)return s(e,n);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?s(e,n):void 0}}(e,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.")}()),u=c[0],m=c[1];i(u,m)}r(!1)}))},initialStatus:f}),o.q.isFunction(e.children)?function(n){return e.children(n)}:a.Children.count(e.children)?e.children:null)}function u(){return(0,r.u6)()}c.defaultProps={castInitialValues:!0,castValuesOnSubmit:!0}},23371:(e,n,t)=>{var a;t.d(n,{W:()=>a}),function(e){e.Request="request",e.AutoJoin="auto-join",e.NoRequest="no-request"}(a||(a={}))},99705:(e,n,t)=>{var a,r;t.d(n,{b:()=>r}),function(e){e.AddToPlaylist="115005679748",e.EditSsoAccounts="8202508040345",e.LibraryEditor="360001974533",e.VideoAccess="360000153947",e.AddFromOnline="360011718234",e.UploadToLibraryEditor="360012069334",e.PBTErrorCodes="360012421153",e.ManuelReview="360020004534",e.LibraryReview="360000163788"}(a||(a={})),function(e){e.Integrations="4407268725529",e.Classrooms="4405362551833",e.MakeInteractive="4405370510873",e.EditSsoAccounts="8202605666073",e.UploadToLibraryEditor="10672936659865",e.AddFromLite="10671345281561",e.ManageSsoYearGroups="14691130889241",e.ContentReview="18525199576601",e.ContentPermissions="14692125209497",e.AccessSettings="22110291468057",e.ContentGuidelines="24133696186009",e.FoxtelFaq="24133519542169",e.ViviIntegration="23826297956377",e.AppleTvIntegration="25832373739929",e.RssFeed="32567445635097"}(r||(r={}))},93802:(e,n,t)=>{t.d(n,{y:()=>c});var a=t(75896),r=t(23371);function o(e){return function(e){if(Array.isArray(e))return i(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,n){if(e){if("string"==typeof e)return i(e,n);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?i(e,n):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 i(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,a=Array(n);t<n;t++)a[t]=e[t];return a}function s(e,n){return!!a.m.findWhere(n,{accessType:e})}function l(e){for(var n=arguments.length,t=new Array(n>1?n-1:0),a=1;a<n;a++)t[a-1]=arguments[a];return e.filter((function(e){return t.some((function(n){return n===e.accessType}))}))}var c={getInitialJoinRequests:function(e){var n=l(e,r.W.Request,r.W.NoRequest);return s(r.W.Request,n)?{selectedOption:"allowed",domains:n}:s(r.W.NoRequest,n)?{selectedOption:"none",domains:[]}:{selectedOption:"any",domains:[]}},getInitialAccessBehaviour:function(e){var n=l(e,r.W.AutoJoin);return s(r.W.AutoJoin,n)?{selectedOption:"allowed",domains:n}:{selectedOption:"none",domains:[]}},formatRequestData:function(e,n,t){var a=n.domains,i=n.selectedOption,s=l(e,r.W.AutoJoin),c=l(e,r.W.Request,r.W.NoRequest);if(t===r.W.Request){var u=[];switch(i){case"none":u=[{accessType:r.W.NoRequest,domain:""}];break;case"allowed":u=a.map((function(e){return Object.assign(Object.assign({},e),{accessType:r.W.Request})}))}return[].concat(o(s),o(u))}if(t===r.W.AutoJoin){var m=[];return"allowed"===i&&(m=a.map((function(e){return Object.assign(Object.assign({},e),{accessType:r.W.AutoJoin})}))),[].concat(o(c),o(m))}}}},71966:(e,n,t)=>{t.d(n,{B:()=>r});var a=t(99940),r={domains:function(e){return{url:"{gateway}/v1/customers/".concat(e,"/approved-domains"),key:"domains",normalize:!1}},updateDomains:function(e,n){return{url:"{gateway}/v1/customers/".concat(e,"/approved-domains"),key:"update:domains",type:a.k.PUT,data:n,normalize:!1,invalidationKeys:["domains"]}}}}}]);
2
+ //# sourceMappingURL=2402-ff1b4adf1a-lite.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/2402-ff1b4adf1a-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/utils/validation/DomainSettingsValidationSchema.ts","file:///app/packages/libs/shared/src/apps/domain-settings/domain-fields/domain-field/DomainField.scss","file:///app/packages/libs/shared/src/apps/domain-settings/domain-fields/domain-field/DomainField.tsx","file:///app/packages/libs/shared/src/apps/domain-settings/domain-fields/DomainFields.tsx","file:///app/packages/libs/shared/src/apps/domain-settings/domain-settings-radio/DomainSettingsRadio.scss","file:///app/packages/libs/shared/src/apps/domain-settings/domain-settings-radio/DomainSettingsRadio.tsx","file:///app/packages/libs/shared/src/apps/domain-settings/domain-settings-form/DomainSettingsForm.tsx","file:///app/packages/libs/shared/src/images/components/CloseIcon.tsx","file:///app/packages/libs/shared/src/apps/sign-up/components/general/clear-input/ClearableInput.tsx","file:///app/packages/libs/shared/src/apps/sign-up/components/general/clear-input/clearable-input.scss","file:///app/packages/libs/shared/src/components/forms/form-buttons/FormButtons.tsx","file:///app/packages/libs/shared/src/components/forms/form-wrapper/FormWrapper.tsx","file:///app/packages/libs/shared/src/enums/AccessType.ts","file:///app/packages/libs/shared/src/enums/SupportArticle.ts","file:///app/packages/libs/shared/src/utils/DomainSettingsFormHelper.ts","file:///app/packages/projects/lite/src/apps/settings/flight-requests/DomainRequests.ts"],"sourcesContent":["import { ApprovedDomain, DomainSettingsModel } from 'libs/shared/interfaces/domains/ApprovedDomain';\nimport { ApprovedDomainError } from 'libs/shared/interfaces/domains/ApprovedDomainErrorResponse';\n\nconst domainRegex = new RegExp(\n /^(?!-)[A-Za-z0-9-]+([\\-\\.]{1}[a-z0-9]+)*\\.[A-Za-z]{2,6}$/\n);\n\nexport const DomainValidation = (values: DomainSettingsModel) => {\n const { domains, selectedOption } = values;\n const errors: { domains: { domain: ApprovedDomainError }[] } = { domains: []};\n\n domains.forEach((domain, index: number) => {\n if (selectedOption !== 'allowed' && !domain.domain)\n return;\n\n if (!domain.domain) {\n errors.domains[index] = { domain: 'domain-empty' };\n return;\n }\n\n const duplicateDomain = domains.find(\n (currentDomain: ApprovedDomain, currentIndex: number) =>\n currentIndex !== index &&\n currentDomain.domain === domain.domain &&\n domain.hasChanged\n );\n if (duplicateDomain) {\n errors.domains[index] = { domain: 'domain-duplicated' };\n return;\n }\n\n if (!domainRegex.test(domain.domain)) {\n errors.domains[index] = { domain: 'domain-invalid' };\n return;\n }\n });\n\n return errors.domains.length ? errors : {};\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"domainFieldContainer\":\"F9EW7\"};","import React from 'react';\nimport { getIn, useFormikContext } from 'formik';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { ClearableInput } from 'libs/shared/apps/sign-up/components/general/clear-input/ClearableInput';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { AccessSettingsGroup } from 'libs/shared/enums/AccessSettingsGroup';\nimport { AccessSettingAppLinks } from 'libs/shared/interfaces/domains/AccessSettingAppLinks';\nimport { ApprovedDomain, DomainSettingsModel } from 'libs/shared/interfaces/domains/ApprovedDomain';\nimport { ApprovedDomainError } from 'libs/shared/interfaces/domains/ApprovedDomainErrorResponse';\n\nimport styles from './DomainField.scss';\n\nconst namespace = 'settings.domainField';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ntype ViewMap = {\n [key in AccessSettingsGroup]?: string;\n}\n\ntype ErrorMessagePhraseMap = {\n [key in ApprovedDomainError]?: string | ViewMap;\n};\n\nconst errorMessagePhraseMap: ErrorMessagePhraseMap = {\n 'domain-duplicated': 'domainDuplicatedErrorMessage',\n 'domain-not-certified': 'domainNotCertifiedErrorMessage',\n 'domain-invalid': 'domainInvalidErrorMessage',\n 'domain-empty': 'domainEmptyErrorMessage',\n 'domain-already-exists': {\n requestingAccess: 'joinRequestsDomainAlreadyExistsErrorMessage',\n automaticAccess: 'accessBehaviourDomainAlreadyExistsErrorMessage'\n }\n};\n\ninterface DomainFieldProps {\n index: number,\n domain: ApprovedDomain,\n view: AccessSettingsGroup\n appLinks: AccessSettingAppLinks\n onChangeDomain: (domain: ApprovedDomain, index: number) => void,\n removeDomainField: (index: number) => void,\n}\n\nexport function DomainField(props: DomainFieldProps) {\n const formikProps = useFormikContext<DomainSettingsModel>();\n const { index, domain, view, appLinks, onChangeDomain, removeDomainField } = props;\n \n const actionMap: { [view: string]: string } = {\n [AccessSettingsGroup.RequestingAccess]: appLinks.automaticAccess.action,\n [AccessSettingsGroup.AutomaticAccess]: appLinks.requestingAccess.action\n };\n\n const viewAppLink = {\n application: appLinks[view].application,\n action: actionMap[view],\n args: appLinks[view].args\n };\n \n function getDomainErrorCode(index: number): ApprovedDomainError {\n return getIn(formikProps.errors, `domains.${index}.domain`);\n }\n\n function getDomainErrorMessage(index: number, domain: string): JSX.Element {\n const domainErrorCode = getDomainErrorCode(index);\n switch (domainErrorCode) {\n case 'domain-duplicated':\n case 'domain-invalid':\n case 'domain-not-certified':\n case 'domain-empty':\n return (\n <Text\n namespace={namespace}\n phrase={errorMessagePhraseMap[domainErrorCode] as string}\n options={{ domain }}\n />\n );\n case 'domain-already-exists':\n return (\n <>\n <Text\n namespace={namespace}\n phrase={(errorMessagePhraseMap[domainErrorCode] as ViewMap)[view]}\n options={{ domain }}\n />\n <AppLink\n appLink={viewAppLink}\n className='text-red text-underline'\n >\n <Text namespace={namespace} phrase={'viewLinkText'}/>\n </AppLink>\n <span>.</span>\n </>\n );\n }\n }\n\n function handleChange(e: React.FormEvent<HTMLInputElement>, index: number) {\n e.preventDefault();\n const updatedDomain: ApprovedDomain = { ...domain, domain: e.currentTarget.value, hasChanged: true };\n onChangeDomain(updatedDomain, index);\n }\n\n return (\n <div className={styles.domainFieldContainer}>\n <ClearableInput\n type='text'\n name={`domains.${index}.domain`}\n className={`form-control form-control-lg ${getDomainErrorCode(index) ? 'is-invalid' : ''}`}\n placeholder={getPhrase('domainPlaceholder')}\n value={domain.domain}\n onChange={e => handleChange(e, index)}\n onClickClear={() => removeDomainField(index)}\n autoComplete='off'\n showClearButton={index !== 0 || !!domain.domain}\n />\n {\n getDomainErrorCode(index) &&\n <div className='invalid-feedback d-block'>{getDomainErrorMessage(index, domain.domain)}</div>\n }\n </div>\n );\n}","import React from 'react';\nimport { FieldArray, useFormikContext } from 'formik';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { AccessSettingsGroup } from 'libs/shared/enums/AccessSettingsGroup';\nimport { AccessSettingAppLinks } from 'libs/shared/interfaces/domains/AccessSettingAppLinks';\nimport { ApprovedDomain, DomainSettingsModel } from 'libs/shared/interfaces/domains/ApprovedDomain';\nimport { ApprovedDomainErrorResponse } from 'libs/shared/interfaces/domains/ApprovedDomainErrorResponse';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { DomainField } from './domain-field/DomainField';\n\nconst namespace = 'settings.domainFields';\n\ninterface DomainFieldsProps {\n errors: ApprovedDomainErrorResponse[],\n view: AccessSettingsGroup,\n appLinks: AccessSettingAppLinks\n addDomainField: () => void,\n onChangeDomain: (domain: ApprovedDomain, index: number) => void,\n removeDomainField: (index: number) => void,\n}\n\nexport function DomainFields(props: DomainFieldsProps) {\n const formikProps = useFormikContext<DomainSettingsModel>();\n const { domains } = formikProps.values;\n const { view, errors, appLinks, addDomainField, onChangeDomain, removeDomainField } = props;\n\n React.useEffect(() => {\n if (errors?.length) {\n errors.forEach(error => {\n const errorIndex = ArrayHelper.findIndex(\n domains,\n domain => domain.hasChanged && domain.domain === error.domain\n );\n formikProps.setFieldError(`domains.${errorIndex}.domain`, error.errorCode);\n });\n }\n }, [errors]);\n\n return (\n <>\n <FieldArray\n name='domains'\n render={() => {\n return (\n <>\n {domains.length > 0 &&\n domains.map((domain: ApprovedDomain, index) => (\n <DomainField\n key={index}\n domain={domain}\n index={index}\n appLinks={appLinks}\n onChangeDomain={onChangeDomain}\n removeDomainField={removeDomainField}\n view={view}\n />\n ))}\n </>\n );\n }}\n />\n <div>\n <IconButton\n svgName={cvSvgLibrary.Plus}\n className={`ms-3 btn btn-link text-info`}\n onClick={addDomainField}\n >\n <Text namespace={namespace} phrase='addButtonLabel' />\n </IconButton>\n </div>\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"radioDescription\":\"Q4JXA\"};","import React from 'react';\nimport { FormCheck } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { AccessSettingsGroup } from 'libs/shared/enums/AccessSettingsGroup';\nimport { DomainSettingsOption } from 'libs/shared/interfaces/domains/ApprovedDomain';\n\nimport styles from './DomainSettingsRadio.scss';\n\nconst namespace = 'settings.domainSettingsRadio';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ntype RadioPhraseMap = {\n [key in AccessSettingsGroup]?: {\n [key in DomainSettingsOption]?: {\n label: string,\n description?: string\n }\n }\n}\n\nconst radioPhraseMap: RadioPhraseMap = {\n automaticAccess: {\n none: {\n label: 'accessBehaviourNoneLabel',\n description: 'accessBehaviorNoneDescription'\n },\n allowed: {\n label: 'accessBehaviourAllowedLabel',\n description: 'accessBehaviourAllowedDescription'\n }\n },\n requestingAccess: {\n none: {\n label: 'joinRequestsNoneLabel',\n description: 'joinRequestsNoneDescription'\n },\n allowed: {\n label: 'joinRequestsAllowedLabel',\n description: 'joinRequestsAllowedDescription'\n },\n any: {\n label: 'joinRequestsAnyLabel',\n description: 'joinRequestsAnyDescription'\n }\n }\n};\n\ninterface DomainSettingsRadioProps {\n option: DomainSettingsOption;\n selectedOption: DomainSettingsOption;\n view: AccessSettingsGroup,\n hasDescription?: boolean;\n url?: string;\n onSelectValue: (option: DomainSettingsOption) => void;\n children?: JSX.Element;\n}\n\nexport function DomainSettingsRadio(props: DomainSettingsRadioProps) {\n const { option, selectedOption, view, hasDescription, url, onSelectValue, children } = props;\n\n return (\n <div className='mb-3'>\n <FormCheck\n type='radio'\n id={option}\n label={getPhrase(radioPhraseMap[view][option].label)}\n className='fw-normal'\n value={option}\n onChange={() => onSelectValue(option)}\n checked={selectedOption === option}\n />\n {selectedOption === option && (\n <>\n {hasDescription && (\n <p className={`${styles.radioDescription} mb-0`}>\n <Text namespace={namespace} phrase={radioPhraseMap[view][option].description} />\n &nbsp;\n {!!url &&\n <a className='text-info' target='_blank' href={url}>\n <Text namespace={namespace} phrase='learnMore' />\n </a>\n }\n </p>\n )}\n {children}\n </>\n )}\n </div>\n );\n}\n","import React from 'react';\nimport { Form, FormikErrors, useFormikContext } from 'formik';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { FormButtons } from 'libs/shared/components/forms/form-buttons/FormButtons';\nimport { FormSubmissionOptions, FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { AccessSettingsGroup } from 'libs/shared/enums/AccessSettingsGroup';\nimport { LiteSupportArticle } from 'libs/shared/enums/SupportArticle';\nimport { AccessSettingAppLinks } from 'libs/shared/interfaces/domains/AccessSettingAppLinks';\nimport { ApprovedDomain, DomainSettingsModel, DomainSettingsOption } from 'libs/shared/interfaces/domains/ApprovedDomain';\nimport { ApprovedDomainErrorResponse } from 'libs/shared/interfaces/domains/ApprovedDomainErrorResponse';\nimport { ArticleHelper } from 'libs/shared/utils/ArticleHelper';\nimport { DomainValidation } from 'libs/shared/utils/validation/DomainSettingsValidationSchema';\n\nimport { DomainFields } from '../domain-fields/DomainFields';\nimport { DomainSettingsRadio } from '../domain-settings-radio/DomainSettingsRadio';\n\nconst namespace = 'settings.domainSettingsForm';\n\ntype InfoMessageMap = {\n [key in AccessSettingsGroup]?: {\n [key in DomainSettingsOption]?: string;\n }\n}\n\nconst infoMessagePhraseMap: InfoMessageMap = {\n [AccessSettingsGroup.RequestingAccess]: {\n none: 'joinRequestsNoneInfoMessage',\n allowed: 'joinRequestsAllowedInfoMessage',\n any: 'joinRequestsAnyInfoMessage'\n },\n [AccessSettingsGroup.AutomaticAccess]: {\n none: 'accessBehaviourNoneInfoMessage',\n allowed: 'accessBehaviourAllowedInfoMessage'\n }\n};\n\ninterface DomainSettingsFormProps {\n view: AccessSettingsGroup,\n options: DomainSettingsOption[],\n errors: ApprovedDomainErrorResponse[]\n appLinks: AccessSettingAppLinks\n}\n\nfunction DomainSettingsForm(props: DomainSettingsFormProps): JSX.Element {\n const { view, options, errors, appLinks } = props;\n const formikProps = useFormikContext<DomainSettingsModel>();\n const { domains, selectedOption } = formikProps.values;\n\n function onSelectValue(value: DomainSettingsOption): void {\n formikProps.setFieldValue('selectedOption', value);\n formikProps.setErrors({});\n\n if (!domains.length) {\n addDomainField();\n }\n }\n\n function addDomainField() {\n formikProps.setFieldValue('domains', [ ...domains, { domain: '' }]);\n }\n\n function removeDomainField(index: number) {\n if (domains.length > 1) {\n formikProps.setFieldValue('domains', ArrayHelper.removeItemFromIndex(domains, index));\n } else {\n formikProps.setFieldValue('domains', ArrayHelper.cloneAndReplaceAtIdx(domains, index, {\n ...domains[index], domain: '' }));\n }\n clearFieldError(index);\n }\n\n function onChangeDomain(domain: ApprovedDomain, index: number) {\n formikProps.setFieldValue('domains', ArrayHelper.cloneAndReplaceAtIdx(domains, index, domain));\n clearFieldError(index);\n }\n \n function clearFieldError(index: number) {\n if (formikProps.errors.domains) {\n const domainErrors = formikProps.errors.domains as Partial<ApprovedDomain>[];\n const updatedDomainErrors =\n ArrayHelper.removeItemFromIndex<Partial<ApprovedDomain>>(domainErrors, index);\n \n formikProps.setErrors(\n updatedDomainErrors.filter(err => err).length\n ? ({ domains: updatedDomainErrors } as FormikErrors<DomainSettingsModel>)\n : {}\n );\n }\n }\n\n return (\n <Form>\n <div className='col-12 col-md-7 card p-3 mb-3'>\n {options.map(option => (\n <div key={option}>\n {option === 'none' && (\n <DomainSettingsRadio\n option={option}\n selectedOption={selectedOption}\n hasDescription\n view={view}\n onSelectValue={onSelectValue}\n />\n )}\n {option === 'allowed' && (\n <DomainSettingsRadio\n option={option}\n selectedOption={selectedOption}\n view={view}\n hasDescription\n url={ArticleHelper.getLiteArticle(LiteSupportArticle.AccessSettings, 'articles')}\n onSelectValue={onSelectValue}\n >\n <DomainFields\n errors={errors}\n view={view}\n appLinks={appLinks}\n addDomainField={addDomainField}\n onChangeDomain={onChangeDomain}\n removeDomainField={removeDomainField}\n />\n </DomainSettingsRadio>\n )}\n {option === 'any' && (\n <DomainSettingsRadio\n option={option}\n view={view}\n selectedOption={selectedOption}\n hasDescription\n url={ArticleHelper.getLiteArticle(LiteSupportArticle.AccessSettings, 'articles')}\n onSelectValue={onSelectValue}\n />\n )}\n </div>\n ))}\n\n <div className='d-flex'>\n <div className='rounded p-2 bg-light-blue text-info fw-semibold'>\n <Text namespace={namespace} phrase={infoMessagePhraseMap[view][selectedOption]} />\n </div>\n </div>\n </div>\n <FormButtons<DomainSettingsModel> isNew={false} variant='dark'/>\n </Form>\n );\n}\n\ninterface DomainSettingsProps {\n initialValues: DomainSettingsModel,\n view: AccessSettingsGroup,\n options: DomainSettingsOption[],\n errors?: ApprovedDomainErrorResponse[],\n appLinks: AccessSettingAppLinks\n onSaveChanges: (\n values: DomainSettingsModel,\n onDone: (options?: FormSubmissionOptions<DomainSettingsModel>) => void\n ) => void,\n}\n\nexport function DomainSettingsFormWrapper(props: DomainSettingsProps) {\n const { initialValues, view, options, errors, appLinks, onSaveChanges } = props;\n\n return (\n <FormWrapper<DomainSettingsModel>\n initialValues={initialValues}\n validate={DomainValidation}\n validateOnChange={false}\n validateOnBlur={false}\n onSubmit={onSaveChanges}\n >\n <DomainSettingsForm view={view} options={options} errors={errors} appLinks={appLinks}></DomainSettingsForm>\n </FormWrapper>\n );\n}","import React from 'react';\n\nexport function CloseIcon(): JSX.Element {\n return (\n <svg viewBox='0 0 24 24'>\n <path d='M11.959 10.641l4.402-4.296a.964.964 0 0 1 1.358 0 .951.951 0 0 1 0 1.35l-4.403 4.297 4.403 4.378a.951.951 0 0 1 0 1.35.964.964 0 0 1-1.358 0l-4.402-4.378-4.32 4.378a.964.964 0 0 1-1.358 0 .951.951 0 0 1 0-1.35l4.32-4.378-4.32-4.362a.951.951 0 0 1 0-1.35.964.964 0 0 1 1.358 0l4.32 4.361z'/>\n </svg>\n );\n}","import React from 'react';\n\nimport { CloseIcon } from 'libs/shared/images/components/CloseIcon';\n\nimport styles from './clearable-input.scss';\n\ninterface ClearInputProps extends React.HTMLProps<HTMLInputElement> {\n showClearButton?: boolean;\n onClickClear: () => void;\n}\n\nexport const ClearableInput = React.forwardRef((\n props: ClearInputProps,\n ref: React.ForwardedRef<HTMLInputElement>\n) => {\n const { onClickClear, showClearButton, ...inputProps } = props;\n\n return (\n <div className='position-relative'>\n <input\n {...inputProps}\n ref={ref}\n className={`${props.className} ${styles.clearableInput}`}\n />\n {(!!props.value || showClearButton) &&\n <span\n className={`${styles.clearInput} position-absolute cursor-pointer text-secondary`}\n role='button'\n onClick={onClickClear}\n >\n <div className='d-inline-block svg-container md'>\n <CloseIcon />\n </div>\n </span>\n }\n </div>\n );\n});","// extracted by mini-css-extract-plugin\nexport default {\"clearInput\":\"ygMgF\",\"clearableInput\":\"aYpO7\"};","import * as React from 'react';\nimport { ButtonProps } from 'react-bootstrap';\nimport { useFormikContext } from 'formik';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FormSize } from 'libs/shared/components/forms/form-field/FormField';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useCanSubmitForm } from 'libs/shared/hooks/UseCanSubmitForm';\n\nconst namespace = 'shared.formButtons';\n\ninterface FormButtonsProps {\n isNew?: boolean;\n submitText?: string;\n variant?: ButtonProps['variant'];\n size?: FormSize;\n className?: string;\n}\n\nexport function FormButtons<Values extends HashObject>(props: FormButtonsProps): JSX.Element {\n const formikProps = useFormikContext<Values>();\n\n const canSubmit = useCanSubmitForm(formikProps);\n\n return (\n <SpinnerButton\n variant={props.variant || 'primary'}\n type='submit'\n disabled={!canSubmit}\n size={props.size}\n className={props.className ? props.className : ''}\n showSpinner={formikProps.isSubmitting}\n >\n {props.submitText\n ? <>{props.submitText}</>\n : <Text namespace={namespace} phrase={props.isNew ? 'create' : 'save'} />}\n </SpinnerButton>\n );\n}\n","import * as React from 'react';\nimport { Formik, FormikConfig, FormikContextType, FormikErrors, FormikHelpers, FormikProps, FormikValues, useFormikContext } from 'formik';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\n/**\n * Note: This currently doesn't support arrays, but the need for arrays as initial\n * form data has not yet come up\n */\nfunction omitNullInitialValues<Values extends FormikValues>(initialValues: Values): Values {\n if (!initialValues)\n return {} as Values;\n\n const values = ObjectHelper.deepClone(initialValues);\n\n function omitChildValues(child: Values): void {\n Object.keys(values).forEach((key: keyof Values) => {\n if (!values.hasOwnProperty(key))\n return;\n \n if (ObjectHelper.isObject(child[key]))\n omitChildValues(child[key]);\n else if (values[key] === null)\n delete values[key];\n });\n }\n\n omitChildValues(values);\n return values;\n}\n\n// Omit attributes from FormikConfig that are defined in FormWrapperProps.\ntype ModifiedFormikConfig<Values extends FormikValues> = Omit<FormikConfig<Values>, 'initialValues' | 'onSubmit'>;\n\ninterface InitialStatus {\n allowInitialSubmit: boolean;\n}\n\nexport type FormSubmissionOptions<FormValues = FormikValues> = {\n reset?: boolean;\n errors?: FormikErrors<FormValues>;\n};\n\ninterface FormWrapperProps<FormValues extends FormikValues, ApiValues extends FormikValues> {\n initialValues: Partial<FormValues | ApiValues>;\n onSubmit: (data: FormValues, onDone: (options?: FormSubmissionOptions<FormValues>) => void) => void;\n castInitialValues?: boolean; // cast to validationSchema\n castValuesOnSubmit?: boolean; // cast to validationSchema\n allowInitialSubmit?: boolean; // if true, useCanSubmitForm will allow submit without any user changes.\n}\n\nFormWrapper.defaultProps = {\n castInitialValues: true,\n castValuesOnSubmit: true\n};\n\nexport function FormWrapper<\n FormValues extends FormikValues = FormikValues,\n ApiValues extends FormikValues = FormValues,\n ExtraProps = HashObject\n>(props: ModifiedFormikConfig<FormValues> & ExtraProps & FormWrapperProps<FormValues, ApiValues>): JSX.Element {\n const { castInitialValues, castValuesOnSubmit, initialValues, onSubmit, ...formikProps } = props;\n\n /**\n * If castInitialValues is true, cast initialValues to the validationSchema.\n * This will ensure that any data fetched from the api conforms to the expected form data shape.\n */\n const formattedInitialValues: FormValues = castInitialValues && props.validationSchema\n ? props.validationSchema.cast(omitNullInitialValues(initialValues))\n : initialValues;\n\n const onSubmitHandler = (\n values: FormValues,\n { setSubmitting, resetForm, setFieldError }: FormikHelpers<FormValues>\n ) => {\n /**\n * validationSchema.cast will coerce the values to the types defined in validationSchema.\n * This is useful for trimming inputs:\n * e.g. if a value field has type Yup.string().trim(), it will be automatically trimmed.\n */\n const formattedData = castValuesOnSubmit && props.validationSchema\n ? props.validationSchema.cast(values)\n : values;\n\n onSubmit(formattedData, (options: FormSubmissionOptions<FormValues> = {}) => {\n options.reset && resetForm();\n\n if (options.errors) {\n for (const [ key, value ] of Object.entries(options.errors)) {\n setFieldError(key, value);\n }\n }\n\n setSubmitting(false);\n });\n };\n\n const initialStatus: InitialStatus = {\n allowInitialSubmit: props.allowInitialSubmit\n };\n\n return (\n <Formik<FormValues, ExtraProps>\n enableReinitialize\n {...(formikProps as ModifiedFormikConfig<FormValues> & ExtraProps)}\n initialValues={formattedInitialValues}\n onSubmit={onSubmitHandler}\n initialStatus={initialStatus}\n >\n {FunctionHelper.isFunction(props.children)\n ? (f: FormikProps<FormValues>) => (props.children as (f: FormikProps<FormValues>) => React.ReactNode)(f)\n : React.Children.count(props.children) ? props.children : null\n }\n </Formik>\n );\n}\n\nexport function useFormikContextWrapper<T>(): FormikContextType<T> {\n return useFormikContext<T>();\n}","export enum AccessType {\n Request = 'request',\n AutoJoin = 'auto-join',\n NoRequest = 'no-request'\n}","// Article name mapped to article ID on support site. Used by `ArticleHelper`\n\nexport enum OnlineSupportArticle {\n AddToPlaylist = '115005679748',\n EditSsoAccounts = '8202508040345',\n\n // LE\n LibraryEditor = '360001974533',\n VideoAccess = '360000153947',\n AddFromOnline = '360011718234',\n UploadToLibraryEditor = '360012069334',\n PBTErrorCodes = '360012421153',\n ManuelReview = '360020004534',\n LibraryReview = '360000163788',\n}\n\nexport enum LiteSupportArticle {\n Integrations = '4407268725529',\n Classrooms = '4405362551833',\n MakeInteractive = '4405370510873',\n EditSsoAccounts = '8202605666073',\n UploadToLibraryEditor = '10672936659865',\n AddFromLite = '10671345281561',\n ManageSsoYearGroups = '14691130889241',\n ContentReview = '18525199576601',\n ContentPermissions = '14692125209497',\n AccessSettings = '22110291468057',\n ContentGuidelines = '24133696186009',\n FoxtelFaq = '24133519542169',\n ViviIntegration = '23826297956377',\n AppleTvIntegration = '25832373739929',\n RssFeed = '32567445635097'\n}\n","import { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AccessType } from 'libs/shared/enums/AccessType';\nimport { ApprovedDomain, DomainSettingsModel } from 'libs/shared/interfaces/domains/ApprovedDomain';\n\nfunction has(accessType: AccessType, domains: ApprovedDomain[]): boolean {\n return !!ArrayHelper.findWhere(domains, { accessType });\n}\n\nfunction getFilteredDomains(domains: ApprovedDomain[], ...accessTypes: AccessType[]): ApprovedDomain[] {\n return domains.filter(domain => accessTypes.some(accessType => accessType === domain.accessType));\n}\n\nexport const DomainSettingsFormHelper = {\n getInitialJoinRequests(domains: ApprovedDomain[]): DomainSettingsModel {\n const filteredDomains = getFilteredDomains(domains, AccessType.Request, AccessType.NoRequest);\n \n if (has(AccessType.Request, filteredDomains))\n return { selectedOption: 'allowed', domains: filteredDomains };\n\n if (has(AccessType.NoRequest, filteredDomains))\n return { selectedOption: 'none', domains: []};\n \n return { selectedOption: 'any', domains: []};\n },\n getInitialAccessBehaviour(domains: ApprovedDomain[]): DomainSettingsModel {\n const filteredDomains = getFilteredDomains(domains, AccessType.AutoJoin);\n\n if (has(AccessType.AutoJoin, filteredDomains))\n return { selectedOption: 'allowed', domains: filteredDomains };\n\n return { selectedOption: 'none', domains: []};\n },\n formatRequestData(\n prevDomains: ApprovedDomain[],\n values: DomainSettingsModel,\n accessType: AccessType\n ): ApprovedDomain[] {\n const { domains, selectedOption } = values;\n const prevAutoJoinDomains = getFilteredDomains(prevDomains, AccessType.AutoJoin);\n const prevRequestDomains = getFilteredDomains(prevDomains, AccessType.Request, AccessType.NoRequest);\n\n if (accessType === AccessType.Request) {\n let requestDomains: ApprovedDomain[] = [];\n switch (selectedOption) {\n case 'none':\n requestDomains = [{ accessType: AccessType.NoRequest, domain: '' }];\n break;\n case 'allowed':\n requestDomains = domains.map(domain => ({ ...domain, accessType: AccessType.Request }));\n break;\n case 'any':\n }\n return [ ...prevAutoJoinDomains, ...requestDomains ];\n }\n\n if (accessType === AccessType.AutoJoin) {\n let autoJoinDomains: ApprovedDomain[] = [];\n switch (selectedOption) {\n case 'allowed':\n autoJoinDomains = domains.map(domain => ({ ...domain, accessType: AccessType.AutoJoin }));\n break;\n case 'none':\n }\n return [ ...prevRequestDomains, ...autoJoinDomains ];\n }\n }\n};\n","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Flight } from 'libs/common/flight';\n\nimport { ApprovedDomain } from 'libs/shared/interfaces/domains/ApprovedDomain';\n\nexport const DomainRequests = {\n domains(customerId: string): Flight.Request {\n return {\n url: `{gateway}/v1/customers/${customerId}/approved-domains`,\n key: 'domains',\n normalize: false\n };\n },\n updateDomains(\n customerId: string,\n data: ApprovedDomain[]\n ): Flight.Request {\n return {\n url: `{gateway}/v1/customers/${customerId}/approved-domains`,\n key: 'update:domains',\n type: HttpVerbs.PUT,\n data,\n normalize: false,\n invalidationKeys: ['domains']\n };\n }\n};"],"names":["domainRegex","RegExp","DomainValidation","values","domains","selectedOption","errors","forEach","domain","index","find","currentDomain","currentIndex","hasChanged","test","length","namespace","getPhrase","LanguageService","errorMessagePhraseMap","requestingAccess","automaticAccess","props","formikProps","view","appLinks","onChangeDomain","removeDomainField","actionMap","AccessSettingsGroup","action","viewAppLink","application","args","getDomainErrorCode","className","ClearableInput","type","name","placeholder","value","onChange","e","preventDefault","updatedDomain","currentTarget","handleChange","onClickClear","autoComplete","showClearButton","domainErrorCode","Text","phrase","options","AppLink","appLink","getDomainErrorMessage","DomainFields","addDomainField","error","errorIndex","ArrayHelper","setFieldError","errorCode","render","map","key","IconButton","svgName","onClick","radioPhraseMap","none","label","description","allowed","any","option","hasDescription","url","onSelectValue","children","FormCheck","id","checked","target","href","infoMessagePhraseMap","DomainSettingsForm","setFieldValue","setErrors","clearFieldError","domainErrors","updatedDomainErrors","filter","err","ArticleHelper","FormButtons","isNew","variant","DomainSettingsFormWrapper","initialValues","onSaveChanges","FormWrapper","validate","validateOnChange","validateOnBlur","onSubmit","CloseIcon","viewBox","d","ref","inputProps","role","canSubmit","disabled","size","showSpinner","isSubmitting","submitText","castInitialValues","castValuesOnSubmit","formattedInitialValues","validationSchema","cast","omitChildValues","child","Object","keys","hasOwnProperty","omitNullInitialValues","initialStatus","allowInitialSubmit","enableReinitialize","setSubmitting","resetForm","formattedData","reset","entries","f","useFormikContextWrapper","defaultProps","AccessType","OnlineSupportArticle","LiteSupportArticle","has","accessType","getFilteredDomains","accessTypes","some","DomainSettingsFormHelper","getInitialJoinRequests","filteredDomains","getInitialAccessBehaviour","formatRequestData","prevDomains","prevAutoJoinDomains","prevRequestDomains","requestDomains","autoJoinDomains","DomainRequests","customerId","normalize","updateDomains","data","invalidationKeys"],"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 r=a(50242),n=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&&n.Q.Ry.isStatusCodeError(i)&&(i!==r.o.NotFound?i!==r.o.Forbidden?a.badRequest||n.Q.Ry.throw(new o.badRequest):a.forbidden||n.Q.Ry.throw(new o.forbidden.privacy):a.notFound||n.Q.Ry.throw(new o.notFound))}}},91286:(e,t,a)=>{a.d(t,{v:()=>o});var r=a(32735),n=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,r.useEffect)((function(){o.forEach((function(e){(0,n.r)(e.statusCode,t,a)}))}),[i(o),t,a])}},63719:(e,t,a)=>{a.d(t,{h:()=>s});var r=a(32735),n=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,r=Array(t);a<t;a++)r[a]=e[a];return r}function s(e){var t,a,s=(t=r.useMemo((function(){return n.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 r,n,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=(r=i.call(a)).done)&&(s.push(r.value),s.length!==t);d=!0);}catch(e){u=!0,n=e}finally{try{if(!d&&null!=a.return&&(o=a.return(),Object(o)!==o))return}finally{if(u)throw n}}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 r=a(32735),n=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),C=a(98064),F=a(31949),w=a(1575),A=a(63719),I=a(26304),P=a(91286),O=a(22902),S=a(79612),B=a(76753),R=a(14070),j=a(97291),q=a(51855),x=a(82817),E=a(7179),V=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,q.G)().isPlugin,ee=(0,M.y)().activePresentation,te=(0,T.I)(),ae=s.a.useBasicFetch(C.D.streamableLearning()),re=s.a.useBasicFetch(F.N.currentUser()),ne=s.a.useBasicFetch(w.R.video(e.id)),ie=s.a.useBasicFetch(p.e.videoClips(e.id)),oe=s.a.useBasicFetch(g.b.videoInteractives(e.id)),se=s.a.useBasicFetch(m.L.config()),de=s.a.useBasicFetch((null===(t=re.data)||void 0===t?void 0:t.isAuthenticated)&&b.h.yearGroups(re.data.customerId)),ue=s.a.useBasicFetch(ee&&h.O.audiencesByPresentationId(ee.id)),ce=(0,G.a)(),le=s.a.useBasicFetch(ne.statusCode===n.o.Forbidden&&w.R.video(e.id,c.r.StripMetadata)),fe=(0,x.M)(e.id,!0),ve=(0,k.k)({video:ne.data,context:H,contextId:Y,moviesAndTv:$,currentUser:re.data}),ye=(0,V.l)(e.id,!0),he=s.a.useBasicFetch(w.R.regionAlternatives(e.id)),pe=(0,A.h)({name:null===(a=ne.data)||void 0===a?void 0:a.name});return(0,S.M)(B.CG.getVideoMetadata({content:ne.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:j.O.VIDEOS,action:R.e.Videos.PLAY_VIDEO,args:[e,d.m.slugify(t)]}}))})),(0,P.v)(ne,D,{forbidden:!0}),(0,U.V)(null!==(o=ve.videos)&&void 0!==o?o:[]),(0,E.P)({id:e.id,app:"videos"}),(0,I.b)(le),r.useEffect((function(){var e;ne.data&&ae.data&&(null===(e=ne.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)}),[ne.hasCompleted,ae.hasCompleted]),ne.data&&re.hasCompleted&&se.hasCompleted&&ye.hasCompleted?r.createElement(N.R,{video:ne.data,clips:ie.data,interactives:oe.data,yearGroups:de.data,curriculums:fe,relatedVideos:ve,setFavourite:J,canFavourite:K,imageCdnUrl:se.data.imageCdnUrl,currentUser:re.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}):r.createElement(r.Fragment,null)}H.defaultProps={queryParams:{}}}}]);
2
+ //# sourceMappingURL=2548-c5dd2899df-lite.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/2548-c5dd2899df-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[]>(ClipRequests.videoClips(props.id));\n const interactives = Flight.useBasicFetch<InteractiveMetadata[]>(InteractiveRequests.videoInteractives(props.id));\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","interactives","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":""}