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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/dist/bundles.json +1 -1
  2. package/dist/css/{1820-lite-ebb89eab7a.chunk.css → 1820-lite-8008c78ef7.chunk.css} +1 -1
  3. package/dist/css/{2120-lite-dd1595051d.chunk.css → 2120-lite-b1876117b4.chunk.css} +1 -1
  4. package/dist/css/{2137-lite-7045732fc8.chunk.css → 2137-lite-6e9d11bd5b.chunk.css} +1 -1
  5. package/dist/css/{2795-lite-1641e6fbf9.chunk.css → 2795-lite-34f8ca5018.chunk.css} +1 -1
  6. package/dist/css/{3515-lite-66473d08ed.chunk.css → 3515-lite-10695a1950.chunk.css} +1 -1
  7. package/dist/css/{458-lite-66473d08ed.chunk.css → 458-lite-10695a1950.chunk.css} +1 -1
  8. package/dist/css/{5242-lite-3e960b685e.chunk.css → 5242-lite-30642a9642.chunk.css} +1 -1
  9. package/dist/css/{5446-lite-ae2395342f.chunk.css → 5446-lite-2e956685f4.chunk.css} +1 -1
  10. package/dist/css/{6850-lite-c1a8731a93.chunk.css → 6850-lite-0bf8514497.chunk.css} +2 -2
  11. package/dist/css/{7987-lite-94679244a2.chunk.css → 7987-lite-fd431fbaf2.chunk.css} +1 -1
  12. package/dist/css/{9620-lite-d77e9ad59b.chunk.css → 9620-lite-111c825071.chunk.css} +1 -1
  13. package/dist/scripts/1169-5a0d974a94-lite.chunk.js +2 -0
  14. package/dist/scripts/1169-5a0d974a94-lite.chunk.js.map +1 -0
  15. package/dist/scripts/{1820-68114ca994-lite.chunk.js → 1820-9a1f618969-lite.chunk.js} +2 -2
  16. package/dist/scripts/1820-9a1f618969-lite.chunk.js.map +1 -0
  17. package/dist/scripts/{2120-88f6dd6652-lite.chunk.js → 2120-82a7b90997-lite.chunk.js} +1 -1
  18. package/dist/scripts/{2120-88f6dd6652-lite.chunk.js.map → 2120-82a7b90997-lite.chunk.js.map} +1 -1
  19. package/dist/scripts/{2137-093f479ff9-lite.chunk.js → 2137-2e78e535ad-lite.chunk.js} +1 -1
  20. package/dist/scripts/{2137-093f479ff9-lite.chunk.js.map → 2137-2e78e535ad-lite.chunk.js.map} +1 -1
  21. package/dist/scripts/{2795-0616748349-lite.chunk.js → 2795-eb3a51adc2-lite.chunk.js} +1 -1
  22. package/dist/scripts/{2795-0616748349-lite.chunk.js.map → 2795-eb3a51adc2-lite.chunk.js.map} +1 -1
  23. package/dist/scripts/3070-63e0a6b63e-lite.chunk.js +2 -0
  24. package/dist/scripts/3070-63e0a6b63e-lite.chunk.js.map +1 -0
  25. package/dist/scripts/{3515-0d5feefbe3-lite.chunk.js → 3515-72a31e0bbd-lite.chunk.js} +1 -1
  26. package/dist/scripts/{3515-0d5feefbe3-lite.chunk.js.map → 3515-72a31e0bbd-lite.chunk.js.map} +1 -1
  27. package/dist/scripts/{458-e3aaac093b-lite.chunk.js → 458-1ca8abf829-lite.chunk.js} +1 -1
  28. package/dist/scripts/{458-e3aaac093b-lite.chunk.js.map → 458-1ca8abf829-lite.chunk.js.map} +1 -1
  29. package/dist/scripts/4718-b3cfb276a7-lite.chunk.js +2 -0
  30. package/dist/scripts/4718-b3cfb276a7-lite.chunk.js.map +1 -0
  31. package/dist/scripts/{5242-e2f40bdd0e-lite.chunk.js → 5242-e5cc8311eb-lite.chunk.js} +1 -1
  32. package/dist/scripts/{5242-e2f40bdd0e-lite.chunk.js.map → 5242-e5cc8311eb-lite.chunk.js.map} +1 -1
  33. package/dist/scripts/{5446-1ef1639ef6-lite.chunk.js → 5446-5a2f719a6f-lite.chunk.js} +1 -1
  34. package/dist/scripts/{5446-1ef1639ef6-lite.chunk.js.map → 5446-5a2f719a6f-lite.chunk.js.map} +1 -1
  35. package/dist/scripts/{5940-511beff2ee-lite.chunk.js → 5940-5731abccf3-lite.chunk.js} +2 -2
  36. package/dist/scripts/5940-5731abccf3-lite.chunk.js.map +1 -0
  37. package/dist/scripts/6309-f5bb1c14dc-lite.chunk.js +3 -0
  38. package/dist/scripts/6309-f5bb1c14dc-lite.chunk.js.map +1 -0
  39. package/dist/scripts/6450-2745feb746-lite.chunk.js +2 -0
  40. package/dist/scripts/6450-2745feb746-lite.chunk.js.map +1 -0
  41. package/dist/scripts/6850-393de993b8-lite.chunk.js +3 -0
  42. package/dist/scripts/6850-393de993b8-lite.chunk.js.map +1 -0
  43. package/dist/scripts/{7987-db0037709c-lite.chunk.js → 7987-ff7de6531f-lite.chunk.js} +1 -1
  44. package/dist/scripts/{7987-db0037709c-lite.chunk.js.map → 7987-ff7de6531f-lite.chunk.js.map} +1 -1
  45. package/dist/scripts/9016-0c078a39cb-lite.chunk.js +3 -0
  46. package/dist/scripts/9016-0c078a39cb-lite.chunk.js.map +1 -0
  47. package/dist/scripts/9620-d0f04eeccd-lite.chunk.js +3 -0
  48. package/dist/scripts/9620-d0f04eeccd-lite.chunk.js.map +1 -0
  49. package/dist/scripts/{bundle-bb2e18c8ca.min.js → bundle-815f926b0f.min.js} +3 -3
  50. package/dist/scripts/bundle-815f926b0f.min.js.map +1 -0
  51. package/package.json +1 -1
  52. package/dist/scripts/1169-3df974a8eb-lite.chunk.js +0 -2
  53. package/dist/scripts/1169-3df974a8eb-lite.chunk.js.map +0 -1
  54. package/dist/scripts/1820-68114ca994-lite.chunk.js.map +0 -1
  55. package/dist/scripts/3070-b148205227-lite.chunk.js +0 -2
  56. package/dist/scripts/3070-b148205227-lite.chunk.js.map +0 -1
  57. package/dist/scripts/4718-2b58aa560d-lite.chunk.js +0 -2
  58. package/dist/scripts/4718-2b58aa560d-lite.chunk.js.map +0 -1
  59. package/dist/scripts/5940-511beff2ee-lite.chunk.js.map +0 -1
  60. package/dist/scripts/6309-36ea0c9f2c-lite.chunk.js +0 -3
  61. package/dist/scripts/6309-36ea0c9f2c-lite.chunk.js.map +0 -1
  62. package/dist/scripts/6450-6819d42c15-lite.chunk.js +0 -2
  63. package/dist/scripts/6450-6819d42c15-lite.chunk.js.map +0 -1
  64. package/dist/scripts/6850-16bec85d3c-lite.chunk.js +0 -3
  65. package/dist/scripts/6850-16bec85d3c-lite.chunk.js.map +0 -1
  66. package/dist/scripts/9016-c359251f82-lite.chunk.js +0 -3
  67. package/dist/scripts/9016-c359251f82-lite.chunk.js.map +0 -1
  68. package/dist/scripts/9620-630f9e6344-lite.chunk.js +0 -3
  69. package/dist/scripts/9620-630f9e6344-lite.chunk.js.map +0 -1
  70. package/dist/scripts/bundle-bb2e18c8ca.min.js.map +0 -1
  71. /package/dist/scripts/{6309-36ea0c9f2c-lite.chunk.js.LICENSE.txt → 6309-f5bb1c14dc-lite.chunk.js.LICENSE.txt} +0 -0
  72. /package/dist/scripts/{6850-16bec85d3c-lite.chunk.js.LICENSE.txt → 6850-393de993b8-lite.chunk.js.LICENSE.txt} +0 -0
  73. /package/dist/scripts/{9016-c359251f82-lite.chunk.js.LICENSE.txt → 9016-0c078a39cb-lite.chunk.js.LICENSE.txt} +0 -0
  74. /package/dist/scripts/{9620-630f9e6344-lite.chunk.js.LICENSE.txt → 9620-d0f04eeccd-lite.chunk.js.LICENSE.txt} +0 -0
  75. /package/dist/scripts/{bundle-bb2e18c8ca.min.js.LICENSE.txt → bundle-815f926b0f.min.js.LICENSE.txt} +0 -0
