{"version":3,"file":"Text_Scroll.Cru27RdR.mjs","names":["React.useRef","React.useState","React.Fragment","React.useMemo","RevealToken","RevealLine"],"sources":["https:/framerusercontent.com/modules/utgR9mF4xJtZnGPA2CIX/1l301Fv4rL3jrQSGHfyf/Text_Scroll.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import*as React from\"react\";import{motion,motionValue,useScroll,useTransform}from\"framer-motion\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";// ─── Utilities ──────────────────────────────────────────────────────────────\nfunction clamp01(n){return Math.max(0,Math.min(1,n));}/**\n * Detect Instagram, Facebook, TikTok, and other in-app browsers.\n * Also detects generic iOS WebViews (WKWebView without Safari identifier).\n */function detectWebViewEnv(){if(typeof navigator===\"undefined\")return{isLimitedWebView:false,isAnyMobile:false};const ua=navigator.userAgent||\"\";const isLimitedWebView=/Instagram/i.test(ua)||/FBAN|FBAV/i.test(ua)||/LinkedIn/i.test(ua)||/Twitter/i.test(ua)||/TikTok/i.test(ua)||/MicroMessenger/i.test(ua)||// Generic iOS WebView: has iPhone/iPad but NOT Safari\n/iPhone|iPad|iPod/i.test(ua)&&!/Safari/i.test(ua);const isAnyMobile=/iPhone|iPad|iPod|Android|webOS|BlackBerry|Opera Mini|IEMobile/i.test(ua);return{isLimitedWebView,isAnyMobile};}/**\n * ONE-WAY REVEAL: Once progress hits 1 it locks there permanently.\n * Scrolling back shows the text fully visible — no reverse animation.\n */function useOneWayProgress(source,enabled){const locked=React.useRef(false);const[lockedMotion]=React.useState(()=>motionValue(0));React.useEffect(()=>{if(!enabled)return;const unsub=source.on(\"change\",v=>{if(locked.current)return;if(v>=.995){// Threshold slightly below 1 for float precision\nlocked.current=true;lockedMotion.set(1);}else{lockedMotion.set(v);}});return unsub;},[source,enabled,lockedMotion]);return enabled?lockedMotion:source;}/**\n * Real viewport height — accounts for iOS Safari URL bar changes.\n * Uses visualViewport API which fires on URL bar show/hide.\n */function useViewportHeight(){const[vh,setVh]=React.useState(typeof window!==\"undefined\"?window.innerHeight:800);React.useEffect(()=>{if(typeof window===\"undefined\")return;const update=()=>setVh(window.innerHeight);update();window.addEventListener(\"resize\",update);window.visualViewport?.addEventListener(\"resize\",update);return()=>{window.removeEventListener(\"resize\",update);window.visualViewport?.removeEventListener(\"resize\",update);};},[]);return vh;}function useWindowWidth(){const[width,setWidth]=React.useState(typeof window!==\"undefined\"?window.innerWidth:1024);React.useEffect(()=>{if(typeof window===\"undefined\")return;let rafId;const handler=()=>{cancelAnimationFrame(rafId);rafId=requestAnimationFrame(()=>setWidth(window.innerWidth));};window.addEventListener(\"resize\",handler);return()=>{window.removeEventListener(\"resize\",handler);cancelAnimationFrame(rafId);};},[]);return width;}function normalizeFont(font){if(!font)return{};const s={};if(font.fontFamily)s.fontFamily=font.fontFamily;if(font.family)s.fontFamily=font.family;if(font.fontSize!=null)s.fontSize=font.fontSize;if(font.size!=null)s.fontSize=font.size;if(font.fontWeight!=null)s.fontWeight=font.fontWeight;if(font.weight!=null)s.fontWeight=font.weight;if(font.lineHeight!=null)s.lineHeight=font.lineHeight;if(font.letterSpacing!=null)s.letterSpacing=font.letterSpacing;if(font.textAlign)s.textAlign=font.textAlign;if(font.align)s.textAlign=font.align;if(font.alignment)s.textAlign=font.alignment;return s;}function tokenizeWordsOrLetters(raw,unit){const lines=(raw??\"\").split(\"\\n\");const out=[];let animIndex=0;for(let li=0;li<lines.length;li++){const line=lines[li];if(unit===\"Words\"){const words=line.trim()?line.trim().split(/\\s+/):[];for(let i=0;i<words.length;i++){out.push({kind:\"token\",value:words[i],animIndex});animIndex++;if(i!==words.length-1){out.push({kind:\"token\",value:\" \",animIndex:null});}}if(!words.length)out.push({kind:\"token\",value:\"\\xa0\",animIndex:null});}else{for(const ch of line){if(ch===\" \"){out.push({kind:\"token\",value:ch,animIndex:null});}else{out.push({kind:\"token\",value:ch,animIndex});animIndex++;}}if(!line.length)out.push({kind:\"token\",value:\"\\xa0\",animIndex:null});}if(li!==lines.length-1)out.push({kind:\"br\"});}return out;}function tokenizeLines(raw){const lines=(raw??\"\").split(\"\\n\");return lines.map((line,idx)=>({kind:\"line\",value:line,animIndex:idx}));}// ─── Standard renderer (desktop / capable browsers) ─────────────────────────\nconst RevealToken=/*#__PURE__*/React.memo(function RevealToken({value,animIndex,totalAnimated,progress,unit}){if(animIndex===null||totalAnimated<=0){if(unit===\"Letters\"){return /*#__PURE__*/_jsx(\"span\",{children:value===\" \"?\"\\xa0\":value});}return /*#__PURE__*/_jsx(\"span\",{children:value});}const start=animIndex/totalAnimated;const end=start+1/totalAnimated;const opacity=useTransform(progress,[start,end],[0,1]);return unit===\"Letters\"?/*#__PURE__*/_jsx(motion.span,{style:{opacity,display:\"inline-block\"},children:value===\" \"?\"\\xa0\":value}):/*#__PURE__*/_jsx(motion.span,{style:{opacity,display:\"inline\"},children:value});});const RevealLine=/*#__PURE__*/React.memo(function RevealLine({line,animIndex,totalLines,progress}){const denom=Math.max(1,totalLines);const start=animIndex/denom;const end=start+1/denom;const opacity=useTransform(progress,[start,end],[0,1]);return /*#__PURE__*/_jsx(motion.div,{style:{opacity,display:\"block\"},children:line.length?line:\"\\xa0\"});});// ─── Lightweight Mask renderer ──────────────────────────────────────────────\n// Single CSS mask-image = 1 GPU layer. Works everywhere.\nfunction MaskRevealHorizontal({progress,textContent}){const maskPos=useTransform(progress,[0,1],[\"100% 0%\",\"0% 0%\"]);return /*#__PURE__*/_jsx(motion.div,{style:{position:\"relative\",WebkitMaskImage:\"linear-gradient(to right, rgba(0,0,0,1) 0%, rgba(0,0,0,1) 40%, rgba(0,0,0,0) 55%, rgba(0,0,0,0) 100%)\",maskImage:\"linear-gradient(to right, rgba(0,0,0,1) 0%, rgba(0,0,0,1) 40%, rgba(0,0,0,0) 55%, rgba(0,0,0,0) 100%)\",WebkitMaskSize:\"300% 100%\",maskSize:\"300% 100%\",WebkitMaskPosition:maskPos,maskPosition:maskPos,WebkitMaskRepeat:\"no-repeat\",maskRepeat:\"no-repeat\"},children:textContent});}function MaskRevealVertical({progress,textContent}){const maskPos=useTransform(progress,[0,1],[\"0% 100%\",\"0% 0%\"]);return /*#__PURE__*/_jsx(motion.div,{style:{position:\"relative\",WebkitMaskImage:\"linear-gradient(to bottom, rgba(0,0,0,1) 0%, rgba(0,0,0,1) 40%, rgba(0,0,0,0) 55%, rgba(0,0,0,0) 100%)\",maskImage:\"linear-gradient(to bottom, rgba(0,0,0,1) 0%, rgba(0,0,0,1) 40%, rgba(0,0,0,0) 55%, rgba(0,0,0,0) 100%)\",WebkitMaskSize:\"100% 300%\",maskSize:\"100% 300%\",WebkitMaskPosition:maskPos,maskPosition:maskPos,WebkitMaskRepeat:\"no-repeat\",maskRepeat:\"no-repeat\"},children:textContent});}function MaskReveal({raw,progress,textColor,resolvedFontStyles,resolvedTextAlign,maxWidth,wordGapEm,unit,ghostEnabled,ghostColor,ghostOpacity}){const isLines=unit===\"Lines\";const textContent=raw.split(\"\\n\").map((line,i)=>/*#__PURE__*/_jsxs(React.Fragment,{children:[i>0&&/*#__PURE__*/_jsx(\"br\",{}),line.length?line:\"\\xa0\"]},`ml-${i}`));return /*#__PURE__*/_jsxs(\"div\",{style:{position:\"relative\",maxWidth,width:\"100%\",color:textColor,whiteSpace:\"pre-wrap\",textAlign:resolvedTextAlign,...unit===\"Words\"?{wordSpacing:`${wordGapEm}em`}:null,...resolvedFontStyles},children:[ghostEnabled&&/*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",top:0,left:0,width:\"100%\",pointerEvents:\"none\",opacity:ghostOpacity,color:ghostColor||textColor,whiteSpace:\"pre-wrap\",textAlign:resolvedTextAlign},children:textContent}),isLines?/*#__PURE__*/_jsx(MaskRevealVertical,{progress:progress,textContent:textContent}):/*#__PURE__*/_jsx(MaskRevealHorizontal,{progress:progress,textContent:textContent})]});}// ─── Ghost layer for standard renderer ──────────────────────────────────────\nfunction GhostLayer({raw,unit,textColor,ghostColor,ghostOpacity,textAlign}){const color=ghostColor||textColor;const content=unit===\"Lines\"?raw.split(\"\\n\").map((line,i)=>/*#__PURE__*/_jsx(\"div\",{children:line.length?line:\"\\xa0\"},`g-l-${i}`)):raw.split(\"\\n\").map((line,li)=>{const safeLine=unit===\"Words\"?line.trim()?line.trim().split(/\\s+/).join(\" \"):\"\\xa0\":line.length?line:\"\\xa0\";return /*#__PURE__*/_jsxs(React.Fragment,{children:[li>0&&/*#__PURE__*/_jsx(\"br\",{}),unit===\"Letters\"?[...safeLine].map((ch,i)=>/*#__PURE__*/_jsx(\"span\",{children:ch===\" \"?\"\\xa0\":ch},`g-c-${li}-${i}`)):safeLine]},`g-ln-${li}`);});return /*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",top:0,left:0,width:\"100%\",pointerEvents:\"none\",opacity:ghostOpacity,color,whiteSpace:\"pre-wrap\",textAlign},children:content});}// ─── Standard renderer content ──────────────────────────────────────────────\nfunction StandardRevealContent({raw,unit,progress,textColor,resolvedFontStyles,resolvedTextAlign,maxWidth,wordGapEm,ghostEnabled,ghostColor,ghostOpacity}){const wordOrLetterTokens=React.useMemo(()=>{if(unit===\"Words\"||unit===\"Letters\")return tokenizeWordsOrLetters(raw,unit);return[];},[raw,unit]);const totalAnimated=React.useMemo(()=>{let max=-1;for(const t of wordOrLetterTokens){if(t.kind===\"token\"&&t.animIndex!==null)max=Math.max(max,t.animIndex);}return max+1;},[wordOrLetterTokens]);const lineTokens=React.useMemo(()=>{if(unit===\"Lines\")return tokenizeLines(raw);return[];},[raw,unit]);return /*#__PURE__*/_jsxs(\"div\",{style:{position:\"relative\",maxWidth,width:\"100%\",color:textColor,whiteSpace:\"pre-wrap\",textAlign:resolvedTextAlign,...unit===\"Words\"?{wordSpacing:`${wordGapEm}em`}:null,...resolvedFontStyles},children:[ghostEnabled&&/*#__PURE__*/_jsx(GhostLayer,{raw:raw,unit:unit,textColor:textColor,ghostColor:ghostColor,ghostOpacity:ghostOpacity,textAlign:resolvedTextAlign}),/*#__PURE__*/_jsx(\"div\",{style:{position:\"relative\"},children:unit===\"Lines\"?lineTokens.map((t,i)=>/*#__PURE__*/_jsx(RevealLine,{line:t.value,animIndex:t.animIndex,totalLines:lineTokens.length,progress:progress},`l-${i}`)):wordOrLetterTokens.map((t,i)=>t.kind===\"br\"?/*#__PURE__*/_jsx(\"br\",{},`br-${i}`):/*#__PURE__*/_jsx(RevealToken,{value:t.value,animIndex:t.animIndex,totalAnimated:totalAnimated,progress:progress,unit:unit},`t-${i}`))})]});}// ─── Main component ─────────────────────────────────────────────────────────\nexport default function StickyScrollRevealText(props){const{text,unit,font,textColor,sectionHeightVh,mobileSectionHeightVh,speed,alignY,stickyOffsetPx,maxWidth,paddingVw,wordGapEm,canvasPreview,canvasPreviewProgress,ghostEnabled,ghostOpacity,ghostColor,mobileFontSize,mobileBreakpoint,oneWayReveal,useLightRenderer}=props;const raw=typeof text===\"string\"?text:\"\";const containerRef=React.useRef(null);const windowWidth=useWindowWidth();const realVh=useViewportHeight();const isMobile=windowWidth<(mobileBreakpoint??768);// Detect environment once\nconst env=React.useMemo(()=>detectWebViewEnv(),[]);// Decide which renderer to use\nconst shouldUseMask=React.useMemo(()=>{if(useLightRenderer===\"Always Mask\")return true;if(useLightRenderer===\"Always Standard\")return false;if(useLightRenderer===\"Mask on Mobile\")return isMobile;// \"Auto\" — mask on limited WebViews OR any mobile device\n// Mobile devices generally benefit from the lighter renderer\nreturn env.isLimitedWebView||env.isAnyMobile;},[useLightRenderer,env,isMobile]);// Use reduced section height on mobile if configured\nconst effectiveHeightVh=isMobile&&mobileSectionHeightVh?mobileSectionHeightVh:sectionHeightVh;// Pixel height avoids iOS Safari vh recalculation\nconst sectionHeightPx=effectiveHeightVh/100*realVh;const{scrollYProgress}=useScroll({target:containerRef,offset:[\"start start\",\"end end\"]});const baseProgress=useTransform(scrollYProgress,v=>clamp01(v*(typeof speed===\"number\"?speed:1)));let isCanvas=false;try{isCanvas=RenderTarget.current()===RenderTarget.canvas;}catch(e){}const rawProgress=useTransform(baseProgress,v=>{if(!isCanvas)return v;if(canvasPreview===\"Off\")return v;if(canvasPreview===\"Custom\")return clamp01(canvasPreviewProgress);return 1;});// One-way reveal: once fully revealed, stays revealed\nconst progress=useOneWayProgress(rawProgress,oneWayReveal!==false);const fontStyles=React.useMemo(()=>normalizeFont(font),[font]);const resolvedFontStyles=React.useMemo(()=>{if(isMobile&&mobileFontSize!=null){return{...fontStyles,fontSize:mobileFontSize};}return fontStyles;},[fontStyles,isMobile,mobileFontSize]);const resolvedTextAlign=resolvedFontStyles.textAlign||\"center\";const justifyContent=resolvedTextAlign===\"left\"?\"flex-start\":resolvedTextAlign===\"right\"?\"flex-end\":\"center\";// Sticky positioning\nconst stickyStyle=React.useMemo(()=>{const base={position:\"sticky\",padding:`0 ${paddingVw}vw`,display:\"flex\",justifyContent,willChange:\"transform\",WebkitTransform:\"translateZ(0)\"};if(alignY===\"Top\"){base.top=`${stickyOffsetPx}px`;}else if(alignY===\"Bottom\"){base.top=`calc(100dvh - ${stickyOffsetPx}px)`;base.transform=\"translateY(-100%)\";}else{base.top=`calc(50dvh + ${stickyOffsetPx}px)`;base.transform=\"translateY(-50%)\";}return base;},[alignY,stickyOffsetPx,paddingVw,justifyContent]);return /*#__PURE__*/_jsx(\"section\",{ref:containerRef,style:{position:\"relative\",height:`${sectionHeightPx}px`,overflow:\"clip\",WebkitOverflowScrolling:\"touch\"},children:/*#__PURE__*/_jsx(\"div\",{style:stickyStyle,children:shouldUseMask?/*#__PURE__*/_jsx(MaskReveal,{raw:raw,progress:progress,textColor:textColor,resolvedFontStyles:resolvedFontStyles,resolvedTextAlign:resolvedTextAlign,maxWidth:maxWidth,wordGapEm:wordGapEm,unit:unit,ghostEnabled:ghostEnabled,ghostColor:ghostColor,ghostOpacity:ghostOpacity}):/*#__PURE__*/_jsx(StandardRevealContent,{raw:raw,unit:unit,progress:progress,textColor:textColor,resolvedFontStyles:resolvedFontStyles,resolvedTextAlign:resolvedTextAlign,maxWidth:maxWidth,wordGapEm:wordGapEm,ghostEnabled:ghostEnabled,ghostColor:ghostColor,ghostOpacity:ghostOpacity})})});}// ─── Framer Property Controls ───────────────────────────────────────────────\naddPropertyControls(StickyScrollRevealText,{text:{type:ControlType.String,title:\"Text\",displayTextArea:true,defaultValue:`Scroll-synced text reveal.\nWords, letters, or lines.\nSticky layout + alignment.`},unit:{type:ControlType.Enum,title:\"Reveal\",options:[\"Words\",\"Letters\",\"Lines\"],defaultValue:\"Words\"},font:{type:ControlType.Font,title:\"Font\",controls:\"extended\"},textColor:{type:ControlType.Color,title:\"Color\",defaultValue:\"#000000\"},// ─── Mobile ─────────────────────────────────────────────────────\nmobileFontSize:{type:ControlType.Number,title:\"Font Size Mobile\",defaultValue:28,min:8,max:120,step:1,description:\"Overrides the Font size on screens narrower than the breakpoint.\"},mobileBreakpoint:{type:ControlType.Number,title:\"Mobile Breakpoint (px)\",defaultValue:768,min:320,max:1280,step:1,description:\"Screens narrower than this value use Font Size Mobile.\"},// ─── Scroll ─────────────────────────────────────────────────────\nsectionHeightVh:{type:ControlType.Number,title:\"Section Height (vh)\",defaultValue:300,min:100,max:800,step:10},mobileSectionHeightVh:{type:ControlType.Number,title:\"Mobile Height (vh)\",defaultValue:200,min:100,max:600,step:10,description:\"Section height on mobile. Lower = less empty scroll. 0 = use desktop value.\"},speed:{type:ControlType.Number,title:\"Speed\",defaultValue:1,min:.25,max:3,step:.05},// ─── Behavior ───────────────────────────────────────────────────\noneWayReveal:{type:ControlType.Boolean,title:\"One-Way Reveal\",defaultValue:true,description:\"Once text is fully revealed, it stays visible on scroll-back.\"},useLightRenderer:{type:ControlType.Enum,title:\"Renderer\",options:[\"Auto\",\"Always Mask\",\"Always Standard\",\"Mask on Mobile\"],defaultValue:\"Auto\",description:\"Auto = mask on all mobile + WebViews, standard on desktop. 'Always Mask' = lightweight everywhere. 'Always Standard' = per-word opacity everywhere. 'Mask on Mobile' = mask below breakpoint only.\"},// ─── Layout ─────────────────────────────────────────────────────\nalignY:{type:ControlType.Enum,title:\"V Align\",options:[\"Top\",\"Center\",\"Bottom\"],displaySegmentedControl:true,defaultValue:\"Center\"},stickyOffsetPx:{type:ControlType.Number,title:\"Sticky Offset (px)\",defaultValue:0,min:0,max:300,step:1},maxWidth:{type:ControlType.Number,title:\"Max Width\",defaultValue:900,min:320,max:1600,step:10},paddingVw:{type:ControlType.Number,title:\"Side Padding (vw)\",defaultValue:5,min:0,max:12,step:.5},wordGapEm:{type:ControlType.Number,title:\"Word Gap (em)\",defaultValue:.25,min:0,max:1,step:.01,hidden(props){return props.unit!==\"Words\";}},// ─── Canvas ─────────────────────────────────────────────────────\ncanvasPreview:{type:ControlType.Enum,title:\"Canvas Preview\",options:[\"Full\",\"Custom\",\"Off\"],defaultValue:\"Full\"},canvasPreviewProgress:{type:ControlType.Number,title:\"Preview Progress\",defaultValue:1,min:0,max:1,step:.01,hidden(props){return props.canvasPreview!==\"Custom\";}},// ─── Ghost ──────────────────────────────────────────────────────\nghostEnabled:{type:ControlType.Boolean,title:\"Ghost\",defaultValue:false},ghostOpacity:{type:ControlType.Number,title:\"Ghost Opacity\",defaultValue:.25,min:0,max:1,step:.01,hidden(props){return!props.ghostEnabled;}},ghostColor:{type:ControlType.Color,title:\"Ghost Color\",defaultValue:\"rgba(0,0,0,0.35)\",hidden(props){return!props.ghostEnabled;}}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"StickyScrollRevealText\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Text_Scroll.map"],"mappings":"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"}