{"version":3,"file":"ParticleButton.BbJOtsej.mjs","names":["useRef","useState"],"sources":["https:/framerusercontent.com/modules/frKCMsgg3r5ZzOxoCzTc/enHXO2KaCT7QzvzYx6Y2/ParticleButton.js"],"sourcesContent":["// THE ADDRESS CLUB — Particle Button\n// A pill button that sheds fine particles on hover and bursts on click.\nimport{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{useEffect,useRef,useState,startTransition}from\"react\";import{addPropertyControls,ControlType,useIsStaticRenderer}from\"framer\";import{motion}from\"framer-motion\";const BLEED=70;/**\r\n * Particle Button\r\n *\r\n * @framerIntrinsicWidth 220\r\n * @framerIntrinsicHeight 56\r\n *\r\n * @framerSupportedLayoutWidth auto\r\n * @framerSupportedLayoutHeight auto\r\n */export default function ParticleButton(props){const{label=\"Request a private viewing\",link=\"\",newTab=false,fill=\"#C2512F\",textColor=\"#FFF7F1\",particleColor=\"#C2512F\",particleColor2=\"#141412\",font,radius=999,paddingX=28,paddingY=18,showArrow=true,density=1,onClick}=props;const isStatic=useIsStaticRenderer();const wrapRef=useRef(null);const canvasRef=useRef(null);const particles=useRef([]);const hover=useRef(false);const[isHover,setIsHover]=useState(false);const raf=useRef(0);const colors=useRef([particleColor,particleColor2]);useEffect(()=>{// resolve CSS variables (color tokens) to real colors for canvas\nconst el=wrapRef.current;const resolve=c=>{if(!el||!c||!c.includes(\"var(\"))return c;const probe=document.createElement(\"span\");probe.style.color=c;el.appendChild(probe);const v=getComputedStyle(probe).color;el.removeChild(probe);return v;};colors.current=[resolve(particleColor),resolve(particleColor2)];},[particleColor,particleColor2]);const emit=(count,burst)=>{const el=wrapRef.current;if(!el)return;const w=el.clientWidth;const h=el.clientHeight;for(let i=0;i<count;i++){let x,y,vx,vy;if(burst){x=BLEED+w/2+(Math.random()-.5)*w*.6;y=BLEED+h/2+(Math.random()-.5)*h*.4;const a=Math.random()*Math.PI*2;const s=1.5+Math.random()*4.5;vx=Math.cos(a)*s;vy=Math.sin(a)*s;}else{// spawn on the perimeter, drift outwards\nconst t=Math.random();const side=Math.random();if(side<.5){x=BLEED+t*w;y=BLEED+(side<.25?0:h);vx=(Math.random()-.5)*.6;vy=(side<.25?-1:1)*(.3+Math.random()*.9);}else{x=BLEED+(side<.75?0:w);y=BLEED+t*h;vx=(side<.75?-1:1)*(.3+Math.random()*.9);vy=(Math.random()-.5)*.6;}}particles.current.push({x,y,vx,vy,life:0,max:burst?50+Math.random()*30:40+Math.random()*40,size:burst?1+Math.random()*2.4:.8+Math.random()*1.6,c:Math.random()<.7?0:1});}};useEffect(()=>{if(isStatic)return;const cv=canvasRef.current;const el=wrapRef.current;if(!cv||!el)return;const ctx=cv.getContext(\"2d\");if(!ctx)return;const dpr=Math.min(2,window.devicePixelRatio||1);let running=true;const loop=()=>{if(!running)return;const W=el.clientWidth+BLEED*2;const H=el.clientHeight+BLEED*2;if(cv.width!==Math.round(W*dpr)){cv.width=Math.round(W*dpr);cv.height=Math.round(H*dpr);}ctx.setTransform(dpr,0,0,dpr,0,0);ctx.clearRect(0,0,W,H);if(hover.current)emit(Math.max(1,Math.round(2*density)),false);const arr=particles.current;for(let i=arr.length-1;i>=0;i--){const p=arr[i];p.life++;p.x+=p.vx;p.y+=p.vy;p.vx*=.97;p.vy=p.vy*.97-.01;const a=1-p.life/p.max;if(a<=0){arr.splice(i,1);continue;}ctx.globalAlpha=a;ctx.fillStyle=colors.current[p.c];ctx.beginPath();ctx.arc(p.x,p.y,p.size,0,Math.PI*2);ctx.fill();}ctx.globalAlpha=1;raf.current=requestAnimationFrame(loop);};raf.current=requestAnimationFrame(loop);return()=>{running=false;cancelAnimationFrame(raf.current);};},[isStatic,density]);const handleClick=e=>{emit(Math.round(70*density),true);if(onClick)onClick();if(link){e.preventDefault();window.setTimeout(()=>{if(newTab)window.open(link,\"_blank\",\"noopener\");else window.location.href=link;},380);}};const Tag=link?\"a\":\"button\";return /*#__PURE__*/_jsxs(\"div\",{ref:wrapRef,style:{...props.style,position:\"relative\",width:\"max-content\",display:\"inline-flex\"},children:[!isStatic&&/*#__PURE__*/_jsx(\"canvas\",{ref:canvasRef,\"aria-hidden\":\"true\",style:{position:\"absolute\",left:-BLEED,top:-BLEED,width:`calc(100% + ${BLEED*2}px)`,height:`calc(100% + ${BLEED*2}px)`,pointerEvents:\"none\"}}),/*#__PURE__*/_jsxs(Tag,{href:link||undefined,target:link&&newTab?\"_blank\":undefined,rel:link&&newTab?\"noopener\":undefined,type:link?undefined:\"button\",onClick:handleClick,onMouseEnter:()=>{hover.current=true;startTransition(()=>setIsHover(true));},onMouseLeave:()=>{hover.current=false;startTransition(()=>setIsHover(false));},style:{position:\"relative\",display:\"inline-flex\",alignItems:\"center\",gap:12,padding:`${paddingY}px ${paddingX}px`,borderRadius:radius,background:fill,color:textColor,border:\"none\",cursor:\"pointer\",textDecoration:\"none\",whiteSpace:\"nowrap\",overflow:\"hidden\",fontSize:15,lineHeight:\"1em\",...font},children:[/*#__PURE__*/_jsx(motion.span,{\"aria-hidden\":\"true\",initial:false,animate:{scale:isHover?1:0,opacity:isHover?1:0},transition:{type:\"spring\",stiffness:260,damping:26},style:{position:\"absolute\",left:\"50%\",top:\"50%\",width:\"140%\",aspectRatio:\"1\",marginLeft:\"-70%\",marginTop:\"-70%\",borderRadius:\"50%\",background:\"rgba(255,255,255,0.12)\",pointerEvents:\"none\"}}),/*#__PURE__*/_jsx(\"span\",{style:{position:\"relative\"},children:label}),showArrow&&/*#__PURE__*/_jsx(motion.svg,{initial:false,animate:{rotate:isHover?45:0},transition:{type:\"spring\",stiffness:300,damping:20},width:\"14\",height:\"14\",viewBox:\"0 0 24 24\",fill:\"none\",stroke:\"currentColor\",strokeWidth:\"1.8\",strokeLinecap:\"round\",style:{position:\"relative\"},\"aria-hidden\":\"true\",children:/*#__PURE__*/_jsx(\"path\",{d:\"M5 19 19 5M8 5h11v11\"})})]})]});}addPropertyControls(ParticleButton,{label:{type:ControlType.String,title:\"Label\",defaultValue:\"Request a private viewing\"},link:{type:ControlType.Link,title:\"Link\"},newTab:{type:ControlType.Boolean,title:\"New Tab\",defaultValue:false},fill:{type:ControlType.Color,title:\"Background\",defaultValue:\"#C2512F\"},textColor:{type:ControlType.Color,title:\"Text\",defaultValue:\"#FFF7F1\"},particleColor:{type:ControlType.Color,title:\"Particles\",defaultValue:\"#C2512F\"},particleColor2:{type:ControlType.Color,title:\"Particles (Secondary)\",defaultValue:\"#141412\"},density:{type:ControlType.Number,title:\"Density\",defaultValue:1,min:.2,max:3,step:.1},font:{type:ControlType.Font,title:\"Font\",controls:\"extended\",defaultFontType:\"sans-serif\",defaultValue:{fontSize:\"15px\",variant:\"Medium\",letterSpacing:\"0em\",lineHeight:\"1em\"}},radius:{type:ControlType.Number,title:\"Radius\",defaultValue:999,min:0,max:999},paddingX:{type:ControlType.Number,title:\"Padding X\",defaultValue:28,min:8,max:60},paddingY:{type:ControlType.Number,title:\"Padding Y\",defaultValue:18,min:6,max:40},showArrow:{type:ControlType.Boolean,title:\"Arrow\",defaultValue:true},onClick:{type:ControlType.EventHandler}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"ParticleButton\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerSupportedLayoutWidth\":\"auto\",\"framerSupportedLayoutHeight\":\"auto\",\"framerIntrinsicWidth\":\"220\",\"framerIntrinsicHeight\":\"56\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./ParticleButton.map"],"mappings":"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"}