{
  "version": 3,
  "sources": ["ssg:https://framerusercontent.com/modules/pYGJbktLS5nZG5gcVsy0/rrCcSnsX0Ghwk1FVmlDD/TextMagnifier_Prod.js"],
  "sourcesContent": ["import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from\"react/jsx-runtime\";import{useSpring,useMotionValue,useMotionValueEvent}from\"framer-motion\";import{useRef,useId,useMemo,useEffect}from\"react\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";/**\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight any\n *\n * @framerDisableUnlink\n *\n * @framerIntrinsicWidth 400\n * @framerIntrinsicHeight 200\n */export default function MagneticText({text,color,font,transform,balance,userSelect,tag,style,range,smoothing,boldness}){const id=useInstanceId();const isCanvas=RenderTarget.current()===RenderTarget.canvas;const spanClassName=`${id}-span`;const Tag=tag;const textAlign=font?.textAlign||\"center\";const springTransition={damping:100,stiffness:mapRange(smoothing,0,100,2e3,50)};const hasSpring=smoothing!==0;const mouseX=useMotionValue(0);const mouseY=useMotionValue(0);const mouseXSpring=useSpring(mouseX,springTransition);const mouseYSpring=useSpring(mouseY,springTransition);const elementsRef=useRef([]);const initializedRef=useRef(false);const spanWidthsRef=useRef([]);useEffect(()=>{const handleMouseMove=e=>{mouseX.set(e.clientX);mouseY.set(e.clientY);if(!initializedRef.current){mouseXSpring.jump(e.clientX);mouseYSpring.jump(e.clientY);initializedRef.current=true;}};window.addEventListener(\"mousemove\",handleMouseMove);return()=>window.removeEventListener(\"mousemove\",handleMouseMove);},[]);const lines=useMemo(()=>{const textLines=text.split(\"\\n\");const lines=[];for(let i=0;i<textLines.length;i++){const line=textLines[i].split(/[ \\t]+/);lines.push(line);}return lines;},[text]);let index=0;const createLineChildren=(lineIndex,lineWords)=>{return lineWords.map((word,wordIndex)=>/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(\"span\",{className:`${id}-word-wrapper`,children:word.split(\"\").map((char,charIndex)=>{const savedIndex=index;index++;return /*#__PURE__*/_jsx(\"span\",{ref:el=>{if(el)elementsRef.current[savedIndex]=el;},className:spanClassName,children:char},`${lineIndex}-${wordIndex}-${charIndex}`);})},`${lineIndex}-${wordIndex}`),wordIndex<lineWords.length-1&&\" \"]}));};const updateScale=(mx,my)=>{let cumulativeOffset=0;let elementOffset=[];let prevYPosition=0;const elementLineMap=new Map;const elementScaleMap=new Map;const lineOffsets=[];let lineIndex=-1;for(let i=0;i<elementsRef.current.length;i++){const element=elementsRef.current[i];if(!element)continue;const rect=element.getBoundingClientRect();const characterCenterX=rect.left+rect.width/2;const characterCenterY=rect.top+rect.height/2;const distance=Math.sqrt(Math.pow(characterCenterX-mx,2)+Math.pow(characterCenterY-my,2));const d=clamp01(mapRange(distance,range/2,0,0,1));const yPosition=rect.y+rect.height/2;if(Math.abs(yPosition-prevYPosition)>2){lineIndex++;if(lineIndex>0){lineOffsets[lineIndex-1]=cumulativeOffset;}cumulativeOffset=0;}prevYPosition=yPosition;elementLineMap.set(element,lineIndex);if(d<=0){element.style[\"-webkit-text-stroke-width\"]=\"\";elementOffset[i]=cumulativeOffset;}else{const scaleX=mapRange(d,0,1,1,mapRange(boldness,0,1,1,1.285))// 1.2\n;const scaleY=mapRange(d,0,1,1,mapRange(boldness,0,1,1,.928))// 0.95\n;const w=mapRange(d,0,1,0,boldness/10);const halfOffset=spanWidthsRef.current[i]*(scaleX-1)/2;elementScaleMap.set(element,[scaleX,scaleY]);cumulativeOffset+=halfOffset;elementOffset[i]=cumulativeOffset;cumulativeOffset+=halfOffset;element.style[\"-webkit-text-stroke-width\"]=`${w}em`;}if(i===elementsRef.current.length-1){lineOffsets[lineIndex]=cumulativeOffset;}}for(let i=0;i<elementsRef.current.length;i++){const element=elementsRef.current[i];if(!element)continue;const scaleValue=elementScaleMap.get(element);const scale=scaleValue?`scale(${scaleValue[0]}, ${scaleValue[1]})`:\"\";const offset=elementOffset[i];const lineIndex=elementLineMap.get(element)||0;const lineOffset=lineOffsets[lineIndex];let offsetValue=offset;switch(textAlign){case\"center\":offsetValue-=lineOffset/2;break;case\"right\":offsetValue-=lineOffset;break;}const translate=Math.abs(offsetValue)>.1?`translateX(${offsetValue}px)`:\"\";element.style.transform=translate&&scale?`${translate} ${scale}`:translate||scale;}};useMotionValueEvent(hasSpring?mouseXSpring:mouseX,\"change\",mx=>{if(mouseY){updateScale(mx,hasSpring?mouseYSpring.get():mouseY.get());}});useMotionValueEvent(hasSpring?mouseYSpring:mouseY,\"change\",my=>{if(mouseX){updateScale(hasSpring?mouseXSpring.get():mouseX.get(),my);}});useEffect(()=>{if(!isCanvas){elementsRef.current.forEach((el,i)=>{if(el){spanWidthsRef.current[i]=el.getBoundingClientRect().width;}});}},[isCanvas,text,font]);return /*#__PURE__*/_jsxs(Tag,{style:{position:\"relative\",cursor:\"default\",margin:0,whiteSpace:style?.width?\"pre\":\"nowrap\",fontWeight:400,textAlign,userSelect:userSelect?\"auto\":\"none\",textWrap:balance?\"balance\":undefined,textTransform:transform,color,...font,...style},children:[/*#__PURE__*/_jsx(\"style\",{children:`\n\t.${id}-line {\n\t\twidth: 100%;\n\t\tdisplay: block;\n\t\ttransform-style: preserve-3d;\n\t}\n\t.${id}-word-wrapper {\n\t\tdisplay: inline-block;\n\t\ttransform-style: preserve-3d;\n\t\twhite-space: pre;\n\t}\n\t.${id}-span {\n\t\tdisplay: inline-block;\n\t\ttransform-style: preserve-3d;\n\t\twhite-space: pre;\n\t\twill-change: transform, -webkit-text-stroke-width, padding-inline;\n\t\ttransform-origin: 50% 50%};\n\t\t-webkit-text-stroke-color: currentColor;\n\t}\n`}),lines.length===1?createLineChildren(0,lines[0]):lines.map((lineWords,lineIndex)=>/*#__PURE__*/_jsx(\"span\",{className:`${id}-line`,children:createLineChildren(lineIndex,lineWords)},lineIndex))]});}MagneticText.displayName=\"Text Magnifier\";addPropertyControls(MagneticText,{text:{type:ControlType.String,defaultValue:\"Learn Framer With Framer University\",displayTextArea:true},range:{type:ControlType.Number,defaultValue:200},smoothing:{type:ControlType.Number,defaultValue:50,min:0,max:100,step:1},boldness:{type:ControlType.Number,defaultValue:.7,min:0,max:1,step:.1},font:{type:\"font\",controls:\"extended\",defaultFontType:\"sans-serif\",defaultValue:{fontSize:32,lineHeight:1.2}},color:{type:ControlType.Color,defaultValue:\"#999999\"},transform:{type:ControlType.Enum,defaultValue:\"none\",options:[\"none\",\"uppercase\",\"lowercase\"],optionTitles:[\"None\",\"Uppercase\",\"Lowercase\"]},balance:{type:ControlType.Boolean,defaultValue:false},userSelect:{type:ControlType.Boolean,defaultValue:false},tag:{type:ControlType.Enum,defaultValue:\"p\",displaySegmentedControl:true,options:[\"h1\",\"h2\",\"h3\",\"p\"],optionTitles:[\"H1\",\"H2\",\"H3\",\"P\"],description:\"More components at [Framer University](https://frameruni.link/cc).\"}});const useInstanceId=()=>{const id=useId();const cleanId=id.replace(/:/g,\"\");const instanceId=`frameruni-${cleanId}`;return instanceId;};function mapRange(value,fromLow,fromHigh,toLow,toHigh){if(fromLow===fromHigh){return toLow;}const percentage=(value-fromLow)/(fromHigh-fromLow);return toLow+percentage*(toHigh-toLow);}function clamp01(value){return Math.max(0,Math.min(value,1));}\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"MagneticText\",\"slots\":[],\"annotations\":{\"framerIntrinsicWidth\":\"400\",\"framerContractVersion\":\"1\",\"framerDisableUnlink\":\"*\",\"framerIntrinsicHeight\":\"200\",\"framerSupportedLayoutWidth\":\"any\",\"framerSupportedLayoutHeight\":\"any\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./TextMagnifier_Prod.map"],
  "mappings": "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",
  "names": ["MagneticText", "text", "color", "font", "transform", "balance", "userSelect", "tag", "style", "range", "smoothing", "boldness", "id", "useInstanceId", "isCanvas", "RenderTarget", "spanClassName", "Tag", "textAlign", "springTransition", "mapRange", "hasSpring", "mouseX", "useMotionValue", "mouseY", "mouseXSpring", "useSpring", "mouseYSpring", "elementsRef", "pe", "initializedRef", "spanWidthsRef", "ue", "handleMouseMove", "e", "window", "lines", "textLines", "i", "line", "index", "createLineChildren", "lineIndex", "lineWords", "word", "wordIndex", "u", "l", "p", "char", "charIndex", "savedIndex", "el", "updateScale", "mx", "my", "cumulativeOffset", "elementOffset", "prevYPosition", "elementLineMap", "elementScaleMap", "lineOffsets", "element", "rect", "characterCenterX", "characterCenterY", "distance", "d", "clamp01", "yPosition", "scaleX", "scaleY", "w", "halfOffset", "scaleValue", "scale", "offset", "lineOffset", "offsetValue", "translate", "useMotionValueEvent", "addPropertyControls", "ControlType", "ae", "value", "fromLow", "fromHigh", "toLow", "toHigh", "percentage"]
}
