{"version":3,"file":"TextField.C6pVjWoR.mjs","names":["React.useRef","React.useState","React.useMemo","gsap","ScrollTrigger"],"sources":["https:/framerusercontent.com/modules/wQNq3fcepf3GSeB04idT/s4pNFz8t19Pok2BBGVVU/TextField.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import{addPropertyControls,ControlType}from\"framer\";import gsap from\"https://esm.sh/gsap\";import{ScrollTrigger}from\"https://esm.sh/gsap/ScrollTrigger\";import*as React from\"react\";gsap.registerPlugin(ScrollTrigger);const WEIGHTS={Thin:100,\"Extra Light\":200,Light:300,Regular:400,Medium:500,Semibold:600,Bold:700,\"Extra Bold\":800,Black:900,normal:400,bold:700};const normalizeWeight=value=>{if(typeof value===\"number\"||typeof value===\"undefined\")return value;const asNum=Number(value);if(!isNaN(asNum))return asNum;const w=WEIGHTS[value];if(typeof w===\"number\")return w;return value;};const normalizeFontSize=value=>{if(typeof value===\"number\"&&!isNaN(value))return value;if(typeof value===\"string\"&&value.trim()!==\"\"){const parsed=parseFloat(value);if(!isNaN(parsed))return parsed;}return undefined;};const normalizeLetterSpacing=value=>{if(typeof value===\"number\"||typeof value===\"undefined\")return value;if(/^[\\d.]+$/.test(value))return Number(value);return value;};function escapeHtml(str){return str.replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\").replace(/\"/g,\"&quot;\");}export default function TextField({text=\"Your text here\",font={},color=\"#2D2D2D\",lineBreak=false,scrollSection,scrollStart=0,triggerMode=\"scroll\",viewportAmount=.4,viewportOnce=true,duration=.8,stagger=.08,mode=\"once\"}){const maskRef=React.useRef(null);const[lineTexts,setLineTexts]=React.useState(null);const lastSplit=React.useRef(null);const styleKey=JSON.stringify(font??{});const textStyle=React.useMemo(()=>{return{color,fontFamily:font.fontFamily,fontSize:normalizeFontSize(font.fontSize)??32,fontWeight:normalizeWeight(font.fontWeight)??400,letterSpacing:normalizeLetterSpacing(font.letterSpacing),lineHeight:font.lineHeight??1.3,textAlign:font.textAlign};},[color,font]);React.useLayoutEffect(()=>{const mask=maskRef.current;if(!mask)return;let cancelled=false;let raf=0;const apply=lines=>{if(cancelled)return;const key=lines.join(\"\\n\");if(lastSplit.current===key)return;lastSplit.current=key;setLineTexts(lines);};const split=()=>{if(cancelled)return;const words=text.split(/\\s+/).filter(Boolean);if(words.length<=1){apply([text]);return;}const probe=document.createElement(\"div\");probe.style.cssText=\"position:absolute;visibility:hidden;pointer-events:none;left:0;top:0;right:0;\";Object.assign(probe.style,textStyle);probe.style.whiteSpace=lineBreak?\"pre-wrap\":\"normal\";probe.innerHTML=words.map(word=>`<span>${escapeHtml(word)}</span>`).join(\" \");mask.appendChild(probe);const spans=probe.querySelectorAll(\"span\");const tops=Array.from(spans).map(span=>Math.round(span.getBoundingClientRect().top));const groups=[];let current=[];let lastTop=tops[0]??0;tops.forEach((top,i)=>{if(i>0&&top!==lastTop){groups.push(current);current=[];}current.push(words[i]);lastTop=top;});groups.push(current);probe.remove();apply(groups.map(group=>group.join(\" \")));};const scheduleSplit=()=>{if(raf)return;raf=requestAnimationFrame(()=>{raf=0;split();});};scheduleSplit();const fonts=document.fonts;const onFontsDone=()=>scheduleSplit();if(fonts){void fonts.ready.then(onFontsDone);fonts.addEventListener(\"loadingdone\",onFontsDone);}window.addEventListener(\"resize\",scheduleSplit);return()=>{cancelled=true;if(raf)cancelAnimationFrame(raf);if(fonts)fonts.removeEventListener(\"loadingdone\",onFontsDone);window.removeEventListener(\"resize\",scheduleSplit);};},[text,styleKey,lineBreak,textStyle]);React.useEffect(()=>{const mask=maskRef.current;if(!mask)return;const lines=mask.querySelectorAll(\".tf-line\");if(lines.length===0){gsap.set(lines,{clearProps:\"all\"});return;}const animateIn=()=>gsap.to(lines,{y:0,duration,ease:\"power2.out\",stagger,overwrite:\"auto\"});const animateOut=()=>gsap.to(lines,{y:110,duration,ease:\"power2.in\",stagger,overwrite:\"auto\"});gsap.set(lines,{y:110});if(triggerMode===\"viewport\"){const threshold=Math.min(Math.max(viewportAmount??.4,0),1);let shown=false;const observer=new IntersectionObserver(entries=>{entries.forEach(entry=>{if(entry.isIntersecting){if(shown&&viewportOnce)return;shown=true;animateIn();if(viewportOnce)observer.disconnect();}else if(shown&&!viewportOnce&&mode===\"reverse\"){animateOut();}});},{threshold});observer.observe(mask);return()=>{observer.disconnect();gsap.killTweensOf(lines);gsap.set(lines,{clearProps:\"all\"});};}const section=scrollSection?.current;if(!section){gsap.set(lines,{clearProps:\"all\"});return;}const clamp=value=>Math.min(Math.max(value,0),200);const startLine=100-clamp(scrollStart??0);const trigger=ScrollTrigger.create({trigger:section,start:`top ${startLine}%`,onEnter:()=>animateIn(),...mode===\"reverse\"?{onLeaveBack:()=>animateOut()}:{}});return()=>{trigger.kill();gsap.killTweensOf(lines);gsap.set(lines,{clearProps:\"all\"});};},[triggerMode,scrollSection,scrollStart,viewportAmount,viewportOnce,duration,stagger,lineTexts,mode]);return /*#__PURE__*/_jsx(\"div\",{ref:maskRef,style:{position:\"relative\",width:\"100%\",overflow:\"hidden\",whiteSpace:lineBreak?\"pre-wrap\":\"normal\",...textStyle},children:(lineTexts??[text]).map((line,i)=>/*#__PURE__*/_jsx(\"div\",{style:{overflow:\"hidden\",width:\"100%\"},children:/*#__PURE__*/_jsx(\"div\",{className:\"tf-line\",style:textStyle,children:line})},i))});}addPropertyControls(TextField,{text:{type:ControlType.String,title:\"Text\",defaultValue:\"Your text here\"},font:{type:ControlType.Font,title:\"Text Style\",controls:\"extended\",displayTextAlignment:true,defaultFontType:\"sans-serif\",defaultValue:{fontSize:32,lineHeight:1.3,fontWeight:\"Regular\",textAlign:\"left\",letterSpacing:0}},color:{type:ControlType.Color,title:\"Text Color\",defaultValue:\"#2D2D2D\"},lineBreak:{type:ControlType.Boolean,title:\"Preserve Line Breaks\",defaultValue:false},scrollSection:{type:ControlType.ScrollSectionRef,title:\"Scroll Section\"},triggerMode:{type:ControlType.Enum,title:\"Trigger\",options:[\"scroll\",\"viewport\"],optionLabels:[\"Scroll Trigger\",\"Viewport\"],defaultValue:\"scroll\"},viewportAmount:{type:ControlType.Number,title:\"View Amount\",min:0,max:1,step:.05,defaultValue:.4},viewportOnce:{type:ControlType.Boolean,title:\"Animate Once\",defaultValue:true},scrollStart:{type:ControlType.Number,title:\"Scroll Start (%)\",min:0,max:200,step:1,defaultValue:0},mode:{type:ControlType.Enum,title:\"Animation Mode\",options:[\"once\",\"reverse\"],optionLabels:[\"Once\",\"Reverse\"],defaultValue:\"once\"},duration:{type:ControlType.Number,title:\"Duration (s)\",min:.1,max:3,step:.1,defaultValue:.8},stagger:{type:ControlType.Number,title:\"Line Stagger (s)\",min:0,max:1,step:.01,defaultValue:.08}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"TextField\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./TextField.map"],"mappings":"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"}