{"version":3,"file":"ImageCarousel.BiWNNdda.mjs","names":["useRef","useState","useMemo","useCallback","__esmMin","init_npm_react_18_3_1","j","pe","de","window","init_ssg_sandbox_shims","init_jsx_runtime","K","ne","le","c","p","ce","_e","addPropertyControls","init_framer_BikQVKhx","ControlType","warmDecode","el","pickFromSrcSet","srcSet","extractImageUrls","urls","visit","n","u","bg","m","node","seen","ImageCarousel","props","galleryHostRef","extractedFromDom","setExtractedFromDom","fromReactTree","source","cmsGallery","host","scheduled","scan","found","s","img","ss","deduped","prev","v","i","schedule","mo","normalizedImages","images","count","virtualCount","WINDOW","currentIndex","setCurrentIndex","items","ci","mod","half","out","k","slot","RADIUS","a","b","containerRef","trackRef","nodes","itemsRef","virtualCountRef","widthRef","offsetRef","nextX","dragBase","isDragging","hasDragged","startX","scaleRef","history","rafId","animating","committing","pendingDir","animToken","timerId","lastInteraction","propsRef","getScale","getPitch","list","cw","getVelocity","h","VELOCITY_WINDOW","dt","paint","track","x","pitch","so","dist","killTransitions","it","cancelAnim","readTrackX","settle","vc","dir","animateTo","from","target","duration","token","sideOpacity","centerWidth","gap","measure","ro","onEnd","e","autoPlay","ms","autoPlayInterval","id","handlePointerDown","handlePointerMove","now","delta","CLICK_THRESHOLD","RUBBER","handlePointerUp","rect","px","side","projected","PROJECT_MS","trigger","MIN_TRIGGER_PX","MAX_TRIGGER_PX","FLICK_PX_PER_MS","handleKeyDown","centerOffset","hiddenHost","style","init_ImageCarousel"],"sources":["https:/framerusercontent.com/modules/6EVBSPv4hKuaBnKHcbiB/MJRBHmUW3357s261MJig/ImageCarousel.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{addPropertyControls,ControlType}from\"framer\";import{useRef,useCallback,useEffect,useLayoutEffect,useState,useMemo,isValidElement,Children}from\"react\";// How many slides are kept mounted on each side of center.\n// Slots ±1 are partially visible, ±2 and ±3 sit outside the clip and act as\n// preload buffers, so an image is always decoded before it can be seen.\nconst RADIUS=3;const WINDOW=RADIUS*2+1;// Movement under this is a click, not a drag: nothing moves, nothing fades.\nconst CLICK_THRESHOLD=3;const RUBBER=.3;// --- Swipe feel. Tune these if it's still too eager / too stubborn. ---\n// Swipe Threshold is a % of the slide pitch, which gets absurd on wide\n// containers (20% of a 970px pitch = 195px of dragging). Clamp it to a real\n// distance the hand actually travels.\nconst MAX_TRIGGER_PX=30;const MIN_TRIGGER_PX=12;// Where the slide would coast to if we let it. A flick counts as intent even\n// when the finger barely moved.\nconst PROJECT_MS=250;// Velocity is measured over the last N ms of movement, not the whole drag.\nconst VELOCITY_WINDOW=100;// Any release still moving at least this fast advances, whatever the distance.\n// Caps the Velocity Threshold control, whose 0.5 px/ms default is 500 px/s —\n// faster than an ordinary mouse drag, so it almost never fired.\nconst FLICK_PX_PER_MS=.12;const mod=(n,m)=>(n%m+m)%m;// Slots ±2/±3 live outside the container's clip, so the browser never paints\n// them and therefore never decodes them — the first time one slides into view\n// it paints a blank (transparent) frame while decoding. decode() warms the\n// bitmap while the slide is still off-screen. Once per element, not per render.\nfunction warmDecode(el){if(!el||!el.src||el.dataset.warm===el.src)return;el.dataset.warm=el.src;el.decode?.().catch(()=>{});}function pickFromSrcSet(srcSet){const first=srcSet.split(\",\")[0]?.trim().split(/\\s+/)[0];return first||null;}// Recursively pull every image URL out of a rendered React tree.\nfunction extractImageUrls(node){const urls=[];const visit=n=>{if(n==null||typeof n===\"boolean\"||typeof n===\"string\")return;if(Array.isArray(n))return n.forEach(visit);if(!/*#__PURE__*/isValidElement(n))return;const p=n.props;if(n.type===\"img\"){if(typeof p.src===\"string\"&&p.src)urls.push(p.src);else if(typeof p.srcSet===\"string\"){const u=pickFromSrcSet(p.srcSet);if(u)urls.push(u);}}const bg=p?.style?.backgroundImage;if(typeof bg===\"string\"){const m=bg.match(/url\\([\"']?([^\"')]+)[\"']?\\)/);if(m?.[1])urls.push(m[1]);}if(p?.children)Children.forEach(p.children,visit);};visit(node);const seen=new Set;return urls.filter(u=>seen.has(u)?false:(seen.add(u),true));}/**\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight any\n */export default function ImageCarousel(props){const{source=\"cms\",cmsGallery,images=[],centerWidth=80,sideOpacity=.5,transitionDuration=.5,transitionEasing=\"cubic-bezier(0.22, 1, 0.36, 1)\",snapBackDuration=.3,swipeThreshold=20,velocityThreshold=.5,gap=12,borderRadius=12,autoPlay=false,autoPlayInterval=4,style}=props;/* ---------------------------------------------------------------- CMS */const galleryHostRef=useRef(null);const[extractedFromDom,setExtractedFromDom]=useState([]);const fromReactTree=useMemo(()=>source===\"cms\"?extractImageUrls(cmsGallery):[],[source,cmsGallery]);useEffect(()=>{if(source!==\"cms\")return;const host=galleryHostRef.current;if(!host)return;let scheduled=0;const scan=()=>{scheduled=0;const found=[];host.querySelectorAll(\"img\").forEach(img=>{const s=img.currentSrc||img.getAttribute(\"src\");if(s)found.push(s);else{const ss=img.getAttribute(\"srcset\");const u=ss?pickFromSrcSet(ss):null;if(u)found.push(u);}});host.querySelectorAll(\"*\").forEach(el=>{const bg=window.getComputedStyle(el).backgroundImage;if(bg&&bg!==\"none\"){const m=bg.match(/url\\([\"']?([^\"')]+)[\"']?\\)/);if(m?.[1])found.push(m[1]);}});const seen=new Set;const deduped=found.filter(u=>seen.has(u)?false:(seen.add(u),true));setExtractedFromDom(prev=>prev.length===deduped.length&&prev.every((v,i)=>v===deduped[i])?prev:deduped);};// Debounce with rAF: the observer can fire dozens of times per frame\n// while Framer hydrates the gallery, and scan() reads computed styles.\nconst schedule=()=>{if(scheduled)return;scheduled=requestAnimationFrame(scan);};scan();const mo=new MutationObserver(schedule);mo.observe(host,{childList:true,subtree:true,attributes:true,attributeFilter:[\"src\",\"srcset\",\"style\"]});return()=>{mo.disconnect();if(scheduled)cancelAnimationFrame(scheduled);};},[source,cmsGallery]);const normalizedImages=useMemo(()=>{if(source===\"cms\"){return extractedFromDom.length>0?extractedFromDom:fromReactTree;}return images.filter(s=>typeof s===\"string\"&&!!s);},[source,extractedFromDom,fromReactTree,images]);const count=normalizedImages.length;/* ------------------------------------------------------- virtual list */// Every mounted slide keeps a *stable key*, so React never swaps the `src`\n// of an existing <img> — it just moves the node one slot over. That is what\n// removes the flash on every step. When there are fewer images than slots,\n// the list is repeated until it is long enough for the keys to stay unique.\nconst virtualCount=useMemo(()=>{if(count<=1)return count;return count>=WINDOW?count:count*Math.ceil(WINDOW/count);},[count]);const[currentIndex,setCurrentIndex]=useState(0);useEffect(()=>{if(virtualCount>0&&currentIndex>=virtualCount)setCurrentIndex(0);},[virtualCount,currentIndex]);const items=useMemo(()=>{if(virtualCount===0)return[];if(virtualCount===1)return[{k:0,slot:0,src:normalizedImages[0]}];const ci=mod(currentIndex,virtualCount);const half=Math.floor(virtualCount/2);const out=[];for(let k=0;k<virtualCount;k++){const slot=mod(k-ci+half,virtualCount)-half;if(slot<-RADIUS||slot>RADIUS)continue;out.push({k,slot,src:normalizedImages[k%count]});}out.sort((a,b)=>a.k-b.k);return out;},[virtualCount,currentIndex,normalizedImages,count]);/* ---------------------------------------------------------- refs/state */const containerRef=useRef(null);const trackRef=useRef(null);const nodes=useRef(new Map);const itemsRef=useRef(items);const virtualCountRef=useRef(virtualCount);const widthRef=useRef(0);const offsetRef=useRef(0)// current px offset of the track\n;const nextX=useRef(0);const dragBase=useRef(0);const isDragging=useRef(false);const hasDragged=useRef(false);const startX=useRef(0);const scaleRef=useRef(1);const history=useRef([]);const rafId=useRef(0);const animating=useRef(false);const committing=useRef(false);const pendingDir=useRef(0);const animToken=useRef(0);const timerId=useRef(null);const lastInteraction=useRef(0);const propsRef=useRef({centerWidth,gap,sideOpacity,transitionDuration,transitionEasing,snapBackDuration,swipeThreshold,velocityThreshold});propsRef.current={centerWidth,gap,sideOpacity,transitionDuration,transitionEasing,snapBackDuration,swipeThreshold,velocityThreshold};// A parent transform (Framer canvas zoom, a scaled section, a preview\n// frame) makes clientX and getBoundingClientRect() report *screen* px,\n// while translate3d() applies *local* px. offsetWidth is always local, so\n// their ratio converts between the two.\nconst getScale=useCallback(()=>{const c=containerRef.current;if(!c||!c.offsetWidth)return 1;const s=c.getBoundingClientRect().width/c.offsetWidth;return s>.01&&s<100?s:1;},[]);const getPitch=useCallback(()=>{const p=propsRef.current;// Measure the slide itself — it is the element whose width defines the\n// step, and offsetWidth is immune to transforms and to stale caches.\nconst list=itemsRef.current;for(let i=0;i<list.length;i++){const el=nodes.current.get(list[i].k);if(el?.offsetWidth)return el.offsetWidth+p.gap;}const cw=containerRef.current?.offsetWidth||widthRef.current;if(!cw)return 0;widthRef.current=cw;return cw*p.centerWidth/100+p.gap;},[]);// px/ms in local space over the last VELOCITY_WINDOW of pointer movement.\n// Sampling a short recent window instead of averaging the whole gesture\n// means a slow drag that ends in a flick still reads as a flick.\nconst getVelocity=useCallback(()=>{const h=history.current;if(h.length<2)return 0;const a=h[0];const b=h[h.length-1];// Finger parked before release → no throw, whatever happened earlier.\nif(performance.now()-b.t>VELOCITY_WINDOW)return 0;const dt=b.t-a.t;if(dt<1)return 0;return(b.x-a.x)/dt/(scaleRef.current||1);},[]);// Single write path for the track transform + slide opacities.\nconst paint=useCallback(x=>{const track=trackRef.current;if(!track)return;track.style.transform=`translate3d(${x}px,0,0)`;const pitch=getPitch();const p=pitch?x/pitch:0;const so=propsRef.current.sideOpacity;const list=itemsRef.current;for(let i=0;i<list.length;i++){const el=nodes.current.get(list[i].k);if(!el)continue;const dist=Math.abs(list[i].slot-p);const o=dist>=1?so:so+(1-so)*(1-dist);el.style.opacity=`${o>1?1:o}`;el.style.zIndex=dist<.5?\"2\":\"1\";}},[getPitch]);const killTransitions=useCallback(()=>{const track=trackRef.current;if(track)track.style.transition=\"none\";for(const it of itemsRef.current){const el=nodes.current.get(it.k);if(el)el.style.transition=\"none\";}},[]);const cancelAnim=useCallback(()=>{animToken.current++;animating.current=false;pendingDir.current=0;if(timerId.current){clearTimeout(timerId.current);timerId.current=null;}},[]);const readTrackX=useCallback(()=>{const track=trackRef.current;if(!track)return 0;const t=window.getComputedStyle(track).transform;if(!t||t===\"none\")return 0;const m=t.match(/matrix(3d)?\\(([^)]+)\\)/);if(!m)return 0;const v=m[2].split(\",\").map(s=>parseFloat(s));return m[1]?v[12]||0:v[4]||0;},[]);// Called by transitionend *or* by the safety timer — whichever wins.\nconst settle=useCallback(dir=>{animating.current=false;pendingDir.current=0;if(timerId.current){clearTimeout(timerId.current);timerId.current=null;}offsetRef.current=0;const vc=virtualCountRef.current;if(dir!==0&&vc>1){// Do NOT reset the transform here — the track must stay where\n// it is until React commits the new index, otherwise it snaps\n// back for one frame. The layout effect below does the reset in\n// the same commit as the new slot positions.\ncommitting.current=true;setCurrentIndex(prev=>mod(prev+dir,vc));}else{killTransitions();paint(0);}},[killTransitions,paint]);const animateTo=useCallback(dir=>{const track=trackRef.current;if(!track)return;const p=propsRef.current;const pitch=getPitch();const from=offsetRef.current;const target=dir===0?0:-dir*pitch;const duration=dir===0?p.snapBackDuration:p.transitionDuration;cancelAnim();// Nothing to animate → finish now. Without this the component waits\n// forever for a transitionend that never fires and locks up.\nif(!pitch||Math.abs(target-from)<.5){settle(dir);return;}animating.current=true;pendingDir.current=dir;const token=++animToken.current;offsetRef.current=target;track.style.transition=`transform ${duration}s ${p.transitionEasing}`;track.style.transform=`translate3d(${target}px,0,0)`;for(const it of itemsRef.current){const el=nodes.current.get(it.k);if(!el)continue;el.style.transition=`opacity ${duration}s ${p.transitionEasing}`;el.style.opacity=it.slot===dir?\"1\":`${p.sideOpacity}`;el.style.zIndex=it.slot===dir?\"2\":\"1\";}timerId.current=setTimeout(()=>{if(animToken.current!==token)return;settle(dir);},duration*1e3+120);},[getPitch,cancelAnim,settle]);/* --------------------------------------------------------- sync layout */useLayoutEffect(()=>{itemsRef.current=items;virtualCountRef.current=virtualCount;// React has committed the new index — release the gate here, before any\n// early return below, or a commit that lands mid-drag latches it on and\n// every future pointerdown is rejected.\ncommitting.current=false;if(!trackRef.current)return;if(animating.current)return;if(isDragging.current){paint(offsetRef.current);return;}killTransitions();offsetRef.current=0;paint(0);},[items,virtualCount,sideOpacity,centerWidth,gap,paint,killTransitions]);useLayoutEffect(()=>{const c=containerRef.current;if(!c)return;const measure=()=>{widthRef.current=c.offsetWidth;};measure();const ro=new ResizeObserver(()=>{measure();// Percent-based layout follows the resize on its own, but a px\n// offset from a drag/animation would be wrong at the new width.\nif(!isDragging.current&&!animating.current){killTransitions();offsetRef.current=0;paint(0);}});ro.observe(c);return()=>ro.disconnect();},[paint,killTransitions,count]);// count is in the deps on purpose: in CMS mode the first render has no\n// images, so it returns the empty state and there is no track to listen to.\n// Without count the effect would run once against a null ref and never\n// re-run, leaving every step to limp in on the fallback timer.\nuseEffect(()=>{const track=trackRef.current;if(!track)return;const onEnd=e=>{if(e.target!==track||e.propertyName!==\"transform\")return;if(!animating.current)return;settle(pendingDir.current);};track.addEventListener(\"transitionend\",onEnd);return()=>track.removeEventListener(\"transitionend\",onEnd);},[settle,count]);useEffect(()=>()=>{if(rafId.current)cancelAnimationFrame(rafId.current);if(timerId.current)clearTimeout(timerId.current);},[]);/* ------------------------------------------------------------ autoplay */useEffect(()=>{if(!autoPlay||count<=1)return;const ms=Math.max(1,autoPlayInterval)*1e3;const id=setInterval(()=>{if(isDragging.current||animating.current||committing.current)return;if(typeof document!==\"undefined\"&&document.hidden)return;// Pause for one interval after the user touches it, then resume.\nif(performance.now()-lastInteraction.current<ms)return;animateTo(1);},ms);return()=>clearInterval(id);},[autoPlay,autoPlayInterval,count,animateTo]);/* ------------------------------------------------------------- pointer */const handlePointerDown=useCallback(e=>{if(count<=1||committing.current)return;if(e.pointerType===\"mouse\"&&e.button!==0)return;const track=trackRef.current;if(!track)return;lastInteraction.current=performance.now();// Grabbing mid-flight: freeze the track exactly where it is\n// rendered and drag on from there instead of ignoring the input.\nif(animating.current){const dir=pendingDir.current;const x=readTrackX();const pitch=getPitch();cancelAnim();killTransitions();if(dir!==0&&pitch&&Math.abs(x)>pitch*.5&&virtualCountRef.current>1){// The step is more than half done. Adopt it now and keep the\n// leftover as an offset measured from the *new* index —\n// otherwise the drag starts pinned at the clamp limit and\n// can't move forward at all. Nothing moves on screen: the\n// old index at x and the new index at x + dir*pitch are the\n// same pixels, so the commit lands invisibly.\noffsetRef.current=x+dir*pitch;// Set before the state update so the commit's layout effect\n// preserves this offset rather than snapping it to zero.\nisDragging.current=true;setCurrentIndex(prev=>mod(prev+dir,virtualCountRef.current));}else{offsetRef.current=x;paint(x);}}else{killTransitions();}isDragging.current=true;hasDragged.current=false;startX.current=e.clientX;scaleRef.current=getScale();history.current=[{x:e.clientX,t:performance.now()}];dragBase.current=offsetRef.current;try{e.currentTarget.setPointerCapture(e.pointerId);}catch{}const c=containerRef.current;if(c)c.style.cursor=\"grabbing\";},[count,readTrackX,cancelAnim,killTransitions,paint,getScale,getPitch]);const handlePointerMove=useCallback(e=>{if(!isDragging.current)return;const now=performance.now();const h=history.current;h.push({x:e.clientX,t:now});while(h.length>2&&now-h[0].t>VELOCITY_WINDOW)h.shift();const delta=e.clientX-startX.current;if(!hasDragged.current){if(Math.abs(delta)<=CLICK_THRESHOLD)return;hasDragged.current=true;// Start tracking from where the finger is now, so the slide\n// doesn't jump by the threshold distance on the first frame.\nstartX.current=e.clientX;return;}const pitch=getPitch();let x=dragBase.current+(e.clientX-startX.current)/(scaleRef.current||1);if(pitch){if(x>pitch)x=pitch+(x-pitch)*RUBBER;else if(x<-pitch)x=-pitch+(x+pitch)*RUBBER;}nextX.current=x;if(rafId.current)return;rafId.current=requestAnimationFrame(()=>{rafId.current=0;if(!isDragging.current)return;offsetRef.current=nextX.current;paint(nextX.current);});},[getPitch,paint]);const handlePointerUp=useCallback(e=>{if(!isDragging.current)return;isDragging.current=false;if(rafId.current){cancelAnimationFrame(rafId.current);rafId.current=0;offsetRef.current=nextX.current;paint(nextX.current);}try{e.currentTarget.releasePointerCapture(e.pointerId);}catch{}const c=containerRef.current;if(c)c.style.cursor=count>1?\"grab\":\"default\";lastInteraction.current=performance.now();const p=propsRef.current;const pitch=getPitch();const x=offsetRef.current;if(!hasDragged.current&&Math.abs(x)<.5){// A click, not a drag: the track never moved and no opacity was\n// ever written, so the sides navigate and the centre stays\n// completely untouched. (Guarded on x, because a tap that\n// interrupted a running animation leaves the track displaced\n// and still needs to be resolved below.)\nconst rect=containerRef.current?.getBoundingClientRect();if(rect&&rect.width){const px=e.clientX-rect.left;const side=rect.width*(100-p.centerWidth)/200;if(px<side)animateTo(-1);else if(px>rect.width-side)animateTo(1);}return;}const v=getVelocity();// Where the drag is heading, not just where it stopped.\nconst projected=x+v*PROJECT_MS;// Note: no `pitch > 0` guard. If the measurement ever fails, the\n// px floor still gives a working threshold — gating this on pitch\n// meant a bad measurement left a fast full-width flick as the only\n// way to advance.\nconst trigger=Math.min(Math.max(pitch*(p.swipeThreshold/100),MIN_TRIGGER_PX),MAX_TRIGGER_PX);if(Math.abs(projected)>trigger)animateTo(projected<0?1:-1);else if(Math.abs(v)>Math.min(p.velocityThreshold,FLICK_PX_PER_MS))animateTo(v<0?1:-1);else animateTo(0);},[count,getPitch,getVelocity,animateTo,paint]);const handleKeyDown=useCallback(e=>{if(count<=1||isDragging.current||committing.current)return;if(e.key===\"ArrowLeft\"){e.preventDefault();lastInteraction.current=performance.now();animateTo(-1);}else if(e.key===\"ArrowRight\"){e.preventDefault();lastInteraction.current=performance.now();animateTo(1);}},[count,animateTo]);/* -------------------------------------------------------------- render */const centerOffset=(100-centerWidth)/2;const hiddenHost=source===\"cms\"&&cmsGallery?/*#__PURE__*/_jsx(\"div\",{ref:galleryHostRef,\"aria-hidden\":\"true\",style:{position:\"absolute\",width:1,height:1,overflow:\"hidden\",opacity:0,pointerEvents:\"none\",left:-9999,top:-9999},children:cmsGallery}):null;if(count===0){return /*#__PURE__*/_jsxs(\"div\",{style:{...style,position:\"relative\",display:\"flex\",alignItems:\"center\",justifyContent:\"center\",width:\"100%\",height:\"100%\",color:\"#999\",fontFamily:\"Inter, sans-serif\",fontSize:14,padding:16,textAlign:\"center\"},children:[source===\"cms\"?\"Connect a CMS Gallery to the CMS Gallery slot →\":\"Add images to the Images array →\",hiddenHost]});}return /*#__PURE__*/_jsxs(\"div\",{ref:containerRef,tabIndex:0,role:\"region\",\"aria-roledescription\":\"carousel\",onKeyDown:handleKeyDown,onPointerDown:handlePointerDown,onPointerMove:handlePointerMove,onPointerUp:handlePointerUp,onPointerCancel:handlePointerUp,onLostPointerCapture:handlePointerUp,onDragStart:e=>e.preventDefault(),style:{...style,position:\"relative\",width:\"100%\",height:\"100%\",overflow:\"hidden\",cursor:count>1?\"grab\":\"default\",touchAction:\"pan-y\",outline:\"none\",userSelect:\"none\",WebkitUserSelect:\"none\",WebkitTapHighlightColor:\"transparent\",contain:\"layout paint\"},children:[/*#__PURE__*/_jsx(\"div\",{ref:trackRef,style:{position:\"absolute\",inset:0,willChange:\"transform\"},children:items.map(({k,slot,src})=>/*#__PURE__*/_jsx(\"div\",{ref:el=>{if(el)nodes.current.set(k,el);else nodes.current.delete(k);},style:{position:\"absolute\",top:0,left:`${centerOffset}%`,width:`${centerWidth}%`,height:\"100%\",transform:`translate3d(calc(${slot*100}% + ${slot*gap}px),0,0)`,opacity:slot===0?1:sideOpacity,zIndex:slot===0?2:1,borderRadius,overflow:\"hidden\",pointerEvents:\"none\",willChange:\"opacity\"},children:/*#__PURE__*/_jsx(\"img\",{src:src,ref:warmDecode,alt:\"\",draggable:false,decoding:\"async\",loading:\"eager\",style:{width:\"100%\",height:\"100%\",objectFit:\"cover\",display:\"block\",backfaceVisibility:\"hidden\"}})},k))}),hiddenHost]});}addPropertyControls(ImageCarousel,{source:{type:ControlType.Enum,title:\"Source\",defaultValue:\"cms\",options:[\"cms\",\"manual\"],optionTitles:[\"CMS\",\"Manual\"],displaySegmentedControl:true},cmsGallery:{type:ControlType.ComponentInstance,title:\"CMS Gallery\",hidden:props=>props.source!==\"cms\"},images:{type:ControlType.Array,title:\"Images\",control:{type:ControlType.Image},defaultValue:[],hidden:props=>props.source!==\"manual\"},centerWidth:{type:ControlType.Number,title:\"Center Width\",defaultValue:80,min:40,max:95,step:1,unit:\"%\"},sideOpacity:{type:ControlType.Number,title:\"Side Opacity\",defaultValue:.5,min:0,max:1,step:.05},transitionDuration:{type:ControlType.Number,title:\"Transition Speed\",defaultValue:.5,min:.1,max:2,step:.1,unit:\"s\"},transitionEasing:{type:ControlType.Enum,title:\"Easing\",defaultValue:\"cubic-bezier(0.22, 1, 0.36, 1)\",options:[\"cubic-bezier(0.22, 1, 0.36, 1)\",\"cubic-bezier(0.33, 1, 0.68, 1)\",\"cubic-bezier(0.16, 1, 0.3, 1)\",\"cubic-bezier(0.34, 1.56, 0.64, 1)\",\"cubic-bezier(0.65, 0, 0.35, 1)\",\"cubic-bezier(0, 0, 0.2, 1)\",\"ease\",\"linear\"],optionTitles:[\"Ease Out Expo\",\"Ease Out Cubic\",\"Ease Out Quint\",\"Spring\",\"Ease In Out Cubic\",\"Ease Out Quart\",\"Ease\",\"Linear\"]},snapBackDuration:{type:ControlType.Number,title:\"Snap Back Speed\",defaultValue:.3,min:.1,max:1,step:.05,unit:\"s\"},swipeThreshold:{type:ControlType.Number,title:\"Swipe Threshold\",defaultValue:20,min:5,max:50,step:5,unit:\"%\"},velocityThreshold:{type:ControlType.Number,title:\"Velocity Threshold\",defaultValue:.5,min:.1,max:2,step:.1},gap:{type:ControlType.Number,title:\"Gap\",defaultValue:12,min:0,max:48,step:2,unit:\"px\"},borderRadius:{type:ControlType.Number,title:\"Border Radius\",defaultValue:12,min:0,max:48,step:2,unit:\"px\"},autoPlay:{type:ControlType.Boolean,title:\"Auto Play\",defaultValue:false},autoPlayInterval:{type:ControlType.Number,title:\"Interval\",defaultValue:4,min:1,max:20,step:.5,unit:\"s\",hidden:props=>!props.autoPlay}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"ImageCarousel\",\"slots\":[\"cmsGallery\"],\"annotations\":{\"framerSupportedLayoutWidth\":\"any\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutHeight\":\"any\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./ImageCarousel.map"],"mappings":"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"}