{"version":3,"file":"CustomVideoPlayer.sXYlVytY.mjs","names":["useRef","useState"],"sources":["https:/framerusercontent.com/modules/ztqVIinvbsFPSHCxHWBb/ZzqWcTh9ykR2owpTLN2G/CustomVideoPlayer.js"],"sourcesContent":["// VideoPlayer.tsx\nimport{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{addPropertyControls,ControlType}from\"framer\";import{startTransition,useEffect,useRef,useState}from\"react\";const isSafari=()=>{if(typeof window===\"undefined\")return false;const ua=navigator.userAgent;const isWebKit=/WebKit/.test(ua)&&!/Chrome|CriOS|EdgiOS/.test(ua);const isIOS=/iPad|iPhone|iPod/.test(ua);return isWebKit||isIOS;};const resolveImage=img=>{if(!img)return\"\";if(typeof img===\"string\")return img;if(typeof img===\"object\"&&img.src)return img.src;return\"\";};// Pick URL if provided, otherwise fall back to uploaded file\nconst pickSource=(url,file)=>{const u=(url||\"\").trim();if(u)return u;return file||\"\";};/**\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight any\n */export default function VideoPlayer(props){const{webm,webmUrl,mp4,mp4Url,fallbackImage,fallbackImageUrl,poster,objectFit,borderRadius,muted,controls,preload,lazySourceLoading,threshold,pauseOffscreen}=props;const videoRef=useRef(null);const[useImage,setUseImage]=useState(false);const[shouldLoadSources,setShouldLoadSources]=useState(!lazySourceLoading);const previousSourceSignatureRef=useRef(null);const webmSrc=pickSource(webmUrl,webm);const mp4Src=pickSource(mp4Url,mp4);const imageSrc=pickSource(fallbackImageUrl,resolveImage(fallbackImage));useEffect(()=>{if(isSafari()&&!mp4Src&&imageSrc){startTransition(()=>setUseImage(true));}else{startTransition(()=>setUseImage(false));}},[mp4Src,imageSrc]);useEffect(()=>{if(useImage)return;if(!lazySourceLoading){startTransition(()=>setShouldLoadSources(true));return;}if(!(mp4Src||webmSrc)){startTransition(()=>setShouldLoadSources(false));return;}if(typeof window===\"undefined\")return;if(!(\"IntersectionObserver\"in window)){startTransition(()=>setShouldLoadSources(true));return;}const video=videoRef.current;if(!video)return;const observer=new IntersectionObserver(([entry])=>{if(entry.isIntersecting){startTransition(()=>setShouldLoadSources(true));observer.disconnect();}},{rootMargin:\"300px 0px\",threshold:0});observer.observe(video);return()=>observer.disconnect();},[lazySourceLoading,mp4Src,webmSrc,useImage]);useEffect(()=>{const video=videoRef.current;if(!video||useImage)return;video.muted=muted;},[webmSrc,mp4Src,muted,useImage,shouldLoadSources]);useEffect(()=>{const video=videoRef.current;if(!video||useImage||!shouldLoadSources)return;const tryPlay=()=>{const p=video.play();if(p!==undefined)p.catch(()=>{});};if(typeof window===\"undefined\")return;if(!(\"IntersectionObserver\"in window)){tryPlay();return;}const observer=new IntersectionObserver(([entry])=>{if(entry.isIntersecting)tryPlay();else if(pauseOffscreen)video.pause();},{threshold});observer.observe(video);return()=>observer.disconnect();},[threshold,pauseOffscreen,useImage,shouldLoadSources]);// Force <video> to reload when sources change at runtime\nuseEffect(()=>{const video=videoRef.current;if(!video||useImage||!shouldLoadSources)return;const signature=`${mp4Src}||${webmSrc}`;if(previousSourceSignatureRef.current===null){previousSourceSignatureRef.current=signature;return;}if(previousSourceSignatureRef.current===signature)return;previousSourceSignatureRef.current=signature;video.load();},[webmSrc,mp4Src,useImage,shouldLoadSources]);const sharedStyle={width:\"100%\",height:\"100%\",objectFit,borderRadius,display:\"block\"};if(useImage&&imageSrc){return /*#__PURE__*/_jsx(\"img\",{src:imageSrc,alt:\"\",style:sharedStyle,draggable:false});}return /*#__PURE__*/_jsxs(\"video\",{ref:videoRef,loop:true,muted:muted,playsInline:true,// @ts-ignore\n\"webkit-playsinline\":\"true\",disableRemotePlayback:true,preload:preload,controls:controls,poster:poster,style:sharedStyle,children:[shouldLoadSources&&mp4Src&&/*#__PURE__*/_jsx(\"source\",{src:mp4Src,type:'video/mp4; codecs=\"hvc1\"'}),shouldLoadSources&&webmSrc&&/*#__PURE__*/_jsx(\"source\",{src:webmSrc,type:\"video/webm\"})]});}VideoPlayer.displayName=\"assets-video-player\";VideoPlayer.defaultProps={muted:true,controls:false,preload:\"auto\",lazySourceLoading:false,objectFit:\"cover\",borderRadius:0,threshold:.25,pauseOffscreen:true};addPropertyControls(VideoPlayer,{webm:{type:ControlType.File,title:\"WebM\",allowedFileTypes:[\"webm\"]},webmUrl:{type:ControlType.String,title:\"WebM URL\",placeholder:\"https://…/video.webm\",description:\"Overrides the uploaded WebM if set.\"},mp4:{type:ControlType.File,title:\"MP4 / MOV\",allowedFileTypes:[\"mp4\",\"mov\"],description:\"Optional HEVC .mov for Safari with alpha.\"},mp4Url:{type:ControlType.String,title:\"MP4 URL\",placeholder:\"https://…/video.mp4\",description:\"Overrides the uploaded MP4/MOV if set.\"},fallbackImage:{type:ControlType.Image,title:\"Safari image\",description:\"Shown on Safari when no .mov is provided. Use a transparent PNG.\"},fallbackImageUrl:{type:ControlType.String,title:\"Image URL\",placeholder:\"https://…/image.png\",description:\"Overrides the uploaded Safari image if set.\"},poster:{type:ControlType.Image,title:\"Poster\"},muted:{type:ControlType.Boolean,title:\"Muted\",defaultValue:true},controls:{type:ControlType.Boolean,title:\"Controls\",defaultValue:false},preload:{type:ControlType.Enum,title:\"Preload\",options:[\"auto\",\"metadata\",\"none\"],optionTitles:[\"Auto\",\"Metadata\",\"None\"],defaultValue:\"auto\"},lazySourceLoading:{type:ControlType.Boolean,title:\"Lazy sources\",defaultValue:false},objectFit:{type:ControlType.Enum,title:\"Fit\",options:[\"cover\",\"contain\",\"fill\"],defaultValue:\"cover\"},borderRadius:{type:ControlType.Number,title:\"Radius\",min:0,max:200,defaultValue:0},threshold:{type:ControlType.Number,title:\"Visibility\",min:0,max:1,step:.05,defaultValue:.25},pauseOffscreen:{type:ControlType.Boolean,title:\"Pause offscreen\",defaultValue:true}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"VideoPlayer\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutHeight\":\"any\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutWidth\":\"any\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./CustomVideoPlayer.map"],"mappings":"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"}