{"version":3,"file":"TextAnimator.Bh538Bb3.mjs","names":["p","u","split","useMemo","useRef","useState","rafId","tick","onScroll"],"sources":["https:/framerusercontent.com/modules/lWFUjlOVgMTJwM5wMIKZ/QDywRV8qeJevXCFYxqQi/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,useState,useMemo}from\"react\";import{addPropertyControls,ControlType,RenderTarget,useIsStaticRenderer}from\"framer\";import{animate}from\"framer-motion\";// — 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;};}function easingFnFromTransition(transition){const ease=transition?.ease;if(Array.isArray(ease)&&ease.length===4){return solveCubicBezier(ease[0],ease[1],ease[2],ease[3]);}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 start=rect.top-vpY;const end=rect.bottom-vpY;const range=end-start;if(range<=0)return 1;return Math.max(0,Math.min(1,-start/range));}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};}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\");}}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)`;}// — 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;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;}function splitWithGSAP(element,mode,offset,from,to,animStateRef,transformOrigin,overflow,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\";});}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\";if(computedAlign===\"justify\"&&i<units.length-1){unit.style.textAlignLast=\"justify\";}}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\";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;// @ts-ignore\nconst split=plugin.create(element,options);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};}function resetAllToFrom(words,xVal,xUnit,yVal,yUnit,from,to){words.forEach(word=>{const fx=resolveUnit(xVal,xUnit,word.offsetWidth);const fy=resolveUnit(yVal,yUnit,word.offsetHeight);applyWordStyle(word,0,fx,fy,from,to);});}function runStaggeredAnimation(words,n,xVal,xUnit,yVal,yUnit,from,to,transition,unitDur,stagger,staggerDirection,onAllComplete){const ctrls=[];// 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;}}words.forEach((word,i)=>{const fx=resolveUnit(xVal,xUnit,word.offsetWidth);const fy=resolveUnit(yVal,yUnit,word.offsetHeight);const delay=delays[i];const ctrl=animate(0,1,{...transition,duration:unitDur,delay,onUpdate(p){applyWordStyle(word,p,fx,fy,from,to);},onComplete:i===lastIndex?onAllComplete:undefined});ctrls.push(ctrl);});return ctrls;}// — 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\",preview=false,animateBy=\"word\",trigger=\"layer\",viewport=\"center\",replay=false,markers=false,animation,textAlign=\"inherit\",textWrap=\"inherit\",htmlTag=\"inherit\",style}=props;const fromRaw=animation?.from??{opacity:1,scaleX:1,scaleY:1,blur:0,rotateX:0,rotateY:0,rotateZ:0,skewX:0,skewY:0};const toRaw=animation?.to??{opacity:1,scaleX:1,scaleY:1,blur:0,rotateX:0,rotateY:0,rotateZ:0,skewX:0,skewY:0};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 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();};},[]);// 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,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);},200);};const scheduleSplitRetry=()=>{if(splitRetryAttemptsRef.current>=4)return;const attempt=++splitRetryAttemptsRef.current;const delay=Math.min(8e3,500*2**(attempt-1));if(splitRetryTimeoutRef.current!==null){window.clearTimeout(splitRetryTimeoutRef.current);}splitRetryTimeoutRef.current=window.setTimeout(()=>{splitRetryTimeoutRef.current=null;isResizingRef.current=true;setIsProcessed(false);},delay);};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(!plugin?.create||cancelled){container.innerHTML=source.innerHTML;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 rawTextElements=findTextElements(container);if(rawTextElements.length===0||cancelled){setIsProcessed(true);return;}const textElements=htmlTag&&htmlTag!==\"inherit\"?rawTextElements.map(el=>replaceElementTag(el,htmlTag)):rawTextElements;if(textAlign&&textAlign!==\"inherit\"){textElements.forEach(el=>{el.style.textAlign=textAlign;});}if(textWrap&&textWrap!==\"inherit\"){textElements.forEach(el=>{el.style.textWrap=textWrap;});}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,queueSplitRevisionBump);if(handle)handles.push(handle);});splitTextRef.current=combineSplitHandles(handles);}if(animateBy!==\"element\"&&!splitTextRef.current){container.innerHTML=source.innerHTML;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,textAlign,textWrap,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||!isProcessed)return;const mo=new MutationObserver(()=>{setIsProcessed(false);});mo.observe(sourceRef.current,{childList:true,characterData:true,subtree:true});return()=>mo.disconnect();},[isClient,isStatic,isProcessed]);// —— 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;const{words}=targets;words.forEach(word=>{applyWordStyle(word,1,0,0,from,to);word.style.willChange=\"auto\";});},[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;});},[isCanvas,preview,textAlign,textWrap]);// —— 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\"){words.forEach(w=>{applyWordStyle(w,1,0,0,from,to);w.style.willChange=\"auto\";});animStateRef.current=\"played\";return;}const totalStagger=(n-1)*stagger;const unitDur=Math.max(.05,dur-totalStagger);const controls=runStaggeredAnimation(words,n,xVal,xUnit,yVal,yUnit,from,to,transition,unitDur,stagger,staggerDirection,()=>{animStateRef.current=\"played\";words.forEach(w=>{w.style.willChange=\"auto\";w.style.removeProperty(\"filter\");});});return()=>{controls.forEach(c=>c.stop());words.forEach(w=>{w.style.willChange=\"auto\";});};},[isClient,isStatic,isProcessed,animationMode,animateBy,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){words.forEach(w=>{applyWordStyle(w,1,0,0,from,to);w.style.willChange=\"auto\";});animStateRef.current=\"played\";return;}const totalStagger=(n-1)*stagger;const unitDur=Math.max(.05,dur-totalStagger);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\"){words.forEach(w=>{applyWordStyle(w,1,0,0,from,to);w.style.willChange=\"auto\";});playing=true;}else{// Normal: reset to initial state\nresetAllToFrom(words,xVal,xUnit,yVal,yUnit,from,to);}// Check if the trigger element's top has crossed the viewport line.\nconst hasCrossed=()=>{const rect=triggerEl.getBoundingClientRect();const vpY=cachedVH*vpFrac;return rect.top<=vpY;};const play=()=>{playing=true;controls=runStaggeredAnimation(words,n,xVal,xUnit,yVal,yUnit,from,to,transition,unitDur,stagger,staggerDirection,()=>{animStateRef.current=\"played\";words.forEach(w=>{w.style.willChange=\"auto\";w.style.removeProperty(\"filter\");});});};const reset=()=>{playing=false;animStateRef.current=\"idle\";controls.forEach(c=>c.stop());controls=[];resetAllToFrom(words,xVal,xUnit,yVal,yUnit,from,to);words.forEach(w=>{w.style.willChange=\"transform, opacity, filter\";});};// 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,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);// 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,w.offsetWidth));let fyArr=Array.from(words,w=>resolveUnit(yVal,yUnit,w.offsetHeight));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,w.offsetWidth));fyArr=Array.from(words,w=>resolveUnit(yVal,yUnit,w.offsetHeight));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=>w.offsetWidth);const elHeights=Array.from(words,w=>w.offsetHeight);// 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=()=>{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]=words[i].offsetWidth;elHeights[i]=words[i].offsetHeight;}computeOffsets();// Invalidate previous progress so all elements re-render\nprevEased.fill(-1);tick();};tick();window.addEventListener(\"scroll\",onScroll,{passive:true});window.addEventListener(\"resize\",onResize);return()=>{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){words.forEach(w=>{applyWordStyle(w,1,0,0,from,to);w.style.willChange=\"auto\";});return;}const totalStagger=(n-1)*stagger;const unitDur=Math.max(.05,dur-totalStagger);const baseDelay=transition?.delay??0;const pauseBetween=.8// seconds pause between loops\n;// 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\nwords.forEach(word=>{applyWordStyle(word,1,0,0,from,to);word.style.willChange=\"auto\";});};},[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%\"}});}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\":\"true\",style:{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\",preview:false,animateBy:\"word\",trigger:\"layer\",viewport:\"center\",replay:false,markers:false,textAlign:\"inherit\",textWrap:\"inherit\",htmlTag:\"inherit\"};const animStateControls={opacity:{type:ControlType.Number,title:\"Opacity\",defaultValue:1,min:0,max:1,step:.05},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.\"},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.\"},animation:{type:ControlType.Object,title:\"Animation\",buttonTitle:\"Settings\",icon:\"effect\",controls:{transition:{type:ControlType.Transition,title:\"Transition\",description:\"Duration and easing. 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\":{\"framerIntrinsicHeight\":\"200\",\"framerContractVersion\":\"1\",\"framerDisableUnlink\":\"* @framerIntrinsicWidth 400\",\"framerSupportedLayoutWidth\":\"any-prefer-fixed\",\"framerSupportedLayoutHeight\":\"any\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./TextAnimator.map"],"mappings":"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"}