{"version":3,"file":"TextPressure_1.DPa7DW0T.mjs","names":["useRef","useState","width"],"sources":["https:/framerusercontent.com/modules/7XXNevU9q0gaTdHaW5oN/WXHbPYaQ6alzh57hsFqg/TextPressure_1.js"],"sourcesContent":["// TextPressure: Interactive variable font text effect for Framer\n//\n// @framerSupportedLayoutWidth any-prefer-fixed\n// @framerSupportedLayoutHeight fixed\nimport{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{useEffect,useRef,useState,startTransition}from\"react\";import{addPropertyControls,ControlType}from\"framer\";/**\n * TextPressure\n *\n * Interactive variable font text effect. Each character responds to mouse position with width, weight, and italic axes. Supports custom font via URL. Stroke and alpha effects optional.\n *\n * @framerIntrinsicWidth 400\n * @framerIntrinsicHeight 100\n *\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight fixed\n */export default function TextPressure(props){const{text=\"Compressa\",fontFamily=\"Compressa VF\",fontUrl=\"https://res.cloudinary.com/dr6lvwubh/raw/upload/v1529908256/CompressaPRO-GX.woff2\",width=true,weight=true,italic=true,alpha=false,flex=true,stroke=false,scale=false,textColor=\"#FFFFFF\",strokeColor=\"#FF0000\",minFontSize=24,style}=props;const containerRef=useRef(null);const titleRef=useRef(null);const spansRef=useRef([]);const mouseRef=useRef({x:0,y:0});const cursorRef=useRef({x:0,y:0});const[fontSize,setFontSize]=useState(minFontSize);const[scaleY,setScaleY]=useState(1);const[lineHeight,setLineHeight]=useState(1);const chars=text.split(\"\");const dist=(a,b)=>{const dx=b.x-a.x;const dy=b.y-a.y;return Math.sqrt(dx*dx+dy*dy);};useEffect(()=>{const handleMouseMove=e=>{cursorRef.current.x=e.clientX;cursorRef.current.y=e.clientY;};const handleTouchMove=e=>{const t=e.touches[0];cursorRef.current.x=t.clientX;cursorRef.current.y=t.clientY;};window.addEventListener(\"mousemove\",handleMouseMove);window.addEventListener(\"touchmove\",handleTouchMove,{passive:false});if(containerRef.current){const{left,top,width,height}=containerRef.current.getBoundingClientRect();mouseRef.current.x=left+width/2;mouseRef.current.y=top+height/2;cursorRef.current.x=mouseRef.current.x;cursorRef.current.y=mouseRef.current.y;}return()=>{window.removeEventListener(\"mousemove\",handleMouseMove);window.removeEventListener(\"touchmove\",handleTouchMove);};},[]);const setSize=()=>{if(!containerRef.current||!titleRef.current)return;const{width:containerW,height:containerH}=containerRef.current.getBoundingClientRect();let newFontSize=containerW/(chars.length/2);newFontSize=Math.max(newFontSize,minFontSize);startTransition(()=>setFontSize(newFontSize));startTransition(()=>setScaleY(1));startTransition(()=>setLineHeight(1));requestAnimationFrame(()=>{if(!titleRef.current)return;const textRect=titleRef.current.getBoundingClientRect();if(scale&&textRect.height>0){const yRatio=containerH/textRect.height;startTransition(()=>setScaleY(yRatio));startTransition(()=>setLineHeight(yRatio));}});};useEffect(()=>{setSize();window.addEventListener(\"resize\",setSize);return()=>window.removeEventListener(\"resize\",setSize);},[scale,text]);useEffect(()=>{let rafId;const animate=()=>{mouseRef.current.x+=(cursorRef.current.x-mouseRef.current.x)/15;mouseRef.current.y+=(cursorRef.current.y-mouseRef.current.y)/15;if(titleRef.current){const titleRect=titleRef.current.getBoundingClientRect();const maxDist=titleRect.width/2;spansRef.current.forEach(span=>{if(!span)return;const rect=span.getBoundingClientRect();const charCenter={x:rect.x+rect.width/2,y:rect.y+rect.height/2};const d=dist(mouseRef.current,charCenter);const getAttr=(distance,minVal,maxVal)=>{const val=maxVal-Math.abs(maxVal*distance/maxDist);return Math.max(minVal,val+minVal);};const wdth=width?Math.floor(getAttr(d,5,200)):100;const wght=weight?Math.floor(getAttr(d,100,900)):400;const italVal=italic?getAttr(d,0,1).toFixed(2):0;const alphaVal=alpha?getAttr(d,0,1).toFixed(2):1;span.style.opacity=alphaVal.toString();span.style.fontVariationSettings=`'wght' ${wght}, 'wdth' ${wdth}, 'ital' ${italVal}`;});}rafId=requestAnimationFrame(animate);};animate();return()=>cancelAnimationFrame(rafId);},[width,weight,italic,alpha,chars.length]);const dynamicClassName=[flex?\"flex\":\"\",stroke?\"stroke\":\"\"].filter(Boolean).join(\" \");return /*#__PURE__*/_jsxs(\"div\",{ref:containerRef,style:{position:\"relative\",width:\"100%\",height:\"30%\",background:\"transparent\",...style},children:[/*#__PURE__*/_jsx(\"style\",{children:`\n        @font-face {\n          font-family: '${fontFamily}';\n          src: url('${fontUrl}');\n          font-style: normal;\n        }\n        .flex {\n          display: flex;\n          justify-content: space-between;\n        }\n        .stroke span {\n          position: relative;\n          color: ${textColor};\n        }\n        .stroke span::after {\n          content: attr(data-char);\n          position: absolute;\n          left: 0;\n          top: 0;\n          color: transparent;\n          z-index: -1;\n          -webkit-text-stroke-width: 3px;\n          -webkit-text-stroke-color: ${strokeColor};\n        }\n        .text-pressure-title {\n          color: ${textColor};\n        }\n      `}),/*#__PURE__*/_jsx(\"h1\",{ref:titleRef,className:`text-pressure-title ${dynamicClassName}`,style:{fontFamily,textTransform:\"uppercase\",fontSize:fontSize,lineHeight,transform:`scale(1, ${scaleY})`,transformOrigin:\"center top\",margin:0,textAlign:\"center\",userSelect:\"none\",whiteSpace:\"nowrap\",fontWeight:100,width:\"100%\"},children:chars.map((char,i)=>/*#__PURE__*/_jsx(\"span\",{ref:el=>spansRef.current[i]=el,\"data-char\":char,style:{display:\"inline-block\",color:stroke?undefined:textColor},children:char},i))})]});}addPropertyControls(TextPressure,{text:{type:ControlType.String,title:\"Text\",defaultValue:\"Compressa\"},fontFamily:{type:ControlType.String,title:\"Font Family\",defaultValue:\"Compressa VF\",hidden:true},fontUrl:{type:ControlType.String,title:\"Font URL\",defaultValue:\"https://res.cloudinary.com/dr6lvwubh/raw/upload/v1529908256/CompressaPRO-GX.woff2\",displayTextArea:true,hidden:true},width:{type:ControlType.Boolean,title:\"Width Axis\",defaultValue:true,enabledTitle:\"On\",disabledTitle:\"Off\"},weight:{type:ControlType.Boolean,title:\"Weight Axis\",defaultValue:true,enabledTitle:\"On\",disabledTitle:\"Off\"},italic:{type:ControlType.Boolean,title:\"Italic Axis\",defaultValue:true,enabledTitle:\"On\",disabledTitle:\"Off\"},alpha:{type:ControlType.Boolean,title:\"Alpha Axis\",defaultValue:false,enabledTitle:\"On\",disabledTitle:\"Off\"},flex:{type:ControlType.Boolean,title:\"Flex Layout\",defaultValue:true,enabledTitle:\"On\",disabledTitle:\"Off\"},stroke:{type:ControlType.Boolean,title:\"Stroke\",defaultValue:false,enabledTitle:\"On\",disabledTitle:\"Off\"},scale:{type:ControlType.Boolean,title:\"Scale to Fit\",defaultValue:false,enabledTitle:\"On\",disabledTitle:\"Off\"},textColor:{type:ControlType.Color,title:\"Text Color\",defaultValue:\"#FFFFFF\"},strokeColor:{type:ControlType.Color,title:\"Stroke Color\",defaultValue:\"#FF0000\"},minFontSize:{type:ControlType.Number,title:\"Min Font Size\",defaultValue:24,min:8,max:200,step:1,unit:\"px\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"TextPressure\",\"slots\":[],\"annotations\":{\"framerIntrinsicWidth\":\"400\",\"framerIntrinsicHeight\":\"100\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutHeight\":\"fixed\",\"framerSupportedLayoutWidth\":\"any-prefer-fixed\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./TextPressure_1.map"],"mappings":"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"}