{"version":3,"file":"ScrambleText.ClRKT7-R.mjs","names":["React.useState","React.useRef","React.useMemo","React.useCallback"],"sources":["https:/framerusercontent.com/modules/rJkPGnzDm4vLNoUMNvE3/i6mZ6B7MpM0IFuS3SJvw/ScrambleText.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import*as React from\"react\";import{addPropertyControls,ControlType,useIsStaticRenderer}from\"framer\";import{motion,useInView}from\"framer-motion\";/**\n * @framerSupportedLayoutWidth auto\n * @framerSupportedLayoutHeight auto\n */export default function ScrambleText(props){const{text,duration,delay,trigger,font,fontSize,responsiveFontSize,minFontSize,maxFontSize,color,scrambleSpeed,characterSet,onHoverStart,onHoverEnd,style}=props;const[displayText,setDisplayText]=React.useState(text);const isAnimating=React.useRef(false);const cleanupRef=React.useRef(null);const containerRef=React.useRef(null);const isInView=useInView(containerRef,{once:true});const isStatic=useIsStaticRenderer();// Character sets for scrambling\nconst chars=React.useMemo(()=>{switch(characterSet){case\"numbers\":return\"0123456789\";case\"alphabet\":return\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\";case\"binary\":return\"01\";case\"matrix\":return\"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ$+-*/=%\";case\"original\":return text.replace(/\\s/g,\"\");default:return\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()_+-=[]{}|;:,.<>?\";}},[characterSet,text]);const animate=React.useCallback(()=>{if(isAnimating.current)return;if(cleanupRef.current)cleanupRef.current();isAnimating.current=true;const startTime=Date.now();const totalDuration=duration*1e3;const delayMs=delay*1e3;const interval=1e3/scrambleSpeed;let lastUpdate=0;let frameId;const tick=()=>{const now=Date.now();const elapsed=now-startTime;if(elapsed<delayMs){frameId=requestAnimationFrame(tick);return;}const progress=Math.min((elapsed-delayMs)/totalDuration,1);if(now-lastUpdate>=interval||progress===1){lastUpdate=now;const revealIndex=Math.floor(text.length*progress);const scrambled=text.split(\"\").map((char,index)=>{if(char===\" \"||char===\"\\n\")return char;if(index<revealIndex)return text[index];return chars[Math.floor(Math.random()*chars.length)];}).join(\"\");setDisplayText(scrambled);}if(progress<1){frameId=requestAnimationFrame(tick);}else{isAnimating.current=false;setDisplayText(text);cleanupRef.current=null;}};frameId=requestAnimationFrame(tick);cleanupRef.current=()=>{cancelAnimationFrame(frameId);isAnimating.current=false;};},[text,duration,delay,chars,scrambleSpeed]);// Cleanup on unmount\nReact.useEffect(()=>{return()=>{if(cleanupRef.current)cleanupRef.current();};},[]);// Handle Triggers\nReact.useEffect(()=>{if(isStatic)return;if(trigger===\"onLoad\"){animate();}else if(trigger===\"onInView\"&&isInView){animate();}},[trigger,isInView,animate,isStatic]);const handleMouseEnter=()=>{if(trigger===\"onHover\"){animate();}if(onHoverStart)onHoverStart();};const handleMouseLeave=()=>{if(onHoverEnd)onHoverEnd();};// Reset display text when prop changes\nReact.useEffect(()=>{if(cleanupRef.current)cleanupRef.current();setDisplayText(text);},[text]);// Calculate responsive font size\nconst[computedFontSize,setComputedFontSize]=React.useState(fontSize);React.useEffect(()=>{if(!responsiveFontSize){setComputedFontSize(fontSize);return;}const handleResize=()=>{const vw=window.innerWidth;const vh=window.innerHeight;const baseSize=Math.min(vw,vh);const scaledSize=baseSize/100*(fontSize/10);setComputedFontSize(Math.max(minFontSize,Math.min(maxFontSize,scaledSize)));};handleResize();window.addEventListener(\"resize\",handleResize);return()=>window.removeEventListener(\"resize\",handleResize);},[responsiveFontSize,fontSize,minFontSize,maxFontSize]);return /*#__PURE__*/_jsx(motion.div,{ref:containerRef,onMouseEnter:handleMouseEnter,onMouseLeave:handleMouseLeave,style:{...style,...font,fontSize:computedFontSize,color:color,display:\"inline-block\",whiteSpace:\"nowrap\",overflowWrap:\"break-word\",overflow:\"visible\"},children:displayText});}addPropertyControls(ScrambleText,{text:{type:ControlType.String,title:\"Text\",defaultValue:\"Scramble Effect\",displayTextArea:true},font:{type:ControlType.Font,controls:\"extended\",defaultFontType:\"sans-serif\",defaultValue:{variant:\"Bold\",fontSize:18}},fontSize:{type:ControlType.Number,title:\"Font Size\",defaultValue:18,min:1,max:200,step:1},responsiveFontSize:{type:ControlType.Boolean,title:\"Responsive Size\",defaultValue:false,enabledTitle:\"On\",disabledTitle:\"Off\"},minFontSize:{type:ControlType.Number,title:\"Min Size\",defaultValue:16,min:8,max:100,step:1,hidden:({responsiveFontSize})=>!responsiveFontSize},maxFontSize:{type:ControlType.Number,title:\"Max Size\",defaultValue:64,min:20,max:200,step:1,hidden:({responsiveFontSize})=>!responsiveFontSize},color:{type:ControlType.Color,title:\"Color\",defaultValue:\"#000000\"},trigger:{type:ControlType.Enum,title:\"Trigger\",options:[\"onLoad\",\"onHover\",\"onInView\"],optionTitles:[\"On Load\",\"On Hover\",\"In View\"],defaultValue:\"onHover\"},duration:{type:ControlType.Number,title:\"Duration\",defaultValue:1.5,min:.1,max:10,step:.1,unit:\"s\"},delay:{type:ControlType.Number,title:\"Delay\",defaultValue:0,min:0,max:5,step:.1,unit:\"s\"},scrambleSpeed:{type:ControlType.Number,title:\"Speed\",defaultValue:30,min:1,max:60,step:1,displayStepper:true,description:\"Updates per second\"},characterSet:{type:ControlType.Enum,title:\"Characters\",options:[\"all\",\"alphabet\",\"numbers\",\"binary\",\"matrix\",\"original\"],optionTitles:[\"All\",\"Alphabet\",\"Numbers\",\"Binary\",\"Matrix\",\"Original\"],defaultValue:\"Original\"},onHoverStart:{type:ControlType.EventHandler},onHoverEnd:{type:ControlType.EventHandler}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"ScrambleText\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutHeight\":\"auto\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutWidth\":\"auto\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./ScrambleText.map"],"mappings":"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"}