1import{o as e}from"./chunk-94642797-1-81-19.js";import{t}from"./chunk-108386687-1-81-19.js";import{H as r,J as s,Y as a,d as o}from"./chunk-1031111719-1-81-19.js";import"./chunk-1124795404-1-81-19.js";import{n,r as i,t as l}from"./chunk-1117061659-1-81-19.js";import{n as u}from"./chunk-3710-1-81-19.js";import{a as c,i as d}from"./chunk-3598564-1-81-19.js";import{n as f}from"./chunk-933543719-1-81-19.js";import"./chunk-1354792126-1-81-19.js";import{d as m,f as p,m as h,n as y,o as g,p as w,s as v,t as b,u as x}from"./chunk-780346297-1-81-19.js";import{n as S,t as k}from"./chunk-1440818477-1-81-19.js";import"./chunk-110844025-1-81-19.js";import{a as C,d as A,f as F,i as V,m as E,n as _,o as N,p as T,r as P,s as O,u as L}from"./chunk-158249119-1-81-19.js";import{a as j,i as D,n as R,o as U,r as I,t as M}from"./chunk-1898235293-1-81-19.js";import{a as q,i as $,n as B,o as H,r as W,s as G,t as J}from"./chunk-1715089183-1-81-19.js";import{t as z}from"./chunk-210942028-1-81-19.js";import"./chunk-107141-1-81-19.js";import{o as K,r as Y,s as Q,t as X}from"./chunk-635274136-1-81-19.js";import{a as Z,n as ee,o as te,r as re,t as se}from"./chunk-808656285-1-81-19.js";import{i as ae,n as oe,r as ne}from"./chunk-100029210-1-81-19.js";var ie=e(t(),1);async function updatePreference(e,t,r){try{const s=await fetch(`${h.apiUrl}/user/preferences/${encodeURIComponent(t)}`,{method:"PUT",headers:{"Content-Type":"application/json",Authorization:`Token ${e}`},body:JSON.stringify({value:r})});s.ok||console.warn(`Failed to update "${t}" preference during auth flow (${s.status})`)}catch(s){console.warn(`Failed to update "${t}" preference during auth flow`,s)}}function setEmailMarketingAccepted(e,t){return updatePreference(e,"emailMarketingAccepted",t)}async function recordAcceptancePreferences(e){const t=(new Date).toISOString();await Promise.all([updatePreference(e,"termsOfUse",{acceptedDate:t,acceptedVersion:3}),updatePreference(e,"privacyPolicy",{acceptedDate:t,acceptedVersion:8})])}function persistAuthSession(e,t){K(t),b.setUserInfo(e.id,e.membershipStartedAt)}function navigateToDashboard(){J(),C(),window.location.href=function resolvePostAuthRedirect(e=c.authenticatedHome){let t=k(e,new URLSearchParams(window.location.search));const r=localStorage.getItem("redirect:after-login");return r&&(t=JSON.parse(r),localStorage.removeItem("redirect:after-login")),t}()}function navigateToOnboarding(e,t){J();const r=A({planId:T(e),couponCode:F(t)});window.location.href=k(r,new URLSearchParams(window.location.search))}async function navigateAfterLogin(e,t){te((await async function loadUserPreferences(e){try{const t=await fetch(`${h.apiUrl}/user`,{headers:{Authorization:`Token ${e}`}});if(!t.ok)return;return(await t.json())?.preferences??void 0}catch(t){return void console.warn("Failed to load user preferences during auth flow",t)}}(e))?.onboardingStep)?navigateToOnboarding(t?.plan,t?.coupon):t?.plan||t?.coupon?function navigateToUpgradeCheckout(e,t){J(),C();const r=L({planId:T(e),couponCode:F(t)});window.location.href=k(r,new URLSearchParams(window.location.search))}(t.plan,t.coupon):navigateToDashboard()}var le=(0,ie.createContext)(null);function AuthFlowProvider({children:e}){const t=r(),s=S(),[a,o]=(0,ie.useState)(()=>B()),[i,l]=(0,ie.useState)(()=>$()),u=(0,ie.useMemo)(()=>function resolvePlanContext(){const e=W();if("undefined"==typeof window)return e;const t=E(new URLSearchParams(window.location.search)),r=t.planId&&M(t.planId)?t.planId:void 0,s=t.couponCode??e.coupon,a=r??e.plan,o={startedFromPlanCard:e.startedFromPlanCard||!!a,plan:a,coupon:s};return(t.planId||t.couponCode)&&H(o),o}(),[]),c=(0,ie.useCallback)(e=>{o(e),q(e)},[]),f=(0,ie.useCallback)(e=>{l(e),G(e)},[]),m=(0,ie.useCallback)(e=>{const r=new URLSearchParams({step:e});u.plan&&r.set(d.plan,u.plan),u.coupon&&r.set(d.coupon,u.coupon),t(s(`/auth?${r.toString()}`))},[t,s,u.plan,u.coupon]),p=(0,ie.useCallback)(()=>{document.body.classList.remove("ReactModal__Body--open"),t(s("/"))},[t,s]),h=(0,ie.useCallback)(()=>{navigateToOnboarding(u.plan,u.coupon)},[u.plan,u.coupon]),y=(0,ie.useMemo)(()=>({email:a,setEmail:c,resetCode:i,setResetCode:f,planContext:u,goToStep:m,goHome:p,continueAfterAccountCreation:h}),[a,c,i,f,u,m,p,h]);return n(le.Provider,{value:y,children:e})}function useAuthFlow(){const e=(0,ie.useContext)(le);if(!e)throw new Error("useAuthFlow must be used within an AuthFlowProvider");return e}function HiddenTurnstile({id:e,turnstileRef:t,onSuccess:r,onExpire:s,onError:a}){return h.turnstile.enabled&&h.turnstile.siteKey?n(re,{id:e,ref:t,siteKey:h.turnstile.siteKey,options:{appearance:"interaction-only",theme:"dark"},onSuccess:r,onExpire:s,onError:a}):null}const FormErrorMessage=({message:e})=>e?n("div",{className:"text-red-500 mt-[8px]",children:e}):null,TextInput=({type:e="text",maxLength:t,className:r="",...s})=>{const[a,o]=(0,ie.useState)(!1),l="password"===e;return i("div",{className:"relative w-full",children:[n("input",{type:l?a?"text":"password":e,maxLength:t,className:`field-glass ${l?"pr-[40px]":""} ${r}`,...s}),l&&n("button",{type:"button",onClick:()=>o(!a),className:"absolute top-1/2 right-[16px] -translate-y-1/2 cursor-pointer text-white/50 transition-all duration-100 hover:text-white/75",children:n(a?ne:oe,{})})]})};var isCheckBoxInput=e=>"checkbox"===e.type,isDateObject=e=>e instanceof Date,isNullOrUndefined=e=>null==e,isObjectType=e=>"object"==typeof e,isObject=e=>!isNullOrUndefined(e)&&!Array.isArray(e)&&isObjectType(e)&&!isDateObject(e),ue="undefined"!=typeof window&&void 0!==window.HTMLElement&&"undefined"!=typeof document;function cloneObject(e){if(e instanceof Date)return new Date(e);const t="undefined"!=typeof FileList&&e instanceof FileList;if(ue&&(e instanceof Blob||t))return e;const r=Array.isArray(e);if(!(r||isObject(e)&&(e=>{const t=e.constructor&&e.constructor.prototype;return isObject(t)&&t.hasOwnProperty("isPrototypeOf")})(e)))return e;const s=r?[]:Object.create(Object.getPrototypeOf(e));for(const a in e)Object.prototype.hasOwnProperty.call(e,a)&&(s[a]=cloneObject(e[a]));return s}var isKey=e=>/^\w*$/.test(e),isUndefined=e=>void 0===e,compact=e=>Array.isArray(e)?e.filter(Boolean):[],stringToPath=e=>compact(e.replace(/["|']|\]/g,"").split(/\.|\[/)),get=(e,t,r)=>{if(!t||!isObject(e))return r;const s=(isKey(t)?[t]:stringToPath(t)).reduce((e,t)=>
1isNullOrUndefined(e)?e:e[t],e);return isUndefined(s)||s===e?isUndefined(e[t])?r:e[t]:s},isBoolean=e=>"boolean"==typeof e,isFunction=e=>"function"==typeof e,set=(e,t,r)=>{let s=-1;const a=isKey(t)?[t]:stringToPath(t),o=a.length,n=o-1;for(;++s<o;){const t=a[s];let o=r;if(s!==n){const r=e[t];o=isObject(r)||Array.isArray(r)?r:isNaN(+a[s+1])?{}:[]}if("__proto__"===t||"constructor"===t||"prototype"===t)return;e[t]=o,e=e[t]}},ce="blur",de="focusout",fe="onBlur",me="onChange",pe="onSubmit",he="onTouched",ye="all",ge="max",we="min",ve="maxLength",be="minLength",xe="pattern",Se="required",ke="validate";ie.createContext(null).displayName="HookFormControlContext";var Ce="undefined"!=typeof window?ie.useLayoutEffect:ie.useEffect,isString=e=>"string"==typeof e,isPrimitive=e=>isNullOrUndefined(e)||!isObjectType(e);function deepEqual(e,t,r=new WeakSet){if(isPrimitive(e)||isPrimitive(t))return Object.is(e,t);if(isDateObject(e)&&isDateObject(t))return Object.is(e.getTime(),t.getTime());const s=Object.keys(e),a=Object.keys(t);if(s.length!==a.length)return!1;if(r.has(e)||r.has(t))return!0;r.add(e),r.add(t);for(const o of s){const s=e[o];if(!a.includes(o))return!1;if("ref"!==o){const e=t[o];if(isDateObject(s)&&isDateObject(e)||isObject(s)&&isObject(e)||Array.isArray(s)&&Array.isArray(e)?!deepEqual(s,e,r):!Object.is(s,e))return!1}}return!0}ie.createContext(null).displayName="HookFormContext";var appendErrors=(e,t,r,s,a)=>t?{...r[e],types:{...r[e]&&r[e].types?r[e].types:{},[s]:a||!0}}:{},convertToArrayPayload=e=>Array.isArray(e)?e:[e],createSubject=()=>{let e=[];return{get observers(){return e},next:t=>{for(const r of e)r.next&&r.next(t)},subscribe:t=>(e.push(t),{unsubscribe:()=>{e=e.filter(e=>e!==t)}}),unsubscribe:()=>{e=[]}}};function extractFormValues(e,t){const r={};for(const s in e)if(e.hasOwnProperty(s)){const a=e[s],o=t[s];if(a&&isObject(a)&&o){const e=extractFormValues(a,o);isObject(e)&&(r[s]=e)}else e[s]&&(r[s]=o)}return r}var isEmptyObject=e=>isObject(e)&&!Object.keys(e).length,isFileInput=e=>"file"===e.type,isHTMLElement=e=>{if(!ue)return!1;const t=e?e.ownerDocument:0;return e instanceof(t&&t.defaultView?t.defaultView.HTMLElement:HTMLElement)},isMultipleSelect=e=>"select-multiple"===e.type,isRadioInput=e=>"radio"===e.type,live=e=>isHTMLElement(e)&&e.isConnected;function unset(e,t){const r=Array.isArray(t)?t:isKey(t)?[t]:stringToPath(t),s=1===r.length?e:function baseGet(e,t){const r=t.slice(0,-1).length;let s=0;for(;s<r;)e=isUndefined(e)?s++:e[t[s++]];return e}(e,r),a=r.length-1,o=r[a];return s&&delete s[o],0!==a&&(isObject(s)&&isEmptyObject(s)||Array.isArray(s)&&function isEmptyArray(e){for(const t in e)if(e.hasOwnProperty(t)&&!isUndefined(e[t]))return!1;return!0}(s))&&unset(e,r.slice(0,-1)),e}function isTraversable(e){return Array.isArray(e)||isObject(e)&&!(e=>{for(const t in e)if(isFunction(e[t]))return!0;return!1})(e)}function markFieldsDirty(e,t={}){for(const r in e){const s=e[r];isTraversable(s)?(t[r]=Array.isArray(s)?[]:{},markFieldsDirty(s,t[r])):isUndefined(s)||(t[r]=!0)}return t}function getDirtyFields(e,t,r){r||(r=markFieldsDirty(t));for(const s in e){const a=e[s];if(isTraversable(a))isUndefined(t)||isPrimitive(r[s])?r[s]=markFieldsDirty(a,Array.isArray(a)?[]:{}):getDirtyFields(a,isNullOrUndefined(t)?{}:t[s],r[s]);else{const e=t[s];r[s]=!deepEqual(a,e)}}return r}var Ae={value:!1,isValid:!1},Fe={value:!0,isValid:!0},getCheckboxValue=e=>{if(Array.isArray(e)){if(e.length>1){const t=e.filter(e=>e&&e.checked&&!e.disabled).map(e=>e.value);return{value:t,isValid:!!t.length}}return e[0].checked&&!e[0].disabled?e[0].attributes&&!isUndefined(e[0].attributes.value)?isUndefined(e[0].value)||""===e[0].value?Fe:{value:e[0].value,isValid:!0}:Fe:Ae}return Ae},getFieldValueAs=(e,{valueAsNumber:t,valueAsDate:r,setValueAs:s})=>isUndefined(e)?e:t?""===e?NaN:e?+e:e:r&&isString(e)?new Date(e):s?s(e):e,Ve={isValid:!1,value:null},getRadioValue=e=>Array.isArray(e)?e.reduce((e,t)=>t&&t.checked&&!t.disabled?{isValid:!0,value:t.value}:e,Ve):Ve;function getFieldValue(e){const t=e.ref;return isFileInput(t)?t.files:isRadioInput(t)?getRadioValue(e.refs).value:isMultipleSelect(t)?[...t.selectedOptions].map(({value:e})=>e):isCheckBoxInput(t)?getCheckboxValue(e.refs).value:getFieldValueAs(isUndefined(t.value)?e.ref.value:t.value,e)}var isRegex=e=>e instanceof RegExp,getRuleValue=e=>isUndefined(e)?e:isRegex(e)?e.source:isObject(e)?isRegex(e.value)?e.value.source:e.value:e,getValidationModes=e=>({isOnSubmit:!e||e===pe,isOnBlur:e===fe,isOnChange:e===me,isOnAll:e===ye,isOnTouch:e===he}),Ee="AsyncFunction",hasPromiseValidation=e=>!!e&&!!e.validate&&!!(isFunction(e.validate)&&e.validate.constructor.name===Ee||isObject(e.validate)&&Object.values(e.validate).find(e=>e.constructor.name===Ee)),isWatched=(e,t,r)=>!r&&(t.watchAll||t.watch.has(e)||[...t.watch].some(t=>e.startsWith(t)&&/^\.\w+/.test(e.slice(t.length)))),iterateFieldsByAction=(e,t,r,s)=>{for(const a of r||Object.keys(e)){const r=get(e,a);if(r){const{_f:e,...o}=r;if(e){if(e.refs&&e.refs[0]&&t(e.refs[0],a)&&!s)return!0;
vendor: 4,508 bytes, line 1
1if(e.ref&&t(e.ref,e.name)&&!s)return!0;if(iterateFieldsByAction(o,t))break}else if(isObject(o)&&iterateFieldsByAction(o,t))break}}};function schemaErrorLookup(e,t,r){const s=get(e,r);if(s||isKey(r))return{error:s,name:r};const a=r.split(".");for(;a.length;){const s=a.join("."),o=get(t,s),n=get(e,s);if(o&&!Array.isArray(o)&&r!==s)return{name:r};if(n&&n.type)return{name:s,error:n};if(n&&n.root&&n.root.type)return{name:`${s}.root`,error:n.root};a.pop()}return{name:r}}var updateFieldArrayRootError=(e,t,r)=>{const s=convertToArrayPayload(get(e,r));return set(s,"root",t[r]),set(e,r,s),e};function getValidateError(e,t,r="validate"){if(isString(e)||Array.isArray(e)&&e.every(isString)||isBoolean(e)&&!e)return{type:r,message:isString(e)?e:"",ref:t}}var getValueAndMessage=e=>isObject(e)&&!isRegex(e)?e:{value:e,message:""},validateField=async(e,t,r,s,a,o)=>{const{ref:n,refs:i,required:l,maxLength:u,minLength:c,min:d,max:f,pattern:m,validate:p,name:h,valueAsNumber:y,mount:g}=e._f,w=get(r,h);if(!g||t.has(h))return{};const v=i?i[0]:n,setCustomValidity=e=>{a&&v.reportValidity&&(v.setCustomValidity(isBoolean(e)?"":e||""),v.reportValidity())},b={},x=isRadioInput(n),S=isCheckBoxInput(n),k=x||S,C=(y||isFileInput(n))&&isUndefined(n.value)&&isUndefined(w)||isHTMLElement(n)&&""===n.value||""===w||Array.isArray(w)&&!w.length,A=appendErrors.bind(null,h,s,b),getMinMaxMessage=(e,t,r,s=ve,a=be)=>{const o=e?t:r;b[h]={type:e?s:a,message:o,ref:n,...A(e?s:a,o)}};if(o?!Array.isArray(w)||!w.length:l&&(!k&&(C||isNullOrUndefined(w))||isBoolean(w)&&!w||S&&!getCheckboxValue(i).isValid||x&&!getRadioValue(i).isValid)){const{value:e,message:t}=isString(l)?{value:!!l,message:l}:getValueAndMessage(l);if(e&&(b[h]={type:Se,message:t,ref:v,...A(Se,t)},!s))return setCustomValidity(t),b}if(!(C||isNullOrUndefined(d)&&isNullOrUndefined(f))){let e,t;const r=getValueAndMessage(f),a=getValueAndMessage(d);if(isNullOrUndefined(w)||isNaN(w)){const s=n.valueAsDate||new Date(w),convertTimeToDate=e=>new Date((new Date).toDateString()+" "+e),o="time"==n.type,i="week"==n.type;isString(r.value)&&w&&(e=o?convertTimeToDate(w)>convertTimeToDate(r.value):i?w>r.value:s>new Date(r.value)),isString(a.value)&&w&&(t=o?convertTimeToDate(w)<convertTimeToDate(a.value):i?w<a.value:s<new Date(a.value))}else{const s=n.valueAsNumber||(w?+w:w);isNullOrUndefined(r.value)||(e=s>r.value),isNullOrUndefined(a.value)||(t=s<a.value)}if((e||t)&&(getMinMaxMessage(!!e,r.message,a.message,ge,we),!s))return setCustomValidity(b[h].message),b}if((u||c)&&!C&&(isString(w)||o&&Array.isArray(w))){const e=getValueAndMessage(u),t=getValueAndMessage(c),r=!isNullOrUndefined(e.value)&&w.length>+e.value,a=!isNullOrUndefined(t.value)&&w.length<+t.value;if((r||a)&&(getMinMaxMessage(r,e.message,t.message),!s))return setCustomValidity(b[h].message),b}if(m&&!C&&isString(w)){const{value:e,message:t}=getValueAndMessage(m);if(isRegex(e)&&!w.match(e)&&(b[h]={type:xe,message:t,ref:n,...A(xe,t)},!s))return setCustomValidity(t),b}if(p)if(isFunction(p)){const e=getValidateError(await p(w,r),v);if(e&&(b[h]={...e,...A(ke,e.message)},!s))return setCustomValidity(e.message),b}else if(isObject(p)){let e={};for(const t in p){if(!isEmptyObject(e)&&!s)break;const a=getValidateError(await p[t](w,r),v,t);a&&(e={...a,...A(t,a.message)},setCustomValidity(a.message),s&&(b[h]=e))}if(!isEmptyObject(e)&&(b[h]={ref:v,...e},!s))return b}return setCustomValidity(!0),b},_e={mode:pe,reValidateMode:me,shouldFocusError:!0};function createFormControl(e={}){let t,r={..._e,...e},s={submitCount:0,isDirty:!1,isReady:!1,isLoading:isFunction(r.defaultValues),isValidating:!1,isSubmitted:!1,isSubmitting:!1,isSubmitSuccessful:!1,isValid:!1,touchedFields:{},dirtyFields:{},validatingFields:{},errors:r.errors||{},disabled:r.disabled||!1},a={},o=(isObject(r.defaultValues)||isObject(r.values))&&cloneObject(r.defaultValues||r.values)||{},n=r.shouldUnregister?{}:cloneObject(o),i={action:!1,mount:!1,watch:!1,keepIsValid:!1},l={mount:new Set,disabled:new Set,unMount:new Set,array:new Set,watch:new Set},u=0;const c={isDirty:!1,dirtyFields:!1,validatingFields:!1,touchedFields:!1,isValidating:!1,isValid:!1,errors:!1},d={...c};let f={...d};const m={array:createSubject(),state:createSubject()},p=r.criteriaMode===ye,_setValid=async e=>{if(!i.keepIsValid&&!r.disabled&&(d.isValid||f.isValid||e)){let e;r.resolver?(e=isEmptyObject((await _runSchema()).errors),_updateIsValidating()):e=await executeBuiltInValidation(a,!0),e!==s.isValid&&m.state.next({isValid:e})}},_updateIsValidating=(e,t)=>
1{!r.disabled&&(d.isValidating||d.validatingFields||f.isValidating||f.validatingFields)&&((e||Array.from(l.mount)).forEach(e=>{e&&(t?set(s.validatingFields,e,t):unset(s.validatingFields,e))}),m.state.next({validatingFields:s.validatingFields,isValidating:!isEmptyObject(s.validatingFields)}))},updateValidAndValue=(e,t,r,s)=>{const l=get(a,e);if(l){const a=get(n,e,isUndefined(r)?get(o,e):r);isUndefined(a)||s&&s.defaultChecked||t?set(n,e,t?a:getFieldValue(l._f)):setFieldValue(e,a),i.mount&&!i.action&&_setValid()}},updateTouchAndDirty=(e,t,a,n,i)=>{let l=!1,u=!1;const c={name:e};if(!r.disabled){if(!a||n){(d.isDirty||f.isDirty)&&(u=s.isDirty,s.isDirty=c.isDirty=_getDirty(),l=u!==c.isDirty);const r=deepEqual(get(o,e),t);u=!!get(s.dirtyFields,e),r?unset(s.dirtyFields,e):set(s.dirtyFields,e,!0),c.dirtyFields=s.dirtyFields,l=l||(d.dirtyFields||f.dirtyFields)&&u!==!r}if(a){const t=get(s.touchedFields,e);t||(set(s.touchedFields,e,a),c.touchedFields=s.touchedFields,l=l||(d.touchedFields||f.touchedFields)&&t!==a)}l&&i&&m.state.next(c)}return l?c:{}},shouldRenderByError=(e,a,o,n)=>{const i=get(s.errors,e),l=(d.isValid||f.isValid)&&isBoolean(a)&&s.isValid!==a;var c;if(r.delayError&&o?(c=()=>((e,t)=>{set(s.errors,e,t),m.state.next({errors:s.errors})})(e,o),t=e=>{clearTimeout(u),u=setTimeout(c,e)},t(r.delayError)):(clearTimeout(u),t=null,o?set(s.errors,e,o):unset(s.errors,e)),(o?!deepEqual(i,o):i)||!isEmptyObject(n)||l){const t={...n,...l&&isBoolean(a)?{isValid:a}:{},errors:s.errors,name:e};s={...s,...t},m.state.next(t)}},_runSchema=async e=>(_updateIsValidating(e,!0),await r.resolver(n,r.context,((e,t,r,s)=>{const a={};for(const o of e){const e=get(t,o);e&&set(a,o,e._f)}return{criteriaMode:r,names:[...e],fields:a,shouldUseNativeValidation:s}})(e||l.mount,a,r.criteriaMode,r.shouldUseNativeValidation))),executeBuiltInValidation=async(t,a,o={valid:!0})=>{for(const i in t){const u=t[i];if(u){const{_f:t,...i}=u;if(t){const i=l.array.has(t.name),c=u._f&&hasPromiseValidation(u._f);c&&d.validatingFields&&_updateIsValidating([t.name],!0);const f=await validateField(u,l.disabled,n,p,r.shouldUseNativeValidation&&!a,i);if(c&&d.validatingFields&&_updateIsValidating([t.name]),f[t.name]&&(o.valid=!1,a||e.shouldUseNativeValidation))break;!a&&(get(f,t.name)?i?updateFieldArrayRootError(s.errors,f,t.name):set(s.errors,t.name,f[t.name]):unset(s.errors,t.name))}!isEmptyObject(i)&&await executeBuiltInValidation(i,a,o)}}return o.valid},_getDirty=(e,t)=>!r.disabled&&(e&&t&&set(n,e,t),!deepEqual(getValues(),o)),_getWatch=(e,t,r)=>((e,t,r,s,a)=>isString(e)?(s&&t.watch.add(e),get(r,e,a)):Array.isArray(e)?e.map(e=>(s&&t.watch.add(e),get(r,e))):(s&&(t.watchAll=!0),r))(e,l,{...i.mount?n:isUndefined(t)?o:isString(e)?{[e]:t}:t},r,t),setFieldValue=(e,t,r={})=>{const s=get(a,e);let o=t;if(s){const r=s._f;r&&(!r.disabled&&set(n,e,getFieldValueAs(t,r)),o=isHTMLElement(r.ref)&&isNullOrUndefined(t)?"":t,isMultipleSelect(r.ref)?[...r.ref.options].forEach(e=>e.selected=o.includes(e.value)):r.refs?isCheckBoxInput(r.ref)?r.refs.forEach(e=>{e.defaultChecked&&e.disabled||(Array.isArray(o)?e.checked=!!o.find(t=>t===e.value):e.checked=o===e.value||!!o)}):r.refs.forEach(e=>e.checked=e.value===o):isFileInput(r.ref)?r.ref.value="":(r.ref.value=o,r.ref.type||m.state.next({name:e,values:cloneObject(n)})))}(r.shouldDirty||r.shouldTouch)&&updateTouchAndDirty(e,o,r.shouldTouch,r.shouldDirty,!0),r.shouldValidate&&trigger(e)},setValues=(e,t,r)=>{for(const s in t){if(!t.hasOwnProperty(s))return;const o=t[s],n=e+"."+s,i=get(a,n);(l.array.has(e)||isObject(o)||i&&!i._f)&&!isDateObject(o)?setValues(n,o,r):setFieldValue(n,o,r)}},setValue=(e,t,r={})=>{const u=get(a,e),c=l.array.has(e),p=cloneObject(t);set(n,e,p),c?(m.array.next({name:e,values:cloneObject(n)}),(d.isDirty||d.dirtyFields||f.isDirty||f.dirtyFields)&&r.shouldDirty&&m.state.next({name:e,dirtyFields:getDirtyFields(o,n),isDirty:_getDirty(e,p)})):!u||u._f||isNullOrUndefined(p)?setFieldValue(e,p,r):setValues(e,p,r),isWatched(e,l)?m.state.next({...s,name:e,values:cloneObject(n)}):m.state.next({name:i.mount?e:void 0,values:cloneObject(n)})},onChange=async e=>{i.mount=!0;const o=e.target;let u=o.name,c=!0;const h=get(a,u),_updateIsFieldValueUpdated=e=>{c=Number.isNaN(e)||isDateObject(e)&&isNaN(e.getTime())||deepEqual(e,get(n,u,e))},y=getValidationModes(r.mode),g=getValidationModes(r.reValidateMode);if(h){let i,v;const b=o.type?getFieldValue(h._f):(e=>isObject(e)&&e.target?isCheckBoxInput(e.target)?e.target.checked:e.target.value:e)(e),x=e.type===ce||e.type===de,S=!((w=h._f).mount&&(w.required||w.min||w.max||w.maxLength||w.minLength||w.pattern||w.validate)||r.resolver||get(s.errors,u)||h._f.deps)||((e,t,r,s,a)=>!a.isOnAll&&(!r&&a.isOnTouch?!(t||e):(r?s.isOnBlur:a.isOnBlur)?!e:!(r?s.isOnChange:a.isOnChange)||e))(x,get(s.touchedFields,u),s.isSubmitted,g,y),k=isWatched(u,l,x);set(n,u,b),x?o&&o.readOnly||(h._f.onBlur&&h._f.onBlur(e),t&&t(0)):h._f.onChange&&h._f.onChange(e);const C=updateTouchAndDirty(u,b,x),A=!isEmptyObject(C)||k;if(!x&&m.state.next({name:u,type:e.type,values:cloneObject(n)}),S)return(d.isValid||f.isValid)&&("onBlur"===r.mode?x&&_setValid():x||_setValid()),A&&m.state.next({name:u,...k?{}:C});if(!x&&k&&m.state.next({...s}),r.resolver){const{errors:e}=await _runSchema([u]);if(_updateIsValidating([u]),_updateIsFieldValueUpdated(b),c){const t=schemaErrorLookup(s.errors,a,u),r=schemaErrorLookup(e,a,t.name||u);i=r.error,u=r.name,v=isEmptyObject(e)}}else _updateIsValidating([u],!0),i=(await validateField(h,l.disabled,n,p,r.shouldUseNativeValidation))[u],_updateIsValidating([u]),_updateIsFieldValueUpdated(b),c&&(i?v=!1:(d.isValid||f.isValid)&&(v=await executeBuiltInValidation(a,!0)));c&&(h._f.deps&&(!Array.isArray(h._f.deps)||h._f.deps.length>0)&&trigger(h._f.deps),shouldRenderByError(u,v,i,C))}var w}
1,_focusInput=(e,t)=>{if(get(s.errors,t)&&e.focus)return e.focus(),1},trigger=async(e,t={})=>{let o,n;const i=convertToArrayPayload(e);if(r.resolver){const t=await(async e=>{const{errors:t}=await _runSchema(e);if(_updateIsValidating(e),e)for(const r of e){const e=get(t,r);e?set(s.errors,r,e):unset(s.errors,r)}else s.errors=t;return t})(isUndefined(e)?e:i);o=isEmptyObject(t),n=e?!i.some(e=>get(t,e)):o}else e?(n=(await Promise.all(i.map(async e=>{const t=get(a,e);return await executeBuiltInValidation(t&&t._f?{[e]:t}:t)}))).every(Boolean),(n||s.isValid)&&_setValid()):n=o=await executeBuiltInValidation(a);return m.state.next({...!isString(e)||(d.isValid||f.isValid)&&o!==s.isValid?{}:{name:e},...r.resolver||!e?{isValid:o}:{},errors:s.errors}),t.shouldFocus&&!n&&iterateFieldsByAction(a,_focusInput,e?i:l.mount),n},getValues=(e,t)=>{let r={...i.mount?n:o};return t&&(r=extractFormValues(t.dirtyFields?s.dirtyFields:s.touchedFields,r)),isUndefined(e)?r:isString(e)?get(r,e):e.map(e=>get(r,e))},getFieldState=(e,t)=>({invalid:!!get((t||s).errors,e),isDirty:!!get((t||s).dirtyFields,e),error:get((t||s).errors,e),isValidating:!!get(s.validatingFields,e),isTouched:!!get((t||s).touchedFields,e)}),setError=(e,t,r)=>{const o=(get(a,e,{_f:{}})._f||{}).ref,{ref:n,message:i,type:l,...u}=get(s.errors,e)||{};set(s.errors,e,{...u,...t,ref:o}),m.state.next({name:e,errors:s.errors,isValid:!1}),r&&r.shouldFocus&&o&&o.focus&&o.focus()},_subscribe=e=>m.state.subscribe({next:t=>{var r,a,i;r=e.name,a=t.name,i=e.exact,r&&a&&r!==a&&!convertToArrayPayload(r).some(e=>e&&(i?e===a:e.startsWith(a)||a.startsWith(e)))||!((e,t,r,s)=>{r(e);const{name:a,...o}=e;return isEmptyObject(o)||Object.keys(o).length>=Object.keys(t).length||Object.keys(o).find(e=>t[e]===(!s||ye))})(t,e.formState||d,_setFormState,e.reRenderRoot)||e.callback({values:{...n},...s,...t,defaultValues:o})}}).unsubscribe,unregister=(e,t={})=>{for(const i of e?convertToArrayPayload(e):l.mount)l.mount.delete(i),l.array.delete(i),t.keepValue||(unset(a,i),unset(n,i)),!t.keepError&&unset(s.errors,i),!t.keepDirty&&unset(s.dirtyFields,i),!t.keepTouched&&unset(s.touchedFields,i),!t.keepIsValidating&&unset(s.validatingFields,i),!r.shouldUnregister&&!t.keepDefaultValue&&unset(o,i);m.state.next({values:cloneObject(n)}),m.state.next({...s,...t.keepDirty?{isDirty:_getDirty()}:{}}),!t.keepIsValid&&_setValid()},_setDisabledField=({disabled:e,name:t})=>{if(isBoolean(e)&&i.mount||e||l.disabled.has(t)){const r=l.disabled.has(t)!==!!e;e?l.disabled.add(t):l.disabled.delete(t),r&&i.mount&&!i.action&&_setValid()}},register=(e,t={})=>{let s=get(a,e);const n=isBoolean(t.disabled)||isBoolean(r.disabled);return set(a,e,{...s||{},_f:{...s&&s._f?s._f:{ref:{name:e}},name:e,mount:!0,...t}}),l.mount.add(e),s?_setDisabledField({disabled:isBoolean(t.disabled)?t.disabled:r.disabled,name:e}):updateValidAndValue(e,!0,t.value),{...n?{disabled:t.disabled||r.disabled}:{},...r.progressive?{required:!!t.required,min:getRuleValue(t.min),max:getRuleValue(t.max),minLength:getRuleValue(t.minLength),maxLength:getRuleValue(t.maxLength),pattern:getRuleValue(t.pattern)}:{},name:e,onChange:onChange,onBlur:onChange,ref:n=>{if(n){register(e,t),s=get(a,e);const r=isUndefined(n.value)&&n.querySelectorAll&&n.querySelectorAll("input,select,textarea")[0]||n,i=(e=>isRadioInput(e)||isCheckBoxInput(e))(r),l=s._f.refs||[];if(i?l.find(e=>e===r):r===s._f.ref)return;set(a,e,{_f:{...s._f,...i?{refs:[...l.filter(live),r,...Array.isArray(get(o,e))?[{}]:[]],ref:{type:r.type,name:e}}:{ref:r}}}),updateValidAndValue(e,!1,void 0,r)}else s=get(a,e,{}),s._f&&(s._f.mount=!1),(r.shouldUnregister||t.shouldUnregister)&&(!((e,t)=>e.has((e=>e.substring(0,e.search(/\.\d+(\.|$)/))||e)(t)))(l.array,e)||!i.action)&&l.unMount.add(e)}}},_focusError=()=>r.shouldFocusError&&iterateFieldsByAction(a,_focusInput,l.mount),handleSubmit=(e,t)=>async o=>{let i;o&&(o.preventDefault&&o.preventDefault(),o.persist&&o.persist());let u=cloneObject(n);if(m.state.next({isSubmitting:!0}),r.resolver){const{errors:e,values:t}=await _runSchema();_updateIsValidating(),s.errors=e,u=cloneObject(t)}else await executeBuiltInValidation(a);if(l.disabled.size)for(const e of l.disabled)unset(u,e);if(unset(s.errors,"root"),isEmptyObject(s.errors)){m.state.next({errors:{}});try{await e(u,o)}catch(c){i=c}}else t&&await t({...s.errors},o),_focusError(),setTimeout(_focusError);if(m.state.next({isSubmitted:!0,isSubmitting:!1,isSubmitSuccessful:isEmptyObject(s.errors)&&!i,submitCount:s.submitCount+1,errors:s.errors}),i)throw i},_reset=(e,t={})=>{const u=e?cloneObject(e):o,c=cloneObject(u),f=isEmptyObject(e),p=f?o:c;if(t.keepDefaultValues||(o=u),!t.keepValues){if(t.keepDirtyValues){const e=new Set([...l.mount,...Object.keys(getDirtyFields(o,n))]);for(const t of Array.from(e)){const e=get(s.dirtyFields,t),r=get(n,t),a=get(p,t);e&&!isUndefined(r)?set(p,t,r):e||isUndefined(a)||setValue(t,a)}}else{if(ue&&isUndefined(e))for(const e of l.mount){const t=get(a,e);
1if(t&&t._f){const e=Array.isArray(t._f.refs)?t._f.refs[0]:t._f.ref;if(isHTMLElement(e)){const t=e.closest("form");if(t){t.reset();break}}}}if(t.keepFieldsRef)for(const e of l.mount)setValue(e,get(p,e));else a={}}n=r.shouldUnregister?t.keepDefaultValues?cloneObject(o):{}:cloneObject(p),m.array.next({values:{...p}}),m.state.next({values:{...p}})}l={mount:t.keepDirtyValues?l.mount:new Set,unMount:new Set,array:new Set,disabled:new Set,watch:new Set,watchAll:!1,focus:""},i.mount=!d.isValid||!!t.keepIsValid||!!t.keepDirtyValues||!r.shouldUnregister&&!isEmptyObject(p),i.watch=!!r.shouldUnregister,i.keepIsValid=!!t.keepIsValid,i.action=!1,t.keepErrors||(s.errors={}),m.state.next({submitCount:t.keepSubmitCount?s.submitCount:0,isDirty:!f&&(t.keepDirty?s.isDirty:!(!t.keepDefaultValues||deepEqual(e,o))),isSubmitted:!!t.keepIsSubmitted&&s.isSubmitted,dirtyFields:f?{}:t.keepDirtyValues?t.keepDefaultValues&&n?getDirtyFields(o,n):s.dirtyFields:t.keepDefaultValues&&e?getDirtyFields(o,e):t.keepDirty?s.dirtyFields:{},touchedFields:t.keepTouched?s.touchedFields:{},errors:t.keepErrors?s.errors:{},isSubmitSuccessful:!!t.keepIsSubmitSuccessful&&s.isSubmitSuccessful,isSubmitting:!1,defaultValues:o})},reset=(e,t)=>_reset(isFunction(e)?e(n):e,{...r.resetOptions,...t}),_setFormState=e=>{s={...s,...e}},h={control:{register:register,unregister:unregister,getFieldState:getFieldState,handleSubmit:handleSubmit,setError:setError,_subscribe:_subscribe,_runSchema:_runSchema,_updateIsValidating:_updateIsValidating,_focusError:_focusError,_getWatch:_getWatch,_getDirty:_getDirty,_setValid:_setValid,_setFieldArray:(e,t=[],l,u,c=!0,p=!0)=>{if(u&&l&&!r.disabled){if(i.action=!0,p&&Array.isArray(get(a,e))){const t=l(get(a,e),u.argA,u.argB);c&&set(a,e,t)}if(p&&Array.isArray(get(s.errors,e))){const t=l(get(s.errors,e),u.argA,u.argB);c&&set(s.errors,e,t),((e,t)=>{!compact(get(e,t)).length&&unset(e,t)})(s.errors,e)}if((d.touchedFields||f.touchedFields)&&p&&Array.isArray(get(s.touchedFields,e))){const t=l(get(s.touchedFields,e),u.argA,u.argB);c&&set(s.touchedFields,e,t)}(d.dirtyFields||f.dirtyFields)&&(s.dirtyFields=getDirtyFields(o,n)),m.state.next({name:e,isDirty:_getDirty(e,t),dirtyFields:s.dirtyFields,errors:s.errors,isValid:s.isValid})}else set(n,e,t)},_setDisabledField:_setDisabledField,_setErrors:e=>{s.errors=e,m.state.next({errors:s.errors,isValid:!1})},_getFieldArray:e=>compact(get(i.mount?n:o,e,r.shouldUnregister?get(o,e,[]):[])),_reset:_reset,_resetDefaultValues:()=>isFunction(r.defaultValues)&&r.defaultValues().then(e=>{reset(e,r.resetOptions),m.state.next({isLoading:!1})}),_removeUnmounted:()=>{for(const e of l.unMount){const t=get(a,e);t&&(t._f.refs?t._f.refs.every(e=>!live(e)):!live(t._f.ref))&&unregister(e)}l.unMount=new Set},_disableForm:e=>{isBoolean(e)&&(m.state.next({disabled:e}),iterateFieldsByAction(a,(t,r)=>{const s=get(a,r);s&&(t.disabled=s._f.disabled||e,Array.isArray(s._f.refs)&&s._f.refs.forEach(t=>{t.disabled=s._f.disabled||e}))},0,!1))},_subjects:m,_proxyFormState:d,get _fields(){return a},get _formValues(){return n},get _state(){return i},set _state(e){i=e},get _defaultValues(){return o},get _names(){return l},set _names(e){l=e},get _formState(){return s},get _options(){return r},set _options(e){r={...r,...e}}},subscribe:e=>(i.mount=!0,f={...f,...e.formState},_subscribe({...e,formState:{...c,...e.formState}})),trigger:trigger,register:register,handleSubmit:handleSubmit,watch:(e,t)=>isFunction(e)?m.state.subscribe({next:r=>"values"in r&&e(_getWatch(void 0,t),r)}):_getWatch(e,t,!0),setValue:setValue,getValues:getValues,reset:reset,resetField:(e,t={})=>{get(a,e)&&(isUndefined(t.defaultValue)?setValue(e,cloneObject(get(o,e))):(setValue(e,t.defaultValue),set(o,e,cloneObject(t.defaultValue))),t.keepTouched||unset(s.touchedFields,e),t.keepDirty||(unset(s.dirtyFields,e),s.isDirty=t.defaultValue?_getDirty(e,cloneObject(get(o,e))):_getDirty()),t.keepError||(unset(s.errors,e),d.isValid&&_setValid()),m.state.next({...s}))},clearErrors:e=>{const t=e?convertToArrayPayload(e):void 0;null==t||t.forEach(e=>unset(s.errors,e)),t?t.forEach(e=>{m.state.next({name:e,errors:s.errors})}):m.state.next({errors:{}})},unregister:unregister,setError:setError,setFocus:(e,t={})=>{const r=get(a,e),s=r&&r._f;if(s){const e=s.refs?s.refs[0]:s.ref;e.focus&&setTimeout(()=>{e.focus(),t.shouldSelect&&isFunction(e.select)&&e.select()})}},getFieldState:getFieldState};return{...h,formControl:h}}function useForm(e={}){const t=ie.useRef(void 0),r=ie.useRef(void 0),[s,a]=ie.useState({isDirty:!1,isValidating:!1,isLoading:isFunction(e.defaultValues),isSubmitted:!1,isSubmitting:!1,isSubmitSuccessful:!1,isValid:!1,submitCount:0,dirtyFields:{},touchedFields:{},validatingFields:{},errors:e.errors||{},disabled:e.disabled||!1,isReady:!1,defaultValues:isFunction(e.defaultValues)?void 0:e.defaultValues});if(!t.current)if(e.formControl)t.current={...e.formControl,formState:s},e.defaultValues&&!isFunction(e.defaultValues)&&e.formControl.reset(e.defaultValues,e.resetOptions);else{const{formControl:r,...a}=createFormControl(e);t.current={...a,formState:s}}const o=t.current.control;return o._options=e,Ce(()=>{const e=o._subscribe({formState:o._proxyFormState,callback:()=>a({...o._formState}
1),reRenderRoot:!0});return a(e=>({...e,isReady:!0})),o._formState.isReady=!0,e},[o]),ie.useEffect(()=>o._disableForm(e.disabled),[o,e.disabled]),ie.useEffect(()=>{e.mode&&(o._options.mode=e.mode),e.reValidateMode&&(o._options.reValidateMode=e.reValidateMode)},[o,e.mode,e.reValidateMode]),ie.useEffect(()=>{e.errors&&(o._setErrors(e.errors),o._focusError())},[o,e.errors]),ie.useEffect(()=>{e.shouldUnregister&&o._subjects.state.next({values:o._getWatch()})},[o,e.shouldUnregister]),ie.useEffect(()=>{if(o._proxyFormState.isDirty){const e=o._getDirty();e!==s.isDirty&&o._subjects.state.next({isDirty:e})}},[o,s.isDirty]),ie.useEffect(()=>{var t;e.values&&!deepEqual(e.values,r.current)?(o._reset(e.values,{keepFieldsRef:!0,...o._options.resetOptions}),(null===(t=o._options.resetOptions)||void 0===t?void 0:t.keepIsValid)||o._setValid(),r.current=e.values,a(e=>({...e}))):o._resetDefaultValues()},[o,e.values]),ie.useEffect(()=>{o._state.mount||(o._setValid(),o._state.mount=!0),o._state.watch&&(o._state.watch=!1,o._subjects.state.next({...o._formState})),o._removeUnmounted()}),t.current.formState=ie.useMemo(()=>((e,t,r,s=!0)=>{const a={defaultValues:t._defaultValues};for(const o in e)Object.defineProperty(a,o,{get:()=>{const a=o;return t._proxyFormState[a]!==ye&&(t._proxyFormState[a]=!s||ye),r&&(r[a]=!0),e[a]}});return a})(s,o),[o,s]),t.current}function parseRateLimit(e,t){if(429!==e)return;const r=t?.errors;if("rate-limit-exceeded"!==r?.type)return;const s=Number(r.retryAfterSeconds);return{retryAfterSeconds:Number.isFinite(s)&&s>0?Math.ceil(s):900}}function formatRetryWait(e){const t=Math.max(0,Math.ceil(e)),r=Math.floor(t/60),s=t%60;return r>0&&s>0?`${r}m ${s}s`:r>0?`${r}m`:`${s}s`}function computeThrottleState(e,t){if(null==e)return{isThrottled:!1,secondsRemaining:0,formatted:formatRetryWait(0)};const r=function remainingSeconds(e,t){return Math.max(0,Math.ceil((e-t)/1e3))}(e,t),s=formatRetryWait(r),a=r>0;return{isThrottled:a,secondsRemaining:r,formatted:s,message:a?(o=s,`Too many codes requested. Please try again in ${o}.`):void 0};var o}function useRetryCountdown(){const[e,t]=(0,ie.useState)(null),[r,s]=(0,ie.useState)(()=>Date.now());(0,ie.useEffect)(()=>{if(null==e)return;s(Date.now());const t=setInterval(()=>s(Date.now()),1e3);return()=>clearInterval(t)},[e]);const a=computeThrottleState(e,r);(0,ie.useEffect)(()=>{null==e||a.isThrottled||t(null)},[e,a.isThrottled]);const o=(0,ie.useCallback)(e=>{t(Date.now()+1e3*Math.max(0,e.retryAfterSeconds))},[]),n=(0,ie.useCallback)(()=>t(null),[]);return{...a,start:o,reset:n}}var Ne={invalid:"Incorrect code. Please try again.",expired:"That code has expired. Please request a new one.","too-many-attempts":"Too many attempts. Please request a new code."};function getCodeErrorMessage(e){const t=e?.errors;if(t)return function isCodeErrorReason(e){return"invalid"===e||"expired"===e||"too-many-attempts"===e}(t.reason)?Ne[t.reason]:t.fields?.code?"That code is invalid or expired. Please try again.":void 0}async function requestLoginCode(e,t){const r=await fetch(`${h.apiUrl}/loginCodes`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:e,"turnstile-response":h.turnstile.enabled?t:"empty"})});if(r.ok){const e=await r.json().catch(()=>{});return{ok:!0,isNewUser:"boolean"==typeof e?.isNewUser?e.isNewUser:void 0}}const s=await r.json().catch(()=>{});return{ok:!1,rateLimit:parseRateLimit(r.status,s)}}function useCodeSender(e,{sendOnMount:t=!1}={}){const r=useRetryCountdown(),s=(0,ie.useRef)(null),a=(0,ie.useRef)(t&&h.turnstile.enabled),o=(0,ie.useCallback)(async t=>{const s=await requestLoginCode(e,t);!s.ok&&s.rateLimit&&r.start(s.rateLimit)},[e,r]),n=(0,ie.useCallback)(()=>{r.isThrottled||(h.turnstile.enabled?(a.current=!0,s.current?.reset()):o(void 0))},[r.isThrottled,o]),i=(0,ie.useCallback)(e=>{a.current&&(a.current=!1,o(e))},[o]);return(0,ie.useEffect)(()=>{t&&!h.turnstile.enabled&&o(void 0)},[]),{throttle:r,turnstileRef:s,requestCode:n,onTurnstileSuccess:i}}function CodeForm({title:e,subtitle:t,submitLabel:r,buildAnalytics:s,onVerified:a}){const{email:o}=useAuthFlow(),{register:c,handleSubmit:d,setError:f,formState:{errors:m}}=useForm(),[p,y]=(0,ie.useState)(!1),{throttle:g,turnstileRef:w,requestCode:v,onTurnstileSuccess:b}=useCodeSender(o);return i(l,{children:[i("div",{className:"w-full md:mt-[24px]",children:[n("div",{className:"px-l text-center text-[24px] leading-6 font-bold",children:e}),n("div",{className:"mt-l text-center text-[13px] font-semibold text-white/50",children:t})]}),n("form",{className:"mt-l flex w-full flex-col gap-[24px]",onSubmit:u(d(async({code:e})=>{y(!0);try{const t=await async function verifyLoginCode(e){const t=await fetch(`${h.apiUrl}/loginCodes/verify`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:e.email,code:e.code,metadata:e.metadata??{},analytics:e.analytics})});if(t.ok){const e=await t.json();return{ok:!0,authToken:e.authToken,user:e.user,isNewUser:!!e.isNewUser}}
1try{const e=getCodeErrorMessage(await t.json());if(e)return{ok:!1,codeError:e}}catch{}return{ok:!1,genericError:"Something went wrong. Please try again."}}({email:o,code:e,analytics:s?.()});t.ok?await a(t):f("code",{message:t.codeError??t.genericError??"Something went wrong."})}finally{y(!1)}})),children:i("div",{className:"w-full",children:[i("div",{children:[n(TextInput,{placeholder:"6-digit code",maxLength:6,inputMode:"numeric",autoComplete:"one-time-code",...c("code",{required:{value:!0,message:"Please enter your code"}})}),n(FormErrorMessage,{message:m.code?.message})]}),n(HiddenTurnstile,{id:"turnstile-auth-code",turnstileRef:w,onSuccess:b}),n(z,{type:"submit",color:"yellow",className:"mt-[24px] h-[56px] w-full text-[18px] font-semibold",disabled:p,loading:p,children:r}),n("div",{className:"mt-l text-[16px] text-white/50",children:"Didn't receive the email? "}),n("div",{className:"mt-s text-[16px]",children:n("button",{type:"button",onClick:v,disabled:g.isThrottled,className:"cursor-pointer border-none bg-transparent p-0 text-[#ACACAE] underline hover:underline disabled:cursor-not-allowed disabled:text-[#ACACAC] disabled:no-underline",children:"Resend it"})}),n(FormErrorMessage,{message:g.message??void 0})]})})]})}function CodeLoginStep(){const{email:e,planContext:t}=useAuthFlow();return n(CodeForm,{title:"Please enter the 6-digit code we sent to you.",subtitle:n(l,{children:e}),submitLabel:"Log In",onVerified:e=>{persistAuthSession(e.user,e.authToken),navigateAfterLogin(e.authToken,t)}})}var Te="authFlow:country";async function fetchCountryCode(){try{const e=sessionStorage.getItem(Te);if(e)return e}catch{}try{const e=await(await fetch("https://ipinfo.io/json")).json();if(e?.country){try{sessionStorage.setItem(Te,e.country)}catch{}return e.country}}catch(e){console.warn("Failed to resolve country code for auth flow",e)}}function isUsCountry(e){return"US"===e}function CodeSignupStep(){const{email:e,continueAfterAccountCreation:t}=useAuthFlow();return n(CodeForm,{title:"Please enter the 6-digit code we sent to you.",subtitle:n(l,{children:e}),submitLabel:"Sign Up",buildAnalytics:()=>y({eventAction:x.UserSignUp,eventName:"Account created with email login code."}),onVerified:async e=>{persistAuthSession(e.user,e.authToken),await recordAcceptancePreferences(e.authToken);const r=isUsCountry(await fetchCountryCode());await setEmailMarketingAccepted(e.authToken,r),r&&await b.trackEventImmediately(m.marketingEmailConsentChanged({consent:!0,context:g.Auth,method:v.Automatic})),b.trackEvent(m.newAccountSignUp({context:w.SignupPage,newsletter:r})),b.trackGoogleEvent(m.conversion(1)),t()}})}const SocialLoginButton=({onClick:e,icon:t,children:r})=>i("button",{onClick:e,className:"flex h-[56px] w-full cursor-pointer items-center justify-center gap-[8px] rounded-[15px] bg-white/10 text-[16px] font-semibold transition-all duration-100 hover:bg-white/15",children:[t,r]});var GoogleLoginButtonInner=({onSuccess:e=e=>console.log(e),text:t})=>{const r=ee({onSuccess:e});return n(SocialLoginButton,{onClick:()=>r(),icon:n(ae,{}),children:t})};const GoogleLoginButton=e=>n(se,{clientId:h.googleOAuth.clientId,children:n(GoogleLoginButtonInner,{...e})}),Divider=({className:e=""})=>n("div",{className:`h-[1px] min-h-[1px] w-full bg-white/10 ${e}`}),OrDivider=()=>i("div",{className:"flex w-full flex-row items-center",children:[n("div",{className:"relative h-[1px] w-full bg-white/10"}),n("div",{className:"p-l text-[13px] font-semibold text-white/50",children:"OR"}),n("div",{className:"relative h-[1px] w-full bg-white/10"})]}),Pe=/^[^\s@]+@[^\s@]+\.[^\s@]+$/;var Oe="Something went wrong. Please try again.";function EmailStep(){const{setEmail:e,goToStep:t,planContext:r,continueAfterAccountCreation:s}=useAuthFlow(),{register:a,handleSubmit:o,formState:{errors:c}}=useForm(),[d,f]=(0,ie.useState)(!1),[y,x]=(0,ie.useState)(null),[S,k]=(0,ie.useState)(!h.turnstile.enabled),C=useRetryCountdown(),A=(0,ie.useRef)(null),F=(0,ie.useRef)(void 0),V=(0,ie.useRef)([]),clearTurnstileToken=()=>{F.current=void 0,k(!h.turnstile.enabled)},takeTurnstileToken=()=>{if(!h.turnstile.enabled)return Promise.resolve(void 0);const e=F.current;return e?(F.current=void 0,k(!1),A.current?.reset(),Promise.resolve(e)):new Promise(e=>{V.current.push(e),window.setTimeout(()=>e(void 0),2e4)})},E=h.turnstile.enabled&&!S,onGoogleSuccess=async e=>{x(null);const t=await async function googleSignupOrLogin(e){const t=Y(),r=await fetch(`${h.apiUrl}/oauth/signup`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:"google",accessToken:e,metadata:t,analytics:{marketingConsent:!1}})});if(!r.ok)return{ok:!1};const s=await r.json();return{ok:!0,isNewUser:!!s.isNewUser,authToken:s.authToken,user:s.user}}(e);if(t.ok&&t.authToken&&t.user)if(persistAuthSession(t.user,t.authToken),O({type:t.isNewUser?P.Signup:P.Login,method:_.Google}),t.isNewUser){await recordAcceptancePreferences(t.authToken);const e=isUsCountry(await fetchCountryCode());await setEmailMarketingAccepted(t.authToken,e),e&&await b.trackEventImmediately(m.marketingEmailConsentChanged({consent:!0,context:g.Auth,method:v.Automatic})),await b.trackEventImmediately(m.newAccountSignUp({context:w.GoogleAuth,newsletter:e})),b.trackGoogleEvent(m.conversion(1)),s()}else await b.trackEventImmediately(m.userLogIn(p.GoogleAuth)),await navigateAfterLogin(t.authToken,r);else x("We could not sign you in with Google. Please try again.")};return i(l,{children:[n(X,{className:"mb-3xl !px-0",children:n("div",{className:"text-center text-[24px] font-bold",children:"Welcome to Inkarnate!"})}),n(X,{className:"!px-0",children:n(GoogleLoginButton,{text:n(l,{children:n("span",{children:"Continue with Google"})}),onSuccess:e=>{onGoogleSuccess(e.access_token)}})}),n(OrDivider,{}),i("form",{className:"flex w-full flex-col gap-[24px]",onSubmit:u(o(async({email:r})=>{if(!C.isThrottled&&!E){f(!0),x(null),e(r);try{const e=await async function resolveEmail(e,t){const r=await fetch(`${h.apiUrl}/auth/resolve`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:e,"turnstile-response":h.turnstile.enabled?t:"empty"})});if(r.ok){const e=await r.json().catch(()=>({}));return{ok:!0,nextStep:"password"===e.nextStep?"password":"code-login"===e.nextStep?"code-login":"code-signup"}}const s=await r.json().catch(()=>{});return{ok:!1,rateLimit:parseRateLimit(r.status,s)}}(r,await takeTurnstileToken());if(!e.ok)return void(e.rateLimit?C.start(e.rateLimit):x(Oe));if("password"===e.nextStep)return O({type:P.Login,method:_.Email}),void t(D.Password);const s=await requestLoginCode(r,await takeTurnstileToken());if(!s.ok)return void(s.rateLimit?C.start(s.rateLimit):x(Oe));const a=s.isNewUser??"code-signup"===e.nextStep;
1O({type:a?P.Signup:P.Login,method:_.Email}),t(a?D.CodeSignup:D.CodeLogin)}finally{f(!1)}}})),children:[i(X,{className:"!px-0",children:[i("div",{className:"block pb-[12px]",children:[n(TextInput,{placeholder:"Email",maxLength:100,...a("email",{required:{value:!0,message:"Please enter your email"},pattern:{value:Pe,message:"Please enter a valid email"}})}),n(FormErrorMessage,{message:c.email?.message})]}),n(HiddenTurnstile,{id:"turnstile-auth-email",turnstileRef:A,onSuccess:e=>{const t=V.current;V.current=[],t.length>0?t.forEach(t=>t(e)):F.current=e,k(!0)},onExpire:clearTurnstileToken,onError:clearTurnstileToken}),n(z,{type:"submit",color:"yellow",className:"mt-[12px] h-[56px] w-full text-[18px] font-semibold",disabled:d||C.isThrottled||E,loading:d||E&&!C.isThrottled,children:"Continue"}),n(FormErrorMessage,{message:C.message??y??void 0})]}),n(X,{className:"!px-0",children:i("div",{className:"text-[13px] text-white/50",children:["By clicking âContinue with Googleâ or âContinueâ, you agree to our"," ",n("a",{href:"/terms",className:"font-bold underline",children:"Terms of Service"})," ","and acknowledge the"," ",n("a",{href:"/privacy",className:"font-bold underline",children:"Privacy Policy"}),"."]})})]})]})}function ForgotPasswordCodeStep(){const{email:e,setResetCode:t,goToStep:r}=useAuthFlow(),{register:s,handleSubmit:a,formState:{errors:o}}=useForm(),{throttle:c,turnstileRef:d,requestCode:f,onTurnstileSuccess:m}=useCodeSender(e,{sendOnMount:!0});return i(l,{children:[i(X,{className:"md:mt-[24px]",children:[n("div",{className:"text-center text-[24px] font-bold",children:"Reset your password"}),i("div",{className:"mt-[16px] text-center text-[13px] text-[#ACACAC]",children:["Enter the 6-digit code we sent to ",n("span",{className:"text-white",children:e}),"."]})]}),n(Divider,{className:"my-[16px]"}),n("form",{className:"flex w-full flex-col gap-[24px]",onSubmit:u(a(({code:e})=>{t(e),r(D.ResetPassword)})),children:i(X,{className:"flex flex-col gap-[16px]",children:[i("div",{children:[n(TextInput,{placeholder:"6-digit code",maxLength:6,inputMode:"numeric",autoComplete:"one-time-code",...s("code",{required:{value:!0,message:"Please enter your code"}})}),n(FormErrorMessage,{message:o.code?.message})]}),n(HiddenTurnstile,{id:"turnstile-reset-code",turnstileRef:d,onSuccess:m}),n(z,{type:"submit",color:"yellow",className:"h-[56px] w-full text-[18px] font-semibold",disabled:c.isThrottled,children:"Continue"}),i("div",{className:"mt-[16px] text-center text-[13px] text-[#ACACAC]",children:["Didn't get a code?"," ",n("button",{type:"button",onClick:f,disabled:c.isThrottled,className:"cursor-pointer border-none bg-transparent p-0 text-yellow hover:text-yellow-hover hover:underline disabled:cursor-not-allowed disabled:text-[#ACACAC] disabled:no-underline",children:"Resend it"})]}),n(FormErrorMessage,{message:c.message??void 0})]})})]})}function PasswordStep(){const{email:e,goToStep:t,planContext:r}=useAuthFlow(),{register:s,handleSubmit:a,setError:o,formState:{errors:c}}=useForm(),[d,f]=(0,ie.useState)(!1);return i(l,{children:[i(X,{className:"md:mt-[24px]",children:[n("div",{className:"text-center text-[24px] font-bold",children:"Welcome back!"}),i("div",{className:"mt-[16px] text-center text-[13px] text-[#ACACAC]",children:["Enter the password for ",n("span",{className:"text-white",children:e}),"."]})]}),n(Divider,{className:"my-[16px]"}),n("form",{className:"flex w-full flex-col gap-[24px]",onSubmit:u(a(async({password:t})=>{f(!0);try{const s=await fetch(`${h.apiUrl}/tokens`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:e,password:t})}),a=await s.json().catch(()=>{});if(s.ok&&a?.authToken)return b.trackEvent(m.userLogIn(p.LoginPage)),persistAuthSession(a.user,a.authToken),void(await navigateAfterLogin(a.authToken,r));const n=a?.errors;"authentication-failure"===n?.type&&"google"===n.requiredProvider?o("password",{message:"Your account was registered with Google. Please use it to log in."}):o("password",{message:"Incorrect password"})}finally{f(!1)}})),children:i(X,{children:[i("div",{children:[n(TextInput,{type:"password",placeholder:"Password",maxLength:100,...s("password",{required:{value:!0,message:"Please enter your password"}})}),n(FormErrorMessage,{message:c.password?.message})]}),n("div",{className:"mt-[16px] text-right text-[13px]",children:n("button",{type:"button",onClick:()=>{O({type:P.PasswordReset}),t(D.ForgotPasswordCode)},className:"cursor-pointer border-none bg-transparent p-0 text-yellow hover:text-yellow-hover hover:underline",children:"Forgot password?"})}),n(z,{type:"submit",color:"yellow",className:"mt-[16px] h-[56px] w-full text-[18px] font-semibold",disabled:d,loading:d,children:"Log In"})]})})]})}function ResetPasswordStep(){const{email:e,resetCode:t,planContext:r}=useAuthFlow(),{register:s,handleSubmit:a,setError:o,watch:c,formState:{errors:d}}=useForm(),[f,m]=(0,ie.useState)(!1);return i(l,{children:[i(X,{className:"md:mt-[24px]",children:[n("div",{className:"text-center text-[24px] font-bold",children:"Reset your password"}),i("div",{className:"mt-[16px] text-center text-[13px] text-[#ACACAC]",children:["Choose a new password for ",n("span",{className:"text-white",children:e}),"."]})]}),n(Divider,{className:"my-[16px]"}),n("form",{className:"flex w-full flex-col gap-[24px]",onSubmit:u(a(async({password:s})=>{m(!0);try{const a=await async function completePasswordReset(e){const t=await fetch(`${h.apiUrl}/passwordResets/code/complete`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(t.ok){const e=await t.json();return{ok:!0,authToken:e.authToken,user:e.user}}
1try{const e=getCodeErrorMessage(await t.json());if(e)return{ok:!1,codeError:e}}catch{}return{ok:!1,genericError:"Something went wrong. Please try again."}}({email:e,code:t,password:s});if(a.ok)return persistAuthSession(a.user,a.authToken),void(await navigateAfterLogin(a.authToken,r));o("password",{message:a.codeError??a.genericError??"Something went wrong."})}finally{m(!1)}})),children:i(X,{className:"flex flex-col gap-[16px]",children:[i("div",{children:[n(TextInput,{type:"password",placeholder:"New password",maxLength:100,autoComplete:"new-password",...s("password",{required:{value:!0,message:"Please enter a new password"},minLength:{value:8,message:"Password needs to be 8 characters long"}})}),n(FormErrorMessage,{message:d.password?.message})]}),i("div",{children:[n(TextInput,{type:"password",placeholder:"Confirm password",maxLength:100,autoComplete:"new-password",...s("confirmPassword",{required:{value:!0,message:"Please confirm your password"},validate:e=>e===c("password")||"Passwords don't match"})}),n(FormErrorMessage,{message:d.confirmPassword?.message})]}),n(z,{type:"submit",color:"yellow",className:"h-[56px] w-full text-[18px] font-semibold",disabled:f,loading:f,children:"Set Password"})]})})]})}var Le="auth-flow-open";function useLockAuthFlowScroll(){(0,ie.useEffect)(()=>{const{body:e,documentElement:t}=document,r=window.scrollY;t.classList.add(Le);const s=document.querySelector('meta[name="viewport"]'),a=s?.getAttribute("content");s&&a&&!a.includes("interactive-widget")&&s.setAttribute("content",`${a}, interactive-widget=overlays-content`),e.style.position="fixed",e.style.top=`-${r}px`,e.style.left="0",e.style.right="0",e.style.overflow="hidden";let o=0;const waitForOverlay=()=>{(()=>{const e=document.querySelector(".auth-flow-modal-overlay"),t=document.querySelector(".auth-flow-modal-content");return!!e&&(e.style.top="",e.style.left="",e.style.width="",e.style.height="",t&&(t.style.height="",t.style.maxHeight=""),window.scrollTo(0,0),!0)})()||(o=requestAnimationFrame(waitForOverlay))};waitForOverlay();const keepDocumentStill=()=>{window.scrollTo(0,0)},n=window.visualViewport;return n?.addEventListener("resize",keepDocumentStill),n?.addEventListener("scroll",keepDocumentStill),window.addEventListener("scroll",keepDocumentStill),()=>{cancelAnimationFrame(o),t.classList.remove(Le),s&&a&&s.setAttribute("content",a),e.style.position="",e.style.top="",e.style.left="",e.style.right="",e.style.overflow="",n?.removeEventListener("resize",keepDocumentStill),n?.removeEventListener("scroll",keepDocumentStill),window.removeEventListener("scroll",keepDocumentStill),window.scrollTo(0,r)}},[])}var je={[D.Email]:V.Email,[D.Password]:V.Password,[D.CodeLogin]:V.CodeLogin,[D.CodeSignup]:V.CodeSignup,[D.ForgotPasswordCode]:V.ForgotPasswordCode,[D.ResetPassword]:V.ResetPassword};var De="authMaps",Re={bm:"auth-flow-modal-content--map auth-flow-modal-content--map-bm",wm:"auth-flow-modal-content--map auth-flow-modal-content--map-wm"};function SpaBundlePrefetch(){const[e,t]=(0,ie.useState)(!1);return(0,ie.useEffect)(()=>{if("function"==typeof requestIdleCallback){const e=requestIdleCallback(()=>t(!0));return()=>cancelIdleCallback(e)}const e=window.setTimeout(()=>t(!0),1500);return()=>window.clearTimeout(e)},[]),e?n(o,{page:c.onboarding}):null}function AuthFlowSteps(){const[e]=s(),{email:t,resetCode:r,goToStep:a,goHome:o}=useAuthFlow();useLockAuthFlowScroll();const l=f(De);(0,ie.useEffect)(()=>{b.activateExperiment(De,l)},[l]);const u=e.get("step"),c=U(u)?u:j;!function useTrackAuthStepViewed(e,t,r){(0,ie.useEffect)(()=>{R.has(e)&&!t||I.has(e)&&!r||b.trackEvent(m.authStepViewed(N(je[e])))},[e,t,r])}(c,t,r),(0,ie.useEffect)(()=>{!R.has(c)||t?I.has(c)&&!r&&a(D.ForgotPasswordCode):a(D.Email)},[c,t,r,a]);return i(Q,{isOpen:!0,onRequestClose:o,className:`auth-flow-modal-content ${Re[l]??""}`.trim(),overlayClassName:"auth-flow-modal-overlay",shouldCloseOnOverlayClick:!1,children:[n("button",{type:"button",onClick:o,"aria-label":"Go to Inkarnate home",className:"fixed top-[16px] left-[16px] z-[101] hidden cursor-pointer md:block",children:n("img",{src:"/landing/inkarnate-logo.svg",alt:"Inkarnate Logo",width:129,height:22,className:"h-4 w-auto brightness-0 invert md:h-[22px]"})}),n("div",{className:"flex h-full min-h-0 w-full flex-col items-center overflow-hidden overscroll-none pt-xl pb-6 md:overflow-y-auto md:py-0",children:n("div",{className:"w-full max-w-[413px] md:my-auto md:py-6",children:(()=>{switch(c){case D.Password:return n(PasswordStep,{});case D.CodeLogin:return n(CodeLoginStep,{});case D.CodeSignup:return n(CodeSignupStep,{});case D.ForgotPasswordCode:return n(ForgotPasswordCodeStep,{});case D.ResetPassword:return n(ResetPasswordStep,{});case D.Email:default:return n(EmailStep,{})}})()})})]})}function AuthFlow(){return i(AuthFlowProvider,{children:[n(AuthFlowSteps,{}),n(SpaBundlePrefetch,{})]})}var Ue=a(function AuthFlowPage(){return n(AuthFlow,{})});
1export{Ue as default}; 2//# sourceMappingURL=auth-BduZtvW0.js.map
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.