{"version":3,"file":"FlashingImages.tp_lPkZ9.mjs","names":["useRef","useState","useMemo","useCallback"],"sources":["https:/framerusercontent.com/modules/eC92hRTqQc6LJQNkvuPy/BV8OmObjSOtDKSognoJD/FlashingImages.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import{useCallback,useEffect,useMemo,useRef,useState}from\"react\";import{addPropertyControls,ControlType,useIsStaticRenderer}from\"framer\";/**\n * Rapidly cycles through decoded images with instant hard cuts.\n *\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight any-prefer-fixed\n */export default function FlashingImages(props){const{images=[],speed=300,placeholderBackground=\"#F5F5F5\",style}=props;const rootRef=useRef(null);const readyIndexesRef=useRef([]);const[readyIndexes,setReadyIndexes]=useState([]);const[activeIndex,setActiveIndex]=useState(0);const[prefersReducedMotion,setPrefersReducedMotion]=useState(false);const[isPageVisible,setIsPageVisible]=useState(true);const[isInView,setIsInView]=useState(true);const[containerWidth,setContainerWidth]=useState(0);const isStatic=useIsStaticRenderer();const validImages=useMemo(()=>images.filter(image=>Boolean(image?.src)),[images]);const imageSignature=useMemo(()=>validImages.map(image=>`${image.src||\"\"}|${image.srcSet||\"\"}`).join(\"\\n\"),[validImages]);const effectiveSpeed=Math.max(150,speed||300);const responsiveSizes=containerWidth>0?`${Math.ceil(containerWidth)}px`:\"100vw\";const markReady=useCallback(index=>{if(readyIndexesRef.current.includes(index))return;const next=[...readyIndexesRef.current,index].sort((a,b)=>a-b);readyIndexesRef.current=next;setReadyIndexes(next);},[]);useEffect(()=>{if(isStatic||typeof window===\"undefined\")return;const mediaQuery=window.matchMedia(\"(prefers-reduced-motion: reduce)\");const updatePreference=()=>setPrefersReducedMotion(mediaQuery.matches);updatePreference();mediaQuery.addEventListener?.(\"change\",updatePreference);return()=>mediaQuery.removeEventListener?.(\"change\",updatePreference);},[isStatic]);useEffect(()=>{if(isStatic||typeof document===\"undefined\")return;const updateVisibility=()=>setIsPageVisible(!document.hidden);updateVisibility();document.addEventListener(\"visibilitychange\",updateVisibility);return()=>document.removeEventListener(\"visibilitychange\",updateVisibility);},[isStatic]);useEffect(()=>{if(isStatic||typeof window===\"undefined\"||!rootRef.current)return;const element=rootRef.current;const updateWidth=()=>setContainerWidth(element.getBoundingClientRect().width);updateWidth();if(typeof window.ResizeObserver===\"undefined\")return;const observer=new window.ResizeObserver(updateWidth);observer.observe(element);return()=>observer.disconnect();},[isStatic]);useEffect(()=>{if(isStatic||typeof window===\"undefined\"||!rootRef.current)return;if(typeof window.IntersectionObserver===\"undefined\")return;const observer=new window.IntersectionObserver(([entry])=>setIsInView(entry?.isIntersecting??true),{rootMargin:\"100px\"});observer.observe(rootRef.current);return()=>observer.disconnect();},[isStatic]);useEffect(()=>{readyIndexesRef.current=[];setReadyIndexes([]);setActiveIndex(0);if(isStatic||typeof window===\"undefined\"||validImages.length===0){return;}let cancelled=false;const loadAndDecode=(image,index)=>new Promise(resolve=>{const loader=new window.Image;loader.decoding=\"async\";loader.sizes=responsiveSizes;if(image.srcSet)loader.srcset=image.srcSet;const finish=async loaded=>{if(loaded&&typeof loader.decode===\"function\"){try{await loader.decode();}catch{// A completed load is still usable if decode() is unsupported or rejects.\n    }}if(!cancelled&&loaded)markReady(index);resolve();};loader.onload=()=>void finish(true);loader.onerror=()=>void finish(false);loader.src=image.src||\"\";});const loadSequentially=async()=>{for(let index=0;index<validImages.length;index+=1){if(cancelled)return;await loadAndDecode(validImages[index],index);}};void loadSequentially();return()=>{cancelled=true;};},[imageSignature,isStatic,markReady]);const hasCyclePair=readyIndexes.length>1;useEffect(()=>{if(isStatic||prefersReducedMotion||!isPageVisible||!isInView||!hasCyclePair||typeof window===\"undefined\"){if(prefersReducedMotion)setActiveIndex(readyIndexesRef.current[0]??0);return;}let timerId=0;let nextDeadline=window.performance.now()+effectiveSpeed;const tick=()=>{const ready=readyIndexesRef.current;if(ready.length>1){setActiveIndex(current=>{const position=ready.indexOf(current);return ready[(position+1+ready.length)%ready.length];});}nextDeadline+=effectiveSpeed;timerId=window.setTimeout(tick,Math.max(0,nextDeadline-window.performance.now()));};timerId=window.setTimeout(tick,effectiveSpeed);return()=>window.clearTimeout(timerId);},[effectiveSpeed,hasCyclePair,imageSignature,isInView,isPageVisible,isStatic,prefersReducedMotion]);const displayIndex=isStatic?0:readyIndexes.includes(activeIndex)?activeIndex:readyIndexes[0];const displayPosition=displayIndex===undefined?-1:readyIndexes.indexOf(displayIndex);const nextIndex=!isStatic&&readyIndexes.length>1&&displayPosition>=0?readyIndexes[(displayPosition+1)%readyIndexes.length]:undefined;const mountedIndexes=isStatic?validImages.length>0?[0]:[]:[displayIndex,nextIndex].filter(index=>index!==undefined);return /*#__PURE__*/_jsx(\"div\",{ref:rootRef,style:{...style,position:\"relative\",width:\"100%\",height:\"100%\",overflow:\"hidden\",isolation:\"isolate\",background:placeholderBackground},children:mountedIndexes.map(index=>{const image=validImages[index];const isActive=index===displayIndex;return /*#__PURE__*/_jsx(\"img\",{src:image.src,srcSet:image.srcSet,sizes:responsiveSizes,alt:isActive?image.alt||\"\":\"\",\"aria-hidden\":isActive?undefined:true,decoding:\"async\",loading:\"eager\",onLoad:()=>markReady(index),style:{position:\"absolute\",inset:0,width:\"100%\",height:\"100%\",objectFit:\"cover\",opacity:isActive?1:0,zIndex:isActive?1:0,pointerEvents:\"none\"}},`${image.src}-${index}`);})});}addPropertyControls(FlashingImages,{images:{type:ControlType.Array,title:\"Images\",defaultValue:[],maxCount:20,control:{type:ControlType.ResponsiveImage}},speed:{type:ControlType.Number,title:\"Speed (ms)\",defaultValue:180,min:150,max:1e3,step:1},placeholderBackground:{type:ControlType.Color,title:\"Placeholder\",defaultValue:\"#F5F5F5\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"FlashingImages\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutHeight\":\"any-prefer-fixed\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutWidth\":\"any-prefer-fixed\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./FlashingImages.map"],"mappings":"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"}