1import{c as I,r as l,a4 as D,a9 as U,j as e,I as c,B as d,ai as f,t as o}from"./index-Cqk6SEFN.js";import{L as m}from"./label-BaKdpKKK.js";import{C as v,b,c as N,d as S,a as k}from"./card-CST38Pm7.js";import{T as B,a as _,b as C,c as P}from"./tabs-DCPXmukG.js";import{L}from"./lock-Cj5RKXPw.js";import{A as H}from"./arrow-left-CHdf4XKE.js";/** 2 * @license lucide-react v0.462.0 - ISC 3 * 4 * This source code is licensed under the ISC license. 5 * See the LICENSE file in the root directory of this source tree. 6 */const W=I("UserPlus",[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}],["line",{x1:"19",x2:"19",y1:"8",y2:"14",key:"1bvyxn"}],["line",{x1:"22",x2:"16",y1:"11",y2:"11",key:"1shjgl"}]]);function K(){const[u,x]=l.useState(""),[h,p]=l.useState(""),[s,r]=l.useState(!1),[E,g]=l.useState(!1),[j,y]=l.useState(""),A=D(),{toast:i}=U(),T=async a=>{var t;a.preventDefault(),r(!0);try{const{data:n,error:w}=await o.auth.signInWithPassword({email:u,password:h});if(w)throw w;const{data:F,error:$}=await o.from("admin_users").select("id, user_id, role").eq("user_id",(t=n.user)==null?void 0:t.id).maybeSingle();if(!F)throw await o.auth.signOut(),new Error("Access denied. Admin privileges required.");i({title:"Welcome back!",description:"Successfully logged in to admin dashboard."}),A("/admin")}catch(n){i({title:"Login failed",description:n.message,variant:"destructive"})}finally{r(!1)}},q=async a=>{a.preventDefault(),r(!0);try{const{data:t,error:n}=await o.auth.signUp({email:u,password:h,options:{emailRedirectTo:`${window.location.origin}/admin/login`}});if(n)throw n;i({title:"Account created!",description:"Please check your email to verify your account. After verifying, an admin will need to grant you access."}),x(""),p("")}catch(t){i({title:"Signup failed",description:t.message,variant:"destructive"})}finally{r(!1)}},R=async a=>{a.preventDefault(),r(!0);try{const{error:t}=await o.auth.resetPasswordForEmail(j,{redirectTo:`${window.location.origin}/reset-password`});if(t)throw t;i({title:"Password reset email sent!",description:"Please check your email for the password reset link."}),y(""),g(!1)}catch(t){i({title:"Password reset failed",description:t.message,variant:"destructive"})}finally{r(!1)}};return E?e.jsx("div",{className:"min-h-screen flex items-center justify-center bg-gradient-to-br from-background to-muted p-4",children:e.jsxs(v,{className:"w-full max-w-md",children:[e.jsxs(b,{className:"space-y-1",children:[e.jsx("div",{className:"flex items-center justify-center mb-4",children:e.jsx("div",{className:"w-12 h-12 bg-primary/10 rounded-full flex items-center justify-center",children:e.jsx(L,{className:"w-6 h-6 text-primary"})})}),e.jsx(N,{className:"text-2xl text-center",children:"Reset Password"}),e.jsx(S,{className:"text-center",children:"Enter your email address and we'll send you a password reset link"})]}),e.jsx(k,{children:e.jsxs("form",{onSubmit:R,className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(m,{htmlFor:"reset-email",children:"Email"}),e.jsx(c,{id:"reset-email",type:"email",placeholder:"[email protected]",value:j,onChange:a=>y(a.target.value),required:!0,disabled:s})]}),e.jsxs(d,{type:"submit",className:"w-full",disabled:s,children:[s&&e.jsx(f,{className:"mr-2 h-4 w-4 animate-spin"}),s?"Sending...":"Send Reset Link"]}),e.jsxs(d,{type:"button",variant:"ghost",className:"w-full",onClick:()=>g(!1),disabled:s,children:[e.jsx(H,{className:"mr-2 h-4 w-4"}),"Back to Sign In"]})]})})]})}):e.jsx("div",{className:"min-h-screen flex items-center justify-center bg-gradient-to-br from-background to-muted p-4",children:e.jsxs(v,{className:"w-full max-w-md",children:[e.jsxs(b,{className:"space-y-1",children:[e.jsx("div",{className:"flex items-center justify-center mb-4",children:e.jsx("div",{className:"w-12 h-12 bg-primary/10 rounded-full flex items-center justify-center",children:e.jsx(L,{className:"w-6 h-6 text-primary"})})}),e.jsx(N,{className:"text-2xl text-center",children:"Admin Portal"}),e.jsx(S,{className:"text-center",children:"Sign in or create an account to access the admin dashboard"})]}),e.jsx(k,{children:e.jsxs(B,{defaultValue:"login",className:"w-full",children:[e.jsxs(_,{className:"grid w-full grid-cols-2 mb-4",children:[e.jsx(C,{value:"login",children:"Sign In"}),e.jsx(C,{value:"signup",children:"Sign Up"})]}),e.jsx(P,{value:"login",children:e.jsxs("form",{onSubmit:T,className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(m,{htmlFor:"login-email",children:"Email"}),e.jsx(c,{id:"login-email",type:"email",placeholder:"[email protected]",value:u,onChange:a=>x(a.target.value),required:!0,disabled:s})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(m,{htmlFor:"login-password",children:"Password"}),e.jsx(c,{id:"login-password",type:"password",value:h,onChange:a=>p(a.target.value),required:!0,disabled:s})]}),e.jsx("div",{className:"flex justify-end",children:e.jsx(d,{type:"button",variant:"link",className:"text-sm px-0 h-auto font-normal",onClick:()=>g(!0),disabled:s,children:"Forgot password?"})}),e.jsxs(d,{type:"submit",className:"w-full",disabled:s,children:[s&&e.jsx(f,{className:"mr-2 h-4 w-4 animate-spin"}),s?"Signing in...":"Sign In"]})]})}),e.jsx(P,{value:"signup",children:e.jsxs("form",{onSubmit:q,className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(m,{htmlFor:"signup-email",children:"Email"}),e.jsx(c,{id:"signup-email",type:"email",placeholder:"[email protected]",value:u,onChange:a=>x(a.target.value),required:!0,disabled:s})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(m,{htmlFor:"signup-password",children:"Password"}),e.jsx(c,{id:"signup-password",type:"password",placeholder:"Enter a strong password",value:h,onChange:a=>p(a.target.value),required:!0,disabled:s,minLength:8})]}),e.jsxs(d,{type:"submit",className:"w-full",disabled:s,children:[s&&e.jsx(f,{className:"mr-2 h-4 w-4 animate-spin"}),e.jsx(W,{className:"mr-2 h-4 w-4"}),s?"Creating account...":"Create Account"]}),e.jsx("p",{className:"text-sm text-muted-foreground text-center",children:"After signup, an existing admin will need to grant you access."})]})})]})})]})})}export{K 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.