@clickview/streamable-learning 0.48.0-rc.0 → 0.48.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/dist/.vite/manifest.json +646 -646
  2. package/dist/bundles.json +1 -1
  3. package/dist/css/DU3tPCD_.chunk.css +12 -0
  4. package/dist/en.json +1 -1
  5. package/dist/scripts/{m9QbGES0.chunk.js → ACTQklJQ.chunk.js} +2 -2
  6. package/dist/scripts/{m9QbGES0.chunk.js.map → ACTQklJQ.chunk.js.map} +1 -1
  7. package/dist/scripts/{B7if0Lk52.chunk.js → B-qOny0I2.chunk.js} +2 -2
  8. package/dist/scripts/{B7if0Lk52.chunk.js.map → B-qOny0I2.chunk.js.map} +1 -1
  9. package/dist/scripts/{BSjm_rCE.chunk.js → B5jBIPaP.chunk.js} +2 -2
  10. package/dist/scripts/{BSjm_rCE.chunk.js.map → B5jBIPaP.chunk.js.map} +1 -1
  11. package/dist/scripts/{CPkKuTSK2.chunk.js → B703cBe72.chunk.js} +2 -2
  12. package/dist/scripts/{CPkKuTSK2.chunk.js.map → B703cBe72.chunk.js.map} +1 -1
  13. package/dist/scripts/{DNNNPLMp.chunk.js → B7iwtSij.chunk.js} +2 -2
  14. package/dist/scripts/{DNNNPLMp.chunk.js.map → B7iwtSij.chunk.js.map} +1 -1
  15. package/dist/scripts/{CXNve4Wq2.chunk.js → BCBfXCYM2.chunk.js} +2 -2
  16. package/dist/scripts/{CXNve4Wq2.chunk.js.map → BCBfXCYM2.chunk.js.map} +1 -1
  17. package/dist/scripts/{CoYNU7We2.chunk.js → BKnxYKDu2.chunk.js} +2 -2
  18. package/dist/scripts/{CoYNU7We2.chunk.js.map → BKnxYKDu2.chunk.js.map} +1 -1
  19. package/dist/scripts/{BoxedFO8.chunk.js → BLrjbrp8.chunk.js} +2 -2
  20. package/dist/scripts/{BoxedFO8.chunk.js.map → BLrjbrp8.chunk.js.map} +1 -1
  21. package/dist/scripts/{CibcLNJP2.chunk.js → BTYwcYPL2.chunk.js} +2 -2
  22. package/dist/scripts/{CibcLNJP2.chunk.js.map → BTYwcYPL2.chunk.js.map} +1 -1
  23. package/dist/scripts/{CwI-7tep2.chunk.js → BXJetawx2.chunk.js} +2 -2
  24. package/dist/scripts/{CwI-7tep2.chunk.js.map → BXJetawx2.chunk.js.map} +1 -1
  25. package/dist/scripts/{BV74ZRR22.chunk.js → BZOcEcTA2.chunk.js} +2 -2
  26. package/dist/scripts/{BV74ZRR22.chunk.js.map → BZOcEcTA2.chunk.js.map} +1 -1
  27. package/dist/scripts/{DxsW8K0n2.chunk.js → BaMNOAYj2.chunk.js} +2 -2
  28. package/dist/scripts/{DxsW8K0n2.chunk.js.map → BaMNOAYj2.chunk.js.map} +1 -1
  29. package/dist/scripts/{DrDQfaFN2.chunk.js → BihZ4r0z2.chunk.js} +3 -3
  30. package/dist/scripts/{DrDQfaFN2.chunk.js.map → BihZ4r0z2.chunk.js.map} +1 -1
  31. package/dist/scripts/{CK6c6uHp2.chunk.js → BpgHKWR52.chunk.js} +2 -2
  32. package/dist/scripts/{CK6c6uHp2.chunk.js.map → BpgHKWR52.chunk.js.map} +1 -1
  33. package/dist/scripts/{JtFbyaXc.chunk.js → Br0Uc4GG.chunk.js} +2 -2
  34. package/dist/scripts/{JtFbyaXc.chunk.js.map → Br0Uc4GG.chunk.js.map} +1 -1
  35. package/dist/scripts/{Dd8r1SE32.chunk.js → BsAo7Lri2.chunk.js} +2 -2
  36. package/dist/scripts/{Dd8r1SE32.chunk.js.map → BsAo7Lri2.chunk.js.map} +1 -1
  37. package/dist/scripts/{BMjES83N2.chunk.js → BvJXPFoz2.chunk.js} +2 -2
  38. package/dist/scripts/{BMjES83N2.chunk.js.map → BvJXPFoz2.chunk.js.map} +1 -1
  39. package/dist/scripts/{CpFOQcL7.chunk.js → BxypZGPK.chunk.js} +2 -2
  40. package/dist/scripts/{CpFOQcL7.chunk.js.map → BxypZGPK.chunk.js.map} +1 -1
  41. package/dist/scripts/C4MLxDS-.chunk.js +1 -0
  42. package/dist/scripts/{DLp7yHzT2.chunk.js → C5i1HsPp2.chunk.js} +2 -2
  43. package/dist/scripts/{DLp7yHzT2.chunk.js.map → C5i1HsPp2.chunk.js.map} +1 -1
  44. package/dist/scripts/{Bkv1Tbyu.chunk.js → CCoZQmgX.chunk.js} +2 -2
  45. package/dist/scripts/{Bkv1Tbyu.chunk.js.map → CCoZQmgX.chunk.js.map} +1 -1
  46. package/dist/scripts/{Clh6wBrg.chunk.js → CGxa1Jzq.chunk.js} +2 -2
  47. package/dist/scripts/{Clh6wBrg.chunk.js.map → CGxa1Jzq.chunk.js.map} +1 -1
  48. package/dist/scripts/{DAvXFgC62.chunk.js → CKdklY2o2.chunk.js} +2 -2
  49. package/dist/scripts/{DAvXFgC62.chunk.js.map → CKdklY2o2.chunk.js.map} +1 -1
  50. package/dist/scripts/{CeWjJPIz.chunk.js → CN8PeBwg.chunk.js} +2 -2
  51. package/dist/scripts/{CeWjJPIz.chunk.js.map → CN8PeBwg.chunk.js.map} +1 -1
  52. package/dist/scripts/{B1jitqYS2.chunk.js → CNJrD44-2.chunk.js} +2 -2
  53. package/dist/scripts/{B1jitqYS2.chunk.js.map → CNJrD44-2.chunk.js.map} +1 -1
  54. package/dist/scripts/{DIHDe4Sg.chunk.js → CNmmq34f.chunk.js} +2 -2
  55. package/dist/scripts/{DIHDe4Sg.chunk.js.map → CNmmq34f.chunk.js.map} +1 -1
  56. package/dist/scripts/{CikSQKH-.chunk.js → CUUUI6pl.chunk.js} +2 -2
  57. package/dist/scripts/{CikSQKH-.chunk.js.map → CUUUI6pl.chunk.js.map} +1 -1
  58. package/dist/scripts/{DNO0KpY72.chunk.js → CWFInhB82.chunk.js} +2 -2
  59. package/dist/scripts/{DNO0KpY72.chunk.js.map → CWFInhB82.chunk.js.map} +1 -1
  60. package/dist/scripts/{i2-k6ULv2.chunk.js → CbLL7dIz2.chunk.js} +2 -2
  61. package/dist/scripts/{i2-k6ULv2.chunk.js.map → CbLL7dIz2.chunk.js.map} +1 -1
  62. package/dist/scripts/{KCdpQ8qv2.chunk.js → Ce1TZZdV2.chunk.js} +2 -2
  63. package/dist/scripts/{KCdpQ8qv2.chunk.js.map → Ce1TZZdV2.chunk.js.map} +1 -1
  64. package/dist/scripts/{NV4_mMU8.chunk.js → Ces-KTwe.chunk.js} +2 -2
  65. package/dist/scripts/{NV4_mMU8.chunk.js.map → Ces-KTwe.chunk.js.map} +1 -1
  66. package/dist/scripts/{0xQRFMBY.chunk.js → CkYqp83j.chunk.js} +2 -2
  67. package/dist/scripts/{0xQRFMBY.chunk.js.map → CkYqp83j.chunk.js.map} +1 -1
  68. package/dist/scripts/{DvL3J2BU.chunk.js → CrCAJmt6.chunk.js} +2 -2
  69. package/dist/scripts/{DvL3J2BU.chunk.js.map → CrCAJmt6.chunk.js.map} +1 -1
  70. package/dist/scripts/{CcDgbmw52.chunk.js → CsC3VVvE2.chunk.js} +2 -2
  71. package/dist/scripts/{CcDgbmw52.chunk.js.map → CsC3VVvE2.chunk.js.map} +1 -1
  72. package/dist/scripts/{C9UjF0q6.chunk.js → D0SYGnyF.chunk.js} +2 -2
  73. package/dist/scripts/{C9UjF0q6.chunk.js.map → D0SYGnyF.chunk.js.map} +1 -1
  74. package/dist/scripts/{BqO6i89w2.chunk.js → D7tastET2.chunk.js} +2 -2
  75. package/dist/scripts/{BqO6i89w2.chunk.js.map → D7tastET2.chunk.js.map} +1 -1
  76. package/dist/scripts/{CeI-LCE-.chunk.js → DIavEegC.chunk.js} +2 -2
  77. package/dist/scripts/{CeI-LCE-.chunk.js.map → DIavEegC.chunk.js.map} +1 -1
  78. package/dist/scripts/{BKbKu9Rp.chunk.js → DK3xia1t.chunk.js} +2 -2
  79. package/dist/scripts/{BKbKu9Rp.chunk.js.map → DK3xia1t.chunk.js.map} +1 -1
  80. package/dist/scripts/{BCdnm1Nn.chunk.js → DKnZ8BaN.chunk.js} +2 -2
  81. package/dist/scripts/{BCdnm1Nn.chunk.js.map → DKnZ8BaN.chunk.js.map} +1 -1
  82. package/dist/scripts/{awemA_vU2.chunk.js → DO8_mR5i2.chunk.js} +2 -2
  83. package/dist/scripts/{awemA_vU2.chunk.js.map → DO8_mR5i2.chunk.js.map} +1 -1
  84. package/dist/scripts/{DlQrdOls.chunk.js → DR80oZtZ.chunk.js} +2 -2
  85. package/dist/scripts/{DlQrdOls.chunk.js.map → DR80oZtZ.chunk.js.map} +1 -1
  86. package/dist/scripts/{DMq5Gp-U2.chunk.js → DU1SE31v2.chunk.js} +2 -2
  87. package/dist/scripts/{DMq5Gp-U2.chunk.js.map → DU1SE31v2.chunk.js.map} +1 -1
  88. package/dist/scripts/{XnBhLH-02.chunk.js → Dj4AeYQQ2.chunk.js} +2 -2
  89. package/dist/scripts/{XnBhLH-02.chunk.js.map → Dj4AeYQQ2.chunk.js.map} +1 -1
  90. package/dist/scripts/{CmrPRojb.chunk.js → DnSy_Myx.chunk.js} +2 -2
  91. package/dist/scripts/{CmrPRojb.chunk.js.map → DnSy_Myx.chunk.js.map} +1 -1
  92. package/dist/scripts/{D0vsmyva.chunk.js → Dr1flAez.chunk.js} +2 -2
  93. package/dist/scripts/{D0vsmyva.chunk.js.map → Dr1flAez.chunk.js.map} +1 -1
  94. package/dist/scripts/{BXT8nHry2.chunk.js → DwzBzBlI2.chunk.js} +2 -2
  95. package/dist/scripts/{BXT8nHry2.chunk.js.map → DwzBzBlI2.chunk.js.map} +1 -1
  96. package/dist/scripts/{CvqqZmNo2.chunk.js → DyT1OGvP2.chunk.js} +2 -2
  97. package/dist/scripts/{CvqqZmNo2.chunk.js.map → DyT1OGvP2.chunk.js.map} +1 -1
  98. package/dist/scripts/{E9tNds1l.chunk.js → Llxar-VU.chunk.js} +2 -2
  99. package/dist/scripts/{E9tNds1l.chunk.js.map → Llxar-VU.chunk.js.map} +1 -1
  100. package/dist/scripts/{app-B1XBsz23.js → app-BIigh9wv.js} +4 -4
  101. package/dist/scripts/{app-B1XBsz23.js.map → app-BIigh9wv.js.map} +1 -1
  102. package/dist/scripts/{BMl02f_62.chunk.js → bycmewy72.chunk.js} +2 -2
  103. package/dist/scripts/{BMl02f_62.chunk.js.map → bycmewy72.chunk.js.map} +1 -1
  104. package/dist/scripts/{DmfbtOlu.chunk.js → jWpq99N3.chunk.js} +2 -2
  105. package/dist/scripts/{DmfbtOlu.chunk.js.map → jWpq99N3.chunk.js.map} +1 -1
  106. package/dist/scripts/{BDliRFoa.chunk.js → oTYyWWB-.chunk.js} +2 -2
  107. package/dist/scripts/{BDliRFoa.chunk.js.map → oTYyWWB-.chunk.js.map} +1 -1
  108. package/dist/scripts/{lokG7Sha2.chunk.js → qcrBN1zR2.chunk.js} +2 -2
  109. package/dist/scripts/{lokG7Sha2.chunk.js.map → qcrBN1zR2.chunk.js.map} +1 -1
  110. package/dist/scripts/{UAcFqQzZ.chunk.js → smdLElLq.chunk.js} +2 -2
  111. package/dist/scripts/{UAcFqQzZ.chunk.js.map → smdLElLq.chunk.js.map} +1 -1
  112. package/dist/scripts/{D8_5yfHY2.chunk.js → tYi-sUb22.chunk.js} +2 -2
  113. package/dist/scripts/{D8_5yfHY2.chunk.js.map → tYi-sUb22.chunk.js.map} +1 -1
  114. package/package.json +1 -1
  115. package/dist/scripts/D5Jnyjf8.chunk.js +0 -1
