{
  "version": 3,
  "sources": ["ssg:https://framerusercontent.com/modules/O9UAQbfGhbWdpEm8YU6b/3ojyHHMX8JWQMoS1h5dl/BackgroundColor.js", "ssg:https://framerusercontent.com/modules/3yreFn1NSuQk3z8jebI9/Ha4D0aIcX9yACZuSvn59/Dots.js"],
  "sourcesContent": ["import{jsx as _jsx}from\"react/jsx-runtime\";import{motion}from\"framer-motion\";import{useState,useEffect}from\"react\";import{addPropertyControls,ControlType}from\"framer\";export default function ColorTransitionBackground(props){const{colors=[\"#8435C2\",\"#00A2E7\",\"#00BFBC\",\"#FF62A3\",\"#005BB0\"],transitionDuration=5,style}=props;const[currentColorIndex,setCurrentColorIndex]=useState(0);useEffect(()=>{// Skip animation if we only have one color\nif(colors.length<=1)return;const interval=setInterval(()=>{setCurrentColorIndex(prevIndex=>prevIndex===colors.length-1?0:prevIndex+1);},transitionDuration*1e3);return()=>clearInterval(interval);},[colors,transitionDuration]);// Use the first color if the array is empty\nconst currentColor=colors.length>0?colors[currentColorIndex]:\"#ffffff\";return /*#__PURE__*/_jsx(motion.div,{style:{width:\"100%\",height:\"100%\",position:\"relative\",overflow:\"hidden\",backgroundColor:colors[0]||\"#8435C2\",...style},animate:{backgroundColor:currentColor},transition:{duration:transitionDuration,ease:\"easeInOut\"}});}addPropertyControls(ColorTransitionBackground,{colors:{type:ControlType.Array,title:\"Colors\",control:{type:ControlType.Color},defaultValue:[\"#8435C2\",\"#00A2E7\",\"#00BFBC\",\"#FF62A3\",\"#005BB0\"],description:\"The colors to transition between\"},transitionDuration:{type:ControlType.Number,title:\"Duration\",defaultValue:5,min:.5,max:20,step:.5,unit:\"s\",description:\"Time in seconds for each color transition\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"ColorTransitionBackground\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./BackgroundColor.map", "import{jsx as _jsx}from\"react/jsx-runtime\";import{useEffect,useRef}from\"react\";import{addPropertyControls,ControlType}from\"framer\";/**\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight any-prefer-fixed\n * @framerIntrinsicHeight 300\n * @framerIntrinsicWidth 600\n */export default function NetworkAnimation(props){const{numDots,lineThickness,dotColor,lineColor,connectionDistance,minDotRadius,maxDotRadius,maxSpeed,enablePulsing,pulseSpeed,style}=props;const canvasRef=useRef(null);const containerRef=useRef(null);useEffect(()=>{if(!canvasRef.current||!containerRef.current)return;const canvas=canvasRef.current;const container=containerRef.current;const ctx=canvas.getContext(\"2d\");let animationFrameId;// Calculate padding needed for overflow dots\nconst paddingSize=maxDotRadius*2;// Set canvas dimensions to match the parent container plus padding\nconst resizeCanvas=()=>{if(container){const containerWidth=container.clientWidth;const containerHeight=container.clientHeight;// Make canvas larger than container to allow for overflow\ncanvas.width=containerWidth+paddingSize*2;canvas.height=containerHeight+paddingSize*2;// Offset the canvas to center it\ncanvas.style.left=`-${paddingSize}px`;canvas.style.top=`-${paddingSize}px`;}};// Initial resize\nresizeCanvas();// Add resize listener\nwindow.addEventListener(\"resize\",resizeCanvas);// Dot properties\nconst dots=[];// Calculate the actual canvas area excluding the padding\nconst drawAreaX=paddingSize;const drawAreaY=paddingSize;const drawAreaWidth=canvas.width-paddingSize*2;const drawAreaHeight=canvas.height-paddingSize*2;// Create dots with random positions, velocities, and sizes\nfor(let i=0;i<numDots;i++){const radius=minDotRadius+Math.pow(Math.random(),2.5)*(maxDotRadius-minDotRadius);dots.push({x:drawAreaX+Math.random()*drawAreaWidth,y:drawAreaY+Math.random()*drawAreaHeight,vx:(Math.random()-.5)*maxSpeed,vy:(Math.random()-.5)*maxSpeed,radius:radius,baseRadius:radius,connections:[]});}// Animation function\nconst animate=()=>{// Clear canvas\nctx.clearRect(0,0,canvas.width,canvas.height);// Get current time for pulsing effect\nconst time=Date.now()/1e3;// Reset connections\ndots.forEach(dot=>{dot.connections=[];});// Store connections between dots\nfor(let i=0;i<dots.length;i++){for(let j=i+1;j<dots.length;j++){const dx=dots[i].x-dots[j].x;const dy=dots[i].y-dots[j].y;const distance=Math.sqrt(dx*dx+dy*dy);if(distance<connectionDistance){// Store bi-directional connection\ndots[i].connections.push(j);dots[j].connections.push(i);}}}// Draw connections between dots first (so they appear under the dots)\nfor(let i=0;i<dots.length;i++){for(const j of dots[i].connections){if(j>i){// Avoid drawing the same line twice\n// Calculate line thickness based on distance\nconst dx=dots[i].x-dots[j].x;const dy=dots[i].y-dots[j].y;const distance=Math.sqrt(dx*dx+dy*dy);const adjustedLineThickness=lineThickness*(1-distance/connectionDistance*.5);// Draw line\nctx.beginPath();ctx.moveTo(dots[i].x,dots[i].y);ctx.lineTo(dots[j].x,dots[j].y);ctx.strokeStyle=lineColor;ctx.lineWidth=adjustedLineThickness;ctx.stroke();}}}// Update and draw dots\ndots.forEach(dot=>{// Update position\ndot.x+=dot.vx;dot.y+=dot.vy;// Bounce off the actual container edges, not canvas edges\nif(dot.x<=drawAreaX||dot.x>=drawAreaX+drawAreaWidth){dot.vx=-dot.vx;dot.x=dot.x<=drawAreaX?drawAreaX:drawAreaX+drawAreaWidth;}if(dot.y<=drawAreaY||dot.y>=drawAreaY+drawAreaHeight){dot.vy=-dot.vy;dot.y=dot.y<=drawAreaY?drawAreaY:drawAreaY+drawAreaHeight;}// Apply pulsing effect if enabled\nif(enablePulsing){// Simple sinusoidal pulsing - smooth expand and contract\nconst pulsePhase=time*pulseSpeed%(2*Math.PI);// Create a smooth pulsing effect using sine\nconst pulseMultiplier=1+.2*Math.sin(pulsePhase);// Apply the pulse effect to the dot's radius\ndot.radius=dot.baseRadius*pulseMultiplier;}else{// If pulsing is disabled, use the base radius\ndot.radius=dot.baseRadius;}// Draw dot with its radius\nctx.beginPath();ctx.arc(dot.x,dot.y,dot.radius,0,Math.PI*2);ctx.fillStyle=dotColor;ctx.fill();});// Continue animation loop\nanimationFrameId=requestAnimationFrame(animate);};// Start animation\nanimate();// Cleanup function\nreturn()=>{window.removeEventListener(\"resize\",resizeCanvas);cancelAnimationFrame(animationFrameId);};},[numDots,lineThickness,dotColor,lineColor,connectionDistance,minDotRadius,maxDotRadius,maxSpeed,enablePulsing,pulseSpeed]);const containerStyle={position:\"relative\",width:\"100%\",height:\"100%\",overflow:\"visible\",...style};const canvasStyle={position:\"absolute\",top:0,left:0,width:`calc(100% + ${maxDotRadius*4}px)`,height:`calc(100% + ${maxDotRadius*4}px)`};return /*#__PURE__*/_jsx(\"div\",{ref:containerRef,style:containerStyle,children:/*#__PURE__*/_jsx(\"canvas\",{ref:canvasRef,style:canvasStyle})});}// Default props\nNetworkAnimation.defaultProps={numDots:15,lineThickness:2,dotColor:\"#0058AA\",lineColor:\"#0058AA\",connectionDistance:300,minDotRadius:8,maxDotRadius:32,maxSpeed:.4,enablePulsing:false,pulseSpeed:1.2};// Property controls for Framer\naddPropertyControls(NetworkAnimation,{numDots:{type:ControlType.Number,title:\"Number of Dots\",defaultValue:15,min:5,max:50,step:1,displayStepper:true},lineThickness:{type:ControlType.Number,title:\"Line Thickness\",defaultValue:2,min:.5,max:5,step:.5,displayStepper:true},dotColor:{type:ControlType.Color,title:\"Dot Color\",defaultValue:\"#0058AA\"},lineColor:{type:ControlType.Color,title:\"Line Color\",defaultValue:\"#0058AA\"},connectionDistance:{type:ControlType.Number,title:\"Connection Zone\",defaultValue:300,min:100,max:500,step:10,displayStepper:true},minDotRadius:{type:ControlType.Number,title:\"Min Dot Size\",defaultValue:8,min:1,max:20,step:1,displayStepper:true},maxDotRadius:{type:ControlType.Number,title:\"Max Dot Size\",defaultValue:32,min:10,max:50,step:1,displayStepper:true},maxSpeed:{type:ControlType.Number,title:\"Max Speed\",defaultValue:.4,min:.1,max:2,step:.1,displayStepper:true},enablePulsing:{type:ControlType.Boolean,title:\"Heartbeat Pulse\",defaultValue:false,enabledTitle:\"On\",disabledTitle:\"Off\"},pulseSpeed:{type:ControlType.Number,title:\"Pulse Speed\",defaultValue:1.2,min:.5,max:3,step:.1,displayStepper:true,hidden(props){return!props.enablePulsing;}}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"NetworkAnimation\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerIntrinsicWidth\":\"600\",\"framerIntrinsicHeight\":\"300\",\"framerSupportedLayoutWidth\":\"any-prefer-fixed\",\"framerSupportedLayoutHeight\":\"any-prefer-fixed\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Dots.map"],
  "mappings": "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",
  "names": ["ColorTransitionBackground", "props", "colors", "transitionDuration", "style", "currentColorIndex", "setCurrentColorIndex", "ye", "ue", "interval", "prevIndex", "currentColor", "p", "motion", "addPropertyControls", "ControlType", "NetworkAnimation", "props", "numDots", "lineThickness", "dotColor", "lineColor", "connectionDistance", "minDotRadius", "maxDotRadius", "maxSpeed", "enablePulsing", "pulseSpeed", "style", "canvasRef", "pe", "containerRef", "ue", "canvas", "container", "ctx", "animationFrameId", "paddingSize", "resizeCanvas", "containerWidth", "containerHeight", "window", "dots", "drawAreaX", "drawAreaY", "drawAreaWidth", "drawAreaHeight", "i", "radius", "animate", "time", "dot", "j", "dx", "dy", "distance", "adjustedLineThickness", "pulsePhase", "pulseMultiplier", "containerStyle", "canvasStyle", "p", "addPropertyControls", "ControlType"]
}
