2 lines
10 KiB
JavaScript
2 lines
10 KiB
JavaScript
import{a as st,b as lt}from"./chunk-5WV5P2FL.js";import"./chunk-VX6WCCL3.js";import{b as tt,c as et}from"./chunk-R3PUHZUP.js";import"./chunk-3RK6DDJD.js";import{a as Z}from"./chunk-7XDVX5KB.js";import{a as ct,b as gt}from"./chunk-CTXOKINH.js";import"./chunk-WI5CBSGS.js";import"./chunk-3NOMFGTV.js";import"./chunk-T6TXUSUP.js";import"./chunk-GMUETU5N.js";import"./chunk-3GOV5KJM.js";import{a as z}from"./chunk-TPLZKWZ7.js";import{b as J,c as K,e as Q,f as X,i as Y}from"./chunk-EGL4ZKWQ.js";import{a as pt}from"./chunk-GPI43RSU.js";import{a as R,b as U,c as B,d as V,f as j,g as H,i as W}from"./chunk-6NRCTHHS.js";import{b as L}from"./chunk-RC3JXGN6.js";import{a as mt,b as dt}from"./chunk-N6VRXIQE.js";import{b as G,d as f,f as D,g as T,l as N,o as I,r as A,x as $,z as q}from"./chunk-GWD5A44H.js";import"./chunk-52JZ5I3Y.js";import{Aa as at,C as F,j as w,u as O,ua as it,w as k,wa as nt,x as E,ya as ot,za as rt}from"./chunk-COFYR5MX.js";import{Cb as y,Db as g,Eb as p,Jb as u,Kb as t,Lb as e,Mb as d,Qb as M,Rb as _,U as h,Xb as b,Za as s,Zb as x,da as m,i as S,lc as n,mc as C,ob as P,ta as c}from"./chunk-2MUIW2M6.js";function ft(a,i){if(a&1&&(t(0,"mat-error"),n(1),e()),a&2){let o=x();s(),C(o.getErrorMessage("email"))}}function vt(a,i){if(a&1&&(t(0,"mat-error"),n(1),e()),a&2){let o=x();s(),C(o.getErrorMessage("password"))}}function ht(a,i){a&1&&(d(0,"mat-spinner",18),t(1,"span"),n(2,"Logging in..."),e())}function bt(a,i){a&1&&(t(0,"span"),n(1,"Login"),e())}function Ct(a,i){a&1&&(M(0),d(1,"mat-spinner",18),t(2,"span"),n(3,"Starting Session..."),e(),_())}function Mt(a,i){a&1&&(M(0),t(1,"mat-icon"),n(2,"visibility"),e(),t(3,"span"),n(4,"Continue as Guest"),e(),_())}var ut=class a{fb=m($);authService=m(z);guestService=m(pt);storageService=m(L);router=m(k);route=m(O);destroy$=new S;isSubmitting=c(!1);hidePassword=c(!0);returnUrl=c("/categories");isStartingGuestSession=c(!1);loginForm;constructor(){this.loginForm=this.fb.group({email:["",[f.required,f.email]],password:["",[f.required,f.minLength(8)]],rememberMe:[!1]}),this.route.queryParams.pipe(h(this.destroy$)).subscribe(i=>{this.returnUrl.set(i.returnUrl||"/categories")}),this.authService.isAuthenticated()&&this.router.navigate(["/categories"])}togglePasswordVisibility(){this.hidePassword.update(i=>!i)}onSubmit(){if(this.loginForm.invalid||this.isSubmitting()){this.loginForm.markAllAsTouched();return}this.isSubmitting.set(!0);let{email:i,password:o,rememberMe:r}=this.loginForm.value;this.authService.login(i,o,r,this.returnUrl()).pipe(h(this.destroy$)).subscribe({next:()=>{this.isSubmitting.set(!1)},error:()=>{this.isSubmitting.set(!1)}})}getErrorMessage(i){let o=this.loginForm.get(i);return!o||!o.touched?"":o.hasError("required")?`${this.getFieldLabel(i)} is required`:o.hasError("email")?"Please enter a valid email address":o.hasError("minlength")?`Must be at least ${o.getError("minlength").requiredLength} characters`:""}getFieldLabel(i){return{email:"Email",password:"Password"}[i]||i}continueAsGuest(){this.isStartingGuestSession.set(!0),this.guestService.startSession().pipe(h(this.destroy$)).subscribe({next:i=>{this.isStartingGuestSession.set(!1),this.router.navigate(["/guest-welcome"])},error:()=>{this.isStartingGuestSession.set(!1)}})}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}static \u0275fac=function(o){return new(o||a)};static \u0275cmp=P({type:a,selectors:[["app-login"]],decls:48,vars:10,consts:[[1,"login-container"],[1,"login-card"],[1,"header-content"],[1,"logo-icon"],[1,"login-form",3,"ngSubmit","formGroup"],["appearance","outline",1,"full-width"],["matInput","","type","email","formControlName","email","placeholder","Enter your email","autocomplete","email"],["matPrefix",""],["matInput","","formControlName","password","placeholder","Enter your password","autocomplete","current-password",3,"type"],["mat-icon-button","","matSuffix","","type","button",3,"click"],[1,"options-row"],["formControlName","rememberMe"],["routerLink","/forgot-password",1,"forgot-link"],["mat-raised-button","","color","primary","type","submit",1,"full-width","submit-button",3,"disabled"],[1,"divider"],["mat-stroked-button","","color","accent",1,"full-width","guest-button",3,"click","disabled"],[1,"footer-links"],["routerLink","/register",1,"link"],["diameter","20"]],template:function(o,r){if(o&1&&(t(0,"div",0)(1,"mat-card",1)(2,"mat-card-header")(3,"div",2)(4,"mat-icon",3),n(5,"quiz"),e(),t(6,"div")(7,"mat-card-title"),n(8,"Welcome Back!"),e(),t(9,"mat-card-subtitle"),n(10,"Login to continue your preparation"),e()()()(),t(11,"mat-card-content")(12,"form",4),b("ngSubmit",function(){return r.onSubmit()}),t(13,"mat-form-field",5)(14,"mat-label"),n(15,"Email"),e(),d(16,"input",6),t(17,"mat-icon",7),n(18,"email"),e(),g(19,ft,2,1,"mat-error"),e(),t(20,"mat-form-field",5)(21,"mat-label"),n(22,"Password"),e(),d(23,"input",8),t(24,"mat-icon",7),n(25,"lock"),e(),t(26,"button",9),b("click",function(){return r.togglePasswordVisibility()}),t(27,"mat-icon"),n(28),e()(),g(29,vt,2,1,"mat-error"),e(),t(30,"div",10)(31,"mat-checkbox",11),n(32," Remember me "),e(),t(33,"a",12),n(34,"Forgot Password?"),e()(),t(35,"button",13),g(36,ht,3,0)(37,bt,2,0,"span"),e()(),d(38,"mat-divider",14),t(39,"button",15),b("click",function(){return r.continueAsGuest()}),g(40,Ct,4,0,"ng-container")(41,Mt,5,0,"ng-container"),e()(),t(42,"mat-card-footer")(43,"div",16)(44,"p"),n(45,"Don't have an account? "),t(46,"a",17),n(47,"Create one here"),e()()()()()()),o&2){let l,v;s(12),u("formGroup",r.loginForm),s(7),p((l=r.loginForm.get("email"))!=null&&l.invalid&&((l=r.loginForm.get("email"))!=null&&l.touched)?19:-1),s(4),u("type",r.hidePassword()?"password":"text"),s(3),y("aria-label","Toggle password visibility"),s(2),C(r.hidePassword()?"visibility_off":"visibility"),s(),p((v=r.loginForm.get("password"))!=null&&v.invalid&&((v=r.loginForm.get("password"))!=null&&v.touched)?29:-1),s(6),u("disabled",r.isSubmitting()),s(),p(r.isSubmitting()?36:37),s(3),u("disabled",r.isStartingGuestSession()),s(),p(r.isStartingGuestSession()?40:41)}},dependencies:[w,q,N,G,D,T,I,A,F,E,W,R,B,H,j,V,U,Z,Y,J,K,Q,X,et,tt,ot,nt,it,at,rt,lt,st,dt,mt,gt,ct],styles:[".login-container[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;min-height:calc(100vh - var(--header-height) - var(--footer-height));padding:var(--spacing-lg);background:linear-gradient(135deg,var(--color-primary-lighter) 0%,var(--color-surface) 100%)}.login-card[_ngcontent-%COMP%]{width:100%;max-width:450px;box-shadow:var(--shadow-xl)}.login-card[_ngcontent-%COMP%] .mat-mdc-card-header{padding:var(--spacing-xl) var(--spacing-xl) 0}.login-card[_ngcontent-%COMP%] .mat-mdc-card-content{padding:var(--spacing-lg) var(--spacing-xl)}.login-card[_ngcontent-%COMP%] .mat-mdc-card-footer{padding:0 var(--spacing-xl) var(--spacing-xl)}.header-content[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--spacing-md);width:100%}.header-content[_ngcontent-%COMP%] .logo-icon[_ngcontent-%COMP%]{font-size:48px;width:48px;height:48px;color:var(--color-primary)}.header-content[_ngcontent-%COMP%] .mat-mdc-card-title{font-size:var(--font-size-2xl);font-weight:var(--font-weight-bold);margin:0}.header-content[_ngcontent-%COMP%] .mat-mdc-card-subtitle{font-size:var(--font-size-sm);margin:var(--spacing-xs) 0 0 0;color:var(--color-text-secondary)}.login-form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:var(--spacing-md);margin-top:var(--spacing-lg)}.full-width[_ngcontent-%COMP%]{width:100%}.options-row[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;margin-top:calc(var(--spacing-md) * -1)}.options-row[_ngcontent-%COMP%] .forgot-link[_ngcontent-%COMP%]{color:var(--color-primary);font-size:var(--font-size-sm);text-decoration:none;transition:color var(--transition-fast)}.options-row[_ngcontent-%COMP%] .forgot-link[_ngcontent-%COMP%]:hover{color:var(--color-primary-dark);text-decoration:underline}.options-row[_ngcontent-%COMP%] .forgot-link[_ngcontent-%COMP%]:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px;border-radius:var(--radius-sm)}.submit-button[_ngcontent-%COMP%]{margin-top:var(--spacing-md);height:48px;font-size:var(--font-size-base);font-weight:var(--font-weight-semibold)}.submit-button[_ngcontent-%COMP%] mat-spinner[_ngcontent-%COMP%]{display:inline-block;margin-right:var(--spacing-sm)}.divider[_ngcontent-%COMP%]{margin:var(--spacing-xl) 0 var(--spacing-lg);background-color:var(--color-divider)}.guest-button[_ngcontent-%COMP%]{height:48px;font-size:var(--font-size-base)}.guest-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{margin-right:var(--spacing-sm)}.footer-links[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;gap:var(--spacing-sm);text-align:center;padding-top:var(--spacing-md);border-top:1px solid var(--color-divider)}.footer-links[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;font-size:var(--font-size-sm);color:var(--color-text-secondary)}.footer-links[_ngcontent-%COMP%] .link[_ngcontent-%COMP%]{color:var(--color-primary);font-weight:var(--font-weight-medium);text-decoration:none;transition:color var(--transition-fast)}.footer-links[_ngcontent-%COMP%] .link[_ngcontent-%COMP%]:hover{color:var(--color-primary-dark);text-decoration:underline}.footer-links[_ngcontent-%COMP%] .link[_ngcontent-%COMP%]:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px;border-radius:var(--radius-sm)} .mat-mdc-form-field .mat-mdc-text-field-wrapper{background-color:var(--color-background)} .mat-mdc-form-field .mat-mdc-form-field-hint, .mat-mdc-form-field .mat-mdc-form-field-error{font-size:var(--font-size-xs)} .mat-mdc-form-field-icon-prefix{color:var(--color-text-secondary);margin-right:var(--spacing-sm)} .mat-mdc-checkbox{font-size:var(--font-size-sm)}@media (max-width: 767px){.login-container[_ngcontent-%COMP%]{padding:var(--spacing-md)}.login-card[_ngcontent-%COMP%] .mat-mdc-card-header{padding:var(--spacing-lg) var(--spacing-md) 0}.login-card[_ngcontent-%COMP%] .mat-mdc-card-content{padding:var(--spacing-md)}.login-card[_ngcontent-%COMP%] .mat-mdc-card-footer{padding:0 var(--spacing-md) var(--spacing-md)}.header-content[_ngcontent-%COMP%] .logo-icon[_ngcontent-%COMP%]{font-size:40px;width:40px;height:40px}.header-content[_ngcontent-%COMP%] .mat-mdc-card-title{font-size:var(--font-size-xl)}.options-row[_ngcontent-%COMP%]{flex-direction:column;align-items:flex-start;gap:var(--spacing-sm)}}"]})};export{ut as LoginComponent};
|