@clickview/lite 0.82.2 → 0.83.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. package/dist/bundles.json +1 -1
  2. package/dist/languages/en.json +1 -1
  3. package/dist/scripts/1074-fdce06d863-lite.chunk.js +2 -0
  4. package/dist/scripts/1074-fdce06d863-lite.chunk.js.map +1 -0
  5. package/dist/scripts/{1199-da55d69853-lite.chunk.js → 1199-01cc084886-lite.chunk.js} +1 -1
  6. package/dist/scripts/{1199-da55d69853-lite.chunk.js.map → 1199-01cc084886-lite.chunk.js.map} +1 -1
  7. package/dist/scripts/{2664-87c8cbfa7f-lite.chunk.js → 2664-907153c03b-lite.chunk.js} +2 -2
  8. package/dist/scripts/2664-907153c03b-lite.chunk.js.map +1 -0
  9. package/dist/scripts/2970-024b1dd55d-lite.chunk.js +2 -0
  10. package/dist/scripts/2970-024b1dd55d-lite.chunk.js.map +1 -0
  11. package/dist/scripts/{8133-ffcff3b7fc-lite.chunk.js → 3392-f7f8cb65e5-lite.chunk.js} +3 -3
  12. package/dist/scripts/3392-f7f8cb65e5-lite.chunk.js.map +1 -0
  13. package/dist/scripts/3840-59e5e53cda-lite.chunk.js +2 -0
  14. package/dist/scripts/3840-59e5e53cda-lite.chunk.js.map +1 -0
  15. package/dist/scripts/{4177-285ddf9ae3-lite.chunk.js → 4177-2d876c7b14-lite.chunk.js} +2 -2
  16. package/dist/scripts/4177-2d876c7b14-lite.chunk.js.map +1 -0
  17. package/dist/scripts/{1336-1826f6e582-lite.chunk.js → 4208-0706461da6-lite.chunk.js} +2 -2
  18. package/dist/scripts/4208-0706461da6-lite.chunk.js.map +1 -0
  19. package/dist/scripts/{4578-7578bcf17a-lite.chunk.js → 4578-27028d26eb-lite.chunk.js} +2 -2
  20. package/dist/scripts/4578-27028d26eb-lite.chunk.js.map +1 -0
  21. package/dist/scripts/4598-8f5266e4c2-lite.chunk.js +2 -0
  22. package/dist/scripts/4598-8f5266e4c2-lite.chunk.js.map +1 -0
  23. package/dist/scripts/{4621-1f79d94416-lite.chunk.js → 4621-7fb0a05bcb-lite.chunk.js} +2 -2
  24. package/dist/scripts/4621-7fb0a05bcb-lite.chunk.js.map +1 -0
  25. package/dist/scripts/4806-a6f31d703c-lite.chunk.js +2 -0
  26. package/dist/scripts/4806-a6f31d703c-lite.chunk.js.map +1 -0
  27. package/dist/scripts/{4948-de1c75e7fb-lite.chunk.js → 4948-ba684e5f4f-lite.chunk.js} +1 -1
  28. package/dist/scripts/{4948-de1c75e7fb-lite.chunk.js.map → 4948-ba684e5f4f-lite.chunk.js.map} +1 -1
  29. package/dist/scripts/4985-7e02d5df40-lite.chunk.js +2 -0
  30. package/dist/scripts/4985-7e02d5df40-lite.chunk.js.map +1 -0
  31. package/dist/scripts/{5554-17bb3b86fc-lite.chunk.js → 5554-f1f3baf822-lite.chunk.js} +2 -2
  32. package/dist/scripts/5554-f1f3baf822-lite.chunk.js.map +1 -0
  33. package/dist/scripts/5712-7cee70c6b4-lite.chunk.js +2 -0
  34. package/dist/scripts/5712-7cee70c6b4-lite.chunk.js.map +1 -0
  35. package/dist/scripts/6550-d99e0ed75d-lite.chunk.js +2 -0
  36. package/dist/scripts/6550-d99e0ed75d-lite.chunk.js.map +1 -0
  37. package/dist/scripts/{6909-a9b8930e37-lite.chunk.js → 6909-ba75701156-lite.chunk.js} +2 -2
  38. package/dist/scripts/6909-ba75701156-lite.chunk.js.map +1 -0
  39. package/dist/scripts/7148-1ced1b5dce-lite.chunk.js +2 -0
  40. package/dist/scripts/7148-1ced1b5dce-lite.chunk.js.map +1 -0
  41. package/dist/scripts/7568-55e9b01367-lite.chunk.js +3 -0
  42. package/dist/scripts/7568-55e9b01367-lite.chunk.js.map +1 -0
  43. package/dist/scripts/{7617-9d34c841e6-lite.chunk.js → 7617-211f084b70-lite.chunk.js} +2 -2
  44. package/dist/scripts/7617-211f084b70-lite.chunk.js.map +1 -0
  45. package/dist/scripts/7742-514844bd1a-lite.chunk.js +2 -0
  46. package/dist/scripts/7742-514844bd1a-lite.chunk.js.map +1 -0
  47. package/dist/scripts/7843-cbebf1a786-lite.chunk.js +2 -0
  48. package/dist/scripts/7843-cbebf1a786-lite.chunk.js.map +1 -0
  49. package/dist/scripts/8077-870bd8e245-lite.chunk.js +3 -0
  50. package/dist/scripts/8077-870bd8e245-lite.chunk.js.map +1 -0
  51. package/dist/scripts/843-4dbc5df109-lite.chunk.js +3 -0
  52. package/dist/scripts/843-4dbc5df109-lite.chunk.js.LICENSE.txt +1 -0
  53. package/dist/scripts/843-4dbc5df109-lite.chunk.js.map +1 -0
  54. package/dist/scripts/8735-e74a148502-lite.chunk.js +2 -0
  55. package/dist/scripts/8735-e74a148502-lite.chunk.js.map +1 -0
  56. package/dist/scripts/8856-2d332952ae-lite.chunk.js +2 -0
  57. package/dist/scripts/8856-2d332952ae-lite.chunk.js.map +1 -0
  58. package/dist/scripts/904-2784e45cfc-lite.chunk.js +2 -0
  59. package/dist/scripts/904-2784e45cfc-lite.chunk.js.map +1 -0
  60. package/dist/scripts/{9042-fdc5ecb459-lite.chunk.js → 9042-fd7e79b891-lite.chunk.js} +1 -1
  61. package/dist/scripts/{9042-fdc5ecb459-lite.chunk.js.map → 9042-fd7e79b891-lite.chunk.js.map} +1 -1
  62. package/dist/scripts/9295-eb130a0b17-lite.chunk.js +2 -0
  63. package/dist/scripts/9295-eb130a0b17-lite.chunk.js.map +1 -0
  64. package/dist/scripts/9528-4e954d9dff-lite.chunk.js +2 -0
  65. package/dist/scripts/9528-4e954d9dff-lite.chunk.js.map +1 -0
  66. package/dist/scripts/{9742-5f99d74bb0-lite.chunk.js → 9742-3f6b75484a-lite.chunk.js} +2 -2
  67. package/dist/scripts/9742-3f6b75484a-lite.chunk.js.map +1 -0
  68. package/dist/scripts/979-6a70a0e616-lite.chunk.js +2 -0
  69. package/dist/scripts/979-6a70a0e616-lite.chunk.js.map +1 -0
  70. package/dist/scripts/{3612-8c6423bd51-lite.chunk.js → 9911-8892b6dbfe-lite.chunk.js} +2 -2
  71. package/dist/scripts/{3612-8c6423bd51-lite.chunk.js.map → 9911-8892b6dbfe-lite.chunk.js.map} +1 -1
  72. package/dist/scripts/bundle-f926852f33.min.js +3 -0
  73. package/dist/scripts/{bundle-9a3e49399a.min.js.map → bundle-f926852f33.min.js.map} +1 -1
  74. package/package.json +1 -1
  75. package/dist/css/2074-lite-ac8da6c78b.chunk.css +0 -4
  76. package/dist/scripts/1202-d96ad80884-lite.chunk.js +0 -2
  77. package/dist/scripts/1202-d96ad80884-lite.chunk.js.map +0 -1
  78. package/dist/scripts/1336-1826f6e582-lite.chunk.js.map +0 -1
  79. package/dist/scripts/2074-39b86b9a22-lite.chunk.js +0 -2
  80. package/dist/scripts/2074-39b86b9a22-lite.chunk.js.map +0 -1
  81. package/dist/scripts/2664-87c8cbfa7f-lite.chunk.js.map +0 -1
  82. package/dist/scripts/2888-2596e106a5-lite.chunk.js +0 -2
  83. package/dist/scripts/2888-2596e106a5-lite.chunk.js.map +0 -1
  84. package/dist/scripts/289-669c0c8222-lite.chunk.js +0 -2
  85. package/dist/scripts/289-669c0c8222-lite.chunk.js.map +0 -1
  86. package/dist/scripts/3840-98c79fc0d8-lite.chunk.js +0 -2
  87. package/dist/scripts/3840-98c79fc0d8-lite.chunk.js.map +0 -1
  88. package/dist/scripts/3893-2856933742-lite.chunk.js +0 -2
  89. package/dist/scripts/3893-2856933742-lite.chunk.js.map +0 -1
  90. package/dist/scripts/4006-9dfe9cec1b-lite.chunk.js +0 -3
  91. package/dist/scripts/4006-9dfe9cec1b-lite.chunk.js.map +0 -1
  92. package/dist/scripts/4177-285ddf9ae3-lite.chunk.js.map +0 -1
  93. package/dist/scripts/4578-7578bcf17a-lite.chunk.js.map +0 -1
  94. package/dist/scripts/4621-1f79d94416-lite.chunk.js.map +0 -1
  95. package/dist/scripts/4806-f36469abb7-lite.chunk.js +0 -2
  96. package/dist/scripts/4806-f36469abb7-lite.chunk.js.map +0 -1
  97. package/dist/scripts/4985-bdfa839f8f-lite.chunk.js +0 -2
  98. package/dist/scripts/4985-bdfa839f8f-lite.chunk.js.map +0 -1
  99. package/dist/scripts/5554-17bb3b86fc-lite.chunk.js.map +0 -1
  100. package/dist/scripts/5579-a9c152057f-lite.chunk.js +0 -2
  101. package/dist/scripts/5579-a9c152057f-lite.chunk.js.map +0 -1
  102. package/dist/scripts/5712-e784cfe89c-lite.chunk.js +0 -2
  103. package/dist/scripts/5712-e784cfe89c-lite.chunk.js.map +0 -1
  104. package/dist/scripts/6070-a390fdce21-lite.chunk.js +0 -2
  105. package/dist/scripts/6070-a390fdce21-lite.chunk.js.map +0 -1
  106. package/dist/scripts/6909-a9b8930e37-lite.chunk.js.map +0 -1
  107. package/dist/scripts/7401-98135f09e8-lite.chunk.js +0 -2
  108. package/dist/scripts/7401-98135f09e8-lite.chunk.js.map +0 -1
  109. package/dist/scripts/7617-9d34c841e6-lite.chunk.js.map +0 -1
  110. package/dist/scripts/7742-342db3ce4f-lite.chunk.js +0 -2
  111. package/dist/scripts/7742-342db3ce4f-lite.chunk.js.map +0 -1
  112. package/dist/scripts/7843-f6033528ce-lite.chunk.js +0 -2
  113. package/dist/scripts/7843-f6033528ce-lite.chunk.js.map +0 -1
  114. package/dist/scripts/787-dcb3a0a26c-lite.chunk.js +0 -2
  115. package/dist/scripts/787-dcb3a0a26c-lite.chunk.js.map +0 -1
  116. package/dist/scripts/8077-9fdb522d7e-lite.chunk.js +0 -2
  117. package/dist/scripts/8077-9fdb522d7e-lite.chunk.js.map +0 -1
  118. package/dist/scripts/8133-ffcff3b7fc-lite.chunk.js.map +0 -1
  119. package/dist/scripts/8364-ff63447d36-lite.chunk.js +0 -3
  120. package/dist/scripts/8364-ff63447d36-lite.chunk.js.map +0 -1
  121. package/dist/scripts/8672-6967ce8a23-lite.chunk.js +0 -2
  122. package/dist/scripts/8672-6967ce8a23-lite.chunk.js.map +0 -1
  123. package/dist/scripts/9295-4242401e60-lite.chunk.js +0 -2
  124. package/dist/scripts/9295-4242401e60-lite.chunk.js.map +0 -1
  125. package/dist/scripts/9742-5f99d74bb0-lite.chunk.js.map +0 -1
  126. package/dist/scripts/979-4b893e5603-lite.chunk.js +0 -2
  127. package/dist/scripts/979-4b893e5603-lite.chunk.js.map +0 -1
  128. package/dist/scripts/9911-9272b96e46-lite.chunk.js +0 -2
  129. package/dist/scripts/9911-9272b96e46-lite.chunk.js.map +0 -1
  130. package/dist/scripts/bundle-9a3e49399a.min.js +0 -3
  131. /package/dist/css/{787-lite-5a317efacd.chunk.css → 2970-lite-5a317efacd.chunk.css} +0 -0
  132. /package/dist/css/{6070-lite-45dc286aab.chunk.css → 6550-lite-45dc286aab.chunk.css} +0 -0
  133. /package/dist/css/{2888-lite-856c02f000.chunk.css → 7148-lite-856c02f000.chunk.css} +0 -0
  134. /package/dist/css/{8364-lite-db31e36b79.chunk.css → 843-lite-db31e36b79.chunk.css} +0 -0
  135. /package/dist/css/{9911-lite-856c02f000.chunk.css → 8735-lite-856c02f000.chunk.css} +0 -0
  136. /package/dist/css/{5579-lite-f8e496136d.chunk.css → 8856-lite-f8e496136d.chunk.css} +0 -0
  137. /package/dist/css/{289-lite-2435a34b13.chunk.css → 904-lite-2435a34b13.chunk.css} +0 -0
  138. /package/dist/css/{1202-lite-4a892bdbf2.chunk.css → 9528-lite-4a892bdbf2.chunk.css} +0 -0
  139. /package/dist/css/{3612-lite-2b4142796a.chunk.css → 9911-lite-2b4142796a.chunk.css} +0 -0
  140. /package/dist/scripts/{4006-9dfe9cec1b-lite.chunk.js.LICENSE.txt → 3392-f7f8cb65e5-lite.chunk.js.LICENSE.txt} +0 -0
  141. /package/dist/scripts/{8133-ffcff3b7fc-lite.chunk.js.LICENSE.txt → 7568-55e9b01367-lite.chunk.js.LICENSE.txt} +0 -0
  142. /package/dist/scripts/{8364-ff63447d36-lite.chunk.js.LICENSE.txt → 8077-870bd8e245-lite.chunk.js.LICENSE.txt} +0 -0
  143. /package/dist/scripts/{bundle-9a3e49399a.min.js.LICENSE.txt → bundle-f926852f33.min.js.LICENSE.txt} +0 -0
