{"version":3,"file":"VaporizeTextCycle_Prod.a0FeKbpF.mjs","names":["Tag"],"sources":["https:/framerusercontent.com/modules/7Amh6YZ8n8u1J7i2DSAV/PBmnyBfP4oXQKgO7Hym0/VaporizeTextCycle_Prod.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{ControlType,addPropertyControls,RenderTarget}from\"framer\";import{useRef,useEffect,useState,createElement,useMemo,useCallback,memo}from\"react\";import{useInView}from\"framer-motion\";var Tag;(function(Tag){Tag[\"H1\"]=\"h1\";Tag[\"H2\"]=\"h2\";Tag[\"H3\"]=\"h3\";Tag[\"P\"]=\"p\";})(Tag||(Tag={}));// ------------------------------------------------------------ //\n// PROPERTY CONTROLS\n// ------------------------------------------------------------ //\naddPropertyControls(VaporizeTextCycle,{texts:{type:ControlType.Array,control:{type:ControlType.String},defaultValue:[\"Framer University\",\"Learn Framer\"]},font:{type:ControlType.Font,defaultFontType:\"sans-serif\",controls:\"extended\"},color:{type:ControlType.Color,defaultValue:\"rgb(153, 153, 153)\"},spread:{type:ControlType.Number,title:\"Spread\",defaultValue:5,min:1,max:50,step:1,unit:\"x\"},density:{type:ControlType.Number,title:\"Density\",defaultValue:5,min:.1,max:10,step:.01,unit:\"x\"},animation:{type:ControlType.Object,controls:{vaporizeDuration:{type:ControlType.Number,defaultValue:2,min:.1,max:10,step:.1,unit:\"s\",title:\"Duration\"},fadeInDuration:{type:ControlType.Number,defaultValue:1,min:0,max:5,step:.1,unit:\"s\",title:\"Fade In\"},waitDuration:{type:ControlType.Number,defaultValue:.5,min:0,max:5,step:.1,unit:\"s\",title:\"Delay\"}}},direction:{type:ControlType.Enum,displaySegmentedControl:true,title:\"Direction\",defaultValue:\"left-to-right\",options:[\"right-to-left\",\"left-to-right\"],optionTitles:[\"Right to Left\",\"Left to Right\"],optionIcons:[\"direction-left\",\"direction-right\"]},alignment:{type:ControlType.Enum,displaySegmentedControl:true,title:\"Alignment\",defaultValue:\"center\",options:[\"left\",\"center\",\"right\"],optionTitles:[\"Left\",\"Center\",\"Right\"]},tag:{type:ControlType.Enum,title:\"Tag\",defaultValue:\"p\",displaySegmentedControl:true,segmentedControlDirection:\"horizontal\",options:[\"h1\",\"h2\",\"h3\",\"p\"],optionTitles:[\"H1\",\"H2\",\"H3\",\"P\"]},canvasPreview:{type:ControlType.Boolean,defaultValue:true,title:\"Preview\",description:\"More components at [Framer University](https://frameruni.link/cc).\"}});// ------------------------------------------------------------ //\n// DEFAULT PROPS\n// ------------------------------------------------------------ //\nVaporizeTextCycle.defaultProps={texts:[\"Framer University\",\"Learn Framer\"],font:{fontFamily:\"sans-serif\",fontSize:\"50px\",textAlign:\"center\",fontWeight:400},color:\"rgb(153, 153, 153)\",spread:5,density:5,animation:{vaporizeDuration:2,fadeInDuration:1,waitDuration:.5},direction:\"left-to-right\",alignment:\"center\",canvasPreview:false};// ------------------------------------------------------------ //\n// MAIN COMPONENT\n// ------------------------------------------------------------ //\n/**\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight any-prefer-fixed\n * @framerIntrinsicWidth 400\n * @framerIntrinsicHeight 200\n * @framerDisableUnlink\n */export default function VaporizeTextCycle(props){const isOnFramerCanvas=RenderTarget.hasRestrictions();const canvasRef=useRef(null);const wrapperRef=useRef(null);const isInView=useInView(wrapperRef,{once:false,margin:\"50px\"});const lastFontRef=useRef(null);const particlesRef=useRef([]);const animationFrameRef=useRef(null);const[currentTextIndex,setCurrentTextIndex]=useState(0);const[animationState,setAnimationState]=useState(\"static\");const vaporizeProgressRef=useRef(0);const fadeOpacityRef=useRef(0);const{wrapperSize,setWrapperSize}=useWrapperSize();const transformedDensity=transformValue(props.density,[0,10],[.3,1],true);// memoized\nconst globalDpr=useMemo(()=>{if(isOnFramerCanvas){return 2;}else if(window!==undefined){return window.devicePixelRatio*1.5||1;}return 1;},[isOnFramerCanvas]);// Memoize static styles\nconst wrapperStyle=useMemo(()=>({width:\"100%\",height:\"100%\",pointerEvents:\"none\"}),[]);const canvasStyle=useMemo(()=>({minWidth:\"30px\",minHeight:\"20px\",pointerEvents:\"none\"}),[]);// Memoize animation durations\nconst animationDurations=useMemo(()=>({VAPORIZE_DURATION:props.animation.vaporizeDuration*1e3,FADE_IN_DURATION:props.animation.fadeInDuration*1e3,WAIT_DURATION:props.animation.waitDuration*1e3}),[props.animation.vaporizeDuration,props.animation.fadeInDuration,props.animation.waitDuration]);// Memoize font and spread calculations\nconst fontConfig=useMemo(()=>{const fontSize=parseInt(props.font.fontSize?.replace(\"px\",\"\")||\"50\");const VAPORIZE_SPREAD=calculateVaporizeSpread(fontSize);const MULTIPLIED_VAPORIZE_SPREAD=VAPORIZE_SPREAD*props.spread;return{fontSize,VAPORIZE_SPREAD,MULTIPLIED_VAPORIZE_SPREAD,font:`${props.font.fontWeight??400} ${fontSize*globalDpr}px ${props.font.fontFamily}`};},[props.font.fontSize,props.font.fontWeight,props.font.fontFamily,props.spread,globalDpr]);// Memoize particle update function\nconst memoizedUpdateParticles=useCallback((particles,vaporizeX,deltaTime)=>{return updateParticles(particles,vaporizeX,deltaTime,fontConfig.MULTIPLIED_VAPORIZE_SPREAD,animationDurations.VAPORIZE_DURATION,props.direction,transformedDensity);},[fontConfig.MULTIPLIED_VAPORIZE_SPREAD,animationDurations.VAPORIZE_DURATION,props.direction,transformedDensity]);// Memoize render function\nconst memoizedRenderParticles=useCallback((ctx,particles)=>{renderParticles(ctx,particles,globalDpr);},[globalDpr]);// Start animation cycle after initial render and when in view\nuseEffect(()=>{if(isOnFramerCanvas&&!props.canvasPreview){// Render first text only without animation\nconst canvas=canvasRef.current;const ctx=canvas?.getContext(\"2d\");if(!canvas||!ctx)return;renderText(ctx,props,canvas,globalDpr);return;}if(isInView){const startAnimationTimeout=setTimeout(()=>{setAnimationState(\"vaporizing\");},0);return()=>clearTimeout(startAnimationTimeout);}else{// When component goes out of view, reset to static state\nsetAnimationState(\"static\");if(animationFrameRef.current){cancelAnimationFrame(animationFrameRef.current);animationFrameRef.current=null;}}},[isInView,isOnFramerCanvas,props.canvasPreview]);// Animation loop - only run when in view\nuseEffect(()=>{if(!isInView)return;if(isOnFramerCanvas&&!props.canvasPreview)return;let lastTime=performance.now();let frameId;const animate=currentTime=>{const deltaTime=(currentTime-lastTime)/1e3;lastTime=currentTime;const canvas=canvasRef.current;const ctx=canvas?.getContext(\"2d\");if(!canvas||!ctx||!particlesRef.current.length){frameId=requestAnimationFrame(animate);return;}// Clear canvas only if we're going to draw\nctx.clearRect(0,0,canvas.width,canvas.height);const shouldContinueAnimation=true;// Update based on animation state\nswitch(animationState){case\"static\":{memoizedRenderParticles(ctx,particlesRef.current);break;}case\"vaporizing\":{// Calculate progress based on duration\nvaporizeProgressRef.current+=deltaTime*100/(animationDurations.VAPORIZE_DURATION/1e3);// Get text boundaries\nconst textBoundaries=canvas.textBoundaries;// Calculate vaporize position based on text boundaries and direction\nconst progress=Math.min(100,vaporizeProgressRef.current);const vaporizeX=props.direction===\"left-to-right\"?textBoundaries.left+textBoundaries.width*progress/100:textBoundaries.right-textBoundaries.width*progress/100;const allVaporized=memoizedUpdateParticles(particlesRef.current,vaporizeX,deltaTime);memoizedRenderParticles(ctx,particlesRef.current);// Check if vaporization is complete\nif(vaporizeProgressRef.current>=100&&allVaporized){setCurrentTextIndex(prevIndex=>(prevIndex+1)%props.texts.length);setAnimationState(\"fadingIn\");fadeOpacityRef.current=0;}break;}case\"fadingIn\":{fadeOpacityRef.current+=deltaTime*1e3/animationDurations.FADE_IN_DURATION;// Use particles for fade-in\nctx.save();ctx.scale(globalDpr,globalDpr);particlesRef.current.forEach(particle=>{particle.x=particle.originalX;particle.y=particle.originalY;const opacity=Math.min(fadeOpacityRef.current,1)*particle.originalAlpha;const color=particle.color.replace(/[\\d.]+\\)$/,`${opacity})`);ctx.fillStyle=color;ctx.fillRect(particle.x/globalDpr,particle.y/globalDpr,1,1);});ctx.restore();if(fadeOpacityRef.current>=1){setAnimationState(\"waiting\");setTimeout(()=>{setAnimationState(\"vaporizing\");vaporizeProgressRef.current=0;resetParticles(particlesRef.current);},animationDurations.WAIT_DURATION);}break;}case\"waiting\":{memoizedRenderParticles(ctx,particlesRef.current);break;}}if(shouldContinueAnimation){frameId=requestAnimationFrame(animate);}};frameId=requestAnimationFrame(animate);return()=>{if(frameId){cancelAnimationFrame(frameId);}};},[animationState,isInView,isOnFramerCanvas,props.canvasPreview,props.texts.length,props.direction,globalDpr,memoizedUpdateParticles,memoizedRenderParticles,animationDurations.FADE_IN_DURATION,animationDurations.WAIT_DURATION,animationDurations.VAPORIZE_DURATION]);useEffect(()=>{renderCanvas({framerProps:props,canvasRef,wrapperSize,isOnFramerCanvas,particlesRef,globalDpr,currentTextIndex,transformedDensity:transformedDensity});const currentFont=props.font.fontFamily||\"sans-serif\";return handleFontChange({currentFont,lastFontRef,isOnFramerCanvas,props,canvasRef,wrapperSize,particlesRef,globalDpr,currentTextIndex,transformedDensity:transformedDensity});},[props,canvasRef,wrapperSize,isOnFramerCanvas,currentTextIndex]);useResizeObserver({wrapperRef,wrapperSize,setWrapperSize,props,canvasRef,isOnFramerCanvas,particlesRef,globalDpr,currentTextIndex,transformedDensity:transformedDensity});return /*#__PURE__*/_jsxs(\"div\",{ref:wrapperRef,style:wrapperStyle,children:[/*#__PURE__*/_jsx(\"canvas\",{ref:canvasRef,style:canvasStyle}),/*#__PURE__*/_jsx(SeoElement,{tag:props.tag,texts:props.texts})]});}// ------------------------------------------------------------ //\n// SEO ELEMENT\n// ------------------------------------------------------------ //\nconst SeoElement=/*#__PURE__*/memo(({tag=\"p\",texts})=>{const style=useMemo(()=>({position:\"absolute\",width:\"0\",height:\"0\",overflow:\"hidden\",userSelect:\"none\",pointerEvents:\"none\"}),[]);// Ensure tag is a valid HTML element string\nconst safeTag=Object.values(Tag).includes(tag)?tag:\"p\";return /*#__PURE__*/createElement(safeTag,{style},texts?.join(\" \")??\"\");});// ------------------------------------------------------------ //\n// FONT HANDLING\n// ------------------------------------------------------------ //\nconst handleFontChange=({currentFont,lastFontRef,isOnFramerCanvas,props,canvasRef,wrapperSize,particlesRef,globalDpr,currentTextIndex,transformedDensity})=>{if(currentFont!==lastFontRef.current&&isOnFramerCanvas){lastFontRef.current=currentFont;// Re-render after 1 second to catch the loaded font\nconst timeoutId=setTimeout(()=>{cleanup({canvasRef,particlesRef})// Clean up before re-rendering\n;renderCanvas({framerProps:props,canvasRef,wrapperSize,isOnFramerCanvas,particlesRef,globalDpr,currentTextIndex,transformedDensity:transformedDensity});},1e3);return()=>{clearTimeout(timeoutId);cleanup({canvasRef,particlesRef});};}return undefined;};// ------------------------------------------------------------ //\n// CLEANUP\n// ------------------------------------------------------------ //\nconst cleanup=({canvasRef,particlesRef})=>{// Clear canvas\nconst canvas=canvasRef.current;const ctx=canvas?.getContext(\"2d\");if(canvas&&ctx){ctx.clearRect(0,0,canvas.width,canvas.height);}// Clear particles\nif(particlesRef.current){particlesRef.current=[];}};// ------------------------------------------------------------ //\n// RESIZE OBSERVER\n// ------------------------------------------------------------ //\nconst useResizeObserver=({wrapperRef,wrapperSize,setWrapperSize,props,canvasRef,isOnFramerCanvas,particlesRef,globalDpr,currentTextIndex,transformedDensity})=>{useEffect(()=>{const container=wrapperRef.current;if(!container)return;const resizeObserver=new ResizeObserver(entries=>{for(const entry of entries){const{width,height}=entry.contentRect;setWrapperSize({width,height});}renderCanvas({framerProps:props,canvasRef,wrapperSize,isOnFramerCanvas,particlesRef,globalDpr,currentTextIndex,transformedDensity:transformedDensity});});resizeObserver.observe(container);return()=>{resizeObserver.disconnect();};},[wrapperRef]);};// ------------------------------------------------------------ //\n// WRAPPER SIZE\n// ------------------------------------------------------------ //\nconst useWrapperSize=()=>{const wrapperRef=useRef(null);const[wrapperSize,setWrapperSize]=useState({width:null,height:null});useEffect(()=>{if(wrapperRef.current){const rect=wrapperRef.current.getBoundingClientRect();setWrapperSize({width:rect.width,height:rect.height});}},[wrapperRef]);return{wrapperSize,setWrapperSize,wrapperRef};};// ------------------------------------------------------------ //\n// RENDER CANVAS\n// ------------------------------------------------------------ //\nconst renderCanvas=({framerProps,canvasRef,wrapperSize,isOnFramerCanvas,particlesRef,globalDpr,currentTextIndex,transformedDensity})=>{const canvas=canvasRef.current;if(!canvas||!wrapperSize.width||!wrapperSize.height)return;const ctx=canvas.getContext(\"2d\");if(!ctx)return;const{width,height}=wrapperSize;// Scale for retina/high DPI displays\ncanvas.style.width=`${width}px`;canvas.style.height=`${height}px`;canvas.width=Math.floor(width*globalDpr);canvas.height=Math.floor(height*globalDpr);// If on Framer canvas and preview is disabled, render static text\nif(isOnFramerCanvas&&!framerProps.canvasPreview){renderText(ctx,framerProps,canvas,globalDpr);return;}// Parse font size\nconst fontSize=parseInt(framerProps.font.fontSize?.replace(\"px\",\"\")||\"50\");const font=`${framerProps.font.fontWeight??400} ${fontSize*globalDpr}px ${framerProps.font.fontFamily}`;const color=parseFramerColor(framerProps.color);// Calculate text position\nlet textX;const textY=canvas.height/2;const currentText=framerProps.texts[currentTextIndex]||\"Framer\";if(framerProps.alignment===\"center\"){textX=canvas.width/2;}else if(framerProps.alignment===\"left\"){textX=0;}else{textX=canvas.width;}// Create particles from the rendered text and get text boundaries\nconst{particles,textBoundaries}=createParticles(ctx,canvas,currentText,textX,textY,font,color,framerProps.alignment);// Store particles and text boundaries for animation\nparticlesRef.current=particles;canvas.textBoundaries=textBoundaries;};// ------------------------------------------------------------ //\n// PARTICLE SYSTEM\n// ------------------------------------------------------------ //\nconst createParticles=(ctx,canvas,text,textX,textY,font,color,alignment)=>{const particles=[];// Clear any previous content\nctx.clearRect(0,0,canvas.width,canvas.height);// Set text properties for sampling\nctx.fillStyle=color;ctx.font=font;ctx.textAlign=alignment;ctx.textBaseline=\"middle\";ctx.imageSmoothingQuality=\"high\";ctx.imageSmoothingEnabled=true;if(ctx.fontKerning)ctx.fontKerning=\"normal\";if(ctx.textRendering)ctx.textRendering=\"geometricPrecision\";// Calculate text boundaries\nconst metrics=ctx.measureText(text);let textLeft;const textWidth=metrics.width;if(alignment===\"center\"){textLeft=textX-textWidth/2;}else if(alignment===\"left\"){textLeft=textX;}else{textLeft=textX-textWidth;}const textBoundaries={left:textLeft,right:textLeft+textWidth,width:textWidth};// Render the text for sampling\nctx.fillText(text,textX,textY);// Sample the rendered text\nconst imageData=ctx.getImageData(0,0,canvas.width,canvas.height);const data=imageData.data;// Calculate sampling rate based on DPR and density to maintain consistent particle density\nconst baseDPR=3// Base DPR we're optimizing for\n;const currentDPR=canvas.width/parseInt(canvas.style.width);const baseSampleRate=Math.max(1,Math.round(currentDPR/baseDPR));const sampleRate=Math.max(1,Math.round(baseSampleRate))// Adjust sample rate by density\n;// Sample the text pixels and create particles\nfor(let y=0;y<canvas.height;y+=sampleRate){for(let x=0;x<canvas.width;x+=sampleRate){const index=(y*canvas.width+x)*4;const alpha=data[index+3];if(alpha>0){// Remove density from opacity calculation\nconst originalAlpha=alpha/255*(sampleRate/currentDPR);const particle={x,y,originalX:x,originalY:y,color:`rgba(${data[index]}, ${data[index+1]}, ${data[index+2]}, ${originalAlpha})`,opacity:originalAlpha,originalAlpha,// Animation properties\nvelocityX:0,velocityY:0,angle:0,speed:0};particles.push(particle);}}}// Clear the canvas after sampling\nctx.clearRect(0,0,canvas.width,canvas.height);return{particles,textBoundaries};};// Helper functions for particle animation\nconst updateParticles=(particles,vaporizeX,deltaTime,MULTIPLIED_VAPORIZE_SPREAD,VAPORIZE_DURATION,direction,density)=>{let allParticlesVaporized=true;particles.forEach(particle=>{// Only animate particles that have been \"vaporized\"\nconst shouldVaporize=direction===\"left-to-right\"?particle.originalX<=vaporizeX:particle.originalX>=vaporizeX;if(shouldVaporize){// When a particle is first vaporized, determine if it should fade quickly based on density\nif(particle.speed===0){// Initialize particle motion when first vaporized\nparticle.angle=Math.random()*Math.PI*2;particle.speed=(Math.random()*1+.5)*MULTIPLIED_VAPORIZE_SPREAD;particle.velocityX=Math.cos(particle.angle)*particle.speed;particle.velocityY=Math.sin(particle.angle)*particle.speed;// Determine if particle should fade quickly based on density\n// density of 1 means all particles animate normally\n// density of 0.5 means 50% of particles fade quickly\nparticle.shouldFadeQuickly=Math.random()>density;}if(particle.shouldFadeQuickly){// Quick fade out for particles marked to fade quickly\nparticle.opacity=Math.max(0,particle.opacity-deltaTime);// particle.opacity = 0;\n}else{// Apply normal particle physics and animation\n// Apply damping based on distance from original position\nconst dx=particle.originalX-particle.x;const dy=particle.originalY-particle.y;const distanceFromOrigin=Math.sqrt(dx*dx+dy*dy);// Damping factor increases with distance, creating a more natural motion\nconst dampingFactor=Math.max(.95,1-distanceFromOrigin/(100*MULTIPLIED_VAPORIZE_SPREAD));// Add slight random motion to create a more organic feel\nconst randomSpread=MULTIPLIED_VAPORIZE_SPREAD*3;const spreadX=(Math.random()-.5)*randomSpread;const spreadY=(Math.random()-.5)*randomSpread;// Update velocities with damping and random motion\nparticle.velocityX=(particle.velocityX+spreadX+dx*.002)*dampingFactor;particle.velocityY=(particle.velocityY+spreadY+dy*.002)*dampingFactor;// Limit maximum velocity\nconst maxVelocity=MULTIPLIED_VAPORIZE_SPREAD*2;const currentVelocity=Math.sqrt(particle.velocityX*particle.velocityX+particle.velocityY*particle.velocityY);if(currentVelocity>maxVelocity){const scale=maxVelocity/currentVelocity;particle.velocityX*=scale;particle.velocityY*=scale;}// Update position\nparticle.x+=particle.velocityX*deltaTime*20;particle.y+=particle.velocityY*deltaTime*10;// Calculate fade rate based on vaporize duration\nconst baseFadeRate=.25;const durationBasedFadeRate=baseFadeRate*(2e3/VAPORIZE_DURATION);// Slower fade out for more persistence, scaled by duration\nparticle.opacity=Math.max(0,particle.opacity-deltaTime*durationBasedFadeRate);}// Check if this particle is still visible\nif(particle.opacity>.01){allParticlesVaporized=false;}}else{// If there are any particles not yet reached by the vaporize wave\nallParticlesVaporized=false;}});return allParticlesVaporized;};const renderParticles=(ctx,particles,globalDpr)=>{ctx.save();ctx.scale(globalDpr,globalDpr);particles.forEach(particle=>{if(particle.opacity>0){const color=particle.color.replace(/[\\d.]+\\)$/,`${particle.opacity})`);ctx.fillStyle=color;ctx.fillRect(particle.x/globalDpr,particle.y/globalDpr,1,1);}});ctx.restore();};const resetParticles=particles=>{particles.forEach(particle=>{particle.x=particle.originalX;particle.y=particle.originalY;particle.opacity=particle.originalAlpha;particle.speed=0;particle.velocityX=0;particle.velocityY=0;});};const renderText=(ctx,props,canvas,globalDpr)=>{// Clear canvas\nctx.clearRect(0,0,canvas.width,canvas.height);// Scale for retina/high DPI displays\nctx.save();ctx.scale(globalDpr,globalDpr);// Parse font size and set up text properties\nconst fontSize=parseInt(props.font.fontSize?.replace(\"px\",\"\")||\"50\");const font=`${props.font.fontWeight??400} ${fontSize}px ${props.font.fontFamily}`;ctx.font=font;ctx.fillStyle=props.color;ctx.textAlign=props.alignment;ctx.textBaseline=\"middle\";// Calculate text position\nlet textX;if(props.alignment===\"center\"){textX=canvas.width/(2*globalDpr);}else if(props.alignment===\"left\"){textX=0;}else{textX=canvas.width/globalDpr;}// Draw first text only\nctx.fillText(props.texts[0],textX,canvas.height/(2*globalDpr));ctx.restore();};// ------------------------------------------------------------ //\n// CALCULATE VAPORIZE SPREAD\n// ------------------------------------------------------------ //\nconst calculateVaporizeSpread=fontSize=>{// Convert font size string to number if needed\nconst size=typeof fontSize===\"string\"?parseInt(fontSize):fontSize;// Define our known points for interpolation\nconst points=[{size:20,spread:.2},{size:50,spread:.5},{size:100,spread:1.5}];// Handle edge cases\nif(size<=points[0].size)return points[0].spread;if(size>=points[points.length-1].size)return points[points.length-1].spread;// Find the two points to interpolate between\nlet i=0;while(i<points.length-1&&points[i+1].size<size)i++;// Linear interpolation between the two closest points\nconst p1=points[i];const p2=points[i+1];return p1.spread+(size-p1.size)*(p2.spread-p1.spread)/(p2.size-p1.size);};// ------------------------------------------------------------ //\n// PARSE FRAMER COLOR\n// ------------------------------------------------------------ //\n/**\n * Extracts RGB/RGBA values from a Framer color string format\n * @param color - Framer color string (e.g. \"var(--token-xxx, rgb(12, 250, 163)) /* {\"name\":\"green\"}\n * @returns Valid RGBA color string\n */const parseFramerColor=color=>{// Try to match rgb/rgba pattern inside var() or directly\nconst rgbMatch=color.match(/rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)/);const rgbaMatch=color.match(/rgba\\((\\d+),\\s*(\\d+),\\s*(\\d+),\\s*([\\d.]+)\\)/);if(rgbaMatch){// If RGBA format\nconst[_,r,g,b,a]=rgbaMatch;return`rgba(${r}, ${g}, ${b}, ${a})`;}else if(rgbMatch){// If RGB format\nconst[_,r,g,b]=rgbMatch;return`rgba(${r}, ${g}, ${b}, 1)`;}// Fallback to black if parsing fails\nconsole.warn(\"Could not parse color:\",color);return\"rgba(0, 0, 0, 1)\";};/**\n * Maps a value from one range to another, optionally clamping the result.\n *\n * @param input - The value to transform.\n * @param inputRange - A tuple of two numbers [from, to] defining the input range.\n * @param outputRange - A tuple of two numbers [from, to] defining the output range.\n * @param clamp - Whether to clamp the output value within the output range.\n * @returns The transformed value.\n */function transformValue(input,inputRange,outputRange,clamp=false){const[inputMin,inputMax]=inputRange;const[outputMin,outputMax]=outputRange;const progress=(input-inputMin)/(inputMax-inputMin);let result=outputMin+progress*(outputMax-outputMin);if(clamp){if(outputMax>outputMin){result=Math.min(Math.max(result,outputMin),outputMax);}else{result=Math.min(Math.max(result,outputMax),outputMin);}}return result;}VaporizeTextCycle.displayName=\"Vaporize Text Cycle\";\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"VaporizeTextCycle\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutHeight\":\"any-prefer-fixed\",\"framerSupportedLayoutWidth\":\"any-prefer-fixed\",\"framerIntrinsicWidth\":\"400\",\"framerIntrinsicHeight\":\"200\",\"framerDisableUnlink\":\"\",\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./VaporizeTextCycle_Prod.map"],"mappings":"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"}