@clickview/lite 0.75.0-rc.0 → 0.75.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 (27) hide show
  1. package/dist/bundles.json +1 -1
  2. package/dist/scripts/{1199-56e647318b-lite.chunk.js → 1199-a2ac2338d0-lite.chunk.js} +2 -2
  3. package/dist/scripts/1199-a2ac2338d0-lite.chunk.js.map +1 -0
  4. package/dist/scripts/4050-dd1d1b7824-lite.chunk.js +3 -0
  5. package/dist/scripts/4050-dd1d1b7824-lite.chunk.js.map +1 -0
  6. package/dist/scripts/5241-163f5ac64c-lite.chunk.js +3 -0
  7. package/dist/scripts/5241-163f5ac64c-lite.chunk.js.map +1 -0
  8. package/dist/scripts/{7252-7d8cfa863b-lite.chunk.js → 7252-367b621695-lite.chunk.js} +3 -3
  9. package/dist/scripts/{7252-7d8cfa863b-lite.chunk.js.map → 7252-367b621695-lite.chunk.js.map} +1 -1
  10. package/dist/scripts/8723-0e2d0ac241-lite.chunk.js +3 -0
  11. package/dist/scripts/8723-0e2d0ac241-lite.chunk.js.map +1 -0
  12. package/dist/scripts/bundle-95a6fc2722.min.js +3 -0
  13. package/dist/scripts/{bundle-ab6b7dc985.min.js.map → bundle-95a6fc2722.min.js.map} +1 -1
  14. package/package.json +1 -1
  15. package/dist/scripts/1199-56e647318b-lite.chunk.js.map +0 -1
  16. package/dist/scripts/4050-7bda75f544-lite.chunk.js +0 -3
  17. package/dist/scripts/4050-7bda75f544-lite.chunk.js.map +0 -1
  18. package/dist/scripts/5241-ec9b0f642f-lite.chunk.js +0 -3
  19. package/dist/scripts/5241-ec9b0f642f-lite.chunk.js.map +0 -1
  20. package/dist/scripts/8723-7802a8728e-lite.chunk.js +0 -3
  21. package/dist/scripts/8723-7802a8728e-lite.chunk.js.map +0 -1
  22. package/dist/scripts/bundle-ab6b7dc985.min.js +0 -3
  23. /package/dist/scripts/{4050-7bda75f544-lite.chunk.js.LICENSE.txt → 4050-dd1d1b7824-lite.chunk.js.LICENSE.txt} +0 -0
  24. /package/dist/scripts/{5241-ec9b0f642f-lite.chunk.js.LICENSE.txt → 5241-163f5ac64c-lite.chunk.js.LICENSE.txt} +0 -0
  25. /package/dist/scripts/{7252-7d8cfa863b-lite.chunk.js.LICENSE.txt → 7252-367b621695-lite.chunk.js.LICENSE.txt} +0 -0
  26. /package/dist/scripts/{8723-7802a8728e-lite.chunk.js.LICENSE.txt → 8723-0e2d0ac241-lite.chunk.js.LICENSE.txt} +0 -0
  27. /package/dist/scripts/{bundle-ab6b7dc985.min.js.LICENSE.txt → bundle-95a6fc2722.min.js.LICENSE.txt} +0 -0
