{"version":3,"file":"BackgroundVideo.Y_9hIQnt.mjs","names":["useRef","useState","__esmMin","init_ssg_sandbox_shims","init_npm_react_18_3_1","window","ce","init_jsx_runtime","c","p","_e","de","init_framer_DymZktPS","RenderTarget","addPropertyControls","useIsStaticRenderer","ControlType","normalizeFit","value","BackgroundVideo","props","videoRef","loadedSourcesRef","hostRef","isStatic","reducedMotion","setReducedMotion","inView","setInView","painted","setPainted","loaded","setLoaded","av1Failed","setAv1Failed","needsGesture","setNeedsGesture","query","update","shouldPlay","playInCanvas","shouldLoad","av1","fileAv1","host","observer","entry","file","effectiveOpacity","node","from","computed","OPACITY_FLOOR","isCovered","rect","sibling","COVER_OPACITY","over","settle","read","SETTLE_MS","depth","video","sources","attempt","reason","retry","handleError","timer","STALL_MS","objectFit","fit","container","style","media","poster","AV1_TYPE","tint","init_BackgroundVideo"],"sources":["https:/framerusercontent.com/modules/aWcblQx8JuBETNt5smgC/ngqdhk5uHHmiv4PwABu4/BackgroundVideo.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{addPropertyControls,ControlType,RenderTarget,useIsStaticRenderer}from\"framer\";import{useEffect,useRef,useState}from\"react\";// Below this an element contributes nothing worth decoding for.\nconst OPACITY_FLOOR=.02;// A layer has to be near enough to solid before it counts as hiding another.\nconst COVER_OPACITY=.99;// Comfortably longer than the 0.5s cross-fade these layers use.\nconst SETTLE_MS=700;// How long a clip may sit selected-but-frameless before its AV1 source is\n// given up on. A fetch that is still in flight is exempt, so this only has\n// to outlast a decoder that has gone quiet.\nconst STALL_MS=6e3;// Read out of the encoded file's own av1C box rather than guessed: profile 0,\n// level 4.0, Main tier, 8-bit. If this string is wrong the browser silently\n// skips the AV1 source and takes the H.264 one, so a mismatch costs bytes, not\n// playback - but it costs ALL of them, which is the entire point of shipping it.\nconst AV1_TYPE='video/mp4; codecs=\"av01.0.08M.08\"';/**\n * Enum controls can arrive as either the option value or its display title\n * depending on how the instance was written, so match on substance rather than\n * on an exact string. Same trap as the YouTube component.\n */function normalizeFit(value){return String(value??\"\").toLowerCase().includes(\"contain\")?\"contain\":\"cover\";}/**\n * Self-hosted looping background video. No controls, no chrome, no third-party\n * player — just a muted autoplaying <video>. Upload the file into the File\n * control and Framer serves it from its own CDN.\n *\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight any\n * @framerIntrinsicWidth 600\n * @framerIntrinsicHeight 338\n */export default function BackgroundVideo(props){const{file,fileAv1,fit,opacity,tint,poster,playInCanvas,borderRadius,style}=props;const videoRef=useRef(null);const loadedSourcesRef=useRef(\"\");const hostRef=useRef(null);const isStatic=useIsStaticRenderer();const[reducedMotion,setReducedMotion]=useState(false);const[inView,setInView]=useState(false);const[painted,setPainted]=useState(true);const[loaded,setLoaded]=useState(false);// Set once the browser has chosen the AV1 source and then failed to show\n// a frame. From then on only the H.264 file is offered.\nconst[av1Failed,setAv1Failed]=useState(false);// Set when play() was refused for want of a user gesture. Low Power Mode\n// and the iOS 27 \"Auto-Play Video Previews\" switch both answer that way.\nconst[needsGesture,setNeedsGesture]=useState(false);// Honour the OS \"reduce motion\" setting: hold the first frame instead of\n// looping. The poster still shows, so the section never looks empty.\nuseEffect(()=>{if(typeof window===\"undefined\"||!window.matchMedia)return;const query=window.matchMedia(\"(prefers-reduced-motion: reduce)\");const update=()=>setReducedMotion(query.matches);update();query.addEventListener(\"change\",update);return()=>query.removeEventListener(\"change\",update);},[]);const shouldPlay=!reducedMotion&&(playInCanvas||!isStatic);// RenderTarget - not useIsStaticRenderer - is what separates the canvas\n// from the published page's own static render, and it is the static render\n// that must ship without a src.\nconst shouldLoad=loaded||RenderTarget.current()===RenderTarget.canvas;const av1=fileAv1&&!av1Failed?fileAv1:undefined;// Only fetch the clip once it is near the viewport. This gate decides\n// whether the file is DOWNLOADED, not just whether it plays - the previous\n// version set src unconditionally, so every clip on the page pulled its\n// full body on load even while paused and parked thousands of pixels down.\n// The canvas is exempt so the designer still sees the video immediately.\nuseEffect(()=>{const host=hostRef.current;if(!host)return;if(typeof IntersectionObserver===\"undefined\"){setInView(true);return;}const observer=new IntersectionObserver(([entry])=>setInView(entry.isIntersecting),{rootMargin:\"400px 0px\",threshold:0});observer.observe(host);return()=>observer.disconnect();},[file,fileAv1]);// Latch. Once the bytes are in the cache, keep src attached: clearing it on\n// scroll-away would make the browser re-fetch the whole file every time the\n// section came back into view, which is worse than never gating at all.\nuseEffect(()=>{if(inView)setLoaded(true);},[inView]);// These layers are stacked: a variant shows its clip by fading it in over\n// the ones below, so most of them are either transparent or completely\n// covered by an opaque layer sitting on top. Neither state is something\n// IntersectionObserver can see - it only measures geometry - so without\n// this check every stacked clip decodes even though one is visible.\nuseEffect(()=>{const host=hostRef.current;if(!host||typeof window===\"undefined\"||isStatic)return;const effectiveOpacity=from=>{let node=from;let value=1;while(node&&node!==document.body){const computed=window.getComputedStyle(node);if(computed.display===\"none\"||computed.visibility===\"hidden\")return 0;value*=Number(computed.opacity)||0;if(value<=OPACITY_FLOOR)return 0;node=node.parentElement;}return value;};// A later sibling only hides this one if it is opaque AND actually\n// spans it. The bottle card is a later sibling too, but it sits in a\n// corner, so the bounds test is what keeps it from pausing the clip.\nconst isCovered=()=>{const rect=host.getBoundingClientRect();let sibling=host.nextElementSibling;while(sibling){if(effectiveOpacity(sibling)>COVER_OPACITY){const over=sibling.getBoundingClientRect();if(over.left<=rect.left+1&&over.top<=rect.top+1&&over.right>=rect.right-1&&over.bottom>=rect.bottom-1)return true;}sibling=sibling.nextElementSibling;}return false;};let settle;const read=()=>setPainted(effectiveOpacity(host)>OPACITY_FLOOR&&!isCovered());const update=()=>{read();// Mid cross-fade the value read is not the one it lands on, so take\n// a second look once the transition has had time to finish.\nclearTimeout(settle);settle=setTimeout(read,SETTLE_MS);};update();const observer=new MutationObserver(update);let node=host.parentElement;for(let depth=0;node&&depth<6;depth++){observer.observe(node,{attributes:true,subtree:depth===0,attributeFilter:[\"style\",\"class\"]});node=node.parentElement;}return()=>{observer.disconnect();clearTimeout(settle);};},[isStatic,inView]);// Some browsers ignore the autoplay attribute when the element mounts with\n// its source already set, so ask explicitly and swallow the rejection that\n// arrives when the tab is backgrounded.\nuseEffect(()=>{const video=videoRef.current;if(!video)return;if(!shouldPlay||!inView||!painted||!shouldLoad){video.pause();return;}// Swapping <source> children does nothing on its own - the resource\n// selection algorithm only re-runs on an explicit load(). Keyed so a\n// file swap reloads but an ordinary re-render does not, since load()\n// rewinds playback to zero.\nconst sources=`${av1??\"\"}|${file??\"\"}`;if(loadedSourcesRef.current!==sources){loadedSourcesRef.current=sources;video.load();}const attempt=video.play();if(attempt&&typeof attempt.catch===\"function\")attempt.catch(reason=>{// NotAllowedError is the browser saying \"not without a tap\":\n// iOS in Low Power Mode, or with video previews switched off,\n// refuses every play() that does not run inside a gesture.\n// Remember it so the next tap anywhere can try again.\nconst name=reason&&typeof reason===\"object\"&&\"name\"in reason?String(reason.name):\"\";if(name===\"NotAllowedError\")setNeedsGesture(true);});},[shouldPlay,inView,painted,shouldLoad,file,av1]);// A play() issued inside a user gesture lifts the restriction for the\n// rest of the element's life, and the gesture does not have to land on\n// the video. So after a refusal, wait for the first tap or click on the\n// page and ask again from inside it. Touch scrolling is not a gesture in\n// this sense, which is why pointerup/click and not pointerdown.\nuseEffect(()=>{if(!needsGesture||typeof document===\"undefined\")return;const retry=()=>{const video=videoRef.current;if(!video)return;if(!shouldPlay||!inView||!painted||!shouldLoad)return;const attempt=video.play();if(attempt&&typeof attempt.then===\"function\")attempt.then(()=>setNeedsGesture(false),()=>{});};document.addEventListener(\"pointerup\",retry,{passive:true});document.addEventListener(\"click\",retry,{passive:true});return()=>{document.removeEventListener(\"pointerup\",retry);document.removeEventListener(\"click\",retry);};},[needsGesture,shouldPlay,inView,painted,shouldLoad]);// The browser only moves on to the next <source> when it rejects a file\n// up front. Once it has accepted the AV1 source - the codec string\n// matched - and then cannot decode it, the element stops with a\n// MediaError and never looks at the H.264 file. So take that step by\n// hand: drop the AV1 source and let load() rerun with H.264 only.\n// Guarded on currentSrc so an H.264 failure cannot loop.\nconst handleError=()=>{const video=videoRef.current;if(!video||!av1||!file||!video.error)return;if(video.currentSrc&&video.currentSrc!==av1)return;setAv1Failed(true);};// Some decoder failures are silent: no error event, readyState never\n// reaches a frame, the poster just stays. Give the AV1 source a fixed\n// grace period while it is meant to be playing, then fall back the same\n// way. A fetch still in flight is left alone, so a slow network is not\n// mistaken for a broken decoder, and a refused play() is left alone too,\n// since swapping codecs cannot fix a missing gesture.\nuseEffect(()=>{const video=videoRef.current;if(!video||!av1||!file)return;if(!shouldPlay||!inView||!painted||!shouldLoad||needsGesture)return;const timer=setTimeout(()=>{if(video.readyState>=HTMLMediaElement.HAVE_CURRENT_DATA)return;if(video.networkState===HTMLMediaElement.NETWORK_LOADING)return;setAv1Failed(true);},STALL_MS);return()=>clearTimeout(timer);},[av1,file,shouldPlay,inView,painted,shouldLoad,needsGesture]);const objectFit=normalizeFit(fit);const container={position:\"relative\",overflow:\"hidden\",borderRadius,width:\"100%\",height:\"100%\",...style};const media={position:\"absolute\",inset:0,width:\"100%\",height:\"100%\",objectFit,opacity,display:\"block\"};// With no file this layer must disappear completely rather than paint a\n// placeholder, so whatever sits behind it still shows. The hint is only\n// useful in the editor, and RenderTarget (not useIsStaticRenderer) is what\n// distinguishes the canvas from the published page's own static render.\nif(!file&&!fileAv1){if(RenderTarget.current()!==RenderTarget.canvas)return null;return /*#__PURE__*/_jsx(\"div\",{style:container,children:/*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",inset:0,display:\"flex\",alignItems:\"center\",justifyContent:\"center\",background:\"rgba(0,0,0,0.06)\",color:\"rgba(0,0,0,0.45)\",font:\"500 13px/1.4 Inter, sans-serif\",textAlign:\"center\",padding:16},children:\"Pick a video file in the properties panel\"})});}return /*#__PURE__*/_jsxs(\"div\",{style:container,ref:hostRef,children:[/*#__PURE__*/_jsxs(\"video\",{ref:videoRef,poster:poster?.src,style:media,loop:true,muted:true,playsInline:true,preload:shouldLoad?\"auto\":\"none\",controls:false,disablePictureInPicture:true,tabIndex:-1,\"aria-hidden\":\"true\",onError:handleError,children:[shouldLoad&&av1?/*#__PURE__*/_jsx(\"source\",{src:av1,type:AV1_TYPE}):null,shouldLoad&&file?/*#__PURE__*/_jsx(\"source\",{src:file,type:\"video/mp4\"}):null]}),tint&&tint.opacity?/*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",inset:0,background:tint.color??\"#000000\",opacity:tint.opacity,pointerEvents:\"none\"}}):null]});}BackgroundVideo.displayName=\"Background Video\";addPropertyControls(BackgroundVideo,{file:{type:ControlType.File,title:\"Video\",allowedFileTypes:[\"mp4\",\"webm\",\"mov\"],description:\"Framer hosts the file unaltered and bills its bytes. Aim under 5 MB so it stays in the browser media cache.\"},fileAv1:{type:ControlType.File,title:\"AV1\",allowedFileTypes:[\"mp4\"],description:\"Optional, and served first where it is supported. Same clip encoded as AV1 - about a quarter the bytes at equal quality. Anything that cannot decode it falls back to Video on its own.\"},fit:{type:ControlType.Enum,title:\"Fit\",options:[\"cover\",\"contain\"],optionTitles:[\"Cover\",\"Contain\"],defaultValue:\"cover\",displaySegmentedControl:true},opacity:{type:ControlType.Number,title:\"Opacity\",defaultValue:1,min:0,max:1,step:.05},borderRadius:{type:ControlType.BorderRadius,title:\"Radius\",defaultValue:\"0px\"},tint:{type:ControlType.Object,title:\"Tint\",optional:true,icon:\"effect\",controls:{color:{type:ControlType.Color,title:\"Color\",defaultValue:\"#000000\"},opacity:{type:ControlType.Number,title:\"Opacity\",defaultValue:.3,min:0,max:1,step:.05}}},poster:{type:ControlType.ResponsiveImage,title:\"Poster\",description:\"Shows until the first frame decodes.\"},playInCanvas:{type:ControlType.Boolean,title:\"Play in Canvas\",defaultValue:false}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"BackgroundVideo\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutWidth\":\"any\",\"framerIntrinsicWidth\":\"600\",\"framerSupportedLayoutHeight\":\"any\",\"framerContractVersion\":\"1\",\"framerIntrinsicHeight\":\"338\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./BackgroundVideo.map"],"mappings":"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"}