@@ -0,0 +1,3 @@
1
+ /*! For license information please see 9016-0c078a39cb-lite.chunk.js.LICENSE.txt */
2
+ (self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[9016],{9826:(e,t,n)=>{"use strict";n.d(t,{e:()=>f});var r=n(32735),a=n(91967),i=n(86764),c=n(81514),o=n(10038);const l={stickyFooter:"rIUL4",nonStickyFooter:"PuC_F"};function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var u=50;function m(e){var t="justify-content-".concat(e.justify);return r.createElement("div",{className:"py-3 bg-white ".concat(l.stickyFooter)},r.createElement("div",{className:"w-75 mx-auto d-flex ".concat(t)},e.children))}function d(e){var t=(0,c.V)(),n=t===i.r.SM||t===i.r.XS?"w-100":"w-75",a="justify-content-".concat(e.justify);return r.createElement("div",{className:"".concat(n," ").concat(a," ").concat(l.nonStickyFooter," d-flex px-3")},e.children)}function f(e){var t,n,i=function(){return window.innerHeight+window.scrollY>=document.body.offsetHeight-u},c=(t=r.useState(!1),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 r,a,i,c,o=[],l=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=i.call(n)).done)&&(o.push(r.value),o.length!==t);l=!0);}catch(e){s=!0,a=e}finally{try{if(!l&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(s)throw a}}return o}}(t,n)||function(e,t){if(e){if("string"==typeof e)return s(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)?s(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.")}()),l=c[0],f=c[1];r.useEffect((function(){return f(!i())}),[]);var p=a.q.throttle((function(){var e=!i();!l||e?!l&&e&&f(!0):f(!1)}),100);return r.useEffect((function(){return window.addEventListener("scroll",p),function(){return window.removeEventListener("scroll",p)}}),[l,f]),(0,o.H)(p,p,[l,f]),l?r.createElement(m,Object.assign({},e),e.children):r.createElement(d,Object.assign({},e),e.children)}f.defaultProps={justify:"between"}},49602:(e,t,n)=>{"use strict";var r;n.d(t,{b:()=>i}),function(e){e[e.None=0]="None",e[e.AllSubjects=1]="AllSubjects",e[e.AllLevels=2]="AllLevels",e[e.AllSubjectsAndAllLevels=3]="AllSubjectsAndAllLevels"}(r||(r={}));var a=n(25925),i={hasManyPresentationTypes:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=0,n=0;return null==e||e.forEach((function(e){e.type===a.R.Subject?t++:e.type===a.R.Curriculum&&n++})),{hasManySubjectPresentations:t>1,hasManyCurriculumPresentations:n>1}},getBulkPreferencesState:function(e){return e===r.AllSubjectsAndAllLevels?{levels:!0,subjects:!0}:{levels:e===r.AllLevels,subjects:e===r.AllSubjects}},hasBulkSelectedLevels:function(e){return e===r.AllLevels||e===r.AllSubjectsAndAllLevels},hasBulkSelectedTopics:function(e){return e===r.AllSubjects||e===r.AllSubjectsAndAllLevels},getNextBulkState:function(e,t){var n=r.None,a=r.AllSubjects,i=r.AllLevels,c=r.AllSubjectsAndAllLevels,o="topics"===t;switch(e){case n:default:return o?a:i;case a:return o?n:c;case i:return o?c:n;case c:return o?i:a}}}},49935:(e,t,n)=>{"use strict";n.d(t,{Oo:()=>m,b2:()=>d});var r=n(32735),a=n(36848),i=n(86764),c=n(3747),o=n(5859),l=n(35223),s=n(83914),u=function(e){var t=e.breadcrumb,n=t.name,i=t.appLink,c=t.active,o=e.withBackIcon;return r.createElement("li",{className:"breadcrumb-item".concat(c?" active":"")},c?r.createElement("strong",null,n):r.createElement(a.F,{appLink:i},o&&r.createElement(s.x,{svgName:l.vn.ChevronLeft,size:s.S.Small}),r.createElement("span",{className:o?"ms-2":""},n)))},m=function(e){var t=e.breadcrumbs,n=(0,c.a)(i.r.XS),a=null==t?void 0:t.length;return!a||n&&a<2?r.createElement(r.Fragment,null):n?r.createElement("nav",{"aria-label":"breadcrumb"},r.createElement("ol",{className:"breadcrumb m-0 p-0"},r.createElement(u,{breadcrumb:t[a-2],withBackIcon:!0}))):r.createElement("nav",{"aria-label":"breadcrumb"},r.createElement("ol",{className:"breadcrumb m-0 p-0"},t.map((function(e,t){return r.createElement(u,{key:t,breadcrumb:e})}))))},d=r.memo((function(e){var t=e.numItems,n=void 0===t?3:t;return(0,c.a)(i.r.XS)?r.createElement("div",{className:"partial-loading-background",style:{height:"1.3125rem",width:"6rem"}}):r.createElement("nav",{"aria-label":"breadcrumb"},r.createElement("ol",{className:"breadcrumb m-0 p-0"},o.u.getPartialLoadingItems({numItems:n}).map((function(e,t){var n=e.width;return r.createElement("li",{key:t,className:"breadcrumb-item"},r.createElement("span",{className:"d-inline-block partial-loading-background",style:{width:n},dangerouslySetInnerHTML:{__html:"&nbsp"}}))}))))}))},38502:(e,t,n)=>{"use strict";n.d(t,{r:()=>m});var r=n(32735),a=n(49985),i=n(36848),c=n(18559),o=n(11607),l=n(83914),s=n(87432);function u(e){return r.createElement(r.Fragment,null,!!e.tab.svgName&&r.createElement("div",{className:e.tab.name?"pe-1":""},r.createElement(l.x,{svgName:e.tab.svgName})),e.tab.name,"number"==typeof e.tab.count&&r.createElement("div",{className:"ps-2"},r.createElement(c.C,{type:c.g.Count,data:e.tab.count})))}function m(e){var t;return r.createElement("nav",{className:null!==(t=e.className)&&void 0!==t?t:"",ref:e.containerRef},r.createElement("ul",{className:"\n list-unstyled d-inline-block m-0 ".concat(s.Z.pillTabSelector,"\n ").concat(e.borderRadius?s.Z.radiusSmall:"","\n ").concat(e.listClassName,"\n ")},e.tabs.map((function(e,t){return r.createElement("li",{className:"\n p-0 ".concat(s.Z.tab," ").concat(e.active?"btn btn-dark":"btn btn-outline-dark","\n ").concat(e.name?s.Z.minWidth:""," ").concat(e.className,"\n "),key:t},e.appLink?r.createElement(i.F,{appLink:e.appLink,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,className:"\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ".concat(s.Z.tabLink,"\n ")},r.createElement(u,{tab:e})):r.createElement(o.L,{className:"\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset p-2 text-nowrap ".concat(s.Z.tabLink,"\n "),onClick:function(){return function(e){!e.active&&e.onSelect&&(e.onSelect(),e.analyticsData&&e.analyticsOptions&&a.k.logUserAction(e.analyticsData,e.analyticsOptions))}(e)}},r.createElement(u,{tab:e})))}))))}m.defaultProps={borderRadius:"lg"}},81514:(e,t,n)=>{"use strict";n.d(t,{V:()=>i});var r=n(86764),a=n(3747);function i(){var e=(0,a.a)(r.r.XS),t=(0,a.a)(r.r.SM),n=(0,a.a)(r.r.MD),i=(0,a.a)(r.r.LG),c=(0,a.a)(r.r.XL),o=(0,a.a)(r.r.XXL),l=r.r.LG;return e&&(l=r.r.XS),t&&(l=r.r.SM),n&&(l=r.r.MD),i&&(l=r.r.LG),c&&(l=r.r.XL),o&&(l=r.r.XXL),l}},5859:(e,t,n)=>{"use strict";function r(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}n.d(t,{u:()=>i});var a={numItems:5,minWidth:50,maxWidth:100},i={getPartialLoadingItems:function(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=Object.assign(Object.assign({},a),t);return(e=Array(n.numItems),function(e){if(Array.isArray(e))return r(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 r(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)?r(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.")}()).map((function(){return{width:"".concat(Math.max(Math.floor(Math.random()*n.maxWidth),n.minWidth),"px")}}))}}},69454:(e,t,n)=>{"use strict";n.d(t,{T:()=>d});var r=n(75896),a=n(1048),i=n(55171);function c(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 r,a,i,c,o=[],l=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=i.call(n)).done)&&(o.push(r.value),o.length!==t);l=!0);}catch(e){s=!0,a=e}finally{try{if(!l&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(s)throw a}}return o}}(e,t)||function(e,t){if(e){if("string"==typeof e)return o(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)?o(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 o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var l=/\d/,s={yearsAndGradesBuilder:function(e){var t=e.map((function(e){return e.name})).join(" "),n=t.split(" ").filter((function(e){return!isNaN(+e)})).map((function(e){return+e}))||[],r=t.split(" ").filter((function(e){return isNaN(+e)}))||[],a=e.find((function(e){return!l.test(e.name)})),i=r.find((function(e){return e!==(null==a?void 0:a.name)}));if(e.length>1&&(i+="s"),a&&n.length)return"".concat(i," ").concat(a.name.charAt(0)," - ").concat(n.pop());var c=function(e){var t,n,r,a,i=!1,c=[];for(e=e.sort((function(e,t){return e-t})),r=0;r<e.length;r++)a=r+1,i||(t=e[r]),n=e[a],e[r]+1===n?i=!0:i?(c.push("".concat(t," - ").concat(e[r])),i=!1):(c.push("".concat(e[r])),i=!1);return c}(n);return"".concat(i," ").concat(c.join(", "))},internationalSecondaryBuilder:function(e){return s.englandSecondaryBuilder(e)},scotlandPrimaryBuilder:function(e){var t=r.m.first(e),n=r.m.last(e),a=c(t.name.split(" "),1)[0],i=c(n.name.split(" "),1)[0];return"First"===a&&(a="1st"),"First"===i&&(i="1st"),"Second"===a&&(a="2nd"),"Second"===i&&(i="2nd"),a===i?"".concat(a," Level"):"".concat(a," - ").concat(i," Level")},internationalPrimaryBuilder:function(e){var t=r.m.first(e),n=r.m.last(e);if(t.name===n.name)return t.name;var a=c(t.name.split(" "),1)[0],i=c(n.name.split(" "),1)[0];return"Lower"===a&&(a="Low"),"Lower"===i&&(i="Low"),"Middle"===a&&(a="Mid"),"Middle"===i&&(i="Mid"),"".concat(a," - ").concat(i," Pri")},englandSecondaryBuilder:function(e){var t=r.m.first(e),n=r.m.last(e);return t.name===n.name?t.name:"Advanced"===n.name?"lower"===c(t.name.split(" "),1)[0].toLowerCase()?"Lower Sec - Adv":"Upper Sec - Adv":"Lower - Upper Sec"},scotlandSecondaryBuilder:function(e){var t=r.m.first(e),n=r.m.last(e);return t.name===n.name?t.name:"Senior Phase"===n.name?"".concat(t.name," - Senior"):"Third - Fourth Level"},englandPrimaryBuilder:function(e){var t=r.m.first(e),n=r.m.last(e),a=r.m.first(t.name.split(" ")),i=r.m.first(n.name.split(" ")),c=t.name.split(" ").find((function(e){return!isNaN(+e)})),o=n.name.split(" ").find((function(e){return!isNaN(+e)}));if(t===n)return"Key"===a||"Reception"===a?t.name:"".concat(a," KS").concat(c);var l="",s="";return l="Reception"===a?"R":"KS".concat(c),s="KS".concat(o),"Lower"===a&&"Upper"===i?"L ".concat(l," - U ").concat(s):("Lower"===a&&(l="Lower ".concat(l)),"Upper"===i&&(s="Upper ".concat(s)),"Key"===i&&(s=n.name),"".concat(l," - ").concat(s))}},u=/([0-9]+)/gi,m=/\s|\+/gi,d={getSortedPresentationAudiences:function(e,t){var n=e.filter((function(e){return!!e})).map((function(e){return e.id.toString()}));return t.filter((function(e){return n.includes(e.masterId.toString())}))},getMergedPresentationAudienceString:function(e){var t="";switch(+r.m.first(e).presentationId){case i.e.PresentationIds.DEFAULT:case i.e.PresentationIds.AU_SECONDARY:case i.e.PresentationIds.US_ELEMENTARY:case i.e.PresentationIds.AU_PRIMARY:case i.e.PresentationIds.STREAMABLE_LEARNING:if(1===e.length)return e[0];t=s.yearsAndGradesBuilder(e);break;case i.e.PresentationIds.INTERNATIONAL_SECONDARY:if(1===e.length)return e[0];t=s.internationalSecondaryBuilder(e);break;case i.e.PresentationIds.INTERNATIONAL_PRIMARY:t=s.internationalPrimaryBuilder(e);break;case i.e.PresentationIds.SCOTLAND_PRIMARY:t=s.scotlandPrimaryBuilder(e);break;case i.e.PresentationIds.ENGLISH_SECONDARY:t=s.englandSecondaryBuilder(e);break;case i.e.PresentationIds.SCOTLAND_SECONDARY:t=s.scotlandSecondaryBuilder(e);break;case i.e.PresentationIds.ENGLAND_PRIMARY:t=s.englandPrimaryBuilder(e);case i.e.PresentationIds.US_MIDDLE:case i.e.PresentationIds.US_HIGH:}return t?{name:t}:null},sortMembersWithDuplicateNamesByAudience:function(e){var t=function(e){return e.length?(e.forEach((function(e){var a=+r.m.first(e.name.match(u));if(!t)return t=e,void(n=a);a<n&&(t=e)})),t):null;var t,n},n={},a=[];return e.forEach((function(e){if(!n[e.name])return n[e.name]=1,void a.push(e);a.push(e),n[e.name]++;var r=a.splice(a.length-n[e.name]).sort((function(e,n){var r=t(e.subjectPresentationAudiences.data),a=t(n.subjectPresentationAudiences.data);if(!r&&a)return 1;if(!a)return-1;var i=r.name.localeCompare(a.name);return 0===i?i:i>0?-1:1}));a=a.concat(r)})),a},getActiveAudiencesFromParams:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(a.t.isObject(t)&&!a.t.isEmpty(t)&&e&&e.length&&d.shouldShowAudiences(e)){var n=t.a;if(n){"string"==typeof n&&(n=[n]);var r=function(e){return e.replace(m,"").toLowerCase()},i=n.reduce((function(e,t){return e[r(t)]=t,e}),{});return e.filter((function(e){return i[r(e.name)]}))}}},getAudienceParams:function(e){return(null==e?void 0:e.length)?{a:e.map((function(e){return e.name}))}:null},shouldShowAudiences:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return!!e&&e.length>1}}},71164:(e,t,n)=>{"use strict";n.d(t,{T:()=>v});var r=n(32735),a=n(23481),i=n(81886),c=n(38502),o=n(75795),l=n(69454),s=n(14070),u=n(97291),m=n(81803),d=n(4312);const f={tabs:"oHDjZ"};var p=a.T.encloseNamespace("settings.preferencesLayout");function v(e){var t,n=null===(t=o.O.getCurrentRoute())||void 0===t?void 0:t.appLink,a=function(e){return e===(null==n?void 0:n.action)},v=function(e){i.Q.C$.trigger({application:u.O.SETTINGS,action:e})};function b(){var t=[{name:p("topics"),active:a(s.e.Settings.TOPIC_PREFERENCES),onSelect:function(){return v(s.e.Settings.TOPIC_PREFERENCES)}}];l.T.shouldShowAudiences(e.audiences)&&t.push({name:p("yearGroups"),active:a(s.e.Settings.AUDIENCE_PREFERENCES),onSelect:function(){return v(s.e.Settings.AUDIENCE_PREFERENCES)}});var n=d.b.hasManyPresentationTypes(e.availablePresentations),r=n.hasManyCurriculumPresentations,i=n.hasManySubjectPresentations;return r&&t.push({name:p("curriculum"),active:a(s.e.Settings.CURRICULUM),onSelect:function(){return v(s.e.Settings.CURRICULUM)}}),i&&t.push({name:p("schoolLevel"),active:a(s.e.Settings.SCHOOL_LEVEL),onSelect:function(){return v(s.e.Settings.SCHOOL_LEVEL)}}),t}var g=b();return r.createElement(m.d,{heading:p("heading"),breadcrumbs:[p("breadcrumb")]},g.length>1&&r.createElement(c.r,{tabs:b(),className:f.tabs}),e.children)}},81803:(e,t,n)=>{"use strict";n.d(t,{d:()=>p});var r=n(32735),a=n(81886),i=n(23481),c=n(49935),o=n(22902),l=n(14070),s=n(97291),u=n(96368);function m(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var d="settings.settingsLayout",f=function(e){var t=(0,o.T)().hasPermissions,n=(0,u.e)();if(e)return t(e);var r=a.Q.C$.getCurrentAppLink();return r.application!==s.O.SETTINGS||n.some((function(e){return e.modules.some((function(e){return"appLink"in e&&e.appLink.action===r.action}))}))};function p(e){var t,n=f(e.requiredPermissions);if(r.useEffect((function(){n||a.Q.C$.trigger({application:s.O.SETTINGS,action:l.e.Settings.HOME},{replace:!0})}),[n]),!n)return r.createElement(r.Fragment,null);var o,u=e.breadcrumbs.map((function(t,n){return{name:t,appLink:{application:s.O.SETTINGS,action:l.e.Settings.HOME},active:n===e.breadcrumbs.length-1}}));return r.createElement("div",{className:"px-3"},r.createElement("div",{className:"d-flex align-items-center justify-content-between"},r.createElement("h1",{className:"h2"},e.heading),null===(t=e.headingButton)||void 0===t?void 0:t.call(e)),r.createElement("div",{className:"pb-3"},r.createElement(c.Oo,{breadcrumbs:[{name:i.T.getPhrase(d,"settingsBreadcrumb"),appLink:{application:s.O.SETTINGS,action:l.e.Settings.HOME}}].concat((o=u,function(e){if(Array.isArray(e))return m(e)}(o)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(o)||function(e,t){if(e){if("string"==typeof e)return m(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)?m(e,t):void 0}}(o)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()))})),e.description&&r.createElement(r.Fragment,null,r.createElement("p",null,e.description),r.createElement("hr",null)),e.children)}},4312:(e,t,n)=>{"use strict";n.d(t,{b:()=>b});var r=n(32735),a=n(49189),i=n.n(a),c=n(81886),o=n(49602),l=n(89961),s=n(14070),u=n(97291),m=n(80247),d=n(83345),f=n(99742);var p="subjects.onboardingLoader";function v(e){return r.useEffect((function(){window.setTimeout(e.onDone,2500)}),[]),r.createElement("div",{className:"d-flex flex-column align-items-center"},r.createElement("div",{className:"py-3"},r.createElement(m.Z,{as:"span",animation:"border",role:"status",className:"SVq72"})),r.createElement("h2",{className:"iS5ZE"},r.createElement(d.x,{namespace:p,phrase:"heading"})),r.createElement("p",{className:"mb-0 pb-4 text-center ".concat("JaUIN")},r.createElement(d.x,{namespace:p,phrase:"info"})),r.createElement("div",{className:"drop-shadow mb-n5"},r.createElement("img",{src:f.W.Onboarding.LOADER,alt:"",role:"presentation",className:"img-fluid"})))}var b=Object.assign(Object.assign({},o.b),{buildAppLink:function(e,t){var n={application:u.O.SUBJECT,action:"welcome"===e?s.e.Subjects.ONBOARDING_WELCOME:"school-level"===e?s.e.Subjects.ONBOARDING_TOPIC_PRESENTATION:"curriculum"===e?s.e.Subjects.ONBOARDING_CURRICULUM_PRESENTATION:void 0};return t&&(n.params={redirectUrl:t}),n},redirect:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t={application:u.O.SUBJECT,action:s.e.Subjects.ONBOARDING};e&&(t.params={redirectUrl:e}),c.Q.C$.trigger(t,{replace:!0})},onCompleteOnboardingSuccess:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"/";i().set("_onboardingComplete",e,{expires:30});var n=function(){return c.Q.Ab.PageLoad(t)};window.setTimeout((function(){l.M.render(r.createElement(v,{onDone:n}),{size:"lg",dialogClassName:"rounded-3",hideButtons:!0,centered:!0,cancelButtonProps:{onClick:n}})}),250)}})},49189:(e,t,n)=>{var r,a,i;void 0===(a="function"==typeof(r=i=function(){function e(){for(var e=0,t={};e<arguments.length;e++){var n=arguments[e];for(var r in n)t[r]=n[r]}return t}function t(e){return e.replace(/(%[0-9A-Z]{2})+/g,decodeURIComponent)}return function n(r){function a(){}function i(t,n,i){if("undefined"!=typeof document){"number"==typeof(i=e({path:"/"},a.defaults,i)).expires&&(i.expires=new Date(1*new Date+864e5*i.expires)),i.expires=i.expires?i.expires.toUTCString():"";try{var c=JSON.stringify(n);/^[\{\[]/.test(c)&&(n=c)}catch(e){}n=r.write?r.write(n,t):encodeURIComponent(String(n)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),t=encodeURIComponent(String(t)).replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent).replace(/[\(\)]/g,escape);var o="";for(var l in i)i[l]&&(o+="; "+l,!0!==i[l]&&(o+="="+i[l].split(";")[0]));return document.cookie=t+"="+n+o}}function c(e,n){if("undefined"!=typeof document){for(var a={},i=document.cookie?document.cookie.split("; "):[],c=0;c<i.length;c++){var o=i[c].split("="),l=o.slice(1).join("=");n||'"'!==l.charAt(0)||(l=l.slice(1,-1));try{var s=t(o[0]);if(l=(r.read||r)(l,s)||t(l),n)try{l=JSON.parse(l)}catch(e){}if(a[s]=l,e===s)break}catch(e){}}return e?a[e]:a}}return a.set=i,a.get=function(e){return c(e,!1)},a.getJSON=function(e){return c(e,!0)},a.remove=function(t,n){i(t,"",e(n,{expires:-1}))},a.defaults={},a.withConverter=n,a}((function(){}))})?r.call(t,n,t,e):r)||(e.exports=a),e.exports=i()},87432:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r={pillTabSelector:"Hdi6o",tab:"RvNxr",minWidth:"GHSz9",radiusSmall:"VhJJa",tabLink:"WFyvo"}}}]);
3
+ //# sourceMappingURL=9016-0c078a39cb-lite.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/9016-0c078a39cb-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/subjects/components/preferences/footer/onboarding-footer.scss","file:///app/packages/libs/shared/src/apps/subjects/components/preferences/footer/OnboardingFooter.tsx","file:///app/packages/libs/shared/src/enums/BulkOnboardingPreferencesState.ts","file:///app/packages/libs/shared/src/apps/subjects/utils/OnboardingHelper.ts","file:///app/packages/libs/shared/src/components/breadcrumbs/Breadcrumbs.tsx","file:///app/packages/libs/shared/src/components/pill-tab-selector/PillTabSelector.tsx","file:///app/packages/libs/shared/src/hooks/UseGetMediaQueryString.ts","file:///app/packages/libs/shared/src/utils/PartialLoadingHelper.ts","file:///app/packages/libs/shared/src/utils/audience-helper/AudienceStringBuilders.ts","file:///app/packages/libs/shared/src/utils/audience-helper/AudienceHelper.ts","file:///app/packages/projects/lite/src/apps/settings/components/preferences/preferences-layout.scss","file:///app/packages/projects/lite/src/apps/settings/components/preferences/PreferencesLayout.tsx","file:///app/packages/projects/lite/src/apps/settings/components/settings-layout/SettingsLayout.tsx","file:///app/packages/projects/lite/src/apps/subjects/components/onboarding-loader/OnboardingLoader.tsx","file:///app/packages/projects/lite/src/apps/subjects/components/onboarding-loader/onboarding-loader.scss","file:///app/packages/projects/lite/src/apps/subjects/utils/OnboardingHelper.tsx","file:///app/node_modules/js-cookie/src/js.cookie.js","file:///app/packages/libs/shared/src/components/pill-tab-selector/pill-tab-selector.scss"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"stickyFooter\":\"rIUL4\",\"nonStickyFooter\":\"PuC_F\"};","import * as React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nimport { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\nimport { useGetMediaQueryString } from 'libs/shared/hooks/UseGetMediaQueryString';\nimport { useResizeListener } from 'libs/shared/hooks/UseResizeListener';\n\nimport styles from './onboarding-footer.scss';\n\nconst SCROLL_TOLERANCE = 50; // value in px\n\ninterface OnboardingFooterProps extends React.PropsWithChildren<unknown> {\n justify?: 'end' | 'center' | 'between';\n}\n\nOnboardingFooter.defaultProps = {\n justify: 'between'\n};\n\nfunction StickyFooter(props: OnboardingFooterProps): JSX.Element {\n const justifyClass = `justify-content-${props.justify}`;\n\n return (\n <div className={`py-3 bg-white ${styles.stickyFooter}`}>\n <div className={`w-75 mx-auto d-flex ${justifyClass}`}>\n {props.children}\n </div>\n </div>\n );\n}\n\nfunction NonStickyFooter(props: OnboardingFooterProps): JSX.Element {\n const mediaQuery = useGetMediaQueryString();\n const widthClass = (mediaQuery === MediaQueryStrings.SM || mediaQuery === MediaQueryStrings.XS) ? 'w-100' : 'w-75';\n\n const justifyClass = `justify-content-${props.justify}`;\n\n return (\n <div className={`${widthClass} ${justifyClass} ${styles.nonStickyFooter} d-flex px-3`}>\n {props.children}\n </div>\n );\n}\n\nexport function OnboardingFooter(props: OnboardingFooterProps): JSX.Element {\n const isScrolledToBottom = () => {\n return (window.innerHeight + window.scrollY) >= (document.body.offsetHeight - SCROLL_TOLERANCE);\n };\n\n const [ isSticky, setIsSticky ] = React.useState(false);\n\n React.useEffect(() => setIsSticky(!isScrolledToBottom()), []);\n\n function onViewportChange(): void {\n const shouldSetToSticky = !isScrolledToBottom();\n\n if (isSticky && !shouldSetToSticky) {\n setIsSticky(false);\n return;\n }\n\n if (!isSticky && shouldSetToSticky)\n setIsSticky(true);\n }\n\n const throttledOnViewportChange = FunctionHelper.throttle(onViewportChange, 100);\n\n React.useEffect(() => {\n window.addEventListener('scroll', throttledOnViewportChange);\n return () => window.removeEventListener('scroll', throttledOnViewportChange);\n }, [ isSticky, setIsSticky ]);\n\n useResizeListener(throttledOnViewportChange, throttledOnViewportChange, [ isSticky, setIsSticky ]);\n\n return isSticky\n ? <StickyFooter {...props}>{props.children}</StickyFooter>\n : <NonStickyFooter {...props}>{props.children}</NonStickyFooter>;\n}","export enum BulkOnboardingPreferencesState {\n None = 0,\n AllSubjects = 1,\n AllLevels = 2,\n AllSubjectsAndAllLevels = 3\n}","import { HashObject } from 'libs/common/react/interfaces';\n\nimport { BulkOnboardingPreferencesState } from 'libs/shared/enums/BulkOnboardingPreferencesState';\nimport { PresentationType } from 'libs/shared/enums/PresentationType';\nimport { Presentation } from 'libs/shared/interfaces';\n\n/**\n * These are all the valid preference steps in the onboarding worflow\n * Steps are displayed in full workflow order from left to right.\n * \n * Important: Not all customers/users will be required to compelete all steps.\n * \n * School-level = presentation selection for K12\n */\nexport type OnboardingStep = 'welcome' | 'school-level' | 'curriculum' | 'audiences' | 'topics' | 'summary' ;\n\nexport const OnboardingHelper = {\n hasManyPresentationTypes(presentations: Presentation[] = []): HashObject {\n let totalAvailableSubjectPresentations = 0;\n let totalAvailableCurriculumPresentations = 0;\n\n presentations?.forEach(p => {\n if (p.type === PresentationType.Subject)\n totalAvailableSubjectPresentations++;\n\n else if (p.type === PresentationType.Curriculum)\n totalAvailableCurriculumPresentations++;\n });\n\n /**\n * The checks for \"> 1\" are done because we _only_ want to display presentation selectors\n * if the user has more than 1 presentation to select from. If they only have 1 available,\n * then that will always be used by default and they don't have to make any decisions.\n */\n return {\n hasManySubjectPresentations: totalAvailableSubjectPresentations > 1,\n hasManyCurriculumPresentations: totalAvailableCurriculumPresentations > 1\n };\n },\n\n getBulkPreferencesState(state: BulkOnboardingPreferencesState): { [key in 'levels' | 'subjects']: boolean } {\n if (state === BulkOnboardingPreferencesState.AllSubjectsAndAllLevels)\n return {\n levels: true,\n subjects: true\n };\n\n return {\n levels: state === BulkOnboardingPreferencesState.AllLevels,\n subjects: state === BulkOnboardingPreferencesState.AllSubjects\n };\n },\n\n hasBulkSelectedLevels(bulkState: BulkOnboardingPreferencesState): boolean {\n return (\n bulkState === BulkOnboardingPreferencesState.AllLevels ||\n bulkState === BulkOnboardingPreferencesState.AllSubjectsAndAllLevels\n );\n },\n\n hasBulkSelectedTopics(bulkState: BulkOnboardingPreferencesState): boolean {\n return (\n bulkState === BulkOnboardingPreferencesState.AllSubjects ||\n bulkState === BulkOnboardingPreferencesState.AllSubjectsAndAllLevels\n );\n },\n\n getNextBulkState(current: BulkOnboardingPreferencesState, managing: 'topics' | 'audiences'): BulkOnboardingPreferencesState {\n const { None, AllSubjects, AllLevels, AllSubjectsAndAllLevels } = BulkOnboardingPreferencesState;\n\n const isManagingTopics = managing === 'topics';\n\n switch (current) {\n case None:\n default:\n return isManagingTopics ? AllSubjects : AllLevels;\n case AllSubjects:\n return isManagingTopics ? None : AllSubjectsAndAllLevels;\n case AllLevels:\n return isManagingTopics ? AllSubjectsAndAllLevels : None;\n case AllSubjectsAndAllLevels:\n return isManagingTopics ? AllLevels : AllSubjects;\n }\n }\n};\n","import * as React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\nimport { useMediaQuery } from 'libs/shared/hooks/UseMediaQuery';\nimport { PartialLoadingHelper } from 'libs/shared/utils/PartialLoadingHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { SvgContainer, SvgContainerSize } from '../svg-container/SvgContainer';\n\nexport interface Breadcrumb {\n name: string;\n appLink?: Core.AppLink;\n active?: boolean;\n}\n\ninterface BreadcrumbItemProps {\n breadcrumb: Breadcrumb;\n withBackIcon?: boolean;\n}\n\nexport const BreadcrumbItem = ({ breadcrumb: { name, appLink, active }, withBackIcon }: BreadcrumbItemProps) => (\n <li className={`breadcrumb-item${active ? ' active' : ''}`}>\n {active\n ? <strong>{name}</strong>\n : <AppLink appLink={appLink}>\n {withBackIcon && <SvgContainer svgName={cvSvgLibrary.ChevronLeft} size={SvgContainerSize.Small} />}\n <span className={withBackIcon ? 'ms-2' : ''}>{name}</span>\n </AppLink>\n }\n </li>\n);\n\ninterface BreadcrumbsProps {\n breadcrumbs: Breadcrumb[];\n}\n\nexport const Breadcrumbs = ({ breadcrumbs }: BreadcrumbsProps) => {\n const isMobile = useMediaQuery(MediaQueryStrings.XS);\n\n const length = breadcrumbs?.length;\n\n if (!length || (isMobile && length < 2))\n return <></>;\n\n if (isMobile)\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n <BreadcrumbItem breadcrumb={breadcrumbs[length - 2]} withBackIcon />\n </ol>\n </nav>\n );\n\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n {breadcrumbs.map((b, idx) => <BreadcrumbItem key={idx} breadcrumb={b} />)}\n </ol>\n </nav>\n );\n};\n\nexport const PartialBreadcrumbs = React.memo(function({ numItems = 3 }: { numItems?: number; }) {\n const isMobile = useMediaQuery(MediaQueryStrings.XS);\n\n if (isMobile) {\n return (\n <div className='partial-loading-background' style={{ height: '1.3125rem', width: '6rem' }} />\n );\n }\n\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n {PartialLoadingHelper.getPartialLoadingItems({ numItems }).map(({ width }, idx) => (\n <li key={idx} className='breadcrumb-item'>\n <span className='d-inline-block partial-loading-background' style={{ width }} dangerouslySetInnerHTML={{ __html: '&nbsp' }} />\n </li>\n ))}\n </ol>\n </nav>\n );\n});","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\n\nimport { SvgContainer } from '../svg-container/SvgContainer';\n\nimport styles from './pill-tab-selector.scss';\n\ninterface TabContentsProps {\n tab: PillTab;\n}\n\nfunction TabContents(props: TabContentsProps): JSX.Element {\n return (\n <>\n {!!props.tab.svgName && (\n <div className={props.tab.name ? 'pe-1' : ''}>\n <SvgContainer svgName={props.tab.svgName} />\n </div>\n )}\n\n {props.tab.name}\n\n {typeof (props.tab.count) === 'number' && (\n <div className='ps-2'>\n <Badge type={BadgeType.Count} data={props.tab.count} />\n </div>\n )}\n </>\n );\n}\n\nexport interface PillTab {\n name: string;\n active: boolean;\n svgName?: string;\n\n className?: string;\n\n appLink?: Core.AppLink;\n onSelect?: () => void;\n\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n\n count?: number;\n}\n\ninterface PillTabSelectorProps {\n tabs: PillTab[];\n containerRef?: (el: HTMLElement) => void;\n listClassName?: string;\n className?: string;\n borderRadius?: 'sm' | 'lg'\n}\n\nPillTabSelector.defaultProps = {\n borderRadius: 'lg'\n};\n\nexport function PillTabSelector(props: PillTabSelectorProps): JSX.Element {\n function onSelectTab(tab: PillTab): void {\n if (tab.active || !tab.onSelect)\n return;\n\n tab.onSelect();\n\n if (tab.analyticsData && tab.analyticsOptions)\n AnalyticsHelper.logUserAction(tab.analyticsData, tab.analyticsOptions);\n }\n\n return (\n <nav className={props.className ?? ''} ref={props.containerRef}>\n <ul className={`\n list-unstyled d-inline-block m-0 ${styles.pillTabSelector}\n ${props.borderRadius ? styles.radiusSmall : ''}\n ${props.listClassName}\n `}>\n {props.tabs.map((tab, index) => {\n return (\n <li\n className={`\n p-0 ${styles.tab} ${tab.active ? 'btn btn-dark' : 'btn btn-outline-dark'}\n ${tab.name ? styles.minWidth : ''} ${tab.className}\n `}\n key={index}\n >\n {tab.appLink ? (\n <AppLink\n appLink={tab.appLink}\n analyticsData={tab.analyticsData}\n analyticsOptions={tab.analyticsOptions}\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ${styles.tabLink}\n `}\n >\n <TabContents tab={tab} />\n </AppLink>\n ) : (\n <DivButton\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset p-2 text-nowrap ${styles.tabLink}\n `}\n onClick={() => onSelectTab(tab)}\n >\n <TabContents tab={tab} />\n </DivButton>\n )}\n </li>\n );\n })}\n </ul>\n </nav>\n );\n}\n","import { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\n\nimport { useMediaQuery } from './UseMediaQuery';\n\n/**\n * @deprecated Please use useBreakpoints() instead\n */\nexport function useGetMediaQueryString(): MediaQueryStrings {\n const isXS = useMediaQuery(MediaQueryStrings.XS);\n const isSM = useMediaQuery(MediaQueryStrings.SM);\n const isMD = useMediaQuery(MediaQueryStrings.MD);\n const isLG = useMediaQuery(MediaQueryStrings.LG);\n const isXL = useMediaQuery(MediaQueryStrings.XL);\n const isXXL = useMediaQuery(MediaQueryStrings.XXL);\n\n let currentString = MediaQueryStrings.LG; // default\n if (isXS) currentString = MediaQueryStrings.XS;\n if (isSM) currentString = MediaQueryStrings.SM;\n if (isMD) currentString = MediaQueryStrings.MD;\n if (isLG) currentString = MediaQueryStrings.LG;\n if (isXL) currentString = MediaQueryStrings.XL;\n if (isXXL) currentString = MediaQueryStrings.XXL;\n\n return currentString;\n}","const DEFAULT_PARTIAL_LOADING_OPTIONS: PartialLoadingOptions = {\n numItems: 5,\n minWidth: 50, // px\n maxWidth: 100 // px\n};\n\nexport interface PartialLoadingOptions {\n numItems?: number;\n minWidth?: number;\n maxWidth?: number;\n}\n\ninterface PartialLoadingItem {\n width: string;\n}\n\nexport const PartialLoadingHelper = {\n getPartialLoadingItems(options: PartialLoadingOptions = {}): PartialLoadingItem[] {\n const opts = {\n ...DEFAULT_PARTIAL_LOADING_OPTIONS,\n ...options\n };\n\n const getRandomFilterWidth = () => Math.max(Math.floor(Math.random() * opts.maxWidth), opts.minWidth);\n\n return [...Array(opts.numItems)].map(() => ({ width: `${getRandomFilterWidth()}px` }));\n }\n};","import { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { PresentationAudience } from 'libs/shared/interfaces';\n\nconst HAS_NUMBER_REGEX = /\\d/;\nconst COUNT_OFFSET = 1;\n\nexport const AudienceStringBuilders = {\n /**\n * Handles audience sets like:\n * - Year 7, Year 8, etc\n * - Kindergarten, Grade 1, Grade 2, etc\n */\n yearsAndGradesBuilder(audiences: PresentationAudience[]): string {\n /**\n * Create a string with all of the audiences\n */\n const combinedNames = audiences.map(a => a.name).join(' ');\n\n /**\n * Extract all the numbers and matches from the string\n */\n const numberList = combinedNames.split(' ').filter(name => !isNaN(+name)).map(num => +num) || [];\n const wordList = combinedNames.split(' ').filter(name => isNaN(+name)) || [];\n\n // Find an audience that doesn't have a number, like \"Kindergarten\" or \"Foundation\".\n const audienceWithoutNum = audiences.find(p => {\n return !HAS_NUMBER_REGEX.test(p.name);\n });\n\n // Get audience label prefix\n let prefix = wordList.find(name => name !== audienceWithoutNum?.name);\n\n // Pluralise the prefix is there are multiple audiences\n if (audiences.length > 1)\n prefix += 's';\n\n if (audienceWithoutNum && numberList.length)\n return `${prefix} ${audienceWithoutNum.name.charAt(0)} - ${numberList.pop()}`;\n\n /**\n * Build set of logical audience ranges\n */\n const audienceRange = processAudienceRanges(numberList);\n\n return `${prefix} ${audienceRange.join(', ')}`;\n },\n\n internationalSecondaryBuilder(audiences: PresentationAudience[]): string {\n return AudienceStringBuilders.englandSecondaryBuilder(audiences);\n },\n\n scotlandPrimaryBuilder(audiences: PresentationAudience[]): string {\n const firstAudience = ArrayHelper.first(audiences);\n const lastAudience = ArrayHelper.last(audiences);\n\n let [firstAudienceLevel] = firstAudience.name.split(' ');\n let [lastAudienceLevel] = lastAudience.name.split(' ');\n\n if (firstAudienceLevel === 'First')\n firstAudienceLevel = '1st';\n\n if (lastAudienceLevel === 'First')\n lastAudienceLevel = '1st';\n\n if (firstAudienceLevel === 'Second')\n firstAudienceLevel = '2nd';\n\n if (lastAudienceLevel === 'Second')\n lastAudienceLevel = '2nd';\n\n if (firstAudienceLevel === lastAudienceLevel)\n return `${firstAudienceLevel} Level`;\n\n return `${firstAudienceLevel} - ${lastAudienceLevel} Level`;\n },\n\n internationalPrimaryBuilder(audiences: PresentationAudience[]): string {\n const firstAudience = ArrayHelper.first(audiences);\n const lastAudience = ArrayHelper.last(audiences);\n\n if (firstAudience.name === lastAudience.name)\n return firstAudience.name;\n\n let [firstAudienceLevel] = firstAudience.name.split(' ');\n let [lastAudienceLevel] = lastAudience.name.split(' ');\n\n if (firstAudienceLevel === 'Lower')\n firstAudienceLevel = 'Low';\n\n if (lastAudienceLevel === 'Lower')\n lastAudienceLevel = 'Low';\n\n if (firstAudienceLevel === 'Middle')\n firstAudienceLevel = 'Mid';\n\n if (lastAudienceLevel === 'Middle')\n lastAudienceLevel = 'Mid';\n\n return `${firstAudienceLevel} - ${lastAudienceLevel} Pri`;\n },\n\n /**\n * Handles the english secondary audiences, which can be: Lower Secondary, Upper Secondary, and Advanced\n */\n englandSecondaryBuilder(audiences: PresentationAudience[]): string {\n const firstAudience = ArrayHelper.first(audiences);\n const lastAudience = ArrayHelper.last(audiences);\n\n if (firstAudience.name === lastAudience.name)\n return firstAudience.name;\n\n if (lastAudience.name === 'Advanced') {\n const [level] = firstAudience.name.split(' ');\n\n if (level.toLowerCase() === 'lower')\n return 'Lower Sec - Adv';\n\n return 'Upper Sec - Adv';\n }\n\n return 'Lower - Upper Sec';\n },\n\n scotlandSecondaryBuilder(audiences: PresentationAudience[]): string {\n const firstAudience = ArrayHelper.first(audiences);\n const lastAudience = ArrayHelper.last(audiences);\n\n if (firstAudience.name === lastAudience.name)\n return firstAudience.name;\n\n if (lastAudience.name === 'Senior Phase')\n return `${firstAudience.name} - Senior`;\n\n return 'Third - Fourth Level';\n },\n\n /**\n * Handles the audience set: Reception, Key Stage 1, Lower Key Stage 2, and Upper Key Stage 2\n */\n englandPrimaryBuilder(audiences: PresentationAudience[]): string {\n // The first and last audience will build out the range\n const firstAudience = ArrayHelper.first(audiences);\n const lastAudience = ArrayHelper.last(audiences);\n\n // The first word in the strings will either be \"Upper\", \"Lower\", \"Key\", or \"Reception\"\n const firstAudienceFirstWord = ArrayHelper.first(firstAudience.name.split(' '));\n const lastAudienceFirstWord = ArrayHelper.first(lastAudience.name.split(' '));\n\n // Each audience in this set except for \"Reception\" has a number. Get the numbers for the first and last audiences\n const firstAudienceNumber = firstAudience.name.split(' ').find(word => !isNaN(+word));\n const lastAudienceNumber = lastAudience.name.split(' ').find(word => !isNaN(+word));\n\n // If there's only one audience on the video:\n if (firstAudience === lastAudience) {\n // For these 2 audiences, return the full name as it's short enough already\n if (firstAudienceFirstWord === 'Key' || firstAudienceFirstWord === 'Reception')\n return firstAudience.name;\n\n // For the Upper/Lower key stage audiences, abbreviate the \"key stage\" part to KS1/KS2\n return `${firstAudienceFirstWord} KS${firstAudienceNumber}`;\n }\n\n /**\n * Handle when the object has >1 audience\n */\n\n let firstAudienceString = '';\n let lastAudienceString = '';\n\n // Reception is always shortened to \"R\" when in a range\n if (firstAudienceFirstWord === 'Reception') {\n firstAudienceString = 'R';\n } else {\n // All other audiences will be abbreviated to \"KS1/KS2\"\n firstAudienceString = `KS${firstAudienceNumber}`;\n }\n\n // The last audience will always be a key stage, so abbreviate this too\n lastAudienceString = `KS${lastAudienceNumber}`;\n\n // If the audience range contains both the \"Lower\" and \"Upper\" audiences, abbreviate those and return\n if (firstAudienceFirstWord === 'Lower' && lastAudienceFirstWord === 'Upper') {\n return `L ${firstAudienceString} - U ${lastAudienceString}`;\n }\n\n // Add \"Lower\" and \"Upper\" to the strings if it's needed\n if (firstAudienceFirstWord === 'Lower') {\n firstAudienceString = `Lower ${firstAudienceString}`;\n }\n\n if (lastAudienceFirstWord === 'Upper') {\n lastAudienceString = `Upper ${lastAudienceString}`;\n }\n\n // This handles a case where the range is Reception - Key Stage 1. In which case we don't abbreviate the key stage part to KS1.\n if (lastAudienceFirstWord === 'Key') {\n lastAudienceString = lastAudience.name;\n }\n\n return `${firstAudienceString} - ${lastAudienceString}`;\n }\n};\n\nfunction processAudienceRanges(audienceValues: number[]): string[] {\n /**\n * Lookahead by increments of offset\n */\n const offset = COUNT_OFFSET;\n\n let initialVal; let nextVal;\n let isContinguous: boolean = false;\n\n const ranges: string[] = [];\n\n // Audience values need to be in ascending order\n audienceValues = audienceValues.sort((a, b) => a - b);\n\n let i; let j;\n\n for (i = 0; i < audienceValues.length; i++) {\n j = i + 1;\n\n // Set our lower boundary to compare against\n if (!isContinguous)\n initialVal = audienceValues[i];\n\n nextVal = audienceValues[j];\n\n /**\n * Where the next number is also the next incremental value\n * we're going to continue iterating until the next value\n * is no longer contiguos.\n */\n if (audienceValues[i] + offset === nextVal) {\n isContinguous = true;\n } else if (isContinguous) {\n /**\n * Where we were tracking a contiguous set, format appropriately \n * and store the vals\n */\n\n ranges.push(`${initialVal} - ${audienceValues[i]}`);\n isContinguous = false;\n } else {\n /**\n * Where the values arent contiguous, just store the current value\n */\n\n ranges.push(`${audienceValues[i]}`);\n isContinguous = false;\n }\n }\n\n return ranges;\n}","import { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { HardCoded } from 'libs/shared/constants/HardCoded';\nimport { Audience, BaseObject, PresentationAudience } from 'libs/shared/interfaces';\n\nimport { AudienceStringBuilders } from './AudienceStringBuilders';\n\nconst DIGIT_REGEX = /([0-9]+)/ig;\nconst SPACE_REGEX = /\\s|\\+/ig;\n\n/**\n * Where there is 1 or less audiences on a presentation, it provides little value to\n * the user's experience, so we'll hide audiences altogether.\n */\nconst MIN_AUDIENCE_THRESHOLD = 1;\n\nexport const AudienceHelper = {\n /**\n * This is needed to sort an object's audiences, as they are not sorted by the backend.\n * To do this, we take the presentation audiences (sorted) and filter them by the object's\n * audiences, leaving behind a sorted array of object audiences.\n */\n getSortedPresentationAudiences(\n objectAudiences: Audience[],\n presentationAudiences: PresentationAudience[]\n ): PresentationAudience[] {\n /**\n * Atm there is a bug in flight's optimize, around multiple parts of the page \n * fetching the same object with a different response. We are filtering out\n * falsey values in our object audience ids until that's fixed. - Sha\n */\n const objectAudienceIds = objectAudiences\n .filter(v => !!v)\n .map(audience => audience.id.toString());\n\n /**\n * Remove audiences that aren't relevant for the user's current presentation\n */\n const filteredAudiences = presentationAudiences.filter(presAudience => {\n return objectAudienceIds.includes(presAudience.masterId.toString());\n });\n\n return filteredAudiences;\n },\n\n /**\n * This function accepts a set of presentation audiences, and returns a single\n * audience where the name is a merged string of the names of all of the audiences passed in.\n *\n * As we add more presentations that have different audience sets, we'll need to extend the `switch`\n * statement below to either include new string builder functions, or to include new presentation IDs\n * for existing string builder functions.\n */\n getMergedPresentationAudienceString(presentationAudiences: PresentationAudience[]): PresentationAudience {\n const { presentationId } = ArrayHelper.first(presentationAudiences);\n\n let mergedAudienceString = '';\n\n switch (+presentationId) {\n // Generic `Name Number`. Sometimes has just name. Examples: Year 12, Grade 4, Kindergarten\n case HardCoded.PresentationIds.DEFAULT:\n case HardCoded.PresentationIds.AU_SECONDARY:\n case HardCoded.PresentationIds.US_ELEMENTARY:\n case HardCoded.PresentationIds.AU_PRIMARY:\n case HardCoded.PresentationIds.STREAMABLE_LEARNING:\n if (presentationAudiences.length === 1)\n return presentationAudiences[0];\n\n mergedAudienceString = AudienceStringBuilders.yearsAndGradesBuilder(presentationAudiences);\n break;\n\n case HardCoded.PresentationIds.INTERNATIONAL_SECONDARY:\n if (presentationAudiences.length === 1)\n return presentationAudiences[0];\n\n // TODO: Implement this properly\n mergedAudienceString = AudienceStringBuilders.internationalSecondaryBuilder(presentationAudiences);\n break;\n\n case HardCoded.PresentationIds.INTERNATIONAL_PRIMARY:\n mergedAudienceString = AudienceStringBuilders.internationalPrimaryBuilder(presentationAudiences);\n break;\n\n case HardCoded.PresentationIds.SCOTLAND_PRIMARY:\n mergedAudienceString = AudienceStringBuilders.scotlandPrimaryBuilder(presentationAudiences);\n break;\n\n case HardCoded.PresentationIds.ENGLISH_SECONDARY:\n mergedAudienceString = AudienceStringBuilders.englandSecondaryBuilder(presentationAudiences);\n break;\n\n \n case HardCoded.PresentationIds.SCOTLAND_SECONDARY:\n mergedAudienceString = AudienceStringBuilders.scotlandSecondaryBuilder(presentationAudiences);\n break;\n\n // Key Stage 1, Lower Key Stage 2, etc.\n case HardCoded.PresentationIds.ENGLAND_PRIMARY:\n mergedAudienceString = AudienceStringBuilders.englandPrimaryBuilder(presentationAudiences);\n break;\n\n // These presentations only have 1 audience mapped. These are never shown as badges in the product.\n case HardCoded.PresentationIds.US_MIDDLE:\n case HardCoded.PresentationIds.US_HIGH:\n default:\n break;\n }\n\n if (!mergedAudienceString)\n return null;\n\n return { name: mergedAudienceString } as PresentationAudience;\n },\n\n /**\n * This function assumes the members array passed in is ordered by `name`.\n */\n sortMembersWithDuplicateNamesByAudience(members: BaseObject[]): BaseObject[] {\n // Returns the lowest level audience out of an array of audience objects by looking at the name\n const getLowestAudience = (audiences: Audience[]) => {\n if (!audiences.length)\n return null;\n\n let lowestAudience: Audience;\n let lowestAudienceDigit: number;\n\n audiences.forEach(audience => {\n const digit = +ArrayHelper.first(audience.name.match(DIGIT_REGEX));\n\n if (!lowestAudience) {\n lowestAudience = audience;\n lowestAudienceDigit = digit;\n return;\n }\n\n if (digit < lowestAudienceDigit)\n lowestAudience = audience;\n });\n\n return lowestAudience;\n };\n\n // This is used to track how many times a member's name appears in the collection\n const nameCountMap: HashObject<number> = {};\n\n let sorted: BaseObject[] = [];\n\n members.forEach(member => {\n if (!nameCountMap[member.name]) {\n nameCountMap[member.name] = 1;\n sorted.push(member);\n return;\n }\n\n sorted.push(member);\n nameCountMap[member.name]++;\n\n // Take the slice of duplicates that we want to sort by audience\n const slice = sorted.splice(sorted.length - nameCountMap[member.name]);\n\n // Sort the slice by lowest audience\n const sortedSlice = slice.sort((a: any, b: any) => {\n const firstObjLowestAudience = getLowestAudience(a.subjectPresentationAudiences.data);\n const secondObjLowestAudience = getLowestAudience(b.subjectPresentationAudiences.data);\n\n if (!firstObjLowestAudience && secondObjLowestAudience)\n return 1;\n\n if (!secondObjLowestAudience)\n return -1;\n\n const comparison = firstObjLowestAudience.name.localeCompare(secondObjLowestAudience.name);\n\n if (comparison === 0) return comparison;\n\n return comparison > 0 ? -1 : 1;\n });\n\n sorted = sorted.concat(sortedSlice);\n });\n\n return sorted;\n },\n\n getActiveAudiencesFromParams(audiences: PresentationAudience[], params: HashObject = {}): PresentationAudience[] {\n if (!ObjectHelper.isObject(params) || ObjectHelper.isEmpty(params))\n return;\n\n if (!audiences || !audiences.length)\n return;\n\n if (!AudienceHelper.shouldShowAudiences(audiences))\n return;\n\n // 'a' is shorthand for audience\n let { a } = params;\n\n if (!a)\n return;\n\n // Only a single query param was passed, we'll wrap it in an array\n if (typeof a === 'string')\n a = [a];\n\n const normalizeAudienceName = (audienceName: string) => {\n return audienceName.replace(SPACE_REGEX, '').toLowerCase();\n };\n\n // Build an audience lookup\n const audienceLookup = a.reduce((state: HashObject, audienceStr: string) => {\n state[normalizeAudienceName(audienceStr)] = audienceStr;\n return state;\n }, {});\n\n // Filter out our active audience based on whether their name matches the lookup object\n return audiences.filter((audience: PresentationAudience) => {\n return audienceLookup[normalizeAudienceName(audience.name)];\n });\n },\n\n getAudienceParams(audiences: PresentationAudience[]): HashObject {\n if (!audiences?.length)\n return null;\n\n return { a: audiences.map(a => a.name) };\n },\n\n shouldShowAudiences(audiences: PresentationAudience[] = []): boolean {\n if (!audiences)\n return false;\n\n return audiences.length > MIN_AUDIENCE_THRESHOLD;\n }\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"tabs\":\"oHDjZ\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { PillTab, PillTabSelector } from 'libs/shared/components/pill-tab-selector/PillTabSelector';\nimport { Presentation, PresentationAudience } from 'libs/shared/interfaces';\nimport { ContextService } from 'libs/shared/services/ContextService';\nimport { AudienceHelper } from 'libs/shared/utils/audience-helper/AudienceHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { SettingsLayout } from 'apps/settings/components/settings-layout/SettingsLayout';\nimport { OnboardingHelper } from 'apps/subjects/utils/OnboardingHelper';\n\nimport styles from './preferences-layout.scss';\n\nconst namespace = 'settings.preferencesLayout';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ntype PreferencesLayoutProps = React.PropsWithChildren<{\n availablePresentations: Presentation[];\n audiences: PresentationAudience[];\n}>;\n\nexport function PreferencesLayout(props: PreferencesLayoutProps): JSX.Element {\n const currentAppLink = ContextService.getCurrentRoute()?.appLink;\n\n const isActive = (action: string) => action === currentAppLink?.action;\n\n const triggerAppLink = (action: string) => {\n Core.AppLinkHelper.trigger({\n application: AppChannels.SETTINGS,\n action\n });\n };\n\n function getTabs(): PillTab[] {\n const tabs = [{\n name: getPhrase('topics'),\n active: isActive(Actions.Settings.TOPIC_PREFERENCES),\n onSelect: () => triggerAppLink(Actions.Settings.TOPIC_PREFERENCES)\n }];\n \n const hasSelectableLevels = AudienceHelper.shouldShowAudiences(props.audiences);\n\n if (hasSelectableLevels) {\n tabs.push({\n name: getPhrase('yearGroups'),\n active: isActive(Actions.Settings.AUDIENCE_PREFERENCES),\n onSelect: () => triggerAppLink(Actions.Settings.AUDIENCE_PREFERENCES)\n });\n }\n\n const {\n hasManyCurriculumPresentations,\n hasManySubjectPresentations\n } = OnboardingHelper.hasManyPresentationTypes(props.availablePresentations);\n\n if (hasManyCurriculumPresentations) {\n tabs.push({\n name: getPhrase('curriculum'),\n active: isActive(Actions.Settings.CURRICULUM),\n onSelect: () => triggerAppLink(Actions.Settings.CURRICULUM)\n });\n }\n\n if (hasManySubjectPresentations) {\n tabs.push({\n name: getPhrase('schoolLevel'),\n active: isActive(Actions.Settings.SCHOOL_LEVEL),\n onSelect: () => triggerAppLink(Actions.Settings.SCHOOL_LEVEL)\n });\n }\n\n return tabs;\n }\n\n const tabs = getTabs();\n\n return (\n <SettingsLayout\n heading={getPhrase('heading')}\n breadcrumbs={[getPhrase('breadcrumb')]}\n >\n {tabs.length > 1 && (\n <PillTabSelector\n tabs={getTabs()}\n className={styles.tabs}\n />\n )}\n\n {props.children}\n </SettingsLayout>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Breadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { useGetSettingsGroups } from 'apps/settings/hooks/useGetSettingsGroups';\n\nconst namespace = 'settings.settingsLayout';\n\n/**\n * Checks if the current user has permission to access the settings module\n */\nexport const useCanAccessSettings = (requiredPermissions: PermissionName | PermissionName[]): boolean => {\n const { hasPermissions } = usePermissions();\n const settingsGroups = useGetSettingsGroups();\n\n /**\n * TODO: Update all settings pages to pasas required permissions, because checking the \n * `useGetSettingsGroups()` values clearly doesnt work for settings pages with multiple\n * applinks inside of them. - Sha\n */\n if (requiredPermissions)\n return hasPermissions(requiredPermissions);\n\n const currentRoute = Core.AppLinkHelper.getCurrentAppLink();\n\n /**\n * Allows us to have popups sitting in other locations be used\n * by our settings pages. For example the manage video access popup\n * in the \"videos with restricted access\" page - Sha\n */\n if (currentRoute.application !== AppChannels.SETTINGS)\n return true;\n\n return settingsGroups.some(group => {\n return group.modules.some(settingsModule => {\n if ('appLink' in settingsModule) {\n return settingsModule.appLink.action === currentRoute.action;\n }\n\n return false;\n });\n });\n};\n\ninterface SettingsLayoutProps {\n heading: string;\n breadcrumbs: string[];\n description?: string;\n requiredPermissions?: PermissionName | PermissionName[];\n headingButton?: () => JSX.Element;\n}\n\nexport function SettingsLayout(props: React.PropsWithChildren<SettingsLayoutProps>): JSX.Element {\n const canAccess = useCanAccessSettings(props.requiredPermissions);\n\n React.useEffect(() => {\n if (!canAccess) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.SETTINGS,\n action: Actions.Settings.HOME\n }, { replace: true });\n }\n }, [canAccess]);\n\n if (!canAccess)\n return <></>;\n\n const breadcrumbs = props.breadcrumbs.map((name, i) => ({\n name,\n appLink: {\n application: AppChannels.SETTINGS,\n action: Actions.Settings.HOME\n },\n active: i === props.breadcrumbs.length - 1\n }));\n\n return (\n <div className='px-3'>\n <div className='d-flex align-items-center justify-content-between'>\n <h1 className='h2'>{props.heading}</h1>\n {props.headingButton?.()}\n </div>\n <div className='pb-3'>\n <Breadcrumbs\n breadcrumbs={[\n {\n name: LanguageService.getPhrase(namespace, 'settingsBreadcrumb'),\n appLink: {\n application: AppChannels.SETTINGS,\n action: Actions.Settings.HOME\n }\n },\n ...breadcrumbs\n ]}\n />\n </div>\n {props.description &&\n <>\n <p>{props.description}</p>\n <hr />\n </>\n }\n\n {props.children}\n </div>\n );\n}","import React from 'react';\nimport { Spinner } from 'react-bootstrap';\n\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nimport styles from './onboarding-loader.scss';\n\nconst namespace = 'subjects.onboardingLoader';\n\ninterface OnboardingLoaderProps {\n onDone: () => void;\n}\n\nexport function OnboardingLoader(props: OnboardingLoaderProps): JSX.Element {\n React.useEffect(() => {\n window.setTimeout(props.onDone, 2500);\n }, []);\n\n return (\n <div className='d-flex flex-column align-items-center'>\n <div className='py-3'>\n <Spinner as='span' animation='border' role='status' className={styles.spinner} />\n </div>\n\n <h2 className={styles.heading}><Text namespace={namespace} phrase='heading' /></h2>\n <p className={`mb-0 pb-4 text-center ${styles.description}`}>\n <Text namespace={namespace} phrase='info' />\n </p>\n\n <div className='drop-shadow mb-n5'>\n <img\n src={ImageUrls.Onboarding.LOADER}\n alt=''\n role='presentation'\n className='img-fluid'\n />\n </div>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"spinner\":\"SVq72\",\"heading\":\"iS5ZE\",\"description\":\"JaUIN\"};","import React from 'react';\nimport Cookies from 'js-cookie';\n\nimport { Core } from 'libs/common/core';\n\nimport { OnboardingHelper as SharedOnboardingHelper, OnboardingStep } from 'libs/shared/apps/subjects/utils/OnboardingHelper';\nimport { DialogHelper } from 'libs/shared/utils/DialogHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { OnboardingLoader } from 'apps/subjects/components/onboarding-loader/OnboardingLoader';\n\nexport const OnboardingHelper = {\n ...SharedOnboardingHelper,\n\n buildAppLink(step: OnboardingStep, redirectUrl?: string): Core.AppLink {\n const application = AppChannels.SUBJECT;\n\n const action = (() => {\n if (step === 'welcome') return Actions.Subjects.ONBOARDING_WELCOME;\n if (step === 'school-level') return Actions.Subjects.ONBOARDING_TOPIC_PRESENTATION;\n if (step === 'curriculum') return Actions.Subjects.ONBOARDING_CURRICULUM_PRESENTATION;\n })();\n\n const appLink: Core.AppLink = { application, action };\n\n if (redirectUrl)\n appLink.params = { redirectUrl };\n\n return appLink;\n },\n\n redirect(redirectUrl: string = ''): void {\n const appLink: Core.AppLink = {\n application: AppChannels.SUBJECT,\n action: Actions.Subjects.ONBOARDING\n };\n\n if (redirectUrl)\n appLink.params = { redirectUrl };\n\n Core.AppLinkHelper.trigger(appLink, { replace: true });\n },\n\n onCompleteOnboardingSuccess(userId: string, redirectUrl: string = '/'): void {\n Cookies.set('_onboardingComplete', userId, { expires: 30 });\n\n /**\n * For users just completing onboarding, we want to do a full page load so that the top nav items\n * can be loaded back in. The top nav items are hidden for new users who are forced through onboarding.\n */\n const onDone = () => Core.LocationUtils.PageLoad(redirectUrl);\n\n // Artificially make the request take longer so that the button spins for longer\n window.setTimeout(() => {\n DialogHelper.render(<OnboardingLoader onDone={onDone} />, {\n size: 'lg',\n dialogClassName: 'rounded-3',\n hideButtons: true,\n centered: true,\n cancelButtonProps: {\n onClick: onDone\n }\n });\n }, 250);\n }\n};\n","/*!\n * JavaScript Cookie v2.2.1\n * https://github.com/js-cookie/js-cookie\n *\n * Copyright 2006, 2015 Klaus Hartl & Fagner Brack\n * Released under the MIT license\n */\n;(function (factory) {\n\tvar registeredInModuleLoader;\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(factory);\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (typeof exports === 'object') {\n\t\tmodule.exports = factory();\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (!registeredInModuleLoader) {\n\t\tvar OldCookies = window.Cookies;\n\t\tvar api = window.Cookies = factory();\n\t\tapi.noConflict = function () {\n\t\t\twindow.Cookies = OldCookies;\n\t\t\treturn api;\n\t\t};\n\t}\n}(function () {\n\tfunction extend () {\n\t\tvar i = 0;\n\t\tvar result = {};\n\t\tfor (; i < arguments.length; i++) {\n\t\t\tvar attributes = arguments[ i ];\n\t\t\tfor (var key in attributes) {\n\t\t\t\tresult[key] = attributes[key];\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tfunction decode (s) {\n\t\treturn s.replace(/(%[0-9A-Z]{2})+/g, decodeURIComponent);\n\t}\n\n\tfunction init (converter) {\n\t\tfunction api() {}\n\n\t\tfunction set (key, value, attributes) {\n\t\t\tif (typeof document === 'undefined') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tattributes = extend({\n\t\t\t\tpath: '/'\n\t\t\t}, api.defaults, attributes);\n\n\t\t\tif (typeof attributes.expires === 'number') {\n\t\t\t\tattributes.expires = new Date(new Date() * 1 + attributes.expires * 864e+5);\n\t\t\t}\n\n\t\t\t// We're using \"expires\" because \"max-age\" is not supported by IE\n\t\t\tattributes.expires = attributes.expires ? attributes.expires.toUTCString() : '';\n\n\t\t\ttry {\n\t\t\t\tvar result = JSON.stringify(value);\n\t\t\t\tif (/^[\\{\\[]/.test(result)) {\n\t\t\t\t\tvalue = result;\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\tvalue = converter.write ?\n\t\t\t\tconverter.write(value, key) :\n\t\t\t\tencodeURIComponent(String(value))\n\t\t\t\t\t.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);\n\n\t\t\tkey = encodeURIComponent(String(key))\n\t\t\t\t.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent)\n\t\t\t\t.replace(/[\\(\\)]/g, escape);\n\n\t\t\tvar stringifiedAttributes = '';\n\t\t\tfor (var attributeName in attributes) {\n\t\t\t\tif (!attributes[attributeName]) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tstringifiedAttributes += '; ' + attributeName;\n\t\t\t\tif (attributes[attributeName] === true) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Considers RFC 6265 section 5.2:\n\t\t\t\t// ...\n\t\t\t\t// 3. If the remaining unparsed-attributes contains a %x3B (\";\")\n\t\t\t\t// character:\n\t\t\t\t// Consume the characters of the unparsed-attributes up to,\n\t\t\t\t// not including, the first %x3B (\";\") character.\n\t\t\t\t// ...\n\t\t\t\tstringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n\t\t\t}\n\n\t\t\treturn (document.cookie = key + '=' + value + stringifiedAttributes);\n\t\t}\n\n\t\tfunction get (key, json) {\n\t\t\tif (typeof document === 'undefined') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar jar = {};\n\t\t\t// To prevent the for loop in the first place assign an empty array\n\t\t\t// in case there are no cookies at all.\n\t\t\tvar cookies = document.cookie ? document.cookie.split('; ') : [];\n\t\t\tvar i = 0;\n\n\t\t\tfor (; i < cookies.length; i++) {\n\t\t\t\tvar parts = cookies[i].split('=');\n\t\t\t\tvar cookie = parts.slice(1).join('=');\n\n\t\t\t\tif (!json && cookie.charAt(0) === '\"') {\n\t\t\t\t\tcookie = cookie.slice(1, -1);\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar name = decode(parts[0]);\n\t\t\t\t\tcookie = (converter.read || converter)(cookie, name) ||\n\t\t\t\t\t\tdecode(cookie);\n\n\t\t\t\t\tif (json) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tcookie = JSON.parse(cookie);\n\t\t\t\t\t\t} catch (e) {}\n\t\t\t\t\t}\n\n\t\t\t\t\tjar[name] = cookie;\n\n\t\t\t\t\tif (key === name) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {}\n\t\t\t}\n\n\t\t\treturn key ? jar[key] : jar;\n\t\t}\n\n\t\tapi.set = set;\n\t\tapi.get = function (key) {\n\t\t\treturn get(key, false /* read as raw */);\n\t\t};\n\t\tapi.getJSON = function (key) {\n\t\t\treturn get(key, true /* read as json */);\n\t\t};\n\t\tapi.remove = function (key, attributes) {\n\t\t\tset(key, '', extend(attributes, {\n\t\t\t\texpires: -1\n\t\t\t}));\n\t\t};\n\n\t\tapi.defaults = {};\n\n\t\tapi.withConverter = init;\n\n\t\treturn api;\n\t}\n\n\treturn init(function () {});\n}));\n","// extracted by mini-css-extract-plugin\nexport default {\"pillTabSelector\":\"Hdi6o\",\"tab\":\"RvNxr\",\"minWidth\":\"GHSz9\",\"radiusSmall\":\"VhJJa\",\"tabLink\":\"WFyvo\"};"],"names":["SCROLL_TOLERANCE","StickyFooter","props","justifyClass","justify","className","children","NonStickyFooter","mediaQuery","widthClass","OnboardingFooter","isScrolledToBottom","window","innerHeight","scrollY","document","body","offsetHeight","isSticky","setIsSticky","throttledOnViewportChange","FunctionHelper","shouldSetToSticky","addEventListener","removeEventListener","defaultProps","BulkOnboardingPreferencesState","OnboardingHelper","hasManyPresentationTypes","presentations","totalAvailableSubjectPresentations","totalAvailableCurriculumPresentations","forEach","p","type","PresentationType","hasManySubjectPresentations","hasManyCurriculumPresentations","getBulkPreferencesState","state","AllSubjectsAndAllLevels","levels","subjects","AllLevels","AllSubjects","hasBulkSelectedLevels","bulkState","hasBulkSelectedTopics","getNextBulkState","current","managing","None","isManagingTopics","BreadcrumbItem","breadcrumb","name","appLink","active","withBackIcon","svgName","size","S","Breadcrumbs","breadcrumbs","isMobile","length","map","b","idx","key","PartialBreadcrumbs","numItems","style","height","width","dangerouslySetInnerHTML","__html","TabContents","tab","count","data","PillTabSelector","ref","containerRef","borderRadius","listClassName","tabs","index","analyticsData","analyticsOptions","onClick","onSelect","onSelectTab","useGetMediaQueryString","isXS","isSM","isMD","isLG","isXL","isXXL","currentString","DEFAULT_PARTIAL_LOADING_OPTIONS","minWidth","maxWidth","PartialLoadingHelper","getPartialLoadingItems","options","opts","Array","Math","max","floor","random","HAS_NUMBER_REGEX","AudienceStringBuilders","yearsAndGradesBuilder","audiences","combinedNames","a","join","numberList","split","filter","isNaN","num","wordList","audienceWithoutNum","find","test","prefix","charAt","pop","audienceRange","audienceValues","initialVal","nextVal","i","j","isContinguous","ranges","sort","push","processAudienceRanges","internationalSecondaryBuilder","englandSecondaryBuilder","scotlandPrimaryBuilder","firstAudience","ArrayHelper","lastAudience","firstAudienceLevel","lastAudienceLevel","internationalPrimaryBuilder","toLowerCase","scotlandSecondaryBuilder","englandPrimaryBuilder","firstAudienceFirstWord","lastAudienceFirstWord","firstAudienceNumber","word","lastAudienceNumber","firstAudienceString","lastAudienceString","DIGIT_REGEX","SPACE_REGEX","AudienceHelper","getSortedPresentationAudiences","objectAudiences","presentationAudiences","objectAudienceIds","v","audience","id","toString","presAudience","includes","masterId","getMergedPresentationAudienceString","mergedAudienceString","presentationId","HardCoded","sortMembersWithDuplicateNamesByAudience","members","getLowestAudience","digit","match","lowestAudience","lowestAudienceDigit","nameCountMap","sorted","member","sortedSlice","splice","firstObjLowestAudience","subjectPresentationAudiences","secondObjLowestAudience","comparison","localeCompare","concat","getActiveAudiencesFromParams","params","ObjectHelper","shouldShowAudiences","normalizeAudienceName","audienceName","replace","audienceLookup","reduce","audienceStr","getAudienceParams","getPhrase","LanguageService","PreferencesLayout","currentAppLink","ContextService","isActive","action","triggerAppLink","application","getTabs","availablePresentations","SettingsLayout","heading","namespace","useCanAccessSettings","requiredPermissions","hasPermissions","settingsGroups","currentRoute","some","group","modules","settingsModule","canAccess","headingButton","description","OnboardingLoader","setTimeout","onDone","Spinner","as","animation","role","Text","phrase","src","ImageUrls","alt","buildAppLink","step","redirectUrl","redirect","onCompleteOnboardingSuccess","userId","expires","DialogHelper","dialogClassName","hideButtons","centered","cancelButtonProps","factory","extend","result","arguments","attributes","decode","s","decodeURIComponent","init","converter","api","set","value","path","defaults","Date","toUTCString","JSON","stringify","e","write","encodeURIComponent","String","escape","stringifiedAttributes","attributeName","cookie","get","json","jar","cookies","parts","slice","read","parse","getJSON","remove","withConverter","module","exports"],"sourceRoot":""}
@@ -0,0 +1,3 @@
1
+ /*! For license information please see 9620-d0f04eeccd-lite.chunk.js.LICENSE.txt */
2
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[9620],{34468:(e,t,n)=>{n.d(t,{R:()=>i});var r=n(32735),a=n(73758);function i(e,t,n,i){var o=function(){a.n.unsubscribe(e,t)};return(0,r.useEffect)((function(){if(i)return n?a.n.subscribeOnce(e,t):a.n.subscribe(e,t),function(){o()}}),[]),o}},73758:(e,t,n)=>{function r(e){return r="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},r(e)}function a(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,i(r.key),r)}}function i(e){var t=function(e,t){if("object"!=r(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,"string");if("object"!=r(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==r(t)?t:t+""}n.d(t,{n:()=>o});var o=new(function(){return e=function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.listeners={}},t=[{key:"subscribe",value:function(e,t){this.registerListener(e,t)}},{key:"subscribeOnce",value:function(e,t){this.registerListener(e,t,1)}},{key:"unsubscribe",value:function(e,t){this.deregisterListener(e,t)}},{key:"trigger",value:function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];this.triggerCallbacks(e,n)}},{key:"registerListener",value:function(e,t,n){var r;if("string"!=typeof e)throw new Error("Event name must be a string");if("function"!=typeof t)throw new Error("Event callback must be a function");if(n&&"number"!=typeof n)throw new Error("Execution limit must be a number or undefined");this.listeners[e]=null!==(r=this.listeners[e])&&void 0!==r?r:[],this.listeners[e].push({callback:t,executionLimit:n})}},{key:"deregisterListener",value:function(e,t){var n;if("string"!=typeof e)throw new Error("Event name must be a string");if(t&&"function"!=typeof t)throw new Error("Event callback must be a function");if(t){var r=null===(n=this.listeners[e])||void 0===n?void 0:n.findIndex((function(e){return e.callback===t}));"number"==typeof r&&-1!==r&&(this.listeners[e].splice(r,1),0===this.listeners[e].length&&delete this.listeners[e])}else this.listeners[e]=[]}},{key:"triggerCallbacks",value:function(e){for(var t=this,n=arguments.length,r=new Array(n>1?n-1:0),a=1;a<n;a++)r[a-1]=arguments[a];if(this.listeners[e]){var i=[];this.listeners[e].forEach((function(e){var t,n;"number"==typeof e.executionLimit&&(e.executionCount=null!==(n=e.executionCount)&&void 0!==n?n:0,e.executionCount++,e.executionCount===e.executionLimit&&i.push(e.callback)),(t=e.callback).apply.apply(t,[null].concat(r))})),i.length&&i.forEach((function(n){return t.deregisterListener(e,n)}))}}}],t&&a(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t}())},1353:(e,t,n)=>{n.d(t,{$:()=>l});var r=n(32735),a=n(11607),i=n(54610),o=n(67453),c=n(22161);function l(e){var t=e.data;return r.createElement(a.L,{key:t.id,className:"p-1 pe-2 rounded-pill d-inline-flex align-items-center cursor-pointer ".concat(c.Z.tag," ").concat(e.selected?c.Z.selected:""),onClick:function(){return e.onChangeCurriculum(t.id.toString())}},r.createElement("div",{className:"bg-white ".concat(c.Z.cover," rounded-circle border")},r.createElement("img",{src:o.j.createUrl(t.cover.url,{size:i.h2.Small}),alt:t.name,className:"rounded-circle"})),r.createElement("div",{className:"ms-2"},t.name))}},38496:(e,t,n)=>{n.d(t,{p:()=>u});var r=n(32735),a=n(23481),i=n(23232),o=n(83345),c="shared.curriculumLinks",l=a.T.encloseNamespace(c);function u(e){return r.createElement(i.u,{className:"pt-3"},r.createElement(i.u.Image,{src:e.emptyStateUrl,altText:l("emptyInfo"),size:"small"}),r.createElement(i.u.Heading,null,r.createElement(o.x,{namespace:c,phrase:"emptyHeading"})),r.createElement(i.u.Info,null,r.createElement(o.x,{namespace:c,phrase:"emptyInfo"})))}},44599:(e,t,n)=>{n.d(t,{Z:()=>i});var r=n(32735);var a=function(){return r.createElement(r.Fragment,null,r.createElement("div",{className:"partial-loading-background rounded-pill py-1 px-2 d-inline-block me-1 mb-2 ".concat("vDcrq")}),r.createElement("div",null,r.createElement("div",{className:"partial-loading-background mb-1 ".concat("GXhoW")}),r.createElement("div",{className:"mb-2 d-flex"},r.createElement("div",{className:"me-1 align-self-start ".concat("goKaS")},r.createElement("div",{className:"partial-loading-background rounded-pill py-1 px-2 d-inline-block w-100 h-100"})),r.createElement("div",{className:"partial-loading-background ".concat("vFew6")}))))};function i(){return r.createElement("div",null,r.createElement("div",{className:"mb-3"},r.createElement(a,null)),r.createElement("div",{className:"mb-3"},r.createElement(a,null)),r.createElement("div",null,r.createElement(a,null)))}},34223:(e,t,n)=>{n.d(t,{Y:()=>g});var r=n(32735),a=n(38496),i=n(44599),o=n(83345),c=n(85597);const l={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 r=n.call(e,"string");if("object"!=u(r))return r;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,r=Array(t);n<t;n++)r[n]=e[n];return r}var m=/(.*)\s\((.*)?\)/i,f="shared.curriculumLinks",p="text-nowrap font-size-normal rounded-pill py-1 px-2 my-0 d-inline-block fw-semibold";function v(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=r.useRef();return r.useEffect((function(){if(n.current){var t=n.current.getBoundingClientRect().width;e.trySetMaxCodeWidth(t)}}),[n.current]),r.createElement("div",{className:"d-flex"},e.leaf.description?!e.leaf.name&&e.uiContainsCodes?r.createElement(r.Fragment,null,r.createElement("div",{className:"me-1 align-self-start",style:{minWidth:e.codeWidth?"".concat(e.codeWidth,"px"):"auto"}},r.createElement("h5",{ref:n,className:t()},r.createElement(o.x,{namespace:f,phrase:"noCode"}))),r.createElement("p",{className:"m-0 align-self-center",dangerouslySetInnerHTML:{__html:e.leaf.description}})):e.leaf.name||e.uiContainsCodes?r.createElement(r.Fragment,null,r.createElement("div",{className:"me-1 align-self-start",style:{minWidth:e.codeWidth?"".concat(e.codeWidth,"px"):"auto"}},r.createElement("h5",{ref:n,className:t()},e.leaf.name)),r.createElement("p",{className:"m-0 align-self-center",dangerouslySetInnerHTML:{__html:e.leaf.description}})):r.createElement("p",{className:"m-0",dangerouslySetInnerHTML:{__html:e.leaf.description}}):r.createElement("p",{className:"m-0",dangerouslySetInnerHTML:{__html:e.leaf.name}}))}function h(e){var t,n,a,i={},o=!1;function u(e){var t="mb-2";return e.name||o?t:t+" ms-4 "+l.leafDescriptionOnly}return e.linkSet.areasAndLeaves.forEach((function(e){var t=e[c.k.Area].map((function(e){return e.name})).join(" - ");i[t]?e[c.k.Leaf].forEach((function(e){i[t].push(e),e.name&&(o=!0)})):i[t]=e[c.k.Leaf]})),r.createElement(r.Fragment,null,r.createElement("h3",{className:"".concat(p," text-white bg-dark-blue fw-normal me-1 mb-2")},(t=e.linkSet[c.k.Audience].name,n=e.linkSet[c.k.Subject].name,(a=t.match(m))?"".concat(a[1]," • ").concat(a[2]," • ").concat(n):"".concat(t," • ").concat(n))),r.createElement("div",{className:"me-2 ".concat(l.curriculumSubject)},Object.keys(i).map((function(t,n){return r.createElement("div",{key:n,className:l.areaLeafSet},t&&r.createElement("h4",{className:"mb-1 font-size-normal"},t),r.createElement("ul",{className:"list-unstyled"},i[t].map((function(t){return r.createElement("li",{key:t.id,className:u(t)},r.createElement(v,{leaf:t,codeWidth:e.codeWidth,trySetMaxCodeWidth:e.trySetMaxCodeWidth,uiContainsCodes:o}))}))))}))))}function g(e){var t,n,o,u=(n=r.useState(0),o=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 r,a,i,o,c=[],l=!0,u=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=i.call(n)).done)&&(c.push(r.value),c.length!==t);l=!0);}catch(e){u=!0,a=e}finally{try{if(!l&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(u)throw a}}return c}}(n,o)||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,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.")}()),m=u[0],f=u[1];function p(e){f((function(t){return t>=e?t:e}))}var v=r.useMemo((function(){var t={};return e.curriculumLinks.forEach((function(e){var n=null,r=null,a=[],i=[];e.forEach((function(e){switch(e.type){case c.k.Subject:n=e;break;case c.k.Audience:r=e;break;case c.k.Area:a.push(e);break;case c.k.Leaf:i.push(e)}}));var o="".concat(n.id,":").concat(r.id);t[o]?t[o].areasAndLeaves.push(s(s({},c.k.Area,a),c.k.Leaf,i)):t[o]=s(s(s({},c.k.Subject,n),c.k.Audience,r),"areasAndLeaves",[s(s({},c.k.Area,a),c.k.Leaf,i)])})),t}),[e.curriculumLinks]);return e.curriculumLinks?(null===(t=e.curriculumLinks)||void 0===t?void 0:t.length)?r.createElement("ul",{className:"list-unstyled m-0"},Object.keys(v).map((function(e,t){return r.createElement("li",{key:"linkset-".concat(t),className:l.curriculumSet},r.createElement(h,{linkSet:v[e],trySetMaxCodeWidth:p,codeWidth:m}))}))):r.createElement(a.p,{emptyStateUrl:e.emptyStateUrl}):r.createElement(i.Z,null)}},22283:(e,t,n)=>{n.d(t,{P:()=>c});var r=n(32735),a=n(1353),i=n(63112),o=n(65163);function c(e){var t,n,c;return r.createElement(o.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 r.createElement(a.$,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 r.createElement(i.o,null)},widgetDataDeps:[null===(c=null===(n=e.selectedCurriculum)||void 0===n?void 0:n.id)||void 0===c?void 0:c.toString(),e.onChangeCurriculum],noNegativePadding:e.noNegativePadding})}},51184:(e,t,n)=>{n.d(t,{NE:()=>s,RH:()=>m,Wp:()=>d});var r=n(32735),a=n(16367),i=n(34468),o=n(73758),c=n(63847);function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var u=/\[\]\(cv:\/\/poi\?id=\d+\)\n*/g;function s(e,t){var n,i,o,c=(i=(0,r.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 r,a,i,o,c=[],l=!0,u=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=i.call(n)).done)&&(c.push(r.value),c.length!==t);l=!0);}catch(e){u=!0,a=e}finally{try{if(!l&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(u)throw a}}return c}}(i,o)||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}}(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.")}()),s=c[0],d=c[1];return(0,r.useEffect)((function(){if(t){var n=(r=e.glance,i=r.content.replace(u,""),a(i));d(n)}var r,i}),[null===(n=e.glance)||void 0===n?void 0:n.content,t]),s}function d(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,r.useRef)();function a(){e&&o.n.trigger("glance:poi:mouseover",e)}function l(){o.n.trigger("glance:poi:mouseleave")}return(0,i.R)("player:poi:mouseover",(function(t){var r,a,i;(null==t?void 0:t.id)&&(null===(r=null==e?void 0:e.id)||void 0===r?void 0:r.toString())===(null===(a=null==t?void 0:t.id)||void 0===a?void 0:a.toString())&&(null===(i=n.current)||void 0===i||i.classList.add(c.Z.highlightPoi))}),null,t),(0,i.R)("player:poi:mouseleave",(function(){var e;null===(e=n.current)||void 0===e||e.classList.remove(c.Z.highlightPoi)}),null,t),(0,r.useEffect)((function(){var e,r;if(n.current&&t)return null===(e=n.current)||void 0===e||e.addEventListener("mouseover",a),null===(r=n.current)||void 0===r||r.addEventListener("mouseleave",l),function(){var e,t;null===(e=n.current)||void 0===e||e.removeEventListener("mouseover",a),null===(t=n.current)||void 0===t||t.removeEventListener("mouseleave",l)}}),[n.current]),n}},64921:(e,t,n)=>{n.d(t,{j:()=>k});var r=n(32735),a=n(42648),i=n(11607),o=n(83345),c=n(93264),l=n(51184);const u={poiEntry:"vr6R9",poiText:"znHZF",public:"v0BZ9",poiTimeStamp:"AdKwe"};function s(e){var t=c.T.ToDisplayDuration(1e3*e.poi.startTime),n=(0,l.RH)(e.poi,!e.suppressInteractivity);return e.suppressInteractivity?r.createElement("div",{className:"d-flex ".concat(u.poiEntry," mb-2")},r.createElement("span",{className:"d-flex rounded-pill justify-content-center align-items-center fw-semibold info-link ".concat(u.poiTimeStamp)},t),r.createElement("div",{className:"".concat(u.public," ms-2")},e.poi.description)):r.createElement(i.L,{key:e.poi.startTime,className:"d-flex ".concat(u.poiEntry," mb-2 cursor-pointer"),onClick:function(){return e.onClickPoiItem(e.poi.startTime)},ref:n},r.createElement("div",{className:"d-flex rounded-pill justify-content-center align-items-center fw-semibold info-link ".concat(u.poiTimeStamp)},t),r.createElement("div",{className:"ms-2 ".concat(u.poiText)},e.poi.description))}var d="shared.pointsOfInterestList";function m(e){return r.createElement("div",null,r.createElement("h2",{className:"h6 my-2"},r.createElement(o.x,{namespace:d,phrase:"heading"})),r.createElement("div",null,e.pointsOfInterest.map((function(t){return r.createElement(s,{key:t.startTime,poi:t,suppressInteractivity:e.suppressInteractivity,onClickPoiItem:e.onClickPoiItem})}))))}var f=n(87311),p=n(91743),v=n(44829),h=n(31908),g=n(63847),y="shared.videoAtAGlanceV2",b=350;function E(e){return e.hideScrollbar?r.createElement(r.Fragment,null,e.children):r.createElement("div",{className:"rounded border mb-4 bg-white"},r.createElement(a.ZP,{autoHeight:!0,autoHeightMax:b},r.createElement("div",{className:"px-3 px-3 pt-3 pb-2"},e.children)))}function k(e){var t,n,a,i,c=(0,l.NE)(e.video,e.canViewGlance),u=h.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===(i=null===(a=e.video.tags)||void 0===a?void 0:a.data)||void 0===i?void 0:i.filter((function(e){return e.tagType===v.Q.Pedagogy||e.tagType===v.Q.Skill}));return e.canViewGlance?r.createElement("section",{className:"play-page-section"},r.createElement(E,{hideScrollbar:e.hideScrollbar},r.createElement("h2",{className:"h6 mb-2"},r.createElement(o.x,{namespace:y,phrase:"learningIntention"})),r.createElement("div",{className:"".concat(g.Z.learningIntention," mb-3")},r.createElement("div",{dangerouslySetInnerHTML:{__html:c}})),!!(null==u?void 0:u.length)&&r.createElement("div",{className:"mb-1"},r.createElement(p.P,Object.assign({tags:u},f.G.getTagActionProps(e.getTagAppLink,e.onClickTag,e.suppressInteractivity),{className:"mt-2"}))),!!e.pointsOfInterest.length&&r.createElement(m,{pointsOfInterest:e.pointsOfInterest,suppressInteractivity:e.suppressInteractivity,onClickPoiItem:function(t){e.setStartTime(t)}}))):r.createElement(r.Fragment,null)}},63112:(e,t,n)=>{n.d(t,{o:()=>i});var r=n(32735),a=n(91807),i=r.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(a.Z.partialTag);return r.createElement("div",{className:"mt-1"},r.createElement("span",{className:n}," "))}))},87311:(e,t,n)=>{n.d(t,{G:()=>a});var r=n(81886),a={getTagActionProps:function(e,t,n){return n?{onClick:function(n){t&&t();var a=e?e(n):null;if(a)return r.Q.C$.trigger(a)}}:{getAppLink:function(t){return e?e(t):null},onClick:t}}}},16035:(e,t,n)=>{n.d(t,{z:()=>c});var r=n(32735),a=n(36848),i=n(44829),o=n(91807);function c(e){var t,n,c=e.tag,l=e.appLink,u=e.onClick,s=e.disabled,d=e.tagClass,m=void 0===d?"tag":d,f=c.name.toLowerCase(),p=null===(t=c.tagType)||void 0===t?void 0:t.toLowerCase(),v=p===i.Q.Normal&&e.themeColours&&!!(null===(n=e.themeColours)||void 0===n?void 0:n.secondary),h="rounded-pill py-1 px-2 my-1 me-1 ".concat(m," ").concat(function(e,t){switch(e){case i.Q.Pedagogy:case i.Q.Skill:return"pedagogy-tag text-white";case i.Q.Hidden:return"hidden-tag fw-normal";case i.Q.Normal:return t?"":"bg-gray-100 fw-normal";default:return""}}(p,v));v&&(h+=" text-white"),!l&&!u||s||(h+=" cursor-pointer"),s&&(h+=" "+o.Z.disabled),e.onRemove&&(h+=" "+o.Z.badge),l||(h+=" d-inline-block");var g=v?{backgroundColor:e.themeColours.secondary}:{};return l?r.createElement(a.F,{onClick:u,appLink:l,className:h,title:f,style:g},r.createElement("span",{className:"text-truncate text-nowrap"},f)):r.createElement("span",{onClick:u,className:h,title:f,style:g},r.createElement("span",{className:"text-truncate text-nowrap"},f,e.onRemove&&r.createElement("button",{onClick:e.onRemove,className:"".concat(o.Z.close," btn-close font-size-normal"),role:"button","aria-label":"Close"})))}},91743:(e,t,n)=>{n.d(t,{P:()=>u});var r=n(32735),a=n(16035),i=n(44829),o=n(91807);function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function l(e){var t;switch(null===(t=e.tagType)||void 0===t?void 0:t.toLowerCase()){case i.Q.Pedagogy:return 0;case i.Q.Skill:return 1;default:return 2}}function u(e){if(!e.tags)return r.createElement(r.Fragment,null);var t,n=(t=e.tags,function(e){if(Array.isArray(e))return c(e)}(t)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(t)||function(e,t){if(e){if("string"==typeof e)return c(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?c(e,t):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()).sort((function(e,t){return l(e)-l(t)}));return r.createElement("div",{className:"".concat(o.Z.tagList," ").concat(e.className)},n.map((function(t){var n="function"==typeof e.getAppLink?e.getAppLink(t):null,i="function"==typeof e.onRemove?function(){return e.onRemove(t)}:null,o="function"==typeof e.onClick?function(){return e.onClick(t)}:null;return r.createElement(a.z,{key:t.id||t.name,tag:t,appLink:n,themeColours:e.themeColours,onRemove:i,onClick:o})})))}},88513:(e,t,n)=>{n.d(t,{B:()=>s});var r=n(32735),a=n(23481),i=n(65858),o=n(36848);const c={seeMore:"yv0FS"};var l=a.T.encloseNamespace("shared.widgetHeader");function u(e){return r.createElement("div",{className:"ms-3 ".concat(c.seeMore)},r.createElement(o.F,{appLink:e.appLink,analyticsData:e.analyticsData,analyticsOptions:Object.assign(Object.assign({},e.analyticsOptions),{descriptor:i._S.SeeMore}),className:"text-decoration-none ".concat(e.appLink?"curated-widget-link":"")},r.createElement("p",{className:"hover-text-underline text-dark curated-widget-heading"},l("seeMore"))))}function s(e){var t=!!e.description;return e.name||e.description?r.createElement("div",{className:"curated-widget-header"},r.createElement("div",{className:"d-flex justify-content-between"},!!e.name&&r.createElement("div",{className:c.title},r.createElement(o.F,{appLink:e.appLink,analyticsOptions:e.analyticsOptions,analyticsData:e.analyticsData,className:"text-decoration-none ".concat(e.appLink?"curated-widget-link":""),onClick:e.onClick},r.createElement("h2",{className:"h4 curated-widget-heading"},e.name))),!!e.appLink&&!t&&!!e.showSeeMoreLink&&r.createElement(u,Object.assign({},e))),t&&r.createElement("div",{className:"d-flex justify-content-between align-items-end"},r.createElement("p",{className:"description curated-widget-description ".concat(c.description)},r.createElement("span",null,e.description)),!!e.appLink&&!!e.showSeeMoreLink&&r.createElement(u,Object.assign({},e)))):r.createElement(r.Fragment,null)}},65163:(e,t,n)=>{n.d(t,{QL:()=>r.Q,eb:()=>r.e});var r=n(16450);n(14244)},43872:(e,t,n)=>{n.d(t,{V:()=>s});var r=n(32735),a=n(82182),i=n(31069),o=n(91967),c=new Image;c.src="data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs=";var l=function(e){e.dataTransfer.setDragImage&&o.q.isFunction(e.dataTransfer.setDragImage)&&e.dataTransfer.setDragImage(c,0,0)},u=a.V.isTouchScreen(),s=r.forwardRef((function(e,t){var n,a,o,c,s=e.children,d=e.positionType,m=e.onDrag,f=e.onDragEnd,p=e.onTouchMove,v=e.onTouchEnd,h=e.percentageDragged,g=e.position,y=void 0===g?0:g;return r.createElement("div",Object.assign({className:"d-flex flex-nowrap position-relative w-100",style:(a=y,o=d,c=h,o===i.C.Percentage&&c&&(a-=c),{transform:"translate3d(".concat(a).concat(o,", 0px, 0px)"),transition:"transform .4s ease-in-out"}),ref:t},(n={},m&&f&&(n.draggable=!0,n.onDragEnd=f,n.onDragStart=l,n.onDragOver=m),p&&v&&u&&(n.onTouchMoveCapture=p,n.onTouchEndCapture=v),n)),s)}))},16930:(e,t,n)=>{n.d(t,{W:()=>u,f:()=>l});var r=n(32735),a=n(83914),i=n(35223);const o="VSAPU",c="kgeXh";var l;!function(e){e[e.Left=0]="Left",e[e.Right=1]="Right"}(l||(l={}));var u=r.memo((function(e){var t,n,u,s=e.direction===l.Left,d=s?i.vn.ChevronLeft:i.vn.ChevronRight;return e.hide?r.createElement(r.Fragment,null):r.createElement("div",{className:"_ejId",style:"videos"===(null===(n=e.state)||void 0===n?void 0:n.contents)?{paddingBottom:56.25/(null===(u=e.state)||void 0===u?void 0:u.viewableItems)+"%"}:{height:"100%"}},e.useGradientBackdrop&&r.createElement("div",{className:s?"".concat("Pt3nx"," ").concat(e.leftGradientClassName):"".concat("ZuAif"," ").concat(e.rightGradientClassName)}),!e.hideExtendedClickableArea&&r.createElement("div",{role:"button",onClick:e.onClick,className:"".concat("AtsWP"," ").concat(s?o:c)}),r.createElement("div",{role:"button",className:"".concat((t="BVcIS",t+=s?" ".concat(o," ").concat(e.leftButtonClassName):" ".concat(c," ").concat(e.rightButtonClassName))," ").concat("gAsE9"," ").concat(e.className||""),onClick:e.onClick},e.hoverText&&r.createElement("span",{className:"ps-3 pe-2 ".concat("APA36")},e.hoverText),r.createElement(a.x,{svgName:d,size:a.S.Medium,className:"svg-container d-inline-block ".concat("Ev4hr")})))}))},31069:(e,t,n)=>{var r;n.d(t,{C:()=>r}),function(e){e.Percentage="%",e.Pixels="px"}(r||(r={}))},85597:(e,t,n)=>{var r;n.d(t,{k:()=>r}),function(e){e.Subject="CurriculumSubject",e.Audience="CurriculumAudience",e.Area="CurriculumArea",e.Leaf="CurriculumLeaf"}(r||(r={}))},44829:(e,t,n)=>{var r,a;n.d(t,{Q:()=>r}),function(e){e.Normal="normal",e.Pedagogy="pedagogy",e.Hidden="hidden",e.Skill="skill",e.Curation="curation"}(r||(r={})),function(e){e[e.Normal=0]="Normal",e[e.Pedagogy=1]="Pedagogy",e[e.Hidden=2]="Hidden",e[e.Skill=3]="Skill",e[e.Curation=4]="Curation"}(a||(a={}))},10841:(e,t,n)=>{var r;n.d(t,{n:()=>r}),function(e){e.Init="init",e.Next="next",e.Previous="previous",e.Resize="resize",e.Drag="drag",e.Update="update",e.JumpToIndex="jump-to-index"}(r||(r={}))},81514:(e,t,n)=>{n.d(t,{V:()=>i});var r=n(86764),a=n(3747);function i(){var e=(0,a.a)(r.r.XS),t=(0,a.a)(r.r.SM),n=(0,a.a)(r.r.MD),i=(0,a.a)(r.r.LG),o=(0,a.a)(r.r.XL),c=(0,a.a)(r.r.XXL),l=r.r.LG;return e&&(l=r.r.XS),t&&(l=r.r.SM),n&&(l=r.r.MD),i&&(l=r.r.LG),o&&(l=r.r.XL),c&&(l=r.r.XXL),l}},35014:(e,t,n)=>{n.d(t,{I:()=>l});var r=n(16714),a=n(12754),i=n(22902),o=n(15311),c=n(11387);function l(){var e=(0,i.T)(),t=e.hasPermissions,n=e.hasLocalPermissions,l=(0,(0,o.r)().hasProduct)(a.x.Primary);return{canViewGlance:t(r.C.ViewVideoGlance),canViewResources:!0,canViewInteractives:l&&t(r.C.ViewVideoInteractives),canViewClips:l&&t(r.C.ViewVideoClips),canViewCurriculumLinks:t(r.C.ViewCurriculums),canUseActions:n(r.E.UseVideoActions),canViewPublicLayout:!n(r.E.WatchVideos)&&c.C.hasRegionPrefix(),canViewResourceItems:n(r.E.ViewVideoResourceItems),canNavigate:l}}},44005:(e,t,n)=>{n.r(t),n.d(t,{VideoGuidanceClassroomGuideView:()=>D});var r=n(32735),a=n(81886),i=n(20354),o=n(28400),c=n(49985),l=n(65858),u=n(42648),s=n(23481),d=n(75896),m=n(44599),f=n(34223),p=n(22283),v=n(64921),h=n(9111),g=n(13876),y=n(83345),b=n(69883);function E(e){return E="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},E(e)}function k(){k=function(){return t};var e,t={},n=Object.prototype,r=n.hasOwnProperty,a=Object.defineProperty||function(e,t,n){e[t]=n.value},i="function"==typeof Symbol?Symbol:{},o=i.iterator||"@@iterator",c=i.asyncIterator||"@@asyncIterator",l=i.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function s(e,t,n,r){var i=t&&t.prototype instanceof g?t:g,o=Object.create(i.prototype),c=new j(r||[]);return a(o,"_invoke",{value:A(e,n,c)}),o}function d(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}t.wrap=s;var m="suspendedStart",f="suspendedYield",p="executing",v="completed",h={};function g(){}function y(){}function b(){}var w={};u(w,o,(function(){return this}));var C=Object.getPrototypeOf,L=C&&C(C(T([])));L&&L!==n&&r.call(L,o)&&(w=L);var S=b.prototype=g.prototype=Object.create(w);function x(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function N(e,t){function n(a,i,o,c){var l=d(e[a],e,i);if("throw"!==l.type){var u=l.arg,s=u.value;return s&&"object"==E(s)&&r.call(s,"__await")?t.resolve(s.__await).then((function(e){n("next",e,o,c)}),(function(e){n("throw",e,o,c)})):t.resolve(s).then((function(e){u.value=e,o(u)}),(function(e){return n("throw",e,o,c)}))}c(l.arg)}var i;a(this,"_invoke",{value:function(e,r){function a(){return new t((function(t,a){n(e,r,t,a)}))}return i=i?i.then(a,a):a()}})}function A(t,n,r){var a=m;return function(i,o){if(a===p)throw Error("Generator is already running");if(a===v){if("throw"===i)throw o;return{value:e,done:!0}}for(r.method=i,r.arg=o;;){var c=r.delegate;if(c){var l=P(c,r);if(l){if(l===h)continue;return l}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(a===m)throw a=v,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);a=p;var u=d(t,n,r);if("normal"===u.type){if(a=r.done?v:f,u.arg===h)continue;return{value:u.arg,done:r.done}}"throw"===u.type&&(a=v,r.method="throw",r.arg=u.arg)}}}function P(t,n){var r=n.method,a=t.iterator[r];if(a===e)return n.delegate=null,"throw"===r&&t.iterator.return&&(n.method="return",n.arg=e,P(t,n),"throw"===n.method)||"return"!==r&&(n.method="throw",n.arg=new TypeError("The iterator does not provide a '"+r+"' method")),h;var i=d(a,t.iterator,n.arg);if("throw"===i.type)return n.method="throw",n.arg=i.arg,n.delegate=null,h;var o=i.arg;return o?o.done?(n[t.resultName]=o.value,n.next=t.nextLoc,"return"!==n.method&&(n.method="next",n.arg=e),n.delegate=null,h):o:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,h)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function I(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function j(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function T(t){if(t||""===t){var n=t[o];if(n)return n.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var a=-1,i=function n(){for(;++a<t.length;)if(r.call(t,a))return n.value=t[a],n.done=!1,n;return n.value=e,n.done=!0,n};return i.next=i}}throw new TypeError(E(t)+" is not iterable")}return y.prototype=b,a(S,"constructor",{value:b,configurable:!0}),a(b,"constructor",{value:y,configurable:!0}),y.displayName=u(b,l,"GeneratorFunction"),t.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===y||"GeneratorFunction"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,b):(e.__proto__=b,u(e,l,"GeneratorFunction")),e.prototype=Object.create(S),e},t.awrap=function(e){return{__await:e}},x(N.prototype),u(N.prototype,c,(function(){return this})),t.AsyncIterator=N,t.async=function(e,n,r,a,i){void 0===i&&(i=Promise);var o=new N(s(e,n,r,a),i);return t.isGeneratorFunction(n)?o:o.next().then((function(e){return e.done?e.value:o.next()}))},x(S),u(S,l,"Generator"),u(S,o,(function(){return this})),u(S,"toString",(function(){return"[object Generator]"})),t.keys=function(e){var t=Object(e),n=[];for(var r in t)n.push(r);return n.reverse(),function e(){for(;n.length;){var r=n.pop();if(r in t)return e.value=r,e.done=!1,e}return e.done=!0,e}},t.values=T,j.prototype={constructor:j,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(I),!t)for(var n in this)"t"===n.charAt(0)&&r.call(this,n)&&!isNaN(+n.slice(1))&&(this[n]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var n=this;function a(r,a){return c.type="throw",c.arg=t,n.next=r,a&&(n.method="next",n.arg=e),!!a}for(var i=this.tryEntries.length-1;i>=0;--i){var o=this.tryEntries[i],c=o.completion;if("root"===o.tryLoc)return a("end");if(o.tryLoc<=this.prev){var l=r.call(o,"catchLoc"),u=r.call(o,"finallyLoc");if(l&&u){if(this.prev<o.catchLoc)return a(o.catchLoc,!0);if(this.prev<o.finallyLoc)return a(o.finallyLoc)}else if(l){if(this.prev<o.catchLoc)return a(o.catchLoc,!0)}else{if(!u)throw Error("try statement without catch or finally");if(this.prev<o.finallyLoc)return a(o.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev<a.finallyLoc){var i=a;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var o=i?i.completion:{};return o.type=e,o.arg=t,i?(this.method="next",this.next=i.finallyLoc,h):this.complete(o)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),h},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),I(n),h}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var a=r.arg;I(n)}return a}}throw Error("illegal catch attempt")},delegateYield:function(t,n,r){return this.delegate={iterator:T(t),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=e),h}},t}function w(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var C=function(e,t,n,r){return new(n||(n=Promise))((function(a,i){function o(e){try{l(r.next(e))}catch(e){i(e)}}function c(e){try{l(r.throw(e))}catch(e){i(e)}}function l(e){var t;e.done?a(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(o,c)}l((r=r.apply(e,t||[])).next())}))},L=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var a=0;for(r=Object.getOwnPropertySymbols(e);a<r.length;a++)t.indexOf(r[a])<0&&Object.prototype.propertyIsEnumerable.call(e,r[a])&&(n[r[a]]=e[r[a]])}return n},S="shared.videoGuidanceClassroomGuidePopup",x=350;function N(e){var t,n,i,o,E,N,A,P=(N=r.useState(),A=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 r,a,i,o,c=[],l=!0,u=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=i.call(n)).done)&&(c.push(r.value),c.length!==t);l=!0);}catch(e){u=!0,a=e}finally{try{if(!l&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(u)throw a}}return c}}(N,A)||function(e,t){if(e){if("string"==typeof e)return w(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)?w(e,t):void 0}}(N,A)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),O=P[0],I=P[1],j=(0,b.Z)();r.useEffect((function(){if(!e.isLoading&&e.curriculums&&!O){var t=e.curriculums.activeCurriculum?e.curriculums.activeCurriculum:d.m.first(e.curriculums.availableCurriculums);I(t)}}),[e.isLoading,null===(n=null===(t=e.curriculums)||void 0===t?void 0:t.activeCurriculum)||void 0===n?void 0:n.id]);var T=e.canViewCurriculumLinks&&(null===(i=e.curriculums)||void 0===i?void 0:i.customerHasCurriculumLinks);return r.createElement(h.G,{closePopup:e.onClickClose,showLoadingSpinner:e.isLoading,title:s.T.getPhrase(S,"classroomGuide"),size:"lg"},!e.isLoading&&r.createElement(r.Fragment,null,r.createElement(u.ZP,{autoHeightMax:x,autoHeightMin:x,autoHeight:!0,className:"pb-3",renderThumbVertical:function(e){var t=e.style,n=L(e,["style"]);return r.createElement("div",Object.assign({},n,{style:Object.assign(Object.assign({},t),{borderRadius:"inherit",backgroundColor:"rgba(0, 0, 0, 0.2)",zIndex:5}),className:"thumb-vertical"}))}},r.createElement("div",{className:T?"mb-4":""},r.createElement(v.j,{video:e.video,pointsOfInterest:e.pointsOfInterest,setStartTime:function(t){a.Q.C$.trigger(e.getVideoAppLink(e.video,{t})),e.closePopup()},getTagAppLink:e.getTagAppLink,suppressInteractivity:e.canViewPublicLayout,onClickTag:e.closePopup,canViewGlance:e.canViewGlance,hideScrollbar:!0})),T&&r.createElement(r.Fragment,null,r.createElement("h2",{className:"h6"},r.createElement(y.x,{namespace:S,phrase:"curriculumLinks"})),r.createElement("div",{className:"mb-2"},r.createElement(p.P,{curriculums:e.curriculums,selectedCurriculum:O,onChangeCurriculum:function(t){var n,r,a;return C(this,void 0,void 0,k().mark((function i(){var o;return k().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:if(null==(o=e.curriculums.availableCurriculums.find((function(e){return e.id.toString()===t})))?void 0:o.id){i.next=3;break}return i.abrupt("return",!1);case 3:if((null===(r=null===(n=e.curriculums.activeCurriculum)||void 0===n?void 0:n.id)||void 0===r?void 0:r.toString())!==(null===(a=null==o?void 0:o.id)||void 0===a?void 0:a.toString())){i.next=5;break}return i.abrupt("return",!1);case 5:return I(o),i.prev=6,i.next=9,e.curriculums.updateCurriculum(o);case 9:c.k.logUserAction({id:o.id,name:o.id,description:o.description,videoId:e.video.id,videoName:e.video.name},{entity:l.py.Presentation,actionType:l.Vw.Select,descriptor:l.kD.Curriculum,location:l.LZ.ClassroomGuidancePopup}),i.next=16;break;case 12:i.prev=12,i.t0=i.catch(6),I(O),j.error(s.T.getPhrase(S,"updateCurriculumFailed"));case 16:case"end":return i.stop()}}),i,null,[[6,12]])})))},noNegativePadding:!0})),(null===(o=e.curriculums)||void 0===o?void 0:o.hasLoaded)?r.createElement(f.Y,{curriculumLinks:null===(E=e.curriculums)||void 0===E?void 0:E.curriculumLinks,emptyStateUrl:e.curriculumLinksEmptyStateUrl}):r.createElement(m.Z,null))),r.createElement(g.u,null,r.createElement(g.u.Cancel,{onClick:e.onClickClose,text:s.T.getPhrase(S,"close")}),r.createElement(g.u.Submit,{text:s.T.getPhrase(S,"viewVideo"),variant:"dark",onClick:e.onClickViewVideo}))))}var A=n(4594),P=n(43012),O=n(1575),I=n(31908),j=n(99742),T=n(14070),V=n(97291),M=n(82817),G=n(49948),_=n(35014),R=n(22490);function D(e){var t=i.a.useBasicFetch(e.type===A.E.Video?O.R.video(e.id):P.e.clip(e.id)),n=(0,G.l)(e.id,!0),u=(0,M.M)(e.id,!0),s=(0,_.I)();return r.createElement(N,{isLoading:!t.hasCompleted||!n.hasCompleted,video:t.data,pointsOfInterest:n.items,curriculums:u,onClickClose:function(){c.k.logUserAction({id:t.data.id,name:t.data.name},{entity:I.M.isVideo(t.data)?l.py.Video:l.py.Clip,location:l.LZ.ClassroomGuidancePopup,actionType:l.Vw.Click,descriptor:l.od.Close}),e.closePopup()},onClickViewVideo:function(){if(c.k.logUserAction({id:t.data.id,name:t.data.name},{entity:I.M.isVideo(t.data)?l.py.Video:l.py.Clip,location:l.LZ.ClassroomGuidancePopup,actionType:l.Vw.Click,descriptor:l.od.ViewVideo}),I.M.isVideo(t.data))return a.Q.C$.trigger({application:V.O.VIDEOS,action:T.e.Videos.PLAY_VIDEO,args:[t.data.id,o.m.slugify(t.data.name)]}),void e.closePopup();a.Q.C$.trigger({application:V.O.CLIPS,action:T.e.Clips.PLAY_CLIP,args:[t.data.id,o.m.slugify(t.data.name)]}),e.closePopup()},curriculumLinksEmptyStateUrl:j.W.EmptyStates.CURRICULUM_LINKS,getVideoAppLink:R.W.getAppLink,getTagAppLink:function(e){return{application:V.O.SEARCH,action:T.e.Search.HOME,params:{tagOrClassification:e.name}}},canViewCurriculumLinks:s.canViewCurriculumLinks,canViewPublicLayout:s.canViewPublicLayout,canViewGlance:s.canViewGlance,closePopup:e.closePopup})}},22161:(e,t,n)=>{n.d(t,{Z:()=>r});const r={curriculumSubject:"GvGYH",curriculumSet:"d7RK0",areaLeafSet:"XRTAe",closeButton:"N3l5Q",heading:"hAxR4",leafDescriptionOnly:"h66ke",dropdown:"CsG6G",tag:"rdLqY",cover:"etwaD",active:"aDLMe",selected:"BMrSd"}},63847:(e,t,n)=>{n.d(t,{Z:()=>r});const r={learningIntention:"MHM6O",highlightPoi:"U7Q6x"}},91807:(e,t,n)=>{n.d(t,{Z:()=>r});const r={tagList:"Zw6d9",disabled:"jlL1c",partialTag:"too_N",badge:"OjtN8",close:"X9joI"}}}]);
3
+ //# sourceMappingURL=9620-d0f04eeccd-lite.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/9620-d0f04eeccd-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/common/src/react/hooks/UseEventsServiceSubscribe.ts","file:///app/packages/libs/common/src/react/services/EventsService.ts","file:///app/packages/libs/shared/src/components/curriculum-links/CurriculumLinkItem.tsx","file:///app/packages/libs/shared/src/components/curriculum-links/CurriculumLinksEmptyState.tsx","file:///app/packages/libs/shared/src/components/curriculum-links/partial-loading/PartialCurriculumLinks.tsx","file:///app/packages/libs/shared/src/components/curriculum-links/partial-loading/partial-curriculum-links.scss","file:///app/packages/libs/shared/src/components/play-page-v2/curriculum-links/curriculum-links.scss","file:///app/packages/libs/shared/src/components/play-page-v2/curriculum-links/CurriculumLinksV2.tsx","file:///app/packages/libs/shared/src/components/play-page-v2/curriculum-links/CurriculumsWidget.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/tags/PartialTagItem.tsx","file:///app/packages/libs/shared/src/components/tags/TagHelper.ts","file:///app/packages/libs/shared/src/components/tags/TagItem.tsx","file:///app/packages/libs/shared/src/components/tags/TagList.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/components/header/widget-header.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/components/header/WidgetHeader.tsx","file:///app/packages/libs/shared/src/utils/DragHelper.ts","file:///app/packages/libs/shared/src/components/widgets/sliding-list/SlidingListContainer.tsx","file:///app/packages/libs/shared/src/components/widgets/widget-button/widget-button.scss","file:///app/packages/libs/shared/src/components/widgets/widget-button/WidgetButton.tsx","file:///app/packages/libs/shared/src/enums/CssMeasurement.ts","file:///app/packages/libs/shared/src/enums/CurriculumType.ts","file:///app/packages/libs/shared/src/enums/TagType.ts","file:///app/packages/libs/shared/src/enums/WidgetInteraction.ts","file:///app/packages/libs/shared/src/hooks/UseGetMediaQueryString.ts","file:///app/packages/projects/lite/src/shared/hooks/useVideoFeatureAccess.ts","file:///app/packages/libs/shared/src/components/video-guidance/classroom-guide/popup/VideoGuidanceClassroomGuidePopup.tsx","file:///app/packages/projects/lite/src/shared/views/video-guidance-classroom-guide/VideoGuidanceClassroomGuideView.tsx","file:///app/packages/libs/shared/src/components/curriculum-links/curriculum-links.scss","file:///app/packages/libs/shared/src/components/play-page-v2/glance/video-at-a-glance.scss","file:///app/packages/libs/shared/src/components/tags/tags.scss"],"sourcesContent":["import { useEffect } from 'react';\n\nimport { EventsService } from 'libs/common/react/services/EventsService';\n\n/**\n * \n * @param event the event to subscribe to\n * @param callback the callback function\n * @param once whether to subscribe once\n * @param shouldSubscribe conditionally determine whether to subscribe to events\n * @returns unsubscribe function\n */\nexport function useEventsServiceSubscribe(\n event: string,\n callback: (...args: any[]) => void,\n once?: boolean,\n shouldSubscribe?: boolean\n): () => void {\n const unsubscribe = () => {\n EventsService.unsubscribe(event, callback);\n };\n\n useEffect(() => {\n if (!shouldSubscribe)\n return;\n\n once ? EventsService.subscribeOnce(event, callback) : EventsService.subscribe(event, callback);\n\n return () => {\n unsubscribe();\n };\n }, []);\n\n return unsubscribe;\n}","type EventCallback = (...args: any[]) => void;\n\ninterface EventListener {\n callback: EventCallback,\n executionLimit?: number;\n executionCount?: number;\n}\n\ninterface EventsListenerHash {\n [event: string]: EventListener[];\n}\n\nexport class StaticEventsService {\n public subscribe(event: string, callback: EventCallback): void {\n this.registerListener(event, callback);\n }\n\n public subscribeOnce(event: string, callback: EventCallback): void {\n this.registerListener(event, callback, 1);\n }\n\n public unsubscribe(event: string, callback?: EventCallback): void {\n this.deregisterListener(event, callback);\n }\n\n public trigger(event: string, ...args: any[]): void {\n this.triggerCallbacks(event, args);\n }\n\n /**\n * Private functions/members below\n */\n\n private listeners: EventsListenerHash = {};\n\n private registerListener(event: string, callback: EventCallback, executionLimit?: number) {\n if (typeof event !== 'string')\n throw new Error('Event name must be a string');\n\n if (typeof callback !== 'function')\n throw new Error('Event callback must be a function');\n\n if (!!executionLimit && typeof executionLimit !== 'number')\n throw new Error('Execution limit must be a number or undefined');\n\n this.listeners[event] = this.listeners[event] ?? [];\n this.listeners[event].push({ callback, executionLimit });\n }\n\n private deregisterListener(event: string, callback?: EventCallback): void {\n if (typeof event !== 'string')\n throw new Error('Event name must be a string');\n\n if (!!callback && typeof callback !== 'function')\n throw new Error('Event callback must be a function');\n \n if (!callback) {\n this.listeners[event] = [];\n return;\n }\n\n const idxToRemove = this.listeners[event]?.findIndex(e => e.callback === callback);\n\n if (typeof idxToRemove !== 'number' || idxToRemove === -1)\n return;\n\n this.listeners[event].splice(idxToRemove, 1);\n\n if (this.listeners[event].length === 0)\n delete this.listeners[event];\n }\n\n private triggerCallbacks(event: string, ...args: any[]): void {\n if (!this.listeners[event])\n return;\n\n const callbacksToRemove: EventCallback[] = [];\n\n this.listeners[event].forEach(listener => {\n if (typeof listener.executionLimit === 'number') {\n listener.executionCount = listener.executionCount ?? 0;\n listener.executionCount++;\n\n if (listener.executionCount === listener.executionLimit)\n callbacksToRemove.push(listener.callback);\n }\n\n listener.callback.apply(null, ...args);\n });\n\n if (!callbacksToRemove.length)\n return;\n\n callbacksToRemove.forEach(callback => this.deregisterListener(event, callback));\n }\n}\n\nexport const EventsService = new StaticEventsService();","import React from 'react';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Presentation } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './curriculum-links.scss';\n\ninterface CurriculumLinkItemProps {\n data: Presentation;\n onChangeCurriculum: (id: string) => any;\n selected: boolean;\n}\n\nexport function CurriculumLinkItem(props: CurriculumLinkItemProps): JSX.Element {\n const { data: curriculumTag } = props;\n\n return (\n <DivButton\n key={curriculumTag.id}\n className={`p-1 pe-2 rounded-pill d-inline-flex align-items-center cursor-pointer ${styles.tag} ${props.selected ? styles.selected : ''}`}\n onClick={() => props.onChangeCurriculum(curriculumTag.id.toString())}\n >\n <div className={`bg-white ${styles.cover} rounded-circle border`}>\n <img\n src={ImageHelper.createUrl(curriculumTag.cover.url, { size: ImageSize.Small })}\n alt={curriculumTag.name}\n className='rounded-circle'\n />\n </div>\n <div className='ms-2'>\n {curriculumTag.name}\n </div>\n </DivButton>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'shared.curriculumLinks';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface CurriculumLinksEmptyStateProps {\n emptyStateUrl: string;\n}\n\nexport function CurriculumLinksEmptyState(props: CurriculumLinksEmptyStateProps): JSX.Element {\n return (\n <EmptyState className='pt-3'>\n <EmptyState.Image src={props.emptyStateUrl} altText={getPhrase('emptyInfo')} size='small'/>\n <EmptyState.Heading>\n <Text namespace={namespace} phrase='emptyHeading' />\n </EmptyState.Heading>\n <EmptyState.Info>\n <Text namespace={namespace} phrase='emptyInfo' />\n </EmptyState.Info>\n </EmptyState>\n );\n}","import React from 'react';\n\nimport styles from './partial-curriculum-links.scss';\n\nconst PartialCurriculumLinkSection = () => (\n <>\n <div className={`partial-loading-background rounded-pill py-1 px-2 d-inline-block me-1 mb-2 ${styles.audience}`} />\n <div>\n <div className={`partial-loading-background mb-1 ${styles.area}`} />\n\n <div className='mb-2 d-flex'>\n <div className={`me-1 align-self-start ${styles.code}`}>\n <div className={`partial-loading-background rounded-pill py-1 px-2 d-inline-block w-100 h-100`} />\n </div>\n \n <div className={`partial-loading-background ${styles.description}`} />\n </div>\n </div>\n </>\n);\n\nexport function PartialCurriculumLinks(): JSX.Element {\n return (\n <div>\n <div className='mb-3'>\n <PartialCurriculumLinkSection />\n </div>\n\n <div className='mb-3'>\n <PartialCurriculumLinkSection />\n </div>\n\n <div>\n <PartialCurriculumLinkSection />\n </div>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"audience\":\"vDcrq\",\"area\":\"GXhoW\",\"code\":\"goKaS\",\"description\":\"vFew6\"};","// extracted by mini-css-extract-plugin\nexport default {\"curriculumSubject\":\"i4D3h\",\"curriculumSet\":\"WCdf9\",\"areaLeafSet\":\"o8H8s\",\"closeButton\":\"McsPs\",\"leafDescriptionOnly\":\"xmEEo\"};","import React from 'react';\n\nimport { CurriculumLinksEmptyState } from 'libs/shared/components/curriculum-links/CurriculumLinksEmptyState';\nimport { PartialCurriculumLinks } from 'libs/shared/components/curriculum-links/partial-loading/PartialCurriculumLinks';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CurriculumType } from 'libs/shared/enums/CurriculumType';\nimport { Curriculum } from 'libs/shared/interfaces';\n\nimport styles from './curriculum-links.scss';\n\nconst BRACKET_SEGMENT_REGEX = /(.*)\\s\\((.*)?\\)/i;\n\nconst namespace = 'shared.curriculumLinks';\n\nconst BASE_PILL_CLASS = 'text-nowrap font-size-normal rounded-pill py-1 px-2 my-0 d-inline-block fw-semibold';\n\ninterface CurriculumStructure {\n [CurriculumType.Subject]: Curriculum<CurriculumType.Subject>;\n [CurriculumType.Audience]: Curriculum<CurriculumType.Audience>;\n areasAndLeaves: Array<{\n [CurriculumType.Area]: Curriculum<CurriculumType.Area>[];\n [CurriculumType.Leaf]: Curriculum<CurriculumType.Leaf>[];\n }>;\n}\n\ninterface CurriculumLeafProps {\n leaf: Curriculum<CurriculumType.Leaf>;\n codeWidth: number;\n trySetMaxCodeWidth: React.Dispatch<React.SetStateAction<number>>;\n uiContainsCodes: boolean;\n}\n\nfunction CurriculumLeaf(props: CurriculumLeafProps): JSX.Element {\n function getCurriculumCodeClass(): string {\n const baseClass = BASE_PILL_CLASS + ' bg-white border';\n\n // If a leaf has no code but the rest of the UI has leaf nodes w/ codes, we show a special \"No code\" pill\n if (!props.leaf.name && props.uiContainsCodes)\n return baseClass + ' border-secondary text-secondary';\n\n return baseClass + ' border-dark';\n }\n\n const codeRef = React.useRef<HTMLDivElement>();\n\n React.useEffect(() => {\n if (!codeRef.current)\n return;\n\n const { width } = codeRef.current.getBoundingClientRect();\n\n props.trySetMaxCodeWidth(width);\n }, [codeRef.current]);\n\n return (\n <div className='d-flex'>\n {(() => {\n if (!props.leaf.description)\n return <p className='m-0' dangerouslySetInnerHTML={{ __html: props.leaf.name }} />;\n\n /**\n * If a leaf has no code but the rest of the UI has leaf nodes\n * with codes, we show a special \"No code\" pill. Example: https://imgur.com/3L1Ela3\n */\n if (!props.leaf.name && props.uiContainsCodes) {\n return (\n <>\n <div\n className='me-1 align-self-start'\n style={{ minWidth: props.codeWidth ? `${props.codeWidth}px` : 'auto' }}\n >\n <h5 ref={codeRef} className={getCurriculumCodeClass()}>\n <Text namespace={namespace} phrase='noCode' />\n </h5>\n </div>\n <p className='m-0 align-self-center' dangerouslySetInnerHTML={{ __html: props.leaf.description }} />\n </>\n );\n }\n\n /**\n * If a leaf has no code and the rest of the UI leaf nodes have no code, we just\n * display the description with a bullet point. Example: https://imgur.com/jzJvmWs\n */\n if (!props.leaf.name && !props.uiContainsCodes)\n return <p className='m-0' dangerouslySetInnerHTML={{ __html: props.leaf.description }} />;\n\n return (\n <>\n <div\n className='me-1 align-self-start'\n style={{ minWidth: props.codeWidth ? `${props.codeWidth}px` : 'auto' }}\n >\n <h5 ref={codeRef} className={getCurriculumCodeClass()}>{props.leaf.name}</h5>\n </div>\n <p className='m-0 align-self-center' dangerouslySetInnerHTML={{ __html: props.leaf.description }} />\n </>\n );\n })()}\n </div>\n );\n}\n\ninterface CurriculumSubjectProps {\n linkSet: CurriculumStructure;\n codeWidth: number;\n trySetMaxCodeWidth: React.Dispatch<React.SetStateAction<number>>;\n}\n\nfunction CurriculumSubject(props: CurriculumSubjectProps): JSX.Element {\n const areaAndLeafSets: { [areaText: string]: Curriculum<CurriculumType.Leaf>[]; } = {};\n\n let uiContainsCodes = false;\n\n props.linkSet.areasAndLeaves.forEach(areaAndLeafSet => {\n const areaText = areaAndLeafSet[CurriculumType.Area].map(ca => ca.name).join(' - ');\n\n if (areaAndLeafSets[areaText]) {\n areaAndLeafSet[CurriculumType.Leaf].forEach(leaf => {\n areaAndLeafSets[areaText].push(leaf);\n\n // We need the info on if _any_ leaf node has a code in it. See why in the comments in `<CurriculumLeaf />`\n if (leaf.name)\n uiContainsCodes = true;\n });\n\n return;\n }\n\n areaAndLeafSets[areaText] = areaAndLeafSet[CurriculumType.Leaf];\n });\n\n function getAudienceText(): string {\n const audienceSegment = props.linkSet[CurriculumType.Audience].name;\n const subjectSegment = props.linkSet[CurriculumType.Subject].name;\n\n /**\n * In some curriculums, such as the UK curriculum, the audience string may contain a year group\n * in brackets. For example, it may be \"Lower Key Stage 2 (Year 4)\".\n * This regex will pull that segment out if it exists.\n */\n const audienceBracketSegments = audienceSegment.match(BRACKET_SEGMENT_REGEX);\n\n if (audienceBracketSegments)\n return `${audienceBracketSegments[1]} • ${audienceBracketSegments[2]} • ${subjectSegment}`;\n\n return `${audienceSegment} • ${subjectSegment}`;\n }\n\n function getLeafStyleClass(leaf: Curriculum<CurriculumType.Leaf>): string {\n const className = 'mb-2';\n\n if (!leaf.name && !uiContainsCodes)\n return className + ' ms-4 ' + styles.leafDescriptionOnly;\n\n return className;\n }\n\n return (\n <>\n <h3 className={`${BASE_PILL_CLASS} text-white bg-dark-blue fw-normal me-1 mb-2`}>\n {getAudienceText()}\n </h3>\n\n <div className={`me-2 ${styles.curriculumSubject}`}>\n {Object.keys(areaAndLeafSets).map((areaText, i) => {\n return (\n <div key={i} className={styles.areaLeafSet} >\n {areaText && <h4 className='mb-1 font-size-normal'>{areaText}</h4>}\n <ul className='list-unstyled'>\n {areaAndLeafSets[areaText].map(leaf => (\n <li key={leaf.id} className={getLeafStyleClass(leaf)}>\n <CurriculumLeaf\n leaf={leaf}\n codeWidth={props.codeWidth}\n trySetMaxCodeWidth={props.trySetMaxCodeWidth}\n uiContainsCodes={uiContainsCodes}\n />\n </li>\n ))}\n </ul>\n </div>\n );\n })}\n </div>\n </>\n );\n}\n\ninterface CurriculumLinksSet {\n [subjectAndAudienceIdKey: string]: CurriculumStructure\n}\n\ninterface CurriculumLinksV2Props {\n curriculumLinks?: Curriculum[][];\n emptyStateUrl: string;\n}\n\nexport function CurriculumLinksV2(props: CurriculumLinksV2Props): JSX.Element {\n const [ codeWidth, setCodeWidth ] = React.useState(0);\n\n function trySetMaxCodeWidth(width: number): void {\n /**\n * The width of the curriculum code column should be identical for each leaf node, meaning\n * the leaf description text will be perfectly vertically aligned all the way down.\n * See here for example: https://imgur.com/MbganZf\n * \n * This is achieved by us setting the state for the maximum code width, and forcing all\n * smaller codes to abide by that max width.\n * \n * This value is used in the `<CurriculumLeaf />` component.\n */\n setCodeWidth(currentVal => {\n if (currentVal >= width)\n return currentVal;\n\n return width;\n });\n }\n\n /**\n * Here, we're taking the structure of links from the backend, and restructuring it in a way\n * that resembles the structure of our UI more closely. The general idea is:\n * \n * CurriculumAudience - CurriculumSubject\n * CurriculumAreas\n * CurriculumLeaves\n */\n const curriculumLinkSets = React.useMemo(() => {\n const newSet: CurriculumLinksSet = {};\n\n props.curriculumLinks.forEach(linkSet => {\n let subject: Curriculum<CurriculumType.Subject> = null;\n let audience: Curriculum<CurriculumType.Audience> = null;\n const areas: Curriculum<CurriculumType.Area>[] = [];\n const leaves: Curriculum<CurriculumType.Leaf>[] = [];\n \n linkSet.forEach(curriculumObj => {\n switch (curriculumObj.type) {\n case CurriculumType.Subject:\n subject = curriculumObj as Curriculum<CurriculumType.Subject>;\n break;\n case CurriculumType.Audience:\n audience = curriculumObj as Curriculum<CurriculumType.Audience>;\n break;\n case CurriculumType.Area:\n areas.push(curriculumObj as Curriculum<CurriculumType.Area>);\n break;\n case CurriculumType.Leaf:\n leaves.push(curriculumObj as Curriculum<CurriculumType.Leaf>);\n break;\n default:\n break;\n }\n });\n \n const key = `${subject.id}:${audience.id}`;\n \n if (newSet[key]) {\n newSet[key].areasAndLeaves.push({\n [CurriculumType.Area]: areas,\n [CurriculumType.Leaf]: leaves\n });\n \n return;\n }\n \n newSet[key] = {\n [CurriculumType.Subject]: subject,\n [CurriculumType.Audience]: audience,\n areasAndLeaves: [{\n [CurriculumType.Area]: areas,\n [CurriculumType.Leaf]: leaves\n }]\n };\n });\n\n return newSet;\n }, [props.curriculumLinks]);\n\n if (!props.curriculumLinks)\n return <PartialCurriculumLinks />;\n\n if (!props.curriculumLinks?.length) {\n return <CurriculumLinksEmptyState emptyStateUrl={props.emptyStateUrl} />;\n }\n\n return (\n <ul className='list-unstyled m-0'>\n {Object.keys(curriculumLinkSets).map((linkSetKey, i) => (\n <li key={`linkset-${i}`} className={styles.curriculumSet}>\n <CurriculumSubject\n linkSet={curriculumLinkSets[linkSetKey]}\n trySetMaxCodeWidth={trySetMaxCodeWidth}\n codeWidth={codeWidth}\n />\n </li>\n ))}\n </ul>\n );\n}","import React from 'react';\n\nimport { CurriculumLinkItem } from 'libs/shared/components/curriculum-links/CurriculumLinkItem';\nimport { PartialTagItem } from 'libs/shared/components/tags/PartialTagItem';\nimport { DynamicWidget } from 'libs/shared/components/widgets/dynamic-widget';\nimport { CurriculumData, Presentation } from 'libs/shared/interfaces';\n\ninterface CurriculumsWidgetProps {\n curriculums: CurriculumData;\n selectedCurriculum: Presentation;\n onChangeCurriculum: (curriculumId: string) => void;\n noNegativePadding?: boolean;\n}\n\nexport function CurriculumsWidget(props: CurriculumsWidgetProps): JSX.Element {\n return (\n <DynamicWidget\n collection={props.selectedCurriculum?.id ? props.curriculums.nonEmptyCurriculums : null}\n childClassName='flex-shrink-0'\n childComponent={_props => {\n return (\n <CurriculumLinkItem\n {..._props}\n selected={props.selectedCurriculum?.id?.toString() === _props.data.id.toString()}\n onChangeCurriculum={props.onChangeCurriculum}\n />\n );\n }}\n partialLoadingComponent={() => <PartialTagItem />}\n widgetDataDeps={[ props.selectedCurriculum?.id?.toString(), props.onChangeCurriculum ]}\n noNegativePadding={props.noNegativePadding}\n />\n );\n}","import { MutableRefObject, useEffect, useRef, useState } from 'react';\nimport * as marked from 'marked';\n\nimport { useEventsServiceSubscribe } from 'libs/common/react/hooks/UseEventsServiceSubscribe';\nimport { EventsService } from 'libs/common/react/services/EventsService';\n\nimport { Clip, Glance, PointOfInterest, Video } from 'libs/shared/interfaces';\n\nimport styles from './video-at-a-glance.scss';\n\nconst POI_LINK_LINE = /\\[\\]\\(cv:\\/\\/poi\\?id=\\d+\\)\\n*/g;\n\nfunction stripPoisFromGlanceContent(glanceContent: string): string {\n return glanceContent.replace(POI_LINK_LINE, '');\n}\n\nfunction getLearningIntentionHTML(glance: Glance): string {\n const learningIntention = stripPoisFromGlanceContent(glance.content);\n\n return marked(learningIntention);\n}\n\nexport function useLearningIntentionMarkdown(\n video: Video,\n hasGlanceData?: boolean\n): string {\n const [ markdownHTML, setMarkdownHTML ] = useState('');\n\n useEffect(() => {\n if (!hasGlanceData)\n return;\n\n const content = getLearningIntentionHTML(video.glance);\n\n setMarkdownHTML(content);\n }, [ video.glance?.content, hasGlanceData ]);\n\n return markdownHTML;\n}\n\nexport function hasGlanceData(video: Video | Clip): boolean {\n return video.glance?.content && video.glance?.format === 'text/markdown';\n}\n\nexport function useHighlightPointOfInterest(\n pointOfInterest: PointOfInterest,\n shouldHighlight: boolean\n): MutableRefObject<HTMLDivElement> {\n const ref = useRef<HTMLDivElement>();\n\n useEventsServiceSubscribe('player:poi:mouseover', onPlayerPoiMouseOver, null, shouldHighlight);\n useEventsServiceSubscribe('player:poi:mouseleave', onPlayerPoiMouseLeave, null, shouldHighlight);\n\n useEffect(() => {\n if (!ref.current || !shouldHighlight)\n return;\n\n ref.current?.addEventListener('mouseover', onGlancePoiMouseOver);\n ref.current?.addEventListener('mouseleave', onGlancePoiMouseLeave);\n\n return () => {\n ref.current?.removeEventListener('mouseover', onGlancePoiMouseOver);\n ref.current?.removeEventListener('mouseleave', onGlancePoiMouseLeave);\n };\n }, [ref.current]);\n\n function onPlayerPoiMouseOver(hoveredPoi: PointOfInterest): void {\n if (!hoveredPoi?.id || pointOfInterest?.id?.toString() !== hoveredPoi?.id?.toString())\n return;\n\n ref.current?.classList.add(styles.highlightPoi);\n }\n\n function onPlayerPoiMouseLeave(): void {\n ref.current?.classList.remove(styles.highlightPoi);\n }\n\n /**\n * `this` will be the element to which the eventListener is bound.\n */\n function onGlancePoiMouseOver(): void {\n if (pointOfInterest)\n EventsService.trigger('glance:poi:mouseover', pointOfInterest);\n }\n\n function onGlancePoiMouseLeave(): void {\n EventsService.trigger('glance:poi:mouseleave');\n }\n\n return ref;\n}","// extracted by mini-css-extract-plugin\nexport default {\"poiEntry\":\"vr6R9\",\"poiText\":\"znHZF\",\"public\":\"v0BZ9\",\"poiTimeStamp\":\"AdKwe\"};","import React from 'react';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { PointOfInterest } from 'libs/shared/interfaces';\nimport { DurationHelper } from 'libs/shared/utils/DurationHelper';\n\nimport { useHighlightPointOfInterest } from '../VideoAtAGlanceUtilsV2';\n\nimport styles from './points-of-interest-list.scss';\n\ninterface PointOfInterestProps {\n poi: PointOfInterest;\n suppressInteractivity?: boolean;\n onClickPoiItem: (time: number) => void;\n}\n\nfunction PointOfInterest(props: PointOfInterestProps): JSX.Element {\n const timeStamp = DurationHelper.ToDisplayDuration(props.poi.startTime * 1000);\n\n const ref = useHighlightPointOfInterest(props.poi, !props.suppressInteractivity);\n\n if (props.suppressInteractivity) {\n return (\n <div className={`d-flex ${styles.poiEntry} mb-2`}>\n <span className={`d-flex rounded-pill justify-content-center align-items-center fw-semibold info-link ${styles.poiTimeStamp}`}>{timeStamp}</span>\n <div className={`${styles.public} ms-2`}>{props.poi.description}</div>\n </div>\n );\n }\n\n return (\n <DivButton\n key={props.poi.startTime}\n className={`d-flex ${styles.poiEntry} mb-2 cursor-pointer`}\n onClick={() => props.onClickPoiItem(props.poi.startTime)}\n ref={ref}\n >\n <div className={`d-flex rounded-pill justify-content-center align-items-center fw-semibold info-link ${styles.poiTimeStamp}`}>{timeStamp}</div>\n <div className={`ms-2 ${styles.poiText}`}>{props.poi.description}</div>\n </DivButton>\n );\n}\n\ninterface PointOfInterestListProps{\n pointsOfInterest: PointOfInterest[];\n suppressInteractivity?: boolean;\n onClickPoiItem: (time: number) => void\n}\n\nconst namespace = 'shared.pointsOfInterestList';\n\nexport function PointOfInterestList(props: PointOfInterestListProps) {\n return (\n <div>\n <h2 className='h6 my-2'><Text namespace={namespace} phrase='heading' /></h2>\n\n <div>\n {props.pointsOfInterest.map(poi => {\n return (\n <PointOfInterest\n key={poi.startTime}\n poi={poi}\n suppressInteractivity={props.suppressInteractivity}\n onClickPoiItem={props.onClickPoiItem}\n />\n );\n })}\n\n </div>\n </div>\n );\n}","import * as React from 'react';\nimport Scrollbars from 'react-custom-scrollbars-2';\n\nimport { Core } from 'libs/common/core';\n\nimport { PointOfInterestList } from 'libs/shared/components/play-page-v2/glance/points-of-interest-list/PointsOfInterestList';\nimport { TagHelper } from 'libs/shared/components/tags/TagHelper';\nimport { TagList } from 'libs/shared/components/tags/TagList';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { TagType } from 'libs/shared/enums/TagType';\nimport { PointOfInterest, Tag, Video } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { useLearningIntentionMarkdown } from './VideoAtAGlanceUtilsV2';\n\nimport styles from './video-at-a-glance.scss';\n\nconst namespace = 'shared.videoAtAGlanceV2';\n\nconst SCROLL_HEIGHT_MAX = 350; // in px\n\ninterface ScrollbarWrapperProps {\n hideScrollbar?: boolean;\n}\n\nfunction ScrollbarWrapper(props: React.PropsWithChildren<ScrollbarWrapperProps>): JSX.Element {\n if (props.hideScrollbar)\n return <>{props.children}</>;\n\n return (\n <div className='rounded border mb-4 bg-white'>\n <Scrollbars\n autoHeight\n autoHeightMax={SCROLL_HEIGHT_MAX}\n >\n <div className='px-3 px-3 pt-3 pb-2'>\n {props.children}\n </div>\n </Scrollbars>\n </div>\n );\n}\n\ninterface VideoAtAGlanceV2Props {\n video: Video;\n pointsOfInterest?: PointOfInterest[];\n suppressInteractivity?: boolean;\n setStartTime?: (time: number) => void;\n getTagAppLink?: (tag: Tag) => Core.AppLink;\n onClickTag?: () => void;\n hideScrollbar?: boolean;\n canViewGlance: boolean;\n}\n\nexport function VideoAtAGlanceV2(props: VideoAtAGlanceV2Props): JSX.Element {\n const learningIntentionMarkdownHTML = useLearningIntentionMarkdown(props.video, props.canViewGlance);\n \n function getTags(): Tag[] {\n if (VideoHelper.isInteractive(props.video) || !props.video.tags?.data?.length)\n return null;\n\n return props.video.tags?.data?.filter(tag => tag.tagType === TagType.Pedagogy || tag.tagType === TagType.Skill);\n }\n const tags = getTags();\n\n if (!props.canViewGlance)\n return <></>;\n\n function onClickPoiItem(time: number) {\n props.setStartTime(time);\n }\n\n return (\n <section className='play-page-section'>\n <ScrollbarWrapper hideScrollbar={props.hideScrollbar}>\n <h2 className='h6 mb-2'><Text namespace={namespace} phrase='learningIntention' /></h2>\n <div className={`${styles.learningIntention} mb-3`}>\n <div dangerouslySetInnerHTML={{ __html: learningIntentionMarkdownHTML }}/>\n </div>\n\n {!!tags?.length && (\n <div className='mb-1'>\n <TagList\n tags={tags}\n {...TagHelper.getTagActionProps(props.getTagAppLink, props.onClickTag, props.suppressInteractivity)}\n className='mt-2'\n />\n </div>\n )}\n\n {!!props.pointsOfInterest.length && (\n <PointOfInterestList\n pointsOfInterest={props.pointsOfInterest}\n suppressInteractivity={props.suppressInteractivity}\n onClickPoiItem={onClickPoiItem}\n />\n )}\n </ScrollbarWrapper>\n </section>\n );\n}","import React from 'react';\n\nimport styles from './tags.scss';\n\ninterface PartialTagItemProps {\n tagClass?: string;\n}\n\nexport const PartialTagItem = React.memo(function({ tagClass = '' }: PartialTagItemProps): JSX.Element {\n const classNames = `partial-loading-background d-inline-block rounded-pill py-1 px-2 mb-1 me-1 text-nowrap ${tagClass} ${styles.partialTag}`;\n\n return (\n <div className='mt-1'>\n <span className={classNames}>&nbsp;</span>\n </div>\n );\n});","import { Core } from 'libs/common/core';\n\nimport { Tag } from 'libs/shared/interfaces';\n\nexport const TagHelper = {\n /**\n * This helper allows tag appLinks to be triggered manually for use in a public context.\n * \n * For public pages, all anchors will be crawled by bots. Given then number of tags we have\n * this will chew through crawl budget unnecessarily. \n * \n * The consuming project can opt-in for this behaviour. By default, tags will always be rendered\n * as anchors.\n */\n getTagActionProps: (\n getTagAppLink: (tag: Tag) => Core.AppLink,\n onClick: () => void,\n renderAsSpan?: boolean\n ) => {\n if (renderAsSpan) {\n return {\n onClick: (tag: Tag) => {\n if (onClick)\n onClick();\n\n const appLink = getTagAppLink ? getTagAppLink(tag) : null;\n\n if (!appLink)\n return;\n\n return Core.AppLinkHelper.trigger(appLink);\n }\n };\n }\n\n return {\n getAppLink: (tag: Tag) => {\n return getTagAppLink\n ? getTagAppLink(tag)\n : null;\n },\n onClick\n };\n }\n};","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { TagType } from 'libs/shared/enums/TagType';\nimport { Tag, ThemeColours } from 'libs/shared/interfaces';\n\nimport styles from './tags.scss';\n\ninterface TagItemProps {\n tag: Tag;\n themeColours?: ThemeColours;\n appLink?: Core.AppLink;\n onClick?: () => void;\n onRemove?: () => void;\n disabled?: boolean;\n tagClass?: string;\n}\n\nfunction getTagTypeClass(tagType: TagType, hasThemeColour: boolean): string {\n switch (tagType) {\n case TagType.Pedagogy:\n case TagType.Skill:\n return 'pedagogy-tag text-white';\n\n case TagType.Hidden:\n return 'hidden-tag fw-normal';\n\n case TagType.Normal:\n if (!hasThemeColour)\n return 'bg-gray-100 fw-normal';\n return '';\n\n default:\n return '';\n }\n}\n\nexport function TagItem(props: TagItemProps): JSX.Element {\n const { tag, appLink, onClick, disabled, tagClass = 'tag' } = props;\n\n const name = tag.name.toLowerCase();\n const tagType = tag.tagType?.toLowerCase() as TagType;\n\n const hasThemeColour = (tagType === TagType.Normal && props.themeColours) && !!props.themeColours?.secondary;\n let classNames = `rounded-pill py-1 px-2 my-1 me-1 ${tagClass} ${getTagTypeClass(tagType, hasThemeColour)}`;\n\n if (hasThemeColour)\n classNames += ' text-white';\n\n if ((appLink || onClick) && !disabled)\n classNames += ' cursor-pointer';\n\n if (disabled)\n classNames += ' ' + styles.disabled;\n\n if (props.onRemove)\n classNames += ' ' + styles.badge;\n\n if (!appLink)\n classNames += ' d-inline-block';\n\n const style: React.CSSProperties = hasThemeColour\n ? { backgroundColor: props.themeColours.secondary }\n : {};\n\n if (appLink) {\n return (\n <AppLink\n onClick={onClick}\n appLink={appLink}\n className={classNames}\n title={name}\n style={style}\n >\n <span className='text-truncate text-nowrap'>{name}</span>\n </AppLink>\n );\n }\n\n return (\n <span\n onClick={onClick}\n className={classNames}\n title={name}\n style={style}\n >\n <span className='text-truncate text-nowrap'>\n {name}\n {props.onRemove &&\n <button\n onClick={props.onRemove}\n className={`${styles.close} btn-close font-size-normal`}\n role='button'\n aria-label='Close'\n />\n }\n </span>\n </span>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { TagItem } from 'libs/shared/components/tags/TagItem';\nimport { TagType } from 'libs/shared/enums/TagType';\nimport { Tag, ThemeColours } from 'libs/shared/interfaces';\n\nimport styles from './tags.scss';\n\n/**\n * TODO: this will eventually handle ClickView and Customer tag types.\n */\nfunction getTagSortValue(tag: Tag): number {\n switch (tag.tagType?.toLowerCase()) {\n case TagType.Pedagogy:\n return 0;\n\n case TagType.Skill:\n return 1;\n\n default:\n return 2;\n }\n}\n\ninterface TagListProps {\n tags: Tag[];\n themeColours?: ThemeColours;\n onClick?: (tag: Tag) => void;\n onRemove?: (tag: Tag) => void;\n getAppLink?: (tag: Tag) => Core.AppLink;\n className?: string;\n}\n\nexport function TagList(props: TagListProps): JSX.Element {\n if (!props.tags)\n return <></>;\n\n const sortedTags = [...props.tags].sort((a, b) => getTagSortValue(a) - getTagSortValue(b));\n\n return (\n <div className={`${styles.tagList} ${props.className}`}>\n {sortedTags.map((tag: Tag) => {\n const appLink = typeof props.getAppLink === 'function'\n ? props.getAppLink(tag)\n : null;\n\n const onRemove = typeof props.onRemove === 'function'\n ? () => props.onRemove(tag)\n : null;\n\n const onClick = typeof props.onClick === 'function'\n ? () => props.onClick(tag)\n : null;\n\n return (\n <TagItem\n key={tag.id || tag.name}\n tag={tag}\n appLink={appLink}\n themeColours={props.themeColours}\n onRemove={onRemove}\n onClick={onClick}\n />\n );\n })}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"seeMore\":\"yv0FS\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions, ClickDescriptor } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport styles from './widget-header.scss';\n\nconst namespace = 'shared.widgetHeader';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface WidgetHeaderProps {\n name: string;\n description: string;\n\n appLink?: Core.AppLink;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n showSeeMoreLink?: boolean;\n onClick?: () => void;\n}\n\nfunction SeeMore(props: WidgetHeaderProps) {\n return (\n <div className={`ms-3 ${styles.seeMore}`}>\n <AppLink\n appLink={props.appLink}\n analyticsData={props.analyticsData }\n analyticsOptions={{ ...props.analyticsOptions, descriptor: ClickDescriptor.SeeMore }}\n className={`text-decoration-none ${props.appLink ? 'curated-widget-link' : ''}`}\n >\n <p className='hover-text-underline text-dark curated-widget-heading'>{getPhrase('seeMore')}</p>\n </AppLink>\n </div>\n );\n}\n\nexport function WidgetHeader(props: WidgetHeaderProps): JSX.Element {\n const hasDescription = !!props.description;\n\n if (!props.name && !props.description)\n return <></>;\n\n return (\n <div className='curated-widget-header'>\n <div className='d-flex justify-content-between'>\n {!!props.name && (\n <div className={styles.title}>\n <AppLink\n appLink={props.appLink}\n analyticsOptions={props.analyticsOptions}\n analyticsData={props.analyticsData}\n className={`text-decoration-none ${props.appLink ? 'curated-widget-link' : ''}`}\n onClick={props.onClick}\n >\n <h2 className='h4 curated-widget-heading'>\n {props.name}\n </h2>\n </AppLink>\n </div>\n )}\n {!!props.appLink && !hasDescription && !!props.showSeeMoreLink && <SeeMore {...props}/>}\n </div>\n \n {hasDescription && (\n <div className='d-flex justify-content-between align-items-end'>\n <p className={`description curated-widget-description ${styles.description}`}>\n <span>{props.description}</span>\n </p>\n {!!props.appLink && !!props.showSeeMoreLink && <SeeMore {...props}/> }\n </div>\n )}\n </div>\n );\n}","import { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nconst blankImage = new Image();\nblankImage.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs=';\n\nexport const DragHelper = {\n // This removes the image that appears when you drag a draggable HTML element\n hideDragImage(event: React.DragEvent<HTMLElement>): void {\n if (!event.dataTransfer.setDragImage || !FunctionHelper.isFunction(event.dataTransfer.setDragImage))\n return;\n\n event.dataTransfer.setDragImage(blankImage, 0, 0);\n }\n};","import * as React from 'react';\n\nimport { UserAgentHelper } from 'libs/common/backbone/utils/UserAgentHelper';\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\n\nimport { CssMeasurement } from 'libs/shared/enums/CssMeasurement';\nimport { DragHelper } from 'libs/shared/utils/DragHelper';\n\nconst isTouchScreen = UserAgentHelper.isTouchScreen();\n\nconst getPositionStyling = (xPosition: number, measurement: CssMeasurement, dragPercentage?: number) => {\n // Used in situations where a touch screen user is dragging the `<FixedWidget />`\n if (measurement === CssMeasurement.Percentage && dragPercentage)\n xPosition = xPosition - dragPercentage;\n\n return {\n transform: `translate3d(${xPosition}${measurement}, 0px, 0px)`,\n transition: 'transform .4s ease-in-out'\n };\n};\n\ninterface SlidingListContainerProps extends React.PropsWithChildren<unknown> {\n position: number;\n positionType: CssMeasurement;\n\n onDrag?: (event: React.DragEvent<HTMLDivElement>) => void;\n onDragEnd?: () => void;\n\n onTouchMove?: (event: React.TouchEvent<HTMLDivElement>) => void;\n onTouchEnd?: () => void;\n\n percentageDragged?: number;\n}\n\nexport const SlidingListContainer = React.forwardRef((\n props: SlidingListContainerProps,\n ref: React.MutableRefObject<HTMLDivElement>\n): JSX.Element => {\n const { children, positionType, onDrag, onDragEnd, onTouchMove, onTouchEnd, percentageDragged, position = 0 } = props;\n\n function getEventListeners(): HashObject {\n const listenerProps: HashObject = {};\n\n if (onDrag && onDragEnd) {\n listenerProps.draggable = true;\n listenerProps.onDragEnd = onDragEnd;\n listenerProps.onDragStart = DragHelper.hideDragImage;\n listenerProps.onDragOver = onDrag;\n }\n\n if (onTouchMove && onTouchEnd && isTouchScreen) {\n listenerProps.onTouchMoveCapture = onTouchMove;\n listenerProps.onTouchEndCapture = onTouchEnd;\n }\n\n return listenerProps;\n }\n\n return (\n <div\n className='d-flex flex-nowrap position-relative w-100'\n style={getPositionStyling(position, positionType, percentageDragged)}\n ref={ref}\n {...getEventListeners()}\n >\n {children}\n </div>\n );\n});","// extracted by mini-css-extract-plugin\nexport default {\"buttonContainer\":\"_ejId\",\"left\":\"VSAPU\",\"right\":\"kgeXh\",\"button\":\"gAsE9\",\"hoverText\":\"APA36\",\"buttonHover\":\"cqD75\",\"chevron\":\"Ev4hr\",\"extendedClickableArea\":\"AtsWP\",\"gradientRight\":\"ZuAif\",\"gradientLeft\":\"Pt3nx\",\"topPos\":\"BVcIS\"};","import * as React from 'react';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { FixedWidgetState } from 'libs/shared/components/widgets/fixed-widget';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './widget-button.scss';\n\nexport enum WidgetButtonDirection {\n Left,\n Right\n}\n\ninterface WidgetButtonProps {\n onClick: (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => void;\n direction: WidgetButtonDirection;\n hide: boolean;\n contents?: WidgetContents;\n useGradientBackdrop?: boolean;\n className?: string;\n hoverText?: string;\n hideExtendedClickableArea?: boolean;\n state?: FixedWidgetState;\n\n leftButtonClassName?: string;\n rightButtonClassName?: string;\n leftGradientClassName?: string;\n rightGradientClassName?: string;\n}\n\nexport const WidgetButton = React.memo(function(props: WidgetButtonProps): JSX.Element {\n const isLeft = props.direction === WidgetButtonDirection.Left;\n\n const arrowSvg = isLeft ? cvSvgLibrary.ChevronLeft : cvSvgLibrary.ChevronRight;\n\n function getPositionClass(): string {\n let className = styles.topPos;\n \n // Left / Right\n if (isLeft)\n className += ` ${styles.left} ${props.leftButtonClassName}`;\n else\n className += ` ${styles.right} ${props.rightButtonClassName}`;\n \n return className;\n }\n\n function getStyle(): React.CSSProperties {\n if (props.state?.contents === 'videos')\n return { paddingBottom: (56.25 / props.state?.viewableItems) + '%' };\n\n return { height: '100%' };\n }\n\n if (props.hide)\n return <></>;\n\n return (\n <div className={styles.buttonContainer} style={getStyle()}>\n {props.useGradientBackdrop &&\n <div className={isLeft ? `${styles.gradientLeft} ${props.leftGradientClassName}` : `${styles.gradientRight} ${props.rightGradientClassName}`} />\n }\n\n {!props.hideExtendedClickableArea && (\n <div\n role='button'\n onClick={props.onClick}\n className={`${styles.extendedClickableArea} ${isLeft ? styles.left : styles.right}`}\n />\n )}\n\n <div\n role='button'\n className={`${getPositionClass()} ${styles.button} ${props.className || ''}`}\n onClick={props.onClick}\n >\n {props.hoverText && (\n <span className={`ps-3 pe-2 ${styles.hoverText}`}>{props.hoverText}</span>\n )}\n <SvgContainer\n svgName={arrowSvg}\n size={SvgContainerSize.Medium}\n className={`svg-container d-inline-block ${styles.chevron}`}\n />\n </div>\n </div>\n );\n});","export enum CssMeasurement {\n Percentage = '%',\n Pixels = 'px'\n}","export enum CurriculumType {\n Subject = 'CurriculumSubject',\n Audience = 'CurriculumAudience',\n Area = 'CurriculumArea',\n Leaf = 'CurriculumLeaf'\n}","export enum TagType {\n Normal = 'normal',\n Pedagogy = 'pedagogy',\n Hidden = 'hidden',\n Skill = 'skill',\n Curation = 'curation'\n}\n\n/**\n * This should **only** be used to create new tags in master (as it only accepts enum values).\n * Use the string enum above for all other cases.\n */\nexport enum TagTypeNumber {\n Normal = 0,\n Pedagogy = 1,\n Hidden = 2,\n Skill = 3,\n Curation = 4\n}","export enum WidgetInteraction {\n Init = 'init',\n Next = 'next',\n Previous = 'previous',\n Resize = 'resize',\n Drag = 'drag',\n Update = 'update',\n JumpToIndex = 'jump-to-index'\n}","import { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\n\nimport { useMediaQuery } from './UseMediaQuery';\n\n/**\n * @deprecated Please use useBreakpoints() instead\n */\nexport function useGetMediaQueryString(): MediaQueryStrings {\n const isXS = useMediaQuery(MediaQueryStrings.XS);\n const isSM = useMediaQuery(MediaQueryStrings.SM);\n const isMD = useMediaQuery(MediaQueryStrings.MD);\n const isLG = useMediaQuery(MediaQueryStrings.LG);\n const isXL = useMediaQuery(MediaQueryStrings.XL);\n const isXXL = useMediaQuery(MediaQueryStrings.XXL);\n\n let currentString = MediaQueryStrings.LG; // default\n if (isXS) currentString = MediaQueryStrings.XS;\n if (isSM) currentString = MediaQueryStrings.SM;\n if (isMD) currentString = MediaQueryStrings.MD;\n if (isLG) currentString = MediaQueryStrings.LG;\n if (isXL) currentString = MediaQueryStrings.XL;\n if (isXXL) currentString = MediaQueryStrings.XXL;\n\n return currentString;\n}","import { LocalPermissionName, PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useProducts } from 'libs/shared/hooks/UseProducts';\n\nimport { LiteRouteHelper } from 'shared/utils/LiteRouteHelper';\n\nexport interface VideoFeaturesHash {\n canViewGlance: boolean;\n canViewResources: boolean;\n canViewInteractives: boolean;\n canViewClips: boolean;\n canUseActions: boolean;\n canViewPublicLayout: boolean;\n canNavigate: boolean;\n canViewCurriculumLinks: boolean;\n canViewResourceItems: boolean;\n}\n\nexport function useVideoFeatureAccess() {\n const { hasPermissions, hasLocalPermissions } = usePermissions();\n const { hasProduct } = useProducts();\n\n const hasNP = hasProduct(ProductId.Primary);\n\n function showPublicLayout(): boolean {\n /**\n * Authenticated users should never see the placeholder\n */\n if (hasLocalPermissions(LocalPermissionName.WatchVideos))\n return false;\n\n /**\n * Accessing a play page unathenticated will have different contextual behabviours:\n * - For a share page, the user should see the video and never the placeholder\n * - For a public browsing page (ie. using a route-prefix) they should see the placeholder\n */\n return LiteRouteHelper.hasRegionPrefix();\n }\n\n return {\n canViewGlance: hasPermissions(PermissionName.ViewVideoGlance),\n canViewResources: true,\n canViewInteractives: hasNP && hasPermissions(PermissionName.ViewVideoInteractives),\n canViewClips: hasNP && hasPermissions(PermissionName.ViewVideoClips),\n canViewCurriculumLinks: hasPermissions(PermissionName.ViewCurriculums),\n canUseActions: hasLocalPermissions(LocalPermissionName.UseVideoActions),\n canViewPublicLayout: showPublicLayout(),\n canViewResourceItems: hasLocalPermissions(LocalPermissionName.ViewVideoResourceItems),\n canNavigate: hasNP\n };\n}","import React from 'react';\nimport Scrollbars from 'react-custom-scrollbars-2';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, PresentationDescriptor, UserAction } from 'libs/analytics/interfaces';\n\nimport { PartialCurriculumLinks } from 'libs/shared/components/curriculum-links/partial-loading/PartialCurriculumLinks';\nimport { CurriculumLinksV2 } from 'libs/shared/components/play-page-v2/curriculum-links/CurriculumLinksV2';\nimport { CurriculumsWidget } from 'libs/shared/components/play-page-v2/curriculum-links/CurriculumsWidget';\nimport { VideoAtAGlanceV2 } from 'libs/shared/components/play-page-v2/glance/VideoAtAGlanceV2';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { Clip, CurriculumData, PointOfInterest, PopupViewProps, Presentation, Tag, Video } from 'libs/shared/interfaces';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nconst namespace = 'shared.videoGuidanceClassroomGuidePopup';\n\nconst MIN_MAX_HEIGHT = 350;\n\ninterface VideoGuidanceClassroomGuidePopupProps extends PopupViewProps {\n isLoading: boolean;\n video: Video | Clip;\n onClickClose: () => void;\n onClickViewVideo: () => void;\n pointsOfInterest: PointOfInterest[];\n curriculums: CurriculumData;\n curriculumLinksEmptyStateUrl: string;\n\n getTagAppLink?: (tag: Tag) => Core.AppLink;\n getVideoAppLink: (video: Video | Clip, opts: GetVideoAppLinkOptions) => Core.AppLink;\n\n canViewPublicLayout: boolean;\n canViewCurriculumLinks: boolean;\n canViewGlance: boolean;\n}\n\nexport function VideoGuidanceClassroomGuidePopup(props: VideoGuidanceClassroomGuidePopupProps): JSX.Element {\n const [ selectedCurriculum, setSelectedCurriculum ] = React.useState<Presentation>();\n\n const alerts = useAlerts();\n\n React.useEffect(() => {\n if (props.isLoading || !props.curriculums)\n return;\n\n if (!selectedCurriculum) {\n const currentCurriculum = props.curriculums.activeCurriculum\n ? props.curriculums.activeCurriculum\n : ArrayHelper.first(props.curriculums.availableCurriculums);\n setSelectedCurriculum(currentCurriculum);\n }\n }, [ props.isLoading, props.curriculums?.activeCurriculum?.id ]);\n\n async function onChangeCurriculum(curriculumId: string): Promise<boolean> {\n const newCurriculum = props.curriculums.availableCurriculums.find(c => c.id.toString() === curriculumId);\n\n if (!newCurriculum?.id)\n return false;\n\n if (props.curriculums.activeCurriculum?.id?.toString() === newCurriculum?.id?.toString())\n return false;\n\n setSelectedCurriculum(newCurriculum);\n\n try {\n await props.curriculums.updateCurriculum(newCurriculum);\n\n AnalyticsHelper.logUserAction({\n id: newCurriculum.id,\n name: newCurriculum.id,\n description: newCurriculum.description,\n videoId: props.video.id,\n videoName: props.video.name\n }, {\n entity: EntityType.Presentation,\n actionType: UserAction.Select,\n descriptor: PresentationDescriptor.Curriculum,\n location: LocationContext.ClassroomGuidancePopup\n });\n } catch {\n setSelectedCurriculum(selectedCurriculum);\n alerts.error(LanguageService.getPhrase(namespace, 'updateCurriculumFailed'));\n }\n }\n\n const hasCurriculumLinks = props.canViewCurriculumLinks && props.curriculums?.customerHasCurriculumLinks;\n\n return (\n <Popup\n closePopup={props.onClickClose}\n showLoadingSpinner={props.isLoading}\n title={LanguageService.getPhrase(namespace, 'classroomGuide')}\n size='lg'\n >\n {!props.isLoading && (\n <>\n <Scrollbars\n autoHeightMax={MIN_MAX_HEIGHT}\n autoHeightMin={MIN_MAX_HEIGHT}\n autoHeight\n className='pb-3'\n // move vertical scrollbar to the top\n renderThumbVertical={({ style, ...props }) => <div {...props} style={{ ...style, borderRadius: 'inherit', backgroundColor: 'rgba(0, 0, 0, 0.2)', zIndex: 5 }} className='thumb-vertical'/>}\n >\n <div className={hasCurriculumLinks ? 'mb-4' : ''}>\n <VideoAtAGlanceV2\n video={props.video}\n pointsOfInterest={props.pointsOfInterest}\n setStartTime={startTime => {\n Core.AppLinkHelper.trigger(props.getVideoAppLink(props.video, { t: startTime }));\n props.closePopup();\n }}\n getTagAppLink={props.getTagAppLink}\n suppressInteractivity={props.canViewPublicLayout}\n onClickTag={props.closePopup}\n canViewGlance={props.canViewGlance}\n hideScrollbar\n />\n </div>\n\n {hasCurriculumLinks && (\n <>\n <h2 className='h6'>\n <Text namespace={namespace} phrase='curriculumLinks' />\n </h2>\n \n <div className='mb-2'>\n <CurriculumsWidget\n curriculums={props.curriculums}\n selectedCurriculum={selectedCurriculum}\n onChangeCurriculum={onChangeCurriculum}\n noNegativePadding\n />\n </div>\n \n {!props.curriculums?.hasLoaded\n ? <PartialCurriculumLinks />\n : (\n <CurriculumLinksV2\n curriculumLinks={props.curriculums?.curriculumLinks}\n emptyStateUrl={props.curriculumLinksEmptyStateUrl}\n />\n )}\n </>\n )}\n </Scrollbars>\n\n <PopupButtons>\n <PopupButtons.Cancel\n onClick={props.onClickClose}\n text={LanguageService.getPhrase(namespace, 'close')}\n />\n <PopupButtons.Submit\n text={LanguageService.getPhrase(namespace, 'viewVideo')}\n variant='dark'\n onClick={props.onClickViewVideo}\n />\n </PopupButtons>\n </>\n )}\n </Popup>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { Flight } from 'libs/common/react/index';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction, VideoGuidanceDescriptor } from 'libs/analytics/interfaces';\n\nimport { VideoGuidanceClassroomGuidePopup } from 'libs/shared/components/video-guidance/classroom-guide/popup/VideoGuidanceClassroomGuidePopup';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ClipRequests } from 'libs/shared/flight-requests/ClipRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { Clip, PopupViewProps, Video } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { useCurriculums } from 'shared/hooks/useCurriculums';\nimport { useFetchPointsOfInterest } from 'shared/hooks/useFetchPointsOfInterest';\nimport { useVideoFeatureAccess } from 'shared/hooks/useVideoFeatureAccess';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\ninterface VideoGuidanceClassroomGuideViewProps extends PopupViewProps {\n id: string;\n type: MasterType;\n}\n\nexport function VideoGuidanceClassroomGuideView(props: VideoGuidanceClassroomGuideViewProps): JSX.Element {\n function getRequest(): Flight.Request {\n return props.type === MasterType.Video\n ? VideoRequests.video(props.id)\n : ClipRequests.clip(props.id);\n }\n\n const video = Flight.useBasicFetch<Clip | Video>(getRequest());\n const pointsOfInterest = useFetchPointsOfInterest(props.id, true);\n const curriculums = useCurriculums(props.id, true);\n const featureAccess = useVideoFeatureAccess();\n\n function onClickClose(): void {\n AnalyticsHelper.logUserAction({\n id: video.data.id,\n name: video.data.name\n }, {\n entity: VideoHelper.isVideo(video.data)\n ? EntityType.Video\n : EntityType.Clip,\n location: LocationContext.ClassroomGuidancePopup,\n actionType: UserAction.Click,\n descriptor: VideoGuidanceDescriptor.Close\n });\n\n props.closePopup();\n }\n\n function onClickViewVideo(): void {\n AnalyticsHelper.logUserAction({\n id: video.data.id,\n name: video.data.name\n }, {\n entity: VideoHelper.isVideo(video.data)\n ? EntityType.Video\n : EntityType.Clip,\n location: LocationContext.ClassroomGuidancePopup,\n actionType: UserAction.Click,\n descriptor: VideoGuidanceDescriptor.ViewVideo\n });\n\n if (VideoHelper.isVideo(video.data)) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PLAY_VIDEO,\n args: [ video.data.id, TextHelper.slugify(video.data.name) ]\n });\n\n props.closePopup();\n\n return;\n }\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.CLIPS,\n action: Actions.Clips.PLAY_CLIP,\n args: [ video.data.id, TextHelper.slugify(video.data.name) ]\n });\n\n props.closePopup();\n }\n\n return (\n <VideoGuidanceClassroomGuidePopup\n isLoading={!video.hasCompleted || !pointsOfInterest.hasCompleted}\n video={video.data}\n pointsOfInterest={pointsOfInterest.items}\n curriculums={curriculums}\n onClickClose={onClickClose}\n onClickViewVideo={onClickViewVideo}\n curriculumLinksEmptyStateUrl={ImageUrls.EmptyStates.CURRICULUM_LINKS}\n getVideoAppLink={VideoAppLinkHelper.getAppLink}\n getTagAppLink={tag => ({\n application: AppChannels.SEARCH,\n action: Actions.Search.HOME,\n params: { tagOrClassification: tag.name }\n })}\n canViewCurriculumLinks={featureAccess.canViewCurriculumLinks}\n canViewPublicLayout={featureAccess.canViewPublicLayout}\n canViewGlance={featureAccess.canViewGlance}\n closePopup={props.closePopup}\n />\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"curriculumSubject\":\"GvGYH\",\"curriculumSet\":\"d7RK0\",\"areaLeafSet\":\"XRTAe\",\"closeButton\":\"N3l5Q\",\"heading\":\"hAxR4\",\"leafDescriptionOnly\":\"h66ke\",\"dropdown\":\"CsG6G\",\"tag\":\"rdLqY\",\"cover\":\"etwaD\",\"active\":\"aDLMe\",\"selected\":\"BMrSd\"};","// extracted by mini-css-extract-plugin\nexport default {\"learningIntention\":\"MHM6O\",\"highlightPoi\":\"U7Q6x\"};","// extracted by mini-css-extract-plugin\nexport default {\"tagList\":\"Zw6d9\",\"disabled\":\"jlL1c\",\"partialTag\":\"too_N\",\"badge\":\"OjtN8\",\"close\":\"X9joI\"};"],"names":["useEventsServiceSubscribe","event","callback","once","shouldSubscribe","unsubscribe","useEffect","EventsService","listeners","this","registerListener","deregisterListener","args","triggerCallbacks","executionLimit","Error","push","idxToRemove","findIndex","e","splice","length","callbacksToRemove","forEach","listener","executionCount","apply","CurriculumLinkItem","props","curriculumTag","data","key","id","className","selected","onClick","onChangeCurriculum","toString","src","cover","url","size","alt","name","namespace","getPhrase","CurriculumLinksEmptyState","emptyStateUrl","altText","phrase","PartialCurriculumLinkSection","PartialCurriculumLinks","BRACKET_SEGMENT_REGEX","BASE_PILL_CLASS","CurriculumLeaf","getCurriculumCodeClass","baseClass","leaf","uiContainsCodes","codeRef","current","width","getBoundingClientRect","trySetMaxCodeWidth","description","style","minWidth","codeWidth","ref","Text","dangerouslySetInnerHTML","__html","CurriculumSubject","audienceSegment","subjectSegment","audienceBracketSegments","areaAndLeafSets","getLeafStyleClass","linkSet","areasAndLeaves","areaAndLeafSet","areaText","CurriculumType","map","ca","join","match","Object","keys","i","CurriculumLinksV2","setCodeWidth","currentVal","curriculumLinkSets","newSet","curriculumLinks","subject","audience","areas","leaves","curriculumObj","type","linkSetKey","CurriculumsWidget","collection","selectedCurriculum","curriculums","nonEmptyCurriculums","childClassName","childComponent","_props","partialLoadingComponent","widgetDataDeps","noNegativePadding","POI_LINK_LINE","useLearningIntentionMarkdown","video","hasGlanceData","useState","markdownHTML","setMarkdownHTML","content","glance","learningIntention","replace","format","useHighlightPointOfInterest","pointOfInterest","shouldHighlight","useRef","onGlancePoiMouseOver","onGlancePoiMouseLeave","hoveredPoi","classList","add","remove","addEventListener","removeEventListener","PointOfInterest","timeStamp","DurationHelper","poi","startTime","suppressInteractivity","DivButton","onClickPoiItem","PointOfInterestList","pointsOfInterest","SCROLL_HEIGHT_MAX","ScrollbarWrapper","hideScrollbar","children","autoHeight","autoHeightMax","VideoAtAGlanceV2","learningIntentionMarkdownHTML","canViewGlance","tags","VideoHelper","filter","tag","tagType","TagType","TagList","TagHelper","getTagAppLink","onClickTag","time","setStartTime","PartialTagItem","tagClass","classNames","getTagActionProps","renderAsSpan","appLink","getAppLink","TagItem","disabled","toLowerCase","hasThemeColour","themeColours","secondary","getTagTypeClass","onRemove","backgroundColor","title","role","getTagSortValue","sortedTags","sort","a","b","LanguageService","SeeMore","AppLink","analyticsData","analyticsOptions","descriptor","WidgetHeader","hasDescription","showSeeMoreLink","blankImage","Image","DragHelper","dataTransfer","setDragImage","FunctionHelper","isTouchScreen","UserAgentHelper","SlidingListContainer","listenerProps","xPosition","measurement","dragPercentage","positionType","onDrag","onDragEnd","onTouchMove","onTouchEnd","percentageDragged","position","CssMeasurement","C","transform","transition","draggable","onDragStart","onDragOver","onTouchMoveCapture","onTouchEndCapture","WidgetButtonDirection","WidgetButton","isLeft","direction","Left","arrowSvg","hide","state","contents","paddingBottom","viewableItems","height","useGradientBackdrop","leftGradientClassName","rightGradientClassName","hideExtendedClickableArea","leftButtonClassName","rightButtonClassName","hoverText","SvgContainer","svgName","S","TagTypeNumber","WidgetInteraction","useGetMediaQueryString","isXS","isSM","isMD","isLG","isXL","isXXL","currentString","useVideoFeatureAccess","hasPermissions","hasLocalPermissions","hasNP","hasProduct","canViewResources","canViewInteractives","canViewClips","canViewCurriculumLinks","canUseActions","canViewPublicLayout","canViewResourceItems","canNavigate","MIN_MAX_HEIGHT","VideoGuidanceClassroomGuidePopup","setSelectedCurriculum","alerts","isLoading","currentCurriculum","activeCurriculum","ArrayHelper","availableCurriculums","hasCurriculumLinks","customerHasCurriculumLinks","Popup","closePopup","onClickClose","showLoadingSpinner","autoHeightMin","renderThumbVertical","borderRadius","zIndex","getVideoAppLink","t","curriculumId","newCurriculum","find","c","updateCurriculum","AnalyticsHelper","videoId","videoName","entity","actionType","location","error","hasLoaded","curriculumLinksEmptyStateUrl","PopupButtons","text","variant","onClickViewVideo","VideoGuidanceClassroomGuideView","MasterType","VideoRequests","ClipRequests","useFetchPointsOfInterest","useCurriculums","featureAccess","hasCompleted","items","application","action","TextHelper","ImageUrls","VideoAppLinkHelper","params","tagOrClassification"],"sourceRoot":""}