{"version":3,"file":"TextAnimator.Dux2pr--.mjs","names":["useMemo","useRef","useState","useLayoutEffect","useEffect"],"sources":["https:/framerusercontent.com/modules/lWFUjlOVgMTJwM5wMIKZ/YZFoOgUc6YdNHYboDlTp/TextAnimator.js"],"sourcesContent":["// © 2026 Ludovic Losco — https://www.framer.com/@ludovic-losco/\n// This component is licensed exclusively for use within this template.\n// It may not be copied, extracted, modified, redistributed, or resold\n// — whether standalone or as part of another project or template.\n// Unauthorized use constitutes a license violation.\nimport{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import*as React from\"react\";import{useRef,useEffect,useLayoutEffect,useState,useMemo}from\"react\";import{addPropertyControls,ControlType,RenderTarget,useIsStaticRenderer}from\"framer\";import{animate}from\"framer-motion\";// — TUNING CONSTANTS —\n// SSR-safe layout effect (avoids React's useLayoutEffect server warning).\nconst useIsomorphicLayoutEffect=typeof window!==\"undefined\"?useLayoutEffect:useEffect;const MIN_UNIT_DURATION=.05// seconds — floor for per-unit tweens\n;const RESPLIT_DEBOUNCE_MS=200// debounce for autoSplit revision bumps\n;const PREVIEW_LOOP_PAUSE_S=.8// pause between canvas preview loops\n;const SPLIT_RETRY_MAX_ATTEMPTS=4;const SPLIT_RETRY_BASE_MS=500// doubles each attempt\n;const SPLIT_RETRY_MAX_MS=8e3;// — MATH —\nfunction lerp(from,to,p){return from+(to-from)*p;}function solveCubicBezier(x1,y1,x2,y2){return x=>{if(x<=0)return 0;if(x>=1)return 1;let u=x;for(let i=0;i<8;i++){const xu=3*(1-u)*(1-u)*u*x1+3*(1-u)*u*u*x2+u*u*u-x;const dxu=3*(1-u)*(1-u)*x1+6*(1-u)*u*(x2-x1)+3*u*u*(1-x2);if(Math.abs(dxu)<1e-6)break;u-=xu/dxu;u=Math.max(0,Math.min(1,u));}return 3*(1-u)*(1-u)*u*y1+3*(1-u)*u*u*y2+u*u*u;};}// Named easings matching framer-motion's definitions — used when the\n// master clock applies easing per unit, and by scroll scrubbing.\nconst backOutEase=solveCubicBezier(.33,1.53,.69,.99);const backInEase=t=>1-backOutEase(1-t);const NAMED_EASINGS={linear:t=>t,easeIn:solveCubicBezier(.42,0,1,1),easeOut:solveCubicBezier(0,0,.58,1),easeInOut:solveCubicBezier(.42,0,.58,1),circIn:t=>1-Math.sqrt(Math.max(0,1-t*t)),circOut:t=>Math.sqrt(Math.max(0,1-(t-1)*(t-1))),circInOut:t=>t<.5?(1-Math.sqrt(Math.max(0,1-4*t*t)))/2:(Math.sqrt(Math.max(0,1-(2*t-2)**2))+1)/2,backIn:backInEase,backOut:backOutEase,backInOut:t=>t<.5?backInEase(2*t)/2:(backOutEase(2*t-1)+1)/2,anticipate:t=>t>=1?1:(t*=2)<1?.5*backInEase(t):.5*(2-Math.pow(2,-10*(t-1)))};function easingFnFromTransition(transition){const ease=transition?.ease;if(Array.isArray(ease)&&ease.length===4){return solveCubicBezier(ease[0],ease[1],ease[2],ease[3]);}if(typeof ease===\"string\"&&NAMED_EASINGS[ease]){return NAMED_EASINGS[ease];}return solveCubicBezier(.42,0,.58,1)// easeInOut fallback\n;}function computeDelay(i,n,stagger,direction){if(n<=1)return 0;const last=n-1;switch(direction){case\"reverse\":return(last-i)*stagger;case\"center\":{const center=last/2;return Math.abs(i-center)/center*last*stagger;}case\"edges\":{const center=last/2;return(center-Math.abs(i-center))/center*last*stagger;}case\"random\":{const hash=(i*2654435761>>>0)/4294967296;return hash*last*stagger;}default:return i*stagger;}}// — VIEWPORT & SCROLL —\nlet cachedVW=typeof window!==\"undefined\"?window.innerWidth:1920;let cachedVH=typeof window!==\"undefined\"?window.innerHeight:1080;let globalListenerRefs=0;function refreshViewport(){cachedVW=window.innerWidth;cachedVH=window.innerHeight;}let prefersReducedMotion=false;let reducedMotionMql=null;function onReducedMotionChange(e){prefersReducedMotion=e.matches;}function addGlobalListeners(){if(typeof window===\"undefined\")return;globalListenerRefs++;if(globalListenerRefs>1)return;// already set up\nwindow.addEventListener(\"resize\",refreshViewport);reducedMotionMql=window.matchMedia(\"(prefers-reduced-motion: reduce)\");prefersReducedMotion=reducedMotionMql.matches;reducedMotionMql.addEventListener(\"change\",onReducedMotionChange);}function removeGlobalListeners(){if(typeof window===\"undefined\")return;globalListenerRefs--;if(globalListenerRefs>0)return;// other instances still alive\nwindow.removeEventListener(\"resize\",refreshViewport);if(reducedMotionMql){reducedMotionMql.removeEventListener(\"change\",onReducedMotionChange);reducedMotionMql=null;}}// — SECTION ELEMENT RESOLVER —\n// Extracts the HTMLElement from a ControlType.ScrollSectionRef value.\n// The ref can be { current: HTMLElement }, a raw HTMLElement, or unresolved.\nfunction resolveSectionEl(scrollSectionRef){const raw=scrollSectionRef.current;const el=raw?.current??raw;return typeof HTMLElement!==\"undefined\"&&el instanceof HTMLElement?el:null;}// `refPx` is the reference size for %. This should be the element's own\n// width (for X) or height (for Y) so that 100% = one element size.\nfunction resolveUnit(value,unit,refPx){switch(unit){case\"%\":return value/100*refPx;case\"vw\":return value/100*cachedVW;case\"vh\":return value/100*cachedVH;default:return value// px\n;}}function viewportFraction(position){if(position===\"top\")return 0;if(position===\"bottom\")return 1;return .5;}function getScrollProgress(el,vpFraction){const rect=el.getBoundingClientRect();const vpY=cachedVH*vpFraction;const range=rect.bottom-rect.top;if(range<=0)return 1;let p=(vpY-rect.top)/range;// Elements near the end of the page may never reach the viewport line.\n// Shift their scrub window earlier by the unreachable deficit so the\n// animation keeps a full-length scrub and completes at maximum scroll.\nconst doc=document.documentElement;const remainingScroll=Math.max(0,doc.scrollHeight-cachedVH-(window.scrollY||doc.scrollTop||0));const pAtEnd=(vpY-(rect.top-remainingScroll))/range;if(pAtEnd<1)p+=1-pAtEnd;return Math.max(0,Math.min(1,p));}const colorParseCache=new Map;let colorParseCtx=null;function parseColor(input){if(typeof input!==\"string\")return null;// Framer token colors can carry a name comment:\n// var(--token-xxx, #fff) /* {\"name\":\"White\"} */\nconst str=input.replace(/\\/\\*[\\s\\S]*?\\*\\//g,\"\").trim();if(!str)return null;const cached=colorParseCache.get(str);if(cached!==undefined)return cached;let rgba=null;// Framer color tokens arrive as var(--token-xxx, <fallback>).\nconst varMatch=str.match(/^var\\([^,]+,\\s*(.+)\\)$/);if(varMatch){rgba=parseColor(varMatch[1]);}else{const m=str.match(/^rgba?\\(([^)]+)\\)$/);if(m){const parts=m[1].split(/[\\s,\\/]+/).filter(Boolean).map(parseFloat);if(parts.length>=3&&parts.every(v=>!Number.isNaN(v))){rgba=[parts[0],parts[1],parts[2],parts.length>3?parts[3]:1];}}else if(typeof document!==\"undefined\"){// Normalize hex/hsl/named colors via the canvas parser.\nif(!colorParseCtx){colorParseCtx=document.createElement(\"canvas\").getContext(\"2d\");}if(colorParseCtx){colorParseCtx.fillStyle=\"#010203\"// sentinel to detect invalid input\n;colorParseCtx.fillStyle=str;const norm=colorParseCtx.fillStyle;if(norm!==\"#010203\"||str.toLowerCase().includes(\"010203\")){rgba=norm.startsWith(\"#\")?[parseInt(norm.slice(1,3),16),parseInt(norm.slice(3,5),16),parseInt(norm.slice(5,7),16),1]:parseColor(norm);}}}}colorParseCache.set(str,rgba);return rgba;}function rgbaString(c){return`rgba(${c[0]},${c[1]},${c[2]},${c[3]})`;}function mixColors(a,b,p){// When one side is fully transparent, keep the visible side's RGB so\n// the fade doesn't pass through black.\nif(a[3]===0&&b[3]!==0)a=[b[0],b[1],b[2],0];else if(b[3]===0&&a[3]!==0)b=[a[0],a[1],a[2],0];const alpha=Math.round(lerp(a[3],b[3],p)*1e3)/1e3;return`rgba(${Math.round(lerp(a[0],b[0],p))},${Math.round(lerp(a[1],b[1],p))},${Math.round(lerp(a[2],b[2],p))},${alpha})`;}// Cascade color captured per unit BEFORE any inline color is written, so\n// a missing from/to side can fall back to the text's natural color.\nconst naturalColors=new WeakMap;function ensureNaturalColor(el){let nat=naturalColors.get(el);if(!nat){nat=parseColor(window.getComputedStyle(el).color)??[0,0,0,1];naturalColors.set(el,nat);}return nat;}// — ANIM STATE —\nconst DEFAULT_ANIM_STATE_RAW={opacity:1,scaleX:1,scaleY:1,blur:0,rotateX:0,rotateY:0,rotateZ:0,skewX:0,skewY:0};function resolveAnimState(raw){const uniformScale=raw?.scale??1;return{scaleX:raw?.scaleX??uniformScale,scaleY:raw?.scaleY??uniformScale,rotateX:raw?.rotateX??0,rotateY:raw?.rotateY??0,rotateZ:raw?.rotateZ??0,skewX:raw?.skewX??0,skewY:raw?.skewY??0,opacity:raw?.opacity??1,blur:raw?.blur??0,color:parseColor(raw?.color)};}function applyWordStyle(word,p,fromX,fromY,f,t){const x=lerp(fromX,0,p);const y=lerp(fromY,0,p);const sX=lerp(f.scaleX,t.scaleX,p);const sY=lerp(f.scaleY,t.scaleY,p);const rX=lerp(f.rotateX,t.rotateX,p);const rY=lerp(f.rotateY,t.rotateY,p);const rZ=lerp(f.rotateZ,t.rotateZ,p);const skX=lerp(f.skewX,t.skewX,p);const skY=lerp(f.skewY,t.skewY,p);const opacity=lerp(f.opacity,t.opacity,p);const blur=lerp(f.blur,t.blur,p);let tf=`translate3d(${x}px,${y}px,0)`;if(sX!==1||sY!==1)tf+=sX===sY?` scale(${sX})`:` scaleX(${sX}) scaleY(${sY})`;if(skX!==0||skY!==0)tf+=` skewX(${skX}deg) skewY(${skY}deg)`;if(rX!==0||rY!==0||rZ!==0)tf+=` rotateX(${rX}deg) rotateY(${rY}deg) rotateZ(${rZ}deg)`;word.style.transform=tf;word.style.opacity=String(opacity);if(blur>.01){word.style.filter=`blur(${blur}px)`;}else if(word.style.filter){word.style.removeProperty(\"filter\");}if(f.color||t.color){const nat=ensureNaturalColor(word);word.style.color=mixColors(f.color??nat,t.color??nat,p);}}function applyInitialStyle(span,offset,from,transformOrigin,display=\"inline-block\"){const xVal=offset?.xValue??0;const xUnit=offset?.xUnit??\"px\";const yVal=offset?.yValue??0;const yUnit=offset?.yUnit??\"px\";span.style.display=display;span.style.willChange=\"transform, opacity, filter\";span.style.transformOrigin=transformOrigin;let tf=`translateX(${xVal}${xUnit}) translateY(${yVal}${yUnit}) translateZ(0)`;if(from.scaleX!==1||from.scaleY!==1)tf+=from.scaleX===from.scaleY?` scale(${from.scaleX})`:` scaleX(${from.scaleX}) scaleY(${from.scaleY})`;if(from.skewX!==0||from.skewY!==0)tf+=` skewX(${from.skewX}deg) skewY(${from.skewY}deg)`;if(from.rotateX!==0||from.rotateY!==0||from.rotateZ!==0)tf+=` rotateX(${from.rotateX}deg) rotateY(${from.rotateY}deg) rotateZ(${from.rotateZ}deg)`;span.style.transform=tf;span.style.opacity=String(from.opacity);if(from.blur>0)span.style.filter=`blur(${from.blur}px)`;if(from.color){// Capture the cascade color before overwriting it so the \"to\" side can\n// fall back to the text's natural color.\nensureNaturalColor(span);span.style.color=rgbaString(from.color);}}// — DOM SPLITTING —\nconst TEXT_CANDIDATE_SELECTOR=\"p, span, h1, h2, h3, h4, h5, h6, div\";const CHARACTER_UNITS_WARN_THRESHOLD=900;let hasWarnedLargeCharacterSplit=false;function hasDirectText(el){const children=el.childNodes;for(let i=0;i<children.length;i++){const n=children[i];if(n.nodeType===Node.TEXT_NODE&&n.textContent?.trim())return true;}return false;}function findTextElements(root){const candidates=[];if(hasDirectText(root))candidates.push(root);const queried=root.querySelectorAll(TEXT_CANDIDATE_SELECTOR);queried.forEach(node=>{const el=node;if(hasDirectText(el))candidates.push(el);});if(candidates.length===0){const fallback=new Set;const walker=document.createTreeWalker(root,NodeFilter.SHOW_TEXT,null);let n=walker.nextNode();while(n){if(n.textContent?.trim()&&n.parentElement){fallback.add(n.parentElement);}n=walker.nextNode();}return Array.from(fallback);}if(candidates.length===1)return candidates;const set=new Set(candidates);const topLevel=candidates.filter(el=>{let parent=el.parentElement;while(parent){if(set.has(parent))return false;parent=parent.parentElement;}return true;});topLevel.sort((a,b)=>{if(a===b)return 0;const pos=a.compareDocumentPosition(b);if(pos&Node.DOCUMENT_POSITION_FOLLOWING)return-1;if(pos&Node.DOCUMENT_POSITION_PRECEDING)return 1;return 0;});return topLevel;}function combineSplitHandles(handles){if(handles.length===0)return null;if(handles.length===1)return handles[0];const lines=[];const words=[];const chars=[];const masks=[];handles.forEach(handle=>{lines.push(...handle.lines??[]);words.push(...handle.words??[]);chars.push(...handle.chars??[]);masks.push(...handle.masks??[]);});return{lines,words,chars,masks,revert(){for(let i=handles.length-1;i>=0;i--){handles[i].revert();}}};}const SPLIT_TEXT_CDN_URL=\"https://cdn.jsdelivr.net/npm/gsap@3.14.1/dist/SplitText.min.js\";let splitTextLoadPromise=null;function getSplitTextPlugin(){const g=globalThis;const win=g?.window??g;return win?.SplitText??win?.gsap?.plugins?.SplitText??null;}function ensureSplitTextLoaded(){const plugin=getSplitTextPlugin();if(plugin?.create)return Promise.resolve(plugin);if(typeof document===\"undefined\")return Promise.resolve(null);if(splitTextLoadPromise)return splitTextLoadPromise;splitTextLoadPromise=new Promise((resolve,reject)=>{const done=()=>{const loaded=getSplitTextPlugin();if(loaded?.create)resolve(loaded);else{splitTextLoadPromise=null;reject(new Error(\"SplitText loaded but plugin was not available.\"));}};const onError=()=>{splitTextLoadPromise=null;// Remove the dead tag so a retry injects a fresh script — listeners\n// attached to an already-errored tag would never fire again.\ndocument.querySelector('script[data-ta-splittext=\"1\"]')?.remove();reject(new Error(\"Failed to load SplitText from CDN.\"));};const existing=document.querySelector('script[data-ta-splittext=\"1\"]');if(existing){if(getSplitTextPlugin()?.create){done();}else{existing.addEventListener(\"load\",done,{once:true});existing.addEventListener(\"error\",onError,{once:true});}return;}const script=document.createElement(\"script\");script.src=SPLIT_TEXT_CDN_URL;script.async=true;script.dataset.taSplittext=\"1\";script.onload=done;script.onerror=onError;document.head.appendChild(script);});return splitTextLoadPromise;}// Start fetching SplitText as soon as the bundle loads — mount-time loading\n// adds the whole network round-trip to the first paint-to-animation gap.\nif(typeof document!==\"undefined\"){void ensureSplitTextLoaded().catch(()=>{});}function splitWithGSAP(element,mode,offset,from,to,animStateRef,transformOrigin,overflow,firstLineIndent,onSplitApplied){const applySplitStyles=split=>{const lines=Array.from(split?.lines??[]);const words=Array.from(split?.words??[]);const chars=Array.from(split?.chars??[]);if(mode===\"character\"){words.forEach(word=>{word.style.display=\"inline-block\";word.style.whiteSpace=\"nowrap\";word.style.textIndent=\"0\";});}const units=mode===\"character\"?chars:mode===\"line\"?lines:words;const display=mode===\"line\"?\"block\":\"inline-block\";const computedAlign=mode===\"line\"?window.getComputedStyle(element).textAlign:\"\";units.forEach((unit,i)=>{if(mode===\"line\"){unit.style.textAlign=\"inherit\";unit.style.margin=\"0\";unit.style.padding=\"0\";// The element's text-indent inherits into every line div, which\n// would indent each line — set it explicitly on the first line\n// only and zero the rest.\nif(i===0){if(firstLineIndent>0)unit.style.textIndent=`${firstLineIndent}em`;}else{unit.style.textIndent=\"0\";}if(computedAlign===\"justify\"&&i<units.length-1){unit.style.textAlignLast=\"justify\";}}else{// Inline-block units are block containers: they inherit the\n// element's text-indent into their own first line, widening every\n// unit. Zero it so only the element's first line box shifts.\nunit.style.textIndent=\"0\";}if(animStateRef.current===\"played\"){// Already animated — snap to final state to prevent flash on reflow\nunit.style.display=display;unit.style.transformOrigin=transformOrigin;applyWordStyle(unit,1,0,0,from,to);unit.style.willChange=\"auto\";}else{applyInitialStyle(unit,offset,from,transformOrigin,display);}});// Fix GSAP mask wrappers: GSAP only sets overflow:clip but doesn't\n// set display — the wrappers are inline <span>s where overflow has\n// no effect. We must set display so clipping actually works, and\n// override to clipPath for single-axis clipping modes.\nif(overflow!==\"visible\"){const masks=Array.from(split?.masks??[]);const isLine=mode===\"line\";masks.forEach(m=>{m.style.display=isLine?\"block\":\"inline-block\";if(!isLine){m.style.verticalAlign=\"top\";// Inline-block mask wrappers inherit text-indent too.\nm.style.textIndent=\"0\";}if(overflow===\"clipX\"){m.style.overflow=\"visible\";m.style.clipPath=\"inset(-999px 0)\";}else if(overflow===\"clipY\"){m.style.overflow=\"visible\";m.style.clipPath=\"inset(0 -999px)\";}// clipXY: GSAP's overflow:clip is correct now that display is set\n});}onSplitApplied?.();};let didOnSplit=false;const maskType=mode===\"character\"?\"chars\":mode===\"line\"?\"lines\":\"words\";const options={autoSplit:true,aria:\"hidden\",tag:\"span\",...overflow!==\"visible\"&&{mask:maskType},onSplit(self){didOnSplit=true;applySplitStyles(self);}};if(mode===\"character\"){options.type=\"words,chars\";options.wordsClass=\"ta-char-group\";options.charsClass=\"ta-unit\";}else if(mode===\"line\"){options.type=\"lines\";options.linesClass=\"ta-unit\";}else{options.type=\"words\";options.wordsClass=\"ta-unit\";}// Standalone SplitText is loaded on window; typings are not available here.\nconst plugin=getSplitTextPlugin();if(!plugin?.create)return null;let split=null;try{// @ts-ignore\nsplit=plugin.create(element,options);}catch{return null// caller falls back to unsplit rendering\n;}if(!split)return null;if(!didOnSplit)applySplitStyles(split);return split;}function replaceElementTag(el,newTag){const newEl=document.createElement(newTag);for(const attr of Array.from(el.attributes)){newEl.setAttribute(attr.name,attr.value);}while(el.firstChild)newEl.appendChild(el.firstChild);el.parentNode?.replaceChild(newEl,el);return newEl;}function wrapElement(element,offset,from,transformOrigin){element.classList.add(\"ta-unit\");applyInitialStyle(element,offset,from,transformOrigin);}function applyOverflow(container,overflow){if(overflow===\"visible\")return;const units=container.querySelectorAll(\".ta-unit\");units.forEach(unit=>{if(unit.parentElement?.classList.contains(\"ta-mask\"))return;const mask=document.createElement(\"span\");mask.className=\"ta-mask\";// Match the unit's display mode so layout stays identical\nconst display=unit.style.display||\"inline-block\";mask.style.display=display;switch(overflow){case\"clipX\":mask.style.clipPath=\"inset(-999px 0)\";break;case\"clipY\":mask.style.clipPath=\"inset(0 -999px)\";break;default:mask.style.overflow=\"clip\";break;}mask.style.verticalAlign=\"top\";// For block-level line masks, preserve text-align and height\nif(display===\"block\"){mask.style.textAlign=\"inherit\";if(unit.style.height)mask.style.height=unit.style.height;if(unit.style.textAlignLast)mask.style.textAlignLast=unit.style.textAlignLast;}unit.parentNode.insertBefore(mask,unit);mask.appendChild(unit);});}// — ANIMATION RUNTIME —\nfunction getAnimTargets(container,sectionEl){const words=container.querySelectorAll(\".ta-unit\");if(words.length===0)return null;return{words,triggerEl:sectionEl||container,n:words.length};}// Snap every unit to its final \"to\" state and release GPU layers.\nfunction snapToFinal(words,from,to){for(let i=0;i<words.length;i++){applyWordStyle(words[i],1,0,0,from,to);words[i].style.willChange=\"auto\";}}function makeCompletionSnap(words,to,animStateRef){return()=>{animStateRef.current=\"played\";words.forEach(w=>{w.style.willChange=\"auto\";// Only clear residual blur when the final state has none —\n// a \"to\" blur must survive completion.\nif(to.blur<=.01)w.style.removeProperty(\"filter\");});};}function resetAllToFrom(words,xVal,xUnit,yVal,yUnit,from,to){// offsetWidth/Height are only needed for % offsets — skip the forced\n// layout reads entirely for px/vw/vh.\nconst needW=xUnit===\"%\";const needH=yUnit===\"%\";words.forEach(word=>{const fx=resolveUnit(xVal,xUnit,needW?word.offsetWidth:0);const fy=resolveUnit(yVal,yUnit,needH?word.offsetHeight:0);applyWordStyle(word,0,fx,fy,from,to);});}function runStaggeredAnimation(words,n,xVal,xUnit,yVal,yUnit,from,to,transition,unitDur,stagger,staggerDirection,onAllComplete){// Pre-compute delays once and find which element finishes last\nconst baseDelay=transition?.delay??0;const delays=new Float64Array(n);let maxDelay=0;let lastIndex=0;for(let i=0;i<n;i++){delays[i]=baseDelay+computeDelay(i,n,stagger,staggerDirection);if(delays[i]>=maxDelay){maxDelay=delays[i];lastIndex=i;}}// offsetWidth/Height are only needed for % offsets — skip layout reads\nconst needW=xUnit===\"%\";const needH=yUnit===\"%\";// Springs need real per-unit physics — keep individual tweens for them.\nif(transition?.type===\"spring\"){const ctrls=[];words.forEach((word,i)=>{const fx=resolveUnit(xVal,xUnit,needW?word.offsetWidth:0);const fy=resolveUnit(yVal,yUnit,needH?word.offsetHeight:0);const ctrl=animate(0,1,{...transition,duration:unitDur,delay:delays[i],onUpdate(p){applyWordStyle(word,p,fx,fy,from,to);},onComplete:i===lastIndex?onAllComplete:undefined});ctrls.push(ctrl);});return ctrls;}// Tweens: ONE linear master clock drives every unit — n concurrent tween\n// instances collapse into a single rAF subscriber, easing is applied per\n// unit, and units outside their local time window skip DOM writes.\nconst fxArr=new Float64Array(n);const fyArr=new Float64Array(n);for(let i=0;i<n;i++){fxArr[i]=resolveUnit(xVal,xUnit,needW?words[i].offsetWidth:0);fyArr[i]=resolveUnit(yVal,yUnit,needH?words[i].offsetHeight:0);}const easeFn=easingFnFromTransition(transition);const prevEased=new Float64Array(n).fill(-1);const totalTime=maxDelay+unitDur;const master=animate(0,1,{duration:totalTime,ease:\"linear\",onUpdate(mp){const t=mp*totalTime;for(let i=0;i<n;i++){const localP=(t-delays[i])/unitDur;const eased=localP<=0?0:localP>=1?1:easeFn(localP);if(Math.abs(eased-prevEased[i])<1e-6)continue;prevEased[i]=eased;applyWordStyle(words[i],eased,fxArr[i],fyArr[i],from,to);}},onComplete:onAllComplete});return[master];}// — CSS & UI —\nconst FILL_STYLES_ID=\"ta-fill-styles\";const FILL_CSS=`\n  .ta-fill > *:not(.ta-unit):not(.ta-char-group):not(.ta-mask):not([class*=\"-mask\"]),\n  .ta-fill > * > *:not(.ta-unit):not(.ta-char-group):not(.ta-mask):not([class*=\"-mask\"]),\n  .ta-fill > * > * > *:not(.ta-unit):not(.ta-char-group):not(.ta-mask):not([class*=\"-mask\"]),\n  .ta-fill > * > * > * > *:not(.ta-unit):not(.ta-char-group):not(.ta-mask):not([class*=\"-mask\"]) {\n    width: 100% !important;\n    min-width: unset !important;\n    max-width: unset !important;\n    position: relative !important;\n    left: unset !important;\n    top: unset !important;\n    right: unset !important;\n    bottom: unset !important;\n    flex-shrink: 0 !important;\n    overflow: visible !important;\n  }\n  .ta-char-group {\n    font-kerning: none;\n  }\n`;function ensureFillStyles(){if(typeof document===\"undefined\")return;if(document.getElementById(FILL_STYLES_ID))return;const style=document.createElement(\"style\");style.id=FILL_STYLES_ID;style.textContent=FILL_CSS;document.head.appendChild(style);}function Placeholder({style}){return /*#__PURE__*/_jsxs(\"div\",{style:{...style,display:\"flex\",minHeight:140,alignItems:\"center\",justifyContent:\"center\",flexDirection:\"column\",color:\"rgb(153, 102, 255)\",background:\"rgba(136, 85, 255, 0.1)\",fontSize:14,textAlign:\"center\",padding:20,borderRadius:12,gap:6},children:[/*#__PURE__*/_jsx(\"div\",{style:{fontSize:22},children:\"T\"}),/*#__PURE__*/_jsx(\"div\",{style:{fontSize:14,fontWeight:600},children:\"TextAnimator\"}),/*#__PURE__*/_jsxs(\"div\",{style:{opacity:.7,maxWidth:220,lineHeight:1.5},children:[\"Connect a text layer using the \",/*#__PURE__*/_jsx(\"b\",{children:\"Text Layer\"}),\" property.\"]})]});}// — COMPONENT —\n/**\n * TextAnimator\n *\n * @framerDisableUnlink\n * @framerIntrinsicWidth 400\n * @framerIntrinsicHeight 200\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight any\n */export default function TextAnimator(props){const{textLayer,scrollSection,animationMode=\"appear\",appearDelay=0,preview=false,animateBy=\"word\",trigger=\"layer\",viewport=\"center\",replay=false,markers=false,animation,textAlign=\"inherit\",textWrap=\"inherit\",textIndent=0,htmlTag=\"inherit\",style}=props;const fromRaw=animation?.from??DEFAULT_ANIM_STATE_RAW;const toRaw=animation?.to??DEFAULT_ANIM_STATE_RAW;const perspective=animation?.perspective??1e3;const stagger=animation?.stagger??.02;const staggerDirection=animation?.staggerDirection??\"forward\";const transition=animation?.transition??{type:\"tween\",duration:1,ease:[.76,0,.24,1]};const offset=animation?.offset??{xValue:0,xUnit:\"px\",yValue:0,yUnit:\"px\"};const overflow=animation?.overflow??\"visible\";const originX=animation?.origin?.x??50;const originY=animation?.origin?.y??50;const transformOrigin=`${originX}% ${originY}%`;// Stable serialized keys to avoid effect churn from new object refs\nconst fromKey=JSON.stringify(fromRaw);const toKey=JSON.stringify(toRaw);const offsetKey=JSON.stringify(offset);const transitionKey=JSON.stringify(transition);// Pre-resolve from/to so applyWordStyle avoids ?? fallbacks per frame\n// eslint-disable-next-line react-hooks/exhaustive-deps\nconst from=useMemo(()=>resolveAnimState(fromRaw),[fromKey]);// eslint-disable-next-line react-hooks/exhaustive-deps\nconst to=useMemo(()=>resolveAnimState(toRaw),[toKey]);// Extract offset and duration values once (used by all mode effects)\nconst xVal=offset?.xValue??0;const xUnit=offset?.xUnit??\"px\";const yVal=offset?.yValue??0;const yUnit=offset?.yUnit??\"px\";const dur=transition?.duration??1;const containerRef=useRef(null);const sourceRef=useRef(null);const splitTextRef=useRef(null);const splitRetryTimeoutRef=useRef(null);const splitRevisionRafRef=useRef(null);const splitRetryAttemptsRef=useRef(0);// Tracks whether an animation has played to completion so that\n// line-mode resize re-splits snap to the final state instead of replaying.\nconst animStateRef=useRef(\"idle\");// Prevents the opacity:0 flash during resize re-splits by keeping\n// the container visible while text is being re-processed.\nconst isResizingRef=useRef(false);// Store scrollSection in a ref so it NEVER appears in dependency arrays.\n// ControlType.ScrollSectionRef causes re-renders on every scroll frame;\n// keeping it out of deps prevents effect teardown/setup churn.\nconst scrollSectionRef=useRef(scrollSection);scrollSectionRef.current=scrollSection;// Resolved section element — stored in state so it acts as a stable\n// effect dependency that only changes when the actual element changes\n// (not on every scroll frame like scrollSection itself).\n// ControlType.ScrollSectionRef passes a stable ref whose .current is\n// mutated asynchronously, so we poll briefly via rAF until it resolves.\nconst[sectionEl,setSectionEl]=useState(()=>resolveSectionEl(scrollSectionRef));useEffect(()=>{if(trigger!==\"section\"){setSectionEl(null);return;}const el=resolveSectionEl(scrollSectionRef);if(el){setSectionEl(el);return;}let rafId=0;const poll=()=>{const e=resolveSectionEl(scrollSectionRef);if(e){setSectionEl(e);return;}rafId=requestAnimationFrame(poll);};rafId=requestAnimationFrame(poll);return()=>cancelAnimationFrame(rafId);},[trigger,scrollSection]);const[isClient,setIsClient]=useState(false);const[isProcessed,setIsProcessed]=useState(false);const[srText,setSrText]=useState(\"\");const[splitRevision,setSplitRevision]=useState(0);const[sourceRev,setSourceRev]=useState(0);const isStatic=useIsStaticRenderer();const isCanvas=RenderTarget.current()===RenderTarget.canvas;// Hydration safety + one-time setup\nuseEffect(()=>{setIsClient(true);addGlobalListeners();ensureFillStyles();void ensureSplitTextLoaded().catch(()=>{});return()=>{if(splitRetryTimeoutRef.current!==null){window.clearTimeout(splitRetryTimeoutRef.current);splitRetryTimeoutRef.current=null;}if(splitRevisionRafRef.current!==null){clearTimeout(splitRevisionRafRef.current);splitRevisionRafRef.current=null;}splitTextRef.current?.revert();splitTextRef.current=null;removeGlobalListeners();};},[]);// React hydration does not patch attribute mismatches: the server renders\n// the source copy hidden (static renderer), the first client render\n// declares it as the visible placeholder, and the DOM silently keeps the\n// server's styles. Re-assert the placeholder styles before first paint so\n// the anti-jump placeholder actually shows on real page loads.\nuseIsomorphicLayoutEffect(()=>{const source=sourceRef.current;if(!source||isStatic||isProcessed)return;source.style.position=\"relative\";source.style.height=\"\";source.style.overflow=\"\";source.style.opacity=\"\";source.removeAttribute(\"aria-hidden\");// eslint-disable-next-line react-hooks/exhaustive-deps\n},[]);// Reset processing when split-mode or mask changes\nuseEffect(()=>{if(!isProcessed)return;// Don't restore innerHTML here — the processing effect handles it\n// to avoid conflicting with React's DOM reconciliation.\nanimStateRef.current=\"idle\";setIsProcessed(false);// eslint-disable-next-line react-hooks/exhaustive-deps\n},[animateBy,overflow,transformOrigin,animationMode,textAlign,textWrap,textIndent,htmlTag]);// Process text — split into animatable units with initial \"from\" styles.\n// Clones clean HTML from the hidden sourceRef into the visible containerRef,\n// then splits the clone. This avoids React/DOM conflicts on re-renders.\nuseEffect(()=>{if(!isClient||!containerRef.current||!sourceRef.current||isProcessed)return;if(isStatic&&!(preview&&isCanvas))return;let cancelled=false;let rafA=0;let rafB=0;const queueSplitRevisionBump=()=>{if(splitRevisionRafRef.current!==null){clearTimeout(splitRevisionRafRef.current);}splitRevisionRafRef.current=window.setTimeout(()=>{splitRevisionRafRef.current=null;setSplitRevision(v=>v+1);},RESPLIT_DEBOUNCE_MS);};const scheduleSplitRetry=()=>{if(splitRetryAttemptsRef.current>=SPLIT_RETRY_MAX_ATTEMPTS)return;const attempt=++splitRetryAttemptsRef.current;const delay=Math.min(SPLIT_RETRY_MAX_MS,SPLIT_RETRY_BASE_MS*2**(attempt-1));if(splitRetryTimeoutRef.current!==null){window.clearTimeout(splitRetryTimeoutRef.current);}splitRetryTimeoutRef.current=window.setTimeout(()=>{splitRetryTimeoutRef.current=null;isResizingRef.current=true;setIsProcessed(false);},delay);};// Tag replacement + text style overrides. Shared by the main path and\n// the unsplit fallbacks so degraded rendering still honors the props.\n// The indent is applied before splitting so GSAP measures line breaks\n// with it in place; em resolves against the element's font size.\nconst applyTextOverrides=root=>{let els=findTextElements(root);if(htmlTag&&htmlTag!==\"inherit\"){els=els.map(el=>replaceElementTag(el,htmlTag));}els.forEach(el=>{if(textAlign&&textAlign!==\"inherit\")el.style.textAlign=textAlign;if(textWrap&&textWrap!==\"inherit\")el.style.textWrap=textWrap;if(textIndent>0)el.style.textIndent=`${textIndent}em`;});return els;};const process=async()=>{const source=sourceRef.current;const container=containerRef.current;isResizingRef.current=false;if(!source||!container||cancelled)return;setSrText(source.textContent||\"\");if(animateBy!==\"element\"){const plugin=await ensureSplitTextLoaded().catch(()=>null);if(cancelled)return;if(!plugin?.create){container.innerHTML=source.innerHTML;applyTextOverrides(container);setIsProcessed(true);scheduleSplitRetry();return;}splitRetryAttemptsRef.current=0;if(splitRetryTimeoutRef.current!==null){window.clearTimeout(splitRetryTimeoutRef.current);splitRetryTimeoutRef.current=null;}}splitTextRef.current?.revert();splitTextRef.current=null;// Clone from sourceRef (always clean — React manages it)\ncontainer.innerHTML=source.innerHTML;const textElements=applyTextOverrides(container);if(textElements.length===0||cancelled){setIsProcessed(true);return;}if(animateBy===\"element\"){textElements.forEach(el=>{wrapElement(el,offset,from,transformOrigin);});applyOverflow(container,overflow);}else{const mode=animateBy===\"character\"?\"character\":animateBy===\"line\"?\"line\":\"word\";const handles=[];textElements.forEach(el=>{const handle=splitWithGSAP(el,mode,offset,from,to,animStateRef,transformOrigin,overflow,textIndent,queueSplitRevisionBump);if(handle)handles.push(handle);});splitTextRef.current=combineSplitHandles(handles);}if(animateBy!==\"element\"&&!splitTextRef.current){container.innerHTML=source.innerHTML;applyTextOverrides(container);setIsProcessed(true);return;}const unitCount=container.querySelectorAll(\".ta-unit\").length;if(animateBy===\"character\"&&unitCount>CHARACTER_UNITS_WARN_THRESHOLD&&!hasWarnedLargeCharacterSplit){hasWarnedLargeCharacterSplit=true;console.warn(`[TextAnimator] Character split created ${unitCount} units. Consider word/line mode for better performance.`);}if(cancelled)return;setIsProcessed(true);};rafA=requestAnimationFrame(()=>{rafB=requestAnimationFrame(()=>{void process();});});return()=>{cancelled=true;cancelAnimationFrame(rafA);cancelAnimationFrame(rafB);};},[isClient,isStatic,preview,textLayer,offsetKey,fromKey,animateBy,overflow,transformOrigin,isProcessed,sourceRev,textAlign,textWrap,textIndent,htmlTag]);// —— MUTATION OBSERVER: re-split when CMS/dynamic text changes ——\n// Observes sourceRef (where React renders textLayer), not containerRef\n// (which is managed by DOM manipulation).\nuseEffect(()=>{if(!isClient||!sourceRef.current||isStatic)return;// Bump a revision (not just isProcessed) so text changes that land\n// while a processing pass is already in flight still cancel it and\n// trigger a fresh pass instead of being silently dropped.\nconst mo=new MutationObserver(()=>{setIsProcessed(false);setSourceRev(v=>v+1);});mo.observe(sourceRef.current,{childList:true,characterData:true,subtree:true});return()=>mo.disconnect();},[isClient,isStatic,textLayer]);// —— CANVAS FINAL STATE: show \"to\" state on canvas when not previewing ——\n// Show the end result on canvas instead of the offset/hidden \"from\" state.\nuseEffect(()=>{if(!isCanvas||preview||!isProcessed||!containerRef.current)return;const targets=getAnimTargets(containerRef.current,null);if(!targets)return;snapToFinal(targets.words,from,to);},[isCanvas,preview,isProcessed,fromKey,toKey,splitRevision]);// —— TEXT ALIGN OVERRIDE (canvas static path) ——\n// On canvas without preview, isStatic=true so the processing effect is skipped\n// and textAlign is never applied. This effect handles that case by directly\n// setting textAlign on text elements after React renders the static children.\nuseEffect(()=>{if(!isCanvas||preview||!containerRef.current)return;const textEls=findTextElements(containerRef.current);textEls.forEach(el=>{// Set to override value, or clear to \"\" so the original style from the\n// text layer cascades back when switching back to \"inherit\".\nel.style.textAlign=textAlign===\"inherit\"?\"\":textAlign;el.style.textWrap=textWrap===\"inherit\"?\"\":textWrap;el.style.textIndent=textIndent>0?`${textIndent}em`:\"\";});},[isCanvas,preview,textAlign,textWrap,textIndent]);// —— APPEAR MODE: plays immediately on mount ——\nuseEffect(()=>{if(animationMode!==\"appear\"||preview&&isCanvas)return;if(!isClient||isStatic||!isProcessed||!containerRef.current)return;const targets=getAnimTargets(containerRef.current,null);if(!targets)return;const{words,n}=targets;// Reduced motion or resize re-split after completion: snap to final state\nif(prefersReducedMotion||animStateRef.current===\"played\"){snapToFinal(words,from,to);animStateRef.current=\"played\";return;}const unitDur=Math.max(MIN_UNIT_DURATION,dur);// Root-level delay stacks on the transition's own delay so nested\n// component instances can stagger via an exposed variable.\nconst tr=appearDelay>0?{...transition,delay:(transition?.delay??0)+appearDelay}:transition;const controls=runStaggeredAnimation(words,n,xVal,xUnit,yVal,yUnit,from,to,tr,unitDur,stagger,staggerDirection,makeCompletionSnap(words,to,animStateRef));return()=>{controls.forEach(c=>c.stop());words.forEach(w=>{w.style.willChange=\"auto\";});};},[isClient,isStatic,isProcessed,animationMode,animateBy,appearDelay,stagger,staggerDirection,transitionKey,offsetKey,fromKey,toKey,splitRevision,preview,isCanvas]);// —— ENTER MODE: scroll-position check ——\n// Uses a scroll listener + rAF instead of IntersectionObserver to\n// correctly trigger: fire when the TOP of the trigger element\n// scrolls past the viewport line (top/center/bottom).\nuseEffect(()=>{if(animationMode!==\"enter\"||preview&&isCanvas)return;if(!isClient||isStatic||!isProcessed||!containerRef.current)return;if(trigger===\"section\"&&!sectionEl)return;const targets=getAnimTargets(containerRef.current,sectionEl);if(!targets)return;const{words,triggerEl,n}=targets;// Reduced motion: snap to final state immediately\nif(prefersReducedMotion){snapToFinal(words,from,to);animStateRef.current=\"played\";return;}const unitDur=Math.max(MIN_UNIT_DURATION,dur);const tr=appearDelay>0?{...transition,delay:(transition?.delay??0)+appearDelay}:transition;let controls=[];const vpFrac=viewportFraction(viewport);let playing=false;let rafId=0;// Resize re-split after animation already played: snap to final state\nif(animStateRef.current===\"played\"){snapToFinal(words,from,to);playing=true;}else{// Normal: reset to initial state. Defer GPU layer promotion until\n// playback actually starts — units can wait below the fold for a\n// long time and each will-change holds a compositor layer.\nresetAllToFrom(words,xVal,xUnit,yVal,yUnit,from,to);words.forEach(w=>{w.style.willChange=\"auto\";});}// Check if the trigger element's top has crossed the viewport line.\nconst hasCrossed=()=>{const rect=triggerEl.getBoundingClientRect();const vpY=cachedVH*vpFrac;// A fully visible element also counts — elements near the bottom of\n// the page may never reach the viewport line at maximum scroll.\nreturn rect.top<=vpY||rect.bottom<=cachedVH;};const play=()=>{playing=true;words.forEach(w=>{w.style.willChange=\"transform, opacity, filter\";});controls=runStaggeredAnimation(words,n,xVal,xUnit,yVal,yUnit,from,to,tr,unitDur,stagger,staggerDirection,makeCompletionSnap(words,to,animStateRef));};const reset=()=>{playing=false;animStateRef.current=\"idle\";controls.forEach(c=>c.stop());controls=[];resetAllToFrom(words,xVal,xUnit,yVal,yUnit,from,to);// Layers are re-promoted in play(); keep them released while the\n// element waits off-screen for its replay.\nwords.forEach(w=>{w.style.willChange=\"auto\";});};// Replay: use IntersectionObserver to detect when the element is fully\n// off-screen (either direction) and reset the animation. IO at threshold:0\n// fires !isIntersecting only when the element is completely invisible.\nlet isVisible=false;let io=null;if(replay){// Sync initial visibility so the first check() is correct\nconst initRect=containerRef.current.getBoundingClientRect();isVisible=initRect.bottom>0&&initRect.top<cachedVH;io=new IntersectionObserver(([entry])=>{isVisible=entry.isIntersecting;if(!entry.isIntersecting&&playing){reset();}},{threshold:0});io.observe(containerRef.current);}let done=false;const check=()=>{if(done)return;const crossed=hasCrossed();// Guard: for replay, only play when element is visible on screen\n// (prevents re-triggering while element is off-screen above viewport)\nif(crossed&&!playing&&(!replay||isVisible)){play();if(!replay){done=true;window.removeEventListener(\"scroll\",onScroll);return;}}// Reset is handled by IntersectionObserver for replay mode\n};const onScroll=()=>{cancelAnimationFrame(rafId);rafId=requestAnimationFrame(check);};// Initial check (element might already be past the viewport line)\ncheck();if(!done){window.addEventListener(\"scroll\",onScroll,{passive:true});}return()=>{done=true;cancelAnimationFrame(rafId);window.removeEventListener(\"scroll\",onScroll);if(io)io.disconnect();controls.forEach(c=>c.stop());words.forEach(w=>{w.style.willChange=\"auto\";});};},[isClient,isStatic,isProcessed,animationMode,animateBy,trigger,sectionEl,viewport,stagger,staggerDirection,appearDelay,transitionKey,offsetKey,fromKey,toKey,splitRevision,replay,preview,isCanvas]);// —— SCROLL (SCRUB) MODE ——\nuseEffect(()=>{if(animationMode!==\"scroll\"||preview&&isCanvas)return;if(!isClient||isStatic||!isProcessed||!containerRef.current)return;if(trigger===\"section\"&&!sectionEl)return;const targets=getAnimTargets(containerRef.current,sectionEl);if(!targets)return;const{words,triggerEl,n}=targets;const vpFrac=viewportFraction(viewport);// Element sizes are only needed to resolve % offsets — skip the forced\n// layout reads entirely for px/vw/vh.\nconst needW=xUnit===\"%\";const needH=yUnit===\"%\";// Reduced motion: snap to from/to based on scroll position, no interpolation\nif(prefersReducedMotion){// Pre-compute offsets once to avoid layout reflow per word per scroll frame\nlet fxArr=Array.from(words,w=>resolveUnit(xVal,xUnit,needW?w.offsetWidth:0));let fyArr=Array.from(words,w=>resolveUnit(yVal,yUnit,needH?w.offsetHeight:0));let rafId=0;const tick=()=>{const p=getScrollProgress(triggerEl,vpFrac)>=.5?1:0;for(let i=0;i<words.length;i++){applyWordStyle(words[i],p,fxArr[i],fyArr[i],from,to);}};const onScroll=()=>{cancelAnimationFrame(rafId);rafId=requestAnimationFrame(tick);};const recomputeOffsets=()=>{fxArr=Array.from(words,w=>resolveUnit(xVal,xUnit,needW?w.offsetWidth:0));fyArr=Array.from(words,w=>resolveUnit(yVal,yUnit,needH?w.offsetHeight:0));tick();};tick();window.addEventListener(\"scroll\",onScroll,{passive:true});window.addEventListener(\"resize\",recomputeOffsets);return()=>{cancelAnimationFrame(rafId);window.removeEventListener(\"scroll\",onScroll);window.removeEventListener(\"resize\",recomputeOffsets);};}const easeFn=easingFnFromTransition(transition);const totalDuration=1+(n-1)*stagger;// Pre-compute per-element sizes for % resolution (doesn't change during scroll)\nconst elWidths=Array.from(words,w=>needW?w.offsetWidth:0);const elHeights=Array.from(words,w=>needH?w.offsetHeight:0);// Pre-compute resolved offsets (refreshed on resize alongside sizes)\nconst fromXArr=new Float64Array(n);const fromYArr=new Float64Array(n);const computeOffsets=()=>{for(let i=0;i<n;i++){fromXArr[i]=resolveUnit(xVal,xUnit,elWidths[i]);fromYArr[i]=resolveUnit(yVal,yUnit,elHeights[i]);}};computeOffsets();// Pre-compute per-element delays based on stagger direction\nconst delays=new Float64Array(n);for(let i=0;i<n;i++){delays[i]=computeDelay(i,n,stagger,staggerDirection);}// Track previous eased progress per element to skip unchanged ones\nconst prevEased=new Float64Array(n).fill(-1);let rafId=0;let willChangeCleared=false;const tick=()=>{const scrollP=getScrollProgress(triggerEl,vpFrac);const t=scrollP*totalDuration;for(let i=0;i<n;i++){const localP=Math.max(0,Math.min(1,t-delays[i]));const eased=easeFn(localP);// Skip DOM writes when progress hasn't changed\nif(Math.abs(eased-prevEased[i])<1e-5)continue;prevEased[i]=eased;applyWordStyle(words[i],eased,fromXArr[i],fromYArr[i],from,to);}// Clear GPU layers when animation is fully complete or not started\nif((scrollP<=0||scrollP>=1)&&!willChangeCleared){willChangeCleared=true;for(let i=0;i<n;i++)words[i].style.willChange=\"auto\";}else if(scrollP>0&&scrollP<1&&willChangeCleared){willChangeCleared=false;for(let i=0;i<n;i++)words[i].style.willChange=\"transform, opacity, filter\";}};const onScroll=()=>{if(!gateActive)return;cancelAnimationFrame(rafId);rafId=requestAnimationFrame(tick);};const onResize=()=>{// Refresh per-element sizes and resolved offsets on resize\nfor(let i=0;i<n;i++){elWidths[i]=needW?words[i].offsetWidth:0;elHeights[i]=needH?words[i].offsetHeight:0;}computeOffsets();// Invalidate previous progress so all elements re-render\nprevEased.fill(-1);tick();};// Skip per-frame work while the trigger is far off-screen; the scroll\n// listener stays attached but exits on a boolean. One viewport of\n// margin keeps the scrub seamless when the element approaches.\nlet gateActive=true;let gateIO=null;if(typeof IntersectionObserver!==\"undefined\"){gateIO=new IntersectionObserver(([entry])=>{gateActive=entry.isIntersecting;if(gateActive)tick();},{rootMargin:\"100% 0px 100% 0px\"});gateIO.observe(triggerEl);}tick();window.addEventListener(\"scroll\",onScroll,{passive:true});window.addEventListener(\"resize\",onResize);return()=>{gateIO?.disconnect();cancelAnimationFrame(rafId);window.removeEventListener(\"scroll\",onScroll);window.removeEventListener(\"resize\",onResize);};},[isClient,isStatic,isProcessed,animationMode,animateBy,trigger,sectionEl,viewport,stagger,staggerDirection,transitionKey,offsetKey,fromKey,toKey,splitRevision,preview,isCanvas]);// —— PREVIEW MODE: looping animation on canvas only ——\nuseEffect(()=>{if(!preview||!isCanvas||!isClient||!isProcessed||!containerRef.current)return;const targets=getAnimTargets(containerRef.current,null);if(!targets)return;const{words,n}=targets;// Reduced motion: show final state, skip looping\nif(prefersReducedMotion){snapToFinal(words,from,to);return;}const unitDur=Math.max(MIN_UNIT_DURATION,dur);const baseDelay=transition?.delay??0;const pauseBetween=PREVIEW_LOOP_PAUSE_S;// Compute the actual max delay to find when the last element finishes\nlet maxDelay=0;for(let i=0;i<n;i++){const d=baseDelay+computeDelay(i,n,stagger,staggerDirection);if(d>maxDelay)maxDelay=d;}let cancelled=false;let controls=[];let timeoutId;const runLoop=()=>{if(cancelled)return;controls=[];resetAllToFrom(words,xVal,xUnit,yVal,yUnit,from,to);controls=runStaggeredAnimation(words,n,xVal,xUnit,yVal,yUnit,from,to,transition,unitDur,stagger,staggerDirection);// Wait for last element to finish (maxDelay + unitDur) + pause\nconst totalTime=(maxDelay+unitDur+pauseBetween)*1e3;timeoutId=setTimeout(runLoop,totalTime);};runLoop();return()=>{cancelled=true;clearTimeout(timeoutId);controls.forEach(c=>c.stop());// Reset to \"to\" state and clear GPU layers\nsnapToFinal(words,from,to);};},[preview,isClient,isProcessed,animateBy,stagger,staggerDirection,transitionKey,offsetKey,fromKey,toKey,splitRevision,isCanvas]);// —— MARKERS (debug lines) ——\nuseEffect(()=>{if(!markers||!isClient||isStatic||!containerRef.current)return;if(animationMode===\"appear\")return;if(trigger===\"section\"&&!sectionEl)return;const triggerEl=trigger===\"section\"&&sectionEl?sectionEl:containerRef.current;const vpFrac=viewportFraction(viewport);// Container for all marker lines (fixed overlay)\nconst markerContainer=document.createElement(\"div\");markerContainer.className=\"ta-markers\";markerContainer.style.cssText=\"position:fixed;top:0;left:0;right:0;bottom:0;pointer-events:none;z-index:99999;\";const makeLine=(label,color,side)=>{const line=document.createElement(\"div\");line.style.cssText=`\n        position:absolute; left:0; right:0; height:0;\n        border-top:1px dashed ${color};\n      `;const lbl=document.createElement(\"span\");lbl.style.cssText=`\n        position:absolute; ${side}:8px; top:2px;\n        font:600 10px/1 system-ui,sans-serif;\n        color:${color}; background:rgba(0,0,0,0.75);\n        padding:2px 6px; border-radius:3px; white-space:nowrap;\n      `;lbl.textContent=label;line.appendChild(lbl);return line;};// Viewport trigger line — fixed at the viewport fraction\nconst vpLine=makeLine(`viewport \\xb7 ${viewport}`,\"rgba(136,85,255,0.8)\",\"right\");vpLine.style.top=`${vpFrac*100}%`;markerContainer.appendChild(vpLine);// Element start & end lines — track the trigger element on scroll\nconst startLine=makeLine(\"start\",\"rgba(0,200,100,0.8)\",\"left\");const endLine=makeLine(\"end\",\"rgba(255,80,80,0.8)\",\"left\");markerContainer.appendChild(startLine);markerContainer.appendChild(endLine);document.body.appendChild(markerContainer);let markersRafId=0;const update=()=>{if(!triggerEl||!triggerEl.getBoundingClientRect)return;const rect=triggerEl.getBoundingClientRect();startLine.style.top=`${rect.top}px`;endLine.style.top=`${rect.bottom}px`;};const scheduleUpdate=()=>{cancelAnimationFrame(markersRafId);markersRafId=requestAnimationFrame(update);};update();window.addEventListener(\"scroll\",scheduleUpdate,{passive:true});window.addEventListener(\"resize\",scheduleUpdate);let resizeObserver=null;if(typeof ResizeObserver!==\"undefined\"){resizeObserver=new ResizeObserver(()=>{scheduleUpdate();});resizeObserver.observe(triggerEl);}return()=>{cancelAnimationFrame(markersRafId);resizeObserver?.disconnect();markerContainer.remove();window.removeEventListener(\"scroll\",scheduleUpdate);window.removeEventListener(\"resize\",scheduleUpdate);};},[markers,isClient,isStatic,animationMode,trigger,sectionEl,viewport,splitRevision]);// Placeholder when no layer is connected\nif(isCanvas&&!textLayer){return /*#__PURE__*/_jsx(Placeholder,{style:style});}if(!textLayer){return /*#__PURE__*/_jsx(\"div\",{style:{...style,width:\"100%\",height:\"100%\"}});}// Until the first client-side processing pass completes, keep the source\n// copy in normal flow as a visible placeholder. Without it the component\n// is empty during hydration + splitting, so auto-height frames collapse\n// and the content below jumps on every page load.\nconst showPlaceholder=!isStatic&&!isProcessed&&!isResizingRef.current;return /*#__PURE__*/_jsxs(\"div\",{style:{...style,position:\"relative\",width:\"100%\",height:\"100%\"},children:[srText&&/*#__PURE__*/_jsx(\"span\",{style:{position:\"absolute\",width:1,height:1,padding:0,margin:-1,overflow:\"hidden\",clip:\"rect(0,0,0,0)\",whiteSpace:\"nowrap\",border:0},children:srText}),/*#__PURE__*/_jsx(\"div\",{ref:sourceRef,className:\"ta-fill\",\"aria-hidden\":showPlaceholder?undefined:\"true\",style:showPlaceholder?{position:\"relative\",width:\"100%\",pointerEvents:\"none\"}:{position:\"absolute\",width:\"100%\",height:0,overflow:\"hidden\",opacity:0,pointerEvents:\"none\"},children:React.Children.map(textLayer,child=>/*#__PURE__*/React.isValidElement(child)?/*#__PURE__*/React.cloneElement(child,{style:{...child.props.style,width:\"100%\",height:\"auto\"}}):child)}),/*#__PURE__*/_jsx(\"div\",{ref:containerRef,className:\"ta-fill\",\"aria-hidden\":\"true\",style:{width:\"100%\",height:\"100%\",perspective:`${perspective}px`,opacity:isProcessed||isStatic||isResizingRef.current?undefined:0},children:isStatic&&React.Children.map(textLayer,child=>/*#__PURE__*/React.isValidElement(child)?/*#__PURE__*/React.cloneElement(child,{style:{...child.props.style,width:\"100%\",height:\"auto\"}}):child)})]});}TextAnimator.displayName=\"TextAnimator\";TextAnimator.defaultProps={animationMode:\"appear\",appearDelay:0,preview:false,animateBy:\"word\",trigger:\"layer\",viewport:\"center\",replay:false,markers:false,textAlign:\"inherit\",textWrap:\"inherit\",textIndent:0,htmlTag:\"inherit\"};const animStateControls={opacity:{type:ControlType.Number,title:\"Opacity\",defaultValue:1,min:0,max:1,step:.05},color:{type:ControlType.Color,title:\"Color\",optional:true,description:\"Set on one side only to blend with the text's own color.\"},scaleX:{type:ControlType.Number,title:\"Scale X\",defaultValue:1,min:0,max:3,step:.05},scaleY:{type:ControlType.Number,title:\"Scale Y\",defaultValue:1,min:0,max:3,step:.05},blur:{type:ControlType.Number,title:\"Blur\",defaultValue:0,min:0,max:40,step:1},rotateX:{type:ControlType.Number,title:\"Rotate X\",defaultValue:0,min:-360,max:360,step:1,unit:\"\\xb0\"},rotateY:{type:ControlType.Number,title:\"Rotate Y\",defaultValue:0,min:-360,max:360,step:1,unit:\"\\xb0\"},rotateZ:{type:ControlType.Number,title:\"Rotate Z\",defaultValue:0,min:-360,max:360,step:1,unit:\"\\xb0\"},skewX:{type:ControlType.Number,title:\"Skew X\",defaultValue:0,min:-90,max:90,step:1,unit:\"\\xb0\"},skewY:{type:ControlType.Number,title:\"Skew Y\",defaultValue:0,min:-90,max:90,step:1,unit:\"\\xb0\"}};addPropertyControls(TextAnimator,{textLayer:{type:ControlType.ComponentInstance,title:\"Text Layer\"},textAlign:{type:ControlType.Enum,title:\"Text Align\",options:[\"inherit\",\"left\",\"center\",\"right\",\"justify\"],optionTitles:[\"Inherit\",\"Left\",\"Center\",\"Right\",\"Justify\"],defaultValue:\"inherit\",description:\"Override the text layer's alignment.\"},textWrap:{type:ControlType.Enum,title:\"Text Wrap\",options:[\"inherit\",\"wrap\",\"nowrap\",\"balance\",\"pretty\"],optionTitles:[\"Inherit\",\"Wrap\",\"Nowrap\",\"Balance\",\"Pretty\"],defaultValue:\"inherit\",description:\"Override the text layer's wrapping. Balance evens line lengths; Pretty avoids orphans.\"},textIndent:{type:ControlType.Number,title:\"Indent\",defaultValue:0,min:0,max:10,step:.1,unit:\"em\",description:\"First line indent for each paragraph.\"},htmlTag:{type:ControlType.Enum,title:\"HTML Tag\",options:[\"inherit\",\"p\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"span\",\"div\"],optionTitles:[\"Inherit\",\"p\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"span\",\"div\"],defaultValue:\"inherit\",description:\"Override the HTML tag of the text element.\"},animationMode:{type:ControlType.Enum,title:\"Mode\",defaultValue:\"appear\",options:[\"appear\",\"enter\",\"scroll\"],optionTitles:[\"Appear\",\"Enter\",\"Scroll\"],description:\"Appear plays on load. Enter triggers on scroll. Scroll scrubs with scroll.\"},animateBy:{type:ControlType.Enum,title:\"Animate By\",defaultValue:\"word\",options:[\"character\",\"word\",\"line\",\"element\"],optionTitles:[\"Character\",\"Word\",\"Line\",\"Element\"],description:\"Split granularity for the animation.\"},appearDelay:{type:ControlType.Number,title:\"Appear Delay\",defaultValue:0,min:0,max:10,step:.05,unit:\"s\",displayStepper:true,description:\"Extra delay before the animation plays, added on top of the transition delay. Root-level so it can be exposed as a component variable to stagger nested instances.\",hidden:props=>props.animationMode===\"scroll\"},animation:{type:ControlType.Object,title:\"Animation\",buttonTitle:\"Settings\",icon:\"effect\",controls:{transition:{type:ControlType.Transition,title:\"Transition\",description:\"Duration applies to each unit; Stagger offsets each start. In Scroll mode, only easing is used.\",defaultValue:{type:\"tween\",duration:1,ease:[.76,0,.24,1]}},from:{type:ControlType.Object,title:\"From\",optional:true,buttonTitle:\"Properties\",icon:\"effect\",description:\"Initial state of each unit.\",controls:animStateControls},to:{type:ControlType.Object,title:\"To\",optional:true,buttonTitle:\"Properties\",icon:\"effect\",description:\"Final state of each unit.\",controls:animStateControls},offset:{type:ControlType.Object,title:\"Offset\",optional:true,buttonTitle:\"Properties\",description:\"Starting position offset. % is relative to each unit's size.\",controls:{xValue:{type:ControlType.Number,title:\"X\",defaultValue:0,min:-500,max:500,step:1},xUnit:{type:ControlType.Enum,title:\"X Unit\",options:[\"px\",\"%\",\"vw\",\"vh\"],optionTitles:[\"px\",\"%\",\"vw\",\"vh\"],defaultValue:\"px\",displaySegmentedControl:true},yValue:{type:ControlType.Number,title:\"Y\",defaultValue:0,min:-500,max:500,step:1},yUnit:{type:ControlType.Enum,title:\"Y Unit\",options:[\"px\",\"%\",\"vw\",\"vh\"],optionTitles:[\"px\",\"%\",\"vw\",\"vh\"],defaultValue:\"px\",displaySegmentedControl:true}}},origin:{type:ControlType.Object,title:\"Origin\",buttonTitle:\"Properties\",description:\"Transform pivot point.\",controls:{x:{type:ControlType.Number,title:\"X\",defaultValue:50,min:0,max:100,step:1,unit:\"%\"},y:{type:ControlType.Number,title:\"Y\",defaultValue:50,min:0,max:100,step:1,unit:\"%\"}}},perspective:{type:ControlType.Number,title:\"Perspective\",defaultValue:1e3,min:100,max:5e3,step:50,unit:\"px\",description:\"3D depth. Lower = more dramatic.\",hidden(props){const f=props.animation?.from;const t=props.animation?.to;return!f?.rotateX&&!f?.rotateY&&!f?.rotateZ&&!t?.rotateX&&!t?.rotateY&&!t?.rotateZ;}},stagger:{type:ControlType.Number,title:\"Stagger\",defaultValue:.02,min:0,max:1,step:.01,description:\"Delay between each unit. Higher = more cascade.\",hidden(props){return props.animateBy===\"element\";}},staggerDirection:{type:ControlType.Enum,title:\"Direction\",defaultValue:\"forward\",options:[\"forward\",\"reverse\",\"center\",\"edges\",\"random\"],optionTitles:[\"Forward\",\"Reverse\",\"Center Out\",\"Edges In\",\"Random\"],description:\"Order in which units start animating.\",hidden(props){return props.animateBy===\"element\"||(props.animation?.stagger??.02)===0;}},overflow:{type:ControlType.Enum,title:\"Overflow\",defaultValue:\"visible\",options:[\"visible\",\"clipXY\",\"clipX\",\"clipY\"],optionTitles:[\"Visible\",\"Clip X & Y\",\"Clip X\",\"Clip Y\"],description:\"Clip each unit's bounding box for a reveal effect.\"}}},trigger:{type:ControlType.Enum,title:\"Trigger\",options:[\"layer\",\"section\"],optionTitles:[\"Layer in View\",\"Section in View\"],defaultValue:\"layer\",hidden:props=>props.animationMode===\"appear\"},scrollSection:{type:ControlType.ScrollSectionRef,title:\"Section\",description:\"Scroll section that drives the animation.\",hidden:props=>props.animationMode===\"appear\"||props.trigger!==\"section\"},viewport:{type:ControlType.Enum,title:\"Viewport\",options:[\"top\",\"center\",\"bottom\"],optionTitles:[\"Top\",\"Center\",\"Bottom\"],displaySegmentedControl:true,defaultValue:\"center\",description:\"Where the trigger line sits in the viewport.\",hidden:props=>props.animationMode===\"appear\"},replay:{type:ControlType.Boolean,title:\"Replay\",defaultValue:false,description:\"Replay the enter animation on re-entry.\",hidden:props=>props.animationMode!==\"enter\"},markers:{type:ControlType.Boolean,title:\"Markers\",defaultValue:false,description:\"Show debug markers for trigger and element bounds.\",hidden:props=>props.animationMode===\"appear\"},preview:{type:ControlType.Boolean,title:\"Preview\",defaultValue:false,description:\"Made by [Ludovic Losco](https://www.framer.com/%40ludovic-losco/) — This component is licensed exclusively for use within this template. It may not be copied, extracted, modified, redistributed, or resold — whether standalone or as part of another project or template. Unauthorized use constitutes a license violation.\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"TextAnimator\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerDisableUnlink\":\"* @framerIntrinsicWidth 400\",\"framerSupportedLayoutWidth\":\"any-prefer-fixed\",\"framerIntrinsicHeight\":\"200\",\"framerSupportedLayoutHeight\":\"any\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./TextAnimator.map"],"mappings":"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"}