{"version":3,"file":"Carousel_Controls_5.DA0brP4e.mjs","names":["useRef","useState","useMemo"],"sources":["https:/framerusercontent.com/modules/9eRsLe2Coq6KEhIBtRln/8jrqBKvCy0U21jpAHQRq/Carousel_Controls_5.js"],"sourcesContent":["// Arrow controls for carousels and scroll containers\n// Fixed for Framer published sites: robust DOM detection, multiple fallback strategies\nimport{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{useEffect,useLayoutEffect,useMemo,useRef,useState}from\"react\";import{addPropertyControls,ControlType}from\"framer\";/**\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight any\n */export default function CarouselControls(props){const{direction=\"horizontal\",arrowColor=\"#000000\",backgroundColor=\"#F5F5F5\",borderRadius=8,border={borderWidth:0,borderStyle:\"solid\",borderColor:\"#000000\"},size=40,arrowSize=16,spacing=12,layout=\"flex-start\",selectedCarousel=\"\",showLabels=false,previousLabel=\"Previous\",nextLabel=\"Next\",font,useCustomIcons=false,previousIcon=\"\",nextIcon=\"\",enableHover=true,hoverScale=1.05,hoverBackgroundColor,hoverArrowColor,hoverBorderColor,style}=props;const carouselRef=useRef(null);const isScrollContainerRef=useRef(false);const selfRef=useRef(null);const[canGoPrevious,setCanGoPrevious]=useState(false);const[canGoNext,setCanGoNext]=useState(true);const isHorizontal=direction===\"horizontal\";// rAF batcher\nconst schedule=useRef(null);const batched=fn=>{if(schedule.current!=null)return;schedule.current=requestAnimationFrame(()=>{schedule.current=null;fn();});};// Check if an element is a scrollable container\nconst isScrollable=el=>{const style=window.getComputedStyle(el);const overflow=style.overflow+style.overflowX+style.overflowY;if(!/scroll|auto/.test(overflow))return false;return el.scrollWidth>el.clientWidth+2||el.scrollHeight>el.clientHeight+2;};const checkScrollState=container=>{if(!container){setCanGoPrevious(false);setCanGoNext(false);return;}if(isHorizontal){const left=Math.round(container.scrollLeft);const max=container.scrollWidth-container.clientWidth;setCanGoPrevious(left>1);setCanGoNext(left<max-1);}else{const top=Math.round(container.scrollTop);const max=container.scrollHeight-container.clientHeight;setCanGoPrevious(top>1);setCanGoNext(top<max-1);}};/**\n     * Multi-strategy carousel finder — works in both canvas and published site.\n     * Strategy order:\n     * 1. data-framer-name (canvas)\n     * 2. Nearest scrollable sibling/cousin in the same Framer stack\n     * 3. Class/aria heuristics\n     * 4. Any scrollable element on the page\n     */const queryCarousel=()=>{if(typeof window===\"undefined\")return null;const name=selectedCarousel?.trim().toLowerCase();// ── Strategy 1: exact data-framer-name ──────────────────────────────\nif(name){const byFramerName=document.querySelector(`[data-framer-name=\"${CSS.escape(selectedCarousel.trim())}\"]`);if(byFramerName)return byFramerName;}// ── Strategy 2: walk UP from self to find a common Framer parent,\n//    then look for scrollable children / siblings ───────────────────\nconst self=selfRef.current;if(self){// Walk up to find a shared container (up to 6 levels)\nlet ancestor=self.parentElement;for(let i=0;i<6&&ancestor;i++){// Check all descendants of this ancestor for scroll containers\nconst scrollables=Array.from(ancestor.querySelectorAll(\"*\")).filter(el=>el!==self&&!self.contains(el)&&isScrollable(el));if(scrollables.length){// If name given, try to match\nif(name){const matched=scrollables.find(el=>(el.getAttribute(\"data-framer-name\")||el.className||el.getAttribute(\"aria-label\")||\"\").toLowerCase().includes(name));if(matched)return matched;}// Return the largest scrollable (most likely the carousel track)\nreturn scrollables.sort((a,b)=>b.scrollWidth*b.scrollHeight-a.scrollWidth*a.scrollHeight)[0];}ancestor=ancestor.parentElement;}}// ── Strategy 3: class / aria heuristics ─────────────────────────────\nif(name){const byClass=Array.from(document.querySelectorAll(\"*\")).find(el=>el.className?.toLowerCase?.().includes(name)&&(isScrollable(el)||el.querySelector(\"button\")));if(byClass)return byClass;const byAria=Array.from(document.querySelectorAll(\"[role],[aria-label],[data-framer-name]\")).find(el=>(el.getAttribute(\"aria-label\")||el.getAttribute(\"data-framer-name\")||\"\").toLowerCase().includes(name));if(byAria)return byAria;}// ── Strategy 4: fallback — first scrollable element on page ─────────\nconst allScrollable=Array.from(document.querySelectorAll(\"*\")).filter(el=>el!==selfRef.current&&!selfRef.current?.contains(el)&&isScrollable(el));if(allScrollable.length){return allScrollable.sort((a,b)=>b.scrollWidth*b.scrollHeight-a.scrollWidth*a.scrollHeight)[0];}return null;};const updateForCarousel=el=>{carouselRef.current=el;const isScroll=el?isScrollable(el):false;isScrollContainerRef.current=isScroll;if(!el){setCanGoPrevious(false);setCanGoNext(true)// keep next enabled as default\n;return;}if(isScroll){checkScrollState(el);return;}// Non-scroll: check inner buttons / indicators\nconst prevBtn=el.querySelector('[aria-label*=\"previous\" i], .carousel-prev, .prev, [data-action=\"prev\"]');const nextBtn=el.querySelector('[aria-label*=\"next\" i], .carousel-next, .next, [data-action=\"next\"]');if(prevBtn)setCanGoPrevious(!prevBtn.disabled&&!prevBtn.hasAttribute(\"aria-disabled\"));if(nextBtn)setCanGoNext(!nextBtn.disabled&&!nextBtn.hasAttribute(\"aria-disabled\"));const indicators=el.querySelectorAll('[role=\"tab\"], .carousel-indicator, .slide-indicator');if(indicators.length){const active=el.querySelector('[role=\"tab\"][aria-selected=\"true\"], .carousel-indicator.active, .slide-indicator.active');if(active){const list=Array.from(indicators);const i=list.indexOf(active);setCanGoPrevious(i>0);setCanGoNext(i<list.length-1);return;}}};// Retry finding carousel with backoff (helps on published sites where DOM\n// hydrates slightly after component mounts)\nconst tryFind=(attempts=0)=>{const el=queryCarousel();if(el){updateForCarousel(el);return;}if(attempts<5){setTimeout(()=>tryFind(attempts+1),150*(attempts+1));}};useLayoutEffect(()=>{tryFind();},[selectedCarousel,direction]);// Scroll listener\nuseEffect(()=>{const el=carouselRef.current;if(!el||!isScrollContainerRef.current)return;const onScroll=()=>batched(()=>checkScrollState(el));el.addEventListener(\"scroll\",onScroll,{passive:true});checkScrollState(el);return()=>el.removeEventListener(\"scroll\",onScroll);},[carouselRef.current,direction]);// MutationObserver to catch Framer re-renders\nuseLayoutEffect(()=>{const el=carouselRef.current;if(!el)return;const observer=new MutationObserver(()=>batched(()=>updateForCarousel(el)));observer.observe(el,{subtree:true,childList:true,attributes:true,attributeFilter:[\"class\",\"style\",\"data-framer-name\",\"aria-selected\",\"aria-current\",\"disabled\",\"aria-disabled\"]});return()=>observer.disconnect();},[carouselRef.current]);const clickOrKey=type=>{// Re-query in case the ref is stale (common after Framer re-renders)\nconst el=carouselRef.current??queryCarousel();if(!el)return;// Refresh ref\ncarouselRef.current=el;if(isScrollContainerRef.current||isScrollable(el)){isScrollContainerRef.current=true;const delta=(isHorizontal?el.clientWidth:el.clientHeight)*.85*(type===\"prev\"?-1:1);if(isHorizontal)el.scrollBy({left:delta,behavior:\"smooth\"});else el.scrollBy({top:delta,behavior:\"smooth\"});setTimeout(()=>checkScrollState(el),400);return;}// Try clicking inner prev/next buttons\nconst selector=type===\"prev\"?'[aria-label*=\"previous\" i], .carousel-prev, .prev, [data-action=\"prev\"]':'[aria-label*=\"next\" i], .carousel-next, .next, [data-action=\"next\"]';const target=el.querySelector(selector);if(target){target.click();setTimeout(()=>updateForCarousel(el),100);return;}// Keyboard fallback\nconst focusable=el.querySelector('[tabindex], button, [role=\"button\"]');if(focusable){focusable.focus();const key=isHorizontal?type===\"prev\"?\"ArrowLeft\":\"ArrowRight\":type===\"prev\"?\"ArrowUp\":\"ArrowDown\";focusable.dispatchEvent(new KeyboardEvent(\"keydown\",{key,bubbles:true}));setTimeout(()=>updateForCarousel(el),100);}};// Always allow clicking even if state says disabled (re-query on click)\nconst previousEnabled=canGoPrevious;const nextEnabled=canGoNext;const baseButtonStyle=useMemo(()=>({width:size,height:size,backgroundColor,border:border.borderWidth>0?`${border.borderWidth}px ${border.borderStyle} ${border.borderColor}`:\"none\",borderRadius,display:\"flex\",alignItems:\"center\",justifyContent:\"center\",transition:enableHover?\"transform .18s cubic-bezier(.4,0,.2,1), opacity .18s, background-color .18s, border-color .18s\":\"opacity .18s\",willChange:enableHover?\"transform\":undefined,userSelect:\"none\",cursor:\"pointer\",transform:\"scale(1)\",transformOrigin:\"center\"}),[size,backgroundColor,borderRadius,border,enableHover]);const arrowStyle=useMemo(()=>({width:arrowSize,height:arrowSize,fill:\"none\",stroke:arrowColor,strokeWidth:2,strokeLinecap:\"round\",strokeLinejoin:\"round\",transition:\"stroke .18s\"}),[arrowSize,arrowColor]);const containerStyle=useMemo(()=>({display:\"flex\",alignItems:\"center\",justifyContent:layout,gap:spacing,flexDirection:isHorizontal?\"row\":\"column\",...style?.width===undefined&&{width:\"100%\"},...style?.height===undefined&&{height:\"100%\"}}),[spacing,isHorizontal,layout,style]);const labelStyle=useMemo(()=>({...font||{},color:arrowColor,margin:0,userSelect:\"none\"}),[font,arrowColor]);const[hoveredButton,setHoveredButton]=useState(null);const getButtonStyle=(enabled,buttonType)=>{const isHovered=enableHover&&hoveredButton===buttonType;const scale=isHovered?hoverScale:1;const bgColor=isHovered&&hoverBackgroundColor?hoverBackgroundColor:backgroundColor;const borderColor=isHovered&&hoverBorderColor&&border.borderWidth>0?hoverBorderColor:border.borderColor;return{...baseButtonStyle,// Never fully disable — just reduce opacity so clicks still work\nopacity:enabled?1:.4,cursor:\"pointer\",transform:`scale(${scale})`,backgroundColor:bgColor,border:border.borderWidth>0?`${border.borderWidth}px ${border.borderStyle} ${borderColor}`:\"none\"};};const renderArrow=(kind,enabled,isHovered=false)=>{const icon=kind===\"prev\"?previousIcon:nextIcon;const currentArrowColor=isHovered&&hoverArrowColor?hoverArrowColor:arrowColor;const finalArrowColor=enabled?currentArrowColor:\"#999999\";if(useCustomIcons&&icon){return /*#__PURE__*/_jsx(\"img\",{src:icon,alt:kind===\"prev\"?\"previous\":\"next\",style:{width:size*.5,height:size*.5,objectFit:\"contain\",opacity:enabled?1:.4,transition:\"opacity .18s\"}});}return /*#__PURE__*/_jsx(\"svg\",{style:{...arrowStyle,stroke:finalArrowColor,transition:\"stroke .18s\"},viewBox:\"0 0 24 24\",\"aria-hidden\":true,children:/*#__PURE__*/_jsx(\"path\",{d:kind===\"prev\"?\"M15 18l-6-6 6-6\":\"M9 18l6-6-6-6\"})});};const buttonGroupStyle=useMemo(()=>({display:\"flex\",alignItems:\"center\",gap:8,flexDirection:isHorizontal?\"row\":\"column\",overflow:\"visible\"}),[isHorizontal]);return /*#__PURE__*/_jsxs(\"div\",{ref:selfRef,style:{...containerStyle,...style,overflow:\"visible\"},children:[/*#__PURE__*/_jsxs(\"div\",{style:buttonGroupStyle,children:[/*#__PURE__*/_jsx(\"button\",{style:getButtonStyle(previousEnabled,\"prev\"),onClick:()=>clickOrKey(\"prev\"),// NOT using disabled attribute — prevents click events on some browsers\n\"aria-label\":\"Previous\",onMouseEnter:()=>enableHover&&setHoveredButton(\"prev\"),onMouseLeave:()=>enableHover&&setHoveredButton(null),children:renderArrow(\"prev\",previousEnabled,hoveredButton===\"prev\")}),showLabels&&/*#__PURE__*/_jsx(\"span\",{style:labelStyle,children:previousLabel})]}),/*#__PURE__*/_jsxs(\"div\",{style:buttonGroupStyle,children:[/*#__PURE__*/_jsx(\"button\",{style:getButtonStyle(nextEnabled,\"next\"),onClick:()=>clickOrKey(\"next\"),\"aria-label\":\"Next\",onMouseEnter:()=>enableHover&&setHoveredButton(\"next\"),onMouseLeave:()=>enableHover&&setHoveredButton(null),children:renderArrow(\"next\",nextEnabled,hoveredButton===\"next\")}),showLabels&&/*#__PURE__*/_jsx(\"span\",{style:labelStyle,children:nextLabel})]})]});}addPropertyControls(CarouselControls,{selectedCarousel:{type:ControlType.String,title:\"Select Carousel\",defaultValue:\"\",placeholder:\"Enter carousel name...\"},direction:{type:ControlType.Enum,title:\"Direction\",options:[\"horizontal\",\"vertical\"],optionTitles:[\"↔\",\"↕\"],defaultValue:\"horizontal\",displaySegmentedControl:true},size:{type:ControlType.Number,title:\"Button Size\",defaultValue:40,min:24,max:80,step:4,unit:\"px\"},arrowSize:{type:ControlType.Number,title:\"Arrow Size\",defaultValue:16,min:8,max:40,step:1,unit:\"px\",hidden:({useCustomIcons})=>useCustomIcons},spacing:{type:ControlType.Number,title:\"Spacing\",defaultValue:12,min:0,max:40,step:2,unit:\"px\"},layout:{type:ControlType.Enum,title:\"Layout\",options:[\"flex-start\",\"center\",\"flex-end\",\"space-between\",\"space-around\",\"space-evenly\"],optionTitles:[\"Start\",\"Center\",\"End\",\"Space Between\",\"Space Around\",\"Space Evenly\"],defaultValue:\"flex-start\"},useCustomIcons:{type:ControlType.Boolean,title:\"Custom Icons\",defaultValue:false,enabledTitle:\"Custom\",disabledTitle:\"Default\"},previousIcon:{type:ControlType.File,title:\"Previous Icon\",allowedFileTypes:[\"jpg\",\"jpeg\",\"png\",\"gif\",\"webp\",\"svg\"],hidden:({useCustomIcons})=>!useCustomIcons},nextIcon:{type:ControlType.File,title:\"Next Icon\",allowedFileTypes:[\"jpg\",\"jpeg\",\"png\",\"gif\",\"webp\",\"svg\"],hidden:({useCustomIcons})=>!useCustomIcons},arrowColor:{type:ControlType.Color,title:\"Arrow Color\",defaultValue:\"#000000\",hidden:({useCustomIcons})=>useCustomIcons},backgroundColor:{type:ControlType.Color,title:\"Background Color\",defaultValue:\"#F5F5F5\"},borderRadius:{type:ControlType.Number,title:\"Border Radius\",defaultValue:8,min:0,step:1,unit:\"px\"},border:{type:ControlType.Border,title:\"Border\",defaultValue:{borderWidth:0,borderStyle:\"solid\",borderColor:\"rgba(0, 0, 0, 0.5)\"}},enableHover:{type:ControlType.Boolean,title:\"Hover Effects\",defaultValue:true,enabledTitle:\"Enabled\",disabledTitle:\"Disabled\"},hoverScale:{type:ControlType.Number,title:\"Hover Scale\",defaultValue:1.05,min:1,max:1.5,step:.01,displayStepper:true,hidden:({enableHover})=>!enableHover},hoverBackgroundColor:{type:ControlType.Color,title:\"Hover Background\",defaultValue:\"\",hidden:({enableHover})=>!enableHover},hoverArrowColor:{type:ControlType.Color,title:\"Hover Arrow Color\",defaultValue:\"\",hidden:({enableHover,useCustomIcons})=>!enableHover||useCustomIcons},hoverBorderColor:{type:ControlType.Color,title:\"Hover Border Color\",defaultValue:\"\",hidden:({enableHover,border})=>!enableHover||border.borderWidth===0},showLabels:{type:ControlType.Boolean,title:\"Show Labels\",defaultValue:false,enabledTitle:\"Show\",disabledTitle:\"Hide\"},previousLabel:{type:ControlType.String,title:\"Previous Label\",defaultValue:\"Previous\",hidden:({showLabels})=>!showLabels},nextLabel:{type:ControlType.String,title:\"Next Label\",defaultValue:\"Next\",hidden:({showLabels})=>!showLabels},font:{type:ControlType.Font,title:\"Label Font\",defaultValue:{fontSize:\"14px\",variant:\"Medium\",letterSpacing:\"-0.01em\",lineHeight:\"1em\"},controls:\"extended\",defaultFontType:\"sans-serif\",hidden:({showLabels})=>!showLabels}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"CarouselControls\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutHeight\":\"any\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutWidth\":\"any\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Carousel_Controls_5.map"],"mappings":"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"}