{"version":3,"file":"shared-lib.DA3TPXo_.mjs","names":["useRef","useState","useLayoutEffect","useEffect","metadata","metadata","siteMetadata","metadataVersion","__FramerMetadata__","siteMetadata"],"sources":["https:/framerusercontent.com/modules/oQk14E8Ar7JXjnVOhZW2/Ygqsjts2Sbpy048b5pV8/TextWrap_Prod.js","https:/framerusercontent.com/modules/m8dwkoeQsKx1vlVQUlCx/cfnJ79Ph8VmejFgIvnqS/siteMetadata.js","https:/framerusercontent.com/modules/nLGCaTC8uUd2IDC24i6Y/l0iQkypzjDXQniGemFuf/a2NxIGbTT.js","https:/framerusercontent.com/modules/q7lPkls6N93NfGZe9g8p/FIdqawcu1OwiMuk916aO/fz_Xb9rQb.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{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 flushLine in buildEffectContent).\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 lineIndices=useLineGroups(effects?.per===\"line\",containerRef,tokenRefs);const content=effects?buildEffectContent(parts,layers,slot,layerAlign,layerGap,scale,effects,play,staticVisible,canvasLike,replayKey,reducedMotion,tokenRefs,tokenRefCallbacks,lineIndices):buildPlainContent(parts,layers,slot,layerAlign,layerGap,scale);return /*#__PURE__*/_jsx(Tag,{\"data-build\":\"text-wrap-prod-20261004-02\",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: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;}// Real visual-line detection for `per: line`, same technique already used elsewhere in this\n// codebase for exactly this purpose (TextWave's `buildLayout`, `el.offsetTop` compared\n// frame-to-frame — not a literal-\"\\n\" simplification, which does nothing for the common case\n// of a plain auto-wrapping paragraph with no typed line breaks). Each token's own offsetTop\n// is read after layout; a new visual line starts wherever a token's top moved down by more\n// than half its own height versus the previous token, catching both explicit breaks (a \"\\n\"\n// already renders as a real line via `pre-wrap`, so it naturally produces a top jump) and\n// ordinary wrapping. Runs only when `per: line` is selected.\nfunction useLineGroups(enabled,containerRef,tokenRefs){const[lineIndices,setLineIndices]=useState(null);const measureRef=useRef(()=>{});useIsoLayoutEffect(()=>{if(!enabled){measureRef.current=()=>{};setLineIndices(prev=>prev===null?prev:null);return;}const measure=()=>{const refs=tokenRefs.current;// Incomplete trees (mid remount from flat → whole-line) must not publish a\n// partial [0,0,…] grouping — that thrash remounts forever.\nif(!refs.length||refs.some(el=>!el))return;const root=containerRef.current;const rootTop=root?root.getBoundingClientRect().top:0;let visual=-1;let previousTop=0;let first=true;// Viewport tops relative to the text root — immune to offsetParent changes when\n// whole-line EnterTokens become `display:block` wrappers around measure spans.\nconst next=refs.map(el=>{const top=el.getBoundingClientRect().top-rootTop;const height=el.getBoundingClientRect().height||el.offsetHeight||1;if(first||Math.abs(top-previousTop)>height/2)visual++;first=false;previousTop=top;return visual;});setLineIndices(prev=>prev&&prev.length===next.length&&prev.every((v,i)=>v===next[i])?prev:next);};measureRef.current=measure;const node=containerRef.current;const resize=typeof ResizeObserver!==\"undefined\"&&node?new ResizeObserver(measure):null;if(node)resize?.observe(node);const fonts=document.fonts;fonts?.ready?.then(measure);fonts?.addEventListener?.(\"loadingdone\",measure);// Synchronous first measurement (see the identical fix in InlineLayer above) — the\n// words/slots are already in the DOM by this point in the commit, so grouping is\n// correct before the browser's first paint. No enter flash from a wrong initial grouping.\nmeasure();return()=>{resize?.disconnect();fonts?.removeEventListener?.(\"loadingdone\",measure);};},[enabled]);// Re-measure after every render too (text/prop/layout changes), same idiom as InlineLayer.\nuseIsoLayoutEffect(()=>{measureRef.current();});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){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{initial: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,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,children:children});}return /*#__PURE__*/_jsx(MotionEnterToken,{enter:enter,outerDelay:outerDelay,index:index,play:play,staticVisible:staticVisible,reducedMotion:reducedMotion,innerRef:innerRef,asLine:asLine,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,children}){const motionProps=enterMotionProps(enter,outerDelay,index,play,staticVisible,reducedMotion);// Busy while hidden or in-flight. Cleared on settle.\nconst[busy,setBusy]=useState(()=>!(staticVisible||reducedMotion));useEffect(()=>{if(staticVisible||reducedMotion){setBusy(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,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,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){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: walk units in order, assign each non-space token its measured line,\n// and flush a line EnterToken whenever the visual line index changes. Spaces stay with\n// the line they follow (or the next line if they lead).\nconst out=[];let wordSeq=0;let currentLine=-1;let lineKids=[];let lineHasToken=false;const flushLine=()=>{if(!lineHasToken&&lineKids.length===0)return;// 1.18: drop the wrap-point space at the end of each line block. In the plain text\n// that space hangs past the line edge (`pre-wrap` soft wrap) and takes no width, but at\n// the end of a block Chrome keeps it, so centered/right lines sat half/one space left of\n// no effect and per word. Line breaks (\"\\n\") are kept.\nconst last=lineKids[lineKids.length-1];if(typeof last===\"string\"){const trimmed=last.replace(/[^\\S\\n]+$/,\"\");if(trimmed)lineKids[lineKids.length-1]=trimmed;else lineKids.pop();}out.push(/*#__PURE__*/_jsx(EnterToken,{asLine:true,enter:effects.enter,outerDelay:effects.delay,index:Math.max(0,currentLine),play:tokenPlay,staticVisible:staticVisible,canvasLike:canvasLike,reducedMotion:reducedMotion,children:lineKids},`line-${currentLine}-${replayKey}`));lineKids=[];lineHasToken=false;};for(const[ui,u]of units.entries()){if(u.kind===\"space\"){lineKids.push(u.value);continue;}const flatIndex=wordSeq++;const line=lineIndices[flatIndex]!==undefined?lineIndices[flatIndex]:flatIndex;if(currentLine===-1)currentLine=line;if(line!==currentLine){flushLine();currentLine=line;}const setRef=getStableTokenRef(tokenRefs,tokenRefCallbacks,flatIndex);if(u.kind===\"word\"){lineKids.push(/*#__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.\nlineKids.push(/*#__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`));}lineHasToken=true;}flushLine();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\":{\"framerIntrinsicHeight\":\"auto\",\"framerSupportedLayoutWidth\":\"any-prefer-fixed\",\"framerSupportedLayoutHeight\":\"auto\",\"framerDisableUnlink\":\"*\",\"framerIntrinsicWidth\":\"450\",\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./TextWrap_Prod.map","// Generated by Framer (31f3ac5)\nexport default function metadata(params,activeLocale){return{description:\"Text Wrap Component for Framer. Created by Framer University.\",favicon:\"https://framerusercontent.com/assets/5cobUGTEj03dPTNLhGrQTXXW7M.png\",robots:\"max-image-preview:large\",socialImage:\"https://framerusercontent.com/assets/sJrxFvvidN5PX9cdzSjcV6FV82Y.png\",title:\"Text Wrap Component by Framer University\"};}export const metadataVersion=1;\nexport const __FramerMetadata__ = {\"exports\":{\"metadataVersion\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}","// Generated by Framer (291a518)\nimport siteMetadata from\"#framer/local/siteMetadata/siteMetadata/siteMetadata.js\";export default function metadata(params,activeLocale){return{breakpoints:[{hash:\"17bosd4\",mediaQuery:\"(min-width: 1200px)\"},{hash:\"1hw0zld\",mediaQuery:\"(min-width: 810px) and (max-width: 1199.98px)\"},{hash:\"1rw7btk\",mediaQuery:\"(max-width: 809.98px)\"}],description:siteMetadata(params,activeLocale).description,elements:{},robots:\"max-image-preview:large\",serializationId:\"framer-VRFFt\",title:siteMetadata(params,activeLocale).title||\"Home\",viewport:\"width=device-width\"};}export const metadataVersion=1;\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"metadataVersion\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}","// Generated by Framer (291a518)\nimport siteMetadata from\"#framer/local/siteMetadata/siteMetadata/siteMetadata.js\";export default function metadata(params,activeLocale){return{breakpoints:[{hash:\"1g45bq4\",mediaQuery:\"(min-width: 1200px)\"},{hash:\"jwitxh\",mediaQuery:\"(min-width: 810px) and (max-width: 1199.98px)\"},{hash:\"1vk3qo8\",mediaQuery:\"(max-width: 809.98px)\"}],description:siteMetadata(params,activeLocale).description,elements:{},robots:\"max-image-preview:large\",serializationId:\"framer-6PHLn\",title:siteMetadata(params,activeLocale).title||\"Banner\",viewport:\"width=device-width\"};}export const metadataVersion=1;\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"metadataVersion\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}"],"mappings":"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"}