cafe-video-player 3.0.12 → 3.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/README.md +2 -0
  2. package/VideoHighLighter-OBD2IGA6.js +2 -0
  3. package/VideoHighLighter-OBD2IGA6.js.map +1 -0
  4. package/VideoHighLighter-T2LVURER.mjs +2 -0
  5. package/VideoHighLighter-T2LVURER.mjs.map +1 -0
  6. package/backwardForward-S6ZHVC75.js +2 -0
  7. package/backwardForward-S6ZHVC75.js.map +1 -0
  8. package/backwardForward-ZUVULGGJ.mjs +2 -0
  9. package/backwardForward-ZUVULGGJ.mjs.map +1 -0
  10. package/chunk-2DV7FRU5.mjs +2 -0
  11. package/chunk-2DV7FRU5.mjs.map +1 -0
  12. package/chunk-4QMWBTB5.mjs +2 -0
  13. package/chunk-4QMWBTB5.mjs.map +1 -0
  14. package/chunk-4XKL6TLO.mjs +2 -0
  15. package/chunk-4XKL6TLO.mjs.map +1 -0
  16. package/chunk-73KLK4QU.mjs +2 -0
  17. package/chunk-73KLK4QU.mjs.map +1 -0
  18. package/chunk-AK5TFAW3.js +2 -0
  19. package/chunk-AK5TFAW3.js.map +1 -0
  20. package/chunk-AN6JAJSI.js +2 -0
  21. package/chunk-AN6JAJSI.js.map +1 -0
  22. package/chunk-BC4366GN.mjs +3 -0
  23. package/chunk-BC4366GN.mjs.map +1 -0
  24. package/chunk-BFE2RKVK.js +3 -0
  25. package/chunk-BFE2RKVK.js.map +1 -0
  26. package/chunk-BNVNO5NH.js +2 -0
  27. package/chunk-BNVNO5NH.js.map +1 -0
  28. package/chunk-CCO6GDG2.mjs +3 -0
  29. package/chunk-CCO6GDG2.mjs.map +1 -0
  30. package/chunk-COYFW7R4.js +3 -0
  31. package/chunk-COYFW7R4.js.map +1 -0
  32. package/chunk-DJ6KVZRK.js +2 -0
  33. package/chunk-DJ6KVZRK.js.map +1 -0
  34. package/chunk-FXAWDALE.mjs +2 -0
  35. package/chunk-FXAWDALE.mjs.map +1 -0
  36. package/chunk-GYUGYOVP.mjs +2 -0
  37. package/chunk-GYUGYOVP.mjs.map +1 -0
  38. package/chunk-IBV5SFIT.js +2 -0
  39. package/chunk-IBV5SFIT.js.map +1 -0
  40. package/chunk-OGCKLRYP.js +2 -0
  41. package/chunk-OGCKLRYP.js.map +1 -0
  42. package/chunk-PKXJEXKI.mjs +2 -0
  43. package/chunk-PKXJEXKI.mjs.map +1 -0
  44. package/chunk-QM3W7EYS.js +2 -0
  45. package/chunk-QM3W7EYS.js.map +1 -0
  46. package/chunk-SKRDEKL2.mjs +9 -0
  47. package/chunk-SKRDEKL2.mjs.map +1 -0
  48. package/chunk-U3VFRU6R.js +3 -0
  49. package/chunk-U3VFRU6R.js.map +1 -0
  50. package/chunk-WFHA2FPC.js +9 -0
  51. package/chunk-WFHA2FPC.js.map +1 -0
  52. package/chunk-WU4GN63P.mjs +2 -0
  53. package/chunk-WU4GN63P.mjs.map +1 -0
  54. package/chunk-XKRBXZUB.mjs +3 -0
  55. package/chunk-XKRBXZUB.mjs.map +1 -0
  56. package/chunk-Y7BIYTQP.mjs +2 -0
  57. package/chunk-Y7BIYTQP.mjs.map +1 -0
  58. package/chunk-ZSSCZTW3.js +2 -0
  59. package/chunk-ZSSCZTW3.js.map +1 -0
  60. package/chunk-ZWGZGWEB.js +2 -0
  61. package/chunk-ZWGZGWEB.js.map +1 -0
  62. package/index.js +1 -7307
  63. package/index.js.map +1 -1
  64. package/index.mjs +1 -7292
  65. package/index.mjs.map +1 -1
  66. package/nonStaticVideoTag-6OHMSJEH.js +2 -0
  67. package/nonStaticVideoTag-6OHMSJEH.js.map +1 -0
  68. package/nonStaticVideoTag-J6JNATM6.mjs +2 -0
  69. package/nonStaticVideoTag-J6JNATM6.mjs.map +1 -0
  70. package/notActive-DRH5BEL5.js +2 -0
  71. package/notActive-DRH5BEL5.js.map +1 -0
  72. package/notActive-DSDPVSW4.mjs +2 -0
  73. package/notActive-DSDPVSW4.mjs.map +1 -0
  74. package/package.json +52 -51
  75. package/staticPlayer-2IO6XEKM.mjs +2 -0
  76. package/staticPlayer-2IO6XEKM.mjs.map +1 -0
  77. package/staticPlayer-TNS4JFRP.js +2 -0
  78. package/staticPlayer-TNS4JFRP.js.map +1 -0
  79. package/staticVideoTag-2YYZBRPY.mjs +2 -0
  80. package/staticVideoTag-2YYZBRPY.mjs.map +1 -0
  81. package/staticVideoTag-VLNCYNKV.js +2 -0
  82. package/staticVideoTag-VLNCYNKV.js.map +1 -0
  83. package/videoArea-2F2NDD76.mjs +2 -0
  84. package/videoArea-2F2NDD76.mjs.map +1 -0
  85. package/videoArea-35ABV3CM.js +2 -0
  86. package/videoArea-35ABV3CM.js.map +1 -0
  87. package/videoPlayerStyles.css +0 -4
  88. package/vodPlayer-337TYSU4.js +2 -0
  89. package/vodPlayer-337TYSU4.js.map +1 -0
  90. package/vodPlayer-JTS4WVOB.mjs +2 -0
  91. package/vodPlayer-JTS4WVOB.mjs.map +1 -0
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../node_modules/tsup/assets/cjs_shims.js","../src/videoPlayerLibrary/helpers/redux/slices/controllerSlice.ts","../src/videoPlayerLibrary/helpers/redux/slices/videoDataSlice.ts","../src/videoPlayerLibrary/helpers/redux/slices/popoversSlice.ts","../src/videoPlayerLibrary/helpers/interfaces/enums.ts","../src/videoPlayerLibrary/helpers/conditions/conditions.ts","../src/videoPlayerLibrary/helpers/constants.ts","../src/videoPlayerLibrary/helpers/configs/nextConfigs/next.config.js","../src/videoPlayerLibrary/helpers/configs/npmPackage/npmPackage.ts","../src/videoPlayerLibrary/helpers/services/baseUrl.ts","../src/videoPlayerLibrary/helpers/services/services.ts","../src/videoPlayerLibrary/helpers/logs/fluentdLogger.ts","../src/videoPlayerLibrary/helpers/logs/logs.ts","../src/videoPlayerLibrary/helpers/errorBoundary/errorBoundaryFunctions.ts","../src/videoPlayerLibrary/helpers/services/apiCaller.ts","../src/videoPlayerLibrary/helpers/redux/slices/miniPlayerSlice.ts","../src/videoPlayerLibrary/helpers/redux/actions/controller.actions.ts","../src/videoPlayerLibrary/helpers/helpers.ts","../src/videoPlayerLibrary/helpers/redux/slices/userSlice.ts","../src/videoPlayerLibrary/helpers/redux/store.ts","../src/videoPlayerLibrary/helpers/redux/hooks.ts","../src/videoPlayerLibrary/helpers/getDetailsConfigs.ts","../src/videoPlayerLibrary/helpers/redux/actions/videoData.actions.ts","../src/videoPlayerLibrary/helpers/hooks/useKeyPress.tsx","../src/videoPlayerLibrary/components/custom-components/loader/loader.tsx","../src/videoPlayerLibrary/components/custom-components/footer/controllbar/controllbarTooltip.tsx","../src/videoPlayerLibrary/images/importImages.ts","../src/videoPlayerLibrary/components/custom-components/soundVolume/soundVolume.tsx","../src/videoPlayerLibrary/components/custom-components/fullScreen/fullScreen.tsx","../src/videoPlayerLibrary/components/custom-components/playPause/playPause.tsx","../src/videoPlayerLibrary/components/custom-components/soundVolumeAlert/SoundVolumeAlert.tsx","../src/videoPlayerLibrary/components/custom-components/lockUnlock/lock.tsx","../src/videoPlayerLibrary/components/custom-components/header/header.tsx","../src/videoPlayerLibrary/helpers/environment.ts","../src/videoPlayerLibrary/components/custom-components/main/main.tsx","../src/videoPlayerLibrary/helpers/redux/actions/progressbar.actions.ts","../src/videoPlayerLibrary/components/custom-components/tooltip/tooltip.tsx","../src/videoPlayerLibrary/helpers/hooks/useOnClickOutside.tsx","../src/videoPlayerLibrary/components/custom-components/emoji/emoji.tsx","../src/videoPlayerLibrary/components/custom-components/footer/progressbar/markers/markers.tsx","../src/videoPlayerLibrary/components/custom-components/footer/progressbar/progressbar.tsx","../src/videoPlayerLibrary/components/custom-components/popover/popover.tsx","../src/videoPlayerLibrary/components/custom-components/qualityLevels/qualityLevels.tsx","../src/videoPlayerLibrary/components/icon-components/speed.tsx","../src/videoPlayerLibrary/components/custom-components/speed/speed.tsx","../src/videoPlayerLibrary/components/custom-components/subtitles/subtitleSettingMenu.tsx","../src/videoPlayerLibrary/components/icon-components/audioIcon.tsx","../src/videoPlayerLibrary/components/custom-components/multiAudio/MultiAudio.tsx","../src/videoPlayerLibrary/components/custom-components/subtitles/subtitleIcon.tsx","../src/videoPlayerLibrary/components/custom-components/settings/settings.tsx","../src/videoPlayerLibrary/components/custom-components/elapsedTime/elapsedTime.tsx","../src/videoPlayerLibrary/components/custom-components/footer/controllbar/controllbar.tsx","../src/videoPlayerLibrary/components/custom-components/subtitles/displaySubtitle.tsx","../src/videoPlayerLibrary/components/custom-components/footer/footer.tsx","../src/videoPlayerLibrary/helpers/redux/actions/playerCore.actions.ts","../src/videoPlayerLibrary/helpers/hooks/useJumpToCurrentTime.tsx","../src/videoPlayerLibrary/helpers/hooks/useHideSubtitle.tsx","../src/videoPlayerLibrary/helpers/hooks/useAppendSubtitle.tsx","../src/videoPlayerLibrary/helpers/hooks/useActiveSubtitleAutomatic.tsx","../src/videoPlayerLibrary/components/custom-components/videoTag/staticVideoTag.tsx","../src/videoPlayerLibrary/helpers/redux/actions/user.actions.ts","../src/videoPlayerLibrary/helpers/hooks/useContinuousPlaybackInterval.tsx","../src/videoPlayerLibrary/helpers/hooks/usePingPong.tsx","../src/videoPlayerLibrary/helpers/hooks/useBeforeUnload.tsx","../src/videoPlayerLibrary/components/custom-components/videoTag/nonStaticVideoTag.tsx","../src/videoPlayerLibrary/components/custom-components/videoTag/videoTag.tsx","../src/videoPlayerLibrary/helpers/hooks/useFullScreen.tsx","../src/videoPlayerLibrary/helpers/hooks/useActiveInActive.tsx","../src/videoPlayerLibrary/helpers/hooks/useHandleResize.tsx","../src/videoPlayerLibrary/components/icon-components/closeIcon.tsx","../src/videoPlayerLibrary/components/custom-components/backwardForward/backwardForward.tsx","../src/videoPlayerLibrary/components/custom-components/videoArea/videoArea.tsx","../src/videoPlayerLibrary/components/videoPlayer/staticPlayer/staticPlayer.tsx","../src/videoPlayerLibrary/helpers/hooks/useGetData/useGetDetails.tsx","../src/videoPlayerLibrary/helpers/hooks/useGetData/useGetData.tsx","../src/videoPlayerLibrary/components/custom-components/notActive/notActive.tsx","../src/videoPlayerLibrary/components/videoPlayer/vodPlayer/vodPlayer.tsx","../src/videoPlayerLibrary/components/custom-components/skeleton/Skeleton.tsx","../src/videoPlayerLibrary/components/videoPlayer/videoHighLighter/VideoHighLighter.tsx","../src/videoPlayerLibrary/index.ts","../src/videoPlayerLibrary/videoPlayerLibrary.tsx","../src/videoPlayerLibrary/components/videoPlayer/videoPlayer.tsx","../src/videoPlayerLibrary/helpers/hooks/useHandleParams.tsx","../src/videoPlayerLibrary/helpers/hooks/useHandleKeyPress.tsx","../src/videoPlayerLibrary/components/custom-components/advertisement/Advertisement.tsx","../src/videoPlayerLibrary/helpers/errorBoundary/errorBoundary.tsx","../src/videoPlayerLibrary/miniPlayerLibrary.tsx","../src/videoPlayerLibrary/components/custom-components/miniPlayer/miniPlayer.tsx","../src/videoPlayerLibrary/components/custom-components/playPause/miniPlayerPlayPause.tsx","../src/videoPlayerLibrary/components/custom-components/miniPlayer/videoTag/videoTag.tsx","../src/videoPlayerLibrary/components/custom-components/miniPlayer/videoTag/miniPlayerNonStaticVideoTag.tsx","../src/videoPlayerLibrary/components/custom-components/miniPlayer/videoTag/miniPlayerStaticVideoTag.tsx"],"sourcesContent":["// Shim globals in cjs bundle\n// There's a weird bug that esbuild will always inject importMetaUrl\n// if we export it as `const importMetaUrl = ... __filename ...`\n// But using a function will not cause this issue\n\nconst getImportMetaUrl = () => \n typeof document === \"undefined\" \n ? new URL(`file:${__filename}`).href \n : (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT') \n ? document.currentScript.src \n : new URL(\"main.js\", document.baseURI).href;\n\nexport const importMetaUrl = /* @__PURE__ */ getImportMetaUrl()\n","import { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\nimport { IControllerSlice } from \"../../interfaces/interfaces\";\n\nconst ControllerSliceState: IControllerSlice = {\n play: false,\n isAutoPlay: true,\n duration: 0,\n currentTime: 0,\n qualityLevels: [],\n manualQuality: undefined,\n autoQuality: undefined,\n activeElements: true,\n isLoading: true,\n isFullScreen: false,\n bufferedTimeWidth: 0,\n firstPlay: true,\n activePointerProgressBar: false,\n delayTurnOffControlbar: false,\n canPlayVideo: false,\n lock: false,\n isEnded: false,\n tooltipTime: 0,\n firstMute: false,\n};\n\nexport const controllerSlice = createSlice({\n name: \"controller\",\n initialState: ControllerSliceState,\n reducers: {\n setPlay: (state, action: PayloadAction<boolean>) => {\n state.play = action.payload;\n },\n setIsAutoPlay: (state, action: PayloadAction<boolean>) => {\n state.isAutoPlay = action.payload;\n },\n setDuration: (state, action: PayloadAction<number>) => {\n state.duration = action.payload;\n },\n setCurrentTime: (state, action: PayloadAction<number>) => {\n state.currentTime = action.payload;\n },\n setManualQuality: (state, action: PayloadAction<number | undefined>) => {\n state.manualQuality = action.payload;\n },\n setAutoQuality: (state, action: PayloadAction<number | undefined>) => {\n state.autoQuality = action.payload;\n },\n setQualityLevels: (state, action: PayloadAction<any[]>) => {\n state.qualityLevels = action.payload;\n },\n setActiveElements: (state, action: PayloadAction<boolean>) => {\n state.activeElements = action.payload;\n },\n setIsLoading: (state, action: PayloadAction<boolean>) => {\n state.isLoading = action.payload;\n },\n setIsFullScreen: (state, action: PayloadAction<boolean>) => {\n state.isFullScreen = action.payload;\n },\n setBufferedTimeWidth: (state, action: PayloadAction<number>) => {\n state.bufferedTimeWidth = action.payload;\n },\n setFirstPlay: (state, action: PayloadAction<boolean>) => {\n state.firstPlay = action.payload;\n },\n setActivePointerProgressBar: (state, action: PayloadAction<boolean>) => {\n state.activePointerProgressBar = action.payload;\n },\n setDelayTurnOffControlbar: (state, action: PayloadAction<boolean>) => {\n state.delayTurnOffControlbar = action.payload;\n },\n setCanPlayVideo: (state, action: PayloadAction<boolean>) => {\n state.canPlayVideo = action.payload;\n },\n setLock: (state, action: PayloadAction<boolean>) => {\n state.lock = action.payload;\n },\n setIsEnded: (state, action: PayloadAction<boolean>) => {\n state.isEnded = action.payload;\n },\n setTooltipTime: (state, action: PayloadAction<number>) => {\n state.tooltipTime = action.payload;\n },\n setFirstMute: (state, action: PayloadAction<boolean>) => {\n state.firstMute = action.payload;\n },\n setClearControllerSlice: () => {\n return ControllerSliceState;\n },\n },\n});\n\nexport const {\n setPlay,\n setIsAutoPlay,\n setDuration,\n setCurrentTime,\n setQualityLevels,\n setAutoQuality,\n setActiveElements,\n setIsLoading,\n setIsFullScreen,\n setBufferedTimeWidth,\n setFirstPlay,\n setActivePointerProgressBar,\n setDelayTurnOffControlbar,\n setManualQuality,\n setCanPlayVideo,\n setLock,\n setIsEnded,\n setTooltipTime,\n setClearControllerSlice,\n setFirstMute,\n} = controllerSlice.actions;\nexport default controllerSlice.reducer;\n","import { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\nimport {\n IVideoElementSizeInfo,\n IDetails,\n IVideoDataSlice,\n IParams,\n IMarker,\n ISubtitle,\n} from \"../../interfaces/interfaces\";\n\nexport const VideoDataSliceState: IVideoDataSlice = {\n details: {\n stream_link: \"\",\n type: \"\",\n banner: \"\",\n id: undefined,\n title: undefined,\n vtt: undefined,\n vtt_mobile: undefined,\n user_id: null,\n content_id: undefined,\n content_type: null,\n duration: 0,\n subtitles: undefined,\n },\n params: {\n type: \"\",\n id: \"\",\n bannerAlt: \"\",\n fullscreen: \"\",\n autoplay: \"\",\n banner: \"\",\n provider: \"cafevdo\",\n onFinished: undefined,\n onPlay: undefined,\n onPause: undefined,\n playStatus: undefined,\n currentTime: undefined,\n daaniHashCode: undefined,\n advertisement: undefined,\n activeSubtitle: \"fa\",\n vhl_progress: 0,\n },\n markers: [],\n videoElementSizeInfo: {\n bottom: 0,\n top: 0,\n right: 0,\n left: 0,\n width: 0,\n height: 0,\n },\n isFetchDetails: false,\n isValidAddress: false,\n videoTimelines: [],\n isReady: false,\n rawSubtitles: undefined,\n subtitles: [],\n selectedSubtitle: undefined,\n subtitleText: undefined,\n multiAudio: [],\n selectedAudioId: 0,\n hiddenAd: false,\n};\n\nexport const videoDataSlice = createSlice({\n name: \"videoData\",\n initialState: VideoDataSliceState,\n reducers: {\n setInfo: (state, action: PayloadAction<IDetails>) => {\n state.details = action.payload;\n },\n setPlayerParams: (state, action: PayloadAction<IParams>) => {\n state.params = action.payload;\n },\n setMarkers: (state, action: PayloadAction<IMarker[]>) => {\n state.markers = action.payload;\n },\n setVideoElementSizeInfo: (\n state,\n action: PayloadAction<IVideoElementSizeInfo>\n ) => {\n state.videoElementSizeInfo = action.payload;\n },\n setIsFetchDetails: (state, action: PayloadAction<boolean>) => {\n state.isFetchDetails = action.payload;\n },\n setIsValidAddress: (state, action: PayloadAction<boolean>) => {\n state.isValidAddress = action.payload;\n },\n setVideoTimelines: (state, action: PayloadAction<number[]>) => {\n state.videoTimelines = action.payload;\n },\n setIsReady: (state, action: PayloadAction<boolean>) => {\n state.isReady = action.payload;\n },\n setRawSubtitles: (\n state,\n action: PayloadAction<ISubtitle[] | null | undefined>\n ) => {\n state.rawSubtitles = action.payload;\n },\n setSubtitles: (state, action: PayloadAction<TextTrack[]>) => {\n state.subtitles = action.payload;\n },\n setSelectedSubtitle: (state, action: PayloadAction<any>) => {\n state.selectedSubtitle = action.payload;\n },\n setSubtitleText: (state, action: PayloadAction<string>) => {\n state.subtitleText = action.payload;\n },\n setMultiAudio: (state, action: PayloadAction<any>) => {\n state.multiAudio = JSON.parse(JSON.stringify(action.payload));\n },\n setSelectedAudioId: (state, action: PayloadAction<number>) => {\n state.selectedAudioId = action.payload;\n },\n setHiddenAd: (state, action: PayloadAction<boolean>) => {\n state.hiddenAd = action.payload;\n },\n setClearVideoDataSlice: (state) => {\n return (state = VideoDataSliceState);\n },\n },\n});\n\nexport const {\n setInfo,\n setPlayerParams,\n setVideoElementSizeInfo,\n setMarkers,\n setIsFetchDetails,\n setIsValidAddress,\n setVideoTimelines,\n setIsReady,\n setRawSubtitles,\n setSubtitles,\n setSubtitleText,\n setSelectedSubtitle,\n setMultiAudio,\n setSelectedAudioId,\n setHiddenAd,\n setClearVideoDataSlice,\n} = videoDataSlice.actions;\nexport default videoDataSlice.reducer;\n","import { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\nimport { IPopoversSlice } from \"../../interfaces/interfaces\";\n\nconst PopOversSliceState: IPopoversSlice = {\n settingPopover: false,\n speedPopover: false,\n qualityLevelsPopover: false,\n markersListPopover: false,\n multiAudioPopover: false,\n};\nexport const popoversSlice = createSlice({\n name: \"popover\",\n initialState: PopOversSliceState,\n reducers: {\n setSettingPopover: (state, action: PayloadAction<boolean>) => {\n state.settingPopover = action.payload;\n },\n setSpeedPopover: (state, action: PayloadAction<boolean>) => {\n state.speedPopover = action.payload;\n },\n setQualityLevelsPopover: (state, action: PayloadAction<boolean>) => {\n state.qualityLevelsPopover = action.payload;\n },\n setMarkersListPopover: (state, action: PayloadAction<boolean>) => {\n state.markersListPopover = action.payload;\n },\n setMultiAudioPopover: (state, action: PayloadAction<boolean>) => {\n state.multiAudioPopover = action.payload;\n },\n setClearPopoversSlice: (state) => {\n state.settingPopover = false;\n state.speedPopover = false;\n state.qualityLevelsPopover = false;\n state.markersListPopover = false;\n state.multiAudioPopover = false;\n },\n },\n});\n\nexport const { setSettingPopover, setSpeedPopover, setQualityLevelsPopover, setMarkersListPopover, setMultiAudioPopover, setClearPopoversSlice } = popoversSlice.actions;\n\nexport default popoversSlice.reducer;\n","export const enum zIndex {\n vttDisable = -2,\n videoPlayer,\n videoOpacity,\n backwardForwardInActive,\n mainIcons,\n footer,\n vtt,\n markers,\n videoPlayerInFullScreen = 1000,\n popoverBlurBackground,\n backwardForwardActive,\n miniPlayer,\n popoverContent,\n maxPopover,\n videoPlayerInPictureInPicture,\n}\n\nexport const enum SettingSections {\n main = \"main\",\n qualityLevels = \"qualityLevels\",\n speed = \"speed\",\n subtitles = \"subtitles\",\n multiAudio = \"multiAudio\",\n}\n\nexport const enum PlayerTypes {\n static = \"static\",\n vod = \"vod\",\n}\n\nexport const enum ConditionName {\n showHeader = \"showHeader\",\n showMain = \"showMain\",\n showFooter = \"showFooter\",\n showTouchVolumeBrightness = \"showTouchVolumeBrightness\",\n showBackwardForward = \"showBackwardForward\",\n showTitle = \"showTitle\",\n showSettingPopover = \"showSettingPopover\",\n showSpeedPopover = \"showSpeedPopover\",\n showQualityLevelsPopover = \"showQualityLevelsPopover\",\n showSettingIcon = \"showSettingIcon\",\n showBanner = \"showBanner\",\n showProgressbar = \"showProgressbar\",\n showPictureInPicture = \"showPictureInPicture\",\n showSubtitle = \"showSubtitle\",\n showMarkerListPopover = \"showMarkerListPopover\",\n hidePopovers = \"hidePopovers\",\n isLandscape = \"isLandscape\",\n isTouchScreen = \"isTouchScreen\",\n isTouchScreenPortrait = \"isTouchScreenPortrait\",\n isTouchScreenLandscape = \"isTouchScreenLandscape\",\n isActiveElements = \"isActiveElements\",\n isPlay = \"isPlay\",\n isPlayMiniPlayer = \"isPlayMiniPlayer\",\n isFirstPlay = \"isFirstPlay\",\n isFirstMutePlay = \"isFirstMutePlay\",\n isLock = \"isLock\",\n isIOS = \"isIOS\",\n isLoading = \"isLoading\",\n isStaticFormat = \"isStaticFormat\",\n isEnded = \"isEnded\",\n isAutoPlay = \"isAutoPlay\",\n isFullScreen = \"isFullScreen\",\n isValidAddress = \"isValidAddress\",\n isFetchDetails = \"isFetchDetails\",\n isAutoQuality = \"isAutoQuality\",\n isPressKeySpace = \"isPressKeySpace\",\n isPressKeyI = \"isPressKeyI\",\n isPressKeyF = \"isPressKeyF\",\n isPressKeyS = \"isPressKeyS\",\n isPressKeyArrowRight = \"isPressKeyArrowRight\",\n isPressKeyArrowLeft = \"isPressKeyArrowLeft\",\n isPressKeyM = \"isPressKeyM\",\n isPressKeyC = \"isPressKeyC\",\n isSendTimelineLog = \"isSendTimelineLog\",\n isReady = \"isReady\",\n isSelectedSubtitle = \"isSelectedSubtitle\",\n isMiniPlayerAndMainPlayerSame = \"isMiniPlayerAndMainPlayerSame\",\n isVideoHighLighter = \"isVideoHighLighter\",\n hasTitle = \"hasTitle\",\n hasBanner = \"hasBanner\",\n streamLink = \"streamLink\",\n hasManualQuality = \"hasManualQuality\",\n hasSound = \"hasSound\",\n hasAutoPlay = \"hasAutoPlay\",\n hasFullScreenParams = \"hasFullScreenParams\",\n hasOnFinishedParams = \"hasOnFinishedParams\",\n hasSubtitles = \"hasSubtitles\",\n hasMultipleSubtitles = \"hasMultipleSubtitles\",\n hasSubtitlesInDetails = \"hasSubtitlesInDetails\",\n hasActiveCue = \"hasActiveCue\",\n hasOnPlayParams = \"hasOnPlayParams\",\n hasOnPauseParams = \"hasOnPauseParams\",\n hasPlayStatusParams = \"hasPlayStatusParams\",\n hasMiniPlayer = \"hasMiniPlayer\",\n hasCurrentTimeParams = \"hasCurrentTimeParams\",\n hasMarkers = \"hasMarkers\",\n hasSubtitlesInParams = \"hasSubtitlesInParams\",\n hasOnChangeCurrentTime = \"hasOnChangeCurrentTime\",\n hasMultiAudio = \"hasMultiAudio\",\n hasAdvertisement = \"hasAdvertisement\",\n hasActiveSubtitleInParams = \"hasActiveSubtitleInParams\",\n hasRawSubtitles = \"hasRawSubtitles\",\n skeletonStatusInVhl = \"skeletonStatusInVhl\",\n getDetails = \"getDetails\",\n getMarkers = \"getMarkers\",\n canPlayVideo = \"canPlayVideo\",\n setSubtitleFirstPlay = \"setSubtitleFirstPlay\",\n showSoundVolumeAlert = \"showSoundVolumeAlert\",\n}\n","import { isIOS, isTouchScreen, isTouchScreenLandscape, isTouchScreenPortrait } from \"../helpers\";\nimport { ConditionName, PlayerTypes } from \"../interfaces/enums\";\nimport store from \"../redux/store\";\n\nexport const conditions = (type: string) => {\n const { params, details, isValidAddress, isFetchDetails, isReady, rawSubtitles, subtitles, selectedSubtitle, markers, multiAudio, hiddenAd } =\n store.getState().videoData;\n const { firstPlay, lock, canPlayVideo, manualQuality, activeElements, isLoading, isEnded, isAutoPlay, play, isFullScreen, firstMute } =\n store.getState().controller;\n const { settingPopover, speedPopover, qualityLevelsPopover, markersListPopover } = store.getState().popovers;\n const { settings } = store.getState().user;\n const miniPlayer = store.getState().miniPlayer;\n\n switch (type) {\n case ConditionName.showHeader:\n return !firstPlay && canPlayVideo;\n case ConditionName.showMain:\n return !lock || firstPlay;\n case ConditionName.showFooter:\n return isTouchScreen() ? canPlayVideo && !firstPlay : canPlayVideo;\n case ConditionName.showTouchVolumeBrightness:\n return !firstPlay && isTouchScreenLandscape() && !lock && !isEnded;\n case ConditionName.showBackwardForward:\n return !firstPlay && !lock;\n case ConditionName.showTitle:\n return params.type !== \"static\" && isFullScreen && !lock;\n case ConditionName.showSettingPopover:\n return settingPopover;\n case ConditionName.showSpeedPopover:\n return speedPopover;\n case ConditionName.showQualityLevelsPopover:\n return qualityLevelsPopover;\n case ConditionName.showSettingIcon:\n return !isIOS();\n case ConditionName.showBanner:\n return firstPlay && (details.banner || params.banner);\n case ConditionName.showProgressbar:\n return true;\n case ConditionName.showPictureInPicture:\n return !isIOS() && !isTouchScreen();\n case ConditionName.showSubtitle:\n return !!selectedSubtitle;\n case ConditionName.showMarkerListPopover:\n return markersListPopover;\n case ConditionName.hidePopovers:\n return !settingPopover;\n case ConditionName.isLandscape:\n return window.innerHeight <= window.innerWidth;\n case ConditionName.isTouchScreen:\n return isTouchScreen();\n case ConditionName.isTouchScreenPortrait:\n return isTouchScreenPortrait();\n case ConditionName.isTouchScreenLandscape:\n return isTouchScreenLandscape();\n case ConditionName.isActiveElements:\n return activeElements;\n case ConditionName.isPlay:\n return play;\n case ConditionName.isPlayMiniPlayer:\n return miniPlayer.play;\n case ConditionName.isFirstPlay:\n return firstPlay;\n case ConditionName.isLock:\n return lock;\n case ConditionName.isFirstMutePlay:\n return firstMute;\n case ConditionName.isIOS:\n return isIOS();\n case ConditionName.isLoading:\n return isLoading;\n case ConditionName.isStaticFormat:\n return params.type === PlayerTypes.static;\n case ConditionName.isEnded:\n return isEnded;\n case ConditionName.isAutoPlay:\n return isAutoPlay;\n case ConditionName.isFullScreen:\n return isFullScreen;\n case ConditionName.isValidAddress:\n return params.id ? isValidAddress : !!params.stream_link;\n case ConditionName.isFetchDetails:\n return params.id ? isFetchDetails : !!params.stream_link;\n case ConditionName.isAutoQuality:\n return settings.quality === -1;\n case ConditionName.isPressKeySpace:\n return !lock;\n case ConditionName.isPressKeyI:\n return !lock && !firstPlay;\n case ConditionName.isPressKeyF:\n return (!lock && !firstPlay) || !!params.vhl_status;\n case ConditionName.isPressKeyS:\n return !lock && !firstPlay;\n case ConditionName.isPressKeyArrowRight:\n return !firstPlay && !lock;\n case ConditionName.isPressKeyArrowLeft:\n return !firstPlay && !lock;\n case ConditionName.isPressKeyM:\n return !firstPlay && !lock;\n case ConditionName.isPressKeyC:\n return !lock && !firstPlay && !!subtitles && subtitles.length > 0;\n case ConditionName.isSendTimelineLog:\n return params.type !== \"static\";\n case ConditionName.isReady:\n return isReady;\n case ConditionName.isSelectedSubtitle:\n return !!subtitles && subtitles.length > 0 && selectedSubtitle;\n case ConditionName.isMiniPlayerAndMainPlayerSame:\n return params.id === miniPlayer.params.id;\n case ConditionName.isVideoHighLighter:\n return !!params.vhl_status;\n case ConditionName.hasTitle:\n return details.title;\n case ConditionName.hasBanner:\n return details.banner;\n case ConditionName.streamLink:\n return details.stream_link || params.stream_link;\n case ConditionName.hasManualQuality:\n return manualQuality !== undefined && manualQuality !== null;\n case ConditionName.hasSound:\n return !!settings.volume;\n case ConditionName.hasAutoPlay:\n return params.autoplay === \"true\";\n case ConditionName.hasFullScreenParams:\n return params.fullscreen === \"true\";\n case ConditionName.hasOnFinishedParams:\n return !!params.onFinished;\n case ConditionName.hasSubtitles:\n return !!subtitles && subtitles.length > 0;\n case ConditionName.hasMultipleSubtitles:\n return !!subtitles && subtitles.length > 1;\n case ConditionName.hasActiveCue:\n return selectedSubtitle && selectedSubtitle.activeCues && selectedSubtitle.activeCues.length > 0;\n case ConditionName.hasOnPlayParams:\n return !!params.onPlay;\n case ConditionName.hasOnPauseParams:\n return !!params.onPause;\n case ConditionName.hasPlayStatusParams:\n return params.playStatus !== undefined;\n case ConditionName.hasMiniPlayer:\n return miniPlayer.params.id;\n case ConditionName.hasCurrentTimeParams:\n return params.currentTime !== undefined;\n case ConditionName.hasMarkers:\n return markers.length !== 0;\n case ConditionName.hasSubtitlesInParams:\n return params.subtitles && params.subtitles.length;\n case ConditionName.hasOnChangeCurrentTime:\n return !!params.onChangeCurrentTime;\n case ConditionName.hasMultiAudio:\n return multiAudio && !!multiAudio.length;\n case ConditionName.hasAdvertisement:\n return !!params.advertisement && !!params.advertisement.videoUrl && !hiddenAd;\n case ConditionName.hasActiveSubtitleInParams:\n return !!params.activeSubtitle;\n case ConditionName.hasRawSubtitles:\n return !!rawSubtitles && !!rawSubtitles.length;\n case ConditionName.skeletonStatusInVhl:\n return params.vhl_status === \"skeleton\";\n case ConditionName.getDetails:\n return !!params.type && params.id;\n case ConditionName.getMarkers:\n return String(params.type) === \"vod\" && params.id && isFetchDetails;\n case ConditionName.canPlayVideo:\n return canPlayVideo;\n case ConditionName.showSoundVolumeAlert:\n return firstMute;\n case ConditionName.setSubtitleFirstPlay:\n return (\n ((params.type === PlayerTypes.vod && details.subtitles && details.subtitles.length > 0) ||\n (params.type === PlayerTypes.static && params.subtitles && params.subtitles.length)) &&\n !firstPlay\n );\n default:\n break;\n }\n};\n","import store from \"./redux/store\";\n\nexport const mainPlayerVideoTag = () => document.getElementById(\"player-tag\") as HTMLVideoElement;\nexport const miniPlayerVideoTag = () => document.getElementById(\"mini-player-video-tag\") as HTMLVideoElement;\n\nexport const playerControllbar = () => document.getElementById(\"player-controllbar\") as any;\n\nexport const progressBar = () => document.getElementById(\"time-progress-bar\") as any;\nexport const progressArea = () => document.getElementById(\"progress-area\") as any;\nexport const progressContainer = () => document.getElementById(\"time-progress-container\") as any;\n\nexport const progressBarWidth = () => store.getState().videoData.videoElementSizeInfo.width;\n\nexport const progressTrack = () => document.getElementById(\"time-progress-area\") as any;\n","module.exports = {\n baseUrl: \"https://hamrahi.cloud\",\n fluentdUrl: \"https://hamrahi.cloud\",\n};\n","export const isNpmPackage = false;\n","const envs = require(\"../configs/nextConfigs/next.config.js\");\nconst isNpmPackage = require(\"../configs/npmPackage/npmPackage\");\n\nexport const getRestApiLiveUrl = () => (isNpmPackage ? envs.baseUrl : (process.env.baseUrl as string)) + \"/live/api\";\nexport const getFluentdUrl = () => (isNpmPackage ? envs.fluentdUrl : (process.env.fluentdUrl as string));\nexport const getEmojiUrl = () => (isNpmPackage ? envs.baseUrl : (process.env.baseUrl as string)) + \"/emoji\";\n\n","import {\n getFluentdUrl,\n getRestApiLiveUrl,\n} from \"./baseUrl\";\n\nexport const API = () => {\n return {\n vod: {\n getVodUrl: `${getRestApiLiveUrl()}/v1/live/details/vod/`,\n getMarkerUrl: (videoId:number) => `${getRestApiLiveUrl()}/v1/live/list-event/vod/${videoId}/`\n },\n videoTimelineLog: `${getFluentdUrl()}/video-timeline.log`,\n logs: `${getFluentdUrl()}/cafevideo-endpoint.log`,\n };\n};","import store from \"../redux/store\";\nimport { apiCaller } from \"../services/apiCaller\";\nimport { API } from \"../services/services\";\nimport { getUUID } from \"../helpers\";\n\nexport const sendFluentLog = (data: any) => {\n const { details, params } = store.getState().videoData;\n let _data = {\n ...data,\n timestamp: Date.now(),\n clientUUID: getUUID(),\n uuid: getUUID(),\n link: window.location.href,\n user_id: details.user_id,\n live_id: null,\n format: undefined,\n content_type: details.content_type,\n content_id: details.content_id,\n daaniHashCode: params.daaniHashCode,\n };\n apiCaller({ url: API().logs, method: \"post\", data: _data });\n};\n","import { conditions } from \"../conditions/conditions\";\nimport { mainPlayerVideoTag } from \"../constants\";\nimport { flattenObject, getUUID } from \"../helpers\";\nimport { ConditionName } from \"../interfaces/enums\";\nimport store from \"../redux/store\";\n\nexport const speedChangeLog = (selectedSpeed: Number) => {\n const { params, details } = store.getState().videoData;\n const { settings } = store.getState().user;\n return {\n category: \"speedChange\",\n previousSelectedSpeed: settings.speed,\n selectedSpeed: selectedSpeed,\n id: Number(params.id),\n type: params.type,\n src: conditions(ConditionName.streamLink) || params.id,\n provider: params.provider,\n };\n};\n\nexport const qualityChangeRequestLog = (selectedQuality: String) => {\n const { params, details } = store.getState().videoData;\n const { qualityLevels, manualQuality, autoQuality } = store.getState().controller;\n return {\n category: \"qualityChangeRequest\",\n currentPlayingQuality: `${qualityLevels[conditions(ConditionName.isAutoQuality) ? (autoQuality ?? manualQuality!) : manualQuality!]}P`,\n previousSelectedQuality: conditions(ConditionName.isAutoQuality) ? \"auto\" : `${qualityLevels[manualQuality!]}P`,\n selectedQuality: selectedQuality,\n id: Number(params.id),\n type: params.type,\n src: conditions(ConditionName.streamLink) || params.id,\n provider: params.provider,\n };\n};\n\nexport const catchUpLoadingLog = (duration: number) => {\n const { params, details } = store.getState().videoData;\n const { qualityLevels, autoQuality } = store.getState().controller;\n const { settings } = store.getState().user;\n\n return {\n category: \"catchUpLoading\",\n previousVideoTime: Number(sessionStorage.getItem(\"previousVideoTime\")),\n currentVideoTime: mainPlayerVideoTag().currentTime,\n duration: duration,\n quality: `${conditions(ConditionName.isAutoQuality) ? qualityLevels[autoQuality!] : qualityLevels[settings.quality]}P`,\n isAutoQuality: conditions(ConditionName.isAutoQuality),\n id: Number(params.id),\n type: params.type,\n src: conditions(ConditionName.streamLink) || params.id,\n provider: params.provider,\n };\n};\n\nexport const backwardForwardLog = (type: string) => {\n const { params, details } = store.getState().videoData;\n return {\n category: type === \"backward\" ? \"backward\" : \"forward\",\n id: Number(params.id),\n type: params.type,\n src: conditions(ConditionName.streamLink) || params.id,\n provider: params.provider,\n };\n};\n\nexport const fullscreenLog = (category: string) => {\n const { params, details } = store.getState().videoData;\n return {\n category: category,\n id: Number(params.id),\n type: params.type,\n src: conditions(ConditionName.streamLink) || params.id,\n };\n};\n\nexport const brightnessLog = (source: number, target: number) => {\n const { params, details } = store.getState().videoData;\n return {\n category: \"brightnessChange\",\n source: source,\n target: target,\n id: Number(params.id),\n type: params.type,\n src: conditions(ConditionName.streamLink) || params.id,\n };\n};\n\nexport const volumeLog = (source: number, target: number) => {\n const { params, details } = store.getState().videoData;\n return {\n category: \"volumeChange\",\n source: source,\n target: target,\n id: Number(params.id),\n type: params.type,\n src: conditions(ConditionName.streamLink) || params.id,\n };\n};\n\nexport const lockLog = (category: string) => {\n const { params, details } = store.getState().videoData;\n return {\n category: category,\n id: Number(params.id),\n type: params.type,\n src: conditions(ConditionName.streamLink) || params.id,\n };\n};\n\nexport const ExceptionsLog = (type: string, message: string, statusCode?: number, url?: string) => {\n return {\n category: \"player-error\",\n type,\n message,\n statusCode,\n url,\n };\n};\n\nexport const videoTimelineLog = (start: number, end: number) => {\n const { params, details } = store.getState().videoData;\n const { duration } = store.getState().controller;\n return {\n category: \"video-timeline\",\n video_id: +params.id!,\n video_type: params.type,\n start: start,\n end: end,\n watchedDuration: end - start,\n video_duration: Math.floor(duration),\n clientUUID: getUUID(),\n user_id: details.user_id,\n content_type: details.content_type,\n content_id: details.content_id,\n };\n};\n\nexport const autoQualityChangeLog = (sourceQuality: String, targetQuality: String, diffQuality: number) => {\n const { params, details } = store.getState().videoData;\n return {\n category: \"autoQualityChange\",\n sourceQuality: sourceQuality,\n targetQuality: targetQuality,\n diffQuality: diffQuality,\n id: Number(params.id),\n type: params.type,\n src: conditions(ConditionName.streamLink) || params.id,\n provider: params.provider,\n };\n};\n\nexport const pingpongLog = (startTimer: number, qualityHistory: number[]) => {\n const { params, details } = store.getState().videoData;\n return {\n category: \"pingpong\",\n id: Number(params.id),\n type: params.type,\n src: conditions(ConditionName.streamLink) || params.id,\n PingPongDuration: Number((new Date().getTime() - startTimer).toFixed(2)),\n PingPongSourceQuality: `${qualityHistory[0]}P`, // A A->B && B->A\n PingPongTargetQuality: `${qualityHistory[1]}P`, // B,\n provider: params.provider,\n };\n};\n\nexport const pausePlayLog = (isPlay: boolean) => {\n const { params, details } = store.getState().videoData;\n return {\n category: isPlay ? \"playVideo\" : \"pauseVideo\",\n id: Number(params.id),\n type: params.type,\n src: conditions(ConditionName.streamLink) || params.id,\n provider: params.provider,\n };\n};\n\nexport const initLog = (loadingTime: number, waitingTime: number, bannerLoadingTime: number, firstChunkPlayingTime: number, timerRef: any) => {\n const { params, details } = store.getState().videoData;\n const totalTime = Date.now() - timerRef.current + loadingTime + waitingTime;\n const memory = (window.performance as any).memory;\n const timing = JSON.parse(JSON.stringify((window.performance as any).timing));\n return {\n category: \"initLog\",\n id: Number(params.id),\n type: params.type,\n origin: new URL(conditions(ConditionName.streamLink) || params.id!).origin,\n src: conditions(ConditionName.streamLink) || params.id,\n loading: loadingTime,\n bannerLoading: !conditions(ConditionName.hasBanner) || bannerLoadingTime < 0 ? 0 : bannerLoadingTime,\n waiting: waitingTime,\n firstChunkPlaying: firstChunkPlayingTime < 0 ? 0 : firstChunkPlayingTime,\n totalTime: totalTime,\n provider: params.provider,\n performance: flattenObject({ memory, timing }, \"performance\"),\n userAgent: window.navigator.userAgent,\n };\n};\n\nexport const loadingLog = (waitingDuration: number, qualityLevel: number, timerRef: any, loadingCounterRef: any, videoEntranceTime: number) => {\n const { params, details } = store.getState().videoData;\n const { settings } = store.getState().user;\n const previousLoaderDiff = Date.now() - timerRef.current;\n return {\n category: \"loading\",\n id: Number(params.id),\n type: params.type,\n src: conditions(ConditionName.streamLink) || params.id,\n duration: waitingDuration,\n quality: `${qualityLevel}P`,\n isAutoQuality: conditions(ConditionName.isAutoQuality),\n previousLoaderDiff: previousLoaderDiff,\n counter: loadingCounterRef.current,\n loadingPercentile: Number((waitingDuration / previousLoaderDiff).toFixed(2)),\n videoTime: mainPlayerVideoTag().currentTime,\n videoEntranceTime: videoEntranceTime,\n speed: settings.speed,\n provider: params.provider,\n };\n};\n\nexport const subtitleLog = (language: string) => {\n const { params, details } = store.getState().videoData;\n return {\n category: \"subtitle\",\n language: language,\n id: Number(params.id),\n type: params.type,\n src: conditions(ConditionName.streamLink) || params.id,\n };\n};\n\nexport const eventMarkerClickLog = (markerId: Number, markerTime: Number, markerTitle: String, markerDescription: String, markerSticker: String) => {\n const { params, details } = store.getState().videoData;\n return {\n category: \"eventMarkerClick\",\n video_id: Number(params.id),\n markerId: markerId,\n markerTime: markerTime,\n markerTitle: markerTitle,\n markerDescription: markerDescription,\n markerSticker: markerSticker,\n type: params.type,\n src: conditions(ConditionName.streamLink) || params.id,\n provider: params.provider,\n };\n};\n","import { sendFluentLog } from \"../logs/fluentdLogger\";\nimport { ExceptionsLog } from \"../logs/logs\";\n\nexport const errorLogProvider = (data?: {type:string, message:string, statusCode?:number, url?:string}) => {\n if(data) sendFluentLog(ExceptionsLog(data.type, data.message, data.statusCode, data.url));\n}\n","import axios, { AxiosError } from \"axios\";\nimport { IApiCaller, IAxiosConfig, IRetryPolicy } from \"../interfaces/interfaces\";\nimport store from \"../redux/store\";\nimport { wait } from \"../helpers\";\nimport { errorLogProvider } from \"../errorBoundary/errorBoundaryFunctions\";\n\nexport const apiCaller: any = async ({\n url,\n method = \"GET\",\n data,\n headers,\n retryCount = 1,\n maxRetryCount = 0,\n errorMessage,\n retryPolicy,\n errorCallback,\n timeoutCount,\n}: IApiCaller) => {\n let axiosConfig: IAxiosConfig = {\n url: url,\n method: method,\n headers: {\n ...headers,\n \"Content-Type\": \"application/json\",\n },\n timeout: timeoutCount ? timeoutCount * 1000 : undefined,\n };\n if (data) {\n if (method === \"GET\")\n axiosConfig = {\n ...axiosConfig,\n params: {\n uuid: store.getState().videoData.params.uuid,\n provider: store.getState().videoData.params.provider === \"unknown\" ? undefined : store.getState().videoData.params.provider,\n ...data,\n },\n };\n else\n axiosConfig = {\n ...axiosConfig,\n data: {\n uuid: store.getState().videoData.params.uuid,\n provider: store.getState().videoData.params.provider === \"unknown\" ? undefined : store.getState().videoData.params.provider,\n ...data,\n },\n };\n } else {\n if (method === \"GET\")\n axiosConfig = {\n ...axiosConfig,\n params: {\n uuid: store.getState().videoData.params.uuid,\n provider: store.getState().videoData.params.provider === \"unknown\" ? undefined : store.getState().videoData.params.provider,\n },\n };\n else\n axiosConfig = {\n ...axiosConfig,\n data: {\n uuid: store.getState().videoData.params.uuid,\n provider: store.getState().videoData.params.provider === \"unknown\" ? undefined : store.getState().videoData.params.provider,\n },\n };\n }\n try {\n return await axios(axiosConfig);\n } catch (error: any) {\n if (error instanceof AxiosError && error.code !== \"ERR_NETWORK\") {\n errorLogProvider({\n type: \"API-ERROR\",\n message: error.message ? error.message : \"\",\n statusCode: error.response && error.response.status ? error.response.status : undefined,\n url,\n });\n }\n\n if (error && error.response && error.response.status === 401) {\n //\n } else {\n if (errorCallback) errorCallback(error.response.status, error.response.message);\n let newRetryDelay = 0,\n newMaxRetryCount = 0;\n if (retryPolicy !== undefined) {\n for (let i = 0; i < retryPolicy.length; i++) {\n if (\n (((retryPolicy[i].codeAbove && error.response.status >= retryPolicy[i].codeAbove!) ||\n (retryPolicy[i].codeBelow && error.response.status <= retryPolicy[i].codeBelow!)) &&\n (retryPolicy[i].excludeCodes.length === 0 || !retryPolicy[i].excludeCodes.includes(error.response.status))) ||\n retryPolicy[i].includeCodes.length === 0 ||\n retryPolicy[i].includeCodes.includes(error.response.status)\n ) {\n newMaxRetryCount = retryPolicy[i].count;\n newRetryDelay = retryPolicy[i].delay;\n break;\n }\n }\n } else {\n newMaxRetryCount = maxRetryCount;\n newRetryDelay = retryCount + 1;\n }\n if (retryCount < newMaxRetryCount) {\n await wait(newRetryDelay);\n return apiCaller({\n url,\n method,\n data,\n headers,\n retryCount: retryCount + 1,\n newMaxRetryCount,\n errorMessage,\n retryPolicy,\n errorCallback,\n });\n } else if (error.response)\n return {\n data: error.response.data ? error.response.data : { detail: \"عملیات با خطا مواجه شده است.\" },\n status: error.response.status,\n };\n }\n }\n};\n\nexport function getAll(path: string, retryPolicy?: IRetryPolicy[], params?: any, retryCount: number = 1, maxRetryCount: number = 0) {\n return new Promise(async (resolve, reject) => {\n // Added reject to the Promise executor function.\n try {\n const url = new URL(path);\n const limit = 1000;\n if (params) {\n Object.keys(params).forEach((key) => {\n if (params[key]) {\n url.searchParams.set(key, params[key]);\n }\n });\n }\n url.searchParams.set(\"limit\", limit.toString());\n const response = await fetch(url.href);\n if (!response.ok) {\n // Check if the response was not ok (status not in the range 200-299).\n throw response;\n }\n const data = await response.json();\n const count = data.count;\n const requestCount = Math.ceil(count / limit) - 1;\n const promises: Array<Promise<any>> = [];\n for (let i = 0; i < requestCount; i++) {\n const offset = i * limit; // Fixed the offset calculation.\n url.searchParams.set(\"offset\", offset.toString());\n const promise: Promise<any> = fetch(url.href).then((res) => {\n if (res.ok) {\n return res.json();\n }\n return res.json().then((err) => Promise.reject(err));\n });\n promises.push(promise);\n }\n Promise.all(promises)\n .then((res) => {\n const results = res.flatMap((item) => item.results);\n resolve([...data.results, ...results]);\n })\n .catch(reject); // Added catch to handle any errors in the Promise.all.\n } catch (error: any) {\n let newRetryDelay = 0,\n newMaxRetryCount = 0;\n if (retryPolicy !== undefined) {\n for (let i = 0; i < retryPolicy.length; i++) {\n if (\n ((retryPolicy[i].codeAbove && error.status >= retryPolicy[i].codeAbove!) ||\n (retryPolicy[i].codeBelow && error.status <= retryPolicy[i].codeBelow!)) &&\n (retryPolicy[i].excludeCodes.length === 0 || !retryPolicy[i].excludeCodes.includes(error.status)) &&\n (retryPolicy[i].includeCodes.length === 0 || retryPolicy[i].includeCodes.includes(error.status))\n ) {\n newMaxRetryCount = retryPolicy[i].count;\n newRetryDelay = retryPolicy[i].delay;\n break;\n }\n }\n if (retryCount < newMaxRetryCount) {\n await wait(newRetryDelay);\n getAll(path, retryPolicy, params, retryCount + 1, newMaxRetryCount);\n }\n }\n }\n });\n}\n","import { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\nimport {\n IDetails,\n IMiniPlayerParams,\n IMiniPlayerSlice,\n} from \"../../interfaces/interfaces\";\nimport { PlayerTypes } from \"../../interfaces/enums\";\n\nconst MiniPlayerSliceState: IMiniPlayerSlice = {\n params: {\n id: \"0\",\n type: \"\",\n currentTime: 0,\n autoPlay: false,\n onClose: () => {},\n },\n details: {},\n play: false,\n};\n\nexport const userSlice = createSlice({\n name: \"user\",\n initialState: MiniPlayerSliceState,\n reducers: {\n setMiniPlayerInfo: (state, action: PayloadAction<IMiniPlayerParams>) => {\n state.params = {\n ...action.payload,\n id:\n action.payload.type === PlayerTypes.static\n ? window.atob(action.payload.id)\n : action.payload.id,\n banner: action.payload.banner ? action.payload.banner : undefined,\n };\n },\n setDetailsMiniPlayer: (state, action: PayloadAction<IDetails>) => {\n state.details = action.payload;\n },\n setPlayMiniPlayer: (state, action: PayloadAction<boolean>) => {\n state.play = action.payload;\n },\n setClearMiniPlayerSlice: (state) => {\n return (state = MiniPlayerSliceState);\n },\n },\n});\n\nexport const {\n setMiniPlayerInfo,\n setDetailsMiniPlayer,\n setPlayMiniPlayer,\n setClearMiniPlayerSlice,\n} = userSlice.actions;\n\nexport default userSlice.reducer;\n","import {\n setFirstMute,\n setIsFullScreen,\n setLock,\n setPlay,\n} from \"../slices/controllerSlice\";\nimport store from \"../store\";\nimport {\n setVideoElementSizeInfo,\n setVideoTimelines,\n} from \"../slices/videoDataSlice\";\nimport { ConditionName } from \"../../interfaces/enums\";\nimport { apiCaller } from \"../../services/apiCaller\";\nimport { API } from \"../../services/services\";\nimport { setUserSettings } from \"../slices/userSlice\";\nimport { setClearPopoversSlice } from \"../slices/popoversSlice\";\nimport { conditions } from \"../../conditions/conditions\";\nimport {\n backwardForwardLog,\n fullscreenLog,\n lockLog,\n videoTimelineLog,\n} from \"../../logs/logs\";\nimport { sendFluentLog } from \"../../logs/fluentdLogger\";\nimport { mainPlayerVideoTag, miniPlayerVideoTag } from \"../../constants\";\nimport { setPlayMiniPlayer } from \"../slices/miniPlayerSlice\";\n\nexport const handlePlayPause = (event: any) => {\n if (event === null || event.target.nodeName !== \"INPUT\") {\n const dispatch = store.dispatch;\n if (event !== null) {\n event.stopPropagation();\n event.preventDefault();\n }\n mainPlayerVideoTag()?.paused\n ? mainPlayerVideoTag().play()\n : mainPlayerVideoTag()?.pause();\n dispatch(setPlay(!mainPlayerVideoTag()?.paused));\n if (miniPlayerVideoTag() && miniPlayerVideoTag().played) {\n miniPlayerVideoTag()?.pause();\n dispatch(setPlayMiniPlayer(false));\n }\n }\n};\n\nexport const handlePlayPauseAfterChangeVideo = () => {\n const dispatch = store.dispatch;\n const { play } = store.getState().controller;\n dispatch(setPlay(play));\n setTimeout(() => {\n if (mainPlayerVideoTag()) {\n if (play) mainPlayerVideoTag().play();\n else mainPlayerVideoTag()?.pause();\n }\n }, 0);\n};\n\nexport const handlePlayerPauseMiniPlayer = (event: any) => {\n if (event === null || event.target.nodeName !== \"INPUT\") {\n const dispatch = store.dispatch;\n miniPlayerVideoTag().paused\n ? miniPlayerVideoTag().play()\n : miniPlayerVideoTag()?.pause();\n dispatch(setPlayMiniPlayer(!miniPlayerVideoTag().paused));\n if (mainPlayerVideoTag() && mainPlayerVideoTag().played) {\n mainPlayerVideoTag()?.pause();\n dispatch(setPlay(false));\n }\n }\n};\n\nexport const handlePlayPauseInDOM = (type: boolean) => {\n const dispatch = store.dispatch;\n if (type) {\n mainPlayerVideoTag().play();\n dispatch(setPlay(true));\n return true;\n } else {\n mainPlayerVideoTag()?.pause();\n dispatch(setPlay(false));\n return false;\n }\n};\n\nexport const firstUnMuteHandler = () => {\n const dispatch = store.dispatch;\n dispatch(setFirstMute(false));\n if (conditions(ConditionName.isIOS))\n mainPlayerVideoTag().currentTime = mainPlayerVideoTag().currentTime - 0.001;\n};\n\nexport const handleChangeSoundVolume = (\n volume: number,\n videoTag?: HTMLVideoElement,\n) => {\n const dispatch = store.dispatch;\n const { settings } = store.getState().user;\n const { firstMute } = store.getState().controller;\n\n const video = videoTag || mainPlayerVideoTag();\n\n dispatch(setUserSettings({ ...settings, volume }));\n\n if (!video) return;\n\n if (firstMute && volume) firstUnMuteHandler();\n if (conditions(ConditionName.isIOS)) video.muted = !volume;\n else video.volume = volume / 100;\n};\n\nexport const handleBackwardForward = (\n type: string,\n forwardBackwardCount: number = 15,\n event?: any,\n) => {\n if (type === \"touchBackward\") type = \"backward\";\n else if (type === \"touchForward\") type = \"forward\";\n if (\n (event && event.target.nodeName === \"INPUT\") ||\n (type === \"backward\" && mainPlayerVideoTag().currentTime < 15) ||\n (type === \"forward\" &&\n mainPlayerVideoTag().duration - mainPlayerVideoTag().currentTime < 15)\n )\n return;\n sendFluentLog(backwardForwardLog(type));\n let currentTime = 0;\n if (type === \"backward\") {\n if (forwardBackwardCount === 0) currentTime = 0;\n else currentTime = mainPlayerVideoTag().currentTime - forwardBackwardCount;\n } else if (type === \"forward\") {\n if (forwardBackwardCount === mainPlayerVideoTag().duration)\n currentTime = forwardBackwardCount;\n else currentTime = mainPlayerVideoTag().currentTime + forwardBackwardCount;\n }\n mainPlayerVideoTag().currentTime = currentTime;\n};\n\nexport const handleFullScreen = () => {\n const dispatch = store.dispatch;\n const { params } = store.getState().videoData;\n\n const isFullScreen = document.fullscreenElement;\n if (conditions(ConditionName.isIOS)) {\n if ((mainPlayerVideoTag() as any).webkitEnterFullScreen) {\n dispatch(setPlay(false));\n // Toggle fullscreen in Safari for iPad\n (mainPlayerVideoTag() as any).webkitEnterFullScreen();\n } else {\n dispatch(setClearPopoversSlice());\n sendFluentLog(fullscreenLog(\"fullScreen\"));\n }\n } else {\n if (isFullScreen) {\n dispatch(setIsFullScreen(false));\n document\n .exitFullscreen()\n .then(() => (document.body.style.overflow = \"auto\"));\n } else {\n dispatch(setClearPopoversSlice());\n document.documentElement\n .requestFullscreen()\n .then(() => (document.body.style.overflow = \"hidden\"));\n dispatch(setIsFullScreen(true));\n sendFluentLog(fullscreenLog(\"fullScreen\"));\n }\n }\n};\n\nexport const handleLockOrientation = () => {\n if (\n conditions(ConditionName.isTouchScreen) &&\n !conditions(ConditionName.isIOS)\n ) {\n if (\n conditions(ConditionName.isLandscape) &&\n !conditions(ConditionName.isFullScreen)\n )\n (window.screen.orientation as any).lock(\"portrait\");\n else (window.screen.orientation as any).lock(\"landscape\");\n }\n};\n\nexport const handleLock = (type: string) => {\n const dispatch = store.dispatch;\n dispatch(setLock(type === \"lock\"));\n sendFluentLog(lockLog(type));\n if (type === \"unlock\") localStorage.setItem(\"unlock-click\", \"true\");\n};\n\nexport const handleVideoTimeline = (\n currentTimeValue: number,\n movedTimeValue?: number,\n) => {\n if (conditions(ConditionName.isSendTimelineLog)) {\n const dispatch = store.dispatch;\n const { videoTimelines } = store.getState().videoData;\n let currentTime = Math.floor(currentTimeValue);\n let movedTime = Math.floor(movedTimeValue!);\n if (videoTimelines.length === 0) {\n dispatch(\n setVideoTimelines([\n currentTime >= mainPlayerVideoTag().duration\n ? movedTime!\n : currentTime,\n ]),\n );\n } else {\n if (videoTimelines[0] < currentTime)\n apiCaller({\n url: API().videoTimelineLog,\n method: \"post\",\n data: videoTimelineLog(videoTimelines[0], currentTime),\n });\n if (movedTime && movedTime >= mainPlayerVideoTag().duration)\n dispatch(setVideoTimelines([]));\n else dispatch(setVideoTimelines([movedTime!]));\n }\n }\n};\n\nexport const handleVideoElementSizeInfo = () => {\n const dispatch = store.dispatch;\n const element: any = document\n .getElementById(\"video-area\")\n ?.getBoundingClientRect();\n element.height = (element.width * 9) / 16;\n if (element) dispatch(setVideoElementSizeInfo(element));\n};\n\nexport const handleDoubleClick = (event: any) => {\n if (\n !conditions(ConditionName.isTouchScreen) &&\n event.target.nodeName !== \"INPUT\"\n )\n handleFullScreen();\n};\n","import { conditions } from \"./conditions/conditions\";\nimport { ConditionName } from \"./interfaces/enums\";\nimport store from \"./redux/store\";\nimport { setClearVideoDataSlice } from \"./redux/slices/videoDataSlice\";\nimport { setClearControllerSlice, setFirstMute, setPlay } from \"./redux/slices/controllerSlice\";\nimport { setClearUserSlice } from \"./redux/slices/userSlice\";\nimport { setClearPopoversSlice } from \"./redux/slices/popoversSlice\";\nimport { mainPlayerVideoTag } from \"./constants\";\nimport { handleChangeSoundVolume } from \"./redux/actions/controller.actions\";\nimport { ClassNameValue } from \"tailwind-merge\";\nimport { twMerge as tailwindMerge } from \"tailwind-merge\";\n\nconst PREFIX = \"pl-\";\n\nconst twMerge = (...classLists: ClassNameValue[]) => {\n const input = classLists.flat(1).filter(Boolean).join(\" \").trim();\n if (!input) return \"\";\n const classes = input?.split(/\\s+/);\n const hadPrefix = new Set(classes.filter((cls) => cls.startsWith(PREFIX)).map((cls) => cls.slice(PREFIX.length)));\n const withoutPrefix = classes.map((cls) => (cls.startsWith(PREFIX) ? cls.slice(PREFIX.length) : cls));\n const merged = tailwindMerge(withoutPrefix.join(\" \"))?.split(\" \");\n const finalClasses = merged.map((cls) => (hadPrefix.has(cls) ? PREFIX + cls : cls));\n return finalClasses.join(\" \").trim();\n};\n\nexport const tw = (classname: string, options?: { touchFullScreen?: string; touch?: string; desktopFullScreen?: string; desktop?: string }) => {\n const config = options || {};\n const isTouch = conditions(ConditionName.isTouchScreen);\n const isFullScreen = conditions(ConditionName.isFullScreen);\n\n if (isTouch) return twMerge(classname, config.touch, isFullScreen ? config.touchFullScreen : undefined);\n else return twMerge(classname, config.desktop, isFullScreen ? config.desktopFullScreen : undefined);\n};\n\nexport const styleMerge = <T extends number | string>(options: { touchFullScreen?: T; touch?: T; desktopFullScreen?: T; desktop?: T }) => {\n const isTouch = conditions(ConditionName.isTouchScreen);\n const isFullScreen = conditions(ConditionName.isFullScreen);\n\n let result: T | undefined;\n\n if (isTouch) result = isFullScreen ? (options.touchFullScreen ?? options.touch) : options.touch;\n else result = isFullScreen ? (options.desktopFullScreen ?? options.desktop) : options.desktop;\n\n return result as T;\n};\n\nexport const wait = (s: number) => new Promise((resolve) => setTimeout(resolve, s * 1000));\n\nexport const getUUID = () => {\n let uuid = localStorage.getItem(\"hamrahiUUID\");\n if (!uuid) {\n uuid = uuidGenerator();\n localStorage.setItem(\"hamrahiUUID\", uuid);\n }\n return uuid.toString();\n};\n\nexport const uuidGenerator = () => {\n let uuid = \"xxxxxxxx-xxxx-Mxxx-Nxxx-x\".replace(/[xMN]/g, (char) => {\n let val: number;\n if (char === \"M\") val = Math.floor(1 + Math.random() * 5);\n else if (char === \"N\") val = Math.floor(8 + Math.random() * 4);\n else val = Math.floor(Math.random() * 16);\n return val.toString(16);\n });\n uuid += Date.now().toString(16);\n return uuid;\n};\n\nexport const isTouchScreen = () =>\n typeof window !== \"undefined\" &&\n (\"ontouchstart\" in window || ((window as any)[\"DocumentTouch\"] && document instanceof (window as any)[\"DocumentTouch\"]));\n\nexport const isTouchScreenLandscape = () => {\n const { isFullScreen } = store.getState().controller;\n return isTouchScreen() && isFullScreen;\n};\nexport const isTouchScreenPortrait = () => {\n const { isFullScreen } = store.getState().controller;\n return isTouchScreen() && !isFullScreen;\n};\n\nexport const isIOS = () => {\n return (\n [\"iPad Simulator\", \"iPhone Simulator\", \"iPod Simulator\", \"iPad\", \"iPhone\", \"iPod\"].includes(navigator.platform) ||\n // iPad on iOS 13 detection\n (navigator.userAgent.includes(\"Mac\") && \"ontouchend\" in document)\n );\n};\n\nexport const addZeroBefore = (n: number) => {\n return (n < 10 ? \"0\" : \"\") + n;\n};\n\nexport const secondsToHMS = (seconds: number) => {\n const h = Math.floor(seconds / 3600);\n const m = Math.floor((seconds % 3600) / 60);\n const s = Math.floor((seconds % 3600) % 60);\n return h < 1 ? `${addZeroBefore(m)}:${addZeroBefore(s)}` : `${addZeroBefore(h)}:${addZeroBefore(m)}:${addZeroBefore(s)}`;\n};\n\nexport const addUuidToSrc = (src: string) => {\n const urlObject = new URL(src);\n let urlSrc = src;\n if (urlObject.search.length) return (urlSrc += `&uuid=${getUUID()}`);\n else return (urlSrc += `?uuid=${getUUID()}`);\n};\n\nexport const checkParentTarget = (event: any, target: string) => {\n try {\n return [\n event.target.id,\n event.target.parentNode.id,\n event.target.parentNode.parentNode.id,\n event.target.parentNode.parentNode.parentNode.id,\n event.target.parentNode.parentNode.parentNode.parentNode.id,\n ].includes(target);\n } catch (error) {\n return false;\n }\n};\n\nexport const splitQueryParamsFromStreamLink = (playerType: \"mainPlayer\" | \"miniPlayer\") => {\n const { params } = store.getState().videoData;\n\n let streamLink = \"\";\n if (!params.id && params.stream_link) streamLink = params.stream_link;\n else {\n if (playerType === \"mainPlayer\") streamLink = store.getState().videoData.details.stream_link!;\n else streamLink = store.getState().miniPlayer.details.stream_link!;\n }\n\n let queryParams: string = \"\";\n if (streamLink) queryParams = streamLink?.split(\"m3u8\")[1];\n if (queryParams) queryParams = `${queryParams}&uuid=${getUUID()}`;\n else queryParams = `?uuid=${getUUID()}`;\n return queryParams;\n};\n\nexport const handleRippleCircle = (event: any, id: string) => {\n const element: any = document.getElementById(id);\n const circle = document.createElement(\"span\");\n circle.style.width = circle.style.height = `50px`;\n circle.style.left = `${event.touches[0].clientX - element.offsetLeft - 25}px`;\n circle.style.top = `${event.touches[0].clientY - element.offsetTop - 25}px`;\n circle.classList.add(\"pl-ripple\");\n const ripple = element.getElementsByClassName(\"pl-ripple\")[0];\n if (ripple) ripple.remove();\n element.appendChild(circle);\n};\n\nexport const handleRipple = (event: any, id: string, size: number = 50) => {\n const clientX = event.clientX !== undefined ? event.clientX : event.touches[0].clientX;\n const clientY = event.clientY !== undefined ? event.clientY : event.touches[0].clientY;\n const element: any = document.getElementById(id);\n const circle = document.createElement(\"span\");\n circle.style.width = circle.style.height = `${size}px`;\n circle.style.left = `${clientX - size / 2}px`;\n circle.style.top = `${clientY - element.getBoundingClientRect().top - size / 2}px`;\n circle.classList.add(\"pl-ripple\");\n const ripple = element.getElementsByClassName(\"pl-ripple\")[0];\n if (ripple) ripple.remove();\n element.appendChild(circle);\n};\n\nexport const responseValidator = (status: number): boolean => status >= 200 && status < 300;\n\nexport const clearRedux = () => {\n const dispatch = store.dispatch;\n dispatch(setClearVideoDataSlice());\n dispatch(setClearControllerSlice());\n dispatch(setClearUserSlice());\n dispatch(setClearPopoversSlice());\n};\n\nexport const weighted_random = (options: any) => {\n let i;\n\n let weights: any[] = [];\n\n for (i = 0; i < options.length; i++) weights[i] = options[i].weight + (weights[i - 1] || 0);\n\n let random = Math.random() * weights[weights.length - 1];\n\n for (i = 0; i < weights.length; i++) if (weights[i] > random) break;\n\n return options[i].domain;\n};\n\n// ***** Player Core *****\n\nexport const handlePageLoadTime = (loadingDurationRef: any) => {\n let pageLoadTime = 0;\n if (performance && performance.getEntriesByType(\"navigation\")) pageLoadTime = performance.getEntriesByType(\"navigation\")[0].duration;\n loadingDurationRef.current = pageLoadTime;\n};\n\nexport const highestResolutionSupported = (resolutions: string[], width: number, height: number) => {\n const w = width * window.devicePixelRatio;\n const h = height * window.devicePixelRatio;\n let filteredResolutions: string[] = [];\n if (conditions(ConditionName.isTouchScreenPortrait))\n filteredResolutions = resolutions.filter((resolution: string) => Number(resolution?.split(\"x\")[0].trim()) <= w);\n else\n filteredResolutions = resolutions.filter(\n (resolution: string) => Number(resolution?.split(\"x\")[0].trim()) <= h || Number(resolution?.split(\"x\")[1].trim()) <= w,\n );\n return filteredResolutions.indexOf(filteredResolutions[filteredResolutions.length - 1]);\n};\n\nexport const flattenObject = (input: any, keyName?: string) => {\n let result: any = {};\n for (const key in input) {\n const newKey = keyName ? `${keyName}_${key}` : key;\n if (typeof input[key] === \"object\" && !Array.isArray(input[key])) result = { ...result, ...flattenObject(input[key], newKey) };\n else result[newKey] = input[key];\n }\n return result;\n};\n\nexport const sortLanguages = (array: any) => {\n const priority: any = { fa: 1, en: 2 };\n\n return array.slice().sort((a: any, b: any) => {\n const prioA = priority[a.lang] || 999;\n const prioB = priority[b.lang] || 999;\n\n return prioA - prioB;\n });\n};\n\nexport const getSubtitleLabel = (subtitleLanguage: string) => {\n let label;\n switch (subtitleLanguage) {\n case \"fa\":\n label = \"فارسی\";\n break;\n case \"en\":\n label = \"انگلیسی\";\n break;\n case \"ar\":\n label = \"عربی\";\n break;\n case \"tr\":\n label = \"ترکی\";\n break;\n default:\n break;\n }\n return label;\n};\n\nexport const spliteStringPerLine = (str: string) => str?.split(/\\r?\\n|\\r|\\n/g);\n\nexport const inViewPort = (element: any) => {\n if (element) {\n const positionLeft = element.offsetLeft - element.offsetWidth / 2;\n const positionRight = window.innerWidth - (element.offsetLeft + element.offsetWidth);\n if (positionLeft >= 0 && positionRight >= 0) return \"inViewport\";\n else if (positionLeft < 0) return \"OutViewPortFromLeft\";\n else if (positionRight < 0) return \"OutViewPortFromRight\";\n }\n};\n\nexport const compare = (a: any, b: any) => {\n if (a.time < b.time) return -1;\n if (a.time > b.time) return 1;\n return 0;\n};\n\nexport const cleanVTT = (vttText: string) => {\n // Remove all timestamps and alignment/position data\n vttText = vttText.replace(/\\d{2}:\\d{2}:\\d{2}\\.\\d{3} --> \\d{2}:\\d{2}:\\d{2}\\.\\d{3}.*\\n/g, \"\");\n\n // Remove all HTML tags like <c> and </c>\n vttText = vttText.replace(/<[^>]+>/g, \"\");\n\n // Remove extra blank lines\n vttText = vttText.replace(/\\n+/g, \"\\n\");\n\n // Trim leading and trailing whitespace\n vttText = vttText.trim();\n\n return vttText;\n};\n\nexport const isDev = process.env.NODE_ENV === \"development\";\n\nexport const setupAutoplayBehavior = (videoTag?: HTMLVideoElement) => {\n const dispatch = store.dispatch;\n const { params } = store.getState().videoData;\n if (params.autoplay === \"true\" || params.advertisement) {\n const video = videoTag || mainPlayerVideoTag();\n\n const playPromise = video.play();\n\n dispatch(setPlay(true));\n handleChangeSoundVolume(100, video);\n\n if (playPromise !== undefined)\n playPromise\n .then(() => {\n handleChangeSoundVolume(100, video);\n })\n .catch(() => {\n handleChangeSoundVolume(0, video);\n dispatch(setFirstMute(true));\n if (ConditionName.isIOS) video.play();\n });\n }\n};\n","import { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\nimport { IUserSettings, IUserSlice, IVideoSettings } from \"../../interfaces/interfaces\";\nimport { isDev } from \"../../helpers\";\n\nconst UserSliceState: IUserSlice = {\n settings: { quality: isDev ? 0 : -1, brightness: 100, volume: 100, speed: 1 },\n videoSettings: { time: 0 },\n};\n\nexport const userSlice = createSlice({\n name: \"user\",\n initialState: UserSliceState,\n reducers: {\n setUserSettings: (state, action: PayloadAction<IUserSettings>) => {\n state.settings = action.payload;\n },\n setVideoSettings: (state, action: PayloadAction<IVideoSettings>) => {\n state.videoSettings = action.payload;\n },\n setClearUserSlice: () => {\n return UserSliceState;\n },\n },\n});\n\nexport const { setUserSettings, setVideoSettings, setClearUserSlice } = userSlice.actions;\n\nexport default userSlice.reducer;\n","import controllerReducer from \"./slices/controllerSlice\";\nimport videoDataReducer from \"./slices/videoDataSlice\";\nimport popoversReducer from \"./slices/popoversSlice\";\nimport userReducer from \"./slices/userSlice\";\nimport miniPlayerReducer from \"./slices/miniPlayerSlice\";\n\nimport { configureStore } from \"@reduxjs/toolkit\";\n\nconst store = configureStore({\n reducer: {\n controller: controllerReducer,\n videoData: videoDataReducer,\n popovers: popoversReducer,\n user: userReducer,\n miniPlayer: miniPlayerReducer,\n },\n devTools: true,\n middleware: (getDefaultMiddleware) => getDefaultMiddleware({ serializableCheck: false })\n});\n\nexport type RootState = ReturnType<typeof store.getState>;\nexport type AppDispatch = typeof store.dispatch;\nexport default store;\n","import { AppDispatch, RootState } from \"./store\";\nimport { TypedUseSelectorHook, useDispatch, useSelector } from \"react-redux\";\n\nexport const useAppDispatch: any = () => useDispatch<AppDispatch>();\nexport const useAppSelector: TypedUseSelectorHook<RootState> = useSelector;\n","import { IDetailsConfig } from \"./interfaces/interfaces\";\nimport store from \"./redux/store\";\nimport { API } from \"./services/services\";\n\nexport const detailAPI = (id?: string) => {\n const { params } = store.getState().videoData;\n return API().vod.getVodUrl + (id ? id : params.id);\n};\n\nconst detailsConfig: IDetailsConfig = {\n url: \"\",\n maxRetryCount: 0,\n headers: {},\n retryPolicy: [],\n errorCallback: undefined\n};\n\nconst vodDetailsConfig = (videoId?:string) => {\n detailsConfig.url = detailAPI(videoId);\n detailsConfig.maxRetryCount = 3;\n detailsConfig.retryPolicy = [\n {\n codeAbove: 500,\n codeBelow: null,\n excludeCodes: [],\n includeCodes: [409],\n delay: 1,\n count: 3\n },\n {\n codeAbove: null,\n codeBelow: 404,\n excludeCodes: [403, 402, 401, 400],\n includeCodes: [],\n delay: 10,\n count: 6\n }\n ];\n return detailsConfig;\n};\n\n\nexport const handleDetailsConfig = (videoId?: string) => {\n vodDetailsConfig(videoId);\n return detailsConfig;\n};\n","import { apiCaller, getAll } from \"../../services/apiCaller\";\nimport { setInfo, setIsFetchDetails, setIsValidAddress, setRawSubtitles, setSelectedSubtitle } from \"../slices/videoDataSlice\";\nimport store from \"../store\";\nimport { addUuidToSrc, responseValidator, weighted_random } from \"../../helpers\";\nimport axios from \"axios\";\nimport { handleDetailsConfig } from \"../../getDetailsConfigs\";\nimport { subtitleLog } from \"../../logs/logs\";\nimport { sendFluentLog } from \"../../logs/fluentdLogger\";\nimport { mainPlayerVideoTag } from \"../../constants\";\nimport { setDetailsMiniPlayer } from \"../slices/miniPlayerSlice\";\nimport { conditions } from \"../../conditions/conditions\";\nimport { ConditionName } from \"../../interfaces/enums\";\nimport { ISubtitle } from \"../../interfaces/interfaces\";\n\nexport const getVodDetails = async (videoId?: string) => {\n const dispatch = store.dispatch;\n\n console.log(\"getVodDetails end\");\n try {\n const d = await apiCaller({ ...handleDetailsConfig(videoId) });\n if (responseValidator(d.status)) {\n await axios.head(\"https://\" + weighted_random(d.data.hls_links) + d.data.path);\n if (videoId) return dispatch(setDetailsMiniPlayer(d.data));\n detailSetter(d.data);\n if (!conditions(ConditionName.hasRawSubtitles) && d?.data?.subtitles) handleRawSubtitles(d.data.subtitles);\n } else throw new Error(JSON.stringify({ status: d.status, message: d.data }));\n } catch (error: any) {\n dispatch(setIsFetchDetails(true));\n dispatch(setIsValidAddress(false));\n console.log(\"getVodDetails catch\", error);\n }\n};\n\nexport const detailSetter = async (data: any) => {\n console.log(\"detailSetter start\");\n\n const dispatch = store.dispatch;\n let info = {\n ...data,\n subtitles: undefined,\n stream_link: !!data.stream_link && addUuidToSrc(\"https://\" + weighted_random(data.hls_links) + data.path),\n };\n\n dispatch(setInfo(info));\n dispatch(setIsFetchDetails(true));\n dispatch(setIsValidAddress(true));\n\n console.log(\"detailSetter end\");\n};\n\nconst handleRawSubtitles = async (subtitles: ISubtitle[]) => {\n const dispatch = store.dispatch;\n const validSubtitles = await filterValidSubtitles(subtitles);\n dispatch(setRawSubtitles(validSubtitles));\n};\n\nexport const handleSubtitle = (activeSubtitle?: string) => {\n const dispatch = store.dispatch;\n const { subtitles, selectedSubtitle, params } = store.getState().videoData;\n const videoTag = mainPlayerVideoTag();\n\n const disableCurrentSubtitle = () => {\n const activeTrack = Array.from(videoTag.textTracks).find((track) => track.mode === \"showing\");\n if (activeTrack) activeTrack.mode = \"disabled\";\n };\n\n const notifyStatusChange = (lang: string | null, enabled: boolean) => {\n const subtitles = store.getState().videoData.rawSubtitles;\n params.onSubtitleStatusChange?.(lang ? (subtitles?.find((sub) => sub.lang === lang) ?? null) : null, enabled);\n };\n\n const showSubtitle = (track: TextTrack | undefined) => {\n if (!track) return;\n track.mode = \"showing\";\n dispatch(setSelectedSubtitle(track));\n sendFluentLog(subtitleLog(track.language));\n notifyStatusChange(track.language, true);\n };\n if (selectedSubtitle && !activeSubtitle) {\n disableCurrentSubtitle();\n dispatch(setSelectedSubtitle(undefined));\n sendFluentLog(subtitleLog(\"empty\"));\n notifyStatusChange(null, false);\n return;\n }\n\n const targetLang = activeSubtitle ?? \"fa\";\n const foundSubtitle = subtitles.find((s) => s.language === targetLang);\n const subtitleToShow = foundSubtitle ?? (videoTag.textTracks[0] as TextTrack | undefined);\n\n showSubtitle(subtitleToShow);\n};\n\nexport const filterValidSubtitles = async (subtitles: ISubtitle[]): Promise<ISubtitle[] | null> => {\n const checks = subtitles.map(async (subtitle) => {\n try {\n const response = await fetch(subtitle.url, { method: \"HEAD\" });\n if (response.ok) return subtitle;\n else return null;\n } catch (err) {\n console.error(`Error fetching subtitle:`, subtitle.url, err);\n return null;\n }\n });\n\n const results = await Promise.all(checks);\n const validSubtitles = results.filter((s): s is ISubtitle => s !== null);\n return validSubtitles.length ? validSubtitles : null;\n};\n\nexport const getAllGeneralMarker = async (url: string) => {\n const response: any = await getAll(url, [\n {\n codeAbove: 400,\n codeBelow: null,\n excludeCodes: [],\n includeCodes: [],\n delay: 2,\n count: 3,\n },\n ]);\n return response;\n};\n","import { useEffect, useRef } from \"react\";\n\nconst useKeyPress = (key: string, cb: any) => {\n const callbackRef = useRef(cb);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => {\n callbackRef.current = cb;\n }, []);\n\n useEffect(() => {\n const handleKeyPress = (event: any) => {\n if (event.code === key && ![\"INPUT\", \"TEXTAREA\"].includes(event.target.nodeName) && !event.target.isContentEditable) callbackRef.current(event);\n };\n\n document.addEventListener(\"keydown\", handleKeyPress);\n\n return () => document.removeEventListener(\"keydown\", handleKeyPress);\n }, [key]);\n};\nexport default useKeyPress;\n","import { tw } from \"../../../helpers/helpers\";\n\nconst Loader = () => {\n return (\n <div className={`pl-absolute pl-inset-0 pl-rounded-[12px] pl-flex pl-items-center pl-justify-center pl-size-full pl-overflow-hidden`}>\n <div\n className={tw(\"loader-spinner\", {\n desktop: \"loader-spinner-desktop\",\n desktopFullScreen: \"loader-spinner-fullscreen\",\n touch: \"loader-spinner-touch\",\n touchFullScreen: \"loader-spinner-touchFullscreen\",\n })}\n ></div>\n </div>\n );\n};\n\nexport default Loader;\n","import { conditions } from \"../../../../helpers/conditions/conditions\";\nimport { ConditionName } from \"../../../../helpers/interfaces/enums\";\nimport { IControllbarTooltipProps } from \"../../../../helpers/interfaces/interfaces\";\n\nconst ControllbarTooltip = ({ title, className }: IControllbarTooltipProps) => (\n <span\n className={`pl-absolute pl-w-max pl-bg-black/75 pl-text-white pl-rounded-[8px] pl-leading-[18px] pl-flex pl-items-center pl-justify-center pl-font-normal ${\n conditions(ConditionName.isFullScreen)\n ? \"pl-bottom-[150%] pl-h-[34px] pl-px-[9.5px] pl-text-[15px]\"\n : \"pl-h-6 pl-bottom-[130%] pl-px-[9px] pl-text-[12px]\"\n } ${className}`}\n >\n {title}\n </span>\n);\n\nexport default ControllbarTooltip;\n","const IMAGES: any = {\n fullScreen: require(\"./svg/FullScreen.svg\"),\n nonFullScreen: require(\"./svg/NonFullScreen.svg\"),\n fullScreen2: require(\"./svg/FullScreen-2.svg\"),\n nonFullScreen2: require(\"./svg/NonFullScreen-2.svg\"),\n settings: require(\"./svg/Settings.svg\"),\n settings2: require(\"./svg/Settings-2.svg\"),\n bigPlay: require(\"./svg/BigPlay.svg\"),\n bigPause: require(\"./svg/BigPause.svg\"),\n mute: require(\"./svg/Mute.svg\"),\n mute2: require(\"./svg/Mute2.svg\"),\n unMute: require(\"./svg/UnMute.svg\"),\n backward15: require(\"./svg/Backward15.svg\"),\n forward15: require(\"./svg/Forward15.svg\"),\n chevronLeft: require(\"./svg/ChevronLeft.svg\"),\n chevronRight: require(\"./svg/ChevronRight.svg\"),\n pictureInPicture: require(\"./svg/PictureInPicture.svg\"),\n lock: require(\"./svg/Lock.svg\"),\n unlock: require(\"./svg/Unlock.svg\"),\n arrowLeft: require(\"./svg/ArrowLeft.svg\"),\n tick: require(\"./svg/Tick.svg\"),\n qualitySetting: require(\"./svg/QualitySetting.svg\"),\n notFound: require(\"./svg/NotFound.svg\"),\n closeSquare: require(\"./svg/CloseSquare.svg\"),\n sun: require(\"./svg/Sun.svg\"),\n subtitleFill: require(\"./svg/SubtitleFill.svg\"),\n subtitleDisable: require(\"./svg/SubtitleDisable.svg\"),\n subtitleOutline: require(\"./svg/SubtitleOutline.svg\"),\n infoCircle: require(\"./svg/InfoCircle.svg\"),\n rotateRed: require(\"./svg/RotateRed.svg\"),\n next: require(\"./svg/next.svg\"),\n forward: require(\"./svg/forward.svg\"),\n forward2: require(\"./svg/forward-2.svg\"),\n backward: require(\"./svg/backward.svg\"),\n backward2: require(\"./svg/backward-2.svg\"),\n export: require(\"./svg/export.svg\"),\n subtitle: require(\"./svg/subtitle.svg\"),\n lowSound: require(\"./svg/low-sound.svg\"),\n info: require(\"./svg/info.svg\"),\n};\n\nexport default IMAGES;\n","import { useRef, useState } from \"react\";\nimport { shallowEqual } from \"react-redux\";\nimport ControllbarTooltip from \"../footer/controllbar/controllbarTooltip\";\nimport Image from \"next/image\";\nimport { useAppDispatch, useAppSelector } from \"../../../helpers/redux/hooks\";\nimport store from \"../../../helpers/redux/store\";\nimport { volumeLog } from \"../../../helpers/logs/logs\";\nimport { sendFluentLog } from \"../../../helpers/logs/fluentdLogger\";\nimport { setUserSettings } from \"../../../helpers/redux/slices/userSlice\";\nimport { handleChangeSoundVolume } from \"../../../helpers/redux/actions/controller.actions\";\nimport { ConditionName } from \"../../../helpers/interfaces/enums\";\nimport { conditions } from \"../../../helpers/conditions/conditions\";\nimport IMAGES from \"../../../images/importImages\";\nimport { tw } from \"../../../helpers/helpers\";\n\nconst SoundVolume = ({ width, height }: { width?: number; height?: number }) => {\n const [showTooltip, setShowTooltip] = useState<boolean>(false);\n\n const dispatch = useAppDispatch();\n const { settings } = useAppSelector(({ user: { settings } }) => ({ settings }), shallowEqual);\n\n const primaryVolumeRef = useRef<number>(settings.volume);\n\n const handleMouseUp = () => {\n if (primaryVolumeRef.current !== settings.volume) {\n const { settings } = store.getState().user;\n sendFluentLog(volumeLog(primaryVolumeRef.current, settings.volume));\n primaryVolumeRef.current = settings.volume;\n // createSettings({ ...settings, volume: settings.volume });\n dispatch(setUserSettings({ ...settings, volume: settings.volume }));\n }\n };\n\n const handleMute = (type: string) => {\n const { settings } = store.getState().user;\n if (type === \"mute\") {\n handleChangeSoundVolume(0);\n sendFluentLog(volumeLog(settings.volume, 0));\n // createSettings({ ...settings, volume: 0 });\n } else {\n sendFluentLog(volumeLog(settings.volume, 100));\n handleChangeSoundVolume(100);\n // createSettings({ ...settings, volume: 100 });\n }\n };\n\n return (\n <div\n onMouseOver={() => !conditions(ConditionName.isTouchScreen) && setShowTooltip(true)}\n onMouseLeave={() => !conditions(ConditionName.isTouchScreen) && setShowTooltip(false)}\n id={conditions(ConditionName.hasSound) ? \"mute\" : \"unmute\"}\n className={tw(`pl-relative pl-rounded-full pl-inline-flex pl-items-center pl-justify-center pl-group pl-bg-black/75 pl-sound-icon`, {\n desktop: \"pl-min-w-[34px] pl-h-[34px] pl-p-1\",\n desktopFullScreen: \"pl-min-w-[48px] pl-h-[48px] pl-p-0 pl-px-1.5\",\n })}\n >\n <div\n className={tw(\"pl-flex pl-items-center pl-justify-center pl-rounded-full group-hover:pl-bg-[#5E5E5E] pl-transition-all\", {\n desktop: \"pl-h-[26px] pl-min-w-[26px] group-hover:pl-ps-1 pl-gap-1\",\n desktopFullScreen: \"pl-h-[36px] pl-min-w-[36px] group-hover:pl-ps-1.5 pl-gap-1.5\",\n })}\n >\n {!conditions(ConditionName.isTouchScreen) && (\n <input\n onMouseUp={handleMouseUp}\n type=\"range\"\n min=\"0\"\n max=\"100\"\n value={settings.volume}\n onChange={(event) => handleChangeSoundVolume(+event.target.value)}\n className={`pl-soundVolume ${conditions(ConditionName.isFullScreen) && \"pl-soundVolume-fullscreen\"} pl-cursor-pointer rounded-full`}\n style={{ background: `linear-gradient(to right, white ${settings.volume}%, rgba(255,255,255,0.3) 0)` }}\n />\n )}\n <div\n onClick={() => (conditions(ConditionName.hasSound) ? handleMute(\"mute\") : handleMute(\"unmute\"))}\n onDoubleClick={(event: any) => event.stopPropagation()}\n className={tw(\"pl-relative pl-flex pl-items-center pl-shrink-0 pl-me-[5px]\", { desktop: \"\", desktopFullScreen: \"\" })}\n >\n <Image\n src={conditions(ConditionName.hasSound) ? (settings.volume >= 50 ? IMAGES.unMute : IMAGES.lowSound) : IMAGES.mute}\n alt={conditions(ConditionName.hasSound) ? \"unmute-icon\" : \"mute-icon\"}\n className={`pl-flex pl-items-center pl-cursor-pointer`}\n width={width}\n height={height}\n />\n </div>\n </div>\n {showTooltip && <ControllbarTooltip className=\"pl-left-0\" title={conditions(ConditionName.hasSound) ? \"صدا (M)\" : \"بی‌صدا (M)\"} />}\n </div>\n );\n};\n\nexport default SoundVolume;\n","import { useEffect, useState } from \"react\";\nimport { shallowEqual } from \"react-redux\";\nimport ControllbarTooltip from \"../footer/controllbar/controllbarTooltip\";\nimport { useAppDispatch, useAppSelector } from \"../../../helpers/redux/hooks\";\nimport { ConditionName } from \"../../../helpers/interfaces/enums\";\nimport { conditions } from \"../../../helpers/conditions/conditions\";\nimport { handleFullScreen, handleLockOrientation } from \"../../../helpers/redux/actions/controller.actions\";\nimport Image from \"next/image\";\nimport IMAGES from \"../../../images/importImages\";\nimport { tw } from \"../../../helpers/helpers\";\n\nconst FullScreen = ({ width, height, className }: { width?: number; height?: number; className?: string }) => {\n useAppSelector(({ controller: { firstPlay, isFullScreen } }) => ({ firstPlay, isFullScreen }), shallowEqual);\n\n const [showTooltip, setShowTooltip] = useState<boolean>(false);\n\n // useEffect(() => {\n // if (!conditions(ConditionName.isFirstPlay)) dispatch(setActiveElements(false));\n // }, [isFullScreen]);\n\n return (\n <div\n onDoubleClick={(e) => e.preventDefault()}\n onMouseOver={() => !conditions(ConditionName.isTouchScreen) && setShowTooltip(true)}\n onMouseLeave={() => !conditions(ConditionName.isTouchScreen) && setShowTooltip(false)}\n onClick={() => {\n handleFullScreen();\n handleLockOrientation();\n }}\n id={conditions(ConditionName.isFullScreen) ? \"exit-full-s\" : \"full-s\"}\n className={tw(`pl-relative pl-cursor-pointer pl-flex pl-items-center pl-justify-center pl-rounded-full pl-transition-all ${className}`, {\n desktop: \"pl-w-[40px] pl-h-[25px] hover:pl-bg-[#5E5E5E]\",\n desktopFullScreen: \"pl-w-[56px] pl-h-[36px]\",\n touch: \"pl-w-[32px] pl-h-[22px]\",\n touchFullScreen: \"pl-w-[48px] pl-h-[32px]\",\n })}\n >\n <Image\n src={conditions(ConditionName.isFullScreen) ? IMAGES.nonFullScreen : IMAGES.fullScreen}\n alt=\"fullScreen-icon\"\n width={width}\n height={height}\n />\n\n {showTooltip && (\n <ControllbarTooltip className=\"pl-right-5\" title={`${conditions(ConditionName.isFullScreen) ? \"خروج از\" : \"\"} تمام صفحه (F)`} />\n )}\n </div>\n );\n};\n\nexport default FullScreen;\n","import { shallowEqual } from \"react-redux\";\nimport { useAppSelector } from \"../../../helpers/redux/hooks\";\nimport { conditions } from \"../../../helpers/conditions/conditions\";\nimport { ConditionName } from \"../../../helpers/interfaces/enums\";\nimport IMAGES from \"../../../images/importImages\";\nimport { firstUnMuteHandler, handleChangeSoundVolume, handlePlayPause } from \"../../../helpers/redux/actions/controller.actions\";\nimport Image from \"next/image\";\nimport ControllbarTooltip from \"../footer/controllbar/controllbarTooltip\";\nimport { useState } from \"react\";\nimport { tw } from \"../../../helpers/helpers\";\n\ninterface PlayPauseProps {\n width?: number;\n height?: number;\n disableTooltip?: boolean;\n disableScale?: boolean;\n className?: string;\n normalStyle?: boolean;\n inverse?: boolean;\n}\n\nconst PlayPause: React.FC<PlayPauseProps> = ({ width, height, disableTooltip, disableScale, className, inverse, normalStyle }) => {\n const { firstMute } = useAppSelector(({ controller: { play, firstMute } }) => ({ play, firstMute }), shallowEqual);\n useAppSelector(({ videoData: { videoElementSizeInfo, params } }) => ({ videoElementSizeInfo, params }), shallowEqual);\n\n const [showTooltip, setShowTooltip] = useState<boolean>(false);\n\n const isPlay = inverse ? !conditions(ConditionName.isPlay) : conditions(ConditionName.isPlay);\n\n return (\n <div\n onClick={(event: any) => {\n if (firstMute) {\n handleChangeSoundVolume(50);\n firstUnMuteHandler();\n } else handlePlayPause(event);\n }}\n onDoubleClick={(event: any) => event.stopPropagation()}\n onMouseOver={disableTooltip ? undefined : () => !conditions(ConditionName.isTouchScreen) && setShowTooltip(true)}\n onMouseLeave={disableTooltip ? undefined : () => !conditions(ConditionName.isTouchScreen) && setShowTooltip(false)}\n onContextMenu={(event) => event.preventDefault()}\n className={tw(\n `pl-relative pl-flex pl-items-center pl-justify-center pl-cursor-pointer ${\n normalStyle ? \"\" : \"pl-bg-black/75 pl-rounded-full pl-group\"\n } ${className}`,\n normalStyle ? undefined : { desktop: \"pl-size-[34px]\", desktopFullScreen: \"pl-size-[48px]\" }\n )}\n >\n <div\n className={tw(\n `pl-flex pl-items-center pl-justify-center pl-transition-all ${normalStyle ? \"\" : \"pl-rounded-full group-hover:pl-bg-[#5E5E5E]\"}`,\n normalStyle\n ? undefined\n : {\n desktop: \"pl-size-[26px]\",\n desktopFullScreen: \"pl-size-[36px]\",\n }\n )}\n >\n <Image\n alt=\"\"\n src={isPlay ? IMAGES.bigPause : IMAGES.bigPlay}\n width={width}\n height={height}\n className={`pl-transition-transform pl-ease-in-out ${isPlay ? \"pl-big-play-icon\" : \"pl-big-pause-icon\"} ${\n !conditions(ConditionName.isTouchScreen) && !disableScale && \"hover:pl-\"\n }`}\n />\n </div>\n\n {showTooltip && !disableTooltip && <ControllbarTooltip className=\"pl-left-0\" title={isPlay ? \"پخش (K)\" : \"توقف (K)\"} />}\n </div>\n );\n};\n\nexport default PlayPause;\n","import Image from \"next/image\";\nimport IMAGES from \"../../../images/importImages\";\nimport { styleMerge, tw } from \"../../../helpers/helpers\";\n\nconst SoundVolumeAlert = ({ className }: { className?: string }) => {\n return (\n <div\n className={tw(`pl-cursor-default pl-flex pl-items-center pl-bg-white pl-rounded-[4px] ${className}`, {\n desktop: \"pl-gap-2 pl-absolute pl-z-10 pl-h-9 pl-px-2 pl-top-[28px] pl-right-[18px] \",\n desktopFullScreen: \"pl-h-12 pl-px-3 pl-top-[46px] pl-right-[29px]\",\n touch: \"pl-gap-1.5 pl-h-6 pl-px-2\",\n touchFullScreen: \"pl-gap-2 pl-h-[36px] pl-px-2\",\n })}\n >\n <Image\n alt=\"mute\"\n width={styleMerge({ desktop: 24, desktopFullScreen: 32, touch: 16, touchFullScreen: 24 })}\n height={styleMerge({ desktop: 24, desktopFullScreen: 32, touch: 16, touchFullScreen: 24 })}\n src={IMAGES.mute2}\n className={\"pl-cursor-pointer\"}\n />\n <p\n className={tw(\"pl-font-medium pl-whitespace-nowrap pl-text-black\", {\n desktopFullScreen: \"pl-text-[14px]\",\n desktop: \"pl-text-[12px]\",\n touch: \"pl-text-[10px]\",\n touchFullScreen: \"pl-text-[12px]\",\n })}\n >\n برای پخش صدا روی ویدیو بزنید\n </p>\n </div>\n );\n};\n\nexport default SoundVolumeAlert;\n","import Image from \"next/image\";\nimport IMAGES from \"../../../images/importImages\";\nimport { handleLock } from \"../../../helpers/redux/actions/controller.actions\";\nimport { conditions } from \"../../../helpers/conditions/conditions\";\nimport { ConditionName } from \"../../../helpers/interfaces/enums\";\n\nconst Lock = () => {\n\n return (\n <div className={`pl-relative animate__animated animate__faster ${conditions(ConditionName.isActiveElements) ? \"animate__fadeIn pl-pointer-events-auto\" : \"animate__fadeOut pl-pointer-events-none\"}`}>\n <Image\n src={IMAGES.lock}\n alt=\"lock-icon\"\n width={20}\n height={20}\n onClick={() => handleLock(\"unlock\")}\n />\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>}\n </div>\n );\n};\n\nexport default Lock;\n","import { shallowEqual } from \"react-redux\";\nimport Title from \"../title/title\";\nimport { useAppSelector } from \"../../../helpers/redux/hooks\";\nimport { conditions } from \"../../../helpers/conditions/conditions\";\nimport { ConditionName } from \"../../../helpers/interfaces/enums\";\nimport Lock from \"../lockUnlock/lock\";\nimport { tw } from \"../../../helpers/helpers\";\n\nconst Header = () => {\n const { firstPlay } = useAppSelector(({ controller: { lock, activeElements, firstPlay } }) => ({ lock, activeElements, firstPlay }), shallowEqual);\n\n return (\n <div\n // style={{ backgroundImage: \"linear-gradient(180deg, rgba(0,0,0,0.25) 0%, rgba(0,0,0,0) 100%)\" }}\n className={tw(`pl-duration-300 pl-transition-[opacity] ${firstPlay ? \"pl-opacity-0\" : \"pl-opacity-100\"}`, {\n desktop: \"pl-rounded-t-[12px] pl-pt-8 pl-h-[45.5px]\",\n touch: \"pl-h-[16px]\",\n })}\n >\n <div className=\" pl-mx-8 pl-flex pl-items-start pl-justify-end pl-h-full\">\n {/* {conditions(ConditionName.showTitle) && <Title />} */}\n {conditions(ConditionName.isLock) && <Lock />}\n </div>\n </div>\n );\n};\n\nexport default Header;\n","import { IEnvironment } from \"./interfaces/interfaces\";\n\nexport const ENVIRONMENT: IEnvironment = {\n reduxDevTool: true\n};\n\nexport const activeElementsTime = 1000;\n\nexport const showLoaderTime = 3000;\n\nexport const continuousePlaybackIntervalTime = 60000;\n","import { useEffect, useState } from \"react\";\nimport { shallowEqual } from \"react-redux\";\nimport PlayPause from \"../playPause/playPause\";\nimport { useAppSelector } from \"../../../helpers/redux/hooks\";\nimport { conditions } from \"../../../helpers/conditions/conditions\";\nimport { ConditionName, zIndex } from \"../../../helpers/interfaces/enums\";\nimport Loader from \"../loader/loader\";\nimport { showLoaderTime } from \"../../../helpers/environment\";\nimport Image from \"next/image\";\nimport IMAGES from \"../../../images/importImages\";\nimport { handleBackwardForward } from \"../../../helpers/redux/actions/controller.actions\";\n\nconst Main = () => {\n const { firstPlay, autoplay, play, isLoading } = useAppSelector(\n ({\n controller: { lock, firstPlay, play, activeElements, isLoading },\n videoData: {\n params: { autoplay },\n },\n }) => ({ lock, firstPlay, autoplay, play, activeElements, isLoading }),\n shallowEqual\n );\n\n const [showLoader, setShowLoader] = useState<boolean>(true);\n const [showPlayPause, setShowPlayPause] = useState<boolean>(!autoplay);\n\n useEffect(() => {\n if (firstPlay || conditions(ConditionName.isTouchScreen)) return;\n\n let timeout: any = null;\n setShowPlayPause(true);\n timeout = setTimeout(() => setShowPlayPause(false), 1000);\n return () => {\n if (timeout) clearTimeout(timeout);\n };\n }, [play, firstPlay]);\n\n useEffect(() => {\n let timeout: any;\n if (isLoading) timeout = setTimeout(() => setShowLoader(true), showLoaderTime);\n else setShowLoader(false);\n return () => {\n clearTimeout(timeout);\n };\n }, [isLoading, firstPlay]);\n\n return (\n <main className=\"pl-flex-1 pl-mt-1\">\n {showLoader ? (\n <Loader />\n ) : (\n <>\n {!conditions(ConditionName.isLock) && (\n <div\n id=\"main-content\"\n className={`pl-h-full pl-flex pl-justify-center pl-items-center pl-text-center pl-relative ${\n conditions(ConditionName.isActiveElements) ? \"pl-pointer-events-auto\" : \"pl-pointer-events-none\"\n }`}\n >\n {!conditions(ConditionName.isTouchScreen) ? (\n <div className=\"pl-flex pl-justify-center pl-gap-8 pl-items-center pl-w-max\" style={{ zIndex: zIndex.mainIcons }}>\n <PlayPause\n normalStyle\n disableScale\n disableTooltip\n inverse={!firstPlay}\n width={conditions(ConditionName.isFullScreen) ? 81 : 48}\n height={conditions(ConditionName.isFullScreen) ? 81 : 48}\n className={`pl-flex pl-transition-all pl-duration-300 pl-ease-in-out pl-items-center pl-justify-center pl-rounded-full ${\n conditions(ConditionName.isFullScreen) ? \"pl-size-[122px]\" : \"pl-size-[72px]\"\n } pl-bg-black/75 ${showPlayPause ? \"pl-opacity-100\" : \"pl-opacity-0 pl-scale-0\"} ${\n firstPlay ? \"!pl-cursor-pointer\" : \"!pl-cursor-default\"\n }`}\n />\n </div>\n ) : (\n <div className=\"pl-flex pl-justify-center pl-gap-8 pl-items-center pl-w-max\" style={{ zIndex: zIndex.mainIcons }}>\n {!firstPlay && (\n <div\n onClick={(e) => {\n e.stopPropagation();\n handleBackwardForward(\"touchForward\", 10, e);\n }}\n className={`pl-flex pl-transition-all pl-duration-300 pl-ease-in-out pl-items-center pl-justify-center pl-rounded-full ${\n conditions(ConditionName.isFullScreen) ? \"pl-size-[56px]\" : \"pl-size-[40px]\"\n } pl-bg-black/75 ${conditions(ConditionName.isActiveElements) ? \"pl-opacity-100\" : \"pl-opacity-0\"}`}\n >\n <Image\n src={IMAGES.forward2}\n alt=\"\"\n className={\"!pl-cursor-pointer\"}\n width={conditions(ConditionName.isFullScreen) ? 28 : 16}\n height={conditions(ConditionName.isFullScreen) ? 28 : 16}\n />\n </div>\n )}\n\n <PlayPause\n normalStyle\n disableScale\n disableTooltip\n className={`pl-flex pl-transition-all pl-duration-300 pl-ease-in-out pl-items-center pl-justify-center pl-rounded-full ${\n conditions(ConditionName.isFullScreen) ? \"pl-size-[68px]\" : \"pl-size-[48px]\"\n } pl-bg-black/75 ${conditions(ConditionName.isActiveElements) ? \"pl-opacity-100\" : \"pl-opacity-0\"}`}\n width={conditions(ConditionName.isFullScreen) ? 36 : 24}\n height={conditions(ConditionName.isFullScreen) ? 36 : 24}\n />\n\n {!firstPlay && (\n <div\n onClick={(e) => {\n e.stopPropagation();\n handleBackwardForward(\"touchBackward\", 10, e);\n }}\n className={`pl-flex pl-transition-all pl-duration-300 pl-ease-in-out pl-items-center pl-justify-center pl-rounded-full ${\n conditions(ConditionName.isFullScreen) ? \"pl-size-[56px]\" : \"pl-size-[40px]\"\n } pl-bg-black/75 ${conditions(ConditionName.isActiveElements) ? \"pl-opacity-100\" : \"pl-opacity-0\"}`}\n >\n <Image\n src={IMAGES.backward2}\n alt=\"\"\n className={\"!pl-cursor-pointer\"}\n width={conditions(ConditionName.isFullScreen) ? 28 : 16}\n height={conditions(ConditionName.isFullScreen) ? 28 : 16}\n />\n </div>\n )}\n </div>\n )}\n </div>\n )}\n </>\n )}\n </main>\n );\n};\n\nexport default Main;\n","import store from \"../../redux/store\";\nimport { catchUpLoadingLog } from \"../../logs/logs\";\nimport { ConditionName, zIndex } from \"../../interfaces/enums\";\nimport { setActiveElements, setActivePointerProgressBar, setDelayTurnOffControlbar, setTooltipTime } from \"../slices/controllerSlice\";\nimport { handleVideoTimeline } from \"./controller.actions\";\nimport { setInfo } from \"../slices/videoDataSlice\";\nimport { sendFluentLog } from \"../../logs/fluentdLogger\";\nimport { conditions } from \"../../conditions/conditions\";\nimport { activeElementsTime } from \"../../environment\";\nimport {\n mainPlayerVideoTag,\n playerControllbar,\n progressArea,\n progressBar,\n progressBarWidth,\n progressContainer,\n progressTrack,\n} from \"../../constants\";\nimport { secondsToHMS } from \"../../helpers\";\nimport { CSSProperties } from \"react\";\n\nexport const getPointerPosition = (event: any) => {\n const { videoElementSizeInfo } = store.getState().videoData;\n const clientX = event.clientX !== undefined ? event.clientX : event.touches[0].clientX;\n if (clientX <= videoElementSizeInfo.right && clientX > 0) {\n return clientX - videoElementSizeInfo.left;\n }\n};\n\nexport const getMarkerPosition = (markerTime: number) => {\n const { duration } = store.getState().controller;\n return (markerTime * progressBarWidth()) / duration;\n};\n\nexport const hideProgressTooltip = (progressTooltip: any) => {\n if (progressTooltip) {\n progressTooltip.style.opacity = \"0.0\";\n progressTooltip.style.pointerEvents = \"none\";\n progressTooltip.style.zIndex = zIndex.vttDisable;\n handlerShowOrHiddenControllbarInTouch(true);\n }\n};\n\nconst generalStyleTooltipHandler = (progressTooltip: any) => {\n progressTooltip.style.display = \"block\";\n progressTooltip.style.zIndex = zIndex.vtt;\n progressTooltip.style.opacity = !!store.getState().videoData.details.vtt ? \"1.0\" : \"0.6\";\n progressTooltip.style.pointerEvents = \"auto\";\n progressTooltip.style.transition = \"opacity 1s ease-out\";\n handlerShowOrHiddenControllbarInTouch(false);\n};\n\nexport const showProgressTooltip = (event: any, progressTooltip: any, progressBarTooltip: any) => {\n if (progressTooltip) generalStyleTooltipHandler(progressTooltip);\n\n const offset = progressArea()?.offsetLeft || 0;\n const SAFE_OFFSET = offset ? 0 : 16;\n const pointerX = getPointerPosition(event)! - offset;\n const tooltipWidth = progressTooltip.offsetWidth;\n const barWidth = progressTooltip.parentElement.offsetWidth;\n const left = Math.min(Math.max(pointerX - tooltipWidth / 2, 0 + SAFE_OFFSET), barWidth - tooltipWidth - SAFE_OFFSET);\n progressTooltip.style.left = `${left}px`;\n\n store.dispatch(setTooltipTime(Number(getTimeFromPointer(event)!)));\n progressBarTooltip.textContent = `${secondsToHMS(getTimeFromPointer(event)!)}`;\n};\n\nexport const handleTimeTooltip = (event: any, isTimer: boolean = false) => {\n const { videoElementSizeInfo } = store.getState().videoData;\n const progressTooltip: any = document.querySelector(\".pl-progressTooltip\");\n const progressBarTooltip: any = document.querySelector(\".pl-progressTimeTooltip\");\n const clientX = event.clientX !== undefined ? event.clientX : event.touches[0].clientX;\n if (progressTooltip && progressBarTooltip && clientX <= videoElementSizeInfo.right && clientX > videoElementSizeInfo.left) {\n showProgressTooltip(event, progressTooltip, progressBarTooltip);\n if (isTimer) setTimeout(() => hideProgressTooltip(progressTooltip), 2000);\n } else hideProgressTooltip(progressTooltip);\n};\n\nexport const getTimeFromPointer = (event: any) => {\n const track = progressTrack();\n const { duration } = store.getState().controller;\n if (!track || !duration) return 0;\n\n const clientX = event.clientX !== undefined ? event.clientX : event.touches?.[0]?.clientX;\n\n const rect = track.getBoundingClientRect();\n const offsetX = Math.max(0, Math.min(clientX - rect.left, rect.width));\n\n return (offsetX / rect.width) * duration;\n};\n\nexport const handleProgressTime = (event: any) => {\n const { duration } = store.getState().controller;\n const bar = progressBar();\n const currentTime = getTimeFromPointer(event);\n bar.style.width = `${(currentTime / duration) * 100}%`;\n};\n\nexport const handlePointerDown = (event: any, timeoutIds: any, setIsPointerDown: (value: boolean) => void) => {\n event.preventDefault();\n event.stopPropagation();\n setIsPointerDown(true);\n const dispatch = store.dispatch;\n const clientX = event.clientX !== undefined ? event.clientX : event.touches[0].clientX;\n if (clientX <= event.view.innerWidth && clientX > 0) {\n dispatch(setActivePointerProgressBar(true));\n dispatch(setDelayTurnOffControlbar(true));\n\n const currentTime = getTimeFromPointer(event);\n sessionStorage.setItem(\"previousVideoTime\", String(currentTime));\n progressTrack()?.setPointerCapture(event.pointerId);\n if (timeoutIds.length > 0) timeoutIds.map((id: any) => clearTimeout(id));\n }\n};\n\nconst handlerShowOrHiddenControllbarInTouch = (show: boolean) => {\n // if (conditions(ConditionName.isTouchScreen)) {\n // const controllbar = playerControllbar();\n // controllbar.style.opacity = show ? \"1\" : \"0\";\n // }\n};\n\nexport const handlePointerMove = (event: any) => {\n event.preventDefault();\n event.stopPropagation();\n const dispatch = store.dispatch;\n\n const { activePointerProgressBar } = store.getState().controller;\n const { left } = store.getState().videoData.videoElementSizeInfo;\n const clientX = event.clientX !== undefined ? event.clientX : event.touches[0].clientX;\n const progressTooltip: any = document.querySelector(\".pl-progressTooltip\");\n if (clientX > left) {\n if (progressTooltip) {\n handlerShowOrHiddenControllbarInTouch(false);\n progressTooltip.style.display = \"block !important\";\n progressTooltip.style.pointerEvents = \"auto\";\n }\n if (activePointerProgressBar) {\n dispatch(setDelayTurnOffControlbar(true));\n handleTimeTooltip(event);\n handleProgressTime(event);\n mainPlayerVideoTag()?.pause();\n }\n } else if (progressTooltip) {\n handlerShowOrHiddenControllbarInTouch(true);\n progressTooltip.style.display = \"none !important\";\n progressTooltip.style.pointerEvents = \"none\";\n }\n};\n\nexport const handlePointerUp = (\n event: any,\n setTimeoutIds: (timeoutIds: any[]) => void,\n timeoutIds: any,\n setIsPointerDown: (value: boolean) => void,\n) => {\n setIsPointerDown(false);\n event.preventDefault();\n event.stopPropagation();\n const dispatch = store.dispatch;\n const { duration } = store.getState().controller;\n\n const { left, right } = store.getState().videoData.videoElementSizeInfo;\n const params = store.getState().videoData.params;\n event.target.removeEventListener(\"pointermove\", handlePointerMove);\n const clientX = event.clientX !== undefined ? event.clientX : event.touches[0].clientX;\n let currentTime = 0;\n if (clientX > left && clientX < right) currentTime = getTimeFromPointer(event)!;\n else if (clientX < left) currentTime = 0;\n else if (clientX > 0) currentTime = duration;\n if (!conditions(ConditionName.isStaticFormat)) handleVideoTimeline(mainPlayerVideoTag().currentTime, currentTime);\n mainPlayerVideoTag().currentTime = currentTime;\n if (conditions(ConditionName.hasOnChangeCurrentTime)) params.onChangeCurrentTime!(currentTime);\n if (store.getState().controller.activePointerProgressBar) {\n dispatch(setActivePointerProgressBar(false));\n dispatch(setDelayTurnOffControlbar(false));\n mainPlayerVideoTag().play();\n handleTimeTooltip(event, true);\n sessionStorage.setItem(\"current-time\", String(currentTime));\n handleProgressTime(event);\n handleTimeout(event, dispatch, setTimeoutIds, timeoutIds);\n }\n};\n\nconst handleTimeout = (event: any, dispatch: any, setTimeoutIds: (timeoutIds: any[]) => void, timeoutIds: any) => {\n const ids = timeoutIds;\n let timeoutIdTemp = setTimeout(() => {\n const { settingPopover } = store.getState().popovers;\n const { delayTurnOffControlbar } = store.getState().controller;\n if (event.pointerType === \"touch\" && !settingPopover && delayTurnOffControlbar) dispatch(setActiveElements(false));\n }, activeElementsTime);\n ids.push(timeoutIdTemp);\n setTimeoutIds(ids);\n};\n\nexport const handleCatchUpLoadingLog = () => {\n const timer = Date.now();\n mainPlayerVideoTag()\n .play()\n .then(() => sendFluentLog(catchUpLoadingLog(Date.now() - timer)));\n};\n\nexport const handleMouseMove = (event: any) => handleTimeTooltip(event);\n\nexport const handleMouseOut = () => {\n const progressBarTooltip: any = document.querySelector(\".pl-progressTooltip\");\n hideProgressTooltip(progressBarTooltip);\n};\n\n/////// vtt tooltip\nconst deconstructTimestamp = (timestamp: string) => {\n const splitStampMilliseconds = timestamp?.split(\".\");\n const timeParts = splitStampMilliseconds[0];\n const timePartsSplit = timeParts?.split(\":\");\n\n return {\n milliseconds: parseInt(splitStampMilliseconds[1], 10) || 0,\n seconds: parseInt(timePartsSplit.pop()!, 10) || 0,\n minutes: parseInt(timePartsSplit.pop()!, 10) || 0,\n hours: parseInt(timePartsSplit.pop()!, 10) || 0,\n };\n};\n\nconst getSecondsFromTimestamp = (timestamp: string) => {\n const timestampParts: any = deconstructTimestamp(timestamp);\n\n return parseInt(timestampParts.hours * (60 * 60) + timestampParts.minutes * 60 + timestampParts.seconds + timestampParts.milliseconds / 1000, 10);\n};\n\nconst getPropsFromDef = (def: string) => {\n const imageDefSplit = def?.split(/#xywh=/i);\n const imageUrl = imageDefSplit[0];\n const imageCoords = imageDefSplit[1];\n const splitCoords: any = imageCoords.match(/[0-9]+/gi);\n\n return {\n x: splitCoords[0],\n y: splitCoords[1],\n w: splitCoords[2],\n h: splitCoords[3],\n image: imageUrl,\n };\n};\n\nconst getFullyQualifiedUrl = (path: string, base: string) => {\n if (path.indexOf(\"//\") >= 0) {\n // We have a fully qualified path.\n return path;\n }\n\n if (base.indexOf(\"//\") === 0) {\n // We don't have a fully qualified path, but need to\n // be careful with trimming.\n return [base.replace(/\\/$/gi, \"\"), path.trim()].join(\"/\");\n }\n\n if (base.indexOf(\"//\") > 0) {\n // We don't have a fully qualified path, and should\n // trim both sides of base and path.\n return [base.trim(), path.trim()].join(\"/\");\n }\n\n // If all else fails.\n return path;\n};\n\nconst getVttCss = (vttImageDef: string, vttUrl: string) => {\n const cssObj: any = {};\n // If there isn't a protocol, use the VTT source URL.\n let baseSplit: string = vttUrl?.split(/\\/\\w+\\.vtt\\s?/)[0];\n\n /// offset : (vttUrl)?.split(/\\/\\w+\\.vtt\\s?/)[1]\n\n vttImageDef = getFullyQualifiedUrl(vttImageDef, baseSplit);\n\n if (!vttImageDef.match(/#xywh=/i)) {\n cssObj.background = 'url(\"' + vttImageDef + vttUrl?.split(/\\/\\w+\\.vtt\\s?/)[1] + '\")';\n return cssObj;\n }\n\n const imageProps = getPropsFromDef(vttImageDef);\n\n cssObj.background = 'url(\"' + imageProps.image + vttUrl?.split(/\\/\\w+\\.vtt\\s?/)[1] + '\") no-repeat -' + imageProps.x + \"px -\" + imageProps.y + \"px\";\n cssObj.width = imageProps.w + \"px\";\n cssObj.height = imageProps.h + \"px\";\n cssObj.url = imageProps.image;\n\n return cssObj;\n};\n\nexport const fetchFile = (url: string, setVttPool: any) => {\n fetch(url)\n .then((response) => {\n if (!response.ok) {\n store.dispatch(\n setInfo({\n ...store.getState().videoData.details,\n vtt: undefined,\n vtt_mobile: undefined,\n }),\n );\n throw new Error(\"Network response was not ok\");\n }\n return response.text();\n })\n .then((data) => {\n const processedVtts: any[] = [];\n const vttDefinitions = data?.split(/[\\r\\n][\\r\\n]/i);\n vttDefinitions.forEach((vttDef) => {\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)) {\n const vttDefSplit = vttDef?.split(/[\\r\\n]/i);\n const vttTiming = vttDefSplit[0];\n const vttTimingSplit = vttTiming?.split(/ ?--> ?/i);\n const vttTimeStart = vttTimingSplit[0];\n const vttTimeEnd = vttTimingSplit[1];\n const vttImageDef = vttDefSplit[1];\n const vttCssDef = getVttCss(vttImageDef, url);\n\n processedVtts.push({\n start: getSecondsFromTimestamp(vttTimeStart),\n end: getSecondsFromTimestamp(vttTimeEnd),\n css: vttCssDef,\n });\n }\n });\n setVttPool(processedVtts);\n })\n .catch((error) => {\n console.error(\"Error fetching file:\", error);\n });\n};\n\nexport const getStyleForTime = (time: number, vttPool: any, cache: any) => {\n for (let i = 0; i < vttPool.length; ++i) {\n const item = vttPool[i];\n if (time >= item.start && time < item.end) {\n // Cache miss\n if (item.css.url && !cache[item.css.url]) {\n const objectVtt: CSSProperties = {\n background: item.css.background,\n width: item.css.width,\n height: item.css.height,\n };\n cache[item.css.url] = objectVtt;\n return objectVtt;\n } else if (item.css.url) return cache[item.css.url];\n }\n }\n};\n","import { useEffect, useState } from \"react\";\nimport { shallowEqual } from \"react-redux\";\nimport { memo } from \"react\";\nimport { useAppSelector } from \"../../../helpers/redux/hooks\";\nimport { conditions } from \"../../../helpers/conditions/conditions\";\nimport { ConditionName } from \"../../../helpers/interfaces/enums\";\nimport { fetchFile, getStyleForTime } from \"../../../helpers/redux/actions/progressbar.actions\";\nimport { tw } from \"../../../helpers/helpers\";\n\nconst Tooltip = () => {\n const { details } = useAppSelector(({ videoData: { details } }) => ({ details }), shallowEqual);\n const { tooltipTime } = useAppSelector(\n ({ controller: { tooltipTime, activeElements, isFullScreen } }) => ({ tooltipTime, activeElements, isFullScreen }),\n shallowEqual,\n );\n\n const cache: any = {};\n const [vttPool, setVttPool] = useState<any>(undefined);\n const [vttUrl, setVttUrl] = useState<string | undefined>(conditions(ConditionName.isTouchScreen) ? details.vtt_mobile : details.vtt);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => {\n setVttUrl(details.vtt_mobile);\n }, [details.vtt_mobile]);\n\n useEffect(() => {\n if (!!vttUrl) fetchFile(details.vtt_mobile!, setVttPool);\n }, [vttUrl]);\n\n if (conditions(ConditionName.isActiveElements))\n return (\n <div\n className={`pl-flex pl-flex-col pl-items-center pl-justify-center pl-progressTooltip pl-absolute pl-bottom-[calc(100%+10px)] pl-text-white pl-text-[14px] ${\n vttUrl && !!vttPool ? \"\" : \"\"\n } pl-rounded-[6px] pl-opacity-0`}\n >\n {vttUrl && !!vttPool && (\n <div\n className={tw(`pl-flex-1 pl-border-[1.5px] pl-border-white pl-overflow-hidden pl-relative pl-rounded-[12px]`, {\n desktopFullScreen: \"pl-h-[164px] pl-w-[291px] pl-mb-1.5\",\n desktop: \"pl-h-[93px] pl-w-[165px] pl-mb-1\",\n touch: \"pl-h-[70px] pl-w-[135px] pl-mb-1\",\n touchFullScreen: \"pl-h-[137px] pl-w-[244px]\",\n })}\n >\n <div\n style={getStyleForTime(tooltipTime, vttPool, cache)}\n className={tw(`pl-absolute pl-inset-0 pl-top-1/2 pl-left-1/2 -pl-translate-x-1/2 -pl-translate-y-1/2 `, {\n desktop: \"pl-scale-[170%]\",\n touch: \"pl-scale-[130%]\",\n desktopFullScreen: \"pl-scale-[290%]\",\n touchFullScreen: \"pl-scale-[250%]\",\n })}\n />\n </div>\n )}\n\n <div\n className={tw(\n `pl-flex pl-items-center pl-mx-auto pl-w-fit pl-bg-black/75 pl-rounded-[24px] pl-justify-center pl-progressTimeTooltip pl-text-white !pl-opacity-100 `,\n {\n desktop: \"pl-text-[12px] pl-py-1 pl-px-2 pl-font-bold\",\n desktopFullScreen: \"pl-text-base pl-py-1.5 pl-px-3\",\n touchFullScreen: \"pl-text-base pl-py-1.5 pl-px-3\",\n touch: \"pl-text-[12px] pl-py-1 pl-px-2\",\n },\n )}\n />\n </div>\n );\n};\n\nexport default memo(Tooltip);\n","import { ChangeEvent, RefObject, useEffect } from \"react\";\n\nconst useOnClickOutside = (ref: RefObject<any>, handler: (event: ChangeEvent<HTMLInputElement>) => void) => {\n useEffect(() => {\n const listener = (event: any) => {\n // Do nothing if clicking ref's element or descendent elements\n if (!ref.current || ref.current.contains(event.target)) return;\n handler(event);\n };\n document.addEventListener(\"mousedown\", listener);\n document.addEventListener(\"touchstart\", listener);\n return () => {\n document.removeEventListener(\"mousedown\", listener);\n document.removeEventListener(\"touchstart\", listener);\n };\n }, [ref, handler]);\n};\n\nexport default useOnClickOutside;\n","import { IEmojiProps } from \"../../../helpers/interfaces/interfaces\";\nimport { getEmojiUrl } from \"../../../helpers/services/baseUrl\";\n\nconst Emoji = ({ name, className, dataMarker }: IEmojiProps) => {\n // eslint-disable-next-line @next/next/no-img-element\n return <img data-marker={dataMarker} src={`${getEmojiUrl()}/${name}.png`} alt={name} className={className} />;\n};\n\nexport default Emoji;\n","import { useEffect, useRef, useState, memo } from \"react\";\nimport { shallowEqual } from \"react-redux\";\nimport { useAppDispatch, useAppSelector } from \"../../../../../helpers/redux/hooks\";\nimport { mainPlayerVideoTag, progressBar, progressBarWidth } from \"../../../../../helpers/constants\";\nimport { handleTimeTooltip } from \"../../../../../helpers/redux/actions/progressbar.actions\";\nimport { handleVideoTimeline } from \"../../../../../helpers/redux/actions/controller.actions\";\nimport { sendFluentLog } from \"../../../../../helpers/logs/fluentdLogger\";\nimport { conditions } from \"../../../../../helpers/conditions/conditions\";\nimport { ConditionName, zIndex } from \"../../../../../helpers/interfaces/enums\";\nimport useOnClickOutside from \"../../../../../helpers/hooks/useOnClickOutside\";\nimport { eventMarkerClickLog } from \"../../../../../helpers/logs/logs\";\nimport Emoji from \"../../../emoji/emoji\";\nimport { inViewPort } from \"../../../../../helpers/helpers\";\n\nconst Markers = () => {\n const dispatch = useAppDispatch();\n const { duration, activeElements } = useAppSelector(\n ({ controller: { duration, activeElements, isFullScreen } }) => ({\n duration,\n activeElements,\n isFullScreen\n }),\n shallowEqual\n );\n const { markers } = useAppSelector(\n ({ videoData: { markers, videoElementSizeInfo } }) => ({ markers, videoElementSizeInfo }),\n shallowEqual\n );\n // const { sharePopover } = useAppSelector(({ popovers: { sharePopover } }) => ({ sharePopover }), shallowEqual);\n\n const [markerTime, setMarkerTime] = useState<number | undefined>(undefined);\n const [overlapMarkers, setOverlapMarkers] = useState<any[]>([]);\n const [overlapMarkersPosition, setOverlapMarkersPosition] = useState<any>({});\n const [isOverlapMarkersInViewport, setIsOverlapMarkersInViewport] = useState<boolean>(false);\n\n const calculateMarkerPosition = (time: number) => (duration ? (progressBarWidth() * time) / duration : 0);\n\n const handleClick = (\n event: any,\n markerTime: number,\n markerId: number,\n markerTitle: String,\n markerDescription: String,\n markerSticker: String,\n isTimer: boolean,\n markers: any\n ) => {\n event.stopPropagation();\n const eventMarkerWidth = 24;\n const result = (eventMarkerWidth * markerTime) / (progressBarWidth() + 5);\n\n let overlapMarkers: any[] = [];\n let sumOverlapMarkersTime: number = 0;\n\n markers.map((marker: any) => {\n if (marker.time > markerTime - result && marker.time < markerTime + result) {\n overlapMarkers.push(marker);\n sumOverlapMarkersTime += marker.time;\n }\n });\n if (overlapMarkers.length > 1) setOverlapMarkers(overlapMarkers);\n else {\n overlapMarkers = [];\n setOverlapMarkers([]);\n handleJumpToMarker(event, markerTime, markerId, markerTitle, markerDescription, markerSticker, isTimer);\n }\n };\n\n const handleJumpToMarker = (\n event: any,\n markerTime: number,\n markerId: number,\n markerTitle: String,\n markerDescription: String,\n markerSticker: String,\n isTimer: boolean\n ) => {\n event.stopPropagation();\n handleTimeTooltip(event, isTimer);\n handleVideoTimeline(mainPlayerVideoTag().currentTime, markerTime);\n mainPlayerVideoTag().currentTime = markerTime;\n if (progressBar()) progressBar().style.width = calculateMarkerPosition(markerTime);\n sendFluentLog(eventMarkerClickLog(markerId, markerTime, markerTitle, markerDescription, markerSticker));\n };\n\n // useEffect(() => {\n // if (!sharePopover) setMarkerTime(undefined);\n // }, [sharePopover]);\n\n // useEffect(() => {\n // if (!!markerTime) dispatch(setSharePopover(true));\n // }, [markerTime]);\n\n useEffect(() => {\n if (!conditions(ConditionName.isActiveElements)) setOverlapMarkers([]);\n }, [activeElements]);\n\n const markerRef = useRef<any>(null);\n\n useOnClickOutside(markerRef, () => setOverlapMarkers([]));\n\n useEffect(() => {\n if (overlapMarkers.length > 0) {\n const isInViewPort = inViewPort(document.getElementsByClassName(\"pl-overlapMarkers\")[0]);\n if (isInViewPort === \"inViewport\") {\n setIsOverlapMarkersInViewport(true);\n return setOverlapMarkersPosition({ left: calculateMarkerPosition(overlapMarkers[0].time) });\n } else if (isInViewPort === \"OutViewPortFromLeft\") {\n setIsOverlapMarkersInViewport(false);\n return setOverlapMarkersPosition({ left: 0 });\n } else if (isInViewPort === \"OutViewPortFromRight\") {\n setIsOverlapMarkersInViewport(false);\n return setOverlapMarkersPosition({ right: 0 });\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [overlapMarkers, document.getElementsByClassName(\"pl-overlapMarkers\")[0]]);\n\n const handleContextMenu = (event: any) => {\n event.preventDefault();\n if (conditions(ConditionName.isTouchScreen)) setMarkerTime(Number((event.target as any).getAttribute(\"data-marker\")));\n };\n\n \n\n return (\n <>\n {markers.map((marker: any) => (\n <div\n onContextMenu={handleContextMenu}\n key={marker.id}\n data-marker={marker.time}\n onClick={(event) => handleClick(event, marker.time, marker.id, marker.title, marker.description, marker.sticker, true, markers)}\n onDoubleClick={(event: any) => event.stopPropagation()}\n >\n <div\n className={`pl-emoji-image pl-absolute pl-bottom-[200%] pl-bg-z-gray-700/[0.4] pl-rounded-[6px] pl-p-1 ${\n conditions(ConditionName.isTouchScreenPortrait) ? \"pl-mb-5\" : \"pl-mb-5\"\n } pl-ml-[-12px] pl-cursor-pointer`}\n style={{ left: calculateMarkerPosition(marker.time), zIndex: zIndex.markers }}\n data-marker={marker.time}\n >\n {marker.isPersonal !== null && marker.isPersonal !== undefined && (\n <div className=\"pl-absolute pl-rounded-full pl-top-[-2px] pl-right-[-1px] pl-bg-main pl-w-2 pl-h-2\" />\n )}\n <Emoji dataMarker={marker.time} name={marker.sticker} className=\"pl-w-[16px] pl-h-[16px] !pl-max-w-max\" />\n </div>\n </div>\n ))}\n {overlapMarkers.length > 0 && (\n <div\n className={`pl-overlapMarkers ${\n isOverlapMarkersInViewport ? \"pl-overlayMarkersInViewport\" : \"pl-overlayMarkersOutViewport\"\n } pl-absolute pl-bottom-[45px] pl-px-1 pl-py-2 pl-flex pl-gap-3 pl-flex-row-reverse pl-justify-end pl-bg-z-gray-700/[0.4] pl-rounded-[6px] pl-ml-[-10px] animate__animated animate__fadeInUp pl-opacity-100`}\n ref={markerRef}\n style={overlapMarkersPosition}\n >\n {overlapMarkers.map((overlapMarker: any) => (\n <div\n key={overlapMarker.id}\n className=\"pl-emoji-image pl-rounded-[6px] pl-cursor-pointer\"\n data-marker={overlapMarker.time}\n onClick={(event: any) =>\n handleJumpToMarker(\n event,\n overlapMarker.time,\n overlapMarker.id,\n overlapMarker.title,\n overlapMarker.description,\n overlapMarker.sticker,\n true\n )\n }\n onDoubleClick={(event: any) => event.stopPropagation()}\n >\n <Emoji dataMarker={overlapMarker.time} name={overlapMarker.sticker} className=\"pl-w-[24px] pl-h-[24px] !pl-max-w-max\" />\n </div>\n ))}\n </div>\n )}\n {/* {!!sharePopover && markerTime && (\n <ShareDialog\n currentTime={markerTime ? markerTime : undefined}\n markerId={markers.filter((item: IMarker) => item.time === markerTime)[0].id}\n />\n )} */}\n </>\n );\n};\n\nexport default memo(Markers);\n","import { useEffect, useState } from \"react\";\nimport { shallowEqual } from \"react-redux\";\nimport Tooltip from \"../../tooltip/tooltip\";\nimport {\n handleCatchUpLoadingLog,\n handleMouseMove,\n handleMouseOut,\n handlePointerDown,\n handlePointerMove,\n handlePointerUp,\n hideProgressTooltip,\n} from \"../../../../helpers/redux/actions/progressbar.actions\";\nimport { useAppSelector } from \"../../../../helpers/redux/hooks\";\nimport { ConditionName } from \"../../../../helpers/interfaces/enums\";\nimport { conditions } from \"../../../../helpers/conditions/conditions\";\nimport Markers from \"./markers/markers\";\nimport { tw } from \"../../../../helpers/helpers\";\n\nconst ProgressBar = () => {\n const [isPointerDown, setIsPointerDown] = useState<boolean>(false);\n const [timeoutIds, setTimeoutIds] = useState<any[]>([]);\n\n useEffect(() => {\n hideProgressTooltip(document.querySelector(\".progressTooltip\"));\n }, []);\n\n const { duration, currentTime, bufferedTimeWidth } = useAppSelector(\n ({ controller: { duration, currentTime, bufferedTimeWidth, isFullScreen } }) => ({\n duration,\n currentTime,\n bufferedTimeWidth,\n isFullScreen,\n }),\n shallowEqual,\n );\n useAppSelector(\n ({ videoData: { params, videoElementSizeInfo } }) => ({\n params,\n videoElementSizeInfo,\n }),\n shallowEqual,\n );\n\n return (\n <div\n id=\"time-progress-container\"\n className={tw(`pl-relative ${conditions(ConditionName.isTouchScreenPortrait) ? \"pl-order-1\" : \"pl-order-none\"}`, { desktop: \"pl-px-4\" })}\n >\n <div className=\"pl-relative\">\n <Tooltip />\n <Markers />\n </div>\n\n <div\n className={`pl-flex pl-items-end`}\n onPointerDown={(event: any) => handlePointerDown(event, timeoutIds, setIsPointerDown)}\n onPointerMove={handlePointerMove}\n onPointerUp={(event: any) => handlePointerUp(event, setTimeoutIds, timeoutIds, setIsPointerDown)}\n onMouseMove={handleMouseMove}\n onMouseOut={handleMouseOut}\n onClick={handleCatchUpLoadingLog}\n >\n <div id=\"progress-area\" className={tw(\"pl-w-full\")}>\n <div\n id=\"time-progress-area\"\n className={tw(\"!pl-w-full pl-relative pl-transition-transform pl-duration-300 pl-m-auto pl-cursor-pointer !pl-bg-[#4A4A4A] \", {\n desktop: \"pl-h-[3px] pl-rounded-[8px]\",\n desktopFullScreen: \"!pl-h-[6px]\",\n touch: \"pl-h-[3px]\",\n touchFullScreen: \"\",\n })}\n >\n <div\n style={{ width: `${bufferedTimeWidth}%` }}\n id=\"time-progress-buffer\"\n className={tw(`pl-absolute pl-bg-[#C7C7C7] `, {\n desktop: \"pl-h-[3px] pl-rounded-[8px]\",\n desktopFullScreen: \"!pl-h-[6px]\",\n touch: \"pl-h-[3px]\",\n touchFullScreen: \"\",\n })}\n />\n <div\n style={{ width: currentTime === duration ? \"0%\" : `${(currentTime / duration) * 100}%` }}\n id=\"time-progress-bar\"\n className={tw(`pl-relative pl-cursor-pointer pl-bg-[#FF0033] before:pl-bg-[#FF0033] before:pl-inline-block`, {\n desktop: `pl-h-[3px] before:pl-size-[9px] pl-rounded-[8px] ${isPointerDown && \"before:pl-size-[11px]\"}`,\n desktopFullScreen: `!pl-h-[6px] before:!pl-size-[20px] ${isPointerDown && \"before:!pl-size-[22px]\"}`,\n touch: `pl-h-[3px] before:pl-size-[8px]`,\n touchFullScreen: `before:!pl-size-[9px]`,\n })}\n />\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default ProgressBar;\n","import { TouchEvent, forwardRef, useEffect, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { shallowEqual } from \"react-redux\";\nimport { IPopoverProps } from \"../../../helpers/interfaces/interfaces\";\nimport { useAppSelector } from \"../../../helpers/redux/hooks\";\nimport { zIndex } from \"../../../helpers/interfaces/enums\";\nimport { tw } from \"../../../helpers/helpers\";\n\nconst Popover = forwardRef(\n (\n {\n children,\n status,\n onClose,\n type,\n classNames,\n parentClassNames,\n styles,\n isBlurBackground,\n isFullHeight = false,\n isFullScreen,\n isHeader,\n isHasCatchUpLineOnTop = false,\n animation,\n scrollbar = false,\n isFocusOnInput = false,\n }: IPopoverProps,\n ref: any\n ) => {\n const [showPopover, setShowPopover] = useState<boolean>(status!);\n\n const [maxHeight, setMaxHeight] = useState<number>(0);\n const [maxHeightOnTouchMove, setMaxHeightOnTouchMove] = useState<number>(0);\n const [zIndexOnCatchUp, setZIndexOnCatchUp] = useState<number>(0);\n\n const { videoElementSizeInfo } = useAppSelector(({ videoData: { videoElementSizeInfo } }) => ({ videoElementSizeInfo }), shallowEqual);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => {\n let timeout: any = undefined;\n\n if (status) {\n setShowPopover(true);\n } else {\n timeout = setTimeout(() => {\n onClose(false);\n setMaxHeightOnTouchMove(0);\n setShowPopover(false);\n }, 500);\n }\n\n return () => clearTimeout(timeout);\n }, [status]);\n\n const handleTouchMove = (event: any) => {\n if (event.touches[0].clientY >= videoElementSizeInfo.top) setMaxHeightOnTouchMove(window.innerHeight - event.touches[0].clientY);\n else setMaxHeightOnTouchMove(window.innerHeight - videoElementSizeInfo.top);\n setZIndexOnCatchUp(zIndex.maxPopover);\n };\n\n const handleTouchEnd = () => {\n if (maxHeightOnTouchMove !== 0) {\n if (maxHeightOnTouchMove > maxHeight) {\n if (maxHeightOnTouchMove - maxHeight > (window.innerHeight - videoElementSizeInfo.top - maxHeight) / 2) {\n setMaxHeightOnTouchMove(window.innerHeight - videoElementSizeInfo.top);\n setZIndexOnCatchUp(zIndex.maxPopover);\n } else {\n setMaxHeightOnTouchMove(0);\n setTimeout(() => setZIndexOnCatchUp(0), 500);\n }\n } else {\n if (maxHeightOnTouchMove > maxHeight / 2) setMaxHeightOnTouchMove(maxHeight);\n else {\n setMaxHeightOnTouchMove(0);\n setMaxHeight(0);\n onClose();\n }\n setZIndexOnCatchUp(0);\n }\n }\n };\n\n const content = (\n <>\n {isBlurBackground && (\n <div\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 ${\n status ? \"animate__fadeIn\" : \"animate__fadeOut\"\n }`}\n style={{\n zIndex: zIndex.popoverBlurBackground,\n backdropFilter: \"blur(4px)\",\n }}\n />\n )}\n <div\n className={`${\n type === \"modal\" && \"pl-fixed pl-top-0 pl-left-0 pl-flex pl-w-full pl-h-full pl-justify-center pl-items-end sm:pl-items-center\"\n } ${parentClassNames}`}\n style={{\n zIndex: isFullHeight && !isFocusOnInput ? zIndexOnCatchUp : zIndex.popoverContent,\n }}\n >\n <div\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]\n ${isFullHeight && \"pl-h-full\"}\n ${\n animation\n ? animation\n : window.innerWidth > 768 && type === \"modal\"\n ? status\n ? \"animate__fadeIn\"\n : \"animate__fadeOut\"\n : status\n ? \"animate__fadeInUp\"\n : \"animate__fadeOutDown\"\n }\n before:pl-hidden\n ${\n type !== \"modal\" &&\n `pl-absolute ${tw(\"\", {\n desktop: \"pl-bottom-[20px]\",\n desktopFullScreen: \"pl-bottom-[60px]\",\n })} pl-overflow-auto no-scrollbar`\n }\n ${classNames}\n `}\n style={{\n maxHeight: isFullScreen ? \"unset\" : maxHeightOnTouchMove ? maxHeightOnTouchMove : maxHeight ? maxHeight : \"\",\n zIndex: zIndex.popoverContent,\n ...styles,\n }}\n ref={ref}\n id=\"popover-content\"\n >\n <>\n {isHeader && (\n <div\n onTouchMove={isHasCatchUpLineOnTop ? handleTouchMove : () => {}}\n onTouchEndCapture={isHasCatchUpLineOnTop ? handleTouchEnd : () => {}}\n className=\"pl-py-4\"\n >\n {isHasCatchUpLineOnTop && (\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\" />\n )}\n </div>\n )}\n <div\n id=\"popover-content\"\n className={`pl-overflow-y-auto pl-h-full pl-w-full ${!scrollbar && \"no-scrollbar\"}`}\n onTouchMove={(event: TouchEvent<HTMLDivElement>) => event.stopPropagation()}\n >\n {children}\n </div>\n </>\n </div>\n </div>\n </>\n );\n\n return (\n <>\n {showPopover && (\n <>\n {type === \"modal\" ? (\n createPortal(\n <div style={{ fontFamily: \"IRANSansXFaNum\", direction: \"rtl\", overflowX: \"hidden\" }}>{content}</div>,\n document.getElementById(\"dialog-react-root-videoPlayer\")!\n )\n ) : (\n <div id=\"player-popover\">{content}</div>\n )}\n </>\n )}\n </>\n );\n }\n);\n\nPopover.displayName = \"popover\";\n\nexport default Popover;\n","import { shallowEqual } from \"react-redux\";\nimport { memo, useRef, useState } from \"react\";\nimport { useAppDispatch, useAppSelector } from \"../../../helpers/redux/hooks\";\nimport { conditions } from \"../../../helpers/conditions/conditions\";\nimport { ConditionName, SettingSections } from \"../../../helpers/interfaces/enums\";\nimport { sendFluentLog } from \"../../../helpers/logs/fluentdLogger\";\nimport { qualityChangeRequestLog } from \"../../../helpers/logs/logs\";\nimport { setActiveElements } from \"../../../helpers/redux/slices/controllerSlice\";\nimport { setQualityLevelsPopover, setSettingPopover } from \"../../../helpers/redux/slices/popoversSlice\";\nimport { setUserSettings } from \"../../../helpers/redux/slices/userSlice\";\nimport Image from \"next/image\";\nimport IMAGES from \"../../../images/importImages\";\nimport { IQualityLevel } from \"../../../helpers/interfaces/interfaces\";\nimport Popover from \"../popover/popover\";\nimport useOnClickOutside from \"../../../helpers/hooks/useOnClickOutside\";\nimport ControllbarTooltip from \"../footer/controllbar/controllbarTooltip\";\n\nconst QualityLevels = ({ setSection, showQualityLevelsIcon }: IQualityLevel) => {\n const dispatch = useAppDispatch();\n let { qualityLevels } = useAppSelector(\n ({ controller: { qualityLevels, manualQuality, autoQuality } }) => ({\n qualityLevels,\n manualQuality,\n autoQuality,\n }),\n shallowEqual\n );\n const { settings } = useAppSelector(({ user: { settings } }) => ({ settings }), shallowEqual);\n const { qualityLevelsPopover } = useAppSelector(({ popovers: { qualityLevelsPopover } }) => ({ qualityLevelsPopover }), shallowEqual);\n const { videoElementSizeInfo } = useAppSelector(\n ({ videoData: { params, videoElementSizeInfo } }) => ({ params, videoElementSizeInfo }),\n shallowEqual\n );\n\n const [showTooltip, setShowTooltip] = useState<boolean>(false);\n\n qualityLevels = [-1, ...qualityLevels];\n\n const handleTickSelectedQuality = (index: number, qualityLevel: number) => {\n if (conditions(ConditionName.isAutoQuality) && qualityLevel === -1) return true;\n else return !conditions(ConditionName.isAutoQuality) && settings.quality === index;\n };\n\n const qualityLevelsRef = useRef<any>(null);\n\n useOnClickOutside(qualityLevelsRef, () => dispatch(setQualityLevelsPopover(false)));\n\n const qualityLevelsContent = (\n <div\n id={SettingSections.qualityLevels}\n className={`animate__animated animate__fadeIn ${conditions(ConditionName.isTouchScreen) ? \"pl-pb-2\" : \"pl-py-2\"}`}\n >\n <ul className=\"pl-flex pl-flex-col pl-gap-1\">\n <li\n className={`pl-flex pl-items-center pl-border-b ${\n conditions(ConditionName.isTouchScreen) ? \"pl-border-b-[#D9D9D9]\" : \"pl-border-b-[#4A4A4A]\"\n } pl-ps-[24.2px] pl-leading-[28px] pl-text-[12px] pl-font-medium pl-relative pl-cursor-pointer pl-h-10`}\n onClick={() => setSection && setSection(SettingSections.main)}\n >\n <div className=\"pl-absolute pl-right-[10px] pl-top-1/2 -pl-translate-y-1/2 pl-flex pl-items-center pl-justify-center\">\n <Image\n src={IMAGES.chevronRight}\n className={conditions(ConditionName.isTouchScreen) ? \"pl-brightness-0\" : \"\"}\n alt=\"\"\n width={16}\n height={16}\n />\n </div>\n <span\n className={`pl-w-full pl-text-[12px] ${conditions(ConditionName.isTouchScreen) ? \"pl-text-[#212121]\" : \"pl-text-white\"} pl-pr-[10px]`}\n >\n کیفیت پخش\n </span>\n </li>\n\n <div\n className=\"pl-overflow-y-auto no-scrollbar\"\n style={{ maxHeight: conditions(ConditionName.isTouchScreenPortrait) ? undefined : videoElementSizeInfo.height - 200 - 70 }}\n >\n {qualityLevels.map((qualityLevel: number, index: number) => (\n <li\n key={index}\n className={`pl-flex pl-items-center pl-ps-[24.2px] pl-leading-[28px] pl-text-[12px] pl-font-medium pl-relative pl-cursor-pointer pl-h-10 pl-transition-all ${\n conditions(ConditionName.isTouchScreen) ? \"\" : \"hover:pl-bg-[#4A4A4A]\"\n } ${handleTickSelectedQuality(index - 1, qualityLevel) && `!pl-cursor-default`}`}\n onClick={() => {\n if (handleTickSelectedQuality(index - 1, qualityLevel)) return;\n sendFluentLog(qualityChangeRequestLog(qualityLevel === -1 ? \"auto\" : `${qualityLevel}P`));\n // dispatch(setActiveElements(false));\n // dispatch(setSettingPopover(false));\n // dispatch(setQualityLevelsPopover(false));\n dispatch(setUserSettings({ ...settings, quality: qualityLevel === -1 ? -1 : index - 1 }));\n if (setSection) setSection(SettingSections.main);\n }}\n >\n {!!handleTickSelectedQuality(index - 1, qualityLevel) && (\n <div className=\"pl-absolute pl-right-[10px] pl-top-1/2 -pl-translate-y-1/2 pl-flex pl-items-center pl-justify-center\">\n <Image\n src={IMAGES.tick}\n alt=\"\"\n className={conditions(ConditionName.isTouchScreen) ? \"pl-brightness-0\" : \"\"}\n width={20}\n height={20}\n />\n </div>\n )}\n\n <span\n className={`pl-w-full pl-text-[12px] ${conditions(ConditionName.isTouchScreen) ? \"pl-text-[#212121]\" : \"pl-text-white\"} pl-pr-[10px]`}\n >\n {qualityLevel === -1 ? (\n <span>\n <span>خودکار </span>\n <span\n className={`pl-text-[10px] pl-font-normal ${\n conditions(ConditionName.isTouchScreen) ? \"pl-text-[#737373]\" : \"pl-text-[#C7C7C7]\"\n }`}\n >\n (بر اساس سرعت اینترنت شما)\n </span>\n </span>\n ) : (\n `${qualityLevel}p`\n )}\n </span>\n </li>\n ))}\n </div>\n </ul>\n </div>\n );\n\n return (\n <>\n {showQualityLevelsIcon ? (\n <div className=\"pl-relative pl-flex pl-items-center\" ref={qualityLevelsRef}>\n <Image\n src={IMAGES.qualitySetting}\n alt=\"speed-icon\"\n width={20}\n height={20}\n onClick={() => dispatch(setQualityLevelsPopover(!qualityLevelsPopover))}\n onMouseOver={() =>\n !conditions(ConditionName.isTouchScreen) && !conditions(ConditionName.showQualityLevelsPopover) && setShowTooltip(true)\n }\n onMouseLeave={() => !conditions(ConditionName.isTouchScreen) && setShowTooltip(false)}\n className=\"pl-cursor-pointer\"\n />\n {showTooltip && <ControllbarTooltip title=\"کیفیت\" />}\n <Popover\n classNames={`!pl-p-0 pl-overflow-hidden !pl-bg-black/[75%] ${\n conditions(ConditionName.isTouchScreen)\n ? \"!pl-fixed !pl-bottom-0 !pl-rounded-t-[20px] pl-rounded-b-none\"\n : \"pl-right-0 pl-mb-[33px] !pl-rounded-[12px] pl-w-[230px]\"\n } ${conditions(ConditionName.isTouchScreenPortrait) && \"!pl-w-screen tablet:pl-max-w-[440px]\"} ${\n conditions(ConditionName.isTouchScreenLandscape) && \"pl-w-full pl-max-w-[440px]\"\n }`}\n status={qualityLevelsPopover}\n onClose={() => dispatch(setQualityLevelsPopover(false))}\n type={conditions(ConditionName.isTouchScreen) ? \"modal\" : \"popover\"}\n isBlurBackground={conditions(ConditionName.isTouchScreen)}\n ref={conditions(ConditionName.isTouchScreen) ? qualityLevelsRef : undefined}\n isHeader={conditions(ConditionName.isTouchScreen)}\n customHeader={<></>}\n isHasCatchUpLineOnTop={conditions(ConditionName.isTouchScreen)}\n styles={{\n maxHeight:\n !conditions(ConditionName.isTouchScreenPortrait) &&\n videoElementSizeInfo.height - (conditions(ConditionName.isTouchScreenLandscape) ? 120 : 75),\n }}\n >\n {qualityLevelsContent}\n </Popover>\n </div>\n ) : (\n <>{qualityLevelsContent}</>\n )}\n </>\n );\n};\n\nexport default memo(QualityLevels);\n","import { ISpeedProps } from \"../../helpers/interfaces/interfaces\";\n\nconst SpeedIcon = ({ className, onClick, onMouseOver, onMouseLeave, width, height }: ISpeedProps) => {\n return (\n <svg\n width=\"20\"\n height=\"20\"\n fill=\"none\"\n onClick={onClick}\n viewBox=\"0 0 20 20\"\n className={className}\n onMouseOver={onMouseOver}\n style={{ width, height }}\n onMouseLeave={onMouseLeave}\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M8.83613 12.7885C9.13211 13.0844 9.51329 13.2249 9.97967 13.21C10.4459 13.195 10.7881 13.0267 11.0061 12.7052L15.5284 6.15396L8.96113 10.6602C8.63433 10.8783 8.4578 11.2135 8.43155 11.6658C8.40544 12.1183 8.5403 12.4926 8.83613 12.7885ZM9.99967 3.75C10.7925 3.75 11.5352 3.85389 12.228 4.06167C12.9209 4.26944 13.59 4.58382 14.2353 5.00479L13.0605 5.76438C12.5862 5.51229 12.0945 5.32188 11.5855 5.19313C11.0763 5.06438 10.5477 5 9.99967 5C8.15245 5 6.57954 5.64931 5.28092 6.94792C3.98231 8.24653 3.33301 9.81944 3.33301 11.6667C3.33301 12.25 3.41287 12.8264 3.57259 13.3958C3.73231 13.9653 3.95801 14.5 4.24967 15H15.7497C16.0691 14.4722 16.3018 13.9236 16.4476 13.3542C16.5934 12.7847 16.6663 12.1944 16.6663 11.5833C16.6663 11.0833 16.6047 10.5772 16.4813 10.065C16.3579 9.55264 16.1674 9.06625 15.9099 8.60583L16.6695 7.43104C17.0809 8.10521 17.3894 8.77965 17.5951 9.45438C17.8006 10.1291 17.9077 10.8302 17.9163 11.5577C17.9248 12.312 17.8399 13.0249 17.6616 13.6963C17.4831 14.3678 17.2144 15.0246 16.8555 15.6667C16.7454 15.8472 16.5904 15.9896 16.3907 16.0938C16.1909 16.1979 15.9772 16.25 15.7497 16.25H4.24967C4.02745 16.25 3.8178 16.1966 3.62072 16.0898C3.42363 15.9828 3.26467 15.8311 3.14384 15.6346C2.82551 15.079 2.56912 14.4733 2.37467 13.8173C2.18023 13.1613 2.08301 12.4444 2.08301 11.6667C2.08301 10.5781 2.28954 9.55465 2.70259 8.59646C3.11565 7.63826 3.67947 6.79903 4.39405 6.07875C5.10877 5.35847 5.94898 4.79028 6.91467 4.37417C7.88051 3.95806 8.90884 3.75 9.99967 3.75Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n};\n\nexport default SpeedIcon;\n","import { useEffect, useRef, useState } from \"react\";\nimport { shallowEqual } from \"react-redux\";\nimport { useAppDispatch, useAppSelector } from \"../../../helpers/redux/hooks\";\nimport useOnClickOutside from \"../../../helpers/hooks/useOnClickOutside\";\nimport { setSettingPopover, setSpeedPopover } from \"../../../helpers/redux/slices/popoversSlice\";\nimport { conditions } from \"../../../helpers/conditions/conditions\";\nimport { ConditionName, SettingSections } from \"../../../helpers/interfaces/enums\";\nimport { setUserSettings } from \"../../../helpers/redux/slices/userSlice\";\nimport { sendFluentLog } from \"../../../helpers/logs/fluentdLogger\";\nimport { speedChangeLog } from \"../../../helpers/logs/logs\";\nimport { ISpeed } from \"../../../helpers/interfaces/interfaces\";\nimport Image from \"next/image\";\nimport IMAGES from \"../../../images/importImages\";\nimport Popover from \"../popover/popover\";\nimport { setActiveElements } from \"../../../helpers/redux/slices/controllerSlice\";\nimport ControllbarTooltip from \"../footer/controllbar/controllbarTooltip\";\nimport SpeedIcon from \"../../icon-components/speed\";\nimport { mainPlayerVideoTag } from \"../../../helpers/constants\";\n\nexport const speeds = [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2];\n\nconst Speed = ({ setSection, showSpeedIcon }: ISpeed) => {\n const dispatch = useAppDispatch();\n const { videoElementSizeInfo, params } = useAppSelector(\n ({ videoData: { videoElementSizeInfo, params } }) => ({ videoElementSizeInfo, params }),\n shallowEqual\n );\n const { speedPopover } = useAppSelector(({ popovers: { speedPopover } }) => ({ speedPopover }), shallowEqual);\n const { settings } = useAppSelector(({ user: { settings } }) => ({ settings }), shallowEqual);\n\n const speedRef = useRef<any>(null);\n\n const [showTooltip, setShowTooltip] = useState<boolean>(false);\n\n useOnClickOutside(speedRef, () => dispatch(setSpeedPopover(false)));\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => {\n if (mainPlayerVideoTag()) mainPlayerVideoTag().playbackRate = settings.speed;\n }, []);\n\n const speedContent = (\n <div\n id={SettingSections.speed}\n className={`animate__animated animate__fadeIn ${conditions(ConditionName.isTouchScreen) ? \"pl-pb-2\" : \"pl-py-2\"}`}\n >\n <ul className=\"pl-flex pl-flex-col pl-gap-1\">\n <li\n className={`pl-flex pl-items-center pl-border-b ${\n conditions(ConditionName.isTouchScreen) ? \"pl-border-b-[#D9D9D9]\" : \"pl-border-b-[#4A4A4A]\"\n } pl-ps-[24.2px] pl-leading-[28px] pl-text-[12px] pl-font-medium pl-relative pl-cursor-pointer pl-h-10`}\n onClick={() => setSection && setSection(SettingSections.main)}\n >\n <div className=\"pl-absolute pl-right-[10px] pl-top-1/2 -pl-translate-y-1/2 pl-flex pl-items-center pl-justify-center\">\n <Image\n src={IMAGES.chevronRight}\n className={conditions(ConditionName.isTouchScreen) ? \"pl-brightness-0\" : \"\"}\n alt=\"\"\n width={16}\n height={16}\n />\n </div>\n <span\n className={`pl-w-full pl-text-[12px] ${conditions(ConditionName.isTouchScreen) ? \"pl-text-[#212121]\" : \"pl-text-white\"} pl-pr-[10px]`}\n >\n سرعت\n </span>\n </li>\n\n <div\n className=\"pl-overflow-y-auto no-scrollbar\"\n style={{ maxHeight: conditions(ConditionName.isTouchScreenPortrait) ? undefined : videoElementSizeInfo.height - 200 - 70 }}\n >\n {speeds.map((speed: number, index: number) => (\n <li\n key={index}\n className={`pl-flex pl-items-center pl-h-10 pl-ps-[24.2px] pl-leading-[28px] pl-text-[12px] pl-font-medium pl-relative pl-cursor-pointer pl-transition-all ${\n conditions(ConditionName.isTouchScreen) ? \"\" : \"hover:pl-bg-[#4A4A4A]\"\n } ${settings.speed === speed && ` !pl-cursor-default`}`}\n onClick={\n settings.speed === speed\n ? () => {}\n : () => {\n if (!conditions(ConditionName.isStaticFormat)) sendFluentLog(speedChangeLog(speed));\n // dispatch(setActiveElements(false));\n // dispatch(setSettingPopover(false));\n // dispatch(setSpeedPopover(false));\n dispatch(setUserSettings({ ...settings, speed }));\n mainPlayerVideoTag().playbackRate = speed;\n if (setSection) setSection(SettingSections.main);\n if (params.onSpeedChange) params.onSpeedChange(settings.speed, speed);\n }\n }\n >\n {settings.speed === speed && (\n <div className=\"pl-absolute pl-right-[10px] pl-top-1/2 -pl-translate-y-1/2 pl-flex pl-items-center pl-justify-center\">\n <Image\n src={IMAGES.tick}\n className={conditions(ConditionName.isTouchScreen) ? \"pl-brightness-0\" : \"\"}\n alt=\"\"\n width={20}\n height={20}\n />\n </div>\n )}\n <p\n className={`pl-text-[12px] ${\n conditions(ConditionName.isTouchScreen) ? \"pl-text-[#212121]\" : \"pl-text-white\"\n } pl-pr-[10px] pl-w-10 pl-text-center`}\n >\n {speed}\n </p>\n </li>\n ))}\n </div>\n </ul>\n </div>\n );\n\n return (\n <>\n {showSpeedIcon ? (\n <div className=\"pl-relative pl-flex pl-items-center\" ref={speedRef}>\n <SpeedIcon\n width={20}\n height={20}\n className={`pl-cursor-pointer size-5 ${conditions(ConditionName.isTouchScreen) ? \"pl-text-[#4A4A4A]\" : \"pl-text-white\"}`}\n onClick={() => dispatch(setSpeedPopover(!speedPopover))}\n onMouseOver={() => !conditions(ConditionName.isTouchScreen) && !conditions(ConditionName.showSpeedPopover) && setShowTooltip(true)}\n onMouseLeave={() => !conditions(ConditionName.isTouchScreen) && setShowTooltip(false)}\n />\n {showTooltip && <ControllbarTooltip title=\"سرعت\" />}\n <Popover\n classNames={`!pl-p-0 pl-overflow-hidden !pl-bg-white ${\n conditions(ConditionName.isTouchScreen)\n ? \"!pl-fixed !pl-bottom-0 !pl-rounded-t-[20px] pl-rounded-b-none\"\n : \"!pl-w-[230px] pl-right-0 pl-mb-[33px] !pl-rounded-[12px]\"\n } ${conditions(ConditionName.isTouchScreenPortrait) && \"!pl-w-screen tablet:!pl-max-w-[440px] tablet:!pl-mx-auto\"} ${\n conditions(ConditionName.isTouchScreenLandscape) && \"pl-w-full pl-max-w-[440px]\"\n } !pl-z-[100000]`}\n status={speedPopover}\n onClose={() => dispatch(setSpeedPopover(false))}\n type={conditions(ConditionName.isTouchScreen) ? \"modal\" : \"popover\"}\n isBlurBackground={conditions(ConditionName.isTouchScreen)}\n ref={conditions(ConditionName.isTouchScreen) ? speedRef : undefined}\n isHeader={conditions(ConditionName.isTouchScreen)}\n customHeader={<></>}\n isHasCatchUpLineOnTop={conditions(ConditionName.isTouchScreen)}\n styles={{\n maxHeight:\n !conditions(ConditionName.isTouchScreenPortrait) &&\n videoElementSizeInfo.height - (conditions(ConditionName.isTouchScreenLandscape) ? 120 : 75),\n }}\n >\n {speedContent}\n </Popover>\n </div>\n ) : (\n <>{speedContent}</>\n )}\n </>\n );\n};\n\nexport default Speed;\n","import { shallowEqual } from \"react-redux\";\nimport { memo } from \"react\";\nimport { useAppDispatch, useAppSelector } from \"../../../helpers/redux/hooks\";\nimport { ConditionName, SettingSections } from \"../../../helpers/interfaces/enums\";\nimport { setSelectedSubtitle, setSubtitleText } from \"../../../helpers/redux/slices/videoDataSlice\";\nimport { mainPlayerVideoTag } from \"../../../helpers/constants\";\nimport { subtitleLog } from \"../../../helpers/logs/logs\";\nimport { sendFluentLog } from \"../../../helpers/logs/fluentdLogger\";\nimport { conditions } from \"../../../helpers/conditions/conditions\";\nimport IMAGES from \"../../../images/importImages\";\nimport Image from \"next/image\";\n\nconst SubtitleSettingMenu = ({ setSection }: any) => {\n const dispatch = useAppDispatch();\n const { subtitles, selectedSubtitle, videoElementSizeInfo } = useAppSelector(\n ({ videoData: { subtitles, selectedSubtitle, videoElementSizeInfo } }) => ({ subtitles, selectedSubtitle, videoElementSizeInfo }),\n shallowEqual,\n );\n\n return (\n <div\n id={SettingSections.subtitles}\n className={`animate__animated animate__fadeIn ${conditions(ConditionName.isTouchScreen) ? \"pl-pb-2\" : \"pl-py-2\"}`}\n >\n <ul className=\"pl-flex pl-flex-col pl-gap-1\">\n <li\n className={`pl-flex pl-items-center pl-border-b ${\n conditions(ConditionName.isTouchScreen) ? \"pl-border-b-[#D9D9D9]\" : \"pl-border-b-[#4A4A4A]\"\n } pl-ps-[24.2px] pl-leading-[28px] pl-text-[12px] pl-font-medium pl-relative pl-cursor-pointer pl-h-10`}\n onClick={() => setSection && setSection(SettingSections.main)}\n >\n <div className=\"pl-absolute pl-right-[10px] pl-top-1/2 -pl-translate-y-1/2 pl-flex pl-items-center pl-justify-center\">\n <Image\n src={IMAGES.chevronRight}\n className={conditions(ConditionName.isTouchScreen) ? \"pl-brightness-0\" : \"\"}\n alt=\"\"\n width={16}\n height={16}\n />\n </div>\n <span\n className={`pl-w-full pl-text-[12px] ${conditions(ConditionName.isTouchScreen) ? \"pl-text-[#212121]\" : \"pl-text-white\"} pl-pr-[10px]`}\n >\n زیر نویس\n </span>\n </li>\n\n <div\n className=\"pl-overflow-y-auto no-scrollbar\"\n style={{ maxHeight: conditions(ConditionName.isTouchScreenPortrait) ? undefined : videoElementSizeInfo.height - 200 - 70 }}\n >\n <li\n className={`pl-flex pl-items-center pl-h-10 pl-ps-[24.2px] pl-leading-[28px] pl-text-[12px] pl-font-medium pl-relative pl-cursor-pointer ${\n !selectedSubtitle && `${conditions(ConditionName.isTouchScreen) ? \"\" : \"hover:pl-bg-[#4A4A4A]\"} !pl-cursor-default`\n }`}\n onClick={() => {\n // dispatch(setActiveElements(false));\n // dispatch(setSettingPopover(false));\n dispatch(setSelectedSubtitle(undefined));\n setSection(SettingSections.main);\n const result: any = Object.values(mainPlayerVideoTag().textTracks).find((textTrack: any) => textTrack.mode === \"showing\");\n if (result) result.mode = \"disabled\";\n dispatch(setSubtitleText(\"\"));\n sendFluentLog(subtitleLog(\"empty\"));\n }}\n >\n {!selectedSubtitle && (\n <div className=\"pl-absolute pl-right-[10px] pl-top-1/2 -pl-translate-y-1/2 pl-flex pl-items-center pl-justify-center\">\n <Image src={IMAGES.tick} className={conditions(ConditionName.isTouchScreen) ? \"pl-brightness-0\" : \"\"} alt=\"\" width={20} height={20} />\n </div>\n )}\n\n <span\n className={`pl-w-full pl-text-[12px] ${conditions(ConditionName.isTouchScreen) ? \"pl-text-[#212121]\" : \"pl-text-white\"} pl-pr-[10px]`}\n >\n بدون زیرنویس\n </span>\n </li>\n\n {subtitles.map((subtitle: any, index: number) => (\n <li\n key={index}\n className={`pl-flex pl-items-center pl-h-10 pl-ps-[24.2px] pl-leading-[28px] pl-text-[12px] pl-font-medium pl-relative pl-cursor-pointer pl-transition-all ${\n conditions(ConditionName.isTouchScreen) ? \"\" : \"hover:pl-bg-[#4A4A4A]\"\n } ${selectedSubtitle && selectedSubtitle.language === subtitle.language && ` !pl-cursor-default`}`}\n onClick={() => {\n // dispatch(setActiveElements(false));\n // dispatch(setSettingPopover(false));\n dispatch(setSelectedSubtitle(subtitle));\n mainPlayerVideoTag().textTracks[index].mode = \"showing\";\n setSection(SettingSections.main);\n sendFluentLog(subtitleLog(subtitle.language));\n }}\n >\n {!!selectedSubtitle && selectedSubtitle.language === subtitle.language && (\n <div className=\"pl-absolute pl-right-[10px] pl-top-1/2 -pl-translate-y-1/2 pl-flex pl-items-center pl-justify-center\">\n <Image\n src={IMAGES.tick}\n className={conditions(ConditionName.isTouchScreen) ? \"pl-brightness-0\" : \"\"}\n alt=\"\"\n width={20}\n height={20}\n />\n </div>\n )}\n\n <span\n className={`pl-w-full pl-text-[12px] ${conditions(ConditionName.isTouchScreen) ? \"pl-text-[#212121]\" : \"pl-text-white\"} pl-pr-[10px]`}\n >\n {subtitle.label}\n </span>\n </li>\n ))}\n </div>\n </ul>\n </div>\n );\n};\n\nexport default memo(SubtitleSettingMenu);\n","import { IAudioIconProps } from \"../../helpers/interfaces/interfaces\";\n\nconst AudioIcon = ({ className, onClick, onMouseOver, onMouseLeave }: IAudioIconProps) => {\n return (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n onClick={onClick}\n onMouseOver={onMouseOver}\n onMouseLeave={onMouseLeave}\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n fill=\"currentColor\"\n d=\"M10 2.29395C10.3314 2.29395 10.6 2.56257 10.6 2.89395V17.1052C10.6 17.4366 10.3314 17.7052 10 17.7052C9.66866 17.7052 9.40002 17.4366 9.40002 17.1052V2.89395C9.40002 2.56257 9.66866 2.29395 10 2.29395Z\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n fill=\"currentColor\"\n d=\"M6.41258 4.95498C6.74396 4.95498 7.01258 5.22361 7.01258 5.55498V14.5565C7.01258 14.8879 6.74396 15.1565 6.41258 15.1565C6.08121 15.1565 5.81258 14.8879 5.81258 14.5565V5.55498C5.81258 5.22361 6.08121 4.95498 6.41258 4.95498Z\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n fill=\"currentColor\"\n d=\"M13.5858 4.84247C13.9172 4.84247 14.1858 5.1111 14.1858 5.44247V14.444C14.1858 14.7754 13.9172 15.044 13.5858 15.044C13.2545 15.044 12.9858 14.7754 12.9858 14.444V5.44247C12.9858 5.1111 13.2545 4.84247 13.5858 4.84247Z\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n fill=\"currentColor\"\n d=\"M17.1735 7.60177C17.5048 7.60177 17.7735 7.8704 17.7735 8.20177V11.5709C17.7735 11.9023 17.5048 12.1709 17.1735 12.1709C16.8421 12.1709 16.5735 11.9023 16.5735 11.5709V8.20177C16.5735 7.8704 16.8421 7.60177 17.1735 7.60177Z\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n fill=\"currentColor\"\n d=\"M2.82656 7.82841C3.15794 7.82841 3.42656 8.09703 3.42656 8.42844V11.7976C3.42656 12.1289 3.15794 12.3976 2.82656 12.3976C2.49519 12.3976 2.22656 12.1289 2.22656 11.7976V8.42844C2.22656 8.09703 2.49519 7.82841 2.82656 7.82841Z\"\n />\n </svg>\n );\n};\n\nexport default AudioIcon;\n","import { shallowEqual } from \"react-redux\";\nimport { memo, useRef, useState } from \"react\";\nimport { useAppDispatch, useAppSelector } from \"../../../helpers/redux/hooks\";\nimport Popover from \"../popover/popover\";\nimport { conditions } from \"../../../helpers/conditions/conditions\";\nimport { ConditionName, SettingSections } from \"../../../helpers/interfaces/enums\";\nimport Image from \"next/image\";\nimport IMAGES from \"../../../images/importImages\";\nimport ControllbarTooltip from \"../footer/controllbar/controllbarTooltip\";\nimport useOnClickOutside from \"../../../helpers/hooks/useOnClickOutside\";\nimport { setMultiAudioPopover } from \"../../../helpers/redux/slices/popoversSlice\";\nimport { setSelectedAudioId } from \"../../../helpers/redux/slices/videoDataSlice\";\nimport AudioIcon from \"../../icon-components/audioIcon\";\nimport { IMultiAudioProps } from \"../../../helpers/interfaces/interfaces\";\n\nconst MultiAudio = ({ setSection, showMultiAudioIcon }: IMultiAudioProps) => {\n const dispatch = useAppDispatch();\n const { multiAudioPopover } = useAppSelector(({ popovers: { multiAudioPopover } }) => ({ multiAudioPopover }), shallowEqual);\n\n const [showTooltip, setShowTooltip] = useState<boolean>(false);\n\n const ref = useRef(null);\n\n const { multiAudio, selectedAudioId, videoElementSizeInfo } = useAppSelector(\n ({ videoData: { multiAudio, selectedAudioId, videoElementSizeInfo } }) => ({ multiAudio, selectedAudioId, videoElementSizeInfo }),\n shallowEqual\n );\n\n useOnClickOutside(ref, () => dispatch(setMultiAudioPopover(false)));\n\n const multiAudioContent = (\n <div className={`${conditions(ConditionName.isTouchScreen) ? \"pl-pb-2\" : \"pl-py-2\"}`}>\n <ul className=\"pl-flex pl-flex-col pl-gap-1\">\n <li\n className={`pl-flex pl-items-center pl-border-b ${\n conditions(ConditionName.isTouchScreen) ? \"pl-border-b-[#D9D9D9]\" : \"pl-border-b-[#4A4A4A]\"\n } pl-h-10 pl-ps-[24.2px] pl-leading-[28px] pl-text-[12px] pl-font-medium pl-relative pl-cursor-pointer`}\n onClick={() => setSection && setSection(SettingSections.main)}\n >\n <div className=\"pl-absolute pl-right-[10px] pl-top-1/2 -pl-translate-y-1/2 pl-flex pl-items-center pl-justify-center\">\n <Image\n src={IMAGES.chevronRight}\n className={conditions(ConditionName.isTouchScreen) ? \"pl-brightness-0\" : \"\"}\n alt=\"\"\n width={16}\n height={16}\n />\n </div>\n <span\n className={`pl-w-full pl-text-[12px] ${conditions(ConditionName.isTouchScreen) ? \"pl-text-[#212121]\" : \"pl-text-white\"} pl-pr-[10px]`}\n >\n تغییر صدا\n </span>\n </li>\n\n <div\n className=\"pl-overflow-y-auto no-scrollbar\"\n style={{ maxHeight: conditions(ConditionName.isTouchScreenPortrait) ? undefined : videoElementSizeInfo.height - 200 - 70 }}\n >\n {conditions(ConditionName.hasMultiAudio) &&\n multiAudio.map((audio: any, index: number) => (\n <li\n key={audio.id}\n className={`pl-flex pl-items-center pl-h-10 pl-ps-[24.2px] pl-leading-[28px] pl-text-[12px] pl-font-medium pl-relative pl-cursor-pointer pl-transition-all ${\n conditions(ConditionName.isTouchScreen) ? \"\" : \"hover:pl-bg-[#4A4A4A]\"\n } ${selectedAudioId === index && ` !pl-cursor-default`}`}\n onClick={() => {\n dispatch(setSelectedAudioId(index));\n // dispatch(setActiveElements(false));\n // dispatch(setSettingPopover(false));\n // dispatch(setMultiAudioPopover(false));\n if (setSection) setSection(SettingSections.main);\n }}\n >\n {selectedAudioId === index && (\n <div className=\"pl-absolute pl-right-[10px] pl-top-1/2 -pl-translate-y-1/2 pl-flex pl-items-center pl-justify-center\">\n <Image\n src={IMAGES.tick}\n className={conditions(ConditionName.isTouchScreen) ? \"pl-brightness-0\" : \"\"}\n alt=\"\"\n width={20}\n height={20}\n />\n </div>\n )}\n\n <span\n className={`pl-w-full pl-text-[12px] ${\n conditions(ConditionName.isTouchScreen) ? \"pl-text-[#212121]\" : \"pl-text-white\"\n } pl-pr-[10px]`}\n >\n زبان {audio.name}\n </span>\n </li>\n ))}\n </div>\n </ul>\n </div>\n );\n\n return (\n <>\n {showMultiAudioIcon ? (\n <div className=\"pl-relative pl-flex pl-items-center\" ref={ref}>\n <AudioIcon\n className={`pl-size-5 pl-fill-white pl-cursor-pointer ${conditions(ConditionName.isTouchScreen) ? \"pl-text-[#4A4A4A]\" : \"pl-text-white\"}`}\n onClick={() => dispatch(setMultiAudioPopover(!multiAudioPopover))}\n onMouseOver={() => !conditions(ConditionName.isTouchScreen) && setShowTooltip(true)}\n onMouseLeave={() => !conditions(ConditionName.isTouchScreen) && setShowTooltip(false)}\n />\n\n {showTooltip && <ControllbarTooltip title=\"تغییر صدا\" />}\n <Popover\n classNames={`!pl-px-0 pl-overflow-hidden !pl-bg-black/[75%] !pl-pb-0 ${\n conditions(ConditionName.isTouchScreen)\n ? \"!pl-fixed !pl-bottom-0 !pl-rounded-t-[20px] pl-rounded-b-none\"\n : \"!pl-w-[200px] pl-right-0 pl-mb-[33px] !pl-rounded-[12px]\"\n } ${conditions(ConditionName.isTouchScreenPortrait) && \"!pl-w-screen tablet:!pl-max-w-[440px] tablet:!pl-mx-auto\"} ${\n conditions(ConditionName.isTouchScreenLandscape) && \"pl-w-full pl-max-w-[440px]\"\n }`}\n status={multiAudioPopover}\n onClose={() => dispatch(setMultiAudioPopover(false))}\n type={conditions(ConditionName.isTouchScreen) ? \"modal\" : \"popover\"}\n isBlurBackground={conditions(ConditionName.isTouchScreen)}\n ref={conditions(ConditionName.isTouchScreen) ? ref : undefined}\n isHeader={conditions(ConditionName.isTouchScreen)}\n isHasCatchUpLineOnTop={conditions(ConditionName.isTouchScreen)}\n styles={{\n maxHeight:\n !conditions(ConditionName.isTouchScreenPortrait) &&\n videoElementSizeInfo.height - (conditions(ConditionName.isTouchScreenLandscape) ? 120 : 75),\n }}\n >\n {multiAudioContent}\n </Popover>\n </div>\n ) : (\n <>{multiAudioContent}</>\n )}\n </>\n );\n};\n\nexport default memo(MultiAudio);\n","import { useState } from \"react\";\nimport ControllbarTooltip from \"../footer/controllbar/controllbarTooltip\";\nimport Image from \"next/image\";\nimport { conditions } from \"../../../helpers/conditions/conditions\";\nimport { ConditionName } from \"../../../helpers/interfaces/enums\";\nimport { useAppSelector } from \"../../../helpers/redux/hooks\";\nimport { shallowEqual } from \"react-redux\";\nimport IMAGES from \"../../../images/importImages\";\nimport { handleSubtitle } from \"../../../helpers/redux/actions/videoData.actions\";\nimport { tw } from \"../../../helpers/helpers\";\n\nconst SubtitleIcon = ({\n className,\n disableTooltip,\n height,\n width,\n normalStyle,\n}: {\n className?: string;\n disableTooltip?: boolean;\n width?: number;\n height?: number;\n normalStyle?: boolean;\n}) => {\n const [showTooltip, setShowTooltip] = useState<boolean>(false);\n useAppSelector(\n ({ videoData: { selectedSubtitle, videoElementSizeInfo, params } }) => ({ selectedSubtitle, videoElementSizeInfo, params }),\n shallowEqual\n );\n\n return (\n <div\n onClick={(e) => {\n e.stopPropagation();\n handleSubtitle();\n }}\n onDoubleClick={(event: any) => event.stopPropagation()}\n onMouseOver={disableTooltip ? undefined : () => !conditions(ConditionName.isTouchScreen) && setShowTooltip(true)}\n onMouseLeave={disableTooltip ? undefined : () => !conditions(ConditionName.isTouchScreen) && setShowTooltip(false)}\n className={tw(\n `pl-relative ${\n normalStyle ? \"\" : \"pl-rounded-full hover:pl-bg-[#5E5E5E]\"\n } pl-cursor-pointer pl-flex pl-items-center pl-justify-center pl-transition-all ${className} ${\n conditions(ConditionName.hasSubtitles) ? \"\" : \"pl-pointer-events-none\"\n }`,\n { desktop: normalStyle ? undefined : \"pl-w-[40px] pl-h-[25px]\", desktopFullScreen: normalStyle ? undefined : \"pl-w-[56px] pl-h-[36px]\" }\n )}\n >\n <Image\n alt=\"subtitle-icon\"\n src={\n !conditions(ConditionName.hasSubtitles)\n ? IMAGES.subtitleDisable\n : conditions(ConditionName.isSelectedSubtitle)\n ? IMAGES.subtitleFill\n : IMAGES.subtitleOutline\n }\n width={width}\n height={height}\n />\n {showTooltip && !disableTooltip && <ControllbarTooltip title=\"زیرنویس\" />}\n </div>\n );\n};\n\nexport default SubtitleIcon;\n","import { memo, useRef, useState } from \"react\";\nimport { shallowEqual } from \"react-redux\";\nimport ControllbarTooltip from \"../footer/controllbar/controllbarTooltip\";\nimport Popover from \"../popover/popover\";\nimport Image from \"next/image\";\nimport QualityLevels from \"../qualityLevels/qualityLevels\";\nimport { useAppDispatch, useAppSelector } from \"../../../helpers/redux/hooks\";\nimport { ConditionName, SettingSections } from \"../../../helpers/interfaces/enums\";\nimport useOnClickOutside from \"../../../helpers/hooks/useOnClickOutside\";\nimport { setSettingPopover } from \"../../../helpers/redux/slices/popoversSlice\";\nimport { conditions } from \"../../../helpers/conditions/conditions\";\nimport IMAGES from \"../../../images/importImages\";\nimport Speed from \"../speed/speed\";\nimport SpeedIcon from \"../../icon-components/speed\";\nimport SubtitleSettingMenu from \"../subtitles/subtitleSettingMenu\";\nimport AudioIcon from \"../../icon-components/audioIcon\";\nimport MultiAudio from \"../multiAudio/MultiAudio\";\nimport SubtitleIcon from \"../subtitles/subtitleIcon\";\nimport { tw } from \"../../../helpers/helpers\";\n\nconst Settings = ({ width, height, normalStyle }: { width?: number; height?: number; normalStyle?: boolean }) => {\n const dispatch = useAppDispatch();\n useAppSelector(({ controller: { isFullScreen } }) => ({ isFullScreen }), shallowEqual);\n\n const { selectedSubtitle, multiAudio, selectedAudioId, subtitles, settingPopover, settings, qualityLevels } = useAppSelector(\n ({\n user: { settings },\n popovers: { settingPopover },\n controller: { qualityLevels },\n videoData: { params, subtitles, multiAudio, selectedSubtitle, selectedAudioId },\n }) => ({\n params,\n settings,\n subtitles,\n multiAudio,\n qualityLevels,\n settingPopover,\n selectedAudioId,\n selectedSubtitle,\n }),\n shallowEqual\n );\n\n const [section, setSection] = useState<string>(SettingSections.main);\n const [showTooltip, setShowTooltip] = useState<boolean>(false);\n\n const settingsRef = useRef(null);\n\n useOnClickOutside(settingsRef, () => {\n dispatch(setSettingPopover(false));\n setTimeout(() => {\n setSection(SettingSections.main);\n }, 500);\n });\n\n return (\n <div className={`pl-inline-flex ${conditions(ConditionName.isLandscape) && \"pl-relative\"}`} ref={settingsRef}>\n <div\n className={tw(\n `pl-relative pl-cursor-pointer pl-flex pl-items-center pl-justify-center pl-rounded-full ${\n normalStyle ? \"\" : \"hover:pl-bg-[#5E5E5E] pl-transition-all\"\n }`,\n normalStyle\n ? undefined\n : {\n desktop: \"pl-w-[40px] pl-h-[25px]\",\n desktopFullScreen: \"pl-w-[56px] pl-h-[36px]\",\n }\n )}\n onDoubleClick={(e) => e.preventDefault()}\n onClick={(e) => {\n e.stopPropagation();\n dispatch(setSettingPopover(!settingPopover));\n }}\n onMouseOver={() => !conditions(ConditionName.isTouchScreen) && !conditions(ConditionName.showSettingPopover) && setShowTooltip(true)}\n onMouseLeave={() => !conditions(ConditionName.isTouchScreen) && setShowTooltip(false)}\n >\n <Image src={IMAGES.settings} alt=\"\" width={width} height={height} />\n {showTooltip && <ControllbarTooltip title=\"تنظیمات \" />}\n </div>\n <Popover\n classNames={`!pl-p-0 pl-overflow-hidden ${\n conditions(ConditionName.isTouchScreen)\n ? \"!pl-fixed !pl-bottom-0 !pl-rounded-t-[20px] pl-rounded-b-none !pl-bg-white\"\n : \"!pl-w-[272px] pl-right-0 pl-mb-[33px] !pl-rounded-[12px] !pl-bg-black/[75%]\"\n } ${conditions(ConditionName.isTouchScreenPortrait) && \"!pl-w-screen tablet:!pl-max-w-[440px] tablet:!pl-mx-auto\"} ${\n conditions(ConditionName.isTouchScreenLandscape) && \"pl-w-full pl-max-w-[285px]\"\n } !overflow-auto`}\n status={settingPopover}\n onClose={() => {\n dispatch(setSettingPopover(false));\n setTimeout(() => setSection(SettingSections.main), 500);\n }}\n type={conditions(ConditionName.isTouchScreen) ? \"modal\" : \"popover\"}\n isBlurBackground={conditions(ConditionName.isTouchScreen)}\n ref={conditions(ConditionName.isTouchScreen) ? settingsRef : undefined}\n isHeader={conditions(ConditionName.isTouchScreen)}\n customHeader={<></>}\n isHasCatchUpLineOnTop={conditions(ConditionName.isTouchScreen)}\n >\n <div>\n {section === SettingSections.main && (\n <div id={SettingSections.main} className=\"pl-py-2 pl-rounded-[10px] pl-flex pl-flex-col animate__animated animate__fadeIn\">\n {!conditions(ConditionName.isStaticFormat) && (\n <div\n className={`pl-flex pl-items-center pl-gap-2 pl-cursor-pointer pl-h-10 pl-px-2 ${\n conditions(ConditionName.isTouchScreen) ? \"\" : \"hover:pl-bg-[#4A4A4A]\"\n } pl-transition-all`}\n onClick={() => setSection(SettingSections.qualityLevels)}\n >\n <Image\n width={20}\n height={20}\n className={conditions(ConditionName.isTouchScreen) ? \"pl-brightness-[0.3]\" : \"\"}\n src={IMAGES.qualitySetting}\n alt=\"\"\n />\n <p\n className={`pl-ml-auto pl-text-[12px] pl-font-medium ${\n conditions(ConditionName.isTouchScreen) ? \"pl-text-[#212121]\" : \"pl-text-white\"\n }`}\n >\n کیفیت پخش\n </p>\n <span\n className={`pl-ml-1 pl-leading-6 pl-font-normal ${\n conditions(ConditionName.isTouchScreen) ? \"pl-text-[#212121] pl-text-[11px]\" : \"pl-text-white pl-text-[12px]\"\n }`}\n >\n {settings.quality === -1 ? \"خودکار\" : `${qualityLevels.find((_, index) => index === settings.quality)}p`}\n </span>\n <Image\n className={conditions(ConditionName.isTouchScreen) ? \"pl-brightness-50\" : \"\"}\n src={IMAGES.chevronLeft}\n alt=\"\"\n width={16}\n height={16}\n />\n </div>\n )}\n {conditions(ConditionName.hasSubtitles) && (\n <div\n className={`pl-flex pl-items-center pl-gap-2 pl-cursor-pointer pl-h-10 pl-px-2 ${\n conditions(ConditionName.isTouchScreen) ? \"\" : \"hover:pl-bg-[#4A4A4A]\"\n } pl-transition-all`}\n onClick={() => setSection(SettingSections.subtitles)}\n >\n <SubtitleIcon\n className={`${conditions(ConditionName.isTouchScreen) ? \"pl-brightness-[0.3]\" : \"\"}`}\n normalStyle\n width={20}\n height={20}\n disableTooltip\n />\n <p\n className={`pl-ml-auto pl-text-[12px] pl-font-medium ${\n conditions(ConditionName.isTouchScreen) ? \"pl-text-[#212121]\" : \"pl-text-white\"\n }`}\n >\n زیرنویس\n </p>\n <span\n className={`pl-ml-1 pl-leading-6 pl-font-normal ${\n conditions(ConditionName.isTouchScreen) ? \"pl-text-[#212121] pl-text-[11px]\" : \"pl-text-white pl-text-[12px]\"\n }`}\n >\n {selectedSubtitle ? !!subtitles && subtitles.find((item) => item.language === selectedSubtitle.language)?.label : \"خاموش\"}\n </span>\n <Image\n src={IMAGES.chevronLeft}\n className={conditions(ConditionName.isTouchScreen) ? \"pl-brightness-50\" : \"\"}\n alt=\"\"\n width={16}\n height={16}\n />\n </div>\n )}\n <div\n className={`pl-flex pl-items-center pl-gap-2 pl-cursor-pointer pl-h-10 pl-px-2 ${\n conditions(ConditionName.isTouchScreen) ? \"\" : \"hover:pl-bg-[#4A4A4A]\"\n } pl-transition-all`}\n onClick={() => setSection(SettingSections.speed)}\n >\n <SpeedIcon className={`${conditions(ConditionName.isTouchScreen) ? \"pl-text-[#4A4A4A]\" : \"pl-text-white\"}`} width={20} height={20} />\n <p\n className={`pl-ml-auto pl-text-[12px] pl-font-medium ${\n conditions(ConditionName.isTouchScreen) ? \"pl-text-[#212121]\" : \"pl-text-white\"\n }`}\n >\n سرعت\n </p>\n <span\n className={`pl-ml-1 pl-leading-6 pl-font-normal ${\n conditions(ConditionName.isTouchScreen) ? \"pl-text-[#212121] pl-text-[11px]\" : \"pl-text-white pl-text-[12px]\"\n }`}\n >\n {settings?.speed ? (settings.speed === 1 ? \"معمولی\" : `${settings.speed}`) : \"معمولی\"}\n </span>\n <Image\n src={IMAGES.chevronLeft}\n className={conditions(ConditionName.isTouchScreen) ? \"pl-brightness-50\" : \"\"}\n alt=\"\"\n width={16}\n height={16}\n />\n </div>\n {conditions(ConditionName.hasMultiAudio) && (\n <div\n className={`pl-flex pl-items-center pl-gap-2 pl-cursor-pointer pl-h-10 pl-px-2 ${\n conditions(ConditionName.isTouchScreen) ? \"\" : \"hover:pl-bg-[#4A4A4A]\"\n } pl-transition-all`}\n onClick={() => setSection(SettingSections.multiAudio)}\n >\n <AudioIcon className={`pl-size-5 ${conditions(ConditionName.isTouchScreen) ? \"pl-text-[#4A4A4A]\" : \"pl-text-white\"}`} />\n <p\n className={`pl-ml-auto pl-text-[12px] pl-font-medium ${\n conditions(ConditionName.isTouchScreen) ? \"pl-text-[#212121]\" : \"pl-text-white\"\n }`}\n >\n تغییر صدا\n </p>\n <span\n className={`pl-ml-1 pl-leading-6 pl-font-normal ${\n conditions(ConditionName.isTouchScreen) ? \"pl-text-[#212121] pl-text-[11px]\" : \"pl-text-white pl-text-[12px]\"\n }`}\n >\n {multiAudio?.find((_: any, index: number) => index === selectedAudioId)?.name}\n </span>\n <Image\n src={IMAGES.chevronLeft}\n className={conditions(ConditionName.isTouchScreen) ? \"pl-brightness-50\" : \"\"}\n alt=\"\"\n width={16}\n height={16}\n />\n </div>\n )}\n </div>\n )}\n {section === SettingSections.qualityLevels && <QualityLevels setSection={setSection} />}\n {section === SettingSections.subtitles && <SubtitleSettingMenu setSection={setSection} />}\n {section === SettingSections.speed && <Speed setSection={setSection} />}\n {section === SettingSections.multiAudio && <MultiAudio setSection={setSection} />}\n </div>\n </Popover>\n </div>\n );\n};\n\nexport default memo(Settings);\n","import { shallowEqual } from \"react-redux\";\nimport { useAppSelector } from \"../../../helpers/redux/hooks\";\nimport { secondsToHMS, tw } from \"../../../helpers/helpers\";\nimport { ConditionName } from \"../../../helpers/interfaces/enums\";\nimport { conditions } from \"../../../helpers/conditions/conditions\";\nimport { useState } from \"react\";\n\nconst ElapsedTime = ({ className = \"\" }) => {\n const { duration, currentTime } = useAppSelector(({ controller: { duration, currentTime } }) => ({ duration, currentTime }), shallowEqual);\n useAppSelector(({ videoData: { videoElementSizeInfo, params } }) => ({ videoElementSizeInfo, params }), shallowEqual);\n const [reveresElapsedTime, setReveresElapsedTime] = useState(false);\n\n return (\n <div\n onDoubleClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n setReveresElapsedTime((prev) => !prev);\n }}\n className={tw(`pl-cursor-pointer pl-rounded-full pl-inline-flex pl-items-center pl-justify-center pl-group ${className}`, {\n desktop: \"pl-min-w-[34px] pl-h-[34px] pl-p-1 pl-bg-black/75\",\n desktopFullScreen: \"pl-min-w-[48px] pl-h-[48px] pl-px-1.5\",\n touch: \"pl-min-w-[78px] pl-h-[22px] pl-py-1 pl-px-1.5 pl-bg-[#282828]\",\n touchFullScreen: \"pl-min-w-[103px] pl-h-[32px] pl-px-2\",\n })}\n >\n <div\n className={tw(\"pl-flex pl-gap-0.5 pl-items-center pl-justify-center pl-rounded-full pl-transition-all\", {\n desktop: \"pl-h-[26px] pl-min-w-[26px] pl-p-1.5 group-hover:pl-bg-[#5E5E5E]\",\n desktopFullScreen: \"pl-h-[36px] pl-min-w-[36px] pl-px-3\",\n })}\n >\n <p\n className={tw(`pl-text-white pl-flex pl-items-center pl-justify-center pl-gap-0.5 `, {\n desktop: \"pl-text-[12px] pl-leading-5 pl-font-bold\",\n desktopFullScreen: \"pl-text-base\",\n touch: \"pl-font-medium pl-text-[12px] pl-pt-0.5\",\n touchFullScreen: \"pl-text-[16px] pl-font-normal pl-pt-1\",\n })}\n >\n <span className={tw(\"\", { touch: \"pl-text-[#C4C4C4]\" })}>{secondsToHMS(duration ? duration : 0)}</span>\n <span>/</span>\n {reveresElapsedTime ? (\n <>\n <span>{secondsToHMS((duration || 0) - (currentTime || 0))}</span>\n <span className=\"pl-mt-0.5\">-</span>\n </>\n ) : (\n <span>{secondsToHMS(currentTime ? currentTime : 0)}</span>\n )}\n </p>\n </div>\n </div>\n );\n};\n\nexport default ElapsedTime;\n","import { memo } from \"react\";\nimport { shallowEqual } from \"react-redux\";\nimport FullScreen from \"../../fullScreen/fullScreen\";\nimport PictureInPicture from \"../../pictureInPicture/pictureInPicture\";\nimport SoundVolume from \"../../soundVolume/soundVolume\";\nimport Settings from \"../../settings/settings\";\nimport { useAppSelector } from \"../../../../helpers/redux/hooks\";\nimport { ConditionName } from \"../../../../helpers/interfaces/enums\";\nimport { conditions } from \"../../../../helpers/conditions/conditions\";\nimport Speed from \"../../speed/speed\";\nimport QualityLevels from \"../../qualityLevels/qualityLevels\";\nimport ElapsedTime from \"../../elapsedTime/elapsedTime\";\nimport Unlock from \"../../lockUnlock/unlock\";\nimport SubtitleIcon from \"../../subtitles/subtitleIcon\";\nimport MarkersList from \"../../markersList/markersList\";\nimport MultiAudio from \"../../multiAudio/MultiAudio\";\nimport PlayPause from \"../../playPause/playPause\";\nimport { styleMerge, tw } from \"../../../../helpers/helpers\";\n\nconst Controlbar = () => {\n useAppSelector(({ controller: { isFullScreen } }) => ({ isFullScreen }), shallowEqual);\n useAppSelector(({ videoData: { videoElementSizeInfo, params, subtitles } }) => ({ videoElementSizeInfo, params, subtitles }), shallowEqual);\n\n return (\n <div\n id=\"player-controllbar\"\n className={tw(\"pl-flex pl-justify-between pl-items-center\", {\n desktop: \"pl-px-4\",\n desktopFullScreen: \"pl-px-6\",\n touch: \"pl-px-4 \",\n touchFullScreen: \"pl-px-6 pl-absolute pl-w-full pl-bottom-[51px]\",\n })}\n >\n <div\n className={tw(`pl-rounded-full pl-flex pl-items-center pl-justify-center `, {\n desktop: \"pl-p-1 pl-bg-black/75\",\n desktopFullScreen: \"pl-p-1.5\",\n touch: \"pl-bg-[#282828]\",\n })}\n >\n <FullScreen\n width={styleMerge({ desktop: 16, desktopFullScreen: 24, touch: 16, touchFullScreen: 24 })}\n height={styleMerge({ desktop: 16, desktopFullScreen: 24, touch: 16, touchFullScreen: 24 })}\n />\n {/* {conditions(ConditionName.isTouchScreenLandscape) && (\n <Unlock width={conditions(ConditionName.isFullScreen) ? 24 : 16} height={conditions(ConditionName.isFullScreen) ? 24 : 16} />\n )} */}\n {/* {conditions(ConditionName.showPictureInPicture) && (\n <PictureInPicture width={conditions(ConditionName.isFullScreen) ? 24 : 16} height={conditions(ConditionName.isFullScreen) ? 24 : 16} />\n )} */}\n {conditions(ConditionName.showSettingIcon) && !conditions(ConditionName.isTouchScreen) && (\n <Settings width={conditions(ConditionName.isFullScreen) ? 24 : 16} height={conditions(ConditionName.isFullScreen) ? 24 : 16} />\n )}\n {/* {conditions(ConditionName.isFullScreen) && !conditions(ConditionName.isStaticFormat) && <QualityLevels showQualityLevelsIcon={true} />} */}\n {/* {(conditions(ConditionName.isFullScreen) || conditions(ConditionName.isStaticFormat)) && <Speed showSpeedIcon={true} />} */}\n {!conditions(ConditionName.isTouchScreen) && (\n <SubtitleIcon width={conditions(ConditionName.isFullScreen) ? 24 : 16} height={conditions(ConditionName.isFullScreen) ? 24 : 16} />\n )}\n {/* {conditions(ConditionName.hasMultiAudio) && !conditions(ConditionName.isTouchScreenPortrait) && <MultiAudio showMultiAudioIcon={true} />} */}\n </div>\n <div className={`pl-flex pl-items-center pl-gap-4`}>\n <ElapsedTime className=\"pl-relative z-10\" />\n\n {!conditions(ConditionName.isTouchScreen) && (\n <>\n {!conditions(ConditionName.isIOS) && (\n <SoundVolume width={conditions(ConditionName.isFullScreen) ? 24 : 16} height={conditions(ConditionName.isFullScreen) ? 24 : 16} />\n )}\n <PlayPause width={conditions(ConditionName.isFullScreen) ? 24 : 16} height={conditions(ConditionName.isFullScreen) ? 24 : 16} />\n </>\n )}\n\n {/* {conditions(ConditionName.hasMarkers) && <MarkersList />} */}\n </div>\n </div>\n );\n};\n\nexport default memo(Controlbar);\n","import { shallowEqual } from \"react-redux\";\nimport { useAppSelector } from \"../../../helpers/redux/hooks\";\nimport { conditions } from \"../../../helpers/conditions/conditions\";\nimport { ConditionName } from \"../../../helpers/interfaces/enums\";\nimport { cleanVTT, spliteStringPerLine, tw } from \"../../../helpers/helpers\";\n\nconst DisplaySubtitle = () => {\n const { subtitleText } = useAppSelector(({ videoData: { subtitleText, selectedSubtitle } }) => ({ subtitleText, selectedSubtitle }), shallowEqual);\n useAppSelector(({ controller: { isFullScreen, activeElements } }) => ({ isFullScreen, activeElements }), shallowEqual);\n\n const subtitlePosition = () => {\n let styles = \"\";\n\n if (conditions(ConditionName.isLock)) styles = \"pl-bottom-[50px]\";\n else if (conditions(ConditionName.isActiveElements)) {\n if (conditions(ConditionName.isTouchScreen) && conditions(ConditionName.isFullScreen)) styles = \"pl-bottom-[64px]\";\n else if (conditions(ConditionName.isFullScreen)) styles = \"pl-bottom-[130px]\";\n else if (conditions(ConditionName.isTouchScreen)) styles = \"pl-bottom-[30px]\";\n else styles = \"pl-bottom-[60px]\";\n } else if (!conditions(ConditionName.isActiveElements)) {\n if (conditions(ConditionName.isTouchScreen) && conditions(ConditionName.isFullScreen)) styles = \"pl-bottom-[20px]\";\n else if (conditions(ConditionName.isFullScreen)) styles = \"pl-bottom-[130px]\";\n else if (conditions(ConditionName.isTouchScreen)) styles = \"pl-bottom-[16px]\";\n else styles = \"pl-bottom-[60px]\";\n }\n\n return styles;\n };\n\n return (\n <div\n id={\"subtitle-id\"}\n style={{ direction: \"ltr\" }}\n className={tw(`pl-z-0 pl-absolute pl-w-full pl-text-center pl-text-white pl-font-semibold ${subtitlePosition()}`, {\n desktop: \"pl-text-[14px] pl-leading-6\",\n desktopFullScreen: \"pl-text-base\",\n touch: \"pl-text-[10px] pl-leading-4\",\n })}\n >\n {spliteStringPerLine(subtitleText!)?.map((text, index) => {\n const value = cleanVTT(text);\n if (value)\n return (\n <p\n key={index}\n className={tw(\n `pl-mx-auto pl-bg-[#000000]/[70%] ${\n conditions(ConditionName.isTouchScreen) && conditions(ConditionName.isActiveElements) && \"pl-opacity-50\"\n } pl-text-wrap pl-max-w-full pl-w-max `,\n { desktop: \"pl-px-2 pl-py-1.5\", desktopFullScreen: \"\", touch: \"pl-p-1\", touchFullScreen: \"\" },\n )}\n >\n {value}\n </p>\n );\n })}\n </div>\n );\n};\n\nexport default DisplaySubtitle;\n","import { shallowEqual } from \"react-redux\";\nimport ProgressBar from \"./progressbar/progressbar\";\nimport Controllbar from \"./controllbar/controllbar\";\nimport { useAppSelector } from \"../../../helpers/redux/hooks\";\nimport { conditions } from \"../../../helpers/conditions/conditions\";\nimport { ConditionName, zIndex } from \"../../../helpers/interfaces/enums\";\nimport DisplaySubtitle from \"../subtitles/displaySubtitle\";\nimport { tw } from \"../../../helpers/helpers\";\n\nconst Footer = () => {\n const { firstPlay } = useAppSelector(\n ({ controller: { lock, isFullScreen, isLoading, activeElements, firstPlay } }) => ({ lock, isFullScreen, isLoading, activeElements, firstPlay }),\n shallowEqual,\n );\n useAppSelector(({ videoData: { subtitles, selectedSubtitle } }) => ({ subtitles, selectedSubtitle }), shallowEqual);\n\n let styles = \"\";\n\n if (conditions(ConditionName.isTouchScreen)) {\n if (conditions(ConditionName.isFullScreen)) styles = \"pl-gap-2.5 pl-mb-8\";\n else styles = \"pl-gap-3\";\n } else {\n if (conditions(ConditionName.isFullScreen)) styles = \"pl-gap-3 pl-mb-3\";\n else styles = \"pl-gap-1.5 pl-mb-1.5\";\n }\n\n return (\n <div\n id=\"footer\"\n className={tw(`pl-relative pl-rounded-b-[12px] pl-duration-300`)}\n onDoubleClick={(event) => conditions(ConditionName.isActiveElements) && event.stopPropagation()}\n onClick={(event) => conditions(ConditionName.isActiveElements) && event.stopPropagation()}\n style={{\n zIndex: zIndex.footer,\n // backgroundImage: \"linear-gradient(180deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0.5) 100%)\",\n backgroundBlendMode: \"multiply\",\n backgroundSize: \"cover\",\n backgroundPosition: \"center\",\n }}\n >\n <>\n {conditions(ConditionName.showSubtitle) && <DisplaySubtitle />}\n {!conditions(ConditionName.isLock) && (\n <>\n <div\n className={`pl-flex pl-flex-col pl-w-full pl-mx-auto animate__animated animate__faster ${styles} ${\n conditions(ConditionName.isActiveElements) && !conditions(ConditionName.isLoading)\n ? \"animate__fadeIn pl-pointer-events-auto\"\n : \"animate__fadeOut pl-pointer-events-none\"\n }`}\n >\n {conditions(ConditionName.showProgressbar) && <ProgressBar />}\n <Controllbar />\n </div>\n </>\n )}\n </>\n </div>\n );\n};\n\nexport default Footer;\n","import { conditions } from \"../../conditions/conditions\";\nimport { mainPlayerVideoTag, miniPlayerVideoTag } from \"../../constants\";\nimport { errorLogProvider } from \"../../errorBoundary/errorBoundaryFunctions\";\nimport { getUUID, highestResolutionSupported, splitQueryParamsFromStreamLink } from \"../../helpers\";\nimport { ConditionName } from \"../../interfaces/enums\";\nimport { sendFluentLog } from \"../../logs/fluentdLogger\";\nimport { initLog, loadingLog, pausePlayLog } from \"../../logs/logs\";\nimport {\n setActiveElements,\n setAutoQuality,\n setBufferedTimeWidth,\n setCanPlayVideo,\n setCurrentTime,\n setDuration,\n setFirstPlay,\n setIsEnded,\n setIsFullScreen,\n setIsLoading,\n setManualQuality,\n setPlay,\n setQualityLevels,\n} from \"../slices/controllerSlice\";\nimport { setClearPopoversSlice } from \"../slices/popoversSlice\";\nimport { setUserSettings } from \"../slices/userSlice\";\nimport { setMultiAudio, setSubtitleText, setVideoTimelines } from \"../slices/videoDataSlice\";\nimport store from \"../store\";\nimport { handleLockOrientation, handleVideoTimeline } from \"./controller.actions\";\nimport { handleSubtitle } from \"./videoData.actions\";\n\nexport const handleVideoError = (event: any) => {\n event.preventDefault();\n // Access the error property from the video element\n let error = (mainPlayerVideoTag() || miniPlayerVideoTag()).error;\n if (error) {\n switch (error.code) {\n case error.MEDIA_ERR_ABORTED:\n errorLogProvider({\n type: \"videoTagError\",\n message: \"You aborted the video playback.\",\n });\n break;\n case error.MEDIA_ERR_NETWORK:\n errorLogProvider({\n type: \"videoTagError\",\n message: \"A network error caused the video download to fail part-way.\",\n });\n break;\n case error.MEDIA_ERR_DECODE:\n errorLogProvider({\n type: \"videoTagError\",\n message: \"The video playback was aborted due to a corruption problem or because the video used features your browser did not support.\",\n });\n break;\n case error.MEDIA_ERR_SRC_NOT_SUPPORTED:\n errorLogProvider({\n type: \"videoTagError\",\n message: \"The video could not be loaded, either because the server or network failed or because the format is not supported.\",\n });\n break;\n default:\n errorLogProvider({\n type: \"videoTagError\",\n message: \"An unknown error occurred.\",\n });\n break;\n }\n } else {\n errorLogProvider({\n type: \"videoTagError\",\n message: \"An error occurred, but the error object is not available.\",\n });\n }\n};\n\nexport const handleAutoFullScreen = () => {\n const dispatch = store.dispatch;\n const { params } = store.getState().videoData;\n const launchFullScreen = (element: any) => {\n if (element.requestFullScreen) element.requestFullScreen();\n else if (element.mozRequestFullScreen) element.mozRequestFullScreen();\n else if (element.webkitRequestFullScreen) element.webkitRequestFullScreen();\n };\n dispatch(setClearPopoversSlice());\n launchFullScreen(document.documentElement);\n dispatch(setIsFullScreen(params.fullscreen === \"true\"));\n};\n\nexport const appendQueryParamsToChunksIOS = () => {\n let fragmentExtension = \".ts\";\n let originalOpen = XMLHttpRequest.prototype.open;\n XMLHttpRequest.prototype.open = function () {\n if (arguments[1].endsWith(fragmentExtension)) arguments[1] = arguments[1] + \"?uuid=\" + getUUID!();\n originalOpen.apply(this, arguments as any);\n };\n};\n\nexport const handleBufferedTime = (video: any, intervalRef: any) => {\n const dispatch = store.dispatch;\n\n intervalRef.current = setInterval(() => {\n // چک کردن طول buffered قبل از دسترسی\n if (video.buffered.length > 0 && video.duration > 0) {\n const bufferedTime = video.buffered.end(video.buffered.length - 1); // استفاده از آخرین index برای ایمنی\n const bufferedTimeWidth = (bufferedTime / video.duration) * 100;\n dispatch(setBufferedTimeWidth(bufferedTimeWidth));\n } else {\n dispatch(setBufferedTimeWidth(0));\n }\n }, 500);\n};\n\n// ************* Hls Config Handlers ************* //\nexport const handleHlsConfig = () => {\n const streamLinkParams = splitQueryParamsFromStreamLink(\"mainPlayer\");\n\n return {\n xhrSetup: (xhr: any, url: any) => {\n if (!url?.split(\"m3u8\")[1]) url = `${url}${streamLinkParams}`;\n xhr.open(\"GET\", url, true);\n },\n startLevel: -1,\n debug: false,\n enableWorker: true,\n abrBandWidthUpFactor: 0.7,\n abrBandWidthFactor: 0.95,\n backBufferLength: Infinity,\n maxBufferLength: 30,\n maxMaxBufferLength: 60,\n manifestLoadPolicy: {\n default: {\n maxTimeToFirstByteMs: Infinity,\n maxLoadTimeMs: 20000,\n timeoutRetry: {\n maxNumRetry: 10,\n retryDelayMs: 5000,\n maxRetryDelayMs: 10000,\n },\n errorRetry: {\n maxNumRetry: 10,\n retryDelayMs: 5000,\n maxRetryDelayMs: 10000,\n },\n },\n },\n fragLoadPolicy: {\n default: {\n maxTimeToFirstByteMs: 10000,\n maxLoadTimeMs: 120000,\n timeoutRetry: {\n maxNumRetry: 10,\n retryDelayMs: 5000,\n maxRetryDelayMs: 10000,\n },\n errorRetry: {\n maxNumRetry: 10,\n retryDelayMs: 5000,\n maxRetryDelayMs: 10000,\n },\n },\n },\n playlistLoadPolicy: {\n default: {\n maxTimeToFirstByteMs: 10000,\n maxLoadTimeMs: 20000,\n timeoutRetry: {\n maxNumRetry: 10,\n retryDelayMs: 5000,\n maxRetryDelayMs: 10000,\n },\n errorRetry: {\n maxNumRetry: 10,\n retryDelayMs: 5000,\n maxRetryDelayMs: 10000,\n },\n },\n },\n };\n};\n\nexport const handleMiniPlayerHlsConfig = () => {\n const streamLinkParams = splitQueryParamsFromStreamLink(\"miniPlayer\");\n return {\n xhrSetup: (xhr: any, url: any) => {\n url = `${url}${streamLinkParams}`;\n xhr.open(\"GET\", url, true);\n },\n startLevel: 1,\n debug: false,\n maxMaxBufferLength: 60,\n playlistLoadPolicy: {\n default: {\n maxTimeToFirstByteMs: 10000,\n maxLoadTimeMs: 20000,\n timeoutRetry: {\n maxNumRetry: 1000,\n retryDelayMs: 0,\n maxRetryDelayMs: 0,\n },\n errorRetry: {\n maxNumRetry: 1000,\n retryDelayMs: 1000,\n maxRetryDelayMs: 1000,\n },\n },\n },\n };\n};\n\n// ************* Manifest Handlers ************* //\n\nexport const handleManifestParsed = (hls: any, data: any) => {\n const dispatch = store.dispatch;\n let qualityLevels: any[] = [];\n let resolutions: any[] = [];\n hls.levels.map((level: any) => {\n qualityLevels.push(level.attrs.RESOLUTION?.split(\"x\")[1].trim());\n resolutions.push(level.attrs.RESOLUTION!);\n });\n hls.autoLevelCapping = highestResolutionSupported(resolutions, window.innerWidth, window.innerHeight);\n dispatch(setQualityLevels(qualityLevels));\n [\"fullscreenchange\", \"webkitfullscreenchange\", \"mozfullscreenchange\", \"msfullscreenchange\"].forEach((eventType) =>\n document.addEventListener(\n eventType,\n () => {\n if (conditions(ConditionName.isAutoQuality)) {\n hls.autoLevelCapping = highestResolutionSupported(resolutions, window.innerWidth, window.innerHeight);\n hls.nextLevel = -1;\n }\n },\n false,\n ),\n );\n if (data.audioTracks.length > 0) {\n const sortedAudioTracks = data.audioTracks.sort((a: any) => (a.default === true ? -1 : 1));\n dispatch(setMultiAudio(sortedAudioTracks));\n }\n};\n\nexport const handleMediaAttached = (Hls: any, hls: any) => {\n const { details, params } = store.getState().videoData;\n let streamLink = params.id ? details.stream_link : params.stream_link;\n hls.loadSource(streamLink);\n hls.on(Hls.Events.MANIFEST_PARSED, (_event: any, data: any) => handleManifestParsed(hls, data));\n};\n\n// ************* Level Handlers ************* //\n\nexport const handleLevels = (hls: any, data: any, setQualityLevel: any) => {\n if (data.frag.type !== \"audio\") {\n const dispatch = store.dispatch;\n const { settings } = store.getState().user;\n const { qualityLevels, manualQuality, autoQuality } = store.getState().controller;\n if (!conditions(ConditionName.isAutoQuality)) {\n if (data.frag.level !== manualQuality) hls.nextLevel = qualityLevels[settings.quality!] ? settings.quality : -1;\n if (qualityLevels[settings.quality!]) {\n dispatch(setManualQuality(settings.quality!));\n dispatch(setAutoQuality(undefined));\n } else {\n setQualityLevel(qualityLevels[data.frag.level]);\n dispatch(setAutoQuality(data.frag.level));\n dispatch(setUserSettings({ ...settings, quality: -1 }));\n }\n } else if (conditions(ConditionName.isAutoQuality) && autoQuality === undefined) {\n hls.nextLevel = -1;\n setQualityLevel(qualityLevels[data.frag.level]);\n dispatch(setAutoQuality(data.frag.level));\n } else if (conditions(ConditionName.isAutoQuality)) {\n setQualityLevel(qualityLevels[data.frag.level]);\n if (autoQuality !== data.frag.level) dispatch(setAutoQuality(data.frag.level));\n }\n }\n};\n\n// ************* Fragment Handlers ************* //\n\nexport const handleFragBuffered = (hls: any) => {\n const dispatch = store.dispatch;\n const bufferedTime = hls.mainForwardBufferInfo?.end;\n const bufferedTimeWidth = (bufferedTime! / mainPlayerVideoTag().duration) * 100;\n dispatch(setBufferedTimeWidth(bufferedTimeWidth));\n};\n\nexport const handleFragChanged = (hls: any, data: any, setQualityLevel: any) => {\n const { params, multiAudio, selectedAudioId } = store.getState().videoData;\n\n if (multiAudio && selectedAudioId !== undefined && selectedAudioId !== hls.audioTrack) hls.audioTrack = selectedAudioId;\n if (params.type) handleLevels(hls, data, setQualityLevel);\n};\n\nexport const handleFragParsed = (hls: any, data: any, setQualityLevel: any) => {\n const { type } = store.getState().videoData.params;\n if (type) handleLevels(hls, data, setQualityLevel);\n};\n\n// ************* HLS Error Handlers ************* //\n\nexport const handleHlsErrors = (data: any) => {\n if (data.event !== \"hlsAudioTrackLoading\") return { type: \"HLS_\" + data.type, message: data.error.message };\n return undefined;\n};\n\n// ************* Video Tag Handlers ************* //\n\nexport const handleVideoWaiting = (event: any, waitingTimerRef: any) => {\n const dispatch = store.dispatch;\n event.preventDefault();\n waitingTimerRef.current = Date.now();\n console.log(\"--- handleVideoWaiting\");\n dispatch(setIsLoading(true));\n};\n\nexport const handleVideoSeeking = (event: any, waitingTimerRef: any) => {\n if (conditions(ConditionName.isIOS) && conditions(ConditionName.isFirstPlay)) return;\n const dispatch = store.dispatch;\n event.preventDefault();\n waitingTimerRef.current = 0;\n console.log(\"--- handleVideoSeeking\");\n dispatch(setIsLoading(true));\n};\n\nexport const handleVideoPlay = (event: any, timerRef: any) => {\n const dispatch = store.dispatch;\n const { videoSettings } = store.getState().user;\n const { params } = store.getState().videoData;\n const { currentTime } = store.getState().controller;\n event.preventDefault();\n timerRef.current = Date.now();\n dispatch(setPlay(true));\n if (conditions(ConditionName.hasOnPlayParams)) params.onPlay!(currentTime);\n if (conditions(ConditionName.isFirstPlay)) {\n if (!conditions(ConditionName.hasCurrentTimeParams)) {\n mainPlayerVideoTag().currentTime = videoSettings.time;\n dispatch(setCurrentTime(videoSettings.time));\n }\n if (conditions(ConditionName.hasFullScreenParams)) handleAutoFullScreen();\n if (conditions(ConditionName.isFullScreen)) handleLockOrientation();\n dispatch(setVideoTimelines([Math.floor(mainPlayerVideoTag().currentTime)]));\n if (conditions(ConditionName.hasRawSubtitles)) handleSubtitle();\n }\n sendFluentLog(pausePlayLog(true));\n dispatch(setSubtitleText(\"\"));\n};\n\nexport const handleVideoPlaying = (\n loadingCounterRef: any,\n loadingDurationRef: any,\n initialWaitingDurationRef: any,\n bannerLoadingDurationRef: any,\n timerRef: any,\n waitingDurationRef: any,\n waitingTimerRef: any,\n videoEntranceTimeRef: any,\n) => {\n const dispatch = store.dispatch;\n const { autoQuality, canPlayVideo, firstPlay, qualityLevels } = store.getState().controller;\n const { settings } = store.getState().user;\n const qualityLevel = settings.quality === -1 && autoQuality ? qualityLevels[autoQuality] : qualityLevels[settings.quality!];\n let waitingDuration = 0;\n if (!!waitingTimerRef.current) waitingDuration = Date.now() - waitingTimerRef.current;\n if (firstPlay && !!mainPlayerVideoTag().played) {\n sendFluentLog(\n initLog(\n loadingDurationRef.current,\n Date.now() - initialWaitingDurationRef.current,\n bannerLoadingDurationRef.current - initialWaitingDurationRef.current,\n Date.now() - timerRef.current,\n timerRef,\n ),\n );\n }\n dispatch(setFirstPlay(false));\n\n if (canPlayVideo && waitingDuration > 0 && qualityLevel !== undefined) {\n waitingDurationRef.current = waitingDuration;\n waitingTimerRef.current = 0;\n sendFluentLog(loadingLog(waitingDuration, qualityLevel, timerRef, loadingCounterRef, videoEntranceTimeRef.current));\n loadingCounterRef.current = loadingCounterRef.current + 1;\n timerRef.current = Date.now();\n }\n};\n\nexport const handleVideoPause = (event: any) => {\n const dispatch = store.dispatch;\n const { params } = store.getState().videoData;\n event.preventDefault();\n sendFluentLog(pausePlayLog(false));\n dispatch(setPlay(false));\n if (conditions(ConditionName.hasOnPauseParams)) params.onPause!();\n};\n\nexport const handleVideoTimeUpdate = (event: any) => {\n const dispatch = store.dispatch;\n const { onChangeCurrentTime } = store.getState().videoData.params;\n const { selectedSubtitle } = store.getState().videoData;\n event.preventDefault();\n dispatch(setCurrentTime(event.target.currentTime));\n if (conditions(ConditionName.hasOnChangeCurrentTime)) onChangeCurrentTime!(event.target.currentTime);\n if (conditions(ConditionName.hasActiveCue)) dispatch(setSubtitleText((selectedSubtitle!.activeCues![0] as any).text));\n};\n\nexport const handleVideoCanPlay = () => {\n console.log(\"🔥 trigger onCanPlay\");\n const video = mainPlayerVideoTag();\n const dispatch = store.dispatch;\n const { settings } = store.getState().user;\n console.log(\"--- handleVideoCanPlay\");\n dispatch(setIsLoading(false));\n dispatch(setCanPlayVideo(true));\n mainPlayerVideoTag().volume = settings.volume / 100;\n dispatch(setDuration(video.duration));\n};\n\nexport const handleVideoEnded = (event: any) => {\n const dispatch = store.dispatch;\n const { params } = store.getState().videoData;\n event.preventDefault();\n dispatch(setIsEnded(true));\n dispatch(setActiveElements(true));\n handleVideoTimeline(mainPlayerVideoTag().duration);\n if (conditions(ConditionName.hasOnFinishedParams)) params.onFinished!();\n};\n\n// ************* IOS Video Tag Handlers ************* //\n\nexport const handleIosVideoPlay = (event: any, timerRef: any) => {\n event.preventDefault();\n timerRef.current = Date.now();\n};\n\nexport const handleIosVideoPlaying = () => {\n const dispatch = store.dispatch;\n console.log(\"--- handleIosVideoPlaying\");\n dispatch(setIsLoading(false));\n dispatch(setFirstPlay(false));\n};\n\nexport const handleIosVideoTimeUpdate = (event: any) => {\n const { onChangeCurrentTime } = store.getState().videoData.params;\n const dispatch = store.dispatch;\n event.preventDefault();\n if (conditions(ConditionName.hasOnChangeCurrentTime)) onChangeCurrentTime!(event.target.currentTime);\n dispatch(setCurrentTime(event.target.currentTime));\n};\n\nexport const handleIosVideoEnded = () => {\n const dispatch = store.dispatch;\n const { params } = store.getState().videoData;\n dispatch(setIsEnded(true));\n dispatch(setActiveElements(true));\n if (conditions(ConditionName.hasOnFinishedParams)) params.onFinished!();\n};\n\n// ************* Static Video Tag Handlers ************* //\n\nexport const handleStaticVideoPause = (event: any) => {\n const dispatch = store.dispatch;\n event.preventDefault();\n dispatch(setPlay(false));\n};\n\nexport const handleStaticVideoPlay = (event: any, timerRef: any) => {\n const dispatch = store.dispatch;\n const { params } = store.getState().videoData;\n const { currentTime } = store.getState().controller;\n event.preventDefault();\n dispatch(setPlay(true));\n timerRef.current = Date.now();\n dispatch(setSubtitleText(\"\"));\n if (conditions(ConditionName.hasOnPlayParams)) params.onPlay!(currentTime);\n\n if (conditions(ConditionName.isFirstPlay)) {\n if (conditions(ConditionName.hasRawSubtitles)) handleSubtitle();\n if (conditions(ConditionName.hasFullScreenParams)) {\n handleAutoFullScreen();\n if (conditions(ConditionName.isFullScreen)) handleLockOrientation();\n }\n }\n};\n\nexport const handleStaticVideoPlaying = (loadingDurationRef: any, initialWaitingDurationRef: any, timerRef: any) => {\n const dispatch = store.dispatch;\n const { firstPlay } = store.getState().controller;\n console.log(\"--- handleStaticVideoPlaying\");\n dispatch(setIsLoading(false));\n if (firstPlay && !!mainPlayerVideoTag().played) {\n sendFluentLog(\n initLog(Math.round(loadingDurationRef.current), Date.now() - initialWaitingDurationRef.current, 0, Date.now() - timerRef.current, timerRef),\n );\n }\n dispatch(setFirstPlay(false));\n};\n\nexport const handleStaticVideoTimeUpdate = (event: any) => {\n const { onChangeCurrentTime } = store.getState().videoData.params;\n const dispatch = store.dispatch;\n const { selectedSubtitle } = store.getState().videoData;\n event.preventDefault();\n dispatch(setCurrentTime(event.target.currentTime));\n dispatch(setDuration(event.target.duration));\n if (conditions(ConditionName.hasOnChangeCurrentTime)) onChangeCurrentTime!(event.target.currentTime);\n if (conditions(ConditionName.hasActiveCue)) dispatch(setSubtitleText((selectedSubtitle!.activeCues![0] as any).text));\n};\n\nexport const handleStaticVideoCanPlay = () => {\n const dispatch = store.dispatch;\n console.log(\"--- handleStaticVideoCanPlay\");\n dispatch(setIsLoading(false));\n dispatch(setCanPlayVideo(true));\n};\n\nexport const handleStaticVideoLoadedData = (intervalRef: any) => {\n handleBufferedTime(mainPlayerVideoTag(), intervalRef);\n};\n\nexport const handleStaticVideoEnded = (event: any) => {\n const dispatch = store.dispatch;\n const { params } = store.getState().videoData;\n dispatch(setIsEnded(true));\n dispatch(setActiveElements(true));\n if (conditions(ConditionName.hasOnFinishedParams)) params.onFinished!();\n event.preventDefault();\n};\n\nexport const handleMiniPlayerMediaAttached = async (hls: any) => {\n const { stream_link } = store.getState().miniPlayer.details;\n hls.loadSource(stream_link);\n};\n\nexport const handleVideoVisibilityChange = () => {\n handleVideoTimeline(mainPlayerVideoTag().currentTime);\n};\n","import { useEffect } from \"react\";\nimport { conditions } from \"../conditions/conditions\";\nimport { ConditionName } from \"../interfaces/enums\";\nimport { mainPlayerVideoTag } from \"../constants\";\nimport { useAppDispatch, useAppSelector } from \"../redux/hooks\";\nimport { setCurrentTime } from \"../redux/slices/controllerSlice\";\nimport { shallowEqual } from \"react-redux\";\n\nconst useJumpToCurrentTime = () => {\n const dispatch = useAppDispatch();\n const { params } = useAppSelector(({ videoData: { params } }) => ({ params }), shallowEqual);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => {\n if (conditions(ConditionName.hasCurrentTimeParams)) {\n mainPlayerVideoTag().currentTime = params.currentTime!;\n dispatch(setCurrentTime(params.currentTime!));\n }\n }, [params.currentTime]);\n}\n\nexport default useJumpToCurrentTime;","import { useEffect } from \"react\";\nimport { useAppSelector } from \"../redux/hooks\";\nimport { shallowEqual } from \"react-redux\";\nimport { mainPlayerVideoTag } from \"../constants\";\n\nconst useHideSubtitle = () => {\n const { rawSubtitles } = useAppSelector(\n ({ videoData: { rawSubtitles } }) => ({ rawSubtitles }),\n shallowEqual\n );\n\n useEffect(() => {\n const tracks = mainPlayerVideoTag().getElementsByTagName(\"track\");\n for (let i = 0; i < tracks.length; i++) {\n tracks[i].addEventListener(\"cuechange\", (event) => {\n const track = (event.target! as any).track;\n let activeCue: any;\n if (track.activeCues) activeCue = track.activeCues[0];\n if (activeCue) {\n setTimeout(() => {\n const el = document.getElementById(\"subtitle-id\");\n if (el) el.style.display = \"block\";\n }, 300);\n\n activeCue.onexit = () => {\n const el = document.getElementById(\"subtitle-id\");\n if (el) el.style.display = \"none\";\n };\n }\n });\n }\n }, [rawSubtitles]);\n};\n\nexport default useHideSubtitle;\n","import { useEffect } from \"react\";\nimport { mainPlayerVideoTag } from \"../constants\";\nimport { useAppDispatch, useAppSelector } from \"../redux/hooks\";\nimport { shallowEqual } from \"react-redux\";\nimport { getSubtitleLabel, sortLanguages } from \"../helpers\";\nimport { setSubtitles } from \"../redux/slices/videoDataSlice\";\n\nconst useAppendSubtitle = () => {\n const dispatch = useAppDispatch();\n const { rawSubtitles } = useAppSelector(({ videoData: { rawSubtitles } }) => ({ rawSubtitles }), shallowEqual);\n\n useEffect(() => {\n const videoEl = mainPlayerVideoTag();\n if (!videoEl) return;\n\n const newSubtitles = sortLanguages(rawSubtitles || []);\n const existingTracks = Array.from(videoEl.querySelectorAll(\"track\"));\n const existingMap = new Map(existingTracks.map((t) => [t.srclang, t]));\n existingTracks.forEach((track) => {\n const stillExists = newSubtitles.some((s: any) => s.lang === track.srclang);\n if (!stillExists && track.isConnected) track.remove();\n });\n\n newSubtitles.forEach((subtitle: any) => {\n const existing = existingMap.get(subtitle.lang);\n\n if (!existing) {\n const trackEl = document.createElement(\"track\");\n trackEl.kind = \"subtitles\";\n trackEl.src = subtitle.url;\n trackEl.srclang = subtitle.lang;\n trackEl.label = subtitle.title || (getSubtitleLabel(subtitle.lang) as any);\n trackEl.default = !!subtitle.is_default;\n videoEl.appendChild(trackEl);\n return;\n }\n\n if (existing.src !== subtitle.url) {\n const newTrack = document.createElement(\"track\");\n newTrack.kind = \"subtitles\";\n newTrack.src = subtitle.url;\n newTrack.srclang = subtitle.lang;\n\n newTrack.label = subtitle.title || (getSubtitleLabel(subtitle.lang) as any);\n newTrack.default = !!subtitle.is_default;\n\n existing.replaceWith(newTrack);\n }\n });\n\n const timeoutId = setTimeout(() => {\n const tracks = Array.from(videoEl.textTracks);\n dispatch(setSubtitles(tracks));\n }, 200);\n\n return () => clearTimeout(timeoutId);\n }, [rawSubtitles, dispatch]);\n};\n\nexport default useAppendSubtitle;\n","import { useEffect } from \"react\";\nimport { useAppSelector } from \"../redux/hooks\";\nimport { shallowEqual } from \"react-redux\";\nimport { handleSubtitle } from \"../redux/actions/videoData.actions\";\nimport { conditions } from \"../conditions/conditions\";\nimport { ConditionName } from \"../interfaces/enums\";\n\nconst useActiveSubtitleAutomatic = () => {\n const { activeSubtitle } = useAppSelector(\n ({ videoData }) => ({\n activeSubtitle: videoData.params?.activeSubtitle,\n }),\n shallowEqual\n );\n\n useEffect(() => {\n if (conditions(ConditionName.hasActiveSubtitleInParams))\n setTimeout(() => handleSubtitle(activeSubtitle), 500);\n }, [activeSubtitle]);\n};\n\nexport default useActiveSubtitleAutomatic;\n","\"use client\";\n\nimport { useEffect, useRef } from \"react\";\nimport { shallowEqual } from \"react-redux\";\nimport { useAppDispatch, useAppSelector } from \"../../../helpers/redux/hooks\";\nimport { handlePageLoadTime, setupAutoplayBehavior } from \"../../../helpers/helpers\";\nimport { mainPlayerVideoTag } from \"../../../helpers/constants\";\nimport { setPlayerParams, setVideoElementSizeInfo } from \"../../../helpers/redux/slices/videoDataSlice\";\nimport { ConditionName } from \"../../../helpers/interfaces/enums\";\nimport { conditions } from \"../../../helpers/conditions/conditions\";\nimport {\n handleStaticVideoCanPlay,\n handleStaticVideoEnded,\n handleStaticVideoLoadedData,\n handleStaticVideoPause,\n handleStaticVideoPlay,\n handleStaticVideoPlaying,\n handleStaticVideoTimeUpdate,\n handleVideoError,\n} from \"../../../helpers/redux/actions/playerCore.actions\";\nimport useJumpToCurrentTime from \"../../../helpers/hooks/useJumpToCurrentTime\";\nimport useHideSubtitle from \"../../../helpers/hooks/useHideSubtitle\";\nimport Image from \"next/image\";\nimport useAppendSubtitle from \"../../../helpers/hooks/useAppendSubtitle\";\nimport useActiveSubtitleAutomatic from \"../../../helpers/hooks/useActiveSubtitleAutomatic\";\n\nconst StaticVideoTag = () => {\n const dispatch = useAppDispatch();\n const { params } = useAppSelector(({ videoData: { params } }) => ({ params }), shallowEqual);\n useAppSelector(({ controller: { firstPlay } }) => ({ firstPlay }), shallowEqual);\n\n const loadingDurationRef = useRef<any>(0);\n const initialWaitingRef = useRef<any>(0);\n const timerRef = useRef<any>(null);\n const intervalRef = useRef<any>(null);\n\n useEffect(() => {\n const video = mainPlayerVideoTag();\n if (!video) return;\n\n // onLoadedData\n if (video.readyState >= 2) {\n console.log(\"🔥 trigger onLoadedData\");\n handleStaticVideoLoadedData(intervalRef);\n }\n\n // onCanPlay\n if (video.readyState >= 3) {\n console.log(\"🔥 trigger onCanPlay\");\n handleStaticVideoCanPlay();\n }\n }, []);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => {\n handlePageLoadTime(loadingDurationRef);\n initialWaitingRef.current = Date.now();\n }, []);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => {\n const handleResize = () => {\n const element: any = mainPlayerVideoTag()?.getBoundingClientRect();\n if (element) dispatch(setVideoElementSizeInfo(element));\n };\n\n if (conditions(ConditionName.isFirstPlay)) handleResize();\n window.addEventListener(\"resize\", handleResize);\n return () => window.removeEventListener(\"resize\", handleResize);\n }, [params.id]);\n\n useJumpToCurrentTime();\n\n useEffect(() => {\n if (!params.vhl_mainVideoSrc || !mainPlayerVideoTag()) return;\n\n dispatch(setPlayerParams({ ...params, id: params.vhl_mainVideoSrc }));\n const currentTime = mainPlayerVideoTag().currentTime;\n\n const handleCanPlay = () => {\n mainPlayerVideoTag().currentTime = currentTime;\n mainPlayerVideoTag()\n .play()\n .catch(() => {\n mainPlayerVideoTag().muted = true;\n mainPlayerVideoTag().play();\n });\n mainPlayerVideoTag().removeEventListener(\"canplay\", handleCanPlay);\n };\n\n mainPlayerVideoTag().addEventListener(\"canplay\", handleCanPlay);\n\n mainPlayerVideoTag().src = params.vhl_mainVideoSrc;\n mainPlayerVideoTag().load();\n\n setupAutoplayBehavior();\n\n return () => {\n mainPlayerVideoTag().removeEventListener(\"canplay\", handleCanPlay);\n };\n }, [params.vhl_mainVideoSrc]);\n\n useAppendSubtitle();\n useHideSubtitle();\n useActiveSubtitleAutomatic();\n\n return (\n <div style={{ position: \"relative\", width: \"100%\", height: \"100%\" }}>\n {params.banner && (\n <Image fill src={params.banner} alt={params.bannerAlt ?? \"بنر ویدیو پلیر\"} style={{ objectFit: \"cover\", pointerEvents: \"none\" }} />\n )}\n\n <video\n playsInline\n id=\"player-tag\"\n preload=\"metadata\"\n crossOrigin=\"anonymous\"\n poster={params.banner ?? undefined}\n style={{ width: \"100%\", height: \"100%\" }}\n autoPlay={!!conditions(ConditionName.hasAutoPlay) || !!params.advertisement}\n className={`pl-w-full pl-h-full pl-items-center pl-flex-1 ${\n !conditions(ConditionName.isTouchScreen) && !conditions(ConditionName.isFullScreen) && \"!pl-rounded-[12px]\"\n }`}\n onError={handleVideoError}\n onPause={handleStaticVideoPause}\n onEnded={handleStaticVideoEnded}\n onTimeUpdate={handleStaticVideoTimeUpdate}\n onPlay={(e) => handleStaticVideoPlay(e, timerRef)}\n onPlaying={() => handleStaticVideoPlaying(loadingDurationRef, initialWaitingRef, timerRef)}\n >\n <source src={params.id + `?date=${Date.now()}`} />\n </video>\n </div>\n );\n};\n\nexport default StaticVideoTag;\n","import { IViewedVideo } from \"../../interfaces/interfaces\";\nimport store from \"../store\";\nimport { setVideoSettings } from \"../slices/userSlice\";\nimport { mainPlayerVideoTag } from \"../../constants\";\n\nexport const handleContinuousPlayback = () => {\n const { params } = store.getState().videoData;\n const currentTime = mainPlayerVideoTag().currentTime;\n if (currentTime !== 0) {\n const duration = mainPlayerVideoTag().duration;\n const viewedVideo: IViewedVideo = {\n video_id: +params.id!,\n video_type: 2,\n time: currentTime === duration ? 0 : Math.floor(mainPlayerVideoTag().currentTime),\n };\n let viewedVideosInLocalStorage = localStorage.getItem(\"viewedVideos\");\n if (viewedVideosInLocalStorage) {\n let viewedVideos: IViewedVideo[] = JSON.parse(viewedVideosInLocalStorage);\n viewedVideos = viewedVideos.filter(\n (video: IViewedVideo) => video.video_id !== viewedVideo.video_id || video.video_type !== viewedVideo.video_type\n );\n if (viewedVideos.length < 10) viewedVideos.push(viewedVideo);\n else {\n viewedVideos.shift();\n viewedVideos.push(viewedVideo);\n }\n localStorage.setItem(\"viewedVideos\", JSON.stringify(viewedVideos));\n } else localStorage.setItem(\"viewedVideos\", JSON.stringify([viewedVideo]));\n }\n};\n\nexport const handleApplyContinuousPlayback = () => {\n const dispatch = store.dispatch;\n const { params } = store.getState().videoData;\n let viewedVideosInLocalStorage = localStorage.getItem(\"viewedVideos\");\n if (viewedVideosInLocalStorage) {\n const viewedVideos: IViewedVideo[] = JSON.parse(viewedVideosInLocalStorage);\n const viewedVideo = viewedVideos.find(\n (video: IViewedVideo) => video.video_id === Number(params.id) && video.video_type === 2\n );\n\n if (viewedVideo) dispatch(setVideoSettings({ time: viewedVideo.time }));\n }\n};\n\n","import { useEffect } from \"react\";\nimport { shallowEqual } from \"react-redux\";\nimport { useAppSelector } from \"../redux/hooks\";\nimport { continuousePlaybackIntervalTime } from \"../environment\";\nimport { ConditionName } from \"../interfaces/enums\";\nimport { conditions } from \"../conditions/conditions\";\nimport { handleContinuousPlayback } from \"../redux/actions/user.actions\";\n\nconst useContinuousPlaybackInterval = () => {\n let interval: any = null;\n\n const { isEnded } = useAppSelector(({ controller: { isEnded } }) => ({ isEnded }), shallowEqual);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => {\n interval = setInterval(() => handleContinuousPlayback(), continuousePlaybackIntervalTime);\n return () => clearInterval(interval);\n }, []);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => {\n if (conditions(ConditionName.isEnded)) clearInterval(interval);\n }, [isEnded]);\n};\n\nexport default useContinuousPlaybackInterval;\n","import { useEffect, useState } from \"react\";\nimport { shallowEqual } from \"react-redux\";\nimport { useAppSelector } from \"../redux/hooks\";\nimport { sendFluentLog } from \"../logs/fluentdLogger\";\nimport { autoQualityChangeLog, pingpongLog } from \"../logs/logs\";\n\nconst usePingPong = (qualityLevel?: number) => {\n const [qualityHistory, setQualityHistory] = useState<number[]>([]);\n const [startTimer, setStartTimer] = useState<number>(0);\n\n const { qualityLevels } = useAppSelector(({ controller: { qualityLevels } }) => ({ qualityLevels }), shallowEqual);\n\n useEffect(() => {\n if (qualityLevel) {\n let newQualityArray: number[] = [];\n switch (qualityHistory.length) {\n case 0:\n newQualityArray = [qualityLevel];\n break;\n case 1:\n newQualityArray = [qualityLevel, ...qualityHistory];\n break;\n case 2:\n newQualityArray = [qualityLevel, ...qualityHistory];\n sendFluentLog(\n autoQualityChangeLog(\n `${newQualityArray[0]}P`,\n `${newQualityArray[1]}P`,\n qualityLevels.indexOf(newQualityArray[0]) - qualityLevels.indexOf(newQualityArray[1])\n )\n );\n break;\n default:\n newQualityArray = [qualityLevel, qualityHistory[0], qualityHistory[1]];\n if (newQualityArray[1] !== newQualityArray[2])\n sendFluentLog(\n autoQualityChangeLog(\n `${newQualityArray[1]}P`,\n `${newQualityArray[2]}P`,\n qualityLevels.indexOf(newQualityArray[1]) - qualityLevels.indexOf(newQualityArray[2])\n )\n );\n break;\n }\n setQualityHistory(newQualityArray);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [qualityLevel]);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => {\n if (qualityHistory.length === 3 && qualityHistory[0] === qualityHistory[2]) {\n sendFluentLog(pingpongLog(startTimer, qualityHistory));\n setQualityHistory([]);\n setStartTimer(0);\n } else {\n setStartTimer(new Date().getTime());\n }\n }, [qualityHistory]);\n};\nexport default usePingPong;\n","import { useEffect } from \"react\";\nimport { handleContinuousPlayback } from \"../redux/actions/user.actions\";\n\nconst useBeforeUnload = () => {\n useEffect(() => {\n const handleBeforeUnload = () => {\n handleContinuousPlayback();\n };\n\n window.addEventListener(\"beforeunload\", handleBeforeUnload);\n return () => window.removeEventListener(\"beforeunload\", handleBeforeUnload);\n }, []);\n};\n\nexport default useBeforeUnload;\n","\"use client\";\n\nimport Hls, { ErrorData, Events } from \"hls.js\";\nimport { useEffect, useState, useRef, useLayoutEffect } from \"react\";\nimport { shallowEqual } from \"react-redux\";\nimport { useAppDispatch, useAppSelector } from \"../../../helpers/redux/hooks\";\nimport useContinuousPlaybackInterval from \"../../../helpers/hooks/useContinuousPlaybackInterval\";\nimport { handlePageLoadTime, setupAutoplayBehavior } from \"../../../helpers/helpers\";\nimport {\n appendQueryParamsToChunksIOS,\n handleFragBuffered,\n handleFragChanged,\n handleFragParsed,\n handleHlsConfig,\n handleHlsErrors,\n handleIosVideoEnded,\n handleIosVideoPlay,\n handleIosVideoPlaying,\n handleIosVideoTimeUpdate,\n handleManifestParsed,\n handleMediaAttached,\n handleVideoCanPlay,\n handleVideoEnded,\n handleVideoError,\n handleVideoPause,\n handleVideoPlay,\n handleVideoPlaying,\n handleVideoSeeking,\n handleVideoTimeUpdate,\n handleVideoVisibilityChange,\n handleVideoWaiting,\n} from \"../../../helpers/redux/actions/playerCore.actions\";\nimport { ConditionName } from \"../../../helpers/interfaces/enums\";\nimport { conditions } from \"../../../helpers/conditions/conditions\";\nimport { setIsEnded } from \"../../../helpers/redux/slices/controllerSlice\";\nimport usePingPong from \"../../../helpers/hooks/usePingPong\";\nimport Image from \"next/image\";\nimport useBeforeUnload from \"../../../helpers/hooks/useBeforeUnload\";\nimport useHideSubtitle from \"../../../helpers/hooks/useHideSubtitle\";\nimport { mainPlayerVideoTag } from \"../../../helpers/constants\";\nimport { handlePlayPauseAfterChangeVideo } from \"../../../helpers/redux/actions/controller.actions\";\nimport useJumpToCurrentTime from \"../../../helpers/hooks/useJumpToCurrentTime\";\nimport { errorLogProvider } from \"../../../helpers/errorBoundary/errorBoundaryFunctions\";\nimport useAppendSubtitle from \"../../../helpers/hooks/useAppendSubtitle\";\nimport useActiveSubtitleAutomatic from \"../../../helpers/hooks/useActiveSubtitleAutomatic\";\n\nconst NonStaticVideoTag = () => {\n const [qualityLevel, setQualityLevel] = useState<number | undefined>(undefined);\n\n const dispatch = useAppDispatch();\n const { params, details, videoElementSizeInfo } = useAppSelector(\n ({ videoData: { params, details, videoElementSizeInfo } }) => ({\n params,\n details,\n videoElementSizeInfo,\n }),\n shallowEqual,\n );\n const { currentTime, duration } = useAppSelector(\n ({ controller: { currentTime, duration, isEnded, firstPlay } }) => ({\n currentTime,\n duration,\n isEnded,\n firstPlay,\n }),\n shallowEqual,\n );\n const timerRef = useRef<any>(null);\n const waitingDurationRef = useRef<any>(0);\n const waitingTimerRef = useRef<number>(0);\n const initialWaitingDurationRef = useRef<any>(0);\n const bannerLoadingDurationRef = useRef<any>(0);\n const loadingDurationRef = useRef<any>(0);\n const loadingCounterRef = useRef<any>(1);\n const videoEntranceTimeRef = useRef<any>(mainPlayerVideoTag() ? mainPlayerVideoTag().currentTime : 0);\n\n useContinuousPlaybackInterval();\n useBeforeUnload();\n\n useLayoutEffect(() => {\n let hls = new Hls(handleHlsConfig());\n\n // ---- Page Load Time ----\n handlePageLoadTime(loadingDurationRef);\n\n initialWaitingDurationRef.current = Date.now();\n\n setupAutoplayBehavior();\n\n const onMediaAttached = () => handleMediaAttached(Hls, hls);\n const onFragBuffered = () => handleFragBuffered(hls);\n const onFragChanged = (event: any, data: any) => handleFragChanged(hls, data, setQualityLevel);\n\n const onFragParsed = (event: any, data: any) => handleFragParsed(hls, data, setQualityLevel);\n const onHlsErrors = (event: Events.ERROR, data: ErrorData) => errorLogProvider(handleHlsErrors(data));\n if (Hls.isSupported()) {\n hls.attachMedia(mainPlayerVideoTag() as HTMLMediaElement);\n hls.on(Hls.Events.MEDIA_ATTACHED, onMediaAttached);\n hls.on(Hls.Events.FRAG_BUFFERED, onFragBuffered);\n hls.on(Hls.Events.FRAG_CHANGED, onFragChanged);\n hls.on(Hls.Events.FRAG_PARSED, onFragParsed);\n hls.on(Hls.Events.ERROR, onHlsErrors);\n\n mainPlayerVideoTag().addEventListener(\"waiting\", (event: any) => handleVideoWaiting(event, waitingTimerRef));\n mainPlayerVideoTag().addEventListener(\"seeking\", (event: any) => handleVideoSeeking(event, waitingTimerRef));\n mainPlayerVideoTag().addEventListener(\"play\", (event: any) => handleVideoPlay(event, timerRef));\n mainPlayerVideoTag().addEventListener(\"playing\", () =>\n handleVideoPlaying(\n loadingCounterRef,\n loadingDurationRef,\n initialWaitingDurationRef,\n bannerLoadingDurationRef,\n timerRef,\n waitingDurationRef,\n waitingTimerRef,\n videoEntranceTimeRef,\n ),\n );\n mainPlayerVideoTag().addEventListener(\"pause\", handleVideoPause);\n mainPlayerVideoTag().addEventListener(\"timeupdate\", handleVideoTimeUpdate);\n mainPlayerVideoTag().addEventListener(\"canplay\", handleVideoCanPlay);\n mainPlayerVideoTag().addEventListener(\"ended\", handleVideoEnded);\n mainPlayerVideoTag().addEventListener(\"error\", handleVideoError);\n\n document.addEventListener(\"visibilitychange\", handleVideoVisibilityChange);\n } else if (mainPlayerVideoTag().canPlayType(\"application/vnd.apple.mpegurl\")) {\n mainPlayerVideoTag().src = details.stream_link || params.stream_link!;\n\n mainPlayerVideoTag().addEventListener(\"waiting\", (event: any) => handleVideoWaiting(event, waitingTimerRef));\n mainPlayerVideoTag().addEventListener(\"play\", (event: any) => handleIosVideoPlay(event, timerRef));\n mainPlayerVideoTag().addEventListener(\"playing\", handleIosVideoPlaying);\n mainPlayerVideoTag().addEventListener(\"canplay\", handleVideoCanPlay);\n mainPlayerVideoTag().addEventListener(\"timeupdate\", handleIosVideoTimeUpdate);\n mainPlayerVideoTag().addEventListener(\"ended\", handleIosVideoEnded);\n mainPlayerVideoTag().addEventListener(\"pause\", handleVideoPause);\n\n // Append Query Parameter to .ts Chunks\n appendQueryParamsToChunksIOS();\n }\n\n return () => {\n handlePlayPauseAfterChangeVideo();\n hls.detachMedia();\n hls.off(Hls.Events.MEDIA_ATTACHED, onMediaAttached);\n hls.off(Hls.Events.FRAG_BUFFERED, onFragBuffered);\n hls.off(Hls.Events.FRAG_CHANGED, onFragChanged);\n hls.off(Hls.Events.FRAG_PARSED, onFragParsed);\n hls.off(Hls.Events.ERROR, onHlsErrors);\n hls.off(Hls.Events.MANIFEST_PARSED, (event: any, data: any) => handleManifestParsed(hls, data));\n document.removeEventListener(\"visibilitychange\", handleVideoVisibilityChange);\n };\n }, [details.stream_link, params.stream_link]);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => {\n if (currentTime < duration && conditions(ConditionName.isEnded)) {\n dispatch(setIsEnded(false));\n }\n }, [currentTime]);\n\n useEffect(() => {\n if (conditions(ConditionName.hasPlayStatusParams)) {\n if (params.playStatus) mainPlayerVideoTag().play();\n else mainPlayerVideoTag()?.pause();\n }\n }, [params.playStatus]);\n\n usePingPong(qualityLevel);\n\n useJumpToCurrentTime();\n useAppendSubtitle();\n useHideSubtitle();\n useActiveSubtitleAutomatic();\n\n return (\n <>\n <video\n playsInline\n id=\"player-tag\"\n preload=\"metadata\"\n crossOrigin=\"anonymous\"\n poster={params.banner ? params.banner : details.banner}\n autoPlay={!!conditions(ConditionName.hasAutoPlay) || !!params.advertisement}\n className={`pl-items-center pl-flex-1 pl-h-full ${\n !conditions(ConditionName.isTouchScreen) && !conditions(ConditionName.isFullScreen) && \"!pl-rounded-[12px]\"\n }`}\n style={{\n width: \"100%\",\n height: \"100%\",\n maxWidth: videoElementSizeInfo.width ? videoElementSizeInfo.width : \"100%\",\n maxHeight: videoElementSizeInfo.width\n ? videoElementSizeInfo.width < videoElementSizeInfo.height\n ? (videoElementSizeInfo.width * 9) / 16\n : (videoElementSizeInfo.width * 16) / 9\n : \"100%\",\n }}\n >\n <Image\n fill\n style={{ objectFit: \"cover\" }}\n src={params.banner ? params.banner : details.banner}\n onLoad={() => (bannerLoadingDurationRef.current = Date.now())}\n alt={params.bannerAlt ? params.bannerAlt : conditions(ConditionName.isStaticFormat) ? \"بنر ویدیو پلیر کافه ویدیو\" : (details.title ?? \"\")}\n />\n </video>\n </>\n );\n};\n\nexport default NonStaticVideoTag;\n","import dynamic from \"next/dynamic\";\nimport { ConditionName } from \"../../../helpers/interfaces/enums\";\nimport { conditions } from \"../../../helpers/conditions/conditions\";\n\nconst StaticVideoTag = dynamic(() => import(\"./staticVideoTag\"));\nconst NonStaticVideoTag = dynamic(() => import(\"./nonStaticVideoTag\"));\n\nconst VideoTag = () => {\n return <>{conditions(ConditionName.isStaticFormat) ? <StaticVideoTag /> : <NonStaticVideoTag />}</>;\n};\n\nexport default VideoTag;\n","import { useEffect } from \"react\";\nimport { shallowEqual } from \"react-redux\";\nimport { useAppDispatch, useAppSelector } from \"../redux/hooks\";\nimport { setIsFullScreen } from \"../redux/slices/controllerSlice\";\nimport { handleVideoElementSizeInfo } from \"../redux/actions/controller.actions\";\nimport { fullscreenLog } from \"../logs/logs\";\nimport { sendFluentLog } from \"../logs/fluentdLogger\";\nimport store from \"../redux/store\";\n\nconst useFullScreen = () => {\n const dispatch = useAppDispatch();\n useAppSelector(({ videoData: { params } }) => ({ params }), shallowEqual);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => {\n const handleChangeFullScreen = () => {\n const isFullScreen = document.fullscreenElement;\n const { params } = store.getState().videoData;\n params.onFullscreenChange?.(!!isFullScreen);\n\n if (isFullScreen) dispatch(setIsFullScreen(true));\n else {\n dispatch(setIsFullScreen(false));\n handleVideoElementSizeInfo();\n sendFluentLog(fullscreenLog(\"exitFullScreen\"));\n document.body.style.overflow = \"auto\";\n }\n };\n\n if (document.addEventListener) {\n document.addEventListener(\"webkitfullscreenchange\", handleChangeFullScreen, false);\n document.addEventListener(\"mozfullscreenchange\", handleChangeFullScreen, false);\n document.addEventListener(\"fullscreenchange\", handleChangeFullScreen, false);\n document.addEventListener(\"MSFullscreenChange\", handleChangeFullScreen, false);\n }\n\n () => {\n document.removeEventListener(\"webkitfullscreenchange\", handleChangeFullScreen, false);\n document.removeEventListener(\"mozfullscreenchange\", handleChangeFullScreen, false);\n document.removeEventListener(\"fullscreenchange\", handleChangeFullScreen, false);\n document.removeEventListener(\"MSFullscreenChange\", handleChangeFullScreen, false);\n };\n }, []);\n};\n\nexport default useFullScreen;\n","import { useEffect, useRef } from \"react\";\nimport { checkParentTarget, isTouchScreen } from \"../helpers\";\nimport { activeElementsTime } from \"../environment\";\nimport { shallowEqual } from \"react-redux\";\nimport { useAppDispatch, useAppSelector } from \"../redux/hooks\";\nimport { setActiveElements } from \"../redux/slices/controllerSlice\";\nimport store from \"../redux/store\";\n\nconst useActiveInActive = (isRightDoubleTouched: boolean, isLeftDoubleTouched: boolean) => {\n const dispatch = useAppDispatch();\n const { activeElements, play } = useAppSelector(({ controller: { activeElements, play } }) => ({ activeElements, play }), shallowEqual);\n\n const timeoutRef = useRef<any>(null);\n const isRightDoubleTouchedRef = useRef<boolean>(isRightDoubleTouched);\n const isLeftDoubleTouchedRef = useRef<boolean>(isLeftDoubleTouched);\n\n useEffect(() => {\n isRightDoubleTouchedRef.current = isRightDoubleTouched;\n }, [isRightDoubleTouched]);\n\n useEffect(() => {\n isLeftDoubleTouchedRef.current = isLeftDoubleTouched;\n }, [isLeftDoubleTouched]);\n\n useEffect(() => {\n let shouldInActiveElements = false;\n\n const handlePointerMove = (event: any) => {\n const { activeElements, isEnded } = store.getState().controller;\n if (isEnded) dispatch(setActiveElements(true));\n else if (event.pointerType === \"mouse\") {\n clearTimeout(timeoutRef.current);\n if (!activeElements) dispatch(setActiveElements(true));\n else if (\n [\n \"player-tag\",\n \"main-content\",\n \"player-controllbar\",\n \"video-opacity\",\n \"playerElements\",\n \"touchBackward\",\n \"touchForward\",\n \"backward\",\n \"forward\",\n ].includes(event.target.id)\n )\n shouldInActiveElements = true;\n timeoutRef.current = setTimeout(() => {\n const { settingPopover, speedPopover, qualityLevelsPopover, multiAudioPopover } = store.getState().popovers;\n const { play } = store.getState().controller;\n if (!settingPopover && !speedPopover && !qualityLevelsPopover && !multiAudioPopover && play && shouldInActiveElements)\n dispatch(setActiveElements(false));\n }, activeElementsTime);\n }\n };\n\n const handleTouchStart = (event: any) => {\n setTimeout(() => {\n const { activeElements, isEnded, firstPlay } = store.getState().controller;\n clearTimeout(timeoutRef.current);\n if (isEnded) return dispatch(setActiveElements(true));\n if (isTouchScreen() && !firstPlay && !isRightDoubleTouchedRef.current && !isLeftDoubleTouchedRef.current) {\n if (\n [\"player-tag\", \"main-content\", \"video-opacity\", \"touchBackward\", \"touchForward\", \"backward\", \"forward\"].includes(event.target.id) ||\n checkParentTarget(event, \"playerElements\")\n ) {\n // dispatch(setActiveElements(!activeElements));\n timeoutRef.current = setTimeout(() => {\n const { play } = store.getState().controller;\n const { settingPopover, speedPopover, qualityLevelsPopover, multiAudioPopover } = store.getState().popovers;\n if (!settingPopover && !speedPopover && !qualityLevelsPopover && !multiAudioPopover && play) dispatch(setActiveElements(false));\n }, activeElementsTime);\n } else {\n timeoutRef.current = setTimeout(() => {\n const { play } = store.getState().controller;\n const { settingPopover, speedPopover, qualityLevelsPopover, multiAudioPopover } = store.getState().popovers;\n if (!settingPopover && !speedPopover && !qualityLevelsPopover && !multiAudioPopover && play) dispatch(setActiveElements(false));\n }, activeElementsTime);\n }\n }\n }, 200);\n };\n\n const handleTouchMove = () => {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => {\n const { activeElements, isEnded, play } = store.getState().controller;\n const { settingPopover, speedPopover, qualityLevelsPopover } = store.getState().popovers;\n if (isEnded) dispatch(setActiveElements(true));\n else if (!settingPopover && !speedPopover && !qualityLevelsPopover && activeElements && !isEnded && play) dispatch(setActiveElements(false));\n }, activeElementsTime);\n };\n\n document.getElementById(\"video-area\")!.addEventListener(\"touchstart\", handleTouchStart);\n document.getElementById(\"video-area\")!.addEventListener(\"touchmove\", handleTouchMove);\n document.getElementById(\"video-area\")!.addEventListener(\"pointermove\", handlePointerMove);\n\n return () => {\n const videoArea = document.getElementById(\"video-area\")!;\n if (videoArea) {\n videoArea.removeEventListener(\"touchstart\", handleTouchStart);\n videoArea.removeEventListener(\"touchmove\", handleTouchMove);\n videoArea.removeEventListener(\"pointermove\", handlePointerMove);\n }\n };\n }, [activeElements, isRightDoubleTouched, isLeftDoubleTouched]);\n\n useEffect(() => {\n let timeout: any;\n if (!play) dispatch(setActiveElements(true));\n else timeout = setTimeout(() => dispatch(setActiveElements(false)), activeElementsTime);\n return () => {\n if (timeout) clearTimeout(timeout);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [play]);\n};\n\nexport default useActiveInActive;\n","import { useEffect } from \"react\";\nimport { handleVideoElementSizeInfo } from \"../redux/actions/controller.actions\";\nimport { useAppSelector } from \"../redux/hooks\";\nimport { isTouchScreen } from \"../helpers\";\nimport { shallowEqual } from \"react-redux\";\nimport { mainPlayerVideoTag } from \"../constants\";\n\nconst useHandleResize = () => {\n\n const { firstPlay, isFullScreen } = useAppSelector(({ controller: { firstPlay, isFullScreen } }) => ({firstPlay,isFullScreen,}),shallowEqual);\n\n useEffect(() => {\n if (mainPlayerVideoTag()) {\n let timeout: any;\n const handleResize = () => {\n timeout = setTimeout(\n () => {\n handleVideoElementSizeInfo();\n },\n isTouchScreen() ? 0 : 300\n );\n };\n handleResize();\n window.addEventListener(\"resize\", handleResize);\n\n return () => {\n window.removeEventListener(\"resize\", handleResize);\n clearTimeout(timeout);\n };\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [firstPlay, isFullScreen, mainPlayerVideoTag()]);\n}\n\nexport default useHandleResize;","import { ICloseIconProps } from \"../../helpers/interfaces/interfaces\";\n\nconst CloseIcon = ({ className, onClick }: ICloseIconProps) => {\n return (\n <svg\n className={className}\n onClick={(e) => {\n e.stopPropagation();\n onClick?.();\n }}\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g clip-path=\"url(#clip0_372_39317)\">\n <path\n d=\"M10.649 9.01462L17.658 2.00555C18.1141 1.54963 18.1141 0.812452 17.658 0.356588C17.2021 -0.0993313 16.4649 -0.0993313 16.009 0.356588L8.99992 7.3656L1.99107 0.356588C1.53493 -0.0993313 0.798022 -0.0993313 0.342103 0.356588C-0.114034 0.812507 -0.114034 1.54963 0.342103 2.00555L7.3509 9.01462L0.342158 16.0236C-0.11398 16.4796 -0.11398 17.2167 0.342158 17.6726C0.450304 17.7811 0.578815 17.8671 0.720306 17.9257C0.861797 17.9843 1.01348 18.0144 1.16664 18.0143C1.46512 18.0143 1.76371 17.9 1.99112 17.6726L8.99992 10.6636L16.009 17.6726C16.1172 17.781 16.2457 17.867 16.3872 17.9257C16.5287 17.9843 16.6804 18.0144 16.8335 18.0143C17.132 18.0143 17.4306 17.9 17.658 17.6726C18.1141 17.2167 18.1141 16.4796 17.658 16.0236L10.649 9.01462Z\"\n fill=\"white\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_372_39317\">\n <rect width=\"18\" height=\"18\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n};\n\nexport default CloseIcon;\n","import { useEffect, useRef, useState } from \"react\";\nimport { shallowEqual } from \"react-redux\";\nimport { useDoubleTap } from \"use-double-tap\";\nimport { useAppDispatch, useAppSelector } from \"../../../helpers/redux/hooks\";\nimport { IBackwardForwardProps } from \"../../../helpers/interfaces/interfaces\";\nimport { setActiveElements } from \"../../../helpers/redux/slices/controllerSlice\";\nimport { handleBackwardForward } from \"../../../helpers/redux/actions/controller.actions\";\nimport { ConditionName } from \"../../../helpers/interfaces/enums\";\nimport { conditions } from \"../../../helpers/conditions/conditions\";\nimport { handleRippleCircle, styleMerge, tw } from \"../../../helpers/helpers\";\nimport { mainPlayerVideoTag } from \"../../../helpers/constants\";\nimport useKeyPress from \"../../../helpers/hooks/useKeyPress\";\nimport IMAGES from \"../../../images/importImages\";\nimport Image from \"next/image\";\n\nconst hideTime = 1000;\nconst jump = 10;\nconst initialJump = conditions(ConditionName.isTouchScreen) ? jump : 0;\n\nconst BackwardForward = ({ type, isRightForward, isLeftBackward, setIsRightForward, setIsLeftBackward }: IBackwardForwardProps) => {\n const [backwardForwardCount, setBackwardForwardCount] = useState<number>(initialJump);\n const [hide, setHide] = useState<boolean>(false);\n\n const backwardForwardCountRef = useRef<number>(backwardForwardCount);\n const timeoutRef = useRef<any>(null);\n\n const dispatch = useAppDispatch();\n\n useAppSelector(({ controller: { currentTime, duration } }) => ({ currentTime, duration }), shallowEqual);\n\n const { videoElementSizeInfo } = useAppSelector(\n ({ videoData: { videoElementSizeInfo, params } }) => ({ videoElementSizeInfo, params }),\n shallowEqual\n );\n\n const isRight = [\"touchForward\", \"forward\"];\n const isLeft = [\"touchBackward\", \"backward\"];\n\n useEffect(() => {\n backwardForwardCountRef.current = backwardForwardCount;\n }, [backwardForwardCount]);\n\n let doubleTouch: any = undefined;\n\n doubleTouch = useDoubleTap((event) => {\n if ([\"touchBackward\", \"touchForward\"].includes(type)) {\n event.stopPropagation();\n if (type === \"touchBackward\" && setIsLeftBackward) {\n setIsLeftBackward(true);\n dispatch(setActiveElements(false));\n } else if (type === \"touchForward\" && setIsRightForward) {\n setIsRightForward(true);\n dispatch(setActiveElements(false));\n }\n clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => setHide(true), hideTime);\n }\n }, 200);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => {\n if (hide) {\n setHide(false);\n if (isRightForward && setIsRightForward) {\n setIsRightForward(false);\n if (mainPlayerVideoTag().duration - mainPlayerVideoTag().currentTime <= backwardForwardCountRef.current)\n handleBackwardForward(type, mainPlayerVideoTag().duration);\n else handleBackwardForward(type, backwardForwardCountRef.current);\n setBackwardForwardCount(initialJump);\n } else if (isLeftBackward && setIsLeftBackward) {\n setIsLeftBackward(false);\n if (mainPlayerVideoTag().currentTime <= backwardForwardCountRef.current) handleBackwardForward(type, 0);\n else handleBackwardForward(type, backwardForwardCountRef.current);\n setBackwardForwardCount(initialJump);\n }\n }\n }, [hide, type]);\n\n const handleTouchStart = (event: any) => {\n setBackwardForwardCount((prev) => prev + jump);\n if (conditions(ConditionName.isTouchScreenLandscape)) handleRippleCircle(event, type);\n clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => setHide(true), hideTime);\n };\n\n useKeyPress(\"ArrowRight\", (event: any) => {\n if (conditions(ConditionName.isPressKeyArrowRight) && type === \"forward\") {\n event.stopPropagation();\n setBackwardForwardCount((prev) => prev + jump);\n dispatch(setActiveElements(true));\n if (setIsRightForward) setIsRightForward(true);\n\n clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => setHide(true), hideTime);\n }\n });\n\n useKeyPress(\"ArrowLeft\", (event: any) => {\n if (conditions(ConditionName.isPressKeyArrowLeft) && type === \"backward\") {\n event.stopPropagation();\n setBackwardForwardCount((prev) => prev + jump);\n dispatch(setActiveElements(true));\n if (setIsLeftBackward) setIsLeftBackward(true);\n\n clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => setHide(true), hideTime);\n }\n });\n\n if (type)\n return (\n <div\n id={type}\n className={`pl-relative pl-flex pl-flex-col pl-justify-center ${conditions(ConditionName.isTouchScreen) ? \"pl-px-[24px]\" : \"pl-px-[48px]\"} ${\n isLeft.includes(type) ? \"pl-items-end\" : \"pl-items-start\"\n } pl-gap-2 pl-overflow-hidden`}\n style={{ width: videoElementSizeInfo.width, height: videoElementSizeInfo.width }}\n {...doubleTouch}\n >\n {(isRightForward || isLeftBackward) && (\n <div\n className={tw(`pl-rounded-full pl-flex pl-justify-center pl-items-center ${isLeft.includes(type) ? \"\" : \"pl-flex-row-reverse\"}`, {\n desktop: \"pl-gap-2\",\n desktopFullScreen: \"pl-gap-1\",\n touch: \"pl-gap-1\",\n touchFullScreen: \"pl-gap-1.5\",\n })}\n onTouchStart={conditions(ConditionName.isTouchScreen) ? handleTouchStart : undefined}\n >\n <p\n className={tw(`pl-text-center pl-text-white `, {\n desktop: \"pl-text-[16px] pl-font-extrabold pl-mt-0.5\",\n desktopFullScreen: \"pl-text-[32px] pl-font-bold\",\n touch: \"pl-text-base pl-font-extrabold pl-mt-0.5\",\n touchFullScreen: \"pl-text-[20px] pl-font-bold\",\n })}\n >\n {backwardForwardCount}\n {isLeft.includes(type) ? \" - \" : \" + \"}\n </p>\n <div className={`pl-flex pl-justify-center pl-items-center`}>\n <Image\n src={IMAGES.chevronLeft}\n width={styleMerge({ desktop: 20, desktopFullScreen: 40, touch: 16, touchFullScreen: 20 })}\n height={styleMerge({ desktop: 20, desktopFullScreen: 40, touch: 16, touchFullScreen: 20 })}\n alt=\"\"\n className={` pl-object-cover ${isLeft.includes(type) ? \"\" : \"pl-rotate-180\"}`}\n />\n\n {/* <Image\n alt=\"arrow-icon\"\n src={IMAGES.arrowLeft}\n className={`pl-shrink-0 ${isLeft.includes(type) && \"pl-rotate-180\"}`}\n width={conditions(ConditionName.isFullScreen) ? 22 : 12}\n height={conditions(ConditionName.isFullScreen) ? 22 : 12}\n />\n <Image\n alt=\"arrow-icon\"\n src={IMAGES.arrowLeft}\n className={`pl-shrink-0 ${isLeft.includes(type) && \"pl-rotate-180\"}`}\n width={conditions(ConditionName.isFullScreen) ? 22 : 12}\n height={conditions(ConditionName.isFullScreen) ? 22 : 12}\n />\n <Image\n alt=\"arrow-icon\"\n src={IMAGES.arrowLeft}\n className={`pl-shrink-0 ${isLeft.includes(type) && \"pl-rotate-180\"}`}\n width={conditions(ConditionName.isFullScreen) ? 22 : 12}\n height={conditions(ConditionName.isFullScreen) ? 22 : 12}\n /> */}\n </div>\n </div>\n )}\n </div>\n );\n};\n\nexport default BackwardForward;\n","\"use client\";\n\nimport { MouseEvent, useState } from \"react\";\nimport { shallowEqual } from \"react-redux\";\nimport Header from \"../header/header\";\nimport Main from \"../main/main\";\nimport Footer from \"../footer/footer\";\nimport VideoTag from \"../videoTag/videoTag\";\nimport { useAppDispatch, useAppSelector } from \"../../../helpers/redux/hooks\";\nimport { conditions } from \"../../../helpers/conditions/conditions\";\nimport { ConditionName, zIndex } from \"../../../helpers/interfaces/enums\";\nimport {\n firstUnMuteHandler,\n handleChangeSoundVolume,\n handleDoubleClick,\n handleFullScreen,\n handlePlayPause,\n} from \"../../../helpers/redux/actions/controller.actions\";\nimport useFullScreen from \"../../../helpers/hooks/useFullScreen\";\nimport useActiveInActive from \"../../../helpers/hooks/useActiveInActive\";\nimport dynamic from \"next/dynamic\";\nimport useHandleResize from \"../../../helpers/hooks/useHandleResize\";\nimport { setActiveElements } from \"../../../helpers/redux/slices/controllerSlice\";\nimport { styleMerge, tw } from \"../../../helpers/helpers\";\nimport SoundVolumeAlert from \"../soundVolumeAlert/SoundVolumeAlert\";\nimport CloseIcon from \"../../icon-components/closeIcon\";\nimport Settings from \"../settings/settings\";\nimport SubtitleIcon from \"../subtitles/subtitleIcon\";\n\n// const TouchVolumeBrightness = dynamic(() => import(\"../touchVolumeBrightness/touchVolumeBrightness\"));\nconst BackwardForward = dynamic(() => import(\"../backwardForward/backwardForward\"));\n\nconst VideoArea = () => {\n const [isRightForward, setIsRightForward] = useState<boolean>(false);\n const [isLeftBackward, setIsLeftBackward] = useState<boolean>(false);\n\n const dispatch = useAppDispatch();\n\n useAppSelector(\n ({ videoData: { details, params, videoElementSizeInfo } }) => ({\n details,\n params,\n videoElementSizeInfo,\n }),\n shallowEqual,\n );\n\n const { firstMute, firstPlay, activeElements } = useAppSelector(\n ({ controller: { firstPlay, isFullScreen, isLoading, canPlayVideo, firstMute, activeElements } }) => ({\n firstPlay,\n isFullScreen,\n isLoading,\n canPlayVideo,\n firstMute,\n activeElements,\n }),\n shallowEqual,\n );\n\n useFullScreen();\n useHandleResize();\n useActiveInActive(isRightForward, isLeftBackward);\n\n return (\n <div\n id=\"video-area\"\n style={{ zIndex: conditions(ConditionName.isFullScreen) ? zIndex.videoPlayerInFullScreen : \"unset\" }}\n onClick={(event) => {\n if (isRightForward || isLeftBackward) return;\n\n const popoverElement = document.getElementById(\"popover-content\");\n if (popoverElement) return;\n\n if (firstMute) {\n handleChangeSoundVolume(50);\n firstUnMuteHandler();\n return;\n }\n if (conditions(ConditionName.isTouchScreen)) dispatch(setActiveElements(!activeElements));\n else handlePlayPause(event);\n }}\n onDoubleClick={(event: MouseEvent<HTMLDivElement>) => handleDoubleClick(event)}\n className={tw(\n `pl-bg-contain pl-bg-center pl-w-full pl-relative pl-bg-no-repeat pl-h-full pl-max-h-screen pl-aspect-video pl-flex pl-items-center ${\n !conditions(ConditionName.isActiveElements) && \"pl-cursor-none\"\n }`,\n {\n desktop: \"pl-rounded-[12px] pl-overflow-hidden\",\n touchFullScreen: \"pl-fixed pl-w-screen dvh\",\n desktopFullScreen: \"pl-fixed pl-w-screen dvh\",\n },\n )}\n >\n {conditions(ConditionName.isTouchScreen) && (\n <div\n id=\"video-opacity\"\n style={{ zIndex: zIndex.videoOpacity }}\n className={`pl-absolute pl-bg-black/20 pl-size-full pl-aspect-video pl-transition-all pl-duration-500 ${\n conditions(ConditionName.isActiveElements) ? \"pl-opacity-100 pl-visible\" : \"pl-opacity-0 pl-invisible\"\n } `}\n />\n )}\n\n {conditions(ConditionName.showSoundVolumeAlert) && (\n <SoundVolumeAlert\n className={tw(\"\", { touch: \"pl-absolute pl-z-10 pl-top-[12px] pl-left-[16px]\", touchFullScreen: \"pl-top-[16px] pl-left-[24px]\" })}\n />\n )}\n\n {!firstPlay && conditions(ConditionName.isActiveElements) && (\n <div\n className={tw(\"pl-absolute pl-z-10 pl-flex pl-items-center pl-justify-center pl-gap-4\", {\n touch: \"pl-top-3 pl-right-4\",\n touchFullScreen: \"pl-top-5 pl-right-6\",\n })}\n >\n {conditions(ConditionName.isTouchScreen) && conditions(ConditionName.isFullScreen) && (\n <CloseIcon onClick={handleFullScreen} className=\"pl-text-white pl-size-[18px]\" />\n )}\n\n {conditions(ConditionName.showSettingIcon) && conditions(ConditionName.isTouchScreen) && (\n <Settings\n normalStyle\n width={styleMerge({ desktop: 16, desktopFullScreen: 24, touch: 20, touchFullScreen: 24 })}\n height={styleMerge({ desktop: 16, desktopFullScreen: 24, touch: 20, touchFullScreen: 24 })}\n />\n )}\n\n {conditions(ConditionName.isTouchScreen) && (\n <SubtitleIcon\n normalStyle\n width={styleMerge({ desktop: 16, desktopFullScreen: 24, touch: 20, touchFullScreen: 24 })}\n height={styleMerge({ desktop: 16, desktopFullScreen: 24, touch: 20, touchFullScreen: 24 })}\n />\n )}\n </div>\n )}\n\n {/* {conditions(ConditionName.showTouchVolumeBrightness) && <TouchVolumeBrightness />} */}\n {conditions(ConditionName.showBackwardForward) && (\n <div\n className={`pl-absolute pl-top-0 pl-right-0 pl-w-full pl-h-full pl-overflow-hidden pl-flex pl-items-center`}\n style={{\n zIndex: isLeftBackward || isRightForward ? zIndex.backwardForwardActive : zIndex.backwardForwardInActive,\n }}\n >\n <BackwardForward\n type={conditions(ConditionName.isTouchScreen) ? \"touchForward\" : \"forward\"}\n isRightForward={isRightForward}\n setIsRightForward={setIsRightForward}\n />\n\n <BackwardForward\n type={conditions(ConditionName.isTouchScreen) ? \"touchBackward\" : \"backward\"}\n isLeftBackward={isLeftBackward}\n setIsLeftBackward={setIsLeftBackward}\n />\n </div>\n )}\n <VideoTag />\n <div id=\"playerElements\" className={`pl-absolute pl-top-0 pl-right-0 pl-w-full pl-h-full`}>\n <div className={`pl-flex pl-flex-col pl-justify-between pl-w-full pl-h-full`}>\n {conditions(ConditionName.showHeader) && <Header />}\n {conditions(ConditionName.showMain) && <Main />}\n {conditions(ConditionName.showFooter) && <Footer />}\n </div>\n </div>\n </div>\n );\n};\n\nexport default VideoArea;\n","\"use client\";\n\nimport { conditions } from \"../../../helpers/conditions/conditions\";\nimport { ConditionName } from \"../../../helpers/interfaces/enums\";\nimport VideoArea from \"../../custom-components/videoArea/videoArea\";\n\nconst StaticPlayer = () => {\n return (\n <div\n className={`pl-w-full pl-aspect-video ${\n !conditions(ConditionName.isTouchScreen) &&\n !conditions(ConditionName.isFullScreen) &&\n \"!pl-rounded-[12px]\"\n }`}\n >\n <VideoArea />\n </div>\n );\n};\n\nexport default StaticPlayer;\n","import { useEffect } from \"react\";\nimport { conditions } from \"../../conditions/conditions\";\nimport { shallowEqual } from \"react-redux\";\nimport { useAppSelector } from \"../../redux/hooks\";\nimport { ConditionName } from \"../../interfaces/enums\";\nimport { getVodDetails } from \"../../redux/actions/videoData.actions\";\n\nconst useGetDetails = () => {\n const { params } = useAppSelector(({ videoData: { params } }) => ({ params }), shallowEqual);\n useAppSelector(({ controller: { isEnded } }) => ({ isEnded }), shallowEqual);\n\n useEffect(() => {\n if (conditions(ConditionName.getDetails)) getVodDetails();\n }, [params.id, params.type]);\n};\n\nexport default useGetDetails;\n","import useGetDetails from \"./useGetDetails\";\nimport useGetMarkers from \"./useGetMarkers\";\n\nconst useGetData = () => {\n useGetDetails();\n // useGetMarkers();\n};\n\nexport default useGetData;\n","\"use client\";\n\nimport Image from \"next/image\";\nimport IMAGES from \"../../../images/importImages\";\nimport { useEffect } from \"react\";\nimport { useAppDispatch } from \"../../../helpers/redux/hooks\";\nimport { setIsLoading } from \"../../../helpers/redux/slices/controllerSlice\";\n\nconst NotActive = () => {\n const dispatch = useAppDispatch();\n\n useEffect(() => {\n dispatch(setIsLoading(false));\n }, [dispatch]);\n\n return (\n <div className={`pl-w-full pl-h-full pl-rounded-2xl pl-flex pl-flex-col pl-justify-center pl-select-none pl-pointer-events-none pl-items-center`}>\n <div className=\"pl-flex pl-justify-center\">\n <Image src={IMAGES.notFound} alt=\"\" width={120} height={70} />\n </div>\n <h1 className=\"pl-text-[12px] pl-font-medium pl-text-white pl-mt-4 pl-mb-2\">ویدیویی برای نمایش وجود نداره</h1>\n <p className=\"pl-text-[12px] pl-font-medium pl-text-white\">می‌تونید ویدیوهای مشابه با اون رو مشاهده کنید.</p>\n </div>\n );\n};\n\nexport default NotActive;\n","\"use client\";\n\nimport { shallowEqual } from \"react-redux\";\nimport { useAppSelector } from \"../../../helpers/redux/hooks\";\nimport useGetData from \"../../../helpers/hooks/useGetData/useGetData\";\nimport { conditions } from \"../../../helpers/conditions/conditions\";\nimport { ConditionName } from \"../../../helpers/interfaces/enums\";\nimport { handleApplyContinuousPlayback } from \"../../../helpers/redux/actions/user.actions\";\nimport dynamic from \"next/dynamic\";\nimport { useEffect } from \"react\";\n\nconst VideoArea = dynamic(() => import(\"../../custom-components/videoArea/videoArea\"));\nconst NotActive = dynamic(() => import(\"../../custom-components/notActive/notActive\"));\n\nconst VodPlayer = () => {\n useAppSelector(\n ({ videoData: { params, details, isFetchDetails, isValidAddress } }) => ({ params, details, isFetchDetails, isValidAddress }),\n shallowEqual,\n );\n\n useGetData();\n\n useEffect(() => {\n handleApplyContinuousPlayback();\n }, []);\n\n if (conditions(ConditionName.isFetchDetails))\n return (\n <>\n {conditions(ConditionName.isValidAddress) ? (\n <div\n className={`pl-max-h-[100dvh] pl-bg-dark-1 ${\n !conditions(ConditionName.isTouchScreen) && !conditions(ConditionName.isFullScreen) && \"!pl-rounded-[12px]\"\n }`}\n >\n <VideoArea />\n </div>\n ) : (\n <div className={`pl-w-full pl-aspect-video`}>\n <NotActive />\n </div>\n )}\n </>\n );\n};\n\nexport default VodPlayer;\n","import { conditions } from \"../../../helpers/conditions/conditions\";\nimport { ConditionName } from \"../../../helpers/interfaces/enums\";\n\nconst Skeleton = () => {\n return (\n <div\n role=\"status\"\n className={`pl-size-full pl-flex pl-items-center pl-justify-center pl-bg-gray-300 ${\n !conditions(ConditionName.isTouchScreen) && \"pl-rounded-lg\"\n } pl-animate-pulse dark:pl-bg-gray-700`}\n >\n <span className=\"pl-sr-only\">Loading...</span>\n </div>\n );\n};\n\nexport default Skeleton;\n","import { shallowEqual } from \"react-redux\";\nimport { useAppSelector } from \"../../../helpers/redux/hooks\";\nimport Skeleton from \"../../custom-components/skeleton/Skeleton\";\nimport FullScreen from \"../../custom-components/fullScreen/fullScreen\";\nimport SoundVolume from \"../../custom-components/soundVolume/soundVolume\";\nimport { secondsToHMS } from \"../../../helpers/helpers\";\nimport { conditions } from \"../../../helpers/conditions/conditions\";\nimport { ConditionName } from \"../../../helpers/interfaces/enums\";\nimport { buildStyles, CircularProgressbarWithChildren } from \"react-circular-progressbar\";\nimport IMAGES from \"../../../images/importImages\";\nimport Image from \"next/image\";\nimport useFullScreen from \"../../../helpers/hooks/useFullScreen\";\n\nconst VideoHighLighter = () => {\n const { params } = useAppSelector(({ videoData: { params } }) => ({ params }), shallowEqual);\n useFullScreen();\n\n return (\n <div\n id=\"video-area\"\n className={`pl-relative pl-rounded-[12px] pl-w-full pl-h-full pl-aspect-video !pl-overflow-hidden ${\n conditions(ConditionName.isTouchScreen) && \"!pl-rounded-none\"\n } ${conditions(ConditionName.isFullScreen) && \"!pl-overflow-hidden pl-fixed pl-top-0 pl-right-0 !pl-w-screen !pl-h-screen !pl-rounded-none\"}`}\n >\n {params.vhl_status && params.vhl_status !== \"skeleton\" && (\n <div className=\"pl-flex pl-flex-col pl-justify-between pl-gap-2 pl-size-full\">\n {params.banner && (\n <div className=\"pl-w-full pl-aspect-video pl-absolute\">\n <Image src={params.banner} alt=\"banner\" fill style={{ objectFit: \"cover\" }} className=\"pl-w-full pl-aspect-video\" />\n <div className=\"pl-absolute pl-inset-0 pl-bg-black/50\" />\n </div>\n )}\n <div />\n {params.vhl_status === \"download_start\" && (\n <>\n <div className=\"pl-relative pl-z-[1000000] pl-bg-Common-white-overlay-1 pl-w-full pl-max-w-[198px] tablet:!pl-max-w-[305px] desktop:!pl-max-w-[198px] pl-mx-auto pl-py-2 tablet:pl-py-[12.32px] desktop:pl-py-2 pl-rounded-[8px] pl-flex pl-flex-col pl-items-center pl-gap-2 tablet:pl-gap-[12.32px] desktop:pl-gap-2\">\n <svg style={{ height: 0, position: \"absolute\" }}>\n <defs>\n <linearGradient id=\"gradientColor\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"1\">\n <stop offset=\"0%\" stopColor=\"#FF649D\" />\n <stop offset=\"100%\" stopColor=\"#A50C4B\" />\n </linearGradient>\n </defs>\n </svg>\n <CircularProgressbarWithChildren\n value={params.vhl_progress!}\n className=\"pl-size-[50px]\"\n styles={buildStyles({\n trailColor: \"rgba(0, 0, 0, 0.1)\",\n pathColor: \"url(#gradientColor)\",\n })}\n >\n <p className=\"pl-text-text-primary pl-text-[14px] pl-font-medium\">%{params.vhl_progress}</p>\n </CircularProgressbarWithChildren>\n <p className=\"pl-text-text-primary pl-text-[10px] pl-font-normal\">{params.vhl_statusText}</p>\n </div>\n </>\n )}\n {params.vhl_status === \"download_error\" && (\n <div className=\"pl-relative pl-z-[1000000] pl-bg-Common-white-overlay-1 pl-w-full pl-max-w-[198px] pl-mx-auto pl-py-2 pl-rounded-[8px] pl-flex pl-flex-col pl-items-center pl-gap-2\">\n <Image alt=\"info-circle-icon\" src={IMAGES.infoCircle} width={32} height={32} />\n <p className=\"pl-text-[10px] pl-font-normal pl-text-text-primary\">{params.vhl_statusText}</p>\n <button className=\"pl-flex pl-items-center pl-gap-2\" onClick={() => params.vhl_onRetry!()}>\n <Image alt=\"rotate-red-icon\" src={IMAGES.rotateRed} width={14} height={14} />\n <span className=\"pl-text-primary pl-text-[10px] pl-font-normal\">تلاش دوباره</span>\n </button>\n </div>\n )}\n <div\n className={`pl-flex ${\n !conditions(ConditionName.isTouchScreenPortrait)\n ? `pl-flex-col-reverse pl-mb-3 ${conditions(ConditionName.isFullScreen) && \"pl-mb-8\"}`\n : \"pl-flex-col\"\n } pl-gap-[14.58px]`}\n >\n <div className={`pl-flex pl-items-center pl-justify-between ${conditions(ConditionName.isFullScreen) ? \"pl-mx-8\" : \"pl-mx-[14.58px]\"}`}>\n <FullScreen width={20} height={20} />\n <div className={`pl-flex pl-items-center pl-gap-[14.58px]`}>\n {params.vhl_duration && (\n <div className=\"pl-text-Common-white pl-text-[10.93px] pl-font-normal pl-relative\">\n <span>{secondsToHMS(0)}</span>\n <span>/</span>\n <span>{secondsToHMS(params.vhl_duration)}</span>\n </div>\n )}\n <SoundVolume width={20} height={20} />\n </div>\n </div>\n <div className=\"pl-w-full pl-h-[3.64px] pl-bg-gray-highLight pl-animate-pulse\" />\n </div>\n </div>\n )}\n {params.vhl_status === \"skeleton\" && <Skeleton />}\n </div>\n );\n};\n\nexport default VideoHighLighter;\n","export { VideoPlayerLibrary } from \"./videoPlayerLibrary\";\nexport { MiniPlayerLibrary } from \"./miniPlayerLibrary\";\n","\"use client\";\n\nimport { Provider } from \"react-redux\";\nimport { IParams } from \"./helpers/interfaces/interfaces\";\nimport store from \"./helpers/redux/store\";\nimport VideoPlayer from \"./components/videoPlayer/videoPlayer\";\nimport ErrorBoundary from \"./helpers/errorBoundary/errorBoundary\";\nimport { conditions } from \"./helpers/conditions/conditions\";\nimport { ConditionName } from \"./helpers/interfaces/enums\";\n\nexport const VideoPlayerLibrary = ({ params }: { params: IParams }) => {\n return (\n <Provider store={store}>\n <ErrorBoundary>\n <div\n id=\"video-player-container\"\n className={`${\n !conditions(ConditionName.isTouchScreen) && \"pl-overflow-hidden\"\n }`}\n >\n <VideoPlayer params={params} />\n </div>\n </ErrorBoundary>\n </Provider>\n );\n};\n","\"use client\";\n\nimport { conditions } from \"../../helpers/conditions/conditions\";\nimport useHandleParams from \"../../helpers/hooks/useHandleParams\";\nimport { ConditionName, zIndex } from \"../../helpers/interfaces/enums\";\nimport { IParams } from \"../../helpers/interfaces/interfaces\";\nimport { useAppDispatch, useAppSelector } from \"../../helpers/redux/hooks\";\nimport { shallowEqual } from \"react-redux\";\nimport dynamic from \"next/dynamic\";\nimport useHandleKeyPress from \"../../helpers/hooks/useHandleKeyPress\";\nimport { useEffect } from \"react\";\nimport { clearRedux, tw } from \"../../helpers/helpers\";\nimport Loader from \"../custom-components/loader/loader\";\nimport { setHiddenAd } from \"../../helpers/redux/slices/videoDataSlice\";\nimport Advertisement from \"../custom-components/advertisement/Advertisement\";\n\nconst StaticPlayer = dynamic(() => import(\"./staticPlayer/staticPlayer\"));\nconst VodPlayer = dynamic(() => import(\"./vodPlayer/vodPlayer\"));\nconst VideoHighLighter = dynamic(() => import(\"./videoHighLighter/VideoHighLighter\"));\n\ninterface IProps {\n params: IParams;\n}\n\nconst VideoPlayer = (props: IProps) => {\n const dispatch = useAppDispatch();\n const { params, isLoading, firstPlay } = useAppSelector(\n ({ videoData: { isReady, params, hiddenAd }, controller: { isLoading, firstPlay } }) => ({ isReady, params, hiddenAd, isLoading, firstPlay }),\n shallowEqual,\n );\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => {\n if (params.id && props.params.id !== params.id) {\n // if (params.type === PlayerTypes.static) {\n // mainPlayerVideoTag()?.pause();\n // mainPlayerVideoTag().removeAttribute(\"src\");\n // mainPlayerVideoTag().load();\n // }\n clearRedux();\n }\n return () => {\n clearRedux();\n };\n }, [props.params.id]);\n\n useHandleParams(props.params);\n useHandleKeyPress();\n useAppSelector(({ controller: { isFullScreen } }) => ({ isFullScreen }), shallowEqual);\n\n if (props.params.vhl_status) return <VideoHighLighter />;\n if (conditions(ConditionName.hasAdvertisement))\n return (\n <Advertisement\n src={params.advertisement?.videoUrl!}\n onSkipAd={(currentTime) => {\n dispatch(setHiddenAd(true));\n if (params.advertisement?.onSkipAd) params.advertisement.onSkipAd(currentTime);\n }}\n onEndAd={(currentTime) => {\n dispatch(setHiddenAd(true));\n if (params.advertisement?.onEndAd) params.advertisement.onEndAd(currentTime);\n }}\n skipDelay={params.advertisement?.skipDelay}\n adText={params.advertisement?.adText}\n onClickAd={params.advertisement?.onClickAd}\n />\n );\n\n let element = <></>;\n if (conditions(ConditionName.isReady)) {\n element = (\n <div className={tw(\"\", { desktop: \"pl-rounded-[12px]\" })} style={{ touchAction: \"pan-y\", userSelect: \"none\" }}>\n {conditions(ConditionName.isStaticFormat) ? <StaticPlayer /> : <VodPlayer />}\n </div>\n );\n }\n\n const isShowLoader = firstPlay && isLoading;\n\n console.log(firstPlay, isLoading);\n\n return (\n <div\n dir=\"rtl\"\n style={{ zIndex: zIndex.videoPlayerInFullScreen }}\n id=\"parent-player\"\n className={tw(`pl-relative pl-bg-black pl-w-full pl-h-full pl-aspect-video`, {\n desktop: \"pl-rounded-[12px]\",\n touch: \"\",\n desktopFullScreen: \"pl-overflow-hidden pl-fixed pl-top-0 pl-right-0 pl-w-screen pl-h-screen pl-rounded-none\",\n touchFullScreen: \"pl-overflow-hidden pl-fixed pl-top-0 pl-right-0 pl-w-screen pl-h-screen\",\n })}\n >\n {isShowLoader && (\n <div className={tw(\"pl-absolute pl-w-full pl-h-full pl-aspect-video\", { desktop: \"pl-rounded-[12px]\" })}>\n <Loader />\n </div>\n )}\n {element}\n </div>\n );\n};\n\nexport default VideoPlayer;\n","\"use client\";\n\nimport { useEffect } from \"react\";\nimport { getUUID } from \"../helpers\";\nimport { useAppDispatch } from \"../redux/hooks\";\nimport { IParams } from \"../interfaces/interfaces\";\nimport {\n setIsReady,\n setPlayerParams,\n setRawSubtitles,\n} from \"../redux/slices/videoDataSlice\";\nimport { PlayerTypes } from \"../interfaces/enums\";\nimport { filterValidSubtitles } from \"../redux/actions/videoData.actions\";\n\nconst useHandleParams = (query: any) => {\n const dispatch = useAppDispatch();\n\n let queryParams: IParams = {};\n\n const handleSetParamsInRedux = () => {\n dispatch(setPlayerParams(queryParams));\n dispatch(setIsReady(true));\n };\n\n const handleAddUUID = () => {\n if (!!query.uuid) {\n localStorage.setItem(\"hamrahiUUID\", query.uuid!);\n queryParams.uuid = query.uuid;\n }\n };\n\n const handleVodParams = () => {\n queryParams = {\n provider: \"cafevdo\",\n ...query,\n subtitles: undefined,\n };\n };\n\n const handleStaticParams = async () => {\n queryParams = {\n uuid: getUUID(),\n provider: \"cafevdo\",\n ...query,\n subtitles: undefined,\n id: query.id ? window.atob(query.id) : undefined,\n banner:\n query.banner && query.banner !== \"undefined\" ? query.banner : undefined,\n };\n };\n\n const handleSubtitles = async () => {\n const validSubtitles = await filterValidSubtitles(query.subtitles);\n dispatch(setRawSubtitles(validSubtitles));\n };\n\n const handleParams = async () => {\n queryParams = {};\n if (Object.keys(query).includes(\"type\")) {\n if (String(query.type) === PlayerTypes.vod) handleVodParams();\n else if (String(query.type) === PlayerTypes.static) handleStaticParams();\n if (query.subtitles && query.subtitles.length) handleSubtitles();\n handleAddUUID();\n handleSetParamsInRedux();\n }\n };\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => {\n handleParams();\n }, [query]);\n};\n\nexport default useHandleParams;\n","import { conditions } from \"../conditions/conditions\";\nimport { ConditionName } from \"../interfaces/enums\";\nimport { handleBackwardForward, handleChangeSoundVolume, handleFullScreen, handlePlayPause } from \"../redux/actions/controller.actions\";\nimport store from \"../redux/store\";\nimport useKeyPress from \"./useKeyPress\";\n\nconst useHandleKeyPress = () => {\n useKeyPress(\"Space\", (event: any) => {\n if (conditions(ConditionName.isPressKeySpace) && !conditions(ConditionName.isFirstMutePlay)) handlePlayPause(event);\n });\n useKeyPress(\"KeyK\", (event: any) => {\n if (conditions(ConditionName.isPressKeySpace) && !conditions(ConditionName.isFirstMutePlay)) handlePlayPause(event);\n });\n // useKeyPress(\"ArrowRight\", (event: any) => {\n // if (conditions(ConditionName.isPressKeyArrowRight)) handleBackwardForward(\"forward\", 15, event);\n // });\n // useKeyPress(\"ArrowLeft\", (event: any) => {\n // if (conditions(ConditionName.isPressKeyArrowLeft)) handleBackwardForward(\"backward\", 15, event);\n // });\n // useKeyPress(\"KeyI\", () => {\n // if (conditions(ConditionName.isPressKeyI)) mainPlayerVideoTag().requestPictureInPicture();\n // });\n useKeyPress(\"KeyF\", () => {\n if (conditions(ConditionName.isPressKeyF)) handleFullScreen();\n });\n useKeyPress(\"KeyM\", () => {\n if (conditions(ConditionName.isPressKeyM)) {\n const { settings } = store.getState().user;\n handleChangeSoundVolume(settings.volume ? 0 : 50);\n }\n });\n // useKeyPress(\"KeyC\", () => {\n // if (conditions(ConditionName.isPressKeyC)) handleSubtitle();\n // });\n};\n\nexport default useHandleKeyPress;\n","\"use client\";\n\nimport { useRef, useState, useEffect } from \"react\";\nimport { conditions } from \"../../../helpers/conditions/conditions\";\nimport { ConditionName } from \"../../../helpers/interfaces/enums\";\nimport SoundVolume from \"../soundVolume/soundVolume\";\nimport FullScreen from \"../fullScreen/fullScreen\";\nimport PlayPause from \"../playPause/playPause\";\nimport { mainPlayerVideoTag } from \"../../../helpers/constants\";\nimport { useAppDispatch, useAppSelector } from \"../../../helpers/redux/hooks\";\nimport {\n firstUnMuteHandler,\n handleChangeSoundVolume,\n handleFullScreen,\n handleLockOrientation,\n} from \"../../../helpers/redux/actions/controller.actions\";\nimport { setPlay } from \"../../../helpers/redux/slices/controllerSlice\";\nimport IMAGES from \"../../../images/importImages\";\nimport useKeyPress from \"../../../helpers/hooks/useKeyPress\";\nimport store from \"../../../helpers/redux/store\";\nimport SoundVolumeAlert from \"../soundVolumeAlert/SoundVolumeAlert\";\nimport { setupAutoplayBehavior, styleMerge, tw } from \"../../../helpers/helpers\";\nimport { shallowEqual } from \"react-redux\";\nimport Image from \"next/image\";\n\ninterface AdvertisementProps {\n src: string;\n onEndAd?: (currentTime: number) => void;\n onSkipAd?: (currentTime: number) => void;\n skipDelay?: number;\n adText?: string;\n onClickAd?: (currentTime: number) => void;\n}\n\nconst Advertisement: React.FC<AdvertisementProps> = ({ src, onEndAd, onSkipAd, skipDelay, adText = \"اطلاعات بیشتر\", onClickAd }) => {\n const dispatch = useAppDispatch();\n const containerRef = useRef<HTMLDivElement | null>(null);\n\n const { firstMute } = useAppSelector(({ controller: { firstMute } }) => ({ firstMute }), shallowEqual);\n\n const [progress, setProgress] = useState(0);\n const [buffered, setBuffered] = useState(0);\n\n const hasSkip = skipDelay !== undefined && skipDelay > 0;\n const [skipCounter, setSkipCounter] = useState<number | null>(hasSkip ? skipDelay! : null);\n const [isCounting, setIsCounting] = useState(false);\n\n const [currentTime, setCurrentTime] = useState(0);\n const [duration, setDuration] = useState(0);\n\n const [showControls, setShowControls] = useState(true);\n const hideControlsTimeout = useRef<NodeJS.Timeout | null>(null);\n\n const [isPaused, setIsPaused] = useState(false);\n const [reveresElapsedTime, setReveresElapsedTime] = useState(false);\n\n const resetHideControlsTimer = (delay = 3000) => {\n if (isPaused) {\n setShowControls(true);\n return;\n }\n\n setShowControls(true);\n if (hideControlsTimeout.current) clearTimeout(hideControlsTimeout.current);\n hideControlsTimeout.current = setTimeout(() => {\n setShowControls(false);\n }, delay);\n };\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => {\n const videoContainer = containerRef.current;\n if (!videoContainer) return;\n\n const mouseMoveHandler = () => resetHideControlsTimer();\n const touchStartHandler = () => resetHideControlsTimer();\n\n videoContainer.addEventListener(\"mousemove\", mouseMoveHandler);\n videoContainer.addEventListener(\"touchstart\", touchStartHandler);\n\n resetHideControlsTimer();\n\n return () => {\n videoContainer.removeEventListener(\"mousemove\", mouseMoveHandler);\n videoContainer.removeEventListener(\"touchstart\", touchStartHandler);\n if (hideControlsTimeout.current) clearTimeout(hideControlsTimeout.current);\n };\n }, [isPaused]);\n\n useEffect(() => {\n if (!hasSkip || !isCounting) return;\n\n const interval = setInterval(() => {\n setSkipCounter((prev) => {\n if (prev === null) return prev;\n if (prev <= 1) {\n clearInterval(interval);\n return 0;\n }\n return prev - 1;\n });\n }, 1000);\n\n return () => clearInterval(interval);\n }, [isCounting, hasSkip]);\n\n useEffect(() => {\n const video = mainPlayerVideoTag();\n if (!video) return;\n\n const handlePlay = () => {\n setIsCounting(true);\n setIsPaused(false);\n resetHideControlsTimer(1000);\n };\n\n const handlePlaying = () => {\n setIsCounting(true);\n setIsPaused(false);\n };\n\n const handlePause = () => {\n setIsCounting(false);\n setIsPaused(true);\n setShowControls(true);\n if (hideControlsTimeout.current) clearTimeout(hideControlsTimeout.current);\n };\n\n const handleWaiting = () => setIsCounting(false);\n const handleError = () => setIsCounting(false);\n const handleLoadedMetadata = () => setDuration(video.duration);\n\n video.addEventListener(\"play\", handlePlay);\n video.addEventListener(\"playing\", handlePlaying);\n video.addEventListener(\"pause\", handlePause);\n video.addEventListener(\"waiting\", handleWaiting);\n video.addEventListener(\"error\", handleError);\n video.addEventListener(\"loadedmetadata\", handleLoadedMetadata);\n\n setupAutoplayBehavior(video);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return () => {\n video.removeEventListener(\"play\", handlePlay);\n video.removeEventListener(\"playing\", handlePlaying);\n video.removeEventListener(\"pause\", handlePause);\n video.removeEventListener(\"waiting\", handleWaiting);\n video.removeEventListener(\"error\", handleError);\n video.removeEventListener(\"loadedmetadata\", handleLoadedMetadata);\n };\n }, [src]);\n\n const handleTimeUpdate = () => {\n const video = mainPlayerVideoTag();\n if (video?.duration) {\n setProgress((video.currentTime / video.duration) * 100);\n setCurrentTime(video.currentTime);\n }\n };\n\n const handleProgress = () => {\n const video = mainPlayerVideoTag();\n if (video?.duration && video.buffered.length > 0) {\n setBuffered((video.buffered.end(video.buffered.length - 1) / video.duration) * 100);\n }\n };\n\n const handleClick = (e: React.MouseEvent<HTMLDivElement>) => {\n const video = mainPlayerVideoTag();\n if (!video) return;\n\n if (conditions(ConditionName.isTouchScreen)) {\n if (e.target === containerRef.current || e.target === video) {\n if (firstMute) {\n handleChangeSoundVolume(50);\n firstUnMuteHandler();\n return;\n }\n }\n resetHideControlsTimer();\n return;\n }\n\n if (e.target === containerRef.current || e.target === video) {\n if (firstMute) {\n handleChangeSoundVolume(50);\n firstUnMuteHandler();\n return;\n }\n\n if (video.paused) {\n video.play();\n dispatch(setPlay(true));\n } else {\n video.pause();\n dispatch(setPlay(false));\n }\n }\n };\n\n const handleAdClick = () => {\n if (onClickAd) {\n onClickAd(currentTime);\n }\n };\n\n const formatTime = (time: number) => {\n const minutes = Math.floor(time / 60)\n .toString()\n .padStart(2, \"0\");\n const seconds = Math.floor(time % 60)\n .toString()\n .padStart(2, \"0\");\n return `${minutes}:${seconds}`;\n };\n\n // useHandleKeyPress\n useKeyPress(\"Space\", () => {\n setIsPaused((prev) => !prev);\n });\n useKeyPress(\"KeyK\", () => {\n setIsPaused((prev) => !prev);\n });\n useKeyPress(\"KeyF\", () => {\n handleFullScreen();\n });\n useKeyPress(\"KeyM\", () => {\n const { settings } = store.getState().user;\n handleChangeSoundVolume(settings.volume ? 0 : 50);\n });\n\n return (\n <div\n id=\"video-area\"\n ref={containerRef}\n onClick={handleClick}\n onDoubleClick={() => {\n handleFullScreen();\n handleLockOrientation();\n }}\n className={tw(\n \"pl-relative pl-bg-black pl-overflow-hidden pl-w-full pl-h-full pl-max-h-screen pl-aspect-video pl-flex pl-flex-col pl-justify-end\",\n { desktop: \"pl-rounded-[12px]\", desktopFullScreen: \"pl-fixed pl-w-screen pl-h-screen pl-top-0 pl-right-0 pl-rounded-none\" },\n )}\n style={{\n width: conditions(ConditionName.isFullScreen) ? \"100vw\" : \"auto\",\n zIndex: conditions(ConditionName.isFullScreen) ? 100000 : \"unset\",\n height: conditions(ConditionName.isFullScreen) ? \"100vh\" : \"auto\",\n }}\n >\n <div\n className=\"pl-absolute pl-top-0 pl-z-10 pl-h-[46px] pl-w-full pl-px-4 pl-flex pl-items-center pl-justify-between\"\n style={{ backgroundImage: \"linear-gradient(180deg, rgba(0,0,0,0.25) 0%, rgba(0,0,0,0) 100%)\" }}\n >\n {onClickAd && conditions(ConditionName.isTouchScreen) && (\n <button\n onClick={handleAdClick}\n className={tw(\"pl-flex pl-items-center pl-justify-center pl-gap-[5px]\", {\n touch: \"h-[50px]\",\n touchFullScreen: \"\",\n })}\n >\n <Image src={IMAGES.export} alt=\"export button\" width={16} height={16} />\n <span\n className={tw(\"\", {\n touch: \"pl-text-white pl-text-[11px] pl-font-medium\",\n touchFullScreen: \"\",\n })}\n >\n {adText}\n </span>\n </button>\n )}\n\n {conditions(ConditionName.showSoundVolumeAlert) && <SoundVolumeAlert />}\n </div>\n\n <video\n src={src}\n autoPlay\n playsInline\n className=\"pl-absolute pl-size-full\"\n onEnded={() => onEndAd && onEndAd(currentTime)}\n onTimeUpdate={handleTimeUpdate}\n onProgress={handleProgress}\n id=\"player-tag\"\n />\n\n <div\n style={{\n backgroundBlendMode: \"multiply\",\n backgroundSize: \"cover\",\n backgroundPosition: \"center\",\n }}\n className={`pl-relative pl-rounded-b-[12px] pl-z-10 pl-flex pl-flex-col ${\n conditions(ConditionName.isTouchScreenPortrait) && \"pl-flex-col-reverse\"\n } ${conditions(ConditionName.isFullScreen) ? \"pl-gap-3\" : \"pl-gap-1.5\"} pl-transition-opacity pl-duration-500 pl-ease-in-out ${\n showControls ? \"pl-opacity-100\" : \"pl-opacity-0 pl-pointer-events-none\"\n }`}\n >\n {conditions(ConditionName.isTouchScreen) && (\n <div className=\"pl-absolute pl-font-bold pl-text-[12px] pl-h-[14px] pl-gap-1.5 pl-left-[14px] pl-bottom-[14px] pl-flex pl-items-center pl-justify-center pl-w-fit pl-text-white\">\n <p className=\"pl-leading-[100%]\">{formatTime(currentTime)}</p>\n <Image src={IMAGES.info} alt=\"\" width={12} height={12} />\n <p className=\"pl-leading-[100%]\">تبلیغات</p>\n </div>\n )}\n\n <ProgressBar progress={progress} buffered={buffered} />\n\n {!conditions(ConditionName.isTouchScreen) && (\n <div\n className={`pl-flex pl-justify-between pl-items-center pl-gap-3 pl-px-4 ${\n conditions(ConditionName.isFullScreen) ? \"pl-pb-3\" : \"pl-pb-1.5\"\n }`}\n >\n <div\n className={tw(`pl-rounded-full pl-flex pl-items-center pl-justify-center pl-bg-black/75`, {\n desktop: \"pl-p-1\",\n desktopFullScreen: \"pl-p-1.5\",\n })}\n >\n <FullScreen width={conditions(ConditionName.isFullScreen) ? 24 : 16} height={conditions(ConditionName.isFullScreen) ? 24 : 16} />\n </div>\n\n <div className=\"pl-flex pl-items-center pl-gap-4\">\n <div\n onClick={() => setReveresElapsedTime((prev) => !prev)}\n className={tw(\n `pl-cursor-pointer pl-rounded-full pl-inline-flex pl-items-center pl-py-1 pl-px-1.5 pl-justify-center pl-group pl-bg-black/75`,\n { desktop: \"pl-min-w-[34px] pl-h-[34px]\", desktopFullScreen: \"pl-min-w-[48px] pl-h-[48px]\" },\n )}\n >\n <div\n className={tw(\n \" pl-flex pl-gap-0.5 pl-items-center pl-justify-center pl-rounded-full group-hover:pl-bg-[#5E5E5E] pl-transition-all\",\n { desktop: \"pl-h-[26px] pl-min-w-[26px] pl-px-1.5\", desktopFullScreen: \"pl-h-[36px] pl-min-w-[36px] pl-px-3\" },\n )}\n >\n <p\n className={`pl-text-white pl-flex pl-items-center pl-justify-center pl-gap-0.5 ${\n conditions(ConditionName.isFullScreen) ? \"pl-text-base\" : \"pl-text-[12px] pl-leading-5\"\n } pl-font-bold`}\n >\n <span>{formatTime(duration)}</span>\n <span>/</span>\n {reveresElapsedTime ? (\n <>\n <span>{formatTime(duration - currentTime)}</span>\n <span className=\"pl-mt-0.5\">-</span>\n </>\n ) : (\n <span>{formatTime(currentTime)}</span>\n )}\n </p>\n </div>\n </div>\n\n <SoundVolume width={conditions(ConditionName.isFullScreen) ? 24 : 16} height={conditions(ConditionName.isFullScreen) ? 24 : 16} />\n <PlayPause width={conditions(ConditionName.isFullScreen) ? 24 : 16} height={conditions(ConditionName.isFullScreen) ? 24 : 16} />\n </div>\n </div>\n )}\n </div>\n\n {onClickAd && !conditions(ConditionName.isTouchScreen) && (\n <button\n onClick={handleAdClick}\n className={tw(\"pl-left-[24px] pl-flex pl-items-center pl-rounded-[28px] pl-transition-colors pl-bg-[#212121]/[0.6] pl-absolute\", {\n desktopFullScreen: \"pl-bottom-[131px] pl-h-[56px] pl-px-5 pl-gap-2.5\",\n desktop: \"pl-bottom-[76px] pl-h-10 pl-px-3 pl-gap-1\",\n })}\n >\n <Image\n src={IMAGES.export}\n alt=\"export button\"\n width={styleMerge({ desktop: 16, desktopFullScreen: 32, touch: 20, touchFullScreen: 24 })}\n height={styleMerge({ desktop: 16, desktopFullScreen: 32, touch: 20, touchFullScreen: 24 })}\n />\n <span\n className={tw(\"pl-font-medium pl-text-white pl-leading-4\", {\n desktopFullScreen: \"pl-text-base\",\n desktop: \"pl-text-[13px]\",\n })}\n >\n {adText}\n </span>\n </button>\n )}\n\n {hasSkip && (\n <>\n {!conditions(ConditionName.isTouchScreen) ? (\n <button\n onClick={() => onSkipAd && onSkipAd(currentTime)}\n disabled={!!skipCounter && skipCounter > 0}\n className={tw(\"pl-right-[24px] pl-flex pl-items-center pl-rounded-[28px] pl-transition-colors pl-bg-[#212121]/[0.6] pl-absolute\", {\n desktopFullScreen: \"pl-bottom-[131px] pl-h-[56px] pl-px-5 pl-gap-2.5\",\n desktop: \"pl-bottom-[76px] pl-h-10 pl-px-3 pl-gap-1\",\n })}\n >\n <Image\n src={IMAGES.next}\n alt=\"next button\"\n width={styleMerge({ desktop: 16, desktopFullScreen: 32 })}\n height={styleMerge({ desktop: 16, desktopFullScreen: 32 })}\n />\n\n <span\n className={tw(\"pl-font-medium pl-text-white pl-leading-4\", {\n desktopFullScreen: \"pl-text-base\",\n desktop: \"pl-text-[13px]\",\n })}\n >\n {skipCounter && skipCounter > 0 ? `رد کردن (${skipCounter})` : \"رد کردن\"}\n </span>\n </button>\n ) : (\n <button\n onClick={() => onSkipAd && onSkipAd(currentTime)}\n disabled={!!skipCounter && skipCounter > 0}\n className={tw(\n `pl-absolute pl-px-2 pl-rounded-[28px] pl-bg-black/60 pl-bottom-8 pl-right-4 pl-flex pl-items-center pl-justify-center pl-h-8 pl-gap-1 ${\n !!skipCounter && skipCounter > 0 ? \"pl-invisible\" : \"\"\n }`,\n {\n touchFullScreen: \"\",\n touch: \"\",\n },\n )}\n >\n <Image\n src={IMAGES.next}\n alt=\"next button\"\n width={styleMerge({ touch: 20, touchFullScreen: 20 })}\n height={styleMerge({ touch: 20, touchFullScreen: 20 })}\n />\n\n <span\n className={tw(\"pl-text-[11px] pl-font-medium pl-text-white\", {\n touchFullScreen: \"\",\n touch: \"\",\n })}\n >\n رد کردن\n </span>\n </button>\n )}\n </>\n )}\n </div>\n );\n};\n\nexport default Advertisement;\n\ntype ProgressBarProps = { progress: number; buffered: number };\n\nconst ProgressBar: React.FC<ProgressBarProps> = ({ progress, buffered }) => (\n <div className={tw(\"pl-w-full\", { desktop: \"pl-px-4\" })}>\n <div\n className={tw(\"pl-relative pl-overflow-hidden pl-w-full pl-bg-[#4A4A4A]\", {\n touch: \"pl-h-[3px]\",\n desktop: \"pl-h-[3px] pl-rounded-[8px]\",\n desktopFullScreen: \"pl-h-[6px]\",\n touchFullScreen: \"pl-h-[8px]\",\n })}\n >\n <div className=\"pl-absolute pl-top-0 pl-left-0 pl-h-full pl-bg-[#C7C7C7]\" style={{ width: `${buffered}%` }} />\n <div\n className=\"pl-absolute pl-top-0 pl-left-0 pl-h-full pl-bg-[#FFCC00] pl-transition-all pl-duration-150 pl-ease-linear\"\n style={{ width: `${progress}%` }}\n />\n </div>\n </div>\n);\n","import React from \"react\";\nimport { errorLogProvider } from \"./errorBoundaryFunctions\";\n\nclass ErrorBoundary extends React.Component {\n state = { hasError: false, error: null, errorInfo: null };\n\n static getDerivedStateFromError(error: any) {\n // Update state so the next render will show the fallback UI.\n return { hasError: true };\n }\n\n componentDidCatch(error: any, errorInfo: any) {\n // You can also log the error to an error reporting service\n this.setState({ error: error, errorInfo: errorInfo });\n errorLogProvider({ type: \"OTHER_ERROR\", message: error.message });\n }\n\n render() {\n if (this.state.hasError) {\n return <></>;\n }\n\n return (this.props as any).children;\n }\n}\n\nexport default ErrorBoundary;\n","\"use client\";\n\nimport { Provider } from \"react-redux\";\nimport { IMiniPlayerParams } from \"./helpers/interfaces/interfaces\";\nimport store from \"./helpers/redux/store\";\nimport { MiniPlayer } from \"./components/custom-components/miniPlayer/miniPlayer\";\nimport ErrorBoundary from \"./helpers/errorBoundary/errorBoundary\";\n\nexport const MiniPlayerLibrary = ({\n params,\n}: {\n params: IMiniPlayerParams;\n}) => {\n return (\n <Provider store={store}>\n <ErrorBoundary>\n <MiniPlayer params={params} />\n </ErrorBoundary>\n </Provider>\n );\n};\n","\"use client\";\n\nimport Image from \"next/image\";\nimport IMAGES from \"../../../images/importImages\";\nimport { zIndex } from \"../../../helpers/interfaces/enums\";\nimport { useAppDispatch, useAppSelector } from \"../../../helpers/redux/hooks\";\nimport { useEffect } from \"react\";\nimport { IMiniPlayerParams } from \"../../../helpers/interfaces/interfaces\";\nimport { setMiniPlayerInfo } from \"../../../helpers/redux/slices/miniPlayerSlice\";\nimport MiniPlayerPlayPause from \"../playPause/miniPlayerPlayPause\";\nimport VideoTag from \"./videoTag/videoTag\";\nimport { getVodDetails } from \"../../../helpers/redux/actions/videoData.actions\";\nimport { mainPlayerVideoTag, miniPlayerVideoTag } from \"../../../helpers/constants\";\nimport { setCurrentTime } from \"../../../helpers/redux/slices/controllerSlice\";\n\nexport const MiniPlayer = ({ params }: { params: IMiniPlayerParams }) => {\n const dispatch = useAppDispatch();\n const details = useAppSelector((state) => state.miniPlayer.details);\n const miniPlayerParams = useAppSelector((state) => state.miniPlayer.params);\n useAppSelector((state) => state.miniPlayer.play);\n const mainPlayerParams = useAppSelector((state) => state.videoData.params);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => {\n dispatch(setMiniPlayerInfo(params));\n }, []);\n\n const handleGetDetail = async () => await getVodDetails(params.id);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => {\n if (params.id && params.type === \"vod\") handleGetDetail();\n }, [params.id]);\n\n return (\n <>\n {details.stream_link || (miniPlayerParams.type === \"static\" && !!miniPlayerParams.id) ? (\n <div style={{ zIndex: zIndex.miniPlayer }} className=\"pl-relative pl-w-full pl-h-full\">\n <div\n className={`pl-absolute pl-z-[1000] pl-top-3 pl-right-3 pl-cursor-pointer`}\n onClick={() => {\n if (mainPlayerParams.id === miniPlayerParams.id) {\n mainPlayerVideoTag().currentTime = miniPlayerVideoTag().currentTime;\n dispatch(setCurrentTime(miniPlayerVideoTag().currentTime));\n }\n localStorage.setItem(\"close-miniPlayer\", \"true\");\n params.onClose();\n }}\n >\n <Image className=\"pl-cursor-pointer\" src={IMAGES.closeSquare} alt=\"close-square\" width={16} height={16} />\n </div>\n <div className={`pl-w-full pl-absolute pl-bottom-0 pl-z-[1000000]`}>\n <div className=\"pl-w-full pl-flex pl-justify-center\">\n <MiniPlayerPlayPause />\n </div>\n </div>\n <VideoTag />\n </div>\n ) : (\n <div className=\"pl-w-full pl-h-full pl-bg-white\" />\n )}\n </>\n );\n};\n","import { shallowEqual } from \"react-redux\";\nimport { useAppSelector } from \"../../../helpers/redux/hooks\";\nimport { conditions } from \"../../../helpers/conditions/conditions\";\nimport { ConditionName } from \"../../../helpers/interfaces/enums\";\nimport IMAGES from \"../../../images/importImages\";\nimport { handlePlayerPauseMiniPlayer } from \"../../../helpers/redux/actions/controller.actions\";\nimport Image from \"next/image\";\n\nconst MiniPlayerPlayPause = () => {\n useAppSelector(({ miniPlayer: { play } }) => ({ play }), shallowEqual);\n\n return (\n <div\n className={`${!conditions(ConditionName.isTouchScreen) && \"hover:pl-scale-125\"} pl-transition-transform pl-ease-in-out pl-cursor-pointer`}\n onContextMenu={(event) => event.preventDefault()}\n >\n <Image\n alt=\"\"\n src={conditions(ConditionName.isPlayMiniPlayer) ? IMAGES.bigPause : IMAGES.bigPlay}\n width={20}\n height={20}\n onClick={(event: any) => handlePlayerPauseMiniPlayer(event)}\n onDoubleClick={(event: any) => event.stopPropagation()}\n className={`${conditions(ConditionName.isPlayMiniPlayer) ? \"pl-big-play-icon\" : \"pl-big-pause-icon\"}`}\n />\n </div>\n );\n};\n\nexport default MiniPlayerPlayPause;\n","import { PlayerTypes } from \"../../../../helpers/interfaces/enums\";\nimport { useAppSelector } from \"../../../../helpers/redux/hooks\";\nimport MiniPlayerNonStaticVideoTag from \"./miniPlayerNonStaticVideoTag\";\nimport MiniPlayerStaticVideoTag from \"./miniPlayerStaticVideoTag\";\n\nconst VideoTag = () => {\n \n const type = useAppSelector(state => state.miniPlayer.params.type);\n return (\n <>{type === PlayerTypes.static ? <MiniPlayerStaticVideoTag /> : <MiniPlayerNonStaticVideoTag />}</>\n )\n}\n\nexport default VideoTag;","import Hls from \"hls.js\";\nimport { useEffect } from \"react\";\nimport {\n appendQueryParamsToChunksIOS,\n handleMiniPlayerHlsConfig,\n handleMiniPlayerMediaAttached,\n handleVideoError,\n} from \"../../../../helpers/redux/actions/playerCore.actions\";\nimport {\n useAppDispatch,\n useAppSelector,\n} from \"../../../../helpers/redux/hooks\";\nimport {\n mainPlayerVideoTag,\n miniPlayerVideoTag,\n} from \"../../../../helpers/constants\";\nimport {\n setClearMiniPlayerSlice,\n setPlayMiniPlayer,\n} from \"../../../../helpers/redux/slices/miniPlayerSlice\";\nimport { setPlay } from \"../../../../helpers/redux/slices/controllerSlice\";\n\nconst MiniPlayerNonStaticVideoTag = () => {\n const dispatch = useAppDispatch();\n const details = useAppSelector((state) => state.miniPlayer.details);\n const params = useAppSelector((state) => state.miniPlayer.params);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => {\n let hls = new Hls(handleMiniPlayerHlsConfig());\n if (Hls.isSupported()) {\n hls.attachMedia(\n document.getElementById(`mini-player-video-tag`) as HTMLMediaElement\n );\n hls.on(Hls.Events.MEDIA_ATTACHED, () =>\n handleMiniPlayerMediaAttached(hls)\n );\n } else if (\n mainPlayerVideoTag().canPlayType(\"application/vnd.apple.mpegurl\")\n ) {\n mainPlayerVideoTag().src = details.stream_link!;\n\n // Append Query Parameter to .ts Chunks\n appendQueryParamsToChunksIOS();\n }\n return () => {\n dispatch(setClearMiniPlayerSlice());\n hls.detachMedia();\n hls.off(Hls.Events.MEDIA_ATTACHED, () =>\n handleMiniPlayerMediaAttached(hls)\n );\n };\n }, []);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => {\n if (params.currentTime) {\n dispatch(setPlayMiniPlayer(true));\n miniPlayerVideoTag().currentTime = params.currentTime;\n dispatch(setPlay(false));\n mainPlayerVideoTag()?.pause();\n }\n }, [params.currentTime]);\n\n return (\n <>\n <video\n onPlay={() => dispatch(setPlayMiniPlayer(true))}\n onEnded={() => dispatch(setPlayMiniPlayer(false))}\n onError={handleVideoError}\n poster={params.banner ? params.banner : details.banner}\n id={`mini-player-video-tag`}\n className=\"pl-absolute pl-bg-black pl-w-full pl-h-full\"\n autoPlay={true}\n muted={true}\n />\n </>\n );\n};\n\nexport default MiniPlayerNonStaticVideoTag;\n","import { useEffect } from \"react\";\nimport { useAppDispatch, useAppSelector } from \"../../../../helpers/redux/hooks\";\nimport { mainPlayerVideoTag, miniPlayerVideoTag } from \"../../../../helpers/constants\";\nimport { setPlayMiniPlayer } from \"../../../../helpers/redux/slices/miniPlayerSlice\";\nimport { setPlay } from \"../../../../helpers/redux/slices/controllerSlice\";\nimport { handleVideoError } from \"../../../../helpers/redux/actions/playerCore.actions\";\n\nconst MiniPlayerStaticVideoTag = () => {\n\n const dispatch = useAppDispatch();\n const params = useAppSelector(state => state.miniPlayer.params);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => {\n if(params.currentTime) {\n dispatch(setPlayMiniPlayer(true));\n miniPlayerVideoTag().currentTime = params.currentTime;\n dispatch(setPlay(false));\n mainPlayerVideoTag()?.pause();\n }\n },[params.currentTime])\n\n return (\n <video \n poster={params.banner} \n onPlay={() => dispatch(setPlayMiniPlayer(true))}\n onEnded={() => dispatch(setPlayMiniPlayer(false))}\n onError={handleVideoError}\n src={params.id} \n id={`mini-player-video-tag`} \n className=\"pl-absolute pl-bg-black pl-w-full pl-h-full\"\n autoPlay\n />\n )\n}\n\nexport default MiniPlayerStaticVideoTag;"],"mappings":"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","names":["import_toolkit","import_toolkit","exports","module","isNpmPackage","axios","import_toolkit","tailwindMerge","import_toolkit","userSlice","import_toolkit","import_axios","axios","subtitles","import_react","import_jsx_runtime","import_react","import_react_redux","import_jsx_runtime","settings","Image","import_react","import_react_redux","import_image","import_jsx_runtime","Image","import_react_redux","import_image","import_react","import_jsx_runtime","firstMute","Image","import_image","import_jsx_runtime","Image","import_image","import_jsx_runtime","Image","import_react_redux","import_jsx_runtime","firstPlay","import_react","import_react_redux","import_image","import_jsx_runtime","firstPlay","play","isLoading","autoplay","Image","import_react","import_react_redux","import_jsx_runtime","details","tooltipTime","import_react","import_jsx_runtime","import_react","import_react_redux","import_jsx_runtime","duration","activeElements","markers","markerTime","overlapMarkers","import_react","import_react_redux","import_jsx_runtime","ProgressBar","duration","currentTime","bufferedTimeWidth","import_react","import_react_redux","import_jsx_runtime","videoElementSizeInfo","import_react_redux","import_react","import_image","import_jsx_runtime","qualityLevels","settings","qualityLevelsPopover","videoElementSizeInfo","Image","import_jsx_runtime","import_react","import_react_redux","import_image","import_jsx_runtime","speed_default","init_speed","videoElementSizeInfo","params","speedPopover","settings","Image","import_react_redux","import_react","import_image","import_jsx_runtime","subtitles","selectedSubtitle","videoElementSizeInfo","Image","import_jsx_runtime","import_react_redux","import_react","import_image","import_jsx_runtime","multiAudioPopover","multiAudio","selectedAudioId","videoElementSizeInfo","Image","import_react","import_image","import_react_redux","import_jsx_runtime","Image","import_react","import_react_redux","import_image","import_jsx_runtime","init_speed","settings","settingPopover","qualityLevels","subtitles","multiAudio","selectedSubtitle","selectedAudioId","Image","speed_default","import_react_redux","import_react","import_jsx_runtime","duration","currentTime","import_react","import_react_redux","import_jsx_runtime","import_react_redux","import_jsx_runtime","subtitleText","import_react_redux","import_jsx_runtime","firstPlay","Hls","import_react","import_react_redux","params","import_react","import_react_redux","rawSubtitles","import_react","import_react_redux","rawSubtitles","import_react","import_react_redux","import_react","import_react_redux","import_image","import_jsx_runtime","params","Image","import_react","import_react_redux","isEnded","import_react","import_react_redux","qualityLevels","import_react","import_react","import_react_redux","import_image","import_jsx_runtime","params","details","videoElementSizeInfo","currentTime","duration","Hls","Image","import_jsx_runtime","StaticVideoTag","NonStaticVideoTag","dynamic","import_react","import_react_redux","import_react","import_react_redux","activeElements","play","handlePointerMove","import_react","import_react_redux","firstPlay","isFullScreen","import_jsx_runtime","import_react","import_react_redux","import_image","import_jsx_runtime","videoElementSizeInfo","Image","import_react","import_react_redux","import_dynamic","import_jsx_runtime","BackwardForward","dynamic","firstPlay","firstMute","activeElements","import_jsx_runtime","import_react","import_react_redux","params","import_image","import_react","import_jsx_runtime","Image","import_react_redux","import_dynamic","import_react","import_jsx_runtime","VideoArea","NotActive","dynamic","import_jsx_runtime","import_react_redux","import_image","import_jsx_runtime","params","Image","import_react_redux","import_react_redux","import_dynamic","import_react","import_react","import_react_redux","import_image","import_jsx_runtime","firstMute","setCurrentTime","setDuration","Image","import_jsx_runtime","StaticPlayer","dynamic","VodPlayer","VideoHighLighter","params","isLoading","firstPlay","import_react","import_jsx_runtime","React","import_jsx_runtime","import_react_redux","import_image","import_react","import_react_redux","import_image","import_jsx_runtime","Image","import_hls","import_react","import_jsx_runtime","Hls","import_react","import_jsx_runtime","import_jsx_runtime","VideoTag","videoTag_default","import_jsx_runtime","Image","videoTag_default","import_jsx_runtime"]}
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/helpers/hooks/useHandleKeyPress.tsx","../src/videoPlayerLibrary/components/custom-components/advertisement/Advertisement.tsx","../src/videoPlayerLibrary/helpers/errorBoundary/errorBoundary.tsx","../src/videoPlayerLibrary/miniPlayerLibrary.tsx","../src/videoPlayerLibrary/components/custom-components/miniPlayer/miniPlayer.tsx","../src/videoPlayerLibrary/components/custom-components/playPause/miniPlayerPlayPause.tsx","../src/videoPlayerLibrary/components/custom-components/miniPlayer/videoTag/videoTag.tsx","../src/videoPlayerLibrary/components/custom-components/miniPlayer/videoTag/miniPlayerNonStaticVideoTag.tsx","../src/videoPlayerLibrary/components/custom-components/miniPlayer/videoTag/miniPlayerStaticVideoTag.tsx"],"names":["init_cjs_shims","useHandleParams","query","dispatch","useAppDispatch","queryParams","handleSetParamsInRedux","setPlayerParams","setIsReady","handleAddUUID","handleVodParams","handleStaticParams","getUUID","handleSubtitles","validSubtitles","filterValidSubtitles","setRawSubtitles","handleParams","useEffect","useHandleParams_default","useHandleKeyPress","useKeyPress_default","event","conditions","handlePlayPause","handleFullScreen","settings","store_default","handleChangeSoundVolume","useHandleKeyPress_default","Advertisement","src","onEndAd","onSkipAd","skipDelay","adText","onClickAd","containerRef","useRef","videoRef","firstMute","useAppSelector","shallowEqual","progress","setProgress","useState","buffered","setBuffered","hasSkip","skipCounter","setSkipCounter","isCounting","setIsCounting","currentTime","setCurrentTime","duration","setDuration","showControls","setShowControls","hideControlsTimeout","isPaused","setIsPaused","reveresElapsedTime","setReveresElapsedTime","resetHideControlsTimer","delay","videoContainer","mouseMoveHandler","touchStartHandler","interval","prev","video","handlePlay","handlePlaying","handlePause","handleWaiting","handleError","handleLoadedMetadata","setupAutoplayBehavior","handleTimeUpdate","handleProgress","handleClick","e","firstUnMuteHandler","setPlay","handleAdClick","formatTime","time","minutes","seconds","jsxs","handleLockOrientation","tw","jsx","Image","importImages_default","SoundVolumeAlert_default","ProgressBar","fullScreen_default","Fragment","soundVolume_default","playPause_default","styleMerge","Advertisement_default","StaticPlayer","dynamic","VodPlayer","VideoHighLighter","VideoPlayer","props","params","isLoading","firstPlay","isReady","hiddenAd","clearRedux","isFullScreen","setHiddenAd","element","isShowLoader","loader_default","videoPlayer_default","ErrorBoundary","React","error","errorInfo","errorLogProvider","errorBoundary_default","VideoPlayerLibrary","isClient","setIsClient","Provider","MiniPlayerPlayPause","play","handlePlayerPauseMiniPlayer","miniPlayerPlayPause_default","MiniPlayerNonStaticVideoTag","details","state","hls","Hls","handleMiniPlayerHlsConfig","handleMiniPlayerMediaAttached","mainPlayerVideoTag","appendQueryParamsToChunksIOS","setClearMiniPlayerSlice","setPlayMiniPlayer","miniPlayerVideoTag","handleVideoError","miniPlayerNonStaticVideoTag_default","MiniPlayerStaticVideoTag","miniPlayerStaticVideoTag_default","VideoTag","type","videoTag_default","MiniPlayer","miniPlayerParams","mainPlayerParams","setMiniPlayerInfo","handleGetDetail","getVodDetails","MiniPlayerLibrary"],"mappings":"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","file":"index.js","sourcesContent":["export { VideoPlayerLibrary } from \"./videoPlayerLibrary\";\nexport { MiniPlayerLibrary } from \"./miniPlayerLibrary\";\n","\"use client\";\n\nimport { Provider } from \"react-redux\";\nimport { IParams } from \"./helpers/interfaces/interfaces\";\nimport store from \"./helpers/redux/store\";\nimport VideoPlayer from \"./components/videoPlayer/videoPlayer\";\nimport ErrorBoundary from \"./helpers/errorBoundary/errorBoundary\";\nimport { conditions } from \"./helpers/conditions/conditions\";\nimport { ConditionName } from \"./helpers/interfaces/enums\";\nimport { useEffect, useState } from \"react\";\n\nexport const VideoPlayerLibrary = ({ params }: { params: IParams }) => {\n const [isClient, setIsClient] = useState(false);\n\n useEffect(() => {\n setIsClient(true);\n }, []);\n\n if (!isClient) return null;\n\n return (\n <Provider store={store}>\n <ErrorBoundary>\n <div id=\"video-player-container\" className={`${!conditions(ConditionName.isTouchScreen) && \"pl-overflow-hidden\"}`}>\n <VideoPlayer params={params} />\n </div>\n </ErrorBoundary>\n </Provider>\n );\n};\n","\"use client\";\n\nimport { conditions } from \"../../helpers/conditions/conditions\";\nimport useHandleParams from \"../../helpers/hooks/useHandleParams\";\nimport { ConditionName, zIndex } from \"../../helpers/interfaces/enums\";\nimport { IParams } from \"../../helpers/interfaces/interfaces\";\nimport { useAppDispatch, useAppSelector } from \"../../helpers/redux/hooks\";\nimport { shallowEqual } from \"react-redux\";\nimport dynamic from \"next/dynamic\";\nimport useHandleKeyPress from \"../../helpers/hooks/useHandleKeyPress\";\nimport { useEffect } from \"react\";\nimport { clearRedux, tw } from \"../../helpers/helpers\";\nimport Loader from \"../custom-components/loader/loader\";\nimport { setHiddenAd } from \"../../helpers/redux/slices/videoDataSlice\";\nimport Advertisement from \"../custom-components/advertisement/Advertisement\";\n\nconst StaticPlayer = dynamic(() => import(\"./staticPlayer/staticPlayer\"));\nconst VodPlayer = dynamic(() => import(\"./vodPlayer/vodPlayer\"));\nconst VideoHighLighter = dynamic(() => import(\"./videoHighLighter/VideoHighLighter\"));\n\ninterface IProps {\n params: IParams;\n}\n\nconst VideoPlayer = (props: IProps) => {\n const dispatch = useAppDispatch();\n const { params, isLoading, firstPlay } = useAppSelector(\n ({ videoData: { isReady, params, hiddenAd }, controller: { isLoading, firstPlay } }) => ({ isReady, params, hiddenAd, isLoading, firstPlay }),\n shallowEqual,\n );\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => {\n if (params.id && props.params.id !== params.id) {\n // if (params.type === PlayerTypes.static) {\n // mainPlayerVideoTag()?.pause();\n // mainPlayerVideoTag().removeAttribute(\"src\");\n // mainPlayerVideoTag().load();\n // }\n clearRedux();\n }\n return () => {\n clearRedux();\n };\n }, [props.params.id]);\n\n useHandleParams(props.params);\n useHandleKeyPress();\n useAppSelector(({ controller: { isFullScreen } }) => ({ isFullScreen }), shallowEqual);\n\n if (props.params.vhl_status) return <VideoHighLighter />;\n if (conditions(ConditionName.hasAdvertisement))\n return (\n <Advertisement\n src={params.advertisement?.videoUrl!}\n onSkipAd={(currentTime) => {\n dispatch(setHiddenAd(true));\n if (params.advertisement?.onSkipAd) params.advertisement.onSkipAd(currentTime);\n }}\n onEndAd={(currentTime) => {\n dispatch(setHiddenAd(true));\n if (params.advertisement?.onEndAd) params.advertisement.onEndAd(currentTime);\n }}\n skipDelay={params.advertisement?.skipDelay}\n adText={params.advertisement?.adText}\n onClickAd={params.advertisement?.onClickAd}\n />\n );\n\n let element = <></>;\n if (conditions(ConditionName.isReady)) {\n element = (\n <div className={tw(\"\", { desktop: \"pl-rounded-[12px]\" })} style={{ touchAction: \"pan-y\", userSelect: \"none\" }}>\n {conditions(ConditionName.isStaticFormat) ? <StaticPlayer /> : <VodPlayer />}\n </div>\n );\n }\n\n const isShowLoader = firstPlay && isLoading;\n\n return (\n <div\n dir=\"rtl\"\n style={{ zIndex: zIndex.videoPlayerInFullScreen }}\n id=\"parent-player\"\n className={tw(`pl-relative pl-bg-black pl-w-full pl-h-full pl-aspect-video`, {\n desktop: \"pl-rounded-[12px]\",\n touch: \"\",\n desktopFullScreen: \"pl-overflow-hidden pl-fixed pl-top-0 pl-right-0 pl-w-screen pl-h-screen pl-rounded-none\",\n touchFullScreen: \"pl-overflow-hidden pl-fixed pl-top-0 pl-right-0 pl-w-screen pl-h-screen\",\n })}\n >\n {isShowLoader && (\n <div className={tw(\"pl-absolute pl-w-full pl-h-full pl-aspect-video\", { desktop: \"pl-rounded-[12px]\" })}>\n <Loader />\n </div>\n )}\n {element}\n </div>\n );\n};\n\nexport default VideoPlayer;\n","\"use client\";\n\nimport { useEffect } from \"react\";\nimport { getUUID } from \"../helpers\";\nimport { useAppDispatch } from \"../redux/hooks\";\nimport { IParams } from \"../interfaces/interfaces\";\nimport {\n setIsReady,\n setPlayerParams,\n setRawSubtitles,\n} from \"../redux/slices/videoDataSlice\";\nimport { PlayerTypes } from \"../interfaces/enums\";\nimport { filterValidSubtitles } from \"../redux/actions/videoData.actions\";\n\nconst useHandleParams = (query: any) => {\n const dispatch = useAppDispatch();\n\n let queryParams: IParams = {};\n\n const handleSetParamsInRedux = () => {\n dispatch(setPlayerParams(queryParams));\n dispatch(setIsReady(true));\n };\n\n const handleAddUUID = () => {\n if (!!query.uuid) {\n localStorage.setItem(\"hamrahiUUID\", query.uuid!);\n queryParams.uuid = query.uuid;\n }\n };\n\n const handleVodParams = () => {\n queryParams = {\n provider: \"cafevdo\",\n ...query,\n subtitles: undefined,\n };\n };\n\n const handleStaticParams = async () => {\n queryParams = {\n uuid: getUUID(),\n provider: \"cafevdo\",\n ...query,\n subtitles: undefined,\n id: query.id ? window.atob(query.id) : undefined,\n banner:\n query.banner && query.banner !== \"undefined\" ? query.banner : undefined,\n };\n };\n\n const handleSubtitles = async () => {\n const validSubtitles = await filterValidSubtitles(query.subtitles);\n dispatch(setRawSubtitles(validSubtitles));\n };\n\n const handleParams = async () => {\n queryParams = {};\n if (Object.keys(query).includes(\"type\")) {\n if (String(query.type) === PlayerTypes.vod) handleVodParams();\n else if (String(query.type) === PlayerTypes.static) handleStaticParams();\n if (query.subtitles && query.subtitles.length) handleSubtitles();\n handleAddUUID();\n handleSetParamsInRedux();\n }\n };\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => {\n handleParams();\n }, [query]);\n};\n\nexport default useHandleParams;\n","import { conditions } from \"../conditions/conditions\";\nimport { ConditionName } from \"../interfaces/enums\";\nimport { handleBackwardForward, handleChangeSoundVolume, handleFullScreen, handlePlayPause } from \"../redux/actions/controller.actions\";\nimport store from \"../redux/store\";\nimport useKeyPress from \"./useKeyPress\";\n\nconst useHandleKeyPress = () => {\n useKeyPress(\"Space\", (event: any) => {\n if (conditions(ConditionName.isPressKeySpace) && !conditions(ConditionName.isFirstMutePlay)) handlePlayPause(event);\n });\n useKeyPress(\"KeyK\", (event: any) => {\n if (conditions(ConditionName.isPressKeySpace) && !conditions(ConditionName.isFirstMutePlay)) handlePlayPause(event);\n });\n // useKeyPress(\"ArrowRight\", (event: any) => {\n // if (conditions(ConditionName.isPressKeyArrowRight)) handleBackwardForward(\"forward\", 15, event);\n // });\n // useKeyPress(\"ArrowLeft\", (event: any) => {\n // if (conditions(ConditionName.isPressKeyArrowLeft)) handleBackwardForward(\"backward\", 15, event);\n // });\n // useKeyPress(\"KeyI\", () => {\n // if (conditions(ConditionName.isPressKeyI)) mainPlayerVideoTag().requestPictureInPicture();\n // });\n useKeyPress(\"KeyF\", () => {\n if (conditions(ConditionName.isPressKeyF)) handleFullScreen();\n });\n useKeyPress(\"KeyM\", () => {\n if (conditions(ConditionName.isPressKeyM)) {\n const { settings } = store.getState().user;\n handleChangeSoundVolume(settings.volume ? 0 : 50);\n }\n });\n // useKeyPress(\"KeyC\", () => {\n // if (conditions(ConditionName.isPressKeyC)) handleSubtitle();\n // });\n};\n\nexport default useHandleKeyPress;\n","\"use client\";\r\n\r\nimport { useRef, useState, useEffect } from \"react\";\r\nimport { conditions } from \"../../../helpers/conditions/conditions\";\r\nimport { ConditionName } from \"../../../helpers/interfaces/enums\";\r\nimport SoundVolume from \"../soundVolume/soundVolume\";\r\nimport FullScreen from \"../fullScreen/fullScreen\";\r\nimport PlayPause from \"../playPause/playPause\";\r\nimport { useAppDispatch, useAppSelector } from \"../../../helpers/redux/hooks\";\r\nimport {\r\n firstUnMuteHandler,\r\n handleChangeSoundVolume,\r\n handleFullScreen,\r\n handleLockOrientation,\r\n} from \"../../../helpers/redux/actions/controller.actions\";\r\nimport { setPlay } from \"../../../helpers/redux/slices/controllerSlice\";\r\nimport IMAGES from \"../../../images/importImages\";\r\nimport useKeyPress from \"../../../helpers/hooks/useKeyPress\";\r\nimport store from \"../../../helpers/redux/store\";\r\nimport SoundVolumeAlert from \"../soundVolumeAlert/SoundVolumeAlert\";\r\nimport { setupAutoplayBehavior, styleMerge, tw } from \"../../../helpers/helpers\";\r\nimport { shallowEqual } from \"react-redux\";\r\nimport Image from \"next/image\";\r\n\r\ninterface AdvertisementProps {\r\n src: string;\r\n onEndAd?: (currentTime: number) => void;\r\n onSkipAd?: (currentTime: number) => void;\r\n skipDelay?: number;\r\n adText?: string;\r\n onClickAd?: (currentTime: number) => void;\r\n}\r\n\r\nconst Advertisement: React.FC<AdvertisementProps> = ({ src, onEndAd, onSkipAd, skipDelay, adText = \"اطلاعات بیشتر\", onClickAd }) => {\r\n const dispatch = useAppDispatch();\r\n const containerRef = useRef<HTMLDivElement | null>(null);\r\n const videoRef = useRef<HTMLVideoElement | null>(null);\r\n\r\n const { firstMute } = useAppSelector(({ controller: { firstMute } }) => ({ firstMute }), shallowEqual);\r\n\r\n const [progress, setProgress] = useState(0);\r\n const [buffered, setBuffered] = useState(0);\r\n\r\n const hasSkip = skipDelay !== undefined && skipDelay > 0;\r\n const [skipCounter, setSkipCounter] = useState<number | null>(hasSkip ? skipDelay! : null);\r\n const [isCounting, setIsCounting] = useState(false);\r\n\r\n const [currentTime, setCurrentTime] = useState(0);\r\n const [duration, setDuration] = useState(0);\r\n\r\n const [showControls, setShowControls] = useState(true);\r\n const hideControlsTimeout = useRef<NodeJS.Timeout | null>(null);\r\n\r\n const [isPaused, setIsPaused] = useState(false);\r\n const [reveresElapsedTime, setReveresElapsedTime] = useState(false);\r\n\r\n const resetHideControlsTimer = (delay = 3000) => {\r\n if (isPaused) {\r\n setShowControls(true);\r\n return;\r\n }\r\n\r\n setShowControls(true);\r\n if (hideControlsTimeout.current) clearTimeout(hideControlsTimeout.current);\r\n hideControlsTimeout.current = setTimeout(() => {\r\n setShowControls(false);\r\n }, delay);\r\n };\r\n\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n useEffect(() => {\r\n const videoContainer = containerRef.current;\r\n if (!videoContainer) return;\r\n\r\n const mouseMoveHandler = () => resetHideControlsTimer();\r\n const touchStartHandler = () => resetHideControlsTimer();\r\n\r\n videoContainer.addEventListener(\"mousemove\", mouseMoveHandler);\r\n videoContainer.addEventListener(\"touchstart\", touchStartHandler);\r\n\r\n resetHideControlsTimer();\r\n\r\n return () => {\r\n videoContainer.removeEventListener(\"mousemove\", mouseMoveHandler);\r\n videoContainer.removeEventListener(\"touchstart\", touchStartHandler);\r\n if (hideControlsTimeout.current) clearTimeout(hideControlsTimeout.current);\r\n };\r\n }, [isPaused]);\r\n\r\n useEffect(() => {\r\n if (!hasSkip || !isCounting) return;\r\n\r\n const interval = setInterval(() => {\r\n setSkipCounter((prev) => {\r\n if (prev === null) return prev;\r\n if (prev <= 1) {\r\n clearInterval(interval);\r\n return 0;\r\n }\r\n return prev - 1;\r\n });\r\n }, 1000);\r\n\r\n return () => clearInterval(interval);\r\n }, [isCounting, hasSkip]);\r\n\r\n useEffect(() => {\r\n const video = videoRef.current;\r\n if (!video) return;\r\n\r\n const handlePlay = () => {\r\n setIsCounting(true);\r\n setIsPaused(false);\r\n resetHideControlsTimer(1000);\r\n };\r\n\r\n const handlePlaying = () => {\r\n setIsCounting(true);\r\n setIsPaused(false);\r\n };\r\n\r\n const handlePause = () => {\r\n setIsCounting(false);\r\n setIsPaused(true);\r\n setShowControls(true);\r\n if (hideControlsTimeout.current) clearTimeout(hideControlsTimeout.current);\r\n };\r\n\r\n const handleWaiting = () => setIsCounting(false);\r\n const handleError = () => setIsCounting(false);\r\n const handleLoadedMetadata = () => setDuration(video.duration);\r\n\r\n video.addEventListener(\"play\", handlePlay);\r\n video.addEventListener(\"playing\", handlePlaying);\r\n video.addEventListener(\"pause\", handlePause);\r\n video.addEventListener(\"waiting\", handleWaiting);\r\n video.addEventListener(\"error\", handleError);\r\n video.addEventListener(\"loadedmetadata\", handleLoadedMetadata);\r\n\r\n setupAutoplayBehavior(video);\r\n\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n return () => {\r\n video.removeEventListener(\"play\", handlePlay);\r\n video.removeEventListener(\"playing\", handlePlaying);\r\n video.removeEventListener(\"pause\", handlePause);\r\n video.removeEventListener(\"waiting\", handleWaiting);\r\n video.removeEventListener(\"error\", handleError);\r\n video.removeEventListener(\"loadedmetadata\", handleLoadedMetadata);\r\n };\r\n }, [src]);\r\n\r\n const handleTimeUpdate = () => {\r\n const video = videoRef.current;\r\n if (video?.duration) {\r\n setProgress((video.currentTime / video.duration) * 100);\r\n setCurrentTime(video.currentTime);\r\n }\r\n };\r\n\r\n const handleProgress = () => {\r\n const video = videoRef.current;\r\n if (video?.duration && video.buffered.length > 0) {\r\n setBuffered((video.buffered.end(video.buffered.length - 1) / video.duration) * 100);\r\n }\r\n };\r\n\r\n const handleClick = (e: React.MouseEvent<HTMLDivElement>) => {\r\n const video = videoRef.current;\r\n if (!video) return;\r\n\r\n if (conditions(ConditionName.isTouchScreen)) {\r\n if (e.target === containerRef.current || e.target === video) {\r\n if (firstMute) {\r\n handleChangeSoundVolume(50,video);\r\n firstUnMuteHandler();\r\n return;\r\n }\r\n }\r\n resetHideControlsTimer();\r\n return;\r\n }\r\n\r\n if (e.target === containerRef.current || e.target === video) {\r\n if (firstMute) {\r\n handleChangeSoundVolume(50,video);\r\n firstUnMuteHandler();\r\n return;\r\n }\r\n\r\n if (video.paused) {\r\n video.play();\r\n dispatch(setPlay(true));\r\n } else {\r\n video.pause();\r\n dispatch(setPlay(false));\r\n }\r\n }\r\n };\r\n\r\n const handleAdClick = () => {\r\n if (onClickAd) {\r\n onClickAd(currentTime);\r\n }\r\n };\r\n\r\n const formatTime = (time: number) => {\r\n const minutes = Math.floor(time / 60)\r\n .toString()\r\n .padStart(2, \"0\");\r\n const seconds = Math.floor(time % 60)\r\n .toString()\r\n .padStart(2, \"0\");\r\n return `${minutes}:${seconds}`;\r\n };\r\n\r\n // useHandleKeyPress\r\n useKeyPress(\"Space\", () => {\r\n setIsPaused((prev) => !prev);\r\n });\r\n useKeyPress(\"KeyK\", () => {\r\n setIsPaused((prev) => !prev);\r\n });\r\n useKeyPress(\"KeyF\", () => {\r\n handleFullScreen();\r\n });\r\n useKeyPress(\"KeyM\", () => {\r\n const { settings } = store.getState().user;\r\n handleChangeSoundVolume(settings.volume ? 0 : 50,videoRef.current || undefined);\r\n });\r\n\r\n return (\r\n <div\r\n id=\"video-area\"\r\n ref={containerRef}\r\n onClick={handleClick}\r\n onDoubleClick={() => {\r\n handleFullScreen();\r\n handleLockOrientation();\r\n }}\r\n className={tw(\r\n \"pl-relative pl-bg-black pl-overflow-hidden pl-w-full pl-h-full pl-max-h-screen pl-aspect-video pl-flex pl-flex-col pl-justify-end\",\r\n { desktop: \"pl-rounded-[12px]\", desktopFullScreen: \"pl-fixed pl-w-screen pl-h-screen pl-top-0 pl-right-0 pl-rounded-none\" },\r\n )}\r\n style={{\r\n width: conditions(ConditionName.isFullScreen) ? \"100vw\" : \"auto\",\r\n zIndex: conditions(ConditionName.isFullScreen) ? 100000 : \"unset\",\r\n height: conditions(ConditionName.isFullScreen) ? \"100vh\" : \"auto\",\r\n }}\r\n >\r\n <div\r\n className=\"pl-absolute pl-top-0 pl-z-10 pl-h-[46px] pl-w-full pl-px-4 pl-flex pl-items-center pl-justify-between\"\r\n style={{ backgroundImage: \"linear-gradient(180deg, rgba(0,0,0,0.25) 0%, rgba(0,0,0,0) 100%)\" }}\r\n >\r\n {onClickAd && conditions(ConditionName.isTouchScreen) && (\r\n <button\r\n onClick={handleAdClick}\r\n className={tw(\"pl-flex pl-items-center pl-justify-center pl-gap-[5px]\", {\r\n touch: \"h-[50px]\",\r\n touchFullScreen: \"\",\r\n })}\r\n >\r\n <Image src={IMAGES.export} alt=\"export button\" width={16} height={16} />\r\n <span\r\n className={tw(\"\", {\r\n touch: \"pl-text-white pl-text-[11px] pl-font-medium\",\r\n touchFullScreen: \"\",\r\n })}\r\n >\r\n {adText}\r\n </span>\r\n </button>\r\n )}\r\n\r\n {conditions(ConditionName.showSoundVolumeAlert) && <SoundVolumeAlert />}\r\n </div>\r\n\r\n <video\r\n src={src}\r\n autoPlay\r\n playsInline\r\n className=\"pl-absolute pl-size-full\"\r\n onEnded={() => onEndAd && onEndAd(currentTime)}\r\n onTimeUpdate={handleTimeUpdate}\r\n onProgress={handleProgress}\r\n id=\"player-tag\"\r\n />\r\n\r\n <div\r\n style={{\r\n backgroundBlendMode: \"multiply\",\r\n backgroundSize: \"cover\",\r\n backgroundPosition: \"center\",\r\n }}\r\n className={`pl-relative pl-rounded-b-[12px] pl-z-10 pl-flex pl-flex-col ${\r\n conditions(ConditionName.isTouchScreenPortrait) && \"pl-flex-col-reverse\"\r\n } ${conditions(ConditionName.isFullScreen) ? \"pl-gap-3\" : \"pl-gap-1.5\"} pl-transition-opacity pl-duration-500 pl-ease-in-out ${\r\n showControls ? \"pl-opacity-100\" : \"pl-opacity-0 pl-pointer-events-none\"\r\n }`}\r\n >\r\n {conditions(ConditionName.isTouchScreen) && (\r\n <div className=\"pl-absolute pl-font-bold pl-text-[12px] pl-h-[14px] pl-gap-1.5 pl-left-[14px] pl-bottom-[14px] pl-flex pl-items-center pl-justify-center pl-w-fit pl-text-white\">\r\n <p className=\"pl-leading-[100%]\">{formatTime(currentTime)}</p>\r\n <Image src={IMAGES.info} alt=\"\" width={12} height={12} />\r\n <p className=\"pl-leading-[100%]\">تبلیغات</p>\r\n </div>\r\n )}\r\n\r\n <ProgressBar progress={progress} buffered={buffered} />\r\n\r\n {!conditions(ConditionName.isTouchScreen) && (\r\n <div\r\n className={`pl-flex pl-justify-between pl-items-center pl-gap-3 pl-px-4 ${\r\n conditions(ConditionName.isFullScreen) ? \"pl-pb-3\" : \"pl-pb-1.5\"\r\n }`}\r\n >\r\n <div\r\n className={tw(`pl-rounded-full pl-flex pl-items-center pl-justify-center pl-bg-black/75`, {\r\n desktop: \"pl-p-1\",\r\n desktopFullScreen: \"pl-p-1.5\",\r\n })}\r\n >\r\n <FullScreen width={conditions(ConditionName.isFullScreen) ? 24 : 16} height={conditions(ConditionName.isFullScreen) ? 24 : 16} />\r\n </div>\r\n\r\n <div className=\"pl-flex pl-items-center pl-gap-4\">\r\n <div\r\n onClick={() => setReveresElapsedTime((prev) => !prev)}\r\n className={tw(\r\n `pl-cursor-pointer pl-rounded-full pl-inline-flex pl-items-center pl-py-1 pl-px-1.5 pl-justify-center pl-group pl-bg-black/75`,\r\n { desktop: \"pl-min-w-[34px] pl-h-[34px]\", desktopFullScreen: \"pl-min-w-[48px] pl-h-[48px]\" },\r\n )}\r\n >\r\n <div\r\n className={tw(\r\n \" pl-flex pl-gap-0.5 pl-items-center pl-justify-center pl-rounded-full group-hover:pl-bg-[#5E5E5E] pl-transition-all\",\r\n { desktop: \"pl-h-[26px] pl-min-w-[26px] pl-px-1.5\", desktopFullScreen: \"pl-h-[36px] pl-min-w-[36px] pl-px-3\" },\r\n )}\r\n >\r\n <p\r\n className={`pl-text-white pl-flex pl-items-center pl-justify-center pl-gap-0.5 ${\r\n conditions(ConditionName.isFullScreen) ? \"pl-text-base\" : \"pl-text-[12px] pl-leading-5\"\r\n } pl-font-bold`}\r\n >\r\n <span>{formatTime(duration)}</span>\r\n <span>/</span>\r\n {reveresElapsedTime ? (\r\n <>\r\n <span>{formatTime(duration - currentTime)}</span>\r\n <span className=\"pl-mt-0.5\">-</span>\r\n </>\r\n ) : (\r\n <span>{formatTime(currentTime)}</span>\r\n )}\r\n </p>\r\n </div>\r\n </div>\r\n\r\n <SoundVolume width={conditions(ConditionName.isFullScreen) ? 24 : 16} height={conditions(ConditionName.isFullScreen) ? 24 : 16} />\r\n <PlayPause width={conditions(ConditionName.isFullScreen) ? 24 : 16} height={conditions(ConditionName.isFullScreen) ? 24 : 16} />\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {onClickAd && !conditions(ConditionName.isTouchScreen) && (\r\n <button\r\n onClick={handleAdClick}\r\n className={tw(\"pl-left-[24px] pl-flex pl-items-center pl-rounded-[28px] pl-transition-colors pl-bg-[#212121]/[0.6] pl-absolute\", {\r\n desktopFullScreen: \"pl-bottom-[131px] pl-h-[56px] pl-px-5 pl-gap-2.5\",\r\n desktop: \"pl-bottom-[76px] pl-h-10 pl-px-3 pl-gap-1\",\r\n })}\r\n >\r\n <Image\r\n src={IMAGES.export}\r\n alt=\"export button\"\r\n width={styleMerge({ desktop: 16, desktopFullScreen: 32, touch: 20, touchFullScreen: 24 })}\r\n height={styleMerge({ desktop: 16, desktopFullScreen: 32, touch: 20, touchFullScreen: 24 })}\r\n />\r\n <span\r\n className={tw(\"pl-font-medium pl-text-white pl-leading-4\", {\r\n desktopFullScreen: \"pl-text-base\",\r\n desktop: \"pl-text-[13px]\",\r\n })}\r\n >\r\n {adText}\r\n </span>\r\n </button>\r\n )}\r\n\r\n {hasSkip && (\r\n <>\r\n {!conditions(ConditionName.isTouchScreen) ? (\r\n <button\r\n onClick={() => onSkipAd && onSkipAd(currentTime)}\r\n disabled={!!skipCounter && skipCounter > 0}\r\n className={tw(\"pl-right-[24px] pl-flex pl-items-center pl-rounded-[28px] pl-transition-colors pl-bg-[#212121]/[0.6] pl-absolute\", {\r\n desktopFullScreen: \"pl-bottom-[131px] pl-h-[56px] pl-px-5 pl-gap-2.5\",\r\n desktop: \"pl-bottom-[76px] pl-h-10 pl-px-3 pl-gap-1\",\r\n })}\r\n >\r\n <Image\r\n src={IMAGES.next}\r\n alt=\"next button\"\r\n width={styleMerge({ desktop: 16, desktopFullScreen: 32 })}\r\n height={styleMerge({ desktop: 16, desktopFullScreen: 32 })}\r\n />\r\n\r\n <span\r\n className={tw(\"pl-font-medium pl-text-white pl-leading-4\", {\r\n desktopFullScreen: \"pl-text-base\",\r\n desktop: \"pl-text-[13px]\",\r\n })}\r\n >\r\n {skipCounter && skipCounter > 0 ? `رد کردن (${skipCounter})` : \"رد کردن\"}\r\n </span>\r\n </button>\r\n ) : (\r\n <button\r\n onClick={() => onSkipAd && onSkipAd(currentTime)}\r\n disabled={!!skipCounter && skipCounter > 0}\r\n className={tw(\r\n `pl-absolute pl-px-2 pl-rounded-[28px] pl-bg-black/60 pl-bottom-8 pl-right-4 pl-flex pl-items-center pl-justify-center pl-h-8 pl-gap-1 ${\r\n !!skipCounter && skipCounter > 0 ? \"pl-invisible\" : \"\"\r\n }`,\r\n {\r\n touchFullScreen: \"\",\r\n touch: \"\",\r\n },\r\n )}\r\n >\r\n <Image\r\n src={IMAGES.next}\r\n alt=\"next button\"\r\n width={styleMerge({ touch: 20, touchFullScreen: 20 })}\r\n height={styleMerge({ touch: 20, touchFullScreen: 20 })}\r\n />\r\n\r\n <span\r\n className={tw(\"pl-text-[11px] pl-font-medium pl-text-white\", {\r\n touchFullScreen: \"\",\r\n touch: \"\",\r\n })}\r\n >\r\n رد کردن\r\n </span>\r\n </button>\r\n )}\r\n </>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default Advertisement;\r\n\r\ntype ProgressBarProps = { progress: number; buffered: number };\r\n\r\nconst ProgressBar: React.FC<ProgressBarProps> = ({ progress, buffered }) => (\r\n <div className={tw(\"pl-w-full\", { desktop: \"pl-px-4\" })}>\r\n <div\r\n className={tw(\"pl-relative pl-overflow-hidden pl-w-full pl-bg-[#4A4A4A]\", {\r\n touch: \"pl-h-[3px]\",\r\n desktop: \"pl-h-[3px] pl-rounded-[8px]\",\r\n desktopFullScreen: \"pl-h-[6px]\",\r\n touchFullScreen: \"pl-h-[8px]\",\r\n })}\r\n >\r\n <div className=\"pl-absolute pl-top-0 pl-left-0 pl-h-full pl-bg-[#C7C7C7]\" style={{ width: `${buffered}%` }} />\r\n <div\r\n className=\"pl-absolute pl-top-0 pl-left-0 pl-h-full pl-bg-[#FFCC00] pl-transition-all pl-duration-150 pl-ease-linear\"\r\n style={{ width: `${progress}%` }}\r\n />\r\n </div>\r\n </div>\r\n);\r\n","import React from \"react\";\nimport { errorLogProvider } from \"./errorBoundaryFunctions\";\n\nclass ErrorBoundary extends React.Component {\n state = { hasError: false, error: null, errorInfo: null };\n\n static getDerivedStateFromError(error: any) {\n // Update state so the next render will show the fallback UI.\n return { hasError: true };\n }\n\n componentDidCatch(error: any, errorInfo: any) {\n // You can also log the error to an error reporting service\n this.setState({ error: error, errorInfo: errorInfo });\n errorLogProvider({ type: \"OTHER_ERROR\", message: error.message });\n }\n\n render() {\n if (this.state.hasError) {\n return <></>;\n }\n\n return (this.props as any).children;\n }\n}\n\nexport default ErrorBoundary;\n","\"use client\";\n\nimport { Provider } from \"react-redux\";\nimport { IMiniPlayerParams } from \"./helpers/interfaces/interfaces\";\nimport store from \"./helpers/redux/store\";\nimport { MiniPlayer } from \"./components/custom-components/miniPlayer/miniPlayer\";\nimport ErrorBoundary from \"./helpers/errorBoundary/errorBoundary\";\nimport { useEffect, useState } from \"react\";\n\nexport const MiniPlayerLibrary = ({ params }: { params: IMiniPlayerParams }) => {\n const [isClient, setIsClient] = useState(false);\n\n useEffect(() => {\n setIsClient(true);\n }, []);\n\n if (!isClient) return null;\n\n return (\n <Provider store={store}>\n <ErrorBoundary>\n <MiniPlayer params={params} />\n </ErrorBoundary>\n </Provider>\n );\n};\n","\"use client\";\r\n\r\nimport Image from \"next/image\";\r\nimport IMAGES from \"../../../images/importImages\";\r\nimport { zIndex } from \"../../../helpers/interfaces/enums\";\r\nimport { useAppDispatch, useAppSelector } from \"../../../helpers/redux/hooks\";\r\nimport { useEffect } from \"react\";\r\nimport { IMiniPlayerParams } from \"../../../helpers/interfaces/interfaces\";\r\nimport { setMiniPlayerInfo } from \"../../../helpers/redux/slices/miniPlayerSlice\";\r\nimport MiniPlayerPlayPause from \"../playPause/miniPlayerPlayPause\";\r\nimport VideoTag from \"./videoTag/videoTag\";\r\nimport { getVodDetails } from \"../../../helpers/redux/actions/videoData.actions\";\r\nimport { mainPlayerVideoTag, miniPlayerVideoTag } from \"../../../helpers/constants\";\r\nimport { setCurrentTime } from \"../../../helpers/redux/slices/controllerSlice\";\r\n\r\nexport const MiniPlayer = ({ params }: { params: IMiniPlayerParams }) => {\r\n const dispatch = useAppDispatch();\r\n const details = useAppSelector((state) => state.miniPlayer.details);\r\n const miniPlayerParams = useAppSelector((state) => state.miniPlayer.params);\r\n useAppSelector((state) => state.miniPlayer.play);\r\n const mainPlayerParams = useAppSelector((state) => state.videoData.params);\r\n\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n useEffect(() => {\r\n dispatch(setMiniPlayerInfo(params));\r\n }, []);\r\n\r\n const handleGetDetail = async () => await getVodDetails(params.id);\r\n\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n useEffect(() => {\r\n if (params.id && params.type === \"vod\") handleGetDetail();\r\n }, [params.id]);\r\n\r\n return (\r\n <>\r\n {details.stream_link || (miniPlayerParams.type === \"static\" && !!miniPlayerParams.id) ? (\r\n <div style={{ zIndex: zIndex.miniPlayer }} className=\"pl-relative pl-w-full pl-h-full\">\r\n <div\r\n className={`pl-absolute pl-z-[1000] pl-top-3 pl-right-3 pl-cursor-pointer`}\r\n onClick={() => {\r\n if (mainPlayerParams.id === miniPlayerParams.id) {\r\n mainPlayerVideoTag().currentTime = miniPlayerVideoTag().currentTime;\r\n dispatch(setCurrentTime(miniPlayerVideoTag().currentTime));\r\n }\r\n localStorage.setItem(\"close-miniPlayer\", \"true\");\r\n params.onClose();\r\n }}\r\n >\r\n <Image className=\"pl-cursor-pointer\" src={IMAGES.closeSquare} alt=\"close-square\" width={16} height={16} />\r\n </div>\r\n <div className={`pl-w-full pl-absolute pl-bottom-0 pl-z-[1000000]`}>\r\n <div className=\"pl-w-full pl-flex pl-justify-center\">\r\n <MiniPlayerPlayPause />\r\n </div>\r\n </div>\r\n <VideoTag />\r\n </div>\r\n ) : (\r\n <div className=\"pl-w-full pl-h-full pl-bg-white\" />\r\n )}\r\n </>\r\n );\r\n};\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 { handlePlayerPauseMiniPlayer } from \"../../../helpers/redux/actions/controller.actions\";\r\nimport Image from \"next/image\";\r\n\r\nconst MiniPlayerPlayPause = () => {\r\n useAppSelector(({ miniPlayer: { play } }) => ({ play }), 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.isPlayMiniPlayer) ? IMAGES.bigPause : IMAGES.bigPlay}\r\n width={20}\r\n height={20}\r\n onClick={(event: any) => handlePlayerPauseMiniPlayer(event)}\r\n onDoubleClick={(event: any) => event.stopPropagation()}\r\n className={`${conditions(ConditionName.isPlayMiniPlayer) ? \"pl-big-play-icon\" : \"pl-big-pause-icon\"}`}\r\n />\r\n </div>\r\n );\r\n};\r\n\r\nexport default MiniPlayerPlayPause;\r\n","import { PlayerTypes } from \"../../../../helpers/interfaces/enums\";\nimport { useAppSelector } from \"../../../../helpers/redux/hooks\";\nimport MiniPlayerNonStaticVideoTag from \"./miniPlayerNonStaticVideoTag\";\nimport MiniPlayerStaticVideoTag from \"./miniPlayerStaticVideoTag\";\n\nconst VideoTag = () => {\n \n const type = useAppSelector(state => state.miniPlayer.params.type);\n return (\n <>{type === PlayerTypes.static ? <MiniPlayerStaticVideoTag /> : <MiniPlayerNonStaticVideoTag />}</>\n )\n}\n\nexport default VideoTag;","import Hls from \"hls.js\";\nimport { useEffect } from \"react\";\nimport {\n appendQueryParamsToChunksIOS,\n handleMiniPlayerHlsConfig,\n handleMiniPlayerMediaAttached,\n handleVideoError,\n} from \"../../../../helpers/redux/actions/playerCore.actions\";\nimport {\n useAppDispatch,\n useAppSelector,\n} from \"../../../../helpers/redux/hooks\";\nimport {\n mainPlayerVideoTag,\n miniPlayerVideoTag,\n} from \"../../../../helpers/constants\";\nimport {\n setClearMiniPlayerSlice,\n setPlayMiniPlayer,\n} from \"../../../../helpers/redux/slices/miniPlayerSlice\";\nimport { setPlay } from \"../../../../helpers/redux/slices/controllerSlice\";\n\nconst MiniPlayerNonStaticVideoTag = () => {\n const dispatch = useAppDispatch();\n const details = useAppSelector((state) => state.miniPlayer.details);\n const params = useAppSelector((state) => state.miniPlayer.params);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => {\n let hls = new Hls(handleMiniPlayerHlsConfig());\n if (Hls.isSupported()) {\n hls.attachMedia(\n document.getElementById(`mini-player-video-tag`) as HTMLMediaElement\n );\n hls.on(Hls.Events.MEDIA_ATTACHED, () =>\n handleMiniPlayerMediaAttached(hls)\n );\n } else if (\n mainPlayerVideoTag().canPlayType(\"application/vnd.apple.mpegurl\")\n ) {\n mainPlayerVideoTag().src = details.stream_link!;\n\n // Append Query Parameter to .ts Chunks\n appendQueryParamsToChunksIOS();\n }\n return () => {\n dispatch(setClearMiniPlayerSlice());\n hls.detachMedia();\n hls.off(Hls.Events.MEDIA_ATTACHED, () =>\n handleMiniPlayerMediaAttached(hls)\n );\n };\n }, []);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => {\n if (params.currentTime) {\n dispatch(setPlayMiniPlayer(true));\n miniPlayerVideoTag().currentTime = params.currentTime;\n dispatch(setPlay(false));\n mainPlayerVideoTag()?.pause();\n }\n }, [params.currentTime]);\n\n return (\n <>\n <video\n onPlay={() => dispatch(setPlayMiniPlayer(true))}\n onEnded={() => dispatch(setPlayMiniPlayer(false))}\n onError={handleVideoError}\n poster={params.banner ? params.banner : details.banner}\n id={`mini-player-video-tag`}\n className=\"pl-absolute pl-bg-black pl-w-full pl-h-full\"\n autoPlay={true}\n muted={true}\n />\n </>\n );\n};\n\nexport default MiniPlayerNonStaticVideoTag;\n","import { useEffect } from \"react\";\nimport { useAppDispatch, useAppSelector } from \"../../../../helpers/redux/hooks\";\nimport { mainPlayerVideoTag, miniPlayerVideoTag } from \"../../../../helpers/constants\";\nimport { setPlayMiniPlayer } from \"../../../../helpers/redux/slices/miniPlayerSlice\";\nimport { setPlay } from \"../../../../helpers/redux/slices/controllerSlice\";\nimport { handleVideoError } from \"../../../../helpers/redux/actions/playerCore.actions\";\n\nconst MiniPlayerStaticVideoTag = () => {\n\n const dispatch = useAppDispatch();\n const params = useAppSelector(state => state.miniPlayer.params);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => {\n if(params.currentTime) {\n dispatch(setPlayMiniPlayer(true));\n miniPlayerVideoTag().currentTime = params.currentTime;\n dispatch(setPlay(false));\n mainPlayerVideoTag()?.pause();\n }\n },[params.currentTime])\n\n return (\n <video \n poster={params.banner} \n onPlay={() => dispatch(setPlayMiniPlayer(true))}\n onEnded={() => dispatch(setPlayMiniPlayer(false))}\n onError={handleVideoError}\n src={params.id} \n id={`mini-player-video-tag`} \n className=\"pl-absolute pl-bg-black pl-w-full pl-h-full\"\n autoPlay\n />\n )\n}\n\nexport default MiniPlayerStaticVideoTag;"]}