@clickview/lite 0.52.3-dev.0 → 0.52.3-dev.1
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.
- package/dist/bundles.json +1 -1
- package/dist/css/{1760-lite-d230b51c8b.chunk.css → 1019-lite-402889ede4.chunk.css} +2 -1
- package/dist/css/{6094-lite-d230b51c8b.chunk.css → 2548-lite-402889ede4.chunk.css} +2 -1
- package/dist/css/{1867-lite-991b6e8255.chunk.css → 3922-lite-e22262b911.chunk.css} +2 -1
- package/dist/css/{6546-lite-991b6e8255.chunk.css → 8478-lite-e22262b911.chunk.css} +2 -1
- package/dist/languages/en.json +1 -1
- package/dist/scripts/{1760-33f1791560-lite.chunk.js → 1019-8fc84c7c2e-lite.chunk.js} +2 -2
- package/dist/scripts/{1760-33f1791560-lite.chunk.js.map → 1019-8fc84c7c2e-lite.chunk.js.map} +1 -1
- package/dist/scripts/1076-10e5ee6c22-lite.chunk.js +2 -0
- package/dist/scripts/1076-10e5ee6c22-lite.chunk.js.map +1 -0
- package/dist/scripts/1169-9b1c04fd85-lite.chunk.js +2 -0
- package/dist/scripts/1169-9b1c04fd85-lite.chunk.js.map +1 -0
- package/dist/scripts/{1379-082bbab71a-lite.chunk.js → 1379-6f35e2e9bb-lite.chunk.js} +3 -3
- package/dist/scripts/{1379-082bbab71a-lite.chunk.js.map → 1379-6f35e2e9bb-lite.chunk.js.map} +1 -1
- package/dist/scripts/{6094-24c430efb3-lite.chunk.js → 2548-b81ae38f1f-lite.chunk.js} +2 -2
- package/dist/scripts/{6094-24c430efb3-lite.chunk.js.map → 2548-b81ae38f1f-lite.chunk.js.map} +1 -1
- package/dist/scripts/3922-d40b0ce5aa-lite.chunk.js +2 -0
- package/dist/scripts/{6546-faa6f93a0e-lite.chunk.js.map → 3922-d40b0ce5aa-lite.chunk.js.map} +1 -1
- package/dist/scripts/{624-7ab5fb3f3b-lite.chunk.js → 624-575b07d922-lite.chunk.js} +3 -3
- package/dist/scripts/{624-7ab5fb3f3b-lite.chunk.js.map → 624-575b07d922-lite.chunk.js.map} +1 -1
- package/dist/scripts/8478-0292f02489-lite.chunk.js +2 -0
- package/dist/scripts/{1867-260ef9f8c2-lite.chunk.js.map → 8478-0292f02489-lite.chunk.js.map} +1 -1
- package/dist/scripts/{9395-90b87097fa-lite.chunk.js → 9395-4cf6f3948e-lite.chunk.js} +3 -3
- package/dist/scripts/{9395-90b87097fa-lite.chunk.js.map → 9395-4cf6f3948e-lite.chunk.js.map} +1 -1
- package/dist/scripts/{953-cbc7f0571e-lite.chunk.js → 953-fd31f9f016-lite.chunk.js} +3 -3
- package/dist/scripts/{953-cbc7f0571e-lite.chunk.js.map → 953-fd31f9f016-lite.chunk.js.map} +1 -1
- package/dist/scripts/9620-95e6cc7b2b-lite.chunk.js +3 -0
- package/dist/scripts/9620-95e6cc7b2b-lite.chunk.js.map +1 -0
- package/dist/scripts/{bundle-724fc2e388.min.js → bundle-fcc536bb54.min.js} +3 -3
- package/dist/scripts/{bundle-724fc2e388.min.js.map → bundle-fcc536bb54.min.js.map} +1 -1
- package/package.json +1 -1
- package/dist/scripts/1169-534a29a204-lite.chunk.js +0 -2
- package/dist/scripts/1169-534a29a204-lite.chunk.js.map +0 -1
- package/dist/scripts/1867-260ef9f8c2-lite.chunk.js +0 -2
- package/dist/scripts/6546-faa6f93a0e-lite.chunk.js +0 -2
- package/dist/scripts/6587-ba8e36be0b-lite.chunk.js +0 -2
- package/dist/scripts/6587-ba8e36be0b-lite.chunk.js.map +0 -1
- package/dist/scripts/9620-f1d717b02b-lite.chunk.js +0 -3
- package/dist/scripts/9620-f1d717b02b-lite.chunk.js.map +0 -1
- /package/dist/scripts/{1379-082bbab71a-lite.chunk.js.LICENSE.txt → 1379-6f35e2e9bb-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{624-7ab5fb3f3b-lite.chunk.js.LICENSE.txt → 624-575b07d922-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9395-90b87097fa-lite.chunk.js.LICENSE.txt → 9395-4cf6f3948e-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{953-cbc7f0571e-lite.chunk.js.LICENSE.txt → 953-fd31f9f016-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9620-f1d717b02b-lite.chunk.js.LICENSE.txt → 9620-95e6cc7b2b-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{bundle-724fc2e388.min.js.LICENSE.txt → bundle-fcc536bb54.min.js.LICENSE.txt} +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[1019],{43156:(e,a,t)=>{t.r(a),t.d(a,{PlaySharedVideoViewV2:()=>A});var i=t(32735),s=t(20354),d=t(65858),c=t(16714),n=t(89454),r=t(43012),o=t(39151),u=t(1666),l=t(20768),v=t(31949),h=t(1575),m=t(26304),I=t(22902),p=t(79612),C=t(76753),P=t(51855),b=t(82817),y=t(7179),g=t(49948),F=t(36873),V=t(27638),f=t(86698),k=t(35014),w=t(97816),x=t(33192),B=t(61169),j=t(81812),q=t(16857);function A(e){var a,t,A,M,U=(0,V.u)(d.LZ.VideoThumbnail),G=U.setFavourite,L=U.canFavourite,N=(0,I.T)().hasPermissions,O=(0,P.G)().isPlugin,S=(0,k.I)(),T=(0,j.a)(),_=(0,f.y)().activePresentation,E=s.a.useBasicFetch(v.N.currentUser()),R=s.a.useBasicFetch(h.R.sharedVideo(e.objectId,e.shareId)),Z=s.a.useBasicFetch(S.canViewClips&&r.e.videoClips(e.objectId)),z=s.a.useBasicFetch(S.canViewInteractives&&l.b.videoInteractives(e.objectId)),D=s.a.useBasicFetch(o.L.config()),H=(0,F.k)({video:R.data,context:e.queryParams.context,contextId:e.queryParams.contextId,moviesAndTv:e.queryParams.mtv,currentUser:E.data}),J=(0,g.l)(e.objectId),K=s.a.useBasicFetch(!!_&&n.O.audiencesByPresentationId(_.id)),Q=s.a.useBasicFetch((null===(a=E.data)||void 0===a?void 0:a.isAuthenticated)&&u.h.yearGroups(E.data.customerId));(0,p.M)(C.CG.getVideoMetadata({content:R.data,canonicalLink:x.f.getCanonicalLink({stripPresentationSlug:!0}),allowIndexing:!1})),(0,w.V)(null!==(t=H.videos)&&void 0!==t?t:[]),(0,m.b)(R,{private:q.m}),(0,y.P)({id:e.objectId,app:"videos",shareId:e.shareId});var W=(0,b.M)(e.objectId);return R.data&&E.hasCompleted&&D.hasCompleted&&J.hasCompleted?i.createElement("div",{className:"px-3"},i.createElement(B.R,{video:R.data,clips:Z.data,interactives:z.data,yearGroups:Q.data,curriculums:W,imageCdnUrl:D.data.imageCdnUrl,relatedVideos:H,currentUser:E.data,setFavourite:G,canFavourite:L,pointsOfInterest:null==J?void 0:J.items,playNext:null===(A=e.queryParams)||void 0===A?void 0:A.playNext,shareId:e.shareId,featureAccess:S,audiences:K.data,params:e.queryParams,canManageVideoAccess:N(c.C.ManageVideoAccess),tableOfContentsId:null===(M=e.queryParams)||void 0===M?void 0:M.tocId,shouldShowSideTableOfContents:T,isPlugin:O})):i.createElement(i.Fragment,null)}}}]);
|
|
2
|
+
//# sourceMappingURL=1019-8fc84c7c2e-lite.chunk.js.map
|
package/dist/scripts/{1760-33f1791560-lite.chunk.js.map → 1019-8fc84c7c2e-lite.chunk.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/
|
|
1
|
+
{"version":3,"file":"scripts/1019-8fc84c7c2e-lite.chunk.js","mappings":"odAoCM,SAAUA,EAAsBC,G,YACpC,GAAuC,IAAAC,GAAkB,qBAAjDC,EAAY,EAAZA,aAAcC,EAAY,EAAZA,aAEdC,GAAmB,SAAnBA,eAEAC,GAAa,SAAbA,SAEFC,GAAgB,SAEhBC,GAAgC,SAE9BC,GAAuB,SAAvBA,mBAEFC,EAAc,kBAAkC,mBAChDC,EAAQ,kBACZ,gBAA0BV,EAAMW,SAAUX,EAAMY,UAE5CC,EAAQ,kBAA6BP,EAAcQ,cAAgB,eAAwBd,EAAMW,WACjGI,EAAe,kBACnBT,EAAcU,qBAAuB,sBAAsChB,EAAMW,WAE7EM,EAAS,kBAA6B,cACtCC,GAAgB,OAAoB,CACxCR,MAAOA,EAAMS,KACbC,QAASpB,EAAMqB,YAAYD,QAC3BE,UAAWtB,EAAMqB,YAAYC,UAC7BC,YAAavB,EAAMqB,YAAYG,IAC/Bf,YAAaA,EAAYU,OAErBM,GAAmB,OAAyBzB,EAAMW,UAElDe,EAAY,oBACdlB,GACF,8BAA2CA,EAAmBmB,KAE1DC,EAAa,mBACD,QAAhB,EAAAnB,EAAYU,YAAI,eAAEU,kBAAmB,eAA4BpB,EAAYU,KAAKW,cAGpF,OAAmB,sBAAoC,CACrDC,QAASrB,EAAMS,KACfa,cAAe,qBAA2B,CAAEC,uBAAuB,IACnEC,eAAe,MAGjB,OAAkC,QAApB,EAAAhB,EAAciB,cAAM,QAAI,KACtC,OAAsBzB,EAAO,CAAE0B,QAAS,OACxC,OAAa,CAAET,GAAI3B,EAAMW,SAAU0B,IAAK,SAAUzB,QAASZ,EAAMY,UAEjE,IAAM0B,GAAc,OAAetC,EAAMW,UASzC,OANED,EAAMS,MACNV,EAAY8B,cACZtB,EAAOsB,cACPd,EAAiBc,aAOjB,uBAAKC,UAAU,QACb,gBAAC,IAAU,CACT9B,MAAOA,EAAMS,KACbN,MAAOA,EAAMM,KACbJ,aAAcA,EAAaI,KAC3BS,WAAYA,EAAWT,KACvBmB,YAAaA,EACbG,YAAaxB,EAAOE,KAAKsB,YACzBvB,cAAeA,EACfT,YAAaA,EAAYU,KACzBjB,aAAcA,EACdC,aAAcA,EACdsB,iBAAkBA,aAAgB,EAAhBA,EAAkBiB,MACpCC,SAA2B,QAAjB,EAAA3C,EAAMqB,mBAAW,eAAEsB,SAC7B/B,QAASZ,EAAMY,QACfN,cAAeA,EACfoB,UAAWA,EAAUP,KACrByB,OAAQ5C,EAAMqB,YACdwB,qBAAsBzC,EAAe,uBACrC0C,kBAAoC,QAAjB,EAAA9C,EAAMqB,mBAAW,eAAE0B,MACtCxC,8BAA+BA,EAC/BF,SAAUA,KAxBP,gCA4BX,C","sources":["file:///app/packages/projects/lite/src/apps/share/views/play-shared-video/v2/PlaySharedVideoViewV2.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { AudienceRequests } from 'libs/shared/flight-requests/AudienceRequests';\nimport { ClipRequests } from 'libs/shared/flight-requests/ClipRequests';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useCannotConsumeError } from 'libs/shared/hooks/useCannotConsumeError';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Clip, Config, CurrentUser, InteractiveMetadata, PresentationAudience, Video, YearGroup } from 'libs/shared/interfaces';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\nimport { usePluginHelper } from 'shared/hooks/use-plugin-helper/usePluginHelper';\nimport { useCurriculums } from 'shared/hooks/useCurriculums';\nimport { useDeepLinks } from 'shared/hooks/useDeepLinks';\nimport { useFetchPointsOfInterest } from 'shared/hooks/useFetchPointsOfInterest';\nimport { useGetRelatedVideos } from 'shared/hooks/useGetRelatedVideos';\nimport { useLiteFavourites } from 'shared/hooks/useLiteFavourites';\nimport { usePresentation } from 'shared/hooks/usePresentation';\nimport { useVideoFeatureAccess } from 'shared/hooks/useVideoFeatureAccess';\nimport { useVideoMixin } from 'shared/hooks/useVideoMixin';\nimport { SeoHelper } from 'shared/utils/SeoHelper';\nimport { PlayPageV2 } from 'shared/views/play/v2/components/play-page/PlayPageV2';\nimport { useShouldShowSideTableOfContents } from 'shared/views/play/v2/hooks/useShouldShowTableOfContents';\n\nimport { ShareLinkPrivateError } from 'apps/share/errors/share-link-private/ShareLinkPrivateError';\nimport { ShareLinkViewProps } from 'apps/share/interfaces/ShareLinkViewProps';\n\nexport function PlaySharedVideoViewV2(props: ShareLinkViewProps): React.ReactElement {\n const { setFavourite, canFavourite } = useLiteFavourites(LocationContext.VideoThumbnail);\n\n const { hasPermissions } = usePermissions();\n\n const { isPlugin } = usePluginHelper();\n\n const featureAccess = useVideoFeatureAccess();\n\n const shouldShowSideTableOfContents = useShouldShowSideTableOfContents();\n\n const { activePresentation } = usePresentation();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const video = Flight.useBasicFetch<Video>(\n VideoRequests.sharedVideo(props.objectId, props.shareId)\n );\n const clips = Flight.useBasicFetch<Clip[]>(featureAccess.canViewClips && ClipRequests.videoClips(props.objectId));\n const interactives = Flight.useBasicFetch<InteractiveMetadata[]>(\n featureAccess.canViewInteractives && InteractiveRequests.videoInteractives(props.objectId)\n );\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const relatedVideos = useGetRelatedVideos({\n video: video.data,\n context: props.queryParams.context,\n contextId: props.queryParams.contextId,\n moviesAndTv: props.queryParams.mtv,\n currentUser: currentUser.data\n });\n const pointsOfInterest = useFetchPointsOfInterest(props.objectId);\n \n const audiences = Flight.useBasicFetch<PresentationAudience[]>(\n !!activePresentation &&\n AudienceRequests.audiencesByPresentationId(activePresentation.id)\n );\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n useSetPageMetadata(PageMetadataHelper.getVideoMetadata({\n content: video.data,\n canonicalLink: SeoHelper.getCanonicalLink({ stripPresentationSlug: true }),\n allowIndexing: false\n }));\n\n useVideoMixin(relatedVideos.videos ?? []);\n useCannotConsumeError(video, { private: ShareLinkPrivateError });\n useDeepLinks({ id: props.objectId, app: 'videos', shareId: props.shareId });\n\n const curriculums = useCurriculums(props.objectId);\n\n const dataLoaded = (\n video.data &&\n currentUser.hasCompleted &&\n config.hasCompleted &&\n pointsOfInterest.hasCompleted\n );\n\n if (!dataLoaded)\n return <></>;\n\n return (\n <div className='px-3'>\n <PlayPageV2\n video={video.data}\n clips={clips.data}\n interactives={interactives.data}\n yearGroups={yearGroups.data}\n curriculums={curriculums}\n imageCdnUrl={config.data.imageCdnUrl}\n relatedVideos={relatedVideos}\n currentUser={currentUser.data}\n setFavourite={setFavourite}\n canFavourite={canFavourite}\n pointsOfInterest={pointsOfInterest?.items}\n playNext={props.queryParams?.playNext}\n shareId={props.shareId}\n featureAccess={featureAccess}\n audiences={audiences.data}\n params={props.queryParams}\n canManageVideoAccess={hasPermissions(PermissionName.ManageVideoAccess)}\n tableOfContentsId={props.queryParams?.tocId}\n shouldShowSideTableOfContents={shouldShowSideTableOfContents}\n isPlugin={isPlugin}\n />\n </div>\n );\n}"],"names":["PlaySharedVideoViewV2","props","u","setFavourite","canFavourite","hasPermissions","isPlugin","featureAccess","shouldShowSideTableOfContents","activePresentation","currentUser","video","objectId","shareId","clips","canViewClips","interactives","canViewInteractives","config","relatedVideos","data","context","queryParams","contextId","moviesAndTv","mtv","pointsOfInterest","audiences","id","yearGroups","isAuthenticated","customerId","content","canonicalLink","stripPresentationSlug","allowIndexing","videos","private","app","curriculums","hasCompleted","className","imageCdnUrl","items","playNext","params","canManageVideoAccess","tableOfContentsId","tocId"],"sourceRoot":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[1076],{50690:(e,t,n)=>{n.d(t,{b:()=>r});var a=n(12788),r={renderInPortalIfExists:function(e,t){return t?(0,a.createPortal)(e,t):e}}},72553:(e,t,n)=>{n.d(t,{j:()=>u});var a=n(32735),r=n(42029),i=n(83345),o=n(49439);const l={copyrightDisclaimer:"z8YoI",overlayContainer:"eJDbJ"};function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var s="shared.copyrightDisclaimer",d=150;function u(e){var t,n,u,m=(n=(0,o.L)({}),u=2,function(e){if(Array.isArray(e))return e}(n)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,i,o,l=[],c=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(a=i.call(n)).done)&&(l.push(a.value),l.length!==t);c=!0);}catch(e){s=!0,r=e}finally{try{if(!c&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(s)throw r}}return l}}(n,u)||function(e,t){if(e){if("string"==typeof e)return c(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?c(e,t):void 0}}(n,u)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),p=m[0],v=m[1];return a.createElement("div",{ref:p,className:e.className},a.createElement("p",{className:"".concat(l.copyrightDisclaimer," mb-1")},a.createElement(i.x,{namespace:s,phrase:"copyrightDisclaimer"})),a.createElement(r.Z,{target:p.current,show:v,placement:e.overflowPlacement&&document.documentElement.clientHeight-(null===(t=p.current)||void 0===t?void 0:t.getBoundingClientRect().bottom)<d?e.overflowPlacement:e.placement},a.createElement("div",{className:"".concat(l.overlayContainer," mw-100 bg-white border rounded-3 p-2")},a.createElement("p",null,a.createElement(i.x,{namespace:s,phrase:"warning"})),a.createElement("p",{className:"fw-semibold mb-0"},a.createElement(i.x,{namespace:s,phrase:"sharing"})))))}},5640:(e,t,n)=>{n.d(t,{O:()=>y});var a=n(32735),r=n(23481),i=n(28400),o=n(11518),l=n(58704),c=n(59598),s=n(31908),d=n(14070),u=n(97291),m=n(22843),p=n(84591),v=n(68626),f=n(80143),g=a.memo((function(e){var t,n=e.data,r=e.thumbnailSize,i=e.preloadImage,o=e.getAppLink,l=(0,f.n)(null===(t=n.subjectPresentationAudiences)||void 0===t?void 0:t.data,e.audiences);return a.createElement("div",{className:"flex-shrink-0 px-1 col-6 col-sm-4"},a.createElement(p.u,{type:"static",textPosition:v.z.Independent,video:n,appLink:o(n),imageOptions:{size:r},preload:i,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,setFavourite:e.setFavourite,canFavourite:e.canFavourite,imageCdnUrl:e.imageCdnUrl,audience:l,hideDuration:!1,isPlugin:e.isPlugin,showOwner:e.showOwner}),a.createElement("div",{className:"mt-2"},a.createElement(m.h,Object.assign({},e,{video:n,appLink:e.getAppLink(n)}))))})),h="shared.playPageClipsV2";function y(e){var t;if(!e.canViewClips||!(null===(t=e.clips)||void 0===t?void 0:t.length))return a.createElement(a.Fragment,null);var n=s.M.isVideo(e.video),m=r.T.getPhrase(h,n?"clips":"otherClips",{count:e.clips.length});return a.createElement("section",{className:"play-page-section",id:c.K.Clips,ref:function(t){var n;t&&(null===(n=e.headingRef)||void 0===n?void 0:n.current)&&e.headingRef.current.set(c.K.Clips,t)}},a.createElement(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,i.m.slugify(e.name)]}},appLink:s.M.isVideo(e.video)?{action:d.e.Videos.VIDEO_CLIPS,application:u.O.VIDEOS,args:[e.video.id,i.m.slugify(e.video.name)]}:{action:d.e.Clips.CLIP_CLIPS,application:u.O.CLIPS,args:[e.video.id,i.m.slugify(e.video.name)]},childComponent:g,extraChildComponentProps:{yearGroups:e.yearGroups,audiences:e.audiences,imageCdnUrl:e.imageCdnUrl,setFavourite:e.setFavourite,canFavourite:e.canFavourite,isPlugin:e.isPlugin,showOwner:!0},analyticsData:e.analyticsData}))}},8887:(e,t,n)=>{n.d(t,{a:()=>P});var a=n(32735),r=n(42648),i=n(23481),o=n(110),l=n(65858),c=n(72553),s=n(25723),d=n(78259),u=n(11607),m=n(83345),p=n(10038);const v={container:"G5zMm",collapsed:"kkd1X",seeMore:"DS4QF"};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,i,o,l=[],c=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(a=i.call(n)).done)&&(l.push(a.value),l.length!==t);c=!0);}catch(e){s=!0,r=e}finally{try{if(!c&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(s)throw r}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return g(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)?g(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 g(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 h="shared.videoDetailsV2";function y(e){var t,n,r=a.useRef(null),i=f(a.useState(!1),2),o=i[0],l=i[1],c=a.useRef(0),s=f(a.useState((null===(t=r.current)||void 0===t?void 0:t.scrollHeight)>c.current),2),g=s[0],y=s[1];return a.useEffect((function(){r.current.clientHeight&&(c.current=r.current.clientHeight)}),[]),(0,p.H)((function(){var e;r.current.clientHeight&&(c.current=r.current.clientHeight,y((null===(e=r.current)||void 0===e?void 0:e.scrollHeight)>c.current))})),a.useEffect((function(){var e,t;(null===(e=r.current)||void 0===e?void 0:e.scrollHeight)&&y((null===(t=r.current)||void 0===t?void 0:t.scrollHeight)>c.current)}),[null===(n=r.current)||void 0===n?void 0:n.scrollHeight,c.current]),a.createElement("div",{className:"".concat(v.container," ").concat(o?"":v.collapsed)},!o&&g&&a.createElement(u.L,{onClick:function(){return l(!0)},className:"ms-1 text-info hover-text-underline ".concat(v.seeMore)},a.createElement(m.x,{namespace:h,phrase:"seeMore"})),a.createElement("p",{ref:r,className:"mb-0 ".concat(o?"d-inline":""),dangerouslySetInnerHTML:{__html:d.O.linkifyText(e.video.description,{nl2br:!0})}}),o&&a.createElement(u.L,{onClick:function(){return l(!1)},className:"ms-1 hover-text-underline d-inline text-info"},a.createElement(m.x,{namespace:h,phrase:"seeLess"})))}var E=n(87311),b=n(91743),I=n(8730),C=n(40178),w=n(44829),k=n(59598),N=n(31908);const x={descriptionBorder:"YUC62"};var O="shared.videoDetailsV2",S=i.T.encloseNamespace(O);function T(e){var t=e.label,n=e.items,r=e.className;if(!(n&&n.data&&n.data.length))return a.createElement(a.Fragment,null);var i=n.data.map((function(e){return e.name})).join(", ");return a.createElement("div",{className:r},t,": ",i)}function A(e){var t,n,r,i,l,c,s,d,u,p=e.video;if(!N.M.isVideo(p)&&!N.M.isClip(p))return a.createElement(a.Fragment,null);var v=N.M.getParentVideo(p);return a.createElement("div",{className:p.description?"col-md-5 ps-md-3 pt-3 pt-md-0":"col-12"},a.createElement("h2",{className:"h6 mb-1"},a.createElement(m.x,{phrase:"details"})),!!v.productionYear&&a.createElement("div",{className:"mb-1"},a.createElement(m.x,{phrase:"productionYear",options:{year:v.productionYear}})),a.createElement(T,{label:S("productionCompanies",{smartCount:null===(n=null===(t=v.productionCompanies)||void 0===t?void 0:t.data)||void 0===n?void 0:n.length}),items:v.productionCompanies,className:"mb-1"}),a.createElement(T,{label:S("distributors",{smartCount:null===(i=null===(r=v.distributors)||void 0===r?void 0:r.data)||void 0===i?void 0:i.length}),items:v.distributors,className:"mb-1"}),a.createElement(T,{label:S("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"}),a.createElement(T,{label:S("directors",{smartCount:null===(d=null===(s=v.directors)||void 0===s?void 0:s.data)||void 0===d?void 0:d.length}),items:v.directors,className:"mb-1"}),!!v.dateBroadcast&&a.createElement("div",{className:"mb-1"},a.createElement(m.x,{phrase:"dateBroadcast",options:{date:o.O.format(v.dateBroadcast,"DD/MM/YYYY")}})),!!v.channel&&a.createElement("div",{className:"mb-1"},a.createElement(m.x,{phrase:"channel",options:{channel:v.channel.name}})),!((null===(u=p._isClickViewCurated)||void 0===u?void 0:u.value)||!p.dateCreated)&&a.createElement("div",{className:"mb-1"},a.createElement(m.x,{phrase:"dateUploaded",options:{date:o.O.format(p.dateCreated,"DD/MM/YYYY")}})))}function P(e){var t,n=e.video,i=e.maxHeight,o=void 0===i?C.x:i,d=N.M.getParentVideo(n),u=!!e.video.description,p=(0,I._)(e.video)||!!d.productionYear||!!d.dateBroadcast||!!d.channel||!(!n.dateCreated||(null===(t=n._isClickViewCurated)||void 0===t?void 0:t.value));if(!u&&!p)return a.createElement(a.Fragment,null);var v=function(){var t,n,a,r;return e.hideTags||N.M.isInteractive(e.video)||!(null===(n=null===(t=e.video.tags)||void 0===t?void 0:t.data)||void 0===n?void 0:n.length)?null:null===(r=null===(a=e.video.tags)||void 0===a?void 0:a.data)||void 0===r?void 0:r.filter((function(e){return e.tagType===w.Q.Normal}))}();return a.createElement(m.D.Provider,{value:O},a.createElement("section",{id:k.K.VideoDetails,ref:function(t){var n;t&&(null===(n=e.headingRef)||void 0===n?void 0:n.current)&&e.headingRef.current.set(k.K.VideoDetails,t)},className:"play-page-section"},e.showHeading&&a.createElement("h2",{className:"h4 curated-widget-header"},a.createElement(m.x,{phrase:"heading"})),a.createElement("div",{className:"rounded border p-3 position-relative"},a.createElement(r.$B,{autoHeight:!0,autoHeightMax:o},a.createElement("div",{className:"row g-0"},u&&a.createElement("div",{className:p?"".concat(x.descriptionBorder," pe-3 col-md-7"):"col-12"},a.createElement("div",{className:"d-flex align-items-center"},a.createElement("h2",{className:"h6 mb-1"},a.createElement(m.x,{phrase:"description"})),a.createElement(s.m,{text:n.description,title:n.name,className:"ps-2",onLaunch:e.onLaunchImmersiveReader,onExit:e.onExitImmersiveReader,analyticsOptions:{location:l.LZ.PlayPage,entity:l.py.Video,actionType:l.Vw.Click,descriptor:l._S.LaunchImmersiveReader},analyticsData:{id:n.id,type:"description"}})),a.createElement(y,{video:e.video})),p&&a.createElement(A,Object.assign({},e))),!!(null==v?void 0:v.length)&&a.createElement("div",{className:"mt-3"},a.createElement("h2",{className:"h6 mb-1"},a.createElement(m.x,{phrase:"normalTags"})),a.createElement(b.P,Object.assign({tags:v},E.G.getTagActionProps(e.getTagAppLink,null,e.suppressInteractivity),{className:"mt-1"}))),N.M.isBroadcast(e.video)&&a.createElement(c.j,{placement:"bottom-start",className:"d-flex justify-content-start mt-2 mb-n1"})))))}},51184:(e,t,n)=>{n.d(t,{NE:()=>d,RH:()=>m,Wp:()=>u});var a=n(32735),r=n(16367),i=n(34468),o=n(73758),l=n(63847);function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var s=/\[\]\(cv:\/\/poi\?id=\d+\)\n*/g;function d(e,t){var n,i,o,l=(i=(0,a.useState)(""),o=2,function(e){if(Array.isArray(e))return e}(i)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,i,o,l=[],c=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(a=i.call(n)).done)&&(l.push(a.value),l.length!==t);c=!0);}catch(e){s=!0,r=e}finally{try{if(!c&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(s)throw r}}return l}}(i,o)||function(e,t){if(e){if("string"==typeof e)return c(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?c(e,t):void 0}}(i,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,a.useEffect)((function(){if(t){var n=(a=e.glance,i=a.content.replace(s,""),r(i));u(n)}var a,i}),[null===(n=e.glance)||void 0===n?void 0:n.content,t]),d}function u(e){var t,n;return(null===(t=e.glance)||void 0===t?void 0:t.content)&&"text/markdown"===(null===(n=e.glance)||void 0===n?void 0:n.format)}function m(e,t){var n=(0,a.useRef)();function r(){e&&o.n.trigger("glance:poi:mouseover",e)}function c(){o.n.trigger("glance:poi:mouseleave")}return(0,i.R)("player:poi:mouseover",(function(t){var a,r,i;(null==t?void 0:t.id)&&(null===(a=null==e?void 0:e.id)||void 0===a?void 0:a.toString())===(null===(r=null==t?void 0:t.id)||void 0===r?void 0:r.toString())&&(null===(i=n.current)||void 0===i||i.classList.add(l.Z.highlightPoi))}),null,t),(0,i.R)("player:poi:mouseleave",(function(){var e;null===(e=n.current)||void 0===e||e.classList.remove(l.Z.highlightPoi)}),null,t),(0,a.useEffect)((function(){var e,a;if(n.current&&t)return null===(e=n.current)||void 0===e||e.addEventListener("mouseover",r),null===(a=n.current)||void 0===a||a.addEventListener("mouseleave",c),function(){var e,t;null===(e=n.current)||void 0===e||e.removeEventListener("mouseover",r),null===(t=n.current)||void 0===t||t.removeEventListener("mouseleave",c)}}),[n.current]),n}},64921:(e,t,n)=>{n.d(t,{j:()=>P});var a=n(32735),r=n(59087),i=n.n(r),o=n(42648),l=n(23481),c=n(49985),s=n(65858),d=n(11607),u=n(83345),m=n(93264),p=n(51184);const v={poiEntry:"vr6R9",poiText:"znHZF",public:"v0BZ9",poiTimeStamp:"AdKwe"};function f(e){var t=m.T.ToDisplayDuration(1e3*e.poi.startTime),n=(0,p.RH)(e.poi,!e.suppressInteractivity);return e.suppressInteractivity?a.createElement("div",{className:"d-flex ".concat(v.poiEntry," mb-2")},a.createElement("span",{className:"d-flex rounded-pill justify-content-center align-items-center fw-semibold text-info bg-light-blue ".concat(v.poiTimeStamp)},t),a.createElement("div",{className:"".concat(v.public," ms-2")},e.poi.description)):a.createElement(d.L,{key:e.poi.startTime,className:"d-flex ".concat(v.poiEntry," mb-2 cursor-pointer"),onClick:function(){return e.onClickPoiItem(e.poi.startTime)},ref:n},a.createElement("div",{className:"d-flex rounded-pill justify-content-center align-items-center fw-semibold text-info bg-light-blue ".concat(v.poiTimeStamp)},t),a.createElement("div",{className:"ms-2 ".concat(v.poiText)},e.poi.description))}var g="shared.pointsOfInterestList";function h(e){return a.createElement("div",null,a.createElement("h2",{className:"h6 my-2"},a.createElement(u.x,{namespace:g,phrase:"heading"})),a.createElement("div",null,e.pointsOfInterest.map((function(t){return a.createElement(f,{key:t.startTime,poi:t,suppressInteractivity:e.suppressInteractivity,onClickPoiItem:e.onClickPoiItem})}))))}var y=n(83914),E=n(87311),b=n(91743),I=n(76177),C=n(44829),w=n(35223),k=n(31908),N=n(63847);function x(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 O="shared.videoAtAGlanceV2",S=l.T.encloseNamespace(O),T=350;function A(e){return e.hideScrollbar?a.createElement(a.Fragment,null,e.children):a.createElement("div",{className:"rounded border mb-4 bg-white"},a.createElement(o.ZP,{autoHeight:!0,autoHeightMax:T},a.createElement("div",{className:"px-3 px-3 pt-3 pb-2"},e.children)))}function P(e){var t,n,r,o=(0,p.NE)(e.video,e.canViewGlance),l=(n=a.useState(""),r=2,function(e){if(Array.isArray(e))return e}(n)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,i,o,l=[],c=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(a=i.call(n)).done)&&(l.push(a.value),l.length!==t);c=!0);}catch(e){s=!0,r=e}finally{try{if(!c&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(s)throw r}}return l}}(n,r)||function(e,t){if(e){if("string"==typeof e)return x(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)?x(e,t):void 0}}(n,r)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),d=l[0],m=l[1],v=function(){var t,n,a,r;return k.M.isInteractive(e.video)||!(null===(n=null===(t=e.video.tags)||void 0===t?void 0:t.data)||void 0===n?void 0:n.length)?null:null===(r=null===(a=e.video.tags)||void 0===a?void 0:a.data)||void 0===r?void 0:r.filter((function(e){return e.tagType===C.Q.Pedagogy||e.tagType===C.Q.Skill}))}(),f=a.useRef(null);return a.useEffect((function(){var e;(null===(e=f.current)||void 0===e?void 0:e.innerText)&&m(f.current.innerText)}),[null===(t=f.current)||void 0===t?void 0:t.innerText]),e.canViewGlance?a.createElement("section",{className:"play-page-section"},a.createElement(A,{hideScrollbar:e.hideScrollbar},a.createElement("h2",{className:"h6 mb-2"},a.createElement(u.x,{namespace:O,phrase:"learningIntention"})),a.createElement("div",{className:"mb-3 ".concat(N.Z.learningIntention)},a.createElement(I.u,{title:S("copy"),spanHack:!0,spanHackClassName:N.Z.icon},a.createElement(i(),{text:d},a.createElement(y.x,{className:"svg-container me-1 cursor-pointer",svgName:w.vn.Copy,size:y.S.Small,onClick:function(){var t={id:e.video.glance.id,videoId:e.video.id,videoName:e.video.name,learningIntention:d},n={actionType:s.Vw.Copy,entity:s.py.Glance,location:s.LZ.PlayPage};c.k.logUserAction(t,n)}}))),a.createElement("div",{dangerouslySetInnerHTML:{__html:o},className:"d-inline",ref:f})),!!(null==v?void 0:v.length)&&a.createElement("div",{className:"mb-1"},a.createElement(b.P,Object.assign({tags:v},E.G.getTagActionProps(e.getTagAppLink,e.onClickTag,e.suppressInteractivity),{className:"mt-2"}))),!!e.pointsOfInterest.length&&a.createElement(h,{pointsOfInterest:e.pointsOfInterest,suppressInteractivity:e.suppressInteractivity,onClickPoiItem:function(t){e.setStartTime(t)}}))):a.createElement(a.Fragment,null)}},17997:(e,t,n)=>{n.d(t,{H:()=>s});var a=n(32735),r=n(36848),i=n(83345),o=n(22843),l=n(84591),c=n(68626),s=a.memo((function(e){var t,n,s=e.data,d=e.thumbnailSize,u=e.preloadImage,m=Object.assign(Object.assign({},e.questionsAppLink),{args:[e.data.id]}),p=null===(n=null===(t=s._timepoints)||void 0===t?void 0:t.value)||void 0===n?void 0:n.length;return a.createElement("div",{className:"flex-shrink-0 px-1 col-6 col-sm-4"},a.createElement(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,showOwner:e.showOwner}),a.createElement("div",{className:"mt-2"},a.createElement(o.h,Object.assign({},e,{video:s,appLink:e.getAppLink(s)}))),a.createElement("div",{className:"mt-1"},a.createElement(r.F,{appLink:m,className:"cursor-pointer"},a.createElement(i.x,{namespace:"shared.interactiveWidgetItemV2",phrase:"previewQuestions",options:{count:p,smartCount:p}}))))}))},95812:(e,t,n)=>{n.d(t,{J:()=>v});var a=n(32735),r=n(23481),i=n(28400),o=n(11518),l=n(58704),c=n(59598),s=n(31908),d=n(14070),u=n(97291),m=n(17997),p="shared.playPageInteractivesV2";function v(e){var t;if(!e.canViewInteractives||!(null===(t=e.interactives)||void 0===t?void 0:t.length))return a.createElement(a.Fragment,null);var n=r.T.getPhrase(p,"interactives",{count:e.interactives.length});return a.createElement("section",{className:"play-page-section",id:c.K.Interactives,ref:function(t){var n;t&&(null===(n=e.headingRef)||void 0===n?void 0:n.current)&&e.headingRef.current.set(c.K.Interactives,t)}},a.createElement(o.kM,{name:n,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,i.m.slugify(e.name)]}},appLink:s.M.isVideo(e.video)?{action:d.e.Videos.VIDEO_INTERACTIVES,application:u.O.VIDEOS,args:[e.video.id,i.m.slugify(e.video.name)]}:{action:d.e.Clips.CLIP_INTERACTIVES,application:u.O.CLIPS,args:[e.video.id,i.m.slugify(e.video.name)]},childComponent:m.H,extraChildComponentProps:{yearGroups:e.yearGroups,setFavourite:e.setFavourite,canFavourite:e.canFavourite,imageCdnUrl:e.imageCdnUrl,questionsAppLink:{application:u.O.INTERACTIVES,action:d.e.Interactives.PREVIEW_QUESTIONS},isPlugin:e.isPlugin,showOwner:!0},analyticsData:e.analyticsData}))}},53709:(e,t,n)=>{n.d(t,{M:()=>g});var a=n(32735),r=n(23481),i=n(65858),o=n(11518),l=n(16714),c=n(58704),s=n(22902),d=n(59598),u=n(74237),m=n(351);function p(e){return function(e){if(Array.isArray(e))return v(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return v(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?v(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function v(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var f="shared.playPageResources";function g(e){var t=(0,s.T)().hasPermissions,n=function(e,t){var n,a,r,i,o=null!==(a=null===(n=e.resources)||void 0===n?void 0:n.data)&&void 0!==a?a:[],l=null!==(i=null===(r=e.links)||void 0===r?void 0:r.data)&&void 0!==i?i:[];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=r.T.getPhrase(f,"resources",{count:n.length});return n.length?a.createElement("section",{id:d.K.Resources,className:"play-page-section",ref:function(t){var n;t&&(null===(n=e.headingRef)||void 0===n?void 0:n.current)&&e.headingRef.current.set(d.K.Resources,t)}},a.createElement(o.kM,{name:v,contents:c.z.PlayPageResourcesV2,collection:n,prefetched:!0,childComponent:m.oA,extraChildComponentProps:{imageCdnUrl:e.imageCdnUrl,imageErrorFallbackUrl:e.resourceThumbnailFallbackUrl,actionBehaviour:e.canViewResources?"normal":"public",location:"play-page",titlePosition:"below",onClickDownload:e.canViewResources?function(t){u.T.downloadResource(t,e.analyticsData,{location:i.LZ.PlayPage,actionType:i.Vw.Download,entity:i.py.Resource})}:null},getChildAppLink:e.getAppLink,analyticsOptions:e.canViewResources?{}:{workflowPhase:i.eu.Start,descriptor:i.Yu.SignUp},analyticsData:e.analyticsData})):a.createElement(a.Fragment,null)}},351:(e,t,n)=>{n.d(t,{$G:()=>w,oA:()=>k,ZS:()=>C});var a=n(32735),r=n(39202),i=n(49985),o=n(65858),l=n(36848),c=n(11607),s=n(75891),d=n(83914),u=n(60995),m=n(76177),p=n(61150),v=n(71063),f=n(4594),g=n(1164),h=n(79967),y=n(45778),E=n(54297),b=n(35223);const I={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 C(e,t){var n,a=(0,h.k)();return"public"===t||!a.xs&&!a.sm&&"resource"===e.type&&"metadata"in e&&(e.metadata.type===g.L.Image||(e.metadata.type===g.L.Pdf?!!e.url:!!(null===(n=e.pdf)||void 0===n?void 0:n.url)))}function w(e){var t,n,r,i,o=null;"metadata"in e.data&&(o=e.data.metadata);var l=y.G.isType(e.data,f.E.Resource);return a.createElement(a.Fragment,null,a.createElement("div",{className:I.aspectRatio},a.createElement("div",{className:I.outerContainer},a.createElement("div",{className:function(t){var n,a="\n d-flex flex-column align-items-center justify-content-end rounded-3 h-100\n position-relative ".concat(function(e){switch(e){case"atom-guide":return I.atomGuide;case"student-activity":return I.studentActivity;case"teacher-pack":return I.teacherPack;case"additional-materials":return I.additionalMaterials;default:return I.userUploaded}}(t)," ").concat(I.innerContainer);return(null===(n=e.theme)||void 0===n?void 0:n.containerClass)?a+=" ".concat(e.theme.containerClass):a+=" pt-3 px-3",e.applyHoverState&&(a+=" ".concat(I.hoverState)),a}(null==o?void 0:o.resourceType)},"above"===e.titlePosition&&a.createElement(m.u,{title:e.data.name},a.createElement("h3",{className:"text-center text-break h5 mb-3 ".concat(I.text)},a.createElement("span",{className:"clamp-1"},e.data.name))),a.createElement("div",{className:"\n ".concat(null!==(n=null===(t=e.theme)||void 0===t?void 0:t.thumbnailContainerClass)&&void 0!==n?n:""," w-75 overflow-hidden \n ").concat(I.thumbnailContainer," ").concat("above"===e.titlePosition?I.titleAbove:""," \n ").concat(I.imageStyle,"\n ")},a.createElement(s.C,{resource:e.data,imageCdnUrl:e.imageCdnUrl,imageErrorFallbackUrl:e.imageErrorFallbackUrl,preloadImage:e.preloadImage,dynamicRatioImageOptions:e.dynamicRatioImageOptions})),l&&e.onClickDownload&&"normal"===e.actionBehaviour&&a.createElement("div",{className:I.actions},a.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(I.download," d-flex align-items-center justify-content-center")},a.createElement(d.x,{svgName:b.vn.Download}))),!e.hideTypeBadge&&l&&a.createElement(p.y,{typeId:f.E.Resource})))),"below"===e.titlePosition&&a.createElement("div",{className:"mt-1 ".concat(I.titleBelow)},y.G.isType(e.data,f.E.Resource)&&!!(null===(i=null===(r=e.data)||void 0===r?void 0:r.metadata)||void 0===i?void 0:i.resourceType)&&a.createElement(u.m,null,E.C.getResourceTypeName(e.data.metadata.resourceType)),a.createElement("h3",{className:"h6 clamp-2"},e.data.name)))}w.defaultProps={preloadImage:!0,actionBehaviour:"normal"};var k=a.memo((function(e){var t=C(e.data,e.actionBehaviour),n=Object.assign(Object.assign({},e.analyticsData),e.data),c=Object.assign(Object.assign({},e.analyticsOptions),{actionType:o.Vw.Click,entity:e.data.typeId===f.E.Resource?o.py.Resource:o.py.Link});function s(){i.k.logUserAction(n,c)}var d,u=Object.assign(Object.assign({},e),{applyHoverState:t||!!e.data.url});return a.createElement("div",{className:"px-1 flex-shrink-0 ".concat(I.item," ").concat("play-page"===e.location?I.playPage:I.dashboard," ").concat(v.M.RESOURCE_ITEM_SELECTOR)},(d="d-block no-decoration","link"===e.data.type?a.createElement("a",{href:e.data.url,target:"_blank",className:d,onClick:s},a.createElement(w,Object.assign({},u))):t?"public"===e.actionBehaviour?a.createElement("div",{className:"".concat(d," cursor-pointer d-inline"),onClick:function(){s(),r.C$.trigger(e.getAppLink(e.data))}},a.createElement(w,Object.assign({},u))):a.createElement(l.F,{appLink:e.getAppLink(e.data),className:d,analyticsData:n,analyticsOptions:c},a.createElement(w,Object.assign({},u))):e.data.url?a.createElement("a",{href:e.data.url,className:d,onClick:s},a.createElement(w,Object.assign({},u))):a.createElement("div",{className:d},a.createElement(w,Object.assign({},u)))))}))},75838:(e,t,n)=>{n.d(t,{w:()=>s});var a=n(32735),r=n(92869),i=n(65858),o=n(36848),l=n(11607);const c={itemsWrapper:"m6mGm",anchorWrapper:"QptZj",default:"_AZa8",selectedItem:"Nuiel",disabled:"WIzWJ",floatIcon:"ARudn",arrowIcon:"tEF5Q",listIcon:"Ql2wi"};function s(e){var t={actionType:i.Vw.Click,entity:i.py.Widget,location:i.LZ.TableOfContents};return a.createElement("div",{className:"".concat(c.itemsWrapper)},e.items.map((function(n,i){return e.localState?a.createElement(l.L,{key:n.id,className:"".concat(c.anchorWrapper," ").concat(e.activeId===n.id?c.selectedItem:""),onClick:function(){var t;r.t.preventScrollTop(),e.setControlledId(n.id),null===(t=e.onItemClick)||void 0===t||t.call(e,n)}},a.createElement("div",{className:"".concat(e.activeId||0!==i?"":c.default," ")},n.name)):a.createElement(o.F,{key:n.id,appLink:e.getAppLink(n),appLinkOptions:{replace:!0},className:"".concat(c.anchorWrapper," ").concat(e.activeId===n.id?c.selectedItem:""),onClick:function(){var t;r.t.preventScrollTop(),e.setControlledId(n.id),null===(t=e.onItemClick)||void 0===t||t.call(e,n)},analyticsData:Object.assign(Object.assign({},e.analyticsData),{id:n.id,name:n.name}),analyticsOptions:t},a.createElement("div",{className:"".concat(e.activeId||0!==i?"":c.default," ")},n.name))})))}},65332:(e,t,n)=>{n.d(t,{D:()=>i});var a,r=n(32735),i=function(e){var t=e.setActiveId,n=e.headingElements,i=e.controlledId,o=e.setControlledId,l=r.useRef(0);r.useEffect((function(){var e=new IntersectionObserver((function(e){e.forEach((function(e){if(i)return t(i),void(a=window.setTimeout((function(){o("")}),800));if(e.isIntersecting)t(e.target.id),l.current=window.scrollY;else{var r=l.current-window.scrollY>0,c=n.findIndex((function(t){return t.id===e.target.id})),s=n[c-1];r&&(null==s?void 0:s.id)&&t(null==s?void 0:s.id)}}))}),{rootMargin:"-67px 0px -80% 0px"});return n.forEach((function(t){return e.observe(t)})),function(){a&&window.clearTimeout(a),e.disconnect()}}),[t,n.length,i])}},74237:(e,t,n)=>{n.d(t,{T:()=>l});var a=n(97395),r=n(49985),i=n(65858),o=null,l={getVideoDownloadUrl:function(e,t){return a._.safeUrlConcat(a._.makeHttps(e),"/download?token=".concat(t))},downloadResource:function(e,t,n){var a,l=o;o||(l=o=document.createElement("iframe"),document.body.appendChild(l),l.style.display="none"),l.src=e.url,r.k.logUserAction(Object.assign({id:null==e?void 0:e.id,name:null==e?void 0:e.name,resourceType:null===(a=null==e?void 0:e.metadata)||void 0===a?void 0:a.resourceType},t),Object.assign({actionType:i.Vw.Download,entity:i.py.Resource,workflowPhase:i.eu.Complete},n))}}},9465:(e,t,n)=>{n.d(t,{h:()=>h});var a=n(32735),r=n(50690),i=n(49985),o=n(65858),l=n(10874),c=n(75838),s=n(83345),d=n(75795),u=n(35223),m=n(69566);const p={container:"qA4yj",showInSide:"kd9hB",aside:"j28IY",collapse:"sFoPk",iconContainer:"PYyBV",arrowIcon:"MTodB",listIcon:"W76p8"};var v="shared.playPage";function f(e){function t(){var t;e.setIsExpanded(!e.isExpanded),t={actionType:e.isExpanded?o.Vw.Hide:o.Vw.Open,entity:o.py.TableOfContents,location:o.LZ.PlayPage},i.k.logUserAction(e.analyticsData,t)}return a.createElement("div",{className:"d-flex justify-content-end"},a.createElement("div",{className:p.container},a.createElement("div",{className:"".concat(p.iconContainer)},a.createElement(l.h,{className:"btn btn-outline-dark ".concat(p.listIcon),svgName:u.vn.TableOfContents,onClick:t}),a.createElement(l.h,{className:"btn btn-outline-dark ".concat(p.arrowIcon),svgName:e.isExpanded?u.vn.CollapseRight:u.vn.ExpandLeft,onClick:t}))))}function g(e){return a.createElement("div",{className:e.showInSide?"col col-2":"d-inline-flex gap-1"},a.createElement("aside",{className:"".concat(p.aside," position-relative ").concat(e.showInSide?"pe-1 pt-1 ":"px-3 pt-3 pb-2 border border-dark rounded-1 bg-white")},a.createElement("div",{className:"".concat(p.container," ").concat(e.showInSide?p.showInSide:"")},e.showInSide&&a.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},i.k.logUserAction(e.analyticsData,t)}}),a.createElement("h2",{className:"h5"},a.createElement(s.x,{namespace:v,phrase:"tocHeading"})),a.createElement(c.w,{items:e.items,activeId:e.activeId,getAppLink:function(e){var t=d.O.getCurrentRoute().appLink,n=t.params?Object.assign({},t.params):{};return n.tocId=e.id,Object.assign(Object.assign({},t),{params:n})},setControlledId:e.setControlledId,analyticsData:e.analyticsData,onItemClick:function(){e.showInSide||e.setIsExpanded(!1)}}))),!e.showInSide&&a.createElement(f,Object.assign({},e)))}function h(e){return a.createElement(a.Fragment,null,e.isExpanded&&e.showInSide&&a.createElement(g,Object.assign({},e)),r.b.renderInPortalIfExists(!e.isExpanded&&a.createElement(f,Object.assign({},e)),document.getElementById(m.M)),r.b.renderInPortalIfExists(!e.showInSide&&e.isExpanded&&a.createElement(g,Object.assign({},e)),document.getElementById(m.M)))}},53256:(e,t,n)=>{n.d(t,{d:()=>o});var a=n(23481),r=n(59598),i=a.T.encloseNamespace("shared.play"),o={getSectionHeading:function(e,t){switch(e){case r.K.Resources:return i("resourcesHeading",{count:t.resources.length});case r.K.Clips:return t.isPlayClipPage?i("otherClipsHeading",{count:t.clips.length-1}):i("clipsHeading",{count:t.clips.length});case r.K.Interactives:return i("interactivesHeading",{count:t.interactives.length});case r.K.Video:return i("videoHeading");case r.K.VideoDetails:return i("videoDetailsHeading");case r.K.RelatedVideos:return i("upNextHeading");case r.K.CurriculumLinks:return i("curriculumLinksHeading");case r.K.ClippedFrom:return i("clippedFromHeading");default:return""}}}},63010:(e,t,n)=>{n.d(t,{Q:()=>s});var a=n(32735),r=n(57900),i=n(81812);function o(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,i,o,l=[],c=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(a=i.call(n)).done)&&(l.push(a.value),l.length!==t);c=!0);}catch(e){s=!0,r=e}finally{try{if(!c&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(s)throw r}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return l(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?l(e,t):void 0}}(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 n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var c="play-page-toc-expanded";function s(e){var t=(0,i.a)(),n=!1!==r.SG.get(c),l=!!t&&n,s=o(a.useState(e||""),2),d=s[0],u=s[1],m=o(a.useState(""),2),p=m[0],v=m[1],f=o(a.useState(l),2),g=f[0],h=f[1];return a.useEffect((function(){h(!!t&&n)}),[t]),{controlledId:d,setControlledId:u,tableOfContentsExpanded:g,tableOfContentsActiveId:p,setTableOfContentsActiveId:v,onToggleTableOfContents:function(){h(!g),r.SG.set(c,!g)}}}},14476:(e,t,n)=>{n.d(t,{i:()=>l});var a=n(32735),r=n(59598),i=[r.K.Video,r.K.CurriculumLinks,r.K.Resources,r.K.Interactives,r.K.Clips,r.K.VideoDetails,r.K.ClippedFrom,r.K.RelatedVideos],o=[r.K.Video,r.K.VideoDetails,r.K.CurriculumLinks,r.K.Resources,r.K.Interactives,r.K.Clips,r.K.ClippedFrom,r.K.RelatedVideos];function l(e){var t=a.useRef(new Map),n=(e?i:o).map((function(e){return t.current.get(e)})).filter(Boolean);return{headingRef:t,headingElements:n}}},81812:(e,t,n)=>{n.d(t,{a:()=>r});var a=n(79967);function r(){var e=(0,a.k)();return e.lg||e.xl||e.xxl}},63847:(e,t,n)=>{n.d(t,{Z:()=>a});const a={learningIntention:"MHM6O",highlightPoi:"U7Q6x",icon:"H1xbT"}}}]);
|
|
2
|
+
//# sourceMappingURL=1076-10e5ee6c22-lite.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scripts/1076-10e5ee6c22-lite.chunk.js","mappings":"mJAGaA,EAAe,CAC1BC,uBAAsB,SAACC,EAA+BC,GACpD,OAAIA,GACK,IAAAC,cAAaF,EAAWC,GAE1BD,CACT,E,mFCRF,SAAgB,oBAAsB,QAAQ,iBAAmB,S,sGCQjE,IAAMG,EAAY,6BAEZC,EAAmB,IAQnB,SAAUC,EAAoBC,GAClC,I,MAA8D,G,GAAlC,OAA+B,CAAC,G,EAAE,E,o4BAAtDC,EAAG,KAAEC,EAAU,KAQvB,OACE,uBAAKD,IAAKA,EAAKE,UAAWH,EAAMG,WAC9B,qBAAGA,UAAS,UAAK,sBAA0B,UAAS,gBAACC,EAAA,EAAI,CAACP,UAAWA,EAAWQ,OAAO,yBACvF,gBAACC,EAAA,EAAO,CACNC,OAAQN,EAAIO,QACZC,KAAMP,EACNQ,UAAWV,EAAMW,mBAXFC,SAASC,gBAAgBC,cAA0B,QAAX,EAAAb,EAAIO,eAAO,eAAEO,wBAAwBC,QAE5ElB,EAS0CE,EAAMW,kBAAoBX,EAAMU,WAE1F,uBAAKP,UAAS,UAAK,mBAAuB,0CACxC,yBAAG,gBAACC,EAAA,EAAI,CAACP,UAAWA,EAAWQ,OAAO,aACtC,qBAAGF,UAAU,oBAAmB,gBAACC,EAAA,EAAI,CAACP,UAAWA,EAAWQ,OAAO,eAK7E,C,qLCxBaY,EAAmB,QAAW,SAASjB,G,MACpCkB,EAAkDlB,EAAxDmB,KAAYC,EAA4CpB,EAA5CoB,cAAeC,EAA6BrB,EAA7BqB,aAAcC,EAAetB,EAAfsB,WAC3CC,GAAiB,OAAmD,QAAjC,EAAAL,EAAKM,oCAA4B,eAAEL,KAAMnB,EAAMyB,WAExF,OACE,uBAAKtB,UAAS,qCACZ,gBAACuB,EAAA,EAAc,CACbC,KAAK,SACLC,aAAcC,EAAA,cACdC,MAAOZ,EACPa,QAAST,EAAWJ,GACpBc,aAAc,CAAEC,KAAMb,GACtBc,QAASb,EACTc,cAAenC,EAAMmC,cACrBC,iBAAkBpC,EAAMoC,iBACxBC,aAAcrC,EAAMqC,aACpBC,aAActC,EAAMsC,aACpBC,YAAavC,EAAMuC,YACnBC,SAAUjB,EACVkB,cAAc,EACdC,SAAU1C,EAAM0C,SAChBC,UAAW3C,EAAM2C,YAGnB,uBAAKxC,UAAU,QACb,gBAACyC,EAAA,EAAa,iBACR5C,EAAK,CACT8B,MAAOZ,EACPa,QAAS/B,EAAMsB,WAAWJ,OAKpC,ICnCMrB,EAAY,yBAgBZ,SAAUgD,EAAc7C,G,MAC5B,IAAKA,EAAM8C,gBAA4B,QAAX,EAAA9C,EAAM+C,aAAK,eAAEC,QACvC,OAAO,iCAET,IAAMC,EAAgBC,EAAA,UAAoBlD,EAAM8B,OAiB1CqB,EAAQC,EAAA,YACZvD,EACAoD,EAAgB,QAAU,aAC1B,CAAEI,MAAOrD,EAAM+C,MAAMC,SAGvB,OACE,2BACE7C,UAAU,oBACVmD,GAAIC,EAAA,QACJtD,IAAK,SAAAuD,G,MACFA,IAAsB,QAAhB,EAAAxD,EAAMyD,kBAAU,eAAEjD,UAAYR,EAAMyD,WAAWjD,QAAQkD,IAAIH,EAAA,QAAsBC,EAC1F,GAEA,gBAAC,KAAW,CACVG,KAAMR,EACNS,SAAUC,EAAA,UACVC,WAAY9D,EAAM+C,MAClBgB,YAAU,EACVC,gBAAiB,SAAC9C,GAChB,MAAO,CACL+C,YAAa,UACbC,OAAQ,oBACRC,KAAM,CAAEjD,EAAKoC,GAAIc,EAAA,UAAmBlD,EAAKyC,OAE7C,EACA5B,QAxCAmB,EAAA,UAAoBlD,EAAM8B,OACrB,CACLoC,OAAQ,uBACRD,YAAa,WACbE,KAAM,CAAEnE,EAAM8B,MAAMwB,GAAIc,EAAA,UAAmBpE,EAAM8B,MAAM6B,QAGpD,CACLO,OAAQ,qBACRD,YAAa,UACbE,KAAM,CAAEnE,EAAM8B,MAAMwB,GAAIc,EAAA,UAAmBpE,EAAM8B,MAAM6B,QA+BrDU,eAAgBpD,EAChBqD,yBAA0B,CACxBC,WAAYvE,EAAMuE,WAClB9C,UAAWzB,EAAMyB,UACjBc,YAAavC,EAAMuC,YACnBF,aAAcrC,EAAMqC,aACpBC,aAActC,EAAMsC,aACpBI,SAAU1C,EAAM0C,SAChBC,WAAW,GAEbR,cAAenC,EAAMmC,gBAI7B,C,6JC9FA,SAAgB,UAAY,QAAQ,UAAY,QAAQ,QAAU,S,ggCCUlE,IAAMtC,EAAY,wBAMZ,SAAU2E,EAAiBxE,G,QACzByE,EAAe,SAA6B,MAEK,IAArB,YAAe,GAAM,GAA/CC,EAAQ,KAAEC,EAAW,KACvBC,EAAmB,SAAqB,GACqE,IAA7E,YAAmC,QAApB,EAAAH,EAAajE,eAAO,eAAEqE,cAAeD,EAAiBpE,SAAQ,GAA3GsE,EAAU,KAAEC,EAAa,KAsBjC,OApBA,aAAgB,WACVN,EAAajE,QAAQM,eAEvB8D,EAAiBpE,QAAUiE,EAAajE,QAAQM,aACpD,GAAG,KAEH,QAAkB,W,MACZ2D,EAAajE,QAAQM,eAEvB8D,EAAiBpE,QAAUiE,EAAajE,QAAQM,aAChDiE,GAAkC,QAApB,EAAAN,EAAajE,eAAO,eAAEqE,cAAeD,EAAiBpE,SAExE,IAEA,aAAgB,W,SACU,QAApB,EAAAiE,EAAajE,eAAO,eAAEqE,eACxBE,GAAkC,QAApB,EAAAN,EAAajE,eAAO,eAAEqE,cAAeD,EAAiBpE,QAExE,GAAG,CAAsB,QAApB,EAAAiE,EAAajE,eAAO,eAAEqE,aAAcD,EAAiBpE,UAGxD,uBAAKL,UAAS,UAAK,YAAgB,YAAIuE,EAAW,GAAK,eAClDA,GAAYI,GACb,gBAACE,EAAA,EAAS,CACRC,QAAS,kBAAMN,GAAY,EAAK,EAChCxE,UAAS,8CAAyC,YAElD,gBAACC,EAAA,EAAI,CAACP,UAAWA,EAAWQ,OAAO,aAGvC,qBACEJ,IAAKwE,EACLtE,UAAS,eAAUuE,EAAW,WAAa,IAC3CQ,wBAAyB,CACvBC,OAAQC,EAAA,cAA0BpF,EAAM8B,MAAMuD,YAAa,CAAEC,OAAO,OAGvEZ,GACC,gBAACM,EAAA,EAAS,CACRC,QAAS,kBAAMN,GAAY,EAAM,EACjCxE,UAAS,gDAET,gBAACC,EAAA,EAAI,CAACP,UAAWA,EAAWQ,OAAO,aAK7C,C,gFCtEA,SAAgB,kBAAoB,SCuBpC,IAAM,EAAY,wBACZkF,EAAYnC,EAAA,mBAAiC,GAQnD,SAASoC,EAAUxF,GACjB,IAAQyF,EAA4BzF,EAA5ByF,MAAOC,EAAqB1F,EAArB0F,MAAOvF,EAAcH,EAAdG,UAItB,KAFiBuF,GAASA,EAAMvE,MAAQuE,EAAMvE,KAAK6B,QAGjD,OAAO,iCAET,IAAM2C,EAAiBD,EAAMvE,KAAKyE,KAAI,SAAAC,GAAC,OAAIA,EAAElC,IAAI,IAAEmC,KAAK,MAExD,OACE,uBAAK3F,UAAWA,GAAYsF,EAAK,KAAIE,EAEzC,CAEA,SAASI,EAAe/F,G,sBACd8B,EAAU9B,EAAV8B,MAER,IAAKoB,EAAA,UAAoBpB,KAAWoB,EAAA,SAAmBpB,GACrD,OAAO,iCAET,IAAMkE,EAAc9C,EAAA,iBAA2BpB,GAE/C,OACE,uBAAK3B,UAAW2B,EAAMuD,YAAc,gCAAkC,UACpE,sBAAIlF,UAAU,WAAU,gBAACC,EAAA,EAAI,CAACC,OAAO,eAClC2F,EAAYC,gBACb,uBAAK9F,UAAU,QACb,gBAACC,EAAA,EAAI,CAACC,OAAO,iBAAiB6F,QAAS,CAAEC,KAAMH,EAAYC,mBAG/D,gBAACT,EAAS,CACRC,MAAOF,EAAU,sBAAuB,CAAEa,WAAiD,QAArC,EAA+B,QAA/B,EAAAJ,EAAYK,2BAAmB,eAAElF,YAAI,eAAE6B,SAC7F0C,MAAOM,EAAYK,oBACnBlG,UAAU,SAEZ,gBAACqF,EAAS,CACRC,MAAOF,EAAU,eAAgB,CAAEa,WAA0C,QAA9B,EAAwB,QAAxB,EAAAJ,EAAYM,oBAAY,eAAEnF,YAAI,eAAE6B,SAC/E0C,MAAOM,EAAYM,aACnBnG,UAAU,SAEZ,gBAACqF,EAAS,CACRC,MAAOF,EAAU,YAAa,CAAEa,WAAuC,QAA3B,EAAqB,QAArB,EAAAJ,EAAYO,iBAAS,eAAEpF,YAAI,eAAE6B,SACzE0C,MAAOM,EAAYO,UACnBpG,UAAU,SAEZ,gBAACqF,EAAS,CACRC,MAAOF,EAAU,YAAa,CAAEa,WAAuC,QAA3B,EAAqB,QAArB,EAAAJ,EAAYQ,iBAAS,eAAErF,YAAI,eAAE6B,SACzE0C,MAAOM,EAAYQ,UACnBrG,UAAU,WAET6F,EAAYS,eACb,uBAAKtG,UAAU,QACb,gBAACC,EAAA,EAAI,CAACC,OAAO,gBAAgB6F,QAAS,CAAEQ,KAAMC,EAAA,SAAkBX,EAAYS,cAAe,oBAG5FT,EAAYY,SACb,uBAAKzG,UAAU,QACb,gBAACC,EAAA,EAAI,CAACC,OAAO,UAAU6F,QAAS,CAAEU,QAASZ,EAAYY,QAAQjD,YAGrC,QAAzB,EAAA7B,EAAM+E,2BAAmB,eAAEC,SAAShF,EAAMiF,cAC7C,uBAAK5G,UAAU,QACb,gBAACC,EAAA,EAAI,CAACC,OAAO,eAAe6F,QAAS,CAAEQ,KAAMC,EAAA,SAAkB7E,EAAMiF,YAAa,kBAK5F,CAcM,SAAUC,EAA4BhH,G,MAClC8B,EAA6C9B,EAA7C8B,MAAK,EAAwC9B,EAAtCiH,UAAAA,OAAS,IAAG,MAAqB,EAE1CjB,EAAc9C,EAAA,iBAA2BpB,GAEzCoF,IAAoBlH,EAAM8B,MAAMuD,YAEhC8B,GACJ,OAAQnH,EAAM8B,UACZkE,EAAYC,kBACZD,EAAYS,iBACZT,EAAYY,YACX9E,EAAMiF,cAAyC,QAAzB,EAAAjF,EAAM+E,2BAAmB,eAAEC,QAGtD,IAAKI,IAAoBC,EACvB,OAAO,iCAQT,IAAMC,EANN,W,YACE,OAAIpH,EAAMqH,UAAYnE,EAAA,gBAA0BlD,EAAM8B,UAAiC,QAAtB,EAAgB,QAAhB,EAAA9B,EAAM8B,MAAMsF,YAAI,eAAEjG,YAAI,eAAE6B,QAChF,KAEoB,QAAtB,EAAgB,QAAhB,EAAAhD,EAAM8B,MAAMsF,YAAI,eAAEjG,YAAI,eAAEmG,QAAO,SAAAC,GAAG,OAAIA,EAAIC,UAAYC,EAAA,QAAc,GAC7E,CACaC,GAEb,OACE,gBAAC,aAAiC,CAACZ,MAAO,GACxC,2BACExD,GAAIC,EAAA,eACJtD,IAAK,SAAAuD,G,MACFA,IAAsB,QAAhB,EAAAxD,EAAMyD,kBAAU,eAAEjD,UAAYR,EAAMyD,WAAWjD,QAAQkD,IAAIH,EAAA,eAA6BC,EACjG,EACArD,UAAU,qBAETH,EAAM2H,aACL,sBAAIxH,UAAU,4BAA2B,gBAACC,EAAA,EAAI,CAACC,OAAO,aAExD,uBAAKF,UAAU,wCACb,gBAAC,KAAU,CAACyH,YAAU,EAACC,cAAeZ,GACpC,uBAAK9G,UAAU,WACZ+G,GACC,uBAAK/G,UAAWgH,EAAc,GAAH,OAAM,oBAAwB,kBAAmB,UAC1E,uBAAKhH,UAAU,6BACb,sBAAIA,UAAU,WACZ,gBAACC,EAAA,EAAI,CAACC,OAAO,iBAEf,gBAACyH,EAAA,EAAe,CACdC,KAAMjG,EAAMuD,YACZlC,MAAOrB,EAAM6B,KACbxD,UAAU,OACV6H,SAAUhI,EAAMiI,wBAChBC,OAAQlI,EAAMmI,sBACd/F,iBAAkB,CAChBgG,SAAU,cACVC,OAAQ,WACRC,WAAY,WACZC,WAAY,4BAEdpG,cAAe,CAAEmB,GAAIxB,EAAMwB,GAAI3B,KAAM,kBAIzC,gBAAC6C,EAAgB,CAAC1C,MAAO9B,EAAM8B,SAIlCqF,GACC,gBAACpB,EAAc,iBAAK/F,QAIrBoH,aAAI,EAAJA,EAAMpE,SACP,uBAAK7C,UAAU,QACb,sBAAIA,UAAU,WAAU,gBAACC,EAAA,EAAI,CAACC,OAAO,gBACrC,gBAACmI,EAAA,EAAO,eACNpB,KAAMA,GACFqB,EAAA,oBAA4BzI,EAAM0I,cAAe,KAAM1I,EAAM2I,uBAAsB,CACvFxI,UAAU,WAKf+C,EAAA,cAAwBlD,EAAM8B,QAAU,gBAAC/B,EAAA,EAAmB,CAACW,UAAU,eAAeP,UAAU,+CAO7G,C,uNCnMA,IAAMyI,EAAgB,iCAYhB,SAAUC,EACd/G,EACAgH,G,UAEsD,G,GAAZ,IAAAC,UAAS,I,EAAG,E,o4BAA9CC,EAAY,KAAEC,EAAe,KAWrC,OATA,IAAAC,YAAU,WACR,GAAKJ,EAAL,CAGA,IAAMK,GAhBwBC,EAgBWtH,EAAMsH,OAf3CC,EAA+CD,EAAOD,QAJvCG,QAAQV,EAAe,IAMrC,EAAOS,IAeZJ,EAAgBE,EAJR,CAdZ,IAAkCC,EAC1BC,CAkBN,GAAG,CAAc,QAAZ,EAAAvH,EAAMsH,cAAM,eAAED,QAASL,IAErBE,CACT,CAEM,SAAUF,EAAchH,G,QAC5B,OAAmB,QAAZ,EAAAA,EAAMsH,cAAM,eAAED,UAAoC,mBAAb,QAAZ,EAAArH,EAAMsH,cAAM,eAAEG,OAChD,CAEM,SAAUC,EACdC,EACAC,GAEA,IAAMzJ,GAAM,IAAA0J,UAgCZ,SAASC,IACHH,GACF,YAAsB,uBAAwBA,EAClD,CAEA,SAASI,IACP,YAAsB,wBACxB,CAEA,OAvCA,OAA0B,wBAgB1B,SAA8BC,G,WACvBA,aAAU,EAAVA,EAAYxG,MAAyB,QAAnB,EAAAmG,aAAe,EAAfA,EAAiBnG,UAAE,eAAEyG,eAA6B,QAAd,EAAAD,aAAU,EAAVA,EAAYxG,UAAE,eAAEyG,cAGhE,QAAX,EAAA9J,EAAIO,eAAO,SAAEwJ,UAAUC,IAAI,kBAC7B,GArBwE,KAAMP,IAC9E,OAA0B,yBAsB1B,W,MACa,QAAX,EAAAzJ,EAAIO,eAAO,SAAEwJ,UAAUE,OAAO,iBAChC,GAxB0E,KAAMR,IAEhF,IAAAR,YAAU,W,QACR,GAAKjJ,EAAIO,SAAYkJ,EAMrB,OAHW,QAAX,EAAAzJ,EAAIO,eAAO,SAAE2J,iBAAiB,YAAaP,GAChC,QAAX,EAAA3J,EAAIO,eAAO,SAAE2J,iBAAiB,aAAcN,GAErC,W,QACM,QAAX,EAAA5J,EAAIO,eAAO,SAAE4J,oBAAoB,YAAaR,GACnC,QAAX,EAAA3J,EAAIO,eAAO,SAAE4J,oBAAoB,aAAcP,EACjD,CACF,GAAG,CAAC5J,EAAIO,UAyBDP,CACT,C,8JCzFA,SAAgB,SAAW,QAAQ,QAAU,QAAQ,OAAS,QAAQ,aAAe,SCgBrF,SAASoK,EAAgBrK,GACvB,IAAMsK,EAAYC,EAAA,oBAAuD,IAAtBvK,EAAMwK,IAAIC,WAEvDxK,GAAM,QAA4BD,EAAMwK,KAAMxK,EAAM2I,uBAE1D,OAAI3I,EAAM2I,sBAEN,uBAAKxI,UAAS,iBAAY,WAAe,UACvC,wBAAMA,UAAS,4GAAuG,iBAAwBmK,GAC9I,uBAAKnK,UAAS,UAAK,SAAa,UAAUH,EAAMwK,IAAInF,cAMxD,gBAACL,EAAA,EAAS,CACR0F,IAAK1K,EAAMwK,IAAIC,UACftK,UAAS,iBAAY,WAAe,wBACpC8E,QAAS,kBAAMjF,EAAM2K,eAAe3K,EAAMwK,IAAIC,UAAU,EACxDxK,IAAKA,GAEL,uBAAKE,UAAS,4GAAuG,iBAAwBmK,GAC7I,uBAAKnK,UAAS,eAAU,YAAmBH,EAAMwK,IAAInF,aAG3D,CAQA,IAAMxF,EAAY,8BAEZ,SAAU+K,EAAoB5K,GAClC,OACE,2BACE,sBAAIG,UAAU,WAAU,gBAACC,EAAA,EAAI,CAACP,UAAWA,EAAWQ,OAAO,aAE3D,2BACGL,EAAM6K,iBAAiBjF,KAAI,SAAA4E,GAC1B,OACE,gBAACH,EAAe,CACdK,IAAKF,EAAIC,UACTD,IAAKA,EACL7B,sBAAuB3I,EAAM2I,sBAC7BgC,eAAgB3K,EAAM2K,gBAG5B,KAKR,C,kMC/CA,IAAM,EAAY,0BACZpF,EAAYnC,EAAA,mBAAiC,GAE7C0H,EAAoB,IAM1B,SAASC,EAAiB/K,GACxB,OAAIA,EAAMgL,cACD,gCAAGhL,EAAMiL,UAGhB,uBAAK9K,UAAU,gCACb,gBAAC,KAAU,CACTyH,YAAU,EACVC,cAAeiD,GAEf,uBAAK3K,UAAU,uBACZH,EAAMiL,WAKjB,CAaM,SAAUC,EAAiBlL,G,UACzBmL,GAAgC,QAA6BnL,EAAM8B,MAAO9B,EAAMoL,eAC9B,G,EAAlB,WAAe,I,EAAG,E,o4BAAhDC,EAAU,KAAEC,EAAa,KAwB3BlE,EANN,W,YACE,OAAIlE,EAAA,gBAA0BlD,EAAM8B,UAAiC,QAAtB,EAAgB,QAAhB,EAAA9B,EAAM8B,MAAMsF,YAAI,eAAEjG,YAAI,eAAE6B,QAC9D,KAEoB,QAAtB,EAAgB,QAAhB,EAAAhD,EAAM8B,MAAMsF,YAAI,eAAEjG,YAAI,eAAEmG,QAAO,SAAAC,GAAG,OAAIA,EAAIC,UAAYC,EAAA,YAAoBF,EAAIC,UAAYC,EAAA,OAAa,GAChH,CACaC,GAEPzH,EAAM,SAA6B,MAOzC,OALA,aAAgB,W,OACC,QAAX,EAAAA,EAAIO,eAAO,eAAE+K,YACfD,EAAcrL,EAAIO,QAAQ+K,UAC9B,GAAG,CAAY,QAAX,EAAAtL,EAAIO,eAAO,eAAE+K,YAEZvL,EAAMoL,cAQT,2BAASjL,UAAU,qBACjB,gBAAC4K,EAAgB,CAACC,cAAehL,EAAMgL,eACrC,sBAAI7K,UAAU,WAAU,gBAACC,EAAA,EAAI,CAACP,UAAW,EAAWQ,OAAO,uBAE3D,uBAAKF,UAAS,eAAU,wBACtB,gBAACqL,EAAA,EAAO,CAACrI,MAAOoC,EAAU,QAASkG,UAAQ,EAACC,kBAAmB,UAC7D,gBAAC,IAAe,CAAC3D,KAAMsD,GACrB,gBAACM,EAAA,EAAY,CACXxL,UAAU,oCACVyL,QAAS,UACT3J,KAAM0J,EAAAE,EAAA,MACN5G,QAlDd,WACE,IAAM9C,EAAgB,CACpBmB,GAAItD,EAAM8B,MAAMsH,OAAO9F,GACvBwI,QAAS9L,EAAM8B,MAAMwB,GACrByI,UAAW/L,EAAM8B,MAAM6B,KACvB0F,kBAAmBgC,GAGfjJ,EAAmB,CACvBkG,WAAY,UACZD,OAAQ,YACRD,SAAU,eAEZ4D,EAAA,gBAA8B7J,EAAeC,EAC/C,MAyCQ,uBACE8C,wBAAyB,CAAEC,OAAQgG,GACnChL,UAAU,WACVF,IAAKA,QAKNmH,aAAI,EAAJA,EAAMpE,SACP,uBAAK7C,UAAU,QACb,gBAACqI,EAAA,EAAO,eACNpB,KAAMA,GACFqB,EAAA,oBAA4BzI,EAAM0I,cAAe1I,EAAMiM,WAAYjM,EAAM2I,uBAAsB,CACnGxI,UAAU,aAKbH,EAAM6K,iBAAiB7H,QACxB,gBAAC4H,EAAmB,CAClBC,iBAAkB7K,EAAM6K,iBACxBlC,sBAAuB3I,EAAM2I,sBAC7BgC,eA3CV,SAAwBuB,GACtBlM,EAAMmM,aAAaD,EACrB,MAJS,gCAmDX,C,yGC9HaE,EAA0B,QAAW,SAASpM,G,QAC3CqM,EAA6CrM,EAAnDmB,KAAmBC,EAAgCpB,EAAhCoB,cAAeC,EAAiBrB,EAAjBqB,aAEpCiL,EAAgB,+BACjBtM,EAAMsM,kBAAgB,CACzBnI,KAAM,CAACnE,EAAMmB,KAAKmC,MAGdiJ,EAAgD,QAA9B,EAAuB,QAAvB,EAAAF,EAAYG,mBAAW,eAAE1F,aAAK,eAAE9D,OAExD,OACE,uBAAK7C,UAAS,qCACZ,gBAAC,IAAc,CACbwB,KAAK,SACLC,aAAc,gBACdE,MAAOuK,EACPtK,QAAS/B,EAAMsB,WAAW+K,GAC1BrK,aAAc,CAAEC,KAAMb,GACtBc,QAASb,EACTc,cAAenC,EAAMmC,cACrBC,iBAAkBpC,EAAMoC,iBACxBC,aAAcrC,EAAMqC,aACpBC,aAActC,EAAMsC,aACpBG,cAAc,EACdF,YAAavC,EAAMuC,YACnBG,SAAU1C,EAAM0C,SAChBC,UAAW3C,EAAM2C,YAGnB,uBAAKxC,UAAU,QACb,gBAAC,IAAa,iBACRH,EAAK,CACT8B,MAAOuK,EACPtK,QAAS/B,EAAMsB,WAAW+K,OAI9B,uBAAKlM,UAAU,QACb,gBAAC,IAAO,CAAC4B,QAASuK,EAAkBnM,UAAU,kBAC5C,gBAAC,IAAI,CAACN,UAnDE,iCAmDoBQ,OAAO,mBAAmB6F,QAAS,CAAE7C,MAAOkJ,EAAiBnG,WAAYmG,OAM/G,G,qJCpDM1M,EAAY,gCAeZ,SAAU4M,EAAqBzM,G,MACnC,IAAKA,EAAM0M,uBAA0C,QAAlB,EAAA1M,EAAM2M,oBAAY,eAAE3J,QACrD,OAAO,iCAiBT,IAAMG,EAAQ,cAA0BtD,EAAW,eAAgB,CAAEwD,MAAOrD,EAAM2M,aAAa3J,SAE/F,OACE,2BAAS7C,UAAU,oBACjBmD,GAAI,iBACJrD,IAAK,SAAAuD,G,MACFA,IAAsB,QAAhB,EAAAxD,EAAMyD,kBAAU,eAAEjD,UAAYR,EAAMyD,WAAWjD,QAAQkD,IAAI,iBAA6BF,EACjG,GAEA,gBAAC,KAAW,CACVG,KAAMR,EACNS,SAAU,mBACVE,WAAY9D,EAAM2M,aAClB5I,YAAU,EACVC,gBAAiB,SAACqI,GAChB,MAAO,CACLpI,YAAa,iBACbC,OAAQ,kCACRC,KAAM,CAAEkI,EAAY/I,GAAI,YAAmB+I,EAAY1I,OAE3D,EACA5B,QAnCA,YAAoB/B,EAAM8B,OACrB,CACLoC,OAAQ,8BACRD,YAAa,WACbE,KAAM,CAAEnE,EAAM8B,MAAMwB,GAAI,YAAmBtD,EAAM8B,MAAM6B,QAGpD,CACLO,OAAQ,4BACRD,YAAa,UACbE,KAAM,CAAEnE,EAAM8B,MAAMwB,GAAI,YAAmBtD,EAAM8B,MAAM6B,QA0BrDU,eAAgB,IAChBC,yBAA0B,CACxBC,WAAYvE,EAAMuE,WAClBlC,aAAcrC,EAAMqC,aACpBC,aAActC,EAAMsC,aACpBC,YAAavC,EAAMuC,YACnB+J,iBAAkB,CAChBrI,YAAa,iBACbC,OAAQ,oCAEVxB,SAAU1C,EAAM0C,SAChBC,WAAW,GAEbR,cAAenC,EAAMmC,gBAI7B,C,i3BCxEA,IAAMtC,EAAY,2BA6BZ,SAAU+M,EAAkB5M,GAChC,IAAQ6M,GAAmB,SAAnBA,eAUFC,EAtCR,SACEhL,EACAiL,G,YAEMD,EAAiC,QAArB,EAAe,QAAf,EAAAhL,EAAMgL,iBAAS,eAAE3L,YAAI,QAAI,GACrC6L,EAAyB,QAAjB,EAAW,QAAX,EAAAlL,EAAMkL,aAAK,eAAE7L,YAAI,QAAI,GAEnC,IAAK4L,EACH,MAAO,GAAP,SAAYD,GAAS,EAAKE,IAE5B,IAAMC,EAAoBH,EAAUxF,QAAO,SAAA4F,G,MACzC,MAAO,CAAE,uBAAwB,oBAAqBC,SAAmB,QAAV,EAAAD,EAAEE,gBAAQ,eAAEC,aAC7E,IAEA,MAAO,GAAP,SAAYJ,GAAiB,EAAKD,GACpC,CAuBoBM,CAAatN,EAAM8B,MAAO+K,EAAe,wBACrD1J,EAAQ,cAA0BtD,EAAW,YAAa,CAAEwD,MAAOyJ,EAAU9J,SAEnF,OAAK8J,EAAU9J,OAIb,2BACEM,GAAI,cACJnD,UAAU,oBACVF,IAAK,SAAAuD,G,MACFA,IAAsB,QAAhB,EAAAxD,EAAMyD,kBAAU,eAAEjD,UAAYR,EAAMyD,WAAWjD,QAAQkD,IAAI,cAA0BF,EAC9F,GAEA,gBAAC,KAAW,CACVG,KAAMR,EACNS,SAAU,wBACVE,WAAYgJ,EACZ/I,YAAU,EACVM,eAAgB,KAChBC,yBAA0B,CACxB/B,YAAavC,EAAMuC,YACnBgL,sBAAuBvN,EAAMwN,6BAC7BC,gBAAiBzN,EAAM0N,iBAAmB,SAAW,SACrDtF,SAAU,YACVuF,cAAe,QACfC,gBAAiB5N,EAAM0N,iBAlC/B,SAAyBG,GACvB,qBACEA,EACA7N,EAAMmC,cACN,CAAEiG,SAAU,cAA0BE,WAAY,cAAqBD,OAAQ,eAEnF,EA4BoE,MAE9DrE,gBAAiBhE,EAAMsB,WACvBc,iBACMpC,EAAM0N,iBACD,CAAC,EAEH,CACLI,cAAe,WACfvF,WAAY,KAAAwF,QAGhB5L,cAAenC,EAAMmC,iBAlClB,gCAsCX,C,4PCnGA,SAAgB,WAAa,QAAQ,KAAO,QAAQ,UAAY,QAAQ,SAAW,QAAQ,YAAc,QAAQ,eAAiB,QAAQ,eAAiB,QAAQ,QAAU,QAAQ,WAAa,QAAQ,mBAAqB,QAAQ,WAAa,QAAQ,YAAc,QAAQ,KAAO,QAAQ,WAAa,QAAQ,UAAY,QAAQ,gBAAkB,QAAQ,oBAAsB,QAAQ,aAAe,QAAQ,kBAAoB,QAAQ,SAAW,SCyC1b,SAAU6L,EAAsB7M,EAAuBsM,G,MACrDQ,GAAc,EAAAC,EAAA,KAMpB,MAAwB,WAApBT,IAGAQ,EAAYE,KAAMF,EAAYG,IAGhB,aAAdjN,EAAKQ,MAIH,aAAcR,IAIhBA,EAAKiM,SAASzL,OAAS0M,EAAA,UAIvBlN,EAAKiM,SAASzL,OAAS0M,EAAA,QAChBlN,EAAKmN,OAGC,QAAR,EAAAnN,EAAKoN,WAAG,eAAED,MACrB,CAgCM,SAAUE,EAAexO,G,YACzBoN,EAAW,KAEX,aAAcpN,EAAMmB,OACtBiM,EAAWpN,EAAMmB,KAAKiM,UAGxB,IAAMqB,EAAaC,EAAA,SAAkC1O,EAAMmB,KAAMwN,EAAA,YA6BjE,OACE,gCACE,uBAAKxO,UAAW,eACd,uBAAKA,UAAW,kBACd,uBAAKA,UA/Bb,SAAgCkN,G,MAC1BuB,EAAY,8GAAH,OAvFjB,SAAmBvB,GACjB,OAAQA,GACN,IAAK,aACH,OAAO,YACT,IAAK,mBACH,OAAO,kBACT,IAAK,eACH,OAAO,cACT,IAAK,uBACH,OAAO,sBACT,QACE,OAAO,eAEb,CA4E0BwB,CAAUxB,GAAa,YAAI,kBAYjD,OAVe,QAAX,EAAArN,EAAM8O,aAAK,eAAEC,gBACfH,GAAa,IAAJ,OAAQ5O,EAAM8O,MAAMC,gBAE7BH,GAAa,aAGX5O,EAAMgP,kBACRJ,GAAa,IAAJ,OAAQ,eAGZA,CACT,CAewBK,CAAuB7B,aAAQ,EAARA,EAAUC,eACtB,UAAxBrN,EAAM2N,eACL,gBAACnC,EAAA,EAAO,CAACrI,MAAOnD,EAAMmB,KAAKwC,MACzB,sBAAIxD,UAAS,yCAAoC,SAC/C,wBAAMA,UAAU,WAAWH,EAAMmB,KAAKwC,QAK5C,uBAAKxD,UAAS,0BAC0B,QAApC,EAAW,QAAX,EAAAH,EAAM8O,aAAK,eAAEI,+BAAuB,QAAI,GAAE,iDAC1C,qBAAyB,YAA4B,UAAxBlP,EAAM2N,cAA4B,aAAoB,GAAE,4BACrF,aAAiB,mBAEnB,gBAACwB,EAAA,EAAiB,CAChBtB,SAAU7N,EAAMmB,KAChBoB,YAAavC,EAAMuC,YACnBgL,sBAAuBvN,EAAMuN,sBAC7BlM,aAAcrB,EAAMqB,aACpB+N,yBAA0BpP,EAAMoP,4BAInCX,GAAczO,EAAM4N,iBAA6C,WAA1B5N,EAAMyN,iBAC5C,uBAAKtN,UAAW,WACd,gBAAC6E,EAAA,EAAS,CACRC,QAAS,SAAAoK,GACPA,EAAEC,iBACFD,EAAEE,kBAxCbb,EAAA,aAA4B1O,EAAMmB,OAGF,mBAA1BnB,EAAM4N,iBACf5N,EAAM4N,gBAAgB5N,EAAMmB,KAsChB,EACAhB,UAAS,UAAK,WAAe,sDAE7B,gBAACwL,EAAA,EAAY,CAACC,QAAS,mBAK3B5L,EAAMwP,eAAiBf,GACvB,gBAACgB,EAAA,EAAS,CAACC,OAAQf,EAAA,gBAKF,UAAxB3O,EAAM2N,eACL,uBAAKxN,UAAS,eAAU,eAEpBuO,EAAA,SAAkC1O,EAAMmB,KAAMwN,EAAA,gBACxB,QAApB,EAAU,QAAV,EAAA3O,EAAMmB,YAAI,eAAEiM,gBAAQ,eAAEC,eAExB,gBAACsC,EAAA,EAAY,KACVC,EAAA,sBAAmC5P,EAAMmB,KAAKiM,SAASC,eAI5D,sBAAIlN,UAAU,cACXH,EAAMmB,KAAKwC,OAMxB,CAhHA6K,EAAeqB,aAAe,CAC5BxO,cAAc,EACdoM,gBAAiB,UAoHZ,IAAMqC,EAAuB,QAAW,SAAS9P,GAEtD,IAAM+P,EAAa/B,EAAsBhO,EAAMmB,KAAMnB,EAAMyN,iBASrDtL,EAAgB,OAAH,wBAAQnC,EAAMmC,eAAkBnC,EAAMmB,MAEnDiB,EAAgB,+BACjBpC,EAAMoC,kBAAgB,CACzBkG,WAAY,WACZD,OAAQrI,EAAMmB,KAAKuO,SAAWf,EAAA,WAAsB,cAAsB,YAG5E,SAASqB,IACPhE,EAAA,gBAA8B7J,EAAeC,EAC/C,CAEA,IASYjC,EATN8P,EAAS,+BACVjQ,GAAK,CAERgP,gBAAiBe,KAAgB/P,EAAMmB,KAAKmN,MAG9C,OACE,uBAAKnO,UAAS,6BAAwB,OAAW,YAzB1B,cAAnBH,EAAMoI,SACD,WAEF,YAsBgE,YAAI8H,EAAA,4BAEjE/P,EAAY,wBAGM,SAApBH,EAAMmB,KAAKQ,KAEX,qBAAGwO,KAAMnQ,EAAMmB,KAAKmN,IAAK/N,OAAO,SAASJ,UAAWA,EAAW8E,QAAS+K,GACtE,gBAACxB,EAAc,iBAAKyB,KAKtBF,EAM4B,WAA1B/P,EAAMyN,gBAEN,uBAAKtN,UAAS,UAAKA,EAAS,4BAA4B8E,QAAS,WAC/D+K,IACA,aAAsBhQ,EAAMsB,WAAWtB,EAAMmB,MAC/C,GACE,gBAACqN,EAAc,iBAAKyB,KAMxB,gBAACG,EAAA,EAAO,CACNrO,QAAS/B,EAAMsB,WAAWtB,EAAMmB,MAChChB,UAAWA,EACXgC,cAAeA,EACfC,iBAAkBA,GAElB,gBAACoM,EAAc,iBAAKyB,KAMtBjQ,EAAMmB,KAAKmN,IAEX,qBAAG6B,KAAMnQ,EAAMmB,KAAKmN,IAAKnO,UAAWA,EAAW8E,QAAS+K,GACtD,gBAACxB,EAAc,iBAAKyB,KAOxB,uBAAK9P,UAAWA,GACd,gBAACqO,EAAc,iBAAKyB,MAMhC,G,8FC7SA,SAAgB,aAAe,QAAQ,cAAgB,QAAQ,QAAU,QAAQ,aAAe,QAAQ,SAAW,QAAQ,UAAY,QAAQ,UAAY,QAAQ,SAAW,SC4BxK,SAAUI,EAAsCrQ,GACpD,IAAMoC,EAAmB,CACvBkG,WAAY,WACZD,OAAQ,YACRD,SAAU,sBAGZ,OACE,uBAAKjI,UAAS,UAAK,iBAChBH,EAAM0F,MAAME,KAAI,SAAC0K,EAAMC,GACtB,OAAIvQ,EAAMwQ,WAEN,gBAACxL,EAAA,EAAS,CACR0F,IAAK4F,EAAKhN,GACVnD,UAAS,UAAK,gBAAoB,YAAIH,EAAMyQ,WAAaH,EAAKhN,GAAK,eAAsB,IACzF2B,QAAS,W,MACPyL,EAAA,qBACA1Q,EAAM2Q,gBAAgBL,EAAKhN,IAEV,QAAjB,EAAAtD,EAAM4Q,mBAAW,gBAAGN,EACtB,GAEA,uBAAKnQ,UAAS,UAAMH,EAAMyQ,UAAoB,IAARF,EAA6B,GAAjB,UAAmB,MAClED,EAAK3M,OAOZ,gBAACyM,EAAA,EAAO,CACN1F,IAAK4F,EAAKhN,GACVvB,QAAS/B,EAAMsB,WAAWgP,GAC1BO,eAAgB,CAAEvH,SAAS,GAC3BnJ,UAAS,UAAK,gBAAoB,YAAIH,EAAMyQ,WAAaH,EAAKhN,GAAK,eAAsB,IACzF2B,QAAS,W,MACPyL,EAAA,qBACA1Q,EAAM2Q,gBAAgBL,EAAKhN,IAEV,QAAjB,EAAAtD,EAAM4Q,mBAAW,gBAAGN,EACtB,EACAnO,cAAa,+BACRnC,EAAMmC,eAAa,CACtBmB,GAAIgN,EAAKhN,GACTK,KAAM2M,EAAK3M,OAEbvB,iBAAkBA,GAElB,uBAAKjC,UAAS,UAAMH,EAAMyQ,UAAoB,IAARF,EAA6B,GAAjB,UAAmB,MAClED,EAAK3M,MAId,IAGN,C,uCC5EImN,E,WAESC,EAAkC,SAAH,GAExC,IADAC,EAAW,EAAXA,YAAaC,EAAe,EAAfA,gBAAiBC,EAAY,EAAZA,aAAcP,EAAe,EAAfA,gBAExCQ,EAAoB,SAAa,GAEvC,aAAgB,WACd,IAyBMC,EAAW,IAAIC,sBAzBJ,SAACC,GAChBA,EAASC,SAAQ,SAAAC,GACf,GAAIN,EAMF,OALAF,EAAYE,QAEZJ,EAAQW,OAAOC,YAAW,WACxBf,EAAgB,GAClB,GAAG,MAGL,GAAIa,EAAQG,eACVX,EAAYQ,EAAQjR,OAAO+C,IAC3B6N,EAAkB3Q,QAAUiR,OAAOG,YAC9B,CACL,IACMC,EADiBV,EAAkB3Q,QAAUiR,OAAOG,QACnB,EACjCE,EAAWb,EAAgBc,WAAU,SAAAC,GAAC,OAAIA,EAAE1O,KAAOkO,EAAQjR,OAAO+C,EAAE,IACpE2O,EAAchB,EAAgBa,EAAW,GAC3CD,IAAiBI,aAAW,EAAXA,EAAa3O,KAChC0N,EAAYiB,aAAW,EAAXA,EAAa3O,GAE5B,CACH,GACF,GAEoD,CAElD4O,WAAY,uBAKd,OAFAjB,EAAgBM,SAAQ,SAAAY,GAAO,OAAIf,EAASgB,QAAQD,EAAQ,IAErD,WACLrB,GAASW,OAAOY,aAAavB,GAC7BM,EAASkB,YACX,CACF,GAAG,CAAEtB,EAAaC,EAAgBjO,OAAQkO,GAC5C,C,wEC9CIqB,EAAiC,KAExBC,EAAiB,CAC5BC,oBAAmB,SAACC,EAA0BC,GAC5C,OAAO,kBAAwB,cAAoBD,GAAmB,mBAAF,OAAqBC,GAC3F,EAEAC,iBAAgB,SACd/E,EACA1L,EACAC,G,MAEIyQ,EAASN,EAERA,IACHM,EAASN,EAAc3R,SAASkS,cAAc,UAC9ClS,SAASmS,KAAKC,YAAYH,GAE1BA,EAAOI,MAAMC,QAAU,QAGzBL,EAAOM,IAAMtF,EAASS,IAEtB,kBAA8B,OAAD,QAC3BhL,GAAIuK,aAAQ,EAARA,EAAUvK,GACdK,KAAMkK,aAAQ,EAARA,EAAUlK,KAChB0J,aAAgC,QAAlB,EAAAQ,aAAQ,EAARA,EAAUT,gBAAQ,eAAEC,cAC/BlL,GAAa,eAEhBmG,WAAY,cACZD,OAAQ,cACRyF,cAAe,eACZ1L,GAEP,E,oJCzCF,SAAgB,UAAY,QAAQ,WAAa,QAAQ,MAAQ,QAAQ,SAAW,QAAQ,cAAgB,QAAQ,UAAY,QAAQ,SAAW,SCkBnJ,IAAMvC,EAAY,kBAkBlB,SAASuT,EAAoBpT,GAW3B,SAASqT,IAVT,IACQjR,EAUNpC,EAAMsT,eAAetT,EAAMuT,YAVrBnR,EAAmB,CACvBkG,WAAatI,EAAMuT,WAA+B,UAAlB,UAChClL,OAAQ,qBACRD,SAAU,eAGZ4D,EAAA,gBAA8BhM,EAAMmC,cAAeC,EAMrD,CAEA,OACE,uBAAKjC,UAAU,8BACb,uBAAKA,UAAW,aACd,uBAAKA,UAAS,UAAK,kBACjB,gBAACqT,EAAA,EAAU,CACTrT,UAAS,+BAA0B,YACnCyL,QAAS,qBACT3G,QAASoO,IAGX,gBAACG,EAAA,EAAU,CACTrT,UAAS,+BAA0B,aACnCyL,QAAU5L,EAAMuT,WAAuC,mBAA1B,gBAC7BtO,QAASoO,MAMrB,CAEA,SAASI,EAAgBzT,GAiCvB,OACE,uBAAKG,UAAYH,EAAM0T,WAAqC,YAAxB,uBAClC,yBAAOvT,UAAS,UAAK,QAAY,8BAAuBH,EAAM0T,WAAsE,aAAzD,yDACzE,uBAAKvT,UAAS,UAAK,YAAgB,YAAKH,EAAM0T,WAAkB,aAAL,KACxD1T,EAAM0T,YACL,gBAACF,EAAA,EAAU,CACTrT,UAAS,gCAA2B,YACpCyL,QAAS,mBACT3G,QAAS,WAxCrB,IACQ7C,EAwCMpC,EAAMsT,eAAc,GAxC1BlR,EAAmB,CACvBkG,WAAY,UACZD,OAAQ,qBACRD,SAAU,eAGZ4D,EAAA,gBAA8BhM,EAAMmC,cAAeC,EAoCzC,IAGJ,sBAAIjC,UAAU,MAAK,gBAACC,EAAA,EAAI,CAACP,UAAWA,EAAWQ,OAAO,gBAEtD,gBAACgQ,EAAA,EAAmB,CAClB3K,MAAO1F,EAAM0F,MACb+K,SAAUzQ,EAAMyQ,SAChBnP,WAzCV,SAAoBgP,GAClB,IAAMqD,EAAiBC,EAAA,oBAAiC7R,QAElD8R,EAAqBF,EAAeE,OACvC,iBAAOF,EAAeE,QACrB,CAAC,EAIL,OAFAA,EAAOC,MAAQxD,EAAKhN,GAEb,OAAP,wBACKqQ,GAAc,CACjBE,OAAAA,GAEJ,EA6BUlD,gBAAiB3Q,EAAM2Q,gBACvBxO,cAAenC,EAAMmC,cACrByO,YAAa,WA5BhB5Q,EAAM0T,YAET1T,EAAMsT,eAAc,EA0BoC,OAMtDtT,EAAM0T,YAAc,gBAACN,EAAmB,iBAAKpT,IAGrD,CAEM,SAAU+T,EAAyB/T,GACvC,OACE,gCAEGA,EAAMuT,YAAcvT,EAAM0T,YAAc,gBAACD,EAAe,iBAAKzT,IAG7DR,EAAA,0BACEQ,EAAMuT,YAAc,gBAACH,EAAmB,iBAAKpT,IAC9CY,SAASoT,eAAe,MAIzBxU,EAAA,0BACEQ,EAAM0T,YAAc1T,EAAMuT,YAAc,gBAACE,EAAe,iBAAKzT,IAC9DY,SAASoT,eAAe,MAIhC,C,6DClJMzO,EAAY,qBADA,eAGL0O,EAAgB,CAC3BC,kBAAiB,SAAC5Q,EAAoB4C,GACpC,OAAQ5C,GACN,KAAK,cACH,OAAOiC,EAAU,mBAAoB,CAAElC,MAAO6C,EAAQ4G,UAAU9J,SAElE,KAAK,UACH,OAAIkD,EAAQiO,eACH5O,EAAU,oBAAqB,CAAElC,MAAO6C,EAAQnD,MAAMC,OAAS,IACjEuC,EAAU,eAAgB,CAAElC,MAAO6C,EAAQnD,MAAMC,SAE1D,KAAK,iBACH,OAAOuC,EAAU,sBAAuB,CAAElC,MAAO6C,EAAQyG,aAAa3J,SAExE,KAAK,UACH,OAAOuC,EAAU,gBAEnB,KAAK,iBACH,OAAOA,EAAU,uBAEnB,KAAK,kBACH,OAAOA,EAAU,iBAEnB,KAAK,oBACH,OAAOA,EAAU,0BAEnB,KAAK,gBACH,OAAOA,EAAU,sBAEnB,QACE,MAAO,GAEb,E,wkCCzCF,IAAM6O,EAAyB,yBAEzB,SAAUC,EAA0BP,GACxC,IAAMJ,GAAa,SAEbY,GAAgE,IAAnD,SAAuBF,GACpCG,IAAsBb,GAAqBY,EAEoB,IAA3B,WAAeR,GAAS,IAAG,GAA7D5C,EAAY,KAAEP,EAAe,KACqD,IAA1B,WAAuB,IAAG,GAAlF6D,EAAuB,KAAEC,EAA0B,KACuC,IAAlC,WAAeF,GAAmB,GAA1FG,EAAuB,KAAEC,EAA0B,KAgB3D,OAdA,aAAgB,WAKZA,IAJGjB,GAIwBY,EAE/B,GAAG,CAACZ,IAOG,CACLxC,aAAAA,EACAP,gBAAAA,EACA+D,wBAAAA,EACAF,wBAAAA,EACAC,2BAAAA,EACAG,wBAXF,WACED,GAA4BD,GAC5B,SAAuBN,GAAyBM,EAClD,EAUF,C,6DCtCaG,EAA2B,CACtCtR,EAAA,QACAA,EAAA,kBACAA,EAAA,YACAA,EAAA,eACAA,EAAA,QACAA,EAAA,eACAA,EAAA,cACAA,EAAA,iBAGWuR,EAAqC,CAChDvR,EAAA,QACAA,EAAA,eACAA,EAAA,kBACAA,EAAA,YACAA,EAAA,eACAA,EAAA,QACAA,EAAA,cACAA,EAAA,iBCfI,SAAUwR,EAAmBC,GACjC,IAAMvR,EAAa,SAA+C,IAAIwR,KAChEhE,GAAmB+D,EAAYH,EAA2BC,GAAoClP,KAAI,SAAAtC,GACtG,OAAOG,EAAWjD,QAAQ0U,IAAI5R,EAChC,IAAGgE,OAAO6N,SAEV,MAAO,CAAE1R,WAAAA,EAAYwN,gBAAAA,EACvB,C,kDCVM,SAAUmE,IACd,IAAMnH,GAAc,SAEpB,OADsCA,EAAYoH,IAAMpH,EAAYqH,IAAMrH,EAAYsH,GAExF,C,mCCNA,SAAgB,kBAAoB,QAAQ,aAAe,QAAQ,KAAO,Q","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-description/video-description.scss","file:///app/packages/libs/shared/src/components/play-page-v2/details/video-description/VideoDescription.tsx","file:///app/packages/libs/shared/src/components/play-page-v2/details/video-details.scss","file:///app/packages/libs/shared/src/components/play-page-v2/details/VideoDetailsV2.tsx","file:///app/packages/libs/shared/src/components/play-page-v2/glance/VideoAtAGlanceUtilsV2.ts","file:///app/packages/libs/shared/src/components/play-page-v2/glance/points-of-interest-list/points-of-interest-list.scss","file:///app/packages/libs/shared/src/components/play-page-v2/glance/points-of-interest-list/PointsOfInterestList.tsx","file:///app/packages/libs/shared/src/components/play-page-v2/glance/VideoAtAGlanceV2.tsx","file:///app/packages/libs/shared/src/components/play-page-v2/interactives-widget/InteractiveWidgetItemV2.tsx","file:///app/packages/libs/shared/src/components/play-page-v2/interactives-widget/PlayPageInteractives.tsx","file:///app/packages/libs/shared/src/components/play-page-v2/resources-widget/PlayPageResources.tsx","file:///app/packages/libs/shared/src/components/play-page-v2/resources-widget/resource-widget-item.scss","file:///app/packages/libs/shared/src/components/play-page-v2/resources-widget/ResourceWidgetItemV2.tsx","file:///app/packages/libs/shared/src/components/table-of-contents-list/table-of-contents-list.scss","file:///app/packages/libs/shared/src/components/table-of-contents-list/TableOfContentsList.tsx","file:///app/packages/libs/shared/src/hooks/useTableOfContentsActiveHeading.tsx","file:///app/packages/libs/shared/src/utils/DownloadHelper.ts","file:///app/packages/projects/lite/src/shared/components/play-page/components/table-of-contents/table-of-contents.scss","file:///app/packages/projects/lite/src/shared/components/play-page/components/table-of-contents/TableOfContents.tsx","file:///app/packages/projects/lite/src/shared/views/play/v2/PlayPageUtilV2.tsx","file:///app/packages/projects/lite/src/shared/views/play/v2/hooks/usePlayPageTableOfContent.ts","file:///app/packages/projects/lite/src/shared/constants/PlayPageSectionsOrder.ts","file:///app/packages/projects/lite/src/shared/views/play/v2/hooks/useSectionHeadings.ts","file:///app/packages/projects/lite/src/shared/views/play/v2/hooks/useShouldShowTableOfContents.ts","file:///app/packages/libs/shared/src/components/play-page-v2/glance/video-at-a-glance.scss"],"sourcesContent":["import React from 'react';\nimport { createPortal } from 'react-dom';\n\nexport const PortalHelper = {\n renderInPortalIfExists(component: React.ReactElement, portalContainer: Element | null): React.ReactElement {\n if (portalContainer)\n return createPortal(component, portalContainer);\n\n return component;\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"copyrightDisclaimer\":\"z8YoI\",\"overlayContainer\":\"eJDbJ\"};","import React from 'react';\nimport { Overlay } from 'react-bootstrap';\nimport { Placement } from 'react-bootstrap/esm/types';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useHoverIntent } from 'libs/shared/hooks/UseHover';\n\nimport styles from './copyright-disclaimer.scss';\n\nconst namespace = 'shared.copyrightDisclaimer';\n\nconst CONTAINER_HEIGHT = 150; // px\n\ninterface CopyrightDisclaimerProps {\n placement: Placement;\n overflowPlacement?: Placement;\n className?: string;\n}\n\nexport function CopyrightDisclaimer(props: CopyrightDisclaimerProps) {\n const [ ref, isHovering ] = useHoverIntent<HTMLDivElement>({});\n\n function preventOverflow() {\n const spaceBelow = document.documentElement.clientHeight - ref.current?.getBoundingClientRect().bottom;\n\n return spaceBelow < CONTAINER_HEIGHT;\n }\n\n return (\n <div ref={ref} className={props.className}>\n <p className={`${styles.copyrightDisclaimer} mb-1`}><Text namespace={namespace} phrase='copyrightDisclaimer' /></p>\n <Overlay\n target={ref.current}\n show={isHovering}\n placement={props.overflowPlacement && preventOverflow() ? props.overflowPlacement : props.placement}\n >\n <div className={`${styles.overlayContainer} mw-100 bg-white border rounded-3 p-2`}>\n <p><Text namespace={namespace} phrase='warning' /></p>\n <p className='fw-semibold mb-0'><Text namespace={namespace} phrase='sharing' /></p>\n </div>\n </Overlay>\n </div>\n );\n}","import React from 'react';\n\nimport { ThumbnailText } from 'libs/shared/components/thumbnails/thumbnail-text/ThumbnailText';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { CanFavouriteFunc, Clip, FavouriteFunc, PresentationAudience, YearGroup } from 'libs/shared/interfaces';\n\nexport interface ClipWidgetItemV2Props extends FixedWidgetItemProps<Clip> {\n imageCdnUrl: string;\n setFavourite: FavouriteFunc;\n canFavourite: CanFavouriteFunc;\n audiences: PresentationAudience[];\n yearGroups: YearGroup[];\n isPlugin: boolean;\n showOwner?: boolean;\n}\n\nexport const ClipWidgetItemV2 = React.memo(function(props: ClipWidgetItemV2Props): JSX.Element {\n const { data: clip, thumbnailSize, preloadImage, getAppLink } = props;\n const mergedAudience = useMergeAudiences(clip.subjectPresentationAudiences?.data, props.audiences);\n\n return (\n <div className={`flex-shrink-0 px-1 col-6 col-sm-4`}>\n <VideoThumbnail\n type='static'\n textPosition={ThumbnailTextPosition.Independent}\n video={clip}\n appLink={getAppLink(clip)}\n imageOptions={{ size: thumbnailSize }}\n preload={preloadImage}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n imageCdnUrl={props.imageCdnUrl}\n audience={mergedAudience}\n hideDuration={false}\n isPlugin={props.isPlugin}\n showOwner={props.showOwner}\n />\n\n <div className='mt-2'>\n <ThumbnailText\n {...props}\n video={clip}\n appLink={props.getAppLink(clip)}\n />\n </div>\n </div>\n );\n});","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { CanFavouriteFunc, Clip, FavouriteFunc, PresentationAudience, Video, YearGroup } from 'libs/shared/interfaces';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { ClipWidgetItemV2, ClipWidgetItemV2Props } from './ClipWidgetItemV2';\n\nconst namespace = 'shared.playPageClipsV2';\n\ninterface PlayPageClipsProps {\n video: Video | Clip;\n clips: Clip[];\n canViewClips: boolean;\n yearGroups: YearGroup[];\n audiences: PresentationAudience[];\n imageCdnUrl: string;\n setFavourite: FavouriteFunc;\n canFavourite: CanFavouriteFunc;\n analyticsData: HashObject;\n headingRef?: React.MutableRefObject<Map<PlayPageAnchor, HTMLElement>>;\n isPlugin: boolean;\n}\n\nexport function PlayPageClips(props: PlayPageClipsProps): JSX.Element {\n if (!props.canViewClips || !props.clips?.length)\n return <></>;\n\n const parentIsVideo = VideoHelper.isVideo(props.video);\n\n function getAppLink() {\n if (VideoHelper.isVideo(props.video)) {\n return {\n action: Actions.Videos.VIDEO_CLIPS,\n application: AppChannels.VIDEOS,\n args: [ props.video.id, TextHelper.slugify(props.video.name) ]\n };\n }\n return {\n action: Actions.Clips.CLIP_CLIPS,\n application: AppChannels.CLIPS,\n args: [ props.video.id, TextHelper.slugify(props.video.name) ]\n };\n }\n\n const title = LanguageService.getPhrase(\n namespace,\n parentIsVideo ? 'clips' : 'otherClips',\n { count: props.clips.length }\n );\n\n return (\n <section\n className='play-page-section'\n id={PlayPageAnchor.Clips}\n ref={el => {\n (el && props.headingRef?.current) && props.headingRef.current.set(PlayPageAnchor.Clips, el);\n }}\n >\n <FixedWidget<ClipWidgetItemV2Props>\n name={title}\n contents={WidgetContents.ClipsV2}\n collection={props.clips}\n prefetched\n getChildAppLink={(clip: Clip) => {\n return {\n application: AppChannels.CLIPS,\n action: Actions.Clips.PLAY_CLIP,\n args: [ clip.id, TextHelper.slugify(clip.name) ]\n };\n }}\n appLink={getAppLink()}\n childComponent={ClipWidgetItemV2}\n extraChildComponentProps={{\n yearGroups: props.yearGroups,\n audiences: props.audiences,\n imageCdnUrl: props.imageCdnUrl,\n setFavourite: props.setFavourite,\n canFavourite: props.canFavourite,\n isPlugin: props.isPlugin,\n showOwner: true\n }}\n analyticsData={props.analyticsData}\n />\n </section>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"G5zMm\",\"collapsed\":\"kkd1X\",\"seeMore\":\"DS4QF\"};","import React from 'react';\n\nimport { LinkifyHelper } from 'libs/common/react/utils/LinkifyHelper';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useResizeListener } from 'libs/shared/hooks/UseResizeListener';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nimport styles from './video-description.scss';\n\nconst namespace = 'shared.videoDetailsV2';\n\ninterface VideoDescriptionProps {\n video: VideoTypes;\n}\n\nexport function VideoDescription(props: VideoDescriptionProps): React.ReactElement {\n const containerRef = React.useRef<HTMLDivElement>(null);\n\n const [ expanded, setExpanded ] = React.useState(false);\n const memoClientHeight = React.useRef<number>(0);\n const [ showButton, setShowButton ] = React.useState(containerRef.current?.scrollHeight > memoClientHeight.current);\n \n React.useEffect(() => {\n if (containerRef.current.clientHeight)\n // memo the initial clientHeight, cuz after expand and collapse the clientHeight will change\n memoClientHeight.current = containerRef.current.clientHeight;\n }, []);\n\n useResizeListener(() => {\n if (containerRef.current.clientHeight) {\n // update memo value on resize\n memoClientHeight.current = containerRef.current.clientHeight;\n setShowButton(containerRef.current?.scrollHeight > memoClientHeight.current);\n }\n });\n\n React.useEffect(() => {\n if (containerRef.current?.scrollHeight) {\n setShowButton(containerRef.current?.scrollHeight > memoClientHeight.current);\n }\n }, [ containerRef.current?.scrollHeight, memoClientHeight.current ]);\n\n return (\n <div className={`${styles.container} ${expanded ? '' : styles.collapsed}`} >\n {(!expanded && showButton) && (\n <DivButton\n onClick={() => setExpanded(true)}\n className={`ms-1 text-info hover-text-underline ${styles.seeMore}`}\n >\n <Text namespace={namespace} phrase='seeMore' />\n </DivButton>\n )}\n <p\n ref={containerRef}\n className={`mb-0 ${expanded ? 'd-inline' : ''}`}\n dangerouslySetInnerHTML={{\n __html: LinkifyHelper.linkifyText(props.video.description, { nl2br: true })\n }}\n />\n {expanded && (\n <DivButton\n onClick={() => setExpanded(false)}\n className={`ms-1 hover-text-underline d-inline text-info`}\n >\n <Text namespace={namespace} phrase='seeLess' />\n </DivButton>\n )}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"descriptionBorder\":\"YUC62\"};","import * as React from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { CopyrightDisclaimer } from 'libs/shared/components/copyright-disclaimer/CopyrightDisclaimer';\nimport { ImmersiveReader } from 'libs/shared/components/immersive-reader/ImmersiveReader';\nimport { VideoDescription } from 'libs/shared/components/play-page-v2/details/video-description/VideoDescription';\nimport { TagHelper } from 'libs/shared/components/tags/TagHelper';\nimport { TagList } from 'libs/shared/components/tags/TagList';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { hasPPDD } from 'libs/shared/components/video-details/VideoDetailsUtils';\nimport { MINIMUM_GLANCE_HEIGHT } from 'libs/shared/constants/MinimumGlanceHeight';\nimport { TagType } from 'libs/shared/enums/TagType';\nimport { BaseObject, BasePaginatedCollection, Tag, VideoTypes } from 'libs/shared/interfaces';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './video-details.scss';\n\nconst namespace = 'shared.videoDetailsV2';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface CommaListProps {\n label: string;\n items: BasePaginatedCollection<BaseObject>;\n className?: string;\n}\n\nfunction CommaList(props: CommaListProps): React.ReactElement {\n const { label, items, className } = props;\n\n const hasItems = items && items.data && items.data.length;\n\n if (!hasItems)\n return <></>;\n\n const commaSeperated = items.data.map(i => i.name).join(', ');\n\n return (\n <div className={className}>{label}: {commaSeperated}</div>\n );\n}\n\nfunction DetailsSection(props: VideoDetailsWithScrollbarV2Props): React.ReactElement {\n const { video } = props;\n\n if (!VideoHelper.isVideo(video) && !VideoHelper.isClip(video))\n return <></>;\n\n const parentVideo = VideoHelper.getParentVideo(video);\n\n return (\n <div className={video.description ? 'col-md-5 ps-md-3 pt-3 pt-md-0' : 'col-12'}>\n <h2 className='h6 mb-1'><Text phrase='details' /></h2>\n {!!parentVideo.productionYear && (\n <div className='mb-1'>\n <Text phrase='productionYear' options={{ year: parentVideo.productionYear }} />\n </div>\n )}\n <CommaList\n label={getPhrase('productionCompanies', { smartCount: parentVideo.productionCompanies?.data?.length })}\n items={parentVideo.productionCompanies}\n className='mb-1'\n />\n <CommaList\n label={getPhrase('distributors', { smartCount: parentVideo.distributors?.data?.length })}\n items={parentVideo.distributors}\n className='mb-1'\n />\n <CommaList\n label={getPhrase('producers', { smartCount: parentVideo.producers?.data?.length })}\n items={parentVideo.producers}\n className='mb-1'\n />\n <CommaList\n label={getPhrase('directors', { smartCount: parentVideo.directors?.data?.length })}\n items={parentVideo.directors}\n className='mb-1'\n />\n {!!parentVideo.dateBroadcast && (\n <div className='mb-1'>\n <Text phrase='dateBroadcast' options={{ date: DateHelper.format(parentVideo.dateBroadcast, 'DD/MM/YYYY') }} />\n </div>\n )}\n {!!parentVideo.channel && (\n <div className='mb-1'>\n <Text phrase='channel' options={{ channel: parentVideo.channel.name }} />\n </div>\n )}\n {!!(!video._isClickViewCurated?.value && video.dateCreated) && (\n <div className='mb-1'>\n <Text phrase='dateUploaded' options={{ date: DateHelper.format(video.dateCreated, 'DD/MM/YYYY') }} />\n </div>\n )}\n </div>\n );\n}\n\ninterface VideoDetailsWithScrollbarV2Props {\n video: VideoTypes;\n getTagAppLink?: (tag: Tag) => Core.AppLink;\n onLaunchImmersiveReader?: () => void;\n onExitImmersiveReader?: () => void;\n maxHeight?: number;\n suppressInteractivity?: boolean;\n hideTags?: boolean;\n headingRef?: React.MutableRefObject<Map<PlayPageAnchor, HTMLElement>>;\n showHeading?: boolean;\n}\n\nexport function VideoDetailsWithScrollbarV2(props: VideoDetailsWithScrollbarV2Props): React.ReactElement {\n const { video, maxHeight = MINIMUM_GLANCE_HEIGHT } = props;\n\n const parentVideo = VideoHelper.getParentVideo(video);\n\n const showDescription = !!props.video.description;\n\n const showDetails = (\n hasPPDD(props.video) ||\n !!parentVideo.productionYear ||\n !!parentVideo.dateBroadcast ||\n !!parentVideo.channel ||\n !!(video.dateCreated && !video._isClickViewCurated?.value)\n );\n\n if (!showDescription && !showDetails)\n return <></>;\n\n function getTags(): Tag[] {\n if (props.hideTags || VideoHelper.isInteractive(props.video) || !props.video.tags?.data?.length)\n return null;\n\n return props.video.tags?.data?.filter(tag => tag.tagType === TagType.Normal);\n }\n const tags = getTags();\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <section\n id={PlayPageAnchor.VideoDetails}\n ref={el => {\n (el && props.headingRef?.current) && props.headingRef.current.set(PlayPageAnchor.VideoDetails, el);\n }}\n className='play-page-section'\n >\n {props.showHeading && (\n <h2 className='h4 curated-widget-header'><Text phrase='heading' /></h2>\n )}\n <div className='rounded border p-3 position-relative'>\n <Scrollbars autoHeight autoHeightMax={maxHeight}>\n <div className='row g-0'>\n {showDescription && (\n <div className={showDetails ? `${styles.descriptionBorder} pe-3 col-md-7` : 'col-12'}>\n <div className='d-flex align-items-center'>\n <h2 className='h6 mb-1'>\n <Text phrase='description' />\n </h2>\n <ImmersiveReader\n text={video.description}\n title={video.name}\n className='ps-2'\n onLaunch={props.onLaunchImmersiveReader}\n onExit={props.onExitImmersiveReader}\n analyticsOptions={{\n location: LocationContext.PlayPage,\n entity: EntityType.Video,\n actionType: UserAction.Click,\n descriptor: ClickDescriptor.LaunchImmersiveReader\n }}\n analyticsData={{ id: video.id, type: 'description' }}\n />\n </div>\n\n <VideoDescription video={props.video} />\n </div>\n )}\n\n {showDetails && (\n <DetailsSection {...props} />\n )}\n </div>\n\n {!!tags?.length && (\n <div className='mt-3'>\n <h2 className='h6 mb-1'><Text phrase='normalTags' /></h2>\n <TagList\n tags={tags}\n {...TagHelper.getTagActionProps(props.getTagAppLink, null, props.suppressInteractivity)}\n className='mt-1'\n />\n </div>\n )}\n\n {VideoHelper.isBroadcast(props.video) && <CopyrightDisclaimer placement='bottom-start' className='d-flex justify-content-start mt-2 mb-n1' />}\n\n </Scrollbars>\n </div>\n </section>\n </LanguageNamespaceContext.Provider>\n );\n}","import { MutableRefObject, useEffect, useRef, useState } from 'react';\nimport * as marked from 'marked';\n\nimport { useEventsServiceSubscribe } from 'libs/common/react/hooks/UseEventsServiceSubscribe';\nimport { EventsService } from 'libs/common/react/services/EventsService';\n\nimport { Clip, Glance, PointOfInterest, Video } from 'libs/shared/interfaces';\n\nimport styles from './video-at-a-glance.scss';\n\nconst POI_LINK_LINE = /\\[\\]\\(cv:\\/\\/poi\\?id=\\d+\\)\\n*/g;\n\nfunction stripPoisFromGlanceContent(glanceContent: string): string {\n return glanceContent.replace(POI_LINK_LINE, '');\n}\n\nfunction getLearningIntentionHTML(glance: Glance): string {\n const learningIntention = stripPoisFromGlanceContent(glance.content);\n\n return marked(learningIntention);\n}\n\nexport function useLearningIntentionMarkdown(\n video: Video,\n hasGlanceData?: boolean\n): string {\n const [ markdownHTML, setMarkdownHTML ] = useState('');\n\n useEffect(() => {\n if (!hasGlanceData)\n return;\n\n const content = getLearningIntentionHTML(video.glance);\n\n setMarkdownHTML(content);\n }, [ video.glance?.content, hasGlanceData ]);\n\n return markdownHTML;\n}\n\nexport function hasGlanceData(video: Video | Clip): boolean {\n return video.glance?.content && video.glance?.format === 'text/markdown';\n}\n\nexport function useHighlightPointOfInterest(\n pointOfInterest: PointOfInterest,\n shouldHighlight: boolean\n): MutableRefObject<HTMLDivElement> {\n const ref = useRef<HTMLDivElement>();\n\n useEventsServiceSubscribe('player:poi:mouseover', onPlayerPoiMouseOver, null, shouldHighlight);\n useEventsServiceSubscribe('player:poi:mouseleave', onPlayerPoiMouseLeave, null, shouldHighlight);\n\n useEffect(() => {\n if (!ref.current || !shouldHighlight)\n return;\n\n ref.current?.addEventListener('mouseover', onGlancePoiMouseOver);\n ref.current?.addEventListener('mouseleave', onGlancePoiMouseLeave);\n\n return () => {\n ref.current?.removeEventListener('mouseover', onGlancePoiMouseOver);\n ref.current?.removeEventListener('mouseleave', onGlancePoiMouseLeave);\n };\n }, [ref.current]);\n\n function onPlayerPoiMouseOver(hoveredPoi: PointOfInterest): void {\n if (!hoveredPoi?.id || pointOfInterest?.id?.toString() !== hoveredPoi?.id?.toString())\n return;\n\n ref.current?.classList.add(styles.highlightPoi);\n }\n\n function onPlayerPoiMouseLeave(): void {\n ref.current?.classList.remove(styles.highlightPoi);\n }\n\n /**\n * `this` will be the element to which the eventListener is bound.\n */\n function onGlancePoiMouseOver(): void {\n if (pointOfInterest)\n EventsService.trigger('glance:poi:mouseover', pointOfInterest);\n }\n\n function onGlancePoiMouseLeave(): void {\n EventsService.trigger('glance:poi:mouseleave');\n }\n\n return ref;\n}","// extracted by mini-css-extract-plugin\nexport default {\"poiEntry\":\"vr6R9\",\"poiText\":\"znHZF\",\"public\":\"v0BZ9\",\"poiTimeStamp\":\"AdKwe\"};","import React from 'react';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { PointOfInterest } from 'libs/shared/interfaces';\nimport { DurationHelper } from 'libs/shared/utils/DurationHelper';\n\nimport { useHighlightPointOfInterest } from '../VideoAtAGlanceUtilsV2';\n\nimport styles from './points-of-interest-list.scss';\n\ninterface PointOfInterestProps {\n poi: PointOfInterest;\n suppressInteractivity?: boolean;\n onClickPoiItem: (time: number) => void;\n}\n\nfunction PointOfInterest(props: PointOfInterestProps): JSX.Element {\n const timeStamp = DurationHelper.ToDisplayDuration(props.poi.startTime * 1000);\n\n const ref = useHighlightPointOfInterest(props.poi, !props.suppressInteractivity);\n\n if (props.suppressInteractivity) {\n return (\n <div className={`d-flex ${styles.poiEntry} mb-2`}>\n <span className={`d-flex rounded-pill justify-content-center align-items-center fw-semibold text-info bg-light-blue ${styles.poiTimeStamp}`}>{timeStamp}</span>\n <div className={`${styles.public} ms-2`}>{props.poi.description}</div>\n </div>\n );\n }\n\n return (\n <DivButton\n key={props.poi.startTime}\n className={`d-flex ${styles.poiEntry} mb-2 cursor-pointer`}\n onClick={() => props.onClickPoiItem(props.poi.startTime)}\n ref={ref}\n >\n <div className={`d-flex rounded-pill justify-content-center align-items-center fw-semibold text-info bg-light-blue ${styles.poiTimeStamp}`}>{timeStamp}</div>\n <div className={`ms-2 ${styles.poiText}`}>{props.poi.description}</div>\n </DivButton>\n );\n}\n\ninterface PointOfInterestListProps{\n pointsOfInterest: PointOfInterest[];\n suppressInteractivity?: boolean;\n onClickPoiItem: (time: number) => void\n}\n\nconst namespace = 'shared.pointsOfInterestList';\n\nexport function PointOfInterestList(props: PointOfInterestListProps) {\n return (\n <div>\n <h2 className='h6 my-2'><Text namespace={namespace} phrase='heading' /></h2>\n\n <div>\n {props.pointsOfInterest.map(poi => {\n return (\n <PointOfInterest\n key={poi.startTime}\n poi={poi}\n suppressInteractivity={props.suppressInteractivity}\n onClickPoiItem={props.onClickPoiItem}\n />\n );\n })}\n\n </div>\n </div>\n );\n}","import * as React from 'react';\nimport CopyToClipboard from 'react-copy-to-clipboard';\nimport Scrollbars from 'react-custom-scrollbars-2';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { PointOfInterestList } from 'libs/shared/components/play-page-v2/glance/points-of-interest-list/PointsOfInterestList';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { TagHelper } from 'libs/shared/components/tags/TagHelper';\nimport { TagList } from 'libs/shared/components/tags/TagList';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { TagType } from 'libs/shared/enums/TagType';\nimport { PointOfInterest, Tag, Video } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { useLearningIntentionMarkdown } from './VideoAtAGlanceUtilsV2';\n\nimport styles from './video-at-a-glance.scss';\n\nconst namespace = 'shared.videoAtAGlanceV2';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst SCROLL_HEIGHT_MAX = 350; // in px\n\ninterface ScrollbarWrapperProps {\n hideScrollbar?: boolean;\n}\n\nfunction ScrollbarWrapper(props: React.PropsWithChildren<ScrollbarWrapperProps>): JSX.Element {\n if (props.hideScrollbar)\n return <>{props.children}</>;\n\n return (\n <div className='rounded border mb-4 bg-white'>\n <Scrollbars\n autoHeight\n autoHeightMax={SCROLL_HEIGHT_MAX}\n >\n <div className='px-3 px-3 pt-3 pb-2'>\n {props.children}\n </div>\n </Scrollbars>\n </div>\n );\n}\n\ninterface VideoAtAGlanceV2Props {\n video: Video;\n pointsOfInterest?: PointOfInterest[];\n suppressInteractivity?: boolean;\n setStartTime?: (time: number) => void;\n getTagAppLink?: (tag: Tag) => Core.AppLink;\n onClickTag?: () => void;\n hideScrollbar?: boolean;\n canViewGlance: boolean;\n}\n\nexport function VideoAtAGlanceV2(props: VideoAtAGlanceV2Props): JSX.Element {\n const learningIntentionMarkdownHTML = useLearningIntentionMarkdown(props.video, props.canViewGlance);\n const [ textToCopy, setTextToCopy ] = React.useState('');\n\n function logUserAction(): void {\n const analyticsData = {\n id: props.video.glance.id,\n videoId: props.video.id,\n videoName: props.video.name,\n learningIntention: textToCopy\n };\n\n const analyticsOptions = {\n actionType: UserAction.Copy,\n entity: EntityType.Glance,\n location: LocationContext.PlayPage\n };\n AnalyticsHelper.logUserAction(analyticsData, analyticsOptions);\n }\n\n function getTags(): Tag[] {\n if (VideoHelper.isInteractive(props.video) || !props.video.tags?.data?.length)\n return null;\n\n return props.video.tags?.data?.filter(tag => tag.tagType === TagType.Pedagogy || tag.tagType === TagType.Skill);\n }\n const tags = getTags();\n\n const ref = React.useRef<HTMLDivElement>(null);\n\n React.useEffect(() => {\n if (ref.current?.innerText)\n setTextToCopy(ref.current.innerText);\n }, [ref.current?.innerText]);\n\n if (!props.canViewGlance)\n return <></>;\n\n function onClickPoiItem(time: number) {\n props.setStartTime(time);\n }\n\n return (\n <section className='play-page-section'>\n <ScrollbarWrapper hideScrollbar={props.hideScrollbar}>\n <h2 className='h6 mb-2'><Text namespace={namespace} phrase='learningIntention' /></h2>\n \n <div className={`mb-3 ${styles.learningIntention}`}>\n <Tooltip title={getPhrase('copy')} spanHack spanHackClassName={styles.icon}>\n <CopyToClipboard text={textToCopy}>\n <SvgContainer\n className='svg-container me-1 cursor-pointer'\n svgName={cvSvgLibrary.Copy}\n size={SvgContainerSize.Small}\n onClick={logUserAction}\n />\n </CopyToClipboard>\n </Tooltip>\n \n <div\n dangerouslySetInnerHTML={{ __html: learningIntentionMarkdownHTML }}\n className='d-inline'\n ref={ref}\n >\n </div>\n </div>\n\n {!!tags?.length && (\n <div className='mb-1'>\n <TagList\n tags={tags}\n {...TagHelper.getTagActionProps(props.getTagAppLink, props.onClickTag, props.suppressInteractivity)}\n className='mt-2'\n />\n </div>\n )}\n\n {!!props.pointsOfInterest.length && (\n <PointOfInterestList\n pointsOfInterest={props.pointsOfInterest}\n suppressInteractivity={props.suppressInteractivity}\n onClickPoiItem={onClickPoiItem}\n />\n )}\n </ScrollbarWrapper>\n </section>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ThumbnailText } from 'libs/shared/components/thumbnails/thumbnail-text/ThumbnailText';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { CanFavouriteFunc, FavouriteFunc, InteractiveMetadata, YearGroup } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.interactiveWidgetItemV2';\n\nexport interface InteractiveWidgetItemV2Props extends FixedWidgetItemProps<InteractiveMetadata> {\n imageCdnUrl: string;\n questionsAppLink: Core.AppLink;\n setFavourite?: FavouriteFunc;\n canFavourite?: CanFavouriteFunc;\n yearGroups: YearGroup[];\n isPlugin: boolean;\n showOwner?: boolean;\n}\n\nexport const InteractiveWidgetItemV2 = React.memo(function(props: InteractiveWidgetItemV2Props): JSX.Element {\n const { data: interactive, thumbnailSize, preloadImage } = props;\n\n const questionsAppLink: Core.AppLink = {\n ...props.questionsAppLink,\n args: [props.data.id]\n };\n\n const questionsNumber = interactive._timepoints?.value?.length;\n\n return (\n <div className={`flex-shrink-0 px-1 col-6 col-sm-4`}>\n <VideoThumbnail\n type='static'\n textPosition={ThumbnailTextPosition.Independent}\n video={interactive}\n appLink={props.getAppLink(interactive)}\n imageOptions={{ size: thumbnailSize }}\n preload={preloadImage}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n hideDuration={false}\n imageCdnUrl={props.imageCdnUrl}\n isPlugin={props.isPlugin}\n showOwner={props.showOwner}\n />\n\n <div className='mt-2'>\n <ThumbnailText\n {...props}\n video={interactive}\n appLink={props.getAppLink(interactive)}\n />\n </div>\n\n <div className='mt-1'>\n <AppLink appLink={questionsAppLink} className='cursor-pointer'>\n <Text namespace={namespace} phrase='previewQuestions' options={{ count: questionsNumber, smartCount: questionsNumber }}/>\n </AppLink>\n </div>\n\n </div>\n );\n});\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { CanFavouriteFunc, Clip, FavouriteFunc, Interactive, InteractiveMetadata, Video, YearGroup } from 'libs/shared/interfaces';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { InteractiveWidgetItemV2, InteractiveWidgetItemV2Props } from './InteractiveWidgetItemV2';\n\nconst namespace = 'shared.playPageInteractivesV2';\n\ninterface PlayPageInteractivesProps {\n canViewInteractives: boolean;\n video: Video | Clip;\n interactives: InteractiveMetadata[];\n imageCdnUrl: string;\n analyticsData: HashObject;\n yearGroups: YearGroup[];\n setFavourite: FavouriteFunc;\n canFavourite: CanFavouriteFunc;\n isPlugin: boolean;\n headingRef?: React.MutableRefObject<Map<PlayPageAnchor, HTMLElement>>;\n}\n\nexport function PlayPageInteractives(props: PlayPageInteractivesProps): JSX.Element {\n if (!props.canViewInteractives || !props.interactives?.length)\n return <></>;\n\n function getAppLink() {\n if (VideoHelper.isVideo(props.video))\n return {\n action: Actions.Videos.VIDEO_INTERACTIVES,\n application: AppChannels.VIDEOS,\n args: [ props.video.id, TextHelper.slugify(props.video.name) ]\n };\n\n return {\n action: Actions.Clips.CLIP_INTERACTIVES,\n application: AppChannels.CLIPS,\n args: [ props.video.id, TextHelper.slugify(props.video.name) ]\n };\n }\n\n const title = LanguageService.getPhrase(namespace, 'interactives', { count: props.interactives.length });\n \n return (\n <section className='play-page-section'\n id={PlayPageAnchor.Interactives}\n ref={el => {\n (el && props.headingRef?.current) && props.headingRef.current.set(PlayPageAnchor.Interactives, el);\n }}\n >\n <FixedWidget<InteractiveWidgetItemV2Props>\n name={title}\n contents={WidgetContents.InteractivesV2}\n collection={props.interactives}\n prefetched\n getChildAppLink={(interactive: Interactive) => {\n return {\n application: AppChannels.INTERACTIVES,\n action: Actions.Interactives.VIEW_INTERACTIVE,\n args: [ interactive.id, TextHelper.slugify(interactive.name) ]\n };\n }}\n appLink={getAppLink()}\n childComponent={InteractiveWidgetItemV2}\n extraChildComponentProps={{\n yearGroups: props.yearGroups,\n setFavourite: props.setFavourite,\n canFavourite: props.canFavourite,\n imageCdnUrl: props.imageCdnUrl,\n questionsAppLink: {\n application: AppChannels.INTERACTIVES,\n action: Actions.Interactives.PREVIEW_QUESTIONS\n },\n isPlugin: props.isPlugin,\n showOwner: true\n }}\n analyticsData={props.analyticsData}\n />\n </section>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { EntityType, LocationContext, SignUpDescriptors, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { Clip, Link, Resource, Video } from 'libs/shared/interfaces';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { DownloadHelper } from 'libs/shared/utils/DownloadHelper';\n\nimport { ResourceWidgetItemV2, ResourceWidgetItemV2Props } from './ResourceWidgetItemV2';\n\nconst namespace = 'shared.playPageResources';\n\nfunction getResources(\n video: Video,\n isLearner: boolean\n): Array<Resource | Link> {\n const resources = video.resources?.data ?? [];\n const links = video.links?.data ?? [];\n\n if (!isLearner)\n return [ ...resources, ...links ];\n\n const filteredResources = resources.filter(r => {\n return [ 'additional-materials', 'student-activity' ].includes(r.metadata?.resourceType);\n });\n\n return [ ...filteredResources, ...links ];\n}\n\ninterface PlayPageResourcesProps {\n video: Video | Clip;\n imageCdnUrl: string;\n canViewResources: boolean;\n getAppLink: (resource: Resource) => Core.AppLink;\n analyticsData: HashObject;\n resourceThumbnailFallbackUrl: string;\n headingRef?: React.MutableRefObject<Map<PlayPageAnchor, HTMLElement>>;\n}\n\nexport function PlayPageResources(props: PlayPageResourcesProps): JSX.Element {\n const { hasPermissions } = usePermissions();\n\n function onClickDownload(resource: Resource): void {\n DownloadHelper.downloadResource(\n resource,\n props.analyticsData,\n { location: LocationContext.PlayPage, actionType: UserAction.Download, entity: EntityType.Resource }\n );\n }\n\n const resources = getResources(props.video, hasPermissions(PermissionName.StudentExperience));\n const title = LanguageService.getPhrase(namespace, 'resources', { count: resources.length });\n\n if (!resources.length)\n return <></>;\n\n return (\n <section\n id={PlayPageAnchor.Resources}\n className='play-page-section'\n ref={el => {\n (el && props.headingRef?.current) && props.headingRef.current.set(PlayPageAnchor.Resources, el);\n }}\n >\n <FixedWidget<ResourceWidgetItemV2Props>\n name={title}\n contents={WidgetContents.PlayPageResourcesV2}\n collection={resources}\n prefetched\n childComponent={ResourceWidgetItemV2}\n extraChildComponentProps={{\n imageCdnUrl: props.imageCdnUrl,\n imageErrorFallbackUrl: props.resourceThumbnailFallbackUrl,\n actionBehaviour: props.canViewResources ? 'normal' : 'public',\n location: 'play-page',\n titlePosition: 'below',\n onClickDownload: props.canViewResources ? onClickDownload : null\n }}\n getChildAppLink={props.getAppLink}\n analyticsOptions={(() => {\n if (props.canViewResources)\n return {};\n \n return {\n workflowPhase: WorkflowPhase.Start,\n descriptor: SignUpDescriptors.SignUp\n };\n })()}\n analyticsData={props.analyticsData}\n />\n </section>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"imageStyle\":\"bYRn8\",\"item\":\"CjuxU\",\"dashboard\":\"IuRN0\",\"playPage\":\"VdJvp\",\"aspectRatio\":\"QK8Jh\",\"outerContainer\":\"eiC_H\",\"innerContainer\":\"huIRg\",\"actions\":\"FsIJm\",\"titleBelow\":\"DpeSr\",\"thumbnailContainer\":\"ZbalL\",\"titleAbove\":\"PwOSX\",\"teacherPack\":\"ZHAEj\",\"text\":\"k3ei6\",\"hoverState\":\"BLrWL\",\"atomGuide\":\"Qz8JE\",\"studentActivity\":\"qNspk\",\"additionalMaterials\":\"R0huw\",\"userUploaded\":\"H_zGf\",\"imageTypeResource\":\"AgeLb\",\"download\":\"DKneu\"};","import React from 'react';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, EntityType, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { ResourceThumbnail } from 'libs/shared/components/resource-thumbnail/ResourceThumbnail';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { TitleSubText } from 'libs/shared/components/title-sub-text/TitleSubText';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { TypeBadge } from 'libs/shared/components/type-badge/TypeBadge';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { SeoConstants } from 'libs/shared/constants/SeoConstants';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ResourceFileType } from 'libs/shared/enums/ResourceFileType';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Link, Resource, ResourceType } from 'libs/shared/interfaces';\nimport { ImageOptions } from 'libs/shared/utils/ImageHelper';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\nimport { ResourceHelper } from 'libs/shared/utils/ResourceHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './resource-widget-item.scss';\n\nfunction getColour(resourceType?: ResourceType): string {\n switch (resourceType) {\n case 'atom-guide':\n return styles.atomGuide;\n case 'student-activity':\n return styles.studentActivity;\n case 'teacher-pack':\n return styles.teacherPack;\n case 'additional-materials':\n return styles.additionalMaterials;\n default:\n return styles.userUploaded;\n }\n}\n\nexport function useCanPreviewResource(data: Resource | Link, actionBehaviour: 'normal' | 'public'): boolean {\n const breakpoints = useBreakpoints();\n\n /**\n * When viewing publicly, the resource applink will\n * prompt the user to sign-up (not preview the underlying resource)\n */\n if (actionBehaviour === 'public')\n return true;\n\n if (breakpoints.xs || breakpoints.sm)\n return false;\n\n if (data.type !== 'resource')\n return false;\n \n // Require metadata\n if (!('metadata' in data))\n return false;\n\n // We can preview images\n if (data.metadata.type === ResourceFileType.Image)\n return true;\n\n // If we are a pdf and have a url\n if (data.metadata.type === ResourceFileType.Pdf)\n return !!data.url;\n\n // If we have a pdf assoc\n return !!data.pdf?.url;\n}\n\ninterface ResourceTheme {\n containerClass?: string;\n thumbnailContainerClass?: string;\n}\n\nexport interface ResourceTileProps {\n data: Resource | Link;\n imageCdnUrl: string;\n imageErrorFallbackUrl?: string;\n theme?: ResourceTheme;\n\n titlePosition: 'above' | 'below' | 'none';\n hideTypeBadge?: boolean;\n onClickDownload?: (resource: Resource) => void;\n applyHoverState?: boolean;\n preloadImage: boolean;\n actionBehaviour?: 'normal' | 'public';\n dynamicRatioImageOptions?: ImageOptions;\n}\n\nResourceTileV2.defaultProps = {\n preloadImage: true,\n actionBehaviour: 'normal'\n};\n\n/**\n * This component intentionally doesn't contain an appLink/download link\n * so that the resource download behaviour can be handled differently depending\n * on where this is rendered (e.g. primary play page vs embedded player)\n */\nexport function ResourceTileV2(props: ResourceTileProps): JSX.Element {\n let metadata = null;\n\n if ('metadata' in props.data) {\n metadata = props.data.metadata;\n }\n\n const isResource = MasterTypeHelper.isType<Resource>(props.data, MasterType.Resource);\n\n function getInnerContainerClass(resourceType: ResourceType): string {\n let baseClass = `\n d-flex flex-column align-items-center justify-content-end rounded-3 h-100\n position-relative ${getColour(resourceType)} ${styles.innerContainer}`;\n\n if (props.theme?.containerClass) {\n baseClass += ` ${props.theme.containerClass}`;\n } else {\n baseClass += ` pt-3 px-3`;\n }\n\n if (props.applyHoverState) {\n baseClass += ` ${styles.hoverState}`;\n }\n\n return baseClass;\n }\n\n function onDownload() {\n if (!MasterTypeHelper.isResource(props.data))\n return;\n\n if (typeof props.onClickDownload === 'function') {\n props.onClickDownload(props.data);\n }\n }\n\n return (\n <>\n <div className={styles.aspectRatio}>\n <div className={styles.outerContainer}>\n <div className={getInnerContainerClass(metadata?.resourceType)}>\n {props.titlePosition === 'above' && (\n <Tooltip title={props.data.name}>\n <h3 className={`text-center text-break h5 mb-3 ${styles.text}`}>\n <span className='clamp-1'>{props.data.name}</span>\n </h3>\n </Tooltip>\n )}\n\n <div className={`\n ${props.theme?.thumbnailContainerClass ?? ''} w-75 overflow-hidden \n ${styles.thumbnailContainer} ${props.titlePosition === 'above' ? styles.titleAbove : ''} \n ${styles.imageStyle}\n `}>\n <ResourceThumbnail\n resource={props.data}\n imageCdnUrl={props.imageCdnUrl}\n imageErrorFallbackUrl={props.imageErrorFallbackUrl}\n preloadImage={props.preloadImage}\n dynamicRatioImageOptions={props.dynamicRatioImageOptions}\n />\n </div>\n\n {isResource && props.onClickDownload && props.actionBehaviour === 'normal' && (\n <div className={styles.actions}>\n <DivButton\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n onDownload();\n }}\n className={`${styles.download} d-flex align-items-center justify-content-center`}\n >\n <SvgContainer svgName={cvSvgLibrary.Download} />\n </DivButton>\n </div>\n )}\n\n {!props.hideTypeBadge && isResource && (\n <TypeBadge typeId={MasterType.Resource} />\n )}\n </div>\n </div>\n </div>\n {props.titlePosition === 'below' && (\n <div className={`mt-1 ${styles.titleBelow}`}>\n {(\n MasterTypeHelper.isType<Resource>(props.data, MasterType.Resource) &&\n !!props.data?.metadata?.resourceType\n ) && (\n <TitleSubText>\n {ResourceHelper.getResourceTypeName(props.data.metadata.resourceType)}\n </TitleSubText>\n )}\n\n <h3 className='h6 clamp-2'>\n {props.data.name}\n </h3>\n </div>\n )}\n </>\n );\n}\n\nexport interface ResourceWidgetItemV2Props extends ResourceTileProps, FixedWidgetItemProps<Resource | Link> {\n location: 'play-page' | 'dashboard';\n}\n\nexport const ResourceWidgetItemV2 = React.memo(function(props: ResourceWidgetItemV2Props): JSX.Element {\n // Mobile is not allowed to preview\n const canPreview = useCanPreviewResource(props.data, props.actionBehaviour);\n\n function getLocationClass(): string {\n if (props.location === 'play-page')\n return styles.playPage;\n\n return styles.dashboard;\n }\n\n const analyticsData = { ...props.analyticsData, ...props.data };\n\n const analyticsOptions: AnalyticsOptions = {\n ...props.analyticsOptions,\n actionType: UserAction.Click,\n entity: props.data.typeId === MasterType.Resource ? EntityType.Resource : EntityType.Link\n };\n\n function logAction(): void {\n AnalyticsHelper.logUserAction(analyticsData, analyticsOptions);\n }\n\n const tileProps: ResourceTileProps = {\n ...props,\n // Apply the hover state if we have a url or the resource can be previewed\n applyHoverState: canPreview || !!props.data.url\n };\n\n return (\n <div className={`px-1 flex-shrink-0 ${styles.item} ${getLocationClass()} ${SeoConstants.RESOURCE_ITEM_SELECTOR}`}>\n {(() => {\n const className = `d-block no-decoration`;\n\n // Handle resource links\n if (props.data.type === 'link') {\n return (\n <a href={props.data.url} target='_blank' className={className} onClick={logAction}>\n <ResourceTileV2 {...tileProps} />\n </a>\n );\n }\n\n if (canPreview) {\n /**\n * Previewing resources in a public context will always display the sign-up popup, so there \n * will never be a full URL. For SEO purposes, we deliberately use a span over an anchor\n * to ensure we're not creating self-referencing elements that will burn crawl budget.\n */\n if (props.actionBehaviour === 'public') {\n return (\n <div className={`${className} cursor-pointer d-inline`} onClick={() => {\n logAction();\n AppLinkHelper.trigger(props.getAppLink(props.data));\n }}>\n <ResourceTileV2 {...tileProps} />\n </div>\n );\n }\n\n return (\n <AppLink\n appLink={props.getAppLink(props.data)}\n className={className}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <ResourceTileV2 {...tileProps} />\n </AppLink>\n );\n }\n\n // URLs cannot be previewed\n if (props.data.url) {\n return (\n <a href={props.data.url} className={className} onClick={logAction}>\n <ResourceTileV2 {...tileProps} />\n </a>\n );\n }\n\n // Theres no url, so don't render an <a>\n return (\n <div className={className}>\n <ResourceTileV2 {...tileProps} />\n </div>\n );\n })()}\n </div>\n );\n});","// extracted by mini-css-extract-plugin\nexport default {\"itemsWrapper\":\"m6mGm\",\"anchorWrapper\":\"QptZj\",\"default\":\"_AZa8\",\"selectedItem\":\"Nuiel\",\"disabled\":\"WIzWJ\",\"floatIcon\":\"ARudn\",\"arrowIcon\":\"tEF5Q\",\"listIcon\":\"Ql2wi\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { ScrollHelper } from 'libs/common/backbone/utils/ScrollHelper';\n\nimport { EntityType, HashObject, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\n\nimport styles from './table-of-contents-list.scss';\n\nexport interface TableOfContentsItem<T=string> {\n name: string;\n id: T;\n}\n\ninterface TableOfContentsProps<T> {\n items: TableOfContentsItem<T>[];\n activeId: string;\n appLink?: Core.AppLink;\n analyticsData?: HashObject;\n setControlledId: (arg: string) => void;\n // set to true if the TOC is controlled by a local state rather than query params\n localState?: boolean;\n getAppLink?: (args: TableOfContentsItem<T>) => Core.AppLink;\n onItemClick?: (args: TableOfContentsItem<T>) => void;\n}\n\nexport function TableOfContentsList<T extends string>(props: TableOfContentsProps<T>): JSX.Element {\n const analyticsOptions = {\n actionType: UserAction.Click,\n entity: EntityType.Widget,\n location: LocationContext.TableOfContents\n };\n\n return (\n <div className={`${styles.itemsWrapper}`}>\n {props.items.map((item, idx) => {\n if (props.localState) {\n return (\n <DivButton\n key={item.id}\n className={`${styles.anchorWrapper} ${props.activeId === item.id ? styles.selectedItem : ''}`}\n onClick={() => {\n ScrollHelper.preventScrollTop();\n props.setControlledId(item.id);\n\n props.onItemClick?.(item);\n }}\n >\n <div className={`${!props.activeId && idx === 0 ? styles.default : ''} `}>\n {item.name}\n </div>\n </DivButton>\n );\n }\n\n return (\n <AppLink\n key={item.id}\n appLink={props.getAppLink(item)}\n appLinkOptions={{ replace: true }}\n className={`${styles.anchorWrapper} ${props.activeId === item.id ? styles.selectedItem : ''}`}\n onClick={() => {\n ScrollHelper.preventScrollTop();\n props.setControlledId(item.id);\n\n props.onItemClick?.(item);\n }}\n analyticsData={{\n ...props.analyticsData,\n id: item.id,\n name: item.name\n }}\n analyticsOptions={analyticsOptions}\n >\n <div className={`${!props.activeId && idx === 0 ? styles.default : ''} `}>\n {item.name}\n </div>\n </AppLink>\n );\n })}\n </div>\n );\n}","import React from 'react';\n\ntype TableOfContentsActiveOption = {\n setActiveId: (id: string) => void;\n headingElements: Element[];\n controlledId?: string;\n setControlledId?: (arg: string) => void;\n}\n\nlet timer: number;\n\nexport const useTableOfContentsActiveHeading = (\n { setActiveId, headingElements, controlledId, setControlledId }: TableOfContentsActiveOption\n) => {\n const scrollPositionRef = React.useRef(0);\n\n React.useEffect(() => {\n const callback = (headings: IntersectionObserverEntry[]) => {\n headings.forEach(heading => {\n if (controlledId) {\n setActiveId(controlledId);\n // can use scrollEnd event when the new event type is supported\n timer = window.setTimeout(() => {\n setControlledId('');\n }, 800);\n return;\n }\n if (heading.isIntersecting) {\n setActiveId(heading.target.id);\n scrollPositionRef.current = window.scrollY;\n } else {\n const scrollDistance = scrollPositionRef.current - window.scrollY;\n const isScrollingUp = scrollDistance > 0;\n const curIndex = headingElements.findIndex(h => h.id === heading.target.id);\n const prevHeading = headingElements[curIndex - 1];\n if (isScrollingUp && prevHeading?.id) {\n setActiveId(prevHeading?.id);\n }\n }\n });\n };\n\n const observer = new IntersectionObserver(callback, {\n // rootMargin top: same as the cv-nav-height\n rootMargin: '-67px 0px -80% 0px'\n });\n\n headingElements.forEach(element => observer.observe(element));\n\n return () => {\n timer && window.clearTimeout(timer);\n observer.disconnect();\n };\n }, [ setActiveId, headingElements.length, controlledId ]);\n};\n\n","import { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, EntityType, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { Resource } from '../interfaces';\n\nlet downloadRef: HTMLIFrameElement = null;\n\nexport const DownloadHelper = {\n getVideoDownloadUrl(downloadProxyUrl: string, token: string): string {\n return UrlHelper.safeUrlConcat(UrlHelper.makeHttps(downloadProxyUrl), `/download?token=${token}`);\n },\n\n downloadResource(\n resource: Resource,\n analyticsData: HashObject,\n analyticsOptions: AnalyticsOptions\n ): void {\n let iframe = downloadRef;\n\n if (!downloadRef) {\n iframe = downloadRef = document.createElement('iframe');\n document.body.appendChild(iframe);\n\n iframe.style.display = 'none';\n }\n\n iframe.src = resource.url;\n\n AnalyticsHelper.logUserAction({\n id: resource?.id,\n name: resource?.name,\n resourceType: resource?.metadata?.resourceType,\n ...analyticsData\n }, {\n actionType: UserAction.Download,\n entity: EntityType.Resource,\n workflowPhase: WorkflowPhase.Complete,\n ...analyticsOptions\n });\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"qA4yj\",\"showInSide\":\"kd9hB\",\"aside\":\"j28IY\",\"collapse\":\"sFoPk\",\"iconContainer\":\"PYyBV\",\"arrowIcon\":\"MTodB\",\"listIcon\":\"W76p8\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { PortalHelper } from 'libs/common/react/utils/PortalHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, HashObject, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { TableOfContentsList } from 'libs/shared/components/table-of-contents-list/TableOfContentsList';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { ContextService } from 'libs/shared/services/ContextService';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { PLAY_PAGE_TOC_PORTAL_ID } from 'shared/layouts/teacher-layout/TeacherLayoutComponent';\n\nimport styles from './table-of-contents.scss';\n\nconst namespace = 'shared.playPage';\n\nexport interface TableOfContentsItem {\n name: string;\n id: PlayPageAnchor;\n}\n\ninterface TableOfContentsProps {\n items: TableOfContentsItem[];\n activeId: string;\n appLink?: Core.AppLink;\n analyticsData?: HashObject;\n setControlledId: (arg: string) => void;\n isExpanded: boolean;\n setIsExpanded: (arg: boolean) => void;\n showInSide: boolean;\n}\n\nfunction TableOfContentsIcon(props: TableOfContentsProps) {\n function logUserAction() {\n const analyticsOptions = {\n actionType: !props.isExpanded ? UserAction.Open : UserAction.Hide,\n entity: EntityType.TableOfContents,\n location: LocationContext.PlayPage\n };\n\n AnalyticsHelper.logUserAction(props.analyticsData, analyticsOptions);\n }\n\n function onClickIcon() {\n props.setIsExpanded(!props.isExpanded);\n logUserAction();\n }\n\n return (\n <div className='d-flex justify-content-end'>\n <div className={styles.container}>\n <div className={`${styles.iconContainer}`} >\n <IconButton\n className={`btn btn-outline-dark ${styles.listIcon}`}\n svgName={cvSvgLibrary.TableOfContents}\n onClick={onClickIcon}\n />\n \n <IconButton\n className={`btn btn-outline-dark ${styles.arrowIcon}`}\n svgName={!props.isExpanded ? cvSvgLibrary.ExpandLeft : cvSvgLibrary.CollapseRight}\n onClick={onClickIcon}\n />\n </div>\n </div>\n </div>\n );\n}\n\nfunction TableOfContents(props: TableOfContentsProps) {\n function logUserAction() {\n const analyticsOptions = {\n actionType: UserAction.Hide,\n entity: EntityType.TableOfContents,\n location: LocationContext.PlayPage\n };\n\n AnalyticsHelper.logUserAction(props.analyticsData, analyticsOptions);\n }\n\n function getAppLink(item: any): Core.AppLink {\n const currentAppLink = ContextService.getCurrentRoute().appLink;\n\n const params: HashObject = currentAppLink.params\n ? { ...(currentAppLink.params as HashObject) }\n : {};\n\n params.tocId = item.id;\n\n return {\n ...currentAppLink,\n params\n };\n }\n\n function onClickTableOfContentsHeading() {\n if (!props.showInSide) {\n // in mobile version, collapse once user hit the TOC item\n props.setIsExpanded(false);\n }\n }\n\n return (\n <div className={!props.showInSide ? 'd-inline-flex gap-1' : `col col-2`}>\n <aside className={`${styles.aside} position-relative ${!props.showInSide ? 'px-3 pt-3 pb-2 border border-dark rounded-1 bg-white' : 'pe-1 pt-1 '}`}>\n <div className={`${styles.container} ${!props.showInSide ? '' : styles.showInSide}`}>\n {props.showInSide && (\n <IconButton\n className={`btn position-absolute ${styles.collapse}`}\n svgName={cvSvgLibrary.CollapseRight}\n onClick={() => {\n props.setIsExpanded(false);\n logUserAction();\n }}\n />\n )}\n <h2 className='h5'><Text namespace={namespace} phrase='tocHeading' /></h2>\n \n <TableOfContentsList\n items={props.items}\n activeId={props.activeId}\n getAppLink={getAppLink}\n setControlledId={props.setControlledId}\n analyticsData={props.analyticsData}\n onItemClick={() => onClickTableOfContentsHeading()}\n />\n </div>\n \n </aside>\n {/* in mobile version, always show icon on the right */}\n {!props.showInSide && <TableOfContentsIcon {...props}/>}\n </div>\n );\n}\n\nexport function TableOfContentsContainer(props: TableOfContentsProps): JSX.Element {\n return (\n <>\n {/* web version show table of contents next to player */}\n {props.isExpanded && props.showInSide && <TableOfContents {...props}/>}\n \n {/* web version show icon in portal (RHS of window) */}\n {PortalHelper.renderInPortalIfExists(\n !props.isExpanded && <TableOfContentsIcon {...props}/>,\n document.getElementById(PLAY_PAGE_TOC_PORTAL_ID)\n )}\n\n {/* mobile version show in portal */}\n {PortalHelper.renderInPortalIfExists(\n !props.showInSide && props.isExpanded && <TableOfContents {...props}/>,\n document.getElementById(PLAY_PAGE_TOC_PORTAL_ID)\n )}\n </>\n );\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Clip, InteractiveMetadata, Resource } from 'libs/shared/interfaces';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\n\ninterface SectionHeadingOptions{\n clips: Clip[];\n interactives: InteractiveMetadata[];\n resources: Resource[];\n isPlayClipPage?: boolean;\n}\n\nconst namespace = 'shared.play';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport const PlayPageUtils = {\n getSectionHeading(id: PlayPageAnchor, options: SectionHeadingOptions) {\n switch (id) {\n case PlayPageAnchor.Resources:\n return getPhrase('resourcesHeading', { count: options.resources.length });\n\n case PlayPageAnchor.Clips:\n if (options.isPlayClipPage)\n return getPhrase('otherClipsHeading', { count: options.clips.length - 1 });\n return getPhrase('clipsHeading', { count: options.clips.length });\n\n case PlayPageAnchor.Interactives:\n return getPhrase('interactivesHeading', { count: options.interactives.length });\n\n case PlayPageAnchor.Video:\n return getPhrase('videoHeading');\n\n case PlayPageAnchor.VideoDetails:\n return getPhrase('videoDetailsHeading');\n\n case PlayPageAnchor.RelatedVideos:\n return getPhrase('upNextHeading');\n \n case PlayPageAnchor.CurriculumLinks:\n return getPhrase('curriculumLinksHeading');\n \n case PlayPageAnchor.ClippedFrom:\n return getPhrase('clippedFromHeading');\n\n default:\n return '';\n }\n }\n\n};","import React from 'react';\n\nimport { LocalStorageHelper } from 'libs/common/backbone/utils/LocalStorageHelper';\n\nimport { useShouldShowSideTableOfContents } from 'shared/views/play/v2/hooks/useShouldShowTableOfContents';\n\nconst PLAY_PAGE_TOC_EXPANDED = 'play-page-toc-expanded';\n\nexport function usePlayPageTableOfContent(tocId: string) {\n const showInSide = useShouldShowSideTableOfContents();\n\n const localValue = LocalStorageHelper.get(PLAY_PAGE_TOC_EXPANDED) !== false;\n const tocDefaultExpanded = !showInSide ? false : localValue;\n\n const [ controlledId, setControlledId ] = React.useState(tocId || '');\n const [ tableOfContentsActiveId, setTableOfContentsActiveId ] = React.useState<string>('');\n const [ tableOfContentsExpanded, setTableOfContentsExpanded ] = React.useState(tocDefaultExpanded);\n \n React.useEffect(() => {\n if (!showInSide) {\n // automatically collpase on mobile version\n setTableOfContentsExpanded(false);\n } else {\n setTableOfContentsExpanded(localValue);\n }\n }, [showInSide]);\n\n function onToggleTableOfContents() {\n setTableOfContentsExpanded(!tableOfContentsExpanded);\n LocalStorageHelper.set(PLAY_PAGE_TOC_EXPANDED, !tableOfContentsExpanded);\n }\n\n return {\n controlledId,\n setControlledId,\n tableOfContentsExpanded,\n tableOfContentsActiveId,\n setTableOfContentsActiveId,\n onToggleTableOfContents\n };\n}","import { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\n\nexport const PLAY_PAGE_SECTIONS_ORDER = [\n PlayPageAnchor.Video,\n PlayPageAnchor.CurriculumLinks,\n PlayPageAnchor.Resources,\n PlayPageAnchor.Interactives,\n PlayPageAnchor.Clips,\n PlayPageAnchor.VideoDetails,\n PlayPageAnchor.ClippedFrom,\n PlayPageAnchor.RelatedVideos\n];\n\nexport const PLAY_PAGE_SECTIONS_ORDER_NO_GLANCE = [\n PlayPageAnchor.Video,\n PlayPageAnchor.VideoDetails,\n PlayPageAnchor.CurriculumLinks,\n PlayPageAnchor.Resources,\n PlayPageAnchor.Interactives,\n PlayPageAnchor.Clips,\n PlayPageAnchor.ClippedFrom,\n PlayPageAnchor.RelatedVideos\n];","import React from 'react';\n\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\n\nimport { PLAY_PAGE_SECTIONS_ORDER, PLAY_PAGE_SECTIONS_ORDER_NO_GLANCE } from 'shared/constants/PlayPageSectionsOrder';\n\nexport function useSectionHeadings(hasGlance: boolean) {\n const headingRef = React.useRef<Map<PlayPageAnchor, HTMLElement>>(new Map());\n const headingElements = (hasGlance ? PLAY_PAGE_SECTIONS_ORDER : PLAY_PAGE_SECTIONS_ORDER_NO_GLANCE).map(id => {\n return headingRef.current.get(id);\n }).filter(Boolean);\n\n return { headingRef, headingElements };\n}","import { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\n// returns boolean value for if we should show the TOC on the side\nexport function useShouldShowSideTableOfContents(): boolean {\n const breakpoints = useBreakpoints();\n const shouldShowSideTableOfContents = breakpoints.lg || breakpoints.xl || breakpoints.xxl;\n return shouldShowSideTableOfContents;\n}","// extracted by mini-css-extract-plugin\nexport default {\"learningIntention\":\"MHM6O\",\"highlightPoi\":\"U7Q6x\",\"icon\":\"H1xbT\"};"],"names":["PortalHelper","renderInPortalIfExists","component","portalContainer","createPortal","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","showOwner","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","VideoDescription","containerRef","expanded","setExpanded","memoClientHeight","scrollHeight","showButton","setShowButton","DivButton","onClick","dangerouslySetInnerHTML","__html","LinkifyHelper","description","nl2br","getPhrase","CommaList","label","items","commaSeperated","map","i","join","DetailsSection","parentVideo","productionYear","options","year","smartCount","productionCompanies","distributors","producers","directors","dateBroadcast","date","DateHelper","channel","_isClickViewCurated","value","dateCreated","VideoDetailsWithScrollbarV2","maxHeight","showDescription","showDetails","tags","hideTags","filter","tag","tagType","TagType","getTags","showHeading","autoHeight","autoHeightMax","ImmersiveReader","text","onLaunch","onLaunchImmersiveReader","onExit","onExitImmersiveReader","location","entity","actionType","descriptor","TagList","TagHelper","getTagAppLink","suppressInteractivity","POI_LINK_LINE","useLearningIntentionMarkdown","hasGlanceData","useState","markdownHTML","setMarkdownHTML","useEffect","content","glance","learningIntention","replace","format","useHighlightPointOfInterest","pointOfInterest","shouldHighlight","useRef","onGlancePoiMouseOver","onGlancePoiMouseLeave","hoveredPoi","toString","classList","add","remove","addEventListener","removeEventListener","PointOfInterest","timeStamp","DurationHelper","poi","startTime","key","onClickPoiItem","PointOfInterestList","pointsOfInterest","SCROLL_HEIGHT_MAX","ScrollbarWrapper","hideScrollbar","children","VideoAtAGlanceV2","learningIntentionMarkdownHTML","canViewGlance","textToCopy","setTextToCopy","innerText","Tooltip","spanHack","spanHackClassName","SvgContainer","svgName","S","videoId","videoName","AnalyticsHelper","onClickTag","time","setStartTime","InteractiveWidgetItemV2","interactive","questionsAppLink","questionsNumber","_timepoints","PlayPageInteractives","canViewInteractives","interactives","PlayPageResources","hasPermissions","resources","isLearner","links","filteredResources","r","includes","metadata","resourceType","getResources","imageErrorFallbackUrl","resourceThumbnailFallbackUrl","actionBehaviour","canViewResources","titlePosition","onClickDownload","resource","workflowPhase","SignUp","useCanPreviewResource","breakpoints","useBreakpoints","xs","sm","ResourceFileType","url","pdf","ResourceTileV2","isResource","MasterTypeHelper","MasterType","baseClass","getColour","theme","containerClass","applyHoverState","getInnerContainerClass","thumbnailContainerClass","ResourceThumbnail","dynamicRatioImageOptions","e","preventDefault","stopPropagation","hideTypeBadge","TypeBadge","typeId","TitleSubText","ResourceHelper","defaultProps","ResourceWidgetItemV2","canPreview","logAction","tileProps","SeoConstants","href","AppLink","TableOfContentsList","item","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":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[1169],{1353:(e,t,n)=>{n.d(t,{$:()=>o});var a=n(32735),r=n(11607),i=n(54610),c=n(67453),l=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(l.Z.tag," ").concat(e.selected?l.Z.selected:""),onClick:function(){return e.onChangeCurriculum(t.id.toString())}},a.createElement("div",{className:"bg-white ".concat(l.Z.cover," rounded-circle border")},a.createElement("img",{src:c.j.createUrl(t.cover.url,{size:i.h2.Small}),alt:t.name,className:"rounded-circle"})),a.createElement("div",{className:"ms-2"},t.name))}},38496:(e,t,n)=>{n.d(t,{p:()=>u});var a=n(32735),r=n(23481),i=n(23232),c=n(83345),l="shared.curriculumLinks",o=r.T.encloseNamespace(l);function u(e){return a.createElement(i.u,{className:"pt-3"},a.createElement(i.u.Image,{src:e.emptyStateUrl,altText:o("emptyInfo"),size:"small"}),a.createElement(i.u.Heading,null,a.createElement(c.x,{namespace:l,phrase:"emptyHeading"})),a.createElement(i.u.Info,null,a.createElement(c.x,{namespace:l,phrase:"emptyInfo"})))}},44599:(e,t,n)=>{n.d(t,{Z:()=>i});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 i(){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)))}},34223:(e,t,n)=>{n.d(t,{Y:()=>y});var a=n(32735),r=n(38496),i=n(44599),c=n(83345),l=n(85597);const o={curriculumSubject:"i4D3h",curriculumSet:"WCdf9",areaLeafSet:"o8H8s",closeButton:"McsPs",leafDescriptionOnly:"xmEEo"};function u(e){return u="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},u(e)}function s(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=u(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,"string");if("object"!=u(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==u(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function d(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 m=/(.*)\s\((.*)?\)/i,v="shared.curriculumLinks",p="text-nowrap font-size-normal rounded-pill py-1 px-2 my-0 d-inline-block fw-semibold";function f(e){function t(){var t=p+" 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:v,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 g(e){var t,n,r,i={},c=!1;function u(e){var t="mb-2";return e.name||c?t:t+" ms-4 "+o.leafDescriptionOnly}return e.linkSet.areasAndLeaves.forEach((function(e){var t=e[l.k.Area].map((function(e){return e.name})).join(" - ");i[t]?e[l.k.Leaf].forEach((function(e){i[t].find((function(t){return t.name===e.name}))||(i[t].push(e),e.name&&(c=!0))})):i[t]=e[l.k.Leaf]})),a.createElement(a.Fragment,null,a.createElement("h3",{className:"".concat(p," 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(m))?"".concat(r[1]," • ").concat(r[2]," • ").concat(n):"".concat(t," • ").concat(n))),a.createElement("div",{className:"me-2 ".concat(o.curriculumSubject)},Object.keys(i).map((function(t,n){return a.createElement("div",{key:n,className:o.areaLeafSet},t&&a.createElement("h4",{className:"mb-1 font-size-normal"},t),a.createElement("ul",{className:"list-unstyled"},i[t].map((function(t){return a.createElement("li",{key:t.id,className:u(t)},a.createElement(f,{leaf:t,codeWidth:e.codeWidth,trySetMaxCodeWidth:e.trySetMaxCodeWidth,uiContainsCodes:c}))}))))}))))}function y(e){var t,n,c,u=(n=a.useState(0),c=2,function(e){if(Array.isArray(e))return e}(n)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,i,c,l=[],o=!0,u=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;o=!1}else for(;!(o=(a=i.call(n)).done)&&(l.push(a.value),l.length!==t);o=!0);}catch(e){u=!0,r=e}finally{try{if(!o&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(u)throw r}}return l}}(n,c)||function(e,t){if(e){if("string"==typeof e)return d(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)?d(e,t):void 0}}(n,c)||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.")}()),m=u[0],v=u[1];function p(e){v((function(t){return t>=e?t:e}))}var f=a.useMemo((function(){var t={};return e.curriculumLinks.forEach((function(e){var n=null,a=null,r=[],i=[];e.forEach((function(e){switch(e.type){case l.k.Subject:n=e;break;case l.k.Audience:a=e;break;case l.k.Area:r.push(e);break;case l.k.Leaf:i.push(e)}}));var c="".concat(n.id,":").concat(a.id);t[c]?t[c].areasAndLeaves.push(s(s({},l.k.Area,r),l.k.Leaf,i)):t[c]=s(s(s({},l.k.Subject,n),l.k.Audience,a),"areasAndLeaves",[s(s({},l.k.Area,r),l.k.Leaf,i)])})),t}),[e.curriculumLinks]);return e.curriculumLinks?(null===(t=e.curriculumLinks)||void 0===t?void 0:t.length)?a.createElement("ul",{className:"list-unstyled m-0"},Object.keys(f).map((function(e,t){return a.createElement("li",{key:"linkset-".concat(t),className:o.curriculumSet},a.createElement(g,{linkSet:f[e],trySetMaxCodeWidth:p,codeWidth:m}))}))):a.createElement(r.p,{emptyStateUrl:e.emptyStateUrl}):a.createElement(i.Z,null)}},22283:(e,t,n)=>{n.d(t,{P:()=>l});var a=n(32735),r=n(1353),i=n(63112),c=n(65163);function l(e){var t,n,l;return a.createElement(c.eb,{collection:(null===(t=e.selectedCurriculum)||void 0===t?void 0:t.id)?e.curriculums.nonEmptyCurriculums:null,childClassName:"flex-shrink-0",childComponent:function(t){var n,i;return a.createElement(r.$,Object.assign({},t,{selected:(null===(i=null===(n=e.selectedCurriculum)||void 0===n?void 0:n.id)||void 0===i?void 0:i.toString())===t.data.id.toString(),onChangeCurriculum:e.onChangeCurriculum}))},partialLoadingComponent:function(){return a.createElement(i.o,null)},widgetDataDeps:[null===(l=null===(n=e.selectedCurriculum)||void 0===n?void 0:n.id)||void 0===l?void 0:l.toString(),e.onChangeCurriculum],noNegativePadding:e.noNegativePadding})}},63112:(e,t,n)=>{n.d(t,{o:()=>i});var a=n(32735),r=n(91807),i=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}," "))}))},65163:(e,t,n)=>{n.d(t,{QL:()=>a.Q,eb:()=>a.e});var a=n(16450);n(14244)},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={}))},61169:(e,t,n)=>{n.d(t,{R:()=>q});var a=n(32735),r=n(5640),i=n(42648),c=n(23481),l=n(75896),o=n(49985),u=n(65858),s=n(44599),d=n(83345),m=n(69883),v=n(59598),p=n(34223),f=n(22283);function g(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 y="shared.curriculumLinks",h=c.T.encloseNamespace(y);function E(e){var t,n,r=e.curriculums,c=r.hasLoaded,E=r.activeCurriculum,b=r.availableCurriculums,S=r.curriculumLinks,k=r.updateCurriculum,C=r.customerHasCurriculumLinks,I=(t=a.useState(),n=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,i,c,l=[],o=!0,u=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;o=!1}else for(;!(o=(a=i.call(n)).done)&&(l.push(a.value),l.length!==t);o=!0);}catch(e){u=!0,r=e}finally{try{if(!o&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(u)throw r}}return l}}(t,n)||function(e,t){if(e){if("string"==typeof e)return g(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)?g(e,t):void 0}}(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),A=I[0],L=I[1],N=(0,m.Z)();return a.useEffect((function(){c&&(A||L(null!=E?E:l.m.first(b)))}),[null==E?void 0:E.id,c]),e.canViewCurriculumLinks&&C?a.createElement("section",{id:v.K.CurriculumLinks,ref:function(t){var n;t&&(null===(n=e.headingRef)||void 0===n?void 0:n.current)&&e.headingRef.current.set(v.K.CurriculumLinks,t)},className:"play-page-section"},a.createElement("h2",{className:"h4 me-2 h-100"},a.createElement(d.x,{namespace:y,phrase:"heading"})),a.createElement("div",{className:"mb-2"},a.createElement(f.P,{curriculums:e.curriculums,selectedCurriculum:A,onChangeCurriculum:function(t){var n,a,r=b.find((function(e){return e.id.toString()===t}));(null==r?void 0:r.id)&&(null===(n=null==A?void 0:A.id)||void 0===n?void 0:n.toString())!==(null===(a=null==r?void 0:r.id)||void 0===a?void 0:a.toString())&&(L(r),k(r,(function(){o.k.logUserAction({id:r.id,name:r.id,description:r.description,videoId:e.video.id,videoName:e.video.name},{entity:u.py.Presentation,actionType:u.Vw.Select,descriptor:u.kD.Curriculum,location:u.LZ.PlayPage})}),(function(){L(A),N.error(h("updateFailed"))})))}})),a.createElement("div",{className:"rounded border position-relative"},a.createElement(i.$B,{autoHeight:!0,autoHeightMax:e.height},a.createElement("div",{className:"p-3"},c?a.createElement(p.Y,{curriculumLinks:S,emptyStateUrl:e.emptyStateUrl}):a.createElement(s.Z,null))))):a.createElement(a.Fragment,null)}var b=n(8887),S=n(51184),k=n(64921),C=n(95812),I=n(53709),A=n(40178),L=n(71063),N=n(10439),x=n(35429),w=n(4594),T=n(16714),R=n(22902),j=n(65332),O=n(76196),P=n(31908),U=n(26492),V=n(9465),M=n(91479),F=n(99092),G=n(47938),W=n(81024),_=n(78166),D=n(99742),H=n(14070),Z=n(97291),B=n(22490),K=n(63010),Y=n(14476),$=n(53256);const z={main:"xSI0l",expandedToc:"j5FCv"};var Q="shared.play";function q(e){var t,n,i,c,l,o,u,s,m=(0,x.g)(),p=(0,R.T)().hasPermissions,f=P.M.getCanBeConsumed(e.video).canConsume,g=(0,K.Q)(e.tableOfContentsId),y=g.tableOfContentsActiveId,h=g.setTableOfContentsActiveId,q=g.controlledId,X=g.setControlledId,J=g.tableOfContentsExpanded,ee=g.onToggleTableOfContents,te=(0,S.Wp)(e.video)&&e.featureAccess.canViewGlance,ne=(0,Y.i)(te),ae=ne.headingRef,re=ne.headingElements,ie=re.map((function(t){var n;return{id:t.id,name:$.d.getSectionHeading(t.id,{clips:e.clips,interactives:e.interactives,resources:null===(n=e.video.resources)||void 0===n?void 0:n.data})}})),ce=P.M.isVideoTypeArchived(e.video),le=p(T.C.StudentExperience);(0,j.D)({setActiveId:h,headingElements:re,controlledId:q,setControlledId:X}),(0,O.P)(re,q);var oe=a.useRef(!1),ue=(0,F.lU)();function se(){var e,t,n,a;oe.current=!(null===(t=null===(e=null==m?void 0:m.playerRef)||void 0===e?void 0:e.current)||void 0===t?void 0:t.isPaused()),null===(a=null===(n=null==m?void 0:m.playerRef)||void 0===n?void 0:n.current)||void 0===a||a.pause()}function de(){var e,t;oe.current&&(null===(t=null===(e=null==m?void 0:m.playerRef)||void 0===e?void 0:e.current)||void 0===t||t.play())}var me="picture-in-picture"===m.mode||e.featureAccess.canViewPublicLayout;return a.createElement(d.D.Provider,{value:Q},a.createElement("div",{className:"px-4 play-page-sections-container ".concat(e.shouldShowSideTableOfContents?"row":"")},a.createElement("main",{className:"".concat(z.main," ").concat(e.shouldShowSideTableOfContents&&J?"".concat(z.expandedToc," col-9"):e.shouldShowSideTableOfContents&&!J?"pe-4":void 0)},a.createElement(G.W,{restrictions:e.video._restrictions,yearGroups:e.yearGroups,objectId:e.video.id,objectTypeId:w.E.Video,canManageVideoAccess:e.canManageVideoAccess}),ce&&a.createElement(U.T,{typeId:e.video.typeId,hasStudentExperience:le}),a.createElement("section",{id:v.K.Video,className:"mb-2 ".concat(L.M.GLOBAL_PLAYER_SELECTOR),ref:function(e){e&&(null==ae?void 0:ae.current)&&ae.current.set(v.K.Video,e)}},f&&a.createElement(N.r,{key:e.video.id,objectId:e.video.id,objectTypeId:e.video.typeId,shareId:e.shareId,context:null===(t=e.params)||void 0===t?void 0:t.context,contextId:null===(n=e.params)||void 0===n?void 0:n.contextId,playNext:null===(i=e.params)||void 0===i?void 0:i.playNext,moviesAndTv:null===(c=e.params)||void 0===c?void 0:c.mtv,startTime:null!==(o=null===(l=e.params)||void 0===l?void 0:l.t)&&void 0!==o?o:null===(u=e.params)||void 0===u?void 0:u.startTime,endTime:null===(s=e.params)||void 0===s?void 0:s.endTime,mode:"default",location:"play-page"}),a.createElement("div",{className:me?"":"d-none"},a.createElement(W.S,{video:e.video,appLink:{application:Z.O.SIGN_UP,action:H.e.SignUp.SIGN_UP},type:"picture-in-picture"===m.mode?"pip":"public"}))),a.createElement(M.v,{media:e.video,yearGroups:e.yearGroups,audiences:e.audiences,getSeriesAppLink:function(t){return ue.getSeriesAppLink(t,e.params.mtv)},featureAccess:e.featureAccess,shareId:e.shareId}),te?a.createElement(k.j,{video:e.video,pointsOfInterest:e.pointsOfInterest,setStartTime:function(e){var t;return null===(t=m.playerRef.current)||void 0===t?void 0:t.currentTime(e)},getTagAppLink:ue.getTagAppLink,suppressInteractivity:e.featureAccess.canViewPublicLayout,canViewGlance:te}):a.createElement(b.a,{video:e.video,headingRef:ae,onLaunchImmersiveReader:se,onExitImmersiveReader:de,getTagAppLink:ue.getTagAppLink,suppressInteractivity:e.featureAccess.canViewPublicLayout}),a.createElement(E,{headingRef:ae,video:e.video,height:A.x,curriculums:e.curriculums,emptyStateUrl:D.W.EmptyStates.CURRICULUM_LINKS,canViewCurriculumLinks:e.featureAccess.canViewCurriculumLinks}),a.createElement(I.M,{headingRef:ae,video:e.video,canViewResources:e.featureAccess.canViewResourceItems,imageCdnUrl:e.imageCdnUrl,getAppLink:ue.getResourceAppLink(e.video.id,e.shareId,e.featureAccess.canViewResourceItems),analyticsData:{videoId:e.video.id,videoName:e.video.name},resourceThumbnailFallbackUrl:D.W.Fallbacks.RESOURCE_THUMBNAIL}),a.createElement(C.J,{headingRef:ae,video:e.video,interactives:e.interactives,imageCdnUrl:e.imageCdnUrl,analyticsData:{videoId:e.video.id,videoName:e.video.name},canViewInteractives:e.featureAccess.canViewInteractives,yearGroups:e.yearGroups,setFavourite:e.setFavourite,canFavourite:e.canFavourite,isPlugin:e.isPlugin}),a.createElement(r.O,{video:e.video,headingRef:ae,clips:e.clips,canViewClips:e.featureAccess.canViewClips,yearGroups:e.yearGroups,audiences:e.audiences,imageCdnUrl:e.imageCdnUrl,setFavourite:e.setFavourite,canFavourite:e.canFavourite,analyticsData:{videoId:e.video.id,videoName:e.video.name},isPlugin:e.isPlugin}),te&&a.createElement(b.a,{video:e.video,headingRef:ae,onLaunchImmersiveReader:se,onExitImmersiveReader:de,getTagAppLink:ue.getTagAppLink,suppressInteractivity:e.featureAccess.canViewPublicLayout,showHeading:!0}),a.createElement(_.Z,{currentVideo:e.video,headingRef:ae,yearGroups:e.yearGroups,relatedVideos:e.relatedVideos,currentUser:e.currentUser,setFavourite:e.setFavourite,canFavourite:e.canFavourite,getVideoAppLink:function(t,n){return B.W.getAppLink(t,Object.assign(Object.assign({},n),{context:e.params.context,contextId:e.params.contextId,playNext:e.params.playNext,shareId:e.shareId,moviesAndTv:e.params.mtv}))},audiences:e.audiences,moviesAndTv:e.params.mtv,isPlugin:e.isPlugin})),a.createElement(V.h,{isExpanded:J,setIsExpanded:ee,items:ie,activeId:y,setControlledId:X,analyticsData:{videoId:e.video.id,videoName:e.video.name},showInSide:e.shouldShowSideTableOfContents})))}},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"}}}]);
|
|
2
|
+
//# sourceMappingURL=1169-9b1c04fd85-lite.chunk.js.map
|