{"version":3,"file":"CursorRepel3D.OgLo9LXr.mjs","names":["useRef","useState","useCallback"],"sources":["https:/framerusercontent.com/modules/XE8649wRylmID9mCRHlY/BE7HrJXjmCdFZOjdTKN9/CursorRepel3D.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{forwardRef,startTransition,useCallback,useEffect,useRef,useState}from\"react\";import{motion,useSpring,useMotionTemplate,useMotionValue,useReducedMotion,useInView}from\"framer-motion\";// Create a code override export named CursorRepel3D for an existing canvas image layer.\n// It should use pointer position within the hovered layer to produce a restrained 3D repel/tilt effect:\n// the content shifts and rotates subtly away from the cursor, with smooth spring-like interpolation and a\n// gentle return to rest on pointer leave. Keep all visual styling and the image itself canvas-editable;\n// do not add visual UI. Apply a small scale-up while active to avoid exposed edges.\n// Respect prefers-reduced-motion and do nothing on touch-only input.\n// The override should be self-contained, stable, and avoid layout shifts.\nexport function CursorRepel3D(Component){return /*#__PURE__*/forwardRef(function CursorRepel3DOverride(props,ref){const localRef=useRef(null);const isInView=useInView(localRef,{amount:.2});const prefersReducedMotion=useReducedMotion();const[isTouchOnlyInput,setIsTouchOnlyInput]=useState(false);useEffect(()=>{if(typeof window!==\"undefined\"){const canHoverFine=window.matchMedia(\"(hover: hover) and (pointer: fine)\").matches;const hasTouchLikePointer=window.matchMedia(\"(pointer: coarse)\").matches||window.navigator.maxTouchPoints>0;startTransition(()=>{setIsTouchOnlyInput(hasTouchLikePointer&&!canHoverFine);});}else{startTransition(()=>{setIsTouchOnlyInput(false);});}},[]);const xTarget=useMotionValue(0);const yTarget=useMotionValue(0);const rotateXTarget=useMotionValue(0);const rotateYTarget=useMotionValue(0);const scaleTarget=useMotionValue(1);const lightXTarget=useMotionValue(50);const lightYTarget=useMotionValue(50);const lightOpacityTarget=useMotionValue(0);const edgeShadeTarget=useMotionValue(0);const springConfig={stiffness:180,damping:24,mass:.7};const x=useSpring(xTarget,springConfig);const y=useSpring(yTarget,springConfig);const rotateX=useSpring(rotateXTarget,springConfig);const rotateY=useSpring(rotateYTarget,springConfig);const scale=useSpring(scaleTarget,{stiffness:220,damping:26,mass:.75});const lightX=useSpring(lightXTarget,springConfig);const lightY=useSpring(lightYTarget,springConfig);const lightOpacity=useSpring(lightOpacityTarget,{stiffness:170,damping:28,mass:.72});const edgeShade=useSpring(edgeShadeTarget,{stiffness:170,damping:28,mass:.72});const lightOverlay=useMotionTemplate`radial-gradient(130% 110% at ${lightX}% ${lightY}%, rgba(255,255,255,0.20) 0%, rgba(255,255,255,0.10) 24%, rgba(255,255,255,0.00) 58%)`;const edgeOverlay=useMotionTemplate`radial-gradient(125% 115% at ${lightX}% ${lightY}%, rgba(255,255,255,0.00) 42%, rgba(0,0,0,${edgeShade}) 100%)`;const resetMotion=useCallback(()=>{xTarget.set(0);yTarget.set(0);rotateXTarget.set(0);rotateYTarget.set(0);scaleTarget.set(1);lightXTarget.set(50);lightYTarget.set(50);lightOpacityTarget.set(0);edgeShadeTarget.set(0);},[edgeShadeTarget,lightOpacityTarget,lightXTarget,lightYTarget,rotateXTarget,rotateYTarget,scaleTarget,xTarget,yTarget]);const isDisabled=Boolean(prefersReducedMotion)||isTouchOnlyInput||!isInView;const setRefs=useCallback(node=>{localRef.current=node;if(typeof ref===\"function\"){ref(node);}else if(ref&&typeof ref===\"object\"){ref.current=node;}},[ref]);const onPointerEnter=useCallback(event=>{props.onPointerEnter?.(event);if(isDisabled||event.pointerType===\"touch\")return;scaleTarget.set(1.015);lightOpacityTarget.set(.75);edgeShadeTarget.set(.06);},[edgeShadeTarget,isDisabled,lightOpacityTarget,props,scaleTarget]);const onPointerMove=useCallback(event=>{props.onPointerMove?.(event);if(isDisabled||event.pointerType===\"touch\")return;const rect=event.currentTarget.getBoundingClientRect();const px=(event.clientX-rect.left)/rect.width;const py=(event.clientY-rect.top)/rect.height;const nx=Math.max(-1,Math.min(1,(px-.5)*2));const ny=Math.max(-1,Math.min(1,(py-.5)*2));xTarget.set(nx*3);yTarget.set(ny*4);rotateXTarget.set(ny*7);rotateYTarget.set(-nx*8);lightXTarget.set(Math.max(8,Math.min(92,px*100)));lightYTarget.set(Math.max(8,Math.min(92,py*100)));lightOpacityTarget.set(.75);edgeShadeTarget.set(.06);},[edgeShadeTarget,isDisabled,lightOpacityTarget,lightXTarget,lightYTarget,props,rotateXTarget,rotateYTarget,xTarget,yTarget]);const onPointerLeave=useCallback(event=>{props.onPointerLeave?.(event);resetMotion();},[props,resetMotion]);useEffect(()=>{if(isDisabled)resetMotion();},[isDisabled,resetMotion]);return /*#__PURE__*/_jsxs(Component,{...props,ref:setRefs,onPointerEnter:onPointerEnter,onPointerMove:onPointerMove,onPointerLeave:onPointerLeave,onPointerCancel:onPointerLeave,style:{...props.style,position:\"relative\",x,y,rotateX,rotateY,scale,transformPerspective:900,transformStyle:\"preserve-3d\",willChange:\"transform\"},children:[props.children,!isDisabled?/*#__PURE__*/_jsx(motion.div,{\"aria-hidden\":true,style:{position:\"absolute\",inset:0,borderRadius:\"inherit\",pointerEvents:\"none\",backgroundImage:lightOverlay,opacity:lightOpacity,willChange:\"opacity, background-image\"}}):null,!isDisabled?/*#__PURE__*/_jsx(motion.div,{\"aria-hidden\":true,style:{position:\"absolute\",inset:0,borderRadius:\"inherit\",pointerEvents:\"none\",backgroundImage:edgeOverlay,opacity:lightOpacity,willChange:\"opacity, background-image\"}}):null]});});}\nexport const __FramerMetadata__ = {\"exports\":{\"CursorRepel3D\":{\"type\":\"reactHoc\",\"name\":\"CursorRepel3D\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./CursorRepel3D.map"],"mappings":"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"}