{
  "version": 3,
  "sources": ["ssg:https://framerusercontent.com/modules/3gQok4UDHDAZ9iP3U08T/6zWzISQvs7S0JeIjARIH/Analytics.js", "ssg:https://framerusercontent.com/modules/HIxQwqHRGUiAkHbwjvTT/sq483sMqW49hnhy6WCSt/DownloadMobile.js"],
  "sourcesContent": ["import{jsx as _jsx}from\"react/jsx-runtime\";export function withOnClick(Component){return props=>{return /*#__PURE__*/_jsx(Component,{...props,onClick:()=>window.lintrk(\"track\",{conversion_id:19007762})});};}\nexport const __FramerMetadata__ = {\"exports\":{\"withOnClick\":{\"type\":\"reactHoc\",\"name\":\"withOnClick\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Analytics.map", "////////////////\n//\n// Using Framer?\n// See https://www.framer.com/learn/code-components/ for more info\n//\n////////////////\nimport{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from\"react/jsx-runtime\";import{useState}from\"react\";const INIT=\"INIT\";const SUBMITTING=\"SUBMITTING\";const ERROR=\"ERROR\";const SUCCESS=\"SUCCESS\";const formStates=[INIT,SUBMITTING,ERROR,SUCCESS];const formStyles={id:\"clu2d1lgt01ly9a9wan2jzgyj\",name:\"Default\",formStyle:\"buttonBelow\",placeholderText:\"Email address\",formFont:\"Inter\",formFontColor:\"#000000\",formFontSizePx:16,buttonText:\"Send download link\",buttonFont:\"Inter\",buttonFontColor:\"#000000\",buttonColor:\"linear-gradient(90deg, #F2E221 0%, #A6EF5E 49.79%, #5FF19D 100%)\",buttonFontSizePx:\"16\",successMessage:\"Link sent\",successFont:\"Inter\",successFontColor:\"#ffffff\",successFontSizePx:\"16\",userGroup:\"Mobile download\"};const domain=\"app.loops.so\";export default function SignUpFormReact(){const[email,setEmail]=useState(\"\");const[formState,setFormState]=useState(INIT);const[errorMessage,setErrorMessage]=useState(\"\");const resetForm=()=>{setEmail(\"\");setFormState(INIT);setErrorMessage(\"\");};/**\n     * Rate limit the number of submissions allowed\n     * @returns {boolean} true if the form has been successfully submitted in the past minute\n     */const hasRecentSubmission=()=>{const time=new Date;const timestamp=time.valueOf();const previousTimestamp=localStorage.getItem(\"loops-form-timestamp\");// Indicate if the last sign up was less than a minute ago\nif(previousTimestamp&&Number(previousTimestamp)+60*1e3>timestamp){setFormState(ERROR);setErrorMessage(\"Too many signups, please try again in a little while\");return true;}localStorage.setItem(\"loops-form-timestamp\",timestamp.toString());return false;};const handleSubmit=event=>{// Prevent the default form submission\nevent.preventDefault();// boundary conditions for submission\nif(formState!==INIT)return;if(!isValidEmail(email)){setFormState(ERROR);setErrorMessage(\"Please enter a valid email\");return;}if(hasRecentSubmission())return;setFormState(SUBMITTING);// build body\nconst formBody=`userGroup=${encodeURIComponent(formStyles.userGroup)}&email=${encodeURIComponent(email)}&mailingLists=`;// API request to add user to newsletter\nfetch(`https://${domain}/api/newsletter-form/${formStyles.id}`,{method:\"POST\",body:formBody,headers:{\"Content-Type\":\"application/x-www-form-urlencoded\"}}).then(res=>[res.ok,res.json(),res]).then(([ok,dataPromise,res])=>{if(ok){resetForm();setFormState(SUCCESS);}else{dataPromise.then(data=>{setFormState(ERROR);setErrorMessage(data.message||res.statusText);localStorage.setItem(\"loops-form-timestamp\",\"\");});}}).catch(error=>{setFormState(ERROR);// check for cloudflare error\nif(error.message===\"Failed to fetch\"){setErrorMessage(\"Too many signups, please try again in a little while\");}else if(error.message){setErrorMessage(error.message);}localStorage.setItem(\"loops-form-timestamp\",\"\");});};const isInline=formStyles.formStyle===\"inline\";switch(formState){case SUCCESS:return /*#__PURE__*/_jsx(\"div\",{style:{display:\"flex\",alignItems:\"center\",justifyContent:\"center\",width:\"100%\",backgroundColor:\"transparent\",border:\"1px solid rgba(62, 62, 70, 1)\",borderStyle:\"dashed\"},children:/*#__PURE__*/_jsxs(\"p\",{style:{fontFamily:`'${formStyles.successFont}', sans-serif`,color:formStyles.successFontColor,fontSize:`${formStyles.successFontSizePx}px`,paddingTop:\"47.5px\",paddingBottom:\"47.5px\"},children:[/*#__PURE__*/_jsx(\"span\",{style:{backgroundImage:\"linear-gradient(90deg, #F2E221 0%, #A6EF5E 49.79%, #5FF19D 100%)\",WebkitBackgroundClip:\"text\",WebkitTextFillColor:\"transparent\"},children:\"\u2713\"}),formStyles.successMessage]})});case ERROR:return /*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(SignUpFormError,{}),/*#__PURE__*/_jsx(BackButton,{})]});default:return /*#__PURE__*/_jsx(_Fragment,{children:/*#__PURE__*/_jsxs(\"form\",{onSubmit:handleSubmit,style:{display:\"flex\",flexDirection:isInline?\"row\":\"column\",gap:\"6px\",alignItems:\"center\",justifyContent:\"center\",width:\"100%\",backgroundColor:\"#27272B\",padding:\"6px\"},children:[/*#__PURE__*/_jsx(\"input\",{type:\"text\",name:\"email\",placeholder:formStyles.placeholderText,value:email,onChange:e=>setEmail(e.target.value),required:true,style:{color:formStyles.formFontColor,fontFamily:`'${formStyles.formFont}', sans-serif`,fontSize:`${formStyles.formFontSizePx}px`,width:\"100%\",background:\"#EAEAEB\",border:\"1px solid #D1D5DB\",boxSizing:\"border-box\",padding:\"15px 14px 14px 14px\"}}),/*#__PURE__*/_jsx(SignUpFormButton,{})]})});}function SignUpFormError(){return /*#__PURE__*/_jsx(\"div\",{style:{alignItems:\"center\",justifyContent:\"center\",width:\"100%\"},children:/*#__PURE__*/_jsx(\"p\",{style:{fontFamily:\"Inter, sans-serif\",color:\"rgb(185, 28, 28)\",fontSize:\"14px\"},children:errorMessage||\"Oops! Something went wrong, please try again\"})});}function BackButton(){const[isHovered,setIsHovered]=useState(false);return /*#__PURE__*/_jsx(\"button\",{style:{color:\"#6b7280\",font:\"14px, Inter, sans-serif\",margin:\"10px auto\",textAlign:\"center\",background:\"transparent\",border:\"none\",cursor:\"pointer\",textDecoration:isHovered?\"underline\":\"none\"},onMouseOut:()=>setIsHovered(false),onMouseOver:()=>setIsHovered(true),onClick:resetForm,children:\"\u2190 Back\"});}function SignUpFormButton({props}){return /*#__PURE__*/_jsx(\"button\",{type:\"submit\",style:{background:formStyles.buttonColor,fontSize:`${formStyles.buttonFontSizePx}px`,color:formStyles.buttonFontColor,fontFamily:`'${formStyles.buttonFont}', sans-serif`,width:isInline?\"min-content\":\"100%\",whiteSpace:isInline?\"nowrap\":\"normal\",alignItems:\"center\",justifyContent:\"center\",flexDirection:\"row\",paddingBottom:\"14.53px\",paddingTop:\"14.47px\",textAlign:\"center\",fontStyle:\"normal\",fontWeight:600,lineHeight:\"19.36px\",border:\"none\",cursor:\"pointer\"},children:formState===SUBMITTING?\"Please wait...\":formStyles.buttonText});}}function isValidEmail(email){return/.+@.+/.test(email);}\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"SignUpFormReact\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./DownloadMobile.map"],
  "mappings": "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",
  "names": ["withOnClick", "Component", "props", "p", "window", "INIT", "SUBMITTING", "ERROR", "SUCCESS", "formStyles", "domain", "SignUpFormReact", "email", "setEmail", "ye", "formState", "setFormState", "INIT", "errorMessage", "setErrorMessage", "resetForm", "hasRecentSubmission", "timestamp", "previousTimestamp", "ERROR", "handleSubmit", "event", "isValidEmail", "SUBMITTING", "formBody", "res", "ok", "dataPromise", "SUCCESS", "data", "error", "isInline", "p", "u", "l", "SignUpFormError", "BackButton", "e", "SignUpFormButton", "isHovered", "setIsHovered", "props"]
}
