{"version":3,"file":"VaporizeTextCycle_Prod.faFev-0s.mjs","names":["useRef","useState","useMemo","useCallback"],"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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"}