{"version":3,"file":"TextMotion.AzST_ph3.mjs","names":["useRef","useState","useMemo","startTransition","useId"],"sources":["https:/framerusercontent.com/modules/QZy8U2QWEVDAPhbbl3Vi/oyQpMWKHoeJxc8eGpqKt/TextMotion.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{startTransition,useEffect,useId,useMemo,useRef,useState}from\"react\";import{addPropertyControls,ControlType,RenderTarget,useIsStaticRenderer}from\"framer\";import{motion,useInView}from\"framer-motion\";/** Every preset is a diff against this, so the table below stays readable. */const BASE={splitBy:\"word\",effect:\"transform\",amount:0,detail:10,settle:1.8,chaos:0,z:0,x:0,y:0,opacity:0,blur:0,scale:1,scaleX:1,scaleY:1,rotate:0,rotateX:0,rotateY:0,skewX:0,origin:\"center\",clip:false,order:\"forward\",duration:.7,stagger:.03,easing:\"smooth\"};/** 37 recipes, grouped by family. \"custom\" is absent — it falls through to the props. */const PRESETS={// Movement\nfade:{y:18,duration:.6,stagger:.04},rise:{splitBy:\"line\",y:80,duration:.8,stagger:.12,easing:\"spring\"},drop:{splitBy:\"character\",y:-60,duration:.7,stagger:.02,easing:\"spring\"},slide:{x:-60,duration:.7,stagger:.05},// Softness\nsplit:{splitBy:\"character\",y:48,blur:8,duration:.7,stagger:.02,easing:\"spring\"},blur:{blur:14,duration:.9,stagger:.06},focus:{splitBy:\"character\",blur:18,scale:1.15,duration:.8,stagger:.02},// Reveal\nmask:{splitBy:\"line\",clip:true,y:100,duration:.9,stagger:.12,easing:\"snappy\"},curtain:{clip:true,y:100,duration:.7,stagger:.05,easing:\"snappy\"},unfold:{splitBy:\"line\",rotateX:-80,origin:\"top\",duration:.9,stagger:.1,easing:\"gentle\"},/** Diagonal clip sweep — the clip does the revealing, so nothing fades. */wipe:{splitBy:\"line\",effect:\"wipe\",amount:22,opacity:1,duration:.9,stagger:.12,easing:\"snappy\"},/** Odometer roll: clipped box + a hinge at the bottom edge. */roll:{splitBy:\"character\",clip:true,y:100,rotateX:-90,origin:\"bottom\",duration:.7,stagger:.03,easing:\"snappy\"},// Scale\npop:{splitBy:\"character\",scale:.4,duration:.6,stagger:.025,easing:\"snappy\"},punch:{splitBy:\"line\",scale:.8,y:20,duration:.5,stagger:.08,easing:\"bounce\"},zoom:{splitBy:\"line\",scale:1.6,blur:10,duration:.9,stagger:.1},shrink:{splitBy:\"character\",scale:2.2,duration:.6,stagger:.02,easing:\"snappy\"},/** Non-uniform squash — the only preset that scales the axes independently. */stretch:{splitBy:\"character\",scaleX:.3,scaleY:1.8,duration:.7,stagger:.025,easing:\"spring\"},// Rotation\nflip:{rotateX:90,duration:.8,stagger:.06,easing:\"gentle\"},swivel:{rotateY:90,duration:.8,stagger:.06,easing:\"gentle\"},tilt:{splitBy:\"character\",rotate:-12,y:30,duration:.7,stagger:.025,easing:\"spring\"},spin:{splitBy:\"character\",rotate:180,scale:.5,duration:.7,stagger:.03,easing:\"snappy\"},shear:{skewX:20,x:30,duration:.6,stagger:.05,easing:\"snappy\"},// Sequencing\nglitch:{splitBy:\"character\",x:14,skewX:-18,duration:.35,stagger:.012,easing:\"snappy\",order:\"random\"},wave:{splitBy:\"character\",y:30,duration:.7,stagger:.035,easing:\"spring\",order:\"center\"},cascade:{splitBy:\"character\",y:40,duration:.7,stagger:.025,order:\"reverse\"},scatter:{splitBy:\"character\",y:40,x:20,rotate:20,duration:.8,stagger:.03,easing:\"spring\",order:\"random\"},// Signature — these need machinery beyond transforms\n/** Glyphs churn, then land on the real character. Opacity stays 1: the churn is the reveal. */scramble:{splitBy:\"character\",effect:\"scramble\",opacity:1,duration:.4,stagger:.035},/** Characters appear one at a time behind a caret. */type:{splitBy:\"character\",effect:\"type\",opacity:1,duration:.01,stagger:.045},/** Low-frequency turbulence: a slow wobble. Long and slow-settling — the wobble is the point. */liquid:{splitBy:\"line\",effect:\"liquid\",amount:70,detail:10,settle:1.3,duration:2.4,stagger:.18},/** High-frequency turbulence: fine grain that reassembles into letterforms. */dissolve:{effect:\"dissolve\",amount:150,detail:76,settle:2.2,duration:1.2,stagger:.06},/** Chromatic aberration — the red/cyan fringes converge. */chroma:{splitBy:\"character\",effect:\"chroma\",amount:14,duration:.7,stagger:.02,easing:\"snappy\"},/** Staggered brightness peak reads as a highlight sweeping across the line. */shine:{splitBy:\"character\",effect:\"shine\",amount:2.8,duration:.5,stagger:.03},/** Glow blooms and tightens onto the glyph. */neon:{effect:\"neon\",amount:18,duration:.9,stagger:.07},// Extravagant — the loud end of the pack\n/** Every glyph arrives from its own random direction and converges. */explode:{splitBy:\"character\",chaos:1,scale:.3,blur:4,duration:1.1,stagger:.015,easing:\"spring\",order:\"random\"},/** Two full turns, collapsing in from nothing, on a scattered radius. */vortex:{splitBy:\"character\",chaos:.55,rotate:720,scale:0,duration:1.2,stagger:.03,easing:\"spring\"},/** Real depth: words hurtle in from far behind the screen, swivelling. */warp:{z:-900,rotateY:65,blur:12,duration:1,stagger:.08,origin:\"left\"},/** Turbulence stretched into wide vertical columns — the text drips into place. */melt:{splitBy:\"line\",effect:\"melt\",amount:95,detail:6,settle:1.2,duration:2.3,stagger:.15}};/** Dropdown order and labels. One punchy word each. */const PRESET_OPTIONS=[\"fade\",\"rise\",\"drop\",\"slide\",\"split\",\"blur\",\"focus\",\"mask\",\"curtain\",\"unfold\",\"wipe\",\"roll\",\"pop\",\"punch\",\"zoom\",\"shrink\",\"stretch\",\"flip\",\"swivel\",\"tilt\",\"spin\",\"shear\",\"glitch\",\"wave\",\"cascade\",\"scatter\",\"scramble\",\"type\",\"liquid\",\"dissolve\",\"chroma\",\"shine\",\"neon\",\"explode\",\"vortex\",\"warp\",\"melt\",\"custom\"];const titleCase=s=>s.charAt(0).toUpperCase()+s.slice(1);const PRESET_TITLES=PRESET_OPTIONS.map(titleCase);/** Dots for the demo panel — every baked preset, \"Custom\" excluded since it has no fixed recipe to preview. */const DEMO_PRESETS=PRESET_OPTIONS.filter(p=>p!==\"custom\");const EASING={/** Critically damped — natural spring deceleration with no overshoot. */spring:{type:\"spring\",bounce:0},/** The only genuinely bouncy option, used deliberately by the Punch preset. */bounce:{type:\"spring\",bounce:.55},smooth:{ease:[.22,1,.36,1]},snappy:{ease:[.16,1,.3,1]},gentle:{ease:[.4,0,.2,1]}};const ORIGIN={center:\"50% 50%\",top:\"50% 0%\",bottom:\"50% 100%\",left:\"0% 50%\",right:\"100% 50%\"};/** Cross-axis placement of the panel within the component, and how its rows justify. */const DEMO_ALIGN_SELF={left:\"flex-start\",center:\"center\",right:\"flex-end\"};const DEMO_JUSTIFY={left:\"flex-start\",center:\"center\",right:\"flex-end\"};/** Split text into lines, then into the animated units for that mode. */function tokenize(text,splitBy){const lines=text.split(\"\\n\");if(splitBy===\"line\")return lines.map(line=>[line]);return lines.map(line=>line.split(/(\\s+)/).filter(t=>t.length>0));}/** Deterministic, so server, client and canvas all agree on the same \"random\". */function pseudoRandom(n){const x=Math.sin((n+1)*12.9898)*43758.5453;return x-Math.floor(x);}/** Where a token sits in the stagger queue, which is not always its position in the text. */function staggerIndex(i,total,order){switch(order){case\"reverse\":return total-1-i;case\"center\":return Math.abs(i-(total-1)/2);case\"random\":return pseudoRandom(i)*total;default:return i;}}const SCRAMBLE_GLYPHS=\"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789#%&@$*<>/\\\\[]{}\";/** Resolves which engine a preset runs on, so effect-only sub-controls know when to appear. */function presetEffect(p,propEffect){if(!p)return\"transform\";if(p===\"custom\")return propEffect??\"transform\";return(PRESETS[p]?.effect)??\"transform\";}const usesTurbulenceEffect=e=>e===\"liquid\"||e===\"dissolve\"||e===\"melt\";/** Turbulence frequency from a friendly 0–100 dial. Squared so the low end has resolution. */function detailToFrequency(detail,effect){const f=Math.max(Math.pow(detail/100,2)*1.2,5e-4);/** Liquid stretches the noise horizontally; melt stretches it hard into vertical columns. */if(effect===\"liquid\")return`${f.toFixed(4)} ${(f*1.8).toFixed(4)}`;if(effect===\"melt\")return`${(f*.25).toFixed(4)} ${(f*6).toFixed(4)}`;return`${f.toFixed(4)} ${f.toFixed(4)}`;}/**\n * One filter string shape for every state, so framer-motion always interpolates\n * number-for-number. Dropping a function between keyframes makes it bail to a snap.\n */function filterString(blurPx,brightness,glowPx,glowColor){return`blur(${blurPx}px) brightness(${brightness}) drop-shadow(0 0 ${glowPx}px ${glowColor})`;}/** Both keyframes carry the same two shadows so only the numbers move. */function chromaShadow(offset,alpha){return`${offset}px 0 0 rgba(255,0,80,${alpha}), ${-offset}px 0 0 rgba(0,255,255,${alpha})`;}/** Four-point polygon in both states — matching point counts keep the clip interpolable. */function wipeClip(progress,skew){return progress===0?`polygon(0% 0%, 0% 0%, ${-skew}% 100%, 0% 100%)`:`polygon(0% 0%, ${100+skew}% 0%, 100% 100%, 0% 100%)`;}/**\n * Text Motion\n *\n * Animates text in by character, word, or line. 37 presets, or switch to\n * Custom to expose every motion parameter. Turn on the Demo Panel to preview\n * every preset live from a row of dots under the text.\n *\n * @framerIntrinsicWidth 600\n * @framerIntrinsicHeight 120\n *\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight any-prefer-fixed\n */export default function TextMotion(props){const{text=\"Text animations that\\nyou’ll gonna remembers.\",preset=\"split\",trigger=\"onView\",delay=0,replay=true,threshold=.4,loopDelay=1.2,demoPanel=false,demoAutoPlay=false,demoAutoInterval=2,demoDotSize=8,demoGap=5,demoSpacing=34,demoColor=\"#FFFFFF\",demoInactiveOpacity=.3,demoAlign=\"center\",demoPosition=\"below\",useCustomFont=false,font,textColor,style}=props;const isStatic=useIsStaticRenderer();const isCanvas=RenderTarget.current()===RenderTarget.canvas;const shouldForceVisiblePreview=isStatic||isCanvas;const ref=useRef(null);const[hovered,setHovered]=useState(false);const[cycle,setCycle]=useState(0);const[sectionVisible,setSectionVisible]=useState(false);const[scrollTriggered,setScrollTriggered]=useState(false);const scrollTriggeredRef=useRef(false);/** Set the first time a demo dot is clicked. Once set, it overrides the Preset control. */const[demoPreset,setDemoPreset]=useState(null);const inView=useInView(ref,{amount:threshold,once:!replay});/** Only lets the demo pick win while the panel is actually shown, so hiding it reverts to the Preset control. */const activePreset=demoPanel?demoPreset??preset:preset;/** A demo dot picks the preset and forces a fresh play, independent of Trigger. */const handleDemoSelect=p=>{if(p===activePreset)return;startTransition(()=>{setDemoPreset(p);setCycle(c=>c+1);});};/** Preset wins unless the user switched to Custom. */const m=useMemo(()=>{/** Custom starts from a neutral character-split recipe; presets start from their own. */const base=activePreset===\"custom\"?{...BASE,splitBy:\"character\",y:40,easing:\"spring\"}:{...BASE,...PRESETS[activePreset]};/** An enum left on \"auto\" defers to the preset, same as an untouched number. */const pick=(v,fallback)=>v===undefined||v===\"auto\"?fallback:v;/**\n         * One dial instead of ten. Intensity scales every magnitude the preset moves,\n         * so a preset keeps its character and only gets louder or quieter.\n         * Scales are ratios around 1, so their distance from rest is what scales.\n         */const k=props.intensity??1;const ratio=v=>1+(v-1)*k;return{splitBy:pick(props.splitBy,base.splitBy),effect:pick(props.effect,base.effect),amount:(props.amount??base.amount)*k,detail:props.detail??base.detail,settle:props.settle??base.settle,chaos:(props.chaos??base.chaos)*k,z:(props.z??base.z)*k,x:(props.x??base.x)*k,y:(props.y??base.y)*k,opacity:props.opacity??base.opacity,blur:(props.blur??base.blur)*k,scale:ratio(props.scale??base.scale),scaleX:ratio(props.scaleX??base.scaleX),scaleY:ratio(props.scaleY??base.scaleY),rotate:(props.rotate??base.rotate)*k,rotateX:(props.rotateX??base.rotateX)*k,rotateY:(props.rotateY??base.rotateY)*k,skewX:(props.skewX??base.skewX)*k,origin:pick(props.origin,base.origin),clip:props.clip??base.clip,order:pick(props.order,base.order),duration:props.duration??base.duration,stagger:props.stagger??base.stagger,easing:pick(props.easing,base.easing)};},[activePreset,props.intensity,props.splitBy,props.effect,props.amount,props.detail,props.settle,props.chaos,props.z,props.x,props.y,props.opacity,props.blur,props.scale,props.scaleX,props.scaleY,props.rotate,props.rotateX,props.rotateY,props.skewX,props.origin,props.clip,props.order,props.duration,props.stagger,props.easing]);const lines=useMemo(()=>tokenize(text,m.splitBy),[text,m.splitBy]);/** Flat running index so stagger is continuous across lines and words. */const indexed=useMemo(()=>{let i=0;return lines.map(units=>units.map(unit=>{const isSpace=/^\\s+$/.test(unit);if(isSpace)return{unit,index:-1,isSpace,chars:null};if(m.splitBy===\"character\"){return{unit,index:-1,isSpace,chars:Array.from(unit).map(c=>({c,index:i++}))};}return{unit,index:i++,isSpace,chars:null};}));},[lines,m.splitBy]);const totalUnits=useMemo(()=>{let n=0;for(const units of indexed){for(const u of units){if(u.isSpace)continue;n+=u.chars?u.chars.length:1;}}return Math.max(n,1);},[indexed]);useEffect(()=>{scrollTriggeredRef.current=scrollTriggered;},[scrollTriggered]);/** Loop re-mounts the tree on a timer so the whole stagger replays. */useEffect(()=>{if(trigger!==\"loop\"||isStatic)return;const cycleMs=(delay+m.duration+m.stagger*totalUnits+loopDelay)*1e3;const id=window.setInterval(()=>startTransition(()=>setCycle(c=>c+1)),cycleMs);return()=>window.clearInterval(id);},[trigger,isStatic,delay,m.duration,m.stagger,totalUnits,loopDelay]);/** Section in View uses the nearest section-like ancestor, or this layer as fallback. */useEffect(()=>{if(trigger!==\"sectionInView\"||isStatic)return;if(typeof window===\"undefined\")return;const node=ref.current;if(!node)return;const sectionLike=node.closest(\"section, main, article, [role='region'], [data-framer-section], [data-framer-name*='Section']\")??node;const observer=new window.IntersectionObserver(entries=>{const next=entries[0]?.isIntersecting??false;startTransition(()=>setSectionVisible(next));},{threshold});observer.observe(sectionLike);return()=>observer.disconnect();},[trigger,isStatic,threshold]);/** On Scroll replays the entrance on discrete scroll events (throttled). */useEffect(()=>{if(trigger!==\"onScroll\"||isStatic)return;if(typeof window===\"undefined\")return;let lastTick=0;const throttleMs=180;const onScroll=()=>{const now=Date.now();if(now-lastTick<throttleMs)return;lastTick=now;if(!replay&&scrollTriggeredRef.current)return;scrollTriggeredRef.current=true;startTransition(()=>setScrollTriggered(true));startTransition(()=>setCycle(c=>c+1));};window.addEventListener(\"scroll\",onScroll,{passive:true});return()=>window.removeEventListener(\"scroll\",onScroll);},[trigger,isStatic,replay]);/** Left/Right steps through the Demo Panel's presets — only wired up while the panel is on. */useEffect(()=>{if(!demoPanel||isStatic)return;if(typeof window===\"undefined\")return;const onKeyDown=e=>{if(e.key!==\"ArrowLeft\"&&e.key!==\"ArrowRight\")return;const target=e.target;if(target?.isContentEditable)return;if(target&&/^(input|textarea|select)$/i.test(target.tagName))return;e.preventDefault();const delta=e.key===\"ArrowRight\"?1:-1;const currentIndex=DEMO_PRESETS.indexOf(activePreset);const nextIndex=(currentIndex+delta+DEMO_PRESETS.length)%DEMO_PRESETS.length;handleDemoSelect(DEMO_PRESETS[nextIndex]);};window.addEventListener(\"keydown\",onKeyDown);return()=>window.removeEventListener(\"keydown\",onKeyDown);},[demoPanel,isStatic,activePreset]);/** Read inside the interval without depending on it, so Auto Play never restarts its own countdown mid-cycle. */const activePresetRef=useRef(activePreset);useEffect(()=>{activePresetRef.current=activePreset;},[activePreset]);/** Auto Play walks the whole set on a timer — same wrap-around as the arrow keys. */useEffect(()=>{if(!demoPanel||!demoAutoPlay||isStatic)return;if(typeof window===\"undefined\")return;const id=window.setInterval(()=>{const currentIndex=DEMO_PRESETS.indexOf(activePresetRef.current);const nextIndex=(currentIndex+1+DEMO_PRESETS.length)%DEMO_PRESETS.length;startTransition(()=>{setDemoPreset(DEMO_PRESETS[nextIndex]);setCycle(c=>c+1);});},Math.max(demoAutoInterval,.1)*1e3);return()=>window.clearInterval(id);},[demoPanel,demoAutoPlay,isStatic,demoAutoInterval]);const playing=shouldForceVisiblePreview||/** A manual demo pick, or Auto Play, always plays — regardless of Trigger — but only while the panel is shown. */demoPanel&&(demoPreset!==null||demoAutoPlay)||trigger===\"onMount\"||trigger===\"loop\"||trigger===\"onScroll\"&&scrollTriggered||trigger===\"onView\"&&inView||trigger===\"sectionInView\"&&sectionVisible||trigger===\"hover\"&&hovered;/** Content-mutating and SVG-filter effects need a wall clock; transforms do not. */const usesClock=m.effect===\"scramble\"||m.effect===\"type\"||usesTurbulenceEffect(m.effect);const[elapsed,setElapsed]=useState(0);const displaceRef=useRef(null);const filterId=`tm-${useId().replace(/:/g,\"\")}`;/** Restart the clock whenever a fresh play begins. */useEffect(()=>{if(!usesClock)return;setElapsed(shouldForceVisiblePreview?9999:0);},[usesClock,cycle,activePreset,shouldForceVisiblePreview]);useEffect(()=>{if(!usesClock||shouldForceVisiblePreview||!playing)return;if(typeof window===\"undefined\")return;const start=performance.now();let raf=0;const total=delay+m.duration+m.stagger*totalUnits;const step=()=>{const t=(performance.now()-start)/1e3;/** Drive the SVG filter imperatively — no re-render per frame. */if(displaceRef.current){const p=Math.min(t/Math.max(total,.01),1);const eased=Math.pow(1-p,m.settle);displaceRef.current.setAttribute(\"scale\",String(m.amount*eased));}setElapsed(t);if(t<total+.1)raf=window.requestAnimationFrame(step);};raf=window.requestAnimationFrame(step);return()=>window.cancelAnimationFrame(raf);},[usesClock,shouldForceVisiblePreview,playing,cycle,activePreset,delay,m.duration,m.stagger,m.amount,m.settle,totalUnits]);const isChroma=m.effect===\"chroma\";const isShine=m.effect===\"shine\";const isNeon=m.effect===\"neon\";const isWipe=m.effect===\"wipe\";const glowColor=textColor??\"currentColor\";/** Signed −1..1 from a token's seed, so each glyph gets a stable direction of its own. */const spread=(seed,salt)=>(pseudoRandom(seed*3+salt)-.5)*2;const variants={/** A function so `chaos` can give every token its own start, not just its own delay. */hidden:({seed})=>({opacity:m.opacity,/** Chaos is px, so it cannot mix with the percentage offsets a clip mask uses. */x:m.x+(m.chaos&&!m.clip?spread(seed,1)*m.chaos*240:0),/** Under a clip mask the offset is a share of the line box, not pixels. */y:m.clip?`${m.y}%`:m.y+(m.chaos?spread(seed,2)*m.chaos*200:0),z:m.z,scale:m.scale,scaleX:m.scaleX,scaleY:m.scaleY,rotate:m.rotate+(m.chaos?spread(seed,3)*m.chaos*160:0),rotateX:m.rotateX,rotateY:m.rotateY,skewX:m.skewX,/** Per-element, so 3D survives the nested word wrappers. */transformPerspective:800,filter:filterString(m.blur,isShine?m.amount:1,isNeon?m.amount:0,glowColor),...isChroma?{textShadow:chromaShadow(m.amount,.9)}:null,...isWipe?{clipPath:wipeClip(0,m.amount)}:null}),visible:({i})=>({opacity:1,x:0,y:m.clip?\"0%\":0,z:0,scale:1,scaleX:1,scaleY:1,rotate:0,rotateX:0,rotateY:0,skewX:0,transformPerspective:800,filter:filterString(0,1,0,glowColor),...isChroma?{textShadow:chromaShadow(0,0)}:null,...isWipe?{clipPath:wipeClip(1,m.amount)}:null,transition:{...EASING[m.easing],duration:m.duration,delay:delay+i*m.stagger}})};const tokenStyle={display:\"inline-block\",transformOrigin:ORIGIN[m.origin],willChange:\"transform, filter, opacity\"};/** The mask box. Padding/negative-margin keeps descenders from being sliced. */const clipStyle={display:\"inline-block\",overflow:\"hidden\",verticalAlign:\"bottom\",paddingBottom:\"0.15em\",marginBottom:\"-0.15em\"};const isFilled=style?.width===\"100%\";/** Liquid and Dissolve distort the whole text block, so the filter goes on a wrapper. */const usesTurbulence=usesTurbulenceEffect(m.effect);const turbulenceWrapStyle=usesTurbulence?{filter:`url(#${filterId})`,willChange:\"filter\"}:{};const isScramble=m.effect===\"scramble\";const isType=m.effect===\"type\";/**\n     * For the content-driven effects, swap what the token renders based on the clock:\n     * before its turn a scramble token shows a junk glyph and a type token shows nothing.\n     */const contentFor=(content,orderIdx)=>{if(!isScramble&&!isType)return content;if(shouldForceVisiblePreview)return content;const revealAt=delay+orderIdx*m.stagger;if(elapsed>=revealAt)return content;if(isType)return\"\";/** Re-roll roughly every 45ms, offset per token so they do not churn in lockstep. */const seed=Math.floor(elapsed/.045)+orderIdx;return SCRAMBLE_GLYPHS[Math.floor(pseudoRandom(seed)*SCRAMBLE_GLYPHS.length)];};const renderToken=(content,index,key)=>{const orderIdx=staggerIndex(index,totalUnits,m.order);const shown=contentFor(content,orderIdx);const token=/*#__PURE__*/_jsx(motion.span,{custom:{i:orderIdx,seed:index},variants:variants,initial:shouldForceVisiblePreview?\"visible\":\"hidden\",animate:shouldForceVisiblePreview||playing?\"visible\":\"hidden\",style:tokenStyle,children:shown===\"\"?/*#__PURE__*/_jsx(\"span\",{style:{visibility:\"hidden\"},children:content}):shown},m.clip?undefined:key);if(!m.clip)return token;return /*#__PURE__*/_jsx(\"span\",{style:clipStyle,children:token},key);};const demoPanelEl=demoPanel&&/*#__PURE__*/_jsx(\"div\",{role:\"group\",\"aria-label\":\"Preset demo\",style:{display:\"flex\",/** Always a single row — the row is free to grow as wide as it needs. */flexWrap:\"nowrap\",justifyContent:DEMO_JUSTIFY[demoAlign],alignItems:\"center\",gap:demoGap,marginTop:demoPosition===\"below\"?demoSpacing:0,marginBottom:demoPosition===\"above\"?demoSpacing:0,alignSelf:DEMO_ALIGN_SELF[demoAlign]},children:DEMO_PRESETS.map(p=>{const isActive=p===activePreset;return /*#__PURE__*/_jsx(\"button\",{type:\"button\",onClick:()=>handleDemoSelect(p),\"aria-label\":titleCase(p),\"aria-pressed\":isActive,style:{display:\"block\",flexShrink:0,width:demoDotSize,height:demoDotSize,padding:0,margin:0,border:\"none\",borderRadius:\"50%\",/** Defaults to white, independent of Text Color — the panel is UI chrome, not part of the copy. */background:demoColor,/** Same size for every dot — the active one is only brighter. */opacity:isActive?1:demoInactiveOpacity,cursor:\"pointer\",transition:\"opacity 0.2s ease\"}},p);})},\"demo-panel\");return /*#__PURE__*/_jsxs(\"div\",{ref:ref,onMouseEnter:isStatic?undefined:()=>startTransition(()=>setHovered(true)),onMouseLeave:isStatic?undefined:()=>startTransition(()=>setHovered(false)),style:{...style,position:\"relative\",display:\"flex\",flexDirection:\"column\",justifyContent:\"center\",/** Inherit the surrounding type unless the designer overrides it. */font:useCustomFont?undefined:\"inherit\",...useCustomFont?font:null,/** Always fall back to inherit, so a custom font never lands as black on black. */color:textColor??\"inherit\",...isFilled?null:{minWidth:\"max-content\"}},children:[demoPosition===\"above\"&&demoPanelEl,usesTurbulence&&/*#__PURE__*/_jsx(\"svg\",{\"aria-hidden\":\"true\",focusable:\"false\",style:{position:\"absolute\",width:0,height:0,pointerEvents:\"none\"},children:/*#__PURE__*/_jsxs(\"filter\",{id:filterId,colorInterpolationFilters:\"sRGB\",children:[/*#__PURE__*/_jsx(\"feTurbulence\",{type:\"fractalNoise\",/** Low frequency reads as a liquid wave; high frequency as fine grain. */baseFrequency:detailToFrequency(m.detail,m.effect),numOctaves:m.effect===\"liquid\"?2:1,seed:7,result:\"noise\"}),/*#__PURE__*/_jsx(\"feDisplacementMap\",{ref:displaceRef,in:\"SourceGraphic\",in2:\"noise\",scale:shouldForceVisiblePreview?0:m.amount,xChannelSelector:\"R\",yChannelSelector:\"G\"})]})}),/*#__PURE__*/_jsx(\"div\",{style:turbulenceWrapStyle,children:indexed.map((units,li)=>/*#__PURE__*/_jsx(\"div\",{style:{display:\"block\",whiteSpace:\"pre-wrap\"},children:units.map((u,ui)=>{if(u.isSpace)return /*#__PURE__*/_jsx(\"span\",{children:u.unit},ui);if(u.chars){return /*#__PURE__*/_jsx(\"span\",{style:{display:\"inline-block\",whiteSpace:\"nowrap\"},children:u.chars.map(({c,index},ci)=>renderToken(c,index,ci))},ui);}return renderToken(u.unit,u.index,ui);})},`${cycle}-${li}`))}),demoPosition===\"below\"&&demoPanelEl]});}/** Motion parameters are only meaningful once the preset is set to Custom. */const hideUnlessCustom=p=>p.preset!==\"custom\";/** Demo Panel settings are only meaningful once the panel is switched on. */const hideUnlessDemo=p=>!p.demoPanel;addPropertyControls(TextMotion,{text:{type:ControlType.String,title:\"Text\",defaultValue:\"Text animations that\\nyou’ll gonna remembers.\",displayTextArea:true,placeholder:\"Type your copy…\"},preset:{type:ControlType.Enum,title:\"Preset\",defaultValue:\"split\",options:PRESET_OPTIONS,optionTitles:PRESET_TITLES},demoPanel:{type:ControlType.Boolean,title:\"Demo Panel\",defaultValue:false,enabledTitle:\"Show\",disabledTitle:\"Hide\"},demoAutoPlay:{type:ControlType.Boolean,title:\"Auto Play\",defaultValue:false,hidden:hideUnlessDemo},demoAutoInterval:{type:ControlType.Number,title:\"Auto Interval\",defaultValue:2,min:.5,max:10,step:.1,unit:\"s\",hidden:p=>!p.demoPanel||!p.demoAutoPlay},demoPosition:{type:ControlType.Enum,title:\"Position\",defaultValue:\"below\",options:[\"above\",\"below\"],optionTitles:[\"Above\",\"Below\"],displaySegmentedControl:true,hidden:hideUnlessDemo},demoAlign:{type:ControlType.Enum,title:\"Align\",defaultValue:\"center\",options:[\"left\",\"center\",\"right\"],optionTitles:[\"Left\",\"Center\",\"Right\"],displaySegmentedControl:true,hidden:hideUnlessDemo},demoDotSize:{type:ControlType.Number,title:\"Dot Size\",defaultValue:8,min:4,max:20,step:1,unit:\"px\",hidden:hideUnlessDemo},demoGap:{type:ControlType.Number,title:\"Dot Gap\",defaultValue:5,min:0,max:30,step:1,unit:\"px\",hidden:hideUnlessDemo},demoSpacing:{type:ControlType.Number,title:\"Panel Spacing\",defaultValue:34,min:0,step:1,unit:\"px\",hidden:hideUnlessDemo},demoColor:{type:ControlType.Color,title:\"Panel Color\",defaultValue:\"#FFFFFF\",hidden:hideUnlessDemo},demoInactiveOpacity:{type:ControlType.Number,title:\"Inactive Opacity\",defaultValue:.3,min:0,max:1,step:.05,hidden:hideUnlessDemo},/**\n     * Per-preset sub-controls, kept deliberately short: three knobs for most presets,\n     * five for the turbulence ones. Everything is optional or \"auto\", so an untouched\n     * knob defers to the preset. The long tail of individual dimensions lives in Custom.\n     */intensity:{type:ControlType.Number,title:\"Intensity\",description:\"Scales everything the preset moves. 1 is the preset as designed.\",optional:true,min:0,max:3,step:.05},duration:{type:ControlType.Number,title:\"Duration\",optional:true,min:.05,max:8,step:.05,unit:\"s\"},stagger:{type:ControlType.Number,title:\"Stagger\",optional:true,min:0,max:.4,step:.005,unit:\"s\"},/** Turbulence-only, because grain and decay have no meaning anywhere else. */detail:{type:ControlType.Number,title:\"Detail\",description:\"Turbulence grain. Low is a slow liquid wave, high is fine sand.\",optional:true,min:1,max:100,step:1,hidden:p=>!usesTurbulenceEffect(presetEffect(p.preset,p.effect))},settle:{type:ControlType.Number,title:\"Settle\",description:\"How fast the turbulence decays. Lower lingers, higher snaps to rest.\",optional:true,min:.4,max:5,step:.1,hidden:p=>!usesTurbulenceEffect(presetEffect(p.preset,p.effect))},/** Custom-only from here — the full parameter set, hidden behind the Custom preset. */effect:{type:ControlType.Enum,title:\"Effect\",defaultValue:\"auto\",options:[\"auto\",\"transform\",\"scramble\",\"type\",\"liquid\",\"dissolve\",\"melt\",\"chroma\",\"shine\",\"neon\",\"wipe\"],optionTitles:[\"Auto\",\"Transform\",\"Scramble\",\"Type\",\"Liquid\",\"Dissolve\",\"Melt\",\"Chroma\",\"Shine\",\"Neon\",\"Wipe\"],hidden:hideUnlessCustom},easing:{type:ControlType.Enum,title:\"Easing\",defaultValue:\"auto\",options:[\"auto\",\"spring\",\"bounce\",\"smooth\",\"snappy\",\"gentle\"],optionTitles:[\"Auto\",\"Spring\",\"Bounce\",\"Smooth\",\"Snappy\",\"Gentle\"],hidden:hideUnlessCustom},splitBy:{type:ControlType.Enum,title:\"Split By\",defaultValue:\"auto\",options:[\"auto\",\"character\",\"word\",\"line\"],optionTitles:[\"Auto\",\"Char\",\"Word\",\"Line\"],displaySegmentedControl:true,hidden:hideUnlessCustom},order:{type:ControlType.Enum,title:\"Order\",defaultValue:\"auto\",options:[\"auto\",\"forward\",\"reverse\",\"center\",\"random\"],optionTitles:[\"Auto\",\"Forward\",\"Reverse\",\"Center\",\"Random\"],hidden:hideUnlessCustom},origin:{type:ControlType.Enum,title:\"Origin\",defaultValue:\"auto\",options:[\"auto\",\"center\",\"top\",\"bottom\",\"left\",\"right\"],optionTitles:[\"Auto\",\"Center\",\"Top\",\"Bottom\",\"Left\",\"Right\"],hidden:hideUnlessCustom},amount:{type:ControlType.Number,title:\"Amount\",optional:true,min:0,max:300,step:1,hidden:hideUnlessCustom},chaos:{type:ControlType.Number,title:\"Chaos\",description:\"Per-glyph random spread.\",optional:true,min:0,max:2,step:.05,hidden:hideUnlessCustom},z:{type:ControlType.Number,title:\"Depth\",optional:true,min:-2e3,max:2e3,step:10,unit:\"px\",hidden:hideUnlessCustom},y:{type:ControlType.Number,title:\"Distance Y\",optional:true,min:-300,max:300,step:1,unit:\"px\",hidden:hideUnlessCustom},x:{type:ControlType.Number,title:\"Distance X\",optional:true,min:-300,max:300,step:1,unit:\"px\",hidden:hideUnlessCustom},blur:{type:ControlType.Number,title:\"Blur\",optional:true,min:0,max:40,step:1,unit:\"px\",hidden:hideUnlessCustom},scale:{type:ControlType.Number,title:\"Scale\",optional:true,min:0,max:3,step:.05,hidden:hideUnlessCustom},scaleX:{type:ControlType.Number,title:\"Scale X\",optional:true,min:0,max:3,step:.05,hidden:hideUnlessCustom},scaleY:{type:ControlType.Number,title:\"Scale Y\",optional:true,min:0,max:3,step:.05,hidden:hideUnlessCustom},rotate:{type:ControlType.Number,title:\"Rotate\",optional:true,min:-720,max:720,step:1,unit:\"\\xb0\",hidden:hideUnlessCustom},rotateX:{type:ControlType.Number,title:\"Flip X\",optional:true,min:-180,max:180,step:1,unit:\"\\xb0\",hidden:hideUnlessCustom},rotateY:{type:ControlType.Number,title:\"Flip Y\",optional:true,min:-180,max:180,step:1,unit:\"\\xb0\",hidden:hideUnlessCustom},skewX:{type:ControlType.Number,title:\"Skew\",optional:true,min:-60,max:60,step:1,unit:\"\\xb0\",hidden:hideUnlessCustom},opacity:{type:ControlType.Number,title:\"Start Opacity\",optional:true,min:0,max:1,step:.05,hidden:hideUnlessCustom},clip:{type:ControlType.Boolean,title:\"Mask\",optional:true,hidden:hideUnlessCustom},/** Always visible */trigger:{type:ControlType.Enum,title:\"Trigger\",defaultValue:\"onView\",options:[\"onView\",\"sectionInView\",\"onScroll\",\"onMount\",\"hover\",\"loop\"],optionTitles:[\"Layer in View\",\"Section in View\",\"On Scroll\",\"On Mount\",\"Hover\",\"Loop\"]},delay:{type:ControlType.Number,title:\"Delay\",defaultValue:0,min:0,max:5,step:.05,unit:\"s\"},threshold:{type:ControlType.Number,title:\"Threshold\",defaultValue:.4,min:0,max:1,step:.05,hidden:p=>p.trigger!==\"onView\"&&p.trigger!==\"sectionInView\"},replay:{type:ControlType.Boolean,title:\"Replay\",defaultValue:true,hidden:p=>p.trigger!==\"onView\"&&p.trigger!==\"sectionInView\"&&p.trigger!==\"onScroll\"},loopDelay:{type:ControlType.Number,title:\"Loop Gap\",defaultValue:1.2,min:0,max:8,step:.1,unit:\"s\",hidden:p=>p.trigger!==\"loop\"},/** Typography escape hatches — both inherit from the canvas by default. */textColor:{type:ControlType.Color,title:\"Color\",optional:true},useCustomFont:{type:ControlType.Boolean,title:\"Own Font\",defaultValue:false},font:{type:ControlType.Font,title:\"Font\",controls:\"extended\",defaultFontType:\"sans-serif\",defaultValue:{fontSize:\"46px\",variant:\"Bold\",letterSpacing:\"0.01em\",lineHeight:\"1.15em\"},hidden:p=>!p.useCustomFont},madeByKollinaStudio:{type:\"description\",title:\"\",description:\"Made by KollinaStudio\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"TextMotion\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutWidth\":\"any-prefer-fixed\",\"framerIntrinsicHeight\":\"120\",\"framerSupportedLayoutHeight\":\"any-prefer-fixed\",\"framerContractVersion\":\"1\",\"framerIntrinsicWidth\":\"600\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./TextMotion.map"],"mappings":"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"}