{"version":3,"file":"SignIn.DBOkuOoB.mjs","names":["useState"],"sources":["https:/framerusercontent.com/modules/HqdLVphzdiNKf6GujXlA/zuHHDd7u0S9EQMhPxhMw/SignIn.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{useEffect,useState}from\"react\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";import{API_BASE,C,FONT}from\"https://framerusercontent.com/modules/Bssu4WwdATFqiNyjJBtp/i57wuiOx9Ff9B97OUmjE/ToolKit.js\";const MESSAGES={duplicate_email:\"An account already exists for this email address. Please sign in with the email you first used.\",auth_failed:\"Sign-in failed. Please try again.\",rate_limited:\"Too many attempts. Please wait a minute and try again.\",start_failed:\"Couldn’t start sign-in. Please try again.\"};const FALLBACK=\"Something went wrong. Please try again.\";/**\n * In-app browsers (Twitter, LinkedIn, Instagram and friends) where Google can\n * refuse sign-in with \"disallowed_useragent\". Same fingerprints as the app.\n * A false positive only shows the help; the button always stays clickable.\n */function isInAppBrowser(ua,standalone){if(!ua)return false;if(/FBAN|FBAV/.test(ua))return true;if(/Instagram/.test(ua))return true;if(/Twitter|TwitterAndroid/.test(ua))return true;if(/Line\\//.test(ua))return true;if(/Snapchat/.test(ua))return true;if(/WhatsApp/.test(ua))return true;if(/LinkedInApp/i.test(ua))return true;if(/MicroMessenger/.test(ua))return true;if(/TikTok|musical_ly/i.test(ua))return true;if(/; wv\\)/.test(ua))return true;if(!standalone&&/iPhone|iPad/.test(ua)&&/ Mobile\\//.test(ua)&&!/Safari\\//.test(ua))return true;return false;}function inAppLinks(ua,loc){const href=loc.href;if(/Android/i.test(ua)){const scheme=loc.protocol.replace(/:$/,\"\");return{href,open:{label:\"Open in Chrome\",url:`intent://${loc.host}${loc.pathname}${loc.search}#Intent;scheme=${scheme};package=com.android.chrome;S.browser_fallback_url=${encodeURIComponent(href)};end`}};}if(/iPhone|iPad|iPod/.test(ua))return{href,open:{label:\"Open in Safari\",url:`x-safari-${href}`}};return{href,open:null};}function startUrl(base,redirect){const root=(base||API_BASE).replace(/\\/+$/,\"\");// The app only honours a same-site path; anything else is dropped here too.\nconst keep=redirect&&redirect.startsWith(\"/\")&&!redirect.startsWith(\"//\")?redirect:null;return`${root}/api/auth/google${keep?`?redirect=${encodeURIComponent(keep)}`:\"\"}`;}const CSS=`\n.vmsi { display: flex; flex-direction: column; gap: 12px; width: 100%; font-family: ${FONT}; color: #181818; letter-spacing: -0.01em; -webkit-font-smoothing: antialiased; }\n.vmsi * { box-sizing: border-box; }\n.vmsi-g { display: flex; align-items: center; justify-content: center; gap: 10px; width: 100%; height: 48px; padding: 0 20px; border-radius: 4px; background: #181818; color: #fff; font-size: 15px; font-weight: 500; letter-spacing: -0.01em; text-decoration: none; cursor: pointer; transition: background-color 0.2s ease; }\n.vmsi-g:hover { background: #333637; }\n.vmsi-g:focus-visible, .vmsi-s:focus-visible, .vmsi-in:focus-visible { outline: 2px solid #181818; outline-offset: 2px; }\n.vmsi-gl { width: 24px; height: 24px; border-radius: 50%; background: #fff; display: grid; place-items: center; flex: none; }\n.vmsi-box { border-radius: 8px; padding: 12px 14px; font-size: 14px; line-height: 1.45; }\n.vmsi-box p { margin: 0; }\n.vmsi-s { flex: 1; display: inline-flex; align-items: center; justify-content: center; height: 40px; padding: 0 14px; border-radius: 4px; border: 1px solid #ededed; background: #fff; color: #181818; font: inherit; font-size: 14px; font-weight: 500; text-decoration: none; cursor: pointer; }\n.vmsi-s:hover { border-color: #d6d6d6; }\n.vmsi-in { width: 100%; height: 40px; margin-top: 10px; padding: 0 12px; border-radius: 4px; border: 1px solid #ededed; background: #fff; color: #181818; font: inherit; font-size: 13px; }\n`;const GOOGLE=/*#__PURE__*/_jsxs(\"svg\",{width:\"16\",height:\"16\",viewBox:\"0 0 24 24\",\"aria-hidden\":\"true\",children:[/*#__PURE__*/_jsx(\"path\",{d:\"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92a5.06 5.06 0 01-2.2 3.32v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.1z\",fill:\"#4285F4\"}),/*#__PURE__*/_jsx(\"path\",{d:\"M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z\",fill:\"#34A853\"}),/*#__PURE__*/_jsx(\"path\",{d:\"M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z\",fill:\"#FBBC05\"}),/*#__PURE__*/_jsx(\"path\",{d:\"M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z\",fill:\"#EA4335\"})]});/**\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight auto\n * @framerIntrinsicWidth 452\n */export default function SignIn({appUrl=\"\",preview=\"none\",style}){const onCanvas=RenderTarget.current()===RenderTarget.canvas;const[href,setHref]=useState(()=>startUrl(appUrl,null));const[error,setError]=useState(null);const[inApp,setInApp]=useState(null);const[going,setGoing]=useState(false);const[copy,setCopy]=useState(\"idle\");// Browser-only reads (URL, user agent) after mount, so the static page and\n// the first client render match.\nuseEffect(()=>{if(onCanvas||typeof window===\"undefined\")return;const q=new URLSearchParams(window.location.search);setHref(startUrl(appUrl,q.get(\"redirect\")));const code=q.get(\"error\");if(code)setError(MESSAGES[code]??FALLBACK);const ua=navigator.userAgent||\"\";const standalone=navigator.standalone===true;if(isInAppBrowser(ua,standalone))setInApp(inAppLinks(ua,window.location));// Back button from Google: the page comes back from the cache with\n// \"Redirecting...\" still on the button.\nconst reset=e=>{if(e.persisted)setGoing(false);};window.addEventListener(\"pageshow\",reset);return()=>window.removeEventListener(\"pageshow\",reset);},[appUrl,onCanvas]);// The editor shows the states on request (Preview control); the live page never does.\nconst shownError=onCanvas?preview===\"error\"?MESSAGES.auth_failed:null:error;const shownInApp=onCanvas?preview===\"inapp\"?{href:\"https://voicemoat.com/login\",open:{label:\"Open in Safari\",url:\"#\"}}:null:inApp;const copyLink=async()=>{if(!shownInApp)return;try{await navigator.clipboard.writeText(shownInApp.href);setCopy(\"copied\");setTimeout(()=>setCopy(\"idle\"),2e3);}catch{setCopy(\"failed\");}};return /*#__PURE__*/_jsxs(\"div\",{className:\"vmsi\",style:style,children:[/*#__PURE__*/_jsx(\"style\",{children:CSS}),shownInApp&&/*#__PURE__*/_jsxs(\"div\",{className:\"vmsi-box\",role:\"status\",style:{background:C.sunSoft,border:\"1px solid rgba(255, 204, 64, 0.7)\"},children:[/*#__PURE__*/_jsx(\"p\",{style:{fontWeight:600},children:\"Google sign-in may not work in this app.\"}),/*#__PURE__*/_jsx(\"p\",{style:{color:\"#333637\"},children:\"Open this page in Chrome or Safari to sign in with Google.\"}),/*#__PURE__*/_jsx(\"input\",{className:\"vmsi-in\",readOnly:true,value:shownInApp.href,\"aria-label\":\"Link to this page\",onFocus:e=>e.currentTarget.select()}),/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",gap:8,marginTop:8,flexWrap:\"wrap\"},children:[shownInApp.open&&/*#__PURE__*/_jsx(\"a\",{className:\"vmsi-s\",href:shownInApp.open.url,children:shownInApp.open.label}),/*#__PURE__*/_jsx(\"button\",{type:\"button\",className:\"vmsi-s\",onClick:copyLink,children:copy===\"copied\"?\"Link copied\":\"Copy link\"})]}),/*#__PURE__*/_jsx(\"p\",{role:\"status\",style:{fontSize:12,color:\"#686868\",marginTop:copy===\"failed\"?8:0},children:copy===\"failed\"?\"Couldn’t copy. Press and hold the link above to copy it.\":\"\"})]}),/*#__PURE__*/_jsxs(\"a\",{className:\"vmsi-g\",href:onCanvas?undefined:href,onClick:()=>setGoing(true),children:[/*#__PURE__*/_jsx(\"span\",{className:\"vmsi-gl\",children:GOOGLE}),going?\"Redirecting…\":\"Continue with Google\"]}),shownError&&/*#__PURE__*/_jsx(\"div\",{className:\"vmsi-box\",role:\"alert\",style:{background:C.coralSoft,border:\"1px solid rgba(236, 107, 94, 0.4)\"},children:/*#__PURE__*/_jsx(\"p\",{children:shownError})})]});}addPropertyControls(SignIn,{appUrl:{type:ControlType.String,title:\"App address\",defaultValue:\"\",placeholder:\"Leave empty: uses the tools' app address\",description:\"Where sign-in runs. Empty follows API_BASE in ToolKit (app.voicemoat.com after launch).\"},preview:{type:ControlType.Enum,title:\"Preview\",options:[\"none\",\"error\",\"inapp\"],optionTitles:[\"Normal\",\"Error message\",\"In-app browser\"],defaultValue:\"none\",description:\"Editor only. The live page shows these states by itself.\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"SignIn\",\"slots\":[],\"annotations\":{\"framerIntrinsicWidth\":\"452\",\"framerSupportedLayoutHeight\":\"auto\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutWidth\":\"any-prefer-fixed\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}"],"mappings":"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"}