{"version":3,"file":"AgentDotAnimation.bf8MgsQ6.mjs","names":["useRef","useState","useMemo"],"sources":["https:/framerusercontent.com/modules/XkcpSpVeu2bekwUhCOfw/Uvi6Ef1f8tfsHjWZpCqU/AgentDotAnimation.js"],"sourcesContent":["// User instructions: Update AgentDotAnimation to add duration and onComplete controls while preserving existing behavior and controls.\nimport{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{startTransition,useEffect,useMemo,useRef,useState}from\"react\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";const dotSize=2;const gridSize=16;function hashDot(row,col,dotCount){return((row*7+col*13+row*col*5)*2654435761>>>0)%dotCount;}function getDelayMs(variant,row,col,rowCount){const dotCount=rowCount*rowCount;if(variant===\"dance-spark\"){return-Math.round(hashDot(row,col,dotCount)*1200/dotCount);}if(variant===\"double-slow\"){const base=col%2*190+row*120+col*55;return-(base*1.6%1920);}const arrival=((row-col)*187.5%750+750)%750;return arrival===0?0:arrival-750;}function getAnimationName(variant){if(variant===\"dance-spark\")return\"danceSpark\";if(variant===\"double-slow\")return\"doubleSlow\";return\"ghostFlow\";}function getDurationMs(variant){if(variant===\"dance-spark\")return 1200;if(variant===\"double-slow\")return 1920;return 750;}/**\n * @framerSupportedLayoutWidth auto\n * @framerSupportedLayoutHeight auto\n */export default function AgentDotAnimation(props){const{variant=\"ghost-flow\",grid=\"4x4\",dotColor=\"#0099ff\",gap=(16-dotSize)/(4-1),size=20,pauseOffscreen=true,pauseOnCanvas=true,duration=0,onComplete,style}=props;const containerRef=useRef(null);const[isVisible,setIsVisible]=useState(true);const[isCompleted,setIsCompleted]=useState(false);const completionRef=useRef(false);useEffect(()=>{if(!pauseOffscreen){setIsVisible(true);return;}const observer=new IntersectionObserver(entries=>{const entry=entries[0];if(entry){startTransition(()=>setIsVisible(entry.isIntersecting));}},{threshold:0});if(containerRef.current){observer.observe(containerRef.current);}return()=>{observer.disconnect();};},[pauseOffscreen]);const shouldPauseOnCanvas=pauseOnCanvas&&RenderTarget.current()===RenderTarget.canvas;const canRun=!shouldPauseOnCanvas&&(!pauseOffscreen||isVisible);useEffect(()=>{completionRef.current=false;startTransition(()=>setIsCompleted(false));},[variant,grid,dotColor,gap,size,pauseOffscreen,pauseOnCanvas,duration]);useEffect(()=>{if(duration<=0||isCompleted||!canRun)return;if(typeof window===\"undefined\")return;const timeout=window.setTimeout(()=>{if(completionRef.current)return;completionRef.current=true;startTransition(()=>setIsCompleted(true));if(onComplete)onComplete();},duration*1e3);return()=>window.clearTimeout(timeout);},[duration,canRun,isCompleted,onComplete]);const dots=useMemo(()=>{const rowCount=grid===\"3x3\"?3:4;const dotStep=rowCount>1?gap:0;const animationName=getAnimationName(variant);const durationMs=getDurationMs(variant);const items=[];for(let row=0;row<rowCount;row++){for(let col=0;col<rowCount;col++){const delayMs=getDelayMs(variant,row,col,rowCount);items.push(/*#__PURE__*/_jsx(\"span\",{\"aria-hidden\":true,style:{position:\"absolute\",top:row*dotStep,left:col*dotStep,width:dotSize,height:dotSize,borderRadius:\"50%\",backgroundColor:dotColor,opacity:.3,animationName,animationDuration:`${durationMs}ms`,animationTimingFunction:\"linear\",animationIterationCount:\"infinite\",animationDelay:`${delayMs}ms`,animationPlayState:isCompleted?\"paused\":shouldPauseOnCanvas?\"paused\":isVisible?\"running\":\"paused\"}},`${row}-${col}`));}}return items;},[variant,grid,dotColor,gap,isVisible,shouldPauseOnCanvas,isCompleted]);const rowCount=grid===\"3x3\"?3:4;const contentBounds=dotSize+Math.max(0,rowCount-1)*gap;const safeBounds=contentBounds>0?contentBounds:gridSize;return /*#__PURE__*/_jsxs(\"div\",{ref:containerRef,role:\"img\",\"aria-label\":\"Animated dot grid\",style:{position:\"relative\",overflow:\"hidden\",padding:2,width:size,height:size,opacity:1,transition:\"none\",...style},children:[/*#__PURE__*/_jsx(\"style\",{children:`\n@keyframes ghostFlow {\n  0%, 18% { opacity: 1; }\n  35% { opacity: 0.6; }\n  50%, 100% { opacity: 0.3; }\n}\n@keyframes doubleSlow {\n  0%, 100% { opacity: 0.3; }\n  8% { opacity: 0.72; }\n  16%, 24% { opacity: 1; }\n  34%, 50% { opacity: 0.3; }\n  58% { opacity: 0.58; }\n  66%, 74% { opacity: 0.96; }\n  84% { opacity: 0.48; }\n}\n@keyframes danceSpark {\n  0%, 6% { opacity: 1; }\n  18% { opacity: 0.45; }\n  24%, 100% { opacity: 0.3; }\n}\n            `}),/*#__PURE__*/_jsx(\"div\",{style:{position:\"relative\",width:safeBounds,height:safeBounds,transform:`scale(${(size-4)/safeBounds})`,transformOrigin:\"top left\"},children:dots})]});}addPropertyControls(AgentDotAnimation,{grid:{type:ControlType.Enum,title:\"Grid\",options:[\"4x4\",\"3x3\"],optionTitles:[\"4\\xd74\",\"3\\xd73\"],defaultValue:\"4x4\"},variant:{type:ControlType.Enum,title:\"Variant\",options:[\"ghost-flow\",\"double-slow\",\"dance-spark\"],optionTitles:[\"Ghost Flow\",\"Double Slow\",\"Dance Spark\"],defaultValue:\"ghost-flow\"},dotColor:{type:ControlType.Color,title:\"Dot Color\",defaultValue:\"#0099ff\"},gap:{type:ControlType.Number,title:\"Gap\",defaultValue:(16-dotSize)/(4-1),min:0,max:20,step:.1,unit:\"px\"},size:{type:ControlType.Number,title:\"Size\",defaultValue:20,min:8,max:200,step:1,unit:\"px\"},pauseOffscreen:{type:ControlType.Boolean,title:\"Pause off-screen\",defaultValue:true},pauseOnCanvas:{type:ControlType.Boolean,title:\"Pause on Canvas\",defaultValue:true},duration:{type:ControlType.Number,title:\"Duration\",description:\"0 = loops forever\",defaultValue:0,min:0,max:60,step:.1,unit:\"s\"},onComplete:{type:ControlType.EventHandler,title:\"On Complete\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"AgentDotAnimation\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerSupportedLayoutHeight\":\"auto\",\"framerSupportedLayoutWidth\":\"auto\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./AgentDotAnimation.map"],"mappings":"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"}