{"version":3,"file":"Button.fGCFGmzm.mjs","names":["useState","useRef","e","_Fragment","React"],"sources":["https:/framerusercontent.com/modules/lYx1IBUVhcmghawLvI4v/ejZsyoGldPr21FVo3gSe/Button.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from\"react/jsx-runtime\";import React,{useState,useEffect,useRef}from\"react\";import{addPropertyControls,ControlType}from\"framer\";/**\n * @framerDisableUnlink\n */export function UncodeUTMs(props){const{redirectSettings,buttonComponent,errorComponent,loadingComponent,successComponent,redirectDelay}=props;const[hasError,setHasError]=useState(false);const[utmParams,setUtmParams]=useState({});const[isSubmitting,setIsSubmitting]=useState(false);const[isSuccess,setIsSuccess]=useState(false)// Estado para sucesso\n;const formRef=useRef(null)// Referência ao elemento <form>\n;// Função para detectar utm_source automaticamente com base no referer\nconst detectSource=()=>{const referer=document.referrer||\"\";let source=\"direct\"// Valor padrão se não houver referer\n;if(referer.includes(\"facebook.com\")){source=\"facebook\";}else if(referer.includes(\"instagram.com\")){source=\"instagram\";}else if(referer.includes(\"google.com\")){source=\"google\";}// Adicione mais plataformas conforme necessário\nreturn source;};// Captura os parâmetros UTM da URL e adiciona utm_source se não houver\nuseEffect(()=>{if(typeof window!==\"undefined\"){let search=\"\";try{if(window.location!==window.parent.location){// Estamos em um iframe, tenta obter da janela pai\nsearch=window.parent.location.search;}else{search=window.location.search;}}catch(e){// Em caso de erro, usa a localização atual\nsearch=window.location.search;}const params=new URLSearchParams(search);const utm={};params.forEach((value,key)=>{if(key.startsWith(\"utm_\")){utm[key]=value;}});// Se não houver utm_source, adiciona automaticamente a detecção de source\nif(!utm.utm_source){utm.utm_source=detectSource();}console.log(\"UTM Params (com utm_source detectada):\",utm)// Debug UTM\n;setUtmParams(utm);}},[]);// Função de validação para diferentes tipos de input\nconst validateInput=element=>{const value=element.value.trim();const type=element.getAttribute(\"type\")||element.tagName.toLowerCase();let isValid=true;if(value.includes(\"#\")){isValid=false;}switch(type){case\"email\":if(value){const emailPattern=/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;isValid=emailPattern.test(value);}break;case\"number\":if(value){isValid=!isNaN(value);}break;case\"tel\":if(value){const phonePattern=/^\\+?[0-9\\s\\-()]{7,}$/;isValid=phonePattern.test(value);}break;case\"url\":if(value){try{new URL(value);}catch(_){isValid=false;}}break;default:isValid=true;}if(isValid&&element.getAttribute(\"pattern\")){const pattern=new RegExp(element.getAttribute(\"pattern\"));isValid=pattern.test(value);}return isValid;};// Função para validar o formulário inteiro\nconst validateForm=()=>{const inputElements=document.querySelectorAll(\"input[name], textarea[name], select[name]\");let formIsValid=true;inputElements.forEach(element=>{let isInvalid=false;const isRequired=element.required;isInvalid=!validateInput(element);if(isRequired&&!element.value.trim()){isInvalid=true;}if(isInvalid){formIsValid=false;element.classList.add(\"invalid\");}else{element.classList.remove(\"invalid\");}});return formIsValid;};// Função para lidar com o envio do formulário\nconst handleSubmit=async e=>{e.preventDefault()// Previne o comportamento padrão do form\n;if(isSubmitting){return;}const formIsValid=validateForm();if(!formIsValid){setHasError(true);return;}setHasError(false);setIsSubmitting(true);// Exibe componente de sucesso após validação\nsetIsSuccess(true);// Redireciona após o delay configurado\nsetTimeout(()=>{if(redirectSettings&&redirectSettings.targetUrl){window.location.href=redirectSettings.targetUrl;}else{// Se não houver URL de redirecionamento, envia o formulário\nif(formRef.current){formRef.current.submit();}}},redirectDelay*1e3)// Delay em milissegundos\n;};return /*#__PURE__*/_jsxs(_Fragment,{children:[Object.entries(utmParams).map(([key,value])=>/*#__PURE__*/_jsx(\"input\",{type:\"hidden\",name:key,value:value},key)),isSubmitting&&loadingComponent,isSuccess&&successComponent,props.children&&React.Children.map(props.children,child=>{return /*#__PURE__*/React.cloneElement(child,{onChange:()=>{}});}),!isSubmitting&&!isSuccess&&(buttonComponent||/*#__PURE__*/_jsx(\"button\",{onClick:handleSubmit,disabled:isSubmitting,children:\"Enviar\"})),hasError&&errorComponent]});}UncodeUTMs.defaultProps={redirectDelay:2};addPropertyControls(UncodeUTMs,{buttonComponent:{type:ControlType.ComponentInstance,title:\"Button Component\",description:\"Componente personalizado para o bot\\xe3o de envio.\"},errorComponent:{type:ControlType.ComponentInstance,title:\"Error Component\",description:\"Componente exibido em caso de erro na valida\\xe7\\xe3o.\"},codeBy:{type:ControlType.String,title:\"Author\",description:\"Code by UncodeStack and @omatusaelhorch.\",defaultValue:\"Autor: \"}});\nexport const __FramerMetadata__ = {\"exports\":{\"UncodeUTMs\":{\"type\":\"reactComponent\",\"name\":\"UncodeUTMs\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerDisableUnlink\":\"\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Button.map"],"mappings":"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"}