{"version":3,"file":"ScrollReactiveLogoStrip.C9HSJsYC.mjs","names":["React.useRef","React.useState","React.useMemo","_Fragment"],"sources":["https:/framerusercontent.com/modules/ByzusIiK2o14kRazMSmh/u06WcuzpYZkdmFaUwkct/ScrollReactiveLogoStrip.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from\"react/jsx-runtime\";import*as React from\"react\";import{motion,useAnimationFrame,useMotionValue,useScroll}from\"framer-motion\";import{addPropertyControls,ControlType}from\"framer\";const SPACING_KEYS=[\"topPadding\",\"bottomPadding\",\"leftPadding\",\"rightPadding\",\"logoSpacing\"];const SPACING_CONTROL_DEFAULTS={topPadding:40,bottomPadding:40,leftPadding:64,rightPadding:64,logoSpacing:64};const EDGE_FADE_CONTROL_DEFAULTS={edgeFade:true,fadeWidth:100,fadeOpacity:1};const RESPONSIVE_PRESETS={desktop:{minWidth:900,spacing:{topPadding:40,bottomPadding:40,leftPadding:64,rightPadding:64,logoSpacing:64},fadeWidth:100},tablet:{minWidth:480,spacing:{topPadding:40,bottomPadding:40,leftPadding:40,rightPadding:40,logoSpacing:64},fadeWidth:100},mobile:{spacing:{topPadding:24,bottomPadding:24,leftPadding:16,rightPadding:16,logoSpacing:40},fadeWidth:48}};const getResponsivePreset=width=>{if(width>=RESPONSIVE_PRESETS.desktop.minWidth){return RESPONSIVE_PRESETS.desktop;}if(width>=RESPONSIVE_PRESETS.tablet.minWidth){return RESPONSIVE_PRESETS.tablet;}return RESPONSIVE_PRESETS.mobile;};const parseColorChannels=color=>{if(!color)return null;const trimmed=color.trim();if(trimmed.startsWith(\"#\")){const hex=trimmed.slice(1);if(hex.length===3||hex.length===6){const normalized=hex.length===3?hex.split(\"\").map(c=>c+c).join(\"\"):hex;return{r:parseInt(normalized.substring(0,2),16),g:parseInt(normalized.substring(2,4),16),b:parseInt(normalized.substring(4,6),16)};}}const match=trimmed.replace(/\\s+/g,\"\").match(/^rgba?\\((\\d{1,3}),(\\d{1,3}),(\\d{1,3})(?:,(0|1|0?\\.\\d+))?\\)$/i);if(match){return{r:parseInt(match[1],10),g:parseInt(match[2],10),b:parseInt(match[3],10)};}return null;};const hexToRgb=color=>{const channels=parseColorChannels(color)||{r:255,g:255,b:255};return`${channels.r}, ${channels.g}, ${channels.b}`;};// NOTE: This component is intentionally a near-duplicate of `LogoCarousel.tsx`\n// as a baseline for adding scroll-reactive behavior.\nexport default function LogoCarouselScrollReactiveVariant(props){const{items=[],speed=50,logoSpacing,backgroundColor=\"#ffffff\",topPadding,bottomPadding,leftPadding,rightPadding,hoverPause=true,scrollDirection=\"left\",scrollReverse=\"On\",burst=\"On\",edgeFade=true,fadeWidth,fadeOpacity=.8,edgeFadeGroup,spacingGroup}=props;const containerRef=React.useRef(null);const trackRef=React.useRef(null);const segmentRef=React.useRef(null);const isCanvasEnvironment=typeof window!==\"undefined\"&&window.location?.pathname?.includes(\"/canvas\");const[segmentWidth,setSegmentWidth]=React.useState(0);const frameWidth=typeof props.width===\"number\"?props.width:undefined;const[measuredWidth,setMeasuredWidth]=React.useState(frameWidth??null);React.useLayoutEffect(()=>{const node=containerRef.current;if(!node)return;const updateWidth=()=>{const nextWidth=node.getBoundingClientRect().width;if(!Number.isNaN(nextWidth)&&nextWidth>0){setMeasuredWidth(prev=>{if(prev===null||Math.abs(prev-nextWidth)>.5){return nextWidth;}return prev;});}};updateWidth();const observer=new ResizeObserver(updateWidth);observer.observe(node);return()=>observer.disconnect();},[props.width]);const responsiveWidth=measuredWidth??frameWidth??1200;const responsivePreset=getResponsivePreset(responsiveWidth);const spacingValues=spacingGroup??{};const parseSpacingValue=value=>{if(typeof value===\"number\"&&!Number.isNaN(value))return value;if(typeof value===\"string\"){const parsed=parseFloat(value);return Number.isNaN(parsed)?undefined:parsed;}return undefined;};const spacingHasCustomValue=key=>{const controlValue=parseSpacingValue(spacingValues[key]);return controlValue!==undefined&&controlValue!==SPACING_CONTROL_DEFAULTS[key];};const resolveSpacingValue=(key,propValue)=>{if(spacingHasCustomValue(key)){return parseSpacingValue(spacingValues[key])??responsivePreset.spacing[key];}if(typeof propValue===\"number\"){return propValue;}return responsivePreset.spacing[key];};const resolvedTopPadding=resolveSpacingValue(\"topPadding\",topPadding);const resolvedBottomPadding=resolveSpacingValue(\"bottomPadding\",bottomPadding);const resolvedLeftPadding=resolveSpacingValue(\"leftPadding\",leftPadding);const resolvedRightPadding=resolveSpacingValue(\"rightPadding\",rightPadding);const resolvedLogoSpacing=resolveSpacingValue(\"logoSpacing\",logoSpacing);const mergedEdgeFade=edgeFadeGroup?.edgeFade??edgeFade;const fadeWidthFromControls=edgeFadeGroup&&edgeFadeGroup.fadeWidth!==undefined?Number(edgeFadeGroup.fadeWidth):undefined;const fadeWidthHasCustom=fadeWidthFromControls!==undefined&&fadeWidthFromControls!==EDGE_FADE_CONTROL_DEFAULTS.fadeWidth;const mergedFadeWidth=(fadeWidthHasCustom?fadeWidthFromControls:undefined)??(typeof fadeWidth===\"number\"?fadeWidth:undefined)??responsivePreset.fadeWidth;const mergedFadeOpacity=edgeFadeGroup?.fadeOpacity??fadeOpacity;const mergedFadeColor=backgroundColor;const activeItems=React.useMemo(()=>(items??[]).filter(item=>item!=null),[items]);const containerStyle={backgroundColor,boxSizing:\"border-box\",width:\"100%\",height:props.height??\"auto\",display:\"flex\",flexDirection:\"column\",alignItems:\"stretch\",paddingTop:resolvedTopPadding,paddingBottom:resolvedBottomPadding,paddingLeft:resolvedLeftPadding,paddingRight:resolvedRightPadding};const innerStyle={display:\"flex\",flexDirection:\"column\",alignItems:\"center\",width:\"100%\",overflow:\"hidden\"};const trackBaseStyle={display:\"flex\",alignItems:\"center\",width:\"max-content\",flexWrap:\"nowrap\"};const measurementSegmentStyle={display:\"flex\",alignItems:\"center\",gap:resolvedLogoSpacing,paddingRight:resolvedLogoSpacing,flexShrink:0,position:\"absolute\",visibility:\"hidden\",pointerEvents:\"none\",top:0,left:0,width:\"max-content\"};const logoWrapperStyle={display:\"flex\",alignItems:\"center\",justifyContent:\"center\",flexShrink:0};const renderItems=(itemsToRender,keyPrefix)=>itemsToRender.map((layer,index)=>/*#__PURE__*/_jsx(\"div\",{className:\"logo-carousel__logo\",\"data-name\":`Item ${index+1}`,style:logoWrapperStyle,children:/*#__PURE__*/_jsx(\"div\",{style:{display:\"flex\",alignItems:\"center\",justifyContent:\"center\"},children:layer})},`${keyPrefix}-${index}`));const showEdgeFade=mergedEdgeFade&&mergedFadeWidth>0&&mergedFadeOpacity>0;const trackWrapperStyle={width:\"100%\",overflow:\"hidden\",position:\"relative\"};React.useLayoutEffect(()=>{const updateSegmentWidth=()=>{if(segmentRef.current){const nextWidth=segmentRef.current.getBoundingClientRect().width;if(!Number.isNaN(nextWidth)&&nextWidth>0){setSegmentWidth(nextWidth);}}};updateSegmentWidth();let observer=null;if(typeof ResizeObserver!==\"undefined\"&&segmentRef.current){observer=new ResizeObserver(()=>updateSegmentWidth());observer.observe(segmentRef.current);}else if(typeof window!==\"undefined\"){window.addEventListener(\"resize\",updateSegmentWidth);}return()=>{if(observer){observer.disconnect();}else if(typeof window!==\"undefined\"){window.removeEventListener(\"resize\",updateSegmentWidth);}};},[items,resolvedLogoSpacing,responsiveWidth]);const marqueeX=useMotionValue(0);const[isHovering,setIsHovering]=React.useState(false);const isHoveringRef=React.useRef(false);const baseDirectionMultiplier=scrollDirection===\"right\"?1:-1;const shouldReverseOnScroll=scrollReverse!==\"Off\";const shouldBurst=burst!==\"Off\";const lastScrollYRef=React.useRef(null);const scrollDirRef=React.useRef(1)// 1 = scrolling down, -1 = scrolling up\n;const{scrollY}=useScroll();const smoothedDeltaRef=React.useRef(1/60)// seconds\n;const smoothedVelocityRef=React.useRef(0)// px / second\n;const smoothedDirectionRef=React.useRef(baseDirectionMultiplier)// [-1..1]\n;// Burst impulse model:\n// - `burstTargetRef` accumulates \"energy\" from scroll (target impulse).\n// - `burstImpulseRef` follows the target with a continuous 2nd-order filter\n//   for heavier, more inertial motion (no sharp acceleration).\nconst burstTargetRef=React.useRef(0)// px / second (target additive impulse)\n;const burstImpulseRef=React.useRef(0)// px / second (actual additive impulse)\n;const burstImpulseVelRef=React.useRef(0)// px / second^2 (impulse derivative)\n;const lastScrollSampleTimeRef=React.useRef(null);React.useEffect(()=>{// Track page scroll direction (down vs up). Used only when Scroll Reverse is enabled.\nconst unsubscribe=scrollY.on(\"change\",latest=>{const last=lastScrollYRef.current;if(typeof latest!==\"number\"||Number.isNaN(latest))return;// If hover-pause is enabled and we're currently paused by hover,\n// scrolling should immediately \"break\" the pause (user is interacting with the page).\nif(hoverPause&&isHoveringRef.current){isHoveringRef.current=false;setIsHovering(false);}// Compute scroll velocity (px/s) for burst impulse.\nconst now=typeof performance!==\"undefined\"?performance.now():Date.now();const lastTime=lastScrollSampleTimeRef.current;if(last!=null&&lastTime!=null){const dt=Math.max(.001,Math.min((now-lastTime)/1e3,.1));const scrollVel=(latest-last)/dt;if(shouldBurst){// Add to a \"target reservoir\" based on scroll velocity magnitude.\n// This is intentionally conservative; the per-frame filter creates the inertial feel.\nconst impulseAdd=Math.min(110,Math.max(0,Math.abs(scrollVel)*.028));burstTargetRef.current=Math.min(160,burstTargetRef.current+impulseAdd);}}lastScrollSampleTimeRef.current=now;if(last==null){lastScrollYRef.current=latest;return;}if(latest===last)return;scrollDirRef.current=latest>last?1:-1;lastScrollYRef.current=latest;});return()=>{unsubscribe?.();};},[scrollY,shouldBurst,hoverPause]);const marqueeItems=React.useMemo(()=>{return activeItems.length>0?[...activeItems,...activeItems]:[];},[activeItems]);React.useEffect(()=>{marqueeX.set(baseDirectionMultiplier===1?-segmentWidth:0);smoothedDirectionRef.current=baseDirectionMultiplier;},[segmentWidth,marqueeX,baseDirectionMultiplier]);const clampNumber=(value,min,max)=>Math.max(min,Math.min(max,value));const wrapRange=(value,min,max)=>{const range=max-min;if(range===0)return min;const wrapped=((value-min)%range+range)%range;return wrapped+min;};const smoothingAlpha=(responsePerSecond,dtSeconds)=>{// First-order low-pass filter coefficient. Higher response => quicker adaptation.\n// This is not an easing curve/spring; it's a simple numerical smoothing filter.\nreturn 1-Math.exp(-responsePerSecond*dtSeconds);};useAnimationFrame((t,delta)=>{if(segmentWidth<=0||marqueeItems.length===0)return;if(hoverPause&&isHoveringRef.current)return;// Stabilize delta time to reduce jitter and avoid huge jumps (tab switching, hitching).\nconst dtRaw=delta/1e3;const dtClamped=clampNumber(dtRaw,0,.05);if(dtClamped<=0)return;const dtAlpha=smoothingAlpha(18,dtClamped);const dtSmoothed=smoothedDeltaRef.current+(dtClamped-smoothedDeltaRef.current)*dtAlpha;smoothedDeltaRef.current=dtSmoothed;const clampedSpeed=Math.max(0,Math.min(100,speed));const durationSeconds=32-clampedSpeed/100*(32-8);const safeDurationSeconds=Math.max(durationSeconds,.1);const targetVelocity=segmentWidth/safeDurationSeconds// px / second\n;const velocityAlpha=smoothingAlpha(10,dtSmoothed);smoothedVelocityRef.current=smoothedVelocityRef.current+(targetVelocity-smoothedVelocityRef.current)*velocityAlpha;// Burst: heavier + more inertial (continuous, no sharp acceleration).\n// 1) Slowly decay the target reservoir.\nconst targetDecay=Math.exp(-6.2*dtSmoothed);burstTargetRef.current=(shouldBurst?burstTargetRef.current:0)*targetDecay;// 2) Follow the target with a continuous 2nd-order smoothing filter.\n// This behaves like a \"mass\" that lags behind changes in the target.\n// Keep it slightly underdamped (ζ < 1) but with acceleration/velocity limits\n// to avoid any sharp feeling.\nconst omega=14.5// faster settling (shorter burst)\n;const zeta=.99// very damped (minimize overshoot)\n;const x=burstImpulseRef.current;const v=burstImpulseVelRef.current;const target=burstTargetRef.current;const accelUnclamped=omega*omega*(target-x)-2*zeta*omega*v;const maxAccel=2200// px/s^2 (quicker response, still clamped)\n;const accel=clampNumber(accelUnclamped,-maxAccel,maxAccel);const nextVUnclamped=v+accel*dtSmoothed;const maxV=420// px/s (limits travel distance)\n;const nextV=clampNumber(nextVUnclamped,-maxV,maxV);const nextX=x+nextV*dtSmoothed;burstImpulseVelRef.current=nextV;burstImpulseRef.current=nextX;const effectiveVelocity=smoothedVelocityRef.current+burstImpulseRef.current;const scrollReverseMultiplier=shouldReverseOnScroll&&scrollDirRef.current===-1?-1:1;const targetDirection=baseDirectionMultiplier*scrollReverseMultiplier// -1 or 1\n;const directionAlpha=smoothingAlpha(14,dtSmoothed);smoothedDirectionRef.current=smoothedDirectionRef.current+(targetDirection-smoothedDirectionRef.current)*directionAlpha;// Integrate position with smoothed velocity + smoothed direction.\nconst current=marqueeX.get();const nextUnwrapped=current+effectiveVelocity*dtSmoothed*smoothedDirectionRef.current;// Keep x in a continuous modulo range so wrapping is mathematically seamless.\n// Valid range for the duplicated track is [-segmentWidth, 0).\nconst next=wrapRange(nextUnwrapped,-segmentWidth,0);marqueeX.set(next);});return /*#__PURE__*/_jsx(\"div\",{ref:containerRef,className:\"logo-carousel\",\"data-name\":\"Logo Carousel\",\"data-node-id\":\"18:17\",style:containerStyle,children:/*#__PURE__*/_jsx(\"div\",{className:\"logo-carousel__inner\",\"data-name\":\"Inner Container\",\"data-node-id\":\"5:761\",style:innerStyle,children:/*#__PURE__*/_jsxs(\"div\",{className:\"logo-carousel__track-wrapper\",\"data-name\":\"Logo Row\",\"data-node-id\":\"5:834\",style:trackWrapperStyle,children:[/*#__PURE__*/_jsx(\"div\",{className:\"logo-carousel__track logo-carousel__track--visible\",style:{...trackBaseStyle,width:\"max-content\",gap:resolvedLogoSpacing,flexWrap:\"nowrap\",justifyContent:\"flex-start\",margin:responsiveWidth<900?\"0 auto\":undefined,opacity:isCanvasEnvironment?1:0},children:activeItems.length===0?/*#__PURE__*/_jsx(\"div\",{style:{width:\"100%\",textAlign:\"center\",fontSize:14,color:\"rgba(0,0,0,0.5)\",padding:\"12px 0\"},children:\"Add Items in the Inspector\"}):renderItems(activeItems,\"visible\")}),!isCanvasEnvironment&&marqueeItems.length>0&&/*#__PURE__*/_jsx(motion.div,{ref:trackRef,className:\"logo-carousel__track logo-carousel__track--marquee\",style:{...trackBaseStyle,position:\"absolute\",inset:0,gap:resolvedLogoSpacing,pointerEvents:hoverPause?\"auto\":\"none\",opacity:1,x:marqueeX},onMouseEnter:()=>{if(!hoverPause)return;isHoveringRef.current=true;setIsHovering(true);},onMouseLeave:()=>{if(!hoverPause)return;isHoveringRef.current=false;setIsHovering(false);},children:renderItems(marqueeItems,\"marquee\")}),/*#__PURE__*/_jsx(\"div\",{ref:segmentRef,className:\"logo-carousel__segment-measurement\",style:measurementSegmentStyle,\"aria-hidden\":\"true\",children:renderItems(activeItems,\"measurement\")}),showEdgeFade&&/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(\"div\",{className:\"logo-carousel__fade logo-carousel__fade--left\",style:{position:\"absolute\",top:0,left:0,width:mergedFadeWidth,height:\"100%\",pointerEvents:\"none\",backgroundImage:`linear-gradient(to right, rgba(${hexToRgb(mergedFadeColor)}, ${mergedFadeOpacity}) 0%, rgba(${hexToRgb(mergedFadeColor)}, 0) 100%)`}}),/*#__PURE__*/_jsx(\"div\",{className:\"logo-carousel__fade logo-carousel__fade--right\",style:{position:\"absolute\",top:0,right:0,width:mergedFadeWidth,height:\"100%\",pointerEvents:\"none\",backgroundImage:`linear-gradient(to left, rgba(${hexToRgb(mergedFadeColor)}, ${mergedFadeOpacity}) 0%, rgba(${hexToRgb(mergedFadeColor)}, 0) 100%)`}})]})]})})});}LogoCarouselScrollReactiveVariant.defaultProps={items:[],hoverPause:true,scrollDirection:\"left\",scrollReverse:\"On\",burst:\"On\",speed:50,width:1200,backgroundColor:\"#ffffff\",edgeFade:true,fadeOpacity:1,edgeFadeGroup:{...EDGE_FADE_CONTROL_DEFAULTS}};addPropertyControls(LogoCarouselScrollReactiveVariant,{backgroundColor:{type:ControlType.Color,title:\"Background\",defaultValue:\"#ffffff\"},items:{type:ControlType.Array,title:\"Items\",defaultValue:[],// Important: Framer does not reliably render ComponentInstance when nested inside Array->Object.\n// Use an Array of ComponentInstance directly to get the native dropdown per row (Ticker-like).\ncontrol:{type:ControlType.ComponentInstance,title:\"Layer\"}},edgeFadeGroup:{type:ControlType.Object,title:\"Edge Fade\",defaultValue:{...EDGE_FADE_CONTROL_DEFAULTS},controls:{edgeFade:{type:ControlType.Boolean,title:\"Enable Fade\",defaultValue:true},fadeWidth:{type:ControlType.Number,title:\"Fade Width\",min:40,max:300,step:1,unit:\"px\",defaultValue:EDGE_FADE_CONTROL_DEFAULTS.fadeWidth},fadeOpacity:{type:ControlType.Number,title:\"Fade Opacity\",min:0,max:1,step:.05,defaultValue:EDGE_FADE_CONTROL_DEFAULTS.fadeOpacity}}},scrollDirection:{type:ControlType.SegmentedEnum,title:\"Scroll To\",options:[\"left\",\"right\"],optionTitles:[\"Left\",\"Right\"],defaultValue:\"left\"},scrollReverse:{type:ControlType.SegmentedEnum,title:\"Scroll Reverse\",options:[\"On\",\"Off\"],defaultValue:\"On\"},burst:{type:ControlType.SegmentedEnum,title:\"Burst\",options:[\"On\",\"Off\"],defaultValue:\"On\"},hoverPause:{type:ControlType.Boolean,title:\"Hover Pause\",defaultValue:true},speed:{type:ControlType.Number,title:\"Speed\",min:0,max:100,step:1},spacingGroup:{type:ControlType.Object,title:\"Spacing\",defaultValue:{...SPACING_CONTROL_DEFAULTS},controls:{topPadding:{type:ControlType.Number,title:\"Top Padding\",min:0,max:200,step:4,defaultValue:SPACING_CONTROL_DEFAULTS.topPadding},bottomPadding:{type:ControlType.Number,title:\"Bottom Padding\",min:0,max:200,step:4,defaultValue:SPACING_CONTROL_DEFAULTS.bottomPadding},leftPadding:{type:ControlType.Number,title:\"Left Padding\",min:0,max:200,step:4,defaultValue:SPACING_CONTROL_DEFAULTS.leftPadding},rightPadding:{type:ControlType.Number,title:\"Right Padding\",min:0,max:200,step:4,defaultValue:SPACING_CONTROL_DEFAULTS.rightPadding},logoSpacing:{type:ControlType.Number,title:\"Logo Gap\",min:8,max:160,step:4,defaultValue:SPACING_CONTROL_DEFAULTS.logoSpacing}}}});\nexport const __FramerMetadata__ = {\"exports\":{\"LogoCarouselScrollReactiveVariantProps\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"reactComponent\",\"name\":\"LogoCarouselScrollReactiveVariant\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./ScrollReactiveLogoStrip.map"],"mappings":"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"}