{"version":3,"file":"Deconstruct_Mask.DiRBeHFA.mjs","names":["useRef","useCallback"],"sources":["https:/framerusercontent.com/modules/peSvsGDL0Pj2e8NxI5by/TqBobW0So6oWB5tU6l47/Deconstruct_Mask.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{addPropertyControls,ControlType,useIsStaticRenderer}from\"framer\";import{useEffect,useRef,useCallback}from\"react\";/**\n * PixalateTale — v3 (Reveal Edition)\n *\n * Cursor pixelates and destroys the TOP image — pixels fall with gravity,\n * revealing a SECOND image underneath.\n * Top image heals back over time (~4s default).\n *\n * — Image: top layer that gets destroyed by cursor\n * — Reveal Image: bottom layer that gets uncovered (falls back to black if empty)\n * — Gravity Drop: torn pieces physically fall from where they originated\n * — Image Sampling: falling blocks carry the real top-image color with them\n */export default function PixalateTale(props){const isStatic=useIsStaticRenderer();const{image,revealImage,pixelSize,brushRadius,trailFadeSpeed,trailOpacity,gravityEnabled,gravityStrength,imageSampling,showFallingBlocks}=props;// ── Canvas refs ────────────────────────────────────────────────────────\nconst canvasRef=useRef(null);const originalRef=useRef(null);const pixelatedRef=useRef(null);const topMaskRef=useRef(null)// offscreen: top image with holes\n;// ── Data maps ──────────────────────────────────────────────────────────\nconst trailMapRef=useRef(null)// intensity per cell\n;const gravOffsetRef=useRef(null)// y-drop in CSS px per cell\n;const gravVelocityRef=useRef(null)// y-velocity in px/s per cell\n;const sampledColorsRef=useRef(null)// RGBA per cell from original\n;// ── State refs ─────────────────────────────────────────────────────────\nconst animRef=useRef(0);const mouseRef=useRef({x:-1e3,y:-1e3});const isHoverRef=useRef(false);const imgLoadedRef=useRef(false);const imgRef=useRef(null);const revealLoadedRef=useRef(false);const revealImgRef=useRef(null);const revealDimsRef=useRef({x:0,y:0,w:0,h:0});const sizeRef=useRef({w:0,h:0});const gridSizeRef=useRef({w:0,h:0});// ── Static renderer: show placeholder thumbnail ──────────────────────────\nif(isStatic){return /*#__PURE__*/_jsxs(\"div\",{style:{width:\"100%\",height:\"100%\",position:\"relative\",overflow:\"hidden\",background:\"#111111\",display:\"flex\",alignItems:\"center\",justifyContent:\"center\",flexDirection:\"column\",gap:12},children:[image?/*#__PURE__*/_jsx(\"img\",{src:image,style:{position:\"absolute\",inset:0,width:\"100%\",height:\"100%\",objectFit:\"cover\",opacity:.85}}):null,/*#__PURE__*/_jsx(\"div\",{style:{position:\"relative\",zIndex:1,color:\"rgba(255,255,255,0.6)\",fontSize:13,fontFamily:\"Inter, sans-serif\",letterSpacing:\"0.08em\",textTransform:\"uppercase\",background:\"rgba(0,0,0,0.5)\",padding:\"6px 14px\",borderRadius:4,backdropFilter:\"blur(8px)\"},children:\"Pixalate Tale\"})]});}// ── Load TOP image ─────────────────────────────────────────────────────\nuseEffect(()=>{if(!image)return;imgLoadedRef.current=false;const img=new Image;img.crossOrigin=\"anonymous\";img.onload=()=>{imgRef.current=img;imgLoadedRef.current=true;prepareCanvases();};img.src=image;},[image]);// ── Load REVEAL image (the one underneath) ─────────────────────────────\nuseEffect(()=>{if(!revealImage){console.log(\"[PixalateTale] No revealImage prop provided\");revealLoadedRef.current=false;revealImgRef.current=null;if(imgLoadedRef.current)prepareCanvases();return;}console.log(\" Loading reveal image:\",revealImage);revealLoadedRef.current=false;const img=new Image;// NO crossOrigin — reveal image isn't sampled, just drawn.\n// Adding crossOrigin would require CORS headers on the image host.\nimg.onload=()=>{console.log(\"[PixalateTale] Reveal image LOADED successfully\",img.width,\"x\",img.height);revealImgRef.current=img;revealLoadedRef.current=true;prepareCanvases();};img.onerror=e=>{console.error(\"[PixalateTale] Reveal image FAILED to load:\",revealImage,e);revealLoadedRef.current=false;revealImgRef.current=null;};img.src=revealImage;},[revealImage]);// ── Prepare canvases + precompute sampled colors ───────────────────────\nconst prepareCanvases=useCallback(()=>{const canvas=canvasRef.current;const original=originalRef.current;const pixelated=pixelatedRef.current;const img=imgRef.current;if(!canvas||!original||!pixelated||!img)return;const parent=canvas.parentElement;if(!parent)return;const dpr=window.devicePixelRatio||1;const w=parent.clientWidth;const h=parent.clientHeight;sizeRef.current={w,h};[canvas,original,pixelated].forEach(c=>{c.width=w*dpr;c.height=h*dpr;c.style.width=`${w}px`;c.style.height=`${h}px`;});// Offscreen canvas for top layer + holes (created once, resized as needed)\nif(!topMaskRef.current){topMaskRef.current=document.createElement(\"canvas\");}topMaskRef.current.width=w*dpr;topMaskRef.current.height=h*dpr;// ── Draw original at DPR scale (cover fit) ──\nconst origCtx=original.getContext(\"2d\");if(!origCtx)return;const imgRatio=img.width/img.height;const canvasRatio=w/h;let drawW,drawH,drawX,drawY;if(imgRatio>canvasRatio){drawH=h;drawW=h*imgRatio;drawX=(w-drawW)/2;drawY=0;}else{drawW=w;drawH=w/imgRatio;drawX=0;drawY=(h-drawH)/2;}origCtx.save();origCtx.scale(dpr,dpr);origCtx.drawImage(img,drawX,drawY,drawW,drawH);origCtx.restore();// ── Compute REVEAL image cover-fit dimensions (drawn directly in render loop) ──\nconst revImg=revealImgRef.current;if(revImg&&revealLoadedRef.current){const rRatio=revImg.width/revImg.height;let rW,rH,rX,rY;if(rRatio>canvasRatio){rH=h;rW=h*rRatio;rX=(w-rW)/2;rY=0;}else{rW=w;rH=w/rRatio;rX=0;rY=(h-rH)/2;}revealDimsRef.current={x:rX,y:rY,w:rW,h:rH};}// ── Create pixelated version via small canvas scale-up ──\nconst pixCtx=pixelated.getContext(\"2d\");if(!pixCtx)return;const gridW=Math.ceil(w/pixelSize);const gridH=Math.ceil(h/pixelSize);gridSizeRef.current={w:gridW,h:gridH};const tempCanvas=document.createElement(\"canvas\");tempCanvas.width=gridW;tempCanvas.height=gridH;const tempCtx=tempCanvas.getContext(\"2d\");if(!tempCtx)return;tempCtx.imageSmoothingEnabled=false;tempCtx.drawImage(img,drawX/(w/gridW),drawY/(h/gridH),drawW/(w/gridW),drawH/(h/gridH));pixCtx.save();pixCtx.scale(dpr,dpr);pixCtx.imageSmoothingEnabled=false;pixCtx.drawImage(tempCanvas,0,0,gridW,gridH,0,0,w,h);pixCtx.restore();// ── Init data maps ──\nconst cellCount=gridW*gridH;trailMapRef.current=new Float32Array(cellCount).fill(0);gravOffsetRef.current=new Float32Array(cellCount).fill(0);gravVelocityRef.current=new Float32Array(cellCount).fill(0);// ── Pre-sample center pixel of each cell from original image ──\n// getImageData works in physical pixels regardless of context transform\nconst origData=origCtx.getImageData(0,0,w*dpr,h*dpr);const origPixels=origData.data;const physW=w*dpr;const sampled=new Uint8ClampedArray(cellCount*4);for(let gy=0;gy<gridH;gy++){for(let gx=0;gx<gridW;gx++){const cx=Math.min(Math.round((gx+.5)*pixelSize*dpr),physW-1);const cy=Math.min(Math.round((gy+.5)*pixelSize*dpr),h*dpr-1);const pIdx=(cy*physW+cx)*4;const cIdx=(gy*gridW+gx)*4;sampled[cIdx]=origPixels[pIdx];sampled[cIdx+1]=origPixels[pIdx+1];sampled[cIdx+2]=origPixels[pIdx+2];sampled[cIdx+3]=255;}}sampledColorsRef.current=sampled;// ── Initial draw: show original image ──\nconst mainCtx=canvas.getContext(\"2d\");if(!mainCtx)return;mainCtx.drawImage(original,0,0);},[pixelSize]);// Re-prepare if pixelSize changes after image is loaded\nuseEffect(()=>{if(imgLoadedRef.current)prepareCanvases();},[prepareCanvases]);// Resize handler\nuseEffect(()=>{const onResize=()=>{if(imgLoadedRef.current)prepareCanvases();};window.addEventListener(\"resize\",onResize);return()=>window.removeEventListener(\"resize\",onResize);},[prepareCanvases]);// ── Mouse ──────────────────────────────────────────────────────────────\nconst handleMouseMove=useCallback(e=>{const canvas=canvasRef.current;if(!canvas)return;const rect=canvas.getBoundingClientRect();mouseRef.current={x:e.clientX-rect.left,y:e.clientY-rect.top};isHoverRef.current=true;},[]);const handleMouseLeave=useCallback(()=>{isHoverRef.current=false;mouseRef.current={x:-1e3,y:-1e3};},[]);// ── Render loop ────────────────────────────────────────────────────────\nuseEffect(()=>{if(!image)return;const render=()=>{const canvas=canvasRef.current;const original=originalRef.current;const pixelated=pixelatedRef.current;const trailMap=trailMapRef.current;const gravOffset=gravOffsetRef.current;const gravVelocity=gravVelocityRef.current;const sampledColors=sampledColorsRef.current;if(!canvas||!original||!pixelated||!trailMap||!imgLoadedRef.current){animRef.current=requestAnimationFrame(render);return;}const{w,h}=sizeRef.current;const{w:gridW,h:gridH}=gridSizeRef.current;if(w===0||h===0||gridW===0){animRef.current=requestAnimationFrame(render);return;}const dpr=window.devicePixelRatio||1;const dt=1/60;const mx=mouseRef.current.x;const my=mouseRef.current.y;// ── 1. Paint trail where cursor is ──\nif(isHoverRef.current&&mx>0&&my>0){const gridX=Math.floor(mx/pixelSize);const gridY=Math.floor(my/pixelSize);const gridR=Math.ceil(brushRadius/pixelSize);for(let dy=-gridR;dy<=gridR;dy++){for(let dx=-gridR;dx<=gridR;dx++){const gx=gridX+dx;const gy=gridY+dy;if(gx<0||gx>=gridW||gy<0||gy>=gridH)continue;const dist=Math.sqrt(dx*dx+dy*dy);if(dist>gridR)continue;const falloff=1-dist/gridR;const idx=gy*gridW+gx;// Reset gravity for cells being repainted from low intensity\nif(gravOffset&&gravVelocity&&trailMap[idx]<.15){gravOffset[idx]=0;gravVelocity[idx]=0;}trailMap[idx]=Math.min(1,trailMap[idx]+falloff*.3);}}}// ── 2. Fade + gravity physics ──\nconst fadeAmount=trailFadeSpeed*dt;for(let i=0;i<trailMap.length;i++){if(trailMap[i]<=0)continue;trailMap[i]=Math.max(0,trailMap[i]-fadeAmount);if(gravityEnabled&&gravOffset&&gravVelocity){// Euler integration: a → v → offset\ngravVelocity[i]+=gravityStrength*dt;gravOffset[i]+=gravVelocity[i]*dt;}// Fully faded: reset gravity so next paint starts clean\nif(trailMap[i]===0&&gravOffset&&gravVelocity){gravOffset[i]=0;gravVelocity[i]=0;}}// ── 3. Composite frame ──\nconst mainCtx=canvas.getContext(\"2d\");if(!mainCtx){animRef.current=requestAnimationFrame(render);return;}// Reset transform to identity (physical pixel space)\nmainCtx.setTransform(1,0,0,1,0,0);mainCtx.clearRect(0,0,canvas.width,canvas.height);// ── LAYER 1: REVEAL IMAGE on main canvas (bottom) ──\nconst revImg=revealImgRef.current;if(revImg&&revealLoadedRef.current&&revImg.complete&&revImg.naturalWidth>0){let d=revealDimsRef.current;// Compute cover-fit on the fly if not cached yet\nif(d.w===0||d.h===0){const rRatio=revImg.width/revImg.height;const cRatio=w/h;let rW,rH,rX,rY;if(rRatio>cRatio){rH=h;rW=h*rRatio;rX=(w-rW)/2;rY=0;}else{rW=w;rH=w/rRatio;rX=0;rY=(h-rH)/2;}revealDimsRef.current={x:rX,y:rY,w:rW,h:rH};d=revealDimsRef.current;}mainCtx.drawImage(revImg,d.x*dpr,d.y*dpr,d.w*dpr,d.h*dpr);}else{mainCtx.fillStyle=\"#000000\";mainCtx.fillRect(0,0,canvas.width,canvas.height);}// ── LAYER 2: TOP IMAGE WITH HOLES (built offscreen, then composited) ──\n// This is the correct architecture: punching holes via destination-out\n// must happen on an isolated buffer, NOT on the main canvas where reveal lives.\nconst topMask=topMaskRef.current;if(topMask){const topCtx=topMask.getContext(\"2d\");if(topCtx){// Clear offscreen and draw fresh top image\ntopCtx.globalAlpha=1;topCtx.globalCompositeOperation=\"source-over\";topCtx.clearRect(0,0,topMask.width,topMask.height);topCtx.drawImage(original,0,0);// Punch holes — only affects this offscreen canvas\ntopCtx.globalCompositeOperation=\"destination-out\";for(let gy=0;gy<gridH;gy++){for(let gx=0;gx<gridW;gx++){const idx=gy*gridW+gx;const intensity=trailMap[idx];if(intensity<.01)continue;const sx=gx*pixelSize*dpr;const sy=gy*pixelSize*dpr;const sw=pixelSize*dpr;const sh=pixelSize*dpr;topCtx.globalAlpha=Math.min(1,intensity*2);topCtx.fillRect(sx,sy,sw,sh);}}// Reset offscreen state\ntopCtx.globalAlpha=1;topCtx.globalCompositeOperation=\"source-over\";// Composite onto main canvas — holes show reveal beneath\nmainCtx.globalAlpha=1;mainCtx.globalCompositeOperation=\"source-over\";mainCtx.drawImage(topMask,0,0);}}// ── Draw falling blocks OVER everything (optional) ──\n// These are the torn-off pieces of the top image, with gravity.\n// Disable if you only want clean reveal without debris.\nif(showFallingBlocks){mainCtx.globalCompositeOperation=\"source-over\";for(let gy=0;gy<gridH;gy++){for(let gx=0;gx<gridW;gx++){const idx=gy*gridW+gx;const intensity=trailMap[idx];if(intensity<.01)continue;const sx=gx*pixelSize*dpr;const sy=gy*pixelSize*dpr;const sw=pixelSize*dpr;const sh=pixelSize*dpr;const dropY=gravityEnabled&&gravOffset?gravOffset[idx]*dpr:0;const dx=sx;const dy=sy+dropY;mainCtx.globalAlpha=intensity*trailOpacity;if(imageSampling&&sampledColors){const cIdx=idx*4;mainCtx.fillStyle=`rgb(${sampledColors[cIdx]},${sampledColors[cIdx+1]},${sampledColors[cIdx+2]})`;mainCtx.fillRect(dx,dy,sw,sh);}else{mainCtx.drawImage(pixelated,sx,sy,sw,sh,dx,dy,sw,sh);}}}}// ── Reset context state ──\nmainCtx.globalAlpha=1;mainCtx.globalCompositeOperation=\"source-over\";animRef.current=requestAnimationFrame(render);};animRef.current=requestAnimationFrame(render);return()=>cancelAnimationFrame(animRef.current);},[image,revealImage,pixelSize,brushRadius,trailFadeSpeed,trailOpacity,gravityEnabled,gravityStrength,imageSampling,showFallingBlocks]);// ── Render ─────────────────────────────────────────────────────────────\nreturn /*#__PURE__*/_jsxs(\"div\",{style:{width:\"100%\",height:\"100%\",position:\"relative\",overflow:\"hidden\",cursor:\"crosshair\"},children:[/*#__PURE__*/_jsx(\"canvas\",{ref:originalRef,style:{display:\"none\"}}),/*#__PURE__*/_jsx(\"canvas\",{ref:pixelatedRef,style:{display:\"none\"}}),/*#__PURE__*/_jsx(\"canvas\",{ref:canvasRef,onMouseMove:handleMouseMove,onMouseLeave:handleMouseLeave,style:{width:\"100%\",height:\"100%\",display:\"block\"}}),!image&&/*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",inset:0,display:\"flex\",alignItems:\"center\",justifyContent:\"center\",color:\"rgba(255,255,255,0.3)\",fontSize:14,fontFamily:\"'Inter', sans-serif\",letterSpacing:\"0.05em\"},children:\"Upload top image + reveal image →\"})]});}// ── Default props ──────────────────────────────────────────────────────────\nPixalateTale.defaultProps={image:\"\",revealImage:\"\",pixelSize:16,brushRadius:60,trailFadeSpeed:.25,trailOpacity:1,gravityEnabled:true,gravityStrength:250,imageSampling:true,showFallingBlocks:true};// ── Property controls ──────────────────────────────────────────────────────\naddPropertyControls(PixalateTale,{image:{type:ControlType.Image,title:\"Top Image\"},revealImage:{type:ControlType.Image,title:\"Reveal Image\"},// ── Trail core ──\npixelSize:{type:ControlType.Number,title:\"Pixel Size\",defaultValue:16,min:4,max:64,step:2,displayStepper:true},brushRadius:{type:ControlType.Number,title:\"Brush Radius\",defaultValue:60,min:20,max:200,step:10,displayStepper:true},trailFadeSpeed:{type:ControlType.Number,title:\"Heal Speed\",defaultValue:.25,min:.05,max:2,step:.05},trailOpacity:{type:ControlType.Number,title:\"Trail Opacity\",defaultValue:1,min:.3,max:1,step:.05},// ── Image Sampling ──\nimageSampling:{type:ControlType.Boolean,title:\"Image Sampling\",defaultValue:true,enabledTitle:\"On\",disabledTitle:\"Off\"},// ── Image Sampling already declared above ──\n// ── Falling Blocks toggle ──\nshowFallingBlocks:{type:ControlType.Boolean,title:\"Falling Debris\",defaultValue:true,enabledTitle:\"On\",disabledTitle:\"Off\"},// ── Gravity ──\ngravityEnabled:{type:ControlType.Boolean,title:\"Gravity Drop\",defaultValue:true,enabledTitle:\"On\",disabledTitle:\"Off\"},gravityStrength:{type:ControlType.Number,title:\"↳ Gravity (px/s\\xb2)\",defaultValue:250,min:20,max:1200,step:20,displayStepper:true,hidden:props=>!props.gravityEnabled}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"PixalateTale\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Deconstruct_Mask.map"],"mappings":"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"}