{"version":3,"file":"shared-lib.JS9a6ibV.mjs","names":["useRef","useCallback","ctx"],"sources":["https:/framerusercontent.com/modules/jLHThfostUHg59nFPnej/vclKY50fMk4K9eNsDEBw/CursorRipple.js","https:/framerusercontent.com/modules/qLyQmcaP8dJPW5BXI2fj/I6Sy9dJDpYJegcOgX0Rm/siteMetadata.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import{useEffect,useRef,useCallback}from\"react\";import{addPropertyControls,ControlType}from\"framer\";/**\n * ClickSpark\n *\n * Six lines burst outward from every click point, fading as they travel.\n * Full-screen fixed canvas, pointer-events none.\n * Place once on any page — applies globally.\n *\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight any\n */export default function ClickSpark({sparkColor=\"#2B2B2B\",sparkOpacity=.5,sparkSize=6,sparkRadius=12,sparkCount=6,duration=300,easing=\"ease-out\",extraScale=1}){const canvasRef=useRef(null);const sparksRef=useRef([]);const easeFunc=useCallback(t=>{switch(easing){case\"linear\":return t;case\"ease-in\":return t*t;case\"ease-in-out\":return t<.5?2*t*t:1-Math.pow(-2*t+2,2)/2;default:return t*(2-t);}},[easing]);useEffect(()=>{if(typeof window===\"undefined\")return;// Create and mount canvas\nconst canvas=document.createElement(\"canvas\");canvas.style.cssText=\"position:fixed;top:0;left:0;width:100vw;height:100vh;pointer-events:none;z-index:9999;\";document.body.appendChild(canvas);canvasRef.current=canvas;const resize=()=>{const dpr=window.devicePixelRatio||1;canvas.width=window.innerWidth*dpr;canvas.height=window.innerHeight*dpr;canvas.style.width=`${window.innerWidth}px`;canvas.style.height=`${window.innerHeight}px`;const ctx=canvas.getContext(\"2d\");if(ctx)ctx.setTransform(dpr,0,0,dpr,0,0);};resize();window.addEventListener(\"resize\",resize);const ctx=canvas.getContext(\"2d\");if(!ctx)return;let animationId;const draw=timestamp=>{ctx.clearRect(0,0,window.innerWidth,window.innerHeight);ctx.globalAlpha=sparkOpacity;sparksRef.current=sparksRef.current.filter(spark=>{const elapsed=timestamp-spark.startTime;if(elapsed>=duration)return false;const progress=elapsed/duration;const eased=easeFunc(progress);const distance=eased*sparkRadius*extraScale;const lineLength=sparkSize*(1-eased);const x1=spark.x+distance*Math.cos(spark.angle);const y1=spark.y+distance*Math.sin(spark.angle);const x2=spark.x+(distance+lineLength)*Math.cos(spark.angle);const y2=spark.y+(distance+lineLength)*Math.sin(spark.angle);ctx.strokeStyle=sparkColor;ctx.lineWidth=1.5;ctx.lineCap=\"round\";ctx.beginPath();ctx.moveTo(x1,y1);ctx.lineTo(x2,y2);ctx.stroke();return true;});animationId=requestAnimationFrame(draw);};animationId=requestAnimationFrame(draw);const handleClick=e=>{const now=performance.now();const newSparks=Array.from({length:sparkCount},(_,i)=>({x:e.clientX,y:e.clientY,angle:2*Math.PI*i/sparkCount,startTime:now}));sparksRef.current.push(...newSparks);};window.addEventListener(\"click\",handleClick);return()=>{window.removeEventListener(\"resize\",resize);window.removeEventListener(\"click\",handleClick);cancelAnimationFrame(animationId);if(canvas.parentNode)canvas.parentNode.removeChild(canvas);canvasRef.current=null;};},[sparkColor,sparkOpacity,sparkSize,sparkRadius,sparkCount,duration,extraScale,easeFunc]);return /*#__PURE__*/_jsx(\"div\",{style:{width:0,height:0,overflow:\"visible\",pointerEvents:\"none\"}});}addPropertyControls(ClickSpark,{sparkColor:{type:ControlType.Color,title:\"Color\",defaultValue:\"#2B2B2B\"},sparkOpacity:{type:ControlType.Number,title:\"Opacity\",defaultValue:.5,min:.05,max:1,step:.05},sparkCount:{type:ControlType.Number,title:\"Lines\",defaultValue:6,min:2,max:16,step:1},sparkSize:{type:ControlType.Number,title:\"Line Length\",defaultValue:6,min:2,max:24,step:1,unit:\"px\"},sparkRadius:{type:ControlType.Number,title:\"Radius\",defaultValue:12,min:4,max:60,step:1,unit:\"px\"},extraScale:{type:ControlType.Number,title:\"Scale\",defaultValue:1,min:.5,max:3,step:.1},duration:{type:ControlType.Number,title:\"Duration\",defaultValue:300,min:100,max:1e3,step:50,unit:\"ms\"},easing:{type:ControlType.Enum,title:\"Easing\",defaultValue:\"ease-out\",options:[\"linear\",\"ease-in\",\"ease-out\",\"ease-in-out\"]}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"ClickSpark\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutHeight\":\"any\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutWidth\":\"any\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./CursorRipple.map","// Generated by Framer (863726e)\nexport default function metadata(params,activeLocale){return{description:\"I’m Nikola, a Product Designer from Serbia, based in Belgrade. Currently designing digital financial products, focusing on clarity, systems, and real-world use.\",favicon:\"https://framerusercontent.com/assets/QhcYT8lX6Rw62nBlOGMHiEKVMg.png\",robots:\"max-image-preview:large\",socialImage:\"https://framerusercontent.com/assets/csmw6sh76JIOm9tH2ociJuLS3hk.png\",title:\"Nikola Margetic | Product Designer\"};}export const metadataVersion=1;\nexport const __FramerMetadata__ = {\"exports\":{\"metadataVersion\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}"],"mappings":"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"}