{
  "version": 3,
  "sources": ["ssg:https://framerusercontent.com/modules/ECyvrKJQ9eSjAsvi1WyN/f7g7iJRC6FtGl16z5hgB/ScrollVideo.js"],
  "sourcesContent": ["import{jsx as _jsx}from\"react/jsx-runtime\";import{addPropertyControls,ControlType}from\"framer\";import{useEffect,useRef,useState}from\"react\";/**\n * @framerDisableUnlink\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight any\n */export default function ScrollVideo(props){const{safariVideo,otherVideo,startOffset=0,duration=1e3,style}=props;const containerRef=useRef(null);const videoRef=useRef(null);const lastProgressRef=useRef(0);const lastTimeRef=useRef(0);const[isReady,setIsReady]=useState(false);const[videoDuration,setVideoDuration]=useState(0);const[isSafari,setIsSafari]=useState(false);useEffect(()=>{if(typeof window!==\"undefined\"){setIsSafari(/^((?!chrome|android).)*safari/i.test(navigator.userAgent));}},[]);useEffect(()=>{if(!videoRef.current||!safariVideo&&!otherVideo)return;const video=videoRef.current;const videoSource=isSafari?safariVideo:otherVideo;if(videoSource){video.src=videoSource;video.preload=\"auto\";video.load();if(!isSafari){video.playbackRate=0;video.defaultPlaybackRate=0;}}const handleMetadata=()=>{setVideoDuration(video.duration);video.currentTime=0;setIsReady(true);};video.addEventListener(\"loadedmetadata\",handleMetadata);return()=>{video.removeEventListener(\"loadedmetadata\",handleMetadata);};},[safariVideo,otherVideo,isSafari]);useEffect(()=>{if(!isReady||!videoRef.current||typeof window===\"undefined\")return;let rafId=null;const minUpdateInterval=1e3/50;const updateVideo=progress=>{const video=videoRef.current;if(!video)return;const now=performance.now();const timeSinceLastUpdate=now-lastTimeRef.current;if(timeSinceLastUpdate>=minUpdateInterval){if(progress!==lastProgressRef.current){const targetTime=progress*videoDuration;video.currentTime=targetTime;lastProgressRef.current=progress;lastTimeRef.current=now;}}};const handleScroll=()=>{if(rafId)return;rafId=requestAnimationFrame(()=>{const element=containerRef.current;if(!element)return;const rect=element.getBoundingClientRect();const viewportHeight=window.innerHeight;const elementTop=rect.top;const elementHeight=rect.height;// Calculate progress based on element position in viewport\nlet progress;const offsetTop=viewportHeight*startOffset;if(elementTop>viewportHeight){progress=0;}else if(elementTop+elementHeight<0){progress=1;}else{progress=(offsetTop-elementTop)/duration;progress=Math.max(0,Math.min(1,progress));}updateVideo(progress);rafId=null;});};window.addEventListener(\"scroll\",handleScroll,{passive:true});handleScroll();return()=>{window.removeEventListener(\"scroll\",handleScroll);if(rafId){cancelAnimationFrame(rafId);}};},[isReady,startOffset,duration,videoDuration,isSafari]);return /*#__PURE__*/_jsx(\"div\",{ref:containerRef,style:{width:\"100%\",height:\"100%\",willChange:\"transform\",transform:\"translateZ(0)\",backfaceVisibility:\"hidden\",...style},children:/*#__PURE__*/_jsx(\"video\",{ref:videoRef,style:{width:\"100%\",height:\"100%\",objectFit:\"cover\",willChange:\"transform\",transform:\"translateZ(0)\",backfaceVisibility:\"hidden\"},playsInline:true,muted:true,preload:\"auto\"})});}addPropertyControls(ScrollVideo,{safariVideo:{type:ControlType.File,allowedFileTypes:[\"mov\",\"quicktime\"],title:\"Safari Video\"},otherVideo:{type:ControlType.File,allowedFileTypes:[\"webm\"],title:\"Other Browsers\"},startOffset:{type:ControlType.Number,min:0,max:1,step:.1,defaultValue:0,title:\"Start Offset\"},duration:{type:ControlType.Number,min:100,max:5e3,step:100,defaultValue:1e3,title:\"Animation Length\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"ScrollVideo\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerSupportedLayoutHeight\":\"any\",\"framerDisableUnlink\":\"* @framerSupportedLayoutWidth any\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./ScrollVideo.map"],
  "mappings": "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",
  "names": ["ScrollVideo", "props", "safariVideo", "otherVideo", "startOffset", "duration", "style", "containerRef", "pe", "videoRef", "lastProgressRef", "lastTimeRef", "isReady", "setIsReady", "ye", "videoDuration", "setVideoDuration", "isSafari", "setIsSafari", "ue", "window", "navigator", "video", "videoSource", "handleMetadata", "rafId", "minUpdateInterval", "updateVideo", "progress", "now", "targetTime", "handleScroll", "element", "rect", "viewportHeight", "elementTop", "elementHeight", "offsetTop", "p", "addPropertyControls", "ControlType"]
}
