{"version":3,"file":"ClickableVideo.Cdk477YS.mjs","names":["_Fragment","React.useRef","React.useState","React.useCallback"],"sources":["https:/framerusercontent.com/modules/ugL4iP2Dhlfk8gZqI1aC/9ihQaguAb0FzfCngUczO/ClickableVideo.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from\"react/jsx-runtime\";import*as React from\"react\";import{addPropertyControls,ControlType}from\"framer\";function AudioIcon({muted,size=16}){return /*#__PURE__*/_jsx(\"svg\",{width:size,height:size,viewBox:\"0 0 24 24\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",\"aria-hidden\":\"true\",style:{display:\"block\",flexShrink:0},children:muted?/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(\"path\",{d:\"M4 9.5V14.5H8L13 19V5L8 9.5H4Z\",fill:\"currentColor\"}),/*#__PURE__*/_jsx(\"path\",{d:\"M17 9L21 15\",stroke:\"currentColor\",strokeWidth:\"1.8\",strokeLinecap:\"round\"}),/*#__PURE__*/_jsx(\"path\",{d:\"M21 9L17 15\",stroke:\"currentColor\",strokeWidth:\"1.8\",strokeLinecap:\"round\"})]}):/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(\"path\",{d:\"M4 9.5V14.5H8L13 19V5L8 9.5H4Z\",fill:\"currentColor\"}),/*#__PURE__*/_jsx(\"path\",{d:\"M16 9C17.1 10.1 17.1 13.9 16 15\",stroke:\"currentColor\",strokeWidth:\"1.8\",strokeLinecap:\"round\"}),/*#__PURE__*/_jsx(\"path\",{d:\"M18.5 6.5C21.8 9.8 21.8 14.2 18.5 17.5\",stroke:\"currentColor\",strokeWidth:\"1.8\",strokeLinecap:\"round\"})]})});}export default function ClickableVideo(props){const{mediaType,videoSource,video,videoUrl,image,autoplay,loop,initiallyMuted,enableMuteToggle,audioButtonOffset,objectFit,borderRadius,style}=props;const videoRef=React.useRef(null);const containerRef=React.useRef(null);const[isMuted,setIsMuted]=React.useState(initiallyMuted);const[isHovering,setIsHovering]=React.useState(false);const[isMobile,setIsMobile]=React.useState(false);const[shouldLoadVideo,setShouldLoadVideo]=React.useState(false);const[audioButtonSize,setAudioButtonSize]=React.useState(30);const[cursorPosition,setCursorPosition]=React.useState({x:0,y:0});/*\n     * Tracks whether the video is currently\n     * inside the viewport.\n     */const isInViewportRef=React.useRef(false);/*\n     * Tracks whether the video was playing\n     * before it left the viewport.\n     */const wasPlayingBeforeExitRef=React.useRef(false);/*\n     * IMPORTANT:\n     *\n     * This stores the user's actual mute/unmute\n     * preference.\n     *\n     * If the user manually unmutes the video,\n     * this remains false even when the video is\n     * temporarily paused because it leaves the\n     * viewport.\n     */const userMutePreferenceRef=React.useRef(initiallyMuted);/*\n     * Safari autoplay retry timer.\n     */const playRetryTimerRef=React.useRef(null);/*\n     * Prevents unlimited retry attempts.\n     */const playRetryCountRef=React.useRef(0);const AUDIO_BUTTON_SIZE=30;const AUDIO_BUTTON_ICON_SIZE=13;const CURSOR_TEXT_SIZE=10;const CURSOR_PADDING_X=12;const CURSOR_PADDING_Y=7;const CURSOR_BORDER_WIDTH=1;const CURSOR_OFFSET_X=0;const CURSOR_OFFSET_Y=0;/*\n     * ---------------------------------------------------------\n     * CLEAR AUTOPLAY RETRY\n     * ---------------------------------------------------------\n     */const clearPlayRetry=React.useCallback(()=>{if(playRetryTimerRef.current!==null){window.clearTimeout(playRetryTimerRef.current);playRetryTimerRef.current=null;}},[]);/*\n     * ---------------------------------------------------------\n     * PLAY VIDEO\n     * ---------------------------------------------------------\n     *\n     * Important:\n     *\n     * Before every playback attempt we restore\n     * the user's previous mute/unmute preference.\n     *\n     * This fixes:\n     *\n     * Unmute\n     * ↓\n     * Scroll away\n     * ↓\n     * Video pauses\n     * ↓\n     * Scroll back\n     * ↓\n     * Video resumes WITH AUDIO\n     */const playVideo=React.useCallback(()=>{const element=videoRef.current;if(!element)return;if(!isInViewportRef.current){return;}if(!autoplay){return;}/*\n         * Do not attempt playback when the\n         * browser tab/page is hidden.\n         */if(typeof document!==\"undefined\"&&document.visibilityState!==\"visible\"){return;}/*\n         * Restore the user's last selected\n         * audio state BEFORE play().\n         */const preferredMutedState=userMutePreferenceRef.current;element.defaultMuted=preferredMutedState;element.muted=preferredMutedState;/*\n         * Keep React state synchronized.\n         */setIsMuted(preferredMutedState);/*\n         * Already playing.\n         */if(!element.paused){playRetryCountRef.current=0;clearPlayRetry();return;}const playPromise=element.play();if(playPromise!==undefined){playPromise.then(()=>{/*\n                     * Playback successfully\n                     * started.\n                     */playRetryCountRef.current=0;clearPlayRetry();}).catch(()=>{/*\n                     * Safari/browser may reject\n                     * the first autoplay attempt.\n                     *\n                     * Retry only while the video\n                     * is still visible.\n                     */if(!isInViewportRef.current||!element.paused||!autoplay){return;}/*\n                     * Maximum 8 retry attempts.\n                     */if(playRetryCountRef.current>=8){return;}playRetryCountRef.current+=1;clearPlayRetry();/*\n                     * Gradually increase delay\n                     * between attempts.\n                     */const retryDelay=Math.min(250*playRetryCountRef.current,1500);playRetryTimerRef.current=window.setTimeout(()=>{playVideo();},retryDelay);});}},[autoplay,clearPlayRetry]);/*\n     * ---------------------------------------------------------\n     * DEVICE DETECTION\n     * ---------------------------------------------------------\n     */React.useEffect(()=>{const updateDeviceType=()=>{const coarsePointer=window.matchMedia(\"(pointer: coarse)\").matches;setIsMobile(coarsePointer||window.innerWidth<=767);};updateDeviceType();window.addEventListener(\"resize\",updateDeviceType);return()=>{window.removeEventListener(\"resize\",updateDeviceType);};},[]);/*\n     * ---------------------------------------------------------\n     * AUDIO BUTTON SIZE\n     * ---------------------------------------------------------\n     */React.useEffect(()=>{const container=containerRef.current;if(!container)return;const updateAudioButtonSize=()=>{const rect=container.getBoundingClientRect();const width=rect.width;const height=rect.height;if(!Number.isFinite(width)||!Number.isFinite(height)||width<=0||height<=0){return;}const calculatedSize=width*.12;const finalSize=Math.max(20,Math.min(40,calculatedSize));setAudioButtonSize(finalSize);};updateAudioButtonSize();if(typeof ResizeObserver!==\"undefined\"){const observer=new ResizeObserver(updateAudioButtonSize);observer.observe(container);return()=>{observer.disconnect();};}window.addEventListener(\"resize\",updateAudioButtonSize);return()=>{window.removeEventListener(\"resize\",updateAudioButtonSize);};},[]);const resolvedVideo=videoSource===\"url\"?videoUrl:video;/*\n     * ---------------------------------------------------------\n     * VIEWPORT PLAYBACK\n     * ---------------------------------------------------------\n     *\n     * This intentionally preserves your\n     * existing functionality:\n     *\n     * ENTER VIEWPORT\n     *      ↓\n     * LOAD VIDEO\n     *      ↓\n     * AUTOPLAY\n     *\n     * LEAVE VIEWPORT\n     *      ↓\n     * PAUSE VIDEO\n     *\n     * RETURN TO VIEWPORT\n     *      ↓\n     * RESUME VIDEO\n     */React.useEffect(()=>{if(mediaType!==\"video\"||!resolvedVideo){return;}const container=containerRef.current;if(!container)return;/*\n         * Fallback for browsers without\n         * IntersectionObserver.\n         */if(typeof IntersectionObserver===\"undefined\"){isInViewportRef.current=true;setShouldLoadVideo(true);return;}const observer=new IntersectionObserver(entries=>{const entry=entries[0];if(!entry)return;const element=videoRef.current;/*\n                 * VIDEO ENTERED VIEWPORT\n                 */if(entry.isIntersecting){isInViewportRef.current=true;setShouldLoadVideo(true);/*\n                     * Reset retry counter\n                     * for this viewport entry.\n                     */playRetryCountRef.current=0;/*\n                     * Attempt to resume.\n                     *\n                     * playVideo() will restore\n                     * the user's mute preference.\n                     */if(element&&(autoplay||wasPlayingBeforeExitRef.current)){playVideo();}wasPlayingBeforeExitRef.current=false;}else{/*\n                     * VIDEO LEFT VIEWPORT\n                     */isInViewportRef.current=false;/*\n                     * Stop pending Safari\n                     * autoplay retries.\n                     */clearPlayRetry();playRetryCountRef.current=0;/*\n                     * Pause the video.\n                     *\n                     * IMPORTANT:\n                     *\n                     * We DO NOT change\n                     * element.muted here.\n                     *\n                     * This preserves the user's\n                     * audio preference.\n                     */if(element&&!element.paused){wasPlayingBeforeExitRef.current=true;element.pause();}}},{rootMargin:\"0px\",threshold:.01});observer.observe(container);return()=>{observer.disconnect();isInViewportRef.current=false;clearPlayRetry();const element=videoRef.current;if(element){element.pause();}};},[mediaType,resolvedVideo,autoplay,playVideo,clearPlayRetry]);/*\n     * ---------------------------------------------------------\n     * INITIALIZE VIDEO\n     * ---------------------------------------------------------\n     */React.useEffect(()=>{if(mediaType!==\"video\"){return;}if(!shouldLoadVideo){return;}if(!resolvedVideo){return;}const element=videoRef.current;if(!element)return;/*\n         * IMPORTANT:\n         *\n         * Use the user's saved preference,\n         * NOT initiallyMuted every time.\n         *\n         * This prevents Safari/React from\n         * resetting an already-unmuted video.\n         */const preferredMutedState=userMutePreferenceRef.current;element.defaultMuted=preferredMutedState;element.muted=preferredMutedState;setIsMuted(preferredMutedState);if(autoplay&&isInViewportRef.current){const startPlayback=()=>{if(!isInViewportRef.current){return;}playRetryCountRef.current=0;playVideo();};if(element.readyState>=1){requestAnimationFrame(startPlayback);}else{element.addEventListener(\"loadedmetadata\",startPlayback,{once:true});return()=>{element.removeEventListener(\"loadedmetadata\",startPlayback);};}}},[mediaType,resolvedVideo,autoplay,shouldLoadVideo,playVideo]);/*\n     * ---------------------------------------------------------\n     * MEDIA READY / SAFARI RECOVERY\n     * ---------------------------------------------------------\n     */React.useEffect(()=>{if(mediaType!==\"video\"){return;}if(!shouldLoadVideo){return;}if(!autoplay){return;}const element=videoRef.current;if(!element)return;/*\n         * Media is ready to play.\n         */const handleCanPlay=()=>{if(isInViewportRef.current&&element.paused){playRetryCountRef.current=0;playVideo();}};/*\n         * Media data is loaded.\n         */const handleLoadedData=()=>{if(isInViewportRef.current&&element.paused){playRetryCountRef.current=0;playVideo();}};/*\n         * Playback successfully started.\n         */const handlePlaying=()=>{playRetryCountRef.current=0;clearPlayRetry();};element.addEventListener(\"canplay\",handleCanPlay);element.addEventListener(\"loadeddata\",handleLoadedData);element.addEventListener(\"playing\",handlePlaying);return()=>{element.removeEventListener(\"canplay\",handleCanPlay);element.removeEventListener(\"loadeddata\",handleLoadedData);element.removeEventListener(\"playing\",handlePlaying);};},[mediaType,shouldLoadVideo,autoplay,playVideo,clearPlayRetry]);/*\n     * ---------------------------------------------------------\n     * PAGE VISIBILITY RECOVERY\n     * ---------------------------------------------------------\n     */React.useEffect(()=>{if(mediaType!==\"video\"){return;}if(!autoplay){return;}const handleVisibilityChange=()=>{/*\n             * Page became hidden.\n             */if(document.visibilityState!==\"visible\"){clearPlayRetry();return;}/*\n             * Page became visible again.\n             */const element=videoRef.current;if(element&&isInViewportRef.current&&element.paused){playRetryCountRef.current=0;requestAnimationFrame(()=>{playVideo();});}};const handlePageShow=()=>{const element=videoRef.current;if(element&&isInViewportRef.current&&element.paused){playRetryCountRef.current=0;requestAnimationFrame(()=>{playVideo();});}};document.addEventListener(\"visibilitychange\",handleVisibilityChange);window.addEventListener(\"pageshow\",handlePageShow);return()=>{document.removeEventListener(\"visibilitychange\",handleVisibilityChange);window.removeEventListener(\"pageshow\",handlePageShow);};},[mediaType,autoplay,playVideo,clearPlayRetry]);/*\n     * ---------------------------------------------------------\n     * CLEANUP\n     * ---------------------------------------------------------\n     */React.useEffect(()=>{return()=>{clearPlayRetry();};},[clearPlayRetry]);/*\n     * ---------------------------------------------------------\n     * MUTE / UNMUTE\n     * ---------------------------------------------------------\n     */const toggleMute=React.useCallback(()=>{if(mediaType!==\"video\"){return;}if(!enableMuteToggle){return;}const element=videoRef.current;if(!element)return;/*\n         * Determine the new state.\n         */const newMutedState=!element.muted;/*\n         * IMPORTANT:\n         *\n         * Save the user's choice.\n         *\n         * false = user wants audio\n         * true  = user wants muted\n         */userMutePreferenceRef.current=newMutedState;/*\n         * Apply the preference\n         * directly to the video.\n         */element.defaultMuted=newMutedState;element.muted=newMutedState;/*\n         * Keep React UI synchronized.\n         */setIsMuted(newMutedState);/*\n         * If the video is paused but\n         * still visible, attempt playback.\n         */if(element.paused&&isInViewportRef.current){const playPromise=element.play();if(playPromise!==undefined){playPromise.catch(()=>{});}}},[mediaType,enableMuteToggle]);/*\n     * ---------------------------------------------------------\n     * MOBILE MUTE BUTTON\n     * ---------------------------------------------------------\n     */const handleMobileMuteClick=event=>{event.preventDefault();event.stopPropagation();toggleMute();};/*\n     * ---------------------------------------------------------\n     * DESKTOP CURSOR\n     * ---------------------------------------------------------\n     */const handlePointerMove=event=>{if(event.pointerType!==\"mouse\"){return;}const container=containerRef.current;if(!container)return;const rect=container.getBoundingClientRect();setCursorPosition({x:event.clientX-rect.left,y:event.clientY-rect.top});};const handlePointerEnter=event=>{if(event.pointerType===\"mouse\"){setIsHovering(true);}};const handlePointerLeave=()=>{setIsHovering(false);};/*\n     * ---------------------------------------------------------\n     * RENDER\n     * ---------------------------------------------------------\n     */return /*#__PURE__*/_jsxs(\"div\",{ref:containerRef,onClick:toggleMute,onPointerMove:handlePointerMove,onPointerEnter:handlePointerEnter,onPointerLeave:handlePointerLeave,style:{...style,position:\"relative\",width:\"100%\",height:\"100%\",overflow:\"hidden\",borderRadius:`${borderRadius}px`,cursor:mediaType===\"video\"&&!isMobile?\"none\":\"default\",background:\"transparent\",touchAction:\"manipulation\",userSelect:\"none\",WebkitUserSelect:\"none\",boxSizing:\"border-box\"},children:[mediaType===\"video\"?resolvedVideo?/*#__PURE__*/_jsx(\"video\",{ref:videoRef,src:shouldLoadVideo?resolvedVideo:undefined,autoPlay:autoplay,muted:isMuted,defaultMuted:userMutePreferenceRef.current,loop:loop,playsInline:true,preload:\"metadata\",style:{width:\"100%\",height:\"100%\",display:\"block\",objectFit,objectPosition:\"top center\",pointerEvents:\"none\",background:\"transparent\"}}):/*#__PURE__*/_jsx(\"div\",{style:{width:\"100%\",height:\"100%\",display:\"flex\",alignItems:\"center\",justifyContent:\"center\",background:\"#F3F3F3\",color:\"#777777\",fontFamily:'\"Marcellus\", \"Marcellus Placeholder\", serif',fontSize:14,letterSpacing:\"0.01em\"},children:\"Select a video\"}):image?/*#__PURE__*/_jsx(\"img\",{src:image,alt:\"\",draggable:false,style:{width:\"100%\",height:\"100%\",display:\"block\",objectFit,objectPosition:\"center center\",pointerEvents:\"none\",background:\"transparent\"}}):/*#__PURE__*/_jsx(\"div\",{style:{width:\"100%\",height:\"100%\",display:\"flex\",alignItems:\"center\",justifyContent:\"center\",background:\"#F3F3F3\",color:\"#777777\",fontFamily:'\"Marcellus\", \"Marcellus Placeholder\", serif',fontSize:14,letterSpacing:\"0.01em\"},children:\"Select an image\"}),mediaType===\"video\"&&enableMuteToggle&&isMobile&&/*#__PURE__*/_jsx(\"button\",{type:\"button\",\"aria-label\":isMuted?\"Unmute video\":\"Mute video\",\"aria-pressed\":!isMuted,onClick:handleMobileMuteClick,style:{position:\"absolute\",top:audioButtonOffset,right:audioButtonOffset,width:40,height:40,display:\"flex\",alignItems:\"center\",justifyContent:\"center\",padding:0,border:0,borderRadius:\"999px\",background:\"transparent\",color:\"#FFFFFF\",cursor:\"pointer\",zIndex:30,appearance:\"none\",WebkitAppearance:\"none\",outline:\"none\",WebkitTapHighlightColor:\"transparent\",boxSizing:\"border-box\",userSelect:\"none\",WebkitUserSelect:\"none\"},children:/*#__PURE__*/_jsx(\"span\",{style:{width:audioButtonSize,height:audioButtonSize,display:\"flex\",alignItems:\"center\",justifyContent:\"center\",border:\"1px solid #526C85\",borderRadius:\"999px\",background:\"#526C85\",color:\"#FFFFFF\",boxShadow:\"0 4px 14px rgba(0,0,0,0.28)\",backdropFilter:\"blur(8px)\",WebkitBackdropFilter:\"blur(8px)\",boxSizing:\"border-box\"},children:/*#__PURE__*/_jsx(AudioIcon,{muted:isMuted,size:Math.max(10,Math.round(audioButtonSize/AUDIO_BUTTON_SIZE*AUDIO_BUTTON_ICON_SIZE))})})}),mediaType===\"video\"&&enableMuteToggle&&!isMobile&&/*#__PURE__*/_jsxs(\"div\",{style:{position:\"absolute\",left:cursorPosition.x+CURSOR_OFFSET_X,top:cursorPosition.y+CURSOR_OFFSET_Y,transform:isHovering?`translate(-50%, -50%) scale(${audioButtonSize/AUDIO_BUTTON_SIZE})`:`translate(-50%, -50%) scale(${audioButtonSize/AUDIO_BUTTON_SIZE*.94})`,opacity:isHovering?1:0,pointerEvents:\"none\",padding:`${CURSOR_PADDING_Y}px ${CURSOR_PADDING_X}px`,border:`${CURSOR_BORDER_WIDTH}px solid #526C85`,background:\"#526C85\",color:\"#FFFFFF\",fontSize:`${CURSOR_TEXT_SIZE}px`,fontFamily:'\"Marcellus\", \"Marcellus Placeholder\", serif',fontWeight:500,lineHeight:1,letterSpacing:\"0.04em\",whiteSpace:\"nowrap\",boxSizing:\"border-box\",borderRadius:\"999px\",display:\"flex\",alignItems:\"center\",justifyContent:\"center\",gap:8,backdropFilter:\"blur(10px)\",WebkitBackdropFilter:\"blur(10px)\",boxShadow:\"0 8px 26px rgba(0,0,0,0.30), inset 0 1px 0 rgba(255,255,255,0.10)\",transition:\"opacity 180ms ease, transform 180ms ease\",zIndex:20},children:[/*#__PURE__*/_jsx(AudioIcon,{muted:isMuted,size:14}),/*#__PURE__*/_jsx(\"span\",{style:{display:\"block\",fontFamily:'\"Marcellus\", \"Marcellus Placeholder\", serif',fontWeight:500,color:\"#FFFFFF\"},children:isMuted?\"UNMUTE\":\"MUTE\"})]})]});}ClickableVideo.defaultProps={mediaType:\"video\",videoSource:\"file\",video:\"\",videoUrl:\"\",image:\"\",autoplay:true,loop:true,initiallyMuted:true,enableMuteToggle:true,audioButtonOffset:6,objectFit:\"contain\",borderRadius:0};addPropertyControls(ClickableVideo,{mediaType:{type:ControlType.Enum,title:\"Media\",options:[\"video\",\"image\"],optionTitles:[\"Video\",\"Image\"],defaultValue:\"video\",displaySegmentedControl:true},videoSource:{type:ControlType.Enum,title:\"Video Source\",options:[\"file\",\"url\"],optionTitles:[\"File\",\"URL\"],defaultValue:\"file\",displaySegmentedControl:true,hidden:props=>props.mediaType!==\"video\"},video:{type:ControlType.File,title:\"Video\",allowedFileTypes:[\"mp4\",\"webm\",\"mov\"],hidden:props=>props.mediaType!==\"video\"||props.videoSource!==\"file\"},videoUrl:{type:ControlType.String,title:\"Video URL\",placeholder:\"https://example.com/video.m3u8\",hidden:props=>props.mediaType!==\"video\"||props.videoSource!==\"url\"},image:{type:ControlType.File,title:\"Image\",allowedFileTypes:[\"jpg\",\"jpeg\",\"png\",\"webp\",\"gif\",\"avif\"],hidden:props=>props.mediaType!==\"image\"},autoplay:{type:ControlType.Boolean,title:\"Autoplay\",defaultValue:true,enabledTitle:\"On\",disabledTitle:\"Off\",hidden:props=>props.mediaType!==\"video\"},loop:{type:ControlType.Boolean,title:\"Loop\",defaultValue:true,enabledTitle:\"On\",disabledTitle:\"Off\",hidden:props=>props.mediaType!==\"video\"},initiallyMuted:{type:ControlType.Boolean,title:\"Start Muted\",defaultValue:true,enabledTitle:\"Muted\",disabledTitle:\"Sound\",hidden:props=>props.mediaType!==\"video\"},enableMuteToggle:{type:ControlType.Boolean,title:\"Mute / Unmute\",defaultValue:true,enabledTitle:\"On\",disabledTitle:\"Off\",hidden:props=>props.mediaType!==\"video\"},audioButtonOffset:{type:ControlType.Number,title:\"Audio Offset\",min:-40,max:40,step:1,defaultValue:6,unit:\"px\"},objectFit:{type:ControlType.Enum,title:\"Media Fit\",options:[\"contain\",\"cover\"],optionTitles:[\"Contain\",\"Cover\"],defaultValue:\"contain\",displaySegmentedControl:true},borderRadius:{type:ControlType.Number,title:\"Border Radius\",min:0,max:200,step:1,defaultValue:0,unit:\"px\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"ClickableVideo\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./ClickableVideo.map"],"mappings":"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"}