{"version":3,"file":"DecodeText.zfPJXTIE.mjs","names":["useRef","useState"],"sources":["https:/framerusercontent.com/modules/blA4XhwRXRlV67S3KfAR/WlazgdoCqrLVkuqLYii2/DecodeText.js"],"sourcesContent":["/**\n * DecodeText — mono label that scrambles into place on scroll (the\n * midnight.agency work-index effect). SSR/static-safe: renders the FINAL\n * text by default and only scrambles client-side when observed into view,\n * so nothing is ever invisible or shifted (no layout motion — the footer\n * curtain lesson). Resolves left-to-right; runs once.\n */import{jsx as _jsx}from\"react/jsx-runtime\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";import{useEffect,useRef,useState}from\"react\";const MONO=\"'Geist Mono', 'DM Mono', monospace\";const CHARS=\"#/=+*%$&@<>\";const IS_CANVAS=RenderTarget.current()===RenderTarget.canvas;export default function DecodeText({text=\"SECTION LABEL\",color=\"#2B2725\",fontSize=11.5,duration=700,style}){const ref=useRef(null);const[display,setDisplay]=useState(text);const ran=useRef(false);useEffect(()=>{setDisplay(text);},[text]);useEffect(()=>{if(IS_CANVAS||!ref.current)return;const el=ref.current;const io=new IntersectionObserver(([e])=>{if(!e.isIntersecting||ran.current)return;ran.current=true;io.disconnect();const chars=text.split(\"\");const start=performance.now();const tick=now=>{const p=Math.min(1,(now-start)/duration);const resolved=Math.floor(p*chars.length);setDisplay(chars.map((c,i)=>{if(i<resolved||c===\" \"||c===\"■\")return c;return CHARS[Math.floor(Math.random()*CHARS.length)];}).join(\"\"));if(p<1)requestAnimationFrame(tick);else setDisplay(text);};requestAnimationFrame(tick);},{threshold:.5});io.observe(el);return()=>io.disconnect();},[text,duration]);return /*#__PURE__*/_jsx(\"span\",{ref:ref,style:{fontFamily:MONO,fontWeight:500,fontSize,letterSpacing:\"0.8px\",lineHeight:1.5,textTransform:\"uppercase\",color,whiteSpace:\"nowrap\",display:\"inline-block\",...style},children:display});}addPropertyControls(DecodeText,{text:{type:ControlType.String,title:\"Text\",defaultValue:\"SECTION LABEL\"},color:{type:ControlType.Color,title:\"Color\",defaultValue:\"#2B2725\"},fontSize:{type:ControlType.Number,title:\"Size\",defaultValue:11.5,min:8,max:24,step:.5},duration:{type:ControlType.Number,title:\"Duration (ms)\",defaultValue:700,min:200,max:2e3,step:50}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"DecodeText\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./DecodeText.map"],"mappings":"+LAMmS,SAAwB,EAAW,CAAC,OAAK,gBAAgB,QAAM,UAAU,WAAS,KAAK,WAAS,IAAI,SAAO,CAAC,IAAM,EAAIA,EAAO,IAAI,EAAO,CAAC,EAAQ,GAAYC,EAAS,CAAI,EAAQ,EAAID,EAAO,EAAK,EAAgrB,OAA9qB,MAAc,CAAC,EAAW,CAAI,CAAE,EAAE,CAAC,CAAI,CAAC,EAAE,MAAc,CAAC,GAAG,GAAW,CAAC,EAAI,QAAQ,OAAO,IAAM,EAAG,EAAI,QAAc,EAAG,IAAI,sBAAsB,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,gBAAgB,EAAI,QAAQ,OAAO,EAAI,QAAQ,GAAK,EAAG,WAAW,EAAE,IAAM,EAAM,EAAK,MAAM,EAAE,EAAQ,EAAM,YAAY,IAAI,EAAQ,EAAK,GAAK,CAAC,IAAM,EAAE,KAAK,IAAI,GAAG,EAAI,GAAO,CAAQ,EAAQ,EAAS,KAAK,MAAM,EAAE,EAAM,MAAM,EAAE,EAAW,EAAM,KAAK,EAAE,IAAQ,EAAE,GAAU,IAAI,KAAK,IAAI,IAAW,EAAS,EAAM,KAAK,MAAM,KAAK,OAAO,EAAE,EAAY,EAAI,CAAC,CAAC,KAAK,EAAE,CAAC,EAAK,EAAE,EAAE,sBAAsB,CAAI,EAAO,EAAW,CAAI,CAAE,EAAE,sBAAsB,CAAI,CAAE,EAAE,CAAC,UAAU,EAAE,CAAC,EAAiB,OAAf,EAAG,QAAQ,CAAE,MAAY,EAAG,WAAW,CAAE,EAAE,CAAC,EAAK,CAAQ,CAAC,EAAsB,EAAK,OAAO,CAAK,MAAI,MAAM,CAAC,WAAW,EAAK,WAAW,IAAI,WAAS,cAAc,QAAQ,WAAW,IAAI,cAAc,YAAY,QAAM,WAAW,SAAS,QAAQ,eAAe,GAAG,CAAK,EAAE,SAAS,CAAO,CAAC,CAAE,uBAA70C,IAAiE,IAA6C,EAAO,EAAK,qCAA2C,EAAM,cAAoB,EAAU,EAAa,QAAQ,IAAI,EAAa,OAA+lC,EAAoB,EAAW,CAAC,KAAK,CAAC,KAAK,EAAY,OAAO,MAAM,OAAO,aAAa,eAAe,EAAE,MAAM,CAAC,KAAK,EAAY,MAAM,MAAM,QAAQ,aAAa,SAAS,EAAE,SAAS,CAAC,KAAK,EAAY,OAAO,MAAM,OAAO,aAAa,KAAK,IAAI,EAAE,IAAI,GAAG,KAAK,EAAE,EAAE,SAAS,CAAC,KAAK,EAAY,OAAO,MAAM,gBAAgB,aAAa,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC"}