{"version":3,"file":"LEDMatrixText.BO4WNfjp.mjs","names":["useRef","useState","useMemo","useCallback"],"sources":["https:/framerusercontent.com/modules/k30rYZgTK8Oee4PaWRJa/PmBYSlELp00KpXm6rZbS/LEDMatrixText.js"],"sourcesContent":["// Text Matrix component with animated accent dots - dots only render inside text mask\nimport{jsx as _jsx}from\"react/jsx-runtime\";import{useEffect,useRef,useState,useMemo,useCallback,startTransition}from\"react\";import{addPropertyControls,ControlType,useIsStaticRenderer}from\"framer\";import{useInView}from\"framer-motion\";/**\n * Text Matrix\n *\n * @framerIntrinsicWidth 600\n * @framerIntrinsicHeight 200\n *\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight any-prefer-fixed\n */export default function TextMatrix(props){const{text=\"AgentLab\",fontPreset=\"Inter\",customFont=\"\",sizeMode=\"fill\",fontSize=120,dotSize=6,gap=2,accentColor=\"#3B5BFF\",secondaryColor=\"#2e2e2e\",backgroundColor=\"#000000\",accentDensity=15,animate=true,speed=50,style}=props;const containerRef=useRef(null);const isInView=useInView(containerRef,{amount:.05});const isStatic=useIsStaticRenderer();const canvasRef=useRef(null);const[dimensions,setDimensions]=useState({width:0,height:0});const dimensionsRef=useRef({width:0,height:0});const accentPositionsRef=useRef(new Set);const[isDocumentVisible,setIsDocumentVisible]=useState(true);const animationFrameRef=useRef(null);const isDirtyRef=useRef(true);const offscreenCanvasRef=useRef(null);const dotStatesRef=useRef(new Map);const lastAccentUpdateRef=useRef(0);const accentSeedRef=useRef(0);const canAnimateRuntime=!isStatic&&animate&&speed>0&&isInView&&isDocumentVisible;// Determine which font to use\nconst fontFamily=useMemo(()=>{if(fontPreset===\"Custom\"){return customFont.trim()!==\"\"?customFont:\"Inter\";}return fontPreset;},[fontPreset,customFont]);// Seed-based random number generator for stable accent positions\nconst seededRandom=useMemo(()=>{return seed=>{const x=Math.sin(seed)*1e4;return x-Math.floor(x);};},[]);// Calculate grid dimensions with integer precision\nconst gridInfo=useMemo(()=>{const{width,height}=dimensions;if(width===0||height===0)return null;const cellSize=Math.floor(dotSize+gap);const cols=Math.floor(width/cellSize);const rows=Math.floor(height/cellSize);return{cols,rows,offsetX:0,offsetY:0,cellSize};},[dimensions,dotSize,gap]);// Generate text bitmap and valid dot positions (only inside text) with tight bounding\nconst textData=useMemo(()=>{if(!gridInfo)return null;if(typeof document===\"undefined\")return null;const{cols,rows,cellSize,offsetX,offsetY}=gridInfo;const{width,height}=dimensions;// Step 1: Reuse offscreen canvas for performance\nconst scale=typeof window!==\"undefined\"?Math.max(2,window.devicePixelRatio||2):2;let canvas=offscreenCanvasRef.current;if(!canvas){canvas=document.createElement(\"canvas\");offscreenCanvasRef.current=canvas;}// Only resize if dimensions changed\nconst targetWidth=width*scale;const targetHeight=height*scale;if(canvas.width!==targetWidth||canvas.height!==targetHeight){canvas.width=targetWidth;canvas.height=targetHeight;}const ctx=canvas.getContext(\"2d\",{willReadFrequently:true,alpha:false});if(!ctx)return null;// Disable anti-aliasing for crisp rendering\nctx.imageSmoothingEnabled=false;// Fill solid black\nctx.fillStyle=\"#000000\";ctx.fillRect(0,0,canvas.width,canvas.height);// Calculate font size based on sizeMode\nlet finalFontSize;if(sizeMode===\"fill\"){// Step 1: Render at known large size (1000px) to measure\nconst initialFontSize=1e3;ctx.font=`bold ${initialFontSize}px ${fontFamily}`;ctx.fillStyle=\"#ffffff\";ctx.textBaseline=\"top\";ctx.textAlign=\"left\";// Measure text to get its natural dimensions\nconst metrics=ctx.measureText(text);const textWidth=metrics.width;// Use a reasonable height estimate based on font size\nconst textHeight=initialFontSize*1.2;// Step 2: Calculate scale to fit component bounds (edge to edge)\nconst scaleX=canvas.width/textWidth;const scaleY=canvas.height/textHeight;const fillScale=Math.min(scaleX,scaleY);// Step 3: Calculate final font size\nfinalFontSize=initialFontSize*fillScale;// Clear and render at final size, centered\nctx.fillStyle=\"#000000\";ctx.fillRect(0,0,canvas.width,canvas.height);ctx.font=`bold ${finalFontSize}px ${fontFamily}`;ctx.fillStyle=\"#ffffff\";ctx.textBaseline=\"middle\";ctx.textAlign=\"center\";ctx.fillText(text,canvas.width/2,canvas.height/2);}else{// Fixed mode: use exact fontSize prop\nfinalFontSize=fontSize*scale;ctx.font=`bold ${finalFontSize}px ${fontFamily}`;// Draw text in solid white, centered\nctx.fillStyle=\"#ffffff\";ctx.textBaseline=\"middle\";ctx.textAlign=\"center\";ctx.fillText(text,canvas.width/2,canvas.height/2);}// Step 2: Read back pixel data\nconst imageData=ctx.getImageData(0,0,canvas.width,canvas.height);const bitmap=imageData.data;// Step 3: Sample at dot center positions and build valid positions list\nconst validPositions=[];const validDots=[];for(let row=0;row<rows;row++){for(let col=0;col<cols;col++){// Calculate center coordinate of this dot in component space\nconst dotCenterX=Math.floor(offsetX+col*cellSize+dotSize/2);const dotCenterY=Math.floor(offsetY+row*cellSize+dotSize/2);// Map to scaled canvas space\nconst canvasX=Math.floor(dotCenterX*scale);const canvasY=Math.floor(dotCenterY*scale);// Bounds check: ensure we're within canvas\nif(canvasX<0||canvasY<0||canvasX>=canvas.width||canvasY>=canvas.height){continue;}// Sample the pixel at this position (check red channel only for performance)\nconst pixelIndex=(canvasY*canvas.width+canvasX)*4;// If red channel > 128, dot is inside a letter\nif(bitmap[pixelIndex]>128){const key=`${col},${row}`;validPositions.push(key);validDots.push({key,x:Math.floor(offsetX+col*cellSize),y:Math.floor(offsetY+row*cellSize)});}}}isDirtyRef.current=true;return{validPositions,validDots};},[gridInfo,text,fontFamily,sizeMode,fontSize,dimensions,dotSize]);// Generate accent dot positions using seeded random\nconst generateAccentPositions=useMemo(()=>{return(seed,density)=>{if(!textData||textData.validPositions.length===0)return new Set;const totalTextDots=textData.validPositions.length;const accentCount=Math.max(0,Math.min(totalTextDots,Math.floor(totalTextDots*density/100)));const positions=new Set;for(let i=0;i<accentCount;i++){const randomIndex=Math.floor(seededRandom(seed+i)*totalTextDots);positions.add(textData.validPositions[randomIndex]);}return positions;};},[textData,seededRandom]);// Initialize accent positions based on text\nuseEffect(()=>{if(!textData)return;const seed=text.split(\"\").reduce((acc,char)=>acc+char.charCodeAt(0),0);accentSeedRef.current=seed;accentPositionsRef.current=generateAccentPositions(seed,accentDensity);lastAccentUpdateRef.current=typeof performance!==\"undefined\"?performance.now():0;isDirtyRef.current=true;},[textData,text,generateAccentPositions,accentDensity]);useEffect(()=>{if(typeof document===\"undefined\")return;const updateVisibility=()=>{startTransition(()=>{setIsDocumentVisible(document.visibilityState!==\"hidden\");});};updateVisibility();document.addEventListener(\"visibilitychange\",updateVisibility);return()=>document.removeEventListener(\"visibilitychange\",updateVisibility);},[]);const drawCanvas=useCallback(()=>{const canvas=canvasRef.current;if(!canvas||!gridInfo||!textData)return;if(!isDirtyRef.current)return;const ctx=canvas.getContext(\"2d\",{alpha:false});if(!ctx)return;if(canvas.width!==dimensions.width||canvas.height!==dimensions.height){canvas.width=dimensions.width;canvas.height=dimensions.height;}ctx.imageSmoothingEnabled=false;ctx.fillStyle=backgroundColor;ctx.fillRect(0,0,canvas.width,canvas.height);const size=Math.floor(dotSize);const canvasWidth=canvas.width;const canvasHeight=canvas.height;const states=dotStatesRef.current;ctx.fillStyle=secondaryColor;for(const dot of textData.validDots){if(dot.x<0||dot.y<0||dot.x+size>canvasWidth||dot.y+size>canvasHeight){continue;}ctx.fillRect(dot.x,dot.y,size,size);}ctx.fillStyle=accentColor;for(const dot of textData.validDots){const state=states.get(dot.key);if(!state||state.progress<=0)continue;ctx.globalAlpha=state.progress;ctx.fillRect(dot.x,dot.y,size,size);ctx.globalAlpha=1;}isDirtyRef.current=false;},[gridInfo,textData,dimensions,dotSize,accentColor,secondaryColor,backgroundColor]);// Initialize dot states when text data changes with randomized timing\nuseEffect(()=>{if(!textData)return;const states=dotStatesRef.current;const now=typeof performance!==\"undefined\"&&typeof performance.now===\"function\"?performance.now():Date.now();// Initialize all dots with randomized timing\nfor(const posKey of textData.validPositions){if(!states.has(posKey)){states.set(posKey,{isAccent:false,progress:0,fadeInDuration:150+Math.random()*350,fadeOutDuration:150+Math.random()*350,phaseOffset:Math.random()*3e3,cycleStartTime:now});}}for(const[key]of states){if(!textData.validPositions.includes(key)){states.delete(key);}}isDirtyRef.current=true;},[textData]);// Update dot accent assignments\nuseEffect(()=>{if(!textData)return;const states=dotStatesRef.current;const positions=accentPositionsRef.current;// Update accent assignments\nfor(const posKey of textData.validPositions){const state=states.get(posKey);if(state){state.isAccent=positions.has(posKey);}}isDirtyRef.current=true;},[textData]);// Single RAF loop: accent reseed + fade updates + canvas draw\nuseEffect(()=>{if(animationFrameRef.current!==null){cancelAnimationFrame(animationFrameRef.current);animationFrameRef.current=null;}if(!canAnimateRuntime||!textData){drawCanvas();return;}let isRunning=true;const states=dotStatesRef.current;const smoothstep=t=>t*t*(3-2*t);const interval=Math.round(200*Math.pow(10/200,(speed-1)/99));const loop=timestamp=>{if(!isRunning)return;if(lastAccentUpdateRef.current===0){lastAccentUpdateRef.current=timestamp;}if(timestamp-lastAccentUpdateRef.current>=interval){lastAccentUpdateRef.current=timestamp;accentSeedRef.current+=1;accentPositionsRef.current=generateAccentPositions(accentSeedRef.current,accentDensity);for(const posKey of textData.validPositions){const state=states.get(posKey);if(state){state.isAccent=accentPositionsRef.current.has(posKey);}}isDirtyRef.current=true;}let anyChanges=false;for(const[,state]of states.entries()){if(state.isAccent){const timeSinceCycleStart=timestamp-state.cycleStartTime;const cycleTime=timeSinceCycleStart%(state.fadeInDuration+state.fadeOutDuration+1e3);if(cycleTime<state.fadeInDuration){const fadeInProgress=cycleTime/state.fadeInDuration;const newProgress=smoothstep(fadeInProgress);if(Math.abs(state.progress-newProgress)>.01){state.progress=newProgress;anyChanges=true;}}else if(cycleTime<state.fadeInDuration+1e3){// Hold at full brightness\nif(state.progress!==1){state.progress=1;anyChanges=true;}}else{const fadeOutStart=state.fadeInDuration+1e3;const fadeOutProgress=(cycleTime-fadeOutStart)/state.fadeOutDuration;const newProgress=1-smoothstep(fadeOutProgress);if(Math.abs(state.progress-newProgress)>.01){state.progress=newProgress;anyChanges=true;}}}else{if(state.progress!==0){state.progress=0;anyChanges=true;}}}if(anyChanges){isDirtyRef.current=true;}drawCanvas();animationFrameRef.current=requestAnimationFrame(loop);};animationFrameRef.current=requestAnimationFrame(loop);return()=>{isRunning=false;if(animationFrameRef.current!==null){cancelAnimationFrame(animationFrameRef.current);animationFrameRef.current=null;}};},[canAnimateRuntime,textData,speed,accentDensity,generateAccentPositions,drawCanvas]);// Measure container dimensions with debouncing for performance\nuseEffect(()=>{const container=containerRef.current;if(!container||typeof window===\"undefined\")return;let timeoutId;const resizeObserver=new ResizeObserver(entries=>{// Clear previous timeout\nif(timeoutId){clearTimeout(timeoutId);}// Debounce resize updates to avoid excessive recalculations\ntimeoutId=window.setTimeout(()=>{for(const entry of entries){const{width,height}=entry.contentRect;// Only update if dimensions actually changed\nif(width!==dimensionsRef.current.width||height!==dimensionsRef.current.height){dimensionsRef.current={width,height};startTransition(()=>{setDimensions({width,height});});}}},16)// ~60fps\n;});resizeObserver.observe(container);return()=>{if(timeoutId){clearTimeout(timeoutId);}resizeObserver.disconnect();};},[]);useEffect(()=>{drawCanvas();},[drawCanvas]);return /*#__PURE__*/_jsx(\"div\",{ref:containerRef,style:{...style,width:\"100%\",height:\"100%\",position:\"relative\",overflow:\"hidden\",backgroundColor},children:/*#__PURE__*/_jsx(\"canvas\",{ref:canvasRef,style:{position:\"absolute\",top:0,left:0,width:\"100%\",height:\"100%\"}})});}TextMatrix.displayName=\"LED Matrix Text\";addPropertyControls(TextMatrix,{text:{type:ControlType.String,title:\"Text\",defaultValue:\"AgentLab\"},fontPreset:{type:ControlType.Enum,title:\"Font Family\",defaultValue:\"Inter\",options:[\"Inter\",\"Plus Jakarta Sans\",\"Geist\",\"Space Grotesk\",\"DM Sans\",\"Outfit\",\"Syne\",\"Nunito\",\"Poppins\",\"Raleway\",\"Montserrat\",\"Oswald\",\"Bebas Neue\",\"Anton\",\"Space Mono\",\"JetBrains Mono\",\"Roboto Mono\",\"Custom\"]},customFont:{type:ControlType.String,title:\"Custom Font Name\",defaultValue:\"\",placeholder:\"e.g. Arial, Helvetica, Georgia\",hidden(props){return props.fontPreset!==\"Custom\";}},sizeMode:{type:ControlType.Enum,title:\"Size Mode\",defaultValue:\"fill\",options:[\"fill\",\"fixed\"],optionTitles:[\"Fill\",\"Fixed\"],displaySegmentedControl:true},fontSize:{type:ControlType.Number,title:\"Font Size\",defaultValue:120,min:10,max:800,step:1,unit:\"px\",hidden(props){return props.sizeMode!==\"fixed\";}},dotSize:{type:ControlType.Number,title:\"Dot Size\",defaultValue:6,min:1,max:16,step:1,unit:\"px\"},gap:{type:ControlType.Number,title:\"Gap\",defaultValue:2,min:1,max:8,step:1,unit:\"px\"},accentColor:{type:ControlType.Color,title:\"Accent Color\",defaultValue:\"#3B5BFF\"},secondaryColor:{type:ControlType.Color,title:\"Secondary Color\",defaultValue:\"#2e2e2e\"},backgroundColor:{type:ControlType.Color,title:\"Background\",defaultValue:\"#000000\"},accentDensity:{type:ControlType.Number,title:\"Accent Density\",defaultValue:15,min:0,max:100,step:1,unit:\"%\"},animate:{type:ControlType.Boolean,title:\"Animate\",defaultValue:true,enabledTitle:\"On\",disabledTitle:\"Off\"},speed:{type:ControlType.Number,title:\"Speed\",defaultValue:50,min:0,max:100,step:1,hidden(props){return!props.animate;}}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"TextMatrix\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutWidth\":\"any-prefer-fixed\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutHeight\":\"any-prefer-fixed\",\"framerIntrinsicWidth\":\"600\",\"framerIntrinsicHeight\":\"200\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./LEDMatrixText.map"],"mappings":"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"}