@clickview/lite 0.52.3-rc.1 → 0.52.4-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/dist/bundles.json +1 -1
  2. package/dist/css/{1329-lite-ed09e82f2b.chunk.css → 1329-lite-cdc45079de.chunk.css} +1 -1
  3. package/dist/css/{6094-lite-371570d4ad.chunk.css → 1760-lite-19ef9620ac.chunk.css} +1 -1
  4. package/dist/css/{5549-lite-9903803dfd.chunk.css → 3640-lite-d751a30ca4.chunk.css} +1 -1
  5. package/dist/css/{431-lite-49ed0485bd.chunk.css → 431-lite-c2c2516537.chunk.css} +1 -1
  6. package/dist/css/{5660-lite-3a211c1297.chunk.css → 4683-lite-15b9d982f3.chunk.css} +1 -1
  7. package/dist/css/{5466-lite-5d0d45cb7d.chunk.css → 5466-lite-1b4fd17947.chunk.css} +1 -1
  8. package/dist/css/{3640-lite-9903803dfd.chunk.css → 5549-lite-d751a30ca4.chunk.css} +1 -1
  9. package/dist/css/{5587-lite-6e77f9442a.chunk.css → 5587-lite-304279013c.chunk.css} +1 -1
  10. package/dist/css/{4683-lite-3a211c1297.chunk.css → 5660-lite-15b9d982f3.chunk.css} +1 -1
  11. package/dist/css/{6054-lite-fdc8362cf4.chunk.css → 6054-lite-0b2c72f84f.chunk.css} +1 -1
  12. package/dist/css/{1760-lite-371570d4ad.chunk.css → 6094-lite-19ef9620ac.chunk.css} +1 -1
  13. package/dist/css/{7954-lite-b5558736f9.chunk.css → 7954-lite-95ad75b04d.chunk.css} +1 -1
  14. package/dist/css/{9808-lite-5d0d45cb7d.chunk.css → 9808-lite-1b4fd17947.chunk.css} +1 -1
  15. package/dist/languages/en.json +1 -1
  16. package/dist/scripts/{1329-b3e3f5d25d-lite.chunk.js → 1329-57aa3d33cb-lite.chunk.js} +2 -2
  17. package/dist/scripts/{1329-b3e3f5d25d-lite.chunk.js.map → 1329-57aa3d33cb-lite.chunk.js.map} +1 -1
  18. package/dist/scripts/1518-c1105e83b0-lite.chunk.js +2 -0
  19. package/dist/scripts/1518-c1105e83b0-lite.chunk.js.map +1 -0
  20. package/dist/scripts/{1760-7218da90dd-lite.chunk.js → 1760-19e88443c6-lite.chunk.js} +1 -1
  21. package/dist/scripts/{1760-7218da90dd-lite.chunk.js.map → 1760-19e88443c6-lite.chunk.js.map} +1 -1
  22. package/dist/scripts/1798-fc93a2f7a6-lite.chunk.js +2 -0
  23. package/dist/scripts/1798-fc93a2f7a6-lite.chunk.js.map +1 -0
  24. package/dist/scripts/2094-0f30600b14-lite.chunk.js +2 -0
  25. package/dist/scripts/{5710-c2804ffafe-lite.chunk.js.map → 2094-0f30600b14-lite.chunk.js.map} +1 -1
  26. package/dist/scripts/{3640-5b0a186dfd-lite.chunk.js → 3640-ac303efb99-lite.chunk.js} +1 -1
  27. package/dist/scripts/{3640-5b0a186dfd-lite.chunk.js.map → 3640-ac303efb99-lite.chunk.js.map} +1 -1
  28. package/dist/scripts/3969-c0160d0139-lite.chunk.js +2 -0
  29. package/dist/scripts/3969-c0160d0139-lite.chunk.js.map +1 -0
  30. package/dist/scripts/422-ee640f76c5-lite.chunk.js +2 -0
  31. package/dist/scripts/422-ee640f76c5-lite.chunk.js.map +1 -0
  32. package/dist/scripts/{431-5e609b8dbd-lite.chunk.js → 431-586d197eeb-lite.chunk.js} +1 -1
  33. package/dist/scripts/{431-5e609b8dbd-lite.chunk.js.map → 431-586d197eeb-lite.chunk.js.map} +1 -1
  34. package/dist/scripts/{4683-be07f1375c-lite.chunk.js → 4683-ce52da47d8-lite.chunk.js} +1 -1
  35. package/dist/scripts/{4683-be07f1375c-lite.chunk.js.map → 4683-ce52da47d8-lite.chunk.js.map} +1 -1
  36. package/dist/scripts/5220-58d9529f21-lite.chunk.js +3 -0
  37. package/dist/scripts/5220-58d9529f21-lite.chunk.js.map +1 -0
  38. package/dist/scripts/{5466-0500ed8c29-lite.chunk.js → 5466-401f301cd1-lite.chunk.js} +1 -1
  39. package/dist/scripts/{5466-0500ed8c29-lite.chunk.js.map → 5466-401f301cd1-lite.chunk.js.map} +1 -1
  40. package/dist/scripts/{5549-d19ed5a9c6-lite.chunk.js → 5549-ae40aeb0f8-lite.chunk.js} +1 -1
  41. package/dist/scripts/{5549-d19ed5a9c6-lite.chunk.js.map → 5549-ae40aeb0f8-lite.chunk.js.map} +1 -1
  42. package/dist/scripts/{5587-3de8761ca3-lite.chunk.js → 5587-d27030e106-lite.chunk.js} +1 -1
  43. package/dist/scripts/{5587-3de8761ca3-lite.chunk.js.map → 5587-d27030e106-lite.chunk.js.map} +1 -1
  44. package/dist/scripts/{5660-268adb479d-lite.chunk.js → 5660-a356acdbca-lite.chunk.js} +1 -1
  45. package/dist/scripts/{5660-268adb479d-lite.chunk.js.map → 5660-a356acdbca-lite.chunk.js.map} +1 -1
  46. package/dist/scripts/{6054-fcfe84a18d-lite.chunk.js → 6054-cf9311ce64-lite.chunk.js} +1 -1
  47. package/dist/scripts/{6054-fcfe84a18d-lite.chunk.js.map → 6054-cf9311ce64-lite.chunk.js.map} +1 -1
  48. package/dist/scripts/{6094-063cffe417-lite.chunk.js → 6094-d5fa8b07dc-lite.chunk.js} +1 -1
  49. package/dist/scripts/{6094-063cffe417-lite.chunk.js.map → 6094-d5fa8b07dc-lite.chunk.js.map} +1 -1
  50. package/dist/scripts/6450-601f889072-lite.chunk.js +2 -0
  51. package/dist/scripts/6450-601f889072-lite.chunk.js.map +1 -0
  52. package/dist/scripts/6544-fd0c4d43c1-lite.chunk.js +2 -0
  53. package/dist/scripts/6544-fd0c4d43c1-lite.chunk.js.map +1 -0
  54. package/dist/scripts/6572-75c435eae1-lite.chunk.js +2 -0
  55. package/dist/scripts/6572-75c435eae1-lite.chunk.js.map +1 -0
  56. package/dist/scripts/{7954-9a3694b784-lite.chunk.js → 7954-87777549a2-lite.chunk.js} +1 -1
  57. package/dist/scripts/{7954-9a3694b784-lite.chunk.js.map → 7954-87777549a2-lite.chunk.js.map} +1 -1
  58. package/dist/scripts/8801-4b8d3958b4-lite.chunk.js +2 -0
  59. package/dist/scripts/8801-4b8d3958b4-lite.chunk.js.map +1 -0
  60. package/dist/scripts/{9674-1ce4fe796c-lite.chunk.js → 9674-f560ed51ea-lite.chunk.js} +2 -2
  61. package/dist/scripts/9674-f560ed51ea-lite.chunk.js.map +1 -0
  62. package/dist/scripts/{9808-5ce9fc5d84-lite.chunk.js → 9808-e80883e731-lite.chunk.js} +2 -2
  63. package/dist/scripts/{9808-5ce9fc5d84-lite.chunk.js.map → 9808-e80883e731-lite.chunk.js.map} +1 -1
  64. package/dist/scripts/{bundle-af42b7e6d6.min.js → bundle-507079f8c6.min.js} +3 -3
  65. package/dist/scripts/{bundle-af42b7e6d6.min.js.map → bundle-507079f8c6.min.js.map} +1 -1
  66. package/package.json +1 -1
  67. package/dist/scripts/1518-8275a95d07-lite.chunk.js +0 -2
  68. package/dist/scripts/1518-8275a95d07-lite.chunk.js.map +0 -1
  69. package/dist/scripts/1798-972b0f3769-lite.chunk.js +0 -2
  70. package/dist/scripts/1798-972b0f3769-lite.chunk.js.map +0 -1
  71. package/dist/scripts/2120-2e824a172a-lite.chunk.js +0 -2
  72. package/dist/scripts/2120-2e824a172a-lite.chunk.js.map +0 -1
  73. package/dist/scripts/3969-525c157e0c-lite.chunk.js +0 -2
  74. package/dist/scripts/3969-525c157e0c-lite.chunk.js.map +0 -1
  75. package/dist/scripts/422-5773602f61-lite.chunk.js +0 -2
  76. package/dist/scripts/422-5773602f61-lite.chunk.js.map +0 -1
  77. package/dist/scripts/5710-c2804ffafe-lite.chunk.js +0 -2
  78. package/dist/scripts/6450-2745feb746-lite.chunk.js +0 -2
  79. package/dist/scripts/6450-2745feb746-lite.chunk.js.map +0 -1
  80. package/dist/scripts/6572-4dda098022-lite.chunk.js +0 -2
  81. package/dist/scripts/6572-4dda098022-lite.chunk.js.map +0 -1
  82. package/dist/scripts/9620-d6dd77fedc-lite.chunk.js +0 -3
  83. package/dist/scripts/9620-d6dd77fedc-lite.chunk.js.map +0 -1
  84. package/dist/scripts/9674-1ce4fe796c-lite.chunk.js.map +0 -1
  85. package/dist/scripts/999-1afd6be8dc-lite.chunk.js +0 -2
  86. package/dist/scripts/999-1afd6be8dc-lite.chunk.js.map +0 -1
  87. /package/dist/css/{9620-lite-8b4a93ca31.chunk.css → 5220-lite-8b4a93ca31.chunk.css} +0 -0
  88. /package/dist/css/{2120-lite-d46c2d634c.chunk.css → 6544-lite-d46c2d634c.chunk.css} +0 -0
  89. /package/dist/css/{999-lite-c88eb54bee.chunk.css → 8801-lite-c88eb54bee.chunk.css} +0 -0
  90. /package/dist/scripts/{1329-b3e3f5d25d-lite.chunk.js.LICENSE.txt → 1329-57aa3d33cb-lite.chunk.js.LICENSE.txt} +0 -0
  91. /package/dist/scripts/{9620-d6dd77fedc-lite.chunk.js.LICENSE.txt → 5220-58d9529f21-lite.chunk.js.LICENSE.txt} +0 -0
  92. /package/dist/scripts/{9808-5ce9fc5d84-lite.chunk.js.LICENSE.txt → 9808-e80883e731-lite.chunk.js.LICENSE.txt} +0 -0
  93. /package/dist/scripts/{bundle-af42b7e6d6.min.js.LICENSE.txt → bundle-507079f8c6.min.js.LICENSE.txt} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clickview/lite",
3
- "version": "0.52.3-rc.1",
3
+ "version": "0.52.4-rc.0",
4
4
  "description": "ClickView Lite",
5
5
  "main": "dist/scripts/bundle.js",
