{"version":3,"file":"WithFormValidation.Dl4W6pBv.mjs","names":["useRef"],"sources":["https:/framerusercontent.com/modules/jjxXtXRvp9ltdzhjb05W/RdYJGQ6VEZrTgRER5zap/WithFormValidation.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import{useEffect,useRef}from\"react\";export function withFormValidation(Component){return function FormValidationHOC(props){// Create a ref to the container to scope our searches\nconst containerRef=useRef(null);useEffect(()=>{if(!containerRef.current)return;let cleanupFunctions=[];const addValidation=(selector,validateFn)=>{// Scope search to ONLY inside this specific component/modal\nconst input=containerRef.current.querySelector(selector);if(input&&!input.dataset.validationAttached){input.addEventListener(\"input\",validateFn);input.addEventListener(\"blur\",validateFn);input.dataset.validationAttached=\"true\";return()=>{input.removeEventListener(\"input\",validateFn);input.removeEventListener(\"blur\",validateFn);delete input.dataset.validationAttached;};}return()=>{};};// --- Validation Functions (Same as yours) ---\nconst validatePhoneNumber=e=>{const val=e.target.value.replace(/[\\s\\-\\(\\)\\.]/g,\"\");if(val===\"\")return e.target.setCustomValidity(\"\");if(!/^\\+?\\d+$/.test(val)){e.target.setCustomValidity(\"Numbers, spaces, dashes, and parentheses only\");}else if(!/^\\+?\\d{7,15}$/.test(val)){e.target.setCustomValidity(\"Must be 7-15 digits\");}else{e.target.setCustomValidity(\"\");}};const validateZipCode=e=>{const val=e.target.value.replace(/\\s/g,\"\");if(val===\"\")return e.target.setCustomValidity(\"\");const zipPattern=/^\\d{5}(-?\\d{4})?$/;if(!zipPattern.test(val)){e.target.setCustomValidity(\"Invalid zip code (12345 or 12345-6789)\");}else{e.target.setCustomValidity(\"\");}};// ... (keep validateEmail and validateName as they were)\nconst attachValidations=()=>{cleanupFunctions.push(addValidation(\"input[name='phone']\",validatePhoneNumber));cleanupFunctions.push(addValidation(\"input[name='zip']\",validateZipCode));// Add your other fields here...\nconst form=containerRef.current.querySelector(\"form\");if(form&&!form.dataset.submitHandlerAttached){const handleFormSubmit=event=>{if(!form.checkValidity()){event.preventDefault();event.stopPropagation();const inputs=form.querySelectorAll(\"input\");inputs.forEach(input=>{if(!input.validity.valid)input.reportValidity();});}};form.addEventListener(\"submit\",handleFormSubmit);form.dataset.submitHandlerAttached=\"true\";}};// Because modals can take a millisecond to animate/render,\n// we use a small timeout or an observer on the containerRef\nconst timeoutId=setTimeout(attachValidations,100);return()=>{clearTimeout(timeoutId);cleanupFunctions.forEach(cleanup=>cleanup());};},[]);return /*#__PURE__*/_jsx(\"div\",{ref:containerRef,style:{display:\"contents\"},children:/*#__PURE__*/_jsx(Component,{...props})});};}\nexport const __FramerMetadata__ = {\"exports\":{\"withFormValidation\":{\"type\":\"reactComponent\",\"name\":\"withFormValidation\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./WithFormValidation.map"],"mappings":"yHAA+E,SAAgB,EAAmB,EAAU,CAAC,OAAO,SAA2B,EAAM,CACrK,IAAM,EAAaA,EAAO,KAAK,CAM2G,OAN1G,MAAc,CAAC,GAAG,CAAC,EAAa,QAAQ,OAAO,IAAI,EAAiB,EAAE,CAAO,GAAe,EAAS,IAAa,CAClJ,IAAM,EAAM,EAAa,QAAQ,cAAc,EAAS,CAA4T,OAAxT,GAAO,CAAC,EAAM,QAAQ,oBAAoB,EAAM,iBAAiB,QAAQ,EAAW,CAAC,EAAM,iBAAiB,OAAO,EAAW,CAAC,EAAM,QAAQ,mBAAmB,WAAiB,CAAC,EAAM,oBAAoB,QAAQ,EAAW,CAAC,EAAM,oBAAoB,OAAO,EAAW,CAAC,OAAO,EAAM,QAAQ,yBAAgC,IACxX,EAAoB,GAAG,CAAC,IAAM,EAAI,EAAE,OAAO,MAAM,QAAQ,gBAAgB,GAAG,CAAC,GAAG,IAAM,GAAG,OAAO,EAAE,OAAO,kBAAkB,GAAG,CAAK,WAAW,KAAK,EAAI,CAAwF,gBAAgB,KAAK,EAAI,CAA0D,EAAE,OAAO,kBAAkB,GAAG,CAAtF,EAAE,OAAO,kBAAkB,sBAAsB,CAAlK,EAAE,OAAO,kBAAkB,gDAAgD,EAAsI,EAAgB,GAAG,CAAC,IAAM,EAAI,EAAE,OAAO,MAAM,QAAQ,MAAM,GAAG,CAAC,GAAG,IAAM,GAAG,OAAO,EAAE,OAAO,kBAAkB,GAAG,CAAkB,oBAAmC,KAAK,EAAI,CAA6E,EAAE,OAAO,kBAAkB,GAAG,CAAzG,EAAE,OAAO,kBAAkB,yCAAyC,EAI9lB,EAAU,eAHY,CAAC,EAAiB,KAAK,EAAc,sBAAsB,EAAoB,CAAC,CAAC,EAAiB,KAAK,EAAc,oBAAoB,EAAgB,CAAC,CACtL,IAAM,EAAK,EAAa,QAAQ,cAAc,OAAO,CAAI,GAAM,CAAC,EAAK,QAAQ,wBAAwP,EAAK,iBAAiB,SAAhO,GAAO,CAAK,EAAK,eAAe,GAAE,EAAM,gBAAgB,CAAC,EAAM,iBAAiB,CAAc,EAAK,iBAAiB,QAAQ,CAAQ,QAAQ,GAAO,CAAK,EAAM,SAAS,OAAM,EAAM,gBAAgB,EAAG,GAAoD,CAAC,EAAK,QAAQ,sBAAsB,SAE5W,IAAI,CAAC,UAAU,CAAC,aAAa,EAAU,CAAC,EAAiB,QAAQ,GAAS,GAAS,CAAC,GAAK,EAAE,CAAC,CAAqB,EAAK,MAAM,CAAC,IAAI,EAAa,MAAM,CAAC,QAAQ,WAAW,CAAC,SAAsB,EAAK,EAAU,CAAC,GAAG,EAAM,CAAC,CAAC,CAAC,mBAP7N,IAAoC"}