{"version":3,"file":"TextRing3D.CQbOhubX.mjs","names":["React.useRef","React.useMemo","React.useState"],"sources":["https:/framerusercontent.com/modules/0CgUGiCXEmCjY9qD4mL1/Yi3SdxjBB5TQzwdxmOGE/TextRing3D.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import*as React from\"react\";import{addPropertyControls,ControlType,useIsStaticRenderer}from\"framer\";import{motion,useScroll,useSpring,useTransform}from\"framer-motion\";/**\n * 3D Text Ring / Tube\n *\n * @framerDisableUnlink\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight any-prefer-fixed\n * @framerIntrinsicWidth 1000\n * @framerIntrinsicHeight 700\n */export default function TextRing3D(props){const{texts=[\"COCO\",\"MARIA\",\"DAN\",\"MIKO\",\"VIGO\",\"COCO\",\"MARIA\",\"DAN\",\"MIKO\",\"VIGO\"],ringSize=80,// How much of the component height\n// the visible ring should approximately occupy.\nverticalFill=84,perspectiveRatio=1.4,// Left / right tilt\ntilt=15,// Forward / backward tilt\ndepthTilt=0,rotations=1,startAngle=0,direction=\"forward\",smoothScroll=true,textScale=7,minGap=.5,font={},color=\"#111111\",uppercase=false,hideBackfaces=false,style}=props;const rootRef=React.useRef(null);const measurementRef=React.useRef(null);const isStaticRenderer=useIsStaticRenderer();// --------------------------------------------------\n// Typography\n//\n// Font size is responsive, therefore any font-size\n// coming from Framer Typography is ignored.\n// --------------------------------------------------\nconst typographyStyle=React.useMemo(()=>{const next={...font||{}};delete next.fontSize;delete next.textAlign;return next;},[font]);// --------------------------------------------------\n// Component layout size\n//\n// clientWidth / contentRect are used instead of\n// getBoundingClientRect() so Framer Canvas zoom\n// doesn't affect geometry.\n// --------------------------------------------------\nconst[size,setSize]=React.useState({width:1e3,height:700});React.useEffect(()=>{const element=rootRef.current;if(!element)return;const applySize=(width,height)=>{if(!Number.isFinite(width)||!Number.isFinite(height)||width<=0||height<=0){return;}setSize(previous=>{if(Math.abs(previous.width-width)<.1&&Math.abs(previous.height-height)<.1){return previous;}return{width,height};});};const updateSize=()=>{applySize(element.clientWidth,element.clientHeight);};updateSize();if(typeof ResizeObserver!==\"undefined\"){const observer=new ResizeObserver(entries=>{const entry=entries[0];if(!entry){updateSize();return;}applySize(entry.contentRect.width||element.clientWidth,entry.contentRect.height||element.clientHeight);});observer.observe(element);return()=>{observer.disconnect();};}window.addEventListener(\"resize\",updateSize);return()=>{window.removeEventListener(\"resize\",updateSize);};},[]);// --------------------------------------------------\n// Common responsive scale\n// --------------------------------------------------\nconst baseSize=Math.max(1,Math.min(size.width,size.height));// --------------------------------------------------\n// Texts\n// --------------------------------------------------\nconst safeTexts=Array.isArray(texts)&&texts.length>0?texts.map(text=>String(text)):[\"TEXT\"];const count=safeTexts.length;const renderedTexts=safeTexts.map(text=>uppercase?text.toUpperCase():text);const textSignature=renderedTexts.join(\"\\x01\");const typographySignature=JSON.stringify(typographyStyle);// --------------------------------------------------\n// Ring geometry\n// --------------------------------------------------\nconst radius=baseSize*(ringSize/100)*.5;const angleStep=count>0?360/count:360;const circumference=Math.PI*2*radius;const slotArc=count>0?circumference/count:circumference;// --------------------------------------------------\n// Perspective\n// --------------------------------------------------\nconst perspective=Math.max(1,baseSize*perspectiveRatio);// --------------------------------------------------\n// Supersampling\n// --------------------------------------------------\nconst safePerspectiveGap=Math.max(1,perspective-radius);const frontProjectionScale=perspective/safePerspectiveGap;const textRenderScale=Math.min(4,Math.max(2,frontProjectionScale*1.5));const inverseTextRenderScale=1/textRenderScale;// --------------------------------------------------\n// Measure normalized label widths\n// --------------------------------------------------\nconst[normalizedWidths,setNormalizedWidths]=React.useState([]);React.useLayoutEffect(()=>{if(typeof window===\"undefined\"||typeof document===\"undefined\"){return;}const probe=measurementRef.current;if(!probe)return;let cancelled=false;const measure=()=>{if(cancelled)return;const referenceSize=100;probe.style.fontSize=`${referenceSize}px`;const nextWidths=renderedTexts.map(text=>{probe.textContent=text||\" \";const width=probe.offsetWidth;return Math.max(0,width/referenceSize);});probe.textContent=\"Measurement\";if(!cancelled){setNormalizedWidths(nextWidths);}};measure();if(document.fonts?.ready){document.fonts.ready.then(measure);}const fonts=document.fonts;if(fonts&&typeof fonts.addEventListener===\"function\"){fonts.addEventListener(\"loadingdone\",measure);}return()=>{cancelled=true;if(fonts&&typeof fonts.removeEventListener===\"function\"){fonts.removeEventListener(\"loadingdone\",measure);}};},[textSignature,typographySignature]);// --------------------------------------------------\n// Width fallback\n// --------------------------------------------------\nconst widthRatios=renderedTexts.map((text,index)=>{const measured=normalizedWidths[index];if(Number.isFinite(measured)&&measured>0){return measured;}return Math.max(.5,text.length*.6);});// --------------------------------------------------\n// Responsive text size\n// --------------------------------------------------\nconst preferredFontSize=baseSize*(textScale/100);// --------------------------------------------------\n// Gap fitting\n// --------------------------------------------------\nlet fittedFontLimit=preferredFontSize;if(count>1&&slotArc>0){let smallestLimit=Number.POSITIVE_INFINITY;for(let index=0;index<count;index++){const next=(index+1)%count;const currentRatio=widthRatios[index]||0;const nextRatio=widthRatios[next]||0;const occupiedRatio=(currentRatio+nextRatio)/2;const totalRatio=occupiedRatio+Math.max(0,minGap);if(totalRatio<=0){continue;}const pairLimit=slotArc/totalRatio;smallestLimit=Math.min(smallestLimit,pairLimit);}if(Number.isFinite(smallestLimit)){fittedFontLimit=Math.min(preferredFontSize,smallestLimit);}}const finalFontSize=Math.max(1,fittedFontLimit);const highResFontSize=finalFontSize*textRenderScale;// --------------------------------------------------\n// Automatic vertical fitting\n//\n// We estimate the actual projected vertical bounds\n// of the circular ring after rotateX + rotateZ +\n// perspective.\n//\n// This solves two problems:\n//\n// 1. excessive top/bottom empty area\n// 2. perspective making one side appear vertically\n//    less centred than the other\n// --------------------------------------------------\nconst tiltRad=tilt*Math.PI/180;const depthTiltRad=depthTilt*Math.PI/180;let projectedMinY=Number.POSITIVE_INFINITY;let projectedMaxY=Number.NEGATIVE_INFINITY;const projectionSamples=180;for(let index=0;index<projectionSamples;index++){const angle=index/projectionSamples*Math.PI*2;// Original circle in X/Z plane.\nconst x=Math.sin(angle)*radius;const z=Math.cos(angle)*radius;// rotateX(depthTilt)\nconst x1=x;const y1=-z*Math.sin(depthTiltRad);const z1=z*Math.cos(depthTiltRad);// rotateZ(tilt)\nconst y2=x1*Math.sin(tiltRad)+y1*Math.cos(tiltRad);// Perspective projection.\nconst denominator=Math.max(1,perspective-z1);const projection=perspective/denominator;const projectedY=y2*projection;projectedMinY=Math.min(projectedMinY,projectedY);projectedMaxY=Math.max(projectedMaxY,projectedY);}if(!Number.isFinite(projectedMinY)||!Number.isFinite(projectedMaxY)){projectedMinY=-finalFontSize;projectedMaxY=finalFontSize;}// Centre of projected ring geometry.\nconst projectedCenterY=(projectedMinY+projectedMaxY)/2;const projectedRingHeight=Math.max(1,projectedMaxY-projectedMinY);// --------------------------------------------------\n// Include text dimensions in the estimated bounds.\n//\n// A tilted long label contributes extra vertical\n// height because some of its horizontal width becomes\n// vertical after rotateZ.\n// --------------------------------------------------\nconst largestTextRatio=widthRatios.length>0?Math.max(...widthRatios):1;const largestTextWidth=largestTextRatio*finalFontSize;const estimatedLineHeight=finalFontSize*1.1;const textVerticalEnvelope=(largestTextWidth*Math.abs(Math.sin(tiltRad))+estimatedLineHeight*Math.max(.35,Math.abs(Math.cos(tiltRad))))*Math.min(2,frontProjectionScale);const estimatedVisualHeight=Math.max(1,projectedRingHeight+textVerticalEnvelope);// --------------------------------------------------\n// Fill more of component vertically.\n//\n// The entire 3D construction is scaled uniformly,\n// so text/radius/gaps/depth remain proportional.\n// --------------------------------------------------\nconst targetVisualHeight=size.height*Math.max(.2,verticalFill/100);const autoSceneScale=targetVisualHeight/estimatedVisualHeight;// Only enlarge automatically.\n//\n// Ring Size / Text Size can still intentionally\n// create a larger construction.\nconst sceneScale=Math.min(3.5,Math.max(1,autoSceneScale));// Because perspective and the scene are both scaled,\n// the relative 3D depth stays visually identical.\nconst scaledPerspective=perspective*sceneScale;// --------------------------------------------------\n// Vertical optical centring\n//\n// Perspective can make the front side visually larger,\n// which shifts the apparent centre slightly.\n//\n// Move the entire rendered result back to centre.\n// --------------------------------------------------\nconst sceneOffsetY=-projectedCenterY*sceneScale;// --------------------------------------------------\n// Scroll scrub\n// --------------------------------------------------\nconst{scrollYProgress}=useScroll({target:rootRef,offset:[\"start end\",\"end start\"]});const directionMultiplier=direction===\"forward\"?1:-1;const endAngle=startAngle+360*rotations*directionMultiplier;const rawRotationY=useTransform(scrollYProgress,[0,1],[startAngle,endAngle]);const smoothRotationY=useSpring(rawRotationY,{stiffness:120,damping:28,mass:.22});const liveRotationY=smoothScroll?smoothRotationY:rawRotationY;// --------------------------------------------------\n// Framer Canvas preview\n// --------------------------------------------------\nconst canvasRotation=startAngle+180*rotations*directionMultiplier;const displayedRotationY=isStaticRenderer?canvasRotation:liveRotationY;// --------------------------------------------------\n// Render\n// --------------------------------------------------\nreturn /*#__PURE__*/_jsxs(\"div\",{ref:rootRef,style:{...style,width:\"100%\",height:\"100%\",minWidth:1,minHeight:1,position:\"relative\",overflow:\"hidden\",background:\"transparent\",pointerEvents:\"none\",userSelect:\"none\"},children:[/*#__PURE__*/_jsx(\"span\",{ref:measurementRef,\"aria-hidden\":\"true\",style:{position:\"absolute\",left:\"-100000px\",top:\"-100000px\",display:\"inline-block\",visibility:\"hidden\",whiteSpace:\"nowrap\",pointerEvents:\"none\",fontFamily:\"Arial, sans-serif\",fontWeight:600,lineHeight:\"1em\",letterSpacing:\"-0.04em\",...typographyStyle,fontSize:\"100px\"},children:\"Measurement\"}),/*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",inset:0,transform:`translate3d(0, ${sceneOffsetY}px, 0)`},children:/*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",inset:0,perspective:`${scaledPerspective}px`,perspectiveOrigin:\"50% 50%\",transformStyle:\"preserve-3d\",overflow:\"visible\"},children:/*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",inset:0,transform:`\n                                scale3d(\n                                    ${sceneScale},\n                                    ${sceneScale},\n                                    ${sceneScale}\n                                )\n                                rotateZ(${tilt}deg)\n                                rotateX(${depthTilt}deg)\n                            `,transformOrigin:\"50% 50%\",transformStyle:\"preserve-3d\"},children:/*#__PURE__*/_jsx(motion.div,{style:{position:\"absolute\",inset:0,rotateY:displayedRotationY,transformOrigin:\"50% 50%\",transformStyle:\"preserve-3d\"},children:renderedTexts.map((text,index)=>{const angle=index*angleStep;const radians=angle*Math.PI/180;const x=Math.sin(radians)*radius;const z=Math.cos(radians)*radius;return /*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",left:0,top:\"50%\",width:\"100%\",// The label axis itself\n// has zero height.\n// Flex centring places\n// text equally above/below\n// the ring axis.\nheight:0,display:\"flex\",alignItems:\"center\",justifyContent:\"center\",margin:0,padding:0,transform:`\n                                                    translate3d(\n                                                        ${x}px,\n                                                        0px,\n                                                        ${z}px\n                                                    )\n                                                    rotateY(${angle}deg)\n                                                `,transformOrigin:\"50% 50%\",transformStyle:\"preserve-3d\",backfaceVisibility:hideBackfaces?\"hidden\":\"visible\",WebkitBackfaceVisibility:hideBackfaces?\"hidden\":\"visible\"},children:/*#__PURE__*/_jsx(\"div\",{style:{width:\"100%\",flex:\"0 0 auto\",margin:0,padding:0,fontFamily:\"Arial, sans-serif\",fontWeight:600,lineHeight:\"1em\",letterSpacing:\"-0.04em\",...typographyStyle,fontSize:`${highResFontSize}px`,color,textAlign:\"center\",whiteSpace:\"nowrap\",textTransform:uppercase?\"uppercase\":\"none\",transform:`scale(${inverseTextRenderScale})`,transformOrigin:\"50% 50%\",textRendering:\"geometricPrecision\",WebkitFontSmoothing:\"antialiased\",MozOsxFontSmoothing:\"grayscale\"},children:text})},`${index}-${text}`);})})})})})]});}// --------------------------------------------------\n// Framer Property Controls\n// --------------------------------------------------\naddPropertyControls(TextRing3D,{texts:{type:ControlType.Array,title:\"Texts\",control:{type:ControlType.String,defaultValue:\"Text\",placeholder:\"Text\"},defaultValue:[\"COCO\",\"MARIA\",\"DAN\",\"MIKO\",\"VIGO\",\"COCO\",\"MARIA\",\"DAN\",\"MIKO\",\"VIGO\"],maxCount:50},ringSize:{type:ControlType.Number,title:\"Ring Size\",defaultValue:80,min:10,max:200,step:1,unit:\"%\",displayStepper:true},verticalFill:{type:ControlType.Number,title:\"Vertical Fill\",defaultValue:84,min:40,max:110,step:1,unit:\"%\",displayStepper:true,description:\"How much of the component height the ring should occupy.\"},perspectiveRatio:{type:ControlType.Number,title:\"Perspective\",defaultValue:1.4,min:.2,max:5,step:.05,displayStepper:true,description:\"Perspective relative to ring size.\"},tilt:{type:ControlType.Number,title:\"Tilt\",defaultValue:15,min:-90,max:90,step:1,unit:\"\\xb0\",displayStepper:true},depthTilt:{type:ControlType.Number,title:\"Depth Tilt\",defaultValue:0,min:-90,max:90,step:1,unit:\"\\xb0\",displayStepper:true,description:\"Forward / backward tilt.\"},rotations:{type:ControlType.Number,title:\"Rotations\",defaultValue:1,min:0,max:10,step:.1,displayStepper:true},startAngle:{type:ControlType.Number,title:\"Start\",defaultValue:0,min:-360,max:360,step:1,unit:\"\\xb0\",displayStepper:true},direction:{type:ControlType.Enum,title:\"Direction\",options:[\"forward\",\"reverse\"],optionTitles:[\"Forward\",\"Reverse\"],defaultValue:\"forward\",displaySegmentedControl:true},smoothScroll:{type:ControlType.Boolean,title:\"Smooth Scrub\",defaultValue:true,enabledTitle:\"On\",disabledTitle:\"Off\"},textScale:{type:ControlType.Number,title:\"Text Size\",defaultValue:7,min:1,max:20,step:.25,unit:\"%\",displayStepper:true,description:\"Maximum text size relative to the whole ring.\"},minGap:{type:ControlType.Number,title:\"Min Gap\",defaultValue:.5,min:0,max:4,step:.05,displayStepper:true,description:\"Relative gap. 1 = one text size.\"},font:{type:ControlType.Font,title:\"Typography\",controls:\"extended\",defaultFontType:\"sans-serif\",displayFontSize:false,displayTextAlignment:false,defaultValue:{variant:\"Semibold\",letterSpacing:\"-0.04em\",lineHeight:\"1em\"}},color:{type:ControlType.Color,title:\"Color\",defaultValue:\"#111111\"},uppercase:{type:ControlType.Boolean,title:\"Uppercase\",defaultValue:false,enabledTitle:\"Yes\",disabledTitle:\"No\"},hideBackfaces:{type:ControlType.Boolean,title:\"Back Faces\",defaultValue:false,enabledTitle:\"Hide\",disabledTitle:\"Show\",description:\"Made by [Bestlooker](https://framer.link/CxdtHWB)\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"TextRing3D\",\"slots\":[],\"annotations\":{\"framerIntrinsicWidth\":\"1000\",\"framerIntrinsicHeight\":\"700\",\"framerDisableUnlink\":\"* @framerSupportedLayoutWidth any-prefer-fixed\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutHeight\":\"any-prefer-fixed\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./TextRing3D.map"],"mappings":"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"}