{
  "version": 3,
  "sources": ["ssg:https://framerusercontent.com/modules/84KHUPc8wFc2eQtbXpMT/NiwdxzvPR4CikvIJM7Qa/InfiniteDragTicker.js"],
  "sourcesContent": ["import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from\"react/jsx-runtime\";import{motion,useMotionValue,useAnimationFrame}from\"framer-motion\";import{useLayoutEffect,useRef,useState}from\"react\";import{ControlType}from\"framer\";/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 COMPONENT \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */export default function DraggableTicker({items,children,speed=2,direction=\"left\",gap=24,hover=.2}){/* 1 \u2014 content */const content=items?.length?items:children;/* 2 \u2014 duplicate once for seamless loop */const repeated=/*#__PURE__*/_jsxs(_Fragment,{children:[content,content]});/* 3 \u2014 shared x MotionValue (pixels) */const x=useMotionValue(0);/* 4 \u2014 track width (one copy) */const trackRef=useRef(null);const[w,setW]=useState(0);useLayoutEffect(()=>{const el=trackRef.current;if(!el)return;const measure=()=>setW(el.scrollWidth/2);measure();disableNativeDrag(el);const ro=new ResizeObserver(()=>{measure();disableNativeDrag(el);});ro.observe(el);return()=>ro.disconnect();},[]);/* helper: stop native img / link drag */function disableNativeDrag(root){root.querySelectorAll(\"img, [data-framer-original-type='image'], a\").forEach(el=>{el.setAttribute(\"draggable\",\"false\");el.addEventListener(\"dragstart\",e=>e.preventDefault(),{passive:false});});}/* wrap x so ticker is infinite both ways */const normalize=()=>{if(!w)return;const cur=x.get();if(cur<=-w)x.set(cur+w);if(cur>=0)x.set(cur-w);};/* state flags & momentum */const isDragging=useRef(false);const isHovering=useRef(false);const momentum=useRef(0)// px / s\n;/* 5 \u2014 main loop */useAnimationFrame((_,delta)=>{if(!w)return;/* momentum contribution */const momMove=momentum.current*(delta/1e3);/* auto-scroll (paused while dragging) */const autoMove=isDragging.current?0:(direction===\"left\"?-1:1)*(isHovering.current?speed*hover:speed)*delta/1e3;x.set(x.get()+autoMove+momMove);normalize();/* decay momentum each frame */momentum.current*=.92;if(Math.abs(momentum.current)<5)momentum.current=0// stop when slow\n;});/* 6 \u2014 drag handlers */const onDragStart=()=>{isDragging.current=true;momentum.current=0// cancel leftover glide\n;};const onDrag=(_,info)=>{x.set(x.get()+info.delta.x);normalize();};const onDragEnd=(_,info)=>{isDragging.current=false;momentum.current=info.velocity.x// px / s\n;};/* 7 \u2014 visual container */return /*#__PURE__*/_jsx(motion.div,{ref:trackRef,className:\"draggable-ticker\",style:{display:\"flex\",gap,x,cursor:\"grab\",userSelect:\"none\",width:\"max-content\"},drag:\"x\",dragConstraints:{left:-Infinity,right:Infinity},dragElastic:0,dragMomentum:false,onDragStart:onDragStart,onDrag:onDrag,onDragEnd:onDragEnd,onMouseEnter:()=>isHovering.current=true,onMouseLeave:()=>isHovering.current=false,whileTap:{cursor:\"grabbing\"},children:repeated});}/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 property controls \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */DraggableTicker.propertyControls={items:{type:ControlType.Array,title:\"Children\",control:{type:ControlType.ComponentInstance}},speed:{type:ControlType.Number,title:\"Speed (px/s)\",defaultValue:2,min:0,max:200,step:1},direction:{type:ControlType.Enum,title:\"Direction\",options:[\"left\",\"right\"],optionTitles:[\"\u2190\",\"\u2192\"],defaultValue:\"left\"},gap:{type:ControlType.Number,title:\"Gap (px)\",defaultValue:24,min:0,max:200,step:1},hover:{type:ControlType.Number,title:\"Hover slow\",defaultValue:.2,min:0,max:1,step:.05}};/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 one-time CSS \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */if(typeof document!==\"undefined\"&&!document.getElementById(\"tickerCSS\")){const s=document.createElement(\"style\");s.id=\"tickerCSS\";s.innerHTML=`.draggable-ticker::-webkit-scrollbar{display:none}`;document.head.appendChild(s);}\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"DraggableTicker\",\"slots\":[\"children\"],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./InfiniteDragTicker.map"],
  "mappings": "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",
  "names": ["DraggableTicker", "items", "children", "speed", "direction", "gap", "hover", "content", "repeated", "u", "l", "x", "useMotionValue", "trackRef", "pe", "w", "setW", "ye", "fe", "el", "measure", "disableNativeDrag", "ro", "root", "e", "normalize", "cur", "isDragging", "isHovering", "momentum", "useAnimationFrame", "_", "delta", "momMove", "autoMove", "onDragStart", "onDrag", "info", "onDragEnd", "p", "motion", "ControlType", "s"]
}
