{"version":3,"file":"InfiniteTicker.xAgd5M2Q.mjs","names":["useRef","useState","useCallback","useMemo"],"sources":["https:/framerusercontent.com/modules/rHO4aNIIkGiQnPDOPXfp/pQ1mfmUhkxea02tHR2Y3/InfiniteTicker.js"],"sourcesContent":["// Infinite, seamless ticker for Framer slot content\nimport{jsx as _jsx}from\"react/jsx-runtime\";import{addPropertyControls,ControlType,useIsStaticRenderer}from\"framer\";import{motion,useMotionValue,useReducedMotion}from\"framer-motion\";import{useCallback,useEffect,useLayoutEffect,useMemo,useRef,useState}from\"react\";const MAX_SCROLL_BOOST=1e3;const MAX_FRAME_DELTA=64;const VELOCITY_DECAY_PER_SECOND=6;function wrapTrackPosition(value,distance){if(distance<=0)return 0;return((value+distance)%distance+distance)%distance-distance;}/**\n * @framerDisableUnlink\n *\n * @framerIntrinsicWidth 1200\n * @framerIntrinsicHeight 144\n *\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight auto\n */export default function InfiniteTicker(props){const{children,speed=50,direction=\"left\",gap=20,verticalAlign=\"center\",scrollToReverse=false,scrollToSpeed=false}=props;const contentRef=useRef(null);const containerRef=useRef(null);const[contentWidth,setContentWidth]=useState(0);const[containerWidth,setContainerWidth]=useState(0);const[maxHeight,setMaxHeight]=useState(0);const[isInView,setIsInView]=useState(true);const lastScrollY=useRef(0);const lastScrollTime=useRef(0);const scrollVelocity=useRef(0);const scrollFrame=useRef(null);const resizeFrame=useRef(null);const currentDirectionRef=useRef(direction);const x=useMotionValue(0);const isStatic=useIsStaticRenderer();const prefersReducedMotion=useReducedMotion();const measureContent=useCallback(()=>{const content=contentRef.current;if(!content)return;const width=content.offsetWidth;let tallest=0;for(const child of Array.from(content.children)){tallest=Math.max(tallest,child.offsetHeight);}setContentWidth(width);setMaxHeight(tallest);},[]);const measureContainer=useCallback(()=>{const container=containerRef.current;if(!container)return;setContainerWidth(container.offsetWidth);},[]);useLayoutEffect(()=>{measureContent();measureContainer();if(typeof ResizeObserver===\"undefined\")return;const resizeObserver=new ResizeObserver(()=>{if(resizeFrame.current!==null){cancelAnimationFrame(resizeFrame.current);}resizeFrame.current=requestAnimationFrame(()=>{measureContent();measureContainer();resizeFrame.current=null;});});const content=contentRef.current;const container=containerRef.current;if(content)resizeObserver.observe(content);if(container)resizeObserver.observe(container);return()=>{resizeObserver.disconnect();if(resizeFrame.current!==null){cancelAnimationFrame(resizeFrame.current);resizeFrame.current=null;}};},[children,gap,measureContent,measureContainer]);useEffect(()=>{currentDirectionRef.current=direction;},[direction,scrollToReverse]);useEffect(()=>{if(typeof window===\"undefined\"||typeof IntersectionObserver===\"undefined\"||isStatic){setIsInView(true);return;}const container=containerRef.current;if(!container)return;const observer=new IntersectionObserver(([entry])=>setIsInView(entry?.isIntersecting??true),{rootMargin:\"200px 0px\"});observer.observe(container);return()=>observer.disconnect();},[isStatic]);const numCopies=useMemo(()=>{if(contentWidth<=0)return 1;const loopDistance=contentWidth+gap;return Math.max(2,Math.ceil(containerWidth/loopDistance)+1);},[contentWidth,containerWidth,gap]);useEffect(()=>{if(typeof window===\"undefined\"||isStatic||!isInView||!scrollToReverse&&!scrollToSpeed){scrollVelocity.current=0;return;}lastScrollY.current=window.scrollY;lastScrollTime.current=performance.now();const handleScroll=()=>{if(scrollFrame.current!==null)return;scrollFrame.current=requestAnimationFrame(()=>{const currentScrollY=window.scrollY;const currentTime=performance.now();const timeDelta=Math.max(1,currentTime-lastScrollTime.current);const scrollDifference=currentScrollY-lastScrollY.current;if(scrollToSpeed){const velocity=Math.abs(scrollDifference)/timeDelta*1e3;scrollVelocity.current=Math.min(MAX_SCROLL_BOOST,velocity);}if(scrollToReverse&&scrollDifference!==0){currentDirectionRef.current=scrollDifference<0?direction===\"left\"?\"right\":\"left\":direction;}lastScrollY.current=currentScrollY;lastScrollTime.current=currentTime;scrollFrame.current=null;});};window.addEventListener(\"scroll\",handleScroll,{passive:true});return()=>{window.removeEventListener(\"scroll\",handleScroll);scrollVelocity.current=0;if(scrollFrame.current!==null){cancelAnimationFrame(scrollFrame.current);scrollFrame.current=null;}};},[direction,isInView,isStatic,scrollToReverse,scrollToSpeed]);useEffect(()=>{if(typeof window===\"undefined\"||isStatic||prefersReducedMotion||!isInView||contentWidth<=0)return;const loopDistance=contentWidth+gap;let frameId=null;let previousTime=performance.now();const tick=time=>{const delta=Math.min(time-previousTime,MAX_FRAME_DELTA);previousTime=time;if(typeof document===\"undefined\"||!document.hidden){if(scrollToSpeed&&scrollVelocity.current>0){scrollVelocity.current*=Math.exp(-VELOCITY_DECAY_PER_SECOND*delta/1e3);if(scrollVelocity.current<.5){scrollVelocity.current=0;}}const effectiveSpeed=Math.max(0,speed+(scrollToSpeed?scrollVelocity.current:0));const movement=effectiveSpeed*delta/1e3;const signedMovement=currentDirectionRef.current===\"left\"?-movement:movement;x.set(wrapTrackPosition(x.get()+signedMovement,loopDistance));}frameId=requestAnimationFrame(tick);};frameId=requestAnimationFrame(tick);return()=>{if(frameId!==null)cancelAnimationFrame(frameId);};},[contentWidth,gap,isInView,isStatic,prefersReducedMotion,scrollToSpeed,speed,x]);const isAnimationActive=!isStatic&&!prefersReducedMotion&&isInView&&contentWidth>0;const alignmentStyle=useMemo(()=>({alignItems:verticalAlign===\"top\"?\"flex-start\":verticalAlign===\"bottom\"?\"flex-end\":\"center\"}),[verticalAlign]);return /*#__PURE__*/_jsx(\"div\",{ref:containerRef,style:{...props.style,width:\"100%\",height:maxHeight>0?`${maxHeight}px`:\"100%\",minHeight:\"5px\",overflow:\"hidden\",position:\"relative\",display:\"flex\"},children:/*#__PURE__*/_jsx(motion.div,{style:{display:\"flex\",gap:`${gap}px`,position:\"absolute\",top:0,left:0,willChange:isAnimationActive?\"transform\":\"auto\",height:\"100%\",x},children:Array.from({length:numCopies}).map((_,index)=>{const isDuplicate=index>0;return /*#__PURE__*/_jsx(\"div\",{ref:index===0?contentRef:element=>{if(element)element.setAttribute(\"inert\",\"\");},style:{display:\"flex\",gap:`${gap}px`,...alignmentStyle,height:\"100%\",pointerEvents:isDuplicate?\"none\":\"auto\"},\"aria-hidden\":isDuplicate,children:children},index);})})});}addPropertyControls(InfiniteTicker,{children:{type:ControlType.Slot,title:\"Items\"},speed:{type:ControlType.Number,title:\"Speed\",defaultValue:50,min:1,max:500,step:1},direction:{type:ControlType.Enum,title:\"Direction\",options:[\"left\",\"right\"],optionTitles:[\"Left\",\"Right\"],defaultValue:\"left\",displaySegmentedControl:true},gap:{type:ControlType.Number,title:\"Gap\",defaultValue:20,min:0,max:500,step:1,unit:\"px\"},verticalAlign:{type:ControlType.Enum,title:\"Alignment\",options:[\"top\",\"center\",\"bottom\"],optionTitles:[\"Top\",\"Center\",\"Bottom\"],defaultValue:\"center\",displaySegmentedControl:true},scrollToReverse:{type:ControlType.Boolean,title:\"Scroll to Reverse\",defaultValue:false},scrollToSpeed:{type:ControlType.Boolean,title:\"Scroll to Speed\",defaultValue:false,description:\"Component made by [Anton Drukarov](https://templatoria.com/)\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"InfiniteTicker\",\"slots\":[\"children\"],\"annotations\":{\"framerIntrinsicWidth\":\"1200\",\"framerSupportedLayoutWidth\":\"any-prefer-fixed\",\"framerContractVersion\":\"1\",\"framerIntrinsicHeight\":\"144\",\"framerDisableUnlink\":\"*\",\"framerSupportedLayoutHeight\":\"auto\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./InfiniteTicker.map"],"mappings":"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"}