{"version":3,"file":"Code.CAUa9v3M.mjs","names":["useRef","useState"],"sources":["https:/framerusercontent.com/modules/sgPCKBwz8H8pYsQ6ig0K/WkEJWkOzitLZ4CN6pjIf/Code.js"],"sourcesContent":["// Overrides.tsx\n// Simple text decode override for Framer\n// Applies to any Text layer, keeps styling, just scrambles the characters first.\nimport{jsx as _jsx}from\"react/jsx-runtime\";import{useEffect,useRef,useState}from\"react\";const CHARS=\"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789#%@&?\";// ✅ ONLY CHANGE: extract text from strings, arrays, AND React element-like objects\nconst extractText=value=>{if(value==null||value===false||value===true)return\"\";if(typeof value===\"string\")return value;if(typeof value===\"number\")return String(value);if(Array.isArray(value))return value.map(extractText).join(\"\");// React element / element-like: { props: { children: ... } }\nif(typeof value===\"object\"&&value.props&&\"children\"in value.props){return extractText(value.props.children);}return\"\";};export function withDecodeOnViewportMiddle(Component){return props=>{const ref=useRef(null);const originalText=extractText(props.text??props.children?.props?.children?.props?.children);const[iteration,setIteration]=useState(0);const[started,setStarted]=useState(false);// Detect when the component center hits the viewport center\nuseEffect(()=>{if(!ref.current)return;const el=ref.current;const checkPosition=()=>{const rect=el.getBoundingClientRect();const elementCenter=rect.top+rect.height/2;const viewportCenter=window.innerHeight/2;const viewport3=2*window.innerHeight/3;// Trigger when centers are close (tolerance 50px)\nif(Math.abs(elementCenter-viewport3)<50){setStarted(true);window.removeEventListener(\"scroll\",checkPosition);}};// Check on mount and on scroll\nwindow.addEventListener(\"scroll\",checkPosition);checkPosition()// initial check\n;return()=>window.removeEventListener(\"scroll\",checkPosition);},[]);// Decode animation\nuseEffect(()=>{if(!started||!originalText)return;let frame=0;const total=originalText.length;const interval=setInterval(()=>{frame+=1;const revealCount=Math.min(total,frame);setIteration(revealCount);if(revealCount>=total)clearInterval(interval);},100);return()=>clearInterval(interval);},[started,originalText]);// Build scrambled output\nconst decodedText=originalText&&originalText.split(\"\").map((char,index)=>{if(index<iteration)return char;return CHARS[Math.floor(Math.random()*CHARS.length)];}).join(\"\");return /*#__PURE__*/_jsx(Component,{...props,text:decodedText||originalText,ref:ref});};}\nexport const __FramerMetadata__ = {\"exports\":{\"withDecodeOnViewportMiddle\":{\"type\":\"reactHoc\",\"name\":\"withDecodeOnViewportMiddle\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Code.map"],"mappings":"8IAKwH,SAAgB,EAA2B,EAAU,CAAC,MAAO,IAAO,CAAC,IAAM,EAAIA,EAAO,KAAK,CAAO,EAAa,EAAY,EAAM,MAAM,EAAM,UAAU,OAAO,UAAU,OAAO,SAAS,CAAM,CAAC,EAAU,GAAcC,EAAS,EAAE,CAAM,CAAC,EAAQ,GAAYA,EAAS,GAAM,CACpY,MAAc,CAAC,GAAG,CAAC,EAAI,QAAQ,OAAO,IAAM,EAAG,EAAI,QAAc,MAAkB,CAAC,IAAM,EAAK,EAAG,uBAAuB,CAAO,EAAc,EAAK,IAAI,EAAK,OAAO,EAAuB,EAAO,YAAY,EAAE,IAAM,EAAU,EAAE,EAAO,YAAY,EACjP,KAAK,IAAI,EAAc,EAAU,CAAC,KAAI,EAAW,GAAK,CAAC,EAAO,oBAAoB,SAAS,EAAc,GAE3G,OADD,EAAO,iBAAiB,SAAS,EAAc,CAAC,GAAe,KACpD,EAAO,oBAAoB,SAAS,EAAc,EAAG,EAAE,CAAC,CACnE,MAAc,CAAC,GAAG,CAAC,GAAS,CAAC,EAAa,OAAO,IAAI,EAAM,EAAQ,EAAM,EAAa,OAAa,EAAS,gBAAgB,CAAC,GAAO,EAAE,IAAM,EAAY,KAAK,IAAI,EAAM,EAAM,CAAC,EAAa,EAAY,CAAI,GAAa,GAAM,cAAc,EAAS,EAAG,IAAI,CAAC,UAAU,cAAc,EAAS,EAAG,CAAC,EAAQ,EAAa,CAAC,CACxT,IAAM,EAAY,GAAc,EAAa,MAAM,GAAG,CAAC,KAAK,EAAK,IAAY,EAAM,EAAiB,EAAY,EAAM,KAAK,MAAM,KAAK,QAAQ,CAAC,GAAa,EAAI,CAAC,KAAK,GAAG,CAAC,OAAoB,EAAK,EAAU,CAAC,GAAG,EAAM,KAAK,GAAa,EAAiB,MAAI,CAAC,2BARpN,IAA6C,CAAM,EAAM,4CAC9F,EAAY,GAAW,GAAO,MAAM,IAAQ,IAAO,IAAQ,GAAW,GAAM,OAAO,GAAQ,SAAgB,EAAS,OAAO,GAAQ,SAAgB,OAAO,EAAM,CAAI,MAAM,QAAQ,EAAM,CAAQ,EAAM,IAAI,EAAY,CAAC,KAAK,GAAG,CAClO,OAAO,GAAQ,UAAU,EAAM,OAAO,aAAa,EAAM,MAAc,EAAY,EAAM,MAAM,SAAS,CAAQ"}