{"version":3,"file":"Logo_Rotator.ByCAbFMx.mjs","names":["useRef","useId","__esmMin","init_npm_react_18_3_1","ie","window","init_ssg_sandbox_shims","ce","init_jsx_runtime","de","useIsStaticRenderer","init_framer_CcSHI2rN","ControlType","addPropertyControls","LogoRotator","props","isStatic","ref","id","firstPaint","rows","columns","css","wrap","ATTR","marker","grid","findGrid","reduced","rotate","every","fade","el","host","i","next","g","gridIn","inner","columnsOf","cols","c","kids","n","slots","pool","shown","last","setup","all","o","inView","io","timers","interval","si","pi","out","incoming","ro","t","init_Logo_Rotator"],"sources":["https:/framerusercontent.com/modules/US6m1eYcQTZTLV1NSfbT/piN9N8PfIky0G7H7LM7O/Logo_Rotator.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import{useEffect,useId,useRef}from\"react\";import{addPropertyControls,ControlType,useIsStaticRenderer}from\"framer\";const ATTR=\"data-logo-rotator\";export default function LogoRotator(props){const{rows=4,columns=5,every=2.2,fade=450}=props;const isStatic=useIsStaticRenderer();const ref=useRef(null);const id=\"lr\"+useId().replace(/[^a-zA-Z0-9_-]/g,\"\");// First paint (before scripts run): hide everything past rows x columns,\n// so the wall never shows the waiting logos for a moment.\nconst firstPaint=Math.max(1,Math.round(rows))*Math.max(1,Math.round(columns));// Framer wraps the component in a container, so the grid is that\n// container's next sibling (or sits directly inside it).\nconst sel=wrap=>[`${wrap}[${ATTR}=\"${id}\"]) + * > *:nth-child(n+${firstPaint+1})`,`${wrap}[${ATTR}=\"${id}\"]) + * > * > *:nth-child(n+${firstPaint+1})`];const css=sel(\"*:has(> \").join(\", \")+\" { display: none; }\";useEffect(()=>{if(isStatic||typeof window===\"undefined\")return;const marker=ref.current;if(!marker)return;const host=marker.closest(`[${ATTR}]`);const grid=findGrid(host);if(!grid)return;const reduced=window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;return rotate(grid,{rows:Math.max(1,Math.round(rows)),every:Math.max(.6,every)*1e3,fade:Math.max(0,fade),animate:!reduced});},[isStatic,rows,every,fade]);return /*#__PURE__*/_jsx(\"span\",{ref:ref,[ATTR]:id,\"aria-hidden\":true,style:{...props.style,display:\"block\",width:0,height:0,overflow:\"hidden\",pointerEvents:\"none\"},children:/*#__PURE__*/_jsx(\"style\",{children:css})});}// The grid is the element right after this component (Framer may wrap the\n// component in one extra element, so look from that wrapper too).\nfunction findGrid(host){let el=host;for(let i=0;i<3&&el;i++){let next=el.nextElementSibling;while(next){const g=gridIn(next);if(g)return g;next=next.nextElementSibling;}el=el.parentElement;}return null;}function gridIn(el){if(getComputedStyle(el).display===\"grid\")return el;const inner=el.firstElementChild;if(inner&&getComputedStyle(inner).display===\"grid\")return inner;return null;}function columnsOf(grid){const cols=getComputedStyle(grid).gridTemplateColumns.split(\" \").filter(c=>c&&c!==\"none\").length;return Math.max(1,cols);}function rotate(grid,o){const kids=()=>Array.from(grid.children);let n=0;let slots=[];let pool=[];let shown=\"flex\";let last=-1;const setup=()=>{const all=kids();n=Math.min(columnsOf(grid)*o.rows,all.length);if(all[0]){all[0].style.display=\"\";shown=getComputedStyle(all[0]).display;if(!shown||shown===\"none\")shown=\"flex\";}all.forEach((k,i)=>{k.style.order=String(i);k.style.opacity=\"1\";k.style.transition=`opacity ${o.fade}ms ease`;k.style.display=i<n?shown:\"none\";});slots=all.slice(0,n);pool=all.slice(n);};setup();let inView=true;const io=new IntersectionObserver(([e])=>inView=e.isIntersecting);io.observe(grid);const timers=[];const step=()=>{if(!o.animate||!inView||document.hidden||!pool.length||!slots.length)return;let si=Math.floor(Math.random()*slots.length);if(slots.length>1&&si===last)si=(si+1)%slots.length;last=si;const pi=Math.floor(Math.random()*pool.length);const out=slots[si];const incoming=pool[pi];out.style.opacity=\"0\";timers.push(window.setTimeout(()=>{incoming.style.order=out.style.order;out.style.display=\"none\";incoming.style.opacity=\"0\";incoming.style.display=shown;requestAnimationFrame(()=>requestAnimationFrame(()=>incoming.style.opacity=\"1\"));slots[si]=incoming;pool[pi]=out;},o.fade));};const interval=window.setInterval(step,o.every);// Re-count when the grid's columns change (breakpoints, resizing).\nlet cols=columnsOf(grid);const ro=new ResizeObserver(()=>{const c=columnsOf(grid);if(c!==cols){cols=c;setup();}});ro.observe(grid);return()=>{window.clearInterval(interval);timers.forEach(t=>window.clearTimeout(t));io.disconnect();ro.disconnect();};}LogoRotator.displayName=\"Logo Rotator\";addPropertyControls(LogoRotator,{rows:{type:ControlType.Number,title:\"Rows\",description:\"How many rows of logos to show. The rest rotate in.\",min:1,max:12,step:1,displayStepper:true,defaultValue:4},every:{type:ControlType.Number,title:\"Every\",description:\"Time between swaps.\",min:.6,max:10,step:.1,unit:\"s\",defaultValue:2.2},fade:{type:ControlType.Number,title:\"Fade\",min:0,max:2e3,step:50,unit:\"ms\",defaultValue:450},columns:{type:ControlType.Number,title:\"Columns\",description:\"Match the grid. Only used for the first paint; the live count comes from the grid.\",min:1,max:12,step:1,displayStepper:true,defaultValue:5}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"LogoRotator\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Logo_Rotator.map"],"mappings":"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"}