{
  "version": 3,
  "sources": ["ssg:https://framerusercontent.com/modules/jkx0QSHJJRGHApmdnHfs/WfkzQSle4reepDqDrnw0/Cursor.js"],
  "sourcesContent": ["import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from\"react/jsx-runtime\";import{forwardRef,useEffect,useState,useRef}from\"react\";export function withCustomCursor(Component){return /*#__PURE__*/forwardRef((props,ref)=>{// Create refs for cursor elements\nconst dotRef=useRef(null);const outlineRef=useRef(null);// State to track cursor type and conditions\nconst[cursorType,setCursorType]=useState(\"default\");const[isHidden,setIsHidden]=useState(false);const[isClicking,setIsClicking]=useState(false);useEffect(()=>{const dot=dotRef.current;const outline=outlineRef.current;if(!dot||!outline)return;// Handler for cursor movement\nconst handleMouseMove=e=>{const posX=e.clientX;const posY=e.clientY;// Use requestAnimationFrame for smoother animation\nwindow.requestAnimationFrame(()=>{dot.style.left=`${posX}px`;dot.style.top=`${posY}px`;outline.style.left=`${posX}px`;outline.style.top=`${posY}px`;});// Check what element we're hovering at this position\ncheckElementUnderCursor(posX,posY);};// More comprehensive checking for interactive elements\nconst checkElementUnderCursor=(x,y)=>{// Get all elements at the current cursor position\nconst elements=document.elementsFromPoint(x,y);// Check if any of these elements (or their parents) are interactive\nconst isInteractive=elements.some(el=>{const element=el;// Check the element itself\nif(isInteractiveElement(element)){return true;}// Check parent elements\nlet parent=element.parentElement;while(parent){if(isInteractiveElement(parent)){return true;}parent=parent.parentElement;}return false;});if(isInteractive){setCursorType(\"pointer\");}else if(elements.some(el=>el.tagName.toLowerCase()===\"input\"||el.tagName.toLowerCase()===\"textarea\")){setCursorType(\"text\");}else if(elements.some(el=>el.dataset.cursor===\"nav\"||el.closest('[data-cursor=\"nav\"]'))){setCursorType(\"nav\");}else{setCursorType(\"default\");}};// Helper function to determine if an element is interactive\nconst isInteractiveElement=element=>{// Check common interactive elements\nconst tagName=element.tagName.toLowerCase();if(tagName===\"a\"||tagName===\"button\"||tagName===\"select\"||tagName===\"details\"||tagName===\"summary\"||tagName===\"input\"||tagName===\"label\"||tagName===\"textarea\"){return true;}// Check for elements with click handlers (approximation)\n// This won't catch all, but helps with many cases\nconst clickableRoles=[\"button\",\"link\",\"checkbox\",\"menuitem\",\"tab\"];if(element.getAttribute(\"role\")&&clickableRoles.includes(element.getAttribute(\"role\")||\"\")){return true;}// Check for data-cursor attribute\nif(element.dataset.cursor===\"pointer\"){return true;}// Check for typical CSS cursors that indicate interactivity\nconst computedStyle=window.getComputedStyle(element);if(computedStyle.cursor===\"pointer\"){return true;}// Check for event listeners (only works for inline events)\nif(element.getAttribute(\"onclick\")||element.getAttribute(\"onmousedown\")||element.getAttribute(\"onmouseup\")){return true;}// Check for clickable classes (add your common clickable class names)\nconst clickableClasses=[\"button\",\"btn\",\"link\",\"clickable\",\"card\",\"case-study\"];if(clickableClasses.some(className=>element.classList.contains(className))){return true;}return false;};// Mouse state handlers\nconst handleMouseDown=()=>setIsClicking(true);const handleMouseUp=()=>setIsClicking(false);const handleMouseLeave=()=>setIsHidden(true);const handleMouseEnter=()=>setIsHidden(false);// Add all event listeners\ndocument.addEventListener(\"mousemove\",handleMouseMove);document.addEventListener(\"mousedown\",handleMouseDown);document.addEventListener(\"mouseup\",handleMouseUp);document.addEventListener(\"mouseleave\",handleMouseLeave);document.addEventListener(\"mouseenter\",handleMouseEnter);// Create style element to hide default cursor\nconst styleElement=document.createElement(\"style\");styleElement.textContent=`\n                html, body { \n                    cursor: none !important; \n                }\n                a, button, [data-cursor=\"pointer\"] {\n                    cursor: none !important;\n                }\n            `;document.head.appendChild(styleElement);// Clean up event listeners and style on unmount\nreturn()=>{document.removeEventListener(\"mousemove\",handleMouseMove);document.removeEventListener(\"mousedown\",handleMouseDown);document.removeEventListener(\"mouseup\",handleMouseUp);document.removeEventListener(\"mouseleave\",handleMouseLeave);document.removeEventListener(\"mouseenter\",handleMouseEnter);document.head.removeChild(styleElement);};},[]);// Define dot style - with added black border\nconst dotStyle={width:\"14px\",height:\"14px\",backgroundColor:\"#FFFFFF\",borderRadius:\"50%\",position:\"fixed\",pointerEvents:\"none\",zIndex:9999,transform:\"translate(-50%, -50%)\",transition:\"transform 0.15s ease\",opacity:isHidden?0:1,border:\"2px solid rgba(0, 0, 0, 0.33)\",boxShadow:\"0 0 2px rgba(0, 0, 0, 0.3)\",...cursorType===\"pointer\"&&{transform:\"translate(-50%, -50%) scale(1.2)\"},...cursorType===\"text\"&&{transform:\"translate(-50%, -50%) scale(0.8)\"},...isClicking&&{transform:\"translate(-50%, -50%) scale(0.7)\"}};// Define outline style - with added black border\nconst outlineStyle={width:\"60px\",height:\"60px\",// Double border: white inner, black outer\nborder:\"2px solid #FFFFFF\",outline:\"2px solid rgba(0, 0, 0, 0.33)\",borderRadius:\"50%\",position:\"fixed\",pointerEvents:\"none\",zIndex:9998,transform:\"translate(-50%, -50%) scale(0)\",transition:\"transform 0.3s ease, opacity 0.3s ease\",// Set background color to create the translucent effect between dot and outline\nbackgroundColor:\"rgba(255, 255, 255, 0.1)\",opacity:isHidden?0:1,boxShadow:\"0 0 3px rgba(0, 0, 0, 0.2)\",...cursorType===\"pointer\"&&{transform:\"translate(-50%, -50%) scale(1)\"},...cursorType===\"pointer\"&&isClicking&&{transform:\"translate(-50%, -50%) scale(0.9)\"}};return /*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(Component,{ref:ref,...props}),/*#__PURE__*/_jsx(\"div\",{ref:dotRef,style:dotStyle}),/*#__PURE__*/_jsx(\"div\",{ref:outlineRef,style:outlineStyle})]});});}// Helper override to mark elements as interactive\nexport function withHoverCursor(Component){return /*#__PURE__*/forwardRef((props,ref)=>{return /*#__PURE__*/_jsx(Component,{ref:ref,...props,\"data-cursor\":\"pointer\"});});}\nexport const __FramerMetadata__ = {\"exports\":{\"withHoverCursor\":{\"type\":\"reactHoc\",\"name\":\"withHoverCursor\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withCustomCursor\":{\"type\":\"reactHoc\",\"name\":\"withCustomCursor\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Cursor.map"],
  "mappings": "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",
  "names": ["withCustomCursor", "Component", "Y", "props", "ref", "dotRef", "pe", "outlineRef", "cursorType", "setCursorType", "ye", "isHidden", "setIsHidden", "isClicking", "setIsClicking", "ue", "dot", "outline", "handleMouseMove", "posX", "posY", "window", "checkElementUnderCursor", "x", "y", "elements", "el", "element", "isInteractiveElement", "parent", "tagName", "clickableRoles", "className", "handleMouseDown", "handleMouseUp", "handleMouseLeave", "handleMouseEnter", "styleElement", "dotStyle", "outlineStyle", "u", "l", "p"]
}
