{"version":3,"file":"TextCycle.B3SeVadU.mjs","names":["useMemo","useState","useRef","startTransition","React.useCallback","React.Fragment","_jsx","useLayoutEffect","useEffect"],"sources":["https:/framerusercontent.com/modules/XMc0h7Bt2ZLzjZlATc5j/bqREwd1rDPGOGSQyhUDc/TextCycle.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{useEffect,useLayoutEffect,useMemo,useRef,useState,startTransition}from\"react\";import{addPropertyControls,ControlType,RenderTarget,useIsStaticRenderer}from\"framer\";import{AnimatePresence,motion}from\"framer-motion\";// useLayoutEffect warns during SSR; fall back to useEffect on the server\nconst useIsomorphicLayoutEffect=typeof window!==\"undefined\"?useLayoutEffect:useEffect;function mapsEqual(a,b){if(a.size!==b.size)return false;for(const[k,v]of a){if(b.get(k)!==v)return false;}return true;}function mod(n,m){return(n%m+m)%m;}function viewportFraction(position){if(position===\"top\")return 0;if(position===\"bottom\")return 1;return .5;}// Extract the HTMLElement from Framer's ControlType.ScrollSectionRef value.\n// Depending on the render path it can be a mutable ref, a raw element, or\n// unresolved until a frame after mount.\nfunction resolveSectionEl(scrollSectionRef){const raw=scrollSectionRef.current;const el=raw?.current??raw;return typeof HTMLElement!==\"undefined\"&&el instanceof HTMLElement?el:null;}// Progress 0→1 while the selected section crosses the chosen viewport line.\nfunction getScrollProgress(el,vpFraction){const rect=el.getBoundingClientRect();const vh=window.innerHeight||document.documentElement.clientHeight;const range=rect.height;if(range<=0)return 1;const vpY=vh*vpFraction;let p=(vpY-rect.top)/range;// A section near the end of the page may not be able to reach the viewport\n// line. Shift its window earlier so the last phrase remains reachable.\nconst doc=document.documentElement;const remaining=Math.max(0,doc.scrollHeight-vh-(window.scrollY||doc.scrollTop||0));const pAtEnd=(vpY-(rect.top-remaining))/range;if(pAtEnd<1)p+=1-pAtEnd;return Math.max(0,Math.min(1,p));}function splitWords(phrase){return phrase.split(/\\s+/).filter(Boolean);}function makeUnits(words,cycle){return words.map((w,j)=>({id:`${cycle}:${j}:${w}`,text:w}));}// Longest-common-subsequence match between the previous phrase's words and\n// the next phrase's words. Returns a map of next-index → prev-index for\n// every word that exists in both, preserving order. Matched words keep\n// their identity (React key) so they slide instead of re-animating.\nfunction lcsMatch(a,b){const m=a.length;const n=b.length;const dp=Array.from({length:m+1},()=>new Array(n+1).fill(0));for(let i=m-1;i>=0;i--){for(let j=n-1;j>=0;j--){dp[i][j]=a[i]===b[j]?dp[i+1][j+1]+1:Math.max(dp[i+1][j],dp[i][j+1]);}}const match=new Map;let i=0;let j=0;while(i<m&&j<n){if(a[i]===b[j]){match.set(j,i);i++;j++;}else if(dp[i+1][j]>=dp[i][j+1]){i++;}else{j++;}}return match;}function nextUnits(prev,words,cycle,keepShared){if(!keepShared)return makeUnits(words,cycle);const match=lcsMatch(prev.map(u=>u.text),words);return words.map((w,j)=>{const pi=match.get(j);return pi!==undefined?prev[pi]:{id:`${cycle}:${j}:${w}`,text:w};});}// — COMPONENT —\n/**\n * TEXT CYCLE\n *\n * Cycles through phrases with configurable enter/exit animations,\n * staggered by word, character, wrapped line, or the whole phrase.\n * Words shared between consecutive phrases keep their identity: they\n * don't re-animate, they slide to their new position instead. Optional\n * tint highlights the words that change between phrases. Phrases can\n * advance on a timer or as discrete steps driven by a referenced Framer\n * scroll section. In timer mode, the first phrase can optionally play the\n * enter animation when it scrolls into view.\n *\n * @framerDisableUnlink\n * @framerIntrinsicWidth 600\n * @framerIntrinsicHeight 120\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight any\n */export default function TextCycle(props){const{phrases,font,color,highlight,highlightColor,align,splitBy,lineMotion,keepShared,advanceMode,interval,scrollSection,viewport,stagger,loop,appear,enter,exit,transition,style}=props;const isStatic=useIsStaticRenderer();const isCanvas=RenderTarget.current()===RenderTarget.canvas;const list=useMemo(()=>Array.isArray(phrases)?phrases.filter(p=>typeof p===\"string\"&&p.trim().length>0):[],[phrases]);const phrasesKey=list.join(\"\\x00\");const count=list.length;const isScrollMode=advanceMode===\"scroll\";const[state,setState]=useState(()=>({cycle:0,index:0,direction:1,units:makeUnits(splitWords(list[0]??\"\"),0)}));const[reducedMotion,setReducedMotion]=useState(false);// Line mode: words are grouped by their measured visual line so every\n// word on the same (wrapped) line shares one stagger slot.\nconst containerRef=useRef(null);const wordRefs=useRef(new Map);const[lineOf,setLineOf]=useState(()=>new Map);const indexRef=useRef(0);const directionRef=useRef(1);indexRef.current=state.index;directionRef.current=isScrollMode&&state.direction<0?-1:1;// ScrollSectionRef is updated by Framer during scrolling. Keep the property\n// value in a ref and expose only the resolved HTMLElement to the scroll\n// effect so that effect does not tear down on every prop update.\nconst scrollSectionRef=useRef(scrollSection);scrollSectionRef.current=scrollSection;const[sectionEl,setSectionEl]=useState(()=>resolveSectionEl(scrollSectionRef));useEffect(()=>{if(!isScrollMode||!scrollSection){setSectionEl(null);return;}const el=resolveSectionEl(scrollSectionRef);if(el){setSectionEl(el);return;}// Framer can attach the element to its stable ref asynchronously.\nsetSectionEl(null);let rafId=0;const poll=()=>{const resolved=resolveSectionEl(scrollSectionRef);if(resolved){setSectionEl(resolved);return;}rafId=requestAnimationFrame(poll);};rafId=requestAnimationFrame(poll);return()=>cancelAnimationFrame(rafId);},[isScrollMode,scrollSection]);// Appear mode: the first phrase stays hidden until the component\n// enters the viewport, then plays the enter animation\nconst[started,setStarted]=useState(false);// Words present in every phrase — these never get the highlight tint\nconst sharedEverywhere=useMemo(()=>{if(count===0)return new Set;let set=new Set(splitWords(list[0]));for(let i=1;i<count;i++){const other=new Set(splitWords(list[i]));set=new Set([...set].filter(w=>other.has(w)));}return set;},[phrasesKey]);useEffect(()=>{const mql=window.matchMedia(\"(prefers-reduced-motion: reduce)\");const update=()=>startTransition(()=>setReducedMotion(mql.matches));update();mql.addEventListener(\"change\",update);return()=>mql.removeEventListener(\"change\",update);},[]);// Reset to the first phrase when the phrase list is edited\nconst mounted=useRef(false);useEffect(()=>{if(!mounted.current){mounted.current=true;return;}indexRef.current=0;setState({cycle:0,index:0,direction:1,units:makeUnits(splitWords(list[0]??\"\"),0)});},[phrasesKey]);// Change phrase as one discrete state transition. Scroll direction is kept\n// so upward scrolling can mirror the enter and exit travel.\nconst goToIndex=React.useCallback(nextIndex=>{if(count<1)return;const clamped=Math.max(0,Math.min(count-1,nextIndex));if(clamped===indexRef.current)return;indexRef.current=clamped;setState(prev=>{if(clamped===prev.index)return prev;const cycle=prev.cycle+1;return{cycle,index:clamped,direction:clamped>prev.index?1:-1,units:nextUnits(prev.units,splitWords(list[clamped]),cycle,keepShared)};});},[count,keepShared,list]);// Measure which visual line each current word sits on. offsetTop is\n// unaffected by transforms, and exiting (absolutely positioned) words\n// are excluded because only current units are read.\nconst measureLines=()=>{const tops=[];for(const u of state.units){const el=wordRefs.current.get(u.id);if(el)tops.push({id:u.id,top:el.offsetTop});}tops.sort((a,b)=>a.top-b.top);const next=new Map;let line=-1;let lastTop=-Infinity;for(const{id,top}of tops){if(Math.abs(top-lastTop)>1){line++;lastTop=top;}next.set(id,line);}setLineOf(prev=>mapsEqual(prev,next)?prev:next);};const measureRef=useRef(measureLines);measureRef.current=measureLines;// Re-measure before paint whenever the phrase changes, so entering\n// words get their line-based stagger delay from the first frame\nuseIsomorphicLayoutEffect(()=>{if(splitBy!==\"line\"||isStatic)return;measureRef.current();},[state,splitBy,isStatic,font]);// Re-measure when the container resizes and wrapping may change\nuseEffect(()=>{if(splitBy!==\"line\"||isStatic)return;const el=containerRef.current;if(!el)return;const observer=new ResizeObserver(()=>measureRef.current());observer.observe(el);return()=>observer.disconnect();},[splitBy,isStatic]);// A webfont can change wrapping without changing the component's width.\nuseEffect(()=>{if(splitBy!==\"line\"||isStatic)return;const fonts=document?.fonts;if(!fonts?.ready)return;let cancelled=false;fonts.ready.then(()=>{if(!cancelled)measureRef.current();});return()=>{cancelled=true;};},[splitBy,isStatic]);// Appear trigger: reveal once the component enters the viewport\nuseEffect(()=>{if(isScrollMode||!appear||isStatic||started)return;const el=containerRef.current;if(!el||typeof IntersectionObserver===\"undefined\"){startTransition(()=>setStarted(true));return;}const observer=new IntersectionObserver(entries=>{for(const entry of entries){if(entry.isIntersecting){startTransition(()=>setStarted(true));observer.disconnect();break;}}},{threshold:.1});observer.observe(el);return()=>observer.disconnect();},[isScrollMode,appear,isStatic,started]);// Auto-advance — with appear enabled, cycling waits for the reveal\nuseEffect(()=>{if(isStatic||isScrollMode||count<2)return;if(appear&&!started)return;const id=window.setInterval(()=>{if(document.hidden)return;startTransition(()=>{setState(prev=>{if(!loop&&prev.index>=count-1)return prev;const nextIndex=mod(prev.index+1,count);const cycle=prev.cycle+1;return{cycle,index:nextIndex,direction:1,units:nextUnits(prev.units,splitWords(list[nextIndex]),cycle,keepShared)};});});},Math.max(.5,interval)*1e3);return()=>window.clearInterval(id);},[isStatic,isScrollMode,count,interval,loop,keepShared,phrasesKey,appear,started]);// Scroll advance — the selected Framer section drives the active phrase.\n// Progress only chooses the phrase; the enter/exit transition itself remains\n// time-based, so this is a discrete swap rather than a scrub.\nuseEffect(()=>{if(isStatic||isCanvas||!isScrollMode||count<2||!sectionEl)return;const measure=()=>{const progress=getScrollProgress(sectionEl,viewportFraction(viewport));const nextIndex=Math.max(0,Math.min(count-1,Math.floor(progress*count)));goToIndex(nextIndex);};measure();window.addEventListener(\"scroll\",measure,{passive:true});window.addEventListener(\"resize\",measure);return()=>{window.removeEventListener(\"scroll\",measure);window.removeEventListener(\"resize\",measure);};},[isStatic,isCanvas,isScrollMode,count,sectionEl,viewport,goToIndex]);// Canvas placeholder when empty\nif(count===0){return /*#__PURE__*/_jsx(\"div\",{style:{...style,display:\"flex\",alignItems:\"center\",justifyContent:\"center\",borderRadius:8,background:\"rgba(136, 85, 255, 0.1)\",color:\"#85F\",fontSize:13,fontWeight:500},children:isCanvas?\"Add phrases in the properties panel\":null});}const justifyContent=align===\"center\"?\"center\":align===\"right\"?\"flex-end\":\"flex-start\";const containerStyle={...style,position:\"relative\",display:\"flex\",flexWrap:\"wrap\",alignItems:\"baseline\",alignContent:\"center\",justifyContent,columnGap:\"0.3em\",...font,color,margin:0};const tintFor=word=>highlight&&!sharedEverywhere.has(word)?highlightColor:undefined;// Canvas/export: render the first phrase, no animation. A single\n// phrase also renders statically unless it has an appear animation.\nif(isStatic||count===1&&(!appear||isScrollMode)){return /*#__PURE__*/_jsx(\"div\",{style:containerStyle,children:splitWords(list[0]).map((w,i)=>/*#__PURE__*/_jsx(\"span\",{style:{display:\"inline-block\",whiteSpace:\"pre\",color:tintFor(w)},children:w},i))});}const rm=reducedMotion;const t=transition??{};// Before the appear trigger fires, units render at their hidden state\n// (no animation, thanks to AnimatePresence initial={false}); flipping\n// to \"visible\" plays the enter animation with its normal stagger.\nconst animateLabel=!isScrollMode&&appear&&!started?\"hidden\":\"visible\";// Match StickyFeatures: reverse scroll mirrors directional travel while\n// preserving the Enter and Exit roles, timing, and non-directional values.\nconst direction=directionRef.current;// Line mode follows StickyFeatures more closely than the word-based modes:\n// measure the real wrapped lines, render each one inside its own clipping\n// mask, and travel by a percentage of that line's height. The outgoing\n// variant reads directionRef at exit time because AnimatePresence retains\n// the previous render's element after the scroll direction has changed.\nif(splitBy===\"line\"){const settings={mask:lineMotion?.mask??true,bleed:Math.max(0,lineMotion?.bleed??.12),offset:Math.max(0,lineMotion?.offset??100)};const lines=[];for(const unit of state.units){const line=lineOf.get(unit.id)??0;if(!lines[line])lines[line]=[];lines[line].push(unit);}const hiddenOpacity=enter.opacity;const maskStyle=settings.mask?{display:\"block\",clipPath:`inset(${-settings.bleed}em -100vw)`}:{display:\"block\"};const lineVariants={hidden:{opacity:hiddenOpacity,x:rm?0:enter.x*direction,y:rm?\"0%\":`${settings.offset*direction}%`,scale:rm?1:enter.scale,rotate:rm?0:enter.rotate*direction,filter:`blur(${rm?0:enter.blur}px)`},visible:i=>({opacity:1,x:0,y:\"0%\",scale:1,rotate:0,filter:\"blur(0px)\",transition:{...t,delay:(enter.delay??0)+i*stagger}}),exit:i=>{const exitDirection=directionRef.current;return{opacity:exit.opacity,x:rm?0:exit.x*exitDirection,y:rm?\"0%\":`${-settings.offset*exitDirection}%`,scale:rm?1:exit.scale,rotate:rm?0:exit.rotate*exitDirection,filter:`blur(${rm?0:exit.blur}px)`,transition:{...t,delay:(exit.delay??0)+i*stagger}};}};return /*#__PURE__*/_jsxs(\"div\",{ref:containerRef,style:{...containerStyle,display:\"flex\",flexDirection:\"column\",flexWrap:\"nowrap\",alignItems:\"stretch\",justifyContent:\"center\",columnGap:0,textAlign:align},children:[/*#__PURE__*/_jsx(\"div\",{\"aria-hidden\":\"true\",style:{position:\"absolute\",top:0,left:0,width:\"100%\",visibility:\"hidden\",pointerEvents:\"none\",whiteSpace:\"normal\",textAlign:align},children:state.units.map((unit,i)=>/*#__PURE__*/_jsxs(React.Fragment,{children:[/*#__PURE__*/_jsx(\"span\",{ref:el=>{if(el)wordRefs.current.set(unit.id,el);else wordRefs.current.delete(unit.id);},\"data-w\":\"\",style:{display:\"inline\"},children:unit.text}),i<state.units.length-1?\" \":null]},unit.id))}),/*#__PURE__*/_jsx(AnimatePresence,{mode:\"popLayout\",initial:false,children:/*#__PURE__*/_jsx(motion.div,{initial:\"hidden\",animate:animateLabel,exit:\"exit\",style:{width:\"100%\"},children:lines.map((line,i)=>/*#__PURE__*/_jsx(\"span\",{style:maskStyle,children:/*#__PURE__*/_jsx(motion.span,{custom:i,variants:lineVariants,style:{display:\"block\",whiteSpace:\"nowrap\",willChange:\"transform, opacity, filter\"},children:line.map((unit,wordIndex)=>/*#__PURE__*/_jsxs(React.Fragment,{children:[wordIndex>0?\" \":null,/*#__PURE__*/_jsx(\"span\",{style:{color:tintFor(unit.text)},children:unit.text})]},unit.id))})},i))},`${state.index}:${state.cycle}`)})]});}const unitVariants={hidden:{opacity:enter.opacity,x:rm?0:enter.x*direction,y:rm?0:enter.y*direction,scale:rm?1:enter.scale,rotate:rm?0:enter.rotate*direction,filter:`blur(${rm?0:enter.blur}px)`},visible:c=>({opacity:1,x:0,y:0,scale:1,rotate:0,filter:\"blur(0px)\",transition:{...t,delay:(enter.delay??0)+c*stagger}}),exit:c=>{const exitDirection=directionRef.current;return{opacity:exit.opacity,x:rm?0:exit.x*exitDirection,y:rm?0:exit.y*exitDirection,scale:rm?1:exit.scale,rotate:rm?0:exit.rotate*exitDirection,filter:`blur(${rm?0:exit.blur}px)`,transition:{...t,delay:(exit.delay??0)+c*stagger}};}};// Flat index across the phrase drives the stagger in reading order.\n// Words (or characters, in character mode) all advance the index, so\n// static words keep their spatial slot in the stagger sequence. Line\n// mode replaces the index with the word's measured line; element mode\n// animates everything as one group.\nlet flat=0;const rendered=state.units.map(u=>{const base=flat;const chars=Array.from(u.text);flat+=splitBy===\"character\"?chars.length:1;const tint=tintFor(u.text);const staggerIndex=splitBy===\"line\"?lineOf.get(u.id)??0:splitBy===\"element\"?0:base;if(splitBy===\"character\"){return /*#__PURE__*/_jsx(motion.span,{layout:rm?false:\"position\",initial:\"hidden\",animate:animateLabel,exit:\"exit\",transition:{layout:t},style:{display:\"inline-block\",whiteSpace:\"pre\",color:tint},children:chars.map((ch,ci)=>/*#__PURE__*/_jsx(motion.span,{custom:base+ci,variants:unitVariants,style:{display:\"inline-block\",willChange:\"transform, opacity, filter\"},children:ch},ci))},u.id);}return /*#__PURE__*/_jsx(motion.span,{ref:el=>{if(el)wordRefs.current.set(u.id,el);else wordRefs.current.delete(u.id);},layout:rm?false:\"position\",custom:staggerIndex,variants:unitVariants,initial:\"hidden\",animate:animateLabel,exit:\"exit\",transition:{layout:t},style:{display:\"inline-block\",whiteSpace:\"pre\",color:tint,willChange:\"transform, opacity, filter\"},children:u.text},u.id);});const text=/*#__PURE__*/_jsx(\"div\",{ref:containerRef,style:containerStyle,children:/*#__PURE__*/_jsx(AnimatePresence,{mode:\"popLayout\",initial:false,children:rendered})});return text;}TextCycle.displayName=\"Text Cycle\";TextCycle.defaultProps={phrases:[\"Build without limits\",\"Build without code\",\"Build without friction\"],color:\"#111111\",highlight:true,highlightColor:\"#8855FF\",align:\"center\",splitBy:\"word\",lineMotion:{mask:true,bleed:.12,offset:100},keepShared:true,advanceMode:\"timer\",interval:2.4,viewport:\"center\",stagger:.05,loop:true,appear:false,enter:{delay:0,x:0,y:24,scale:1,rotate:0,blur:6,opacity:0},exit:{delay:0,x:0,y:-24,scale:1,rotate:0,blur:6,opacity:0},transition:{type:\"spring\",stiffness:320,damping:34}};addPropertyControls(TextCycle,{phrases:{type:ControlType.Array,title:\"Phrases\",control:{type:ControlType.String,defaultValue:\"New phrase\"},defaultValue:TextCycle.defaultProps.phrases},font:{type:ControlType.Font,title:\"Font\",controls:\"extended\",defaultValue:{fontFamily:\"Inter\",fontWeight:600,fontSize:48,lineHeight:\"1.2em\"}},color:{type:ControlType.Color,title:\"Color\",defaultValue:\"#111111\"},highlight:{type:ControlType.Boolean,title:\"Cycling\",enabledTitle:\"Tint\",disabledTitle:\"Inherit\",defaultValue:true,description:\"Tints the words that change between phrases.\"},highlightColor:{type:ControlType.Color,title:\"Tint\",defaultValue:\"#8855FF\",hidden:props=>!props.highlight},align:{type:ControlType.Enum,title:\"Align\",options:[\"left\",\"center\",\"right\"],optionTitles:[\"Left\",\"Center\",\"Right\"],displaySegmentedControl:true,defaultValue:\"center\"},splitBy:{type:ControlType.Enum,title:\"Animate\",options:[\"word\",\"character\",\"line\",\"element\"],optionTitles:[\"Word\",\"Character\",\"Line\",\"Element\"],defaultValue:\"word\",description:\"Line staggers by wrapped line. Element animates the whole phrase at once.\"},lineMotion:{type:ControlType.Object,title:\"Line Motion\",controls:{mask:{type:ControlType.Boolean,title:\"Mask\",defaultValue:true,description:\"Clip each measured line while it enters and exits.\"},bleed:{type:ControlType.Number,title:\"Mask Bleed\",defaultValue:.12,min:0,max:.5,step:.01,unit:\"em\",description:\"Extra vertical room for ascenders and descenders.\",hidden:props=>!(props.lineMotion?.mask??props.mask??true)},offset:{type:ControlType.Number,title:\"Offset\",defaultValue:100,min:0,max:200,step:5,unit:\"%\",description:\"Vertical travel as a percentage of each measured line's height.\"}},hidden:props=>props.splitBy!==\"line\"},keepShared:{type:ControlType.Boolean,title:\"Shared Words\",enabledTitle:\"Keep\",disabledTitle:\"Cycle\",defaultValue:true,description:\"Words identical between phrases stay in place and slide to their new position instead of re-animating.\",hidden:props=>props.splitBy===\"line\"},advanceMode:{type:ControlType.Enum,title:\"Advance\",options:[\"timer\",\"scroll\"],optionTitles:[\"Timer\",\"Scroll\"],defaultValue:\"timer\",displaySegmentedControl:true,description:\"Timer cycles automatically. Scroll changes phrases as the selected section crosses the viewport.\"},interval:{type:ControlType.Number,title:\"Interval\",defaultValue:2.4,min:.5,max:20,step:.1,unit:\"s\",description:\"Time each phrase stays visible.\",hidden:props=>(props.advanceMode??\"timer\")!==\"timer\"},scrollSection:{type:ControlType.ScrollSectionRef,title:\"Section\",description:\"Scroll section that drives the phrase changes.\",hidden:props=>(props.advanceMode??\"timer\")!==\"scroll\"},viewport:{type:ControlType.Enum,title:\"Viewport\",options:[\"top\",\"center\",\"bottom\"],optionTitles:[\"Top\",\"Center\",\"Bottom\"],defaultValue:\"center\",displaySegmentedControl:true,description:\"Viewport line used to measure progress through the selected section.\",hidden:props=>(props.advanceMode??\"timer\")!==\"scroll\"},stagger:{type:ControlType.Number,title:\"Stagger\",defaultValue:.05,min:0,max:.3,step:.01,unit:\"s\",description:\"Delay between each word, character, or line when animating.\",hidden:props=>props.splitBy===\"element\"},loop:{type:ControlType.Boolean,title:\"Loop\",enabledTitle:\"On\",disabledTitle:\"Off\",defaultValue:true,hidden:props=>(props.advanceMode??\"timer\")!==\"timer\"},appear:{type:ControlType.Boolean,title:\"Appear\",enabledTitle:\"Animate\",disabledTitle:\"Instant\",defaultValue:false,description:\"Plays the enter animation on the first phrase when the component scrolls into view. Cycling starts after the reveal.\",hidden:props=>(props.advanceMode??\"timer\")!==\"timer\"},enter:{type:ControlType.Object,title:\"Enter\",controls:{delay:{type:ControlType.Number,title:\"Delay\",defaultValue:0,min:0,max:5,step:.05,unit:\"s\"},x:{type:ControlType.Number,title:\"X\",defaultValue:0,min:-300,max:300,step:1,unit:\"px\"},y:{type:ControlType.Number,title:\"Y\",defaultValue:24,min:-300,max:300,step:1,unit:\"px\",hidden:props=>props.splitBy===\"line\"},scale:{type:ControlType.Number,title:\"Scale\",defaultValue:1,min:0,max:3,step:.05},rotate:{type:ControlType.Number,title:\"Rotate\",defaultValue:0,min:-360,max:360,step:1,unit:\"\\xb0\"},blur:{type:ControlType.Number,title:\"Blur\",defaultValue:6,min:0,max:60,step:1,unit:\"px\"},opacity:{type:ControlType.Number,title:\"Opacity\",defaultValue:0,min:0,max:1,step:.05}}},exit:{type:ControlType.Object,title:\"Exit\",controls:{delay:{type:ControlType.Number,title:\"Delay\",defaultValue:0,min:0,max:5,step:.05,unit:\"s\"},x:{type:ControlType.Number,title:\"X\",defaultValue:0,min:-300,max:300,step:1,unit:\"px\"},y:{type:ControlType.Number,title:\"Y\",defaultValue:-24,min:-300,max:300,step:1,unit:\"px\",hidden:props=>props.splitBy===\"line\"},scale:{type:ControlType.Number,title:\"Scale\",defaultValue:1,min:0,max:3,step:.05},rotate:{type:ControlType.Number,title:\"Rotate\",defaultValue:0,min:-360,max:360,step:1,unit:\"\\xb0\"},blur:{type:ControlType.Number,title:\"Blur\",defaultValue:6,min:0,max:60,step:1,unit:\"px\"},opacity:{type:ControlType.Number,title:\"Opacity\",defaultValue:0,min:0,max:1,step:.05}}},transition:{type:ControlType.Transition,title:\"Transition\",defaultValue:{type:\"spring\",stiffness:320,damping:34},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\":\"TextCycle\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutWidth\":\"any\",\"framerIntrinsicHeight\":\"120\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutHeight\":\"any\",\"framerDisableUnlink\":\"* @framerIntrinsicWidth 600\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./TextCycle.map"],"mappings":"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"}