cafe-video-player 2.0.32 → 2.0.34

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.
@@ -13,7 +13,7 @@ import ge from 'next/legacy/image';
13
13
  import { createPortal } from 'react-dom';
14
14
  import Bo from 'next/dynamic';
15
15
 
16
- e();e();e();var Jo=()=>{let{details:e,params:o}=ea(({videoData:{details:l,params:r}})=>({details:l,params:r}),shallowEqual);return jsx("div",{className:`pl-w-full pl-max-w-[80%] pl-truncate pl-text-left pl-ml-4 pl-text-[16px] pl-font-normal pl-text-white pl-break-words pl-self-start animate__animated animate__faster ${ca("isActiveElements")?"animate__fadeIn pl-opacity-100":"pl-opacity-0 animate__fadeOut"}`,children:ca("hasTitle")?e.title:o.id})},Ct=Jo;e();var el=()=>jsxs("div",{className:`pl-relative animate__animated animate__faster ${ca("isActiveElements")?"animate__fadeIn pl-pointer-events-auto":"animate__fadeOut pl-pointer-events-none"}`,children:[jsx(ge,{src:a.lock,alt:"lock-icon",width:20,height:20,onClick:()=>h("unlock")}),!localStorage.getItem("unlock-click")&&jsx("p",{className:"pl-text-[10px] pl-text-black/[0.87] pl-bg-[#F7F7F7] pl-absolute pl-left-0 pl-px-4 pl-py-3 pl-rounded-[8px] pl-w-max",children:"\u0628\u0631\u0627\u06CC \u0628\u0627\u0632 \u06A9\u0631\u062F\u0646 \u0642\u0641\u0644\u060C \u06A9\u0644\u06CC\u06A9 \u06A9\u0646\u06CC\u062F"})]}),kt=el;var ll=()=>(ea(({controller:{lock:e,activeElements:o}})=>({lock:e,activeElements:o}),shallowEqual),jsxs("div",{className:`pl-flex pl-items-start pl-justify-end pl-mx-8 pl-mt-5 ${ca("isTouchScreenPortrait")?"pl-h-[16px]":"pl-h-[60px]"}`,children:[ca("showTitle")&&jsx(Ct,{}),ca("isLock")&&jsx(kt,{})]})),It=ll;e();e();var nl=()=>(ea(({controller:{play:e}})=>({play:e}),shallowEqual),ea(({videoData:{videoElementSizeInfo:e,params:o}})=>({videoElementSizeInfo:e,params:o}),shallowEqual),jsx("div",{className:`${!ca("isTouchScreen")&&"hover:pl-scale-125"} pl-transition-transform pl-ease-in-out pl-cursor-pointer`,onContextMenu:e=>e.preventDefault(),children:jsx(ge,{alt:"",src:ca("isPlay")?a.bigPause:a.bigPlay,width:40,height:40,onClick:e=>a$1(e),onDoubleClick:e=>e.stopPropagation(),className:`${ca("isPlay")?"pl-big-play-icon":"pl-big-pause-icon"}`})})),At=nl;var pl=()=>{let[e,o]=useState(!1),[l,r]=useState(!1),{firstPlay:i}=ea(({controller:{lock:a,firstPlay:f}})=>({lock:a,firstPlay:f}),shallowEqual),{activeElements:s,isLoading:u}=ea(({controller:{activeElements:a,isLoading:f}})=>({activeElements:a,isLoading:f}),shallowEqual);return useEffect(()=>{let a=null;return ca("isFirstPlay")||ca("isActiveElements")?a=setTimeout(()=>r(!0),100):r(!1),()=>clearTimeout(a)},[s]),useEffect(()=>{let a;return ca("isLoading")?a=setTimeout(()=>o(!0),ca("isFirstPlay")?0:b$1):o(!1),()=>{clearTimeout(a),o(!1);}},[u,i]),jsx("main",{className:"pl-flex-1 pl-mt-1",children:e?jsx(a$3,{}):jsx(Fragment,{children:l&&!ca("isLock")&&jsx("div",{id:"main-content",className:`pl-h-full pl-flex pl-justify-center pl-items-center pl-text-center pl-relative ${ca("isActiveElements")?"pl-pointer-events-auto":"pl-pointer-events-none"}`,children:jsxs("div",{onClick:a=>a.stopPropagation(),className:"pl-flex pl-justify-center pl-gap-8 pl-items-center pl-w-max",style:{zIndex:4},children:[!ca("isFirstPlay")&&jsx(a$4,{type:"forward"}),jsx(At,{}),!ca("isFirstPlay")&&jsx(a$4,{type:"backward"})]})})})})},_t=pl;e();e();e();e();var He=e=>{let{videoElementSizeInfo:o}=M$1.getState().videoData,{duration:l}=M$1.getState().controller,r=e.clientX!==void 0?e.clientX:e.touches[0].clientX;if(r<=o.right&&r>0)return (r-o.left)/o.width*l},Y=e=>{let{videoElementSizeInfo:o}=M$1.getState().videoData,l=e.clientX!==void 0?e.clientX:e.touches[0].clientX;if(l<=o.right&&l>0)return l-o.left},Bt=e=>{let{duration:o}=M$1.getState().controller;return e*ia()/o},ue=e=>{e&&(e.style.opacity="0.0",e.style.pointerEvents="none",e.style.zIndex=-2);},ml=e=>{e.style.display="block",e.style.zIndex=5,e.style.opacity=M$1.getState().videoData.details.vtt?"1.0":"0.6",e.style.pointerEvents="auto",e.style.transition="opacity 1s ease-out";},cl=(e,o)=>{let{videoElementSizeInfo:l}=M$1.getState().videoData,r=document.getElementsByClassName("pl-progressTooltip")[0],i=document.getElementById("parent-player");r&&i&&(Y(e)>r.getBoundingClientRect().width/2&&Y(e)<l.right-l.left-r.getBoundingClientRect().width/2?o.style.left=`${Y(e)-r.offsetWidth/2}px`:Y(e)<(i.offsetLeft===0?r.offsetWidth:i.offsetLeft)?o.style.left="0px":fa().offsetLeft+fa().offsetWidth<Y(e)+r.offsetWidth&&(o.style.left=`${fa().offsetWidth-r.offsetWidth}px`));},dl=(e,o,l)=>{o&&ml(o),M$1.getState().videoData.details.vtt?cl(e,o):o.style.left=`${Y(e)-30}px`,M$1.dispatch(q(Number(He(e)))),l.textContent=`${P(He(e))}`;},fe=(e,o=!1)=>{let{videoElementSizeInfo:l}=M$1.getState().videoData,r=document.querySelector(".pl-progressTooltip"),i=document.querySelector(".pl-progressTimeTooltip"),s=e.clientX!==void 0?e.clientX:e.touches[0].clientX;r&&i&&s<=l.right&&s>l.left?(dl(e,r,i),o&&setTimeout(()=>ue(r),2e3)):ue(r);},zt=e=>{let o=e.clientX!==void 0?e.clientX:e.touches[0].clientX;ha()&&(o<=e.view.innerWidth&&o>0?ha().style.width=`${Y(e)}px`:o<=e.view.innerWidth?ha().style.width=0:o>0&&(ha().style.width="100%"));},Vt=(e,o,l$1)=>{e.preventDefault(),e.stopPropagation(),l$1(!0);let r=M$1.dispatch,i=e.clientX!==void 0?e.clientX:e.touches[0].clientX;i<=e.view.innerWidth&&i>0&&(r(k$1(!0)),r(l(!0)),sessionStorage.setItem("previousVideoTime",String(fa().currentTime)),e.target.setPointerCapture(e.pointerId),o.length>0&&o.map(s=>clearTimeout(s)));},Ue=e=>{e.preventDefault(),e.stopPropagation();let o=M$1.dispatch,{activePointerProgressBar:l$1}=M$1.getState().controller,{left:r}=M$1.getState().videoData.videoElementSizeInfo,i=e.clientX!==void 0?e.clientX:e.touches[0].clientX,s=document.querySelector(".pl-progressTooltip");i>r?(s&&(s.style.display="block !important",s.style.pointerEvents="auto"),l$1&&(o(l(!0)),fe(e),zt(e),fa().pause())):s&&(s.style.display="none !important",s.style.pointerEvents="none");},qt=(e,o,l$1,r)=>{r(!1),e.preventDefault(),e.stopPropagation();let i$1=M$1.dispatch,{duration:s}=M$1.getState().controller,{left:u,right:a}=M$1.getState().videoData.videoElementSizeInfo,f=M$1.getState().videoData.params;e.target.removeEventListener("pointermove",Ue);let c=e.clientX!==void 0?e.clientX:e.touches[0].clientX,S=0;c>u&&c<a?S=He(e):c<u?S=0:c>0&&(S=s),ca("isStaticFormat")||i(fa().currentTime,S),fa().currentTime=S,ca("hasOnChangeCurrentTime")&&f.onChangeCurrentTime(S),M$1.getState().controller.activePointerProgressBar&&(i$1(k$1(!1)),i$1(l(!1)),fa().play(),fe(e,!0),sessionStorage.setItem("current-time",String(S)),zt(e),ul(e,i$1,o,l$1));},ul=(e,o,l,r)=>{let i=r,s=setTimeout(()=>{let{settingPopover:u}=M$1.getState().popovers,{delayTurnOffControlbar:a}=M$1.getState().controller;e.pointerType==="touch"&&!u&&a&&o(f(!1));},a$5);i.push(s),l(i);},Rt=()=>{let e=Date.now();fa().play().then(()=>la(oa(Date.now()-e)));},Xt=e=>fe(e),Ht=()=>{let e=document.querySelector(".pl-progressTooltip");ue(e);},fl=e=>{let o=e.split("."),r=o[0].split(":");return {milliseconds:parseInt(o[1],10)||0,seconds:parseInt(r.pop(),10)||0,minutes:parseInt(r.pop(),10)||0,hours:parseInt(r.pop(),10)||0}},Ot=e=>{let o=fl(e);return parseInt(o.hours*(60*60)+o.minutes*60+o.seconds+o.milliseconds/1e3,10)},hl=e=>{let o=e.split(/#xywh=/i),l=o[0],i=o[1].match(/[0-9]+/gi);return {x:i[0],y:i[1],w:i[2],h:i[3],image:l}},vl=(e,o)=>e.indexOf("//")>=0?e:o.indexOf("//")===0?[o.replace(/\/$/gi,""),e.trim()].join("/"):o.indexOf("//")>0?[o.trim(),e.trim()].join("/"):e,gl=(e,o)=>{let l={},r=o.split(/\/\w+\.vtt\s?/)[0];if(e=vl(e,r),!e.match(/#xywh=/i))return l.background='url("'+e+o.split(/\/\w+\.vtt\s?/)[1]+'")',l;let i=hl(e);return l.background='url("'+i.image+o.split(/\/\w+\.vtt\s?/)[1]+'") no-repeat -'+i.x+"px -"+i.y+"px",l.width=i.w+"px",l.height=i.h+"px",l.url=i.image,l},Ut=(e,o)=>{fetch(e).then(l=>{if(!l.ok)throw M$1.dispatch(r({...M$1.getState().videoData.details,vtt:void 0,vtt_mobile:void 0})),new Error("Network response was not ok");return l.text()}).then(l=>{let r=[];l.split(/[\r\n][\r\n]/i).forEach(s=>{if(s.match(/([0-9]{2}:)?([0-9]{2}:)?[0-9]{2}(.[0-9]{3})?( ?--> ?)([0-9]{2}:)?([0-9]{2}:)?[0-9]{2}(.[0-9]{3}).*/gi)){let u=s.split(/[\r\n]/i),f=u[0].split(/ ?--> ?/i),c=f[0],S=f[1],d=u[1],b=gl(d,e);r.push({start:Ot(c),end:Ot(S),css:b});}}),o(r);}).catch(l=>{console.error("Error fetching file:",l);});},Wt=(e,o,l)=>{for(let r=0;r<o.length;++r){let i=o[r];if(e>=i.start&&e<i.end){if(i.css.url&&!l[i.css.url]){let s={background:i.css.background,width:i.css.width,height:i.css.height};return l[i.css.url]=s,s}else if(i.css.url)return l[i.css.url]}}};var Sl=()=>{let{details:e}=ea(({videoData:{details:a}})=>({details:a}),shallowEqual),{tooltipTime:o}=ea(({controller:{tooltipTime:a,activeElements:f,isFullScreen:c}})=>({tooltipTime:a,activeElements:f,isFullScreen:c}),shallowEqual),l={},[r,i]=useState(void 0),[s,u]=useState(ca("isTouchScreen")?e.vtt_mobile:e.vtt);return useEffect(()=>{u(e.vtt_mobile);},[e.vtt_mobile]),useEffect(()=>{s&&Ut(e.vtt_mobile,i);},[s]),ca("isActiveElements")?jsxs("div",{className:`pl-flex pl-flex-col pl-progressTooltip pl-absolute pl-bottom-[calc(100%+10px)] pl-px-[10px] pl-pt-[5px] pl-mr-[-25px] pl-text-white pl-text-[14px] ${s&&r?"":"pl-bg-z-gray-700"} pl-rounded-[6px] pl-opacity-0`,children:[s&&!!r&&jsx("div",{className:"pl-flex-1 pl-border pl-border-white pl-rounded-[8px] pl-mb-2",children:jsx("div",{className:"pl-rounded-[8px]",style:Wt(o,r,l)})}),jsx("div",{className:"pl-flex pl-items-center pl-justify-center pl-progressTimeTooltip pl-text-white !pl-opacity-100"})]}):jsx(Fragment,{})},Yt=memo(Sl);e();e();var Tl=(e,o)=>{useEffect(()=>{let l=r=>{!e.current||e.current.contains(r.target)||o(r);};return document.addEventListener("mousedown",l),document.addEventListener("touchstart",l),()=>{document.removeEventListener("mousedown",l),document.removeEventListener("touchstart",l);}},[e,o]);},z=Tl;e();var Pl=({name:e,className:o,dataMarker:l})=>jsx("img",{"data-marker":l,src:`${ja()}/${e}.png`,alt:e,className:o}),he=Pl;var Nl=()=>{da();let {duration:o,activeElements:l}=ea(({controller:{duration:m,activeElements:T,isFullScreen:H}})=>({duration:m,activeElements:T,isFullScreen:H}),shallowEqual),{markers:r}=ea(({videoData:{markers:m,videoElementSizeInfo:T}})=>({markers:m,videoElementSizeInfo:T}),shallowEqual),[i$1,s]=useState(void 0),[u,a]=useState([]),[f,c]=useState({}),[S,d]=useState(!1),b=m=>o?ia()*m/o:0,F=(m,T,H,pe,K,U,se,Oe)=>{m.stopPropagation();let D=24*T/(ia()+5),j=[],Zo=0;Oe.map(xe=>{xe.time>T-D&&xe.time<T+D&&(j.push(xe),Zo+=xe.time);}),j.length>1?a(j):(j=[],a([]),h(m,T,H,pe,K,U,se));},h=(m,T,H,pe,K,U,se)=>{m.stopPropagation(),fe(m,se),i(fa().currentTime,T),fa().currentTime=T,ha()&&(ha().style.width=b(T)),la(Ba(H,T,pe,K,U));};useEffect(()=>{ca("isActiveElements")||a([]);},[l]);let k=useRef(null);z(k,()=>a([])),useEffect(()=>{if(u.length>0){let m=aa(document.getElementsByClassName("pl-overlapMarkers")[0]);if(m==="inViewport")return d(!0),c({left:b(u[0].time)});if(m==="OutViewPortFromLeft")return d(!1),c({left:0});if(m==="OutViewPortFromRight")return d(!1),c({right:0})}},[u,document.getElementsByClassName("pl-overlapMarkers")[0]]);let L=m=>{m.preventDefault(),ca("isTouchScreen")&&s(Number(m.target.getAttribute("data-marker")));};return jsxs(Fragment,{children:[r.map(m=>jsx("div",{onContextMenu:L,"data-marker":m.time,onClick:T=>F(T,m.time,m.id,m.title,m.description,m.sticker,!0,r),onDoubleClick:T=>T.stopPropagation(),children:jsxs("div",{className:`pl-emoji-image pl-absolute pl-bottom-[200%] pl-bg-z-gray-700/[0.4] pl-rounded-[6px] pl-p-1 ${ca("isTouchScreenPortrait"),"pl-mb-5"} pl-ml-[-12px] pl-cursor-pointer`,style:{left:b(m.time),zIndex:6},"data-marker":m.time,children:[m.isPersonal!==null&&m.isPersonal!==void 0&&jsx("div",{className:"pl-absolute pl-rounded-full pl-top-[-2px] pl-right-[-1px] pl-bg-main pl-w-2 pl-h-2"}),jsx(he,{dataMarker:m.time,name:m.sticker,className:"pl-w-[16px] pl-h-[16px] !pl-max-w-max"})]})},m.id)),u.length>0&&jsx("div",{className:`pl-overlapMarkers ${S?"pl-overlayMarkersInViewport":"pl-overlayMarkersOutViewport"} pl-absolute pl-bottom-[45px] pl-px-1 pl-py-2 pl-flex pl-gap-3 pl-flex-row-reverse pl-justify-end pl-bg-z-gray-700/[0.4] pl-rounded-[6px] pl-ml-[-10px] animate__animated animate__fadeInUp pl-opacity-100`,ref:k,style:f,children:u.map(m=>jsx("div",{className:"pl-emoji-image pl-rounded-[6px] pl-cursor-pointer","data-marker":m.time,onClick:T=>h(T,m.time,m.id,m.title,m.description,m.sticker,!0),onDoubleClick:T=>T.stopPropagation(),children:jsx(he,{dataMarker:m.time,name:m.sticker,className:"pl-w-[24px] pl-h-[24px] !pl-max-w-max"})},m.id))})]})},eo=memo(Nl);var Ml=()=>{let[e,o]=useState(!1);useEffect(()=>{ue(document.querySelector(".progressTooltip"));},[]);let{duration:l,currentTime:r,bufferedTimeWidth:i}=ea(({controller:{duration:a,currentTime:f,bufferedTimeWidth:c}})=>({duration:a,currentTime:f,bufferedTimeWidth:c}),shallowEqual);ea(({videoData:{params:a,videoElementSizeInfo:f}})=>({params:a,videoElementSizeInfo:f}),shallowEqual);let[s,u]=useState([]);return jsxs("div",{className:`${ca("isTouchScreenPortrait")?"pl-order-1":"pl-order-none"} pl-relative`,children:[jsxs("div",{className:"pl-relative",children:[jsx(Yt,{}),jsx(eo,{})]}),jsx("div",{className:"pl-w-full pl-flex pl-items-end",onPointerDown:a=>Vt(a,s,o),onPointerMove:Ue,onPointerUp:a=>qt(a,u,s,o),onMouseMove:Xt,onMouseOut:Ht,onClick:Rt,onDoubleClick:a=>a.stopPropagation(),children:jsxs("div",{id:"progress-area",className:"pl-w-full pl-absolute",children:[jsx("div",{className:"pl-w-full pl-h-[40px]"}),jsxs("div",{id:"time-progress-area",className:"!pl-w-full !pl-h-[5px] pl-transition-transform pl-duration-300 pl-m-auto pl-cursor-pointer !pl-bg-gray-highLight pl-rounded",style:{transform:e?"scaleY(1.8)":"unset"},children:[jsx("div",{id:"time-progress-buffer",className:"pl-absolute pl-h-[5px] pl-bg-z-gray-400/[0.7] pl-rounded",style:{width:`${i}%`}}),jsx("div",{id:"time-progress-bar",className:`pl-h-[5px] pl-rounded pl-relative pl-cursor-pointer pl-bg-primary before:pl-bg-primary before:pl-inline-block before:pl-w-4 before:pl-h-4 ${e&&"before:pl-w-7 before:pl-h-3"}`,style:{width:`${r/l*ia()}px`}})]})]})})]})},lo=Ml;e();e();e();var Al=({title:e,className:o})=>jsx("span",{className:`pl-absolute pl-w-max pl-bg-paper pl-text-white/[0.9] ${ca("isFullScreen")?"pl-bottom-[300%]":"pl-bottom-[270%]"} pl-rounded-[8px] pl-text-[10px] pl-px-4 pl-py-[13px] pl-font-normal ${o}`,children:e}),M=Al;var Bl=()=>{let{isFullScreen:e}=ea(({controller:{firstPlay:i,isFullScreen:s}})=>({firstPlay:i,isFullScreen:s}),shallowEqual),[o,l]=useState(!1),r=da();return useEffect(()=>{ca("isFirstPlay")||r(f(!1));},[e]),jsxs("div",{className:"pl-relative pl-flex pl-items-center",children:[jsx(ge,{src:ca("isFullScreen")?a.nonFullScreen:a.fullScreen,alt:"fullScreen-icon",className:"pl-cursor-pointer",width:20,height:20,onMouseOver:()=>!ca("isTouchScreen")&&l(!0),onMouseLeave:()=>!ca("isTouchScreen")&&l(!1),onClick:()=>{f$1(),g();}}),o&&jsx(M,{title:`${ca("isFullScreen")?"\u062E\u0631\u0648\u062C \u0627\u0632":""} \u062A\u0645\u0627\u0645 \u0635\u0641\u062D\u0647`})]})},io=Bl;e();var Xl=()=>{let[e,o]=useState(!1),l=da(),{params:r,details:i}=ea(({videoData:{params:s,details:u}})=>({params:s,details:u}),shallowEqual);return jsxs("div",{className:"pl-relative pl-flex pl-items-center",children:[jsx(ge,{alt:"",onMouseOver:()=>!ca("isTouchScreen")&&o(!0),onMouseLeave:()=>!ca("isTouchScreen")&&o(!1),src:a.pictureInPicture,width:20,height:20,className:"pl-flex pl-cursor-pointer",onClick:()=>{r.onClickMiniPlayerIcon&&(localStorage.removeItem("close-miniPlayer"),fa().pause(),l(a$2(!1)),r.onClickMiniPlayerIcon({video:i||void 0,id:r.type==="vod"?r.id:window.btoa(r.id),type:r.type,currentTime:fa().currentTime}));}}),e&&jsx(M,{title:"\u062A\u0635\u0648\u06CC\u0631 \u062F\u0631 \u062A\u0635\u0648\u06CC\u0631 "})]})},po=Xl;e();var Zl=()=>{let[e,o]=useState(!1),l=da(),{settings:r}=ea(({user:{settings:a}})=>({settings:a}),shallowEqual),i=useRef(r.volume),s=()=>{if(i.current!==r.volume){let{settings:a}=M$1.getState().user;la(sa(i.current,a.volume)),i.current=a.volume,l(G({...a,volume:a.volume}));}},u=a=>{let{settings:f}=M$1.getState().user;a==="mute"?(d(0),la(sa(f.volume,0))):(la(sa(f.volume,100)),d(100));};return jsxs("div",{className:"pl-relative pl-inline-flex pl-items-center pl-gap-2 pl-sound-icon",children:[!ca("isTouchScreen")&&jsx("input",{onMouseUp:s,type:"range",min:"0",max:"100",value:r.volume,onChange:a=>d(+a.target.value),className:"pl-soundVolume pl-cursor-pointer rounded-full",style:{background:`linear-gradient(to right, white ${r.volume}%, rgba(255,255,255,0.3) 0)`}}),jsxs("div",{className:"pl-relative pl-flex pl-items-center",children:[jsx(ge,{src:ca("hasSound")?a.unMute:a.mute,alt:ca("hasSound")?"unmute-icon":"mute-icon",className:"pl-flex pl-items-center pl-cursor-pointer",width:20,height:20,onClick:()=>ca("hasSound")?u("mute"):u("unmute"),onDoubleClick:a=>a.stopPropagation(),onMouseOver:()=>!ca("isTouchScreen")&&o(!0),onMouseLeave:()=>!ca("isTouchScreen")&&o(!1)}),e&&jsx(M,{className:"pl-left-0",title:ca("hasSound")?"\u0635\u062F\u0627":"\u0628\u06CC\u200C\u0635\u062F\u0627"})]})]})},ao=Zl;e();e();var co=forwardRef(({children:e,status:o,onClose:l,type:r,classNames:i,parentClassNames:s,styles:u,isBlurBackground:a,isFullHeight:f=!1,isHeader:c,isHasCatchUpLineOnTop:S=!1,animation:d,scrollbar:b=!1,isFocusOnInput:F=!1},h)=>{let[k,L]=useState(o),[m,T]=useState(0),[H,pe]=useState(0),{videoElementSizeInfo:K}=ea(({videoData:{videoElementSizeInfo:D}})=>({videoElementSizeInfo:D}),shallowEqual),U=useRef(0);useEffect(()=>{let D;return o?L(!0):D=setTimeout(()=>{l(!1),T(0),L(!1);},500),()=>clearTimeout(D)},[o]);let se=D=>{let j=document.getElementById("popover-content");U.current||(U.current=window.innerHeight-K.top-j?.getBoundingClientRect().top),D.stopPropagation(),window.innerHeight-K.top-D.touches[0].clientY<U.current&&T(window.innerHeight-D.touches[0].clientY),pe(1000005);},Oe=()=>{l();},Be=jsxs(Fragment,{children:[a&&jsx("div",{className:`pl-bg-black/[0.5] pl-w-screen pl-h-screen pl-fixed pl-top-0 pl-right-0 animate__animated animate__faster ${o?"animate__fadeIn":"animate__fadeOut"}`,style:{zIndex:1000001}}),jsx("div",{className:`${r==="modal"&&"pl-fixed pl-top-0 pl-left-0 pl-flex pl-w-full pl-h-full pl-justify-center pl-items-end sm:pl-items-center"} ${s}`,style:{zIndex:f&&!F?H:1000004},children:jsx("div",{className:`pl-flex pl-flex-col pl-rounded-[8px] animate__animated animate__faster pl-bg-white/[0.9]
16
+ e();e();e();var Jo=()=>{let{details:e,params:o}=ea(({videoData:{details:l,params:r}})=>({details:l,params:r}),shallowEqual);return jsx("div",{className:`pl-w-full pl-max-w-[80%] pl-truncate pl-text-left pl-ml-4 pl-text-[16px] pl-font-normal pl-text-white pl-break-words pl-self-start animate__animated animate__faster ${ca("isActiveElements")?"animate__fadeIn pl-opacity-100":"pl-opacity-0 animate__fadeOut"}`,children:ca("hasTitle")?e.title:o.id})},Ct=Jo;e();var el=()=>jsxs("div",{className:`pl-relative animate__animated animate__faster ${ca("isActiveElements")?"animate__fadeIn pl-pointer-events-auto":"animate__fadeOut pl-pointer-events-none"}`,children:[jsx(ge,{src:a.lock,alt:"lock-icon",width:20,height:20,onClick:()=>h("unlock")}),!localStorage.getItem("unlock-click")&&jsx("p",{className:"pl-text-[10px] pl-text-black/[0.87] pl-bg-[#F7F7F7] pl-absolute pl-left-0 pl-px-4 pl-py-3 pl-rounded-[8px] pl-w-max",children:"\u0628\u0631\u0627\u06CC \u0628\u0627\u0632 \u06A9\u0631\u062F\u0646 \u0642\u0641\u0644\u060C \u06A9\u0644\u06CC\u06A9 \u06A9\u0646\u06CC\u062F"})]}),kt=el;var ll=()=>(ea(({controller:{lock:e,activeElements:o}})=>({lock:e,activeElements:o}),shallowEqual),jsxs("div",{className:`pl-flex pl-items-start pl-justify-end pl-mx-8 pl-pt-8 ${ca("isTouchScreenPortrait")?"pl-h-[16px]":"pl-h-[60px]"}`,children:[ca("showTitle")&&jsx(Ct,{}),ca("isLock")&&jsx(kt,{})]})),It=ll;e();e();var nl=()=>(ea(({controller:{play:e}})=>({play:e}),shallowEqual),ea(({videoData:{videoElementSizeInfo:e,params:o}})=>({videoElementSizeInfo:e,params:o}),shallowEqual),jsx("div",{className:`${!ca("isTouchScreen")&&"hover:pl-scale-125"} pl-transition-transform pl-ease-in-out pl-cursor-pointer`,onContextMenu:e=>e.preventDefault(),children:jsx(ge,{alt:"",src:ca("isPlay")?a.bigPause:a.bigPlay,width:40,height:40,onClick:e=>a$1(e),onDoubleClick:e=>e.stopPropagation(),className:`${ca("isPlay")?"pl-big-play-icon":"pl-big-pause-icon"}`})})),At=nl;var pl=()=>{let[e,o]=useState(!1),[l,r]=useState(!1),{firstPlay:i}=ea(({controller:{lock:a,firstPlay:f}})=>({lock:a,firstPlay:f}),shallowEqual),{activeElements:s,isLoading:u}=ea(({controller:{activeElements:a,isLoading:f}})=>({activeElements:a,isLoading:f}),shallowEqual);return useEffect(()=>{let a=null;return ca("isFirstPlay")||ca("isActiveElements")?a=setTimeout(()=>r(!0),100):r(!1),()=>clearTimeout(a)},[s]),useEffect(()=>{let a;return ca("isLoading")?a=setTimeout(()=>o(!0),ca("isFirstPlay")?0:b$1):o(!1),()=>{clearTimeout(a),o(!1);}},[u,i]),jsx("main",{className:"pl-flex-1 pl-mt-1",children:e?jsx(a$3,{}):jsx(Fragment,{children:l&&!ca("isLock")&&jsx("div",{id:"main-content",className:`pl-h-full pl-flex pl-justify-center pl-items-center pl-text-center pl-relative ${ca("isActiveElements")?"pl-pointer-events-auto":"pl-pointer-events-none"}`,children:jsxs("div",{onClick:a=>a.stopPropagation(),className:"pl-flex pl-justify-center pl-gap-8 pl-items-center pl-w-max",style:{zIndex:4},children:[!ca("isFirstPlay")&&jsx(a$4,{type:"forward"}),jsx(At,{}),!ca("isFirstPlay")&&jsx(a$4,{type:"backward"})]})})})})},_t=pl;e();e();e();e();var He=e=>{let{videoElementSizeInfo:o}=M$1.getState().videoData,{duration:l}=M$1.getState().controller,r=e.clientX!==void 0?e.clientX:e.touches[0].clientX;if(r<=o.right&&r>0)return (r-o.left)/o.width*l},Y=e=>{let{videoElementSizeInfo:o}=M$1.getState().videoData,l=e.clientX!==void 0?e.clientX:e.touches[0].clientX;if(l<=o.right&&l>0)return l-o.left},Bt=e=>{let{duration:o}=M$1.getState().controller;return e*ia()/o},ue=e=>{e&&(e.style.opacity="0.0",e.style.pointerEvents="none",e.style.zIndex=-2);},ml=e=>{e.style.display="block",e.style.zIndex=5,e.style.opacity=M$1.getState().videoData.details.vtt?"1.0":"0.6",e.style.pointerEvents="auto",e.style.transition="opacity 1s ease-out";},cl=(e,o)=>{let{videoElementSizeInfo:l}=M$1.getState().videoData,r=document.getElementsByClassName("pl-progressTooltip")[0],i=document.getElementById("parent-player");r&&i&&(Y(e)>r.getBoundingClientRect().width/2&&Y(e)<l.right-l.left-r.getBoundingClientRect().width/2?o.style.left=`${Y(e)-r.offsetWidth/2}px`:Y(e)<(i.offsetLeft===0?r.offsetWidth:i.offsetLeft)?o.style.left="0px":fa().offsetLeft+fa().offsetWidth<Y(e)+r.offsetWidth&&(o.style.left=`${fa().offsetWidth-r.offsetWidth}px`));},dl=(e,o,l)=>{o&&ml(o),M$1.getState().videoData.details.vtt?cl(e,o):o.style.left=`${Y(e)-30}px`,M$1.dispatch(q(Number(He(e)))),l.textContent=`${P(He(e))}`;},fe=(e,o=!1)=>{let{videoElementSizeInfo:l}=M$1.getState().videoData,r=document.querySelector(".pl-progressTooltip"),i=document.querySelector(".pl-progressTimeTooltip"),s=e.clientX!==void 0?e.clientX:e.touches[0].clientX;r&&i&&s<=l.right&&s>l.left?(dl(e,r,i),o&&setTimeout(()=>ue(r),2e3)):ue(r);},zt=e=>{let o=e.clientX!==void 0?e.clientX:e.touches[0].clientX;ha()&&(o<=e.view.innerWidth&&o>0?ha().style.width=`${Y(e)}px`:o<=e.view.innerWidth?ha().style.width=0:o>0&&(ha().style.width="100%"));},Vt=(e,o,l$1)=>{e.preventDefault(),e.stopPropagation(),l$1(!0);let r=M$1.dispatch,i=e.clientX!==void 0?e.clientX:e.touches[0].clientX;i<=e.view.innerWidth&&i>0&&(r(k$1(!0)),r(l(!0)),sessionStorage.setItem("previousVideoTime",String(fa().currentTime)),e.target.setPointerCapture(e.pointerId),o.length>0&&o.map(s=>clearTimeout(s)));},Ue=e=>{e.preventDefault(),e.stopPropagation();let o=M$1.dispatch,{activePointerProgressBar:l$1}=M$1.getState().controller,{left:r}=M$1.getState().videoData.videoElementSizeInfo,i=e.clientX!==void 0?e.clientX:e.touches[0].clientX,s=document.querySelector(".pl-progressTooltip");i>r?(s&&(s.style.display="block !important",s.style.pointerEvents="auto"),l$1&&(o(l(!0)),fe(e),zt(e),fa().pause())):s&&(s.style.display="none !important",s.style.pointerEvents="none");},qt=(e,o,l$1,r)=>{r(!1),e.preventDefault(),e.stopPropagation();let i$1=M$1.dispatch,{duration:s}=M$1.getState().controller,{left:u,right:a}=M$1.getState().videoData.videoElementSizeInfo,f=M$1.getState().videoData.params;e.target.removeEventListener("pointermove",Ue);let c=e.clientX!==void 0?e.clientX:e.touches[0].clientX,S=0;c>u&&c<a?S=He(e):c<u?S=0:c>0&&(S=s),ca("isStaticFormat")||i(fa().currentTime,S),fa().currentTime=S,ca("hasOnChangeCurrentTime")&&f.onChangeCurrentTime(S),M$1.getState().controller.activePointerProgressBar&&(i$1(k$1(!1)),i$1(l(!1)),fa().play(),fe(e,!0),sessionStorage.setItem("current-time",String(S)),zt(e),ul(e,i$1,o,l$1));},ul=(e,o,l,r)=>{let i=r,s=setTimeout(()=>{let{settingPopover:u}=M$1.getState().popovers,{delayTurnOffControlbar:a}=M$1.getState().controller;e.pointerType==="touch"&&!u&&a&&o(f(!1));},a$5);i.push(s),l(i);},Rt=()=>{let e=Date.now();fa().play().then(()=>la(oa(Date.now()-e)));},Xt=e=>fe(e),Ht=()=>{let e=document.querySelector(".pl-progressTooltip");ue(e);},fl=e=>{let o=e.split("."),r=o[0].split(":");return {milliseconds:parseInt(o[1],10)||0,seconds:parseInt(r.pop(),10)||0,minutes:parseInt(r.pop(),10)||0,hours:parseInt(r.pop(),10)||0}},Ot=e=>{let o=fl(e);return parseInt(o.hours*(60*60)+o.minutes*60+o.seconds+o.milliseconds/1e3,10)},hl=e=>{let o=e.split(/#xywh=/i),l=o[0],i=o[1].match(/[0-9]+/gi);return {x:i[0],y:i[1],w:i[2],h:i[3],image:l}},vl=(e,o)=>e.indexOf("//")>=0?e:o.indexOf("//")===0?[o.replace(/\/$/gi,""),e.trim()].join("/"):o.indexOf("//")>0?[o.trim(),e.trim()].join("/"):e,gl=(e,o)=>{let l={},r=o.split(/\/\w+\.vtt\s?/)[0];if(e=vl(e,r),!e.match(/#xywh=/i))return l.background='url("'+e+o.split(/\/\w+\.vtt\s?/)[1]+'")',l;let i=hl(e);return l.background='url("'+i.image+o.split(/\/\w+\.vtt\s?/)[1]+'") no-repeat -'+i.x+"px -"+i.y+"px",l.width=i.w+"px",l.height=i.h+"px",l.url=i.image,l},Ut=(e,o)=>{fetch(e).then(l=>{if(!l.ok)throw M$1.dispatch(r({...M$1.getState().videoData.details,vtt:void 0,vtt_mobile:void 0})),new Error("Network response was not ok");return l.text()}).then(l=>{let r=[];l.split(/[\r\n][\r\n]/i).forEach(s=>{if(s.match(/([0-9]{2}:)?([0-9]{2}:)?[0-9]{2}(.[0-9]{3})?( ?--> ?)([0-9]{2}:)?([0-9]{2}:)?[0-9]{2}(.[0-9]{3}).*/gi)){let u=s.split(/[\r\n]/i),f=u[0].split(/ ?--> ?/i),c=f[0],S=f[1],d=u[1],b=gl(d,e);r.push({start:Ot(c),end:Ot(S),css:b});}}),o(r);}).catch(l=>{console.error("Error fetching file:",l);});},Wt=(e,o,l)=>{for(let r=0;r<o.length;++r){let i=o[r];if(e>=i.start&&e<i.end){if(i.css.url&&!l[i.css.url]){let s={background:i.css.background,width:i.css.width,height:i.css.height};return l[i.css.url]=s,s}else if(i.css.url)return l[i.css.url]}}};var Sl=()=>{let{details:e}=ea(({videoData:{details:a}})=>({details:a}),shallowEqual),{tooltipTime:o}=ea(({controller:{tooltipTime:a,activeElements:f,isFullScreen:c}})=>({tooltipTime:a,activeElements:f,isFullScreen:c}),shallowEqual),l={},[r,i]=useState(void 0),[s,u]=useState(ca("isTouchScreen")?e.vtt_mobile:e.vtt);return useEffect(()=>{u(e.vtt_mobile);},[e.vtt_mobile]),useEffect(()=>{s&&Ut(e.vtt_mobile,i);},[s]),ca("isActiveElements")?jsxs("div",{className:`pl-flex pl-flex-col pl-progressTooltip pl-absolute pl-bottom-[calc(100%+10px)] pl-px-[10px] pl-pt-[5px] pl-mr-[-25px] pl-text-white pl-text-[14px] ${s&&r?"":"pl-bg-z-gray-700"} pl-rounded-[6px] pl-opacity-0`,children:[s&&!!r&&jsx("div",{className:"pl-flex-1 pl-border pl-border-white pl-rounded-[8px] pl-mb-2",children:jsx("div",{className:"pl-rounded-[8px]",style:Wt(o,r,l)})}),jsx("div",{className:"pl-flex pl-items-center pl-justify-center pl-progressTimeTooltip pl-text-white !pl-opacity-100"})]}):jsx(Fragment,{})},Yt=memo(Sl);e();e();var Tl=(e,o)=>{useEffect(()=>{let l=r=>{!e.current||e.current.contains(r.target)||o(r);};return document.addEventListener("mousedown",l),document.addEventListener("touchstart",l),()=>{document.removeEventListener("mousedown",l),document.removeEventListener("touchstart",l);}},[e,o]);},z=Tl;e();var Pl=({name:e,className:o,dataMarker:l})=>jsx("img",{"data-marker":l,src:`${ja()}/${e}.png`,alt:e,className:o}),he=Pl;var Nl=()=>{da();let {duration:o,activeElements:l}=ea(({controller:{duration:m,activeElements:T,isFullScreen:H}})=>({duration:m,activeElements:T,isFullScreen:H}),shallowEqual),{markers:r}=ea(({videoData:{markers:m,videoElementSizeInfo:T}})=>({markers:m,videoElementSizeInfo:T}),shallowEqual),[i$1,s]=useState(void 0),[u,a]=useState([]),[f,c]=useState({}),[S,d]=useState(!1),b=m=>o?ia()*m/o:0,F=(m,T,H,pe,K,U,se,Oe)=>{m.stopPropagation();let D=24*T/(ia()+5),j=[],Zo=0;Oe.map(xe=>{xe.time>T-D&&xe.time<T+D&&(j.push(xe),Zo+=xe.time);}),j.length>1?a(j):(j=[],a([]),h(m,T,H,pe,K,U,se));},h=(m,T,H,pe,K,U,se)=>{m.stopPropagation(),fe(m,se),i(fa().currentTime,T),fa().currentTime=T,ha()&&(ha().style.width=b(T)),la(Ba(H,T,pe,K,U));};useEffect(()=>{ca("isActiveElements")||a([]);},[l]);let k=useRef(null);z(k,()=>a([])),useEffect(()=>{if(u.length>0){let m=aa(document.getElementsByClassName("pl-overlapMarkers")[0]);if(m==="inViewport")return d(!0),c({left:b(u[0].time)});if(m==="OutViewPortFromLeft")return d(!1),c({left:0});if(m==="OutViewPortFromRight")return d(!1),c({right:0})}},[u,document.getElementsByClassName("pl-overlapMarkers")[0]]);let L=m=>{m.preventDefault(),ca("isTouchScreen")&&s(Number(m.target.getAttribute("data-marker")));};return jsxs(Fragment,{children:[r.map(m=>jsx("div",{onContextMenu:L,"data-marker":m.time,onClick:T=>F(T,m.time,m.id,m.title,m.description,m.sticker,!0,r),onDoubleClick:T=>T.stopPropagation(),children:jsxs("div",{className:`pl-emoji-image pl-absolute pl-bottom-[200%] pl-bg-z-gray-700/[0.4] pl-rounded-[6px] pl-p-1 ${ca("isTouchScreenPortrait"),"pl-mb-5"} pl-ml-[-12px] pl-cursor-pointer`,style:{left:b(m.time),zIndex:6},"data-marker":m.time,children:[m.isPersonal!==null&&m.isPersonal!==void 0&&jsx("div",{className:"pl-absolute pl-rounded-full pl-top-[-2px] pl-right-[-1px] pl-bg-main pl-w-2 pl-h-2"}),jsx(he,{dataMarker:m.time,name:m.sticker,className:"pl-w-[16px] pl-h-[16px] !pl-max-w-max"})]})},m.id)),u.length>0&&jsx("div",{className:`pl-overlapMarkers ${S?"pl-overlayMarkersInViewport":"pl-overlayMarkersOutViewport"} pl-absolute pl-bottom-[45px] pl-px-1 pl-py-2 pl-flex pl-gap-3 pl-flex-row-reverse pl-justify-end pl-bg-z-gray-700/[0.4] pl-rounded-[6px] pl-ml-[-10px] animate__animated animate__fadeInUp pl-opacity-100`,ref:k,style:f,children:u.map(m=>jsx("div",{className:"pl-emoji-image pl-rounded-[6px] pl-cursor-pointer","data-marker":m.time,onClick:T=>h(T,m.time,m.id,m.title,m.description,m.sticker,!0),onDoubleClick:T=>T.stopPropagation(),children:jsx(he,{dataMarker:m.time,name:m.sticker,className:"pl-w-[24px] pl-h-[24px] !pl-max-w-max"})},m.id))})]})},eo=memo(Nl);var Ml=()=>{let[e,o]=useState(!1);useEffect(()=>{ue(document.querySelector(".progressTooltip"));},[]);let{duration:l,currentTime:r,bufferedTimeWidth:i}=ea(({controller:{duration:a,currentTime:f,bufferedTimeWidth:c}})=>({duration:a,currentTime:f,bufferedTimeWidth:c}),shallowEqual);ea(({videoData:{params:a,videoElementSizeInfo:f}})=>({params:a,videoElementSizeInfo:f}),shallowEqual);let[s,u]=useState([]);return jsxs("div",{className:`${ca("isTouchScreenPortrait")?"pl-order-1":"pl-order-none"} pl-relative`,children:[jsxs("div",{className:"pl-relative",children:[jsx(Yt,{}),jsx(eo,{})]}),jsx("div",{className:"pl-w-full pl-flex pl-items-end",onPointerDown:a=>Vt(a,s,o),onPointerMove:Ue,onPointerUp:a=>qt(a,u,s,o),onMouseMove:Xt,onMouseOut:Ht,onClick:Rt,onDoubleClick:a=>a.stopPropagation(),children:jsxs("div",{id:"progress-area",className:"pl-w-full pl-absolute",children:[jsx("div",{className:"pl-w-full pl-h-[40px]"}),jsxs("div",{id:"time-progress-area",className:"!pl-w-full !pl-h-[5px] pl-transition-transform pl-duration-300 pl-m-auto pl-cursor-pointer !pl-bg-gray-highLight pl-rounded",style:{transform:e?"scaleY(1.8)":"unset"},children:[jsx("div",{id:"time-progress-buffer",className:"pl-absolute pl-h-[5px] pl-bg-z-gray-400/[0.7] pl-rounded",style:{width:`${i}%`}}),jsx("div",{id:"time-progress-bar",className:`pl-h-[5px] pl-rounded pl-relative pl-cursor-pointer pl-bg-primary before:pl-bg-primary before:pl-inline-block before:pl-w-4 before:pl-h-4 ${e&&"before:pl-w-7 before:pl-h-3"}`,style:{width:`${r/l*ia()}px`}})]})]})})]})},lo=Ml;e();e();e();var Al=({title:e,className:o})=>jsx("span",{className:`pl-absolute pl-w-max pl-bg-paper pl-text-white/[0.9] ${ca("isFullScreen")?"pl-bottom-[300%]":"pl-bottom-[270%]"} pl-rounded-[8px] pl-text-[10px] pl-px-4 pl-py-[13px] pl-font-normal ${o}`,children:e}),M=Al;var Bl=()=>{let{isFullScreen:e}=ea(({controller:{firstPlay:i,isFullScreen:s}})=>({firstPlay:i,isFullScreen:s}),shallowEqual),[o,l]=useState(!1),r=da();return useEffect(()=>{ca("isFirstPlay")||r(f(!1));},[e]),jsxs("div",{className:"pl-relative pl-flex pl-items-center",children:[jsx(ge,{src:ca("isFullScreen")?a.nonFullScreen:a.fullScreen,alt:"fullScreen-icon",className:"pl-cursor-pointer",width:20,height:20,onMouseOver:()=>!ca("isTouchScreen")&&l(!0),onMouseLeave:()=>!ca("isTouchScreen")&&l(!1),onClick:()=>{f$1(),g();},id:ca("isFullScreen")?"exit-full-s":"full-s"}),o&&jsx(M,{title:`${ca("isFullScreen")?"\u062E\u0631\u0648\u062C \u0627\u0632":""} \u062A\u0645\u0627\u0645 \u0635\u0641\u062D\u0647`})]})},io=Bl;e();var Xl=()=>{let[e,o]=useState(!1),l=da(),{params:r,details:i}=ea(({videoData:{params:s,details:u}})=>({params:s,details:u}),shallowEqual);return jsxs("div",{className:"pl-relative pl-flex pl-items-center",children:[jsx(ge,{alt:"",onMouseOver:()=>!ca("isTouchScreen")&&o(!0),onMouseLeave:()=>!ca("isTouchScreen")&&o(!1),src:a.pictureInPicture,width:20,height:20,className:"pl-flex pl-cursor-pointer",onClick:()=>{r.onClickMiniPlayerIcon&&(localStorage.removeItem("close-miniPlayer"),fa().pause(),l(a$2(!1)),r.onClickMiniPlayerIcon({video:i||void 0,id:r.type==="vod"?r.id:window.btoa(r.id),type:r.type,currentTime:fa().currentTime}));}}),e&&jsx(M,{title:"\u062A\u0635\u0648\u06CC\u0631 \u062F\u0631 \u062A\u0635\u0648\u06CC\u0631 "})]})},po=Xl;e();var Zl=()=>{let[e,o]=useState(!1),l=da(),{settings:r}=ea(({user:{settings:a}})=>({settings:a}),shallowEqual),i=useRef(r.volume),s=()=>{if(i.current!==r.volume){let{settings:a}=M$1.getState().user;la(sa(i.current,a.volume)),i.current=a.volume,l(G({...a,volume:a.volume}));}},u=a=>{let{settings:f}=M$1.getState().user;a==="mute"?(d(0),la(sa(f.volume,0))):(la(sa(f.volume,100)),d(100));};return jsxs("div",{className:"pl-relative pl-inline-flex pl-items-center pl-gap-2 pl-sound-icon",children:[!ca("isTouchScreen")&&jsx("input",{onMouseUp:s,type:"range",min:"0",max:"100",value:r.volume,onChange:a=>d(+a.target.value),className:"pl-soundVolume pl-cursor-pointer rounded-full",style:{background:`linear-gradient(to right, white ${r.volume}%, rgba(255,255,255,0.3) 0)`}}),jsxs("div",{className:"pl-relative pl-flex pl-items-center",children:[jsx(ge,{src:ca("hasSound")?a.unMute:a.mute,alt:ca("hasSound")?"unmute-icon":"mute-icon",className:"pl-flex pl-items-center pl-cursor-pointer",width:20,height:20,onClick:()=>ca("hasSound")?u("mute"):u("unmute"),onDoubleClick:a=>a.stopPropagation(),onMouseOver:()=>!ca("isTouchScreen")&&o(!0),onMouseLeave:()=>!ca("isTouchScreen")&&o(!1),id:ca("hasSound")?"mute":"unmute"}),e&&jsx(M,{className:"pl-left-0",title:ca("hasSound")?"\u0635\u062F\u0627":"\u0628\u06CC\u200C\u0635\u062F\u0627"})]})]})},ao=Zl;e();e();var co=forwardRef(({children:e,status:o,onClose:l,type:r,classNames:i,parentClassNames:s,styles:u,isBlurBackground:a,isFullHeight:f=!1,isHeader:c,isHasCatchUpLineOnTop:S=!1,animation:d,scrollbar:b=!1,isFocusOnInput:F=!1},h)=>{let[k,L]=useState(o),[m,T]=useState(0),[H,pe]=useState(0),{videoElementSizeInfo:K}=ea(({videoData:{videoElementSizeInfo:D}})=>({videoElementSizeInfo:D}),shallowEqual),U=useRef(0);useEffect(()=>{let D;return o?L(!0):D=setTimeout(()=>{l(!1),T(0),L(!1);},500),()=>clearTimeout(D)},[o]);let se=D=>{let j=document.getElementById("popover-content");U.current||(U.current=window.innerHeight-K.top-j?.getBoundingClientRect().top),D.stopPropagation(),window.innerHeight-K.top-D.touches[0].clientY<U.current&&T(window.innerHeight-D.touches[0].clientY),pe(1000005);},Oe=()=>{l();},Be=jsxs(Fragment,{children:[a&&jsx("div",{className:`pl-bg-black/[0.5] pl-w-screen pl-h-screen pl-fixed pl-top-0 pl-right-0 animate__animated animate__faster ${o?"animate__fadeIn":"animate__fadeOut"}`,style:{zIndex:1000001}}),jsx("div",{className:`${r==="modal"&&"pl-fixed pl-top-0 pl-left-0 pl-flex pl-w-full pl-h-full pl-justify-center pl-items-end sm:pl-items-center"} ${s}`,style:{zIndex:f&&!F?H:1000004},children:jsx("div",{className:`pl-flex pl-flex-col pl-rounded-[8px] animate__animated animate__faster pl-bg-white/[0.9]
17
17
  ${f&&"pl-h-full"}
18
18
  ${d||(window.innerWidth>768&&r==="modal"?o?"animate__fadeIn":"animate__fadeOut":o?"animate__fadeInUp":"animate__fadeOutDown")}
19
19
  ${ca("isTouchScreenPortrait")?"!pl-fixed !pl-right-0 !pl-left-0 !pl-bottom-0 !pl-w-full !pl-mb-0 pl-rounded-[12px] !pl-rounded-b-none !pl-bg-white":"before:pl-hidden"}
@@ -23,4 +23,4 @@ e();e();e();var Jo=()=>{let{details:e,params:o}=ea(({videoData:{details:l,params
23
23
 
24
24
  export { ud as a };
25
25
  //# sourceMappingURL=out.js.map
26
- //# sourceMappingURL=chunk-AOWMZMBJ.mjs.map
26
+ //# sourceMappingURL=chunk-2HBF52I2.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/videoPlayerLibrary/components/custom-components/videoArea/videoArea.tsx","../src/videoPlayerLibrary/components/custom-components/header/header.tsx","../src/videoPlayerLibrary/components/custom-components/title/title.tsx","../src/videoPlayerLibrary/components/custom-components/lockUnlock/lock.tsx","../src/videoPlayerLibrary/components/custom-components/main/main.tsx","../src/videoPlayerLibrary/components/custom-components/playPause/playPause.tsx","../src/videoPlayerLibrary/components/custom-components/footer/footer.tsx","../src/videoPlayerLibrary/components/custom-components/footer/progressbar/progressbar.tsx","../src/videoPlayerLibrary/components/custom-components/tooltip/tooltip.tsx","../src/videoPlayerLibrary/helpers/redux/actions/progressbar.actions.ts","../src/videoPlayerLibrary/components/custom-components/footer/progressbar/markers/markers.tsx","../src/videoPlayerLibrary/helpers/hooks/useOnClickOutside.tsx","../src/videoPlayerLibrary/components/custom-components/emoji/emoji.tsx","../src/videoPlayerLibrary/components/custom-components/footer/controllbar/controllbar.tsx","../src/videoPlayerLibrary/components/custom-components/fullScreen/fullScreen.tsx","../src/videoPlayerLibrary/components/custom-components/footer/controllbar/controllbarTooltip.tsx","../src/videoPlayerLibrary/components/custom-components/pictureInPicture/pictureInPicture.tsx","../src/videoPlayerLibrary/components/custom-components/soundVolume/soundVolume.tsx","../src/videoPlayerLibrary/components/custom-components/settings/settings.tsx","../src/videoPlayerLibrary/components/custom-components/popover/popover.tsx","../src/videoPlayerLibrary/components/custom-components/qualityLevels/qualityLevels.tsx","../src/videoPlayerLibrary/components/custom-components/speed/speed.tsx","../src/videoPlayerLibrary/components/icon-components/speed.tsx","../src/videoPlayerLibrary/components/custom-components/toggle/toggle.tsx","../src/videoPlayerLibrary/components/custom-components/subtitles/subtitleSettingMenu.tsx","../src/videoPlayerLibrary/components/custom-components/elapsedTime/elapsedTime.tsx","../src/videoPlayerLibrary/components/custom-components/lockUnlock/unlock.tsx","../src/videoPlayerLibrary/components/custom-components/subtitles/subtitleIcon.tsx","../src/videoPlayerLibrary/components/custom-components/markersList/markersList.tsx","../src/videoPlayerLibrary/components/custom-components/markersList/markersListIcon.tsx","../src/videoPlayerLibrary/components/custom-components/subtitles/displaySubtitle.tsx","../src/videoPlayerLibrary/components/custom-components/videoTag/videoTag.tsx","../src/videoPlayerLibrary/helpers/hooks/useFullScreen.tsx","../src/videoPlayerLibrary/helpers/hooks/useActiveInActive.tsx","../src/videoPlayerLibrary/helpers/hooks/useHandleResize.tsx","../src/videoPlayerLibrary/helpers/hooks/useSetSubtitleFirstPlay.tsx"],"names":["init_esm_shims","useState","shallowEqual","jsx","Title","details","params","useAppSelector","conditions","title_default","Image","jsxs","Lock","importImages_default","handleLock","lock_default","Header","lock","activeElements","header_default","useEffect","PlayPause","play","videoElementSizeInfo","event","handlePlayPause","playPause_default","Fragment","Main","showLoader","setShowLoader","showIcons","setShowIcons","firstPlay","isLoading","timeout","showLoaderTime","loader_default","backwardForward_default","main_default","memo","getPointerTime","store_default","duration","clientX","getPointerPosition","getMarkerPosition","markerTime","progressBarWidth","hideProgressTooltip","progressTooltip","generalStyleTooltipHandler","vttTooltipStyleHandler","element","parentPlayer","mainPlayerVideoTag","showProgressTooltip","progressBarTooltip","setTooltipTime","secondsToHMS","handleTimeTooltip","isTimer","handleProgressTime","progressBar","handlePointerDown","timeoutIds","setIsPointerDown","dispatch","setActivePointerProgressBar","setDelayTurnOffControlbar","id","handlePointerMove","activePointerProgressBar","left","handlePointerUp","setTimeoutIds","right","currentTime","handleVideoTimeline","handleTimeout","ids","timeoutIdTemp","settingPopover","delayTurnOffControlbar","setActiveElements","activeElementsTime","handleCatchUpLoadingLog","timer","sendFluentLog","catchUpLoadingLog","handleMouseMove","handleMouseOut","deconstructTimestamp","timestamp","splitStampMilliseconds","timePartsSplit","getSecondsFromTimestamp","timestampParts","getPropsFromDef","def","imageDefSplit","imageUrl","splitCoords","getFullyQualifiedUrl","path","base","getVttCss","vttImageDef","vttUrl","cssObj","baseSplit","imageProps","fetchFile","url","setVttPool","response","setInfo","data","processedVtts","vttDef","vttDefSplit","vttTimingSplit","vttTimeStart","vttTimeEnd","vttCssDef","error","getStyleForTime","time","vttPool","cache","i","item","objectVtt","Tooltip","tooltipTime","isFullScreen","setVttUrl","tooltip_default","useRef","useOnClickOutside","ref","handler","listener","useOnClickOutside_default","Emoji","name","className","dataMarker","getEmojiUrl","emoji_default","Markers","useAppDispatch","markers","setMarkerTime","overlapMarkers","setOverlapMarkers","overlapMarkersPosition","setOverlapMarkersPosition","isOverlapMarkersInViewport","setIsOverlapMarkersInViewport","calculateMarkerPosition","handleClick","markerId","markerTitle","markerDescription","markerSticker","result","sumOverlapMarkersTime","marker","handleJumpToMarker","eventMarkerClickLog","markerRef","isInViewPort","inViewPort","handleContextMenu","overlapMarker","markers_default","ProgressBar","isPointerDown","bufferedTimeWidth","progressbar_default","ControllbarTooltip","title","controllbarTooltip_default","FullScreen","showTooltip","setShowTooltip","handleFullScreen","handleLockOrientation","fullScreen_default","PictureInPicture","setPlay","pictureInPicture_default","SoundVolume","settings","primaryVolumeRef","handleMouseUp","volumeLog","setUserSettings","handleMute","type","handleChangeSoundVolume","soundVolume_default","forwardRef","createPortal","Popover","children","status","onClose","classNames","parentClassNames","styles","isBlurBackground","isFullHeight","isHeader","isHasCatchUpLineOnTop","animation","scrollbar","isFocusOnInput","showPopover","setShowPopover","heightOnTouchMove","setHeightOnTouchMove","zIndexOnCatchUp","setZIndexOnCatchUp","popoverContentHeightRef","handleTouchMove","popoverContent","handleTouchEnd","content","popover_default","QualityLevels","setSection","showQualityLevelsIcon","qualityLevels","manualQuality","autoQuality","qualityLevelsPopover","handleTickSelectedQuality","index","qualityLevel","qualityLevelsRef","setQualityLevelsPopover","qualityLevelsContent","qualityChangeRequestLog","setSettingPopover","qualityLevels_default","SpeedIcon","onClick","onMouseOver","onMouseLeave","speed_default","speeds","Speed","showSpeedIcon","speedPopover","speedRef","setSpeedPopover","speedContent","speed","speedChangeLog","Toggle","enabled","setEnabled","toggle_default","SubtitlesMenu","subtitles","selectedSubtitle","setSelectedSubtitle","textTrack","setSubtitleText","subtitleLog","subtitle","subtitleSettingMenu_default","Settings","section","settingsRef","handleSubtitle","settings_default","ElapsedTime","elapsedTime_default","Unlock","unlock_default","SubtitleIcon","subtitleIcon_default","MarkersListIcon","props","markersListIcon_default","MarkersList","videoCurrentTime","setVideoCurrentTime","setMarkerId","markersListPopover","markersListRef","handleClickShare","setMarkersListPopover","handleClickMarker","handleShowMarkerListPopover","markersList_default","Controlbar","controllbar_default","DisplaySubtitle","subtitleText","spliteStringPerLine","text","cleanVTT","displaySubtitle_default","Footer","footer_default","dynamic","StaticVideoTag","NonStaticVideoTag","VideoTag","videoTag_default","useFullScreen","handleChangeFullScreen","setIsFullScreen","handleVideoElementSizeInfo","fullscreenLog","useFullScreen_default","useActiveInActive","isRightDoubleTouched","isLeftDoubleTouched","timeoutRef","isRightDoubleTouchedRef","isLeftDoubleTouchedRef","shouldInActiveElements","isEnded","handleTouchStart","isTouchScreen","checkParentTarget","videoArea","useActiveInActive_default","useHandleResize","handleResize","useHandleResize_default","useSetSubtitleFirstPlay","useSetSubtitleFirstPlay_default","TouchVolumeBrightness","BackwardForward","VideoArea","setIsRightDoubleTouched","setIsLeftDoubleTouched","canPlayVideo","popoverElement","handleDoubleClick","videoArea_default"],"mappings":"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","sourcesContent":["\"use client\";\r\n\r\nimport { MouseEvent, useState } from \"react\";\r\nimport { shallowEqual } from \"react-redux\";\r\nimport Header from \"../header/header\";\r\nimport Main from \"../main/main\";\r\nimport Footer from \"../footer/footer\";\r\nimport VideoTag from \"../videoTag/videoTag\";\r\nimport { useAppSelector } from \"../../../helpers/redux/hooks\";\r\nimport { conditions } from \"../../../helpers/conditions/conditions\";\r\nimport { ConditionName, zIndex } from \"../../../helpers/interfaces/enums\";\r\nimport {\r\n handleDoubleClick,\r\n handlePlayPause,\r\n} from \"../../../helpers/redux/actions/controller.actions\";\r\nimport useFullScreen from \"../../../helpers/hooks/useFullScreen\";\r\nimport useActiveInActive from \"../../../helpers/hooks/useActiveInActive\";\r\nimport dynamic from \"next/dynamic\";\r\nimport useHandleResize from \"../../../helpers/hooks/useHandleResize\";\r\nimport useSetSubtitleFirstPlay from \"../../../helpers/hooks/useSetSubtitleFirstPlay\";\r\n\r\nconst TouchVolumeBrightness = dynamic(\r\n () => import(\"../touchVolumeBrightness/touchVolumeBrightness\")\r\n);\r\nconst BackwardForward = dynamic(\r\n () => import(\"../backwardForward/backwardForward\")\r\n);\r\n\r\nconst VideoArea = () => {\r\n const [isRightDoubleTouched, setIsRightDoubleTouched] =\r\n useState<boolean>(false);\r\n const [isLeftDoubleTouched, setIsLeftDoubleTouched] =\r\n useState<boolean>(false);\r\n\r\n useAppSelector(\r\n ({ videoData: { details, params, videoElementSizeInfo } }) => ({\r\n details,\r\n params,\r\n videoElementSizeInfo,\r\n }),\r\n shallowEqual\r\n );\r\n\r\n useAppSelector(\r\n ({ controller: { firstPlay, isFullScreen, isLoading, canPlayVideo } }) => ({\r\n firstPlay,\r\n isFullScreen,\r\n isLoading,\r\n canPlayVideo,\r\n }),\r\n shallowEqual\r\n );\r\n\r\n useFullScreen();\r\n useHandleResize();\r\n useActiveInActive(isRightDoubleTouched, isLeftDoubleTouched);\r\n useSetSubtitleFirstPlay();\r\n\r\n\r\n return (\r\n <>\r\n <div\r\n id=\"video-area\"\r\n style={{\r\n zIndex: conditions(ConditionName.isFullScreen)\r\n ? zIndex.videoPlayerInFullScreen\r\n : \"unset\",\r\n }}\r\n onClick={(event) => {\r\n const popoverElement = document.getElementById(\"player-popover\");\r\n if(conditions(ConditionName.isFirstPlay) || !conditions(ConditionName.isTouchScreen) && !popoverElement) handlePlayPause(event);\r\n }}\r\n onDoubleClick={(event: MouseEvent<HTMLDivElement>) =>\r\n handleDoubleClick(event)\r\n }\r\n className={`!pl-bg-contain !pl-bg-center !pl-bg-no-repeat pl-h-full pl-bg-black pl-max-h-screen pl-aspect-video pl-flex pl-items-center ${\r\n !conditions(ConditionName.isTouchScreen) &&\r\n !conditions(ConditionName.isFullScreen) &&\r\n \"!pl-rounded-[12px]\"\r\n } ${\r\n conditions(ConditionName.isFullScreen) && \"!pl-fixed !pl-w-screen dvh\"\r\n } pl-w-full pl-relative ${\r\n !conditions(ConditionName.isActiveElements) && \"pl-cursor-none\"\r\n }`}\r\n >\r\n <div\r\n id=\"video-opacity\"\r\n className={`pl-absolute pl-w-full pl-aspect-video pl-transition-all pl-duration-500 pl-bg-black ${\r\n !conditions(ConditionName.isTouchScreen) &&\r\n !conditions(ConditionName.isFullScreen) &&\r\n \"!pl-rounded-[12px]\"\r\n } ${\r\n conditions(ConditionName.isActiveElements)\r\n ? \"pl-bg-opacity-50\"\r\n : \"pl-bg-opacity-0\"\r\n }`}\r\n />\r\n {conditions(ConditionName.showTouchVolumeBrightness) && (\r\n <TouchVolumeBrightness />\r\n )}\r\n {conditions(ConditionName.showBackwardForward) && (\r\n <div\r\n className={`pl-absolute pl-top-0 pl-right-0 pl-w-full pl-h-full pl-overflow-hidden pl-flex pl-items-center`}\r\n style={{\r\n zIndex:\r\n isLeftDoubleTouched || isRightDoubleTouched\r\n ? zIndex.backwardForwardActive\r\n : zIndex.backwardForwardInActive,\r\n }}\r\n >\r\n <BackwardForward\r\n type=\"touchForward\"\r\n isRightDoubleTouched={isRightDoubleTouched}\r\n setIsRightDoubleTouched={setIsRightDoubleTouched}\r\n />\r\n <BackwardForward\r\n type=\"touchBackward\"\r\n isLeftDoubleTouched={isLeftDoubleTouched}\r\n setIsLeftDoubleTouched={setIsLeftDoubleTouched}\r\n />\r\n </div>\r\n )}\r\n <VideoTag />\r\n <div\r\n id=\"playerElements\"\r\n className={`pl-absolute pl-top-0 pl-right-0 pl-w-full pl-h-full`}\r\n >\r\n <div\r\n className={`pl-flex pl-flex-col pl-justify-between pl-w-full pl-h-full`}\r\n >\r\n {conditions(ConditionName.showHeader) && <Header />}\r\n {conditions(ConditionName.showMain) && <Main />}\r\n {conditions(ConditionName.showFooter) && <Footer />}\r\n </div>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default VideoArea;\r\n","import { shallowEqual } from \"react-redux\";\r\nimport Title from \"../title/title\";\r\nimport { useAppSelector } from \"../../../helpers/redux/hooks\";\r\nimport { conditions } from \"../../../helpers/conditions/conditions\";\r\nimport { ConditionName } from \"../../../helpers/interfaces/enums\";\r\nimport Lock from \"../lockUnlock/lock\";\r\n\r\nconst Header = () => {\r\n useAppSelector(({ controller: { lock, activeElements } }) => ({ lock, activeElements }), shallowEqual);\r\n\r\n return (\r\n <div className={`pl-flex pl-items-start pl-justify-end pl-mx-8 pl-pt-8 ${conditions(ConditionName.isTouchScreenPortrait) ? \"pl-h-[16px]\" : \"pl-h-[60px]\"}`}>\r\n {conditions(ConditionName.showTitle) && <Title />}\r\n {conditions(ConditionName.isLock) && <Lock />}\r\n </div>\r\n );\r\n};\r\n\r\nexport default Header;\r\n","import { shallowEqual } from \"react-redux\";\r\nimport { useAppSelector } from \"../../../helpers/redux/hooks\";\r\nimport { ConditionName } from \"../../../helpers/interfaces/enums\";\r\nimport { conditions } from \"../../../helpers/conditions/conditions\";\r\n\r\nconst Title = () => {\r\n const { details, params } = useAppSelector(({ videoData: { details, params } }) => ({ details, params }), shallowEqual);\r\n\r\n return (\r\n <div\r\n className={`pl-w-full pl-max-w-[80%] pl-truncate pl-text-left pl-ml-4 pl-text-[16px] pl-font-normal pl-text-white pl-break-words pl-self-start animate__animated animate__faster ${\r\n conditions(ConditionName.isActiveElements) ? \"animate__fadeIn pl-opacity-100\" : \"pl-opacity-0 animate__fadeOut\"\r\n }`}\r\n >\r\n {conditions(ConditionName.hasTitle) ? details.title : params.id}\r\n </div>\r\n );\r\n};\r\n\r\nexport default Title;\r\n","import Image from \"next/legacy/image\";\r\nimport IMAGES from \"../../../images/importImages\";\r\nimport { handleLock } from \"../../../helpers/redux/actions/controller.actions\";\r\nimport { conditions } from \"../../../helpers/conditions/conditions\";\r\nimport { ConditionName } from \"../../../helpers/interfaces/enums\";\r\n\r\nconst Lock = () => {\r\n\r\n return (\r\n <div className={`pl-relative animate__animated animate__faster ${conditions(ConditionName.isActiveElements) ? \"animate__fadeIn pl-pointer-events-auto\" : \"animate__fadeOut pl-pointer-events-none\"}`}>\r\n <Image\r\n src={IMAGES.lock}\r\n alt=\"lock-icon\"\r\n width={20}\r\n height={20}\r\n onClick={() => handleLock(\"unlock\")}\r\n />\r\n {!localStorage.getItem(\"unlock-click\") && <p className=\"pl-text-[10px] pl-text-black/[0.87] pl-bg-[#F7F7F7] pl-absolute pl-left-0 pl-px-4 pl-py-3 pl-rounded-[8px] pl-w-max\">برای باز کردن قفل، کلیک کنید</p>}\r\n </div>\r\n );\r\n};\r\n\r\nexport default Lock;\r\n","import { useEffect, useState } from \"react\";\r\nimport { shallowEqual } from \"react-redux\";\r\nimport BackwardForward from \"../backwardForward/backwardForward\";\r\nimport PlayPause from \"../playPause/playPause\";\r\nimport { useAppSelector } from \"../../../helpers/redux/hooks\";\r\nimport { conditions } from \"../../../helpers/conditions/conditions\";\r\nimport { ConditionName, zIndex } from \"../../../helpers/interfaces/enums\";\r\nimport Loader from \"../loader/loader\";\r\nimport { showLoaderTime } from \"../../../helpers/environment\";\r\n\r\nconst Main = () => {\r\n const [showLoader, setShowLoader] = useState<boolean>(false);\r\n const [showIcons, setShowIcons] = useState<boolean>(false);\r\n\r\n const {firstPlay} = useAppSelector(({ controller: { lock, firstPlay } }) => ({ lock, firstPlay }), shallowEqual);\r\n const { activeElements, isLoading } = useAppSelector(({ controller: { activeElements, isLoading } }) => ({ activeElements, isLoading }),shallowEqual);\r\n\r\n useEffect(() => {\r\n let timeout: any = null;\r\n if (conditions(ConditionName.isFirstPlay) || conditions(ConditionName.isActiveElements)) timeout = setTimeout(() => setShowIcons(true), 100);\r\n else setShowIcons(false);\r\n\r\n return () => clearTimeout(timeout);\r\n }, [activeElements]);\r\n\r\n useEffect(() => {\r\n let timeout: any;\r\n if (conditions(ConditionName.isLoading)) timeout = setTimeout(() => setShowLoader(true), conditions(ConditionName.isFirstPlay) ? 0 : showLoaderTime);\r\n else setShowLoader(false);\r\n return () => {\r\n clearTimeout(timeout);\r\n setShowLoader(false);\r\n };\r\n }, [isLoading, firstPlay]);\r\n\r\n return (\r\n <main className=\"pl-flex-1 pl-mt-1\">\r\n {showLoader ? (\r\n <Loader />\r\n ) : (\r\n <>\r\n {showIcons && !conditions(ConditionName.isLock) && (\r\n <div\r\n id=\"main-content\"\r\n className={`pl-h-full pl-flex pl-justify-center pl-items-center pl-text-center pl-relative ${conditions(ConditionName.isActiveElements) ? \"pl-pointer-events-auto\" : \"pl-pointer-events-none\"\r\n }`}\r\n >\r\n <div\r\n onClick={(event) => event.stopPropagation()}\r\n className=\"pl-flex pl-justify-center pl-gap-8 pl-items-center pl-w-max\"\r\n style={{ zIndex: zIndex.mainIcons }}\r\n >\r\n {!conditions(ConditionName.isFirstPlay) && <BackwardForward type=\"forward\" />}\r\n <PlayPause />\r\n {!conditions(ConditionName.isFirstPlay) && <BackwardForward type=\"backward\" />}\r\n </div>\r\n </div>\r\n )}\r\n </>\r\n )}\r\n </main>\r\n );\r\n};\r\n\r\nexport default Main;\r\n","import { shallowEqual } from \"react-redux\";\r\nimport { useAppSelector } from \"../../../helpers/redux/hooks\";\r\nimport { conditions } from \"../../../helpers/conditions/conditions\";\r\nimport { ConditionName } from \"../../../helpers/interfaces/enums\";\r\nimport IMAGES from \"../../../images/importImages\";\r\nimport { handlePlayPause } from \"../../../helpers/redux/actions/controller.actions\";\r\nimport Image from \"next/legacy/image\";\r\n\r\nconst PlayPause = () => {\r\n useAppSelector(({ controller: { play } }) => ({ play }), shallowEqual);\r\n useAppSelector(({ videoData: { videoElementSizeInfo, params } }) => ({ videoElementSizeInfo, params }), shallowEqual);\r\n\r\n return (\r\n <div\r\n className={`${!conditions(ConditionName.isTouchScreen) && \"hover:pl-scale-125\"} pl-transition-transform pl-ease-in-out pl-cursor-pointer`}\r\n onContextMenu={(event) => event.preventDefault()}\r\n >\r\n <Image\r\n alt=\"\"\r\n src={conditions(ConditionName.isPlay) ? IMAGES.bigPause : IMAGES.bigPlay}\r\n width={40}\r\n height={40}\r\n onClick={(event: any) => handlePlayPause(event)}\r\n onDoubleClick={(event: any) => event.stopPropagation()}\r\n className={`${conditions(ConditionName.isPlay) ? \"pl-big-play-icon\" : \"pl-big-pause-icon\"}`}\r\n />\r\n </div>\r\n );\r\n};\r\n\r\nexport default PlayPause;\r\n","import { shallowEqual } from \"react-redux\";\r\nimport ProgressBar from \"./progressbar/progressbar\";\r\nimport Controllbar from \"./controllbar/controllbar\";\r\nimport ElapsedTime from \"../elapsedTime/elapsedTime\";\r\nimport { useAppSelector } from \"../../../helpers/redux/hooks\";\r\nimport { conditions } from \"../../../helpers/conditions/conditions\";\r\nimport { ConditionName, zIndex } from \"../../../helpers/interfaces/enums\";\r\nimport DisplaySubtitle from \"../subtitles/displaySubtitle\";\r\n\r\nconst Footer = () => {\r\n\r\n useAppSelector(({ controller: { lock, isFullScreen, isLoading, activeElements } }) => ({ lock, isFullScreen, isLoading, activeElements }), shallowEqual);\r\n useAppSelector(({ videoData: { subtitles, selectedSubtitle } }) => ({ subtitles, selectedSubtitle }), shallowEqual);\r\n\r\n let styles = \"\";\r\n if(conditions(ConditionName.isTouchScreen)) {\r\n if(conditions(ConditionName.isFullScreen)) styles = \"pl-gap-4 table:pl-gap-6 pl-mb-4 tablet:pl-mb-6 \"\r\n else styles = \"pl-gap-6 pl-mb-0\"\r\n } else {\r\n if (conditions(ConditionName.isFullScreen)) styles = \"pl-gap-6 pl-mb-8\"\r\n else styles = \"pl-gap-4 pl-mb-3\"\r\n }\r\n\r\n return (\r\n <div id=\"footer\" className=\"pl-relative\" style={{ zIndex: zIndex.footer }} onClick={(event) => event.stopPropagation()}>\r\n <>\r\n {conditions(ConditionName.showSubtitle) && <DisplaySubtitle />}\r\n {!conditions(ConditionName.isLock) && (\r\n <>\r\n <div\r\n className={`pl-flex pl-flex-col pl-w-full pl-mx-auto animate__animated animate__faster ${styles} ${conditions(ConditionName.isActiveElements) && !conditions(ConditionName.isLoading)\r\n ? \"animate__fadeIn pl-pointer-events-auto\"\r\n : \"animate__fadeOut pl-pointer-events-none\"\r\n }`}\r\n >\r\n {!conditions(ConditionName.isTouchScreenPortrait) && <ElapsedTime />} \r\n {conditions(ConditionName.showProgressbar) && <ProgressBar />}\r\n <Controllbar />\r\n </div>\r\n </>\r\n )}\r\n </>\r\n </div>\r\n );\r\n};\r\n\r\nexport default Footer;\r\n","import { useEffect, useState } from \"react\";\r\nimport { shallowEqual } from \"react-redux\";\r\nimport Tooltip from \"../../tooltip/tooltip\";\r\nimport { handleCatchUpLoadingLog, handleMouseMove, handleMouseOut, handlePointerDown, handlePointerMove, handlePointerUp, hideProgressTooltip } from \"../../../../helpers/redux/actions/progressbar.actions\";\r\nimport { useAppSelector } from \"../../../../helpers/redux/hooks\";\r\nimport { progressBarWidth } from \"../../../../helpers/constants\";\r\nimport { ConditionName } from \"../../../../helpers/interfaces/enums\";\r\nimport { conditions } from \"../../../../helpers/conditions/conditions\";\r\nimport Markers from \"./markers/markers\";\r\n\r\nconst ProgressBar = () => {\r\n const [isPointerDown, setIsPointerDown] = useState<boolean>(false);\r\n\r\n useEffect(() => {\r\n hideProgressTooltip(document.querySelector(\".progressTooltip\"));\r\n }, []);\r\n\r\n const { duration, currentTime, bufferedTimeWidth } = useAppSelector(\r\n ({ controller: { duration, currentTime, bufferedTimeWidth } }) => ({\r\n duration,\r\n currentTime,\r\n bufferedTimeWidth,\r\n }),\r\n shallowEqual\r\n );\r\n useAppSelector(\r\n ({ videoData: { params, videoElementSizeInfo } }) => ({\r\n params,\r\n videoElementSizeInfo,\r\n }),\r\n shallowEqual\r\n );\r\n const [timeoutIds, setTimeoutIds] = useState<any[]>([]);\r\n\r\n return (\r\n <div className={`${conditions(ConditionName.isTouchScreenPortrait) ? \"pl-order-1\" : \"pl-order-none\"} pl-relative`}>\r\n <div className=\"pl-relative\">\r\n <Tooltip />\r\n <Markers />\r\n </div>\r\n <div\r\n className={`pl-w-full pl-flex pl-items-end`}\r\n onPointerDown={(event: any) => handlePointerDown(event, timeoutIds, setIsPointerDown)}\r\n onPointerMove={handlePointerMove}\r\n onPointerUp={(event: any) => handlePointerUp(event, setTimeoutIds, timeoutIds, setIsPointerDown)}\r\n onMouseMove={handleMouseMove}\r\n onMouseOut={handleMouseOut}\r\n onClick={handleCatchUpLoadingLog}\r\n onDoubleClick={(event: any) => event.stopPropagation()}\r\n >\r\n <div id=\"progress-area\" className=\"pl-w-full pl-absolute\">\r\n <div className=\"pl-w-full pl-h-[40px]\"/>\r\n <div\r\n id=\"time-progress-area\"\r\n className={`!pl-w-full !pl-h-[5px] pl-transition-transform pl-duration-300 pl-m-auto pl-cursor-pointer !pl-bg-gray-highLight pl-rounded`}\r\n style={{ transform: isPointerDown ? \"scaleY(1.8)\" : \"unset\" }}\r\n >\r\n <div\r\n id=\"time-progress-buffer\"\r\n className={`pl-absolute pl-h-[5px] pl-bg-z-gray-400/[0.7] pl-rounded`}\r\n style={{ width: `${bufferedTimeWidth}%` }}\r\n />\r\n <div\r\n id=\"time-progress-bar\"\r\n className={`pl-h-[5px] pl-rounded pl-relative pl-cursor-pointer pl-bg-primary before:pl-bg-primary before:pl-inline-block before:pl-w-4 before:pl-h-4 ${\r\n isPointerDown && \"before:pl-w-7 before:pl-h-3\"\r\n }`}\r\n style={{ width: `${(currentTime / duration) * progressBarWidth()}px` }}\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default ProgressBar;\r\n","import { useEffect, useState } from \"react\";\r\nimport { shallowEqual } from \"react-redux\";\r\nimport { memo } from \"react\";\r\nimport { useAppSelector } from \"../../../helpers/redux/hooks\";\r\nimport { conditions } from \"../../../helpers/conditions/conditions\";\r\nimport { ConditionName } from \"../../../helpers/interfaces/enums\";\r\nimport { fetchFile, getStyleForTime } from \"../../../helpers/redux/actions/progressbar.actions\";\r\n\r\nconst Tooltip = () => {\r\n const { details } = useAppSelector(({ videoData: { details } }) => ({ details }), shallowEqual);\r\n const { tooltipTime } = useAppSelector(({ controller: { tooltipTime, activeElements, isFullScreen } }) => ({ tooltipTime, activeElements, isFullScreen }), shallowEqual);\r\n\r\n const cache: any = {};\r\n const [vttPool, setVttPool] = useState<any>(undefined);\r\n const [vttUrl, setVttUrl] = useState<string | undefined>(conditions(ConditionName.isTouchScreen) ? details.vtt_mobile : details.vtt);\r\n\r\n useEffect(() => {\r\n setVttUrl(details.vtt_mobile);\r\n }, [details.vtt_mobile]);\r\n\r\n useEffect(() => {\r\n if (!!vttUrl) fetchFile(details.vtt_mobile!, setVttPool);\r\n }, [vttUrl]);\r\n\r\n return conditions(ConditionName.isActiveElements) ? (\r\n <div\r\n className={`pl-flex pl-flex-col pl-progressTooltip pl-absolute pl-bottom-[calc(100%+10px)] pl-px-[10px] pl-pt-[5px] pl-mr-[-25px] pl-text-white pl-text-[14px] ${\r\n vttUrl && !!vttPool ? \"\" : \"pl-bg-z-gray-700\"\r\n } pl-rounded-[6px] pl-opacity-0`}\r\n >\r\n {vttUrl && !!vttPool && (\r\n <div className=\"pl-flex-1 pl-border pl-border-white pl-rounded-[8px] pl-mb-2\">\r\n <div className=\"pl-rounded-[8px]\" style={getStyleForTime(tooltipTime, vttPool, cache)} />\r\n </div>\r\n )}\r\n <div className=\"pl-flex pl-items-center pl-justify-center pl-progressTimeTooltip pl-text-white !pl-opacity-100\" />\r\n </div>\r\n ) : (\r\n <></>\r\n );\r\n};\r\n\r\nexport default memo(Tooltip);\r\n","import store from \"../../redux/store\";\r\nimport { catchUpLoadingLog } from \"../../logs/logs\";\r\nimport { ConditionName, zIndex } from \"../../interfaces/enums\";\r\nimport { setActiveElements, setActivePointerProgressBar, setDelayTurnOffControlbar, setTooltipTime } from \"../slices/controllerSlice\";\r\nimport { handleVideoTimeline } from \"./controller.actions\";\r\nimport { setInfo } from \"../slices/videoDataSlice\";\r\nimport { sendFluentLog } from \"../../logs/fluentdLogger\";\r\nimport { conditions } from \"../../conditions/conditions\";\r\nimport { activeElementsTime } from \"../../environment\";\r\nimport { mainPlayerVideoTag, progressBar, progressBarWidth } from \"../../constants\";\r\nimport { secondsToHMS } from \"../../helpers\";\r\n\r\nexport const getPointerTime = (event: any) => {\r\n const { videoElementSizeInfo } = store.getState().videoData;\r\n const { duration } = store.getState().controller;\r\n const clientX = event.clientX !== undefined ? event.clientX : event.touches[0].clientX;\r\n if (clientX <= videoElementSizeInfo.right && clientX > 0) {\r\n let positionX = clientX - videoElementSizeInfo.left;\r\n let timePositionX = (positionX / videoElementSizeInfo.width) * duration;\r\n return timePositionX;\r\n }\r\n};\r\n\r\nexport const getPointerPosition = (event: any) => {\r\n const { videoElementSizeInfo } = store.getState().videoData;\r\n const clientX = event.clientX !== undefined ? event.clientX : event.touches[0].clientX;\r\n if (clientX <= videoElementSizeInfo.right && clientX > 0) {\r\n return clientX - videoElementSizeInfo.left;\r\n }\r\n};\r\n\r\nexport const getMarkerPosition = (markerTime: number) => {\r\n const { duration } = store.getState().controller;\r\n return (markerTime * progressBarWidth()) / duration;\r\n};\r\n\r\nexport const hideProgressTooltip = (progressTooltip: any) => {\r\n if (progressTooltip) {\r\n progressTooltip.style.opacity = \"0.0\";\r\n progressTooltip.style.pointerEvents = \"none\";\r\n progressTooltip.style.zIndex = zIndex.vttDisable;\r\n }\r\n};\r\n\r\nconst generalStyleTooltipHandler = (progressTooltip: any) => {\r\n progressTooltip.style.display = \"block\";\r\n progressTooltip.style.zIndex = zIndex.vtt;\r\n progressTooltip.style.opacity = !!store.getState().videoData.details.vtt ? \"1.0\" : \"0.6\";\r\n progressTooltip.style.pointerEvents = \"auto\";\r\n progressTooltip.style.transition = \"opacity 1s ease-out\";\r\n};\r\n\r\nconst vttTooltipStyleHandler = (event: any, progressTooltip: any) => {\r\n const { videoElementSizeInfo } = store.getState().videoData;\r\n const element: any = document.getElementsByClassName(\"pl-progressTooltip\")[0];\r\n const parentPlayer: any = document.getElementById(\"parent-player\");\r\n if (element && parentPlayer) {\r\n if ((getPointerPosition(event)! > element.getBoundingClientRect().width / 2) && (getPointerPosition(event)! < videoElementSizeInfo.right - videoElementSizeInfo.left - element.getBoundingClientRect().width / 2)) {\r\n progressTooltip.style.left = `${getPointerPosition(event)! - element.offsetWidth / 2}px`;\r\n } else if (getPointerPosition(event)! < (parentPlayer.offsetLeft === 0 ? element.offsetWidth : parentPlayer.offsetLeft)) {\r\n progressTooltip.style.left = `${0}px`;\r\n } else if (mainPlayerVideoTag().offsetLeft + mainPlayerVideoTag().offsetWidth < getPointerPosition(event)! + element.offsetWidth) {\r\n progressTooltip.style.left = `${mainPlayerVideoTag().offsetWidth - element.offsetWidth}px`;\r\n }\r\n }\r\n};\r\n\r\nexport const showProgressTooltip = (event: any, progressTooltip: any, progressBarTooltip: any) => {\r\n if (progressTooltip) generalStyleTooltipHandler(progressTooltip);\r\n if (store.getState().videoData.details.vtt) vttTooltipStyleHandler(event, progressTooltip); // have vtt\r\n else progressTooltip.style.left = `${getPointerPosition(event)! - 30}px`; // not vtt\r\n store.dispatch(setTooltipTime(Number(getPointerTime(event)!)));\r\n progressBarTooltip.textContent = `${secondsToHMS(getPointerTime(event)!)}`\r\n};\r\n\r\nexport const handleTimeTooltip = (event: any, isTimer: boolean = false) => {\r\n const { videoElementSizeInfo } = store.getState().videoData;\r\n const progressTooltip: any = document.querySelector(\".pl-progressTooltip\");\r\n const progressBarTooltip: any = document.querySelector(\".pl-progressTimeTooltip\");\r\n const clientX = event.clientX !== undefined ? event.clientX : event.touches[0].clientX;\r\n if (progressTooltip && progressBarTooltip && clientX <= videoElementSizeInfo.right && clientX > videoElementSizeInfo.left) {\r\n showProgressTooltip(event, progressTooltip, progressBarTooltip);\r\n if (isTimer) setTimeout(() => hideProgressTooltip(progressTooltip), 2000);\r\n } else hideProgressTooltip(progressTooltip);\r\n};\r\n\r\nexport const handleProgressTime = (event: any) => {\r\n const clientX = event.clientX !== undefined ? event.clientX : event.touches[0].clientX;\r\n if (progressBar()) {\r\n if (clientX <= event.view.innerWidth && clientX > 0)\r\n progressBar().style.width = `${getPointerPosition(event)}px`;\r\n else if (clientX <= event.view.innerWidth) progressBar().style.width = 0;\r\n else if (clientX > 0) progressBar().style.width = `100%`;\r\n }\r\n};\r\n\r\nexport const handlePointerDown = (event: any, timeoutIds: any, setIsPointerDown: (value: boolean) => void) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n setIsPointerDown(true);\r\n const dispatch = store.dispatch;\r\n const clientX = event.clientX !== undefined ? event.clientX : event.touches[0].clientX;\r\n if (clientX <= event.view.innerWidth && clientX > 0) {\r\n dispatch(setActivePointerProgressBar(true));\r\n dispatch(setDelayTurnOffControlbar(true));\r\n sessionStorage.setItem(\"previousVideoTime\", String(mainPlayerVideoTag().currentTime));\r\n event.target.setPointerCapture(event.pointerId);\r\n if (timeoutIds.length > 0) timeoutIds.map((id: any) => clearTimeout(id));\r\n }\r\n};\r\n\r\nexport const handlePointerMove = (event: any) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n const dispatch = store.dispatch;\r\n const { activePointerProgressBar } = store.getState().controller;\r\n const { left } = store.getState().videoData.videoElementSizeInfo;\r\n const clientX = event.clientX !== undefined ? event.clientX : event.touches[0].clientX;\r\n const progressTooltip: any = document.querySelector(\".pl-progressTooltip\");\r\n if (clientX > left) {\r\n if (progressTooltip) {\r\n progressTooltip.style.display = \"block !important\";\r\n progressTooltip.style.pointerEvents = \"auto\";\r\n }\r\n if (activePointerProgressBar) {\r\n dispatch(setDelayTurnOffControlbar(true));\r\n handleTimeTooltip(event);\r\n handleProgressTime(event);\r\n mainPlayerVideoTag().pause();\r\n }\r\n } else if (progressTooltip) {\r\n progressTooltip.style.display = \"none !important\";\r\n progressTooltip.style.pointerEvents = \"none\";\r\n }\r\n};\r\n\r\nexport const handlePointerUp = (\r\n event: any,\r\n setTimeoutIds: (timeoutIds: any[]) => void,\r\n timeoutIds: any,\r\n setIsPointerDown: (value: boolean) => void\r\n) => {\r\n setIsPointerDown(false);\r\n event.preventDefault();\r\n event.stopPropagation();\r\n const dispatch = store.dispatch;\r\n const { duration } = store.getState().controller;\r\n const { left, right } = store.getState().videoData.videoElementSizeInfo;\r\n const params = store.getState().videoData.params;\r\n event.target.removeEventListener(\"pointermove\", handlePointerMove);\r\n const clientX = event.clientX !== undefined ? event.clientX : event.touches[0].clientX;\r\n let currentTime = 0;\r\n if (clientX > left && clientX < right) currentTime = getPointerTime(event)!;\r\n else if (clientX < left) currentTime = 0;\r\n else if (clientX > 0) currentTime = duration;\r\n if (!conditions(ConditionName.isStaticFormat)) handleVideoTimeline(mainPlayerVideoTag().currentTime, currentTime);\r\n mainPlayerVideoTag().currentTime = currentTime;\r\n if(conditions(ConditionName.hasOnChangeCurrentTime)) params.onChangeCurrentTime!(currentTime);\r\n if (store.getState().controller.activePointerProgressBar) {\r\n dispatch(setActivePointerProgressBar(false));\r\n dispatch(setDelayTurnOffControlbar(false));\r\n mainPlayerVideoTag().play();\r\n handleTimeTooltip(event, true);\r\n sessionStorage.setItem(\"current-time\", String(currentTime));\r\n handleProgressTime(event);\r\n handleTimeout(event, dispatch, setTimeoutIds, timeoutIds);\r\n }\r\n};\r\n\r\nconst handleTimeout = (event: any, dispatch: any, setTimeoutIds: (timeoutIds: any[]) => void, timeoutIds: any) => {\r\n const ids = timeoutIds;\r\n let timeoutIdTemp = setTimeout(() => {\r\n const { settingPopover } = store.getState().popovers;\r\n const { delayTurnOffControlbar } = store.getState().controller;\r\n if (event.pointerType === \"touch\" && !settingPopover && delayTurnOffControlbar) dispatch(setActiveElements(false));\r\n }, activeElementsTime);\r\n ids.push(timeoutIdTemp);\r\n setTimeoutIds(ids);\r\n};\r\n\r\nexport const handleCatchUpLoadingLog = () => {\r\n const timer = Date.now();\r\n mainPlayerVideoTag()\r\n .play()\r\n .then(() => sendFluentLog(catchUpLoadingLog(Date.now() - timer)));\r\n};\r\n\r\nexport const handleMouseMove = (event: any) => handleTimeTooltip(event);\r\n\r\nexport const handleMouseOut = () => {\r\n const progressBarTooltip: any = document.querySelector(\".pl-progressTooltip\");\r\n hideProgressTooltip(progressBarTooltip);\r\n};\r\n\r\n/////// vtt tooltip\r\nconst deconstructTimestamp = (timestamp: string) => {\r\n const splitStampMilliseconds = timestamp.split(\".\");\r\n const timeParts = splitStampMilliseconds[0];\r\n const timePartsSplit = timeParts.split(\":\");\r\n\r\n return {\r\n milliseconds: parseInt(splitStampMilliseconds[1], 10) || 0,\r\n seconds: parseInt(timePartsSplit.pop()!, 10) || 0,\r\n minutes: parseInt(timePartsSplit.pop()!, 10) || 0,\r\n hours: parseInt(timePartsSplit.pop()!, 10) || 0\r\n };\r\n};\r\n\r\nconst getSecondsFromTimestamp = (timestamp: string) => {\r\n const timestampParts: any = deconstructTimestamp(timestamp);\r\n\r\n return parseInt(timestampParts.hours * (60 * 60) + timestampParts.minutes * 60 + timestampParts.seconds + timestampParts.milliseconds / 1000, 10);\r\n};\r\n\r\nconst getPropsFromDef = (def: string) => {\r\n const imageDefSplit = def.split(/#xywh=/i);\r\n const imageUrl = imageDefSplit[0];\r\n const imageCoords = imageDefSplit[1];\r\n const splitCoords: any = imageCoords.match(/[0-9]+/gi);\r\n\r\n return {\r\n x: splitCoords[0],\r\n y: splitCoords[1],\r\n w: splitCoords[2],\r\n h: splitCoords[3],\r\n image: imageUrl\r\n };\r\n};\r\n\r\nconst getFullyQualifiedUrl = (path: string, base: string) => {\r\n if (path.indexOf(\"//\") >= 0) {\r\n // We have a fully qualified path.\r\n return path;\r\n }\r\n\r\n if (base.indexOf(\"//\") === 0) {\r\n // We don't have a fully qualified path, but need to\r\n // be careful with trimming.\r\n return [base.replace(/\\/$/gi, \"\"), path.trim()].join(\"/\");\r\n }\r\n\r\n if (base.indexOf(\"//\") > 0) {\r\n // We don't have a fully qualified path, and should\r\n // trim both sides of base and path.\r\n return [base.trim(), path.trim()].join(\"/\");\r\n }\r\n\r\n // If all else fails.\r\n return path;\r\n};\r\n\r\nconst getVttCss = (vttImageDef: string, vttUrl: string) => {\r\n const cssObj: any = {};\r\n // If there isn't a protocol, use the VTT source URL.\r\n let baseSplit: string = vttUrl!.split(/\\/\\w+\\.vtt\\s?/)[0];\r\n\r\n /// offset : (vttUrl)!.split(/\\/\\w+\\.vtt\\s?/)[1]\r\n\r\n vttImageDef = getFullyQualifiedUrl(vttImageDef, baseSplit);\r\n\r\n if (!vttImageDef.match(/#xywh=/i)) {\r\n cssObj.background = 'url(\"' + vttImageDef + vttUrl!.split(/\\/\\w+\\.vtt\\s?/)[1] + '\")';\r\n return cssObj;\r\n }\r\n\r\n const imageProps = getPropsFromDef(vttImageDef);\r\n\r\n cssObj.background =\r\n 'url(\"' + imageProps.image + vttUrl!.split(/\\/\\w+\\.vtt\\s?/)[1] + '\") no-repeat -' + imageProps.x + \"px -\" + imageProps.y + \"px\";\r\n cssObj.width = imageProps.w + \"px\";\r\n cssObj.height = imageProps.h + \"px\";\r\n cssObj.url = imageProps.image;\r\n\r\n return cssObj;\r\n};\r\n\r\nexport const fetchFile = (url: string, setVttPool: any) => {\r\n fetch(url)\r\n .then((response) => {\r\n if (!response.ok) {\r\n store.dispatch(\r\n setInfo({\r\n ...store.getState().videoData.details,\r\n vtt: undefined,\r\n vtt_mobile: undefined\r\n })\r\n );\r\n throw new Error(\"Network response was not ok\");\r\n }\r\n return response.text();\r\n })\r\n .then((data) => {\r\n const processedVtts: any[] = [];\r\n const vttDefinitions = data.split(/[\\r\\n][\\r\\n]/i);\r\n vttDefinitions.forEach((vttDef) => {\r\n if (vttDef.match(/([0-9]{2}:)?([0-9]{2}:)?[0-9]{2}(.[0-9]{3})?( ?--> ?)([0-9]{2}:)?([0-9]{2}:)?[0-9]{2}(.[0-9]{3}).*/gi)) {\r\n const vttDefSplit = vttDef.split(/[\\r\\n]/i);\r\n const vttTiming = vttDefSplit[0];\r\n const vttTimingSplit = vttTiming.split(/ ?--> ?/i);\r\n const vttTimeStart = vttTimingSplit[0];\r\n const vttTimeEnd = vttTimingSplit[1];\r\n const vttImageDef = vttDefSplit[1];\r\n const vttCssDef = getVttCss(vttImageDef, url);\r\n\r\n processedVtts.push({\r\n start: getSecondsFromTimestamp(vttTimeStart),\r\n end: getSecondsFromTimestamp(vttTimeEnd),\r\n css: vttCssDef\r\n });\r\n }\r\n });\r\n setVttPool(processedVtts);\r\n })\r\n .catch((error) => {\r\n console.error(\"Error fetching file:\", error);\r\n });\r\n};\r\n\r\nexport const getStyleForTime = (time: number, vttPool: any, cache: any) => {\r\n for (let i = 0; i < vttPool.length; ++i) {\r\n const item = vttPool[i];\r\n if (time >= item.start && time < item.end) {\r\n // Cache miss\r\n if (item.css.url && !cache[item.css.url]) {\r\n const objectVtt: any = {\r\n background: item.css.background,\r\n width: item.css.width,\r\n height: item.css.height\r\n };\r\n cache[item.css.url] = objectVtt;\r\n return objectVtt;\r\n } else if (item.css.url) return cache[item.css.url];\r\n }\r\n }\r\n};\r\n","import { useEffect, useRef, useState, memo } from \"react\";\r\nimport { shallowEqual } from \"react-redux\";\r\nimport { useAppDispatch, useAppSelector } from \"../../../../../helpers/redux/hooks\";\r\nimport { mainPlayerVideoTag, progressBar, progressBarWidth } from \"../../../../../helpers/constants\";\r\nimport { handleTimeTooltip } from \"../../../../../helpers/redux/actions/progressbar.actions\";\r\nimport { handleVideoTimeline } from \"../../../../../helpers/redux/actions/controller.actions\";\r\nimport { sendFluentLog } from \"../../../../../helpers/logs/fluentdLogger\";\r\nimport { conditions } from \"../../../../../helpers/conditions/conditions\";\r\nimport { ConditionName, zIndex } from \"../../../../../helpers/interfaces/enums\";\r\nimport useOnClickOutside from \"../../../../../helpers/hooks/useOnClickOutside\";\r\nimport { eventMarkerClickLog } from \"../../../../../helpers/logs/logs\";\r\nimport Emoji from \"../../../emoji/emoji\";\r\nimport { inViewPort } from \"../../../../../helpers/helpers\";\r\n\r\nconst Markers = () => {\r\n const dispatch = useAppDispatch();\r\n const { duration, activeElements } = useAppSelector(\r\n ({ controller: { duration, activeElements, isFullScreen } }) => ({\r\n duration,\r\n activeElements,\r\n isFullScreen\r\n }),\r\n shallowEqual\r\n );\r\n const { markers } = useAppSelector(\r\n ({ videoData: { markers, videoElementSizeInfo } }) => ({ markers, videoElementSizeInfo }),\r\n shallowEqual\r\n );\r\n // const { sharePopover } = useAppSelector(({ popovers: { sharePopover } }) => ({ sharePopover }), shallowEqual);\r\n\r\n const [markerTime, setMarkerTime] = useState<number | undefined>(undefined);\r\n const [overlapMarkers, setOverlapMarkers] = useState<any[]>([]);\r\n const [overlapMarkersPosition, setOverlapMarkersPosition] = useState<any>({});\r\n const [isOverlapMarkersInViewport, setIsOverlapMarkersInViewport] = useState<boolean>(false);\r\n\r\n const calculateMarkerPosition = (time: number) => (duration ? (progressBarWidth() * time) / duration : 0);\r\n\r\n const handleClick = (\r\n event: any,\r\n markerTime: number,\r\n markerId: number,\r\n markerTitle: String,\r\n markerDescription: String,\r\n markerSticker: String,\r\n isTimer: boolean,\r\n markers: any\r\n ) => {\r\n event.stopPropagation();\r\n const eventMarkerWidth = 24;\r\n const result = (eventMarkerWidth * markerTime) / (progressBarWidth() + 5);\r\n\r\n let overlapMarkers: any[] = [];\r\n let sumOverlapMarkersTime: number = 0;\r\n\r\n markers.map((marker: any) => {\r\n if (marker.time > markerTime - result && marker.time < markerTime + result) {\r\n overlapMarkers.push(marker);\r\n sumOverlapMarkersTime += marker.time;\r\n }\r\n });\r\n if (overlapMarkers.length > 1) setOverlapMarkers(overlapMarkers);\r\n else {\r\n overlapMarkers = [];\r\n setOverlapMarkers([]);\r\n handleJumpToMarker(event, markerTime, markerId, markerTitle, markerDescription, markerSticker, isTimer);\r\n }\r\n };\r\n\r\n const handleJumpToMarker = (\r\n event: any,\r\n markerTime: number,\r\n markerId: number,\r\n markerTitle: String,\r\n markerDescription: String,\r\n markerSticker: String,\r\n isTimer: boolean\r\n ) => {\r\n event.stopPropagation();\r\n handleTimeTooltip(event, isTimer);\r\n handleVideoTimeline(mainPlayerVideoTag().currentTime, markerTime);\r\n mainPlayerVideoTag().currentTime = markerTime;\r\n if (progressBar()) progressBar().style.width = calculateMarkerPosition(markerTime);\r\n sendFluentLog(eventMarkerClickLog(markerId, markerTime, markerTitle, markerDescription, markerSticker));\r\n };\r\n\r\n // useEffect(() => {\r\n // if (!sharePopover) setMarkerTime(undefined);\r\n // }, [sharePopover]);\r\n\r\n // useEffect(() => {\r\n // if (!!markerTime) dispatch(setSharePopover(true));\r\n // }, [markerTime]);\r\n\r\n useEffect(() => {\r\n if (!conditions(ConditionName.isActiveElements)) setOverlapMarkers([]);\r\n }, [activeElements]);\r\n\r\n const markerRef = useRef<any>(null);\r\n\r\n useOnClickOutside(markerRef, () => setOverlapMarkers([]));\r\n\r\n useEffect(() => {\r\n if (overlapMarkers.length > 0) {\r\n const isInViewPort = inViewPort(document.getElementsByClassName(\"pl-overlapMarkers\")[0]);\r\n if (isInViewPort === \"inViewport\") {\r\n setIsOverlapMarkersInViewport(true);\r\n return setOverlapMarkersPosition({ left: calculateMarkerPosition(overlapMarkers[0].time) });\r\n } else if (isInViewPort === \"OutViewPortFromLeft\") {\r\n setIsOverlapMarkersInViewport(false);\r\n return setOverlapMarkersPosition({ left: 0 });\r\n } else if (isInViewPort === \"OutViewPortFromRight\") {\r\n setIsOverlapMarkersInViewport(false);\r\n return setOverlapMarkersPosition({ right: 0 });\r\n }\r\n }\r\n }, [overlapMarkers, document.getElementsByClassName(\"pl-overlapMarkers\")[0]]);\r\n\r\n const handleContextMenu = (event: any) => {\r\n event.preventDefault();\r\n if (conditions(ConditionName.isTouchScreen)) setMarkerTime(Number((event.target as any).getAttribute(\"data-marker\")));\r\n };\r\n\r\n \r\n\r\n return (\r\n <>\r\n {markers.map((marker: any) => (\r\n <div\r\n onContextMenu={handleContextMenu}\r\n key={marker.id}\r\n data-marker={marker.time}\r\n onClick={(event) => handleClick(event, marker.time, marker.id, marker.title, marker.description, marker.sticker, true, markers)}\r\n onDoubleClick={(event: any) => event.stopPropagation()}\r\n >\r\n <div\r\n className={`pl-emoji-image pl-absolute pl-bottom-[200%] pl-bg-z-gray-700/[0.4] pl-rounded-[6px] pl-p-1 ${\r\n conditions(ConditionName.isTouchScreenPortrait) ? \"pl-mb-5\" : \"pl-mb-5\"\r\n } pl-ml-[-12px] pl-cursor-pointer`}\r\n style={{ left: calculateMarkerPosition(marker.time), zIndex: zIndex.markers }}\r\n data-marker={marker.time}\r\n >\r\n {marker.isPersonal !== null && marker.isPersonal !== undefined && (\r\n <div className=\"pl-absolute pl-rounded-full pl-top-[-2px] pl-right-[-1px] pl-bg-main pl-w-2 pl-h-2\" />\r\n )}\r\n <Emoji dataMarker={marker.time} name={marker.sticker} className=\"pl-w-[16px] pl-h-[16px] !pl-max-w-max\" />\r\n </div>\r\n </div>\r\n ))}\r\n {overlapMarkers.length > 0 && (\r\n <div\r\n className={`pl-overlapMarkers ${\r\n isOverlapMarkersInViewport ? \"pl-overlayMarkersInViewport\" : \"pl-overlayMarkersOutViewport\"\r\n } pl-absolute pl-bottom-[45px] pl-px-1 pl-py-2 pl-flex pl-gap-3 pl-flex-row-reverse pl-justify-end pl-bg-z-gray-700/[0.4] pl-rounded-[6px] pl-ml-[-10px] animate__animated animate__fadeInUp pl-opacity-100`}\r\n ref={markerRef}\r\n style={overlapMarkersPosition}\r\n >\r\n {overlapMarkers.map((overlapMarker: any) => (\r\n <div\r\n key={overlapMarker.id}\r\n className=\"pl-emoji-image pl-rounded-[6px] pl-cursor-pointer\"\r\n data-marker={overlapMarker.time}\r\n onClick={(event: any) =>\r\n handleJumpToMarker(\r\n event,\r\n overlapMarker.time,\r\n overlapMarker.id,\r\n overlapMarker.title,\r\n overlapMarker.description,\r\n overlapMarker.sticker,\r\n true\r\n )\r\n }\r\n onDoubleClick={(event: any) => event.stopPropagation()}\r\n >\r\n <Emoji dataMarker={overlapMarker.time} name={overlapMarker.sticker} className=\"pl-w-[24px] pl-h-[24px] !pl-max-w-max\" />\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n {/* {!!sharePopover && markerTime && (\r\n <ShareDialog\r\n currentTime={markerTime ? markerTime : undefined}\r\n markerId={markers.filter((item: IMarker) => item.time === markerTime)[0].id}\r\n />\r\n )} */}\r\n </>\r\n );\r\n};\r\n\r\nexport default memo(Markers);\r\n","import { ChangeEvent, RefObject, useEffect } from \"react\";\r\n\r\nconst useOnClickOutside = (ref: RefObject<HTMLInputElement>, handler: (event: ChangeEvent<HTMLInputElement>) => void) => {\r\n useEffect(() => {\r\n const listener = (event: any) => {\r\n // Do nothing if clicking ref's element or descendent elements\r\n if (!ref.current || ref.current.contains(event.target)) return;\r\n handler(event);\r\n };\r\n document.addEventListener(\"mousedown\", listener);\r\n document.addEventListener(\"touchstart\", listener);\r\n return () => {\r\n document.removeEventListener(\"mousedown\", listener);\r\n document.removeEventListener(\"touchstart\", listener);\r\n };\r\n }, [ref, handler]);\r\n};\r\n\r\nexport default useOnClickOutside;\r\n","import { IEmojiProps } from \"../../../helpers/interfaces/interfaces\";\r\nimport { getEmojiUrl } from \"../../../helpers/services/baseUrl\";\r\n\r\nconst Emoji = ({ name, className, dataMarker }: IEmojiProps) => {\r\n return <img data-marker={dataMarker} src={`${getEmojiUrl()}/${name}.png`} alt={name} className={className} />;\r\n};\r\n\r\nexport default Emoji;\r\n","import { memo } from \"react\";\r\nimport { shallowEqual } from \"react-redux\";\r\nimport FullScreen from \"../../fullScreen/fullScreen\";\r\nimport PictureInPicture from \"../../pictureInPicture/pictureInPicture\";\r\nimport SoundVolume from \"../../soundVolume/soundVolume\";\r\nimport Settings from \"../../settings/settings\";\r\nimport { useAppSelector } from \"../../../../helpers/redux/hooks\";\r\nimport { ConditionName } from \"../../../../helpers/interfaces/enums\";\r\nimport { conditions } from \"../../../../helpers/conditions/conditions\";\r\nimport Speed from \"../../speed/speed\";\r\nimport QualityLevels from \"../../qualityLevels/qualityLevels\";\r\nimport ElapsedTime from \"../../elapsedTime/elapsedTime\";\r\nimport Unlock from \"../../lockUnlock/unlock\";\r\nimport SubtitleIcon from \"../../subtitles/subtitleIcon\";\r\nimport MarkersList from \"../../markersList/markersList\";\r\n\r\nconst Controlbar = () => {\r\n useAppSelector(({ controller: { isFullScreen } }) => ({ isFullScreen }), shallowEqual);\r\n useAppSelector(\r\n ({ videoData: { videoElementSizeInfo, params } }) => ({ videoElementSizeInfo, params }),\r\n shallowEqual\r\n );\r\n\r\n let styles = \"\";\r\n if (conditions(ConditionName.isTouchScreen)) {\r\n if (conditions(ConditionName.isFullScreen)) styles = \"pl-mx-4 tablet:pl-mx-6\"\r\n else styles = \"pl-mx-4\"\r\n } else {\r\n if (conditions(ConditionName.isFullScreen)) styles = \"pl-mx-8\"\r\n else styles = \"pl-mx-4\"\r\n }\r\n\r\n return (\r\n <div id=\"player-controllbar\" className={`pl-flex pl-justify-between pl-items-center ${styles}`}>\r\n <div\r\n className={`pl-flex pl-items-center pl-gap-5`}\r\n >\r\n <FullScreen />\r\n {conditions(ConditionName.isTouchScreenLandscape) && <Unlock />}\r\n {conditions(ConditionName.showPictureInPicture) && <PictureInPicture />}\r\n {conditions(ConditionName.showSettingIcon) && <Settings />}\r\n {conditions(ConditionName.isFullScreen) && !conditions(ConditionName.isStaticFormat) && <QualityLevels showQualityLevelsIcon={true} />}\r\n {(conditions(ConditionName.isFullScreen) || conditions(ConditionName.isStaticFormat)) && <Speed showSpeedIcon={true} />}\r\n {conditions(ConditionName.hasSubtitles) && !conditions(ConditionName.isTouchScreenPortrait) && <SubtitleIcon />}\r\n </div>\r\n <div className={`pl-flex pl-items-center pl-gap-5`}>\r\n {conditions(ConditionName.isTouchScreenPortrait) && <ElapsedTime />}\r\n {!conditions(ConditionName.isIOS) && <SoundVolume />}\r\n {conditions(ConditionName.hasMarkers) && <MarkersList />}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default memo(Controlbar);\r\n","import { useEffect, useState } from \"react\";\r\nimport { shallowEqual } from \"react-redux\";\r\nimport ControllbarTooltip from \"../footer/controllbar/controllbarTooltip\";\r\nimport { useAppDispatch, useAppSelector } from \"../../../helpers/redux/hooks\";\r\nimport { ConditionName } from \"../../../helpers/interfaces/enums\";\r\nimport { conditions } from \"../../../helpers/conditions/conditions\";\r\nimport { setActiveElements } from \"../../../helpers/redux/slices/controllerSlice\";\r\nimport { handleFullScreen, handleLockOrientation } from \"../../../helpers/redux/actions/controller.actions\";\r\nimport Image from \"next/legacy/image\";\r\nimport IMAGES from \"../../../images/importImages\";\r\n\r\nconst FullScreen = () => {\r\n const { isFullScreen } = useAppSelector(({ controller: { firstPlay, isFullScreen } }) => ({ firstPlay, isFullScreen }), shallowEqual);\r\n\r\n const [showTooltip, setShowTooltip] = useState<boolean>(false);\r\n\r\n const dispatch = useAppDispatch();\r\n\r\n useEffect(() => {\r\n if (!conditions(ConditionName.isFirstPlay)) dispatch(setActiveElements(false));\r\n }, [isFullScreen]);\r\n\r\n return (\r\n <div className=\"pl-relative pl-flex pl-items-center\">\r\n <Image\r\n src={conditions(ConditionName.isFullScreen) ? IMAGES.nonFullScreen : IMAGES.fullScreen}\r\n alt=\"fullScreen-icon\"\r\n className={`pl-cursor-pointer`}\r\n width={20}\r\n height={20}\r\n onMouseOver={() => !conditions(ConditionName.isTouchScreen) && setShowTooltip(true)}\r\n onMouseLeave={() => !conditions(ConditionName.isTouchScreen) && setShowTooltip(false)}\r\n onClick={() => {\r\n handleFullScreen();\r\n handleLockOrientation();\r\n }}\r\n id={conditions(ConditionName.isFullScreen) ? \"exit-full-s\" : \"full-s\"}\r\n />\r\n {showTooltip && (\r\n <ControllbarTooltip\r\n title={`${conditions(ConditionName.isFullScreen) ? \"خروج از\" : \"\"} تمام صفحه`}\r\n />\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default FullScreen;\r\n","import { conditions } from \"../../../../helpers/conditions/conditions\";\r\nimport { ConditionName } from \"../../../../helpers/interfaces/enums\";\r\nimport { IControllbarTooltipProps } from \"../../../../helpers/interfaces/interfaces\";\r\n\r\nconst ControllbarTooltip = ({ title, className }: IControllbarTooltipProps) => (\r\n <span\r\n className={`pl-absolute pl-w-max pl-bg-paper pl-text-white/[0.9] ${conditions(ConditionName.isFullScreen) ? \"pl-bottom-[300%]\" : \"pl-bottom-[270%]\"} pl-rounded-[8px] pl-text-[10px] pl-px-4 pl-py-[13px] pl-font-normal ${className}`}\r\n >\r\n {title}\r\n </span>\r\n);\r\n\r\nexport default ControllbarTooltip;\r\n","import { useState } from \"react\";\r\nimport { shallowEqual } from \"react-redux\";\r\nimport ControllbarTooltip from \"../footer/controllbar/controllbarTooltip\";\r\nimport { useAppDispatch, useAppSelector } from \"../../../helpers/redux/hooks\";\r\nimport { conditions } from \"../../../helpers/conditions/conditions\";\r\nimport { ConditionName } from \"../../../helpers/interfaces/enums\";\r\nimport IMAGES from \"../../../images/importImages\";\r\nimport Image from \"next/legacy/image\";\r\nimport { mainPlayerVideoTag } from \"../../../helpers/constants\";\r\nimport { setPlay } from \"../../../helpers/redux/slices/controllerSlice\";\r\n\r\nconst PictureInPicture = () => {\r\n const [showTooltip, setShowTooltip] = useState<boolean>(false);\r\n\r\n const dispatch = useAppDispatch();\r\n const { params, details } = useAppSelector(({ videoData: { params, details } }) => ({ params, details }), shallowEqual);\r\n return (\r\n <div className=\"pl-relative pl-flex pl-items-center\">\r\n <Image\r\n alt=\"\"\r\n onMouseOver={() => !conditions(ConditionName.isTouchScreen) && setShowTooltip(true)}\r\n onMouseLeave={() => !conditions(ConditionName.isTouchScreen) && setShowTooltip(false)}\r\n src={IMAGES.pictureInPicture}\r\n width={20}\r\n height={20}\r\n className=\"pl-flex pl-cursor-pointer\"\r\n onClick={() => {\r\n if (params.onClickMiniPlayerIcon) {\r\n localStorage.removeItem(\"close-miniPlayer\");\r\n mainPlayerVideoTag().pause();\r\n dispatch(setPlay(false));\r\n params.onClickMiniPlayerIcon({ video: details ? details : undefined, id: params.type === \"vod\" ? params.id : window.btoa(params.id!), type: params.type, currentTime: mainPlayerVideoTag().currentTime })\r\n }\r\n }}\r\n />\r\n {showTooltip && <ControllbarTooltip title=\"تصویر در تصویر \" />}\r\n </div>\r\n );\r\n};\r\n\r\nexport default PictureInPicture;\r\n","import { useRef, useState } from \"react\";\r\nimport { shallowEqual } from \"react-redux\";\r\nimport ControllbarTooltip from \"../footer/controllbar/controllbarTooltip\";\r\nimport Image from \"next/legacy/image\";\r\nimport { useAppDispatch, useAppSelector } from \"../../../helpers/redux/hooks\";\r\nimport store from \"../../../helpers/redux/store\";\r\nimport { volumeLog } from \"../../../helpers/logs/logs\";\r\nimport { sendFluentLog } from \"../../../helpers/logs/fluentdLogger\";\r\nimport { setUserSettings } from \"../../../helpers/redux/slices/userSlice\";\r\nimport { handleChangeSoundVolume } from \"../../../helpers/redux/actions/controller.actions\";\r\nimport { ConditionName } from \"../../../helpers/interfaces/enums\";\r\nimport { conditions } from \"../../../helpers/conditions/conditions\";\r\nimport IMAGES from \"../../../images/importImages\";\r\n\r\nconst SoundVolume = () => {\r\n const [showTooltip, setShowTooltip] = useState<boolean>(false);\r\n\r\n const dispatch = useAppDispatch();\r\n const { settings } = useAppSelector(({ user: { settings } }) => ({ settings }), shallowEqual);\r\n\r\n const primaryVolumeRef = useRef<number>(settings.volume);\r\n\r\n const handleMouseUp = () => {\r\n if (primaryVolumeRef.current !== settings.volume) {\r\n const { settings } = store.getState().user;\r\n sendFluentLog(volumeLog(primaryVolumeRef.current, settings.volume));\r\n primaryVolumeRef.current = settings.volume;\r\n // createSettings({ ...settings, volume: settings.volume });\r\n dispatch(setUserSettings({ ...settings, volume: settings.volume }));\r\n }\r\n };\r\n\r\n const handleMute = (type: string) => {\r\n const { settings } = store.getState().user;\r\n if (type === \"mute\") {\r\n handleChangeSoundVolume(0);\r\n sendFluentLog(volumeLog(settings.volume, 0));\r\n // createSettings({ ...settings, volume: 0 });\r\n } else {\r\n sendFluentLog(volumeLog(settings.volume, 100));\r\n handleChangeSoundVolume(100);\r\n // createSettings({ ...settings, volume: 100 });\r\n }\r\n };\r\n\r\n return (\r\n <div className={`pl-relative pl-inline-flex pl-items-center pl-gap-2 pl-sound-icon`}>\r\n {!conditions(ConditionName.isTouchScreen) && (\r\n <input\r\n onMouseUp={handleMouseUp}\r\n type=\"range\"\r\n min=\"0\"\r\n max=\"100\"\r\n value={settings.volume}\r\n onChange={(event) => handleChangeSoundVolume(+event.target.value)}\r\n className=\"pl-soundVolume pl-cursor-pointer rounded-full\"\r\n style={{ background: `linear-gradient(to right, white ${settings.volume}%, rgba(255,255,255,0.3) 0)` }}\r\n />\r\n )}\r\n <div className=\"pl-relative pl-flex pl-items-center\">\r\n <Image\r\n src={conditions(ConditionName.hasSound) ? IMAGES.unMute : IMAGES.mute}\r\n alt={conditions(ConditionName.hasSound) ? \"unmute-icon\" : \"mute-icon\"}\r\n className={`pl-flex pl-items-center pl-cursor-pointer`}\r\n width={20}\r\n height={20}\r\n onClick={() => (conditions(ConditionName.hasSound) ? handleMute(\"mute\") : handleMute(\"unmute\"))}\r\n onDoubleClick={(event: any) => event.stopPropagation()}\r\n onMouseOver={() => !conditions(ConditionName.isTouchScreen) && setShowTooltip(true)}\r\n onMouseLeave={() => !conditions(ConditionName.isTouchScreen) && setShowTooltip(false)}\r\n id={conditions(ConditionName.hasSound) ? \"mute\" : \"unmute\"}\r\n />\r\n {showTooltip && (\r\n <ControllbarTooltip\r\n className=\"pl-left-0\"\r\n title={conditions(ConditionName.hasSound) ? \"صدا\" : \"بی‌صدا\"}\r\n />\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default SoundVolume;\r\n","import { memo, useRef, useState } from \"react\";\r\nimport { shallowEqual } from \"react-redux\";\r\nimport ControllbarTooltip from \"../footer/controllbar/controllbarTooltip\";\r\nimport Popover from \"../popover/popover\";\r\nimport Image from \"next/legacy/image\";\r\nimport QualityLevels from \"../qualityLevels/qualityLevels\";\r\nimport { useAppDispatch, useAppSelector } from \"../../../helpers/redux/hooks\";\r\nimport { ConditionName, SettingSections } from \"../../../helpers/interfaces/enums\";\r\nimport useOnClickOutside from \"../../../helpers/hooks/useOnClickOutside\";\r\nimport { setSettingPopover } from \"../../../helpers/redux/slices/popoversSlice\";\r\nimport { conditions } from \"../../../helpers/conditions/conditions\";\r\nimport IMAGES from \"../../../images/importImages\";\r\nimport Speed from \"../speed/speed\";\r\nimport Toggle from \"../toggle/toggle\";\r\nimport { handleSubtitle } from \"../../../helpers/redux/actions/videoData.actions\";\r\nimport SpeedIcon from \"../../icon-components/speed\";\r\nimport SubtitleSettingMenu from \"../subtitles/subtitleSettingMenu\";\r\n\r\nconst Settings = () => {\r\n const dispatch = useAppDispatch();\r\n const {selectedSubtitle} = useAppSelector(({ videoData: { params, subtitles, selectedSubtitle } }) => ({ params, subtitles, selectedSubtitle }), shallowEqual);\r\n const { settingPopover } = useAppSelector(({ popovers: { settingPopover } }) => ({ settingPopover }), shallowEqual);\r\n\r\n const [section, setSection] = useState<string>(SettingSections.main);\r\n const [showTooltip, setShowTooltip] = useState<boolean>(false);\r\n\r\n const settingsRef = useRef(null);\r\n\r\n useOnClickOutside(settingsRef, () => {\r\n dispatch(setSettingPopover(false));\r\n setTimeout(() => setSection(SettingSections.main), 500);\r\n });\r\n\r\n return (\r\n <div className={`pl-inline-flex ${conditions(ConditionName.isLandscape) && \"pl-relative\"}`} ref={settingsRef}>\r\n <div\r\n className={`pl-flex pl-items-center pl-relative pl-cursor-pointer`}\r\n onClick={() => dispatch(setSettingPopover(!settingPopover))}\r\n onMouseOver={() => !conditions(ConditionName.isTouchScreen) && !conditions(ConditionName.showSettingPopover) && setShowTooltip(true)}\r\n onMouseLeave={() => !conditions(ConditionName.isTouchScreen) && setShowTooltip(false)}\r\n >\r\n <Image\r\n src={IMAGES.settings}\r\n alt=\"\"\r\n width={20}\r\n height={20}\r\n />\r\n {showTooltip && <ControllbarTooltip title=\"تنظیمات \" />}\r\n </div>\r\n <Popover\r\n classNames={`!pl-p-0 pl-overflow-hidden !pl-bg-white ${conditions(ConditionName.isTouchScreen) ? \"!pl-fixed !pl-bottom-0 !pl-rounded-t-[20px] pl-rounded-b-none\" : \"!pl-w-[230px] pl-right-0 pl-mb-[33px] !pl-rounded-[12px]\"} ${conditions(ConditionName.isTouchScreenPortrait) && \"!pl-w-screen tablet:!pl-max-w-[285px] tablet:!pl-mx-auto\"} ${conditions(ConditionName.isTouchScreenLandscape) && \"pl-w-full pl-max-w-[285px]\"}`}\r\n status={settingPopover}\r\n onClose={() => {\r\n dispatch(setSettingPopover(false))\r\n setTimeout(() => setSection(SettingSections.main), 500);\r\n }}\r\n type={conditions(ConditionName.isTouchScreen) ? \"modal\" : \"popover\"}\r\n isBlurBackground={conditions(ConditionName.isTouchScreenPortrait)}\r\n ref={conditions(ConditionName.isTouchScreenPortrait) ? settingsRef : undefined}\r\n isHeader={conditions(ConditionName.isTouchScreen)}\r\n customHeader={<></>}\r\n isHasCatchUpLineOnTop={conditions(ConditionName.isTouchScreen)}\r\n >\r\n <>\r\n {section === SettingSections.main && (\r\n <div id={SettingSections.main} className=\"pl-p-4 pl-rounded-[10px] pl-flex pl-flex-col pl-gap-5 animate__animated animate__fadeIn\">\r\n {!conditions(ConditionName.isStaticFormat) && (\r\n <>\r\n <div className=\"pl-flex pl-items-center pl-gap-[10px] pl-cursor-pointer\" onClick={() => setSection(SettingSections.qualityLevels)}>\r\n <Image \r\n src={IMAGES.qualitySetting}\r\n alt=\"\"\r\n width={16}\r\n height={16}\r\n />\r\n <p className={`pl-ml-auto pl-text-[12px] pl-font-medium pl-text-black/[0.87]`}>کیفیت پخش</p>\r\n <Image\r\n src={IMAGES.chevronLeft}\r\n alt=\"\"\r\n width={16}\r\n height={16}\r\n />\r\n </div>\r\n </>\r\n )}\r\n {/* {conditions(ConditionName.hasSubtitles) && (\r\n <div className=\"pl-flex pl-items-center pl-gap-[10px] pl-cursor-pointer\" onClick={() => setSection(SettingSections.subtitles)}>\r\n <SpeedIcon className=\"size-5 pl-fill-black/[0.5]\"/>\r\n <p className={`pl-ml-auto pl-text-[12px] pl-font-medium pl-text-black/[0.87]`}>تنظیمات زیرنویس</p>\r\n <Image\r\n src={IMAGES.chevronLeft}\r\n alt=\"\"\r\n width={16}\r\n height={16}\r\n />\r\n </div>\r\n )} */}\r\n <div className=\"pl-flex pl-items-center pl-gap-[10px] pl-cursor-pointer\" onClick={() => setSection(SettingSections.speed)}>\r\n <SpeedIcon className=\"size-5 pl-fill-black/[0.5]\"/>\r\n <p className={`pl-ml-auto pl-text-[12px] pl-font-medium pl-text-black/[0.87]`}>سرعت</p>\r\n <Image\r\n src={IMAGES.chevronLeft}\r\n alt=\"\"\r\n width={16}\r\n height={16}\r\n />\r\n </div>\r\n {conditions(ConditionName.hasSubtitles) && conditions(ConditionName.isTouchScreenPortrait) && (\r\n <div className=\"pl-flex pl-items-center pl-gap-[10px] pl-cursor-pointer\">\r\n <Image\r\n src={IMAGES.subtitleOutlineGray}\r\n alt=\"subtitle-icon\"\r\n width={20}\r\n height={20}\r\n />\r\n <p className={`pl-ml-auto pl-text-[12px] pl-font-medium pl-text-black/[0.87]`}>زیرنویس</p>\r\n <Toggle enabled={!!selectedSubtitle} setEnabled={handleSubtitle} />\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n {section === SettingSections.qualityLevels && <QualityLevels setSection={setSection} />}\r\n {section === SettingSections.speed && <Speed setSection={setSection} />}\r\n {section === SettingSections.subtitles && <SubtitleSettingMenu setSection={setSection} />}\r\n </>\r\n </Popover>\r\n </div>\r\n );\r\n};\r\n\r\nexport default memo(Settings);\r\n","import { TouchEvent, forwardRef, useEffect, useRef, useState } from \"react\";\r\nimport { createPortal } from \"react-dom\";\r\nimport { shallowEqual } from \"react-redux\";\r\nimport { IPopoverProps } from \"../../../helpers/interfaces/interfaces\";\r\nimport { useAppSelector } from \"../../../helpers/redux/hooks\";\r\nimport { conditions } from \"../../../helpers/conditions/conditions\";\r\nimport { ConditionName, zIndex } from \"../../../helpers/interfaces/enums\";\r\n\r\nconst Popover = forwardRef(\r\n (\r\n {\r\n children,\r\n status,\r\n onClose,\r\n type,\r\n classNames,\r\n parentClassNames,\r\n styles,\r\n isBlurBackground,\r\n isFullHeight = false,\r\n isHeader,\r\n isHasCatchUpLineOnTop = false,\r\n animation,\r\n scrollbar = false,\r\n isFocusOnInput = false,\r\n }: IPopoverProps,\r\n ref: any\r\n ) => {\r\n const [showPopover, setShowPopover] = useState<boolean>(status!);\r\n\r\n const [heightOnTouchMove, setHeightOnTouchMove] = useState<number>(0);\r\n const [zIndexOnCatchUp, setZIndexOnCatchUp] = useState<number>(0);\r\n\r\n const { videoElementSizeInfo } = useAppSelector(({ videoData: { videoElementSizeInfo } }) => ({ videoElementSizeInfo }), shallowEqual);\r\n\r\n const popoverContentHeightRef = useRef<number>(0);\r\n\r\n useEffect(() => {\r\n let timeout: any = undefined;\r\n\r\n if (status) {\r\n setShowPopover(true);\r\n } else {\r\n timeout = setTimeout(() => {\r\n onClose(false);\r\n setHeightOnTouchMove(0);\r\n setShowPopover(false);\r\n }, 500);\r\n }\r\n\r\n return () => clearTimeout(timeout);\r\n }, [status]);\r\n\r\n const handleTouchMove = (event: any) => {\r\n const popoverContent = document.getElementById(\"popover-content\");\r\n if (!popoverContentHeightRef.current) popoverContentHeightRef.current = window.innerHeight - videoElementSizeInfo.top - popoverContent?.getBoundingClientRect().top!\r\n event.stopPropagation();\r\n if (window.innerHeight - videoElementSizeInfo.top - event.touches[0].clientY < popoverContentHeightRef.current) setHeightOnTouchMove(window.innerHeight - event.touches[0].clientY);\r\n setZIndexOnCatchUp(zIndex.maxPopover);\r\n };\r\n\r\n const handleTouchEnd = () => {\r\n onClose();\r\n };\r\n\r\n const content = (\r\n <>\r\n {isBlurBackground && (\r\n <div\r\n className={`pl-bg-black/[0.5] pl-w-screen pl-h-screen pl-fixed pl-top-0 pl-right-0 animate__animated animate__faster ${status ? \"animate__fadeIn\" : \"animate__fadeOut\"\r\n }`}\r\n style={{ zIndex: zIndex.popoverBlurBackground }}\r\n />\r\n )}\r\n <div\r\n className={`${type === \"modal\" &&\r\n \"pl-fixed pl-top-0 pl-left-0 pl-flex pl-w-full pl-h-full pl-justify-center pl-items-end sm:pl-items-center\"\r\n } ${parentClassNames}`}\r\n style={{ zIndex: isFullHeight && !isFocusOnInput ? zIndexOnCatchUp : zIndex.popoverContent }}\r\n >\r\n <div\r\n className={`pl-flex pl-flex-col pl-rounded-[8px] animate__animated animate__faster pl-bg-white/[0.9]\r\n ${isFullHeight && \"pl-h-full\"}\r\n ${animation\r\n ? animation\r\n : window.innerWidth > 768 && type === \"modal\"\r\n ? status\r\n ? \"animate__fadeIn\"\r\n : \"animate__fadeOut\"\r\n : status\r\n ? \"animate__fadeInUp\"\r\n : \"animate__fadeOutDown\"\r\n }\r\n ${conditions(ConditionName.isTouchScreenPortrait)\r\n ? `!pl-fixed !pl-right-0 !pl-left-0 !pl-bottom-0 !pl-w-full !pl-mb-0 pl-rounded-[12px] !pl-rounded-b-none !pl-bg-white`\r\n : \"before:pl-hidden\"\r\n } \r\n ${type !== \"modal\" && \"pl-absolute pl-bottom-[130%] pl-overflow-auto no-scrollbar\"}\r\n ${classNames}\r\n `}\r\n style={{\r\n height: heightOnTouchMove ? heightOnTouchMove : \"max-content\",\r\n maxHeight: \"80vh\",\r\n zIndex: zIndex.popoverContent,\r\n ...styles,\r\n }}\r\n ref={ref}\r\n id=\"popover-content\"\r\n >\r\n <>\r\n {isHeader && (\r\n <div\r\n onTouchMove={isHasCatchUpLineOnTop ? handleTouchMove : () => { }}\r\n onTouchEndCapture={isHasCatchUpLineOnTop ? handleTouchEnd : () => { }}\r\n className=\"pl-py-4\"\r\n >\r\n {isHasCatchUpLineOnTop && (\r\n <div className=\"pl-absolute pl-top-[10px] pl-right-[50%] pl-mr-[-25px] pl-text-center pl-w-8 pl-h-1 pl-rounded-[20px] pl-bg-gray-highLight\" />\r\n )}\r\n </div>\r\n )}\r\n <div\r\n className={`pl-overflow-y-auto pl-h-full pl-w-full ${!scrollbar && \"no-scrollbar\"}`}\r\n onTouchMove={(event: TouchEvent<HTMLDivElement>) => event.stopPropagation()}\r\n >\r\n {children}\r\n </div>\r\n </>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n\r\n return (\r\n <>\r\n {showPopover && (\r\n <>\r\n {type === \"modal\" ? (\r\n createPortal(<>{content}</>, document.getElementById(\"dialog-react-root-videoPlayer\")!)\r\n ) : (\r\n <div id=\"player-popover\">{content}</div>\r\n )}\r\n </>\r\n )}\r\n </>\r\n );\r\n }\r\n);\r\n\r\nPopover.displayName = \"popover\";\r\n\r\nexport default Popover;\r\n","import { shallowEqual } from \"react-redux\";\r\nimport { memo, useRef, useState } from \"react\";\r\nimport { useAppDispatch, useAppSelector } from \"../../../helpers/redux/hooks\";\r\nimport { conditions } from \"../../../helpers/conditions/conditions\";\r\nimport { ConditionName, SettingSections } from \"../../../helpers/interfaces/enums\";\r\nimport { sendFluentLog } from \"../../../helpers/logs/fluentdLogger\";\r\nimport { qualityChangeRequestLog } from \"../../../helpers/logs/logs\";\r\nimport { setActiveElements } from \"../../../helpers/redux/slices/controllerSlice\";\r\nimport { setQualityLevelsPopover, setSettingPopover } from \"../../../helpers/redux/slices/popoversSlice\";\r\nimport { setUserSettings } from \"../../../helpers/redux/slices/userSlice\";\r\nimport Image from \"next/legacy/image\";\r\nimport IMAGES from \"../../../images/importImages\";\r\nimport { IQualityLevel } from \"../../../helpers/interfaces/interfaces\";\r\nimport Popover from \"../popover/popover\";\r\nimport useOnClickOutside from \"../../../helpers/hooks/useOnClickOutside\";\r\nimport ControllbarTooltip from \"../footer/controllbar/controllbarTooltip\";\r\n\r\nconst QualityLevels = ({ setSection, showQualityLevelsIcon }: IQualityLevel) => {\r\n const dispatch = useAppDispatch();\r\n let { qualityLevels } = useAppSelector(\r\n ({ controller: { qualityLevels, manualQuality, autoQuality } }) => ({\r\n qualityLevels,\r\n manualQuality,\r\n autoQuality \r\n }),\r\n shallowEqual\r\n );\r\n const { settings } = useAppSelector(({ user: { settings } }) => ({ settings }), shallowEqual);\r\n const { qualityLevelsPopover } = useAppSelector(({ popovers: { qualityLevelsPopover } }) => ({ qualityLevelsPopover }), shallowEqual);\r\n useAppSelector(({ videoData: { params, videoElementSizeInfo } }) => ({ params, videoElementSizeInfo }), shallowEqual);\r\n\r\n const [showTooltip, setShowTooltip] = useState<boolean>(false);\r\n\r\n qualityLevels = [-1, ...qualityLevels];\r\n\r\n const handleTickSelectedQuality = (index: number, qualityLevel: number) => {\r\n if (conditions(ConditionName.isAutoQuality) && qualityLevel === -1) return true;\r\n else return !conditions(ConditionName.isAutoQuality) && settings.quality === index;\r\n };\r\n\r\n const qualityLevelsRef = useRef<any>(null);\r\n\r\n useOnClickOutside(qualityLevelsRef, () => dispatch(setQualityLevelsPopover(false)));\r\n\r\n const qualityLevelsContent = (\r\n <div id={SettingSections.qualityLevels} className=\"animate__animated animate__fadeIn pl-py-2\">\r\n <ul className=\"pl-flex pl-flex-col pl-gap-2\">\r\n {qualityLevels.map((qualityLevel: number, index: number) => (\r\n <li\r\n key={index}\r\n className={`pl-flex pl-items-center pl-ps-[24.2px] pl-text-[14px] pl-font-medium pl-rounded-[4px] pl-relative pl-cursor-pointer ${handleTickSelectedQuality(index - 1, qualityLevel) && \"pl-bg-primary/[0.12] !pl-cursor-default\"\r\n } ${conditions(ConditionName.isTouchScreen) ? \"pl-py-[13.5px]\" : \"pl-py-[9.5px]\"}`}\r\n onClick={handleTickSelectedQuality(index - 1, qualityLevel) ? () => { } : () => {\r\n sendFluentLog(qualityChangeRequestLog(qualityLevel === -1 ? \"auto\" : `${qualityLevel}P`));\r\n dispatch(setActiveElements(false));\r\n dispatch(setSettingPopover(false));\r\n dispatch(setQualityLevelsPopover(false));\r\n dispatch(setUserSettings({ ...settings, quality: qualityLevel === -1 ? -1 : index - 1 }));\r\n if (setSection) setSection(SettingSections.main);\r\n }}\r\n >\r\n {!conditions(ConditionName.isTouchScreen) && handleTickSelectedQuality(index - 1, qualityLevel) && (\r\n <div className=\"pl-absolute pl-right-[11.8px]\">\r\n <Image\r\n src={IMAGES.tick}\r\n alt=\"\"\r\n width={12}\r\n height={9}\r\n />\r\n </div>\r\n )}\r\n {conditions(ConditionName.isTouchScreen) && (\r\n <div className={`pl-w-5 pl-h-5 pl-rounded-full pl-border pl-border-black/[0.5] pl-p-0.5 ${handleTickSelectedQuality(index - 1, qualityLevel) && \"pl-border-primary\"}`}>\r\n {handleTickSelectedQuality(index - 1, qualityLevel) && <div className=\"pl-w-full pl-h-full pl-rounded-full pl-bg-primary\"/>}\r\n </div>\r\n )}\r\n <span className={`pl-w-full pl-text-[14px] pl-text-black/[0.87] ${conditions(ConditionName.isTouchScreen) ? \"pl-pr-[21px]\" : \"pl-pr-[10px]\"}`}>\r\n {qualityLevel === -1 ? (\r\n <span>\r\n <span>خودکار </span>\r\n <span className=\"pl-text-[10px] pl-font-normal pl-text-black/[0.5]\">(بر اساس سرعت اینترنت شما)</span>\r\n </span>\r\n ) : `${qualityLevel}p`}\r\n </span>\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n )\r\n\r\n return (\r\n <>\r\n {showQualityLevelsIcon ? (\r\n <div className=\"pl-relative pl-flex pl-items-center\" ref={qualityLevelsRef}>\r\n <Image\r\n src={IMAGES.qualitySetting1}\r\n alt=\"speed-icon\"\r\n width={20}\r\n height={20}\r\n onClick={() => dispatch(setQualityLevelsPopover(!qualityLevelsPopover))}\r\n onMouseOver={() => !conditions(ConditionName.isTouchScreen) && !conditions(ConditionName.showQualityLevelsPopover) && setShowTooltip(true)}\r\n onMouseLeave={() => !conditions(ConditionName.isTouchScreen) && setShowTooltip(false)}\r\n className=\"pl-cursor-pointer\"\r\n />\r\n {showTooltip && (\r\n <ControllbarTooltip\r\n title=\"کیفیت\"\r\n />\r\n )}\r\n <Popover\r\n classNames={`!pl-p-0 pl-overflow-hidden !pl-bg-white ${conditions(ConditionName.isTouchScreen) ? \"!pl-fixed !pl-bottom-0 !pl-rounded-t-[20px] pl-rounded-b-none\" : \"pl-right-0 pl-mb-[33px] !pl-rounded-[12px] pl-w-[230px]\"} ${conditions(ConditionName.isTouchScreenPortrait) && \"!pl-w-screen tablet:pl-max-w-[440px]\"} ${conditions(ConditionName.isTouchScreenLandscape) && \"pl-w-full pl-max-w-[440px]\"}`}\r\n status={qualityLevelsPopover}\r\n onClose={() => dispatch(setQualityLevelsPopover(false))}\r\n type={conditions(ConditionName.isTouchScreen) ? \"modal\" : \"popover\"}\r\n isBlurBackground={conditions(ConditionName.isTouchScreenPortrait)}\r\n ref={conditions(ConditionName.isTouchScreenPortrait) ? qualityLevelsRef : undefined}\r\n isHeader={conditions(ConditionName.isTouchScreen)}\r\n customHeader={<></>}\r\n isHasCatchUpLineOnTop={conditions(ConditionName.isTouchScreen)}\r\n >\r\n {qualityLevelsContent}\r\n </Popover>\r\n </div>\r\n ) : (\r\n <>{qualityLevelsContent}</>\r\n )}\r\n\r\n </>\r\n );\r\n};\r\n\r\nexport default memo(QualityLevels);\r\n","import { useEffect, useRef, useState } from \"react\";\r\nimport { shallowEqual } from \"react-redux\";\r\nimport { useAppDispatch, useAppSelector } from \"../../../helpers/redux/hooks\";\r\nimport useOnClickOutside from \"../../../helpers/hooks/useOnClickOutside\";\r\nimport { setSettingPopover, setSpeedPopover } from \"../../../helpers/redux/slices/popoversSlice\";\r\nimport { conditions } from \"../../../helpers/conditions/conditions\";\r\nimport { ConditionName, SettingSections } from \"../../../helpers/interfaces/enums\";\r\nimport { setUserSettings } from \"../../../helpers/redux/slices/userSlice\";\r\nimport { sendFluentLog } from \"../../../helpers/logs/fluentdLogger\";\r\nimport { speedChangeLog } from \"../../../helpers/logs/logs\";\r\nimport { ISpeed } from \"../../../helpers/interfaces/interfaces\";\r\nimport Image from \"next/legacy/image\";\r\nimport IMAGES from \"../../../images/importImages\";\r\nimport Popover from \"../popover/popover\";\r\nimport { setActiveElements } from \"../../../helpers/redux/slices/controllerSlice\";\r\nimport ControllbarTooltip from \"../footer/controllbar/controllbarTooltip\";\r\nimport SpeedIcon from \"../../icon-components/speed\";\r\nimport { mainPlayerVideoTag } from \"../../../helpers/constants\";\r\n\r\nconst speeds = [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2];\r\n\r\nconst Speed = ({setSection, showSpeedIcon}: ISpeed) => {\r\n const dispatch = useAppDispatch();\r\n useAppSelector(({ videoData: { videoElementSizeInfo, params } }) => ({ videoElementSizeInfo, params }), shallowEqual);\r\n const { speedPopover } = useAppSelector(({ popovers: { speedPopover } }) => ({ speedPopover }), shallowEqual);\r\n const { settings } = useAppSelector(({ user: { settings } }) => ({ settings }), shallowEqual);\r\n\r\n const speedRef = useRef<any>(null);\r\n\r\n const [showTooltip, setShowTooltip] = useState<boolean>(false);\r\n\r\n useOnClickOutside(speedRef, () => dispatch(setSpeedPopover(false)));\r\n\r\n useEffect(() => {\r\n if (mainPlayerVideoTag()) mainPlayerVideoTag().playbackRate = settings.speed;\r\n }, []);\r\n\r\n const speedContent = (\r\n <div id={SettingSections.speed} className=\"animate__animated animate__fadeIn pl-py-2\">\r\n <ul className=\"pl-flex pl-flex-col pl-gap-2\">\r\n {speeds.map((speed: number, index: number) => (\r\n <li\r\n key={index}\r\n className={`pl-flex pl-items-center pl-ps-[24.2px] pl-text-[14px] pl-font-medium pl-rounded-[4px] pl-relative pl-cursor-pointer ${settings.speed === speed && \"pl-bg-primary/[0.12] !pl-cursor-default\"} ${conditions(ConditionName.isTouchScreen) ? \"pl-py-[13.5px]\" : \"pl-py-[9.5px]\"}`}\r\n onClick={settings.speed === speed ? () => { } : () => {\r\n if (!conditions(ConditionName.isStaticFormat)) sendFluentLog(speedChangeLog(speed));\r\n dispatch(setActiveElements(false));\r\n dispatch(setSettingPopover(false));\r\n dispatch(setSpeedPopover(false));\r\n dispatch(setUserSettings({ ...settings, speed }));\r\n mainPlayerVideoTag().playbackRate = speed;\r\n if (setSection) setSection(SettingSections.main);\r\n }}\r\n >\r\n {!conditions(ConditionName.isTouchScreen) && settings.speed === speed && (\r\n <div className=\"pl-absolute pl-right-[11.8px]\">\r\n <Image\r\n src={IMAGES.tick}\r\n alt=\"\"\r\n width={12}\r\n height={9}\r\n />\r\n </div>\r\n )}\r\n {conditions(ConditionName.isTouchScreen) && (\r\n <div className={`pl-w-5 pl-h-5 pl-rounded-full pl-border pl-border-black/[0.5] pl-p-0.5 ${settings.speed === speed && \"pl-border-primary\"}`}>\r\n {settings.speed === speed && <div className=\"pl-w-full pl-h-full pl-rounded-full pl-bg-primary\" />}\r\n </div>\r\n )}\r\n <p className={`pl-w-full pl-flex pl-items-center pl-gap-2 pl-text-black/[0.87] ${conditions(ConditionName.isTouchScreen) ? \"pl-pr-[21px]\" : \"pl-pr-[10px]\"}`}>{speed}</p>\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n )\r\n\r\n return (\r\n <>\r\n {showSpeedIcon ? (\r\n <div className=\"pl-relative pl-flex pl-items-center\" ref={speedRef}>\r\n <SpeedIcon \r\n className=\"pl-size-5 pl-cursor-pointer size-5 pl-fill-white\" \r\n onClick={() => dispatch(setSpeedPopover(!speedPopover))}\r\n onMouseOver={() => !conditions(ConditionName.isTouchScreen) && !conditions(ConditionName.showSpeedPopover) && setShowTooltip(true)}\r\n onMouseLeave={() => !conditions(ConditionName.isTouchScreen) && setShowTooltip(false)}\r\n />\r\n {showTooltip && (\r\n <ControllbarTooltip\r\n title=\"سرعت\"\r\n />\r\n )}\r\n <Popover\r\n classNames={`!pl-p-0 pl-overflow-hidden !pl-bg-white ${conditions(ConditionName.isTouchScreen) ? \"!pl-fixed !pl-bottom-0 !pl-rounded-t-[20px] pl-rounded-b-none\" : \"!pl-w-[230px] pl-right-0 pl-mb-[33px] !pl-rounded-[12px]\"} ${conditions(ConditionName.isTouchScreenPortrait) && \"!pl-w-screen tablet:!pl-max-w-[440px] tablet:!pl-mx-auto\"} ${conditions(ConditionName.isTouchScreenLandscape) && \"pl-w-full pl-max-w-[440px]\"}`}\r\n status={speedPopover}\r\n onClose={() => dispatch(setSpeedPopover(false))}\r\n type={conditions(ConditionName.isTouchScreen) ? \"modal\" : \"popover\"}\r\n isBlurBackground={conditions(ConditionName.isTouchScreenPortrait)}\r\n ref={conditions(ConditionName.isTouchScreenPortrait) ? speedRef : undefined}\r\n isHeader={conditions(ConditionName.isTouchScreen)}\r\n customHeader={<></>}\r\n isHasCatchUpLineOnTop={conditions(ConditionName.isTouchScreen)}\r\n >\r\n {speedContent}\r\n </Popover>\r\n </div>\r\n ) : (\r\n <>{speedContent}</>\r\n )}\r\n\r\n </>\r\n );\r\n};\r\n\r\nexport default Speed;\r\n","import { ISpeedProps } from \"../../helpers/interfaces/interfaces\";\r\n\r\nconst SpeedIcon = ({ className, onClick, onMouseOver, onMouseLeave }: ISpeedProps) => {\r\n return (\r\n <svg width=\"18\" height=\"15\" viewBox=\"0 0 18 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className} onClick={onClick} onMouseOver={onMouseOver} onMouseLeave={onMouseLeave}>\r\n <path d=\"M10.5488 1.53559C8.20532 1.02852 5.66339 1.68608 3.84359 3.50588C1.15649 6.19298 1.00481 10.4572 3.39041 13.3215C3.55135 13.5148 3.8176 13.6347 4.13036 13.6347H13.8687C14.1816 13.6347 14.4476 13.5149 14.6085 13.3217C16.0815 11.5533 16.5884 9.25027 16.1258 7.11249C16.0528 6.77512 16.2671 6.44245 16.6045 6.36945C16.9418 6.29645 17.2745 6.51077 17.3475 6.84814C17.8886 9.34866 17.2968 12.0474 15.569 14.1217C15.1326 14.6455 14.489 14.8847 13.8687 14.8847H4.13036C3.50995 14.8847 2.86616 14.6453 2.42991 14.1215C-0.36559 10.765 -0.188583 5.77029 2.95971 2.622C5.09241 0.489299 8.07189 -0.279272 10.8132 0.31386C11.1505 0.386857 11.3648 0.719527 11.2918 1.0569C11.2188 1.39427 10.8862 1.60859 10.5488 1.53559Z\" />\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M14.9976 2.66523C15.2417 2.9093 15.2417 3.30503 14.9976 3.54911L10.7129 7.83399C10.8469 8.09798 10.9225 8.39667 10.9225 8.713C10.9225 9.78688 10.0519 10.6574 8.97805 10.6574C7.90417 10.6574 7.03362 9.78688 7.03362 8.713C7.03362 7.63912 7.90417 6.76856 8.97805 6.76856C9.27953 6.76856 9.56498 6.83718 9.81965 6.95963C9.82222 6.95697 9.82483 6.95432 9.82746 6.95168L14.1137 2.66525C14.3578 2.42116 14.7535 2.42115 14.9976 2.66523ZM9.67249 8.713C9.67249 9.09652 9.36158 9.40743 8.97805 9.40743C8.59453 9.40743 8.28362 9.09652 8.28362 8.713C8.28362 8.32947 8.59453 8.01856 8.97805 8.01856C9.36158 8.01856 9.67249 8.32947 9.67249 8.713Z\" />\r\n </svg>\r\n );\r\n};\r\n\r\nexport default SpeedIcon;\r\n","import { IToggleProps } from \"../../../helpers/interfaces/interfaces\";\r\n\r\nconst Toggle = ({ enabled, setEnabled }: IToggleProps) => {\r\n return (\r\n <div\r\n className={`pl-relative pl-h-[22px] pl-w-[37px] pl-cursor-pointer pl-rounded-[15px] pl-transition-colors pl-duration-150 pl-ease-linear ${enabled ? \"pl-bg-primary pl-border pl-border-transparent\" : \"pl-bg-secondary-200 pl-border pl-border-gray-highLight\"}`}\r\n onClick={setEnabled}\r\n >\r\n <div className={`pl-absolute pl-left-1 pl-top-[2px] pl-w-[16px] pl-h-[16px] pl-rounded-full pl-transition-transform pl-duration-150 pl-ease-linear ${enabled ? \"pl-bg-white pl-translate-x-[13px]\" : \"pl-bg-black/[0.16] -pl-translate-x-0.5\"}`} />\r\n </div>\r\n );\r\n};\r\n\r\nexport default Toggle;\r\n","import { shallowEqual } from \"react-redux\";\r\nimport { memo } from \"react\";\r\nimport { useAppDispatch, useAppSelector } from \"../../../helpers/redux/hooks\";\r\nimport { SettingSections } from \"../../../helpers/interfaces/enums\";\r\nimport { setActiveElements } from \"../../../helpers/redux/slices/controllerSlice\";\r\nimport { setSettingPopover } from \"../../../helpers/redux/slices/popoversSlice\";\r\nimport { setSelectedSubtitle, setSubtitleText } from \"../../../helpers/redux/slices/videoDataSlice\";\r\nimport { mainPlayerVideoTag } from \"../../../helpers/constants\";\r\nimport { subtitleLog } from \"../../../helpers/logs/logs\";\r\nimport { sendFluentLog } from \"../../../helpers/logs/fluentdLogger\";\r\n\r\nconst SubtitlesMenu = ({ setSection }: any) => {\r\n const dispatch = useAppDispatch();\r\n const { subtitles, selectedSubtitle } = useAppSelector(\r\n ({ videoData: { subtitles, selectedSubtitle } }) => ({ subtitles, selectedSubtitle }),\r\n shallowEqual\r\n );\r\n\r\n return (\r\n <div id={SettingSections.subtitles} className=\"animate__animated animate__fadeIn pl-p-[14px]\">\r\n <ul className=\"pl-flex pl-flex-col pl-p-0 pl-m-0\">\r\n <li\r\n className={`pl-flex pl-items-center pl-text-[14px] pl-rounded-[4px] pl-relative pl-cursor-pointer pl-leading-6 hover:pl-bg-main/[0.1] hover:dark:pl-bg-white/[0.25] pl-p-1 pl-pr-2 ${\r\n !selectedSubtitle && \"pl-bg-main-light hover:!pl-bg-main-light pl-text-dark-5\"\r\n }`}\r\n onClick={() => {\r\n dispatch(setActiveElements(false));\r\n dispatch(setSettingPopover(false));\r\n dispatch(setSelectedSubtitle(undefined));\r\n setSection(SettingSections.main);\r\n const result: any = Object.values(mainPlayerVideoTag().textTracks).find((textTrack: any) => textTrack.mode === \"showing\");\r\n if (result) result.mode = \"disabled\";\r\n dispatch(setSubtitleText(\"\"));\r\n sendFluentLog(subtitleLog(\"empty\"));\r\n }}\r\n >\r\n بدون زیرنویس\r\n </li>\r\n {subtitles.map((subtitle: any, index: number) => (\r\n <li\r\n key={index}\r\n className={`pl-flex pl-items-center pl-text-[14px] pl-rounded-[4px] pl-relative pl-cursor-pointer pl-leading-6 hover:pl-bg-main/[0.1] hover:dark:pl-bg-white/[0.25] pl-p-1 pl-pr-2 ${\r\n selectedSubtitle &&\r\n selectedSubtitle.language === subtitle.language &&\r\n \"pl-bg-main-light hover:!pl-bg-main-light pl-text-dark-5\"\r\n }`}\r\n onClick={() => {\r\n dispatch(setActiveElements(false));\r\n dispatch(setSettingPopover(false));\r\n dispatch(setSelectedSubtitle(subtitle));\r\n mainPlayerVideoTag().textTracks[index].mode = \"showing\";\r\n setSection(SettingSections.main);\r\n sendFluentLog(subtitleLog(subtitle.language));\r\n }}\r\n >\r\n <span>{subtitle.label}</span>\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n );\r\n};\r\n\r\nexport default memo(SubtitlesMenu);\r\n","import { shallowEqual } from \"react-redux\";\r\nimport { useAppSelector } from \"../../../helpers/redux/hooks\";\r\nimport { secondsToHMS } from \"../../../helpers/helpers\";\r\nimport { ConditionName } from \"../../../helpers/interfaces/enums\";\r\nimport { conditions } from \"../../../helpers/conditions/conditions\";\r\n\r\nconst ElapsedTime = () => {\r\n const { duration, currentTime } = useAppSelector(\r\n ({ controller: { duration, currentTime } }) => ({ duration, currentTime }),\r\n shallowEqual\r\n );\r\n useAppSelector(\r\n ({ videoData: { videoElementSizeInfo, params } }) => ({ videoElementSizeInfo, params }),\r\n shallowEqual\r\n );\r\n\r\n return (\r\n <>\r\n <div\r\n className={`pl-mr-auto !pl-text-white pl-w-full pl-max-w-max pl-text-[12px] pl-font-bold ${conditions(ConditionName.isFullScreen) ? \"pl-ml-8\" : \"pl-ml-4\"} ${conditions(ConditionName.isTouchScreenPortrait) ? \"!pl-ml-0\" : \"pl-absolute pl-left-0 pl-bottom-full pl-mb-[33px]\"}`}\r\n >\r\n <span>{secondsToHMS(duration)}</span>\r\n <span> / </span>\r\n <span>{secondsToHMS(currentTime)}</span>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default ElapsedTime;\r\n","import Image from \"next/legacy/image\";\r\nimport IMAGES from \"../../../images/importImages\";\r\nimport { handleLock } from \"../../../helpers/redux/actions/controller.actions\";\r\n\r\nconst Unlock = () => {\r\n\r\n return (\r\n <Image \r\n src={IMAGES.unlock} \r\n alt=\"unlock-icon\" \r\n width={20} \r\n height={20}\r\n onClick={() => handleLock(\"lock\")}\r\n />\r\n );\r\n};\r\n\r\nexport default Unlock;\r\n","import { useState } from \"react\";\r\nimport ControllbarTooltip from \"../footer/controllbar/controllbarTooltip\";\r\nimport Image from \"next/legacy/image\";\r\nimport { conditions } from \"../../../helpers/conditions/conditions\";\r\nimport { ConditionName } from \"../../../helpers/interfaces/enums\";\r\nimport { useAppSelector } from \"../../../helpers/redux/hooks\";\r\nimport { shallowEqual } from \"react-redux\";\r\nimport IMAGES from \"../../../images/importImages\";\r\nimport { handleSubtitle } from \"../../../helpers/redux/actions/videoData.actions\";\r\n\r\nconst SubtitleIcon = () => {\r\n const [showTooltip, setShowTooltip] = useState<boolean>(false);\r\n useAppSelector(({ videoData: { selectedSubtitle, videoElementSizeInfo, params } }) => ({ selectedSubtitle, videoElementSizeInfo, params }),shallowEqual);\r\n\r\n return (\r\n <div className=\"pl-relative pl-flex pl-items-center\">\r\n <Image\r\n alt=\"subtitle-icon\"\r\n src={conditions(ConditionName.isSelectedSubtitle) ? IMAGES.subtitleFill : IMAGES.subtitleOutline}\r\n className=\"pl-cursor-pointer\"\r\n width={20}\r\n height={20}\r\n onClick={handleSubtitle}\r\n onDoubleClick={(event: any) => event.stopPropagation()}\r\n onMouseOver={() => !conditions(ConditionName.isTouchScreen) && setShowTooltip(true)}\r\n onMouseLeave={() => !conditions(ConditionName.isTouchScreen) && setShowTooltip(false)}\r\n />\r\n {showTooltip && <ControllbarTooltip title=\"زیرنویس\" />}\r\n </div>\r\n );\r\n};\r\n\r\nexport default SubtitleIcon;\r\n","import { useRef, useState } from \"react\";\r\nimport Image from \"next/legacy/image\";\r\nimport Popover from \"../popover/popover\";\r\nimport Emoji from \"../emoji/emoji\";\r\nimport { IMarker } from \"../../../helpers/interfaces/interfaces\";\r\nimport { useAppDispatch, useAppSelector } from \"../../../helpers/redux/hooks\";\r\nimport { shallowEqual } from \"react-redux\";\r\nimport useOnClickOutside from \"../../../helpers/hooks/useOnClickOutside\";\r\nimport { mainPlayerVideoTag, progressBar } from \"../../../helpers/constants\";\r\nimport { conditions } from \"../../../helpers/conditions/conditions\";\r\nimport { ConditionName } from \"../../../helpers/interfaces/enums\";\r\nimport { handleVideoTimeline } from \"../../../helpers/redux/actions/controller.actions\";\r\nimport { sendFluentLog } from \"../../../helpers/logs/fluentdLogger\";\r\nimport { eventMarkerClickLog } from \"../../../helpers/logs/logs\";\r\nimport MarkersListIcon from \"./markersListIcon\";\r\nimport { setMarkersListPopover } from \"../../../helpers/redux/slices/popoversSlice\";\r\nimport { getMarkerPosition } from \"../../../helpers/redux/actions/progressbar.actions\";\r\nimport ControllbarTooltip from \"../footer/controllbar/controllbarTooltip\";\r\nimport { secondsToHMS } from \"../../../helpers/helpers\";\r\n\r\nconst MarkersList = () => {\r\n const [videoCurrentTime, setVideoCurrentTime] = useState<number>(0);\r\n const [markerId, setMarkerId] = useState<number | undefined>(undefined);\r\n const [showTooltip, setShowTooltip] = useState<boolean>(false);\r\n\r\n const { markers, params } = useAppSelector(\r\n ({ videoData: { markers, params, videoElementSizeInfo } }) => ({\r\n markers,\r\n params,\r\n videoElementSizeInfo\r\n }),\r\n shallowEqual\r\n );\r\n const { markersListPopover } = useAppSelector(\r\n ({ popovers: { markersListPopover } }) => ({ markersListPopover }),\r\n shallowEqual\r\n );\r\n // useAppSelector(({ controller: { showMiniPlayer } }) => ({ showMiniPlayer }), shallowEqual);\r\n const markersListRef = useRef(null);\r\n\r\n const dispatch = useAppDispatch();\r\n\r\n const handleClickShare = (event: any, markerTime: number) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n // dispatch(setSharePopover(true));\r\n setVideoCurrentTime(markerTime);\r\n const result = markers.find((marker: any) => marker.time === markerTime)?.id;\r\n setMarkerId(result);\r\n };\r\n\r\n useOnClickOutside(markersListRef, () => dispatch(setMarkersListPopover(false)));\r\n\r\n const handleClickMarker = (markerTime: number, markerId: number, markerTitle: String, markerDescription: String, markerSticker: String) => {\r\n if (progressBar()) progressBar().style.width = `${getMarkerPosition(markerTime)}px`;\r\n handleVideoTimeline(mainPlayerVideoTag().currentTime, markerTime);\r\n mainPlayerVideoTag().currentTime = markerTime;\r\n dispatch(setMarkersListPopover(false));\r\n sendFluentLog(eventMarkerClickLog(markerId, markerTime, markerTitle, markerDescription, markerSticker));\r\n };\r\n\r\n const handleShowMarkerListPopover = () => {\r\n dispatch(setMarkersListPopover(!markersListPopover));\r\n };\r\n\r\n return (\r\n <div\r\n className={`pl-flex pl-items-center pl-p-1 pl-relative ${\r\n conditions(ConditionName.showMarkerListPopover) && \"pl-bg-secondary-50/[0.4] pl-rounded-[4px]\"\r\n }`}\r\n ref={markersListRef}\r\n >\r\n <MarkersListIcon\r\n className={`pl-cursor-pointer pl-fill-dark-5`}\r\n onClick={handleShowMarkerListPopover}\r\n onMouseOver={() => !conditions(ConditionName.isTouchScreen) && setShowTooltip(true)}\r\n onMouseLeave={() => !conditions(ConditionName.isTouchScreen) && setShowTooltip(false)}\r\n />\r\n {showTooltip && <ControllbarTooltip title={`لیست نشانگرها (e)`} className=\"!pl-bottom-[180%] !pl-right-[-48px]\" />}\r\n <Popover\r\n classNames={`!pl-p-0 pl-left-0 !pl-bg-white dark:!pl-bg-dark-13 !pl-rounded-[4px] pl-mb-[33px]`}\r\n status={conditions(ConditionName.showMarkerListPopover)}\r\n onClose={() => {\r\n dispatch(setMarkersListPopover(false));\r\n }}\r\n headerTitle=\"نشانگرها\"\r\n isHeader={true}\r\n type={\"popover\"}\r\n >\r\n <div className=\"pl-flex pl-flex-col pl-gap-6 pl-mx-2 pl-mt-2\">\r\n <div className=\"pl-flex pl-flex-col pl-gap-2 pl-pb-2\">\r\n {markers.map((marker: IMarker) => (\r\n <div\r\n key={marker.id}\r\n onClick={() => handleClickMarker(marker.time, marker.id, marker.title, marker.description, marker.sticker)}\r\n className=\"odd:dark:pl-bg-dark-1 odd:pl-bg-main/[0.1] hover:pl-bg-main/[0.1] hover:dark:bg-white/[0.25] pl-rounded-[8px]\"\r\n >\r\n <div className=\"pl-flex pl-item-center pl-gap-2 pl-cursor-pointer pl-rounded-[4px] pl-relative pl-p-2 pl-mx-2\">\r\n {marker.banner || !marker.sticker ? (\r\n <Image\r\n src={marker.banner ? marker.banner : \"IMAGES.defaultMarkersListItemIcon\"}\r\n width={40}\r\n height={40}\r\n alt={marker.title}\r\n />\r\n ) : (\r\n <div className=\"pl-w-[40px] pl-h-[40px] pl-bg-secondary dark:pl-bg-secondary-50 pl-rounded-[6px] pl-flex pl-items-center\">\r\n <Emoji name={marker.sticker} className=\"pl-w-[20px] pl-h-[20px] pl-mx-auto\" />\r\n </div>\r\n )}\r\n <div className=\"pl-text-gray-800 dark:pl-text-white\">\r\n <p className=\"pl-flex pl-items-center pl-mb-1 pl-text-[14px] pl-font-bold pl-w-[130px] pl-whitespace-nowrap pl-overflow-hidden pl-text-ellipsis\">\r\n <div>{marker.title}</div>\r\n </p>\r\n <p className=\"pl-text-[13px] pl-font-normal pl-w-[200px] pl-whitespace-nowrap pl-overflow-hidden pl-text-ellipsis\">\r\n {marker.description}\r\n </p>\r\n </div>\r\n <span\r\n className={`pl-absolute pl-left-9 pl-top-2 pl-text-[12px] pl-font-bold pl-bg-secondary/[0.3] dark:pl-bg-secondary/[0.6] pl-text-gray-800 dark:pl-text-white pl-rounded-[4px] pl-p-[3px]`}\r\n >\r\n {secondsToHMS(marker.time)}\r\n </span>\r\n {/* <ShareIcon\r\n className={`pl-flex pl-absolute pl-left-1 pl-top-3 pl-items-center pl-w-15 pl-h-15 pl-fill-gray-800 dark:pl-fill-white`}\r\n onClick={(event) => handleClickShare(event, marker.time)}\r\n /> */}\r\n </div>\r\n {/* {openPersonalMarkerMenu !== undefined && openPersonalMarkerMenu === marker.time && (\r\n <div className=\"pl-flex pl-item-center pl-cursor-pointer pl-rounded-[4px] pl-relative pl-p-2 pl-mx-2 pl-flex-col pl-w-full\">\r\n <hr className=\"pl-bg-secondary-300 pl-ml-2\" />\r\n <div className=\"pl-flex pl-items-center pl-w-full pl-pt-2\">\r\n <div\r\n className=\"pl-flex pl-gap-4 pl-items-center\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n dispatch(setSelectedPersonalMarker(marker));\r\n dispatch(setPersonalMarkersPopover(true));\r\n dispatch(setMarkersListPopover(false));\r\n }}\r\n >\r\n <div className=\"pl-p-3 pl-bg-main-light pl-rounded-[8px] pl-flex pl-items-center\">\r\n <Image\r\n className=\"pl-w-full pl-h-full\"\r\n src={IMAGES.editMarker}\r\n width={16}\r\n height={16}\r\n alt={marker.title}\r\n />\r\n </div>\r\n <span className=\"pl-text-gray-800 dark:pl-text-secondary-300 pl-text-[13px] pl-font-500\">ویرایش</span>\r\n </div>\r\n <div\r\n className=\"pl-flex pl-flex-1 pl-justify-center pl-gap-4 pl-items-center\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n setDeleteMarker(marker);\r\n dispatch(setMarkersListPopover(false));\r\n }}\r\n >\r\n <div className=\"pl-p-3 pl-bg-main-light pl-rounded-[8px] pl-flex pl-items-center\">\r\n <Image\r\n className=\"pl-w-full pl-h-full\"\r\n src={IMAGES.trashMarker}\r\n width={16}\r\n height={16}\r\n alt={marker.title}\r\n />\r\n </div>\r\n <span className=\"pl-text-gray-800 dark:pl-text-secondary-300 pl-text-[13px] pl-font-500\">حذف</span>\r\n </div>\r\n </div>\r\n </div>\r\n )} */}\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n </Popover>\r\n {/* <ShareDialog currentTime={videoCurrentTime} markerId={markerId} />\r\n <ConfirmationModal\r\n onClose={() => setDeleteMarker(undefined)}\r\n modalType={\"DELETE\"}\r\n status={!!deleteMarker}\r\n text={\"آیا از حذف نشانگر مطمئن هستید؟\"}\r\n cancelButtonText={\"انصراف\"}\r\n submitButtonText={\"حذف\"}\r\n onSubmit={() => handleDeleteMarker(deleteMarker!)}\r\n >\r\n <div className=\"pl-flex pl-flex-col pl-gap-1 pl-text-[16px] pl-font-medium pl-items-center pl-justify-between dark:pl-text-white pl-text-secondary-800 pl-my-4\">\r\n <div className=\"pl-relative pl-flex pl-flex-col pl-justify-center pl-items-center pl-self-center pl-shrink-0 pl-border pl-border-[1.5px] pl-rounded-[12px] pl-bg-main/[0.1] pl-w-[126px] pl-h-[110px]\">\r\n <span className=\"pl-emoji-mart-emoji pl-flex pl-flex-col pl-items-center pl-gap-[11px] pl-justify-center pl-h-full\">\r\n <Emoji name={deleteMarker?.sticker} className=\"pl-w-[56px] pl-h-[56px] pl-mx-auto\" />\r\n </span>\r\n </div>\r\n <div>{deleteMarker?.title}</div>\r\n </div>\r\n </ConfirmationModal> */}\r\n </div>\r\n );\r\n};\r\n\r\nexport default MarkersList;\r\n","import { shallowEqual } from \"react-redux\";\r\nimport { useAppSelector } from \"../../../helpers/redux/hooks\";\r\nimport { IMarkerListIconProps } from \"../../../helpers/interfaces/interfaces\";\r\n\r\nconst MarkersListIcon = (props: IMarkerListIconProps) => {\r\n useAppSelector(({ videoData: { videoElementSizeInfo, params } }) => ({ videoElementSizeInfo, params }), shallowEqual);\r\n\r\n return <svg\r\n width={20}\r\n height={20}\r\n viewBox=\"0 0 22 22\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n {...props}\r\n>\r\n <rect x=\"3\" y=\"3\" width=\"4\" height=\"4\" rx=\"1.5\" />\r\n <rect x=\"3\" y=\"9\" width=\"4\" height=\"4\" rx=\"1.5\" />\r\n <rect x=\"3\" y=\"15\" width=\"4\" height=\"4\" rx=\"1.5\" />\r\n <rect x=\"8\" y=\"16\" width=\"11\" height=\"2\" rx=\"1\" />\r\n <rect x=\"8\" y=\"10\" width=\"11\" height=\"2\" rx=\"1\" />\r\n <rect x=\"8\" y=\"4\" width=\"11\" height=\"2\" rx=\"1\" />\r\n</svg>;\r\n};\r\n\r\nexport default MarkersListIcon;\r\n","import { shallowEqual } from \"react-redux\";\r\nimport { useAppSelector } from \"../../../helpers/redux/hooks\";\r\nimport { conditions } from \"../../../helpers/conditions/conditions\";\r\nimport { ConditionName } from \"../../../helpers/interfaces/enums\";\r\nimport { cleanVTT, spliteStringPerLine } from \"../../../helpers/helpers\";\r\n\r\nconst DisplaySubtitle = () => {\r\n const { subtitleText } = useAppSelector(({ videoData: { subtitleText, selectedSubtitle } }) => ({ subtitleText, selectedSubtitle }), shallowEqual);\r\n useAppSelector(({ controller: { isFullScreen } }) => ({ isFullScreen }), shallowEqual);\r\n\r\n const subtitlePosition = () => {\r\n let styles = \"\";\r\n if (conditions(ConditionName.isLock)) styles = \"pl-bottom-4\";\r\n else if (conditions(ConditionName.isActiveElements)) {\r\n if (conditions(ConditionName.isTouchScreenPortrait)) styles = \"pl-bottom-4 tablet:pl-bottom-[65px]\";\r\n else if(conditions(ConditionName.isFullScreen)) styles = \"pl-bottom-[104px] tablet:pl-bottom-[137px] desktop:pl-bottom-[146px]\";\r\n else styles = \"pl-bottom-[120px]\";\r\n }\r\n else if (!conditions(ConditionName.isActiveElements)) styles = \"pl-bottom-4\"; \r\n\r\n return styles;\r\n };\r\n\r\n return (\r\n <div\r\n id={\"subtitle-id\"}\r\n style={{direction: \"ltr\"}}\r\n className={`pl-z-0 pl-absolute pl-w-full pl-text-center pl-text-[18px] pl-px-4 pl-text-white pl-font-medium ${subtitlePosition()}`}\r\n >\r\n {spliteStringPerLine(subtitleText!).map((text, index) => (\r\n <p\r\n key={index} \r\n className={`pl-mx-auto pl-bg-Common-black-overlay-2 ${(conditions(ConditionName.isTouchScreen) && conditions(ConditionName.isActiveElements)) && \"pl-opacity-50 tablet:pl-opacity-100\"} pl-text-wrap pl-max-w-full pl-w-max pl-px-1`}\r\n > \r\n {cleanVTT(text)}\r\n </p>\r\n ))}\r\n </div>\r\n );\r\n};\r\n\r\nexport default DisplaySubtitle;\r\n","import dynamic from \"next/dynamic\";\r\nimport { ConditionName } from \"../../../helpers/interfaces/enums\";\r\nimport { conditions } from \"../../../helpers/conditions/conditions\";\r\n\r\nconst StaticVideoTag = dynamic(() => import(\"./staticVideoTag\"));\r\nconst NonStaticVideoTag = dynamic(() => import(\"./nonStaticVideoTag\"));\r\n\r\nconst VideoTag = () => {\r\n return <>{conditions(ConditionName.isStaticFormat) ? <StaticVideoTag /> : <NonStaticVideoTag /> }</>;\r\n};\r\n\r\nexport default VideoTag;\r\n","import { useEffect } from \"react\";\r\nimport { shallowEqual } from \"react-redux\";\r\nimport { useAppDispatch, useAppSelector } from \"../redux/hooks\";\r\nimport { setIsFullScreen } from \"../redux/slices/controllerSlice\";\r\nimport { handleVideoElementSizeInfo } from \"../redux/actions/controller.actions\";\r\nimport { fullscreenLog } from \"../logs/logs\";\r\nimport { sendFluentLog } from \"../logs/fluentdLogger\";\r\n\r\nconst useFullScreen = () => {\r\n const dispatch = useAppDispatch();\r\n useAppSelector(({ videoData: { params } }) => ({ params }), shallowEqual);\r\n\r\n useEffect(() => {\r\n const handleChangeFullScreen = () => {\r\n const isFullScreen = document.fullscreenElement;\r\n\r\n if (isFullScreen) dispatch(setIsFullScreen(true));\r\n else {\r\n dispatch(setIsFullScreen(false));\r\n handleVideoElementSizeInfo();\r\n sendFluentLog(fullscreenLog(\"exitFullScreen\"));\r\n }\r\n };\r\n\r\n if (document.addEventListener) {\r\n document.addEventListener(\"webkitfullscreenchange\", handleChangeFullScreen, false);\r\n document.addEventListener(\"mozfullscreenchange\", handleChangeFullScreen, false);\r\n document.addEventListener(\"fullscreenchange\", handleChangeFullScreen, false);\r\n document.addEventListener(\"MSFullscreenChange\", handleChangeFullScreen, false);\r\n }\r\n\r\n () => {\r\n document.removeEventListener(\"webkitfullscreenchange\", handleChangeFullScreen, false);\r\n document.removeEventListener(\"mozfullscreenchange\", handleChangeFullScreen, false);\r\n document.removeEventListener(\"fullscreenchange\", handleChangeFullScreen, false);\r\n document.removeEventListener(\"MSFullscreenChange\", handleChangeFullScreen, false);\r\n };\r\n }, []);\r\n};\r\n\r\nexport default useFullScreen;\r\n","import { useEffect, useRef } from \"react\";\r\nimport { checkParentTarget, isTouchScreen } from \"../helpers\";\r\nimport { activeElementsTime } from \"../environment\";\r\nimport { shallowEqual } from \"react-redux\";\r\nimport { useAppDispatch, useAppSelector } from \"../redux/hooks\";\r\nimport { setActiveElements } from \"../redux/slices/controllerSlice\";\r\nimport store from \"../redux/store\";\r\n\r\nconst useActiveInActive = (isRightDoubleTouched: boolean, isLeftDoubleTouched: boolean) => {\r\n const dispatch = useAppDispatch();\r\n const { activeElements } = useAppSelector(({ controller: { activeElements } }) => ({ activeElements }), shallowEqual);\r\n\r\n const timeoutRef = useRef<any>(null);\r\n const isRightDoubleTouchedRef = useRef<boolean>(isRightDoubleTouched);\r\n const isLeftDoubleTouchedRef = useRef<boolean>(isLeftDoubleTouched);\r\n\r\n useEffect(() => {\r\n isRightDoubleTouchedRef.current = isRightDoubleTouched;\r\n }, [isRightDoubleTouched]);\r\n\r\n useEffect(() => {\r\n isLeftDoubleTouchedRef.current = isLeftDoubleTouched;\r\n }, [isLeftDoubleTouched]);\r\n\r\n useEffect(() => {\r\n let shouldInActiveElements = false;\r\n\r\n const handlePointerMove = (event: any) => {\r\n const { activeElements, isEnded } = store.getState().controller;\r\n if (isEnded) dispatch(setActiveElements(true));\r\n else if (event.pointerType === \"mouse\") {\r\n clearTimeout(timeoutRef.current);\r\n if (!activeElements) dispatch(setActiveElements(true));\r\n else if (\r\n [\"player-tag\", \"main-content\", \"player-controllbar\", \"video-opacity\", \"playerElements\", \"touchBackward\", \"touchForward\"].includes(event.target.id)\r\n )\r\n shouldInActiveElements = true;\r\n timeoutRef.current = setTimeout(() => {\r\n const { settingPopover, speedPopover, qualityLevelsPopover } = store.getState().popovers;\r\n const { play } = store.getState().controller;\r\n if (!settingPopover && !speedPopover && !qualityLevelsPopover && play && shouldInActiveElements) dispatch(setActiveElements(false));\r\n }, activeElementsTime);\r\n }\r\n };\r\n\r\n const handleTouchStart = (event: any) => {\r\n setTimeout(() => {\r\n const { activeElements, isEnded, firstPlay } = store.getState().controller;\r\n clearTimeout(timeoutRef.current);\r\n if (isEnded) return dispatch(setActiveElements(true));\r\n if (isTouchScreen() && !firstPlay && !isRightDoubleTouchedRef.current && !isLeftDoubleTouchedRef.current) {\r\n if (\r\n [\"player-tag\", \"main-content\", \"video-opacity\", \"touchBackward\", \"touchForward\"].includes(event.target.id) ||\r\n checkParentTarget(event, \"playerElements\")\r\n ) {\r\n dispatch(setActiveElements(!activeElements));\r\n timeoutRef.current = setTimeout(() => {\r\n const { settingPopover, speedPopover, qualityLevelsPopover } = store.getState().popovers;\r\n if (!settingPopover && !speedPopover && !qualityLevelsPopover) dispatch(setActiveElements(false));\r\n }, activeElementsTime);\r\n } else {\r\n timeoutRef.current = setTimeout(() => {\r\n const { settingPopover, speedPopover, qualityLevelsPopover } = store.getState().popovers;\r\n if (!settingPopover && !speedPopover && !qualityLevelsPopover) dispatch(setActiveElements(false));\r\n }, activeElementsTime);\r\n }\r\n }\r\n }, 200);\r\n };\r\n\r\n const handleTouchMove = () => {\r\n clearTimeout(timeoutRef.current);\r\n timeoutRef.current = setTimeout(() => {\r\n const { activeElements, isEnded } = store.getState().controller;\r\n const { settingPopover, speedPopover, qualityLevelsPopover } = store.getState().popovers;\r\n if (isEnded) dispatch(setActiveElements(true));\r\n else if (!settingPopover && !speedPopover && !qualityLevelsPopover && activeElements && !isEnded)\r\n dispatch(setActiveElements(!activeElements));\r\n }, activeElementsTime);\r\n };\r\n\r\n document.getElementById(\"video-area\")!.addEventListener(\"touchstart\", handleTouchStart);\r\n document.getElementById(\"video-area\")!.addEventListener(\"touchmove\", handleTouchMove);\r\n document.getElementById(\"video-area\")!.addEventListener(\"pointermove\", handlePointerMove);\r\n\r\n return () => {\r\n const videoArea = document.getElementById(\"video-area\")!;\r\n if (videoArea) {\r\n videoArea.removeEventListener(\"touchstart\", handleTouchStart);\r\n videoArea.removeEventListener(\"touchmove\", handleTouchMove);\r\n videoArea.removeEventListener(\"pointermove\", handlePointerMove);\r\n }\r\n };\r\n }, [activeElements, isRightDoubleTouched, isLeftDoubleTouched]);\r\n};\r\n\r\nexport default useActiveInActive;\r\n","import { useEffect } from \"react\";\r\nimport { handleVideoElementSizeInfo } from \"../redux/actions/controller.actions\";\r\nimport { useAppSelector } from \"../redux/hooks\";\r\nimport { isTouchScreen } from \"../helpers\";\r\nimport { shallowEqual } from \"react-redux\";\r\nimport { mainPlayerVideoTag } from \"../constants\";\r\n\r\nconst useHandleResize = () => {\r\n\r\n const { firstPlay, isFullScreen } = useAppSelector(({ controller: { firstPlay, isFullScreen } }) => ({firstPlay,isFullScreen,}),shallowEqual);\r\n\r\n useEffect(() => {\r\n if (mainPlayerVideoTag()) {\r\n let timeout: any;\r\n const handleResize = () => {\r\n timeout = setTimeout(\r\n () => {\r\n handleVideoElementSizeInfo();\r\n },\r\n isTouchScreen() ? 0 : 300\r\n );\r\n };\r\n handleResize();\r\n window.addEventListener(\"resize\", handleResize);\r\n\r\n return () => {\r\n window.removeEventListener(\"resize\", handleResize);\r\n clearTimeout(timeout);\r\n };\r\n }\r\n }, [firstPlay, isFullScreen, mainPlayerVideoTag()]);\r\n}\r\n\r\nexport default useHandleResize;","import { useEffect } from \"react\";\r\nimport { useAppSelector } from \"../redux/hooks\";\r\nimport { shallowEqual } from \"react-redux\";\r\nimport { handleSubtitle } from \"../redux/actions/videoData.actions\";\r\nimport { conditions } from \"../conditions/conditions\";\r\nimport { ConditionName } from \"../interfaces/enums\";\r\n\r\nconst useSetSubtitleFirstPlay = () => {\r\n\r\n const { firstPlay } = useAppSelector(({ controller: { firstPlay } }) => ({ firstPlay }), shallowEqual);\r\n useAppSelector(({ videoData: { details } }) => ({ details }), shallowEqual);\r\n\r\n useEffect(() => {\r\n if (conditions(ConditionName.setSubtitleFirstPlay)) handleSubtitle();\r\n }, [firstPlay]);\r\n}\r\n\r\nexport default useSetSubtitleFirstPlay;"]}