{"version":3,"file":"TextEffects.C2wonk5e.mjs","names":["useState","useRef","useMemo","p"],"sources":["https:/framerusercontent.com/modules/LWgPlyyqlyiAJiRiOy9U/l0CmEY47QDJqXNlYeweC/TextEffects.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{useRef,useEffect,useState,useMemo}from\"react\";import{motion,useScroll,useTransform}from\"framer-motion\";import{addPropertyControls,ControlType}from\"framer\";// Default props per effect\nconst effectDefaults={blurReveal:{opacity:0,blur:10,scale:1.2,offsetX:0,offsetY:0},fadeIn:{opacity:0,blur:0,scale:1,offsetX:0,offsetY:0},changeColor:{opacity:1,blur:0,scale:1,offsetX:0,offsetY:0},scaleReveal:{opacity:0,blur:0,scale:1.8,offsetX:0,offsetY:0},randomStagger:{opacity:0,blur:0,scale:1,offsetX:0,offsetY:0,randomOrder:true,randomAmount:1},randomScale:{opacity:0,blur:0,scale:1.5,offsetX:0,offsetY:0,randomOrder:true,randomAmount:1.5},overscale:{opacity:0,blur:0,scale:2.5,offsetX:0,offsetY:0},slide:{opacity:1,blur:0,scale:1,offsetX:-100,offsetY:0},typewriter:{opacity:0,blur:0,scale:1,offsetX:0,offsetY:0}};// Easing functions for scroll-linked transforms\nconst easingFunctions={smooth:t=>t<.5?2*t*t:1-Math.pow(-2*t+2,2)/2,back:t=>{const c1=1.70158;const c3=c1+1;return 1+c3*Math.pow(t-1,3)+c1*Math.pow(t-1,2);},elastic:t=>{if(t===0||t===1)return t;return Math.pow(2,-10*t)*Math.sin((t*10-.75)*(2*Math.PI)/3)+1;},linear:t=>t};// Split text into fragments\nfunction splitIntoLines(text,containerWidth,font){if(typeof document===\"undefined\")return text.split(RegExp(\"(?<=\\\\.)\\\\s+\"));const canvas=document.createElement(\"canvas\");const ctx=canvas.getContext(\"2d\");if(!ctx)return text.split(RegExp(\"(?<=\\\\.)\\\\s+\"));ctx.font=font;const words=text.split(\" \");const lines=[];let currentLine=\"\";for(const word of words){const testLine=currentLine?`${currentLine} ${word}`:word;const metrics=ctx.measureText(testLine);if(metrics.width>containerWidth&&currentLine){lines.push(currentLine);currentLine=word;}else{currentLine=testLine;}}if(currentLine)lines.push(currentLine);return lines;}function splitText(text,mode,containerWidth,font){if(mode===\"chars\")return text.split(\"\");if(mode===\"words\")return text.split(/(\\s+)/).filter(s=>s.length>0);return splitIntoLines(text,containerWidth,font);}// Blinking cursor component for typewriter effect\nfunction BlinkingCursor({color,fontWeight}){return /*#__PURE__*/_jsx(motion.span,{animate:{opacity:[1,1,0,0]},transition:{duration:1,repeat:Infinity,ease:\"steps(1)\"},style:{display:\"inline\",color,fontWeight},children:\"_\"});}function TypewriterRenderer({containerRef,containerStyle,fragments,revealColor,typingSpeed,typingDelay,viewportPosition,replay,fontWeight,textAlign}){const[cursorPos,setCursorPos]=useState(0);const[hasTriggered,setHasTriggered]=useState(false);const[isTyping,setIsTyping]=useState(false);const elementRef=useRef(null);// Calculate delay per character: either use typingDelay directly or derive from typingSpeed\nconst delayPerChar=typingDelay>0?typingDelay:1/typingSpeed;// Intersection observer to detect when element enters viewport\nuseEffect(()=>{if(!elementRef.current)return;const threshold=1-viewportPosition/100;const observer=new IntersectionObserver(entries=>{entries.forEach(entry=>{if(entry.isIntersecting){if(!hasTriggered||replay){setHasTriggered(true);setIsTyping(true);setCursorPos(0);}}else if(replay){setIsTyping(false);setCursorPos(0);setHasTriggered(false);}});},{threshold:Math.max(0,Math.min(1,threshold))});observer.observe(elementRef.current);return()=>observer.disconnect();},[viewportPosition,replay,hasTriggered]);// Typing animation\nuseEffect(()=>{if(!isTyping)return;if(cursorPos>=fragments.length){setIsTyping(false);return;}const timeout=setTimeout(()=>{setCursorPos(prev=>prev+1);},delayPerChar*1e3);return()=>clearTimeout(timeout);},[isTyping,cursorPos,fragments.length,delayPerChar]);// Get only the visible text (characters that have been \"typed\")\nconst visibleText=fragments.slice(0,cursorPos).join(\"\");return /*#__PURE__*/_jsxs(\"div\",{ref:node=>{if(node){elementRef.current=node;if(containerRef)containerRef.current=node;}},style:containerStyle,children:[/*#__PURE__*/_jsx(\"span\",{style:{whiteSpace:\"pre-wrap\",textAlign:textAlign},children:visibleText}),/*#__PURE__*/_jsx(BlinkingCursor,{color:revealColor,fontWeight:fontWeight})]});}// Custom hook to transform scroll progress for a specific fragment\nfunction useFragmentProgress(scrollProgress,index,total,randomOrder,randomSeed,randomAmount,ease){// Calculate this fragment's position in the sequence\nconst fragmentIndex=useMemo(()=>{if(randomOrder){const seededRandom=Math.sin(randomSeed+index*9999)*1e4;const rand=seededRandom-Math.floor(seededRandom);return Math.floor(rand*total*randomAmount)%total;}return index;},[randomOrder,randomSeed,index,total,randomAmount]);// Each fragment gets a portion of the scroll range with overlap for smooth stagger\nconst staggerAmount=.6// How much fragments overlap (0 = no overlap, 1 = full overlap)\n;const fragmentDuration=1/(total*(1-staggerAmount)+staggerAmount);const fragmentStart=fragmentIndex*fragmentDuration*(1-staggerAmount);const fragmentEnd=fragmentStart+fragmentDuration;const easeFn=easingFunctions[ease];return useTransform(scrollProgress,value=>{if(value<=fragmentStart)return 0;if(value>=fragmentEnd)return 1;const localProgress=(value-fragmentStart)/(fragmentEnd-fragmentStart);return easeFn(Math.max(0,Math.min(1,localProgress)));});}function Fragment({fragment,index,total,effect,mode,scrollProgress,overflow,opacity,blur,scale,offsetX,offsetY,randomOrder,randomAmount,randomSeed,baseColor,revealColor,ease}){// Get this fragment's individual progress (0 to 1)\nconst progress=useFragmentProgress(scrollProgress,index,total,randomOrder,randomSeed,randomAmount,ease);// Calculate random scale for randomScale effect\nconst effectiveScale=useMemo(()=>{if(effect===\"randomScale\"){const seededRandom=Math.sin(randomSeed+index*1234)*1e4;const rand=seededRandom-Math.floor(seededRandom);return 1+rand*randomAmount*1.5;}return scale;},[effect,randomSeed,index,randomAmount,scale]);// Transform progress to actual style values\nconst animatedOpacity=useTransform(progress,[0,1],[opacity,1]);const animatedBlur=useTransform(progress,p=>`blur(${blur*(1-p)}px)`);const animatedScale=useTransform(progress,[0,1],[effectiveScale,1]);const animatedX=useTransform(progress,[0,1],[offsetX,0]);const animatedY=useTransform(progress,[0,1],[offsetY,0]);const animatedClipPath=useTransform(progress,p=>effect===\"slide\"?`inset(0 ${(1-p)*100}% 0 0)`:\"none\");// Color interpolation for changeColor effect\nconst animatedColor=useTransform(progress,[0,1],[baseColor,revealColor]);const style={display:\"inline-block\",overflow:overflow,whiteSpace:mode===\"chars\"?\"pre\":\"pre-wrap\",willChange:\"transform, opacity, filter\"};// Build motion style based on effect\nconst motionStyle={opacity:effect===\"slide\"||effect===\"changeColor\"?1:animatedOpacity,scale:[\"fadeIn\",\"changeColor\",\"randomStagger\",\"slide\"].includes(effect)?1:animatedScale,x:effect===\"slide\"?0:animatedX,y:animatedY,filter:effect===\"blurReveal\"?animatedBlur:\"none\",clipPath:animatedClipPath,color:effect===\"changeColor\"?animatedColor:revealColor};return /*#__PURE__*/_jsx(motion.span,{style:{...style,...motionStyle},children:fragment});}// Main component\nexport default function TextRevealScroll(props){const{text,fontFamily,fontSize,fontWeight,lineHeight,letterSpacing,baseColor,revealColor,effect,mode,viewportPosition,replay,duration,ease,overflow,opacity:propOpacity,blur:propBlur,scale:propScale,offsetX:propOffsetX,offsetY:propOffsetY,staggerDelay,randomOrder:propRandomOrder,randomAmount:propRandomAmount}=props;const containerRef=useRef(null);const[containerWidth,setContainerWidth]=useState(800);const[randomSeed]=useState(()=>Math.random()*1e4);// Merge effect defaults with props\nconst defaults=effectDefaults[effect];const opacity=defaults.opacity??propOpacity;const blur=defaults.blur??propBlur;const scale=defaults.scale??propScale;const offsetX=defaults.offsetX??propOffsetX;const offsetY=defaults.offsetY??propOffsetY;const randomOrder=effect===\"randomStagger\"||effect===\"randomScale\"?true:propRandomOrder;const randomAmount=defaults.randomAmount??propRandomAmount;// Force chars mode for typewriter effect\nconst effectiveMode=effect===\"typewriter\"?\"chars\":mode;// Scroll progress tracking\nconst startOffset=viewportPosition/100;const{scrollYProgress}=useScroll({target:containerRef,offset:[`start ${1-startOffset}`,`end ${1-startOffset}`]});// Handle replay behavior\nconst effectiveProgress=useTransform(scrollYProgress,value=>{if(!replay&&value<0)return 0;return Math.max(0,Math.min(1,value));});// Measure container\nuseEffect(()=>{if(!containerRef.current)return;const observer=new ResizeObserver(entries=>{for(const entry of entries){setContainerWidth(entry.contentRect.width);}});observer.observe(containerRef.current);return()=>observer.disconnect();},[]);// Build font string for line calculation\nconst fontString=`${fontWeight} ${fontSize*16}px ${fontFamily}`;// Split text\nconst fragments=useMemo(()=>splitText(text,mode,containerWidth,fontString),[text,mode,containerWidth,fontString]);const containerStyle={fontFamily,fontSize:`${fontSize}rem`,fontWeight,lineHeight,letterSpacing:`${letterSpacing}em`,color:revealColor,width:\"100%\"};// For lines mode, we need to render each line as a block\nif(effectiveMode===\"lines\"){return /*#__PURE__*/_jsx(\"div\",{ref:containerRef,style:containerStyle,children:fragments.map((fragment,index)=>/*#__PURE__*/_jsx(\"div\",{style:{overflow},children:/*#__PURE__*/_jsx(Fragment,{fragment:fragment,index:index,total:fragments.length,effect:effect,mode:effectiveMode,scrollProgress:effectiveProgress,overflow:overflow,opacity:opacity,blur:blur,scale:scale,offsetX:offsetX,offsetY:offsetY,randomOrder:randomOrder,randomAmount:randomAmount,randomSeed:randomSeed,baseColor:baseColor,revealColor:revealColor,ease:ease})},`line-${index}`))});}// Typewriter effect with cursor\nif(effect===\"typewriter\"){return /*#__PURE__*/_jsx(TypewriterRenderer,{containerRef:containerRef,containerStyle:containerStyle,fragments:fragments,revealColor:revealColor,typingSpeed:props.typingSpeed,typingDelay:props.typingDelay,viewportPosition:viewportPosition,replay:replay,fontWeight:fontWeight});}return /*#__PURE__*/_jsx(\"div\",{ref:containerRef,style:containerStyle,children:fragments.map((fragment,index)=>/*#__PURE__*/_jsx(Fragment,{fragment:fragment,index:index,total:fragments.length,effect:effect,mode:effectiveMode,scrollProgress:effectiveProgress,overflow:overflow,opacity:opacity,blur:blur,scale:scale,offsetX:offsetX,offsetY:offsetY,randomOrder:randomOrder,randomAmount:randomAmount,randomSeed:randomSeed,baseColor:baseColor,revealColor:revealColor,ease:ease},`${index}-${fragment}`))});}// Default props\nTextRevealScroll.defaultProps={text:\"Every effect comes fully pre-configured. Just drop it into your page, change the text, adjust a few settings if you want, and it's instantly ready to use, no setup or animation work required.\",fontFamily:\"Inter, sans-serif\",fontSize:3,fontWeight:200,textAlign:\"left\",lineHeight:1.2,letterSpacing:-.02,baseColor:\"#B8B8B8\",revealColor:\"#1E1E1E\",effect:\"blurReveal\",mode:\"lines\",viewportPosition:65,replay:true,duration:.5,ease:\"smooth\",overflow:\"visible\",opacity:0,blur:10,scale:1.2,offsetX:0,offsetY:0,staggerDelay:.05,randomOrder:false,randomAmount:1,typingSpeed:30,typingDelay:0};// Property Controls\naddPropertyControls(TextRevealScroll,{// Text & Font Section\ntext:{type:ControlType.String,title:\"Text\",displayTextArea:true,defaultValue:TextRevealScroll.defaultProps.text},fontFamily:{type:ControlType.String,title:\"Font Family\",defaultValue:TextRevealScroll.defaultProps.fontFamily},fontSize:{type:ControlType.Number,title:\"Font Size (rem)\",defaultValue:TextRevealScroll.defaultProps.fontSize,min:.5,max:10,step:.1},fontWeight:{type:ControlType.Number,title:\"Font Weight\",defaultValue:TextRevealScroll.defaultProps.fontWeight,min:100,max:900,step:100},textAlign:{type:ControlType.String,title:\"Text align\",defaultValue:TextRevealScroll.defaultProps.textAlign},lineHeight:{type:ControlType.Number,title:\"Line Height\",defaultValue:TextRevealScroll.defaultProps.lineHeight,min:.8,max:3,step:.1},letterSpacing:{type:ControlType.Number,title:\"Letter Spacing (em)\",defaultValue:TextRevealScroll.defaultProps.letterSpacing,min:-.1,max:.5,step:.01},// Colors Section\nbaseColor:{type:ControlType.Color,title:\"Base Color\",defaultValue:TextRevealScroll.defaultProps.baseColor},revealColor:{type:ControlType.Color,title:\"Reveal Color\",defaultValue:TextRevealScroll.defaultProps.revealColor},// Effect & Mode Section\neffect:{type:ControlType.Enum,title:\"Effect\",options:[\"blurReveal\",\"fadeIn\",\"changeColor\",\"scaleReveal\",\"randomStagger\",\"randomScale\",\"overscale\",\"slide\",\"typewriter\"],optionTitles:[\"Blur Reveal\",\"Fade In\",\"Change Color\",\"Scale Reveal\",\"Random Stagger\",\"Random Scale\",\"Overscale\",\"Slide\",\"Typewriter\"],defaultValue:TextRevealScroll.defaultProps.effect},mode:{type:ControlType.Enum,title:\"Mode\",options:[\"lines\",\"words\",\"chars\"],optionTitles:[\"Per Lines\",\"Per Words\",\"Per Chars\"],defaultValue:TextRevealScroll.defaultProps.mode,hidden:props=>props.effect===\"typewriter\"},// Trigger Section\nviewportPosition:{type:ControlType.Number,title:\"Start at (%)\",defaultValue:TextRevealScroll.defaultProps.viewportPosition,min:0,max:100,step:1,unit:\"%\"},replay:{type:ControlType.Boolean,title:\"Replay\",defaultValue:TextRevealScroll.defaultProps.replay,enabledTitle:\"Yes\",disabledTitle:\"No\"},// Animation Section\nease:{type:ControlType.Enum,title:\"Ease\",options:[\"smooth\",\"back\",\"elastic\",\"linear\"],optionTitles:[\"Smooth\",\"Back\",\"Elastic\",\"Linear\"],defaultValue:TextRevealScroll.defaultProps.ease},overflow:{type:ControlType.Enum,title:\"Overflow\",options:[\"visible\",\"hidden\"],optionTitles:[\"Visible\",\"Hidden\"],defaultValue:TextRevealScroll.defaultProps.overflow},// Motion Controls - conditionally shown based on effect\nopacity:{type:ControlType.Number,title:\"Opacity\",defaultValue:TextRevealScroll.defaultProps.opacity,min:0,max:1,step:.1,hidden:props=>[\"changeColor\",\"slide\"].includes(props.effect)},blur:{type:ControlType.Number,title:\"Blur\",defaultValue:TextRevealScroll.defaultProps.blur,min:0,max:50,step:1,unit:\"px\",hidden:props=>props.effect!==\"blurReveal\"},scale:{type:ControlType.Number,title:\"Scale\",defaultValue:TextRevealScroll.defaultProps.scale,min:.1,max:5,step:.1,hidden:props=>[\"fadeIn\",\"changeColor\",\"randomStagger\",\"slide\"].includes(props.effect)},offsetX:{type:ControlType.Number,title:\"Offset X\",defaultValue:TextRevealScroll.defaultProps.offsetX,min:-1e3,max:1e3,step:1,unit:\"px\",hidden:props=>props.effect===\"slide\"},offsetY:{type:ControlType.Number,title:\"Offset Y\",defaultValue:TextRevealScroll.defaultProps.offsetY,min:-1e3,max:1e3,step:1,unit:\"px\",hidden:props=>props.effect===\"slide\"},// Random Section\nrandomOrder:{type:ControlType.Boolean,title:\"Random Order\",defaultValue:TextRevealScroll.defaultProps.randomOrder,enabledTitle:\"Yes\",disabledTitle:\"No\",hidden:props=>[\"randomStagger\",\"randomScale\"].includes(props.effect)},randomAmount:{type:ControlType.Number,title:\"Random Amount\",defaultValue:TextRevealScroll.defaultProps.randomAmount,min:0,max:2,step:.1,hidden:props=>!props.randomOrder&&![\"randomStagger\",\"randomScale\"].includes(props.effect)},typingSpeed:{type:ControlType.Number,title:\"Typing Speed\",defaultValue:TextRevealScroll.defaultProps.typingSpeed,min:1,max:100,step:1,unit:\"chars/s\",hidden:props=>props.effect!==\"typewriter\"||props.typingDelay>0},typingDelay:{type:ControlType.Number,title:\"Typing Delay\",defaultValue:TextRevealScroll.defaultProps.typingDelay,min:0,max:.5,step:.01,unit:\"s\",hidden:props=>props.effect!==\"typewriter\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"TextRevealScroll\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./TextEffects.map"],"mappings":"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"}