{"version":3,"file":"ExplodingTap_prod.CAlxSucf.mjs","names":["useRef"],"sources":["https:/framerusercontent.com/modules/nce1fbnCkcknc2G3RuiL/mJjE2DMy2PMZi7KfiASn/ExplodingTap_prod.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import React,{useEffect,useRef}from\"react\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";import{useAnimationFrame}from\"framer-motion\";// Mapping helpers (see how-to-build-framer-components/mappingValues.md)\nfunction mapLinear(value,inMin,inMax,outMin,outMax){if(inMax===inMin)return outMin;const t=(value-inMin)/(inMax-inMin);return outMin+t*(outMax-outMin);}// Deterministic PRNG per mount to avoid preview cross-run bias of Math.random\nfunction createPRNG(seed){// Mulberry32\nreturn function(){seed|=0;seed=seed+1831565813|0;let t=Math.imul(seed^seed>>>15,1|seed);t=t+Math.imul(t^t>>>7,61|t)^t;return((t^t>>>14)>>>0)/4294967296;};}/**\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight any-prefer-fixed\n * @framerIntrinsicWidth 1\n * @framerIntrinsicHeight 1\n * @framerDisableUnlink\n */export default function ExplodingTap({mode=\"components\",content=[],itemCount=4,image1,image2,image3,image4,image5,image6,image7,image8,image9,image10,itemWidth=40,itemHeight=40,count=1,direction={horizontal:\"center\",vertical:\"top\"},gravity=900,duration=1200,scale={value:1,randomize:false,randomVariation:0},rotation={value:0,animate:false},speed=1,randomness=1,preview=false,style}){const particleIdCounter=useRef(0);const containerRef=useRef(null);const particleContainerRef=useRef(null);const particlesRef=useRef([]);const randRef=useRef(()=>Math.random());const previewRef=useRef(preview);// Keep preview ref updated\nuseEffect(()=>{previewRef.current=preview;},[preview]);// Get images array for images mode\nconst images=[image1,image2,image3,image4,image5,image6,image7,image8,image9,image10];// Determine actual content to use based on mode\nconst actualContent=mode===\"images\"?images.slice(0,itemCount):content;const actualCount=mode===\"images\"?itemCount:content.length;// Global preview-safe cleanup (handles Framer preview reloads across canvases)\nuseEffect(()=>{// Fresh seed per mount (time + random; no crypto types needed)\nconst timeBits=(Date.now()&4294967295)>>>0;const extra=Math.floor(Math.random()*4294967295)>>>0;const seed=(timeBits^extra)>>>0;randRef.current=createPRNG(seed);const w=window;if(!w.__EXPLODING_ROOTS__)w.__EXPLODING_ROOTS__=[];// Unmount any stray roots from previous previews\ntry{for(const root of w.__EXPLODING_ROOTS__){try{root.unmount?.();}catch{}}}finally{w.__EXPLODING_ROOTS__=[];}// Remove any stray particle DOM nodes\ndocument.querySelectorAll('[data-exploding-particle=\"true\"]').forEach(el=>{el.parentNode?.removeChild(el);});return()=>{// Best-effort cleanup of particles created by this instance\nparticlesRef.current.forEach(p=>{try{p.reactRoot?.unmount();}catch{}if(p.element&&p.element.parentNode){p.element.parentNode.removeChild(p.element);}});particlesRef.current=[];};},[]);// Helper function to calculate spawn position from click/tap event\nconst getClickSpawnPosition=event=>{const container=containerRef.current;if(!container)return null;const containerRect=container.getBoundingClientRect();// Get click/tap coordinates\nlet clientX;let clientY;// Check if it's a MouseEvent\nif(\"clientX\"in event&&\"clientY\"in event){clientX=event.clientX;clientY=event.clientY;}else if(event.touches&&event.touches.length>0){// TouchEvent with touches array\nclientX=event.touches[0].clientX;clientY=event.touches[0].clientY;}else if(event.changedTouches&&event.changedTouches.length>0){// TouchEvent with changedTouches (fallback)\nclientX=event.changedTouches[0].clientX;clientY=event.changedTouches[0].clientY;}else{return null;}// Calculate position relative to container\nconst x=clientX-containerRect.left;const y=clientY-containerRect.top;return{x,y};};// Shared function to create particles at a given position\nconst createParticlesAtPosition=(x,y)=>{const spawnOne=()=>{// Map direction controls to velocity values\n// Horizontal: left = -0.4, center = 0, right = +0.4\nconst horizontalValue=direction.horizontal===\"left\"?-.4:direction.horizontal===\"right\"?.4:0;const baseVx=mapLinear(horizontalValue,-1,1,-800,800);const spreadVx=mapLinear(randomness,0,1,0,300)// Controlled by randomness prop\n;const vx=(baseVx+(randRef.current()*2-1)*spreadVx)*speed;// Vertical: top = -0.7, center = 0, bottom = +0.7\nconst verticalValue=direction.vertical===\"top\"?-.7:direction.vertical===\"bottom\"?.7:0;const baseVy=mapLinear(verticalValue,-1,1,-800,800);const spreadVy=mapLinear(randomness,0,1,0,300)// Controlled by randomness prop\n;const vy=(baseVy+(randRef.current()*2-1)*spreadVy)*speed;particleIdCounter.current+=1;const randBetween=(min,max)=>min+randRef.current()*(max-min);// Calculate fixed scale with optional randomization\nconst baseScale=scale.value??1;let particleScale=baseScale;if(scale.randomize&&scale.randomVariation!==undefined&&scale.randomVariation>0){// Convert percentage to decimal (e.g., 10% = 0.1)\nconst variation=scale.randomVariation/100*baseScale;const minScale=baseScale-variation;const maxScale=baseScale+variation;particleScale=randBetween(minScale,maxScale);}// Ensure scale is within safe bounds\nconst safeScale=Math.max(.1,Math.min(4,particleScale));// Calculate rotation with optional animation\nconst baseRotation=rotation.value??0;let initRot=baseRotation;let endRot=baseRotation;if(rotation.animate){// Spawn with random rotation\ninitRot=randBetween(-180,180);// Animate by a random delta, capped at 360 degrees\nconst rotationDelta=randBetween(-360,360);endRot=initRot+rotationDelta;}// Create DOM element for particle (imperative; avoids React remount jitter)\nconst el=document.createElement(\"div\");el.setAttribute(\"data-exploding-particle\",\"true\");el.style.position=\"absolute\";el.style.left=\"0\";el.style.top=\"0\";el.style.width=mode===\"images\"?`${itemWidth}px`:\"32px\";el.style.height=mode===\"images\"?`${itemHeight}px`:\"32px\";el.style.display=\"flex\";el.style.alignItems=\"center\";el.style.justifyContent=\"center\";el.style.pointerEvents=\"none\";el.style.willChange=\"transform, opacity\";el.style.transformOrigin=\"50% 50%\";el.style.transform=`translate(${x}px, ${y}px) translate(-50%, -50%) scale(${safeScale}) rotate(${initRot}deg)`;el.style.opacity=\"1\";// Render content inside\nif(actualContent&&actualContent.length>0){const contentIdx=(particleIdCounter.current-1)%actualContent.length;const contentElement=actualContent[contentIdx];if(contentElement){if(mode===\"images\"&&contentElement.src){// For images mode, use native img element\nconst img=document.createElement(\"img\");img.src=contentElement.src;img.style.width=\"100%\";img.style.height=\"100%\";img.style.objectFit=\"cover\";el.appendChild(img);}else{// For components mode, use React root\nconst tempDiv=document.createElement(\"div\");tempDiv.style.width=\"100%\";tempDiv.style.height=\"100%\";el.appendChild(tempDiv);import(\"react-dom/client\").then(({createRoot})=>{const root=createRoot(tempDiv);window.__EXPLODING_ROOTS__.push(root);root.render(/*#__PURE__*/React.cloneElement(contentElement,{style:{...contentElement?.props?.style,transform:\"none\",scale:\"none\",rotate:\"none\",translate:\"none\",maxWidth:\"100%\",maxHeight:\"100%\",width:\"100%\",height:\"100%\"}}));// Attach root reference after render completes\nnewParticle.reactRoot=root;});}}}else{const fallback=document.createElement(\"div\");fallback.style.width=\"16px\";fallback.style.height=\"16px\";fallback.style.borderRadius=\"6px\";fallback.style.backgroundColor=\"#6366f1\";el.appendChild(fallback);}// Append to container\nif(particleContainerRef.current){particleContainerRef.current.appendChild(el);}// Create particle object\nconst newParticle={id:particleIdCounter.current,x:x,y:y,scale:safeScale,rotate:initRot,opacity:1,vx,vy,gravity:mapLinear(Math.max(-1,Math.min(1,gravity??.45)),-1,1,-2e3,2e3),birthTime:performance.now(),lifeMs:duration*1e3,contentIdx:actualContent.length>0?(particleIdCounter.current-1)%actualContent.length:-1,scaleStart:safeScale,scaleEnd:safeScale,rotateStart:initRot,rotateEnd:endRot,element:el,isDead:false,reactRoot:undefined};particlesRef.current.push(newParticle);// Remove after lifetime\nsetTimeout(()=>{newParticle.isDead=true;try{newParticle.reactRoot?.unmount();}catch{}const w=window;if(w.__EXPLODING_ROOTS__){w.__EXPLODING_ROOTS__=w.__EXPLODING_ROOTS__.filter(r=>r!==newParticle.reactRoot);}if(newParticle.element&&newParticle.element.parentNode){newParticle.element.parentNode.removeChild(newParticle.element);}particlesRef.current=particlesRef.current.filter(p=>p.id!==newParticle.id);},duration*1e3);};const particlesToSpawn=Math.max(1,Math.min(5,Math.round(count)));for(let i=0;i<particlesToSpawn;i++)spawnOne();};// Listen for click/tap events on parent element (2 levels up)\nuseEffect(()=>{const container=containerRef.current;if(!container)return;// Find parent element 2 levels up (Framer wraps code components)\nlet parentElement=container.parentElement;if(parentElement){parentElement=parentElement.parentElement;}if(!parentElement)return;// Handle both mouse clicks and touch events\nconst handleClick=e=>{// Check if click is within the parent element\nconst parentRect=parentElement.getBoundingClientRect();let clientX;let clientY;// Check if it's a MouseEvent\nif(\"clientX\"in e&&\"clientY\"in e){clientX=e.clientX;clientY=e.clientY;}else if(e.touches&&e.touches.length>0){// TouchEvent with touches array\nclientX=e.touches[0].clientX;clientY=e.touches[0].clientY;}else if(e.changedTouches&&e.changedTouches.length>0){// TouchEvent with changedTouches (fallback)\nclientX=e.changedTouches[0].clientX;clientY=e.changedTouches[0].clientY;}else{return;}// Only spawn if click is within parent bounds\nif(clientX>=parentRect.left&&clientX<=parentRect.right&&clientY>=parentRect.top&&clientY<=parentRect.bottom){const pos=getClickSpawnPosition(e);if(pos){createParticlesAtPosition(pos.x,pos.y);}}};// Prevent default touch behavior to avoid scrolling issues\nconst handleTouchStart=e=>{handleClick(e);// Don't prevent default to allow normal touch behavior\n};parentElement.addEventListener(\"click\",handleClick);parentElement.addEventListener(\"touchstart\",handleTouchStart);return()=>{parentElement?.removeEventListener(\"click\",handleClick);parentElement?.removeEventListener(\"touchstart\",handleTouchStart);};},[direction,gravity,duration,content,count,scale,rotation,mode,itemWidth,itemHeight,speed,randomness]);// Preview mode: automatically spawn particles in canvas mode\nuseEffect(()=>{const isCanvas=RenderTarget.current()===RenderTarget.canvas;if(!isCanvas||!preview)return;const spawnPreviewParticles=()=>{const container=containerRef.current;if(!container)return;// Find parent element 2 levels up\nlet parentElement=container.parentElement;if(parentElement){parentElement=parentElement.parentElement;}if(parentElement){const parentRect=parentElement.getBoundingClientRect();const containerRect=container.getBoundingClientRect();// Spawn from center of parent element\nconst x=parentRect.left-containerRect.left+parentRect.width/2;const y=parentRect.top-containerRect.top+parentRect.height/2;createParticlesAtPosition(x,y);}else{// Fallback to center if parent not found\ncreateParticlesAtPosition(0,0);}};// Spawn particles every 300ms\nconst intervalId=setInterval(spawnPreviewParticles,300);return()=>{clearInterval(intervalId);};},[preview,direction,gravity,duration,count,scale,rotation,mode,itemWidth,itemHeight,content,actualContent,speed,randomness]);// Cleanup: Remove all particles instantly when preview is turned off in canvas mode\nuseEffect(()=>{const isCanvas=RenderTarget.current()===RenderTarget.canvas;if(!isCanvas||preview)return;// Remove all particles immediately\nparticlesRef.current.forEach(p=>{p.isDead=true;try{p.reactRoot?.unmount();}catch{}const w=window;if(w.__EXPLODING_ROOTS__){w.__EXPLODING_ROOTS__=w.__EXPLODING_ROOTS__.filter(r=>r!==p.reactRoot);}if(p.element&&p.element.parentNode){p.element.parentNode.removeChild(p.element);}});particlesRef.current=[];},[preview]);// Shared animation update function\nconst updateParticles=delta=>{const dtMs=delta?Math.min(32,delta):16// default to ~60fps if no delta\n;const dt=dtMs/1e3// convert to seconds\n;// Use performance.now() consistently with birthTime\nconst now=performance.now();// Update all particles via direct DOM manipulation (imperative updates, no React re-renders)\nparticlesRef.current.forEach(p=>{// Skip dead particles\nif(p.isDead)return;const age=now-p.birthTime;// Check if element exists\nif(!p.element){return;}// Check if particle exceeded lifetime\nif(age>=p.lifeMs){return;}// Calculate progress (0 to 1) for interpolation\nconst progress=age/p.lifeMs;// Integrate motion: v = v + a*dt; s = s + v*dt\np.vy=p.vy+p.gravity*dt;p.x=p.x+p.vx*dt;p.y=p.y+p.vy*dt;// Interpolate scale, rotate, and opacity based on lifetime progress\np.scale=mapLinear(progress,0,1,p.scaleStart,p.scaleEnd);p.rotate=mapLinear(progress,0,1,p.rotateStart,p.rotateEnd);// Fade out in last 30% of lifetime\nconst fadeStart=.7;p.opacity=progress>fadeStart?mapLinear(progress,fadeStart,1,1,0):1;// Check for invalid values\nif(isNaN(p.x)||isNaN(p.y)||isNaN(p.scale)){return;}// Clamp scale and update transform in correct order: rotate -> scale -> center -> position\nconst clampedScale=Math.max(.1,Math.min(3,p.scale));const transformValue=`translate(${p.x}px, ${p.y}px) translate(-50%, -50%) scale(${clampedScale}) rotate(${p.rotate}deg)`;p.element.style.transform=transformValue;p.element.style.opacity=String(p.opacity);});};// Physics loop using direct DOM manipulation for maximum performance\nuseAnimationFrame((time,delta)=>{updateParticles(delta);});// Fallback animation loop for canvas mode (in case useAnimationFrame doesn't run)\nuseEffect(()=>{const isCanvas=RenderTarget.current()===RenderTarget.canvas;if(!isCanvas||!preview)return;let rafId;let lastTime=performance.now();const animate=currentTime=>{const delta=currentTime-lastTime;lastTime=currentTime;updateParticles(delta);rafId=requestAnimationFrame(animate);};rafId=requestAnimationFrame(animate);return()=>{cancelAnimationFrame(rafId);};},[preview]);return /*#__PURE__*/_jsx(\"div\",{ref:containerRef,style:{...style,position:\"relative\",width:\"0px\",height:\"0px\",overflow:\"visible\",backgroundColor:\"transparent\",transform:\"translateZ(0)\",transformStyle:\"flat\"},children:/*#__PURE__*/_jsx(\"div\",{ref:particleContainerRef,style:{position:\"absolute\",left:0,top:0,width:\"100%\",height:\"100%\",pointerEvents:\"none\"}})});}addPropertyControls(ExplodingTap,{preview:{type:ControlType.Boolean,title:\"Preview\",defaultValue:false},mode:{type:ControlType.Enum,title:\"Mode\",options:[\"components\",\"images\"],optionTitles:[\"Components\",\"Images\"],defaultValue:\"components\",displaySegmentedControl:true,segmentedControlDirection:\"vertical\"},content:{type:ControlType.Array,title:\"Content\",control:{type:ControlType.ComponentInstance},hidden:props=>props.mode===\"images\"},itemCount:{type:ControlType.Number,title:\"Count\",min:1,max:10,step:1,defaultValue:4,hidden:props=>props.mode===\"components\"},image1:{type:ControlType.ResponsiveImage,title:\"Image 1\",hidden:props=>props.mode!==\"images\"},image2:{type:ControlType.ResponsiveImage,title:\"Image 2\",hidden:props=>props.mode!==\"images\"||(props?.itemCount??4)<2},image3:{type:ControlType.ResponsiveImage,title:\"Image 3\",hidden:props=>props.mode!==\"images\"||(props?.itemCount??4)<3},image4:{type:ControlType.ResponsiveImage,title:\"Image 4\",hidden:props=>props.mode!==\"images\"||(props?.itemCount??4)<4},image5:{type:ControlType.ResponsiveImage,title:\"Image 5\",hidden:props=>props.mode!==\"images\"||(props?.itemCount??4)<5},image6:{type:ControlType.ResponsiveImage,title:\"Image 6\",hidden:props=>props.mode!==\"images\"||(props?.itemCount??4)<6},image7:{type:ControlType.ResponsiveImage,title:\"Image 7\",hidden:props=>props.mode!==\"images\"||(props?.itemCount??4)<7},image8:{type:ControlType.ResponsiveImage,title:\"Image 8\",hidden:props=>props.mode!==\"images\"||(props?.itemCount??4)<8},image9:{type:ControlType.ResponsiveImage,title:\"Image 9\",hidden:props=>props.mode!==\"images\"||(props?.itemCount??4)<9},image10:{type:ControlType.ResponsiveImage,title:\"Image 10\",hidden:props=>props.mode!==\"images\"||(props?.itemCount??4)<10},itemWidth:{type:ControlType.Number,title:\"Width\",min:20,max:200,step:5,defaultValue:40,unit:\"px\",hidden:props=>props.mode!==\"images\"},itemHeight:{type:ControlType.Number,title:\"Height\",min:20,max:200,step:5,defaultValue:40,unit:\"px\",hidden:props=>props.mode!==\"images\"},count:{type:ControlType.Number,title:\"Amount\",min:1,max:5,step:1,defaultValue:1},scale:{type:ControlType.Object,title:\"Scale\",controls:{value:{type:ControlType.Number,title:\"Scale\",min:.5,max:4,step:.05,defaultValue:1},randomize:{type:ControlType.Boolean,title:\"Randomize\",defaultValue:false},randomVariation:{type:ControlType.Number,title:\"Variation\",min:0,max:100,step:1,defaultValue:0,unit:\"%\",hidden:props=>!props.randomize}}},rotation:{type:ControlType.Object,title:\"Rotation\",controls:{value:{type:ControlType.Number,title:\"Rotation\",min:-360,max:360,step:1,defaultValue:0,unit:\"\\xb0\"},animate:{type:ControlType.Boolean,title:\"Animate\",defaultValue:false}}},direction:{type:ControlType.Object,title:\"Direction\",controls:{horizontal:{type:ControlType.Enum,title:\"Horizontal\",options:[\"left\",\"center\",\"right\"],optionTitles:[\"<-\",\"•\",\"->\"],defaultValue:\"left\",displaySegmentedControl:true},vertical:{type:ControlType.Enum,title:\"Vertical\",options:[\"top\",\"center\",\"bottom\"],optionTitles:[\"↑\",\"•\",\"↓\"],defaultValue:\"top\",displaySegmentedControl:true}}},speed:{type:ControlType.Number,title:\"Speed\",min:.1,max:1,step:.05,defaultValue:1},randomness:{type:ControlType.Number,title:\"Random\",min:0,max:1,step:.05,defaultValue:1},gravity:{type:ControlType.Number,title:\"Gravity\",min:-1,max:1,step:.05,defaultValue:.7},duration:{type:ControlType.Number,title:\"Duration\",min:.2,max:10,step:.1,defaultValue:3,description:\"More components at [Framer University](https://frameruni.link/cc).\"}});ExplodingTap.displayName=\"Exploding Tap\";\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"ExplodingTap\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutWidth\":\"any-prefer-fixed\",\"framerDisableUnlink\":\"\",\"framerContractVersion\":\"1\",\"framerIntrinsicHeight\":\"1\",\"framerIntrinsicWidth\":\"1\",\"framerSupportedLayoutHeight\":\"any-prefer-fixed\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./ExplodingTap_prod.map"],"mappings":"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"}