{"version":3,"file":"MagicTextReveal_Prod.H9w2GVxa.mjs","names":["useRef","useState","useMemo","useCallback","FontFaceObserver"],"sources":["https:/cdn.jsdelivr.net/gh/framer-university/components/npm-bundles/font-face-observer.js","https:/framerusercontent.com/modules/5ZuH7xaTyFIptP1xd86A/wIMKYHCyMURENymRUzoa/MagicTextReveal_Prod.js"],"sourcesContent":["function e(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,\"default\")?e.default:e}var t,n={exports:{}};var i,o=e((t||(t=1,i=n,function(){function e(e,t){document.addEventListener?e.addEventListener(\"scroll\",t,!1):e.attachEvent(\"scroll\",t)}function t(e){this.g=document.createElement(\"div\"),this.g.setAttribute(\"aria-hidden\",\"true\"),this.g.appendChild(document.createTextNode(e)),this.h=document.createElement(\"span\"),this.i=document.createElement(\"span\"),this.m=document.createElement(\"span\"),this.j=document.createElement(\"span\"),this.l=-1,this.h.style.cssText=\"max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;\",this.i.style.cssText=\"max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;\",this.j.style.cssText=\"max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;\",this.m.style.cssText=\"display:inline-block;width:200%;height:200%;font-size:16px;max-width:none;\",this.h.appendChild(this.m),this.i.appendChild(this.j),this.g.appendChild(this.h),this.g.appendChild(this.i)}function n(e,t){e.g.style.cssText=\"max-width:none;min-width:20px;min-height:20px;display:inline-block;overflow:hidden;position:absolute;width:auto;margin:0;padding:0;top:-999px;white-space:nowrap;font-synthesis:none;font:\"+t+\";\"}function o(e){var t=e.g.offsetWidth,n=t+100;return e.j.style.width=n+\"px\",e.i.scrollLeft=n,e.h.scrollLeft=e.h.scrollWidth+100,e.l!==t&&(e.l=t,!0)}function s(t,n){function i(){var e=s;o(e)&&null!==e.g.parentNode&&n(e.l)}var s=t;e(t.h,i),e(t.i,i),o(t)}function d(e,t,n){t=t||{},n=n||window,this.family=e,this.style=t.style||\"normal\",this.weight=t.weight||\"normal\",this.stretch=t.stretch||\"normal\",this.context=n}var a=null,l=null,r=null,c=null;function h(e){return null===c&&(c=!!e.document.fonts),c}function u(e,t){var n=e.style,i=e.weight;if(null===r){var o=document.createElement(\"div\");try{o.style.font=\"condensed 100px sans-serif\"}catch(e){}r=\"\"!==o.style.font}return[n,i,r?e.stretch:\"\",\"100px\",t].join(\" \")}d.prototype.load=function(e,i){var o=this,d=e||\"BESbswy\",r=0,c=i||3e3,f=(new Date).getTime();return new Promise((function(e,i){if(h(o.context)&&!function(e){return null===l&&(h(e)&&/Apple/.test(window.navigator.vendor)?(e=/AppleWebKit\\/([0-9]+)(?:\\.([0-9]+))(?:\\.([0-9]+))/.exec(window.navigator.userAgent),l=!!e&&603>parseInt(e[1],10)):l=!1),l}(o.context)){var p=new Promise((function(e,t){!function n(){(new Date).getTime()-f>=c?t(Error(c+\"ms timeout exceeded\")):o.context.document.fonts.load(u(o,'\"'+o.family+'\"'),d).then((function(t){1<=t.length?e():setTimeout(n,25)}),t)}()})),m=new Promise((function(e,t){r=setTimeout((function(){t(Error(c+\"ms timeout exceeded\"))}),c)}));Promise.race([m,p]).then((function(){clearTimeout(r),e(o)}),i)}else!function(e){document.body?e():document.addEventListener?document.addEventListener(\"DOMContentLoaded\",(function t(){document.removeEventListener(\"DOMContentLoaded\",t),e()})):document.attachEvent(\"onreadystatechange\",(function t(){\"interactive\"!=document.readyState&&\"complete\"!=document.readyState||(document.detachEvent(\"onreadystatechange\",t),e())}))}((function(){function l(){var t;(t=-1!=w&&-1!=g||-1!=w&&-1!=v||-1!=g&&-1!=v)&&((t=w!=g&&w!=v&&g!=v)||(null===a&&(t=/AppleWebKit\\/([0-9]+)(?:\\.([0-9]+))/.exec(window.navigator.userAgent),a=!!t&&(536>parseInt(t[1],10)||536===parseInt(t[1],10)&&11>=parseInt(t[2],10))),t=a&&(w==x&&g==x&&v==x||w==y&&g==y&&v==y||w==E&&g==E&&v==E)),t=!t),t&&(null!==b.parentNode&&b.parentNode.removeChild(b),clearTimeout(r),e(o))}var h=new t(d),p=new t(d),m=new t(d),w=-1,g=-1,v=-1,x=-1,y=-1,E=-1,b=document.createElement(\"div\");b.dir=\"ltr\",n(h,u(o,\"sans-serif\")),n(p,u(o,\"serif\")),n(m,u(o,\"monospace\")),b.appendChild(h.g),b.appendChild(p.g),b.appendChild(m.g),o.context.document.body.appendChild(b),x=h.g.offsetWidth,y=p.g.offsetWidth,E=m.g.offsetWidth,function e(){if((new Date).getTime()-f>=c)null!==b.parentNode&&b.parentNode.removeChild(b),i(Error(c+\"ms timeout exceeded\"));else{var t=o.context.document.hidden;!0!==t&&void 0!==t||(w=h.g.offsetWidth,g=p.g.offsetWidth,v=m.g.offsetWidth,l()),r=setTimeout(e,50)}}(),s(h,(function(e){w=e,l()})),n(h,u(o,'\"'+o.family+'\",sans-serif')),s(p,(function(e){g=e,l()})),n(p,u(o,'\"'+o.family+'\",serif')),s(m,(function(e){v=e,l()})),n(m,u(o,'\"'+o.family+'\",monospace'))}))}))},i.exports=d}()),n.exports));export{o as FontFaceObserver};\n","import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{ControlType,addPropertyControls,RenderTarget}from\"framer\";import{useEffect,useMemo,useRef,useState,useCallback}from\"react\";import{motion}from\"framer-motion\";import{useInView}from\"framer-motion\";// import FontFaceObserver from \"fontfaceobserver\";\nimport{FontFaceObserver}from\"https://cdn.jsdelivr.net/gh/framer-university/components/npm-bundles/font-face-observer.js\";var Tag;(function(Tag){Tag[\"H1\"]=\"h1\";Tag[\"H2\"]=\"h2\";Tag[\"H3\"]=\"h3\";Tag[\"P\"]=\"p\";})(Tag||(Tag={}));// ------------------------------------------------------------ //\n// PROPERTY CONTROLS\n// ------------------------------------------------------------ //\naddPropertyControls(MagicTextReveal,{text:{type:ControlType.String},color:{type:ControlType.Color,defaultValue:\"rgba(153, 153, 153, 1)\"},font:{type:ControlType.Font,defaultFontType:\"sans-serif\",controls:\"extended\"},spread:{type:ControlType.Number,defaultValue:50,min:1,max:100,step:1,unit:\"x\"},speed:{type:ControlType.Number,defaultValue:.5,min:.1,max:3,step:.1,unit:\"x\"},density:{type:ControlType.Number,defaultValue:4,min:1,max:4,step:1,unit:\"x\",displayStepper:true},resetOnMouseLeave:{type:ControlType.Boolean,defaultValue:true,title:\"Repeat\"},tag:{type:ControlType.Enum,title:\"Tag\",defaultValue:\"p\",displaySegmentedControl:true,segmentedControlDirection:\"horizontal\",options:[\"h1\",\"h2\",\"h3\",\"p\"],optionTitles:[\"H1\",\"H2\",\"H3\",\"P\"]},selectable:{type:ControlType.Boolean,defaultValue:true,title:\"Selectable\"},yPosition:{type:ControlType.Enum,title:\"Y Position\",defaultValue:\"auto\",options:[\"auto\",\"manual\"],optionTitles:[\"Auto\",\"Manual\"],displaySegmentedControl:true,description:\"Use manual if hovered text doesn't line up.\"},yPositionValue:{type:ControlType.Number,title:\" \",defaultValue:0,min:-50,max:50,step:.5,unit:\"px\",hidden:props=>props.yPosition===\"auto\"},canvasPreview:{type:ControlType.Boolean,defaultValue:true,title:\"Preview\",description:\"More components at [Framer University](https://frameruni.link/cc).\"}});// ------------------------------------------------------------ //\n// DEFAULT PROPS\n// ------------------------------------------------------------ //\nMagicTextReveal.defaultProps={text:\"Framer University\",color:\"rgba(153, 153, 153, 1)\",font:{fontFamily:\"sans-serif\",fontSize:\"50px\",textAlign:\"center\",fontWeight:400},spread:50,speed:.5,density:4,resetOnMouseLeave:true,tag:\"p\",selectable:true,yPosition:\"auto\",yPositionValue:0,canvasPreview:true};// ------------------------------------------------------------ //\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 MagicTextReveal(props){const isOnFramerCanvas=RenderTarget.hasRestrictions();const canvasRef=useRef(null);const wrapperRef=useRef(null);const lastFontRef=useRef(null);const particlesRef=useRef([]);const animationFrameRef=useRef(null);const lastTimeRef=useRef(performance.now());const[fontLoaded,setFontLoaded]=useState(false);const[isHovered,setIsHovered]=useState(false);const[showText,setShowText]=useState(false);const[hasBeenShown,setHasBeenShown]=useState(false);const transformedDensity=6-props.density;const color=useMemo(()=>parseFramerColor(props.color),[props.color]);const isInView=useInView(wrapperRef);const{wrapperSize,setWrapperSize}=useWrapperSize();// Memoize global DPR calculation\nconst globalDpr=useMemo(()=>{if(isOnFramerCanvas)return 2;if(typeof window!==\"undefined\")return window.devicePixelRatio*1.5||1;return 1;},[isOnFramerCanvas]);const tranformedCanvasY=useMemo(()=>{return transformValue(parseInt(props.font.fontSize?.replace(\"px\",\"\")||\"50\"),[0,100],[0,5],true);},[props.font.fontSize]);const transformedY=props.yPosition===\"auto\"?tranformedCanvasY:props.yPositionValue;// Add font loading effect\nuseEffect(()=>{if(!props.font.fontFamily||isOnFramerCanvas)return;const loadFont=async()=>{await waitForFont(props.font.fontFamily);setFontLoaded(true);};loadFont();},[props.font.fontFamily,isOnFramerCanvas]);// Modify canvas rendering effect to depend on fontLoaded\nuseEffect(()=>{if(isOnFramerCanvas&&!props.canvasPreview)return;if(!isInView)return;if(!fontLoaded&&!isOnFramerCanvas)return;// Don't render until font is loaded on live sites\nrenderCanvas({canvasRef,wrapperRef,globalDpr,props,wrapperSize,particlesRef,transformedDensity,color});},[fontLoaded,isInView,isOnFramerCanvas,props.canvasPreview,props,wrapperSize,color]);// Animation loop with optimized dependencies\nuseEffect(()=>{if(isOnFramerCanvas&&!props.canvasPreview)return;if(!isInView)return;const animate=currentTime=>{const deltaTime=(currentTime-lastTimeRef.current)/1e3;lastTimeRef.current=currentTime;const canvas=canvasRef.current;const ctx=canvas?.getContext(\"2d\");if(!canvas||!ctx||!particlesRef.current.length){animationFrameRef.current=requestAnimationFrame(animate);return;}ctx.clearRect(0,0,canvas.width,canvas.height);updateParticles(particlesRef.current,deltaTime,isHovered,showText,setShowText,props.spread,props.speed);renderParticles(ctx,particlesRef.current,globalDpr);animationFrameRef.current=requestAnimationFrame(animate);};animationFrameRef.current=requestAnimationFrame(animate);return()=>{if(animationFrameRef.current){cancelAnimationFrame(animationFrameRef.current);}};},[isInView,isOnFramerCanvas,props.canvasPreview,props.spread,props.speed,globalDpr,isHovered]);// Memoize event handlers\nconst handleMouseEnter=useCallback(()=>{setIsHovered(true);setHasBeenShown(true);},[]);const handleMouseLeave=useCallback(()=>{if(props.resetOnMouseLeave||!hasBeenShown){setIsHovered(false);}},[props.resetOnMouseLeave,hasBeenShown]);useEffect(()=>{renderCanvas({canvasRef,wrapperRef,globalDpr,props,wrapperSize,particlesRef,transformedDensity,color});const currentFont=props.font.fontFamily||\"sans-serif\";return handleFontChange({currentFont,lastFontRef,isOnFramerCanvas,props,canvasRef,wrapperRef,globalDpr,wrapperSize,particlesRef,transformedDensity,color});},[props,canvasRef,wrapperRef,globalDpr,wrapperSize]);useResizeObserver({wrapperRef,wrapperSize,setWrapperSize,props,canvasRef,isOnFramerCanvas,globalDpr,particlesRef,transformedDensity,color});return /*#__PURE__*/_jsxs(\"div\",{ref:wrapperRef,style:{width:\"100%\",height:\"100%\",display:\"flex\",flexDirection:\"column\",justifyContent:\"center\",alignItems:\"center\",position:\"relative\"},onMouseEnter:handleMouseEnter,onMouseLeave:handleMouseLeave,children:[renderAnimatedTag(props,color,showText),/*#__PURE__*/_jsx(\"canvas\",{ref:canvasRef,style:{position:\"absolute\",top:0,left:0,width:\"100%\",height:\"100%\",transform:`translateY(${transformedY}px)`}})]});}// ------------------------------------------------------------ //\n// RENDER CANVAS\n// ------------------------------------------------------------ //\nconst renderCanvas=({canvasRef,wrapperRef,globalDpr,props,wrapperSize,particlesRef,transformedDensity,color})=>{if(!wrapperRef.current||!canvasRef.current||!wrapperSize.width||!wrapperSize.height)return;const canvas=canvasRef.current;const{width,height}=wrapperSize;canvas.width=width*globalDpr;canvas.height=height*globalDpr;canvas.style.width=`${width}px`;canvas.style.height=`${height}px`;const ctx=canvas.getContext(\"2d\");if(!ctx)return;// Calculate text position\nconst textX=canvas.width/2;const textY=canvas.height/2;// Parse font size and create font string\nconst formattedFontFamily=formatFontFamilies(props.font.fontFamily);const fontSize=parseInt(props.font.fontSize?.replace(\"px\",\"\")||\"50\");const font=`${props.font.fontWeight??400} ${fontSize*globalDpr}px ${formattedFontFamily}`;// Create particles from text\nconst particles=createParticles(ctx,canvas,props.text,textX,textY,font,color,\"center\",transformedDensity,props.font.letterSpacing||\"0px\");// Store particles for later use\nparticlesRef.current=particles;// Render particles\nrenderParticles(ctx,particles,globalDpr);};// ------------------------------------------------------------ //\n// PARTICLE SYSTEM\n// ------------------------------------------------------------ //\nconst createParticles=(ctx,canvas,text,textX,textY,font,color,alignment,transformedDensity,letterSpacing)=>{const particles=[];// Clear canvas\nctx.clearRect(0,0,canvas.width,canvas.height);// Set text properties\nctx.fillStyle=color;ctx.font=font;ctx.textAlign=alignment;ctx.letterSpacing=letterSpacing;ctx.textBaseline=\"middle\";// Remove unnecessary ctx settings that don't significantly impact quality\nctx.imageSmoothingEnabled=true;// Render 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\nconst currentDPR=canvas.width/parseInt(canvas.style.width);// Increase base sampling rate to reduce particles\nconst baseSampleRate=Math.max(2,Math.round(currentDPR));const sampleRate=baseSampleRate*transformedDensity;// Calculate text bounds to determine spread area\nlet minX=canvas.width;let maxX=0;let minY=canvas.height;let maxY=0;// First pass: find text bounds\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){minX=Math.min(minX,x);maxX=Math.max(maxX,x);minY=Math.min(minY,y);maxY=Math.max(maxY,y);}}}// Calculate spread area\nconst textWidth=maxX-minX;const textHeight=maxY-minY;const spreadRadius=Math.max(textWidth,textHeight)*.1;// Second pass: create particles with random initial positions\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){const originalAlpha=alpha/255;// Calculate random initial position within spread radius\nconst angle=Math.random()*Math.PI*2;const distance=Math.random()*spreadRadius;const initialX=x+Math.cos(angle)*distance;const initialY=y+Math.sin(angle)*distance;const particle={x:initialX,y:initialY,originalX:x,originalY:y,color:`rgba(${data[index]}, ${data[index+1]}, ${data[index+2]}, ${originalAlpha})`,opacity:originalAlpha*.3,originalAlpha,velocityX:0,velocityY:0,angle:Math.random()*Math.PI*2,speed:0,floatingOffsetX:0,floatingOffsetY:0,floatingSpeed:Math.random()*2+1,floatingAngle:Math.random()*Math.PI*2,targetOpacity:Math.random()*originalAlpha*.5,sparkleSpeed:Math.random()*2+1};particles.push(particle);}}}// Clear canvas after sampling\nctx.clearRect(0,0,canvas.width,canvas.height);return particles;};const updateParticles=(particles,deltaTime,isHovered,showText,setShowText,spread,speed)=>{const FLOAT_RADIUS=spread;const RETURN_SPEED=3// Speed at which particles return to their original position\n;const FLOAT_SPEED=speed;const TRANSITION_SPEED=5*FLOAT_SPEED// Scale transition speed by FLOAT_SPEED\n;const NOISE_SCALE=.6// Scale of the random movement\n;const CHAOS_FACTOR=1.3// Additional randomness factor\n;const FADE_SPEED=5// Speed at which particles fade out when hovered\n;particles.forEach(particle=>{if(isHovered){// When hovered, gradually return to original position\nconst dx=particle.originalX-particle.x;const dy=particle.originalY-particle.y;const distance=Math.sqrt(dx*dx+dy*dy);if(distance>.1){particle.x+=dx/distance*RETURN_SPEED*deltaTime*60;particle.y+=dy/distance*RETURN_SPEED*deltaTime*60;}else{particle.x=particle.originalX;particle.y=particle.originalY;}// Fade out particles when hovered\nparticle.opacity=Math.max(0,particle.opacity-FADE_SPEED*deltaTime);}else{// Update particle's unique movement pattern\nparticle.floatingAngle+=deltaTime*particle.floatingSpeed*(1+Math.random()*CHAOS_FACTOR);// Generate base movement using improved noise\nconst time=Date.now()*.001;const uniqueOffset=particle.floatingSpeed*2e3// Make each particle's pattern unique\n;const noiseX=(Math.sin(time*particle.floatingSpeed+particle.floatingAngle)*1.2+Math.sin((time+uniqueOffset)*.5)*.8+(Math.random()-.5)*CHAOS_FACTOR)*NOISE_SCALE;const noiseY=(Math.cos(time*particle.floatingSpeed+particle.floatingAngle*1.5)*.6+Math.cos((time+uniqueOffset)*.5)*.4+(Math.random()-.5)*CHAOS_FACTOR)*NOISE_SCALE;// Calculate target position with random offset\nconst randomOffsetX=FLOAT_RADIUS*noiseX;const randomOffsetY=FLOAT_RADIUS*noiseY;const targetX=particle.originalX+randomOffsetX;const targetY=particle.originalY+randomOffsetY;// Smooth movement towards target with variable speed\nconst dx=targetX-particle.x;const dy=targetY-particle.y;// Add dynamic jitter based on distance\nconst distanceFromTarget=Math.sqrt(dx*dx+dy*dy);const jitterScale=Math.min(1,distanceFromTarget/(FLOAT_RADIUS*1.5));const jitterX=(Math.random()-.5)*FLOAT_SPEED*jitterScale;const jitterY=(Math.random()-.5)*FLOAT_SPEED*jitterScale;particle.x+=dx*TRANSITION_SPEED*deltaTime+jitterX;particle.y+=dy*TRANSITION_SPEED*deltaTime+jitterY;// Contain particles within bounds with soft boundary\nconst distanceFromOrigin=Math.sqrt(Math.pow(particle.x-particle.originalX,2)+Math.pow(particle.y-particle.originalY,2));if(distanceFromOrigin>FLOAT_RADIUS){const angle=Math.atan2(particle.y-particle.originalY,particle.x-particle.originalX);const pullBack=(distanceFromOrigin-FLOAT_RADIUS)*.1// Soft boundary\n;particle.x-=Math.cos(angle)*pullBack;particle.y-=Math.sin(angle)*pullBack;}// Enhanced continuous sparkling effect\nconst opacityDiff=particle.targetOpacity-particle.opacity;particle.opacity+=opacityDiff*particle.sparkleSpeed*deltaTime*3;// When particle reaches its target opacity, set a new random target\nif(Math.abs(opacityDiff)<.01){// Randomly choose between very low opacity and full opacity\nparticle.targetOpacity=Math.random()<.5?Math.random()*.1*particle.originalAlpha// Very faint\n:particle.originalAlpha*3// Full brightness\n;// Randomize the sparkle speed each time\nparticle.sparkleSpeed=Math.random()*3+1;}}});if(isHovered&&!showText){setShowText(true);}if(!isHovered&&showText){setShowText(false);}};const renderParticles=(ctx,particles,globalDpr)=>{ctx.save();ctx.scale(globalDpr,globalDpr);// Batch similar colored particles together\nconst particlesByColor=new Map;particles.forEach(particle=>{if(particle.opacity<=0)return;const color=particle.color.replace(/[\\d.]+\\)$/,`${particle.opacity})`);if(!particlesByColor.has(color)){particlesByColor.set(color,[]);}particlesByColor.get(color).push({x:particle.x/globalDpr,y:particle.y/globalDpr});});// Render particles in batches by color\nparticlesByColor.forEach((positions,color)=>{ctx.fillStyle=color;positions.forEach(({x,y})=>{ctx.fillRect(x,y,1,1);});});ctx.restore();};// ------------------------------------------------------------ //\n// FONT HANDLING\n// ------------------------------------------------------------ //\nconst handleFontChange=({currentFont,lastFontRef,isOnFramerCanvas,props,canvasRef,wrapperRef,globalDpr,wrapperSize,particlesRef,transformedDensity,color})=>{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({canvasRef,wrapperRef,globalDpr,props,wrapperSize,particlesRef,transformedDensity,color});},1e3);return()=>{clearTimeout(timeoutId);cleanup({canvasRef,particlesRef});};}};// ------------------------------------------------------------ //\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// 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// USE RESIZE OBSERVER\n// ------------------------------------------------------------ //\nconst useResizeObserver=({wrapperRef,wrapperSize,setWrapperSize,props,canvasRef,isOnFramerCanvas,globalDpr,particlesRef,transformedDensity,color})=>{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({canvasRef,wrapperRef,globalDpr,props,wrapperSize,particlesRef,transformedDensity,color});});resizeObserver.observe(container);return()=>{resizeObserver.disconnect();};},[wrapperRef]);};// ------------------------------------------------------------ //\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 * Formats font families for canvas context font property\n * Removes any existing quotes and ensures proper comma separation\n */const formatFontFamilies=(fontFamilyString=\"sans-serif\")=>{// Split the font families by comma and trim whitespace\n// + append sans-serif\nreturn fontFamilyString+\", sans-serif\".split(\",\").map(font=>{// Remove any existing quotes and trim whitespace\nreturn font.trim().replace(/['\"]/g,\"\");}).join(\", \");};/**\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;}// ------------------------------------------------------------ //\n// RENDER ANIMATED TAG\n// ------------------------------------------------------------ //\nconst renderAnimatedTag=(props,color,showText)=>{const Component=motion[props.tag];return /*#__PURE__*/_jsx(Component,{initial:\"hidden\",animate:showText?\"visible\":\"hidden\",variants:{hidden:{opacity:0},visible:{opacity:1}},transition:{duration:showText?.5:.3,type:\"tween\",ease:showText?\"easeIn\":\"easeOut\"},style:{color:color,margin:0,zIndex:1,fontFamily:props.font.fontFamily,fontWeight:props.font.fontWeight,fontSize:props.font.fontSize,// textAlign: props.font.textAlign,\n// lineHeight: props.font.lineHeight,\nletterSpacing:props.font.letterSpacing,userSelect:props.selectable?\"text\":\"none\",whiteSpace:\"nowrap\"},children:props.text});};// Add FontFaceObserver utility\nconst waitForFont=async fontFamily=>{// Skip if FontFaceObserver is not available (e.g. in Framer preview)\nif(typeof window===\"undefined\"||!(\"FontFace\"in window))return;try{const font=new FontFaceObserver(fontFamily.split(\",\")[0].trim().replace(/['\"]/g,\"\"));await font.load(null,5e3)// 5 second timeout\n;}catch(e){console.warn(\"Font loading failed:\",e);}};MagicTextReveal.displayName=\"Magic Text Reveal\";\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"MagicTextReveal\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutHeight\":\"any-prefer-fixed\",\"framerContractVersion\":\"1\",\"framerIntrinsicHeight\":\"200\",\"framerDisableUnlink\":\"\",\"framerSupportedLayoutWidth\":\"any-prefer-fixed\",\"framerIntrinsicWidth\":\"400\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./MagicTextReveal_Prod.map"],"mappings":"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"}