{"version":3,"file":"InViewVideo.CYDD-R2L.mjs","names":["useRef","useState","__esmMin","init_npm_react_18_3_1","window","_e","de","p","ce","init_ssg_sandbox_shims","RenderTarget","init_framer_B1b760uK","addPropertyControls","ControlType","installTileFrame","w","st","TF_HOT","shown","tileFor","tile","card","a","el","ts","r","t","hov","foc","paint","InViewVideo","src","props","canvas","ref","armed","setArmed","v","reduced","inView","sync","near","vis","media","video","TF_FILL","TF_REST","TF_EASE","init_InViewVideo","init_jsx_runtime"],"sources":["https:/framerusercontent.com/modules/aFnh4KiagmqRcKjl24Z9/oESKvz2rPPxxK1b3rALo/InViewVideo.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{useEffect,useRef,useState}from\"react\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";// Tile frame, shared by EditorFeature, BenefitVisual, InViewVideo, LiveRive, GameShelf and withTileFrame. Code files\n// can't import each other, so each carries this copy; keep them identical (the first one loaded installs).\nconst TF_REST=\"rgba(255, 255, 255, 0.08)\";const TF_HOT=\"rgba(255, 255, 255, 0.32)\";const TF_FILL=\"rgba(255, 255, 255, 0.025)\";const TF_EASE=\"border-color 0.2s ease\";function installTileFrame(){const w=window;if(w.__riveTileFrame)return;w.__riveTileFrame=1;const st=document.createElement(\"style\");st.textContent=`[data-tf-hot][data-tf-line],[data-tf-hot] [data-tf-line]{border-color:${TF_HOT}!important}`;document.head.appendChild(st);const shown=e=>e.getClientRects().length>0;// card = highest ancestor holding only this tile (about its width); it lights only if the card has a link or button\nconst tileFor=el=>{let tile=null;let card=null;for(let a=el;a&&a!==document.body;a=a.parentElement){const ts=(a.matches(\"[data-tf]\")?[a]:[]).concat(Array.from(a.querySelectorAll(\"[data-tf]\")).filter(shown));if(!ts.length)continue;if(ts.length>1||tile&&ts[0]!==tile)break;const r=a.getBoundingClientRect();const t=ts[0].getBoundingClientRect();if(r.width>t.width+48||r.height>t.height+420)break;tile=ts[0];card=a;}return tile&&card&&(card.closest(\"a\")||card.querySelector(\"a[href],button,[role=button]\"))?tile:null;};let hov=null;let foc=null;const paint=()=>{document.querySelectorAll(\"[data-tf-hot]\").forEach(e=>e!==hov&&e!==foc&&e.removeAttribute(\"data-tf-hot\"));hov?.setAttribute(\"data-tf-hot\",\"\");foc?.setAttribute(\"data-tf-hot\",\"\");};document.addEventListener(\"pointerover\",e=>{if(e.pointerType===\"touch\")return;const t=tileFor(e.target);if(t!==hov){hov=t;paint();}},{passive:true});document.addEventListener(\"pointerout\",e=>{if(!e.relatedTarget&&hov){hov=null;paint();}},{passive:true});document.addEventListener(\"focusin\",e=>{const el=e.target;foc=el.matches?.(\":focus-visible\")?tileFor(el):null;paint();});document.addEventListener(\"focusout\",()=>{if(foc){foc=null;paint();}});}/**\n * Muted looping video that loads when it nears the viewport and plays only while it is on screen and the tab is\n * visible. Framer's video component keeps decoding off screen.\n *\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight any\n */export default function InViewVideo(props){const src=props.file||props.srcFile||props.url||props.srcUrl||\"\";const canvas=RenderTarget.current()===RenderTarget.canvas;const ref=useRef(null);// the source is attached the first time the video comes within 400 px of the viewport\nconst[armed,setArmed]=useState(canvas);useEffect(()=>{const v=ref.current;if(!v||canvas)return;const reduced=window.matchMedia?.(\"(prefers-reduced-motion: reduce)\").matches;let inView=false;const sync=()=>{if(inView&&!document.hidden&&!reduced)v.play().catch(()=>{});else v.pause();};const near=new IntersectionObserver(([e])=>{if(e.isIntersecting){setArmed(true);near.disconnect();}},{rootMargin:\"400px\"});const vis=new IntersectionObserver(([e])=>{inView=e.isIntersecting;sync();});near.observe(v);vis.observe(v);document.addEventListener(\"visibilitychange\",sync);v.addEventListener(\"loadeddata\",sync);return()=>{near.disconnect();vis.disconnect();document.removeEventListener(\"visibilitychange\",sync);v.removeEventListener(\"loadeddata\",sync);};},[canvas,src]);useEffect(()=>{if(props.tileFrame&&!canvas)installTileFrame();},[props.tileFrame,canvas]);const media={display:\"block\",width:\"100%\",height:\"100%\",objectFit:props.fit||\"cover\",background:\"transparent\"};const video=/*#__PURE__*/_jsx(\"video\",{ref:ref,src:armed?src:undefined,poster:props.poster,muted:true,playsInline:true,loop:props.loop??true,preload:armed?\"auto\":\"none\",style:props.tileFrame?media:{...props.style,...media}});if(!props.tileFrame)return video;// the line sits over the video's edge, so the tile keeps its size\nreturn /*#__PURE__*/_jsxs(\"div\",{\"data-tf\":\"\",style:{...props.style,position:\"relative\",width:\"100%\",height:\"100%\",background:TF_FILL,overflow:\"hidden\"},children:[video,/*#__PURE__*/_jsx(\"div\",{\"data-tf-line\":\"\",style:{position:\"absolute\",inset:0,border:`1px solid ${TF_REST}`,transition:TF_EASE,pointerEvents:\"none\"}})]});}addPropertyControls(InViewVideo,{// keys match the titles: Framer stores control values under a key derived from the title\nfile:{type:ControlType.File,title:\"File\",allowedFileTypes:[\"mp4\",\"webm\",\"mov\"]},url:{type:ControlType.String,title:\"Url\"},poster:{type:ControlType.Image,title:\"Poster\"},fit:{type:ControlType.Enum,title:\"Fit\",options:[\"cover\",\"contain\"],defaultValue:\"cover\"},loop:{type:ControlType.Boolean,title:\"Loop\",defaultValue:true},tileFrame:{type:ControlType.Boolean,title:\"Tile Frame\",defaultValue:false,description:\"1px frame that lights up while its card is hovered or focused.\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"InViewVideo\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerSupportedLayoutHeight\":\"any\",\"framerSupportedLayoutWidth\":\"any\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./InViewVideo.map"],"mappings":"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"}