6
6
  "types": "dist/projects/lite/src/index.d.ts",
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[1518],{88513:(e,t,n)=>{n.d(t,{B:()=>u});var a=n(32735),i=n(23481),r=n(65858),s=n(36848);const o={seeMore:"yv0FS"};var c=i.T.encloseNamespace("shared.widgetHeader");function l(e){return a.createElement("div",{className:"ms-3 ".concat(o.seeMore)},a.createElement(s.F,{appLink:e.appLink,analyticsData:e.analyticsData,analyticsOptions:Object.assign(Object.assign({},e.analyticsOptions),{descriptor:r._S.SeeMore}),className:"text-decoration-none ".concat(e.appLink?"curated-widget-link":"")},a.createElement("p",{className:"hover-text-underline text-dark curated-widget-heading"},c("seeMore"))))}function u(e){var t=!!e.description;return e.name||e.description?a.createElement("div",{className:"curated-widget-header"},a.createElement("div",{className:"d-flex justify-content-between"},!!e.name&&a.createElement("div",{className:o.title},a.createElement(s.F,{appLink:e.appLink,analyticsOptions:e.analyticsOptions,analyticsData:e.analyticsData,className:"text-decoration-none ".concat(e.appLink?"curated-widget-link":""),onClick:e.onClick},a.createElement("h2",{className:"h4 curated-widget-heading"},e.name))),!!e.appLink&&!t&&!!e.showSeeMoreLink&&a.createElement(l,Object.assign({},e))),t&&a.createElement("div",{className:"d-flex justify-content-between align-items-end"},a.createElement("p",{className:"description curated-widget-description ".concat(o.description)},a.createElement("span",null,e.description)),!!e.appLink&&!!e.showSeeMoreLink&&a.createElement(l,Object.assign({},e)))):a.createElement(a.Fragment,null)}},55827:(e,t,n)=>{n.d(t,{l:()=>i});var a=n(32735);function i(e){return e.hideDescription&&e.hideHeading?a.createElement(a.Fragment,null):a.createElement("div",{className:"curated-widget-header"},!e.hideHeading&&a.createElement("div",{className:"partial-loading-background curated-widget-heading",style:{height:"1.5rem",width:"12rem"}}),!e.hideDescription&&a.createElement("div",{className:"partial-loading-background curated-widget-description",style:{height:"1.434375rem",width:"16rem"}}))}},5281:(e,t,n)=>{n.d(t,{k:()=>O,x:()=>N});var a=n(32735),i=n(23481),r=n(91967),s=n(82182),o=n(81886),c=n(49985),l=n(88513),u=n(43872),d=n(16930),m=n(31069),f=n(54610),p=n(10841),v=n(79967),g=n(49439),h=n(65294),b=n(40424),y=n(49542),x=n(61871),E=n(92644),w=n(31309),k=n(19720);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 a,i,r,s,o=[],c=!0,l=!1;try{if(r=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(a=r.call(n)).done)&&(o.push(a.value),o.length!==t);c=!0);}catch(e){l=!0,i=e}finally{try{if(!c&&null!=n.return&&(s=n.return(),Object(s)!==s))return}finally{if(l)throw i}}return o}}(e,t)||function(e,t){if(e){if("string"==typeof e)return I(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)?I(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 I(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var A="shared.fixedWidget",N=12;function O(e){var t,n=e.analyticsData,I=void 0===n?{}:n,O=e.getWidgetItemAnalyticsData,S=void 0===O?function(){}:O,j=C(a.useState(null),2),z=j[0],D=j[1],L=C(a.useState(null),2),P=L[0],R=L[1],T=C(a.useState(0),2),B=T[0],M=T[1],F=C(a.useReducer(x.CU,x.eS,x.m0),2),V=F[0],U=F[1],W=a.useRef(null),G=C((0,g.X)(),2),H=G[0],Z=G[1],_=C(a.useState(!1),2),$=_[0],q=_[1],J=C(a.useState(!1),2),Q=J[0],X=J[1];(0,E.iV)(e.controlsRef,U);var K=(0,h.Y)({prevent:!e.lazyLoad}),Y=K.ref,ee=K.inView,te=(0,E.$5)(e,U,ee);function ne(t){var n,a=e.prefetched?e.collection:te.data;if(!a)return[];var i=r.q.isFunction(e.setData)?e.setData(a):a;return null!==(n=null==i?void 0:i.slice(0,t))&&void 0!==n?n:[]}var ae=ne(e.limitTotalItems?N:1/0),ie=V.offset===ae.length,re=(0,v.k)();function se(){return"scroll"===e.touchBehavior&&s.V.isTabletOrMobile()}a.useEffect((function(){U({type:p.n.Resize,payload:{breakpoints:re}})}),[re]),a.useEffect((function(){if(e.prefetched){var t=e.type;t===b.l9.ResourcesTile&&(t=b.l9.Row),U({type:p.n.Init,payload:{breakpoints:re,type:t,contents:e.contents,totalItems:ae.length}})}}),[null===(t=e.collection)||void 0===t?void 0:t.length,e.prefetched]);var oe={type:V.type,collectionSize:ae.length,contents:e.contents},ce=(0,E.lv)(e,(null==te?void 0:te.data)||e.collection);if(null==te?void 0:te.hasError)return a.createElement(a.Fragment,null);if(!e.prefetched&&!(null==te?void 0:te.data)){var le=e.partialComponent||w.j;return a.createElement("div",{ref:Y},a.createElement(le,null))}if(!ae.length||ae.length<e.minimumItemCount)return a.createElement(a.Fragment,null);var ue=e.childComponent,de=function(t){return Object.assign({id:null==ce?void 0:ce.id,name:null==ce?void 0:ce.name,direction:t===p.n.Next?"right":"left"},e.analyticsData)},me=!(!e.appLink||!ie)&&!!e.limitTotalItems&&ne(1/0).length>ae.length,fe=se()||e.hideButtons,pe=V.offset===V.viewableItems,ve=ae.length<=V.offset,ge=V.viewableItems<ae.length;return a.createElement("div",{className:"mx-n4 mb-n3"},a.createElement("div",{className:se()?"pb-3 overflow-hidden":"px-4 pb-3 overflow-hidden"},!e.hideName&&a.createElement("div",{className:se()?"px-4":""},a.createElement(l.B,{name:ce.name,description:ce.description,appLink:(0,E.LU)(e.appLink,ce),onClick:e.onClick,analyticsData:Object.assign({id:null==ce?void 0:ce.id,name:null==ce?void 0:ce.name},e.analyticsData),analyticsOptions:y.d.getSliderHeadingAnalyticsOptions(),showSeeMoreLink:ge})),a.createElement("div",{ref:H,className:"position-relative mx-n1 ".concat(se()?"".concat(k.Z.mobileScroll," px-4"):""," ").concat(e.hideBleedingContent?"overflow-hidden-x":"")},!fe&&a.createElement(a.Fragment,null,!e.hideBleedingContent&&!$&&!pe&&a.createElement("div",{className:k.Z.leftOverflowGradient}),a.createElement(d.W,{direction:d.f.Left,onClick:function(){U({type:p.n.Previous}),c.k.logUserAction(de(p.n.Previous),y.d.getSliderAnalyticsOptions()),r.q.isFunction(e.onPrevious)&&e.onPrevious()},hide:!!e.hideButtons||(0,E.yZ)($,Z,V.offset,V.viewableItems,ae.length),contents:e.contents,className:e.leftWidgetButtonClassName,hideExtendedClickableArea:e.hideExtendedClickableArea,state:V})),a.createElement(u.V,{position:V.position,positionType:m.C.Percentage,onTouchMove:"drag"===e.touchBehavior&&(0,E.p$)(V,W,P,R,z,D,M),onTouchEnd:"drag"===e.touchBehavior&&(0,E.mE)(W,D,B,M,U,e.onNext,e.onPrevious),ref:W,percentageDragged:B},ae.map((function(t,n){return a.createElement(ue,Object.assign({key:"".concat(t.id,":").concat(n),data:t,collectionAppLink:e.appLink,getAppLink:e.getChildAppLink?function(){return e.getChildAppLink(t)}:function(){return null},context:oe,preloadImage:(0,E.eM)(V,ae)(t),thumbnailSize:e.thumbnailSize||f.h2.Medium,analyticsData:Object.assign(Object.assign({widgetId:ce.id,widgetName:ce.name,itemIndex:n},I),S(t)),analyticsOptions:Object.assign(Object.assign({},e.analyticsOptions),y.d.getSliderItemAnalyticsOptions()),onHover:function(e){se()||window.setTimeout((function(){!function(e,t){if(ae.length===V.viewableItems)return q(e),void X(e);t+1!==ae.length?0!==t?(t+1-V.offset%V.viewableItems)%V.viewableItems!=0?(t-V.offset%V.viewableItems)%V.viewableItems!=0||q(e):X(e):q(e):X(e)}(e,n)}),e?0:200)}},e.extraChildComponentProps))})),se()&&a.createElement("div",{className:"ps-4"})),!fe&&a.createElement(a.Fragment,null,a.createElement(d.W,{direction:d.f.Right,onClick:function(){me?o.Q.C$.trigger((0,E.LU)(e.appLink,ce)):(U({type:p.n.Next}),c.k.logUserAction(de(p.n.Next),y.d.getSliderAnalyticsOptions()),r.q.isFunction(e.onNext)&&e.onNext())},hide:!!e.hideButtons||(0,E.DK)(Q,Z,V.offset,V.viewableItems,ae.length,me),contents:e.contents,hoverText:me&&i.T.getPhrase(A,"seeMore"),className:e.rightWidgetButtonClassName,hideExtendedClickableArea:e.hideExtendedClickableArea,state:V}),!e.hideBleedingContent&&!Q&&!ve&&a.createElement("div",{className:k.Z.rightOverflowGradient})))))}O.defaultProps={type:b.l9.Row,minimumItemCount:0,extraChildComponentProps:{},touchBehavior:"scroll"}},61871:(e,t,n)=>{n.d(t,{CU:()=>l,eS:()=>s,m0:()=>u});var a=n(10841),i=n(40424),r=n(92644),s={offset:0,viewableItems:4,position:0,totalItems:0,contents:null,type:i.l9.Row},o=function(e){var t=e.viewableItems,n=e.offset,a=e.position,i=e.totalItems-n;return i%t==0||i>t?{position:a-100,offset:n+t}:i<t?{position:a-i/t*100,offset:n+i}:{position:a,offset:n}},c=function(e){var t=e.viewableItems,n=e.offset,a=e.position,i=n-t;return i%t==0||i>t?{position:a+100,offset:n-t}:i<t?{position:a+i/t*100,offset:n-i}:{position:a,offset:n}};function l(e,t){var n=t.type,i=t.payload,s=void 0===i?{}:i;switch(n){case a.n.Next:return Object.assign(Object.assign({},e),o(e));case a.n.Previous:return Object.assign(Object.assign({},e),c(e));case a.n.JumpToIndex:return Object.assign(Object.assign({},e),{offset:s.offset,position:-100*(s.offset-1)});case a.n.Resize:var l=(0,r.Wl)(e.contents)(s.breakpoints,e.type,e.totalItems);return Object.assign(Object.assign({},e),{position:0,offset:l,viewableItems:l});case a.n.Init:var d=(0,r.Wl)(s.contents)(s.breakpoints,s.type,s.totalItems);return u(Object.assign(Object.assign({},e),{offset:d,viewableItems:d,type:s.type,contents:s.contents,totalItems:s.totalItems,position:0}));case a.n.Update:return Object.assign(Object.assign({},e),{totalItems:s.totalItems});default:return e}}function u(e){return Object.assign(Object.assign({},s),e)}},92644:(e,t,n)=>{n.d(t,{$5:()=>m,DK:()=>M,LU:()=>p,Wl:()=>g,eM:()=>f,iV:()=>F,lv:()=>v,mE:()=>T,p$:()=>P,yZ:()=>B});var a=n(32735),i=n(91967),r=n(1048),s=n(28400),o=n(58704),c=n(10841),l=n(79967),u=n(40424),d=n(5281);function m(e,t,n){var s,o=e.collection;o&&!r.t.isEmpty(o)||e.prefetched||(s=e.fetch(n),o=s.data);var m=i.q.isFunction(e.setData)&&o?e.setData(o):o,f=m,p=(0,l.k)();return a.useEffect((function(){if(o&&!r.t.isEmpty(o)){e.limitTotalItems&&(f=m.length>d.x?m.slice(0,d.x):m);var n=e.type;n===u.l9.ResourcesTile&&(n=u.l9.Row),t({type:c.n.Init,payload:{totalItems:f.length,breakpoints:p,type:n,contents:e.contents}})}}),[null==m?void 0:m.length]),s}function f(e,t){for(var n=e.offset,a=e.viewableItems,i=n,r=[],s=0;s<i+a;s++)r.push(s);return function(e){var n=t.indexOf(e);return r.includes(n)}}function p(e,t){if(e)return Object.assign(Object.assign({},e),{args:e.args||[t.id,s.m.slugify(t.name)]})}function v(e,t){var n=e.name,a=e.description,i={};return Array.isArray(t)?{name:n,description:a}:(e.name&&(i.name=n),e.description&&(i.description=a),Object.assign(Object.assign({},t),i))}function g(e){switch(e){case o.z.Playlists:return h;case o.z.Videos:return x;case o.z.RecentActivities:return E;case o.z.FeedVideos:return w;case o.z.Subjects:return k;case o.z.InteractivesV2:return A;case o.z.Interactives:return C;case o.z.ClipsV2:return N;case o.z.Clips:return I;case o.z.PlayPageResources:return O;case o.z.PlayPageResourcesV2:return S;case o.z.DashboardResources:return x;case o.z.Libraries:case o.z.Folders:return y;case o.z.Ratings:return D;case o.z.SpecialEvents:return L;case o.z.Companies:return b;case o.z.SmallSeries:return z;case o.z.Series:default:return j}}function h(e,t,n){var a=5;return e.xs?a=2:e.sm?a=3:e.md&&(a=4),n<a&&(a=n),a}function b(e,t,n){var a=8;return e.xs||e.sm?a=4:e.md&&(a=6),n<a&&(a=n),a}function y(e,t,n){var a=3;return e.xs||e.sm?a=1:e.md?a=2:e.lg&&(a=3),n<a&&(a=n),a}function x(e,t,n){var a=4;return e.xs&&(a=1),e.sm&&(a=2),(e.md||e.lg)&&(a=3),t===u.l9.LargeRow&&a>3&&(a=3),n<a&&(a=n),a}function E(e,t,n){var a=4;return e.xs&&(a=2),e.sm&&(a=3),n<a&&(a=n),a}function w(e,t,n){return 1}function k(e,t,n){if(t===u.l9.LargeRow){var a=5;return e.xs?a=2:e.sm?a=3:e.md&&(a=4),n<a&&(a=n),a}var i=6;return e.xs?i=2:e.sm?i=3:e.md?i=4:e.lg?i=5:(e.xl||e.xxl)&&(i=6),n<i&&(i=n),i}function C(e,t,n){var a=3;return(e.md||e.sm)&&(a=2),e.xs&&(a=1),n<Math.ceil(a)&&(a=n),a}function I(e,t,n){var a=3;return(e.md||e.sm)&&(a=2),e.xs&&(a=1),n<Math.ceil(a)&&(a=n),a}function A(e,t,n){var a=3;return e.xs&&(a=2),n<a&&(a=n),a}function N(e,t,n){var a=3;return e.xs&&(a=2),n<a&&(a=n),a}function O(e,t,n){var a=4;return e.sm&&(a=3),e.xs&&(a=2),n<a&&(a=n),a}function S(e,t,n){var a=3;return e.xs&&(a=2),n<a&&(a=n),a}function j(e,t,n){var a=4;return e.xs?a=2:e.sm&&(a=3),n<a&&(a=n),a}function z(e,t,n){var a=6;return e.xs?a=2:e.sm?a=3:e.md?a=4:e.lg&&(a=5),n<a&&(a=n),a}function D(e,t,n){if(n<4)return n;var a=5;return(e.xs||e.sm)&&(a=3),(e.md||e.lg)&&(a=4),4===n&&(e.xs||e.sm)&&(a=3),n<a&&(a=n),a}function L(e,t,n){var a=6;return e.xs&&(a=2),e.sm&&(a=3),e.md&&(a=4),e.lg&&(a=5),(e.xl||e.xxl)&&(a=6),n<a&&(a=n),a}function P(e,t,n,a,i,r,s){return function(o){var c=o.touches.item(0).clientX;i||(t.current.style.transition="",a(t.current.getBoundingClientRect().width),r(c));var l=(i-c)/n*100;(l<0&&e.offset===e.viewableItems||l>0&&e.offset===e.totalItems)&&(l=0),s(l)}}var R=7.5;function T(e,t,n,a,i,r,s){return function(){if(e.current.style.transition="transform .4s ease-in-out",t(null),Math.abs(n)>=R){var o=n>0?c.n.Next:c.n.Previous;i({type:o}),n>0&&r?r():n<0&&s&&s()}a(0)}}function B(e,t,n,a,i){return!!e||i<=a||!t||n===a}function M(e,t,n,a,i,r){return!!e||i<=a||n!==a&&(!t||!r&&i<=n)}function F(e,t){a.useEffect((function(){e&&!e.current&&(e.current={jumpToIndex:function(e){return t({type:c.n.JumpToIndex,payload:{offset:e+1}})}})}),[null==e?void 0:e.current])}},31309:(e,t,n)=>{n.d(t,{j:()=>o});var a=n(32735),i=n(55827),r=n(79967),s=n(19720);function o(e){for(var t,n,s=(t=e.size,(n=(0,r.k)()).xs?{itemCount:1,colSize:12}:n.sm?{itemCount:2,colSize:6}:n.md||n.lg?{itemCount:3,colSize:4}:{itemCount:"sm"===t?4:3,colSize:"sm"===t?3:4}),o=s.itemCount,c=s.colSize,l=e.childComponent,u=[],d=0;d<o;d++)u.push(a.createElement(l,{key:d,colSize:c}));return a.createElement("div",{className:"widget"},a.createElement(i.l,{hideHeading:e.hideHeading,hideDescription:e.hideDescription}),a.createElement("div",{className:"row g-0 mx-n1"},u))}o.defaultProps={size:"sm",childComponent:function(e){var t=e.colSize;return a.createElement("div",{className:"col-".concat(t," px-1")},a.createElement("div",{className:"".concat(s.Z.partialItem," partial-loading-background rounded-3")}))}}},11518:(e,t,n)=>{n.d(t,{j7:()=>i.j,kM:()=>a.k});var a=n(5281),i=(n(61871),n(31309))},43872:(e,t,n)=>{n.d(t,{V:()=>u});var a=n(32735),i=n(82182),r=n(31069),s=n(91967),o=new Image;o.src="data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs=";var c=function(e){e.dataTransfer.setDragImage&&s.q.isFunction(e.dataTransfer.setDragImage)&&e.dataTransfer.setDragImage(o,0,0)},l=i.V.isTouchScreen(),u=a.forwardRef((function(e,t){var n,i,s,o,u=e.children,d=e.positionType,m=e.onDrag,f=e.onDragEnd,p=e.onTouchMove,v=e.onTouchEnd,g=e.percentageDragged,h=e.position,b=void 0===h?0:h;return a.createElement("div",Object.assign({className:"d-flex flex-nowrap position-relative w-100",style:(i=b,s=d,o=g,s===r.C.Percentage&&o&&(i-=o),{transform:"translate3d(".concat(i).concat(s,", 0px, 0px)"),transition:"transform .4s ease-in-out"}),ref:t},(n={},m&&f&&(n.draggable=!0,n.onDragEnd=f,n.onDragStart=c,n.onDragOver=m),p&&v&&l&&(n.onTouchMoveCapture=p,n.onTouchEndCapture=v),n)),u)}))},16930:(e,t,n)=>{n.d(t,{W:()=>l,f:()=>c});var a=n(32735),i=n(83914),r=n(35223);const s="VSAPU",o="kgeXh";var c;!function(e){e[e.Left=0]="Left",e[e.Right=1]="Right"}(c||(c={}));var l=a.memo((function(e){var t,n,l,u=e.direction===c.Left,d=u?r.vn.ChevronLeft:r.vn.ChevronRight;return e.hide?a.createElement(a.Fragment,null):a.createElement("div",{className:"_ejId",style:"videos"===(null===(n=e.state)||void 0===n?void 0:n.contents)?{paddingBottom:56.25/(null===(l=e.state)||void 0===l?void 0:l.viewableItems)+"%"}:{height:"100%"}},e.useGradientBackdrop&&a.createElement("div",{className:u?"".concat("Pt3nx"," ").concat(e.leftGradientClassName):"".concat("ZuAif"," ").concat(e.rightGradientClassName)}),!e.hideExtendedClickableArea&&a.createElement("div",{role:"button",onClick:e.onClick,className:"".concat("AtsWP"," ").concat(u?s:o)}),a.createElement("div",{role:"button",className:"".concat((t="BVcIS",t+=u?" ".concat(s," ").concat(e.leftButtonClassName):" ".concat(o," ").concat(e.rightButtonClassName))," ").concat("gAsE9"," ").concat(e.className||""),onClick:e.onClick},e.hoverText&&a.createElement("span",{className:"ps-3 pe-2 ".concat("APA36")},e.hoverText),a.createElement(i.x,{svgName:d,size:i.S.Medium,className:"svg-container d-inline-block ".concat("Ev4hr")})))}))},31069:(e,t,n)=>{var a;n.d(t,{C:()=>a}),function(e){e.Percentage="%",e.Pixels="px"}(a||(a={}))},58704:(e,t,n)=>{var a;n.d(t,{z:()=>a}),function(e){e.Videos="videos",e.FeedVideos="feed videos",e.Series="series",e.Subjects="subjects",e.Playlists="playlists",e.Interactives="interactives",e.Clips="clips",e.PlayPageResources="play page resources",e.DashboardResources="dashboard resources",e.Libraries="Libraries",e.Folders="Folders",e.RecentActivities="recent activities",e.SmallSeries="small series",e.Companies="companies",e.Ratings="ratings",e.SpecialEvents="special events",e.InteractivesV2="interactives v2",e.ClipsV2="clips v2",e.PlayPageResourcesV2="playpage resources v2"}(a||(a={}))},10841:(e,t,n)=>{var a;n.d(t,{n:()=>a}),function(e){e.Init="init",e.Next="next",e.Previous="previous",e.Resize="resize",e.Drag="drag",e.Update="update",e.JumpToIndex="jump-to-index"}(a||(a={}))},19720:(e,t,n)=>{n.d(t,{Z:()=>a});const a={rightOverflowGradient:"tAbzW",leftOverflowGradient:"JXtNs",partialItem:"iNH_I",mobileScroll:"bDcOS"}}}]);
2
- //# sourceMappingURL=1518-8275a95d07-lite.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/1518-8275a95d07-lite.chunk.js","mappings":"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","sources":["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/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader.tsx","file:///app/packages/libs/shared/src/components/widgets/fixed-widget/FixedWidget.tsx","file:///app/packages/libs/shared/src/components/widgets/fixed-widget/FixedWidgetReducer.tsx","file:///app/packages/libs/shared/src/components/widgets/fixed-widget/FixedWidgetUtils.ts","file:///app/packages/libs/shared/src/components/widgets/fixed-widget/PartialFixedWidget.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/WidgetContents.ts","file:///app/packages/libs/shared/src/enums/WidgetInteraction.ts","file:///app/packages/libs/shared/src/components/widgets/fixed-widget/fixed-widget.scss"],"sourcesContent":["// 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 React from 'react';\n\ninterface PartialWidgetHeaderProps {\n hideHeading?: boolean;\n hideDescription?: boolean;\n}\n\nexport function PartialWidgetHeader(props: PartialWidgetHeaderProps): JSX.Element {\n if (props.hideDescription && props.hideHeading)\n return <></>;\n\n return (\n <div className='curated-widget-header'>\n {!props.hideHeading && (\n <div className='partial-loading-background curated-widget-heading' style={{ height: '1.5rem', width: '12rem' }} />\n )}\n\n {!props.hideDescription && (\n <div className='partial-loading-background curated-widget-description' style={{ height: '1.434375rem', width: '16rem' }} />\n )}\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { UserAgentHelper } from 'libs/common/backbone/utils/UserAgentHelper';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, HashObject } from 'libs/analytics/interfaces';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { SlidingListContainer } from 'libs/shared/components/widgets/sliding-list/SlidingListContainer';\nimport { WidgetButton, WidgetButtonDirection } from 'libs/shared/components/widgets/widget-button/WidgetButton';\nimport { CssMeasurement } from 'libs/shared/enums/CssMeasurement';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { WidgetInteraction } from 'libs/shared/enums/WidgetInteraction';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { useHover } from 'libs/shared/hooks/UseHover';\nimport { useLazyLoad } from 'libs/shared/hooks/UseLazyLoad';\nimport { WidgetContext, WidgetType } from 'libs/shared/interfaces';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport { FixedWidgetReducer, initialWidgetState, lazyWidgetInit } from './FixedWidgetReducer';\nimport { FixedWidgetControls, formatData, getCollectionAppLink, getOnTouchEnd, getOnTouchStart, getShouldPreload, hideBackButton, hideNextButton, useControlsRef, useFetchData } from './FixedWidgetUtils';\nimport { PartialFixedWidget } from './PartialFixedWidget';\n\nimport styles from './fixed-widget.scss';\n\nconst namespace = 'shared.fixedWidget';\n\n// Max number of widget items whenever `props.limitTotalItems` is `true`\nexport const WIDGET_ITEM_LIMIT = 12;\n\ninterface BaseFixedWidgetProps<TChildProps extends FixedWidgetItemProps> {\n id?: string;\n name?: string;\n description?: string;\n\n type: WidgetType;\n contents: WidgetContents;\n thumbnailSize?: ImageSize;\n minimumItemCount?: number;\n limitTotalItems?: boolean;\n setData?: (data: any) => any[] | null;\n\n childComponent: (props: FixedWidgetItemProps) => JSX.Element;\n extraChildComponentProps: Omit<TChildProps, keyof FixedWidgetItemProps>;\n partialComponent?: React.ElementType;\n getChildAppLink?: (item?: any) => Core.AppLink;\n appLink?: Core.AppLink;\n onClick?: () => void;\n\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n\n getWidgetItemAnalyticsData?: (data: any) => HashObject;\n\n onNext?: () => void;\n onPrevious?: () => void;\n controlsRef?: React.MutableRefObject<FixedWidgetControls>;\n touchBehavior?: 'drag' | 'scroll';\n\n leftWidgetButtonClassName?: string;\n rightWidgetButtonClassName?: string;\n\n hideName?: boolean;\n hideBleedingContent?: boolean;\n hideExtendedClickableArea?: boolean;\n hideButtons?: boolean;\n}\n\ntype FixedWidgetWithFetchProps<TChildProps extends FixedWidgetItemProps> = BaseFixedWidgetProps<TChildProps> & {\n lazyLoad: true;\n collection?: never;\n fetch: (...args: any) => Flight.Response<any>;\n prefetched?: false;\n};\n\ntype FixedWidgetWithCollectionProps<TChildProps extends FixedWidgetItemProps> = BaseFixedWidgetProps<TChildProps> & {\n collection: any;\n lazyLoad?: false;\n fetch?: never;\n prefetched: true;\n};\n\nexport type FixedWidgetProps<TChildProps extends FixedWidgetItemProps> =\n FixedWidgetWithCollectionProps<TChildProps> |\n FixedWidgetWithFetchProps<TChildProps>;\n\nFixedWidget.defaultProps = {\n type: WidgetType.Row,\n minimumItemCount: 0,\n extraChildComponentProps: {},\n touchBehavior: 'scroll'\n};\n\nexport function FixedWidget<TChildProps extends FixedWidgetItemProps>(\n props: FixedWidgetProps<TChildProps>\n): JSX.Element {\n const { analyticsData = {}, getWidgetItemAnalyticsData = () => {} } = props;\n\n const [ initialTouchX, setInitialTouchX ] = React.useState(null);\n const [ containerWidth, setContainerWidth ] = React.useState(null);\n const [ percentageDragged, setPercentageDragged ] = React.useState(0);\n\n const [ state, dispatch ] = React.useReducer(FixedWidgetReducer, initialWidgetState, lazyWidgetInit);\n\n const containerRef = React.useRef(null);\n const [ buttonsRef, isHovering ] = useHover<HTMLDivElement>();\n\n const [ isHoveringOnFarLeft, setIsHoveringOnFarLeft ] = React.useState(false);\n const [ isHoveringOnFarRight, setIsHoveringOnFarRight ] = React.useState(false);\n\n useControlsRef(props.controlsRef, dispatch);\n\n const { ref, inView: shouldFetch } = useLazyLoad({ prevent: !props.lazyLoad });\n\n const response = useFetchData(props, dispatch, shouldFetch);\n\n function getWidgetCollection(limit: number): any[] {\n const responseData = props.prefetched ? props.collection : response.data;\n\n if (!responseData)\n return [];\n\n const formattedResponse = FunctionHelper.isFunction(props.setData) ? props.setData(responseData) : responseData;\n return formattedResponse?.slice(0, limit) ?? [];\n }\n\n const widgetItems = getWidgetCollection(props.limitTotalItems ? WIDGET_ITEM_LIMIT : Infinity);\n\n function hasMoreItems(): boolean {\n if (!props.limitTotalItems)\n return false;\n\n const unlimitedItems = getWidgetCollection(Infinity);\n\n return unlimitedItems.length > widgetItems.length;\n }\n\n const hasReachedEnd = state.offset === widgetItems.length;\n\n const breakpoints = useBreakpoints();\n\n React.useEffect(() => {\n dispatch({\n type: WidgetInteraction.Resize,\n payload: { breakpoints }\n });\n }, [breakpoints]);\n\n React.useEffect(() => {\n if (!props.prefetched)\n return;\n\n let type = props.type;\n\n // The ResourcesTile widget type is deprecated. We render the Row type instead in this case\n if (type === WidgetType.ResourcesTile)\n type = WidgetType.Row;\n\n // If the prefetched collection changes, re-initialize the widget state.\n dispatch({\n type: WidgetInteraction.Init,\n payload: {\n breakpoints,\n type,\n contents: props.contents,\n totalItems: widgetItems.length\n }\n });\n }, [ props.collection?.length, props.prefetched ]);\n\n function onSetIsHovering(hovering: boolean, index: number): void {\n if (widgetItems.length === state.viewableItems) {\n setIsHoveringOnFarLeft(hovering);\n setIsHoveringOnFarRight(hovering);\n return;\n }\n\n // This callback will hide the far left button if the user is hovering on the far left widget item.\n // Same goes for the far right button & widget item.\n if (index + 1 === widgetItems.length) {\n setIsHoveringOnFarRight(hovering);\n return;\n }\n\n if (index === 0) {\n setIsHoveringOnFarLeft(hovering);\n return;\n }\n\n if ((index + 1 - (state.offset % state.viewableItems)) % state.viewableItems === 0) {\n setIsHoveringOnFarRight(hovering);\n return;\n }\n\n if ((index - (state.offset % state.viewableItems)) % state.viewableItems === 0) {\n setIsHoveringOnFarLeft(hovering);\n return;\n }\n }\n\n function shouldScroll(): boolean {\n if (props.touchBehavior !== 'scroll')\n return false;\n\n return UserAgentHelper.isTabletOrMobile();\n }\n\n const widgetContext: WidgetContext = {\n type: state.type,\n collectionSize: widgetItems.length,\n contents: props.contents\n };\n\n const data = formatData(props, response?.data || props.collection);\n\n if (response?.hasError)\n return <></>;\n\n if (!props.prefetched && !response?.data) {\n const PartialComponent = props.partialComponent || PartialFixedWidget;\n\n return (\n <div ref={ref}>\n <PartialComponent />\n </div>\n );\n }\n\n if (!widgetItems.length || widgetItems.length < props.minimumItemCount)\n return <></>;\n\n const WidgetItemComponent = props.childComponent;\n\n const getSliderAnalyticsData = (type: WidgetInteraction) => ({\n id: data?.id,\n name: data?.name,\n direction: type === WidgetInteraction.Next ? 'right' : 'left',\n ...props.analyticsData\n });\n\n const showSeeMoreButton = (() => {\n // Only show if there is an applink and we've reached the end of the widget\n if (!props.appLink || !hasReachedEnd)\n return false;\n\n // Also only show if we've exceeded the widget limit, if one has been set\n return hasMoreItems();\n })();\n\n const hideButtons = shouldScroll() || props.hideButtons;\n const hideBackGradient = state.offset === state.viewableItems;\n const hideNextGradient = widgetItems.length <= state.offset;\n const hasMoreThanViewable = state.viewableItems < widgetItems.length;\n\n return (\n <div className='mx-n4 mb-n3'>\n <div className={shouldScroll() ? 'pb-3 overflow-hidden' : 'px-4 pb-3 overflow-hidden'}>\n {!props.hideName &&\n <div className={shouldScroll() ? 'px-4' : ''}>\n <WidgetHeader\n name={data.name}\n description={data.description}\n appLink={getCollectionAppLink(props.appLink, data)}\n onClick={props.onClick}\n analyticsData={{ id: data?.id, name: data?.name, ...props.analyticsData }}\n analyticsOptions={WidgetHelper.getSliderHeadingAnalyticsOptions()}\n showSeeMoreLink={hasMoreThanViewable}\n />\n </div>\n }\n <div\n ref={buttonsRef}\n className={`position-relative mx-n1 ${shouldScroll() ? `${styles.mobileScroll} px-4` : ''} ${props.hideBleedingContent ? 'overflow-hidden-x' : ''}`}\n >\n {!hideButtons && (\n <>\n {(!props.hideBleedingContent && !isHoveringOnFarLeft && !hideBackGradient) && (\n <div className={styles.leftOverflowGradient} />\n )}\n <WidgetButton\n direction={WidgetButtonDirection.Left}\n onClick={() => {\n dispatch({ type: WidgetInteraction.Previous });\n AnalyticsHelper.logUserAction(\n getSliderAnalyticsData(WidgetInteraction.Previous),\n WidgetHelper.getSliderAnalyticsOptions()\n );\n\n FunctionHelper.isFunction(props.onPrevious) && props.onPrevious();\n }}\n hide={!!props.hideButtons || hideBackButton(\n isHoveringOnFarLeft,\n isHovering,\n state.offset,\n state.viewableItems,\n widgetItems.length\n )}\n contents={props.contents}\n className={props.leftWidgetButtonClassName}\n hideExtendedClickableArea={props.hideExtendedClickableArea}\n state={state}\n />\n </>\n )}\n \n <SlidingListContainer\n position={state.position}\n positionType={CssMeasurement.Percentage}\n onTouchMove={props.touchBehavior === 'drag' && getOnTouchStart(\n state,\n containerRef,\n containerWidth,\n setContainerWidth,\n initialTouchX,\n setInitialTouchX,\n setPercentageDragged\n )}\n onTouchEnd={props.touchBehavior === 'drag' && getOnTouchEnd(\n containerRef,\n setInitialTouchX,\n percentageDragged,\n setPercentageDragged,\n dispatch,\n props.onNext,\n props.onPrevious\n )}\n ref={containerRef}\n percentageDragged={percentageDragged}\n >\n {widgetItems.map((widgetItem: any, index: number) => {\n return (\n <WidgetItemComponent\n key={`${widgetItem.id}:${index}`}\n data={widgetItem}\n collectionAppLink={props.appLink}\n getAppLink={props.getChildAppLink ? () => props.getChildAppLink(widgetItem) : () => null}\n context={widgetContext}\n preloadImage={getShouldPreload(state, widgetItems)(widgetItem)}\n thumbnailSize={props.thumbnailSize || ImageSize.Medium}\n analyticsData={{\n widgetId: data.id,\n widgetName: data.name,\n itemIndex: index,\n ...analyticsData,\n ...getWidgetItemAnalyticsData(widgetItem)\n }}\n analyticsOptions={{ ...props.analyticsOptions, ...WidgetHelper.getSliderItemAnalyticsOptions() }}\n onHover={(hovering: boolean) => {\n if (shouldScroll())\n return;\n\n /**\n * For some reason this needs to be called after a set timeout, otherwise\n * the `useHover` listener on the `buttonsRef` element will not detect it's hover\n * event. A delay of 200ms is used for when `hovering` is false so that the effects of\n * setting `isHoveringOnFarX` aren't applied until the CSS transform transition has\n * completed.\n */\n window.setTimeout(() => {\n onSetIsHovering(hovering, index);\n }, hovering ? 0 : 200);\n }}\n {...props.extraChildComponentProps}\n />\n );\n })}\n {shouldScroll() && <div className='ps-4'></div>}\n </SlidingListContainer>\n\n {!hideButtons && (\n <>\n <WidgetButton\n direction={WidgetButtonDirection.Right}\n onClick={() => {\n if (showSeeMoreButton) {\n Core.AppLinkHelper.trigger(getCollectionAppLink(props.appLink, data));\n return;\n }\n\n dispatch({ type: WidgetInteraction.Next });\n AnalyticsHelper.logUserAction(\n getSliderAnalyticsData(WidgetInteraction.Next),\n WidgetHelper.getSliderAnalyticsOptions()\n );\n\n FunctionHelper.isFunction(props.onNext) && props.onNext();\n }}\n hide={!!props.hideButtons || hideNextButton(\n isHoveringOnFarRight,\n isHovering,\n state.offset,\n state.viewableItems,\n widgetItems.length,\n showSeeMoreButton\n )}\n contents={props.contents}\n hoverText={showSeeMoreButton && LanguageService.getPhrase(namespace, 'seeMore')}\n className={props.rightWidgetButtonClassName}\n hideExtendedClickableArea={props.hideExtendedClickableArea}\n state={state}\n />\n {(!props.hideBleedingContent && !isHoveringOnFarRight && !hideNextGradient) && (\n <div className={styles.rightOverflowGradient} />\n )}\n </>\n )}\n </div>\n </div>\n </div>\n );\n}","import { ReducerActions } from 'libs/common/react/interfaces';\n\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { WidgetInteraction } from 'libs/shared/enums/WidgetInteraction';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { WidgetType } from 'libs/shared/interfaces';\n\nimport { getComputeFunction } from './FixedWidgetUtils';\n\nexport interface FixedWidgetPayload {\n breakpoints?: Breakpoints;\n contents?: WidgetContents;\n type?: WidgetType;\n offset?: number;\n totalItems?: number;\n}\n\nexport interface FixedWidgetState {\n // Current position within the widget collection\n offset: number;\n // Number of items viewable in slider for the current breakpoint/viewport size\n viewableItems: number;\n // Relative position of slider in the window. Used for an inline translate3d().\n position: number;\n // Type of widget being managed. May change on `Resize`.\n type: WidgetType;\n // What object type the widget uses :vomit: (this needs to be phased out of this god forsaken component)\n contents: WidgetContents;\n // Total number of items in the widget\n totalItems: number;\n}\n\nexport const initialWidgetState: FixedWidgetState = {\n offset: 0,\n viewableItems: 4,\n position: 0,\n totalItems: 0,\n contents: null,\n type: WidgetType.Row\n};\n\nconst computeNextPosition = (prevState: FixedWidgetState) => {\n const { viewableItems, offset, position, totalItems } = prevState;\n\n const remainingCount = totalItems - offset;\n\n /**\n * If the remaining items are evening divisible by the items in view, or,\n * we have more items that can be displayed in the view, move the slider a full 100%.\n */\n if (remainingCount % viewableItems === 0 || remainingCount > viewableItems)\n return {\n position: position - 100,\n offset: offset + viewableItems\n };\n\n /**\n * Where there are less items than we can show in a full slide, \n * calculate the % movement required to only show those items.\n */\n if (remainingCount < viewableItems)\n return {\n position: position - (remainingCount / viewableItems * 100),\n offset: offset + remainingCount\n };\n\n /**\n * Default back to the current state as a fallback\n */\n return {\n position: position,\n offset: offset\n };\n};\n\nconst computePreviousPosition = (prevState: FixedWidgetState) => {\n const { viewableItems, offset, position } = prevState;\n\n const remainingCount = offset - viewableItems;\n\n if (remainingCount % viewableItems === 0 || remainingCount > viewableItems)\n return {\n position: position + 100,\n offset: offset - viewableItems\n };\n\n if (remainingCount < viewableItems)\n return {\n position: position + (remainingCount / viewableItems * 100),\n offset: offset - remainingCount\n };\n\n return {\n position: position,\n offset: offset\n };\n};\n\nexport function FixedWidgetReducer(\n prevState: FixedWidgetState,\n action: ReducerActions<WidgetInteraction, FixedWidgetPayload>\n): FixedWidgetState {\n const { type, payload = {} } = action;\n\n switch (type) {\n case WidgetInteraction.Next: {\n return {\n ...prevState,\n ...computeNextPosition(prevState)\n };\n }\n\n case WidgetInteraction.Previous: {\n return {\n ...prevState,\n ...computePreviousPosition(prevState)\n };\n }\n\n case WidgetInteraction.JumpToIndex: {\n return {\n ...prevState,\n offset: payload.offset,\n position: (payload.offset - 1) * -100\n };\n }\n\n case WidgetInteraction.Resize: {\n const computeViewableItems = getComputeFunction(prevState.contents);\n const initialSeen = computeViewableItems(payload.breakpoints, prevState.type, prevState.totalItems);\n\n return {\n ...prevState,\n position: 0,\n offset: initialSeen,\n viewableItems: initialSeen\n };\n }\n\n case WidgetInteraction.Init: {\n const computeViewableItems = getComputeFunction(payload.contents);\n const initialSeen = computeViewableItems(payload.breakpoints, payload.type, payload.totalItems);\n\n return lazyWidgetInit({\n ...prevState,\n offset: initialSeen,\n viewableItems: initialSeen,\n type: payload.type,\n contents: payload.contents,\n totalItems: payload.totalItems,\n position: 0\n });\n }\n\n case WidgetInteraction.Update: {\n return {\n ...prevState,\n totalItems: payload.totalItems\n };\n }\n\n default:\n return prevState;\n }\n}\n\nexport function lazyWidgetInit(newState: FixedWidgetState): FixedWidgetState {\n return { ...initialWidgetState, ...newState };\n}","import * as React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\nimport { ReducerActions } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { WidgetInteraction } from 'libs/shared/enums/WidgetInteraction';\nimport { Breakpoints, useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { BaseObject, WidgetType } from 'libs/shared/interfaces';\n\nimport { FixedWidgetProps, WIDGET_ITEM_LIMIT } from './FixedWidget';\nimport { FixedWidgetPayload, FixedWidgetState } from './FixedWidgetReducer';\n\nexport interface WidgetData {\n id?: string;\n name?: string;\n description?: string;\n}\n\nexport function useFetchData<T extends FixedWidgetItemProps = FixedWidgetItemProps>(\n props: FixedWidgetProps<T>,\n dispatch: React.Dispatch<ReducerActions<WidgetInteraction, FixedWidgetPayload>>,\n shouldFetch: boolean\n): Flight.Response<any> {\n let data = props.collection;\n let res: Flight.Response<any>;\n\n if ((!data || ObjectHelper.isEmpty(data)) && !props.prefetched) {\n res = props.fetch(shouldFetch);\n data = res.data;\n }\n\n /**\n * Once we have the widget data, lazily update our state with the new collection\n */\n const collection = (FunctionHelper.isFunction(props.setData) && data) ? props.setData(data) : data;\n let collectionToDisplay = collection;\n\n const breakpoints = useBreakpoints();\n\n React.useEffect(() => {\n if (!data || ObjectHelper.isEmpty(data))\n return;\n\n if (props.limitTotalItems)\n collectionToDisplay = collection.length > WIDGET_ITEM_LIMIT ? collection.slice(0, WIDGET_ITEM_LIMIT) : collection;\n\n let type = props.type;\n\n // The ResourcesTile widget type is deprecated. We render the Row type instead in this case\n if (type === WidgetType.ResourcesTile)\n type = WidgetType.Row;\n\n dispatch({\n type: WidgetInteraction.Init,\n payload: {\n totalItems: collectionToDisplay.length,\n breakpoints,\n type,\n contents: props.contents\n }\n });\n }, [collection?.length]);\n\n return res;\n}\n\n/**\n * This function wrapper determines which widget item images should be pre-fetched by the LazyImage component.\n * It does this by looking at which images are going to be shown after the users clicks on the \"Next\"\n * widget button.\n */\nexport function getShouldPreload(state: FixedWidgetState, collection: any[]): (widgetItem: any) => boolean {\n const { offset, viewableItems } = state;\n\n // The index of the latest item that has been fetched\n const maxLoadedIndex = offset;\n\n /**\n * The indicesToPreload is an array of indices of widget items that should be prefetched by the\n * LazyImage component\n */\n const indicesToPreload: number[] = [];\n for (let i = 0; i < maxLoadedIndex + viewableItems; i++) {\n indicesToPreload.push(i);\n }\n\n /**\n * A widget item calls this function to determine whether or not its image can be pre-fetched.\n * This is determined by whether or not its index has been deemed valid to be pre-fetched\n * by the scope above\n */\n return function shouldPreload(widgetItem: any): boolean {\n const index = collection.indexOf(widgetItem);\n\n return indicesToPreload.includes(index);\n };\n}\n\nexport function getCollectionAppLink(appLink: Core.AppLink, data: WidgetData): Core.AppLink {\n if (!appLink)\n return;\n\n return {\n ...appLink,\n args: appLink.args || [ data.id, TextHelper.slugify(data.name) ]\n };\n}\n\n/**\n * Allow explicit name and description props to override the fetched\n * data properties.\n * \n * @param props \n * @param data \n */\nexport function formatData<T extends FixedWidgetItemProps = FixedWidgetItemProps>(\n props: FixedWidgetProps<T>,\n data: BaseObject\n): WidgetData {\n const { name, description } = props;\n\n const overrideProps: WidgetData = {};\n\n if (Array.isArray(data))\n return { name, description };\n\n if (props.name) overrideProps.name = name;\n if (props.description) overrideProps.description = description;\n\n return { ...data, ...overrideProps };\n}\n\n/**\n * The functions below are used by the reducer to compute the number of widget items\n * displayed on the screen based on the media query, widget type, and total number of items.\n */\ntype ComputeFunction = (breakpoints: Breakpoints, type: WidgetType, itemCount: number) => number;\n\n/**\n * TODO:\n * This and the `WidgetType` enum need to be replaced entirely as this is no longer maintainable.\n * Each widget type + template combination should define it's own item count per\n * breakpoint and pass it in as props.\n */\nexport function getComputeFunction(contents: WidgetContents): ComputeFunction {\n switch (contents) {\n case WidgetContents.Playlists:\n return computeViewablePlaylists;\n\n case WidgetContents.Videos:\n return computeViewableVideos;\n\n case WidgetContents.RecentActivities:\n return computeViewableRecentActivities;\n\n case WidgetContents.FeedVideos:\n return computeViewableFeedVideos;\n\n case WidgetContents.Subjects:\n return computeViewableSubjects;\n\n case WidgetContents.InteractivesV2:\n return computeViewableInteractivesV2;\n\n case WidgetContents.Interactives:\n return computeViewableInteractives;\n\n case WidgetContents.ClipsV2:\n return computeViewableClipsV2;\n\n case WidgetContents.Clips:\n return computeViewableClips;\n\n case WidgetContents.PlayPageResources:\n return computeViewablePlayPageResources;\n\n case WidgetContents.PlayPageResourcesV2:\n return computeViewablePlayPageResourcesV2;\n\n case WidgetContents.DashboardResources:\n return computeViewableVideos;\n\n case WidgetContents.Libraries:\n case WidgetContents.Folders:\n return computeViewableLibraries;\n\n case WidgetContents.Ratings:\n return computeViewableRatings;\n \n case WidgetContents.SpecialEvents:\n return computeViewableSpecialEvents;\n\n case WidgetContents.Companies:\n return computeViewableCompanies;\n\n case WidgetContents.SmallSeries:\n return computeViewableSmallSeries;\n\n case WidgetContents.Series:\n default:\n return computeViewableSeries;\n }\n}\n\nfunction computeViewablePlaylists(breakpoints: Breakpoints, type: WidgetType, itemCount: number): number {\n let maxItems: number = 5;\n\n if (breakpoints.xs)\n maxItems = 2;\n else if (breakpoints.sm)\n maxItems = 3;\n else if (breakpoints.md)\n maxItems = 4;\n\n if (itemCount < maxItems)\n maxItems = itemCount;\n\n return maxItems;\n}\n\nfunction computeViewableCompanies(breakpoints: Breakpoints, type: WidgetType, itemCount: number): number {\n let maxItems: number = 8;\n\n if (breakpoints.xs || breakpoints.sm)\n maxItems = 4;\n else if (breakpoints.md)\n maxItems = 6;\n\n if (itemCount < maxItems)\n maxItems = itemCount;\n\n return maxItems;\n}\n\nfunction computeViewableLibraries(breakpoints: Breakpoints, type: WidgetType, itemCount: number): number {\n let maxItems: number = 3;\n\n if (breakpoints.xs || breakpoints.sm)\n maxItems = 1;\n else if (breakpoints.md)\n maxItems = 2;\n else if (breakpoints.lg)\n maxItems = 3;\n\n if (itemCount < maxItems)\n maxItems = itemCount;\n\n return maxItems;\n}\n\nfunction computeViewableVideos(breakpoints: Breakpoints, type: WidgetType, itemCount: number): number {\n let maxItems = 4;\n\n if (breakpoints.xs)\n maxItems = 1;\n\n if (breakpoints.sm)\n maxItems = 2;\n\n if (breakpoints.md || breakpoints.lg)\n maxItems = 3;\n\n if (type === WidgetType.LargeRow && maxItems > 3)\n maxItems = 3;\n \n if (itemCount < maxItems)\n maxItems = itemCount;\n\n return maxItems;\n}\n\nfunction computeViewableRecentActivities(breakpoints: Breakpoints, type: WidgetType, itemCount: number): number {\n let maxItems = 4;\n\n if (breakpoints.xs)\n maxItems = 2;\n\n if (breakpoints.sm)\n maxItems = 3;\n \n if (itemCount < maxItems)\n maxItems = itemCount;\n\n return maxItems;\n}\n\n// eslint-disable-next-line\nfunction computeViewableFeedVideos(breakpoints: Breakpoints, type: WidgetType, itemCount: number): number {\n return 1;\n}\n\nfunction computeViewableSubjects(breakpoints: Breakpoints, type: WidgetType, itemCount: number): number {\n if (type === WidgetType.LargeRow) {\n let maxItems: number = 5;\n\n if (breakpoints.xs)\n maxItems = 2;\n else if (breakpoints.sm)\n maxItems = 3;\n else if (breakpoints.md)\n maxItems = 4;\n\n if (itemCount < maxItems)\n maxItems = itemCount;\n\n return maxItems;\n }\n\n let maxItems: number = 6;\n\n if (breakpoints.xs)\n maxItems = 2;\n else if (breakpoints.sm)\n maxItems = 3;\n else if (breakpoints.md)\n maxItems = 4;\n else if (breakpoints.lg)\n maxItems = 5;\n else if (breakpoints.xl || breakpoints.xxl)\n maxItems = 6;\n\n if (itemCount < maxItems)\n maxItems = itemCount;\n\n return maxItems;\n}\n\nfunction computeViewableInteractives(breakpoints: Breakpoints, type: WidgetType, itemCount: number): number {\n let maxItems: number = 3;\n\n if (breakpoints.md || breakpoints.sm)\n maxItems = 2;\n\n if (breakpoints.xs)\n maxItems = 1;\n\n if (itemCount < Math.ceil(maxItems))\n maxItems = itemCount;\n\n return maxItems;\n}\n\nfunction computeViewableClips(breakpoints: Breakpoints, type: WidgetType, itemCount: number): number {\n let maxItems: number = 3;\n\n if (breakpoints.md || breakpoints.sm)\n maxItems = 2;\n\n if (breakpoints.xs)\n maxItems = 1;\n\n if (itemCount < Math.ceil(maxItems))\n maxItems = itemCount;\n\n return maxItems;\n}\n\nfunction computeViewableInteractivesV2(breakpoints: Breakpoints, type: WidgetType, itemCount: number): number {\n let maxItems: number = 3;\n \n if (breakpoints.xs)\n maxItems = 2;\n\n if (itemCount < maxItems)\n maxItems = itemCount;\n\n return maxItems;\n}\n\nfunction computeViewableClipsV2(breakpoints: Breakpoints, type: WidgetType, itemCount: number): number {\n let maxItems: number = 3;\n\n if (breakpoints.xs)\n maxItems = 2;\n\n if (itemCount < maxItems)\n maxItems = itemCount;\n\n return maxItems;\n}\n\nfunction computeViewablePlayPageResources(breakpoints: Breakpoints, type: WidgetType, itemCount: number): number {\n let maxItems: number = 4;\n \n if (breakpoints.sm)\n maxItems = 3;\n\n if (breakpoints.xs)\n maxItems = 2;\n\n if (itemCount < maxItems)\n maxItems = itemCount;\n\n return maxItems;\n}\n\nfunction computeViewablePlayPageResourcesV2(breakpoints: Breakpoints, type: WidgetType, itemCount: number): number {\n let maxItems: number = 3;\n\n if (breakpoints.xs)\n maxItems = 2;\n\n if (itemCount < maxItems)\n maxItems = itemCount;\n\n return maxItems;\n}\n\nfunction computeViewableSeries(breakpoints: Breakpoints, type: WidgetType, itemCount: number): number {\n let maxItems: number = 4;\n\n if (breakpoints.xs)\n maxItems = 2;\n else if (breakpoints.sm)\n maxItems = 3;\n\n if (itemCount < maxItems)\n maxItems = itemCount;\n\n return maxItems;\n}\n\nfunction computeViewableSmallSeries(breakpoints: Breakpoints, type: WidgetType, itemCount: number): number {\n let maxItems: number = 6;\n\n if (breakpoints.xs)\n maxItems = 2;\n else if (breakpoints.sm)\n maxItems = 3;\n else if (breakpoints.md)\n maxItems = 4;\n\n else if (breakpoints.lg)\n maxItems = 5;\n\n if (itemCount < maxItems)\n maxItems = itemCount;\n\n return maxItems;\n}\n\nfunction computeViewableRatings(breakpoints: Breakpoints, type: WidgetType, itemCount: number): number {\n if (itemCount < 4)\n return itemCount;\n\n let maxItems: number = 5;\n\n if (breakpoints.xs || breakpoints.sm)\n maxItems = 3;\n\n if (breakpoints.md || breakpoints.lg)\n maxItems = 4;\n\n if (itemCount === 4 && (breakpoints.xs || breakpoints.sm)) {\n maxItems = 3;\n }\n\n if (itemCount < maxItems)\n maxItems = itemCount;\n\n return maxItems;\n}\n\nfunction computeViewableSpecialEvents(breakpoints: Breakpoints, type: WidgetType, itemCount: number): number {\n let maxItems: number = 6;\n\n if (breakpoints.xs)\n maxItems = 2;\n\n if (breakpoints.sm)\n maxItems = 3;\n\n if (breakpoints.md)\n maxItems = 4;\n\n if (breakpoints.lg)\n maxItems = 5;\n\n if (breakpoints.xl || breakpoints.xxl)\n maxItems = 6;\n\n if (itemCount < maxItems)\n maxItems = itemCount;\n\n return maxItems;\n}\n\n/**\n * Touch event handlers\n */\nexport function getOnTouchStart(\n widgetState: FixedWidgetState,\n containerRef: React.MutableRefObject<HTMLDivElement>,\n containerWidth: number,\n setContainerWidth: React.Dispatch<number>,\n initialTouchX: number,\n setInitialTouchX: React.Dispatch<number>,\n setPercentageDragged: React.Dispatch<number>\n): (event: React.TouchEvent<HTMLDivElement>) => void {\n return function(event: React.TouchEvent<HTMLDivElement>): void {\n const firstTouch = event.touches.item(0);\n const touchX = firstTouch.clientX;\n\n /**\n * Runs only on the very first touch event.\n * \n * Sets the initial x-coordinate as a reference point to calculate how far the user has dragged before\n * they release their finder\n */\n if (!initialTouchX) {\n containerRef.current.style.transition = '';\n\n setContainerWidth(containerRef.current.getBoundingClientRect().width);\n setInitialTouchX(touchX);\n }\n\n const pixelsDragged = initialTouchX - touchX;\n\n // Calculate how far the user has moved their finger as a percentage of the widget's container element\n let currentPercentageDragged = ((pixelsDragged / containerWidth) * 100);\n\n /**\n * These 2 if statements prevent the user from dragging the widget beyond its limits.\n * One if statement handles if they have dragged to the left, and the other is for dragging to the right.\n * \n * The same logic is used to hide the widget buttons (see the `hide` prop passed to `<WidgetButton />`)\n */\n if (currentPercentageDragged < 0 && (widgetState.offset === widgetState.viewableItems))\n currentPercentageDragged = 0;\n\n else if (currentPercentageDragged > 0 && (widgetState.offset === widgetState.totalItems))\n currentPercentageDragged = 0;\n\n setPercentageDragged(currentPercentageDragged);\n };\n}\n\nconst DRAG_TOLERANCE = 7.5; // % of container width using to trigger a transition.\n\nexport function getOnTouchEnd(\n containerRef: React.MutableRefObject<HTMLDivElement>,\n setInitialTouchX: React.Dispatch<number>,\n percentageDragged: number,\n setPercentageDragged: React.Dispatch<number>,\n dispatch: React.Dispatch<ReducerActions<WidgetInteraction, FixedWidgetPayload>>,\n onNext: () => void,\n onPrevious: () => void\n): () => void {\n return function(): void {\n containerRef.current.style.transition = 'transform .4s ease-in-out';\n setInitialTouchX(null);\n\n /**\n * Only trigger a Next/Previous widget event if the user has dragged beyond DRAG_TOLERANCE% either way of the\n * container's width. This means if the user only drags left/right a tiny little bit, the widget\n * will simply slide back into its original place.\n */\n if (Math.abs(percentageDragged) >= DRAG_TOLERANCE) {\n const reducerAction = percentageDragged > 0 ? WidgetInteraction.Next : WidgetInteraction.Previous;\n\n dispatch({\n type: reducerAction\n });\n\n if (percentageDragged > 0 && onNext) {\n onNext();\n } else if (percentageDragged < 0 && onPrevious) {\n onPrevious();\n }\n }\n\n setPercentageDragged(0);\n };\n}\n\nexport function hideBackButton(\n isHoveringOnFarLeft: boolean,\n isHoveringOnWidget: boolean,\n widgetOffset: number,\n maxViewableItems: number,\n widgetCollectionSize: number\n): boolean {\n // When hovering on the very far left widget item, hide the back button\n if (isHoveringOnFarLeft)\n return true;\n\n // if the collection size is smaller than the max viewable items, hide the back button\n if (widgetCollectionSize <= maxViewableItems)\n return true;\n\n // When hovering on the entire widget area, hide the back button if the widget is in the far left position\n if (isHoveringOnWidget)\n return widgetOffset === maxViewableItems;\n\n return true;\n}\n\nexport function hideNextButton(\n isHoveringOnFarRight: boolean,\n isHoveringOnWidget: boolean,\n widgetOffset: number,\n maxViewableItems: number,\n widgetCollectionSize: number,\n showSeeMoreButton: boolean\n): boolean {\n // When hovering on the very far right widget item, hide the next button\n if (isHoveringOnFarRight)\n return true;\n\n // if the collection size is smaller than the max viewable items, hide the next button\n if (widgetCollectionSize <= maxViewableItems)\n return true;\n\n // Always show the next button if the widget is in the far left position\n if (widgetOffset === maxViewableItems)\n return false;\n\n // When the user is hovering over the entire widget area...\n if (isHoveringOnWidget) {\n // If we want to show the \"See more\" button, don't hide the next button\n if (showSeeMoreButton)\n return false;\n\n // Only show the next button if there are still more items to show\n return widgetCollectionSize <= widgetOffset;\n }\n\n return true;\n}\n\nexport interface FixedWidgetControls {\n jumpToIndex: (index: number) => void;\n}\n\n/**\n * If a component consuming FixedWidget needs to dispatch events to FixedWidget,\n * it can pass in a `controlsRef` prop, which will receive the API defined\n * below. This API can be extended as needed.\n * See FeedVideoCollection.tsx for an example\n */\nexport function useControlsRef(\n ref: React.MutableRefObject<FixedWidgetControls>,\n dispatch: React.Dispatch<ReducerActions<WidgetInteraction, FixedWidgetPayload>>\n): void {\n React.useEffect(() => {\n if (!ref || ref.current)\n return;\n\n ref.current = {\n jumpToIndex: (index: number) => dispatch({\n type: WidgetInteraction.JumpToIndex,\n payload: {\n offset: index + 1\n }\n })\n };\n }, [ref?.current]);\n}","import * as React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nimport styles from './fixed-widget.scss';\n\nfunction useGetSize(size?: 'sm' | 'lg'): HashObject {\n const breakpoints = useBreakpoints();\n\n if (breakpoints.xs)\n return {\n itemCount: 1,\n colSize: 12\n };\n\n if (breakpoints.sm)\n return {\n itemCount: 2,\n colSize: 6\n };\n\n if (breakpoints.md || breakpoints.lg)\n return {\n itemCount: 3,\n colSize: 4\n };\n\n return {\n itemCount: size === 'sm' ? 4 : 3,\n colSize: size === 'sm' ? 3 : 4\n };\n}\n\nexport interface PartialFixedWidgetItemProps {\n colSize: number;\n}\n\nconst PartialLoadingItem = ({ colSize }: PartialFixedWidgetItemProps) => (\n <div className={`col-${colSize} px-1`}>\n <div className={`${styles.partialItem} partial-loading-background rounded-3`} />\n </div>\n);\n\nexport interface PartialFixedWidgetProps {\n hideDescription?: boolean;\n hideHeading?: boolean;\n size?: 'sm' | 'lg';\n childComponent?: (props: PartialFixedWidgetItemProps) => JSX.Element;\n}\n\nPartialFixedWidget.defaultProps = {\n size: 'sm',\n childComponent: PartialLoadingItem\n};\n\nexport function PartialFixedWidget(props: PartialFixedWidgetProps): JSX.Element {\n const { itemCount, colSize } = useGetSize(props.size);\n\n const ChildComponent = props.childComponent;\n\n const items = [];\n for (let i = 0; i < itemCount; i++) {\n items.push(<ChildComponent key={i} colSize={colSize} />);\n }\n\n return (\n <div className='widget'>\n <PartialWidgetHeader hideHeading={props.hideHeading} hideDescription={props.hideDescription} />\n <div className='row g-0 mx-n1'>\n {items}\n </div>\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 WidgetContents {\n Videos = 'videos',\n FeedVideos = 'feed videos',\n Series = 'series',\n Subjects = 'subjects',\n Playlists = 'playlists',\n Interactives = 'interactives',\n Clips = 'clips',\n PlayPageResources = 'play page resources',\n DashboardResources = 'dashboard resources',\n Libraries = 'Libraries',\n Folders = 'Folders',\n RecentActivities = 'recent activities',\n SmallSeries = 'small series',\n Companies = 'companies',\n Ratings = 'ratings',\n SpecialEvents = 'special events',\n\n InteractivesV2 = 'interactives v2',\n ClipsV2 = 'clips v2',\n PlayPageResourcesV2 = 'playpage resources v2'\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}","// extracted by mini-css-extract-plugin\nexport default {\"rightOverflowGradient\":\"tAbzW\",\"leftOverflowGradient\":\"JXtNs\",\"partialItem\":\"iNH_I\",\"mobileScroll\":\"bDcOS\"};"],"names":["getPhrase","LanguageService","SeeMore","props","className","AppLink","appLink","analyticsData","analyticsOptions","descriptor","WidgetHeader","hasDescription","description","name","onClick","showSeeMoreLink","PartialWidgetHeader","hideDescription","hideHeading","style","height","width","namespace","WIDGET_ITEM_LIMIT","FixedWidget","getWidgetItemAnalyticsData","initialTouchX","setInitialTouchX","containerWidth","setContainerWidth","percentageDragged","setPercentageDragged","state","dispatch","containerRef","buttonsRef","isHovering","isHoveringOnFarLeft","setIsHoveringOnFarLeft","isHoveringOnFarRight","setIsHoveringOnFarRight","controlsRef","prevent","lazyLoad","ref","shouldFetch","inView","response","getWidgetCollection","limit","responseData","prefetched","collection","data","formattedResponse","setData","slice","widgetItems","limitTotalItems","Infinity","hasReachedEnd","offset","length","breakpoints","shouldScroll","touchBehavior","type","payload","contents","totalItems","widgetContext","collectionSize","hasError","PartialComponent","partialComponent","minimumItemCount","WidgetItemComponent","childComponent","getSliderAnalyticsData","id","direction","showSeeMoreButton","hideButtons","hideBackGradient","viewableItems","hideNextGradient","hasMoreThanViewable","hideName","hideBleedingContent","W","onPrevious","hide","leftWidgetButtonClassName","hideExtendedClickableArea","position","positionType","C","onTouchMove","onTouchEnd","onNext","map","widgetItem","index","key","collectionAppLink","getAppLink","getChildAppLink","context","preloadImage","thumbnailSize","widgetId","widgetName","itemIndex","onHover","hovering","window","setTimeout","onSetIsHovering","extraChildComponentProps","hoverText","rightWidgetButtonClassName","defaultProps","initialWidgetState","computeNextPosition","prevState","remainingCount","computePreviousPosition","FixedWidgetReducer","action","initialSeen","computeViewableItems","lazyWidgetInit","newState","useFetchData","res","fetch","collectionToDisplay","getShouldPreload","maxLoadedIndex","indicesToPreload","i","push","indexOf","includes","getCollectionAppLink","args","formatData","overrideProps","Array","isArray","getComputeFunction","computeViewablePlaylists","computeViewableVideos","computeViewableRecentActivities","computeViewableFeedVideos","computeViewableSubjects","computeViewableInteractivesV2","computeViewableInteractives","computeViewableClipsV2","computeViewableClips","computeViewablePlayPageResources","computeViewablePlayPageResourcesV2","computeViewableLibraries","computeViewableRatings","computeViewableSpecialEvents","computeViewableCompanies","computeViewableSmallSeries","computeViewableSeries","itemCount","maxItems","xs","sm","md","lg","xl","xxl","Math","ceil","getOnTouchStart","widgetState","event","touchX","touches","item","clientX","current","transition","getBoundingClientRect","currentPercentageDragged","DRAG_TOLERANCE","getOnTouchEnd","abs","reducerAction","hideBackButton","isHoveringOnWidget","widgetOffset","maxViewableItems","widgetCollectionSize","hideNextButton","useControlsRef","jumpToIndex","PartialFixedWidget","size","colSize","ChildComponent","items","blankImage","Image","src","DragHelper","dataTransfer","setDragImage","FunctionHelper","isTouchScreen","UserAgentHelper","SlidingListContainer","listenerProps","xPosition","measurement","dragPercentage","children","onDrag","onDragEnd","CssMeasurement","transform","draggable","onDragStart","onDragOver","onTouchMoveCapture","onTouchEndCapture","WidgetButtonDirection","WidgetButton","isLeft","Left","arrowSvg","paddingBottom","useGradientBackdrop","leftGradientClassName","rightGradientClassName","role","leftButtonClassName","rightButtonClassName","SvgContainer","svgName","S","WidgetContents","WidgetInteraction"],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- (self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[1798],{16930:(e,t,n)=>{"use strict";n.d(t,{W:()=>s,f:()=>i});var a=n(32735),r=n(83914),o=n(35223);const c="VSAPU",l="kgeXh";var i;!function(e){e[e.Left=0]="Left",e[e.Right=1]="Right"}(i||(i={}));var s=a.memo((function(e){var t,n,s,u=e.direction===i.Left,d=u?o.vn.ChevronLeft:o.vn.ChevronRight;return e.hide?a.createElement(a.Fragment,null):a.createElement("div",{className:"_ejId",style:"videos"===(null===(n=e.state)||void 0===n?void 0:n.contents)?{paddingBottom:56.25/(null===(s=e.state)||void 0===s?void 0:s.viewableItems)+"%"}:{height:"100%"}},e.useGradientBackdrop&&a.createElement("div",{className:u?"".concat("Pt3nx"," ").concat(e.leftGradientClassName):"".concat("ZuAif"," ").concat(e.rightGradientClassName)}),!e.hideExtendedClickableArea&&a.createElement("div",{role:"button",onClick:e.onClick,className:"".concat("AtsWP"," ").concat(u?c:l)}),a.createElement("div",{role:"button",className:"".concat((t="BVcIS",t+=u?" ".concat(c," ").concat(e.leftButtonClassName):" ".concat(l," ").concat(e.rightButtonClassName))," ").concat("gAsE9"," ").concat(e.className||""),onClick:e.onClick},e.hoverText&&a.createElement("span",{className:"ps-3 pe-2 ".concat("APA36")},e.hoverText),a.createElement(r.x,{svgName:d,size:r.S.Medium,className:"svg-container d-inline-block ".concat("Ev4hr")})))}))},74237:(e,t,n)=>{"use strict";n.d(t,{T:()=>l});var a=n(97395),r=n(49985),o=n(65858),c=null,l={getVideoDownloadUrl:function(e,t){return a._.safeUrlConcat(a._.makeHttps(e),"/download?token=".concat(t))},downloadResource:function(e,t,n){var a,l=c;c||(l=c=document.createElement("iframe"),document.body.appendChild(l),l.style.display="none"),l.src=e.url,r.k.logUserAction(Object.assign({id:null==e?void 0:e.id,name:null==e?void 0:e.name,resourceType:null===(a=null==e?void 0:e.metadata)||void 0===a?void 0:a.resourceType},t),Object.assign({actionType:o.Vw.Download,entity:o.py.Resource,workflowPhase:o.eu.Complete},n))}}},34236:(e,t,n)=>{"use strict";n.r(t),n.d(t,{PreviewPdfView:()=>j});var a=n(32735),r=n(51354),o=n(17327),c=n.n(o),l=n(97395),i=n(20354),s=n(49985),u=n(65858),d=n(10874),m=n(9111),v=n(50023),f=n(83914),p=n(83345),g=n(16930),h=n(1164),y=n(99940),E=n(45157),b={resource:function(e){return{url:"/api/domain/v2/objects/".concat(e),key:"resources:".concat(e)}},publicResource:function(e,t){var n="/api/objects/".concat(e);return t&&(n+="?shareId=".concat(t)),{url:n,key:"resources:".concat(e,":").concat(t)}},videoResources:function(e){return{url:"/api/domain/v2/objects/".concat(e,"/resources?query=customer"),key:"videos:".concat(e,":resources")}},addResource:function(e,t,n,a,r){return{url:"/api/domain/v2/objects/".concat(e,"/resources"),key:"create:resource:".concat(t.fileId||E.Y.getRandomInt()),data:t,type:y.k.POST,invalidationKeys:"videos:".concat(e,":resources"),success:n,error:a,always:r}},updateResource:function(e,t,n,a,r){return{url:"/api/domain/v2/objects/".concat(e),key:"update:resource:".concat(e),data:t,type:y.k.PUT,success:n,error:a,always:r}},deleteResource:function(e,t,n,a,r){return{url:"/api/domain/v2/objects/".concat(e),key:"delete:resource:".concat(e),type:y.k.DELETE,invalidationKeys:"videos:".concat(t,":resources"),success:n,error:a,always:r}}},w=n(1575),k=n(74237),N=n(35223);const C={document:"frWZr",page:"BxRha",documentError:"swyjp",buttonLeft:"mVvyw",buttonRight:"XSAEx"};function I(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,o,c,l=[],i=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;i=!1}else for(;!(i=(a=o.call(n)).done)&&(l.push(a.value),l.length!==t);i=!0);}catch(e){s=!0,r=e}finally{try{if(!i&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(s)throw r}}return l}}(e,t)||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,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 R(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var L=80,x="shared.previewPdf";function S(e){var t,n,a;return e?(null===(t=e.metadata)||void 0===t?void 0:t.type)===h.L.Pdf||(null===(n=e.metadata)||void 0===n?void 0:n.type)===h.L.Image?e.url:null===(a=e.pdf)||void 0===a?void 0:a.url:null}function P(e){return a.createElement("div",{className:"d-flex flex-column align-items-center justify-content-center"},a.createElement("img",{alt:"",role:"presentation",src:e.errorImageUrl,className:"w-50 pb-3"}),a.createElement("h2",{className:"h5"},a.createElement(p.x,{namespace:x,phrase:"errorHeading"})),a.createElement("p",null,a.createElement(p.x,{namespace:x,phrase:"downloadAnyway"})),a.createElement(d.h,{svgName:N.vn.Download,onClick:e.onClickDownload,className:"btn btn-dark"},a.createElement(p.x,{namespace:x,phrase:"download"})))}function j(e){var t,n,o,d=I(a.useState(null),2),y=d[0],E=d[1],R=I(a.useState(1),2),j=R[0],A=R[1],B=I(a.useState(!1),2),T=B[0],U=B[1],D=a.useRef(null),V=i.a.useBasicFetch(b.publicResource(e.id,e.shareId)),_=i.a.useBasicFetch(e.shareId?w.R.sharedVideo(e.videoId,e.shareId):w.R.video(e.videoId));function O(e){var t,n,a;!function(e){if(D.current){var t=D.current.style.height;e>+t.substring(0,t.length-2)&&(D.current.style.height=e+"px")}}(e.height),(t=e.width)>+(a=(n=document.getElementsByClassName("modal-dialog")[0]).style.width).substring(0,a.length-2)&&(n.style.width=t+L+"px"),n.style.maxWidth="100%"}function W(e){E(e.numPages)}function F(){j===y||T||A(j+1)}function z(){1===j||T||A(j-1)}function G(){var e,t;k.T.downloadResource(V.data,{videoId:null===(e=_.data)||void 0===e?void 0:e.id,videoName:null===(t=_.data)||void 0===t?void 0:t.name},{location:u.LZ.Popup})}return a.createElement(m.G,{title:null!==(n=null===(t=V.data)||void 0===t?void 0:t.name)&&void 0!==n?n:"",showLoadingSpinner:!V.data,size:"lg",closePopup:e.closePopup,headerButtons:(o=[{svgName:N.vn.Download,onClick:G,className:"btn btn-link me-2",svgSize:f.S.Large}],T||o.push({svgName:N.vn.Print,onClick:function(){var e;T||(c()(l._.urlBuilder(S(V.data),{dl:"false"}),V.data.metadata.type===h.L.Image?"image":"pdf"),s.k.logUserAction({id:null===(e=V.data)||void 0===e?void 0:e.id},{location:u.LZ.Popup,actionType:u.Vw.Print,entity:u.py.Resource,workflowPhase:u.eu.Complete}))},className:"btn btn-link",svgSize:f.S.Large}),o)},function(){var t;return V.data?(null===(t=V.data.metadata)||void 0===t?void 0:t.type)===h.L.Image?a.createElement("div",{className:"d-flex justify-content-center w-100 h-100"},a.createElement("img",{alt:V.data.name,className:"img-fluid",src:S(V.data)})):a.createElement(a.Fragment,null,a.createElement(r.BB,{file:S(V.data),className:"".concat(C.document," ").concat(T?C.documentError:""),onLoadSuccess:W,onLoadError:function(){return U(!0)},error:function(){return a.createElement(P,{onClickDownload:G,errorImageUrl:e.errorImageUrl})},loading:v.E},a.createElement(r.T3,{pageNumber:j,loading:v.E,inputRef:function(e){return D.current=e},className:"".concat(C.page," d-flex justify-content-center position-relative"),onLoadSuccess:O,onLoadError:function(){return U(!0)},error:function(){return a.createElement(P,{onClickDownload:G,errorImageUrl:e.errorImageUrl})}}),a.createElement(g.W,{onClick:z,direction:g.f.Left,hide:T||1===j,className:C.buttonLeft}),a.createElement(g.W,{onClick:F,direction:g.f.Right,hide:T||j===y,className:C.buttonRight})),!(!(y&&y>1)||T)&&a.createElement("p",{className:"mt-3 text-center"},a.createElement(p.x,{namespace:x,phrase:"pageNumber",options:{current:j,total:y}}))):a.createElement(a.Fragment,null)}())}},90502:()=>{},98530:()=>{},74042:()=>{},88312:()=>{},81465:()=>{}}]);
2
- //# sourceMappingURL=1798-972b0f3769-lite.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/1798-972b0f3769-lite.chunk.js","mappings":"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","sources":["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/utils/DownloadHelper.ts","file:///app/packages/libs/shared/src/flight-requests/ResourceRequests.ts","file:///app/packages/libs/shared/src/views/preview-pdf/preview-pdf.scss","file:///app/packages/libs/shared/src/views/preview-pdf/PreviewPdfView.tsx"],"sourcesContent":["// 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});","import { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, EntityType, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { Resource } from '../interfaces';\n\nlet downloadRef: HTMLIFrameElement = null;\n\nexport const DownloadHelper = {\n getVideoDownloadUrl(downloadProxyUrl: string, token: string): string {\n return UrlHelper.safeUrlConcat(UrlHelper.makeHttps(downloadProxyUrl), `/download?token=${token}`);\n },\n\n downloadResource(\n resource: Resource,\n analyticsData: HashObject,\n analyticsOptions: AnalyticsOptions\n ): void {\n let iframe = downloadRef;\n\n if (!downloadRef) {\n iframe = downloadRef = document.createElement('iframe');\n document.body.appendChild(iframe);\n\n iframe.style.display = 'none';\n }\n\n iframe.src = resource.url;\n\n AnalyticsHelper.logUserAction({\n id: resource?.id,\n name: resource?.name,\n resourceType: resource?.metadata?.resourceType,\n ...analyticsData\n }, {\n actionType: UserAction.Download,\n entity: EntityType.Resource,\n workflowPhase: WorkflowPhase.Complete,\n ...analyticsOptions\n });\n }\n};","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Xhr } from 'libs/common/backbone/interfaces/Xhr';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\nimport { RandomHelper } from 'libs/common/react/utils/RandomHelper';\n\nimport { UpdateResourceRequest } from 'libs/shared/interfaces';\n\nexport const ResourceRequests = {\n resource(id: string): Flight.Request {\n return {\n url: `/api/domain/v2/objects/${id}`,\n key: `resources:${id}`\n };\n },\n\n /**\n * Used to fetch resources publicly by Lite\n */\n publicResource(id: string, shareId?: string): Flight.Request {\n let url = `/api/objects/${id}`;\n\n if (shareId)\n url += `?shareId=${shareId}`;\n\n return {\n url,\n key: `resources:${id}:${shareId}`\n };\n },\n\n videoResources(videoId: string): Flight.Request {\n return {\n url: `/api/domain/v2/objects/${videoId}/resources?query=customer`,\n key: `videos:${videoId}:resources`\n };\n },\n\n addResource(\n videoId: string,\n resource: any,\n success?: (data: HashObject) => void,\n error?: (xhr: Xhr) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: `/api/domain/v2/objects/${videoId}/resources`,\n key: `create:resource:${resource.fileId || RandomHelper.getRandomInt()}`,\n data: resource,\n type: HttpVerbs.POST,\n invalidationKeys: `videos:${videoId}:resources`,\n success,\n error,\n always\n };\n },\n\n updateResource(\n id: string,\n data: UpdateResourceRequest,\n success?: (data: HashObject) => void,\n error?: (xhr: Xhr) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: `/api/domain/v2/objects/${id}`,\n key: `update:resource:${id}`,\n data,\n type: HttpVerbs.PUT,\n success,\n error,\n always\n };\n },\n\n deleteResource(\n id: string,\n videoId: string,\n success?: (data: HashObject) => void,\n error?: (xhr: Xhr) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: `/api/domain/v2/objects/${id}`,\n key: `delete:resource:${id}`,\n type: HttpVerbs.DELETE,\n invalidationKeys: `videos:${videoId}:resources`,\n success,\n error,\n always\n };\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"document\":\"frWZr\",\"page\":\"BxRha\",\"documentError\":\"swyjp\",\"buttonLeft\":\"mVvyw\",\"buttonRight\":\"XSAEx\"};","import React from 'react';\nimport { Document, Page } from 'react-pdf/dist/esm/entry.webpack';\nimport { PDFPageProxy } from 'react-pdf/dist/Page';\nimport { PDFDocumentProxy } from 'pdfjs-dist';\nimport printJS from 'print-js';\n\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { HeaderButton, Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupLoadingSpinner } from 'libs/shared/components/popup/PopupLoadingSpinner';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { WidgetButton, WidgetButtonDirection } from 'libs/shared/components/widgets/widget-button/WidgetButton';\nimport { ResourceFileType } from 'libs/shared/enums/ResourceFileType';\nimport { ResourceRequests } from 'libs/shared/flight-requests/ResourceRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { PopupViewProps, Resource, Video } from 'libs/shared/interfaces';\nimport { DownloadHelper } from 'libs/shared/utils/DownloadHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './preview-pdf.scss';\n\nconst MODAL_CONTENT_X_PADDING = 80; // Total padding within the modal along the X axis in px\n\nconst namespace = 'shared.previewPdf';\n\nfunction getPreviewUrl(resource: Resource): string {\n if (!resource)\n return null;\n\n if (resource.metadata?.type === ResourceFileType.Pdf || resource.metadata?.type === ResourceFileType.Image)\n return resource.url;\n\n return resource.pdf?.url;\n}\n\nfunction PreviewPdfError(props: { onClickDownload: () => void, errorImageUrl: string }): JSX.Element {\n return (\n <div className='d-flex flex-column align-items-center justify-content-center'>\n <img\n alt=''\n role='presentation'\n src={props.errorImageUrl}\n className='w-50 pb-3'\n />\n\n <h2 className='h5'><Text namespace={namespace} phrase='errorHeading' /></h2>\n <p><Text namespace={namespace} phrase='downloadAnyway' /></p>\n <IconButton\n svgName={cvSvgLibrary.Download}\n onClick={props.onClickDownload}\n className='btn btn-dark'\n >\n <Text namespace={namespace} phrase='download' />\n </IconButton>\n </div>\n );\n}\n\ntype PreviewPdfViewProps = PopupViewProps & {\n id: string;\n videoId: string;\n shareId?: string;\n errorImageUrl: string;\n};\n\nexport function PreviewPdfView(props: PreviewPdfViewProps): JSX.Element {\n const [ numPages, setNumPages ] = React.useState(null);\n const [ pageNumber, setPageNumber ] = React.useState(1);\n const [ hasError, setHasError ] = React.useState(false);\n\n const pageRef = React.useRef<HTMLDivElement>(null);\n\n /**\n * Fetching the public resource because resources can be viewed on publicly shared links.\n */\n const resource = Flight.useBasicFetch<Resource>(ResourceRequests.publicResource(props.id, props.shareId));\n\n /**\n * Only used for event collection, we need the video's name\n */\n const video = Flight.useBasicFetch<Video>(props.shareId ?\n VideoRequests.sharedVideo(props.videoId, props.shareId) :\n VideoRequests.video(props.videoId));\n\n /**\n * Set a height on the preview container element.\n * This is needed because when the user changes pages, the popup momentarily shrinks in height\n * until it has finished loading the next page. This prevents that shrink from occurring.\n */\n function setCanvasHeight(currentPreviewHeight: number): void {\n if (!pageRef.current)\n return;\n\n const currentHeightStyle = pageRef.current.style.height;\n const currentHeightStyleNumber = +(currentHeightStyle.substring(0, currentHeightStyle.length - 2));\n\n if (currentPreviewHeight > currentHeightStyleNumber)\n pageRef.current.style.height = currentPreviewHeight + 'px';\n }\n\n /**\n * Shrink or expand the width of the modal to match the width of the resource being previewed.\n * This is necessary to ensure the preview always looks good.\n */\n function setModalWidth(currentPreviewWidth: number): void {\n const modal = document.getElementsByClassName('modal-dialog')[0] as HTMLDivElement;\n\n const currentWidthStyle = modal.style.width;\n const currentWidthStyleNumber = +(currentWidthStyle.substring(0, currentWidthStyle.length - 2));\n\n // If the documents new width is smaller than the modal's current width style, we don't shrink it down again\n // so as not to be too jarring.\n if (currentPreviewWidth > currentWidthStyleNumber)\n modal.style.width = currentPreviewWidth + MODAL_CONTENT_X_PADDING + 'px';\n\n modal.style.maxWidth = '100%';\n }\n\n /**\n * The shrink / expand logic has been written to closely resemble the logic of Facebook's photo\n * viewing modal, which also expands to fit the size of the largest image.\n */\n function onPageLoadSuccess(data: PDFPageProxy): void {\n setCanvasHeight(data.height);\n setModalWidth(data.width);\n }\n\n function onDocumentLoadSuccess(doc: PDFDocumentProxy): void {\n setNumPages(doc.numPages);\n }\n\n function onClickNext(): void {\n if (pageNumber === numPages || hasError)\n return;\n\n setPageNumber(pageNumber + 1);\n }\n\n function onClickPrevious(): void {\n if (pageNumber === 1 || hasError)\n return;\n\n setPageNumber(pageNumber - 1);\n }\n\n function onClickPrint(): void {\n if (hasError)\n return;\n\n printJS(\n UrlHelper.urlBuilder(getPreviewUrl(resource.data), { dl: 'false' }),\n resource.data.metadata.type === ResourceFileType.Image ? 'image' : 'pdf'\n );\n\n AnalyticsHelper.logUserAction({ id: resource.data?.id }, {\n location: LocationContext.Popup,\n actionType: UserAction.Print,\n entity: EntityType.Resource,\n workflowPhase: WorkflowPhase.Complete\n });\n }\n \n function onClickDownload(): void {\n DownloadHelper.downloadResource(\n resource.data,\n { videoId: video.data?.id, videoName: video.data?.name },\n { location: LocationContext.Popup }\n );\n }\n\n function getHeaderButtons(): HeaderButton[] {\n const buttons = [{\n svgName: cvSvgLibrary.Download,\n onClick: onClickDownload,\n className: 'btn btn-link me-2',\n svgSize: SvgContainerSize.Large\n }];\n\n if (!hasError) {\n buttons.push({\n svgName: cvSvgLibrary.Print,\n onClick: onClickPrint,\n className: 'btn btn-link',\n svgSize: SvgContainerSize.Large\n });\n }\n\n return buttons;\n }\n\n return (\n <Popup\n title={resource.data?.name ?? ''}\n showLoadingSpinner={!resource.data}\n size='lg'\n closePopup={props.closePopup}\n headerButtons={getHeaderButtons()}\n >\n {(() => {\n if (!resource.data)\n return <></>;\n\n if (resource.data.metadata?.type === ResourceFileType.Image)\n return (\n <div className='d-flex justify-content-center w-100 h-100'>\n <img alt={resource.data.name} className='img-fluid' src={getPreviewUrl(resource.data)} />\n </div>\n );\n\n return (\n <>\n <Document\n file={getPreviewUrl(resource.data)}\n className={`${styles.document} ${hasError ? styles.documentError : ''}`}\n onLoadSuccess={onDocumentLoadSuccess}\n onLoadError={() => setHasError(true)}\n error={() => <PreviewPdfError onClickDownload={onClickDownload} errorImageUrl={props.errorImageUrl} />}\n loading={PopupLoadingSpinner}\n >\n <Page\n pageNumber={pageNumber}\n loading={PopupLoadingSpinner}\n inputRef={ref => pageRef.current = ref}\n className={`${styles.page} d-flex justify-content-center position-relative`}\n onLoadSuccess={onPageLoadSuccess}\n onLoadError={() => setHasError(true)}\n error={() => <PreviewPdfError onClickDownload={onClickDownload} errorImageUrl={props.errorImageUrl} />}\n />\n <WidgetButton\n onClick={onClickPrevious}\n direction={WidgetButtonDirection.Left}\n hide={hasError || pageNumber === 1}\n className={styles.buttonLeft}\n />\n <WidgetButton\n onClick={onClickNext}\n direction={WidgetButtonDirection.Right}\n hide={hasError || pageNumber === numPages}\n className={styles.buttonRight}\n />\n </Document>\n {!!(numPages && numPages > 1 && !hasError) && (\n <p className='mt-3 text-center'>\n <Text\n namespace={namespace}\n phrase='pageNumber'\n options={{\n current: pageNumber,\n total: numPages\n }}\n />\n </p>\n )}\n </>\n );\n })()}\n </Popup>\n );\n}\n"],"names":["WidgetButtonDirection","WidgetButton","props","className","isLeft","direction","Left","arrowSvg","hide","style","state","contents","paddingBottom","viewableItems","height","useGradientBackdrop","leftGradientClassName","rightGradientClassName","hideExtendedClickableArea","role","onClick","leftButtonClassName","rightButtonClassName","hoverText","SvgContainer","svgName","size","S","downloadRef","DownloadHelper","getVideoDownloadUrl","downloadProxyUrl","token","downloadResource","resource","analyticsData","analyticsOptions","iframe","document","createElement","body","appendChild","display","src","url","id","name","resourceType","metadata","actionType","entity","workflowPhase","ResourceRequests","key","publicResource","shareId","videoResources","videoId","addResource","success","error","always","fileId","RandomHelper","data","type","HttpVerbs","invalidationKeys","updateResource","deleteResource","MODAL_CONTENT_X_PADDING","namespace","getPreviewUrl","ResourceFileType","pdf","PreviewPdfError","alt","errorImageUrl","Text","phrase","IconButton","onClickDownload","PreviewPdfView","buttons","numPages","setNumPages","pageNumber","setPageNumber","hasError","setHasError","pageRef","video","VideoRequests","onPageLoadSuccess","currentPreviewWidth","modal","currentWidthStyle","currentPreviewHeight","current","currentHeightStyle","substring","length","setCanvasHeight","width","getElementsByClassName","maxWidth","onDocumentLoadSuccess","doc","onClickNext","onClickPrevious","videoName","location","Popup","title","showLoadingSpinner","closePopup","headerButtons","svgSize","push","UrlHelper","dl","AnalyticsHelper","file","onLoadSuccess","onLoadError","loading","PopupLoadingSpinner","inputRef","ref","W","options","total"],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[2120],{1353:(e,t,n)=>{n.d(t,{$:()=>s});var a=n(32735),r=n(23481),c=n(11607),l=n(54610),i=n(67453),o=n(22161),u=r.T.encloseNamespace("shared.curriculumLinks");function s(e){var t=e.data;return a.createElement(c.L,{key:t.id,className:"p-1 pe-2 rounded-pill d-inline-flex align-items-center cursor-pointer ".concat(o.Z.tag," ").concat(e.selected?o.Z.selected:""),onClick:function(){return e.onChangeCurriculum(t.id.toString())},"aria-label":"".concat(u("ariaFilter")," ").concat(t.name)},a.createElement("div",{className:"bg-white ".concat(o.Z.cover," rounded-circle border")},a.createElement("img",{src:i.j.createUrl(t.cover.url,{size:l.h2.Small}),alt:t.name,className:"rounded-circle"})),a.createElement("div",{className:"ms-2"},t.name))}},93439:(e,t,n)=>{n.d(t,{h:()=>b});var a=n(32735),r=n(44599),c=n(83345),l=n(85597),i=n(54610),o=n(67453),u=n(38496),s=n(22161);function m(e){return m="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},m(e)}function d(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=m(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,"string");if("object"!=m(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==m(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function f(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,c,l,i=[],o=!0,u=!1;try{if(c=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;o=!1}else for(;!(o=(a=c.call(n)).done)&&(i.push(a.value),i.length!==t);o=!0);}catch(e){u=!0,r=e}finally{try{if(!o&&null!=n.return&&(l=n.return(),Object(l)!==l))return}finally{if(u)throw r}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return p(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?p(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function p(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var v=/(.*)\s\((.*)?\)/i,g="shared.curriculumLinks",h="text-nowrap font-size-normal rounded-pill py-1 px-2 my-0 d-inline-block";function E(e){function t(){var t=h+" bg-white border";return!e.leaf.name&&e.uiContainsCodes?t+" border-secondary text-secondary":t+" border-dark"}var n=a.useRef();return a.useEffect((function(){if(n.current){var t=n.current.getBoundingClientRect().width;e.trySetMaxCodeWidth(t)}}),[n.current]),a.createElement("div",{className:"d-flex"},e.leaf.description?!e.leaf.name&&e.uiContainsCodes?a.createElement(a.Fragment,null,a.createElement("div",{className:"me-1 align-self-start",style:{minWidth:e.codeWidth?"".concat(e.codeWidth,"px"):"auto"}},a.createElement("h5",{ref:n,className:t()},a.createElement(c.x,{namespace:g,phrase:"noCode"}))),a.createElement("p",{className:"m-0 align-self-center",dangerouslySetInnerHTML:{__html:e.leaf.description}})):e.leaf.name||e.uiContainsCodes?a.createElement(a.Fragment,null,a.createElement("div",{className:"me-1 align-self-start",style:{minWidth:e.codeWidth?"".concat(e.codeWidth,"px"):"auto"}},a.createElement("h5",{ref:n,className:t()},e.leaf.name)),a.createElement("p",{className:"m-0 align-self-center",dangerouslySetInnerHTML:{__html:e.leaf.description}})):a.createElement("p",{className:"m-0",dangerouslySetInnerHTML:{__html:e.leaf.description}}):a.createElement("p",{className:"m-0",dangerouslySetInnerHTML:{__html:e.leaf.name}}))}function y(e){var t,n,r,c={},i=!1;function o(e){var t="mb-2";return e.name||i?t:t+" ms-4 "+s.Z.leafDescriptionOnly}return e.linkSet.areasAndLeaves.forEach((function(e){var t=e[l.k.Area].map((function(e){return e.name})).join(" - ");c[t]?e[l.k.Leaf].forEach((function(e){c[t].push(e),e.name&&(i=!0)})):c[t]=e[l.k.Leaf]})),a.createElement(a.Fragment,null,a.createElement("h3",{className:"".concat(h," text-white bg-dark-blue fw-normal me-1 mb-2")},(t=e.linkSet[l.k.Audience].name,n=e.linkSet[l.k.Subject].name,(r=t.match(v))?"".concat(r[1]," • ").concat(r[2]," • ").concat(n):"".concat(t," • ").concat(n))),a.createElement("div",{className:"me-2 ".concat(s.Z.curriculumSubject)},Object.keys(c).map((function(t,n){return a.createElement("div",{key:n,className:s.Z.areaLeafSet},t&&a.createElement("h4",{className:"mb-1 font-size-normal"},t),a.createElement("ul",{className:"list-unstyled"},c[t].map((function(t){return a.createElement("li",{key:t.id,className:o(t)},a.createElement(E,{leaf:t,codeWidth:e.codeWidth,trySetMaxCodeWidth:e.trySetMaxCodeWidth,uiContainsCodes:i}))}))))}))))}function b(e){var t,n,m=f(a.useState(0),2),p=m[0],v=m[1],h=f(a.useState(!1),2),E=h[0],b=h[1],k=f(a.useState(!1),2),S=k[0],N=k[1],C=f(a.useState([]),2),L=C[0],A=C[1];function x(e){v((function(t){return t>=e?t:e}))}a.useEffect((function(){var t,n;e.checkAllCurriculums&&e.curriculumLinks&&!(null===(t=e.curriculumLinks)||void 0===t?void 0:t.length)&&(N(!0),e.checkAllCurriculums().then((function(e){e.length&&b(!0),A(e)})).finally((function(){return N(!1)}))),(null===(n=e.curriculumLinks)||void 0===n?void 0:n.length)&&E&&b(!1)}),[null===(t=e.curriculumLinks)||void 0===t?void 0:t.length]);var w=a.useMemo((function(){var t,n={};return null===(t=e.curriculumLinks)||void 0===t||t.forEach((function(e){var t=null,a=null,r=[],c=[];e.forEach((function(e){switch(e.type){case l.k.Subject:t=e;break;case l.k.Audience:a=e;break;case l.k.Area:r.push(e);break;case l.k.Leaf:c.push(e)}}));var i="".concat(t.id,":").concat(a.id);n[i]?n[i].areasAndLeaves.push(d(d({},l.k.Area,r),l.k.Leaf,c)):n[i]=d(d(d({},l.k.Subject,t),l.k.Audience,a),"areasAndLeaves",[d(d({},l.k.Area,r),l.k.Leaf,c)])})),n}),[e.curriculumLinks]);return S?a.createElement(r.Z,null):(null===(n=e.curriculumLinks)||void 0===n?void 0:n.length)||e.hasNonEmptyCurriculums||!e.emptyStateUrl||E||S?E?a.createElement("div",null,a.createElement("div",{className:"mb-3"},a.createElement(c.x,{namespace:g,phrase:"currentEmpty"})),a.createElement("div",{className:"mb-3"},a.createElement(c.x,{namespace:g,phrase:"currentEmptyInfo"})),a.createElement("ul",{className:"list-unstyled mb-0"},L.map((function(t){return a.createElement("li",{key:t.id,className:"p-1 pe-2 rounded-pill d-inline-flex align-items-center cursor-pointer ".concat(s.Z.tag," me-2"),onClick:function(){return e.onChangeCurriculum(t.id.toString())}},a.createElement("div",{className:"bg-white ".concat(s.Z.cover," rounded-circle")},a.createElement("img",{src:o.j.createUrl(t.cover.url,{size:i.h2.Small}),alt:t.name,className:"rounded-circle"})),t.name)})))):a.createElement("ul",{className:"list-unstyled m-0"},Object.keys(w).map((function(e,t){return a.createElement("li",{key:"linkset-".concat(t),className:s.Z.curriculumSet},a.createElement(y,{linkSet:w[e],trySetMaxCodeWidth:x,codeWidth:p}))}))):a.createElement(u.p,{emptyStateUrl:e.emptyStateUrl})}},38496:(e,t,n)=>{n.d(t,{p:()=>u});var a=n(32735),r=n(23481),c=n(23232),l=n(83345),i="shared.curriculumLinks",o=r.T.encloseNamespace(i);function u(e){return a.createElement(c.u,{className:"pt-3"},a.createElement(c.u.Image,{src:e.emptyStateUrl,altText:o("emptyInfo"),size:"small"}),a.createElement(c.u.Heading,null,a.createElement(l.x,{namespace:i,phrase:"emptyHeading"})),a.createElement(c.u.Info,null,a.createElement(l.x,{namespace:i,phrase:"emptyInfo"})))}},44599:(e,t,n)=>{n.d(t,{Z:()=>c});var a=n(32735);var r=function(){return a.createElement(a.Fragment,null,a.createElement("div",{className:"partial-loading-background rounded-pill py-1 px-2 d-inline-block me-1 mb-2 ".concat("vDcrq")}),a.createElement("div",null,a.createElement("div",{className:"partial-loading-background mb-1 ".concat("GXhoW")}),a.createElement("div",{className:"mb-2 d-flex"},a.createElement("div",{className:"me-1 align-self-start ".concat("goKaS")},a.createElement("div",{className:"partial-loading-background rounded-pill py-1 px-2 d-inline-block w-100 h-100"})),a.createElement("div",{className:"partial-loading-background ".concat("vFew6")}))))};function c(){return a.createElement("div",null,a.createElement("div",{className:"mb-3"},a.createElement(r,null)),a.createElement("div",{className:"mb-3"},a.createElement(r,null)),a.createElement("div",null,a.createElement(r,null)))}},63112:(e,t,n)=>{n.d(t,{o:()=>c});var a=n(32735),r=n(91807),c=a.memo((function(e){var t=e.tagClass,n="partial-loading-background d-inline-block rounded-pill py-1 px-2 mb-1 me-1 text-nowrap ".concat(void 0===t?"":t," ").concat(r.Z.partialTag);return a.createElement("div",{className:"mt-1"},a.createElement("span",{className:n}," "))}))},88513:(e,t,n)=>{n.d(t,{B:()=>s});var a=n(32735),r=n(23481),c=n(65858),l=n(36848);const i={seeMore:"yv0FS"};var o=r.T.encloseNamespace("shared.widgetHeader");function u(e){return a.createElement("div",{className:"ms-3 ".concat(i.seeMore)},a.createElement(l.F,{appLink:e.appLink,analyticsData:e.analyticsData,analyticsOptions:Object.assign(Object.assign({},e.analyticsOptions),{descriptor:c._S.SeeMore}),className:"text-decoration-none ".concat(e.appLink?"curated-widget-link":"")},a.createElement("p",{className:"hover-text-underline text-dark curated-widget-heading"},o("seeMore"))))}function s(e){var t=!!e.description;return e.name||e.description?a.createElement("div",{className:"curated-widget-header"},a.createElement("div",{className:"d-flex justify-content-between"},!!e.name&&a.createElement("div",{className:i.title},a.createElement(l.F,{appLink:e.appLink,analyticsOptions:e.analyticsOptions,analyticsData:e.analyticsData,className:"text-decoration-none ".concat(e.appLink?"curated-widget-link":""),onClick:e.onClick},a.createElement("h2",{className:"h4 curated-widget-heading"},e.name))),!!e.appLink&&!t&&!!e.showSeeMoreLink&&a.createElement(u,Object.assign({},e))),t&&a.createElement("div",{className:"d-flex justify-content-between align-items-end"},a.createElement("p",{className:"description curated-widget-description ".concat(i.description)},a.createElement("span",null,e.description)),!!e.appLink&&!!e.showSeeMoreLink&&a.createElement(u,Object.assign({},e)))):a.createElement(a.Fragment,null)}},65163:(e,t,n)=>{n.d(t,{QL:()=>a.Q,eb:()=>a.e});var a=n(16450);n(14244)},43872:(e,t,n)=>{n.d(t,{V:()=>s});var a=n(32735),r=n(82182),c=n(31069),l=n(91967),i=new Image;i.src="data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs=";var o=function(e){e.dataTransfer.setDragImage&&l.q.isFunction(e.dataTransfer.setDragImage)&&e.dataTransfer.setDragImage(i,0,0)},u=r.V.isTouchScreen(),s=a.forwardRef((function(e,t){var n,r,l,i,s=e.children,m=e.positionType,d=e.onDrag,f=e.onDragEnd,p=e.onTouchMove,v=e.onTouchEnd,g=e.percentageDragged,h=e.position,E=void 0===h?0:h;return a.createElement("div",Object.assign({className:"d-flex flex-nowrap position-relative w-100",style:(r=E,l=m,i=g,l===c.C.Percentage&&i&&(r-=i),{transform:"translate3d(".concat(r).concat(l,", 0px, 0px)"),transition:"transform .4s ease-in-out"}),ref:t},(n={},d&&f&&(n.draggable=!0,n.onDragEnd=f,n.onDragStart=o,n.onDragOver=d),p&&v&&u&&(n.onTouchMoveCapture=p,n.onTouchEndCapture=v),n)),s)}))},16930:(e,t,n)=>{n.d(t,{W:()=>u,f:()=>o});var a=n(32735),r=n(83914),c=n(35223);const l="VSAPU",i="kgeXh";var o;!function(e){e[e.Left=0]="Left",e[e.Right=1]="Right"}(o||(o={}));var u=a.memo((function(e){var t,n,u,s=e.direction===o.Left,m=s?c.vn.ChevronLeft:c.vn.ChevronRight;return e.hide?a.createElement(a.Fragment,null):a.createElement("div",{className:"_ejId",style:"videos"===(null===(n=e.state)||void 0===n?void 0:n.contents)?{paddingBottom:56.25/(null===(u=e.state)||void 0===u?void 0:u.viewableItems)+"%"}:{height:"100%"}},e.useGradientBackdrop&&a.createElement("div",{className:s?"".concat("Pt3nx"," ").concat(e.leftGradientClassName):"".concat("ZuAif"," ").concat(e.rightGradientClassName)}),!e.hideExtendedClickableArea&&a.createElement("div",{role:"button",onClick:e.onClick,className:"".concat("AtsWP"," ").concat(s?l:i)}),a.createElement("div",{role:"button",className:"".concat((t="BVcIS",t+=s?" ".concat(l," ").concat(e.leftButtonClassName):" ".concat(i," ").concat(e.rightButtonClassName))," ").concat("gAsE9"," ").concat(e.className||""),onClick:e.onClick},e.hoverText&&a.createElement("span",{className:"ps-3 pe-2 ".concat("APA36")},e.hoverText),a.createElement(r.x,{svgName:m,size:r.S.Medium,className:"svg-container d-inline-block ".concat("Ev4hr")})))}))},31069:(e,t,n)=>{var a;n.d(t,{C:()=>a}),function(e){e.Percentage="%",e.Pixels="px"}(a||(a={}))},85597:(e,t,n)=>{var a;n.d(t,{k:()=>a}),function(e){e.Subject="CurriculumSubject",e.Audience="CurriculumAudience",e.Area="CurriculumArea",e.Leaf="CurriculumLeaf"}(a||(a={}))},10841:(e,t,n)=>{var a;n.d(t,{n:()=>a}),function(e){e.Init="init",e.Next="next",e.Previous="previous",e.Resize="resize",e.Drag="drag",e.Update="update",e.JumpToIndex="jump-to-index"}(a||(a={}))},81514:(e,t,n)=>{n.d(t,{V:()=>c});var a=n(86764),r=n(3747);function c(){var e=(0,r.a)(a.r.XS),t=(0,r.a)(a.r.SM),n=(0,r.a)(a.r.MD),c=(0,r.a)(a.r.LG),l=(0,r.a)(a.r.XL),i=(0,r.a)(a.r.XXL),o=a.r.LG;return e&&(o=a.r.XS),t&&(o=a.r.SM),n&&(o=a.r.MD),c&&(o=a.r.LG),l&&(o=a.r.XL),i&&(o=a.r.XXL),o}},7506:(e,t,n)=>{n.r(t),n.d(t,{ViewCurriculumLinksView:()=>N});var a=n(32735),r=n(80247),c=n(23481),l=n(20354),i=n(75896),o=n(49985),u=n(65858),s=n(1353),m=n(93439),d=n(9111),f=n(13876),p=n(63112),v=n(65163),g=n(1575),h=n(69883),E=n(99742),y=n(82817);function b(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,c,l,i=[],o=!0,u=!1;try{if(c=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;o=!1}else for(;!(o=(a=c.call(n)).done)&&(i.push(a.value),i.length!==t);o=!0);}catch(e){u=!0,r=e}finally{try{if(!o&&null!=n.return&&(l=n.return(),Object(l)!==l))return}finally{if(u)throw r}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return k(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?k(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function k(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var S=c.T.encloseNamespace("shared.viewCurriculumLinks");function N(e){var t,n=(0,y.M)(e.id),c=n.hasLoaded,k=n.preferredCurriculum,N=n.availableCurriculums,C=n.nonEmptyCurriculums,L=n.curriculumLinks,A=n.updateCurriculum,x=b(a.useState(!c),2),w=x[0],j=x[1],I=b(a.useState(),2),M=I[0],T=I[1],D=l.a.useBasicFetch(g.R.video(e.id)),O=(0,h.Z)();function Z(e){var t,n,a=N.find((function(t){return t.id.toString()===e}));(null==a?void 0:a.id)&&(null===(t=null==M?void 0:M.id)||void 0===t?void 0:t.toString())!==(null===(n=null==a?void 0:a.id)||void 0===n?void 0:n.toString())&&(T(a),j(!0),A(a,(function(){var e,t;o.k.logUserAction({id:a.id,name:a.id,description:a.description,videoId:null===(e=D.data)||void 0===e?void 0:e.id,videoName:null===(t=D.data)||void 0===t?void 0:t.name},{entity:u.py.Presentation,actionType:u.Vw.Select,descriptor:u.kD.Curriculum,location:u.LZ.PlayPage})}),(function(){T(M),j(!1),O.error(S("updateFailed"))})))}return a.useEffect((function(){c&&(M||T(null!=k?k:i.m.first(N)),j(!1))}),[null==k?void 0:k.id,c]),a.createElement(d.G,{title:S("heading"),closePopup:e.closePopup,size:"lg"},a.createElement("div",{className:"mb-3 mx-2"},!!(null==C?void 0:C.length)&&a.createElement(v.eb,{collection:C,childClassName:"flex-shrink-0",childComponent:function(e){var t;return a.createElement(s.$,Object.assign({},e,{selected:(null===(t=null==M?void 0:M.id)||void 0===t?void 0:t.toString())===e.data.id.toString(),onChangeCurriculum:Z}))},partialLoadingComponent:function(){return a.createElement(p.o,null)},widgetDataDeps:[null===(t=null==M?void 0:M.id)||void 0===t?void 0:t.toString()]})),w?a.createElement("div",{className:"d-flex justify-content-center align-items-center py-5"},a.createElement(r.Z,{as:"div",animation:"border",role:"status"})):a.createElement("div",{className:"pb-3"},a.createElement(m.h,{curriculumLinks:L,emptyStateUrl:E.W.EmptyStates.CURRICULUM_LINKS,onChangeCurriculum:Z,hasNonEmptyCurriculums:!!C.length})),a.createElement(f.u,null,a.createElement(f.u.Submit,{variant:"dark",onClick:e.closePopup,text:S("close")})))}},22161:(e,t,n)=>{n.d(t,{Z:()=>a});const a={curriculumSubject:"GvGYH",curriculumSet:"d7RK0",areaLeafSet:"XRTAe",closeButton:"N3l5Q",heading:"hAxR4",leafDescriptionOnly:"h66ke",dropdown:"CsG6G",tag:"rdLqY",cover:"etwaD",active:"aDLMe",selected:"BMrSd"}},91807:(e,t,n)=>{n.d(t,{Z:()=>a});const a={tagList:"Zw6d9",disabled:"jlL1c",partialTag:"too_N",badge:"OjtN8",close:"X9joI"}}}]);
2
- //# sourceMappingURL=2120-2e824a172a-lite.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/2120-2e824a172a-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/curriculum-links/CurriculumLinkItem.tsx","file:///app/packages/libs/shared/src/components/curriculum-links/CurriculumLinks.tsx","file:///app/packages/libs/shared/src/components/curriculum-links/CurriculumLinksEmptyState.tsx","file:///app/packages/libs/shared/src/components/curriculum-links/partial-loading/PartialCurriculumLinks.tsx","file:///app/packages/libs/shared/src/components/curriculum-links/partial-loading/partial-curriculum-links.scss","file:///app/packages/libs/shared/src/components/tags/PartialTagItem.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/components/header/widget-header.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/components/header/WidgetHeader.tsx","file:///app/packages/libs/shared/src/utils/DragHelper.ts","file:///app/packages/libs/shared/src/components/widgets/sliding-list/SlidingListContainer.tsx","file:///app/packages/libs/shared/src/components/widgets/widget-button/widget-button.scss","file:///app/packages/libs/shared/src/components/widgets/widget-button/WidgetButton.tsx","file:///app/packages/libs/shared/src/enums/CssMeasurement.ts","file:///app/packages/libs/shared/src/enums/CurriculumType.ts","file:///app/packages/libs/shared/src/enums/WidgetInteraction.ts","file:///app/packages/libs/shared/src/hooks/UseGetMediaQueryString.ts","file:///app/packages/projects/lite/src/shared/views/view-curriculum-links/ViewCurriculumLinksView.tsx","file:///app/packages/libs/shared/src/components/curriculum-links/curriculum-links.scss","file:///app/packages/libs/shared/src/components/tags/tags.scss"],"sourcesContent":["import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\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\nconst namespace = 'shared.curriculumLinks';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\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 aria-label={`${getPhrase('ariaFilter')} ${curriculumTag.name}`}\n >\n <div className={`bg-white ${styles.cover} rounded-circle border`}>\n <img\n src={ImageHelper.createUrl(curriculumTag.cover.url, { size: ImageSize.Small })}\n alt={curriculumTag.name}\n className='rounded-circle'\n />\n </div>\n <div className='ms-2'>\n {curriculumTag.name}\n </div>\n </DivButton>\n );\n}","import React from 'react';\n\nimport { PartialCurriculumLinks } from 'libs/shared/components/curriculum-links/partial-loading/PartialCurriculumLinks';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CurriculumType } from 'libs/shared/enums/CurriculumType';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Curriculum, Presentation } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport { CurriculumLinksEmptyState } from './CurriculumLinksEmptyState';\n\nimport styles from './curriculum-links.scss';\n\nconst BRACKET_SEGMENT_REGEX = /(.*)\\s\\((.*)?\\)/i;\n\nconst namespace = 'shared.curriculumLinks';\n\nconst BASE_PILL_CLASS = 'text-nowrap font-size-normal rounded-pill py-1 px-2 my-0 d-inline-block';\n\ninterface CurriculumStructure {\n [CurriculumType.Subject]: Curriculum<CurriculumType.Subject>;\n [CurriculumType.Audience]: Curriculum<CurriculumType.Audience>;\n areasAndLeaves: Array<{\n [CurriculumType.Area]: Curriculum<CurriculumType.Area>[];\n [CurriculumType.Leaf]: Curriculum<CurriculumType.Leaf>[];\n }>;\n}\n\ninterface CurriculumLeafProps {\n leaf: Curriculum<CurriculumType.Leaf>;\n codeWidth: number;\n trySetMaxCodeWidth: React.Dispatch<React.SetStateAction<number>>;\n uiContainsCodes: boolean;\n}\n\nfunction CurriculumLeaf(props: CurriculumLeafProps): JSX.Element {\n function getCurriculumCodeClass(): string {\n const baseClass = BASE_PILL_CLASS + ' bg-white border';\n\n // If a leaf has no code but the rest of the UI has leaf nodes w/ codes, we show a special \"No code\" pill\n if (!props.leaf.name && props.uiContainsCodes)\n return baseClass + ' border-secondary text-secondary';\n\n return baseClass + ' border-dark';\n }\n\n const codeRef = React.useRef<HTMLDivElement>();\n\n React.useEffect(() => {\n if (!codeRef.current)\n return;\n\n const { width } = codeRef.current.getBoundingClientRect();\n\n props.trySetMaxCodeWidth(width);\n }, [codeRef.current]);\n\n return (\n <div className='d-flex'>\n {(() => {\n if (!props.leaf.description)\n return <p className='m-0' dangerouslySetInnerHTML={{ __html: props.leaf.name }} />;\n\n /**\n * If a leaf has no code but the rest of the UI has leaf nodes\n * with codes, we show a special \"No code\" pill. Example: https://imgur.com/3L1Ela3\n */\n if (!props.leaf.name && props.uiContainsCodes) {\n return (\n <>\n <div\n className='me-1 align-self-start'\n style={{ minWidth: props.codeWidth ? `${props.codeWidth}px` : 'auto' }}\n >\n <h5 ref={codeRef} className={getCurriculumCodeClass()}>\n <Text namespace={namespace} phrase='noCode' />\n </h5>\n </div>\n <p className='m-0 align-self-center' dangerouslySetInnerHTML={{ __html: props.leaf.description }} />\n </>\n );\n }\n\n /**\n * If a leaf has no code and the rest of the UI leaf nodes have no code, we just\n * display the description with a bullet point. Example: https://imgur.com/jzJvmWs\n */\n if (!props.leaf.name && !props.uiContainsCodes)\n return <p className='m-0' dangerouslySetInnerHTML={{ __html: props.leaf.description }} />;\n\n return (\n <>\n <div\n className='me-1 align-self-start'\n style={{ minWidth: props.codeWidth ? `${props.codeWidth}px` : 'auto' }}\n >\n <h5 ref={codeRef} className={getCurriculumCodeClass()}>{props.leaf.name}</h5>\n </div>\n <p className='m-0 align-self-center' dangerouslySetInnerHTML={{ __html: props.leaf.description }} />\n </>\n );\n })()}\n </div>\n );\n}\n\ninterface CurriculumSubjectProps {\n linkSet: CurriculumStructure;\n codeWidth: number;\n trySetMaxCodeWidth: React.Dispatch<React.SetStateAction<number>>;\n}\n\nfunction CurriculumSubject(props: CurriculumSubjectProps): JSX.Element {\n const areaAndLeafSets: { [areaText: string]: Curriculum<CurriculumType.Leaf>[]; } = {};\n\n let uiContainsCodes = false;\n\n props.linkSet.areasAndLeaves.forEach(areaAndLeafSet => {\n const areaText = areaAndLeafSet[CurriculumType.Area].map(ca => ca.name).join(' - ');\n\n if (areaAndLeafSets[areaText]) {\n areaAndLeafSet[CurriculumType.Leaf].forEach(leaf => {\n areaAndLeafSets[areaText].push(leaf);\n\n // We need the info on if _any_ leaf node has a code in it. See why in the comments in `<CurriculumLeaf />`\n if (leaf.name)\n uiContainsCodes = true;\n });\n\n return;\n }\n\n areaAndLeafSets[areaText] = areaAndLeafSet[CurriculumType.Leaf];\n });\n\n function getAudienceText(): string {\n const audienceSegment = props.linkSet[CurriculumType.Audience].name;\n const subjectSegment = props.linkSet[CurriculumType.Subject].name;\n\n /**\n * In some curriculums, such as the UK curriculum, the audience string may contain a year group\n * in brackets. For example, it may be \"Lower Key Stage 2 (Year 4)\".\n * This regex will pull that segment out if it exists.\n */\n const audienceBracketSegments = audienceSegment.match(BRACKET_SEGMENT_REGEX);\n\n if (audienceBracketSegments)\n return `${audienceBracketSegments[1]} • ${audienceBracketSegments[2]} • ${subjectSegment}`;\n\n return `${audienceSegment} • ${subjectSegment}`;\n }\n\n function getLeafStyleClass(leaf: Curriculum<CurriculumType.Leaf>): string {\n const className = 'mb-2';\n\n if (!leaf.name && !uiContainsCodes)\n return className + ' ms-4 ' + styles.leafDescriptionOnly;\n\n return className;\n }\n\n return (\n <>\n <h3 className={`${BASE_PILL_CLASS} text-white bg-dark-blue fw-normal me-1 mb-2`}>\n {getAudienceText()}\n </h3>\n\n <div className={`me-2 ${styles.curriculumSubject}`}>\n {Object.keys(areaAndLeafSets).map((areaText, i) => {\n return (\n <div key={i} className={styles.areaLeafSet} >\n {areaText && <h4 className='mb-1 font-size-normal'>{areaText}</h4>}\n <ul className='list-unstyled'>\n {areaAndLeafSets[areaText].map(leaf => (\n <li key={leaf.id} className={getLeafStyleClass(leaf)}>\n <CurriculumLeaf\n leaf={leaf}\n codeWidth={props.codeWidth}\n trySetMaxCodeWidth={props.trySetMaxCodeWidth}\n uiContainsCodes={uiContainsCodes}\n />\n </li>\n ))}\n </ul>\n </div>\n );\n })}\n </div>\n </>\n );\n}\n\ninterface CurriculumLinksSet {\n [subjectAndAudienceIdKey: string]: CurriculumStructure\n}\n\ninterface CurriculumLinksProps {\n curriculumLinks: Curriculum[][];\n emptyStateUrl?: string;\n checkAllCurriculums?: () => Promise<Presentation[]>;\n onChangeCurriculum?: (id: string) => void;\n hasNonEmptyCurriculums: boolean;\n}\n\nexport function CurriculumLinks(props: CurriculumLinksProps): JSX.Element {\n const [ codeWidth, setCodeWidth ] = React.useState(0);\n const [ showOtherCurriculums, setShowOtherCurriculums ] = React.useState(false);\n const [ loadingOther, setLoadingOther ] = React.useState(false);\n const [ curriculumTags, setCurriculumTags ] = React.useState<Presentation[]>([]);\n\n React.useEffect(() => {\n if (props.checkAllCurriculums && props.curriculumLinks && !props.curriculumLinks?.length) {\n setLoadingOther(true);\n // only fetch other curriculums when this curriculum is displayed\n props.checkAllCurriculums().then(data => {\n if (data.length) {\n setShowOtherCurriculums(true);\n }\n\n setCurriculumTags(data);\n }).finally(() => setLoadingOther(false));\n }\n\n if (props.curriculumLinks?.length && showOtherCurriculums) {\n setShowOtherCurriculums(false);\n }\n }, [props.curriculumLinks?.length]);\n\n function trySetMaxCodeWidth(width: number): void {\n /**\n * The width of the curriculum code column should be identical for each leaf node, meaning\n * the leaf description text will be perfectly vertically aligned all the way down.\n * See here for example: https://imgur.com/MbganZf\n * \n * This is achieved by us setting the state for the maximum code width, and forcing all\n * smaller codes to abide by that max width.\n * \n * This value is used in the `<CurriculumLeaf />` component.\n */\n setCodeWidth(currentVal => {\n if (currentVal >= width)\n return currentVal;\n\n return width;\n });\n }\n\n /**\n * Here, we're taking the structure of links from the backend, and restructuring it in a way\n * that resembles the structure of our UI more closely. The general idea is:\n * \n * CurriculumAudience - CurriculumSubject\n * CurriculumAreas\n * CurriculumLeaves\n */\n const curriculumLinkSets = React.useMemo(() => {\n const newSet: CurriculumLinksSet = {};\n\n props.curriculumLinks?.forEach(linkSet => {\n let subject: Curriculum<CurriculumType.Subject> = null;\n let audience: Curriculum<CurriculumType.Audience> = null;\n const areas: Curriculum<CurriculumType.Area>[] = [];\n const leaves: Curriculum<CurriculumType.Leaf>[] = [];\n \n linkSet.forEach(curriculumObj => {\n switch (curriculumObj.type) {\n case CurriculumType.Subject:\n subject = curriculumObj as Curriculum<CurriculumType.Subject>;\n break;\n case CurriculumType.Audience:\n audience = curriculumObj as Curriculum<CurriculumType.Audience>;\n break;\n case CurriculumType.Area:\n areas.push(curriculumObj as Curriculum<CurriculumType.Area>);\n break;\n case CurriculumType.Leaf:\n leaves.push(curriculumObj as Curriculum<CurriculumType.Leaf>);\n break;\n default:\n break;\n }\n });\n \n const key = `${subject.id}:${audience.id}`;\n \n if (newSet[key]) {\n newSet[key].areasAndLeaves.push({\n [CurriculumType.Area]: areas,\n [CurriculumType.Leaf]: leaves\n });\n \n return;\n }\n \n newSet[key] = {\n [CurriculumType.Subject]: subject,\n [CurriculumType.Audience]: audience,\n areasAndLeaves: [{\n [CurriculumType.Area]: areas,\n [CurriculumType.Leaf]: leaves\n }]\n };\n });\n\n return newSet;\n }, [props.curriculumLinks]);\n\n if (loadingOther) {\n return <PartialCurriculumLinks />;\n }\n \n if (!props.curriculumLinks?.length && !props.hasNonEmptyCurriculums) {\n // only if all other curriculums don't have links we render the empty state\n if (props.emptyStateUrl && !showOtherCurriculums && !loadingOther)\n return <CurriculumLinksEmptyState emptyStateUrl={props.emptyStateUrl} />;\n }\n\n if (showOtherCurriculums) {\n return (\n <div>\n <div className='mb-3'>\n <Text namespace={namespace} phrase='currentEmpty' />\n </div>\n <div className='mb-3'>\n <Text namespace={namespace} phrase='currentEmptyInfo' />\n </div>\n <ul className='list-unstyled mb-0'>\n {curriculumTags.map(t => (\n <li\n key={t.id}\n className={`p-1 pe-2 rounded-pill d-inline-flex align-items-center cursor-pointer ${styles.tag} me-2`}\n onClick={() => props.onChangeCurriculum(t.id.toString())}\n >\n <div className={`bg-white ${styles.cover} rounded-circle`}>\n <img\n src={ImageHelper.createUrl(t.cover.url, { size: ImageSize.Small })}\n alt={t.name}\n className='rounded-circle'\n />\n </div>\n {t.name}\n </li>\n ))}\n </ul>\n </div>\n );\n }\n\n return (\n <ul className='list-unstyled m-0'>\n {Object.keys(curriculumLinkSets).map((linkSetKey, i) => (\n <li key={`linkset-${i}`} className={styles.curriculumSet}>\n <CurriculumSubject\n linkSet={curriculumLinkSets[linkSetKey]}\n trySetMaxCodeWidth={trySetMaxCodeWidth}\n codeWidth={codeWidth}\n />\n </li>\n ))}\n </ul>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'shared.curriculumLinks';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface CurriculumLinksEmptyStateProps {\n emptyStateUrl: string;\n}\n\nexport function CurriculumLinksEmptyState(props: CurriculumLinksEmptyStateProps): JSX.Element {\n return (\n <EmptyState className='pt-3'>\n <EmptyState.Image src={props.emptyStateUrl} altText={getPhrase('emptyInfo')} size='small'/>\n <EmptyState.Heading>\n <Text namespace={namespace} phrase='emptyHeading' />\n </EmptyState.Heading>\n <EmptyState.Info>\n <Text namespace={namespace} phrase='emptyInfo' />\n </EmptyState.Info>\n </EmptyState>\n );\n}","import React from 'react';\n\nimport styles from './partial-curriculum-links.scss';\n\nconst PartialCurriculumLinkSection = () => (\n <>\n <div className={`partial-loading-background rounded-pill py-1 px-2 d-inline-block me-1 mb-2 ${styles.audience}`} />\n <div>\n <div className={`partial-loading-background mb-1 ${styles.area}`} />\n\n <div className='mb-2 d-flex'>\n <div className={`me-1 align-self-start ${styles.code}`}>\n <div className={`partial-loading-background rounded-pill py-1 px-2 d-inline-block w-100 h-100`} />\n </div>\n \n <div className={`partial-loading-background ${styles.description}`} />\n </div>\n </div>\n </>\n);\n\nexport function PartialCurriculumLinks(): JSX.Element {\n return (\n <div>\n <div className='mb-3'>\n <PartialCurriculumLinkSection />\n </div>\n\n <div className='mb-3'>\n <PartialCurriculumLinkSection />\n </div>\n\n <div>\n <PartialCurriculumLinkSection />\n </div>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"audience\":\"vDcrq\",\"area\":\"GXhoW\",\"code\":\"goKaS\",\"description\":\"vFew6\"};","import React from 'react';\n\nimport styles from './tags.scss';\n\ninterface PartialTagItemProps {\n tagClass?: string;\n}\n\nexport const PartialTagItem = React.memo(function({ tagClass = '' }: PartialTagItemProps): JSX.Element {\n const classNames = `partial-loading-background d-inline-block rounded-pill py-1 px-2 mb-1 me-1 text-nowrap ${tagClass} ${styles.partialTag}`;\n\n return (\n <div className='mt-1'>\n <span className={classNames}>&nbsp;</span>\n </div>\n );\n});","// extracted by mini-css-extract-plugin\nexport default {\"seeMore\":\"yv0FS\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions, ClickDescriptor } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport styles from './widget-header.scss';\n\nconst namespace = 'shared.widgetHeader';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface WidgetHeaderProps {\n name: string;\n description: string;\n\n appLink?: Core.AppLink;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n showSeeMoreLink?: boolean;\n onClick?: () => void;\n}\n\nfunction SeeMore(props: WidgetHeaderProps) {\n return (\n <div className={`ms-3 ${styles.seeMore}`}>\n <AppLink\n appLink={props.appLink}\n analyticsData={props.analyticsData }\n analyticsOptions={{ ...props.analyticsOptions, descriptor: ClickDescriptor.SeeMore }}\n className={`text-decoration-none ${props.appLink ? 'curated-widget-link' : ''}`}\n >\n <p className='hover-text-underline text-dark curated-widget-heading'>{getPhrase('seeMore')}</p>\n </AppLink>\n </div>\n );\n}\n\nexport function WidgetHeader(props: WidgetHeaderProps): JSX.Element {\n const hasDescription = !!props.description;\n\n if (!props.name && !props.description)\n return <></>;\n\n return (\n <div className='curated-widget-header'>\n <div className='d-flex justify-content-between'>\n {!!props.name && (\n <div className={styles.title}>\n <AppLink\n appLink={props.appLink}\n analyticsOptions={props.analyticsOptions}\n analyticsData={props.analyticsData}\n className={`text-decoration-none ${props.appLink ? 'curated-widget-link' : ''}`}\n onClick={props.onClick}\n >\n <h2 className='h4 curated-widget-heading'>\n {props.name}\n </h2>\n </AppLink>\n </div>\n )}\n {!!props.appLink && !hasDescription && !!props.showSeeMoreLink && <SeeMore {...props}/>}\n </div>\n \n {hasDescription && (\n <div className='d-flex justify-content-between align-items-end'>\n <p className={`description curated-widget-description ${styles.description}`}>\n <span>{props.description}</span>\n </p>\n {!!props.appLink && !!props.showSeeMoreLink && <SeeMore {...props}/> }\n </div>\n )}\n </div>\n );\n}","import { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nconst blankImage = new Image();\nblankImage.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs=';\n\nexport const DragHelper = {\n // This removes the image that appears when you drag a draggable HTML element\n hideDragImage(event: React.DragEvent<HTMLElement>): void {\n if (!event.dataTransfer.setDragImage || !FunctionHelper.isFunction(event.dataTransfer.setDragImage))\n return;\n\n event.dataTransfer.setDragImage(blankImage, 0, 0);\n }\n};","import * as React from 'react';\n\nimport { UserAgentHelper } from 'libs/common/backbone/utils/UserAgentHelper';\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\n\nimport { CssMeasurement } from 'libs/shared/enums/CssMeasurement';\nimport { DragHelper } from 'libs/shared/utils/DragHelper';\n\nconst isTouchScreen = UserAgentHelper.isTouchScreen();\n\nconst getPositionStyling = (xPosition: number, measurement: CssMeasurement, dragPercentage?: number) => {\n // Used in situations where a touch screen user is dragging the `<FixedWidget />`\n if (measurement === CssMeasurement.Percentage && dragPercentage)\n xPosition = xPosition - dragPercentage;\n\n return {\n transform: `translate3d(${xPosition}${measurement}, 0px, 0px)`,\n transition: 'transform .4s ease-in-out'\n };\n};\n\ninterface SlidingListContainerProps extends React.PropsWithChildren<unknown> {\n position: number;\n positionType: CssMeasurement;\n\n onDrag?: (event: React.DragEvent<HTMLDivElement>) => void;\n onDragEnd?: () => void;\n\n onTouchMove?: (event: React.TouchEvent<HTMLDivElement>) => void;\n onTouchEnd?: () => void;\n\n percentageDragged?: number;\n}\n\nexport const SlidingListContainer = React.forwardRef((\n props: SlidingListContainerProps,\n ref: React.MutableRefObject<HTMLDivElement>\n): JSX.Element => {\n const { children, positionType, onDrag, onDragEnd, onTouchMove, onTouchEnd, percentageDragged, position = 0 } = props;\n\n function getEventListeners(): HashObject {\n const listenerProps: HashObject = {};\n\n if (onDrag && onDragEnd) {\n listenerProps.draggable = true;\n listenerProps.onDragEnd = onDragEnd;\n listenerProps.onDragStart = DragHelper.hideDragImage;\n listenerProps.onDragOver = onDrag;\n }\n\n if (onTouchMove && onTouchEnd && isTouchScreen) {\n listenerProps.onTouchMoveCapture = onTouchMove;\n listenerProps.onTouchEndCapture = onTouchEnd;\n }\n\n return listenerProps;\n }\n\n return (\n <div\n className='d-flex flex-nowrap position-relative w-100'\n style={getPositionStyling(position, positionType, percentageDragged)}\n ref={ref}\n {...getEventListeners()}\n >\n {children}\n </div>\n );\n});","// extracted by mini-css-extract-plugin\nexport default {\"buttonContainer\":\"_ejId\",\"left\":\"VSAPU\",\"right\":\"kgeXh\",\"button\":\"gAsE9\",\"hoverText\":\"APA36\",\"buttonHover\":\"cqD75\",\"chevron\":\"Ev4hr\",\"extendedClickableArea\":\"AtsWP\",\"gradientRight\":\"ZuAif\",\"gradientLeft\":\"Pt3nx\",\"topPos\":\"BVcIS\"};","import * as React from 'react';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { FixedWidgetState } from 'libs/shared/components/widgets/fixed-widget';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './widget-button.scss';\n\nexport enum WidgetButtonDirection {\n Left,\n Right\n}\n\ninterface WidgetButtonProps {\n onClick: (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => void;\n direction: WidgetButtonDirection;\n hide: boolean;\n contents?: WidgetContents;\n useGradientBackdrop?: boolean;\n className?: string;\n hoverText?: string;\n hideExtendedClickableArea?: boolean;\n state?: FixedWidgetState;\n\n leftButtonClassName?: string;\n rightButtonClassName?: string;\n leftGradientClassName?: string;\n rightGradientClassName?: string;\n}\n\nexport const WidgetButton = React.memo(function(props: WidgetButtonProps): JSX.Element {\n const isLeft = props.direction === WidgetButtonDirection.Left;\n\n const arrowSvg = isLeft ? cvSvgLibrary.ChevronLeft : cvSvgLibrary.ChevronRight;\n\n function getPositionClass(): string {\n let className = styles.topPos;\n \n // Left / Right\n if (isLeft)\n className += ` ${styles.left} ${props.leftButtonClassName}`;\n else\n className += ` ${styles.right} ${props.rightButtonClassName}`;\n \n return className;\n }\n\n function getStyle(): React.CSSProperties {\n if (props.state?.contents === 'videos')\n return { paddingBottom: (56.25 / props.state?.viewableItems) + '%' };\n\n return { height: '100%' };\n }\n\n if (props.hide)\n return <></>;\n\n return (\n <div className={styles.buttonContainer} style={getStyle()}>\n {props.useGradientBackdrop &&\n <div className={isLeft ? `${styles.gradientLeft} ${props.leftGradientClassName}` : `${styles.gradientRight} ${props.rightGradientClassName}`} />\n }\n\n {!props.hideExtendedClickableArea && (\n <div\n role='button'\n onClick={props.onClick}\n className={`${styles.extendedClickableArea} ${isLeft ? styles.left : styles.right}`}\n />\n )}\n\n <div\n role='button'\n className={`${getPositionClass()} ${styles.button} ${props.className || ''}`}\n onClick={props.onClick}\n >\n {props.hoverText && (\n <span className={`ps-3 pe-2 ${styles.hoverText}`}>{props.hoverText}</span>\n )}\n <SvgContainer\n svgName={arrowSvg}\n size={SvgContainerSize.Medium}\n className={`svg-container d-inline-block ${styles.chevron}`}\n />\n </div>\n </div>\n );\n});","export enum CssMeasurement {\n Percentage = '%',\n Pixels = 'px'\n}","export enum CurriculumType {\n Subject = 'CurriculumSubject',\n Audience = 'CurriculumAudience',\n Area = 'CurriculumArea',\n Leaf = 'CurriculumLeaf'\n}","export enum WidgetInteraction {\n Init = 'init',\n Next = 'next',\n Previous = 'previous',\n Resize = 'resize',\n Drag = 'drag',\n Update = 'update',\n JumpToIndex = 'jump-to-index'\n}","import { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\n\nimport { useMediaQuery } from './UseMediaQuery';\n\n/**\n * @deprecated Please use useBreakpoints() instead\n */\nexport function useGetMediaQueryString(): MediaQueryStrings {\n const isXS = useMediaQuery(MediaQueryStrings.XS);\n const isSM = useMediaQuery(MediaQueryStrings.SM);\n const isMD = useMediaQuery(MediaQueryStrings.MD);\n const isLG = useMediaQuery(MediaQueryStrings.LG);\n const isXL = useMediaQuery(MediaQueryStrings.XL);\n const isXXL = useMediaQuery(MediaQueryStrings.XXL);\n\n let currentString = MediaQueryStrings.LG; // default\n if (isXS) currentString = MediaQueryStrings.XS;\n if (isSM) currentString = MediaQueryStrings.SM;\n if (isMD) currentString = MediaQueryStrings.MD;\n if (isLG) currentString = MediaQueryStrings.LG;\n if (isXL) currentString = MediaQueryStrings.XL;\n if (isXXL) currentString = MediaQueryStrings.XXL;\n\n return currentString;\n}","import React from 'react';\nimport { Spinner } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, PresentationDescriptor, UserAction } from 'libs/analytics/interfaces';\n\nimport { CurriculumLinkItem } from 'libs/shared/components/curriculum-links/CurriculumLinkItem';\nimport { CurriculumLinks } from 'libs/shared/components/curriculum-links/CurriculumLinks';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { PartialTagItem } from 'libs/shared/components/tags/PartialTagItem';\nimport { DynamicWidget } from 'libs/shared/components/widgets/dynamic-widget';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { PopupViewProps, Presentation, Video } from 'libs/shared/interfaces';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { useCurriculums } from 'shared/hooks/useCurriculums';\n\nconst getPhrase = LanguageService.encloseNamespace('shared.viewCurriculumLinks');\n\ninterface ViewCurriculumLinksViewProps extends PopupViewProps {\n id: string;\n}\n\nexport function ViewCurriculumLinksView(props: ViewCurriculumLinksViewProps): React.ReactElement {\n const {\n hasLoaded,\n preferredCurriculum,\n availableCurriculums,\n nonEmptyCurriculums,\n curriculumLinks,\n updateCurriculum\n } = useCurriculums(props.id);\n\n const [ showLoadingSpinner, setShowLoadingSpinner ] = React.useState(!hasLoaded);\n const [ selectedCurriculum, setSelectedCurriculum ] = React.useState<Presentation>();\n\n const video = Flight.useBasicFetch<Video>(VideoRequests.video(props.id));\n\n const alerts = useAlerts();\n function onChangeCurriculum(curriculumId: string): void {\n const newCurriculum = availableCurriculums.find(c => c.id.toString() === curriculumId);\n\n if (!newCurriculum?.id)\n return;\n\n if (selectedCurriculum?.id?.toString() === newCurriculum?.id?.toString())\n return;\n\n setSelectedCurriculum(newCurriculum);\n setShowLoadingSpinner(true);\n\n const onSuccess = () => {\n AnalyticsHelper.logUserAction({\n id: newCurriculum.id,\n name: newCurriculum.id,\n description: newCurriculum.description,\n videoId: video.data?.id,\n videoName: video.data?.name\n }, {\n entity: EntityType.Presentation,\n actionType: UserAction.Select,\n descriptor: PresentationDescriptor.Curriculum,\n location: LocationContext.PlayPage\n });\n };\n\n const onError = () => {\n // If the request to change curriculum fails, we reset the select state and alert the user\n setSelectedCurriculum(selectedCurriculum);\n setShowLoadingSpinner(false);\n alerts.error(getPhrase('updateFailed'));\n };\n\n updateCurriculum(newCurriculum, onSuccess, onError);\n }\n\n React.useEffect(() => {\n if (!hasLoaded)\n return;\n\n if (!selectedCurriculum)\n setSelectedCurriculum(preferredCurriculum ?? ArrayHelper.first(availableCurriculums));\n\n setShowLoadingSpinner(false);\n }, [ preferredCurriculum?.id, hasLoaded ]);\n\n return (\n <Popup\n title={getPhrase('heading')}\n closePopup={props.closePopup}\n size='lg'\n >\n <div className='mb-3 mx-2'>\n {!!nonEmptyCurriculums?.length && (\n <DynamicWidget\n collection={nonEmptyCurriculums}\n childClassName='flex-shrink-0'\n childComponent={props => {\n return (\n <CurriculumLinkItem\n {...props}\n selected={selectedCurriculum?.id?.toString() === props.data.id.toString()}\n onChangeCurriculum={onChangeCurriculum}\n />\n );\n }}\n partialLoadingComponent={() => <PartialTagItem />}\n widgetDataDeps={[selectedCurriculum?.id?.toString()]}\n />\n )}\n </div>\n\n {!showLoadingSpinner ? (\n <div className='pb-3'>\n <CurriculumLinks\n curriculumLinks={curriculumLinks}\n emptyStateUrl={ImageUrls.EmptyStates.CURRICULUM_LINKS}\n onChangeCurriculum={onChangeCurriculum}\n hasNonEmptyCurriculums={!!nonEmptyCurriculums.length}\n />\n </div>\n ) : (\n <div className='d-flex justify-content-center align-items-center py-5'>\n <Spinner as='div' animation='border' role='status' />\n </div>\n )}\n\n <PopupButtons>\n <PopupButtons.Submit variant='dark' onClick={props.closePopup} text={getPhrase('close')} />\n </PopupButtons>\n </Popup>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"curriculumSubject\":\"GvGYH\",\"curriculumSet\":\"d7RK0\",\"areaLeafSet\":\"XRTAe\",\"closeButton\":\"N3l5Q\",\"heading\":\"hAxR4\",\"leafDescriptionOnly\":\"h66ke\",\"dropdown\":\"CsG6G\",\"tag\":\"rdLqY\",\"cover\":\"etwaD\",\"active\":\"aDLMe\",\"selected\":\"BMrSd\"};","// extracted by mini-css-extract-plugin\nexport default {\"tagList\":\"Zw6d9\",\"disabled\":\"jlL1c\",\"partialTag\":\"too_N\",\"badge\":\"OjtN8\",\"close\":\"X9joI\"};"],"names":["getPhrase","CurriculumLinkItem","props","curriculumTag","data","key","id","className","selected","onClick","onChangeCurriculum","toString","name","src","cover","url","size","alt","BRACKET_SEGMENT_REGEX","namespace","BASE_PILL_CLASS","CurriculumLeaf","getCurriculumCodeClass","baseClass","leaf","uiContainsCodes","codeRef","current","width","getBoundingClientRect","trySetMaxCodeWidth","description","style","minWidth","codeWidth","ref","phrase","dangerouslySetInnerHTML","__html","CurriculumSubject","audienceSegment","subjectSegment","audienceBracketSegments","areaAndLeafSets","getLeafStyleClass","linkSet","areasAndLeaves","forEach","areaAndLeafSet","areaText","map","ca","join","push","match","Object","keys","i","CurriculumLinks","setCodeWidth","showOtherCurriculums","setShowOtherCurriculums","loadingOther","setLoadingOther","curriculumTags","setCurriculumTags","currentVal","checkAllCurriculums","curriculumLinks","length","then","curriculumLinkSets","newSet","subject","audience","areas","leaves","curriculumObj","type","hasNonEmptyCurriculums","emptyStateUrl","t","linkSetKey","CurriculumLinksEmptyState","altText","PartialCurriculumLinkSection","PartialCurriculumLinks","PartialTagItem","tagClass","classNames","LanguageService","SeeMore","AppLink","appLink","analyticsData","analyticsOptions","descriptor","WidgetHeader","hasDescription","showSeeMoreLink","blankImage","Image","DragHelper","event","dataTransfer","setDragImage","FunctionHelper","isTouchScreen","UserAgentHelper","SlidingListContainer","listenerProps","xPosition","measurement","dragPercentage","children","positionType","onDrag","onDragEnd","onTouchMove","onTouchEnd","percentageDragged","position","CssMeasurement","C","transform","transition","draggable","onDragStart","onDragOver","onTouchMoveCapture","onTouchEndCapture","WidgetButtonDirection","WidgetButton","isLeft","direction","Left","arrowSvg","hide","state","contents","paddingBottom","viewableItems","height","useGradientBackdrop","leftGradientClassName","rightGradientClassName","hideExtendedClickableArea","role","leftButtonClassName","rightButtonClassName","hoverText","SvgContainer","svgName","S","CurriculumType","WidgetInteraction","useGetMediaQueryString","isXS","isSM","isMD","isLG","isXL","isXXL","currentString","ViewCurriculumLinksView","hasLoaded","preferredCurriculum","availableCurriculums","nonEmptyCurriculums","updateCurriculum","showLoadingSpinner","setShowLoadingSpinner","selectedCurriculum","setSelectedCurriculum","video","alerts","curriculumId","newCurriculum","find","c","videoId","videoName","entity","actionType","location","error","title","closePopup","collection","childClassName","childComponent","partialLoadingComponent","widgetDataDeps","as","animation","variant","text"],"sourceRoot":""}