{"version":3,"file":"ExplodingInput_prod.B-g0UVVm.mjs","names":["useRef"],"sources":["https:/framerusercontent.com/modules/dTwB3YBlgaY4UrDPKGGK/zu9uS4P7SukiR8YvUuU3/ExplodingInput_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 ExplodingInput({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},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);const inputRef=useRef(null);// 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 an input element\nconst getInputSpawnPosition=input=>{const container=containerRef.current;if(!container||!input)return null;const inputRect=input.getBoundingClientRect();const containerRect=container.getBoundingClientRect();// Get the input value\nconst inputValue=input.value;// Calculate position of the last character in the input\nconst getTextWidth=(text,input)=>{const canvas=document.createElement(\"canvas\");const context=canvas.getContext(\"2d\");if(!context)return 0;const computedStyle=window.getComputedStyle(input);context.font=`${computedStyle.fontSize} ${computedStyle.fontFamily}`;return context.measureText(text).width;};// Calculate x position of the last character\nlet x=0;if(inputValue.length>0){const textWidth=getTextWidth(inputValue,input);const inputStartX=inputRect.left-containerRect.left;const computedStyle=window.getComputedStyle(input);const paddingRight=parseInt(computedStyle.paddingRight,10);const maxX=inputStartX+inputRect.width-paddingRight;x=Math.min(textWidth+inputStartX,maxX);}else{// If input is empty, position at the start\nx=inputRect.left-containerRect.left;}const y=inputRect.top-containerRect.top+inputRect.height/2;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(1,0,1,0,300)// Hard-coded to 1 (maximum spread)\n;const vx=baseVx+(randRef.current()*2-1)*spreadVx;// 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(1,0,1,0,300)// Hard-coded to 1 (maximum spread)\n;const vy=baseVy+(randRef.current()*2-1)*spreadVy;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();};// Find input element and listen to changes\nuseEffect(()=>{const container=containerRef.current;if(!container)return;// Find the parent label element\nconst label=container.closest(\"label\");if(!label)return;// Find the input element within the label\nconst input=label.querySelector(\"input\");if(!input)return;// Store input ref for preview mode\ninputRef.current=input;// Listen to input changes\nconst handleInput=()=>{const pos=getInputSpawnPosition(input);if(pos){createParticlesAtPosition(pos.x,pos.y);}};input.addEventListener(\"input\",handleInput);return()=>{input.removeEventListener(\"input\",handleInput);inputRef.current=null;};},[direction,gravity,duration,content,count,scale,rotation,mode,itemWidth,itemHeight]);// 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;// Try to find input element\nlet input=inputRef.current;// If no ref, try to find input nearby\nif(!input){// Try finding in parent label\nconst label=container.closest(\"label\");input=label?.querySelector(\"input\");// If still not found, search in parent elements\nif(!input){let parent=container.parentElement;for(let i=0;i<5&&parent;i++){const foundInput=parent.querySelector(\"input\");if(foundInput){input=foundInput;break;}parent=parent.parentElement;}}// If still not found, search document for closest input\nif(!input){const allInputs=document.querySelectorAll(\"input[type='text'], input[type='email'], input[type='search'], input:not([type])\");if(allInputs.length>0){const containerRect=container.getBoundingClientRect();let closestInput=null;let closestDistance=Infinity;allInputs.forEach(inp=>{const inpRect=inp.getBoundingClientRect();const distance=Math.sqrt(Math.pow(inpRect.left+inpRect.width/2-(containerRect.left+containerRect.width/2),2)+Math.pow(inpRect.top+inpRect.height/2-(containerRect.top+containerRect.height/2),2));if(distance<closestDistance&&distance<500){closestDistance=distance;closestInput=inp;}});input=closestInput;}}}// Get spawn position from input or use center (0, 0)\nif(input){const pos=getInputSpawnPosition(input);if(pos){createParticlesAtPosition(pos.x,pos.y);}}else{// No input found - spawn from center\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]);// 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(ExplodingInput,{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}}},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).\"}});ExplodingInput.displayName=\"Exploding Input\";\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"ExplodingInput\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutWidth\":\"any-prefer-fixed\",\"framerContractVersion\":\"1\",\"framerIntrinsicWidth\":\"1\",\"framerDisableUnlink\":\"\",\"framerSupportedLayoutHeight\":\"any-prefer-fixed\",\"framerIntrinsicHeight\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./ExplodingInput_prod.map"],"mappings":"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"}