@donotdev/auth 0.0.6 → 0.0.7

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.
@@ -1 +1 @@
1
- "use client";import{jsx as i,jsxs as s}from"react/jsx-runtime";import{Suspense as A,lazy as w}from"react";import{Alert as h,ALERT_VARIANT as p,Button as a,BUTTON_VARIANT as c,Stack as r}from"@donotdev/components";import{useTranslation as I,safeSessionStorage as k,handleError as T}from"@donotdev/core";import{EmailLinkForm as x}from"./EmailLinkForm";import y from"./EmailPasswordForm";import{useAccountLinking as E}from"../hooks/useAccountLinking";const S=({className:o="",id:l})=>{const{t:e}=I("auth"),{isRequired:v,email:d,existingProvider:n,newProvider:m,handleSignInWithExistingProvider:L}=E();if(!v)return null;if(n==="password"||n==="emailLink"){const t=()=>{k.removeItem("accountLinkingInfo")},u=()=>{},g=f=>{T(f)};return i("div",{className:o,id:l,children:i(h,{variant:p.WARNING,role:"alert","aria-live":"polite",title:e("accountLinking.title","Account Linking Required"),description:s(r,{gap:"medium",children:[i("p",{children:e("accountLinking.message",`An account with email ${d} already exists with ${n==="password"?"email/password":"email link"}. To link your ${m} account, please sign in with your ${n==="password"?"email and password":"email link"} first.`)}),n==="password"?i("div",{style:{marginTop:"var(--gap-md)"},children:i(y,{mode:"signin",onSuccess:u,onError:g})}):i("div",{style:{marginTop:"var(--gap-md)"},children:i(x,{onSuccess:u,onError:g})}),i(r,{direction:"row",justify:"end",children:i(a,{onClick:t,variant:c.GHOST,children:e("accountLinking.dismiss","Dismiss")})})]})})})}else{const t=()=>{k.removeItem("accountLinkingInfo")};return i("div",{className:o,id:l,children:i(h,{variant:p.WARNING,role:"alert","aria-live":"polite",title:e("accountLinking.title","Account Linking Required"),description:s(r,{gap:"medium",children:[i("p",{children:e("accountLinking.message",`An account with email ${d} already exists with ${n}. To link your ${m} account, please sign in with ${n} first.`)}),s(r,{direction:"row",gap:"medium",children:[i(a,{onClick:L,variant:c.PRIMARY,children:e("accountLinking.signInWith",`Sign in with ${n}`)}),i(a,{onClick:t,variant:c.GHOST,children:e("accountLinking.dismiss","Dismiss")})]})]})})})}},$=w(()=>Promise.resolve({default:S}));function R(o){return i(A,{fallback:null,children:i($,{...o})})}var W=R;export{W as default};
1
+ "use client";import{jsx as i,jsxs as s}from"react/jsx-runtime";import{Suspense as A,lazy as w}from"react";import{Alert as h,ALERT_VARIANT as k,Button as c,BUTTON_VARIANT as a,Stack as r}from"@donotdev/components";import{useTranslation as I,safeSessionStorage as p,handleError as T}from"@donotdev/core";import{EmailLinkForm as x}from"./EmailLinkForm";import y from"./EmailPasswordForm";import{useAccountLinking as E}from"../hooks/useAccountLinking";const S=({className:e="",id:l})=>{const{t:o}=I("auth"),{isRequired:v,email:d,existingProvider:n,newProvider:u,handleSignInWithExistingProvider:L}=E();if(!v)return null;if(n==="password"||n==="emailLink"){const t=()=>{p.removeItem("accountLinkingInfo")},m=()=>{},g=f=>{T(f)};return i("div",{className:e,id:l,children:i(h,{variant:k.WARNING,role:"alert","aria-live":"polite",title:o("accountLinking.title","Account Linking Required"),description:s(r,{children:[i("p",{children:o("accountLinking.message",`An account with email ${d} already exists with ${n==="password"?"email/password":"email link"}. To link your ${u} account, please sign in with your ${n==="password"?"email and password":"email link"} first.`)}),n==="password"?i("div",{style:{marginTop:"var(--gap-md)"},children:i(y,{mode:"signin",onSuccess:m,onError:g})}):i("div",{style:{marginTop:"var(--gap-md)"},children:i(x,{onSuccess:m,onError:g})}),i(r,{direction:"row",justify:"end",children:i(c,{onClick:t,variant:a.GHOST,children:o("accountLinking.dismiss","Dismiss")})})]})})})}else{const t=()=>{p.removeItem("accountLinkingInfo")};return i("div",{className:e,id:l,children:i(h,{variant:k.WARNING,role:"alert","aria-live":"polite",title:o("accountLinking.title","Account Linking Required"),description:s(r,{children:[i("p",{children:o("accountLinking.message",`An account with email ${d} already exists with ${n}. To link your ${u} account, please sign in with ${n} first.`)}),s(r,{direction:"row",children:[i(c,{onClick:L,variant:a.PRIMARY,children:o("accountLinking.signInWith",`Sign in with ${n}`)}),i(c,{onClick:t,variant:a.GHOST,children:o("accountLinking.dismiss","Dismiss")})]})]})})})}},$=w(()=>Promise.resolve({default:S}));function R(e){return i(A,{fallback:null,children:i($,{...e})})}var W=R;export{W as default};
@@ -1 +1 @@
1
- "use client";import{jsx as t,jsxs as c,Fragment as f}from"react/jsx-runtime";import{Trash2 as x}from"lucide-react";import{useState as A}from"react";import{Dialog as g,Button as d,BUTTON_VARIANT as s,Input as R,Label as w,Checkbox as k,Alert as b,ALERT_VARIANT as C,Stack as r,Text as v,List as T}from"@donotdev/components";import{useTranslation as y}from"@donotdev/core";function N({open:u,isLoading:n,error:l,onReauth:h,onCancel:a}){const{t:e}=y("auth"),[o,m]=A(""),p=async()=>{await h(o)};return t(g,{open:u,onOpenChange:i=>!i&&a(),title:e("deleteAccount.reauth.title","Confirm Your Identity"),description:e("deleteAccount.reauth.description","For security, please re-enter your password to continue."),footer:c(f,{children:[t(d,{variant:s.OUTLINE,onClick:a,disabled:n,children:e("deleteAccount.reauth.cancel","Cancel")}),t(d,{variant:s.DEFAULT,onClick:p,disabled:n||!o,children:n?e("deleteAccount.reauth.verifying","Verifying..."):e("deleteAccount.reauth.continue","Continue")})]}),children:c(r,{gap:"medium",children:[c(r,{gap:"tight",children:[t(w,{htmlFor:"reauth-password",children:e("deleteAccount.reauth.password","Password")}),t(R,{id:"reauth-password",type:"password",value:o,onChange:i=>m(i.target.value),disabled:n,placeholder:e("deleteAccount.reauth.passwordPlaceholder","Enter your password"),required:!0})]}),l&&t(b,{variant:C.ERROR,description:l})]})})}function U({open:u,isLoading:n,error:l,onConfirm:h,onCancel:a}){const{t:e}=y("auth"),[o,m]=A(!1),p=async()=>{o&&await h()};return t(g,{open:u,onOpenChange:i=>!i&&a(),"data-content-size":"text",title:e("deleteAccount.confirm.title","Delete Your Account?"),description:e("deleteAccount.confirm.description","This action cannot be undone. This will permanently delete your account."),footer:c(f,{children:[t(d,{variant:s.OUTLINE,onClick:a,disabled:n,children:e("deleteAccount.confirm.cancel","Cancel")}),t(d,{variant:s.DESTRUCTIVE,icon:x,onClick:p,disabled:n||!o,children:n?e("deleteAccount.confirm.deleting","Deleting..."):e("deleteAccount.confirm.delete","Delete My Account")})]}),children:c(r,{gap:"large",children:[c(r,{gap:"medium",children:[t(v,{as:"h4",level:"h4",children:e("deleteAccount.confirm.whatDeleted","What will be deleted:")}),t(T,{items:[e("deleteAccount.confirm.credentials","Your account and authentication credentials"),e("deleteAccount.confirm.profile","Your profile information"),e("deleteAccount.confirm.oauth","All connected OAuth providers"),e("deleteAccount.confirm.subscriptions","Active subscriptions (will be canceled)")]})]}),c(r,{gap:"medium",children:[t(v,{as:"h4",level:"h4",children:e("deleteAccount.confirm.whatKept","What will be kept (anonymized):")}),t(T,{items:[e("deleteAccount.confirm.billing","Billing history for tax/accounting purposes"),e("deleteAccount.confirm.invoices","Past invoices and transaction records")]})]}),c(r,{direction:"row",align:"start",gap:"medium",children:[t(k,{id:"confirm-delete",checked:o,onCheckedChange:i=>m(i===!0)}),t(w,{htmlFor:"confirm-delete",children:e("deleteAccount.confirm.checkbox","I understand this action cannot be undone")})]}),l&&t(b,{variant:C.ERROR,description:l})]})})}export{U as ConfirmDeleteDialog,N as ReauthDialog};
1
+ "use client";import{jsx as t,jsxs as c,Fragment as f}from"react/jsx-runtime";import{Trash2 as x}from"lucide-react";import{useState as A}from"react";import{Dialog as w,Button as d,BUTTON_VARIANT as s,Input as R,Label as b,Checkbox as k,Alert as g,ALERT_VARIANT as C,Stack as r,Text as v,List as T}from"@donotdev/components";import{useTranslation as y}from"@donotdev/core";function N({open:u,isLoading:n,error:l,onReauth:h,onCancel:a}){const{t:e}=y("auth"),[o,m]=A(""),p=async()=>{await h(o)};return t(w,{open:u,onOpenChange:i=>!i&&a(),title:e("deleteAccount.reauth.title","Confirm Your Identity"),description:e("deleteAccount.reauth.description","For security, please re-enter your password to continue."),footer:c(f,{children:[t(d,{variant:s.OUTLINE,onClick:a,disabled:n,children:e("deleteAccount.reauth.cancel","Cancel")}),t(d,{variant:s.DEFAULT,onClick:p,disabled:n||!o,children:n?e("deleteAccount.reauth.verifying","Verifying..."):e("deleteAccount.reauth.continue","Continue")})]}),children:c(r,{children:[c(r,{gap:"tight",children:[t(b,{htmlFor:"reauth-password",children:e("deleteAccount.reauth.password","Password")}),t(R,{id:"reauth-password",type:"password",value:o,onChange:i=>m(i.target.value),disabled:n,placeholder:e("deleteAccount.reauth.passwordPlaceholder","Enter your password"),required:!0})]}),l&&t(g,{variant:C.ERROR,description:l})]})})}function U({open:u,isLoading:n,error:l,onConfirm:h,onCancel:a}){const{t:e}=y("auth"),[o,m]=A(!1),p=async()=>{o&&await h()};return t(w,{open:u,onOpenChange:i=>!i&&a(),"data-content-size":"text",title:e("deleteAccount.confirm.title","Delete Your Account?"),description:e("deleteAccount.confirm.description","This action cannot be undone. This will permanently delete your account."),footer:c(f,{children:[t(d,{variant:s.OUTLINE,onClick:a,disabled:n,children:e("deleteAccount.confirm.cancel","Cancel")}),t(d,{variant:s.DESTRUCTIVE,icon:x,onClick:p,disabled:n||!o,children:n?e("deleteAccount.confirm.deleting","Deleting..."):e("deleteAccount.confirm.delete","Delete My Account")})]}),children:c(r,{gap:"large",children:[c(r,{children:[t(v,{as:"h4",level:"h4",children:e("deleteAccount.confirm.whatDeleted","What will be deleted:")}),t(T,{items:[e("deleteAccount.confirm.credentials","Your account and authentication credentials"),e("deleteAccount.confirm.profile","Your profile information"),e("deleteAccount.confirm.oauth","All connected OAuth providers"),e("deleteAccount.confirm.subscriptions","Active subscriptions (will be canceled)")]})]}),c(r,{children:[t(v,{as:"h4",level:"h4",children:e("deleteAccount.confirm.whatKept","What will be kept (anonymized):")}),t(T,{items:[e("deleteAccount.confirm.billing","Billing history for tax/accounting purposes"),e("deleteAccount.confirm.invoices","Past invoices and transaction records")]})]}),c(r,{direction:"row",align:"start",children:[t(k,{id:"confirm-delete",checked:o,onCheckedChange:i=>m(i===!0)}),t(b,{htmlFor:"confirm-delete",children:e("deleteAccount.confirm.checkbox","I understand this action cannot be undone")})]}),l&&t(g,{variant:C.ERROR,description:l})]})})}export{U as ConfirmDeleteDialog,N as ReauthDialog};
@@ -1 +1 @@
1
- "use client";import{jsx as e,jsxs as n}from"react/jsx-runtime";import{Mail as m,CheckCircle as v}from"lucide-react";import{Button as d,BUTTON_VARIANT as y,Input as E,Label as S,Alert as x,ALERT_VARIANT as A,Spinner as R,Stack as a}from"@donotdev/components";import{useTranslation as b}from"@donotdev/core";import{useEmailLinkForm as T}from"../hooks/useEmailLinkForm";function N({className:l="",onSuccess:s,onError:c,actionCodeSettings:u}){const{t:i}=b("auth"),{email:t,setEmail:h,isLoading:r,isSent:g,error:o,handleSendLink:p,handleResend:k,canSubmit:f}=T({onSuccess:s,onError:c,actionCodeSettings:u});return g?n(a,{gap:"medium",className:l,children:[n("div",{style:{textAlign:"center"},children:[e(v,{style:{width:"var(--icon-touch)",height:"var(--icon-touch)",marginBottom:"var(--gap-md)",marginLeft:"auto",marginRight:"auto",color:"var(--primary)"}}),e("h3",{style:{marginBottom:"var(--gap-sm)",fontSize:"var(--font-size-lg)",fontWeight:600,color:"var(--foreground)"},children:i("emailLink.checkEmail","Check Your Email")}),e("p",{style:{marginBottom:"var(--gap-md)",color:"var(--muted-foreground)"},children:i("emailLink.sentMessage",`We've sent a sign-in link to ${t}. Click the link in your email to complete sign-in.`)})]}),e(a,{direction:"row",justify:"center",gap:"medium",children:e(d,{variant:y.OUTLINE,onClick:k,icon:m,iconEnd:!1,children:i("emailLink.resend","Resend Link")})})]}):e("form",{onSubmit:p,className:l,children:n(a,{gap:"medium",children:[n(a,{gap:"tight",children:[e(S,{htmlFor:"email",children:i("emailLink.emailLabel","Email Address")}),e(E,{id:"email",type:"email",value:t,onChange:L=>h(L.target.value),placeholder:i("emailLink.emailPlaceholder","Enter your email address"),required:!0,disabled:r,className:"dndev-w-full"})]}),o&&e(x,{variant:A.ERROR,description:o}),e(d,{type:"submit",disabled:!f,icon:r?e(R,{"aria-label":"Loading"}):m,iconEnd:!1,className:"dndev-w-full",children:r?i("emailLink.sending","Sending Link..."):i("emailLink.sendLink","Send Sign-In Link")}),e("p",{style:{fontSize:"var(--font-size-sm)",color:"var(--muted-foreground)",textAlign:"center"},children:i("emailLink.helpText","We'll send you a secure link to sign in without a password.")})]})})}var _=N;export{N as EmailLinkForm,_ as default};
1
+ "use client";import{jsx as e,jsxs as n}from"react/jsx-runtime";import{Mail as s,CheckCircle as v}from"lucide-react";import{Button as m,BUTTON_VARIANT as y,Input as E,Label as S,Alert as x,ALERT_VARIANT as A,Spinner as R,Stack as r}from"@donotdev/components";import{useTranslation as b}from"@donotdev/core";import{useEmailLinkForm as T}from"../hooks/useEmailLinkForm";function N({className:l="",onSuccess:d,onError:c,actionCodeSettings:u}){const{t:i}=b("auth"),{email:t,setEmail:h,isLoading:a,isSent:g,error:o,handleSendLink:k,handleResend:f,canSubmit:p}=T({onSuccess:d,onError:c,actionCodeSettings:u});return g?n(r,{className:l,children:[n("div",{style:{textAlign:"center"},children:[e(v,{style:{width:"var(--icon-touch)",height:"var(--icon-touch)",marginBottom:"var(--gap-md)",marginLeft:"auto",marginRight:"auto",color:"var(--primary)"}}),e("h3",{style:{marginBottom:"var(--gap-sm)",fontSize:"var(--font-size-lg)",fontWeight:600,color:"var(--foreground)"},children:i("emailLink.checkEmail","Check Your Email")}),e("p",{style:{marginBottom:"var(--gap-md)",color:"var(--muted-foreground)"},children:i("emailLink.sentMessage",`We've sent a sign-in link to ${t}. Click the link in your email to complete sign-in.`)})]}),e(r,{direction:"row",justify:"center",children:e(m,{variant:y.OUTLINE,onClick:f,icon:s,iconEnd:!1,children:i("emailLink.resend","Resend Link")})})]}):e("form",{onSubmit:k,className:l,children:n(r,{children:[n(r,{gap:"tight",children:[e(S,{htmlFor:"email",children:i("emailLink.emailLabel","Email Address")}),e(E,{id:"email",type:"email",value:t,onChange:L=>h(L.target.value),placeholder:i("emailLink.emailPlaceholder","Enter your email address"),required:!0,disabled:a,className:"dndev-w-full"})]}),o&&e(x,{variant:A.ERROR,description:o}),e(m,{type:"submit",disabled:!p,icon:a?e(R,{"aria-label":"Loading"}):s,iconEnd:!1,className:"dndev-w-full",children:a?i("emailLink.sending","Sending Link..."):i("emailLink.sendLink","Send Sign-In Link")}),e("p",{style:{fontSize:"var(--font-size-sm)",color:"var(--muted-foreground)",textAlign:"center"},children:i("emailLink.helpText","We'll send you a secure link to sign in without a password.")})]})})}var _=N;export{N as EmailLinkForm,_ as default};
@@ -1 +1 @@
1
- "use client";import{jsx as r,jsxs as o}from"react/jsx-runtime";import*as L from"firebase/auth";import{Info as D}from"lucide-react";import{useState as u}from"react";import{useForm as Y,Controller as v,useWatch as k}from"react-hook-form";import{Alert as P,ALERT_VARIANT as R,Button as p,BUTTON_VARIANT as w,Checkbox as Z,HoverCard as J,Input as Q,Label as X,PasswordInput as F,Stack as t,Text as l,cn as ee}from"@donotdev/components";import{useTranslation as re}from"@donotdev/core";import{getFirebaseSDK as se}from"@donotdev/firebase";import{useAuth as g}from"../useAuth";import{PasswordStrengthIndicator as ae}from"./PasswordStrengthIndicator";function ie({mode:M="signin",onSuccess:_,onError:x,className:q=""}){const{t:e}=re("auth"),T=g("signInWithEmail"),U=g("createUserWithEmail"),O=g("sendPasswordResetEmail"),W=g("isAvailable"),V=g("loading"),[y,E]=u(M),d=y==="signup",[S,j]=u(!1),[$,H]=u(""),[c,I]=u(!1),[h,A]=u(!1),{control:m,handleSubmit:K,formState:{errors:a,isSubmitting:z},setError:b}=Y({mode:"onChange",defaultValues:{email:"",password:"",confirmPassword:""}}),C=k({control:m,name:"password"}),f=k({control:m,name:"email"}),B=async s=>{try{y==="signin"?(await se().setPersistence(S?L.browserLocalPersistence:L.browserSessionPersistence),await T(s.email,s.password)):await U(s.email,s.password),_?.(void 0)}catch(i){const N=i instanceof Error?i.message:String(i);b("root",{message:N}),x?.(i instanceof Error?i:new Error(N))}},G=async()=>{if(!f||!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(f)){b("email",{message:e("emailRequired","Email is required")});return}I(!0);try{await O(f),A(!0),H(f)}catch(s){const i=s instanceof Error?s.message:String(s);b("root",{message:i})}finally{I(!1)}};if(!W)return r("div",{className:q,children:r(P,{variant:R.WARNING,title:e("unavailable.title","Authentication Unavailable"),description:e("unavailable.description","Please accept cookies to enable authentication.")})});const n=V||z;return r("form",{onSubmit:K(B),className:ee("dndev-auth-form",q),noValidate:!0,children:o(t,{gap:"medium",children:[a.root&&r(P,{variant:R.ERROR,description:a.root.message}),h&&r(P,{variant:R.SUCCESS,title:e("forgotPassword.sent","Password reset email sent"),description:e("forgotPassword.checkEmail",`Check your email at ${$} for password reset instructions.`)}),r(v,{name:"email",control:m,rules:{required:e("emailRequired","Email is required"),pattern:{value:/^[^\s@]+@[^\s@]+\.[^\s@]+$/,message:e("emailInvalid","Invalid email address")}},render:({field:s})=>o(t,{gap:"tight",children:[r(Q,{...s,type:"email",label:e("email","Email"),placeholder:e("emailPlaceholder","Enter your email"),disabled:n||c,"aria-invalid":!!a.email,"aria-describedby":a.email?"email-error":void 0,className:"dndev-w-full","data-variant":a.email?"destructive":void 0,onChange:i=>{s.onChange(i),h&&A(!1)}}),a.email&&r(l,{as:"span",level:"caption",variant:"destructive",id:"email-error",role:"alert",children:a.email.message})]})}),r(v,{name:"password",control:m,rules:{required:e("passwordRequired","Password is required"),minLength:{value:8,message:e("passwordMinLength","Password must be at least 8 characters")},validate:s=>{if(!s)return!0;if(d){if(!/[A-Z]/.test(s))return e("passwordRequirement.uppercase","Password must contain at least one uppercase letter");if(!/[a-z]/.test(s))return e("passwordRequirement.lowercase","Password must contain at least one lowercase letter");if(!/[0-9]/.test(s))return e("passwordRequirement.number","Password must contain at least one number")}return!0}},render:({field:s})=>{const i=`password-${s.name}`;return o(t,{gap:"tight",children:[r(F,{...s,id:i,label:e("password","Password"),placeholder:e("passwordPlaceholder","Enter your password"),disabled:n||c,"aria-invalid":!!a.password,"aria-describedby":a.password?"password-error":void 0,className:"dndev-w-full","data-variant":a.password?"destructive":void 0}),a.password&&r(l,{as:"span",level:"caption",variant:"destructive",id:"password-error",role:"alert",children:a.password.message})]})}}),d&&r(v,{name:"confirmPassword",control:m,rules:{required:e("confirmPasswordRequired","Please confirm your password"),validate:s=>s!==C?e("confirmPasswordMismatch","Passwords do not match"):!0},render:({field:s})=>o(t,{gap:"tight",children:[r(F,{...s,label:e("confirmPassword","Confirm Password"),placeholder:e("confirmPasswordPlaceholder","Re-enter your password"),disabled:n,"aria-invalid":!!a.confirmPassword,"aria-describedby":a.confirmPassword?"confirm-password-error":void 0,className:"dndev-w-full","data-variant":a.confirmPassword?"destructive":void 0}),a.confirmPassword&&r(l,{as:"span",level:"caption",variant:"destructive",id:"confirm-password-error",role:"alert",children:a.confirmPassword.message})]})}),d&&r(ae,{password:C||"",minLength:8,showRequirements:!1}),d&&r(J,{trigger:r(p,{type:"button",variant:w.GHOST,className:"dndev-w-fit dndev-p-0 dndev-h-auto",style:{minHeight:"auto",padding:0},children:o(t,{direction:"row",align:"center",gap:"tight",children:[r(l,{as:"span",level:"caption",variant:"muted",children:e("passwordRequirements","Password requirements")}),r(D,{className:"dndev-size-xs"})]})}),side:"bottom",align:"start",children:o(t,{gap:"tight",className:"dndev-text-sm",children:[r(l,{as:"strong",level:"small",children:e("passwordRequirements.title","Password Requirements")}),o(t,{gap:"tight",as:"ul",className:"dndev-m-0 dndev-ps-md",children:[r("li",{children:e("passwordRequirement.length","At least 8 characters")}),r("li",{children:e("passwordRequirement.uppercase","One uppercase letter")}),r("li",{children:e("passwordRequirement.lowercase","One lowercase letter")}),r("li",{children:e("passwordRequirement.number","One number")}),r("li",{children:e("passwordRequirement.special","One special character (!@#$%^&*)")})]})]})}),!d&&!h&&o(t,{direction:"row",gap:"tight",align:"center",children:[r(Z,{id:"remember-me",checked:S,onCheckedChange:s=>j(s===!0),disabled:n||c}),r(X,{htmlFor:"remember-me",children:e("rememberMe","Remember me")})]}),r(p,{type:"submit",variant:w.PRIMARY,disabled:n,fullWidth:!0,children:n?e("loading","Loading..."):d?e("actions.sign_up_submit","Sign Up"):e("actions.sign_in_submit","Sign In")}),!d&&!h&&o(t,{direction:"row",gap:"tight",justify:"center",align:"center",children:[r(p,{type:"button",variant:w.LINK,disabled:n||c,onClick:G,children:c?e("loading","Loading..."):e("forgotPassword","Forgot password?")}),r(l,{as:"span",variant:"muted",children:"|"}),r(p,{type:"button",variant:w.LINK,disabled:n,onClick:()=>E("signup"),children:e("actions.sign_up_submit","Sign Up")})]}),d&&r(t,{align:"center",children:r(p,{type:"button",variant:w.LINK,disabled:n,onClick:()=>E("signin"),children:e("alreadyHaveAccount","Already have an account? Sign In")})})]})})}var we=ie;export{we as default};
1
+ "use client";import{jsx as r,jsxs as o}from"react/jsx-runtime";import*as L from"firebase/auth";import{Info as D}from"lucide-react";import{useState as u}from"react";import{useForm as Y,Controller as v,useWatch as k}from"react-hook-form";import{Alert as P,ALERT_VARIANT as R,Button as p,BUTTON_VARIANT as w,Checkbox as Z,HoverCard as J,Input as Q,Label as X,PasswordInput as F,Stack as t,Text as l,cn as ee}from"@donotdev/components";import{useTranslation as re}from"@donotdev/core";import{getFirebaseSDK as se}from"@donotdev/firebase";import{useAuth as g}from"../useAuth";import{PasswordStrengthIndicator as ae}from"./PasswordStrengthIndicator";function ie({mode:M="signin",onSuccess:_,onError:x,className:q=""}){const{t:e}=re("auth"),T=g("signInWithEmail"),U=g("createUserWithEmail"),O=g("sendPasswordResetEmail"),W=g("isAvailable"),V=g("loading"),[y,E]=u(M),d=y==="signup",[S,j]=u(!1),[$,H]=u(""),[c,I]=u(!1),[h,A]=u(!1),{control:m,handleSubmit:K,formState:{errors:a,isSubmitting:z},setError:b}=Y({mode:"onChange",defaultValues:{email:"",password:"",confirmPassword:""}}),C=k({control:m,name:"password"}),f=k({control:m,name:"email"}),B=async s=>{try{y==="signin"?(await se().setPersistence(S?L.browserLocalPersistence:L.browserSessionPersistence),await T(s.email,s.password)):await U(s.email,s.password),_?.(void 0)}catch(i){const N=i instanceof Error?i.message:String(i);b("root",{message:N}),x?.(i instanceof Error?i:new Error(N))}},G=async()=>{if(!f||!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(f)){b("email",{message:e("emailRequired","Email is required")});return}I(!0);try{await O(f),A(!0),H(f)}catch(s){const i=s instanceof Error?s.message:String(s);b("root",{message:i})}finally{I(!1)}};if(!W)return r("div",{className:q,children:r(P,{variant:R.WARNING,title:e("unavailable.title","Authentication Unavailable"),description:e("unavailable.description","Please accept cookies to enable authentication.")})});const n=V||z;return r("form",{onSubmit:K(B),className:ee("dndev-auth-form",q),noValidate:!0,children:o(t,{children:[a.root&&r(P,{variant:R.ERROR,description:a.root.message}),h&&r(P,{variant:R.SUCCESS,title:e("forgotPassword.sent","Password reset email sent"),description:e("forgotPassword.checkEmail",`Check your email at ${$} for password reset instructions.`)}),r(v,{name:"email",control:m,rules:{required:e("emailRequired","Email is required"),pattern:{value:/^[^\s@]+@[^\s@]+\.[^\s@]+$/,message:e("emailInvalid","Invalid email address")}},render:({field:s})=>o(t,{gap:"tight",children:[r(Q,{...s,type:"email",label:e("email","Email"),placeholder:e("emailPlaceholder","Enter your email"),disabled:n||c,"aria-invalid":!!a.email,"aria-describedby":a.email?"email-error":void 0,className:"dndev-w-full","data-variant":a.email?"destructive":void 0,onChange:i=>{s.onChange(i),h&&A(!1)}}),a.email&&r(l,{as:"span",level:"caption",variant:"destructive",id:"email-error",role:"alert",children:a.email.message})]})}),r(v,{name:"password",control:m,rules:{required:e("passwordRequired","Password is required"),minLength:{value:8,message:e("passwordMinLength","Password must be at least 8 characters")},validate:s=>{if(!s)return!0;if(d){if(!/[A-Z]/.test(s))return e("passwordRequirement.uppercase","Password must contain at least one uppercase letter");if(!/[a-z]/.test(s))return e("passwordRequirement.lowercase","Password must contain at least one lowercase letter");if(!/[0-9]/.test(s))return e("passwordRequirement.number","Password must contain at least one number")}return!0}},render:({field:s})=>{const i=`password-${s.name}`;return o(t,{gap:"tight",children:[r(F,{...s,id:i,label:e("password","Password"),placeholder:e("passwordPlaceholder","Enter your password"),disabled:n||c,"aria-invalid":!!a.password,"aria-describedby":a.password?"password-error":void 0,className:"dndev-w-full","data-variant":a.password?"destructive":void 0}),a.password&&r(l,{as:"span",level:"caption",variant:"destructive",id:"password-error",role:"alert",children:a.password.message})]})}}),d&&r(v,{name:"confirmPassword",control:m,rules:{required:e("confirmPasswordRequired","Please confirm your password"),validate:s=>s!==C?e("confirmPasswordMismatch","Passwords do not match"):!0},render:({field:s})=>o(t,{gap:"tight",children:[r(F,{...s,label:e("confirmPassword","Confirm Password"),placeholder:e("confirmPasswordPlaceholder","Re-enter your password"),disabled:n,"aria-invalid":!!a.confirmPassword,"aria-describedby":a.confirmPassword?"confirm-password-error":void 0,className:"dndev-w-full","data-variant":a.confirmPassword?"destructive":void 0}),a.confirmPassword&&r(l,{as:"span",level:"caption",variant:"destructive",id:"confirm-password-error",role:"alert",children:a.confirmPassword.message})]})}),d&&r(ae,{password:C||"",minLength:8,showRequirements:!1}),d&&r(J,{trigger:r(p,{type:"button",variant:w.GHOST,className:"dndev-w-fit dndev-p-0 dndev-h-auto",style:{minHeight:"auto",padding:0},children:o(t,{direction:"row",align:"center",gap:"tight",children:[r(l,{as:"span",level:"caption",variant:"muted",children:e("passwordRequirements","Password requirements")}),r(D,{className:"dndev-size-xs"})]})}),side:"bottom",align:"start",children:o(t,{gap:"tight",className:"dndev-text-sm",children:[r(l,{as:"strong",level:"small",children:e("passwordRequirements.title","Password Requirements")}),o(t,{gap:"tight",as:"ul",className:"dndev-m-0 dndev-ps-md",children:[r("li",{children:e("passwordRequirement.length","At least 8 characters")}),r("li",{children:e("passwordRequirement.uppercase","One uppercase letter")}),r("li",{children:e("passwordRequirement.lowercase","One lowercase letter")}),r("li",{children:e("passwordRequirement.number","One number")}),r("li",{children:e("passwordRequirement.special","One special character (!@#$%^&*)")})]})]})}),!d&&!h&&o(t,{direction:"row",gap:"tight",align:"center",children:[r(Z,{id:"remember-me",checked:S,onCheckedChange:s=>j(s===!0),disabled:n||c}),r(X,{htmlFor:"remember-me",children:e("rememberMe","Remember me")})]}),r(p,{type:"submit",variant:w.PRIMARY,disabled:n,fullWidth:!0,children:n?e("loading","Loading..."):d?e("actions.sign_up_submit","Sign Up"):e("actions.sign_in_submit","Sign In")}),!d&&!h&&o(t,{direction:"row",gap:"tight",justify:"center",align:"center",children:[r(p,{type:"button",variant:w.LINK,disabled:n||c,onClick:G,children:c?e("loading","Loading..."):e("forgotPassword","Forgot password?")}),r(l,{as:"span",variant:"muted",children:"|"}),r(p,{type:"button",variant:w.LINK,disabled:n,onClick:()=>E("signup"),children:e("actions.sign_up_submit","Sign Up")})]}),d&&r(t,{align:"center",children:r(p,{type:"button",variant:w.LINK,disabled:n,onClick:()=>E("signin"),children:e("alreadyHaveAccount","Already have an account? Sign In")})})]})})}var we=ie;export{we as default};
@@ -1 +1 @@
1
- "use client";import{jsx as r,jsxs as o}from"react/jsx-runtime";import{Card as h,Button as V,BUTTON_VARIANT as v,Alert as y,Spinner as A,Stack as d}from"@donotdev/components";import{useTranslation as b,handleError as I}from"@donotdev/core";import{useAuth as a}from"../useAuth";function M({verifyButtonText:S,successMessage:x,sendingMessage:j,alreadyVerifiedMessage:E,notSignedInMessage:T,errorMessage:w,id:c}){const{t:i}=b("auth"),n=a("user"),e=a("emailVerification"),u=a("sendEmailVerification"),s=n?.id,t=c||`email-verification-${Math.random().toString(36).slice(2,9)}`,l=`${t}-heading`,f=`${t}-button`,m=async()=>{if(!(!n||!s))try{await u()}catch(p){I(p)}};if(!n||!s)return null;const g=()=>{if(e.status!=="pending"&&e.status==="error")return"error"};return r(h,{id:t,title:r("span",{id:l,children:i("emailVerification.title")}),children:o(d,{gap:"medium",children:[o(d,{direction:"row",justify:"between",align:"center",children:[r("p",{style:{fontSize:"var(--font-size-sm)",color:"var(--muted-foreground)"},children:i("emailVerification.status.unknown")}),r(V,{id:f,onClick:m,disabled:e.status==="pending","aria-busy":e.status==="pending",variant:v.PRIMARY,icon:e.status==="pending"?r(A,{"aria-label":"Loading"}):void 0,iconEnd:!1,children:e.status==="pending"?i("status.verifying"):i("buttons.verify","Verify")})]}),e.status!=="verified"&&r(y,{variant:g(),title:e.status==="error"?i("aria.errorAlert"):i("status.verifying"),description:e.status==="error"?("error"in e?e.error:void 0)||i("emailVerification.error","An error occurred"):i("emailVerification.sending","Sending verification email...")})]})})}var $=M;export{$ as default};
1
+ "use client";import{jsx as r,jsxs as o}from"react/jsx-runtime";import{Card as h,Button as V,BUTTON_VARIANT as v,Alert as y,Spinner as A,Stack as d}from"@donotdev/components";import{useTranslation as b,handleError as I}from"@donotdev/core";import{useAuth as a}from"../useAuth";function M({verifyButtonText:S,successMessage:x,sendingMessage:j,alreadyVerifiedMessage:E,notSignedInMessage:T,errorMessage:w,id:c}){const{t:i}=b("auth"),n=a("user"),e=a("emailVerification"),u=a("sendEmailVerification"),s=n?.id,t=c||`email-verification-${Math.random().toString(36).slice(2,9)}`,l=`${t}-heading`,f=`${t}-button`,g=async()=>{if(!(!n||!s))try{await u()}catch(p){I(p)}};if(!n||!s)return null;const m=()=>{if(e.status!=="pending"&&e.status==="error")return"error"};return r(h,{id:t,title:r("span",{id:l,children:i("emailVerification.title")}),children:o(d,{children:[o(d,{direction:"row",justify:"between",align:"center",children:[r("p",{style:{fontSize:"var(--font-size-sm)",color:"var(--muted-foreground)"},children:i("emailVerification.status.unknown")}),r(V,{id:f,onClick:g,disabled:e.status==="pending","aria-busy":e.status==="pending",variant:v.PRIMARY,icon:e.status==="pending"?r(A,{"aria-label":"Loading"}):void 0,iconEnd:!1,children:e.status==="pending"?i("status.verifying"):i("buttons.verify","Verify")})]}),e.status!=="verified"&&r(y,{variant:m(),title:e.status==="error"?i("aria.errorAlert"):i("status.verifying"),description:e.status==="error"?("error"in e?e.error:void 0)||i("emailVerification.error","An error occurred"):i("emailVerification.sending","Sending verification email...")})]})})}var $=M;export{$ as default};
@@ -1 +1 @@
1
- "use client";import{jsx as r,jsxs as o,Fragment as x}from"react/jsx-runtime";import{Stack as p}from"@donotdev/components";import{hasTierAccess as g}from"@donotdev/core";import{useAuth as n}from"../useAuth";import{AuthFallback as z}from"./AuthFallback";function R({requiredTier:e,userTier:i}){return r("div",{className:"dndev-surface","data-variant":"default","data-shadow":"sm","data-radius":"lg",style:{padding:"var(--gap-md)",border:"1px solid var(--border)",backgroundColor:"var(--muted)"},children:o(p,{direction:"row",align:"center",gap:"medium",children:[r("span",{style:{color:"var(--accent)"},children:"\u{1F512}"}),o("div",{children:[r("p",{style:{fontWeight:500,fontSize:"var(--font-size-base)",color:"var(--foreground)"},children:e==="pro"?"Pro Feature":"Premium Feature"}),o("p",{style:{fontSize:"var(--font-size-sm)",color:"var(--muted-foreground)"},children:["Upgrade to ",e," to access this feature",i&&` (current: ${i})`]})]})]})})}function v({requiredRole:e,userRole:i}){const s=Array.isArray(e)?e.join(" or "):e;return r("div",{className:"dndev-surface","data-variant":"destructive","data-shadow":"sm","data-radius":"lg",style:{padding:"var(--gap-md)",border:"1px solid var(--destructive)",backgroundColor:"var(--muted)"},children:o(p,{direction:"row",align:"center",gap:"medium",children:[r("span",{style:{color:"var(--destructive)"},children:"\u{1F6AB}"}),o("div",{children:[r("p",{style:{fontWeight:500,fontSize:"var(--font-size-base)",color:"var(--destructive-foreground)"},children:"Access Denied"}),o("p",{style:{fontSize:"var(--font-size-sm)",color:"var(--muted-foreground)"},children:["This feature requires ",s," role",i&&` (current: ${i})`]})]})]})})}function b(){return r("div",{className:"dndev-surface","data-variant":"default","data-shadow":"sm","data-radius":"lg",style:{padding:"var(--gap-md)",border:"1px solid var(--border)",backgroundColor:"var(--muted)"},children:o(p,{direction:"row",align:"center",gap:"medium",children:[r("span",{style:{color:"var(--accent)"},children:"\u23F0"}),o("div",{children:[r("p",{style:{fontWeight:500,fontSize:"var(--font-size-base)",color:"var(--foreground)"},children:"Subscription Required"}),r("p",{style:{fontSize:"var(--font-size-sm)",color:"var(--muted-foreground)"},children:"This feature requires an active subscription"})]})]})})}function T({children:e,role:i,tier:s,subscription:a,validate:d,fallback:t,message:h,showUpgradePrompt:m=!0,showLoginPrompt:l=!0}){const y=n("user"),A=n("loading"),S=n("userProfile"),f=n("userSubscription"),D=n("hasRole"),P=n("hasTier"),u=S?.role,c=f?.tier;return A?r("div",{style:{height:"2rem",borderRadius:"var(--radius)",backgroundColor:"var(--muted)",animation:"pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite"}}):!y&&(i||s||a)?l?r(z,{message:h||"Please sign in to access this feature"}):null:i&&!(Array.isArray(i)?i:[i]).some(q=>u===q)?t?r(t,{requiredRole:i,userRole:u||void 0}):r(v,{requiredRole:i,userRole:u||void 0}):s&&!g(c,s)?t?r(t,{requiredTier:s,userTier:c||"free"}):m?r(R,{requiredTier:s,userTier:c||"free"}):null:a&&!f?.isActive?t?r(t,{requiresSubscription:!0,hasSubscription:f?.isActive||!1}):r(b,{}):d&&u&&c&&!d(u,c)?t?r(t,{userRole:u,userTier:c}):r(v,{userRole:u}):r(x,{children:e})}function G(e){const i=n("user"),s=n("userProfile"),a=n("userSubscription"),d=s?.role,t=a?.tier;return!(!i&&(e.role||e.tier||e.subscription)||e.role&&!(Array.isArray(e.role)?e.role:[e.role]).some(l=>d===l)||e.tier&&!g(t,e.tier)||e.subscription&&!a?.isActive||e.validate&&d&&t&&!e.validate(d,t))}function U(e,i){return a=>r(T,{...i,children:r(e,{...a})})}export{v as AccessDenied,T as FeatureGuard,b as SubscriptionExpired,R as UpgradePrompt,G as useCanAccessFeature,U as withFeatureGuard};
1
+ "use client";import{jsx as r,jsxs as o,Fragment as x}from"react/jsx-runtime";import{Stack as p}from"@donotdev/components";import{hasTierAccess as g}from"@donotdev/core";import{useAuth as n}from"../useAuth";import{AuthFallback as z}from"./AuthFallback";function R({requiredTier:e,userTier:i}){return r("div",{className:"dndev-surface","data-variant":"default","data-shadow":"sm","data-radius":"lg",style:{padding:"var(--gap-md)",border:"1px solid var(--border)",backgroundColor:"var(--muted)"},children:o(p,{direction:"row",align:"center",children:[r("span",{style:{color:"var(--accent)"},children:"\u{1F512}"}),o("div",{children:[r("p",{style:{fontWeight:500,fontSize:"var(--font-size-base)",color:"var(--foreground)"},children:e==="pro"?"Pro Feature":"Premium Feature"}),o("p",{style:{fontSize:"var(--font-size-sm)",color:"var(--muted-foreground)"},children:["Upgrade to ",e," to access this feature",i&&` (current: ${i})`]})]})]})})}function v({requiredRole:e,userRole:i}){const s=Array.isArray(e)?e.join(" or "):e;return r("div",{className:"dndev-surface","data-variant":"destructive","data-shadow":"sm","data-radius":"lg",style:{padding:"var(--gap-md)",border:"1px solid var(--destructive)",backgroundColor:"var(--muted)"},children:o(p,{direction:"row",align:"center",children:[r("span",{style:{color:"var(--destructive)"},children:"\u{1F6AB}"}),o("div",{children:[r("p",{style:{fontWeight:500,fontSize:"var(--font-size-base)",color:"var(--destructive-foreground)"},children:"Access Denied"}),o("p",{style:{fontSize:"var(--font-size-sm)",color:"var(--muted-foreground)"},children:["This feature requires ",s," role",i&&` (current: ${i})`]})]})]})})}function b(){return r("div",{className:"dndev-surface","data-variant":"default","data-shadow":"sm","data-radius":"lg",style:{padding:"var(--gap-md)",border:"1px solid var(--border)",backgroundColor:"var(--muted)"},children:o(p,{direction:"row",align:"center",children:[r("span",{style:{color:"var(--accent)"},children:"\u23F0"}),o("div",{children:[r("p",{style:{fontWeight:500,fontSize:"var(--font-size-base)",color:"var(--foreground)"},children:"Subscription Required"}),r("p",{style:{fontSize:"var(--font-size-sm)",color:"var(--muted-foreground)"},children:"This feature requires an active subscription"})]})]})})}function T({children:e,role:i,tier:s,subscription:a,validate:d,fallback:t,message:h,showUpgradePrompt:m=!0,showLoginPrompt:l=!0}){const y=n("user"),A=n("loading"),S=n("userProfile"),f=n("userSubscription"),D=n("hasRole"),P=n("hasTier"),u=S?.role,c=f?.tier;return A?r("div",{style:{height:"2rem",borderRadius:"var(--radius)",backgroundColor:"var(--muted)",animation:"pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite"}}):!y&&(i||s||a)?l?r(z,{message:h||"Please sign in to access this feature"}):null:i&&!(Array.isArray(i)?i:[i]).some(q=>u===q)?t?r(t,{requiredRole:i,userRole:u||void 0}):r(v,{requiredRole:i,userRole:u||void 0}):s&&!g(c,s)?t?r(t,{requiredTier:s,userTier:c||"free"}):m?r(R,{requiredTier:s,userTier:c||"free"}):null:a&&!f?.isActive?t?r(t,{requiresSubscription:!0,hasSubscription:f?.isActive||!1}):r(b,{}):d&&u&&c&&!d(u,c)?t?r(t,{userRole:u,userTier:c}):r(v,{userRole:u}):r(x,{children:e})}function G(e){const i=n("user"),s=n("userProfile"),a=n("userSubscription"),d=s?.role,t=a?.tier;return!(!i&&(e.role||e.tier||e.subscription)||e.role&&!(Array.isArray(e.role)?e.role:[e.role]).some(l=>d===l)||e.tier&&!g(t,e.tier)||e.subscription&&!a?.isActive||e.validate&&d&&t&&!e.validate(d,t))}function U(e,i){return a=>r(T,{...i,children:r(e,{...a})})}export{v as AccessDenied,T as FeatureGuard,b as SubscriptionExpired,R as UpgradePrompt,G as useCanAccessFeature,U as withFeatureGuard};
@@ -1 +1 @@
1
- "use client";import{jsx as e,jsxs as N}from"react/jsx-runtime";import{Card as i,Spinner as j,Stack as w}from"@donotdev/components";import{useTranslation as z}from"@donotdev/core";import{useGoogleOneTap as C}from"../hooks/useGoogleOneTap";function T({clientId:s,onSuccess:p,onError:l,autoSelect:m=!0,cancelOnTapOutside:c=!0,className:g="",disabled:o=!1,promptParentId:f,allowedParentOrigins:r,cspNonce:u,clientOnly:a=!1,showErrorDetails:I=!1,loadingComponent:t,errorComponent:G,browserNotSupportedComponent:L}){const{t:h}=z("auth"),{shouldShow:v,isLoaded:E,isLoading:x,error:y,containerRef:S,fedcmSupported:d,isHydrated:n,browserInfo:_}=C({clientId:s,autoSelect:m,cancelOnTapOutside:c,promptParentId:f,disabled:o,onSuccess:p,onError:l,allowedParentOrigins:r,cspNonce:u,clientOnly:a});return o||!v||a&&!n?null:x?t?e("div",{className:"dndev-fixed",style:{right:"var(--gap-md)",zIndex:50,top:"calc(1rem + var(--header-height, 0px))"},children:e(i,{style:{padding:"var(--gap-md)"},children:e(t,{})})}):e("div",{className:"dndev-fixed",style:{right:"var(--gap-md)",zIndex:50,top:"calc(1rem + var(--header-height, 0px))"},children:e(i,{style:{padding:"var(--gap-md)"},children:N(w,{direction:"row",align:"center",gap:"medium",children:[e(j,{}),e("span",{style:{fontSize:"var(--font-size-sm)",color:"var(--muted-foreground)"},children:h("googleOneTapLoading","Loading Google One Tap...")})]})})}):!d||y?null:e("div",{className:"dndev-fixed",style:{right:"var(--gap-md)",zIndex:50,top:"calc(1rem + var(--header-height, 0px))"},children:e("div",{ref:S,className:`google-one-tap-container ${g}`.trim(),"data-testid":"google-one-tap","data-fedcm-supported":d,"data-hydrated":n,...r&&{"data-allowed-parent-origins":r.join(",")}})})}var H=T;export{H as default};
1
+ "use client";import{jsx as e,jsxs as N}from"react/jsx-runtime";import{Card as i,Spinner as j,Stack as w}from"@donotdev/components";import{useTranslation as z}from"@donotdev/core";import{useGoogleOneTap as C}from"../hooks/useGoogleOneTap";function T({clientId:s,onSuccess:p,onError:l,autoSelect:m=!0,cancelOnTapOutside:c=!0,className:g="",disabled:o=!1,promptParentId:f,allowedParentOrigins:r,cspNonce:h,clientOnly:a=!1,showErrorDetails:I=!1,loadingComponent:t,errorComponent:G,browserNotSupportedComponent:L}){const{t:u}=z("auth"),{shouldShow:v,isLoaded:E,isLoading:x,error:y,containerRef:S,fedcmSupported:n,isHydrated:d,browserInfo:_}=C({clientId:s,autoSelect:m,cancelOnTapOutside:c,promptParentId:f,disabled:o,onSuccess:p,onError:l,allowedParentOrigins:r,cspNonce:h,clientOnly:a});return o||!v||a&&!d?null:x?t?e("div",{className:"dndev-fixed",style:{right:"var(--gap-md)",zIndex:50,top:"calc(1rem + var(--header-height, 0px))"},children:e(i,{style:{padding:"var(--gap-md)"},children:e(t,{})})}):e("div",{className:"dndev-fixed",style:{right:"var(--gap-md)",zIndex:50,top:"calc(1rem + var(--header-height, 0px))"},children:e(i,{style:{padding:"var(--gap-md)"},children:N(w,{direction:"row",align:"center",children:[e(j,{}),e("span",{style:{fontSize:"var(--font-size-sm)",color:"var(--muted-foreground)"},children:u("googleOneTapLoading","Loading Google One Tap...")})]})})}):!n||y?null:e("div",{className:"dndev-fixed",style:{right:"var(--gap-md)",zIndex:50,top:"calc(1rem + var(--header-height, 0px))"},children:e("div",{ref:S,className:`google-one-tap-container ${g}`.trim(),"data-testid":"google-one-tap","data-fedcm-supported":n,"data-hydrated":d,...r&&{"data-allowed-parent-origins":r.join(",")}})})}var H=T;export{H as default};
@@ -1 +1 @@
1
- "use client";import{jsx as t,jsxs as r}from"react/jsx-runtime";import{Alert as s,Button as l,BUTTON_VARIANT as u,Stack as c}from"@donotdev/components";import{useTranslation as f}from"@donotdev/core";import{useNetworkStatus as d}from"../hooks/useNetworkStatus";function k({showWhenOnline:i=!1,className:a=""}){const{t:e}=f("auth"),{online:n,connectionType:o,isSlowConnection:w}=d();return n&&!i?null:t(s,{variant:n?void 0:"error",className:a,role:"status","aria-live":n?"polite":"assertive",title:n?e("networkStatus.online",{defaultValue:"You are online"}):e("networkStatus.offline",{defaultValue:"You are offline"}),description:n?t("span",{children:e("networkStatus.connectedVia",{connectionType:o||"unknown",defaultValue:`Connected via ${o||"unknown"}`})}):r(c,{gap:"medium",children:[t("p",{children:e("networkStatus.offlineMessage",{defaultValue:"Authentication requires an internet connection. Please check your network settings."})}),t(l,{variant:u.GHOST,onClick:()=>{typeof window<"u"&&window.location.reload()},style:{fontSize:"var(--font-size-sm)",textDecoration:"underline",fontWeight:500},children:e("networkStatus.checkAgain",{defaultValue:"Check again"})})]})})}var T=k;export{T as default};
1
+ "use client";import{jsx as t,jsxs as r}from"react/jsx-runtime";import{Alert as s,Button as l,BUTTON_VARIANT as u,Stack as c}from"@donotdev/components";import{useTranslation as f}from"@donotdev/core";import{useNetworkStatus as d}from"../hooks/useNetworkStatus";function k({showWhenOnline:i=!1,className:a=""}){const{t:e}=f("auth"),{online:n,connectionType:o,isSlowConnection:w}=d();return n&&!i?null:t(s,{variant:n?void 0:"error",className:a,role:"status","aria-live":n?"polite":"assertive",title:n?e("networkStatus.online",{defaultValue:"You are online"}):e("networkStatus.offline",{defaultValue:"You are offline"}),description:n?t("span",{children:e("networkStatus.connectedVia",{connectionType:o||"unknown",defaultValue:`Connected via ${o||"unknown"}`})}):r(c,{children:[t("p",{children:e("networkStatus.offlineMessage",{defaultValue:"Authentication requires an internet connection. Please check your network settings."})}),t(l,{variant:u.GHOST,onClick:()=>{typeof window<"u"&&window.location.reload()},style:{fontSize:"var(--font-size-sm)",textDecoration:"underline",fontWeight:500},children:e("networkStatus.checkAgain",{defaultValue:"Check again"})})]})})}var T=k;export{T as default};
@@ -1 +1 @@
1
- "use client";import{jsx as r,jsxs as i,Fragment as U}from"react/jsx-runtime";import"lucide-react";import{useState as o}from"react";import{Button as p,BUTTON_VARIANT as h,Input as m,Label as P,Alert as v,ALERT_VARIANT as A,Dialog as E,Stack as c}from"@donotdev/components";import{useTranslation as N}from"@donotdev/core";function I({updatePassword:y}){const{t:s}=N("profile"),[C,n]=o(!1),[e,w]=o(""),[d,g]=o(""),[l,f]=o(!1),[u,t]=o(null),T=async()=>{if(e!==d){t("Passwords do not match");return}if(e.length<6){t("Password must be at least 6 characters long");return}f(!0),t(null);try{await y(e),n(!1),w(""),g("")}catch(a){t(a.message||"Failed to update password")}finally{f(!1)}};return r(E,{open:C,onOpenChange:n,trigger:r(p,{variant:h.OUTLINE,children:s("profile.security.password.change","Change Password")}),title:s("profile.security.password.dialog.title","Change Password"),description:s("profile.security.password.dialog.description","Enter your new password below"),footer:i(U,{children:[r(p,{variant:h.OUTLINE,onClick:()=>n(!1),disabled:l,children:s("profile.security.password.dialog.cancel","Cancel")}),r(p,{onClick:T,disabled:l||!e||!d,children:l?s("profile.security.password.dialog.updating","Updating..."):s("profile.security.password.dialog.update","Update Password")})]}),children:i(c,{gap:"medium",children:[i(c,{gap:"tight",children:[r(P,{htmlFor:"newPassword",children:s("profile.security.password.dialog.newPassword","New Password")}),r(m,{id:"newPassword",type:"password",value:e,onChange:a=>w(a.target.value),placeholder:"Enter new password"})]}),i(c,{gap:"tight",children:[r(P,{htmlFor:"confirmPassword",children:s("profile.security.password.dialog.confirmPassword","Confirm Password")}),r(m,{id:"confirmPassword",type:"password",value:d,onChange:a=>g(a.target.value),placeholder:"Confirm new password"})]}),u&&r(v,{variant:A.ERROR,description:u})]})})}var j=I;export{j as default};
1
+ "use client";import{jsx as r,jsxs as i,Fragment as U}from"react/jsx-runtime";import"lucide-react";import{useState as o}from"react";import{Button as p,BUTTON_VARIANT as h,Input as m,Label as P,Alert as v,ALERT_VARIANT as A,Dialog as E,Stack as c}from"@donotdev/components";import{useTranslation as N}from"@donotdev/core";function I({updatePassword:y}){const{t:s}=N("profile"),[C,n]=o(!1),[e,w]=o(""),[d,g]=o(""),[l,f]=o(!1),[u,t]=o(null),T=async()=>{if(e!==d){t("Passwords do not match");return}if(e.length<6){t("Password must be at least 6 characters long");return}f(!0),t(null);try{await y(e),n(!1),w(""),g("")}catch(a){t(a.message||"Failed to update password")}finally{f(!1)}};return r(E,{open:C,onOpenChange:n,trigger:r(p,{variant:h.OUTLINE,children:s("profile.security.password.change","Change Password")}),title:s("profile.security.password.dialog.title","Change Password"),description:s("profile.security.password.dialog.description","Enter your new password below"),footer:i(U,{children:[r(p,{variant:h.OUTLINE,onClick:()=>n(!1),disabled:l,children:s("profile.security.password.dialog.cancel","Cancel")}),r(p,{onClick:T,disabled:l||!e||!d,children:l?s("profile.security.password.dialog.updating","Updating..."):s("profile.security.password.dialog.update","Update Password")})]}),children:i(c,{children:[i(c,{gap:"tight",children:[r(P,{htmlFor:"newPassword",children:s("profile.security.password.dialog.newPassword","New Password")}),r(m,{id:"newPassword",type:"password",value:e,onChange:a=>w(a.target.value),placeholder:"Enter new password"})]}),i(c,{gap:"tight",children:[r(P,{htmlFor:"confirmPassword",children:s("profile.security.password.dialog.confirmPassword","Confirm Password")}),r(m,{id:"confirmPassword",type:"password",value:d,onChange:a=>g(a.target.value),placeholder:"Confirm new password"})]}),u&&r(v,{variant:A.ERROR,description:u})]})})}var j=I;export{j as default};