@@ -1,3 +0,0 @@
1
- /*! For license information please see 5241-ec9b0f642f-lite.chunk.js.LICENSE.txt */
2
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[5241],{38307:(e,t,n)=>{n.d(t,{c:()=>y,l:()=>h});var r=n(32735),o=n(232),a=n.n(o),i=n(8604),l=n(83345);const c={heatMap:"epapa",legend:"uhH4p"};function u(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var s="shared.engagementHeatMap",f="#f1f1f1",d=a().scale(["#daf07d","#08bd1a"]),m=[0,.01,.25,.5,.75,1];function p(e,t){return e?d(e/t).hex():f}function v(e,t){for(var n=[],r=0;r<e.length;r++){var o=r>0&&e[r-1],a=e[r],i=r<e.length-1&&e[r+1];a===o&&a===i||n.push("".concat(p(a,t)," ").concat(100/e.length*r,"%"))}return"linear-gradient(to right, ".concat(n.join(","),")")}function h(){var e=Math.max.apply(Math,m),t=100/m.length;return r.createElement("div",{className:"d-flex justify-content-between w-100"},r.createElement(l.x,{namespace:s,phrase:"less"}),r.createElement("div",{className:"d-flex mx-1 flex-grow-1 ".concat(c.legend)},m.map((function(n,o){return r.createElement("div",{key:o,style:{width:"".concat(t,"%"),backgroundColor:p(n,e)}})}))),r.createElement(l.x,{namespace:s,phrase:"more"}))}function y(e){var t,n,o,a=(0,i.O)(e.engagement),l=null!==(t=e.max)&&void 0!==t?t:Math.max.apply(Math,function(e){if(Array.isArray(e))return u(e)}(o=a)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(o)||function(e,t){if(e){if("string"==typeof e)return u(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?u(e,t):void 0}}(o)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}());return r.createElement("div",{className:"border rounded ".concat(c.heatMap," ").concat(null!==(n=e.className)&&void 0!==n?n:""),style:{background:v(a,l)}})}},84621:(e,t,n)=>{n.d(t,{L:()=>i});var r=n(32735),o=n(83914);const a={icon:"sAmpy",count:"faDs4"};function i(e){return r.createElement("section",{className:"d-flex flex-column border rounded p-3 h-100"},r.createElement("div",{className:"d-flex ".concat(e.subtitle?"align-items-top":"align-items-center"," mb-2")},r.createElement("div",{className:"".concat(a.icon," ").concat(e.svgClassName," rounded-circle d-flex justify-content-center align-items-center")},r.createElement(o.x,{svgName:e.svgName,size:o.S.Small})),r.createElement("div",{className:"d-flex flex-column ms-2"},r.createElement("h2",{className:"h6 mb-0"},e.title)),"number"==typeof e.count&&r.createElement("div",{className:"".concat(a.count," d-flex justify-content-center align-items-center bg-light rounded-circle ms-auto")},e.count)),e.children)}},70072:(e,t,n)=>{n.d(t,{d:()=>r});var r={fontSize:"12px",fontFamily:'"Inter",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"',fontWeight:"400",color:"#313543"}},8604:(e,t,n)=>{function r(e){var t=e.videoDuration||0;return new Array(Math.ceil(t)).fill(null).map((function(t,n){return(null==e?void 0:e.heatMap[n])||0}))}function o(e){return null==e?void 0:e.reduce((function(t,n){return t+n.engagementRate/e.length}),0)}n.d(t,{O:()=>r,Q:()=>o})},6748:(e,t,n)=>{n.d(t,{i:()=>S});var r=n(32735),o=n(42648),a=n(35509),i=n(91967),l=n(15611),c=n(17808),u=n(1287),s=n(83914),f=n(90281),d={opacity:"0.8",cursor:"grabbing"},m=n(35223);function p(e){return function(e){if(Array.isArray(e))return h(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||v(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function v(e,t){if(e){if("string"==typeof e)return h(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?h(e,t):void 0}}function h(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function y(e){var t,n,r,o;return{canScrollLeft:(null===(t=e.current)||void 0===t?void 0:t.scrollLeft)>0,canScrollRight:(null===(n=e.current)||void 0===n?void 0:n.scrollLeft)+1<(null===(r=e.current)||void 0===r?void 0:r.scrollWidth)-(null===(o=e.current)||void 0===o?void 0:o.clientWidth)}}const g={sortIndicator:"gFhu0",scrollContainer:"sWUp9",scrollbarTrack:"Vn2qM"};function b(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var w=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n};function E(e){var t,n;return e.column.canSort?r.createElement("span",{className:"".concat(g.sortIndicator,"\n ").concat(e.column.isSorted?"":"text-secondary","\n ").concat(null!==(n=null===(t=e.theme)||void 0===t?void 0:t.sortIndicator)&&void 0!==n?n:"")},r.createElement(s.x,{svgName:e.column.isSortedDesc||!e.column.isSorted?m.vn.ArrowRight:m.vn.ArrowLeft,size:s.S.Small})):r.createElement(r.Fragment,null)}function O(e){var t,n,o,s,f,m,v,h,y={columns:e.columns,data:e.data,disableSortBy:!e.enableSort,manualSortBy:e.manualSort,autoResetHiddenColumns:e.autoResetHiddenColumns,autoResetSortBy:e.autoResetSortBy,initialState:{sortBy:e.initialSortBy||[]}};e.initialSelectedRowIds&&(y.initialState={selectedRowIds:(v=e.initialSelectedRowIds,h={},v.forEach((function(e){return h[e]=!0})),h)}),e.getRowId&&(y.getRowId=e.getRowId);var g,w=a.useTable.apply(void 0,[y].concat((g=function(e){var t=[a.useSortBy,a.useRowSelect,"flex"===e.layout?a.useFlexLayout:a.useBlockLayout];return e.allowFiltering&&(t=[].concat(p(t),[a.useFilters])),e.allowGlobalFiltering&&(t=[].concat(p(t),[a.useGlobalFilter])),t}(Object.assign({},e)),function(e){if(Array.isArray(e))return b(e)}(g)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(g)||function(e,t){if(e){if("string"==typeof e)return b(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?b(e,t):void 0}}(g)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()))),O=w.getTableProps,S=w.getTableBodyProps,j=w.headerGroups,C=w.rows,x=w.prepareRow,k=w.toggleAllRowsSelected,N=w.setGlobalFilter,P=w.setHiddenColumns,T=w.state.sortBy;function I(){return C.map((function(t){x(t);var n=function(t){var n,r,o,a,l,c=i.q.isFunction(null===(n=e.theme)||void 0===n?void 0:n.row)?e.theme.row(t):null!==(o=null===(r=e.theme)||void 0===r?void 0:r.row)&&void 0!==o?o:"";return t.isSelected&&(null===(a=e.theme)||void 0===a?void 0:a.selectedRow)&&(c+=" ".concat(null===(l=e.theme)||void 0===l?void 0:l.selectedRow)),e.onSelectRow&&(c+=" cursor-pointer"),e.enableSortableRows&&(c+=" cursor-grab"),c}(t),o=!!e.getRowAppLink&&e.getRowAppLink(t);function a(){e.onSelectRow&&(e.allowSelectMultipleRows||k(!1),e.onSelectRow(t),t.toggleRowSelected(!0))}function c(e,i){var c=function(e,t){return"dragAttributes"in e&&"dragListeners"in e?Object.assign(Object.assign(Object.assign({},e.dragAttributes),e.dragListeners),{"aria-roledescription":"Sortable row",ref:t}):{}}(e,i);return o?r.createElement("div",{role:"row",key:t.id},r.createElement(l.F,Object.assign({},e,c,{className:n,appLink:o}),L(t))):r.createElement("div",Object.assign({},e,c,{key:t.id,role:"row",className:n,onClick:a}),L(t))}var s=t.getRowProps();return e.enableSortableRows?r.createElement(u.W,{id:t.original.id,key:t.id,childProps:s,childComponent:r.forwardRef((function(e,t){return c(e,t)}))}):c(s)}))}function L(t){return t.cells.map((function(n){var o=function(t,n){var r,o,a="";return"function"==typeof(null===(r=e.theme)||void 0===r?void 0:r.cell)&&(a=e.theme.cell(t,n)),"string"==typeof(null===(o=e.theme)||void 0===o?void 0:o.cell)&&(a=e.theme.cell),e.onSelectCell&&(a+=" cursor-pointer"),a}(t,n);return r.createElement("div",Object.assign({key:n.column.id},n.getCellProps(),{className:o,onClick:function(){e.onSelectCell&&e.onSelectCell(n)}}),n.render("Cell"))}))}return r.useEffect((function(){e.onSort&&e.onSort(T)}),[T]),r.useEffect((function(){e.globalFilter&&N(e.globalFilter)}),[e.globalFilter]),r.useEffect((function(){e.hiddenColumns&&P(e.hiddenColumns)}),[e.hiddenColumns&&e.hiddenColumns.length]),r.createElement("div",Object.assign({},O(),{className:null!==(n=null===(t=e.theme)||void 0===t?void 0:t.table)&&void 0!==n?n:""}),r.createElement("div",{className:null!==(s=null===(o=e.theme)||void 0===o?void 0:o.header)&&void 0!==s?s:""},j.map((function(t){var n,o;return r.createElement("div",Object.assign({},t.getHeaderGroupProps(),{className:null!==(o=null===(n=e.theme)||void 0===n?void 0:n.headerRow)&&void 0!==o?o:""}),t.headers.map((function(t){var n,o;return r.createElement("div",Object.assign({},t.getHeaderProps(t.getSortByToggleProps()),{className:null!==(o=null===(n=e.theme)||void 0===n?void 0:n.headerCell)&&void 0!==o?o:""}),t.render("Header",{renderSortIndicator:function(){return r.createElement(E,{column:t,theme:e.theme})}}),!t.hideSortIndicator&&r.createElement(E,{column:t,theme:e.theme}))})))}))),r.createElement("div",Object.assign({},S(),{className:null!==(m=null===(f=e.theme)||void 0===f?void 0:f.body)&&void 0!==m?m:""}),e.enableSortableRows?r.createElement(c.Q,{ids:C.map((function(e){return e.original.id})),getDragOverlay:function(t){var n,o,a=C.findIndex((function(e){return e.original.id===t})),i=C[a];return r.createElement("div",Object.assign({},e,{className:(n=e.theme,o="g-0 ",n&&(o+=n.row),o),style:d}),L(i))},onSortEnd:e.onSortingRowsEnd},I()):I()))}function S(e){var t=e.enableSlider,n=e.scrollIncrement,a=e.scrollable,l=w(e,["enableSlider","scrollIncrement","scrollable"]),c=function(){var e,t,n=r.useRef(null),o=(e=r.useState(y(n)),t=2,function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,a,i,l=[],c=!0,u=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=a.call(n)).done)&&(l.push(r.value),l.length!==t);c=!0);}catch(e){u=!0,o=e}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw o}}return l}}(e,t)||v(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),a=o[0],l=o[1],c=i.q.throttle((function(){l(y(n))}),200),u=r.useCallback((function(e){var t;n.current&&(null===(t=n.current)||void 0===t||t.removeEventListener("scroll",c)),e&&(l(y(n)),e.addEventListener("scroll",c)),n.current=e}),[]);return r.useEffect((function(){(null==n?void 0:n.current)&&l(y(n))}),[n]),{ref:u,scrollState:a,scroll:function(e){var t;null===(t=n.current)||void 0===t||t.scrollBy({left:e,top:0,behavior:"smooth"})}}}(),u=c.ref,s=c.scrollState,d=c.scroll;if(a)return r.createElement(o.$B,{renderTrackHorizontal:function(){return r.createElement("div",{className:g.scrollbarTrack})},autoHeightMax:1e4,autoHeight:!0},r.createElement(O,Object.assign({},l)));if(!t)return r.createElement(O,Object.assign({},l));function m(e){d(n*("right"===e?1:-1))}return r.createElement("div",{className:"mx-n4 overflow-x-hidden overflow-y-hidden"},r.createElement("div",{className:"px-4"},r.createElement("div",{className:"position-relative"},r.createElement(f.W,{direction:f.f.Left,onClick:function(){return m("left")},hide:!s.canScrollLeft}),r.createElement("div",{className:"".concat(g.scrollContainer," ").concat(e.scrollContainerClassName),ref:u},r.createElement(O,Object.assign({},l))),r.createElement(f.W,{direction:f.f.Right,onClick:function(){return m("right")},hide:!s.canScrollRight}))))}S.defaultProps={scrollIncrement:250,scrollable:!1,layout:"flex"}},17132:(e,t,n)=>{n.d(t,{w:()=>$e});var r=n(32735),o=n(6748),a=n(23481),i=n(38307),l=n(26136),c=n(97408),u=n(40782),s=n(64818);const f={heatMap:"rwDjh",avatarContainer:"kW4ZM"};function d(e){return function(e){if(Array.isArray(e))return m(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return m(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?m(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function m(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var p=a.T.encloseNamespace("shared.engagementTable"),v={heatMap:[],engagementRate:0,viewCount:0};function h(e){var t;return r.createElement("div",{className:"".concat(null!==(t=e.className)&&void 0!==t?t:"")},e.children)}function y(e){return r.createElement(h,{className:"d-inline-block ".concat(e.column.isSorted?"fw-bold":"")},p(e.phraseKey))}var g={table:"bg-white rounded px-0",header:"border-bottom",headerCell:"m-3",cell:"mx-3 my-2"};function b(e){var t,n,a,m=function(e){return r.useMemo((function(){var t,n,o=(t=e.engagement,n=0,t.forEach((function(e){var t=Math.max.apply(Math,d(e.heatMap));t>n&&(n=t)})),n);return[{Header:function(e){var t=e.column;return r.createElement(y,{column:t,phraseKey:"name"})},width:22,accessor:"user",sortType:function(t,n){return(0,l.B)(t.values.user,e.anonymiseUsers)>(0,l.B)(n.values.user,e.anonymiseUsers)?1:-1},Cell:function(t){var n,o,a,i,u=t.value,d=(o=u,a=e.anonymiseUsers,{name:(i=(0,l.B)(o,a).split(" ").filter((function(e){return!!e})))[0],surname:i.slice(1).join(" ")}),m=d.name,p=d.surname;return r.createElement(h,{className:"d-flex align-items-center h-100"},r.createElement("span",{className:f.avatarContainer},r.createElement(c.q,{imageCdnUrl:e.imageCdnUrl,initials:s.l.getInitials(m,p),imageUrl:!e.anonymiseUsers&&(null===(n=null==u?void 0:u.avatar)||void 0===n?void 0:n.url),showAnonymousUser:!(e.anonymiseUsers||u&&!u.sessionId)})),r.createElement("span",{className:"ms-2 clamp-1"},m," ",p))}},{Header:function(e){var t=e.column;return r.createElement(y,{column:t,phraseKey:"views"})},accessor:"viewCount",width:15,sortType:"basic",sortDescFirst:!0,Cell:function(e){var t=e.value;return r.createElement(h,{className:"d-flex align-items-center h-100"},r.createElement("div",null,t))}},{Header:function(e){var t=e.column;return r.createElement(y,{column:t,phraseKey:"engagement"})},accessor:"engagementRate",width:20,sortType:"basic",sortDescFirst:!0,Cell:function(e){var t=e.value;return r.createElement(h,{className:"w-33"},r.createElement(u.O,{percentage:t,layout:u.I.LabelBefore}))}},{Header:function(e){var t=e.column;return r.createElement(y,{column:t,phraseKey:"heatMap"})},accessor:"heatMap",width:48,disableSortBy:!0,Cell:function(e){var t=e.row.original;return r.createElement(h,{className:"d-flex align-items-center h-100"},r.createElement(i.c,{engagement:t,max:o,className:"".concat(f.heatMap," flex-grow-1")}))}}]}),[e.anonymiseUsers])}({engagement:e.engagement,imageCdnUrl:e.imageCdnUrl,anonymiseUsers:e.anonymiseUsers}),p=(t=e.engagement,n=e.users,a=e.classroomStudents,r.useMemo((function(){if(!(null==t?void 0:t.length)||!(null==n?void 0:n.length))return[];var e=[],r=new Set;if(t.forEach((function(t){var o=n.find((function(e){return e.id&&e.id===t.userId?(r.add(e.id),!0):!(!e.sessionId||e.sessionId!==t.sessionId)}));e.push(Object.assign(Object.assign({},t),{user:o}))})),null==a?void 0:a.length){var o=a.filter((function(e){return!r.has(e.id)})).map((function(e){return Object.assign(Object.assign({},v),{user:e})}));e.push.apply(e,d(o))}return e}),[null==n?void 0:n.length]));return p.length?r.createElement(o.i,{columns:m,data:p,theme:Object.assign(Object.assign({},g),{table:e.border?"".concat(g.table," border"):g.table}),enableSort:e.enableSort}):r.createElement(r.Fragment,null)}var w=n(84621),E=n(8604);function O(e){return r.createElement(u.O,{layout:e.layout,className:e.className,percentage:0,customLabel:"--%"})}var S=n(83345),j=n(35223),C="shared.insightAmountWatched",x=a.T.encloseNamespace(C);function k(e){var t=(0,E.Q)(e.engagement),n=Math.round(100*t);return r.createElement(w.L,{title:x("title"),svgName:j.vn.Timer,svgClassName:"bg-light-green text-green"},r.createElement("div",{className:"d-flex flex-column align-items-center my-auto gap-2"},!!e.engagement&&r.createElement(r.Fragment,null,r.createElement(u.O,{percentage:t,layout:u.I.LabelInside}),r.createElement("p",{className:"text-center"},"number"==typeof t?r.createElement(S.x,{namespace:C,phrase:"everyoneWatched",options:{percentage:n}}):r.createElement(S.x,{namespace:C,phrase:"notWatched"}))),!e.engagement&&r.createElement(r.Fragment,null,r.createElement(O,{layout:u.I.LabelInside}))))}var N=n(72306),P=n.n(N),T=n(70312),I=n.n(T),L=n(70072),A=n(75896),M=["#FF9300","#38A2E8","#7A76E8","#B679C7","#F7847B","#D9584F","#FFCD52","#5DC786","#40BCC3","#40C2BB"];function R(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var _=n(97958),B="shared.insightTotalViews",U=a.T.encloseNamespace(B),D={title:{text:null},credits:{enabled:!1},chart:{backgroundColor:"transparent",spacing:[0,0,0,0]},legend:{itemStyle:L.d,itemDistance:8},plotOptions:{pie:{allowPointSelect:!0,cursor:"pointer",dataLabels:{enabled:!1},showInLegend:!0,borderWidth:0,size:"80%"}}};function F(e){var t,n,o,a,i,l,c,u=function(e){var t,n,r=e.findIndex((function(e){return"Staff"===e.name}));if(r>-1){var o=(t=e.splice(r,1),n=1,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,a,i,l=[],c=!0,u=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=a.call(n)).done)&&(l.push(r.value),l.length!==t);c=!0);}catch(e){u=!0,o=e}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw o}}return l}}(t,n)||function(e,t){if(e){if("string"==typeof e)return R(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?R(e,t):void 0}}(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())[0];e.push(o)}return e.sort((function(e,t){var n,r;return parseInt(null===(n=e.name.match(/\d+/))||void 0===n?void 0:n[0])-parseInt(null===(r=t.name.match(/\d+/))||void 0===r?void 0:r[0])}))}((o=e.events,a=[],l={},null==(c=o["yearGroupCount"])||c.forEach((function(e){var t,n=e.name||"Unknown";n&&!(null==a?void 0:a.includes(n.toLowerCase()))&&(l[n]=null!==(t=l[n])&&void 0!==t?t:0,l[n]+=e.count)})),A.m.sortBy(Object.keys(l).map((function(e){return{name:i?i(e):e,y:l[e],type:"pie"}})),"name").map((function(e,t){return Object.assign(Object.assign({},e),{color:M[t%M.length]})})))),s=null!==(n=null==(t=u)?void 0:t.reduce((function(e,t){return e+t.y}),0))&&void 0!==n?n:null;return r.createElement(w.L,{title:U("title"),svgClassName:"bg-light-blue text-blue",svgName:j.vn.VisibleOn},(null==u?void 0:u.length)?r.createElement(r.Fragment,null,r.createElement("p",{className:"mb-0"},r.createElement(S.x,{namespace:B,phrase:"totalViews",options:{totalViews:s}})),r.createElement("div",{className:"d-flex justify-content-center h-75"},r.createElement(I(),{highcharts:P(),options:function(e){return Object.assign(Object.assign({},D),{series:[{type:"pie",name:U("title"),data:e}]})}(u),containerProps:{className:"w-100"}}))):r.createElement(_.u,{className:"pt-0 my-auto"},r.createElement(_.u.Image,{src:e.emptyStateImage,className:"w-75 h-auto"}),r.createElement(_.u.Heading,{className:"h4"},r.createElement(S.x,{namespace:B,phrase:"noViews"})),r.createElement(_.u.Info,{className:"w-100"},r.createElement(S.x,{namespace:B,phrase:"notWatched"}))))}var H=n(99742);const V={partialInsights:"nKLWa",videoContainer:"WF2iA"};function W(){return r.createElement("div",null,r.createElement("div",{className:"row g-3 mb-3"},r.createElement("div",{className:"col"},r.createElement("div",{className:"".concat(V.partialInsights," rounded partial-loading-background")})),r.createElement("div",{className:"col"},r.createElement("div",{className:"".concat(V.partialInsights," rounded partial-loading-background")})),r.createElement("div",{className:V.videoContainer},r.createElement("div",{className:"".concat(V.partialInsights," rounded partial-loading-background")}))),r.createElement("div",{className:"row g-3 mb-5"},r.createElement("div",{className:"col-12"},r.createElement("div",{className:"".concat(V.partialInsights," rounded partial-loading-background")}))))}var z=n(87252),G=n(41386),Z=n(76032);function K(e){return K="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},K(e)}function $(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,q(r.key),r)}}function q(e){var t=function(e){if("object"!=K(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=K(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==K(t)?t:t+""}function Q(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(Q=function(){return!!e})()}function Y(){return Y="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(e,t,n){var r=function(e,t){for(;!{}.hasOwnProperty.call(e,t)&&null!==(e=X(e)););return e}(e,t);if(r){var o=Object.getOwnPropertyDescriptor(r,t);return o.get?o.get.call(arguments.length<3?e:n):o.value}},Y.apply(null,arguments)}function X(e){return X=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},X(e)}function J(e,t){return J=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},J(e,t)}var ee=function(e){function t(e,n){var r;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),(r=function(e,t,n){return t=X(t),function(e,t){if(t&&("object"==K(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,Q()?Reflect.construct(t,n||[],X(e).constructor):t.apply(e,n))}(this,t,[e,n])).overlayVisible=n.overlayVisible,r.toggle(r.overlayVisible),r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&J(e,t)}(t,e),n=t,r=[{key:"handleToggle",value:function(){this.toggle(!this.overlayVisible)}},{key:"toggle",value:function(e){e?this.toggleOn():this.toggleOff()}},{key:"toggleOn",value:function(){Z.Z.dom.addClass(this.toggleEl,"on"),this.overlayVisible=!0,this.player().engagementOverlayPlugin().toggleOverlay(this.overlayVisible),this.player().addClass("cv-reports-player-overlay-visible")}},{key:"toggleOff",value:function(){Z.Z.dom.removeClass(this.toggleEl,"on"),this.overlayVisible=!1,this.player().engagementOverlayPlugin().toggleOverlay(this.overlayVisible),this.player().removeClass("cv-reports-player-overlay-visible")}},{key:"handleClick",value:function(e){e.stopImmediatePropagation()}},{key:"createEl",value:function(e,n,r){this.handlerBound||(this.handleToggle=this.handleToggle.bind(this),this.handlerBound=!0),this.toggleEl&&this.toggleEl.removeEventListener("click",this.handleToggle),this.toggleEl=Z.Z.dom.createEl("div",{className:"custom-toggle custom-toggle-info toggle-option float-end",innerHTML:'<span class="handle"></span></div>'}),this.toggleEl.addEventListener("click",this.handleToggle);var o,a,i,l=(o=t,a=this,"function"==typeof(i=Y(X(1&3?o.prototype:o),"createEl",a))?function(e){return i.apply(a,e)}:i)([e,{className:"vjs-menu-item cv-cog-menu-item",innerHTML:'\n <span class="vjs-menu-item-text">Heat Map</span>\n <span class="cv-toggle-container"></span>'},r]);return l.children[1].appendChild(this.toggleEl),l}}],r&&$(n.prototype,r),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r}(Z.Z.getComponent("MenuItem"));Z.Z.registerComponent("EngagementOverlayMenuItem",ee);var te=n(74161),ne=n(86572);function re(e){var t,n=e.interactive.timepoints.find((function(t){var n=t.visibleAt/1e3;return Math.floor(e.time)===Math.floor(n)||Math.ceil(e.time)===Math.ceil(n)}));if(!(null===(t=null==n?void 0:n.interactions)||void 0===t?void 0:t.length))return r.createElement(r.Fragment,null);var o=n.interactions.length>3?n.interactions.slice(0,2):n.interactions,a=n.interactions.length-o.length;return r.createElement("div",{className:"d-flex justify-content-end ms-2"},o.map((function(e,t){return r.createElement(ne.y,{key:t,interaction:e,showQuestion:!1,iconClassName:"ms-1"})})),!!a&&r.createElement("div",{className:"interaction-type-icon d-flex justify-content-center align-items-center border border-dark text-body ms-1"},"+".concat(a)))}var oe=n(42503);function ae(e){return function(e){if(Array.isArray(e))return ie(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return ie(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ie(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ie(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var le={title:{text:null},xAxis:{visible:!1,minPadding:0,maxPadding:0},legend:{enabled:!1},credits:{enabled:!1},defs:{gradient:{tagName:"linearGradient",id:"area-gradient",x1:0,y1:1,x2:0,y2:0,children:[{tagName:"stop",offset:0},{tagName:"stop",offset:1}]}}};function ce(e,t){return{styledMode:!0,spacing:[15,0,0,0],width:e,height:t}}function ue(e){return ue="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ue(e)}function se(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,fe(r.key),r)}}function fe(e){var t=function(e){if("object"!=ue(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=ue(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==ue(t)?t:t+""}function de(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(de=function(){return!!e})()}function me(){return me="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(e,t,n){var r=function(e,t){for(;!{}.hasOwnProperty.call(e,t)&&null!==(e=pe(e)););return e}(e,t);if(r){var o=Object.getOwnPropertyDescriptor(r,t);return o.get?o.get.call(arguments.length<3?e:n):o.value}},me.apply(null,arguments)}function pe(e){return pe=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},pe(e)}function ve(e,t){return ve=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},ve(e,t)}var he=Z.Z.getComponent("Component");P().AST.allowedTags.push("g"),P().AST.allowedAttributes.push("viewBox","transform");var ye=function(e){function t(e,n){var r;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),(r=function(e,t,n){return t=pe(t),function(e,t){if(t&&("object"==ue(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,de()?Reflect.construct(t,n||[],pe(e).constructor):t.apply(e,n))}(this,t,[e,n])).initialize(),r.bindListeners(),r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&ve(e,t)}(t,e),n=t,o=[{key:"initialize",value:function(){var e=this;this.player().ready((function(){return e.buildChart()}))}},{key:"buildCSSClass",value:function(){return"cv-engagement-overlay"}},{key:"createEl",value:function(e,n,r){var o,a,i;return(o=t,a=this,"function"==typeof(i=me(pe(1&3?o.prototype:o),"createEl",a))?function(e){return i.apply(a,e)}:i)([e,Object.assign(Object.assign({},n),{className:this.buildCSSClass(),innerHTML:'<div class="cv-engagement-chart"></div><div class="cv-engagement-timepoint-indicator"></div>'}),r])}},{key:"toggleChart",value:function(e){e?this.buildChart():this.destroyChart()}},{key:"bindListeners",value:function(){var e=this;this.handleClick=this.handleClick.bind(this),this.resizeChart=this.resizeChart.bind(this),this.player().on("playerresize",this.resizeChart),this.on(this.el(),"mouseup",this.handleClick),this.player().on("dispose",(function(){e.player().off("playerresize",e.resizeChart),e.off(e.el(),"mouseup",e.handleClick)}))}},{key:"handleClick",value:function(e){Z.Z.dom.isSingleLeftClick(e)&&(this.player().paused()?this.player().play():this.player().pause())}},{key:"buildChart",value:function(){var e=this;if(!this.chart){var t=this.getChartDimensions();if(t){var n=this.el().querySelector(".cv-engagement-chart");this.chart=P().chart(n,this.getHighchartOptions(t))}else this.player().one("play",(function(){return e.buildChart()}))}}},{key:"resizeChart",value:function(){var e=this.getChartDimensions();this.chart&&e&&this.chart.setSize(e.width,e.height)}},{key:"destroyChart",value:function(){var e;null===(e=this.chart)||void 0===e||e.destroy(),this.chart=null}},{key:"getChartDimensions",value:function(){var e=this.player().getChild("collapserator"),t=null==e?void 0:e.currentHeight(),n=this.el().clientWidth;return t&&n?{width:n,height:this.player().currentDimensions().height-t}:null}},{key:"getHighchartOptions",value:function(e){var t,n,o,a=e.width,i=e.height;return Object.assign(Object.assign({},le),{chart:ce(a,i),yAxis:(n=this.options_.heatMap,{max:1.05*Math.max.apply(Math,ae(n)),min:0,minPadding:0,maxPadding:0,allowDecimals:!0,startOnTick:!1,endOnTick:!1,visible:!1}),tooltip:(o=this.options_.interactive,{formatter:function(){var e=o?function(e,t){return(0,te.renderToStaticMarkup)(r.createElement(re,{time:t,interactive:e}))}(o,this.x):"";return'<div class="cv-engagement-tooltip bg-white rounded"><div class="d-flex justify-content-between">'+"<strong>".concat((0,oe.m)(this.x),"</strong>")+"".concat(e)+'</div><div class="d-flex justify-content-between rounded bg-light cv-view-count-container">'+'<strong>Views</strong> <span class="cv-view-count">'.concat(this.y,"</span>")+"</div></div>"},positioner:function(e,t,n){var r=this.chart.plotWidth-e,o=n.plotX-e/2;return{x:Math.min(Math.max(o,0),r),y:this.chart.plotTop}},useHTML:!0,padding:0}),plotOptions:(t=this.moveTimepointIndicator.bind(this),{area:{point:{events:{mouseOver:function(){t(this.x)},mouseOut:function(){t(null)}}}},series:{marker:{enabled:!1}}}),series:[{type:"area",data:this.options_.heatMap}]})}},{key:"moveTimepointIndicator",value:function(e){this.options_.onTimepointHover&&this.options_.onTimepointHover(e);var t=this.el().querySelector(".cv-engagement-timepoint-indicator");null!==e?(Z.Z.dom.addClass(t,"cv-engagement-timepoint-indicator-visible"),t.style.left="".concat(e/this.options_.heatMap.length*100,"%")):Z.Z.dom.removeClass(t,"cv-engagement-timepoint-indicator-visible")}}],o&&se(n.prototype,o),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,o}(he);function ge(e){return ge="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ge(e)}function be(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,we(r.key),r)}}function we(e){var t=function(e){if("object"!=ge(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=ge(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==ge(t)?t:t+""}function Ee(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(Ee=function(){return!!e})()}function Oe(e){return Oe=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},Oe(e)}function Se(e,t){return Se=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},Se(e,t)}Z.Z.registerComponent("EngagementOverlay",ye);var je=function(e){function t(e,n){var r;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),(r=function(e,t,n){return t=Oe(t),function(e,t){if(t&&("object"==ge(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,Ee()?Reflect.construct(t,n||[],Oe(e).constructor):t.apply(e,n))}(this,t,[e,n])).options=n,e.ready((function(){r.initialize()})),r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Se(e,t)}(t,e),n=t,(r=[{key:"initialize",value:function(){var e;this.hasHeatMapData()&&(this.player.addChild("engagementOverlay",{heatMap:this.options.heatMap,interactive:this.options.interactive,onTimepointHover:this.options.onTimepointHover}),(null===(e=this.player.getChild("collapserator"))||void 0===e?void 0:e.getChild("cogButton")).addItem({index:0,ctor:ee,name:"EngagementOverlayMenuItem",options:{overlayVisible:!0}}))}},{key:"toggleOverlay",value:function(e){var t=this.player.getChild("engagementOverlay");null==t||t.toggleChart(e)}},{key:"hasHeatMapData",value:function(){var e;return(null===(e=this.options.heatMap)||void 0===e?void 0:e.reduce((function(e,t){return e+t}),0))>0}}])&&be(n.prototype,r),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r}(Z.Z.getPlugin("plugin"));Z.Z.registerPlugin("engagementOverlayPlugin",je),n(16852);var Ce=n(4271),xe=n(10463);function ke(e){return ke="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ke(e)}function Ne(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,Pe(r.key),r)}}function Pe(e){var t=function(e){if("object"!=ke(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=ke(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==ke(t)?t:t+""}function Te(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(Te=function(){return!!e})()}function Ie(e){return Ie=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},Ie(e)}function Le(e,t){return Le=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},Le(e,t)}n(6994);var Ae=function(e){function t(e,n){var r;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),(r=function(e,t,n){return t=Ie(t),function(e,t){if(t&&("object"==ke(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,Te()?Reflect.construct(t,n||[],Ie(e).constructor):t.apply(e,n))}(this,t,[e])).options=n,r.player.one("loadedmetadata",(function(){return r.player.ready(r.initialize.bind(r))})),r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Le(e,t)}(t,e),n=t,(r=[{key:"initialize",value:function(){xe.O.useMetadataTrack(this.player,"interactive",this.onTrackLoaded.bind(this)),this.player.addClass("cv-interactive-plugin")}},{key:"onTrackLoaded",value:function(e){this.addChildren(e)}},{key:"addChildren",value:function(e){this.player.controlBar.getChild("progressControl").getChild("SeekBar").addChild(new Ce.N(this.player,{interactive:this.options.interactive,track:e}))}}])&&Ne(n.prototype,r),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r}(Z.Z.getPlugin("plugin"));function Me(e){return Me="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Me(e)}function Re(){Re=function(){return t};var e,t={},n=Object.prototype,r=n.hasOwnProperty,o=Object.defineProperty||function(e,t,n){e[t]=n.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",l=a.asyncIterator||"@@asyncIterator",c=a.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function s(e,t,n,r){var a=t&&t.prototype instanceof y?t:y,i=Object.create(a.prototype),l=new T(r||[]);return o(i,"_invoke",{value:x(e,n,l)}),i}function f(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}t.wrap=s;var d="suspendedStart",m="suspendedYield",p="executing",v="completed",h={};function y(){}function g(){}function b(){}var w={};u(w,i,(function(){return this}));var E=Object.getPrototypeOf,O=E&&E(E(I([])));O&&O!==n&&r.call(O,i)&&(w=O);var S=b.prototype=y.prototype=Object.create(w);function j(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function C(e,t){function n(o,a,i,l){var c=f(e[o],e,a);if("throw"!==c.type){var u=c.arg,s=u.value;return s&&"object"==Me(s)&&r.call(s,"__await")?t.resolve(s.__await).then((function(e){n("next",e,i,l)}),(function(e){n("throw",e,i,l)})):t.resolve(s).then((function(e){u.value=e,i(u)}),(function(e){return n("throw",e,i,l)}))}l(c.arg)}var a;o(this,"_invoke",{value:function(e,r){function o(){return new t((function(t,o){n(e,r,t,o)}))}return a=a?a.then(o,o):o()}})}function x(t,n,r){var o=d;return function(a,i){if(o===p)throw Error("Generator is already running");if(o===v){if("throw"===a)throw i;return{value:e,done:!0}}for(r.method=a,r.arg=i;;){var l=r.delegate;if(l){var c=k(l,r);if(c){if(c===h)continue;return c}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(o===d)throw o=v,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);o=p;var u=f(t,n,r);if("normal"===u.type){if(o=r.done?v:m,u.arg===h)continue;return{value:u.arg,done:r.done}}"throw"===u.type&&(o=v,r.method="throw",r.arg=u.arg)}}}function k(t,n){var r=n.method,o=t.iterator[r];if(o===e)return n.delegate=null,"throw"===r&&t.iterator.return&&(n.method="return",n.arg=e,k(t,n),"throw"===n.method)||"return"!==r&&(n.method="throw",n.arg=new TypeError("The iterator does not provide a '"+r+"' method")),h;var a=f(o,t.iterator,n.arg);if("throw"===a.type)return n.method="throw",n.arg=a.arg,n.delegate=null,h;var i=a.arg;return i?i.done?(n[t.resultName]=i.value,n.next=t.nextLoc,"return"!==n.method&&(n.method="next",n.arg=e),n.delegate=null,h):i:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,h)}function N(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function P(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function T(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(N,this),this.reset(!0)}function I(t){if(t||""===t){var n=t[i];if(n)return n.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,a=function n(){for(;++o<t.length;)if(r.call(t,o))return n.value=t[o],n.done=!1,n;return n.value=e,n.done=!0,n};return a.next=a}}throw new TypeError(Me(t)+" is not iterable")}return g.prototype=b,o(S,"constructor",{value:b,configurable:!0}),o(b,"constructor",{value:g,configurable:!0}),g.displayName=u(b,c,"GeneratorFunction"),t.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===g||"GeneratorFunction"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,b):(e.__proto__=b,u(e,c,"GeneratorFunction")),e.prototype=Object.create(S),e},t.awrap=function(e){return{__await:e}},j(C.prototype),u(C.prototype,l,(function(){return this})),t.AsyncIterator=C,t.async=function(e,n,r,o,a){void 0===a&&(a=Promise);var i=new C(s(e,n,r,o),a);return t.isGeneratorFunction(n)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},j(S),u(S,c,"Generator"),u(S,i,(function(){return this})),u(S,"toString",(function(){return"[object Generator]"})),t.keys=function(e){var t=Object(e),n=[];for(var r in t)n.push(r);return n.reverse(),function e(){for(;n.length;){var r=n.pop();if(r in t)return e.value=r,e.done=!1,e}return e.done=!0,e}},t.values=I,T.prototype={constructor:T,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(P),!t)for(var n in this)"t"===n.charAt(0)&&r.call(this,n)&&!isNaN(+n.slice(1))&&(this[n]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var n=this;function o(r,o){return l.type="throw",l.arg=t,n.next=r,o&&(n.method="next",n.arg=e),!!o}for(var a=this.tryEntries.length-1;a>=0;--a){var i=this.tryEntries[a],l=i.completion;if("root"===i.tryLoc)return o("end");if(i.tryLoc<=this.prev){var c=r.call(i,"catchLoc"),u=r.call(i,"finallyLoc");if(c&&u){if(this.prev<i.catchLoc)return o(i.catchLoc,!0);if(this.prev<i.finallyLoc)return o(i.finallyLoc)}else if(c){if(this.prev<i.catchLoc)return o(i.catchLoc,!0)}else{if(!u)throw Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return o(i.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var o=this.tryEntries[n];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var a=o;break}}a&&("break"===e||"continue"===e)&&a.tryLoc<=t&&t<=a.finallyLoc&&(a=null);var i=a?a.completion:{};return i.type=e,i.arg=t,a?(this.method="next",this.next=a.finallyLoc,h):this.complete(i)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),h},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),P(n),h}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;P(n)}return o}}throw Error("illegal catch attempt")},delegateYield:function(t,n,r){return this.delegate={iterator:I(t),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=e),h}},t}function _e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,Be(r.key),r)}}function Be(e){var t=function(e){if("object"!=Me(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=Me(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==Me(t)?t:t+""}function Ue(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(Ue=function(){return!!e})()}function De(){return De="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(e,t,n){var r=function(e,t){for(;!{}.hasOwnProperty.call(e,t)&&null!==(e=Fe(e)););return e}(e,t);if(r){var o=Object.getOwnPropertyDescriptor(r,t);return o.get?o.get.call(arguments.length<3?e:n):o.value}},De.apply(null,arguments)}function Fe(e){return Fe=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},Fe(e)}function He(e,t){return He=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},He(e,t)}Z.Z.registerPlugin("interactiveSeekBarPlugin",Ae);var Ve=function(e){function t(e,n){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t,n){return t=Fe(t),function(e,t){if(t&&("object"==Me(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,Ue()?Reflect.construct(t,n||[],Fe(e).constructor):t.apply(e,n))}(this,t,[e,n])}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&He(e,t)}(t,e),n=t,r=[{key:"getPlayerClassName",value:function(){return"cv-reports-player"}},{key:"getAnalyticsPlayerType",value:function(){return"reports-player"}},{key:"additionalSetup",value:function(e){var n,r,o,a,i=this,l=Object.create(null,{additionalSetup:{get:function(){return e=t,n=i,De(Fe(1&1?e.prototype:e),"additionalSetup",n);var e,n}}});return n=this,r=void 0,o=void 0,a=Re().mark((function t(){return Re().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:l.additionalSetup.call(this,e),this.setupEngagementOverlayPlugin(e),this.setupUpClipPlugin(e),this.setupInteractiveSeekBarPlugin(e);case 4:case"end":return t.stop()}}),t,this)})),new(o||(o=Promise))((function(e,t){function i(e){try{c(a.next(e))}catch(e){t(e)}}function l(e){try{c(a.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof o?n:new o((function(e){e(n)}))).then(i,l)}c((a=a.apply(n,r||[])).next())}))}},{key:"setupEngagementOverlayPlugin",value:function(e){var t;this.player.engagementOverlayPlugin({heatMap:this.options.heatMap,interactive:null===(t=e.additionalData)||void 0===t?void 0:t.interactive,onTimepointHover:this.options.onTimepointHover})}},{key:"setupUpClipPlugin",value:function(e){var t,n,r="MasterClip"===e.mediaType,o="MasterInteractive"===e.mediaType;if((r||o)&&(r&&(n=e.additionalData),!o||(n=null===(t=e.additionalData)||void 0===t?void 0:t.clipData))){if(!n)throw Error("Invalid clip data");this.player.clipPlugin({startTime:n.startTime,endTime:n.endTime})}}},{key:"setupInteractiveSeekBarPlugin",value:function(e){var t,n,r=null===(t=e.additionalData)||void 0===t?void 0:t.interactive;(null===(n=e.additionalData)||void 0===n?void 0:n.interactive)&&(this.track=G.h.getInteractiveTrack(this.player,e),this.player.interactiveSeekBarPlugin({interactive:r}))}},{key:"getSeekBarOptions",value:function(){return{ignoreChapters:!0}}}],r&&_e(n.prototype,r),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r}(z.r);function We(e){var t=r.useRef(null),n=r.useRef(null);return r.useEffect((function(){n.current=new Ve(t.current,e)}),[]),r.createElement("div",{ref:t})}const ze={playerContainer:"fGWsk",playerPlaceholder:"v1MjE",heatMap:"lp1Yn",heatMapTimepointIndicator:"yOOK6",heatMapTimepointIndicatorVisible:"rTXmB",partialLoadingContainer:"gW1HU"};var Ge=a.T.encloseNamespace("shared.videoEngagementOverlay");function Ze(e){var t=r.useRef(null),n=(0,E.O)(e.engagement);return r.createElement("div",{className:"bg-white border rounded overflow-hidden h-100"},r.createElement("div",{className:"position-relative"},r.createElement("div",{className:ze.playerPlaceholder}),r.createElement("div",{className:ze.playerContainer},r.createElement(We,{viewKey:e.viewKey,playerApi:new URL(e.playerApiUrl),hotkeyElQuerySelector:"body",heatMap:n,onTimepointHover:function(e){var r=t.current;r&&(null!==e?(r.classList.add(ze.heatMapTimepointIndicatorVisible),r.style.left="".concat(e/n.length*100,"%")):r.classList.remove(ze.heatMapTimepointIndicatorVisible))},aspectRatio:"16:9"}))),r.createElement("div",{className:"p-3"},r.createElement("div",{className:"position-relative"},r.createElement(i.c,{engagement:e.engagement,className:ze.heatMap}),r.createElement("div",{ref:t,className:ze.heatMapTimepointIndicator})),r.createElement("div",{className:"d-flex justify-content-between mt-2"},r.createElement("strong",null,Ge("heatmap")),r.createElement("div",{className:"w-33"},r.createElement(i.l,null)))))}const Ke={videoContainer:"cpl68"};function $e(e){var t;return r.createElement(r.Fragment,null,!e.hasDataLoaded&&r.createElement(W,null),r.createElement("div",{className:"row g-3 mb-3"},e.hasDataLoaded&&r.createElement(r.Fragment,null,r.createElement("div",{className:"col"},r.createElement(F,{events:{yearGroupCount:e.yearGroups},emptyStateImage:H.W.EmptyStates.MY_VIDEOS})),r.createElement("div",{className:"col"},r.createElement(k,{engagement:e.individualEngagement})),r.createElement("div",{className:Ke.videoContainer},r.createElement(Ze,{engagement:e.aggregateEngagement,viewKey:e.viewKey.viewKey,playerApiUrl:e.config.playerApiUrl,imageCdnUrl:e.config.imageCdnUrl}))),e.tableDataLoaded&&r.createElement("div",{className:"col-12"},r.createElement(b,{engagement:e.individualEngagement,users:e.users,imageCdnUrl:null===(t=e.config)||void 0===t?void 0:t.imageCdnUrl,anonymiseUsers:e.anonymiseUsers,classroomStudents:e.classroomStudents,border:!0,enableSort:!0}))))}}}]);
3
- //# sourceMappingURL=5241-ec9b0f642f-lite.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/5241-ec9b0f642f-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/analytics/components/engagement-heat-map/engagement-heat-map.scss","file:///app/packages/libs/shared/src/apps/analytics/components/engagement-heat-map/EngagementHeatMap.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/insight-card/insight-card.scss","file:///app/packages/libs/shared/src/apps/analytics/components/insight-card/InsightCard.tsx","file:///app/packages/libs/shared/src/apps/analytics/constants/ChartStyles.ts","file:///app/packages/libs/shared/src/apps/analytics/utils/EngagementUtils.ts","file:///app/packages/libs/shared/src/constants/DragOverlayStyles.ts","file:///app/packages/libs/shared/src/components/table/TableUtils.ts","file:///app/packages/libs/shared/src/components/table/table.scss","file:///app/packages/libs/shared/src/components/table/Table.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/engagement-table/engagement-table.scss","file:///app/packages/libs/shared/src/apps/analytics/components/engagement-table/EngagementTableUtils.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/engagement-table/EngagementTable.tsx","file:///app/packages/libs/shared/src/components/percentage-indicator/PartialPercentageIndicator.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/insights/amount-watched/InsightAmountWatched.tsx","file:///app/packages/libs/shared/src/apps/analytics/utils/ChartColourUtils.ts","file:///app/packages/libs/shared/src/apps/analytics/components/insights/total-views/InsightTotalViews.tsx","file:///app/packages/libs/shared/src/apps/analytics/utils/SharedUserActivityPieChartUtils.ts","file:///app/packages/projects/lite/src/apps/my-shares/components/insights-heatmap/partial-loading/partial-insights-heatmap.scss","file:///app/packages/projects/lite/src/apps/my-shares/components/insights-heatmap/partial-loading/PartialInsightsHeatmap.tsx","file:///app/packages/projects/player/src/plugins/engagement-overlay-plugin/components/engagement-overlay-menu-item/engagement-overlay-menu-item.ts","file:///app/packages/projects/player/src/plugins/engagement-overlay-plugin/components/timepoint-interactions/timepoint-interactions.tsx","file:///app/packages/projects/player/src/plugins/engagement-overlay-plugin/components/engagement-overlay/engagement-overlay-chart-options.tsx","file:///app/packages/projects/player/src/plugins/engagement-overlay-plugin/components/engagement-overlay/engagement-overlay.ts","file:///app/packages/projects/player/src/plugins/engagement-overlay-plugin/engagement-overlay-plugin.ts","file:///app/packages/projects/player/src/plugins/interactive-plugin/interactive-seek-bar-plugin.ts","file:///app/packages/projects/player/src/players/reports/reports-player.ts","file:///app/packages/projects/player/src/react/ReportsPlayer.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/video-engagement-overlay/video-engagement-overlay.scss","file:///app/packages/projects/lite/src/apps/my-shares/components/video-engagement-overlay/VideoEngagementOverlay.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/insights-heatmap/insights-heatmap.scss","file:///app/packages/projects/lite/src/apps/my-shares/components/insights-heatmap/InsightsHeatmap.tsx"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"heatMap\":\"epapa\",\"legend\":\"uhH4p\"};","import React from 'react';\nimport chroma from 'chroma-js';\n\nimport { getFullHeatMap } from 'libs/shared/apps/analytics/utils/EngagementUtils';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Engagement } from 'libs/shared/interfaces';\n\nimport styles from './engagement-heat-map.scss';\n\nconst namespace = 'shared.engagementHeatMap';\n\nconst ZERO_COLOUR = '#f1f1f1';\nconst MIN_COLOUR = '#daf07d';\nconst MAX_COLOUR = '#08bd1a';\n\nconst COLOUR_SCALE = chroma.scale([ MIN_COLOUR, MAX_COLOUR ]);\n\nconst LEGEND_VALUES = [ 0, 0.01, 0.25, 0.5, 0.75, 1 ];\n\nfunction getBackgroundColor(value: number, max: number): string {\n if (!value)\n return ZERO_COLOUR;\n\n return COLOUR_SCALE(value / max).hex();\n}\n\nfunction getGradient(data: number[], max: number): string {\n const gradient: string[] = [];\n\n for (let i = 0; i < data.length; i++) {\n const previousValue = i > 0 && data[i - 1];\n const currentValue = data[i];\n const nextValue = i < data.length - 1 && data[i + 1];\n\n /**\n * We want to capture colour changes but if a value has the same value\n * of both of its neighbours, we can skip it.\n */\n if (currentValue === previousValue && currentValue === nextValue)\n continue;\n\n gradient.push(`${getBackgroundColor(currentValue, max)} ${100 / data.length * i}%`);\n }\n\n return `linear-gradient(to right, ${gradient.join(',')})`;\n}\n\nexport function EngagementHeatMapLegend(): JSX.Element {\n const max = Math.max(...LEGEND_VALUES);\n const legendSquareWidthPercentage = 100 / LEGEND_VALUES.length;\n\n return (\n <div className='d-flex justify-content-between w-100'>\n <Text namespace={namespace} phrase='less' />\n <div className={`d-flex mx-1 flex-grow-1 ${styles.legend}`}>\n {LEGEND_VALUES.map((val, idx) => (\n <div\n key={idx}\n style={{\n width: `${legendSquareWidthPercentage}%`,\n backgroundColor: getBackgroundColor(val, max)\n }}\n />\n ))}\n </div>\n <Text namespace={namespace} phrase='more' />\n </div>\n );\n}\n\ninterface EngagementHeatMapProps {\n engagement: Engagement;\n max?: number;\n className?: string;\n}\n\nexport function EngagementHeatMap(props: EngagementHeatMapProps): JSX.Element {\n const heatMap = getFullHeatMap(props.engagement);\n const max = props.max ?? Math.max(...heatMap);\n\n return (\n <div\n className={`border rounded ${styles.heatMap} ${props.className ?? ''}`}\n style={{\n background: getGradient(heatMap, max)\n }}\n />\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"icon\":\"sAmpy\",\"count\":\"faDs4\"};","import React from 'react';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\n\nimport styles from './insight-card.scss';\n\ninterface InsightCardProps extends React.PropsWithChildren {\n svgName: string;\n svgClassName: string;\n title: string;\n subtitle?: string;\n count?: number;\n}\n\nexport function InsightCard(props: InsightCardProps) {\n return (\n <section className='d-flex flex-column border rounded p-3 h-100'>\n <div className={`d-flex ${props.subtitle ? 'align-items-top' : 'align-items-center'} mb-2`}>\n <div className={`${styles.icon} ${props.svgClassName} rounded-circle d-flex justify-content-center align-items-center`}>\n <SvgContainer svgName={props.svgName} size={SvgContainerSize.Small} />\n </div>\n <div className='d-flex flex-column ms-2'>\n <h2 className='h6 mb-0'>{props.title}</h2>\n </div>\n {typeof props.count === 'number' && (\n <div className={`${styles.count} d-flex justify-content-center align-items-center bg-light rounded-circle ms-auto`}>\n {props.count}\n </div>\n )}\n </div>\n {props.children}\n </section>\n );\n}","export const CHART_FONT_STYLES = {\n fontSize: '12px',\n fontFamily: `\"Inter\",-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,\"Noto Sans\",\"Liberation Sans\",sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\"`,\n fontWeight: '400',\n color: '#313543'\n};","import { Engagement } from 'libs/shared/interfaces';\n\n/**\n * The heat map in the API response won't contain trailing zeros so we need to add those\n * in manually.\n */\nexport function getFullHeatMap(engagement: Engagement): number[] {\n const videoDuration = engagement.videoDuration || 0;\n \n return (new Array(Math.ceil(videoDuration))).fill(null).map((t, idx) => engagement?.heatMap[idx] || 0);\n}\n\nexport function getEngagementRate(engagement: Engagement[]): number {\n return engagement?.reduce((prev, next) => prev + next.engagementRate / engagement.length, 0);\n}","export const DragOverlayStyles = { opacity: '0.8', cursor: 'grabbing' };","import React from 'react';\nimport { PluginHook, useBlockLayout, useFilters, useFlexLayout, useGlobalFilter, useRowSelect, useSortBy } from 'react-table';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\n\ninterface PluginOptions {\n allowFiltering?: boolean;\n allowGlobalFiltering?: boolean;\n layout?: 'flex' | 'block';\n}\n\nexport function getPlugins<T extends HashObject>(props: PluginOptions): PluginHook<T>[] {\n let plugins: PluginHook<T>[] = [\n useSortBy,\n useRowSelect,\n props.layout === 'flex' ? useFlexLayout : useBlockLayout\n ];\n\n if (props.allowFiltering)\n plugins = [\n ...plugins,\n useFilters\n ];\n\n if (props.allowGlobalFiltering)\n plugins = [\n ...plugins,\n useGlobalFilter\n ];\n\n return plugins;\n}\n\nexport function getSelectedRowIds(ids: string[]): Record<string, boolean> {\n const idHash: Record<string, boolean> = {};\n\n ids.forEach(id => idHash[id] = true);\n\n return idHash;\n}\n\ninterface TableScrollState {\n canScrollLeft: boolean;\n canScrollRight: boolean;\n}\n\nfunction calculateScrollState(ref: React.MutableRefObject<HTMLDivElement>): TableScrollState {\n const canScrollLeft = ref.current?.scrollLeft > 0;\n const canScrollRight = (ref.current?.scrollLeft + 1) < ref.current?.scrollWidth - ref.current?.clientWidth;\n\n return { canScrollLeft, canScrollRight };\n}\n\ninterface UseTableScroll {\n ref: (el: HTMLDivElement) => void;\n scrollState: TableScrollState;\n scroll: (scrollBy: number) => void;\n}\n\nexport function useTableScroll(): UseTableScroll {\n const elRef = React.useRef<HTMLDivElement>(null);\n const [ scrollState, setScrollState ] = React.useState<TableScrollState>(calculateScrollState(elRef));\n\n function onScroll(): void {\n setScrollState(calculateScrollState(elRef));\n }\n\n function scroll(scrollBy: number): void {\n elRef.current?.scrollBy({ left: scrollBy, top: 0, behavior: 'smooth' });\n }\n\n const throttledOnScroll = FunctionHelper.throttle(onScroll, 200);\n\n const ref = React.useCallback((el: HTMLDivElement) => {\n if (elRef.current) {\n elRef.current?.removeEventListener('scroll', throttledOnScroll);\n }\n\n if (el) {\n setScrollState(calculateScrollState(elRef));\n el.addEventListener('scroll', throttledOnScroll);\n }\n\n elRef.current = el;\n }, []);\n\n React.useEffect(() => {\n if (elRef?.current) {\n setScrollState(calculateScrollState(elRef));\n }\n }, [elRef]);\n\n return { ref, scrollState, scroll };\n}","// extracted by mini-css-extract-plugin\nexport default {\"sortIndicator\":\"gFhu0\",\"scrollContainer\":\"sWUp9\",\"scrollbarTrack\":\"Vn2qM\"};","import React from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\nimport {\n Cell,\n Column as BaseColumn,\n HeaderGroup,\n HeaderProps as BaseHeaderProps,\n IdType,\n Row,\n SortingRule,\n TableOptions,\n TableRowProps,\n useTable } from 'react-table';\nimport { DragEndEvent } from '@dnd-kit/core';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SortableContainerWrapper } from 'libs/shared/components/sortable/SortableContainerWrapper';\nimport { PropsWithSortableItemProps, SortableItemWrapper } from 'libs/shared/components/sortable/SortableItemWrapper';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { WidgetButton, WidgetButtonDirection } from 'libs/shared/components/widgets/widget-button/WidgetButton';\nimport { DragOverlayStyles } from 'libs/shared/constants/DragOverlayStyles';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { getPlugins, getSelectedRowIds, useTableScroll } from './TableUtils';\n\nimport styles from './table.scss';\n\nexport interface TableTheme {\n table?: string;\n header?: string;\n headerRow?: string;\n headerCell?: string;\n body?: string;\n row?: string | ((row: Row<any>) => string);\n selectedRow?: string;\n cell?: string | ((row?: Row<any>, cell?: Cell<any, any>) => string);\n sortIndicator?: string;\n}\n\nexport type HeaderProps<T extends HashObject> = BaseHeaderProps<T> & {\n renderSortIndicator: () => void;\n}\n\nexport type Column<T extends HashObject> = BaseColumn<T> & {\n hideSortIndicator?: boolean;\n}\n\ninterface SortIndicatorProps<T extends HashObject> {\n column: HeaderGroup<T>;\n theme?: TableTheme;\n}\n\nfunction SortIndicator<T extends HashObject>(props: SortIndicatorProps<T>): JSX.Element {\n if (!props.column.canSort)\n return <></>;\n\n return (\n <span\n className={\n `${styles.sortIndicator}\n ${!props.column.isSorted ? 'text-secondary' : ''}\n ${props.theme?.sortIndicator ?? ''}`\n }\n >\n <SvgContainer\n svgName={(props.column.isSortedDesc || !props.column.isSorted)\n ? cvSvgLibrary.ArrowRight\n : cvSvgLibrary.ArrowLeft\n }\n size={SvgContainerSize.Small}\n />\n </span>\n );\n}\n\ninterface BaseTableProps<T extends HashObject> {\n /**\n * Must be memoized.\n */\n data: T[];\n\n /**\n * Must be memoized.\n * \n * For documentation on Column Options, see https://react-table.tanstack.com/docs/api/useTable#column-options\n */\n columns: Column<T>[];\n\n theme?: TableTheme;\n\n onSelectRow?: (row: Row<T>) => void;\n\n onSelectCell?: (cell: Cell<T>) => void;\n\n onRowMouseOver?: (row: Row<T>) => void;\n\n onRowMouseLeave?: (row: Row<T>) => void;\n\n allowSelectMultipleRows?: boolean;\n\n initialSelectedRowIds?: string[];\n\n getRowId?: (row: T) => string;\n\n getRowAppLink?: (row: Row<T>) => Core.AppLink;\n\n enableSort?: boolean;\n\n manualSort?: boolean;\n\n onSort?: (sortingRule: SortingRule<T>[]) => void;\n \n // Opt-in to utilise react-table's useFilter hook.\n allowFiltering?: boolean;\n\n // Opt-in to utilise react-table's useGlobalFilter hook.\n allowGlobalFiltering?: boolean;\n\n // Use either a flex layout or a block layout. Default is flex.\n layout?: 'flex' | 'block';\n\n // Used by useGlobalFilter hook, needs to be enabled by prop above.\n globalFilter?: string;\n\n // Set initial state of hidden columns in react-table.\n hiddenColumns?: IdType<T>[];\n\n // Determine whether hidden columns should be preserved on a table update event.\n autoResetHiddenColumns?: boolean;\n\n // Determine whether sort order state should be preserved on a table update event.\n autoResetSortBy?: boolean;\n\n // Determine whether rows are sortable by drag and drop\n enableSortableRows?: boolean;\n\n onSortingRowsEnd?: (event: DragEndEvent) => void;\n\n // Set initial state of sorting in react-table\n initialSortBy?: SortingRule<T>[];\n}\n \ntype SortableRowProps = PropsWithSortableItemProps<TableRowProps>;\n\nfunction BaseTable<T extends HashObject>(props: BaseTableProps<T>): JSX.Element {\n const tableOptions: TableOptions<T> = {\n columns: props.columns,\n data: props.data,\n disableSortBy: !props.enableSort,\n manualSortBy: props.manualSort,\n autoResetHiddenColumns: props.autoResetHiddenColumns,\n autoResetSortBy: props.autoResetSortBy,\n initialState: {\n sortBy: props.initialSortBy || []\n }\n };\n\n if (props.initialSelectedRowIds)\n tableOptions.initialState = { selectedRowIds: getSelectedRowIds(props.initialSelectedRowIds) };\n\n if (props.getRowId)\n tableOptions.getRowId = props.getRowId;\n\n const {\n getTableProps,\n getTableBodyProps,\n headerGroups,\n rows,\n prepareRow,\n toggleAllRowsSelected,\n setGlobalFilter,\n setHiddenColumns,\n state: { sortBy }\n } = useTable<T>(tableOptions, ...getPlugins<T>({ ...props }));\n\n function getTableRowsClass(row: Row<T>) {\n let className = FunctionHelper.isFunction(props.theme?.row)\n ? props.theme.row(row)\n : props.theme?.row ?? '';\n\n if (row.isSelected && props.theme?.selectedRow)\n className += ` ${props.theme?.selectedRow}`;\n\n if (props.onSelectRow)\n className += ' cursor-pointer';\n\n if (props.enableSortableRows)\n className += ' cursor-grab';\n\n return className;\n }\n\n function renderTableRows(): JSX.Element[] {\n return rows.map(row => {\n prepareRow(row);\n \n const className = getTableRowsClass(row);\n const rowAppLink = !!props.getRowAppLink && props.getRowAppLink(row);\n\n function onClickRow(): void {\n if (!props.onSelectRow)\n return;\n\n if (!props.allowSelectMultipleRows)\n toggleAllRowsSelected(false);\n \n props.onSelectRow(row);\n row.toggleRowSelected(true);\n }\n\n function getSortableProps(props: TableRowProps | PropsWithSortableItemProps<TableRowProps>, ref?: any) {\n if ('dragAttributes' in props && 'dragListeners' in props) {\n return {\n ...props.dragAttributes,\n ...props.dragListeners,\n 'aria-roledescription': 'Sortable row',\n ref\n };\n }\n\n return {};\n }\n\n function renderRow(props: TableRowProps | PropsWithSortableItemProps<TableRowProps>, ref?: any): JSX.Element {\n const sortableProps = getSortableProps(props, ref);\n\n if (rowAppLink) {\n return (\n <div\n role='row'\n key={row.id}\n >\n <AppLink\n {...props}\n {...sortableProps}\n className={className}\n appLink={rowAppLink}\n >\n {renderCells(row)}\n </AppLink>\n </div>\n );\n }\n\n return (\n <div\n {...props}\n {...sortableProps}\n key={row.id}\n role='row'\n className={className}\n onClick={onClickRow}\n >\n {renderCells(row)}\n </div>\n );\n }\n\n const rowProps = row.getRowProps();\n\n if (props.enableSortableRows) {\n return (\n <SortableItemWrapper\n id={row.original.id}\n key={row.id}\n childProps={rowProps}\n childComponent={React.forwardRef(\n (props: SortableRowProps, ref: React.LegacyRef<HTMLDivElement>) => (renderRow(props, ref))\n )}\n />\n );\n }\n\n return renderRow(rowProps);\n });\n }\n\n function getDragOverlayClassName(theme: TableTheme): string {\n let className = 'g-0 ';\n\n if (theme)\n className += theme.row;\n\n return className;\n }\n\n function getDragOverlay(id: string) {\n const rowIndex = rows.findIndex(item => item.original.id === id);\n const row = rows[rowIndex];\n \n return (\n <div\n {...props}\n className={getDragOverlayClassName(props.theme)}\n style={DragOverlayStyles}\n >\n {renderCells(row)}\n </div>\n );\n }\n\n function getCellClassName(row: Row<T>, cell: Cell<T>): string {\n let cellClassName = '';\n\n if (typeof props.theme?.cell === 'function')\n cellClassName = props.theme.cell(row, cell);\n\n if (typeof props.theme?.cell === 'string')\n cellClassName = props.theme.cell;\n\n if (props.onSelectCell)\n cellClassName += ' cursor-pointer';\n\n return cellClassName;\n }\n\n function renderCells(row: Row<T>): JSX.Element[] {\n return row.cells.map(cell => {\n const cellClassName = getCellClassName(row, cell);\n\n function onClickCell(): void {\n props.onSelectCell && props.onSelectCell(cell);\n }\n\n return (\n <div key={cell.column.id} {...cell.getCellProps()} className={cellClassName} onClick={onClickCell} >\n {cell.render('Cell')}\n </div>\n );\n });\n }\n\n React.useEffect(() => {\n if (!props.onSort)\n return;\n\n props.onSort(sortBy);\n }, [sortBy]);\n\n React.useEffect(() => {\n if (!props.globalFilter)\n return;\n\n setGlobalFilter(props.globalFilter);\n }, [props.globalFilter]);\n\n React.useEffect(() => {\n if (!props.hiddenColumns)\n return;\n\n setHiddenColumns(props.hiddenColumns);\n }, [props.hiddenColumns && props.hiddenColumns.length]);\n\n return (\n <div {...getTableProps()} className={props.theme?.table ?? ''}>\n <div className={props.theme?.header ?? ''}>\n {headerGroups.map(headerGroup => (\n <div {...headerGroup.getHeaderGroupProps()} className={props.theme?.headerRow ?? ''}>\n {headerGroup.headers.map(column => (\n <div {...column.getHeaderProps(column.getSortByToggleProps())} className={props.theme?.headerCell ?? ''}>\n {column.render('Header', { renderSortIndicator: () => <SortIndicator column={column} theme={props.theme} /> })}\n {!(column as Column<T>).hideSortIndicator &&\n <SortIndicator column={column} theme={props.theme} />\n }\n </div>\n ))}\n </div>\n ))}\n </div>\n <div {...getTableBodyProps()} className={props.theme?.body ?? ''}>\n { props.enableSortableRows ? (\n <SortableContainerWrapper\n ids={rows.map(row => row.original.id)}\n getDragOverlay={getDragOverlay}\n onSortEnd={props.onSortingRowsEnd}\n >\n {renderTableRows()}\n </SortableContainerWrapper>\n ) : (\n renderTableRows()\n )}\n </div>\n </div>\n );\n}\n\ninterface TableProps<T extends HashObject> extends BaseTableProps<T> {\n enableSlider?: boolean;\n scrollIncrement?: number;\n scrollContainerClassName?: string;\n scrollable?: boolean;\n initialSortBy?: SortingRule<T>[];\n}\n\nTable.defaultProps = {\n scrollIncrement: 250,\n scrollable: false,\n layout: 'flex'\n};\n\nexport function Table<T extends HashObject>(props: TableProps<T>): JSX.Element {\n const { enableSlider, scrollIncrement, scrollable, ...tableProps } = props;\n\n const { ref, scrollState, scroll } = useTableScroll();\n\n if (scrollable) {\n return (\n <Scrollbars\n renderTrackHorizontal={() => <div className={styles.scrollbarTrack} />}\n autoHeightMax={10000}\n autoHeight\n >\n <BaseTable {...tableProps} />\n </Scrollbars>\n );\n }\n\n if (!enableSlider)\n return <BaseTable {...tableProps} />;\n\n function onClickScroll(direction: 'left' | 'right'): void {\n scroll(scrollIncrement * (direction === 'right' ? 1 : -1));\n }\n\n return (\n <div className='mx-n4 overflow-x-hidden overflow-y-hidden'>\n <div className='px-4'>\n <div className='position-relative'>\n <WidgetButton\n direction={WidgetButtonDirection.Left}\n onClick={() => onClickScroll('left')}\n hide={!scrollState.canScrollLeft}\n />\n <div className={`${styles.scrollContainer} ${props.scrollContainerClassName}`} ref={ref}>\n <BaseTable {...tableProps } />\n </div>\n <WidgetButton\n direction={WidgetButtonDirection.Right}\n onClick={() => onClickScroll('right')}\n hide={!scrollState.canScrollRight}\n />\n </div>\n </div>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"heatMap\":\"rwDjh\",\"avatarContainer\":\"kW4ZM\"};","import React from 'react';\nimport { Column, ColumnInstance, Row } from 'react-table';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EngagementHeatMap } from 'libs/shared/apps/analytics/components/engagement-heat-map/EngagementHeatMap';\nimport { anonymiseUserName } from 'libs/shared/apps/analytics/utils/AnonymiseUserUtils';\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { PercentageIndicator, PercentageIndicatorLayout } from 'libs/shared/components/percentage-indicator/PercentageIndicator';\nimport { Engagement } from 'libs/shared/interfaces';\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport styles from './engagement-table.scss';\n\nconst namespace = 'shared.engagementTable';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst EMPTY_ENGAGEMENT: Partial<Engagement> = {\n heatMap: [],\n engagementRate: 0,\n viewCount: 0\n};\n\ninterface CellWrapperProps {\n className?: string;\n}\n\nfunction CellWrapper(props: React.PropsWithChildren<CellWrapperProps>): JSX.Element {\n return (\n <div className={`${props.className ?? ''}`}>\n {props.children}\n </div>\n );\n}\n\ninterface HeaderCellProps {\n column: ColumnInstance<EngagementTableData>;\n phraseKey: string;\n}\n\nfunction HeaderCell(props: HeaderCellProps): JSX.Element {\n return (\n <CellWrapper className={`d-inline-block ${props.column.isSorted ? 'fw-bold' : ''}`}>\n {getPhrase(props.phraseKey)}\n </CellWrapper>\n );\n}\n\nexport interface EngagementTableData extends Engagement {\n user: AnonUser;\n}\n\nfunction getMaxHeatMapValue(engagement: Engagement[]): number {\n let max = 0;\n\n engagement.forEach(e => {\n const localMax = Math.max(...e.heatMap);\n\n if (localMax > max)\n max = localMax;\n });\n\n return max;\n}\n\nfunction getUsersName(user: AnonUser, anonymiseUsers: boolean) {\n const fullName = anonymiseUserName(user, anonymiseUsers);\n const nameParts = fullName.split(' ').filter(n => !!n);\n\n return {\n name: nameParts[0],\n surname: nameParts.slice(1).join(' ')\n };\n}\n\ninterface EngagementColumnProps {\n engagement: Engagement[],\n imageCdnUrl: string;\n anonymiseUsers: boolean;\n}\n\nexport function useGetColumns(props: EngagementColumnProps): Column<EngagementTableData>[] {\n return React.useMemo(() => {\n const maxHeatMapValue = getMaxHeatMapValue(props.engagement);\n\n return [\n {\n Header: ({ column }) => <HeaderCell column={column} phraseKey='name' />,\n width: 22,\n accessor: 'user',\n sortType: (rowA: Row<EngagementTableData>, rowB: Row<EngagementTableData>) => {\n const nameA = anonymiseUserName(rowA.values.user, props.anonymiseUsers);\n const nameB = anonymiseUserName(rowB.values.user, props.anonymiseUsers);\n\n return nameA > nameB ? 1 : -1;\n },\n Cell: ({ value }) => {\n const { name, surname } = getUsersName(value, props.anonymiseUsers);\n return (\n <CellWrapper className='d-flex align-items-center h-100'>\n <span className={styles.avatarContainer}>\n <Avatar\n imageCdnUrl={props.imageCdnUrl}\n initials={UserHelper.getInitials(name, surname)}\n imageUrl={!props.anonymiseUsers && value?.avatar?.url}\n showAnonymousUser={!props.anonymiseUsers && (!value || !!value.sessionId)}\n />\n </span>\n <span className={'ms-2 clamp-1'}>\n {name} {surname}\n </span>\n </CellWrapper>\n );\n }\n },\n {\n Header: ({ column }) => <HeaderCell column={column} phraseKey='views' />,\n accessor: 'viewCount',\n width: 15,\n sortType: 'basic', // Default is 'alphanumeric' which would treat the numbers as strings\n sortDescFirst: true,\n Cell: ({ value }) => (\n <CellWrapper className='d-flex align-items-center h-100'>\n <div>{value}</div>\n </CellWrapper>\n )\n },\n {\n Header: ({ column }) => <HeaderCell column={column} phraseKey='engagement' />,\n accessor: 'engagementRate',\n width: 20,\n sortType: 'basic', // Default is 'alphanumeric' which would treat the numbers as strings\n sortDescFirst: true,\n Cell: ({ value }) => (\n <CellWrapper className='w-33'>\n <PercentageIndicator\n percentage={value}\n layout={PercentageIndicatorLayout.LabelBefore}\n />\n </CellWrapper>\n )\n },\n {\n Header: ({ column }) => <HeaderCell column={column} phraseKey='heatMap' />,\n accessor: 'heatMap',\n width: 48,\n disableSortBy: true,\n Cell: ({ row: { original } }) => (\n <CellWrapper className='d-flex align-items-center h-100'>\n <EngagementHeatMap\n engagement={original}\n max={maxHeatMapValue}\n className={`${styles.heatMap} flex-grow-1`}\n />\n </CellWrapper>\n )\n }\n ];\n }, [props.anonymiseUsers]);\n}\n\nexport function useGetTableData(\n engagement: Engagement[],\n users: AnonUser[],\n classroomStudents?: AnonUser[]\n): EngagementTableData[] {\n return React.useMemo(() => {\n if (!engagement?.length || !users?.length)\n return [];\n\n const data: EngagementTableData[] = [];\n\n const userIdSet = new Set<string>();\n engagement.forEach(e => {\n const user = users.find(u => {\n if (u.id && u.id === e.userId) {\n userIdSet.add(u.id);\n return true;\n }\n\n if (u.sessionId && u.sessionId === e.sessionId)\n return true;\n\n return false;\n });\n\n data.push({ ...e, user });\n });\n\n if (classroomStudents?.length) {\n const students = classroomStudents\n .filter(s => !userIdSet.has(s.id))\n .map(user => ({ ...EMPTY_ENGAGEMENT, user } as EngagementTableData));\n data.push(...students);\n }\n\n return data;\n }, [users?.length]);\n}","import React from 'react';\n\nimport { Table, TableTheme } from 'libs/shared/components/table/Table';\nimport { Engagement } from 'libs/shared/interfaces';\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\n\nimport { useGetColumns, useGetTableData } from './EngagementTableUtils';\n\nconst theme: TableTheme = {\n table: 'bg-white rounded px-0',\n header: 'border-bottom',\n headerCell: 'm-3',\n cell: 'mx-3 my-2'\n};\n\ninterface EngagementTableProps {\n engagement: Engagement[];\n imageCdnUrl: string;\n users?: AnonUser[];\n classroomStudents?: AnonUser[];\n anonymiseUsers: boolean;\n border?: boolean;\n enableSort?: boolean;\n}\n\nexport function EngagementTable(props: EngagementTableProps): JSX.Element {\n const columns = useGetColumns({\n engagement: props.engagement,\n imageCdnUrl: props.imageCdnUrl,\n anonymiseUsers: props.anonymiseUsers\n });\n\n const data = useGetTableData(props.engagement, props.users, props.classroomStudents);\n\n if (!data.length)\n return <></>;\n\n return (\n <Table\n columns={columns}\n data={data}\n theme={{\n ...theme,\n table: props.border ? `${theme.table} border` : theme.table\n }}\n enableSort={props.enableSort}\n />\n );\n}","import React from 'react';\n\nimport { PercentageIndicator, PercentageIndicatorLayout } from './PercentageIndicator';\n\ninterface PartialPercentageIndicatorProps {\n layout: PercentageIndicatorLayout;\n className?: string;\n}\n\nexport function PartialPercentageIndicator(props: PartialPercentageIndicatorProps): JSX.Element {\n return (\n <PercentageIndicator\n layout={props.layout}\n className={props.className}\n percentage={0}\n customLabel='--%'\n />\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { InsightCard } from 'libs/shared/apps/analytics/components/insight-card/InsightCard';\nimport { getEngagementRate } from 'libs/shared/apps/analytics/utils/EngagementUtils';\nimport { PartialPercentageIndicator } from 'libs/shared/components/percentage-indicator/PartialPercentageIndicator';\nimport { PercentageIndicator, PercentageIndicatorLayout } from 'libs/shared/components/percentage-indicator/PercentageIndicator';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Engagement } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'shared.insightAmountWatched';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InsightAmountWatchedProps {\n engagement: Engagement[];\n}\n\nexport function InsightAmountWatched(props: InsightAmountWatchedProps) {\n const engagementRate = getEngagementRate(props.engagement);\n const percentage = Math.round(engagementRate * 100);\n\n return (\n <InsightCard\n title={getPhrase('title')}\n svgName={cvSvgLibrary.Timer}\n svgClassName='bg-light-green text-green'\n >\n <div className='d-flex flex-column align-items-center my-auto gap-2'>\n {!!props.engagement &&\n <>\n <PercentageIndicator\n percentage={engagementRate}\n layout={PercentageIndicatorLayout.LabelInside}\n />\n <p className='text-center'>\n {typeof engagementRate === 'number'\n ? <Text namespace={namespace} phrase='everyoneWatched' options={{ percentage }} />\n : <Text namespace={namespace} phrase='notWatched' />\n }\n </p>\n </>\n }\n {!props.engagement &&\n <>\n <PartialPercentageIndicator layout={PercentageIndicatorLayout.LabelInside} />\n </>\n }\n </div>\n </InsightCard>\n );\n}","const CHART_COLOURS = [\n '#FF9300', // Pizazz\n '#38A2E8', // Picton Blue\n '#7A76E8', // Portage\n '#B679C7', // East Side\n '#F7847B', // Froly\n '#D9584F', // Red (Not in the Primary palette)\n '#FFCD52', // Yellow (Not in the Primary Palette)\n '#5DC786', // Emerald\n '#40BCC3', // Perolous\n '#40C2BB' // Puerto rico\n];\n\nexport function mixinSeriesColours<T>(data: T[]): T[] {\n return data.map((d, idx) => ({\n ...d,\n color: CHART_COLOURS[idx % CHART_COLOURS.length]\n }));\n}","import React from 'react';\nimport Highcharts from 'highcharts';\nimport HighchartsReact from 'highcharts-react-official';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { InsightCard } from 'libs/shared/apps/analytics/components/insight-card/InsightCard';\nimport { CHART_FONT_STYLES } from 'libs/shared/apps/analytics/constants/ChartStyles';\nimport { VideoViewEventResponse } from 'libs/shared/apps/analytics/interfaces/VideoViewEvent';\nimport { getTotalEventCount, groupEvents, sortByYearGroup } from 'libs/shared/apps/analytics/utils/SharedUserActivityPieChartUtils';\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'shared.insightTotalViews';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst STATIC_CHART_OPTIONS: Highcharts.Options = {\n title: {\n text: null\n },\n credits: {\n enabled: false\n },\n chart: {\n backgroundColor: 'transparent',\n spacing: [ 0, 0, 0, 0 ]\n },\n legend: {\n itemStyle: CHART_FONT_STYLES,\n itemDistance: 8\n },\n plotOptions: {\n pie: {\n allowPointSelect: true,\n cursor: 'pointer',\n dataLabels: {\n enabled: false\n },\n showInLegend: true,\n borderWidth: 0,\n size: '80%'\n }\n }\n};\n\ninterface InsightTotalViewsProps {\n events: VideoViewEventResponse;\n emptyStateImage: string;\n}\n\nexport function InsightTotalViews(props: InsightTotalViewsProps) {\n const chartData = sortByYearGroup(groupEvents(props.events, 'yearGroupCount', []));\n const totalViews = getTotalEventCount(chartData);\n\n function getChartOptions(\n data: Highcharts.PointOptionsObject[]\n ): Highcharts.Options {\n return {\n ...STATIC_CHART_OPTIONS,\n series: [{\n type: 'pie',\n name: getPhrase('title'),\n data\n }]\n };\n }\n\n return (\n <InsightCard\n title={getPhrase('title')}\n // Replace with ultra marine + light colour\n svgClassName='bg-light-blue text-blue'\n // Add visibility icon \n svgName={cvSvgLibrary.VisibleOn}\n >\n {chartData?.length ? (\n <>\n <p className='mb-0'><Text namespace={namespace} phrase='totalViews' options={{ totalViews }} /></p>\n\n <div className='d-flex justify-content-center h-75'>\n <HighchartsReact\n highcharts={Highcharts}\n options={getChartOptions(chartData)}\n containerProps={{\n className: `w-100`\n }}\n />\n </div>\n </>\n ) : (\n <EmptyState className='pt-0 my-auto'>\n <EmptyState.Image src={props.emptyStateImage} className='w-75 h-auto'></EmptyState.Image>\n <EmptyState.Heading className='h4'><Text namespace={namespace} phrase='noViews' /></EmptyState.Heading>\n <EmptyState.Info className='w-100'><Text namespace={namespace} phrase='notWatched' /></EmptyState.Info>\n </EmptyState>\n )}\n </InsightCard>\n );\n}","import { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { HashObject } from 'libs/analytics/interfaces';\n\nimport { BaseAnalyticsEventResponse, GroupedAnalyticsCount } from 'libs/shared/apps/analytics/interfaces/BaseAnalyticsEvent';\nimport { UnionEventResponse } from 'libs/shared/apps/analytics/interfaces/UnionEvent';\nimport { VideoViewEventResponse } from 'libs/shared/apps/analytics/interfaces/VideoViewEvent';\nimport { mixinSeriesColours } from 'libs/shared/apps/analytics/utils/ChartColourUtils';\n\ntype EventResponseGroupByAttributes = keyof Pick<VideoViewEventResponse, 'contentTypeCount'>\n | keyof Pick<BaseAnalyticsEventResponse, 'userTypeCount' | 'yearGroupCount'>;\n\nexport function groupEvents(\n events: UnionEventResponse,\n groupBy: EventResponseGroupByAttributes,\n groupsToOmit?: string[],\n getSeriesName?: (group: string) => string\n): Highcharts.PointOptionsObject[] {\n const groups: HashObject<number> = {};\n\n const eventCounts = events[groupBy as keyof UnionEventResponse] as GroupedAnalyticsCount[];\n\n eventCounts?.forEach(ev => {\n const name = ev.name || 'Unknown';\n\n if (!name || groupsToOmit?.includes(name.toLowerCase()))\n return;\n\n groups[name] = groups[name] ?? 0;\n groups[name] += ev.count;\n });\n\n return mixinSeriesColours(ArrayHelper.sortBy(Object.keys(groups).map(group => ({\n name: getSeriesName ? getSeriesName(group) : group,\n y: groups[group],\n type: 'pie'\n })), 'name'));\n}\n\nexport function sortByYearGroup(data: Highcharts.PointOptionsObject[]) {\n const staffIndex = data.findIndex(group => group.name === 'Staff');\n\n // Move Staff to last index\n if (staffIndex > -1) {\n const [staffObject] = data.splice(staffIndex, 1);\n\n data.push(staffObject);\n }\n return data.sort((a, b) => {\n const numA = parseInt((a.name as string).match(/\\d+/)?.[0]);\n const numB = parseInt((b.name as string).match(/\\d+/)?.[0]);\n return numA - numB;\n });\n}\n\nexport function getTotalEventCount(data?: Highcharts.PointOptionsObject[]): number | null {\n return data?.reduce((a, b) => a + b.y, 0) ?? null;\n}","// extracted by mini-css-extract-plugin\nexport default {\"partialInsights\":\"nKLWa\",\"videoContainer\":\"WF2iA\"};","import React from 'react';\n\nimport styles from './partial-insights-heatmap.scss';\n\nexport function PartialInsightsHeatmap() {\n return (\n <div>\n <div className='row g-3 mb-3'>\n <div className='col'>\n <div className={`${styles.partialInsights} rounded partial-loading-background`}></div>\n </div>\n <div className='col'>\n <div className={`${styles.partialInsights} rounded partial-loading-background`}></div>\n </div>\n <div className={styles.videoContainer}>\n <div className={`${styles.partialInsights} rounded partial-loading-background`}></div>\n </div>\n </div>\n\n <div className='row g-3 mb-5'>\n <div className='col-12'>\n <div className={`${styles.partialInsights} rounded partial-loading-background`}></div>\n </div>\n </div>\n </div>\n );\n}","import videojs, { VideoJsPlayer } from 'video.js';\n\nconst MenuItem = videojs.getComponent('MenuItem');\n\ninterface EngagementOverlayMenuItemOptions extends videojs.MenuItemOptions {\n overlayVisible: boolean\n}\n\nexport class EngagementOverlayMenuItem extends MenuItem {\n private toggleEl: Element;\n private overlayVisible: boolean;\n\n /**\n * Because we want to bind our listener in createEl\n * and createEl runs in super. We store if we've bounud\n * our handler, so we only call bind once and \n * the call to removeEventListener will still work\n */\n private handlerBound: boolean;\n\n constructor(player: VideoJsPlayer, options: EngagementOverlayMenuItemOptions) {\n super(player, options);\n\n this.overlayVisible = options.overlayVisible;\n this.toggle(this.overlayVisible);\n }\n\n public handleToggle(): void {\n this.toggle(!this.overlayVisible);\n }\n\n private toggle(state: boolean): void {\n state ? this.toggleOn() : this.toggleOff();\n }\n\n private toggleOn(): void {\n videojs.dom.addClass(this.toggleEl, 'on');\n this.overlayVisible = true;\n this.player().engagementOverlayPlugin().toggleOverlay(this.overlayVisible);\n this.player().addClass('cv-reports-player-overlay-visible');\n }\n\n private toggleOff(): void {\n videojs.dom.removeClass(this.toggleEl, 'on');\n this.overlayVisible = false;\n this.player().engagementOverlayPlugin().toggleOverlay(this.overlayVisible);\n this.player().removeClass('cv-reports-player-overlay-visible');\n }\n\n /**\n * Because we extend MenuItem which will close the menu by default\n * we need to halt the event propogation here\n */\n public handleClick(event: videojs.EventTarget.Event): void {\n event.stopImmediatePropagation();\n }\n\n public createEl(tagName?: string, properties?: any, attributes?: any): HTMLLIElement {\n /**\n * Bind our event listener only once\n * see the comment where handlerBound is defined\n */\n if (!this.handlerBound) {\n this.handleToggle = this.handleToggle.bind(this);\n this.handlerBound = true;\n }\n\n if (this.toggleEl)\n this.toggleEl.removeEventListener('click', this.handleToggle);\n\n this.toggleEl = videojs.dom.createEl('div', {\n className: `custom-toggle custom-toggle-info toggle-option float-end`,\n innerHTML: '<span class=\"handle\"></span></div>'\n });\n this.toggleEl.addEventListener('click', this.handleToggle);\n\n const innerHTML = `\n <span class=\"vjs-menu-item-text\">Heat Map</span>\n <span class=\"cv-toggle-container\"></span>`;\n\n const el = super.createEl(tagName, {\n className: 'vjs-menu-item cv-cog-menu-item',\n innerHTML\n }, attributes);\n\n /**\n * Indexing into the child this way is only safe to do because\n * we know that the el only has two children\n */\n el.children[1].appendChild(this.toggleEl);\n\n return el;\n }\n}\n\nvideojs.registerComponent('EngagementOverlayMenuItem', EngagementOverlayMenuItem);\n","import React from 'react';\n\nimport { InteractionLabel } from 'libs/shared/components/interactive-questions/InteractionLabel';\nimport { Interactive } from 'libs/shared/interfaces';\n\nconst MAX_INTERACTIONS_TO_SHOW = 3;\n\ninterface TimepointInteractionsProps {\n interactive: Interactive;\n time: number;\n}\n\nexport function TimepointInteractions(props: TimepointInteractionsProps): JSX.Element {\n const timepoint = props.interactive.timepoints.find(t => {\n const timepointTime = t.visibleAt / 1000;\n \n return Math.floor(props.time) === Math.floor(timepointTime)\n || Math.ceil(props.time) === Math.ceil(timepointTime);\n });\n\n if (!timepoint?.interactions?.length)\n return <></>;\n\n const interactions = timepoint.interactions.length > MAX_INTERACTIONS_TO_SHOW\n ? timepoint.interactions.slice(0, MAX_INTERACTIONS_TO_SHOW - 1)\n : timepoint.interactions;\n\n const hiddenInteractions = timepoint.interactions.length - interactions.length;\n\n return (\n <div className='d-flex justify-content-end ms-2'>\n {interactions.map((i, idx) => (\n <InteractionLabel\n key={idx}\n interaction={i}\n showQuestion={false}\n iconClassName='ms-1'\n />\n ))}\n {!!hiddenInteractions &&\n <div\n className={'interaction-type-icon d-flex justify-content-center'\n + ' align-items-center border border-dark text-body ms-1'}\n >\n {`+${hiddenInteractions}`}\n </div>\n }\n </div>\n );\n}","import React from 'react';\nimport { renderToStaticMarkup } from 'react-dom/server';\nimport Highcharts from 'highcharts';\n\nimport { Interactive } from 'libs/shared/interfaces';\n\nimport { TimepointInteractions } from 'projects/player/plugins/engagement-overlay-plugin/components/timepoint-interactions/timepoint-interactions';\nimport { formatTime } from 'projects/player/utils/formatTime';\n\nexport const STATIC_CHART_OPTIONS: Highcharts.Options = {\n title: {\n text: null\n },\n xAxis: {\n visible: false,\n minPadding: 0,\n maxPadding: 0\n },\n legend: {\n enabled: false\n },\n credits: {\n enabled: false\n },\n defs: {\n gradient: ({\n tagName: 'linearGradient',\n id: 'area-gradient',\n x1: 0,\n y1: 1,\n x2: 0,\n y2: 0,\n children: [\n ({\n tagName: 'stop',\n offset: 0\n } as Highcharts.ASTNode),\n ({\n tagName: 'stop',\n offset: 1\n } as Highcharts.ASTNode)\n ]\n } as Highcharts.ASTNode)\n }\n};\n\nexport function getChartOptions(width: number, height: number): Highcharts.ChartOptions {\n return {\n styledMode: true,\n spacing: [ 15, 0, 0, 0 ],\n width,\n height\n };\n}\n\nexport function getYAxisChartOptions(heatMap: number[]): Highcharts.YAxisOptions {\n const maxValue = Math.max(...heatMap);\n\n return {\n /**\n * To prevent max values from being cut off, we pad them relative to the chart scale.\n */\n max: maxValue * 1.05,\n min: 0,\n minPadding: 0,\n maxPadding: 0,\n allowDecimals: true,\n startOnTick: false,\n endOnTick: false,\n visible: false\n };\n}\n\nexport function getTooltipOptions(interactive?: Interactive): Highcharts.TooltipOptions {\n return {\n formatter: function () {\n const timepointInteractionsHtml = interactive\n ? getTimepointInteractionsHtml(interactive, this.x)\n : '';\n\n return (\n '<div class=\"cv-engagement-tooltip bg-white rounded\">'\n + '<div class=\"d-flex justify-content-between\">'\n + `<strong>${formatTime(this.x)}</strong>`\n + `${timepointInteractionsHtml}`\n + '</div>'\n + '<div class=\"d-flex justify-content-between rounded bg-light cv-view-count-container\">'\n + `<strong>Views</strong> <span class=\"cv-view-count\">${this.y}</span>`\n + '</div>'\n + '</div>'\n );\n },\n positioner: function (\n labelWidth: number,\n labelHeight: number,\n point: Highcharts.TooltipPositionerPointObject\n ) {\n const minX = 0;\n const maxX = this.chart.plotWidth - labelWidth;\n const x = point.plotX - labelWidth / 2;\n \n return {\n // Clamp x between min and max\n x: Math.min(Math.max(x, minX), maxX),\n y: this.chart.plotTop\n };\n },\n useHTML: true,\n padding: 0\n };\n}\n\nexport function getPlotOptions(moveTimepointIndicator: (x: number | null) => void): Highcharts.PlotOptions {\n return {\n area: {\n point: {\n events: {\n mouseOver: function () {\n moveTimepointIndicator(this.x);\n },\n mouseOut: function () {\n moveTimepointIndicator(null);\n }\n }\n }\n },\n series: {\n marker: {\n enabled: false\n }\n }\n };\n}\n\nfunction getTimepointInteractionsHtml(interactive: Interactive, time: number): string {\n return renderToStaticMarkup(\n <TimepointInteractions time={time} interactive={interactive} />\n );\n}","import Highcharts from 'highcharts';\nimport videojs, { VideoJsPlayer } from 'video.js';\n\nimport { Interactive } from 'libs/shared/interfaces';\n\nimport {\n getChartOptions,\n getPlotOptions,\n getTooltipOptions,\n getYAxisChartOptions,\n STATIC_CHART_OPTIONS\n} from './engagement-overlay-chart-options';\n\nimport './engagement-overlay.scss';\n\nconst Component = videojs.getComponent('Component');\n\nHighcharts.AST.allowedTags.push('g');\nHighcharts.AST.allowedAttributes.push('viewBox', 'transform');\n\ninterface ChartDimensions {\n width: number;\n height: number;\n}\n\ninterface EngagementOverlayOptions extends videojs.ComponentOptions {\n heatMap: number[];\n interactive?: Interactive;\n onTimepointHover?: (time: number | null) => void;\n}\n\nexport class EngagementOverlay extends Component {\n public options_: EngagementOverlayOptions;\n private chart: Highcharts.Chart;\n\n constructor(player: VideoJsPlayer, options: EngagementOverlayOptions) {\n super(player, options);\n\n this.initialize();\n this.bindListeners();\n }\n\n public initialize(): void {\n this.player().ready(() => this.buildChart());\n }\n\n public buildCSSClass(): string {\n return 'cv-engagement-overlay';\n }\n\n public createEl(tagName?: string, properties?: any, attributes?: any): Element {\n const innerHTML = '<div class=\"cv-engagement-chart\"></div>'\n + '<div class=\"cv-engagement-timepoint-indicator\"></div>';\n\n return super.createEl(tagName, {\n ...properties,\n className: this.buildCSSClass(),\n innerHTML\n }, attributes);\n }\n\n public toggleChart(show: boolean): void {\n if (show)\n this.buildChart();\n else\n this.destroyChart();\n }\n\n private bindListeners(): void {\n this.handleClick = this.handleClick.bind(this);\n this.resizeChart = this.resizeChart.bind(this);\n\n this.player().on('playerresize', this.resizeChart);\n\n this.on(this.el(), 'mouseup', this.handleClick);\n\n this.player().on('dispose', () => {\n this.player().off('playerresize', this.resizeChart);\n\n this.off(this.el(), 'mouseup', this.handleClick);\n });\n }\n\n private handleClick(event: videojs.EventTarget.Event): void {\n if (!videojs.dom.isSingleLeftClick(event))\n return;\n\n if (this.player().paused()) {\n this.player().play();\n return;\n }\n\n this.player().pause();\n }\n\n private buildChart(): void {\n if (this.chart)\n return;\n\n const chartDimensions = this.getChartDimensions();\n\n /**\n * The dimensions calculation relies on the control bar and progress control\n * being visible, so if it isn't, we wait for the play event.\n */\n if (!chartDimensions) {\n this.player().one('play', () => this.buildChart());\n return;\n }\n\n const container: HTMLElement = this.el().querySelector('.cv-engagement-chart');\n\n this.chart = Highcharts.chart(container, this.getHighchartOptions(chartDimensions));\n }\n\n private resizeChart(): void {\n const chartDimensions = this.getChartDimensions();\n\n if (!this.chart || !chartDimensions)\n return;\n\n this.chart.setSize(chartDimensions.width, chartDimensions.height);\n }\n\n private destroyChart(): void {\n this.chart?.destroy();\n this.chart = null;\n }\n\n private getChartDimensions(): ChartDimensions {\n const collapserator = this.player().getChild('collapserator');\n const collapseratorHeight = collapserator?.currentHeight();\n\n const width = this.el().clientWidth;\n\n if (!collapseratorHeight || !width)\n return null;\n\n const { height } = this.player().currentDimensions();\n \n return {\n width,\n height: height - collapseratorHeight\n };\n }\n\n private getHighchartOptions({ width, height }: ChartDimensions): Highcharts.Options {\n return {\n ...STATIC_CHART_OPTIONS,\n chart: getChartOptions(width, height),\n yAxis: getYAxisChartOptions(this.options_.heatMap),\n tooltip: getTooltipOptions(this.options_.interactive),\n plotOptions: getPlotOptions(this.moveTimepointIndicator.bind(this)),\n series: [{\n type: 'area',\n data: this.options_.heatMap\n }]\n };\n }\n\n private moveTimepointIndicator(x: number | null): void {\n if (this.options_.onTimepointHover)\n this.options_.onTimepointHover(x);\n\n const indicator: HTMLDivElement = this.el().querySelector('.cv-engagement-timepoint-indicator');\n\n if (x === null) {\n videojs.dom.removeClass(indicator, 'cv-engagement-timepoint-indicator-visible');\n return;\n }\n\n videojs.dom.addClass(indicator, 'cv-engagement-timepoint-indicator-visible');\n indicator.style.left = `${x / this.options_.heatMap.length * 100}%`;\n }\n}\n\nvideojs.registerComponent('EngagementOverlay', EngagementOverlay);","import videojs, { VideoJsPlayer } from 'video.js';\n\nimport { Interactive } from 'libs/shared/interfaces';\n\nimport { CogButton } from 'projects/player/components/cog-button/cog-button';\nimport { EngagementOverlay } from 'projects/player/plugins/engagement-overlay-plugin/components/engagement-overlay/engagement-overlay';\nimport { EngagementOverlayMenuItem } from 'projects/player/plugins/engagement-overlay-plugin/components/engagement-overlay-menu-item/engagement-overlay-menu-item';\n\nimport 'projects/player/plugins/engagement-overlay-plugin/components/engagement-overlay/engagement-overlay';\n\nconst Plugin = videojs.getPlugin('plugin');\n\ninterface EngagementOverlayPluginOptions {\n heatMap: number[];\n interactive?: Interactive;\n onTimepointHover?: (time: number | null) => void;\n}\n\nclass EngagementOverlayPlugin extends Plugin {\n private options: EngagementOverlayPluginOptions;\n\n constructor(player: VideoJsPlayer, options: EngagementOverlayPluginOptions) {\n super(player, options);\n\n this.options = options;\n\n player.ready(() => {\n this.initialize();\n });\n }\n \n private initialize(): void {\n if (!this.hasHeatMapData())\n return;\n\n this.player.addChild('engagementOverlay', {\n heatMap: this.options.heatMap,\n interactive: this.options.interactive,\n onTimepointHover: this.options.onTimepointHover\n });\n\n const cogButton = this.player.getChild('collapserator')?.getChild('cogButton') as CogButton;\n cogButton.addItem({\n index: 0,\n ctor: EngagementOverlayMenuItem,\n name: 'EngagementOverlayMenuItem',\n options: { overlayVisible: true }\n });\n }\n\n public toggleOverlay(show: boolean): void {\n const engagementOverlay = this.player.getChild('engagementOverlay') as EngagementOverlay;\n engagementOverlay?.toggleChart(show);\n }\n\n private hasHeatMapData(): boolean {\n return this.options.heatMap?.reduce((acc, val) => acc + val, 0) > 0;\n }\n}\n\nvideojs.registerPlugin('engagementOverlayPlugin', EngagementOverlayPlugin);\n\ndeclare module 'video.js' {\n export interface VideoJsPlayer {\n engagementOverlayPlugin(options?: EngagementOverlayPluginOptions): EngagementOverlayPlugin;\n }\n}","import videojs, { VideoJsPlayer } from 'video.js';\n\nimport { Interactive } from 'libs/shared/interfaces';\n\nimport { InteractiveBarItems } from 'projects/player/plugins/interactive-plugin/components/seek-bar/interactive-bar-items';\nimport { TrackHelper } from 'projects/player/utils/track-helper';\n\nimport './interactive-plugin-styles.scss';\n\nconst Plugin = videojs.getPlugin('plugin');\n\ninterface InteractiveSeekBarPluginOptions {\n interactive: Interactive;\n}\n\n/**\n * This plugin will just render the interactive seek bar (i.e. just the interaction markers).\n * The user won't be able to interact with any of the interactions.\n * Currently this is just used in reports-player\n */\nclass InteractiveSeekBarPlugin extends Plugin {\n private options: InteractiveSeekBarPluginOptions;\n\n constructor(player: VideoJsPlayer, options: InteractiveSeekBarPluginOptions) {\n super(player);\n\n this.options = options;\n\n this.player.one('loadedmetadata', () => this.player.ready(this.initialize.bind(this)));\n }\n\n private initialize(): void {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n TrackHelper.useMetadataTrack(this.player, 'interactive', this.onTrackLoaded.bind(this));\n\n this.player.addClass('cv-interactive-plugin');\n }\n\n private onTrackLoaded(track: TextTrack): void {\n this.addChildren(track);\n }\n\n private addChildren(track: TextTrack): void {\n const seekBar = this.player.controlBar.getChild('progressControl').getChild('SeekBar');\n\n seekBar.addChild(new InteractiveBarItems(this.player, {\n interactive: this.options.interactive,\n track\n }));\n }\n}\n\nvideojs.registerPlugin('interactiveSeekBarPlugin', InteractiveSeekBarPlugin);\n\ndeclare module 'video.js' {\n export interface VideoJsPlayer {\n interactiveSeekBarPlugin(options?: InteractiveSeekBarPluginOptions): InteractiveSeekBarPlugin;\n }\n}","import { Interactive } from 'libs/shared/interfaces';\n\nimport { ClipData } from 'projects/player/interfaces/models/ClipData';\nimport { PlaybackObject } from 'projects/player/interfaces/models/PlaybackObject';\nimport { BasePlayer, BasePlayerOptions } from 'projects/player/players/base-player';\nimport { AnalyticsPlayerType } from 'projects/player/services/analytics-service';\nimport { InteractiveTrackHelper } from 'projects/player/utils/interactive-track-helper';\n\nimport './reports-player.scss';\n\nimport 'projects/player/plugins/engagement-overlay-plugin/engagement-overlay-plugin';\nimport 'projects/player/plugins/clip-plugin/clip-plugin';\nimport 'projects/player/plugins/interactive-plugin/interactive-seek-bar-plugin';\n\nexport interface ReportsPlayerOptions extends BasePlayerOptions {\n heatMap: number[];\n onTimepointHover?: (time: number | null) => void;\n}\n\nexport class ReportsPlayer extends BasePlayer {\n protected options: ReportsPlayerOptions;\n private track: TextTrack;\n\n constructor(id: string | Element, options: ReportsPlayerOptions) {\n super(id, options);\n }\n\n protected getPlayerClassName(): string {\n return 'cv-reports-player';\n }\n\n protected getAnalyticsPlayerType(): AnalyticsPlayerType {\n return 'reports-player';\n }\n\n protected async additionalSetup(playbackObject: PlaybackObject): Promise<void> {\n super.additionalSetup(playbackObject);\n\n this.setupEngagementOverlayPlugin(playbackObject);\n this.setupUpClipPlugin(playbackObject);\n this.setupInteractiveSeekBarPlugin(playbackObject);\n }\n\n private setupEngagementOverlayPlugin(playbackObject: PlaybackObject): void {\n this.player.engagementOverlayPlugin({\n heatMap: this.options.heatMap,\n interactive: playbackObject.additionalData?.interactive as Interactive,\n onTimepointHover: this.options.onTimepointHover\n });\n }\n\n private setupUpClipPlugin(playbackObject: PlaybackObject): void {\n const isClip = playbackObject.mediaType === 'MasterClip';\n const isInteractive = playbackObject.mediaType === 'MasterInteractive';\n\n if (!isClip && !isInteractive)\n return;\n\n let clipData: ClipData;\n if (isClip)\n clipData = playbackObject.additionalData;\n \n if (isInteractive) {\n clipData = playbackObject.additionalData?.clipData;\n\n // Not all interactives will have clip data\n if (!clipData)\n return;\n }\n\n if (!clipData)\n throw Error('Invalid clip data');\n\n this.player.clipPlugin({\n startTime: clipData.startTime,\n endTime: clipData.endTime\n });\n }\n\n private setupInteractiveSeekBarPlugin(playbackObject: PlaybackObject): void {\n const interactive = playbackObject.additionalData?.interactive as Interactive;\n\n if (!playbackObject.additionalData?.interactive)\n return;\n\n this.track = InteractiveTrackHelper.getInteractiveTrack(this.player, playbackObject);\n\n this.player.interactiveSeekBarPlugin({ interactive });\n }\n\n protected getSeekBarOptions(): any {\n return {\n ignoreChapters: true\n };\n }\n}\n","import React from 'react';\n\nimport { ReportsPlayer, ReportsPlayerOptions } from 'projects/player/players/reports/reports-player';\n\nexport function ClickViewReportsPlayer(props: ReportsPlayerOptions): React.ReactElement {\n const ref = React.useRef(null);\n const playerRef = React.useRef<ReportsPlayer>(null);\n\n React.useEffect(() => {\n playerRef.current = new ReportsPlayer(ref.current, props);\n }, []);\n\n return (\n <div ref={ref}></div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"playerContainer\":\"fGWsk\",\"playerPlaceholder\":\"v1MjE\",\"heatMap\":\"lp1Yn\",\"heatMapTimepointIndicator\":\"yOOK6\",\"heatMapTimepointIndicatorVisible\":\"rTXmB\",\"partialLoadingContainer\":\"gW1HU\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EngagementHeatMap, EngagementHeatMapLegend } from 'libs/shared/apps/analytics/components/engagement-heat-map/EngagementHeatMap';\nimport { getFullHeatMap } from 'libs/shared/apps/analytics/utils/EngagementUtils';\nimport { Engagement } from 'libs/shared/interfaces';\n\nimport { ClickViewReportsPlayer } from 'projects/player/react/ReportsPlayer';\n\nimport styles from './video-engagement-overlay.scss';\n\nconst namespace = 'shared.videoEngagementOverlay';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface VideoEngagementOverlayProps {\n engagement: Engagement;\n viewKey: string;\n imageCdnUrl: string;\n playerApiUrl: string;\n}\n\nexport function VideoEngagementOverlay(props: VideoEngagementOverlayProps): JSX.Element {\n const timepointIndicatorRef = React.useRef<HTMLDivElement>(null);\n\n const heatMap = getFullHeatMap(props.engagement);\n\n function setHoverTimepoint(time: number | null): void {\n const el = timepointIndicatorRef.current;\n\n if (!el)\n return;\n\n if (time === null) {\n el.classList.remove(styles.heatMapTimepointIndicatorVisible);\n return;\n }\n\n el.classList.add(styles.heatMapTimepointIndicatorVisible);\n el.style.left = `${time / heatMap.length * 100}%`;\n }\n\n return (\n <div className='bg-white border rounded overflow-hidden h-100'>\n <div className='position-relative'>\n {/**\n * The below div is an empty 16:9 rectangle which maintains this component's\n * height while the player is loading.\n */\n }\n <div className={styles.playerPlaceholder} />\n <div className={styles.playerContainer}>\n <ClickViewReportsPlayer\n viewKey={props.viewKey}\n playerApi={new URL(props.playerApiUrl)}\n hotkeyElQuerySelector='body'\n heatMap={heatMap}\n onTimepointHover={setHoverTimepoint}\n aspectRatio='16:9'\n />\n </div>\n </div>\n <div className='p-3'>\n <div className='position-relative'>\n <EngagementHeatMap\n engagement={props.engagement}\n className={styles.heatMap}\n />\n <div ref={timepointIndicatorRef} className={styles.heatMapTimepointIndicator} />\n </div>\n <div className='d-flex justify-content-between mt-2'>\n <strong>\n {getPhrase('heatmap')}\n </strong>\n <div className='w-33'>\n <EngagementHeatMapLegend />\n </div>\n </div>\n </div>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"videoContainer\":\"cpl68\"};","import React from 'react';\n\nimport { EngagementTable } from 'libs/shared/apps/analytics/components/engagement-table/EngagementTable';\nimport { InsightAmountWatched } from 'libs/shared/apps/analytics/components/insights/amount-watched/InsightAmountWatched';\nimport { InsightTotalViews } from 'libs/shared/apps/analytics/components/insights/total-views/InsightTotalViews';\nimport { GroupedAnalyticsCount } from 'libs/shared/apps/analytics/interfaces/BaseAnalyticsEvent';\nimport { VideoViewEventResponse } from 'libs/shared/apps/analytics/interfaces/VideoViewEvent';\nimport { Config, Engagement, PlayerViewKey } from 'libs/shared/interfaces';\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nimport { PartialInsightsHeatmap } from 'apps/my-shares/components/insights-heatmap/partial-loading/PartialInsightsHeatmap';\nimport { VideoEngagementOverlay } from 'apps/my-shares/components/video-engagement-overlay/VideoEngagementOverlay';\n\nimport styles from './insights-heatmap.scss';\n\ninterface InsightsHeatmapProps {\n hasDataLoaded: boolean;\n tableDataLoaded: boolean;\n yearGroups: GroupedAnalyticsCount[];\n aggregateEngagement: Engagement;\n individualEngagement: Engagement[];\n viewKey: PlayerViewKey;\n config: Config;\n users: AnonUser[];\n classroomStudents?: AnonUser[];\n anonymiseUsers: boolean;\n}\n\nexport function InsightsHeatmap(props: InsightsHeatmapProps) {\n return (\n <>\n {!props.hasDataLoaded && <PartialInsightsHeatmap />}\n\n <div className='row g-3 mb-3'>\n {props.hasDataLoaded &&\n <>\n <div className='col'>\n <InsightTotalViews\n events={{ yearGroupCount: props.yearGroups } as VideoViewEventResponse}\n emptyStateImage={ImageUrls.EmptyStates.MY_VIDEOS}\n />\n </div>\n <div className='col'>\n <InsightAmountWatched engagement={props.individualEngagement} />\n </div>\n <div className={styles.videoContainer}>\n <VideoEngagementOverlay\n engagement={props.aggregateEngagement}\n viewKey={props.viewKey.viewKey}\n playerApiUrl={props.config.playerApiUrl}\n imageCdnUrl={props.config.imageCdnUrl}\n />\n </div>\n </>\n }\n\n {props.tableDataLoaded &&\n <div className='col-12'>\n <EngagementTable\n engagement={props.individualEngagement}\n users={props.users}\n imageCdnUrl={props.config?.imageCdnUrl}\n anonymiseUsers={props.anonymiseUsers}\n classroomStudents={props.classroomStudents}\n border\n enableSort\n />\n </div>\n }\n </div>\n </>\n );\n}"],"names":["namespace","ZERO_COLOUR","COLOUR_SCALE","LEGEND_VALUES","getBackgroundColor","value","max","hex","getGradient","data","gradient","i","length","previousValue","currentValue","nextValue","push","join","EngagementHeatMapLegend","Math","legendSquareWidthPercentage","className","Text","phrase","map","val","idx","key","style","width","backgroundColor","EngagementHeatMap","props","heatMap","engagement","background","InsightCard","subtitle","svgClassName","SvgContainer","svgName","size","S","title","count","children","CHART_FONT_STYLES","fontSize","fontFamily","fontWeight","color","getFullHeatMap","videoDuration","Array","ceil","fill","t","getEngagementRate","reduce","prev","next","engagementRate","DragOverlayStyles","opacity","cursor","calculateScrollState","ref","canScrollLeft","current","scrollLeft","canScrollRight","scrollWidth","clientWidth","SortIndicator","column","canSort","isSorted","theme","sortIndicator","isSortedDesc","BaseTable","ids","idHash","tableOptions","columns","disableSortBy","enableSort","manualSortBy","manualSort","autoResetHiddenColumns","autoResetSortBy","initialState","sortBy","initialSortBy","initialSelectedRowIds","selectedRowIds","forEach","id","getRowId","useTable","plugins","useSortBy","useRowSelect","layout","useFlexLayout","useBlockLayout","allowFiltering","useFilters","allowGlobalFiltering","useGlobalFilter","getPlugins","getTableProps","getTableBodyProps","headerGroups","rows","prepareRow","toggleAllRowsSelected","setGlobalFilter","setHiddenColumns","state","renderTableRows","row","FunctionHelper","isSelected","selectedRow","onSelectRow","enableSortableRows","getTableRowsClass","rowAppLink","getRowAppLink","onClickRow","allowSelectMultipleRows","toggleRowSelected","renderRow","sortableProps","dragAttributes","dragListeners","getSortableProps","role","AppLink","appLink","renderCells","onClick","rowProps","getRowProps","SortableItemWrapper","original","childProps","childComponent","cells","cell","cellClassName","onSelectCell","getCellClassName","getCellProps","render","onSort","globalFilter","hiddenColumns","table","header","headerGroup","getHeaderGroupProps","headerRow","headers","getHeaderProps","getSortByToggleProps","headerCell","renderSortIndicator","hideSortIndicator","body","SortableContainerWrapper","getDragOverlay","rowIndex","findIndex","item","onSortEnd","onSortingRowsEnd","Table","enableSlider","scrollIncrement","scrollable","tableProps","elRef","scrollState","setScrollState","throttledOnScroll","el","removeEventListener","addEventListener","scroll","scrollBy","left","top","behavior","useTableScroll","renderTrackHorizontal","autoHeightMax","autoHeight","onClickScroll","direction","WidgetButton","W","hide","scrollContainerClassName","defaultProps","getPhrase","LanguageService","EMPTY_ENGAGEMENT","viewCount","CellWrapper","HeaderCell","phraseKey","EngagementTable","users","classroomStudents","maxHeatMapValue","e","localMax","Header","accessor","sortType","rowA","rowB","values","user","anonymiseUsers","Cell","nameParts","name","split","filter","n","surname","slice","Avatar","imageCdnUrl","initials","UserHelper","imageUrl","avatar","url","showAnonymousUser","sessionId","sortDescFirst","PercentageIndicator","percentage","useGetColumns","userIdSet","Set","find","u","userId","add","students","s","has","border","PartialPercentageIndicator","customLabel","InsightAmountWatched","round","options","CHART_COLOURS","STATIC_CHART_OPTIONS","text","credits","enabled","chart","spacing","legend","itemStyle","itemDistance","plotOptions","pie","allowPointSelect","dataLabels","showInLegend","borderWidth","InsightTotalViews","events","groupsToOmit","getSeriesName","groups","eventCounts","chartData","staffIndex","group","staffObject","splice","sort","a","b","parseInt","match","sortByYearGroup","ev","includes","toLowerCase","ArrayHelper","Object","keys","y","type","d","totalViews","highcharts","series","getChartOptions","containerProps","EmptyState","src","emptyStateImage","PartialInsightsHeatmap","EngagementOverlayMenuItem","player","overlayVisible","toggle","this","toggleOn","toggleOff","toggleEl","engagementOverlayPlugin","toggleOverlay","addClass","removeClass","event","stopImmediatePropagation","tagName","properties","attributes","handlerBound","handleToggle","bind","innerHTML","appendChild","TimepointInteractions","timepoint","interactive","timepoints","timepointTime","visibleAt","floor","time","interactions","MAX_INTERACTIONS_TO_SHOW","hiddenInteractions","InteractionLabel","interaction","showQuestion","iconClassName","xAxis","visible","minPadding","maxPadding","defs","x1","y1","x2","y2","offset","height","styledMode","Component","EngagementOverlay","initialize","bindListeners","ready","buildChart","buildCSSClass","show","destroyChart","handleClick","resizeChart","on","off","paused","play","pause","chartDimensions","getChartDimensions","container","querySelector","getHighchartOptions","one","setSize","destroy","collapserator","getChild","collapseratorHeight","currentHeight","currentDimensions","moveTimepointIndicator","yAxis","options_","min","allowDecimals","startOnTick","endOnTick","tooltip","formatter","timepointInteractionsHtml","renderToStaticMarkup","getTimepointInteractionsHtml","x","formatTime","positioner","labelWidth","labelHeight","point","maxX","plotWidth","plotX","plotTop","useHTML","padding","area","mouseOver","mouseOut","marker","onTimepointHover","indicator","EngagementOverlayPlugin","hasHeatMapData","addChild","addItem","index","ctor","engagementOverlay","toggleChart","acc","InteractiveSeekBarPlugin","onTrackLoaded","track","addChildren","controlBar","ReportsPlayer","playbackObject","additionalSetup","setupEngagementOverlayPlugin","setupUpClipPlugin","setupInteractiveSeekBarPlugin","additionalData","clipData","isClip","mediaType","isInteractive","Error","clipPlugin","startTime","endTime","interactiveSeekBarPlugin","ignoreChapters","ClickViewReportsPlayer","playerRef","VideoEngagementOverlay","timepointIndicatorRef","viewKey","playerApi","URL","playerApiUrl","hotkeyElQuerySelector","classList","remove","aspectRatio","InsightsHeatmap","hasDataLoaded","yearGroupCount","yearGroups","ImageUrls","individualEngagement","aggregateEngagement","config","tableDataLoaded"],"sourceRoot":""}
@@ -1,3 +0,0 @@
1
- /*! For license information please see 8723-7802a8728e-lite.chunk.js.LICENSE.txt */
2
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[8723],{66122:(e,t,n)=>{n.d(t,{A:()=>a});var r=n(32735);function a(e){return r.createElement("span",{id:"".concat(e.name,"Error"),className:"".concat(e.className," invalid-feedback d-block"),role:"status"},e.children)}},93681:(e,t,n)=>{n.d(t,{o:()=>d});var r=n(32735),a=n(31453),o=n(2786),c=n(4594);const l="s6wnJ",i="UFQ2T",u="Tp9_3";function s(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,c,l=[],i=!0,u=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;i=!1}else for(;!(i=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);i=!0);}catch(e){u=!0,a=e}finally{try{if(!i&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(u)throw a}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return m(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?m(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function m(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function f(e){switch(e){case c.E.Video:case c.E.Interactive:case c.E.Clip:return"y0V3Z";case c.E.Subject:case c.E.Playlist:return"x3h8F";case c.E.Series:return"Wrg5x";default:return""}}function d(e){return r.createElement("div",{className:"d-flex"},e.children)}var h={cover:u,full:"AlF2T"},p={base:"uQ2rm",full:""};d.NarrowContent=function(e){return r.createElement("div",{className:"".concat("INvJ0"," mx-auto w-100 ").concat(e.className?e.className:"")},e.children)},d.Left=function(e){return r.createElement("div",{className:"".concat(l," ").concat(e.className?e.className:"")},e.children)},d.LeftImage=function(e){var t=s(r.useState(!1),2),n=t[0],a=t[1],o=s(r.useState(""),2),c=o[0],m=o[1];return r.useEffect((function(){if(e.imageUrl){var t=new Image;return t.onload=function(){return a(!0)},t.src=e.imageUrl,function(){return t.onload=null}}var n=e.fallbackImages[Math.floor(Math.random()*e.fallbackImages.length)];m(n.bgUrl)}),[e.imageUrl]),r.createElement("div",{className:"".concat(l," ").concat(i," ").concat(u," bg-light"),style:{backgroundImage:c?"url('".concat(c,"')"):""}},n&&r.createElement(r.Fragment,null,r.createElement("div",{className:"Mtlg9",style:{backgroundImage:"url('".concat(e.imageUrl,"')")}}),r.createElement("div",{className:"".concat("NxEjh"," ").concat(f(e.objectType))},r.createElement("div",{className:"NN9cV"},r.createElement("img",{className:"PkJ8J",src:e.imageUrl,alt:e.title})))))},d.LeftImageWithBackground=function(e){var t={backgroundImage:e.imageUrl?'url("'.concat(e.imageUrl,'")'):""};return e.backgroundColor&&(t.backgroundColor=e.backgroundColor),r.createElement("div",{className:"".concat(l," ").concat(i," ").concat(h[e.imageSize||"cover"]," d-flex align-items-center"),style:t,title:e.title})},d.Right=function(e){return r.createElement("div",{className:"".concat("eoZzJ"," ").concat(e.className?e.className:"")},e.children)},d.Header=function(e){var t,n=(null==e?void 0:e.logoComponent)||o.$S;return r.createElement("div",{className:"position-relative"},!!e.bannerComponent&&e.bannerComponent,r.createElement("div",{className:(0,a.A)("YHNgA","position-absolute",null===(t=e.className)||void 0===t?void 0:t.logoContainer)},r.createElement(n,null)),e.children)},d.Content=function(e){return r.createElement("div",{className:(0,a.A)("RVyLM","d-flex flex-column justify-content-center h-100",null==e?void 0:e.className)},e.children)},d.ContentBody=function(e){var t=p[e.width||"base"];return r.createElement("div",{className:(0,a.A)("aLd5V",t,"m-auto p-3",e.className)},e.children)},d.Buttons=function(e){return r.createElement("div",{className:(0,a.A)("position-fixed bg-white d-flex align-items-center","ZW85Q",null==e?void 0:e.className)},e.children)}},78723:(e,t,n)=>{n.r(t),n.d(t,{SelectAnonUserView:()=>B});var r=n(32735),a=n(81886),o=n(23481),c=n(20354),l=n(75896),i=n(2208),u=n(30439),s=n(64249),m=n(11607),f=n(66122),d=n(7432),h=n(93681),p=n(83345),g=n(54610),v=n(67453),b=n(31908),y=n(97027),E=n(13746),N=n(71214),w=n(75608);const x={aviBackground:"oHeDN",aviContainer:"J3O78",aviIcon:"vNvft"};var C=["🐵","🐒","🦍","🦧","🐶","🐕","🦮","🐕‍🦺","🐩","🐺","🦊","🦝","🐱","🐈","🐈‍⬛","🦁","🐯","🐅","🐆","🐴","🐎","🦄","🦓","🦌","🐮","🐂","🐃","🐄","🐷","🐖","🐗","🐽","🐏","🐑","🐐","🦙","🦒","🐘","🦣","🦏","🦛","🦘","🦥","🦦","🦨","🦡","🐇","🐁","🐀","🦔","🐿️","🦇","🐉","🦎","🐍","🐢","🐊","🦖","🦕","🐙","🦑","🦐","🦞","🦀","🦪","🐡","🐠","🐟","🐬","🐳","🐋","🦈","🦭","🐾"],k=["bg-orange","bg-indigo","bg-teal","bg-cyan","bg-purple","bg-pink","bg-red","bg-yellow","bg-green","bg-blue"];function I(e,t){for(var n,r=0,a=0;null!==(n=a<(null==e?void 0:e.length))&&void 0!==n&&n;a++)r+=e.charCodeAt(a);return t[r%t.length]}function S(e){return r.createElement("span",{className:"h1 d-block mb-0 position-relative ".concat(x.aviContainer)},r.createElement("span",{className:"\n ".concat(I(e.recipient.publicName,k),"\n rounded-circle\n position-absolute\n top-0\n start-0\n bottom-0\n end-0\n ").concat(x.aviBackground,"\n ")}),r.createElement("span",{className:"\n ".concat(x.aviIcon,"\n position-absolute\n top-50\n start-50\n ")},I(e.recipient.publicName,C)))}const L={confirmationContainer:"TIEUw"};function U(e){return U="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},U(e)}function j(){j=function(){return t};var e,t={},n=Object.prototype,r=n.hasOwnProperty,a=Object.defineProperty||function(e,t,n){e[t]=n.value},o="function"==typeof Symbol?Symbol:{},c=o.iterator||"@@iterator",l=o.asyncIterator||"@@asyncIterator",i=o.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function s(e,t,n,r){var o=t&&t.prototype instanceof v?t:v,c=Object.create(o.prototype),l=new P(r||[]);return a(c,"_invoke",{value:I(e,n,l)}),c}function m(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}t.wrap=s;var f="suspendedStart",d="suspendedYield",h="executing",p="completed",g={};function v(){}function b(){}function y(){}var E={};u(E,c,(function(){return this}));var N=Object.getPrototypeOf,w=N&&N(N(_([])));w&&w!==n&&r.call(w,c)&&(E=w);var x=y.prototype=v.prototype=Object.create(E);function C(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function k(e,t){function n(a,o,c,l){var i=m(e[a],e,o);if("throw"!==i.type){var u=i.arg,s=u.value;return s&&"object"==U(s)&&r.call(s,"__await")?t.resolve(s.__await).then((function(e){n("next",e,c,l)}),(function(e){n("throw",e,c,l)})):t.resolve(s).then((function(e){u.value=e,c(u)}),(function(e){return n("throw",e,c,l)}))}l(i.arg)}var o;a(this,"_invoke",{value:function(e,r){function a(){return new t((function(t,a){n(e,r,t,a)}))}return o=o?o.then(a,a):a()}})}function I(t,n,r){var a=f;return function(o,c){if(a===h)throw Error("Generator is already running");if(a===p){if("throw"===o)throw c;return{value:e,done:!0}}for(r.method=o,r.arg=c;;){var l=r.delegate;if(l){var i=S(l,r);if(i){if(i===g)continue;return i}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(a===f)throw a=p,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);a=h;var u=m(t,n,r);if("normal"===u.type){if(a=r.done?p:d,u.arg===g)continue;return{value:u.arg,done:r.done}}"throw"===u.type&&(a=p,r.method="throw",r.arg=u.arg)}}}function S(t,n){var r=n.method,a=t.iterator[r];if(a===e)return n.delegate=null,"throw"===r&&t.iterator.return&&(n.method="return",n.arg=e,S(t,n),"throw"===n.method)||"return"!==r&&(n.method="throw",n.arg=new TypeError("The iterator does not provide a '"+r+"' method")),g;var o=m(a,t.iterator,n.arg);if("throw"===o.type)return n.method="throw",n.arg=o.arg,n.delegate=null,g;var c=o.arg;return c?c.done?(n[t.resultName]=c.value,n.next=t.nextLoc,"return"!==n.method&&(n.method="next",n.arg=e),n.delegate=null,g):c:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,g)}function L(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function A(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function P(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(L,this),this.reset(!0)}function _(t){if(t||""===t){var n=t[c];if(n)return n.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var a=-1,o=function n(){for(;++a<t.length;)if(r.call(t,a))return n.value=t[a],n.done=!1,n;return n.value=e,n.done=!0,n};return o.next=o}}throw new TypeError(U(t)+" is not iterable")}return b.prototype=y,a(x,"constructor",{value:y,configurable:!0}),a(y,"constructor",{value:b,configurable:!0}),b.displayName=u(y,i,"GeneratorFunction"),t.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===b||"GeneratorFunction"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,y):(e.__proto__=y,u(e,i,"GeneratorFunction")),e.prototype=Object.create(x),e},t.awrap=function(e){return{__await:e}},C(k.prototype),u(k.prototype,l,(function(){return this})),t.AsyncIterator=k,t.async=function(e,n,r,a,o){void 0===o&&(o=Promise);var c=new k(s(e,n,r,a),o);return t.isGeneratorFunction(n)?c:c.next().then((function(e){return e.done?e.value:c.next()}))},C(x),u(x,i,"Generator"),u(x,c,(function(){return this})),u(x,"toString",(function(){return"[object Generator]"})),t.keys=function(e){var t=Object(e),n=[];for(var r in t)n.push(r);return n.reverse(),function e(){for(;n.length;){var r=n.pop();if(r in t)return e.value=r,e.done=!1,e}return e.done=!0,e}},t.values=_,P.prototype={constructor:P,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(A),!t)for(var n in this)"t"===n.charAt(0)&&r.call(this,n)&&!isNaN(+n.slice(1))&&(this[n]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var n=this;function a(r,a){return l.type="throw",l.arg=t,n.next=r,a&&(n.method="next",n.arg=e),!!a}for(var o=this.tryEntries.length-1;o>=0;--o){var c=this.tryEntries[o],l=c.completion;if("root"===c.tryLoc)return a("end");if(c.tryLoc<=this.prev){var i=r.call(c,"catchLoc"),u=r.call(c,"finallyLoc");if(i&&u){if(this.prev<c.catchLoc)return a(c.catchLoc,!0);if(this.prev<c.finallyLoc)return a(c.finallyLoc)}else if(i){if(this.prev<c.catchLoc)return a(c.catchLoc,!0)}else{if(!u)throw Error("try statement without catch or finally");if(this.prev<c.finallyLoc)return a(c.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev<a.finallyLoc){var o=a;break}}o&&("break"===e||"continue"===e)&&o.tryLoc<=t&&t<=o.finallyLoc&&(o=null);var c=o?o.completion:{};return c.type=e,c.arg=t,o?(this.method="next",this.next=o.finallyLoc,g):this.complete(c)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),g},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),A(n),g}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var a=r.arg;A(n)}return a}}throw Error("illegal catch attempt")},delegateYield:function(t,n,r){return this.delegate={iterator:_(t),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=e),g}},t}function A(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,c,l=[],i=!0,u=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;i=!1}else for(;!(i=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);i=!0);}catch(e){u=!0,a=e}finally{try{if(!i&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(u)throw a}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return P(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?P(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function P(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var _=function(e,t,n,r){return new(n||(n=Promise))((function(a,o){function c(e){try{i(r.next(e))}catch(e){o(e)}}function l(e){try{i(r.throw(e))}catch(e){o(e)}}function i(e){var t;e.done?a(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(c,l)}i((r=r.apply(e,t||[])).next())}))},O="launchpad.selectAnonUser",T=o.T.encloseNamespace(O);function B(e){var t,n=c.a.useGetFetchAsync(),o=A(r.useState(N.h.getAnonUser(e.shareId)||""),2),x=o[0],C=o[1],k=A(r.useState(!!N.h.getAnonUser(e.shareId)),2),I=k[0],U=k[1],P=A(r.useState(""),2),B=P[0],G=P[1],F=A(r.useState("enter-name"),2),R=F[0],W=F[1],D=A(r.useState(null),2),M=D[0],V=D[1],J=A(r.useState(null),2),Y=J[0],z=J[1],H=(0,w.a)(e.shareId),Q=c.a.useBasicFetch(u.o.getShareRecipients(e.shareId));function Z(e){e.preventDefault(),(null==x?void 0:x.trim())?(M||V("enter-name"),W("confirm")):G("Please provide a name")}if(r.useLayoutEffect((function(){E.R.remove()}),[]),r.useEffect((function(){var t,n;if(Q.hasCompleted)return N.h.getAnonUser(e.shareId)?(W("confirm"),void V((null===(t=Q.data)||void 0===t?void 0:t.length)?"select-user":"enter-name")):void((null===(n=Q.data)||void 0===n?void 0:n.length)&&W("select-user"))}),[Q.hasCompleted]),!H||!Q.hasCompleted)return r.createElement(r.Fragment,null);var $=v.j.createUrl(s.I.getImageUrl(H),{size:g.h2.Large});return r.createElement(h.o,null,r.createElement(h.o.LeftImage,{title:H.name,imageUrl:$,objectType:H.typeId,fallbackImages:y.Hq}),r.createElement(h.o.Right,null,r.createElement(h.o.Header,null),r.createElement(h.o.Content,null,r.createElement("div",{className:"mb-auto text-center"},b.M.isInteractive(H)&&r.createElement("div",{className:"mb-3 d-lg-none d-block w-75 mx-auto"},r.createElement(d.Z,{data:b.M.getThumbnail(H),imageType:g.__.Thumbnails,className:"rounded-3 overflow-hidden"})),r.createElement("h1",{className:"h2"},H.name)),"enter-name"===R&&r.createElement(r.Fragment,null,r.createElement(h.o.NarrowContent,{className:"mb-auto"},r.createElement("form",{onSubmit:Z},r.createElement("div",{className:"form-group"},r.createElement("label",{className:"h2",htmlFor:"name"},r.createElement(p.x,{namespace:O,phrase:"label"})),r.createElement("input",{className:"form-control form-control-lg ".concat(B?"is-invalid":""),type:"text","aria-label":T("placeholder"),placeholder:T("placeholder"),autoFocus:!0,value:x,onChange:function(e){C(e.target.value),G("")},autoComplete:"off",autoCorrect:"off",autoCapitalize:"none",spellCheck:"false",name:"name",id:"name"}),!!B&&r.createElement(f.A,{name:"name"},B)))),r.createElement(h.o.Buttons,null,!!(null===(t=Q.data)||void 0===t?void 0:t.length)&&r.createElement("button",{className:"btn btn-link btn-lg",onClick:function(){return W("select-user")}},r.createElement(p.x,{namespace:O,phrase:"back"})),r.createElement("div",{className:"d-flex justify-content-end w-100"},r.createElement("button",{className:"btn btn-lg btn-dark",onClick:Z},r.createElement(p.x,{namespace:O,phrase:"continue"}))))),"select-user"===R&&r.createElement(r.Fragment,null,r.createElement(h.o.NarrowContent,{className:"mb-auto"},r.createElement("h2",null,r.createElement(p.x,{namespace:O,phrase:"selectName"})),r.createElement("ul",{className:"list-unstyled row"},l.m.sortBy(Q.data,(function(e){return e.publicName})).map((function(e,t){return r.createElement("li",{key:t,className:"col-3 p-2"},r.createElement(m.L,{className:"text-center rounded border py-2 ".concat((null==Y?void 0:Y.id)===e.id?"border-info bg-light-blue":""),onClick:function(){return function(e){z(e)}(e)}},r.createElement("div",{className:"px-3"},r.createElement(S,{recipient:e})),r.createElement("p",{className:"mb-0 mt-2 fw-semibold text-truncate"},e.publicName)))})))),r.createElement(h.o.Buttons,null,r.createElement("div",{className:"d-flex justify-content-between w-100"},r.createElement("button",{className:"btn btn-lg btn-link",onClick:function(){z(null),W("enter-name"),V("select-user")}},r.createElement(p.x,{namespace:O,phrase:"cantFindName"})),r.createElement("button",{className:"btn btn-lg btn-dark",onClick:function(){Y&&(V("select-user"),W("confirm"))},disabled:!Y},r.createElement(p.x,{namespace:O,phrase:"continue"}))))),"confirm"===R&&r.createElement(h.o.NarrowContent,{className:"mb-auto text-center"},Y&&r.createElement("div",{className:"".concat(L.confirmationContainer," mx-auto")},r.createElement(S,{recipient:Y})),r.createElement("p",{className:"h2"},r.createElement(p.x,{namespace:O,phrase:I?"welcome":"hi",options:{name:(null==Y?void 0:Y.publicName)||x}})),r.createElement("p",{className:"h2 mb-4"},r.createElement(p.x,{namespace:O,phrase:"ready"})),r.createElement("button",{className:"btn btn-lg btn-dark w-100 mb-3",onClick:function(){return _(this,void 0,void 0,j().mark((function t(){var r;return j().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return N.h.setAnonUser(e.shareId,(null==Y?void 0:Y.publicName)||x.trim()),t.prev=1,r=u.o.createAnonSession(e.shareId,i.Y.getClientSessionData().windowId,(null==Y?void 0:Y.publicName)||x.trim()),t.next=5,n(r);case 5:return t.prev=5,a.Q.Ab.Reload(),t.finish(5);case 8:case"end":return t.stop()}}),t,null,[[1,,5,8]])})))}},r.createElement(p.x,{namespace:O,phrase:"start"})),r.createElement("button",{className:"btn btn-lg btn-link w-100",onClick:function(){C(""),W(M),U(!1),i.Y.resetClientSession()}},r.createElement(p.x,{namespace:O,phrase:"notMyName"}))))))}},75608:(e,t,n)=>{n.d(t,{a:()=>d});var r=n(20354),a=n(30439),o=n(4594),c=n(21750),l=n(43012),i=n(20768),u=n(5112),s=n(60011),m=n(31949),f=n(1575);function d(e){var t=r.a.useBasicFetch(m.N.currentUser()),n=r.a.useBasicFetch(a.o.getShareObject(e)),d=function(){if(!n.data||!t.data)return null;switch(n.data.objectTypeId){case o.E.Video:return f.R.publicVideo(n.data.objectId,e);case o.E.Clip:return l.e.publicClip(n.data.objectId,e);case o.E.Interactive:return i.b.publicInteractiveMetadata(n.data.objectId,e);case o.E.Playlist:return u.C.getSharedPlaylist(n.data.objectId,e);case o.E.Subject:return c.x.classification(n.data.objectId,t.data.id);case o.E.Series:return s.J.sharedSeries(n.data.objectId,e)}}();return r.a.useBasicFetch(d).data}},97027:(e,t,n)=>{n.d(t,{Hq:()=>m,Zf:()=>h});var r=n(32735),a=n(54610),o=n(4594),c=n(67453),l=n(99742);const i={left:"vIypY",leftTextImage:"YViNj",right:"MkD4u",blur:"X6mCh",imageContainer:"bc7kz",imagePosition:"JOhEj",image:"Ef2QR",thumbnail:"Gdurb",tallposter:"fjVNK",cover:"o3j31",linksContainer:"AT9Dk"};function u(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,c,l=[],i=!0,u=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;i=!1}else for(;!(i=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);i=!0);}catch(e){u=!0,a=e}finally{try{if(!i&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(u)throw a}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return s(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?s(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var m=[{bgUrl:l.W.LaunchPad.BG_1},{bgUrl:l.W.LaunchPad.BG_2},{bgUrl:l.W.LaunchPad.BG_3},{bgUrl:l.W.LaunchPad.BG_4},{bgUrl:l.W.LaunchPad.BG_5}],f=[{bgUrl:l.W.LaunchPad.PRODUCT.BG_1},{bgUrl:l.W.LaunchPad.PRODUCT.BG_2},{bgUrl:l.W.LaunchPad.PRODUCT.BG_3},{bgUrl:l.W.LaunchPad.PRODUCT.BG_4},{bgUrl:l.W.LaunchPad.PRODUCT.BG_5},{bgUrl:l.W.LaunchPad.PRODUCT.BG_6},{bgUrl:l.W.LaunchPad.PRODUCT.BG_7},{bgUrl:l.W.LaunchPad.PRODUCT.BG_8},{bgUrl:l.W.LaunchPad.PRODUCT.BG_9}];function d(e){switch(e){case o.E.Video:case o.E.Interactive:case o.E.Clip:return i.thumbnail;case o.E.Subject:case o.E.Playlist:return i.cover;case o.E.Series:return i.tallposter;default:return""}}function h(e){var t,n=u(r.useState(!1),2),o=n[0],l=n[1],s=u(r.useState(""),2),m=s[0],h=s[1],p=c.j.createUrl(e.imageUrl,{size:a.h2.Large}),g=f;return r.useEffect((function(){if(!p&&g&&0!==g.length){var e,t=(e=g)[Math.floor(Math.random()*e.length)];t.bgUrl&&h(t.bgUrl)}}),[]),r.useEffect((function(){if(p){var e=new Image;return e.onload=function(){return l(!0)},e.src=p,function(){return e.onload=null}}}),[]),r.createElement("div",{className:"d-flex"},e.leftComponent?e.leftComponent():r.createElement("div",{className:"".concat(i.left," ").concat(m?"bg-blue d-flex align-items-center":"bg-light")},m?r.createElement("img",{className:"img-fluid",src:m,draggable:!1}):o&&r.createElement(r.Fragment,null,r.createElement("div",{className:i.blur,style:{backgroundImage:"url('".concat(p,"')")}}),r.createElement("div",{className:"".concat(i.imageContainer," ").concat(d(e.objectType))},r.createElement("div",{className:i.imagePosition},r.createElement("img",{className:i.image,src:p,alt:e.title}))))),r.createElement("div",{className:"".concat(i.right," bg-white d-flex flex-column")},r.createElement("div",{className:"position-absolute d-flex align-items-center ".concat(i.linksContainer)},null===(t=e.links)||void 0===t?void 0:t.map((function(e,t){return e.hide?r.createElement(r.Fragment,{key:t}):r.createElement("a",{key:t,href:e.url,className:"info-link fw-semibold",onClick:e.onClick},e.text)}))),e.children))}}}]);
3
- //# sourceMappingURL=8723-7802a8728e-lite.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/8723-7802a8728e-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/forms/form-feedback/FormFeedback.tsx","file:///app/packages/libs/shared/src/components/launchpad/v2/launchpad-v2.scss","file:///app/packages/libs/shared/src/components/launchpad/v2/LaunchpadV2.tsx","file:///app/packages/projects/lite/src/apps/launchpad/views/select-anon-user/components/emoji-avi.scss","file:///app/packages/projects/lite/src/apps/launchpad/views/select-anon-user/components/EmojiAvi.tsx","file:///app/packages/projects/lite/src/apps/launchpad/views/select-anon-user/select-anon-user.scss","file:///app/packages/projects/lite/src/apps/launchpad/views/select-anon-user/SelectAnonUserView.tsx","file:///app/packages/projects/lite/src/apps/share/hooks/useFetchSharedResource.ts","file:///app/packages/projects/lite/src/shared/components/launchpad/launchpad.scss","file:///app/packages/projects/lite/src/shared/components/launchpad/Launchpad.tsx"],"sourcesContent":["import React from 'react';\n\ninterface FormFeedbackProps extends React.PropsWithChildren {\n name: string;\n className?: string;\n}\n\nexport function FormFeedback(props: FormFeedbackProps) {\n return (\n <span id={`${props.name}Error`} className={`${props.className} invalid-feedback d-block`} role='status'>{props.children}</span>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"left\":\"s6wnJ\",\"leftWithImage\":\"UFQ2T\",\"bgCover\":\"Tp9_3\",\"bgFull\":\"AlF2T\",\"right\":\"eoZzJ\",\"rightContent\":\"RVyLM\",\"narrowContent\":\"INvJ0\",\"logo\":\"YHNgA\",\"buttonContainer\":\"ZW85Q\",\"blur\":\"Mtlg9\",\"imageContainer\":\"NxEjh\",\"imagePosition\":\"NN9cV\",\"image\":\"PkJ8J\",\"thumbnail\":\"y0V3Z\",\"tallposter\":\"Wrg5x\",\"cover\":\"x3h8F\",\"contentBody\":\"aLd5V\",\"contentBodyBase\":\"uQ2rm\"};","import React from 'react';\n\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { ClickViewLogo } from 'libs/shared/components/svgs/clickview-logo/ClickViewLogo';\nimport { MasterType } from 'libs/shared/enums/MasterType';\n\nimport styles from './launchpad-v2.scss';\n\nfunction mapObjectTypeToImageClass(objectType: MasterType): string {\n switch (objectType) {\n case MasterType.Video:\n case MasterType.Interactive:\n case MasterType.Clip:\n return styles.thumbnail;\n\n case MasterType.Subject:\n case MasterType.Playlist:\n return styles.cover;\n\n case MasterType.Series:\n return styles.tallposter;\n\n default:\n return '';\n }\n}\n\ninterface LaunchpadV2Props {\n}\n\nexport function LaunchpadV2(props: React.PropsWithChildren<LaunchpadV2Props>): JSX.Element {\n return (\n <div className='d-flex'>\n {props.children}\n </div>\n );\n}\n\ninterface LeftPanelProps {\n className?: string;\n}\n\n\nfunction LeftPanel(props: React.PropsWithChildren<LeftPanelProps>): JSX.Element {\n return (\n <div className={`${styles.left} ${props.className ? props.className : ''}`}>\n {props.children}\n </div>\n );\n}\n\ninterface LeftImageProps {\n objectType?: MasterType;\n title?: string;\n imageUrl?: string;\n fallbackImages: LaunchImage[];\n}\n\ninterface LaunchImage {\n bgUrl: string;\n}\n\nfunction LeftImage(props: LeftImageProps): JSX.Element {\n const [ showImage, setShowImage ] = React.useState(false);\n const [ image, setImage ] = React.useState<string>('');\n\n React.useEffect(() => {\n if (!props.imageUrl) {\n const image = props.fallbackImages[Math.floor(Math.random() * props.fallbackImages.length)];\n setImage(image.bgUrl);\n return;\n }\n\n const img = new Image();\n img.onload = () => setShowImage(true);\n img.src = props.imageUrl;\n return () => img.onload = null;\n }, [props.imageUrl]);\n\n return (\n <div\n className={`${styles.left} ${styles.leftWithImage} ${styles.bgCover} bg-light`}\n style={{ backgroundImage: image ? `url('${image}')` : '' }}\n >\n {showImage &&\n <>\n <div className={styles.blur} style={{ backgroundImage: `url('${props.imageUrl}')` }} />\n <div className={`${styles.imageContainer} ${mapObjectTypeToImageClass(props.objectType)}`}>\n <div className={styles.imagePosition}>\n <img className={styles.image} src={props.imageUrl} alt={props.title} />\n </div>\n </div>\n </>\n }\n </div>\n );\n}\n\ntype ImageSizeType = 'cover' | 'full';\n\ninterface LeftImageWithBackgroundProps {\n imageUrl: string;\n imageSize?: ImageSizeType;\n backgroundColor?: string;\n title?: string;\n}\n\nconst imageSizeMap: {[key in ImageSizeType]: string} = {\n cover: styles.bgCover,\n full: styles.bgFull\n};\n\nfunction LeftImageWithBackground(props: LeftImageWithBackgroundProps): JSX.Element {\n const bgStyles: React.CSSProperties = {\n backgroundImage: props.imageUrl ? `url(\"${props.imageUrl}\")` : ''\n };\n\n if (props.backgroundColor)\n bgStyles.backgroundColor = props.backgroundColor;\n \n return (\n <div\n className={`${styles.left} ${styles.leftWithImage} ${imageSizeMap[props.imageSize || 'cover']} d-flex align-items-center`}\n style={bgStyles}\n title={props.title}\n />\n );\n}\n\ninterface RightPanelProps {\n className?: string;\n}\n\nexport function RightPanel(props: React.PropsWithChildren<RightPanelProps>): JSX.Element {\n return (\n <div className={`${styles.right} ${props.className ? props.className : ''}`}>\n {props.children}\n </div>\n );\n}\n\ninterface HeaderProps {\n bannerComponent?: JSX.Element;\n logoComponent?: () => JSX.Element;\n className?: {\n logoContainer?: string;\n }\n}\n\n\nfunction Header(props: React.PropsWithChildren<HeaderProps>): JSX.Element {\n const LogoComponent = props?.logoComponent || ClickViewLogo;\n \n return (\n <div className='position-relative'>\n {!!props.bannerComponent &&\n props.bannerComponent\n }\n <div className={classNames(styles.logo, 'position-absolute', props.className?.logoContainer)}>\n <LogoComponent />\n </div>\n {props.children}\n </div>\n );\n}\n\ninterface ContentProps {\n className?: string;\n}\n\nfunction Content(props: React.PropsWithChildren<ContentProps>): JSX.Element {\n return (\n <div className={classNames(styles.rightContent, 'd-flex flex-column justify-content-center h-100', props?.className)}>\n {props.children}\n </div>\n );\n}\n\ninterface ContentBodyProps {\n className?: string;\n width?: 'base' | 'full';\n}\n\nconst widthClassNameMap: {[key in ContentBodyProps['width']]: string} = {\n base: styles.contentBodyBase,\n full: ''\n};\n\nfunction ContentBody(props: React.PropsWithChildren<ContentBodyProps>): JSX.Element {\n const widthClassName = widthClassNameMap[props.width || 'base'];\n return (\n <div className={classNames(styles.contentBody, widthClassName, 'm-auto p-3', props.className)}>\n {props.children}\n </div>\n );\n}\n\ninterface NarrowContentProps {\n className?: string;\n}\n\nLaunchpadV2.NarrowContent = NarrowContent;\nfunction NarrowContent(props: React.PropsWithChildren<NarrowContentProps>): JSX.Element {\n return (\n <div className={`${styles.narrowContent} mx-auto w-100 ${props.className ? props.className : ''}`}>\n {props.children}\n </div>\n );\n}\n\ninterface ButtonsProps {\n className?: string;\n}\n\nfunction Buttons(props: React.PropsWithChildren<ButtonsProps>): JSX.Element {\n return (\n <div className={classNames('position-fixed bg-white d-flex align-items-center', styles.buttonContainer, props?.className)}>\n {props.children}\n </div>\n );\n}\n\n/**\n * Intended ussage below:\n * \n * <LaunchpadV2>\n * <LaunchpadV2.Left>\n * // Your LHS content here\n * </LaunchpadV2.Left>\n * <LaunchpadV2.Right>\n * <LaunchpadV2.Header />\n * <LaunchpadV2.Content>\n * // Can omit this if it needs to be full width\n * <LaunchpadV2.ContentBody width=\"...\">\n * // Your main content here\n * </LaunchpadV2.ContentBody>\n * </LaunchpadV2.Content>\n * \n * // Omit this and put your buttons in content\n * // if you want your buttons immediately under your content rather \n * // than at the bottom of the screen\n * <LaunchpadV2.Buttons />\n * \n * </LaunchpadV2.Right>\n * </LaunchpadV2>\n * \n * - Sha\n */\n\nLaunchpadV2.Left = LeftPanel;\nLaunchpadV2.LeftImage = LeftImage;\nLaunchpadV2.LeftImageWithBackground = LeftImageWithBackground;\nLaunchpadV2.Right = RightPanel;\nLaunchpadV2.Header = Header;\nLaunchpadV2.Content = Content;\nLaunchpadV2.ContentBody = ContentBody;\nLaunchpadV2.Buttons = Buttons;\n","// extracted by mini-css-extract-plugin\nexport default {\"aviBackground\":\"oHeDN\",\"aviContainer\":\"J3O78\",\"aviIcon\":\"vNvft\"};","import React from 'react';\n\nimport { AnonymisedUser } from 'libs/shared/apps/share/interfaces/AnonymisedUser';\n\nimport styles from './emoji-avi.scss';\n\nconst AVIS = [\n '🐵', '🐒', '🦍', '🦧', '🐶', '🐕', '🦮', '🐕‍🦺', '🐩', '🐺',\n '🦊', '🦝', '🐱', '🐈', '🐈‍⬛', '🦁', '🐯', '🐅', '🐆', '🐴',\n '🐎', '🦄', '🦓', '🦌', '🐮', '🐂', '🐃', '🐄', '🐷', '🐖',\n '🐗', '🐽', '🐏', '🐑', '🐐', '🦙', '🦒', '🐘', '🦣', '🦏',\n '🦛', '🦘', '🦥', '🦦', '🦨', '🦡', '🐇', '🐁', '🐀', '🦔',\n '🐿️', '🦇', '🐉', '🦎', '🐍', '🐢', '🐊', '🦖', '🦕', '🐙',\n '🦑', '🦐', '🦞', '🦀', '🦪', '🐡', '🐠', '🐟', '🐬', '🐳',\n '🐋', '🦈', '🦭', '🐾'\n];\n\nconst BACKGROUNDS = [\n 'bg-orange',\n 'bg-indigo',\n 'bg-teal',\n 'bg-cyan',\n 'bg-purple',\n 'bg-pink',\n 'bg-red',\n 'bg-yellow',\n 'bg-green',\n 'bg-blue'\n];\n\nfunction getRandom(name: string, collection: string[]): string {\n let charCode = 0;\n\n for (let i = 0; i < name?.length ?? 0; i++) {\n charCode += name.charCodeAt(i);\n }\n \n return collection[charCode % collection.length];\n}\n\ninterface EmojiAviProps {\n recipient: AnonymisedUser;\n}\n\nexport function EmojiAvi(props: EmojiAviProps): JSX.Element {\n return (\n <span className={`h1 d-block mb-0 position-relative ${styles.aviContainer}`}>\n <span\n className={`\n ${getRandom(props.recipient.publicName, BACKGROUNDS)}\n rounded-circle\n position-absolute\n top-0\n start-0\n bottom-0\n end-0\n ${styles.aviBackground}\n `}\n ></span>\n <span\n className={`\n ${styles.aviIcon}\n position-absolute\n top-50\n start-50\n `}\n >\n {getRandom(props.recipient.publicName, AVIS)}\n </span>\n </span>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"confirmationContainer\":\"TIEUw\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { SessionHelper } from 'libs/analytics/utils/SessionHelper';\n\nimport { ShareRequests } from 'libs/shared/apps/share/flight-requests/ShareRequests';\nimport { AnonymisedUser } from 'libs/shared/apps/share/interfaces/AnonymisedUser';\nimport { SharableEntity, ShareViewHelper } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { FormFeedback } from 'libs/shared/components/forms/form-feedback/FormFeedback';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { LaunchpadV2 } from 'libs/shared/components/launchpad/v2/LaunchpadV2';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { LAUNCHPAD_FALLBACK_IMAGES } from 'shared/components/launchpad/Launchpad';\n\nimport { EmbedPlaceHolderHelper } from 'apps/embed/utils/EmbedPlaceholderHelper';\nimport { ShareLinkFilterHelpers } from 'apps/share/filters/share-link-filter/ShareLinkFilterHelpers';\nimport { useFetchSharedResource } from 'apps/share/hooks/useFetchSharedResource';\n\nimport { EmojiAvi } from './components/EmojiAvi';\n\nimport styles from './select-anon-user.scss';\n\nconst namespace = 'launchpad.selectAnonUser';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ntype Step = 'enter-name' | 'select-user' | 'confirm';\n\ninterface SelectAnonUserViewProps {\n shareId: string;\n appLink: Core.AppLink;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function SelectAnonUserView(props: SelectAnonUserViewProps): JSX.Element {\n const fetchAsync = Flight.useGetFetchAsync();\n\n const [ name, setName ] = React.useState(ShareLinkFilterHelpers.getAnonUser(props.shareId) || '');\n const [ isReturning, setIsReturning ] = React.useState(!!ShareLinkFilterHelpers.getAnonUser(props.shareId));\n const [ error, setError ] = React.useState('');\n const [ step, setStep ] = React.useState<Step>('enter-name');\n const [ backStep, setBackStep ] = React.useState<Step>(null);\n const [ selectedUser, setSelectedUser ] = React.useState<AnonymisedUser>(null);\n \n const sharedResource = useFetchSharedResource<SharableEntity>(props.shareId);\n const shareRecipients = Flight.useBasicFetch<AnonymisedUser[]>(ShareRequests.getShareRecipients(props.shareId));\n\n function onSetName(e: React.ChangeEvent<HTMLInputElement>): void {\n setName(e.target.value);\n setError('');\n }\n\n React.useLayoutEffect(() => {\n EmbedPlaceHolderHelper.remove();\n }, []);\n \n React.useEffect(() => {\n if (!shareRecipients.hasCompleted)\n return;\n\n if (ShareLinkFilterHelpers.getAnonUser(props.shareId)) {\n setStep('confirm');\n setBackStep(shareRecipients.data?.length ? 'select-user' : 'enter-name');\n return;\n }\n\n if (shareRecipients.data?.length)\n setStep('select-user');\n }, [shareRecipients.hasCompleted]);\n\n async function onClickGoToQuiz(): Promise<void> {\n ShareLinkFilterHelpers.setAnonUser(props.shareId, selectedUser?.publicName || name.trim());\n try {\n const request = ShareRequests.createAnonSession(\n props.shareId,\n SessionHelper.getClientSessionData().windowId,\n selectedUser?.publicName || name.trim()\n );\n await fetchAsync(request);\n } finally {\n Core.LocationUtils.Reload();\n }\n }\n\n function onSubmit(e: React.FormEvent): void {\n e.preventDefault();\n\n if (!name?.trim()) {\n setError('Please provide a name');\n return;\n }\n\n if (!backStep)\n setBackStep('enter-name');\n setStep('confirm');\n }\n\n function onContinueAvi(): void {\n if (!selectedUser) return;\n\n setBackStep('select-user');\n setStep('confirm');\n }\n\n function onClickRecipient(recipient: AnonymisedUser): void {\n setSelectedUser(recipient);\n }\n\n function onClickNotMyName(): void {\n setName('');\n setStep(backStep);\n setIsReturning(false);\n SessionHelper.resetClientSession();\n }\n\n const hasCompleted = (\n sharedResource &&\n shareRecipients.hasCompleted\n );\n\n if (!hasCompleted)\n return <></>;\n\n const leftImageUrl = ImageHelper.createUrl(ShareViewHelper.getImageUrl(sharedResource), { size: ImageSize.Large });\n\n return (\n <LaunchpadV2>\n <LaunchpadV2.LeftImage\n title={sharedResource.name}\n imageUrl={leftImageUrl}\n objectType={sharedResource.typeId}\n fallbackImages={LAUNCHPAD_FALLBACK_IMAGES}\n />\n <LaunchpadV2.Right>\n <LaunchpadV2.Header />\n <LaunchpadV2.Content>\n <div className='mb-auto text-center'>\n {VideoHelper.isInteractive(sharedResource) && (\n <div className='mb-3 d-lg-none d-block w-75 mx-auto'>\n <BaseImage\n data={VideoHelper.getThumbnail(sharedResource)}\n imageType={ImageType.Thumbnails}\n className='rounded-3 overflow-hidden'\n />\n </div>\n )}\n \n <h1 className='h2'>\n {sharedResource.name}\n </h1>\n </div>\n\n {step === 'enter-name' && (\n <>\n <LaunchpadV2.NarrowContent className='mb-auto'>\n <form onSubmit={onSubmit}>\n <div className='form-group'>\n <label className='h2' htmlFor='name'>\n <Text namespace={namespace} phrase='label' />\n </label>\n <input\n className={`form-control form-control-lg ${error ? 'is-invalid' : ''}`}\n type='text'\n aria-label={getPhrase('placeholder')}\n placeholder={getPhrase('placeholder')}\n autoFocus\n value={name}\n onChange={onSetName}\n autoComplete='off'\n autoCorrect='off'\n autoCapitalize='none'\n spellCheck='false'\n name={'name'}\n id='name'\n />\n {!!error && <FormFeedback name='name'>{error}</FormFeedback>}\n </div>\n </form>\n </LaunchpadV2.NarrowContent>\n <LaunchpadV2.Buttons>\n {!!shareRecipients.data?.length &&\n <button\n className='btn btn-link btn-lg'\n onClick={() => setStep('select-user')}\n >\n <Text namespace={namespace} phrase='back' />\n </button>\n }\n <div className='d-flex justify-content-end w-100'>\n <button\n className='btn btn-lg btn-dark'\n onClick={onSubmit}\n >\n <Text namespace={namespace} phrase='continue' />\n </button>\n </div>\n </LaunchpadV2.Buttons>\n </>\n )}\n\n {step === 'select-user' && (\n <>\n <LaunchpadV2.NarrowContent className='mb-auto'>\n <h2><Text namespace={namespace} phrase='selectName' /></h2>\n <ul className='list-unstyled row'>\n {ArrayHelper.sortBy(shareRecipients.data, a => a.publicName).map((recipient, index) => {\n return (\n <li key={index} className='col-3 p-2'>\n <DivButton\n className={`text-center rounded border py-2 ${selectedUser?.id === recipient.id ? 'border-info bg-light-blue' : ''}`}\n onClick={() => onClickRecipient(recipient)}\n >\n <div className='px-3'>\n <EmojiAvi recipient={recipient} />\n </div>\n \n <p className='mb-0 mt-2 fw-semibold text-truncate'>{recipient.publicName}</p>\n </DivButton>\n </li>\n );\n })}\n </ul>\n </LaunchpadV2.NarrowContent>\n <LaunchpadV2.Buttons>\n <div className='d-flex justify-content-between w-100'>\n <button\n className='btn btn-lg btn-link'\n onClick={() => {\n setSelectedUser(null);\n setStep('enter-name');\n setBackStep('select-user');\n }}\n >\n <Text namespace={namespace} phrase='cantFindName' />\n </button>\n <button\n className='btn btn-lg btn-dark'\n onClick={onContinueAvi}\n disabled={!selectedUser}\n >\n <Text namespace={namespace} phrase='continue' />\n </button>\n </div>\n </LaunchpadV2.Buttons>\n </>\n )}\n\n {step === 'confirm' && (\n <LaunchpadV2.NarrowContent className='mb-auto text-center'>\n {selectedUser &&\n <div className={`${styles.confirmationContainer} mx-auto`}>\n <EmojiAvi recipient={selectedUser} />\n </div>\n }\n <p className='h2'>\n <Text\n namespace={namespace}\n phrase={isReturning ? 'welcome' : 'hi'}\n options={{ name: selectedUser?.publicName || name }}\n />\n </p>\n \n <p className='h2 mb-4'><Text namespace={namespace} phrase='ready' /></p>\n <button\n className='btn btn-lg btn-dark w-100 mb-3'\n onClick={onClickGoToQuiz}\n >\n <Text namespace={namespace} phrase='start' />\n </button>\n <button\n className='btn btn-lg btn-link w-100'\n onClick={onClickNotMyName}\n >\n <Text namespace={namespace} phrase='notMyName' />\n </button>\n </LaunchpadV2.NarrowContent>\n )}\n </LaunchpadV2.Content>\n </LaunchpadV2.Right>\n </LaunchpadV2>\n );\n}\n\n","import { Flight } from 'libs/common/flight';\n\nimport { ShareRequests } from 'libs/shared/apps/share/flight-requests/ShareRequests';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ClassificationRequests } from 'libs/shared/flight-requests/ClassificationRequests';\nimport { ClipRequests } from 'libs/shared/flight-requests/ClipRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { PlaylistRequests } from 'libs/shared/flight-requests/PlaylistRequests';\nimport { SeriesRequests } from 'libs/shared/flight-requests/SeriesRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { CurrentUser, ShareLink } from 'libs/shared/interfaces';\n\nexport function useFetchSharedResource<T>(shareId: string): T {\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const shareLink = Flight.useBasicFetch<ShareLink>(ShareRequests.getShareObject(shareId));\n\n function getResourceRequest(): Flight.Request {\n if (!shareLink.data || !currentUser.data)\n return null;\n\n switch (shareLink.data.objectTypeId) {\n case MasterType.Video:\n return VideoRequests.publicVideo(shareLink.data.objectId, shareId);\n case MasterType.Clip:\n return ClipRequests.publicClip(shareLink.data.objectId, shareId);\n case MasterType.Interactive:\n return InteractiveRequests.publicInteractiveMetadata(shareLink.data.objectId, shareId);\n case MasterType.Playlist:\n return PlaylistRequests.getSharedPlaylist(shareLink.data.objectId, shareId);\n case MasterType.Subject:\n return ClassificationRequests.classification(shareLink.data.objectId, currentUser.data.id);\n case MasterType.Series:\n return SeriesRequests.sharedSeries(shareLink.data.objectId, shareId);\n }\n }\n\n const resourceRequest = getResourceRequest();\n const resource = Flight.useBasicFetch<T>(resourceRequest);\n\n return resource.data;\n}","// extracted by mini-css-extract-plugin\nexport default {\"left\":\"vIypY\",\"leftTextImage\":\"YViNj\",\"right\":\"MkD4u\",\"blur\":\"X6mCh\",\"imageContainer\":\"bc7kz\",\"imagePosition\":\"JOhEj\",\"image\":\"Ef2QR\",\"thumbnail\":\"Gdurb\",\"tallposter\":\"fjVNK\",\"cover\":\"o3j31\",\"linksContainer\":\"AT9Dk\"};","import React from 'react';\n\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nimport styles from './launchpad.scss';\n\nexport const LAUNCHPAD_FALLBACK_IMAGES = [\n { bgUrl: ImageUrls.LaunchPad.BG_1 },\n { bgUrl: ImageUrls.LaunchPad.BG_2 },\n { bgUrl: ImageUrls.LaunchPad.BG_3 },\n { bgUrl: ImageUrls.LaunchPad.BG_4 },\n { bgUrl: ImageUrls.LaunchPad.BG_5 }\n];\n\nexport const LAUNCHPAD_PRODUCT_FALLBACK_IMAGES = [\n { bgUrl: ImageUrls.LaunchPad.PRODUCT.BG_1 },\n { bgUrl: ImageUrls.LaunchPad.PRODUCT.BG_2 },\n { bgUrl: ImageUrls.LaunchPad.PRODUCT.BG_3 },\n { bgUrl: ImageUrls.LaunchPad.PRODUCT.BG_4 },\n { bgUrl: ImageUrls.LaunchPad.PRODUCT.BG_5 },\n { bgUrl: ImageUrls.LaunchPad.PRODUCT.BG_6 },\n { bgUrl: ImageUrls.LaunchPad.PRODUCT.BG_7 },\n { bgUrl: ImageUrls.LaunchPad.PRODUCT.BG_8 },\n { bgUrl: ImageUrls.LaunchPad.PRODUCT.BG_9 }\n];\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst XMAS_URLS: LaunchImage[] = [\n { bgUrl: '/images/launchpad/xmas/2024-promo1-bg.png' },\n { bgUrl: '/images/launchpad/xmas/2024-promo2-bg.png' },\n { bgUrl: '/images/launchpad/xmas/2024-promo3-bg.png' },\n { bgUrl: '/images/launchpad/xmas/2024-promo4-bg.png' },\n { bgUrl: '/images/launchpad/xmas/2024-promo5-bg.png' }\n];\n\nfunction mapObjectTypeToImageClass(objectType: MasterType): string {\n switch (objectType) {\n case MasterType.Video:\n case MasterType.Interactive:\n case MasterType.Clip:\n return styles.thumbnail;\n\n case MasterType.Subject:\n case MasterType.Playlist:\n return styles.cover;\n\n case MasterType.Series:\n return styles.tallposter;\n\n default:\n return '';\n }\n}\n\ninterface LaunchpadLink {\n url: string;\n text: string;\n onClick?: () => void;\n hide?: boolean;\n}\n\ninterface LaunchpadProps {\n objectType?: MasterType;\n title?: string;\n imageUrl?: string;\n links?: LaunchpadLink[];\n leftComponent?: () => JSX.Element;\n}\n\ninterface LaunchImage {\n bgUrl: string;\n}\n\nfunction getRandomImage(urlLists: LaunchImage[]): LaunchImage {\n return urlLists[Math.floor(Math.random() * urlLists.length)];\n}\n\nexport function Launchpad(props: React.PropsWithChildren<LaunchpadProps>): JSX.Element {\n const [ showImage, setShowImage ] = React.useState(false);\n const [ image, setImage ] = React.useState<string>('');\n\n const imageUrl = ImageHelper.createUrl(props.imageUrl, { size: ImageSize.Large });\n const IMAGE_URLS = LAUNCHPAD_PRODUCT_FALLBACK_IMAGES;\n\n React.useEffect(() => {\n if (imageUrl || !IMAGE_URLS || IMAGE_URLS.length === 0)\n return;\n\n const image = getRandomImage(IMAGE_URLS);\n\n if (image.bgUrl) {\n setImage(image.bgUrl);\n }\n }, []);\n\n React.useEffect(() => {\n if (!imageUrl)\n return;\n\n const img = new Image();\n img.onload = () => setShowImage(true);\n img.src = imageUrl;\n return () => img.onload = null;\n }, []);\n\n return (\n <div className='d-flex'>\n { props.leftComponent ?\n props.leftComponent()\n :\n <div\n className={`${styles.left} ${image ? 'bg-blue d-flex align-items-center' : 'bg-light'}`}\n >\n {image ?\n <img className='img-fluid' src={image} draggable={false} /> :\n (showImage &&\n <>\n <div className={styles.blur} style={{ backgroundImage: `url('${imageUrl}')` }} />\n <div className={`${styles.imageContainer} ${mapObjectTypeToImageClass(props.objectType)}`}>\n <div className={styles.imagePosition}>\n <img className={styles.image} src={imageUrl} alt={props.title} />\n </div>\n </div>\n </>\n )\n }\n </div>\n }\n <div className={`${styles.right} bg-white d-flex flex-column`}>\n <div className={`position-absolute d-flex align-items-center ${styles.linksContainer}`}>\n {props.links?.map((link, key) => {\n if (link.hide)\n return <React.Fragment key={key}></React.Fragment>;\n\n return (\n <a key={key} href={link.url} className='info-link fw-semibold' onClick={link.onClick}>\n {link.text}\n </a>\n );\n })}\n </div>\n\n {props.children}\n </div>\n </div>\n );\n}"],"names":["FormFeedback","props","id","name","className","role","children","mapObjectTypeToImageClass","objectType","MasterType","LaunchpadV2","imageSizeMap","cover","full","widthClassNameMap","base","NarrowContent","Left","LeftImage","showImage","setShowImage","image","setImage","imageUrl","img","Image","onload","src","fallbackImages","Math","floor","random","length","bgUrl","style","backgroundImage","alt","title","LeftImageWithBackground","bgStyles","backgroundColor","imageSize","Right","Header","LogoComponent","logoComponent","ClickViewLogo","bannerComponent","logoContainer","Content","ContentBody","widthClassName","width","Buttons","AVIS","BACKGROUNDS","getRandom","collection","charCode","i","charCodeAt","EmojiAvi","recipient","publicName","namespace","getPhrase","LanguageService","SelectAnonUserView","fetchAsync","ShareLinkFilterHelpers","shareId","setName","isReturning","setIsReturning","error","setError","step","setStep","backStep","setBackStep","selectedUser","setSelectedUser","sharedResource","useFetchSharedResource","shareRecipients","ShareRequests","onSubmit","e","preventDefault","trim","hasCompleted","data","leftImageUrl","ImageHelper","ShareViewHelper","size","typeId","VideoHelper","BaseImage","imageType","htmlFor","Text","phrase","type","placeholder","autoFocus","value","onChange","target","autoComplete","autoCorrect","autoCapitalize","spellCheck","onClick","ArrayHelper","a","map","index","key","DivButton","onClickRecipient","disabled","options","request","SessionHelper","windowId","currentUser","shareLink","resourceRequest","objectTypeId","objectId","getResourceRequest","LAUNCHPAD_FALLBACK_IMAGES","ImageUrls","LAUNCHPAD_PRODUCT_FALLBACK_IMAGES","Launchpad","IMAGE_URLS","urlLists","leftComponent","draggable","links","link","hide","href","url","text"],"sourceRoot":""}