@@ -1,2 +1,2 @@
1
- import{gt as e}from"./Dp9qJj1C.chunk.js";import{t}from"./BJvPfCvt.chunk.js";import{t as n}from"./ImQRQGZr.chunk.js";import{C as r,dt as i,l as a,lt as o,m as s,n as c,ut as l}from"./Dun43GrB.chunk.js";import{t as u}from"./CFXUbsBS.chunk.js";import{n as d,t as f}from"./Ca1QPe-q2.chunk.js";import{n as p}from"./iuoIcGAm2.chunk.js";import{Z as m}from"./app-B1XBsz23.js";import{t as h}from"./DXfGdqxs.chunk.js";import{r as g}from"./B-6uVsUw2.chunk.js";import{t as _}from"./CyxOxJjg2.chunk.js";import{t as v}from"./Dd8r1SE32.chunk.js";import{t as y}from"./Bt57Tmef2.chunk.js";import{t as b}from"./DrgVCnQA2.chunk.js";var x={cellDate:`_cellDate_vp37w_1`,label:`_label_vp37w_13`,isHovering:`_isHovering_vp37w_16`,numberWrapper:`_numberWrapper_vp37w_19`},S=e(l()),C=o(),w=n.encloseNamespace(`specialEventCalendar.calendarCellDate`);function T(e){let t=u.isSame(m.convertUTCToTimezoneDate(new Date().toISOString(),e.timezone||null),e.date,`day`),n=`${x.cellDate} d-flex flex-nowrap`;t&&(n+=` bg-dark text-white`),e.hasEvent?n+=` text-white`:e.notCurrentMonth&&!e.isHovering&&(n+=` text-secondary`),e.className&&(n+=` ${e.className}`);let[r,i]=p({delay:250});return(0,C.jsxs)(`div`,{className:`${n} ${i?x.isHovering:``}`,ref:r,children:[(0,C.jsx)(`div`,{className:`${x.numberWrapper} d-flex text-center justify-content-center align-items-center flex-shrink-0`,children:u.format(e.date,`D`)}),t&&(0,C.jsx)(`div`,{className:`${x.label} justify-content-start align-items-center`,children:w(`today`)})]})}var E={sliderDot:`_sliderDot_umrgt_1`,sm:`_sm_umrgt_6`,active:`_active_umrgt_10`,dotContainer:`_dotContainer_umrgt_13`,defaultCursor:`_defaultCursor_umrgt_16`};function D(e){function t(t,n){t.stopPropagation(),t.preventDefault(),e.onSliderDotClick(n)}function n(t,n){let r=`${E.sliderDot} rounded-3`;return t&&(r+=` ${E.active}`),e.size===`sm`&&(r+=` ${E.sm}`),e.isDisabled?.(n)&&(r+=` pointer-events-none ${E.defaultCursor}`),r}return(0,C.jsx)(`div`,{className:`${e.className} w-100 d-flex justify-content-around`,children:(0,C.jsx)(`div`,{className:`${E.dotContainer} d-flex`,children:[...Array(e.sliderLength)].map((r,i)=>(0,C.jsx)(d,{className:n(i===e.sliderStep,i),onClick:e=>t?.(e,i)},i))})})}var O={hardcodedCover:`_hardcodedCover_1kbjb_1`,tag:`_tag_1kbjb_1`,date:`_date_1kbjb_1`,backgroundImage:`_backgroundImage_1kbjb_1`,eventCard:`_eventCard_1kbjb_1`,wrapper:`_wrapper_1kbjb_5`,left:`_left_1kbjb_5`,right:`_right_1kbjb_8`,noAnimation:`_noAnimation_1kbjb_22`,cover:`_cover_1kbjb_25`,tagWrap:`_tagWrap_1kbjb_35`,appear:`_appear_1kbjb_46`,displayDate:`_displayDate_1kbjb_49`,title:`_title_1kbjb_53`,titleText:`_titleText_1kbjb_56`,circle:`_circle_1kbjb_71`,active:`_active_1kbjb_78`,arrow:`_arrow_1kbjb_90`,bottomBar:`_bottomBar_1kbjb_108`,bottomPlaceholder:`_bottomPlaceholder_1kbjb_112`,multiEventFilter:`_multiEventFilter_1kbjb_126`};k.defaultProps={responsiveText:!0};function k(e){let{sliderStep:n,setSliderStep:o}=e,l=e.fadePastEvents?V(e.eventsOnDay):e.eventsOnDay,p=e.eventsOnDay.length>1,m=l.find((e,t)=>t===n)||l[0],x=!!m.endDate,w=e.getBackgroundColor?.(m.content),E=e.getHardCodedEvent?.(m.content),k=e.getIconUrl?.(m.content),A=e.getCoverUrl?.(m.content),j=m.content.status===b.ComingSoon,[M,N]=S.useState(e.hasInitialized?O.appear:``);S.useEffect(()=>{if(!e.hasInitialized){let t=Math.floor(Math.random()*600+400);window.setTimeout(()=>{N(O.appear),window.setTimeout(()=>{e.setHasInitialized(!0)},400)},t)}},[e.hasInitialized]),S.useEffect(()=>{e.isHovering&&e.setHoveredEvent(m)},[e.isHovering,m]),S.useEffect(()=>()=>{e.isHovering&&e.hoveredEvent?.specialEventId===m.specialEventId&&e.setHoveredEvent(null)},[e.isHovering,e.hoveredEvent,m]);function P(){return p?e.getEventsListAppLink?.():j?null:e.getTopicAppLink?.(m.content,i.slugify(m.name))}function F(){let t={date:u.format(e.date,`YYYY-MM-DD`),presentationId:e.presentationId,eventCount:e.eventsOnDay.length};return p?(t.eventId=e.eventsOnDay.map(e=>e.specialEventId).join(`,`),t.topicId=e.eventsOnDay.map(e=>e.content.id).join(`,`)):(t.eventId=m.specialEventId,t.topicId=m.content.id,t.eventStatus=m.content.status),t}let I=F(),L={actionType:r.Click,entity:a.SpecialEvent,location:s.CalendarDay};function R(e){return u.format(e,`YYYY-MM-DD`)}function z(){return`${e.className} ${M} `+[E?`${O.hardcodedCover} position-absolute`:O.backgroundImage,k?`my-auto`:O.cover,j?O.comingSoon:``,e.hasInitialized?O.noAnimation:``,e.isHovering?`rounded-3`:``,e.isMultiEventDate?O.multiEventFilter:``,`company`in m.content?`rounded-circle`:``].join(` `)}function B(e){return`startDateTime`in e.content?u.isBefore(e.content.startDateTime,new Date):!1}function V(e){return e.sort((e,t)=>!B(e)&&B(t)?1:B(e)&&!B(t)?-1:0)}return(0,C.jsx)(`div`,{onClick:()=>{j&&c.logUserAction(I,L)},children:(0,C.jsxs)(f,{appLink:P(),analyticsOptions:L,analyticsData:I,className:`position-absolute top-0 start-0 h-100 w-100 text-shadow ${O.wrapper}`,labelledBy:`calendarEvent`,children:[(0,C.jsx)(`div`,{className:`${O.tagWrap} p-1`,children:j&&(0,C.jsx)(_,{className:`justify-content-center p-0 rounded-circle ${O.tag} ${M}`,onlyIcon:!0})}),!e.hideDay&&(0,C.jsx)(T,{date:e.date,notCurrentMonth:e.notCurrentMonth,className:`${O.date} ${M}`,isHovering:e.isHovering,timezone:e.timezone,hasEvent:!0}),(0,C.jsxs)(`div`,{style:{backgroundColor:w},className:`position-absolute d-flex flex-column justify-content-end align-items-center text-white px-1 pt-2 pb-1 ${O.eventCard} ${M} ${e.isHovering?`rounded-3`:``} ${e.isMultiEventDate?O.multiEventFilter:``} ${e.className} ${!e.isHovering&&B(m)?`opacity-50`:``}`,children:[k&&(0,C.jsx)(y,{src:k,alt:m.content.name,className:z()}),A&&!k&&(0,C.jsx)(`div`,{style:{backgroundImage:`url('${A}')`},className:z()}),x&&(0,C.jsx)(`div`,{className:`${O.displayDate}`,children:v.getDisplayDate(m.startDate,m.endDate)}),(0,C.jsx)(`div`,{className:`text-center ${O.title} ${p?`mb-1`:`mb-2`}`,children:(0,C.jsx)(`p`,{id:`calendarEvent`,className:`${e.responsiveText?O.titleText:``} ${e.isHovering?`mb-0`:`clamp-2`} h6`,title:m.name,children:m.name})}),p&&n!==0&&(0,C.jsx)(`div`,{className:`position-absolute bg-white rounded-circle ${O.left}`,children:(0,C.jsx)(d,{onClick:t=>{t.stopPropagation(),t.preventDefault(),o(e=>e-1),c.logUserAction({date:R(e.date),action:`previous`,eventCount:e.eventsOnDay.length},L)},children:(0,C.jsx)(t,{svg:h,className:`d-inline-block svg-container text-dark ${O.arrow}`})})}),p&&n!==e.eventsOnDay.length-1&&(0,C.jsx)(`div`,{className:`position-absolute bg-white rounded-circle ${O.right}`,children:(0,C.jsx)(d,{onClick:t=>{t.stopPropagation(),t.preventDefault(),o(e=>e+1),c.logUserAction({date:R(e.date),action:`next`,eventCount:e.eventsOnDay.length},L)},children:(0,C.jsx)(t,{svg:g,className:`d-inline-block svg-container text-dark ${O.arrow}`})})}),p&&(0,C.jsx)(`div`,{className:`d-flex ${O.bottomBar} ${p?``:O.bottomPlaceholder}`,children:(0,C.jsx)(D,{sliderStep:n,sliderLength:e.eventsOnDay.length,size:`sm`,className:`${e.isHovering?`mb-2`:`mb-1`}`,onSliderDotClick:t=>{o(t),c.logUserAction({date:R(e.date),action:`jump`,eventCount:e.eventsOnDay.length},L)}})})]})]})})}var A={cell:`_cell_34fbn_1`,multiEventCell:`_multiEventCell_34fbn_4`,fadeIn:`_fadeIn_34fbn_1`};function j(e){let t=S.useMemo(()=>e.hoveredEvent?.endDate&&!u.isSame(e.date,e.hoveredEvent?.startDate)&&u.isBetween(u.format(e.date,`YYYY-MM-DD`),e.hoveredEvent?.startDate,e.hoveredEvent?.endDate),[e.hoveredEvent]),n=e.hoveredEvent?e.getBackgroundColor?.(e.hoveredEvent.content):null;return(0,C.jsxs)(`div`,{className:`${A.cell} fw-semibold`,children:[!e.hideDay&&(0,C.jsx)(T,{date:e.date,notCurrentMonth:e.notCurrentMonth,timezone:e.timezone}),t&&!e.isHovering&&(0,C.jsx)(`div`,{style:{backgroundColor:n},className:A.multiEventCell}),e.eventsOnDay?.length>0&&(0,C.jsx)(k,{...e,isMultiEventDate:t&&!e.isHovering})]})}export{j as t};
2
- //# sourceMappingURL=awemA_vU2.chunk.js.map
1
+ import{gt as e}from"./Dp9qJj1C.chunk.js";import{t}from"./BJvPfCvt.chunk.js";import{t as n}from"./ImQRQGZr.chunk.js";import{C as r,dt as i,l as a,lt as o,m as s,n as c,ut as l}from"./Dun43GrB.chunk.js";import{t as u}from"./CFXUbsBS.chunk.js";import{n as d,t as f}from"./Ca1QPe-q2.chunk.js";import{n as p}from"./iuoIcGAm2.chunk.js";import{Z as m}from"./app-BIigh9wv.js";import{t as h}from"./DXfGdqxs.chunk.js";import{r as g}from"./B-6uVsUw2.chunk.js";import{t as _}from"./CyxOxJjg2.chunk.js";import{t as v}from"./BsAo7Lri2.chunk.js";import{t as y}from"./Bt57Tmef2.chunk.js";import{t as b}from"./DrgVCnQA2.chunk.js";var x={cellDate:`_cellDate_vp37w_1`,label:`_label_vp37w_13`,isHovering:`_isHovering_vp37w_16`,numberWrapper:`_numberWrapper_vp37w_19`},S=e(l()),C=o(),w=n.encloseNamespace(`specialEventCalendar.calendarCellDate`);function T(e){let t=u.isSame(m.convertUTCToTimezoneDate(new Date().toISOString(),e.timezone||null),e.date,`day`),n=`${x.cellDate} d-flex flex-nowrap`;t&&(n+=` bg-dark text-white`),e.hasEvent?n+=` text-white`:e.notCurrentMonth&&!e.isHovering&&(n+=` text-secondary`),e.className&&(n+=` ${e.className}`);let[r,i]=p({delay:250});return(0,C.jsxs)(`div`,{className:`${n} ${i?x.isHovering:``}`,ref:r,children:[(0,C.jsx)(`div`,{className:`${x.numberWrapper} d-flex text-center justify-content-center align-items-center flex-shrink-0`,children:u.format(e.date,`D`)}),t&&(0,C.jsx)(`div`,{className:`${x.label} justify-content-start align-items-center`,children:w(`today`)})]})}var E={sliderDot:`_sliderDot_umrgt_1`,sm:`_sm_umrgt_6`,active:`_active_umrgt_10`,dotContainer:`_dotContainer_umrgt_13`,defaultCursor:`_defaultCursor_umrgt_16`};function D(e){function t(t,n){t.stopPropagation(),t.preventDefault(),e.onSliderDotClick(n)}function n(t,n){let r=`${E.sliderDot} rounded-3`;return t&&(r+=` ${E.active}`),e.size===`sm`&&(r+=` ${E.sm}`),e.isDisabled?.(n)&&(r+=` pointer-events-none ${E.defaultCursor}`),r}return(0,C.jsx)(`div`,{className:`${e.className} w-100 d-flex justify-content-around`,children:(0,C.jsx)(`div`,{className:`${E.dotContainer} d-flex`,children:[...Array(e.sliderLength)].map((r,i)=>(0,C.jsx)(d,{className:n(i===e.sliderStep,i),onClick:e=>t?.(e,i)},i))})})}var O={hardcodedCover:`_hardcodedCover_1kbjb_1`,tag:`_tag_1kbjb_1`,date:`_date_1kbjb_1`,backgroundImage:`_backgroundImage_1kbjb_1`,eventCard:`_eventCard_1kbjb_1`,wrapper:`_wrapper_1kbjb_5`,left:`_left_1kbjb_5`,right:`_right_1kbjb_8`,noAnimation:`_noAnimation_1kbjb_22`,cover:`_cover_1kbjb_25`,tagWrap:`_tagWrap_1kbjb_35`,appear:`_appear_1kbjb_46`,displayDate:`_displayDate_1kbjb_49`,title:`_title_1kbjb_53`,titleText:`_titleText_1kbjb_56`,circle:`_circle_1kbjb_71`,active:`_active_1kbjb_78`,arrow:`_arrow_1kbjb_90`,bottomBar:`_bottomBar_1kbjb_108`,bottomPlaceholder:`_bottomPlaceholder_1kbjb_112`,multiEventFilter:`_multiEventFilter_1kbjb_126`};k.defaultProps={responsiveText:!0};function k(e){let{sliderStep:n,setSliderStep:o}=e,l=e.fadePastEvents?V(e.eventsOnDay):e.eventsOnDay,p=e.eventsOnDay.length>1,m=l.find((e,t)=>t===n)||l[0],x=!!m.endDate,w=e.getBackgroundColor?.(m.content),E=e.getHardCodedEvent?.(m.content),k=e.getIconUrl?.(m.content),A=e.getCoverUrl?.(m.content),j=m.content.status===b.ComingSoon,[M,N]=S.useState(e.hasInitialized?O.appear:``);S.useEffect(()=>{if(!e.hasInitialized){let t=Math.floor(Math.random()*600+400);window.setTimeout(()=>{N(O.appear),window.setTimeout(()=>{e.setHasInitialized(!0)},400)},t)}},[e.hasInitialized]),S.useEffect(()=>{e.isHovering&&e.setHoveredEvent(m)},[e.isHovering,m]),S.useEffect(()=>()=>{e.isHovering&&e.hoveredEvent?.specialEventId===m.specialEventId&&e.setHoveredEvent(null)},[e.isHovering,e.hoveredEvent,m]);function P(){return p?e.getEventsListAppLink?.():j?null:e.getTopicAppLink?.(m.content,i.slugify(m.name))}function F(){let t={date:u.format(e.date,`YYYY-MM-DD`),presentationId:e.presentationId,eventCount:e.eventsOnDay.length};return p?(t.eventId=e.eventsOnDay.map(e=>e.specialEventId).join(`,`),t.topicId=e.eventsOnDay.map(e=>e.content.id).join(`,`)):(t.eventId=m.specialEventId,t.topicId=m.content.id,t.eventStatus=m.content.status),t}let I=F(),L={actionType:r.Click,entity:a.SpecialEvent,location:s.CalendarDay};function R(e){return u.format(e,`YYYY-MM-DD`)}function z(){return`${e.className} ${M} `+[E?`${O.hardcodedCover} position-absolute`:O.backgroundImage,k?`my-auto`:O.cover,j?O.comingSoon:``,e.hasInitialized?O.noAnimation:``,e.isHovering?`rounded-3`:``,e.isMultiEventDate?O.multiEventFilter:``,`company`in m.content?`rounded-circle`:``].join(` `)}function B(e){return`startDateTime`in e.content?u.isBefore(e.content.startDateTime,new Date):!1}function V(e){return e.sort((e,t)=>!B(e)&&B(t)?1:B(e)&&!B(t)?-1:0)}return(0,C.jsx)(`div`,{onClick:()=>{j&&c.logUserAction(I,L)},children:(0,C.jsxs)(f,{appLink:P(),analyticsOptions:L,analyticsData:I,className:`position-absolute top-0 start-0 h-100 w-100 text-shadow ${O.wrapper}`,labelledBy:`calendarEvent`,children:[(0,C.jsx)(`div`,{className:`${O.tagWrap} p-1`,children:j&&(0,C.jsx)(_,{className:`justify-content-center p-0 rounded-circle ${O.tag} ${M}`,onlyIcon:!0})}),!e.hideDay&&(0,C.jsx)(T,{date:e.date,notCurrentMonth:e.notCurrentMonth,className:`${O.date} ${M}`,isHovering:e.isHovering,timezone:e.timezone,hasEvent:!0}),(0,C.jsxs)(`div`,{style:{backgroundColor:w},className:`position-absolute d-flex flex-column justify-content-end align-items-center text-white px-1 pt-2 pb-1 ${O.eventCard} ${M} ${e.isHovering?`rounded-3`:``} ${e.isMultiEventDate?O.multiEventFilter:``} ${e.className} ${!e.isHovering&&B(m)?`opacity-50`:``}`,children:[k&&(0,C.jsx)(y,{src:k,alt:m.content.name,className:z()}),A&&!k&&(0,C.jsx)(`div`,{style:{backgroundImage:`url('${A}')`},className:z()}),x&&(0,C.jsx)(`div`,{className:`${O.displayDate}`,children:v.getDisplayDate(m.startDate,m.endDate)}),(0,C.jsx)(`div`,{className:`text-center ${O.title} ${p?`mb-1`:`mb-2`}`,children:(0,C.jsx)(`p`,{id:`calendarEvent`,className:`${e.responsiveText?O.titleText:``} ${e.isHovering?`mb-0`:`clamp-2`} h6`,title:m.name,children:m.name})}),p&&n!==0&&(0,C.jsx)(`div`,{className:`position-absolute bg-white rounded-circle ${O.left}`,children:(0,C.jsx)(d,{onClick:t=>{t.stopPropagation(),t.preventDefault(),o(e=>e-1),c.logUserAction({date:R(e.date),action:`previous`,eventCount:e.eventsOnDay.length},L)},children:(0,C.jsx)(t,{svg:h,className:`d-inline-block svg-container text-dark ${O.arrow}`})})}),p&&n!==e.eventsOnDay.length-1&&(0,C.jsx)(`div`,{className:`position-absolute bg-white rounded-circle ${O.right}`,children:(0,C.jsx)(d,{onClick:t=>{t.stopPropagation(),t.preventDefault(),o(e=>e+1),c.logUserAction({date:R(e.date),action:`next`,eventCount:e.eventsOnDay.length},L)},children:(0,C.jsx)(t,{svg:g,className:`d-inline-block svg-container text-dark ${O.arrow}`})})}),p&&(0,C.jsx)(`div`,{className:`d-flex ${O.bottomBar} ${p?``:O.bottomPlaceholder}`,children:(0,C.jsx)(D,{sliderStep:n,sliderLength:e.eventsOnDay.length,size:`sm`,className:`${e.isHovering?`mb-2`:`mb-1`}`,onSliderDotClick:t=>{o(t),c.logUserAction({date:R(e.date),action:`jump`,eventCount:e.eventsOnDay.length},L)}})})]})]})})}var A={cell:`_cell_34fbn_1`,multiEventCell:`_multiEventCell_34fbn_4`,fadeIn:`_fadeIn_34fbn_1`};function j(e){let t=S.useMemo(()=>e.hoveredEvent?.endDate&&!u.isSame(e.date,e.hoveredEvent?.startDate)&&u.isBetween(u.format(e.date,`YYYY-MM-DD`),e.hoveredEvent?.startDate,e.hoveredEvent?.endDate),[e.hoveredEvent]),n=e.hoveredEvent?e.getBackgroundColor?.(e.hoveredEvent.content):null;return(0,C.jsxs)(`div`,{className:`${A.cell} fw-semibold`,children:[!e.hideDay&&(0,C.jsx)(T,{date:e.date,notCurrentMonth:e.notCurrentMonth,timezone:e.timezone}),t&&!e.isHovering&&(0,C.jsx)(`div`,{style:{backgroundColor:n},className:A.multiEventCell}),e.eventsOnDay?.length>0&&(0,C.jsx)(k,{...e,isMultiEventDate:t&&!e.isHovering})]})}export{j as t};
2
+ //# sourceMappingURL=DO8_mR5i2.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"awemA_vU2.chunk.js","names":[],"sources":["../../../../libs/shared/src/apps/calendar/components/calendar-cell-date/calendar-cell-date.module.scss","../../../../libs/shared/src/apps/calendar/components/calendar-cell-date/CalendarCellDate.tsx","../../../../libs/shared/src/components/slider-dots/slider-dots.module.scss","../../../../libs/shared/src/components/slider-dots/SliderDots.tsx","../../../../libs/shared/src/apps/calendar/components/calendar-events/calendar-events.module.scss","../../../../libs/shared/src/apps/calendar/components/calendar-events/CalendarEvents.tsx","../../../../libs/shared/src/apps/calendar/components/calendar-day/calendar-day.module.scss","../../../../libs/shared/src/apps/calendar/components/calendar-day/CalendarDay.tsx"],"sourcesContent":[":local {\n .cellDate {\n z-index: 100;\n position: absolute;\n top: map-get($spacers, 1);\n left: map-get($spacers, 1);\n width: 2rem;\n height: 2rem;\n border-radius: 2rem;\n line-height: 0;\n transition: width 150ms ease-in !important;\n overflow: hidden;\n .label{\n display: flex;\n }\n &.isHovering {\n width: 5.18rem;\n }\n }\n\n .numberWrapper {\n width: 2rem;\n height: 2rem;\n border-radius: 2rem;\n }\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { Timezone } from 'libs/shared/apps/streamable-learning/constants/Timezones';\nimport { TimezoneHelper } from 'libs/shared/apps/streamable-learning/utils/TimezoneHelper';\nimport { useHoverIntent } from 'libs/shared/hooks/UseHover';\n\nimport styles from './calendar-cell-date.module.scss';\n\nconst namespace = 'specialEventCalendar.calendarCellDate';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface CalendarCellDateProps {\n date: Date;\n notCurrentMonth: boolean;\n hasEvent?: boolean;\n className?: string;\n isHovering?: boolean;\n timezone?: Timezone;\n}\n\nexport function CalendarCellDate(props: CalendarCellDateProps): JSX.Element {\n const isToday = DateHelper.isSame(\n TimezoneHelper.convertUTCToTimezoneDate(new Date().toISOString(), props.timezone || null),\n props.date,\n 'day'\n );\n\n let dateClassName = `${styles.cellDate} d-flex flex-nowrap`;\n if (isToday)\n dateClassName += ' bg-dark text-white';\n if (props.hasEvent)\n dateClassName += ' text-white';\n else if (props.notCurrentMonth && !props.isHovering)\n dateClassName += ' text-secondary';\n if (props.className)\n dateClassName += ` ${props.className}`;\n \n const numberClassName = 'd-flex text-center justify-content-center align-items-center flex-shrink-0';\n const [ ref, isHovering ] = useHoverIntent<HTMLDivElement>({ delay: 250 });\n\n return (\n <div className={`${dateClassName} ${isHovering ? styles.isHovering : ''}`} ref={ref}>\n <div className={`${styles.numberWrapper} ${numberClassName}`}>\n {DateHelper.format(props.date, 'D')}\n </div>\n {isToday && (\n <div className={`${styles.label} justify-content-start align-items-center`}>\n {getPhrase('today')}\n </div>\n )}\n </div>\n );\n}\n",":local {\n .sliderDot {\n width: 0.5rem;\n height: 0.5rem;\n background-color: $gray-400;\n\n &.sm {\n width: 0.3125rem;\n height: 0.3125rem;\n }\n\n &.active {\n background-color: $blue;\n }\n }\n\n .dotContainer {\n gap: 0.625rem;\n }\n \n .defaultCursor {\n cursor: initial !important;\n }\n}","import React from 'react';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\n\nimport styles from './slider-dots.module.scss';\n\ninterface SliderDotsProps {\n sliderStep: number;\n sliderLength: number;\n onSliderDotClick: (i: number) => void;\n isDisabled?: (indicatorIndex: number) => boolean;\n\n size?: 'sm' | 'md';\n className?: string;\n}\n\nexport function SliderDots(props: SliderDotsProps) {\n function onSliderDotClick(e: MouseEvent, i: number) {\n e.stopPropagation();\n e.preventDefault();\n props.onSliderDotClick(i);\n }\n\n function getSliderDotClassName(active: boolean, index: number) {\n let className = `${styles.sliderDot} rounded-3`;\n\n if (active)\n className += ` ${styles.active}`;\n\n if (props.size === 'sm')\n className += ` ${styles.sm}`;\n\n if (props.isDisabled?.(index))\n className += ` pointer-events-none ${styles.defaultCursor}`;\n\n return className;\n }\n \n return (\n <div className={`${props.className} w-100 d-flex justify-content-around`}>\n <div className={`${styles.dotContainer} d-flex`}>\n {[...Array(props.sliderLength)].map((_, i) => {\n const active = i === props.sliderStep;\n\n return (\n <DivButton\n key={i}\n className={getSliderDotClassName(active, i)}\n onClick={e => onSliderDotClick?.(e, i)}\n />\n );\n })}\n </div>\n </div>\n );\n}\n","@import '~styles/utils/mixins';\n@import '~styles/utils/include-media';\n:local {\n $button-bottom: 2.15rem;\n $circle-size: map-get($spacers, 1);\n \n %fade-in {\n opacity: 0;\n transition: opacity 400ms ease-in;\n }\n\n %slider-on-hover {\n display: none;\n &:hover{\n display: block;\n }\n }\n\n .wrapper {\n &:hover{\n .left {\n display: block;\n }\n .right {\n display: block;\n }\n }\n }\n\n .eventCard {\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n @extend %fade-in;\n //fall-back color\n background-color: $gray-900;\n\n }\n .backgroundImage {\n height: 4.5rem;\n width: 4.5rem;\n \n @extend %fade-in;\n &.noAnimation {\n transition: none;\n }\n &.cover{\n top:0;\n left:0;\n width: 100%;\n height: 100%;\n z-index: 1;\n background-repeat: no-repeat;\n background-position: 0 0 !important;\n background-size: cover;\n }\n }\n \n .date {\n @extend %fade-in;\n }\n\n .tagWrap {\n z-index: 4;\n position: absolute;\n right: 0;\n }\n\n .tag {\n @extend %fade-in;\n width: 2rem;\n height: 2rem;\n top: map-get($spacers, 1);\n right: map-get($spacers, 1);\n }\n\n .appear {\n opacity: 1;\n }\n\n .displayDate {\n font-size: 0.625rem;\n z-index: 2;\n }\n\n .title {\n z-index: 2;\n }\n\n $title-font-size: clamp(0.75rem, 1.25vw, 1rem);\n .titleText {\n font-size: $title-font-size;\n padding-bottom: calc($title-font-size * 0.05) !important;\n\n @include media('<=sm') {\n @include clamp(1);\n }\n }\n\n .circle {\n width: $circle-size;\n height: $circle-size;\n border-radius: 50%;\n background-color: $gray-400;\n z-index: 2;\n\n &.active {\n background-color: $blue;\n }\n\n &:not(:last-child) {\n margin-right: map-get($spacers, 2);\n }\n }\n\n .left {\n left: map-get($spacers, 1);\n bottom: 50%;\n transform: translateY(50%);\n z-index: 2;\n .arrow {\n padding-right: 0.1rem;\n }\n display: none;\n\n }\n .right {\n right: map-get($spacers, 1);\n bottom: 50%;\n transform: translateY(50%);\n z-index: 2;\n .arrow {\n padding-left: 0.1rem;\n }\n display: none;\n\n }\n .bottomBar {\n z-index: 3;\n margin-top: 0.125rem;\n }\n .bottomPlaceholder {\n visibility: hidden;\n }\n\n .hardcodedCover {\n top:0;\n left:0;\n width: 100%;\n height: 100%;\n z-index: 1;\n background-size: 100%;\n @extend %fade-in;\n &.noAnimation {\n transition: none;\n }\n }\n\n .multiEventFilter {\n &::before {\n content: '';\n position: absolute;\n height: 100%;\n width: 100%;\n top: 0;\n left: 0;\n background: rgba(255, 255, 255, 0.4);\n }\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, EntityType, HashObject, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { CalendarCellDate } from 'libs/shared/apps/calendar/components/calendar-cell-date/CalendarCellDate';\nimport { ComingSoonTag } from 'libs/shared/apps/calendar/components/coming-soon-tag/ComingSoonTag';\nimport { CalendarCellProps } from 'libs/shared/apps/calendar/interfaces/CalendarCellProps';\nimport { SpecialEventHelper } from 'libs/shared/apps/calendar/utils/SpecialEventHelper';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { HoverableProps } from 'libs/shared/components/hover-to-portal-container/HoverToPortalContainer';\nimport { LazyImage } from 'libs/shared/components/lazy-image/LazyImage';\nimport { SliderDots } from 'libs/shared/components/slider-dots/SliderDots';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { ChevronLeftSvg } from 'libs/shared/images/svg/arrows/ChevronLeftSvg';\nimport { ChevronRightSvg } from 'libs/shared/images/svg/arrows/ChevronRightSvg';\nimport { CalendarEvent, CalendarEventContent } from 'libs/shared/interfaces';\n\nimport styles from './calendar-events.module.scss';\n\ntype CalendarEventsProps = HoverableProps & CalendarCellProps;\n\nCalendarEvents.defaultProps = {\n responsiveText: true\n};\n\nexport function CalendarEvents(props: CalendarEventsProps): JSX.Element {\n const { sliderStep, setSliderStep } = props;\n\n const sortedEventsOnDay = props.fadePastEvents ? sortPastEvents(props.eventsOnDay) : props.eventsOnDay;\n const multiEvents = props.eventsOnDay.length > 1;\n const displayedEvent = sortedEventsOnDay.find((e, idx) => idx === sliderStep) || sortedEventsOnDay[0];\n const multiDayEvent = !!displayedEvent.endDate;\n\n const backgroundColor = props.getBackgroundColor?.(displayedEvent.content);\n\n const hardCodedEvent = props.getHardCodedEvent?.(displayedEvent.content);\n\n const iconUrl = props.getIconUrl?.(displayedEvent.content);\n const coverUrl = props.getCoverUrl?.(displayedEvent.content);\n\n const isComingSoon = displayedEvent.content.status === ClassificationStatus.ComingSoon;\n\n const [ className, setClassName ] = React.useState(!props.hasInitialized ? '' : styles.appear);\n\n React.useEffect(() => {\n if (!props.hasInitialized) {\n // a random number between 400 and 1000\n const randomNumber = Math.floor(Math.random() * 600 + 400);\n window.setTimeout(() => {\n setClassName(styles.appear);\n window.setTimeout(() => {\n props.setHasInitialized(true);\n }, 400);\n }, randomNumber);\n }\n }, [props.hasInitialized]);\n\n React.useEffect(() => {\n if (props.isHovering) {\n props.setHoveredEvent(displayedEvent);\n }\n }, [ props.isHovering, displayedEvent ]);\n\n React.useEffect(() => {\n return () => {\n if (props.isHovering && props.hoveredEvent?.specialEventId === displayedEvent.specialEventId) {\n props.setHoveredEvent(null);\n }\n };\n }, [ props.isHovering, props.hoveredEvent, displayedEvent ]);\n\n function getAppLink(): Core.AppLink {\n if (multiEvents)\n return props.getEventsListAppLink?.();\n\n if (isComingSoon)\n return null;\n\n return props.getTopicAppLink?.(displayedEvent.content, TextHelper.slugify(displayedEvent.name));\n }\n\n function getAnalyticsData() {\n const analyticsData: HashObject = {\n date: DateHelper.format(props.date, 'YYYY-MM-DD'),\n presentationId: props.presentationId,\n eventCount: props.eventsOnDay.length\n };\n\n if (multiEvents) {\n analyticsData.eventId = props.eventsOnDay.map(e => e.specialEventId).join(',');\n analyticsData.topicId = props.eventsOnDay.map(e => e.content.id).join(',');\n } else {\n analyticsData.eventId = displayedEvent.specialEventId;\n analyticsData.topicId = displayedEvent.content.id;\n analyticsData.eventStatus = displayedEvent.content.status;\n }\n return analyticsData;\n }\n\n const analyticsData = getAnalyticsData();\n\n const analyticsOptions: AnalyticsOptions = {\n actionType: UserAction.Click,\n entity: EntityType.SpecialEvent,\n location: LocationContext.CalendarDay\n };\n\n function formatAnalyticDataDate(date: Date): string {\n return DateHelper.format(date, 'YYYY-MM-DD');\n }\n\n function getBgImageClassName(): string {\n const defaultClassName = `${props.className} ${className} `;\n\n const classes = [\n hardCodedEvent ? `${styles.hardcodedCover} position-absolute` : styles.backgroundImage,\n iconUrl ? 'my-auto' : styles.cover,\n isComingSoon ? styles.comingSoon : '',\n props.hasInitialized ? styles.noAnimation : '',\n props.isHovering ? `rounded-3` : '',\n props.isMultiEventDate ? styles.multiEventFilter : '',\n 'company' in displayedEvent.content ? 'rounded-circle' : ''\n ];\n\n return defaultClassName + classes.join(' ');\n }\n\n function isPastEvent(event: CalendarEvent<CalendarEventContent>) {\n if ('startDateTime' in event.content) {\n return DateHelper.isBefore(event.content.startDateTime, new Date());\n }\n return false;\n }\n\n function sortPastEvents(events: CalendarEvent<CalendarEventContent>[]) {\n return events.sort((a, b) => {\n if (!isPastEvent(a) && isPastEvent(b)) {\n return 1;\n }\n\n if (isPastEvent(a) && !isPastEvent(b)) {\n return -1;\n }\n\n return 0;\n });\n }\n\n return (\n <div onClick={() => {\n if (isComingSoon)\n AnalyticsHelper.logUserAction(analyticsData, analyticsOptions);\n }}>\n <AppLink\n appLink={getAppLink()}\n analyticsOptions={analyticsOptions}\n analyticsData={analyticsData}\n className={`position-absolute top-0 start-0 h-100 w-100 text-shadow ${styles.wrapper}`}\n labelledBy='calendarEvent'\n >\n <div className={`${styles.tagWrap} p-1`}>\n {isComingSoon && (\n <ComingSoonTag className={`justify-content-center p-0 rounded-circle ${styles.tag} ${className}`} onlyIcon />\n )}\n </div>\n {!props.hideDay && (\n <CalendarCellDate\n date={props.date}\n notCurrentMonth={props.notCurrentMonth}\n className={`${styles.date} ${className}`}\n isHovering={props.isHovering}\n timezone={props.timezone}\n hasEvent\n />\n )}\n\n <div\n style={{ backgroundColor } }\n className={`position-absolute d-flex flex-column justify-content-end align-items-center text-white px-1 pt-2 pb-1 ${styles.eventCard} ${className} ${props.isHovering ? 'rounded-3' : ''} ${props.isMultiEventDate ? styles.multiEventFilter : ''} ${props.className} ${!props.isHovering && isPastEvent(displayedEvent) ? 'opacity-50' : ''}`}\n >\n {iconUrl && <LazyImage src={iconUrl} alt={displayedEvent.content.name} className={getBgImageClassName()} />}\n\n {coverUrl && !iconUrl && (\n <div\n style={{ backgroundImage: `url('${coverUrl}')` }}\n className={getBgImageClassName()}\n />\n )}\n\n {multiDayEvent && (\n <div className={`${styles.displayDate}`}>\n {SpecialEventHelper.getDisplayDate(displayedEvent.startDate, displayedEvent.endDate)}\n </div>\n )}\n <div className={`text-center ${styles.title} ${multiEvents ? 'mb-1' : 'mb-2'}`}>\n <p id='calendarEvent' className={`${props.responsiveText ? styles.titleText : ''} ${props.isHovering ? 'mb-0' : 'clamp-2'} h6`} title={displayedEvent.name}>{displayedEvent.name}</p>\n </div>\n\n {(multiEvents && sliderStep !== 0) && (\n <div className={`position-absolute bg-white rounded-circle ${styles.left}`}>\n <DivButton\n onClick={e => {\n e.stopPropagation();\n e.preventDefault();\n setSliderStep(s => s - 1);\n AnalyticsHelper.logUserAction({ date: formatAnalyticDataDate(props.date), action: 'previous', eventCount: props.eventsOnDay.length }, analyticsOptions);\n }}>\n <SvgContainer\n svg={ChevronLeftSvg}\n className={`d-inline-block svg-container text-dark ${styles.arrow}`}\n />\n </DivButton>\n </div>\n )}\n\n {multiEvents && sliderStep !== props.eventsOnDay.length - 1 && (\n <div className={`position-absolute bg-white rounded-circle ${styles.right}`}>\n <DivButton\n onClick={e => {\n e.stopPropagation();\n e.preventDefault();\n setSliderStep(s => s + 1);\n AnalyticsHelper.logUserAction({ date: formatAnalyticDataDate(props.date), action: 'next', eventCount: props.eventsOnDay.length }, analyticsOptions);\n }}>\n <SvgContainer\n svg={ChevronRightSvg}\n className={`d-inline-block svg-container text-dark ${styles.arrow}`}\n />\n </DivButton>\n </div>\n )}\n\n {multiEvents && (\n <div className={`d-flex ${styles.bottomBar} ${multiEvents ? '' : styles.bottomPlaceholder}`}>\n <SliderDots\n sliderStep={sliderStep}\n sliderLength={props.eventsOnDay.length}\n size='sm'\n className={`${props.isHovering ? 'mb-2' : 'mb-1'}`}\n onSliderDotClick={i => {\n setSliderStep(i);\n AnalyticsHelper.logUserAction({ date: formatAnalyticDataDate(props.date), action: 'jump', eventCount: props.eventsOnDay.length }, analyticsOptions);\n }}\n />\n </div>\n )}\n </div>\n </AppLink>\n </div>\n );\n}\n",":local {\n .cell {\n padding-bottom: 100%;\n }\n\n .multiEventCell {\n height: 100%;\n width: 100%;\n position: absolute;\n top: 0;\n left: 0;\n opacity: 0.25;\n z-index: 100;\n animation: fadeIn 0.8s ease-in;\n }\n @keyframes :local(fadeIn) {\n 0% {\n opacity: 0.1;\n }\n 20% {\n opacity: 0.25;\n }\n }\n}","import React from 'react';\n\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { CalendarCellDate } from 'libs/shared/apps/calendar/components/calendar-cell-date/CalendarCellDate';\nimport { CalendarEvents } from 'libs/shared/apps/calendar/components/calendar-events/CalendarEvents';\nimport { CalendarCellProps } from 'libs/shared/apps/calendar/interfaces/CalendarCellProps';\nimport { HoverableProps } from 'libs/shared/components/hover-to-portal-container/HoverToPortalContainer';\n\nimport styles from './calendar-day.module.scss';\n\ntype CalendarDayProps = HoverableProps & CalendarCellProps;\n\nexport function CalendarDay(props: CalendarDayProps) {\n const isMultiEventDate = React.useMemo(\n () =>\n props.hoveredEvent?.endDate &&\n !DateHelper.isSame(props.date, props.hoveredEvent?.startDate) &&\n DateHelper.isBetween(\n DateHelper.format(props.date, 'YYYY-MM-DD'),\n props.hoveredEvent?.startDate,\n props.hoveredEvent?.endDate\n ),\n [props.hoveredEvent]\n );\n const backgroundColor = props.hoveredEvent ? props.getBackgroundColor?.(props.hoveredEvent.content) : null;\n\n return (\n <div className={`${styles.cell} fw-semibold`}>\n {!props.hideDay && (\n <CalendarCellDate\n date={props.date}\n notCurrentMonth={props.notCurrentMonth}\n timezone={props.timezone}\n />\n )}\n {isMultiEventDate && !props.isHovering && (\n <div style={{ backgroundColor }} className={styles.multiEventCell}></div>\n )}\n {props.eventsOnDay?.length > 0 && (\n <CalendarEvents {...props}\n isMultiEventDate={isMultiEventDate && !props.isHovering}\n />\n )}\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"DO8_mR5i2.chunk.js","names":[],"sources":["../../../../libs/shared/src/apps/calendar/components/calendar-cell-date/calendar-cell-date.module.scss","../../../../libs/shared/src/apps/calendar/components/calendar-cell-date/CalendarCellDate.tsx","../../../../libs/shared/src/components/slider-dots/slider-dots.module.scss","../../../../libs/shared/src/components/slider-dots/SliderDots.tsx","../../../../libs/shared/src/apps/calendar/components/calendar-events/calendar-events.module.scss","../../../../libs/shared/src/apps/calendar/components/calendar-events/CalendarEvents.tsx","../../../../libs/shared/src/apps/calendar/components/calendar-day/calendar-day.module.scss","../../../../libs/shared/src/apps/calendar/components/calendar-day/CalendarDay.tsx"],"sourcesContent":[":local {\n .cellDate {\n z-index: 100;\n position: absolute;\n top: map-get($spacers, 1);\n left: map-get($spacers, 1);\n width: 2rem;\n height: 2rem;\n border-radius: 2rem;\n line-height: 0;\n transition: width 150ms ease-in !important;\n overflow: hidden;\n .label{\n display: flex;\n }\n &.isHovering {\n width: 5.18rem;\n }\n }\n\n .numberWrapper {\n width: 2rem;\n height: 2rem;\n border-radius: 2rem;\n }\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { Timezone } from 'libs/shared/apps/streamable-learning/constants/Timezones';\nimport { TimezoneHelper } from 'libs/shared/apps/streamable-learning/utils/TimezoneHelper';\nimport { useHoverIntent } from 'libs/shared/hooks/UseHover';\n\nimport styles from './calendar-cell-date.module.scss';\n\nconst namespace = 'specialEventCalendar.calendarCellDate';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface CalendarCellDateProps {\n date: Date;\n notCurrentMonth: boolean;\n hasEvent?: boolean;\n className?: string;\n isHovering?: boolean;\n timezone?: Timezone;\n}\n\nexport function CalendarCellDate(props: CalendarCellDateProps): JSX.Element {\n const isToday = DateHelper.isSame(\n TimezoneHelper.convertUTCToTimezoneDate(new Date().toISOString(), props.timezone || null),\n props.date,\n 'day'\n );\n\n let dateClassName = `${styles.cellDate} d-flex flex-nowrap`;\n if (isToday)\n dateClassName += ' bg-dark text-white';\n if (props.hasEvent)\n dateClassName += ' text-white';\n else if (props.notCurrentMonth && !props.isHovering)\n dateClassName += ' text-secondary';\n if (props.className)\n dateClassName += ` ${props.className}`;\n \n const numberClassName = 'd-flex text-center justify-content-center align-items-center flex-shrink-0';\n const [ ref, isHovering ] = useHoverIntent<HTMLDivElement>({ delay: 250 });\n\n return (\n <div className={`${dateClassName} ${isHovering ? styles.isHovering : ''}`} ref={ref}>\n <div className={`${styles.numberWrapper} ${numberClassName}`}>\n {DateHelper.format(props.date, 'D')}\n </div>\n {isToday && (\n <div className={`${styles.label} justify-content-start align-items-center`}>\n {getPhrase('today')}\n </div>\n )}\n </div>\n );\n}\n",":local {\n .sliderDot {\n width: 0.5rem;\n height: 0.5rem;\n background-color: $gray-400;\n\n &.sm {\n width: 0.3125rem;\n height: 0.3125rem;\n }\n\n &.active {\n background-color: $blue;\n }\n }\n\n .dotContainer {\n gap: 0.625rem;\n }\n \n .defaultCursor {\n cursor: initial !important;\n }\n}","import React from 'react';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\n\nimport styles from './slider-dots.module.scss';\n\ninterface SliderDotsProps {\n sliderStep: number;\n sliderLength: number;\n onSliderDotClick: (i: number) => void;\n isDisabled?: (indicatorIndex: number) => boolean;\n\n size?: 'sm' | 'md';\n className?: string;\n}\n\nexport function SliderDots(props: SliderDotsProps) {\n function onSliderDotClick(e: MouseEvent, i: number) {\n e.stopPropagation();\n e.preventDefault();\n props.onSliderDotClick(i);\n }\n\n function getSliderDotClassName(active: boolean, index: number) {\n let className = `${styles.sliderDot} rounded-3`;\n\n if (active)\n className += ` ${styles.active}`;\n\n if (props.size === 'sm')\n className += ` ${styles.sm}`;\n\n if (props.isDisabled?.(index))\n className += ` pointer-events-none ${styles.defaultCursor}`;\n\n return className;\n }\n \n return (\n <div className={`${props.className} w-100 d-flex justify-content-around`}>\n <div className={`${styles.dotContainer} d-flex`}>\n {[...Array(props.sliderLength)].map((_, i) => {\n const active = i === props.sliderStep;\n\n return (\n <DivButton\n key={i}\n className={getSliderDotClassName(active, i)}\n onClick={e => onSliderDotClick?.(e, i)}\n />\n );\n })}\n </div>\n </div>\n );\n}\n","@import '~styles/utils/mixins';\n@import '~styles/utils/include-media';\n:local {\n $button-bottom: 2.15rem;\n $circle-size: map-get($spacers, 1);\n \n %fade-in {\n opacity: 0;\n transition: opacity 400ms ease-in;\n }\n\n %slider-on-hover {\n display: none;\n &:hover{\n display: block;\n }\n }\n\n .wrapper {\n &:hover{\n .left {\n display: block;\n }\n .right {\n display: block;\n }\n }\n }\n\n .eventCard {\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n @extend %fade-in;\n //fall-back color\n background-color: $gray-900;\n\n }\n .backgroundImage {\n height: 4.5rem;\n width: 4.5rem;\n \n @extend %fade-in;\n &.noAnimation {\n transition: none;\n }\n &.cover{\n top:0;\n left:0;\n width: 100%;\n height: 100%;\n z-index: 1;\n background-repeat: no-repeat;\n background-position: 0 0 !important;\n background-size: cover;\n }\n }\n \n .date {\n @extend %fade-in;\n }\n\n .tagWrap {\n z-index: 4;\n position: absolute;\n right: 0;\n }\n\n .tag {\n @extend %fade-in;\n width: 2rem;\n height: 2rem;\n top: map-get($spacers, 1);\n right: map-get($spacers, 1);\n }\n\n .appear {\n opacity: 1;\n }\n\n .displayDate {\n font-size: 0.625rem;\n z-index: 2;\n }\n\n .title {\n z-index: 2;\n }\n\n $title-font-size: clamp(0.75rem, 1.25vw, 1rem);\n .titleText {\n font-size: $title-font-size;\n padding-bottom: calc($title-font-size * 0.05) !important;\n\n @include media('<=sm') {\n @include clamp(1);\n }\n }\n\n .circle {\n width: $circle-size;\n height: $circle-size;\n border-radius: 50%;\n background-color: $gray-400;\n z-index: 2;\n\n &.active {\n background-color: $blue;\n }\n\n &:not(:last-child) {\n margin-right: map-get($spacers, 2);\n }\n }\n\n .left {\n left: map-get($spacers, 1);\n bottom: 50%;\n transform: translateY(50%);\n z-index: 2;\n .arrow {\n padding-right: 0.1rem;\n }\n display: none;\n\n }\n .right {\n right: map-get($spacers, 1);\n bottom: 50%;\n transform: translateY(50%);\n z-index: 2;\n .arrow {\n padding-left: 0.1rem;\n }\n display: none;\n\n }\n .bottomBar {\n z-index: 3;\n margin-top: 0.125rem;\n }\n .bottomPlaceholder {\n visibility: hidden;\n }\n\n .hardcodedCover {\n top:0;\n left:0;\n width: 100%;\n height: 100%;\n z-index: 1;\n background-size: 100%;\n @extend %fade-in;\n &.noAnimation {\n transition: none;\n }\n }\n\n .multiEventFilter {\n &::before {\n content: '';\n position: absolute;\n height: 100%;\n width: 100%;\n top: 0;\n left: 0;\n background: rgba(255, 255, 255, 0.4);\n }\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, EntityType, HashObject, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { CalendarCellDate } from 'libs/shared/apps/calendar/components/calendar-cell-date/CalendarCellDate';\nimport { ComingSoonTag } from 'libs/shared/apps/calendar/components/coming-soon-tag/ComingSoonTag';\nimport { CalendarCellProps } from 'libs/shared/apps/calendar/interfaces/CalendarCellProps';\nimport { SpecialEventHelper } from 'libs/shared/apps/calendar/utils/SpecialEventHelper';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { HoverableProps } from 'libs/shared/components/hover-to-portal-container/HoverToPortalContainer';\nimport { LazyImage } from 'libs/shared/components/lazy-image/LazyImage';\nimport { SliderDots } from 'libs/shared/components/slider-dots/SliderDots';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { ChevronLeftSvg } from 'libs/shared/images/svg/arrows/ChevronLeftSvg';\nimport { ChevronRightSvg } from 'libs/shared/images/svg/arrows/ChevronRightSvg';\nimport { CalendarEvent, CalendarEventContent } from 'libs/shared/interfaces';\n\nimport styles from './calendar-events.module.scss';\n\ntype CalendarEventsProps = HoverableProps & CalendarCellProps;\n\nCalendarEvents.defaultProps = {\n responsiveText: true\n};\n\nexport function CalendarEvents(props: CalendarEventsProps): JSX.Element {\n const { sliderStep, setSliderStep } = props;\n\n const sortedEventsOnDay = props.fadePastEvents ? sortPastEvents(props.eventsOnDay) : props.eventsOnDay;\n const multiEvents = props.eventsOnDay.length > 1;\n const displayedEvent = sortedEventsOnDay.find((e, idx) => idx === sliderStep) || sortedEventsOnDay[0];\n const multiDayEvent = !!displayedEvent.endDate;\n\n const backgroundColor = props.getBackgroundColor?.(displayedEvent.content);\n\n const hardCodedEvent = props.getHardCodedEvent?.(displayedEvent.content);\n\n const iconUrl = props.getIconUrl?.(displayedEvent.content);\n const coverUrl = props.getCoverUrl?.(displayedEvent.content);\n\n const isComingSoon = displayedEvent.content.status === ClassificationStatus.ComingSoon;\n\n const [ className, setClassName ] = React.useState(!props.hasInitialized ? '' : styles.appear);\n\n React.useEffect(() => {\n if (!props.hasInitialized) {\n // a random number between 400 and 1000\n const randomNumber = Math.floor(Math.random() * 600 + 400);\n window.setTimeout(() => {\n setClassName(styles.appear);\n window.setTimeout(() => {\n props.setHasInitialized(true);\n }, 400);\n }, randomNumber);\n }\n }, [props.hasInitialized]);\n\n React.useEffect(() => {\n if (props.isHovering) {\n props.setHoveredEvent(displayedEvent);\n }\n }, [ props.isHovering, displayedEvent ]);\n\n React.useEffect(() => {\n return () => {\n if (props.isHovering && props.hoveredEvent?.specialEventId === displayedEvent.specialEventId) {\n props.setHoveredEvent(null);\n }\n };\n }, [ props.isHovering, props.hoveredEvent, displayedEvent ]);\n\n function getAppLink(): Core.AppLink {\n if (multiEvents)\n return props.getEventsListAppLink?.();\n\n if (isComingSoon)\n return null;\n\n return props.getTopicAppLink?.(displayedEvent.content, TextHelper.slugify(displayedEvent.name));\n }\n\n function getAnalyticsData() {\n const analyticsData: HashObject = {\n date: DateHelper.format(props.date, 'YYYY-MM-DD'),\n presentationId: props.presentationId,\n eventCount: props.eventsOnDay.length\n };\n\n if (multiEvents) {\n analyticsData.eventId = props.eventsOnDay.map(e => e.specialEventId).join(',');\n analyticsData.topicId = props.eventsOnDay.map(e => e.content.id).join(',');\n } else {\n analyticsData.eventId = displayedEvent.specialEventId;\n analyticsData.topicId = displayedEvent.content.id;\n analyticsData.eventStatus = displayedEvent.content.status;\n }\n return analyticsData;\n }\n\n const analyticsData = getAnalyticsData();\n\n const analyticsOptions: AnalyticsOptions = {\n actionType: UserAction.Click,\n entity: EntityType.SpecialEvent,\n location: LocationContext.CalendarDay\n };\n\n function formatAnalyticDataDate(date: Date): string {\n return DateHelper.format(date, 'YYYY-MM-DD');\n }\n\n function getBgImageClassName(): string {\n const defaultClassName = `${props.className} ${className} `;\n\n const classes = [\n hardCodedEvent ? `${styles.hardcodedCover} position-absolute` : styles.backgroundImage,\n iconUrl ? 'my-auto' : styles.cover,\n isComingSoon ? styles.comingSoon : '',\n props.hasInitialized ? styles.noAnimation : '',\n props.isHovering ? `rounded-3` : '',\n props.isMultiEventDate ? styles.multiEventFilter : '',\n 'company' in displayedEvent.content ? 'rounded-circle' : ''\n ];\n\n return defaultClassName + classes.join(' ');\n }\n\n function isPastEvent(event: CalendarEvent<CalendarEventContent>) {\n if ('startDateTime' in event.content) {\n return DateHelper.isBefore(event.content.startDateTime, new Date());\n }\n return false;\n }\n\n function sortPastEvents(events: CalendarEvent<CalendarEventContent>[]) {\n return events.sort((a, b) => {\n if (!isPastEvent(a) && isPastEvent(b)) {\n return 1;\n }\n\n if (isPastEvent(a) && !isPastEvent(b)) {\n return -1;\n }\n\n return 0;\n });\n }\n\n return (\n <div onClick={() => {\n if (isComingSoon)\n AnalyticsHelper.logUserAction(analyticsData, analyticsOptions);\n }}>\n <AppLink\n appLink={getAppLink()}\n analyticsOptions={analyticsOptions}\n analyticsData={analyticsData}\n className={`position-absolute top-0 start-0 h-100 w-100 text-shadow ${styles.wrapper}`}\n labelledBy='calendarEvent'\n >\n <div className={`${styles.tagWrap} p-1`}>\n {isComingSoon && (\n <ComingSoonTag className={`justify-content-center p-0 rounded-circle ${styles.tag} ${className}`} onlyIcon />\n )}\n </div>\n {!props.hideDay && (\n <CalendarCellDate\n date={props.date}\n notCurrentMonth={props.notCurrentMonth}\n className={`${styles.date} ${className}`}\n isHovering={props.isHovering}\n timezone={props.timezone}\n hasEvent\n />\n )}\n\n <div\n style={{ backgroundColor } }\n className={`position-absolute d-flex flex-column justify-content-end align-items-center text-white px-1 pt-2 pb-1 ${styles.eventCard} ${className} ${props.isHovering ? 'rounded-3' : ''} ${props.isMultiEventDate ? styles.multiEventFilter : ''} ${props.className} ${!props.isHovering && isPastEvent(displayedEvent) ? 'opacity-50' : ''}`}\n >\n {iconUrl && <LazyImage src={iconUrl} alt={displayedEvent.content.name} className={getBgImageClassName()} />}\n\n {coverUrl && !iconUrl && (\n <div\n style={{ backgroundImage: `url('${coverUrl}')` }}\n className={getBgImageClassName()}\n />\n )}\n\n {multiDayEvent && (\n <div className={`${styles.displayDate}`}>\n {SpecialEventHelper.getDisplayDate(displayedEvent.startDate, displayedEvent.endDate)}\n </div>\n )}\n <div className={`text-center ${styles.title} ${multiEvents ? 'mb-1' : 'mb-2'}`}>\n <p id='calendarEvent' className={`${props.responsiveText ? styles.titleText : ''} ${props.isHovering ? 'mb-0' : 'clamp-2'} h6`} title={displayedEvent.name}>{displayedEvent.name}</p>\n </div>\n\n {(multiEvents && sliderStep !== 0) && (\n <div className={`position-absolute bg-white rounded-circle ${styles.left}`}>\n <DivButton\n onClick={e => {\n e.stopPropagation();\n e.preventDefault();\n setSliderStep(s => s - 1);\n AnalyticsHelper.logUserAction({ date: formatAnalyticDataDate(props.date), action: 'previous', eventCount: props.eventsOnDay.length }, analyticsOptions);\n }}>\n <SvgContainer\n svg={ChevronLeftSvg}\n className={`d-inline-block svg-container text-dark ${styles.arrow}`}\n />\n </DivButton>\n </div>\n )}\n\n {multiEvents && sliderStep !== props.eventsOnDay.length - 1 && (\n <div className={`position-absolute bg-white rounded-circle ${styles.right}`}>\n <DivButton\n onClick={e => {\n e.stopPropagation();\n e.preventDefault();\n setSliderStep(s => s + 1);\n AnalyticsHelper.logUserAction({ date: formatAnalyticDataDate(props.date), action: 'next', eventCount: props.eventsOnDay.length }, analyticsOptions);\n }}>\n <SvgContainer\n svg={ChevronRightSvg}\n className={`d-inline-block svg-container text-dark ${styles.arrow}`}\n />\n </DivButton>\n </div>\n )}\n\n {multiEvents && (\n <div className={`d-flex ${styles.bottomBar} ${multiEvents ? '' : styles.bottomPlaceholder}`}>\n <SliderDots\n sliderStep={sliderStep}\n sliderLength={props.eventsOnDay.length}\n size='sm'\n className={`${props.isHovering ? 'mb-2' : 'mb-1'}`}\n onSliderDotClick={i => {\n setSliderStep(i);\n AnalyticsHelper.logUserAction({ date: formatAnalyticDataDate(props.date), action: 'jump', eventCount: props.eventsOnDay.length }, analyticsOptions);\n }}\n />\n </div>\n )}\n </div>\n </AppLink>\n </div>\n );\n}\n",":local {\n .cell {\n padding-bottom: 100%;\n }\n\n .multiEventCell {\n height: 100%;\n width: 100%;\n position: absolute;\n top: 0;\n left: 0;\n opacity: 0.25;\n z-index: 100;\n animation: fadeIn 0.8s ease-in;\n }\n @keyframes :local(fadeIn) {\n 0% {\n opacity: 0.1;\n }\n 20% {\n opacity: 0.25;\n }\n }\n}","import React from 'react';\n\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { CalendarCellDate } from 'libs/shared/apps/calendar/components/calendar-cell-date/CalendarCellDate';\nimport { CalendarEvents } from 'libs/shared/apps/calendar/components/calendar-events/CalendarEvents';\nimport { CalendarCellProps } from 'libs/shared/apps/calendar/interfaces/CalendarCellProps';\nimport { HoverableProps } from 'libs/shared/components/hover-to-portal-container/HoverToPortalContainer';\n\nimport styles from './calendar-day.module.scss';\n\ntype CalendarDayProps = HoverableProps & CalendarCellProps;\n\nexport function CalendarDay(props: CalendarDayProps) {\n const isMultiEventDate = React.useMemo(\n () =>\n props.hoveredEvent?.endDate &&\n !DateHelper.isSame(props.date, props.hoveredEvent?.startDate) &&\n DateHelper.isBetween(\n DateHelper.format(props.date, 'YYYY-MM-DD'),\n props.hoveredEvent?.startDate,\n props.hoveredEvent?.endDate\n ),\n [props.hoveredEvent]\n );\n const backgroundColor = props.hoveredEvent ? props.getBackgroundColor?.(props.hoveredEvent.content) : null;\n\n return (\n <div className={`${styles.cell} fw-semibold`}>\n {!props.hideDay && (\n <CalendarCellDate\n date={props.date}\n notCurrentMonth={props.notCurrentMonth}\n timezone={props.timezone}\n />\n )}\n {isMultiEventDate && !props.isHovering && (\n <div style={{ backgroundColor }} className={styles.multiEventCell}></div>\n )}\n {props.eventsOnDay?.length > 0 && (\n <CalendarEvents {...props}\n isMultiEventDate={isMultiEventDate && !props.isHovering}\n />\n )}\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{gt as e}from"./Dp9qJj1C.chunk.js";import{t}from"./ImQRQGZr.chunk.js";import{C as n,c as r,l as i,lt as a,m as o,n as s,ut as c}from"./Dun43GrB.chunk.js";import{t as l}from"./CFXUbsBS.chunk.js";import{t as u}from"./D86qrFLE.chunk.js";import{n as d,t as f}from"./Da5tDmIW2.chunk.js";import{t as p}from"./Ca1QPe-q2.chunk.js";import{n as ee}from"./D7d5XFW82.chunk.js";import{n as te}from"./iuoIcGAm2.chunk.js";import{a as m,i as h,r as g,t as _}from"./D2om474U2.chunk.js";import{t as v}from"./DlVp8-h62.chunk.js";import{t as y}from"./B4z8dIrI2.chunk.js";import{c as ne,f as re,g as b,o as x,p as S}from"./CK6c6uHp2.chunk.js";import{t as C}from"./DDKwae_D2.chunk.js";import{t as w}from"./LdxNQaUZ2.chunk.js";import{n as T,t as E}from"./CeyqMjfq.chunk.js";import{t as D}from"./BBWlVBxr.chunk.js";import{n as O,t as k}from"./ClGIvvk6.chunk.js";import{c as A,l as j,n as M,r as N,s as P}from"./CeI-LCE-.chunk.js";var F={playlistItem:`_playlistItem_euqll_1`,playlistItemGradient:`_playlistItemGradient_euqll_4`,playlistMetadata:`_playlistMetadata_euqll_13`,partialHeading:`_partialHeading_euqll_20`,ownerAvatarContainer:`_ownerAvatarContainer_euqll_24`},I=e(c()),L=a();R.defaultProps={numItems:8};function R(e){let t=[...Array(e.numItems)],n=e.itemClassName||``;return(0,L.jsxs)(L.Fragment,{children:[e.showHeading&&(0,L.jsx)(`div`,{className:`${F.partialHeading} mb-1 partial-loading-background`}),(0,L.jsx)(d,{className:`mx-n1 mb-n2`,children:t.map((e,t)=>(0,L.jsx)(u,{xs:6,sm:4,lg:3,className:`${n} px-1 pb-2`,children:(0,L.jsx)(`div`,{className:`${F.playlistItem} partial-loading-background rounded-3`})},t))})]})}var z=[`second`,`minute`,`hour`,`day`,`week`,`month`,`year`];function B(e,t){if(t===0)return[`just now`,`right now`];var n=z[Math.floor(t/2)];return e>1&&(n+=`s`),[e+` `+n+` ago`,`in `+e+` `+n]}var V=[`秒`,`分钟`,`小时`,`天`,`周`,`个月`,`年`];function H(e,t){if(t===0)return[`刚刚`,`片刻后`];var n=V[~~(t/2)];return[e+` `+n+`前`,e+` `+n+`后`]}var U={},W=function(e,t){U[e]=t},ie=function(e){return U[e]||U.en_US},G=[60,60,24,7,365/7/12,12];function K(e){return e instanceof Date?e:!isNaN(e)||/^\d+$/.test(e)?new Date(parseInt(e)):(e=(e||``).trim().replace(/\.\d+/,``).replace(/-/,`/`).replace(/-/,`/`).replace(/(\d)T(\d)/,`$1 $2`).replace(/Z/,` UTC`).replace(/([+-]\d\d):?(\d\d)/,` $1$2`),new Date(e))}function q(e,t){var n=e<0?1:0;e=Math.abs(e);for(var r=e,i=0;e>=G[i]&&i<G.length;i++)e/=G[i];return e=Math.floor(e),i*=2,e>(i===0?9:1)&&(i+=1),t(e,i,r)[n].replace(`%s`,e.toString())}function J(e,t){return((t?K(t):new Date)-+K(e))/1e3}var Y=function(e,t,n){return q(J(e,n&&n.relativeDate),ie(t))};W(`en_US`,B),W(`zh_CN`,H);var ae=`playlists.playlistCount`;function oe(e){if(!e)return!1;let t=e.videos?.count??0,n=e.interactives?.count??0,r=e.clips?.count??0;return t+n+r}function se(e){let t=oe(e.playlist);return t===!1||Number.isNaN(t)?(0,L.jsx)(L.Fragment,{}):(0,L.jsx)(`span`,{className:`text-shadow font-size-sm`,children:(0,L.jsx)(ee,{namespace:ae,phrase:`count`,options:{smartCount:t}})})}var ce={avatar:`_avatar_1ylw0_1`};function le(){return(0,L.jsx)(`div`,{className:ce.avatar,children:(0,L.jsx)(f,{})})}function ue(e){let{_liteOwner:t}=e.playlist;return e.playlist._isClickViewCurated?.value?(0,L.jsx)(le,{}):!t?.id||!e.currentUser?.id||t.id.toString()===e.currentUser.id.toString()?(0,L.jsx)(L.Fragment,{}):(0,L.jsx)(v,{imageUrl:typeof t.avatar==`string`?t.avatar:t.avatar?.url,imageCdnUrl:e.imageCdnUrl,initials:y.getInitials(t.name,t.surname)})}var de=`playlists.playlistList`;X.defaultProps={itemStyle:`square`};function X(e){let n=_.createUrl(e.data.cover&&e.data.cover.url,{size:g.Medium,resizeType:m.Cover}),r=e.data.subjectPresentationAudiences&&e.data.subjectPresentationAudiences.data,a=M(r,e.presentationAudiences),o=F.playlistItem,s=!!n||!!e.showFallbackImage;s&&(o+=` ${F.playlistItemGradient}`),!s&&e.bgColourClassNames&&(o+=` ${F.playlistItem} ${D(e.data.name,e.bgColourClassNames)}`),e.itemStyle===`round`&&(o+=` rounded-3 overflow-hidden`),e.itemStyle===`round-left`&&(o+=` rounded-start-lg overflow-hidden`);let c={...e.analyticsData,id:e.data?.id,name:e.data?.name},u={...e.analyticsOptions,entity:i.Playlist};return(0,L.jsx)(p,{appLink:e.appLink,analyticsData:c,analyticsOptions:u,title:!e.data.contentModifiedDate||e.data._isClickViewCurated?.value?``:t.getPhrase(de,`lastUpdated`,{timeago:Y(l.convertUTCToLocal(e.data.contentModifiedDate))}),children:(0,L.jsxs)(w,{data:n,alt:e.data.name,className:o,children:[!!e.showFallbackImage&&(0,L.jsx)(k,{type:O.Playlist}),(0,L.jsxs)(`div`,{className:`text-white ${F.playlistMetadata}`,children:[!!e.showCount&&(0,L.jsx)(se,{playlist:e.data}),(0,L.jsx)(`h5`,{className:`mb-0 ${e.titleClassName||``}`,children:(0,L.jsx)(`span`,{className:`text-shadow clamp-2`,children:e.data.name})}),!!r&&!!r.length&&!!a&&(0,L.jsx)(N,{className:`${e.audienceLabelClass?e.audienceLabelClass:``} mt-1`,audience:a,border:`white`})]}),!!e.showOwner&&!!e.imageCdnUrl&&(0,L.jsx)(`div`,{className:F.ownerAvatarContainer,children:(0,L.jsx)(ue,{playlist:e.data,currentUser:e.currentUser,imageCdnUrl:e.imageCdnUrl})})]})})}n.Click,i.Playlist,o.PlaylistListItem,r.Cover;var Z={labelContainer:`_labelContainer_1rf8p_1`,labelContainerOverlay:`_labelContainerOverlay_1rf8p_15`,hoverActive:`_hoverActive_1rf8p_23`,mask:`_mask_1rf8p_37`,largeHoverTitle:`_largeHoverTitle_1rf8p_50`,smallHoverTitle:`_smallHoverTitle_1rf8p_69`,description:`_description_1rf8p_93`,largeHoverDescription:`_largeHoverDescription_1rf8p_99`,hasTableOfContents:`_hasTableOfContents_1rf8p_141`,smallHoverDescription:`_smallHoverDescription_1rf8p_194`};function fe(e){return(0,L.jsxs)(`div`,{className:`py-3 mx-2 px-2 rounded bg-white text-center ${Z.mask} d-flex flex-column align-items-center`,children:[(0,L.jsx)(`h3`,{className:`fw-semibold mb-0 ${Z.hoverTitle} ${e.isSmall?Z.smallHoverTitle:Z.largeHoverTitle}`,children:(0,L.jsx)(`span`,{className:`clamp-3`,children:e.series.name})}),!!e.series.description&&(0,L.jsx)(`p`,{className:`${e.hasTableOfContents?Z.hasTableOfContents:``} ${Z.hoverDescription} ${e.isSmall?Z.smallHoverDescription:Z.largeHoverDescription} mb-0`,children:e.series.description}),(0,L.jsx)(`div`,{className:`${Z.labelContainerOverlay}`,children:e.mergedAudience?(0,L.jsx)(N,{audience:e.mergedAudience,border:`dark`,className:`mt-2 w-fit`}):(0,L.jsx)(E,{type:T.Rating,data:A.getRating(e.series),className:`mt-2`})})]})}function pe(e){let[t,n]=te({className:Z.hoverActive}),r=e.series&&e.series.subjectPresentationAudiences&&e.series.subjectPresentationAudiences.data||[],i=M(r,e.presentationAudiences),a=!!(r&&r.length&&i);return(0,L.jsx)(`div`,{ref:t,children:(0,L.jsxs)(w,{data:e.series.tallPoster,alt:e.series.name,imageType:h.TallPosters,preload:e.preloadImage,imageOptions:{size:g.Large},imageClassName:e.imageClass?e.imageClass:`rounded-3`,children:[n&&(0,L.jsx)(fe,{isSmall:e.isSmall,series:e.series,mergedAudience:r&&r.length?i:null,hasTableOfContents:e.hasTableOfContents}),(0,L.jsx)(k,{type:O.Series}),(0,L.jsx)(`div`,{className:`position-absolute text-white ${Z.labelContainer}`,children:a?(0,L.jsx)(N,{audience:i,className:`bg-white text-dark`,border:`dark`}):(0,L.jsx)(E,{className:`text-shadow`,type:T.Rating,data:A.getRating(e.series)})})]})})}var Q={partialHeroThumbnail:`_partialHeroThumbnail_pydn0_1`,partialSeriesText:`_partialSeriesText_pydn0_6`,partialVideoTitleText:`_partialVideoTitleText_pydn0_10`,partialBadge:`_partialBadge_pydn0_14`,partialDescription:`_partialDescription_pydn0_18`,partialSubject:`_partialSubject_pydn0_22`,partialHeading:`_partialHeading_pydn0_26`,guidance:`_guidance_pydn0_30`,responsiveGuidance:`_responsiveGuidance_pydn0_41`,description:`_description_pydn0_56`,details:`_details_pydn0_82`};$.defaultProps={newDurationStyle:!0,badgePosition:`thumbnail`};function $(e){let t=e.video?.subjectPresentationAudiences?.data,n=M(t,e.presentationAudiences),r=s.mergeOptions(e.analyticsOptions,{location:o.ClassificationHero,entity:C.getAnalyticsEntity(e.video)}),i=I.useRef(null);return e.video?(0,L.jsxs)(d,{children:[(0,L.jsx)(u,{xs:12,md:6,children:(0,L.jsx)(`div`,{ref:i,children:(0,L.jsx)(re,{analyticsOptions:r,video:e.video,appLink:e.getVideoAppLink?.(e.video,{}),imageOptions:{size:g.Medium},textPosition:S.Independent,type:`static`,audience:e.badgePosition===`thumbnail`?n:null,hideRating:e.badgePosition===`thumbnail`?!!n:!0,commonVideoProps:e.commonVideoProps})})}),(0,L.jsxs)(u,{xs:12,md:6,className:`${Q.details} position-relative`,children:[(0,L.jsxs)(`div`,{className:`d-flex justify-content-between`,children:[(0,L.jsxs)(`div`,{className:`overflow-hidden`,children:[(0,L.jsx)(P,{type:e.commonVideoProps.subTextType,appLink:e.commonVideoProps.getSubTextAppLink?.(e.video),analyticsData:e.analyticsData,analyticsOptions:r,video:e.video,className:`text-reset clamp-1`}),(0,L.jsx)(ne,{yearGroups:e.commonVideoProps.yearGroups,video:e.video,analyticsData:e.analyticsData,analyticsOptions:r,appLink:e.getVideoAppLink?.(e.video,{}),titleSize:`h4`,showNewVideoIndicator:e.showNewVideoIndicator,showPadlock:!e.commonVideoProps.hasStudentExperience&&!e.commonVideoProps.hasGuestExperience,titleClassName:e.titleClassName,clampLevel:2})]}),(0,L.jsx)(x,{analyticsData:e.analyticsData,analyticsOptions:r,video:e.video})]}),e.badgePosition===`info-panel`&&(0,L.jsxs)(j,{className:`pb-1`,children:[!e.hideInteractiveBadge&&(0,L.jsx)(E,{type:T.Interactive,data:e.video.interactives}),(0,L.jsx)(E,{type:T.Rating,data:C.getRating(e.video)}),(0,L.jsx)(E,{type:T.ProductionYear,data:e.video.productionYear})]}),(0,L.jsx)(`p`,{className:`mb-1`,children:(0,L.jsx)(`span`,{className:Q.description,children:e.video.description})}),e.badgePosition===`info-panel`&&(0,L.jsx)(N,{audience:n,className:`mt-1`,border:`dark`}),e.showVideoGuidance&&(0,L.jsx)(b,{video:e.video,analyticsData:e.analyticsData,analyticsOptions:r,containerClassName:`d-flex ${Q.guidance}`,responsiveClassName:Q.responsiveGuidance,commonVideoProps:e.commonVideoProps})]})]}):(0,L.jsx)(L.Fragment,{})}export{R as i,pe as n,X as r,$ as t};
2
- //# sourceMappingURL=DlQrdOls.chunk.js.map
1
+ import{gt as e}from"./Dp9qJj1C.chunk.js";import{t}from"./ImQRQGZr.chunk.js";import{C as n,c as r,l as i,lt as a,m as o,n as s,ut as c}from"./Dun43GrB.chunk.js";import{t as l}from"./CFXUbsBS.chunk.js";import{t as u}from"./D86qrFLE.chunk.js";import{n as d,t as f}from"./Da5tDmIW2.chunk.js";import{t as p}from"./Ca1QPe-q2.chunk.js";import{n as ee}from"./D7d5XFW82.chunk.js";import{n as te}from"./iuoIcGAm2.chunk.js";import{a as m,i as h,r as g,t as _}from"./D2om474U2.chunk.js";import{t as v}from"./DlVp8-h62.chunk.js";import{t as y}from"./B4z8dIrI2.chunk.js";import{c as ne,f as re,g as b,o as x,p as S}from"./BpgHKWR52.chunk.js";import{t as C}from"./DDKwae_D2.chunk.js";import{t as w}from"./LdxNQaUZ2.chunk.js";import{n as T,t as E}from"./CeyqMjfq.chunk.js";import{t as D}from"./BBWlVBxr.chunk.js";import{n as O,t as k}from"./ClGIvvk6.chunk.js";import{c as A,l as j,n as M,r as N,s as P}from"./DIavEegC.chunk.js";var F={playlistItem:`_playlistItem_euqll_1`,playlistItemGradient:`_playlistItemGradient_euqll_4`,playlistMetadata:`_playlistMetadata_euqll_13`,partialHeading:`_partialHeading_euqll_20`,ownerAvatarContainer:`_ownerAvatarContainer_euqll_24`},I=e(c()),L=a();R.defaultProps={numItems:8};function R(e){let t=[...Array(e.numItems)],n=e.itemClassName||``;return(0,L.jsxs)(L.Fragment,{children:[e.showHeading&&(0,L.jsx)(`div`,{className:`${F.partialHeading} mb-1 partial-loading-background`}),(0,L.jsx)(d,{className:`mx-n1 mb-n2`,children:t.map((e,t)=>(0,L.jsx)(u,{xs:6,sm:4,lg:3,className:`${n} px-1 pb-2`,children:(0,L.jsx)(`div`,{className:`${F.playlistItem} partial-loading-background rounded-3`})},t))})]})}var z=[`second`,`minute`,`hour`,`day`,`week`,`month`,`year`];function B(e,t){if(t===0)return[`just now`,`right now`];var n=z[Math.floor(t/2)];return e>1&&(n+=`s`),[e+` `+n+` ago`,`in `+e+` `+n]}var V=[`秒`,`分钟`,`小时`,`天`,`周`,`个月`,`年`];function H(e,t){if(t===0)return[`刚刚`,`片刻后`];var n=V[~~(t/2)];return[e+` `+n+`前`,e+` `+n+`后`]}var U={},W=function(e,t){U[e]=t},ie=function(e){return U[e]||U.en_US},G=[60,60,24,7,365/7/12,12];function K(e){return e instanceof Date?e:!isNaN(e)||/^\d+$/.test(e)?new Date(parseInt(e)):(e=(e||``).trim().replace(/\.\d+/,``).replace(/-/,`/`).replace(/-/,`/`).replace(/(\d)T(\d)/,`$1 $2`).replace(/Z/,` UTC`).replace(/([+-]\d\d):?(\d\d)/,` $1$2`),new Date(e))}function q(e,t){var n=e<0?1:0;e=Math.abs(e);for(var r=e,i=0;e>=G[i]&&i<G.length;i++)e/=G[i];return e=Math.floor(e),i*=2,e>(i===0?9:1)&&(i+=1),t(e,i,r)[n].replace(`%s`,e.toString())}function J(e,t){return((t?K(t):new Date)-+K(e))/1e3}var Y=function(e,t,n){return q(J(e,n&&n.relativeDate),ie(t))};W(`en_US`,B),W(`zh_CN`,H);var ae=`playlists.playlistCount`;function oe(e){if(!e)return!1;let t=e.videos?.count??0,n=e.interactives?.count??0,r=e.clips?.count??0;return t+n+r}function se(e){let t=oe(e.playlist);return t===!1||Number.isNaN(t)?(0,L.jsx)(L.Fragment,{}):(0,L.jsx)(`span`,{className:`text-shadow font-size-sm`,children:(0,L.jsx)(ee,{namespace:ae,phrase:`count`,options:{smartCount:t}})})}var ce={avatar:`_avatar_1ylw0_1`};function le(){return(0,L.jsx)(`div`,{className:ce.avatar,children:(0,L.jsx)(f,{})})}function ue(e){let{_liteOwner:t}=e.playlist;return e.playlist._isClickViewCurated?.value?(0,L.jsx)(le,{}):!t?.id||!e.currentUser?.id||t.id.toString()===e.currentUser.id.toString()?(0,L.jsx)(L.Fragment,{}):(0,L.jsx)(v,{imageUrl:typeof t.avatar==`string`?t.avatar:t.avatar?.url,imageCdnUrl:e.imageCdnUrl,initials:y.getInitials(t.name,t.surname)})}var de=`playlists.playlistList`;X.defaultProps={itemStyle:`square`};function X(e){let n=_.createUrl(e.data.cover&&e.data.cover.url,{size:g.Medium,resizeType:m.Cover}),r=e.data.subjectPresentationAudiences&&e.data.subjectPresentationAudiences.data,a=M(r,e.presentationAudiences),o=F.playlistItem,s=!!n||!!e.showFallbackImage;s&&(o+=` ${F.playlistItemGradient}`),!s&&e.bgColourClassNames&&(o+=` ${F.playlistItem} ${D(e.data.name,e.bgColourClassNames)}`),e.itemStyle===`round`&&(o+=` rounded-3 overflow-hidden`),e.itemStyle===`round-left`&&(o+=` rounded-start-lg overflow-hidden`);let c={...e.analyticsData,id:e.data?.id,name:e.data?.name},u={...e.analyticsOptions,entity:i.Playlist};return(0,L.jsx)(p,{appLink:e.appLink,analyticsData:c,analyticsOptions:u,title:!e.data.contentModifiedDate||e.data._isClickViewCurated?.value?``:t.getPhrase(de,`lastUpdated`,{timeago:Y(l.convertUTCToLocal(e.data.contentModifiedDate))}),children:(0,L.jsxs)(w,{data:n,alt:e.data.name,className:o,children:[!!e.showFallbackImage&&(0,L.jsx)(k,{type:O.Playlist}),(0,L.jsxs)(`div`,{className:`text-white ${F.playlistMetadata}`,children:[!!e.showCount&&(0,L.jsx)(se,{playlist:e.data}),(0,L.jsx)(`h5`,{className:`mb-0 ${e.titleClassName||``}`,children:(0,L.jsx)(`span`,{className:`text-shadow clamp-2`,children:e.data.name})}),!!r&&!!r.length&&!!a&&(0,L.jsx)(N,{className:`${e.audienceLabelClass?e.audienceLabelClass:``} mt-1`,audience:a,border:`white`})]}),!!e.showOwner&&!!e.imageCdnUrl&&(0,L.jsx)(`div`,{className:F.ownerAvatarContainer,children:(0,L.jsx)(ue,{playlist:e.data,currentUser:e.currentUser,imageCdnUrl:e.imageCdnUrl})})]})})}n.Click,i.Playlist,o.PlaylistListItem,r.Cover;var Z={labelContainer:`_labelContainer_1rf8p_1`,labelContainerOverlay:`_labelContainerOverlay_1rf8p_15`,hoverActive:`_hoverActive_1rf8p_23`,mask:`_mask_1rf8p_37`,largeHoverTitle:`_largeHoverTitle_1rf8p_50`,smallHoverTitle:`_smallHoverTitle_1rf8p_69`,description:`_description_1rf8p_93`,largeHoverDescription:`_largeHoverDescription_1rf8p_99`,hasTableOfContents:`_hasTableOfContents_1rf8p_141`,smallHoverDescription:`_smallHoverDescription_1rf8p_194`};function fe(e){return(0,L.jsxs)(`div`,{className:`py-3 mx-2 px-2 rounded bg-white text-center ${Z.mask} d-flex flex-column align-items-center`,children:[(0,L.jsx)(`h3`,{className:`fw-semibold mb-0 ${Z.hoverTitle} ${e.isSmall?Z.smallHoverTitle:Z.largeHoverTitle}`,children:(0,L.jsx)(`span`,{className:`clamp-3`,children:e.series.name})}),!!e.series.description&&(0,L.jsx)(`p`,{className:`${e.hasTableOfContents?Z.hasTableOfContents:``} ${Z.hoverDescription} ${e.isSmall?Z.smallHoverDescription:Z.largeHoverDescription} mb-0`,children:e.series.description}),(0,L.jsx)(`div`,{className:`${Z.labelContainerOverlay}`,children:e.mergedAudience?(0,L.jsx)(N,{audience:e.mergedAudience,border:`dark`,className:`mt-2 w-fit`}):(0,L.jsx)(E,{type:T.Rating,data:A.getRating(e.series),className:`mt-2`})})]})}function pe(e){let[t,n]=te({className:Z.hoverActive}),r=e.series&&e.series.subjectPresentationAudiences&&e.series.subjectPresentationAudiences.data||[],i=M(r,e.presentationAudiences),a=!!(r&&r.length&&i);return(0,L.jsx)(`div`,{ref:t,children:(0,L.jsxs)(w,{data:e.series.tallPoster,alt:e.series.name,imageType:h.TallPosters,preload:e.preloadImage,imageOptions:{size:g.Large},imageClassName:e.imageClass?e.imageClass:`rounded-3`,children:[n&&(0,L.jsx)(fe,{isSmall:e.isSmall,series:e.series,mergedAudience:r&&r.length?i:null,hasTableOfContents:e.hasTableOfContents}),(0,L.jsx)(k,{type:O.Series}),(0,L.jsx)(`div`,{className:`position-absolute text-white ${Z.labelContainer}`,children:a?(0,L.jsx)(N,{audience:i,className:`bg-white text-dark`,border:`dark`}):(0,L.jsx)(E,{className:`text-shadow`,type:T.Rating,data:A.getRating(e.series)})})]})})}var Q={partialHeroThumbnail:`_partialHeroThumbnail_pydn0_1`,partialSeriesText:`_partialSeriesText_pydn0_6`,partialVideoTitleText:`_partialVideoTitleText_pydn0_10`,partialBadge:`_partialBadge_pydn0_14`,partialDescription:`_partialDescription_pydn0_18`,partialSubject:`_partialSubject_pydn0_22`,partialHeading:`_partialHeading_pydn0_26`,guidance:`_guidance_pydn0_30`,responsiveGuidance:`_responsiveGuidance_pydn0_41`,description:`_description_pydn0_56`,details:`_details_pydn0_82`};$.defaultProps={newDurationStyle:!0,badgePosition:`thumbnail`};function $(e){let t=e.video?.subjectPresentationAudiences?.data,n=M(t,e.presentationAudiences),r=s.mergeOptions(e.analyticsOptions,{location:o.ClassificationHero,entity:C.getAnalyticsEntity(e.video)}),i=I.useRef(null);return e.video?(0,L.jsxs)(d,{children:[(0,L.jsx)(u,{xs:12,md:6,children:(0,L.jsx)(`div`,{ref:i,children:(0,L.jsx)(re,{analyticsOptions:r,video:e.video,appLink:e.getVideoAppLink?.(e.video,{}),imageOptions:{size:g.Medium},textPosition:S.Independent,type:`static`,audience:e.badgePosition===`thumbnail`?n:null,hideRating:e.badgePosition===`thumbnail`?!!n:!0,commonVideoProps:e.commonVideoProps})})}),(0,L.jsxs)(u,{xs:12,md:6,className:`${Q.details} position-relative`,children:[(0,L.jsxs)(`div`,{className:`d-flex justify-content-between`,children:[(0,L.jsxs)(`div`,{className:`overflow-hidden`,children:[(0,L.jsx)(P,{type:e.commonVideoProps.subTextType,appLink:e.commonVideoProps.getSubTextAppLink?.(e.video),analyticsData:e.analyticsData,analyticsOptions:r,video:e.video,className:`text-reset clamp-1`}),(0,L.jsx)(ne,{yearGroups:e.commonVideoProps.yearGroups,video:e.video,analyticsData:e.analyticsData,analyticsOptions:r,appLink:e.getVideoAppLink?.(e.video,{}),titleSize:`h4`,showNewVideoIndicator:e.showNewVideoIndicator,showPadlock:!e.commonVideoProps.hasStudentExperience&&!e.commonVideoProps.hasGuestExperience,titleClassName:e.titleClassName,clampLevel:2})]}),(0,L.jsx)(x,{analyticsData:e.analyticsData,analyticsOptions:r,video:e.video})]}),e.badgePosition===`info-panel`&&(0,L.jsxs)(j,{className:`pb-1`,children:[!e.hideInteractiveBadge&&(0,L.jsx)(E,{type:T.Interactive,data:e.video.interactives}),(0,L.jsx)(E,{type:T.Rating,data:C.getRating(e.video)}),(0,L.jsx)(E,{type:T.ProductionYear,data:e.video.productionYear})]}),(0,L.jsx)(`p`,{className:`mb-1`,children:(0,L.jsx)(`span`,{className:Q.description,children:e.video.description})}),e.badgePosition===`info-panel`&&(0,L.jsx)(N,{audience:n,className:`mt-1`,border:`dark`}),e.showVideoGuidance&&(0,L.jsx)(b,{video:e.video,analyticsData:e.analyticsData,analyticsOptions:r,containerClassName:`d-flex ${Q.guidance}`,responsiveClassName:Q.responsiveGuidance,commonVideoProps:e.commonVideoProps})]})]}):(0,L.jsx)(L.Fragment,{})}export{R as i,pe as n,X as r,$ as t};
2
+ //# sourceMappingURL=DR80oZtZ.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DlQrdOls.chunk.js","names":["en_US","zh_CN"],"sources":["../../../../libs/shared/src/apps/playlists/components/playlist-list/playlist.module.scss","../../../../libs/shared/src/apps/playlists/components/playlist-list/PartialPlaylistList.tsx","../../../../../node_modules/timeago.js/esm/lang/en_US.js","../../../../../node_modules/timeago.js/esm/lang/zh_CN.js","../../../../../node_modules/timeago.js/esm/register.js","../../../../../node_modules/timeago.js/esm/utils/date.js","../../../../../node_modules/timeago.js/esm/format.js","../../../../../node_modules/timeago.js/esm/index.js","../../../../libs/shared/src/apps/playlists/components/playlist-count/PlaylistCount.tsx","../../../../libs/shared/src/components/clickview-avatar/clickview-avatar.module.scss","../../../../libs/shared/src/components/clickview-avatar/ClickViewAvatar.tsx","../../../../libs/shared/src/apps/playlists/components/playlist-list/PlaylistOwnerAvatar.tsx","../../../../libs/shared/src/apps/playlists/components/playlist-list/PlaylistItem.tsx","../../../../libs/shared/src/apps/playlists/components/playlist-list/PlaylistList.tsx","../../../../libs/shared/src/components/series-tall-poster/series-tall-poster.module.scss","../../../../libs/shared/src/components/series-tall-poster/SeriesTallPoster.tsx","../../../../libs/shared/src/apps/subjects/components/hero-video/hero-video.module.scss","../../../../libs/shared/src/apps/subjects/components/hero-video/HeroVideo.tsx"],"sourcesContent":[":local {\n .playlistItem {\n padding-bottom: 100%; // 1:1 aspect ratio\n }\n\n .playlistItemGradient {\n &::after {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: linear-gradient(\n to top,\n rgba(0, 0, 0, 0.55) 00%,\n rgba(0, 0, 0, 0.50) 05%,\n rgba(0, 0, 0, 0.40) 10%,\n rgba(0, 0, 0, 0.20) 25%,\n rgba(0, 0, 0, 0.05) 50%,\n rgba(0, 0, 0, 0.02) 60%,\n rgba(0, 0, 0, 0.00) 80%\n );\n }\n }\n\n .playlistMetadata {\n position: absolute;\n left: map-get($spacers, 2);\n right: map-get($spacers, 2);\n bottom: map-get($spacers, 2);\n z-index: 1;\n }\n\n .partialHeading {\n height: 2rem;\n width: 17rem;\n }\n\n .ownerAvatarContainer {\n position: absolute;\n right: map-get($spacers, 2);\n top: map-get($spacers, 2);\n z-index: 1;\n width: 15%;\n height: 15%;\n }\n}","import * as React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport styles from './playlist.module.scss';\n\ninterface PartialPlaylistListProps {\n numItems?: number;\n itemClassName?: string;\n showHeading?: boolean;\n}\n\nPartialPlaylistList.defaultProps = {\n numItems: 8\n};\n\nexport function PartialPlaylistList(props: PartialPlaylistListProps): JSX.Element {\n const PARTIAL_PLAYLISTS = [...Array(props.numItems)];\n\n const className = props.itemClassName || '';\n\n return (\n <>\n {props.showHeading && <div className={`${styles.partialHeading} mb-1 partial-loading-background`} />}\n <Row className='mx-n1 mb-n2'>\n {PARTIAL_PLAYLISTS.map((p, idx) => (\n <Col key={idx} xs={6} sm={4} lg={3} className={`${className} px-1 pb-2`}>\n <div className={`${styles.playlistItem} partial-loading-background rounded-3`} />\n </Col>\n ))}\n </Row>\n </>\n );\n}\n","var EN_US = ['second', 'minute', 'hour', 'day', 'week', 'month', 'year'];\nexport default function (diff, idx) {\n if (idx === 0)\n return ['just now', 'right now'];\n var unit = EN_US[Math.floor(idx / 2)];\n if (diff > 1)\n unit += 's';\n return [diff + \" \" + unit + \" ago\", \"in \" + diff + \" \" + unit];\n}\n//# sourceMappingURL=en_US.js.map","var ZH_CN = ['秒', '分钟', '小时', '天', '周', '个月', '年'];\nexport default function (diff, idx) {\n if (idx === 0)\n return ['刚刚', '片刻后'];\n var unit = ZH_CN[~~(idx / 2)];\n return [diff + \" \" + unit + \"\\u524D\", diff + \" \" + unit + \"\\u540E\"];\n}\n//# sourceMappingURL=zh_CN.js.map","/**\n * Created by hustcc on 18/5/20.\n * Contract: i@hust.cc\n */\n/**\n * All supported locales\n */\nvar Locales = {};\n/**\n * register a locale\n * @param locale\n * @param func\n */\nexport var register = function (locale, func) {\n Locales[locale] = func;\n};\n/**\n * get a locale, default is en_US\n * @param locale\n * @returns {*}\n */\nexport var getLocale = function (locale) {\n return Locales[locale] || Locales['en_US'];\n};\n//# sourceMappingURL=register.js.map","/**\n * Created by hustcc on 18/5/20.\n * Contract: i@hust.cc\n */\nvar SEC_ARRAY = [\n 60,\n 60,\n 24,\n 7,\n 365 / 7 / 12,\n 12,\n];\n/**\n * format Date / string / timestamp to timestamp\n * @param input\n * @returns {*}\n */\nexport function toDate(input) {\n if (input instanceof Date)\n return input;\n // @ts-ignore\n if (!isNaN(input) || /^\\d+$/.test(input))\n return new Date(parseInt(input));\n input = (input || '')\n // @ts-ignore\n .trim()\n .replace(/\\.\\d+/, '') // remove milliseconds\n .replace(/-/, '/')\n .replace(/-/, '/')\n .replace(/(\\d)T(\\d)/, '$1 $2')\n .replace(/Z/, ' UTC') // 2017-2-5T3:57:52Z -> 2017-2-5 3:57:52UTC\n .replace(/([+-]\\d\\d):?(\\d\\d)/, ' $1$2'); // -04:00 -> -0400\n return new Date(input);\n}\n/**\n * format the diff second to *** time ago, with setting locale\n * @param diff\n * @param localeFunc\n * @returns\n */\nexport function formatDiff(diff, localeFunc) {\n /**\n * if locale is not exist, use defaultLocale.\n * if defaultLocale is not exist, use build-in `en`.\n * be sure of no error when locale is not exist.\n *\n * If `time in`, then 1\n * If `time ago`, then 0\n */\n var agoIn = diff < 0 ? 1 : 0;\n /**\n * Get absolute value of number (|diff| is non-negative) value of x\n * |diff| = diff if diff is positive\n * |diff| = -diff if diff is negative\n * |0| = 0\n */\n diff = Math.abs(diff);\n /**\n * Time in seconds\n */\n var totalSec = diff;\n /**\n * Unit of time\n */\n var idx = 0;\n for (; diff >= SEC_ARRAY[idx] && idx < SEC_ARRAY.length; idx++) {\n diff /= SEC_ARRAY[idx];\n }\n /**\n * Math.floor() is alternative of ~~\n *\n * The differences and bugs:\n * Math.floor(3.7) -> 4 but ~~3.7 -> 3\n * Math.floor(1559125440000.6) -> 1559125440000 but ~~1559125440000.6 -> 52311552\n *\n * More information about the performance of algebraic:\n * https://www.youtube.com/watch?v=65-RbBwZQdU\n */\n diff = Math.floor(diff);\n idx *= 2;\n if (diff > (idx === 0 ? 9 : 1))\n idx += 1;\n return localeFunc(diff, idx, totalSec)[agoIn].replace('%s', diff.toString());\n}\n/**\n * calculate the diff second between date to be formatted an now date.\n * @param date\n * @param relativeDate\n * @returns {number}\n */\nexport function diffSec(date, relativeDate) {\n var relDate = relativeDate ? toDate(relativeDate) : new Date();\n return (+relDate - +toDate(date)) / 1000;\n}\n/**\n * nextInterval: calculate the next interval time.\n * - diff: the diff sec between now and date to be formatted.\n *\n * What's the meaning?\n * diff = 61 then return 59\n * diff = 3601 (an hour + 1 second), then return 3599\n * make the interval with high performance.\n **/\nexport function nextInterval(diff) {\n var rst = 1, i = 0, d = Math.abs(diff);\n for (; diff >= SEC_ARRAY[i] && i < SEC_ARRAY.length; i++) {\n diff /= SEC_ARRAY[i];\n rst *= SEC_ARRAY[i];\n }\n d = d % rst;\n d = d ? rst - d : rst;\n return Math.ceil(d);\n}\n//# sourceMappingURL=date.js.map","import { formatDiff, diffSec } from './utils/date';\nimport { getLocale } from './register';\n/**\n * format a TDate into string\n * @param date\n * @param locale\n * @param opts\n */\nexport var format = function (date, locale, opts) {\n // diff seconds\n var sec = diffSec(date, opts && opts.relativeDate);\n // format it with locale\n return formatDiff(sec, getLocale(locale));\n};\n//# sourceMappingURL=format.js.map","/**\n * Created by hustcc on 18/5/20.\n * Contract: i@hust.cc\n */\nimport en_US from './lang/en_US';\nimport zh_CN from './lang/zh_CN';\nimport { register } from './register';\nregister('en_US', en_US);\nregister('zh_CN', zh_CN);\nexport { format } from './format';\nexport { render, cancel } from './realtime';\nexport { register };\n//# sourceMappingURL=index.js.map","import React from 'react';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Playlist } from 'libs/shared/interfaces';\n\nconst namespace = 'playlists.playlistCount';\n\nfunction getCount(playlist: Playlist): number | false {\n if (!playlist)\n return false;\n\n const videos = playlist.videos?.count ?? 0;\n const interactives = playlist.interactives?.count ?? 0;\n const clips = playlist.clips?.count ?? 0;\n\n return videos + interactives + clips;\n}\n\ninterface PlaylistCountProps {\n playlist: Playlist;\n}\n\nexport function PlaylistCount(props: PlaylistCountProps): JSX.Element {\n const count = getCount(props.playlist);\n\n if (count === false || Number.isNaN(count))\n return <></>;\n\n return (\n <span className='text-shadow font-size-sm'>\n <Text namespace={namespace} phrase='count' options={{ smartCount: count }} />\n </span>\n );\n}\n",".avatar {\n position: relative;\n border-radius: 50%;\n background-color: $white;\n width: 100%;\n height: 100%;\n text-align: center;\n\n svg {\n position: absolute;\n top: 50%;\n left: 59%; // 59 rather than 50 as it makes the play icon look more centered\n transform: translate(-50%, -50%);\n width: 60%;\n height: 60%;\n }\n}","import * as React from 'react';\n\nimport { ClickViewLogoMark } from 'libs/shared/components/svgs/clickview-logo/ClickViewLogo';\n\nimport styles from './clickview-avatar.module.scss';\n\nexport function ClickViewAvatar(): JSX.Element {\n return (\n <div className={styles.avatar}>\n <ClickViewLogoMark />\n </div>\n );\n}\n","import * as React from 'react';\n\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { ClickViewAvatar } from 'libs/shared/components/clickview-avatar/ClickViewAvatar';\nimport { CurrentUser, Playlist } from 'libs/shared/interfaces';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\ninterface PlaylistOwnerAvatarProps {\n playlist: Playlist;\n imageCdnUrl: string;\n currentUser?: CurrentUser;\n}\n\nexport function PlaylistOwnerAvatar(props: PlaylistOwnerAvatarProps): JSX.Element {\n const { _liteOwner } = props.playlist;\n\n if (props.playlist._isClickViewCurated?.value)\n return (\n <ClickViewAvatar />\n );\n\n if (!_liteOwner?.id || !props.currentUser?.id)\n return <></>;\n\n const currentUserIsOwner = _liteOwner.id.toString() === props.currentUser.id.toString();\n\n if (currentUserIsOwner)\n return <></>;\n\n const url = typeof _liteOwner.avatar === 'string' ? _liteOwner.avatar : _liteOwner.avatar?.url;\n\n return (\n <Avatar\n imageUrl={url}\n imageCdnUrl={props.imageCdnUrl}\n initials={UserHelper.getInitials(_liteOwner.name, _liteOwner.surname)}\n />\n );\n}\n","import * as React from 'react';\nimport { format } from 'timeago.js';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { AnalyticsOptions, EntityType, HashObject } from 'libs/analytics/interfaces';\n\nimport { PlaylistCount } from 'libs/shared/apps/playlists/components/playlist-count/PlaylistCount';\nimport { PlaylistOwnerAvatar } from 'libs/shared/apps/playlists/components/playlist-list/PlaylistOwnerAvatar';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { AudienceLabel } from 'libs/shared/components/audience-label/AudienceLabel';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { ImageSize, ResizeType } from 'libs/shared/enums/Images';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { CurrentUser, Playlist, PresentationAudience } from 'libs/shared/interfaces';\nimport { getBgColorClass } from 'libs/shared/utils/getBgColorClass';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './playlist.module.scss';\n\nconst namespace = 'playlists.playlistList';\n\nexport type PlaylistItemStyle = 'square' | 'round' | 'round-left';\n\nexport interface PlaylistItemProps {\n data: Playlist;\n appLink: Core.AppLink;\n currentUser?: CurrentUser;\n presentationAudiences?: PresentationAudience[];\n bgColourClassNames?: string[];\n titleClassName?: string;\n imageCdnUrl?: string;\n itemStyle?: PlaylistItemStyle;\n showCount?: boolean;\n showOwner?: boolean;\n showFallbackImage?: boolean;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n audienceLabelClass?: string;\n}\n\nPlaylistItem.defaultProps = {\n itemStyle: 'square'\n};\n\nexport function PlaylistItem(props: PlaylistItemProps): JSX.Element {\n const imageUrl = ImageHelper.createUrl(props.data.cover && props.data.cover.url, {\n size: ImageSize.Medium,\n resizeType: ResizeType.Cover\n });\n\n const audiences = props.data.subjectPresentationAudiences &&\n props.data.subjectPresentationAudiences.data;\n\n const mergedAudience = useMergeAudiences(audiences, props.presentationAudiences);\n\n let className = styles.playlistItem;\n\n const showImage = !!imageUrl || !!props.showFallbackImage;\n\n if (showImage)\n className += ` ${styles.playlistItemGradient}`;\n\n if (!showImage && props.bgColourClassNames)\n className += ` ${styles.playlistItem} ${getBgColorClass(props.data.name, props.bgColourClassNames)}`;\n\n if (props.itemStyle === 'round')\n className += ` rounded-3 overflow-hidden`;\n\n if (props.itemStyle === 'round-left')\n className += ` rounded-start-lg overflow-hidden`;\n\n const analyticsData = { ...props.analyticsData,\n id: props.data?.id,\n name: props.data?.name\n };\n\n const analyticsOptions = {\n ...props.analyticsOptions,\n entity: EntityType.Playlist\n };\n\n const getTitle = () => {\n if (!props.data.contentModifiedDate || props.data._isClickViewCurated?.value)\n return '';\n\n return LanguageService.getPhrase(namespace, 'lastUpdated', {\n timeago: format(DateHelper.convertUTCToLocal(props.data.contentModifiedDate))\n });\n };\n\n return (\n <AppLink\n appLink={props.appLink}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n title={getTitle()}\n >\n <BaseImage data={imageUrl} alt={props.data.name} className={className}>\n {!!props.showFallbackImage && <ImageFallback type={ImageFallbackType.Playlist} />}\n <div className={`text-white ${styles.playlistMetadata}`}>\n {!!props.showCount && (\n <PlaylistCount playlist={props.data} />\n )}\n <h5 className={`mb-0 ${props.titleClassName || ''}`}><span className='text-shadow clamp-2'>{props.data.name}</span></h5>\n {!!audiences && !!audiences.length && !!mergedAudience &&\n <AudienceLabel\n className={`${props.audienceLabelClass ? props.audienceLabelClass : ''} mt-1`}\n audience={mergedAudience}\n border='white'\n />\n }\n </div>\n {!!props.showOwner && !!props.imageCdnUrl &&\n <div className={styles.ownerAvatarContainer}>\n <PlaylistOwnerAvatar\n playlist={props.data}\n currentUser={props.currentUser}\n imageCdnUrl={props.imageCdnUrl}\n />\n </div>\n }\n </BaseImage>\n </AppLink>\n );\n}\n","import * as React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/core';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, HashObject, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { CurrentUser, Playlist, PresentationAudience } from 'libs/shared/interfaces';\n\nimport { PlaylistItem, PlaylistItemStyle } from './PlaylistItem';\n\ninterface PlaylistListProps {\n playlists: Playlist[];\n getPlaylistAppLink: (playlist: Playlist) => Core.AppLink;\n currentUser?: CurrentUser;\n presentationAudiences?: PresentationAudience[];\n itemContainerClassName?: string;\n itemTitleClassName?: string;\n bgColourClassNames?: string[];\n itemStyle?: PlaylistItemStyle;\n imageCdnUrl?: string;\n showCount?: boolean;\n showOwner?: boolean;\n showFallbackImage?: boolean;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n extraPlaylistItem?: JSX.Element;\n}\n\nconst analyticsOptions: AnalyticsOptions = {\n actionType: UserAction.Click,\n entity: EntityType.Playlist,\n location: LocationContext.PlaylistListItem,\n descriptor: ClickDescriptor.Cover\n};\n\nexport function PlaylistList(props: PlaylistListProps): JSX.Element {\n return (\n <Row as='ul' className='list-unstyled mx-n1'>\n {props.extraPlaylistItem && (\n <Col as='li' key='extra-playlist-item' xs={6} sm={4} lg={3} className={`mb-2 px-1 ${props.itemContainerClassName ? props.itemContainerClassName : ''}`}>\n {props.extraPlaylistItem}\n </Col>\n )}\n\n {props.playlists.map(p => (\n <Col as='li' key={p.id} xs={6} sm={4} lg={3} className={`mb-2 px-1 ${props.itemContainerClassName ? props.itemContainerClassName : ''}`}>\n <PlaylistItem\n data={p}\n appLink={props.getPlaylistAppLink(p)}\n imageCdnUrl={props.imageCdnUrl}\n currentUser={props.currentUser}\n presentationAudiences={props.presentationAudiences}\n bgColourClassNames={props.bgColourClassNames}\n showCount={props.showCount}\n showOwner={props.showOwner}\n showFallbackImage={props.showFallbackImage}\n titleClassName={props.itemTitleClassName}\n itemStyle={props.itemStyle}\n analyticsData={props.analyticsData}\n analyticsOptions={{ ...props.analyticsOptions, ...analyticsOptions }}\n />\n </Col>\n ))}\n </Row>\n );\n}\n","@import '~styles/utils/mixins';\n@import '~styles/utils/include-media';\n:local {\n .labelContainer {\n z-index: 1;\n bottom: map-get($spacers, 2);\n left: 50%;\n transform: translate(-50%, 0%);\n\n :global(.rating-badge) {\n @include thumbnail-poster-badge;\n }\n }\n\n .labelContainerOverlay {\n :global(.rating-badge) {\n @include thumbnail-poster-badge;\n }\n }\n\n .hoverActive {\n transform: translate3D(0, -1px, 0) scale(1.01);\n transition: all .1s ease;\n\n &:after {\n content: '';\n\n position: absolute;\n top: 0;\n left: -(map-get($spacers, 1));\n right: -(map-get($spacers, 1));\n bottom: 0;\n\n margin: 0 map-get($spacers, 1);\n\n border-radius: $border-radius-lg;\n }\n }\n\n .mask {\n z-index: 2;\n position: absolute;\n bottom: map-get($spacers, 2);\n right: 0;\n left: 0;\n\n max-height: calc(100% - (map-get($spacers, 2) * 2));\n \n @include media('<=lg') {\n padding: map-get($spacers, 3) map-get($spacers, 1);\n }\n\n .largeHoverTitle {\n font-size: $h4-font-size;\n\n @include media('<=lg') {\n font-size: $h5-font-size;\n }\n\n @include media('<=md') {\n font-size: $h6-font-size;\n margin-bottom: map-get($spacers, 1);\n }\n\n @include media('<=sm') {\n font-size: $h5-font-size;\n }\n }\n\n .smallHoverTitle {\n font-size: $h5-font-size;\n\n @include media('<=xl') {\n font-size: $h6-font-size;\n }\n\n @include media('<=lg') {\n font-size: $h6-font-size;\n }\n\n @include media('<=md') {\n @include clamp(5);\n }\n }\n\n .description {\n text-overflow: ellipsis;\n overflow: hidden;\n -webkit-box-orient: vertical;\n display: -webkit-box;\n }\n\n .largeHoverDescription {\n @include clamp(11);\n\n @include media('<=xl') {\n @include clamp(9);\n }\n @include media('<=lg') {\n @include clamp(7);\n }\n @include media(\"<=878px\") {\n @include clamp(4);\n }\n\n &.hasTableOfContents {\n @include clamp(7);\n\n @include media('<=xl') {\n @include clamp(5);\n }\n @include media(\"<=1003px\") {\n @include clamp(4);\n }\n @include media('<=lg') {\n @include clamp(7);\n }\n @include media(\"<=878px\") {\n @include clamp(4);\n }\n }\n }\n\n .smallHoverDescription {\n @include clamp(8);\n\n @include media('<=xl') {\n @include clamp(8);\n font-size: 12px;\n }\n\n @include media('<=md') {\n @include clamp(6);\n }\n @include media('<=sm') {\n @include clamp(9);\n }\n } \n }\n}","import React from 'react';\n\nimport { AudienceLabel } from 'libs/shared/components/audience-label/AudienceLabel';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { useHoverIntent } from 'libs/shared/hooks/UseHover';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { PresentationAudience, Series } from 'libs/shared/interfaces';\nimport { SeriesHelper } from 'libs/shared/utils/SeriesHelper';\n\nimport styles from './series-tall-poster.module.scss';\n\ninterface SeriesTallPosterHoverOverlay {\n series: Series;\n mergedAudience: PresentationAudience;\n isSmall?: boolean;\n hasTableOfContents?: boolean;\n}\n\nfunction SeriesTallPosterHoverOverlay(props: SeriesTallPosterHoverOverlay): JSX.Element {\n return (\n <div className={`py-3 mx-2 px-2 rounded bg-white text-center ${styles.mask} d-flex flex-column align-items-center`}>\n <h3 className={`fw-semibold mb-0 ${styles.hoverTitle} ${props.isSmall ? styles.smallHoverTitle : styles.largeHoverTitle}`}>\n <span className='clamp-3'>\n {props.series.name}\n </span>\n </h3>\n\n {!!props.series.description && (\n <p className={`${props.hasTableOfContents ? styles.hasTableOfContents : ''} ${styles.hoverDescription} ${props.isSmall ? styles.smallHoverDescription : styles.largeHoverDescription} mb-0`}>{props.series.description}</p>\n )}\n <div className={`${styles.labelContainerOverlay}`}>\n {props.mergedAudience ?\n <AudienceLabel audience={props.mergedAudience} border='dark' className='mt-2 w-fit'/> :\n <Badge type={BadgeType.Rating} data={SeriesHelper.getRating(props.series)} className='mt-2' />\n }\n </div>\n </div>\n );\n}\n\ninterface SeriesTallPosterMaskProps {\n series: Series;\n presentationAudiences: PresentationAudience[];\n preloadImage: boolean;\n imageClass?: string;\n isSmall?: boolean;\n hasTableOfContents?: boolean;\n}\n\nexport function SeriesTallPoster(props: SeriesTallPosterMaskProps): JSX.Element {\n const [ hoverRef, isHovering ] = useHoverIntent<HTMLDivElement>({ className: styles.hoverActive });\n \n const audiences = props.series && props.series.subjectPresentationAudiences &&\n props.series.subjectPresentationAudiences.data || [];\n\n const mergedAudience = useMergeAudiences(audiences, props.presentationAudiences);\n const displayAudience = !!(audiences && audiences.length && mergedAudience);\n\n return (\n <div ref={hoverRef}>\n <BaseImage\n data={props.series.tallPoster}\n alt={props.series.name}\n imageType={ImageType.TallPosters}\n preload={props.preloadImage}\n imageOptions={{ size: ImageSize.Large }}\n imageClassName={props.imageClass ? props.imageClass : 'rounded-3'}\n >\n {isHovering && (\n <SeriesTallPosterHoverOverlay\n isSmall={props.isSmall}\n series={props.series}\n mergedAudience={audiences && audiences.length ? mergedAudience : null}\n hasTableOfContents={props.hasTableOfContents}\n />\n )}\n \n <ImageFallback type={ImageFallbackType.Series} />\n <div className={`position-absolute text-white ${styles.labelContainer}`}>\n {displayAudience ?\n <AudienceLabel audience={mergedAudience} className='bg-white text-dark' border='dark' /> :\n <Badge className='text-shadow' type={BadgeType.Rating} data={SeriesHelper.getRating(props.series)} />\n }\n </div>\n </BaseImage>\n </div>\n );\n}\n","@import '~styles/utils/mixins';\n@import '~styles/utils/include-media';\n:local {\n .partialHeroThumbnail {\n position: relative;\n width: 100%;\n padding-bottom: 56.25%;\n }\n\n .partialSeriesText {\n width: 6.25rem;\n height: 1rem;\n }\n\n .partialVideoTitleText {\n width: 16rem;\n height: 2rem;\n }\n\n .partialBadge {\n width: 4rem;\n height: 1rem;\n }\n\n .partialDescription {\n width: 80%;\n height: 4rem;\n }\n\n .partialSubject {\n width: 6.25rem;\n height: 1.5rem;\n }\n\n .partialHeading {\n height: 1.5rem;\n width: 8.4375rem;\n }\n\n .guidance {\n position: absolute;\n bottom: 0;\n gap: map-get($spacers, 1);\n\n @include media(\"<md\") {\n position: relative;\n }\n }\n\n .responsiveGuidance {\n @include media('>md') {\n @include responsive-guidance-tags;\n }\n\n @include media('<=sm') {\n @include responsive-guidance-tags;\n }\n }\n\n .description {\n @include clamp(4);\n \n @include media(\"<xl\") {\n @include clamp(3);\n }\n \n @include media(\"<md\") {\n display: none;\n }\n }\n\n .details {\n @include media(\"<md\") {\n padding-top: map-get($spacers, 2);\n }\n }\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, LocationContext } from 'libs/analytics/interfaces';\n\nimport { AudienceLabel } from 'libs/shared/components/audience-label/AudienceLabel';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { BadgeListContainer } from 'libs/shared/components/badges/BadgeListContainer';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { VideoItemGuidance } from 'libs/shared/components/video-list/components/video-guidance/VideoItemGuidance';\nimport { VideoItemActions } from 'libs/shared/components/video-list/components/video-item-actions/VideoItemActions';\nimport { VideoItemTitle } from 'libs/shared/components/video-list/components/video-item-title/VideoItemTitle';\nimport { VideoSubText } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { PresentationAudience, Video } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './hero-video.module.scss';\n\ninterface HeroVideoProps {\n video: Video;\n presentationAudiences: PresentationAudience[];\n showVideoGuidance: boolean;\n getVideoAppLink: (video: Video, opts: GetVideoAppLinkOptions) => Core.AppLink;\n hideInteractiveBadge?: boolean;\n badgePosition?: 'thumbnail' | 'info-panel';\n titleClassName?: string;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n commonVideoProps: CommonVideoProps;\n showNewVideoIndicator?: boolean;\n}\n\nHeroVideo.defaultProps = {\n newDurationStyle: true,\n badgePosition: 'thumbnail'\n};\n\nexport function HeroVideo(props: HeroVideoProps): JSX.Element {\n const videoAudiences = props.video?.subjectPresentationAudiences?.data;\n const mergedAudience = useMergeAudiences(videoAudiences, props.presentationAudiences);\n\n const analyticsOptions = AnalyticsHelper.mergeOptions(props.analyticsOptions, {\n location: LocationContext.ClassificationHero,\n entity: VideoHelper.getAnalyticsEntity(props.video)\n });\n\n const containerRef = React.useRef(null);\n \n if (!props.video)\n return <></>;\n\n return (\n <Row>\n <Col xs={12} md={6}>\n <div ref={containerRef} >\n <VideoThumbnail\n analyticsOptions={analyticsOptions}\n video={props.video}\n appLink={props.getVideoAppLink?.(props.video, {})}\n imageOptions={{ size: ImageSize.Medium }}\n textPosition={ThumbnailTextPosition.Independent}\n type='static'\n audience={props.badgePosition === 'thumbnail' ? mergedAudience : null}\n hideRating={props.badgePosition === 'thumbnail' ? !!mergedAudience : true}\n commonVideoProps={props.commonVideoProps}\n />\n </div>\n </Col>\n <Col xs={12} md={6} className={`${styles.details} position-relative`}>\n <div className='d-flex justify-content-between'>\n <div className='overflow-hidden'>\n <VideoSubText\n type={props.commonVideoProps.subTextType}\n appLink={props.commonVideoProps.getSubTextAppLink?.(props.video)}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n video={props.video}\n className='text-reset clamp-1'\n />\n <VideoItemTitle\n yearGroups={props.commonVideoProps.yearGroups}\n video={props.video}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n appLink={props.getVideoAppLink?.(props.video, {})}\n titleSize='h4'\n showNewVideoIndicator={props.showNewVideoIndicator}\n showPadlock={!props.commonVideoProps.hasStudentExperience && !props.commonVideoProps.hasGuestExperience}\n titleClassName={props.titleClassName}\n clampLevel={2}\n />\n </div>\n <VideoItemActions\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n video={props.video}\n />\n </div>\n\n {props.badgePosition === 'info-panel' && (\n <BadgeListContainer className='pb-1'>\n {!props.hideInteractiveBadge && <Badge type={ BadgeType.Interactive } data={props.video.interactives} />}\n <Badge type={ BadgeType.Rating } data={VideoHelper.getRating(props.video)} />\n <Badge type={ BadgeType.ProductionYear } data={props.video.productionYear} />\n </BadgeListContainer>\n )}\n\n <p className='mb-1'><span className={styles.description}>{props.video.description}</span></p>\n \n {props.badgePosition === 'info-panel' && (\n <AudienceLabel\n audience={mergedAudience}\n className='mt-1'\n border='dark'\n />\n )}\n\n {props.showVideoGuidance && (\n <VideoItemGuidance\n video={props.video}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n containerClassName={`d-flex ${styles.guidance}`}\n responsiveClassName={styles.responsiveGuidance}\n commonVideoProps={props.commonVideoProps}\n />\n )}\n </Col>\n </Row>\n );\n}\n\nexport function PartialHeroVideo(): JSX.Element {\n return (\n <>\n <div className={`partial-loading-background mb-2 ${styles.partialHeading}`} />\n <div className='row pb-3'>\n <div className='col-6 p1'>\n <div className={`${styles.partialHeroThumbnail} partial-loading-background rounded-3`}></div>\n </div>\n <div className='col-6 p1'>\n <div className={`partial-loading-background mb-1 ${styles.partialSeriesText}`}></div>\n <div className={`partial-loading-background my-1 ${styles.partialVideoTitleText}`}></div>\n <div className='d-flex'>\n <div className={`partial-loading-background my-1 me-1 ${styles.partialBadge}`}></div>\n <div className={`partial-loading-background my-1 ms-1 ${styles.partialBadge}`}></div>\n </div>\n <div className={`partial-loading-background my-1 ${styles.partialDescription}`}></div>\n <div className={`partial-loading-background mt-2 ${styles.partialSubject}`}></div>\n </div>\n </div>\n </>\n );\n}\n"],"x_google_ignoreList":[2,3,4,5,6,7],"mappings":"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"}
1
+ {"version":3,"file":"DR80oZtZ.chunk.js","names":["en_US","zh_CN"],"sources":["../../../../libs/shared/src/apps/playlists/components/playlist-list/playlist.module.scss","../../../../libs/shared/src/apps/playlists/components/playlist-list/PartialPlaylistList.tsx","../../../../../node_modules/timeago.js/esm/lang/en_US.js","../../../../../node_modules/timeago.js/esm/lang/zh_CN.js","../../../../../node_modules/timeago.js/esm/register.js","../../../../../node_modules/timeago.js/esm/utils/date.js","../../../../../node_modules/timeago.js/esm/format.js","../../../../../node_modules/timeago.js/esm/index.js","../../../../libs/shared/src/apps/playlists/components/playlist-count/PlaylistCount.tsx","../../../../libs/shared/src/components/clickview-avatar/clickview-avatar.module.scss","../../../../libs/shared/src/components/clickview-avatar/ClickViewAvatar.tsx","../../../../libs/shared/src/apps/playlists/components/playlist-list/PlaylistOwnerAvatar.tsx","../../../../libs/shared/src/apps/playlists/components/playlist-list/PlaylistItem.tsx","../../../../libs/shared/src/apps/playlists/components/playlist-list/PlaylistList.tsx","../../../../libs/shared/src/components/series-tall-poster/series-tall-poster.module.scss","../../../../libs/shared/src/components/series-tall-poster/SeriesTallPoster.tsx","../../../../libs/shared/src/apps/subjects/components/hero-video/hero-video.module.scss","../../../../libs/shared/src/apps/subjects/components/hero-video/HeroVideo.tsx"],"sourcesContent":[":local {\n .playlistItem {\n padding-bottom: 100%; // 1:1 aspect ratio\n }\n\n .playlistItemGradient {\n &::after {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: linear-gradient(\n to top,\n rgba(0, 0, 0, 0.55) 00%,\n rgba(0, 0, 0, 0.50) 05%,\n rgba(0, 0, 0, 0.40) 10%,\n rgba(0, 0, 0, 0.20) 25%,\n rgba(0, 0, 0, 0.05) 50%,\n rgba(0, 0, 0, 0.02) 60%,\n rgba(0, 0, 0, 0.00) 80%\n );\n }\n }\n\n .playlistMetadata {\n position: absolute;\n left: map-get($spacers, 2);\n right: map-get($spacers, 2);\n bottom: map-get($spacers, 2);\n z-index: 1;\n }\n\n .partialHeading {\n height: 2rem;\n width: 17rem;\n }\n\n .ownerAvatarContainer {\n position: absolute;\n right: map-get($spacers, 2);\n top: map-get($spacers, 2);\n z-index: 1;\n width: 15%;\n height: 15%;\n }\n}","import * as React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport styles from './playlist.module.scss';\n\ninterface PartialPlaylistListProps {\n numItems?: number;\n itemClassName?: string;\n showHeading?: boolean;\n}\n\nPartialPlaylistList.defaultProps = {\n numItems: 8\n};\n\nexport function PartialPlaylistList(props: PartialPlaylistListProps): JSX.Element {\n const PARTIAL_PLAYLISTS = [...Array(props.numItems)];\n\n const className = props.itemClassName || '';\n\n return (\n <>\n {props.showHeading && <div className={`${styles.partialHeading} mb-1 partial-loading-background`} />}\n <Row className='mx-n1 mb-n2'>\n {PARTIAL_PLAYLISTS.map((p, idx) => (\n <Col key={idx} xs={6} sm={4} lg={3} className={`${className} px-1 pb-2`}>\n <div className={`${styles.playlistItem} partial-loading-background rounded-3`} />\n </Col>\n ))}\n </Row>\n </>\n );\n}\n","var EN_US = ['second', 'minute', 'hour', 'day', 'week', 'month', 'year'];\nexport default function (diff, idx) {\n if (idx === 0)\n return ['just now', 'right now'];\n var unit = EN_US[Math.floor(idx / 2)];\n if (diff > 1)\n unit += 's';\n return [diff + \" \" + unit + \" ago\", \"in \" + diff + \" \" + unit];\n}\n//# sourceMappingURL=en_US.js.map","var ZH_CN = ['秒', '分钟', '小时', '天', '周', '个月', '年'];\nexport default function (diff, idx) {\n if (idx === 0)\n return ['刚刚', '片刻后'];\n var unit = ZH_CN[~~(idx / 2)];\n return [diff + \" \" + unit + \"\\u524D\", diff + \" \" + unit + \"\\u540E\"];\n}\n//# sourceMappingURL=zh_CN.js.map","/**\n * Created by hustcc on 18/5/20.\n * Contract: i@hust.cc\n */\n/**\n * All supported locales\n */\nvar Locales = {};\n/**\n * register a locale\n * @param locale\n * @param func\n */\nexport var register = function (locale, func) {\n Locales[locale] = func;\n};\n/**\n * get a locale, default is en_US\n * @param locale\n * @returns {*}\n */\nexport var getLocale = function (locale) {\n return Locales[locale] || Locales['en_US'];\n};\n//# sourceMappingURL=register.js.map","/**\n * Created by hustcc on 18/5/20.\n * Contract: i@hust.cc\n */\nvar SEC_ARRAY = [\n 60,\n 60,\n 24,\n 7,\n 365 / 7 / 12,\n 12,\n];\n/**\n * format Date / string / timestamp to timestamp\n * @param input\n * @returns {*}\n */\nexport function toDate(input) {\n if (input instanceof Date)\n return input;\n // @ts-ignore\n if (!isNaN(input) || /^\\d+$/.test(input))\n return new Date(parseInt(input));\n input = (input || '')\n // @ts-ignore\n .trim()\n .replace(/\\.\\d+/, '') // remove milliseconds\n .replace(/-/, '/')\n .replace(/-/, '/')\n .replace(/(\\d)T(\\d)/, '$1 $2')\n .replace(/Z/, ' UTC') // 2017-2-5T3:57:52Z -> 2017-2-5 3:57:52UTC\n .replace(/([+-]\\d\\d):?(\\d\\d)/, ' $1$2'); // -04:00 -> -0400\n return new Date(input);\n}\n/**\n * format the diff second to *** time ago, with setting locale\n * @param diff\n * @param localeFunc\n * @returns\n */\nexport function formatDiff(diff, localeFunc) {\n /**\n * if locale is not exist, use defaultLocale.\n * if defaultLocale is not exist, use build-in `en`.\n * be sure of no error when locale is not exist.\n *\n * If `time in`, then 1\n * If `time ago`, then 0\n */\n var agoIn = diff < 0 ? 1 : 0;\n /**\n * Get absolute value of number (|diff| is non-negative) value of x\n * |diff| = diff if diff is positive\n * |diff| = -diff if diff is negative\n * |0| = 0\n */\n diff = Math.abs(diff);\n /**\n * Time in seconds\n */\n var totalSec = diff;\n /**\n * Unit of time\n */\n var idx = 0;\n for (; diff >= SEC_ARRAY[idx] && idx < SEC_ARRAY.length; idx++) {\n diff /= SEC_ARRAY[idx];\n }\n /**\n * Math.floor() is alternative of ~~\n *\n * The differences and bugs:\n * Math.floor(3.7) -> 4 but ~~3.7 -> 3\n * Math.floor(1559125440000.6) -> 1559125440000 but ~~1559125440000.6 -> 52311552\n *\n * More information about the performance of algebraic:\n * https://www.youtube.com/watch?v=65-RbBwZQdU\n */\n diff = Math.floor(diff);\n idx *= 2;\n if (diff > (idx === 0 ? 9 : 1))\n idx += 1;\n return localeFunc(diff, idx, totalSec)[agoIn].replace('%s', diff.toString());\n}\n/**\n * calculate the diff second between date to be formatted an now date.\n * @param date\n * @param relativeDate\n * @returns {number}\n */\nexport function diffSec(date, relativeDate) {\n var relDate = relativeDate ? toDate(relativeDate) : new Date();\n return (+relDate - +toDate(date)) / 1000;\n}\n/**\n * nextInterval: calculate the next interval time.\n * - diff: the diff sec between now and date to be formatted.\n *\n * What's the meaning?\n * diff = 61 then return 59\n * diff = 3601 (an hour + 1 second), then return 3599\n * make the interval with high performance.\n **/\nexport function nextInterval(diff) {\n var rst = 1, i = 0, d = Math.abs(diff);\n for (; diff >= SEC_ARRAY[i] && i < SEC_ARRAY.length; i++) {\n diff /= SEC_ARRAY[i];\n rst *= SEC_ARRAY[i];\n }\n d = d % rst;\n d = d ? rst - d : rst;\n return Math.ceil(d);\n}\n//# sourceMappingURL=date.js.map","import { formatDiff, diffSec } from './utils/date';\nimport { getLocale } from './register';\n/**\n * format a TDate into string\n * @param date\n * @param locale\n * @param opts\n */\nexport var format = function (date, locale, opts) {\n // diff seconds\n var sec = diffSec(date, opts && opts.relativeDate);\n // format it with locale\n return formatDiff(sec, getLocale(locale));\n};\n//# sourceMappingURL=format.js.map","/**\n * Created by hustcc on 18/5/20.\n * Contract: i@hust.cc\n */\nimport en_US from './lang/en_US';\nimport zh_CN from './lang/zh_CN';\nimport { register } from './register';\nregister('en_US', en_US);\nregister('zh_CN', zh_CN);\nexport { format } from './format';\nexport { render, cancel } from './realtime';\nexport { register };\n//# sourceMappingURL=index.js.map","import React from 'react';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Playlist } from 'libs/shared/interfaces';\n\nconst namespace = 'playlists.playlistCount';\n\nfunction getCount(playlist: Playlist): number | false {\n if (!playlist)\n return false;\n\n const videos = playlist.videos?.count ?? 0;\n const interactives = playlist.interactives?.count ?? 0;\n const clips = playlist.clips?.count ?? 0;\n\n return videos + interactives + clips;\n}\n\ninterface PlaylistCountProps {\n playlist: Playlist;\n}\n\nexport function PlaylistCount(props: PlaylistCountProps): JSX.Element {\n const count = getCount(props.playlist);\n\n if (count === false || Number.isNaN(count))\n return <></>;\n\n return (\n <span className='text-shadow font-size-sm'>\n <Text namespace={namespace} phrase='count' options={{ smartCount: count }} />\n </span>\n );\n}\n",".avatar {\n position: relative;\n border-radius: 50%;\n background-color: $white;\n width: 100%;\n height: 100%;\n text-align: center;\n\n svg {\n position: absolute;\n top: 50%;\n left: 59%; // 59 rather than 50 as it makes the play icon look more centered\n transform: translate(-50%, -50%);\n width: 60%;\n height: 60%;\n }\n}","import * as React from 'react';\n\nimport { ClickViewLogoMark } from 'libs/shared/components/svgs/clickview-logo/ClickViewLogo';\n\nimport styles from './clickview-avatar.module.scss';\n\nexport function ClickViewAvatar(): JSX.Element {\n return (\n <div className={styles.avatar}>\n <ClickViewLogoMark />\n </div>\n );\n}\n","import * as React from 'react';\n\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { ClickViewAvatar } from 'libs/shared/components/clickview-avatar/ClickViewAvatar';\nimport { CurrentUser, Playlist } from 'libs/shared/interfaces';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\ninterface PlaylistOwnerAvatarProps {\n playlist: Playlist;\n imageCdnUrl: string;\n currentUser?: CurrentUser;\n}\n\nexport function PlaylistOwnerAvatar(props: PlaylistOwnerAvatarProps): JSX.Element {\n const { _liteOwner } = props.playlist;\n\n if (props.playlist._isClickViewCurated?.value)\n return (\n <ClickViewAvatar />\n );\n\n if (!_liteOwner?.id || !props.currentUser?.id)\n return <></>;\n\n const currentUserIsOwner = _liteOwner.id.toString() === props.currentUser.id.toString();\n\n if (currentUserIsOwner)\n return <></>;\n\n const url = typeof _liteOwner.avatar === 'string' ? _liteOwner.avatar : _liteOwner.avatar?.url;\n\n return (\n <Avatar\n imageUrl={url}\n imageCdnUrl={props.imageCdnUrl}\n initials={UserHelper.getInitials(_liteOwner.name, _liteOwner.surname)}\n />\n );\n}\n","import * as React from 'react';\nimport { format } from 'timeago.js';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { AnalyticsOptions, EntityType, HashObject } from 'libs/analytics/interfaces';\n\nimport { PlaylistCount } from 'libs/shared/apps/playlists/components/playlist-count/PlaylistCount';\nimport { PlaylistOwnerAvatar } from 'libs/shared/apps/playlists/components/playlist-list/PlaylistOwnerAvatar';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { AudienceLabel } from 'libs/shared/components/audience-label/AudienceLabel';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { ImageSize, ResizeType } from 'libs/shared/enums/Images';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { CurrentUser, Playlist, PresentationAudience } from 'libs/shared/interfaces';\nimport { getBgColorClass } from 'libs/shared/utils/getBgColorClass';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './playlist.module.scss';\n\nconst namespace = 'playlists.playlistList';\n\nexport type PlaylistItemStyle = 'square' | 'round' | 'round-left';\n\nexport interface PlaylistItemProps {\n data: Playlist;\n appLink: Core.AppLink;\n currentUser?: CurrentUser;\n presentationAudiences?: PresentationAudience[];\n bgColourClassNames?: string[];\n titleClassName?: string;\n imageCdnUrl?: string;\n itemStyle?: PlaylistItemStyle;\n showCount?: boolean;\n showOwner?: boolean;\n showFallbackImage?: boolean;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n audienceLabelClass?: string;\n}\n\nPlaylistItem.defaultProps = {\n itemStyle: 'square'\n};\n\nexport function PlaylistItem(props: PlaylistItemProps): JSX.Element {\n const imageUrl = ImageHelper.createUrl(props.data.cover && props.data.cover.url, {\n size: ImageSize.Medium,\n resizeType: ResizeType.Cover\n });\n\n const audiences = props.data.subjectPresentationAudiences &&\n props.data.subjectPresentationAudiences.data;\n\n const mergedAudience = useMergeAudiences(audiences, props.presentationAudiences);\n\n let className = styles.playlistItem;\n\n const showImage = !!imageUrl || !!props.showFallbackImage;\n\n if (showImage)\n className += ` ${styles.playlistItemGradient}`;\n\n if (!showImage && props.bgColourClassNames)\n className += ` ${styles.playlistItem} ${getBgColorClass(props.data.name, props.bgColourClassNames)}`;\n\n if (props.itemStyle === 'round')\n className += ` rounded-3 overflow-hidden`;\n\n if (props.itemStyle === 'round-left')\n className += ` rounded-start-lg overflow-hidden`;\n\n const analyticsData = { ...props.analyticsData,\n id: props.data?.id,\n name: props.data?.name\n };\n\n const analyticsOptions = {\n ...props.analyticsOptions,\n entity: EntityType.Playlist\n };\n\n const getTitle = () => {\n if (!props.data.contentModifiedDate || props.data._isClickViewCurated?.value)\n return '';\n\n return LanguageService.getPhrase(namespace, 'lastUpdated', {\n timeago: format(DateHelper.convertUTCToLocal(props.data.contentModifiedDate))\n });\n };\n\n return (\n <AppLink\n appLink={props.appLink}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n title={getTitle()}\n >\n <BaseImage data={imageUrl} alt={props.data.name} className={className}>\n {!!props.showFallbackImage && <ImageFallback type={ImageFallbackType.Playlist} />}\n <div className={`text-white ${styles.playlistMetadata}`}>\n {!!props.showCount && (\n <PlaylistCount playlist={props.data} />\n )}\n <h5 className={`mb-0 ${props.titleClassName || ''}`}><span className='text-shadow clamp-2'>{props.data.name}</span></h5>\n {!!audiences && !!audiences.length && !!mergedAudience &&\n <AudienceLabel\n className={`${props.audienceLabelClass ? props.audienceLabelClass : ''} mt-1`}\n audience={mergedAudience}\n border='white'\n />\n }\n </div>\n {!!props.showOwner && !!props.imageCdnUrl &&\n <div className={styles.ownerAvatarContainer}>\n <PlaylistOwnerAvatar\n playlist={props.data}\n currentUser={props.currentUser}\n imageCdnUrl={props.imageCdnUrl}\n />\n </div>\n }\n </BaseImage>\n </AppLink>\n );\n}\n","import * as React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/core';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, HashObject, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { CurrentUser, Playlist, PresentationAudience } from 'libs/shared/interfaces';\n\nimport { PlaylistItem, PlaylistItemStyle } from './PlaylistItem';\n\ninterface PlaylistListProps {\n playlists: Playlist[];\n getPlaylistAppLink: (playlist: Playlist) => Core.AppLink;\n currentUser?: CurrentUser;\n presentationAudiences?: PresentationAudience[];\n itemContainerClassName?: string;\n itemTitleClassName?: string;\n bgColourClassNames?: string[];\n itemStyle?: PlaylistItemStyle;\n imageCdnUrl?: string;\n showCount?: boolean;\n showOwner?: boolean;\n showFallbackImage?: boolean;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n extraPlaylistItem?: JSX.Element;\n}\n\nconst analyticsOptions: AnalyticsOptions = {\n actionType: UserAction.Click,\n entity: EntityType.Playlist,\n location: LocationContext.PlaylistListItem,\n descriptor: ClickDescriptor.Cover\n};\n\nexport function PlaylistList(props: PlaylistListProps): JSX.Element {\n return (\n <Row as='ul' className='list-unstyled mx-n1'>\n {props.extraPlaylistItem && (\n <Col as='li' key='extra-playlist-item' xs={6} sm={4} lg={3} className={`mb-2 px-1 ${props.itemContainerClassName ? props.itemContainerClassName : ''}`}>\n {props.extraPlaylistItem}\n </Col>\n )}\n\n {props.playlists.map(p => (\n <Col as='li' key={p.id} xs={6} sm={4} lg={3} className={`mb-2 px-1 ${props.itemContainerClassName ? props.itemContainerClassName : ''}`}>\n <PlaylistItem\n data={p}\n appLink={props.getPlaylistAppLink(p)}\n imageCdnUrl={props.imageCdnUrl}\n currentUser={props.currentUser}\n presentationAudiences={props.presentationAudiences}\n bgColourClassNames={props.bgColourClassNames}\n showCount={props.showCount}\n showOwner={props.showOwner}\n showFallbackImage={props.showFallbackImage}\n titleClassName={props.itemTitleClassName}\n itemStyle={props.itemStyle}\n analyticsData={props.analyticsData}\n analyticsOptions={{ ...props.analyticsOptions, ...analyticsOptions }}\n />\n </Col>\n ))}\n </Row>\n );\n}\n","@import '~styles/utils/mixins';\n@import '~styles/utils/include-media';\n:local {\n .labelContainer {\n z-index: 1;\n bottom: map-get($spacers, 2);\n left: 50%;\n transform: translate(-50%, 0%);\n\n :global(.rating-badge) {\n @include thumbnail-poster-badge;\n }\n }\n\n .labelContainerOverlay {\n :global(.rating-badge) {\n @include thumbnail-poster-badge;\n }\n }\n\n .hoverActive {\n transform: translate3D(0, -1px, 0) scale(1.01);\n transition: all .1s ease;\n\n &:after {\n content: '';\n\n position: absolute;\n top: 0;\n left: -(map-get($spacers, 1));\n right: -(map-get($spacers, 1));\n bottom: 0;\n\n margin: 0 map-get($spacers, 1);\n\n border-radius: $border-radius-lg;\n }\n }\n\n .mask {\n z-index: 2;\n position: absolute;\n bottom: map-get($spacers, 2);\n right: 0;\n left: 0;\n\n max-height: calc(100% - (map-get($spacers, 2) * 2));\n \n @include media('<=lg') {\n padding: map-get($spacers, 3) map-get($spacers, 1);\n }\n\n .largeHoverTitle {\n font-size: $h4-font-size;\n\n @include media('<=lg') {\n font-size: $h5-font-size;\n }\n\n @include media('<=md') {\n font-size: $h6-font-size;\n margin-bottom: map-get($spacers, 1);\n }\n\n @include media('<=sm') {\n font-size: $h5-font-size;\n }\n }\n\n .smallHoverTitle {\n font-size: $h5-font-size;\n\n @include media('<=xl') {\n font-size: $h6-font-size;\n }\n\n @include media('<=lg') {\n font-size: $h6-font-size;\n }\n\n @include media('<=md') {\n @include clamp(5);\n }\n }\n\n .description {\n text-overflow: ellipsis;\n overflow: hidden;\n -webkit-box-orient: vertical;\n display: -webkit-box;\n }\n\n .largeHoverDescription {\n @include clamp(11);\n\n @include media('<=xl') {\n @include clamp(9);\n }\n @include media('<=lg') {\n @include clamp(7);\n }\n @include media(\"<=878px\") {\n @include clamp(4);\n }\n\n &.hasTableOfContents {\n @include clamp(7);\n\n @include media('<=xl') {\n @include clamp(5);\n }\n @include media(\"<=1003px\") {\n @include clamp(4);\n }\n @include media('<=lg') {\n @include clamp(7);\n }\n @include media(\"<=878px\") {\n @include clamp(4);\n }\n }\n }\n\n .smallHoverDescription {\n @include clamp(8);\n\n @include media('<=xl') {\n @include clamp(8);\n font-size: 12px;\n }\n\n @include media('<=md') {\n @include clamp(6);\n }\n @include media('<=sm') {\n @include clamp(9);\n }\n } \n }\n}","import React from 'react';\n\nimport { AudienceLabel } from 'libs/shared/components/audience-label/AudienceLabel';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { useHoverIntent } from 'libs/shared/hooks/UseHover';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { PresentationAudience, Series } from 'libs/shared/interfaces';\nimport { SeriesHelper } from 'libs/shared/utils/SeriesHelper';\n\nimport styles from './series-tall-poster.module.scss';\n\ninterface SeriesTallPosterHoverOverlay {\n series: Series;\n mergedAudience: PresentationAudience;\n isSmall?: boolean;\n hasTableOfContents?: boolean;\n}\n\nfunction SeriesTallPosterHoverOverlay(props: SeriesTallPosterHoverOverlay): JSX.Element {\n return (\n <div className={`py-3 mx-2 px-2 rounded bg-white text-center ${styles.mask} d-flex flex-column align-items-center`}>\n <h3 className={`fw-semibold mb-0 ${styles.hoverTitle} ${props.isSmall ? styles.smallHoverTitle : styles.largeHoverTitle}`}>\n <span className='clamp-3'>\n {props.series.name}\n </span>\n </h3>\n\n {!!props.series.description && (\n <p className={`${props.hasTableOfContents ? styles.hasTableOfContents : ''} ${styles.hoverDescription} ${props.isSmall ? styles.smallHoverDescription : styles.largeHoverDescription} mb-0`}>{props.series.description}</p>\n )}\n <div className={`${styles.labelContainerOverlay}`}>\n {props.mergedAudience ?\n <AudienceLabel audience={props.mergedAudience} border='dark' className='mt-2 w-fit'/> :\n <Badge type={BadgeType.Rating} data={SeriesHelper.getRating(props.series)} className='mt-2' />\n }\n </div>\n </div>\n );\n}\n\ninterface SeriesTallPosterMaskProps {\n series: Series;\n presentationAudiences: PresentationAudience[];\n preloadImage: boolean;\n imageClass?: string;\n isSmall?: boolean;\n hasTableOfContents?: boolean;\n}\n\nexport function SeriesTallPoster(props: SeriesTallPosterMaskProps): JSX.Element {\n const [ hoverRef, isHovering ] = useHoverIntent<HTMLDivElement>({ className: styles.hoverActive });\n \n const audiences = props.series && props.series.subjectPresentationAudiences &&\n props.series.subjectPresentationAudiences.data || [];\n\n const mergedAudience = useMergeAudiences(audiences, props.presentationAudiences);\n const displayAudience = !!(audiences && audiences.length && mergedAudience);\n\n return (\n <div ref={hoverRef}>\n <BaseImage\n data={props.series.tallPoster}\n alt={props.series.name}\n imageType={ImageType.TallPosters}\n preload={props.preloadImage}\n imageOptions={{ size: ImageSize.Large }}\n imageClassName={props.imageClass ? props.imageClass : 'rounded-3'}\n >\n {isHovering && (\n <SeriesTallPosterHoverOverlay\n isSmall={props.isSmall}\n series={props.series}\n mergedAudience={audiences && audiences.length ? mergedAudience : null}\n hasTableOfContents={props.hasTableOfContents}\n />\n )}\n \n <ImageFallback type={ImageFallbackType.Series} />\n <div className={`position-absolute text-white ${styles.labelContainer}`}>\n {displayAudience ?\n <AudienceLabel audience={mergedAudience} className='bg-white text-dark' border='dark' /> :\n <Badge className='text-shadow' type={BadgeType.Rating} data={SeriesHelper.getRating(props.series)} />\n }\n </div>\n </BaseImage>\n </div>\n );\n}\n","@import '~styles/utils/mixins';\n@import '~styles/utils/include-media';\n:local {\n .partialHeroThumbnail {\n position: relative;\n width: 100%;\n padding-bottom: 56.25%;\n }\n\n .partialSeriesText {\n width: 6.25rem;\n height: 1rem;\n }\n\n .partialVideoTitleText {\n width: 16rem;\n height: 2rem;\n }\n\n .partialBadge {\n width: 4rem;\n height: 1rem;\n }\n\n .partialDescription {\n width: 80%;\n height: 4rem;\n }\n\n .partialSubject {\n width: 6.25rem;\n height: 1.5rem;\n }\n\n .partialHeading {\n height: 1.5rem;\n width: 8.4375rem;\n }\n\n .guidance {\n position: absolute;\n bottom: 0;\n gap: map-get($spacers, 1);\n\n @include media(\"<md\") {\n position: relative;\n }\n }\n\n .responsiveGuidance {\n @include media('>md') {\n @include responsive-guidance-tags;\n }\n\n @include media('<=sm') {\n @include responsive-guidance-tags;\n }\n }\n\n .description {\n @include clamp(4);\n \n @include media(\"<xl\") {\n @include clamp(3);\n }\n \n @include media(\"<md\") {\n display: none;\n }\n }\n\n .details {\n @include media(\"<md\") {\n padding-top: map-get($spacers, 2);\n }\n }\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, LocationContext } from 'libs/analytics/interfaces';\n\nimport { AudienceLabel } from 'libs/shared/components/audience-label/AudienceLabel';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { BadgeListContainer } from 'libs/shared/components/badges/BadgeListContainer';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { VideoItemGuidance } from 'libs/shared/components/video-list/components/video-guidance/VideoItemGuidance';\nimport { VideoItemActions } from 'libs/shared/components/video-list/components/video-item-actions/VideoItemActions';\nimport { VideoItemTitle } from 'libs/shared/components/video-list/components/video-item-title/VideoItemTitle';\nimport { VideoSubText } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { PresentationAudience, Video } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './hero-video.module.scss';\n\ninterface HeroVideoProps {\n video: Video;\n presentationAudiences: PresentationAudience[];\n showVideoGuidance: boolean;\n getVideoAppLink: (video: Video, opts: GetVideoAppLinkOptions) => Core.AppLink;\n hideInteractiveBadge?: boolean;\n badgePosition?: 'thumbnail' | 'info-panel';\n titleClassName?: string;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n commonVideoProps: CommonVideoProps;\n showNewVideoIndicator?: boolean;\n}\n\nHeroVideo.defaultProps = {\n newDurationStyle: true,\n badgePosition: 'thumbnail'\n};\n\nexport function HeroVideo(props: HeroVideoProps): JSX.Element {\n const videoAudiences = props.video?.subjectPresentationAudiences?.data;\n const mergedAudience = useMergeAudiences(videoAudiences, props.presentationAudiences);\n\n const analyticsOptions = AnalyticsHelper.mergeOptions(props.analyticsOptions, {\n location: LocationContext.ClassificationHero,\n entity: VideoHelper.getAnalyticsEntity(props.video)\n });\n\n const containerRef = React.useRef(null);\n \n if (!props.video)\n return <></>;\n\n return (\n <Row>\n <Col xs={12} md={6}>\n <div ref={containerRef} >\n <VideoThumbnail\n analyticsOptions={analyticsOptions}\n video={props.video}\n appLink={props.getVideoAppLink?.(props.video, {})}\n imageOptions={{ size: ImageSize.Medium }}\n textPosition={ThumbnailTextPosition.Independent}\n type='static'\n audience={props.badgePosition === 'thumbnail' ? mergedAudience : null}\n hideRating={props.badgePosition === 'thumbnail' ? !!mergedAudience : true}\n commonVideoProps={props.commonVideoProps}\n />\n </div>\n </Col>\n <Col xs={12} md={6} className={`${styles.details} position-relative`}>\n <div className='d-flex justify-content-between'>\n <div className='overflow-hidden'>\n <VideoSubText\n type={props.commonVideoProps.subTextType}\n appLink={props.commonVideoProps.getSubTextAppLink?.(props.video)}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n video={props.video}\n className='text-reset clamp-1'\n />\n <VideoItemTitle\n yearGroups={props.commonVideoProps.yearGroups}\n video={props.video}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n appLink={props.getVideoAppLink?.(props.video, {})}\n titleSize='h4'\n showNewVideoIndicator={props.showNewVideoIndicator}\n showPadlock={!props.commonVideoProps.hasStudentExperience && !props.commonVideoProps.hasGuestExperience}\n titleClassName={props.titleClassName}\n clampLevel={2}\n />\n </div>\n <VideoItemActions\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n video={props.video}\n />\n </div>\n\n {props.badgePosition === 'info-panel' && (\n <BadgeListContainer className='pb-1'>\n {!props.hideInteractiveBadge && <Badge type={ BadgeType.Interactive } data={props.video.interactives} />}\n <Badge type={ BadgeType.Rating } data={VideoHelper.getRating(props.video)} />\n <Badge type={ BadgeType.ProductionYear } data={props.video.productionYear} />\n </BadgeListContainer>\n )}\n\n <p className='mb-1'><span className={styles.description}>{props.video.description}</span></p>\n \n {props.badgePosition === 'info-panel' && (\n <AudienceLabel\n audience={mergedAudience}\n className='mt-1'\n border='dark'\n />\n )}\n\n {props.showVideoGuidance && (\n <VideoItemGuidance\n video={props.video}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n containerClassName={`d-flex ${styles.guidance}`}\n responsiveClassName={styles.responsiveGuidance}\n commonVideoProps={props.commonVideoProps}\n />\n )}\n </Col>\n </Row>\n );\n}\n\nexport function PartialHeroVideo(): JSX.Element {\n return (\n <>\n <div className={`partial-loading-background mb-2 ${styles.partialHeading}`} />\n <div className='row pb-3'>\n <div className='col-6 p1'>\n <div className={`${styles.partialHeroThumbnail} partial-loading-background rounded-3`}></div>\n </div>\n <div className='col-6 p1'>\n <div className={`partial-loading-background mb-1 ${styles.partialSeriesText}`}></div>\n <div className={`partial-loading-background my-1 ${styles.partialVideoTitleText}`}></div>\n <div className='d-flex'>\n <div className={`partial-loading-background my-1 me-1 ${styles.partialBadge}`}></div>\n <div className={`partial-loading-background my-1 ms-1 ${styles.partialBadge}`}></div>\n </div>\n <div className={`partial-loading-background my-1 ${styles.partialDescription}`}></div>\n <div className={`partial-loading-background mt-2 ${styles.partialSubject}`}></div>\n </div>\n </div>\n </>\n );\n}\n"],"x_google_ignoreList":[2,3,4,5,6,7],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import"./Dp9qJj1C.chunk.js";import{r as e}from"./BJvPfCvt.chunk.js";import{t}from"./ImQRQGZr.chunk.js";import{M as n,lt as r,ut as i}from"./Dun43GrB.chunk.js";import{l as a}from"./BQ5XMoHG.chunk.js";import{t as o}from"./B7tm2CBz.chunk.js";import{t as s}from"./BVWg3YHX.chunk.js";import{i as c}from"./CEsevkum.chunk.js";import{n as l,t as u}from"./BDliRFoa.chunk.js";import{n as d}from"./D7d5XFW82.chunk.js";import{n as f,t as p}from"./DjIdG9LL2.chunk.js";import{n as m,t as h}from"./CL1ST5J62.chunk.js";import{t as g}from"./DUNFBIIl2.chunk.js";import{r as _}from"./B8R4YVaF2.chunk.js";import{n as v,t as y}from"./Bx_V3too2.chunk.js";import{t as b}from"./iTHYgnO8.chunk.js";import{I as x,M as S,X as C,q as w}from"./app-B1XBsz23.js";import{t as T}from"./BRiYVLuz.chunk.js";import{t as E}from"./CwttNCGZ.chunk.js";import{t as D}from"./C9tPKnK22.chunk.js";import{n as O,r as k,t as A}from"./NV4_mMU8.chunk.js";import{t as j}from"./BlBCp_pE.chunk.js";import{t as M}from"./CeI-LCE-.chunk.js";import{t as N}from"./C9UjF0q6.chunk.js";i();var P=r(),F=`streamable.dashboardEmptyState`,I=t.encloseNamespace(F);function L(n){let r=n.dashboard?.status===y.Archived;return(0,P.jsxs)(b,{children:[(0,P.jsx)(b.Image,{src:n.imageUrl,altText:I(`info`)}),(0,P.jsx)(b.Heading,{children:(0,P.jsx)(d,{namespace:F,phrase:`heading`})}),(0,P.jsx)(b.Info,{children:(0,P.jsx)(d,{namespace:F,phrase:`info`})}),(0,P.jsx)(e,{title:r?t.getPhrase(F,`archivedCtaTooltip`):``,spanHack:!0,children:(0,P.jsx)(b.Cta,{text:t.getPhrase(F,`add`),appLink:n.addWidgetApplink?.(),className:`btn btn-dark`,icon:E,disabled:r})})]})}function R(e){let t=o.sortBy(e.dashboard?.widgets,`index`),{hasPermissions:n,hasLocalPermissions:r}=S();function i(t,n,r){let i=_.getWidgetParams(n,r,_.getDashboardTargetType(e.dashboard));return e.getWidgetContentRequest(t,i,r)}let a=e.isReadonly&&!t?.length;return(0,P.jsxs)(P.Fragment,{children:[(0,P.jsx)(k,{active:`discover`,appLinks:e.headerAppLinks}),t.map((t,a)=>(0,P.jsx)(l,{widgetCollection:v.Discover,id:t.id,getContentRequest:i,audiences:e.audiences,name:t.name,description:t.description,templateId:t.templateId,metadata:t.metadata,presentation:e.presentation,appLinks:e.widgetAppLinks,isScrollToTargetWidget:e?.scrollToWidgetId===t.id,widgetTypeId:t.widgetId,lazyLoad:e.lazyLoad,dashboardTarget:v.Discover,widgetIndex:a,isPreviewing:e.isReadonly,contentType:g.Livestream,preferences:t.preferences,hasPermissions:n,hasLocalPermissions:r,isTertiaryCustomerWithoutExchange:!1,preventPopout:!0,imageCdnUrl:e.commonVideoProps.imageCdnUrl,commonVideoProps:e.commonVideoProps,availablePresentations:void 0,classification:void 0,hasTableOfContents:void 0,onSubmitFeedback:void 0,settings:void 0,updatePreferences:void 0,seeMoreLink:void 0,onClickRemoveItem:void 0,badgeComponent:void 0},t.id)),a&&(0,P.jsx)(L,{dashboard:e.dashboard,isReadonly:e.isReadonly,imageUrl:e.emptyImageUrl,addWidgetApplink:e.widgetAppLinks.widgetWizard})]})}var z=t.encloseNamespace(`streamableDashboard.dashboard`);function B(e){return e?n.pick(e,[`a`,`dashboardId`]):{}}function V(e){let{commonVideoProps:t}=M(),n=a(C.config()),r=a(w.streamablePresentation()),i=a(r.data&&T.presentationAudiences(s.StreamableLearning,r.data.id)),{dashboard:o}=u({targetType:v.Discover,dashboardId:e.queryParams?.dashboardId}),[l]=m(h.AUDIENCE_FILTER,void 0,{storage:c.SessionStorage}),d=A(D.getAudienceParams(l));return p(f.getDiscoverMetadata({content:r.data,phraseContext:{phraseHandler:z,titlePhrase:`pageTitle`,descriptionPhrase:`pageDescription`},canonicalLink:j.getCanonicalLink(),allowIndexing:!0,product:x.PRODUCT_NAME})),n.hasCompleted&&o.hasCompleted&&r.hasCompleted&&i.hasCompleted?(0,P.jsx)(`div`,{className:`bg-white px-4`,children:(0,P.jsx)(R,{dashboard:o.data,widgetAppLinks:d,headerAppLinks:O(),presentation:r.data,getWidgetContentRequest:N.dashboardWidgetContent,audiences:i.data,lazyLoad:!j.isBot(),commonVideoProps:t})}):(0,P.jsx)(P.Fragment,{})}export{V as DashboardView,B as sanitizeDashboardViewParams};
2
- //# sourceMappingURL=DMq5Gp-U2.chunk.js.map
1
+ import"./Dp9qJj1C.chunk.js";import{r as e}from"./BJvPfCvt.chunk.js";import{t}from"./ImQRQGZr.chunk.js";import{M as n,lt as r,ut as i}from"./Dun43GrB.chunk.js";import{l as a}from"./BQ5XMoHG.chunk.js";import{t as o}from"./B7tm2CBz.chunk.js";import{t as s}from"./BVWg3YHX.chunk.js";import{i as c}from"./CEsevkum.chunk.js";import{n as l,t as u}from"./oTYyWWB-.chunk.js";import{n as d}from"./D7d5XFW82.chunk.js";import{n as f,t as p}from"./DjIdG9LL2.chunk.js";import{n as m,t as h}from"./CL1ST5J62.chunk.js";import{t as g}from"./DUNFBIIl2.chunk.js";import{r as _}from"./B8R4YVaF2.chunk.js";import{n as v,t as y}from"./Bx_V3too2.chunk.js";import{t as b}from"./iTHYgnO8.chunk.js";import{I as x,M as S,X as C,q as w}from"./app-BIigh9wv.js";import{t as T}from"./BRiYVLuz.chunk.js";import{t as E}from"./CwttNCGZ.chunk.js";import{t as D}from"./C9tPKnK22.chunk.js";import{n as O,r as k,t as A}from"./Ces-KTwe.chunk.js";import{t as j}from"./BlBCp_pE.chunk.js";import{t as M}from"./DIavEegC.chunk.js";import{t as N}from"./D0SYGnyF.chunk.js";i();var P=r(),F=`streamable.dashboardEmptyState`,I=t.encloseNamespace(F);function L(n){let r=n.dashboard?.status===y.Archived;return(0,P.jsxs)(b,{children:[(0,P.jsx)(b.Image,{src:n.imageUrl,altText:I(`info`)}),(0,P.jsx)(b.Heading,{children:(0,P.jsx)(d,{namespace:F,phrase:`heading`})}),(0,P.jsx)(b.Info,{children:(0,P.jsx)(d,{namespace:F,phrase:`info`})}),(0,P.jsx)(e,{title:r?t.getPhrase(F,`archivedCtaTooltip`):``,spanHack:!0,children:(0,P.jsx)(b.Cta,{text:t.getPhrase(F,`add`),appLink:n.addWidgetApplink?.(),className:`btn btn-dark`,icon:E,disabled:r})})]})}function R(e){let t=o.sortBy(e.dashboard?.widgets,`index`),{hasPermissions:n,hasLocalPermissions:r}=S();function i(t,n,r){let i=_.getWidgetParams(n,r,_.getDashboardTargetType(e.dashboard));return e.getWidgetContentRequest(t,i,r)}let a=e.isReadonly&&!t?.length;return(0,P.jsxs)(P.Fragment,{children:[(0,P.jsx)(k,{active:`discover`,appLinks:e.headerAppLinks}),t.map((t,a)=>(0,P.jsx)(l,{widgetCollection:v.Discover,id:t.id,getContentRequest:i,audiences:e.audiences,name:t.name,description:t.description,templateId:t.templateId,metadata:t.metadata,presentation:e.presentation,appLinks:e.widgetAppLinks,isScrollToTargetWidget:e?.scrollToWidgetId===t.id,widgetTypeId:t.widgetId,lazyLoad:e.lazyLoad,dashboardTarget:v.Discover,widgetIndex:a,isPreviewing:e.isReadonly,contentType:g.Livestream,preferences:t.preferences,hasPermissions:n,hasLocalPermissions:r,isTertiaryCustomerWithoutExchange:!1,preventPopout:!0,imageCdnUrl:e.commonVideoProps.imageCdnUrl,commonVideoProps:e.commonVideoProps,availablePresentations:void 0,classification:void 0,hasTableOfContents:void 0,onSubmitFeedback:void 0,settings:void 0,updatePreferences:void 0,seeMoreLink:void 0,onClickRemoveItem:void 0,badgeComponent:void 0},t.id)),a&&(0,P.jsx)(L,{dashboard:e.dashboard,isReadonly:e.isReadonly,imageUrl:e.emptyImageUrl,addWidgetApplink:e.widgetAppLinks.widgetWizard})]})}var z=t.encloseNamespace(`streamableDashboard.dashboard`);function B(e){return e?n.pick(e,[`a`,`dashboardId`]):{}}function V(e){let{commonVideoProps:t}=M(),n=a(C.config()),r=a(w.streamablePresentation()),i=a(r.data&&T.presentationAudiences(s.StreamableLearning,r.data.id)),{dashboard:o}=u({targetType:v.Discover,dashboardId:e.queryParams?.dashboardId}),[l]=m(h.AUDIENCE_FILTER,void 0,{storage:c.SessionStorage}),d=A(D.getAudienceParams(l));return p(f.getDiscoverMetadata({content:r.data,phraseContext:{phraseHandler:z,titlePhrase:`pageTitle`,descriptionPhrase:`pageDescription`},canonicalLink:j.getCanonicalLink(),allowIndexing:!0,product:x.PRODUCT_NAME})),n.hasCompleted&&o.hasCompleted&&r.hasCompleted&&i.hasCompleted?(0,P.jsx)(`div`,{className:`bg-white px-4`,children:(0,P.jsx)(R,{dashboard:o.data,widgetAppLinks:d,headerAppLinks:O(),presentation:r.data,getWidgetContentRequest:N.dashboardWidgetContent,audiences:i.data,lazyLoad:!j.isBot(),commonVideoProps:t})}):(0,P.jsx)(P.Fragment,{})}export{V as DashboardView,B as sanitizeDashboardViewParams};
2
+ //# sourceMappingURL=DU1SE31v2.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DMq5Gp-U2.chunk.js","names":[],"sources":["../../../../libs/shared/src/apps/streamable-learning/components/dashboard/empty-state/StreamableDiscoverDashboardEmptyState.tsx","../../../../libs/shared/src/apps/streamable-learning/components/dashboard/StreamableDiscoverDashboard.tsx","../../src/apps/dashboard/views/dashboard/DashboardView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\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';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { PlusSvg } from 'libs/shared/images/svg/actions/PlusSvg';\nimport { CuratedDashboard, DashboardStatus } from 'libs/shared/interfaces';\n\nconst namespace = 'streamable.dashboardEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface StreamableDiscoverDashboardEmptyStateProps {\n dashboard: CuratedDashboard;\n imageUrl: string;\n isReadonly: boolean;\n addWidgetApplink?: () => Core.AppLink;\n}\n\nexport function StreamableDiscoverDashboardEmptyState(props: StreamableDiscoverDashboardEmptyStateProps): JSX.Element {\n const isArchived = props.dashboard?.status === DashboardStatus.Archived;\n\n return (\n <EmptyState>\n <EmptyState.Image src={props.imageUrl} altText={getPhrase('info')} />\n <EmptyState.Heading>\n <Text namespace={namespace} phrase='heading' />\n </EmptyState.Heading>\n <EmptyState.Info>\n <Text namespace={namespace} phrase='info' />\n </EmptyState.Info>\n <Tooltip title={isArchived ? LanguageService.getPhrase(namespace, 'archivedCtaTooltip') : ''} spanHack>\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'add')}\n appLink={props.addWidgetApplink?.()}\n className='btn btn-dark'\n icon={PlusSvg}\n disabled={isArchived}\n />\n </Tooltip>\n </EmptyState>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { StreamableHeader, StreamableHeaderAppLinks } from 'libs/shared/apps/streamable-learning/components/header/StreamableHeader';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { AllDiscoverWidgetTemplates } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { CalendarEventContentType, CuratedDashboard, CuratedWidgetQueryParams, DashboardTargetType, Presentation, PresentationAudience } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nimport { StreamableDiscoverDashboardEmptyState } from './empty-state/StreamableDiscoverDashboardEmptyState';\n\nexport interface StreamableDiscoverDashboardProps {\n dashboard: CuratedDashboard;\n getWidgetContentRequest: (\n id: string,\n params: CuratedWidgetQueryParams,\n widgetTemplate: WidgetTemplate\n ) => Flight.Request;\n\n audiences?: PresentationAudience[];\n emptyImageUrl?: string;\n presentation: Presentation;\n widgetAppLinks?: AllDiscoverWidgetTemplates['appLinks'] & {\n widgetWizard: () => Core.AppLink\n };\n headerAppLinks?: StreamableHeaderAppLinks;\n scrollToWidgetId?: string;\n isReadonly?: boolean;\n lazyLoad?: boolean;\n commonVideoProps: CommonVideoProps;\n}\n\nexport function StreamableDiscoverDashboard(props: StreamableDiscoverDashboardProps): JSX.Element {\n const widgets = ArrayHelper.sortBy(props.dashboard?.widgets, 'index');\n\n const { hasPermissions, hasLocalPermissions } = usePermissions();\n\n function getWidgetContentRequest(id: string, widgetTypeId: WidgetTypeId, template: WidgetTemplate): Flight.Request {\n const params = CuratedDashboardHelper.getWidgetParams(\n widgetTypeId,\n template,\n CuratedDashboardHelper.getDashboardTargetType(props.dashboard)\n );\n\n return props.getWidgetContentRequest(id, params, template);\n }\n\n const showEmptyState = props.isReadonly && !widgets?.length;\n\n return (\n <>\n <StreamableHeader active='discover' appLinks={props.headerAppLinks} />\n\n {widgets.map((widget, idx) => {\n return (\n <WidgetContainerView\n widgetCollection={DashboardTargetType.Discover}\n key={widget.id}\n id={widget.id}\n getContentRequest={getWidgetContentRequest}\n audiences={props.audiences}\n name={widget.name}\n description={widget.description}\n templateId={widget.templateId}\n metadata={widget.metadata}\n presentation={props.presentation}\n appLinks={props.widgetAppLinks}\n isScrollToTargetWidget={props?.scrollToWidgetId === widget.id}\n widgetTypeId={widget.widgetId}\n lazyLoad={props.lazyLoad}\n dashboardTarget={DashboardTargetType.Discover}\n widgetIndex={idx}\n isPreviewing={props.isReadonly}\n contentType={CalendarEventContentType.Livestream}\n preferences={widget.preferences}\n hasPermissions={hasPermissions}\n hasLocalPermissions={hasLocalPermissions}\n isTertiaryCustomerWithoutExchange={false}\n preventPopout\n imageCdnUrl={props.commonVideoProps.imageCdnUrl}\n commonVideoProps={props.commonVideoProps}\n \n availablePresentations={undefined}\n classification={undefined}\n hasTableOfContents={undefined}\n onSubmitFeedback={undefined}\n settings={undefined}\n updatePreferences={undefined}\n seeMoreLink={undefined}\n onClickRemoveItem={undefined}\n badgeComponent={undefined}\n />\n );\n })}\n\n {showEmptyState && (\n <StreamableDiscoverDashboardEmptyState\n dashboard={props.dashboard}\n isReadonly={props.isReadonly}\n imageUrl={props.emptyImageUrl}\n addWidgetApplink={props.widgetAppLinks.widgetWizard}\n />\n )}\n </>\n );\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { Flight } from 'libs/common/flight';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { StreamableDiscoverDashboard } from 'libs/shared/apps/streamable-learning/components/dashboard/StreamableDiscoverDashboard';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { PresentationType } from 'libs/shared/enums/PresentationType';\nimport { AudienceRequests } from 'libs/shared/flight-requests/AudienceRequests';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { DashboardRequests } from 'libs/shared/flight-requests/DashboardRequests';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Config, DashboardTargetType, Presentation, PresentationAudience } from 'libs/shared/interfaces';\nimport { AudienceHelper } from 'libs/shared/utils/audience-helper/AudienceHelper';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\nimport { StreamableConstants } from 'shared/constants/StreamableConstants';\nimport { PresentationRequests } from 'shared/flight-requests/PresentationRequests';\nimport { useCommonVideoProps } from 'shared/hooks/useCommonVideoProps';\nimport { useFetchDashboard } from 'shared/hooks/useFetchDashboard';\nimport { SeoHelper } from 'shared/utils/StreamableSeoHelper';\n\nimport { getDiscoverWidgetAppLinks, getStreamableHeaderAppLinks } from 'apps/dashboard/views/dashboard/DiscoverViewUtils';\n\nconst namespace = 'streamableDashboard.dashboard';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\n/**\n * NOTE: Ensure any keys added here are also added\n * to sanitizeDashboardParams below.\n */\ninterface DashboardViewQueryParams {\n a?: string[];\n dashboardId?: string;\n}\n\nexport function sanitizeDashboardViewParams(queryParams: DashboardViewQueryParams): DashboardViewQueryParams {\n if (!queryParams)\n return {};\n\n return ObjectHelper.pick(queryParams, [ 'a', 'dashboardId' ]);\n}\n\ninterface DashboardViewProps {\n queryParams?: DashboardViewQueryParams;\n}\n\nexport function DashboardView(props: DashboardViewProps): JSX.Element {\n const { commonVideoProps } = useCommonVideoProps();\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const presentation = Flight.useBasicFetch<Presentation>(\n PresentationRequests.streamablePresentation()\n );\n\n const audiences = Flight.useBasicFetch<PresentationAudience[]>(\n presentation.data &&\n AudienceRequests.presentationAudiences(PresentationType.StreamableLearning, presentation.data.id)\n );\n\n const { dashboard } = useFetchDashboard({\n targetType: DashboardTargetType.Discover,\n dashboardId: props.queryParams?.dashboardId\n });\n\n const [activeAudiences] = useViewModel<PresentationAudience[]>(\n SharedViewModelKeys.AUDIENCE_FILTER,\n undefined,\n { storage: StorageType.SessionStorage }\n );\n\n const widgetAppLinks = getDiscoverWidgetAppLinks(AudienceHelper.getAudienceParams(activeAudiences));\n\n useSetPageMetadata(PageMetadataHelper.getDiscoverMetadata({\n content: presentation.data,\n phraseContext: {\n phraseHandler: getPhrase,\n titlePhrase: 'pageTitle',\n descriptionPhrase: 'pageDescription'\n },\n canonicalLink: SeoHelper.getCanonicalLink(),\n allowIndexing: true,\n product: StreamableConstants.PRODUCT_NAME\n }));\n\n const hasLoaded = (\n config.hasCompleted &&\n dashboard.hasCompleted &&\n presentation.hasCompleted &&\n audiences.hasCompleted\n );\n\n if (!hasLoaded)\n return <></>;\n\n return (\n <div className='bg-white px-4'>\n <StreamableDiscoverDashboard\n dashboard={dashboard.data}\n widgetAppLinks={widgetAppLinks}\n headerAppLinks={getStreamableHeaderAppLinks()}\n presentation={presentation.data}\n getWidgetContentRequest={DashboardRequests.dashboardWidgetContent}\n audiences={audiences.data}\n lazyLoad={!SeoHelper.isBot()}\n commonVideoProps={commonVideoProps}\n />\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"DU1SE31v2.chunk.js","names":[],"sources":["../../../../libs/shared/src/apps/streamable-learning/components/dashboard/empty-state/StreamableDiscoverDashboardEmptyState.tsx","../../../../libs/shared/src/apps/streamable-learning/components/dashboard/StreamableDiscoverDashboard.tsx","../../src/apps/dashboard/views/dashboard/DashboardView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\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';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { PlusSvg } from 'libs/shared/images/svg/actions/PlusSvg';\nimport { CuratedDashboard, DashboardStatus } from 'libs/shared/interfaces';\n\nconst namespace = 'streamable.dashboardEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface StreamableDiscoverDashboardEmptyStateProps {\n dashboard: CuratedDashboard;\n imageUrl: string;\n isReadonly: boolean;\n addWidgetApplink?: () => Core.AppLink;\n}\n\nexport function StreamableDiscoverDashboardEmptyState(props: StreamableDiscoverDashboardEmptyStateProps): JSX.Element {\n const isArchived = props.dashboard?.status === DashboardStatus.Archived;\n\n return (\n <EmptyState>\n <EmptyState.Image src={props.imageUrl} altText={getPhrase('info')} />\n <EmptyState.Heading>\n <Text namespace={namespace} phrase='heading' />\n </EmptyState.Heading>\n <EmptyState.Info>\n <Text namespace={namespace} phrase='info' />\n </EmptyState.Info>\n <Tooltip title={isArchived ? LanguageService.getPhrase(namespace, 'archivedCtaTooltip') : ''} spanHack>\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'add')}\n appLink={props.addWidgetApplink?.()}\n className='btn btn-dark'\n icon={PlusSvg}\n disabled={isArchived}\n />\n </Tooltip>\n </EmptyState>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { StreamableHeader, StreamableHeaderAppLinks } from 'libs/shared/apps/streamable-learning/components/header/StreamableHeader';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { AllDiscoverWidgetTemplates } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { CalendarEventContentType, CuratedDashboard, CuratedWidgetQueryParams, DashboardTargetType, Presentation, PresentationAudience } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nimport { StreamableDiscoverDashboardEmptyState } from './empty-state/StreamableDiscoverDashboardEmptyState';\n\nexport interface StreamableDiscoverDashboardProps {\n dashboard: CuratedDashboard;\n getWidgetContentRequest: (\n id: string,\n params: CuratedWidgetQueryParams,\n widgetTemplate: WidgetTemplate\n ) => Flight.Request;\n\n audiences?: PresentationAudience[];\n emptyImageUrl?: string;\n presentation: Presentation;\n widgetAppLinks?: AllDiscoverWidgetTemplates['appLinks'] & {\n widgetWizard: () => Core.AppLink\n };\n headerAppLinks?: StreamableHeaderAppLinks;\n scrollToWidgetId?: string;\n isReadonly?: boolean;\n lazyLoad?: boolean;\n commonVideoProps: CommonVideoProps;\n}\n\nexport function StreamableDiscoverDashboard(props: StreamableDiscoverDashboardProps): JSX.Element {\n const widgets = ArrayHelper.sortBy(props.dashboard?.widgets, 'index');\n\n const { hasPermissions, hasLocalPermissions } = usePermissions();\n\n function getWidgetContentRequest(id: string, widgetTypeId: WidgetTypeId, template: WidgetTemplate): Flight.Request {\n const params = CuratedDashboardHelper.getWidgetParams(\n widgetTypeId,\n template,\n CuratedDashboardHelper.getDashboardTargetType(props.dashboard)\n );\n\n return props.getWidgetContentRequest(id, params, template);\n }\n\n const showEmptyState = props.isReadonly && !widgets?.length;\n\n return (\n <>\n <StreamableHeader active='discover' appLinks={props.headerAppLinks} />\n\n {widgets.map((widget, idx) => {\n return (\n <WidgetContainerView\n widgetCollection={DashboardTargetType.Discover}\n key={widget.id}\n id={widget.id}\n getContentRequest={getWidgetContentRequest}\n audiences={props.audiences}\n name={widget.name}\n description={widget.description}\n templateId={widget.templateId}\n metadata={widget.metadata}\n presentation={props.presentation}\n appLinks={props.widgetAppLinks}\n isScrollToTargetWidget={props?.scrollToWidgetId === widget.id}\n widgetTypeId={widget.widgetId}\n lazyLoad={props.lazyLoad}\n dashboardTarget={DashboardTargetType.Discover}\n widgetIndex={idx}\n isPreviewing={props.isReadonly}\n contentType={CalendarEventContentType.Livestream}\n preferences={widget.preferences}\n hasPermissions={hasPermissions}\n hasLocalPermissions={hasLocalPermissions}\n isTertiaryCustomerWithoutExchange={false}\n preventPopout\n imageCdnUrl={props.commonVideoProps.imageCdnUrl}\n commonVideoProps={props.commonVideoProps}\n \n availablePresentations={undefined}\n classification={undefined}\n hasTableOfContents={undefined}\n onSubmitFeedback={undefined}\n settings={undefined}\n updatePreferences={undefined}\n seeMoreLink={undefined}\n onClickRemoveItem={undefined}\n badgeComponent={undefined}\n />\n );\n })}\n\n {showEmptyState && (\n <StreamableDiscoverDashboardEmptyState\n dashboard={props.dashboard}\n isReadonly={props.isReadonly}\n imageUrl={props.emptyImageUrl}\n addWidgetApplink={props.widgetAppLinks.widgetWizard}\n />\n )}\n </>\n );\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { Flight } from 'libs/common/flight';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { StreamableDiscoverDashboard } from 'libs/shared/apps/streamable-learning/components/dashboard/StreamableDiscoverDashboard';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { PresentationType } from 'libs/shared/enums/PresentationType';\nimport { AudienceRequests } from 'libs/shared/flight-requests/AudienceRequests';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { DashboardRequests } from 'libs/shared/flight-requests/DashboardRequests';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Config, DashboardTargetType, Presentation, PresentationAudience } from 'libs/shared/interfaces';\nimport { AudienceHelper } from 'libs/shared/utils/audience-helper/AudienceHelper';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\nimport { StreamableConstants } from 'shared/constants/StreamableConstants';\nimport { PresentationRequests } from 'shared/flight-requests/PresentationRequests';\nimport { useCommonVideoProps } from 'shared/hooks/useCommonVideoProps';\nimport { useFetchDashboard } from 'shared/hooks/useFetchDashboard';\nimport { SeoHelper } from 'shared/utils/StreamableSeoHelper';\n\nimport { getDiscoverWidgetAppLinks, getStreamableHeaderAppLinks } from 'apps/dashboard/views/dashboard/DiscoverViewUtils';\n\nconst namespace = 'streamableDashboard.dashboard';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\n/**\n * NOTE: Ensure any keys added here are also added\n * to sanitizeDashboardParams below.\n */\ninterface DashboardViewQueryParams {\n a?: string[];\n dashboardId?: string;\n}\n\nexport function sanitizeDashboardViewParams(queryParams: DashboardViewQueryParams): DashboardViewQueryParams {\n if (!queryParams)\n return {};\n\n return ObjectHelper.pick(queryParams, [ 'a', 'dashboardId' ]);\n}\n\ninterface DashboardViewProps {\n queryParams?: DashboardViewQueryParams;\n}\n\nexport function DashboardView(props: DashboardViewProps): JSX.Element {\n const { commonVideoProps } = useCommonVideoProps();\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const presentation = Flight.useBasicFetch<Presentation>(\n PresentationRequests.streamablePresentation()\n );\n\n const audiences = Flight.useBasicFetch<PresentationAudience[]>(\n presentation.data &&\n AudienceRequests.presentationAudiences(PresentationType.StreamableLearning, presentation.data.id)\n );\n\n const { dashboard } = useFetchDashboard({\n targetType: DashboardTargetType.Discover,\n dashboardId: props.queryParams?.dashboardId\n });\n\n const [activeAudiences] = useViewModel<PresentationAudience[]>(\n SharedViewModelKeys.AUDIENCE_FILTER,\n undefined,\n { storage: StorageType.SessionStorage }\n );\n\n const widgetAppLinks = getDiscoverWidgetAppLinks(AudienceHelper.getAudienceParams(activeAudiences));\n\n useSetPageMetadata(PageMetadataHelper.getDiscoverMetadata({\n content: presentation.data,\n phraseContext: {\n phraseHandler: getPhrase,\n titlePhrase: 'pageTitle',\n descriptionPhrase: 'pageDescription'\n },\n canonicalLink: SeoHelper.getCanonicalLink(),\n allowIndexing: true,\n product: StreamableConstants.PRODUCT_NAME\n }));\n\n const hasLoaded = (\n config.hasCompleted &&\n dashboard.hasCompleted &&\n presentation.hasCompleted &&\n audiences.hasCompleted\n );\n\n if (!hasLoaded)\n return <></>;\n\n return (\n <div className='bg-white px-4'>\n <StreamableDiscoverDashboard\n dashboard={dashboard.data}\n widgetAppLinks={widgetAppLinks}\n headerAppLinks={getStreamableHeaderAppLinks()}\n presentation={presentation.data}\n getWidgetContentRequest={DashboardRequests.dashboardWidgetContent}\n audiences={audiences.data}\n lazyLoad={!SeoHelper.isBot()}\n commonVideoProps={commonVideoProps}\n />\n </div>\n );\n}\n"],"mappings":"ihCAWM,EAAY,iCACZ,EAAY,EAAgB,iBAAiB,EAAU,CAS7D,SAAgB,EAAsC,EAAgE,CACpH,IAAM,EAAa,EAAM,WAAW,SAAW,EAAgB,SAE/D,OACE,EAAA,EAAA,MAAC,EAAD,CAAA,SAAA,EACE,EAAA,EAAA,KAAC,EAAW,MAAZ,CAAkB,IAAK,EAAM,SAAU,QAAS,EAAU,OAAO,CAAI,CAAA,EACrE,EAAA,EAAA,KAAC,EAAW,QAAZ,CAAA,UACE,EAAA,EAAA,KAAC,EAAD,CAAiB,YAAW,OAAO,UAAY,CAAA,CAC5B,CAAA,EACrB,EAAA,EAAA,KAAC,EAAW,KAAZ,CAAA,UACE,EAAA,EAAA,KAAC,EAAD,CAAiB,YAAW,OAAO,OAAS,CAAA,CAC5B,CAAA,EAClB,EAAA,EAAA,KAAC,EAAD,CAAS,MAAO,EAAa,EAAgB,UAAU,EAAW,qBAAqB,CAAG,GAAI,SAAA,aAC5F,EAAA,EAAA,KAAC,EAAW,IAAZ,CACE,KAAM,EAAgB,UAAU,EAAW,MAAM,CACjD,QAAS,EAAM,oBAAoB,CACnC,UAAU,eACV,KAAM,EACN,SAAU,EACV,CAAA,CACM,CAAA,CACC,CAAA,CAAA,CCHjB,SAAgB,EAA4B,EAAsD,CAChG,IAAM,EAAU,EAAY,OAAO,EAAM,WAAW,QAAS,QAAQ,CAE/D,CAAE,iBAAgB,uBAAwB,GAAgB,CAEhE,SAAS,EAAwB,EAAY,EAA4B,EAA0C,CACjH,IAAM,EAAS,EAAuB,gBACpC,EACA,EACA,EAAuB,uBAAuB,EAAM,UAAU,CAC/D,CAED,OAAO,EAAM,wBAAwB,EAAI,EAAQ,EAAS,CAG5D,IAAM,EAAiB,EAAM,YAAc,CAAC,GAAS,OAErD,OACE,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,KAAC,EAAD,CAAkB,OAAO,WAAW,SAAU,EAAM,eAAkB,CAAA,CAErE,EAAQ,KAAK,EAAQ,KAElB,EAAA,EAAA,KAAC,EAAD,CACE,iBAAkB,EAAoB,SAEtC,GAAI,EAAO,GACX,kBAAmB,EACnB,UAAW,EAAM,UACjB,KAAM,EAAO,KACb,YAAa,EAAO,YACpB,WAAY,EAAO,WACnB,SAAU,EAAO,SACjB,aAAc,EAAM,aACpB,SAAU,EAAM,eAChB,uBAAwB,GAAO,mBAAqB,EAAO,GAC3D,aAAc,EAAO,SACrB,SAAU,EAAM,SAChB,gBAAiB,EAAoB,SACrC,YAAa,EACb,aAAc,EAAM,WACpB,YAAa,EAAyB,WACtC,YAAa,EAAO,YACJ,iBACK,sBACrB,kCAAmC,GACnC,cAAA,GACA,YAAa,EAAM,iBAAiB,YACpC,iBAAkB,EAAM,iBAExB,uBAAwB,IAAA,GACxB,eAAgB,IAAA,GAChB,mBAAoB,IAAA,GACpB,iBAAkB,IAAA,GAClB,SAAU,IAAA,GACV,kBAAmB,IAAA,GACnB,YAAa,IAAA,GACb,kBAAmB,IAAA,GACnB,eAAgB,IAAA,GAChB,CAlCK,EAAO,GAkCZ,CAEJ,CAED,IACC,EAAA,EAAA,KAAC,EAAD,CACE,UAAW,EAAM,UACjB,WAAY,EAAM,WAClB,SAAU,EAAM,cAChB,iBAAkB,EAAM,eAAe,aACvC,CAAA,CAEH,CAAA,CAAA,CClFP,IAAM,EAAY,EAAgB,iBADhB,gCAC2C,CAW7D,SAAgB,EAA4B,EAAiE,CAI3G,OAHK,EAGE,EAAa,KAAK,EAAa,CAAE,IAAK,cAAe,CAAC,CAFpD,EAAE,CASb,SAAgB,EAAc,EAAwC,CACpE,GAAM,CAAE,oBAAqB,GAAqB,CAE5C,EAAS,EAA6B,EAAe,QAAQ,CAAC,CAE9D,EAAe,EACnB,EAAqB,wBAAwB,CAC9C,CAEK,EAAY,EAChB,EAAa,MACb,EAAiB,sBAAsB,EAAiB,mBAAoB,EAAa,KAAK,GAAG,CAClG,CAEK,CAAE,aAAc,EAAkB,CACtC,WAAY,EAAoB,SAChC,YAAa,EAAM,aAAa,YACjC,CAAC,CAEI,CAAC,GAAmB,EACxB,EAAoB,gBACpB,IAAA,GACA,CAAE,QAAS,EAAY,eAAgB,CACxC,CAEK,EAAiB,EAA0B,EAAe,kBAAkB,EAAgB,CAAC,CAwBnG,OAtBA,EAAmB,EAAmB,oBAAoB,CACxD,QAAS,EAAa,KACtB,cAAe,CACb,cAAe,EACf,YAAa,YACb,kBAAmB,kBACpB,CACD,cAAe,EAAU,kBAAkB,CAC3C,cAAe,GACf,QAAS,EAAoB,aAC9B,CAAC,CAAC,CAGD,EAAO,cACP,EAAU,cACV,EAAa,cACb,EAAU,cAOV,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,0BACb,EAAA,EAAA,KAAC,EAAD,CACE,UAAW,EAAU,KACL,iBAChB,eAAgB,GAA6B,CAC7C,aAAc,EAAa,KAC3B,wBAAyB,EAAkB,uBAC3C,UAAW,EAAU,KACrB,SAAU,CAAC,EAAU,OAAO,CACV,mBAClB,CAAA,CACE,CAAA,EAdC,EAAA,EAAA,KAAA,EAAA,SAAA,EAAK,CAAA"}