@rolatech/angular-account 20.3.0-beta.4 → 20.3.1-beta.3

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.
@@ -480,44 +480,95 @@ class EmailVerificationComponent {
480
480
  this.loading = true;
481
481
  this.verified = false;
482
482
  this.invalid = false;
483
+ this.status = null;
484
+ this.heading = '';
483
485
  this.message = '';
484
- this.signInUrl = '';
485
- this.continueUrl = '';
486
- }
487
- ngOnInit() {
488
486
  this.signInUrl = `${this.environment.accountsUrl}/signin`;
489
487
  this.continueUrl = this.environment.myaccountUrl || this.environment.accountsUrl || '/';
488
+ }
489
+ ngOnInit() {
490
490
  const token = this.route.snapshot.queryParamMap.get('token') ?? this.route.snapshot.paramMap.get('id') ?? '';
491
491
  if (!token) {
492
- this.finish(false, 'Email verification token is missing.');
492
+ this.finish({
493
+ type: 'EMAIL',
494
+ status: 'INVALID_TOKEN',
495
+ message: 'Email verification token is missing.',
496
+ });
493
497
  return;
494
498
  }
499
+ this.verifyToken(token);
500
+ // Defer verification so a synchronous observable does not mutate template
501
+ // state during the initial change detection pass.
502
+ // queueMicrotask(() => this.verifyToken(token));
503
+ }
504
+ finish(result) {
505
+ const verified = this.isVerifiedStatus(result.status);
506
+ this.loading = false;
507
+ this.status = result.status;
508
+ this.verified = verified;
509
+ this.invalid = !verified;
510
+ this.heading = this.headingForStatus(result.status);
511
+ this.message = result.message || this.defaultMessageForStatus(result.status);
512
+ }
513
+ verifyToken(token) {
495
514
  this.authUserService.verifyEmailByToken(token).subscribe({
496
- next: (verified) => {
497
- this.finish(verified, verified ? 'Your email address has been verified successfully.' : 'This email verification link is invalid or expired.');
498
- if (verified) {
515
+ next: (result) => {
516
+ this.finish(result);
517
+ if (this.isVerifiedStatus(result.status)) {
499
518
  this.authService.ensureLoaded(true).subscribe({
500
519
  error: () => undefined,
501
520
  });
502
521
  }
503
522
  },
504
523
  error: (error) => {
505
- this.finish(false, error?.message || 'This email verification link is invalid or expired.');
524
+ this.loading = false;
525
+ this.status = null;
526
+ this.verified = false;
527
+ this.invalid = true;
528
+ this.heading = 'Unable to verify email';
529
+ this.message = error?.message || 'This email verification link is invalid or expired.';
506
530
  },
507
531
  });
508
532
  }
509
- finish(verified, message) {
510
- this.loading = false;
511
- this.verified = verified;
512
- this.invalid = !verified;
513
- this.message = message;
533
+ isVerifiedStatus(status) {
534
+ return status === 'VERIFIED' || status === 'ALREADY_VERIFIED';
535
+ }
536
+ headingForStatus(status) {
537
+ switch (status) {
538
+ case 'VERIFIED':
539
+ return 'Email verified';
540
+ case 'ALREADY_VERIFIED':
541
+ return 'Email already verified';
542
+ case 'EXPIRED':
543
+ return 'Verification link expired';
544
+ case 'USER_NOT_FOUND':
545
+ return 'User not found';
546
+ case 'INVALID_TOKEN':
547
+ default:
548
+ return 'Link invalid or expired';
549
+ }
550
+ }
551
+ defaultMessageForStatus(status) {
552
+ switch (status) {
553
+ case 'VERIFIED':
554
+ return 'Your email address has been verified successfully.';
555
+ case 'ALREADY_VERIFIED':
556
+ return 'This email address was already verified.';
557
+ case 'EXPIRED':
558
+ return 'This email verification link has expired. Request a new verification email and try again.';
559
+ case 'USER_NOT_FOUND':
560
+ return 'We could not find a user for this email verification link.';
561
+ case 'INVALID_TOKEN':
562
+ default:
563
+ return 'This email verification link is invalid or expired.';
564
+ }
514
565
  }
515
566
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: EmailVerificationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
516
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.1", type: EmailVerificationComponent, isStandalone: true, selector: "rolatech-account-email-verification", ngImport: i0, template: "<div class=\"h-full flex items-start sm:items-center sm:justify-center\">\n <div\n class=\"w-full h-full justify-start md:h-auto p-6 lg:p-11 rounded-xl bg-(--rt-signin-inner-background) flex flex-col md:justify-between xl:w-[1000px] lg:w-[900px] md:w-[600px]\"\n >\n @if (loading) {\n <div class=\"flex min-h-[280px] flex-col items-center justify-center gap-4 text-center\">\n <rolatech-spinner></rolatech-spinner>\n <div class=\"text-2xl font-medium\">Verifying your email</div>\n <div class=\"text-sm text-(--rt-text-secondary)\">Please wait while we confirm this verification link.</div>\n </div>\n } @else if (verified) {\n <div class=\"flex flex-col gap-6\">\n <div>\n <div class=\"text-3xl font-medium mb-3\">Email verified</div>\n <div class=\"text-md text-(--rt-text-secondary)\">{{ message }}</div>\n </div>\n\n <div class=\"flex flex-wrap items-center gap-3\">\n <a mat-flat-button [href]=\"continueUrl\">Continue</a>\n <a mat-button [href]=\"signInUrl\">Sign in</a>\n </div>\n </div>\n } @else {\n <div class=\"flex flex-col gap-6\">\n <div>\n <div class=\"text-3xl font-medium mb-3\">Link invalid or expired</div>\n <div class=\"text-md text-(--rt-text-secondary)\">{{ message }}</div>\n </div>\n\n <div class=\"flex flex-wrap items-center gap-3\">\n <a mat-flat-button [href]=\"signInUrl\">Sign in</a>\n <a mat-button [href]=\"continueUrl\">Back</a>\n </div>\n </div>\n }\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: SpinnerComponent, selector: "rolatech-spinner", inputs: ["title"] }] }); }
567
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.1", type: EmailVerificationComponent, isStandalone: true, selector: "rolatech-account-email-verification", ngImport: i0, template: "<div class=\"h-full flex items-start sm:items-center sm:justify-center\">\n <div\n class=\"w-full h-full justify-start md:h-auto p-6 lg:p-11 rounded-xl bg-(--rt-signin-inner-background) flex flex-col md:justify-between xl:w-[1000px] lg:w-[900px] md:w-[600px]\"\n >\n @if (loading) {\n <div class=\"flex min-h-[280px] flex-col items-center justify-center gap-4 text-center\">\n <rolatech-spinner></rolatech-spinner>\n <div class=\"text-2xl font-medium\">Verifying your email</div>\n <div class=\"text-sm text-(--rt-text-secondary)\">Please wait while we confirm this verification link.</div>\n </div>\n } @else if (verified) {\n <div class=\"flex flex-col gap-6\">\n <div>\n <div class=\"text-3xl font-medium mb-3\">{{ heading }}</div>\n <div class=\"text-md text-(--rt-text-secondary)\">{{ message }}</div>\n </div>\n\n <div class=\"flex flex-wrap items-center gap-3\">\n <a mat-flat-button [href]=\"continueUrl\">Continue</a>\n <a mat-button [href]=\"signInUrl\">Sign in</a>\n </div>\n </div>\n } @else {\n <div class=\"flex flex-col gap-6\">\n <div>\n <div class=\"text-3xl font-medium mb-3\">{{ heading }}</div>\n <div class=\"text-md text-(--rt-text-secondary)\">{{ message }}</div>\n </div>\n\n <div class=\"flex flex-wrap items-center gap-3\">\n <a mat-flat-button [href]=\"signInUrl\">Sign in</a>\n <a mat-button [href]=\"continueUrl\">Back</a>\n </div>\n </div>\n }\n </div>\n</div>\n", styles: ["rolatech-account-email-verification{height:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: SpinnerComponent, selector: "rolatech-spinner", inputs: ["title"] }], encapsulation: i0.ViewEncapsulation.None }); }
517
568
  }
518
569
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: EmailVerificationComponent, decorators: [{
519
570
  type: Component,
520
- args: [{ imports: [CommonModule, MatButtonModule, SpinnerComponent], selector: 'rolatech-account-email-verification', template: "<div class=\"h-full flex items-start sm:items-center sm:justify-center\">\n <div\n class=\"w-full h-full justify-start md:h-auto p-6 lg:p-11 rounded-xl bg-(--rt-signin-inner-background) flex flex-col md:justify-between xl:w-[1000px] lg:w-[900px] md:w-[600px]\"\n >\n @if (loading) {\n <div class=\"flex min-h-[280px] flex-col items-center justify-center gap-4 text-center\">\n <rolatech-spinner></rolatech-spinner>\n <div class=\"text-2xl font-medium\">Verifying your email</div>\n <div class=\"text-sm text-(--rt-text-secondary)\">Please wait while we confirm this verification link.</div>\n </div>\n } @else if (verified) {\n <div class=\"flex flex-col gap-6\">\n <div>\n <div class=\"text-3xl font-medium mb-3\">Email verified</div>\n <div class=\"text-md text-(--rt-text-secondary)\">{{ message }}</div>\n </div>\n\n <div class=\"flex flex-wrap items-center gap-3\">\n <a mat-flat-button [href]=\"continueUrl\">Continue</a>\n <a mat-button [href]=\"signInUrl\">Sign in</a>\n </div>\n </div>\n } @else {\n <div class=\"flex flex-col gap-6\">\n <div>\n <div class=\"text-3xl font-medium mb-3\">Link invalid or expired</div>\n <div class=\"text-md text-(--rt-text-secondary)\">{{ message }}</div>\n </div>\n\n <div class=\"flex flex-wrap items-center gap-3\">\n <a mat-flat-button [href]=\"signInUrl\">Sign in</a>\n <a mat-button [href]=\"continueUrl\">Back</a>\n </div>\n </div>\n }\n </div>\n</div>\n" }]
571
+ args: [{ imports: [CommonModule, MatButtonModule, SpinnerComponent], selector: 'rolatech-account-email-verification', encapsulation: ViewEncapsulation.None, template: "<div class=\"h-full flex items-start sm:items-center sm:justify-center\">\n <div\n class=\"w-full h-full justify-start md:h-auto p-6 lg:p-11 rounded-xl bg-(--rt-signin-inner-background) flex flex-col md:justify-between xl:w-[1000px] lg:w-[900px] md:w-[600px]\"\n >\n @if (loading) {\n <div class=\"flex min-h-[280px] flex-col items-center justify-center gap-4 text-center\">\n <rolatech-spinner></rolatech-spinner>\n <div class=\"text-2xl font-medium\">Verifying your email</div>\n <div class=\"text-sm text-(--rt-text-secondary)\">Please wait while we confirm this verification link.</div>\n </div>\n } @else if (verified) {\n <div class=\"flex flex-col gap-6\">\n <div>\n <div class=\"text-3xl font-medium mb-3\">{{ heading }}</div>\n <div class=\"text-md text-(--rt-text-secondary)\">{{ message }}</div>\n </div>\n\n <div class=\"flex flex-wrap items-center gap-3\">\n <a mat-flat-button [href]=\"continueUrl\">Continue</a>\n <a mat-button [href]=\"signInUrl\">Sign in</a>\n </div>\n </div>\n } @else {\n <div class=\"flex flex-col gap-6\">\n <div>\n <div class=\"text-3xl font-medium mb-3\">{{ heading }}</div>\n <div class=\"text-md text-(--rt-text-secondary)\">{{ message }}</div>\n </div>\n\n <div class=\"flex flex-wrap items-center gap-3\">\n <a mat-flat-button [href]=\"signInUrl\">Sign in</a>\n <a mat-button [href]=\"continueUrl\">Back</a>\n </div>\n </div>\n }\n </div>\n</div>\n", styles: ["rolatech-account-email-verification{height:100%}\n"] }]
521
572
  }] });
522
573
 
523
574
  var emailVerification_component = /*#__PURE__*/Object.freeze({
@@ -1 +1 @@
1
- {"version":3,"file":"rolatech-angular-account.mjs","sources":["../../../../packages/angular-account/src/lib/components/topbar-login/topbar-login.component.ts","../../../../packages/angular-account/src/lib/components/topbar-login/topbar-login.component.html","../../../../packages/angular-account/src/lib/components/logout/logout.component.ts","../../../../packages/angular-account/src/lib/components/logout/logout.component.html","../../../../packages/angular-account/src/lib/services/wechat-login.service.ts","../../../../packages/angular-account/src/lib/pages/accounts/signin/signin.component.ts","../../../../packages/angular-account/src/lib/pages/accounts/signin/signin.component.html","../../../../packages/angular-account/src/lib/pages/accounts/signup/signup.component.ts","../../../../packages/angular-account/src/lib/pages/accounts/signup/signup.component.html","../../../../packages/angular-account/src/lib/pages/accounts/forgot/forgot.ts","../../../../packages/angular-account/src/lib/pages/accounts/forgot/forgot.html","../../../../packages/angular-account/src/lib/pages/accounts/password-reset/password-reset.ts","../../../../packages/angular-account/src/lib/pages/accounts/password-reset/password-reset.html","../../../../packages/angular-account/src/lib/pages/myaccount/email-verification/email-verification.component.ts","../../../../packages/angular-account/src/lib/pages/myaccount/email-verification/email-verification.component.html","../../../../packages/angular-account/src/lib/account.routes.ts","../../../../packages/angular-account/src/lib/myaccount.routes.ts","../../../../packages/angular-account/src/provider.ts","../../../../packages/angular-account/src/rolatech-angular-account.ts"],"sourcesContent":["import { Component, OnDestroy, OnInit, PLATFORM_ID, ViewEncapsulation, inject, input } from '@angular/core';\nimport { CommonModule, isPlatformBrowser } from '@angular/common';\nimport { APP_CONFIG } from '@rolatech/angular-common';\nimport { MatButtonModule } from '@angular/material/button';\nimport {\n NavigationEnd,\n Router,\n Event,\n NavigationStart,\n NavigationCancel,\n NavigationError,\n ActivatedRoute,\n Route,\n} from '@angular/router';\nimport { filter, Subscription } from 'rxjs';\ntype NavigationEvent = NavigationStart | NavigationEnd | NavigationCancel | NavigationError;\n\n@Component({\n selector: 'rolatech-account-topbar-login',\n imports: [CommonModule, MatButtonModule],\n templateUrl: './topbar-login.component.html',\n styleUrl: './topbar-login.component.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class TopbarLoginComponent implements OnInit, OnDestroy {\n environment = inject(APP_CONFIG);\n platformId = inject(PLATFORM_ID);\n route = inject(ActivatedRoute);\n router = inject(Router);\n private routerSubscription: Subscription | undefined;\n\n service = input('www');\n signinUrl = '';\n signupUrl = this.environment.accountsUrl + '/signup';\n logoutUrl = this.environment.accountsUrl + `/logout?service=${this.service()}`;\n ngOnInit(): void {\n if (isPlatformBrowser(this.platformId)) {\n this.signinUrl = `${this.environment.accountsUrl}/signin?continue=` + window.location.href;\n this.signupUrl = `${this.environment.accountsUrl}/signup?continue=` + window.location.href;\n this.logoutUrl = this.environment.accountsUrl + `/logout?service=${this.service()}&continue=` + window.location.origin;\n }\n\n this.routerSubscription = this.router.events\n .pipe(filter((event: Event): event is NavigationEvent => event instanceof NavigationStart))\n .subscribe((event) => {\n this.signinUrl = `${this.environment.accountsUrl}/signin?continue=` + window.location.origin + event.url;\n this.signupUrl = `${this.environment.accountsUrl}/signup?continue=` + window.location.href + event.url;\n\n // this.checkRouteGuard(event.url);\n\n const currentUrl = this.router.url; // Get the current URL\n const matchedRoute = this.findRouteConfig(currentUrl);\n\n if (matchedRoute) {\n console.log('Matched Route Config:', matchedRoute);\n } else {\n console.log('No matching route found.');\n }\n });\n }\n ngOnDestroy() {\n this.routerSubscription?.unsubscribe();\n }\n // checkRouteGuard(url: string): void {\n // // const route = this.router.config.find((r) => r.path === routePath);\n // const route = this.router.config.find((r: any) => this.matchRoute(url, r.path));\n\n // if (route) {\n // if (route.canActivate && route.canActivate.length > 0) {\n // console.log(`Route \"${url}\" has canActivate guards:`, route.canActivate);\n // } else {\n // console.log(`Route \"${url}\" does not have canActivate guards.`);\n // }\n // } else {\n // console.log(`Route \"${url}\" not found.`);\n // }\n // }\n // matchRoute(url: string, routePath: string): boolean {\n // // Strip leading/trailing slashes from URL and routePath and compare\n // return url.replace(/^\\/|\\/$/g, '') === routePath.replace(/^\\/|\\/$/g, '');\n // }\n findRouteConfig(url: string): Route | undefined {\n return this.router.config.find((route) => this.matchRoute(route, url));\n }\n\n // Helper function to check if a route matches the current URL\n matchRoute(route: Route, url: string): boolean {\n const path = route.path?.split('/').join('');\n const urlSegment = url.split('/').join('');\n return path === urlSegment;\n }\n}\n","<div class=\"flex items-center\">\n <a mat-stroked-button class=\"mr-2 max-h-9 md:max-h-10\" [href]=\"signinUrl\"><span i18n>Sign in</span></a>\n <a mat-flat-button class=\"max-h-9 md:max-h-10\" [href]=\"signupUrl\"><span i18n>Sign up</span></a>\n</div>\n","import { isPlatformBrowser } from '@angular/common';\nimport { Component, inject, OnInit, PLATFORM_ID } from '@angular/core';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { AuthService } from '@rolatech/angular-auth';\nimport { APP_CONFIG, AngularCommonModule } from '@rolatech/angular-common';\nimport { AngularComponentsModule } from '@rolatech/angular-components';\nimport { map, take } from 'rxjs';\n\n@Component({\n imports: [AngularCommonModule, AngularComponentsModule],\n selector: 'rolatech-account-logout',\n templateUrl: './logout.component.html',\n styleUrls: ['./logout.component.scss'],\n})\nexport class LogoutComponent implements OnInit {\n service = '';\n continue = '';\n environment = inject(APP_CONFIG);\n platformId = inject(PLATFORM_ID);\n route = inject(ActivatedRoute);\n router = inject(Router);\n authService = inject(AuthService);\n snackBar = inject(MatSnackBar);\n\n ngOnInit(): void {\n this.service = this.route.snapshot.queryParams['service'] || 'www';\n this.continue = this.route.snapshot.queryParams['continue'] || '/';\n if (isPlatformBrowser(this.platformId)) {\n this.logout();\n }\n }\n logout() {\n this.authService.logout().subscribe({\n next: (res) => {\n // this.router.navigate(['/signin'], {\n // queryParams: { continue: this.continue },\n // });\n // this.router.navigate([this.continue]);\n // this.router.navigateByUrl(this.continue);\n window.location.href = this.continue;\n },\n error: (error) => {\n this.snackBar.open(error.message);\n },\n });\n }\n}\n","<p>Please waiting...</p>\n","import { Directive, EventEmitter, Injectable, output } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\n@Directive()\nexport class WeChatLoginService {\n onWeChatLogin = new EventEmitter<any>();\n\n constructor() {}\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { Component, effect, HostListener, inject, OnInit, signal, ViewEncapsulation } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { SafeResourceUrl, DomSanitizer } from '@angular/platform-browser';\nimport { AngularCommonModule, APP_CONFIG } from '@rolatech/angular-common';\nimport { AngularComponentsModule, BaseComponent, TabComponent, TabsComponent } from '@rolatech/angular-components';\nimport { AUTH_METHODS, AuthMethod, AuthService, AuthUserService } from '@rolatech/angular-auth';\nimport { WeChatLoginService } from '../../../services/wechat-login.service';\n\n@Component({\n imports: [AngularCommonModule, AngularComponentsModule, TabsComponent, TabComponent],\n selector: 'rolatech-account-signin',\n templateUrl: './signin.component.html',\n styleUrls: ['./signin.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class SigninComponent extends BaseComponent implements OnInit {\n environment = inject(APP_CONFIG);\n authMethods = inject(AUTH_METHODS);\n hasPassword = this.authMethods.includes(AuthMethod.Password);\n hasOTP = this.authMethods.includes(AuthMethod.OTP);\n hasWeChat = this.authMethods.includes(AuthMethod.WeChat);\n hasGoogle = this.authMethods.includes(AuthMethod.Google);\n formBuilder = inject(FormBuilder);\n authService = inject(AuthService);\n authUserService = inject(AuthUserService);\n wechtLoginService = inject(WeChatLoginService);\n sanitizer = inject(DomSanitizer);\n passrodForm!: FormGroup;\n codeForm!: FormGroup;\n continue = '';\n signUpUrl = '';\n forGotUrl = '';\n tabIndex = signal(0);\n countDown = false;\n countDownTime = 60;\n showButtonText = `Send`;\n appid = 'this.environment.wechat.appId';\n state = 'add';\n isLoading = false;\n urlSafe: SafeResourceUrl = this.sanitizer.bypassSecurityTrustResourceUrl('');\n baseUrl = 'https://open.weixin.qq.com/connect/qrconnect';\n @HostListener('window:message', ['$event'])\n onLogin(event: any): void {\n if (\n event.origin !== window.location.origin ||\n /react-devtools/gi.test(event.data.source) ||\n /angular-devtools/gi.test(event.data.source)\n ) {\n return;\n }\n if (event.origin === this.environment.accountsUrl && event.data.code === 200) {\n window.location.href = this.continue === this.environment.accountsUrl ? this.environment.myaccountUrl : this.continue;\n }\n }\n constructor() {\n super();\n effect(() => {\n const index = this.tabIndex();\n if (index === 0) {\n if (this.codeForm) {\n this.codeForm.reset();\n }\n }\n if (index === 1) {\n if (this.passrodForm) {\n this.passrodForm.reset();\n }\n }\n if (index === 2) {\n this.isLoading = true;\n if (this.codeForm && this.passrodForm) {\n this.codeForm.reset();\n this.passrodForm.reset();\n }\n this.wechat();\n }\n });\n }\n ngOnInit(): void {\n this.titleService.setTitle('Sign in');\n if (this.hasPassword) {\n this.passrodForm = this.formBuilder.group({\n // account: [null, [Validators.required, Validators.pattern('^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}$')]],\n account: [null, [Validators.required]],\n password: [null, [Validators.required, Validators.minLength(6)]],\n });\n }\n if (this.hasOTP) {\n this.codeForm = this.formBuilder.group({\n phone: [null, [Validators.required, Validators.pattern('1(3|4|5|6|7|8|9)\\\\d{9}')]],\n code: [null, Validators.required],\n });\n }\n this.route.queryParams.subscribe((params) => {\n this.continue = params['continue'] || '/'; // Default to home if no continue param\n const decodedUrl = decodeURIComponent(this.continue);\n this.signUpUrl = this.continue ? `signup?continue=${decodedUrl}` : 'signup';\n this.forGotUrl = 'signin/forgot';\n });\n // this.continue = this.route.snapshot.queryParams['continue'];\n // if (this.continue) {\n // const decodedUrl = decodeURIComponent(this.continue);\n // this.signUpUrl = this.continue ? `signup?continue=${decodedUrl}` : 'signup';\n // }\n }\n get form() {\n return this.tabIndex() === 0 ? this.passrodForm.controls : this.codeForm.controls;\n }\n sendSMSCode() {\n const phoneControl = this.codeForm.get('phone');\n if (!phoneControl?.valid) {\n return;\n }\n const phone = phoneControl.value;\n this.countDown = true;\n const start = setInterval(() => {\n if (this.countDownTime >= 0) {\n this.showButtonText = $localize`${this.countDownTime--}s resend`;\n } else {\n clearInterval(start);\n this.showButtonText = $localize`Resend`;\n this.countDown = false;\n this.countDownTime = 60;\n }\n }, 1000);\n\n this.authUserService.sendSMSCode('+86', phone).subscribe({\n next: (res) => {\n this.snackBarService.open('Success');\n },\n error: (error) => {\n this.snackBarService.open(error.message);\n },\n });\n }\n login() {\n let data = {};\n if (this.tabIndex() === 0) {\n if (!this.passrodForm.valid) {\n return;\n }\n data = {\n account: this.form['account'].value,\n password: this.form['password'].value,\n };\n }\n if (this.tabIndex() === 1) {\n if (!this.codeForm.valid) {\n return;\n }\n data = {\n phone: this.form['phone'].value,\n code: this.form['code'].value,\n };\n }\n\n this.authService.login(data).subscribe({\n next: () => {\n if (isPlatformBrowser(this.platformId)) {\n window.location.href = this.continue === this.environment.accountsUrl ? this.environment.myaccountUrl : this.continue;\n }\n },\n error: (error) => {\n this.snackBarService.open(error.message);\n },\n });\n }\n wechat() {\n // const redirectUri = 'https://accounts.pinxiaoke.cn/login?continue';\n const redirectUri = `${window.location.origin}/login?continue`;\n const encodedURI = encodeURI(redirectUri);\n const src = `${this.baseUrl}?appid=${this.appid}&response_type=code&self_redirect=true&scope=snsapi_login&stylelite=1&redirect_uri=${encodedURI}&state=${this.state}#wechat_redirect`;\n this.urlSafe = this.sanitizer.bypassSecurityTrustResourceUrl(src);\n }\n}\n","<div class=\"h-full flex items-start sm:items-center sm:justify-center\">\n <div\n class=\"w-full h-full justify-start md:h-auto p-6 lg:p-11 rounded-xl bg-(--rt-signin-inner-background) flex flex-col lg:flex-row md:justify-between xl:w-[1000px] lg:w-[900px] md:w-[600px]\"\n >\n <!-- header -->\n\n <div class=\"flex flex-col justify-between lg:w-1/2\">\n <div class=\"flex flex-col py-6\">\n <div class=\"text-3xl font-medium mb-3 ml-2\" i18n>Sign in</div>\n <div class=\"text-md ml-2\" i18n>Use your {{ environment.name }} Account</div>\n </div>\n <!-- <div>\n <a class=\"underline underline-offset-4 text-sm text-(--rt-brand-color)\" [href]=\"forGotUrl\" i18n>Forgot?</a>\n </div> -->\n </div>\n <div class=\"lg:w-1/2\">\n <rolatech-tabs [(select)]=\"tabIndex\">\n @if (hasPassword) {\n <rolatech-tab label=\"Password\"></rolatech-tab>\n }\n @if (hasOTP) {\n <rolatech-tab label=\"OTP\"></rolatech-tab>\n }\n @if (hasWeChat) {\n <rolatech-tab label=\"WeChat\"></rolatech-tab>\n }\n </rolatech-tabs>\n <!-- content -->\n <div class=\"pt-6 min-w-[320px] min-h-[214px]\">\n @if (tabIndex() === 0) {\n <form [formGroup]=\"passrodForm\" class=\"flex flex-col\">\n @if (hasPassword) {\n <mat-form-field>\n <mat-label i18n> Email/Username </mat-label>\n <input matInput formControlName=\"account\" required />\n @if (passrodForm.controls['account'].touched && passrodForm.controls['account'].invalid) {\n <mat-error>\n @if (passrodForm.controls['account'].errors?.['required']) {\n <span i18n>Email is required</span>\n }\n @if (passrodForm.controls['account'].errors?.['pattern']) {\n <span i18n>Invalid email</span>\n }\n </mat-error>\n }\n </mat-form-field>\n }\n <mat-form-field>\n <mat-label i18n> Password </mat-label>\n <input autocomplete matInput formControlName=\"password\" type=\"password\" />\n @if (passrodForm.controls['password'].touched && passrodForm.controls['password'].invalid) {\n <mat-error>\n @if (passrodForm.controls['password'].errors?.['required']) {\n <span i18n>Password required</span>\n }\n @if (passrodForm.controls['password'].errors?.['minlength']) {\n <span i18n>Password too short</span>\n }\n </mat-error>\n }\n </mat-form-field>\n </form>\n }\n @if (tabIndex() === 1) {\n <form [formGroup]=\"codeForm\" class=\"flex flex-col\">\n @if (hasOTP) {\n <mat-form-field appearance=\"fill\">\n <mat-label i18n> Phone </mat-label>\n <input autocomplete matInput formControlName=\"phone\" required />\n @if (codeForm.controls['phone'].touched && codeForm.controls['phone'].invalid) {\n <mat-error>\n @if (codeForm.controls['phone'].errors?.['required']) {\n <span i18n> Phone required</span>\n }\n @if (codeForm.controls['phone'].errors?.['pattern']) {\n <span i18n> Phone invalid </span>\n }\n </mat-error>\n }\n </mat-form-field>\n <div class=\"flex justify-between items-center\">\n <mat-form-field appearance=\"fill\">\n <mat-label i18n> Code </mat-label>\n <input matInput formControlName=\"code\" required />\n @if (codeForm.controls['code'].touched && codeForm.controls['code'].invalid) {\n <mat-error>\n @if (codeForm.controls['code'].errors?.['required']) {\n <span i18n>Code required</span>\n }\n </mat-error>\n }\n </mat-form-field>\n <button\n mat-flat-button\n (click)=\"sendSMSCode()\"\n [disabled]=\"countDown\"\n class=\"max-w-[128px] text-white text-center\"\n >\n <span i18n>{{ showButtonText }}</span>\n </button>\n </div>\n }\n </form>\n }\n @if (tabIndex() === 2) {\n <div class=\"w-[190px] h-[190px] ml-[56px]\">\n <iframe [src]=\"urlSafe\" class=\"w-full h-full inline\" scrolling=\"no\" frameBorder=\"no\" #iframe></iframe>\n </div>\n }\n </div>\n <!-- actions -->\n <div class=\"flex justify-between items-center py-3 pl-2\">\n <a class=\"underline underline-offset-4 text-sm text-(--rt-brand-color)\" [href]=\"signUpUrl\" i18n>Create account</a>\n <a class=\"underline underline-offset-4 text-sm text-(--rt-brand-color)\" [href]=\"forGotUrl\" i18n>Forgot?</a>\n <button mat-flat-button (click)=\"login()\" class=\"w-[128px]\" i18n>Sign in</button>\n </div>\n </div>\n </div>\n</div>\n","import { Component, inject, OnInit, ViewEncapsulation } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { AngularCommonModule, APP_CONFIG, WINDOW } from '@rolatech/angular-common';\nimport { AngularComponentsModule, BaseComponent } from '@rolatech/angular-components';\nimport { AuthService, AuthUserService } from '@rolatech/angular-auth';\n@Component({\n imports: [AngularCommonModule, AngularComponentsModule],\n selector: 'rolatech-account-signup',\n templateUrl: './signup.component.html',\n styleUrls: ['./signup.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class SignupComponent extends BaseComponent implements OnInit {\n environment = inject(APP_CONFIG);\n authService = inject(AuthService);\n authUserService = inject(AuthUserService);\n formBuilder = inject(FormBuilder);\n window = inject(WINDOW);\n signupForm!: FormGroup;\n continue = '/';\n signInUrl = '';\n usePhone = false\n countDown = false;\n countDownTime = 60;\n showButtonText = 'Send';\n\n ngOnInit(): void {\n this.titleService.setTitle('Sign up');\n this.signupForm = this.formBuilder.group({\n firstName: [null, Validators.required],\n lastName: [null, Validators.required],\n email: [null, [Validators.required, Validators.pattern('^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}$')]],\n password: [null, [Validators.required, Validators.minLength(6)]],\n rePassword: [null, [Validators.required, Validators.minLength(6)]],\n });\n // this.signupForm = this.formBuilder.group({\n // name: [null, Validators.required],\n // phone: [null, [Validators.required, Validators.pattern('1(3|4|5|6|7|8|9)\\\\d{9}')]],\n // code: [null, [Validators.required, Validators.minLength(6)]],\n // password: [null, [Validators.required, Validators.minLength(6)]],\n // rePassword: [null, [Validators.required, Validators.minLength(6)]],\n // });\n\n this.continue = this.route.snapshot.queryParams['continue'] || '/';\n const decodedUrl = decodeURIComponent(this.continue);\n this.signInUrl = `signin?continue=${decodedUrl}`;\n }\n sendSMSCode() {\n const phoneControl = this.signupForm.get('phone');\n if (!phoneControl?.valid) {\n return;\n }\n const phone = phoneControl.value;\n this.countDown = true;\n const start = setInterval(() => {\n if (this.countDownTime >= 0) {\n this.showButtonText = `${this.countDownTime--}s resend`;\n } else {\n clearInterval(start);\n this.showButtonText = 'Resend';\n this.countDown = false;\n this.countDownTime = 60;\n }\n }, 1000);\n this.authUserService.sendSMSCode('+86', phone).subscribe({\n next: (res) => {\n this.snackBarService.open('Success');\n },\n error: (error) => {\n this.snackBarService.open(error.message);\n },\n });\n }\n submit() {\n if (!this.signupForm.valid) {\n return;\n }\n this.authService.signup(this.signupForm.value).subscribe({\n next: (res) => {\n console.log(res);\n this.window.location.href = this.continue ? this.continue : this.environment.myaccountUrl;\n },\n error: (error) => {\n this.snackBarService.open(error.message);\n },\n });\n }\n}\n","<div class=\"h-full flex items-start sm:items-center sm:justify-center\">\n <div\n class=\"w-full h-full md:h-auto justify-start md:justify-between p-6 lg:p-11 rounded-xl bg-(--rt-signin-inner-background) flex flex-col lg:flex-row lg:flex-row md:justify-between xl:w-[1000px] lg:w-[900px] md:w-[600px]\"\n >\n <!-- header -->\n <div class=\"flex flex-col py-6\">\n <div class=\"text-3xl font-medium mb-3 ml-2\" i18n>Create your {{ environment.name }} account</div>\n <div class=\"text-md ml-2\" i18n>Sign up, Get more.</div>\n </div>\n <div class=\"min-w-[320px]\">\n <form [formGroup]=\"signupForm\" (submit)=\"submit()\" class=\"flex flex-col\">\n @if (usePhone) {\n <!-- name -->\n <mat-form-field appearance=\"fill\">\n <mat-label i18n> Name </mat-label>\n <input matInput formControlName=\"name\" required />\n @if (signupForm.controls['name'].touched && signupForm.controls['name'].invalid) {\n <mat-error>\n @if (signupForm.controls['name'].errors?.['required']) {\n <span i18n>Name required</span>\n }\n </mat-error>\n }\n </mat-form-field>\n <!-- phone -->\n <mat-form-field appearance=\"fill\">\n <mat-label i18n> Phone </mat-label>\n <input matInput formControlName=\"phone\" required />\n @if (signupForm.controls['phone'].touched && signupForm.controls['phone'].invalid) {\n <mat-error>\n @if (signupForm.controls['phone'].errors?.['required']) {\n <span i18n>Phone is required</span>\n }\n @if (signupForm.controls['phone'].errors?.['pattern']) {\n <span i18n>Invalid Phone </span>\n }\n </mat-error>\n }\n </mat-form-field>\n <!-- phone code -->\n <div class=\"flex justify-between items-center gap-3\">\n <mat-form-field appearance=\"fill\" class=\"w-full\">\n <mat-label i18n> Code </mat-label>\n <input matInput type=\"text\" formControlName=\"code\" autocomplete=\"new-password\" required />\n @if (signupForm.controls['code'].touched && signupForm.controls['code'].invalid) {\n <mat-error>\n @if (signupForm.controls['code'].errors?.['required']) {\n <span i18n>Code is required</span>\n }\n </mat-error>\n }\n </mat-form-field>\n <button mat-button (click)=\"sendSMSCode()\" [disabled]=\"countDown\" class=\"w-[128px] text-white text-center\">\n <span>{{ showButtonText }}</span>\n </button>\n </div>\n }\n <div class=\"flex flex-col md:flex-row gap-3 items-center\">\n <!--First name -->\n <mat-form-field appearance=\"fill\">\n <mat-label i18n> Fist name </mat-label>\n <input matInput formControlName=\"firstName\" required />\n @if (signupForm.controls['firstName'].touched && signupForm.controls['firstName'].invalid) {\n <mat-error>\n @if (signupForm.controls['firstName'].errors?.['required']) {\n <span i18n>First name required</span>\n }\n </mat-error>\n }\n </mat-form-field>\n <!-- Last name -->\n <mat-form-field appearance=\"fill\">\n <mat-label i18n> Last name </mat-label>\n <input matInput formControlName=\"lastName\" required />\n @if (signupForm.controls['lastName'].touched && signupForm.controls['lastName'].invalid) {\n <mat-error>\n @if (signupForm.controls['lastName'].errors?.['required']) {\n <span i18n>Last name required</span>\n }\n </mat-error>\n }\n </mat-form-field>\n </div>\n <!-- Email account -->\n <mat-form-field appearance=\"fill\">\n <mat-label i18n> Email </mat-label>\n <input matInput formControlName=\"email\" required />\n @if (signupForm.controls['email'].touched && signupForm.controls['email'].invalid) {\n <mat-error>\n @if (signupForm.controls['email'].errors?.['required']) {\n <span i18n>Email is required</span>\n }\n @if (signupForm.controls['email'].errors?.['pattern']) {\n <span i18n>Invalid email</span>\n }\n </mat-error>\n }\n </mat-form-field>\n <!-- Password -->\n <mat-form-field appearance=\"fill\">\n <mat-label i18n> Password </mat-label>\n <input matInput formControlName=\"password\" type=\"password\" autocomplete=\"password\" />\n @if (signupForm.controls['password'].touched && signupForm.controls['password'].invalid) {\n <mat-error>\n @if (signupForm.controls['password'].errors?.['required']) {\n <span i18n>Password required</span>\n }\n @if (signupForm.controls['password'].errors?.['minlength']) {\n <span i18n>Password too short</span>\n }\n </mat-error>\n }\n </mat-form-field>\n\n <!-- password confirm -->\n <mat-form-field appearance=\"fill\">\n <mat-label i18n> Password </mat-label>\n <input matInput formControlName=\"rePassword\" type=\"password\" autocomplete=\"rePassword\" />\n @if (signupForm.controls['rePassword'].touched && signupForm.controls['rePassword'].invalid) {\n <mat-error>\n @if (signupForm.controls['rePassword'].errors?.['required']) {\n <span i18n>Password required</span>\n }\n @if (signupForm.controls['rePassword'].errors?.['minlength']) {\n <span i18n>Password too short</span>\n }\n </mat-error>\n }\n </mat-form-field>\n </form>\n <div class=\"flex justify-between items-center py-3 pl-2\">\n <a mat-button [href]=\"signInUrl\" i18n>Sign in</a>\n <button mat-flat-button (click)=\"submit()\" class=\"w-[128px]\" i18n>Sign up</button>\n </div>\n </div>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, OnInit, ViewEncapsulation } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\nimport { AuthService } from '@rolatech/angular-auth';\nimport { BaseComponent } from '@rolatech/angular-components';\n\n@Component({\n selector: 'rolatech-account-forgot',\n imports: [FormsModule, MatInputModule, CommonModule, MatButtonModule],\n templateUrl: './forgot.html',\n styleUrl: './forgot.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class Forgot extends BaseComponent implements OnInit {\n authService = inject(AuthService);\n email = '';\n signInUrl = '';\n ngOnInit(): void {\n this.titleService.setTitle('Sign up');\n this.signInUrl = `signin`;\n }\n send() {\n this.authService.requestPasswordReset(this.email).subscribe({\n next: () => {\n this.snackBarService.open('Password reset link sent.');\n },\n error: (error) => {\n this.snackBarService.open(error.message);\n },\n });\n }\n}\n","<div class=\"h-full flex items-start sm:items-center sm:justify-center\">\n <div\n class=\"w-full h-full justify-start md:h-auto p-6 lg:p-11 rounded-xl bg-(--rt-signin-inner-background) flex flex-col lg:flex-row md:justify-between xl:w-[1000px] lg:w-[900px] md:w-[600px]\"\n >\n <!-- header -->\n <div class=\"flex flex-col py-6 lg:w-1/2 lg:pr-4\">\n <div class=\"text-3xl font-medium mb-3 ml-2\" i18n>Reset password</div>\n <div class=\"text-md ml-2\" i18n>Enter your email, password reset link will send to this email.</div>\n </div>\n <div class=\"lg:w-1/2 lg:pl-4\">\n <!-- content -->\n <div class=\"pt-6 min-w-[320px] min-h-[214px]\">\n <mat-form-field appearance=\"fill\">\n <mat-label i18n> Email </mat-label>\n <input matInput [(ngModel)]=\"email\" />\n </mat-form-field>\n </div>\n <!-- actions -->\n <div class=\"flex justify-between items-center py-3 pl-2\">\n <!-- <a class=\"underline underline-offset-4 text-sm text-(--rt-brand-color)\" [href]=\"signUpUrl\" i18n>Sign in</a> -->\n <a class=\"underline underline-offset-4 text-sm text-(--rt-brand-color)\" [href]=\"signInUrl\" i18n>Sign in</a>\n <button mat-flat-button (click)=\"send()\" class=\"w-[128px]\" i18n>Send</button>\n </div>\n </div>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, OnInit, ViewEncapsulation } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\nimport { AuthService } from '@rolatech/angular-auth';\nimport { BaseComponent } from '@rolatech/angular-components';\n\n@Component({\n selector: 'rolatech-account-password-reset',\n imports: [FormsModule, MatInputModule, CommonModule, MatButtonModule],\n templateUrl: './password-reset.html',\n styleUrl: './password-reset.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class PasswordReset extends BaseComponent implements OnInit {\n authService = inject(AuthService);\n invalidToken = false;\n signInUrl = '';\n token = '';\n password = '';\n newPassword = '';\n ngOnInit(): void {\n this.titleService.setTitle('Sign up');\n this.signInUrl = `signin`;\n const token = this.route.snapshot.queryParams['token'] ?? undefined;\n if (token) {\n this.authService.validatePasswordRestToken(token).subscribe({\n next: (res) => {\n this.token = token;\n },\n error: (error) => {\n console.log(error);\n this.invalidToken = true;\n },\n });\n }\n }\n resetPassword() {\n if (this.password !== this.newPassword) {\n this.snackBarService.open('Password not match');\n return;\n }\n if (this.password.length < 8) {\n this.snackBarService.open('Password too weak');\n return;\n }\n this.authService.resetPassword({ token: this.token, newPassword: this.newPassword }).subscribe({\n next: (res) => {\n this.snackBarService.open('Password reset');\n this.router.navigateByUrl('/signin');\n },\n });\n }\n}\n","<div class=\"h-full flex items-start sm:items-center sm:justify-center\">\n <div\n class=\"w-full h-full justify-start md:h-auto p-6 lg:p-11 rounded-xl bg-(--rt-signin-inner-background) flex flex-col lg:flex-row md:justify-between xl:w-[1000px] lg:w-[900px] md:w-[600px]\"\n >\n @if (invalidToken) {\n <div>\n <div class=\"text-3xl font-medium mb-3 ml-2\" i18n>Link invalid or expired</div>\n <div class=\"text-md ml-2\" i18n>\n To reset your password, return to the login page and select \"Forgot?\" to send a new email.\n </div>\n <div class=\"flex justify-between items-center py-3 pl-2\">\n <a class=\"underline underline-offset-4 text-sm text-(--rt-brand-color)\" [href]=\"signInUrl\" i18n>Sign in</a>\n </div>\n </div>\n\n } @else {\n <div class=\"flex flex-col py-6 lg:w-1/2 lg:pr-4\">\n <div class=\"text-3xl font-medium mb-3 ml-2\" i18n>Reset password</div>\n <div class=\"text-md ml-2\" i18n>Enter your new password.</div>\n </div>\n <div class=\"lg:w-1/2 lg:pl-4\">\n <div class=\"pt-6 min-w-[320px] min-h-[214px]\">\n <mat-form-field appearance=\"fill\">\n <mat-label i18n> Password </mat-label>\n <input matInput [(ngModel)]=\"password\" required type=\"password\" />\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label i18n> Password </mat-label>\n <input matInput [(ngModel)]=\"newPassword\" required type=\"password\" />\n </mat-form-field>\n </div>\n <div class=\"flex justify-between items-center py-3 pl-2\">\n <a class=\"underline underline-offset-4 text-sm text-(--rt-brand-color)\" [href]=\"signInUrl\" i18n>Sign in</a>\n <button mat-flat-button (click)=\"resetPassword()\" class=\"w-[128px]\" i18n>Reset</button>\n </div>\n </div>\n }\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { MatButtonModule } from '@angular/material/button';\nimport { AuthService, AuthUserService } from '@rolatech/angular-auth';\nimport { APP_CONFIG } from '@rolatech/angular-common';\nimport { SpinnerComponent } from '@rolatech/angular-components';\n\n@Component({\n imports: [CommonModule, MatButtonModule, SpinnerComponent],\n selector: 'rolatech-account-email-verification',\n templateUrl: './email-verification.component.html',\n styleUrls: ['./email-verification.component.scss'],\n})\nexport class EmailVerificationComponent implements OnInit {\n private readonly route = inject(ActivatedRoute);\n private readonly authService = inject(AuthService);\n private readonly authUserService = inject(AuthUserService);\n private readonly environment = inject(APP_CONFIG);\n\n loading = true;\n verified = false;\n invalid = false;\n message = '';\n signInUrl = '';\n continueUrl = '';\n\n ngOnInit(): void {\n this.signInUrl = `${this.environment.accountsUrl}/signin`;\n this.continueUrl = this.environment.myaccountUrl || this.environment.accountsUrl || '/';\n\n const token = this.route.snapshot.queryParamMap.get('token') ?? this.route.snapshot.paramMap.get('id') ?? '';\n if (!token) {\n this.finish(false, 'Email verification token is missing.');\n return;\n }\n\n this.authUserService.verifyEmailByToken(token).subscribe({\n next: (verified) => {\n this.finish(\n verified,\n verified ? 'Your email address has been verified successfully.' : 'This email verification link is invalid or expired.',\n );\n\n if (verified) {\n this.authService.ensureLoaded(true).subscribe({\n error: () => undefined,\n });\n }\n },\n error: (error) => {\n this.finish(false, error?.message || 'This email verification link is invalid or expired.');\n },\n });\n }\n\n private finish(verified: boolean, message: string): void {\n this.loading = false;\n this.verified = verified;\n this.invalid = !verified;\n this.message = message;\n }\n}\n","<div class=\"h-full flex items-start sm:items-center sm:justify-center\">\n <div\n class=\"w-full h-full justify-start md:h-auto p-6 lg:p-11 rounded-xl bg-(--rt-signin-inner-background) flex flex-col md:justify-between xl:w-[1000px] lg:w-[900px] md:w-[600px]\"\n >\n @if (loading) {\n <div class=\"flex min-h-[280px] flex-col items-center justify-center gap-4 text-center\">\n <rolatech-spinner></rolatech-spinner>\n <div class=\"text-2xl font-medium\">Verifying your email</div>\n <div class=\"text-sm text-(--rt-text-secondary)\">Please wait while we confirm this verification link.</div>\n </div>\n } @else if (verified) {\n <div class=\"flex flex-col gap-6\">\n <div>\n <div class=\"text-3xl font-medium mb-3\">Email verified</div>\n <div class=\"text-md text-(--rt-text-secondary)\">{{ message }}</div>\n </div>\n\n <div class=\"flex flex-wrap items-center gap-3\">\n <a mat-flat-button [href]=\"continueUrl\">Continue</a>\n <a mat-button [href]=\"signInUrl\">Sign in</a>\n </div>\n </div>\n } @else {\n <div class=\"flex flex-col gap-6\">\n <div>\n <div class=\"text-3xl font-medium mb-3\">Link invalid or expired</div>\n <div class=\"text-md text-(--rt-text-secondary)\">{{ message }}</div>\n </div>\n\n <div class=\"flex flex-wrap items-center gap-3\">\n <a mat-flat-button [href]=\"signInUrl\">Sign in</a>\n <a mat-button [href]=\"continueUrl\">Back</a>\n </div>\n </div>\n }\n </div>\n</div>\n","import { Routes } from '@angular/router';\nimport { AuthGuard, ForbiddenComponent, UnauthorizedComponent } from '@rolatech/angular-auth';\nimport { LogoutComponent } from './components/logout/logout.component';\nimport { SigninComponent } from './pages/accounts/signin/signin.component';\nimport { SignupComponent } from './pages/accounts/signup/signup.component';\nimport { Forgot } from './pages/accounts/forgot/forgot';\nimport { PasswordReset } from './pages/accounts/password-reset/password-reset';\nimport { EmailVerificationComponent } from './pages/myaccount/email-verification/email-verification.component';\n\nexport const accountRoutes: Routes = [\n {\n path: '',\n pathMatch: 'full',\n redirectTo: 'signin',\n },\n {\n path: 'account/verification/email',\n component: EmailVerificationComponent,\n data: { title: 'Email Verification' },\n },\n {\n path: 'email-verification/:id',\n component: EmailVerificationComponent,\n data: { title: 'Email Verification' },\n },\n { path: 'signin', canActivate: [AuthGuard], component: SigninComponent, data: { title: 'Signin' } },\n {\n path: 'signin/forgot',\n component: Forgot,\n data: { title: 'Forgot Password' },\n },\n { path: 'signup', component: SignupComponent, data: { title: 'Signup' } },\n { path: 'logout', component: LogoutComponent },\n // { path: 'login', loadChildren: () => import('./components/login/login.routes') },\n {\n path: 'reset-password',\n component: PasswordReset,\n data: { title: 'Password Reset' },\n },\n\n {\n path: 'unauthorized',\n component: UnauthorizedComponent,\n },\n {\n path: 'forbidden',\n component: ForbiddenComponent,\n },\n];\n","import { Routes } from '@angular/router';\n\nexport const myaccountRoutes: Routes = [\n {\n path: '',\n loadComponent: () => import('./pages/myaccount/home/home.component').then((c) => c.HomeComponent),\n data: { title: '首页' },\n },\n {\n path: 'personal-info',\n loadComponent: () => import('./pages/myaccount/personal-info/info.component').then((c) => c.InfoComponent),\n },\n {\n path: 'profile',\n loadComponent: () => import('./pages/myaccount/personal-info/profile/profile.component').then((c) => c.ProfileComponent),\n },\n {\n path: 'username',\n loadComponent: () => import('./pages/myaccount/personal-info/username/username.component').then((c) => c.UsernameComponent),\n },\n { path: 'gender', loadComponent: () => import('./pages/myaccount/gender/gender.component').then((c) => c.GenderComponent) },\n { path: 'email', loadComponent: () => import('./pages/myaccount/email/email.component').then((c) => c.EmailComponent) },\n {\n path: 'email-verification/:id',\n loadComponent: () =>\n import('./pages/myaccount/email-verification/email-verification.component').then((c) => c.EmailVerificationComponent),\n },\n { path: 'phone', loadComponent: () => import('./pages/myaccount/phone/phone.component').then((c) => c.PhoneComponent) },\n\n {\n path: 'address',\n loadChildren: () => import('./pages/myaccount/address/address.routes').then((r) => r.addressRoutes),\n },\n\n {\n path: 'security',\n loadChildren: () => import('./pages/myaccount/security/security.routes'),\n data: { title: 'Security' },\n },\n {\n path: 'notifications',\n loadChildren: () => import('@rolatech/angular-notification').then((m) => m.notificationRoutes),\n data: { title: 'Notifications' },\n },\n];\n","import { EnvironmentProviders, Provider, makeEnvironmentProviders } from '@angular/core';\nimport { ROUTES } from '@angular/router';\nimport { accountRoutes } from './lib/account.routes';\n\nexport function provideAngularAuthRoutes(): EnvironmentProviders {\n const provider: Provider[] = [\n {\n provide: ROUTES,\n useValue: accountRoutes,\n multi: true,\n },\n ];\n return makeEnvironmentProviders(provider);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i4"],"mappings":"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"}
1
+ {"version":3,"file":"rolatech-angular-account.mjs","sources":["../../../../packages/angular-account/src/lib/components/topbar-login/topbar-login.component.ts","../../../../packages/angular-account/src/lib/components/topbar-login/topbar-login.component.html","../../../../packages/angular-account/src/lib/components/logout/logout.component.ts","../../../../packages/angular-account/src/lib/components/logout/logout.component.html","../../../../packages/angular-account/src/lib/services/wechat-login.service.ts","../../../../packages/angular-account/src/lib/pages/accounts/signin/signin.component.ts","../../../../packages/angular-account/src/lib/pages/accounts/signin/signin.component.html","../../../../packages/angular-account/src/lib/pages/accounts/signup/signup.component.ts","../../../../packages/angular-account/src/lib/pages/accounts/signup/signup.component.html","../../../../packages/angular-account/src/lib/pages/accounts/forgot/forgot.ts","../../../../packages/angular-account/src/lib/pages/accounts/forgot/forgot.html","../../../../packages/angular-account/src/lib/pages/accounts/password-reset/password-reset.ts","../../../../packages/angular-account/src/lib/pages/accounts/password-reset/password-reset.html","../../../../packages/angular-account/src/lib/pages/myaccount/email-verification/email-verification.component.ts","../../../../packages/angular-account/src/lib/pages/myaccount/email-verification/email-verification.component.html","../../../../packages/angular-account/src/lib/account.routes.ts","../../../../packages/angular-account/src/lib/myaccount.routes.ts","../../../../packages/angular-account/src/provider.ts","../../../../packages/angular-account/src/rolatech-angular-account.ts"],"sourcesContent":["import { Component, OnDestroy, OnInit, PLATFORM_ID, ViewEncapsulation, inject, input } from '@angular/core';\nimport { CommonModule, isPlatformBrowser } from '@angular/common';\nimport { APP_CONFIG } from '@rolatech/angular-common';\nimport { MatButtonModule } from '@angular/material/button';\nimport {\n NavigationEnd,\n Router,\n Event,\n NavigationStart,\n NavigationCancel,\n NavigationError,\n ActivatedRoute,\n Route,\n} from '@angular/router';\nimport { filter, Subscription } from 'rxjs';\ntype NavigationEvent = NavigationStart | NavigationEnd | NavigationCancel | NavigationError;\n\n@Component({\n selector: 'rolatech-account-topbar-login',\n imports: [CommonModule, MatButtonModule],\n templateUrl: './topbar-login.component.html',\n styleUrl: './topbar-login.component.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class TopbarLoginComponent implements OnInit, OnDestroy {\n environment = inject(APP_CONFIG);\n platformId = inject(PLATFORM_ID);\n route = inject(ActivatedRoute);\n router = inject(Router);\n private routerSubscription: Subscription | undefined;\n\n service = input('www');\n signinUrl = '';\n signupUrl = this.environment.accountsUrl + '/signup';\n logoutUrl = this.environment.accountsUrl + `/logout?service=${this.service()}`;\n ngOnInit(): void {\n if (isPlatformBrowser(this.platformId)) {\n this.signinUrl = `${this.environment.accountsUrl}/signin?continue=` + window.location.href;\n this.signupUrl = `${this.environment.accountsUrl}/signup?continue=` + window.location.href;\n this.logoutUrl = this.environment.accountsUrl + `/logout?service=${this.service()}&continue=` + window.location.origin;\n }\n\n this.routerSubscription = this.router.events\n .pipe(filter((event: Event): event is NavigationEvent => event instanceof NavigationStart))\n .subscribe((event) => {\n this.signinUrl = `${this.environment.accountsUrl}/signin?continue=` + window.location.origin + event.url;\n this.signupUrl = `${this.environment.accountsUrl}/signup?continue=` + window.location.href + event.url;\n\n // this.checkRouteGuard(event.url);\n\n const currentUrl = this.router.url; // Get the current URL\n const matchedRoute = this.findRouteConfig(currentUrl);\n\n if (matchedRoute) {\n console.log('Matched Route Config:', matchedRoute);\n } else {\n console.log('No matching route found.');\n }\n });\n }\n ngOnDestroy() {\n this.routerSubscription?.unsubscribe();\n }\n // checkRouteGuard(url: string): void {\n // // const route = this.router.config.find((r) => r.path === routePath);\n // const route = this.router.config.find((r: any) => this.matchRoute(url, r.path));\n\n // if (route) {\n // if (route.canActivate && route.canActivate.length > 0) {\n // console.log(`Route \"${url}\" has canActivate guards:`, route.canActivate);\n // } else {\n // console.log(`Route \"${url}\" does not have canActivate guards.`);\n // }\n // } else {\n // console.log(`Route \"${url}\" not found.`);\n // }\n // }\n // matchRoute(url: string, routePath: string): boolean {\n // // Strip leading/trailing slashes from URL and routePath and compare\n // return url.replace(/^\\/|\\/$/g, '') === routePath.replace(/^\\/|\\/$/g, '');\n // }\n findRouteConfig(url: string): Route | undefined {\n return this.router.config.find((route) => this.matchRoute(route, url));\n }\n\n // Helper function to check if a route matches the current URL\n matchRoute(route: Route, url: string): boolean {\n const path = route.path?.split('/').join('');\n const urlSegment = url.split('/').join('');\n return path === urlSegment;\n }\n}\n","<div class=\"flex items-center\">\n <a mat-stroked-button class=\"mr-2 max-h-9 md:max-h-10\" [href]=\"signinUrl\"><span i18n>Sign in</span></a>\n <a mat-flat-button class=\"max-h-9 md:max-h-10\" [href]=\"signupUrl\"><span i18n>Sign up</span></a>\n</div>\n","import { isPlatformBrowser } from '@angular/common';\nimport { Component, inject, OnInit, PLATFORM_ID } from '@angular/core';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { AuthService } from '@rolatech/angular-auth';\nimport { APP_CONFIG, AngularCommonModule } from '@rolatech/angular-common';\nimport { AngularComponentsModule } from '@rolatech/angular-components';\nimport { map, take } from 'rxjs';\n\n@Component({\n imports: [AngularCommonModule, AngularComponentsModule],\n selector: 'rolatech-account-logout',\n templateUrl: './logout.component.html',\n styleUrls: ['./logout.component.scss'],\n})\nexport class LogoutComponent implements OnInit {\n service = '';\n continue = '';\n environment = inject(APP_CONFIG);\n platformId = inject(PLATFORM_ID);\n route = inject(ActivatedRoute);\n router = inject(Router);\n authService = inject(AuthService);\n snackBar = inject(MatSnackBar);\n\n ngOnInit(): void {\n this.service = this.route.snapshot.queryParams['service'] || 'www';\n this.continue = this.route.snapshot.queryParams['continue'] || '/';\n if (isPlatformBrowser(this.platformId)) {\n this.logout();\n }\n }\n logout() {\n this.authService.logout().subscribe({\n next: (res) => {\n // this.router.navigate(['/signin'], {\n // queryParams: { continue: this.continue },\n // });\n // this.router.navigate([this.continue]);\n // this.router.navigateByUrl(this.continue);\n window.location.href = this.continue;\n },\n error: (error) => {\n this.snackBar.open(error.message);\n },\n });\n }\n}\n","<p>Please waiting...</p>\n","import { Directive, EventEmitter, Injectable, output } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\n@Directive()\nexport class WeChatLoginService {\n onWeChatLogin = new EventEmitter<any>();\n\n constructor() {}\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { Component, effect, HostListener, inject, OnInit, signal, ViewEncapsulation } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { SafeResourceUrl, DomSanitizer } from '@angular/platform-browser';\nimport { AngularCommonModule, APP_CONFIG } from '@rolatech/angular-common';\nimport { AngularComponentsModule, BaseComponent, TabComponent, TabsComponent } from '@rolatech/angular-components';\nimport { AUTH_METHODS, AuthMethod, AuthService, AuthUserService } from '@rolatech/angular-auth';\nimport { WeChatLoginService } from '../../../services/wechat-login.service';\n\n@Component({\n imports: [AngularCommonModule, AngularComponentsModule, TabsComponent, TabComponent],\n selector: 'rolatech-account-signin',\n templateUrl: './signin.component.html',\n styleUrls: ['./signin.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class SigninComponent extends BaseComponent implements OnInit {\n environment = inject(APP_CONFIG);\n authMethods = inject(AUTH_METHODS);\n hasPassword = this.authMethods.includes(AuthMethod.Password);\n hasOTP = this.authMethods.includes(AuthMethod.OTP);\n hasWeChat = this.authMethods.includes(AuthMethod.WeChat);\n hasGoogle = this.authMethods.includes(AuthMethod.Google);\n formBuilder = inject(FormBuilder);\n authService = inject(AuthService);\n authUserService = inject(AuthUserService);\n wechtLoginService = inject(WeChatLoginService);\n sanitizer = inject(DomSanitizer);\n passrodForm!: FormGroup;\n codeForm!: FormGroup;\n continue = '';\n signUpUrl = '';\n forGotUrl = '';\n tabIndex = signal(0);\n countDown = false;\n countDownTime = 60;\n showButtonText = `Send`;\n appid = 'this.environment.wechat.appId';\n state = 'add';\n isLoading = false;\n urlSafe: SafeResourceUrl = this.sanitizer.bypassSecurityTrustResourceUrl('');\n baseUrl = 'https://open.weixin.qq.com/connect/qrconnect';\n @HostListener('window:message', ['$event'])\n onLogin(event: any): void {\n if (\n event.origin !== window.location.origin ||\n /react-devtools/gi.test(event.data.source) ||\n /angular-devtools/gi.test(event.data.source)\n ) {\n return;\n }\n if (event.origin === this.environment.accountsUrl && event.data.code === 200) {\n window.location.href = this.continue === this.environment.accountsUrl ? this.environment.myaccountUrl : this.continue;\n }\n }\n constructor() {\n super();\n effect(() => {\n const index = this.tabIndex();\n if (index === 0) {\n if (this.codeForm) {\n this.codeForm.reset();\n }\n }\n if (index === 1) {\n if (this.passrodForm) {\n this.passrodForm.reset();\n }\n }\n if (index === 2) {\n this.isLoading = true;\n if (this.codeForm && this.passrodForm) {\n this.codeForm.reset();\n this.passrodForm.reset();\n }\n this.wechat();\n }\n });\n }\n ngOnInit(): void {\n this.titleService.setTitle('Sign in');\n if (this.hasPassword) {\n this.passrodForm = this.formBuilder.group({\n // account: [null, [Validators.required, Validators.pattern('^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}$')]],\n account: [null, [Validators.required]],\n password: [null, [Validators.required, Validators.minLength(6)]],\n });\n }\n if (this.hasOTP) {\n this.codeForm = this.formBuilder.group({\n phone: [null, [Validators.required, Validators.pattern('1(3|4|5|6|7|8|9)\\\\d{9}')]],\n code: [null, Validators.required],\n });\n }\n this.route.queryParams.subscribe((params) => {\n this.continue = params['continue'] || '/'; // Default to home if no continue param\n const decodedUrl = decodeURIComponent(this.continue);\n this.signUpUrl = this.continue ? `signup?continue=${decodedUrl}` : 'signup';\n this.forGotUrl = 'signin/forgot';\n });\n // this.continue = this.route.snapshot.queryParams['continue'];\n // if (this.continue) {\n // const decodedUrl = decodeURIComponent(this.continue);\n // this.signUpUrl = this.continue ? `signup?continue=${decodedUrl}` : 'signup';\n // }\n }\n get form() {\n return this.tabIndex() === 0 ? this.passrodForm.controls : this.codeForm.controls;\n }\n sendSMSCode() {\n const phoneControl = this.codeForm.get('phone');\n if (!phoneControl?.valid) {\n return;\n }\n const phone = phoneControl.value;\n this.countDown = true;\n const start = setInterval(() => {\n if (this.countDownTime >= 0) {\n this.showButtonText = $localize`${this.countDownTime--}s resend`;\n } else {\n clearInterval(start);\n this.showButtonText = $localize`Resend`;\n this.countDown = false;\n this.countDownTime = 60;\n }\n }, 1000);\n\n this.authUserService.sendSMSCode('+86', phone).subscribe({\n next: (res) => {\n this.snackBarService.open('Success');\n },\n error: (error) => {\n this.snackBarService.open(error.message);\n },\n });\n }\n login() {\n let data = {};\n if (this.tabIndex() === 0) {\n if (!this.passrodForm.valid) {\n return;\n }\n data = {\n account: this.form['account'].value,\n password: this.form['password'].value,\n };\n }\n if (this.tabIndex() === 1) {\n if (!this.codeForm.valid) {\n return;\n }\n data = {\n phone: this.form['phone'].value,\n code: this.form['code'].value,\n };\n }\n\n this.authService.login(data).subscribe({\n next: () => {\n if (isPlatformBrowser(this.platformId)) {\n window.location.href = this.continue === this.environment.accountsUrl ? this.environment.myaccountUrl : this.continue;\n }\n },\n error: (error) => {\n this.snackBarService.open(error.message);\n },\n });\n }\n wechat() {\n // const redirectUri = 'https://accounts.pinxiaoke.cn/login?continue';\n const redirectUri = `${window.location.origin}/login?continue`;\n const encodedURI = encodeURI(redirectUri);\n const src = `${this.baseUrl}?appid=${this.appid}&response_type=code&self_redirect=true&scope=snsapi_login&stylelite=1&redirect_uri=${encodedURI}&state=${this.state}#wechat_redirect`;\n this.urlSafe = this.sanitizer.bypassSecurityTrustResourceUrl(src);\n }\n}\n","<div class=\"h-full flex items-start sm:items-center sm:justify-center\">\n <div\n class=\"w-full h-full justify-start md:h-auto p-6 lg:p-11 rounded-xl bg-(--rt-signin-inner-background) flex flex-col lg:flex-row md:justify-between xl:w-[1000px] lg:w-[900px] md:w-[600px]\"\n >\n <!-- header -->\n\n <div class=\"flex flex-col justify-between lg:w-1/2\">\n <div class=\"flex flex-col py-6\">\n <div class=\"text-3xl font-medium mb-3 ml-2\" i18n>Sign in</div>\n <div class=\"text-md ml-2\" i18n>Use your {{ environment.name }} Account</div>\n </div>\n <!-- <div>\n <a class=\"underline underline-offset-4 text-sm text-(--rt-brand-color)\" [href]=\"forGotUrl\" i18n>Forgot?</a>\n </div> -->\n </div>\n <div class=\"lg:w-1/2\">\n <rolatech-tabs [(select)]=\"tabIndex\">\n @if (hasPassword) {\n <rolatech-tab label=\"Password\"></rolatech-tab>\n }\n @if (hasOTP) {\n <rolatech-tab label=\"OTP\"></rolatech-tab>\n }\n @if (hasWeChat) {\n <rolatech-tab label=\"WeChat\"></rolatech-tab>\n }\n </rolatech-tabs>\n <!-- content -->\n <div class=\"pt-6 min-w-[320px] min-h-[214px]\">\n @if (tabIndex() === 0) {\n <form [formGroup]=\"passrodForm\" class=\"flex flex-col\">\n @if (hasPassword) {\n <mat-form-field>\n <mat-label i18n> Email/Username </mat-label>\n <input matInput formControlName=\"account\" required />\n @if (passrodForm.controls['account'].touched && passrodForm.controls['account'].invalid) {\n <mat-error>\n @if (passrodForm.controls['account'].errors?.['required']) {\n <span i18n>Email is required</span>\n }\n @if (passrodForm.controls['account'].errors?.['pattern']) {\n <span i18n>Invalid email</span>\n }\n </mat-error>\n }\n </mat-form-field>\n }\n <mat-form-field>\n <mat-label i18n> Password </mat-label>\n <input autocomplete matInput formControlName=\"password\" type=\"password\" />\n @if (passrodForm.controls['password'].touched && passrodForm.controls['password'].invalid) {\n <mat-error>\n @if (passrodForm.controls['password'].errors?.['required']) {\n <span i18n>Password required</span>\n }\n @if (passrodForm.controls['password'].errors?.['minlength']) {\n <span i18n>Password too short</span>\n }\n </mat-error>\n }\n </mat-form-field>\n </form>\n }\n @if (tabIndex() === 1) {\n <form [formGroup]=\"codeForm\" class=\"flex flex-col\">\n @if (hasOTP) {\n <mat-form-field appearance=\"fill\">\n <mat-label i18n> Phone </mat-label>\n <input autocomplete matInput formControlName=\"phone\" required />\n @if (codeForm.controls['phone'].touched && codeForm.controls['phone'].invalid) {\n <mat-error>\n @if (codeForm.controls['phone'].errors?.['required']) {\n <span i18n> Phone required</span>\n }\n @if (codeForm.controls['phone'].errors?.['pattern']) {\n <span i18n> Phone invalid </span>\n }\n </mat-error>\n }\n </mat-form-field>\n <div class=\"flex justify-between items-center\">\n <mat-form-field appearance=\"fill\">\n <mat-label i18n> Code </mat-label>\n <input matInput formControlName=\"code\" required />\n @if (codeForm.controls['code'].touched && codeForm.controls['code'].invalid) {\n <mat-error>\n @if (codeForm.controls['code'].errors?.['required']) {\n <span i18n>Code required</span>\n }\n </mat-error>\n }\n </mat-form-field>\n <button\n mat-flat-button\n (click)=\"sendSMSCode()\"\n [disabled]=\"countDown\"\n class=\"max-w-[128px] text-white text-center\"\n >\n <span i18n>{{ showButtonText }}</span>\n </button>\n </div>\n }\n </form>\n }\n @if (tabIndex() === 2) {\n <div class=\"w-[190px] h-[190px] ml-[56px]\">\n <iframe [src]=\"urlSafe\" class=\"w-full h-full inline\" scrolling=\"no\" frameBorder=\"no\" #iframe></iframe>\n </div>\n }\n </div>\n <!-- actions -->\n <div class=\"flex justify-between items-center py-3 pl-2\">\n <a class=\"underline underline-offset-4 text-sm text-(--rt-brand-color)\" [href]=\"signUpUrl\" i18n>Create account</a>\n <a class=\"underline underline-offset-4 text-sm text-(--rt-brand-color)\" [href]=\"forGotUrl\" i18n>Forgot?</a>\n <button mat-flat-button (click)=\"login()\" class=\"w-[128px]\" i18n>Sign in</button>\n </div>\n </div>\n </div>\n</div>\n","import { Component, inject, OnInit, ViewEncapsulation } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { AngularCommonModule, APP_CONFIG, WINDOW } from '@rolatech/angular-common';\nimport { AngularComponentsModule, BaseComponent } from '@rolatech/angular-components';\nimport { AuthService, AuthUserService } from '@rolatech/angular-auth';\n@Component({\n imports: [AngularCommonModule, AngularComponentsModule],\n selector: 'rolatech-account-signup',\n templateUrl: './signup.component.html',\n styleUrls: ['./signup.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class SignupComponent extends BaseComponent implements OnInit {\n environment = inject(APP_CONFIG);\n authService = inject(AuthService);\n authUserService = inject(AuthUserService);\n formBuilder = inject(FormBuilder);\n window = inject(WINDOW);\n signupForm!: FormGroup;\n continue = '/';\n signInUrl = '';\n usePhone = false\n countDown = false;\n countDownTime = 60;\n showButtonText = 'Send';\n\n ngOnInit(): void {\n this.titleService.setTitle('Sign up');\n this.signupForm = this.formBuilder.group({\n firstName: [null, Validators.required],\n lastName: [null, Validators.required],\n email: [null, [Validators.required, Validators.pattern('^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}$')]],\n password: [null, [Validators.required, Validators.minLength(6)]],\n rePassword: [null, [Validators.required, Validators.minLength(6)]],\n });\n // this.signupForm = this.formBuilder.group({\n // name: [null, Validators.required],\n // phone: [null, [Validators.required, Validators.pattern('1(3|4|5|6|7|8|9)\\\\d{9}')]],\n // code: [null, [Validators.required, Validators.minLength(6)]],\n // password: [null, [Validators.required, Validators.minLength(6)]],\n // rePassword: [null, [Validators.required, Validators.minLength(6)]],\n // });\n\n this.continue = this.route.snapshot.queryParams['continue'] || '/';\n const decodedUrl = decodeURIComponent(this.continue);\n this.signInUrl = `signin?continue=${decodedUrl}`;\n }\n sendSMSCode() {\n const phoneControl = this.signupForm.get('phone');\n if (!phoneControl?.valid) {\n return;\n }\n const phone = phoneControl.value;\n this.countDown = true;\n const start = setInterval(() => {\n if (this.countDownTime >= 0) {\n this.showButtonText = `${this.countDownTime--}s resend`;\n } else {\n clearInterval(start);\n this.showButtonText = 'Resend';\n this.countDown = false;\n this.countDownTime = 60;\n }\n }, 1000);\n this.authUserService.sendSMSCode('+86', phone).subscribe({\n next: (res) => {\n this.snackBarService.open('Success');\n },\n error: (error) => {\n this.snackBarService.open(error.message);\n },\n });\n }\n submit() {\n if (!this.signupForm.valid) {\n return;\n }\n this.authService.signup(this.signupForm.value).subscribe({\n next: (res) => {\n console.log(res);\n this.window.location.href = this.continue ? this.continue : this.environment.myaccountUrl;\n },\n error: (error) => {\n this.snackBarService.open(error.message);\n },\n });\n }\n}\n","<div class=\"h-full flex items-start sm:items-center sm:justify-center\">\n <div\n class=\"w-full h-full md:h-auto justify-start md:justify-between p-6 lg:p-11 rounded-xl bg-(--rt-signin-inner-background) flex flex-col lg:flex-row lg:flex-row md:justify-between xl:w-[1000px] lg:w-[900px] md:w-[600px]\"\n >\n <!-- header -->\n <div class=\"flex flex-col py-6\">\n <div class=\"text-3xl font-medium mb-3 ml-2\" i18n>Create your {{ environment.name }} account</div>\n <div class=\"text-md ml-2\" i18n>Sign up, Get more.</div>\n </div>\n <div class=\"min-w-[320px]\">\n <form [formGroup]=\"signupForm\" (submit)=\"submit()\" class=\"flex flex-col\">\n @if (usePhone) {\n <!-- name -->\n <mat-form-field appearance=\"fill\">\n <mat-label i18n> Name </mat-label>\n <input matInput formControlName=\"name\" required />\n @if (signupForm.controls['name'].touched && signupForm.controls['name'].invalid) {\n <mat-error>\n @if (signupForm.controls['name'].errors?.['required']) {\n <span i18n>Name required</span>\n }\n </mat-error>\n }\n </mat-form-field>\n <!-- phone -->\n <mat-form-field appearance=\"fill\">\n <mat-label i18n> Phone </mat-label>\n <input matInput formControlName=\"phone\" required />\n @if (signupForm.controls['phone'].touched && signupForm.controls['phone'].invalid) {\n <mat-error>\n @if (signupForm.controls['phone'].errors?.['required']) {\n <span i18n>Phone is required</span>\n }\n @if (signupForm.controls['phone'].errors?.['pattern']) {\n <span i18n>Invalid Phone </span>\n }\n </mat-error>\n }\n </mat-form-field>\n <!-- phone code -->\n <div class=\"flex justify-between items-center gap-3\">\n <mat-form-field appearance=\"fill\" class=\"w-full\">\n <mat-label i18n> Code </mat-label>\n <input matInput type=\"text\" formControlName=\"code\" autocomplete=\"new-password\" required />\n @if (signupForm.controls['code'].touched && signupForm.controls['code'].invalid) {\n <mat-error>\n @if (signupForm.controls['code'].errors?.['required']) {\n <span i18n>Code is required</span>\n }\n </mat-error>\n }\n </mat-form-field>\n <button mat-button (click)=\"sendSMSCode()\" [disabled]=\"countDown\" class=\"w-[128px] text-white text-center\">\n <span>{{ showButtonText }}</span>\n </button>\n </div>\n }\n <div class=\"flex flex-col md:flex-row gap-3 items-center\">\n <!--First name -->\n <mat-form-field appearance=\"fill\">\n <mat-label i18n> Fist name </mat-label>\n <input matInput formControlName=\"firstName\" required />\n @if (signupForm.controls['firstName'].touched && signupForm.controls['firstName'].invalid) {\n <mat-error>\n @if (signupForm.controls['firstName'].errors?.['required']) {\n <span i18n>First name required</span>\n }\n </mat-error>\n }\n </mat-form-field>\n <!-- Last name -->\n <mat-form-field appearance=\"fill\">\n <mat-label i18n> Last name </mat-label>\n <input matInput formControlName=\"lastName\" required />\n @if (signupForm.controls['lastName'].touched && signupForm.controls['lastName'].invalid) {\n <mat-error>\n @if (signupForm.controls['lastName'].errors?.['required']) {\n <span i18n>Last name required</span>\n }\n </mat-error>\n }\n </mat-form-field>\n </div>\n <!-- Email account -->\n <mat-form-field appearance=\"fill\">\n <mat-label i18n> Email </mat-label>\n <input matInput formControlName=\"email\" required />\n @if (signupForm.controls['email'].touched && signupForm.controls['email'].invalid) {\n <mat-error>\n @if (signupForm.controls['email'].errors?.['required']) {\n <span i18n>Email is required</span>\n }\n @if (signupForm.controls['email'].errors?.['pattern']) {\n <span i18n>Invalid email</span>\n }\n </mat-error>\n }\n </mat-form-field>\n <!-- Password -->\n <mat-form-field appearance=\"fill\">\n <mat-label i18n> Password </mat-label>\n <input matInput formControlName=\"password\" type=\"password\" autocomplete=\"password\" />\n @if (signupForm.controls['password'].touched && signupForm.controls['password'].invalid) {\n <mat-error>\n @if (signupForm.controls['password'].errors?.['required']) {\n <span i18n>Password required</span>\n }\n @if (signupForm.controls['password'].errors?.['minlength']) {\n <span i18n>Password too short</span>\n }\n </mat-error>\n }\n </mat-form-field>\n\n <!-- password confirm -->\n <mat-form-field appearance=\"fill\">\n <mat-label i18n> Password </mat-label>\n <input matInput formControlName=\"rePassword\" type=\"password\" autocomplete=\"rePassword\" />\n @if (signupForm.controls['rePassword'].touched && signupForm.controls['rePassword'].invalid) {\n <mat-error>\n @if (signupForm.controls['rePassword'].errors?.['required']) {\n <span i18n>Password required</span>\n }\n @if (signupForm.controls['rePassword'].errors?.['minlength']) {\n <span i18n>Password too short</span>\n }\n </mat-error>\n }\n </mat-form-field>\n </form>\n <div class=\"flex justify-between items-center py-3 pl-2\">\n <a mat-button [href]=\"signInUrl\" i18n>Sign in</a>\n <button mat-flat-button (click)=\"submit()\" class=\"w-[128px]\" i18n>Sign up</button>\n </div>\n </div>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, OnInit, ViewEncapsulation } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\nimport { AuthService } from '@rolatech/angular-auth';\nimport { BaseComponent } from '@rolatech/angular-components';\n\n@Component({\n selector: 'rolatech-account-forgot',\n imports: [FormsModule, MatInputModule, CommonModule, MatButtonModule],\n templateUrl: './forgot.html',\n styleUrl: './forgot.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class Forgot extends BaseComponent implements OnInit {\n authService = inject(AuthService);\n email = '';\n signInUrl = '';\n ngOnInit(): void {\n this.titleService.setTitle('Sign up');\n this.signInUrl = `signin`;\n }\n send() {\n this.authService.requestPasswordReset(this.email).subscribe({\n next: () => {\n this.snackBarService.open('Password reset link sent.');\n },\n error: (error) => {\n this.snackBarService.open(error.message);\n },\n });\n }\n}\n","<div class=\"h-full flex items-start sm:items-center sm:justify-center\">\n <div\n class=\"w-full h-full justify-start md:h-auto p-6 lg:p-11 rounded-xl bg-(--rt-signin-inner-background) flex flex-col lg:flex-row md:justify-between xl:w-[1000px] lg:w-[900px] md:w-[600px]\"\n >\n <!-- header -->\n <div class=\"flex flex-col py-6 lg:w-1/2 lg:pr-4\">\n <div class=\"text-3xl font-medium mb-3 ml-2\" i18n>Reset password</div>\n <div class=\"text-md ml-2\" i18n>Enter your email, password reset link will send to this email.</div>\n </div>\n <div class=\"lg:w-1/2 lg:pl-4\">\n <!-- content -->\n <div class=\"pt-6 min-w-[320px] min-h-[214px]\">\n <mat-form-field appearance=\"fill\">\n <mat-label i18n> Email </mat-label>\n <input matInput [(ngModel)]=\"email\" />\n </mat-form-field>\n </div>\n <!-- actions -->\n <div class=\"flex justify-between items-center py-3 pl-2\">\n <!-- <a class=\"underline underline-offset-4 text-sm text-(--rt-brand-color)\" [href]=\"signUpUrl\" i18n>Sign in</a> -->\n <a class=\"underline underline-offset-4 text-sm text-(--rt-brand-color)\" [href]=\"signInUrl\" i18n>Sign in</a>\n <button mat-flat-button (click)=\"send()\" class=\"w-[128px]\" i18n>Send</button>\n </div>\n </div>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, OnInit, ViewEncapsulation } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\nimport { AuthService } from '@rolatech/angular-auth';\nimport { BaseComponent } from '@rolatech/angular-components';\n\n@Component({\n selector: 'rolatech-account-password-reset',\n imports: [FormsModule, MatInputModule, CommonModule, MatButtonModule],\n templateUrl: './password-reset.html',\n styleUrl: './password-reset.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class PasswordReset extends BaseComponent implements OnInit {\n authService = inject(AuthService);\n invalidToken = false;\n signInUrl = '';\n token = '';\n password = '';\n newPassword = '';\n ngOnInit(): void {\n this.titleService.setTitle('Sign up');\n this.signInUrl = `signin`;\n const token = this.route.snapshot.queryParams['token'] ?? undefined;\n if (token) {\n this.authService.validatePasswordRestToken(token).subscribe({\n next: (res) => {\n this.token = token;\n },\n error: (error) => {\n console.log(error);\n this.invalidToken = true;\n },\n });\n }\n }\n resetPassword() {\n if (this.password !== this.newPassword) {\n this.snackBarService.open('Password not match');\n return;\n }\n if (this.password.length < 8) {\n this.snackBarService.open('Password too weak');\n return;\n }\n this.authService.resetPassword({ token: this.token, newPassword: this.newPassword }).subscribe({\n next: (res) => {\n this.snackBarService.open('Password reset');\n this.router.navigateByUrl('/signin');\n },\n });\n }\n}\n","<div class=\"h-full flex items-start sm:items-center sm:justify-center\">\n <div\n class=\"w-full h-full justify-start md:h-auto p-6 lg:p-11 rounded-xl bg-(--rt-signin-inner-background) flex flex-col lg:flex-row md:justify-between xl:w-[1000px] lg:w-[900px] md:w-[600px]\"\n >\n @if (invalidToken) {\n <div>\n <div class=\"text-3xl font-medium mb-3 ml-2\" i18n>Link invalid or expired</div>\n <div class=\"text-md ml-2\" i18n>\n To reset your password, return to the login page and select \"Forgot?\" to send a new email.\n </div>\n <div class=\"flex justify-between items-center py-3 pl-2\">\n <a class=\"underline underline-offset-4 text-sm text-(--rt-brand-color)\" [href]=\"signInUrl\" i18n>Sign in</a>\n </div>\n </div>\n\n } @else {\n <div class=\"flex flex-col py-6 lg:w-1/2 lg:pr-4\">\n <div class=\"text-3xl font-medium mb-3 ml-2\" i18n>Reset password</div>\n <div class=\"text-md ml-2\" i18n>Enter your new password.</div>\n </div>\n <div class=\"lg:w-1/2 lg:pl-4\">\n <div class=\"pt-6 min-w-[320px] min-h-[214px]\">\n <mat-form-field appearance=\"fill\">\n <mat-label i18n> Password </mat-label>\n <input matInput [(ngModel)]=\"password\" required type=\"password\" />\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label i18n> Password </mat-label>\n <input matInput [(ngModel)]=\"newPassword\" required type=\"password\" />\n </mat-form-field>\n </div>\n <div class=\"flex justify-between items-center py-3 pl-2\">\n <a class=\"underline underline-offset-4 text-sm text-(--rt-brand-color)\" [href]=\"signInUrl\" i18n>Sign in</a>\n <button mat-flat-button (click)=\"resetPassword()\" class=\"w-[128px]\" i18n>Reset</button>\n </div>\n </div>\n }\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, OnInit, ViewEncapsulation } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { MatButtonModule } from '@angular/material/button';\nimport { AuthService, AuthUserService, VerificationResult, VerificationStatus } from '@rolatech/angular-auth';\nimport { APP_CONFIG } from '@rolatech/angular-common';\nimport { SpinnerComponent } from '@rolatech/angular-components';\n\n@Component({\n imports: [CommonModule, MatButtonModule, SpinnerComponent],\n selector: 'rolatech-account-email-verification',\n templateUrl: './email-verification.component.html',\n styleUrls: ['./email-verification.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class EmailVerificationComponent implements OnInit {\n private readonly route = inject(ActivatedRoute);\n private readonly authService = inject(AuthService);\n private readonly authUserService = inject(AuthUserService);\n private readonly environment = inject(APP_CONFIG);\n\n loading = true;\n verified = false;\n invalid = false;\n status: VerificationStatus | null = null;\n heading = '';\n message = '';\n signInUrl = `${this.environment.accountsUrl}/signin`;\n continueUrl = this.environment.myaccountUrl || this.environment.accountsUrl || '/';\n\n ngOnInit(): void {\n const token = this.route.snapshot.queryParamMap.get('token') ?? this.route.snapshot.paramMap.get('id') ?? '';\n\n if (!token) {\n this.finish({\n type: 'EMAIL',\n status: 'INVALID_TOKEN',\n message: 'Email verification token is missing.',\n });\n return;\n }\n\n this.verifyToken(token);\n // Defer verification so a synchronous observable does not mutate template\n // state during the initial change detection pass.\n // queueMicrotask(() => this.verifyToken(token));\n }\n\n private finish(result: VerificationResult): void {\n const verified = this.isVerifiedStatus(result.status);\n\n this.loading = false;\n this.status = result.status;\n this.verified = verified;\n this.invalid = !verified;\n this.heading = this.headingForStatus(result.status);\n this.message = result.message || this.defaultMessageForStatus(result.status);\n }\n\n private verifyToken(token: string): void {\n this.authUserService.verifyEmailByToken(token).subscribe({\n next: (result) => {\n this.finish(result);\n\n if (this.isVerifiedStatus(result.status)) {\n this.authService.ensureLoaded(true).subscribe({\n error: () => undefined,\n });\n }\n },\n error: (error) => {\n this.loading = false;\n this.status = null;\n this.verified = false;\n this.invalid = true;\n this.heading = 'Unable to verify email';\n this.message = error?.message || 'This email verification link is invalid or expired.';\n },\n });\n }\n\n private isVerifiedStatus(status: VerificationStatus): boolean {\n return status === 'VERIFIED' || status === 'ALREADY_VERIFIED';\n }\n\n private headingForStatus(status: VerificationStatus): string {\n switch (status) {\n case 'VERIFIED':\n return 'Email verified';\n case 'ALREADY_VERIFIED':\n return 'Email already verified';\n case 'EXPIRED':\n return 'Verification link expired';\n case 'USER_NOT_FOUND':\n return 'User not found';\n case 'INVALID_TOKEN':\n default:\n return 'Link invalid or expired';\n }\n }\n\n private defaultMessageForStatus(status: VerificationStatus): string {\n switch (status) {\n case 'VERIFIED':\n return 'Your email address has been verified successfully.';\n case 'ALREADY_VERIFIED':\n return 'This email address was already verified.';\n case 'EXPIRED':\n return 'This email verification link has expired. Request a new verification email and try again.';\n case 'USER_NOT_FOUND':\n return 'We could not find a user for this email verification link.';\n case 'INVALID_TOKEN':\n default:\n return 'This email verification link is invalid or expired.';\n }\n }\n}\n","<div class=\"h-full flex items-start sm:items-center sm:justify-center\">\n <div\n class=\"w-full h-full justify-start md:h-auto p-6 lg:p-11 rounded-xl bg-(--rt-signin-inner-background) flex flex-col md:justify-between xl:w-[1000px] lg:w-[900px] md:w-[600px]\"\n >\n @if (loading) {\n <div class=\"flex min-h-[280px] flex-col items-center justify-center gap-4 text-center\">\n <rolatech-spinner></rolatech-spinner>\n <div class=\"text-2xl font-medium\">Verifying your email</div>\n <div class=\"text-sm text-(--rt-text-secondary)\">Please wait while we confirm this verification link.</div>\n </div>\n } @else if (verified) {\n <div class=\"flex flex-col gap-6\">\n <div>\n <div class=\"text-3xl font-medium mb-3\">{{ heading }}</div>\n <div class=\"text-md text-(--rt-text-secondary)\">{{ message }}</div>\n </div>\n\n <div class=\"flex flex-wrap items-center gap-3\">\n <a mat-flat-button [href]=\"continueUrl\">Continue</a>\n <a mat-button [href]=\"signInUrl\">Sign in</a>\n </div>\n </div>\n } @else {\n <div class=\"flex flex-col gap-6\">\n <div>\n <div class=\"text-3xl font-medium mb-3\">{{ heading }}</div>\n <div class=\"text-md text-(--rt-text-secondary)\">{{ message }}</div>\n </div>\n\n <div class=\"flex flex-wrap items-center gap-3\">\n <a mat-flat-button [href]=\"signInUrl\">Sign in</a>\n <a mat-button [href]=\"continueUrl\">Back</a>\n </div>\n </div>\n }\n </div>\n</div>\n","import { Routes } from '@angular/router';\nimport { AuthGuard, ForbiddenComponent, UnauthorizedComponent } from '@rolatech/angular-auth';\nimport { LogoutComponent } from './components/logout/logout.component';\nimport { SigninComponent } from './pages/accounts/signin/signin.component';\nimport { SignupComponent } from './pages/accounts/signup/signup.component';\nimport { Forgot } from './pages/accounts/forgot/forgot';\nimport { PasswordReset } from './pages/accounts/password-reset/password-reset';\nimport { EmailVerificationComponent } from './pages/myaccount/email-verification/email-verification.component';\n\nexport const accountRoutes: Routes = [\n {\n path: '',\n pathMatch: 'full',\n redirectTo: 'signin',\n },\n {\n path: 'account/verification/email',\n component: EmailVerificationComponent,\n data: { title: 'Email Verification' },\n },\n {\n path: 'email-verification/:id',\n component: EmailVerificationComponent,\n data: { title: 'Email Verification' },\n },\n { path: 'signin', canActivate: [AuthGuard], component: SigninComponent, data: { title: 'Signin' } },\n {\n path: 'signin/forgot',\n component: Forgot,\n data: { title: 'Forgot Password' },\n },\n { path: 'signup', component: SignupComponent, data: { title: 'Signup' } },\n { path: 'logout', component: LogoutComponent },\n // { path: 'login', loadChildren: () => import('./components/login/login.routes') },\n {\n path: 'reset-password',\n component: PasswordReset,\n data: { title: 'Password Reset' },\n },\n\n {\n path: 'unauthorized',\n component: UnauthorizedComponent,\n },\n {\n path: 'forbidden',\n component: ForbiddenComponent,\n },\n];\n","import { Routes } from '@angular/router';\n\nexport const myaccountRoutes: Routes = [\n {\n path: '',\n loadComponent: () => import('./pages/myaccount/home/home.component').then((c) => c.HomeComponent),\n data: { title: '首页' },\n },\n {\n path: 'personal-info',\n loadComponent: () => import('./pages/myaccount/personal-info/info.component').then((c) => c.InfoComponent),\n },\n {\n path: 'profile',\n loadComponent: () => import('./pages/myaccount/personal-info/profile/profile.component').then((c) => c.ProfileComponent),\n },\n {\n path: 'username',\n loadComponent: () => import('./pages/myaccount/personal-info/username/username.component').then((c) => c.UsernameComponent),\n },\n { path: 'gender', loadComponent: () => import('./pages/myaccount/gender/gender.component').then((c) => c.GenderComponent) },\n { path: 'email', loadComponent: () => import('./pages/myaccount/email/email.component').then((c) => c.EmailComponent) },\n {\n path: 'email-verification/:id',\n loadComponent: () =>\n import('./pages/myaccount/email-verification/email-verification.component').then((c) => c.EmailVerificationComponent),\n },\n { path: 'phone', loadComponent: () => import('./pages/myaccount/phone/phone.component').then((c) => c.PhoneComponent) },\n\n {\n path: 'address',\n loadChildren: () => import('./pages/myaccount/address/address.routes').then((r) => r.addressRoutes),\n },\n\n {\n path: 'security',\n loadChildren: () => import('./pages/myaccount/security/security.routes'),\n data: { title: 'Security' },\n },\n {\n path: 'notifications',\n loadChildren: () => import('@rolatech/angular-notification').then((m) => m.notificationRoutes),\n data: { title: 'Notifications' },\n },\n];\n","import { EnvironmentProviders, Provider, makeEnvironmentProviders } from '@angular/core';\nimport { ROUTES } from '@angular/router';\nimport { accountRoutes } from './lib/account.routes';\n\nexport function provideAngularAuthRoutes(): EnvironmentProviders {\n const provider: Provider[] = [\n {\n provide: ROUTES,\n useValue: accountRoutes,\n multi: true,\n },\n ];\n return makeEnvironmentProviders(provider);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i4"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rolatech/angular-account",
3
- "version": "20.3.0-beta.4",
3
+ "version": "20.3.1-beta.3",
4
4
  "private": false,
5
5
  "peerDependencies": {
6
6
  "@angular/core": "^20.0.0",
@@ -12,11 +12,11 @@
12
12
  "qrcode": "^1.5.4"
13
13
  },
14
14
  "dependencies": {
15
- "@rolatech/angular-common": "20.3.0-beta.4",
16
- "@rolatech/angular-components": "20.3.0-beta.4",
17
- "@rolatech/angular-services": "20.3.0-beta.4",
18
- "@rolatech/angular-auth": "20.3.0-beta.4",
19
- "@rolatech/angular-notification": "20.3.0-beta.4",
15
+ "@rolatech/angular-common": "20.3.1-beta.3",
16
+ "@rolatech/angular-components": "20.3.1-beta.3",
17
+ "@rolatech/angular-services": "20.3.1-beta.3",
18
+ "@rolatech/angular-auth": "20.3.1-beta.3",
19
+ "@rolatech/angular-notification": "20.3.1-beta.3",
20
20
  "tslib": "^2.3.0"
21
21
  },
22
22
  "sideEffects": false,
@@ -1,6 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { OnInit, OnDestroy, EnvironmentProviders } from '@angular/core';
3
3
  import { ActivatedRoute, Router, Route, Routes } from '@angular/router';
4
+ import { VerificationStatus } from '@rolatech/angular-auth';
4
5
 
5
6
  declare class TopbarLoginComponent implements OnInit, OnDestroy {
6
7
  environment: any;
@@ -32,11 +33,17 @@ declare class EmailVerificationComponent implements OnInit {
32
33
  loading: boolean;
33
34
  verified: boolean;
34
35
  invalid: boolean;
36
+ status: VerificationStatus | null;
37
+ heading: string;
35
38
  message: string;
36
39
  signInUrl: string;
37
- continueUrl: string;
40
+ continueUrl: any;
38
41
  ngOnInit(): void;
39
42
  private finish;
43
+ private verifyToken;
44
+ private isVerifiedStatus;
45
+ private headingForStatus;
46
+ private defaultMessageForStatus;
40
47
  static ɵfac: i0.ɵɵFactoryDeclaration<EmailVerificationComponent, never>;
41
48
  static ɵcmp: i0.ɵɵComponentDeclaration<EmailVerificationComponent, "rolatech-account-email-verification", never, {}, {}, never, never, true, never>;
42
49
  }