{"version":3,"file":"BrixBlockNonWorkEmails.Bh5ijF1b.mjs","names":["useState","useRef","useCallback"],"sources":["https:/framerusercontent.com/modules/vj7bFUjvEQFgEzNBkdoG/vf3CKm378wlVcBk7IhSU/createStore.js","https:/framer.com/m/framer/store.js@^1.0.0","https:/framerusercontent.com/modules/RWJWTOlRi8j76Rgufp2M/iVOz8YckdZPxVIpwqVI5/BrixBlockNonWorkEmails.js"],"sourcesContent":["import{useState,useEffect}from\"react\";import{Data,useObserveData}from\"framer\";export function createStore(state1){// Use Data so that a Preview reload resets the state\nconst dataStore=Data({state:Object.freeze({...state1})});// Create a set function that updates the state\nconst setDataStore=newState=>{// If the state is an object, make sure we copy it\nif(typeof newState===\"function\"){newState=newState(dataStore.state);}dataStore.state=Object.freeze({...dataStore.state,...newState});};// Store the initial state, copy the object if it's an object\nlet storeState=typeof state1===\"object\"?Object.freeze({...state1}):state1;// Keep a list of all the listeners, in the form of React hook setters\nconst storeSetters=new Set();// Create a set function that updates all the listeners / setters\nconst setStoreState=newState=>{// If the state is an object, make sure we copy it\nif(typeof newState===\"function\"){newState=newState(storeState);}storeState=typeof newState===\"object\"?Object.freeze({...storeState,...newState}):newState;// Update all the listeners / setters with the new value\nstoreSetters.forEach(setter=>setter(storeState));};// Create the actual hook based on everything above\nfunction useStore(){// Create the hook we are going to use as a listener\nconst[state,setState]=useState(storeState);// If we unmount the component using this hook, we need to remove the listener\n// @ts-ignore\nuseEffect(()=>{// But right now, we need to add the listener\nstoreSetters.add(setState);return()=>storeSetters.delete(setState);},[]);// If Data context exists, use Data, otherwise use vanilla React state\nif(useObserveData()===true){useObserveData();return[dataStore.state,setDataStore];}else{// Return the state and a function to update the central store\nreturn[state,setStoreState];}}return useStore;}\nexport const __FramerMetadata__ = {\"exports\":{\"createStore\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./createStore.map","/*\n * createStore (framer/store@1.0.1)\n *\n * Learn More: https://www.framer.com/asset-urls\n */\n\nexport * from \"https://framerusercontent.com/modules/vj7bFUjvEQFgEzNBkdoG/vf3CKm378wlVcBk7IhSU/createStore.js\"\n","// BrixBlockNonWorkEmails.tsx\n//\n// BRIX Templates Work Email Validation for Framer\n// ----------------------------------------------------------------------------\n// Enforces \"work email only\" on native Framer forms by blocking personal\n// email providers like Gmail, Outlook, and Yahoo.\n//\n// Version: 1.0.0\n// Author: BRIX Templates\n//\n// Apply these overrides:\n//   - brixBlockNonWorkEmailsInput   → Email input layer\n//   - brixBlockNonWorkEmailsButton  → Submit button layer\n//   - brixBlockNonWorkEmailsError   → Error message Text layer\nimport{jsx as _jsx}from\"react/jsx-runtime\";import{forwardRef,startTransition,useCallback,useEffect,useRef}from\"react\";import{createStore}from\"https://framer.com/m/framer/store.js@^1.0.0\";// -----------------------------\n// 1. Shared store across layers\n// -----------------------------\nconst useBrixBlockEmailStore=createStore({email:\"\",blocked:false,message:\"\",touched:false});// -----------------------------\n// 2. Blocked email domains\n// -----------------------------\n// Major global and regional free/personal email providers\nconst BRIX_BLOCKED_DOMAINS=new Set([\"gmail.com\",\"googlemail.com\",\"outlook.com\",\"hotmail.com\",\"live.com\",\"msn.com\",\"yahoo.com\",\"ymail.com\",\"rocketmail.com\",\"icloud.com\",\"me.com\",\"mac.com\",\"aol.com\",\"protonmail.com\",\"proton.me\",\"pm.me\",\"zoho.com\",\"zohomail.com\",\"zoho.eu\",\"yandex.com\",\"yandex.ru\",\"mail.com\",\"mail.ru\",\"gmx.com\",\"gmx.de\",\"gmx.net\",\"fastmail.com\",\"tutanota.com\",\"tutamail.com\",\"tuta.com\",\"qq.com\"]);const BRIX_BLOCKED_DOMAIN_PATTERNS=[/^gmail\\./,/^googlemail\\./,/^yahoo\\./,/^outlook\\./,/^hotmail\\./,/^live\\./,/^msn\\./,/^icloud\\./,/^aol\\./,/^protonmail\\./,/^zoho\\./,/^yandex\\./];// -----------------------------\n// 3. Helper functions\n// -----------------------------\nfunction normalizeEmail(value){return(value||\"\").trim().toLowerCase();}function extractDomain(email){const at=email.lastIndexOf(\"@\");if(at===-1)return\"\";return email.slice(at+1).trim().toLowerCase().replace(/\\.$/,\"\");}function looksEmailish(value){return/.+@.+\\..+/.test(value);}function isBlockedDomain(domain){if(!domain)return false;if(BRIX_BLOCKED_DOMAINS.has(domain))return true;if(domain===\"me.com\"||domain===\"mac.com\")return true;return BRIX_BLOCKED_DOMAIN_PATTERNS.some(pattern=>pattern.test(domain));}function computeValidation(email){const normalized=normalizeEmail(email);const domain=extractDomain(normalized);if(!domain)return{blocked:false,message:\"\"};if(isBlockedDomain(domain)){return{blocked:true,message:\"Please enter a valid work email address.\"};}return{blocked:false,message:\"\"};}function setNativeValidity(inputEl,email,blocked,message){if(!inputEl||typeof inputEl.setCustomValidity!==\"function\")return;if(!looksEmailish(email)){inputEl.setCustomValidity(\"\");return;}inputEl.setCustomValidity(blocked?message:\"\");}function mergeRefs(a,b){return node=>{b.current=node;if(typeof a===\"function\")a(node);else if(a&&typeof a===\"object\")a.current=node;};}function findGuardForm(root){if(!root)return null;if(root instanceof HTMLFormElement)return root;const closestForm=root.closest(\"form\");if(closestForm)return closestForm;return root.querySelector(\"form\");}function findGuardEmailInput(form){const byType=form.querySelector('input[type=\"email\"]');if(byType)return byType;const byAttributeHints=Array.from(form.querySelectorAll(\"input\")).find(input=>{const name=(input.getAttribute(\"name\")||\"\").toLowerCase();const id=(input.getAttribute(\"id\")||\"\").toLowerCase();const placeholder=(input.getAttribute(\"placeholder\")||\"\").toLowerCase();const ariaLabel=(input.getAttribute(\"aria-label\")||\"\").toLowerCase();return name.includes(\"email\")||id.includes(\"email\")||placeholder.includes(\"email\")||ariaLabel.includes(\"email\");});if(byAttributeHints)return byAttributeHints;return Array.from(form.querySelectorAll(\"input\")).find(input=>(input.value||\"\").includes(\"@\"))||null;}// -----------------------------\n// 4. Overrides\n// -----------------------------\n// EMAIL INPUT\n// Attach to the email input field inside your Framer Form.\nexport function brixBlockNonWorkEmailsInput(Component){return /*#__PURE__*/forwardRef((props,ref)=>{const[store,setStore]=useBrixBlockEmailStore();const inputRef=useRef(null);const sync=useCallback(nextEmail=>{const{blocked,message}=computeValidation(nextEmail);startTransition(()=>{setStore({email:nextEmail,blocked,message});});setNativeValidity(inputRef.current,nextEmail,blocked,message);},[setStore]);// Initial sync + autofill guard\nuseEffect(()=>{const el=inputRef.current;if(!el)return;const initial=el.value??\"\";sync(initial);if(typeof window===\"undefined\")return;let last=el.value??\"\";const interval=window.setInterval(()=>{const now=el.value??\"\";if(now!==last){last=now;sync(now);}},200);const timeout=window.setTimeout(()=>{window.clearInterval(interval);},2e3);return()=>{window.clearInterval(interval);window.clearTimeout(timeout);};},[sync]);useEffect(()=>{const el=inputRef.current;if(!el)return;const form=el.closest(\"form\");if(!form)return;const handleSubmit=event=>{const liveEmail=el.value??\"\";const{blocked,message}=computeValidation(liveEmail);startTransition(()=>{setStore({email:liveEmail,blocked,message,touched:true});});setNativeValidity(el,liveEmail,blocked,message);if(blocked){event.preventDefault();event.stopPropagation();if(typeof el.reportValidity===\"function\"){el.reportValidity();}}};form.addEventListener(\"submit\",handleSubmit);return()=>{form.removeEventListener(\"submit\",handleSubmit);};},[setStore]);const handleChange=eventOrValue=>{const value=typeof eventOrValue===\"string\"?eventOrValue:eventOrValue?.target?.value??eventOrValue?.currentTarget?.value??\"\";startTransition(()=>{setStore({touched:true});});sync(value);if(typeof props.onChange===\"function\"){props.onChange(eventOrValue);}};const handleBlur=eventOrValue=>{startTransition(()=>{setStore({touched:true});});const value=typeof eventOrValue===\"string\"?eventOrValue:eventOrValue?.target?.value??eventOrValue?.currentTarget?.value??inputRef.current?.value??\"\";sync(value);if(typeof props.onBlur===\"function\"){props.onBlur(eventOrValue);}};return /*#__PURE__*/_jsx(Component,{...props,ref:mergeRefs(ref,inputRef),onChange:handleChange,onBlur:handleBlur});});}// SUBMIT BUTTON\n// Attach to the submit button inside the same Form.\nexport function brixBlockNonWorkEmailsButton(Component){return props=>{const[store]=useBrixBlockEmailStore();const shouldDisable=store.blocked;return /*#__PURE__*/_jsx(Component,{...props,disabled:shouldDisable||props.disabled,\"aria-disabled\":shouldDisable||props[\"aria-disabled\"],title:shouldDisable?store.message:props.title,style:{...props.style,opacity:shouldDisable?.5:props.style?.opacity,cursor:shouldDisable?\"not-allowed\":props.style?.cursor,pointerEvents:shouldDisable?\"none\":props.style?.pointerEvents}});};}// ERROR MESSAGE TEXT\n// Attach to a Text layer under the button that contains your \"work email only\" message.\nexport function brixBlockNonWorkEmailsError(Component){return props=>{const[store]=useBrixBlockEmailStore();const show=store.blocked&&(store.touched||store.email.length>0);return /*#__PURE__*/_jsx(Component,{...props,text:show?store.message:\"\",style:{...props.style,display:show?props.style?.display??\"block\":\"none\"}});};}// FORM CONTAINER GUARD\n// Attach to the form container or the form itself for capture-phase submit blocking.\nexport function withWorkEmailGuard(Component){return /*#__PURE__*/forwardRef((props,ref)=>{const rootRef=useRef(null);useEffect(()=>{if(typeof window===\"undefined\")return;const form=findGuardForm(rootRef.current);if(!form)return;const syncValidity=()=>{const emailInput=findGuardEmailInput(form);if(!emailInput)return;const liveEmail=emailInput.value??\"\";const{blocked,message}=computeValidation(liveEmail);setNativeValidity(emailInput,liveEmail,blocked,message);};const handleSubmitCapture=event=>{const emailInput=findGuardEmailInput(form);if(!emailInput)return;const liveEmail=emailInput.value??\"\";const{blocked,message}=computeValidation(liveEmail);setNativeValidity(emailInput,liveEmail,blocked,message);if(!blocked)return;event.preventDefault();event.stopPropagation();if(typeof event.stopImmediatePropagation===\"function\"){event.stopImmediatePropagation();}if(typeof emailInput.reportValidity===\"function\"){emailInput.reportValidity();}};const handleInputOrChange=()=>{syncValidity();};form.addEventListener(\"submit\",handleSubmitCapture,true);form.addEventListener(\"input\",handleInputOrChange,true);form.addEventListener(\"change\",handleInputOrChange,true);syncValidity();return()=>{form.removeEventListener(\"submit\",handleSubmitCapture,true);form.removeEventListener(\"input\",handleInputOrChange,true);form.removeEventListener(\"change\",handleInputOrChange,true);};},[]);return /*#__PURE__*/_jsx(Component,{...props,ref:mergeRefs(ref,rootRef)});});}\nexport const __FramerMetadata__ = {\"exports\":{\"withWorkEmailGuard\":{\"type\":\"reactHoc\",\"name\":\"withWorkEmailGuard\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"brixBlockNonWorkEmailsButton\":{\"type\":\"reactHoc\",\"name\":\"brixBlockNonWorkEmailsButton\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"brixBlockNonWorkEmailsInput\":{\"type\":\"reactHoc\",\"name\":\"brixBlockNonWorkEmailsInput\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"brixBlockNonWorkEmailsError\":{\"type\":\"reactHoc\",\"name\":\"brixBlockNonWorkEmailsError\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./BrixBlockNonWorkEmails.map"],"mappings":"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"}