{"version":3,"file":"HoverGrid.BTdcbczu.mjs","names":["useState","useRef","horizontalLines","verticalLines"],"sources":["https:/framerusercontent.com/modules/o36aFUITapcsVoVjRnO8/IXLew77WXGDfhPNvtv07/HoverGrid.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{useEffect,useState,useRef}from\"react\";import{addPropertyControls,ControlType,useIsStaticRenderer}from\"framer\";export default function HoverGrid(props){const{lineColor,lineOpacity,lineWidth,cellSize,revealRadius,followCursor,alwaysVisible,useParentHover,style}=props;const[mousePosition,setMousePosition]=useState({x:0,y:0});const[isHovering,setIsHovering]=useState(false);const containerRef=useRef(null);const isStatic=useIsStaticRenderer();useEffect(()=>{if(isStatic||!followCursor)return;// OPTION 1: original behaviour – listen on the grid itself\nif(!useParentHover){const handleMouseMove=e=>{if(!containerRef.current)return;const rect=containerRef.current.getBoundingClientRect();const x=e.clientX-rect.left;const y=e.clientY-rect.top;setMousePosition({x,y});setIsHovering(true);};const handleMouseLeave=()=>setIsHovering(false);const container=containerRef.current;if(container){container.addEventListener(\"mousemove\",handleMouseMove);container.addEventListener(\"mouseleave\",handleMouseLeave);}return()=>{if(container){container.removeEventListener(\"mousemove\",handleMouseMove);container.removeEventListener(\"mouseleave\",handleMouseLeave);}};}// OPTION 2: \"parent hover\" mode – really: global tracking + bounds check\nconst handleMouseMoveGlobal=e=>{if(!containerRef.current)return;const rect=containerRef.current.getBoundingClientRect();const inside=e.clientX>=rect.left&&e.clientX<=rect.right&&e.clientY>=rect.top&&e.clientY<=rect.bottom;if(inside){const x=e.clientX-rect.left;const y=e.clientY-rect.top;setMousePosition({x,y});setIsHovering(true);}else{setIsHovering(false);}};window.addEventListener(\"mousemove\",handleMouseMoveGlobal);return()=>{window.removeEventListener(\"mousemove\",handleMouseMoveGlobal);};},[followCursor,isStatic,useParentHover]);// Calculate grid lines\nconst calculateGridLines=()=>{if(!containerRef.current)return{horizontalLines:[],verticalLines:[]};const width=containerRef.current.offsetWidth;const height=containerRef.current.offsetHeight;const horizontalLines=[];const verticalLines=[];// Create horizontal lines\nfor(let y=0;y<=height;y+=cellSize){horizontalLines.push(y);}// Create vertical lines\nfor(let x=0;x<=width;x+=cellSize){verticalLines.push(x);}return{horizontalLines,verticalLines};};const{horizontalLines,verticalLines}=calculateGridLines();// Determine if grid should be visible\nconst shouldShowGrid=alwaysVisible||followCursor&&isHovering;// Calculate gradient for reveal effect\nconst getRadialGradient=()=>{if(alwaysVisible)return\"none\";if(followCursor){return`radial-gradient(circle ${revealRadius}px at ${mousePosition.x}px ${mousePosition.y}px, rgba(255,255,255,1) 0%, rgba(255,255,255,0) 100%)`;}return\"none\";};return /*#__PURE__*/_jsx(\"div\",{ref:containerRef,style:{position:\"relative\",width:\"100%\",height:\"100%\",overflow:\"hidden\",...style},children:/*#__PURE__*/_jsxs(\"div\",{style:{position:\"absolute\",top:0,left:0,width:\"100%\",height:\"100%\",opacity:shouldShowGrid?1:0,transition:\"opacity 0.3s ease\",pointerEvents:\"none\",zIndex:-1,maskImage:getRadialGradient(),WebkitMaskImage:getRadialGradient()},children:[horizontalLines.map((y,index)=>/*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",left:0,top:`${y}px`,width:\"100%\",height:`${lineWidth}px`,backgroundColor:lineColor,opacity:lineOpacity}},`h-${index}`)),verticalLines.map((x,index)=>/*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",top:0,left:`${x}px`,width:`${lineWidth}px`,height:\"100%\",backgroundColor:lineColor,opacity:lineOpacity}},`v-${index}`))]})});}addPropertyControls(HoverGrid,{lineColor:{type:ControlType.Color,title:\"Line Color 2\",defaultValue:\"#000000\"},lineOpacity:{type:ControlType.Number,title:\"Line Opacity\",defaultValue:.1,min:0,max:1,step:.01},lineWidth:{type:ControlType.Number,title:\"Line Width\",defaultValue:1,min:.5,max:5,step:.5,unit:\"px\"},cellSize:{type:ControlType.Number,title:\"Cell Size\",defaultValue:50,min:10,max:200,step:5,unit:\"px\"},revealRadius:{type:ControlType.Number,title:\"Reveal Radius\",defaultValue:200,min:50,max:500,step:10,unit:\"px\",hidden:({alwaysVisible})=>alwaysVisible},followCursor:{type:ControlType.Boolean,title:\"Follow Cursor\",defaultValue:true,enabledTitle:\"Yes\",disabledTitle:\"No\"},alwaysVisible:{type:ControlType.Boolean,title:\"Always Visible\",defaultValue:false,enabledTitle:\"Yes\",disabledTitle:\"No\"},useParentHover:{// 👈 NEW control\ntype:ControlType.Boolean,title:\"Use Parent Hover\",defaultValue:false,enabledTitle:\"Yes\",disabledTitle:\"No\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"HoverGrid\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./HoverGrid.map"],"mappings":"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"}