@@ -1,2 +1,2 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[3612],{67814:(e,a,n)=>{n.d(a,{p:()=>T,v:()=>y});var t=n(32735),o=n(110),i=n(50690),l=n(22406),r=n(78408),c=n(83657),s=n(23481),d=n(15611),m=n(83914),u=n(35223),p="shared.backButton";function v(e){var a=Object.assign({textShadow:!0},e),n=a.backToName,o=a.appLink,i=a.color,l=a.extraClasses,r=a.textShadow,c=n?s.T.getPhrase(p,"backTo",{backToName:n}):s.T.getPhrase(p,"back"),v="black"===i?"":"text-white",g=r?"text-shadow":"";return t.createElement(d.F,{appLink:o,className:"d-inline-flex align-items-center h5 mb-0 ".concat(l," ").concat(v," ").concat(g)},t.createElement(m.x,{svgName:u.vn.ChevronLeft,size:m.S.Medium}),t.createElement("span",{className:"ms-1"},c))}v.defaultProps={color:"black",extraClasses:""};var g=n(4527),h=n(83345),b=n(7733),f=n(10587),C=n(94232),E=n(54610),k=n(79967),x=n(9085),L=n(67453);const N={bannerContent:"sSCTB",actionsContainer:"Z5WI2",bannerContentWithLogo:"rgs7Q",container:"M51HJ",logoContainer:"vkeJk",logoContainerLeft:"M3U9B",logoHeading:"EtRwC",specialEventContainer:"rOxDc",headingLarge:"_8pnV",heading:"JXVBH"};var w="".concat(f.y[E.__.Banners].width,":").concat(f.y[E.__.Banners].height);function D(e){return e.length<160?"h1":N.headingLarge}var T=t.memo(function(e){var a,n,s,d,m=e.heading,u=e.banner,p=e.imageCdnUrl,f=e.actions,T=e.sortComponent,y=e.blockColourClass,M=e.specialEvent,B=t.useContext(C.n),O=(0,k.k)().xxl?1920:1200,P=t.useMemo(function(){if(!M||e.showComingSoon)return!1;var a=o.O.format(new Date,"YYYY-MM-DD");return M.endDate?M.startDate<=a&&M.endDate>=a:M.startDate===a},[M]),I=e.imageOptions||{width:O,ratio:w,resizeType:E.Nq.Cover},S=!!u&&!!p&&L.j.createBannerUrl(u,{fallbackBaseUrl:p,fallbackCategoryName:m,type:E.__.Banners},I),_={className:"banner banner-header ".concat(e.bannerClassName),style:S?{backgroundImage:"url('".concat(S,"')")}:{}};!u&&y&&(delete _.style,_.className+=" ".concat(y));var j=e.detailsComponent,A=(0,x.x)(e.heading,b.o);return i.b.renderInPortalIfExists(t.createElement("header",Object.assign({},_),t.createElement("div",{className:"container ".concat(N.container," position-relative inner-banner")},e.backButtonAppLink&&t.createElement("div",{className:"pt-3"},t.createElement(v,{appLink:e.backButtonAppLink,backToName:e.backButtonText,extraClasses:e.backButtonClasses,color:"white"})),t.createElement("div",{className:"".concat(e.alignLogoLeft?"position-absolute top-50 start-0 translate-middle-y w-100 ps-4":"".concat(N.bannerContent," px-2 ").concat((null===(a=e.logo)||void 0===a?void 0:a.url)?N.bannerContentWithLogo:""))},!!M&&t.createElement("div",{className:"position-relative ".concat(N.specialEventContainer)},t.createElement(r.s,{body:{type:M.endDate?"range":"day",text:M.endDate?"".concat(o.O.format(M.startDate,"DD"),"-").concat(o.O.format(M.endDate,"DD")):o.O.format(M.startDate,"DD")},month:function(e){return e.endDate?o.O.isSame(e.startDate,e.endDate,"month")?o.O.format(e.startDate,"MMMM"):"".concat(o.O.format(e.startDate,"MMM")," - ").concat(o.O.format(e.endDate,"MMM")):o.O.format(e.startDate,"MMMM")}(M),theme:e.calendarTheme})),t.createElement("div",null,P&&t.createElement("div",{className:"rounded-pill py-1 px-2 my-1 me-1 fw-semibold bg-light-blue lh-1 d-inline-block"},t.createElement(h.x,{namespace:"shared.bannerHeader",phrase:"onToday"})),e.showComingSoon&&t.createElement(l.r,{className:"pe-2 fw-semibold mb-1 rounded-pill justify-content-start text-nowrap"}),t.createElement("div",{className:"d-flex align-items-center"},e.alignLogoLeft&&(null===(n=e.logo)||void 0===n?void 0:n.url)&&t.createElement("div",{className:"".concat(N.logoContainerLeft," d-none d-md-block rounded-circle overflow-hidden me-3 ").concat(A)},t.createElement(g.w,{src:L.j.createUrl(null===(s=e.logo)||void 0===s?void 0:s.url,{size:E.h2.Medium}),style:{backgroundColor:e.logoBgColour}})),t.createElement("h1",{className:"text-white text-shadow pe-3 position-static ".concat(N.heading," ").concat(D(m)," ").concat(e.alignLogoLeft?"w-50":"")},m,j&&t.createElement(j,null)))),!!f&&t.createElement("div",{className:N.actionsContainer},t.createElement(c.e,{actions:f,sortComponent:T,actionsDropdownClassName:e.actionsDropdownClassName}))),!e.alignLogoLeft&&!!(null===(d=e.logo)||void 0===d?void 0:d.url)&&t.createElement("div",{className:N.logoContainer},t.createElement("img",{src:L.j.createUrl(e.logo.url,{size:E.h2.Medium}),className:"rounded-circle"})))),null==B?void 0:B.container)},function(e,a){var n,t;return e.actions===a.actions&&e.heading===a.heading&&(null===(n=e.logo)||void 0===n?void 0:n.url)===(null===(t=a.logo)||void 0===t?void 0:t.url)});function y(){var e=t.useContext(C.n);return i.b.renderInPortalIfExists(t.createElement("div",{className:"partial-banner partial-loading-background ".concat(N.banner)}),null==e?void 0:e.container)}},89111:(e,a,n)=>{n.r(a),n.d(a,{PresentationTopicsView:()=>U});var t=n(32735),o=n(23481),i=n(20354),l=n(65858),r=n(15611),c=n(67814),s=n(49935),d=n(91693),m=n(83345),u=n(47770),p=n(30662),v=n(65163),g=n(9513),h=n(54610),b=n(12754),f=n(78479),C=n(42308),E=n(21750),k=n(39151),x=n(79967),L=n(15311),N=n(79612),w=n(37802),D=n(35223),T=n(87114),y=n(14070),M=n(97291),B=n(86698),O=n(33192),P=n(23923),I=(n(28400),n(34181)),S=function(e){return function(a){return(null==a?void 0:a.id)?I.L.getAppLink(a,e||{}):null}};const _={classificationPane:"ftCMX"};var j="subjects.presentationTopics",A=o.T.encloseNamespace(j);function U(e){var a,n,o,I,U,F,z,H,J,V=(0,w.r)(null).hasTopicDirectories,W=(0,x.k)(),Y=i.a.useBasicFetch(k.L.config()),Q=(0,B.y)(),R=Q.availablePresentations,q=Q.activePresentation,X=Q.hasPresentationsLoaded,Z=Q.canAccessPresentation,K=(0,P.B)(),G=(0,L.r)(),$=e.presentationId||(null==q?void 0:q.id),ee=i.a.useBasicFetch($&&E.x.presentationById($)),ae=ee.hasCompleted&&X,ne={name:T.i.getExploreAllTopicsTitle(null===(a=ee.data)||void 0===a?void 0:a.name,null==R?void 0:R.length),banner:{url:T.i.getPresentationLevelImage(null===(n=ee.data)||void 0===n?void 0:n.learningLevel,"topic-banner")}},te=i.a.useBasicFetch(ae&&E.x.topLevelTopics($||(null===(o=ee.data)||void 0===o?void 0:o.id))),oe=A("pageTitleSubject",{title:null===(I=ee.data)||void 0===I?void 0:I.name});(0,N.M)({title:oe,description:A("pageDescription",{title:null===(U=ee.data)||void 0===U?void 0:U.name}),canonicalLink:O.f.getCanonicalLink(),allowIndexing:O.f.allowIndexing()});var ie=S();var le=!!Y.data&&!!R&&te.data,re=Z(null===(F=ee.data)||void 0===F?void 0:F.id),ce={presentationId:null===(z=ee.data)||void 0===z?void 0:z.id,presentationName:null===(H=ee.data)||void 0===H?void 0:H.name,widgetId:C.z.Classifications,templateId:f.f.CoverFixedPillListLarge},se=V?p.q:u.K;return t.createElement("main",{className:"bg-white px-4"},le?t.createElement(c.p,{heading:null==ne?void 0:ne.name,banner:null==ne?void 0:ne.banner,imageCdnUrl:Y.data.imageCdnUrl,imageOptions:{size:h.h2.Large}}):t.createElement(c.v,null),t.createElement("div",{className:"py-3 mb-3 ".concat(re?"border-bottom":"")},re?le?t.createElement(s.Oo,{breadcrumbs:function(){var e;return[{name:A("discover"),appLink:{application:M.O.DASHBOARD,action:y.e.Dashboard.HOME}},{name:T.i.getExploreAllTopicsBreadcrumb(null===(e=ee.data)||void 0===e?void 0:e.name,null==R?void 0:R.length),active:!0}]}()}):t.createElement(s.b2,null):t.createElement(t.Fragment,null)),t.createElement("div",{className:_.classificationPane},le?t.createElement(se,{id:null===(J=ee.data)||void 0===J?void 0:J.id,name:"",description:"",analyticsData:ce,content:null==te?void 0:te.data,appLinks:{classification:ie},hasTableOfContents:!1,settings:{hasTopicDirectories:V},isTertiaryCustomerWithoutExchange:K&&!(null==G?void 0:G.hasProduct(b.x.Exchange)),onToggleFollowClassification:function(){}}):t.createElement(v.QL,{partialLoadingComponent:g.Qh}),le&&V&&(null==R?void 0:R.length)>1&&t.createElement("ul",{className:"pt-3 list-unstyled"},R.filter(function(e){var a;return e.id!==(null===(a=ee.data)||void 0===a?void 0:a.id)}).map(function(e){var a,n,o;return t.createElement("li",{key:e.id},t.createElement(r.F,{className:"d-flex justify-content-between align-items-center text-white p-3 mb-3 rounded-3 ".concat(_.link," ").concat(T.i.getMappedPresentationBackgroundColourClass(null==e?void 0:e.learningLevel)),appLink:{application:M.O.SUBJECT,action:y.e.Subjects.PRESENTATION_TOPICS,params:{presentationId:e.id}},appLinkOptions:{middlewareOptions:{presentationSlug:e.vanitySlug}},analyticsData:{id:e.id,name:e.name,description:e.description,currentPresentationId:null===(a=ee.data)||void 0===a?void 0:a.id,currentPresentationName:null===(n=ee.data)||void 0===n?void 0:n.name,currentPresentationDescription:null===(o=ee.data)||void 0===o?void 0:o.description},analyticsOptions:{entity:l.py.Presentation,actionType:l.Vw.Click,location:l.LZ.PresentationClassifications}},t.createElement("div",{className:"h4 text-shadow mb-0"},R.length>2||W.sm||W.xs?t.createElement(m.x,{namespace:j,phrase:"multiPresentationBanner",options:{name:e.name}}):t.createElement(m.x,{namespace:j,phrase:"singlePresentationBanner",options:{name:e.name}})),t.createElement(d.h,{svgName:W.xs?D.vn.Sparkle:D.vn.School,openInNewTab:!0,className:"btn btn-outline-dark",onClick:null},t.createElement(m.x,{namespace:j,phrase:W.xs?"explore":"changeTo",options:{name:e.name}}))))}))))}}}]);
2
- //# sourceMappingURL=3612-8c6423bd51-lite.chunk.js.map
1
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[9911],{67814:(e,a,n)=>{n.d(a,{p:()=>T,v:()=>y});var t=n(32735),o=n(110),i=n(50690),l=n(22406),r=n(78408),c=n(83657),s=n(23481),d=n(15611),m=n(83914),u=n(35223),p="shared.backButton";function v(e){var a=Object.assign({textShadow:!0},e),n=a.backToName,o=a.appLink,i=a.color,l=a.extraClasses,r=a.textShadow,c=n?s.T.getPhrase(p,"backTo",{backToName:n}):s.T.getPhrase(p,"back"),v="black"===i?"":"text-white",g=r?"text-shadow":"";return t.createElement(d.F,{appLink:o,className:"d-inline-flex align-items-center h5 mb-0 ".concat(l," ").concat(v," ").concat(g)},t.createElement(m.x,{svgName:u.vn.ChevronLeft,size:m.S.Medium}),t.createElement("span",{className:"ms-1"},c))}v.defaultProps={color:"black",extraClasses:""};var g=n(4527),h=n(83345),b=n(7733),f=n(10587),C=n(94232),E=n(54610),k=n(79967),x=n(9085),L=n(67453);const N={bannerContent:"sSCTB",actionsContainer:"Z5WI2",bannerContentWithLogo:"rgs7Q",container:"M51HJ",logoContainer:"vkeJk",logoContainerLeft:"M3U9B",logoHeading:"EtRwC",specialEventContainer:"rOxDc",headingLarge:"_8pnV",heading:"JXVBH"};var w="".concat(f.y[E.__.Banners].width,":").concat(f.y[E.__.Banners].height);function D(e){return e.length<160?"h1":N.headingLarge}var T=t.memo(function(e){var a,n,s,d,m=e.heading,u=e.banner,p=e.imageCdnUrl,f=e.actions,T=e.sortComponent,y=e.blockColourClass,M=e.specialEvent,B=t.useContext(C.n),O=(0,k.k)().xxl?1920:1200,P=t.useMemo(function(){if(!M||e.showComingSoon)return!1;var a=o.O.format(new Date,"YYYY-MM-DD");return M.endDate?M.startDate<=a&&M.endDate>=a:M.startDate===a},[M]),I=e.imageOptions||{width:O,ratio:w,resizeType:E.Nq.Cover},S=!!u&&!!p&&L.j.createBannerUrl(u,{fallbackBaseUrl:p,fallbackCategoryName:m,type:E.__.Banners},I),_={className:"banner banner-header ".concat(e.bannerClassName),style:S?{backgroundImage:"url('".concat(S,"')")}:{}};!u&&y&&(delete _.style,_.className+=" ".concat(y));var j=e.detailsComponent,A=(0,x.x)(e.heading,b.o);return i.b.renderInPortalIfExists(t.createElement("header",Object.assign({},_),t.createElement("div",{className:"container ".concat(N.container," position-relative inner-banner")},e.backButtonAppLink&&t.createElement("div",{className:"pt-3"},t.createElement(v,{appLink:e.backButtonAppLink,backToName:e.backButtonText,extraClasses:e.backButtonClasses,color:"white"})),t.createElement("div",{className:"".concat(e.alignLogoLeft?"position-absolute top-50 start-0 translate-middle-y w-100 ps-4":"".concat(N.bannerContent," px-2 ").concat((null===(a=e.logo)||void 0===a?void 0:a.url)?N.bannerContentWithLogo:""))},!!M&&t.createElement("div",{className:"position-relative ".concat(N.specialEventContainer)},t.createElement(r.s,{body:{type:M.endDate?"range":"day",text:M.endDate?"".concat(o.O.format(M.startDate,"DD"),"-").concat(o.O.format(M.endDate,"DD")):o.O.format(M.startDate,"DD")},month:function(e){return e.endDate?o.O.isSame(e.startDate,e.endDate,"month")?o.O.format(e.startDate,"MMMM"):"".concat(o.O.format(e.startDate,"MMM")," - ").concat(o.O.format(e.endDate,"MMM")):o.O.format(e.startDate,"MMMM")}(M),theme:e.calendarTheme})),t.createElement("div",null,P&&t.createElement("div",{className:"rounded-pill py-1 px-2 my-1 me-1 fw-semibold bg-light-blue lh-1 d-inline-block"},t.createElement(h.x,{namespace:"shared.bannerHeader",phrase:"onToday"})),e.showComingSoon&&t.createElement(l.r,{className:"pe-2 fw-semibold mb-1 rounded-pill justify-content-start text-nowrap"}),t.createElement("div",{className:"d-flex align-items-center"},e.alignLogoLeft&&(null===(n=e.logo)||void 0===n?void 0:n.url)&&t.createElement("div",{className:"".concat(N.logoContainerLeft," d-none d-md-block rounded-circle overflow-hidden me-3 ").concat(A)},t.createElement(g.w,{src:L.j.createUrl(null===(s=e.logo)||void 0===s?void 0:s.url,{size:E.h2.Medium}),style:{backgroundColor:e.logoBgColour}})),t.createElement("h1",{className:"text-white text-shadow pe-3 position-static ".concat(N.heading," ").concat(D(m)," ").concat(e.alignLogoLeft?"w-50":"")},m,j&&t.createElement(j,null)))),!!f&&t.createElement("div",{className:N.actionsContainer},t.createElement(c.e,{actions:f,sortComponent:T,actionsDropdownClassName:e.actionsDropdownClassName}))),!e.alignLogoLeft&&!!(null===(d=e.logo)||void 0===d?void 0:d.url)&&t.createElement("div",{className:N.logoContainer},t.createElement("img",{src:L.j.createUrl(e.logo.url,{size:E.h2.Medium}),className:"rounded-circle"})))),null==B?void 0:B.container)},function(e,a){var n,t;return e.actions===a.actions&&e.heading===a.heading&&(null===(n=e.logo)||void 0===n?void 0:n.url)===(null===(t=a.logo)||void 0===t?void 0:t.url)});function y(){var e=t.useContext(C.n);return i.b.renderInPortalIfExists(t.createElement("div",{className:"partial-banner partial-loading-background ".concat(N.banner)}),null==e?void 0:e.container)}},89111:(e,a,n)=>{n.r(a),n.d(a,{PresentationTopicsView:()=>U});var t=n(32735),o=n(23481),i=n(20354),l=n(65858),r=n(15611),c=n(67814),s=n(49935),d=n(91693),m=n(83345),u=n(47770),p=n(30662),v=n(65163),g=n(9513),h=n(54610),b=n(12754),f=n(78479),C=n(42308),E=n(21750),k=n(39151),x=n(79967),L=n(15311),N=n(79612),w=n(37802),D=n(35223),T=n(87114),y=n(14070),M=n(97291),B=n(86698),O=n(33192),P=n(23923),I=(n(28400),n(34181)),S=function(e){return function(a){return(null==a?void 0:a.id)?I.L.getAppLink(a,e||{}):null}};const _={classificationPane:"ftCMX"};var j="subjects.presentationTopics",A=o.T.encloseNamespace(j);function U(e){var a,n,o,I,U,F,z,H,J,V=(0,w.r)(null).hasTopicDirectories,W=(0,x.k)(),Y=i.a.useBasicFetch(k.L.config()),Q=(0,B.y)(),R=Q.availablePresentations,q=Q.activePresentation,X=Q.hasPresentationsLoaded,Z=Q.canAccessPresentation,K=(0,P.B)(),G=(0,L.r)(),$=e.presentationId||(null==q?void 0:q.id),ee=i.a.useBasicFetch($&&E.x.presentationById($)),ae=ee.hasCompleted&&X,ne={name:T.i.getExploreAllTopicsTitle(null===(a=ee.data)||void 0===a?void 0:a.name,null==R?void 0:R.length),banner:{url:T.i.getPresentationLevelImage(null===(n=ee.data)||void 0===n?void 0:n.learningLevel,"topic-banner")}},te=i.a.useBasicFetch(ae&&E.x.topLevelTopics($||(null===(o=ee.data)||void 0===o?void 0:o.id))),oe=A("pageTitleSubject",{title:null===(I=ee.data)||void 0===I?void 0:I.name});(0,N.M)({title:oe,description:A("pageDescription",{title:null===(U=ee.data)||void 0===U?void 0:U.name}),canonicalLink:O.f.getCanonicalLink(),allowIndexing:O.f.allowIndexing()});var ie=S();var le=!!Y.data&&!!R&&te.data,re=Z(null===(F=ee.data)||void 0===F?void 0:F.id),ce={presentationId:null===(z=ee.data)||void 0===z?void 0:z.id,presentationName:null===(H=ee.data)||void 0===H?void 0:H.name,widgetId:C.z.Classifications,templateId:f.f.CoverFixedPillListLarge},se=V?p.q:u.K;return t.createElement("main",{className:"bg-white px-4"},le?t.createElement(c.p,{heading:null==ne?void 0:ne.name,banner:null==ne?void 0:ne.banner,imageCdnUrl:Y.data.imageCdnUrl,imageOptions:{size:h.h2.Large}}):t.createElement(c.v,null),t.createElement("div",{className:"py-3 mb-3 ".concat(re?"border-bottom":"")},re?le?t.createElement(s.Oo,{breadcrumbs:function(){var e;return[{name:A("discover"),appLink:{application:M.O.DASHBOARD,action:y.e.Dashboard.HOME}},{name:T.i.getExploreAllTopicsBreadcrumb(null===(e=ee.data)||void 0===e?void 0:e.name,null==R?void 0:R.length),active:!0}]}()}):t.createElement(s.b2,null):t.createElement(t.Fragment,null)),t.createElement("div",{className:_.classificationPane},le?t.createElement(se,{id:null===(J=ee.data)||void 0===J?void 0:J.id,name:"",description:"",analyticsData:ce,content:null==te?void 0:te.data,appLinks:{classification:ie},hasTableOfContents:!1,settings:{hasTopicDirectories:V},isTertiaryCustomerWithoutExchange:K&&!(null==G?void 0:G.hasProduct(b.x.Exchange)),onToggleFollowClassification:function(){}}):t.createElement(v.QL,{partialLoadingComponent:g.Qh}),le&&V&&(null==R?void 0:R.length)>1&&t.createElement("ul",{className:"pt-3 list-unstyled"},R.filter(function(e){var a;return e.id!==(null===(a=ee.data)||void 0===a?void 0:a.id)}).map(function(e){var a,n,o;return t.createElement("li",{key:e.id},t.createElement(r.F,{className:"d-flex justify-content-between align-items-center text-white p-3 mb-3 rounded-3 ".concat(_.link," ").concat(T.i.getMappedPresentationBackgroundColourClass(null==e?void 0:e.learningLevel)),appLink:{application:M.O.SUBJECT,action:y.e.Subjects.PRESENTATION_TOPICS,params:{presentationId:e.id}},appLinkOptions:{middlewareOptions:{presentationSlug:e.vanitySlug}},analyticsData:{id:e.id,name:e.name,description:e.description,currentPresentationId:null===(a=ee.data)||void 0===a?void 0:a.id,currentPresentationName:null===(n=ee.data)||void 0===n?void 0:n.name,currentPresentationDescription:null===(o=ee.data)||void 0===o?void 0:o.description},analyticsOptions:{entity:l.py.Presentation,actionType:l.Vw.Click,location:l.LZ.PresentationClassifications}},t.createElement("div",{className:"h4 text-shadow mb-0"},R.length>2||W.sm||W.xs?t.createElement(m.x,{namespace:j,phrase:"multiPresentationBanner",options:{name:e.name}}):t.createElement(m.x,{namespace:j,phrase:"singlePresentationBanner",options:{name:e.name}})),t.createElement(d.h,{svgName:W.xs?D.vn.Sparkle:D.vn.School,openInNewTab:!0,className:"btn btn-outline-dark",onClick:null},t.createElement(m.x,{namespace:j,phrase:W.xs?"explore":"changeTo",options:{name:e.name}}))))}))))}}}]);
2
+ //# sourceMappingURL=9911-8892b6dbfe-lite.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scripts/3612-8c6423bd51-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/back-button/BackButton.tsx","file:///app/packages/libs/shared/src/components/banner-header/banner-header.scss","file:///app/packages/libs/shared/src/components/banner-header/BannerHeader.tsx","file:///app/packages/projects/lite/src/apps/subjects/utils/ClassificationAppLinks.ts","file:///app/packages/projects/lite/src/apps/subjects/views/presentation-topics/presentation-topics.scss","file:///app/packages/projects/lite/src/apps/subjects/views/presentation-topics/PresentationTopicsView.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'shared.backButton';\n\ninterface BackButtonProps {\n appLink: Core.AppLink;\n backToName?: string;\n color?: 'black' | 'white';\n extraClasses?: string;\n /**\n * Whether or not the button text has a text shadow. Defaults to true\n */\n textShadow?: boolean;\n}\n\nBackButton.defaultProps = {\n color: 'black',\n extraClasses: ''\n};\n\nexport function BackButton(props: BackButtonProps): React.ReactElement {\n const { backToName, appLink, color, extraClasses, textShadow } = {\n textShadow: true,\n ...props\n };\n\n const backPhrase = backToName\n ? LanguageService.getPhrase(namespace, 'backTo', { backToName })\n : LanguageService.getPhrase(namespace, 'back');\n\n const colorClass = color === 'black' ? '' : 'text-white';\n const textShadowClass = textShadow ? 'text-shadow' : '';\n\n return (\n <AppLink\n appLink={appLink}\n className={`d-inline-flex align-items-center h5 mb-0 ${extraClasses} ${colorClass} ${textShadowClass}`}\n >\n <SvgContainer svgName={cvSvgLibrary.ChevronLeft} size={SvgContainerSize.Medium} />\n <span className='ms-1'>{backPhrase}</span>\n </AppLink>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"bannerContent\":\"sSCTB\",\"actionsContainer\":\"Z5WI2\",\"bannerContentWithLogo\":\"rgs7Q\",\"container\":\"M51HJ\",\"logoContainer\":\"vkeJk\",\"logoContainerLeft\":\"M3U9B\",\"logoHeading\":\"EtRwC\",\"specialEventContainer\":\"rOxDc\",\"headingLarge\":\"_8pnV\",\"heading\":\"JXVBH\"};","import * as React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\nimport { PortalHelper } from 'libs/common/react/utils/PortalHelper';\n\nimport { ComingSoonTag } from 'libs/shared/apps/calendar/components/coming-soon-tag/ComingSoonTag';\nimport { GenericCalendarDate } from 'libs/shared/apps/calendar/components/generic-calendar-date/GenericCalendarDate';\nimport { CalendarTheme } from 'libs/shared/apps/calendar/interfaces/CalendarTheme';\nimport { ActionOptions, Actions } from 'libs/shared/components/actions/Actions';\nimport { BackButton } from 'libs/shared/components/back-button/BackButton';\nimport { LazyImage } from 'libs/shared/components/lazy-image/LazyImage';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { BG_COLOUR_CLASS_NAMES } from 'libs/shared/constants/ColourClassNames';\nimport { ImageMinDimensions } from 'libs/shared/constants/ImageSizes';\nimport { BannerPortalContext } from 'libs/shared/context/BannerPortalContext';\nimport { ImageSize, ImageType, ResizeType } from 'libs/shared/enums/Images';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Banner, CalendarEvent, Logo } from 'libs/shared/interfaces';\nimport { getBgColorClass } from 'libs/shared/utils/getBgColorClass';\nimport { ImageHelper, ImageOptions } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './banner-header.scss';\n\nconst RATIO = `${ImageMinDimensions[ImageType.Banners].width}:${ImageMinDimensions[ImageType.Banners].height}`;\nconst DEFAULT_WIDTH = 1200; // This is ImageSize.Large for a Banner.\nconst LARGE_SCREEN_WIDTH = 1920;\n\nfunction useGetImageWidth(): number {\n const breakpoints = useBreakpoints();\n\n if (breakpoints.xxl)\n return LARGE_SCREEN_WIDTH;\n\n return DEFAULT_WIDTH;\n}\n\nfunction getSizeClass(heading: string): string {\n if (heading.length < 160)\n return 'h1';\n\n return styles.headingLarge;\n}\n\ninterface BannerHeaderProps {\n heading: string;\n banner?: Banner;\n bannerClassName?: string;\n imageCdnUrl?: string;\n logo?: Logo;\n logoBgColour?: string;\n actions?: ActionOptions[];\n specialEvent?: CalendarEvent;\n backButtonAppLink?: Core.AppLink;\n backButtonText?: string;\n backButtonClasses?: string;\n sortComponent?: JSX.Element;\n blockColourClass?: string;\n actionsDropdownClassName?: string;\n detailsComponent?: () => React.ReactElement;\n imageOptions?: ImageOptions;\n showComingSoon?: boolean;\n alignLogoLeft?: boolean;\n calendarTheme?: CalendarTheme;\n}\n\nconst namespace = 'shared.bannerHeader';\n\nexport const BannerHeader = React.memo(function(props: React.PropsWithChildren<BannerHeaderProps>): React.ReactElement {\n const { heading, banner, imageCdnUrl, actions, sortComponent, blockColourClass, specialEvent } = props;\n\n const portalContainerContext = React.useContext(BannerPortalContext);\n\n const imageWidth = useGetImageWidth();\n\n const specialEventIsToday = React.useMemo(() => {\n if (!specialEvent || props.showComingSoon)\n return false;\n\n const today = DateHelper.format(new Date(), 'YYYY-MM-DD');\n\n if (!specialEvent.endDate)\n return specialEvent.startDate === today;\n\n return specialEvent.startDate <= today && specialEvent.endDate >= today;\n }, [specialEvent]);\n\n function getSpecialEventMonthText(specialEvent: CalendarEvent): string {\n if (!specialEvent.endDate)\n return DateHelper.format(specialEvent.startDate, 'MMMM');\n\n if (DateHelper.isSame(specialEvent.startDate, specialEvent.endDate, 'month'))\n return DateHelper.format(specialEvent.startDate, 'MMMM');\n\n return `${DateHelper.format(specialEvent.startDate, 'MMM')} - ${DateHelper.format(specialEvent.endDate, 'MMM')}`;\n }\n\n const imageOptions = props.imageOptions || {\n width: imageWidth,\n ratio: RATIO,\n resizeType: ResizeType.Cover\n };\n\n const url = !!banner && !!imageCdnUrl && ImageHelper.createBannerUrl(banner, {\n fallbackBaseUrl: imageCdnUrl,\n fallbackCategoryName: heading,\n type: ImageType.Banners\n }, imageOptions);\n\n const containerProps: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> = {\n className: `banner banner-header ${props.bannerClassName}`,\n style: url ? { backgroundImage: `url('${url}')` } : {}\n };\n\n if (!banner && blockColourClass) {\n delete containerProps.style;\n containerProps.className += ` ${blockColourClass}`;\n }\n\n const DetailsComponent = props.detailsComponent;\n\n const logoFallbackBgClassName = getBgColorClass(props.heading, BG_COLOUR_CLASS_NAMES);\n\n return PortalHelper.renderInPortalIfExists(\n // \"banner\" is used in playlists in Online. banner-header is used by all other projects\n <header {...containerProps}>\n <div className={`container ${styles.container} position-relative inner-banner`}>\n {props.backButtonAppLink && (\n <div className='pt-3'>\n <BackButton\n appLink={props.backButtonAppLink}\n backToName={props.backButtonText}\n extraClasses={props.backButtonClasses}\n color='white'\n />\n </div>\n )}\n \n <div className={`${props.alignLogoLeft ? 'position-absolute top-50 start-0 translate-middle-y w-100 ps-4' : `${styles.bannerContent} px-2 ${props.logo?.url ? styles.bannerContentWithLogo : ''}`}`}>\n {!!specialEvent && (\n <div className={`position-relative ${styles.specialEventContainer}`}>\n <GenericCalendarDate\n body={{\n type: specialEvent.endDate ? 'range' : 'day',\n text: specialEvent.endDate\n ? `${DateHelper.format(specialEvent.startDate, 'DD')}-${DateHelper.format(specialEvent.endDate, 'DD')}`\n : DateHelper.format(specialEvent.startDate, 'DD')\n }}\n month={getSpecialEventMonthText(specialEvent)}\n theme={props.calendarTheme}\n />\n </div>\n )}\n <div>\n {specialEventIsToday && (\n <div className='rounded-pill py-1 px-2 my-1 me-1 fw-semibold bg-light-blue lh-1 d-inline-block'>\n <Text namespace={namespace} phrase='onToday' />\n </div>\n )}\n {props.showComingSoon && (\n <ComingSoonTag className='pe-2 fw-semibold mb-1 rounded-pill justify-content-start text-nowrap' />\n )}\n <div className='d-flex align-items-center'>\n {props.alignLogoLeft && props.logo?.url &&\n <div className={`${styles.logoContainerLeft} d-none d-md-block rounded-circle overflow-hidden me-3 ${logoFallbackBgClassName}`}>\n <LazyImage\n src={ImageHelper.createUrl(props.logo?.url, { size: ImageSize.Medium })}\n style={{ backgroundColor: props.logoBgColour }}\n />\n </div>\n }\n <h1 className={`text-white text-shadow pe-3 position-static ${styles.heading} ${getSizeClass(heading)} ${props.alignLogoLeft ? 'w-50' : ''}`}>\n {heading}\n {DetailsComponent && <DetailsComponent />}\n </h1>\n </div>\n </div>\n {!!actions && (\n <div className={styles.actionsContainer}>\n <Actions\n actions={actions}\n sortComponent={sortComponent}\n actionsDropdownClassName={props.actionsDropdownClassName}\n />\n </div>\n )}\n </div>\n {!props.alignLogoLeft && !!props.logo?.url &&\n <div className={styles.logoContainer}>\n <img\n src={ImageHelper.createUrl(props.logo.url, { size: ImageSize.Medium })}\n className='rounded-circle'\n />\n </div>\n }\n </div>\n </header>,\n portalContainerContext?.container\n );\n}, (prevProps, nextProps): boolean => (\n prevProps.actions === nextProps.actions\n && prevProps.heading === nextProps.heading\n && prevProps.logo?.url === nextProps.logo?.url\n));\n\nexport function PartialBannerHeader(): JSX.Element {\n const portalContainerContext = React.useContext(BannerPortalContext);\n\n return PortalHelper.renderInPortalIfExists(\n <div className={`partial-banner partial-loading-background ${styles.banner}`} />,\n portalContainerContext?.container\n );\n}","import { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { Classification, Playlist } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { ClassificationAppLinkHelper } from 'shared/utils/ClassificationAppLinkHelper';\n\nexport const getClassificationAppLink = (params?: HashObject) =>\n (classification?: Classification): Core.AppLink => {\n if (!classification?.id)\n return null;\n\n return ClassificationAppLinkHelper.getAppLink(classification, params || {});\n };\n\nexport const getPlaylistAppLink = (playlist: Playlist, classificationId: string): Core.AppLink => ({\n application: AppChannels.PLAYLISTS,\n action: Actions.Playlists.PLAYLIST,\n args: [ playlist.id, TextHelper.slugify(playlist.name) ],\n params: { classificationId }\n});\n\nexport const getAllTopicsAppLink = (presentationId?: string): Core.AppLink => ({\n application: AppChannels.SUBJECT,\n action: Actions.Subjects.PRESENTATION_TOPICS,\n params: presentationId ? { presentationId } : {}\n});","// extracted by mini-css-extract-plugin\nexport default {\"classificationPane\":\"ftCMX\"};","import * as React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { BannerHeader, PartialBannerHeader } from 'libs/shared/components/banner-header/BannerHeader';\nimport { Breadcrumb, Breadcrumbs, PartialBreadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CoverFixedPillListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-fixed-pill-list-large/CoverFixedPillListLargeWidgetTemplate';\nimport { StatsCoverFixedPillListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/stats-cover-fixed-pill-list-large/StatsCoverFixedPillListLargeWidgetTemplate';\nimport { PartialDynamicWidget } from 'libs/shared/components/widgets/dynamic-widget';\nimport { PartialSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { ClassificationRequests } from 'libs/shared/flight-requests/ClassificationRequests';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { useProducts } from 'libs/shared/hooks/UseProducts';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Classification, Config, Presentation } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { usePresentation } from 'shared/hooks/usePresentation';\nimport { SeoHelper } from 'shared/utils/SeoHelper';\n\nimport { useIsTertiary } from 'apps/onboarding/hooks/useIsTertiary';\nimport { getClassificationAppLink } from 'apps/subjects/utils/ClassificationAppLinks';\n\nimport styles from './presentation-topics.scss';\n\nconst namespace = 'subjects.presentationTopics';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface PresentationTopicsViewQueryParams {\n presentationId?: string;\n}\n\ninterface PresentationTopicsViewProps {\n presentationId?: string;\n}\n\nexport function PresentationTopicsView(props: PresentationTopicsViewProps): React.ReactElement {\n const { hasTopicDirectories } = useSettings(null);\n const breakpoints = useBreakpoints();\n\n /**\n * Data fetching\n */\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const {\n availablePresentations,\n activePresentation,\n hasPresentationsLoaded,\n canAccessPresentation\n } = usePresentation();\n\n const isTertiary = useIsTertiary();\n const products = useProducts();\n\n /**\n * We'll prefer the presentationId query param, but fallback to the\n * user's activePresentation where the queryParam doesn't exist.\n */\n const initialPresentationId = props.presentationId || activePresentation?.id;\n\n const currentPresentation = Flight.useBasicFetch<Presentation>(\n initialPresentationId &&\n ClassificationRequests.presentationById(initialPresentationId)\n );\n\n const hasLoaded = currentPresentation.hasCompleted && hasPresentationsLoaded;\n\n const classification = {\n name: TopicsHelper.getExploreAllTopicsTitle(currentPresentation.data?.name, availablePresentations?.length),\n banner: {\n url: TopicsHelper.getPresentationLevelImage(currentPresentation.data?.learningLevel, 'topic-banner')\n }\n } as Classification;\n\n const children = Flight.useBasicFetch<Classification[]>(\n hasLoaded &&\n ClassificationRequests.topLevelTopics(initialPresentationId || currentPresentation.data?.id)\n );\n\n const title = getPhrase('pageTitleSubject', { title: currentPresentation.data?.name });\n\n useSetPageMetadata({\n title,\n description: getPhrase('pageDescription', { title: currentPresentation.data?.name }),\n canonicalLink: SeoHelper.getCanonicalLink(),\n allowIndexing: SeoHelper.allowIndexing()\n });\n\n const classificationAppLinkFn = getClassificationAppLink();\n\n function getBreadcrumbs(): Breadcrumb[] {\n return [{\n name: getPhrase('discover'),\n appLink: {\n application: AppChannels.DASHBOARD,\n action: Actions.Dashboard.HOME\n }\n }, {\n name: TopicsHelper.getExploreAllTopicsBreadcrumb(currentPresentation.data?.name, availablePresentations?.length),\n active: true\n }];\n }\n\n /**\n * Render Variable\n */\n const dataLoaded = !!config.data && !!availablePresentations && children.data;\n const canViewBreadcrumbs = canAccessPresentation(currentPresentation.data?.id);\n\n /**\n * Additional subjects data to be mixed in with lower-level component analytics collection\n */\n const analyticsData = {\n presentationId: currentPresentation.data?.id,\n presentationName: currentPresentation.data?.name,\n widgetId: WidgetTypeId.Classifications,\n templateId: WidgetTemplate.CoverFixedPillListLarge\n };\n\n const TemplateComponent = hasTopicDirectories\n ? StatsCoverFixedPillListLargeWidgetTemplate\n : CoverFixedPillListLargeWidgetTemplate;\n \n return (\n <main className='bg-white px-4'>\n {dataLoaded\n ? (\n <BannerHeader\n heading={classification?.name}\n banner={classification?.banner}\n imageCdnUrl={config.data.imageCdnUrl}\n imageOptions={{ size: ImageSize.Large }}\n />\n ) : <PartialBannerHeader />\n }\n <div className={`py-3 mb-3 ${canViewBreadcrumbs ? 'border-bottom' : ''}`}>\n {(() => {\n if (!canViewBreadcrumbs)\n return <></>;\n\n if (!dataLoaded)\n return <PartialBreadcrumbs />;\n\n return <Breadcrumbs breadcrumbs={getBreadcrumbs()} />;\n })()}\n </div>\n <div className={styles.classificationPane}>\n {dataLoaded ? (\n <TemplateComponent\n id={currentPresentation.data?.id}\n name=''\n description=''\n analyticsData={analyticsData}\n content={children?.data}\n appLinks={{ classification: classificationAppLinkFn }}\n hasTableOfContents={false}\n settings={{ hasTopicDirectories }}\n isTertiaryCustomerWithoutExchange={isTertiary && !products?.hasProduct(ProductId.Exchange)}\n // TODO: Should this be optional?\n onToggleFollowClassification={() => {}}\n />\n ) : (\n <PartialDynamicWidget partialLoadingComponent={PartialSubjectWidgetItem} />\n )}\n\n {dataLoaded && hasTopicDirectories && availablePresentations?.length > 1 && (\n <ul className='pt-3 list-unstyled'>\n {availablePresentations.filter(p => p.id !== currentPresentation.data?.id).map(presentation => {\n return (\n <li key={presentation.id}>\n <AppLink\n className={`d-flex justify-content-between align-items-center text-white p-3 mb-3 rounded-3 ${styles.link} ${TopicsHelper.getMappedPresentationBackgroundColourClass(presentation?.learningLevel)}`}\n appLink={{\n application: AppChannels.SUBJECT,\n action: Actions.Subjects.PRESENTATION_TOPICS,\n params: { presentationId: presentation.id }\n }}\n appLinkOptions={{ middlewareOptions: { presentationSlug: presentation.vanitySlug } }}\n analyticsData={{\n id: presentation.id,\n name: presentation.name,\n description: presentation.description,\n currentPresentationId: currentPresentation.data?.id,\n currentPresentationName: currentPresentation.data?.name,\n currentPresentationDescription: currentPresentation.data?.description\n }}\n analyticsOptions={{\n entity: EntityType.Presentation,\n actionType: UserAction.Click,\n location: LocationContext.PresentationClassifications\n }}\n >\n <div className='h4 text-shadow mb-0'>\n {(availablePresentations.length > 2 || breakpoints.sm || breakpoints.xs) ? (\n <Text namespace={namespace} phrase='multiPresentationBanner' options={{ name: presentation.name }} />\n ) : (\n <Text namespace={namespace} phrase='singlePresentationBanner' options={{ name: presentation.name }} />\n )}\n </div>\n <IconButton\n svgName={breakpoints.xs ? cvSvgLibrary.Sparkle : cvSvgLibrary.School}\n openInNewTab\n className='btn btn-outline-dark'\n onClick={null}\n >\n <Text\n namespace={namespace}\n phrase={breakpoints.xs ? 'explore' : 'changeTo'}\n options={{ name: presentation.name }}\n />\n </IconButton>\n </AppLink>\n </li>\n );\n })}\n </ul>\n )}\n </div>\n </main>\n );\n}\n"],"names":["namespace","BackButton","props","textShadow","backToName","appLink","color","extraClasses","backPhrase","LanguageService","colorClass","textShadowClass","AppLink","className","SvgContainer","svgName","size","S","defaultProps","RATIO","width","height","getSizeClass","heading","length","BannerHeader","banner","imageCdnUrl","actions","sortComponent","blockColourClass","specialEvent","portalContainerContext","BannerPortalContext","imageWidth","useBreakpoints","xxl","specialEventIsToday","showComingSoon","today","DateHelper","Date","endDate","startDate","imageOptions","ratio","resizeType","url","ImageHelper","fallbackBaseUrl","fallbackCategoryName","type","containerProps","bannerClassName","style","backgroundImage","DetailsComponent","detailsComponent","logoFallbackBgClassName","getBgColorClass","PortalHelper","backButtonAppLink","backButtonText","backButtonClasses","alignLogoLeft","logo","GenericCalendarDate","body","text","month","getSpecialEventMonthText","theme","calendarTheme","Text","phrase","ComingSoonTag","LazyImage","src","backgroundColor","logoBgColour","Actions","actionsDropdownClassName","container","prevProps","nextProps","PartialBannerHeader","getClassificationAppLink","params","classification","id","ClassificationAppLinkHelper","getPhrase","PresentationTopicsView","hasTopicDirectories","useSettings","breakpoints","config","ConfigRequests","usePresentation","availablePresentations","activePresentation","hasPresentationsLoaded","canAccessPresentation","isTertiary","useIsTertiary","products","initialPresentationId","presentationId","currentPresentation","ClassificationRequests","hasLoaded","hasCompleted","name","TopicsHelper","data","learningLevel","children","title","useSetPageMetadata","description","canonicalLink","SeoHelper","allowIndexing","classificationAppLinkFn","dataLoaded","canViewBreadcrumbs","analyticsData","presentationName","widgetId","WidgetTypeId","templateId","WidgetTemplate","TemplateComponent","StatsCoverFixedPillListLargeWidgetTemplate","CoverFixedPillListLargeWidgetTemplate","Breadcrumbs","breadcrumbs","application","action","active","getBreadcrumbs","content","appLinks","hasTableOfContents","settings","isTertiaryCustomerWithoutExchange","hasProduct","ProductId","onToggleFollowClassification","partialLoadingComponent","filter","p","map","presentation","key","appLinkOptions","middlewareOptions","presentationSlug","vanitySlug","currentPresentationId","currentPresentationName","currentPresentationDescription","analyticsOptions","entity","actionType","location","sm","xs","options","IconButton","openInNewTab","onClick"],"sourceRoot":""}
1
+ {"version":3,"file":"scripts/9911-8892b6dbfe-lite.chunk.js","mappings":"4PASMA,EAAY,oBAkBZ,SAAUC,EAAWC,GACzB,MAA8D,eAC5DC,YAAY,GACTD,GAFGE,EAAU,EAAVA,WAAYC,EAAO,EAAPA,QAASC,EAAK,EAALA,MAAOC,EAAY,EAAZA,aAAcJ,EAAU,EAAVA,WAK5CK,EAAaJ,EACfK,EAAA,YAA0BT,EAAW,SAAU,CAAEI,WAAAA,IACjDK,EAAA,YAA0BT,EAAW,QAEnCU,EAAuB,UAAVJ,EAAoB,GAAK,aACtCK,EAAkBR,EAAa,cAAgB,GAErD,OACE,gBAACS,EAAA,EAAO,CACNP,QAASA,EACTQ,UAAS,mDAA8CN,EAAY,YAAIG,EAAU,YAAIC,IAErF,gBAACG,EAAA,EAAY,CAACC,QAAS,iBAA0BC,KAAMF,EAAAG,EAAA,SACvD,wBAAMJ,UAAU,QAAQL,GAG9B,CA3BAP,EAAWiB,aAAe,CACxBZ,MAAO,QACPC,aAAc,I,oGCvBhB,SAAgB,cAAgB,QAAQ,iBAAmB,QAAQ,sBAAwB,QAAQ,UAAY,QAAQ,cAAgB,QAAQ,kBAAoB,QAAQ,YAAc,QAAQ,sBAAwB,QAAQ,aAAe,QAAQ,QAAU,SCuBlQ,IAAMY,EAAQ,GAAH,OAAM,IAAmB,cAAmBC,MAAK,YAAI,IAAmB,cAAmBC,QAatG,SAASC,EAAaC,GACpB,OAAIA,EAAQC,OAAS,IACZ,KAEF,cACT,CAwBA,IAEaC,EAAe,OAAW,SAASvB,G,YACtCqB,EAAyFrB,EAAzFqB,QAASG,EAAgFxB,EAAhFwB,OAAQC,EAAwEzB,EAAxEyB,YAAaC,EAA2D1B,EAA3D0B,QAASC,EAAkD3B,EAAlD2B,cAAeC,EAAmC5B,EAAnC4B,iBAAkBC,EAAiB7B,EAAjB6B,aAE1EC,EAAyB,aAAiBC,EAAA,GAE1CC,GA5Cc,EAAAC,EAAA,KAEJC,IALS,KADL,KAkDdC,EAAsB,UAAc,WACxC,IAAKN,GAAgB7B,EAAMoC,eACzB,OAAO,EAET,IAAMC,EAAQC,EAAA,SAAkB,IAAIC,KAAQ,cAE5C,OAAKV,EAAaW,QAGXX,EAAaY,WAAaJ,GAASR,EAAaW,SAAWH,EAFzDR,EAAaY,YAAcJ,CAGtC,EAAG,CAACR,IAYEa,EAAe1C,EAAM0C,cAAgB,CACzCxB,MAAOc,EACPW,MAAO1B,EACP2B,WAAY,YAGRC,IAAQrB,KAAYC,GAAeqB,EAAA,kBAA4BtB,EAAQ,CAC3EuB,gBAAiBtB,EACjBuB,qBAAsB3B,EACtB4B,KAAM,cACLP,GAEGQ,EAAgG,CACpGvC,UAAW,wBAAF,OAA0BX,EAAMmD,iBACzCC,MAAOP,EAAM,CAAEQ,gBAAiB,QAAF,OAAUR,EAAG,OAAS,CAAC,IAGlDrB,GAAUI,WACNsB,EAAeE,MACtBF,EAAevC,WAAa,IAAJ,OAAQiB,IAGlC,IAAM0B,EAAmBtD,EAAMuD,iBAEzBC,GAA0B,EAAAC,EAAA,GAAgBzD,EAAMqB,QAAS,KAE/D,OAAOqC,EAAA,yBAEL,0CAAYR,GACV,uBAAKvC,UAAS,oBAAe,YAAgB,oCAC1CX,EAAM2D,mBACL,uBAAKhD,UAAU,QACb,gBAACZ,EAAU,CACTI,QAASH,EAAM2D,kBACfzD,WAAYF,EAAM4D,eAClBvD,aAAcL,EAAM6D,kBACpBzD,MAAM,WAKZ,uBAAKO,UAAS,UAAKX,EAAM8D,cAAgB,iEAAmE,GAAH,OAAM,gBAAoB,kBAAmB,QAAV,EAAA9D,EAAM+D,YAAI,eAAElB,KAAM,wBAA+B,QACxLhB,GACD,uBAAKlB,UAAS,4BAAuB,0BACnC,gBAACqD,EAAA,EAAmB,CAClBC,KAAM,CACJhB,KAAMpB,EAAaW,QAAU,QAAU,MACvC0B,KAAMrC,EAAaW,QAAO,UACnBF,EAAA,SAAkBT,EAAaY,UAAW,MAAK,YAAIH,EAAA,SAAkBT,EAAaW,QAAS,OAC9FF,EAAA,SAAkBT,EAAaY,UAAW,OAEhD0B,MA7Dd,SAAkCtC,GAChC,OAAKA,EAAaW,QAGdF,EAAA,SAAkBT,EAAaY,UAAWZ,EAAaW,QAAS,SAC3DF,EAAA,SAAkBT,EAAaY,UAAW,QAE5C,GAAP,OAAUH,EAAA,SAAkBT,EAAaY,UAAW,OAAM,cAAMH,EAAA,SAAkBT,EAAaW,QAAS,QAL/FF,EAAA,SAAkBT,EAAaY,UAAW,OAMrD,CAqDqB2B,CAAyBvC,GAChCwC,MAAOrE,EAAMsE,iBAInB,2BACGnC,GACC,uBAAKxB,UAAU,kFACb,gBAAC4D,EAAA,EAAI,CAACzE,UA1FJ,sBA0F0B0E,OAAO,aAGtCxE,EAAMoC,gBACL,gBAACqC,EAAA,EAAa,CAAC9D,UAAU,yEAE3B,uBAAKA,UAAU,6BACZX,EAAM8D,gBAA2B,QAAV,EAAA9D,EAAM+D,YAAI,eAAElB,MAClC,uBAAKlC,UAAS,UAAK,oBAAwB,kEAA0D6C,IACnG,gBAACkB,EAAA,EAAS,CACRC,IAAK7B,EAAA,YAAgC,QAAV,EAAA9C,EAAM+D,YAAI,eAAElB,IAAK,CAAE/B,KAAM,cACpDsC,MAAO,CAAEwB,gBAAiB5E,EAAM6E,iBAItC,sBAAIlE,UAAS,sDAAiD,UAAc,YAAIS,EAAaC,GAAQ,YAAIrB,EAAM8D,cAAgB,OAAS,KACrIzC,EACAiC,GAAoB,gBAACA,EAAgB,WAIzC5B,GACD,uBAAKf,UAAW,oBACd,gBAACmE,EAAA,EAAO,CACNpD,QAASA,EACTC,cAAeA,EACfoD,yBAA0B/E,EAAM+E,8BAKtC/E,EAAM8D,kBAA6B,QAAV,EAAA9D,EAAM+D,YAAI,eAAElB,MACrC,uBAAKlC,UAAW,iBACd,uBACEgE,IAAK7B,EAAA,YAAsB9C,EAAM+D,KAAKlB,IAAK,CAAE/B,KAAM,cACnDH,UAAU,sBAMpBmB,aAAsB,EAAtBA,EAAwBkD,UAE5B,EAAG,SAACC,EAAWC,G,QAAuB,OACpCD,EAAUvD,UAAYwD,EAAUxD,SAC7BuD,EAAU5D,UAAY6D,EAAU7D,UAClB,QAAd,EAAA4D,EAAUlB,YAAI,eAAElB,QAAsB,QAAd,EAAAqC,EAAUnB,YAAI,eAAElB,I,GAGvC,SAAUsC,IACd,IAAMrD,EAAyB,aAAiBC,EAAA,GAEhD,OAAO2B,EAAA,yBACL,uBAAK/C,UAAS,oDAA+C,YAC7DmB,aAAsB,EAAtBA,EAAwBkD,UAE5B,C,kaC1MaI,EAA2B,SAACC,GAAmB,OAC1D,SAACC,GACC,OAAKA,aAAc,EAAdA,EAAgBC,IAGdC,EAAA,aAAuCF,EAAgBD,GAAU,CAAC,GAFhE,IAGX,CAAC,ECfH,SAAgB,mBAAqB,SCuCrC,IAAMvF,EAAY,8BACZ2F,EAAYlF,EAAA,mBAAiCT,GAU7C,SAAU4F,EAAuB1F,G,sBAC7B2F,GAAwB,EAAAC,EAAA,GAAY,MAApCD,oBACFE,GAAc,EAAA5D,EAAA,KAKd6D,EAAS,kBAA6BC,EAAA,YAE5C,GAKI,EAAAC,EAAA,KAJFC,EAAsB,EAAtBA,uBACAC,EAAkB,EAAlBA,mBACAC,EAAsB,EAAtBA,uBACAC,EAAqB,EAArBA,sBAGIC,GAAa,EAAAC,EAAA,KACbC,GAAW,SAMXC,EAAwBxG,EAAMyG,iBAAkBP,aAAkB,EAAlBA,EAAoBX,IAEpEmB,GAAsB,kBAC1BF,GACAG,EAAA,mBAAwCH,IAGpCI,GAAYF,GAAoBG,cAAgBV,EAEhDb,GAAiB,CACrBwB,KAAMC,EAAA,2BAA8D,QAAxB,EAAAL,GAAoBM,YAAI,eAAEF,KAAMb,aAAsB,EAAtBA,EAAwB3E,QACpGE,OAAQ,CACNqB,IAAKkE,EAAA,4BAA+D,QAAxB,EAAAL,GAAoBM,YAAI,eAAEC,cAAe,kBAInFC,GAAW,kBACfN,IACAD,EAAA,iBAAsCH,IAAiD,QAAxB,EAAAE,GAAoBM,YAAI,eAAEzB,MAGrF4B,GAAQ1B,EAAU,mBAAoB,CAAE0B,MAA+B,QAAxB,EAAAT,GAAoBM,YAAI,eAAEF,QAE/E,EAAAM,EAAA,GAAmB,CACjBD,MAAAA,GACAE,YAAa5B,EAAU,kBAAmB,CAAE0B,MAA+B,QAAxB,EAAAT,GAAoBM,YAAI,eAAEF,OAC7EQ,cAAeC,EAAA,qBACfC,cAAeD,EAAA,oBAGjB,IAAME,GAA0BrC,IAkBhC,IAAMsC,KAAe5B,EAAOkB,QAAUf,GAA0BiB,GAASF,KACnEW,GAAqBvB,EAA8C,QAAxB,EAAAM,GAAoBM,YAAI,eAAEzB,IAKrEqC,GAAgB,CACpBnB,eAAwC,QAAxB,EAAAC,GAAoBM,YAAI,eAAEzB,GAC1CsC,iBAA0C,QAAxB,EAAAnB,GAAoBM,YAAI,eAAEF,KAC5CgB,SAAUC,EAAA,kBACVC,WAAYC,EAAA,2BAGRC,GAAoBvC,EACtBwC,EAAA,EACAC,EAAA,EAEJ,OACE,wBAAMzH,UAAU,iBACb+G,GAEG,gBAACnG,EAAA,EAAY,CACXF,QAASiE,cAAc,EAAdA,GAAgBwB,KACzBtF,OAAQ8D,cAAc,EAAdA,GAAgB9D,OACxBC,YAAaqE,EAAOkB,KAAKvF,YACzBiB,aAAc,CAAE5B,KAAM,cAEtB,gBAAC,IAAmB,MAE1B,uBAAKH,UAAS,oBAAegH,GAAqB,gBAAkB,KAE3DA,GAGAD,GAGE,gBAACW,EAAA,GAAW,CAACC,YArD5B,W,MACE,MAAO,CAAC,CACNxB,KAAMrB,EAAU,YAChBtF,QAAS,CACPoI,YAAa,cACbC,OAAQ,qBAET,CACD1B,KAAMC,EAAA,gCAAmE,QAAxB,EAAAL,GAAoBM,YAAI,eAAEF,KAAMb,aAAsB,EAAtBA,EAAwB3E,QACzGmH,QAAQ,GAEZ,CA0CyCC,KAFxB,gBAAC,KAAkB,MAHnB,kCAQb,uBAAK/H,UAAW,sBACb+G,GACC,gBAACQ,GAAiB,CAChB3C,GAA4B,QAAxB,EAAAmB,GAAoBM,YAAI,eAAEzB,GAC9BuB,KAAK,GACLO,YAAY,GACZO,cAAeA,GACfe,QAASzB,cAAQ,EAARA,GAAUF,KACnB4B,SAAU,CAAEtD,eAAgBmC,IAC5BoB,oBAAoB,EACpBC,SAAU,CAAEnD,oBAAAA,GACZoD,kCAAmC1C,KAAeE,aAAQ,EAARA,EAAUyC,WAAWC,EAAA,aAEvEC,6BAA8B,WAAO,IAGvC,gBAAC,KAAoB,CAACC,wBAAyB,OAGhDzB,IAAc/B,IAAuBM,aAAsB,EAAtBA,EAAwB3E,QAAS,GACrE,sBAAIX,UAAU,sBACXsF,EAAuBmD,OAAO,SAAAC,GAAI,MAAC,OAAAA,EAAE9D,MAA+B,QAAxB,EAAAmB,GAAoBM,YAAI,eAAEzB,GAAE,GAAE+D,IAAI,SAAAC,G,UAC7E,OACE,sBAAIC,IAAKD,EAAahE,IACpB,gBAAC7E,EAAA,EAAO,CACNC,UAAS,0FAAqF,OAAW,YAAIoG,EAAA,6CAAwDwC,aAAY,EAAZA,EAActC,gBACnL9G,QAAS,CACPoI,YAAa,YACbC,OAAQ,iCACRnD,OAAQ,CAAEoB,eAAgB8C,EAAahE,KAEzCkE,eAAgB,CAAEC,kBAAmB,CAAEC,iBAAkBJ,EAAaK,aACtEhC,cAAe,CACbrC,GAAIgE,EAAahE,GACjBuB,KAAMyC,EAAazC,KACnBO,YAAakC,EAAalC,YAC1BwC,sBAA+C,QAAxB,EAAAnD,GAAoBM,YAAI,eAAEzB,GACjDuE,wBAAiD,QAAxB,EAAApD,GAAoBM,YAAI,eAAEF,KACnDiD,+BAAwD,QAAxB,EAAArD,GAAoBM,YAAI,eAAEK,aAE5D2C,iBAAkB,CAChBC,OAAQ,kBACRC,WAAY,WACZC,SAAU,mCAGZ,uBAAKxJ,UAAU,uBACXsF,EAAuB3E,OAAS,GAAKuE,EAAYuE,IAAMvE,EAAYwE,GACnE,gBAAC9F,EAAA,EAAI,CAACzE,UAAWA,EAAW0E,OAAO,0BAA0B8F,QAAS,CAAExD,KAAMyC,EAAazC,QAE3F,gBAACvC,EAAA,EAAI,CAACzE,UAAWA,EAAW0E,OAAO,2BAA2B8F,QAAS,CAAExD,KAAMyC,EAAazC,SAGhG,gBAACyD,EAAA,EAAU,CACT1J,QAASgF,EAAYwE,GAAK,aAAuB,YACjDG,cAAY,EACZ7J,UAAU,uBACV8J,QAAS,MAET,gBAAClG,EAAA,EAAI,CACHzE,UAAWA,EACX0E,OAAQqB,EAAYwE,GAAK,UAAY,WACrCC,QAAS,CAAExD,KAAMyC,EAAazC,UAM1C,KAMZ,C","sources":["file:///app/packages/libs/shared/src/components/back-button/BackButton.tsx","file:///app/packages/libs/shared/src/components/banner-header/banner-header.scss","file:///app/packages/libs/shared/src/components/banner-header/BannerHeader.tsx","file:///app/packages/projects/lite/src/apps/subjects/utils/ClassificationAppLinks.ts","file:///app/packages/projects/lite/src/apps/subjects/views/presentation-topics/presentation-topics.scss","file:///app/packages/projects/lite/src/apps/subjects/views/presentation-topics/PresentationTopicsView.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'shared.backButton';\n\ninterface BackButtonProps {\n appLink: Core.AppLink;\n backToName?: string;\n color?: 'black' | 'white';\n extraClasses?: string;\n /**\n * Whether or not the button text has a text shadow. Defaults to true\n */\n textShadow?: boolean;\n}\n\nBackButton.defaultProps = {\n color: 'black',\n extraClasses: ''\n};\n\nexport function BackButton(props: BackButtonProps): React.ReactElement {\n const { backToName, appLink, color, extraClasses, textShadow } = {\n textShadow: true,\n ...props\n };\n\n const backPhrase = backToName\n ? LanguageService.getPhrase(namespace, 'backTo', { backToName })\n : LanguageService.getPhrase(namespace, 'back');\n\n const colorClass = color === 'black' ? '' : 'text-white';\n const textShadowClass = textShadow ? 'text-shadow' : '';\n\n return (\n <AppLink\n appLink={appLink}\n className={`d-inline-flex align-items-center h5 mb-0 ${extraClasses} ${colorClass} ${textShadowClass}`}\n >\n <SvgContainer svgName={cvSvgLibrary.ChevronLeft} size={SvgContainerSize.Medium} />\n <span className='ms-1'>{backPhrase}</span>\n </AppLink>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"bannerContent\":\"sSCTB\",\"actionsContainer\":\"Z5WI2\",\"bannerContentWithLogo\":\"rgs7Q\",\"container\":\"M51HJ\",\"logoContainer\":\"vkeJk\",\"logoContainerLeft\":\"M3U9B\",\"logoHeading\":\"EtRwC\",\"specialEventContainer\":\"rOxDc\",\"headingLarge\":\"_8pnV\",\"heading\":\"JXVBH\"};","import * as React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\nimport { PortalHelper } from 'libs/common/react/utils/PortalHelper';\n\nimport { ComingSoonTag } from 'libs/shared/apps/calendar/components/coming-soon-tag/ComingSoonTag';\nimport { GenericCalendarDate } from 'libs/shared/apps/calendar/components/generic-calendar-date/GenericCalendarDate';\nimport { CalendarTheme } from 'libs/shared/apps/calendar/interfaces/CalendarTheme';\nimport { ActionOptions, Actions } from 'libs/shared/components/actions/Actions';\nimport { BackButton } from 'libs/shared/components/back-button/BackButton';\nimport { LazyImage } from 'libs/shared/components/lazy-image/LazyImage';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { BG_COLOUR_CLASS_NAMES } from 'libs/shared/constants/ColourClassNames';\nimport { ImageMinDimensions } from 'libs/shared/constants/ImageSizes';\nimport { BannerPortalContext } from 'libs/shared/context/BannerPortalContext';\nimport { ImageSize, ImageType, ResizeType } from 'libs/shared/enums/Images';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Banner, CalendarEvent, Logo } from 'libs/shared/interfaces';\nimport { getBgColorClass } from 'libs/shared/utils/getBgColorClass';\nimport { ImageHelper, ImageOptions } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './banner-header.scss';\n\nconst RATIO = `${ImageMinDimensions[ImageType.Banners].width}:${ImageMinDimensions[ImageType.Banners].height}`;\nconst DEFAULT_WIDTH = 1200; // This is ImageSize.Large for a Banner.\nconst LARGE_SCREEN_WIDTH = 1920;\n\nfunction useGetImageWidth(): number {\n const breakpoints = useBreakpoints();\n\n if (breakpoints.xxl)\n return LARGE_SCREEN_WIDTH;\n\n return DEFAULT_WIDTH;\n}\n\nfunction getSizeClass(heading: string): string {\n if (heading.length < 160)\n return 'h1';\n\n return styles.headingLarge;\n}\n\ninterface BannerHeaderProps {\n heading: string;\n banner?: Banner;\n bannerClassName?: string;\n imageCdnUrl?: string;\n logo?: Logo;\n logoBgColour?: string;\n actions?: ActionOptions[];\n specialEvent?: CalendarEvent;\n backButtonAppLink?: Core.AppLink;\n backButtonText?: string;\n backButtonClasses?: string;\n sortComponent?: JSX.Element;\n blockColourClass?: string;\n actionsDropdownClassName?: string;\n detailsComponent?: () => React.ReactElement;\n imageOptions?: ImageOptions;\n showComingSoon?: boolean;\n alignLogoLeft?: boolean;\n calendarTheme?: CalendarTheme;\n}\n\nconst namespace = 'shared.bannerHeader';\n\nexport const BannerHeader = React.memo(function(props: React.PropsWithChildren<BannerHeaderProps>): React.ReactElement {\n const { heading, banner, imageCdnUrl, actions, sortComponent, blockColourClass, specialEvent } = props;\n\n const portalContainerContext = React.useContext(BannerPortalContext);\n\n const imageWidth = useGetImageWidth();\n\n const specialEventIsToday = React.useMemo(() => {\n if (!specialEvent || props.showComingSoon)\n return false;\n\n const today = DateHelper.format(new Date(), 'YYYY-MM-DD');\n\n if (!specialEvent.endDate)\n return specialEvent.startDate === today;\n\n return specialEvent.startDate <= today && specialEvent.endDate >= today;\n }, [specialEvent]);\n\n function getSpecialEventMonthText(specialEvent: CalendarEvent): string {\n if (!specialEvent.endDate)\n return DateHelper.format(specialEvent.startDate, 'MMMM');\n\n if (DateHelper.isSame(specialEvent.startDate, specialEvent.endDate, 'month'))\n return DateHelper.format(specialEvent.startDate, 'MMMM');\n\n return `${DateHelper.format(specialEvent.startDate, 'MMM')} - ${DateHelper.format(specialEvent.endDate, 'MMM')}`;\n }\n\n const imageOptions = props.imageOptions || {\n width: imageWidth,\n ratio: RATIO,\n resizeType: ResizeType.Cover\n };\n\n const url = !!banner && !!imageCdnUrl && ImageHelper.createBannerUrl(banner, {\n fallbackBaseUrl: imageCdnUrl,\n fallbackCategoryName: heading,\n type: ImageType.Banners\n }, imageOptions);\n\n const containerProps: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> = {\n className: `banner banner-header ${props.bannerClassName}`,\n style: url ? { backgroundImage: `url('${url}')` } : {}\n };\n\n if (!banner && blockColourClass) {\n delete containerProps.style;\n containerProps.className += ` ${blockColourClass}`;\n }\n\n const DetailsComponent = props.detailsComponent;\n\n const logoFallbackBgClassName = getBgColorClass(props.heading, BG_COLOUR_CLASS_NAMES);\n\n return PortalHelper.renderInPortalIfExists(\n // \"banner\" is used in playlists in Online. banner-header is used by all other projects\n <header {...containerProps}>\n <div className={`container ${styles.container} position-relative inner-banner`}>\n {props.backButtonAppLink && (\n <div className='pt-3'>\n <BackButton\n appLink={props.backButtonAppLink}\n backToName={props.backButtonText}\n extraClasses={props.backButtonClasses}\n color='white'\n />\n </div>\n )}\n \n <div className={`${props.alignLogoLeft ? 'position-absolute top-50 start-0 translate-middle-y w-100 ps-4' : `${styles.bannerContent} px-2 ${props.logo?.url ? styles.bannerContentWithLogo : ''}`}`}>\n {!!specialEvent && (\n <div className={`position-relative ${styles.specialEventContainer}`}>\n <GenericCalendarDate\n body={{\n type: specialEvent.endDate ? 'range' : 'day',\n text: specialEvent.endDate\n ? `${DateHelper.format(specialEvent.startDate, 'DD')}-${DateHelper.format(specialEvent.endDate, 'DD')}`\n : DateHelper.format(specialEvent.startDate, 'DD')\n }}\n month={getSpecialEventMonthText(specialEvent)}\n theme={props.calendarTheme}\n />\n </div>\n )}\n <div>\n {specialEventIsToday && (\n <div className='rounded-pill py-1 px-2 my-1 me-1 fw-semibold bg-light-blue lh-1 d-inline-block'>\n <Text namespace={namespace} phrase='onToday' />\n </div>\n )}\n {props.showComingSoon && (\n <ComingSoonTag className='pe-2 fw-semibold mb-1 rounded-pill justify-content-start text-nowrap' />\n )}\n <div className='d-flex align-items-center'>\n {props.alignLogoLeft && props.logo?.url &&\n <div className={`${styles.logoContainerLeft} d-none d-md-block rounded-circle overflow-hidden me-3 ${logoFallbackBgClassName}`}>\n <LazyImage\n src={ImageHelper.createUrl(props.logo?.url, { size: ImageSize.Medium })}\n style={{ backgroundColor: props.logoBgColour }}\n />\n </div>\n }\n <h1 className={`text-white text-shadow pe-3 position-static ${styles.heading} ${getSizeClass(heading)} ${props.alignLogoLeft ? 'w-50' : ''}`}>\n {heading}\n {DetailsComponent && <DetailsComponent />}\n </h1>\n </div>\n </div>\n {!!actions && (\n <div className={styles.actionsContainer}>\n <Actions\n actions={actions}\n sortComponent={sortComponent}\n actionsDropdownClassName={props.actionsDropdownClassName}\n />\n </div>\n )}\n </div>\n {!props.alignLogoLeft && !!props.logo?.url &&\n <div className={styles.logoContainer}>\n <img\n src={ImageHelper.createUrl(props.logo.url, { size: ImageSize.Medium })}\n className='rounded-circle'\n />\n </div>\n }\n </div>\n </header>,\n portalContainerContext?.container\n );\n}, (prevProps, nextProps): boolean => (\n prevProps.actions === nextProps.actions\n && prevProps.heading === nextProps.heading\n && prevProps.logo?.url === nextProps.logo?.url\n));\n\nexport function PartialBannerHeader(): JSX.Element {\n const portalContainerContext = React.useContext(BannerPortalContext);\n\n return PortalHelper.renderInPortalIfExists(\n <div className={`partial-banner partial-loading-background ${styles.banner}`} />,\n portalContainerContext?.container\n );\n}","import { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { Classification, Playlist } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { ClassificationAppLinkHelper } from 'shared/utils/ClassificationAppLinkHelper';\n\nexport const getClassificationAppLink = (params?: HashObject) =>\n (classification?: Classification): Core.AppLink => {\n if (!classification?.id)\n return null;\n\n return ClassificationAppLinkHelper.getAppLink(classification, params || {});\n };\n\nexport const getPlaylistAppLink = (playlist: Playlist, classificationId: string): Core.AppLink => ({\n application: AppChannels.PLAYLISTS,\n action: Actions.Playlists.PLAYLIST,\n args: [ playlist.id, TextHelper.slugify(playlist.name) ],\n params: { classificationId }\n});\n\nexport const getAllTopicsAppLink = (presentationId?: string): Core.AppLink => ({\n application: AppChannels.SUBJECT,\n action: Actions.Subjects.PRESENTATION_TOPICS,\n params: presentationId ? { presentationId } : {}\n});","// extracted by mini-css-extract-plugin\nexport default {\"classificationPane\":\"ftCMX\"};","import * as React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { BannerHeader, PartialBannerHeader } from 'libs/shared/components/banner-header/BannerHeader';\nimport { Breadcrumb, Breadcrumbs, PartialBreadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CoverFixedPillListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-fixed-pill-list-large/CoverFixedPillListLargeWidgetTemplate';\nimport { StatsCoverFixedPillListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/stats-cover-fixed-pill-list-large/StatsCoverFixedPillListLargeWidgetTemplate';\nimport { PartialDynamicWidget } from 'libs/shared/components/widgets/dynamic-widget';\nimport { PartialSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { ClassificationRequests } from 'libs/shared/flight-requests/ClassificationRequests';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { useProducts } from 'libs/shared/hooks/UseProducts';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Classification, Config, Presentation } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { usePresentation } from 'shared/hooks/usePresentation';\nimport { SeoHelper } from 'shared/utils/SeoHelper';\n\nimport { useIsTertiary } from 'apps/onboarding/hooks/useIsTertiary';\nimport { getClassificationAppLink } from 'apps/subjects/utils/ClassificationAppLinks';\n\nimport styles from './presentation-topics.scss';\n\nconst namespace = 'subjects.presentationTopics';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface PresentationTopicsViewQueryParams {\n presentationId?: string;\n}\n\ninterface PresentationTopicsViewProps {\n presentationId?: string;\n}\n\nexport function PresentationTopicsView(props: PresentationTopicsViewProps): React.ReactElement {\n const { hasTopicDirectories } = useSettings(null);\n const breakpoints = useBreakpoints();\n\n /**\n * Data fetching\n */\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const {\n availablePresentations,\n activePresentation,\n hasPresentationsLoaded,\n canAccessPresentation\n } = usePresentation();\n\n const isTertiary = useIsTertiary();\n const products = useProducts();\n\n /**\n * We'll prefer the presentationId query param, but fallback to the\n * user's activePresentation where the queryParam doesn't exist.\n */\n const initialPresentationId = props.presentationId || activePresentation?.id;\n\n const currentPresentation = Flight.useBasicFetch<Presentation>(\n initialPresentationId &&\n ClassificationRequests.presentationById(initialPresentationId)\n );\n\n const hasLoaded = currentPresentation.hasCompleted && hasPresentationsLoaded;\n\n const classification = {\n name: TopicsHelper.getExploreAllTopicsTitle(currentPresentation.data?.name, availablePresentations?.length),\n banner: {\n url: TopicsHelper.getPresentationLevelImage(currentPresentation.data?.learningLevel, 'topic-banner')\n }\n } as Classification;\n\n const children = Flight.useBasicFetch<Classification[]>(\n hasLoaded &&\n ClassificationRequests.topLevelTopics(initialPresentationId || currentPresentation.data?.id)\n );\n\n const title = getPhrase('pageTitleSubject', { title: currentPresentation.data?.name });\n\n useSetPageMetadata({\n title,\n description: getPhrase('pageDescription', { title: currentPresentation.data?.name }),\n canonicalLink: SeoHelper.getCanonicalLink(),\n allowIndexing: SeoHelper.allowIndexing()\n });\n\n const classificationAppLinkFn = getClassificationAppLink();\n\n function getBreadcrumbs(): Breadcrumb[] {\n return [{\n name: getPhrase('discover'),\n appLink: {\n application: AppChannels.DASHBOARD,\n action: Actions.Dashboard.HOME\n }\n }, {\n name: TopicsHelper.getExploreAllTopicsBreadcrumb(currentPresentation.data?.name, availablePresentations?.length),\n active: true\n }];\n }\n\n /**\n * Render Variable\n */\n const dataLoaded = !!config.data && !!availablePresentations && children.data;\n const canViewBreadcrumbs = canAccessPresentation(currentPresentation.data?.id);\n\n /**\n * Additional subjects data to be mixed in with lower-level component analytics collection\n */\n const analyticsData = {\n presentationId: currentPresentation.data?.id,\n presentationName: currentPresentation.data?.name,\n widgetId: WidgetTypeId.Classifications,\n templateId: WidgetTemplate.CoverFixedPillListLarge\n };\n\n const TemplateComponent = hasTopicDirectories\n ? StatsCoverFixedPillListLargeWidgetTemplate\n : CoverFixedPillListLargeWidgetTemplate;\n \n return (\n <main className='bg-white px-4'>\n {dataLoaded\n ? (\n <BannerHeader\n heading={classification?.name}\n banner={classification?.banner}\n imageCdnUrl={config.data.imageCdnUrl}\n imageOptions={{ size: ImageSize.Large }}\n />\n ) : <PartialBannerHeader />\n }\n <div className={`py-3 mb-3 ${canViewBreadcrumbs ? 'border-bottom' : ''}`}>\n {(() => {\n if (!canViewBreadcrumbs)\n return <></>;\n\n if (!dataLoaded)\n return <PartialBreadcrumbs />;\n\n return <Breadcrumbs breadcrumbs={getBreadcrumbs()} />;\n })()}\n </div>\n <div className={styles.classificationPane}>\n {dataLoaded ? (\n <TemplateComponent\n id={currentPresentation.data?.id}\n name=''\n description=''\n analyticsData={analyticsData}\n content={children?.data}\n appLinks={{ classification: classificationAppLinkFn }}\n hasTableOfContents={false}\n settings={{ hasTopicDirectories }}\n isTertiaryCustomerWithoutExchange={isTertiary && !products?.hasProduct(ProductId.Exchange)}\n // TODO: Should this be optional?\n onToggleFollowClassification={() => {}}\n />\n ) : (\n <PartialDynamicWidget partialLoadingComponent={PartialSubjectWidgetItem} />\n )}\n\n {dataLoaded && hasTopicDirectories && availablePresentations?.length > 1 && (\n <ul className='pt-3 list-unstyled'>\n {availablePresentations.filter(p => p.id !== currentPresentation.data?.id).map(presentation => {\n return (\n <li key={presentation.id}>\n <AppLink\n className={`d-flex justify-content-between align-items-center text-white p-3 mb-3 rounded-3 ${styles.link} ${TopicsHelper.getMappedPresentationBackgroundColourClass(presentation?.learningLevel)}`}\n appLink={{\n application: AppChannels.SUBJECT,\n action: Actions.Subjects.PRESENTATION_TOPICS,\n params: { presentationId: presentation.id }\n }}\n appLinkOptions={{ middlewareOptions: { presentationSlug: presentation.vanitySlug } }}\n analyticsData={{\n id: presentation.id,\n name: presentation.name,\n description: presentation.description,\n currentPresentationId: currentPresentation.data?.id,\n currentPresentationName: currentPresentation.data?.name,\n currentPresentationDescription: currentPresentation.data?.description\n }}\n analyticsOptions={{\n entity: EntityType.Presentation,\n actionType: UserAction.Click,\n location: LocationContext.PresentationClassifications\n }}\n >\n <div className='h4 text-shadow mb-0'>\n {(availablePresentations.length > 2 || breakpoints.sm || breakpoints.xs) ? (\n <Text namespace={namespace} phrase='multiPresentationBanner' options={{ name: presentation.name }} />\n ) : (\n <Text namespace={namespace} phrase='singlePresentationBanner' options={{ name: presentation.name }} />\n )}\n </div>\n <IconButton\n svgName={breakpoints.xs ? cvSvgLibrary.Sparkle : cvSvgLibrary.School}\n openInNewTab\n className='btn btn-outline-dark'\n onClick={null}\n >\n <Text\n namespace={namespace}\n phrase={breakpoints.xs ? 'explore' : 'changeTo'}\n options={{ name: presentation.name }}\n />\n </IconButton>\n </AppLink>\n </li>\n );\n })}\n </ul>\n )}\n </div>\n </main>\n );\n}\n"],"names":["namespace","BackButton","props","textShadow","backToName","appLink","color","extraClasses","backPhrase","LanguageService","colorClass","textShadowClass","AppLink","className","SvgContainer","svgName","size","S","defaultProps","RATIO","width","height","getSizeClass","heading","length","BannerHeader","banner","imageCdnUrl","actions","sortComponent","blockColourClass","specialEvent","portalContainerContext","BannerPortalContext","imageWidth","useBreakpoints","xxl","specialEventIsToday","showComingSoon","today","DateHelper","Date","endDate","startDate","imageOptions","ratio","resizeType","url","ImageHelper","fallbackBaseUrl","fallbackCategoryName","type","containerProps","bannerClassName","style","backgroundImage","DetailsComponent","detailsComponent","logoFallbackBgClassName","getBgColorClass","PortalHelper","backButtonAppLink","backButtonText","backButtonClasses","alignLogoLeft","logo","GenericCalendarDate","body","text","month","getSpecialEventMonthText","theme","calendarTheme","Text","phrase","ComingSoonTag","LazyImage","src","backgroundColor","logoBgColour","Actions","actionsDropdownClassName","container","prevProps","nextProps","PartialBannerHeader","getClassificationAppLink","params","classification","id","ClassificationAppLinkHelper","getPhrase","PresentationTopicsView","hasTopicDirectories","useSettings","breakpoints","config","ConfigRequests","usePresentation","availablePresentations","activePresentation","hasPresentationsLoaded","canAccessPresentation","isTertiary","useIsTertiary","products","initialPresentationId","presentationId","currentPresentation","ClassificationRequests","hasLoaded","hasCompleted","name","TopicsHelper","data","learningLevel","children","title","useSetPageMetadata","description","canonicalLink","SeoHelper","allowIndexing","classificationAppLinkFn","dataLoaded","canViewBreadcrumbs","analyticsData","presentationName","widgetId","WidgetTypeId","templateId","WidgetTemplate","TemplateComponent","StatsCoverFixedPillListLargeWidgetTemplate","CoverFixedPillListLargeWidgetTemplate","Breadcrumbs","breadcrumbs","application","action","active","getBreadcrumbs","content","appLinks","hasTableOfContents","settings","isTertiaryCustomerWithoutExchange","hasProduct","ProductId","onToggleFollowClassification","partialLoadingComponent","filter","p","map","presentation","key","appLinkOptions","middlewareOptions","presentationSlug","vanitySlug","currentPresentationId","currentPresentationName","currentPresentationDescription","analyticsOptions","entity","actionType","location","sm","xs","options","IconButton","openInNewTab","onClick"],"sourceRoot":""}