{"version":3,"file":"BrowserVideoPlus.pNKohf-R.mjs","names":["React.useRef","React.useState","React.useCallback"],"sources":["https:/framerusercontent.com/modules/f3injejJy12YEwdbW6QK/ROVt0nvur5RJbtmtBO0p/BrowserVideoPlus.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import*as React from\"react\";import{addPropertyControls,ControlType}from\"framer\";// Choose the best playable source by capability (more robust than UA sniffing)\nfunction pickSource(webmUrl,hevcUrl){if(typeof document===\"undefined\")return{src:hevcUrl||webmUrl||\"\"};const v=document.createElement(\"video\");const hevcOK=!!hevcUrl&&v.canPlayType('video/mp4; codecs=\"hvc1\"')!==\"\";const webmOK=!!webmUrl&&(v.canPlayType('video/webm; codecs=\"vp9\"')!==\"\"||v.canPlayType(\"video/webm\")!==\"\");if(hevcOK)return{src:hevcUrl};if(webmOK)return{src:webmUrl};return{src:hevcUrl||webmUrl||\"\"};}export default function BrowserVideoPlus(props){const{webmUrl,hevcUrl,poster,fallbackImage,playing=true,loop=true,muted=true,controls=false,background=\"transparent\",fit=\"cover\",startTime=0,lazyLoad=true,pauseOffscreen=true,...rest}=props;const videoRef=React.useRef(null);const containerRef=React.useRef(null);const[{src},setSrc]=React.useState(()=>pickSource(webmUrl,hevcUrl));const[inView,setInView]=React.useState(!lazyLoad)// if not lazy, treat as in view\n;const[hasError,setHasError]=React.useState(false);const[metadataReady,setMetadataReady]=React.useState(false);// Intersection Observer (no exposed IO params; sensible defaults)\nReact.useEffect(()=>{if(!lazyLoad&&!pauseOffscreen)return;const el=containerRef.current;if(!el||typeof IntersectionObserver===\"undefined\")return;const io=new IntersectionObserver(entries=>setInView(entries[0]?.isIntersecting??true),{root:null,rootMargin:`200px`,threshold:.25});io.observe(el);return()=>io.disconnect();},[lazyLoad,pauseOffscreen]);// Lazy attach source when in view\nReact.useEffect(()=>{if(!inView&&lazyLoad)return;setSrc(pickSource(webmUrl,hevcUrl));},[inView,lazyLoad,webmUrl,hevcUrl]);// Play / pause logic\nReact.useEffect(()=>{const v=videoRef.current;if(!v)return;const shouldPlay=playing&&(!pauseOffscreen||inView);if(shouldPlay)v.play().catch(()=>{});else v.pause();},[playing,inView,pauseOffscreen]);// Start time after metadata\nReact.useEffect(()=>{const v=videoRef.current;if(!v||!metadataReady)return;const pct=Math.max(0,Math.min(100,startTime));try{if(Number.isFinite(v.duration)&&v.duration>0){v.currentTime=pct/100*v.duration;}}catch{}},[metadataReady,startTime]);const onLoadedMetadata=React.useCallback(()=>setMetadataReady(true),[]);const onError=React.useCallback(()=>setHasError(true),[]);// Pause when tab hidden\nReact.useEffect(()=>{const handler=()=>{const v=videoRef.current;if(!v)return;if(document.hidden)v.pause();else if(playing&&(!pauseOffscreen||inView))v.play().catch(()=>{});};document.addEventListener(\"visibilitychange\",handler);return()=>document.removeEventListener(\"visibilitychange\",handler);},[playing,pauseOffscreen,inView]);// Fallback image if error or no playable source\nif(hasError||!src){return /*#__PURE__*/_jsx(\"div\",{ref:containerRef,style:{width:\"100%\",height:\"100%\",background,overflow:\"hidden\"},children:fallbackImage?/*#__PURE__*/_jsx(\"img\",{src:fallbackImage,alt:\"video fallback\",style:{width:\"100%\",height:\"100%\",objectFit:fit},loading:\"lazy\"}):/*#__PURE__*/_jsx(\"div\",{style:{width:\"100%\",height:\"100%\",background}})});}return /*#__PURE__*/_jsx(\"div\",{ref:containerRef,style:{width:\"100%\",height:\"100%\",background,overflow:\"hidden\"},children:/*#__PURE__*/_jsx(\"video\",{ref:videoRef,src:inView||!lazyLoad?src:undefined,loop:loop,muted:muted,controls:controls,poster:poster,playsInline:true,preload:lazyLoad?\"metadata\":\"auto\",onLoadedMetadata:onLoadedMetadata,onError:onError,style:{width:\"100%\",height:\"100%\",objectFit:fit,background},...rest},src)});}addPropertyControls(BrowserVideoPlus,{webmUrl:{type:ControlType.String,title:\"WebM URL\"},hevcUrl:{type:ControlType.String,title:\"HEVC URL\"},poster:{type:ControlType.Image,title:\"Poster\"},fallbackImage:{type:ControlType.Image,title:\"Fallback Img\"},playing:{type:ControlType.Boolean,title:\"Playing\",defaultValue:true},loop:{type:ControlType.Boolean,title:\"Loop\",defaultValue:true},muted:{type:ControlType.Boolean,title:\"Muted\",defaultValue:true},controls:{type:ControlType.Boolean,title:\"Controls\",defaultValue:false},background:{type:ControlType.Color,title:\"Background\",defaultValue:\"transparent\"},fit:{type:ControlType.Enum,title:\"Fit\",options:[\"fill\",\"contain\",\"cover\",\"none\",\"scale-down\"],optionTitles:[\"Fill\",\"Contain\",\"Cover\",\"None\",\"Scale Down\"],defaultValue:\"cover\"},startTime:{type:ControlType.Number,title:\"Start %\",min:0,max:100,defaultValue:0},lazyLoad:{type:ControlType.Boolean,title:\"Lazy Load\",defaultValue:true},pauseOffscreen:{type:ControlType.Boolean,title:\"Pause Offscreen\",defaultValue:true}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"BrowserVideoPlus\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./BrowserVideoPlus.map"],"mappings":"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"}