{"version":3,"file":"PartnerLogos.DWI2NRS3.mjs","names":["useRef","useState","useMemo"],"sources":["https:/framerusercontent.com/modules/5HNlf0Qtv90ivoldtRpe/uYciwcZwkwBN7EMXZuef/PartnerLogos.js"],"sourcesContent":["// Partner Logos Looping Animation Component\n// Requirements: 5 logos visible, SVG upload, custom alt, sharp aspect, entry/exit up+fade, staggered, loop, pause on out-of-viewport, all controls\nimport{jsx as _jsx}from\"react/jsx-runtime\";import{useEffect,useRef,useState,useMemo}from\"react\";import{addPropertyControls,ControlType,useInView,useIsStaticRenderer}from\"framer\";const DEFAULT_LOGOS=[{svg:'<svg width=\"64\" height=\"32\" viewBox=\"0 0 64 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"64\" height=\"32\" rx=\"8\" fill=\"#0099FF\"/><text x=\"50%\" y=\"50%\" text-anchor=\"middle\" dominant-baseline=\"middle\" font-size=\"14\" fill=\"#fff\">Logo 1</text></svg>',alt:\"Logo 1\"},{svg:'<svg width=\"64\" height=\"32\" viewBox=\"0 0 64 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"64\" height=\"32\" rx=\"8\" fill=\"#8855FF\"/><text x=\"50%\" y=\"50%\" text-anchor=\"middle\" dominant-baseline=\"middle\" font-size=\"14\" fill=\"#fff\">Logo 2</text></svg>',alt:\"Logo 2\"},{svg:'<svg width=\"64\" height=\"32\" viewBox=\"0 0 64 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"64\" height=\"32\" rx=\"8\" fill=\"#FFBB00\"/><text x=\"50%\" y=\"50%\" text-anchor=\"middle\" dominant-baseline=\"middle\" font-size=\"14\" fill=\"#fff\">Logo 3</text></svg>',alt:\"Logo 3\"},{svg:'<svg width=\"64\" height=\"32\" viewBox=\"0 0 64 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"64\" height=\"32\" rx=\"8\" fill=\"#22CC66\"/><text x=\"50%\" y=\"50%\" text-anchor=\"middle\" dominant-baseline=\"middle\" font-size=\"14\" fill=\"#fff\">Logo 4</text></svg>',alt:\"Logo 4\"},{svg:'<svg width=\"64\" height=\"32\" viewBox=\"0 0 64 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"64\" height=\"32\" rx=\"8\" fill=\"#FF5588\"/><text x=\"50%\" y=\"50%\" text-anchor=\"middle\" dominant-baseline=\"middle\" font-size=\"14\" fill=\"#fff\">Logo 5</text></svg>',alt:\"Logo 5\"}];const LOGOS_VISIBLE=5;function mod(n,m){return(n%m+m)%m;}/**\n * Partner Logos Looping Animation\n *\n * @framerIntrinsicWidth 480\n * @framerIntrinsicHeight 64\n *\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight fixed\n */export default function PartnerLogos(props){const{logos=DEFAULT_LOGOS,logoScale=1,spacing=32,entryDuration=.6,visibleDuration=4,exitDuration=.6,stagger=.12,style,logosPerRow=5,spacingMode=\"auto\",logoSpacing=32}=props;const isStatic=useIsStaticRenderer();const ref=useRef(null);const inView=useInView(ref,{amount:.2});const[phase,setPhase]=useState(\"entry\")// entry, visible, exit\n;const[groupIndex,setGroupIndex]=useState(0);const[animStates,setAnimStates]=useState(Array(logosPerRow).fill(\"hidden\"))// hidden, entering, visible, exiting\n;const[paused,setPaused]=useState(false);const[lastInView,setLastInView]=useState(true);const[mounted,setMounted]=useState(false);// Repeat logos if fewer than logosPerRow\nconst logoList=useMemo(()=>{if(!logos||logos.length===0)return DEFAULT_LOGOS;if(logos.length>=logosPerRow)return logos;// Repeat to fill\nconst arr=[];for(let i=0;i<logosPerRow;i++){arr.push(logos[i%logos.length]);}return arr;},[logos,logosPerRow]);// Compute which N logos to show for this group\nconst group=useMemo(()=>{const arr=[];for(let i=0;i<logosPerRow;i++){arr.push(logoList[mod(groupIndex*logosPerRow+i,logoList.length)]);}return arr;},[logoList,groupIndex,logosPerRow]);// Animation state machine\nuseEffect(()=>{if(!mounted)return;if(isStatic){setAnimStates(Array(logosPerRow).fill(\"visible\"));return;}if(!inView){setPaused(true);return;}if(paused){setPaused(false);}let timeouts=[];if(phase===\"entry\"){setAnimStates(Array(logosPerRow).fill(\"hidden\"));setTimeout(()=>{for(let i=0;i<logosPerRow;i++){timeouts.push(setTimeout(()=>{setAnimStates(prev=>{const next=[...prev];next[i]=\"entering\";return next;});},i*stagger*1e3));timeouts.push(setTimeout(()=>{setAnimStates(prev=>{const next=[...prev];next[i]=\"visible\";return next;});},entryDuration*1e3+i*stagger*1e3));}timeouts.push(setTimeout(()=>{setPhase(\"visible\");},entryDuration*1e3+(logosPerRow-1)*stagger*1e3));},20);}else if(phase===\"visible\"){timeouts.push(setTimeout(()=>{setPhase(\"exit\");},visibleDuration*1e3));}else if(phase===\"exit\"){for(let i=0;i<logosPerRow;i++){timeouts.push(setTimeout(()=>{setAnimStates(prev=>{const next=[...prev];next[i]=\"exiting\";return next;});},i*stagger*1e3));timeouts.push(setTimeout(()=>{setAnimStates(prev=>{const next=[...prev];next[i]=\"hidden\";return next;});},exitDuration*1e3+i*stagger*1e3));}timeouts.push(setTimeout(()=>{setGroupIndex(prev=>prev+1);setAnimStates(Array(logosPerRow).fill(\"hidden\"));setPhase(\"entry\");},exitDuration*1e3+(logosPerRow-1)*stagger*1e3));}return()=>{timeouts.forEach(clearTimeout);};},[phase,inView,paused,entryDuration,visibleDuration,exitDuration,stagger,isStatic,mounted,logosPerRow]);// Mount effect to trigger animation after mount\nuseEffect(()=>{setMounted(true);},[]);// Pause/resume on viewport\nuseEffect(()=>{if(lastInView!==inView){setLastInView(inView);if(!inView){setPaused(true);}else{setPaused(false);}}},[inView,lastInView]);// If paused, freeze phase\n// (No-op: handled by not running timeouts when paused)\n// Render\nreturn /*#__PURE__*/_jsx(\"div\",{ref:ref,style:{...style,width:\"100%\",height:\"100%\",display:\"flex\",flexDirection:\"row\",alignItems:\"center\",justifyContent:spacingMode===\"auto\"?\"space-between\":\"flex-start\",gap:spacingMode===\"fixed\"?logoSpacing:undefined,position:\"relative\",overflow:\"hidden\",background:\"transparent\"},children:group.map((logo,i)=>{// Animation state for this logo\nconst state=isStatic?\"visible\":animStates[i];// Animation\nlet translateY=0;let opacity=1;if(state===\"hidden\"){opacity=0;translateY=40;}else if(state===\"entering\"){opacity=1;translateY=0;}else if(state===\"exiting\"){opacity=0;translateY=-40;}// Animate with CSS transitions\nconst transition=state===\"entering\"?`transform ${entryDuration}s cubic-bezier(0.4,0,0.2,1), opacity ${entryDuration}s cubic-bezier(0.4,0,0.2,1)`:state===\"exiting\"?`transform ${exitDuration}s cubic-bezier(0.4,0,0.2,1), opacity ${exitDuration}s cubic-bezier(0.4,0,0.2,1)`:\"none\";// Render SVG as <img src> if svg is a file URL, else inline\nconst isFile=logo.svg&&typeof logo.svg===\"string\"&&logo.svg.trim().startsWith(\"http\");return /*#__PURE__*/_jsx(\"div\",{style:{display:\"flex\",alignItems:\"center\",justifyContent:\"center\",width:\"auto\",height:\"auto\",minWidth:0,minHeight:0,transition,opacity,transform:`translateY(${translateY}px) scale(${logoScale})`,willChange:\"transform,opacity\",pointerEvents:\"none\"},\"aria-hidden\":state!==\"visible\",children:isFile?/*#__PURE__*/_jsx(\"img\",{src:logo.svg,alt:logo.alt||\"Logo\",style:{display:\"block\",width:\"auto\",height:\"auto\",maxWidth:\"100%\",maxHeight:\"100%\",objectFit:\"contain\",aspectRatio:\"auto\"},draggable:false}):/*#__PURE__*/_jsx(\"span\",{style:{display:\"inline-block\",width:\"auto\",height:\"auto\",lineHeight:0,verticalAlign:\"middle\"},dangerouslySetInnerHTML:{__html:logo.svg},\"aria-label\":logo.alt||\"Logo\",role:\"img\"})},i+\"-\"+groupIndex);})});}addPropertyControls(PartnerLogos,{logos:{type:ControlType.Array,title:\"Logos\",control:{type:ControlType.Object,controls:{svg:{type:ControlType.File,allowedFileTypes:[\"svg\"],title:\"SVG File\"},alt:{type:ControlType.String,title:\"Alt Text\",defaultValue:\"Logo\"}}},defaultValue:DEFAULT_LOGOS},logoScale:{type:ControlType.Number,title:\"Logo Scale\",defaultValue:1,min:.2,max:2,step:.01},logosPerRow:{type:ControlType.Number,title:\"Logos per Row\",defaultValue:5,min:1,max:10,step:1},spacingMode:{type:ControlType.Enum,title:\"Spacing Mode\",options:[\"auto\",\"fixed\"],optionTitles:[\"Auto\",\"Fixed\"],defaultValue:\"auto\"},logoSpacing:{type:ControlType.Number,title:\"Logo Spacing\",defaultValue:32,min:0,max:96,step:1,unit:\"px\",hidden:props=>props.spacingMode!==\"fixed\"},entryDuration:{type:ControlType.Number,title:\"Entry Duration\",defaultValue:.6,min:.2,max:2,step:.01,unit:\"s\"},visibleDuration:{type:ControlType.Number,title:\"Visible Duration\",defaultValue:4,min:1,max:10,step:.1,unit:\"s\"},exitDuration:{type:ControlType.Number,title:\"Exit Duration\",defaultValue:.6,min:.2,max:2,step:.01,unit:\"s\"},stagger:{type:ControlType.Number,title:\"Stagger Delay\",defaultValue:.12,min:.05,max:.5,step:.01,unit:\"s\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"PartnerLogos\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutHeight\":\"fixed\",\"framerIntrinsicHeight\":\"64\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutWidth\":\"any-prefer-fixed\",\"framerIntrinsicWidth\":\"480\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./PartnerLogos.map"],"mappings":"kPAE+mD,SAAS,EAAI,EAAE,EAAE,CAAC,OAAO,EAAE,EAAE,GAAG,CAAE,CAQ9oD,SAAwB,EAAa,EAAM,CAAC,GAAK,CAAC,QAAM,EAAc,YAAU,EAAE,UAAQ,GAAG,gBAAc,GAAG,kBAAgB,EAAE,eAAa,GAAG,UAAQ,IAAI,QAAM,cAAY,EAAE,cAAY,OAAO,cAAY,IAAI,EAAY,EAAS,EAAoB,EAAQ,EAAIA,EAAO,IAAI,EAAQ,EAAO,EAAU,EAAI,CAAC,OAAO,EAAE,CAAC,EAAO,CAAC,EAAM,GAAUC,EAAS,OAAO,EAChW,CAAC,EAAW,GAAeA,EAAS,CAAC,EAAO,CAAC,EAAW,GAAeA,EAAS,MAAM,CAAW,CAAC,CAAC,KAAK,QAAQ,CAAC,EACjH,CAAC,EAAO,GAAWA,EAAS,EAAK,EAAO,CAAC,EAAW,GAAeA,EAAS,EAAI,EAAO,CAAC,EAAQ,GAAYA,EAAS,EAAK,EAC1H,EAASC,MAAY,CAAC,GAAG,CAAC,GAAO,EAAM,SAAS,EAAE,OAAO,EAAc,GAAG,EAAM,QAAQ,EAAY,OAAO,EACjH,IAAM,EAAI,CAAC,EAAE,IAAI,IAAI,EAAE,EAAE,EAAE,EAAY,IAAK,EAAI,KAAK,EAAM,EAAE,EAAM,OAAO,EAAG,OAAO,CAAI,EAAE,CAAC,EAAM,CAAW,CAAC,EACvG,EAAMA,MAAY,CAAC,IAAM,EAAI,CAAC,EAAE,IAAI,IAAI,EAAE,EAAE,EAAE,EAAY,IAAK,EAAI,KAAK,EAAS,EAAI,EAAW,EAAY,EAAE,EAAS,MAAM,EAAE,EAAG,OAAO,CAAI,EAAE,CAAC,EAAS,EAAW,CAAW,CAAC,EAMtL,OALA,MAAc,CAAC,GAAG,CAAC,EAAQ,OAAO,GAAG,EAAS,CAAC,EAAc,MAAM,CAAW,CAAC,CAAC,KAAK,SAAS,CAAC,EAAE,MAAO,CAAC,GAAG,CAAC,EAAO,CAAC,EAAU,EAAI,EAAE,MAAO,CAAI,GAAQ,EAAU,EAAK,EAAG,IAAI,EAAS,CAAC,EAAE,GAAG,IAAQ,QAAS,EAAc,MAAM,CAAW,CAAC,CAAC,KAAK,QAAQ,CAAC,EAAE,eAAe,CAAC,IAAI,IAAI,EAAE,EAAE,EAAE,EAAY,IAAK,EAAS,KAAK,eAAe,CAAC,EAAc,GAAM,CAAC,IAAM,EAAK,CAAC,GAAG,CAAI,EAAqB,MAAnB,GAAK,GAAG,WAAkB,CAAK,CAAC,CAAE,EAAE,EAAE,EAAQ,GAAG,CAAC,EAAE,EAAS,KAAK,eAAe,CAAC,EAAc,GAAM,CAAC,IAAM,EAAK,CAAC,GAAG,CAAI,EAAoB,MAAlB,GAAK,GAAG,UAAiB,CAAK,CAAC,CAAE,EAAE,EAAc,IAAI,EAAE,EAAQ,GAAG,CAAC,EAAG,EAAS,KAAK,eAAe,CAAC,EAAS,SAAS,CAAE,EAAE,EAAc,KAAK,EAAY,GAAG,EAAQ,GAAG,CAAC,CAAE,EAAE,EAAE,OAAQ,GAAG,IAAQ,UAAW,EAAS,KAAK,eAAe,CAAC,EAAS,MAAM,CAAE,EAAE,EAAgB,GAAG,CAAC,OAAQ,GAAG,IAAQ,OAAO,CAAC,IAAI,IAAI,EAAE,EAAE,EAAE,EAAY,IAAK,EAAS,KAAK,eAAe,CAAC,EAAc,GAAM,CAAC,IAAM,EAAK,CAAC,GAAG,CAAI,EAAoB,MAAlB,GAAK,GAAG,UAAiB,CAAK,CAAC,CAAE,EAAE,EAAE,EAAQ,GAAG,CAAC,EAAE,EAAS,KAAK,eAAe,CAAC,EAAc,GAAM,CAAC,IAAM,EAAK,CAAC,GAAG,CAAI,EAAmB,MAAjB,GAAK,GAAG,SAAgB,CAAK,CAAC,CAAE,EAAE,EAAa,IAAI,EAAE,EAAQ,GAAG,CAAC,EAAG,EAAS,KAAK,eAAe,CAAC,EAAc,GAAM,EAAK,CAAC,EAAE,EAAc,MAAM,CAAW,CAAC,CAAC,KAAK,QAAQ,CAAC,EAAE,EAAS,OAAO,CAAE,EAAE,EAAa,KAAK,EAAY,GAAG,EAAQ,GAAG,CAAC,CAAE,CAAC,UAAU,CAAC,EAAS,QAAQ,YAAY,CAAE,CAAE,EAAE,CAAC,EAAM,EAAO,EAAO,EAAc,EAAgB,EAAa,EAAQ,EAAS,EAAQ,CAAW,CAAC,EACt4C,MAAc,CAAC,EAAW,EAAI,CAAE,EAAE,CAAC,CAAC,EACpC,MAAc,CAAI,IAAa,IAAQ,EAAc,CAAM,EAAoC,EAA9B,EAA6C,EAAI,EAAE,CAAC,EAAO,CAAU,CAAC,EAGnH,EAAK,MAAM,CAAK,MAAI,MAAM,CAAC,GAAG,EAAM,MAAM,OAAO,OAAO,OAAO,QAAQ,OAAO,cAAc,MAAM,WAAW,SAAS,eAAe,IAAc,OAAO,gBAAgB,aAAa,IAAI,IAAc,QAAQ,EAAY,IAAA,GAAU,SAAS,WAAW,SAAS,SAAS,WAAW,aAAa,EAAE,SAAS,EAAM,KAAK,EAAK,IAAI,CACxV,IAAM,EAAM,EAAS,UAAU,EAAW,GACtC,EAAW,EAAM,EAAQ,EAAK,IAAQ,UAAU,EAAQ,EAAE,EAAW,IAAY,IAAQ,YAAY,EAAQ,EAAE,EAAW,GAAW,IAAQ,YAAW,EAAQ,EAAE,EAAW,KACjL,IAAM,EAAW,IAAQ,WAAW,aAAa,EAAc,uCAAuC,EAAc,6BAA6B,IAAQ,UAAU,aAAa,EAAa,uCAAuC,EAAa,6BAA6B,OACxQ,EAAO,EAAK,KAAK,OAAO,EAAK,KAAM,UAAU,EAAK,IAAI,KAAK,CAAC,CAAC,WAAW,MAAM,EAAE,OAAoB,EAAK,MAAM,CAAC,MAAM,CAAC,QAAQ,OAAO,WAAW,SAAS,eAAe,SAAS,MAAM,OAAO,OAAO,OAAO,SAAS,EAAE,UAAU,EAAE,aAAW,UAAQ,UAAU,cAAc,EAAW,YAAY,EAAU,GAAG,WAAW,oBAAoB,cAAc,MAAM,EAAE,cAAc,IAAQ,UAAU,SAAS,EAAoB,EAAK,MAAM,CAAC,IAAI,EAAK,IAAI,IAAI,EAAK,KAAK,OAAO,MAAM,CAAC,QAAQ,QAAQ,MAAM,OAAO,OAAO,OAAO,SAAS,OAAO,UAAU,OAAO,UAAU,UAAU,YAAY,MAAM,EAAE,UAAU,EAAK,CAAC,EAAe,EAAK,OAAO,CAAC,MAAM,CAAC,QAAQ,eAAe,MAAM,OAAO,OAAO,OAAO,WAAW,EAAE,cAAc,QAAQ,EAAE,wBAAwB,CAAC,OAAO,EAAK,GAAG,EAAE,aAAa,EAAK,KAAK,OAAO,KAAK,KAAK,CAAC,CAAC,EAAE,EAAE,IAAI,CAAU,CAAE,CAAC,CAAC,CAAC,CAAE,mBAvBjyB,IAAqD,IAAkF,EAAO,EAAc,CAAC,CAAC,IAAI,0QAA0Q,IAAI,QAAQ,EAAE,CAAC,IAAI,0QAA0Q,IAAI,QAAQ,EAAE,CAAC,IAAI,0QAA0Q,IAAI,QAAQ,EAAE,CAAC,IAAI,0QAA0Q,IAAI,QAAQ,EAAE,CAAC,IAAI,0QAA0Q,IAAI,QAAQ,CAAC,EAuB3wB,EAAoB,EAAa,CAAC,MAAM,CAAC,KAAK,EAAY,MAAM,MAAM,QAAQ,QAAQ,CAAC,KAAK,EAAY,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,EAAY,KAAK,iBAAiB,CAAC,KAAK,EAAE,MAAM,UAAU,EAAE,IAAI,CAAC,KAAK,EAAY,OAAO,MAAM,WAAW,aAAa,MAAM,CAAC,CAAC,EAAE,aAAa,CAAa,EAAE,UAAU,CAAC,KAAK,EAAY,OAAO,MAAM,aAAa,aAAa,EAAE,IAAI,GAAG,IAAI,EAAE,KAAK,GAAG,EAAE,YAAY,CAAC,KAAK,EAAY,OAAO,MAAM,gBAAgB,aAAa,EAAE,IAAI,EAAE,IAAI,GAAG,KAAK,CAAC,EAAE,YAAY,CAAC,KAAK,EAAY,KAAK,MAAM,eAAe,QAAQ,CAAC,OAAO,OAAO,EAAE,aAAa,CAAC,OAAO,OAAO,EAAE,aAAa,MAAM,EAAE,YAAY,CAAC,KAAK,EAAY,OAAO,MAAM,eAAe,aAAa,GAAG,IAAI,EAAE,IAAI,GAAG,KAAK,EAAE,KAAK,KAAK,OAAO,GAAO,EAAM,cAAc,OAAO,EAAE,cAAc,CAAC,KAAK,EAAY,OAAO,MAAM,iBAAiB,aAAa,GAAG,IAAI,GAAG,IAAI,EAAE,KAAK,IAAI,KAAK,GAAG,EAAE,gBAAgB,CAAC,KAAK,EAAY,OAAO,MAAM,mBAAmB,aAAa,EAAE,IAAI,EAAE,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,EAAE,aAAa,CAAC,KAAK,EAAY,OAAO,MAAM,gBAAgB,aAAa,GAAG,IAAI,GAAG,IAAI,EAAE,KAAK,IAAI,KAAK,GAAG,EAAE,QAAQ,CAAC,KAAK,EAAY,OAAO,MAAM,gBAAgB,aAAa,IAAI,IAAI,IAAI,IAAI,GAAG,KAAK,IAAI,KAAK,GAAG,CAAC,CAAC"}