@clickview/lite 0.50.1-rc.2 → 0.50.1-rc.4

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 (27) hide show
  1. package/dist/bundles.json +1 -1
  2. package/dist/scripts/{2004-4e2d98041c-lite.chunk.js → 2004-ea94849ed1-lite.chunk.js} +3 -3
  3. package/dist/scripts/{2004-4e2d98041c-lite.chunk.js.map → 2004-ea94849ed1-lite.chunk.js.map} +1 -1
  4. package/dist/scripts/2120-f811a932c9-lite.chunk.js +2 -0
  5. package/dist/scripts/2120-f811a932c9-lite.chunk.js.map +1 -0
  6. package/dist/scripts/{6587-08d5d85b71-lite.chunk.js → 6587-c9af2d4a7e-lite.chunk.js} +2 -2
  7. package/dist/scripts/6587-c9af2d4a7e-lite.chunk.js.map +1 -0
  8. package/dist/scripts/9139-2e7265c593-lite.chunk.js +2 -0
  9. package/dist/scripts/9139-2e7265c593-lite.chunk.js.map +1 -0
  10. package/dist/scripts/{9211-0381d3e715-lite.chunk.js → 9211-10bda850c6-lite.chunk.js} +2 -2
  11. package/dist/scripts/9211-10bda850c6-lite.chunk.js.map +1 -0
  12. package/dist/scripts/986-c797fed10a-lite.chunk.js +3 -0
  13. package/dist/scripts/986-c797fed10a-lite.chunk.js.map +1 -0
  14. package/dist/scripts/{bundle-815f926b0f.min.js → bundle-9179e47aef.min.js} +3 -3
  15. package/dist/scripts/{bundle-815f926b0f.min.js.map → bundle-9179e47aef.min.js.map} +1 -1
  16. package/package.json +1 -1
  17. package/dist/scripts/2120-82a7b90997-lite.chunk.js +0 -2
  18. package/dist/scripts/2120-82a7b90997-lite.chunk.js.map +0 -1
  19. package/dist/scripts/6587-08d5d85b71-lite.chunk.js.map +0 -1
  20. package/dist/scripts/9139-91fe2783ce-lite.chunk.js +0 -2
  21. package/dist/scripts/9139-91fe2783ce-lite.chunk.js.map +0 -1
  22. package/dist/scripts/9211-0381d3e715-lite.chunk.js.map +0 -1
  23. package/dist/scripts/986-ea6d103647-lite.chunk.js +0 -3
  24. package/dist/scripts/986-ea6d103647-lite.chunk.js.map +0 -1
  25. /package/dist/scripts/{2004-4e2d98041c-lite.chunk.js.LICENSE.txt → 2004-ea94849ed1-lite.chunk.js.LICENSE.txt} +0 -0
  26. /package/dist/scripts/{986-ea6d103647-lite.chunk.js.LICENSE.txt → 986-c797fed10a-lite.chunk.js.LICENSE.txt} +0 -0
  27. /package/dist/scripts/{bundle-815f926b0f.min.js.LICENSE.txt → bundle-9179e47aef.min.js.LICENSE.txt} +0 -0
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[2120],{1353:(e,t,n)=>{n.d(t,{$:()=>o});var a=n(32735),r=n(11607),c=n(54610),l=n(67453),i=n(22161);function o(e){var t=e.data;return a.createElement(r.L,{key:t.id,className:"p-1 pe-2 rounded-pill d-inline-flex align-items-center cursor-pointer ".concat(i.Z.tag," ").concat(e.selected?i.Z.selected:""),onClick:function(){return e.onChangeCurriculum(t.id.toString())}},a.createElement("div",{className:"bg-white ".concat(i.Z.cover," rounded-circle border")},a.createElement("img",{src:l.j.createUrl(t.cover.url,{size:c.h2.Small}),alt:t.name,className:"rounded-circle"})),a.createElement("div",{className:"ms-2"},t.name))}},93439:(e,t,n)=>{n.d(t,{h:()=>b});var a=n(32735),r=n(44599),c=n(83345),l=n(85597),i=n(54610),o=n(67453),u=n(38496),s=n(22161);function m(e){return m="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},m(e)}function d(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=m(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,"string");if("object"!=m(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==m(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function f(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,c,l,i=[],o=!0,u=!1;try{if(c=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;o=!1}else for(;!(o=(a=c.call(n)).done)&&(i.push(a.value),i.length!==t);o=!0);}catch(e){u=!0,r=e}finally{try{if(!o&&null!=n.return&&(l=n.return(),Object(l)!==l))return}finally{if(u)throw r}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return p(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?p(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function p(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var v=/(.*)\s\((.*)?\)/i,g="shared.curriculumLinks",h="text-nowrap font-size-normal rounded-pill py-1 px-2 my-0 d-inline-block";function E(e){function t(){var t=h+" bg-white border";return!e.leaf.name&&e.uiContainsCodes?t+" border-secondary text-secondary":t+" border-dark"}var n=a.useRef();return a.useEffect((function(){if(n.current){var t=n.current.getBoundingClientRect().width;e.trySetMaxCodeWidth(t)}}),[n.current]),a.createElement("div",{className:"d-flex"},e.leaf.description?!e.leaf.name&&e.uiContainsCodes?a.createElement(a.Fragment,null,a.createElement("div",{className:"me-1 align-self-start",style:{minWidth:e.codeWidth?"".concat(e.codeWidth,"px"):"auto"}},a.createElement("h5",{ref:n,className:t()},a.createElement(c.x,{namespace:g,phrase:"noCode"}))),a.createElement("p",{className:"m-0 align-self-center",dangerouslySetInnerHTML:{__html:e.leaf.description}})):e.leaf.name||e.uiContainsCodes?a.createElement(a.Fragment,null,a.createElement("div",{className:"me-1 align-self-start",style:{minWidth:e.codeWidth?"".concat(e.codeWidth,"px"):"auto"}},a.createElement("h5",{ref:n,className:t()},e.leaf.name)),a.createElement("p",{className:"m-0 align-self-center",dangerouslySetInnerHTML:{__html:e.leaf.description}})):a.createElement("p",{className:"m-0",dangerouslySetInnerHTML:{__html:e.leaf.description}}):a.createElement("p",{className:"m-0",dangerouslySetInnerHTML:{__html:e.leaf.name}}))}function y(e){var t,n,r,c={},i=!1;function o(e){var t="mb-2";return e.name||i?t:t+" ms-4 "+s.Z.leafDescriptionOnly}return e.linkSet.areasAndLeaves.forEach((function(e){var t=e[l.k.Area].map((function(e){return e.name})).join(" - ");c[t]?e[l.k.Leaf].forEach((function(e){c[t].push(e),e.name&&(i=!0)})):c[t]=e[l.k.Leaf]})),a.createElement(a.Fragment,null,a.createElement("h3",{className:"".concat(h," text-white bg-dark-blue fw-normal me-1 mb-2")},(t=e.linkSet[l.k.Audience].name,n=e.linkSet[l.k.Subject].name,(r=t.match(v))?"".concat(r[1]," • ").concat(r[2]," • ").concat(n):"".concat(t," • ").concat(n))),a.createElement("div",{className:"me-2 ".concat(s.Z.curriculumSubject)},Object.keys(c).map((function(t,n){return a.createElement("div",{key:n,className:s.Z.areaLeafSet},t&&a.createElement("h4",{className:"mb-1 font-size-normal"},t),a.createElement("ul",{className:"list-unstyled"},c[t].map((function(t){return a.createElement("li",{key:t.id,className:o(t)},a.createElement(E,{leaf:t,codeWidth:e.codeWidth,trySetMaxCodeWidth:e.trySetMaxCodeWidth,uiContainsCodes:i}))}))))}))))}function b(e){var t,n,m=f(a.useState(0),2),p=m[0],v=m[1],h=f(a.useState(!1),2),E=h[0],b=h[1],k=f(a.useState(!1),2),S=k[0],N=k[1],C=f(a.useState([]),2),A=C[0],L=C[1];function x(e){v((function(t){return t>=e?t:e}))}a.useEffect((function(){var t,n;e.checkAllCurriculums&&e.curriculumLinks&&!(null===(t=e.curriculumLinks)||void 0===t?void 0:t.length)&&(N(!0),e.checkAllCurriculums().then((function(e){e.length&&b(!0),L(e)})).finally((function(){return N(!1)}))),(null===(n=e.curriculumLinks)||void 0===n?void 0:n.length)&&E&&b(!1)}),[null===(t=e.curriculumLinks)||void 0===t?void 0:t.length]);var w=a.useMemo((function(){var t,n={};return null===(t=e.curriculumLinks)||void 0===t||t.forEach((function(e){var t=null,a=null,r=[],c=[];e.forEach((function(e){switch(e.type){case l.k.Subject:t=e;break;case l.k.Audience:a=e;break;case l.k.Area:r.push(e);break;case l.k.Leaf:c.push(e)}}));var i="".concat(t.id,":").concat(a.id);n[i]?n[i].areasAndLeaves.push(d(d({},l.k.Area,r),l.k.Leaf,c)):n[i]=d(d(d({},l.k.Subject,t),l.k.Audience,a),"areasAndLeaves",[d(d({},l.k.Area,r),l.k.Leaf,c)])})),n}),[e.curriculumLinks]);return S?a.createElement(r.Z,null):(null===(n=e.curriculumLinks)||void 0===n?void 0:n.length)||e.hasNonEmptyCurriculums||!e.emptyStateUrl||E||S?E?a.createElement("div",null,a.createElement("div",{className:"mb-3"},a.createElement(c.x,{namespace:g,phrase:"currentEmpty"})),a.createElement("div",{className:"mb-3"},a.createElement(c.x,{namespace:g,phrase:"currentEmptyInfo"})),a.createElement("ul",{className:"list-unstyled mb-0"},A.map((function(t){return a.createElement("li",{key:t.id,className:"p-1 pe-2 rounded-pill d-inline-flex align-items-center cursor-pointer ".concat(s.Z.tag," me-2"),onClick:function(){return e.onChangeCurriculum(t.id.toString())}},a.createElement("div",{className:"bg-white ".concat(s.Z.cover," rounded-circle")},a.createElement("img",{src:o.j.createUrl(t.cover.url,{size:i.h2.Small}),alt:t.name,className:"rounded-circle"})),t.name)})))):a.createElement("ul",{className:"list-unstyled m-0"},Object.keys(w).map((function(e,t){return a.createElement("li",{key:"linkset-".concat(t),className:s.Z.curriculumSet},a.createElement(y,{linkSet:w[e],trySetMaxCodeWidth:x,codeWidth:p}))}))):a.createElement(u.p,{emptyStateUrl:e.emptyStateUrl})}},38496:(e,t,n)=>{n.d(t,{p:()=>u});var a=n(32735),r=n(23481),c=n(23232),l=n(83345),i="shared.curriculumLinks",o=r.T.encloseNamespace(i);function u(e){return a.createElement(c.u,{className:"pt-3"},a.createElement(c.u.Image,{src:e.emptyStateUrl,altText:o("emptyInfo"),size:"small"}),a.createElement(c.u.Heading,null,a.createElement(l.x,{namespace:i,phrase:"emptyHeading"})),a.createElement(c.u.Info,null,a.createElement(l.x,{namespace:i,phrase:"emptyInfo"})))}},44599:(e,t,n)=>{n.d(t,{Z:()=>c});var a=n(32735);var r=function(){return a.createElement(a.Fragment,null,a.createElement("div",{className:"partial-loading-background rounded-pill py-1 px-2 d-inline-block me-1 mb-2 ".concat("vDcrq")}),a.createElement("div",null,a.createElement("div",{className:"partial-loading-background mb-1 ".concat("GXhoW")}),a.createElement("div",{className:"mb-2 d-flex"},a.createElement("div",{className:"me-1 align-self-start ".concat("goKaS")},a.createElement("div",{className:"partial-loading-background rounded-pill py-1 px-2 d-inline-block w-100 h-100"})),a.createElement("div",{className:"partial-loading-background ".concat("vFew6")}))))};function c(){return a.createElement("div",null,a.createElement("div",{className:"mb-3"},a.createElement(r,null)),a.createElement("div",{className:"mb-3"},a.createElement(r,null)),a.createElement("div",null,a.createElement(r,null)))}},63112:(e,t,n)=>{n.d(t,{o:()=>c});var a=n(32735),r=n(91807),c=a.memo((function(e){var t=e.tagClass,n="partial-loading-background d-inline-block rounded-pill py-1 px-2 mb-1 me-1 text-nowrap ".concat(void 0===t?"":t," ").concat(r.Z.partialTag);return a.createElement("div",{className:"mt-1"},a.createElement("span",{className:n}," "))}))},88513:(e,t,n)=>{n.d(t,{B:()=>s});var a=n(32735),r=n(23481),c=n(65858),l=n(36848);const i={seeMore:"yv0FS"};var o=r.T.encloseNamespace("shared.widgetHeader");function u(e){return a.createElement("div",{className:"ms-3 ".concat(i.seeMore)},a.createElement(l.F,{appLink:e.appLink,analyticsData:e.analyticsData,analyticsOptions:Object.assign(Object.assign({},e.analyticsOptions),{descriptor:c._S.SeeMore}),className:"text-decoration-none ".concat(e.appLink?"curated-widget-link":"")},a.createElement("p",{className:"hover-text-underline text-dark curated-widget-heading"},o("seeMore"))))}function s(e){var t=!!e.description;return e.name||e.description?a.createElement("div",{className:"curated-widget-header"},a.createElement("div",{className:"d-flex justify-content-between"},!!e.name&&a.createElement("div",{className:i.title},a.createElement(l.F,{appLink:e.appLink,analyticsOptions:e.analyticsOptions,analyticsData:e.analyticsData,className:"text-decoration-none ".concat(e.appLink?"curated-widget-link":""),onClick:e.onClick},a.createElement("h2",{className:"h4 curated-widget-heading"},e.name))),!!e.appLink&&!t&&!!e.showSeeMoreLink&&a.createElement(u,Object.assign({},e))),t&&a.createElement("div",{className:"d-flex justify-content-between align-items-end"},a.createElement("p",{className:"description curated-widget-description ".concat(i.description)},a.createElement("span",null,e.description)),!!e.appLink&&!!e.showSeeMoreLink&&a.createElement(u,Object.assign({},e)))):a.createElement(a.Fragment,null)}},65163:(e,t,n)=>{n.d(t,{QL:()=>a.Q,eb:()=>a.e});var a=n(16450);n(14244)},43872:(e,t,n)=>{n.d(t,{V:()=>s});var a=n(32735),r=n(82182),c=n(31069),l=n(91967),i=new Image;i.src="data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs=";var o=function(e){e.dataTransfer.setDragImage&&l.q.isFunction(e.dataTransfer.setDragImage)&&e.dataTransfer.setDragImage(i,0,0)},u=r.V.isTouchScreen(),s=a.forwardRef((function(e,t){var n,r,l,i,s=e.children,m=e.positionType,d=e.onDrag,f=e.onDragEnd,p=e.onTouchMove,v=e.onTouchEnd,g=e.percentageDragged,h=e.position,E=void 0===h?0:h;return a.createElement("div",Object.assign({className:"d-flex flex-nowrap position-relative w-100",style:(r=E,l=m,i=g,l===c.C.Percentage&&i&&(r-=i),{transform:"translate3d(".concat(r).concat(l,", 0px, 0px)"),transition:"transform .4s ease-in-out"}),ref:t},(n={},d&&f&&(n.draggable=!0,n.onDragEnd=f,n.onDragStart=o,n.onDragOver=d),p&&v&&u&&(n.onTouchMoveCapture=p,n.onTouchEndCapture=v),n)),s)}))},16930:(e,t,n)=>{n.d(t,{W:()=>u,f:()=>o});var a=n(32735),r=n(83914),c=n(35223);const l="VSAPU",i="kgeXh";var o;!function(e){e[e.Left=0]="Left",e[e.Right=1]="Right"}(o||(o={}));var u=a.memo((function(e){var t,n,u,s=e.direction===o.Left,m=s?c.vn.ChevronLeft:c.vn.ChevronRight;return e.hide?a.createElement(a.Fragment,null):a.createElement("div",{className:"_ejId",style:"videos"===(null===(n=e.state)||void 0===n?void 0:n.contents)?{paddingBottom:56.25/(null===(u=e.state)||void 0===u?void 0:u.viewableItems)+"%"}:{height:"100%"}},e.useGradientBackdrop&&a.createElement("div",{className:s?"".concat("Pt3nx"," ").concat(e.leftGradientClassName):"".concat("ZuAif"," ").concat(e.rightGradientClassName)}),!e.hideExtendedClickableArea&&a.createElement("div",{role:"button",onClick:e.onClick,className:"".concat("AtsWP"," ").concat(s?l:i)}),a.createElement("div",{role:"button",className:"".concat((t="BVcIS",t+=s?" ".concat(l," ").concat(e.leftButtonClassName):" ".concat(i," ").concat(e.rightButtonClassName))," ").concat("gAsE9"," ").concat(e.className||""),onClick:e.onClick},e.hoverText&&a.createElement("span",{className:"ps-3 pe-2 ".concat("APA36")},e.hoverText),a.createElement(r.x,{svgName:m,size:r.S.Medium,className:"svg-container d-inline-block ".concat("Ev4hr")})))}))},31069:(e,t,n)=>{var a;n.d(t,{C:()=>a}),function(e){e.Percentage="%",e.Pixels="px"}(a||(a={}))},85597:(e,t,n)=>{var a;n.d(t,{k:()=>a}),function(e){e.Subject="CurriculumSubject",e.Audience="CurriculumAudience",e.Area="CurriculumArea",e.Leaf="CurriculumLeaf"}(a||(a={}))},10841:(e,t,n)=>{var a;n.d(t,{n:()=>a}),function(e){e.Init="init",e.Next="next",e.Previous="previous",e.Resize="resize",e.Drag="drag",e.Update="update",e.JumpToIndex="jump-to-index"}(a||(a={}))},81514:(e,t,n)=>{n.d(t,{V:()=>c});var a=n(86764),r=n(3747);function c(){var e=(0,r.a)(a.r.XS),t=(0,r.a)(a.r.SM),n=(0,r.a)(a.r.MD),c=(0,r.a)(a.r.LG),l=(0,r.a)(a.r.XL),i=(0,r.a)(a.r.XXL),o=a.r.LG;return e&&(o=a.r.XS),t&&(o=a.r.SM),n&&(o=a.r.MD),c&&(o=a.r.LG),l&&(o=a.r.XL),i&&(o=a.r.XXL),o}},7506:(e,t,n)=>{n.r(t),n.d(t,{ViewCurriculumLinksView:()=>N});var a=n(32735),r=n(80247),c=n(23481),l=n(20354),i=n(75896),o=n(49985),u=n(65858),s=n(1353),m=n(93439),d=n(9111),f=n(13876),p=n(63112),v=n(65163),g=n(1575),h=n(69883),E=n(99742),y=n(82817);function b(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,c,l,i=[],o=!0,u=!1;try{if(c=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;o=!1}else for(;!(o=(a=c.call(n)).done)&&(i.push(a.value),i.length!==t);o=!0);}catch(e){u=!0,r=e}finally{try{if(!o&&null!=n.return&&(l=n.return(),Object(l)!==l))return}finally{if(u)throw r}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return k(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?k(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function k(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var S=c.T.encloseNamespace("shared.viewCurriculumLinks");function N(e){var t,n=(0,y.M)(e.id),c=n.hasLoaded,k=n.preferredCurriculum,N=n.availableCurriculums,C=n.nonEmptyCurriculums,A=n.curriculumLinks,L=n.updateCurriculum,x=b(a.useState(!c),2),w=x[0],j=x[1],I=b(a.useState(),2),M=I[0],T=I[1],D=l.a.useBasicFetch(g.R.video(e.id)),O=(0,h.Z)();function Z(e){var t,n,a=N.find((function(t){return t.id.toString()===e}));(null==a?void 0:a.id)&&(null===(t=null==M?void 0:M.id)||void 0===t?void 0:t.toString())!==(null===(n=null==a?void 0:a.id)||void 0===n?void 0:n.toString())&&(T(a),j(!0),L(a,(function(){var e,t;o.k.logUserAction({id:a.id,name:a.id,description:a.description,videoId:null===(e=D.data)||void 0===e?void 0:e.id,videoName:null===(t=D.data)||void 0===t?void 0:t.name},{entity:u.py.Presentation,actionType:u.Vw.Select,descriptor:u.kD.Curriculum,location:u.LZ.PlayPage})}),(function(){T(M),j(!1),O.error(S("updateFailed"))})))}return a.useEffect((function(){c&&(M||T(null!=k?k:i.m.first(N)),j(!1))}),[null==k?void 0:k.id,c]),a.createElement(d.G,{title:S("heading"),closePopup:e.closePopup,size:"lg"},a.createElement("div",{className:"mb-3 mx-2"},!!(null==C?void 0:C.length)&&a.createElement(v.eb,{collection:C,childClassName:"flex-shrink-0",childComponent:function(e){var t;return a.createElement(s.$,Object.assign({},e,{selected:(null===(t=null==M?void 0:M.id)||void 0===t?void 0:t.toString())===e.data.id.toString(),onChangeCurriculum:Z}))},partialLoadingComponent:function(){return a.createElement(p.o,null)},widgetDataDeps:[null===(t=null==M?void 0:M.id)||void 0===t?void 0:t.toString()]})),w?a.createElement("div",{className:"d-flex justify-content-center align-items-center py-5"},a.createElement(r.Z,{as:"div",animation:"border",role:"status"})):a.createElement("div",{className:"pb-3"},a.createElement(m.h,{curriculumLinks:A,emptyStateUrl:E.W.EmptyStates.CURRICULUM_LINKS,onChangeCurriculum:Z,hasNonEmptyCurriculums:!!C.length})),a.createElement(f.u,null,a.createElement(f.u.Submit,{variant:"dark",onClick:e.closePopup,text:S("close")})))}},22161:(e,t,n)=>{n.d(t,{Z:()=>a});const a={curriculumSubject:"GvGYH",curriculumSet:"d7RK0",areaLeafSet:"XRTAe",closeButton:"N3l5Q",heading:"hAxR4",leafDescriptionOnly:"h66ke",dropdown:"CsG6G",tag:"rdLqY",cover:"etwaD",active:"aDLMe",selected:"BMrSd"}},91807:(e,t,n)=>{n.d(t,{Z:()=>a});const a={tagList:"Zw6d9",disabled:"jlL1c",partialTag:"too_N",badge:"OjtN8",close:"X9joI"}}}]);
2
+ //# sourceMappingURL=2120-f811a932c9-lite.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/2120-f811a932c9-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/curriculum-links/CurriculumLinkItem.tsx","file:///app/packages/libs/shared/src/components/curriculum-links/CurriculumLinks.tsx","file:///app/packages/libs/shared/src/components/curriculum-links/CurriculumLinksEmptyState.tsx","file:///app/packages/libs/shared/src/components/curriculum-links/partial-loading/PartialCurriculumLinks.tsx","file:///app/packages/libs/shared/src/components/curriculum-links/partial-loading/partial-curriculum-links.scss","file:///app/packages/libs/shared/src/components/tags/PartialTagItem.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/components/header/widget-header.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/components/header/WidgetHeader.tsx","file:///app/packages/libs/shared/src/utils/DragHelper.ts","file:///app/packages/libs/shared/src/components/widgets/sliding-list/SlidingListContainer.tsx","file:///app/packages/libs/shared/src/components/widgets/widget-button/widget-button.scss","file:///app/packages/libs/shared/src/components/widgets/widget-button/WidgetButton.tsx","file:///app/packages/libs/shared/src/enums/CssMeasurement.ts","file:///app/packages/libs/shared/src/enums/CurriculumType.ts","file:///app/packages/libs/shared/src/enums/WidgetInteraction.ts","file:///app/packages/libs/shared/src/hooks/UseGetMediaQueryString.ts","file:///app/packages/projects/lite/src/shared/views/view-curriculum-links/ViewCurriculumLinksView.tsx","file:///app/packages/libs/shared/src/components/curriculum-links/curriculum-links.scss","file:///app/packages/libs/shared/src/components/tags/tags.scss"],"sourcesContent":["import React from 'react';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Presentation } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './curriculum-links.scss';\n\ninterface CurriculumLinkItemProps {\n data: Presentation;\n onChangeCurriculum: (id: string) => any;\n selected: boolean;\n}\n\nexport function CurriculumLinkItem(props: CurriculumLinkItemProps): JSX.Element {\n const { data: curriculumTag } = props;\n\n return (\n <DivButton\n key={curriculumTag.id}\n className={`p-1 pe-2 rounded-pill d-inline-flex align-items-center cursor-pointer ${styles.tag} ${props.selected ? styles.selected : ''}`}\n onClick={() => props.onChangeCurriculum(curriculumTag.id.toString())}\n >\n <div className={`bg-white ${styles.cover} rounded-circle border`}>\n <img\n src={ImageHelper.createUrl(curriculumTag.cover.url, { size: ImageSize.Small })}\n alt={curriculumTag.name}\n className='rounded-circle'\n />\n </div>\n <div className='ms-2'>\n {curriculumTag.name}\n </div>\n </DivButton>\n );\n}","import React from 'react';\n\nimport { PartialCurriculumLinks } from 'libs/shared/components/curriculum-links/partial-loading/PartialCurriculumLinks';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CurriculumType } from 'libs/shared/enums/CurriculumType';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Curriculum, Presentation } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport { CurriculumLinksEmptyState } from './CurriculumLinksEmptyState';\n\nimport styles from './curriculum-links.scss';\n\nconst BRACKET_SEGMENT_REGEX = /(.*)\\s\\((.*)?\\)/i;\n\nconst namespace = 'shared.curriculumLinks';\n\nconst BASE_PILL_CLASS = 'text-nowrap font-size-normal rounded-pill py-1 px-2 my-0 d-inline-block';\n\ninterface CurriculumStructure {\n [CurriculumType.Subject]: Curriculum<CurriculumType.Subject>;\n [CurriculumType.Audience]: Curriculum<CurriculumType.Audience>;\n areasAndLeaves: Array<{\n [CurriculumType.Area]: Curriculum<CurriculumType.Area>[];\n [CurriculumType.Leaf]: Curriculum<CurriculumType.Leaf>[];\n }>;\n}\n\ninterface CurriculumLeafProps {\n leaf: Curriculum<CurriculumType.Leaf>;\n codeWidth: number;\n trySetMaxCodeWidth: React.Dispatch<React.SetStateAction<number>>;\n uiContainsCodes: boolean;\n}\n\nfunction CurriculumLeaf(props: CurriculumLeafProps): JSX.Element {\n function getCurriculumCodeClass(): string {\n const baseClass = BASE_PILL_CLASS + ' bg-white border';\n\n // If a leaf has no code but the rest of the UI has leaf nodes w/ codes, we show a special \"No code\" pill\n if (!props.leaf.name && props.uiContainsCodes)\n return baseClass + ' border-secondary text-secondary';\n\n return baseClass + ' border-dark';\n }\n\n const codeRef = React.useRef<HTMLDivElement>();\n\n React.useEffect(() => {\n if (!codeRef.current)\n return;\n\n const { width } = codeRef.current.getBoundingClientRect();\n\n props.trySetMaxCodeWidth(width);\n }, [codeRef.current]);\n\n return (\n <div className='d-flex'>\n {(() => {\n if (!props.leaf.description)\n return <p className='m-0' dangerouslySetInnerHTML={{ __html: props.leaf.name }} />;\n\n /**\n * If a leaf has no code but the rest of the UI has leaf nodes\n * with codes, we show a special \"No code\" pill. Example: https://imgur.com/3L1Ela3\n */\n if (!props.leaf.name && props.uiContainsCodes) {\n return (\n <>\n <div\n className='me-1 align-self-start'\n style={{ minWidth: props.codeWidth ? `${props.codeWidth}px` : 'auto' }}\n >\n <h5 ref={codeRef} className={getCurriculumCodeClass()}>\n <Text namespace={namespace} phrase='noCode' />\n </h5>\n </div>\n <p className='m-0 align-self-center' dangerouslySetInnerHTML={{ __html: props.leaf.description }} />\n </>\n );\n }\n\n /**\n * If a leaf has no code and the rest of the UI leaf nodes have no code, we just\n * display the description with a bullet point. Example: https://imgur.com/jzJvmWs\n */\n if (!props.leaf.name && !props.uiContainsCodes)\n return <p className='m-0' dangerouslySetInnerHTML={{ __html: props.leaf.description }} />;\n\n return (\n <>\n <div\n className='me-1 align-self-start'\n style={{ minWidth: props.codeWidth ? `${props.codeWidth}px` : 'auto' }}\n >\n <h5 ref={codeRef} className={getCurriculumCodeClass()}>{props.leaf.name}</h5>\n </div>\n <p className='m-0 align-self-center' dangerouslySetInnerHTML={{ __html: props.leaf.description }} />\n </>\n );\n })()}\n </div>\n );\n}\n\ninterface CurriculumSubjectProps {\n linkSet: CurriculumStructure;\n codeWidth: number;\n trySetMaxCodeWidth: React.Dispatch<React.SetStateAction<number>>;\n}\n\nfunction CurriculumSubject(props: CurriculumSubjectProps): JSX.Element {\n const areaAndLeafSets: { [areaText: string]: Curriculum<CurriculumType.Leaf>[]; } = {};\n\n let uiContainsCodes = false;\n\n props.linkSet.areasAndLeaves.forEach(areaAndLeafSet => {\n const areaText = areaAndLeafSet[CurriculumType.Area].map(ca => ca.name).join(' - ');\n\n if (areaAndLeafSets[areaText]) {\n areaAndLeafSet[CurriculumType.Leaf].forEach(leaf => {\n areaAndLeafSets[areaText].push(leaf);\n\n // We need the info on if _any_ leaf node has a code in it. See why in the comments in `<CurriculumLeaf />`\n if (leaf.name)\n uiContainsCodes = true;\n });\n\n return;\n }\n\n areaAndLeafSets[areaText] = areaAndLeafSet[CurriculumType.Leaf];\n });\n\n function getAudienceText(): string {\n const audienceSegment = props.linkSet[CurriculumType.Audience].name;\n const subjectSegment = props.linkSet[CurriculumType.Subject].name;\n\n /**\n * In some curriculums, such as the UK curriculum, the audience string may contain a year group\n * in brackets. For example, it may be \"Lower Key Stage 2 (Year 4)\".\n * This regex will pull that segment out if it exists.\n */\n const audienceBracketSegments = audienceSegment.match(BRACKET_SEGMENT_REGEX);\n\n if (audienceBracketSegments)\n return `${audienceBracketSegments[1]} • ${audienceBracketSegments[2]} • ${subjectSegment}`;\n\n return `${audienceSegment} • ${subjectSegment}`;\n }\n\n function getLeafStyleClass(leaf: Curriculum<CurriculumType.Leaf>): string {\n const className = 'mb-2';\n\n if (!leaf.name && !uiContainsCodes)\n return className + ' ms-4 ' + styles.leafDescriptionOnly;\n\n return className;\n }\n\n return (\n <>\n <h3 className={`${BASE_PILL_CLASS} text-white bg-dark-blue fw-normal me-1 mb-2`}>\n {getAudienceText()}\n </h3>\n\n <div className={`me-2 ${styles.curriculumSubject}`}>\n {Object.keys(areaAndLeafSets).map((areaText, i) => {\n return (\n <div key={i} className={styles.areaLeafSet} >\n {areaText && <h4 className='mb-1 font-size-normal'>{areaText}</h4>}\n <ul className='list-unstyled'>\n {areaAndLeafSets[areaText].map(leaf => (\n <li key={leaf.id} className={getLeafStyleClass(leaf)}>\n <CurriculumLeaf\n leaf={leaf}\n codeWidth={props.codeWidth}\n trySetMaxCodeWidth={props.trySetMaxCodeWidth}\n uiContainsCodes={uiContainsCodes}\n />\n </li>\n ))}\n </ul>\n </div>\n );\n })}\n </div>\n </>\n );\n}\n\ninterface CurriculumLinksSet {\n [subjectAndAudienceIdKey: string]: CurriculumStructure\n}\n\ninterface CurriculumLinksProps {\n curriculumLinks: Curriculum[][];\n emptyStateUrl?: string;\n checkAllCurriculums?: () => Promise<Presentation[]>;\n onChangeCurriculum?: (id: string) => void;\n hasNonEmptyCurriculums: boolean;\n}\n\nexport function CurriculumLinks(props: CurriculumLinksProps): JSX.Element {\n const [ codeWidth, setCodeWidth ] = React.useState(0);\n const [ showOtherCurriculums, setShowOtherCurriculums ] = React.useState(false);\n const [ loadingOther, setLoadingOther ] = React.useState(false);\n const [ curriculumTags, setCurriculumTags ] = React.useState<Presentation[]>([]);\n\n React.useEffect(() => {\n if (props.checkAllCurriculums && props.curriculumLinks && !props.curriculumLinks?.length) {\n setLoadingOther(true);\n // only fetch other curriculums when this curriculum is displayed\n props.checkAllCurriculums().then(data => {\n if (data.length) {\n setShowOtherCurriculums(true);\n }\n\n setCurriculumTags(data);\n }).finally(() => setLoadingOther(false));\n }\n\n if (props.curriculumLinks?.length && showOtherCurriculums) {\n setShowOtherCurriculums(false);\n }\n }, [props.curriculumLinks?.length]);\n\n function trySetMaxCodeWidth(width: number): void {\n /**\n * The width of the curriculum code column should be identical for each leaf node, meaning\n * the leaf description text will be perfectly vertically aligned all the way down.\n * See here for example: https://imgur.com/MbganZf\n * \n * This is achieved by us setting the state for the maximum code width, and forcing all\n * smaller codes to abide by that max width.\n * \n * This value is used in the `<CurriculumLeaf />` component.\n */\n setCodeWidth(currentVal => {\n if (currentVal >= width)\n return currentVal;\n\n return width;\n });\n }\n\n /**\n * Here, we're taking the structure of links from the backend, and restructuring it in a way\n * that resembles the structure of our UI more closely. The general idea is:\n * \n * CurriculumAudience - CurriculumSubject\n * CurriculumAreas\n * CurriculumLeaves\n */\n const curriculumLinkSets = React.useMemo(() => {\n const newSet: CurriculumLinksSet = {};\n\n props.curriculumLinks?.forEach(linkSet => {\n let subject: Curriculum<CurriculumType.Subject> = null;\n let audience: Curriculum<CurriculumType.Audience> = null;\n const areas: Curriculum<CurriculumType.Area>[] = [];\n const leaves: Curriculum<CurriculumType.Leaf>[] = [];\n \n linkSet.forEach(curriculumObj => {\n switch (curriculumObj.type) {\n case CurriculumType.Subject:\n subject = curriculumObj as Curriculum<CurriculumType.Subject>;\n break;\n case CurriculumType.Audience:\n audience = curriculumObj as Curriculum<CurriculumType.Audience>;\n break;\n case CurriculumType.Area:\n areas.push(curriculumObj as Curriculum<CurriculumType.Area>);\n break;\n case CurriculumType.Leaf:\n leaves.push(curriculumObj as Curriculum<CurriculumType.Leaf>);\n break;\n default:\n break;\n }\n });\n \n const key = `${subject.id}:${audience.id}`;\n \n if (newSet[key]) {\n newSet[key].areasAndLeaves.push({\n [CurriculumType.Area]: areas,\n [CurriculumType.Leaf]: leaves\n });\n \n return;\n }\n \n newSet[key] = {\n [CurriculumType.Subject]: subject,\n [CurriculumType.Audience]: audience,\n areasAndLeaves: [{\n [CurriculumType.Area]: areas,\n [CurriculumType.Leaf]: leaves\n }]\n };\n });\n\n return newSet;\n }, [props.curriculumLinks]);\n\n if (loadingOther) {\n return <PartialCurriculumLinks />;\n }\n \n if (!props.curriculumLinks?.length && !props.hasNonEmptyCurriculums) {\n // only if all other curriculums don't have links we render the empty state\n if (props.emptyStateUrl && !showOtherCurriculums && !loadingOther)\n return <CurriculumLinksEmptyState emptyStateUrl={props.emptyStateUrl} />;\n }\n\n if (showOtherCurriculums) {\n return (\n <div>\n <div className='mb-3'>\n <Text namespace={namespace} phrase='currentEmpty' />\n </div>\n <div className='mb-3'>\n <Text namespace={namespace} phrase='currentEmptyInfo' />\n </div>\n <ul className='list-unstyled mb-0'>\n {curriculumTags.map(t => (\n <li\n key={t.id}\n className={`p-1 pe-2 rounded-pill d-inline-flex align-items-center cursor-pointer ${styles.tag} me-2`}\n onClick={() => props.onChangeCurriculum(t.id.toString())}\n >\n <div className={`bg-white ${styles.cover} rounded-circle`}>\n <img\n src={ImageHelper.createUrl(t.cover.url, { size: ImageSize.Small })}\n alt={t.name}\n className='rounded-circle'\n />\n </div>\n {t.name}\n </li>\n ))}\n </ul>\n </div>\n );\n }\n\n return (\n <ul className='list-unstyled m-0'>\n {Object.keys(curriculumLinkSets).map((linkSetKey, i) => (\n <li key={`linkset-${i}`} className={styles.curriculumSet}>\n <CurriculumSubject\n linkSet={curriculumLinkSets[linkSetKey]}\n trySetMaxCodeWidth={trySetMaxCodeWidth}\n codeWidth={codeWidth}\n />\n </li>\n ))}\n </ul>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'shared.curriculumLinks';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface CurriculumLinksEmptyStateProps {\n emptyStateUrl: string;\n}\n\nexport function CurriculumLinksEmptyState(props: CurriculumLinksEmptyStateProps): JSX.Element {\n return (\n <EmptyState className='pt-3'>\n <EmptyState.Image src={props.emptyStateUrl} altText={getPhrase('emptyInfo')} size='small'/>\n <EmptyState.Heading>\n <Text namespace={namespace} phrase='emptyHeading' />\n </EmptyState.Heading>\n <EmptyState.Info>\n <Text namespace={namespace} phrase='emptyInfo' />\n </EmptyState.Info>\n </EmptyState>\n );\n}","import React from 'react';\n\nimport styles from './partial-curriculum-links.scss';\n\nconst PartialCurriculumLinkSection = () => (\n <>\n <div className={`partial-loading-background rounded-pill py-1 px-2 d-inline-block me-1 mb-2 ${styles.audience}`} />\n <div>\n <div className={`partial-loading-background mb-1 ${styles.area}`} />\n\n <div className='mb-2 d-flex'>\n <div className={`me-1 align-self-start ${styles.code}`}>\n <div className={`partial-loading-background rounded-pill py-1 px-2 d-inline-block w-100 h-100`} />\n </div>\n \n <div className={`partial-loading-background ${styles.description}`} />\n </div>\n </div>\n </>\n);\n\nexport function PartialCurriculumLinks(): JSX.Element {\n return (\n <div>\n <div className='mb-3'>\n <PartialCurriculumLinkSection />\n </div>\n\n <div className='mb-3'>\n <PartialCurriculumLinkSection />\n </div>\n\n <div>\n <PartialCurriculumLinkSection />\n </div>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"audience\":\"vDcrq\",\"area\":\"GXhoW\",\"code\":\"goKaS\",\"description\":\"vFew6\"};","import React from 'react';\n\nimport styles from './tags.scss';\n\ninterface PartialTagItemProps {\n tagClass?: string;\n}\n\nexport const PartialTagItem = React.memo(function({ tagClass = '' }: PartialTagItemProps): JSX.Element {\n const classNames = `partial-loading-background d-inline-block rounded-pill py-1 px-2 mb-1 me-1 text-nowrap ${tagClass} ${styles.partialTag}`;\n\n return (\n <div className='mt-1'>\n <span className={classNames}>&nbsp;</span>\n </div>\n );\n});","// extracted by mini-css-extract-plugin\nexport default {\"seeMore\":\"yv0FS\"};","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 { AnalyticsOptions, ClickDescriptor } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport styles from './widget-header.scss';\n\nconst namespace = 'shared.widgetHeader';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface WidgetHeaderProps {\n name: string;\n description: string;\n\n appLink?: Core.AppLink;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n showSeeMoreLink?: boolean;\n onClick?: () => void;\n}\n\nfunction SeeMore(props: WidgetHeaderProps) {\n return (\n <div className={`ms-3 ${styles.seeMore}`}>\n <AppLink\n appLink={props.appLink}\n analyticsData={props.analyticsData }\n analyticsOptions={{ ...props.analyticsOptions, descriptor: ClickDescriptor.SeeMore }}\n className={`text-decoration-none ${props.appLink ? 'curated-widget-link' : ''}`}\n >\n <p className='hover-text-underline text-dark curated-widget-heading'>{getPhrase('seeMore')}</p>\n </AppLink>\n </div>\n );\n}\n\nexport function WidgetHeader(props: WidgetHeaderProps): JSX.Element {\n const hasDescription = !!props.description;\n\n if (!props.name && !props.description)\n return <></>;\n\n return (\n <div className='curated-widget-header'>\n <div className='d-flex justify-content-between'>\n {!!props.name && (\n <div className={styles.title}>\n <AppLink\n appLink={props.appLink}\n analyticsOptions={props.analyticsOptions}\n analyticsData={props.analyticsData}\n className={`text-decoration-none ${props.appLink ? 'curated-widget-link' : ''}`}\n onClick={props.onClick}\n >\n <h2 className='h4 curated-widget-heading'>\n {props.name}\n </h2>\n </AppLink>\n </div>\n )}\n {!!props.appLink && !hasDescription && !!props.showSeeMoreLink && <SeeMore {...props}/>}\n </div>\n \n {hasDescription && (\n <div className='d-flex justify-content-between align-items-end'>\n <p className={`description curated-widget-description ${styles.description}`}>\n <span>{props.description}</span>\n </p>\n {!!props.appLink && !!props.showSeeMoreLink && <SeeMore {...props}/> }\n </div>\n )}\n </div>\n );\n}","import { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nconst blankImage = new Image();\nblankImage.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs=';\n\nexport const DragHelper = {\n // This removes the image that appears when you drag a draggable HTML element\n hideDragImage(event: React.DragEvent<HTMLElement>): void {\n if (!event.dataTransfer.setDragImage || !FunctionHelper.isFunction(event.dataTransfer.setDragImage))\n return;\n\n event.dataTransfer.setDragImage(blankImage, 0, 0);\n }\n};","import * as React from 'react';\n\nimport { UserAgentHelper } from 'libs/common/backbone/utils/UserAgentHelper';\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\n\nimport { CssMeasurement } from 'libs/shared/enums/CssMeasurement';\nimport { DragHelper } from 'libs/shared/utils/DragHelper';\n\nconst isTouchScreen = UserAgentHelper.isTouchScreen();\n\nconst getPositionStyling = (xPosition: number, measurement: CssMeasurement, dragPercentage?: number) => {\n // Used in situations where a touch screen user is dragging the `<FixedWidget />`\n if (measurement === CssMeasurement.Percentage && dragPercentage)\n xPosition = xPosition - dragPercentage;\n\n return {\n transform: `translate3d(${xPosition}${measurement}, 0px, 0px)`,\n transition: 'transform .4s ease-in-out'\n };\n};\n\ninterface SlidingListContainerProps extends React.PropsWithChildren<unknown> {\n position: number;\n positionType: CssMeasurement;\n\n onDrag?: (event: React.DragEvent<HTMLDivElement>) => void;\n onDragEnd?: () => void;\n\n onTouchMove?: (event: React.TouchEvent<HTMLDivElement>) => void;\n onTouchEnd?: () => void;\n\n percentageDragged?: number;\n}\n\nexport const SlidingListContainer = React.forwardRef((\n props: SlidingListContainerProps,\n ref: React.MutableRefObject<HTMLDivElement>\n): JSX.Element => {\n const { children, positionType, onDrag, onDragEnd, onTouchMove, onTouchEnd, percentageDragged, position = 0 } = props;\n\n function getEventListeners(): HashObject {\n const listenerProps: HashObject = {};\n\n if (onDrag && onDragEnd) {\n listenerProps.draggable = true;\n listenerProps.onDragEnd = onDragEnd;\n listenerProps.onDragStart = DragHelper.hideDragImage;\n listenerProps.onDragOver = onDrag;\n }\n\n if (onTouchMove && onTouchEnd && isTouchScreen) {\n listenerProps.onTouchMoveCapture = onTouchMove;\n listenerProps.onTouchEndCapture = onTouchEnd;\n }\n\n return listenerProps;\n }\n\n return (\n <div\n className='d-flex flex-nowrap position-relative w-100'\n style={getPositionStyling(position, positionType, percentageDragged)}\n ref={ref}\n {...getEventListeners()}\n >\n {children}\n </div>\n );\n});","// extracted by mini-css-extract-plugin\nexport default {\"buttonContainer\":\"_ejId\",\"left\":\"VSAPU\",\"right\":\"kgeXh\",\"button\":\"gAsE9\",\"hoverText\":\"APA36\",\"buttonHover\":\"cqD75\",\"chevron\":\"Ev4hr\",\"extendedClickableArea\":\"AtsWP\",\"gradientRight\":\"ZuAif\",\"gradientLeft\":\"Pt3nx\",\"topPos\":\"BVcIS\"};","import * as React from 'react';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { FixedWidgetState } from 'libs/shared/components/widgets/fixed-widget';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './widget-button.scss';\n\nexport enum WidgetButtonDirection {\n Left,\n Right\n}\n\ninterface WidgetButtonProps {\n onClick: (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => void;\n direction: WidgetButtonDirection;\n hide: boolean;\n contents?: WidgetContents;\n useGradientBackdrop?: boolean;\n className?: string;\n hoverText?: string;\n hideExtendedClickableArea?: boolean;\n state?: FixedWidgetState;\n\n leftButtonClassName?: string;\n rightButtonClassName?: string;\n leftGradientClassName?: string;\n rightGradientClassName?: string;\n}\n\nexport const WidgetButton = React.memo(function(props: WidgetButtonProps): JSX.Element {\n const isLeft = props.direction === WidgetButtonDirection.Left;\n\n const arrowSvg = isLeft ? cvSvgLibrary.ChevronLeft : cvSvgLibrary.ChevronRight;\n\n function getPositionClass(): string {\n let className = styles.topPos;\n \n // Left / Right\n if (isLeft)\n className += ` ${styles.left} ${props.leftButtonClassName}`;\n else\n className += ` ${styles.right} ${props.rightButtonClassName}`;\n \n return className;\n }\n\n function getStyle(): React.CSSProperties {\n if (props.state?.contents === 'videos')\n return { paddingBottom: (56.25 / props.state?.viewableItems) + '%' };\n\n return { height: '100%' };\n }\n\n if (props.hide)\n return <></>;\n\n return (\n <div className={styles.buttonContainer} style={getStyle()}>\n {props.useGradientBackdrop &&\n <div className={isLeft ? `${styles.gradientLeft} ${props.leftGradientClassName}` : `${styles.gradientRight} ${props.rightGradientClassName}`} />\n }\n\n {!props.hideExtendedClickableArea && (\n <div\n role='button'\n onClick={props.onClick}\n className={`${styles.extendedClickableArea} ${isLeft ? styles.left : styles.right}`}\n />\n )}\n\n <div\n role='button'\n className={`${getPositionClass()} ${styles.button} ${props.className || ''}`}\n onClick={props.onClick}\n >\n {props.hoverText && (\n <span className={`ps-3 pe-2 ${styles.hoverText}`}>{props.hoverText}</span>\n )}\n <SvgContainer\n svgName={arrowSvg}\n size={SvgContainerSize.Medium}\n className={`svg-container d-inline-block ${styles.chevron}`}\n />\n </div>\n </div>\n );\n});","export enum CssMeasurement {\n Percentage = '%',\n Pixels = 'px'\n}","export enum CurriculumType {\n Subject = 'CurriculumSubject',\n Audience = 'CurriculumAudience',\n Area = 'CurriculumArea',\n Leaf = 'CurriculumLeaf'\n}","export enum WidgetInteraction {\n Init = 'init',\n Next = 'next',\n Previous = 'previous',\n Resize = 'resize',\n Drag = 'drag',\n Update = 'update',\n JumpToIndex = 'jump-to-index'\n}","import { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\n\nimport { useMediaQuery } from './UseMediaQuery';\n\n/**\n * @deprecated Please use useBreakpoints() instead\n */\nexport function useGetMediaQueryString(): MediaQueryStrings {\n const isXS = useMediaQuery(MediaQueryStrings.XS);\n const isSM = useMediaQuery(MediaQueryStrings.SM);\n const isMD = useMediaQuery(MediaQueryStrings.MD);\n const isLG = useMediaQuery(MediaQueryStrings.LG);\n const isXL = useMediaQuery(MediaQueryStrings.XL);\n const isXXL = useMediaQuery(MediaQueryStrings.XXL);\n\n let currentString = MediaQueryStrings.LG; // default\n if (isXS) currentString = MediaQueryStrings.XS;\n if (isSM) currentString = MediaQueryStrings.SM;\n if (isMD) currentString = MediaQueryStrings.MD;\n if (isLG) currentString = MediaQueryStrings.LG;\n if (isXL) currentString = MediaQueryStrings.XL;\n if (isXXL) currentString = MediaQueryStrings.XXL;\n\n return currentString;\n}","import React from 'react';\nimport { Spinner } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, PresentationDescriptor, UserAction } from 'libs/analytics/interfaces';\n\nimport { CurriculumLinkItem } from 'libs/shared/components/curriculum-links/CurriculumLinkItem';\nimport { CurriculumLinks } from 'libs/shared/components/curriculum-links/CurriculumLinks';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { PartialTagItem } from 'libs/shared/components/tags/PartialTagItem';\nimport { DynamicWidget } from 'libs/shared/components/widgets/dynamic-widget';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { PopupViewProps, Presentation, Video } from 'libs/shared/interfaces';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { useCurriculums } from 'shared/hooks/useCurriculums';\n\nconst getPhrase = LanguageService.encloseNamespace('shared.viewCurriculumLinks');\n\ninterface ViewCurriculumLinksViewProps extends PopupViewProps {\n id: string;\n}\n\nexport function ViewCurriculumLinksView(props: ViewCurriculumLinksViewProps): React.ReactElement {\n const {\n hasLoaded,\n preferredCurriculum,\n availableCurriculums,\n nonEmptyCurriculums,\n curriculumLinks,\n updateCurriculum\n } = useCurriculums(props.id);\n\n const [ showLoadingSpinner, setShowLoadingSpinner ] = React.useState(!hasLoaded);\n const [ selectedCurriculum, setSelectedCurriculum ] = React.useState<Presentation>();\n\n const video = Flight.useBasicFetch<Video>(VideoRequests.video(props.id));\n\n const alerts = useAlerts();\n function onChangeCurriculum(curriculumId: string): void {\n const newCurriculum = availableCurriculums.find(c => c.id.toString() === curriculumId);\n\n if (!newCurriculum?.id)\n return;\n\n if (selectedCurriculum?.id?.toString() === newCurriculum?.id?.toString())\n return;\n\n setSelectedCurriculum(newCurriculum);\n setShowLoadingSpinner(true);\n\n const onSuccess = () => {\n AnalyticsHelper.logUserAction({\n id: newCurriculum.id,\n name: newCurriculum.id,\n description: newCurriculum.description,\n videoId: video.data?.id,\n videoName: video.data?.name\n }, {\n entity: EntityType.Presentation,\n actionType: UserAction.Select,\n descriptor: PresentationDescriptor.Curriculum,\n location: LocationContext.PlayPage\n });\n };\n\n const onError = () => {\n // If the request to change curriculum fails, we reset the select state and alert the user\n setSelectedCurriculum(selectedCurriculum);\n setShowLoadingSpinner(false);\n alerts.error(getPhrase('updateFailed'));\n };\n\n updateCurriculum(newCurriculum, onSuccess, onError);\n }\n\n React.useEffect(() => {\n if (!hasLoaded)\n return;\n\n if (!selectedCurriculum)\n setSelectedCurriculum(preferredCurriculum ?? ArrayHelper.first(availableCurriculums));\n\n setShowLoadingSpinner(false);\n }, [ preferredCurriculum?.id, hasLoaded ]);\n\n return (\n <Popup\n title={getPhrase('heading')}\n closePopup={props.closePopup}\n size='lg'\n >\n <div className='mb-3 mx-2'>\n {!!nonEmptyCurriculums?.length && (\n <DynamicWidget\n collection={nonEmptyCurriculums}\n childClassName='flex-shrink-0'\n childComponent={props => {\n return (\n <CurriculumLinkItem\n {...props}\n selected={selectedCurriculum?.id?.toString() === props.data.id.toString()}\n onChangeCurriculum={onChangeCurriculum}\n />\n );\n }}\n partialLoadingComponent={() => <PartialTagItem />}\n widgetDataDeps={[selectedCurriculum?.id?.toString()]}\n />\n )}\n </div>\n\n {!showLoadingSpinner ? (\n <div className='pb-3'>\n <CurriculumLinks\n curriculumLinks={curriculumLinks}\n emptyStateUrl={ImageUrls.EmptyStates.CURRICULUM_LINKS}\n onChangeCurriculum={onChangeCurriculum}\n hasNonEmptyCurriculums={!!nonEmptyCurriculums.length}\n />\n </div>\n ) : (\n <div className='d-flex justify-content-center align-items-center py-5'>\n <Spinner as='div' animation='border' role='status' />\n </div>\n )}\n\n <PopupButtons>\n <PopupButtons.Submit variant='dark' onClick={props.closePopup} text={getPhrase('close')} />\n </PopupButtons>\n </Popup>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"curriculumSubject\":\"GvGYH\",\"curriculumSet\":\"d7RK0\",\"areaLeafSet\":\"XRTAe\",\"closeButton\":\"N3l5Q\",\"heading\":\"hAxR4\",\"leafDescriptionOnly\":\"h66ke\",\"dropdown\":\"CsG6G\",\"tag\":\"rdLqY\",\"cover\":\"etwaD\",\"active\":\"aDLMe\",\"selected\":\"BMrSd\"};","// extracted by mini-css-extract-plugin\nexport default {\"tagList\":\"Zw6d9\",\"disabled\":\"jlL1c\",\"partialTag\":\"too_N\",\"badge\":\"OjtN8\",\"close\":\"X9joI\"};"],"names":["CurriculumLinkItem","props","curriculumTag","data","key","id","className","selected","onClick","onChangeCurriculum","toString","src","cover","url","size","alt","name","BRACKET_SEGMENT_REGEX","namespace","BASE_PILL_CLASS","CurriculumLeaf","getCurriculumCodeClass","baseClass","leaf","uiContainsCodes","codeRef","current","width","getBoundingClientRect","trySetMaxCodeWidth","description","style","minWidth","codeWidth","ref","phrase","dangerouslySetInnerHTML","__html","CurriculumSubject","audienceSegment","subjectSegment","audienceBracketSegments","areaAndLeafSets","getLeafStyleClass","linkSet","areasAndLeaves","forEach","areaAndLeafSet","areaText","map","ca","join","push","match","Object","keys","i","CurriculumLinks","setCodeWidth","showOtherCurriculums","setShowOtherCurriculums","loadingOther","setLoadingOther","curriculumTags","setCurriculumTags","currentVal","checkAllCurriculums","curriculumLinks","length","then","curriculumLinkSets","newSet","subject","audience","areas","leaves","curriculumObj","type","hasNonEmptyCurriculums","emptyStateUrl","t","linkSetKey","getPhrase","CurriculumLinksEmptyState","altText","PartialCurriculumLinkSection","PartialCurriculumLinks","PartialTagItem","tagClass","classNames","LanguageService","SeeMore","AppLink","appLink","analyticsData","analyticsOptions","descriptor","WidgetHeader","hasDescription","showSeeMoreLink","blankImage","Image","DragHelper","event","dataTransfer","setDragImage","FunctionHelper","isTouchScreen","UserAgentHelper","SlidingListContainer","listenerProps","xPosition","measurement","dragPercentage","children","positionType","onDrag","onDragEnd","onTouchMove","onTouchEnd","percentageDragged","position","CssMeasurement","C","transform","transition","draggable","onDragStart","onDragOver","onTouchMoveCapture","onTouchEndCapture","WidgetButtonDirection","WidgetButton","isLeft","direction","Left","arrowSvg","hide","state","contents","paddingBottom","viewableItems","height","useGradientBackdrop","leftGradientClassName","rightGradientClassName","hideExtendedClickableArea","role","leftButtonClassName","rightButtonClassName","hoverText","SvgContainer","svgName","S","CurriculumType","WidgetInteraction","useGetMediaQueryString","isXS","isSM","isMD","isLG","isXL","isXXL","currentString","ViewCurriculumLinksView","hasLoaded","preferredCurriculum","availableCurriculums","nonEmptyCurriculums","updateCurriculum","showLoadingSpinner","setShowLoadingSpinner","selectedCurriculum","setSelectedCurriculum","video","alerts","curriculumId","newCurriculum","find","c","videoId","videoName","entity","actionType","location","error","title","closePopup","collection","childClassName","childComponent","partialLoadingComponent","widgetDataDeps","as","animation","variant","text"],"sourceRoot":""}
@@ -1,2 +1,2 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[6587],{50690:(e,t,a)=>{a.d(t,{b:()=>i});var n=a(12788),i={renderInPortalIfExists:function(e,t){return t?(0,n.createPortal)(e,t):e}}},72553:(e,t,a)=>{a.d(t,{j:()=>u});var n=a(32735),i=a(42029),r=a(83345),o=a(49439);const l={copyrightDisclaimer:"z8YoI",overlayContainer:"eJDbJ"};function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=Array(t);a<t;a++)n[a]=e[a];return n}var s="shared.copyrightDisclaimer",d=150;function u(e){var t,a,u,m=(a=(0,o.L)({}),u=2,function(e){if(Array.isArray(e))return e}(a)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var n,i,r,o,l=[],c=!0,s=!1;try{if(r=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;c=!1}else for(;!(c=(n=r.call(a)).done)&&(l.push(n.value),l.length!==t);c=!0);}catch(e){s=!0,i=e}finally{try{if(!c&&null!=a.return&&(o=a.return(),Object(o)!==o))return}finally{if(s)throw i}}return l}}(a,u)||function(e,t){if(e){if("string"==typeof e)return c(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)?c(e,t):void 0}}(a,u)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),p=m[0],v=m[1];return n.createElement("div",{ref:p,className:e.className},n.createElement("p",{className:"".concat(l.copyrightDisclaimer," mb-1")},n.createElement(r.x,{namespace:s,phrase:"copyrightDisclaimer"})),n.createElement(i.Z,{target:p.current,show:v,placement:e.overflowPlacement&&document.documentElement.clientHeight-(null===(t=p.current)||void 0===t?void 0:t.getBoundingClientRect().bottom)<d?e.overflowPlacement:e.placement},n.createElement("div",{className:"".concat(l.overlayContainer," mw-100 bg-white border rounded-3 p-2")},n.createElement("p",null,n.createElement(r.x,{namespace:s,phrase:"warning"})),n.createElement("p",{className:"fw-semibold mb-0"},n.createElement(r.x,{namespace:s,phrase:"sharing"})))))}},5640:(e,t,a)=>{a.d(t,{O:()=>y});var n=a(32735),i=a(23481),r=a(28400),o=a(11518),l=a(58704),c=a(59598),s=a(31908),d=a(14070),u=a(97291),m=a(22843),p=a(89118),v=a(68626),g=a(80143),f=n.memo((function(e){var t,a=e.data,i=e.thumbnailSize,r=e.preloadImage,o=e.getAppLink,l=(0,g.n)(null===(t=a.subjectPresentationAudiences)||void 0===t?void 0:t.data,e.audiences);return n.createElement("div",{className:"flex-shrink-0 px-1 col-6 col-sm-4"},n.createElement(p.u,{type:"static",textPosition:v.z.Independent,video:a,appLink:o(a),imageOptions:{size:i},preload:r,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,setFavourite:e.setFavourite,canFavourite:e.canFavourite,imageCdnUrl:e.imageCdnUrl,audience:l,hideDuration:!1,isPlugin:e.isPlugin}),n.createElement("div",{className:"mt-2"},n.createElement(m.h,Object.assign({},e,{video:a,appLink:e.getAppLink(a)}))))})),h="shared.playPageClipsV2";function y(e){var t;if(!e.canViewClips||!(null===(t=e.clips)||void 0===t?void 0:t.length))return n.createElement(n.Fragment,null);var a=s.M.isVideo(e.video),m=i.T.getPhrase(h,a?"clips":"otherClips",{count:e.clips.length});return n.createElement("section",{className:"play-page-section",id:c.K.Clips,ref:function(t){var a;t&&(null===(a=e.headingRef)||void 0===a?void 0:a.current)&&e.headingRef.current.set(c.K.Clips,t)}},n.createElement(o.kM,{name:m,contents:l.z.ClipsV2,collection:e.clips,prefetched:!0,getChildAppLink:function(e){return{application:u.O.CLIPS,action:d.e.Clips.PLAY_CLIP,args:[e.id,r.m.slugify(e.name)]}},appLink:s.M.isVideo(e.video)?{action:d.e.Videos.VIDEO_CLIPS,application:u.O.VIDEOS,args:[e.video.id,r.m.slugify(e.video.name)]}:{action:d.e.Clips.CLIP_CLIPS,application:u.O.CLIPS,args:[e.video.id,r.m.slugify(e.video.name)]},childComponent:f,extraChildComponentProps:{yearGroups:e.yearGroups,audiences:e.audiences,imageCdnUrl:e.imageCdnUrl,setFavourite:e.setFavourite,canFavourite:e.canFavourite,isPlugin:e.isPlugin},analyticsData:e.analyticsData}))}},12059:(e,t,a)=>{a.d(t,{a:()=>N});var n=a(32735),i=a(42648),r=a(23481),o=a(110),l=a(78259),c=a(65858),s=a(72553),d=a(25723),u=a(87311),m=a(91743),p=a(83345),v=a(8730),g=a(40178),f=a(44829),h=a(59598),y=a(31908);const E={descriptionBorder:"YUC62"};var b="shared.videoDetailsV2",C=r.T.encloseNamespace(b);function I(e){var t=e.label,a=e.items,i=e.className;if(!(a&&a.data&&a.data.length))return n.createElement(n.Fragment,null);var r=a.data.map((function(e){return e.name})).join(", ");return n.createElement("div",{className:i},t,": ",r)}function k(e){var t,a,i,r,l,c,s,d,u,m=e.video;if(!y.M.isVideo(m)&&!y.M.isClip(m))return n.createElement(n.Fragment,null);var v=y.M.getParentVideo(m);return n.createElement("div",{className:m.description?"col-md-5 ps-md-3 pt-3 pt-md-0":"col-12"},n.createElement("h2",{className:"h6 mb-1"},n.createElement(p.x,{phrase:"details"})),!!v.productionYear&&n.createElement("div",{className:"mb-1"},n.createElement(p.x,{phrase:"productionYear",options:{year:v.productionYear}})),n.createElement(I,{label:C("productionCompanies",{smartCount:null===(a=null===(t=v.productionCompanies)||void 0===t?void 0:t.data)||void 0===a?void 0:a.length}),items:v.productionCompanies,className:"mb-1"}),n.createElement(I,{label:C("distributors",{smartCount:null===(r=null===(i=v.distributors)||void 0===i?void 0:i.data)||void 0===r?void 0:r.length}),items:v.distributors,className:"mb-1"}),n.createElement(I,{label:C("producers",{smartCount:null===(c=null===(l=v.producers)||void 0===l?void 0:l.data)||void 0===c?void 0:c.length}),items:v.producers,className:"mb-1"}),n.createElement(I,{label:C("directors",{smartCount:null===(d=null===(s=v.directors)||void 0===s?void 0:s.data)||void 0===d?void 0:d.length}),items:v.directors,className:"mb-1"}),!!v.dateBroadcast&&n.createElement("div",{className:"mb-1"},n.createElement(p.x,{phrase:"dateBroadcast",options:{date:o.O.format(v.dateBroadcast,"DD/MM/YYYY")}})),!!v.channel&&n.createElement("div",{className:"mb-1"},n.createElement(p.x,{phrase:"channel",options:{channel:v.channel.name}})),!((null===(u=m._isClickViewCurated)||void 0===u?void 0:u.value)||!m.dateCreated)&&n.createElement("div",{className:"mb-1"},n.createElement(p.x,{phrase:"dateUploaded",options:{date:o.O.format(m.dateCreated,"DD/MM/YYYY")}})))}function N(e){var t,a=e.video,r=e.maxHeight,o=void 0===r?g.x:r,C=y.M.getParentVideo(a),I=!!e.video.description,N=(0,v._)(e.video)||!!C.productionYear||!!C.dateBroadcast||!!C.channel||!(!a.dateCreated||(null===(t=a._isClickViewCurated)||void 0===t?void 0:t.value));if(!I&&!N)return n.createElement(n.Fragment,null);var w=function(){var t,a,n,i;return e.hideTags||y.M.isInteractive(e.video)||!(null===(a=null===(t=e.video.tags)||void 0===t?void 0:t.data)||void 0===a?void 0:a.length)?null:null===(i=null===(n=e.video.tags)||void 0===n?void 0:n.data)||void 0===i?void 0:i.filter((function(e){return e.tagType===f.Q.Normal}))}();return n.createElement(p.D.Provider,{value:b},n.createElement("section",{id:h.K.VideoDetails,ref:function(t){var a;t&&(null===(a=e.headingRef)||void 0===a?void 0:a.current)&&e.headingRef.current.set(h.K.VideoDetails,t)},className:"play-page-section"},n.createElement("div",null,n.createElement("h2",{className:"h5 mb-2"}," ",n.createElement(p.x,{phrase:"heading"}))),n.createElement("div",{className:"rounded border p-3 position-relative"},n.createElement(i.$B,{autoHeight:!0,autoHeightMax:o},n.createElement("div",{className:"row g-0"},I&&n.createElement("div",{className:N?"".concat(E.descriptionBorder," pe-3 col-md-7"):"col-12"},n.createElement("div",{className:"d-flex align-items-center"},n.createElement("h2",{className:"h6 mb-1"},n.createElement(p.x,{phrase:"description"})),n.createElement(d.m,{text:a.description,title:a.name,className:"ps-2",onLaunch:e.onLaunchImmersiveReader,onExit:e.onExitImmersiveReader,analyticsOptions:{location:c.LZ.PlayPage,entity:c.py.Video,actionType:c.Vw.Click,descriptor:c._S.LaunchImmersiveReader},analyticsData:{id:a.id,type:"description"}})),n.createElement("p",{className:"mb-0",dangerouslySetInnerHTML:{__html:l.O.linkifyText(e.video.description,{nl2br:!0})}})),N&&n.createElement(k,Object.assign({},e))),!!(null==w?void 0:w.length)&&n.createElement("div",{className:"mt-3"},n.createElement("h2",{className:"h6 mb-1"},n.createElement(p.x,{phrase:"normalTags"})),n.createElement(m.P,Object.assign({tags:w},u.G.getTagActionProps(e.getTagAppLink,null,e.suppressInteractivity),{className:"mt-1"}))),y.M.isBroadcast(e.video)&&n.createElement(s.j,{placement:"bottom-start",className:"d-flex justify-content-start mt-2 mb-n1"})))))}},51184:(e,t,a)=>{a.d(t,{NE:()=>d,RH:()=>m,Wp:()=>u});var n=a(32735),i=a(16367),r=a(34468),o=a(73758),l=a(63847);function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=Array(t);a<t;a++)n[a]=e[a];return n}var s=/\[\]\(cv:\/\/poi\?id=\d+\)\n*/g;function d(e,t){var a,r,o,l=(r=(0,n.useState)(""),o=2,function(e){if(Array.isArray(e))return e}(r)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var n,i,r,o,l=[],c=!0,s=!1;try{if(r=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;c=!1}else for(;!(c=(n=r.call(a)).done)&&(l.push(n.value),l.length!==t);c=!0);}catch(e){s=!0,i=e}finally{try{if(!c&&null!=a.return&&(o=a.return(),Object(o)!==o))return}finally{if(s)throw i}}return l}}(r,o)||function(e,t){if(e){if("string"==typeof e)return c(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)?c(e,t):void 0}}(r,o)||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=l[0],u=l[1];return(0,n.useEffect)((function(){if(t){var a=(n=e.glance,r=n.content.replace(s,""),i(r));u(a)}var n,r}),[null===(a=e.glance)||void 0===a?void 0:a.content,t]),d}function u(e){var t,a;return(null===(t=e.glance)||void 0===t?void 0:t.content)&&"text/markdown"===(null===(a=e.glance)||void 0===a?void 0:a.format)}function m(e,t){var a=(0,n.useRef)();function i(){e&&o.n.trigger("glance:poi:mouseover",e)}function c(){o.n.trigger("glance:poi:mouseleave")}return(0,r.R)("player:poi:mouseover",(function(t){var n,i,r;(null==t?void 0:t.id)&&(null===(n=null==e?void 0:e.id)||void 0===n?void 0:n.toString())===(null===(i=null==t?void 0:t.id)||void 0===i?void 0:i.toString())&&(null===(r=a.current)||void 0===r||r.classList.add(l.Z.highlightPoi))}),null,t),(0,r.R)("player:poi:mouseleave",(function(){var e;null===(e=a.current)||void 0===e||e.classList.remove(l.Z.highlightPoi)}),null,t),(0,n.useEffect)((function(){var e,n;if(a.current&&t)return null===(e=a.current)||void 0===e||e.addEventListener("mouseover",i),null===(n=a.current)||void 0===n||n.addEventListener("mouseleave",c),function(){var e,t;null===(e=a.current)||void 0===e||e.removeEventListener("mouseover",i),null===(t=a.current)||void 0===t||t.removeEventListener("mouseleave",c)}}),[a.current]),a}},64921:(e,t,a)=>{a.d(t,{j:()=>C});var n=a(32735),i=a(42648),r=a(11607),o=a(83345),l=a(93264),c=a(51184);const s={poiEntry:"vr6R9",poiText:"znHZF",public:"v0BZ9",poiTimeStamp:"AdKwe"};function d(e){var t=l.T.ToDisplayDuration(1e3*e.poi.startTime),a=(0,c.RH)(e.poi,!e.suppressInteractivity);return e.suppressInteractivity?n.createElement("div",{className:"d-flex ".concat(s.poiEntry," mb-2")},n.createElement("span",{className:"d-flex rounded-pill justify-content-center align-items-center fw-semibold info-link ".concat(s.poiTimeStamp)},t),n.createElement("div",{className:"".concat(s.public," ms-2")},e.poi.description)):n.createElement(r.L,{key:e.poi.startTime,className:"d-flex ".concat(s.poiEntry," mb-2 cursor-pointer"),onClick:function(){return e.onClickPoiItem(e.poi.startTime)},ref:a},n.createElement("div",{className:"d-flex rounded-pill justify-content-center align-items-center fw-semibold info-link ".concat(s.poiTimeStamp)},t),n.createElement("div",{className:"ms-2 ".concat(s.poiText)},e.poi.description))}var u="shared.pointsOfInterestList";function m(e){return n.createElement("div",null,n.createElement("h2",{className:"h6 my-2"},n.createElement(o.x,{namespace:u,phrase:"heading"})),n.createElement("div",null,e.pointsOfInterest.map((function(t){return n.createElement(d,{key:t.startTime,poi:t,suppressInteractivity:e.suppressInteractivity,onClickPoiItem:e.onClickPoiItem})}))))}var p=a(87311),v=a(91743),g=a(44829),f=a(31908),h=a(63847),y="shared.videoAtAGlanceV2",E=350;function b(e){return e.hideScrollbar?n.createElement(n.Fragment,null,e.children):n.createElement("div",{className:"rounded border mb-4 bg-white"},n.createElement(i.ZP,{autoHeight:!0,autoHeightMax:E},n.createElement("div",{className:"px-3 px-3 pt-3 pb-2"},e.children)))}function C(e){var t,a,i,r,l=(0,c.NE)(e.video,e.canViewGlance),s=f.M.isInteractive(e.video)||!(null===(a=null===(t=e.video.tags)||void 0===t?void 0:t.data)||void 0===a?void 0:a.length)?null:null===(r=null===(i=e.video.tags)||void 0===i?void 0:i.data)||void 0===r?void 0:r.filter((function(e){return e.tagType===g.Q.Pedagogy||e.tagType===g.Q.Skill}));return e.canViewGlance?n.createElement("section",{className:"play-page-section"},n.createElement(b,{hideScrollbar:e.hideScrollbar},n.createElement("h2",{className:"h6 mb-2"},n.createElement(o.x,{namespace:y,phrase:"learningIntention"})),n.createElement("div",{className:"".concat(h.Z.learningIntention," mb-3")},n.createElement("div",{dangerouslySetInnerHTML:{__html:l}})),!!(null==s?void 0:s.length)&&n.createElement("div",{className:"mb-1"},n.createElement(v.P,Object.assign({tags:s},p.G.getTagActionProps(e.getTagAppLink,e.onClickTag,e.suppressInteractivity),{className:"mt-2"}))),!!e.pointsOfInterest.length&&n.createElement(m,{pointsOfInterest:e.pointsOfInterest,suppressInteractivity:e.suppressInteractivity,onClickPoiItem:function(t){e.setStartTime(t)}}))):n.createElement(n.Fragment,null)}},17997:(e,t,a)=>{a.d(t,{H:()=>s});var n=a(32735),i=a(36848),r=a(83345),o=a(22843),l=a(89118),c=a(68626),s=n.memo((function(e){var t,a,s=e.data,d=e.thumbnailSize,u=e.preloadImage,m=Object.assign(Object.assign({},e.questionsAppLink),{args:[e.data.id]}),p=null===(a=null===(t=s._timepoints)||void 0===t?void 0:t.value)||void 0===a?void 0:a.length;return n.createElement("div",{className:"flex-shrink-0 px-1 col-6 col-sm-4"},n.createElement(l.u,{type:"static",textPosition:c.z.Independent,video:s,appLink:e.getAppLink(s),imageOptions:{size:d},preload:u,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,setFavourite:e.setFavourite,canFavourite:e.canFavourite,hideDuration:!1,imageCdnUrl:e.imageCdnUrl,isPlugin:e.isPlugin}),n.createElement("div",{className:"mt-2"},n.createElement(o.h,Object.assign({},e,{video:s,appLink:e.getAppLink(s)}))),n.createElement("div",{className:"mt-1"},n.createElement(i.F,{appLink:m,className:"cursor-pointer"},n.createElement(r.x,{namespace:"shared.interactiveWidgetItemV2",phrase:"previewQuestions",options:{count:p,smartCount:p}}))))}))},95812:(e,t,a)=>{a.d(t,{J:()=>v});var n=a(32735),i=a(23481),r=a(28400),o=a(11518),l=a(58704),c=a(59598),s=a(31908),d=a(14070),u=a(97291),m=a(17997),p="shared.playPageInteractivesV2";function v(e){var t;if(!e.canViewInteractives||!(null===(t=e.interactives)||void 0===t?void 0:t.length))return n.createElement(n.Fragment,null);var a=i.T.getPhrase(p,"interactives",{count:e.interactives.length});return n.createElement("section",{className:"play-page-section",id:c.K.Interactives,ref:function(t){var a;t&&(null===(a=e.headingRef)||void 0===a?void 0:a.current)&&e.headingRef.current.set(c.K.Interactives,t)}},n.createElement(o.kM,{name:a,contents:l.z.InteractivesV2,collection:e.interactives,prefetched:!0,getChildAppLink:function(e){return{application:u.O.INTERACTIVES,action:d.e.Interactives.VIEW_INTERACTIVE,args:[e.id,r.m.slugify(e.name)]}},appLink:s.M.isVideo(e.video)?{action:d.e.Videos.VIDEO_INTERACTIVES,application:u.O.VIDEOS,args:[e.video.id,r.m.slugify(e.video.name)]}:{action:d.e.Clips.CLIP_INTERACTIVES,application:u.O.CLIPS,args:[e.video.id,r.m.slugify(e.video.name)]},childComponent:m.H,extraChildComponentProps:{yearGroups:e.yearGroups,setFavourite:e.setFavourite,canFavourite:e.canFavourite,imageCdnUrl:e.imageCdnUrl,questionsAppLink:{application:u.O.INTERACTIVES,action:d.e.Interactives.PREVIEW_QUESTIONS},isPlugin:e.isPlugin},analyticsData:e.analyticsData}))}},53709:(e,t,a)=>{a.d(t,{M:()=>f});var n=a(32735),i=a(23481),r=a(65858),o=a(11518),l=a(16714),c=a(58704),s=a(22902),d=a(59598),u=a(74237),m=a(351);function p(e){return function(e){if(Array.isArray(e))return v(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return v(e,t);var 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)?v(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function v(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=Array(t);a<t;a++)n[a]=e[a];return n}var g="shared.playPageResources";function f(e){var t=(0,s.T)().hasPermissions,a=function(e,t){var a,n,i,r,o=null!==(n=null===(a=e.resources)||void 0===a?void 0:a.data)&&void 0!==n?n:[],l=null!==(r=null===(i=e.links)||void 0===i?void 0:i.data)&&void 0!==r?r:[];if(!t)return[].concat(p(o),p(l));var c=o.filter((function(e){var t;return["additional-materials","student-activity"].includes(null===(t=e.metadata)||void 0===t?void 0:t.resourceType)}));return[].concat(p(c),p(l))}(e.video,t(l.C.StudentExperience)),v=i.T.getPhrase(g,"resources",{count:a.length});return a.length?n.createElement("section",{id:d.K.Resources,className:"play-page-section",ref:function(t){var a;t&&(null===(a=e.headingRef)||void 0===a?void 0:a.current)&&e.headingRef.current.set(d.K.Resources,t)}},n.createElement(o.kM,{name:v,contents:c.z.PlayPageResourcesV2,collection:a,prefetched:!0,childComponent:m.oA,extraChildComponentProps:{imageCdnUrl:e.imageCdnUrl,imageErrorFallbackUrl:e.resourceThumbnailFallbackUrl,actionBehaviour:e.canViewResources?"normal":"public",location:"play-page",titlePosition:"below",onClickDownload:e.canViewResources?function(t){u.T.downloadResource(t,e.analyticsData,{location:r.LZ.PlayPage,actionType:r.Vw.Download,entity:r.py.Resource})}:null},getChildAppLink:e.getAppLink,analyticsOptions:e.canViewResources?{}:{workflowPhase:r.eu.Start,descriptor:r.Yu.SignUp},analyticsData:e.analyticsData})):n.createElement(n.Fragment,null)}},351:(e,t,a)=>{a.d(t,{$G:()=>k,oA:()=>N,ZS:()=>I});var n=a(32735),i=a(39202),r=a(49985),o=a(65858),l=a(36848),c=a(11607),s=a(75891),d=a(83914),u=a(60995),m=a(76177),p=a(61150),v=a(71063),g=a(4594),f=a(1164),h=a(79967),y=a(45778),E=a(54297),b=a(35223);const C={imageStyle:"bYRn8",item:"CjuxU",dashboard:"IuRN0",playPage:"VdJvp",aspectRatio:"QK8Jh",outerContainer:"eiC_H",innerContainer:"huIRg",actions:"FsIJm",titleBelow:"DpeSr",thumbnailContainer:"ZbalL",titleAbove:"PwOSX",teacherPack:"ZHAEj",text:"k3ei6",hoverState:"BLrWL",atomGuide:"Qz8JE",studentActivity:"qNspk",additionalMaterials:"R0huw",userUploaded:"H_zGf",imageTypeResource:"AgeLb",download:"DKneu"};function I(e,t){var a,n=(0,h.k)();return"public"===t||!n.xs&&!n.sm&&"resource"===e.type&&"metadata"in e&&(e.metadata.type===f.L.Image||(e.metadata.type===f.L.Pdf?!!e.url:!!(null===(a=e.pdf)||void 0===a?void 0:a.url)))}function k(e){var t,a,i,r,o=null;"metadata"in e.data&&(o=e.data.metadata);var l=y.G.isType(e.data,g.E.Resource);return n.createElement(n.Fragment,null,n.createElement("div",{className:C.aspectRatio},n.createElement("div",{className:C.outerContainer},n.createElement("div",{className:function(t){var a,n="\n d-flex flex-column align-items-center justify-content-end rounded-3 h-100\n position-relative ".concat(function(e){switch(e){case"atom-guide":return C.atomGuide;case"student-activity":return C.studentActivity;case"teacher-pack":return C.teacherPack;case"additional-materials":return C.additionalMaterials;default:return C.userUploaded}}(t)," ").concat(C.innerContainer);return(null===(a=e.theme)||void 0===a?void 0:a.containerClass)?n+=" ".concat(e.theme.containerClass):n+=" pt-3 px-3",e.applyHoverState&&(n+=" ".concat(C.hoverState)),n}(null==o?void 0:o.resourceType)},"above"===e.titlePosition&&n.createElement(m.u,{title:e.data.name},n.createElement("h3",{className:"text-center text-break h5 mb-3 ".concat(C.text)},n.createElement("span",{className:"clamp-1"},e.data.name))),n.createElement("div",{className:"\n ".concat(null!==(a=null===(t=e.theme)||void 0===t?void 0:t.thumbnailContainerClass)&&void 0!==a?a:""," w-75 overflow-hidden \n ").concat(C.thumbnailContainer," ").concat("above"===e.titlePosition?C.titleAbove:""," \n ").concat(C.imageStyle,"\n ")},n.createElement(s.C,{resource:e.data,imageCdnUrl:e.imageCdnUrl,imageErrorFallbackUrl:e.imageErrorFallbackUrl,preloadImage:e.preloadImage,dynamicRatioImageOptions:e.dynamicRatioImageOptions})),l&&e.onClickDownload&&"normal"===e.actionBehaviour&&n.createElement("div",{className:C.actions},n.createElement(c.L,{onClick:function(t){t.preventDefault(),t.stopPropagation(),y.G.isResource(e.data)&&"function"==typeof e.onClickDownload&&e.onClickDownload(e.data)},className:"".concat(C.download," d-flex align-items-center justify-content-center")},n.createElement(d.x,{svgName:b.vn.Download}))),!e.hideTypeBadge&&l&&n.createElement(p.y,{typeId:g.E.Resource})))),"below"===e.titlePosition&&n.createElement("div",{className:"mt-1 ".concat(C.titleBelow)},y.G.isType(e.data,g.E.Resource)&&!!(null===(r=null===(i=e.data)||void 0===i?void 0:i.metadata)||void 0===r?void 0:r.resourceType)&&n.createElement(u.m,null,E.C.getResourceTypeName(e.data.metadata.resourceType)),n.createElement("h3",{className:"h6 clamp-2"},e.data.name)))}k.defaultProps={preloadImage:!0,actionBehaviour:"normal"};var N=n.memo((function(e){var t=I(e.data,e.actionBehaviour),a=Object.assign(Object.assign({},e.analyticsData),e.data),c=Object.assign(Object.assign({},e.analyticsOptions),{actionType:o.Vw.Click,entity:e.data.typeId===g.E.Resource?o.py.Resource:o.py.Link});function s(){r.k.logUserAction(a,c)}var d,u=Object.assign(Object.assign({},e),{applyHoverState:t||!!e.data.url});return n.createElement("div",{className:"px-1 flex-shrink-0 ".concat(C.item," ").concat("play-page"===e.location?C.playPage:C.dashboard," ").concat(v.M.RESOURCE_ITEM_SELECTOR)},(d="d-block no-decoration","link"===e.data.type?n.createElement("a",{href:e.data.url,target:"_blank",className:d,onClick:s},n.createElement(k,Object.assign({},u))):t?"public"===e.actionBehaviour?n.createElement("div",{className:"".concat(d," cursor-pointer d-inline"),onClick:function(){s(),i.C$.trigger(e.getAppLink(e.data))}},n.createElement(k,Object.assign({},u))):n.createElement(l.F,{appLink:e.getAppLink(e.data),className:d,analyticsData:a,analyticsOptions:c},n.createElement(k,Object.assign({},u))):e.data.url?n.createElement("a",{href:e.data.url,className:d,onClick:s},n.createElement(k,Object.assign({},u))):n.createElement("div",{className:d},n.createElement(k,Object.assign({},u)))))}))},75838:(e,t,a)=>{a.d(t,{w:()=>s});var n=a(32735),i=a(92869),r=a(65858),o=a(36848),l=a(11607);const c={itemsWrapper:"m6mGm",anchorWrapper:"QptZj",default:"_AZa8",selectedItem:"Nuiel",disabled:"WIzWJ",floatIcon:"ARudn",arrowIcon:"tEF5Q",listIcon:"Ql2wi"};function s(e){var t={actionType:r.Vw.Click,entity:r.py.Widget,location:r.LZ.TableOfContents};return n.createElement("div",{className:"".concat(c.itemsWrapper)},e.items.map((function(a,r){return e.localState?n.createElement(l.L,{key:a.id,className:"".concat(c.anchorWrapper," ").concat(e.activeId===a.id?c.selectedItem:""),onClick:function(){var t;i.t.preventScrollTop(),e.setControlledId(a.id),null===(t=e.onItemClick)||void 0===t||t.call(e,a)}},n.createElement("div",{className:"".concat(e.activeId||0!==r?"":c.default," ")},a.name)):n.createElement(o.F,{key:a.id,appLink:e.getAppLink(a),appLinkOptions:{replace:!0},className:"".concat(c.anchorWrapper," ").concat(e.activeId===a.id?c.selectedItem:""),onClick:function(){var t;i.t.preventScrollTop(),e.setControlledId(a.id),null===(t=e.onItemClick)||void 0===t||t.call(e,a)},analyticsData:Object.assign(Object.assign({},e.analyticsData),{id:a.id,name:a.name}),analyticsOptions:t},n.createElement("div",{className:"".concat(e.activeId||0!==r?"":c.default," ")},a.name))})))}},65332:(e,t,a)=>{a.d(t,{D:()=>r});var n,i=a(32735),r=function(e){var t=e.setActiveId,a=e.headingElements,r=e.controlledId,o=e.setControlledId,l=i.useRef(0);i.useEffect((function(){var e=new IntersectionObserver((function(e){e.forEach((function(e){if(r)return t(r),void(n=window.setTimeout((function(){o("")}),800));if(e.isIntersecting)t(e.target.id),l.current=window.scrollY;else{var i=l.current-window.scrollY>0,c=a.findIndex((function(t){return t.id===e.target.id})),s=a[c-1];i&&(null==s?void 0:s.id)&&t(null==s?void 0:s.id)}}))}),{rootMargin:"-67px 0px -80% 0px"});return a.forEach((function(t){return e.observe(t)})),function(){n&&window.clearTimeout(n),e.disconnect()}}),[t,a.length,r])}},74237:(e,t,a)=>{a.d(t,{T:()=>l});var n=a(97395),i=a(49985),r=a(65858),o=null,l={getVideoDownloadUrl:function(e,t){return n._.safeUrlConcat(n._.makeHttps(e),"/download?token=".concat(t))},downloadResource:function(e,t,a){var n,l=o;o||(l=o=document.createElement("iframe"),document.body.appendChild(l),l.style.display="none"),l.src=e.url,i.k.logUserAction(Object.assign({id:null==e?void 0:e.id,name:null==e?void 0:e.name,resourceType:null===(n=null==e?void 0:e.metadata)||void 0===n?void 0:n.resourceType},t),Object.assign({actionType:r.Vw.Download,entity:r.py.Resource,workflowPhase:r.eu.Complete},a))}}},9465:(e,t,a)=>{a.d(t,{h:()=>h});var n=a(32735),i=a(81886),r=a(50690),o=a(49985),l=a(65858),c=a(10874),s=a(75838),d=a(83345),u=a(35223),m=a(28501);const p={container:"qA4yj",aside:"j28IY",collapse:"sFoPk",iconContainer:"PYyBV",arrowIcon:"MTodB",listIcon:"W76p8"};var v="shared.playPage";function g(e){function t(){var t;e.setIsExpanded(!e.isExpanded),t={actionType:e.isExpanded?l.Vw.Hide:l.Vw.Open,entity:l.py.TableOfContents,location:l.LZ.PlayPage},o.k.logUserAction(e.analyticsData,t)}return n.createElement("div",{className:"d-flex justify-content-end"},n.createElement("div",{className:p.container},n.createElement("div",{className:"".concat(p.iconContainer)},n.createElement(c.h,{className:"btn btn-outline-dark ".concat(p.listIcon),svgName:u.vn.TableOfContents,onClick:t}),n.createElement(c.h,{className:"btn btn-outline-dark ".concat(p.arrowIcon),svgName:e.isExpanded?u.vn.CollapseRight:u.vn.ExpandLeft,onClick:t}))))}function f(e){return n.createElement("div",{className:e.showInSide?"":"d-inline-flex gap-1"},n.createElement("aside",{className:"".concat(p.aside," position-relative ").concat(e.showInSide?"pe-1 pt-1 ":"px-3 pt-3 pb-2 border border-dark rounded-1 bg-white")},n.createElement("div",{className:p.container},e.showInSide&&n.createElement(c.h,{className:"btn position-absolute ".concat(p.collapse),svgName:u.vn.CollapseRight,onClick:function(){var t;e.setIsExpanded(!1),t={actionType:l.Vw.Hide,entity:l.py.TableOfContents,location:l.LZ.PlayPage},o.k.logUserAction(e.analyticsData,t)}}),n.createElement("h2",{className:"h5"},n.createElement(d.x,{namespace:v,phrase:"tocHeading"})),n.createElement(s.w,{items:e.items,activeId:e.activeId,getAppLink:function(e){var t=i.Q.C$.getCurrentAppLink(),a=t.params?Object.assign({},t.params):{};return a.tocId=e.id,Object.assign(Object.assign({},t),{params:a})},setControlledId:e.setControlledId,analyticsData:e.analyticsData,onItemClick:function(){e.showInSide||e.setIsExpanded(!1)}}))),!e.showInSide&&n.createElement(g,Object.assign({},e)))}function h(e){return n.createElement(n.Fragment,null,r.b.renderInPortalIfExists(e.isExpanded?n.createElement(f,Object.assign({},e)):n.createElement(g,Object.assign({},e)),document.getElementById(m.M)))}},53256:(e,t,a)=>{a.d(t,{d:()=>o});var n=a(23481),i=a(59598),r=n.T.encloseNamespace("shared.play"),o={getSectionHeading:function(e,t){switch(e){case i.K.Resources:return r("resourcesHeading",{count:t.resources.length});case i.K.Clips:return t.isPlayClipPage?r("otherClipsHeading",{count:t.clips.length-1}):r("clipsHeading",{count:t.clips.length});case i.K.Interactives:return r("interactivesHeading",{count:t.interactives.length});case i.K.Video:return r("videoHeading");case i.K.VideoDetails:return r("videoDetailsHeading");case i.K.RelatedVideos:return r("upNextHeading");case i.K.CurriculumLinks:return r("curriculumLinksHeading");case i.K.ClippedFrom:return r("clippedFromHeading");default:return""}}}},63010:(e,t,a)=>{a.d(t,{Q:()=>s});var n=a(32735),i=a(57900),r=a(81812);function o(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var n,i,r,o,l=[],c=!0,s=!1;try{if(r=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;c=!1}else for(;!(c=(n=r.call(a)).done)&&(l.push(n.value),l.length!==t);c=!0);}catch(e){s=!0,i=e}finally{try{if(!c&&null!=a.return&&(o=a.return(),Object(o)!==o))return}finally{if(s)throw i}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return l(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)?l(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=Array(t);a<t;a++)n[a]=e[a];return n}var c="play-page-toc-expanded";function s(e){var t=(0,r.a)(),a=!1!==i.SG.get(c),l=!!t&&a,s=o(n.useState(e||""),2),d=s[0],u=s[1],m=o(n.useState(""),2),p=m[0],v=m[1],g=o(n.useState(l),2),f=g[0],h=g[1];return n.useEffect((function(){h(!!t&&a)}),[t]),{controlledId:d,setControlledId:u,tableOfContentsExpanded:f,tableOfContentsActiveId:p,setTableOfContentsActiveId:v,onToggleTableOfContents:function(){h(!f),i.SG.set(c,!f)}}}},14476:(e,t,a)=>{a.d(t,{i:()=>l});var n=a(32735),i=a(59598),r=[i.K.Video,i.K.CurriculumLinks,i.K.Resources,i.K.Interactives,i.K.Clips,i.K.VideoDetails,i.K.ClippedFrom,i.K.RelatedVideos],o=[i.K.Video,i.K.VideoDetails,i.K.CurriculumLinks,i.K.Resources,i.K.Interactives,i.K.Clips,i.K.ClippedFrom,i.K.RelatedVideos];function l(e){var t=n.useRef(new Map),a=(e?r:o).map((function(e){return t.current.get(e)})).filter(Boolean);return{headingRef:t,headingElements:a}}},81812:(e,t,a)=>{a.d(t,{a:()=>i});var n=a(79967);function i(){var e=(0,n.k)();return e.lg||e.xl||e.xxl}},63847:(e,t,a)=>{a.d(t,{Z:()=>n});const n={learningIntention:"MHM6O",highlightPoi:"U7Q6x"}}}]);
2
- //# sourceMappingURL=6587-08d5d85b71-lite.chunk.js.map
1
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[6587],{50690:(e,t,a)=>{a.d(t,{b:()=>i});var n=a(12788),i={renderInPortalIfExists:function(e,t){return t?(0,n.createPortal)(e,t):e}}},72553:(e,t,a)=>{a.d(t,{j:()=>u});var n=a(32735),i=a(42029),r=a(83345),o=a(49439);const l={copyrightDisclaimer:"z8YoI",overlayContainer:"eJDbJ"};function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=Array(t);a<t;a++)n[a]=e[a];return n}var s="shared.copyrightDisclaimer",d=150;function u(e){var t,a,u,m=(a=(0,o.L)({}),u=2,function(e){if(Array.isArray(e))return e}(a)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var n,i,r,o,l=[],c=!0,s=!1;try{if(r=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;c=!1}else for(;!(c=(n=r.call(a)).done)&&(l.push(n.value),l.length!==t);c=!0);}catch(e){s=!0,i=e}finally{try{if(!c&&null!=a.return&&(o=a.return(),Object(o)!==o))return}finally{if(s)throw i}}return l}}(a,u)||function(e,t){if(e){if("string"==typeof e)return c(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)?c(e,t):void 0}}(a,u)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),p=m[0],v=m[1];return n.createElement("div",{ref:p,className:e.className},n.createElement("p",{className:"".concat(l.copyrightDisclaimer," mb-1")},n.createElement(r.x,{namespace:s,phrase:"copyrightDisclaimer"})),n.createElement(i.Z,{target:p.current,show:v,placement:e.overflowPlacement&&document.documentElement.clientHeight-(null===(t=p.current)||void 0===t?void 0:t.getBoundingClientRect().bottom)<d?e.overflowPlacement:e.placement},n.createElement("div",{className:"".concat(l.overlayContainer," mw-100 bg-white border rounded-3 p-2")},n.createElement("p",null,n.createElement(r.x,{namespace:s,phrase:"warning"})),n.createElement("p",{className:"fw-semibold mb-0"},n.createElement(r.x,{namespace:s,phrase:"sharing"})))))}},5640:(e,t,a)=>{a.d(t,{O:()=>y});var n=a(32735),i=a(23481),r=a(28400),o=a(11518),l=a(58704),c=a(59598),s=a(31908),d=a(14070),u=a(97291),m=a(22843),p=a(89118),v=a(68626),g=a(80143),f=n.memo((function(e){var t,a=e.data,i=e.thumbnailSize,r=e.preloadImage,o=e.getAppLink,l=(0,g.n)(null===(t=a.subjectPresentationAudiences)||void 0===t?void 0:t.data,e.audiences);return n.createElement("div",{className:"flex-shrink-0 px-1 col-6 col-sm-4"},n.createElement(p.u,{type:"static",textPosition:v.z.Independent,video:a,appLink:o(a),imageOptions:{size:i},preload:r,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,setFavourite:e.setFavourite,canFavourite:e.canFavourite,imageCdnUrl:e.imageCdnUrl,audience:l,hideDuration:!1,isPlugin:e.isPlugin}),n.createElement("div",{className:"mt-2"},n.createElement(m.h,Object.assign({},e,{video:a,appLink:e.getAppLink(a)}))))})),h="shared.playPageClipsV2";function y(e){var t;if(!e.canViewClips||!(null===(t=e.clips)||void 0===t?void 0:t.length))return n.createElement(n.Fragment,null);var a=s.M.isVideo(e.video),m=i.T.getPhrase(h,a?"clips":"otherClips",{count:e.clips.length});return n.createElement("section",{className:"play-page-section",id:c.K.Clips,ref:function(t){var a;t&&(null===(a=e.headingRef)||void 0===a?void 0:a.current)&&e.headingRef.current.set(c.K.Clips,t)}},n.createElement(o.kM,{name:m,contents:l.z.ClipsV2,collection:e.clips,prefetched:!0,getChildAppLink:function(e){return{application:u.O.CLIPS,action:d.e.Clips.PLAY_CLIP,args:[e.id,r.m.slugify(e.name)]}},appLink:s.M.isVideo(e.video)?{action:d.e.Videos.VIDEO_CLIPS,application:u.O.VIDEOS,args:[e.video.id,r.m.slugify(e.video.name)]}:{action:d.e.Clips.CLIP_CLIPS,application:u.O.CLIPS,args:[e.video.id,r.m.slugify(e.video.name)]},childComponent:f,extraChildComponentProps:{yearGroups:e.yearGroups,audiences:e.audiences,imageCdnUrl:e.imageCdnUrl,setFavourite:e.setFavourite,canFavourite:e.canFavourite,isPlugin:e.isPlugin},analyticsData:e.analyticsData}))}},12059:(e,t,a)=>{a.d(t,{a:()=>N});var n=a(32735),i=a(42648),r=a(23481),o=a(110),l=a(78259),c=a(65858),s=a(72553),d=a(25723),u=a(87311),m=a(91743),p=a(83345),v=a(8730),g=a(40178),f=a(44829),h=a(59598),y=a(31908);const E={descriptionBorder:"YUC62"};var b="shared.videoDetailsV2",C=r.T.encloseNamespace(b);function I(e){var t=e.label,a=e.items,i=e.className;if(!(a&&a.data&&a.data.length))return n.createElement(n.Fragment,null);var r=a.data.map((function(e){return e.name})).join(", ");return n.createElement("div",{className:i},t,": ",r)}function k(e){var t,a,i,r,l,c,s,d,u,m=e.video;if(!y.M.isVideo(m)&&!y.M.isClip(m))return n.createElement(n.Fragment,null);var v=y.M.getParentVideo(m);return n.createElement("div",{className:m.description?"col-md-5 ps-md-3 pt-3 pt-md-0":"col-12"},n.createElement("h2",{className:"h6 mb-1"},n.createElement(p.x,{phrase:"details"})),!!v.productionYear&&n.createElement("div",{className:"mb-1"},n.createElement(p.x,{phrase:"productionYear",options:{year:v.productionYear}})),n.createElement(I,{label:C("productionCompanies",{smartCount:null===(a=null===(t=v.productionCompanies)||void 0===t?void 0:t.data)||void 0===a?void 0:a.length}),items:v.productionCompanies,className:"mb-1"}),n.createElement(I,{label:C("distributors",{smartCount:null===(r=null===(i=v.distributors)||void 0===i?void 0:i.data)||void 0===r?void 0:r.length}),items:v.distributors,className:"mb-1"}),n.createElement(I,{label:C("producers",{smartCount:null===(c=null===(l=v.producers)||void 0===l?void 0:l.data)||void 0===c?void 0:c.length}),items:v.producers,className:"mb-1"}),n.createElement(I,{label:C("directors",{smartCount:null===(d=null===(s=v.directors)||void 0===s?void 0:s.data)||void 0===d?void 0:d.length}),items:v.directors,className:"mb-1"}),!!v.dateBroadcast&&n.createElement("div",{className:"mb-1"},n.createElement(p.x,{phrase:"dateBroadcast",options:{date:o.O.format(v.dateBroadcast,"DD/MM/YYYY")}})),!!v.channel&&n.createElement("div",{className:"mb-1"},n.createElement(p.x,{phrase:"channel",options:{channel:v.channel.name}})),!((null===(u=m._isClickViewCurated)||void 0===u?void 0:u.value)||!m.dateCreated)&&n.createElement("div",{className:"mb-1"},n.createElement(p.x,{phrase:"dateUploaded",options:{date:o.O.format(m.dateCreated,"DD/MM/YYYY")}})))}function N(e){var t,a=e.video,r=e.maxHeight,o=void 0===r?g.x:r,C=y.M.getParentVideo(a),I=!!e.video.description,N=(0,v._)(e.video)||!!C.productionYear||!!C.dateBroadcast||!!C.channel||!(!a.dateCreated||(null===(t=a._isClickViewCurated)||void 0===t?void 0:t.value));if(!I&&!N)return n.createElement(n.Fragment,null);var w=function(){var t,a,n,i;return e.hideTags||y.M.isInteractive(e.video)||!(null===(a=null===(t=e.video.tags)||void 0===t?void 0:t.data)||void 0===a?void 0:a.length)?null:null===(i=null===(n=e.video.tags)||void 0===n?void 0:n.data)||void 0===i?void 0:i.filter((function(e){return e.tagType===f.Q.Normal}))}();return n.createElement(p.D.Provider,{value:b},n.createElement("section",{id:h.K.VideoDetails,ref:function(t){var a;t&&(null===(a=e.headingRef)||void 0===a?void 0:a.current)&&e.headingRef.current.set(h.K.VideoDetails,t)},className:"play-page-section"},n.createElement("div",null,n.createElement("h2",{className:"h5 mb-2"}," ",n.createElement(p.x,{phrase:"heading"}))),n.createElement("div",{className:"rounded border p-3 position-relative"},n.createElement(i.$B,{autoHeight:!0,autoHeightMax:o},n.createElement("div",{className:"row g-0"},I&&n.createElement("div",{className:N?"".concat(E.descriptionBorder," pe-3 col-md-7"):"col-12"},n.createElement("div",{className:"d-flex align-items-center"},n.createElement("h2",{className:"h6 mb-1"},n.createElement(p.x,{phrase:"description"})),n.createElement(d.m,{text:a.description,title:a.name,className:"ps-2",onLaunch:e.onLaunchImmersiveReader,onExit:e.onExitImmersiveReader,analyticsOptions:{location:c.LZ.PlayPage,entity:c.py.Video,actionType:c.Vw.Click,descriptor:c._S.LaunchImmersiveReader},analyticsData:{id:a.id,type:"description"}})),n.createElement("p",{className:"mb-0",dangerouslySetInnerHTML:{__html:l.O.linkifyText(e.video.description,{nl2br:!0})}})),N&&n.createElement(k,Object.assign({},e))),!!(null==w?void 0:w.length)&&n.createElement("div",{className:"mt-3"},n.createElement("h2",{className:"h6 mb-1"},n.createElement(p.x,{phrase:"normalTags"})),n.createElement(m.P,Object.assign({tags:w},u.G.getTagActionProps(e.getTagAppLink,null,e.suppressInteractivity),{className:"mt-1"}))),y.M.isBroadcast(e.video)&&n.createElement(s.j,{placement:"bottom-start",className:"d-flex justify-content-start mt-2 mb-n1"})))))}},51184:(e,t,a)=>{a.d(t,{NE:()=>d,RH:()=>m,Wp:()=>u});var n=a(32735),i=a(16367),r=a(34468),o=a(73758),l=a(63847);function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=Array(t);a<t;a++)n[a]=e[a];return n}var s=/\[\]\(cv:\/\/poi\?id=\d+\)\n*/g;function d(e,t){var a,r,o,l=(r=(0,n.useState)(""),o=2,function(e){if(Array.isArray(e))return e}(r)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var n,i,r,o,l=[],c=!0,s=!1;try{if(r=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;c=!1}else for(;!(c=(n=r.call(a)).done)&&(l.push(n.value),l.length!==t);c=!0);}catch(e){s=!0,i=e}finally{try{if(!c&&null!=a.return&&(o=a.return(),Object(o)!==o))return}finally{if(s)throw i}}return l}}(r,o)||function(e,t){if(e){if("string"==typeof e)return c(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)?c(e,t):void 0}}(r,o)||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=l[0],u=l[1];return(0,n.useEffect)((function(){if(t){var a=(n=e.glance,r=n.content.replace(s,""),i(r));u(a)}var n,r}),[null===(a=e.glance)||void 0===a?void 0:a.content,t]),d}function u(e){var t,a;return(null===(t=e.glance)||void 0===t?void 0:t.content)&&"text/markdown"===(null===(a=e.glance)||void 0===a?void 0:a.format)}function m(e,t){var a=(0,n.useRef)();function i(){e&&o.n.trigger("glance:poi:mouseover",e)}function c(){o.n.trigger("glance:poi:mouseleave")}return(0,r.R)("player:poi:mouseover",(function(t){var n,i,r;(null==t?void 0:t.id)&&(null===(n=null==e?void 0:e.id)||void 0===n?void 0:n.toString())===(null===(i=null==t?void 0:t.id)||void 0===i?void 0:i.toString())&&(null===(r=a.current)||void 0===r||r.classList.add(l.Z.highlightPoi))}),null,t),(0,r.R)("player:poi:mouseleave",(function(){var e;null===(e=a.current)||void 0===e||e.classList.remove(l.Z.highlightPoi)}),null,t),(0,n.useEffect)((function(){var e,n;if(a.current&&t)return null===(e=a.current)||void 0===e||e.addEventListener("mouseover",i),null===(n=a.current)||void 0===n||n.addEventListener("mouseleave",c),function(){var e,t;null===(e=a.current)||void 0===e||e.removeEventListener("mouseover",i),null===(t=a.current)||void 0===t||t.removeEventListener("mouseleave",c)}}),[a.current]),a}},64921:(e,t,a)=>{a.d(t,{j:()=>C});var n=a(32735),i=a(42648),r=a(11607),o=a(83345),l=a(93264),c=a(51184);const s={poiEntry:"vr6R9",poiText:"znHZF",public:"v0BZ9",poiTimeStamp:"AdKwe"};function d(e){var t=l.T.ToDisplayDuration(1e3*e.poi.startTime),a=(0,c.RH)(e.poi,!e.suppressInteractivity);return e.suppressInteractivity?n.createElement("div",{className:"d-flex ".concat(s.poiEntry," mb-2")},n.createElement("span",{className:"d-flex rounded-pill justify-content-center align-items-center fw-semibold info-link ".concat(s.poiTimeStamp)},t),n.createElement("div",{className:"".concat(s.public," ms-2")},e.poi.description)):n.createElement(r.L,{key:e.poi.startTime,className:"d-flex ".concat(s.poiEntry," mb-2 cursor-pointer"),onClick:function(){return e.onClickPoiItem(e.poi.startTime)},ref:a},n.createElement("div",{className:"d-flex rounded-pill justify-content-center align-items-center fw-semibold info-link ".concat(s.poiTimeStamp)},t),n.createElement("div",{className:"ms-2 ".concat(s.poiText)},e.poi.description))}var u="shared.pointsOfInterestList";function m(e){return n.createElement("div",null,n.createElement("h2",{className:"h6 my-2"},n.createElement(o.x,{namespace:u,phrase:"heading"})),n.createElement("div",null,e.pointsOfInterest.map((function(t){return n.createElement(d,{key:t.startTime,poi:t,suppressInteractivity:e.suppressInteractivity,onClickPoiItem:e.onClickPoiItem})}))))}var p=a(87311),v=a(91743),g=a(44829),f=a(31908),h=a(63847),y="shared.videoAtAGlanceV2",E=350;function b(e){return e.hideScrollbar?n.createElement(n.Fragment,null,e.children):n.createElement("div",{className:"rounded border mb-4 bg-white"},n.createElement(i.ZP,{autoHeight:!0,autoHeightMax:E},n.createElement("div",{className:"px-3 px-3 pt-3 pb-2"},e.children)))}function C(e){var t,a,i,r,l=(0,c.NE)(e.video,e.canViewGlance),s=f.M.isInteractive(e.video)||!(null===(a=null===(t=e.video.tags)||void 0===t?void 0:t.data)||void 0===a?void 0:a.length)?null:null===(r=null===(i=e.video.tags)||void 0===i?void 0:i.data)||void 0===r?void 0:r.filter((function(e){return e.tagType===g.Q.Pedagogy||e.tagType===g.Q.Skill}));return e.canViewGlance?n.createElement("section",{className:"play-page-section"},n.createElement(b,{hideScrollbar:e.hideScrollbar},n.createElement("h2",{className:"h6 mb-2"},n.createElement(o.x,{namespace:y,phrase:"learningIntention"})),n.createElement("div",{className:"".concat(h.Z.learningIntention," mb-3")},n.createElement("div",{dangerouslySetInnerHTML:{__html:l}})),!!(null==s?void 0:s.length)&&n.createElement("div",{className:"mb-1"},n.createElement(v.P,Object.assign({tags:s},p.G.getTagActionProps(e.getTagAppLink,e.onClickTag,e.suppressInteractivity),{className:"mt-2"}))),!!e.pointsOfInterest.length&&n.createElement(m,{pointsOfInterest:e.pointsOfInterest,suppressInteractivity:e.suppressInteractivity,onClickPoiItem:function(t){e.setStartTime(t)}}))):n.createElement(n.Fragment,null)}},17997:(e,t,a)=>{a.d(t,{H:()=>s});var n=a(32735),i=a(36848),r=a(83345),o=a(22843),l=a(89118),c=a(68626),s=n.memo((function(e){var t,a,s=e.data,d=e.thumbnailSize,u=e.preloadImage,m=Object.assign(Object.assign({},e.questionsAppLink),{args:[e.data.id]}),p=null===(a=null===(t=s._timepoints)||void 0===t?void 0:t.value)||void 0===a?void 0:a.length;return n.createElement("div",{className:"flex-shrink-0 px-1 col-6 col-sm-4"},n.createElement(l.u,{type:"static",textPosition:c.z.Independent,video:s,appLink:e.getAppLink(s),imageOptions:{size:d},preload:u,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,setFavourite:e.setFavourite,canFavourite:e.canFavourite,hideDuration:!1,imageCdnUrl:e.imageCdnUrl,isPlugin:e.isPlugin}),n.createElement("div",{className:"mt-2"},n.createElement(o.h,Object.assign({},e,{video:s,appLink:e.getAppLink(s)}))),n.createElement("div",{className:"mt-1"},n.createElement(i.F,{appLink:m,className:"cursor-pointer"},n.createElement(r.x,{namespace:"shared.interactiveWidgetItemV2",phrase:"previewQuestions",options:{count:p,smartCount:p}}))))}))},95812:(e,t,a)=>{a.d(t,{J:()=>v});var n=a(32735),i=a(23481),r=a(28400),o=a(11518),l=a(58704),c=a(59598),s=a(31908),d=a(14070),u=a(97291),m=a(17997),p="shared.playPageInteractivesV2";function v(e){var t;if(!e.canViewInteractives||!(null===(t=e.interactives)||void 0===t?void 0:t.length))return n.createElement(n.Fragment,null);var a=i.T.getPhrase(p,"interactives",{count:e.interactives.length});return n.createElement("section",{className:"play-page-section",id:c.K.Interactives,ref:function(t){var a;t&&(null===(a=e.headingRef)||void 0===a?void 0:a.current)&&e.headingRef.current.set(c.K.Interactives,t)}},n.createElement(o.kM,{name:a,contents:l.z.InteractivesV2,collection:e.interactives,prefetched:!0,getChildAppLink:function(e){return{application:u.O.INTERACTIVES,action:d.e.Interactives.VIEW_INTERACTIVE,args:[e.id,r.m.slugify(e.name)]}},appLink:s.M.isVideo(e.video)?{action:d.e.Videos.VIDEO_INTERACTIVES,application:u.O.VIDEOS,args:[e.video.id,r.m.slugify(e.video.name)]}:{action:d.e.Clips.CLIP_INTERACTIVES,application:u.O.CLIPS,args:[e.video.id,r.m.slugify(e.video.name)]},childComponent:m.H,extraChildComponentProps:{yearGroups:e.yearGroups,setFavourite:e.setFavourite,canFavourite:e.canFavourite,imageCdnUrl:e.imageCdnUrl,questionsAppLink:{application:u.O.INTERACTIVES,action:d.e.Interactives.PREVIEW_QUESTIONS},isPlugin:e.isPlugin},analyticsData:e.analyticsData}))}},53709:(e,t,a)=>{a.d(t,{M:()=>f});var n=a(32735),i=a(23481),r=a(65858),o=a(11518),l=a(16714),c=a(58704),s=a(22902),d=a(59598),u=a(74237),m=a(351);function p(e){return function(e){if(Array.isArray(e))return v(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return v(e,t);var 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)?v(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function v(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=Array(t);a<t;a++)n[a]=e[a];return n}var g="shared.playPageResources";function f(e){var t=(0,s.T)().hasPermissions,a=function(e,t){var a,n,i,r,o=null!==(n=null===(a=e.resources)||void 0===a?void 0:a.data)&&void 0!==n?n:[],l=null!==(r=null===(i=e.links)||void 0===i?void 0:i.data)&&void 0!==r?r:[];if(!t)return[].concat(p(o),p(l));var c=o.filter((function(e){var t;return["additional-materials","student-activity"].includes(null===(t=e.metadata)||void 0===t?void 0:t.resourceType)}));return[].concat(p(c),p(l))}(e.video,t(l.C.StudentExperience)),v=i.T.getPhrase(g,"resources",{count:a.length});return a.length?n.createElement("section",{id:d.K.Resources,className:"play-page-section",ref:function(t){var a;t&&(null===(a=e.headingRef)||void 0===a?void 0:a.current)&&e.headingRef.current.set(d.K.Resources,t)}},n.createElement(o.kM,{name:v,contents:c.z.PlayPageResourcesV2,collection:a,prefetched:!0,childComponent:m.oA,extraChildComponentProps:{imageCdnUrl:e.imageCdnUrl,imageErrorFallbackUrl:e.resourceThumbnailFallbackUrl,actionBehaviour:e.canViewResources?"normal":"public",location:"play-page",titlePosition:"below",onClickDownload:e.canViewResources?function(t){u.T.downloadResource(t,e.analyticsData,{location:r.LZ.PlayPage,actionType:r.Vw.Download,entity:r.py.Resource})}:null},getChildAppLink:e.getAppLink,analyticsOptions:e.canViewResources?{}:{workflowPhase:r.eu.Start,descriptor:r.Yu.SignUp},analyticsData:e.analyticsData})):n.createElement(n.Fragment,null)}},351:(e,t,a)=>{a.d(t,{$G:()=>k,oA:()=>N,ZS:()=>I});var n=a(32735),i=a(39202),r=a(49985),o=a(65858),l=a(36848),c=a(11607),s=a(75891),d=a(83914),u=a(60995),m=a(76177),p=a(61150),v=a(71063),g=a(4594),f=a(1164),h=a(79967),y=a(45778),E=a(54297),b=a(35223);const C={imageStyle:"bYRn8",item:"CjuxU",dashboard:"IuRN0",playPage:"VdJvp",aspectRatio:"QK8Jh",outerContainer:"eiC_H",innerContainer:"huIRg",actions:"FsIJm",titleBelow:"DpeSr",thumbnailContainer:"ZbalL",titleAbove:"PwOSX",teacherPack:"ZHAEj",text:"k3ei6",hoverState:"BLrWL",atomGuide:"Qz8JE",studentActivity:"qNspk",additionalMaterials:"R0huw",userUploaded:"H_zGf",imageTypeResource:"AgeLb",download:"DKneu"};function I(e,t){var a,n=(0,h.k)();return"public"===t||!n.xs&&!n.sm&&"resource"===e.type&&"metadata"in e&&(e.metadata.type===f.L.Image||(e.metadata.type===f.L.Pdf?!!e.url:!!(null===(a=e.pdf)||void 0===a?void 0:a.url)))}function k(e){var t,a,i,r,o=null;"metadata"in e.data&&(o=e.data.metadata);var l=y.G.isType(e.data,g.E.Resource);return n.createElement(n.Fragment,null,n.createElement("div",{className:C.aspectRatio},n.createElement("div",{className:C.outerContainer},n.createElement("div",{className:function(t){var a,n="\n d-flex flex-column align-items-center justify-content-end rounded-3 h-100\n position-relative ".concat(function(e){switch(e){case"atom-guide":return C.atomGuide;case"student-activity":return C.studentActivity;case"teacher-pack":return C.teacherPack;case"additional-materials":return C.additionalMaterials;default:return C.userUploaded}}(t)," ").concat(C.innerContainer);return(null===(a=e.theme)||void 0===a?void 0:a.containerClass)?n+=" ".concat(e.theme.containerClass):n+=" pt-3 px-3",e.applyHoverState&&(n+=" ".concat(C.hoverState)),n}(null==o?void 0:o.resourceType)},"above"===e.titlePosition&&n.createElement(m.u,{title:e.data.name},n.createElement("h3",{className:"text-center text-break h5 mb-3 ".concat(C.text)},n.createElement("span",{className:"clamp-1"},e.data.name))),n.createElement("div",{className:"\n ".concat(null!==(a=null===(t=e.theme)||void 0===t?void 0:t.thumbnailContainerClass)&&void 0!==a?a:""," w-75 overflow-hidden \n ").concat(C.thumbnailContainer," ").concat("above"===e.titlePosition?C.titleAbove:""," \n ").concat(C.imageStyle,"\n ")},n.createElement(s.C,{resource:e.data,imageCdnUrl:e.imageCdnUrl,imageErrorFallbackUrl:e.imageErrorFallbackUrl,preloadImage:e.preloadImage,dynamicRatioImageOptions:e.dynamicRatioImageOptions})),l&&e.onClickDownload&&"normal"===e.actionBehaviour&&n.createElement("div",{className:C.actions},n.createElement(c.L,{onClick:function(t){t.preventDefault(),t.stopPropagation(),y.G.isResource(e.data)&&"function"==typeof e.onClickDownload&&e.onClickDownload(e.data)},className:"".concat(C.download," d-flex align-items-center justify-content-center")},n.createElement(d.x,{svgName:b.vn.Download}))),!e.hideTypeBadge&&l&&n.createElement(p.y,{typeId:g.E.Resource})))),"below"===e.titlePosition&&n.createElement("div",{className:"mt-1 ".concat(C.titleBelow)},y.G.isType(e.data,g.E.Resource)&&!!(null===(r=null===(i=e.data)||void 0===i?void 0:i.metadata)||void 0===r?void 0:r.resourceType)&&n.createElement(u.m,null,E.C.getResourceTypeName(e.data.metadata.resourceType)),n.createElement("h3",{className:"h6 clamp-2"},e.data.name)))}k.defaultProps={preloadImage:!0,actionBehaviour:"normal"};var N=n.memo((function(e){var t=I(e.data,e.actionBehaviour),a=Object.assign(Object.assign({},e.analyticsData),e.data),c=Object.assign(Object.assign({},e.analyticsOptions),{actionType:o.Vw.Click,entity:e.data.typeId===g.E.Resource?o.py.Resource:o.py.Link});function s(){r.k.logUserAction(a,c)}var d,u=Object.assign(Object.assign({},e),{applyHoverState:t||!!e.data.url});return n.createElement("div",{className:"px-1 flex-shrink-0 ".concat(C.item," ").concat("play-page"===e.location?C.playPage:C.dashboard," ").concat(v.M.RESOURCE_ITEM_SELECTOR)},(d="d-block no-decoration","link"===e.data.type?n.createElement("a",{href:e.data.url,target:"_blank",className:d,onClick:s},n.createElement(k,Object.assign({},u))):t?"public"===e.actionBehaviour?n.createElement("div",{className:"".concat(d," cursor-pointer d-inline"),onClick:function(){s(),i.C$.trigger(e.getAppLink(e.data))}},n.createElement(k,Object.assign({},u))):n.createElement(l.F,{appLink:e.getAppLink(e.data),className:d,analyticsData:a,analyticsOptions:c},n.createElement(k,Object.assign({},u))):e.data.url?n.createElement("a",{href:e.data.url,className:d,onClick:s},n.createElement(k,Object.assign({},u))):n.createElement("div",{className:d},n.createElement(k,Object.assign({},u)))))}))},75838:(e,t,a)=>{a.d(t,{w:()=>s});var n=a(32735),i=a(92869),r=a(65858),o=a(36848),l=a(11607);const c={itemsWrapper:"m6mGm",anchorWrapper:"QptZj",default:"_AZa8",selectedItem:"Nuiel",disabled:"WIzWJ",floatIcon:"ARudn",arrowIcon:"tEF5Q",listIcon:"Ql2wi"};function s(e){var t={actionType:r.Vw.Click,entity:r.py.Widget,location:r.LZ.TableOfContents};return n.createElement("div",{className:"".concat(c.itemsWrapper)},e.items.map((function(a,r){return e.localState?n.createElement(l.L,{key:a.id,className:"".concat(c.anchorWrapper," ").concat(e.activeId===a.id?c.selectedItem:""),onClick:function(){var t;i.t.preventScrollTop(),e.setControlledId(a.id),null===(t=e.onItemClick)||void 0===t||t.call(e,a)}},n.createElement("div",{className:"".concat(e.activeId||0!==r?"":c.default," ")},a.name)):n.createElement(o.F,{key:a.id,appLink:e.getAppLink(a),appLinkOptions:{replace:!0},className:"".concat(c.anchorWrapper," ").concat(e.activeId===a.id?c.selectedItem:""),onClick:function(){var t;i.t.preventScrollTop(),e.setControlledId(a.id),null===(t=e.onItemClick)||void 0===t||t.call(e,a)},analyticsData:Object.assign(Object.assign({},e.analyticsData),{id:a.id,name:a.name}),analyticsOptions:t},n.createElement("div",{className:"".concat(e.activeId||0!==r?"":c.default," ")},a.name))})))}},65332:(e,t,a)=>{a.d(t,{D:()=>r});var n,i=a(32735),r=function(e){var t=e.setActiveId,a=e.headingElements,r=e.controlledId,o=e.setControlledId,l=i.useRef(0);i.useEffect((function(){var e=new IntersectionObserver((function(e){e.forEach((function(e){if(r)return t(r),void(n=window.setTimeout((function(){o("")}),800));if(e.isIntersecting)t(e.target.id),l.current=window.scrollY;else{var i=l.current-window.scrollY>0,c=a.findIndex((function(t){return t.id===e.target.id})),s=a[c-1];i&&(null==s?void 0:s.id)&&t(null==s?void 0:s.id)}}))}),{rootMargin:"-67px 0px -80% 0px"});return a.forEach((function(t){return e.observe(t)})),function(){n&&window.clearTimeout(n),e.disconnect()}}),[t,a.length,r])}},74237:(e,t,a)=>{a.d(t,{T:()=>l});var n=a(97395),i=a(49985),r=a(65858),o=null,l={getVideoDownloadUrl:function(e,t){return n._.safeUrlConcat(n._.makeHttps(e),"/download?token=".concat(t))},downloadResource:function(e,t,a){var n,l=o;o||(l=o=document.createElement("iframe"),document.body.appendChild(l),l.style.display="none"),l.src=e.url,i.k.logUserAction(Object.assign({id:null==e?void 0:e.id,name:null==e?void 0:e.name,resourceType:null===(n=null==e?void 0:e.metadata)||void 0===n?void 0:n.resourceType},t),Object.assign({actionType:r.Vw.Download,entity:r.py.Resource,workflowPhase:r.eu.Complete},a))}}},9465:(e,t,a)=>{a.d(t,{h:()=>h});var n=a(32735),i=a(50690),r=a(49985),o=a(65858),l=a(10874),c=a(75838),s=a(83345),d=a(75795),u=a(35223),m=a(28501);const p={container:"qA4yj",aside:"j28IY",collapse:"sFoPk",iconContainer:"PYyBV",arrowIcon:"MTodB",listIcon:"W76p8"};var v="shared.playPage";function g(e){function t(){var t;e.setIsExpanded(!e.isExpanded),t={actionType:e.isExpanded?o.Vw.Hide:o.Vw.Open,entity:o.py.TableOfContents,location:o.LZ.PlayPage},r.k.logUserAction(e.analyticsData,t)}return n.createElement("div",{className:"d-flex justify-content-end"},n.createElement("div",{className:p.container},n.createElement("div",{className:"".concat(p.iconContainer)},n.createElement(l.h,{className:"btn btn-outline-dark ".concat(p.listIcon),svgName:u.vn.TableOfContents,onClick:t}),n.createElement(l.h,{className:"btn btn-outline-dark ".concat(p.arrowIcon),svgName:e.isExpanded?u.vn.CollapseRight:u.vn.ExpandLeft,onClick:t}))))}function f(e){return n.createElement("div",{className:e.showInSide?"":"d-inline-flex gap-1"},n.createElement("aside",{className:"".concat(p.aside," position-relative ").concat(e.showInSide?"pe-1 pt-1 ":"px-3 pt-3 pb-2 border border-dark rounded-1 bg-white")},n.createElement("div",{className:p.container},e.showInSide&&n.createElement(l.h,{className:"btn position-absolute ".concat(p.collapse),svgName:u.vn.CollapseRight,onClick:function(){var t;e.setIsExpanded(!1),t={actionType:o.Vw.Hide,entity:o.py.TableOfContents,location:o.LZ.PlayPage},r.k.logUserAction(e.analyticsData,t)}}),n.createElement("h2",{className:"h5"},n.createElement(s.x,{namespace:v,phrase:"tocHeading"})),n.createElement(c.w,{items:e.items,activeId:e.activeId,getAppLink:function(e){var t=d.O.getCurrentRoute().appLink,a=t.params?Object.assign({},t.params):{};return a.tocId=e.id,Object.assign(Object.assign({},t),{params:a})},setControlledId:e.setControlledId,analyticsData:e.analyticsData,onItemClick:function(){e.showInSide||e.setIsExpanded(!1)}}))),!e.showInSide&&n.createElement(g,Object.assign({},e)))}function h(e){return n.createElement(n.Fragment,null,i.b.renderInPortalIfExists(e.isExpanded?n.createElement(f,Object.assign({},e)):n.createElement(g,Object.assign({},e)),document.getElementById(m.M)))}},53256:(e,t,a)=>{a.d(t,{d:()=>o});var n=a(23481),i=a(59598),r=n.T.encloseNamespace("shared.play"),o={getSectionHeading:function(e,t){switch(e){case i.K.Resources:return r("resourcesHeading",{count:t.resources.length});case i.K.Clips:return t.isPlayClipPage?r("otherClipsHeading",{count:t.clips.length-1}):r("clipsHeading",{count:t.clips.length});case i.K.Interactives:return r("interactivesHeading",{count:t.interactives.length});case i.K.Video:return r("videoHeading");case i.K.VideoDetails:return r("videoDetailsHeading");case i.K.RelatedVideos:return r("upNextHeading");case i.K.CurriculumLinks:return r("curriculumLinksHeading");case i.K.ClippedFrom:return r("clippedFromHeading");default:return""}}}},63010:(e,t,a)=>{a.d(t,{Q:()=>s});var n=a(32735),i=a(57900),r=a(81812);function o(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var n,i,r,o,l=[],c=!0,s=!1;try{if(r=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;c=!1}else for(;!(c=(n=r.call(a)).done)&&(l.push(n.value),l.length!==t);c=!0);}catch(e){s=!0,i=e}finally{try{if(!c&&null!=a.return&&(o=a.return(),Object(o)!==o))return}finally{if(s)throw i}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return l(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)?l(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=Array(t);a<t;a++)n[a]=e[a];return n}var c="play-page-toc-expanded";function s(e){var t=(0,r.a)(),a=!1!==i.SG.get(c),l=!!t&&a,s=o(n.useState(e||""),2),d=s[0],u=s[1],m=o(n.useState(""),2),p=m[0],v=m[1],g=o(n.useState(l),2),f=g[0],h=g[1];return n.useEffect((function(){h(!!t&&a)}),[t]),{controlledId:d,setControlledId:u,tableOfContentsExpanded:f,tableOfContentsActiveId:p,setTableOfContentsActiveId:v,onToggleTableOfContents:function(){h(!f),i.SG.set(c,!f)}}}},14476:(e,t,a)=>{a.d(t,{i:()=>l});var n=a(32735),i=a(59598),r=[i.K.Video,i.K.CurriculumLinks,i.K.Resources,i.K.Interactives,i.K.Clips,i.K.VideoDetails,i.K.ClippedFrom,i.K.RelatedVideos],o=[i.K.Video,i.K.VideoDetails,i.K.CurriculumLinks,i.K.Resources,i.K.Interactives,i.K.Clips,i.K.ClippedFrom,i.K.RelatedVideos];function l(e){var t=n.useRef(new Map),a=(e?r:o).map((function(e){return t.current.get(e)})).filter(Boolean);return{headingRef:t,headingElements:a}}},81812:(e,t,a)=>{a.d(t,{a:()=>i});var n=a(79967);function i(){var e=(0,n.k)();return e.lg||e.xl||e.xxl}},63847:(e,t,a)=>{a.d(t,{Z:()=>n});const n={learningIntention:"MHM6O",highlightPoi:"U7Q6x"}}}]);
2
+ //# sourceMappingURL=6587-c9af2d4a7e-lite.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/6587-c9af2d4a7e-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/copyright-disclaimer/copyright-disclaimer.scss","file:///app/packages/libs/shared/src/components/copyright-disclaimer/CopyrightDisclaimer.tsx","file:///app/packages/libs/shared/src/components/play-page-v2/clips-widget/ClipWidgetItemV2.tsx","file:///app/packages/libs/shared/src/components/play-page-v2/clips-widget/PlayPageClips.tsx","file:///app/packages/libs/shared/src/components/play-page-v2/details/video-details.scss","file:///app/packages/libs/shared/src/components/play-page-v2/details/VideoDetailsV2.tsx","file:///app/packages/libs/shared/src/components/play-page-v2/glance/VideoAtAGlanceUtilsV2.ts","file:///app/packages/libs/shared/src/components/play-page-v2/glance/points-of-interest-list/points-of-interest-list.scss","file:///app/packages/libs/shared/src/components/play-page-v2/glance/points-of-interest-list/PointsOfInterestList.tsx","file:///app/packages/libs/shared/src/components/play-page-v2/glance/VideoAtAGlanceV2.tsx","file:///app/packages/libs/shared/src/components/play-page-v2/interactives-widget/InteractiveWidgetItemV2.tsx","file:///app/packages/libs/shared/src/components/play-page-v2/interactives-widget/PlayPageInteractives.tsx","file:///app/packages/libs/shared/src/components/play-page-v2/resources-widget/PlayPageResources.tsx","file:///app/packages/libs/shared/src/components/play-page-v2/resources-widget/resource-widget-item.scss","file:///app/packages/libs/shared/src/components/play-page-v2/resources-widget/ResourceWidgetItemV2.tsx","file:///app/packages/libs/shared/src/components/table-of-contents-list/table-of-contents-list.scss","file:///app/packages/libs/shared/src/components/table-of-contents-list/TableOfContentsList.tsx","file:///app/packages/libs/shared/src/hooks/useTableOfContentsActiveHeading.tsx","file:///app/packages/libs/shared/src/utils/DownloadHelper.ts","file:///app/packages/projects/lite/src/shared/components/play-page/components/table-of-contents/table-of-contents.scss","file:///app/packages/projects/lite/src/shared/components/play-page/components/table-of-contents/TableOfContents.tsx","file:///app/packages/projects/lite/src/shared/views/play/v2/PlayPageUtilV2.tsx","file:///app/packages/projects/lite/src/shared/views/play/v2/hooks/usePlayPageTableOfContent.ts","file:///app/packages/projects/lite/src/shared/constants/PlayPageSectionsOrder.ts","file:///app/packages/projects/lite/src/shared/views/play/v2/hooks/useSectionHeadings.ts","file:///app/packages/projects/lite/src/shared/views/play/v2/hooks/useShouldShowTableOfContents.ts","file:///app/packages/libs/shared/src/components/play-page-v2/glance/video-at-a-glance.scss"],"sourcesContent":["import React from 'react';\nimport { createPortal } from 'react-dom';\n\nexport const PortalHelper = {\n renderInPortalIfExists(component: React.ReactElement, portalContainer: Element | null): React.ReactElement {\n if (portalContainer)\n return createPortal(component, portalContainer);\n\n return component;\n }\n};","// 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}\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 />\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 }}\n analyticsData={props.analyticsData}\n />\n </section>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"descriptionBorder\":\"YUC62\"};","import * as React from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\nimport { LinkifyHelper } from 'libs/common/react/utils/LinkifyHelper';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { CopyrightDisclaimer } from 'libs/shared/components/copyright-disclaimer/CopyrightDisclaimer';\nimport { ImmersiveReader } from 'libs/shared/components/immersive-reader/ImmersiveReader';\nimport { TagHelper } from 'libs/shared/components/tags/TagHelper';\nimport { TagList } from 'libs/shared/components/tags/TagList';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { hasPPDD } from 'libs/shared/components/video-details/VideoDetailsUtils';\nimport { MINIMUM_GLANCE_HEIGHT } from 'libs/shared/constants/MinimumGlanceHeight';\nimport { TagType } from 'libs/shared/enums/TagType';\nimport { BaseObject, BasePaginatedCollection, Tag, VideoTypes } from 'libs/shared/interfaces';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './video-details.scss';\n\nconst namespace = 'shared.videoDetailsV2';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface CommaListProps {\n label: string;\n items: BasePaginatedCollection<BaseObject>;\n className?: string;\n}\n\nfunction CommaList(props: CommaListProps): React.ReactElement {\n const { label, items, className } = props;\n\n const hasItems = items && items.data && items.data.length;\n\n if (!hasItems)\n return <></>;\n\n const commaSeperated = items.data.map(i => i.name).join(', ');\n\n return (\n <div className={className}>{label}: {commaSeperated}</div>\n );\n}\n\nfunction DetailsSection(props: VideoDetailsWithScrollbarV2Props): React.ReactElement {\n const { video } = props;\n\n if (!VideoHelper.isVideo(video) && !VideoHelper.isClip(video))\n return <></>;\n\n const parentVideo = VideoHelper.getParentVideo(video);\n\n return (\n <div className={video.description ? 'col-md-5 ps-md-3 pt-3 pt-md-0' : 'col-12'}>\n <h2 className='h6 mb-1'><Text phrase='details' /></h2>\n {!!parentVideo.productionYear && (\n <div className='mb-1'>\n <Text phrase='productionYear' options={{ year: parentVideo.productionYear }} />\n </div>\n )}\n <CommaList\n label={getPhrase('productionCompanies', { smartCount: parentVideo.productionCompanies?.data?.length })}\n items={parentVideo.productionCompanies}\n className='mb-1'\n />\n <CommaList\n label={getPhrase('distributors', { smartCount: parentVideo.distributors?.data?.length })}\n items={parentVideo.distributors}\n className='mb-1'\n />\n <CommaList\n label={getPhrase('producers', { smartCount: parentVideo.producers?.data?.length })}\n items={parentVideo.producers}\n className='mb-1'\n />\n <CommaList\n label={getPhrase('directors', { smartCount: parentVideo.directors?.data?.length })}\n items={parentVideo.directors}\n className='mb-1'\n />\n {!!parentVideo.dateBroadcast && (\n <div className='mb-1'>\n <Text phrase='dateBroadcast' options={{ date: DateHelper.format(parentVideo.dateBroadcast, 'DD/MM/YYYY') }} />\n </div>\n )}\n {!!parentVideo.channel && (\n <div className='mb-1'>\n <Text phrase='channel' options={{ channel: parentVideo.channel.name }} />\n </div>\n )}\n {!!(!video._isClickViewCurated?.value && video.dateCreated) && (\n <div className='mb-1'>\n <Text phrase='dateUploaded' options={{ date: DateHelper.format(video.dateCreated, 'DD/MM/YYYY') }} />\n </div>\n )}\n </div>\n );\n}\n\ninterface VideoDetailsWithScrollbarV2Props {\n video: VideoTypes;\n getTagAppLink?: (tag: Tag) => Core.AppLink;\n onLaunchImmersiveReader?: () => void;\n onExitImmersiveReader?: () => void;\n maxHeight?: number;\n suppressInteractivity?: boolean;\n hideTags?: boolean;\n headingRef?: React.MutableRefObject<Map<PlayPageAnchor, HTMLElement>>;\n}\n\nexport function VideoDetailsWithScrollbarV2(props: VideoDetailsWithScrollbarV2Props): React.ReactElement {\n const { video, maxHeight = MINIMUM_GLANCE_HEIGHT } = props;\n\n const parentVideo = VideoHelper.getParentVideo(video);\n\n const showDescription = !!props.video.description;\n\n const showDetails = (\n hasPPDD(props.video) ||\n !!parentVideo.productionYear ||\n !!parentVideo.dateBroadcast ||\n !!parentVideo.channel ||\n !!(video.dateCreated && !video._isClickViewCurated?.value)\n );\n\n if (!showDescription && !showDetails)\n return <></>;\n\n function getTags(): Tag[] {\n if (props.hideTags || VideoHelper.isInteractive(props.video) || !props.video.tags?.data?.length)\n return null;\n\n return props.video.tags?.data?.filter(tag => tag.tagType === TagType.Normal);\n }\n const tags = getTags();\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <section\n id={PlayPageAnchor.VideoDetails}\n ref={el => {\n (el && props.headingRef?.current) && props.headingRef.current.set(PlayPageAnchor.VideoDetails, el);\n }}\n className='play-page-section'\n >\n <div>\n <h2 className='h5 mb-2'> <Text phrase='heading' /></h2>\n </div>\n <div className='rounded border p-3 position-relative'>\n <Scrollbars autoHeight autoHeightMax={maxHeight}>\n <div className='row g-0'>\n {showDescription && (\n <div className={showDetails ? `${styles.descriptionBorder} pe-3 col-md-7` : 'col-12'}>\n <div className='d-flex align-items-center'>\n <h2 className='h6 mb-1'>\n <Text phrase='description' />\n </h2>\n <ImmersiveReader\n text={video.description}\n title={video.name}\n className='ps-2'\n onLaunch={props.onLaunchImmersiveReader}\n onExit={props.onExitImmersiveReader}\n analyticsOptions={{\n location: LocationContext.PlayPage,\n entity: EntityType.Video,\n actionType: UserAction.Click,\n descriptor: ClickDescriptor.LaunchImmersiveReader\n }}\n analyticsData={{ id: video.id, type: 'description' }}\n />\n </div>\n <p className='mb-0' dangerouslySetInnerHTML={{ __html: LinkifyHelper.linkifyText(props.video.description, { nl2br: true }) }} />\n </div>\n )}\n\n {showDetails && (\n <DetailsSection {...props} />\n )}\n </div>\n\n {!!tags?.length && (\n <div className='mt-3'>\n <h2 className='h6 mb-1'><Text phrase='normalTags' /></h2>\n <TagList\n tags={tags}\n {...TagHelper.getTagActionProps(props.getTagAppLink, null, props.suppressInteractivity)}\n className='mt-1'\n />\n </div>\n )}\n\n {VideoHelper.isBroadcast(props.video) && <CopyrightDisclaimer placement='bottom-start' className='d-flex justify-content-start mt-2 mb-n1' />}\n\n </Scrollbars>\n </div>\n </section>\n </LanguageNamespaceContext.Provider>\n );\n}","import { MutableRefObject, useEffect, useRef, useState } from 'react';\nimport * as marked from 'marked';\n\nimport { useEventsServiceSubscribe } from 'libs/common/react/hooks/UseEventsServiceSubscribe';\nimport { EventsService } from 'libs/common/react/services/EventsService';\n\nimport { Clip, Glance, PointOfInterest, Video } from 'libs/shared/interfaces';\n\nimport styles from './video-at-a-glance.scss';\n\nconst POI_LINK_LINE = /\\[\\]\\(cv:\\/\\/poi\\?id=\\d+\\)\\n*/g;\n\nfunction stripPoisFromGlanceContent(glanceContent: string): string {\n return glanceContent.replace(POI_LINK_LINE, '');\n}\n\nfunction getLearningIntentionHTML(glance: Glance): string {\n const learningIntention = stripPoisFromGlanceContent(glance.content);\n\n return marked(learningIntention);\n}\n\nexport function useLearningIntentionMarkdown(\n video: Video,\n hasGlanceData?: boolean\n): string {\n const [ markdownHTML, setMarkdownHTML ] = useState('');\n\n useEffect(() => {\n if (!hasGlanceData)\n return;\n\n const content = getLearningIntentionHTML(video.glance);\n\n setMarkdownHTML(content);\n }, [ video.glance?.content, hasGlanceData ]);\n\n return markdownHTML;\n}\n\nexport function hasGlanceData(video: Video | Clip): boolean {\n return video.glance?.content && video.glance?.format === 'text/markdown';\n}\n\nexport function useHighlightPointOfInterest(\n pointOfInterest: PointOfInterest,\n shouldHighlight: boolean\n): MutableRefObject<HTMLDivElement> {\n const ref = useRef<HTMLDivElement>();\n\n useEventsServiceSubscribe('player:poi:mouseover', onPlayerPoiMouseOver, null, shouldHighlight);\n useEventsServiceSubscribe('player:poi:mouseleave', onPlayerPoiMouseLeave, null, shouldHighlight);\n\n useEffect(() => {\n if (!ref.current || !shouldHighlight)\n return;\n\n ref.current?.addEventListener('mouseover', onGlancePoiMouseOver);\n ref.current?.addEventListener('mouseleave', onGlancePoiMouseLeave);\n\n return () => {\n ref.current?.removeEventListener('mouseover', onGlancePoiMouseOver);\n ref.current?.removeEventListener('mouseleave', onGlancePoiMouseLeave);\n };\n }, [ref.current]);\n\n function onPlayerPoiMouseOver(hoveredPoi: PointOfInterest): void {\n if (!hoveredPoi?.id || pointOfInterest?.id?.toString() !== hoveredPoi?.id?.toString())\n return;\n\n ref.current?.classList.add(styles.highlightPoi);\n }\n\n function onPlayerPoiMouseLeave(): void {\n ref.current?.classList.remove(styles.highlightPoi);\n }\n\n /**\n * `this` will be the element to which the eventListener is bound.\n */\n function onGlancePoiMouseOver(): void {\n if (pointOfInterest)\n EventsService.trigger('glance:poi:mouseover', pointOfInterest);\n }\n\n function onGlancePoiMouseLeave(): void {\n EventsService.trigger('glance:poi:mouseleave');\n }\n\n return ref;\n}","// extracted by mini-css-extract-plugin\nexport default {\"poiEntry\":\"vr6R9\",\"poiText\":\"znHZF\",\"public\":\"v0BZ9\",\"poiTimeStamp\":\"AdKwe\"};","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 info-link ${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 info-link ${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 Scrollbars from 'react-custom-scrollbars-2';\n\nimport { Core } from 'libs/common/core';\n\nimport { PointOfInterestList } from 'libs/shared/components/play-page-v2/glance/points-of-interest-list/PointsOfInterestList';\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 { TagType } from 'libs/shared/enums/TagType';\nimport { PointOfInterest, Tag, Video } from 'libs/shared/interfaces';\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';\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 \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 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 <div className={`${styles.learningIntention} mb-3`}>\n <div dangerouslySetInnerHTML={{ __html: learningIntentionMarkdownHTML }}/>\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}\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 />\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 }}\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\",\"aside\":\"j28IY\",\"collapse\":\"sFoPk\",\"iconContainer\":\"PYyBV\",\"arrowIcon\":\"MTodB\",\"listIcon\":\"W76p8\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { PortalHelper } from 'libs/common/react/utils/PortalHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, HashObject, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { TableOfContentsList } from 'libs/shared/components/table-of-contents-list/TableOfContentsList';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { ContextService } from 'libs/shared/services/ContextService';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { PLAY_PAGE_TOC_PORTAL_ID } from 'shared/layouts/teacher-layout/TeacherLayoutComponent';\n\nimport styles from './table-of-contents.scss';\n\nconst namespace = 'shared.playPage';\n\nexport interface TableOfContentsItem {\n name: string;\n id: PlayPageAnchor;\n}\n\ninterface TableOfContentsProps {\n items: TableOfContentsItem[];\n activeId: string;\n appLink?: Core.AppLink;\n analyticsData?: HashObject;\n setControlledId: (arg: string) => void;\n isExpanded: boolean;\n setIsExpanded: (arg: boolean) => void;\n showInSide: boolean;\n}\n\nfunction TableOfContentsIcon(props: TableOfContentsProps) {\n function logUserAction() {\n const analyticsOptions = {\n actionType: !props.isExpanded ? UserAction.Open : UserAction.Hide,\n entity: EntityType.TableOfContents,\n location: LocationContext.PlayPage\n };\n\n AnalyticsHelper.logUserAction(props.analyticsData, analyticsOptions);\n }\n\n function onClickIcon() {\n props.setIsExpanded(!props.isExpanded);\n logUserAction();\n }\n\n return (\n <div className='d-flex justify-content-end'>\n <div className={styles.container}>\n <div className={`${styles.iconContainer}`} >\n <IconButton\n className={`btn btn-outline-dark ${styles.listIcon}`}\n svgName={cvSvgLibrary.TableOfContents}\n onClick={onClickIcon}\n />\n \n <IconButton\n className={`btn btn-outline-dark ${styles.arrowIcon}`}\n svgName={!props.isExpanded ? cvSvgLibrary.ExpandLeft : cvSvgLibrary.CollapseRight}\n onClick={onClickIcon}\n />\n </div>\n </div>\n </div>\n );\n}\n\nfunction TableOfContents(props: TableOfContentsProps) {\n function logUserAction() {\n const analyticsOptions = {\n actionType: UserAction.Hide,\n entity: EntityType.TableOfContents,\n location: LocationContext.PlayPage\n };\n\n AnalyticsHelper.logUserAction(props.analyticsData, analyticsOptions);\n }\n\n function getAppLink(item: any): Core.AppLink {\n const currentAppLink = ContextService.getCurrentRoute().appLink;\n\n const params: HashObject = currentAppLink.params\n ? { ...(currentAppLink.params as HashObject) }\n : {};\n\n params.tocId = item.id;\n\n return {\n ...currentAppLink,\n params\n };\n }\n\n function onClickTableOfContentsHeading() {\n if (!props.showInSide) {\n // in mobile version, collapse once user hit the TOC item\n props.setIsExpanded(false);\n }\n }\n\n return (\n <div className={!props.showInSide ? 'd-inline-flex gap-1' : ''}>\n <aside className={`${styles.aside} position-relative ${!props.showInSide ? 'px-3 pt-3 pb-2 border border-dark rounded-1 bg-white' : 'pe-1 pt-1 '}`}>\n <div className={styles.container}>\n {props.showInSide && (\n <IconButton\n className={`btn position-absolute ${styles.collapse}`}\n svgName={cvSvgLibrary.CollapseRight}\n onClick={() => {\n props.setIsExpanded(false);\n logUserAction();\n }}\n />\n )}\n <h2 className='h5'><Text namespace={namespace} phrase='tocHeading' /></h2>\n \n <TableOfContentsList\n items={props.items}\n activeId={props.activeId}\n getAppLink={getAppLink}\n setControlledId={props.setControlledId}\n analyticsData={props.analyticsData}\n onItemClick={() => onClickTableOfContentsHeading()}\n />\n </div>\n \n </aside>\n {/* in mobile version, always show icon on the right */}\n {!props.showInSide && <TableOfContentsIcon {...props}/>}\n </div>\n );\n}\n\nexport function TableOfContentsContainer(props: TableOfContentsProps): JSX.Element {\n return (\n <>\n {PortalHelper.renderInPortalIfExists(\n props.isExpanded\n ? <TableOfContents {...props} />\n : <TableOfContentsIcon {...props}/>,\n document.getElementById(PLAY_PAGE_TOC_PORTAL_ID)\n )}\n </>\n );\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Clip, InteractiveMetadata, Resource } from 'libs/shared/interfaces';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\n\ninterface SectionHeadingOptions{\n clips: Clip[];\n interactives: InteractiveMetadata[];\n resources: Resource[];\n isPlayClipPage?: boolean;\n}\n\nconst namespace = 'shared.play';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport const PlayPageUtils = {\n getSectionHeading(id: PlayPageAnchor, options: SectionHeadingOptions) {\n switch (id) {\n case PlayPageAnchor.Resources:\n return getPhrase('resourcesHeading', { count: options.resources.length });\n\n case PlayPageAnchor.Clips:\n if (options.isPlayClipPage)\n return getPhrase('otherClipsHeading', { count: options.clips.length - 1 });\n return getPhrase('clipsHeading', { count: options.clips.length });\n\n case PlayPageAnchor.Interactives:\n return getPhrase('interactivesHeading', { count: options.interactives.length });\n\n case PlayPageAnchor.Video:\n return getPhrase('videoHeading');\n\n case PlayPageAnchor.VideoDetails:\n return getPhrase('videoDetailsHeading');\n\n case PlayPageAnchor.RelatedVideos:\n return getPhrase('upNextHeading');\n \n case PlayPageAnchor.CurriculumLinks:\n return getPhrase('curriculumLinksHeading');\n \n case PlayPageAnchor.ClippedFrom:\n return getPhrase('clippedFromHeading');\n\n default:\n return '';\n }\n }\n\n};","import React from 'react';\n\nimport { LocalStorageHelper } from 'libs/common/backbone/utils/LocalStorageHelper';\n\nimport { useShouldShowSideTableOfContents } from 'shared/views/play/v2/hooks/useShouldShowTableOfContents';\n\nconst PLAY_PAGE_TOC_EXPANDED = 'play-page-toc-expanded';\n\nexport function usePlayPageTableOfContent(tocId: string) {\n const showInSide = useShouldShowSideTableOfContents();\n\n const localValue = LocalStorageHelper.get(PLAY_PAGE_TOC_EXPANDED) !== false;\n const tocDefaultExpanded = !showInSide ? false : localValue;\n\n const [ controlledId, setControlledId ] = React.useState(tocId || '');\n const [ tableOfContentsActiveId, setTableOfContentsActiveId ] = React.useState<string>('');\n const [ tableOfContentsExpanded, setTableOfContentsExpanded ] = React.useState(tocDefaultExpanded);\n \n React.useEffect(() => {\n if (!showInSide) {\n // automatically collpase on mobile version\n setTableOfContentsExpanded(false);\n } else {\n setTableOfContentsExpanded(localValue);\n }\n }, [showInSide]);\n\n function onToggleTableOfContents() {\n setTableOfContentsExpanded(!tableOfContentsExpanded);\n LocalStorageHelper.set(PLAY_PAGE_TOC_EXPANDED, !tableOfContentsExpanded);\n }\n\n return {\n controlledId,\n setControlledId,\n tableOfContentsExpanded,\n tableOfContentsActiveId,\n setTableOfContentsActiveId,\n onToggleTableOfContents\n };\n}","import { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\n\nexport const PLAY_PAGE_SECTIONS_ORDER = [\n PlayPageAnchor.Video,\n PlayPageAnchor.CurriculumLinks,\n PlayPageAnchor.Resources,\n PlayPageAnchor.Interactives,\n PlayPageAnchor.Clips,\n PlayPageAnchor.VideoDetails,\n PlayPageAnchor.ClippedFrom,\n PlayPageAnchor.RelatedVideos\n];\n\nexport const PLAY_PAGE_SECTIONS_ORDER_NO_GLANCE = [\n PlayPageAnchor.Video,\n PlayPageAnchor.VideoDetails,\n PlayPageAnchor.CurriculumLinks,\n PlayPageAnchor.Resources,\n PlayPageAnchor.Interactives,\n PlayPageAnchor.Clips,\n PlayPageAnchor.ClippedFrom,\n PlayPageAnchor.RelatedVideos\n];","import React from 'react';\n\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\n\nimport { PLAY_PAGE_SECTIONS_ORDER, PLAY_PAGE_SECTIONS_ORDER_NO_GLANCE } from 'shared/constants/PlayPageSectionsOrder';\n\nexport function useSectionHeadings(hasGlance: boolean) {\n const headingRef = React.useRef<Map<PlayPageAnchor, HTMLElement>>(new Map());\n const headingElements = (hasGlance ? PLAY_PAGE_SECTIONS_ORDER : PLAY_PAGE_SECTIONS_ORDER_NO_GLANCE).map(id => {\n return headingRef.current.get(id);\n }).filter(Boolean);\n\n return { headingRef, headingElements };\n}","import { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\n// returns boolean value for if we should show the TOC on the side\nexport function useShouldShowSideTableOfContents(): boolean {\n const breakpoints = useBreakpoints();\n const shouldShowSideTableOfContents = breakpoints.lg || breakpoints.xl || breakpoints.xxl;\n return shouldShowSideTableOfContents;\n}","// extracted by mini-css-extract-plugin\nexport default {\"learningIntention\":\"MHM6O\",\"highlightPoi\":\"U7Q6x\"};"],"names":["PortalHelper","renderInPortalIfExists","component","portalContainer","createPortal","namespace","CONTAINER_HEIGHT","CopyrightDisclaimer","props","ref","isHovering","className","Text","phrase","Overlay","target","current","show","placement","overflowPlacement","document","documentElement","clientHeight","getBoundingClientRect","bottom","ClipWidgetItemV2","clip","data","thumbnailSize","preloadImage","getAppLink","mergedAudience","subjectPresentationAudiences","audiences","VideoThumbnail","type","textPosition","ThumbnailTextPosition","video","appLink","imageOptions","size","preload","analyticsData","analyticsOptions","setFavourite","canFavourite","imageCdnUrl","audience","hideDuration","isPlugin","ThumbnailText","PlayPageClips","canViewClips","clips","length","parentIsVideo","VideoHelper","title","LanguageService","count","id","PlayPageAnchor","el","headingRef","set","name","contents","WidgetContents","collection","prefetched","getChildAppLink","application","action","args","TextHelper","childComponent","extraChildComponentProps","yearGroups","getPhrase","CommaList","label","items","commaSeperated","map","i","join","DetailsSection","parentVideo","description","productionYear","options","year","smartCount","productionCompanies","distributors","producers","directors","dateBroadcast","date","DateHelper","channel","_isClickViewCurated","value","dateCreated","VideoDetailsWithScrollbarV2","maxHeight","showDescription","showDetails","tags","hideTags","filter","tag","tagType","TagType","getTags","autoHeight","autoHeightMax","ImmersiveReader","text","onLaunch","onLaunchImmersiveReader","onExit","onExitImmersiveReader","location","entity","actionType","descriptor","dangerouslySetInnerHTML","__html","LinkifyHelper","nl2br","TagList","TagHelper","getTagAppLink","suppressInteractivity","POI_LINK_LINE","useLearningIntentionMarkdown","hasGlanceData","useState","markdownHTML","setMarkdownHTML","useEffect","content","glance","learningIntention","replace","format","useHighlightPointOfInterest","pointOfInterest","shouldHighlight","useRef","onGlancePoiMouseOver","onGlancePoiMouseLeave","hoveredPoi","toString","classList","add","remove","addEventListener","removeEventListener","PointOfInterest","timeStamp","DurationHelper","poi","startTime","DivButton","key","onClick","onClickPoiItem","PointOfInterestList","pointsOfInterest","SCROLL_HEIGHT_MAX","ScrollbarWrapper","hideScrollbar","children","VideoAtAGlanceV2","learningIntentionMarkdownHTML","canViewGlance","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","Tooltip","thumbnailContainerClass","ResourceThumbnail","dynamicRatioImageOptions","e","preventDefault","stopPropagation","SvgContainer","svgName","hideTypeBadge","TypeBadge","typeId","TitleSubText","ResourceHelper","defaultProps","ResourceWidgetItemV2","canPreview","logAction","AnalyticsHelper","tileProps","SeoConstants","href","AppLink","TableOfContentsList","item","idx","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","style","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":""}