{"version":3,"file":"ScrambleText.D5FWNTYC.mjs","names":["useRef","useState","useMemo"],"sources":["https:/framerusercontent.com/modules/dyDBvsJpvalyEh2Bz8G9/03ePeJ7pMSrhPsH0VPZY/ScrambleText.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";import{useEffect,useState,useRef,useMemo}from\"react\";import{useInView,animate}from\"framer-motion\";// ─── State Constants ────────────────────────────────────────────────────────\nconst HIDDEN=0;const SCRAMBLED=1;const REVEALED=2;// ─── Helpers ─────────────────────────────────────────────────────────────────\n/**\n * Maps a value from one range to another.\n */function mapRange(value,fromLow,fromHigh,toLow,toHigh){if(fromLow===fromHigh)return toLow;const percentage=(value-fromLow)/(fromHigh-fromLow);return toLow+percentage*(toHigh-toLow);}/**\n * Clamps a value between min and max.\n */function clamp(value,min,max){return Math.max(min,Math.min(value,max));}/**\n * Merges adjacent segments that share the same state,\n * and removes empty segments.\n */function consolidateSegments(segments){return segments.filter(([text])=>text.length>0).reduce((acc,curr)=>{if(acc.length===0||acc[acc.length-1][1]!==curr[1]){acc.push(curr);}else{acc[acc.length-1][0]+=curr[0];}return acc;},[]);}/**\n * Generates a random string matching the length and (optionally)\n * the case of the original text.\n */function randomString(props){const{text:originalText,characters,options}=props;const{matchCase,keepSpaces}=options;const length=originalText.length;if(length<=0)return\"\";let result=\"\";let lastChar=\"\";for(let i=0;i<length;i++){const originalChar=originalText[i];// Preserve whitespace when keepSpaces is enabled\nif(keepSpaces&&(originalChar===\" \"||originalChar===\"\t\")){result+=originalChar;continue;}let newChar;do{newChar=characters[Math.floor(Math.random()*characters.length)];if(matchCase&&originalChar){newChar=originalChar===originalChar.toUpperCase()?newChar.toUpperCase():newChar.toLowerCase();}}while(newChar===lastChar&&characters.length>=8)result+=newChar;lastChar=newChar;}return result;}// ─── Component ───────────────────────────────────────────────────────────────\n/**\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight any\n *\n * @framerDisableUnlink\n *\n * @framerIntrinsicWidth 400\n * @framerIntrinsicHeight 200\n */export default function ScrambleAppear(props){const{from,scrambledLetters,text,scrambledColor,animation,speed}=props;const isCanvas=RenderTarget.current()===RenderTarget.canvas;const Tag=props.tag;const ref=useRef(null);const encryptedText=useRef(randomString(props));const intervalRef=useRef(null);const[progress,setProgress]=useState(0);const[currentAnimation,setCurrentAnimation]=useState(null);const isInView=useInView(ref,{once:!animation.replay,amount:\"some\"});// Time (in seconds) per character — slower speed = larger value\nconst characterDelay=mapRange(speed,1,100,.2,.002);// Pre-compute a stable random order for the \"random\" reveal mode\nconst shuffledIndices=useMemo(()=>{if(from!==\"random\")return[];const indices=Array.from({length:text.length},(_,i)=>i);return indices.sort(()=>Math.random()-.5);},[text,from]);// ── Animation Runner ─────────────────────────────────────────────────────\nconst runAnimation=()=>{if(isCanvas)return;currentAnimation?.stop();if(intervalRef.current)clearInterval(intervalRef.current);setTimeout(()=>{intervalRef.current=setInterval(()=>{encryptedText.current=randomString(props);},characterDelay*1e3);setCurrentAnimation(animate(0,1,{type:\"ease\",ease:\"linear\",duration:characterDelay*(text.length+scrambledLetters),onUpdate:setProgress,onComplete:()=>{if(intervalRef.current){clearInterval(intervalRef.current);}}}));},animation.delay*1e3);};// ── Effects ──────────────────────────────────────────────────────────────\n// \"Appear\" trigger: run once on mount\nuseEffect(()=>{if(animation.trigger===\"appear\")runAnimation();return()=>{if(intervalRef.current)clearInterval(intervalRef.current);};},[]);// \"Layer in View\" trigger: run/reset based on visibility\nuseEffect(()=>{if(animation.trigger!==\"layerInView\")return;if(isInView){runAnimation();}else if(currentAnimation){currentAnimation.stop();setProgress(0);if(intervalRef.current)clearInterval(intervalRef.current);}},[isInView]);// ── Segment Calculation ──────────────────────────────────────────────────\nconst segments=[];switch(from){case\"left\":{const leftCutoff=mapRange(progress,0,1,-scrambledLetters,text.length);const rightCutoff=mapRange(progress,0,1,0,text.length+scrambledLetters);segments.push([text.substring(0,clamp(leftCutoff,0,text.length)),REVEALED],[encryptedText.current.substring(clamp(leftCutoff,0,text.length),clamp(rightCutoff,0,text.length)),SCRAMBLED],[text.substring(clamp(rightCutoff,0,text.length)),HIDDEN]);break;}case\"center\":{const center=Math.ceil(text.length/2);const letters=Math.max(Math.floor(scrambledLetters/2),1);const leftCutoff=mapRange(progress,0,1,center,-letters);const rightCutoff=mapRange(progress,0,1,center+letters,0);segments.push([text.substring(0,clamp(leftCutoff,0,text.length)),HIDDEN],[encryptedText.current.substring(clamp(leftCutoff,0,center),clamp(rightCutoff,0,center)),SCRAMBLED],[text.substring(clamp(rightCutoff,0,center),clamp(text.length-rightCutoff,center,text.length)),REVEALED],[encryptedText.current.substring(clamp(text.length-leftCutoff,center,text.length),clamp(text.length-rightCutoff,center,text.length)),SCRAMBLED],[text.substring(clamp(text.length-leftCutoff,0,text.length),text.length),HIDDEN]);break;}case\"right\":{const leftCutoff=mapRange(progress,0,1,text.length,-scrambledLetters);const rightCutoff=mapRange(progress,0,1,text.length+scrambledLetters,0);segments.push([text.substring(0,clamp(leftCutoff,0,text.length)),HIDDEN],[encryptedText.current.substring(clamp(leftCutoff,0,text.length),clamp(rightCutoff,0,text.length)),SCRAMBLED],[text.substring(clamp(rightCutoff,0,text.length),text.length),REVEALED]);break;}case\"random\":{if(progress===0){// Still in delay — hide everything\nsegments.push([text,HIDDEN]);}else if(progress>=1){// Fully revealed\nsegments.push([text,REVEALED]);}else{// Per-character reveal based on shuffled order\nfor(let i=0;i<text.length;i++){const indexInSequence=shuffledIndices.indexOf(i);// Window size representing the fraction of time a character\n// stays in the \"scrambled\" state before being revealed\nconst scrambleWindow=scrambledLetters/text.length;const startScrambleAt=indexInSequence/text.length*(1-scrambleWindow);const startRevealAt=startScrambleAt+scrambleWindow;if(progress>=startRevealAt){segments.push([text[i],REVEALED]);}else if(progress>=startScrambleAt){segments.push([encryptedText.current[i],SCRAMBLED]);}else{segments.push([text[i],HIDDEN]);}}}break;}}// ── Render ───────────────────────────────────────────────────────────────\nreturn /*#__PURE__*/_jsx(Tag,{ref:ref,style:{color:props.color,userSelect:\"none\",pointerEvents:\"none\",margin:0,whiteSpace:props.style?.width?undefined:\"nowrap\",textTransform:props.options.textTransform??\"none\",...props.font,...props.style},children:isCanvas?text:consolidateSegments(segments).map(([segText,state],index)=>{switch(state){case HIDDEN:return /*#__PURE__*/_jsx(\"span\",{style:{opacity:0},children:segText},index);case SCRAMBLED:return scrambledColor?/*#__PURE__*/_jsx(\"span\",{style:{color:scrambledColor},children:segText},index):segText;case REVEALED:return segText;default:return null;}})});}ScrambleAppear.displayName=\"Scramble Appear\";// ─── Property Controls ────────────────────────────────────────────────────────\naddPropertyControls(ScrambleAppear,{text:{type:ControlType.String,defaultValue:\"Learn Framer With Framer University\",displayTextArea:true},characters:{type:ControlType.String,defaultValue:\"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()_+[]{}|;:,.<>?~\",displayTextArea:true},from:{type:ControlType.Enum,defaultValue:\"left\",options:[\"left\",\"center\",\"right\",\"random\"],optionTitles:[\"Left\",\"Center\",\"Right\",\"Random\"]},font:{type:\"font\",controls:\"extended\",defaultFontType:\"monospace\",defaultValue:{fontSize:24,lineHeight:1.4}},color:{type:ControlType.Color,defaultValue:\"#000\"},scrambledColor:{type:ControlType.Color,optional:true,title:\"Scrambled\"},speed:{type:ControlType.Number,defaultValue:75,min:1,max:100,step:1,unit:\"%\"},scrambledLetters:{type:ControlType.Number,defaultValue:10,min:1,step:1,displayStepper:true,title:\"Letters\"},animation:{type:ControlType.Object,icon:\"effect\",controls:{trigger:{type:ControlType.Enum,defaultValue:\"layerInView\",options:[\"appear\",\"layerInView\"],optionTitles:[\"Appear\",\"Layer in View\"],displaySegmentedControl:true,segmentedControlDirection:\"vertical\"},replay:{type:ControlType.Boolean,defaultValue:true,hidden:props=>props.trigger!==\"layerInView\"},delay:{type:ControlType.Number,defaultValue:0,min:0,step:.01}}},options:{type:ControlType.Object,buttonTitle:\"Options\",controls:{matchCase:{type:ControlType.Boolean,defaultValue:true},keepSpaces:{type:ControlType.Boolean,defaultValue:false,title:\"Spaces\",enabledTitle:\"Keep\",disabledTitle:\"Replace\",description:\"\"},textTransform:{type:ControlType.Enum,defaultValue:\"none\",title:\"Transform\",options:[\"none\",\"inherit\",\"capitalize\",\"uppercase\",\"lowercase\"],optionTitles:[\"None\",\"Inherit\",\"Capitalize\",\"Uppercase\",\"Lowercase\"]}}},userSelect:{type:ControlType.Boolean,defaultValue:true},tag:{type:ControlType.Enum,title:\"Tag\",defaultValue:\"p\",displaySegmentedControl:true,options:[\"h1\",\"h2\",\"h3\",\"p\"],optionTitles:[\"H1\",\"H2\",\"H3\",\"P\"],description:\"More components at [Framer University](https://frameruni.link/cc).\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"ScrambleAppear\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutHeight\":\"any\",\"framerIntrinsicWidth\":\"400\",\"framerDisableUnlink\":\"*\",\"framerSupportedLayoutWidth\":\"any\",\"framerIntrinsicHeight\":\"200\",\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./ScrambleText.map"],"mappings":"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"}