@neuctra/authix 1.0.14 → 1.0.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -491,7 +491,7 @@ React keys must be passed directly to JSX without using spread:
|
|
|
491
491
|
animation: none;
|
|
492
492
|
}
|
|
493
493
|
}
|
|
494
|
-
`})]})},cs=({token:e,user:t=null,darkMode:r=!0,homeUrl:s,onLogout:o,primaryColor:i="#00C212"})=>{const{baseUrl:a,apiKey:l,appId:h}=ge(),[c,u]=S.useState(t),[y,R]=S.useState(!0),[k,d]=S.useState(!1),[b,g]=S.useState(!1),[M,D]=S.useState(!1),[_,T]=S.useState(!1),[B,m]=S.useState(!1),[N,w]=S.useState(!1),[F,K]=S.useState(!1),[L,Y]=S.useState(!1),[Z,E]=S.useState(null),[J,H]=S.useState(!1),[A,I]=S.useState({email:"",otp:"",appId:h}),[q,f]=S.useState(!1),[C,z]=S.useState(!1),O=(v,V)=>{E({type:v,message:V}),setTimeout(()=>E(null),3e3)},x=()=>{Y(!0);const v=setTimeout(()=>{K(!1),Y(!1)},150);return()=>clearTimeout(v)};S.useEffect(()=>{const v=V=>{const Q=document.querySelector(".dropdown-container");Q&&!Q.contains(V.target)&&x()};return F&&document.addEventListener("mousedown",v),()=>{document.removeEventListener("mousedown",v)}},[F]);const j=async()=>{if(!A.email||!/\S+@\S+\.\S+/.test(A.email)){O("error","Please enter a valid email");return}try{z(!0);const v=await W.post(`${a}/users/send-verify-otp/${c?.id}`,{email:A.email},{headers:{"x-api-key":l,"x-app-id":h}});v.data.success?(O("success",v.data.message||"OTP sent to email!"),f(!0)):O("error",v.data.message||"Failed to send OTP")}catch(v){O("error",v.response?.data?.message||"Server error")}finally{z(!1)}},X=async v=>{if(v.preventDefault(),!A.email||!A.otp){O("error","Please fill in all fields");return}try{z(!0);const V=await W.post(`${a}/users/verify-email`,A);if(V.data.success){if(O("success",V.data.message||"Email verified!"),c){const Q={...c,isVerified:!0};u(Q),localStorage.setItem("userInfo",JSON.stringify({...Q,token:e}))}I({email:"",otp:"",appId:h}),f(!1),w(!1)}else O("error",V.data.message||"Verification failed")}catch(V){O("error",V.response?.data?.message||"Something went wrong")}finally{z(!1)}},se=async v=>{if(!c)return!1;try{const V={...c,avatarUrl:v},{data:Q}=await W.put(`${a}/users/update/${c.id}`,V,{headers:{"x-api-key":l}});return Q.success?(u(V),localStorage.setItem("userInfo",JSON.stringify({...V,token:e})),O("success","Avatar updated successfully!"),!0):(O("error",Q.message||"Failed to update avatar"),!1)}catch(V){return console.error("Avatar update error:",V),O("error","Failed to update avatar"),!1}},G=async()=>{if(c){g(!0);try{const{data:v}=await W.put(`${a}/users/update/${c.id}`,c,{headers:{"x-api-key":l}});v.success?(u(v.user),d(!1),localStorage.setItem("userInfo",JSON.stringify({...v.user,token:e})),O("success","Profile updated successfully")):O("error",v.message)}catch(v){console.error(v),O("error","Update failed")}finally{g(!1)}}},oe=async v=>{try{const{data:V}=await W.get(`${a}/users/check-user/${v}?appId=${h}`,{headers:{"x-api-key":l}});(!V.success||!V.exists)&&(console.warn("User not found, clearing session..."),localStorage.removeItem("userInfo"),u(null))}catch(V){console.error("User check failed:",V),localStorage.removeItem("userInfo"),u(null)}};S.useEffect(()=>{(()=>{if(t)u(t),R(!1),oe(t.id);else{const V=localStorage.getItem("userInfo");if(V){const Q=JSON.parse(V);u(Q),R(!1),oe(Q.id)}else R(!1)}})()},[t]),S.useEffect(()=>{c?.email&&I(v=>({...v,email:c.email}))},[c?.email]);const de=(v,V)=>{let Q=parseInt(v.replace("#",""),16),me=(Q>>16)+V,it=(Q>>8&255)+V,lt=(Q&255)+V;return me=Math.min(255,Math.max(0,me)),it=Math.min(255,Math.max(0,it)),lt=Math.min(255,Math.max(0,lt)),`#${(lt|it<<8|me<<16).toString(16).padStart(6,"0")}`},P=r?{background:"#000000",surface:"#09090b",surfaceLight:"#27272a",surfaceLighter:"#3f3f46",textPrimary:"#ffffff",textSecondary:"#d4d4d8",textTertiary:"#a1a1aa",accent:i,accentHover:de(i,-15),success:"#10b981",error:"#ef4444",border:"#27272a",warning:"#f59e0b"}:{background:"#ffffff",surface:"#fafafa",surfaceLight:"#f4f4f5",surfaceLighter:"#e4e4e7",textPrimary:"#18181b",textSecondary:"#52525b",textTertiary:"#71717a",accent:i,accentHover:de(i,-15),success:"#10b981",error:"#ef4444",border:"#e4e4e7",warning:"#d97706"};if(y)return n.jsx("div",{style:{width:"100%",minHeight:"400px",display:"flex",alignItems:"center",justifyContent:"center",color:P.textPrimary,fontFamily:"'Inter', -apple-system, BlinkMacSystemFont, sans-serif"},children:n.jsxs("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",gap:"16px",textAlign:"center"},children:[n.jsx(ce,{size:40,color:P.accent,style:{animation:"spin 1s linear infinite"},"aria-hidden":"true"}),n.jsx("p",{style:{color:P.textTertiary,margin:0},children:"Loading your profile..."})]})});if(!c)return n.jsx("div",{style:{width:"100%",minHeight:"400px",display:"flex",alignItems:"center",justifyContent:"center",color:P.textPrimary,fontFamily:"'Inter', -apple-system, BlinkMacSystemFont, sans-serif"},children:n.jsxs("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",gap:"12px",textAlign:"center"},children:[n.jsx(le,{size:40,color:P.error,"aria-hidden":"true"}),n.jsx("p",{style:{color:P.textTertiary,margin:0},children:"No profile found. Please log in again."})]})});const at=[{label:"Full Name",value:c.name,name:"name",type:"text",icon:je},{label:"Email Address",value:c.email,name:"email",type:"email",icon:he},{label:"Phone Number",value:c.phone||"Not set",name:"phone",type:"tel",icon:qn},{label:"Address",value:c.address||"Not provided",name:"address",type:"text",icon:Vn}];return n.jsxs("div",{style:{width:"100%",display:"flex",alignItems:"center",justifyContent:"center",color:P.textPrimary,fontFamily:"'Inter', -apple-system, BlinkMacSystemFont, sans-serif",lineHeight:1.5,minHeight:"80vh"},children:[Z&&n.jsxs("div",{style:{position:"fixed",top:"20px",right:"20px",padding:"12px 24px",borderRadius:"12px",boxShadow:"0 25px 50px -12px rgba(0, 0, 0, 0.25)",backdropFilter:"blur(8px)",border:"1px solid",zIndex:1e3,display:"flex",alignItems:"center",gap:"8px",fontSize:"12px",fontWeight:500,maxWidth:"400px",animation:"slideIn 0.3s ease-out",...Z.type==="success"?{backgroundColor:r?"rgba(16, 185, 129, 0.1)":"rgba(16, 185, 129, 0.05)",borderColor:r?"rgba(16, 185, 129, 0.3)":"rgba(16, 185, 129, 0.2)",color:r?"#34d399":"#059669"}:{backgroundColor:r?"rgba(239, 68, 68, 0.1)":"rgba(239, 68, 68, 0.05)",borderColor:r?"rgba(239, 68, 68, 0.3)":"rgba(239, 68, 68, 0.2)",color:r?"#f87171":"#dc2626"}},role:"alert","aria-live":"polite",children:[Z.type==="success"?n.jsx(xe,{size:20,"aria-hidden":"true"}):n.jsx(le,{size:20,"aria-hidden":"true"}),Z.message]}),n.jsx("div",{style:{maxWidth:"1200px",margin:"0 auto",padding:"16px",width:"100%",boxSizing:"border-box"},children:n.jsxs("div",{style:{display:"grid",gap:"24px",gridTemplateColumns:"1fr",...window.innerWidth>=1024&&{gridTemplateColumns:"1fr 2fr",gap:"10px"},...window.innerWidth>=768&&window.innerWidth<1024&&{gap:"10px"},...window.innerWidth>=600&&window.innerWidth<768&&{gap:"28px"}},children:[n.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"6px",height:"100%"},children:[n.jsxs("section",{style:{backgroundColor:P.surface,borderRadius:"16px",position:"relative",padding:"24px",boxShadow:"0 1px 3px rgba(0, 0, 0, 0.1)",textAlign:"center",display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center",flex:1,minHeight:"300px"},children:[s&&n.jsx("a",{href:s||"/",target:"_self",rel:"noopener noreferrer",style:{position:"absolute",top:"18px",left:"18px"},children:n.jsx(Wn,{size:20,style:{color:r?"#ffffff":"#000000"}})}),n.jsxs("div",{style:{position:"relative",display:"inline-block",marginBottom:"16px"},children:[n.jsx("img",{src:c.avatarUrl||`https://api.dicebear.com/9.x/initials/svg?seed=${encodeURIComponent(c.name)}`,alt:`Profile avatar of ${c.name}`,style:{width:"128px",height:"128px",borderRadius:"50%",objectFit:"cover",boxShadow:"0 10px 25px -5px rgba(0, 0, 0, 0.3)",border:`3px solid ${P.border}`},width:128,height:128,loading:"eager"}),n.jsx("button",{onClick:()=>D(!0),style:{position:"absolute",bottom:"8px",right:"8px",backgroundColor:P.accent,color:"white",padding:"8px",borderRadius:"50%",border:"none",cursor:"pointer",transition:"all 0.2s ease",display:"flex",alignItems:"center",justifyContent:"center",width:"32px",height:"32px"},"aria-label":"Change profile picture",children:n.jsx(tt,{size:16,"aria-hidden":"true"})})]}),n.jsx("h2",{style:{fontSize:"24px",fontWeight:600,margin:"0 0 4px 0",color:P.textPrimary},children:c.name}),n.jsx("p",{style:{color:P.textTertiary,margin:"0 0 8px 0"},children:c.email}),n.jsxs("div",{style:{backgroundColor:c.isVerified?r?"rgba(16, 185, 129, 0.1)":"rgba(16, 185, 129, 0.05)":r?"rgba(245, 158, 11, 0.1)":"rgba(245, 158, 11, 0.05)",color:c.isVerified?P.success:P.warning,border:`1px solid ${c.isVerified?r?"rgba(16, 185, 129, 0.3)":"rgba(16, 185, 129, 0.2)":r?"rgba(245, 158, 11, 0.3)":"rgba(245, 158, 11, 0.2)"}`,padding:"6px 12px",borderRadius:"20px",fontSize:"12px",fontWeight:500,display:"inline-flex",alignItems:"center",gap:"6px",marginTop:"8px"},children:[c.isVerified?n.jsx(xe,{size:16,"aria-hidden":"true"}):n.jsx(le,{size:16,"aria-hidden":"true"}),c.isVerified?"Email Verified":"Not Verified"]})]}),n.jsx("nav",{style:{display:"flex",flexDirection:"column",gap:"6px"},children:k?n.jsxs(n.Fragment,{children:[n.jsxs("button",{onClick:()=>d(!1),style:{backgroundColor:P.surfaceLight,border:`1px solid ${P.border}`,color:P.textPrimary,padding:"10px 20px",borderRadius:"6px",borderStyle:"solid",cursor:"pointer",transition:"all 0.2s ease",fontSize:"12px",fontWeight:500,display:"flex",alignItems:"center",justifyContent:"center",gap:"8px",textDecoration:"none",minHeight:"36px",flex:window.innerWidth<1024?"1":"auto"},children:[n.jsx(Pe,{size:16,"aria-hidden":"true"}),"Cancel"]}),n.jsxs("button",{onClick:G,disabled:b,style:{background:`linear-gradient(to right, ${P.accent}, ${P.accentHover})`,opacity:b?.7:1,color:"white",padding:"10px 20px",borderRadius:"6px",border:"none",cursor:b?"not-allowed":"pointer",transition:"all 0.2s ease",fontSize:"12px",fontWeight:500,display:"flex",alignItems:"center",justifyContent:"center",gap:"8px",textDecoration:"none",minHeight:"36px",flex:window.innerWidth<1024?"1":"auto"},children:[b?n.jsx(ce,{size:16,style:{animation:"spin 1s linear infinite"},"aria-hidden":"true"}):n.jsx(Kn,{size:16,"aria-hidden":"true"}),b?"Saving...":"Save Changes"]})]}):n.jsxs(n.Fragment,{children:[n.jsxs("button",{onClick:()=>d(!0),style:{background:`linear-gradient(to right, ${P.accent}, ${P.accentHover})`,color:"white",padding:"10px 20px",borderRadius:"6px",border:"none",cursor:"pointer",transition:"all 0.2s ease",fontSize:"12px",fontWeight:500,display:"flex",alignItems:"center",justifyContent:"center",gap:"8px",textDecoration:"none",minHeight:"36px",flex:window.innerWidth<1024?"1":"auto"},children:[n.jsx(Yn,{size:16,"aria-hidden":"true"}),"Edit Profile"]}),n.jsxs("div",{style:{position:"relative"},children:[n.jsxs("button",{style:{backgroundColor:P.surfaceLight,color:P.textPrimary,padding:"10px 20px",borderRadius:"6px",border:"none",cursor:"pointer",transition:"all 0.2s ease",fontSize:"12px",fontWeight:500,display:"flex",alignItems:"center",justifyContent:"center",gap:"8px",textDecoration:"none",minHeight:"36px",width:"100%",boxSizing:"border-box"},onClick:()=>K(!F),children:[n.jsx(Bn,{size:16,"aria-hidden":"true"}),"More Actions"]}),F&&n.jsxs("div",{className:`dropdown-container ${L?"closing":""}`,style:{position:"absolute",bottom:"100%",left:0,right:0,backgroundColor:P.surface,border:`1px solid ${P.border}`,borderRadius:"12px 12px 0 0",boxShadow:"0 -8px 24px rgba(0, 0, 0, 0.25)",zIndex:200,marginBottom:"6px",overflow:"hidden",animation:`${L?"drawerSlideDown":"drawerSlideUp"} 0.25s ease-out forwards`},children:[n.jsxs("button",{onClick:()=>{T(!0),x()},style:{width:"100%",padding:"14px 18px",backgroundColor:"transparent",border:"none",color:P.textPrimary,cursor:"pointer",transition:"all 0.2s ease",fontSize:"13px",fontWeight:500,display:"flex",alignItems:"center",gap:"8px",textAlign:"left"},onMouseEnter:v=>v.currentTarget.style.backgroundColor=P.surfaceLight,onMouseLeave:v=>v.currentTarget.style.backgroundColor="transparent",children:[n.jsx(tr,{size:14,"aria-hidden":"true"}),"Change Password"]}),!c.isVerified&&n.jsxs("button",{onClick:()=>{w(!0),x()},disabled:J,style:{width:"100%",padding:"14px 18px",backgroundColor:"transparent",border:"none",color:J?P.textTertiary:P.warning,cursor:J?"not-allowed":"pointer",transition:"all 0.2s ease",fontSize:"13px",fontWeight:500,display:"flex",alignItems:"center",gap:"8px",textAlign:"left",opacity:J?.6:1},onMouseEnter:v=>{J||(v.currentTarget.style.backgroundColor=P.surfaceLight)},onMouseLeave:v=>v.currentTarget.style.backgroundColor="transparent",children:[J?n.jsx(ce,{size:14,style:{animation:"spin 1s linear infinite"},"aria-hidden":"true"}):n.jsx(rr,{size:14,"aria-hidden":"true"}),J?"Sending...":"Verify Email"]}),o&&n.jsxs("button",{onClick:()=>{o(),x()},style:{width:"100%",padding:"14px 18px",backgroundColor:"transparent",border:"none",color:r?"#fca5a5":"#dc2626",cursor:"pointer",transition:"all 0.2s ease",fontSize:"13px",fontWeight:500,display:"flex",alignItems:"center",gap:"8px",textAlign:"left"},onMouseEnter:v=>{v.currentTarget.style.backgroundColor=r?"rgba(239, 68, 68, 0.1)":"rgba(239, 68, 68, 0.05)"},onMouseLeave:v=>v.currentTarget.style.backgroundColor="transparent",children:[n.jsx(ot,{size:14,"aria-hidden":"true"}),"Logout"]}),n.jsxs("button",{onClick:()=>{m(!0),x()},style:{width:"100%",padding:"14px 18px",backgroundColor:"transparent",border:"none",color:"#ef4444",cursor:"pointer",transition:"all 0.2s ease",fontSize:"13px",fontWeight:600,display:"flex",alignItems:"center",gap:"8px",textAlign:"left"},onMouseEnter:v=>{v.currentTarget.style.backgroundColor=r?"rgba(239, 68, 68, 0.1)":"rgba(239, 68, 68, 0.05)"},onMouseLeave:v=>v.currentTarget.style.backgroundColor="transparent",children:[n.jsx(We,{size:14,"aria-hidden":"true"}),"Delete Account"]})]})]})]})})]}),n.jsxs("div",{style:{minWidth:0,display:"flex",flexDirection:"column",gap:"12px"},children:[n.jsxs("section",{style:{backgroundColor:P.surface,borderRadius:"16px",padding:"24px",boxShadow:"0 1px 3px rgba(0, 0, 0, 0.1)"},children:[n.jsxs("h2",{style:{fontSize:"20px",fontWeight:600,margin:"0 0 24px 0",color:P.textSecondary,display:"flex",alignItems:"center",gap:"8px"},children:[n.jsx(je,{size:20,"aria-hidden":"true"}),"Personal Information"]}),n.jsx("div",{style:{display:"grid",gap:"20px",gridTemplateColumns:"1fr",...window.innerWidth>=600&&{gridTemplateColumns:"1fr 1fr",gap:"20px"}},children:at.map(v=>{const V=v.icon;return n.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"8px"},children:[n.jsxs("label",{style:{color:P.textTertiary,fontSize:"12px",fontWeight:500,display:"flex",alignItems:"center",gap:"8px"},children:[n.jsx(V,{size:16,"aria-hidden":"true"}),v.label]}),k?n.jsx("input",{type:v.type,name:v.name,value:c[v.name],onChange:Q=>u(me=>me&&{...me,[Q.target.name]:Q.target.value}),style:{padding:"12px",borderRadius:"8px",border:`1px solid ${i}`,backgroundColor:"transparent",color:P.textPrimary,fontSize:"12px",outline:"none",transition:"border-color 0.2s ease",minHeight:"44px",width:"100%",boxSizing:"border-box"},placeholder:`Enter ${v.label.toLowerCase()}`,"aria-label":v.label}):n.jsx("div",{style:{padding:"12px",borderRadius:"8px",border:"1px solid transparent",fontSize:"12px",minHeight:"44px",display:"flex",alignItems:"center",boxSizing:"border-box",color:P.textPrimary,backgroundColor:r?"rgba(255,255,255,0.05)":"rgba(0,0,0,0.05)"},children:v.value})]},v.name)})})]}),n.jsxs("section",{style:{backgroundColor:P.surface,borderRadius:"16px",padding:"30px 24px",boxShadow:"0 1px 3px rgba(0, 0, 0, 0.1)"},children:[n.jsxs("h2",{style:{fontSize:"20px",fontWeight:600,margin:"0 0 24px 0",color:P.textSecondary,display:"flex",alignItems:"center",gap:"8px"},children:[n.jsx(nr,{size:20,"aria-hidden":"true"}),"Security Status"]}),n.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"16px"},children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"12px 0"},children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"12px",color:P.textSecondary},children:[n.jsx(he,{size:16,"aria-hidden":"true"}),n.jsx("span",{children:"Email Verification"})]}),n.jsx("div",{style:{padding:"6px 12px",borderRadius:"8px",fontSize:"12px",fontWeight:500,display:"flex",alignItems:"center",gap:"6px",...c.isVerified?{backgroundColor:r?"rgba(16, 185, 129, 0.1)":"rgba(16, 185, 129, 0.05)",color:P.success,border:`1px solid ${r?"rgba(16, 185, 129, 0.3)":"rgba(16, 185, 129, 0.2)"}`}:{backgroundColor:r?"rgba(245, 158, 11, 0.1)":"rgba(245, 158, 11, 0.05)",color:P.warning,border:`1px solid ${r?"rgba(245, 158, 11, 0.3)":"rgba(245, 158, 11, 0.2)"}`}},children:c.isVerified?n.jsxs(n.Fragment,{children:[n.jsx(xe,{size:16,"aria-hidden":"true"}),"Verified"]}):n.jsxs(n.Fragment,{children:[n.jsx(le,{size:16,"aria-hidden":"true"}),"Not Verified"]})})]}),!c.isVerified&&n.jsx("div",{style:{padding:"12px",borderRadius:"8px",backgroundColor:r?"rgba(100, 100, 100, 0.1)":"rgba(0, 0, 0, 0.05)"},children:n.jsx("p",{style:{color:P.textTertiary,fontSize:"12px",margin:0},children:"Verify your email to unlock all features and enhance your account security."})})]})]})]})]})}),n.jsx(as,{isOpen:M,onClose:()=>{D(!1)},onUpdate:se,colors:P}),n.jsx(is,{baseUrl:a,apiKey:l,appId:h,userId:c.id,isOpen:_,onClose:()=>T(!1),onSuccess:v=>O("success",v),onError:v=>O("error",v),colors:P}),n.jsx(os,{baseUrl:a,apiKey:l,appId:h,userId:c.id,token:e,isOpen:B,onClose:()=>m(!1),onSuccess:v=>O("success",v),onError:v=>O("error",v),colors:P}),n.jsx(ls,{isOpen:N,onClose:()=>{w(!1),f(!1),I({email:c?.email||"",otp:"",appId:h})},onVerify:X,onSendOTP:j,verifyFormData:A,setVerifyFormData:I,otpSent:q,verifying:C,user:c,colors:P,darkMode:r}),n.jsx("style",{children:`
|
|
494
|
+
`})]})},cs=({token:e,user:t=null,darkMode:r=!0,homeUrl:s,onLogout:o,primaryColor:i="#00C212"})=>{const{baseUrl:a,apiKey:l,appId:h}=ge(),[c,u]=S.useState(t),[y,R]=S.useState(!0),[k,d]=S.useState(!1),[b,g]=S.useState(!1),[M,D]=S.useState(!1),[_,T]=S.useState(!1),[B,m]=S.useState(!1),[N,w]=S.useState(!1),[F,K]=S.useState(!1),[L,Y]=S.useState(!1),[Z,E]=S.useState(null),[J,H]=S.useState(!1),[A,I]=S.useState({email:"",otp:"",appId:h}),[q,f]=S.useState(!1),[C,z]=S.useState(!1),O=(v,V)=>{E({type:v,message:V}),setTimeout(()=>E(null),3e3)},x=()=>{Y(!0);const v=setTimeout(()=>{K(!1),Y(!1)},150);return()=>clearTimeout(v)};S.useEffect(()=>{const v=V=>{const Q=document.querySelector(".dropdown-container");Q&&!Q.contains(V.target)&&x()};return F&&document.addEventListener("mousedown",v),()=>{document.removeEventListener("mousedown",v)}},[F]);const j=async()=>{if(!A.email||!/\S+@\S+\.\S+/.test(A.email)){O("error","Please enter a valid email");return}try{z(!0);const v=await W.post(`${a}/users/send-verify-otp/${c?.id}`,{email:A.email},{headers:{"x-api-key":l,"x-app-id":h}});v.data.success?(O("success",v.data.message||"OTP sent to email!"),f(!0)):O("error",v.data.message||"Failed to send OTP")}catch(v){O("error",v.response?.data?.message||"Server error")}finally{z(!1)}},X=async v=>{if(v.preventDefault(),!A.email||!A.otp){O("error","Please fill in all fields");return}try{z(!0);const V=await W.post(`${a}/users/verify-email`,A);if(V.data.success){if(O("success",V.data.message||"Email verified!"),c){const Q={...c,isVerified:!0};u(Q),localStorage.setItem("userInfo",JSON.stringify({...Q,token:e}))}I({email:"",otp:"",appId:h}),f(!1),w(!1)}else O("error",V.data.message||"Verification failed")}catch(V){O("error",V.response?.data?.message||"Something went wrong")}finally{z(!1)}},se=async v=>{if(!c)return!1;try{const V={...c,avatarUrl:v},{data:Q}=await W.put(`${a}/users/update/${c.id}`,V,{headers:{"x-api-key":l}});return Q.success?(u(V),localStorage.setItem("userInfo",JSON.stringify({...V,token:e})),O("success","Avatar updated successfully!"),!0):(O("error",Q.message||"Failed to update avatar"),!1)}catch(V){return console.error("Avatar update error:",V),O("error","Failed to update avatar"),!1}},G=async()=>{if(c){g(!0);try{const{data:v}=await W.put(`${a}/users/update/${c.id}`,c,{headers:{"x-api-key":l}});v.success?(u(v.user),d(!1),localStorage.setItem("userInfo",JSON.stringify({...v.user,token:e})),O("success","Profile updated successfully")):O("error",v.message)}catch(v){console.error(v),O("error","Update failed")}finally{g(!1)}}},oe=async v=>{try{const{data:V}=await W.get(`${a}/users/check-user/${v}?appId=${h}`,{headers:{"x-api-key":l}});(!V.success||!V.exists)&&(console.warn("User not found, clearing session..."),localStorage.removeItem("userInfo"),u(null))}catch(V){console.error("User check failed:",V),localStorage.removeItem("userInfo"),u(null)}};S.useEffect(()=>{(()=>{if(t)u(t),R(!1),oe(t.id);else{const V=localStorage.getItem("userInfo");if(V){const Q=JSON.parse(V);u(Q),R(!1),oe(Q.id)}else R(!1)}})()},[t]),S.useEffect(()=>{c?.email&&I(v=>({...v,email:c.email}))},[c?.email]);const de=(v,V)=>{let Q=parseInt(v.replace("#",""),16),me=(Q>>16)+V,it=(Q>>8&255)+V,lt=(Q&255)+V;return me=Math.min(255,Math.max(0,me)),it=Math.min(255,Math.max(0,it)),lt=Math.min(255,Math.max(0,lt)),`#${(lt|it<<8|me<<16).toString(16).padStart(6,"0")}`},P=r?{background:"#000000",surface:"#09090b",surfaceLight:"#27272a",surfaceLighter:"#3f3f46",textPrimary:"#ffffff",textSecondary:"#d4d4d8",textTertiary:"#a1a1aa",accent:i,accentHover:de(i,-15),success:"#10b981",error:"#ef4444",border:"#27272a",warning:"#f59e0b"}:{background:"#ffffff",surface:"#fafafa",surfaceLight:"#f4f4f5",surfaceLighter:"#e4e4e7",textPrimary:"#18181b",textSecondary:"#52525b",textTertiary:"#71717a",accent:i,accentHover:de(i,-15),success:"#10b981",error:"#ef4444",border:"#e4e4e7",warning:"#d97706"};if(y)return n.jsx("div",{style:{width:"100%",minHeight:"400px",display:"flex",alignItems:"center",justifyContent:"center",color:P.textPrimary,fontFamily:"'Inter', -apple-system, BlinkMacSystemFont, sans-serif"},children:n.jsxs("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",gap:"16px",textAlign:"center"},children:[n.jsx(ce,{size:40,color:P.accent,style:{animation:"spin 1s linear infinite"},"aria-hidden":"true"}),n.jsx("p",{style:{color:P.textTertiary,margin:0},children:"Loading your profile..."})]})});if(!c)return n.jsx("div",{style:{width:"100%",minHeight:"400px",display:"flex",alignItems:"center",justifyContent:"center",color:P.textPrimary,fontFamily:"'Inter', -apple-system, BlinkMacSystemFont, sans-serif"},children:n.jsxs("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",gap:"12px",textAlign:"center"},children:[n.jsx(le,{size:40,color:P.error,"aria-hidden":"true"}),n.jsx("p",{style:{color:P.textTertiary,margin:0},children:"No profile found. Please log in again."})]})});const at=[{label:"Full Name",value:c.name,name:"name",type:"text",icon:je},{label:"Email Address",value:c.email,name:"email",type:"email",icon:he},{label:"Phone Number",value:c.phone||"Not set",name:"phone",type:"tel",icon:qn},{label:"Address",value:c.address||"Not provided",name:"address",type:"text",icon:Vn}];return n.jsxs("div",{style:{width:"100%",display:"flex",alignItems:"center",justifyContent:"center",color:P.textPrimary,fontFamily:"'Inter', -apple-system, BlinkMacSystemFont, sans-serif",lineHeight:1.5,minHeight:"80vh"},children:[Z&&n.jsxs("div",{style:{position:"fixed",top:"20px",right:"20px",padding:"12px 24px",borderRadius:"12px",boxShadow:"0 25px 50px -12px rgba(0, 0, 0, 0.25)",backdropFilter:"blur(8px)",border:"1px solid",zIndex:1e3,display:"flex",alignItems:"center",gap:"8px",fontSize:"12px",fontWeight:500,maxWidth:"400px",animation:"slideIn 0.3s ease-out",...Z.type==="success"?{backgroundColor:r?"rgba(16, 185, 129, 0.1)":"rgba(16, 185, 129, 0.05)",borderColor:r?"rgba(16, 185, 129, 0.3)":"rgba(16, 185, 129, 0.2)",color:r?"#34d399":"#059669"}:{backgroundColor:r?"rgba(239, 68, 68, 0.1)":"rgba(239, 68, 68, 0.05)",borderColor:r?"rgba(239, 68, 68, 0.3)":"rgba(239, 68, 68, 0.2)",color:r?"#f87171":"#dc2626"}},role:"alert","aria-live":"polite",children:[Z.type==="success"?n.jsx(xe,{size:20,"aria-hidden":"true"}):n.jsx(le,{size:20,"aria-hidden":"true"}),Z.message]}),n.jsx("div",{style:{maxWidth:"1200px",margin:"0 auto",width:"100%",boxSizing:"border-box"},children:n.jsxs("div",{style:{display:"grid",gap:"24px",gridTemplateColumns:"1fr",...window.innerWidth>=1024&&{gridTemplateColumns:"1fr 2fr",gap:"10px"},...window.innerWidth>=768&&window.innerWidth<1024&&{gap:"10px"},...window.innerWidth>=600&&window.innerWidth<768&&{gap:"28px"}},children:[n.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"6px",height:"100%"},children:[n.jsxs("section",{style:{backgroundColor:P.surface,borderRadius:"16px",position:"relative",padding:"24px",boxShadow:"0 1px 3px rgba(0, 0, 0, 0.1)",textAlign:"center",display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center",flex:1,minHeight:"300px"},children:[s&&n.jsx("a",{href:s||"/",target:"_self",rel:"noopener noreferrer",style:{position:"absolute",top:"18px",left:"18px"},children:n.jsx(Wn,{size:20,style:{color:r?"#ffffff":"#000000"}})}),n.jsxs("div",{style:{position:"relative",display:"inline-block",marginBottom:"16px"},children:[n.jsx("img",{src:c.avatarUrl||`https://api.dicebear.com/9.x/initials/svg?seed=${encodeURIComponent(c.name)}`,alt:`Profile avatar of ${c.name}`,style:{width:"128px",height:"128px",borderRadius:"50%",objectFit:"cover",boxShadow:"0 10px 25px -5px rgba(0, 0, 0, 0.3)",border:`3px solid ${P.border}`},width:128,height:128,loading:"eager"}),n.jsx("button",{onClick:()=>D(!0),style:{position:"absolute",bottom:"8px",right:"8px",backgroundColor:P.accent,color:"white",padding:"8px",borderRadius:"50%",border:"none",cursor:"pointer",transition:"all 0.2s ease",display:"flex",alignItems:"center",justifyContent:"center",width:"32px",height:"32px"},"aria-label":"Change profile picture",children:n.jsx(tt,{size:16,"aria-hidden":"true"})})]}),n.jsx("h2",{style:{fontSize:"24px",fontWeight:600,margin:"0 0 4px 0",color:P.textPrimary},children:c.name}),n.jsx("p",{style:{color:P.textTertiary,margin:"0 0 8px 0"},children:c.email}),n.jsxs("div",{style:{backgroundColor:c.isVerified?r?"rgba(16, 185, 129, 0.1)":"rgba(16, 185, 129, 0.05)":r?"rgba(245, 158, 11, 0.1)":"rgba(245, 158, 11, 0.05)",color:c.isVerified?P.success:P.warning,border:`1px solid ${c.isVerified?r?"rgba(16, 185, 129, 0.3)":"rgba(16, 185, 129, 0.2)":r?"rgba(245, 158, 11, 0.3)":"rgba(245, 158, 11, 0.2)"}`,padding:"6px 12px",borderRadius:"20px",fontSize:"12px",fontWeight:500,display:"inline-flex",alignItems:"center",gap:"6px",marginTop:"8px"},children:[c.isVerified?n.jsx(xe,{size:16,"aria-hidden":"true"}):n.jsx(le,{size:16,"aria-hidden":"true"}),c.isVerified?"Email Verified":"Not Verified"]})]}),n.jsx("nav",{style:{display:"flex",flexDirection:"column",gap:"6px"},children:k?n.jsxs(n.Fragment,{children:[n.jsxs("button",{onClick:()=>d(!1),style:{backgroundColor:P.surfaceLight,border:`1px solid ${P.border}`,color:P.textPrimary,padding:"10px 20px",borderRadius:"6px",borderStyle:"solid",cursor:"pointer",transition:"all 0.2s ease",fontSize:"12px",fontWeight:500,display:"flex",alignItems:"center",justifyContent:"center",gap:"8px",textDecoration:"none",minHeight:"36px",flex:window.innerWidth<1024?"1":"auto"},children:[n.jsx(Pe,{size:16,"aria-hidden":"true"}),"Cancel"]}),n.jsxs("button",{onClick:G,disabled:b,style:{background:`linear-gradient(to right, ${P.accent}, ${P.accentHover})`,opacity:b?.7:1,color:"white",padding:"10px 20px",borderRadius:"6px",border:"none",cursor:b?"not-allowed":"pointer",transition:"all 0.2s ease",fontSize:"12px",fontWeight:500,display:"flex",alignItems:"center",justifyContent:"center",gap:"8px",textDecoration:"none",minHeight:"36px",flex:window.innerWidth<1024?"1":"auto"},children:[b?n.jsx(ce,{size:16,style:{animation:"spin 1s linear infinite"},"aria-hidden":"true"}):n.jsx(Kn,{size:16,"aria-hidden":"true"}),b?"Saving...":"Save Changes"]})]}):n.jsxs(n.Fragment,{children:[n.jsxs("button",{onClick:()=>d(!0),style:{background:`linear-gradient(to right, ${P.accent}, ${P.accentHover})`,color:"white",padding:"10px 20px",borderRadius:"6px",border:"none",cursor:"pointer",transition:"all 0.2s ease",fontSize:"12px",fontWeight:500,display:"flex",alignItems:"center",justifyContent:"center",gap:"8px",textDecoration:"none",minHeight:"36px",flex:window.innerWidth<1024?"1":"auto"},children:[n.jsx(Yn,{size:16,"aria-hidden":"true"}),"Edit Profile"]}),n.jsxs("div",{style:{position:"relative"},children:[n.jsxs("button",{style:{backgroundColor:P.surfaceLight,color:P.textPrimary,padding:"10px 20px",borderRadius:"6px",border:"none",cursor:"pointer",transition:"all 0.2s ease",fontSize:"12px",fontWeight:500,display:"flex",alignItems:"center",justifyContent:"center",gap:"8px",textDecoration:"none",minHeight:"36px",width:"100%",boxSizing:"border-box"},onClick:()=>K(!F),children:[n.jsx(Bn,{size:16,"aria-hidden":"true"}),"More Actions"]}),F&&n.jsxs("div",{className:`dropdown-container ${L?"closing":""}`,style:{position:"absolute",bottom:"100%",left:0,right:0,backgroundColor:P.surface,border:`1px solid ${P.border}`,borderRadius:"12px 12px 0 0",boxShadow:"0 -8px 24px rgba(0, 0, 0, 0.25)",zIndex:200,marginBottom:"6px",overflow:"hidden",animation:`${L?"drawerSlideDown":"drawerSlideUp"} 0.25s ease-out forwards`},children:[n.jsxs("button",{onClick:()=>{T(!0),x()},style:{width:"100%",padding:"14px 18px",backgroundColor:"transparent",border:"none",color:P.textPrimary,cursor:"pointer",transition:"all 0.2s ease",fontSize:"13px",fontWeight:500,display:"flex",alignItems:"center",gap:"8px",textAlign:"left"},onMouseEnter:v=>v.currentTarget.style.backgroundColor=P.surfaceLight,onMouseLeave:v=>v.currentTarget.style.backgroundColor="transparent",children:[n.jsx(tr,{size:14,"aria-hidden":"true"}),"Change Password"]}),!c.isVerified&&n.jsxs("button",{onClick:()=>{w(!0),x()},disabled:J,style:{width:"100%",padding:"14px 18px",backgroundColor:"transparent",border:"none",color:J?P.textTertiary:P.warning,cursor:J?"not-allowed":"pointer",transition:"all 0.2s ease",fontSize:"13px",fontWeight:500,display:"flex",alignItems:"center",gap:"8px",textAlign:"left",opacity:J?.6:1},onMouseEnter:v=>{J||(v.currentTarget.style.backgroundColor=P.surfaceLight)},onMouseLeave:v=>v.currentTarget.style.backgroundColor="transparent",children:[J?n.jsx(ce,{size:14,style:{animation:"spin 1s linear infinite"},"aria-hidden":"true"}):n.jsx(rr,{size:14,"aria-hidden":"true"}),J?"Sending...":"Verify Email"]}),o&&n.jsxs("button",{onClick:()=>{o(),x()},style:{width:"100%",padding:"14px 18px",backgroundColor:"transparent",border:"none",color:r?"#fca5a5":"#dc2626",cursor:"pointer",transition:"all 0.2s ease",fontSize:"13px",fontWeight:500,display:"flex",alignItems:"center",gap:"8px",textAlign:"left"},onMouseEnter:v=>{v.currentTarget.style.backgroundColor=r?"rgba(239, 68, 68, 0.1)":"rgba(239, 68, 68, 0.05)"},onMouseLeave:v=>v.currentTarget.style.backgroundColor="transparent",children:[n.jsx(ot,{size:14,"aria-hidden":"true"}),"Logout"]}),n.jsxs("button",{onClick:()=>{m(!0),x()},style:{width:"100%",padding:"14px 18px",backgroundColor:"transparent",border:"none",color:"#ef4444",cursor:"pointer",transition:"all 0.2s ease",fontSize:"13px",fontWeight:600,display:"flex",alignItems:"center",gap:"8px",textAlign:"left"},onMouseEnter:v=>{v.currentTarget.style.backgroundColor=r?"rgba(239, 68, 68, 0.1)":"rgba(239, 68, 68, 0.05)"},onMouseLeave:v=>v.currentTarget.style.backgroundColor="transparent",children:[n.jsx(We,{size:14,"aria-hidden":"true"}),"Delete Account"]})]})]})]})})]}),n.jsxs("div",{style:{minWidth:0,display:"flex",flexDirection:"column",gap:"12px"},children:[n.jsxs("section",{style:{backgroundColor:P.surface,borderRadius:"16px",padding:"24px",boxShadow:"0 1px 3px rgba(0, 0, 0, 0.1)"},children:[n.jsxs("h2",{style:{fontSize:"20px",fontWeight:600,margin:"0 0 24px 0",color:P.textSecondary,display:"flex",alignItems:"center",gap:"8px"},children:[n.jsx(je,{size:20,"aria-hidden":"true"}),"Personal Information"]}),n.jsx("div",{style:{display:"grid",gap:"20px",gridTemplateColumns:"1fr",...window.innerWidth>=600&&{gridTemplateColumns:"1fr 1fr",gap:"20px"}},children:at.map(v=>{const V=v.icon;return n.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"8px"},children:[n.jsxs("label",{style:{color:P.textTertiary,fontSize:"12px",fontWeight:500,display:"flex",alignItems:"center",gap:"8px"},children:[n.jsx(V,{size:16,"aria-hidden":"true"}),v.label]}),k?n.jsx("input",{type:v.type,name:v.name,value:c[v.name],onChange:Q=>u(me=>me&&{...me,[Q.target.name]:Q.target.value}),style:{padding:"12px",borderRadius:"8px",border:`1px solid ${i}`,backgroundColor:"transparent",color:P.textPrimary,fontSize:"12px",outline:"none",transition:"border-color 0.2s ease",minHeight:"44px",width:"100%",boxSizing:"border-box"},placeholder:`Enter ${v.label.toLowerCase()}`,"aria-label":v.label}):n.jsx("div",{style:{padding:"12px",borderRadius:"8px",border:"1px solid transparent",fontSize:"12px",minHeight:"44px",display:"flex",alignItems:"center",boxSizing:"border-box",color:P.textPrimary,backgroundColor:r?"rgba(255,255,255,0.05)":"rgba(0,0,0,0.05)"},children:v.value})]},v.name)})})]}),n.jsxs("section",{style:{backgroundColor:P.surface,borderRadius:"16px",padding:"30px 24px",boxShadow:"0 1px 3px rgba(0, 0, 0, 0.1)"},children:[n.jsxs("h2",{style:{fontSize:"20px",fontWeight:600,margin:"0 0 24px 0",color:P.textSecondary,display:"flex",alignItems:"center",gap:"8px"},children:[n.jsx(nr,{size:20,"aria-hidden":"true"}),"Security Status"]}),n.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"16px"},children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"12px 0"},children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"12px",color:P.textSecondary},children:[n.jsx(he,{size:16,"aria-hidden":"true"}),n.jsx("span",{children:"Email Verification"})]}),n.jsx("div",{style:{padding:"6px 12px",borderRadius:"8px",fontSize:"12px",fontWeight:500,display:"flex",alignItems:"center",gap:"6px",...c.isVerified?{backgroundColor:r?"rgba(16, 185, 129, 0.1)":"rgba(16, 185, 129, 0.05)",color:P.success,border:`1px solid ${r?"rgba(16, 185, 129, 0.3)":"rgba(16, 185, 129, 0.2)"}`}:{backgroundColor:r?"rgba(245, 158, 11, 0.1)":"rgba(245, 158, 11, 0.05)",color:P.warning,border:`1px solid ${r?"rgba(245, 158, 11, 0.3)":"rgba(245, 158, 11, 0.2)"}`}},children:c.isVerified?n.jsxs(n.Fragment,{children:[n.jsx(xe,{size:16,"aria-hidden":"true"}),"Verified"]}):n.jsxs(n.Fragment,{children:[n.jsx(le,{size:16,"aria-hidden":"true"}),"Not Verified"]})})]}),!c.isVerified&&n.jsx("div",{style:{padding:"12px",borderRadius:"8px",backgroundColor:r?"rgba(100, 100, 100, 0.1)":"rgba(0, 0, 0, 0.05)"},children:n.jsx("p",{style:{color:P.textTertiary,fontSize:"12px",margin:0},children:"Verify your email to unlock all features and enhance your account security."})})]})]})]})]})}),n.jsx(as,{isOpen:M,onClose:()=>{D(!1)},onUpdate:se,colors:P}),n.jsx(is,{baseUrl:a,apiKey:l,appId:h,userId:c.id,isOpen:_,onClose:()=>T(!1),onSuccess:v=>O("success",v),onError:v=>O("error",v),colors:P}),n.jsx(os,{baseUrl:a,apiKey:l,appId:h,userId:c.id,token:e,isOpen:B,onClose:()=>m(!1),onSuccess:v=>O("success",v),onError:v=>O("error",v),colors:P}),n.jsx(ls,{isOpen:N,onClose:()=>{w(!1),f(!1),I({email:c?.email||"",otp:"",appId:h})},onVerify:X,onSendOTP:j,verifyFormData:A,setVerifyFormData:I,otpSent:q,verifying:C,user:c,colors:P,darkMode:r}),n.jsx("style",{children:`
|
|
495
495
|
@keyframes slideIn {
|
|
496
496
|
from {
|
|
497
497
|
transform: translateX(100%);
|