{"version":3,"file":"FormHints.DOmwXrss.mjs","names":["useRef"],"sources":["https:/framerusercontent.com/modules/kg6gTU2qraPx9vWB4LPC/JkO9vBgYPjweudeSRJp6/FormHints.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import{addPropertyControls,ControlType}from\"framer\";import{useEffect,useRef}from\"react\";// Read the address bar at module load, before any other component tidies it.\nconst EARLY_SEARCH=typeof window!==\"undefined\"?window.location.search:\"\";const PREFILL_MAX=300;function prefillFields(src){return(src||\"\").split(/[,;\\n]/).map(s=>s.trim()).filter(s=>/^[A-Za-z0-9_-]{1,40}$/.test(s));}function urlValue(name){for(const search of[typeof window!==\"undefined\"?window.location.search:\"\",EARLY_SEARCH]){try{const v=new URLSearchParams(search).get(name);if(v)return v.replace(/[\\u0000-\\u001f\\u007f]+/g,\" \").trim().slice(0,PREFILL_MAX);}catch(e){}}return\"\";}// Fills each listed field once, only while it is empty. Uses the native value setter plus input and\n// change events, so Framer's form (and FormData on submit) sees the value as if it were typed.\nfunction prefill(form,names){for(const name of names){const v=urlValue(name);if(!v)continue;form.querySelectorAll(\"input, textarea\").forEach(node=>{const el=node;if((el.getAttribute(\"name\")||\"\").trim()!==name)return;if(el.type===\"hidden\"||isTrap(el))return;if(el.value||el.hasAttribute(\"data-gm-prefilled\"))return;const proto=el.tagName===\"TEXTAREA\"?HTMLTextAreaElement.prototype:HTMLInputElement.prototype;const setter=Object.getOwnPropertyDescriptor(proto,\"value\")?.set;if(setter)setter.call(el,v);else el.value=v;el.setAttribute(\"data-gm-prefilled\",\"\");el.dispatchEvent(new Event(\"input\",{bubbles:true}));el.dispatchEvent(new Event(\"change\",{bubbles:true}));});}}const DEFAULT_HINTS=\"Name=name, Email=email, Phone=tel, Mobile phone=tel, Venue=organization, Website=url, Venue website or Instagram=url\";// Real autocomplete tokens only (HTML spec). Anything else is ignored.\nconst TOKENS=[\"name\",\"honorific-prefix\",\"given-name\",\"additional-name\",\"family-name\",\"honorific-suffix\",\"nickname\",\"organization-title\",\"organization\",\"street-address\",\"address-line1\",\"address-line2\",\"address-level2\",\"address-level1\",\"postal-code\",\"country\",\"country-name\",\"email\",\"tel\",\"tel-national\",\"url\",\"bday\",\"off\",\"on\"];// Input modes (not autocomplete tokens). numeric: whole numbers from 1, number keypad.\nconst MODES={numeric:{inputMode:\"numeric\",pattern:\"[1-9][0-9]*\",title:\"Numbers only, e.g. 40\"}};const isMode=token=>Object.prototype.hasOwnProperty.call(MODES,token);function parseHints(src){const map={};for(const part of(src||\"\").split(/[,;\\n]/)){const i=part.indexOf(\"=\");if(i<1)continue;const field=part.slice(0,i).trim().toLowerCase();const token=part.slice(i+1).trim().toLowerCase();if(field&&(TOKENS.indexOf(token)!==-1||isMode(token)))map[field]=token;}return map;}function applyMode(el,token){if(!isMode(token))return false;const m=MODES[token];if(el.tagName!==\"INPUT\"||el.type!==\"text\"&&el.type!==\"tel\"&&el.type!==\"search\")return true;if(el.getAttribute(\"inputmode\")!==m.inputMode)el.setAttribute(\"inputmode\",m.inputMode);if(!el.hasAttribute(\"pattern\"))el.setAttribute(\"pattern\",m.pattern);if(!el.hasAttribute(\"title\"))el.setAttribute(\"title\",m.title);el.setAttribute(\"data-gm-mode\",token);return true;}// Framer's spam traps: aria-hidden, out of the tab order, autocomplete=\"one-time-code\".\nfunction isTrap(el){if(el.getAttribute(\"aria-hidden\")===\"true\")return true;if(el.closest(\"[aria-hidden='true']\"))return true;const ac=(el.getAttribute(\"autocomplete\")||\"\").toLowerCase();return ac===\"one-time-code\"||el.hasAttribute(\"data-1p-ignore\");}function apply(form,map){const fields=form.querySelectorAll(\"input, select, textarea\");fields.forEach(node=>{const el=node;if(el.type===\"hidden\"||el.type===\"checkbox\"||el.type===\"radio\"||el.type===\"submit\")return;if(isTrap(el))return;const name=(el.getAttribute(\"name\")||\"\").trim().toLowerCase();const token=map[name];if(!token)return;if(applyMode(el,token))return;if(el.hasAttribute(\"autocomplete\")&&el.getAttribute(\"data-gm-hint\")===null)return;if(el.getAttribute(\"autocomplete\")!==token)el.setAttribute(\"autocomplete\",token);el.setAttribute(\"data-gm-hint\",\"\");});}export default function FormHints(props){const ref=useRef(null);const hints=props.hints===undefined?DEFAULT_HINTS:props.hints;const prefillSrc=typeof props.prefillFromURL===\"string\"&&props.prefillFromURL!==\"null\"?props.prefillFromURL:\"\";useEffect(()=>{if(typeof window===\"undefined\"||!ref.current)return;const form=ref.current.closest(\"form\");if(!form)return;const map=parseHints(hints);const names=prefillFields(prefillSrc);apply(form,map);if(names.length)prefill(form,names);// Framer can re-render fields (e.g. after a failed submit); keep the hints on.\nlet raf=0;const mo=new MutationObserver(()=>{if(raf)return;raf=window.requestAnimationFrame(()=>{raf=0;apply(form,map);if(names.length)prefill(form,names);});});mo.observe(form,{childList:true,subtree:true});return()=>{mo.disconnect();if(raf)window.cancelAnimationFrame(raf);};},[hints,prefillSrc]);return /*#__PURE__*/_jsx(\"div\",{ref:ref,\"aria-hidden\":\"true\",style:{position:\"relative\",width:1,height:1,pointerEvents:\"none\",...props.style}});}addPropertyControls(FormHints,{hints:{type:ControlType.String,title:\"Hints\",defaultValue:DEFAULT_HINTS,displayTextArea:true,description:\"Field name=autocomplete token, separated by commas. Field=numeric makes a Text field whole-number only, with the number keypad.\"},prefillFromURL:{type:ControlType.String,title:\"Prefill from URL\",defaultValue:\"\",placeholder:\"venue_name, venue_link\",description:\"Field names to fill from the page URL (?venue_name=…). Empty = off.\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"FormHints\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./FormHints.map"],"mappings":"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"}