{"version":3,"file":"shared-lib.lb_ZNFju.mjs","names":["useState","email"],"sources":["https:/framerusercontent.com/modules/uo9dKGcXmCirLamcOt5J/bDPWeaqMnpruaEYzy6zM/Submit_to_GS.js","https:/framerusercontent.com/modules/yYrWz8bzeuLkMmFwFcVL/FotaUiBaofwBevRZoKhW/siteMetadata.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{useState}from\"react\";import{Frame,addPropertyControls,ControlType}from\"framer\";/**\n * EmailSubmit 组件 - Framer 邮箱订阅表单\n * 功能：提供邮箱输入和提交功能，支持表单验证和提交状态管理\n * 布局：支持任意宽度，高度自适应\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight any\n */export default function EmailSubmit({placeholderText=\"Enter your email\",inputTextColor=\"#333\",buttonText=\"Submit\",buttonLoadingText=\"Submitting...\",buttonSuccessText=\"Success!\",buttonTextColor=\"#8A8181\",buttonBgColor=\"#666\",buttonHoverBgColor=\"#555\",buttonLoadingBgColor=\"#999\",errorTextColor=\"#FF3B30\",errorFontSize=14,inputFocusBorderColor=\"#0099FF\",apiUrl=\"\"}){// 组件状态管理\nconst[email,setEmail]=useState(\"\")// 邮箱输入值\n;const[status,setStatus]=useState(\"idle\")// 表单状态：idle(初始), loading(提交中), success(成功), error(错误)\n;const[errorMessage,setErrorMessage]=useState(\"\")// 错误提示信息\n;const[isHovered,setIsHovered]=useState(false)// 按钮悬停状态\n;const[isFocused,setIsFocused]=useState(false)// 输入框聚焦状态\n;const[formStarted,setFormStarted]=useState(false)// 表单开始状态（只触发一次）\n;// 判断是否有错误状态\nconst hasError=errorMessage!==\"\";/**\n     * SHA-256 哈希加密函数\n     * @param {string} str - 要加密的字符串\n     * @returns {Promise<string>} 返回加密后的哈希字符串\n     */const hashEmail=async email=>{if(!email)return\"\";try{// 标准化邮箱地址：转小写并去除空格\nconst normalizedEmail=email.trim().toLowerCase();// 创建文本编码器\nconst buffer=new TextEncoder(\"utf-8\").encode(normalizedEmail);// 使用 SHA-256 算法加密\nconst hashBuffer=await crypto.subtle.digest(\"SHA-256\",buffer);// 将加密后的 buffer 转换为十六进制字符串\nconst hashArray=Array.from(new Uint8Array(hashBuffer));const hashHex=hashArray.map(b=>(\"00\"+b.toString(16)).slice(-2)).join(\"\");return hashHex;}catch(error){console.error(\"Email hashing error:\",error);return\"\";}};/**\n     * 向数据层推送事件\n     * @param {string} eventName - 事件名称\n     * @param {object} eventParams - 事件参数\n     */const pushDataLayerEvent=(eventName,eventParams={})=>{if(window.dataLayer){window.dataLayer.push({event:eventName,...eventParams});console.log(`Pushed dataLayer event: ${eventName}`,eventParams);}else{console.warn(\"dataLayer not found\");}};/**\n     * 处理表单首次交互\n     * 确保表单开始事件只触发一次\n     */const handleFormStart=()=>{if(!formStarted){setFormStarted(true);pushDataLayerEvent(\"email_form_start\",{form_id:\"subscription_form\"});}};/**\n     * 邮箱格式验证函数\n     * @param {string} email - 需要验证的邮箱字符串\n     * @returns {boolean} 验证结果，true表示邮箱格式有效\n     */const validateEmail=email=>{return email.match(/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/)// 使用正则表达式验证邮箱格式\n;};/**\n     * 表单提交处理函数\n     * @param {React.FormEvent} e - 表单提交事件\n     * @returns {Promise<void>}\n     */const handleSubmit=async e=>{e.preventDefault()// 阻止表单默认提交行为\n;// 推送表单提交事件\npushDataLayerEvent(\"email_form_submit\",{form_id:\"subscription_form\",email_domain:email.split(\"@\")[1]||\"\"});// 验证邮箱格式\nif(!validateEmail(email)){setErrorMessage(\"Please enter a valid email address\");setStatus(\"error\");// 推送表单错误事件\npushDataLayerEvent(\"email_form_error\",{form_id:\"subscription_form\",error_type:\"validation\",error_message:\"Invalid email format\"});return;}// 检查API URL是否已配置\nif(!apiUrl){setErrorMessage(\"Please configure Google Apps Script API URL\");setStatus(\"error\");// 推送表单错误事件\npushDataLayerEvent(\"email_form_error\",{form_id:\"subscription_form\",error_type:\"configuration\",error_message:\"Missing API URL\"});return;}// 设置提交中状态\nsetStatus(\"loading\");setErrorMessage(\"\");try{console.log(\"Submitting email:\",email);console.log(\"API URL:\",apiUrl);// 使用隐藏iframe方式提交，避免CORS问题\nconst submitWithIframe=()=>{return new Promise((resolve,reject)=>{// 创建一个随机ID避免冲突\nconst iframeId=`submit-iframe-${Date.now()}`;const formId=`submit-form-${Date.now()}`;// 创建iframe\nconst iframe=document.createElement(\"iframe\");iframe.setAttribute(\"name\",iframeId);iframe.setAttribute(\"id\",iframeId);iframe.style.display=\"none\";document.body.appendChild(iframe);// 创建表单\nconst form=document.createElement(\"form\");form.setAttribute(\"id\",formId);form.setAttribute(\"method\",\"POST\");form.setAttribute(\"target\",iframeId);form.setAttribute(\"action\",apiUrl);form.style.display=\"none\";// 添加邮箱字段\nconst emailInput=document.createElement(\"input\");emailInput.setAttribute(\"type\",\"text\");emailInput.setAttribute(\"name\",\"email\");emailInput.setAttribute(\"value\",email);form.appendChild(emailInput);document.body.appendChild(form);// 设置超时\nconst timeoutId=setTimeout(()=>{cleanUp();reject(new Error(\"Request timed out\"));},15e3);// 监听iframe加载事件\niframe.onload=()=>{clearTimeout(timeoutId);// 假设成功\ncleanUp();resolve({status:\"success\"});};// 清理函数\nconst cleanUp=()=>{if(document.getElementById(formId)){document.body.removeChild(form);}if(document.getElementById(iframeId)){document.body.removeChild(iframe);}};// 提交表单\nform.submit();});};try{// 尝试常规fetch方法\nconst response=await fetch(apiUrl,{method:\"POST\",headers:{\"Content-Type\":\"application/json\"},body:JSON.stringify({email}),mode:\"cors\"});console.log(\"Response status:\",response.status);const responseText=await response.text();console.log(\"Response text:\",responseText);// 尝试解析JSON响应\ntry{const responseData=JSON.parse(responseText);console.log(\"Response data:\",responseData);// 检查响应状态\nif(!response.ok||responseData.status===\"error\"){throw new Error(responseData?.message||\"Server returned error status\");}// 提交成功处理 - 添加哈希邮箱\nconst submitSuccess=async()=>{// 获取哈希后的邮箱\nconst hashedEmail=await hashEmail(email);// 设置成功状态\nsetStatus(\"success\");setEmail(\"\");// 推送表单成功事件\npushDataLayerEvent(\"email_form_success\",{form_id:\"subscription_form\",submission_method:\"fetch\",hashed_email:hashedEmail});};// 执行成功处理\nawait submitSuccess();}catch(parseError){// JSON解析失败，尝试iframe提交方式 - 添加哈希邮箱\nconst submitSuccessNoJson=async()=>{// 获取哈希后的邮箱\nconst hashedEmail=await hashEmail(email);console.log(\"Fetch succeeded but JSON parse failed, treating as success\");// 设置成功状态\nsetStatus(\"success\");setEmail(\"\");// 推送表单成功事件\npushDataLayerEvent(\"email_form_success\",{form_id:\"subscription_form\",submission_method:\"fetch_no_json\",hashed_email:hashedEmail});};// 执行成功处理\nawait submitSuccessNoJson();}}catch(fetchError){console.error(\"Fetch failed, falling back to iframe method:\",fetchError);// fetch方法失败，尝试iframe提交\nawait submitWithIframe();// iframe提交成功 - 添加哈希邮箱\nconst submitSuccessIframe=async()=>{// 获取哈希后的邮箱\nconst hashedEmail=await hashEmail(email);// 设置成功状态\nsetStatus(\"success\");setEmail(\"\");// 推送表单成功事件\npushDataLayerEvent(\"email_form_success\",{form_id:\"subscription_form\",submission_method:\"iframe\",hashed_email:hashedEmail});};// 执行成功处理\nawait submitSuccessIframe();}}catch(error){// 所有方法都失败\nconsole.error(\"All submission methods failed:\",error);setStatus(\"error\");setErrorMessage(`Submission failed: ${error instanceof Error?error.message:\"unknown error\"}`);// 推送表单错误事件\npushDataLayerEvent(\"email_form_error\",{form_id:\"subscription_form\",error_type:\"submission\",error_message:error instanceof Error?error.message:\"unknown error\"});}};// 组件渲染\nreturn(// 使用 Framer Frame 组件作为容器\n/*#__PURE__*/_jsx(Frame,{width:\"100%\",height:\"100%\",background:\"transparent\",style:{maxWidth:\"100%\",display:\"flex\",flexDirection:\"column\",justifyContent:\"center\",alignItems:\"stretch\",position:\"absolute\",top:0,left:0,right:0,bottom:0},children:/*#__PURE__*/_jsx(\"form\",{onSubmit:handleSubmit,style:{width:\"100%\",height:\"100%\",display:\"flex\",flexDirection:\"column\",justifyContent:\"center\"},children:/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",flexDirection:\"row\",gap:\"12px\",width:\"100%\",minHeight:\"40px\",height:\"40px\",flex:1},children:[/*#__PURE__*/_jsx(\"input\",{type:\"email\",value:email,onChange:e=>{setEmail(e.target.value);handleFormStart()// 用户开始输入时触发表单开始事件\n;},placeholder:hasError?errorMessage:placeholderText,onFocus:()=>{setIsFocused(true);handleFormStart()// 用户聚焦输入框时触发表单开始事件\n;// 聚焦时清除错误\nif(hasError){setErrorMessage(\"\");setStatus(\"idle\");}},onBlur:()=>setIsFocused(false),style:{padding:\"12px\",fontSize:\"14px\",fontWeight:\"400\",fontFamily:\"Inter\",lineHeight:\"1.2em\",letterSpacing:\"0em\",textAlign:\"left\",color:inputTextColor,borderRadius:\"10px\",border:hasError?`1px solid ${errorTextColor}`// 错误状态边框\n:isFocused?`1px solid ${inputFocusBorderColor}`:\"1px solid #CABEBE\",outline:\"none\",backgroundColor:\"#F5F5F5\",flex:\"1\",height:\"40px\",boxSizing:\"border-box\",transition:\"border-color 0.3s ease\"},disabled:status===\"loading\",className:hasError?\"email-input error\":\"email-input\"}),/*#__PURE__*/_jsx(\"style\",{children:`\n                        .email-input::placeholder {\n                            color: #8A8181;\n                        }\n                        .email-input.error::placeholder {\n                            color: ${errorTextColor};\n                        }\n                    `}),/*#__PURE__*/_jsx(\"button\",{type:\"submit\",style:{padding:\"12px\",fontSize:\"14px\",fontWeight:\"400\",fontFamily:\"Poppins\",lineHeight:\"1.2em\",letterSpacing:\"0em\",textAlign:\"center\",color:\"#8A8181\",borderRadius:\"10px\",border:\"1px solid #CABEBE\",backgroundColor:status===\"loading\"?buttonLoadingBgColor:isHovered&&status!==\"loading\"?buttonHoverBgColor:buttonBgColor,cursor:status===\"loading\"?\"not-allowed\":\"pointer\",width:\"30%\",height:\"40px\",boxSizing:\"border-box\",transition:\"background-color 0.3s ease\",display:\"flex\",justifyContent:\"center\",alignItems:\"center\"},disabled:status===\"loading\",onMouseEnter:()=>setIsHovered(true),onMouseLeave:()=>setIsHovered(false),children:status===\"loading\"?buttonLoadingText:status===\"success\"?buttonSuccessText:buttonText})]})})}));}// Framer 属性控制面板配置\n// 用于在 Framer 界面中可视化配置组件属性\naddPropertyControls(EmailSubmit,{// 文本配置\nplaceholderText:{title:\"Placeholder Text\",type:ControlType.String,defaultValue:\"Enter your email\"},// 颜色配置\ninputFocusBorderColor:{title:\"Focus Border Color\",type:ControlType.Color,defaultValue:\"#0099FF\"},buttonBgColor:{title:\"Button Color\",type:ControlType.Color,defaultValue:\"#666\"},buttonHoverBgColor:{title:\"Button Hover Color\",type:ControlType.Color,defaultValue:\"#555\"},buttonLoadingBgColor:{title:\"Loading Color\",type:ControlType.Color,defaultValue:\"#999\"},errorTextColor:{title:\"Error Color\",type:ControlType.Color,defaultValue:\"#FF3B30\"},// 文本内容配置\nbuttonText:{title:\"Button Text\",type:ControlType.String,defaultValue:\"Submit\"},buttonLoadingText:{title:\"Loading Text\",type:ControlType.String,defaultValue:\"Submitting...\"},buttonSuccessText:{title:\"Success Text\",type:ControlType.String,defaultValue:\"Success!\"},// API配置\napiUrl:{title:\"API URL\",type:ControlType.String,defaultValue:\"\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"EmailSubmit\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutWidth\":\"any\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutHeight\":\"any\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Submit_to_GS.map","// Generated by Framer (0956b9b)\nexport default function metadata(params,activeLocale){return{customHTMLBodyEnd:'<!-- Google Tag Manager (noscript) -->\\n<noscript><iframe src=\"https://www.googletagmanager.com/ns.html?id=GTM-MQ2GKQKC\" height=\"0\" width=\"0\" style=\"display:none;visibility:hidden\"></iframe></noscript>\\n<!-- End Google Tag Manager (noscript) -->\\n',customHTMLHeadEnd:\"<!-- Google Tag Manager -->\\n<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':\\nnew Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],\\nj=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=\\n'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);\\n})(window,document,'script','dataLayer','GTM-MQ2GKQKC');</script>\\n<!-- End Google Tag Manager -->\\n\\n<meta name=\\\"google-site-verification\\\" content=\\\"bmVPQNVE6U1U21TcR36hQzAg4E65wI-uqLYmxlFkEw0\\\">\",description:\"introducing Spīro, a smart crystal bracelet that blends modern intelligence and ancient wisdom to deliver personalized predictions, energy insights, and daily spiritual guidance.\",robots:\"max-image-preview:large\",title:\"Spīro | Smart crystal bracelet for personalized guidance\"};}export const metadataVersion=1;\nexport const __FramerMetadata__ = {\"exports\":{\"metadataVersion\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}"],"mappings":"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"}