import { DefaultValueAccessor, FormBuilder, FormControlName, FormGroupDirective, NgControlStatus, NgControlStatusGroup, ReactiveFormsModule, Validators, ɵNgNoValidate } from "./chunk-VD6QIYHN.js"; import { getErrorMessage } from "./chunk-QDZ3GX5R.js"; import { NzMessageService } from "./chunk-GJYGTZ7J.js"; import { AuthService, NzIconDirective, NzIconModule, Router } from "./chunk-2TRRHRR7.js"; import "./chunk-EDRPZB37.js"; import { Component, inject, setClassMetadata, signal, ɵsetClassDebugInfo, ɵɵProvidersFeature, ɵɵadvance, ɵɵconditional, ɵɵconditionalCreate, ɵɵdefineComponent, ɵɵelement, ɵɵelementEnd, ɵɵelementStart, ɵɵgetCurrentView, ɵɵlistener, ɵɵnextContext, ɵɵproperty, ɵɵresetView, ɵɵrestoreView, ɵɵtext } from "./chunk-WI7WFVZR.js"; import "./chunk-WDMUDEB6.js"; // src/app/pages/auth/auth.ts function AuthPage_Conditional_6_Template(rf, ctx) { if (rf & 1) { \u0275\u0275text(0, " Bienvenue, connectez-vous "); } } function AuthPage_Conditional_7_Template(rf, ctx) { if (rf & 1) { \u0275\u0275text(0, " Cr\xE9ez votre compte "); } } function AuthPage_Conditional_8_Conditional_5_Template(rf, ctx) { if (rf & 1) { \u0275\u0275elementStart(0, "span", 13); \u0275\u0275text(1, "Email invalide"); \u0275\u0275elementEnd(); } } function AuthPage_Conditional_8_Conditional_10_Template(rf, ctx) { if (rf & 1) { \u0275\u0275elementStart(0, "span", 13); \u0275\u0275text(1, "Mot de passe requis (min. 6 caract\xE8res)"); \u0275\u0275elementEnd(); } } function AuthPage_Conditional_8_Conditional_12_Template(rf, ctx) { if (rf & 1) { \u0275\u0275text(0, " Connexion... "); } } function AuthPage_Conditional_8_Conditional_13_Template(rf, ctx) { if (rf & 1) { \u0275\u0275text(0, " Se Connecter \u2192 "); } } function AuthPage_Conditional_8_Template(rf, ctx) { if (rf & 1) { const _r1 = \u0275\u0275getCurrentView(); \u0275\u0275elementStart(0, "form", 8); \u0275\u0275listener("ngSubmit", function AuthPage_Conditional_8_Template_form_ngSubmit_0_listener() { \u0275\u0275restoreView(_r1); const ctx_r1 = \u0275\u0275nextContext(); return \u0275\u0275resetView(ctx_r1.login()); }); \u0275\u0275elementStart(1, "div", 9)(2, "div", 10); \u0275\u0275element(3, "span", 11)(4, "input", 12); \u0275\u0275elementEnd(); \u0275\u0275conditionalCreate(5, AuthPage_Conditional_8_Conditional_5_Template, 2, 0, "span", 13); \u0275\u0275elementEnd(); \u0275\u0275elementStart(6, "div", 9)(7, "div", 10); \u0275\u0275element(8, "span", 14)(9, "input", 15); \u0275\u0275elementEnd(); \u0275\u0275conditionalCreate(10, AuthPage_Conditional_8_Conditional_10_Template, 2, 0, "span", 13); \u0275\u0275elementEnd(); \u0275\u0275elementStart(11, "button", 16); \u0275\u0275conditionalCreate(12, AuthPage_Conditional_8_Conditional_12_Template, 1, 0)(13, AuthPage_Conditional_8_Conditional_13_Template, 1, 0); \u0275\u0275elementEnd()(); \u0275\u0275elementStart(14, "div", 17); \u0275\u0275text(15, " Pas encore de compte ? "); \u0275\u0275elementStart(16, "button", 18); \u0275\u0275listener("click", function AuthPage_Conditional_8_Template_button_click_16_listener() { \u0275\u0275restoreView(_r1); const ctx_r1 = \u0275\u0275nextContext(); return \u0275\u0275resetView(ctx_r1.toggleMode()); }); \u0275\u0275text(17, "S'inscrire"); \u0275\u0275elementEnd()(); } if (rf & 2) { const ctx_r1 = \u0275\u0275nextContext(); \u0275\u0275property("formGroup", ctx_r1.loginForm); \u0275\u0275advance(5); \u0275\u0275conditional(ctx_r1.loginForm.controls.email.invalid && ctx_r1.loginForm.controls.email.touched ? 5 : -1); \u0275\u0275advance(5); \u0275\u0275conditional(ctx_r1.loginForm.controls.password.invalid && ctx_r1.loginForm.controls.password.touched ? 10 : -1); \u0275\u0275advance(); \u0275\u0275property("disabled", ctx_r1.loading()); \u0275\u0275advance(); \u0275\u0275conditional(ctx_r1.loading() ? 12 : 13); } } function AuthPage_Conditional_9_Conditional_5_Template(rf, ctx) { if (rf & 1) { \u0275\u0275elementStart(0, "span", 13); \u0275\u0275text(1, "Nom requis (min. 2 caract\xE8res)"); \u0275\u0275elementEnd(); } } function AuthPage_Conditional_9_Conditional_10_Template(rf, ctx) { if (rf & 1) { \u0275\u0275elementStart(0, "span", 13); \u0275\u0275text(1, "Email invalide"); \u0275\u0275elementEnd(); } } function AuthPage_Conditional_9_Conditional_15_Template(rf, ctx) { if (rf & 1) { \u0275\u0275elementStart(0, "span", 13); \u0275\u0275text(1, "Mot de passe requis (min. 6 caract\xE8res)"); \u0275\u0275elementEnd(); } } function AuthPage_Conditional_9_Conditional_17_Template(rf, ctx) { if (rf & 1) { \u0275\u0275text(0, " Cr\xE9ation... "); } } function AuthPage_Conditional_9_Conditional_18_Template(rf, ctx) { if (rf & 1) { \u0275\u0275text(0, " S'inscrire \u2192 "); } } function AuthPage_Conditional_9_Template(rf, ctx) { if (rf & 1) { const _r3 = \u0275\u0275getCurrentView(); \u0275\u0275elementStart(0, "form", 8); \u0275\u0275listener("ngSubmit", function AuthPage_Conditional_9_Template_form_ngSubmit_0_listener() { \u0275\u0275restoreView(_r3); const ctx_r1 = \u0275\u0275nextContext(); return \u0275\u0275resetView(ctx_r1.register()); }); \u0275\u0275elementStart(1, "div", 9)(2, "div", 10); \u0275\u0275element(3, "span", 19)(4, "input", 20); \u0275\u0275elementEnd(); \u0275\u0275conditionalCreate(5, AuthPage_Conditional_9_Conditional_5_Template, 2, 0, "span", 13); \u0275\u0275elementEnd(); \u0275\u0275elementStart(6, "div", 9)(7, "div", 10); \u0275\u0275element(8, "span", 11)(9, "input", 12); \u0275\u0275elementEnd(); \u0275\u0275conditionalCreate(10, AuthPage_Conditional_9_Conditional_10_Template, 2, 0, "span", 13); \u0275\u0275elementEnd(); \u0275\u0275elementStart(11, "div", 9)(12, "div", 10); \u0275\u0275element(13, "span", 14)(14, "input", 21); \u0275\u0275elementEnd(); \u0275\u0275conditionalCreate(15, AuthPage_Conditional_9_Conditional_15_Template, 2, 0, "span", 13); \u0275\u0275elementEnd(); \u0275\u0275elementStart(16, "button", 16); \u0275\u0275conditionalCreate(17, AuthPage_Conditional_9_Conditional_17_Template, 1, 0)(18, AuthPage_Conditional_9_Conditional_18_Template, 1, 0); \u0275\u0275elementEnd()(); \u0275\u0275elementStart(19, "div", 17); \u0275\u0275text(20, " D\xE9j\xE0 un compte ? "); \u0275\u0275elementStart(21, "button", 18); \u0275\u0275listener("click", function AuthPage_Conditional_9_Template_button_click_21_listener() { \u0275\u0275restoreView(_r3); const ctx_r1 = \u0275\u0275nextContext(); return \u0275\u0275resetView(ctx_r1.toggleMode()); }); \u0275\u0275text(22, "Se connecter"); \u0275\u0275elementEnd()(); } if (rf & 2) { const ctx_r1 = \u0275\u0275nextContext(); \u0275\u0275property("formGroup", ctx_r1.registerForm); \u0275\u0275advance(5); \u0275\u0275conditional(ctx_r1.registerForm.controls.name.invalid && ctx_r1.registerForm.controls.name.touched ? 5 : -1); \u0275\u0275advance(5); \u0275\u0275conditional(ctx_r1.registerForm.controls.email.invalid && ctx_r1.registerForm.controls.email.touched ? 10 : -1); \u0275\u0275advance(5); \u0275\u0275conditional(ctx_r1.registerForm.controls.password.invalid && ctx_r1.registerForm.controls.password.touched ? 15 : -1); \u0275\u0275advance(); \u0275\u0275property("disabled", ctx_r1.loading()); \u0275\u0275advance(); \u0275\u0275conditional(ctx_r1.loading() ? 17 : 18); } } function AuthPage_Conditional_11_Template(rf, ctx) { if (rf & 1) { \u0275\u0275element(0, "span", 6); } } function AuthPage_Conditional_12_Template(rf, ctx) { if (rf & 1) { \u0275\u0275element(0, "span", 7); } } var AuthPage = class _AuthPage { fb = inject(FormBuilder); router = inject(Router); authService = inject(AuthService); message = inject(NzMessageService); mode = signal("login", ...ngDevMode ? [{ debugName: "mode" }] : []); loading = signal(false, ...ngDevMode ? [{ debugName: "loading" }] : []); isDark = signal(true, ...ngDevMode ? [{ debugName: "isDark" }] : []); loginForm = this.fb.group({ email: ["", [Validators.required, Validators.email]], password: ["", [Validators.required, Validators.minLength(6)]] }); registerForm = this.fb.group({ name: ["", [Validators.required, Validators.minLength(2)]], email: ["", [Validators.required, Validators.email]], password: ["", [Validators.required, Validators.minLength(6)]] }); toggleMode() { this.mode.set(this.mode() === "login" ? "register" : "login"); } toggleTheme() { const html = document.documentElement; if (html.classList.contains("dark")) { html.classList.remove("dark"); this.isDark.set(false); } else { html.classList.add("dark"); this.isDark.set(true); } } login() { if (this.loginForm.invalid) { Object.values(this.loginForm.controls).forEach((c) => c.markAsTouched()); return; } const { email, password } = this.loginForm.value; this.loading.set(true); this.authService.login(email, password).subscribe({ next: () => { this.loading.set(false); this.router.navigate(["/catalog"]); }, error: (err) => { this.loading.set(false); this.message.error(getErrorMessage(err, "Email ou mot de passe incorrect")); } }); } register() { if (this.registerForm.invalid) { Object.values(this.registerForm.controls).forEach((c) => c.markAsTouched()); return; } const { name, email, password } = this.registerForm.value; this.loading.set(true); this.authService.register(name, email, password).subscribe({ next: () => { this.loading.set(false); this.message.success("Compte cr\xE9\xE9 avec succ\xE8s !"); this.mode.set("login"); this.loginForm.patchValue({ email, password: "" }); }, error: (err) => { this.loading.set(false); this.message.error(getErrorMessage(err, "Erreur lors de la cr\xE9ation du compte")); } }); } static \u0275fac = function AuthPage_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || _AuthPage)(); }; static \u0275cmp = /* @__PURE__ */ \u0275\u0275defineComponent({ type: _AuthPage, selectors: [["app-auth"]], features: [\u0275\u0275ProvidersFeature([NzMessageService])], decls: 13, vars: 4, consts: [[1, "auth-page"], [1, "auth-container"], [1, "auth-logo"], [1, "logo-title"], [1, "logo-subtitle"], ["aria-label", "Toggle theme", 1, "theme-toggle", 3, "click"], ["nz-icon", "", "nzType", "bulb", "nzTheme", "fill"], ["nz-icon", "", "nzType", "bulb", "nzTheme", "outline"], [1, "auth-form", 3, "ngSubmit", "formGroup"], [1, "input-group"], [1, "input-wrapper"], ["nz-icon", "", "nzType", "mail", "nzTheme", "outline", 1, "input-icon"], ["type", "email", "formControlName", "email", "placeholder", "Adresse email", "autocomplete", "email", 1, "auth-input"], [1, "field-error"], ["nz-icon", "", "nzType", "lock", "nzTheme", "outline", 1, "input-icon"], ["type", "password", "formControlName", "password", "placeholder", "Mot de passe", "autocomplete", "current-password", 1, "auth-input"], ["type", "submit", 1, "auth-btn", 3, "disabled"], [1, "auth-switch"], ["type", "button", 1, "switch-btn", 3, "click"], ["nz-icon", "", "nzType", "user", "nzTheme", "outline", 1, "input-icon"], ["type", "text", "formControlName", "name", "placeholder", "Nom complet", "autocomplete", "name", 1, "auth-input"], ["type", "password", "formControlName", "password", "placeholder", "Mot de passe", "autocomplete", "new-password", 1, "auth-input"]], template: function AuthPage_Template(rf, ctx) { if (rf & 1) { \u0275\u0275elementStart(0, "div", 0)(1, "div", 1)(2, "div", 2)(3, "h1", 3); \u0275\u0275text(4, "MetaCourse"); \u0275\u0275elementEnd(); \u0275\u0275elementStart(5, "p", 4); \u0275\u0275conditionalCreate(6, AuthPage_Conditional_6_Template, 1, 0)(7, AuthPage_Conditional_7_Template, 1, 0); \u0275\u0275elementEnd()(); \u0275\u0275conditionalCreate(8, AuthPage_Conditional_8_Template, 18, 5); \u0275\u0275conditionalCreate(9, AuthPage_Conditional_9_Template, 23, 6); \u0275\u0275elementEnd(); \u0275\u0275elementStart(10, "button", 5); \u0275\u0275listener("click", function AuthPage_Template_button_click_10_listener() { return ctx.toggleTheme(); }); \u0275\u0275conditionalCreate(11, AuthPage_Conditional_11_Template, 1, 0, "span", 6)(12, AuthPage_Conditional_12_Template, 1, 0, "span", 7); \u0275\u0275elementEnd()(); } if (rf & 2) { \u0275\u0275advance(6); \u0275\u0275conditional(ctx.mode() === "login" ? 6 : 7); \u0275\u0275advance(2); \u0275\u0275conditional(ctx.mode() === "login" ? 8 : -1); \u0275\u0275advance(); \u0275\u0275conditional(ctx.mode() === "register" ? 9 : -1); \u0275\u0275advance(2); \u0275\u0275conditional(ctx.isDark() ? 11 : 12); } }, dependencies: [ReactiveFormsModule, \u0275NgNoValidate, DefaultValueAccessor, NgControlStatus, NgControlStatusGroup, FormGroupDirective, FormControlName, NzIconModule, NzIconDirective], styles: ["\n\n.auth-page[_ngcontent-%COMP%] {\n background-color: var(--bg);\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 24px;\n position: relative;\n}\n.auth-container[_ngcontent-%COMP%] {\n width: 100%;\n max-width: 360px;\n}\n.auth-logo[_ngcontent-%COMP%] {\n text-align: center;\n margin-bottom: 40px;\n}\n.logo-icon[_ngcontent-%COMP%] {\n width: 64px;\n height: 64px;\n background-color: var(--primary);\n border-radius: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n margin: 0 auto 16px;\n font-size: 28px;\n color: var(--primary-fg);\n}\n.logo-title[_ngcontent-%COMP%] {\n font-size: 28px;\n font-weight: 800;\n color: var(--text);\n margin: 0 0 8px;\n letter-spacing: -0.5px;\n}\n.logo-subtitle[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--text-muted);\n margin: 0;\n}\n.auth-form[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n margin-bottom: 20px;\n}\n.input-group[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n.input-wrapper[_ngcontent-%COMP%] {\n position: relative;\n display: flex;\n align-items: center;\n}\n.input-icon[_ngcontent-%COMP%] {\n position: absolute;\n left: 14px;\n color: var(--text-muted);\n font-size: 16px;\n z-index: 1;\n}\n.auth-input[_ngcontent-%COMP%] {\n width: 100%;\n background-color: var(--card);\n border: 1.5px solid var(--border);\n border-radius: 12px;\n padding: 14px 14px 14px 42px;\n color: var(--text);\n font-size: 15px;\n outline: none;\n transition: border-color 0.2s;\n}\n.auth-input[_ngcontent-%COMP%]:focus {\n border-color: #1abc9c;\n}\n.auth-input[_ngcontent-%COMP%]::placeholder {\n color: var(--text-muted);\n}\n.field-error[_ngcontent-%COMP%] {\n font-size: 12px;\n color: #ff4d4f;\n padding-left: 4px;\n}\n.auth-btn[_ngcontent-%COMP%] {\n width: 100%;\n background-color: var(--primary);\n color: var(--primary-fg);\n border: none;\n border-radius: 12px;\n padding: 16px;\n font-size: 16px;\n font-weight: 700;\n cursor: pointer;\n margin-top: 4px;\n transition: opacity 0.2s;\n}\n.auth-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n opacity: 0.85;\n}\n.auth-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n.auth-switch[_ngcontent-%COMP%] {\n text-align: center;\n font-size: 14px;\n color: var(--text-muted);\n}\n.switch-btn[_ngcontent-%COMP%] {\n background: none;\n border: none;\n color: #1abc9c;\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n padding: 0;\n margin-left: 4px;\n text-decoration: underline;\n}\n.theme-toggle[_ngcontent-%COMP%] {\n position: fixed;\n bottom: 24px;\n right: 24px;\n width: 44px;\n height: 44px;\n background-color: var(--card);\n border: 1px solid var(--border);\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n font-size: 18px;\n color: var(--text);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);\n transition: transform 0.2s;\n}\n.theme-toggle[_ngcontent-%COMP%]:hover {\n transform: scale(1.1);\n}\n/*# sourceMappingURL=auth.css.map */"] }); }; (() => { (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(AuthPage, [{ type: Component, args: [{ selector: "app-auth", imports: [ReactiveFormsModule, NzIconModule], providers: [NzMessageService], template: `
@if (mode() === 'login') {
@if (loginForm.controls.email.invalid && loginForm.controls.email.touched) { Email invalide }
@if (loginForm.controls.password.invalid && loginForm.controls.password.touched) { Mot de passe requis (min. 6 caract\xE8res) }
Pas encore de compte ?
} @if (mode() === 'register') {
@if (registerForm.controls.name.invalid && registerForm.controls.name.touched) { Nom requis (min. 2 caract\xE8res) }
@if (registerForm.controls.email.invalid && registerForm.controls.email.touched) { Email invalide }
@if (registerForm.controls.password.invalid && registerForm.controls.password.touched) { Mot de passe requis (min. 6 caract\xE8res) }
D\xE9j\xE0 un compte ?
}
`, styles: ["/* src/app/pages/auth/auth.css */\n.auth-page {\n background-color: var(--bg);\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 24px;\n position: relative;\n}\n.auth-container {\n width: 100%;\n max-width: 360px;\n}\n.auth-logo {\n text-align: center;\n margin-bottom: 40px;\n}\n.logo-icon {\n width: 64px;\n height: 64px;\n background-color: var(--primary);\n border-radius: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n margin: 0 auto 16px;\n font-size: 28px;\n color: var(--primary-fg);\n}\n.logo-title {\n font-size: 28px;\n font-weight: 800;\n color: var(--text);\n margin: 0 0 8px;\n letter-spacing: -0.5px;\n}\n.logo-subtitle {\n font-size: 14px;\n color: var(--text-muted);\n margin: 0;\n}\n.auth-form {\n display: flex;\n flex-direction: column;\n gap: 12px;\n margin-bottom: 20px;\n}\n.input-group {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n.input-wrapper {\n position: relative;\n display: flex;\n align-items: center;\n}\n.input-icon {\n position: absolute;\n left: 14px;\n color: var(--text-muted);\n font-size: 16px;\n z-index: 1;\n}\n.auth-input {\n width: 100%;\n background-color: var(--card);\n border: 1.5px solid var(--border);\n border-radius: 12px;\n padding: 14px 14px 14px 42px;\n color: var(--text);\n font-size: 15px;\n outline: none;\n transition: border-color 0.2s;\n}\n.auth-input:focus {\n border-color: #1abc9c;\n}\n.auth-input::placeholder {\n color: var(--text-muted);\n}\n.field-error {\n font-size: 12px;\n color: #ff4d4f;\n padding-left: 4px;\n}\n.auth-btn {\n width: 100%;\n background-color: var(--primary);\n color: var(--primary-fg);\n border: none;\n border-radius: 12px;\n padding: 16px;\n font-size: 16px;\n font-weight: 700;\n cursor: pointer;\n margin-top: 4px;\n transition: opacity 0.2s;\n}\n.auth-btn:hover:not(:disabled) {\n opacity: 0.85;\n}\n.auth-btn:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n.auth-switch {\n text-align: center;\n font-size: 14px;\n color: var(--text-muted);\n}\n.switch-btn {\n background: none;\n border: none;\n color: #1abc9c;\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n padding: 0;\n margin-left: 4px;\n text-decoration: underline;\n}\n.theme-toggle {\n position: fixed;\n bottom: 24px;\n right: 24px;\n width: 44px;\n height: 44px;\n background-color: var(--card);\n border: 1px solid var(--border);\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n font-size: 18px;\n color: var(--text);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);\n transition: transform 0.2s;\n}\n.theme-toggle:hover {\n transform: scale(1.1);\n}\n/*# sourceMappingURL=auth.css.map */\n"] }] }], null, null); })(); (() => { (typeof ngDevMode === "undefined" || ngDevMode) && \u0275setClassDebugInfo(AuthPage, { className: "AuthPage", filePath: "src/app/pages/auth/auth.ts", lineNumber: 16 }); })(); // src/app/pages/auth/auth.routes.ts var AUTH_ROUTES = [ { path: "", component: AuthPage } ]; export { AUTH_ROUTES }; //# sourceMappingURL=chunk-IOBMADH6.js.map