cafe-video-player 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/chunk-3Q5F32UV.js +2 -0
- package/chunk-3Q5F32UV.js.map +1 -0
- package/chunk-5F7JQEMY.mjs +2 -0
- package/chunk-5F7JQEMY.mjs.map +1 -0
- package/chunk-A3BCKK27.js +2 -0
- package/chunk-A3BCKK27.js.map +1 -0
- package/chunk-RCU5ZGMI.js +2 -0
- package/chunk-RCU5ZGMI.js.map +1 -0
- package/chunk-TU7BZ2RY.mjs +2 -0
- package/chunk-TU7BZ2RY.mjs.map +1 -0
- package/chunk-VA5NNH6I.mjs +2 -0
- package/chunk-VA5NNH6I.mjs.map +1 -0
- package/closeIcon-F4QAFIMQ.js +2 -0
- package/closeIcon-F4QAFIMQ.js.map +1 -0
- package/closeIcon-XWQDG2XW.mjs +2 -0
- package/closeIcon-XWQDG2XW.mjs.map +1 -0
- package/font/IRANSansXFaNum-Bold.woff2 +0 -0
- package/font/IRANSansXFaNum-Medium.woff2 +0 -0
- package/font/IRANSansXFaNum-Regular.woff2 +0 -0
- package/index.d.mts +61 -0
- package/index.d.ts +61 -0
- package/index.js +8 -0
- package/index.js.map +1 -0
- package/index.mjs +8 -0
- package/index.mjs.map +1 -0
- package/nonStaticVideoTag-GRFP3ZOG.js +2 -0
- package/nonStaticVideoTag-GRFP3ZOG.js.map +1 -0
- package/nonStaticVideoTag-RA4FM55H.mjs +2 -0
- package/nonStaticVideoTag-RA4FM55H.mjs.map +1 -0
- package/package.json +40 -0
- package/staticVideoTag-KJ27S5UW.mjs +2 -0
- package/staticVideoTag-KJ27S5UW.mjs.map +1 -0
- package/staticVideoTag-SHIMRS2E.js +2 -0
- package/staticVideoTag-SHIMRS2E.js.map +1 -0
- package/videoPlayerStyles.css +4028 -0
package/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/videoPlayerLibrary/index.ts","../src/videoPlayerLibrary/videoPlayerLibrary.tsx","../src/videoPlayerLibrary/components/videoPlayer/videoPlayer.tsx","../src/videoPlayerLibrary/helpers/hooks/useHandleParams.tsx","../src/videoPlayerLibrary/components/videoPlayer/staticPlayer/staticPlayer.tsx","../src/videoPlayerLibrary/components/custom-components/videoArea/videoArea.tsx","../src/videoPlayerLibrary/components/custom-components/backwardForward/backwardForward.tsx","../src/videoPlayerLibrary/images/importImages.ts","../src/videoPlayerLibrary/components/custom-components/touchVolumeBrightness/touchVolumeBrightness.tsx","../src/videoPlayerLibrary/components/icon-components/mute.tsx","../src/videoPlayerLibrary/components/icon-components/unMute.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/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/helpers/hooks/useOnClickOutside.tsx","../src/videoPlayerLibrary/components/custom-components/speed/speed.tsx","../src/videoPlayerLibrary/components/custom-components/elapsedTime/elapsedTime.tsx","../src/videoPlayerLibrary/components/custom-components/lockUnlock/unlock.tsx","../src/videoPlayerLibrary/components/custom-components/checkInternet/checkInternet.tsx","../src/videoPlayerLibrary/components/custom-components/videoTag/videoTag.tsx","../src/videoPlayerLibrary/helpers/hooks/useFullScreen.tsx","../src/videoPlayerLibrary/helpers/hooks/useActiveInActive.tsx","../src/videoPlayerLibrary/components/videoPlayer/vodPlayer/vodPlayer.tsx","../src/videoPlayerLibrary/helpers/hooks/useGetData/useGetData.tsx","../src/videoPlayerLibrary/helpers/hooks/useGetData/useGetDetails.tsx","../src/videoPlayerLibrary/helpers/hooks/useHandleScroll.tsx","../src/videoPlayerLibrary/components/custom-components/notActive/notActive.tsx"],"names":["init_cjs_shims","Provider","useEffect","Cookies","useHandleParams","query","dispatch","useAppDispatch","queryParams","handleSetParamsInRedux","setPlayerParams","setIsReady","handleFeatureSet","featureSet","strToObj","handleAddUUID","handleXToken","xTokenInCookie","handleLiveAndVodParams","handleStaticParams","eUrl","eCover","getUUID","handleParams","staticFormats","useHandleParams_default","Image","useState","shallowEqual","useRef","useDoubleTap","IMAGES","importImages_default","hideTime","BackwardForward","type","isRightDoubleTouched","isLeftDoubleTouched","setIsRightDoubleTouched","setIsLeftDoubleTouched","backwardForwardCount","setBackwardForwardCount","hide","setHide","backwardForwardCountRef","duration","useAppSelector","currentTime","showMiniPlayer","videoElementSizeInfo","params","timeoutRef","doubleTouch","event","setActiveElements","videoTag","handleBackwardForward","handleTouchStart","prev","conditions","handleRippleCircle","component","backwardForward_default","Mute","className","onClick","mute_default","UnMute","unMute_default","TouchVolumeBrightness","setType","settings","primaryBrightnessValueRef","primaryVolumeValueRef","typeRef","startPositionY","handleTouchStartScreen","checkParentTarget","handleTouchMoveScreen","handleTouchMove","handleTouchEndScreen","store_default","sendFluentLog","brightnessLog","volumeLog","area","activePointerProgressBar","height","value","volumeCount","setUserSettings","touchVolumeBrightness_default","Title","details","title_default","Lock","handleLock","lock_default","Header","lock","activeElements","header_default","PlayPause","play","handlePlayPause","playPause_default","Main","showIcons","setShowIcons","firstPlay","timeout","main_default","memo","getPointerTime","hlsLiveSyncPosition","durationValue","clientX","footerPadding","timePositionX","getPointerPosition","hideProgressTooltip","progressTooltip","generalStyleTooltipHandler","vttTooltipStyleHandler","element","parentPlayer","showProgressTooltip","progressBarTooltip","setTooltipTime","secondsToHMS","handleTimeTooltip","isTimer","handleProgressTime","progressBar","handlePointerDown","timeoutIds","setIsPointerDown","setActivePointerProgressBar","setDelayTurnOffControlbar","id","handlePointerMove","left","handlePointerUp","setTimeoutIds","right","handleVideoTimeline","handleTimeout","ids","timeoutIdTemp","settingPopover","markersListPopover","delayTurnOffControlbar","activeElementsTime","handleCatchUpLoadingLog","timer","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","ProgressBar","isPointerDown","bufferedTimeWidth","markers","isComplexPortrait","durationTime","calculateMarkerPosition","progressBarWidth","marker","progressbar_default","ControllbarTooltip","title","controllbarTooltip_default","FullScreen","showTooltip","setShowTooltip","handleFullScreen","handleLockOrientation","fullScreen_default","PictureInPicture","pictureInPicture_default","SoundVolume","primaryVolumeRef","handleMouseUp","handleMute","handleChangeSoundVolume","soundVolume_default","forwardRef","createPortal","dynamic","CloseIcon","Popover","children","status","onClose","classNames","parentClassNames","styles","isBlurBackground","isFullHeight","isHeader","headerTitle","customHeader","headerClassName","isHasCatchUpLineOnTop","animation","scrollbar","isFocusOnInput","showCloseIcon","pinContent","ref","showPopover","setShowPopover","maxHeight","setMaxHeight","maxHeightOnTouchMove","setMaxHeightOnTouchMove","zIndexOnCatchUp","setZIndexOnCatchUp","handleTouchEnd","content","popover_default","useOnClickOutside","handler","listener","useOnClickOutside_default","QualityLevels","setSection","showQualityLevelsIcon","qualityLevels","manualQuality","autoQuality","qualityLevelsPopover","handleTickSelectedQuality","index","qualityLevel","qualityLevelsRef","setQualityLevelsPopover","qualityLevelsContent","qualityChangeRequestLog","setSettingPopover","qualityLevels_default","speeds","Speed","showSpeedIcon","speedPopover","speedRef","setSpeedPopover","speedContent","speed","speedChangeLog","speed_default","Settings","section","elementHeight","setElementHeight","settingsRef","settings_default","ElapsedTime","elapsedTime_default","Unlock","unlock_default","Controlbar","controllbar_default","CheckInternet","isLoading","showLoader","setShowLoader","showLoaderTime","notShowingLoaderTime","checkInternet_default","Footer","footer_default","StaticVideoTag","NonStaticVideoTag","VideoTag","videoTag_default","useFullScreen","handleChangeFullScreen","setIsFullScreen","handleVideoElementSizeInfo","fullscreenLog","useFullScreen_default","useActiveInActive","isRightDoubleTouchedRef","isLeftDoubleTouchedRef","shouldInActiveElements","isEnded","isTouchScreen","videoArea","useActiveInActive_default","VideoArea","handleResize","setShowScreen","appScroll","handleDoubleClick","setShowMiniPlayer","videoArea_default","StaticPlayer","staticPlayer_default","useGetDetails","getLiveAndVodDetails","useGetDetails_default","useGetData","useGetData_default","useHandleScroll","handleScroll","videoAreaElement","scrollElement","useHandleScroll_default","NotActive","notActive_default","LiveAndVodPlayer","isFetchDetails","isValidAddress","handleApplyContinuousPlayback","vodPlayer_default","VideoPlayer","isReady","clearRedux","videoPlayer_default","VideoPlayerLibrary","videoPlayerLibrary_default"],"mappings":"4j2CAAAA,ICAAA,IAEA,OAAS,YAAAC,OAAgB,cCFzBD,IAEA,OAAS,aAAAE,OAAiB,QCF1BF,IAEA,OAAS,aAAAE,OAAiB,QAG1B,OAAOC,OAAa,YAKpB,IAAMC,GAAmBC,GAAe,CACpC,IAAMC,EAAWC,EAAe,EAE5BC,EAAuB,CAAC,EAEtBC,EAAyB,IAAM,CACjCH,EAASI,GAAgBF,CAAW,CAAC,EACrCF,EAASK,GAAW,EAAI,CAAC,CAC7B,EAEMC,EAAmB,IAAM,CAC3B,IAAIC,EAAaL,EAAY,WAC7B,OAAI,OAAOA,EAAY,YAAe,WAAUK,EAAaC,GAASN,EAAY,UAAU,GAC5FA,EAAY,WAAaK,EAClBL,CACX,EAEMO,EAAgB,IAAM,CAClBV,EAAM,OACR,aAAa,QAAQ,cAAeA,EAAM,IAAK,EAC/CG,EAAY,KAAOH,EAAM,KAEjC,EAEMW,EAAe,IAAM,CACvB,IAAMC,EAAiBd,GAAQ,IAAI,QAAQ,EACvCc,GAAkB,CAACT,EAAY,SAAQA,EAAY,OAASS,EACpE,EAEMC,EAAyB,IAAM,CACjCV,EAAc,CACV,SAAU,UACV,MAAO,OACP,eAAgB,OAChB,GAAGH,CACP,CACJ,EAEMc,EAAqB,IAAM,CAC7B,IAAMC,EAAO,OAAOf,EAAM,OAAO,CAAC,EAC5BgB,EAAS,OAAOhB,EAAM,SAAS,CAAC,EACtCG,EAAc,CACV,IAAKY,EAAK,SAAS,GAAG,EAAI,OAAO,KAAKA,EAAK,MAAM,EAAG,EAAE,CAAC,EAAI,OAAO,KAAKA,CAAI,EAC3E,KAAMf,EAAM,KACZ,WAAYA,EAAM,WAClB,SAAUA,EAAM,SAChB,SAAUA,EAAM,SAChB,SAAU,QACV,SAAUA,EAAM,SAChB,MAAOA,EAAM,MACb,OAAQA,EAAM,OACd,MAASgB,GAAUA,IAAW,YAAc,OAAO,KAAKA,CAAM,EAAI,OAClE,WAAYhB,EAAM,WAClB,WAAYA,EAAM,WAClB,KAAMiB,GAAQ,CAClB,CACJ,EAEMC,EAAe,SAAY,CAC7Bf,EAAc,CAAC,EACX,OAAO,KAAKH,CAAK,EAAE,SAAS,MAAM,IAC9B,CAAC,OAAQ,MAAO,UAAW,MAAM,EAAE,SAAS,OAAOA,EAAM,IAAI,CAAC,GAC9Da,EAAuB,EACvBF,EAAa,GACNQ,GAAc,OAAOnB,EAAM,IAAI,CAAC,GAAGc,EAAmB,EACjEJ,EAAc,EACV,OAAO,KAAKP,CAAW,GAAGI,EAAiB,EAC/CH,EAAuB,EAE/B,EAEAP,GAAU,IAAM,CACZqB,EAAa,CACjB,EAAG,CAAClB,CAAK,CAAC,CAEd,EAEOoB,GAAQrB,GCvFfJ,ICAAA,IAEA,OAAO0B,OAAW,oBAClB,OAAqB,aAAAxB,GAAW,YAAAyB,OAAgB,QAChD,OAAS,gBAAAC,OAAoB,cCJ7B5B,IAAA,OAAS,aAAAE,GAAW,UAAA2B,GAAQ,YAAAF,OAAgB,QAC5C,OAAS,gBAAAC,OAAoB,cAC7B,OAAS,gBAAAE,OAAoB,iBCF7B9B,IAAA,IAAM+B,GAAc,CAChB,WAAY,KACZ,cAAe,KACf,SAAU,KACV,QAAS,KACT,SAAU,KACV,KAAM,KACN,OAAQ,KACR,WAAY,KACZ,UAAW,KACX,YAAa,KACb,iBAAkB,KAClB,KAAM,KACN,OAAQ,KACR,UAAW,KACX,MAAO,KACP,OAAQ,KACR,KAAM,KACN,eAAgB,KAChB,gBAAiB,KACjB,WAAY,KACZ,SAAU,KACV,YAAa,KACb,IAAK,IACT,EAEOC,EAAQD,GDdf,OAAOL,OAAW,oBAElB,IAAMO,GAAW,IAEXC,GAAkB,CAAC,CACrB,KAAAC,EACA,qBAAAC,EACA,oBAAAC,EACA,wBAAAC,EACA,uBAAAC,CACJ,IAA6B,CACzB,GAAM,CAACC,EAAsBC,CAAuB,EAAId,GAAiB,EAAE,EACrE,CAACe,EAAMC,CAAO,EAAIhB,GAAkB,EAAK,EACzCiB,EAA0Bf,GAAeW,CAAoB,EAE7DlC,EAAWC,EAAe,EAC1B,CAAE,SAAAsC,CAAS,EAAIC,EAAe,CAAC,CAAE,WAAY,CAAE,YAAAC,EAAa,SAAAF,EAAU,eAAAG,EAAe,CAAE,KAAO,CAAE,YAAAD,EAAa,SAAAF,EAAU,eAAAG,EAAe,GAAIpB,EAAY,EACtJ,CAAE,qBAAAqB,CAAqB,EAAIH,EAC7B,CAAC,CAAE,UAAW,CAAE,qBAAAG,EAAsB,OAAAC,CAAO,CAAE,KAAO,CAAE,qBAAAD,EAAsB,OAAAC,CAAO,GACrFtB,EACJ,EAEMuB,EAAatB,GAAY,IAAI,EAEnC3B,GAAU,IAAM,CACZ0C,EAAwB,QAAUJ,CACtC,EAAG,CAACA,CAAoB,CAAC,EAEzB,IAAIY,EAEJA,EAActB,GAAcuB,GAAU,CAC9B,CAAC,gBAAiB,cAAc,EAAE,SAASlB,CAAI,IAC/CkB,EAAM,gBAAgB,EAClBlB,IAAS,iBAAmBI,EAAwBA,EAAuB,EAAI,EAC1EJ,IAAS,gBAAkBG,GAAyBA,EAAwB,EAAI,EACzF,aAAaa,EAAW,OAAO,EAC/BA,EAAW,QAAU,WAAW,IAAMR,EAAQ,EAAI,EAAGV,EAAQ,EAErE,EAAG,GAAG,EAEN/B,GAAU,IAAM,CACRwC,IACAC,EAAQ,EAAK,EACbrC,EAASgD,EAAkB,EAAK,CAAC,EAC7BlB,GAAwBE,GACxBA,EAAwB,EAAK,EACzBiB,EAAS,EAAE,SAAWA,EAAS,EAAE,aAAeX,EAAwB,QAASY,EAAsBrB,EAAMoB,EAAS,EAAE,QAAQ,EAC/HC,EAAsBrB,EAAMS,EAAwB,OAAO,EAChEH,EAAwB,EAAE,GACnBJ,GAAuBE,IAC9BA,EAAuB,EAAK,EACxBgB,EAAS,EAAE,aAAeX,EAAwB,QAASY,EAAsBrB,EAAM,CAAC,EACvFqB,EAAsBrB,EAAMS,EAAwB,OAAO,EAChEH,EAAwB,EAAE,GAGtC,EAAG,CAACC,CAAI,CAAC,EAET,IAAMe,EAAoBJ,GAAe,CACrCZ,EAAyBiB,GAASA,EAAO,EAAE,EACvCC,0BAA+C,GAAGC,GAAmBP,EAAOlB,CAAI,EACpF,aAAagB,EAAW,OAAO,EAC/BA,EAAW,QAAU,WAAW,IAAMR,EAAQ,EAAI,EAAGV,EAAQ,CACjE,EAEI4B,EAEJ,MAAI,CAAC,WAAY,SAAS,EAAE,SAAS1B,CAAI,EACrC0B,EACI,oBAAC,OACG,UAAW,GACP,CAACF,iBAAsC,GAAK,oBAChD,6DACIxB,IAAS,aAAeoB,EAAS,EAAE,aAAe,GAAK,iBAAmB,qDAC9E,IACIpB,IAAS,YACRU,EAAWU,EAAS,EAAE,aAAe,GAAK,iBAAmB,qDAClE,IACA,cAAgBF,GAAUA,EAAM,eAAe,GAE/C,oBAAC3B,GAAA,CACG,IAAKS,IAAS,WAAa,gBAAkB,eAC7C,IAAKA,IAAS,WAAaH,EAAO,WAAaA,EAAO,UACtD,MAAO,GACP,OAAQ,GACR,QAAS,IAAMwB,EAAsBrB,EAAMK,CAAoB,EAC/D,cAAgBa,GAAeA,EAAM,gBAAgB,EACzD,CACJ,EAEG,CAAC,gBAAiB,cAAc,EAAE,SAASlB,CAAI,IACtD0B,EACI,oBAAC,OACG,GAAI1B,EACJ,UAAW,iGACPA,IAAS,gBAAkB,oBAAsB,mBACrD,GACA,MAAO,CAAE,MAAOc,EAAqB,MAAO,OAAQA,EAAqB,KAAM,EAC9E,GAAGG,IAEFhB,GAAwBC,IACtB,oBAAC,OACG,UAAW,sHACX,aAAcoB,GAEd,oBAAC,OACG,UAAW,GACPtB,IAAS,gBAAkB,gBAAkB,yBACjD,8CAEA,oBAACT,GAAA,CACG,IAAI,kBACJ,IAAKM,EAAO,UACZ,UAAW,GAAGG,IAAS,gBAAkB,eAAe,GACxD,MAAO,GACP,OAAQ,GACZ,EACA,oBAACT,GAAA,CACG,IAAI,kBACJ,IAAKM,EAAO,UACZ,UAAW,GAAGG,IAAS,gBAAkB,eAAe,GACxD,MAAO,GACP,OAAQ,GACZ,EACA,oBAACT,GAAA,CACG,IAAI,kBACJ,IAAKM,EAAO,UACZ,UAAW,GAAGG,IAAS,gBAAkB,eAAe,GACxD,MAAO,GACP,OAAQ,GACZ,CACJ,EACA,oBAAC,KAAE,UAAU,8DAA8DK,EAAqB,iCAAM,CAC1G,CAER,GAID,wCAAGqB,CAAU,CACxB,EAEOC,EAAQ5B,GE1JflC,IAAA,OAAO0B,OAAW,oBAClB,OAAS,aAAAxB,GAAW,UAAA2B,GAAQ,YAAAF,OAAgB,QAC5C,OAAS,gBAAAC,OAAoB,cCF7B5B,IAEA,IAAM+D,GAAO,CAAC,CAAE,UAAAC,EAAW,QAAAC,CAAQ,IAE3B,oBAAC,OAAI,MAAM,KAAK,OAAO,KAAK,QAAQ,YAAY,KAAK,OAAO,MAAM,6BAA6B,UAAWD,EAAW,QAASC,GAC1H,oBAAC,KAAE,QAAQ,OACP,oBAAC,QAAK,EAAE,uSAAuS,EAC/S,oBAAC,QAAK,EAAE,+kBAA+kB,CAC3lB,CACJ,EAIDC,GAAQH,GCbf/D,IAEA,IAAMmE,GAAS,CAAC,CAAE,UAAAH,EAAW,QAAAC,CAAQ,IAE7B,oBAAC,OAAI,MAAM,KAAK,OAAO,KAAK,QAAQ,YAAY,KAAK,OAAO,MAAM,6BAA6B,UAAWD,EAAW,QAASC,GAC1H,oBAAC,QAAK,EAAE,4hBAA4hB,CACxiB,EAIDG,GAAQD,GFOf,IAAME,GAAwB,IAAM,CAChC,GAAM,CAAClC,EAAMmC,CAAO,EAAI3C,GAAiB,EAAE,EAErCrB,EAAWC,EAAe,EAC1B,CAAE,SAAAgE,CAAS,EAAIzB,EAAe,CAAC,CAAE,KAAM,CAAE,SAAAyB,CAAS,CAAE,KAAO,CAAE,SAAAA,CAAS,GAAI3C,EAAY,EAEtF4C,EAA4B3C,GAAe0C,EAAS,UAAU,EAC9DE,EAAwB5C,GAAe0C,EAAS,MAAM,EACtDG,EAAU7C,GAAeM,CAAI,EAEnCjC,GAAU,IAAM,CACZwE,EAAQ,QAAUvC,CACtB,EAAG,CAACA,CAAI,CAAC,EAETjC,GAAU,IAAM,CACZ,IAAIyE,EAAiB,EAEfC,EAA0BvB,GAAe,CACvCM,gBAAqC,GAAK,CAACkB,EAAkBxB,EAAO,eAAe,IAAGsB,EAAiBtB,EAAM,QAAQ,CAAC,EAAE,QAChI,EAEMyB,EAAyBzB,GAAe,CACtCM,gBAAqC,GAAK,CAACkB,EAAkBxB,EAAO,eAAe,IACnFA,EAAM,gBAAgB,EAClBA,EAAM,QAAQ,CAAC,EAAE,QAAU,OAAO,WAAa,EAAG0B,EAAgB1B,EAAO,SAAUsB,EAAgB,OAAO,WAAW,EAChHtB,EAAM,QAAQ,CAAC,EAAE,QAAU,OAAO,WAAa,GAAG0B,EAAgB1B,EAAO,aAAcsB,EAAgB,OAAO,WAAW,EAE1I,EAEMK,EAAuB,IAAM,CAC/B,GAAM,CAAE,SAAAT,CAAS,EAAIU,EAAM,SAAS,EAAE,KAClCP,EAAQ,UAAY,cAAgBF,EAA0B,UAAYD,EAAS,YACnFW,EAAcC,GAAcX,EAA0B,QAASD,EAAS,UAAU,CAAC,EACnFC,EAA0B,QAAUD,EAAS,YACtCG,EAAQ,UAAY,UAAYD,EAAsB,UAAYF,EAAS,SAClFW,EAAcE,EAAUX,EAAsB,QAASF,EAAS,MAAM,CAAC,EACvEE,EAAsB,QAAUF,EAAS,QAE7C,WAAW,IAAMD,EAAQ,EAAE,EAAG,GAAG,CACrC,EAEA,gBAAS,iBAAiB,aAAejB,GAAeuB,EAAuBvB,CAAK,CAAC,EACrF,SAAS,iBAAiB,YAAcA,GAAeyB,EAAsBzB,CAAK,CAAC,EACnF,SAAS,iBAAiB,WAAY,IAAM2B,EAAqB,CAAC,EAE3D,IAAM,CACT,SAAS,oBAAoB,aAAe3B,GAAeuB,EAAuBvB,CAAK,CAAC,EACxF,SAAS,oBAAoB,YAAcA,GAAeyB,EAAsBzB,CAAK,CAAC,EACtF,SAAS,oBAAoB,WAAY,IAAM2B,EAAqB,CAAC,CACzE,CACJ,EAAG,CAAC,CAAC,EAEL9E,GAAU,IAAM,CACRqE,EAAS,SAAW,GAAK,CAACpC,IAAMsC,EAAsB,QAAU,EACxE,EAAG,CAACF,EAAS,MAAM,CAAC,EAEpB,IAAMQ,EAAkB,CAAC1B,EAAYlB,EAAcwC,EAAwBU,IAAiB,CACxF,GAAM,CAAE,SAAAd,CAAS,EAAIU,EAAM,SAAS,EAAE,KAChC,CAAE,yBAAAK,CAAyB,EAAIL,EAAM,SAAS,EAAE,WACtD,GAAI,CACKK,GAA0BhF,EAASgD,EAAkB,EAAK,CAAC,EAChED,EAAM,gBAAgB,EACtBiB,EAAQnC,CAAI,EACZ,GAAM,CAAE,OAAAoD,CAAO,EAAI,SAAS,uBAAuB,QAAQ,EAAE,CAAC,EAAE,sBAAsB,EACtF,GAAIpD,IAAS,SAAU,CACnB,IAAMqD,EAAQjB,EAAS,QAAYI,EAAiBtB,EAAM,QAAQ,CAAC,EAAE,SAAW,GAAMkC,EAAUF,EAC5FI,EACAD,EAAQ,IAAKC,EAAc,IACtBD,EAAQ,EAAGC,EAAc,EAC7BA,EAAc,KAAK,KAAK,KAAK,IAAID,CAAK,CAAC,EAC5ClF,EAASoF,EAAgB,CAAE,GAAGnB,EAAU,OAAQkB,CAAY,CAAC,CAAC,EAC9DlC,EAAS,EAAE,OAASkC,EAAc,GACtC,SAAWtD,IAAS,aAAc,CAC9B,IAAMqD,EAAQjB,EAAS,YAAgBI,EAAiBtB,EAAM,QAAQ,CAAC,EAAE,SAAW,GAAMkC,EAAUF,EAChGG,EAAQ,IAAKlF,EAASoF,EAAgB,CAAE,GAAGnB,EAAU,WAAY,GAAI,CAAC,CAAC,EAClEiB,EAAQ,EAAGlF,EAASoF,EAAgB,CAAE,GAAGnB,EAAU,WAAY,CAAE,CAAC,CAAC,EACvEjE,EAASoF,EAAgB,CAAE,GAAGnB,EAAU,WAAY,KAAK,KAAK,KAAK,IAAIiB,CAAK,CAAC,CAAE,CAAC,CAAC,CAC1F,CACJ,MAAgB,CACZ,MAAO,EACX,CACJ,EAEA,OACI,oBAAC,OAAI,GAAG,qBACJ,oBAAC,OACG,UAAW,mEACX,MAAO,CAAE,QAASjB,EAAS,WAAa,GAAK,GAAM,EAAIA,EAAS,WAAa,GAAI,EACpF,EACD,oBAAC,OAAI,UAAU,kGACX,oBAAC,OAAI,UAAU,uDACX,oBAAC,OACG,GAAI,qBACJ,UAAW,0CACPpC,IAAS,UAAY,gBACzB,6FAECA,IAAS,UACN,wCACI,oBAAC,OACG,UAAU,gEACV,MAAO,CAAE,OAAQ,GAAGoC,EAAS,MAAM,GAAI,EAC3C,EACA,oBAAC,OAAI,UAAU,0DACX,oBAAC,OAAI,UAAU,uCACVA,EAAS,OAAS,GACf,oBAAC,OAAI,UAAU,gLAAgL,EAElMA,EAAS,OAAS,IACf,oBAAC,OAAI,UAAU,iLAAiL,EAEnMA,EAAS,OAAS,IACf,oBAAC,OAAI,UAAU,iLAAiL,CAExM,EACCA,EAAS,SAAW,EACjB,oBAACL,GAAA,CAAK,UAAU,kDAAkD,EAElE,oBAACE,GAAA,CAAO,UAAU,kDAAkD,CAE5E,CACJ,CAER,CACJ,EACCjC,GACG,oBAAC,OAAI,UAAU,2JACVA,IAAS,SAAWoC,EAAS,OAASA,EAAS,UACpD,EAEJ,oBAAC,OAAI,UAAU,sEACX,oBAAC,OACG,GAAI,yBACJ,UAAW,0CACPpC,IAAS,cAAgB,gBAC7B,6FAECA,IAAS,cACN,wCACI,oBAAC,OACG,UAAU,8DACV,MAAO,CAAE,OAAQ,GAAGoC,EAAS,UAAU,GAAI,EAC/C,EACA,oBAAC,OACG,UAAU,yDACV,MAAO,CAAE,QAASA,EAAS,WAAa,GAAI,GAE5C,oBAAC7C,GAAA,CAAM,IAAI,GAAG,IAAKM,EAAO,IAAK,UAAU,YAAY,MAAO,GAAI,OAAQ,GAAI,CAChF,CACJ,CAER,CACJ,CACJ,CACJ,CAER,EAEO2D,GAAQtB,GG/KfrE,IAAA,OAAS,gBAAA4B,OAAoB,cCA7B5B,IAAA,OAAS,gBAAA4B,OAAoB,cAK7B,IAAMgE,GAAQ,IAAM,CAChB,GAAM,CAAE,QAAAC,EAAS,OAAA3C,CAAO,EAAIJ,EAAe,CAAC,CAAE,UAAW,CAAE,QAAA+C,EAAS,OAAA3C,CAAO,CAAE,KAAO,CAAE,QAAA2C,EAAS,OAAA3C,CAAO,GAAItB,EAAY,EAEtH,OACI,oBAAC,OACG,UAAW,wKACP+B,oBAAyC,EAAI,iCAAmC,+BACpF,IAECA,YAAiC,EAAIkC,EAAQ,MAAQ3C,EAAO,EACjE,CAER,EAEO4C,GAAQF,GCnBf5F,IAAA,OAAO0B,OAAW,oBAMlB,IAAMqE,GAAO,IAGT,oBAAC,OAAI,UAAW,iDAAiDpC,oBAAyC,EAAI,yCAA2C,yCAAyC,IAChM,oBAACjC,GAAA,CACC,IAAKM,EAAO,KACZ,IAAI,YACJ,MAAO,GACP,OAAQ,GACR,QAAS,IAAMgE,GAAW,QAAQ,EACpC,EACC,CAAC,aAAa,QAAQ,cAAc,GAAK,oBAAC,KAAE,UAAU,uHAAsH,iJAA4B,CAC3M,EAIGC,GAAQF,GFff,IAAMG,GAAS,KACXpD,EAAe,CAAC,CAAE,WAAY,CAAE,KAAAqD,EAAM,eAAAC,CAAe,CAAE,KAAO,CAAE,KAAAD,EAAM,eAAAC,CAAe,GAAIxE,EAAY,EAGjG,oBAAC,OAAI,UAAW,yDACX+B,aAAkC,GAAK,oBAACmC,GAAA,IAAM,EAC9CnC,UAA+B,GAAK,oBAACsC,GAAA,IAAK,CAC/C,GAIDI,GAAQH,GGlBflG,IAAA,OAAS,aAAAE,GAAW,YAAAyB,OAAgB,QACpC,OAAS,gBAAAC,OAAoB,cCD7B5B,IAAA,OAAS,gBAAA4B,OAAoB,cAM7B,OAAOF,OAAW,oBAElB,IAAM4E,GAAY,KACdxD,EAAe,CAAC,CAAE,WAAY,CAAE,KAAAyD,EAAM,eAAAvD,CAAe,CAAE,KAAO,CAAE,KAAAuD,EAAM,eAAAvD,CAAe,GAAIpB,EAAY,EACrGkB,EAAe,CAAC,CAAE,UAAW,CAAE,qBAAAG,EAAsB,OAAAC,CAAO,CAAE,KAAO,CAAE,qBAAAD,EAAsB,OAAAC,CAAO,GAAItB,EAAY,EAGhH,oBAAC,OACG,UAAW,GAAG,CAAC+B,iBAAsC,GAAK,oBAAoB,4DAC9E,cAAgBN,GAAUA,EAAM,eAAe,GAE/C,oBAAC3B,GAAA,CACG,IAAI,GACJ,IAAKiC,UAA+B,EAAI3B,EAAO,SAAWA,EAAO,QACjE,MAAO2B,kBAAuC,EAAI,GAAK,GACvD,OAAQA,kBAAuC,EAAI,GAAK,GACxD,QAAUN,GAAemD,GAAgBnD,CAAK,EAC9C,cAAgBA,GAAeA,EAAM,gBAAgB,EACrD,UAAW,GAAGM,UAA+B,EAAI,mBAAqB,mBAAmB,GAC7F,CACJ,GAID8C,GAAQH,GDtBf,IAAMI,GAAO,IAAM,CACf,GAAM,CAACC,EAAWC,CAAY,EAAIjF,GAAkB,EAAK,EAEzDmB,EAAe,CAAC,CAAE,WAAY,CAAE,KAAAqD,EAAM,UAAAU,CAAU,CAAE,KAAO,CAAE,KAAAV,EAAM,UAAAU,CAAU,GAAIjF,EAAY,EAC3F,GAAM,CAAE,eAAAwE,CAAe,EAAItD,EAAe,CAAC,CAAE,WAAY,CAAE,eAAAsD,CAAe,CAAE,KAAO,CAAE,eAAAA,CAAe,GAAGxE,EAAY,EAEnH,OAAA1B,GAAU,IAAM,CACZ,IAAI4G,EAAe,KACnB,OAAInD,eAAoC,GAAKA,oBAAyC,EAAGmD,EAAU,WAAW,IAAMF,EAAa,EAAI,EAAG,GAAG,EACtIA,EAAa,EAAK,EAEhB,IAAM,aAAaE,CAAO,CACrC,EAAG,CAACV,CAAc,CAAC,EAGf,oBAAC,QAAK,UAAU,aACXO,GAAa,CAAChD,UAA+B,GAC1C,oBAAC,OACG,GAAG,eACH,UAAW,kFAAkFA,oBAAyC,EAAI,yBAA2B,wBACjK,IAEJ,oBAAC,OACG,UAAU,+DACV,MAAO,CAAE,OAAQA,qBAA0C,MAAwD,GAElH,CAACA,eAAoC,GAAK,oBAACG,EAAA,CAAgB,KAAK,UAAU,EAC3E,oBAAC2C,GAAA,IAAU,EACV,CAAC9C,eAAoC,GAAK,oBAACG,EAAA,CAAgB,KAAK,WAAW,CAChF,CACJ,CAER,CAER,EAEOiD,GAAQL,GE5Cf1G,IAAA,OAAS,gBAAA4B,OAAoB,cCA7B5B,IAAA,OAAS,aAAAE,GAAW,YAAAyB,OAAgB,QACpC,OAAS,gBAAAC,OAAoB,cCD7B5B,IAAA,OAAS,aAAAE,GAAW,YAAAyB,OAAgB,QACpC,OAAS,gBAAAC,OAAoB,cAC7B,OAAS,QAAAoF,OAAY,QCFrBhH,IAYO,IAAMiH,GAAiB,CAAC5D,EAAYlB,EAAe,KAAO,CAC7D,GAAM,CAAE,qBAAAc,CAAqB,EAAIgC,EAAM,SAAS,EAAE,UAC5C,CAAE,SAAApC,EAAU,oBAAAqE,CAAoB,EAAIjC,EAAM,SAAS,EAAE,WACrDkC,EAAgBxD,eAAoC,EAAIuD,EAAsBrE,EAC9EuE,EAAU/D,EAAM,UAAY,OAAYA,EAAM,QAAUA,EAAM,QAAQ,CAAC,EAAE,QAC/E,GAAI+D,GAAWnE,EAAqB,MAAQoE,EAAc,GAAKD,EAAUC,EAAc,EAAG,CAEtF,IAAIC,GADYF,EAAUC,EAAc,EAAIpE,EAAqB,OAC/BA,EAAqB,MAAQ,EAAIoE,EAAc,GAAMF,EACvF,OAAIhF,IAAS,qBAAoBmF,EAAgBH,EAAgBG,GAC1DA,CACX,CACJ,EAEaC,EAAsBlE,GAAe,CAC9C,GAAM,CAAE,qBAAAJ,CAAqB,EAAIgC,EAAM,SAAS,EAAE,UAC5CmC,EAAU/D,EAAM,UAAY,OAAYA,EAAM,QAAUA,EAAM,QAAQ,CAAC,EAAE,QAC/E,GAAI+D,GAAWnE,EAAqB,MAAQoE,EAAc,GAAKD,EAAUC,EAAc,EACnF,OAAOD,EAAUC,EAAc,EAAIpE,EAAqB,IAEhE,EAQO,IAAMuE,GAAuBC,GAAyB,CACrDA,IACAA,EAAgB,MAAM,QAAU,MAChCA,EAAgB,MAAM,cAAgB,OACtCA,EAAgB,MAAM,OAAS,GAEvC,EAEMC,GAA8BD,GAAyB,CACzDA,EAAgB,MAAM,QAAU,QAChCA,EAAgB,MAAM,OAAS,GAC/BA,EAAgB,MAAM,QAAYxC,EAAM,SAAS,EAAE,UAAU,QAAQ,IAAM,MAAQ,MACnFwC,EAAgB,MAAM,cAAgB,OACtCA,EAAgB,MAAM,WAAa,qBACvC,EAEME,GAAyB,CAACtE,EAAYoE,IAAyB,CACjE,GAAM,CAAE,qBAAAxE,CAAqB,EAAIgC,EAAM,SAAS,EAAE,UAC5C2C,EAAe,SAAS,uBAAuB,oBAAoB,EAAE,CAAC,EACtEC,EAAoB,SAAS,eAAe,eAAe,EAC7DD,GAAWC,IACNN,EAAmBlE,CAAK,EAAKuE,EAAQ,sBAAsB,EAAE,MAAQ,GAAOL,EAAmBlE,CAAK,EAAKJ,EAAqB,MAAQA,EAAqB,KAAO2E,EAAQ,sBAAsB,EAAE,MAAQ,EAC3MH,EAAgB,MAAM,KAAO,GAAGF,EAAmBlE,CAAK,EAAKuE,EAAQ,YAAc,CAAC,KAC7EL,EAAmBlE,CAAK,GAAMwE,EAAa,aAAe,EAAID,EAAQ,YAAcC,EAAa,YACxGJ,EAAgB,MAAM,KAAO,MACtBlE,EAAS,EAAE,WAAaA,EAAS,EAAE,YAAcgE,EAAmBlE,CAAK,EAAKuE,EAAQ,cAC7FH,EAAgB,MAAM,KAAO,GAAGlE,EAAS,EAAE,YAAcqE,EAAQ,WAAW,MAGxF,EAEaE,GAAsB,CAACzE,EAAYoE,EAAsBM,IAA4B,CAC1FN,GAAiBC,GAA2BD,CAAe,EAC3DxC,EAAM,SAAS,EAAE,UAAU,QAAQ,IAAK0C,GAAuBtE,EAAOoE,CAAe,EACpFA,EAAgB,MAAM,KAAO,GAAGF,EAAmBlE,CAAK,EAAK,EAAE,KACpE4B,EAAM,SAAS+C,GAAe,OAAOf,GAAe5D,CAAK,CAAE,CAAC,CAAC,EAC7D0E,EAAmB,YAAcpE,eAAoC,EAC/D,IAAIsE,EAAahB,GAAe5D,EAAO,kBAAkB,CAAE,CAAC,GAC5D,GAAG4E,EAAahB,GAAe5D,CAAK,CAAE,CAAC,EACjD,EAEa6E,GAAoB,CAAC7E,EAAY8E,EAAmB,KAAU,CACvE,GAAM,CAAE,qBAAAlF,CAAqB,EAAIgC,EAAM,SAAS,EAAE,UAC5CwC,EAAuB,SAAS,cAAc,qBAAqB,EACnEM,EAA0B,SAAS,cAAc,yBAAyB,EAC1EX,EAAU/D,EAAM,UAAY,OAAYA,EAAM,QAAUA,EAAM,QAAQ,CAAC,EAAE,QAE3EoE,GACAM,GACAX,GAAWnE,EAAqB,MAAQoE,EAAc,GACtDD,EAAUnE,EAAqB,KAAOoE,EAAc,GAEpDS,GAAoBzE,EAAOoE,EAAiBM,CAAkB,EAC1DI,GAAS,WAAW,IAAMX,GAAoBC,CAAe,EAAG,GAAI,GACrED,GAAoBC,CAAe,CAC9C,EAEaW,GAAsB/E,GAAe,CAC9C,IAAM+D,EAAU/D,EAAM,UAAY,OAAYA,EAAM,QAAUA,EAAM,QAAQ,CAAC,EAAE,QAC3EgF,EAAY,IACRjB,GAAW/D,EAAM,KAAK,WAAagE,EAAc,GAAKD,EAAUC,EAAc,EAC9EgB,EAAY,EAAE,MAAM,MAAQ,GAAGd,EAAmBlE,CAAK,CAAC,KACnD+D,GAAW/D,EAAM,KAAK,WAAagE,EAAc,EAAGgB,EAAY,EAAE,MAAM,MAAQ,EAChFjB,EAAUC,EAAc,IAAGgB,EAAY,EAAE,MAAM,MAAQ,QAExE,EAEaC,GAAoB,CAACjF,EAAYkF,EAAiBC,IAA+C,CAC1GnF,EAAM,eAAe,EACrBA,EAAM,gBAAgB,EACtBmF,EAAiB,EAAI,EACrB,IAAMlI,EAAW2E,EAAM,SACjBmC,EAAU/D,EAAM,UAAY,OAAYA,EAAM,QAAUA,EAAM,QAAQ,CAAC,EAAE,QAC3E+D,GAAW/D,EAAM,KAAK,WAAagE,EAAc,GAAKD,EAAUC,EAAc,IAC9E/G,EAASmI,GAA4B,EAAI,CAAC,EAC1CnI,EAASoI,GAA0B,EAAI,CAAC,EACxC,eAAe,QAAQ,oBAAqB,OAAOnF,EAAS,EAAE,WAAW,CAAC,EAC1EF,EAAM,OAAO,kBAAkBA,EAAM,SAAS,EAC1CkF,EAAW,OAAS,GAAGA,EAAW,IAAKI,GAAY,aAAaA,CAAE,CAAC,EAE/E,EAEaC,GAAqBvF,GAAe,CAC7CA,EAAM,eAAe,EACrBA,EAAM,gBAAgB,EACtB,IAAM/C,EAAW2E,EAAM,SACjB,CAAE,yBAAAK,CAAyB,EAAIL,EAAM,SAAS,EAAE,WAChD,CAAE,KAAA4D,CAAK,EAAI5D,EAAM,SAAS,EAAE,UAAU,qBACtCmC,EAAU/D,EAAM,UAAY,OAAYA,EAAM,QAAUA,EAAM,QAAQ,CAAC,EAAE,QACzEoE,EAAuB,SAAS,cAAc,qBAAqB,EACrEL,EAAUyB,EAAOxB,EAAc,GAC3BI,IACAA,EAAgB,MAAM,QAAU,mBAChCA,EAAgB,MAAM,cAAgB,QAEtCnC,IACAhF,EAASoI,GAA0B,EAAI,CAAC,EACxCR,GAAkB7E,CAAK,EACvB+E,GAAmB/E,CAAK,EACxBE,EAAS,EAAE,MAAM,IAEdkE,IACPA,EAAgB,MAAM,QAAU,kBAChCA,EAAgB,MAAM,cAAgB,OAE9C,EAEaqB,GAAkB,CAC3BzF,EACA0F,EACAR,EACAC,IACC,CACDA,EAAiB,EAAK,EACtBnF,EAAM,eAAe,EACrBA,EAAM,gBAAgB,EACtB,IAAM/C,EAAW2E,EAAM,SACjB,CAAE,SAAApC,EAAU,oBAAAqE,CAAoB,EAAIjC,EAAM,SAAS,EAAE,WACrD,CAAE,KAAA4D,EAAM,MAAAG,CAAM,EAAI/D,EAAM,SAAS,EAAE,UAAU,qBAC7CkC,EAAgBxD,eAAoC,EAAIuD,EAAsBrE,EACpFQ,EAAM,OAAO,oBAAoB,cAAeuF,EAAiB,EACjE,IAAMxB,EAAU/D,EAAM,UAAY,OAAYA,EAAM,QAAUA,EAAM,QAAQ,CAAC,EAAE,QAC3EN,EAAc,EACdqE,EAAUyB,EAAOxB,EAAc,GAAKD,EAAU4B,EAAQ3B,EAAc,EAAGtE,EAAckE,GAAe5D,CAAK,EACpG+D,EAAUyB,EAAOxB,EAAc,EAAGtE,EAAc,EAChDqE,EAAUC,EAAc,IAAGtE,EAAcoE,GAC7CxD,kBAAuC,GAAGsF,GAAoB1F,EAAS,EAAE,YAAaR,CAAW,EACtGQ,EAAS,EAAE,YAAcR,EACrBkC,EAAM,SAAS,EAAE,WAAW,2BAC5B3E,EAASmI,GAA4B,EAAK,CAAC,EAC3CnI,EAASoI,GAA0B,EAAK,CAAC,EACzCnF,EAAS,EAAE,KAAK,EAChB2E,GAAkB7E,EAAO,EAAI,EAC7B,eAAe,QAAQ,eAAgB,OAAON,CAAW,CAAC,EAC1DqF,GAAmB/E,CAAK,EACxB6F,GAAc7F,EAAO/C,EAAUyI,EAAeR,CAAU,EAEhE,EAEMW,GAAgB,CAAC7F,EAAY/C,EAAeyI,EAA4CR,IAAoB,CAC9G,IAAMY,EAAMZ,EACRa,EAAgB,WAAW,IAAM,CACjC,GAAM,CAAE,eAAAC,EAAgB,mBAAAC,CAAmB,EAAIrE,EAAM,SAAS,EAAE,SAC1D,CAAE,uBAAAsE,CAAuB,EAAItE,EAAM,SAAS,EAAE,WAChD5B,EAAM,cAAgB,SAAW,CAACgG,GAAkB,CAACC,GAAsBC,GAAwBjJ,EAASgD,EAAkB,EAAK,CAAC,CAC5I,EAAGkG,CAAkB,EACrBL,EAAI,KAAKC,CAAa,EACtBL,EAAcI,CAAG,CACrB,EAEaM,GAA0B,IAAM,CACzC,IAAMC,EAAQ,KAAK,IAAI,EACvBnG,EAAS,EACJ,KAAK,EACL,KAAK,IAAM2B,EAAcyE,GAAkB,KAAK,IAAI,EAAID,CAAK,CAAC,CAAC,CACxE,EAEaE,GAAmBvG,GAAe6E,GAAkB7E,CAAK,EAEzDwG,GAAiB,IAAM,CAChC,IAAM9B,EAA0B,SAAS,cAAc,qBAAqB,EAC5EP,GAAoBO,CAAkB,CAC1C,EAGM+B,GAAwBC,GAAsB,CAChD,IAAMC,EAAyBD,EAAU,MAAM,GAAG,EAE5CE,EADYD,EAAuB,CAAC,EACT,MAAM,GAAG,EAE1C,MAAO,CACH,aAAc,SAASA,EAAuB,CAAC,EAAG,EAAE,GAAK,EACzD,QAAS,SAASC,EAAe,IAAI,EAAI,EAAE,GAAK,EAChD,QAAS,SAASA,EAAe,IAAI,EAAI,EAAE,GAAK,EAChD,MAAO,SAASA,EAAe,IAAI,EAAI,EAAE,GAAK,CAClD,CACJ,EAEMC,GAA2BH,GAAsB,CACnD,IAAMI,EAAsBL,GAAqBC,CAAS,EAE1D,OAAO,SAASI,EAAe,OAAS,GAAK,IAAMA,EAAe,QAAU,GAAKA,EAAe,QAAUA,EAAe,aAAe,IAAM,EAAE,CACpJ,EAEMC,GAAmBC,GAAgB,CACrC,IAAMC,EAAgBD,EAAI,MAAM,SAAS,EACnCE,EAAWD,EAAc,CAAC,EAE1BE,EADcF,EAAc,CAAC,EACE,MAAM,UAAU,EAErD,MAAO,CACH,EAAGE,EAAY,CAAC,EAChB,EAAGA,EAAY,CAAC,EAChB,EAAGA,EAAY,CAAC,EAChB,EAAGA,EAAY,CAAC,EAChB,MAAOD,CACX,CACJ,EAEME,GAAuB,CAACC,EAAcC,IACpCD,EAAK,QAAQ,IAAI,GAAK,EAEfA,EAGPC,EAAK,QAAQ,IAAI,IAAM,EAGhB,CAACA,EAAK,QAAQ,QAAS,EAAE,EAAGD,EAAK,KAAK,CAAC,EAAE,KAAK,GAAG,EAGxDC,EAAK,QAAQ,IAAI,EAAI,EAGd,CAACA,EAAK,KAAK,EAAGD,EAAK,KAAK,CAAC,EAAE,KAAK,GAAG,EAIvCA,EAGLE,GAAY,CAACC,EAAqBC,IAAmB,CACvD,IAAMC,EAAc,CAAC,EAEjBC,EAAoBF,EAAQ,MAAM,eAAe,EAAE,CAAC,EAMxD,GAFAD,EAAcJ,GAAqBI,EAAaG,CAAS,EAErD,CAACH,EAAY,MAAM,SAAS,EAC5B,OAAAE,EAAO,WAAa,QAAUF,EAAcC,EAAQ,MAAM,eAAe,EAAE,CAAC,EAAI,KACzEC,EAGX,IAAME,EAAab,GAAgBS,CAAW,EAE9C,OAAAE,EAAO,WACH,QAAUE,EAAW,MAAQH,EAAQ,MAAM,eAAe,EAAE,CAAC,EAAI,iBAAmBG,EAAW,EAAI,OAASA,EAAW,EAAI,KAC/HF,EAAO,MAAQE,EAAW,EAAI,KAC9BF,EAAO,OAASE,EAAW,EAAI,KAC/BF,EAAO,IAAME,EAAW,MAEjBF,CACX,EAEaG,GAAY,CAACC,EAAaC,IAAoB,CACvD,MAAMD,CAAG,EACJ,KAAME,GAAa,CAChB,GAAI,CAACA,EAAS,GACV,MAAApG,EAAM,SACFqG,GAAQ,CACJ,GAAGrG,EAAM,SAAS,EAAE,UAAU,QAC9B,IAAK,OACL,WAAY,MAChB,CAAC,CACL,EACM,IAAI,MAAM,6BAA6B,EAEjD,OAAOoG,EAAS,KAAK,CACzB,CAAC,EACA,KAAME,GAAS,CACZ,IAAMC,EAAuB,CAAC,EACPD,EAAK,MAAM,eAAe,EAClC,QAASE,GAAW,CAC/B,GAAIA,EAAO,MAAM,sGAAsG,EAAG,CACtH,IAAMC,EAAcD,EAAO,MAAM,SAAS,EAEpCE,EADYD,EAAY,CAAC,EACE,MAAM,UAAU,EAC3CE,EAAeD,EAAe,CAAC,EAC/BE,EAAaF,EAAe,CAAC,EAC7Bd,EAAca,EAAY,CAAC,EAC3BI,EAAYlB,GAAUC,EAAaM,CAAG,EAE5CK,EAAc,KAAK,CACf,MAAOtB,GAAwB0B,CAAY,EAC3C,IAAK1B,GAAwB2B,CAAU,EACvC,IAAKC,CACT,CAAC,CACL,CACJ,CAAC,EACDV,EAAWI,CAAa,CAC5B,CAAC,EACA,MAAOO,GAAU,CACd,QAAQ,MAAM,uBAAwBA,CAAK,CAC/C,CAAC,CACT,EAEaC,GAAkB,CAACC,EAAcC,EAAcC,IAAe,CACvE,QAASC,EAAI,EAAGA,EAAIF,EAAQ,OAAQ,EAAEE,EAAG,CACrC,IAAMC,EAAOH,EAAQE,CAAC,EACtB,GAAIH,GAAQI,EAAK,OAASJ,EAAOI,EAAK,KAElC,GAAIA,EAAK,IAAI,KAAO,CAACF,EAAME,EAAK,IAAI,GAAG,EAAG,CACtC,IAAMC,EAAiB,CACnB,WAAYD,EAAK,IAAI,WACrB,MAAOA,EAAK,IAAI,MAChB,OAAQA,EAAK,IAAI,MACrB,EACA,OAAAF,EAAME,EAAK,IAAI,GAAG,EAAIC,EACfA,CACX,SAAWD,EAAK,IAAI,IAAK,OAAOF,EAAME,EAAK,IAAI,GAAG,EAE1D,CACJ,ED/UA,IAAME,GAAU,IAAM,CAClB,GAAM,CAAE,QAAA1G,CAAQ,EAAI/C,EAAe,CAAC,CAAE,UAAW,CAAE,QAAA+C,CAAQ,CAAE,KAAO,CAAE,QAAAA,CAAQ,GAAIjE,EAAY,EACxF,CAAE,YAAA4K,CAAY,EAAI1J,EAAe,CAAC,CAAE,WAAY,CAAE,YAAA0J,EAAa,eAAApG,EAAgB,aAAAqG,CAAa,CAAE,KAAO,CAAE,YAAAD,EAAa,eAAApG,EAAgB,aAAAqG,CAAa,GAAI7K,EAAY,EAEjKuK,EAAa,CAAC,EACd,CAACD,EAASd,CAAU,EAAIzJ,GAAc,MAAS,EAC/C,CAACmJ,EAAQ4B,CAAS,EAAI/K,GAA6BgC,iBAAsC,EAAIkC,EAAQ,WAAaA,EAAQ,GAAG,EAEnI,OAAA3F,GAAU,IAAM,CACZwM,EAAU/I,kBAAuC,EAAIkC,EAAQ,WAAaA,EAAQ,GAAG,CACzF,EAAG,CAACA,EAAQ,IAAKA,EAAQ,WAAYlC,kBAAuC,CAAC,CAAC,EAE9EzD,GAAU,IAAM,CACN4K,GAAQI,GAAUvH,kBAAuC,EAAIkC,EAAQ,WAAcA,EAAQ,IAAMuF,CAAU,CACrH,EAAG,CAACN,CAAM,CAAC,EAEJnH,oBAAyC,EAC5C,oBAAC,OACG,UAAW,wJACPmH,GAAYoB,EAAU,GAAK,kBAC/B,kCAECpB,GAAU,CAAC,CAACoB,GACT,oBAAC,OAAI,UAAU,wDACX,oBAAC,OAAI,UAAU,mBAAmB,MAAOF,GAAgBQ,EAAaN,EAASC,CAAK,EAAG,CAC3F,EAEJ,oBAAC,OAAI,UAAU,iGAAiG,CACpH,EAEA,uCAAE,CAEV,EAEOQ,GAAQ3F,GAAKuF,EAAO,EDjC3B,IAAMK,GAAc,IAAM,CACtB,GAAM,CAACC,EAAerE,CAAgB,EAAI7G,GAAkB,EAAK,EAEjEzB,GAAU,IAAM,CACZsH,GAAoB,SAAS,cAAc,kBAAkB,CAAC,CAClE,EAAG,CAAC,CAAC,EAEL,GAAM,CAAE,SAAA3E,EAAU,YAAAE,EAAa,kBAAA+J,CAAkB,EAAIhK,EACjD,CAAC,CAAE,WAAY,CAAE,SAAAD,EAAU,YAAAE,EAAa,kBAAA+J,EAAmB,eAAA9J,CAAe,CAAE,KAAO,CAC/E,SAAAH,EACA,YAAAE,EACA,kBAAA+J,EACA,eAAA9J,CACJ,GACApB,EACJ,EACM,CAAE,QAAAmL,CAAQ,EAAIjK,EAChB,CAAC,CAAE,UAAW,CAAE,OAAAI,EAAQ,qBAAAD,EAAsB,QAAA8J,EAAS,kBAAAC,CAAkB,CAAE,KAAO,CAC9E,OAAA9J,EACA,qBAAAD,EACA,QAAA8J,EACA,kBAAAC,CACJ,GACApL,EACJ,EACM,CAAC2G,EAAYQ,CAAa,EAAIpH,GAAgB,CAAC,CAAC,EAEhDsL,EAAepK,EACfqK,EAA2BjB,GAAkBgB,EAAgBE,GAAiB,EAAIlB,EAAQgB,EAAe,EAE/G,OACI,oBAAC,OAAI,UAAW,GAAGtJ,yBAA8C,EAAI,aAAe,eAAe,gBAC/F,oBAAC,OAAI,UAAU,eACX,oBAACgJ,GAAA,IAAQ,CACb,EACA,oBAAC,OACG,UAAW,aAAahJ,yBAA8C,EAAI,cAAgB,mCAAmC,wBAC7H,cAAgBN,GAAeiF,GAAkBjF,EAAOkF,EAAYC,CAAgB,EACpF,cAAeI,GACf,YAAcvF,GAAeyF,GAAgBzF,EAAO0F,EAAeR,EAAYC,CAAgB,EAC/F,YAAaoB,GACb,WAAYC,GACZ,QAASJ,GACT,cAAgBpG,GAAeA,EAAM,gBAAgB,GAErD,oBAAC,OAAI,GAAG,gBAAgB,UAAU,yBAC9B,oBAAC,OACG,GAAG,qBACH,UAAW,qIACX,MAAO,CAAE,UAAWwJ,EAAgB,cAAgB,OAAQ,GAE3DE,EAAQ,IAAKK,GACV,oBAAC,OAAI,IAAKA,EAAO,GAAI,cAAaA,EAAO,MACrC,oBAAC,OACG,UAAU,mGACV,cAAaA,EAAO,KACpB,MAAO,CAAE,KAAMF,EAAwBE,EAAO,IAAI,EAAG,QAAqB,EAC9E,CACJ,CACH,EACD,oBAAC,OACG,GAAG,uBACH,UAAW,2DACX,MAAO,CAAE,MAAO,GAAGN,CAAiB,GAAI,EAC5C,EACA,oBAAC,OACG,GAAG,oBACH,UAAW,6IACPD,GAAiB,6BACrB,GACA,MAAO,CAAE,MAAO,GAAI9J,EAAcF,EAAYsK,GAAiB,CAAC,IAAK,EACzE,CACJ,CACJ,CACJ,CACJ,CAER,EAEOE,GAAQT,GGxFf5M,IAAA,OAAS,QAAAgH,OAAY,QACrB,OAAS,gBAAApF,OAAoB,cCD7B5B,IAAA,OAAS,aAAAE,GAAW,YAAAyB,OAAgB,QACpC,OAAS,gBAAAC,OAAoB,cCD7B5B,IAEA,IAAMsN,GAAqB,CAAC,CAAE,MAAAC,EAAO,UAAAvJ,CAAU,IAC3C,oBAAC,QACG,UAAW,sIAAsIA,CAAS,IAEzJuJ,CACL,EAGGC,EAAQF,GDFf,OAAO5L,OAAW,oBAGlB,IAAM+L,GAAa,IAAM,CACrB,GAAM,CAAE,aAAAhB,CAAa,EAAI3J,EAAe,CAAC,CAAE,WAAY,CAAE,UAAA+D,EAAW,aAAA4F,CAAa,CAAE,KAAO,CAAE,UAAA5F,EAAW,aAAA4F,CAAa,GAAI7K,EAAY,EAE9H,CAAC8L,EAAaC,CAAc,EAAIhM,GAAkB,EAAK,EAEvDrB,EAAWC,EAAe,EAEhC,OAAAL,GAAU,IAAM,CACPyD,eAAoC,GAAGrD,EAASgD,EAAkB,EAAK,CAAC,CACjF,EAAG,CAACmJ,CAAY,CAAC,EAGb,oBAAC,OAAI,UAAU,uCACX,oBAAC/K,GAAA,CACG,IAAKiC,gBAAqC,EAAI3B,EAAO,cAAgBA,EAAO,WAC5E,IAAI,kBACJ,UAAW,oBACX,MAAO,GACP,OAAQ,GACR,YAAa,IAAM,CAAC2B,iBAAsC,GAAKgK,EAAe,EAAI,EAClF,aAAc,IAAM,CAAChK,iBAAsC,GAAKgK,EAAe,EAAK,EACpF,QAAS,IAAM,CACXC,GAAiB,EACjBC,GAAsB,CAC1B,EACJ,EACCH,GACG,oBAACF,EAAA,CACG,MAAO,GAAG7J,gBAAqC,EAAI,wCAAY,EAAE,qDACrE,CAER,CAER,EAEOmK,GAAQL,GE9CfzN,IAAA,OAAS,YAAA2B,OAAgB,QACzB,OAAS,gBAAAC,OAAoB,cAO7B,OAAOF,OAAW,oBAElB,IAAMqM,GAAmB,IAAM,CAC3B,GAAM,CAACL,EAAaC,CAAc,EAAIhM,GAAkB,EAAK,EAE7D,OAAAmB,EAAe,CAAC,CAAE,WAAY,CAAE,eAAAE,CAAe,CAAE,KAAO,CAAE,eAAAA,CAAe,GAAIpB,EAAY,EACzFkB,EAAe,CAAC,CAAE,UAAW,CAAE,qBAAAG,EAAsB,OAAAC,CAAO,CAAE,KAAO,CAAE,qBAAAD,EAAsB,OAAAC,CAAO,GAAItB,EAAY,EAGhH,oBAAC,OAAI,UAAU,wCACX,oBAACF,GAAA,CACG,IAAI,GACJ,YAAa,IAAM,CAACiC,iBAAsC,GAAKgK,EAAe,EAAI,EAClF,aAAc,IAAM,CAAChK,iBAAsC,GAAKgK,EAAe,EAAK,EACpF,IAAK3L,EAAO,iBACZ,MAAO,GACP,OAAQ,GACR,UAAU,4BACV,QAAS,IAAMuB,EAAS,EAAE,wBAAwB,EACtD,EACCmK,GAAe,oBAACF,EAAA,CAAmB,MAAM,6EAAiB,CAC/D,CAER,EAEOQ,GAAQD,GCjCf/N,IAAA,OAAS,UAAA6B,GAAQ,YAAAF,OAAgB,QACjC,OAAS,gBAAAC,OAAoB,cAE7B,OAAOF,OAAW,oBAWlB,IAAMuM,GAAc,IAAM,CACtB,GAAM,CAACP,EAAaC,CAAc,EAAIhM,GAAkB,EAAK,EAEvDrB,EAAWC,EAAe,EAC1B,CAAE,SAAAgE,CAAS,EAAIzB,EAAe,CAAC,CAAE,KAAM,CAAE,SAAAyB,CAAS,CAAE,KAAO,CAAE,SAAAA,CAAS,GAAI3C,EAAY,EAEtFsM,EAAmBrM,GAAe0C,EAAS,MAAM,EAEjD4J,EAAgB,IAAM,CACxB,GAAID,EAAiB,UAAY3J,EAAS,OAAQ,CAC9C,GAAM,CAAE,SAAAA,CAAS,EAAIU,EAAM,SAAS,EAAE,KACtCC,EAAcE,EAAU8I,EAAiB,QAAS3J,EAAS,MAAM,CAAC,EAClE2J,EAAiB,QAAU3J,EAAS,OAEpCjE,EAASoF,EAAgB,CAAE,GAAGnB,EAAU,OAAQA,EAAS,MAAO,CAAC,CAAC,CACtE,CACJ,EAEM6J,EAAcjM,GAAiB,CACjC,GAAM,CAAE,SAAAoC,CAAS,EAAIU,EAAM,SAAS,EAAE,KAClC9C,IAAS,QACTkM,GAAwB,CAAC,EACzBnJ,EAAcE,EAAUb,EAAS,OAAQ,CAAC,CAAC,IAG3CW,EAAcE,EAAUb,EAAS,OAAQ,GAAG,CAAC,EAC7C8J,GAAwB,GAAG,EAGnC,EAEA,OACI,oBAAC,OAAI,UAAW,qEACX,CAAC1K,iBAAsC,GACpC,oBAAC,SACG,UAAWwK,EACX,KAAK,QACL,IAAI,IACJ,IAAI,MACJ,MAAO5J,EAAS,OAChB,SAAWlB,GAAUgL,GAAwB,CAAChL,EAAM,OAAO,KAAK,EAChE,UAAU,mCACV,MAAO,CAAE,WAAY,mCAAmCkB,EAAS,MAAM,6BAA8B,EACzG,EAEJ,oBAAC,OAAI,UAAU,uCACX,oBAAC7C,GAAA,CACG,IAAKiC,YAAiC,EAAI3B,EAAO,OAASA,EAAO,KACjE,IAAK2B,YAAiC,EAAI,cAAgB,YAC1D,UAAW,4CACX,MAAO,GACP,OAAQ,GACR,QAAS,IAAOA,YAAiC,EAAIyK,EAAW,MAAM,EAAIA,EAAW,QAAQ,EAC7F,cAAgB/K,GAAeA,EAAM,gBAAgB,EACrD,YAAa,IAAM,CAACM,iBAAsC,GAAKgK,EAAe,EAAI,EAClF,aAAc,IAAM,CAAChK,iBAAsC,GAAKgK,EAAe,EAAK,EACxF,EACCD,GACG,oBAACF,EAAA,CACG,UAAU,YACV,MAAO,GAAG7J,YAAiC,EAAI,kCAAW,iCAAQ,GACtE,CAER,CACJ,CAER,EAEO2K,GAAQL,GClFfjO,IAAA,OAAS,QAAAgH,GAAM,aAAA9G,GAAW,UAAA2B,GAAQ,YAAAF,OAAgB,QAClD,OAAS,gBAAAC,OAAoB,cCD7B5B,IAAA,OAAqB,cAAAuO,GAAY,aAAArO,GAAW,YAAAyB,OAAgB,QAC5D,OAAS,gBAAA6M,OAAoB,YAC7B,OAAS,gBAAA5M,OAAoB,cAC7B,OAAO6M,OAAa,eAMpB,IAAMC,GAAYD,GAAQ,IAAM,OAAO,yBAAiC,CAAC,EAEnEE,GAAUJ,GACZ,CACI,CACI,SAAAK,EACA,OAAAC,EACA,QAAAC,EACA,KAAA3M,EACA,WAAA4M,EACA,iBAAAC,EACA,OAAAC,EACA,iBAAAC,EACA,aAAAC,EAAe,GACf,aAAA1C,EACA,SAAA2C,EACA,YAAAC,EAAc,GACd,aAAAC,EACA,gBAAAC,EACA,sBAAAC,EAAwB,GACxB,UAAAC,EACA,UAAAC,EAAY,GACZ,eAAAC,EAAiB,GACjB,cAAAC,EAAgB,GAChB,WAAAC,EACJ,EACAC,KACC,CACD,GAAM,CAACC,GAAaC,EAAc,EAAIrO,GAAkBkN,CAAO,EAEzD,CAACoB,EAAWC,EAAY,EAAIvO,GAAiB,CAAC,EAC9C,CAACwO,EAAsBC,CAAuB,EAAIzO,GAAiB,CAAC,EACpE,CAAC0O,GAAiBC,EAAkB,EAAI3O,GAAiB,CAAC,EAE1D,CAAE,qBAAAsB,CAAqB,EAAIH,EAAe,CAAC,CAAE,UAAW,CAAE,qBAAAG,CAAqB,CAAE,KAAO,CAAE,qBAAAA,CAAqB,GAAIrB,EAAY,EAErI1B,GAAU,IAAM,CACZ,IAAI4G,EAEJ,OAAI+H,EACAmB,GAAe,EAAI,EAEnBlJ,EAAU,WAAW,IAAM,CACvBgI,EAAQ,EAAK,EACbsB,EAAwB,CAAC,EACzBJ,GAAe,EAAK,CACxB,EAAG,GAAG,EAGH,IAAM,aAAalJ,CAAO,CACrC,EAAG,CAAC+H,CAAM,CAAC,EAEX3O,GAAU,IAAM,CACRyD,qBAA0C,GAAKkL,GAAQqB,GAAa,OAAO,YAAcjN,EAAqB,MAAM,CAC5H,EAAG,CAAC4L,CAAM,CAAC,EAEX,IAAM9J,GAAmB1B,GAAe,CAChCA,EAAM,QAAQ,CAAC,EAAE,SAAWJ,EAAqB,IAAKmN,EAAwB,OAAO,YAAc/M,EAAM,QAAQ,CAAC,EAAE,OAAO,EAC1H+M,EAAwB,OAAO,YAAcnN,EAAqB,GAAG,EAC1EqN,UAAoC,CACxC,EAEMC,GAAiB,IAAM,CACrBJ,IAAyB,IACrBA,EAAuBF,EACnBE,EAAuBF,GAAa,OAAO,YAAchN,EAAqB,IAAMgN,GAAa,GACjGG,EAAwB,OAAO,YAAcnN,EAAqB,GAAG,EACrEqN,UAAoC,IAEpCF,EAAwB,CAAC,EACzB,WAAW,IAAME,GAAmB,CAAC,EAAG,GAAG,IAG3CH,EAAuBF,EAAY,EAAGG,EAAwBH,CAAS,GAEvEG,EAAwB,CAAC,EACzBF,GAAa,CAAC,EACdpB,EAAQ,GAEZwB,GAAmB,CAAC,GAGhC,EAEME,GACF,wCACKtB,GACG,oBAAC,OACG,UAAW,4GAA4GL,EAAS,kBAAoB,kBAChJ,GACJ,MAAO,CAAE,cAAqC,EAClD,EAEJ,oBAAC,OACG,UAAW,GAAG1M,IAAS,SACnB,2GACA,IAAI6M,CAAgB,GACxB,MAAO,CAAE,OAAQG,GAAgB,CAACQ,EAAiBU,UAAwC,GAE3F,oBAAC,OACG,UAAW;AAAA,0BACTlB,GAAgB,WAAW;AAAA,0BAC3BM,IAEQ,OAAO,WAAa,KAAOtN,IAAS,QAChC0M,EACI,kBACA,mBACJA,EACI,oBACA,uBACd;AAAA,0BACFlL,yBAA8C,EACtC,yIACA,kBACN;AAAA,0BACFxB,IAAS,SAAW,0DAA0D;AAAA,0BAC9E4M,CAAU;AAAA,0BAEZ,MAAO,CACH,UAAWtC,EACL,QACA0D,GAEAF,IAEAtM,qBAA0C,EAC1C,EACA,IACN,eACA,GAAGsL,CACP,EACA,IAAKa,IAEL,wCACKV,GACG,oBAAC,OACG,YAAaI,EAAwBzK,GAAkB,IAAM,CAAE,EAC/D,kBAAmByK,EAAwBe,GAAiB,IAAM,CAAE,GAEnEf,GACG,oBAAC,OAAI,UAAU,6HAA6H,EAE/IJ,GACG,oBAAC,OACG,UAAW,oFAAoFG,CAAe,IAE7GD,GAGG,oBAAC,OAAI,UAAU,2DACX,oBAAC,KAAE,UAAU,gEAAgED,CAAY,EACxFO,GACG,oBAAClB,GAAA,CACG,UAAW,kEACX,QAASI,EACb,CAER,CAER,CAER,EAEJ,wCAAGe,EAAW,EACd,oBAAC,OACG,UAAW,0CAA0C,CAACH,GAAa,cAAc,GACjF,YAAcrM,GAAsCA,EAAM,gBAAgB,GAEzEuL,CACL,CACJ,CACJ,CACJ,CACJ,EAGJ,OACI,wCACKmB,IACG,wCACK5N,IAAS,QACNqM,GAAa,wCAAGgC,EAAQ,EAAK,SAAS,eAAe,+BAA+B,CAAE,EAEtF,oBAAC,WAAKA,EAAQ,CAEtB,CAER,CAER,CACJ,EAEA7B,GAAQ,YAAc,UAEtB,IAAO8B,EAAQ9B,GDxMf,OAAOjN,OAAW,oBEJlB1B,IAAA,OAAS,gBAAA4B,OAAoB,cAC7B,OAAS,QAAAoF,GAAM,UAAAnF,GAAQ,YAAAF,OAAgB,QASvC,OAAOD,OAAW,oBCVlB1B,IAAA,OAAiC,aAAAE,OAAiB,QAElD,IAAMwQ,GAAoB,CAACZ,EAAkCa,IAA4D,CACrHzQ,GAAU,IAAM,CACZ,IAAM0Q,EAAYvN,GAAe,CAEzB,CAACyM,EAAI,SAAWA,EAAI,QAAQ,SAASzM,EAAM,MAAM,GACrDsN,EAAQtN,CAAK,CACjB,EACA,gBAAS,iBAAiB,YAAauN,CAAQ,EAC/C,SAAS,iBAAiB,aAAcA,CAAQ,EACzC,IAAM,CACT,SAAS,oBAAoB,YAAaA,CAAQ,EAClD,SAAS,oBAAoB,aAAcA,CAAQ,CACvD,CACJ,EAAG,CAACd,EAAKa,CAAO,CAAC,CACrB,EAEOE,EAAQH,GDDf,IAAMI,GAAgB,CAAC,CAAE,WAAAC,EAAY,sBAAAC,CAAsB,IAAqB,CAC5E,IAAM1Q,EAAWC,EAAe,EAC5B,CAAE,cAAA0Q,CAAc,EAAInO,EACpB,CAAC,CAAE,WAAY,CAAE,cAAAmO,EAAe,cAAAC,EAAe,YAAAC,EAAa,eAAAnO,CAAe,CAAE,KAAO,CAChF,cAAAiO,EACA,cAAAC,EACA,YAAAC,EACA,eAAAnO,CACJ,GACApB,EACJ,EACM,CAAE,SAAA2C,CAAS,EAAIzB,EAAe,CAAC,CAAE,KAAM,CAAE,SAAAyB,CAAS,CAAE,KAAO,CAAE,SAAAA,CAAS,GAAI3C,EAAY,EACtF,CAAE,qBAAAwP,CAAqB,EAAItO,EAAe,CAAC,CAAE,SAAU,CAAE,qBAAAsO,CAAqB,CAAE,KAAO,CAAE,qBAAAA,CAAqB,GAAIxP,EAAY,EACpIkB,EAAe,CAAC,CAAE,UAAW,CAAE,OAAAI,EAAQ,qBAAAD,CAAqB,CAAE,KAAO,CAAE,OAAAC,EAAQ,qBAAAD,CAAqB,GAAIrB,EAAY,EAEpH,GAAM,CAAC8L,EAAaC,CAAc,EAAIhM,GAAkB,EAAK,EAE7DsP,EAAgB,CAAC,GAAI,GAAGA,CAAa,EAErC,IAAMI,EAA4B,CAACC,EAAeC,IAC1C5N,iBAAsC,GAAK4N,IAAiB,GAAW,GAC/D,CAAC5N,iBAAsC,GAAKY,EAAS,UAAY+M,EAG3EE,EAAmB3P,GAAY,IAAI,EAEzCgP,EAAkBW,EAAkB,IAAM,CAClCJ,GAAsB9Q,EAASmR,EAAwB,EAAK,CAAC,CACrE,CAAC,EAED,IAAMC,EACF,oBAAC,OAAI,mBAAmC,UAAU,6CAC9C,oBAAC,MAAG,UAAU,uBACTT,EAAc,IAAI,CAACM,EAAsBD,IACtC,oBAAC,MACG,IAAKA,EACL,UAAW,oIAAoID,EAA0BC,EAAQ,EAAGC,CAAY,GAAK,yCACjM,GACJ,QAASF,EAA0BC,EAAQ,EAAGC,CAAY,EAAI,IAAM,CAAE,EAAI,IAAM,CAC5ErM,EAAcyM,GAAwBJ,IAAiB,GAAK,OAAS,GAAGA,CAAY,GAAG,CAAC,EACxFjR,EAASgD,EAAkB,EAAK,CAAC,EACjChD,EAASsR,EAAkB,EAAK,CAAC,EACjCtR,EAASmR,EAAwB,EAAK,CAAC,EACvCnR,EAASoF,EAAgB,CAAE,GAAGnB,EAAU,QAASgN,IAAiB,GAAK,GAAKD,EAAQ,CAAE,CAAC,CAAC,EACpFP,GAAYA,QAA+B,CACnD,GAEC,CAACpN,iBAAsC,GAAK0N,EAA0BC,EAAQ,EAAGC,CAAY,GAC1F,oBAAC,OAAI,UAAU,+BACX,oBAAC7P,GAAA,CACG,IAAKM,EAAO,KACZ,IAAI,GACJ,MAAO,GACP,OAAQ,EACZ,CACJ,EAEH2B,iBAAsC,GACnC,oBAAC,OAAI,UAAW,0EAA0E0N,EAA0BC,EAAQ,EAAGC,CAAY,GAAK,mBAAmB,iBAC9JF,EAA0BC,EAAQ,EAAGC,CAAY,GAAK,oBAAC,OAAI,UAAU,oDAAmD,CAC7H,EAEJ,oBAAC,QAAK,UAAW,6BAA6B5N,iBAAsC,EAAI,eAAiB,cAAc,IAClH4N,IAAiB,GACd,oBAAC,YACG,oBAAC,QAAK,UAAU,iCAAgC,uCAAO,EACvD,oBAAC,QAAK,UAAU,sDAAqD,gIAA0B,CACnG,EACA,GAAGA,CAAY,GACvB,CACJ,CACH,CACL,CACJ,EAGJ,OACI,wCACKP,EACG,oBAAC,OAAI,UAAU,uCACX,oBAACtP,GAAA,CACG,IAAKM,EAAO,gBACZ,IAAI,aACJ,MAAO,GACP,OAAQ,GACR,QAAS,IAAM1B,EAASmR,EAAwB,EAAI,CAAC,EACrD,YAAa,IAAM,CAAC9N,iBAAsC,GAAK,CAACA,4BAAiD,GAAKgK,EAAe,EAAI,EACzI,aAAc,IAAM,CAAChK,iBAAsC,GAAKgK,EAAe,EAAK,EACpF,UAAU,oBACd,EACCD,GACG,oBAACF,EAAA,CACG,MAAM,oDACV,EAEJ,oBAACiD,EAAA,CACG,WAAY,+DAA+D9M,iBAAsC,EAAI,gEAAkE,yDAAyD,IAAIA,yBAA8C,GAAK,sCAAsC,IAAIA,0BAA+C,GAAK,4BAA4B,GACja,OAAQyN,EACR,QAAS,IAAM9Q,EAASmR,EAAwB,EAAK,CAAC,EACtD,KAAM9N,iBAAsC,EAAI,QAAU,UAC1D,iBAAkBA,yBAA8C,EAChE,IAAK6N,GAEJE,CACL,CACJ,EAEA,wCAAGA,CAAqB,CAGhC,CAER,EAEOG,GAAQ7K,GAAK8J,EAAa,EEnIjC9Q,IAAA,OAAS,aAAAE,GAAW,UAAA2B,GAAQ,YAAAF,OAAgB,QAC5C,OAAS,gBAAAC,OAAoB,cAW7B,OAAOF,OAAW,oBAMlB,IAAMoQ,GAAS,CAAC,GAAK,IAAM,EAAG,KAAM,IAAK,KAAM,CAAC,EAE1CC,GAAQ,CAAC,CAAC,WAAAhB,EAAY,cAAAiB,CAAa,IAAc,CACnD,IAAM1R,EAAWC,EAAe,EAChCuC,EAAe,CAAC,CAAE,WAAY,CAAE,eAAAE,CAAe,CAAE,KAAO,CAAE,eAAAA,CAAe,GAAIpB,EAAY,EACzFkB,EAAe,CAAC,CAAE,UAAW,CAAE,qBAAAG,EAAsB,OAAAC,CAAO,CAAE,KAAO,CAAE,qBAAAD,EAAsB,OAAAC,CAAO,GAAItB,EAAY,EACpH,GAAM,CAAE,aAAAqQ,CAAa,EAAInP,EAAe,CAAC,CAAE,SAAU,CAAE,aAAAmP,CAAa,CAAE,KAAO,CAAE,aAAAA,CAAa,GAAIrQ,EAAY,EACtG,CAAE,SAAA2C,CAAS,EAAIzB,EAAe,CAAC,CAAE,KAAM,CAAE,SAAAyB,CAAS,CAAE,KAAO,CAAE,SAAAA,CAAS,GAAI3C,EAAY,EAEtFsQ,EAAWrQ,GAAY,IAAI,EAE3B,CAAC6L,EAAaC,CAAc,EAAIhM,GAAkB,EAAK,EAE7DkP,EAAkBqB,EAAU,IAAM,CAC1BD,GAAc3R,EAAS6R,EAAgB,EAAK,CAAC,CACrD,CAAC,EAEDjS,GAAU,IAAM,CACRqD,EAAS,IAAGA,EAAS,EAAE,aAAegB,EAAS,MACvD,EAAG,CAAC,CAAC,EAEL,IAAM6N,EACF,oBAAC,OAAI,WAA2B,UAAU,6CACtC,oBAAC,MAAG,UAAU,uBACTN,GAAO,IAAI,CAACO,EAAef,IACxB,oBAAC,MACG,IAAKA,EACL,UAAW,oIAAoI/M,EAAS,QAAU8N,GAAS,yCAAyC,GACpN,QAAS9N,EAAS,QAAU8N,EAAQ,IAAM,CAAE,EAAI,IAAM,CAC7C1O,kBAAuC,GAAGuB,EAAcoN,GAAeD,CAAK,CAAC,EAClF/R,EAASgD,EAAkB,EAAK,CAAC,EACjChD,EAASsR,EAAkB,EAAK,CAAC,EACjCtR,EAAS6R,EAAgB,EAAK,CAAC,EAC/B7R,EAASoF,EAAgB,CAAE,GAAGnB,EAAU,MAAA8N,CAAM,CAAC,CAAC,EAChD9O,EAAS,EAAE,aAAe8O,EACtBtB,GAAYA,QAA+B,CACnD,GAEC,CAACpN,iBAAsC,GAAKY,EAAS,QAAU8N,GAC5D,oBAAC,OAAI,UAAU,+BACX,oBAAC3Q,GAAA,CACG,IAAKM,EAAO,KACZ,IAAI,GACJ,MAAO,GACP,OAAQ,EACZ,CACJ,EAEH2B,iBAAsC,GACnC,oBAAC,OAAI,UAAW,0EAA0EY,EAAS,QAAU8N,GAAS,mBAAmB,iBACpI9N,EAAS,QAAU8N,GAAS,oBAAC,OAAI,UAAU,oDAAoD,CACpG,EAEJ,oBAAC,KAAE,UAAU,2EAA2EA,CAAM,CAClG,CACH,CACL,CACJ,EAGJ,OACI,wCACKL,EACG,oBAAC,OAAI,UAAU,uCACX,oBAACtQ,GAAA,CACG,IAAKM,EAAO,OACZ,IAAI,aACJ,MAAO,GACP,OAAQ,GACR,QAAS,IAAM1B,EAAS6R,EAAgB,EAAI,CAAC,EAC7C,YAAa,IAAM,CAACxO,iBAAsC,GAAK,CAACA,oBAAyC,GAAKgK,EAAe,EAAI,EACjI,aAAc,IAAM,CAAChK,iBAAsC,GAAKgK,EAAe,EAAK,EACpF,UAAU,oBACd,EACCD,GACG,oBAACF,EAAA,CACG,MAAM,2BACV,EAEJ,oBAACiD,EAAA,CACG,WAAY,2CAA2C9M,iBAAsC,EAAI,gEAAkE,0DAA0D,IAAIA,yBAA8C,GAAK,0DAA0D,IAAIA,0BAA+C,GAAK,4BAA4B,GACla,OAAQsO,EACR,QAAS,IAAM3R,EAAS6R,EAAgB,EAAK,CAAC,EAC9C,KAAMxO,iBAAsC,EAAI,QAAU,UAC1D,iBAAkBA,yBAA8C,EAChE,IAAKuO,EACL,SAAUvO,iBAAsC,EAChD,aAAc,uCAAE,EAChB,sBAAuBA,iBAAsC,GAE5DyO,CACL,CACJ,EAEA,wCAAGA,CAAa,CAGxB,CAER,EAEOG,GAAQR,GJzGf,IAAMS,GAAW,IAAM,CACnB,IAAMlS,EAAWC,EAAe,EAChCuC,EAAe,CAAC,CAAE,UAAW,CAAE,OAAAI,CAAO,CAAE,KAAO,CAAE,OAAAA,CAAO,GAAGtB,EAAY,EACvE,GAAM,CAAE,eAAAyH,CAAe,EAAIvG,EAAe,CAAC,CAAE,SAAU,CAAE,eAAAuG,CAAe,CAAE,KAAO,CAAE,eAAAA,CAAe,GAAIzH,EAAY,EAE5G,CAAC6Q,EAAS1B,CAAU,EAAIpP,SAAqC,EAC7D,CAAC+Q,EAAeC,CAAgB,EAAIhR,GAAiB,CAAC,EACtD,CAAC+L,EAAaC,CAAc,EAAIhM,GAAkB,EAAK,EAEvDiR,EAAc/Q,GAAO,IAAI,EAE/B,OAAAgP,EAAkB+B,EAAa,IAAM,CACjCtS,EAASsR,EAAkB,EAAK,CAAC,EACjC,WAAW,IAAMb,QAA+B,EAAG,GAAG,CAC1D,CAAC,EAED7Q,GAAU,IAAM,CACZyS,EAAiB,SAAS,eAAeF,CAAO,GAAG,YAAa,CACpE,EAAG,CAACA,CAAO,CAAC,EAGR,oBAAC,OAAI,UAAW,kBAAkB9O,eAAoC,GAAK,aAAa,GAAI,IAAKiP,GAC7F,oBAAC,OACG,UAAW,wDACX,QAAS,IAAMtS,EAASsR,EAAkB,CAACvI,CAAc,CAAC,EAC1D,YAAa,IAAM,CAAC1F,iBAAsC,GAAK,CAACA,sBAA2C,GAAKgK,EAAe,EAAI,EACnI,aAAc,IAAM,CAAChK,iBAAsC,GAAKgK,EAAe,EAAK,GAEpF,oBAACjM,GAAA,CACG,IAAKM,EAAO,SACZ,IAAI,GACJ,MAAO,GACP,OAAQ,GACZ,EACC0L,GAAe,oBAACF,EAAA,CAAmB,MAAM,6CAAU,CACxD,EACA,oBAACiD,EAAA,CACG,WAAY,2CAA2C9M,iBAAsC,EAAI,gEAAkE,0DAA0D,IAAIA,yBAA8C,GAAK,0DAA0D,IAAIA,0BAA+C,GAAK,4BAA4B,GACla,OAAQ,CAAC,UAAW+O,EAAgB,GAAG,EACvC,OAAQrJ,EACR,QAAS,IAAM/I,EAASsR,EAAkB,EAAK,CAAC,EAChD,KAAMjO,iBAAsC,EAAI,QAAU,UAC1D,iBAAkBA,yBAA8C,EAChE,IAAKiP,EACL,SAAUjP,iBAAsC,EAChD,aAAc,uCAAE,EAChB,sBAAuBA,iBAAsC,GAE7D,wCACK8O,YACG,oBAAC,OAAI,UAA0B,UAAU,2FACpC,CAAC9O,kBAAuC,GACrC,wCACI,oBAAC,OAAI,UAAU,0DAA0D,QAAS,IAAMoN,iBAAwC,GAC5H,oBAACrP,GAAA,CACG,IAAKM,EAAO,eACZ,IAAI,GACJ,MAAO,GACP,OAAQ,GACZ,EACA,oBAAC,KAAE,UAAW,4CAA4C,mDAAS,EACnE,oBAACN,GAAA,CACG,IAAKM,EAAO,YACZ,IAAI,GACJ,MAAO,GACP,OAAQ,GACZ,CACJ,CACJ,EAEJ,oBAAC,OAAI,UAAU,0DAA0D,QAAS,IAAM+O,SAAgC,GACpH,oBAACrP,GAAA,CACG,IAAKM,EAAO,MACZ,IAAI,GACJ,MAAO,GACP,OAAQ,GACZ,EACA,oBAAC,KAAE,UAAW,4CAA4C,0BAAI,EAC9D,oBAACN,GAAA,CACG,IAAKM,EAAO,YACZ,IAAI,GACJ,MAAO,GACP,OAAQ,GACZ,CACJ,CACJ,EAEHyQ,qBAA6C,oBAACZ,GAAA,CAAc,WAAYd,EAAY,EACpF0B,aAAqC,oBAACF,GAAA,CAAM,WAAYxB,EAAY,CACzE,CACJ,CACJ,CAER,EAEO8B,GAAQ7L,GAAKwL,EAAQ,EK7G5BxS,IAAA,OAAS,gBAAA4B,OAAoB,cAM7B,IAAMkR,GAAc,IAAM,CACtB,GAAM,CAAE,SAAAjQ,EAAU,YAAAE,CAAY,EAAID,EAC9B,CAAC,CAAE,WAAY,CAAE,SAAAD,EAAU,YAAAE,CAAY,CAAE,KAAO,CAAE,SAAAF,EAAU,YAAAE,CAAY,GACxEnB,EACJ,EACA,OAAAkB,EACI,CAAC,CAAE,UAAW,CAAE,qBAAAG,EAAsB,OAAAC,CAAO,CAAE,KAAO,CAAE,qBAAAD,EAAsB,OAAAC,CAAO,GACrFtB,EACJ,EAGI,wCACI,oBAAC,OACG,UAAW,wFAAwF,CAAC+B,yBAA8C,GAAK,SAAS,IAEhK,oBAAC,YAAMsE,EAAapF,CAAQ,CAAE,EAC9B,oBAAC,YAAK,KAAG,EACT,oBAAC,YAAMoF,EAAalF,CAAW,CAAE,CACrC,CACJ,CAER,EAEOgQ,GAAQD,GC7Bf9S,IAAA,OAAO0B,OAAW,oBAIlB,IAAMsR,GAAS,IAGP,oBAACtR,GAAA,CACG,IAAKM,EAAO,OACZ,IAAI,cACJ,MAAO,GACP,OAAQ,GACR,QAAS,IAAMgE,GAAW,MAAM,EACpC,EAIDiN,GAAQD,GXHf,IAAME,GAAa,KACfpQ,EAAe,CAAC,CAAE,WAAY,CAAE,aAAA2J,EAAc,eAAAzJ,CAAe,CAAE,KAAO,CAAE,aAAAyJ,EAAc,eAAAzJ,CAAe,GAAIpB,EAAY,EACrHkB,EACI,CAAC,CAAE,UAAW,CAAE,qBAAAG,EAAsB,OAAAC,EAAQ,kBAAA8J,CAAkB,CAAE,KAAO,CAAE,qBAAA/J,EAAsB,OAAAC,EAAQ,kBAAA8J,CAAkB,GAC3HpL,EACJ,EAGI,oBAAC,OAAI,GAAG,qBAAqB,UAAW,8DACpC,oBAAC,OACG,UAAW,2BACP+B,wBAA6C,GAAK,CAACA,gBAAqC,EAAI,WAAa,UAC7G,IAEC,CAACA,kBAAuC,GAAK,oBAACmK,GAAA,IAAW,EACzDnK,0BAA+C,GAAK,oBAACsP,GAAA,IAAO,EAC5DtP,wBAA6C,GAAK,oBAACqK,GAAA,IAAiB,EACpErK,mBAAwC,GAAK,oBAACkP,GAAA,IAAS,EACvDlP,gBAAqC,GAAK,CAACA,kBAAuC,GAAK,oBAACkO,GAAA,CAAc,sBAAuB,GAAM,GAClIlO,gBAAqC,GAAKA,kBAAuC,IAAM,oBAAC4O,GAAA,CAAM,cAAe,GAAM,CACzH,EACA,oBAAC,OAAI,UAAW,2BAA2B5O,gBAAqC,EAAI,WAAa,UAAU,IACtGA,yBAA8C,GAAK,oBAACoP,GAAA,IAAY,EAChE,CAACpP,SAA8B,GAAK,oBAAC2K,GAAA,IAAY,CACtD,CACJ,GAID6E,GAAQnM,GAAKkM,EAAU,EY3C9BlT,IAAA,OAAO0B,OAAW,oBAClB,OAAS,aAAAxB,GAAW,YAAAyB,OAAgB,QAKpC,OAAS,gBAAAC,OAAoB,cAK7B,IAAMwR,GAAgB,IAAM,CACxB,IAAM9S,EAAWC,EAAe,EAC1B,CAAE,UAAA8S,CAAU,EAAIvQ,EAAe,CAAC,CAAE,WAAY,CAAE,UAAAuQ,CAAU,CAAE,KAAO,CAAE,UAAAA,CAAU,GAAIzR,EAAY,EAE/F,CAAC0R,EAAYC,CAAa,EAAI5R,GAAkB,EAAK,EAE3D,OAAAzB,GAAU,IAAM,CACZ,IAAI4G,EAAe,KACnB,oBAAaA,CAAO,EAChBnD,aAAkC,GAClCmD,EAAU,WAAW,IAAM,CACL7B,EAAM,SAAS,EAAE,WAAW,WAC/BsO,EAAc,EAAI,CACrC,EAAEC,EAAc,EAChB1M,EAAU,WAAW,IAAM,CACvByM,EAAc,EAAK,EACnBjT,EAASgD,EAAkB,EAAK,CAAC,CACrC,EAAGmQ,EAAoB,IAEvB,aAAa3M,CAAO,EACpByM,EAAc,EAAK,EACnBjT,EAASgD,EAAkB,EAAK,CAAC,GAG9B,IAAM,aAAawD,CAAO,CACrC,EAAG,CAACuM,CAAS,CAAC,EAGV,oBAAC,OAAI,UAAW,8GAA8GC,EAAa,kBAAoB,kBAAkB,IAAI3P,kBAAuC,EAAI,YAAc,WAAW,IACrP,oBAAC,OAAI,UAAU,oGACX,oBAACjC,GAAA,CACG,IAAKM,EAAO,WACZ,IAAI,cACJ,MAAO,GACP,OAAQ,GACZ,EACA,oBAAC,KAAE,UAAU,sCAAqC,6LAAqC,CAC3F,CACJ,CAER,EAEO0R,GAAQN,GhB3Cf,IAAMO,GAAS,KACX7Q,EAAe,CAAC,CAAE,WAAY,CAAE,KAAAqD,EAAM,aAAAsG,EAAc,UAAA4G,EAAW,eAAAjN,CAAe,CAAE,KAAO,CAAE,KAAAD,EAAM,aAAAsG,EAAc,UAAA4G,EAAW,eAAAjN,CAAe,GAAIxE,EAAY,EAEnJ,oBAAC,OAAI,GAAG,SAAS,UAAU,cAAc,MAAO,CAAE,QAAsB,GACpE,wCACK,CAAC+B,UAA+B,GAC7B,wCACI,oBAAC,OACG,UAAW,uBAAuBA,yBAA8C,GAAK,UAAU,4EAA4EA,oBAAyC,GAAK,CAACA,aAAkC,EACtP,yCACA,yCACF,GACJ,MAAO,CAAE,YAAa0D,EAAc,EAAG,aAAcA,EAAc,CAAE,GAEpE,CAAC1D,yBAA8C,GAAK,oBAACoP,GAAA,IAAY,EACjEpP,mBAAwC,GAAK,oBAAC0J,GAAA,IAAY,EAC3D,oBAAC8F,GAAA,IAAY,CACjB,CACJ,EAEJ,oBAACO,GAAA,IAAc,CACnB,CACJ,GAIDE,GAAQD,GiBpCf3T,IAAA,OAAOyO,OAAa,eAIpB,IAAMoF,GAAiBpF,GAAQ,IAAM,OAAO,8BAAkB,CAAC,EACzDqF,GAAoBrF,GAAQ,IAAM,OAAO,iCAAqB,CAAC,EAE/DsF,GAAW,IACN,wCAAGpQ,kBAAuC,EAAI,oBAACkQ,GAAA,IAAe,EAAK,oBAACC,GAAA,IAAkB,CAAI,EAG9FE,GAAQD,GCXf/T,IAAA,OAAS,aAAAE,OAAiB,QAG1B,OAAS,gBAAA0B,OAAoB,cAO7B,IAAMqS,GAAgB,IAAM,CACxB,IAAM3T,EAAWC,EAAe,EAChCuC,EAAe,CAAC,CAAE,UAAW,CAAE,OAAAI,CAAO,CAAE,KAAO,CAAE,OAAAA,CAAO,GAAItB,EAAY,EAExE1B,GAAU,IAAM,CACZ,IAAMgU,EAAyB,IAAM,CACZ,SAAS,kBAEZ5T,EAAS6T,GAAgB,EAAI,CAAC,GAE5C7T,EAAS6T,GAAgB,EAAK,CAAC,EAC/BC,GAA2B,EAC3BlP,EAAcmP,GAAc,gBAAgB,CAAC,EAErD,EAEI,SAAS,mBACT,SAAS,iBAAiB,yBAA0BH,EAAwB,EAAK,EACjF,SAAS,iBAAiB,sBAAuBA,EAAwB,EAAK,EAC9E,SAAS,iBAAiB,mBAAoBA,EAAwB,EAAK,EAC3E,SAAS,iBAAiB,qBAAsBA,EAAwB,EAAK,EASrF,EAAG,CAAC,CAAC,CACT,EAEOI,GAAQL,GC1CfjU,IAAA,OAAS,aAAAE,GAAW,UAAA2B,OAAc,QAGlC,OAAS,gBAAAD,OAAoB,cAK7B,IAAM2S,GAAoB,CAACnS,EAA+BC,IAAiC,CACvF,IAAM/B,EAAWC,EAAe,EAC1B,CAAE,eAAA6F,CAAe,EAAItD,EAAe,CAAC,CAAE,WAAY,CAAE,eAAAsD,CAAe,CAAE,KAAO,CAAE,eAAAA,CAAe,GAAIxE,EAAY,EAE9GuB,EAAatB,GAAY,IAAI,EAC7B2S,EAA0B3S,GAAgBO,CAAoB,EAC9DqS,EAAyB5S,GAAgBQ,CAAmB,EAElEnC,GAAU,IAAM,CACZsU,EAAwB,QAAUpS,CACtC,EAAG,CAACA,CAAoB,CAAC,EAEzBlC,GAAU,IAAM,CACZuU,EAAuB,QAAUpS,CACrC,EAAG,CAACA,CAAmB,CAAC,EAExBnC,GAAU,IAAM,CACZ,IAAIwU,EAAyB,GAEvB9L,EAAqBvF,GAAe,CACtC,GAAM,CAAE,eAAA+C,EAAgB,QAAAuO,CAAQ,EAAI1P,EAAM,SAAS,EAAE,WACjD0P,EAASrU,EAASgD,EAAkB,EAAI,CAAC,EACpCD,EAAM,cAAgB,UAC3B,aAAaF,EAAW,OAAO,EAC1BiD,EAED,CAAC,aAAc,eAAgB,qBAAsB,gBAAiB,iBAAkB,gBAAiB,cAAc,EAAE,SAAS/C,EAAM,OAAO,EAAE,IAEjJqR,EAAyB,IAJRpU,EAASgD,EAAkB,EAAI,CAAC,EAKrDH,EAAW,QAAU,WAAW,IAAM,CAClC,GAAM,CAAE,eAAAkG,EAAgB,mBAAAC,EAAoB,aAAA2I,EAAc,qBAAAb,CAAqB,EAAInM,EAAM,SAAS,EAAE,SAC9F,CAAE,KAAAsB,CAAK,EAAItB,EAAM,SAAS,EAAE,WAC9B,CAACoE,GAAkB,CAACC,GAAsB,CAAC2I,GAAgB,CAACb,GAAwB7K,GAAQmO,GAAwBpU,EAASgD,EAAkB,EAAK,CAAC,CAC7J,EAAGkG,CAAkB,EAE7B,EAEM/F,EAAoBJ,GAAe,CACrC,WAAW,IAAM,CACb,GAAM,CAAE,eAAA+C,EAAgB,QAAAuO,EAAS,UAAA9N,CAAU,EAAI5B,EAAM,SAAS,EAAE,WAEhE,GADA,aAAa9B,EAAW,OAAO,EAC3BwR,EAAS,OAAOrU,EAASgD,EAAkB,EAAI,CAAC,EAChDsR,GAAc,GAAK,CAAC/N,GAAa,CAAC2N,EAAwB,SAAW,CAACC,EAAuB,UAEzF,CAAC,aAAc,eAAgB,gBAAiB,gBAAiB,cAAc,EAAE,SAASpR,EAAM,OAAO,EAAE,GACzGwB,EAAkBxB,EAAO,gBAAgB,GAEzC/C,EAASgD,EAAkB,CAAC8C,CAAc,CAAC,EAC3CjD,EAAW,QAAU,WAAW,IAAM,CAClC,GAAM,CAAE,eAAAkG,EAAgB,mBAAAC,EAAoB,aAAA2I,EAAc,qBAAAb,CAAqB,EAAInM,EAAM,SAAS,EAAE,SAChG,CAACoE,GAAkB,CAACC,GAAsB,CAAC2I,GAAgB,CAACb,GAAsB9Q,EAASgD,EAAkB,EAAK,CAAC,CAC3H,EAAGkG,CAAkB,GAErBrG,EAAW,QAAU,WAAW,IAAM,CAClC,GAAM,CAAE,eAAAkG,EAAgB,mBAAAC,EAAoB,aAAA2I,EAAc,qBAAAb,CAAqB,EAAInM,EAAM,SAAS,EAAE,SAChG,CAACoE,GAAkB,CAACC,GAAsB,CAAC2I,GAAgB,CAACb,GAAsB9Q,EAASgD,EAAkB,EAAK,CAAC,CAC3H,EAAGkG,CAAkB,EAGjC,EAAG,GAAG,CACV,EAEMzE,EAAkB,IAAM,CAC1B,aAAa5B,EAAW,OAAO,EAC/BA,EAAW,QAAU,WAAW,IAAM,CAClC,GAAM,CAAE,eAAAiD,EAAgB,QAAAuO,CAAQ,EAAI1P,EAAM,SAAS,EAAE,WAC/C,CAAE,eAAAoE,EAAgB,mBAAAC,EAAoB,aAAA2I,EAAc,qBAAAb,CAAqB,EAAInM,EAAM,SAAS,EAAE,SAChG0P,EAASrU,EAASgD,EAAkB,EAAI,CAAC,EACpC,CAAC+F,GAAkB,CAACC,GAAsB,CAAC2I,GAAgB,CAACb,GAAwBhL,GAAkB,CAACuO,GAC5GrU,EAASgD,EAAkB,CAAC8C,CAAc,CAAC,CACnD,EAAGoD,CAAkB,CACzB,EAEA,gBAAS,eAAe,YAAY,EAAG,iBAAiB,aAAc/F,CAAgB,EACtF,SAAS,eAAe,YAAY,EAAG,iBAAiB,YAAasB,CAAe,EACpF,SAAS,eAAe,YAAY,EAAG,iBAAiB,cAAe6D,CAAiB,EAEjF,IAAM,CACT,IAAMiM,EAAY,SAAS,eAAe,YAAY,EAClDA,IACAA,EAAU,oBAAoB,aAAcpR,CAAgB,EAC5DoR,EAAU,oBAAoB,YAAa9P,CAAe,EAC1D8P,EAAU,oBAAoB,cAAejM,CAAiB,EAEtE,CACJ,EAAG,CAACxC,EAAgBhE,EAAsBC,CAAmB,CAAC,CAClE,EAEOyS,GAAQP,G9BrEf,IAAMQ,GAAY,IAAM,CAEpB,GAAM,CAAC3S,EAAsBE,CAAuB,EAAIX,GAAkB,EAAK,EACzE,CAACU,EAAqBE,CAAsB,EAAIZ,GAAkB,EAAK,EAEvErB,EAAWC,EAAe,EAE1B,CAAE,QAAAsF,CAAQ,EAAI/C,EAChB,CAAC,CAAE,UAAW,CAAE,QAAA+C,EAAS,OAAA3C,EAAQ,qBAAAD,CAAqB,CAAE,KAAO,CAC3D,QAAA4C,EACA,OAAA3C,EACA,qBAAAD,CACJ,GACArB,EACJ,EAEM,CAAE,UAAAiF,EAAW,eAAA7D,EAAgB,aAAAyJ,CAAa,EAAI3J,EAChD,CAAC,CAAE,WAAY,CAAE,UAAA+D,EAAW,eAAA7D,EAAgB,aAAAyJ,EAAc,UAAA4G,CAAU,CAAE,KAAO,CACzE,UAAAxM,EACA,eAAA7D,EACA,aAAAyJ,EACA,UAAA4G,CACJ,GACAzR,EACJ,EAEA1B,GAAU,IAAM,CACZ,GAAIqD,EAAS,EAAG,CACZ,IAAIuD,EACEkO,EAAe,IAAM,CAClBrR,kBAAuC,IACxCmD,EAAU,WACN,IAAM,CACFsN,GAA2B,EAC3B9T,EAAS2U,GAAc,EAAI,CAAC,CAChC,EACAL,GAAc,EAAI,EAAI,GAC1B,EAER,EACAI,EAAa,EACb,OAAO,iBAAiB,SAAUA,CAAY,EAC9C,IAAME,EAAY,SAAS,uBAAuB,YAAY,EAAE,CAAC,EACjE,OAAIA,GAAWA,EAAU,iBAAiB,SAAUF,CAAY,EAEzD,IAAM,CACT,OAAO,oBAAoB,SAAUA,CAAY,EAC7CE,GAAWA,EAAU,oBAAoB,SAAUF,CAAY,EACnE,aAAalO,CAAO,CACxB,CACJ,CACJ,EAAG,CAACD,EAAW7D,EAAgByJ,EAAclJ,EAAS,CAAC,CAAC,EAExDrD,GAAU,IAAM,CACZ,IAAM4G,EAAU,WAAW,IAAMsN,GAA2B,EAAG,GAAG,EAElE,MAAO,IAAM,aAAatN,CAAO,CACrC,EAAG,CAAC9D,CAAc,CAAC,EAEnBsR,GAAc,EAEd,IAAMa,EAAqB9R,GAAe,CAClC,CAACM,iBAAsC,GAAKN,EAAM,OAAO,WAAa,SAASuK,GAAiB,CACxG,EAEA,OAAAkH,GAAkB1S,EAAsBC,CAAmB,EAGvD,wCACKsB,kBAAuC,GAAK,oBAAC,OAAI,GAAG,mBAAmB,UAAW,gEAAgE,CAACA,iBAAsC,GAAK,CAACA,gBAAqC,GAAK,oBAAoB,GAAI,EAClQ,oBAAC,OACG,GAAG,aACH,MAAO,CACH,OAAQA,kBAAuC,UAEzCA,gBAAqC,MAEjC,OACd,EACA,QAAUN,GAAUM,qBAA0C,GAAK6C,GAAgBnD,CAAK,EACxF,cAAgBA,GAAsC,CAACM,kBAAuC,GAAKwR,EAAkB9R,CAAK,EAC1H,UAAW,+HAA+H,CAACM,iBAAsC,GAAK,CAACA,gBAAqC,GAAK,oBAAoB,IAAIA,gBAAqC,GAAK,4BAA4B,IAAIA,kBAAuC,EAAI,gIAAkI,uBAAuB,IAAIA,kBAAuC,GAAKA,yBAA8C,GAAK,gCAAgC,IAAI,CAACA,oBAAyC,GAAK,gBAAgB,IAE7sB,oBAAC,OAAI,UAAW,uFAAuF,CAACA,iBAAsC,GAAK,CAACA,gBAAqC,GAAK,oBAAoB,IAAIA,oBAAyC,EAAI,mBAAqB,iBAAiB,GAAI,EAC5SA,cAAmC,GAChC,oBAAC,OAAI,UAAU,6DACX,oBAACjC,GAAA,CAAM,IAAKmE,EAAQ,OAAQ,OAAO,OAAO,IAAI,QAAQ,UAAU,UAAU,UAAW,GAAG,CAAClC,iBAAsC,GAAK,CAACA,gBAAqC,GAAK,mBAAmB,GAAI,CAC1M,EAEHA,kBAAuC,GACpC,oBAAC,OAAI,UAAU,cACX,oBAAC,OAAI,UAAU,oDAAoD,QAAS,IAAMrD,EAAS8U,EAAkB,MAAS,CAAC,GACnH,oBAAC1T,GAAA,CACG,IAAKM,EAAO,YACZ,IAAI,eACJ,MAAO,GACP,OAAQ,GACZ,CACJ,EACA,oBAAC,OAAI,UAAW,0FAA0F2B,oBAAyC,GAAK,CAACA,aAAkC,EACrL,yCACA,yCACF,IAAI,oBAAC8C,GAAA,IAAU,CAAE,EACrB,oBAACiN,GAAA,IAAc,CACnB,EAEH/P,6BAAkD,GAAK,CAACA,gBAAqC,GAAK,oBAACgC,GAAA,IAAsB,EACzHhC,uBAA4C,GACzC,oBAAC,OACG,UAAW,iGACX,MAAO,CACH,OAAQtB,GAAuBD,MACnC,GAEA,oBAAC0B,EAAA,CACG,KAAK,eACL,qBAAsB1B,EACtB,wBAAyBE,EAC7B,EACA,oBAACwB,EAAA,CACG,KAAK,gBACL,oBAAqBzB,EACrB,uBAAwBE,EAC5B,CACJ,EAEJ,oBAACyR,GAAA,IAAS,EACT,CAACrQ,SAA8B,GAAK,CAACA,yBAA8C,GAAK,CAACA,kBAAuC,GAC7H,oBAAC,OACG,GAAG,iBACH,UAAW,uDAAuDA,uBAA4C,GAAK,aAC/G,IAEJ,oBAAC,OAAI,UAAW,8DACXA,cAAmC,GAAK,oBAAC0C,GAAA,IAAO,EAChD1C,YAAiC,GAAK,CAACA,yBAA8C,GAAK,oBAACoD,GAAA,IAAK,EAChGpD,cAAmC,GAAK,oBAACiQ,GAAA,IAAO,CACrD,CACJ,CAER,CACJ,CAER,EAEOyB,GAAQN,GDtKf,IAAMO,GAAe,IAEb,oBAAC,OACD,UAAW,6BAA6B,CAAC3R,iBAAsC,GAAK,CAACA,gBAAqC,GAAK,mBAAmB,IAElJ,oBAAC0R,GAAA,IAAU,CACf,EAIGE,GAAQD,GgChBftV,IAEA,OAAS,gBAAA4B,OAAoB,cCF7B5B,ICAAA,IAAA,OAAS,aAAAE,OAAiB,QAE1B,OAAS,gBAAA0B,OAAoB,cAK7B,IAAM4T,GAAgB,IAAM,CACxB,GAAM,CAAE,OAAAtS,CAAO,EAAIJ,EACf,CAAC,CAAE,UAAW,CAAE,OAAAI,CAAO,CAAE,KAAO,CAAE,OAAAA,CAAO,GACzCtB,EACJ,EACAkB,EAAe,CAAC,CAAE,WAAY,CAAE,QAAA6R,CAAQ,CAAE,KAAO,CAAE,QAAAA,CAAQ,GAAI/S,EAAY,EAE3E1B,GAAU,IAAM,CACRyD,cAAmC,GAAG8R,GAAqB,CACnE,EAAG,CAACvS,EAAO,GAAIA,EAAO,IAAI,CAAC,CAC/B,EAEOwS,GAAQF,GDjBf,IAAMG,GAAa,IAAM,CACrBD,GAAc,CAClB,EAEOE,GAAQD,GENf3V,IAAA,OAAS,aAAAE,OAAiB,QAG1B,OAAS,gBAAA0B,OAAoB,cAM7B,IAAMiU,GAAkB,IAAM,CAC1B/S,EAAe,CAAC,CAAE,UAAW,CAAE,OAAAI,CAAO,CAAE,KAAO,CAAE,OAAAA,CAAO,GAAItB,EAAY,EACxEkB,EAAe,CAAC,CAAE,WAAY,CAAE,eAAAE,CAAe,CAAE,KAAO,CAAE,eAAAA,CAAe,GAAIpB,EAAY,EAEzF1B,GAAU,IAAM,CACZ,GAAM,CAAE,OAAAgD,CAAO,EAAI+B,EAAM,SAAS,EAAE,UAC9B6Q,EAAe,IAAM,CACvB,IAAMC,EAAmB,SAAS,eAAepS,kBAAuC,EAAI,mBAAqB,YAAY,EAC7H,GAAIA,sBAA2C,GAAOoS,GAAoB,CAAC,SAAS,wBAAyB,CACzG,IAAMzV,EAAW2E,EAAM,SACM8Q,EAAiB,sBAAsB,EAAE,IAC3C,EAAGzV,EAAS8U,EAAkB,EAAI,CAAC,EACzD9U,EAAS8U,EAAkB,EAAK,CAAC,CAC1C,CACJ,EACIY,EACJ,OAAIrS,sBAA2C,GAAK,CAAC,SAAS,0BAC1DqS,EAAgB,SAAS,eAAe9S,EAAO,eAAgB,EAC3D8S,GAAeA,EAAc,iBAAiB,SAAUF,CAAY,GAErE,IAAOnS,sBAA2C,GAAKqS,GAAiB,CAAC,SAAS,yBAA4BA,EAAc,oBAAoB,SAAUF,CAAY,CACjL,EAAG,CAAC,CAAC,CACT,EAEOG,GAAQJ,GCjCf7V,IAEA,OAAO0B,OAAW,oBAGlB,IAAMwU,GAAY,IAEV,oBAAC,OAAI,UAAW,4FACZ,oBAAC,OAAI,UAAU,6BACX,oBAACxU,GAAA,CACG,IAAKM,EAAO,SACZ,IAAI,GACJ,MAAO,IACP,OAAQ,GACZ,CACJ,EACA,oBAAC,MAAG,UAAU,sEAAqE,4JAA6B,EAChH,oBAAC,KAAE,UAAU,sDAAqD,8OAA8C,CACpH,EAIDmU,GAAQD,GJVf,IAAME,GAAmB,KACrBtT,EAAe,CAAC,CAAE,UAAW,CAAE,OAAAI,EAAQ,QAAA2C,EAAS,eAAAwQ,EAAgB,eAAAC,CAAe,CAAE,KAAO,CAAC,OAAApT,EAAO,QAAA2C,EAAS,eAAAwQ,EAAgB,eAAAC,CAAc,GAAG1U,EAAa,EAEvJgU,GAAW,EACXW,GAA8B,EAC9BN,GAAgB,EAGZ,wCACKtS,kBAAuC,EACpCA,kBAAuC,EACnC,oBAAC,OACG,UAAW,kCAAkC,CAACA,iBAAsC,GAAK,CAACA,gBAAqC,GAAK,oBAAoB,IAExJ,oBAAC0R,GAAA,IAAU,CACf,EAEA,oBAAC,OAAI,UAAW,6BACZ,oBAACc,GAAA,IAAU,CACf,EAGJ,oBAAC,OAAI,UAAU,sEAAsE,CAE7F,GAIDK,GAAQJ,GlC9Bf,OAAS,gBAAAxU,OAAoB,cAG7B,IAAM6U,GAAc,CAAC,CAAE,OAAAvT,CAAO,IAA2B,CACrDzB,GAAgByB,CAAM,EAEtBJ,EAAe,CAAC,CAAE,WAAY,CAAE,aAAA2J,CAAa,CAAE,KAAO,CAAE,aAAAA,CAAa,GAAI7K,EAAY,EACrFkB,EAAe,CAAC,CAAE,UAAW,CAAE,QAAA4T,EAAS,OAAAxT,EAAQ,kBAAA8J,CAAkB,CAAE,KAAO,CAAE,QAAA0J,EAAS,OAAAxT,EAAQ,kBAAA8J,CAAkB,GAAIpL,EAAY,EAEhI1B,GAAU,IACC,IAAMyW,GAAW,EACzB,CAAC,CAAC,EAEL,IAAI/O,EAAU,uCAAE,EAChB,OAAIjE,WAAgC,EAChCiE,EACI,oBAAC,OACG,UAAW,GAAG,CAACjE,iBAAsC,GAAK,mBAAmB,IAAIA,gBAAqC,GAAK,0EAA0E,GACrM,MAAO,CAAE,WAAwC,YAAa,OAAQ,GAErEA,kBAAuC,EACpC,oBAAC4R,GAAA,IAAa,EAEd,oBAACiB,GAAA,IAAU,CAEnB,EAED5O,EAAU,oBAAC,OAAI,UAAU,+GAA+G,EAG3I,oBAAC,OAAI,IAAI,MAAM,UAAU,wCAAwC,GAAG,iBAAiBA,CAAQ,CAErG,EAEOgP,GAAQH,GDrCf,IAAMI,GAAqB,CAAC,CAAE,OAAA3T,CAAO,IAE7B,oBAACjD,GAAA,CAAS,MAAOgF,GACb,oBAAC2R,GAAA,CAAY,OAAQ1T,EAAQ,CACjC,EAID4T,GAAQD","sourcesContent":["export { default } from \"./videoPlayerLibrary\";\r\n","\"use client\";\r\n\r\nimport { Provider } from \"react-redux\";\r\nimport { IParams } from \"./helpers/interfaces/interfaces\";\r\nimport store from \"./helpers/redux/store\";\r\nimport VideoPlayer from \"./components/videoPlayer/videoPlayer\";\r\n\r\nconst VideoPlayerLibrary = ({ params }: {params: IParams}) => {\r\n return (\r\n <Provider store={store}>\r\n <VideoPlayer params={params} />\r\n </Provider>\r\n )\r\n}\r\n\r\nexport default VideoPlayerLibrary;","\"use client\";\r\n\r\nimport { useEffect } from \"react\";\r\nimport { conditions } from \"../../helpers/conditions/conditions\";\r\nimport useHandleParams from \"../../helpers/hooks/useHandleParams\";\r\nimport { ConditionName, zIndex } from \"../../helpers/interfaces/enums\";\r\nimport { IParams } from \"../../helpers/interfaces/interfaces\";\r\nimport { useAppSelector } from \"../../helpers/redux/hooks\";\r\nimport StaticPlayer from \"./staticPlayer/staticPlayer\";\r\nimport VodPlayer from \"./vodPlayer/vodPlayer\";\r\nimport { shallowEqual } from \"react-redux\";\r\nimport { clearRedux } from \"../../helpers/helpers\";\r\n\r\nconst VideoPlayer = ({ params }: { params: IParams }) => {\r\n useHandleParams(params);\r\n\r\n useAppSelector(({ controller: { isFullScreen } }) => ({ isFullScreen }), shallowEqual);\r\n useAppSelector(({ videoData: { isReady, params, isComplexPortrait } }) => ({ isReady, params, isComplexPortrait }), shallowEqual);\r\n\r\n useEffect(() => {\r\n return () => clearRedux();\r\n }, []);\r\n\r\n let element = <></>;\r\n if (conditions(ConditionName.isReady)) {\r\n element = (\r\n <div\r\n className={`${!conditions(ConditionName.isTouchScreen) && \"pl-rounded-[12px]\"} ${conditions(ConditionName.isFullScreen) && \"!pl-overflow-hidden pl-fixed pl-top-0 pl-right-0 pl-w-screen pl-h-screen\"}`}\r\n style={{ zIndex: zIndex.videoPlayerInFullScreen, touchAction: \"pan-y\" }}\r\n >\r\n {conditions(ConditionName.isStaticFormat) ? (\r\n <StaticPlayer />\r\n ) : (\r\n <VodPlayer />\r\n )}\r\n </div>\r\n );\r\n } else element = <div className=\"pl-w-full !pl-aspect-video pl-bg-white dark:pl-bg-black pl-overflow-hidden pl-max-h-screen pl-rounded-[12px]\" />;\r\n\r\n return (\r\n <div dir=\"rtl\" className=\"pl-rounded-[12px] pl-w-full pl-h-full\" id=\"parent-player\">{element}</div>\r\n )\r\n}\r\n\r\nexport default VideoPlayer;","\"use client\";\r\n\r\nimport { useEffect } from \"react\";\r\nimport { getUUID, staticFormats, strToObj } from \"../helpers\";\r\nimport { shallowEqual } from \"react-redux\";\r\nimport Cookies from \"js-cookie\";\r\nimport { useAppDispatch, useAppSelector } from \"../redux/hooks\";\r\nimport { IParams } from \"../interfaces/interfaces\";\r\nimport { setIsReady, setPlayerParams } from \"../redux/slices/videoDataSlice\";\r\n\r\nconst useHandleParams = (query: any) => {\r\n const dispatch = useAppDispatch();\r\n\r\n let queryParams: IParams = {};\r\n\r\n const handleSetParamsInRedux = () => {\r\n dispatch(setPlayerParams(queryParams));\r\n dispatch(setIsReady(true));\r\n }\r\n\r\n const handleFeatureSet = () => {\r\n let featureSet = queryParams.featureSet;\r\n if (typeof queryParams.featureSet === \"string\") featureSet = strToObj(queryParams.featureSet);\r\n queryParams.featureSet = featureSet;\r\n return queryParams;\r\n };\r\n\r\n const handleAddUUID = () => {\r\n if (!!query.uuid) {\r\n localStorage.setItem(\"hamrahiUUID\", query.uuid!);\r\n queryParams.uuid = query.uuid;\r\n }\r\n };\r\n\r\n const handleXToken = () => {\r\n const xTokenInCookie = Cookies.get(\"xToken\");\r\n if (xTokenInCookie && !queryParams.xToken) queryParams.xToken = xTokenInCookie;\r\n };\r\n\r\n const handleLiveAndVodParams = () => {\r\n queryParams = {\r\n provider: \"unknown\",\r\n chart: \"true\",\r\n authentication: \"true\",\r\n ...query\r\n };\r\n };\r\n\r\n const handleStaticParams = () => {\r\n const eUrl = String(query[\"e-url\"]);\r\n const eCover = String(query[\"e-cover\"]);\r\n queryParams = {\r\n src: eUrl.endsWith(\"/\") ? window.atob(eUrl.slice(0, -1)) : window.atob(eUrl),\r\n type: query.type,\r\n fullscreen: query.fullscreen,\r\n autoplay: query.autoplay,\r\n snapshot: query.snapshot,\r\n portrait: \"false\",\r\n fullrate: query.fullrate,\r\n width: query.width,\r\n height: query.height,\r\n cover: !!eCover && eCover !== \"undefined\" ? window.atob(eCover) : undefined,\r\n onFinished: query.onFinished,\r\n onSnapshot: query.onSnapshot,\r\n uuid: getUUID()\r\n };\r\n };\r\n\r\n const handleParams = async () => {\r\n queryParams = {};\r\n if (Object.keys(query).includes(\"type\")) {\r\n if ([\"live\", \"vod\", \"archive\", \"clip\"].includes(String(query.type))) {\r\n handleLiveAndVodParams();\r\n handleXToken();\r\n } else if (staticFormats(String(query.type))) handleStaticParams();\r\n handleAddUUID();\r\n if (Object.keys(queryParams)) handleFeatureSet();\r\n handleSetParamsInRedux();\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n handleParams();\r\n }, [query]);\r\n\r\n};\r\n\r\nexport default useHandleParams;\r\n","\"use client\";\r\n\r\nimport { conditions } from \"../../../helpers/conditions/conditions\";\r\nimport { ConditionName } from \"../../../helpers/interfaces/enums\";\r\nimport VideoArea from \"../../custom-components/videoArea/videoArea\";\r\n\r\nconst StaticPlayer = () => {\r\n return (\r\n <div\r\n className={`pl-w-full pl-aspect-video ${!conditions(ConditionName.isTouchScreen) && !conditions(ConditionName.isFullScreen) && \"pl-rounded-[12px]\"}`}\r\n >\r\n <VideoArea />\r\n </div>\r\n )\r\n}\r\n\r\nexport default StaticPlayer;","\"use client\";\r\n\r\nimport Image from \"next/legacy/image\";\r\nimport { MouseEvent, useEffect, useState } from \"react\";\r\nimport { shallowEqual } from \"react-redux\";\r\nimport CloseIcon from \"../../icon-components/closeIcon\";\r\nimport BackwardForward from \"../backwardForward/backwardForward\";\r\nimport TouchVolumeBrightness from \"../touchVolumeBrightness/touchVolumeBrightness\";\r\nimport VideoAreaShadow from \"../videoAreaShadow.tsx/videoAreaShadow\";\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 { useAppDispatch, useAppSelector } from \"../../../helpers/redux/hooks\";\r\nimport { videoTag } from \"../../../helpers/constants\";\r\nimport { conditions } from \"../../../helpers/conditions/conditions\";\r\nimport { ConditionName, zIndex } from \"../../../helpers/interfaces/enums\";\r\nimport { handleFullScreen, handlePlayPause, handleVideoElementSizeInfo } from \"../../../helpers/redux/actions/controller.actions\";\r\nimport { setShowScreen } from \"../../../helpers/redux/slices/videoDataSlice\";\r\nimport { isTouchScreen } from \"../../../helpers/helpers\";\r\nimport useFullScreen from \"../../../helpers/hooks/useFullScreen\";\r\nimport useActiveInActive from \"../../../helpers/hooks/useActiveInActive\";\r\nimport { setShowMiniPlayer } from \"../../../helpers/redux/slices/controllerSlice\";\r\nimport PlayPause from \"../playPause/playPause\";\r\nimport IMAGES from \"../../../images/importImages\";\r\nimport CheckInternet from \"../checkInternet/checkInternet\";\r\n\r\nconst VideoArea = () => {\r\n\r\n const [isRightDoubleTouched, setIsRightDoubleTouched] = useState<boolean>(false);\r\n const [isLeftDoubleTouched, setIsLeftDoubleTouched] = useState<boolean>(false);\r\n\r\n const dispatch = useAppDispatch();\r\n\r\n const { details } = 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 const { firstPlay, showMiniPlayer, isFullScreen } = useAppSelector(\r\n ({ controller: { firstPlay, showMiniPlayer, isFullScreen, isLoading } }) => ({\r\n firstPlay,\r\n showMiniPlayer,\r\n isFullScreen,\r\n isLoading\r\n }),\r\n shallowEqual\r\n );\r\n\r\n useEffect(() => {\r\n if (videoTag()) {\r\n let timeout: any;\r\n const handleResize = () => {\r\n if (!conditions(ConditionName.showMiniPlayer)) {\r\n timeout = setTimeout(\r\n () => {\r\n handleVideoElementSizeInfo();\r\n dispatch(setShowScreen(true));\r\n },\r\n isTouchScreen() ? 0 : 300\r\n );\r\n }\r\n };\r\n handleResize();\r\n window.addEventListener(\"resize\", handleResize);\r\n const appScroll = document.getElementsByClassName(\"app-scroll\")[0];\r\n if (appScroll) appScroll.addEventListener(\"scroll\", handleResize);\r\n\r\n return () => {\r\n window.removeEventListener(\"resize\", handleResize);\r\n if (appScroll) appScroll.removeEventListener(\"scroll\", handleResize);\r\n clearTimeout(timeout);\r\n };\r\n }\r\n }, [firstPlay, showMiniPlayer, isFullScreen, videoTag()]);\r\n\r\n useEffect(() => {\r\n const timeout = setTimeout(() => handleVideoElementSizeInfo(), 100);\r\n\r\n return () => clearTimeout(timeout);\r\n }, [showMiniPlayer]);\r\n\r\n useFullScreen();\r\n\r\n const handleDoubleClick = (event: any) => {\r\n if (!conditions(ConditionName.isTouchScreen) && event.target.nodeName !== \"INPUT\") handleFullScreen();\r\n };\r\n\r\n useActiveInActive(isRightDoubleTouched, isLeftDoubleTouched);\r\n\r\n return (\r\n <>\r\n {conditions(ConditionName.showMiniPlayer) && <div id=\"black-video-area\" className={`pl-relative pl-w-full pl-aspect-video pl-bg-black pl-rounded ${!conditions(ConditionName.isTouchScreen) && !conditions(ConditionName.isFullScreen) && \"!pl-rounded-[12px]\"}`} />}\r\n <div\r\n id=\"video-area\"\r\n style={{\r\n zIndex: conditions(ConditionName.showMiniPlayer)\r\n ? zIndex.videoPlayerInPictureInPicture\r\n : conditions(ConditionName.isFullScreen)\r\n ? zIndex.videoPlayerInFullScreen\r\n : \"unset\"\r\n }}\r\n onClick={(event) => conditions(ConditionName.playByClickPoster) && handlePlayPause(event)}\r\n onDoubleClick={(event: MouseEvent<HTMLDivElement>) => !conditions(ConditionName.showMiniPlayer) && handleDoubleClick(event)}\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 ${!conditions(ConditionName.isTouchScreen) && !conditions(ConditionName.isFullScreen) && \"!pl-rounded-[12px]\"} ${conditions(ConditionName.isFullScreen) && \"!pl-fixed !pl-w-screen dvh\"} ${conditions(ConditionName.showMiniPlayer) ? \"!pl-fixed !pl-bottom-[10px] !pl-right-[10px] !pl-w-[95%] !pl-max-w-[400px] pl-max-h-[225px] pl-aspect-video !pl-rounded-[8px]\" : \"pl-w-full pl-relative\"} ${conditions(ConditionName.showMiniPlayer) && conditions(ConditionName.isTouchScreenPortrait) && \"!pl-w-[300px] !pl-aspect-video\"} ${!conditions(ConditionName.isActiveElements) && \"pl-cursor-none\"}`}\r\n >\r\n <div className={`pl-absolute pl-w-full pl-aspect-video pl-transition-all pl-duration-500 pl-bg-black ${!conditions(ConditionName.isTouchScreen) && !conditions(ConditionName.isFullScreen) && \"!pl-rounded-[12px]\"} ${conditions(ConditionName.isActiveElements) ? \"pl-bg-opacity-50\" : \"pl-bg-opacity-0\"}`} />\r\n {conditions(ConditionName.showBanner) && (\r\n <div className=\"pl-absolute pl-w-full pl-h-full pl-flex pl-justify-center\">\r\n <Image src={details.banner} layout=\"fill\" alt=\"sdfdf\" objectFit=\"contain\" className={`${!conditions(ConditionName.isTouchScreen) && !conditions(ConditionName.isFullScreen) && \"pl-rounded-[12px]\"}`} />\r\n </div>\r\n )}\r\n {conditions(ConditionName.showMiniPlayer) && (\r\n <div className=\"pl-z-[100]\">\r\n <div className=\"pl-absolute pl-top-3 pl-right-3 pl-cursor-pointer\" onClick={() => dispatch(setShowMiniPlayer(undefined))}>\r\n <Image\r\n src={IMAGES.closeSquare}\r\n alt=\"close-square\"\r\n width={16}\r\n height={16}\r\n />\r\n </div>\r\n <div className={`pl-absolute pl-bottom-0 pl-right-[50%] pl-mr-[-25px] animate__animated animate__faster ${conditions(ConditionName.isActiveElements) && !conditions(ConditionName.isLoading)\r\n ? \"animate__fadeIn pl-pointer-events-auto\"\r\n : \"animate__fadeOut pl-pointer-events-none\"\r\n }`}><PlayPause /></div>\r\n <CheckInternet />\r\n </div>\r\n )}\r\n {conditions(ConditionName.showTouchVolumeBrightness) && !conditions(ConditionName.isMiniPlayer) && <TouchVolumeBrightness />}\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: isLeftDoubleTouched || isRightDoubleTouched ? zIndex.backwardForwardActive : 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 {!conditions(ConditionName.isRaw) && !conditions(ConditionName.hasContinuousPlayback) && !conditions(ConditionName.showMiniPlayer) && (\r\n <div\r\n id=\"playerElements\"\r\n className={`pl-absolute pl-top-0 pl-right-0 pl-w-full pl-h-full ${conditions(ConditionName.showAutoPlayPopover) && \"pl-bg-black\"\r\n }`}\r\n >\r\n <div className={`pl-flex pl-flex-col pl-justify-between pl-w-full pl-h-full`}>\r\n {conditions(ConditionName.showHeader) && <Header />}\r\n {conditions(ConditionName.showMain) && !conditions(ConditionName.hasContinuousPlayback) && <Main />}\r\n {conditions(ConditionName.showFooter) && <Footer />}\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n </>\r\n )\r\n}\r\n\r\nexport default VideoArea;","import { useEffect, useRef, useState } from \"react\";\r\nimport { shallowEqual } from \"react-redux\";\r\nimport { useDoubleTap } from \"use-double-tap\";\r\nimport { useAppDispatch, useAppSelector } from \"../../../helpers/redux/hooks\";\r\nimport { IBackwardForwardProps } from \"../../../helpers/interfaces/interfaces\";\r\nimport { setActiveElements } from \"../../../helpers/redux/slices/controllerSlice\";\r\nimport { videoTag } from \"../../../helpers/constants\";\r\nimport { handleBackwardForward } from \"../../../helpers/redux/actions/controller.actions\";\r\nimport { ConditionName } from \"../../../helpers/interfaces/enums\";\r\nimport { conditions } from \"../../../helpers/conditions/conditions\";\r\nimport { handleRippleCircle } from \"../../../helpers/helpers\";\r\nimport IMAGES from \"../../../images/importImages\";\r\nimport Image from \"next/legacy/image\";\r\n\r\nconst hideTime = 1000;\r\n\r\nconst BackwardForward = ({\r\n type,\r\n isRightDoubleTouched,\r\n isLeftDoubleTouched,\r\n setIsRightDoubleTouched,\r\n setIsLeftDoubleTouched\r\n}: IBackwardForwardProps) => {\r\n const [backwardForwardCount, setBackwardForwardCount] = useState<number>(15);\r\n const [hide, setHide] = useState<boolean>(false);\r\n const backwardForwardCountRef = useRef<number>(backwardForwardCount);\r\n\r\n const dispatch = useAppDispatch();\r\n const { duration } = useAppSelector(({ controller: { currentTime, duration, showMiniPlayer } }) => ({ currentTime, duration, showMiniPlayer }), shallowEqual);\r\n const { videoElementSizeInfo } = useAppSelector(\r\n ({ videoData: { videoElementSizeInfo, params } }) => ({ videoElementSizeInfo, params }),\r\n shallowEqual\r\n );\r\n\r\n const timeoutRef = useRef<any>(null);\r\n\r\n useEffect(() => {\r\n backwardForwardCountRef.current = backwardForwardCount;\r\n }, [backwardForwardCount]);\r\n\r\n let doubleTouch: any = undefined;\r\n\r\n doubleTouch = useDoubleTap((event) => {\r\n if ([\"touchBackward\", \"touchForward\"].includes(type)) {\r\n event.stopPropagation();\r\n if (type === \"touchBackward\" && setIsLeftDoubleTouched) setIsLeftDoubleTouched(true);\r\n else if (type === \"touchForward\" && setIsRightDoubleTouched) setIsRightDoubleTouched(true);\r\n clearTimeout(timeoutRef.current);\r\n timeoutRef.current = setTimeout(() => setHide(true), hideTime);\r\n }\r\n }, 200);\r\n\r\n useEffect(() => {\r\n if (hide) {\r\n setHide(false);\r\n dispatch(setActiveElements(false));\r\n if (isRightDoubleTouched && setIsRightDoubleTouched) {\r\n setIsRightDoubleTouched(false);\r\n if (videoTag().duration - videoTag().currentTime <= backwardForwardCountRef.current) handleBackwardForward(type, videoTag().duration);\r\n else handleBackwardForward(type, backwardForwardCountRef.current);\r\n setBackwardForwardCount(15);\r\n } else if (isLeftDoubleTouched && setIsLeftDoubleTouched) {\r\n setIsLeftDoubleTouched(false);\r\n if (videoTag().currentTime <= backwardForwardCountRef.current) handleBackwardForward(type, 0);\r\n else handleBackwardForward(type, backwardForwardCountRef.current);\r\n setBackwardForwardCount(15);\r\n }\r\n }\r\n }, [hide]);\r\n\r\n const handleTouchStart = (event: any) => {\r\n setBackwardForwardCount((prev) => prev + 15);\r\n if (conditions(ConditionName.isTouchScreenLandscape)) handleRippleCircle(event, type);\r\n clearTimeout(timeoutRef.current);\r\n timeoutRef.current = setTimeout(() => setHide(true), hideTime);\r\n };\r\n\r\n let component;\r\n\r\n if ([\"backward\", \"forward\"].includes(type)) {\r\n component = (\r\n <div\r\n className={`${\r\n !conditions(ConditionName.isTouchScreen) && \"hover:pl-scale-125\"\r\n } pl-transition-transform pl-ease-in-out pl-cursor-pointer ${\r\n type === \"backward\" && (videoTag().currentTime >= 15 ? \"pl-opacity-100\" : \"pl-opacity-30 pl-cursor-default hover:pl-scale-100\")\r\n } ${\r\n type === \"forward\" &&\r\n (duration - videoTag().currentTime >= 15 ? \"pl-opacity-100\" : \"pl-opacity-30 pl-cursor-default hover:pl-scale-100\")\r\n }}`}\r\n onContextMenu={(event) => event.preventDefault()}\r\n >\r\n <Image\r\n alt={type === \"backward\" ? \"backward-icon\" : \"forward-icon\"}\r\n src={type === \"backward\" ? IMAGES.backward15 : IMAGES.forward15}\r\n width={24} \r\n height={24}\r\n onClick={() => handleBackwardForward(type, backwardForwardCount)}\r\n onDoubleClick={(event: any) => event.stopPropagation()}\r\n />\r\n </div>\r\n );\r\n } else if ([\"touchBackward\", \"touchForward\"].includes(type)) {\r\n component = (\r\n <div\r\n id={type}\r\n className={`pl-relative pl-flex pl-flex-col pl-justify-center pl-items-center pl-gap-2 pl-overflow-hidden ${\r\n type === \"touchBackward\" ? \"pl-rounded-r-full\" : \"pl-rounded-l-full\"\r\n }`}\r\n style={{ width: videoElementSizeInfo.width, height: videoElementSizeInfo.width }}\r\n {...doubleTouch}\r\n >\r\n {(isRightDoubleTouched || isLeftDoubleTouched) && (\r\n <div\r\n className={`pl-w-full pl-h-full pl-flex pl-flex-col pl-justify-center pl-items-center pl-gap-2 pl-p-5 pl-bg-secondary-100/[0.3]`}\r\n onTouchStart={handleTouchStart}\r\n >\r\n <div\r\n className={`${\r\n type === \"touchBackward\" ? \"pl-arrow-left\" : \"pl-arrow-right pl-gap-2\"\r\n } pl-flex pl-justify-center pl-items-center`}\r\n >\r\n <Image\r\n alt=\"arrow-left-icon\"\r\n src={IMAGES.arrowLeft}\r\n className={`${type === \"touchForward\" && \"pl-rotate-180\"}`}\r\n width={24}\r\n height={24}\r\n />\r\n <Image\r\n alt=\"arrow-left-icon\"\r\n src={IMAGES.arrowLeft}\r\n className={`${type === \"touchForward\" && \"pl-rotate-180\"}`}\r\n width={24}\r\n height={24}\r\n />\r\n <Image\r\n alt=\"arrow-left-icon\"\r\n src={IMAGES.arrowLeft}\r\n className={`${type === \"touchForward\" && \"pl-rotate-180\"}`}\r\n width={24}\r\n height={24}\r\n />\r\n </div>\r\n <p className=\"pl-text-center pl-text-[14px] pl-font-normal pl-text-white\">{backwardForwardCount} ثانیه</p>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n }\r\n\r\n return <>{component}</>;\r\n};\r\n\r\nexport default BackwardForward;\r\n","const IMAGES: any = {\r\n fullScreen: require(\"./svg/FullScreen.svg\"),\r\n nonFullScreen: require(\"./svg/NonFullScreen.svg\"),\r\n settings: require(\"./svg/Settings.svg\"),\r\n bigPlay: require(\"./svg/BigPlay.svg\"),\r\n bigPause: require(\"./svg/BigPause.svg\"),\r\n mute: require(\"./svg/Mute.svg\"),\r\n unMute: require(\"./svg/UnMute.svg\"),\r\n backward15: require(\"./svg/Backward15.svg\"),\r\n forward15: require(\"./svg/Forward15.svg\"),\r\n chevronLeft: require(\"./svg/ChevronLeft.svg\"),\r\n pictureInPicture: require(\"./svg/PictureInPicture.svg\"),\r\n lock: require(\"./svg/Lock.svg\"),\r\n unlock: require(\"./svg/Unlock.svg\"),\r\n arrowLeft: require(\"./svg/ArrowLeft.svg\"),\r\n speed: require(\"./svg/Speed.svg\"),\r\n speed1: require(\"./svg/Speed1.svg\"),\r\n tick: require(\"./svg/Tick.svg\"),\r\n qualitySetting: require(\"./svg/QualitySetting.svg\"),\r\n qualitySetting1: require(\"./svg/QualitySetting1.svg\"),\r\n infoCircle: require(\"./svg/InfoCircle.svg\"),\r\n notFound: require(\"./svg/NotFound.svg\"),\r\n closeSquare: require(\"./svg/CloseSquare.svg\"),\r\n sun: require(\"./svg/Sun.svg\"),\r\n};\r\n\r\nexport default IMAGES;\r\n","import Image from \"next/legacy/image\";\r\nimport { useEffect, useRef, useState } from \"react\";\r\nimport { shallowEqual } from \"react-redux\";\r\nimport Mute from \"../../icon-components/mute\";\r\nimport UnMute from \"../../icon-components/unMute\";\r\nimport { useAppDispatch, useAppSelector } from \"../../../helpers/redux/hooks\";\r\nimport { ConditionName } from \"../../../helpers/interfaces/enums\";\r\nimport { conditions } from \"../../../helpers/conditions/conditions\";\r\nimport { checkParentTarget } from \"../../../helpers/helpers\";\r\nimport store from \"../../../helpers/redux/store\";\r\nimport { brightnessLog, volumeLog } from \"../../../helpers/logs/logs\";\r\nimport { sendFluentLog } from \"../../../helpers/logs/fluentdLogger\";\r\nimport { setActiveElements } from \"../../../helpers/redux/slices/controllerSlice\";\r\nimport { setUserSettings } from \"../../../helpers/redux/slices/userSlice\";\r\nimport { videoTag } from \"../../../helpers/constants\";\r\nimport IMAGES from \"../../../images/importImages\";\r\n\r\nconst TouchVolumeBrightness = () => {\r\n const [type, setType] = useState<string>(\"\");\r\n\r\n const dispatch = useAppDispatch();\r\n const { settings } = useAppSelector(({ user: { settings } }) => ({ settings }), shallowEqual);\r\n\r\n const primaryBrightnessValueRef = useRef<number>(settings.brightness);\r\n const primaryVolumeValueRef = useRef<number>(settings.volume);\r\n const typeRef = useRef<string>(type);\r\n\r\n useEffect(() => {\r\n typeRef.current = type;\r\n }, [type]);\r\n\r\n useEffect(() => {\r\n let startPositionY = 0;\r\n\r\n const handleTouchStartScreen = (event: any) => {\r\n if (conditions(ConditionName.hidePopovers) && !checkParentTarget(event, \"progress-area\")) startPositionY = event.touches[0].clientY;\r\n };\r\n\r\n const handleTouchMoveScreen = (event: any) => {\r\n if (conditions(ConditionName.hidePopovers) && !checkParentTarget(event, \"progress-area\")) {\r\n event.stopPropagation();\r\n if (event.touches[0].clientX > window.innerWidth / 2) handleTouchMove(event, \"volume\", startPositionY, window.innerHeight);\r\n else if (event.touches[0].clientX < window.innerWidth / 2) handleTouchMove(event, \"brightness\", startPositionY, window.innerHeight);\r\n }\r\n };\r\n\r\n const handleTouchEndScreen = () => {\r\n const { settings } = store.getState().user;\r\n if (typeRef.current === \"brightness\" && primaryBrightnessValueRef.current !== settings.brightness) {\r\n sendFluentLog(brightnessLog(primaryBrightnessValueRef.current, settings.brightness));\r\n primaryBrightnessValueRef.current = settings.brightness;\r\n } else if (typeRef.current === \"volume\" && primaryVolumeValueRef.current !== settings.volume) {\r\n sendFluentLog(volumeLog(primaryVolumeValueRef.current, settings.volume));\r\n primaryVolumeValueRef.current = settings.volume;\r\n }\r\n setTimeout(() => setType(\"\"), 500);\r\n };\r\n\r\n document.addEventListener(\"touchstart\", (event: any) => handleTouchStartScreen(event));\r\n document.addEventListener(\"touchmove\", (event: any) => handleTouchMoveScreen(event));\r\n document.addEventListener(\"touchend\", () => handleTouchEndScreen());\r\n\r\n return () => {\r\n document.removeEventListener(\"touchstart\", (event: any) => handleTouchStartScreen(event));\r\n document.removeEventListener(\"touchmove\", (event: any) => handleTouchMoveScreen(event));\r\n document.removeEventListener(\"touchend\", () => handleTouchEndScreen());\r\n };\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (settings.volume === 0 && !type) primaryVolumeValueRef.current = 0;\r\n }, [settings.volume]);\r\n\r\n const handleTouchMove = (event: any, type: string, startPositionY: number, area: number) => {\r\n const { settings } = store.getState().user;\r\n const { activePointerProgressBar } = store.getState().controller;\r\n try {\r\n if (!activePointerProgressBar) dispatch(setActiveElements(false));\r\n event.stopPropagation();\r\n setType(type);\r\n const { height } = document.getElementsByClassName(\"pl-bar\")[0].getBoundingClientRect();\r\n if (type === \"volume\") {\r\n const value = settings.volume + (((startPositionY - event.touches[0].clientY) / 40) * height) / area;\r\n let volumeCount: number;\r\n if (value > 100) volumeCount = 100;\r\n else if (value < 0) volumeCount = 0;\r\n else volumeCount = Math.ceil(Math.abs(value));\r\n dispatch(setUserSettings({ ...settings, volume: volumeCount }));\r\n videoTag().volume = volumeCount / 100;\r\n } else if (type === \"brightness\") {\r\n const value = settings.brightness + (((startPositionY - event.touches[0].clientY) / 40) * height) / area;\r\n if (value > 100) dispatch(setUserSettings({ ...settings, brightness: 100 }));\r\n else if (value < 0) dispatch(setUserSettings({ ...settings, brightness: 0 }));\r\n else dispatch(setUserSettings({ ...settings, brightness: Math.ceil(Math.abs(value)) }));\r\n }\r\n } catch (error) {\r\n return false;\r\n }\r\n };\r\n\r\n return (\r\n <div id=\"volume-brightness\">\r\n <div\r\n className={`pl-fixed pl-w-screen pl-h-screen pl-top-0 pl-right-0 pl-bg-black`}\r\n style={{ opacity: settings.brightness < 10 ? 0.9 : 1 - settings.brightness / 100 }}\r\n ></div>\r\n <div className=\"pl-absolute pl-top-0 pl-right-0 pl-w-full pl-h-full pl-flex pl-justify-between pl-items-center\">\r\n <div className=\"pl-flex pl-items-center pl-flex-1 pl-h-full pl-pr-6\">\r\n <div\r\n id={\"volume-progressbar\"}\r\n className={`pl-bar pl-relative pl-w-6 pl-h-[200px] ${\r\n type === \"volume\" && \"pl-bg-gray-300\"\r\n } pl-rounded-[50px] pl-overflow-hidden pl-max-h-[80vh] pl-flex pl-items-end pl-justify-end`}\r\n >\r\n {type === \"volume\" && (\r\n <>\r\n <div\r\n className=\"pl-absolute pl-w-full pl-bg-secondary-600 pl-rounded-b-[50px]\"\r\n style={{ height: `${settings.volume}%` }}\r\n />\r\n <div className=\"pl-mb-[7px] pl-ml-0.5 pl-flex pl-gap-1 pl-items-center\">\r\n <div className=\"pl-relative pl-flex pl-items-center\">\r\n {settings.volume > 0 && (\r\n <div className=\"pl-absolute pl-right-[2px] pl-w-2 pl-h-2 pl-rounded-full pl-flex pl-items-center pl-justify-center pl-border-2 pl-border-transparent pl-border-r-2 pl-border-r-z-yellow-light\" />\r\n )}\r\n {settings.volume > 33 && (\r\n <div className=\"pl-absolute pl-right-[-1px] pl-w-3 pl-h-3 pl-rounded-full pl-flex pl-items-center pl-justify-center pl-border-2 pl-border-transparent pl-border-r-2 pl-border-r-z-yellow-light\" />\r\n )}\r\n {settings.volume > 66 && (\r\n <div className=\"pl-absolute pl-right-[-4px] pl-w-4 pl-h-4 pl-rounded-full pl-flex pl-items-center pl-justify-center pl-border-2 pl-border-transparent pl-border-r-2 pl-border-r-z-yellow-light\" />\r\n )}\r\n </div>\r\n {settings.volume === 0 ? (\r\n <Mute className=\"pl-z-[1] pl-w-[13px] pl-h-[13px] pl-fill-dark-7\" />\r\n ) : (\r\n <UnMute className=\"pl-z-[1] pl-w-[13px] pl-h-[13px] pl-fill-dark-7\" />\r\n )}\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n </div>\r\n {type && (\r\n <div className=\"pl-bg-secondary-700/[0.8] pl-rounded-full pl-w-[54px] pl-h-[54px] pl-flex pl-items-center pl-justify-center pl-text-[32px] pl-font-normal pl-text-white\">\r\n {type === \"volume\" ? settings.volume : settings.brightness}\r\n </div>\r\n )}\r\n <div className=\"pl-flex pl-items-center pl-justify-end pl-flex-1 pl-h-full pl-pl-6\">\r\n <div\r\n id={\"brightness-progressbar\"}\r\n className={`pl-bar pl-relative pl-w-6 pl-h-[200px] ${\r\n type === \"brightness\" && \"pl-bg-gray-300\"\r\n } pl-rounded-[50px] pl-overflow-hidden pl-max-h-[80vh] pl-flex pl-items-end pl-justify-end`}\r\n >\r\n {type === \"brightness\" && (\r\n <>\r\n <div\r\n className=\"pl-absolute pl-w-full pl-bg-primary-600 pl-rounded-b-[50px]\"\r\n style={{ height: `${settings.brightness}%` }}\r\n />\r\n <div\r\n className=\"pl-mb-[7px] pl-ml-0.5 pl-flex pl-gap-1 pl-items-center\"\r\n style={{ opacity: settings.brightness / 100 }}\r\n >\r\n <Image alt=\"\" src={IMAGES.sun} className=\"pl-flex-1\" width={20} height={20} />\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default TouchVolumeBrightness;\r\n","import { IMuteProps } from \"../../helpers/interfaces/interfaces\";\r\n\r\nconst Mute = ({ className, onClick }: IMuteProps) => {\r\n return (\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className} onClick={onClick}>\r\n <g opacity=\"0.7\">\r\n <path d=\"M11.6997 10.7997C12.2247 10.2747 13.1247 10.6497 13.1247 11.3914V13.833C13.1247 15.2664 12.6081 16.3414 11.6831 16.858C11.3081 17.0664 10.8914 17.1664 10.4581 17.1664C9.79141 17.1664 9.07474 16.9414 8.34141 16.483L7.80807 16.1497C7.35807 15.8664 7.28307 15.233 7.65807 14.858L11.6997 10.7997Z\" />\r\n <path d=\"M18.141 1.85742C17.891 1.60742 17.4827 1.60742 17.2327 1.85742L13.1077 5.98242C13.0577 4.64909 12.5577 3.64909 11.6743 3.15742C10.741 2.64076 9.54935 2.77409 8.33268 3.53242L5.90768 5.04909C5.74102 5.14909 5.54935 5.20742 5.35768 5.20742H4.58268H4.16602C2.14935 5.20742 1.04102 6.31575 1.04102 8.33242V11.6658C1.04102 13.6824 2.14935 14.7908 4.16602 14.7908H4.29935L1.84935 17.2408C1.59935 17.4908 1.59935 17.8991 1.84935 18.1491C1.98268 18.2658 2.14102 18.3324 2.30768 18.3324C2.47435 18.3324 2.63268 18.2658 2.75768 18.1408L18.141 2.75742C18.3994 2.50742 18.3994 2.10742 18.141 1.85742Z\" />\r\n </g>\r\n </svg>\r\n );\r\n};\r\n\r\nexport default Mute;\r\n","import { IUnMuteProps } from \"../../helpers/interfaces/interfaces\";\r\n\r\nconst UnMute = ({ className, onClick }: IUnMuteProps) => {\r\n return (\r\n <svg width=\"13\" height=\"16\" viewBox=\"0 0 13 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className} onClick={onClick}>\r\n <path d=\"M10.6827 1.14944C9.74935 0.632778 8.55768 0.766111 7.34102 1.52444L4.90768 3.04944C4.74102 3.14944 4.54935 3.20778 4.35768 3.20778H3.58268H3.16602C1.14935 3.20778 0.0410156 4.31611 0.0410156 6.33278V9.66611C0.0410156 11.6828 1.14935 12.7911 3.16602 12.7911H3.58268H4.35768C4.54935 12.7911 4.74102 12.8494 4.90768 12.9494L7.34102 14.4744C8.07435 14.9328 8.79102 15.1578 9.45768 15.1578C9.89102 15.1578 10.3077 15.0578 10.6827 14.8494C11.6077 14.3328 12.1243 13.2578 12.1243 11.8244V4.17444C12.1243 2.74111 11.6077 1.66611 10.6827 1.14944Z\" />\r\n </svg>\r\n );\r\n};\r\n\r\nexport default UnMute;\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-4 pl-mt-5`}>\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\n\r\nconst Main = () => {\r\n const [showIcons, setShowIcons] = useState<boolean>(false);\r\n\r\n useAppSelector(({ controller: { lock, firstPlay } }) => ({ lock, firstPlay }), shallowEqual);\r\n const { activeElements } = useAppSelector(({ controller: { activeElements } }) => ({ activeElements }),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 return (\r\n <main className=\"pl-flex-1\">\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 className=\"pl-flex pl-justify-center pl-gap-10 pl-items-center pl-w-max\"\r\n style={{ zIndex: conditions(ConditionName.isComplexPortrait) ? zIndex.mainIconInComplexPortrait : 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 </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, showMiniPlayer } }) => ({ play, showMiniPlayer }), 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={conditions(ConditionName.showMiniPlayer) ? 20 : 40}\r\n height={conditions(ConditionName.showMiniPlayer) ? 20 : 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 { footerPadding } from \"../../../helpers/environment\";\r\nimport CheckInternet from \"../checkInternet/checkInternet\";\r\n\r\nconst Footer = () => {\r\n useAppSelector(({ controller: { lock, isFullScreen, isLoading, activeElements } }) => ({ lock, isFullScreen, isLoading, activeElements }), shallowEqual);\r\n return (\r\n <div id=\"footer\" className=\"pl-relative\" style={{ zIndex: zIndex.footer }}>\r\n <>\r\n {!conditions(ConditionName.isLock) && (\r\n <>\r\n <div\r\n className={`pl-flex pl-flex-col ${conditions(ConditionName.isTouchScreenPortrait) && \"pl-gap-4\"} pl-z-[100000000] pl-w-full pl-mx-auto animate__animated animate__faster ${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 style={{ paddingLeft: footerPadding(), paddingRight: footerPadding() }}\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 <CheckInternet />\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, zIndex } from \"../../../../helpers/interfaces/enums\";\r\nimport { conditions } from \"../../../../helpers/conditions/conditions\";\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, showMiniPlayer } }) => ({\r\n duration,\r\n currentTime,\r\n bufferedTimeWidth,\r\n showMiniPlayer\r\n }),\r\n shallowEqual\r\n );\r\n const { markers } = useAppSelector(\r\n ({ videoData: { params, videoElementSizeInfo, markers, isComplexPortrait } }) => ({\r\n params,\r\n videoElementSizeInfo,\r\n markers,\r\n isComplexPortrait\r\n }),\r\n shallowEqual\r\n );\r\n const [timeoutIds, setTimeoutIds] = useState<any[]>([]);\r\n\r\n const durationTime = duration;\r\n const calculateMarkerPosition = (time: number) => (durationTime ? (progressBarWidth() * time) / durationTime : 0);\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 </div>\r\n <div\r\n className={`pl-w-full ${conditions(ConditionName.isTouchScreenPortrait) ? \"pl-absolute\" : \"pl-absolute pl-bottom-0.5 pl-pb-2\"} 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\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-z-secondary-100/[0.4] pl-rounded`}\r\n style={{ transform: isPointerDown ? \"scaleY(1.8)\" : \"unset\" }}\r\n >\r\n {markers.map((marker: any) => (\r\n <div key={marker.id} data-marker={marker.time}>\r\n <div\r\n className=\"pl-emoji-dot pl-absolute pl-flex pl-flex-col pl-w-[3px] pl-h-[5px] pl-bg-white pl-cursor-pointer\"\r\n data-marker={marker.time}\r\n style={{ left: calculateMarkerPosition(marker.time), zIndex: zIndex.emoji }}\r\n />\r\n </div>\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(conditions(ConditionName.isVttFitHeight) ? details.vtt_mobile : details.vtt);\r\n }, [details.vtt, details.vtt_mobile, conditions(ConditionName.isVttFitHeight)]);\r\n\r\n useEffect(() => {\r\n if (!!vttUrl) fetchFile(conditions(ConditionName.isVttFitHeight) ? details.vtt_mobile! : details.vtt!, 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-[200%] pl-px-[10px] pl-py-[5px] pl-mr-[-25px] pl-mb-[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]\">\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, footerPadding } from \"../../environment\";\r\nimport { progressBar, progressBarWidth, videoTag } from \"../../constants\";\r\nimport { secondsToHMS } from \"../../helpers\";\r\n\r\nexport const getPointerTime = (event: any, type: string = \"\") => {\r\n const { videoElementSizeInfo } = store.getState().videoData;\r\n const { duration, hlsLiveSyncPosition } = store.getState().controller;\r\n const durationValue = conditions(ConditionName.isLiveParam) ? hlsLiveSyncPosition : duration;\r\n const clientX = event.clientX !== undefined ? event.clientX : event.touches[0].clientX;\r\n if (clientX <= videoElementSizeInfo.right - footerPadding() && clientX > footerPadding()) {\r\n let positionX = clientX - footerPadding() - videoElementSizeInfo.left;\r\n let timePositionX = (positionX / (videoElementSizeInfo.width - 2 * footerPadding())) * durationValue;\r\n if (type === \"tooltipTime-live\") timePositionX = durationValue - timePositionX;\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 - footerPadding() && clientX > footerPadding()) {\r\n return clientX - footerPadding() - videoElementSizeInfo.left;\r\n }\r\n};\r\n\r\nexport const getMarkerPosition = (markerTime: number) => {\r\n const { duration, hlsLiveSyncPosition } = store.getState().controller;\r\n const durationValue = conditions(ConditionName.isLiveParam) ? hlsLiveSyncPosition : duration;\r\n return (markerTime * progressBarWidth()) / durationValue;\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 (videoTag().offsetLeft + videoTag().offsetWidth < getPointerPosition(event)! + element.offsetWidth) {\r\n progressTooltip.style.left = `${videoTag().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 = conditions(ConditionName.isLiveParam)\r\n ? `-${secondsToHMS(getPointerTime(event, \"tooltipTime-live\")!)}`\r\n : `${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 (\r\n progressTooltip &&\r\n progressBarTooltip &&\r\n clientX <= videoElementSizeInfo.right - footerPadding() &&\r\n clientX > videoElementSizeInfo.left + footerPadding()\r\n ) {\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 - footerPadding() && clientX > footerPadding())\r\n progressBar().style.width = `${getPointerPosition(event)}px`;\r\n else if (clientX <= event.view.innerWidth - footerPadding()) progressBar().style.width = 0;\r\n else if (clientX > footerPadding()) 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 - footerPadding() && clientX > footerPadding()) {\r\n dispatch(setActivePointerProgressBar(true));\r\n dispatch(setDelayTurnOffControlbar(true));\r\n sessionStorage.setItem(\"previousVideoTime\", String(videoTag().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 + footerPadding()) {\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 videoTag().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, hlsLiveSyncPosition } = store.getState().controller;\r\n const { left, right } = store.getState().videoData.videoElementSizeInfo;\r\n const durationValue = conditions(ConditionName.isLiveParam) ? hlsLiveSyncPosition : duration;\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 + footerPadding() && clientX < right + footerPadding()) currentTime = getPointerTime(event)!;\r\n else if (clientX < left + footerPadding()) currentTime = 0;\r\n else if (clientX > footerPadding()) currentTime = durationValue;\r\n if (!conditions(ConditionName.isStaticFormat)) handleVideoTimeline(videoTag().currentTime, currentTime);\r\n videoTag().currentTime = currentTime;\r\n if (store.getState().controller.activePointerProgressBar) {\r\n dispatch(setActivePointerProgressBar(false));\r\n dispatch(setDelayTurnOffControlbar(false));\r\n videoTag().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, markersListPopover } = store.getState().popovers;\r\n const { delayTurnOffControlbar } = store.getState().controller;\r\n if (event.pointerType === \"touch\" && !settingPopover && !markersListPopover && 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 videoTag()\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 { 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\n\r\nconst Controlbar = () => {\r\n useAppSelector(({ controller: { isFullScreen, showMiniPlayer } }) => ({ isFullScreen, showMiniPlayer }), shallowEqual);\r\n useAppSelector(\r\n ({ videoData: { videoElementSizeInfo, params, isComplexPortrait } }) => ({ videoElementSizeInfo, params, isComplexPortrait }),\r\n shallowEqual\r\n );\r\n\r\n return (\r\n <div id=\"player-controllbar\" className={`pl-flex pl-justify-between pl-items-center pl-mx-3 pl-mb-3`}>\r\n <div\r\n className={`pl-flex pl-items-center ${\r\n conditions(ConditionName.isFullMobilePortrait) || !conditions(ConditionName.isMiniPlayer) ? \"pl-gap-5\" : \"pl-gap-2\"\r\n }`}\r\n >\r\n {!conditions(ConditionName.showMiniPlayer) && <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 </div>\r\n <div className={`pl-flex pl-items-center ${conditions(ConditionName.isMiniPlayer) ? \"pl-gap-2\" : \"pl-gap-5\"}`}>\r\n {conditions(ConditionName.isTouchScreenPortrait) && <ElapsedTime />}\r\n {!conditions(ConditionName.isIOS) && <SoundVolume />}\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 />\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 { 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] pl-bottom-[230%] pl-rounded-[8px] pl-px-4 pl-py-3 pl-text-[14px] pl-font-bold ${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 { 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 { videoTag } from \"../../../helpers/constants\";\r\nimport Image from \"next/legacy/image\";\r\n\r\nconst PictureInPicture = () => {\r\n const [showTooltip, setShowTooltip] = useState<boolean>(false);\r\n\r\n useAppSelector(({ controller: { showMiniPlayer } }) => ({ showMiniPlayer }), shallowEqual);\r\n useAppSelector(({ videoData: { videoElementSizeInfo, params } }) => ({ 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=\"\"\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={() => videoTag().requestPictureInPicture()}\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\"\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 />\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, useEffect, 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\n\r\nconst Settings = () => {\r\n const dispatch = useAppDispatch();\r\n useAppSelector(({ videoData: { params } }) => ({ params }),shallowEqual);\r\n const { settingPopover } = useAppSelector(({ popovers: { settingPopover } }) => ({ settingPopover }), shallowEqual);\r\n\r\n const [section, setSection] = useState<string>(SettingSections.main);\r\n const [elementHeight, setElementHeight] = useState<number>(0);\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 useEffect(() => {\r\n setElementHeight(document.getElementById(section)?.offsetHeight!);\r\n }, [section]);\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-[12px] 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 styles={{maxHeight: elementHeight + 100}}\r\n status={settingPopover}\r\n onClose={() => dispatch(setSettingPopover(false))}\r\n type={conditions(ConditionName.isTouchScreen) ? \"modal\" : \"popover\"}\r\n isBlurBackground={conditions(ConditionName.isTouchScreenPortrait)}\r\n ref={settingsRef}\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-4 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`}>کیفیت پخش</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 <div className=\"pl-flex pl-items-center pl-gap-[10px] pl-cursor-pointer\" onClick={() => setSection(SettingSections.speed)}>\r\n <Image\r\n src={IMAGES.speed}\r\n alt=\"\"\r\n width={20}\r\n height={20}\r\n />\r\n <p className={`pl-ml-auto pl-text-[12px] pl-font-medium`}>سرعت</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 </div>\r\n )}\r\n {section === SettingSections.qualityLevels && <QualityLevels setSection={setSection} />}\r\n {section === SettingSections.speed && <Speed 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, useState } from \"react\";\r\nimport { createPortal } from \"react-dom\";\r\nimport { shallowEqual } from \"react-redux\";\r\nimport dynamic from \"next/dynamic\";\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 CloseIcon = dynamic(() => import(\"../../icon-components/closeIcon\"));\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 isFullScreen,\r\n isHeader,\r\n headerTitle = \"\",\r\n customHeader,\r\n headerClassName,\r\n isHasCatchUpLineOnTop = false,\r\n animation,\r\n scrollbar = false,\r\n isFocusOnInput = false,\r\n showCloseIcon = true,\r\n pinContent\r\n }: IPopoverProps,\r\n ref: any\r\n ) => {\r\n const [showPopover, setShowPopover] = useState<boolean>(status!);\r\n\r\n const [maxHeight, setMaxHeight] = useState<number>(0);\r\n const [maxHeightOnTouchMove, setMaxHeightOnTouchMove] = 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 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 setMaxHeightOnTouchMove(0);\r\n setShowPopover(false);\r\n }, 500);\r\n }\r\n\r\n return () => clearTimeout(timeout);\r\n }, [status]);\r\n\r\n useEffect(() => {\r\n if (conditions(ConditionName.isComplexPortrait) && status) setMaxHeight(window.innerHeight - videoElementSizeInfo.bottom);\r\n }, [status]);\r\n\r\n const handleTouchMove = (event: any) => {\r\n if (event.touches[0].clientY >= videoElementSizeInfo.top) setMaxHeightOnTouchMove(window.innerHeight - event.touches[0].clientY);\r\n else setMaxHeightOnTouchMove(window.innerHeight - videoElementSizeInfo.top);\r\n setZIndexOnCatchUp(zIndex.maxPopover);\r\n };\r\n\r\n const handleTouchEnd = () => {\r\n if (maxHeightOnTouchMove !== 0) {\r\n if (maxHeightOnTouchMove > maxHeight) {\r\n if (maxHeightOnTouchMove - maxHeight > (window.innerHeight - videoElementSizeInfo.top - maxHeight) / 2) {\r\n setMaxHeightOnTouchMove(window.innerHeight - videoElementSizeInfo.top);\r\n setZIndexOnCatchUp(zIndex.maxPopover);\r\n } else {\r\n setMaxHeightOnTouchMove(0);\r\n setTimeout(() => setZIndexOnCatchUp(0), 500);\r\n }\r\n } else {\r\n if (maxHeightOnTouchMove > maxHeight / 2) setMaxHeightOnTouchMove(maxHeight);\r\n else {\r\n setMaxHeightOnTouchMove(0);\r\n setMaxHeight(0);\r\n onClose();\r\n }\r\n setZIndexOnCatchUp(0);\r\n }\r\n }\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] dark:pl-bg-black/[0.7]\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 dark:!pl-bg-dark-3`\r\n : \"before:pl-hidden\"\r\n } \r\n ${type !== \"modal\" && \"pl-absolute pl-bottom-full pl-overflow-auto no-scrollbar\"}\r\n ${classNames}\r\n `}\r\n style={{\r\n maxHeight: isFullScreen\r\n ? \"unset\"\r\n : maxHeightOnTouchMove\r\n ? maxHeightOnTouchMove\r\n : maxHeight\r\n ? maxHeight\r\n : conditions(ConditionName.isComplexPortrait)\r\n ? 0\r\n : \"\",\r\n zIndex: zIndex.popoverContent,\r\n ...styles\r\n }}\r\n ref={ref}\r\n >\r\n <>\r\n {isHeader && (\r\n <div\r\n onTouchMove={isHasCatchUpLineOnTop ? handleTouchMove : () => { }}\r\n onTouchEndCapture={isHasCatchUpLineOnTop ? handleTouchEnd : () => { }}\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 {isHeader && (\r\n <div\r\n className={`pl-mb-4 pl-border-b pl-border-secondary-300 dark:pl-border-secondary-400 pl-mx-4 ${headerClassName}`}\r\n >\r\n {customHeader ? (\r\n customHeader\r\n ) : (\r\n <div className=\"pl-flex pl-items-center pl-justify-between pl-py-[19px]\">\r\n <p className=\"pl-text-[18px] pl-text-black dark:pl-text-white pl-font-bold\">{headerTitle}</p>\r\n {showCloseIcon && (\r\n <CloseIcon\r\n className={`pl-cursor-pointer pl-stroke-secondary-400 dark:pl-stroke-dark-5`}\r\n onClick={onClose}\r\n />\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n <>{pinContent}</>\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>{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, showMiniPlayer } }) => ({\r\n qualityLevels,\r\n manualQuality,\r\n autoQuality,\r\n showMiniPlayer\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, () => {\r\n if (qualityLevelsPopover) dispatch(setQualityLevelsPopover(false));\r\n });\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\">\r\n {qualityLevels.map((qualityLevel: number, index: number) => (\r\n <li\r\n key={index}\r\n className={`pl-flex pl-items-center pl-text-[14px] pl-font-medium pl-rounded-[4px] pl-relative pl-cursor-pointer pl-leading-6 pl-p-1 pl-pr-2 ${handleTickSelectedQuality(index - 1, qualityLevel) && \"pl-bg-primary/[0.12] !pl-cursor-default\"\r\n }`}\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-[10px]\">\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\"} pl-mr-[10px]`}>\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-px-2 pl-py-1 ${conditions(ConditionName.isTouchScreen) ? \"pl-pr-[21px]\" : \"pl-pr-[36px]\"}`}>\r\n {qualityLevel === -1 ? (\r\n <span>\r\n <span className=\"pl-text-[12px] pl-font-medium\">خودکار </span>\r\n <span className=\"pl-text-[10px] pl-font-normal pl-text-black/[0.87]\">(بر اساس سرعت اینترنت شما)</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\">\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(true))}\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 dark:!pl-bg-dark-13 ${conditions(ConditionName.isTouchScreen) ? \"!pl-fixed !pl-bottom-0 !pl-rounded-t-[12px] 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-[285px]\"} ${conditions(ConditionName.isTouchScreenLandscape) && \"pl-w-full pl-max-w-[285px]\"}`}\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={qualityLevelsRef}\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 { 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 { 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 { videoTag } from \"../../../helpers/constants\";\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\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(({ controller: { showMiniPlayer } }) => ({ showMiniPlayer }), shallowEqual);\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, () => {\r\n if (speedPopover) dispatch(setSpeedPopover(false));\r\n });\r\n\r\n useEffect(() => {\r\n if (videoTag()) videoTag().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\">\r\n {speeds.map((speed: number, index: number) => (\r\n <li\r\n key={index}\r\n className={`pl-flex pl-items-center pl-text-[14px] pl-font-medium pl-rounded-[4px] pl-relative pl-cursor-pointer pl-leading-6 pl-p-1 pl-pr-2 ${settings.speed === speed && \"pl-bg-primary/[0.12] !pl-cursor-default\"}`}\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 videoTag().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-[10px]\">\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\"} pl-mr-[10px]`}>\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-px-2 pl-py-1 pl-pr-[36px] pl-flex pl-items-center pl-gap-2\">{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\">\r\n <Image\r\n src={IMAGES.speed1}\r\n alt=\"speed-icon\"\r\n width={20}\r\n height={20}\r\n onClick={() => dispatch(setSpeedPopover(true))}\r\n onMouseOver={() => !conditions(ConditionName.isTouchScreen) && !conditions(ConditionName.showSpeedPopover) && 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-[12px] 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={speedPopover}\r\n onClose={() => dispatch(setSpeedPopover(false))}\r\n type={conditions(ConditionName.isTouchScreen) ? \"modal\" : \"popover\"}\r\n isBlurBackground={conditions(ConditionName.isTouchScreenPortrait)}\r\n ref={speedRef}\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 { 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-ml-4 !pl-text-white pl-w-full pl-max-w-max pl-text-[12px] pl-font-bold ${!conditions(ConditionName.isTouchScreenPortrait) && \"pl-mb-8\"}`}\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 Image from \"next/legacy/image\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { conditions } from \"../../../helpers/conditions/conditions\";\r\nimport { ConditionName } from \"../../../helpers/interfaces/enums\";\r\nimport { setActiveElements } from \"../../../helpers/redux/slices/controllerSlice\";\r\nimport { useAppDispatch, useAppSelector } from \"../../../helpers/redux/hooks\";\r\nimport { shallowEqual } from \"react-redux\";\r\nimport IMAGES from \"../../../images/importImages\";\r\nimport store from \"../../../helpers/redux/store\";\r\nimport { notShowingLoaderTime, showLoaderTime } from \"../../../helpers/environment\";\r\n\r\nconst CheckInternet = () => {\r\n const dispatch = useAppDispatch();\r\n const { isLoading } = useAppSelector(({ controller: { isLoading } }) => ({ isLoading }), shallowEqual);\r\n\r\n const [showLoader, setShowLoader] = useState<boolean>(false);\r\n\r\n useEffect(() => {\r\n let timeout: any = null;\r\n clearTimeout(timeout);\r\n if (conditions(ConditionName.isLoading)) {\r\n timeout = setTimeout(() => {\r\n const isLoading = store.getState().controller.isLoading;\r\n if (isLoading) setShowLoader(true);\r\n },showLoaderTime)\r\n timeout = setTimeout(() => {\r\n setShowLoader(false);\r\n dispatch(setActiveElements(false));\r\n }, notShowingLoaderTime)\r\n } else {\r\n clearTimeout(timeout);\r\n setShowLoader(false);\r\n dispatch(setActiveElements(false));\r\n }\r\n\r\n return () => clearTimeout(timeout);\r\n }, [isLoading])\r\n\r\n return (\r\n <div className={`pl-absolute pl-bottom-0 pl-w-full pl-flex pl-justify-center pl-mb-[20px] animate__animated animate__faster ${showLoader ? \"animate__fadeIn\" : \"animate__fadeOut\"} ${conditions(ConditionName.showMiniPlayer) ? \"pl-z-[10]\" : \"pl-z-[-1]\"}`}>\r\n <div className=\"pl-flex pl-items-center pl-gap-3 pl-bg-background pl-w-max pl-px-[18px] pl-py-4 pl-rounded-[8px]\">\r\n <Image\r\n src={IMAGES.infoCircle}\r\n alt=\"info-circle\"\r\n width={16}\r\n height={16}\r\n />\r\n <p className=\"pl-text-[12px] pl-text-white/[0.9]\">لطفا وضعیت اینترنت خود را بررسی کنید.</p>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default CheckInternet;","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 { handleIsComplexDesktop } from \"../helpers\";\r\nimport { conditions } from \"../conditions/conditions\";\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, markersListPopover, speedPopover, qualityLevelsPopover } = store.getState().popovers;\r\n const { play } = store.getState().controller;\r\n if (!settingPopover && !markersListPopover && !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, markersListPopover, speedPopover, qualityLevelsPopover } = store.getState().popovers;\r\n if (!settingPopover && !markersListPopover && !speedPopover && !qualityLevelsPopover) dispatch(setActiveElements(false));\r\n }, activeElementsTime);\r\n } else {\r\n timeoutRef.current = setTimeout(() => {\r\n const { settingPopover, markersListPopover, speedPopover, qualityLevelsPopover } = store.getState().popovers;\r\n if (!settingPopover && !markersListPopover && !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, markersListPopover, speedPopover, qualityLevelsPopover } = store.getState().popovers;\r\n if (isEnded) dispatch(setActiveElements(true));\r\n else if (!settingPopover && !markersListPopover && !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","\"use client\";\r\n\r\nimport { shallowEqual } from \"react-redux\";\r\nimport VideoArea from \"../../custom-components/videoArea/videoArea\";\r\nimport { useAppSelector } from \"../../../helpers/redux/hooks\";\r\nimport useGetData from \"../../../helpers/hooks/useGetData/useGetData\";\r\nimport useHandleScroll from \"../../../helpers/hooks/useHandleScroll\";\r\nimport { conditions } from \"../../../helpers/conditions/conditions\";\r\nimport { ConditionName } from \"../../../helpers/interfaces/enums\";\r\nimport NotActive from \"../../custom-components/notActive/notActive\";\r\nimport { handleApplyContinuousPlayback } from \"../../../helpers/redux/actions/user.actions\";\r\n\r\nconst LiveAndVodPlayer = () => {\r\n useAppSelector(({ videoData: { params, details, isFetchDetails, isValidAddress } }) => ({params,details, isFetchDetails, isValidAddress}),shallowEqual );\r\n\r\n useGetData();\r\n handleApplyContinuousPlayback();\r\n useHandleScroll();\r\n\r\n return (\r\n <>\r\n {conditions(ConditionName.isFetchDetails) ? (\r\n conditions(ConditionName.isValidAddress) ? (\r\n <div\r\n className={`pl-max-h-[100dvh] pl-bg-dark-1 ${!conditions(ConditionName.isTouchScreen) && !conditions(ConditionName.isFullScreen) && \"!pl-rounded-[12px]\"}`}\r\n >\r\n <VideoArea />\r\n </div>\r\n ) : (\r\n <div className={`pl-w-full pl-aspect-video`}>\r\n <NotActive />\r\n </div>\r\n )\r\n ) : (\r\n <div className=\"pl-w-full pl-aspect-video pl-flex pl-items-center pl-justify-center\"></div>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport default LiveAndVodPlayer;\r\n","import useGetDetails from \"./useGetDetails\";\r\n\r\nconst useGetData = () => {\r\n useGetDetails();\r\n};\r\n\r\nexport default useGetData;\r\n","import { useEffect } from \"react\";\r\nimport { conditions } from \"../../conditions/conditions\";\r\nimport { shallowEqual } from \"react-redux\";\r\nimport { useAppSelector } from \"../../redux/hooks\";\r\nimport { ConditionName } from \"../../interfaces/enums\";\r\nimport { getLiveAndVodDetails } from \"../../redux/actions/videoData.actions\";\r\n\r\nconst useGetDetails = () => {\r\n const { params } = useAppSelector(\r\n ({ videoData: { params } }) => ({ params }),\r\n shallowEqual\r\n );\r\n useAppSelector(({ controller: { isEnded } }) => ({ isEnded }), shallowEqual);\r\n\r\n useEffect(() => {\r\n if (conditions(ConditionName.getDetails)) getLiveAndVodDetails();\r\n }, [params.id, params.type]);\r\n};\r\n\r\nexport default useGetDetails;\r\n","import { useEffect } from \"react\";\r\nimport { conditions } from \"../conditions/conditions\";\r\n\r\nimport { shallowEqual } from \"react-redux\";\r\nimport { useAppSelector } from \"../redux/hooks\";\r\nimport store from \"../redux/store\";\r\nimport { ConditionName } from \"../interfaces/enums\";\r\nimport { setShowMiniPlayer } from \"../redux/slices/controllerSlice\";\r\n\r\nconst useHandleScroll = () => {\r\n useAppSelector(({ videoData: { params } }) => ({ params }), shallowEqual);\r\n useAppSelector(({ controller: { showMiniPlayer } }) => ({ showMiniPlayer }), shallowEqual);\r\n\r\n useEffect(() => {\r\n const { params } = store.getState().videoData;\r\n const handleScroll = () => {\r\n const videoAreaElement = document.getElementById(conditions(ConditionName.showMiniPlayer) ? \"black-video-area\" : \"video-area\")!;\r\n if (conditions(ConditionName.hasScrollElementId) && !!videoAreaElement && !document.pictureInPictureElement) {\r\n const dispatch = store.dispatch;\r\n const videoAreaTopPosition = videoAreaElement.getBoundingClientRect().top;\r\n if (videoAreaTopPosition < 0) dispatch(setShowMiniPlayer(true));\r\n else dispatch(setShowMiniPlayer(false));\r\n }\r\n };\r\n let scrollElement: any;\r\n if (conditions(ConditionName.hasScrollElementId) && !document.pictureInPictureElement) {\r\n scrollElement = document.getElementById(params.scrollElementId!);\r\n if (scrollElement) scrollElement.addEventListener(\"scroll\", handleScroll);\r\n }\r\n return () => (conditions(ConditionName.hasScrollElementId) && scrollElement && !document.pictureInPictureElement) && scrollElement.removeEventListener(\"scroll\", handleScroll);\r\n }, []);\r\n};\r\n\r\nexport default useHandleScroll;\r\n","\"use client\";\r\n\r\nimport Image from \"next/legacy/image\";\r\nimport IMAGES from \"../../../images/importImages\";\r\n\r\nconst NotActive = () => {\r\n return (\r\n <div className={`pl-w-full pl-h-full pl-rounded-2xl pl-flex pl-flex-col pl-justify-center pl-items-center`}>\r\n <div className=\"pl-flex pl-justify-center\">\r\n <Image \r\n src={IMAGES.notFound}\r\n alt=\"\"\r\n width={120}\r\n height={70}\r\n />\r\n </div>\r\n <h1 className=\"pl-text-[12px] pl-font-medium pl-text-black/[0.87] pl-mt-4 pl-mb-2\">ویدیویی برای نمایش وجود نداره</h1>\r\n <p className=\"pl-text-[12px] pl-font-medium pl-text-black/[0.50]\">میتونید ویدیوهای مشابه با اون رو مشاهده کنید.</p>\r\n </div>\r\n );\r\n};\r\n\r\nexport default NotActive;\r\n"]}
|