{"version":3,"file":"Codex_Reveal.BWwY5dT5.mjs","names":["useRef"],"sources":["https:/framerusercontent.com/modules/vTuqpJH7VzmsO4Ku7fsA/rsBPS8i55bSw5aD6u6v1/Codex_Reveal.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import{useEffect,useRef}from\"react\";import{addPropertyControls,ControlType,useIsStaticRenderer}from\"framer\";// Framer Component: AsciiWaterReveal (Optimized version with speed control and static rendering fallback)\nexport default function AsciiWaterReveal(props){const canvasRef=useRef(null);const containerRef=useRef(null);// Framer Requirement: Check if rendering in canvas/export mode\nconst isStatic=useIsStaticRenderer();useEffect(()=>{const canvas=canvasRef.current;const container=containerRef.current;if(!canvas||!container)return;const ctx=canvas.getContext(\"2d\");if(!ctx)return;let animationFrameId;let width=0;let height=0;let cols=0;let rows=0;let isSleeping=false;let idleFrames=0;const fontSize=props.fontSize||13;const densityMultiplier=props.density||1;const colSpacing=fontSize*.85/densityMultiplier;const rowSpacing=fontSize*1.15/densityMultiplier;let buffer1;let buffer2;// Pre-allocate color palette for performance\nconst alphaSteps=14;const maxOpacity=props.maxOpacity||.35;const colorPalette=Array.from({length:alphaSteps+1},(_,i)=>{const alpha=(i/alphaSteps*maxOpacity).toFixed(3);return`rgba(255, 255, 255, ${alpha})`;});// Physics functions\nfunction wakeUp(){idleFrames=0;if(isSleeping&&!isStatic){isSleeping=false;render();}}function initBuffers(){const rect=container.getBoundingClientRect();width=canvas.width=rect.width;height=canvas.height=rect.height;cols=Math.ceil(width/colSpacing)+2;rows=Math.ceil(height/rowSpacing)+2;const size=cols*rows;buffer1=new Float32Array(size);buffer2=new Float32Array(size);// In static mode (Framer canvas), simulate a single drop in the center for visual preview\nif(isStatic){const centerX=width/2;const centerY=height/2;drop(centerX,centerY,6,8);}else{wakeUp();}}const resizeObserver=new ResizeObserver(()=>initBuffers());resizeObserver.observe(container);initBuffers();const mouse={x:-1,y:-1,prevX:-1,prevY:-1,isDown:false};function drop(x,y,radius,strength){const gridX=Math.floor(x/colSpacing);const gridY=Math.floor(y/rowSpacing);for(let r=-radius;r<=radius;r++){for(let c=-radius;c<=radius;c++){const nx=gridX+c;const ny=gridY+r;if(nx>0&&nx<cols-1&&ny>0&&ny<rows-1){const dist=c*c+r*r;const radSq=radius*radius;if(dist<radSq){const index=ny*cols+nx;buffer1[index]+=strength*(1-dist/radSq);}}}}if(!isStatic)wakeUp();}const handlePointerMove=e=>{if(isStatic)return;const rect=canvas.getBoundingClientRect();mouse.x=e.clientX-rect.left;mouse.y=e.clientY-rect.top;if(mouse.prevX===-1){mouse.prevX=mouse.x;mouse.prevY=mouse.y;}const dx=mouse.x-mouse.prevX;const dy=mouse.y-mouse.prevY;const speedSq=dx*dx+dy*dy;if(speedSq>2){const speed=Math.sqrt(speedSq);const steps=Math.min(Math.floor(speed/6),8);const strength=Math.min(speed*.12,3.5)*(mouse.isDown?1.8:1);const radius=mouse.isDown?3:2;for(let i=0;i<=steps;i++){const t=steps===0?0:i/steps;drop(mouse.prevX+dx*t,mouse.prevY+dy*t,radius,strength);}}mouse.prevX=mouse.x;mouse.prevY=mouse.y;};const handlePointerDown=()=>{if(isStatic)return;mouse.isDown=true;if(mouse.x!==-1)drop(mouse.x,mouse.y,5,7);};const handlePointerUp=()=>{mouse.isDown=false;};const handlePointerLeave=()=>{mouse.prevX=-1;mouse.prevY=-1;};if(!isStatic){container.addEventListener(\"pointermove\",handlePointerMove,{passive:true});container.addEventListener(\"pointerdown\",handlePointerDown,{passive:true});window.addEventListener(\"pointerup\",handlePointerUp,{passive:true});container.addEventListener(\"pointerleave\",handlePointerLeave,{passive:true});}const chars=[\"\\xb7\",\".\",\"-\",\"~\",\"=\",\"+\",\"x\",\"*\",\"o\"];const charsLen=chars.length-1;const damping=props.damping||.96;const waveSpeed=props.velocity||.48;function render(){ctx.clearRect(0,0,width,height);ctx.font=`${fontSize}px monospace`;ctx.textBaseline=\"middle\";ctx.textAlign=\"center\";let activeCells=0;// 1. PHYSICS STEP\nfor(let y=1;y<rows-1;y++){const rowOffset=y*cols;for(let x=1;x<cols-1;x++){const i=rowOffset+x;buffer2[i]=(buffer1[i-1]+buffer1[i+1]+buffer1[i-cols]+buffer1[i+cols])*waveSpeed-buffer2[i];buffer2[i]*=damping;}}// Buffer swap\nconst temp=buffer1;buffer1=buffer2;buffer2=temp;// 2. RENDER STEP\nfor(let y=1;y<rows-1;y++){const rowOffset=y*cols;const posY=y*rowSpacing;for(let x=1;x<cols-1;x++){const i=rowOffset+x;const intensity=Math.abs(buffer1[i]);if(intensity>.008){activeCells++;const posX=x*colSpacing;const charIndex=Math.min(intensity*2.2|0,charsLen);const colorIndex=Math.min(intensity*6|0,alphaSteps);ctx.fillStyle=colorPalette[colorIndex];ctx.fillText(chars[charIndex],posX,posY);}}}// Framer Requirement: Stop animation loop if rendering statically\nif(isStatic)return;// Sleep mode (CPU conservation)\nif(activeCells===0&&!mouse.isDown){idleFrames++;if(idleFrames>30){isSleeping=true;return;}}else{idleFrames=0;}animationFrameId=requestAnimationFrame(render);}render();return()=>{resizeObserver.disconnect();if(!isStatic){container.removeEventListener(\"pointermove\",handlePointerMove);container.removeEventListener(\"pointerdown\",handlePointerDown);window.removeEventListener(\"pointerup\",handlePointerUp);container.removeEventListener(\"pointerleave\",handlePointerLeave);cancelAnimationFrame(animationFrameId);}};},[props.fontSize,props.damping,props.maxOpacity,props.density,props.velocity,isStatic]);return /*#__PURE__*/_jsx(\"div\",{ref:containerRef,style:{width:\"100%\",height:\"100%\",minWidth:50,minHeight:50,background:\"transparent\",overflow:\"hidden\",position:\"relative\",userSelect:\"none\",touchAction:\"none\"},children:/*#__PURE__*/_jsx(\"canvas\",{ref:canvasRef,style:{display:\"block\",width:\"100%\",height:\"100%\",pointerEvents:\"none\"}})});}// Framer property controls configuration\naddPropertyControls(AsciiWaterReveal,{fontSize:{type:ControlType.Number,title:\"Font Size\",defaultValue:13,min:8,max:24},density:{type:ControlType.Number,title:\"Grid Density\",defaultValue:1,min:.6,max:1.5,step:.1},damping:{type:ControlType.Number,title:\"Water Fluidity\",defaultValue:.96,min:.85,max:.99,step:.01},velocity:{type:ControlType.Number,title:\"Wave Speed\",defaultValue:.48,min:.1,max:.5,step:.01,displayStepper:true},maxOpacity:{type:ControlType.Number,title:\"Opacity (Alpha)\",defaultValue:.35,min:.05,max:1,step:.05}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"AsciiWaterReveal\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Codex_Reveal.map"],"mappings":"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"}