{"version":3,"file":"TextScrambler.ByI84Gpp.mjs","names":["useState","useRef","useMemo"],"sources":["https:/framerusercontent.com/modules/JRKw5yvAp0xgWCSOYUgK/gbyZ5nrcVTtC5sAsOavH/TextScrambler.js"],"sourcesContent":["// Text Scrambler with glow, dim shade, and color wave reveal\nimport{jsx as _jsx}from\"react/jsx-runtime\";import{useEffect,useRef,useState,useMemo,startTransition}from\"react\";import{addPropertyControls,ControlType,useInView,useIsStaticRenderer,RenderTarget}from\"framer\";const DEFAULT_TEXT=\"Scramble Reveal!\";const SCRAMBLE_CHARS=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()_+-=<>?\";function randomChar(charSet){return charSet[Math.floor(Math.random()*charSet.length)];}function scrambleChars(charSet,count){let s=\"\";for(let i=0;i<count;i++)s+=randomChar(charSet);return s;}function lerp(a,b,t){return a+(b-a)*t;}/**\n * Text Scrambler Effect\n *\n * @framerIntrinsicWidth 400\n * @framerIntrinsicHeight 60\n *\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight fit-content\n */export default function TextScrambler(props){const{text=DEFAULT_TEXT,scrambleDuration=1200,waveDuration=600,font,scrambleGlow,scrambleGlowColor,dimColor,finalColor,style,scrambleCount=2,scrambleCharSet=SCRAMBLE_CHARS,scramblePerChar=1,scrambleCycles=8,speed=1,textAlign=\"center\",enableHighlight=false,highlightColor=\"#FFFF00\"}=props;const[display,setDisplay]=useState([]);const[phase,setPhase]=useState(\"idle\")// idle | scramble | reveal\n;const[waveProgress,setWaveProgress]=useState(0);const[revealCount,setRevealCount]=useState(0);const[scrambleFrame,setScrambleFrame]=useState(0);const isStatic=useIsStaticRenderer();const ref=useRef(null);const inView=useInView(ref,{once:false,amount:.5});const scrambleTimeout=useRef(null);const waveTimeout=useRef(null);// Prepare text as array of words, each word is array of chars\nconst words=useMemo(()=>{return text.split(\" \").map((word,wi)=>word.split(\"\").map((char,ci)=>({char,wordIdx:wi,charIdx:ci})));},[text]);// Flattened chars for progress calculations\nconst flatChars=useMemo(()=>{let arr=[];words.forEach((word,wi)=>{word.forEach((c,ci)=>arr.push({...c,globalIdx:arr.length,wordIdx:wi,charIdx:ci}));if(wi<words.length-1)arr.push({char:\" \",wordIdx:wi,charIdx:word.length,globalIdx:arr.length});});return arr;},[words]);// Start animation when in view\nuseEffect(()=>{if(isStatic||RenderTarget.current()===RenderTarget.thumbnail){setDisplay(flatChars.map(c=>({char:c.char,state:\"final\"})));setPhase(\"reveal\");setWaveProgress(1);setRevealCount(flatChars.length);return;}if(inView){startTransition(()=>{setPhase(\"scramble\");setWaveProgress(0);setRevealCount(0);setScrambleFrame(0);});}else{startTransition(()=>{setPhase(\"idle\");setDisplay([]);setWaveProgress(0);setRevealCount(0);setScrambleFrame(0);});}return()=>{if(scrambleTimeout.current)clearTimeout(scrambleTimeout.current);if(waveTimeout.current)clearTimeout(waveTimeout.current);};},[inView,isStatic,flatChars]);// Scramble animation (left-to-right reveal with speed and scrambleCycles)\nuseEffect(()=>{if(phase!==\"scramble\")return;let start=performance.now();let frameId;const effectiveDuration=scrambleDuration/speed;function animate(now){const elapsed=now-start;const progress=Math.min(1,elapsed/effectiveDuration);const reveal=Math.floor(lerp(0,flatChars.length,progress));setRevealCount(reveal);const scrambleFrameNow=Math.floor(progress*scrambleCycles);setScrambleFrame(scrambleFrameNow);const arr=flatChars.map((c,i)=>{if(i<reveal)return{char:c.char,state:\"dim\"};if(i<reveal+scrambleCount){if(scrambleFrameNow<scrambleCycles){return{char:scrambleChars(scrambleCharSet,scramblePerChar),state:\"scramble\"};}else{return{char:c.char,state:\"dim\"};}}return{char:\" \",state:\"hidden\"};});setDisplay(arr);if(progress<1){frameId=requestAnimationFrame(animate);}else{setDisplay(flatChars.map(c=>({char:c.char,state:\"dim\"})));setRevealCount(flatChars.length);startTransition(()=>setPhase(\"reveal\"));}}frameId=requestAnimationFrame(animate);return()=>cancelAnimationFrame(frameId);},[phase,flatChars,scrambleDuration,speed,scrambleCount,scrambleCharSet,scramblePerChar,scrambleCycles]);// Color wave reveal\nuseEffect(()=>{if(phase!==\"reveal\")return;let start=performance.now();let frameId;function animate(now){const elapsed=now-start;const progress=Math.min(1,elapsed/waveDuration);setWaveProgress(progress);if(progress<1){frameId=requestAnimationFrame(animate);}else{setWaveProgress(1);}}frameId=requestAnimationFrame(animate);return()=>cancelAnimationFrame(frameId);},[phase,waveDuration]);// Compose final display, group by word for wrapping\nconst rendered=useMemo(()=>{if(!display.length)return null;let out=[];let charIdx=0;for(let wi=0;wi<words.length;wi++){const w=words[wi];let word=[];for(let ci=0;ci<w.length;ci++){const item=display[charIdx];// Color wave logic: only apply finalColor if phase is reveal and charIdx < waveProgress * flatChars.length\nlet color=dimColor;if(item.state===\"scramble\"){color=scrambleGlow;}else if(phase===\"reveal\"&&charIdx<Math.floor(waveProgress*flatChars.length)){color=finalColor;}word.push(/*#__PURE__*/_jsx(\"span\",{\"aria-hidden\":\"true\",style:{color,backgroundColor:enableHighlight?highlightColor:\"transparent\",textShadow:item.state===\"scramble\"?`0 0 8px ${scrambleGlowColor||scrambleGlow}, 0 0 16px ${scrambleGlowColor||scrambleGlow}`:\"none\",transition:\"color 0.25s linear, text-shadow 0.2s linear\",...font,fontFamily:font?.fontFamily,fontSize:font?.fontSize,fontWeight:font?.fontWeight,fontStyle:font?.fontStyle,letterSpacing:font?.letterSpacing,lineHeight:font?.lineHeight,whiteSpace:\"pre\",userSelect:\"none\",pointerEvents:\"none\"},children:item.state===\"hidden\"?/*#__PURE__*/_jsx(\"span\",{style:{visibility:\"hidden\"},children:\" \"}):item.char},\"c\"+charIdx));charIdx++;}// Add space if not last word\nif(wi<words.length-1){const item=display[charIdx];let color=dimColor;if(item.state===\"scramble\"){color=scrambleGlow;}else if(phase===\"reveal\"&&charIdx<Math.floor(waveProgress*flatChars.length)){color=finalColor;}word.push(/*#__PURE__*/_jsx(\"span\",{\"aria-hidden\":\"true\",style:{color,backgroundColor:enableHighlight?highlightColor:\"transparent\",textShadow:item.state===\"scramble\"?`0 0 8px ${scrambleGlowColor||scrambleGlow}, 0 0 16px ${scrambleGlowColor||scrambleGlow}`:\"none\",transition:\"color 0.25s linear, text-shadow 0.2s linear\",...font,fontFamily:font?.fontFamily,fontSize:font?.fontSize,fontWeight:font?.fontWeight,fontStyle:font?.fontStyle,letterSpacing:font?.letterSpacing,lineHeight:font?.lineHeight,whiteSpace:\"pre\",userSelect:\"none\",pointerEvents:\"none\"},children:item.state===\"hidden\"?/*#__PURE__*/_jsx(\"span\",{style:{visibility:\"hidden\"},children:\" \"}):item.char},\"c\"+charIdx));charIdx++;}out.push(/*#__PURE__*/_jsx(\"span\",{style:{display:\"inline-block\",whiteSpace:\"pre-wrap\",wordBreak:\"break-word\"},children:word},\"w\"+wi));}return out;},[display,phase,waveProgress,flatChars.length,scrambleGlow,scrambleGlowColor,dimColor,finalColor,font,words,enableHighlight,highlightColor]);return /*#__PURE__*/_jsx(\"div\",{ref:ref,style:{...style,width:\"100%\",height:\"fit-content\",display:\"flex\",alignItems:\"center\",justifyContent:textAlign===\"left\"?\"flex-start\":textAlign===\"center\"?\"center\":\"flex-end\",position:\"relative\",background:\"transparent\",cursor:\"default\",userSelect:\"none\",whiteSpace:\"normal\",wordBreak:\"break-word\"},\"aria-label\":text,children:/*#__PURE__*/_jsx(\"span\",{style:{width:\"100%\",display:\"block\",whiteSpace:\"normal\",wordBreak:\"break-word\"},children:rendered})});}addPropertyControls(TextScrambler,{text:{type:ControlType.String,title:\"Text\",defaultValue:DEFAULT_TEXT,displayTextArea:false},scrambleDuration:{type:ControlType.Number,title:\"Scramble ms\",defaultValue:1200,min:200,max:4e3,step:50,unit:\"ms\"},waveDuration:{type:ControlType.Number,title:\"Wave ms\",defaultValue:600,min:100,max:2e3,step:50,unit:\"ms\"},scrambleGlow:{type:ControlType.Color,title:\"Scramble Glow\",defaultValue:\"#FFFFFF\"},scrambleGlowColor:{type:ControlType.Color,title:\"Glow Color\",defaultValue:\"#FFFFFF\"},dimColor:{type:ControlType.Color,title:\"Dim Color\",defaultValue:\"#888888\"},finalColor:{type:ControlType.Color,title:\"Final Color\",defaultValue:\"#000000\"},enableHighlight:{type:ControlType.Boolean,title:\"Text Highlight\",defaultValue:false,enabledTitle:\"On\",disabledTitle:\"Off\"},highlightColor:{type:ControlType.Color,title:\"Highlight Color\",defaultValue:\"#FFFF00\",hidden:({enableHighlight})=>!enableHighlight},font:{type:ControlType.Font,title:\"Font\",controls:\"extended\",defaultFontType:\"sans-serif\",defaultValue:{fontSize:\"32px\",variant:\"Bold\",letterSpacing:\"-0.01em\",lineHeight:\"1.2em\"}},speed:{type:ControlType.Number,title:\"Speed\",defaultValue:1,min:.2,max:3,step:.1,unit:\"x\"},scrambleCount:{type:ControlType.Number,title:\"Scramble Letters\",defaultValue:2,min:1,max:10,step:1},scramblePerChar:{type:ControlType.Number,title:\"Chars per Letter\",defaultValue:1,min:1,max:5,step:1},scrambleCycles:{type:ControlType.Number,title:\"Scramble Cycles\",defaultValue:8,min:1,max:30,step:1,description:\"How many times each letter scrambles before revealing.\"},scrambleCharSet:{type:ControlType.String,title:\"Scramble Chars\",defaultValue:SCRAMBLE_CHARS,displayTextArea:false},textAlign:{type:ControlType.Enum,title:\"Text Align\",options:[\"left\",\"center\",\"right\"],optionTitles:[\"Left\",\"Center\",\"Right\"],defaultValue:\"center\",displaySegmentedControl:true}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"TextScrambler\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutWidth\":\"any-prefer-fixed\",\"framerIntrinsicHeight\":\"60\",\"framerSupportedLayoutHeight\":\"fit-content\",\"framerContractVersion\":\"1\",\"framerIntrinsicWidth\":\"400\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./TextScrambler.map"],"mappings":"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"}