{"version":3,"file":"ScrollText.DiPyqEMY.mjs","names":["useRef","useState"],"sources":["https:/framerusercontent.com/modules/ljaprGpU1dSm88orjAGY/yyDE9CUwGqHyLHxDEPWT/ScrollText.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import{useRef,useEffect,useState}from\"react\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";export default function StickyBlurReveal(props){const{text=\"\",color,font,fontSize,lineHeight,fullRevealDistance,initialBlur,initialOpacity,initialScale,verticalOffset,perspective,rotateX,revealMode,letterSpacing,topOffset=0}=props;const containerRef=useRef(null);// Dividimos el texto en unidades (palabras o letras)\nconst textUnits=revealMode===\"word\"?text.match(/\\S+|\\s+/g)||[]:text.split(\"\");const[scrollProgress,setScrollProgress]=useState(0);const[isVisible,setIsVisible]=useState(false);const isCanvas=RenderTarget.current()===RenderTarget.canvas;useEffect(()=>{if(isCanvas)return;let startPosition=0;let endPosition=0;let containerHeight=0;const observer=new IntersectionObserver(([entry])=>{if(entry.isIntersecting){setIsVisible(true);const rect=entry.boundingClientRect;startPosition=window.scrollY+rect.top;containerHeight=rect.height;endPosition=startPosition+fullRevealDistance;handleScroll();}else{setIsVisible(false);}},{threshold:[0]});if(containerRef.current){observer.observe(containerRef.current);}const handleScroll=()=>{if(!isVisible)return;const currentScroll=window.scrollY;const elementTop=startPosition-currentScroll;const visibleHeight=window.innerHeight-elementTop;// Calcula el progreso de 0 a 1 en base a la distancia que se ha scrolleado\nconst progress=(visibleHeight-containerHeight)/(fullRevealDistance-containerHeight);setScrollProgress(Math.max(0,Math.min(1,progress)));};window.addEventListener(\"scroll\",handleScroll,{passive:true});return()=>{window.removeEventListener(\"scroll\",handleScroll);if(containerRef.current){observer.unobserve(containerRef.current);}};},[fullRevealDistance,isCanvas,isVisible]);return /*#__PURE__*/_jsx(\"div\",{ref:containerRef,style:{position:\"sticky\",top:`${topOffset}px`,color:color,fontFamily:font?.fontFamily,fontWeight:font?.fontWeight,fontSize:`${fontSize}px`,lineHeight:lineHeight,opacity:isVisible||isCanvas?1:0,perspective:`${perspective}px`,letterSpacing:`${letterSpacing}px`},children:textUnits.map((unit,index)=>{// Cada unidad (palabra o letra) se anima individualmente\nconst unitProgress=isCanvas?1:(scrollProgress-index/textUnits.length)*textUnits.length;const progress=Math.max(0,Math.min(1,unitProgress));const blurAmount=initialBlur*(1-progress);const opacity=initialOpacity+(1-initialOpacity)*progress;const scale=initialScale+(1-initialScale)*progress;const yOffset=verticalOffset*(1-progress);const xRotation=rotateX*(1-progress);return /*#__PURE__*/_jsx(\"span\",{style:{display:\"inline-block\",whiteSpace:\"pre\",filter:`blur(${blurAmount}px)`,opacity:opacity,transform:`scale(${scale}) translateY(${yOffset}px) rotateX(${xRotation}deg)`,transition:\"filter 0.2s ease-out, opacity 0.2s ease-out, transform 0.2s ease-out\"},children:unit},index);})});}StickyBlurReveal.defaultProps={text:\"This text unblurs and fades in word by word as you scroll\",color:\"#000000\",font:{fontFamily:\"Inter\",fontWeight:400},fontSize:24,lineHeight:1.5,fullRevealDistance:1e3,initialBlur:3,initialOpacity:.1,initialScale:.8,verticalOffset:20,perspective:1e3,rotateX:45,revealMode:\"word\",letterSpacing:0,topOffset:0};addPropertyControls(StickyBlurReveal,{text:{type:ControlType.String,title:\"Text\",displayTextArea:true},color:{type:ControlType.Color,title:\"Color\"},font:{type:ControlType.Font,title:\"Font\"},fontSize:{type:ControlType.Number,title:\"Font Size\",min:1,max:100},lineHeight:{type:ControlType.Number,title:\"Line Height\",min:.5,max:3,step:.1},fullRevealDistance:{type:ControlType.Number,title:\"Full Reveal Distance\",min:100,max:5e3,step:10},initialBlur:{type:ControlType.Number,title:\"Initial Blur\",min:0,max:10,step:.5},initialOpacity:{type:ControlType.Number,title:\"Initial Opacity\",min:0,max:1,step:.05},initialScale:{type:ControlType.Number,title:\"Initial Scale\",min:.5,max:1,step:.05},verticalOffset:{type:ControlType.Number,title:\"Vertical Offset\",min:-100,max:100,step:1},perspective:{type:ControlType.Number,title:\"Perspective\",min:100,max:2e3,step:50},rotateX:{type:ControlType.Number,title:\"Rotate X\",min:-90,max:90,step:1},revealMode:{type:ControlType.Enum,title:\"Reveal Mode\",options:[\"word\",\"letter\"],optionTitles:[\"Word\",\"Letter\"]},letterSpacing:{type:ControlType.Number,title:\"Letter Spacing\",min:-5,max:10,step:.1},topOffset:{type:ControlType.Number,title:\"Top Offset\",min:0,max:500,step:1,displayStepper:true}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"StickyBlurReveal\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./ScrollText.map"],"mappings":"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"}