{"version":3,"file":"RotatingText.eW7E__Os.mjs","names":["useRef"],"sources":["https:/framerusercontent.com/modules/ST7lvljdKJTDWcqihBPl/WjShf5PGFcyGoXHJOXHd/RotatingText.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import{useRef,useLayoutEffect}from\"react\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";/**\n * ROTATING TEXT — Framer port of the Osmo GSAP component.\n *\n * A heading with one word that cycles through a list. The word slides +\n * blurs up/out while its wrapper width animates. Crucially, the heading's\n * line breaks are frozen (each line becomes a nowrap block, like Osmo's\n * SplitText line masks) so a longer word never snaps to a new line — the\n * line just slides + re-centres smoothly. No dependencies.\n *\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight auto\n */// --- Easing -------------------------------------------------------------\nfunction cubicBezier(x1,y1,x2,y2){const cx=3*x1;const bx=3*(x2-x1)-cx;const ax=1-cx-bx;const cy=3*y1;const by=3*(y2-y1)-cy;const ay=1-cy-by;const sampleX=t=>((ax*t+bx)*t+cx)*t;const sampleY=t=>((ay*t+by)*t+cy)*t;const sampleDX=t=>(3*ax*t+2*bx)*t+cx;const solveX=x=>{let t=x;for(let i=0;i<8;i++){const err=sampleX(t)-x;if(Math.abs(err)<1e-6)return t;const d=sampleDX(t);if(Math.abs(d)<1e-6)break;t-=err/d;}let lo=0,hi=1;t=x;while(lo<hi){const err=sampleX(t)-x;if(Math.abs(err)<1e-6)break;if(err<0)lo=t;else hi=t;t=(lo+hi)/2;}return t;};return x=>sampleY(solveX(x));}const DEFAULT_EASE=cubicBezier(.625,.05,0,1);function parseEasing(str){if(!str)return DEFAULT_EASE;const s=String(str).trim().toLowerCase();if(s===\"linear\")return t=>t;const m=s.match(/cubic-bezier\\(\\s*(-?[\\d.]+)\\s*,\\s*(-?[\\d.]+)\\s*,\\s*(-?[\\d.]+)\\s*,\\s*(-?[\\d.]+)\\s*\\)/);if(m){const[x1,y1,x2,y2]=m.slice(1).map(Number);if([x1,y1,x2,y2].every(n=>Number.isFinite(n)))return cubicBezier(x1,y1,x2,y2);}return DEFAULT_EASE;}export default function RotatingText(props){const{tag,textBefore,words,textAfter,font,textAlign,textColor,highlightColor,stepDuration,inDuration,outDuration,easing,blurAmount,fadeDistance,descenderPad}=props;const list=(Array.isArray(words)?words:[]).map(w=>w==null?\"\":String(w)).filter(w=>w.trim().length>0);const rootRef=useRef(null);const activeRef=useRef(0);const isThumbnail=RenderTarget.current()===RenderTarget.thumbnail;const Tag=tag||\"h1\";const before=String(textBefore==null?\"\":textBefore);const afterRaw=String(textAfter==null?\"\":textAfter);useLayoutEffect(()=>{const root=rootRef.current;if(!root)return;const ease=parseEasing(easing);const blur=Math.max(0,Number(blurAmount)||0);const pad=Number(descenderPad)||0;// Fraction of the 150% travel over which a word fades + blurs.\n// Fade/blur are driven by POSITION (not time) so the word is always\n// fully invisible before the mask edge clips it — no \"cut\".\nconst fadeEnd=Math.min(1,Math.max(.05,Number(fadeDistance)||.5));// --- Build atoms (word spans + the rotating mask) ----------------\nconst makeWord=text=>{const el=document.createElement(\"span\");el.textContent=text// no white-space set → inherits from line/root\n;return el;};const atoms=[];before.split(/\\s+/).filter(Boolean).forEach(w=>atoms.push(makeWord(w+\" \")));let mask=null;let wordEls=[];const first=list[0]||\"\";if(list.length>0){mask=document.createElement(\"span\");Object.assign(mask.style,{position:\"relative\",display:\"inline-block\",verticalAlign:\"baseline\",whiteSpace:\"nowrap\",overflow:\"visible\"});const sizer=document.createElement(\"span\");sizer.style.visibility=\"hidden\";sizer.style.whiteSpace=\"nowrap\";sizer.textContent=first;mask.appendChild(sizer);const track=document.createElement(\"span\");Object.assign(track.style,{position:\"absolute\",top:\"0\",left:\"0\",right:\"0\",bottom:\"0\",overflowX:\"visible\",overflowY:\"clip\"});track.style.setProperty(\"overflow-clip-margin\",pad+\"em\");mask.appendChild(track);wordEls=list.map(w=>{const el=document.createElement(\"span\");Object.assign(el.style,{position:\"absolute\",top:\"0\",left:\"0\",display:\"inline-block\",whiteSpace:\"nowrap\",color:highlightColor,willChange:\"transform, opacity, filter\"});el.textContent=w;track.appendChild(el);return el;});atoms.push(mask);}const after=afterRaw.replace(/^\\s+/,\"\");if(after.length){const needLead=list.length>0&&!/^[.,;:!?)\\]}]/.test(after);const aWords=after.split(/\\s+/).filter(Boolean);aWords.forEach((w,i)=>{const lead=i===0&&needLead?\" \":\"\";const trail=i<aWords.length-1?\" \":\"\";atoms.push(makeWord(lead+w+trail));});}// --- Animation state ---------------------------------------------\nconst rafs=new Set;let stepTimer=null;let disposed=false;const animatingRef={current:false};let pendingRelayout=false;const setWord=(el,yPct)=>{const d=Math.min(1,Math.abs(yPct)/150)// 0 = home, 1 = fully off\n;const t=Math.min(1,d/fadeEnd)// reaches 1 (fully faded) at fadeEnd\n;const alpha=1-t;const blurPx=blur*t;el.style.transform=`translateY(${yPct}%)`;el.style.opacity=String(alpha);el.style.filter=blurPx>.01?`blur(${blurPx}px)`:\"none\";el.style.visibility=alpha<=.001?\"hidden\":\"visible\";};const tween=(duration,onUpdate,onComplete)=>{if(duration<=0){onUpdate(1);onComplete?.();return;}const start=performance.now();const frame=now=>{if(disposed)return;const p=Math.min((now-start)/1e3/duration,1);onUpdate(ease(p));if(p<1)rafs.add(requestAnimationFrame(frame));else onComplete?.();};rafs.add(requestAnimationFrame(frame));};activeRef.current=0;wordEls.forEach(el=>setWord(el,150));if(wordEls[0])setWord(wordEls[0],0);const measure=el=>el.getBoundingClientRect().width;const setMaskToActive=()=>{if(mask&&wordEls[activeRef.current])mask.style.width=measure(wordEls[activeRef.current])+\"px\";};// --- Line locking: freeze breaks into nowrap blocks (like Osmo) --\nconst relayout=()=>{// flatten atoms into root so they wrap naturally, then measure\nroot.replaceChildren(...atoms);setMaskToActive();const cs=getComputedStyle(root);const fontPx=parseFloat(cs.fontSize)||16;let lhPx=cs.lineHeight===\"normal\"?fontPx*1.2:parseFloat(cs.lineHeight);if(!lhPx||isNaN(lhPx))lhPx=fontPx*1.2;const tol=lhPx*.5;const groups=[];let cur=null;let curTop=0;atoms.forEach(a=>{const top=a.getBoundingClientRect().top;if(cur===null||top-curTop>tol){cur=[];groups.push(cur);curTop=top;}cur.push(a);});const lines=groups.map(g=>{const line=document.createElement(\"span\");Object.assign(line.style,{display:\"block\",whiteSpace:\"nowrap\",paddingBottom:\"0.1em\",marginBottom:\"-0.1em\"});g.forEach(a=>line.appendChild(a));return line;});root.replaceChildren(...lines);};const showNext=()=>{if(disposed||!mask||wordEls.length<2)return;const next=(activeRef.current+1)%wordEls.length;const prev=wordEls[activeRef.current];const cur=wordEls[next];const from=mask.getBoundingClientRect().width;const to=measure(cur);animatingRef.current=true;tween(inDuration,p=>{if(mask)mask.style.width=from+(to-from)*p+\"px\";});if(prev!==cur){tween(outDuration,p=>setWord(prev,-150*p));}tween(inDuration,p=>setWord(cur,150-150*p),()=>{animatingRef.current=false;if(pendingRelayout){pendingRelayout=false;relayout();}});activeRef.current=next;stepTimer=setTimeout(showNext,stepDuration*1e3);};relayout();// re-freeze lines when width changes (font-load / breakpoint / resize)\nlet lastW=root.getBoundingClientRect().width;const ro=new ResizeObserver(()=>{const w=root.getBoundingClientRect().width;if(Math.abs(w-lastW)<.5)return;lastW=w;if(animatingRef.current)pendingRelayout=true;else relayout();});ro.observe(root);if(document.fonts?.ready){document.fonts.ready.then(()=>{if(!disposed&&!animatingRef.current)relayout();});}if(!isThumbnail&&wordEls.length>1){stepTimer=setTimeout(showNext,stepDuration*1e3);}return()=>{disposed=true;rafs.forEach(id=>cancelAnimationFrame(id));rafs.clear();if(stepTimer)clearTimeout(stepTimer);ro.disconnect();};},[list.join(\"\\x01\"),before,afterRaw,JSON.stringify(font||{}),textAlign,textColor,highlightColor,easing,blurAmount,fadeDistance,descenderPad,stepDuration,inDuration,outDuration,isThumbnail]);// Single stable child = SSR/thumbnail fallback; the effect replaces it.\nconst fallback=(before.length&&!/\\s$/.test(before)?before+\" \":before)+(list[0]||\"\")+afterRaw;return /*#__PURE__*/_jsx(Tag,{ref:rootRef,style:{margin:0,width:\"100%\",textAlign,color:textColor,...font||{}},children:/*#__PURE__*/_jsx(\"span\",{children:fallback})});}RotatingText.displayName=\"Rotating Text\";addPropertyControls(RotatingText,{tag:{type:ControlType.Enum,title:\"Tag\",options:[\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"p\",\"div\"],defaultValue:\"h1\"},textBefore:{type:ControlType.String,title:\"Before\",defaultValue:\"The lead-generation CRM for\",displayTextArea:true},words:{type:ControlType.Array,title:\"Words\",control:{type:ControlType.String},defaultValue:[\"routines\",\"tools\",\"systems\",\"help\"]},textAfter:{type:ControlType.String,title:\"After\",defaultValue:\"\",displayTextArea:true},font:{type:ControlType.Font,title:\"Font\",controls:\"extended\",defaultValue:{fontSize:64,fontWeight:500,lineHeight:1,letterSpacing:\"-0.02em\"}},textAlign:{type:ControlType.Enum,title:\"Align\",options:[\"left\",\"center\",\"right\"],optionTitles:[\"Left\",\"Center\",\"Right\"],defaultValue:\"left\",displaySegmentedControl:true},textColor:{type:ControlType.Color,title:\"Text\",defaultValue:\"#111111\"},highlightColor:{type:ControlType.Color,title:\"Highlight\",defaultValue:\"#4B4BF7\"},stepDuration:{type:ControlType.Number,title:\"Hold\",min:.2,max:10,step:.05,unit:\"s\",defaultValue:1.75},inDuration:{type:ControlType.Number,title:\"In\",min:.05,max:4,step:.05,unit:\"s\",defaultValue:.75},outDuration:{type:ControlType.Number,title:\"Out\",min:.05,max:4,step:.05,unit:\"s\",defaultValue:.6},easing:{type:ControlType.String,title:\"Ease\",defaultValue:\"cubic-bezier(0.625, 0.05, 0, 1)\",placeholder:\"cubic-bezier(…) or linear\"},blurAmount:{type:ControlType.Number,title:\"Blur\",min:0,max:40,step:.5,unit:\"px\",defaultValue:4,description:\"Max blur on words as they move in/out (0 = off)\"},fadeDistance:{type:ControlType.Number,title:\"Fade\",min:.2,max:1,step:.05,defaultValue:.5,description:\"How much of the travel the fade/blur spans — lower fades sooner, avoiding the clip 'cut'\"},descenderPad:{type:ControlType.Number,title:\"Clip Pad\",min:0,max:.5,step:.01,unit:\"em\",defaultValue:.12,description:\"Room for ascenders/descenders before vertical clipping\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"RotatingText\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./RotatingText.map"],"mappings":"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"}