{"version":3,"file":"StarSpray.BAFQLwrf.mjs","names":["React.useState","React.useRef","React.useCallback"],"sources":["https:/framerusercontent.com/modules/xGtcXffP8XXfxBqhTAD9/hpnCRTDVH2MsoAFwNa4w/StarSpray.js"],"sourcesContent":["// StarSpray\n// Emits a rapid spray of ⭐️ stars from the mouse position on hover, with strong random X/Y movement\nimport{jsx as _jsx}from\"react/jsx-runtime\";import*as React from\"react\";import{Frame,addPropertyControls,ControlType,useIsStaticRenderer}from\"framer\";/**\n * StarSpray\n *\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight any-prefer-fixed\n */export default function StarSpray(props){const{emoji,sprayStrength,sprayRate,fontSize,style}=props;const[stars,setStars]=React.useState([]);const[isHovering,setIsHovering]=React.useState(false);const[mousePosition,setMousePosition]=React.useState({x:0,y:0});const intervalRef=React.useRef(null);const containerRef=React.useRef(null);const isStatic=useIsStaticRenderer();const addStar=React.useCallback(()=>{const duration=Math.random()*.5+.5;const delay=0;const angle=Math.random()*2*Math.PI;const distance=sprayStrength*(.5+Math.random()*.5);const offsetX=Math.cos(angle)*distance;const offsetY=Math.sin(angle)*distance;return{id:Math.random().toString(36).slice(2),x:mousePosition.x+offsetX,y:mousePosition.y+offsetY,duration,delay};},[mousePosition,sprayStrength]);// Stop spraying if mouse stops moving\nconst mouseMoveTimeout=React.useRef(null);React.useEffect(()=>{if(isStatic)return;if(isHovering){setStars(prev=>[...prev,addStar()]);intervalRef.current=window.setInterval(()=>{setStars(prev=>[...prev,addStar()]);},sprayRate);}else{if(intervalRef.current)clearInterval(intervalRef.current);}return()=>{if(intervalRef.current)clearInterval(intervalRef.current);};},[isHovering,addStar,sprayRate,isStatic]);// Stop spraying if mouse stops moving\nconst stopSpray=React.useCallback(()=>{if(intervalRef.current)clearInterval(intervalRef.current);setIsHovering(false);},[]);const handleMouseMove=event=>{if(containerRef.current){const rect=containerRef.current.getBoundingClientRect();setMousePosition({x:event.clientX-rect.left-rect.width/2,y:event.clientY-rect.top-rect.height/2});}setIsHovering(true);if(mouseMoveTimeout.current)clearTimeout(mouseMoveTimeout.current);mouseMoveTimeout.current=window.setTimeout(()=>{stopSpray();},120);};return /*#__PURE__*/_jsx(Frame,{ref:containerRef,size:\"100%\",background:\"transparent\",style:{...style,overflow:\"visible\",position:\"relative\"},onHoverStart:event=>{handleMouseMove(event);if(intervalRef.current)clearInterval(intervalRef.current);setIsHovering(true);},onHoverEnd:()=>setIsHovering(false),onMouseMove:handleMouseMove,children:stars.map(star=>/*#__PURE__*/_jsx(Frame,{size:fontSize,background:\"transparent\",center:true,style:{fontSize,pointerEvents:\"none\"},initial:{x:mousePosition.x,y:mousePosition.y,scale:0,rotate:0,opacity:1},animate:{x:star.x,y:star.y,scale:[0,1,0],rotate:[0,360],opacity:[1,.7,0]},transition:{duration:star.duration,delay:star.delay,times:[0,.5,1]},children:emoji},star.id))});}addPropertyControls(StarSpray,{emoji:{type:ControlType.String,title:\"Emoji\",defaultValue:\"✨\",placeholder:\"Paste emoji…\"},sprayStrength:{type:ControlType.Number,title:\"Spray Strength\",defaultValue:120,min:40,max:300,step:1,unit:\"px\"},sprayRate:{type:ControlType.Number,title:\"Spray Rate (ms)\",defaultValue:40,min:10,max:200,step:1,unit:\"ms\"},fontSize:{type:ControlType.Number,title:\"Font Size\",defaultValue:32,min:12,max:120,step:1,unit:\"px\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"StarSpray\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutHeight\":\"any-prefer-fixed\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutWidth\":\"any-prefer-fixed\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./StarSpray.map"],"mappings":"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"}