cafe-video-player 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.mjs.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/videoPlayerLibrary/index.ts","../src/videoPlayerLibrary/videoPlayerLibrary.tsx","../src/videoPlayerLibrary/components/videoPlayer/videoPlayer.tsx","../src/videoPlayerLibrary/helpers/hooks/useHandleParams.tsx","../src/videoPlayerLibrary/components/videoPlayer/staticPlayer/staticPlayer.tsx","../src/videoPlayerLibrary/components/custom-components/videoArea/videoArea.tsx","../src/videoPlayerLibrary/components/custom-components/backwardForward/backwardForward.tsx","../src/videoPlayerLibrary/images/importImages.ts","../src/videoPlayerLibrary/components/custom-components/touchVolumeBrightness/touchVolumeBrightness.tsx","../src/videoPlayerLibrary/components/icon-components/mute.tsx","../src/videoPlayerLibrary/components/icon-components/unMute.tsx","../src/videoPlayerLibrary/components/custom-components/header/header.tsx","../src/videoPlayerLibrary/components/custom-components/title/title.tsx","../src/videoPlayerLibrary/components/custom-components/lockUnlock/lock.tsx","../src/videoPlayerLibrary/components/custom-components/main/main.tsx","../src/videoPlayerLibrary/components/custom-components/playPause/playPause.tsx","../src/videoPlayerLibrary/components/custom-components/footer/footer.tsx","../src/videoPlayerLibrary/components/custom-components/footer/progressbar/progressbar.tsx","../src/videoPlayerLibrary/components/custom-components/tooltip/tooltip.tsx","../src/videoPlayerLibrary/helpers/redux/actions/progressbar.actions.ts","../src/videoPlayerLibrary/components/custom-components/footer/controllbar/controllbar.tsx","../src/videoPlayerLibrary/components/custom-components/fullScreen/fullScreen.tsx","../src/videoPlayerLibrary/components/custom-components/footer/controllbar/controllbarTooltip.tsx","../src/videoPlayerLibrary/components/custom-components/pictureInPicture/pictureInPicture.tsx","../src/videoPlayerLibrary/components/custom-components/soundVolume/soundVolume.tsx","../src/videoPlayerLibrary/components/custom-components/settings/settings.tsx","../src/videoPlayerLibrary/components/custom-components/popover/popover.tsx","../src/videoPlayerLibrary/components/custom-components/qualityLevels/qualityLevels.tsx","../src/videoPlayerLibrary/helpers/hooks/useOnClickOutside.tsx","../src/videoPlayerLibrary/components/custom-components/speed/speed.tsx","../src/videoPlayerLibrary/components/custom-components/elapsedTime/elapsedTime.tsx","../src/videoPlayerLibrary/components/custom-components/lockUnlock/unlock.tsx","../src/videoPlayerLibrary/components/custom-components/checkInternet/checkInternet.tsx","../src/videoPlayerLibrary/components/custom-components/videoTag/videoTag.tsx","../src/videoPlayerLibrary/helpers/hooks/useFullScreen.tsx","../src/videoPlayerLibrary/helpers/hooks/useActiveInActive.tsx","../src/videoPlayerLibrary/components/videoPlayer/vodPlayer/vodPlayer.tsx","../src/videoPlayerLibrary/helpers/hooks/useGetData/useGetData.tsx","../src/videoPlayerLibrary/helpers/hooks/useGetData/useGetDetails.tsx","../src/videoPlayerLibrary/helpers/hooks/useHandleScroll.tsx","../src/videoPlayerLibrary/components/custom-components/notActive/notActive.tsx"],"sourcesContent":["export { default } from \"./videoPlayerLibrary\";\r\n","\"use client\";\r\n\r\nimport { Provider } from \"react-redux\";\r\nimport { IParams } from \"./helpers/interfaces/interfaces\";\r\nimport store from \"./helpers/redux/store\";\r\nimport VideoPlayer from \"./components/videoPlayer/videoPlayer\";\r\n\r\nconst VideoPlayerLibrary = ({ params }: {params: IParams}) => {\r\n return (\r\n <Provider store={store}>\r\n <VideoPlayer params={params} />\r\n </Provider>\r\n )\r\n}\r\n\r\nexport default VideoPlayerLibrary;","\"use client\";\r\n\r\nimport { useEffect } from \"react\";\r\nimport { conditions } from \"../../helpers/conditions/conditions\";\r\nimport useHandleParams from \"../../helpers/hooks/useHandleParams\";\r\nimport { ConditionName, zIndex } from \"../../helpers/interfaces/enums\";\r\nimport { IParams } from \"../../helpers/interfaces/interfaces\";\r\nimport { useAppSelector } from \"../../helpers/redux/hooks\";\r\nimport StaticPlayer from \"./staticPlayer/staticPlayer\";\r\nimport VodPlayer from \"./vodPlayer/vodPlayer\";\r\nimport { shallowEqual } from \"react-redux\";\r\nimport { clearRedux } from \"../../helpers/helpers\";\r\n\r\nconst VideoPlayer = ({ params }: { params: IParams }) => {\r\n useHandleParams(params);\r\n\r\n useAppSelector(({ controller: { isFullScreen } }) => ({ isFullScreen }), shallowEqual);\r\n useAppSelector(({ videoData: { isReady, params, isComplexPortrait } }) => ({ isReady, params, isComplexPortrait }), shallowEqual);\r\n\r\n useEffect(() => {\r\n return () => clearRedux();\r\n }, []);\r\n\r\n let element = <></>;\r\n if (conditions(ConditionName.isReady)) {\r\n element = (\r\n <div\r\n className={`${!conditions(ConditionName.isTouchScreen) && \"pl-rounded-[12px]\"} ${conditions(ConditionName.isFullScreen) && \"!pl-overflow-hidden pl-fixed pl-top-0 pl-right-0 pl-w-screen pl-h-screen\"}`}\r\n style={{ zIndex: zIndex.videoPlayerInFullScreen, touchAction: \"pan-y\" }}\r\n >\r\n {conditions(ConditionName.isStaticFormat) ? (\r\n <StaticPlayer />\r\n ) : (\r\n <VodPlayer />\r\n )}\r\n </div>\r\n );\r\n } else element = <div className=\"pl-w-full !pl-aspect-video pl-bg-white dark:pl-bg-black pl-overflow-hidden pl-max-h-screen pl-rounded-[12px]\" />;\r\n\r\n return (\r\n <div dir=\"rtl\" className=\"pl-rounded-[12px] pl-w-full pl-h-full\" id=\"parent-player\">{element}</div>\r\n )\r\n}\r\n\r\nexport default VideoPlayer;","\"use client\";\r\n\r\nimport { useEffect } from \"react\";\r\nimport { getUUID, staticFormats, strToObj } from \"../helpers\";\r\nimport { shallowEqual } from \"react-redux\";\r\nimport Cookies from \"js-cookie\";\r\nimport { useAppDispatch, useAppSelector } from \"../redux/hooks\";\r\nimport { IParams } from \"../interfaces/interfaces\";\r\nimport { setIsReady, setPlayerParams } from \"../redux/slices/videoDataSlice\";\r\n\r\nconst useHandleParams = (query: any) => {\r\n const dispatch = useAppDispatch();\r\n\r\n let queryParams: IParams = {};\r\n\r\n const handleSetParamsInRedux = () => {\r\n dispatch(setPlayerParams(queryParams));\r\n dispatch(setIsReady(true));\r\n }\r\n\r\n const handleFeatureSet = () => {\r\n let featureSet = queryParams.featureSet;\r\n if (typeof queryParams.featureSet === \"string\") featureSet = strToObj(queryParams.featureSet);\r\n queryParams.featureSet = featureSet;\r\n return queryParams;\r\n };\r\n\r\n const handleAddUUID = () => {\r\n if (!!query.uuid) {\r\n localStorage.setItem(\"hamrahiUUID\", query.uuid!);\r\n queryParams.uuid = query.uuid;\r\n }\r\n };\r\n\r\n const handleXToken = () => {\r\n const xTokenInCookie = Cookies.get(\"xToken\");\r\n if (xTokenInCookie && !queryParams.xToken) queryParams.xToken = xTokenInCookie;\r\n };\r\n\r\n const handleLiveAndVodParams = () => {\r\n queryParams = {\r\n provider: \"unknown\",\r\n chart: \"true\",\r\n authentication: \"true\",\r\n ...query\r\n };\r\n };\r\n\r\n const handleStaticParams = () => {\r\n const eUrl = String(query[\"e-url\"]);\r\n const eCover = String(query[\"e-cover\"]);\r\n queryParams = {\r\n src: eUrl.endsWith(\"/\") ? window.atob(eUrl.slice(0, -1)) : window.atob(eUrl),\r\n type: query.type,\r\n fullscreen: query.fullscreen,\r\n autoplay: query.autoplay,\r\n snapshot: query.snapshot,\r\n portrait: \"false\",\r\n fullrate: query.fullrate,\r\n width: query.width,\r\n height: query.height,\r\n cover: !!eCover && eCover !== \"undefined\" ? window.atob(eCover) : undefined,\r\n onFinished: query.onFinished,\r\n onSnapshot: query.onSnapshot,\r\n uuid: getUUID()\r\n };\r\n };\r\n\r\n const handleParams = async () => {\r\n queryParams = {};\r\n if (Object.keys(query).includes(\"type\")) {\r\n if ([\"live\", \"vod\", \"archive\", \"clip\"].includes(String(query.type))) {\r\n handleLiveAndVodParams();\r\n handleXToken();\r\n } else if (staticFormats(String(query.type))) handleStaticParams();\r\n handleAddUUID();\r\n if (Object.keys(queryParams)) handleFeatureSet();\r\n handleSetParamsInRedux();\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n handleParams();\r\n }, [query]);\r\n\r\n};\r\n\r\nexport default useHandleParams;\r\n","\"use client\";\r\n\r\nimport { conditions } from \"../../../helpers/conditions/conditions\";\r\nimport { ConditionName } from \"../../../helpers/interfaces/enums\";\r\nimport VideoArea from \"../../custom-components/videoArea/videoArea\";\r\n\r\nconst StaticPlayer = () => {\r\n return (\r\n <div\r\n className={`pl-w-full pl-aspect-video ${!conditions(ConditionName.isTouchScreen) && !conditions(ConditionName.isFullScreen) && \"pl-rounded-[12px]\"}`}\r\n >\r\n <VideoArea />\r\n </div>\r\n )\r\n}\r\n\r\nexport default StaticPlayer;","\"use client\";\r\n\r\nimport Image from \"next/legacy/image\";\r\nimport { MouseEvent, useEffect, useState } from \"react\";\r\nimport { shallowEqual } from \"react-redux\";\r\nimport CloseIcon from \"../../icon-components/closeIcon\";\r\nimport BackwardForward from \"../backwardForward/backwardForward\";\r\nimport TouchVolumeBrightness from \"../touchVolumeBrightness/touchVolumeBrightness\";\r\nimport VideoAreaShadow from \"../videoAreaShadow.tsx/videoAreaShadow\";\r\nimport Header from \"../header/header\";\r\nimport Main from \"../main/main\";\r\nimport Footer from \"../footer/footer\";\r\nimport VideoTag from \"../videoTag/videoTag\";\r\nimport { useAppDispatch, useAppSelector } from \"../../../helpers/redux/hooks\";\r\nimport { videoTag } from \"../../../helpers/constants\";\r\nimport { conditions } from \"../../../helpers/conditions/conditions\";\r\nimport { ConditionName, zIndex } from \"../../../helpers/interfaces/enums\";\r\nimport { handleFullScreen, handlePlayPause, handleVideoElementSizeInfo } from \"../../../helpers/redux/actions/controller.actions\";\r\nimport { setShowScreen } from \"../../../helpers/redux/slices/videoDataSlice\";\r\nimport { isTouchScreen } from \"../../../helpers/helpers\";\r\nimport useFullScreen from \"../../../helpers/hooks/useFullScreen\";\r\nimport useActiveInActive from \"../../../helpers/hooks/useActiveInActive\";\r\nimport { setShowMiniPlayer } from \"../../../helpers/redux/slices/controllerSlice\";\r\nimport PlayPause from \"../playPause/playPause\";\r\nimport IMAGES from \"../../../images/importImages\";\r\nimport CheckInternet from \"../checkInternet/checkInternet\";\r\n\r\nconst VideoArea = () => {\r\n\r\n const [isRightDoubleTouched, setIsRightDoubleTouched] = useState<boolean>(false);\r\n const [isLeftDoubleTouched, setIsLeftDoubleTouched] = useState<boolean>(false);\r\n\r\n const dispatch = useAppDispatch();\r\n\r\n const { details } = useAppSelector(\r\n ({ videoData: { details, params, videoElementSizeInfo } }) => ({\r\n details,\r\n params,\r\n videoElementSizeInfo\r\n }),\r\n shallowEqual\r\n );\r\n\r\n const { firstPlay, showMiniPlayer, isFullScreen } = useAppSelector(\r\n ({ controller: { firstPlay, showMiniPlayer, isFullScreen, isLoading } }) => ({\r\n firstPlay,\r\n showMiniPlayer,\r\n isFullScreen,\r\n isLoading\r\n }),\r\n shallowEqual\r\n );\r\n\r\n useEffect(() => {\r\n if (videoTag()) {\r\n let timeout: any;\r\n const handleResize = () => {\r\n if (!conditions(ConditionName.showMiniPlayer)) {\r\n timeout = setTimeout(\r\n () => {\r\n handleVideoElementSizeInfo();\r\n dispatch(setShowScreen(true));\r\n },\r\n isTouchScreen() ? 0 : 300\r\n );\r\n }\r\n };\r\n handleResize();\r\n window.addEventListener(\"resize\", handleResize);\r\n const appScroll = document.getElementsByClassName(\"app-scroll\")[0];\r\n if (appScroll) appScroll.addEventListener(\"scroll\", handleResize);\r\n\r\n return () => {\r\n window.removeEventListener(\"resize\", handleResize);\r\n if (appScroll) appScroll.removeEventListener(\"scroll\", handleResize);\r\n clearTimeout(timeout);\r\n };\r\n }\r\n }, [firstPlay, showMiniPlayer, isFullScreen, videoTag()]);\r\n\r\n useEffect(() => {\r\n const timeout = setTimeout(() => handleVideoElementSizeInfo(), 100);\r\n\r\n return () => clearTimeout(timeout);\r\n }, [showMiniPlayer]);\r\n\r\n useFullScreen();\r\n\r\n const handleDoubleClick = (event: any) => {\r\n if (!conditions(ConditionName.isTouchScreen) && event.target.nodeName !== \"INPUT\") handleFullScreen();\r\n };\r\n\r\n useActiveInActive(isRightDoubleTouched, isLeftDoubleTouched);\r\n\r\n return (\r\n <>\r\n {conditions(ConditionName.showMiniPlayer) && <div id=\"black-video-area\" className={`pl-relative pl-w-full pl-aspect-video pl-bg-black pl-rounded ${!conditions(ConditionName.isTouchScreen) && !conditions(ConditionName.isFullScreen) && \"!pl-rounded-[12px]\"}`} />}\r\n <div\r\n id=\"video-area\"\r\n style={{\r\n zIndex: conditions(ConditionName.showMiniPlayer)\r\n ? zIndex.videoPlayerInPictureInPicture\r\n : conditions(ConditionName.isFullScreen)\r\n ? zIndex.videoPlayerInFullScreen\r\n : \"unset\"\r\n }}\r\n onClick={(event) => conditions(ConditionName.playByClickPoster) && handlePlayPause(event)}\r\n onDoubleClick={(event: MouseEvent<HTMLDivElement>) => !conditions(ConditionName.showMiniPlayer) && handleDoubleClick(event)}\r\n className={`!pl-bg-contain !pl-bg-center !pl-bg-no-repeat pl-h-full pl-bg-black pl-max-h-screen pl-aspect-video pl-flex pl-items-center ${!conditions(ConditionName.isTouchScreen) && !conditions(ConditionName.isFullScreen) && \"!pl-rounded-[12px]\"} ${conditions(ConditionName.isFullScreen) && \"!pl-fixed !pl-w-screen dvh\"} ${conditions(ConditionName.showMiniPlayer) ? \"!pl-fixed !pl-bottom-[10px] !pl-right-[10px] !pl-w-[95%] !pl-max-w-[400px] pl-max-h-[225px] pl-aspect-video !pl-rounded-[8px]\" : \"pl-w-full pl-relative\"} ${conditions(ConditionName.showMiniPlayer) && conditions(ConditionName.isTouchScreenPortrait) && \"!pl-w-[300px] !pl-aspect-video\"} ${!conditions(ConditionName.isActiveElements) && \"pl-cursor-none\"}`}\r\n >\r\n <div className={`pl-absolute pl-w-full pl-aspect-video pl-transition-all pl-duration-500 pl-bg-black ${!conditions(ConditionName.isTouchScreen) && !conditions(ConditionName.isFullScreen) && \"!pl-rounded-[12px]\"} ${conditions(ConditionName.isActiveElements) ? \"pl-bg-opacity-50\" : \"pl-bg-opacity-0\"}`} />\r\n {conditions(ConditionName.showBanner) && (\r\n <div className=\"pl-absolute pl-w-full pl-h-full pl-flex pl-justify-center\">\r\n <Image src={details.banner} layout=\"fill\" alt=\"sdfdf\" objectFit=\"contain\" className={`${!conditions(ConditionName.isTouchScreen) && !conditions(ConditionName.isFullScreen) && \"pl-rounded-[12px]\"}`} />\r\n </div>\r\n )}\r\n {conditions(ConditionName.showMiniPlayer) && (\r\n <div className=\"pl-z-[100]\">\r\n <div className=\"pl-absolute pl-top-3 pl-right-3 pl-cursor-pointer\" onClick={() => dispatch(setShowMiniPlayer(undefined))}>\r\n <Image\r\n src={IMAGES.closeSquare}\r\n alt=\"close-square\"\r\n width={16}\r\n height={16}\r\n />\r\n </div>\r\n <div className={`pl-absolute pl-bottom-0 pl-right-[50%] pl-mr-[-25px] animate__animated animate__faster ${conditions(ConditionName.isActiveElements) && !conditions(ConditionName.isLoading)\r\n ? \"animate__fadeIn pl-pointer-events-auto\"\r\n : \"animate__fadeOut pl-pointer-events-none\"\r\n }`}><PlayPause /></div>\r\n <CheckInternet />\r\n </div>\r\n )}\r\n {conditions(ConditionName.showTouchVolumeBrightness) && !conditions(ConditionName.isMiniPlayer) && <TouchVolumeBrightness />}\r\n {conditions(ConditionName.showBackwardForward) && (\r\n <div\r\n className={`pl-absolute pl-top-0 pl-right-0 pl-w-full pl-h-full pl-overflow-hidden pl-flex pl-items-center`}\r\n style={{\r\n zIndex: isLeftDoubleTouched || isRightDoubleTouched ? zIndex.backwardForwardActive : zIndex.backwardForwardInActive\r\n }}\r\n >\r\n <BackwardForward\r\n type=\"touchForward\"\r\n isRightDoubleTouched={isRightDoubleTouched}\r\n setIsRightDoubleTouched={setIsRightDoubleTouched}\r\n />\r\n <BackwardForward\r\n type=\"touchBackward\"\r\n isLeftDoubleTouched={isLeftDoubleTouched}\r\n setIsLeftDoubleTouched={setIsLeftDoubleTouched}\r\n />\r\n </div>\r\n )}\r\n <VideoTag />\r\n {!conditions(ConditionName.isRaw) && !conditions(ConditionName.hasContinuousPlayback) && !conditions(ConditionName.showMiniPlayer) && (\r\n <div\r\n id=\"playerElements\"\r\n className={`pl-absolute pl-top-0 pl-right-0 pl-w-full pl-h-full ${conditions(ConditionName.showAutoPlayPopover) && \"pl-bg-black\"\r\n }`}\r\n >\r\n <div className={`pl-flex pl-flex-col pl-justify-between pl-w-full pl-h-full`}>\r\n {conditions(ConditionName.showHeader) && <Header />}\r\n {conditions(ConditionName.showMain) && !conditions(ConditionName.hasContinuousPlayback) && <Main />}\r\n {conditions(ConditionName.showFooter) && <Footer />}\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n </>\r\n )\r\n}\r\n\r\nexport default VideoArea;","import { useEffect, useRef, useState } from \"react\";\r\nimport { shallowEqual } from \"react-redux\";\r\nimport { useDoubleTap } from \"use-double-tap\";\r\nimport { useAppDispatch, useAppSelector } from \"../../../helpers/redux/hooks\";\r\nimport { IBackwardForwardProps } from \"../../../helpers/interfaces/interfaces\";\r\nimport { setActiveElements } from \"../../../helpers/redux/slices/controllerSlice\";\r\nimport { videoTag } from \"../../../helpers/constants\";\r\nimport { handleBackwardForward } from \"../../../helpers/redux/actions/controller.actions\";\r\nimport { ConditionName } from \"../../../helpers/interfaces/enums\";\r\nimport { conditions } from \"../../../helpers/conditions/conditions\";\r\nimport { handleRippleCircle } from \"../../../helpers/helpers\";\r\nimport IMAGES from \"../../../images/importImages\";\r\nimport Image from \"next/legacy/image\";\r\n\r\nconst hideTime = 1000;\r\n\r\nconst BackwardForward = ({\r\n type,\r\n isRightDoubleTouched,\r\n isLeftDoubleTouched,\r\n setIsRightDoubleTouched,\r\n setIsLeftDoubleTouched\r\n}: IBackwardForwardProps) => {\r\n const [backwardForwardCount, setBackwardForwardCount] = useState<number>(15);\r\n const [hide, setHide] = useState<boolean>(false);\r\n const backwardForwardCountRef = useRef<number>(backwardForwardCount);\r\n\r\n const dispatch = useAppDispatch();\r\n const { duration } = useAppSelector(({ controller: { currentTime, duration, showMiniPlayer } }) => ({ currentTime, duration, showMiniPlayer }), shallowEqual);\r\n const { videoElementSizeInfo } = useAppSelector(\r\n ({ videoData: { videoElementSizeInfo, params } }) => ({ videoElementSizeInfo, params }),\r\n shallowEqual\r\n );\r\n\r\n const timeoutRef = useRef<any>(null);\r\n\r\n useEffect(() => {\r\n backwardForwardCountRef.current = backwardForwardCount;\r\n }, [backwardForwardCount]);\r\n\r\n let doubleTouch: any = undefined;\r\n\r\n doubleTouch = useDoubleTap((event) => {\r\n if ([\"touchBackward\", \"touchForward\"].includes(type)) {\r\n event.stopPropagation();\r\n if (type === \"touchBackward\" && setIsLeftDoubleTouched) setIsLeftDoubleTouched(true);\r\n else if (type === \"touchForward\" && setIsRightDoubleTouched) setIsRightDoubleTouched(true);\r\n clearTimeout(timeoutRef.current);\r\n timeoutRef.current = setTimeout(() => setHide(true), hideTime);\r\n }\r\n }, 200);\r\n\r\n useEffect(() => {\r\n if (hide) {\r\n setHide(false);\r\n dispatch(setActiveElements(false));\r\n if (isRightDoubleTouched && setIsRightDoubleTouched) {\r\n setIsRightDoubleTouched(false);\r\n if (videoTag().duration - videoTag().currentTime <= backwardForwardCountRef.current) handleBackwardForward(type, videoTag().duration);\r\n else handleBackwardForward(type, backwardForwardCountRef.current);\r\n setBackwardForwardCount(15);\r\n } else if (isLeftDoubleTouched && setIsLeftDoubleTouched) {\r\n setIsLeftDoubleTouched(false);\r\n if (videoTag().currentTime <= backwardForwardCountRef.current) handleBackwardForward(type, 0);\r\n else handleBackwardForward(type, backwardForwardCountRef.current);\r\n setBackwardForwardCount(15);\r\n }\r\n }\r\n }, [hide]);\r\n\r\n const handleTouchStart = (event: any) => {\r\n setBackwardForwardCount((prev) => prev + 15);\r\n if (conditions(ConditionName.isTouchScreenLandscape)) handleRippleCircle(event, type);\r\n clearTimeout(timeoutRef.current);\r\n timeoutRef.current = setTimeout(() => setHide(true), hideTime);\r\n };\r\n\r\n let component;\r\n\r\n if ([\"backward\", \"forward\"].includes(type)) {\r\n component = (\r\n <div\r\n className={`${\r\n !conditions(ConditionName.isTouchScreen) && \"hover:pl-scale-125\"\r\n } pl-transition-transform pl-ease-in-out pl-cursor-pointer ${\r\n type === \"backward\" && (videoTag().currentTime >= 15 ? \"pl-opacity-100\" : \"pl-opacity-30 pl-cursor-default hover:pl-scale-100\")\r\n } ${\r\n type === \"forward\" &&\r\n (duration - videoTag().currentTime >= 15 ? \"pl-opacity-100\" : \"pl-opacity-30 pl-cursor-default hover:pl-scale-100\")\r\n }}`}\r\n onContextMenu={(event) => event.preventDefault()}\r\n >\r\n <Image\r\n alt={type === \"backward\" ? \"backward-icon\" : \"forward-icon\"}\r\n src={type === \"backward\" ? IMAGES.backward15 : IMAGES.forward15}\r\n width={24} \r\n height={24}\r\n onClick={() => handleBackwardForward(type, backwardForwardCount)}\r\n onDoubleClick={(event: any) => event.stopPropagation()}\r\n />\r\n </div>\r\n );\r\n } else if ([\"touchBackward\", \"touchForward\"].includes(type)) {\r\n component = (\r\n <div\r\n id={type}\r\n className={`pl-relative pl-flex pl-flex-col pl-justify-center pl-items-center pl-gap-2 pl-overflow-hidden ${\r\n type === \"touchBackward\" ? \"pl-rounded-r-full\" : \"pl-rounded-l-full\"\r\n }`}\r\n style={{ width: videoElementSizeInfo.width, height: videoElementSizeInfo.width }}\r\n {...doubleTouch}\r\n >\r\n {(isRightDoubleTouched || isLeftDoubleTouched) && (\r\n <div\r\n className={`pl-w-full pl-h-full pl-flex pl-flex-col pl-justify-center pl-items-center pl-gap-2 pl-p-5 pl-bg-secondary-100/[0.3]`}\r\n onTouchStart={handleTouchStart}\r\n >\r\n <div\r\n className={`${\r\n type === \"touchBackward\" ? \"pl-arrow-left\" : \"pl-arrow-right pl-gap-2\"\r\n } pl-flex pl-justify-center pl-items-center`}\r\n >\r\n <Image\r\n alt=\"arrow-left-icon\"\r\n src={IMAGES.arrowLeft}\r\n className={`${type === \"touchForward\" && \"pl-rotate-180\"}`}\r\n width={24}\r\n height={24}\r\n />\r\n <Image\r\n alt=\"arrow-left-icon\"\r\n src={IMAGES.arrowLeft}\r\n className={`${type === \"touchForward\" && \"pl-rotate-180\"}`}\r\n width={24}\r\n height={24}\r\n />\r\n <Image\r\n alt=\"arrow-left-icon\"\r\n src={IMAGES.arrowLeft}\r\n className={`${type === \"touchForward\" && \"pl-rotate-180\"}`}\r\n width={24}\r\n height={24}\r\n />\r\n </div>\r\n <p className=\"pl-text-center pl-text-[14px] pl-font-normal pl-text-white\">{backwardForwardCount} ثانیه</p>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n }\r\n\r\n return <>{component}</>;\r\n};\r\n\r\nexport default BackwardForward;\r\n","const IMAGES: any = {\r\n fullScreen: require(\"./svg/FullScreen.svg\"),\r\n nonFullScreen: require(\"./svg/NonFullScreen.svg\"),\r\n settings: require(\"./svg/Settings.svg\"),\r\n bigPlay: require(\"./svg/BigPlay.svg\"),\r\n bigPause: require(\"./svg/BigPause.svg\"),\r\n mute: require(\"./svg/Mute.svg\"),\r\n unMute: require(\"./svg/UnMute.svg\"),\r\n backward15: require(\"./svg/Backward15.svg\"),\r\n forward15: require(\"./svg/Forward15.svg\"),\r\n chevronLeft: require(\"./svg/ChevronLeft.svg\"),\r\n pictureInPicture: require(\"./svg/PictureInPicture.svg\"),\r\n lock: require(\"./svg/Lock.svg\"),\r\n unlock: require(\"./svg/Unlock.svg\"),\r\n arrowLeft: require(\"./svg/ArrowLeft.svg\"),\r\n speed: require(\"./svg/Speed.svg\"),\r\n speed1: require(\"./svg/Speed1.svg\"),\r\n tick: require(\"./svg/Tick.svg\"),\r\n qualitySetting: require(\"./svg/QualitySetting.svg\"),\r\n qualitySetting1: require(\"./svg/QualitySetting1.svg\"),\r\n infoCircle: require(\"./svg/InfoCircle.svg\"),\r\n notFound: require(\"./svg/NotFound.svg\"),\r\n closeSquare: require(\"./svg/CloseSquare.svg\"),\r\n sun: require(\"./svg/Sun.svg\"),\r\n};\r\n\r\nexport default IMAGES;\r\n","import Image from \"next/legacy/image\";\r\nimport { useEffect, useRef, useState } from \"react\";\r\nimport { shallowEqual } from \"react-redux\";\r\nimport Mute from \"../../icon-components/mute\";\r\nimport UnMute from \"../../icon-components/unMute\";\r\nimport { useAppDispatch, useAppSelector } from \"../../../helpers/redux/hooks\";\r\nimport { ConditionName } from \"../../../helpers/interfaces/enums\";\r\nimport { conditions } from \"../../../helpers/conditions/conditions\";\r\nimport { checkParentTarget } from \"../../../helpers/helpers\";\r\nimport store from \"../../../helpers/redux/store\";\r\nimport { brightnessLog, volumeLog } from \"../../../helpers/logs/logs\";\r\nimport { sendFluentLog } from \"../../../helpers/logs/fluentdLogger\";\r\nimport { setActiveElements } from \"../../../helpers/redux/slices/controllerSlice\";\r\nimport { setUserSettings } from \"../../../helpers/redux/slices/userSlice\";\r\nimport { videoTag } from \"../../../helpers/constants\";\r\nimport IMAGES from \"../../../images/importImages\";\r\n\r\nconst TouchVolumeBrightness = () => {\r\n const [type, setType] = useState<string>(\"\");\r\n\r\n const dispatch = useAppDispatch();\r\n const { settings } = useAppSelector(({ user: { settings } }) => ({ settings }), shallowEqual);\r\n\r\n const primaryBrightnessValueRef = useRef<number>(settings.brightness);\r\n const primaryVolumeValueRef = useRef<number>(settings.volume);\r\n const typeRef = useRef<string>(type);\r\n\r\n useEffect(() => {\r\n typeRef.current = type;\r\n }, [type]);\r\n\r\n useEffect(() => {\r\n let startPositionY = 0;\r\n\r\n const handleTouchStartScreen = (event: any) => {\r\n if (conditions(ConditionName.hidePopovers) && !checkParentTarget(event, \"progress-area\")) startPositionY = event.touches[0].clientY;\r\n };\r\n\r\n const handleTouchMoveScreen = (event: any) => {\r\n if (conditions(ConditionName.hidePopovers) && !checkParentTarget(event, \"progress-area\")) {\r\n event.stopPropagation();\r\n if (event.touches[0].clientX > window.innerWidth / 2) handleTouchMove(event, \"volume\", startPositionY, window.innerHeight);\r\n else if (event.touches[0].clientX < window.innerWidth / 2) handleTouchMove(event, \"brightness\", startPositionY, window.innerHeight);\r\n }\r\n };\r\n\r\n const handleTouchEndScreen = () => {\r\n const { settings } = store.getState().user;\r\n if (typeRef.current === \"brightness\" && primaryBrightnessValueRef.current !== settings.brightness) {\r\n sendFluentLog(brightnessLog(primaryBrightnessValueRef.current, settings.brightness));\r\n primaryBrightnessValueRef.current = settings.brightness;\r\n } else if (typeRef.current === \"volume\" && primaryVolumeValueRef.current !== settings.volume) {\r\n sendFluentLog(volumeLog(primaryVolumeValueRef.current, settings.volume));\r\n primaryVolumeValueRef.current = settings.volume;\r\n }\r\n setTimeout(() => setType(\"\"), 500);\r\n };\r\n\r\n document.addEventListener(\"touchstart\", (event: any) => handleTouchStartScreen(event));\r\n document.addEventListener(\"touchmove\", (event: any) => handleTouchMoveScreen(event));\r\n document.addEventListener(\"touchend\", () => handleTouchEndScreen());\r\n\r\n return () => {\r\n document.removeEventListener(\"touchstart\", (event: any) => handleTouchStartScreen(event));\r\n document.removeEventListener(\"touchmove\", (event: any) => handleTouchMoveScreen(event));\r\n document.removeEventListener(\"touchend\", () => handleTouchEndScreen());\r\n };\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (settings.volume === 0 && !type) primaryVolumeValueRef.current = 0;\r\n }, [settings.volume]);\r\n\r\n const handleTouchMove = (event: any, type: string, startPositionY: number, area: number) => {\r\n const { settings } = store.getState().user;\r\n const { activePointerProgressBar } = store.getState().controller;\r\n try {\r\n if (!activePointerProgressBar) dispatch(setActiveElements(false));\r\n event.stopPropagation();\r\n setType(type);\r\n const { height } = document.getElementsByClassName(\"pl-bar\")[0].getBoundingClientRect();\r\n if (type === \"volume\") {\r\n const value = settings.volume + (((startPositionY - event.touches[0].clientY) / 40) * height) / area;\r\n let volumeCount: number;\r\n if (value > 100) volumeCount = 100;\r\n else if (value < 0) volumeCount = 0;\r\n else volumeCount = Math.ceil(Math.abs(value));\r\n dispatch(setUserSettings({ ...settings, volume: volumeCount }));\r\n videoTag().volume = volumeCount / 100;\r\n } else if (type === \"brightness\") {\r\n const value = settings.brightness + (((startPositionY - event.touches[0].clientY) / 40) * height) / area;\r\n if (value > 100) dispatch(setUserSettings({ ...settings, brightness: 100 }));\r\n else if (value < 0) dispatch(setUserSettings({ ...settings, brightness: 0 }));\r\n else dispatch(setUserSettings({ ...settings, brightness: Math.ceil(Math.abs(value)) }));\r\n }\r\n } catch (error) {\r\n return false;\r\n }\r\n };\r\n\r\n return (\r\n <div id=\"volume-brightness\">\r\n <div\r\n className={`pl-fixed pl-w-screen pl-h-screen pl-top-0 pl-right-0 pl-bg-black`}\r\n style={{ opacity: settings.brightness < 10 ? 0.9 : 1 - settings.brightness / 100 }}\r\n ></div>\r\n <div className=\"pl-absolute pl-top-0 pl-right-0 pl-w-full pl-h-full pl-flex pl-justify-between pl-items-center\">\r\n <div className=\"pl-flex pl-items-center pl-flex-1 pl-h-full pl-pr-6\">\r\n <div\r\n id={\"volume-progressbar\"}\r\n className={`pl-bar pl-relative pl-w-6 pl-h-[200px] ${\r\n type === \"volume\" && \"pl-bg-gray-300\"\r\n } pl-rounded-[50px] pl-overflow-hidden pl-max-h-[80vh] pl-flex pl-items-end pl-justify-end`}\r\n >\r\n {type === \"volume\" && (\r\n <>\r\n <div\r\n className=\"pl-absolute pl-w-full pl-bg-secondary-600 pl-rounded-b-[50px]\"\r\n style={{ height: `${settings.volume}%` }}\r\n />\r\n <div className=\"pl-mb-[7px] pl-ml-0.5 pl-flex pl-gap-1 pl-items-center\">\r\n <div className=\"pl-relative pl-flex pl-items-center\">\r\n {settings.volume > 0 && (\r\n <div className=\"pl-absolute pl-right-[2px] pl-w-2 pl-h-2 pl-rounded-full pl-flex pl-items-center pl-justify-center pl-border-2 pl-border-transparent pl-border-r-2 pl-border-r-z-yellow-light\" />\r\n )}\r\n {settings.volume > 33 && (\r\n <div className=\"pl-absolute pl-right-[-1px] pl-w-3 pl-h-3 pl-rounded-full pl-flex pl-items-center pl-justify-center pl-border-2 pl-border-transparent pl-border-r-2 pl-border-r-z-yellow-light\" />\r\n )}\r\n {settings.volume > 66 && (\r\n <div className=\"pl-absolute pl-right-[-4px] pl-w-4 pl-h-4 pl-rounded-full pl-flex pl-items-center pl-justify-center pl-border-2 pl-border-transparent pl-border-r-2 pl-border-r-z-yellow-light\" />\r\n )}\r\n </div>\r\n {settings.volume === 0 ? (\r\n <Mute className=\"pl-z-[1] pl-w-[13px] pl-h-[13px] pl-fill-dark-7\" />\r\n ) : (\r\n <UnMute className=\"pl-z-[1] pl-w-[13px] pl-h-[13px] pl-fill-dark-7\" />\r\n )}\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n </div>\r\n {type && (\r\n <div className=\"pl-bg-secondary-700/[0.8] pl-rounded-full pl-w-[54px] pl-h-[54px] pl-flex pl-items-center pl-justify-center pl-text-[32px] pl-font-normal pl-text-white\">\r\n {type === \"volume\" ? settings.volume : settings.brightness}\r\n </div>\r\n )}\r\n <div className=\"pl-flex pl-items-center pl-justify-end pl-flex-1 pl-h-full pl-pl-6\">\r\n <div\r\n id={\"brightness-progressbar\"}\r\n className={`pl-bar pl-relative pl-w-6 pl-h-[200px] ${\r\n type === \"brightness\" && \"pl-bg-gray-300\"\r\n } pl-rounded-[50px] pl-overflow-hidden pl-max-h-[80vh] pl-flex pl-items-end pl-justify-end`}\r\n >\r\n {type === \"brightness\" && (\r\n <>\r\n <div\r\n className=\"pl-absolute pl-w-full pl-bg-primary-600 pl-rounded-b-[50px]\"\r\n style={{ height: `${settings.brightness}%` }}\r\n />\r\n <div\r\n className=\"pl-mb-[7px] pl-ml-0.5 pl-flex pl-gap-1 pl-items-center\"\r\n style={{ opacity: settings.brightness / 100 }}\r\n >\r\n <Image alt=\"\" src={IMAGES.sun} className=\"pl-flex-1\" width={20} height={20} />\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default TouchVolumeBrightness;\r\n","import { IMuteProps } from \"../../helpers/interfaces/interfaces\";\r\n\r\nconst Mute = ({ className, onClick }: IMuteProps) => {\r\n return (\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className} onClick={onClick}>\r\n <g opacity=\"0.7\">\r\n <path d=\"M11.6997 10.7997C12.2247 10.2747 13.1247 10.6497 13.1247 11.3914V13.833C13.1247 15.2664 12.6081 16.3414 11.6831 16.858C11.3081 17.0664 10.8914 17.1664 10.4581 17.1664C9.79141 17.1664 9.07474 16.9414 8.34141 16.483L7.80807 16.1497C7.35807 15.8664 7.28307 15.233 7.65807 14.858L11.6997 10.7997Z\" />\r\n <path d=\"M18.141 1.85742C17.891 1.60742 17.4827 1.60742 17.2327 1.85742L13.1077 5.98242C13.0577 4.64909 12.5577 3.64909 11.6743 3.15742C10.741 2.64076 9.54935 2.77409 8.33268 3.53242L5.90768 5.04909C5.74102 5.14909 5.54935 5.20742 5.35768 5.20742H4.58268H4.16602C2.14935 5.20742 1.04102 6.31575 1.04102 8.33242V11.6658C1.04102 13.6824 2.14935 14.7908 4.16602 14.7908H4.29935L1.84935 17.2408C1.59935 17.4908 1.59935 17.8991 1.84935 18.1491C1.98268 18.2658 2.14102 18.3324 2.30768 18.3324C2.47435 18.3324 2.63268 18.2658 2.75768 18.1408L18.141 2.75742C18.3994 2.50742 18.3994 2.10742 18.141 1.85742Z\" />\r\n </g>\r\n </svg>\r\n );\r\n};\r\n\r\nexport default Mute;\r\n","import { IUnMuteProps } from \"../../helpers/interfaces/interfaces\";\r\n\r\nconst UnMute = ({ className, onClick }: IUnMuteProps) => {\r\n return (\r\n <svg width=\"13\" height=\"16\" viewBox=\"0 0 13 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className} onClick={onClick}>\r\n <path d=\"M10.6827 1.14944C9.74935 0.632778 8.55768 0.766111 7.34102 1.52444L4.90768 3.04944C4.74102 3.14944 4.54935 3.20778 4.35768 3.20778H3.58268H3.16602C1.14935 3.20778 0.0410156 4.31611 0.0410156 6.33278V9.66611C0.0410156 11.6828 1.14935 12.7911 3.16602 12.7911H3.58268H4.35768C4.54935 12.7911 4.74102 12.8494 4.90768 12.9494L7.34102 14.4744C8.07435 14.9328 8.79102 15.1578 9.45768 15.1578C9.89102 15.1578 10.3077 15.0578 10.6827 14.8494C11.6077 14.3328 12.1243 13.2578 12.1243 11.8244V4.17444C12.1243 2.74111 11.6077 1.66611 10.6827 1.14944Z\" />\r\n </svg>\r\n );\r\n};\r\n\r\nexport default UnMute;\r\n","import { shallowEqual } from \"react-redux\";\r\nimport Title from \"../title/title\";\r\nimport { useAppSelector } from \"../../../helpers/redux/hooks\";\r\nimport { conditions } from \"../../../helpers/conditions/conditions\";\r\nimport { ConditionName } from \"../../../helpers/interfaces/enums\";\r\nimport Lock from \"../lockUnlock/lock\";\r\n\r\nconst Header = () => {\r\n useAppSelector(({ controller: { lock, activeElements } }) => ({ lock, activeElements }), shallowEqual);\r\n\r\n return (\r\n <div className={`pl-flex pl-items-start pl-justify-end pl-mx-4 pl-mt-5`}>\r\n {conditions(ConditionName.showTitle) && <Title />}\r\n {conditions(ConditionName.isLock) && <Lock />}\r\n </div>\r\n );\r\n};\r\n\r\nexport default Header;\r\n","import { shallowEqual } from \"react-redux\";\r\nimport { useAppSelector } from \"../../../helpers/redux/hooks\";\r\nimport { ConditionName } from \"../../../helpers/interfaces/enums\";\r\nimport { conditions } from \"../../../helpers/conditions/conditions\";\r\n\r\nconst Title = () => {\r\n const { details, params } = useAppSelector(({ videoData: { details, params } }) => ({ details, params }), shallowEqual);\r\n\r\n return (\r\n <div\r\n className={`pl-w-full pl-max-w-[80%] pl-truncate pl-text-left pl-ml-4 pl-text-[16px] pl-font-normal pl-text-white pl-break-words pl-self-start animate__animated animate__faster ${\r\n conditions(ConditionName.isActiveElements) ? \"animate__fadeIn pl-opacity-100\" : \"pl-opacity-0 animate__fadeOut\"\r\n }`}\r\n >\r\n {conditions(ConditionName.hasTitle) ? details.title : params.id}\r\n </div>\r\n );\r\n};\r\n\r\nexport default Title;\r\n","import Image from \"next/legacy/image\";\r\nimport IMAGES from \"../../../images/importImages\";\r\nimport { handleLock } from \"../../../helpers/redux/actions/controller.actions\";\r\nimport { conditions } from \"../../../helpers/conditions/conditions\";\r\nimport { ConditionName } from \"../../../helpers/interfaces/enums\";\r\n\r\nconst Lock = () => {\r\n\r\n return (\r\n <div className={`pl-relative animate__animated animate__faster ${conditions(ConditionName.isActiveElements) ? \"animate__fadeIn pl-pointer-events-auto\" : \"animate__fadeOut pl-pointer-events-none\"}`}>\r\n <Image\r\n src={IMAGES.lock}\r\n alt=\"lock-icon\"\r\n width={20}\r\n height={20}\r\n onClick={() => handleLock(\"unlock\")}\r\n />\r\n {!localStorage.getItem(\"unlock-click\") && <p className=\"pl-text-[10px] pl-text-black/[0.87] pl-bg-[#F7F7F7] pl-absolute pl-left-0 pl-px-4 pl-py-3 pl-rounded-[8px] pl-w-max\">برای باز کردن قفل، کلیک کنید</p>}\r\n </div>\r\n );\r\n};\r\n\r\nexport default Lock;\r\n","import { useEffect, useState } from \"react\";\r\nimport { shallowEqual } from \"react-redux\";\r\nimport BackwardForward from \"../backwardForward/backwardForward\";\r\nimport PlayPause from \"../playPause/playPause\";\r\nimport { useAppSelector } from \"../../../helpers/redux/hooks\";\r\nimport { conditions } from \"../../../helpers/conditions/conditions\";\r\nimport { ConditionName, zIndex } from \"../../../helpers/interfaces/enums\";\r\n\r\nconst Main = () => {\r\n const [showIcons, setShowIcons] = useState<boolean>(false);\r\n\r\n useAppSelector(({ controller: { lock, firstPlay } }) => ({ lock, firstPlay }), shallowEqual);\r\n const { activeElements } = useAppSelector(({ controller: { activeElements } }) => ({ activeElements }),shallowEqual);\r\n\r\n useEffect(() => {\r\n let timeout: any = null;\r\n if (conditions(ConditionName.isFirstPlay) || conditions(ConditionName.isActiveElements)) timeout = setTimeout(() => setShowIcons(true), 100);\r\n else setShowIcons(false);\r\n\r\n return () => clearTimeout(timeout);\r\n }, [activeElements]);\r\n\r\n return (\r\n <main className=\"pl-flex-1\">\r\n {showIcons && !conditions(ConditionName.isLock) && (\r\n <div\r\n id=\"main-content\"\r\n className={`pl-h-full pl-flex pl-justify-center pl-items-center pl-text-center pl-relative ${conditions(ConditionName.isActiveElements) ? \"pl-pointer-events-auto\" : \"pl-pointer-events-none\"\r\n }`}\r\n >\r\n <div\r\n className=\"pl-flex pl-justify-center pl-gap-10 pl-items-center pl-w-max\"\r\n style={{ zIndex: conditions(ConditionName.isComplexPortrait) ? zIndex.mainIconInComplexPortrait : zIndex.mainIcons }}\r\n >\r\n {!conditions(ConditionName.isFirstPlay) && <BackwardForward type=\"forward\" />}\r\n <PlayPause />\r\n {!conditions(ConditionName.isFirstPlay) && <BackwardForward type=\"backward\" />}\r\n </div>\r\n </div>\r\n )}\r\n </main>\r\n );\r\n};\r\n\r\nexport default Main;\r\n","import { shallowEqual } from \"react-redux\";\r\nimport { useAppSelector } from \"../../../helpers/redux/hooks\";\r\nimport { conditions } from \"../../../helpers/conditions/conditions\";\r\nimport { ConditionName } from \"../../../helpers/interfaces/enums\";\r\nimport IMAGES from \"../../../images/importImages\";\r\nimport { handlePlayPause } from \"../../../helpers/redux/actions/controller.actions\";\r\nimport Image from \"next/legacy/image\";\r\n\r\nconst PlayPause = () => {\r\n useAppSelector(({ controller: { play, showMiniPlayer } }) => ({ play, showMiniPlayer }), shallowEqual);\r\n useAppSelector(({ videoData: { videoElementSizeInfo, params } }) => ({ videoElementSizeInfo, params }), shallowEqual);\r\n\r\n return (\r\n <div\r\n className={`${!conditions(ConditionName.isTouchScreen) && \"hover:pl-scale-125\"} pl-transition-transform pl-ease-in-out pl-cursor-pointer`}\r\n onContextMenu={(event) => event.preventDefault()}\r\n >\r\n <Image\r\n alt=\"\"\r\n src={conditions(ConditionName.isPlay) ? IMAGES.bigPause : IMAGES.bigPlay}\r\n width={conditions(ConditionName.showMiniPlayer) ? 20 : 40}\r\n height={conditions(ConditionName.showMiniPlayer) ? 20 : 40}\r\n onClick={(event: any) => handlePlayPause(event)}\r\n onDoubleClick={(event: any) => event.stopPropagation()}\r\n className={`${conditions(ConditionName.isPlay) ? \"pl-big-play-icon\" : \"pl-big-pause-icon\"}`}\r\n />\r\n </div>\r\n );\r\n};\r\n\r\nexport default PlayPause;\r\n","import { shallowEqual } from \"react-redux\";\r\nimport ProgressBar from \"./progressbar/progressbar\";\r\nimport Controllbar from \"./controllbar/controllbar\";\r\nimport ElapsedTime from \"../elapsedTime/elapsedTime\";\r\nimport { useAppSelector } from \"../../../helpers/redux/hooks\";\r\nimport { conditions } from \"../../../helpers/conditions/conditions\";\r\nimport { ConditionName, zIndex } from \"../../../helpers/interfaces/enums\";\r\nimport { footerPadding } from \"../../../helpers/environment\";\r\nimport CheckInternet from \"../checkInternet/checkInternet\";\r\n\r\nconst Footer = () => {\r\n useAppSelector(({ controller: { lock, isFullScreen, isLoading, activeElements } }) => ({ lock, isFullScreen, isLoading, activeElements }), shallowEqual);\r\n return (\r\n <div id=\"footer\" className=\"pl-relative\" style={{ zIndex: zIndex.footer }}>\r\n <>\r\n {!conditions(ConditionName.isLock) && (\r\n <>\r\n <div\r\n className={`pl-flex pl-flex-col ${conditions(ConditionName.isTouchScreenPortrait) && \"pl-gap-4\"} pl-z-[100000000] pl-w-full pl-mx-auto animate__animated animate__faster ${conditions(ConditionName.isActiveElements) && !conditions(ConditionName.isLoading)\r\n ? \"animate__fadeIn pl-pointer-events-auto\"\r\n : \"animate__fadeOut pl-pointer-events-none\"\r\n }`}\r\n style={{ paddingLeft: footerPadding(), paddingRight: footerPadding() }}\r\n >\r\n {!conditions(ConditionName.isTouchScreenPortrait) && <ElapsedTime />} \r\n {conditions(ConditionName.showProgressbar) && <ProgressBar />}\r\n <Controllbar />\r\n </div>\r\n </>\r\n )}\r\n <CheckInternet />\r\n </>\r\n </div>\r\n );\r\n};\r\n\r\nexport default Footer;\r\n","import { useEffect, useState } from \"react\";\r\nimport { shallowEqual } from \"react-redux\";\r\nimport Tooltip from \"../../tooltip/tooltip\";\r\nimport { handleCatchUpLoadingLog, handleMouseMove, handleMouseOut, handlePointerDown, handlePointerMove, handlePointerUp, hideProgressTooltip } from \"../../../../helpers/redux/actions/progressbar.actions\";\r\nimport { useAppSelector } from \"../../../../helpers/redux/hooks\";\r\nimport { progressBarWidth } from \"../../../../helpers/constants\";\r\nimport { ConditionName, zIndex } from \"../../../../helpers/interfaces/enums\";\r\nimport { conditions } from \"../../../../helpers/conditions/conditions\";\r\n\r\nconst ProgressBar = () => {\r\n const [isPointerDown, setIsPointerDown] = useState<boolean>(false);\r\n\r\n useEffect(() => {\r\n hideProgressTooltip(document.querySelector(\".progressTooltip\"));\r\n }, []);\r\n\r\n const { duration, currentTime, bufferedTimeWidth } = useAppSelector(\r\n ({ controller: { duration, currentTime, bufferedTimeWidth, showMiniPlayer } }) => ({\r\n duration,\r\n currentTime,\r\n bufferedTimeWidth,\r\n showMiniPlayer\r\n }),\r\n shallowEqual\r\n );\r\n const { markers } = useAppSelector(\r\n ({ videoData: { params, videoElementSizeInfo, markers, isComplexPortrait } }) => ({\r\n params,\r\n videoElementSizeInfo,\r\n markers,\r\n isComplexPortrait\r\n }),\r\n shallowEqual\r\n );\r\n const [timeoutIds, setTimeoutIds] = useState<any[]>([]);\r\n\r\n const durationTime = duration;\r\n const calculateMarkerPosition = (time: number) => (durationTime ? (progressBarWidth() * time) / durationTime : 0);\r\n\r\n return (\r\n <div className={`${conditions(ConditionName.isTouchScreenPortrait) ? \"pl-order-1\" : \"pl-order-none\"} pl-relative`}>\r\n <div className=\"pl-relative\">\r\n <Tooltip />\r\n </div>\r\n <div\r\n className={`pl-w-full ${conditions(ConditionName.isTouchScreenPortrait) ? \"pl-absolute\" : \"pl-absolute pl-bottom-0.5 pl-pb-2\"} pl-flex pl-items-end`}\r\n onPointerDown={(event: any) => handlePointerDown(event, timeoutIds, setIsPointerDown)}\r\n onPointerMove={handlePointerMove}\r\n onPointerUp={(event: any) => handlePointerUp(event, setTimeoutIds, timeoutIds, setIsPointerDown)}\r\n onMouseMove={handleMouseMove}\r\n onMouseOut={handleMouseOut}\r\n onClick={handleCatchUpLoadingLog}\r\n onDoubleClick={(event: any) => event.stopPropagation()}\r\n >\r\n <div id=\"progress-area\" className=\"pl-w-full pl-absolute\">\r\n <div\r\n id=\"time-progress-area\"\r\n className={`!pl-w-full !pl-h-[5px] pl-transition-transform pl-duration-300 pl-m-auto pl-cursor-pointer !pl-bg-z-secondary-100/[0.4] pl-rounded`}\r\n style={{ transform: isPointerDown ? \"scaleY(1.8)\" : \"unset\" }}\r\n >\r\n {markers.map((marker: any) => (\r\n <div key={marker.id} data-marker={marker.time}>\r\n <div\r\n className=\"pl-emoji-dot pl-absolute pl-flex pl-flex-col pl-w-[3px] pl-h-[5px] pl-bg-white pl-cursor-pointer\"\r\n data-marker={marker.time}\r\n style={{ left: calculateMarkerPosition(marker.time), zIndex: zIndex.emoji }}\r\n />\r\n </div>\r\n ))}\r\n <div\r\n id=\"time-progress-buffer\"\r\n className={`pl-absolute pl-h-[5px] pl-bg-z-gray-400/[0.7] pl-rounded`}\r\n style={{ width: `${bufferedTimeWidth}%` }}\r\n />\r\n <div\r\n id=\"time-progress-bar\"\r\n className={`pl-h-[5px] pl-rounded pl-relative pl-cursor-pointer pl-bg-primary before:pl-bg-primary before:pl-inline-block before:pl-w-4 before:pl-h-4 ${\r\n isPointerDown && \"before:pl-w-7 before:pl-h-3\"\r\n }`}\r\n style={{ width: `${(currentTime / duration) * progressBarWidth()}px` }}\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default ProgressBar;\r\n","import { useEffect, useState } from \"react\";\r\nimport { shallowEqual } from \"react-redux\";\r\nimport { memo } from \"react\";\r\nimport { useAppSelector } from \"../../../helpers/redux/hooks\";\r\nimport { conditions } from \"../../../helpers/conditions/conditions\";\r\nimport { ConditionName } from \"../../../helpers/interfaces/enums\";\r\nimport { fetchFile, getStyleForTime } from \"../../../helpers/redux/actions/progressbar.actions\";\r\n\r\nconst Tooltip = () => {\r\n const { details } = useAppSelector(({ videoData: { details } }) => ({ details }), shallowEqual);\r\n const { tooltipTime } = useAppSelector(({ controller: { tooltipTime, activeElements, isFullScreen } }) => ({ tooltipTime, activeElements, isFullScreen }), shallowEqual);\r\n\r\n const cache: any = {};\r\n const [vttPool, setVttPool] = useState<any>(undefined);\r\n const [vttUrl, setVttUrl] = useState<string | undefined>(conditions(ConditionName.isTouchScreen) ? details.vtt_mobile : details.vtt);\r\n\r\n useEffect(() => {\r\n setVttUrl(conditions(ConditionName.isVttFitHeight) ? details.vtt_mobile : details.vtt);\r\n }, [details.vtt, details.vtt_mobile, conditions(ConditionName.isVttFitHeight)]);\r\n\r\n useEffect(() => {\r\n if (!!vttUrl) fetchFile(conditions(ConditionName.isVttFitHeight) ? details.vtt_mobile! : details.vtt!, setVttPool);\r\n }, [vttUrl]);\r\n\r\n return conditions(ConditionName.isActiveElements) ? (\r\n <div\r\n className={`pl-flex pl-flex-col pl-progressTooltip pl-absolute pl-bottom-[200%] pl-px-[10px] pl-py-[5px] pl-mr-[-25px] pl-mb-[25px] pl-text-white pl-text-[14px] ${\r\n vttUrl && !!vttPool ? \"\" : \"pl-bg-z-gray-700\"\r\n } pl-rounded-[6px] pl-opacity-0`}\r\n >\r\n {vttUrl && !!vttPool && (\r\n <div className=\"pl-flex-1 pl-border pl-border-white pl-rounded-[8px]\">\r\n <div className=\"pl-rounded-[8px]\" style={getStyleForTime(tooltipTime, vttPool, cache)} />\r\n </div>\r\n )}\r\n <div className=\"pl-flex pl-items-center pl-justify-center pl-progressTimeTooltip pl-text-white !pl-opacity-100\" />\r\n </div>\r\n ) : (\r\n <></>\r\n );\r\n};\r\n\r\nexport default memo(Tooltip);\r\n","import store from \"../../redux/store\";\r\nimport { catchUpLoadingLog } from \"../../logs/logs\";\r\nimport { ConditionName, zIndex } from \"../../interfaces/enums\";\r\nimport { setActiveElements, setActivePointerProgressBar, setDelayTurnOffControlbar, setTooltipTime } from \"../slices/controllerSlice\";\r\nimport { handleVideoTimeline } from \"./controller.actions\";\r\nimport { setInfo } from \"../slices/videoDataSlice\";\r\nimport { sendFluentLog } from \"../../logs/fluentdLogger\";\r\nimport { conditions } from \"../../conditions/conditions\";\r\nimport { activeElementsTime, footerPadding } from \"../../environment\";\r\nimport { progressBar, progressBarWidth, videoTag } from \"../../constants\";\r\nimport { secondsToHMS } from \"../../helpers\";\r\n\r\nexport const getPointerTime = (event: any, type: string = \"\") => {\r\n const { videoElementSizeInfo } = store.getState().videoData;\r\n const { duration, hlsLiveSyncPosition } = store.getState().controller;\r\n const durationValue = conditions(ConditionName.isLiveParam) ? hlsLiveSyncPosition : duration;\r\n const clientX = event.clientX !== undefined ? event.clientX : event.touches[0].clientX;\r\n if (clientX <= videoElementSizeInfo.right - footerPadding() && clientX > footerPadding()) {\r\n let positionX = clientX - footerPadding() - videoElementSizeInfo.left;\r\n let timePositionX = (positionX / (videoElementSizeInfo.width - 2 * footerPadding())) * durationValue;\r\n if (type === \"tooltipTime-live\") timePositionX = durationValue - timePositionX;\r\n return timePositionX;\r\n }\r\n};\r\n\r\nexport const getPointerPosition = (event: any) => {\r\n const { videoElementSizeInfo } = store.getState().videoData;\r\n const clientX = event.clientX !== undefined ? event.clientX : event.touches[0].clientX;\r\n if (clientX <= videoElementSizeInfo.right - footerPadding() && clientX > footerPadding()) {\r\n return clientX - footerPadding() - videoElementSizeInfo.left;\r\n }\r\n};\r\n\r\nexport const getMarkerPosition = (markerTime: number) => {\r\n const { duration, hlsLiveSyncPosition } = store.getState().controller;\r\n const durationValue = conditions(ConditionName.isLiveParam) ? hlsLiveSyncPosition : duration;\r\n return (markerTime * progressBarWidth()) / durationValue;\r\n};\r\n\r\nexport const hideProgressTooltip = (progressTooltip: any) => {\r\n if (progressTooltip) {\r\n progressTooltip.style.opacity = \"0.0\";\r\n progressTooltip.style.pointerEvents = \"none\";\r\n progressTooltip.style.zIndex = zIndex.vttDisable;\r\n }\r\n};\r\n\r\nconst generalStyleTooltipHandler = (progressTooltip: any) => {\r\n progressTooltip.style.display = \"block\";\r\n progressTooltip.style.zIndex = zIndex.vtt;\r\n progressTooltip.style.opacity = !!store.getState().videoData.details.vtt ? \"1.0\" : \"0.6\";\r\n progressTooltip.style.pointerEvents = \"auto\";\r\n progressTooltip.style.transition = \"opacity 1s ease-out\";\r\n};\r\n\r\nconst vttTooltipStyleHandler = (event: any, progressTooltip: any) => {\r\n const { videoElementSizeInfo } = store.getState().videoData;\r\n const element: any = document.getElementsByClassName(\"pl-progressTooltip\")[0];\r\n const parentPlayer: any = document.getElementById(\"parent-player\");\r\n if (element && parentPlayer) {\r\n if ((getPointerPosition(event)! > element.getBoundingClientRect().width / 2) && (getPointerPosition(event)! < videoElementSizeInfo.right - videoElementSizeInfo.left - element.getBoundingClientRect().width / 2)) {\r\n progressTooltip.style.left = `${getPointerPosition(event)! - element.offsetWidth / 2}px`;\r\n } else if (getPointerPosition(event)! < (parentPlayer.offsetLeft === 0 ? element.offsetWidth : parentPlayer.offsetLeft)) {\r\n progressTooltip.style.left = `${0}px`;\r\n } else if (videoTag().offsetLeft + videoTag().offsetWidth < getPointerPosition(event)! + element.offsetWidth) {\r\n progressTooltip.style.left = `${videoTag().offsetWidth - element.offsetWidth}px`;\r\n }\r\n }\r\n};\r\n\r\nexport const showProgressTooltip = (event: any, progressTooltip: any, progressBarTooltip: any) => {\r\n if (progressTooltip) generalStyleTooltipHandler(progressTooltip);\r\n if (store.getState().videoData.details.vtt) vttTooltipStyleHandler(event, progressTooltip); // have vtt\r\n else progressTooltip.style.left = `${getPointerPosition(event)! - 30}px`; // not vtt\r\n store.dispatch(setTooltipTime(Number(getPointerTime(event)!)));\r\n progressBarTooltip.textContent = conditions(ConditionName.isLiveParam)\r\n ? `-${secondsToHMS(getPointerTime(event, \"tooltipTime-live\")!)}`\r\n : `${secondsToHMS(getPointerTime(event)!)}`;\r\n};\r\n\r\nexport const handleTimeTooltip = (event: any, isTimer: boolean = false) => {\r\n const { videoElementSizeInfo } = store.getState().videoData;\r\n const progressTooltip: any = document.querySelector(\".pl-progressTooltip\");\r\n const progressBarTooltip: any = document.querySelector(\".pl-progressTimeTooltip\");\r\n const clientX = event.clientX !== undefined ? event.clientX : event.touches[0].clientX;\r\n if (\r\n progressTooltip &&\r\n progressBarTooltip &&\r\n clientX <= videoElementSizeInfo.right - footerPadding() &&\r\n clientX > videoElementSizeInfo.left + footerPadding()\r\n ) {\r\n showProgressTooltip(event, progressTooltip, progressBarTooltip);\r\n if (isTimer) setTimeout(() => hideProgressTooltip(progressTooltip), 2000);\r\n } else hideProgressTooltip(progressTooltip);\r\n};\r\n\r\nexport const handleProgressTime = (event: any) => {\r\n const clientX = event.clientX !== undefined ? event.clientX : event.touches[0].clientX;\r\n if (progressBar()) {\r\n if (clientX <= event.view.innerWidth - footerPadding() && clientX > footerPadding())\r\n progressBar().style.width = `${getPointerPosition(event)}px`;\r\n else if (clientX <= event.view.innerWidth - footerPadding()) progressBar().style.width = 0;\r\n else if (clientX > footerPadding()) progressBar().style.width = `100%`;\r\n }\r\n};\r\n\r\nexport const handlePointerDown = (event: any, timeoutIds: any, setIsPointerDown: (value: boolean) => void) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n setIsPointerDown(true);\r\n const dispatch = store.dispatch;\r\n const clientX = event.clientX !== undefined ? event.clientX : event.touches[0].clientX;\r\n if (clientX <= event.view.innerWidth - footerPadding() && clientX > footerPadding()) {\r\n dispatch(setActivePointerProgressBar(true));\r\n dispatch(setDelayTurnOffControlbar(true));\r\n sessionStorage.setItem(\"previousVideoTime\", String(videoTag().currentTime));\r\n event.target.setPointerCapture(event.pointerId);\r\n if (timeoutIds.length > 0) timeoutIds.map((id: any) => clearTimeout(id));\r\n }\r\n};\r\n\r\nexport const handlePointerMove = (event: any) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n const dispatch = store.dispatch;\r\n const { activePointerProgressBar } = store.getState().controller;\r\n const { left } = store.getState().videoData.videoElementSizeInfo;\r\n const clientX = event.clientX !== undefined ? event.clientX : event.touches[0].clientX;\r\n const progressTooltip: any = document.querySelector(\".pl-progressTooltip\");\r\n if (clientX > left + footerPadding()) {\r\n if (progressTooltip) {\r\n progressTooltip.style.display = \"block !important\";\r\n progressTooltip.style.pointerEvents = \"auto\";\r\n }\r\n if (activePointerProgressBar) {\r\n dispatch(setDelayTurnOffControlbar(true));\r\n handleTimeTooltip(event);\r\n handleProgressTime(event);\r\n videoTag().pause();\r\n }\r\n } else if (progressTooltip) {\r\n progressTooltip.style.display = \"none !important\";\r\n progressTooltip.style.pointerEvents = \"none\";\r\n }\r\n};\r\n\r\nexport const handlePointerUp = (\r\n event: any,\r\n setTimeoutIds: (timeoutIds: any[]) => void,\r\n timeoutIds: any,\r\n setIsPointerDown: (value: boolean) => void\r\n) => {\r\n setIsPointerDown(false);\r\n event.preventDefault();\r\n event.stopPropagation();\r\n const dispatch = store.dispatch;\r\n const { duration, hlsLiveSyncPosition } = store.getState().controller;\r\n const { left, right } = store.getState().videoData.videoElementSizeInfo;\r\n const durationValue = conditions(ConditionName.isLiveParam) ? hlsLiveSyncPosition : duration;\r\n event.target.removeEventListener(\"pointermove\", handlePointerMove);\r\n const clientX = event.clientX !== undefined ? event.clientX : event.touches[0].clientX;\r\n let currentTime = 0;\r\n if (clientX > left + footerPadding() && clientX < right + footerPadding()) currentTime = getPointerTime(event)!;\r\n else if (clientX < left + footerPadding()) currentTime = 0;\r\n else if (clientX > footerPadding()) currentTime = durationValue;\r\n if (!conditions(ConditionName.isStaticFormat)) handleVideoTimeline(videoTag().currentTime, currentTime);\r\n videoTag().currentTime = currentTime;\r\n if (store.getState().controller.activePointerProgressBar) {\r\n dispatch(setActivePointerProgressBar(false));\r\n dispatch(setDelayTurnOffControlbar(false));\r\n videoTag().play();\r\n handleTimeTooltip(event, true);\r\n sessionStorage.setItem(\"current-time\", String(currentTime));\r\n handleProgressTime(event);\r\n handleTimeout(event, dispatch, setTimeoutIds, timeoutIds);\r\n }\r\n};\r\n\r\nconst handleTimeout = (event: any, dispatch: any, setTimeoutIds: (timeoutIds: any[]) => void, timeoutIds: any) => {\r\n const ids = timeoutIds;\r\n let timeoutIdTemp = setTimeout(() => {\r\n const { settingPopover, markersListPopover } = store.getState().popovers;\r\n const { delayTurnOffControlbar } = store.getState().controller;\r\n if (event.pointerType === \"touch\" && !settingPopover && !markersListPopover && delayTurnOffControlbar) dispatch(setActiveElements(false));\r\n }, activeElementsTime);\r\n ids.push(timeoutIdTemp);\r\n setTimeoutIds(ids);\r\n};\r\n\r\nexport const handleCatchUpLoadingLog = () => {\r\n const timer = Date.now();\r\n videoTag()\r\n .play()\r\n .then(() => sendFluentLog(catchUpLoadingLog(Date.now() - timer)));\r\n};\r\n\r\nexport const handleMouseMove = (event: any) => handleTimeTooltip(event);\r\n\r\nexport const handleMouseOut = () => {\r\n const progressBarTooltip: any = document.querySelector(\".pl-progressTooltip\");\r\n hideProgressTooltip(progressBarTooltip);\r\n};\r\n\r\n/////// vtt tooltip\r\nconst deconstructTimestamp = (timestamp: string) => {\r\n const splitStampMilliseconds = timestamp.split(\".\");\r\n const timeParts = splitStampMilliseconds[0];\r\n const timePartsSplit = timeParts.split(\":\");\r\n\r\n return {\r\n milliseconds: parseInt(splitStampMilliseconds[1], 10) || 0,\r\n seconds: parseInt(timePartsSplit.pop()!, 10) || 0,\r\n minutes: parseInt(timePartsSplit.pop()!, 10) || 0,\r\n hours: parseInt(timePartsSplit.pop()!, 10) || 0\r\n };\r\n};\r\n\r\nconst getSecondsFromTimestamp = (timestamp: string) => {\r\n const timestampParts: any = deconstructTimestamp(timestamp);\r\n\r\n return parseInt(timestampParts.hours * (60 * 60) + timestampParts.minutes * 60 + timestampParts.seconds + timestampParts.milliseconds / 1000, 10);\r\n};\r\n\r\nconst getPropsFromDef = (def: string) => {\r\n const imageDefSplit = def.split(/#xywh=/i);\r\n const imageUrl = imageDefSplit[0];\r\n const imageCoords = imageDefSplit[1];\r\n const splitCoords: any = imageCoords.match(/[0-9]+/gi);\r\n\r\n return {\r\n x: splitCoords[0],\r\n y: splitCoords[1],\r\n w: splitCoords[2],\r\n h: splitCoords[3],\r\n image: imageUrl\r\n };\r\n};\r\n\r\nconst getFullyQualifiedUrl = (path: string, base: string) => {\r\n if (path.indexOf(\"//\") >= 0) {\r\n // We have a fully qualified path.\r\n return path;\r\n }\r\n\r\n if (base.indexOf(\"//\") === 0) {\r\n // We don't have a fully qualified path, but need to\r\n // be careful with trimming.\r\n return [base.replace(/\\/$/gi, \"\"), path.trim()].join(\"/\");\r\n }\r\n\r\n if (base.indexOf(\"//\") > 0) {\r\n // We don't have a fully qualified path, and should\r\n // trim both sides of base and path.\r\n return [base.trim(), path.trim()].join(\"/\");\r\n }\r\n\r\n // If all else fails.\r\n return path;\r\n};\r\n\r\nconst getVttCss = (vttImageDef: string, vttUrl: string) => {\r\n const cssObj: any = {};\r\n // If there isn't a protocol, use the VTT source URL.\r\n let baseSplit: string = vttUrl!.split(/\\/\\w+\\.vtt\\s?/)[0];\r\n\r\n /// offset : (vttUrl)!.split(/\\/\\w+\\.vtt\\s?/)[1]\r\n\r\n vttImageDef = getFullyQualifiedUrl(vttImageDef, baseSplit);\r\n\r\n if (!vttImageDef.match(/#xywh=/i)) {\r\n cssObj.background = 'url(\"' + vttImageDef + vttUrl!.split(/\\/\\w+\\.vtt\\s?/)[1] + '\")';\r\n return cssObj;\r\n }\r\n\r\n const imageProps = getPropsFromDef(vttImageDef);\r\n\r\n cssObj.background =\r\n 'url(\"' + imageProps.image + vttUrl!.split(/\\/\\w+\\.vtt\\s?/)[1] + '\") no-repeat -' + imageProps.x + \"px -\" + imageProps.y + \"px\";\r\n cssObj.width = imageProps.w + \"px\";\r\n cssObj.height = imageProps.h + \"px\";\r\n cssObj.url = imageProps.image;\r\n\r\n return cssObj;\r\n};\r\n\r\nexport const fetchFile = (url: string, setVttPool: any) => {\r\n fetch(url)\r\n .then((response) => {\r\n if (!response.ok) {\r\n store.dispatch(\r\n setInfo({\r\n ...store.getState().videoData.details,\r\n vtt: undefined,\r\n vtt_mobile: undefined\r\n })\r\n );\r\n throw new Error(\"Network response was not ok\");\r\n }\r\n return response.text();\r\n })\r\n .then((data) => {\r\n const processedVtts: any[] = [];\r\n const vttDefinitions = data.split(/[\\r\\n][\\r\\n]/i);\r\n vttDefinitions.forEach((vttDef) => {\r\n if (vttDef.match(/([0-9]{2}:)?([0-9]{2}:)?[0-9]{2}(.[0-9]{3})?( ?--> ?)([0-9]{2}:)?([0-9]{2}:)?[0-9]{2}(.[0-9]{3}).*/gi)) {\r\n const vttDefSplit = vttDef.split(/[\\r\\n]/i);\r\n const vttTiming = vttDefSplit[0];\r\n const vttTimingSplit = vttTiming.split(/ ?--> ?/i);\r\n const vttTimeStart = vttTimingSplit[0];\r\n const vttTimeEnd = vttTimingSplit[1];\r\n const vttImageDef = vttDefSplit[1];\r\n const vttCssDef = getVttCss(vttImageDef, url);\r\n\r\n processedVtts.push({\r\n start: getSecondsFromTimestamp(vttTimeStart),\r\n end: getSecondsFromTimestamp(vttTimeEnd),\r\n css: vttCssDef\r\n });\r\n }\r\n });\r\n setVttPool(processedVtts);\r\n })\r\n .catch((error) => {\r\n console.error(\"Error fetching file:\", error);\r\n });\r\n};\r\n\r\nexport const getStyleForTime = (time: number, vttPool: any, cache: any) => {\r\n for (let i = 0; i < vttPool.length; ++i) {\r\n const item = vttPool[i];\r\n if (time >= item.start && time < item.end) {\r\n // Cache miss\r\n if (item.css.url && !cache[item.css.url]) {\r\n const objectVtt: any = {\r\n background: item.css.background,\r\n width: item.css.width,\r\n height: item.css.height\r\n };\r\n cache[item.css.url] = objectVtt;\r\n return objectVtt;\r\n } else if (item.css.url) return cache[item.css.url];\r\n }\r\n }\r\n};\r\n","import { memo } from \"react\";\r\nimport { shallowEqual } from \"react-redux\";\r\nimport FullScreen from \"../../fullScreen/fullScreen\";\r\nimport PictureInPicture from \"../../pictureInPicture/pictureInPicture\";\r\nimport SoundVolume from \"../../soundVolume/soundVolume\";\r\nimport Settings from \"../../settings/settings\";\r\nimport { useAppSelector } from \"../../../../helpers/redux/hooks\";\r\nimport { ConditionName } from \"../../../../helpers/interfaces/enums\";\r\nimport { conditions } from \"../../../../helpers/conditions/conditions\";\r\nimport Speed from \"../../speed/speed\";\r\nimport QualityLevels from \"../../qualityLevels/qualityLevels\";\r\nimport ElapsedTime from \"../../elapsedTime/elapsedTime\";\r\nimport Unlock from \"../../lockUnlock/unlock\";\r\n\r\nconst Controlbar = () => {\r\n useAppSelector(({ controller: { isFullScreen, showMiniPlayer } }) => ({ isFullScreen, showMiniPlayer }), shallowEqual);\r\n useAppSelector(\r\n ({ videoData: { videoElementSizeInfo, params, isComplexPortrait } }) => ({ videoElementSizeInfo, params, isComplexPortrait }),\r\n shallowEqual\r\n );\r\n\r\n return (\r\n <div id=\"player-controllbar\" className={`pl-flex pl-justify-between pl-items-center pl-mx-3 pl-mb-3`}>\r\n <div\r\n className={`pl-flex pl-items-center ${\r\n conditions(ConditionName.isFullMobilePortrait) || !conditions(ConditionName.isMiniPlayer) ? \"pl-gap-5\" : \"pl-gap-2\"\r\n }`}\r\n >\r\n {!conditions(ConditionName.showMiniPlayer) && <FullScreen />}\r\n {conditions(ConditionName.isTouchScreenLandscape) && <Unlock />}\r\n {conditions(ConditionName.showPictureInPicture) && <PictureInPicture />}\r\n {conditions(ConditionName.showSettingIcon) && <Settings />}\r\n {conditions(ConditionName.isFullScreen) && !conditions(ConditionName.isStaticFormat) && <QualityLevels showQualityLevelsIcon={true} />}\r\n {(conditions(ConditionName.isFullScreen) || conditions(ConditionName.isStaticFormat)) && <Speed showSpeedIcon={true} />}\r\n </div>\r\n <div className={`pl-flex pl-items-center ${conditions(ConditionName.isMiniPlayer) ? \"pl-gap-2\" : \"pl-gap-5\"}`}>\r\n {conditions(ConditionName.isTouchScreenPortrait) && <ElapsedTime />}\r\n {!conditions(ConditionName.isIOS) && <SoundVolume />}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default memo(Controlbar);\r\n","import { useEffect, useState } from \"react\";\r\nimport { shallowEqual } from \"react-redux\";\r\nimport ControllbarTooltip from \"../footer/controllbar/controllbarTooltip\";\r\nimport { useAppDispatch, useAppSelector } from \"../../../helpers/redux/hooks\";\r\nimport { ConditionName } from \"../../../helpers/interfaces/enums\";\r\nimport { conditions } from \"../../../helpers/conditions/conditions\";\r\nimport { setActiveElements } from \"../../../helpers/redux/slices/controllerSlice\";\r\nimport { handleFullScreen, handleLockOrientation } from \"../../../helpers/redux/actions/controller.actions\";\r\nimport Image from \"next/legacy/image\";\r\nimport IMAGES from \"../../../images/importImages\";\r\n\r\nconst FullScreen = () => {\r\n const { isFullScreen } = useAppSelector(({ controller: { firstPlay, isFullScreen } }) => ({ firstPlay, isFullScreen }), shallowEqual);\r\n\r\n const [showTooltip, setShowTooltip] = useState<boolean>(false);\r\n\r\n const dispatch = useAppDispatch();\r\n\r\n useEffect(() => {\r\n if (!conditions(ConditionName.isFirstPlay)) dispatch(setActiveElements(false));\r\n }, [isFullScreen]);\r\n\r\n return (\r\n <div className=\"pl-relative pl-flex pl-items-center\">\r\n <Image\r\n src={conditions(ConditionName.isFullScreen) ? IMAGES.nonFullScreen : IMAGES.fullScreen}\r\n alt=\"fullScreen-icon\"\r\n className={`pl-cursor-pointer`}\r\n width={20}\r\n height={20}\r\n onMouseOver={() => !conditions(ConditionName.isTouchScreen) && setShowTooltip(true)}\r\n onMouseLeave={() => !conditions(ConditionName.isTouchScreen) && setShowTooltip(false)}\r\n onClick={() => {\r\n handleFullScreen();\r\n handleLockOrientation();\r\n }}\r\n />\r\n {showTooltip && (\r\n <ControllbarTooltip\r\n title={`${conditions(ConditionName.isFullScreen) ? \"خروج از\" : \"\"} تمام صفحه`}\r\n />\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default FullScreen;\r\n","import { IControllbarTooltipProps } from \"../../../../helpers/interfaces/interfaces\";\r\n\r\nconst ControllbarTooltip = ({ title, className }: IControllbarTooltipProps) => (\r\n <span\r\n className={`pl-absolute pl-w-max pl-bg-paper pl-text-white/[0.9] pl-bottom-[230%] pl-rounded-[8px] pl-px-4 pl-py-3 pl-text-[14px] pl-font-bold ${className}`}\r\n >\r\n {title}\r\n </span>\r\n);\r\n\r\nexport default ControllbarTooltip;\r\n","import { useState } from \"react\";\r\nimport { shallowEqual } from \"react-redux\";\r\nimport ControllbarTooltip from \"../footer/controllbar/controllbarTooltip\";\r\nimport { useAppSelector } from \"../../../helpers/redux/hooks\";\r\nimport { conditions } from \"../../../helpers/conditions/conditions\";\r\nimport { ConditionName } from \"../../../helpers/interfaces/enums\";\r\nimport IMAGES from \"../../../images/importImages\";\r\nimport { videoTag } from \"../../../helpers/constants\";\r\nimport Image from \"next/legacy/image\";\r\n\r\nconst PictureInPicture = () => {\r\n const [showTooltip, setShowTooltip] = useState<boolean>(false);\r\n\r\n useAppSelector(({ controller: { showMiniPlayer } }) => ({ showMiniPlayer }), shallowEqual);\r\n useAppSelector(({ videoData: { videoElementSizeInfo, params } }) => ({ videoElementSizeInfo, params }), shallowEqual);\r\n\r\n return (\r\n <div className=\"pl-relative pl-flex pl-items-center\">\r\n <Image\r\n alt=\"\"\r\n onMouseOver={() => !conditions(ConditionName.isTouchScreen) && setShowTooltip(true)}\r\n onMouseLeave={() => !conditions(ConditionName.isTouchScreen) && setShowTooltip(false)}\r\n src={IMAGES.pictureInPicture}\r\n width={20}\r\n height={20}\r\n className=\"pl-flex pl-cursor-pointer\"\r\n onClick={() => videoTag().requestPictureInPicture()}\r\n />\r\n {showTooltip && <ControllbarTooltip title=\"تصویر در تصویر\" />}\r\n </div>\r\n );\r\n};\r\n\r\nexport default PictureInPicture;\r\n","import { useRef, useState } from \"react\";\r\nimport { shallowEqual } from \"react-redux\";\r\nimport ControllbarTooltip from \"../footer/controllbar/controllbarTooltip\";\r\nimport Image from \"next/legacy/image\";\r\nimport { useAppDispatch, useAppSelector } from \"../../../helpers/redux/hooks\";\r\nimport store from \"../../../helpers/redux/store\";\r\nimport { volumeLog } from \"../../../helpers/logs/logs\";\r\nimport { sendFluentLog } from \"../../../helpers/logs/fluentdLogger\";\r\nimport { setUserSettings } from \"../../../helpers/redux/slices/userSlice\";\r\nimport { handleChangeSoundVolume } from \"../../../helpers/redux/actions/controller.actions\";\r\nimport { ConditionName } from \"../../../helpers/interfaces/enums\";\r\nimport { conditions } from \"../../../helpers/conditions/conditions\";\r\nimport IMAGES from \"../../../images/importImages\";\r\n\r\nconst SoundVolume = () => {\r\n const [showTooltip, setShowTooltip] = useState<boolean>(false);\r\n\r\n const dispatch = useAppDispatch();\r\n const { settings } = useAppSelector(({ user: { settings } }) => ({ settings }), shallowEqual);\r\n\r\n const primaryVolumeRef = useRef<number>(settings.volume);\r\n\r\n const handleMouseUp = () => {\r\n if (primaryVolumeRef.current !== settings.volume) {\r\n const { settings } = store.getState().user;\r\n sendFluentLog(volumeLog(primaryVolumeRef.current, settings.volume));\r\n primaryVolumeRef.current = settings.volume;\r\n // createSettings({ ...settings, volume: settings.volume });\r\n dispatch(setUserSettings({ ...settings, volume: settings.volume }));\r\n }\r\n };\r\n\r\n const handleMute = (type: string) => {\r\n const { settings } = store.getState().user;\r\n if (type === \"mute\") {\r\n handleChangeSoundVolume(0);\r\n sendFluentLog(volumeLog(settings.volume, 0));\r\n // createSettings({ ...settings, volume: 0 });\r\n } else {\r\n sendFluentLog(volumeLog(settings.volume, 100));\r\n handleChangeSoundVolume(100);\r\n // createSettings({ ...settings, volume: 100 });\r\n }\r\n };\r\n\r\n return (\r\n <div className={`pl-relative pl-inline-flex pl-items-center pl-gap-2 pl-sound-icon`}>\r\n {!conditions(ConditionName.isTouchScreen) && (\r\n <input\r\n onMouseUp={handleMouseUp}\r\n type=\"range\"\r\n min=\"0\"\r\n max=\"100\"\r\n value={settings.volume}\r\n onChange={(event) => handleChangeSoundVolume(+event.target.value)}\r\n className=\"pl-soundVolume pl-cursor-pointer\"\r\n style={{ background: `linear-gradient(to right, white ${settings.volume}%, rgba(255,255,255,0.3) 0)` }}\r\n />\r\n )}\r\n <div className=\"pl-relative pl-flex pl-items-center\">\r\n <Image\r\n src={conditions(ConditionName.hasSound) ? IMAGES.unMute : IMAGES.mute}\r\n alt={conditions(ConditionName.hasSound) ? \"unmute-icon\" : \"mute-icon\"}\r\n className={`pl-flex pl-items-center pl-cursor-pointer`}\r\n width={20}\r\n height={20 }\r\n onClick={() => (conditions(ConditionName.hasSound) ? handleMute(\"mute\") : handleMute(\"unmute\"))}\r\n onDoubleClick={(event: any) => event.stopPropagation()}\r\n onMouseOver={() => !conditions(ConditionName.isTouchScreen) && setShowTooltip(true)}\r\n onMouseLeave={() => !conditions(ConditionName.isTouchScreen) && setShowTooltip(false)}\r\n />\r\n {showTooltip && (\r\n <ControllbarTooltip\r\n className=\"pl-left-0\"\r\n title={`${conditions(ConditionName.hasSound) ? \"با صدا\" : \"بی صدا\"}`}\r\n />\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default SoundVolume;\r\n","import { memo, useEffect, useRef, useState } from \"react\";\r\nimport { shallowEqual } from \"react-redux\";\r\nimport ControllbarTooltip from \"../footer/controllbar/controllbarTooltip\";\r\nimport Popover from \"../popover/popover\";\r\nimport Image from \"next/legacy/image\";\r\nimport QualityLevels from \"../qualityLevels/qualityLevels\";\r\nimport { useAppDispatch, useAppSelector } from \"../../../helpers/redux/hooks\";\r\nimport { ConditionName, SettingSections } from \"../../../helpers/interfaces/enums\";\r\nimport useOnClickOutside from \"../../../helpers/hooks/useOnClickOutside\";\r\nimport { setSettingPopover } from \"../../../helpers/redux/slices/popoversSlice\";\r\nimport { conditions } from \"../../../helpers/conditions/conditions\";\r\nimport IMAGES from \"../../../images/importImages\";\r\nimport Speed from \"../speed/speed\";\r\n\r\nconst Settings = () => {\r\n const dispatch = useAppDispatch();\r\n useAppSelector(({ videoData: { params } }) => ({ params }),shallowEqual);\r\n const { settingPopover } = useAppSelector(({ popovers: { settingPopover } }) => ({ settingPopover }), shallowEqual);\r\n\r\n const [section, setSection] = useState<string>(SettingSections.main);\r\n const [elementHeight, setElementHeight] = useState<number>(0);\r\n const [showTooltip, setShowTooltip] = useState<boolean>(false);\r\n\r\n const settingsRef = useRef(null);\r\n\r\n useOnClickOutside(settingsRef, () => {\r\n dispatch(setSettingPopover(false));\r\n setTimeout(() => setSection(SettingSections.main), 500);\r\n });\r\n\r\n useEffect(() => {\r\n setElementHeight(document.getElementById(section)?.offsetHeight!);\r\n }, [section]);\r\n\r\n return (\r\n <div className={`pl-inline-flex ${conditions(ConditionName.isLandscape) && \"pl-relative\"}`} ref={settingsRef}>\r\n <div\r\n className={`pl-flex pl-items-center pl-relative pl-cursor-pointer`}\r\n onClick={() => dispatch(setSettingPopover(!settingPopover))}\r\n onMouseOver={() => !conditions(ConditionName.isTouchScreen) && !conditions(ConditionName.showSettingPopover) && setShowTooltip(true)}\r\n onMouseLeave={() => !conditions(ConditionName.isTouchScreen) && setShowTooltip(false)}\r\n >\r\n <Image\r\n src={IMAGES.settings}\r\n alt=\"\"\r\n width={20}\r\n height={20}\r\n />\r\n {showTooltip && <ControllbarTooltip title=\"تنظیمات\" />}\r\n </div>\r\n <Popover\r\n classNames={`!pl-p-0 pl-overflow-hidden !pl-bg-white ${conditions(ConditionName.isTouchScreen) ? \"!pl-fixed !pl-bottom-0 !pl-rounded-t-[12px] pl-rounded-b-none\" : \"!pl-w-[230px] pl-right-0 pl-mb-[33px] !pl-rounded-[12px]\"} ${conditions(ConditionName.isTouchScreenPortrait) && \"!pl-w-screen tablet:!pl-max-w-[285px] tablet:!pl-mx-auto\"} ${conditions(ConditionName.isTouchScreenLandscape) && \"pl-w-full pl-max-w-[285px]\"}`}\r\n styles={{maxHeight: elementHeight + 100}}\r\n status={settingPopover}\r\n onClose={() => dispatch(setSettingPopover(false))}\r\n type={conditions(ConditionName.isTouchScreen) ? \"modal\" : \"popover\"}\r\n isBlurBackground={conditions(ConditionName.isTouchScreenPortrait)}\r\n ref={settingsRef}\r\n isHeader={conditions(ConditionName.isTouchScreen)}\r\n customHeader={<></>}\r\n isHasCatchUpLineOnTop={conditions(ConditionName.isTouchScreen)}\r\n >\r\n <>\r\n {section === SettingSections.main && (\r\n <div id={SettingSections.main} className=\"pl-p-4 pl-rounded-[10px] pl-flex pl-flex-col pl-gap-4 animate__animated animate__fadeIn\">\r\n {!conditions(ConditionName.isStaticFormat) && (\r\n <>\r\n <div className=\"pl-flex pl-items-center pl-gap-[10px] pl-cursor-pointer\" onClick={() => setSection(SettingSections.qualityLevels)}>\r\n <Image \r\n src={IMAGES.qualitySetting}\r\n alt=\"\"\r\n width={16}\r\n height={16}\r\n />\r\n <p className={`pl-ml-auto pl-text-[12px] pl-font-medium`}>کیفیت پخش</p>\r\n <Image\r\n src={IMAGES.chevronLeft}\r\n alt=\"\"\r\n width={16}\r\n height={16}\r\n />\r\n </div>\r\n </>\r\n )} \r\n <div className=\"pl-flex pl-items-center pl-gap-[10px] pl-cursor-pointer\" onClick={() => setSection(SettingSections.speed)}>\r\n <Image\r\n src={IMAGES.speed}\r\n alt=\"\"\r\n width={20}\r\n height={20}\r\n />\r\n <p className={`pl-ml-auto pl-text-[12px] pl-font-medium`}>سرعت</p>\r\n <Image\r\n src={IMAGES.chevronLeft}\r\n alt=\"\"\r\n width={16}\r\n height={16}\r\n />\r\n </div>\r\n </div>\r\n )}\r\n {section === SettingSections.qualityLevels && <QualityLevels setSection={setSection} />}\r\n {section === SettingSections.speed && <Speed setSection={setSection} />}\r\n </>\r\n </Popover>\r\n </div>\r\n );\r\n};\r\n\r\nexport default memo(Settings);\r\n","import { TouchEvent, forwardRef, useEffect, useState } from \"react\";\r\nimport { createPortal } from \"react-dom\";\r\nimport { shallowEqual } from \"react-redux\";\r\nimport dynamic from \"next/dynamic\";\r\nimport { IPopoverProps } from \"../../../helpers/interfaces/interfaces\";\r\nimport { useAppSelector } from \"../../../helpers/redux/hooks\";\r\nimport { conditions } from \"../../../helpers/conditions/conditions\";\r\nimport { ConditionName, zIndex } from \"../../../helpers/interfaces/enums\";\r\n\r\nconst CloseIcon = dynamic(() => import(\"../../icon-components/closeIcon\"));\r\n\r\nconst Popover = forwardRef(\r\n (\r\n {\r\n children,\r\n status,\r\n onClose,\r\n type,\r\n classNames,\r\n parentClassNames,\r\n styles,\r\n isBlurBackground,\r\n isFullHeight = false,\r\n isFullScreen,\r\n isHeader,\r\n headerTitle = \"\",\r\n customHeader,\r\n headerClassName,\r\n isHasCatchUpLineOnTop = false,\r\n animation,\r\n scrollbar = false,\r\n isFocusOnInput = false,\r\n showCloseIcon = true,\r\n pinContent\r\n }: IPopoverProps,\r\n ref: any\r\n ) => {\r\n const [showPopover, setShowPopover] = useState<boolean>(status!);\r\n\r\n const [maxHeight, setMaxHeight] = useState<number>(0);\r\n const [maxHeightOnTouchMove, setMaxHeightOnTouchMove] = useState<number>(0);\r\n const [zIndexOnCatchUp, setZIndexOnCatchUp] = useState<number>(0);\r\n\r\n const { videoElementSizeInfo } = useAppSelector(({ videoData: { videoElementSizeInfo } }) => ({ videoElementSizeInfo }), shallowEqual);\r\n\r\n useEffect(() => {\r\n let timeout: any = undefined;\r\n\r\n if (status) {\r\n setShowPopover(true);\r\n } else {\r\n timeout = setTimeout(() => {\r\n onClose(false);\r\n setMaxHeightOnTouchMove(0);\r\n setShowPopover(false);\r\n }, 500);\r\n }\r\n\r\n return () => clearTimeout(timeout);\r\n }, [status]);\r\n\r\n useEffect(() => {\r\n if (conditions(ConditionName.isComplexPortrait) && status) setMaxHeight(window.innerHeight - videoElementSizeInfo.bottom);\r\n }, [status]);\r\n\r\n const handleTouchMove = (event: any) => {\r\n if (event.touches[0].clientY >= videoElementSizeInfo.top) setMaxHeightOnTouchMove(window.innerHeight - event.touches[0].clientY);\r\n else setMaxHeightOnTouchMove(window.innerHeight - videoElementSizeInfo.top);\r\n setZIndexOnCatchUp(zIndex.maxPopover);\r\n };\r\n\r\n const handleTouchEnd = () => {\r\n if (maxHeightOnTouchMove !== 0) {\r\n if (maxHeightOnTouchMove > maxHeight) {\r\n if (maxHeightOnTouchMove - maxHeight > (window.innerHeight - videoElementSizeInfo.top - maxHeight) / 2) {\r\n setMaxHeightOnTouchMove(window.innerHeight - videoElementSizeInfo.top);\r\n setZIndexOnCatchUp(zIndex.maxPopover);\r\n } else {\r\n setMaxHeightOnTouchMove(0);\r\n setTimeout(() => setZIndexOnCatchUp(0), 500);\r\n }\r\n } else {\r\n if (maxHeightOnTouchMove > maxHeight / 2) setMaxHeightOnTouchMove(maxHeight);\r\n else {\r\n setMaxHeightOnTouchMove(0);\r\n setMaxHeight(0);\r\n onClose();\r\n }\r\n setZIndexOnCatchUp(0);\r\n }\r\n }\r\n };\r\n\r\n const content = (\r\n <>\r\n {isBlurBackground && (\r\n <div\r\n className={`pl-bg-black/[0.5] pl-w-screen pl-h-screen pl-fixed pl-top-0 pl-right-0 animate__animated animate__faster ${status ? \"animate__fadeIn\" : \"animate__fadeOut\"\r\n }`}\r\n style={{ zIndex: zIndex.popoverBlurBackground }}\r\n />\r\n )}\r\n <div\r\n className={`${type === \"modal\" &&\r\n \"pl-fixed pl-top-0 pl-left-0 pl-flex pl-w-full pl-h-full pl-justify-center pl-items-end sm:pl-items-center\"\r\n } ${parentClassNames}`}\r\n style={{ zIndex: isFullHeight && !isFocusOnInput ? zIndexOnCatchUp : zIndex.popoverContent }}\r\n >\r\n <div\r\n className={`pl-flex pl-flex-col pl-rounded-[8px] animate__animated animate__faster pl-bg-white/[0.9] dark:pl-bg-black/[0.7]\r\n ${isFullHeight && \"pl-h-full\"}\r\n ${animation\r\n ? animation\r\n : window.innerWidth > 768 && type === \"modal\"\r\n ? status\r\n ? \"animate__fadeIn\"\r\n : \"animate__fadeOut\"\r\n : status\r\n ? \"animate__fadeInUp\"\r\n : \"animate__fadeOutDown\"\r\n }\r\n ${conditions(ConditionName.isTouchScreenPortrait)\r\n ? `!pl-fixed !pl-right-0 !pl-left-0 !pl-bottom-0 !pl-w-full !pl-mb-0 pl-rounded-[12px] !pl-rounded-b-none !pl-bg-white dark:!pl-bg-dark-3`\r\n : \"before:pl-hidden\"\r\n } \r\n ${type !== \"modal\" && \"pl-absolute pl-bottom-full pl-overflow-auto no-scrollbar\"}\r\n ${classNames}\r\n `}\r\n style={{\r\n maxHeight: isFullScreen\r\n ? \"unset\"\r\n : maxHeightOnTouchMove\r\n ? maxHeightOnTouchMove\r\n : maxHeight\r\n ? maxHeight\r\n : conditions(ConditionName.isComplexPortrait)\r\n ? 0\r\n : \"\",\r\n zIndex: zIndex.popoverContent,\r\n ...styles\r\n }}\r\n ref={ref}\r\n >\r\n <>\r\n {isHeader && (\r\n <div\r\n onTouchMove={isHasCatchUpLineOnTop ? handleTouchMove : () => { }}\r\n onTouchEndCapture={isHasCatchUpLineOnTop ? handleTouchEnd : () => { }}\r\n >\r\n {isHasCatchUpLineOnTop && (\r\n <div className=\"pl-absolute pl-top-[10px] pl-right-[50%] pl-mr-[-25px] pl-text-center pl-w-8 pl-h-1 pl-rounded-[20px] pl-bg-gray-highLight\" />\r\n )}\r\n {isHeader && (\r\n <div\r\n className={`pl-mb-4 pl-border-b pl-border-secondary-300 dark:pl-border-secondary-400 pl-mx-4 ${headerClassName}`}\r\n >\r\n {customHeader ? (\r\n customHeader\r\n ) : (\r\n <div className=\"pl-flex pl-items-center pl-justify-between pl-py-[19px]\">\r\n <p className=\"pl-text-[18px] pl-text-black dark:pl-text-white pl-font-bold\">{headerTitle}</p>\r\n {showCloseIcon && (\r\n <CloseIcon\r\n className={`pl-cursor-pointer pl-stroke-secondary-400 dark:pl-stroke-dark-5`}\r\n onClick={onClose}\r\n />\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n <>{pinContent}</>\r\n <div\r\n className={`pl-overflow-y-auto pl-h-full pl-w-full ${!scrollbar && \"no-scrollbar\"}`}\r\n onTouchMove={(event: TouchEvent<HTMLDivElement>) => event.stopPropagation()}\r\n >\r\n {children}\r\n </div>\r\n </>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n\r\n return (\r\n <>\r\n {showPopover && (\r\n <>\r\n {type === \"modal\" ? (\r\n createPortal(<>{content}</>, document.getElementById(\"dialog-react-root-videoPlayer\")!)\r\n ) : (\r\n <div>{content}</div>\r\n )}\r\n </>\r\n )}\r\n </>\r\n );\r\n }\r\n);\r\n\r\nPopover.displayName = \"popover\";\r\n\r\nexport default Popover;\r\n","import { shallowEqual } from \"react-redux\";\r\nimport { memo, useRef, useState } from \"react\";\r\nimport { useAppDispatch, useAppSelector } from \"../../../helpers/redux/hooks\";\r\nimport { conditions } from \"../../../helpers/conditions/conditions\";\r\nimport { ConditionName, SettingSections } from \"../../../helpers/interfaces/enums\";\r\nimport { sendFluentLog } from \"../../../helpers/logs/fluentdLogger\";\r\nimport { qualityChangeRequestLog } from \"../../../helpers/logs/logs\";\r\nimport { setActiveElements } from \"../../../helpers/redux/slices/controllerSlice\";\r\nimport { setQualityLevelsPopover, setSettingPopover } from \"../../../helpers/redux/slices/popoversSlice\";\r\nimport { setUserSettings } from \"../../../helpers/redux/slices/userSlice\";\r\nimport Image from \"next/legacy/image\";\r\nimport IMAGES from \"../../../images/importImages\";\r\nimport { IQualityLevel } from \"../../../helpers/interfaces/interfaces\";\r\nimport Popover from \"../popover/popover\";\r\nimport useOnClickOutside from \"../../../helpers/hooks/useOnClickOutside\";\r\nimport ControllbarTooltip from \"../footer/controllbar/controllbarTooltip\";\r\n\r\nconst QualityLevels = ({ setSection, showQualityLevelsIcon }: IQualityLevel) => {\r\n const dispatch = useAppDispatch();\r\n let { qualityLevels } = useAppSelector(\r\n ({ controller: { qualityLevels, manualQuality, autoQuality, showMiniPlayer } }) => ({\r\n qualityLevels,\r\n manualQuality,\r\n autoQuality,\r\n showMiniPlayer\r\n }),\r\n shallowEqual\r\n );\r\n const { settings } = useAppSelector(({ user: { settings } }) => ({ settings }), shallowEqual);\r\n const { qualityLevelsPopover } = useAppSelector(({ popovers: { qualityLevelsPopover } }) => ({ qualityLevelsPopover }), shallowEqual);\r\n useAppSelector(({ videoData: { params, videoElementSizeInfo } }) => ({ params, videoElementSizeInfo }), shallowEqual);\r\n\r\n const [showTooltip, setShowTooltip] = useState<boolean>(false);\r\n\r\n qualityLevels = [-1, ...qualityLevels];\r\n\r\n const handleTickSelectedQuality = (index: number, qualityLevel: number) => {\r\n if (conditions(ConditionName.isAutoQuality) && qualityLevel === -1) return true;\r\n else return !conditions(ConditionName.isAutoQuality) && settings.quality === index;\r\n };\r\n\r\n const qualityLevelsRef = useRef<any>(null);\r\n\r\n useOnClickOutside(qualityLevelsRef, () => {\r\n if (qualityLevelsPopover) dispatch(setQualityLevelsPopover(false));\r\n });\r\n\r\n const qualityLevelsContent = (\r\n <div id={SettingSections.qualityLevels} className=\"animate__animated animate__fadeIn pl-py-2\">\r\n <ul className=\"pl-flex pl-flex-col\">\r\n {qualityLevels.map((qualityLevel: number, index: number) => (\r\n <li\r\n key={index}\r\n className={`pl-flex pl-items-center pl-text-[14px] pl-font-medium pl-rounded-[4px] pl-relative pl-cursor-pointer pl-leading-6 pl-p-1 pl-pr-2 ${handleTickSelectedQuality(index - 1, qualityLevel) && \"pl-bg-primary/[0.12] !pl-cursor-default\"\r\n }`}\r\n onClick={handleTickSelectedQuality(index - 1, qualityLevel) ? () => { } : () => {\r\n sendFluentLog(qualityChangeRequestLog(qualityLevel === -1 ? \"auto\" : `${qualityLevel}P`));\r\n dispatch(setActiveElements(false));\r\n dispatch(setSettingPopover(false));\r\n dispatch(setQualityLevelsPopover(false));\r\n dispatch(setUserSettings({ ...settings, quality: qualityLevel === -1 ? -1 : index - 1 }));\r\n if (setSection) setSection(SettingSections.main);\r\n }}\r\n >\r\n {!conditions(ConditionName.isTouchScreen) && handleTickSelectedQuality(index - 1, qualityLevel) && (\r\n <div className=\"pl-absolute pl-right-[10px]\">\r\n <Image\r\n src={IMAGES.tick}\r\n alt=\"\"\r\n width={12}\r\n height={9}\r\n />\r\n </div>\r\n )}\r\n {conditions(ConditionName.isTouchScreen) && (\r\n <div className={`pl-w-5 pl-h-5 pl-rounded-full pl-border pl-border-black/[0.5] pl-p-0.5 ${handleTickSelectedQuality(index - 1, qualityLevel) && \"pl-border-primary\"} pl-mr-[10px]`}>\r\n {handleTickSelectedQuality(index - 1, qualityLevel) && <div className=\"pl-w-full pl-h-full pl-rounded-full pl-bg-primary\"/>}\r\n </div>\r\n )}\r\n <span className={`pl-w-full pl-px-2 pl-py-1 ${conditions(ConditionName.isTouchScreen) ? \"pl-pr-[21px]\" : \"pl-pr-[36px]\"}`}>\r\n {qualityLevel === -1 ? (\r\n <span>\r\n <span className=\"pl-text-[12px] pl-font-medium\">خودکار </span>\r\n <span className=\"pl-text-[10px] pl-font-normal pl-text-black/[0.87]\">(بر اساس سرعت اینترنت شما)</span>\r\n </span>\r\n ) : `${qualityLevel}p`}\r\n </span>\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n )\r\n\r\n return (\r\n <>\r\n {showQualityLevelsIcon ? (\r\n <div className=\"pl-relative pl-flex pl-items-center\">\r\n <Image\r\n src={IMAGES.qualitySetting1}\r\n alt=\"speed-icon\"\r\n width={20}\r\n height={20}\r\n onClick={() => dispatch(setQualityLevelsPopover(true))}\r\n onMouseOver={() => !conditions(ConditionName.isTouchScreen) && !conditions(ConditionName.showQualityLevelsPopover) && setShowTooltip(true)}\r\n onMouseLeave={() => !conditions(ConditionName.isTouchScreen) && setShowTooltip(false)}\r\n className=\"pl-cursor-pointer\"\r\n />\r\n {showTooltip && (\r\n <ControllbarTooltip\r\n title=\"کیفیت پخش\"\r\n />\r\n )}\r\n <Popover\r\n classNames={`!pl-p-0 pl-overflow-hidden !pl-bg-white dark:!pl-bg-dark-13 ${conditions(ConditionName.isTouchScreen) ? \"!pl-fixed !pl-bottom-0 !pl-rounded-t-[12px] pl-rounded-b-none\" : \"pl-right-0 pl-mb-[33px] !pl-rounded-[12px] pl-w-[230px]\"} ${conditions(ConditionName.isTouchScreenPortrait) && \"!pl-w-screen tablet:pl-max-w-[285px]\"} ${conditions(ConditionName.isTouchScreenLandscape) && \"pl-w-full pl-max-w-[285px]\"}`}\r\n status={qualityLevelsPopover}\r\n onClose={() => dispatch(setQualityLevelsPopover(false))}\r\n type={conditions(ConditionName.isTouchScreen) ? \"modal\" : \"popover\"}\r\n isBlurBackground={conditions(ConditionName.isTouchScreenPortrait)}\r\n ref={qualityLevelsRef}\r\n >\r\n {qualityLevelsContent}\r\n </Popover>\r\n </div>\r\n ) : (\r\n <>{qualityLevelsContent}</>\r\n )}\r\n\r\n </>\r\n );\r\n};\r\n\r\nexport default memo(QualityLevels);\r\n","import { ChangeEvent, RefObject, useEffect } from \"react\";\r\n\r\nconst useOnClickOutside = (ref: RefObject<HTMLInputElement>, handler: (event: ChangeEvent<HTMLInputElement>) => void) => {\r\n useEffect(() => {\r\n const listener = (event: any) => {\r\n // Do nothing if clicking ref's element or descendent elements\r\n if (!ref.current || ref.current.contains(event.target)) return;\r\n handler(event);\r\n };\r\n document.addEventListener(\"mousedown\", listener);\r\n document.addEventListener(\"touchstart\", listener);\r\n return () => {\r\n document.removeEventListener(\"mousedown\", listener);\r\n document.removeEventListener(\"touchstart\", listener);\r\n };\r\n }, [ref, handler]);\r\n};\r\n\r\nexport default useOnClickOutside;\r\n","import { useEffect, useRef, useState } from \"react\";\r\nimport { shallowEqual } from \"react-redux\";\r\nimport { useAppDispatch, useAppSelector } from \"../../../helpers/redux/hooks\";\r\nimport useOnClickOutside from \"../../../helpers/hooks/useOnClickOutside\";\r\nimport { setSettingPopover, setSpeedPopover } from \"../../../helpers/redux/slices/popoversSlice\";\r\nimport { videoTag } from \"../../../helpers/constants\";\r\nimport { conditions } from \"../../../helpers/conditions/conditions\";\r\nimport { ConditionName, SettingSections } from \"../../../helpers/interfaces/enums\";\r\nimport { setUserSettings } from \"../../../helpers/redux/slices/userSlice\";\r\nimport { sendFluentLog } from \"../../../helpers/logs/fluentdLogger\";\r\nimport { speedChangeLog } from \"../../../helpers/logs/logs\";\r\nimport { ISpeed } from \"../../../helpers/interfaces/interfaces\";\r\nimport Image from \"next/legacy/image\";\r\nimport IMAGES from \"../../../images/importImages\";\r\nimport Popover from \"../popover/popover\";\r\nimport { setActiveElements } from \"../../../helpers/redux/slices/controllerSlice\";\r\nimport ControllbarTooltip from \"../footer/controllbar/controllbarTooltip\";\r\n\r\nconst speeds = [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2];\r\n\r\nconst Speed = ({setSection, showSpeedIcon}: ISpeed) => {\r\n const dispatch = useAppDispatch();\r\n useAppSelector(({ controller: { showMiniPlayer } }) => ({ showMiniPlayer }), shallowEqual);\r\n useAppSelector(({ videoData: { videoElementSizeInfo, params } }) => ({ videoElementSizeInfo, params }), shallowEqual);\r\n const { speedPopover } = useAppSelector(({ popovers: { speedPopover } }) => ({ speedPopover }), shallowEqual);\r\n const { settings } = useAppSelector(({ user: { settings } }) => ({ settings }), shallowEqual);\r\n\r\n const speedRef = useRef<any>(null);\r\n\r\n const [showTooltip, setShowTooltip] = useState<boolean>(false);\r\n\r\n useOnClickOutside(speedRef, () => {\r\n if (speedPopover) dispatch(setSpeedPopover(false));\r\n });\r\n\r\n useEffect(() => {\r\n if (videoTag()) videoTag().playbackRate = settings.speed;\r\n }, []);\r\n\r\n const speedContent = (\r\n <div id={SettingSections.speed} className=\"animate__animated animate__fadeIn pl-py-2\">\r\n <ul className=\"pl-flex pl-flex-col\">\r\n {speeds.map((speed: number, index: number) => (\r\n <li\r\n key={index}\r\n className={`pl-flex pl-items-center pl-text-[14px] pl-font-medium pl-rounded-[4px] pl-relative pl-cursor-pointer pl-leading-6 pl-p-1 pl-pr-2 ${settings.speed === speed && \"pl-bg-primary/[0.12] !pl-cursor-default\"}`}\r\n onClick={settings.speed === speed ? () => { } : () => {\r\n if (!conditions(ConditionName.isStaticFormat)) sendFluentLog(speedChangeLog(speed));\r\n dispatch(setActiveElements(false));\r\n dispatch(setSettingPopover(false));\r\n dispatch(setSpeedPopover(false));\r\n dispatch(setUserSettings({ ...settings, speed }));\r\n videoTag().playbackRate = speed;\r\n if (setSection) setSection(SettingSections.main);\r\n }}\r\n >\r\n {!conditions(ConditionName.isTouchScreen) && settings.speed === speed && (\r\n <div className=\"pl-absolute pl-right-[10px]\">\r\n <Image\r\n src={IMAGES.tick}\r\n alt=\"\"\r\n width={12}\r\n height={9}\r\n />\r\n </div>\r\n )}\r\n {conditions(ConditionName.isTouchScreen) && (\r\n <div className={`pl-w-5 pl-h-5 pl-rounded-full pl-border pl-border-black/[0.5] pl-p-0.5 ${settings.speed === speed && \"pl-border-primary\"} pl-mr-[10px]`}>\r\n {settings.speed === speed && <div className=\"pl-w-full pl-h-full pl-rounded-full pl-bg-primary\" />}\r\n </div>\r\n )}\r\n <p className=\"pl-w-full pl-px-2 pl-py-1 pl-pr-[36px] pl-flex pl-items-center pl-gap-2\">{speed}</p>\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n )\r\n\r\n return (\r\n <>\r\n {showSpeedIcon ? (\r\n <div className=\"pl-relative pl-flex pl-items-center\">\r\n <Image\r\n src={IMAGES.speed1}\r\n alt=\"speed-icon\"\r\n width={20}\r\n height={20}\r\n onClick={() => dispatch(setSpeedPopover(true))}\r\n onMouseOver={() => !conditions(ConditionName.isTouchScreen) && !conditions(ConditionName.showSpeedPopover) && setShowTooltip(true)}\r\n onMouseLeave={() => !conditions(ConditionName.isTouchScreen) && setShowTooltip(false)}\r\n className=\"pl-cursor-pointer\"\r\n />\r\n {showTooltip && (\r\n <ControllbarTooltip\r\n title=\"سرعت\"\r\n />\r\n )}\r\n <Popover\r\n classNames={`!pl-p-0 pl-overflow-hidden !pl-bg-white ${conditions(ConditionName.isTouchScreen) ? \"!pl-fixed !pl-bottom-0 !pl-rounded-t-[12px] pl-rounded-b-none\" : \"!pl-w-[230px] pl-right-0 pl-mb-[33px] !pl-rounded-[12px]\"} ${conditions(ConditionName.isTouchScreenPortrait) && \"!pl-w-screen tablet:!pl-max-w-[285px] tablet:!pl-mx-auto\"} ${conditions(ConditionName.isTouchScreenLandscape) && \"pl-w-full pl-max-w-[285px]\"}`}\r\n status={speedPopover}\r\n onClose={() => dispatch(setSpeedPopover(false))}\r\n type={conditions(ConditionName.isTouchScreen) ? \"modal\" : \"popover\"}\r\n isBlurBackground={conditions(ConditionName.isTouchScreenPortrait)}\r\n ref={speedRef}\r\n isHeader={conditions(ConditionName.isTouchScreen)}\r\n customHeader={<></>}\r\n isHasCatchUpLineOnTop={conditions(ConditionName.isTouchScreen)}\r\n >\r\n {speedContent}\r\n </Popover>\r\n </div>\r\n ) : (\r\n <>{speedContent}</>\r\n )}\r\n\r\n </>\r\n );\r\n};\r\n\r\nexport default Speed;\r\n","import { shallowEqual } from \"react-redux\";\r\nimport { useAppSelector } from \"../../../helpers/redux/hooks\";\r\nimport { secondsToHMS } from \"../../../helpers/helpers\";\r\nimport { ConditionName } from \"../../../helpers/interfaces/enums\";\r\nimport { conditions } from \"../../../helpers/conditions/conditions\";\r\n\r\nconst ElapsedTime = () => {\r\n const { duration, currentTime } = useAppSelector(\r\n ({ controller: { duration, currentTime } }) => ({ duration, currentTime }),\r\n shallowEqual\r\n );\r\n useAppSelector(\r\n ({ videoData: { videoElementSizeInfo, params } }) => ({ videoElementSizeInfo, params }),\r\n shallowEqual\r\n );\r\n\r\n return (\r\n <>\r\n <div\r\n className={`pl-mr-auto pl-ml-4 !pl-text-white pl-w-full pl-max-w-max pl-text-[12px] pl-font-bold ${!conditions(ConditionName.isTouchScreenPortrait) && \"pl-mb-8\"}`}\r\n >\r\n <span>{secondsToHMS(duration)}</span>\r\n <span> / </span>\r\n <span>{secondsToHMS(currentTime)}</span>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default ElapsedTime;\r\n","import Image from \"next/legacy/image\";\r\nimport IMAGES from \"../../../images/importImages\";\r\nimport { handleLock } from \"../../../helpers/redux/actions/controller.actions\";\r\n\r\nconst Unlock = () => {\r\n\r\n return (\r\n <Image \r\n src={IMAGES.unlock} \r\n alt=\"unlock-icon\" \r\n width={20} \r\n height={20}\r\n onClick={() => handleLock(\"lock\")}\r\n />\r\n );\r\n};\r\n\r\nexport default Unlock;\r\n","import Image from \"next/legacy/image\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { conditions } from \"../../../helpers/conditions/conditions\";\r\nimport { ConditionName } from \"../../../helpers/interfaces/enums\";\r\nimport { setActiveElements } from \"../../../helpers/redux/slices/controllerSlice\";\r\nimport { useAppDispatch, useAppSelector } from \"../../../helpers/redux/hooks\";\r\nimport { shallowEqual } from \"react-redux\";\r\nimport IMAGES from \"../../../images/importImages\";\r\nimport store from \"../../../helpers/redux/store\";\r\nimport { notShowingLoaderTime, showLoaderTime } from \"../../../helpers/environment\";\r\n\r\nconst CheckInternet = () => {\r\n const dispatch = useAppDispatch();\r\n const { isLoading } = useAppSelector(({ controller: { isLoading } }) => ({ isLoading }), shallowEqual);\r\n\r\n const [showLoader, setShowLoader] = useState<boolean>(false);\r\n\r\n useEffect(() => {\r\n let timeout: any = null;\r\n clearTimeout(timeout);\r\n if (conditions(ConditionName.isLoading)) {\r\n timeout = setTimeout(() => {\r\n const isLoading = store.getState().controller.isLoading;\r\n if (isLoading) setShowLoader(true);\r\n },showLoaderTime)\r\n timeout = setTimeout(() => {\r\n setShowLoader(false);\r\n dispatch(setActiveElements(false));\r\n }, notShowingLoaderTime)\r\n } else {\r\n clearTimeout(timeout);\r\n setShowLoader(false);\r\n dispatch(setActiveElements(false));\r\n }\r\n\r\n return () => clearTimeout(timeout);\r\n }, [isLoading])\r\n\r\n return (\r\n <div className={`pl-absolute pl-bottom-0 pl-w-full pl-flex pl-justify-center pl-mb-[20px] animate__animated animate__faster ${showLoader ? \"animate__fadeIn\" : \"animate__fadeOut\"} ${conditions(ConditionName.showMiniPlayer) ? \"pl-z-[10]\" : \"pl-z-[-1]\"}`}>\r\n <div className=\"pl-flex pl-items-center pl-gap-3 pl-bg-background pl-w-max pl-px-[18px] pl-py-4 pl-rounded-[8px]\">\r\n <Image\r\n src={IMAGES.infoCircle}\r\n alt=\"info-circle\"\r\n width={16}\r\n height={16}\r\n />\r\n <p className=\"pl-text-[12px] pl-text-white/[0.9]\">لطفا وضعیت اینترنت خود را بررسی کنید.</p>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default CheckInternet;","import dynamic from \"next/dynamic\";\r\nimport { ConditionName } from \"../../../helpers/interfaces/enums\";\r\nimport { conditions } from \"../../../helpers/conditions/conditions\";\r\n\r\nconst StaticVideoTag = dynamic(() => import(\"./staticVideoTag\"));\r\nconst NonStaticVideoTag = dynamic(() => import(\"./nonStaticVideoTag\"));\r\n\r\nconst VideoTag = () => {\r\n return <>{conditions(ConditionName.isStaticFormat) ? <StaticVideoTag /> : <NonStaticVideoTag /> }</>;\r\n};\r\n\r\nexport default VideoTag;\r\n","import { useEffect } from \"react\";\r\nimport { handleIsComplexDesktop } from \"../helpers\";\r\nimport { conditions } from \"../conditions/conditions\";\r\nimport { shallowEqual } from \"react-redux\";\r\nimport { useAppDispatch, useAppSelector } from \"../redux/hooks\";\r\nimport { setIsFullScreen } from \"../redux/slices/controllerSlice\";\r\nimport { handleVideoElementSizeInfo } from \"../redux/actions/controller.actions\";\r\nimport { fullscreenLog } from \"../logs/logs\";\r\nimport { sendFluentLog } from \"../logs/fluentdLogger\";\r\n\r\nconst useFullScreen = () => {\r\n const dispatch = useAppDispatch();\r\n useAppSelector(({ videoData: { params } }) => ({ params }), shallowEqual);\r\n\r\n useEffect(() => {\r\n const handleChangeFullScreen = () => {\r\n const isFullScreen = document.fullscreenElement;\r\n\r\n if (isFullScreen) dispatch(setIsFullScreen(true));\r\n else {\r\n dispatch(setIsFullScreen(false));\r\n handleVideoElementSizeInfo();\r\n sendFluentLog(fullscreenLog(\"exitFullScreen\"));\r\n }\r\n };\r\n\r\n if (document.addEventListener) {\r\n document.addEventListener(\"webkitfullscreenchange\", handleChangeFullScreen, false);\r\n document.addEventListener(\"mozfullscreenchange\", handleChangeFullScreen, false);\r\n document.addEventListener(\"fullscreenchange\", handleChangeFullScreen, false);\r\n document.addEventListener(\"MSFullscreenChange\", handleChangeFullScreen, false);\r\n }\r\n\r\n () => {\r\n document.removeEventListener(\"webkitfullscreenchange\", handleChangeFullScreen, false);\r\n document.removeEventListener(\"mozfullscreenchange\", handleChangeFullScreen, false);\r\n document.removeEventListener(\"fullscreenchange\", handleChangeFullScreen, false);\r\n document.removeEventListener(\"MSFullscreenChange\", handleChangeFullScreen, false);\r\n };\r\n }, []);\r\n};\r\n\r\nexport default useFullScreen;\r\n","import { useEffect, useRef } from \"react\";\r\nimport { checkParentTarget, isTouchScreen } from \"../helpers\";\r\nimport { activeElementsTime } from \"../environment\";\r\nimport { shallowEqual } from \"react-redux\";\r\nimport { useAppDispatch, useAppSelector } from \"../redux/hooks\";\r\nimport { setActiveElements } from \"../redux/slices/controllerSlice\";\r\nimport store from \"../redux/store\";\r\n\r\nconst useActiveInActive = (isRightDoubleTouched: boolean, isLeftDoubleTouched: boolean) => {\r\n const dispatch = useAppDispatch();\r\n const { activeElements } = useAppSelector(({ controller: { activeElements } }) => ({ activeElements }), shallowEqual);\r\n\r\n const timeoutRef = useRef<any>(null);\r\n const isRightDoubleTouchedRef = useRef<boolean>(isRightDoubleTouched);\r\n const isLeftDoubleTouchedRef = useRef<boolean>(isLeftDoubleTouched);\r\n\r\n useEffect(() => {\r\n isRightDoubleTouchedRef.current = isRightDoubleTouched;\r\n }, [isRightDoubleTouched]);\r\n\r\n useEffect(() => {\r\n isLeftDoubleTouchedRef.current = isLeftDoubleTouched;\r\n }, [isLeftDoubleTouched]);\r\n\r\n useEffect(() => {\r\n let shouldInActiveElements = false;\r\n\r\n const handlePointerMove = (event: any) => {\r\n const { activeElements, isEnded } = store.getState().controller;\r\n if (isEnded) dispatch(setActiveElements(true));\r\n else if (event.pointerType === \"mouse\") {\r\n clearTimeout(timeoutRef.current);\r\n if (!activeElements) dispatch(setActiveElements(true));\r\n else if (\r\n [\"player-tag\", \"main-content\", \"player-controllbar\", \"video-opacity\", \"playerElements\", \"touchBackward\", \"touchForward\"].includes(event.target.id)\r\n )\r\n shouldInActiveElements = true;\r\n timeoutRef.current = setTimeout(() => {\r\n const { settingPopover, markersListPopover, speedPopover, qualityLevelsPopover } = store.getState().popovers;\r\n const { play } = store.getState().controller;\r\n if (!settingPopover && !markersListPopover && !speedPopover && !qualityLevelsPopover && play && shouldInActiveElements) dispatch(setActiveElements(false));\r\n }, activeElementsTime);\r\n }\r\n };\r\n\r\n const handleTouchStart = (event: any) => {\r\n setTimeout(() => {\r\n const { activeElements, isEnded, firstPlay } = store.getState().controller;\r\n clearTimeout(timeoutRef.current);\r\n if (isEnded) return dispatch(setActiveElements(true));\r\n if (isTouchScreen() && !firstPlay && !isRightDoubleTouchedRef.current && !isLeftDoubleTouchedRef.current) {\r\n if (\r\n [\"player-tag\", \"main-content\", \"video-opacity\", \"touchBackward\", \"touchForward\"].includes(event.target.id) ||\r\n checkParentTarget(event, \"playerElements\")\r\n ) {\r\n dispatch(setActiveElements(!activeElements));\r\n timeoutRef.current = setTimeout(() => {\r\n const { settingPopover, markersListPopover, speedPopover, qualityLevelsPopover } = store.getState().popovers;\r\n if (!settingPopover && !markersListPopover && !speedPopover && !qualityLevelsPopover) dispatch(setActiveElements(false));\r\n }, activeElementsTime);\r\n } else {\r\n timeoutRef.current = setTimeout(() => {\r\n const { settingPopover, markersListPopover, speedPopover, qualityLevelsPopover } = store.getState().popovers;\r\n if (!settingPopover && !markersListPopover && !speedPopover && !qualityLevelsPopover) dispatch(setActiveElements(false));\r\n }, activeElementsTime);\r\n }\r\n }\r\n }, 200);\r\n };\r\n\r\n const handleTouchMove = () => {\r\n clearTimeout(timeoutRef.current);\r\n timeoutRef.current = setTimeout(() => {\r\n const { activeElements, isEnded } = store.getState().controller;\r\n const { settingPopover, markersListPopover, speedPopover, qualityLevelsPopover } = store.getState().popovers;\r\n if (isEnded) dispatch(setActiveElements(true));\r\n else if (!settingPopover && !markersListPopover && !speedPopover && !qualityLevelsPopover && activeElements && !isEnded)\r\n dispatch(setActiveElements(!activeElements));\r\n }, activeElementsTime);\r\n };\r\n\r\n document.getElementById(\"video-area\")!.addEventListener(\"touchstart\", handleTouchStart);\r\n document.getElementById(\"video-area\")!.addEventListener(\"touchmove\", handleTouchMove);\r\n document.getElementById(\"video-area\")!.addEventListener(\"pointermove\", handlePointerMove);\r\n\r\n return () => {\r\n const videoArea = document.getElementById(\"video-area\")!;\r\n if (videoArea) {\r\n videoArea.removeEventListener(\"touchstart\", handleTouchStart);\r\n videoArea.removeEventListener(\"touchmove\", handleTouchMove);\r\n videoArea.removeEventListener(\"pointermove\", handlePointerMove);\r\n }\r\n };\r\n }, [activeElements, isRightDoubleTouched, isLeftDoubleTouched]);\r\n};\r\n\r\nexport default useActiveInActive;\r\n","\"use client\";\r\n\r\nimport { shallowEqual } from \"react-redux\";\r\nimport VideoArea from \"../../custom-components/videoArea/videoArea\";\r\nimport { useAppSelector } from \"../../../helpers/redux/hooks\";\r\nimport useGetData from \"../../../helpers/hooks/useGetData/useGetData\";\r\nimport useHandleScroll from \"../../../helpers/hooks/useHandleScroll\";\r\nimport { conditions } from \"../../../helpers/conditions/conditions\";\r\nimport { ConditionName } from \"../../../helpers/interfaces/enums\";\r\nimport NotActive from \"../../custom-components/notActive/notActive\";\r\nimport { handleApplyContinuousPlayback } from \"../../../helpers/redux/actions/user.actions\";\r\n\r\nconst LiveAndVodPlayer = () => {\r\n useAppSelector(({ videoData: { params, details, isFetchDetails, isValidAddress } }) => ({params,details, isFetchDetails, isValidAddress}),shallowEqual );\r\n\r\n useGetData();\r\n handleApplyContinuousPlayback();\r\n useHandleScroll();\r\n\r\n return (\r\n <>\r\n {conditions(ConditionName.isFetchDetails) ? (\r\n conditions(ConditionName.isValidAddress) ? (\r\n <div\r\n className={`pl-max-h-[100dvh] pl-bg-dark-1 ${!conditions(ConditionName.isTouchScreen) && !conditions(ConditionName.isFullScreen) && \"!pl-rounded-[12px]\"}`}\r\n >\r\n <VideoArea />\r\n </div>\r\n ) : (\r\n <div className={`pl-w-full pl-aspect-video`}>\r\n <NotActive />\r\n </div>\r\n )\r\n ) : (\r\n <div className=\"pl-w-full pl-aspect-video pl-flex pl-items-center pl-justify-center\"></div>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport default LiveAndVodPlayer;\r\n","import useGetDetails from \"./useGetDetails\";\r\n\r\nconst useGetData = () => {\r\n useGetDetails();\r\n};\r\n\r\nexport default useGetData;\r\n","import { useEffect } from \"react\";\r\nimport { conditions } from \"../../conditions/conditions\";\r\nimport { shallowEqual } from \"react-redux\";\r\nimport { useAppSelector } from \"../../redux/hooks\";\r\nimport { ConditionName } from \"../../interfaces/enums\";\r\nimport { getLiveAndVodDetails } from \"../../redux/actions/videoData.actions\";\r\n\r\nconst useGetDetails = () => {\r\n const { params } = useAppSelector(\r\n ({ videoData: { params } }) => ({ params }),\r\n shallowEqual\r\n );\r\n useAppSelector(({ controller: { isEnded } }) => ({ isEnded }), shallowEqual);\r\n\r\n useEffect(() => {\r\n if (conditions(ConditionName.getDetails)) getLiveAndVodDetails();\r\n }, [params.id, params.type]);\r\n};\r\n\r\nexport default useGetDetails;\r\n","import { useEffect } from \"react\";\r\nimport { conditions } from \"../conditions/conditions\";\r\n\r\nimport { shallowEqual } from \"react-redux\";\r\nimport { useAppSelector } from \"../redux/hooks\";\r\nimport store from \"../redux/store\";\r\nimport { ConditionName } from \"../interfaces/enums\";\r\nimport { setShowMiniPlayer } from \"../redux/slices/controllerSlice\";\r\n\r\nconst useHandleScroll = () => {\r\n useAppSelector(({ videoData: { params } }) => ({ params }), shallowEqual);\r\n useAppSelector(({ controller: { showMiniPlayer } }) => ({ showMiniPlayer }), shallowEqual);\r\n\r\n useEffect(() => {\r\n const { params } = store.getState().videoData;\r\n const handleScroll = () => {\r\n const videoAreaElement = document.getElementById(conditions(ConditionName.showMiniPlayer) ? \"black-video-area\" : \"video-area\")!;\r\n if (conditions(ConditionName.hasScrollElementId) && !!videoAreaElement && !document.pictureInPictureElement) {\r\n const dispatch = store.dispatch;\r\n const videoAreaTopPosition = videoAreaElement.getBoundingClientRect().top;\r\n if (videoAreaTopPosition < 0) dispatch(setShowMiniPlayer(true));\r\n else dispatch(setShowMiniPlayer(false));\r\n }\r\n };\r\n let scrollElement: any;\r\n if (conditions(ConditionName.hasScrollElementId) && !document.pictureInPictureElement) {\r\n scrollElement = document.getElementById(params.scrollElementId!);\r\n if (scrollElement) scrollElement.addEventListener(\"scroll\", handleScroll);\r\n }\r\n return () => (conditions(ConditionName.hasScrollElementId) && scrollElement && !document.pictureInPictureElement) && scrollElement.removeEventListener(\"scroll\", handleScroll);\r\n }, []);\r\n};\r\n\r\nexport default useHandleScroll;\r\n","\"use client\";\r\n\r\nimport Image from \"next/legacy/image\";\r\nimport IMAGES from \"../../../images/importImages\";\r\n\r\nconst NotActive = () => {\r\n return (\r\n <div className={`pl-w-full pl-h-full pl-rounded-2xl pl-flex pl-flex-col pl-justify-center pl-items-center`}>\r\n <div className=\"pl-flex pl-justify-center\">\r\n <Image \r\n src={IMAGES.notFound}\r\n alt=\"\"\r\n width={120}\r\n height={70}\r\n />\r\n </div>\r\n <h1 className=\"pl-text-[12px] pl-font-medium pl-text-black/[0.87] pl-mt-4 pl-mb-2\">ویدیویی برای نمایش وجود نداره</h1>\r\n <p className=\"pl-text-[12px] pl-font-medium pl-text-black/[0.50]\">می‌تونید ویدیوهای مشابه با اون رو مشاهده کنید.</p>\r\n </div>\r\n );\r\n};\r\n\r\nexport default NotActive;\r\n"],"mappings":"+j2CAAAA,ICAAC,IAEA,OAAS,YAAAC,OAAgB,cCFzBC,IAEA,OAAS,aAAAC,OAAiB,QCF1BC,IAEA,OAAS,aAAAC,OAAiB,QAG1B,OAAOC,OAAa,YAKpB,IAAMC,GAAmBC,GAAe,CACpC,IAAMC,EAAWC,EAAe,EAE5BC,EAAuB,CAAC,EAEtBC,EAAyB,IAAM,CACjCH,EAASI,GAAgBF,CAAW,CAAC,EACrCF,EAASK,GAAW,EAAI,CAAC,CAC7B,EAEMC,EAAmB,IAAM,CAC3B,IAAIC,EAAaL,EAAY,WAC7B,OAAI,OAAOA,EAAY,YAAe,WAAUK,EAAaC,GAASN,EAAY,UAAU,GAC5FA,EAAY,WAAaK,EAClBL,CACX,EAEMO,EAAgB,IAAM,CAClBV,EAAM,OACR,aAAa,QAAQ,cAAeA,EAAM,IAAK,EAC/CG,EAAY,KAAOH,EAAM,KAEjC,EAEMW,EAAe,IAAM,CACvB,IAAMC,EAAiBC,GAAQ,IAAI,QAAQ,EACvCD,GAAkB,CAACT,EAAY,SAAQA,EAAY,OAASS,EACpE,EAEME,EAAyB,IAAM,CACjCX,EAAc,CACV,SAAU,UACV,MAAO,OACP,eAAgB,OAChB,GAAGH,CACP,CACJ,EAEMe,EAAqB,IAAM,CAC7B,IAAMC,EAAO,OAAOhB,EAAM,OAAO,CAAC,EAC5BiB,EAAS,OAAOjB,EAAM,SAAS,CAAC,EACtCG,EAAc,CACV,IAAKa,EAAK,SAAS,GAAG,EAAI,OAAO,KAAKA,EAAK,MAAM,EAAG,EAAE,CAAC,EAAI,OAAO,KAAKA,CAAI,EAC3E,KAAMhB,EAAM,KACZ,WAAYA,EAAM,WAClB,SAAUA,EAAM,SAChB,SAAUA,EAAM,SAChB,SAAU,QACV,SAAUA,EAAM,SAChB,MAAOA,EAAM,MACb,OAAQA,EAAM,OACd,MAASiB,GAAUA,IAAW,YAAc,OAAO,KAAKA,CAAM,EAAI,OAClE,WAAYjB,EAAM,WAClB,WAAYA,EAAM,WAClB,KAAMkB,GAAQ,CAClB,CACJ,EAEMC,EAAe,SAAY,CAC7BhB,EAAc,CAAC,EACX,OAAO,KAAKH,CAAK,EAAE,SAAS,MAAM,IAC9B,CAAC,OAAQ,MAAO,UAAW,MAAM,EAAE,SAAS,OAAOA,EAAM,IAAI,CAAC,GAC9Dc,EAAuB,EACvBH,EAAa,GACNS,GAAc,OAAOpB,EAAM,IAAI,CAAC,GAAGe,EAAmB,EACjEL,EAAc,EACV,OAAO,KAAKP,CAAW,GAAGI,EAAiB,EAC/CH,EAAuB,EAE/B,EAEAiB,GAAU,IAAM,CACZF,EAAa,CACjB,EAAG,CAACnB,CAAK,CAAC,CAEd,EAEOsB,GAAQvB,GCvFfwB,ICAAC,IAEA,OAAOC,OAAW,oBAClB,OAAqB,aAAAC,GAAW,YAAAC,OAAgB,QAChD,OAAS,gBAAAC,OAAoB,cCJ7BC,IAAA,OAAS,aAAAC,GAAW,UAAAC,GAAQ,YAAAC,OAAgB,QAC5C,OAAS,gBAAAC,OAAoB,cAC7B,OAAS,gBAAAC,OAAoB,iBCF7BC,IAAA,IAAMC,GAAc,CAChB,WAAY,KACZ,cAAe,KACf,SAAU,KACV,QAAS,KACT,SAAU,KACV,KAAM,KACN,OAAQ,KACR,WAAY,KACZ,UAAW,KACX,YAAa,KACb,iBAAkB,KAClB,KAAM,KACN,OAAQ,KACR,UAAW,KACX,MAAO,KACP,OAAQ,KACR,KAAM,KACN,eAAgB,KAChB,gBAAiB,KACjB,WAAY,KACZ,SAAU,KACV,YAAa,KACb,IAAK,IACT,EAEOC,EAAQD,GDdf,OAAOE,OAAW,oBAElB,IAAMC,GAAW,IAEXC,GAAkB,CAAC,CACrB,KAAAC,EACA,qBAAAC,EACA,oBAAAC,EACA,wBAAAC,EACA,uBAAAC,CACJ,IAA6B,CACzB,GAAM,CAACC,EAAsBC,CAAuB,EAAIC,GAAiB,EAAE,EACrE,CAACC,EAAMC,CAAO,EAAIF,GAAkB,EAAK,EACzCG,EAA0BC,GAAeN,CAAoB,EAE7DO,EAAWC,EAAe,EAC1B,CAAE,SAAAC,CAAS,EAAIC,EAAe,CAAC,CAAE,WAAY,CAAE,YAAAC,EAAa,SAAAF,EAAU,eAAAG,EAAe,CAAE,KAAO,CAAE,YAAAD,EAAa,SAAAF,EAAU,eAAAG,EAAe,GAAIC,EAAY,EACtJ,CAAE,qBAAAC,CAAqB,EAAIJ,EAC7B,CAAC,CAAE,UAAW,CAAE,qBAAAI,EAAsB,OAAAC,CAAO,CAAE,KAAO,CAAE,qBAAAD,EAAsB,OAAAC,CAAO,GACrFF,EACJ,EAEMG,EAAaV,GAAY,IAAI,EAEnCW,GAAU,IAAM,CACZZ,EAAwB,QAAUL,CACtC,EAAG,CAACA,CAAoB,CAAC,EAEzB,IAAIkB,EAEJA,EAAcC,GAAcC,GAAU,CAC9B,CAAC,gBAAiB,cAAc,EAAE,SAASzB,CAAI,IAC/CyB,EAAM,gBAAgB,EAClBzB,IAAS,iBAAmBI,EAAwBA,EAAuB,EAAI,EAC1EJ,IAAS,gBAAkBG,GAAyBA,EAAwB,EAAI,EACzF,aAAakB,EAAW,OAAO,EAC/BA,EAAW,QAAU,WAAW,IAAMZ,EAAQ,EAAI,EAAGX,EAAQ,EAErE,EAAG,GAAG,EAENwB,GAAU,IAAM,CACRd,IACAC,EAAQ,EAAK,EACbG,EAASc,EAAkB,EAAK,CAAC,EAC7BzB,GAAwBE,GACxBA,EAAwB,EAAK,EACzBwB,EAAS,EAAE,SAAWA,EAAS,EAAE,aAAejB,EAAwB,QAASkB,EAAsB5B,EAAM2B,EAAS,EAAE,QAAQ,EAC/HC,EAAsB5B,EAAMU,EAAwB,OAAO,EAChEJ,EAAwB,EAAE,GACnBJ,GAAuBE,IAC9BA,EAAuB,EAAK,EACxBuB,EAAS,EAAE,aAAejB,EAAwB,QAASkB,EAAsB5B,EAAM,CAAC,EACvF4B,EAAsB5B,EAAMU,EAAwB,OAAO,EAChEJ,EAAwB,EAAE,GAGtC,EAAG,CAACE,CAAI,CAAC,EAET,IAAMqB,EAAoBJ,GAAe,CACrCnB,EAAyBwB,GAASA,EAAO,EAAE,EACvCC,0BAA+C,GAAGC,GAAmBP,EAAOzB,CAAI,EACpF,aAAaqB,EAAW,OAAO,EAC/BA,EAAW,QAAU,WAAW,IAAMZ,EAAQ,EAAI,EAAGX,EAAQ,CACjE,EAEImC,EAEJ,MAAI,CAAC,WAAY,SAAS,EAAE,SAASjC,CAAI,EACrCiC,EACI,oBAAC,OACG,UAAW,GACP,CAACF,iBAAsC,GAAK,oBAChD,6DACI/B,IAAS,aAAe2B,EAAS,EAAE,aAAe,GAAK,iBAAmB,qDAC9E,IACI3B,IAAS,YACRc,EAAWa,EAAS,EAAE,aAAe,GAAK,iBAAmB,qDAClE,IACA,cAAgBF,GAAUA,EAAM,eAAe,GAE/C,oBAAC5B,GAAA,CACG,IAAKG,IAAS,WAAa,gBAAkB,eAC7C,IAAKA,IAAS,WAAakC,EAAO,WAAaA,EAAO,UACtD,MAAO,GACP,OAAQ,GACR,QAAS,IAAMN,EAAsB5B,EAAMK,CAAoB,EAC/D,cAAgBoB,GAAeA,EAAM,gBAAgB,EACzD,CACJ,EAEG,CAAC,gBAAiB,cAAc,EAAE,SAASzB,CAAI,IACtDiC,EACI,oBAAC,OACG,GAAIjC,EACJ,UAAW,iGACPA,IAAS,gBAAkB,oBAAsB,mBACrD,GACA,MAAO,CAAE,MAAOmB,EAAqB,MAAO,OAAQA,EAAqB,KAAM,EAC9E,GAAGI,IAEFtB,GAAwBC,IACtB,oBAAC,OACG,UAAW,sHACX,aAAc2B,GAEd,oBAAC,OACG,UAAW,GACP7B,IAAS,gBAAkB,gBAAkB,yBACjD,8CAEA,oBAACH,GAAA,CACG,IAAI,kBACJ,IAAKqC,EAAO,UACZ,UAAW,GAAGlC,IAAS,gBAAkB,eAAe,GACxD,MAAO,GACP,OAAQ,GACZ,EACA,oBAACH,GAAA,CACG,IAAI,kBACJ,IAAKqC,EAAO,UACZ,UAAW,GAAGlC,IAAS,gBAAkB,eAAe,GACxD,MAAO,GACP,OAAQ,GACZ,EACA,oBAACH,GAAA,CACG,IAAI,kBACJ,IAAKqC,EAAO,UACZ,UAAW,GAAGlC,IAAS,gBAAkB,eAAe,GACxD,MAAO,GACP,OAAQ,GACZ,CACJ,EACA,oBAAC,KAAE,UAAU,8DAA8DK,EAAqB,iCAAM,CAC1G,CAER,GAID,wCAAG4B,CAAU,CACxB,EAEOE,EAAQpC,GE1JfqC,IAAA,OAAOC,OAAW,oBAClB,OAAS,aAAAC,GAAW,UAAAC,GAAQ,YAAAC,OAAgB,QAC5C,OAAS,gBAAAC,OAAoB,cCF7BC,IAEA,IAAMC,GAAO,CAAC,CAAE,UAAAC,EAAW,QAAAC,CAAQ,IAE3B,oBAAC,OAAI,MAAM,KAAK,OAAO,KAAK,QAAQ,YAAY,KAAK,OAAO,MAAM,6BAA6B,UAAWD,EAAW,QAASC,GAC1H,oBAAC,KAAE,QAAQ,OACP,oBAAC,QAAK,EAAE,uSAAuS,EAC/S,oBAAC,QAAK,EAAE,+kBAA+kB,CAC3lB,CACJ,EAIDC,GAAQH,GCbfI,IAEA,IAAMC,GAAS,CAAC,CAAE,UAAAC,EAAW,QAAAC,CAAQ,IAE7B,oBAAC,OAAI,MAAM,KAAK,OAAO,KAAK,QAAQ,YAAY,KAAK,OAAO,MAAM,6BAA6B,UAAWD,EAAW,QAASC,GAC1H,oBAAC,QAAK,EAAE,4hBAA4hB,CACxiB,EAIDC,GAAQH,GFOf,IAAMI,GAAwB,IAAM,CAChC,GAAM,CAACC,EAAMC,CAAO,EAAIC,GAAiB,EAAE,EAErCC,EAAWC,EAAe,EAC1B,CAAE,SAAAC,CAAS,EAAIC,EAAe,CAAC,CAAE,KAAM,CAAE,SAAAD,CAAS,CAAE,KAAO,CAAE,SAAAA,CAAS,GAAIE,EAAY,EAEtFC,EAA4BC,GAAeJ,EAAS,UAAU,EAC9DK,EAAwBD,GAAeJ,EAAS,MAAM,EACtDM,EAAUF,GAAeT,CAAI,EAEnCY,GAAU,IAAM,CACZD,EAAQ,QAAUX,CACtB,EAAG,CAACA,CAAI,CAAC,EAETY,GAAU,IAAM,CACZ,IAAIC,EAAiB,EAEfC,EAA0BC,GAAe,CACvCC,gBAAqC,GAAK,CAACC,GAAkBF,EAAO,eAAe,IAAGF,EAAiBE,EAAM,QAAQ,CAAC,EAAE,QAChI,EAEMG,EAAyBH,GAAe,CACtCC,gBAAqC,GAAK,CAACC,GAAkBF,EAAO,eAAe,IACnFA,EAAM,gBAAgB,EAClBA,EAAM,QAAQ,CAAC,EAAE,QAAU,OAAO,WAAa,EAAGI,EAAgBJ,EAAO,SAAUF,EAAgB,OAAO,WAAW,EAChHE,EAAM,QAAQ,CAAC,EAAE,QAAU,OAAO,WAAa,GAAGI,EAAgBJ,EAAO,aAAcF,EAAgB,OAAO,WAAW,EAE1I,EAEMO,EAAuB,IAAM,CAC/B,GAAM,CAAE,SAAAf,CAAS,EAAIgB,EAAM,SAAS,EAAE,KAClCV,EAAQ,UAAY,cAAgBH,EAA0B,UAAYH,EAAS,YACnFiB,EAAcC,GAAcf,EAA0B,QAASH,EAAS,UAAU,CAAC,EACnFG,EAA0B,QAAUH,EAAS,YACtCM,EAAQ,UAAY,UAAYD,EAAsB,UAAYL,EAAS,SAClFiB,EAAcE,EAAUd,EAAsB,QAASL,EAAS,MAAM,CAAC,EACvEK,EAAsB,QAAUL,EAAS,QAE7C,WAAW,IAAMJ,EAAQ,EAAE,EAAG,GAAG,CACrC,EAEA,gBAAS,iBAAiB,aAAec,GAAeD,EAAuBC,CAAK,CAAC,EACrF,SAAS,iBAAiB,YAAcA,GAAeG,EAAsBH,CAAK,CAAC,EACnF,SAAS,iBAAiB,WAAY,IAAMK,EAAqB,CAAC,EAE3D,IAAM,CACT,SAAS,oBAAoB,aAAeL,GAAeD,EAAuBC,CAAK,CAAC,EACxF,SAAS,oBAAoB,YAAcA,GAAeG,EAAsBH,CAAK,CAAC,EACtF,SAAS,oBAAoB,WAAY,IAAMK,EAAqB,CAAC,CACzE,CACJ,EAAG,CAAC,CAAC,EAELR,GAAU,IAAM,CACRP,EAAS,SAAW,GAAK,CAACL,IAAMU,EAAsB,QAAU,EACxE,EAAG,CAACL,EAAS,MAAM,CAAC,EAEpB,IAAMc,EAAkB,CAACJ,EAAYf,EAAca,EAAwBY,IAAiB,CACxF,GAAM,CAAE,SAAApB,CAAS,EAAIgB,EAAM,SAAS,EAAE,KAChC,CAAE,yBAAAK,CAAyB,EAAIL,EAAM,SAAS,EAAE,WACtD,GAAI,CACKK,GAA0BvB,EAASwB,EAAkB,EAAK,CAAC,EAChEZ,EAAM,gBAAgB,EACtBd,EAAQD,CAAI,EACZ,GAAM,CAAE,OAAA4B,CAAO,EAAI,SAAS,uBAAuB,QAAQ,EAAE,CAAC,EAAE,sBAAsB,EACtF,GAAI5B,IAAS,SAAU,CACnB,IAAM6B,EAAQxB,EAAS,QAAYQ,EAAiBE,EAAM,QAAQ,CAAC,EAAE,SAAW,GAAMa,EAAUH,EAC5FK,EACAD,EAAQ,IAAKC,EAAc,IACtBD,EAAQ,EAAGC,EAAc,EAC7BA,EAAc,KAAK,KAAK,KAAK,IAAID,CAAK,CAAC,EAC5C1B,EAAS4B,EAAgB,CAAE,GAAG1B,EAAU,OAAQyB,CAAY,CAAC,CAAC,EAC9DE,EAAS,EAAE,OAASF,EAAc,GACtC,SAAW9B,IAAS,aAAc,CAC9B,IAAM6B,EAAQxB,EAAS,YAAgBQ,EAAiBE,EAAM,QAAQ,CAAC,EAAE,SAAW,GAAMa,EAAUH,EAChGI,EAAQ,IAAK1B,EAAS4B,EAAgB,CAAE,GAAG1B,EAAU,WAAY,GAAI,CAAC,CAAC,EAClEwB,EAAQ,EAAG1B,EAAS4B,EAAgB,CAAE,GAAG1B,EAAU,WAAY,CAAE,CAAC,CAAC,EACvEF,EAAS4B,EAAgB,CAAE,GAAG1B,EAAU,WAAY,KAAK,KAAK,KAAK,IAAIwB,CAAK,CAAC,CAAE,CAAC,CAAC,CAC1F,CACJ,MAAgB,CACZ,MAAO,EACX,CACJ,EAEA,OACI,oBAAC,OAAI,GAAG,qBACJ,oBAAC,OACG,UAAW,mEACX,MAAO,CAAE,QAASxB,EAAS,WAAa,GAAK,GAAM,EAAIA,EAAS,WAAa,GAAI,EACpF,EACD,oBAAC,OAAI,UAAU,kGACX,oBAAC,OAAI,UAAU,uDACX,oBAAC,OACG,GAAI,qBACJ,UAAW,0CACPL,IAAS,UAAY,gBACzB,6FAECA,IAAS,UACN,wCACI,oBAAC,OACG,UAAU,gEACV,MAAO,CAAE,OAAQ,GAAGK,EAAS,MAAM,GAAI,EAC3C,EACA,oBAAC,OAAI,UAAU,0DACX,oBAAC,OAAI,UAAU,uCACVA,EAAS,OAAS,GACf,oBAAC,OAAI,UAAU,gLAAgL,EAElMA,EAAS,OAAS,IACf,oBAAC,OAAI,UAAU,iLAAiL,EAEnMA,EAAS,OAAS,IACf,oBAAC,OAAI,UAAU,iLAAiL,CAExM,EACCA,EAAS,SAAW,EACjB,oBAAC4B,GAAA,CAAK,UAAU,kDAAkD,EAElE,oBAACC,GAAA,CAAO,UAAU,kDAAkD,CAE5E,CACJ,CAER,CACJ,EACClC,GACG,oBAAC,OAAI,UAAU,2JACVA,IAAS,SAAWK,EAAS,OAASA,EAAS,UACpD,EAEJ,oBAAC,OAAI,UAAU,sEACX,oBAAC,OACG,GAAI,yBACJ,UAAW,0CACPL,IAAS,cAAgB,gBAC7B,6FAECA,IAAS,cACN,wCACI,oBAAC,OACG,UAAU,8DACV,MAAO,CAAE,OAAQ,GAAGK,EAAS,UAAU,GAAI,EAC/C,EACA,oBAAC,OACG,UAAU,yDACV,MAAO,CAAE,QAASA,EAAS,WAAa,GAAI,GAE5C,oBAAC8B,GAAA,CAAM,IAAI,GAAG,IAAKC,EAAO,IAAK,UAAU,YAAY,MAAO,GAAI,OAAQ,GAAI,CAChF,CACJ,CAER,CACJ,CACJ,CACJ,CAER,EAEOC,GAAQtC,GG/KfuC,IAAA,OAAS,gBAAAC,OAAoB,cCA7BC,IAAA,OAAS,gBAAAC,OAAoB,cAK7B,IAAMC,GAAQ,IAAM,CAChB,GAAM,CAAE,QAAAC,EAAS,OAAAC,CAAO,EAAIC,EAAe,CAAC,CAAE,UAAW,CAAE,QAAAF,EAAS,OAAAC,CAAO,CAAE,KAAO,CAAE,QAAAD,EAAS,OAAAC,CAAO,GAAIE,EAAY,EAEtH,OACI,oBAAC,OACG,UAAW,wKACPC,oBAAyC,EAAI,iCAAmC,+BACpF,IAECA,YAAiC,EAAIJ,EAAQ,MAAQC,EAAO,EACjE,CAER,EAEOI,GAAQN,GCnBfO,IAAA,OAAOC,OAAW,oBAMlB,IAAMC,GAAO,IAGT,oBAAC,OAAI,UAAW,iDAAiDC,oBAAyC,EAAI,yCAA2C,yCAAyC,IAChM,oBAACC,GAAA,CACC,IAAKC,EAAO,KACZ,IAAI,YACJ,MAAO,GACP,OAAQ,GACR,QAAS,IAAMC,GAAW,QAAQ,EACpC,EACC,CAAC,aAAa,QAAQ,cAAc,GAAK,oBAAC,KAAE,UAAU,uHAAsH,iJAA4B,CAC3M,EAIGC,GAAQL,GFff,IAAMM,GAAS,KACXC,EAAe,CAAC,CAAE,WAAY,CAAE,KAAAC,EAAM,eAAAC,CAAe,CAAE,KAAO,CAAE,KAAAD,EAAM,eAAAC,CAAe,GAAIC,EAAY,EAGjG,oBAAC,OAAI,UAAW,yDACXC,aAAkC,GAAK,oBAACC,GAAA,IAAM,EAC9CD,UAA+B,GAAK,oBAACE,GAAA,IAAK,CAC/C,GAIDC,GAAQR,GGlBfS,IAAA,OAAS,aAAAC,GAAW,YAAAC,OAAgB,QACpC,OAAS,gBAAAC,OAAoB,cCD7BC,IAAA,OAAS,gBAAAC,OAAoB,cAM7B,OAAOC,OAAW,oBAElB,IAAMC,GAAY,KACdC,EAAe,CAAC,CAAE,WAAY,CAAE,KAAAC,EAAM,eAAAC,CAAe,CAAE,KAAO,CAAE,KAAAD,EAAM,eAAAC,CAAe,GAAIC,EAAY,EACrGH,EAAe,CAAC,CAAE,UAAW,CAAE,qBAAAI,EAAsB,OAAAC,CAAO,CAAE,KAAO,CAAE,qBAAAD,EAAsB,OAAAC,CAAO,GAAIF,EAAY,EAGhH,oBAAC,OACG,UAAW,GAAG,CAACG,iBAAsC,GAAK,oBAAoB,4DAC9E,cAAgBC,GAAUA,EAAM,eAAe,GAE/C,oBAACT,GAAA,CACG,IAAI,GACJ,IAAKQ,UAA+B,EAAIE,EAAO,SAAWA,EAAO,QACjE,MAAOF,kBAAuC,EAAI,GAAK,GACvD,OAAQA,kBAAuC,EAAI,GAAK,GACxD,QAAUC,GAAeE,GAAgBF,CAAK,EAC9C,cAAgBA,GAAeA,EAAM,gBAAgB,EACrD,UAAW,GAAGD,UAA+B,EAAI,mBAAqB,mBAAmB,GAC7F,CACJ,GAIDI,GAAQX,GDtBf,IAAMY,GAAO,IAAM,CACf,GAAM,CAACC,EAAWC,CAAY,EAAIC,GAAkB,EAAK,EAEzDC,EAAe,CAAC,CAAE,WAAY,CAAE,KAAAC,EAAM,UAAAC,CAAU,CAAE,KAAO,CAAE,KAAAD,EAAM,UAAAC,CAAU,GAAIC,EAAY,EAC3F,GAAM,CAAE,eAAAC,CAAe,EAAIJ,EAAe,CAAC,CAAE,WAAY,CAAE,eAAAI,CAAe,CAAE,KAAO,CAAE,eAAAA,CAAe,GAAGD,EAAY,EAEnH,OAAAE,GAAU,IAAM,CACZ,IAAIC,EAAe,KACnB,OAAIC,eAAoC,GAAKA,oBAAyC,EAAGD,EAAU,WAAW,IAAMR,EAAa,EAAI,EAAG,GAAG,EACtIA,EAAa,EAAK,EAEhB,IAAM,aAAaQ,CAAO,CACrC,EAAG,CAACF,CAAc,CAAC,EAGf,oBAAC,QAAK,UAAU,aACXP,GAAa,CAACU,UAA+B,GAC1C,oBAAC,OACG,GAAG,eACH,UAAW,kFAAkFA,oBAAyC,EAAI,yBAA2B,wBACjK,IAEJ,oBAAC,OACG,UAAU,+DACV,MAAO,CAAE,OAAQA,qBAA0C,MAAwD,GAElH,CAACA,eAAoC,GAAK,oBAACC,EAAA,CAAgB,KAAK,UAAU,EAC3E,oBAACC,GAAA,IAAU,EACV,CAACF,eAAoC,GAAK,oBAACC,EAAA,CAAgB,KAAK,WAAW,CAChF,CACJ,CAER,CAER,EAEOE,GAAQd,GE5Cfe,IAAA,OAAS,gBAAAC,OAAoB,cCA7BC,IAAA,OAAS,aAAAC,GAAW,YAAAC,OAAgB,QACpC,OAAS,gBAAAC,OAAoB,cCD7BC,IAAA,OAAS,aAAAC,GAAW,YAAAC,OAAgB,QACpC,OAAS,gBAAAC,OAAoB,cAC7B,OAAS,QAAAC,OAAY,QCFrBC,IAYO,IAAMC,GAAiB,CAACC,EAAYC,EAAe,KAAO,CAC7D,GAAM,CAAE,qBAAAC,CAAqB,EAAIC,EAAM,SAAS,EAAE,UAC5C,CAAE,SAAAC,EAAU,oBAAAC,CAAoB,EAAIF,EAAM,SAAS,EAAE,WACrDG,EAAgBC,eAAoC,EAAIF,EAAsBD,EAC9EI,EAAUR,EAAM,UAAY,OAAYA,EAAM,QAAUA,EAAM,QAAQ,CAAC,EAAE,QAC/E,GAAIQ,GAAWN,EAAqB,MAAQO,EAAc,GAAKD,EAAUC,EAAc,EAAG,CAEtF,IAAIC,GADYF,EAAUC,EAAc,EAAIP,EAAqB,OAC/BA,EAAqB,MAAQ,EAAIO,EAAc,GAAMH,EACvF,OAAIL,IAAS,qBAAoBS,EAAgBJ,EAAgBI,GAC1DA,CACX,CACJ,EAEaC,EAAsBX,GAAe,CAC9C,GAAM,CAAE,qBAAAE,CAAqB,EAAIC,EAAM,SAAS,EAAE,UAC5CK,EAAUR,EAAM,UAAY,OAAYA,EAAM,QAAUA,EAAM,QAAQ,CAAC,EAAE,QAC/E,GAAIQ,GAAWN,EAAqB,MAAQO,EAAc,GAAKD,EAAUC,EAAc,EACnF,OAAOD,EAAUC,EAAc,EAAIP,EAAqB,IAEhE,EAQO,IAAMU,GAAuBC,GAAyB,CACrDA,IACAA,EAAgB,MAAM,QAAU,MAChCA,EAAgB,MAAM,cAAgB,OACtCA,EAAgB,MAAM,OAAS,GAEvC,EAEMC,GAA8BD,GAAyB,CACzDA,EAAgB,MAAM,QAAU,QAChCA,EAAgB,MAAM,OAAS,GAC/BA,EAAgB,MAAM,QAAYE,EAAM,SAAS,EAAE,UAAU,QAAQ,IAAM,MAAQ,MACnFF,EAAgB,MAAM,cAAgB,OACtCA,EAAgB,MAAM,WAAa,qBACvC,EAEMG,GAAyB,CAACC,EAAYJ,IAAyB,CACjE,GAAM,CAAE,qBAAAK,CAAqB,EAAIH,EAAM,SAAS,EAAE,UAC5CI,EAAe,SAAS,uBAAuB,oBAAoB,EAAE,CAAC,EACtEC,EAAoB,SAAS,eAAe,eAAe,EAC7DD,GAAWC,IACNC,EAAmBJ,CAAK,EAAKE,EAAQ,sBAAsB,EAAE,MAAQ,GAAOE,EAAmBJ,CAAK,EAAKC,EAAqB,MAAQA,EAAqB,KAAOC,EAAQ,sBAAsB,EAAE,MAAQ,EAC3MN,EAAgB,MAAM,KAAO,GAAGQ,EAAmBJ,CAAK,EAAKE,EAAQ,YAAc,CAAC,KAC7EE,EAAmBJ,CAAK,GAAMG,EAAa,aAAe,EAAID,EAAQ,YAAcC,EAAa,YACxGP,EAAgB,MAAM,KAAO,MACtBS,EAAS,EAAE,WAAaA,EAAS,EAAE,YAAcD,EAAmBJ,CAAK,EAAKE,EAAQ,cAC7FN,EAAgB,MAAM,KAAO,GAAGS,EAAS,EAAE,YAAcH,EAAQ,WAAW,MAGxF,EAEaI,GAAsB,CAACN,EAAYJ,EAAsBW,IAA4B,CAC1FX,GAAiBC,GAA2BD,CAAe,EAC3DE,EAAM,SAAS,EAAE,UAAU,QAAQ,IAAKC,GAAuBC,EAAOJ,CAAe,EACpFA,EAAgB,MAAM,KAAO,GAAGQ,EAAmBJ,CAAK,EAAK,EAAE,KACpEF,EAAM,SAASU,GAAe,OAAOC,GAAeT,CAAK,CAAE,CAAC,CAAC,EAC7DO,EAAmB,YAAcG,eAAoC,EAC/D,IAAIC,EAAaF,GAAeT,EAAO,kBAAkB,CAAE,CAAC,GAC5D,GAAGW,EAAaF,GAAeT,CAAK,CAAE,CAAC,EACjD,EAEaY,GAAoB,CAACZ,EAAYa,EAAmB,KAAU,CACvE,GAAM,CAAE,qBAAAZ,CAAqB,EAAIH,EAAM,SAAS,EAAE,UAC5CF,EAAuB,SAAS,cAAc,qBAAqB,EACnEW,EAA0B,SAAS,cAAc,yBAAyB,EAC1EO,EAAUd,EAAM,UAAY,OAAYA,EAAM,QAAUA,EAAM,QAAQ,CAAC,EAAE,QAE3EJ,GACAW,GACAO,GAAWb,EAAqB,MAAQc,EAAc,GACtDD,EAAUb,EAAqB,KAAOc,EAAc,GAEpDT,GAAoBN,EAAOJ,EAAiBW,CAAkB,EAC1DM,GAAS,WAAW,IAAMlB,GAAoBC,CAAe,EAAG,GAAI,GACrED,GAAoBC,CAAe,CAC9C,EAEaoB,GAAsBhB,GAAe,CAC9C,IAAMc,EAAUd,EAAM,UAAY,OAAYA,EAAM,QAAUA,EAAM,QAAQ,CAAC,EAAE,QAC3EiB,EAAY,IACRH,GAAWd,EAAM,KAAK,WAAae,EAAc,GAAKD,EAAUC,EAAc,EAC9EE,EAAY,EAAE,MAAM,MAAQ,GAAGb,EAAmBJ,CAAK,CAAC,KACnDc,GAAWd,EAAM,KAAK,WAAae,EAAc,EAAGE,EAAY,EAAE,MAAM,MAAQ,EAChFH,EAAUC,EAAc,IAAGE,EAAY,EAAE,MAAM,MAAQ,QAExE,EAEaC,GAAoB,CAAClB,EAAYmB,EAAiBC,IAA+C,CAC1GpB,EAAM,eAAe,EACrBA,EAAM,gBAAgB,EACtBoB,EAAiB,EAAI,EACrB,IAAMC,EAAWvB,EAAM,SACjBgB,EAAUd,EAAM,UAAY,OAAYA,EAAM,QAAUA,EAAM,QAAQ,CAAC,EAAE,QAC3Ec,GAAWd,EAAM,KAAK,WAAae,EAAc,GAAKD,EAAUC,EAAc,IAC9EM,EAASC,GAA4B,EAAI,CAAC,EAC1CD,EAASE,GAA0B,EAAI,CAAC,EACxC,eAAe,QAAQ,oBAAqB,OAAOlB,EAAS,EAAE,WAAW,CAAC,EAC1EL,EAAM,OAAO,kBAAkBA,EAAM,SAAS,EAC1CmB,EAAW,OAAS,GAAGA,EAAW,IAAKK,GAAY,aAAaA,CAAE,CAAC,EAE/E,EAEaC,GAAqBzB,GAAe,CAC7CA,EAAM,eAAe,EACrBA,EAAM,gBAAgB,EACtB,IAAMqB,EAAWvB,EAAM,SACjB,CAAE,yBAAA4B,CAAyB,EAAI5B,EAAM,SAAS,EAAE,WAChD,CAAE,KAAA6B,CAAK,EAAI7B,EAAM,SAAS,EAAE,UAAU,qBACtCgB,EAAUd,EAAM,UAAY,OAAYA,EAAM,QAAUA,EAAM,QAAQ,CAAC,EAAE,QACzEJ,EAAuB,SAAS,cAAc,qBAAqB,EACrEkB,EAAUa,EAAOZ,EAAc,GAC3BnB,IACAA,EAAgB,MAAM,QAAU,mBAChCA,EAAgB,MAAM,cAAgB,QAEtC8B,IACAL,EAASE,GAA0B,EAAI,CAAC,EACxCX,GAAkBZ,CAAK,EACvBgB,GAAmBhB,CAAK,EACxBK,EAAS,EAAE,MAAM,IAEdT,IACPA,EAAgB,MAAM,QAAU,kBAChCA,EAAgB,MAAM,cAAgB,OAE9C,EAEagC,GAAkB,CAC3B5B,EACA6B,EACAV,EACAC,IACC,CACDA,EAAiB,EAAK,EACtBpB,EAAM,eAAe,EACrBA,EAAM,gBAAgB,EACtB,IAAMqB,EAAWvB,EAAM,SACjB,CAAE,SAAAgC,EAAU,oBAAAC,CAAoB,EAAIjC,EAAM,SAAS,EAAE,WACrD,CAAE,KAAA6B,EAAM,MAAAK,CAAM,EAAIlC,EAAM,SAAS,EAAE,UAAU,qBAC7CmC,EAAgBvB,eAAoC,EAAIqB,EAAsBD,EACpF9B,EAAM,OAAO,oBAAoB,cAAeyB,EAAiB,EACjE,IAAMX,EAAUd,EAAM,UAAY,OAAYA,EAAM,QAAUA,EAAM,QAAQ,CAAC,EAAE,QAC3EkC,EAAc,EACdpB,EAAUa,EAAOZ,EAAc,GAAKD,EAAUkB,EAAQjB,EAAc,EAAGmB,EAAczB,GAAeT,CAAK,EACpGc,EAAUa,EAAOZ,EAAc,EAAGmB,EAAc,EAChDpB,EAAUC,EAAc,IAAGmB,EAAcD,GAC7CvB,kBAAuC,GAAGyB,GAAoB9B,EAAS,EAAE,YAAa6B,CAAW,EACtG7B,EAAS,EAAE,YAAc6B,EACrBpC,EAAM,SAAS,EAAE,WAAW,2BAC5BuB,EAASC,GAA4B,EAAK,CAAC,EAC3CD,EAASE,GAA0B,EAAK,CAAC,EACzClB,EAAS,EAAE,KAAK,EAChBO,GAAkBZ,EAAO,EAAI,EAC7B,eAAe,QAAQ,eAAgB,OAAOkC,CAAW,CAAC,EAC1DlB,GAAmBhB,CAAK,EACxBoC,GAAcpC,EAAOqB,EAAUQ,EAAeV,CAAU,EAEhE,EAEMiB,GAAgB,CAACpC,EAAYqB,EAAeQ,EAA4CV,IAAoB,CAC9G,IAAMkB,EAAMlB,EACRmB,EAAgB,WAAW,IAAM,CACjC,GAAM,CAAE,eAAAC,EAAgB,mBAAAC,CAAmB,EAAI1C,EAAM,SAAS,EAAE,SAC1D,CAAE,uBAAA2C,CAAuB,EAAI3C,EAAM,SAAS,EAAE,WAChDE,EAAM,cAAgB,SAAW,CAACuC,GAAkB,CAACC,GAAsBC,GAAwBpB,EAASqB,EAAkB,EAAK,CAAC,CAC5I,EAAGC,CAAkB,EACrBN,EAAI,KAAKC,CAAa,EACtBT,EAAcQ,CAAG,CACrB,EAEaO,GAA0B,IAAM,CACzC,IAAMC,EAAQ,KAAK,IAAI,EACvBxC,EAAS,EACJ,KAAK,EACL,KAAK,IAAMyC,EAAcC,GAAkB,KAAK,IAAI,EAAIF,CAAK,CAAC,CAAC,CACxE,EAEaG,GAAmBhD,GAAeY,GAAkBZ,CAAK,EAEzDiD,GAAiB,IAAM,CAChC,IAAM1C,EAA0B,SAAS,cAAc,qBAAqB,EAC5EZ,GAAoBY,CAAkB,CAC1C,EAGM2C,GAAwBC,GAAsB,CAChD,IAAMC,EAAyBD,EAAU,MAAM,GAAG,EAE5CE,EADYD,EAAuB,CAAC,EACT,MAAM,GAAG,EAE1C,MAAO,CACH,aAAc,SAASA,EAAuB,CAAC,EAAG,EAAE,GAAK,EACzD,QAAS,SAASC,EAAe,IAAI,EAAI,EAAE,GAAK,EAChD,QAAS,SAASA,EAAe,IAAI,EAAI,EAAE,GAAK,EAChD,MAAO,SAASA,EAAe,IAAI,EAAI,EAAE,GAAK,CAClD,CACJ,EAEMC,GAA2BH,GAAsB,CACnD,IAAMI,EAAsBL,GAAqBC,CAAS,EAE1D,OAAO,SAASI,EAAe,OAAS,GAAK,IAAMA,EAAe,QAAU,GAAKA,EAAe,QAAUA,EAAe,aAAe,IAAM,EAAE,CACpJ,EAEMC,GAAmBC,GAAgB,CACrC,IAAMC,EAAgBD,EAAI,MAAM,SAAS,EACnCE,EAAWD,EAAc,CAAC,EAE1BE,EADcF,EAAc,CAAC,EACE,MAAM,UAAU,EAErD,MAAO,CACH,EAAGE,EAAY,CAAC,EAChB,EAAGA,EAAY,CAAC,EAChB,EAAGA,EAAY,CAAC,EAChB,EAAGA,EAAY,CAAC,EAChB,MAAOD,CACX,CACJ,EAEME,GAAuB,CAACC,EAAcC,IACpCD,EAAK,QAAQ,IAAI,GAAK,EAEfA,EAGPC,EAAK,QAAQ,IAAI,IAAM,EAGhB,CAACA,EAAK,QAAQ,QAAS,EAAE,EAAGD,EAAK,KAAK,CAAC,EAAE,KAAK,GAAG,EAGxDC,EAAK,QAAQ,IAAI,EAAI,EAGd,CAACA,EAAK,KAAK,EAAGD,EAAK,KAAK,CAAC,EAAE,KAAK,GAAG,EAIvCA,EAGLE,GAAY,CAACC,EAAqBC,IAAmB,CACvD,IAAMC,EAAc,CAAC,EAEjBC,EAAoBF,EAAQ,MAAM,eAAe,EAAE,CAAC,EAMxD,GAFAD,EAAcJ,GAAqBI,EAAaG,CAAS,EAErD,CAACH,EAAY,MAAM,SAAS,EAC5B,OAAAE,EAAO,WAAa,QAAUF,EAAcC,EAAQ,MAAM,eAAe,EAAE,CAAC,EAAI,KACzEC,EAGX,IAAME,EAAab,GAAgBS,CAAW,EAE9C,OAAAE,EAAO,WACH,QAAUE,EAAW,MAAQH,EAAQ,MAAM,eAAe,EAAE,CAAC,EAAI,iBAAmBG,EAAW,EAAI,OAASA,EAAW,EAAI,KAC/HF,EAAO,MAAQE,EAAW,EAAI,KAC9BF,EAAO,OAASE,EAAW,EAAI,KAC/BF,EAAO,IAAME,EAAW,MAEjBF,CACX,EAEaG,GAAY,CAACC,EAAaC,IAAoB,CACvD,MAAMD,CAAG,EACJ,KAAME,GAAa,CAChB,GAAI,CAACA,EAAS,GACV,MAAA3E,EAAM,SACF4E,GAAQ,CACJ,GAAG5E,EAAM,SAAS,EAAE,UAAU,QAC9B,IAAK,OACL,WAAY,MAChB,CAAC,CACL,EACM,IAAI,MAAM,6BAA6B,EAEjD,OAAO2E,EAAS,KAAK,CACzB,CAAC,EACA,KAAME,GAAS,CACZ,IAAMC,EAAuB,CAAC,EACPD,EAAK,MAAM,eAAe,EAClC,QAASE,GAAW,CAC/B,GAAIA,EAAO,MAAM,sGAAsG,EAAG,CACtH,IAAMC,EAAcD,EAAO,MAAM,SAAS,EAEpCE,EADYD,EAAY,CAAC,EACE,MAAM,UAAU,EAC3CE,EAAeD,EAAe,CAAC,EAC/BE,EAAaF,EAAe,CAAC,EAC7Bd,EAAca,EAAY,CAAC,EAC3BI,EAAYlB,GAAUC,EAAaM,CAAG,EAE5CK,EAAc,KAAK,CACf,MAAOtB,GAAwB0B,CAAY,EAC3C,IAAK1B,GAAwB2B,CAAU,EACvC,IAAKC,CACT,CAAC,CACL,CACJ,CAAC,EACDV,EAAWI,CAAa,CAC5B,CAAC,EACA,MAAOO,GAAU,CACd,QAAQ,MAAM,uBAAwBA,CAAK,CAC/C,CAAC,CACT,EAEaC,GAAkB,CAACC,EAAcC,EAAcC,IAAe,CACvE,QAASC,EAAI,EAAGA,EAAIF,EAAQ,OAAQ,EAAEE,EAAG,CACrC,IAAMC,EAAOH,EAAQE,CAAC,EACtB,GAAIH,GAAQI,EAAK,OAASJ,EAAOI,EAAK,KAElC,GAAIA,EAAK,IAAI,KAAO,CAACF,EAAME,EAAK,IAAI,GAAG,EAAG,CACtC,IAAMC,EAAiB,CACnB,WAAYD,EAAK,IAAI,WACrB,MAAOA,EAAK,IAAI,MAChB,OAAQA,EAAK,IAAI,MACrB,EACA,OAAAF,EAAME,EAAK,IAAI,GAAG,EAAIC,EACfA,CACX,SAAWD,EAAK,IAAI,IAAK,OAAOF,EAAME,EAAK,IAAI,GAAG,EAE1D,CACJ,ED/UA,IAAME,GAAU,IAAM,CAClB,GAAM,CAAE,QAAAC,CAAQ,EAAIC,EAAe,CAAC,CAAE,UAAW,CAAE,QAAAD,CAAQ,CAAE,KAAO,CAAE,QAAAA,CAAQ,GAAIE,EAAY,EACxF,CAAE,YAAAC,CAAY,EAAIF,EAAe,CAAC,CAAE,WAAY,CAAE,YAAAE,EAAa,eAAAC,EAAgB,aAAAC,CAAa,CAAE,KAAO,CAAE,YAAAF,EAAa,eAAAC,EAAgB,aAAAC,CAAa,GAAIH,EAAY,EAEjKI,EAAa,CAAC,EACd,CAACC,EAASC,CAAU,EAAIC,GAAc,MAAS,EAC/C,CAACC,EAAQC,CAAS,EAAIF,GAA6BG,iBAAsC,EAAIZ,EAAQ,WAAaA,EAAQ,GAAG,EAEnI,OAAAa,GAAU,IAAM,CACZF,EAAUC,kBAAuC,EAAIZ,EAAQ,WAAaA,EAAQ,GAAG,CACzF,EAAG,CAACA,EAAQ,IAAKA,EAAQ,WAAYY,kBAAuC,CAAC,CAAC,EAE9EC,GAAU,IAAM,CACNH,GAAQI,GAAUF,kBAAuC,EAAIZ,EAAQ,WAAcA,EAAQ,IAAMQ,CAAU,CACrH,EAAG,CAACE,CAAM,CAAC,EAEJE,oBAAyC,EAC5C,oBAAC,OACG,UAAW,wJACPF,GAAYH,EAAU,GAAK,kBAC/B,kCAECG,GAAU,CAAC,CAACH,GACT,oBAAC,OAAI,UAAU,wDACX,oBAAC,OAAI,UAAU,mBAAmB,MAAOQ,GAAgBZ,EAAaI,EAASD,CAAK,EAAG,CAC3F,EAEJ,oBAAC,OAAI,UAAU,iGAAiG,CACpH,EAEA,uCAAE,CAEV,EAEOU,GAAQC,GAAKlB,EAAO,EDjC3B,IAAMmB,GAAc,IAAM,CACtB,GAAM,CAACC,EAAeC,CAAgB,EAAIC,GAAkB,EAAK,EAEjEC,GAAU,IAAM,CACZC,GAAoB,SAAS,cAAc,kBAAkB,CAAC,CAClE,EAAG,CAAC,CAAC,EAEL,GAAM,CAAE,SAAAC,EAAU,YAAAC,EAAa,kBAAAC,CAAkB,EAAIC,EACjD,CAAC,CAAE,WAAY,CAAE,SAAAH,EAAU,YAAAC,EAAa,kBAAAC,EAAmB,eAAAE,CAAe,CAAE,KAAO,CAC/E,SAAAJ,EACA,YAAAC,EACA,kBAAAC,EACA,eAAAE,CACJ,GACAC,EACJ,EACM,CAAE,QAAAC,CAAQ,EAAIH,EAChB,CAAC,CAAE,UAAW,CAAE,OAAAI,EAAQ,qBAAAC,EAAsB,QAAAF,EAAS,kBAAAG,CAAkB,CAAE,KAAO,CAC9E,OAAAF,EACA,qBAAAC,EACA,QAAAF,EACA,kBAAAG,CACJ,GACAJ,EACJ,EACM,CAACK,EAAYC,CAAa,EAAId,GAAgB,CAAC,CAAC,EAEhDe,EAAeZ,EACfa,EAA2BC,GAAkBF,EAAgBG,GAAiB,EAAID,EAAQF,EAAe,EAE/G,OACI,oBAAC,OAAI,UAAW,GAAGI,yBAA8C,EAAI,aAAe,eAAe,gBAC/F,oBAAC,OAAI,UAAU,eACX,oBAACC,GAAA,IAAQ,CACb,EACA,oBAAC,OACG,UAAW,aAAaD,yBAA8C,EAAI,cAAgB,mCAAmC,wBAC7H,cAAgBE,GAAeC,GAAkBD,EAAOR,EAAYd,CAAgB,EACpF,cAAewB,GACf,YAAcF,GAAeG,GAAgBH,EAAOP,EAAeD,EAAYd,CAAgB,EAC/F,YAAa0B,GACb,WAAYC,GACZ,QAASC,GACT,cAAgBN,GAAeA,EAAM,gBAAgB,GAErD,oBAAC,OAAI,GAAG,gBAAgB,UAAU,yBAC9B,oBAAC,OACG,GAAG,qBACH,UAAW,qIACX,MAAO,CAAE,UAAWvB,EAAgB,cAAgB,OAAQ,GAE3DW,EAAQ,IAAKmB,GACV,oBAAC,OAAI,IAAKA,EAAO,GAAI,cAAaA,EAAO,MACrC,oBAAC,OACG,UAAU,mGACV,cAAaA,EAAO,KACpB,MAAO,CAAE,KAAMZ,EAAwBY,EAAO,IAAI,EAAG,QAAqB,EAC9E,CACJ,CACH,EACD,oBAAC,OACG,GAAG,uBACH,UAAW,2DACX,MAAO,CAAE,MAAO,GAAGvB,CAAiB,GAAI,EAC5C,EACA,oBAAC,OACG,GAAG,oBACH,UAAW,6IACPP,GAAiB,6BACrB,GACA,MAAO,CAAE,MAAO,GAAIM,EAAcD,EAAYe,GAAiB,CAAC,IAAK,EACzE,CACJ,CACJ,CACJ,CACJ,CAER,EAEOW,GAAQhC,GGxFfiC,IAAA,OAAS,QAAAC,OAAY,QACrB,OAAS,gBAAAC,OAAoB,cCD7BC,IAAA,OAAS,aAAAC,GAAW,YAAAC,OAAgB,QACpC,OAAS,gBAAAC,OAAoB,cCD7BC,IAEA,IAAMC,GAAqB,CAAC,CAAE,MAAAC,EAAO,UAAAC,CAAU,IAC3C,oBAAC,QACG,UAAW,sIAAsIA,CAAS,IAEzJD,CACL,EAGGE,EAAQH,GDFf,OAAOI,OAAW,oBAGlB,IAAMC,GAAa,IAAM,CACrB,GAAM,CAAE,aAAAC,CAAa,EAAIC,EAAe,CAAC,CAAE,WAAY,CAAE,UAAAC,EAAW,aAAAF,CAAa,CAAE,KAAO,CAAE,UAAAE,EAAW,aAAAF,CAAa,GAAIG,EAAY,EAE9H,CAACC,EAAaC,CAAc,EAAIC,GAAkB,EAAK,EAEvDC,EAAWC,EAAe,EAEhC,OAAAC,GAAU,IAAM,CACPC,eAAoC,GAAGH,EAASI,EAAkB,EAAK,CAAC,CACjF,EAAG,CAACX,CAAY,CAAC,EAGb,oBAAC,OAAI,UAAU,uCACX,oBAACY,GAAA,CACG,IAAKF,gBAAqC,EAAIG,EAAO,cAAgBA,EAAO,WAC5E,IAAI,kBACJ,UAAW,oBACX,MAAO,GACP,OAAQ,GACR,YAAa,IAAM,CAACH,iBAAsC,GAAKL,EAAe,EAAI,EAClF,aAAc,IAAM,CAACK,iBAAsC,GAAKL,EAAe,EAAK,EACpF,QAAS,IAAM,CACXS,GAAiB,EACjBC,GAAsB,CAC1B,EACJ,EACCX,GACG,oBAACY,EAAA,CACG,MAAO,GAAGN,gBAAqC,EAAI,wCAAY,EAAE,qDACrE,CAER,CAER,EAEOO,GAAQlB,GE9CfmB,IAAA,OAAS,YAAAC,OAAgB,QACzB,OAAS,gBAAAC,OAAoB,cAO7B,OAAOC,OAAW,oBAElB,IAAMC,GAAmB,IAAM,CAC3B,GAAM,CAACC,EAAaC,CAAc,EAAIC,GAAkB,EAAK,EAE7D,OAAAC,EAAe,CAAC,CAAE,WAAY,CAAE,eAAAC,CAAe,CAAE,KAAO,CAAE,eAAAA,CAAe,GAAIC,EAAY,EACzFF,EAAe,CAAC,CAAE,UAAW,CAAE,qBAAAG,EAAsB,OAAAC,CAAO,CAAE,KAAO,CAAE,qBAAAD,EAAsB,OAAAC,CAAO,GAAIF,EAAY,EAGhH,oBAAC,OAAI,UAAU,wCACX,oBAACP,GAAA,CACG,IAAI,GACJ,YAAa,IAAM,CAACU,iBAAsC,GAAKP,EAAe,EAAI,EAClF,aAAc,IAAM,CAACO,iBAAsC,GAAKP,EAAe,EAAK,EACpF,IAAKQ,EAAO,iBACZ,MAAO,GACP,OAAQ,GACR,UAAU,4BACV,QAAS,IAAMC,EAAS,EAAE,wBAAwB,EACtD,EACCV,GAAe,oBAACW,EAAA,CAAmB,MAAM,6EAAiB,CAC/D,CAER,EAEOC,GAAQb,GCjCfc,IAAA,OAAS,UAAAC,GAAQ,YAAAC,OAAgB,QACjC,OAAS,gBAAAC,OAAoB,cAE7B,OAAOC,OAAW,oBAWlB,IAAMC,GAAc,IAAM,CACtB,GAAM,CAACC,EAAaC,CAAc,EAAIC,GAAkB,EAAK,EAEvDC,EAAWC,EAAe,EAC1B,CAAE,SAAAC,CAAS,EAAIC,EAAe,CAAC,CAAE,KAAM,CAAE,SAAAD,CAAS,CAAE,KAAO,CAAE,SAAAA,CAAS,GAAIE,EAAY,EAEtFC,EAAmBC,GAAeJ,EAAS,MAAM,EAEjDK,EAAgB,IAAM,CACxB,GAAIF,EAAiB,UAAYH,EAAS,OAAQ,CAC9C,GAAM,CAAE,SAAAA,CAAS,EAAIM,EAAM,SAAS,EAAE,KACtCC,EAAcC,EAAUL,EAAiB,QAASH,EAAS,MAAM,CAAC,EAClEG,EAAiB,QAAUH,EAAS,OAEpCF,EAASW,EAAgB,CAAE,GAAGT,EAAU,OAAQA,EAAS,MAAO,CAAC,CAAC,CACtE,CACJ,EAEMU,EAAcC,GAAiB,CACjC,GAAM,CAAE,SAAAX,CAAS,EAAIM,EAAM,SAAS,EAAE,KAClCK,IAAS,QACTC,GAAwB,CAAC,EACzBL,EAAcC,EAAUR,EAAS,OAAQ,CAAC,CAAC,IAG3CO,EAAcC,EAAUR,EAAS,OAAQ,GAAG,CAAC,EAC7CY,GAAwB,GAAG,EAGnC,EAEA,OACI,oBAAC,OAAI,UAAW,qEACX,CAACC,iBAAsC,GACpC,oBAAC,SACG,UAAWR,EACX,KAAK,QACL,IAAI,IACJ,IAAI,MACJ,MAAOL,EAAS,OAChB,SAAWc,GAAUF,GAAwB,CAACE,EAAM,OAAO,KAAK,EAChE,UAAU,mCACV,MAAO,CAAE,WAAY,mCAAmCd,EAAS,MAAM,6BAA8B,EACzG,EAEJ,oBAAC,OAAI,UAAU,uCACX,oBAACe,GAAA,CACG,IAAKF,YAAiC,EAAIG,EAAO,OAASA,EAAO,KACjE,IAAKH,YAAiC,EAAI,cAAgB,YAC1D,UAAW,4CACX,MAAO,GACP,OAAQ,GACR,QAAS,IAAOA,YAAiC,EAAIH,EAAW,MAAM,EAAIA,EAAW,QAAQ,EAC7F,cAAgBI,GAAeA,EAAM,gBAAgB,EACrD,YAAa,IAAM,CAACD,iBAAsC,GAAKjB,EAAe,EAAI,EAClF,aAAc,IAAM,CAACiB,iBAAsC,GAAKjB,EAAe,EAAK,EACxF,EACCD,GACG,oBAACsB,EAAA,CACG,UAAU,YACV,MAAO,GAAGJ,YAAiC,EAAI,kCAAW,iCAAQ,GACtE,CAER,CACJ,CAER,EAEOK,GAAQxB,GClFfyB,IAAA,OAAS,QAAAC,GAAM,aAAAC,GAAW,UAAAC,GAAQ,YAAAC,OAAgB,QAClD,OAAS,gBAAAC,OAAoB,cCD7BC,IAAA,OAAqB,cAAAC,GAAY,aAAAC,GAAW,YAAAC,OAAgB,QAC5D,OAAS,gBAAAC,OAAoB,YAC7B,OAAS,gBAAAC,OAAoB,cAC7B,OAAOC,OAAa,eAMpB,IAAMC,GAAYC,GAAQ,IAAM,OAAO,0BAAiC,CAAC,EAEnEC,GAAUC,GACZ,CACI,CACI,SAAAC,EACA,OAAAC,EACA,QAAAC,EACA,KAAAC,EACA,WAAAC,EACA,iBAAAC,EACA,OAAAC,EACA,iBAAAC,EACA,aAAAC,EAAe,GACf,aAAAC,EACA,SAAAC,EACA,YAAAC,EAAc,GACd,aAAAC,EACA,gBAAAC,EACA,sBAAAC,EAAwB,GACxB,UAAAC,EACA,UAAAC,EAAY,GACZ,eAAAC,EAAiB,GACjB,cAAAC,EAAgB,GAChB,WAAAC,EACJ,EACAC,KACC,CACD,GAAM,CAACC,GAAaC,EAAc,EAAIC,GAAkBtB,CAAO,EAEzD,CAACuB,EAAWC,EAAY,EAAIF,GAAiB,CAAC,EAC9C,CAACG,EAAsBC,CAAuB,EAAIJ,GAAiB,CAAC,EACpE,CAACK,GAAiBC,EAAkB,EAAIN,GAAiB,CAAC,EAE1D,CAAE,qBAAAO,CAAqB,EAAIC,EAAe,CAAC,CAAE,UAAW,CAAE,qBAAAD,CAAqB,CAAE,KAAO,CAAE,qBAAAA,CAAqB,GAAIE,EAAY,EAErIC,GAAU,IAAM,CACZ,IAAIC,EAEJ,OAAIjC,EACAqB,GAAe,EAAI,EAEnBY,EAAU,WAAW,IAAM,CACvBhC,EAAQ,EAAK,EACbyB,EAAwB,CAAC,EACzBL,GAAe,EAAK,CACxB,EAAG,GAAG,EAGH,IAAM,aAAaY,CAAO,CACrC,EAAG,CAACjC,CAAM,CAAC,EAEXgC,GAAU,IAAM,CACRE,qBAA0C,GAAKlC,GAAQwB,GAAa,OAAO,YAAcK,EAAqB,MAAM,CAC5H,EAAG,CAAC7B,CAAM,CAAC,EAEX,IAAMmC,GAAmBC,GAAe,CAChCA,EAAM,QAAQ,CAAC,EAAE,SAAWP,EAAqB,IAAKH,EAAwB,OAAO,YAAcU,EAAM,QAAQ,CAAC,EAAE,OAAO,EAC1HV,EAAwB,OAAO,YAAcG,EAAqB,GAAG,EAC1ED,UAAoC,CACxC,EAEMS,GAAiB,IAAM,CACrBZ,IAAyB,IACrBA,EAAuBF,EACnBE,EAAuBF,GAAa,OAAO,YAAcM,EAAqB,IAAMN,GAAa,GACjGG,EAAwB,OAAO,YAAcG,EAAqB,GAAG,EACrED,UAAoC,IAEpCF,EAAwB,CAAC,EACzB,WAAW,IAAME,GAAmB,CAAC,EAAG,GAAG,IAG3CH,EAAuBF,EAAY,EAAGG,EAAwBH,CAAS,GAEvEG,EAAwB,CAAC,EACzBF,GAAa,CAAC,EACdvB,EAAQ,GAEZ2B,GAAmB,CAAC,GAGhC,EAEMU,GACF,wCACKhC,GACG,oBAAC,OACG,UAAW,4GAA4GN,EAAS,kBAAoB,kBAChJ,GACJ,MAAO,CAAE,cAAqC,EAClD,EAEJ,oBAAC,OACG,UAAW,GAAGE,IAAS,SACnB,2GACA,IAAIE,CAAgB,GACxB,MAAO,CAAE,OAAQG,GAAgB,CAACS,EAAiBW,UAAwC,GAE3F,oBAAC,OACG,UAAW;AAAA,0BACTpB,GAAgB,WAAW;AAAA,0BAC3BO,IAEQ,OAAO,WAAa,KAAOZ,IAAS,QAChCF,EACI,kBACA,mBACJA,EACI,oBACA,uBACd;AAAA,0BACFkC,yBAA8C,EACtC,yIACA,kBACN;AAAA,0BACFhC,IAAS,SAAW,0DAA0D;AAAA,0BAC9EC,CAAU;AAAA,0BAEZ,MAAO,CACH,UAAWK,EACL,QACAiB,GAEAF,IAEAW,qBAA0C,EAC1C,EACA,IACN,eACA,GAAG7B,CACP,EACA,IAAKc,IAEL,wCACKV,GACG,oBAAC,OACG,YAAaI,EAAwBsB,GAAkB,IAAM,CAAE,EAC/D,kBAAmBtB,EAAwBwB,GAAiB,IAAM,CAAE,GAEnExB,GACG,oBAAC,OAAI,UAAU,6HAA6H,EAE/IJ,GACG,oBAAC,OACG,UAAW,oFAAoFG,CAAe,IAE7GD,GAGG,oBAAC,OAAI,UAAU,2DACX,oBAAC,KAAE,UAAU,gEAAgED,CAAY,EACxFO,GACG,oBAACtB,GAAA,CACG,UAAW,kEACX,QAASM,EACb,CAER,CAER,CAER,EAEJ,wCAAGiB,EAAW,EACd,oBAAC,OACG,UAAW,0CAA0C,CAACH,GAAa,cAAc,GACjF,YAAcqB,GAAsCA,EAAM,gBAAgB,GAEzErC,CACL,CACJ,CACJ,CACJ,CACJ,EAGJ,OACI,wCACKqB,IACG,wCACKlB,IAAS,QACNqC,GAAa,wCAAGD,EAAQ,EAAK,SAAS,eAAe,+BAA+B,CAAE,EAEtF,oBAAC,WAAKA,EAAQ,CAEtB,CAER,CAER,CACJ,EAEAzC,GAAQ,YAAc,UAEtB,IAAO2C,EAAQ3C,GDxMf,OAAO4C,OAAW,oBEJlBC,IAAA,OAAS,gBAAAC,OAAoB,cAC7B,OAAS,QAAAC,GAAM,UAAAC,GAAQ,YAAAC,OAAgB,QASvC,OAAOC,OAAW,oBCVlBC,IAAA,OAAiC,aAAAC,OAAiB,QAElD,IAAMC,GAAoB,CAACC,EAAkCC,IAA4D,CACrHH,GAAU,IAAM,CACZ,IAAMI,EAAYC,GAAe,CAEzB,CAACH,EAAI,SAAWA,EAAI,QAAQ,SAASG,EAAM,MAAM,GACrDF,EAAQE,CAAK,CACjB,EACA,gBAAS,iBAAiB,YAAaD,CAAQ,EAC/C,SAAS,iBAAiB,aAAcA,CAAQ,EACzC,IAAM,CACT,SAAS,oBAAoB,YAAaA,CAAQ,EAClD,SAAS,oBAAoB,aAAcA,CAAQ,CACvD,CACJ,EAAG,CAACF,EAAKC,CAAO,CAAC,CACrB,EAEOG,EAAQL,GDDf,IAAMM,GAAgB,CAAC,CAAE,WAAAC,EAAY,sBAAAC,CAAsB,IAAqB,CAC5E,IAAMC,EAAWC,EAAe,EAC5B,CAAE,cAAAC,CAAc,EAAIC,EACpB,CAAC,CAAE,WAAY,CAAE,cAAAD,EAAe,cAAAE,EAAe,YAAAC,EAAa,eAAAC,CAAe,CAAE,KAAO,CAChF,cAAAJ,EACA,cAAAE,EACA,YAAAC,EACA,eAAAC,CACJ,GACAC,EACJ,EACM,CAAE,SAAAC,CAAS,EAAIL,EAAe,CAAC,CAAE,KAAM,CAAE,SAAAK,CAAS,CAAE,KAAO,CAAE,SAAAA,CAAS,GAAID,EAAY,EACtF,CAAE,qBAAAE,CAAqB,EAAIN,EAAe,CAAC,CAAE,SAAU,CAAE,qBAAAM,CAAqB,CAAE,KAAO,CAAE,qBAAAA,CAAqB,GAAIF,EAAY,EACpIJ,EAAe,CAAC,CAAE,UAAW,CAAE,OAAAO,EAAQ,qBAAAC,CAAqB,CAAE,KAAO,CAAE,OAAAD,EAAQ,qBAAAC,CAAqB,GAAIJ,EAAY,EAEpH,GAAM,CAACK,EAAaC,CAAc,EAAIC,GAAkB,EAAK,EAE7DZ,EAAgB,CAAC,GAAI,GAAGA,CAAa,EAErC,IAAMa,EAA4B,CAACC,EAAeC,IAC1CC,iBAAsC,GAAKD,IAAiB,GAAW,GAC/D,CAACC,iBAAsC,GAAKV,EAAS,UAAYQ,EAG3EG,EAAmBC,GAAY,IAAI,EAEzCC,EAAkBF,EAAkB,IAAM,CAClCV,GAAsBT,EAASsB,EAAwB,EAAK,CAAC,CACrE,CAAC,EAED,IAAMC,EACF,oBAAC,OAAI,mBAAmC,UAAU,6CAC9C,oBAAC,MAAG,UAAU,uBACTrB,EAAc,IAAI,CAACe,EAAsBD,IACtC,oBAAC,MACG,IAAKA,EACL,UAAW,oIAAoID,EAA0BC,EAAQ,EAAGC,CAAY,GAAK,yCACjM,GACJ,QAASF,EAA0BC,EAAQ,EAAGC,CAAY,EAAI,IAAM,CAAE,EAAI,IAAM,CAC5EO,EAAcC,GAAwBR,IAAiB,GAAK,OAAS,GAAGA,CAAY,GAAG,CAAC,EACxFjB,EAAS0B,EAAkB,EAAK,CAAC,EACjC1B,EAAS2B,EAAkB,EAAK,CAAC,EACjC3B,EAASsB,EAAwB,EAAK,CAAC,EACvCtB,EAAS4B,EAAgB,CAAE,GAAGpB,EAAU,QAASS,IAAiB,GAAK,GAAKD,EAAQ,CAAE,CAAC,CAAC,EACpFlB,GAAYA,QAA+B,CACnD,GAEC,CAACoB,iBAAsC,GAAKH,EAA0BC,EAAQ,EAAGC,CAAY,GAC1F,oBAAC,OAAI,UAAU,+BACX,oBAACY,GAAA,CACG,IAAKC,EAAO,KACZ,IAAI,GACJ,MAAO,GACP,OAAQ,EACZ,CACJ,EAEHZ,iBAAsC,GACnC,oBAAC,OAAI,UAAW,0EAA0EH,EAA0BC,EAAQ,EAAGC,CAAY,GAAK,mBAAmB,iBAC9JF,EAA0BC,EAAQ,EAAGC,CAAY,GAAK,oBAAC,OAAI,UAAU,oDAAmD,CAC7H,EAEJ,oBAAC,QAAK,UAAW,6BAA6BC,iBAAsC,EAAI,eAAiB,cAAc,IAClHD,IAAiB,GACd,oBAAC,YACG,oBAAC,QAAK,UAAU,iCAAgC,uCAAO,EACvD,oBAAC,QAAK,UAAU,sDAAqD,gIAA0B,CACnG,EACA,GAAGA,CAAY,GACvB,CACJ,CACH,CACL,CACJ,EAGJ,OACI,wCACKlB,EACG,oBAAC,OAAI,UAAU,uCACX,oBAAC8B,GAAA,CACG,IAAKC,EAAO,gBACZ,IAAI,aACJ,MAAO,GACP,OAAQ,GACR,QAAS,IAAM9B,EAASsB,EAAwB,EAAI,CAAC,EACrD,YAAa,IAAM,CAACJ,iBAAsC,GAAK,CAACA,4BAAiD,GAAKL,EAAe,EAAI,EACzI,aAAc,IAAM,CAACK,iBAAsC,GAAKL,EAAe,EAAK,EACpF,UAAU,oBACd,EACCD,GACG,oBAACmB,EAAA,CACG,MAAM,oDACV,EAEJ,oBAACC,EAAA,CACG,WAAY,+DAA+Dd,iBAAsC,EAAI,gEAAkE,yDAAyD,IAAIA,yBAA8C,GAAK,sCAAsC,IAAIA,0BAA+C,GAAK,4BAA4B,GACja,OAAQT,EACR,QAAS,IAAMT,EAASsB,EAAwB,EAAK,CAAC,EACtD,KAAMJ,iBAAsC,EAAI,QAAU,UAC1D,iBAAkBA,yBAA8C,EAChE,IAAKC,GAEJI,CACL,CACJ,EAEA,wCAAGA,CAAqB,CAGhC,CAER,EAEOU,GAAQC,GAAKrC,EAAa,EEnIjCsC,IAAA,OAAS,aAAAC,GAAW,UAAAC,GAAQ,YAAAC,OAAgB,QAC5C,OAAS,gBAAAC,OAAoB,cAW7B,OAAOC,OAAW,oBAMlB,IAAMC,GAAS,CAAC,GAAK,IAAM,EAAG,KAAM,IAAK,KAAM,CAAC,EAE1CC,GAAQ,CAAC,CAAC,WAAAC,EAAY,cAAAC,CAAa,IAAc,CACnD,IAAMC,EAAWC,EAAe,EAChCC,EAAe,CAAC,CAAE,WAAY,CAAE,eAAAC,CAAe,CAAE,KAAO,CAAE,eAAAA,CAAe,GAAIC,EAAY,EACzFF,EAAe,CAAC,CAAE,UAAW,CAAE,qBAAAG,EAAsB,OAAAC,CAAO,CAAE,KAAO,CAAE,qBAAAD,EAAsB,OAAAC,CAAO,GAAIF,EAAY,EACpH,GAAM,CAAE,aAAAG,CAAa,EAAIL,EAAe,CAAC,CAAE,SAAU,CAAE,aAAAK,CAAa,CAAE,KAAO,CAAE,aAAAA,CAAa,GAAIH,EAAY,EACtG,CAAE,SAAAI,CAAS,EAAIN,EAAe,CAAC,CAAE,KAAM,CAAE,SAAAM,CAAS,CAAE,KAAO,CAAE,SAAAA,CAAS,GAAIJ,EAAY,EAEtFK,EAAWC,GAAY,IAAI,EAE3B,CAACC,EAAaC,CAAc,EAAIC,GAAkB,EAAK,EAE7DC,EAAkBL,EAAU,IAAM,CAC1BF,GAAcP,EAASe,EAAgB,EAAK,CAAC,CACrD,CAAC,EAEDC,GAAU,IAAM,CACRC,EAAS,IAAGA,EAAS,EAAE,aAAeT,EAAS,MACvD,EAAG,CAAC,CAAC,EAEL,IAAMU,EACF,oBAAC,OAAI,WAA2B,UAAU,6CACtC,oBAAC,MAAG,UAAU,uBACTtB,GAAO,IAAI,CAACuB,EAAeC,IACxB,oBAAC,MACG,IAAKA,EACL,UAAW,oIAAoIZ,EAAS,QAAUW,GAAS,yCAAyC,GACpN,QAASX,EAAS,QAAUW,EAAQ,IAAM,CAAE,EAAI,IAAM,CAC7CE,kBAAuC,GAAGC,EAAcC,GAAeJ,CAAK,CAAC,EAClFnB,EAASwB,EAAkB,EAAK,CAAC,EACjCxB,EAASyB,EAAkB,EAAK,CAAC,EACjCzB,EAASe,EAAgB,EAAK,CAAC,EAC/Bf,EAAS0B,EAAgB,CAAE,GAAGlB,EAAU,MAAAW,CAAM,CAAC,CAAC,EAChDF,EAAS,EAAE,aAAeE,EACtBrB,GAAYA,QAA+B,CACnD,GAEC,CAACuB,iBAAsC,GAAKb,EAAS,QAAUW,GAC5D,oBAAC,OAAI,UAAU,+BACX,oBAACQ,GAAA,CACG,IAAKC,EAAO,KACZ,IAAI,GACJ,MAAO,GACP,OAAQ,EACZ,CACJ,EAEHP,iBAAsC,GACnC,oBAAC,OAAI,UAAW,0EAA0Eb,EAAS,QAAUW,GAAS,mBAAmB,iBACpIX,EAAS,QAAUW,GAAS,oBAAC,OAAI,UAAU,oDAAoD,CACpG,EAEJ,oBAAC,KAAE,UAAU,2EAA2EA,CAAM,CAClG,CACH,CACL,CACJ,EAGJ,OACI,wCACKpB,EACG,oBAAC,OAAI,UAAU,uCACX,oBAAC4B,GAAA,CACG,IAAKC,EAAO,OACZ,IAAI,aACJ,MAAO,GACP,OAAQ,GACR,QAAS,IAAM5B,EAASe,EAAgB,EAAI,CAAC,EAC7C,YAAa,IAAM,CAACM,iBAAsC,GAAK,CAACA,oBAAyC,GAAKT,EAAe,EAAI,EACjI,aAAc,IAAM,CAACS,iBAAsC,GAAKT,EAAe,EAAK,EACpF,UAAU,oBACd,EACCD,GACG,oBAACkB,EAAA,CACG,MAAM,2BACV,EAEJ,oBAACC,EAAA,CACG,WAAY,2CAA2CT,iBAAsC,EAAI,gEAAkE,0DAA0D,IAAIA,yBAA8C,GAAK,0DAA0D,IAAIA,0BAA+C,GAAK,4BAA4B,GACla,OAAQd,EACR,QAAS,IAAMP,EAASe,EAAgB,EAAK,CAAC,EAC9C,KAAMM,iBAAsC,EAAI,QAAU,UAC1D,iBAAkBA,yBAA8C,EAChE,IAAKZ,EACL,SAAUY,iBAAsC,EAChD,aAAc,uCAAE,EAChB,sBAAuBA,iBAAsC,GAE5DH,CACL,CACJ,EAEA,wCAAGA,CAAa,CAGxB,CAER,EAEOa,GAAQlC,GJzGf,IAAMmC,GAAW,IAAM,CACnB,IAAMC,EAAWC,EAAe,EAChCC,EAAe,CAAC,CAAE,UAAW,CAAE,OAAAC,CAAO,CAAE,KAAO,CAAE,OAAAA,CAAO,GAAGC,EAAY,EACvE,GAAM,CAAE,eAAAC,CAAe,EAAIH,EAAe,CAAC,CAAE,SAAU,CAAE,eAAAG,CAAe,CAAE,KAAO,CAAE,eAAAA,CAAe,GAAID,EAAY,EAE5G,CAACE,EAASC,CAAU,EAAIC,SAAqC,EAC7D,CAACC,EAAeC,CAAgB,EAAIF,GAAiB,CAAC,EACtD,CAACG,EAAaC,CAAc,EAAIJ,GAAkB,EAAK,EAEvDK,EAAcC,GAAO,IAAI,EAE/B,OAAAC,EAAkBF,EAAa,IAAM,CACjCb,EAASgB,EAAkB,EAAK,CAAC,EACjC,WAAW,IAAMT,QAA+B,EAAG,GAAG,CAC1D,CAAC,EAEDU,GAAU,IAAM,CACZP,EAAiB,SAAS,eAAeJ,CAAO,GAAG,YAAa,CACpE,EAAG,CAACA,CAAO,CAAC,EAGR,oBAAC,OAAI,UAAW,kBAAkBY,eAAoC,GAAK,aAAa,GAAI,IAAKL,GAC7F,oBAAC,OACG,UAAW,wDACX,QAAS,IAAMb,EAASgB,EAAkB,CAACX,CAAc,CAAC,EAC1D,YAAa,IAAM,CAACa,iBAAsC,GAAK,CAACA,sBAA2C,GAAKN,EAAe,EAAI,EACnI,aAAc,IAAM,CAACM,iBAAsC,GAAKN,EAAe,EAAK,GAEpF,oBAACO,GAAA,CACG,IAAKC,EAAO,SACZ,IAAI,GACJ,MAAO,GACP,OAAQ,GACZ,EACCT,GAAe,oBAACU,EAAA,CAAmB,MAAM,6CAAU,CACxD,EACA,oBAACC,EAAA,CACG,WAAY,2CAA2CJ,iBAAsC,EAAI,gEAAkE,0DAA0D,IAAIA,yBAA8C,GAAK,0DAA0D,IAAIA,0BAA+C,GAAK,4BAA4B,GACla,OAAQ,CAAC,UAAWT,EAAgB,GAAG,EACvC,OAAQJ,EACR,QAAS,IAAML,EAASgB,EAAkB,EAAK,CAAC,EAChD,KAAME,iBAAsC,EAAI,QAAU,UAC1D,iBAAkBA,yBAA8C,EAChE,IAAKL,EACL,SAAUK,iBAAsC,EAChD,aAAc,uCAAE,EAChB,sBAAuBA,iBAAsC,GAE7D,wCACKZ,YACG,oBAAC,OAAI,UAA0B,UAAU,2FACpC,CAACY,kBAAuC,GACrC,wCACI,oBAAC,OAAI,UAAU,0DAA0D,QAAS,IAAMX,iBAAwC,GAC5H,oBAACY,GAAA,CACG,IAAKC,EAAO,eACZ,IAAI,GACJ,MAAO,GACP,OAAQ,GACZ,EACA,oBAAC,KAAE,UAAW,4CAA4C,mDAAS,EACnE,oBAACD,GAAA,CACG,IAAKC,EAAO,YACZ,IAAI,GACJ,MAAO,GACP,OAAQ,GACZ,CACJ,CACJ,EAEJ,oBAAC,OAAI,UAAU,0DAA0D,QAAS,IAAMb,SAAgC,GACpH,oBAACY,GAAA,CACG,IAAKC,EAAO,MACZ,IAAI,GACJ,MAAO,GACP,OAAQ,GACZ,EACA,oBAAC,KAAE,UAAW,4CAA4C,0BAAI,EAC9D,oBAACD,GAAA,CACG,IAAKC,EAAO,YACZ,IAAI,GACJ,MAAO,GACP,OAAQ,GACZ,CACJ,CACJ,EAEHd,qBAA6C,oBAACiB,GAAA,CAAc,WAAYhB,EAAY,EACpFD,aAAqC,oBAACkB,GAAA,CAAM,WAAYjB,EAAY,CACzE,CACJ,CACJ,CAER,EAEOkB,GAAQC,GAAK3B,EAAQ,EK7G5B4B,IAAA,OAAS,gBAAAC,OAAoB,cAM7B,IAAMC,GAAc,IAAM,CACtB,GAAM,CAAE,SAAAC,EAAU,YAAAC,CAAY,EAAIC,EAC9B,CAAC,CAAE,WAAY,CAAE,SAAAF,EAAU,YAAAC,CAAY,CAAE,KAAO,CAAE,SAAAD,EAAU,YAAAC,CAAY,GACxEE,EACJ,EACA,OAAAD,EACI,CAAC,CAAE,UAAW,CAAE,qBAAAE,EAAsB,OAAAC,CAAO,CAAE,KAAO,CAAE,qBAAAD,EAAsB,OAAAC,CAAO,GACrFF,EACJ,EAGI,wCACI,oBAAC,OACG,UAAW,wFAAwF,CAACG,yBAA8C,GAAK,SAAS,IAEhK,oBAAC,YAAMC,EAAaP,CAAQ,CAAE,EAC9B,oBAAC,YAAK,KAAG,EACT,oBAAC,YAAMO,EAAaN,CAAW,CAAE,CACrC,CACJ,CAER,EAEOO,GAAQT,GC7BfU,IAAA,OAAOC,OAAW,oBAIlB,IAAMC,GAAS,IAGP,oBAACC,GAAA,CACG,IAAKC,EAAO,OACZ,IAAI,cACJ,MAAO,GACP,OAAQ,GACR,QAAS,IAAMC,GAAW,MAAM,EACpC,EAIDC,GAAQJ,GXHf,IAAMK,GAAa,KACfC,EAAe,CAAC,CAAE,WAAY,CAAE,aAAAC,EAAc,eAAAC,CAAe,CAAE,KAAO,CAAE,aAAAD,EAAc,eAAAC,CAAe,GAAIC,EAAY,EACrHH,EACI,CAAC,CAAE,UAAW,CAAE,qBAAAI,EAAsB,OAAAC,EAAQ,kBAAAC,CAAkB,CAAE,KAAO,CAAE,qBAAAF,EAAsB,OAAAC,EAAQ,kBAAAC,CAAkB,GAC3HH,EACJ,EAGI,oBAAC,OAAI,GAAG,qBAAqB,UAAW,8DACpC,oBAAC,OACG,UAAW,2BACPI,wBAA6C,GAAK,CAACA,gBAAqC,EAAI,WAAa,UAC7G,IAEC,CAACA,kBAAuC,GAAK,oBAACC,GAAA,IAAW,EACzDD,0BAA+C,GAAK,oBAACE,GAAA,IAAO,EAC5DF,wBAA6C,GAAK,oBAACG,GAAA,IAAiB,EACpEH,mBAAwC,GAAK,oBAACI,GAAA,IAAS,EACvDJ,gBAAqC,GAAK,CAACA,kBAAuC,GAAK,oBAACK,GAAA,CAAc,sBAAuB,GAAM,GAClIL,gBAAqC,GAAKA,kBAAuC,IAAM,oBAACM,GAAA,CAAM,cAAe,GAAM,CACzH,EACA,oBAAC,OAAI,UAAW,2BAA2BN,gBAAqC,EAAI,WAAa,UAAU,IACtGA,yBAA8C,GAAK,oBAACO,GAAA,IAAY,EAChE,CAACP,SAA8B,GAAK,oBAACQ,GAAA,IAAY,CACtD,CACJ,GAIDC,GAAQC,GAAKlB,EAAU,EY3C9BmB,IAAA,OAAOC,OAAW,oBAClB,OAAS,aAAAC,GAAW,YAAAC,OAAgB,QAKpC,OAAS,gBAAAC,OAAoB,cAK7B,IAAMC,GAAgB,IAAM,CACxB,IAAMC,EAAWC,EAAe,EAC1B,CAAE,UAAAC,CAAU,EAAIC,EAAe,CAAC,CAAE,WAAY,CAAE,UAAAD,CAAU,CAAE,KAAO,CAAE,UAAAA,CAAU,GAAIE,EAAY,EAE/F,CAACC,EAAYC,CAAa,EAAIC,GAAkB,EAAK,EAE3D,OAAAC,GAAU,IAAM,CACZ,IAAIC,EAAe,KACnB,oBAAaA,CAAO,EAChBC,aAAkC,GAClCD,EAAU,WAAW,IAAM,CACLE,EAAM,SAAS,EAAE,WAAW,WAC/BL,EAAc,EAAI,CACrC,EAAEM,EAAc,EAChBH,EAAU,WAAW,IAAM,CACvBH,EAAc,EAAK,EACnBN,EAASa,EAAkB,EAAK,CAAC,CACrC,EAAGC,EAAoB,IAEvB,aAAaL,CAAO,EACpBH,EAAc,EAAK,EACnBN,EAASa,EAAkB,EAAK,CAAC,GAG9B,IAAM,aAAaJ,CAAO,CACrC,EAAG,CAACP,CAAS,CAAC,EAGV,oBAAC,OAAI,UAAW,8GAA8GG,EAAa,kBAAoB,kBAAkB,IAAIK,kBAAuC,EAAI,YAAc,WAAW,IACrP,oBAAC,OAAI,UAAU,oGACX,oBAACK,GAAA,CACG,IAAKC,EAAO,WACZ,IAAI,cACJ,MAAO,GACP,OAAQ,GACZ,EACA,oBAAC,KAAE,UAAU,sCAAqC,6LAAqC,CAC3F,CACJ,CAER,EAEOC,GAAQlB,GhB3Cf,IAAMmB,GAAS,KACXC,EAAe,CAAC,CAAE,WAAY,CAAE,KAAAC,EAAM,aAAAC,EAAc,UAAAC,EAAW,eAAAC,CAAe,CAAE,KAAO,CAAE,KAAAH,EAAM,aAAAC,EAAc,UAAAC,EAAW,eAAAC,CAAe,GAAIC,EAAY,EAEnJ,oBAAC,OAAI,GAAG,SAAS,UAAU,cAAc,MAAO,CAAE,QAAsB,GACpE,wCACK,CAACC,UAA+B,GAC7B,wCACI,oBAAC,OACG,UAAW,uBAAuBA,yBAA8C,GAAK,UAAU,4EAA4EA,oBAAyC,GAAK,CAACA,aAAkC,EACtP,yCACA,yCACF,GACJ,MAAO,CAAE,YAAaC,EAAc,EAAG,aAAcA,EAAc,CAAE,GAEpE,CAACD,yBAA8C,GAAK,oBAACE,GAAA,IAAY,EACjEF,mBAAwC,GAAK,oBAACG,GAAA,IAAY,EAC3D,oBAACC,GAAA,IAAY,CACjB,CACJ,EAEJ,oBAACC,GAAA,IAAc,CACnB,CACJ,GAIDC,GAAQb,GiBpCfc,IAAA,OAAOC,OAAa,eAIpB,IAAMC,GAAiBC,GAAQ,IAAM,OAAO,+BAAkB,CAAC,EACzDC,GAAoBD,GAAQ,IAAM,OAAO,kCAAqB,CAAC,EAE/DE,GAAW,IACN,wCAAGC,kBAAuC,EAAI,oBAACJ,GAAA,IAAe,EAAK,oBAACE,GAAA,IAAkB,CAAI,EAG9FG,GAAQF,GCXfG,IAAA,OAAS,aAAAC,OAAiB,QAG1B,OAAS,gBAAAC,OAAoB,cAO7B,IAAMC,GAAgB,IAAM,CACxB,IAAMC,EAAWC,EAAe,EAChCC,EAAe,CAAC,CAAE,UAAW,CAAE,OAAAC,CAAO,CAAE,KAAO,CAAE,OAAAA,CAAO,GAAIC,EAAY,EAExEC,GAAU,IAAM,CACZ,IAAMC,EAAyB,IAAM,CACZ,SAAS,kBAEZN,EAASO,GAAgB,EAAI,CAAC,GAE5CP,EAASO,GAAgB,EAAK,CAAC,EAC/BC,GAA2B,EAC3BC,EAAcC,GAAc,gBAAgB,CAAC,EAErD,EAEI,SAAS,mBACT,SAAS,iBAAiB,yBAA0BJ,EAAwB,EAAK,EACjF,SAAS,iBAAiB,sBAAuBA,EAAwB,EAAK,EAC9E,SAAS,iBAAiB,mBAAoBA,EAAwB,EAAK,EAC3E,SAAS,iBAAiB,qBAAsBA,EAAwB,EAAK,EASrF,EAAG,CAAC,CAAC,CACT,EAEOK,GAAQZ,GC1Cfa,IAAA,OAAS,aAAAC,GAAW,UAAAC,OAAc,QAGlC,OAAS,gBAAAC,OAAoB,cAK7B,IAAMC,GAAoB,CAACC,EAA+BC,IAAiC,CACvF,IAAMC,EAAWC,EAAe,EAC1B,CAAE,eAAAC,CAAe,EAAIC,EAAe,CAAC,CAAE,WAAY,CAAE,eAAAD,CAAe,CAAE,KAAO,CAAE,eAAAA,CAAe,GAAIE,EAAY,EAE9GC,EAAaC,GAAY,IAAI,EAC7BC,EAA0BD,GAAgBR,CAAoB,EAC9DU,EAAyBF,GAAgBP,CAAmB,EAElEU,GAAU,IAAM,CACZF,EAAwB,QAAUT,CACtC,EAAG,CAACA,CAAoB,CAAC,EAEzBW,GAAU,IAAM,CACZD,EAAuB,QAAUT,CACrC,EAAG,CAACA,CAAmB,CAAC,EAExBU,GAAU,IAAM,CACZ,IAAIC,EAAyB,GAEvBC,EAAqBC,GAAe,CACtC,GAAM,CAAE,eAAAV,EAAgB,QAAAW,CAAQ,EAAIC,EAAM,SAAS,EAAE,WACjDD,EAASb,EAASe,EAAkB,EAAI,CAAC,EACpCH,EAAM,cAAgB,UAC3B,aAAaP,EAAW,OAAO,EAC1BH,EAED,CAAC,aAAc,eAAgB,qBAAsB,gBAAiB,iBAAkB,gBAAiB,cAAc,EAAE,SAASU,EAAM,OAAO,EAAE,IAEjJF,EAAyB,IAJRV,EAASe,EAAkB,EAAI,CAAC,EAKrDV,EAAW,QAAU,WAAW,IAAM,CAClC,GAAM,CAAE,eAAAW,EAAgB,mBAAAC,EAAoB,aAAAC,EAAc,qBAAAC,CAAqB,EAAIL,EAAM,SAAS,EAAE,SAC9F,CAAE,KAAAM,CAAK,EAAIN,EAAM,SAAS,EAAE,WAC9B,CAACE,GAAkB,CAACC,GAAsB,CAACC,GAAgB,CAACC,GAAwBC,GAAQV,GAAwBV,EAASe,EAAkB,EAAK,CAAC,CAC7J,EAAGM,CAAkB,EAE7B,EAEMC,EAAoBV,GAAe,CACrC,WAAW,IAAM,CACb,GAAM,CAAE,eAAAV,EAAgB,QAAAW,EAAS,UAAAU,CAAU,EAAIT,EAAM,SAAS,EAAE,WAEhE,GADA,aAAaT,EAAW,OAAO,EAC3BQ,EAAS,OAAOb,EAASe,EAAkB,EAAI,CAAC,EAChDS,GAAc,GAAK,CAACD,GAAa,CAAChB,EAAwB,SAAW,CAACC,EAAuB,UAEzF,CAAC,aAAc,eAAgB,gBAAiB,gBAAiB,cAAc,EAAE,SAASI,EAAM,OAAO,EAAE,GACzGa,GAAkBb,EAAO,gBAAgB,GAEzCZ,EAASe,EAAkB,CAACb,CAAc,CAAC,EAC3CG,EAAW,QAAU,WAAW,IAAM,CAClC,GAAM,CAAE,eAAAW,EAAgB,mBAAAC,EAAoB,aAAAC,EAAc,qBAAAC,CAAqB,EAAIL,EAAM,SAAS,EAAE,SAChG,CAACE,GAAkB,CAACC,GAAsB,CAACC,GAAgB,CAACC,GAAsBnB,EAASe,EAAkB,EAAK,CAAC,CAC3H,EAAGM,CAAkB,GAErBhB,EAAW,QAAU,WAAW,IAAM,CAClC,GAAM,CAAE,eAAAW,EAAgB,mBAAAC,EAAoB,aAAAC,EAAc,qBAAAC,CAAqB,EAAIL,EAAM,SAAS,EAAE,SAChG,CAACE,GAAkB,CAACC,GAAsB,CAACC,GAAgB,CAACC,GAAsBnB,EAASe,EAAkB,EAAK,CAAC,CAC3H,EAAGM,CAAkB,EAGjC,EAAG,GAAG,CACV,EAEMK,EAAkB,IAAM,CAC1B,aAAarB,EAAW,OAAO,EAC/BA,EAAW,QAAU,WAAW,IAAM,CAClC,GAAM,CAAE,eAAAH,EAAgB,QAAAW,CAAQ,EAAIC,EAAM,SAAS,EAAE,WAC/C,CAAE,eAAAE,EAAgB,mBAAAC,EAAoB,aAAAC,EAAc,qBAAAC,CAAqB,EAAIL,EAAM,SAAS,EAAE,SAChGD,EAASb,EAASe,EAAkB,EAAI,CAAC,EACpC,CAACC,GAAkB,CAACC,GAAsB,CAACC,GAAgB,CAACC,GAAwBjB,GAAkB,CAACW,GAC5Gb,EAASe,EAAkB,CAACb,CAAc,CAAC,CACnD,EAAGmB,CAAkB,CACzB,EAEA,gBAAS,eAAe,YAAY,EAAG,iBAAiB,aAAcC,CAAgB,EACtF,SAAS,eAAe,YAAY,EAAG,iBAAiB,YAAaI,CAAe,EACpF,SAAS,eAAe,YAAY,EAAG,iBAAiB,cAAef,CAAiB,EAEjF,IAAM,CACT,IAAMgB,EAAY,SAAS,eAAe,YAAY,EAClDA,IACAA,EAAU,oBAAoB,aAAcL,CAAgB,EAC5DK,EAAU,oBAAoB,YAAaD,CAAe,EAC1DC,EAAU,oBAAoB,cAAehB,CAAiB,EAEtE,CACJ,EAAG,CAACT,EAAgBJ,EAAsBC,CAAmB,CAAC,CAClE,EAEO6B,GAAQ/B,G9BrEf,IAAMgC,GAAY,IAAM,CAEpB,GAAM,CAACC,EAAsBC,CAAuB,EAAIC,GAAkB,EAAK,EACzE,CAACC,EAAqBC,CAAsB,EAAIF,GAAkB,EAAK,EAEvEG,EAAWC,EAAe,EAE1B,CAAE,QAAAC,CAAQ,EAAIC,EAChB,CAAC,CAAE,UAAW,CAAE,QAAAD,EAAS,OAAAE,EAAQ,qBAAAC,CAAqB,CAAE,KAAO,CAC3D,QAAAH,EACA,OAAAE,EACA,qBAAAC,CACJ,GACAC,EACJ,EAEM,CAAE,UAAAC,EAAW,eAAAC,EAAgB,aAAAC,CAAa,EAAIN,EAChD,CAAC,CAAE,WAAY,CAAE,UAAAI,EAAW,eAAAC,EAAgB,aAAAC,EAAc,UAAAC,CAAU,CAAE,KAAO,CACzE,UAAAH,EACA,eAAAC,EACA,aAAAC,EACA,UAAAC,CACJ,GACAJ,EACJ,EAEAK,GAAU,IAAM,CACZ,GAAIC,EAAS,EAAG,CACZ,IAAIC,EACEC,EAAe,IAAM,CAClBC,kBAAuC,IACxCF,EAAU,WACN,IAAM,CACFG,GAA2B,EAC3BhB,EAASiB,GAAc,EAAI,CAAC,CAChC,EACAC,GAAc,EAAI,EAAI,GAC1B,EAER,EACAJ,EAAa,EACb,OAAO,iBAAiB,SAAUA,CAAY,EAC9C,IAAMK,EAAY,SAAS,uBAAuB,YAAY,EAAE,CAAC,EACjE,OAAIA,GAAWA,EAAU,iBAAiB,SAAUL,CAAY,EAEzD,IAAM,CACT,OAAO,oBAAoB,SAAUA,CAAY,EAC7CK,GAAWA,EAAU,oBAAoB,SAAUL,CAAY,EACnE,aAAaD,CAAO,CACxB,CACJ,CACJ,EAAG,CAACN,EAAWC,EAAgBC,EAAcG,EAAS,CAAC,CAAC,EAExDD,GAAU,IAAM,CACZ,IAAME,EAAU,WAAW,IAAMG,GAA2B,EAAG,GAAG,EAElE,MAAO,IAAM,aAAaH,CAAO,CACrC,EAAG,CAACL,CAAc,CAAC,EAEnBY,GAAc,EAEd,IAAMC,EAAqBC,GAAe,CAClC,CAACP,iBAAsC,GAAKO,EAAM,OAAO,WAAa,SAASC,GAAiB,CACxG,EAEA,OAAAC,GAAkB7B,EAAsBG,CAAmB,EAGvD,wCACKiB,kBAAuC,GAAK,oBAAC,OAAI,GAAG,mBAAmB,UAAW,gEAAgE,CAACA,iBAAsC,GAAK,CAACA,gBAAqC,GAAK,oBAAoB,GAAI,EAClQ,oBAAC,OACG,GAAG,aACH,MAAO,CACH,OAAQA,kBAAuC,UAEzCA,gBAAqC,MAEjC,OACd,EACA,QAAUO,GAAUP,qBAA0C,GAAKU,GAAgBH,CAAK,EACxF,cAAgBA,GAAsC,CAACP,kBAAuC,GAAKM,EAAkBC,CAAK,EAC1H,UAAW,+HAA+H,CAACP,iBAAsC,GAAK,CAACA,gBAAqC,GAAK,oBAAoB,IAAIA,gBAAqC,GAAK,4BAA4B,IAAIA,kBAAuC,EAAI,gIAAkI,uBAAuB,IAAIA,kBAAuC,GAAKA,yBAA8C,GAAK,gCAAgC,IAAI,CAACA,oBAAyC,GAAK,gBAAgB,IAE7sB,oBAAC,OAAI,UAAW,uFAAuF,CAACA,iBAAsC,GAAK,CAACA,gBAAqC,GAAK,oBAAoB,IAAIA,oBAAyC,EAAI,mBAAqB,iBAAiB,GAAI,EAC5SA,cAAmC,GAChC,oBAAC,OAAI,UAAU,6DACX,oBAACW,GAAA,CAAM,IAAKxB,EAAQ,OAAQ,OAAO,OAAO,IAAI,QAAQ,UAAU,UAAU,UAAW,GAAG,CAACa,iBAAsC,GAAK,CAACA,gBAAqC,GAAK,mBAAmB,GAAI,CAC1M,EAEHA,kBAAuC,GACpC,oBAAC,OAAI,UAAU,cACX,oBAAC,OAAI,UAAU,oDAAoD,QAAS,IAAMf,EAAS2B,EAAkB,MAAS,CAAC,GACnH,oBAACD,GAAA,CACG,IAAKE,EAAO,YACZ,IAAI,eACJ,MAAO,GACP,OAAQ,GACZ,CACJ,EACA,oBAAC,OAAI,UAAW,0FAA0Fb,oBAAyC,GAAK,CAACA,aAAkC,EACrL,yCACA,yCACF,IAAI,oBAACc,GAAA,IAAU,CAAE,EACrB,oBAACC,GAAA,IAAc,CACnB,EAEHf,6BAAkD,GAAK,CAACA,gBAAqC,GAAK,oBAACgB,GAAA,IAAsB,EACzHhB,uBAA4C,GACzC,oBAAC,OACG,UAAW,iGACX,MAAO,CACH,OAAQjB,GAAuBH,MACnC,GAEA,oBAACqC,EAAA,CACG,KAAK,eACL,qBAAsBrC,EACtB,wBAAyBC,EAC7B,EACA,oBAACoC,EAAA,CACG,KAAK,gBACL,oBAAqBlC,EACrB,uBAAwBC,EAC5B,CACJ,EAEJ,oBAACkC,GAAA,IAAS,EACT,CAAClB,SAA8B,GAAK,CAACA,yBAA8C,GAAK,CAACA,kBAAuC,GAC7H,oBAAC,OACG,GAAG,iBACH,UAAW,uDAAuDA,uBAA4C,GAAK,aAC/G,IAEJ,oBAAC,OAAI,UAAW,8DACXA,cAAmC,GAAK,oBAACmB,GAAA,IAAO,EAChDnB,YAAiC,GAAK,CAACA,yBAA8C,GAAK,oBAACoB,GAAA,IAAK,EAChGpB,cAAmC,GAAK,oBAACqB,GAAA,IAAO,CACrD,CACJ,CAER,CACJ,CAER,EAEOC,GAAQ3C,GDtKf,IAAM4C,GAAe,IAEb,oBAAC,OACD,UAAW,6BAA6B,CAACC,iBAAsC,GAAK,CAACA,gBAAqC,GAAK,mBAAmB,IAElJ,oBAACC,GAAA,IAAU,CACf,EAIGC,GAAQH,GgChBfI,IAEA,OAAS,gBAAAC,OAAoB,cCF7BC,ICAAC,IAAA,OAAS,aAAAC,OAAiB,QAE1B,OAAS,gBAAAC,OAAoB,cAK7B,IAAMC,GAAgB,IAAM,CACxB,GAAM,CAAE,OAAAC,CAAO,EAAIC,EACf,CAAC,CAAE,UAAW,CAAE,OAAAD,CAAO,CAAE,KAAO,CAAE,OAAAA,CAAO,GACzCE,EACJ,EACAD,EAAe,CAAC,CAAE,WAAY,CAAE,QAAAE,CAAQ,CAAE,KAAO,CAAE,QAAAA,CAAQ,GAAID,EAAY,EAE3EE,GAAU,IAAM,CACRC,cAAmC,GAAGC,GAAqB,CACnE,EAAG,CAACN,EAAO,GAAIA,EAAO,IAAI,CAAC,CAC/B,EAEOO,GAAQR,GDjBf,IAAMS,GAAa,IAAM,CACrBC,GAAc,CAClB,EAEOC,GAAQF,GENfG,IAAA,OAAS,aAAAC,OAAiB,QAG1B,OAAS,gBAAAC,OAAoB,cAM7B,IAAMC,GAAkB,IAAM,CAC1BC,EAAe,CAAC,CAAE,UAAW,CAAE,OAAAC,CAAO,CAAE,KAAO,CAAE,OAAAA,CAAO,GAAIC,EAAY,EACxEF,EAAe,CAAC,CAAE,WAAY,CAAE,eAAAG,CAAe,CAAE,KAAO,CAAE,eAAAA,CAAe,GAAID,EAAY,EAEzFE,GAAU,IAAM,CACZ,GAAM,CAAE,OAAAH,CAAO,EAAII,EAAM,SAAS,EAAE,UAC9BC,EAAe,IAAM,CACvB,IAAMC,EAAmB,SAAS,eAAeC,kBAAuC,EAAI,mBAAqB,YAAY,EAC7H,GAAIA,sBAA2C,GAAOD,GAAoB,CAAC,SAAS,wBAAyB,CACzG,IAAME,EAAWJ,EAAM,SACME,EAAiB,sBAAsB,EAAE,IAC3C,EAAGE,EAASC,EAAkB,EAAI,CAAC,EACzDD,EAASC,EAAkB,EAAK,CAAC,CAC1C,CACJ,EACIC,EACJ,OAAIH,sBAA2C,GAAK,CAAC,SAAS,0BAC1DG,EAAgB,SAAS,eAAeV,EAAO,eAAgB,EAC3DU,GAAeA,EAAc,iBAAiB,SAAUL,CAAY,GAErE,IAAOE,sBAA2C,GAAKG,GAAiB,CAAC,SAAS,yBAA4BA,EAAc,oBAAoB,SAAUL,CAAY,CACjL,EAAG,CAAC,CAAC,CACT,EAEOM,GAAQb,GCjCfc,IAEA,OAAOC,OAAW,oBAGlB,IAAMC,GAAY,IAEV,oBAAC,OAAI,UAAW,4FACZ,oBAAC,OAAI,UAAU,6BACX,oBAACC,GAAA,CACG,IAAKC,EAAO,SACZ,IAAI,GACJ,MAAO,IACP,OAAQ,GACZ,CACJ,EACA,oBAAC,MAAG,UAAU,sEAAqE,4JAA6B,EAChH,oBAAC,KAAE,UAAU,sDAAqD,8OAA8C,CACpH,EAIDC,GAAQH,GJVf,IAAMI,GAAmB,KACrBC,EAAe,CAAC,CAAE,UAAW,CAAE,OAAAC,EAAQ,QAAAC,EAAS,eAAAC,EAAgB,eAAAC,CAAe,CAAE,KAAO,CAAC,OAAAH,EAAO,QAAAC,EAAS,eAAAC,EAAgB,eAAAC,CAAc,GAAGC,EAAa,EAEvJC,GAAW,EACXC,GAA8B,EAC9BC,GAAgB,EAGZ,wCACKC,kBAAuC,EACpCA,kBAAuC,EACnC,oBAAC,OACG,UAAW,kCAAkC,CAACA,iBAAsC,GAAK,CAACA,gBAAqC,GAAK,oBAAoB,IAExJ,oBAACC,GAAA,IAAU,CACf,EAEA,oBAAC,OAAI,UAAW,6BACZ,oBAACC,GAAA,IAAU,CACf,EAGJ,oBAAC,OAAI,UAAU,sEAAsE,CAE7F,GAIDC,GAAQb,GlC9Bf,OAAS,gBAAAc,OAAoB,cAG7B,IAAMC,GAAc,CAAC,CAAE,OAAAC,CAAO,IAA2B,CACrDC,GAAgBD,CAAM,EAEtBE,EAAe,CAAC,CAAE,WAAY,CAAE,aAAAC,CAAa,CAAE,KAAO,CAAE,aAAAA,CAAa,GAAIC,EAAY,EACrFF,EAAe,CAAC,CAAE,UAAW,CAAE,QAAAG,EAAS,OAAAL,EAAQ,kBAAAM,CAAkB,CAAE,KAAO,CAAE,QAAAD,EAAS,OAAAL,EAAQ,kBAAAM,CAAkB,GAAIF,EAAY,EAEhIG,GAAU,IACC,IAAMC,GAAW,EACzB,CAAC,CAAC,EAEL,IAAIC,EAAU,uCAAE,EAChB,OAAIC,WAAgC,EAChCD,EACI,oBAAC,OACG,UAAW,GAAG,CAACC,iBAAsC,GAAK,mBAAmB,IAAIA,gBAAqC,GAAK,0EAA0E,GACrM,MAAO,CAAE,WAAwC,YAAa,OAAQ,GAErEA,kBAAuC,EACpC,oBAACC,GAAA,IAAa,EAEd,oBAACC,GAAA,IAAU,CAEnB,EAEDH,EAAU,oBAAC,OAAI,UAAU,+GAA+G,EAG3I,oBAAC,OAAI,IAAI,MAAM,UAAU,wCAAwC,GAAG,iBAAiBA,CAAQ,CAErG,EAEOI,GAAQd,GDrCf,IAAMe,GAAqB,CAAC,CAAE,OAAAC,CAAO,IAE7B,oBAACC,GAAA,CAAS,MAAOC,GACb,oBAACC,GAAA,CAAY,OAAQH,EAAQ,CACjC,EAIDI,GAAQL","names":["init_esm_shims","init_esm_shims","Provider","init_esm_shims","useEffect","init_esm_shims","useEffect","Cookies","useHandleParams","query","dispatch","useAppDispatch","queryParams","handleSetParamsInRedux","setPlayerParams","setIsReady","handleFeatureSet","featureSet","strToObj","handleAddUUID","handleXToken","xTokenInCookie","Cookies","handleLiveAndVodParams","handleStaticParams","eUrl","eCover","getUUID","handleParams","staticFormats","useEffect","useHandleParams_default","init_esm_shims","init_esm_shims","Image","useEffect","useState","shallowEqual","init_esm_shims","useEffect","useRef","useState","shallowEqual","useDoubleTap","init_esm_shims","IMAGES","importImages_default","Image","hideTime","BackwardForward","type","isRightDoubleTouched","isLeftDoubleTouched","setIsRightDoubleTouched","setIsLeftDoubleTouched","backwardForwardCount","setBackwardForwardCount","useState","hide","setHide","backwardForwardCountRef","useRef","dispatch","useAppDispatch","duration","useAppSelector","currentTime","showMiniPlayer","shallowEqual","videoElementSizeInfo","params","timeoutRef","useEffect","doubleTouch","useDoubleTap","event","setActiveElements","videoTag","handleBackwardForward","handleTouchStart","prev","conditions","handleRippleCircle","component","importImages_default","backwardForward_default","init_esm_shims","Image","useEffect","useRef","useState","shallowEqual","init_esm_shims","Mute","className","onClick","mute_default","init_esm_shims","UnMute","className","onClick","unMute_default","TouchVolumeBrightness","type","setType","useState","dispatch","useAppDispatch","settings","useAppSelector","shallowEqual","primaryBrightnessValueRef","useRef","primaryVolumeValueRef","typeRef","useEffect","startPositionY","handleTouchStartScreen","event","conditions","checkParentTarget","handleTouchMoveScreen","handleTouchMove","handleTouchEndScreen","store_default","sendFluentLog","brightnessLog","volumeLog","area","activePointerProgressBar","setActiveElements","height","value","volumeCount","setUserSettings","videoTag","mute_default","unMute_default","Image","importImages_default","touchVolumeBrightness_default","init_esm_shims","shallowEqual","init_esm_shims","shallowEqual","Title","details","params","useAppSelector","shallowEqual","conditions","title_default","init_esm_shims","Image","Lock","conditions","Image","importImages_default","handleLock","lock_default","Header","useAppSelector","lock","activeElements","shallowEqual","conditions","title_default","lock_default","header_default","init_esm_shims","useEffect","useState","shallowEqual","init_esm_shims","shallowEqual","Image","PlayPause","useAppSelector","play","showMiniPlayer","shallowEqual","videoElementSizeInfo","params","conditions","event","importImages_default","handlePlayPause","playPause_default","Main","showIcons","setShowIcons","useState","useAppSelector","lock","firstPlay","shallowEqual","activeElements","useEffect","timeout","conditions","backwardForward_default","playPause_default","main_default","init_esm_shims","shallowEqual","init_esm_shims","useEffect","useState","shallowEqual","init_esm_shims","useEffect","useState","shallowEqual","memo","init_esm_shims","getPointerTime","event","type","videoElementSizeInfo","store_default","duration","hlsLiveSyncPosition","durationValue","conditions","clientX","footerPadding","timePositionX","getPointerPosition","hideProgressTooltip","progressTooltip","generalStyleTooltipHandler","store_default","vttTooltipStyleHandler","event","videoElementSizeInfo","element","parentPlayer","getPointerPosition","videoTag","showProgressTooltip","progressBarTooltip","setTooltipTime","getPointerTime","conditions","secondsToHMS","handleTimeTooltip","isTimer","clientX","footerPadding","handleProgressTime","progressBar","handlePointerDown","timeoutIds","setIsPointerDown","dispatch","setActivePointerProgressBar","setDelayTurnOffControlbar","id","handlePointerMove","activePointerProgressBar","left","handlePointerUp","setTimeoutIds","duration","hlsLiveSyncPosition","right","durationValue","currentTime","handleVideoTimeline","handleTimeout","ids","timeoutIdTemp","settingPopover","markersListPopover","delayTurnOffControlbar","setActiveElements","activeElementsTime","handleCatchUpLoadingLog","timer","sendFluentLog","catchUpLoadingLog","handleMouseMove","handleMouseOut","deconstructTimestamp","timestamp","splitStampMilliseconds","timePartsSplit","getSecondsFromTimestamp","timestampParts","getPropsFromDef","def","imageDefSplit","imageUrl","splitCoords","getFullyQualifiedUrl","path","base","getVttCss","vttImageDef","vttUrl","cssObj","baseSplit","imageProps","fetchFile","url","setVttPool","response","setInfo","data","processedVtts","vttDef","vttDefSplit","vttTimingSplit","vttTimeStart","vttTimeEnd","vttCssDef","error","getStyleForTime","time","vttPool","cache","i","item","objectVtt","Tooltip","details","useAppSelector","shallowEqual","tooltipTime","activeElements","isFullScreen","cache","vttPool","setVttPool","useState","vttUrl","setVttUrl","conditions","useEffect","fetchFile","getStyleForTime","tooltip_default","memo","ProgressBar","isPointerDown","setIsPointerDown","useState","useEffect","hideProgressTooltip","duration","currentTime","bufferedTimeWidth","useAppSelector","showMiniPlayer","shallowEqual","markers","params","videoElementSizeInfo","isComplexPortrait","timeoutIds","setTimeoutIds","durationTime","calculateMarkerPosition","time","progressBarWidth","conditions","tooltip_default","event","handlePointerDown","handlePointerMove","handlePointerUp","handleMouseMove","handleMouseOut","handleCatchUpLoadingLog","marker","progressbar_default","init_esm_shims","memo","shallowEqual","init_esm_shims","useEffect","useState","shallowEqual","init_esm_shims","ControllbarTooltip","title","className","controllbarTooltip_default","Image","FullScreen","isFullScreen","useAppSelector","firstPlay","shallowEqual","showTooltip","setShowTooltip","useState","dispatch","useAppDispatch","useEffect","conditions","setActiveElements","Image","importImages_default","handleFullScreen","handleLockOrientation","controllbarTooltip_default","fullScreen_default","init_esm_shims","useState","shallowEqual","Image","PictureInPicture","showTooltip","setShowTooltip","useState","useAppSelector","showMiniPlayer","shallowEqual","videoElementSizeInfo","params","conditions","importImages_default","videoTag","controllbarTooltip_default","pictureInPicture_default","init_esm_shims","useRef","useState","shallowEqual","Image","SoundVolume","showTooltip","setShowTooltip","useState","dispatch","useAppDispatch","settings","useAppSelector","shallowEqual","primaryVolumeRef","useRef","handleMouseUp","store_default","sendFluentLog","volumeLog","setUserSettings","handleMute","type","handleChangeSoundVolume","conditions","event","Image","importImages_default","controllbarTooltip_default","soundVolume_default","init_esm_shims","memo","useEffect","useRef","useState","shallowEqual","init_esm_shims","forwardRef","useEffect","useState","createPortal","shallowEqual","dynamic","CloseIcon","dynamic","Popover","forwardRef","children","status","onClose","type","classNames","parentClassNames","styles","isBlurBackground","isFullHeight","isFullScreen","isHeader","headerTitle","customHeader","headerClassName","isHasCatchUpLineOnTop","animation","scrollbar","isFocusOnInput","showCloseIcon","pinContent","ref","showPopover","setShowPopover","useState","maxHeight","setMaxHeight","maxHeightOnTouchMove","setMaxHeightOnTouchMove","zIndexOnCatchUp","setZIndexOnCatchUp","videoElementSizeInfo","useAppSelector","shallowEqual","useEffect","timeout","conditions","handleTouchMove","event","handleTouchEnd","content","createPortal","popover_default","Image","init_esm_shims","shallowEqual","memo","useRef","useState","Image","init_esm_shims","useEffect","useOnClickOutside","ref","handler","listener","event","useOnClickOutside_default","QualityLevels","setSection","showQualityLevelsIcon","dispatch","useAppDispatch","qualityLevels","useAppSelector","manualQuality","autoQuality","showMiniPlayer","shallowEqual","settings","qualityLevelsPopover","params","videoElementSizeInfo","showTooltip","setShowTooltip","useState","handleTickSelectedQuality","index","qualityLevel","conditions","qualityLevelsRef","useRef","useOnClickOutside_default","setQualityLevelsPopover","qualityLevelsContent","sendFluentLog","qualityChangeRequestLog","setActiveElements","setSettingPopover","setUserSettings","Image","importImages_default","controllbarTooltip_default","popover_default","qualityLevels_default","memo","init_esm_shims","useEffect","useRef","useState","shallowEqual","Image","speeds","Speed","setSection","showSpeedIcon","dispatch","useAppDispatch","useAppSelector","showMiniPlayer","shallowEqual","videoElementSizeInfo","params","speedPopover","settings","speedRef","useRef","showTooltip","setShowTooltip","useState","useOnClickOutside_default","setSpeedPopover","useEffect","videoTag","speedContent","speed","index","conditions","sendFluentLog","speedChangeLog","setActiveElements","setSettingPopover","setUserSettings","Image","importImages_default","controllbarTooltip_default","popover_default","speed_default","Settings","dispatch","useAppDispatch","useAppSelector","params","shallowEqual","settingPopover","section","setSection","useState","elementHeight","setElementHeight","showTooltip","setShowTooltip","settingsRef","useRef","useOnClickOutside_default","setSettingPopover","useEffect","conditions","Image","importImages_default","controllbarTooltip_default","popover_default","qualityLevels_default","speed_default","settings_default","memo","init_esm_shims","shallowEqual","ElapsedTime","duration","currentTime","useAppSelector","shallowEqual","videoElementSizeInfo","params","conditions","secondsToHMS","elapsedTime_default","init_esm_shims","Image","Unlock","Image","importImages_default","handleLock","unlock_default","Controlbar","useAppSelector","isFullScreen","showMiniPlayer","shallowEqual","videoElementSizeInfo","params","isComplexPortrait","conditions","fullScreen_default","unlock_default","pictureInPicture_default","settings_default","qualityLevels_default","speed_default","elapsedTime_default","soundVolume_default","controllbar_default","memo","init_esm_shims","Image","useEffect","useState","shallowEqual","CheckInternet","dispatch","useAppDispatch","isLoading","useAppSelector","shallowEqual","showLoader","setShowLoader","useState","useEffect","timeout","conditions","store_default","showLoaderTime","setActiveElements","notShowingLoaderTime","Image","importImages_default","checkInternet_default","Footer","useAppSelector","lock","isFullScreen","isLoading","activeElements","shallowEqual","conditions","footerPadding","elapsedTime_default","progressbar_default","controllbar_default","checkInternet_default","footer_default","init_esm_shims","dynamic","StaticVideoTag","dynamic","NonStaticVideoTag","VideoTag","conditions","videoTag_default","init_esm_shims","useEffect","shallowEqual","useFullScreen","dispatch","useAppDispatch","useAppSelector","params","shallowEqual","useEffect","handleChangeFullScreen","setIsFullScreen","handleVideoElementSizeInfo","sendFluentLog","fullscreenLog","useFullScreen_default","init_esm_shims","useEffect","useRef","shallowEqual","useActiveInActive","isRightDoubleTouched","isLeftDoubleTouched","dispatch","useAppDispatch","activeElements","useAppSelector","shallowEqual","timeoutRef","useRef","isRightDoubleTouchedRef","isLeftDoubleTouchedRef","useEffect","shouldInActiveElements","handlePointerMove","event","isEnded","store_default","setActiveElements","settingPopover","markersListPopover","speedPopover","qualityLevelsPopover","play","activeElementsTime","handleTouchStart","firstPlay","isTouchScreen","checkParentTarget","handleTouchMove","videoArea","useActiveInActive_default","VideoArea","isRightDoubleTouched","setIsRightDoubleTouched","useState","isLeftDoubleTouched","setIsLeftDoubleTouched","dispatch","useAppDispatch","details","useAppSelector","params","videoElementSizeInfo","shallowEqual","firstPlay","showMiniPlayer","isFullScreen","isLoading","useEffect","videoTag","timeout","handleResize","conditions","handleVideoElementSizeInfo","setShowScreen","isTouchScreen","appScroll","useFullScreen_default","handleDoubleClick","event","handleFullScreen","useActiveInActive_default","handlePlayPause","Image","setShowMiniPlayer","importImages_default","playPause_default","checkInternet_default","touchVolumeBrightness_default","backwardForward_default","videoTag_default","header_default","main_default","footer_default","videoArea_default","StaticPlayer","conditions","videoArea_default","staticPlayer_default","init_esm_shims","shallowEqual","init_esm_shims","init_esm_shims","useEffect","shallowEqual","useGetDetails","params","useAppSelector","shallowEqual","isEnded","useEffect","conditions","getLiveAndVodDetails","useGetDetails_default","useGetData","useGetDetails_default","useGetData_default","init_esm_shims","useEffect","shallowEqual","useHandleScroll","useAppSelector","params","shallowEqual","showMiniPlayer","useEffect","store_default","handleScroll","videoAreaElement","conditions","dispatch","setShowMiniPlayer","scrollElement","useHandleScroll_default","init_esm_shims","Image","NotActive","Image","importImages_default","notActive_default","LiveAndVodPlayer","useAppSelector","params","details","isFetchDetails","isValidAddress","shallowEqual","useGetData_default","handleApplyContinuousPlayback","useHandleScroll_default","conditions","videoArea_default","notActive_default","vodPlayer_default","shallowEqual","VideoPlayer","params","useHandleParams_default","useAppSelector","isFullScreen","shallowEqual","isReady","isComplexPortrait","useEffect","clearRedux","element","conditions","staticPlayer_default","vodPlayer_default","videoPlayer_default","VideoPlayerLibrary","params","Provider","store_default","videoPlayer_default","videoPlayerLibrary_default"]}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }"use client";var _chunkRCU5ZGMIjs = require('./chunk-RCU5ZGMI.js');var _chunk3Q5F32UVjs = require('./chunk-3Q5F32UV.js');var _chunkA3BCKK27js = require('./chunk-A3BCKK27.js');_chunkA3BCKK27js.e.call(void 0, );var _hlsjs = require('hls.js'); var _hlsjs2 = _interopRequireDefault(_hlsjs);var _react = require('react');var _reactredux = require('react-redux');_chunkA3BCKK27js.e.call(void 0, );var ce=()=>{let r=null,{isEnded:o}=_chunk3Q5F32UVjs.da.call(void 0, ({controller:{isEnded:c}})=>({isEnded:c}),_reactredux.shallowEqual);_react.useEffect.call(void 0, ()=>(r=setInterval(()=>_chunk3Q5F32UVjs.R.call(void 0, ),_chunk3Q5F32UVjs.M),()=>clearInterval(r)),[]),_react.useEffect.call(void 0, ()=>{_chunk3Q5F32UVjs.ba.call(void 0, "isEnded")&&clearInterval(r)},[o])},te=ce;_chunkA3BCKK27js.e.call(void 0, );var Ee=r=>{let[o,c]=_react.useState.call(void 0, []),[v,u]=_react.useState.call(void 0, 0),{qualityLevels:s}=_chunk3Q5F32UVjs.da.call(void 0, ({controller:{qualityLevels:t}})=>({qualityLevels:t}),_reactredux.shallowEqual);_react.useEffect.call(void 0, ()=>{if(r){let t=[];switch(o.length){case 0:t=[r];break;case 1:t=[r,...o];break;case 2:t=[r,...o],_chunk3Q5F32UVjs.pa.call(void 0, _chunk3Q5F32UVjs.ka.call(void 0, `${t[0]}P`,`${t[1]}P`,s.indexOf(t[0])-s.indexOf(t[1])));break;default:t=[r,o[0],o[1]],t[1]!==t[2]&&_chunk3Q5F32UVjs.pa.call(void 0, _chunk3Q5F32UVjs.ka.call(void 0, `${t[1]}P`,`${t[2]}P`,s.indexOf(t[1])-s.indexOf(t[2])));break}c(t)}},[r]),_react.useEffect.call(void 0, ()=>{o.length===3&&o[0]===o[2]?(_chunk3Q5F32UVjs.pa.call(void 0, _chunk3Q5F32UVjs.la.call(void 0, v,o)),c([]),u(0)):u(new Date().getTime())},[o])},oe=Ee;var _image = require('next/legacy/image'); var _image2 = _interopRequireDefault(_image);_chunkA3BCKK27js.e.call(void 0, );var ve=()=>{_react.useEffect.call(void 0, ()=>{let r=()=>{_chunk3Q5F32UVjs.R.call(void 0, )};return window.addEventListener("beforeunload",r),()=>window.removeEventListener("beforeunload",r)},[])},re=ve;var we=()=>{let[r,o]=_react.useState.call(void 0, void 0),c=_chunk3Q5F32UVjs.ca.call(void 0, ),{params:v,details:u,videoElementSizeInfo:s}=_chunk3Q5F32UVjs.da.call(void 0, ({videoData:{params:e,details:i,videoElementSizeInfo:d,isComplexPortrait:P,subtitles:A}})=>({params:e,details:i,videoElementSizeInfo:d,isComplexPortrait:P,subtitles:A}),_reactredux.shallowEqual),{currentTime:t,duration:se}=_chunk3Q5F32UVjs.da.call(void 0, ({controller:{currentTime:e,duration:i,isEnded:d,firstPlay:P,showMiniPlayer:A}})=>({currentTime:e,duration:i,isEnded:d,firstPlay:P,showMiniPlayer:A}),_reactredux.shallowEqual),g=_react.useRef.call(void 0, null),le=_react.useRef.call(void 0, 0),h=_react.useRef.call(void 0, 0),k=_react.useRef.call(void 0, 0),_=_react.useRef.call(void 0, 0),x=_react.useRef.call(void 0, 0),me=_react.useRef.call(void 0, 1),fe=_react.useRef.call(void 0, _chunk3Q5F32UVjs.O.call(void 0, )?_chunk3Q5F32UVjs.O.call(void 0, ).currentTime:0);return te(),re(),_react.useLayoutEffect.call(void 0, ()=>{let e=new (0, _hlsjs2.default)(_chunkRCU5ZGMIjs.b.call(void 0, ));return _chunk3Q5F32UVjs._.call(void 0, x),k.current=Date.now(),_hlsjs2.default.isSupported()?(e.attachMedia(_chunk3Q5F32UVjs.O.call(void 0, )),e.on(_hlsjs2.default.Events.MEDIA_ATTACHED,()=>_chunkRCU5ZGMIjs.e.call(void 0, _hlsjs2.default,e)),e.on(_hlsjs2.default.Events.FRAG_BUFFERED,()=>_chunkRCU5ZGMIjs.f.call(void 0, e)),e.on(_hlsjs2.default.Events.FRAG_LOADING,()=>_chunkRCU5ZGMIjs.g.call(void 0, e)),e.on(_hlsjs2.default.Events.FRAG_CHANGED,(i,d)=>_chunkRCU5ZGMIjs.h.call(void 0, _hlsjs2.default,e,d,o)),e.on(_hlsjs2.default.Events.FRAG_PARSED,(i,d)=>_chunkRCU5ZGMIjs.i.call(void 0, e,d,o)),_chunk3Q5F32UVjs.O.call(void 0, ).addEventListener("waiting",i=>_chunkRCU5ZGMIjs.k.call(void 0, i,h)),_chunk3Q5F32UVjs.O.call(void 0, ).addEventListener("seeking",i=>_chunkRCU5ZGMIjs.l.call(void 0, i,h)),_chunk3Q5F32UVjs.O.call(void 0, ).addEventListener("play",i=>_chunkRCU5ZGMIjs.m.call(void 0, i,g)),_chunk3Q5F32UVjs.O.call(void 0, ).addEventListener("playing",()=>_chunkRCU5ZGMIjs.n.call(void 0, me,x,k,_,g,le,h,fe)),_chunk3Q5F32UVjs.O.call(void 0, ).addEventListener("pause",_chunkRCU5ZGMIjs.o),_chunk3Q5F32UVjs.O.call(void 0, ).addEventListener("timeupdate",_chunkRCU5ZGMIjs.p),_chunk3Q5F32UVjs.O.call(void 0, ).addEventListener("canplay",_chunkRCU5ZGMIjs.q),_chunk3Q5F32UVjs.O.call(void 0, ).addEventListener("ended",_chunkRCU5ZGMIjs.r),document.addEventListener("visibilitychange",()=>_chunkRCU5ZGMIjs.D.call(void 0, e))):_chunk3Q5F32UVjs.O.call(void 0, ).canPlayType("application/vnd.apple.mpegurl")&&(_chunk3Q5F32UVjs.O.call(void 0, ).src=u.stream_link,_chunk3Q5F32UVjs.O.call(void 0, ).addEventListener("waiting",i=>_chunkRCU5ZGMIjs.k.call(void 0, i,h)),_chunk3Q5F32UVjs.O.call(void 0, ).addEventListener("play",i=>_chunkRCU5ZGMIjs.s.call(void 0, i,g)),_chunk3Q5F32UVjs.O.call(void 0, ).addEventListener("playing",_chunkRCU5ZGMIjs.t),_chunk3Q5F32UVjs.O.call(void 0, ).addEventListener("canplay",_chunkRCU5ZGMIjs.q),_chunk3Q5F32UVjs.O.call(void 0, ).addEventListener("timeupdate",_chunkRCU5ZGMIjs.u),_chunk3Q5F32UVjs.O.call(void 0, ).addEventListener("ended",_chunkRCU5ZGMIjs.v),_chunk3Q5F32UVjs.O.call(void 0, ).addEventListener("ended",_chunkRCU5ZGMIjs.r),_chunkRCU5ZGMIjs.a.call(void 0, )),()=>{e.detachMedia(),e.off(_hlsjs2.default.Events.MEDIA_ATTACHED,()=>_chunkRCU5ZGMIjs.e.call(void 0, _hlsjs2.default,e)),e.off(_hlsjs2.default.Events.FRAG_BUFFERED,()=>_chunkRCU5ZGMIjs.f.call(void 0, e)),e.off(_hlsjs2.default.Events.FRAG_LOADING,()=>_chunkRCU5ZGMIjs.g.call(void 0, e)),e.off(_hlsjs2.default.Events.FRAG_CHANGED,(i,d)=>_chunkRCU5ZGMIjs.h.call(void 0, _hlsjs2.default,e,d,o)),e.off(_hlsjs2.default.Events.FRAG_PARSED,(i,d)=>_chunkRCU5ZGMIjs.i.call(void 0, e,d,o)),e.off(_hlsjs2.default.Events.ERROR,(i,d)=>_chunkRCU5ZGMIjs.j.call(void 0, _hlsjs2.default,d)),e.off(_hlsjs2.default.Events.MANIFEST_PARSED,(i,d)=>_chunkRCU5ZGMIjs.c.call(void 0, e,d)),e.off(_hlsjs2.default.Events.MANIFEST_LOADED,()=>_chunkRCU5ZGMIjs.d.call(void 0, e)),document.removeEventListener("visibilitychange",()=>_chunkRCU5ZGMIjs.D.call(void 0, e))}},[u.stream_link]),_react.useEffect.call(void 0, ()=>{t<se&&_chunk3Q5F32UVjs.ba.call(void 0, "isEnded")&&c(_chunk3Q5F32UVjs.q.call(void 0, !1))},[t]),oe(r),React.createElement(React.Fragment,null,_chunk3Q5F32UVjs.ba.call(void 0, "showBanner")&&React.createElement(_image2.default,{src:u.banner,width:0,height:0,className:"pl-hidden",onLoad:()=>_.current=Date.now(),alt:_nullishCoalesce(u.title, () => (v.id))}),React.createElement("video",{preload:"metadata",crossOrigin:"anonymous",id:"player-tag",playsInline:!0,muted:_chunk3Q5F32UVjs.ba.call(void 0, "isRaw"),className:`pl-items-center pl-flex-1 ${!_chunk3Q5F32UVjs.ba.call(void 0, "hasQuizParams")&&(_chunk3Q5F32UVjs.ba.call(void 0, "isComplexPortrait")?"pl-h-auto":"pl-h-full")}`,style:{width:"100%",opacity:_chunk3Q5F32UVjs.ba.call(void 0, "isFirstPlay")?0:1,height:_chunk3Q5F32UVjs.ba.call(void 0, "hasQuizParams")?"100vh":"100%",maxWidth:s.width?s.width:"100%",maxHeight:s.width?s.width<s.height?s.width*9/16:s.width*16/9:"100%"},autoPlay:_chunk3Q5F32UVjs.ba.call(void 0, "hasAutoPlay")||_chunk3Q5F32UVjs.ba.call(void 0, "isRaw")}))},on= exports.default =we;exports.default = on;
2
+ //# sourceMappingURL=nonStaticVideoTag-GRFP3ZOG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/videoPlayerLibrary/components/custom-components/videoTag/nonStaticVideoTag.tsx","../src/videoPlayerLibrary/helpers/hooks/useContinuousPlaybackInterval.tsx","../src/videoPlayerLibrary/helpers/hooks/usePingPong.tsx","../src/videoPlayerLibrary/helpers/hooks/useBeforeUnload.tsx"],"names":["init_cjs_shims","Hls","useEffect","useState","useRef","useLayoutEffect","shallowEqual","useContinuousPlaybackInterval","interval","isEnded","useAppSelector","handleContinuousPlayback","continuousePlaybackIntervalTime","conditions","useContinuousPlaybackInterval_default","usePingPong","qualityLevel","qualityHistory","setQualityHistory","startTimer","setStartTimer","qualityLevels","newQualityArray","sendFluentLog","autoQualityChangeLog","pingpongLog","usePingPong_default","Image","useBeforeUnload","handleBeforeUnload","useBeforeUnload_default","NonStaticVideoTag","setQualityLevel","dispatch","useAppDispatch","params","details","videoElementSizeInfo","isComplexPortrait","subtitles","currentTime","duration","firstPlay","showMiniPlayer","timerRef","waitingDurationRef","waitingTimerRef","initialWaitingDurationRef","bannerLoadingDurationRef","loadingDurationRef","loadingCounterRef","videoEntranceTimeRef","videoTag","hls","handleHlsConfig","handlePageLoadTime","handleMediaAttached","handleFragBuffered","handleFragLoading","event","data","handleFragChanged","handleFragParsed","handleVideoWaiting","handleVideoSeeking","handleVideoPlay","handleVideoPlaying","handleVideoPause","handleVideoTimeUpdate","handleVideoCanPlay","handleVideoEnded","handleVideoVisibilityChange","handleIosVideoPlay","handleIosVideoPlaying","handleIosVideoTimeUpdate","handleIosVideoEnded","appendQueryParamsToChunksIOS","handleHlsErrors","handleManifestParsed","handleManifestLoaded","setIsEnded","nonStaticVideoTag_default"],"mappings":"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","sourcesContent":["\"use client\";\r\n\r\nimport Hls from \"hls.js\";\r\nimport { useEffect, useState, useRef, useLayoutEffect } from \"react\";\r\nimport { shallowEqual } from \"react-redux\";\r\nimport { useAppDispatch, useAppSelector } from \"../../../helpers/redux/hooks\";\r\nimport { videoTag } from \"../../../helpers/constants\";\r\nimport useContinuousPlaybackInterval from \"../../../helpers/hooks/useContinuousPlaybackInterval\";\r\nimport { handlePageLoadTime } from \"../../../helpers/helpers\";\r\nimport { appendQueryParamsToChunksIOS, handleFragBuffered, handleFragChanged, handleFragLoading, handleFragParsed, handleHlsConfig, handleHlsErrors, handleIosVideoEnded, handleIosVideoPlay, handleIosVideoPlaying, handleIosVideoTimeUpdate, handleManifestLoaded, handleManifestParsed, handleMediaAttached, handleVideoCanPlay, handleVideoEnded, handleVideoPause, handleVideoPlay, handleVideoPlaying, handleVideoSeeking, handleVideoTimeUpdate, handleVideoVisibilityChange, handleVideoWaiting } from \"../../../helpers/redux/actions/playerCore.actions\";\r\nimport { ConditionName } from \"../../../helpers/interfaces/enums\";\r\nimport { conditions } from \"../../../helpers/conditions/conditions\";\r\nimport { setIsEnded } from \"../../../helpers/redux/slices/controllerSlice\";\r\nimport usePingPong from \"../../../helpers/hooks/usePingPong\";\r\nimport Image from \"next/legacy/image\";\r\nimport useBeforeUnload from \"../../../helpers/hooks/useBeforeUnload\";\r\n\r\nconst NonStaticVideoTag = () => {\r\n const [qualityLevel, setQualityLevel] = useState<number | undefined>(undefined);\r\n\r\n const dispatch = useAppDispatch();\r\n const { params, details, videoElementSizeInfo } = useAppSelector(\r\n ({ videoData: { params, details, videoElementSizeInfo, isComplexPortrait, subtitles } }) => ({\r\n params,\r\n details,\r\n videoElementSizeInfo,\r\n isComplexPortrait,\r\n subtitles\r\n }),\r\n shallowEqual\r\n );\r\n const { currentTime, duration } = useAppSelector(\r\n ({ controller: { currentTime, duration, isEnded, firstPlay, showMiniPlayer } }) => ({\r\n currentTime,\r\n duration,\r\n isEnded,\r\n firstPlay,\r\n showMiniPlayer\r\n }),\r\n shallowEqual\r\n );\r\n const timerRef = useRef<any>(null);\r\n const waitingDurationRef = useRef<any>(0);\r\n const waitingTimerRef = useRef<number>(0);\r\n const initialWaitingDurationRef = useRef<any>(0);\r\n const bannerLoadingDurationRef = useRef<any>(0);\r\n const loadingDurationRef = useRef<any>(0);\r\n const loadingCounterRef = useRef<any>(1);\r\n const videoEntranceTimeRef = useRef<any>(videoTag() ? videoTag().currentTime : 0);\r\n\r\n useContinuousPlaybackInterval();\r\n useBeforeUnload();\r\n\r\n useLayoutEffect(() => {\r\n let hls = new Hls(handleHlsConfig());\r\n\r\n // ---- Page Load Time ----\r\n handlePageLoadTime(loadingDurationRef);\r\n\r\n initialWaitingDurationRef.current = Date.now();\r\n\r\n if (Hls.isSupported()) {\r\n hls.attachMedia(videoTag() as HTMLMediaElement);\r\n hls.on(Hls.Events.MEDIA_ATTACHED, () => handleMediaAttached(Hls, hls));\r\n hls.on(Hls.Events.FRAG_BUFFERED, () => handleFragBuffered(hls));\r\n hls.on(Hls.Events.FRAG_LOADING, () => handleFragLoading(hls));\r\n hls.on(Hls.Events.FRAG_CHANGED, (event: any, data: any) => handleFragChanged(Hls, hls, data, setQualityLevel));\r\n hls.on(Hls.Events.FRAG_PARSED, (event: any, data: any) => handleFragParsed(hls, data, setQualityLevel));\r\n // hls.on(Hls.Events.ERROR, (event: any, data: any) => errorLogProvider(handleHlsErrors(Hls, data)));\r\n\r\n videoTag().addEventListener(\"waiting\", (event: any) => handleVideoWaiting(event, waitingTimerRef));\r\n videoTag().addEventListener(\"seeking\", (event: any) => handleVideoSeeking(event, waitingTimerRef));\r\n videoTag().addEventListener(\"play\", (event: any) => handleVideoPlay(event, timerRef));\r\n videoTag().addEventListener(\"playing\", () =>\r\n handleVideoPlaying(\r\n loadingCounterRef,\r\n loadingDurationRef,\r\n initialWaitingDurationRef,\r\n bannerLoadingDurationRef,\r\n timerRef,\r\n waitingDurationRef,\r\n waitingTimerRef,\r\n videoEntranceTimeRef\r\n )\r\n );\r\n videoTag().addEventListener(\"pause\", handleVideoPause);\r\n videoTag().addEventListener(\"timeupdate\", handleVideoTimeUpdate);\r\n videoTag().addEventListener(\"canplay\", handleVideoCanPlay);\r\n videoTag().addEventListener(\"ended\", handleVideoEnded);\r\n // videoTag().addEventListener(\"error\", handleVideoError);\r\n\r\n document.addEventListener(\"visibilitychange\", () => handleVideoVisibilityChange(hls));\r\n } else if (videoTag().canPlayType(\"application/vnd.apple.mpegurl\")) {\r\n videoTag().src = details.stream_link;\r\n\r\n videoTag().addEventListener(\"waiting\", (event: any) => handleVideoWaiting(event, waitingTimerRef));\r\n videoTag().addEventListener(\"play\", (event: any) => handleIosVideoPlay(event, timerRef));\r\n videoTag().addEventListener(\"playing\", handleIosVideoPlaying);\r\n videoTag().addEventListener(\"canplay\", handleVideoCanPlay);\r\n videoTag().addEventListener(\"timeupdate\", handleIosVideoTimeUpdate);\r\n videoTag().addEventListener(\"ended\", handleIosVideoEnded);\r\n videoTag().addEventListener(\"ended\", handleVideoEnded);\r\n // videoTag().addEventListener(\"error\", handleVideoError);\r\n // Append Query Parameter to .ts Chunks\r\n appendQueryParamsToChunksIOS();\r\n }\r\n\r\n return () => {\r\n hls.detachMedia();\r\n hls.off(Hls.Events.MEDIA_ATTACHED, () => handleMediaAttached(Hls, hls));\r\n hls.off(Hls.Events.FRAG_BUFFERED, () => handleFragBuffered(hls));\r\n hls.off(Hls.Events.FRAG_LOADING, () => handleFragLoading(hls));\r\n hls.off(Hls.Events.FRAG_CHANGED, (event: any, data: any) => handleFragChanged(Hls, hls, data, setQualityLevel));\r\n hls.off(Hls.Events.FRAG_PARSED, (event: any, data: any) => handleFragParsed(hls, data, setQualityLevel));\r\n hls.off(Hls.Events.ERROR, (event: any, data: any) => handleHlsErrors(Hls, data));\r\n hls.off(Hls.Events.MANIFEST_PARSED, (event: any, data: any) => handleManifestParsed(hls, data));\r\n hls.off(Hls.Events.MANIFEST_LOADED, () => handleManifestLoaded(hls));\r\n document.removeEventListener(\"visibilitychange\", () => handleVideoVisibilityChange(hls));\r\n };\r\n }, [details.stream_link]);\r\n\r\n useEffect(() => {\r\n if (currentTime < duration && conditions(ConditionName.isEnded)) {\r\n dispatch(setIsEnded(false));\r\n }\r\n }, [currentTime]);\r\n\r\n usePingPong(qualityLevel);\r\n\r\n return (\r\n <>\r\n {conditions(ConditionName.showBanner) && (\r\n <Image\r\n src={details.banner}\r\n width={0}\r\n height={0}\r\n className=\"pl-hidden\"\r\n onLoad={() => (bannerLoadingDurationRef.current = Date.now())}\r\n alt={details.title ?? params.id!}\r\n />\r\n )}\r\n\r\n <video\r\n preload=\"metadata\"\r\n crossOrigin=\"anonymous\"\r\n id=\"player-tag\"\r\n playsInline\r\n muted={conditions(ConditionName.isRaw)}\r\n className={`pl-items-center pl-flex-1 ${\r\n !conditions(ConditionName.hasQuizParams) && (conditions(ConditionName.isComplexPortrait) ? \"pl-h-auto\" : \"pl-h-full\")\r\n }`}\r\n style={{\r\n width: \"100%\",\r\n opacity: conditions(ConditionName.isFirstPlay) ? 0 : 1,\r\n height: conditions(ConditionName.hasQuizParams) ? \"100vh\" : \"100%\",\r\n maxWidth: videoElementSizeInfo.width ? videoElementSizeInfo.width : \"100%\",\r\n maxHeight: videoElementSizeInfo.width\r\n ? videoElementSizeInfo.width < videoElementSizeInfo.height\r\n ? (videoElementSizeInfo.width * 9) / 16\r\n : (videoElementSizeInfo.width * 16) / 9\r\n : \"100%\"\r\n }}\r\n autoPlay={conditions(ConditionName.hasAutoPlay) || conditions(ConditionName.isRaw)}\r\n >\r\n </video>\r\n </>\r\n );\r\n};\r\n\r\nexport default NonStaticVideoTag;\r\n","import { useEffect } from \"react\";\r\nimport { shallowEqual } from \"react-redux\";\r\nimport { useAppSelector } from \"../redux/hooks\";\r\nimport { continuousePlaybackIntervalTime } from \"../environment\";\r\nimport { ConditionName } from \"../interfaces/enums\";\r\nimport { conditions } from \"../conditions/conditions\";\r\nimport { handleContinuousPlayback } from \"../redux/actions/user.actions\";\r\n\r\nconst useContinuousPlaybackInterval = () => {\r\n let interval: any = null;\r\n\r\n const { isEnded } = useAppSelector(({ controller: { isEnded } }) => ({ isEnded }), shallowEqual);\r\n\r\n useEffect(() => {\r\n interval = setInterval(() => handleContinuousPlayback(), continuousePlaybackIntervalTime);\r\n return () => clearInterval(interval);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (conditions(ConditionName.isEnded)) clearInterval(interval);\r\n }, [isEnded]);\r\n};\r\n\r\nexport default useContinuousPlaybackInterval;\r\n","import { useEffect, useState } from \"react\";\r\nimport { shallowEqual } from \"react-redux\";\r\nimport { useAppSelector } from \"../redux/hooks\";\r\nimport { sendFluentLog } from \"../logs/fluentdLogger\";\r\nimport { autoQualityChangeLog, pingpongLog } from \"../logs/logs\";\r\n\r\nconst usePingPong = (qualityLevel?: number) => {\r\n const [qualityHistory, setQualityHistory] = useState<number[]>([]);\r\n const [startTimer, setStartTimer] = useState<number>(0);\r\n\r\n const { qualityLevels } = useAppSelector(({ controller: { qualityLevels } }) => ({ qualityLevels }), shallowEqual);\r\n\r\n useEffect(() => {\r\n if (qualityLevel) {\r\n let newQualityArray: number[] = [];\r\n switch (qualityHistory.length) {\r\n case 0:\r\n newQualityArray = [qualityLevel];\r\n break;\r\n case 1:\r\n newQualityArray = [qualityLevel, ...qualityHistory];\r\n break;\r\n case 2:\r\n newQualityArray = [qualityLevel, ...qualityHistory];\r\n sendFluentLog(\r\n autoQualityChangeLog(\r\n `${newQualityArray[0]}P`,\r\n `${newQualityArray[1]}P`,\r\n qualityLevels.indexOf(newQualityArray[0]) - qualityLevels.indexOf(newQualityArray[1])\r\n )\r\n );\r\n break;\r\n default:\r\n newQualityArray = [qualityLevel, qualityHistory[0], qualityHistory[1]];\r\n if (newQualityArray[1] !== newQualityArray[2])\r\n sendFluentLog(\r\n autoQualityChangeLog(\r\n `${newQualityArray[1]}P`,\r\n `${newQualityArray[2]}P`,\r\n qualityLevels.indexOf(newQualityArray[1]) - qualityLevels.indexOf(newQualityArray[2])\r\n )\r\n );\r\n break;\r\n }\r\n setQualityHistory(newQualityArray);\r\n }\r\n }, [qualityLevel]);\r\n\r\n useEffect(() => {\r\n if (qualityHistory.length === 3 && qualityHistory[0] === qualityHistory[2]) {\r\n sendFluentLog(pingpongLog(startTimer, qualityHistory));\r\n setQualityHistory([]);\r\n setStartTimer(0);\r\n } else {\r\n setStartTimer(new Date().getTime());\r\n }\r\n }, [qualityHistory]);\r\n};\r\nexport default usePingPong;\r\n","import { useEffect } from \"react\";\r\nimport { handleContinuousPlayback } from \"../redux/actions/user.actions\";\r\n\r\nconst useBeforeUnload = () => {\r\n useEffect(() => {\r\n const handleBeforeUnload = () => {\r\n handleContinuousPlayback();\r\n };\r\n\r\n window.addEventListener(\"beforeunload\", handleBeforeUnload);\r\n return () => window.removeEventListener(\"beforeunload\", handleBeforeUnload);\r\n }, []);\r\n};\r\n\r\nexport default useBeforeUnload;\r\n"]}