{"version":3,"file":"VisibleFrameLoop.DAweMwfL.mjs","names":["useRef"],"sources":["https:/framerusercontent.com/modules/x1Zu9I12gbJxEvx0LjYW/C4Q4JCo5onFQz8wFl5xb/VisibleFrameLoop.js"],"sourcesContent":["import{useEffect,useRef}from\"react\";export function prefersReducedMotion(){return typeof window!==\"undefined\"&&!!window.matchMedia?.(\"(prefers-reduced-motion: reduce)\").matches;}// Tracks whether an element is near the viewport and the tab is visible.\n// `onChange` fires on every flip; the returned ref can be read any time.\n// Change `watchKey` to re-attach when the element mounts after first render.\nexport function useOnScreen(ref,onChange,rootMargin=\"200px\",watchKey){const visibleRef=useRef(false);const onChangeRef=useRef(onChange);onChangeRef.current=onChange;useEffect(()=>{const el=ref.current;if(!el||typeof window===\"undefined\")return;let inView=typeof IntersectionObserver===\"undefined\";const update=()=>{const next=inView&&!document.hidden;if(next===visibleRef.current)return;visibleRef.current=next;onChangeRef.current?.(next);};const io=typeof IntersectionObserver===\"undefined\"?null:new IntersectionObserver(entries=>{inView=entries[entries.length-1].isIntersecting;update();},{rootMargin});io?.observe(el);document.addEventListener(\"visibilitychange\",update);update();return()=>{io?.disconnect();document.removeEventListener(\"visibilitychange\",update);if(visibleRef.current){visibleRef.current=false;onChangeRef.current?.(false);}};},[ref,rootMargin,watchKey]);return visibleRef;}// Runs tick(time, dt) every frame while the element is on screen.\n// Return false from tick to go idle until wake() is called.\nexport function useVisibleFrameLoop(ref,tick,options={}){const{enabled=true,rootMargin=\"200px\",ignoreReducedMotion=false}=options;const tickRef=useRef(tick);tickRef.current=tick;const state=useRef({raf:0,last:-1,allowed:false,visible:false});const controls=useRef({wake:()=>{},isVisible:()=>state.current.visible});const stop=()=>{const s=state.current;if(s.raf)cancelAnimationFrame(s.raf);s.raf=0;s.last=-1;};const frame=time=>{const s=state.current;s.raf=0;if(!s.allowed||!s.visible)return;const dt=s.last<0?0:Math.min(time-s.last,250);s.last=time;if(tickRef.current(time,dt)===false){s.last=-1;return;}s.raf=requestAnimationFrame(frame);};const start=()=>{const s=state.current;if(s.raf||!s.allowed||!s.visible)return;s.raf=requestAnimationFrame(frame);};controls.current.wake=start;useOnScreen(ref,visible=>{state.current.visible=visible;if(visible)start();else stop();},rootMargin);useEffect(()=>{const s=state.current;s.allowed=enabled&&typeof window!==\"undefined\"&&(ignoreReducedMotion||!prefersReducedMotion());if(s.allowed)start();else stop();return stop;},[enabled,ignoreReducedMotion]);return controls.current;}\nexport const __FramerMetadata__ = {\"exports\":{\"FrameTick\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"prefersReducedMotion\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"useVisibleFrameLoop\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"VisibleLoopControls\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"VisibleLoopOptions\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"useOnScreen\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./VisibleFrameLoop.map"],"mappings":"yHAAoC,SAAgB,GAAsB,CAAC,OAAc,IAAS,QAAa,CAAC,CAAC,EAAO,aAAa,kCAAkC,CAAC,CAAC,OAAQ,CAGjL,SAAgB,EAAY,EAAI,EAAS,EAAW,QAAQ,EAAS,CAAC,IAAM,EAAWA,EAAO,EAAK,EAAQ,EAAYA,EAAO,CAAQ,EAAsuB,MAApuB,GAAY,QAAQ,EAAS,MAAc,CAAC,IAAM,EAAG,EAAI,QAAQ,GAAG,CAAC,GAAW,IAAS,OAAY,OAAO,IAAI,EAAO,OAAO,qBAAuB,IAAkB,MAAW,CAAC,IAAM,EAAK,GAAQ,CAAC,SAAS,OAAU,IAAO,EAAW,UAAe,EAAW,QAAQ,EAAK,EAAY,UAAU,CAAI,EAAE,EAAQ,EAAG,OAAO,qBAAuB,IAAY,KAAK,IAAI,qBAAqB,GAAS,CAAC,EAAO,EAAQ,EAAQ,OAAO,EAAE,CAAC,eAAe,EAAO,CAAE,EAAE,CAAC,YAAU,CAAC,EAAgF,OAA9E,GAAI,QAAQ,CAAE,EAAE,SAAS,iBAAiB,mBAAmB,CAAM,EAAE,EAAO,MAAY,CAAC,GAAI,WAAW,EAAE,SAAS,oBAAoB,mBAAmB,CAAM,EAAK,EAAW,UAAS,EAAW,QAAQ,GAAM,EAAY,UAAU,EAAK,EAAG,CAAE,EAAE,CAAC,EAAI,EAAW,CAAQ,CAAC,EAAS,CAAW,CAE93B,SAAgB,EAAoB,EAAI,EAAK,EAAQ,CAAC,EAAE,CAAC,GAAK,CAAC,UAAQ,GAAK,aAAW,QAAQ,sBAAoB,IAAO,EAAc,EAAQA,EAAO,CAAI,EAAE,EAAQ,QAAQ,EAAK,IAAM,EAAMA,EAAO,CAAC,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAM,QAAQ,EAAK,CAAC,EAAQ,EAASA,EAAO,CAAC,SAAS,CAAC,EAAE,cAAc,EAAM,QAAQ,OAAO,CAAC,EAAQ,MAAS,CAAC,IAAM,EAAE,EAAM,QAAW,EAAE,KAAI,qBAAqB,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE,KAAK,EAAG,EAAQ,EAAM,GAAM,CAAC,IAAM,EAAE,EAAM,QAAgB,GAAR,EAAE,IAAI,EAAK,CAAC,EAAE,SAAS,CAAC,EAAE,QAAQ,OAAO,IAAM,EAAG,EAAE,KAAK,EAAE,EAAE,KAAK,IAAI,EAAK,EAAE,KAAK,GAAG,EAAc,GAAZ,EAAE,KAAK,EAAQ,EAAQ,QAAQ,EAAK,CAAE,IAAI,GAAM,CAAC,EAAE,KAAK,GAAG,MAAO,CAAC,EAAE,IAAI,sBAAsB,CAAK,CAAE,EAAQ,MAAU,CAAC,IAAM,EAAE,EAAM,QAAW,EAAE,KAAK,CAAC,EAAE,SAAS,CAAC,EAAE,UAAe,EAAE,IAAI,sBAAsB,CAAK,EAAE,EAAqV,MAAnV,GAAS,QAAQ,KAAK,EAAM,EAAY,EAAI,GAAS,CAAC,EAAM,QAAQ,QAAQ,EAAW,EAAQ,EAAM,EAAO,EAAK,CAAE,EAAE,CAAU,EAAE,MAAc,CAAC,IAAM,EAAE,EAAM,QAAwI,MAAhI,GAAE,QAAQ,GAAgB,IAAS,SAAc,GAAqB,CAAC,EAAqB,GAAM,EAAE,QAAQ,EAAM,EAAO,EAAK,EAAS,CAAK,EAAE,CAAC,EAAQ,CAAmB,CAAC,EAAS,EAAS,OAAQ,qBAL9jC"}