{"version":3,"file":"TextWrap_Prod.CGFff6dc.mjs","names":["useRef","useState","flushSync","useLayoutEffect","useEffect","__esmMin","init_ssg_sandbox_shims","init_npm_react_18_3_1","window","ce","p","le","init_jsx_runtime","Ja","init_npm_react_dom_18_3_1","_e","de","motion","MotionConfig","init_framer_motion_DhsWWWsN","useReducedMotion","addPropertyControls","RenderTarget","ControlType","init_framer_BL70qLPA","TextWrap","props","Tag","tag","isCanvas","fitWidth","isFitSize","style","textWrap","wrap","balance","parts","text","slot","scaledFont","scaleFont","font","scale","containerRef","useEnterEffectTrigger","effects","reducedMotion","tokenRefs","tokenRefCallbacks","perLine","widthProbeRef","lineIndices","useLineGroups","entranceRef","entrancePlaying","play","staticVisible","useIsoLayoutEffect","replayKey","content","buildEffectContent","layers","layerAlign","layerGap","canvasLike","buildPlainContent","color","userSelect","transform","truncate","lines","WIDTH_PROBE_STYLE","fontSize","peelTrailingGlued","value","m","peelLeadingGlued","partsMut","i","before","after","trailed","prefix","led","suffix","layerNode","InlineLayer","tokenizeForEffects","units","pushText","piece","withPlainFlow","touched","unbox","el","line","root","LINE_ATTR","body","MOTION_ATTR","gap","GAP_ATTR","read","readPlainLines","rootRect","zoom","cs","rects","refs","lineHeight","unit","contentTop","previous","mid","rect","sameLines","a","b","v","setLineIndices","measureRef","observerRef","enabled","prev","measure","next","update","sync","recheck","resize","probe","watched","state","fonts","onFonts","observer","current","now","enterMotionProps","merged","ENTER_DEFAULTS","enter","is3D","hidden","shown","stagger","transitionRest","outerDelay","index","tokenMotionStyle","asLine","busy","tokenLayoutStyle","TOKEN_LAYOUT_STYLE","EnterToken","innerRef","c","CanvasEnterToken","MotionEnterToken","mountedEntered","entered","motionProps","setBusy","skipFirstPlay","layout","motionStyle","getStableTokenRef","cb","measuring","tokenPlay","renderFlat","out","wordSeq","ui","u","flatIndex","setRef","mountKey","tokenLines","last","seq","measured","put","node","forcedBreaks","pieces","lead","linesWithTokens","transition","runMs","lineEntered","entrance","kids","trigger","start","replay","onCanvas","mounted","setMounted","inStart","setInStart","playgroundCanvas","setPlaygroundCanvas","setReplayKey","inCanvasHost","inLivePreview","canvasReplayFingerprint","offset","startObserver","entry","visibilityObserver","getAscentShare","key","ascentShare","ctx","firstTextBaseline","walker","layer","parent","range","measureWithoutEnterTransforms","lifted","offsetRef","zoomRef","textTopRef","scheduleRef","textTop","setTextTop","isBaseline","align","box","frame","layoutH","outer","schedule","mutation","records","r","textAligned","init_TextWrap_Prod"],"sources":["https:/framerusercontent.com/modules/oQk14E8Ar7JXjnVOhZW2/n4EHdVoivTyPjnpEdXZ2/TextWrap_Prod.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";import{useEffect,useLayoutEffect,useRef,useState}from\"react\";import{flushSync}from\"react-dom\";import{motion,MotionConfig,useReducedMotion}from\"framer-motion\";// Changelog 1.17: connected slots keep one vertical position with or without a text effect,\n// Per Word or Per Line, in the editor and on the published site (see InlineLayer).\n// Changelog 1.18: Per Line keeps the same settled x positions as no effect and Per Word on\n// centered and right-aligned text (see the soft-wrap space in buildEffectContent).\n// Changelog 1.19: Per Line takes its line breaks from the plain text flow at the current\n// width, so it reflows both ways on resize, font swaps, slot resizes and text edits, and\n// every line (the first included) sits where it does with no effect (see useLineGroups).\n/**\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight auto\n *\n * @framerDisableUnlink\n *\n * @framerIntrinsicWidth 450\n * @framerIntrinsicHeight auto\n */export default function TextWrap(props){const{layers=[],text=\"\",slot=\"[]\",font,color,layerGap,scale=1,layerAlign,transform,wrap=\"auto\",balance,truncate,lines,userSelect,tag=\"h1\",effects,style}=props;const Tag=tag;const isCanvas=RenderTarget.current()===RenderTarget.canvas;const fitWidth=isFitSize(style?.width);// Instances saved before 1.3 carry the removed Balance boolean: true → balance, false → auto\nconst textWrap=wrap===\"auto\"&&balance===true?\"balance\":wrap;const parts=text.split(slot);const scaledFont=scaleFont(font,scale);const containerRef=useRef(null);const{play,staticVisible,canvasLike,replayKey}=useEnterEffectTrigger(effects,containerRef,props,isCanvas);const reducedMotion=useReducedMotion();const tokenRefs=useRef([]);const tokenRefCallbacks=useRef([]);const perLine=!!effects&&effects.per===\"line\";const widthProbeRef=useRef(null);const lineIndices=useLineGroups(perLine,containerRef,tokenRefs,widthProbeRef);// When the current entrance started (Per Line only uses it to keep re-split lines settled).\nconst entranceRef=useRef({key:-1,at:0});const entrancePlaying=!!effects&&play&&!staticVisible&&!(perLine&&lineIndices===null);useIsoLayoutEffect(()=>{if(!entrancePlaying)entranceRef.current={key:-1,at:0};else if(entranceRef.current.key!==replayKey)entranceRef.current={key:replayKey,at:performance.now()};},[entrancePlaying,replayKey]);const content=effects?buildEffectContent(parts,layers,slot,layerAlign,layerGap,scale,effects,play,staticVisible,canvasLike,replayKey,reducedMotion,tokenRefs,tokenRefCallbacks,lineIndices,!fitWidth,entranceRef.current):buildPlainContent(parts,layers,slot,layerAlign,layerGap,scale);return /*#__PURE__*/_jsxs(Tag,{\"data-build\":\"text-wrap-prod-20261005-01\",ref:containerRef,// Not \"framer-text-wrap-container\": Text Wrap 1.1 and older inject a global\n// `.framer-text-wrap-container div { display: inline-block !important }`. The Framer\n// canvas is one shared document, so any older instance on the canvas would\n// restyle this one's connected layers. A distinct class keeps it out of reach.\nclassName:\"framer-text-wrap\",style:{...scaledFont,margin:0,color:color||\"#666666\",textAlign:font?.textAlign||style?.textAlign||\"left\",fontWeight:font?.fontWeight||400,userSelect:userSelect===\"none\"?\"none\":\"auto\",textWrap,textTransform:transform,whiteSpace:fitWidth?\"nowrap\":\"pre-wrap\",width:fitWidth?\"max-content\":undefined,...truncate?{display:\"-webkit-box\",WebkitLineClamp:lines,WebkitBoxOrient:\"vertical\",overflow:\"hidden\",textOverflow:\"ellipsis\"}:{display:\"block\"},...style},children:[perLine?/*#__PURE__*/_jsx(\"span\",{ref:widthProbeRef,\"aria-hidden\":\"true\",\"data-tw-width-probe\":\"\",style:WIDTH_PROBE_STYLE}):null,content]});}function scaleFont(font,scale){if(!font||scale===1)return font;const fontSize=font.fontSize;if(fontSize===undefined||fontSize===null)return font;return{...font,fontSize:typeof fontSize===\"number\"?fontSize*scale:`calc((${fontSize}) * ${scale})`};}const useIsoLayoutEffect=typeof window!==\"undefined\"?useLayoutEffect:useEffect;// Peel a trailing non-whitespace run (no spaces) for slot glue. Empty when the\n// string already ends in whitespace or is empty — meaning a real word boundary.\nfunction peelTrailingGlued(value){if(!value||!/\\S$/.test(value))return{rest:value,glued:\"\"};const m=value.match(/^(.*?)(\\S+)$/);return m?{rest:m[1],glued:m[2]}:{rest:value,glued:\"\"};}// Peel a leading non-whitespace run for slot glue. Empty when the string already\n// starts with whitespace or is empty.\nfunction peelLeadingGlued(value){if(!value||!/^\\S/.test(value))return{glued:\"\",rest:value};const m=value.match(/^(\\S+)([\\s\\S]*)$/);return m?{glued:m[1],rest:m[2]}:{glued:\"\",rest:value};}// Slot insertion with immediately-adjacent punctuation/letters glued to the slot\n// as one wrap word (e.g. `[]:` or `price[]`). A nowrap wrapper keeps balance/pretty/auto\n// from orphaning the colon onto the next line without its slot.\nfunction buildPlainContent(parts,layers,slot,layerAlign,layerGap,scale){const content=[];const partsMut=parts.slice();for(let i=0;i<partsMut.length;i++){let before=partsMut[i];if(i<partsMut.length-1){let after=partsMut[i+1];const trailed=peelTrailingGlued(before);before=trailed.rest;const prefix=trailed.glued;const led=peelLeadingGlued(after);const suffix=led.glued;partsMut[i+1]=led.rest;if(before)content.push(before);const layerNode=i<layers.length?/*#__PURE__*/_jsx(InlineLayer,{align:layerAlign,gap:layerGap,scale:scale,children:layers[i]},`layer-${i}`):slot;if(prefix||suffix){content.push(/*#__PURE__*/_jsxs(\"span\",{style:{whiteSpace:\"nowrap\"},children:[prefix,layerNode,suffix]},`glue-${i}`));}else{content.push(layerNode);}}else if(before){content.push(before);}}if(layers.length>parts.length-1){for(let i=parts.length-1;i<layers.length;i++){content.push(/*#__PURE__*/_jsx(InlineLayer,{align:layerAlign,gap:layerGap,scale:scale,children:layers[i]},`layer-${i}`));}}return content;}function tokenizeForEffects(parts,layers,slot){const units=[];const pushText=value=>{for(const piece of value.split(/(\\s+)/)){if(piece===\"\")continue;units.push(/^\\s+$/.test(piece)?{kind:\"space\",value:piece}:{kind:\"word\",value:piece});}};const partsMut=parts.slice();for(let i=0;i<partsMut.length;i++){let before=partsMut[i];if(i<partsMut.length-1){let after=partsMut[i+1];const trailed=peelTrailingGlued(before);before=trailed.rest;const prefix=trailed.glued;const led=peelLeadingGlued(after);const suffix=led.glued;partsMut[i+1]=led.rest;pushText(before);if(i<layers.length){units.push({kind:\"layer\",node:layers[i],key:`layer-${i}`,prefix,suffix});}else{pushText(`${prefix}${slot}${suffix}`);}}else{pushText(before);}}if(layers.length>parts.length-1){for(let i=parts.length-1;i<layers.length;i++){units.push({kind:\"layer\",node:layers[i],key:`layer-${i}`});}}return units;}// Per line: line blocks are display:block, so once the text is split into blocks a wider\n// container cannot pull a word back up — the blocks only ever wrap further. 1.18 measured\n// the visual lines from those blocks, so a split could only grow: widening, a web font\n// swap, a slot that changed size or a text edit left stale breaks (and stale first-line\n// x). `withPlainFlow` takes the line blocks out of the box tree (`display: contents`, also\n// for the hidden wrap spaces) for one synchronous read, which leaves exactly the Per Word /\n// no-effect text flow at the current width, then restores them. Nothing is painted in\n// between. With `contents` the read does not depend on the current split (Chrome's Wrap\n// Balance does depend on inline wrapper boxes), and enter transforms have no box to apply\n// to, so a mid-entrance read is the settled layout.\nconst LINE_ATTR=\"data-tw-line\";const GAP_ATTR=\"data-tw-gap\";function withPlainFlow(root,read){const touched=[];const unbox=el=>{touched.push([el,el.style.display]);el.style.display=\"contents\";};for(const line of Array.from(root.children)){if(!line.hasAttribute(LINE_ATTR))continue;unbox(line);const motion=line.firstElementChild;const body=motion&&motion.hasAttribute(MOTION_ATTR)?motion:line;if(body!==line)unbox(body);for(const gap of Array.from(body.children)){if(gap.hasAttribute(GAP_ATTR))unbox(gap);}}try{return read();}finally{for(let i=touched.length-1;i>=0;i--)touched[i][0].style.display=touched[i][1];}}// Visual line of every word/slot token in the plain flow. A token starts a new line when\n// its center moved down by more than half a line; a jump of n lines (blank lines from\n// \"\\n\\n\") counts n, so blank lines keep their line-height gap.\nfunction readPlainLines(root,refs){return withPlainFlow(root,()=>{const rootRect=root.getBoundingClientRect();// Framer canvas zoom is a transform on an ancestor; rects are scaled by it.\nconst zoom=root.offsetWidth?rootRect.width/root.offsetWidth||1:1;const cs=getComputedStyle(root);const rects=refs.map(el=>el.getBoundingClientRect());let lineHeight=parseFloat(cs.lineHeight);if(!(lineHeight>0))lineHeight=rects[0].height/zoom||1;const unit=lineHeight*zoom;const contentTop=rootRect.top+((parseFloat(cs.borderTopWidth)||0)+(parseFloat(cs.paddingTop)||0))*zoom;let line=0;let previous=0;return rects.map((rect,i)=>{const mid=(rect.top+rect.bottom)/2;if(i===0)line=Math.max(0,Math.floor((mid-contentTop)/unit));else if(mid-previous>unit/2)line+=Math.max(1,Math.round((mid-previous)/unit));previous=mid;return line;});});}function sameLines(a,b){return!!a&&a.length===b.length&&a.every((v,i)=>v===b[i]);}// Zero-height block that spans the text box: Per Line watches its width. The text box itself\n// changes height when the split changes, which a ResizeObserver would report again inside the\n// same frame (\"loop completed with undelivered notifications\").\nconst WIDTH_PROBE_STYLE={display:\"block\",height:0,overflow:\"hidden\",pointerEvents:\"none\"};// Real visual-line detection for `per: line`. Re-read from the plain flow (see\n// withPlainFlow) on every render, whenever the text box changes width (canvas resize, either\n// direction) or any word or slot changes size (web font swap, a connected layer resizing) —\n// both applied in the same frame, like the plain text reflows — and when fonts finish\n// loading. Runs only when `per: line` is selected.\nfunction useLineGroups(enabled,containerRef,tokenRefs,widthProbeRef){const[lineIndices,setLineIndices]=useState(null);const measureRef=useRef(()=>{});const observerRef=useRef(null);useIsoLayoutEffect(()=>{if(!enabled){measureRef.current=()=>{};observerRef.current=null;setLineIndices(prev=>prev===null?prev:null);return;}const measure=(sync=false)=>{const refs=tokenRefs.current;const root=containerRef.current;// Incomplete trees (mid remount from flat → whole-line) must not publish a\n// partial grouping — that thrash remounts forever.\nif(!root||!refs.length||refs.some(el=>!el))return;const next=readPlainLines(root,refs);const update=()=>setLineIndices(prev=>sameLines(prev,next)?prev:next);if(sync&&typeof flushSync===\"function\")flushSync(update);else update();};measureRef.current=measure;// A resize (text box width, a word or slot box) re-splits in the same frame, and once\n// more on the next frame in case layout was still settling.\nlet recheck=0;const resize=typeof ResizeObserver!==\"undefined\"?new ResizeObserver(()=>{measureRef.current(true);if(!recheck)recheck=requestAnimationFrame(()=>{recheck=0;measureRef.current();});}):null;const probe=widthProbeRef.current;const watched=new Set;if(probe&&resize){resize.observe(probe);watched.add(probe);}const state={resize,watched,frame:0};observerRef.current=state;const fonts=document.fonts;const onFonts=()=>measureRef.current();fonts?.ready?.then(onFonts);fonts?.addEventListener?.(\"loadingdone\",onFonts);// Synchronous first measurement — the words/slots are already in the DOM by this\n// point in the commit, so grouping is correct before the browser's first paint.\nmeasure();return()=>{measureRef.current=()=>{};observerRef.current=null;if(state.frame)cancelAnimationFrame(state.frame);if(recheck)cancelAnimationFrame(recheck);resize?.disconnect();fonts?.removeEventListener?.(\"loadingdone\",onFonts);};},[enabled]);// After every render: re-read the lines for this render's text/props and watch the\n// current word/slot boxes, so a size change re-reads the lines without a React render.\n// Boxes that left the DOM (a token moved to another line block) are dropped right away;\n// new boxes are watched from the next frame, so a re-split made inside a ResizeObserver\n// callback never adds observations to that same delivery.\nuseIsoLayoutEffect(()=>{measureRef.current();const observer=observerRef.current;if(!observer?.resize)return;const current=new Set(tokenRefs.current.filter(Boolean));if(widthProbeRef.current)current.add(widthProbeRef.current);for(const el of observer.watched){if(!current.has(el)){observer.resize.unobserve(el);observer.watched.delete(el);}}if(observer.frame)return;observer.frame=requestAnimationFrame(()=>{observer.frame=0;if(observerRef.current!==observer||!observer.resize)return;const now=new Set(tokenRefs.current.filter(Boolean));if(widthProbeRef.current)now.add(widthProbeRef.current);for(const el of now){if(!observer.watched.has(el)&&el.isConnected){observer.resize.observe(el);observer.watched.add(el);}}});});return lineIndices;}const ENTER_DEFAULTS={opacity:0,scale:1,blur:5,rotationMode:\"2d\",rotate2D:0,rotate3D:{x:0,y:0,z:0},offsetX:0,offsetY:10,transition:{type:\"tween\",duration:.4,delay:.05,ease:[.15,.75,.5,1]}};// Hidden/shown motion values plus the per-index stagger delay for one word/line token.\n// Transform + filter never affect layout size, so a connected layer inside a token keeps\n// its line-box placement through the whole entrance, at any opacity/scale/blur/offset/rotation.\nfunction enterMotionProps(enter,outerDelay,index,play,staticVisible,reducedMotion,entered=false){const merged={...ENTER_DEFAULTS,...enter,rotate3D:{...ENTER_DEFAULTS.rotate3D,...enter?.rotate3D}};const is3D=merged.rotationMode===\"3d\";const hidden={opacity:merged.opacity,scale:merged.scale,x:merged.offsetX,y:merged.offsetY,filter:`blur(${merged.blur}px)`,...is3D?{rotateX:merged.rotate3D.x,rotateY:merged.rotate3D.y,rotateZ:merged.rotate3D.z}:{rotate:merged.rotate2D}};const shown={opacity:1,scale:1,x:0,y:0,filter:\"blur(0px)\",...is3D?{rotateX:0,rotateY:0,rotateZ:0}:{rotate:0}};if(staticVisible||reducedMotion)return{initial:false,animate:shown,transition:{duration:0}};const{delay:stagger=0,...transitionRest}=merged.transition||{};return{// A line block that first mounts after the entrance has finished (Per Line re-split on\n// a resize) starts shown, like the rest of the already-settled text.\ninitial:entered?false:hidden,animate:play?shown:hidden,transition:{...transitionRest,delay:Math.max(0,outerDelay||0)+stagger*index}};}// Outer layout span owns the box used for wrap + line measurement. Inner motion span\n// carries every enter transform (opacity/scale/blur/2D|3D rotate/offsets) with an explicit\n// center origin; transforms never touch layout.\n// 1.17: per-word tokens are plain `inline-block`s that inherit the Font line-height, so a\n// token's one inner line box is geometrically the same line box the text has with no\n// effect (same strut, same baseline, same `vertical-align: middle` reference). Earlier\n// inline-flex tokens (with `lineHeight: normal` on the motion span) turned InlineLayer into\n// a flex item, where `vertical-align` does nothing and the strut differs — that moved\n// connected slots and nudged line heights whenever an effect was on. `nowrap` keeps\n// prefix|slot|suffix glue on one line. asLine tokens stay 1lh blocks (1.14/1.16 contract).\nconst TOKEN_LAYOUT_STYLE={display:\"inline-block\",whiteSpace:\"nowrap\",verticalAlign:\"baseline\"};function tokenMotionStyle(enter,busy,asLine=false){const is3D=enter?.rotationMode===\"3d\";return{display:asLine?\"block\":\"inline-block\",whiteSpace:asLine?undefined:\"nowrap\",width:asLine?\"100%\":undefined,// Fill the outer 1lh asLine box so 3D/2D origin stays centered on the Font\n// line box (not on tall Framer slot wrappers that paint outside it). Per-word\n// inline-blocks are exactly one Font line tall, so their origin is centered too.\nheight:asLine?\"100%\":undefined,transformOrigin:\"50% 50%\",transformPerspective:is3D?800:undefined,transformStyle:is3D?\"preserve-3d\":undefined,willChange:busy?\"transform, opacity, filter\":undefined,backfaceVisibility:is3D?\"hidden\":undefined};}// Marks the motion span so InlineLayer can lift its enter transform for one synchronous\n// measurement (see measureWithoutEnterTransforms).\nconst MOTION_ATTR=\"data-tw-motion\";function tokenLayoutStyle(asLine){// asLine blocks stack as siblings — parent line-height no longer opens gaps between\n// them. Lock each block to exactly one Font line-height (`1lh`) so Framer editor slot\n// wrappers cannot inflate some rows. Slot paint overflows visibly (overflow:visible)\n// but does not change inter-line distance — editor canvas and publish stay in parity.\nreturn asLine?{display:\"block\",width:\"100%\",lineHeight:\"inherit\",height:\"1lh\",overflow:\"visible\"}:TOKEN_LAYOUT_STYLE;}function EnterToken({enter,outerDelay,index,play,staticVisible,canvasLike,reducedMotion,innerRef,asLine=false,entered=false,children}){// Pause is a settled canvas state, not an animation state. Rendering a plain span here\n// prevents Framer Motion from completing or restarting an entrance when Playground\n// changes On canvas from Play to Pause, while keeping every token immediately visible.\nif(staticVisible){// Same plain single span as 1.10 — nothing is moving, so no motion span is needed.\nreturn /*#__PURE__*/_jsx(\"span\",{ref:innerRef,\"data-tw-effect-token\":index,\"data-tw-line\":asLine?\"1\":undefined,style:tokenLayoutStyle(asLine),children:children});}if(canvasLike){return /*#__PURE__*/_jsx(CanvasEnterToken,{enter:enter,outerDelay:outerDelay,index:index,play:play,staticVisible:staticVisible,reducedMotion:reducedMotion,innerRef:innerRef,asLine:asLine,entered:entered,children:children});}return /*#__PURE__*/_jsx(MotionEnterToken,{enter:enter,outerDelay:outerDelay,index:index,play:play,staticVisible:staticVisible,reducedMotion:reducedMotion,innerRef:innerRef,asLine:asLine,entered:entered,children:children});}// Tracks enter in-flight (for will-change only; slot placement no longer depends on it).\n// Glue prefix/suffix are siblings of InlineLayer inside this token (horizontal); the whole\n// visual line for `asLine` still lives inside the motion span so lines move as one unit.\nfunction MotionEnterToken({enter,outerDelay,index,play,staticVisible,reducedMotion,innerRef,asLine=false,entered=false,children}){// Mount-time only: a token that mounted already entered stays a settled token.\nconst[mountedEntered]=useState(()=>entered&&play);const motionProps=enterMotionProps(enter,outerDelay,index,play,staticVisible,reducedMotion,mountedEntered);// Busy while hidden or in-flight. Cleared on settle.\nconst[busy,setBusy]=useState(()=>!(staticVisible||reducedMotion||mountedEntered));const skipFirstPlay=useRef(mountedEntered);useEffect(()=>{if(staticVisible||reducedMotion){setBusy(false);return;}if(skipFirstPlay.current){skipFirstPlay.current=false;return;}// Only re-busy when play/visibility actually changes — NOT when Framer reallocates\n// `enter` / `outerDelay` object identities on every editor canvas render.\nif(play)setBusy(true);},[play,staticVisible,reducedMotion]);const layout=tokenLayoutStyle(asLine);const motionStyle=tokenMotionStyle(enter,busy,asLine);return /*#__PURE__*/_jsx(\"span\",{ref:innerRef,\"data-tw-effect-token\":index,\"data-tw-line\":asLine?\"1\":undefined,\"data-tw-busy\":busy?\"1\":undefined,style:layout,children:/*#__PURE__*/_jsx(motion.span,{[MOTION_ATTR]:\"\",style:motionStyle,...motionProps,onAnimationStart:()=>setBusy(true),onAnimationComplete:()=>{if(play)setBusy(false);},children:children})});}// Framer's editor Canvas can provide a static MotionConfig. Override only that inherited\n// static flag locally so the exact same Framer Motion easing/spring contract advances on\n// canvas-like editing surfaces. The keyed remount still supplies an exact fresh entrance.\nfunction CanvasEnterToken({enter,outerDelay,index,play,staticVisible,reducedMotion,innerRef,asLine=false,entered=false,children}){return /*#__PURE__*/_jsx(MotionConfig,{isStatic:false,children:/*#__PURE__*/_jsx(MotionEnterToken,{enter:enter,outerDelay:outerDelay,index:index,play:play,staticVisible:staticVisible,reducedMotion:reducedMotion,innerRef:innerRef,asLine:asLine,entered:entered,children:children})});}// A `motion.span` (framer-motion) only re-attaches a *changed* ref callback unreliably across\n// re-renders — a fresh inline closure per render silently stops receiving the DOM node after\n// the first render (confirmed in isolation; a stable callback identity does not have this\n// problem). So each flat token position gets one persistent callback, created once and reused\n// every render, that always writes into the CURRENT `tokenRefs.current` array by closing over\n// the stable `tokenRefs` ref object itself rather than a per-render local array.\nfunction getStableTokenRef(tokenRefs,tokenRefCallbacks,index){let cb=tokenRefCallbacks.current[index];if(!cb){cb=el=>{tokenRefs.current[index]=el;};tokenRefCallbacks.current[index]=cb;}return cb;}// Per word: each word/slot is its own EnterToken (stagger by sequential index). Slot glue\n// is prefix | InlineLayer(node) | suffix as horizontal siblings inside the token (plain\n// content / good-ref layout), so punctuation stays inline and still shares the enter\n// transform. Per line: after visual lines are measured, every word/space/slot on the same\n// rendered line is wrapped in ONE EnterToken (`asLine`) so X/Y/scale/rotate apply to the\n// whole line as a unit — not N synchronized per-word transforms. Measuring hold still\n// prevents the first Play commit from locking flat (per-word) stagger forever.\nfunction buildEffectContent(parts,layers,slot,layerAlign,layerGap,scale,effects,play,staticVisible,canvasLike,replayKey,reducedMotion,tokenRefs,tokenRefCallbacks,lineIndices,forcedBreaks,entrance){const units=tokenizeForEffects(parts,layers,slot);const perLine=effects.per===\"line\";// Canvas Play starts `play=true` on the first commit. Measuring visual lines needs the\n// tokens laid out first; if motion mounted with the interim flat (per-word) index it\n// would keep that stagger forever. Hold play and key on \"pending\" until lineIndices\n// exists, then remount once with real whole-line units.\nconst measuring=perLine&&lineIndices===null;const tokenPlay=play&&!measuring;// Flat per-word (and per-line measuring) path: one EnterToken per word/slot.\nconst renderFlat=()=>{const out=[];let wordSeq=0;for(const[ui,u]of units.entries()){if(u.kind===\"space\"){out.push(u.value);continue;}const flatIndex=wordSeq++;const setRef=getStableTokenRef(tokenRefs,tokenRefCallbacks,flatIndex);const mountKey=measuring?\"m\":\"w\";if(u.kind===\"word\"){out.push(/*#__PURE__*/_jsx(EnterToken,{innerRef:setRef,enter:effects.enter,outerDelay:effects.delay,index:flatIndex,play:tokenPlay,staticVisible:staticVisible,canvasLike:canvasLike,reducedMotion:reducedMotion,children:u.value},`w-${ui}-${replayKey}-${mountKey}`));}else{// REVERT layout path: glue as horizontal siblings of InlineLayer (plain-content\n// / good-ref era), not prefix|block-slot|suffix inside InlineLayer's flex child.\n// Nesting a block-level connected layer between text nodes inside an\n// inline-block was the vertical stack (comma under plugins). Motion still\n// wraps prefix+InlineLayer+suffix so punct animates with the slot (1.13).\nout.push(/*#__PURE__*/_jsxs(EnterToken,{innerRef:setRef,enter:effects.enter,outerDelay:effects.delay,index:flatIndex,play:tokenPlay,staticVisible:staticVisible,canvasLike:canvasLike,reducedMotion:reducedMotion,children:[u.prefix,/*#__PURE__*/_jsx(InlineLayer,{align:layerAlign,gap:layerGap,scale:scale,children:u.node}),u.suffix]},`${u.key}-${replayKey}-${mountKey}`));}}tokenRefs.current.length=wordSeq;tokenRefCallbacks.current.length=wordSeq;return out;};if(!perLine||measuring){return renderFlat();}// Whole-line units: every word/slot goes into the block of its measured visual line\n// (read from the plain flow, see useLineGroups). Every character of the text is placed\n// exactly once, in order, so with the blocks taken out of the box tree the text is the\n// plain flow again — that is what makes the next measurement independent of this split.\nconst tokenLines=[];{let last=0;let seq=0;for(const u of units){if(u.kind===\"space\")continue;// A text edit can render once with the previous text's lines before the\n// re-measure; clamp to a non-decreasing order instead of one block per token.\nconst measured=lineIndices[seq++];last=Math.max(last,measured!==undefined?measured:last);tokenLines.push(last);}}const lines=[];const put=(line,node)=>(lines[line]||(lines[line]=[])).push(node);let wordSeq=0;let current=0;for(const[ui,u]of units.entries()){if(u.kind===\"space\"){const next=tokenLines[wordSeq];if(forcedBreaks&&u.value.includes(\"\\n\")){// Typed line breaks: what precedes each \"\\n\" ends the current line (as in the\n// plain text), blank lines get their own empty line, and indentation after the\n// last \"\\n\" starts the next line.\nconst pieces=u.value.split(\"\\n\");for(let p=0;p<pieces.length-1;p++)put(current++,`${pieces[p]}\n`);const lead=pieces[pieces.length-1];if(lead)put(current,lead);}else if(next===undefined||next>current){// Soft-wrap space (or trailing space): in the plain text it hangs past the line\n// edge and takes no width. At the end of a block Chrome would keep it and shift\n// centered/right lines (1.18), so it stays in the DOM, hidden, for the\n// plain-flow read only.\nput(current,/*#__PURE__*/_jsx(\"span\",{[GAP_ATTR]:\"\",style:{display:\"none\"},children:u.value},`gap-${ui}`));}else{put(current,u.value);}continue;}const flatIndex=wordSeq++;current=Math.max(current,tokenLines[flatIndex]);const setRef=getStableTokenRef(tokenRefs,tokenRefCallbacks,flatIndex);if(u.kind===\"word\"){put(current,/*#__PURE__*/_jsx(\"span\",{ref:setRef,\"data-tw-measure\":flatIndex,style:{display:\"inline-block\"},children:u.value},`mw-${ui}`));}else{// Same horizontal glue contract as per-word: prefix | InlineLayer(node) | suffix.\nput(current,/*#__PURE__*/_jsxs(\"span\",{ref:setRef,\"data-tw-measure\":flatIndex,style:TOKEN_LAYOUT_STYLE,children:[u.prefix,/*#__PURE__*/_jsx(InlineLayer,{align:layerAlign,gap:layerGap,scale:scale,children:u.node}),u.suffix]},`${u.key}-L`));}}const linesWithTokens=new Set(tokenLines);// Has this line's entrance (delay + stagger + duration) already finished? Then a block that\n// mounts now — a new line from a narrower width — appears settled instead of replaying.\nconst transition={...ENTER_DEFAULTS.transition,...effects.enter?.transition};const runMs=(transition.type===\"spring\"?Math.max(1,transition.duration||0)+.5:transition.duration??.4)*1e3;const lineEntered=line=>!!entrance&&entrance.key===replayKey&&entrance.at>0&&performance.now()-entrance.at>(Math.max(0,effects.delay||0)+(transition.delay||0)*line)*1e3+runMs+100;const out=[];for(let line=0;line<lines.length;line++){const kids=lines[line]||[];if(!linesWithTokens.has(line)){// Blank line (typed \"\\n\\n\" or a leading \"\\n\"): one empty line-height row.\nout.push(/*#__PURE__*/_jsx(\"span\",{[LINE_ATTR]:\"\",\"data-tw-empty\":\"\",style:tokenLayoutStyle(true),children:kids},`empty-${line}`));continue;}out.push(/*#__PURE__*/_jsx(EnterToken,{asLine:true,enter:effects.enter,outerDelay:effects.delay,index:line,entered:lineEntered(line),play:tokenPlay,staticVisible:staticVisible,canvasLike:canvasLike,reducedMotion:reducedMotion,children:kids},`line-${line}-${replayKey}`));}tokenRefs.current.length=wordSeq;tokenRefCallbacks.current.length=wordSeq;return out;}// Trigger state for the whole effect: On appear plays once right after mount; Layer in view\n// plays once the chosen point (Top/Center/Bottom) crosses the viewport's bottom edge, and\n// (with Replay) resets only once the layer is fully out of view — never mid-scroll. Motion's\n// own `initial` prop already renders the hidden pose synchronously on first paint, so there is\n// no enter flash regardless of which trigger fires it.\nfunction useEnterEffectTrigger(effects,containerRef,props,isCanvas){const trigger=effects?.trigger??\"appear\";const start=effects?.start??\"top\";const replay=effects?.replay??false;const onCanvas=effects?.onCanvas??\"play\";const[mounted,setMounted]=useState(false);const[inStart,setInStart]=useState(false);const[playgroundCanvas,setPlaygroundCanvas]=useState(false);const[replayKey,setReplayKey]=useState(0);const canvasLike=isCanvas||playgroundCanvas;useEffect(()=>{setMounted(true);},[]);// Playground edit mode is not guaranteed to report Framer's Canvas RenderTarget.\n// Its standing host contract is a compatible-canvas ancestor outside the live preview.\nuseIsoLayoutEffect(()=>{const node=containerRef.current;const inCanvasHost=!!node?.closest?.(\"[data-sp-root], [data-sp-compatible-canvas]\");const inLivePreview=!!node?.closest?.(\"[data-sp-live]\");const next=inCanvasHost&&!inLivePreview;setPlaygroundCanvas(current=>current===next?current:next);});// Remount entrance tokens when designer-facing values change — not when Framer\n// reallocates prop object identities every editor canvas render (`style` / `font` /\n// `effects` / `layers` array). Identity thrash remounted tokens continuously, kept\n// them busy, and froze slot line-height neutralization (editor-only uneven gaps).\nconst enter=effects?.enter;const canvasReplayFingerprint=[onCanvas,effects?.per,effects?.trigger,effects?.start,effects?.replay?1:0,effects?.delay,enter?.opacity,enter?.scale,enter?.blur,enter?.rotationMode,enter?.rotate2D,enter?.rotate3D?.x,enter?.rotate3D?.y,enter?.rotate3D?.z,enter?.offsetX,enter?.offsetY,enter?.transition?.type,enter?.transition?.duration,enter?.transition?.delay,props.text,props.slot,Array.isArray(props.layers)?props.layers.length:0,props.font?.fontSize,props.font?.fontFamily,props.font?.fontWeight,props.font?.lineHeight,props.font?.letterSpacing,props.font?.textAlign,props.color,props.layerGap,props.scale,props.layerAlign,props.transform,props.wrap,props.balance===true?1:0,props.truncate?1:0,props.lines,props.userSelect,props.tag,props.style?.width,props.style?.height].join(\"|\");useIsoLayoutEffect(()=>{if(!effects||!canvasLike||onCanvas!==\"play\")return;setReplayKey(value=>value+1);},[canvasLike,onCanvas,canvasReplayFingerprint]);useEffect(()=>{if(!effects||trigger!==\"layer in view\")return;const node=containerRef.current;if(!node)return;if(typeof IntersectionObserver===\"undefined\"){setInStart(true);return;}const rect=node.getBoundingClientRect();const offset=start===\"top\"?0:start===\"center\"?rect.height/2:rect.height;const startObserver=new IntersectionObserver(([entry])=>{if(entry.isIntersecting)setInStart(true);},{rootMargin:`0px 0px -${Math.max(0,Math.round(offset))}px 0px`});startObserver.observe(node);let visibilityObserver=null;if(replay){visibilityObserver=new IntersectionObserver(([entry])=>{if(!entry.isIntersecting)setInStart(false);});visibilityObserver.observe(node);}return()=>{startObserver.disconnect();visibilityObserver?.disconnect();};},[effects,trigger,start,replay]);if(!effects)return{play:false,staticVisible:false,canvasLike,replayKey};if(canvasLike){return onCanvas===\"pause\"?{play:false,staticVisible:true,canvasLike,replayKey}:{play:true,staticVisible:false,canvasLike,replayKey};}return{play:trigger===\"layer in view\"?inStart:mounted,staticVisible:false,canvasLike,replayKey};}function isFitSize(value){return value===undefined||value===null||value===\"auto\"||value===\"max-content\"||value===\"fit-content\";}// Ascent share of the font's content area, per font. Used to find where a text's baseline sits inside its client rect.\nconst ascentShare={};function getAscentShare(cs){const key=`${cs.fontStyle} ${cs.fontWeight} ${cs.fontFamily}`;if(ascentShare[key]===undefined){const ctx=document.createElement(\"canvas\").getContext(\"2d\");if(!ctx)return .8;ctx.font=`${cs.fontStyle} ${cs.fontWeight} 100px ${cs.fontFamily}`;const m=ctx.measureText(\"Hxg\");ascentShare[key]=m.fontBoundingBoxAscent/(m.fontBoundingBoxAscent+m.fontBoundingBoxDescent);}return ascentShare[key];}// Baseline (viewport y) of the first visible text inside a connected layer, or null when the layer has none.\nfunction firstTextBaseline(layer){const walker=document.createTreeWalker(layer,NodeFilter.SHOW_TEXT);for(let node=walker.nextNode();node;node=walker.nextNode()){const parent=node.parentElement;const value=node.nodeValue;if(!parent||!value||!value.trim()||/^(STYLE|SCRIPT)$/.test(parent.tagName))continue;const cs=getComputedStyle(parent);if(cs.visibility===\"hidden\"||cs.display===\"none\"||parseFloat(cs.opacity)===0)continue;const range=document.createRange();range.selectNodeContents(node);const rect=range.getClientRects()[0];if(!rect||rect.width<2)continue;return rect.top+rect.height*getAscentShare(cs);}return null;}// Run `read` with every enclosing enter-effect transform lifted. Reads and restores happen in\n// the same synchronous task, so nothing is ever painted without the transform and Framer\n// Motion's next frame is untouched. This makes the measurement identical whether the slot\n// sits in plain text, a per-word token or a per-line token, mid-entrance or settled, with any\n// offset/scale/2D/3D rotation — no \"busy\" freeze and no stale value after the entrance ends.\nfunction measureWithoutEnterTransforms(node,read){const lifted=[];const root=node.closest(\".framer-text-wrap\");for(let el=node.parentElement;el&&el!==root;el=el.parentElement){if(el.hasAttribute(MOTION_ATTR)&&el.style.transform){lifted.push([el,el.style.transform]);el.style.transform=\"none\";}}try{return read();}finally{for(const[el,value]of lifted)el.style.transform=value;}}// Connected layer slot (1.17 structure).\n//\n// SPAN + INLINE-FLEX avoid the <div> nesting error. Nothing below the inner zoom span is\n// restyled, so the layer renders exactly as it was designed on the canvas.\n//\n//   anchor  inline-flex, height 0, vertical-align: middle   ← the only thing in the text line\n//   offset  the slot's box, placed relative to the anchor   ← Middle: centered; Baseline: offset\n//   zoom    inline-flex, Scale control                      ← connected layer lives here\n//\n// Line height: the anchor's margin box is zero tall and sits half an x-height above the\n// baseline — inside the Font line box — so a connected layer of any height can never grow\n// its line (1.4) and needs no measuring to get there (no first-paint flash, 1.5). The layer\n// overflows the anchor visibly and keeps its full paint and hit area.\n//\n// Vertical position is decided by CSS relative to the *text line*, never by the wrappers the\n// slot is inside: `vertical-align: middle` puts the anchor at baseline + ½ x-height of the\n// surrounding text in plain text, inside per-word inline-block tokens and inside per-line\n// blocks alike (they all inherit the same font and line-height), and in the editor or on a\n// published site alike.\n//   Middle   — the slot is centered on the anchor (`align-items: center`). Pure CSS.\n//   Baseline — the slot's first visible text baseline sits on the text baseline, whatever the\n//              order inside the layer (image first, text first, absolutely positioned label).\n//              That distance from the slot's top (`textTop`) is the only measured value; it\n//              is a property of the slot's content, not of where the line is, and it is\n//              measured with enter transforms lifted, so it is the same with or without\n//              effects. Slots without text sit with their bottom on the baseline (CSS only).\nfunction InlineLayer({children,align=\"baseline\",gap=0,scale=1}){const offsetRef=useRef(null);const zoomRef=useRef(null);const textTopRef=useRef(null);const scheduleRef=useRef(()=>{});const[textTop,setTextTop]=useState(null);const isBaseline=align===\"baseline\";textTopRef.current=textTop;useIsoLayoutEffect(()=>{const box=offsetRef.current;const zoom=zoomRef.current;if(!isBaseline||!box||!zoom){scheduleRef.current=()=>{};return;}let frame=0;const measure=()=>{frame=0;const next=measureWithoutEnterTransforms(box,()=>{const layoutH=box.offsetHeight;if(!layoutH)return null;const rect=box.getBoundingClientRect();// Uniform scale from outside the component (Framer canvas zoom).\nconst outer=rect.height/layoutH||1;const text=firstTextBaseline(zoom);if(text===null)return null;// Relative to the connected layer's own (possibly hover-transformed) box, so\n// Magnetic Hover style transforms on the layer itself are ignored.\nconst slot=zoom.firstElementChild||zoom;return Math.round((text-slot.getBoundingClientRect().top)/outer*100)/100;});const prev=textTopRef.current;if(next===null?prev!==null:prev===null||Math.abs(next-prev)>=.25){textTopRef.current=next;setTextTop(next);}};const schedule=()=>{if(!frame)frame=requestAnimationFrame(measure);};scheduleRef.current=schedule;const resize=typeof ResizeObserver!==\"undefined\"?new ResizeObserver(schedule):null;resize?.observe(box);const mutation=new MutationObserver(records=>{// Magnetic Hover rewrites a <style> every frame; that is not a layout change.\nif(records.some(r=>r.target&&r.target.nodeName!==\"STYLE\"&&!r.target.closest?.(\"style\"))){schedule();}});mutation.observe(zoom,{subtree:true,childList:true,characterData:true,attributes:true,attributeFilter:[\"style\",\"class\"]});const fonts=document.fonts;fonts?.ready?.then(schedule);fonts?.addEventListener?.(\"loadingdone\",schedule);// Synchronous first measurement: the baseline offset is committed before first paint.\nmeasure();return()=>{if(frame)cancelAnimationFrame(frame);resize?.disconnect();mutation.disconnect();fonts?.removeEventListener?.(\"loadingdone\",schedule);};},[isBaseline]);// re-measure after every render of the parent as well (props, connected layers, font changes)\nuseIsoLayoutEffect(()=>{scheduleRef.current();});const textAligned=isBaseline&&textTop!==null;return /*#__PURE__*/_jsx(\"span\",{\"data-tw-layer\":\"\",style:{display:\"inline-flex\",height:0,verticalAlign:\"middle\",alignItems:isBaseline?textAligned?\"flex-start\":\"flex-end\":\"center\",whiteSpace:\"nowrap\",marginLeft:gap,marginRight:gap},children:/*#__PURE__*/_jsx(\"span\",{ref:offsetRef,\"data-tw-slot\":isBaseline?\"baseline\":\"middle\",\"data-tw-text-top\":textAligned?textTop:undefined,style:{display:\"inline-flex\",flex:\"none\",// The anchor is ½ex above the baseline (vertical-align: middle); `ex` here\n// resolves against the same inherited font, so these land exactly on it.\nmarginTop:textAligned?`calc(0.5ex - ${textTop}px)`:undefined,marginBottom:isBaseline&&!textAligned?\"-0.5ex\":undefined},children:/*#__PURE__*/_jsx(\"span\",{ref:zoomRef,style:{display:\"inline-flex\",lineHeight:0,whiteSpace:\"pre-wrap\",zoom:scale},children:children})})});}TextWrap.displayName=\"Inline Text Embed\";addPropertyControls(TextWrap,{effects:{type:ControlType.Object,title:\"Effects\",icon:\"effect\",buttonTitle:\"Edit effects\",optional:true,controls:{onCanvas:{type:ControlType.Enum,title:\"On canvas\",defaultValue:\"play\",options:[\"play\",\"pause\"],optionTitles:[\"Play\",\"Pause\"],displaySegmentedControl:true},trigger:{type:ControlType.Enum,title:\"Trigger\",defaultValue:\"appear\",options:[\"appear\",\"layer in view\"],optionTitles:[\"On appear\",\"Layer in view\"],displaySegmentedControl:true,segmentedControlDirection:\"vertical\"},start:{type:ControlType.Enum,title:\"Start\",defaultValue:\"top\",options:[\"top\",\"center\",\"bottom\"],optionTitles:[\"Top\",\"Center\",\"Bottom\"],displaySegmentedControl:true,hidden:props=>props.trigger!==\"layer in view\"},replay:{type:ControlType.Boolean,title:\"Replay\",defaultValue:false,enabledTitle:\"Yes\",disabledTitle:\"No\",hidden:props=>props.trigger!==\"layer in view\"},per:{type:ControlType.Enum,title:\"Per\",defaultValue:\"word\",options:[\"word\",\"line\"],optionTitles:[\"Word\",\"Line\"],displaySegmentedControl:true},enter:{type:ControlType.Object,title:\"Effect\",icon:\"effect\",buttonTitle:\"Edit effect\",controls:{opacity:{type:ControlType.Number,title:\"Opacity\",defaultValue:0,min:0,max:1,step:.01},scale:{type:ControlType.Number,title:\"Scale\",defaultValue:1,min:0,max:10,step:.01},blur:{type:ControlType.Number,title:\"Blur\",defaultValue:5,min:0,max:100,step:1,unit:\"px\"},rotationMode:{type:ControlType.Enum,title:\"Rotation\",defaultValue:\"2d\",options:[\"2d\",\"3d\"],optionTitles:[\"2D\",\"3D\"],displaySegmentedControl:true},rotate2D:{type:ControlType.Number,title:\"2D rotate\",defaultValue:0,min:-360,max:360,step:1,unit:\"\\xb0\",hidden:props=>props.rotationMode!==\"2d\"},rotate3D:{type:ControlType.Object,title:\"3D rotate\",buttonTitle:\"Edit rotate\",hidden:props=>props.rotationMode!==\"3d\",controls:{x:{type:ControlType.Number,title:\"X\",defaultValue:0,min:-360,max:360,step:1,unit:\"\\xb0\"},y:{type:ControlType.Number,title:\"Y\",defaultValue:0,min:-360,max:360,step:1,unit:\"\\xb0\"},z:{type:ControlType.Number,title:\"Z\",defaultValue:0,min:-360,max:360,step:1,unit:\"\\xb0\"}},defaultValue:{x:0,y:0,z:0}},offsetX:{type:ControlType.Number,title:\"X offset\",defaultValue:0,step:1,unit:\"px\",displayStepper:true},offsetY:{type:ControlType.Number,title:\"Y offset\",defaultValue:10,step:1,unit:\"px\",displayStepper:true},transition:{type:ControlType.Transition,title:\"Transition\",defaultValue:{type:\"tween\",ease:[.15,.75,.5,1],duration:.4,delay:.05}}},defaultValue:{opacity:0,scale:1,blur:5,rotationMode:\"2d\",rotate2D:0,rotate3D:{x:0,y:0,z:0},offsetX:0,offsetY:10}},delay:{type:ControlType.Number,title:\"Delay\",defaultValue:0,min:0,step:.1,unit:\"s\",displayStepper:true}}},text:{type:ControlType.String,title:\"Text\",defaultValue:\"Embed [] elements [] your [] layers.\",displayTextArea:true},slot:{type:ControlType.String,title:\"Slot\",defaultValue:\"[]\"},layers:{type:ControlType.Array,title:\"Layers\",control:{type:ControlType.ComponentInstance}},font:{type:ControlType.Font,title:\"Font\",controls:\"extended\",defaultFontType:\"sans-serif\",displayTextAlignment:true,defaultValue:{variant:\"Medium\",fontSize:\"44px\",lineHeight:\"1.3em\",textAlign:\"left\"}},color:{type:ControlType.Color,title:\"Color\",defaultValue:\"#666666\"},layerAlign:{type:ControlType.Enum,title:\"Align\",defaultValue:\"baseline\",options:[\"baseline\",\"middle\"],optionTitles:[\"Baseline\",\"Middle\"],displaySegmentedControl:true},layerGap:{type:ControlType.Number,title:\"Layer gap\",defaultValue:0,min:0,step:1,unit:\"px\"},scale:{type:ControlType.Number,title:\"Scale\",defaultValue:1,min:.1,max:2,step:.1,unit:\"x\"},transform:{type:ControlType.Enum,title:\"Transform\",defaultValue:\"none\",options:[\"none\",\"capitalize\",\"lowercase\",\"uppercase\"],optionTitles:[\"None\",\"Capitalize\",\"Lowercase\",\"Uppercase\"]},wrap:{type:ControlType.Enum,title:\"Wrap\",defaultValue:\"auto\",options:[\"auto\",\"balance\",\"pretty\"],optionTitles:[\"Auto\",\"Balance\",\"Pretty\"]},truncate:{type:ControlType.Boolean,title:\"Truncate\",defaultValue:false,enabledTitle:\"Yes\",disabledTitle:\"No\"},lines:{type:ControlType.Number,title:\"Lines\",defaultValue:1,min:1,step:1,unit:\"L\",displayStepper:true,hidden:props=>!props.truncate},userSelect:{type:ControlType.Enum,title:\"User select\",defaultValue:\"auto\",options:[\"auto\",\"none\"],optionTitles:[\"Auto\",\"None\"],displaySegmentedControl:true},tag:{type:ControlType.Enum,title:\"Tag\",defaultValue:\"h1\",options:[\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"p\",\"span\"],description:\"More components at [Framer University](https://frameruni.link/cc).\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"TextWrap\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutHeight\":\"auto\",\"framerIntrinsicHeight\":\"auto\",\"framerSupportedLayoutWidth\":\"any-prefer-fixed\",\"framerContractVersion\":\"1\",\"framerDisableUnlink\":\"*\",\"framerIntrinsicWidth\":\"450\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./TextWrap_Prod.map"],"mappings":"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"}