{"version":3,"file":"EnquiryModal.CNWBusDi.mjs","names":["useState","useRef","_Fragment"],"sources":["https:/framerusercontent.com/modules/tb235dSyjirQSUgk7MvS/c0Q4ksbywC2SdOfpIQgs/EnquiryModal.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from\"react/jsx-runtime\";import{useEffect,useRef,useState}from\"react\";import{createPortal}from\"react-dom\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";// =============================================================================\n// Ashwood Carpentry & Building - enquiry popup.\n//\n// A button that opens a modal form. Replaces the static card form on desktop,\n// which the owner called ugly and which ate a third of the hero for something\n// most visitors were never going to fill in on first look.\n//\n// FIELDS are the owner's list: name, address, job notes, and how they want to be\n// contacted. Phone is added because it is not optional - you cannot WhatsApp or\n// text somebody without a number, and a form that collects a contact preference\n// but no way to contact them is theatre.\n//\n// WHERE IT GOES, and the honest limit of it:\n// GHL is deliberately last on this project (owner, 2026-08-18), so there is no\n// server endpoint yet. On submit this component:\n//   1. POSTs the whole payload to captureEndpoint IF one is set - that is the\n//      future GHL hook, and it fires BEFORE the handoff so abandoned taps are\n//      still captured.\n//   2. Routes the customer down the channel they picked: a WhatsApp deep link or\n//      an sms: link, message already written. Picking the channel IS the submit.\n// Until an endpoint exists, delivery depends on the customer completing that\n// handoff. That is a real gap and it is written up in STATUS.md rather than\n// papered over. The field set is chosen so wiring GHL later is a mapping job,\n// not a rebuild.\n// =============================================================================\n/**\n * GA4. The site-wide tag catches <a href=\"tel:\"> and wa.me link taps, but this modal\n * hands off with window.open / location.href, so without this every enquiry started\n * here is invisible. Push straight to dataLayer rather than calling gtag(), so load\n * order cannot drop an event.\n */function track(event,params={}){if(typeof window===\"undefined\")return;const w=window;w.dataLayer=w.dataLayer||[];w.dataLayer.push([\"event\",event,{...params,page_path:location.pathname}]);}const WA=\"447940072166\"// Rhys, verified 2026-08-10. International form.\n;// The \"call\" option was removed on 2026-08-28. Its hint read \"He will ring you back\"\n// but the action was a tel: link, which rang HIM from the visitor's phone. The label\n// promised the opposite of what the button did.\n//\n// There is no separate submit button either. Picking the channel IS the submit: it\n// captures the lead, then opens that app with the message already written. One\n// decision instead of two, and nothing to fill in twice.\nconst CHANNELS=[{id:\"whatsapp\",label:\"Send on WhatsApp\",hint:\"Quickest. You can add photos of the room\"},{id:\"sms\",label:\"Send as a text\",hint:\"If you would rather not use WhatsApp\"}];/**\n * @framerIntrinsicWidth 220\n * @framerIntrinsicHeight 52\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight any-prefer-fixed\n */export default function EnquiryModal(props){const{label=\"Enquire now\",heading=\"Tell us about the room\",blurb=\"No price guessed on a form. This gets the job in front of Rhys so he can come and measure.\",whatsapp=WA,captureEndpoint=\"\",floating=false,ownerName=\"Rhys\",buttonFill=\"#131313\",buttonText=\"#F5F4F1\",fullWidth=false,ink=\"#131313\",paper=\"#F5F4F1\",panel=\"#FCFCFB\",line=\"#DAD9D5\",muted=\"#55565A\",displayFont=\"Geist\",bodyFont=\"Geist\"}=props;const isCanvas=RenderTarget.current()===RenderTarget.canvas;const[open,setOpen]=useState(false);// Floating mode holds the button back until the reader has committed to the page.\n// Landing straight onto a fixed CTA over the hero reads as a popup ad.\nconst[past,setPast]=useState(false);useEffect(()=>{if(!floating||isCanvas||typeof window===\"undefined\")return;const onScroll=()=>setPast(window.scrollY>400);onScroll();window.addEventListener(\"scroll\",onScroll,{passive:true});return()=>window.removeEventListener(\"scroll\",onScroll);},[floating,isCanvas]);const[name,setName]=useState(\"\");const[phone,setPhone]=useState(\"\");const[address,setAddress]=useState(\"\");const[notes,setNotes]=useState(\"\");const[channel,setChannel]=useState(\"whatsapp\");const[sending,setSending]=useState(false);const dialogRef=useRef(null);const firstFieldRef=useRef(null);// Phone is NOT part of the gate (owner, 2026-08-28). The handoff goes to WhatsApp or\n// SMS, both of which arrive FROM the visitor's number, so requiring it here asks for\n// something the message already carries. It stays as an optional field only because\n// the capture POST fires BEFORE the handoff: if someone taps through and never hits\n// send in WhatsApp, a number is the difference between a lead and a dead record.\nconst ready=name.trim().length>1;/*\n        LISTEN ALWAYS, NOT ONLY WHILE OPEN.\n\n        The page hero lives in a different component and asks for the popup by event\n        rather than by reference; preventDefault is how this says \"I have got this\",\n        so the hero knows not to fall back to /contact.\n\n        This listener used to sit below an `if (!open) return` guard, which meant the\n        modal only listened for the request to open while it was ALREADY open. The\n        hero's \"Contact now\" could therefore never open it and always fell through to\n        window.location.href = \"/contact\". On the contact page itself that navigates to\n        the page you are already on, so the button did visibly nothing.\n\n        Keep this effect free of the `open` guard.\n    */useEffect(()=>{if(isCanvas||typeof window===\"undefined\")return;const onAsk=e=>{e.preventDefault();track(\"enquiry_open\",{placement:\"hero\"});setOpen(true);};window.addEventListener(\"ashwood:open-enquiry\",onAsk);return()=>window.removeEventListener(\"ashwood:open-enquiry\",onAsk);},[isCanvas]);// Escape to close, and stop the page behind scrolling while the modal is up.\nuseEffect(()=>{if(!open)return;const onKey=e=>{if(e.key===\"Escape\")setOpen(false);};document.addEventListener(\"keydown\",onKey);const prev=document.body.style.overflow;document.body.style.overflow=\"hidden\";firstFieldRef.current?.focus();return()=>{document.removeEventListener(\"keydown\",onKey);document.body.style.overflow=prev;};},[open]);function message(ch){return[`Hi ${ownerName}, enquiry from your website.`,\"\",`Name: ${name}`,phone.trim()?`Phone: ${phone}`:null,address?`Address: ${address}`:null,notes?`Job: ${notes}`:null,`Preferred contact: ${ch===\"whatsapp\"?\"WhatsApp\":\"Text\"}`].filter(Boolean).join(\"\\n\");}async function submit(ch){if(!ready||sending)return;setChannel(ch);setSending(true);// Capture first. A deep link only fires if they follow through, so without\n// this every abandoned handoff is a lost enquiry.\n// The capture URL is resolved from the sitewide shim when this control is blank.\n// There are 21 instances of this component across 12 pages; keeping the URL in one\n// place means a change is one edit, not twenty-one.\nconst w=typeof window!==\"undefined\"?window:undefined;const endpoint=captureEndpoint||(w?.ashwoodCapture?w.ashwoodCapture():\"\");if(endpoint&&!isCanvas){try{await fetch(endpoint,{method:\"POST\",headers:{\"Content-Type\":\"application/json\"},body:JSON.stringify({source:\"enquiry-modal\",name,phone,address,notes,channel:ch,url:typeof window!==\"undefined\"?window.location.href:\"\",...w?.ashwoodSource?w.ashwoodSource():{}})});}catch(e){// Never block the handoff on a capture failure.\n}}track(\"enquiry_submit\",{method:ch,has_address:Boolean(address.trim()),has_notes:Boolean(notes.trim())});const digits=String(whatsapp).replace(/[^0-9]/g,\"\");const body=encodeURIComponent(message(ch));if(typeof window!==\"undefined\"){if(ch===\"whatsapp\")window.open(`https://wa.me/${digits}?text=${body}`,\"_blank\",\"noopener\");else window.location.href=`sms:+${digits}?&body=${body}`;}setSending(false);}// Mixed bag: plain style objects plus a few (on: boolean) => style helpers.\nconst S={trigger:{background:buttonFill,color:buttonText,border:\"none\",borderRadius:8,padding:\"14px 28px\",fontSize:15.5,fontWeight:500,fontFamily:bodyFont,cursor:\"pointer\",width:fullWidth?\"100%\":\"auto\"},veil:{position:\"fixed\",inset:0,background:\"rgba(19,19,19,0.55)\",zIndex:2147483e3,display:\"grid\",placeItems:\"center\",padding:20,overflowY:\"auto\"},dialog:{background:panel,color:ink,fontFamily:bodyFont,width:\"100%\",maxWidth:520,borderRadius:14,border:`1px solid ${line}`,padding:\"28px 26px 30px\",boxShadow:\"0 24px 60px rgba(0,0,0,0.28)\",maxHeight:\"90vh\",overflowY:\"auto\"},h:{fontFamily:displayFont,fontWeight:500,fontSize:\"clamp(22px,3vw,28px)\",letterSpacing:\"-.02em\",margin:\"0 0 8px\"},blurb:{color:muted,fontSize:15.5,lineHeight:1.55,margin:\"0 0 22px\"},lab:{display:\"block\",fontSize:13.5,fontWeight:600,marginBottom:6},input:{width:\"100%\",boxSizing:\"border-box\",background:paper,border:`1.5px solid ${line}`,borderRadius:8,padding:\"12px 13px\",fontSize:16,color:ink,fontFamily:bodyFont,marginBottom:16},// 130px was sized for the old one-word chips. The action buttons carry a label\n// and a hint, so below roughly 440px they stack instead of squeezing into two\n// columns and wrapping \"Send on WhatsApp\" onto two lines.\nrow:{display:\"grid\",gridTemplateColumns:\"repeat(auto-fit,minmax(210px,1fr))\",gap:10,marginBottom:20},chip:on=>({background:on?ink:paper,color:on?paper:ink,border:`1.5px solid ${on?ink:line}`,borderRadius:8,padding:\"11px 12px\",cursor:\"pointer\",textAlign:\"left\",font:\"inherit\",display:\"flex\",flexDirection:\"column\",gap:3}),chipHint:on=>({fontSize:11.5,color:on?\"rgba(255,255,255,0.72)\":muted,lineHeight:1.35}),actions:{display:\"flex\",gap:10,alignItems:\"center\",flexWrap:\"wrap\"},// Primary is WhatsApp, secondary is text. Both go flat and unclickable until\n// there is a name and a number, because the message is built from those.\nact:(on,primary)=>({background:!on?\"transparent\":primary?ink:paper,color:!on?muted:primary?paper:ink,border:`1.5px solid ${!on?line:ink}`,borderRadius:8,padding:\"13px 14px\",cursor:on?\"pointer\":\"not-allowed\",textAlign:\"left\",fontFamily:bodyFont,display:\"grid\",gap:3}),actHint:(on,primary)=>({fontSize:11.5,lineHeight:1.35,color:!on?muted:primary?\"rgba(255,255,255,0.72)\":muted}),gate:{fontSize:12.5,color:muted,fontFamily:bodyFont},opt:{fontWeight:400,color:muted,fontSize:12},sub:{color:muted,fontSize:12,lineHeight:1.4,margin:\"-10px 0 16px\"},send:on=>({background:on?ink:\"transparent\",color:on?paper:muted,border:`1.5px solid ${on?ink:line}`,borderRadius:8,padding:\"13px 24px\",fontSize:15.5,fontWeight:500,cursor:on?\"pointer\":\"not-allowed\",fontFamily:bodyFont}),ghost:{background:\"transparent\",border:\"none\",color:muted,fontSize:15,cursor:\"pointer\",fontFamily:bodyFont,padding:\"13px 4px\"},foot:{color:muted,fontSize:12.5,marginTop:16,lineHeight:1.5},floater:{position:\"fixed\",right:\"max(16px, env(safe-area-inset-right))\",bottom:\"max(16px, env(safe-area-inset-bottom))\",zIndex:9999,background:buttonFill,color:buttonText,border:\"none\",borderRadius:999,padding:\"15px 24px\",fontSize:15.5,fontWeight:500,fontFamily:bodyFont,cursor:\"pointer\",boxShadow:\"0 6px 24px rgba(0,0,0,0.28)\",opacity:past?1:0,transform:past?\"translateY(0)\":\"translateY(12px)\",pointerEvents:past?\"auto\":\"none\",transition:\"opacity .22s ease, transform .22s ease\"}};return /*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(\"button\",{style:floating?S.floater:S.trigger,onClick:()=>{track(\"enquiry_open\",{placement:floating?\"floating\":\"inline\"});setOpen(true);},\"aria-haspopup\":\"dialog\",\"aria-hidden\":floating&&!past,tabIndex:floating&&!past?-1:0,children:label}),open&&!isCanvas&&typeof document!==\"undefined\"&&/*#__PURE__*/createPortal(/*#__PURE__*/_jsx(\"div\",{style:S.veil,onMouseDown:e=>{if(e.target===e.currentTarget)setOpen(false);},children:/*#__PURE__*/_jsxs(\"div\",{ref:dialogRef,style:S.dialog,role:\"dialog\",\"aria-modal\":\"true\",\"aria-label\":heading,children:[/*#__PURE__*/_jsx(\"h3\",{style:S.h,children:heading}),/*#__PURE__*/_jsx(\"p\",{style:S.blurb,children:blurb}),/*#__PURE__*/_jsx(\"label\",{style:S.lab,htmlFor:\"eq-name\",children:\"Your name\"}),/*#__PURE__*/_jsx(\"input\",{id:\"eq-name\",ref:firstFieldRef,style:S.input,value:name,onChange:e=>setName(e.target.value),placeholder:\"Your name\",autoComplete:\"name\"}),/*#__PURE__*/_jsxs(\"label\",{style:S.lab,htmlFor:\"eq-phone\",children:[\"Phone number \",/*#__PURE__*/_jsx(\"span\",{style:S.opt,children:\"optional\"})]}),/*#__PURE__*/_jsx(\"input\",{id:\"eq-phone\",style:S.input,value:phone,onChange:e=>setPhone(e.target.value),placeholder:\"07123 456789\",inputMode:\"tel\",autoComplete:\"tel\"}),/*#__PURE__*/_jsxs(\"p\",{style:S.sub,children:[\"Only needed if you want \",ownerName,\" to chase it up when the message does not come through.\"]}),/*#__PURE__*/_jsx(\"label\",{style:S.lab,htmlFor:\"eq-addr\",children:\"Address or postcode\"}),/*#__PURE__*/_jsx(\"input\",{id:\"eq-addr\",style:S.input,value:address,onChange:e=>setAddress(e.target.value),placeholder:\"CF31 3TP\",autoComplete:\"street-address\"}),/*#__PURE__*/_jsx(\"label\",{style:S.lab,htmlFor:\"eq-notes\",children:\"What needs doing?\"}),/*#__PURE__*/_jsx(\"textarea\",{id:\"eq-notes\",style:{...S.input,minHeight:96,resize:\"vertical\"},value:notes,onChange:e=>setNotes(e.target.value),placeholder:\"A rough idea is fine. Room, rough sizes, and when you are hoping to get it done.\"}),/*#__PURE__*/_jsxs(\"label\",{style:S.lab,children:[\"Send it to \",ownerName]}),/*#__PURE__*/_jsx(\"div\",{style:S.row,children:CHANNELS.map((c,i)=>/*#__PURE__*/_jsxs(\"button\",{style:S.act(ready,i===0),disabled:!ready||sending,onClick:()=>submit(c.id),children:[/*#__PURE__*/_jsx(\"strong\",{style:{fontSize:14.5},children:sending&&channel===c.id?\"Opening...\":c.label}),/*#__PURE__*/_jsx(\"span\",{style:S.actHint(ready,i===0),children:c.hint})]},c.id))}),/*#__PURE__*/_jsxs(\"div\",{style:S.actions,children:[!ready?/*#__PURE__*/_jsx(\"span\",{style:S.gate,children:\"Add your name first\"}):null,/*#__PURE__*/_jsx(\"button\",{style:S.ghost,onClick:()=>setOpen(false),children:\"Cancel\"})]}),/*#__PURE__*/_jsxs(\"p\",{style:S.foot,children:[\"No price is guessed from a form. \",ownerName,\" reads it, then comes out and measures.\"]})]})}),document.body)]});}addPropertyControls(EnquiryModal,{label:{type:ControlType.String,title:\"Button label\",defaultValue:\"Enquire now\"},heading:{type:ControlType.String,title:\"Heading\",defaultValue:\"Tell us about the room\"},blurb:{type:ControlType.String,title:\"Blurb\",displayTextArea:true,defaultValue:\"No price guessed on a form. This gets the job in front of Rhys so he can come and measure.\"},ownerName:{type:ControlType.String,title:\"Owner name\",defaultValue:\"Rhys\"},whatsapp:{type:ControlType.String,title:\"WhatsApp\",defaultValue:WA},floating:{type:ControlType.Boolean,title:\"Floating\",defaultValue:false,description:\"Pins the button bottom-right on every scroll position. Use ONE per page.\"},captureEndpoint:{type:ControlType.String,title:\"Capture URL\",defaultValue:\"\",description:\"POSTs the enquiry before the handoff. Paste the GHL webhook here when it exists.\"},fullWidth:{type:ControlType.Boolean,title:\"Full width\",defaultValue:false},buttonFill:{type:ControlType.Color,title:\"Button fill\",defaultValue:\"#131313\"},buttonText:{type:ControlType.Color,title:\"Button text\",defaultValue:\"#F5F4F1\"},ink:{type:ControlType.Color,title:\"Ink\",defaultValue:\"#131313\"},paper:{type:ControlType.Color,title:\"Paper\",defaultValue:\"#F5F4F1\"},panel:{type:ControlType.Color,title:\"Panel\",defaultValue:\"#FCFCFB\"},line:{type:ControlType.Color,title:\"Hairline\",defaultValue:\"#DAD9D5\"},muted:{type:ControlType.Color,title:\"Muted text\",defaultValue:\"#55565A\"},displayFont:{type:ControlType.String,title:\"Display font\",defaultValue:\"Geist\"},bodyFont:{type:ControlType.String,title:\"Body font\",defaultValue:\"Geist\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"EnquiryModal\",\"slots\":[],\"annotations\":{\"framerIntrinsicWidth\":\"220\",\"framerSupportedLayoutHeight\":\"any-prefer-fixed\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutWidth\":\"any-prefer-fixed\",\"framerIntrinsicHeight\":\"52\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./EnquiryModal.map"],"mappings":"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"}