{"version":3,"file":"ScrollRevealText.DMd3jTiR.mjs","names":["useRef","useState","useMemo"],"sources":["https:/framerusercontent.com/modules/Ivn82YaFOfYI3tIkuGsA/ymLCSaN7wX7cJKeayNed/ScrollRevealText.js"],"sourcesContent":["// ═══════════════════════════════════════════════════════════════════════════\n// SCROLL REVEAL TEXT — LINES / WORDS / CHARACTERS ANIMATION\n// ═══════════════════════════════════════════════════════════════════════════\n//\n// WHAT THIS COMPONENT DOES:\n// A scroll-linked and on-load text reveal component that splits text into\n// lines, words, or characters, then animates each unit with staggered\n// opacity, color, blur, scale, and 3D transforms.\n//\n// WHY CODE IS REQUIRED:\n// - Per-character/word/line text splitting with individual animation.\n// - Masked line reveal (overflow hidden + translateY) requires DOM\n//   measurement and dynamic restructuring not possible natively.\n// - Real-time color interpolation via CSS color-mix per unit.\n// - Per-unit blur, scale, 3D perspective transforms during scroll.\n// - Stagger timing calculated per animation unit requires custom logic.\n// - Direct DOM manipulation via refs for 60FPS scroll performance.\n// - IntersectionObserver-gated animation to avoid off-screen CPU waste.\n//\n// KEY FEATURES:\n// - Split Modes: Lines (masked reveal), Words, or Characters.\n// - Trigger: Scroll-linked or On Load (fires when element appears).\n// - Staggered Reveal: Each unit delays after the previous for wave effect.\n// - Color Transition: Smooth CSS color-mix from hidden to revealed color.\n// - Blur Effect: Hidden text starts blurred and sharpens on reveal.\n// - Scale Entrance: Units grow from configurable scale to full size.\n// - 3D Perspective: Optional rotateX tilt with configurable perspective.\n// - HTML Tag: Semantic tag (h1-h6, p, div, span) for SEO/accessibility.\n// - Presets: 12 one-click presets + full Custom mode.\n// - Dark Mode: CSS color-mix respects Framer design tokens automatically.\n// - High Performance: Direct DOM updates, no React re-renders during anim.\n//\n// ═══════════════════════════════════════════════════════════════════════════\n// Created by AliThemes.com\n// Powered by Framer\n// ═══════════════════════════════════════════════════════════════════════════\nimport{jsx as _jsx}from\"react/jsx-runtime\";import{useRef,useEffect,useMemo,useState}from\"react\";import{addPropertyControls,ControlType,useIsStaticRenderer}from\"framer\";const DEFAULT_TEXT=\"Scroll down and watch each character come alive with smooth, staggered animation.\";const PRESETS={Default:{splitMode:\"Characters\",revealDirection:\"Left to Right\",stagger:.2,xOffset:7,yOffset:0,blur:0,rotateX:0,perspective:800,scale:1},\"Fade In Up\":{splitMode:\"Characters\",revealDirection:\"Left to Right\",stagger:.15,xOffset:0,yOffset:25,blur:0,rotateX:0,perspective:800,scale:1},\"Blur Reveal\":{splitMode:\"Characters\",revealDirection:\"Left to Right\",stagger:.2,xOffset:0,yOffset:0,blur:8,rotateX:0,perspective:800,scale:1},Cinematic:{splitMode:\"Characters\",revealDirection:\"Left to Right\",stagger:.12,xOffset:10,yOffset:20,blur:4,rotateX:0,perspective:800,scale:1},\"3D Flip\":{splitMode:\"Characters\",revealDirection:\"Left to Right\",stagger:.15,xOffset:0,yOffset:0,blur:2,rotateX:45,perspective:800,scale:1},\"Wave RTL\":{splitMode:\"Characters\",revealDirection:\"Right to Left\",stagger:.1,xOffset:5,yOffset:15,blur:0,rotateX:0,perspective:800,scale:1},Typewriter:{splitMode:\"Characters\",revealDirection:\"Left to Right\",stagger:.4,xOffset:0,yOffset:0,blur:0,rotateX:0,perspective:800,scale:1},\"Glitch Rise\":{splitMode:\"Characters\",revealDirection:\"Left to Right\",stagger:.08,xOffset:15,yOffset:40,blur:10,rotateX:30,perspective:600,scale:1},\"Soft Words\":{splitMode:\"Words\",revealDirection:\"Left to Right\",stagger:.3,xOffset:0,yOffset:12,blur:3,rotateX:0,perspective:800,scale:1},\"Cascade Down\":{splitMode:\"Characters\",revealDirection:\"Right to Left\",stagger:.12,xOffset:0,yOffset:-30,blur:5,rotateX:-20,perspective:900,scale:1},\"Masked Lines\":{splitMode:\"Lines\",revealDirection:\"Left to Right\",stagger:.15,xOffset:0,yOffset:0,blur:0,rotateX:0,perspective:800,scale:1},\"Scale Pop\":{splitMode:\"Characters\",revealDirection:\"Left to Right\",stagger:.1,xOffset:0,yOffset:15,blur:2,rotateX:0,perspective:800,scale:.5}};/**\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight any\n */export default function ScrollRevealText(props){const containerRef=useRef(null);const spanRefs=useRef([]);const lineRefs=useRef([]);const isVisible=useRef(false);const rafId=useRef(0);const scheduled=useRef(false);const[lineGroups,setLineGroups]=useState(null);const isStatic=useIsStaticRenderer();const preset=props.preset!==\"Custom\"?PRESETS[props.preset]:null;const{text,font,colorHidden,colorRevealed,htmlTag,trigger,onLoadDuration,offsetStart,offsetEnd,style}=props;const splitMode=preset?.splitMode??props.splitMode;const revealDirection=preset?.revealDirection??props.revealDirection;const stagger=preset?.stagger??props.stagger;const xOffset=preset?.xOffset??props.xOffset;const yOffset=preset?.yOffset??props.yOffset;const blur=preset?.blur??props.blur;const rotateX=preset?.rotateX??props.rotateX;const perspective=preset?.perspective??props.perspective;const scale=preset?.scale??props.scale;const isLinesMode=splitMode===\"Lines\";// Build word groups and animation unit indices\nconst{allSpans,unitCount,wordGroups}=useMemo(()=>{const tokens=String(text).split(/(\\s+)/);const spans=[];let unitIdx=0;tokens.forEach(token=>{const isSpace=/^\\s+$/.test(token);const chars=Array.from(token);if(isSpace){chars.forEach(ch=>spans.push({char:ch,unit:-1,isSpace:true}));}else if(splitMode===\"Words\"||splitMode===\"Lines\"){const idx=unitIdx++;chars.forEach(ch=>spans.push({char:ch,unit:idx,isSpace:false}));}else{chars.forEach(ch=>spans.push({char:ch,unit:unitIdx++,isSpace:false}));}});const groups=[];let current=null;spans.forEach((span,i)=>{if(span.isSpace){if(current){groups.push(current);current=null;}groups.push({type:\"space\",spans:[{...span,idx:i}]});}else{if(!current)current={type:\"word\",spans:[]};current.spans.push({...span,idx:i});}});if(current)groups.push(current);if(revealDirection===\"Right to Left\"&&!isLinesMode){const max=unitIdx-1;spans.forEach(s=>{if(!s.isSpace)s.unit=max-s.unit;});}return{allSpans:spans,unitCount:unitIdx,wordGroups:groups};},[text,splitMode,revealDirection,isLinesMode]);// Lines mode: detect line breaks after render\nuseEffect(()=>{if(!isLinesMode||isStatic){if(lineGroups!==null)setLineGroups(null);return;}const detect=()=>{const container=containerRef.current;if(!container)return;const wordEls=container.querySelectorAll(\"[data-wg]\");if(wordEls.length===0)return;const positions=[];wordEls.forEach(el=>{positions.push({gi:parseInt(el.dataset.wg),top:Math.round(el.getBoundingClientRect().top)});});const lineWordGis=[];let currentLine=[];let lastTop=-Infinity;positions.forEach(({gi,top})=>{if(currentLine.length>0&&Math.abs(top-lastTop)>3){lineWordGis.push([...currentLine]);currentLine=[];}currentLine.push(gi);lastTop=top;});if(currentLine.length>0)lineWordGis.push([...currentLine]);const lines=lineWordGis.map((wordGis,li)=>{const start=wordGis[0];const end=li<lineWordGis.length-1?lineWordGis[li+1][0]:wordGroups.length;return Array.from({length:end-start},(_,k)=>start+k);});if(revealDirection===\"Right to Left\")lines.reverse();setLineGroups(lines);};requestAnimationFrame(()=>requestAnimationFrame(detect));},[text,splitMode,revealDirection,font,isLinesMode,wordGroups.length]);// ── Animation engine ───────────────────────────────────────────────────\nuseEffect(()=>{const container=containerRef.current;if(!container)return;if(isLinesMode&&!lineGroups)return;const totalUnits=isLinesMode?lineGroups.length:unitCount;if(totalUnits===0)return;if(!isLinesMode){spanRefs.current=spanRefs.current.slice(0,allSpans.length);}const dur=.7;const totalTime=dur+(totalUnits-1)*stagger;const applyProgress=scrollP=>{const time=scrollP*totalTime;if(isLinesMode){lineRefs.current.forEach((el,lineIdx)=>{if(!el)return;const p=totalUnits<=1?scrollP:Math.max(0,Math.min(1,(time-lineIdx*stagger)/dur));const ty=((1-p)*100).toFixed(1);let tf=`translateY(${ty}%)`;if(rotateX!==0){tf=`perspective(${perspective}px) rotateX(${(rotateX*(1-p)).toFixed(1)}deg) ${tf}`;}if(scale<1){tf+=` scale(${(scale+(1-scale)*p).toFixed(3)})`;}el.style.transform=tf;el.style.opacity=`${.3+p*.7}`;el.style.filter=blur>0?`blur(${(blur*(1-p)).toFixed(1)}px)`:\"\";const pct=Math.round(p*100);el.style.color=`color-mix(in srgb, ${colorRevealed} ${pct}%, ${colorHidden})`;});}else{spanRefs.current.forEach((el,i)=>{if(!el)return;const span=allSpans[i];if(!span||span.isSpace)return;const p=totalUnits<=1?scrollP:Math.max(0,Math.min(1,(time-span.unit*stagger)/dur));el.style.opacity=`${.3+p*.7}`;const tx=(-xOffset+xOffset*p).toFixed(1);const ty=(yOffset*(1-p)).toFixed(1);let tf=\"\";if(rotateX!==0){tf=`perspective(${perspective}px) rotateX(${(rotateX*(1-p)).toFixed(1)}deg) `;}tf+=`translateX(${tx}px) translateY(${ty}px)`;if(scale<1){tf+=` scale(${(scale+(1-scale)*p).toFixed(3)})`;}el.style.transform=tf;el.style.filter=blur>0?`blur(${(blur*(1-p)).toFixed(1)}px)`:\"\";const pct=Math.round(p*100);el.style.color=`color-mix(in srgb, ${colorRevealed} ${pct}%, ${colorHidden})`;});}};// Framer canvas: show text fully visible, skip animation\nif(isStatic){applyProgress(1);return;}if(trigger===\"On Load\"){let started=false;applyProgress(0);const startAnimation=()=>{if(started)return;started=true;const startTime=performance.now();const animate=now=>{const elapsed=(now-startTime)/1e3;const rawP=Math.min(1,elapsed/onLoadDuration);applyProgress(1-Math.pow(1-rawP,3));if(rawP<1)rafId.current=requestAnimationFrame(animate);};rafId.current=requestAnimationFrame(animate);};const observer=new IntersectionObserver(([entry])=>{if(entry.isIntersecting){observer.disconnect();startAnimation();}},{threshold:.1});observer.observe(container);return()=>{observer.disconnect();cancelAnimationFrame(rafId.current);};}// Scroll-based animation\nconst startFrac=offsetStart/100;const endFrac=offsetEnd/100;const update=()=>{const vh=window.innerHeight;const rect=container.getBoundingClientRect();const range=(startFrac-endFrac)*vh;let scrollP;if(isLinesMode){scrollP=1;if(range>0){scrollP=Math.max(0,Math.min(1,(startFrac*vh-rect.top)/range));if(scrollP===0&&rect.top<vh&&rect.bottom>0)scrollP=1;}}else{if(range<=0)return;scrollP=Math.max(0,Math.min(1,(startFrac*vh-rect.top)/range));}applyProgress(scrollP);};const observer=new IntersectionObserver(([entry])=>{isVisible.current=entry.isIntersecting;if(entry.isIntersecting)update();},{rootMargin:\"200px\"});observer.observe(container);const onScroll=()=>{if(!isVisible.current||scheduled.current)return;scheduled.current=true;rafId.current=requestAnimationFrame(()=>{update();scheduled.current=false;});};window.addEventListener(\"scroll\",onScroll,{passive:true});window.addEventListener(\"resize\",onScroll);update();return()=>{observer.disconnect();cancelAnimationFrame(rafId.current);window.removeEventListener(\"scroll\",onScroll);window.removeEventListener(\"resize\",onScroll);};},[allSpans,unitCount,lineGroups,isLinesMode,isStatic,stagger,xOffset,yOffset,blur,rotateX,perspective,scale,trigger,onLoadDuration,offsetStart,offsetEnd,colorHidden,colorRevealed]);// ── Render ─────────────────────────────────────────────────────────────\nconst Tag=htmlTag||\"div\";const containerStyle={display:\"inline-block\",...font,...style};const renderWordGroup=(group,gi)=>{if(group.type===\"word\"){return /*#__PURE__*/_jsx(\"span\",{\"data-wg\":gi,style:{whiteSpace:\"nowrap\",display:\"inline\"},children:group.spans.map(({char,idx})=>/*#__PURE__*/_jsx(\"span\",{ref:el=>{spanRefs.current[idx]=el;},style:{display:\"inline-block\",willChange:isLinesMode?undefined:\"transform, opacity, color, filter\"},children:char},idx))},`w-${gi}`);}return group.spans.map(({char,idx})=>/*#__PURE__*/_jsx(\"span\",{style:{display:\"inline-block\"},children:char===\" \"?\"\\xa0\":char},idx));};// Lines mode with detected lines → render with overflow-hidden wrappers\nif(isLinesMode&&lineGroups){return /*#__PURE__*/_jsx(Tag,{ref:containerRef,style:containerStyle,children:lineGroups.map((groupIndices,lineIdx)=>/*#__PURE__*/_jsx(\"div\",{style:{overflow:\"hidden\",display:\"block\"},children:/*#__PURE__*/_jsx(\"div\",{ref:el=>{lineRefs.current[lineIdx]=el;},style:{display:\"block\",willChange:\"transform, opacity, filter\"},children:groupIndices.map(gi=>renderWordGroup(wordGroups[gi],gi))})},lineIdx))});}// Characters / Words mode (or Lines measurement phase)\nreturn /*#__PURE__*/_jsx(Tag,{ref:containerRef,style:containerStyle,children:wordGroups.map((group,gi)=>renderWordGroup(group,gi))});}// ── Defaults ───────────────────────────────────────────────────────────────\nScrollRevealText.defaultProps={preset:\"Default\",text:DEFAULT_TEXT,font:{fontFamily:\"Inter\",fontWeight:600,fontSize:62,lineHeight:\"1.4em\",letterSpacing:\"-0.02em\"},colorHidden:\"#9ca3af\",colorRevealed:\"#111827\",htmlTag:\"div\",trigger:\"Scroll\",onLoadDuration:1.5,splitMode:\"Characters\",revealDirection:\"Left to Right\",stagger:.2,xOffset:7,yOffset:0,blur:0,rotateX:0,perspective:800,scale:1,offsetStart:80,offsetEnd:20};// ── Property Controls ──────────────────────────────────────────────────────\nconst isCustom=p=>p.preset===\"Custom\";addPropertyControls(ScrollRevealText,{preset:{type:ControlType.Enum,title:\"Preset\",defaultValue:\"Default\",options:[\"Default\",\"Fade In Up\",\"Blur Reveal\",\"Cinematic\",\"3D Flip\",\"Wave RTL\",\"Typewriter\",\"Glitch Rise\",\"Soft Words\",\"Cascade Down\",\"Masked Lines\",\"Scale Pop\",\"Custom\"]},text:{type:ControlType.String,title:\"Content\",defaultValue:DEFAULT_TEXT,displayTextArea:true},font:{type:ControlType.Font,title:\"Font\",controls:\"extended\",defaultFontType:\"sans-serif\",defaultValue:{fontSize:\"62px\",fontWeight:600,letterSpacing:\"-0.02em\",lineHeight:\"1.4em\"}},htmlTag:{type:ControlType.Enum,title:\"HTML Tag\",defaultValue:\"div\",options:[\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"p\",\"div\",\"span\"],optionTitles:[\"H1\",\"H2\",\"H3\",\"H4\",\"H5\",\"H6\",\"P\",\"DIV\",\"SPAN\"]},// ── Colors ─────────────────────────────────────────────────────────────\ncolorRevealed:{type:ControlType.Color,title:\"Color\",defaultValue:\"#111827\"},colorHidden:{type:ControlType.Color,title:\"Hidden Color\",defaultValue:\"#9ca3af\"},// ── Trigger ────────────────────────────────────────────────────────────\ntrigger:{type:ControlType.Enum,title:\"Trigger\",defaultValue:\"Scroll\",options:[\"Scroll\",\"On Load\"],displaySegmentedControl:true},onLoadDuration:{type:ControlType.Number,title:\"Duration\",defaultValue:1.5,min:.3,max:5,step:.1,unit:\"s\",hidden:p=>p.trigger!==\"On Load\"},// ── Animation (Custom only) ────────────────────────────────────────────\nsplitMode:{type:ControlType.Enum,title:\"Split\",options:[\"Characters\",\"Words\",\"Lines\"],defaultValue:\"Characters\",hidden:p=>!isCustom(p)},revealDirection:{type:ControlType.Enum,title:\"Direction\",options:[\"Left to Right\",\"Right to Left\"],defaultValue:\"Left to Right\",displaySegmentedControl:true,hidden:p=>!isCustom(p)},stagger:{type:ControlType.Number,title:\"Stagger\",defaultValue:.2,min:0,max:1,step:.05,hidden:p=>!isCustom(p)},xOffset:{type:ControlType.Number,title:\"X Offset\",defaultValue:7,min:0,max:30,step:1,hidden:p=>!isCustom(p)},yOffset:{type:ControlType.Number,title:\"Y Offset\",defaultValue:0,min:-50,max:50,step:1,description:\"Positive = fade in up, negative = fade in down\",hidden:p=>!isCustom(p)},scale:{type:ControlType.Number,title:\"Scale\",defaultValue:1,min:0,max:1,step:.05,description:\"Starting scale (1 = no scale animation)\",hidden:p=>!isCustom(p)},blur:{type:ControlType.Number,title:\"Blur\",defaultValue:0,min:0,max:20,step:.5,description:\"Blur on hidden text (0 = off)\",hidden:p=>!isCustom(p)},rotateX:{type:ControlType.Number,title:\"3D Rotate X\",defaultValue:0,min:-90,max:90,step:5,description:\"3D tilt angle (0 = off)\",hidden:p=>!isCustom(p)},perspective:{type:ControlType.Number,title:\"Perspective\",defaultValue:800,min:200,max:2e3,step:50,hidden:p=>!isCustom(p)||p.rotateX===0},// ── Scroll Trigger ─────────────────────────────────────────────────────\noffsetStart:{type:ControlType.Number,title:\"Start %\",defaultValue:80,min:0,max:100,unit:\"%\",description:\"Viewport position where reveal begins\",hidden:p=>p.trigger!==\"Scroll\"},offsetEnd:{type:ControlType.Number,title:\"End %\",defaultValue:20,min:0,max:100,unit:\"%\",description:\"Viewport position where reveal completes\",hidden:p=>p.trigger!==\"Scroll\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"ScrollRevealText\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerSupportedLayoutWidth\":\"any\",\"framerSupportedLayoutHeight\":\"any\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./ScrollRevealText.map"],"mappings":"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"}