PageSourceSearch

https://platform.unago.ai/assets/ForgotPasswordWizard-DTlv4mUJ.js

js unago.ai collected 2026-10-05 13:11:42 UTC 16,500 bytes, 1 lines download raw bytes

1import{o as J}from"./rolldown-runtime-ChpBd9eV.js";import{a as Q,n as X}from"./vendor-react-DcWoBPJp.js";import{Bo as I,Ha as Z,Ho as W,Li as ee,Ls as z,Ps as H,Ua as te,_ as se,g as k,ir as ae,pi as D,ui as K}from"./vendor-ui-hcrcJjHJ.js";import{l as re,u as ie}from"./chunk-QUQL4437-DKXSrjJr.js";import{o as y}from"./authErrors-BJPPLK2J.js";import{o as F}from"./AuthService-RwBp9Rl0.js";import{b as ne,x as oe}from"./index-CL2aAkkR.js";import{n as le,t as de}from"./passwordValidation-BOY4dEnH.js";var r=J(Q(),1),e=X(),ce={step:"email",email:null,resetToken:null};function Ce(){const s=ie(),a=re().state?.email,o=typeof a=="string"?a:"",[t,d]=(0,r.useState)(ce),f=(0,r.useCallback)(c=>{y.info("Email submitted, advancing to verification"),d(i=>({...i,email:c,step:"verify"}))},[]),g=(0,r.useCallback)(c=>{y.info("Code verified, advancing to password reset"),d(i=>({...i,resetToken:c,step:"reset"}))},[]),p=(0,r.useCallback)(()=>{y.info("Password reset successful"),d(c=>({...c,step:"success"}))},[]),x=(0,r.useCallback)(()=>{d(c=>{switch(c.step){case"verify":return{...c,step:"email"};case"reset":return{...c,step:"verify"};default:return c}})},[]),b=(0,r.useCallback)(()=>s("/login"),[s]);return(0,e.jsx)(oe,{left:(0,e.jsx)("div",{className:"w-full",role:"main","aria-label":"Password reset wizard","data-testid":"forgot-password-wizard-container",children:(0,e.jsx)("div",{role:"region","aria-label":"Password reset step",children:(0,e.jsxs)(se,{mode:"wait",children:[t.step==="email"&&(0,e.jsx)(P,{children:(0,e.jsx)(ue,{initialEmail:o,onComplete:f,onNavigateToLogin:b})},"email"),t.step==="verify"&&t.email&&(0,e.jsx)(P,{children:(0,e.jsx)(fe,{email:t.email,onComplete:g,onBack:x,onResend:async()=>{t.email&&await F.initiate(t.email)}})},"verify"),t.step==="reset"&&t.resetToken&&(0,e.jsx)(P,{children:(0,e.jsx)(me,{resetToken:t.resetToken,onComplete:p,onBack:x})},"reset"),t.step==="success"&&(0,e.jsx)(P,{children:(0,e.jsx)(xe,{onNavigateToLogin:b})},"success")]})})}),right:(0,e.jsx)(ne,{})})}function ue({initialEmail:s,onComplete:a,onNavigateToLogin:o}){const[t,d]=(0,r.useState)(s),[f,g]=(0,r.useState)(!1),[p,x]=(0,r.useState)(""),b=i=>/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(i),c=(0,r.useCallback)(async i=>{if(i.preventDefault(),!t.trim()){x("Email is required");return}if(!b(t)){x("Please enter a valid email address");return}g(!0),x("");try{await F.initiate(t.trim().toLowerCase()),a(t.trim().toLowerCase())}catch(m){y.error("Password reset initiation failed:",m),x(m instanceof Error?m.message:"Failed to send reset code. Please try again.")}finally{g(!1)}},[t,a]);return(0,e.jsxs)(R,{testId:"email-entry-step",children:[(0,e.jsx)(V,{icon:ee}),(0,e.jsx)(L,{children:"Forgot Password?"}),(0,e.jsx)(q,{children:"Enter your email address and we'll send you a verification code to reset your password."}),p&&(0,e.jsx)(S,{tone:"error",message:p}),(0,e.jsxs)("form",{onSubmit:c,className:"flex flex-col gap-6","aria-label":"Email entry form",children:[(0,e.jsx)(A,{label:"Email Address",htmlFor:"email",children:(0,e.jsx)(B,{icon:K,id:"email",type:"email",value:t,onChange:i=>{d(i.target.value),p&&x("")},placeholder:"Enter your email address",autoComplete:"email",required:!0,"aria-required":"true",disabled:f,"data-testid":"forgot-password-email-input"})}),(0,e.jsxs)("div",{className:"flex flex-col gap-3 items-center pb-2",children:[(0,e.jsxs)(T,{type:"submit",loading:f,loadingText:"Sending code...",disabled:f||!t.trim(),"data-testid":"forgot-password-submit-button",children:["Send Reset Code",(0,e.jsx)(H,{className:"h-4 w-4","aria-hidden":"true"})]}),(0,e.jsxs)("button",{type:"button",onClick:o,className:"inline-flex items-center gap-1.5 font-inter-tight text-[14px] font-medium leading-[1.3] tracking-[0.14px] text-[#211F1E] hover:underline focus:outline-none transition-opacity","data-testid":"forgot-password-back-to-login",children:[(0,e.jsx)(z,{className:"h-4 w-4","aria-hidden":"true"}),"Back to Sign in"]})]})]})]})}function fe({email:s,onComplete:a,onBack:o,onResend:t}){const[d,f]=(0,r.useState)(["","","","","",""]),[g,p]=(0,r.useState)(!1),[x,b]=(0,r.useState)(!1),[c,i]=(0,r.useState)(""),[m,j]=(0,r.useState)(0),[w,C]=(0,r.useState)(!1),u=(0,r.useRef)([]);(0,r.useEffect)(()=>
1{u.current[0]?.focus()},[]),(0,r.useEffect)(()=>{if(m>0){const n=setTimeout(()=>j(l=>l-1),1e3);return()=>clearTimeout(n)}},[m]);const E=(0,r.useCallback)((n,l)=>{const h=l.replace(/\D/g,"").slice(-1);f(v=>{const _=[...v];return _[n]=h,_}),c&&i(""),h&&n<5&&u.current[n+1]?.focus()},[c]),N=(0,r.useCallback)((n,l)=>{l.key==="Backspace"&&!d[n]&&n>0&&u.current[n-1]?.focus(),l.key==="ArrowLeft"&&n>0&&u.current[n-1]?.focus(),l.key==="ArrowRight"&&n<5&&u.current[n+1]?.focus()},[d]),U=(0,r.useCallback)(n=>{n.preventDefault();const l=n.clipboardData.getData("text").replace(/\D/g,"").slice(0,6);if(l.length>0){const h=[...d];for(let v=0;v<6;v++)h[v]=l[v]||"";f(h),u.current[Math.min(l.length,5)]?.focus()}},[d]),$=(0,r.useCallback)(async()=>{const n=d.join("");if(n.length!==6){i("Please enter the complete 6-digit code");return}p(!0),i("");try{a((await F.verify(s,n)).resetToken)}catch(l){y.error("Code verification failed:",l),i(l instanceof Error?l.message:"Verification failed. Please try again."),f(["","","","","",""]),u.current[0]?.focus()}finally{p(!1)}},[d,s,a]),Y=(0,r.useCallback)(async()=>{if(!(m>0)){b(!0),i(""),C(!1);try{await t(),j(60),C(!0),setTimeout(()=>C(!1),3e3)}catch(n){y.error("Failed to resend code:",n),i("Failed to resend code. Please try again.")}finally{b(!1)}}},[m,t]);(0,r.useEffect)(()=>{d.join("").length===6&&!g&&$()},[d,g,$]);const O=d.join("").length===6;return(0,e.jsxs)(R,{testId:"code-verification-step",children:[(0,e.jsx)(G,{onClick:o,"aria-label":"Go back to email entry","data-testid":"forgot-back"}),(0,e.jsx)(V,{icon:K}),(0,e.jsx)(L,{children:"Check your email"}),(0,e.jsxs)(q,{children:["We sent a verification code to",(0,e.jsx)("br",{}),(0,e.jsx)("span",{className:"font-medium text-[#211F1E]","data-testid":"forgot-verification-email",children:s})]}),c&&(0,e.jsx)(S,{tone:"error",message:c}),w&&(0,e.jsx)(S,{tone:"success",message:"Verification code sent!"}),(0,e.jsxs)("fieldset",{role:"group","aria-label":"6-digit verification code",className:"flex flex-col",children:[(0,e.jsx)("legend",{className:"font-inter-tight text-[14px] font-medium leading-[1.3] tracking-[0.14px] text-[#211F1E] mb-3 text-center w-full",children:"Enter verification code"}),(0,e.jsx)("div",{className:"flex gap-2 justify-center",role:"group","aria-describedby":"forgot-code-instructions",children:d.map((n,l)=>(0,e.jsx)("input",{ref:h=>{u.current[l]=h},type:"text",inputMode:"numeric",pattern:"[0-9]",maxLength:1,value:n,onChange:h=>E(l,h.target.value),onKeyDown:h=>N(l,h),onPaste:U,disabled:g,className:"w-12 h-14 sm:w-14 sm:h-16 text-center font-inter-tight text-[22px] font-medium leading-none text-[#211F1E] border border-[rgba(33,31,30,0.12)] bg-white rounded-xl transition-colors focus:outline-none focus:border-[#211F1E] disabled:opacity-50 disabled:cursor-not-allowed","aria-label":`Digit ${l+1} of 6`,"aria-required":"true",autoComplete:"one-time-code","data-testid":`forgot-verification-code-digit-${l+1}`},l))}),(0,e.jsx)("p",{id:"forgot-code-instructions",className:"sr-only",children:"Enter the 6-digit code sent to your email. Use arrow keys to navigate between digits."})]}),(0,e.jsxs)("div",{className:"flex flex-col gap-3 items-center",children:[(0,e.jsx)(T,{type:"button",onClick:$,loading:g,loadingText:"Verifying...",disabled:g||!O,"data-testid":"forgot-verification-submit",children:"Verify Code"}),(0,e.jsxs)("div",{className:"flex flex-col items-center gap-1",children:[(0,e.jsx)("span",{className:"font-inter-tight text-[14px] leading-[1.3] tracking-[0.14px] text-[rgba(33,31,30,0.72)]",children:"Didn't receive the code?"}),(0,e.jsxs)("button",{type:"button",onClick:Y,disabled:x||m>0,className:"inline-flex items-center gap-1.5 font-inter-tight text-[14px] font-medium leading-[1.3] tracking-[0.14px] text-[#211F1E] hover:underline disabled:opacity-50 disabled:cursor-not-allowed disabled:no-underline transition-opacity","data-testid":"forgot-verification-resend",children:[(0,e.jsx)(ae,{className:`h-3.5 w-3.5 ${x?"animate-spin":""}`,"aria-hidden":"true"}),m>0?`Resend in ${m}s`:"Resend code"]})]})]})]})}function me({resetToken:s,onComplete:a,onBack:o}){const[t,d]=(0,r.useState)(""),[f,g]=(0,r.useState)(""),[p,x]=(0,r.useState)(!1),[b,c]=(0,r.useState)(!1),[i,m]=(0,r.useState)(!1),[j,w]=(0,r.useState)(""),C=(0,r.useCallback)(async u=>{u.preventDefault();const E=le(t);if(!E.valid){w(E.message);return}if(t!==f){w("Passwords do not match");return}m(!0),w("");try{await F.reset(s,t),a()}catch(N){y.error("Password reset failed:",N),w(N instanceof Error?N.message:"Failed to reset password. Please try again.")}finally{m(!1)}},[t,f,s,a]);return(0,e.jsxs)(R,{testId:"password-reset-step",children:[(0,e.jsx)(G,{onClick:o,"aria-label":"Go back to verification","data-testid":"forgot-reset-back"}),(0,e.jsx)(V,{icon:D}),(0,e.jsx)(L,{children:"Create New Password"}),(0,e.jsx)(q,{children:"Enter your new password below. Make sure it's secure and memorable."}),j&&(0,e.jsx)(S,{tone:"error",message:j}),(0,e.jsxs)("form",{onSubmit:C,className:"flex flex-col gap-5","aria-label":"Password reset form",children:[(0,e.jsxs)(A,{label:"New Password",htmlFor:"newPassword",required:!0,children:[(0,e.jsx)(B,{icon:D,id:"newPassword",type:p?"text":"password",value:t,onChange:u=>{d(u.target.value),j&&w("")},placeholder:"Enter new password",autoComplete:"new-password",required:!0,"aria-required":"true","aria-describedby":"forgot-password-requirements",disabled:i,"data-testid":"forgot-reset-password-input",trailing:(0,e.jsx)(M,{show:p,onToggle:()=>x(u=>!u),disabled:i})}),(0,e.jsx)(ge,{password:t})]}),(0,e.jsxs)(A,{label:"Confirm Password",htmlFor:"confirmPassword",required:!0,children:[(0,e.jsx)(B,{icon:D,id:"confirmPassword",type:b?"text":"password",value:f,onChange:u=>{g(u.target.value),j&&w("")},placeholder:"Confirm new password",autoComplete:"new-password",required:!0,"aria-required":"true",disabled:i,"data-testid":"forgot-reset-confirm-password-input",trailing:(0,e.jsx)(M,{show:b,onToggle:()=>c(u=>!u),disabled:i})}),f&&(0,e.jsx)(k.div,{initial:{opacity:0}
1,animate:{opacity:1},className:`inline-flex items-center gap-1 font-inter-tight text-[12px] leading-4 ${t===f?"text-green-700":"text-red-600"}`,children:t===f?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(I,{className:"h-3.5 w-3.5","aria-hidden":"true"}),"Passwords match"]}):(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(W,{className:"h-3.5 w-3.5","aria-hidden":"true"}),"Passwords do not match"]})})]}),(0,e.jsx)(T,{type:"submit",loading:i,loadingText:"Resetting password...",disabled:i||!t||!f,"data-testid":"forgot-reset-submit",children:"Reset Password"})]})]})}function xe({onNavigateToLogin:s}){return(0,e.jsxs)(R,{testId:"forgot-success-step",children:[(0,e.jsx)(k.div,{initial:{scale:0},animate:{scale:1},transition:{delay:.1,type:"spring",stiffness:200},className:"w-16 h-16 rounded-full flex items-center justify-center self-center",style:{background:"rgba(28, 121, 70, 0.10)"},"aria-hidden":"true",children:(0,e.jsx)(I,{className:"h-7 w-7 text-[#1C7946]","aria-hidden":"true",strokeWidth:2.25})}),(0,e.jsx)(L,{children:"Password Reset Successfully!"}),(0,e.jsx)(q,{children:"Your password has been reset. You can now sign in with your new password."}),(0,e.jsxs)(T,{type:"button",onClick:s,"data-testid":"forgot-success-login-button",children:["Return to Sign in",(0,e.jsx)(H,{className:"h-4 w-4","aria-hidden":"true"})]})]})}function P({children:s}){return(0,e.jsx)(k.div,{initial:{opacity:0,x:20},animate:{opacity:1,x:0},exit:{opacity:0,x:-20},transition:{duration:.3,ease:[.22,1,.36,1]},children:s})}function R({children:s,testId:a}){return(0,e.jsx)(k.div,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.5},className:"w-full flex flex-col",style:{gap:24},"data-testid":a,children:s})}function L({children:s}){return(0,e.jsx)("h1",{className:"font-boldonse text-[32px] sm:text-[40px] font-normal text-[#211F1E] leading-[1.15] sm:leading-[1.4] text-center w-full",style:{wordBreak:"break-word"},children:s})}function q({children:s}){return(0,e.jsx)("p",{className:"font-inter-tight text-[16px] leading-[1.4] text-[rgba(33,31,30,0.72)] text-center",children:s})}function V({icon:s}){return(0,e.jsx)("div",{className:"w-14 h-14 rounded-full flex items-center justify-center self-center",style:{background:"rgba(33,31,30,0.06)"},"aria-hidden":"true",children:(0,e.jsx)(s,{className:"h-6 w-6 text-[#211F1E]","aria-hidden":!0,strokeWidth:2})})}function G({onClick:s,...a}){return(0,e.jsxs)("button",{type:"button",onClick:s,className:"self-start inline-flex items-center gap-1.5 font-inter-tight text-[14px] font-medium leading-[1.3] tracking-[0.14px] text-[#211F1E] hover:opacity-70 transition-opacity",...a,children:[(0,e.jsx)(z,{className:"h-4 w-4","aria-hidden":"true"}),(0,e.jsx)("span",{children:"Back"})]})}function A({label:s,htmlFor:a,required:o,children:t}){return(0,e.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,e.jsxs)("label",{htmlFor:a,className:"inline-flex items-center gap-1 font-inter-tight text-[14px] font-medium leading-[1.3] tracking-[0.14px] text-[#211F1E]",children:[s,o&&(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("span",{className:"text-red-600","aria-hidden":"true",children:"*"}),(0,e.jsx)("span",{className:"sr-only",children:"(required)"})]})]}),t]})}function B({icon:s,trailing:a,...o}){return(0,e.jsxs)("div",{className:"relative",children:[(0,e.jsx)(s,{className:"absolute left-4 top-1/2 -translate-y-1/2 h-4 w-4 text-[rgba(33,31,30,0.72)]","aria-hidden":!0,strokeWidth:2}),(0,e.jsx)("input",{...o,className:`w-full pl-11 ${a?"pr-12":"pr-5"} py-4 rounded-xl border border-[rgba(33,31,30,0.12)] bg-white font-inter-tight text-[14px] leading-[1.3] tracking-[0.14px] text-[#211F1E] placeholder:text-[rgba(33,31,30,0.72)] focus:outline-none focus:border-[#211F1E] disabled:opacity-50 transition-colors`}),a&&(0,e.jsx)("div",{className:"absolute right-4 top-1/2 -translate-y-1/2",children:a})]})}function M({show:s,onToggle:a,disabled:o}){return(0,e.jsx)("button",{type:"button",onClick:a,className:"text-[rgba(33,31,30,0.72)] hover:text-[#211F1E] transition-colors",disabled:o,"aria-label":s?"Hide password":"Show password","aria-pressed":s,tabIndex:-1,
1children:s?(0,e.jsx)(te,{className:"h-4 w-4","aria-hidden":"true"}):(0,e.jsx)(Z,{className:"h-4 w-4","aria-hidden":"true"})})}function ge({password:s}){const a=de(s),o=a.filter(t=>t.met).length;return s?(0,e.jsx)("div",{id:"forgot-password-requirements",className:"flex flex-wrap gap-2",role:"status","aria-live":"polite","aria-label":`Password strength: ${o} of ${a.length} requirements met`,"data-testid":"forgot-password-requirements",children:a.map(t=>(0,e.jsx)("span",{className:`font-inter-tight text-[12px] leading-4 px-2 py-1 rounded-full transition-colors ${t.met?"bg-green-100 text-green-700":"bg-[rgba(33,31,30,0.06)] text-[rgba(33,31,30,0.72)] border border-[rgba(33,31,30,0.12)]"}`,"aria-label":`${t.label}: ${t.met?"requirement met":"requirement not met"}`,children:t.label},t.key))}):null}function S({tone:s,message:a}){const o=s==="error"?{border:"border-red-200",bg:"bg-red-50",text:"text-red-800",icon:"text-red-600"}:{border:"border-green-200",bg:"bg-green-50",text:"text-green-800",icon:"text-green-600"},t=s==="error"?W:I;return(0,e.jsxs)(k.div,{initial:{opacity:0,y:-8},animate:{opacity:1,y:0},className:`p-3 rounded-xl border ${o.border} ${o.bg} flex items-start gap-2`,role:s==="error"?"alert":"status","data-testid":`forgot-${s}-alert`,children:[(0,e.jsx)(t,{className:`h-4 w-4 ${o.icon} mt-0.5 flex-shrink-0`,"aria-hidden":"true"}),(0,e.jsx)("span",{className:`font-inter-tight text-[14px] leading-[1.3] ${o.text}`,children:a})]})}function T({children:s,loading:a,loadingText:o,disabled:t,...d}){return(0,e.jsx)("button",{...d,disabled:t||a,"aria-busy":a,className:"w-full flex items-center justify-center gap-2 px-5 py-3.5 rounded-xl bg-[#211F1E] hover:bg-[#211F1E]/90 transition-colors disabled:opacity-50 disabled:cursor-not-allowed font-inter-tight text-[14px] font-medium leading-[1.3] tracking-[0.14px] text-white min-h-[52px]",children:a?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(k.div,{animate:{rotate:360},transition:{duration:1,repeat:1/0,ease:"linear"},className:"w-4 h-4 border-2 border-white/30 border-t-white rounded-full","aria-hidden":"true"}),o||"Loading…"]}):s})}export{Ce as ForgotPasswordWizard,Ce as default};

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.