{"version":3,"file":"TextRise.uohnXRUX.mjs","names":["useRef","useCallback","__esmMin","init_npm_react_18_3_1","ne","init_ssg_sandbox_shims","window","c","J","ce","de","ensureStyle","STYLE_ID","s","split","root","b","block","walker","texts","total","step","i","frag","t","part","word","ch","base","line","LINE_GAP","letterRise","node","setRef","el","ref","inView","io","e","Component","props","withLetterRise","withLetterRiseInView","withTitleRise","init_TextRise","init_jsx_runtime"],"sources":["https:/framerusercontent.com/modules/I6M5Lh6ErlVxEbn48f5P/OrIXIq9e0v8EjLnWv4M8/TextRise.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import{forwardRef,useCallback,useEffect,useRef}from\"react\";// Le lettere salgono una alla volta da sotto la riga, come nel video motion del sito.\n// Ogni parola è una maschera (overflow clip): la lettera nasce sotto la linea, ruotata e appena sfocata,\n// e sale al suo posto. Le righe partono una dopo l'altra. Il testo resta lo stesso per SEO e screen reader.\nconst STYLE_ID=\"letter-rise\";function ensureStyle(){if(typeof document===\"undefined\"||document.getElementById(STYLE_ID))return;const s=document.createElement(\"style\");s.id=STYLE_ID;s.textContent=// Padding e margin negativi: la maschera lascia spazio ad apostrofi e discendenti (g, p) senza cambiare la riga.\n\".lr-w{display:inline-block;overflow:clip;padding:.12em 0 .2em;margin:-.12em 0 -.2em;vertical-align:top}\"+\".lr-c{display:inline-block;transform-origin:0 100%;animation:lr-in .75s cubic-bezier(.16,1,.3,1) var(--lr-d,0s) both}\"+\".lr-wait .lr-c{animation-play-state:paused}\"+\"@keyframes lr-in{0%{translate:0 110%;rotate:9deg;opacity:0;filter:blur(3px)}35%{opacity:1}100%{translate:0 0;rotate:0deg;opacity:1;filter:blur(0)}}\";document.head.appendChild(s);}// Una riga dura al massimo mezzo secondo: le righe lunghe hanno lettere più fitte.\nconst LINE_GAP=.45;function split(root,base){const blocks=Array.from(root.querySelectorAll(\"h1,h2,h3,h4,h5,h6,p\")).filter(b=>b.textContent?.trim());blocks.forEach((block,line)=>{block.setAttribute(\"aria-label\",block.textContent??\"\");const walker=document.createTreeWalker(block,NodeFilter.SHOW_TEXT);const texts=[];while(walker.nextNode())texts.push(walker.currentNode);const total=(block.textContent??\"\").replace(/\\s/g,\"\").length;const step=Math.min(.028,.5/Math.max(1,total));let i=0;texts.forEach(t=>{const frag=document.createDocumentFragment();(t.textContent??\"\").split(/(\\s+)/).forEach(part=>{if(!part)return;// Gli spazi restano testo: così le righe vanno a capo come prima.\nif(/^\\s+$/.test(part))return frag.appendChild(document.createTextNode(part));const word=document.createElement(\"span\");word.className=\"lr-w\";word.setAttribute(\"aria-hidden\",\"true\");for(const ch of part){const c=document.createElement(\"span\");c.className=\"lr-c\";c.textContent=ch;c.style.setProperty(\"--lr-d\",(base+line*LINE_GAP+i++*step).toFixed(3)+\"s\");word.appendChild(c);}frag.appendChild(word);});t.replaceWith(frag);});});}function letterRise(Component,inView,base){return /*#__PURE__*/forwardRef(function LetterRise(props,ref){const node=useRef(null);const setRef=useCallback(el=>{node.current=el;if(typeof ref===\"function\")ref(el);else if(ref)ref.current=el;},[ref]);useEffect(()=>{const el=node.current;if(!el||el.dataset.lr||window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches)return;el.dataset.lr=\"1\";ensureStyle();if(inView)el.classList.add(\"lr-wait\");split(el,base);if(!inView)return;// In pausa finché il titolo non è a metà in vista: il ritardo parte da lì.\nconst io=new IntersectionObserver(([e])=>{if(!e.isIntersecting)return;el.classList.remove(\"lr-wait\");io.disconnect();},{threshold:.5});io.observe(el);return()=>io.disconnect();},[]);return /*#__PURE__*/_jsx(Component,{...props,ref:setRef});});}// Hero: parte al caricamento, dopo il volo delle foto.\nexport function withLetterRise(Component){return letterRise(Component,false,.8);}// Titoli delle card: partono quando la card entra in vista.\nexport function withLetterRiseInView(Component){return letterRise(Component,true,.2);}// Titolo in cima alle pagine (About e progetti): parte al caricamento, insieme all'entrata della hero.\nexport function withTitleRise(Component){return letterRise(Component,false,.3);}\nexport const __FramerMetadata__ = {\"exports\":{\"withLetterRiseInView\":{\"type\":\"reactHoc\",\"name\":\"withLetterRiseInView\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withTitleRise\":{\"type\":\"reactHoc\",\"name\":\"withTitleRise\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withLetterRise\":{\"type\":\"reactHoc\",\"name\":\"withLetterRise\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./TextRise.map"],"mappings":"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"}