{"version":3,"file":"VideoPlayer.XPFS_oAB.mjs","names":["isChrome"],"sources":["https:/framerusercontent.com/modules/6K7pAANXpIOXVbostVpm/3ZUaRACVIveuA78E4zxl/VideoPlayer.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{useRef,useEffect,useState,startTransition}from\"react\";import{addPropertyControls,ControlType,useInView}from\"framer\";/**\n * Responsive Video Player\n * \n * A component that plays videos when they enter the viewport, supporting both Safari and Chrome.\n * Plays when in view, pauses after a configurable delay, and automatically resumes when a specified\n * section reaches a certain position in the viewport.\n * \n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight any\n */export default function VideoPlayer(props){const{safariVideo=\"https://framerusercontent.com/assets/MLWPbW1dUQawJLhhun3dBwpgJak.mp4\",chromeVideo=\"https://framerusercontent.com/assets/MLWPbW1dUQawJLhhun3dBwpgJak.webm\",pauseDelay=2,resumeTriggerSection=\"\",resumeTriggerPosition=80,poster,style}=props;const videoRef=useRef(null);const containerRef=useRef(null);const pauseTimerRef=useRef(null);const resumeTimerRef=useRef(null);const[isChrome,setIsChrome]=useState(false);const[playbackState,setPlaybackState]=useState(\"idle\")// idle, playing, paused\n;const[videoLoaded,setVideoLoaded]=useState(false);const[triggerElement,setTriggerElement]=useState(null);// Standard in-view detection for the video\nconst inView=useInView(containerRef,{once:false,margin:\"-1px\"});// State to track if the section has reached the threshold\nconst[sectionReachedThreshold,setSectionReachedThreshold]=useState(false);// Detect browser and platform\nuseEffect(()=>{if(typeof window!==\"undefined\"){// Check if we're on Windows\nconst isWindows=/Windows/.test(navigator.userAgent);// Check if we're on Edge or Chrome\nconst isEdge=/Edg/.test(navigator.userAgent);const isChromeBrowser=/Chrome/.test(navigator.userAgent)&&!isEdge;// For Chrome on Windows or Edge, use Safari video (.mov with HEVC alpha)\n// as these browsers have issues with WebM alpha transparency\nconst shouldUseSafariVideo=isChromeBrowser&&isWindows||isEdge;// For all other browsers, use WebM as the primary source\nstartTransition(()=>setIsChrome(!shouldUseSafariVideo));// Check if we're on a mobile device\nconst isMobile=/iPhone|iPad|iPod|Android|webOS|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);if(isMobile&&poster){// Always use poster fallback on mobile devices\nstartTransition(()=>setUsePosterFallback(true));}}},[poster]);// Monitor the video element's position relative to viewport\nuseEffect(()=>{if(typeof window===\"undefined\"||!containerRef.current)return;// Function to check if the video element is about to exit the viewport\nconst checkVideoPosition=()=>{if(!containerRef.current)return;// First try to find the target section if specified\nlet targetElement=null;if(resumeTriggerSection&&resumeTriggerSection.trim()!==\"\"){// Try to find by ID first\ntargetElement=document.getElementById(resumeTriggerSection);// If not found by ID, try to find by data-framer-name attribute (Framer sections)\nif(!targetElement){targetElement=document.querySelector(`[data-framer-name=\"${resumeTriggerSection}\"]`);}// If still not found, try to find by class name\nif(!targetElement){targetElement=document.querySelector(`.${resumeTriggerSection}`);}}// If no target section found or not specified, use the video container itself\nconst elementToCheck=targetElement||containerRef.current;const rect=elementToCheck.getBoundingClientRect();const viewportHeight=window.innerHeight;const bottomPercentage=rect.bottom/viewportHeight*100;// If the bottom of the element is at or below the specified percentage of viewport height\nif(bottomPercentage<=resumeTriggerPosition){startTransition(()=>setSectionReachedThreshold(true));}else{startTransition(()=>setSectionReachedThreshold(false));}};// Add scroll event listener\nwindow.addEventListener(\"scroll\",checkVideoPosition,{passive:true});// Initial check\ncheckVideoPosition();// Clean up\nreturn()=>{window.removeEventListener(\"scroll\",checkVideoPosition);};},[resumeTriggerPosition,resumeTriggerSection]);// Clear timers on unmount\nuseEffect(()=>{return()=>{if(pauseTimerRef.current){clearTimeout(pauseTimerRef.current);}if(resumeTimerRef.current){clearTimeout(resumeTimerRef.current);}};},[]);// Handle video loaded event\nconst handleVideoLoaded=()=>{startTransition(()=>setVideoLoaded(true));// Check if the video has transparency issues (mainly for Chrome on Windows/Linux)\nif(typeof window!==\"undefined\"){const isWindows=/Windows/.test(navigator.userAgent);const isLinux=/Linux/.test(navigator.userAgent);const isChrome=/Chrome/.test(navigator.userAgent)&&!/Edg/.test(navigator.userAgent);// If we're on Chrome for Windows or Linux, we might have transparency issues\nif(isChrome&&(isWindows||isLinux)&&poster){// We'll show the poster as a fallback for these platforms\nstartTransition(()=>setUsePosterFallback(true));}else{startTransition(()=>setUsePosterFallback(false));}}};// Handle video error - switch to alternative format\nconst handleVideoError=()=>{if(typeof window!==\"undefined\"){// If current format fails, try the other format\nstartTransition(()=>setIsChrome(!isChrome));// Reset video loaded state\nstartTransition(()=>setVideoLoaded(false));}};// Resume video function (to avoid code duplication)\nconst resumeVideo=()=>{if(!videoRef.current||playbackState!==\"paused\")return;// Clear any existing resume timer\nif(resumeTimerRef.current){clearTimeout(resumeTimerRef.current);resumeTimerRef.current=null;}const resumePromise=videoRef.current.play();if(resumePromise!==undefined){resumePromise.then(()=>{startTransition(()=>setPlaybackState(\"playing\"));// Set up the next pause\npauseTimerRef.current=setTimeout(()=>{if(videoRef.current&&inView){videoRef.current.pause();startTransition(()=>setPlaybackState(\"paused\"));}},pauseDelay*1e3);}).catch(error=>{console.error(\"Resume playback failed:\",error);});}};// Handle main playback logic based on viewport visibility\nuseEffect(()=>{if(!videoRef.current||!videoLoaded)return;// When video enters viewport\nif(inView){if(playbackState===\"idle\"){// Reset video to beginning if it was idle\nvideoRef.current.currentTime=0;// Clear any existing timers\nif(pauseTimerRef.current){clearTimeout(pauseTimerRef.current);pauseTimerRef.current=null;}if(resumeTimerRef.current){clearTimeout(resumeTimerRef.current);resumeTimerRef.current=null;}// Start playing the video\nconst playPromise=videoRef.current.play();if(playPromise!==undefined){playPromise.then(()=>{startTransition(()=>setPlaybackState(\"playing\"));// Set timer to pause video after delay\npauseTimerRef.current=setTimeout(()=>{if(videoRef.current&&inView){videoRef.current.pause();startTransition(()=>setPlaybackState(\"paused\"));}},pauseDelay*1e3);}).catch(error=>{console.error(\"Initial playback failed:\",error);});}}}else{// When video leaves viewport, reset to idle state and clear all timers\nif(pauseTimerRef.current){clearTimeout(pauseTimerRef.current);pauseTimerRef.current=null;}if(resumeTimerRef.current){clearTimeout(resumeTimerRef.current);resumeTimerRef.current=null;}// Reset to idle state when out of view\nif(playbackState!==\"idle\"){if(videoRef.current){videoRef.current.pause();}startTransition(()=>setPlaybackState(\"idle\"));}}},[inView,playbackState,pauseDelay,videoLoaded]);// Handle resume when trigger section reaches the specified position\nuseEffect(()=>{if(!videoRef.current||!videoLoaded)return;// If video is paused and section has reached the threshold, resume it\nif(sectionReachedThreshold&&playbackState===\"paused\"&&inView){resumeVideo();}},[sectionReachedThreshold,playbackState,videoLoaded,inView]);// Canvas-based rendering for Chrome on Windows\nconst canvasRef=useRef(null);const[useCanvas,setUseCanvas]=useState(false);const[usePosterFallback,setUsePosterFallback]=useState(false);// Detect if we should use canvas rendering (Chrome on Windows)\nuseEffect(()=>{if(typeof window!==\"undefined\"){const isWindows=/Windows/.test(navigator.userAgent);const isChrome=/Chrome/.test(navigator.userAgent)&&!/Edg/.test(navigator.userAgent);startTransition(()=>setUseCanvas(isChrome&&isWindows));}},[]);// Canvas rendering logic\nuseEffect(()=>{if(!useCanvas||!videoRef.current||!canvasRef.current||!videoLoaded)return;const video=videoRef.current;const canvas=canvasRef.current;const ctx=canvas.getContext(\"2d\",{alpha:true});// Set canvas dimensions to match video\nconst updateCanvasSize=()=>{if(!canvas||!video)return;const container=containerRef.current;if(container){canvas.width=container.clientWidth;canvas.height=container.clientHeight;}};// Initial size setup\nupdateCanvasSize();// Update size on window resize\nwindow.addEventListener(\"resize\",updateCanvasSize);// Function to render video frame to canvas\nlet animationFrame;const renderFrame=()=>{if(!video||!canvas||!ctx)return;// Clear canvas with transparency\nctx.clearRect(0,0,canvas.width,canvas.height);// Only draw if video is playing\nif(!video.paused&&!video.ended&&video.readyState>=2){// Calculate aspect ratio scaling to cover the canvas\nconst videoRatio=video.videoWidth/video.videoHeight;const canvasRatio=canvas.width/canvas.height;let drawWidth,drawHeight,offsetX=0,offsetY=0;if(videoRatio>canvasRatio){// Video is wider than canvas\ndrawHeight=canvas.height;drawWidth=video.videoWidth*(canvas.height/video.videoHeight);offsetX=(canvas.width-drawWidth)/2;}else{// Video is taller than canvas\ndrawWidth=canvas.width;drawHeight=video.videoHeight*(canvas.width/video.videoWidth);offsetY=(canvas.height-drawHeight)/2;}// Draw video frame to canvas with proper scaling\nctx.drawImage(video,offsetX,offsetY,drawWidth,drawHeight);}// Continue animation loop\nanimationFrame=requestAnimationFrame(renderFrame);};// Start rendering\nrenderFrame();// Clean up\nreturn()=>{cancelAnimationFrame(animationFrame);window.removeEventListener(\"resize\",updateCanvasSize);};},[useCanvas,videoLoaded]);return /*#__PURE__*/_jsx(\"div\",{ref:containerRef,style:{position:\"relative\",width:\"100%\",height:\"100%\",overflow:\"visible\",backgroundColor:\"transparent\",isolation:\"isolate\",display:\"flex\",alignItems:\"center\",justifyContent:\"center\",...style},children:/*#__PURE__*/_jsxs(\"div\",{style:{position:\"absolute\",top:0,left:0,width:\"100%\",height:\"100%\",overflow:\"visible\",backgroundColor:\"transparent\",isolation:\"isolate\",mixBlendMode:\"normal\"},children:[usePosterFallback&&poster&&/*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",top:0,left:0,width:\"100%\",height:\"100%\",display:\"flex\",alignItems:\"center\",justifyContent:\"center\",backgroundColor:\"transparent\",zIndex:2},children:/*#__PURE__*/_jsx(\"img\",{src:poster,alt:\"Video poster\",style:{width:\"100%\",height:\"100%\",objectFit:\"cover\",objectPosition:\"center\",display:\"block\",backgroundColor:\"transparent\"}})}),useCanvas&&!usePosterFallback&&/*#__PURE__*/_jsx(\"canvas\",{ref:canvasRef,style:{position:\"absolute\",top:0,left:0,width:\"100%\",height:\"100%\",display:videoLoaded?\"block\":\"none\",backgroundColor:\"transparent\",willChange:\"transform, opacity\",zIndex:1}}),/*#__PURE__*/_jsxs(\"video\",{ref:videoRef,style:{width:\"100%\",height:\"100%\",objectFit:\"cover\",objectPosition:\"center\",display:usePosterFallback?\"none\":useCanvas?\"none\":videoLoaded?\"block\":\"none\",overflow:\"visible\",backgroundColor:\"transparent\",WebkitBackgroundClip:\"text\",willChange:\"transform, opacity\",zIndex:0},playsInline:true,muted:true,preload:\"auto\",disablePictureInPicture:true,disableRemotePlayback:true,poster:props.poster,onLoadedData:handleVideoLoaded,onError:handleVideoError,children:[/*#__PURE__*/_jsx(\"source\",{src:isChrome?chromeVideo:safariVideo,type:isChrome?\"video/webm\":\"video/mp4\"}),/*#__PURE__*/_jsx(\"source\",{src:isChrome?safariVideo:chromeVideo,type:isChrome?\"video/mp4\":\"video/webm\"})]})]})});}addPropertyControls(VideoPlayer,{safariVideo:{type:ControlType.File,title:\"Safari Video (.mp4/.mov)\",allowedFileTypes:[\"mp4\",\"mov\"]},chromeVideo:{type:ControlType.File,title:\"Chrome Video (.webm)\",allowedFileTypes:[\"webm\"]},poster:{type:ControlType.File,title:\"Poster Image (optional)\",allowedFileTypes:[\"jpg\",\"jpeg\",\"png\",\"webp\"],optional:true},pauseDelay:{type:ControlType.Number,title:\"Pause Delay (s)\",defaultValue:2,min:.5,max:10,step:.5,displayStepper:true},resumeTriggerSection:{type:ControlType.String,title:\"Target Section\",defaultValue:\"\",placeholder:\"Enter section name\"},resumeTriggerPosition:{type:ControlType.Number,title:\"Resume Threshold (%)\",defaultValue:80,min:0,max:100,step:5,displayStepper:true}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"VideoPlayer\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutWidth\":\"any\",\"framerSupportedLayoutHeight\":\"any\",\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./VideoPlayer.map"],"mappings":"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"}