{"version":3,"file":"CarouselControls.l3YKrhBO.mjs","names":["useRef","useState","useCallback","_Fragment"],"sources":["https:/framerusercontent.com/modules/H6XgYH9CHVixN0H9S92W/ysw6xTTV2dFVRo13tcpF/CarouselControls.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from\"react/jsx-runtime\";import{addPropertyControls,ControlType,useIsStaticRenderer}from\"framer\";import{useCallback,useEffect,useRef,useState,startTransition}from\"react\";function isScrollableX(el){if(!el)return false;if(el.scrollWidth<=el.clientWidth+4)return false;const overflowX=getComputedStyle(el).overflowX;return overflowX===\"auto\"||overflowX===\"scroll\";}/** Walk up from the controls and find the horizontal scroller they belong to. */function findTrack(root,name){if(!root||typeof document===\"undefined\")return null;let node=root.parentElement;let hops=0;while(node&&hops<8){if(name){const named=node.querySelector(`[data-framer-name=\"${name}\"]`);if(named){if(isScrollableX(named))return named;const inner=Array.from(named.querySelectorAll(\"*\"));const scroller=inner.find(isScrollableX);if(scroller)return scroller;}}const candidates=Array.from(node.querySelectorAll(\"*\"));const fallback=candidates.find(c=>!c.contains(root)&&isScrollableX(c));if(fallback)return fallback;node=node.parentElement;hops++;}return null;}function slideElements(track){const kids=Array.from(track.children);if(kids.length>1)return kids;// Framer often wraps repeated CMS items in a single inner container\nif(kids.length===1){const inner=Array.from(kids[0].children);if(inner.length>1)return inner;}return kids;}/**\n * Carousel Controls\n *\n * Arrows and dot indicators that drive the nearest horizontal\n * scroll container. Pairs with a Framer collection list set to\n * overflow: auto.\n *\n * @framerIntrinsicWidth 240\n * @framerIntrinsicHeight 44\n *\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight auto\n */export default function CarouselControls(props){const{trackName=\"Track\",showArrows=true,showDots=true,alignment=\"center\",gap=24,arrowSize=48,arrowColor=\"#FFFFFF\",arrowBackground=\"#020100\",arrowBorderColor=\"rgba(0, 0, 0, 0)\",dotSize=8,dotColor=\"rgba(255, 255, 255, 0.35)\",dotActiveColor=\"#C6F24E\"}=props;const rootRef=useRef(null);const trackRef=useRef(null);const[count,setCount]=useState(3);const[active,setActive]=useState(0);const[atStart,setAtStart]=useState(true);const[atEnd,setAtEnd]=useState(false);const isStatic=useIsStaticRenderer();const sync=useCallback(()=>{const track=trackRef.current;if(!track)return;const slides=slideElements(track);const left=track.scrollLeft;const max=track.scrollWidth-track.clientWidth;let nearest=0;let best=Infinity;slides.forEach((s,i)=>{const d=Math.abs(s.offsetLeft-track.offsetLeft-left);if(d<best){best=d;nearest=i;}});startTransition(()=>{setCount(slides.length||1);setActive(nearest);setAtStart(left<=2);setAtEnd(left>=max-2);});},[]);useEffect(()=>{if(isStatic||typeof window===\"undefined\")return;let raf=0;const attach=()=>{const track=findTrack(rootRef.current,trackName);trackRef.current=track;if(track){sync();track.addEventListener(\"scroll\",onScroll,{passive:true});}};const onScroll=()=>{cancelAnimationFrame(raf);raf=requestAnimationFrame(sync);};const t=window.setTimeout(attach,60);window.addEventListener(\"resize\",onScroll);return()=>{window.clearTimeout(t);cancelAnimationFrame(raf);window.removeEventListener(\"resize\",onScroll);trackRef.current?.removeEventListener(\"scroll\",onScroll);};},[isStatic,trackName,sync]);const goTo=useCallback(index=>{const track=trackRef.current;if(!track)return;const slides=slideElements(track);const target=slides[Math.max(0,Math.min(slides.length-1,index))];if(!target)return;track.scrollTo({left:target.offsetLeft-track.offsetLeft,behavior:\"smooth\"});},[]);const step=useCallback(dir=>{const track=trackRef.current;if(!track)return;const slides=slideElements(track);if(slides.length>1){goTo(active+dir);return;}track.scrollBy({left:dir*track.clientWidth*.8,behavior:\"smooth\"});},[active,goTo]);const justify=alignment===\"center\"?\"center\":alignment===\"right\"?\"flex-end\":\"flex-start\";const arrowStyle=disabled=>({width:arrowSize,height:arrowSize,borderRadius:arrowSize,border:`1px solid ${arrowBorderColor}`,background:arrowBackground,color:arrowColor,display:\"flex\",alignItems:\"center\",justifyContent:\"center\",cursor:disabled?\"default\":\"pointer\",transition:\"transform 0.2s ease\",padding:0,flexShrink:0});const dots=Array.from({length:Math.max(count,1)});// Lucide \"Arrow Right\" — the same glyph used on the card's Go button\nconst iconSize=Math.round(arrowSize*.46);const arrowIcon=dir=>/*#__PURE__*/_jsx(\"svg\",{width:iconSize,height:iconSize,viewBox:\"0 0 24 24\",fill:\"none\",stroke:\"currentColor\",strokeWidth:2,strokeLinecap:\"round\",strokeLinejoin:\"round\",\"aria-hidden\":\"true\",children:dir===\"right\"?/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(\"path\",{d:\"M5 12h14\"}),/*#__PURE__*/_jsx(\"path\",{d:\"m12 5 7 7-7 7\"})]}):/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(\"path\",{d:\"M19 12H5\"}),/*#__PURE__*/_jsx(\"path\",{d:\"m12 19-7-7 7-7\"})]})});return /*#__PURE__*/_jsxs(\"nav\",{ref:rootRef,\"aria-label\":\"Carousel controls\",style:{...props.style,position:\"relative\",display:\"flex\",alignItems:\"center\",justifyContent:justify,gap,width:\"100%\"},children:[showArrows&&/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",gap:10},children:[/*#__PURE__*/_jsx(\"button\",{type:\"button\",\"aria-label\":\"Previous case study\",onClick:()=>step(-1),disabled:atStart,style:arrowStyle(atStart),children:arrowIcon(\"left\")}),/*#__PURE__*/_jsx(\"button\",{type:\"button\",\"aria-label\":\"Next case study\",onClick:()=>step(1),disabled:atEnd,style:arrowStyle(atEnd),children:arrowIcon(\"right\")})]}),showDots&&/*#__PURE__*/_jsx(\"div\",{role:\"tablist\",\"aria-label\":\"Case studies\",style:{display:\"flex\",alignItems:\"center\",gap:Math.max(6,Math.round(dotSize*.9))},children:dots.map((_,i)=>{const on=i===active;return /*#__PURE__*/_jsx(\"button\",{type:\"button\",role:\"tab\",\"aria-selected\":on,\"aria-label\":`Go to case study ${i+1}`,onClick:()=>goTo(i),style:{width:on?dotSize*2.4:dotSize,height:dotSize,borderRadius:dotSize,background:on?dotActiveColor:dotColor,border:\"none\",padding:0,cursor:\"pointer\",transition:\"width 0.25s ease, background 0.25s ease\"}},i);})})]});}addPropertyControls(CarouselControls,{trackName:{type:ControlType.String,title:\"Track Name\",defaultValue:\"Track\",description:\"Layer name of the scrolling row these controls should drive.\"},showArrows:{type:ControlType.Boolean,title:\"Arrows\",defaultValue:true},showDots:{type:ControlType.Boolean,title:\"Dots\",defaultValue:true},alignment:{type:ControlType.Enum,title:\"Align\",options:[\"left\",\"center\",\"right\"],optionTitles:[\"Left\",\"Center\",\"Right\"],defaultValue:\"center\",displaySegmentedControl:true},gap:{type:ControlType.Number,title:\"Gap\",defaultValue:24,min:0,max:80,unit:\"px\"},arrowSize:{type:ControlType.Number,title:\"Arrow Size\",defaultValue:48,min:28,max:72,unit:\"px\",hidden:props=>!props.showArrows},arrowColor:{type:ControlType.Color,title:\"Arrow\",defaultValue:\"#FFFFFF\",hidden:props=>!props.showArrows},arrowBackground:{type:ControlType.Color,title:\"Arrow BG\",defaultValue:\"#020100\",hidden:props=>!props.showArrows},arrowBorderColor:{type:ControlType.Color,title:\"Arrow Border\",defaultValue:\"rgba(0, 0, 0, 0)\",hidden:props=>!props.showArrows},dotSize:{type:ControlType.Number,title:\"Dot Size\",defaultValue:8,min:4,max:16,unit:\"px\",hidden:props=>!props.showDots},dotColor:{type:ControlType.Color,title:\"Dot\",defaultValue:\"rgba(255, 255, 255, 0.35)\",hidden:props=>!props.showDots},dotActiveColor:{type:ControlType.Color,title:\"Dot Active\",defaultValue:\"#C6F24E\",hidden:props=>!props.showDots}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"CarouselControls\",\"slots\":[],\"annotations\":{\"framerIntrinsicHeight\":\"44\",\"framerIntrinsicWidth\":\"240\",\"framerSupportedLayoutHeight\":\"auto\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutWidth\":\"any-prefer-fixed\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./CarouselControls.map"],"mappings":"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"}