@flusys/ng-auth 8.1.5 → 9.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,10 +1,10 @@
1
1
  import { HttpClient } from '@angular/common/http';
2
2
  import * as i0 from '@angular/core';
3
- import { inject, Service, signal, computed, effect, PLATFORM_ID, InjectionToken, Component, input, output, untracked, viewChild, DestroyRef, DOCUMENT, Injector, resource, makeStateKey, TransferState } from '@angular/core';
3
+ import { inject, Service, signal, computed, effect, InjectionToken, PLATFORM_ID, Component, input, output, untracked, viewChild, DestroyRef, DOCUMENT, Injector, resource, makeStateKey, TransferState } from '@angular/core';
4
4
  import { APP_CONFIG, getServiceUrl, isCompanyFeatureEnabled, isServiceEnabled, isSignUpEnabled, getPermissionMode, getDefaultCompanySlug, getDefaultBranchSlug } from '@flusys/ng-core';
5
5
  import { of, timeout, switchMap, map, tap, catchError, shareReplay, finalize, BehaviorSubject, throwError, filter, take, from, firstValueFrom, forkJoin } from 'rxjs';
6
6
  import { Router, RouterOutlet, ActivatedRoute, RouterLink } from '@angular/router';
7
- import { PlatformService, PermissionValidatorService, ApiResourceService, CookieService, TranslateService, USER_PERMISSIONS, COMPANY_PERMISSIONS, BRANCH_PERMISSIONS, SOCIAL_AUTH_CONFIG_PERMISSIONS, resolveTranslationModule, SHARED_MESSAGES, permissionGuard, USER_PROVIDER, COMPANY_API_PROVIDER, USER_PERMISSION_PROVIDER, AUTH_STATE_PROVIDER, RouterTabsComponent, TranslatePipe, HasPermissionDirective, BaseFormComponent, BaseListComponent, BaseListTemplateDirective, FileUrlService, FILE_PROVIDER, PROFILE_PERMISSION_PROVIDER, FileUploaderComponent } from '@flusys/ng-shared';
7
+ import { PlatformService, PermissionValidatorService, ApiResourceService, TranslateService, CookieService, USER_PERMISSIONS, COMPANY_PERMISSIONS, BRANCH_PERMISSIONS, SOCIAL_AUTH_CONFIG_PERMISSIONS, resolveTranslationModule, SHARED_MESSAGES, permissionGuard, USER_PROVIDER, COMPANY_API_PROVIDER, USER_PERMISSION_PROVIDER, AUTH_STATE_PROVIDER, RouterTabsComponent, TranslatePipe, HasPermissionDirective, BaseFormComponent, BaseListComponent, BaseListTemplateDirective, FileUrlService, FILE_PROVIDER, PROFILE_PERMISSION_PROVIDER, FileUploaderComponent } from '@flusys/ng-shared';
8
8
  import { map as map$1, catchError as catchError$1, tap as tap$1 } from 'rxjs/operators';
9
9
  import { isPlatformBrowser, NgComponentOutlet, NgTemplateOutlet } from '@angular/common';
10
10
  import { MessageService, CardComponent, CheckboxComponent, FButtonDirective, InputTextDirective, SelectComponent, UiIconComponent, ConfirmationService, DialogComponent, ProgressSpinnerComponent, TooltipDirective, IconFieldComponent, InputIconComponent, TableComponent, TagComponent, PasswordComponent, AvatarComponent, SkeletonComponent, TextareaDirective, ToggleSwitchComponent } from '@flusys/ng-ui';
@@ -88,10 +88,10 @@ class AuthApiService {
88
88
  verifyEmail(token) {
89
89
  return this.http.post(`${this.baseUrl}/verify-email`, { token });
90
90
  }
91
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AuthApiService, deps: [], target: i0.ɵɵFactoryTarget.Service });
92
- static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.5", ngImport: i0, type: AuthApiService });
91
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: AuthApiService, deps: [], target: i0.ɵɵFactoryTarget.Service });
92
+ static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.2.0", ngImport: i0, type: AuthApiService });
93
93
  }
94
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AuthApiService, decorators: [{
94
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: AuthApiService, decorators: [{
95
95
  type: Service
96
96
  }], ctorParameters: () => [] });
97
97
 
@@ -313,10 +313,10 @@ class AuthStateService {
313
313
  if (!this.platform.isServer)
314
314
  localStorage.removeItem(key);
315
315
  }
316
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AuthStateService, deps: [], target: i0.ɵɵFactoryTarget.Service });
317
- static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.5", ngImport: i0, type: AuthStateService });
316
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: AuthStateService, deps: [], target: i0.ɵɵFactoryTarget.Service });
317
+ static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.2.0", ngImport: i0, type: AuthStateService });
318
318
  }
319
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AuthStateService, decorators: [{
319
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: AuthStateService, decorators: [{
320
320
  type: Service
321
321
  }], ctorParameters: () => [] });
322
322
 
@@ -387,10 +387,10 @@ class AuthInitService {
387
387
  }));
388
388
  return this.initializationCache$;
389
389
  }
390
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AuthInitService, deps: [], target: i0.ɵɵFactoryTarget.Service });
391
- static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.5", ngImport: i0, type: AuthInitService });
390
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: AuthInitService, deps: [], target: i0.ɵɵFactoryTarget.Service });
391
+ static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.2.0", ngImport: i0, type: AuthInitService });
392
392
  }
393
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AuthInitService, decorators: [{
393
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: AuthInitService, decorators: [{
394
394
  type: Service
395
395
  }] });
396
396
 
@@ -405,10 +405,10 @@ class BranchApiService extends ApiResourceService {
405
405
  fetchByCompany(companyId, search = '') {
406
406
  this.fetchList(search, { filter: { companyId } });
407
407
  }
408
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: BranchApiService, deps: [], target: i0.ɵɵFactoryTarget.Service });
409
- static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.5", ngImport: i0, type: BranchApiService });
408
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: BranchApiService, deps: [], target: i0.ɵɵFactoryTarget.Service });
409
+ static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.2.0", ngImport: i0, type: BranchApiService });
410
410
  }
411
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: BranchApiService, decorators: [{
411
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: BranchApiService, decorators: [{
412
412
  type: Service
413
413
  }], ctorParameters: () => [] });
414
414
 
@@ -420,10 +420,10 @@ class CompanyApiService extends ApiResourceService {
420
420
  constructor() {
421
421
  super('company', 'administration');
422
422
  }
423
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: CompanyApiService, deps: [], target: i0.ɵɵFactoryTarget.Service });
424
- static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.5", ngImport: i0, type: CompanyApiService });
423
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: CompanyApiService, deps: [], target: i0.ɵɵFactoryTarget.Service });
424
+ static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.2.0", ngImport: i0, type: CompanyApiService });
425
425
  }
426
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: CompanyApiService, decorators: [{
426
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: CompanyApiService, decorators: [{
427
427
  type: Service
428
428
  }], ctorParameters: () => [] });
429
429
 
@@ -491,10 +491,10 @@ class SocialAuthApiService {
491
491
  callback(request) {
492
492
  return this.http.post(`${this.baseUrl}/social/callback`, request);
493
493
  }
494
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: SocialAuthApiService, deps: [], target: i0.ɵɵFactoryTarget.Service });
495
- static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.5", ngImport: i0, type: SocialAuthApiService });
494
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: SocialAuthApiService, deps: [], target: i0.ɵɵFactoryTarget.Service });
495
+ static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.2.0", ngImport: i0, type: SocialAuthApiService });
496
496
  }
497
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: SocialAuthApiService, decorators: [{
497
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: SocialAuthApiService, decorators: [{
498
498
  type: Service
499
499
  }] });
500
500
 
@@ -502,10 +502,10 @@ class SocialAuthConfigApiService extends ApiResourceService {
502
502
  constructor() {
503
503
  super('social-config', 'auth');
504
504
  }
505
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: SocialAuthConfigApiService, deps: [], target: i0.ɵɵFactoryTarget.Service });
506
- static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.5", ngImport: i0, type: SocialAuthConfigApiService });
505
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: SocialAuthConfigApiService, deps: [], target: i0.ɵɵFactoryTarget.Service });
506
+ static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.2.0", ngImport: i0, type: SocialAuthConfigApiService });
507
507
  }
508
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: SocialAuthConfigApiService, decorators: [{
508
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: SocialAuthConfigApiService, decorators: [{
509
509
  type: Service
510
510
  }], ctorParameters: () => [] });
511
511
 
@@ -531,10 +531,105 @@ class TokenRefreshStateService {
531
531
  failRefresh() {
532
532
  this._isRefreshing.set(false);
533
533
  }
534
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: TokenRefreshStateService, deps: [], target: i0.ɵɵFactoryTarget.Service });
535
- static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.5", ngImport: i0, type: TokenRefreshStateService });
534
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: TokenRefreshStateService, deps: [], target: i0.ɵɵFactoryTarget.Service });
535
+ static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.2.0", ngImport: i0, type: TokenRefreshStateService });
536
536
  }
537
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: TokenRefreshStateService, decorators: [{
537
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: TokenRefreshStateService, decorators: [{
538
+ type: Service
539
+ }] });
540
+
541
+ const AUTH_VALIDATION_CONFIG = new InjectionToken('AUTH_VALIDATION_CONFIG');
542
+ const REGISTRATION_FIELD_CONTEXT = new InjectionToken('REGISTRATION_FIELD_CONTEXT');
543
+ const AUTH_REGISTRATION_EXTENSION = new InjectionToken('AUTH_REGISTRATION_EXTENSION');
544
+ const AUTH_USER_LIST_EXTENSION = new InjectionToken('AUTH_USER_LIST_EXTENSION');
545
+ const PROFILE_FIELD_CONTEXT = new InjectionToken('PROFILE_FIELD_CONTEXT');
546
+ const AUTH_PROFILE_EXTENSION = new InjectionToken('AUTH_PROFILE_EXTENSION');
547
+ const USER_FORM_FIELD_CONTEXT = new InjectionToken('USER_FORM_FIELD_CONTEXT');
548
+ const AUTH_USER_FORM_EXTENSION = new InjectionToken('AUTH_USER_FORM_EXTENSION');
549
+ const AUTH_USER_DETAIL_CONFIG = new InjectionToken('AUTH_USER_DETAIL_CONFIG');
550
+ const PASSWORD_SPECIAL_CHAR_PATTERN = /[!@#$%^&*()_+\-=[\]{};':"\\|,.<>/?~`]/;
551
+ const DEFAULT_PASSWORD_VALIDATION = {
552
+ minLength: 8,
553
+ maxLength: 128,
554
+ requireUppercase: true,
555
+ requireLowercase: true,
556
+ requireNumbers: true,
557
+ requireSpecialChars: true,
558
+ };
559
+ function resolvePasswordValidation(config) {
560
+ const overrides = Object.fromEntries(Object.entries(config ?? {}).filter(([, value]) => value !== undefined));
561
+ return { ...DEFAULT_PASSWORD_VALIDATION, ...overrides };
562
+ }
563
+ function validatePassword(password, config = DEFAULT_PASSWORD_VALIDATION) {
564
+ const rules = resolvePasswordValidation(config);
565
+ const fail = (key) => rules.messageKey ?? rules.message ?? key;
566
+ if (password.length < (rules.minLength ?? 0)) {
567
+ return fail('auth.validation.password.min.length');
568
+ }
569
+ if (rules.maxLength && password.length > rules.maxLength) {
570
+ return fail('auth.validation.password.max.length');
571
+ }
572
+ if (rules.pattern) {
573
+ return rules.pattern.test(password) ? null : fail('auth.validation.password.pattern');
574
+ }
575
+ if (rules.requireUppercase && !/[A-Z]/.test(password)) {
576
+ return fail('auth.validation.password.require.uppercase');
577
+ }
578
+ if (rules.requireLowercase && !/[a-z]/.test(password)) {
579
+ return fail('auth.validation.password.require.lowercase');
580
+ }
581
+ if (rules.requireNumbers && !/\d/.test(password)) {
582
+ return fail('auth.validation.password.require.number');
583
+ }
584
+ if (rules.requireSpecialChars && !PASSWORD_SPECIAL_CHAR_PATTERN.test(password)) {
585
+ return fail('auth.validation.password.require.special');
586
+ }
587
+ return null;
588
+ }
589
+ function validateEmail(email, config) {
590
+ const pattern = config?.pattern ?? /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
591
+ if (pattern.test(email))
592
+ return null;
593
+ return config?.messageKey ?? config?.message ?? 'shared.invalid.email';
594
+ }
595
+
596
+ class PasswordPolicyService {
597
+ config = inject(AUTH_VALIDATION_CONFIG, { optional: true });
598
+ translateAdapter = inject(TranslateService, { optional: true });
599
+ rules = resolvePasswordValidation(this.config?.password);
600
+ minLength = this.rules.minLength ?? DEFAULT_PASSWORD_VALIDATION.minLength;
601
+ maxLength = this.rules.maxLength ?? DEFAULT_PASSWORD_VALIDATION.maxLength;
602
+ validate(password) {
603
+ if (!password)
604
+ return null;
605
+ const key = validatePassword(password, this.rules);
606
+ if (!key)
607
+ return null;
608
+ const params = { min: this.minLength, max: this.maxLength, ...this.rules.messageParam };
609
+ return this.translateAdapter?.translate(key, params) ?? key;
610
+ }
611
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: PasswordPolicyService, deps: [], target: i0.ɵɵFactoryTarget.Service });
612
+ static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.2.0", ngImport: i0, type: PasswordPolicyService });
613
+ }
614
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: PasswordPolicyService, decorators: [{
615
+ type: Service
616
+ }] });
617
+
618
+ class EmailPolicyService {
619
+ config = inject(AUTH_VALIDATION_CONFIG, { optional: true })?.email;
620
+ translateAdapter = inject(TranslateService, { optional: true });
621
+ validate(email) {
622
+ if (!email)
623
+ return null;
624
+ const key = validateEmail(email, this.config);
625
+ if (!key)
626
+ return null;
627
+ return this.translateAdapter?.translate(key, this.config?.messageParam) ?? key;
628
+ }
629
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: EmailPolicyService, deps: [], target: i0.ɵɵFactoryTarget.Service });
630
+ static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.2.0", ngImport: i0, type: EmailPolicyService });
631
+ }
632
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: EmailPolicyService, decorators: [{
538
633
  type: Service
539
634
  }] });
540
635
 
@@ -553,10 +648,10 @@ class UserApiService extends ApiResourceService {
553
648
  const params = search ? { q: search } : undefined;
554
649
  return this.http.post(`${this.baseUrl}/lookup`, filter, params ? { params } : undefined);
555
650
  }
556
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: UserApiService, deps: [], target: i0.ɵɵFactoryTarget.Service });
557
- static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.5", ngImport: i0, type: UserApiService });
651
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: UserApiService, deps: [], target: i0.ɵɵFactoryTarget.Service });
652
+ static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.2.0", ngImport: i0, type: UserApiService });
558
653
  }
559
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: UserApiService, decorators: [{
654
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: UserApiService, decorators: [{
560
655
  type: Service
561
656
  }], ctorParameters: () => [] });
562
657
 
@@ -609,10 +704,10 @@ class UserPermissionApiService {
609
704
  branchId,
610
705
  });
611
706
  }
612
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: UserPermissionApiService, deps: [], target: i0.ɵɵFactoryTarget.Service });
613
- static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.5", ngImport: i0, type: UserPermissionApiService });
707
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: UserPermissionApiService, deps: [], target: i0.ɵɵFactoryTarget.Service });
708
+ static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.2.0", ngImport: i0, type: UserPermissionApiService });
614
709
  }
615
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: UserPermissionApiService, decorators: [{
710
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: UserPermissionApiService, decorators: [{
616
711
  type: Service
617
712
  }] });
618
713
 
@@ -808,6 +903,7 @@ const AUTH_MESSAGES = {
808
903
  'auth.select.success': 'Company selected successfully',
809
904
  'auth.switch.company.success': 'Company switched successfully',
810
905
  'auth.register.email.exists': 'Email already exists',
906
+ 'auth.register.account.deleted': 'This account has been permanently deleted. Please contact your system administrator.',
811
907
  'auth.register.company.already.assigned': 'Company already assigned',
812
908
  'auth.password.change.success': 'Password changed successfully',
813
909
  'auth.password.change.invalid.current': 'Current password is incorrect',
@@ -913,10 +1009,10 @@ const AUTH_MESSAGES = {
913
1009
  'auth.login.branch.label': 'Branch',
914
1010
  'auth.login.select.branch.option': 'Select a branch',
915
1011
  'auth.login.remember.selection': 'Remember my selection',
916
- 'auth.validation.password.min.length': 'Password must be at least 8 characters',
1012
+ 'auth.validation.password.min.length': 'Password must be at least {{min}} characters',
917
1013
  'auth.validation.email.required': 'Email is required',
918
1014
  'auth.validation.password.required': 'Password is required',
919
- 'auth.validation.password.max.length': 'Password exceeds maximum length',
1015
+ 'auth.validation.password.max.length': 'Password must be at most {{max}} characters',
920
1016
  'auth.validation.password.pattern': 'Password does not meet requirements',
921
1017
  'auth.validation.password.require.uppercase': 'Password must contain at least one uppercase letter',
922
1018
  'auth.validation.password.require.lowercase': 'Password must contain at least one lowercase letter',
@@ -938,6 +1034,7 @@ const AUTH_MESSAGES = {
938
1034
  // pages/register/register-page.component.ts
939
1035
  'auth.register.create.account': 'Create Account',
940
1036
  'auth.register.subtitle': 'Fill in your details to create an account.',
1037
+ 'auth.register.signup.disabled': 'New account registration is currently disabled.',
941
1038
  'auth.register.full.name': 'Full Name',
942
1039
  'auth.register.name.placeholder': 'Enter your full name',
943
1040
  'auth.phone.label': 'Phone Number',
@@ -1100,6 +1197,7 @@ const AUTH_MESSAGES = {
1100
1197
  'auth.social.company.required': 'No account is linked to this {{provider}} profile. Please sign up manually and join or create a company first, then social sign-in will work.',
1101
1198
  'auth.social.email.required': '{{provider}} did not share an email address',
1102
1199
  'auth.social.email.not.verified': '{{provider}} has not verified this email address',
1200
+ 'auth.social.account.deleted': 'This account has been permanently deleted. Please contact your system administrator.',
1103
1201
  // components/social-login-buttons.component.ts
1104
1202
  'auth.social.continue.with': 'or continue with',
1105
1203
  'auth.social.provider.google': 'Google',
@@ -1374,10 +1472,10 @@ class AuthLayoutStateAdapter {
1374
1472
  return null;
1375
1473
  }, /* @ts-ignore */
1376
1474
  ...(ngDevMode ? [{ debugName: "loginUserData" }] : /* istanbul ignore next */ []));
1377
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AuthLayoutStateAdapter, deps: [], target: i0.ɵɵFactoryTarget.Service });
1378
- static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.5", ngImport: i0, type: AuthLayoutStateAdapter });
1475
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: AuthLayoutStateAdapter, deps: [], target: i0.ɵɵFactoryTarget.Service });
1476
+ static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.2.0", ngImport: i0, type: AuthLayoutStateAdapter });
1379
1477
  }
1380
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AuthLayoutStateAdapter, decorators: [{
1478
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: AuthLayoutStateAdapter, decorators: [{
1381
1479
  type: Service
1382
1480
  }] });
1383
1481
  // =============================================================================
@@ -1446,10 +1544,10 @@ class AuthLayoutApiAdapter {
1446
1544
  imageId: branch.logoId ?? undefined,
1447
1545
  }))));
1448
1546
  }
1449
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AuthLayoutApiAdapter, deps: [], target: i0.ɵɵFactoryTarget.Service });
1450
- static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.5", ngImport: i0, type: AuthLayoutApiAdapter });
1547
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: AuthLayoutApiAdapter, deps: [], target: i0.ɵɵFactoryTarget.Service });
1548
+ static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.2.0", ngImport: i0, type: AuthLayoutApiAdapter });
1451
1549
  }
1452
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AuthLayoutApiAdapter, decorators: [{
1550
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: AuthLayoutApiAdapter, decorators: [{
1453
1551
  type: Service
1454
1552
  }] });
1455
1553
 
@@ -1518,10 +1616,10 @@ class AuthUserProviderAdapter {
1518
1616
  email: user.email,
1519
1617
  }))));
1520
1618
  }
1521
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AuthUserProviderAdapter, deps: [], target: i0.ɵɵFactoryTarget.Service });
1522
- static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.5", ngImport: i0, type: AuthUserProviderAdapter, autoProvided: false });
1619
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: AuthUserProviderAdapter, deps: [], target: i0.ɵɵFactoryTarget.Service });
1620
+ static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.2.0", ngImport: i0, type: AuthUserProviderAdapter, autoProvided: false });
1523
1621
  }
1524
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AuthUserProviderAdapter, decorators: [{
1622
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: AuthUserProviderAdapter, decorators: [{
1525
1623
  type: Service,
1526
1624
  args: [{ autoProvided: false }]
1527
1625
  }] });
@@ -1561,10 +1659,10 @@ class AuthCompanyApiProviderAdapter {
1561
1659
  }
1562
1660
  return from(this.branchApi.findByIds(ids, ['id', 'name'])).pipe(map((response) => mapListResponse(response, (branch) => ({ id: branch.id, name: branch.name }))));
1563
1661
  }
1564
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AuthCompanyApiProviderAdapter, deps: [], target: i0.ɵɵFactoryTarget.Service });
1565
- static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.5", ngImport: i0, type: AuthCompanyApiProviderAdapter, autoProvided: false });
1662
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: AuthCompanyApiProviderAdapter, deps: [], target: i0.ɵɵFactoryTarget.Service });
1663
+ static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.2.0", ngImport: i0, type: AuthCompanyApiProviderAdapter, autoProvided: false });
1566
1664
  }
1567
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AuthCompanyApiProviderAdapter, decorators: [{
1665
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: AuthCompanyApiProviderAdapter, decorators: [{
1568
1666
  type: Service,
1569
1667
  args: [{ autoProvided: false }]
1570
1668
  }] });
@@ -1582,10 +1680,10 @@ class AuthUserPermissionProviderAdapter {
1582
1680
  data: (response.data ?? []).map((c) => ({ id: c.companyId, name: c.companyName })),
1583
1681
  })));
1584
1682
  }
1585
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AuthUserPermissionProviderAdapter, deps: [], target: i0.ɵɵFactoryTarget.Service });
1586
- static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.5", ngImport: i0, type: AuthUserPermissionProviderAdapter, autoProvided: false });
1683
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: AuthUserPermissionProviderAdapter, deps: [], target: i0.ɵɵFactoryTarget.Service });
1684
+ static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.2.0", ngImport: i0, type: AuthUserPermissionProviderAdapter, autoProvided: false });
1587
1685
  }
1588
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AuthUserPermissionProviderAdapter, decorators: [{
1686
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: AuthUserPermissionProviderAdapter, decorators: [{
1589
1687
  type: Service,
1590
1688
  args: [{ autoProvided: false }]
1591
1689
  }] });
@@ -1601,10 +1699,10 @@ class AuthStateProviderAdapter {
1601
1699
  initialize() {
1602
1700
  return this.authInit.initialize().pipe(map(() => undefined));
1603
1701
  }
1604
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AuthStateProviderAdapter, deps: [], target: i0.ɵɵFactoryTarget.Service });
1605
- static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.5", ngImport: i0, type: AuthStateProviderAdapter, autoProvided: false });
1702
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: AuthStateProviderAdapter, deps: [], target: i0.ɵɵFactoryTarget.Service });
1703
+ static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.2.0", ngImport: i0, type: AuthStateProviderAdapter, autoProvided: false });
1606
1704
  }
1607
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AuthStateProviderAdapter, decorators: [{
1705
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: AuthStateProviderAdapter, decorators: [{
1608
1706
  type: Service,
1609
1707
  args: [{ autoProvided: false }]
1610
1708
  }] });
@@ -1627,54 +1725,6 @@ function provideAuthProviders() {
1627
1725
  ];
1628
1726
  }
1629
1727
 
1630
- const AUTH_VALIDATION_CONFIG = new InjectionToken('AUTH_VALIDATION_CONFIG');
1631
- const REGISTRATION_FIELD_CONTEXT = new InjectionToken('REGISTRATION_FIELD_CONTEXT');
1632
- const AUTH_REGISTRATION_EXTENSION = new InjectionToken('AUTH_REGISTRATION_EXTENSION');
1633
- const AUTH_USER_LIST_EXTENSION = new InjectionToken('AUTH_USER_LIST_EXTENSION');
1634
- const PROFILE_FIELD_CONTEXT = new InjectionToken('PROFILE_FIELD_CONTEXT');
1635
- const AUTH_PROFILE_EXTENSION = new InjectionToken('AUTH_PROFILE_EXTENSION');
1636
- const USER_FORM_FIELD_CONTEXT = new InjectionToken('USER_FORM_FIELD_CONTEXT');
1637
- const AUTH_USER_FORM_EXTENSION = new InjectionToken('AUTH_USER_FORM_EXTENSION');
1638
- const AUTH_USER_DETAIL_CONFIG = new InjectionToken('AUTH_USER_DETAIL_CONFIG');
1639
- function validatePassword(password, config) {
1640
- const minLen = config.minLength ?? 8;
1641
- const maxLen = config.maxLength;
1642
- if (password.length < minLen) {
1643
- return config.message ?? 'auth.validation.password.min.length';
1644
- }
1645
- if (maxLen && password.length > maxLen) {
1646
- return config.message ?? 'auth.validation.password.max.length';
1647
- }
1648
- if (config.pattern) {
1649
- if (!config.pattern.test(password)) {
1650
- return config.message ?? 'auth.validation.password.pattern';
1651
- }
1652
- }
1653
- else {
1654
- if (config.requireUppercase && !/[A-Z]/.test(password)) {
1655
- return config.message ?? 'auth.validation.password.require.uppercase';
1656
- }
1657
- if (config.requireLowercase && !/[a-z]/.test(password)) {
1658
- return config.message ?? 'auth.validation.password.require.lowercase';
1659
- }
1660
- if (config.requireNumbers && !/\d/.test(password)) {
1661
- return config.message ?? 'auth.validation.password.require.number';
1662
- }
1663
- if (config.requireSpecialChars &&
1664
- !/[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]/.test(password)) {
1665
- return config.message ?? 'auth.validation.password.require.special';
1666
- }
1667
- }
1668
- return null;
1669
- }
1670
- function validateEmail(email, config) {
1671
- const pattern = config?.pattern ?? /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
1672
- const message = config?.message ?? 'shared.invalid.email';
1673
- if (!pattern.test(email))
1674
- return message;
1675
- return null;
1676
- }
1677
-
1678
1728
  /**
1679
1729
  * Administration Page Component
1680
1730
  * Unified administration page with tabs for:
@@ -1739,8 +1789,8 @@ class AdministrationPageComponent {
1739
1789
  }));
1740
1790
  }, /* @ts-ignore */
1741
1791
  ...(ngDevMode ? [{ debugName: "visibleTabs" }] : /* istanbul ignore next */ []));
1742
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AdministrationPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1743
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.5", type: AdministrationPageComponent, isStandalone: true, selector: "lib-administration-page", ngImport: i0, template: `
1792
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: AdministrationPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1793
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.2.0", type: AdministrationPageComponent, isStandalone: true, selector: "lib-administration-page", ngImport: i0, template: `
1744
1794
  <div class="p-4">
1745
1795
  <div class="mb-4">
1746
1796
  <h1 class="text-2xl font-bold m-0">{{ 'administrative.title' | translate }}</h1>
@@ -1755,7 +1805,7 @@ class AdministrationPageComponent {
1755
1805
  </div>
1756
1806
  `, isInline: true, dependencies: [{ kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: RouterTabsComponent, selector: "lib-router-tabs", inputs: ["tabs"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
1757
1807
  }
1758
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AdministrationPageComponent, decorators: [{
1808
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: AdministrationPageComponent, decorators: [{
1759
1809
  type: Component,
1760
1810
  args: [{
1761
1811
  selector: 'lib-administration-page',
@@ -1986,8 +2036,8 @@ class BranchFormComponent {
1986
2036
  queryParams: companyId ? { companyId } : {},
1987
2037
  });
1988
2038
  }
1989
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: BranchFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1990
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: BranchFormComponent, isStandalone: true, selector: "lib-branch-form", ngImport: i0, template: `
2039
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: BranchFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2040
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.2.0", type: BranchFormComponent, isStandalone: true, selector: "lib-branch-form", ngImport: i0, template: `
1991
2041
  <f-card>
1992
2042
  <ng-template #header>
1993
2043
  <div class="flex justify-between items-center p-4">
@@ -2125,7 +2175,7 @@ class BranchFormComponent {
2125
2175
  </f-card>
2126
2176
  `, isInline: true, dependencies: [{ kind: "component", type: CardComponent, selector: "f-card", inputs: ["header", "subheader", "styleClass", "style"] }, { kind: "component", type: CheckboxComponent, selector: "f-checkbox", inputs: ["label", "binary", "disabled", "readonly", "inputId", "invalid", "indeterminate", "variant", "size", "touched", "styleClass", "style", "checked"], outputs: ["onChange", "onBlur", "touch", "checkedChange"] }, { kind: "directive", type: FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "variant", "rounded", "raised", "fluid", "disabled", "loading", "loadingIcon", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "directive", type: InputTextDirective, selector: "[fInputText]", inputs: ["invalid", "touched", "variant", "size", "fluid"] }, { kind: "component", type: SelectComponent, selector: "f-select", inputs: ["options", "optionLabel", "optionValue", "placeholder", "disabled", "filter", "filterBy", "filterMatchMode", "filterLocale", "filterPlaceholder", "resetFilterOnHide", "autofocusFilter", "emptyMessage", "emptyFilterMessage", "showClear", "loading", "loadingIcon", "dropdownIcon", "clearIcon", "inputId", "invalid", "touched", "styleClass", "style", "appendTo", "editable", "readonly", "autofocus", "checkmark", "group", "optionGroupLabel", "optionGroupChildren", "virtualScroll", "virtualScrollItemSize", "lazy", "selectedObject"], outputs: ["onFilter", "onChange", "onShow", "onHide", "onBlur", "onFocus", "onClear", "onLazyLoad"] }, { kind: "component", type: UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill", "severity"] }, { kind: "directive", type: FormField, selector: "[formField]", inputs: ["formField"], exportAs: ["formField"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
2127
2177
  }
2128
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: BranchFormComponent, decorators: [{
2178
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: BranchFormComponent, decorators: [{
2129
2179
  type: Component,
2130
2180
  args: [{
2131
2181
  selector: 'lib-branch-form',
@@ -2373,8 +2423,8 @@ class BranchPermittedUsersDialogComponent {
2373
2423
  onClose() {
2374
2424
  this.closed.emit();
2375
2425
  }
2376
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: BranchPermittedUsersDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2377
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: BranchPermittedUsersDialogComponent, isStandalone: true, selector: "lib-branch-permitted-users-dialog", inputs: { visible: { classPropertyName: "visible", publicName: "visible", isSignal: true, isRequired: true, transformFunction: null }, branch: { classPropertyName: "branch", publicName: "branch", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { closed: "closed" }, ngImport: i0, template: `
2426
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: BranchPermittedUsersDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2427
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.2.0", type: BranchPermittedUsersDialogComponent, isStandalone: true, selector: "lib-branch-permitted-users-dialog", inputs: { visible: { classPropertyName: "visible", publicName: "visible", isSignal: true, isRequired: true, transformFunction: null }, branch: { classPropertyName: "branch", publicName: "branch", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { closed: "closed" }, ngImport: i0, template: `
2378
2428
  <f-dialog
2379
2429
  [visible]="visible()"
2380
2430
  [modal]="true"
@@ -2439,7 +2489,7 @@ class BranchPermittedUsersDialogComponent {
2439
2489
  </f-dialog>
2440
2490
  `, isInline: true, dependencies: [{ kind: "component", type: DialogComponent, selector: "f-dialog", inputs: ["header", "visible", "modal", "closable", "closeOnEscape", "dismissableMask", "resizable", "draggable", "maximizable", "blockScroll", "returnFocusOnClose", "position", "style", "styleClass", "breakpoints"], outputs: ["visibleChange", "onShow", "onHide", "onMaximize"] }, { kind: "directive", type: FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "variant", "rounded", "raised", "fluid", "disabled", "loading", "loadingIcon", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "component", type: ProgressSpinnerComponent, selector: "f-progressspinner", inputs: ["size", "strokeWidth", "animationDuration", "styleClass", "ariaLabel"] }, { kind: "directive", type: TooltipDirective, selector: "[fTooltip]", inputs: ["fTooltip", "tooltipPosition", "positionStyle", "tooltipStyleClass", "disabled", "tooltipEvent", "showDelay", "hideDelay", "life", "autoHide", "positionTop", "positionLeft", "escape"] }, { kind: "component", type: UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill", "severity"] }, { kind: "directive", type: HasPermissionDirective, selector: "[hasPermission]", inputs: ["hasPermission"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
2441
2491
  }
2442
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: BranchPermittedUsersDialogComponent, decorators: [{
2492
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: BranchPermittedUsersDialogComponent, decorators: [{
2443
2493
  type: Component,
2444
2494
  args: [{
2445
2495
  selector: 'lib-branch-permitted-users-dialog',
@@ -2639,8 +2689,8 @@ class BranchListComponent {
2639
2689
  },
2640
2690
  });
2641
2691
  }
2642
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: BranchListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2643
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: BranchListComponent, isStandalone: true, selector: "lib-branch-list", ngImport: i0, template: `
2692
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: BranchListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2693
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.2.0", type: BranchListComponent, isStandalone: true, selector: "lib-branch-list", ngImport: i0, template: `
2644
2694
  <f-card>
2645
2695
  <ng-template #header>
2646
2696
  <div
@@ -2793,7 +2843,7 @@ class BranchListComponent {
2793
2843
  />
2794
2844
  `, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: CardComponent, selector: "f-card", inputs: ["header", "subheader", "styleClass", "style"] }, { kind: "directive", type: FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "variant", "rounded", "raised", "fluid", "disabled", "loading", "loadingIcon", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "component", type: IconFieldComponent, selector: "f-iconfield", inputs: ["iconPosition", "styleClass"] }, { kind: "component", type: InputIconComponent, selector: "f-inputicon", inputs: ["icon", "position", "styleClass", "style"] }, { kind: "directive", type: InputTextDirective, selector: "[fInputText]", inputs: ["invalid", "touched", "variant", "size", "fluid"] }, { kind: "component", type: SelectComponent, selector: "f-select", inputs: ["options", "optionLabel", "optionValue", "placeholder", "disabled", "filter", "filterBy", "filterMatchMode", "filterLocale", "filterPlaceholder", "resetFilterOnHide", "autofocusFilter", "emptyMessage", "emptyFilterMessage", "showClear", "loading", "loadingIcon", "dropdownIcon", "clearIcon", "inputId", "invalid", "touched", "styleClass", "style", "appendTo", "editable", "readonly", "autofocus", "checkmark", "group", "optionGroupLabel", "optionGroupChildren", "virtualScroll", "virtualScrollItemSize", "lazy", "selectedObject"], outputs: ["onFilter", "onChange", "onShow", "onHide", "onBlur", "onFocus", "onClear", "onLazyLoad"] }, { kind: "component", type: TableComponent, selector: "f-table", inputs: ["value", "lazy", "loading", "rows", "totalRecords", "rowHover", "dataKey", "scrollable", "scrollHeight", "paginator", "first", "rowsPerPageOptions", "showCurrentPageReport", "currentPageReportTemplate", "tableStyle", "styleClass", "globalFilterFields", "filterDelay", "responsiveLayout", "selectionMode", "sortMode", "rowExpandMode", "resizableColumns", "rowStyleClass", "virtualScroll", "virtualScrollItemSize", "sortField", "sortOrder", "multiSortMeta", "filters", "selection", "expandedRowKeys", "contextMenuSelection"], outputs: ["sortFieldChange", "sortOrderChange", "multiSortMetaChange", "filtersChange", "selectionChange", "expandedRowKeysChange", "contextMenuSelectionChange", "onLazyLoad", "onSort", "onFilter", "onRowSelect", "onRowUnselect", "onSelectAllChange", "onRowExpand", "onRowCollapse", "onColResize", "onRowContextMenu"] }, { kind: "component", type: TagComponent, selector: "f-tag", inputs: ["value", "severity", "icon", "rounded", "color", "styleClass", "style"] }, { kind: "directive", type: TooltipDirective, selector: "[fTooltip]", inputs: ["fTooltip", "tooltipPosition", "positionStyle", "tooltipStyleClass", "disabled", "tooltipEvent", "showDelay", "hideDelay", "life", "autoHide", "positionTop", "positionLeft", "escape"] }, { kind: "component", type: UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill", "severity"] }, { kind: "directive", type: HasPermissionDirective, selector: "[hasPermission]", inputs: ["hasPermission"] }, { kind: "component", type: BranchPermittedUsersDialogComponent, selector: "lib-branch-permitted-users-dialog", inputs: ["visible", "branch"], outputs: ["closed"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
2795
2845
  }
2796
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: BranchListComponent, decorators: [{
2846
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: BranchListComponent, decorators: [{
2797
2847
  type: Component,
2798
2848
  args: [{
2799
2849
  selector: 'lib-branch-list',
@@ -3064,8 +3114,8 @@ class CompanyFormComponent {
3064
3114
  t(key, vars) {
3065
3115
  return this.translateAdapter?.translate(key, vars) ?? key;
3066
3116
  }
3067
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: CompanyFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3068
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.1.5", type: CompanyFormComponent, isStandalone: true, selector: "lib-company-form", viewQueries: [{ propertyName: "formRef", first: true, predicate: BaseFormComponent, descendants: true, isSignal: true }], ngImport: i0, template: `
3117
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: CompanyFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3118
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.2.0", type: CompanyFormComponent, isStandalone: true, selector: "lib-company-form", viewQueries: [{ propertyName: "formRef", first: true, predicate: BaseFormComponent, descendants: true, isSignal: true }], ngImport: i0, template: `
3069
3119
  <lib-base-form
3070
3120
  [fields]="fields"
3071
3121
  [service]="companyService"
@@ -3080,7 +3130,7 @@ class CompanyFormComponent {
3080
3130
  />
3081
3131
  `, isInline: true, dependencies: [{ kind: "component", type: BaseFormComponent, selector: "lib-base-form", inputs: ["fields", "title", "createTitle", "editTitle", "columns", "submitLabel", "cancelLabel", "isLoading", "isEditMode", "initialValue", "service", "editId", "cancelRoute", "navigateOnSuccess", "mapToRequest", "mapFromEntity"], outputs: ["onSubmit", "onCancel", "onValueChange"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
3082
3132
  }
3083
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: CompanyFormComponent, decorators: [{
3133
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: CompanyFormComponent, decorators: [{
3084
3134
  type: Component,
3085
3135
  args: [{
3086
3136
  selector: 'lib-company-form',
@@ -3196,8 +3246,8 @@ class CompanyPermittedUsersDialogComponent {
3196
3246
  onClose() {
3197
3247
  this.closed.emit();
3198
3248
  }
3199
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: CompanyPermittedUsersDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3200
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: CompanyPermittedUsersDialogComponent, isStandalone: true, selector: "lib-company-permitted-users-dialog", inputs: { visible: { classPropertyName: "visible", publicName: "visible", isSignal: true, isRequired: true, transformFunction: null }, company: { classPropertyName: "company", publicName: "company", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { closed: "closed" }, ngImport: i0, template: `
3249
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: CompanyPermittedUsersDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3250
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.2.0", type: CompanyPermittedUsersDialogComponent, isStandalone: true, selector: "lib-company-permitted-users-dialog", inputs: { visible: { classPropertyName: "visible", publicName: "visible", isSignal: true, isRequired: true, transformFunction: null }, company: { classPropertyName: "company", publicName: "company", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { closed: "closed" }, ngImport: i0, template: `
3201
3251
  <f-dialog
3202
3252
  [visible]="visible()"
3203
3253
  [modal]="true"
@@ -3262,7 +3312,7 @@ class CompanyPermittedUsersDialogComponent {
3262
3312
  </f-dialog>
3263
3313
  `, isInline: true, dependencies: [{ kind: "component", type: DialogComponent, selector: "f-dialog", inputs: ["header", "visible", "modal", "closable", "closeOnEscape", "dismissableMask", "resizable", "draggable", "maximizable", "blockScroll", "returnFocusOnClose", "position", "style", "styleClass", "breakpoints"], outputs: ["visibleChange", "onShow", "onHide", "onMaximize"] }, { kind: "directive", type: FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "variant", "rounded", "raised", "fluid", "disabled", "loading", "loadingIcon", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "component", type: ProgressSpinnerComponent, selector: "f-progressspinner", inputs: ["size", "strokeWidth", "animationDuration", "styleClass", "ariaLabel"] }, { kind: "directive", type: TooltipDirective, selector: "[fTooltip]", inputs: ["fTooltip", "tooltipPosition", "positionStyle", "tooltipStyleClass", "disabled", "tooltipEvent", "showDelay", "hideDelay", "life", "autoHide", "positionTop", "positionLeft", "escape"] }, { kind: "component", type: UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill", "severity"] }, { kind: "directive", type: HasPermissionDirective, selector: "[hasPermission]", inputs: ["hasPermission"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
3264
3314
  }
3265
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: CompanyPermittedUsersDialogComponent, decorators: [{
3315
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: CompanyPermittedUsersDialogComponent, decorators: [{
3266
3316
  type: Component,
3267
3317
  args: [{
3268
3318
  selector: 'lib-company-permitted-users-dialog',
@@ -3408,8 +3458,8 @@ class CompanyListComponent {
3408
3458
  t(key) {
3409
3459
  return this.translateAdapter?.translate(key) ?? key;
3410
3460
  }
3411
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: CompanyListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3412
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.5", type: CompanyListComponent, isStandalone: true, selector: "lib-company-list", ngImport: i0, template: `
3461
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: CompanyListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3462
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.2.0", type: CompanyListComponent, isStandalone: true, selector: "lib-company-list", ngImport: i0, template: `
3413
3463
  <lib-base-list
3414
3464
  [columns]="columns"
3415
3465
  [actions]="rowActions"
@@ -3444,7 +3494,7 @@ class CompanyListComponent {
3444
3494
  />
3445
3495
  `, isInline: true, dependencies: [{ kind: "component", type: BaseListComponent, selector: "lib-base-list", inputs: ["columns", "actions", "title", "showCreateButton", "searchable", "pageSize", "scrollHeight", "emptyMessage", "createButtonLabel", "createButtonIcon", "data", "total", "isLoading", "service", "filter", "createRoute", "editRoute", "deleteConfirmField", "deleteType", "idField", "canEdit", "canDelete"], outputs: ["onCreate", "onLazyLoad", "onSearch"] }, { kind: "directive", type: BaseListTemplateDirective, selector: "ng-template[baseListTemplate]", inputs: ["baseListTemplate"] }, { kind: "component", type: TagComponent, selector: "f-tag", inputs: ["value", "severity", "icon", "rounded", "color", "styleClass", "style"] }, { kind: "component", type: CompanyPermittedUsersDialogComponent, selector: "lib-company-permitted-users-dialog", inputs: ["visible", "company"], outputs: ["closed"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
3446
3496
  }
3447
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: CompanyListComponent, decorators: [{
3497
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: CompanyListComponent, decorators: [{
3448
3498
  type: Component,
3449
3499
  args: [{
3450
3500
  selector: 'lib-company-list',
@@ -3554,8 +3604,8 @@ class ForgotPasswordPageComponent {
3554
3604
  this.submittedEmail.set('');
3555
3605
  this.formModel.set({ email: '' });
3556
3606
  }
3557
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: ForgotPasswordPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3558
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: ForgotPasswordPageComponent, isStandalone: true, selector: "lib-forgot-password-page", ngImport: i0, template: `
3607
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: ForgotPasswordPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3608
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.2.0", type: ForgotPasswordPageComponent, isStandalone: true, selector: "lib-forgot-password-page", ngImport: i0, template: `
3559
3609
  <app-floating-configurator />
3560
3610
  <div
3561
3611
  class="bg-surface-ground flex items-center justify-center min-h-screen"
@@ -3659,7 +3709,7 @@ class ForgotPasswordPageComponent {
3659
3709
  </div>
3660
3710
  `, isInline: true, dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "browserUrl", "routerLink"] }, { kind: "directive", type: FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "variant", "rounded", "raised", "fluid", "disabled", "loading", "loadingIcon", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "directive", type: InputTextDirective, selector: "[fInputText]", inputs: ["invalid", "touched", "variant", "size", "fluid"] }, { kind: "component", type: UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill", "severity"] }, { kind: "directive", type: FormField, selector: "[formField]", inputs: ["formField"], exportAs: ["formField"] }, { kind: "component", type: AppFloatingConfigurator, selector: "app-floating-configurator" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
3661
3711
  }
3662
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: ForgotPasswordPageComponent, decorators: [{
3712
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: ForgotPasswordPageComponent, decorators: [{
3663
3713
  type: Component,
3664
3714
  args: [{
3665
3715
  selector: 'lib-forgot-password-page',
@@ -3859,8 +3909,8 @@ class SocialLoginButtonsComponent {
3859
3909
  translate(key, vars) {
3860
3910
  return this.translateAdapter?.translate(key, vars) ?? key;
3861
3911
  }
3862
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: SocialLoginButtonsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3863
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: SocialLoginButtonsComponent, isStandalone: true, selector: "lib-social-login-buttons", inputs: { returnUrl: { classPropertyName: "returnUrl", publicName: "returnUrl", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
3912
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: SocialLoginButtonsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3913
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.2.0", type: SocialLoginButtonsComponent, isStandalone: true, selector: "lib-social-login-buttons", inputs: { returnUrl: { classPropertyName: "returnUrl", publicName: "returnUrl", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
3864
3914
  @if (providers().length) {
3865
3915
  <div class="mt-6">
3866
3916
  <div class="flex items-center gap-3 mb-4">
@@ -3935,7 +3985,7 @@ class SocialLoginButtonsComponent {
3935
3985
  }
3936
3986
  `, isInline: true, dependencies: [{ kind: "directive", type: FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "variant", "rounded", "raised", "fluid", "disabled", "loading", "loadingIcon", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
3937
3987
  }
3938
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: SocialLoginButtonsComponent, decorators: [{
3988
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: SocialLoginButtonsComponent, decorators: [{
3939
3989
  type: Component,
3940
3990
  args: [{
3941
3991
  selector: 'lib-social-login-buttons',
@@ -4026,9 +4076,7 @@ class LoginPageComponent {
4026
4076
  translateAdapter = inject(TranslateService, {
4027
4077
  optional: true,
4028
4078
  });
4029
- validationConfig = inject(AUTH_VALIDATION_CONFIG, {
4030
- optional: true,
4031
- });
4079
+ emailPolicy = inject(EmailPolicyService);
4032
4080
  translate(key, vars) {
4033
4081
  return this.translateAdapter?.translate(key, vars) ?? key;
4034
4082
  }
@@ -4050,49 +4098,19 @@ class LoginPageComponent {
4050
4098
  rememberMe: true,
4051
4099
  }, /* @ts-ignore */
4052
4100
  ...(ngDevMode ? [{ debugName: "loginFormModel" }] : /* istanbul ignore next */ []));
4053
- emailErrorMessage = computed(() => this.validationConfig?.email?.message ??
4054
- this.translate('shared.invalid.email'), /* @ts-ignore */
4055
- ...(ngDevMode ? [{ debugName: "emailErrorMessage" }] : /* istanbul ignore next */ []));
4056
- passwordMinLength = computed(() => this.validationConfig?.password?.minLength ?? 8, /* @ts-ignore */
4057
- ...(ngDevMode ? [{ debugName: "passwordMinLength" }] : /* istanbul ignore next */ []));
4058
- passwordErrorMessage = computed(() => this.validationConfig?.password?.message ??
4059
- this.translate('auth.validation.password.min.length', {
4060
- min: this.passwordMinLength(),
4061
- }), /* @ts-ignore */
4062
- ...(ngDevMode ? [{ debugName: "passwordErrorMessage" }] : /* istanbul ignore next */ []));
4063
4101
  loginForm = form(this.loginFormModel, (f) => {
4064
4102
  required(f.email, {
4065
4103
  message: this.translate('auth.validation.email.required'),
4066
4104
  });
4067
- email(f.email, { message: this.emailErrorMessage() });
4068
4105
  required(f.password, {
4069
4106
  message: this.translate('auth.validation.password.required'),
4070
4107
  });
4071
- minLength(f.password, this.passwordMinLength(), {
4072
- message: this.passwordErrorMessage(),
4073
- });
4074
4108
  });
4075
- emailValidationError = computed(() => {
4076
- const email = this.loginFormModel().email;
4077
- if (!email)
4078
- return null;
4079
- return validateEmail(email, this.validationConfig?.email ?? undefined);
4080
- }, /* @ts-ignore */
4109
+ emailValidationError = computed(() => this.emailPolicy.validate(this.loginFormModel().email), /* @ts-ignore */
4081
4110
  ...(ngDevMode ? [{ debugName: "emailValidationError" }] : /* istanbul ignore next */ []));
4082
- passwordValidationError = computed(() => {
4083
- const password = this.loginFormModel().password;
4084
- if (!password)
4085
- return null;
4086
- if (!this.validationConfig?.password)
4087
- return null;
4088
- return validatePassword(password, this.validationConfig.password);
4089
- }, /* @ts-ignore */
4090
- ...(ngDevMode ? [{ debugName: "passwordValidationError" }] : /* istanbul ignore next */ []));
4091
4111
  isLoginFormValid = computed(() => {
4092
4112
  const formValid = this.loginForm().valid();
4093
- const emailError = this.emailValidationError();
4094
- const passwordError = this.passwordValidationError();
4095
- return formValid && !emailError && !passwordError;
4113
+ return formValid && !this.emailValidationError();
4096
4114
  }, /* @ts-ignore */
4097
4115
  ...(ngDevMode ? [{ debugName: "isLoginFormValid" }] : /* istanbul ignore next */ []));
4098
4116
  selectionFormModel = signal({
@@ -4196,7 +4214,7 @@ class LoginPageComponent {
4196
4214
  severity: 'success',
4197
4215
  summary: this.translate('shared.success'),
4198
4216
  detail: response.messageKey
4199
- ? this.translate(response.messageKey)
4217
+ ? this.translate(response.messageKey, response.messageVariables)
4200
4218
  : (response.message ?? this.translate('auth.login.success')),
4201
4219
  });
4202
4220
  this.authState.navigateAfterLogin(this.returnUrl());
@@ -4206,7 +4224,7 @@ class LoginPageComponent {
4206
4224
  this.isLoading.set(false);
4207
4225
  const messageKey = error?.error?.messageKey;
4208
4226
  const detail = messageKey
4209
- ? this.translate(messageKey)
4227
+ ? this.translate(messageKey, error?.error?.messageVariables)
4210
4228
  : error?.error?.message;
4211
4229
  this.messageService.add({
4212
4230
  severity: 'error',
@@ -4268,7 +4286,7 @@ class LoginPageComponent {
4268
4286
  severity: 'success',
4269
4287
  summary: this.translate('shared.success'),
4270
4288
  detail: response.messageKey
4271
- ? this.translate(response.messageKey)
4289
+ ? this.translate(response.messageKey, response.messageVariables)
4272
4290
  : response.message,
4273
4291
  });
4274
4292
  this.authState.navigateAfterLogin(this.returnUrl());
@@ -4305,7 +4323,7 @@ class LoginPageComponent {
4305
4323
  severity: 'success',
4306
4324
  summary: this.translate('shared.success'),
4307
4325
  detail: response.messageKey
4308
- ? this.translate(response.messageKey)
4326
+ ? this.translate(response.messageKey, response.messageVariables)
4309
4327
  : response.message,
4310
4328
  });
4311
4329
  },
@@ -4343,8 +4361,8 @@ class LoginPageComponent {
4343
4361
  }
4344
4362
  }
4345
4363
  }
4346
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: LoginPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4347
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: LoginPageComponent, isStandalone: true, selector: "lib-login-page", inputs: { returnUrl: { classPropertyName: "returnUrl", publicName: "returnUrl", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
4364
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: LoginPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4365
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.2.0", type: LoginPageComponent, isStandalone: true, selector: "lib-login-page", inputs: { returnUrl: { classPropertyName: "returnUrl", publicName: "returnUrl", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
4348
4366
  <app-floating-configurator />
4349
4367
  <div
4350
4368
  class="bg-surface-ground flex items-center justify-center min-h-screen"
@@ -4427,7 +4445,7 @@ class LoginPageComponent {
4427
4445
  [formField]="loginForm.email"
4428
4446
  autocomplete="email"
4429
4447
  />
4430
- @if (emailValidationError() && loginFormModel().email) {
4448
+ @if (emailValidationError()) {
4431
4449
  <small class="text-danger block mt-1">{{
4432
4450
  emailValidationError()
4433
4451
  }}</small>
@@ -4448,11 +4466,6 @@ class LoginPageComponent {
4448
4466
  [formField]="loginForm.password"
4449
4467
  autocomplete="current-password"
4450
4468
  />
4451
- @if (passwordValidationError() && loginFormModel().password) {
4452
- <small class="text-danger block mt-1">{{
4453
- passwordValidationError()
4454
- }}</small>
4455
- }
4456
4469
  </div>
4457
4470
 
4458
4471
  <div
@@ -4617,7 +4630,7 @@ class LoginPageComponent {
4617
4630
  </div>
4618
4631
  `, isInline: true, dependencies: [{ kind: "component", type: CheckboxComponent, selector: "f-checkbox", inputs: ["label", "binary", "disabled", "readonly", "inputId", "invalid", "indeterminate", "variant", "size", "touched", "styleClass", "style", "checked"], outputs: ["onChange", "onBlur", "touch", "checkedChange"] }, { kind: "directive", type: FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "variant", "rounded", "raised", "fluid", "disabled", "loading", "loadingIcon", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "directive", type: InputTextDirective, selector: "[fInputText]", inputs: ["invalid", "touched", "variant", "size", "fluid"] }, { kind: "component", type: PasswordComponent, selector: "f-password", inputs: ["toggleMask", "feedback", "disabled", "placeholder", "inputId", "invalid", "touched", "inputStyleClass", "styleClass", "style", "ariaDescribedby", "autocomplete", "variant", "size", "fluid", "appendTo", "promptLabel", "weakLabel", "mediumLabel", "strongLabel", "mediumRegex", "strongRegex"], outputs: ["onBlur", "onFocus"] }, { kind: "component", type: SelectComponent, selector: "f-select", inputs: ["options", "optionLabel", "optionValue", "placeholder", "disabled", "filter", "filterBy", "filterMatchMode", "filterLocale", "filterPlaceholder", "resetFilterOnHide", "autofocusFilter", "emptyMessage", "emptyFilterMessage", "showClear", "loading", "loadingIcon", "dropdownIcon", "clearIcon", "inputId", "invalid", "touched", "styleClass", "style", "appendTo", "editable", "readonly", "autofocus", "checkmark", "group", "optionGroupLabel", "optionGroupChildren", "virtualScroll", "virtualScrollItemSize", "lazy", "selectedObject"], outputs: ["onFilter", "onChange", "onShow", "onHide", "onBlur", "onFocus", "onClear", "onLazyLoad"] }, { kind: "component", type: UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill", "severity"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "browserUrl", "routerLink"] }, { kind: "directive", type: FormField, selector: "[formField]", inputs: ["formField"], exportAs: ["formField"] }, { kind: "component", type: AppFloatingConfigurator, selector: "app-floating-configurator" }, { kind: "component", type: SocialLoginButtonsComponent, selector: "lib-social-login-buttons", inputs: ["returnUrl"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
4619
4632
  }
4620
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: LoginPageComponent, decorators: [{
4633
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: LoginPageComponent, decorators: [{
4621
4634
  type: Component,
4622
4635
  args: [{
4623
4636
  selector: 'lib-login-page',
@@ -4717,7 +4730,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImpor
4717
4730
  [formField]="loginForm.email"
4718
4731
  autocomplete="email"
4719
4732
  />
4720
- @if (emailValidationError() && loginFormModel().email) {
4733
+ @if (emailValidationError()) {
4721
4734
  <small class="text-danger block mt-1">{{
4722
4735
  emailValidationError()
4723
4736
  }}</small>
@@ -4738,11 +4751,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImpor
4738
4751
  [formField]="loginForm.password"
4739
4752
  autocomplete="current-password"
4740
4753
  />
4741
- @if (passwordValidationError() && loginFormModel().password) {
4742
- <small class="text-danger block mt-1">{{
4743
- passwordValidationError()
4744
- }}</small>
4745
- }
4746
4754
  </div>
4747
4755
 
4748
4756
  <div
@@ -4914,6 +4922,10 @@ var loginPage_component = /*#__PURE__*/Object.freeze({
4914
4922
  LoginPageComponent: LoginPageComponent
4915
4923
  });
4916
4924
 
4925
+ function sortByOrder(items) {
4926
+ return [...items].sort((a, b) => (a.order ?? 100) - (b.order ?? 100));
4927
+ }
4928
+
4917
4929
  class ProfilePageComponent {
4918
4930
  destroyRef = inject(DestroyRef);
4919
4931
  appConfig = inject(APP_CONFIG);
@@ -4921,6 +4933,7 @@ class ProfilePageComponent {
4921
4933
  authState = inject(AuthStateService);
4922
4934
  userService = inject(UserApiService);
4923
4935
  authApiService = inject(AuthApiService);
4936
+ passwordPolicy = inject(PasswordPolicyService);
4924
4937
  fileUrlService = inject(FileUrlService);
4925
4938
  fileProvider = inject(FILE_PROVIDER, { optional: true });
4926
4939
  permissionProvider = inject(PROFILE_PERMISSION_PROVIDER, {
@@ -4956,22 +4969,19 @@ class ProfilePageComponent {
4956
4969
  extraSections = computed(() => {
4957
4970
  if (!this.profileExtension?.getExtraSections)
4958
4971
  return [];
4959
- const sections = this.profileExtension.getExtraSections();
4960
- return sections.sort((a, b) => (a.order ?? 100) - (b.order ?? 100));
4972
+ return sortByOrder(this.profileExtension.getExtraSections());
4961
4973
  }, /* @ts-ignore */
4962
4974
  ...(ngDevMode ? [{ debugName: "extraSections" }] : /* istanbul ignore next */ []));
4963
4975
  editableFields = computed(() => {
4964
4976
  if (!this.profileExtension?.getExtraFields)
4965
4977
  return [];
4966
- const fields = this.profileExtension.getExtraFields();
4967
- return fields.sort((a, b) => (a.order ?? 100) - (b.order ?? 100));
4978
+ return sortByOrder(this.profileExtension.getExtraFields());
4968
4979
  }, /* @ts-ignore */
4969
4980
  ...(ngDevMode ? [{ debugName: "editableFields" }] : /* istanbul ignore next */ []));
4970
4981
  viewOnlyFields = computed(() => {
4971
4982
  if (!this.userFormExtension?.getExtraFields)
4972
4983
  return [];
4973
- const fields = this.userFormExtension.getExtraFields();
4974
- return fields.sort((a, b) => (a.order ?? 100) - (b.order ?? 100));
4984
+ return sortByOrder(this.userFormExtension.getExtraFields());
4975
4985
  }, /* @ts-ignore */
4976
4986
  ...(ngDevMode ? [{ debugName: "viewOnlyFields" }] : /* istanbul ignore next */ []));
4977
4987
  hasExtraContent = computed(() => this.extraSections().length > 0 ||
@@ -5115,18 +5125,21 @@ class ProfilePageComponent {
5115
5125
  ...(ngDevMode ? [{ debugName: "passwordModel" }] : /* istanbul ignore next */ []));
5116
5126
  passwordForm = form(this.passwordModel, (f) => {
5117
5127
  required(f.currentPassword, {
5118
- message: this.translate('profile.current.password.required'),
5128
+ message: this.translate('auth.password.change.current.required'),
5119
5129
  });
5120
5130
  required(f.newPassword, {
5121
- message: this.translate('profile.new.password.required'),
5131
+ message: this.translate('auth.validation.password.required'),
5122
5132
  });
5123
5133
  });
5124
5134
  isPasswordLoading = signal(false, /* @ts-ignore */
5125
5135
  ...(ngDevMode ? [{ debugName: "isPasswordLoading" }] : /* istanbul ignore next */ []));
5136
+ newPasswordError = computed(() => this.passwordPolicy.validate(this.passwordModel().newPassword), /* @ts-ignore */
5137
+ ...(ngDevMode ? [{ debugName: "newPasswordError" }] : /* istanbul ignore next */ []));
5126
5138
  isPasswordFormValid = computed(() => {
5127
5139
  const model = this.passwordModel();
5128
5140
  return (model.currentPassword.length > 0 &&
5129
- model.newPassword.length >= 6 &&
5141
+ model.newPassword.length > 0 &&
5142
+ !this.newPasswordError() &&
5130
5143
  model.newPassword === model.confirmPassword);
5131
5144
  }, /* @ts-ignore */
5132
5145
  ...(ngDevMode ? [{ debugName: "isPasswordFormValid" }] : /* istanbul ignore next */ []));
@@ -5353,8 +5366,8 @@ class ProfilePageComponent {
5353
5366
  error: () => { },
5354
5367
  });
5355
5368
  }
5356
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: ProfilePageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5357
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: ProfilePageComponent, isStandalone: true, selector: "lib-profile-page", ngImport: i0, template: `
5369
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: ProfilePageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5370
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.2.0", type: ProfilePageComponent, isStandalone: true, selector: "lib-profile-page", ngImport: i0, template: `
5358
5371
  <div class="mb-4 md:mb-6">
5359
5372
  <h1 class="text-2xl font-bold text-color mb-2">
5360
5373
  {{ 'profile.title' | translate }}
@@ -5697,10 +5710,13 @@ class ProfilePageComponent {
5697
5710
  <f-password
5698
5711
  [inputId]="'newPassword'"
5699
5712
  [formField]="passwordForm.newPassword"
5700
- [placeholder]="'shared.min.characters' | translate: { count: 6 }"
5713
+ [placeholder]="'shared.min.characters' | translate: { count: passwordPolicy.minLength }"
5701
5714
  class="w-full"
5702
5715
  autocomplete="new-password"
5703
5716
  />
5717
+ @if (newPasswordError()) {
5718
+ <small class="text-danger">{{ newPasswordError() }}</small>
5719
+ }
5704
5720
  </div>
5705
5721
 
5706
5722
  <div class="flex flex-col gap-2">
@@ -5891,7 +5907,7 @@ class ProfilePageComponent {
5891
5907
  }
5892
5908
  `, isInline: true, dependencies: [{ kind: "component", type: AvatarComponent, selector: "f-avatar", inputs: ["label", "icon", "image", "shape", "size", "color", "styleClass", "ariaLabel", "ariaLabelledBy"], outputs: ["onImageError"] }, { kind: "component", type: CheckboxComponent, selector: "f-checkbox", inputs: ["label", "binary", "disabled", "readonly", "inputId", "invalid", "indeterminate", "variant", "size", "touched", "styleClass", "style", "checked"], outputs: ["onChange", "onBlur", "touch", "checkedChange"] }, { kind: "directive", type: FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "variant", "rounded", "raised", "fluid", "disabled", "loading", "loadingIcon", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "directive", type: InputTextDirective, selector: "[fInputText]", inputs: ["invalid", "touched", "variant", "size", "fluid"] }, { kind: "component", type: PasswordComponent, selector: "f-password", inputs: ["toggleMask", "feedback", "disabled", "placeholder", "inputId", "invalid", "touched", "inputStyleClass", "styleClass", "style", "ariaDescribedby", "autocomplete", "variant", "size", "fluid", "appendTo", "promptLabel", "weakLabel", "mediumLabel", "strongLabel", "mediumRegex", "strongRegex"], outputs: ["onBlur", "onFocus"] }, { kind: "component", type: SelectComponent, selector: "f-select", inputs: ["options", "optionLabel", "optionValue", "placeholder", "disabled", "filter", "filterBy", "filterMatchMode", "filterLocale", "filterPlaceholder", "resetFilterOnHide", "autofocusFilter", "emptyMessage", "emptyFilterMessage", "showClear", "loading", "loadingIcon", "dropdownIcon", "clearIcon", "inputId", "invalid", "touched", "styleClass", "style", "appendTo", "editable", "readonly", "autofocus", "checkmark", "group", "optionGroupLabel", "optionGroupChildren", "virtualScroll", "virtualScrollItemSize", "lazy", "selectedObject"], outputs: ["onFilter", "onChange", "onShow", "onHide", "onBlur", "onFocus", "onClear", "onLazyLoad"] }, { kind: "component", type: SkeletonComponent, selector: "f-skeleton", inputs: ["width", "height", "size", "borderRadius", "shape", "animation", "styleClass"] }, { kind: "component", type: TagComponent, selector: "f-tag", inputs: ["value", "severity", "icon", "rounded", "color", "styleClass", "style"] }, { kind: "directive", type: TextareaDirective, selector: "[fTextarea]", inputs: ["invalid", "touched", "variant", "fluid", "autoResize"], outputs: ["onResize"] }, { kind: "component", type: UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill", "severity"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]):not([formArray]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: FormField, selector: "[formField]", inputs: ["formField"], exportAs: ["formField"] }, { kind: "component", type: FileUploaderComponent, selector: "lib-file-uploader", inputs: ["uploadFile", "uploadMultipleFiles", "acceptTypes", "multiple", "maxFiles", "maxSizeMb", "uploadOptions", "disabled", "showPreview", "autoUpload"], outputs: ["fileUploaded", "filesUploaded", "onError", "fileSelected"] }, { kind: "directive", type: HasPermissionDirective, selector: "[hasPermission]", inputs: ["hasPermission"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
5893
5909
  }
5894
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: ProfilePageComponent, decorators: [{
5910
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: ProfilePageComponent, decorators: [{
5895
5911
  type: Component,
5896
5912
  args: [{
5897
5913
  selector: 'lib-profile-page',
@@ -6257,10 +6273,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImpor
6257
6273
  <f-password
6258
6274
  [inputId]="'newPassword'"
6259
6275
  [formField]="passwordForm.newPassword"
6260
- [placeholder]="'shared.min.characters' | translate: { count: 6 }"
6276
+ [placeholder]="'shared.min.characters' | translate: { count: passwordPolicy.minLength }"
6261
6277
  class="w-full"
6262
6278
  autocomplete="new-password"
6263
6279
  />
6280
+ @if (newPasswordError()) {
6281
+ <small class="text-danger">{{ newPasswordError() }}</small>
6282
+ }
6264
6283
  </div>
6265
6284
 
6266
6285
  <div class="flex flex-col gap-2">
@@ -6466,9 +6485,8 @@ class RegisterPageComponent {
6466
6485
  authState = inject(AuthStateService);
6467
6486
  route = inject(ActivatedRoute);
6468
6487
  router = inject(Router);
6469
- validationConfig = inject(AUTH_VALIDATION_CONFIG, {
6470
- optional: true,
6471
- });
6488
+ emailPolicy = inject(EmailPolicyService);
6489
+ passwordPolicy = inject(PasswordPolicyService);
6472
6490
  registrationExtension = inject(AUTH_REGISTRATION_EXTENSION, {
6473
6491
  optional: true,
6474
6492
  });
@@ -6497,8 +6515,7 @@ class RegisterPageComponent {
6497
6515
  extraFields = computed(() => {
6498
6516
  if (!this.registrationExtension)
6499
6517
  return [];
6500
- const fields = this.registrationExtension.getExtraFields();
6501
- return fields.sort((a, b) => (a.order ?? 100) - (b.order ?? 100));
6518
+ return sortByOrder(this.registrationExtension.getExtraFields());
6502
6519
  }, /* @ts-ignore */
6503
6520
  ...(ngDevMode ? [{ debugName: "extraFields" }] : /* istanbul ignore next */ []));
6504
6521
  extraFieldsModel = signal(this.extraFields().reduce((acc, field) => {
@@ -6508,16 +6525,6 @@ class RegisterPageComponent {
6508
6525
  return acc;
6509
6526
  }, {}), /* @ts-ignore */
6510
6527
  ...(ngDevMode ? [{ debugName: "extraFieldsModel" }] : /* istanbul ignore next */ []));
6511
- emailErrorMessage = computed(() => this.validationConfig?.email?.message ??
6512
- this.translate('shared.invalid.email'), /* @ts-ignore */
6513
- ...(ngDevMode ? [{ debugName: "emailErrorMessage" }] : /* istanbul ignore next */ []));
6514
- passwordMinLength = computed(() => this.validationConfig?.password?.minLength ?? 8, /* @ts-ignore */
6515
- ...(ngDevMode ? [{ debugName: "passwordMinLength" }] : /* istanbul ignore next */ []));
6516
- passwordErrorMessage = computed(() => this.validationConfig?.password?.message ??
6517
- this.translate('auth.validation.password.min.length', {
6518
- min: this.passwordMinLength(),
6519
- }), /* @ts-ignore */
6520
- ...(ngDevMode ? [{ debugName: "passwordErrorMessage" }] : /* istanbul ignore next */ []));
6521
6528
  userFormModel = signal({
6522
6529
  name: '',
6523
6530
  email: '',
@@ -6536,13 +6543,9 @@ class RegisterPageComponent {
6536
6543
  required(f.email, {
6537
6544
  message: this.translate('auth.validation.email.required'),
6538
6545
  });
6539
- email(f.email, { message: this.emailErrorMessage() });
6540
6546
  required(f.password, {
6541
6547
  message: this.translate('auth.validation.password.required'),
6542
6548
  });
6543
- minLength(f.password, this.passwordMinLength(), {
6544
- message: this.passwordErrorMessage(),
6545
- });
6546
6549
  required(f.confirmPassword, {
6547
6550
  message: this.translate('auth.validation.confirm.password.required'),
6548
6551
  });
@@ -6557,21 +6560,9 @@ class RegisterPageComponent {
6557
6560
  }, /* @ts-ignore */
6558
6561
  ...(ngDevMode ? [{ debugName: "companyFormModel" }] : /* istanbul ignore next */ []));
6559
6562
  companyForm = form(this.companyFormModel);
6560
- emailValidationError = computed(() => {
6561
- const email = this.userFormModel().email;
6562
- if (!email)
6563
- return null;
6564
- return validateEmail(email, this.validationConfig?.email ?? undefined);
6565
- }, /* @ts-ignore */
6563
+ emailValidationError = computed(() => this.emailPolicy.validate(this.userFormModel().email), /* @ts-ignore */
6566
6564
  ...(ngDevMode ? [{ debugName: "emailValidationError" }] : /* istanbul ignore next */ []));
6567
- passwordValidationError = computed(() => {
6568
- const password = this.userFormModel().password;
6569
- if (!password)
6570
- return null;
6571
- if (!this.validationConfig?.password)
6572
- return null;
6573
- return validatePassword(password, this.validationConfig.password);
6574
- }, /* @ts-ignore */
6565
+ passwordValidationError = computed(() => this.passwordPolicy.validate(this.userFormModel().password), /* @ts-ignore */
6575
6566
  ...(ngDevMode ? [{ debugName: "passwordValidationError" }] : /* istanbul ignore next */ []));
6576
6567
  extraFieldsValidationError = computed(() => {
6577
6568
  if (!this.registrationExtension?.validateExtraFields)
@@ -6592,7 +6583,7 @@ class RegisterPageComponent {
6592
6583
  const userValid = userModel.name.trim().length >= 2 &&
6593
6584
  userModel.email.includes('@') &&
6594
6585
  !emailError &&
6595
- userModel.password.length >= this.passwordMinLength() &&
6586
+ userModel.password.length > 0 &&
6596
6587
  !passwordError &&
6597
6588
  userModel.confirmPassword.length > 0 &&
6598
6589
  this.passwordsMatch() &&
@@ -6681,9 +6672,8 @@ class RegisterPageComponent {
6681
6672
  }
6682
6673
  });
6683
6674
  }
6684
- onCreateCompanyToggle() {
6685
- const currentValue = this.companyFormModel().createNewCompany;
6686
- if (!currentValue) {
6675
+ onCreateCompanyToggle(createNew) {
6676
+ if (createNew) {
6687
6677
  this.companyFormModel.update((model) => ({
6688
6678
  ...model,
6689
6679
  createNewCompany: true,
@@ -6755,7 +6745,7 @@ class RegisterPageComponent {
6755
6745
  severity: 'success',
6756
6746
  summary: this.translate('shared.success'),
6757
6747
  detail: response.messageKey
6758
- ? this.translate(response.messageKey)
6748
+ ? this.translate(response.messageKey, response.messageVariables)
6759
6749
  : response.message,
6760
6750
  life: 5000,
6761
6751
  });
@@ -6773,7 +6763,7 @@ class RegisterPageComponent {
6773
6763
  severity: 'success',
6774
6764
  summary: this.translate('shared.success'),
6775
6765
  detail: response.messageKey
6776
- ? this.translate(response.messageKey)
6766
+ ? this.translate(response.messageKey, response.messageVariables)
6777
6767
  : response.message,
6778
6768
  });
6779
6769
  this.authState.navigateAfterLogin(this.returnUrl());
@@ -6784,8 +6774,8 @@ class RegisterPageComponent {
6784
6774
  },
6785
6775
  });
6786
6776
  }
6787
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: RegisterPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6788
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: RegisterPageComponent, isStandalone: true, selector: "lib-register-page", inputs: { returnUrl: { classPropertyName: "returnUrl", publicName: "returnUrl", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
6777
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: RegisterPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6778
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.2.0", type: RegisterPageComponent, isStandalone: true, selector: "lib-register-page", inputs: { returnUrl: { classPropertyName: "returnUrl", publicName: "returnUrl", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
6789
6779
  <app-floating-configurator />
6790
6780
  <div
6791
6781
  class="bg-surface-ground flex items-center justify-center min-h-screen py-8"
@@ -6851,7 +6841,7 @@ class RegisterPageComponent {
6851
6841
  class="w-full"
6852
6842
  autocomplete="email"
6853
6843
  />
6854
- @if (emailValidationError() && userFormModel().email) {
6844
+ @if (emailValidationError()) {
6855
6845
  <small class="text-danger block mt-1">{{
6856
6846
  emailValidationError()
6857
6847
  }}</small>
@@ -6868,12 +6858,12 @@ class RegisterPageComponent {
6868
6858
  [formField]="userForm.password"
6869
6859
  [placeholder]="
6870
6860
  'shared.min.characters'
6871
- | translate: { count: passwordMinLength() }
6861
+ | translate: { count: passwordPolicy.minLength }
6872
6862
  "
6873
6863
  class="w-full"
6874
6864
  autocomplete="new-password"
6875
6865
  />
6876
- @if (passwordValidationError() && userFormModel().password) {
6866
+ @if (passwordValidationError()) {
6877
6867
  <small class="text-danger block mt-1">{{
6878
6868
  passwordValidationError()
6879
6869
  }}</small>
@@ -7098,7 +7088,7 @@ class RegisterPageComponent {
7098
7088
  <f-checkbox
7099
7089
  [formField]="companyForm.createNewCompany"
7100
7090
  [label]="'auth.register.create.new.company' | translate"
7101
- (click)="onCreateCompanyToggle()"
7091
+ (onChange)="onCreateCompanyToggle($event.checked)"
7102
7092
  />
7103
7093
  </div>
7104
7094
  }
@@ -7253,7 +7243,7 @@ class RegisterPageComponent {
7253
7243
  </div>
7254
7244
  `, isInline: true, dependencies: [{ kind: "component", type: CheckboxComponent, selector: "f-checkbox", inputs: ["label", "binary", "disabled", "readonly", "inputId", "invalid", "indeterminate", "variant", "size", "touched", "styleClass", "style", "checked"], outputs: ["onChange", "onBlur", "touch", "checkedChange"] }, { kind: "directive", type: FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "variant", "rounded", "raised", "fluid", "disabled", "loading", "loadingIcon", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "directive", type: InputTextDirective, selector: "[fInputText]", inputs: ["invalid", "touched", "variant", "size", "fluid"] }, { kind: "component", type: PasswordComponent, selector: "f-password", inputs: ["toggleMask", "feedback", "disabled", "placeholder", "inputId", "invalid", "touched", "inputStyleClass", "styleClass", "style", "ariaDescribedby", "autocomplete", "variant", "size", "fluid", "appendTo", "promptLabel", "weakLabel", "mediumLabel", "strongLabel", "mediumRegex", "strongRegex"], outputs: ["onBlur", "onFocus"] }, { kind: "component", type: SelectComponent, selector: "f-select", inputs: ["options", "optionLabel", "optionValue", "placeholder", "disabled", "filter", "filterBy", "filterMatchMode", "filterLocale", "filterPlaceholder", "resetFilterOnHide", "autofocusFilter", "emptyMessage", "emptyFilterMessage", "showClear", "loading", "loadingIcon", "dropdownIcon", "clearIcon", "inputId", "invalid", "touched", "styleClass", "style", "appendTo", "editable", "readonly", "autofocus", "checkmark", "group", "optionGroupLabel", "optionGroupChildren", "virtualScroll", "virtualScrollItemSize", "lazy", "selectedObject"], outputs: ["onFilter", "onChange", "onShow", "onHide", "onBlur", "onFocus", "onClear", "onLazyLoad"] }, { kind: "directive", type: TextareaDirective, selector: "[fTextarea]", inputs: ["invalid", "touched", "variant", "fluid", "autoResize"], outputs: ["onResize"] }, { kind: "component", type: UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill", "severity"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]):not([formArray]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "browserUrl", "routerLink"] }, { kind: "directive", type: FormField, selector: "[formField]", inputs: ["formField"], exportAs: ["formField"] }, { kind: "component", type: AppFloatingConfigurator, selector: "app-floating-configurator" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
7255
7245
  }
7256
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: RegisterPageComponent, decorators: [{
7246
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: RegisterPageComponent, decorators: [{
7257
7247
  type: Component,
7258
7248
  args: [{
7259
7249
  selector: 'lib-register-page',
@@ -7339,7 +7329,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImpor
7339
7329
  class="w-full"
7340
7330
  autocomplete="email"
7341
7331
  />
7342
- @if (emailValidationError() && userFormModel().email) {
7332
+ @if (emailValidationError()) {
7343
7333
  <small class="text-danger block mt-1">{{
7344
7334
  emailValidationError()
7345
7335
  }}</small>
@@ -7356,12 +7346,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImpor
7356
7346
  [formField]="userForm.password"
7357
7347
  [placeholder]="
7358
7348
  'shared.min.characters'
7359
- | translate: { count: passwordMinLength() }
7349
+ | translate: { count: passwordPolicy.minLength }
7360
7350
  "
7361
7351
  class="w-full"
7362
7352
  autocomplete="new-password"
7363
7353
  />
7364
- @if (passwordValidationError() && userFormModel().password) {
7354
+ @if (passwordValidationError()) {
7365
7355
  <small class="text-danger block mt-1">{{
7366
7356
  passwordValidationError()
7367
7357
  }}</small>
@@ -7586,7 +7576,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImpor
7586
7576
  <f-checkbox
7587
7577
  [formField]="companyForm.createNewCompany"
7588
7578
  [label]="'auth.register.create.new.company' | translate"
7589
- (click)="onCreateCompanyToggle()"
7579
+ (onChange)="onCreateCompanyToggle($event.checked)"
7590
7580
  />
7591
7581
  </div>
7592
7582
  }
@@ -7753,6 +7743,7 @@ class ResetPasswordPageComponent {
7753
7743
  route = inject(ActivatedRoute);
7754
7744
  messageService = inject(MessageService);
7755
7745
  authApi = inject(AuthApiService);
7746
+ passwordPolicy = inject(PasswordPolicyService);
7756
7747
  translateAdapter = inject(TranslateService, {
7757
7748
  optional: true,
7758
7749
  });
@@ -7775,11 +7766,6 @@ class ResetPasswordPageComponent {
7775
7766
  required(f.newPassword, {
7776
7767
  message: this.translate('auth.validation.password.required'),
7777
7768
  });
7778
- minLength(f.newPassword, 8, {
7779
- message: this.translate('auth.validation.password.min.length', {
7780
- min: 8,
7781
- }),
7782
- });
7783
7769
  required(f.confirmPassword, {
7784
7770
  message: this.translate('auth.validation.confirm.password.required'),
7785
7771
  });
@@ -7790,7 +7776,11 @@ class ResetPasswordPageComponent {
7790
7776
  model.newPassword !== model.confirmPassword);
7791
7777
  }, /* @ts-ignore */
7792
7778
  ...(ngDevMode ? [{ debugName: "passwordMismatch" }] : /* istanbul ignore next */ []));
7793
- canSubmit = computed(() => this.resetForm().valid() && !this.passwordMismatch(), /* @ts-ignore */
7779
+ passwordValidationError = computed(() => this.passwordPolicy.validate(this.formModel().newPassword), /* @ts-ignore */
7780
+ ...(ngDevMode ? [{ debugName: "passwordValidationError" }] : /* istanbul ignore next */ []));
7781
+ canSubmit = computed(() => this.resetForm().valid() &&
7782
+ !this.passwordValidationError() &&
7783
+ !this.passwordMismatch(), /* @ts-ignore */
7794
7784
  ...(ngDevMode ? [{ debugName: "canSubmit" }] : /* istanbul ignore next */ []));
7795
7785
  constructor() {
7796
7786
  effect(() => {
@@ -7821,13 +7811,12 @@ class ResetPasswordPageComponent {
7821
7811
  .pipe(takeUntilDestroyed(this.destroyRef), finalize(() => this.isLoading.set(false)))
7822
7812
  .subscribe({
7823
7813
  next: (response) => {
7824
- const r = response;
7825
7814
  this.messageService.add({
7826
7815
  severity: 'success',
7827
7816
  summary: this.translate('shared.success'),
7828
- detail: r?.messageKey
7829
- ? this.translate(r.messageKey, r.messageVariables)
7830
- : r?.message,
7817
+ detail: response?.messageKey
7818
+ ? this.translate(response.messageKey, response.messageVariables)
7819
+ : response?.message,
7831
7820
  });
7832
7821
  this.pageState.set('success');
7833
7822
  },
@@ -7845,8 +7834,8 @@ class ResetPasswordPageComponent {
7845
7834
  },
7846
7835
  });
7847
7836
  }
7848
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: ResetPasswordPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7849
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: ResetPasswordPageComponent, isStandalone: true, selector: "lib-reset-password-page", ngImport: i0, template: `
7837
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: ResetPasswordPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7838
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.2.0", type: ResetPasswordPageComponent, isStandalone: true, selector: "lib-reset-password-page", ngImport: i0, template: `
7850
7839
  <app-floating-configurator />
7851
7840
  <div
7852
7841
  class="bg-surface-ground flex items-center justify-center min-h-screen"
@@ -7880,15 +7869,22 @@ class ResetPasswordPageComponent {
7880
7869
  >
7881
7870
  {{ 'auth.reset.password.new.password' | translate }}
7882
7871
  </label>
7883
- <f-password
7884
- [inputId]="'newPassword'"
7885
- [placeholder]="
7886
- 'auth.reset.password.new.password.placeholder' | translate
7887
- "
7888
- class="w-full mb-4"
7889
- [formField]="resetForm.newPassword"
7890
- autocomplete="new-password"
7891
- />
7872
+ <div class="mb-4">
7873
+ <f-password
7874
+ [inputId]="'newPassword'"
7875
+ [placeholder]="
7876
+ 'auth.reset.password.new.password.placeholder' | translate
7877
+ "
7878
+ class="w-full"
7879
+ [formField]="resetForm.newPassword"
7880
+ autocomplete="new-password"
7881
+ />
7882
+ @if (passwordValidationError()) {
7883
+ <small class="text-danger block mt-1">{{
7884
+ passwordValidationError()
7885
+ }}</small>
7886
+ }
7887
+ </div>
7892
7888
 
7893
7889
  <label
7894
7890
  for="confirmPassword"
@@ -7996,7 +7992,7 @@ class ResetPasswordPageComponent {
7996
7992
  </div>
7997
7993
  `, isInline: true, dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "browserUrl", "routerLink"] }, { kind: "directive", type: FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "variant", "rounded", "raised", "fluid", "disabled", "loading", "loadingIcon", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "component", type: PasswordComponent, selector: "f-password", inputs: ["toggleMask", "feedback", "disabled", "placeholder", "inputId", "invalid", "touched", "inputStyleClass", "styleClass", "style", "ariaDescribedby", "autocomplete", "variant", "size", "fluid", "appendTo", "promptLabel", "weakLabel", "mediumLabel", "strongLabel", "mediumRegex", "strongRegex"], outputs: ["onBlur", "onFocus"] }, { kind: "component", type: UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill", "severity"] }, { kind: "directive", type: FormField, selector: "[formField]", inputs: ["formField"], exportAs: ["formField"] }, { kind: "component", type: AppFloatingConfigurator, selector: "app-floating-configurator" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
7998
7994
  }
7999
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: ResetPasswordPageComponent, decorators: [{
7995
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: ResetPasswordPageComponent, decorators: [{
8000
7996
  type: Component,
8001
7997
  args: [{
8002
7998
  selector: 'lib-reset-password-page',
@@ -8043,15 +8039,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImpor
8043
8039
  >
8044
8040
  {{ 'auth.reset.password.new.password' | translate }}
8045
8041
  </label>
8046
- <f-password
8047
- [inputId]="'newPassword'"
8048
- [placeholder]="
8049
- 'auth.reset.password.new.password.placeholder' | translate
8050
- "
8051
- class="w-full mb-4"
8052
- [formField]="resetForm.newPassword"
8053
- autocomplete="new-password"
8054
- />
8042
+ <div class="mb-4">
8043
+ <f-password
8044
+ [inputId]="'newPassword'"
8045
+ [placeholder]="
8046
+ 'auth.reset.password.new.password.placeholder' | translate
8047
+ "
8048
+ class="w-full"
8049
+ [formField]="resetForm.newPassword"
8050
+ autocomplete="new-password"
8051
+ />
8052
+ @if (passwordValidationError()) {
8053
+ <small class="text-danger block mt-1">{{
8054
+ passwordValidationError()
8055
+ }}</small>
8056
+ }
8057
+ </div>
8055
8058
 
8056
8059
  <label
8057
8060
  for="confirmPassword"
@@ -8227,7 +8230,7 @@ class SocialCallbackPageComponent {
8227
8230
  severity: 'success',
8228
8231
  summary: this.translate('shared.success'),
8229
8232
  detail: response.messageKey
8230
- ? this.translate(response.messageKey)
8233
+ ? this.translate(response.messageKey, response.messageVariables)
8231
8234
  : (response.message ?? this.translate('auth.login.success')),
8232
8235
  });
8233
8236
  this.authState.navigateAfterLogin(this.returnUrl());
@@ -8253,8 +8256,8 @@ class SocialCallbackPageComponent {
8253
8256
  translate(key, vars) {
8254
8257
  return this.translateAdapter?.translate(key, vars) ?? key;
8255
8258
  }
8256
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: SocialCallbackPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
8257
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: SocialCallbackPageComponent, isStandalone: true, selector: "lib-social-callback-page", ngImport: i0, template: `
8259
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: SocialCallbackPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
8260
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.2.0", type: SocialCallbackPageComponent, isStandalone: true, selector: "lib-social-callback-page", ngImport: i0, template: `
8258
8261
  <app-floating-configurator />
8259
8262
  <div class="bg-surface-ground flex items-center justify-center min-h-screen">
8260
8263
  <div class="flex flex-col items-center gap-4 text-center px-4">
@@ -8277,7 +8280,7 @@ class SocialCallbackPageComponent {
8277
8280
  </div>
8278
8281
  `, isInline: true, dependencies: [{ kind: "directive", type: FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "variant", "rounded", "raised", "fluid", "disabled", "loading", "loadingIcon", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "component", type: UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill", "severity"] }, { kind: "component", type: AppFloatingConfigurator, selector: "app-floating-configurator" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
8279
8282
  }
8280
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: SocialCallbackPageComponent, decorators: [{
8283
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: SocialCallbackPageComponent, decorators: [{
8281
8284
  type: Component,
8282
8285
  args: [{
8283
8286
  selector: 'lib-social-callback-page',
@@ -8389,8 +8392,8 @@ class SocialConfigPageComponent {
8389
8392
  translate(key, vars) {
8390
8393
  return this.translateAdapter?.translate(key, vars) ?? key;
8391
8394
  }
8392
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: SocialConfigPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
8393
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: SocialConfigPageComponent, isStandalone: true, selector: "lib-social-config-page", providers: [MessageService], ngImport: i0, template: `
8395
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: SocialConfigPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
8396
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.2.0", type: SocialConfigPageComponent, isStandalone: true, selector: "lib-social-config-page", providers: [MessageService], ngImport: i0, template: `
8394
8397
  <div class="card">
8395
8398
  <div class="flex flex-col sm:flex-row justify-between items-start sm:items-center gap-3 mb-4">
8396
8399
  <div>
@@ -8511,7 +8514,7 @@ class SocialConfigPageComponent {
8511
8514
  </div>
8512
8515
  `, isInline: true, dependencies: [{ kind: "directive", type: FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "variant", "rounded", "raised", "fluid", "disabled", "loading", "loadingIcon", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "directive", type: InputTextDirective, selector: "[fInputText]", inputs: ["invalid", "touched", "variant", "size", "fluid"] }, { kind: "component", type: PasswordComponent, selector: "f-password", inputs: ["toggleMask", "feedback", "disabled", "placeholder", "inputId", "invalid", "touched", "inputStyleClass", "styleClass", "style", "ariaDescribedby", "autocomplete", "variant", "size", "fluid", "appendTo", "promptLabel", "weakLabel", "mediumLabel", "strongLabel", "mediumRegex", "strongRegex"], outputs: ["onBlur", "onFocus"] }, { kind: "component", type: ToggleSwitchComponent, selector: "f-toggleswitch", inputs: ["disabled", "readonly", "invalid", "ariaLabel", "trueValue", "falseValue", "inputId", "size", "tabindex", "styleClass", "style"] }, { kind: "component", type: UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill", "severity"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
8513
8516
  }
8514
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: SocialConfigPageComponent, decorators: [{
8517
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: SocialConfigPageComponent, decorators: [{
8515
8518
  type: Component,
8516
8519
  args: [{
8517
8520
  selector: 'lib-social-config-page',
@@ -8719,6 +8722,7 @@ class UserFormComponent {
8719
8722
  userService = inject(UserApiService);
8720
8723
  permissionService = inject(UserPermissionApiService);
8721
8724
  authState = inject(AuthStateService);
8725
+ passwordPolicy = inject(PasswordPolicyService);
8722
8726
  translateAdapter = inject(TranslateService, {
8723
8727
  optional: true,
8724
8728
  });
@@ -8772,9 +8776,7 @@ class UserFormComponent {
8772
8776
  extraFields = computed(() => {
8773
8777
  if (!this.userFormExtension?.getExtraFields)
8774
8778
  return [];
8775
- return this.userFormExtension
8776
- .getExtraFields()
8777
- .sort((a, b) => (a.order ?? 100) - (b.order ?? 100));
8779
+ return sortByOrder(this.userFormExtension.getExtraFields());
8778
8780
  }, /* @ts-ignore */
8779
8781
  ...(ngDevMode ? [{ debugName: "extraFields" }] : /* istanbul ignore next */ []));
8780
8782
  hasExtraFields = computed(() => this.extraFields().length > 0, /* @ts-ignore */
@@ -8832,12 +8834,14 @@ class UserFormComponent {
8832
8834
  });
8833
8835
  return injector;
8834
8836
  }
8837
+ passwordError = computed(() => this.passwordPolicy.validate(this.formModel().password), /* @ts-ignore */
8838
+ ...(ngDevMode ? [{ debugName: "passwordError" }] : /* istanbul ignore next */ []));
8835
8839
  isFormValid = computed(() => {
8836
8840
  const model = this.formModel();
8837
8841
  const isEdit = this.isEditMode();
8838
8842
  const nameValid = model.name.trim().length > 0;
8839
8843
  const emailValid = model.email.includes('@');
8840
- const passwordValid = isEdit ? true : model.password.length >= 8;
8844
+ const passwordValid = model.password ? !this.passwordError() : isEdit;
8841
8845
  return nameValid && emailValid && passwordValid;
8842
8846
  }, /* @ts-ignore */
8843
8847
  ...(ngDevMode ? [{ debugName: "isFormValid" }] : /* istanbul ignore next */ []));
@@ -9019,8 +9023,8 @@ class UserFormComponent {
9019
9023
  onCancel() {
9020
9024
  this.router.navigate(['/administration/users']);
9021
9025
  }
9022
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: UserFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9023
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: UserFormComponent, isStandalone: true, selector: "lib-user-form", ngImport: i0, template: `
9026
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: UserFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9027
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.2.0", type: UserFormComponent, isStandalone: true, selector: "lib-user-form", ngImport: i0, template: `
9024
9028
  <f-card>
9025
9029
  <ng-template #header>
9026
9030
  <div class="flex justify-between items-center p-4">
@@ -9080,6 +9084,9 @@ class UserFormComponent {
9080
9084
  "
9081
9085
  autocomplete="new-password"
9082
9086
  />
9087
+ @if (passwordError()) {
9088
+ <small class="text-danger">{{ passwordError() }}</small>
9089
+ }
9083
9090
  </div>
9084
9091
 
9085
9092
  <div class="flex flex-col gap-2">
@@ -9315,7 +9322,7 @@ class UserFormComponent {
9315
9322
  </f-card>
9316
9323
  `, isInline: true, dependencies: [{ kind: "component", type: CardComponent, selector: "f-card", inputs: ["header", "subheader", "styleClass", "style"] }, { kind: "component", type: CheckboxComponent, selector: "f-checkbox", inputs: ["label", "binary", "disabled", "readonly", "inputId", "invalid", "indeterminate", "variant", "size", "touched", "styleClass", "style", "checked"], outputs: ["onChange", "onBlur", "touch", "checkedChange"] }, { kind: "directive", type: FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "variant", "rounded", "raised", "fluid", "disabled", "loading", "loadingIcon", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "directive", type: InputTextDirective, selector: "[fInputText]", inputs: ["invalid", "touched", "variant", "size", "fluid"] }, { kind: "component", type: PasswordComponent, selector: "f-password", inputs: ["toggleMask", "feedback", "disabled", "placeholder", "inputId", "invalid", "touched", "inputStyleClass", "styleClass", "style", "ariaDescribedby", "autocomplete", "variant", "size", "fluid", "appendTo", "promptLabel", "weakLabel", "mediumLabel", "strongLabel", "mediumRegex", "strongRegex"], outputs: ["onBlur", "onFocus"] }, { kind: "component", type: SelectComponent, selector: "f-select", inputs: ["options", "optionLabel", "optionValue", "placeholder", "disabled", "filter", "filterBy", "filterMatchMode", "filterLocale", "filterPlaceholder", "resetFilterOnHide", "autofocusFilter", "emptyMessage", "emptyFilterMessage", "showClear", "loading", "loadingIcon", "dropdownIcon", "clearIcon", "inputId", "invalid", "touched", "styleClass", "style", "appendTo", "editable", "readonly", "autofocus", "checkmark", "group", "optionGroupLabel", "optionGroupChildren", "virtualScroll", "virtualScrollItemSize", "lazy", "selectedObject"], outputs: ["onFilter", "onChange", "onShow", "onHide", "onBlur", "onFocus", "onClear", "onLazyLoad"] }, { kind: "component", type: SkeletonComponent, selector: "f-skeleton", inputs: ["width", "height", "size", "borderRadius", "shape", "animation", "styleClass"] }, { kind: "directive", type: TextareaDirective, selector: "[fTextarea]", inputs: ["invalid", "touched", "variant", "fluid", "autoResize"], outputs: ["onResize"] }, { kind: "component", type: UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill", "severity"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]):not([formArray]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: FormField, selector: "[formField]", inputs: ["formField"], exportAs: ["formField"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
9317
9324
  }
9318
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: UserFormComponent, decorators: [{
9325
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: UserFormComponent, decorators: [{
9319
9326
  type: Component,
9320
9327
  args: [{
9321
9328
  selector: 'lib-user-form',
@@ -9395,6 +9402,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImpor
9395
9402
  "
9396
9403
  autocomplete="new-password"
9397
9404
  />
9405
+ @if (passwordError()) {
9406
+ <small class="text-danger">{{ passwordError() }}</small>
9407
+ }
9398
9408
  </div>
9399
9409
 
9400
9410
  <div class="flex flex-col gap-2">
@@ -9744,8 +9754,8 @@ class UserBranchPermissionDialogComponent {
9744
9754
  onClose() {
9745
9755
  this.closed.emit();
9746
9756
  }
9747
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: UserBranchPermissionDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9748
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: UserBranchPermissionDialogComponent, isStandalone: true, selector: "lib-user-branch-permission-dialog", inputs: { visible: { classPropertyName: "visible", publicName: "visible", isSignal: true, isRequired: true, transformFunction: null }, user: { classPropertyName: "user", publicName: "user", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { closed: "closed", permissionsChanged: "permissionsChanged" }, ngImport: i0, template: `
9757
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: UserBranchPermissionDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9758
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.2.0", type: UserBranchPermissionDialogComponent, isStandalone: true, selector: "lib-user-branch-permission-dialog", inputs: { visible: { classPropertyName: "visible", publicName: "visible", isSignal: true, isRequired: true, transformFunction: null }, user: { classPropertyName: "user", publicName: "user", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { closed: "closed", permissionsChanged: "permissionsChanged" }, ngImport: i0, template: `
9749
9759
  <f-dialog
9750
9760
  [visible]="visible()"
9751
9761
  [modal]="true"
@@ -9834,7 +9844,7 @@ class UserBranchPermissionDialogComponent {
9834
9844
  </f-dialog>
9835
9845
  `, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: CheckboxComponent, selector: "f-checkbox", inputs: ["label", "binary", "disabled", "readonly", "inputId", "invalid", "indeterminate", "variant", "size", "touched", "styleClass", "style", "checked"], outputs: ["onChange", "onBlur", "touch", "checkedChange"] }, { kind: "component", type: DialogComponent, selector: "f-dialog", inputs: ["header", "visible", "modal", "closable", "closeOnEscape", "dismissableMask", "resizable", "draggable", "maximizable", "blockScroll", "returnFocusOnClose", "position", "style", "styleClass", "breakpoints"], outputs: ["visibleChange", "onShow", "onHide", "onMaximize"] }, { kind: "directive", type: FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "variant", "rounded", "raised", "fluid", "disabled", "loading", "loadingIcon", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "component", type: ProgressSpinnerComponent, selector: "f-progressspinner", inputs: ["size", "strokeWidth", "animationDuration", "styleClass", "ariaLabel"] }, { kind: "component", type: SelectComponent, selector: "f-select", inputs: ["options", "optionLabel", "optionValue", "placeholder", "disabled", "filter", "filterBy", "filterMatchMode", "filterLocale", "filterPlaceholder", "resetFilterOnHide", "autofocusFilter", "emptyMessage", "emptyFilterMessage", "showClear", "loading", "loadingIcon", "dropdownIcon", "clearIcon", "inputId", "invalid", "touched", "styleClass", "style", "appendTo", "editable", "readonly", "autofocus", "checkmark", "group", "optionGroupLabel", "optionGroupChildren", "virtualScroll", "virtualScrollItemSize", "lazy", "selectedObject"], outputs: ["onFilter", "onChange", "onShow", "onHide", "onBlur", "onFocus", "onClear", "onLazyLoad"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
9836
9846
  }
9837
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: UserBranchPermissionDialogComponent, decorators: [{
9847
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: UserBranchPermissionDialogComponent, decorators: [{
9838
9848
  type: Component,
9839
9849
  args: [{
9840
9850
  selector: 'lib-user-branch-permission-dialog',
@@ -10035,8 +10045,8 @@ class UserCompanyPermissionDialogComponent {
10035
10045
  onClose() {
10036
10046
  this.closed.emit();
10037
10047
  }
10038
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: UserCompanyPermissionDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
10039
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: UserCompanyPermissionDialogComponent, isStandalone: true, selector: "lib-user-company-permission-dialog", inputs: { visible: { classPropertyName: "visible", publicName: "visible", isSignal: true, isRequired: true, transformFunction: null }, user: { classPropertyName: "user", publicName: "user", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { closed: "closed", permissionsChanged: "permissionsChanged" }, ngImport: i0, template: `
10048
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: UserCompanyPermissionDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
10049
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.2.0", type: UserCompanyPermissionDialogComponent, isStandalone: true, selector: "lib-user-company-permission-dialog", inputs: { visible: { classPropertyName: "visible", publicName: "visible", isSignal: true, isRequired: true, transformFunction: null }, user: { classPropertyName: "user", publicName: "user", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { closed: "closed", permissionsChanged: "permissionsChanged" }, ngImport: i0, template: `
10040
10050
  <f-dialog
10041
10051
  [visible]="visible()"
10042
10052
  [modal]="true"
@@ -10098,7 +10108,7 @@ class UserCompanyPermissionDialogComponent {
10098
10108
  </f-dialog>
10099
10109
  `, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: CheckboxComponent, selector: "f-checkbox", inputs: ["label", "binary", "disabled", "readonly", "inputId", "invalid", "indeterminate", "variant", "size", "touched", "styleClass", "style", "checked"], outputs: ["onChange", "onBlur", "touch", "checkedChange"] }, { kind: "component", type: DialogComponent, selector: "f-dialog", inputs: ["header", "visible", "modal", "closable", "closeOnEscape", "dismissableMask", "resizable", "draggable", "maximizable", "blockScroll", "returnFocusOnClose", "position", "style", "styleClass", "breakpoints"], outputs: ["visibleChange", "onShow", "onHide", "onMaximize"] }, { kind: "directive", type: FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "variant", "rounded", "raised", "fluid", "disabled", "loading", "loadingIcon", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "component", type: ProgressSpinnerComponent, selector: "f-progressspinner", inputs: ["size", "strokeWidth", "animationDuration", "styleClass", "ariaLabel"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
10100
10110
  }
10101
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: UserCompanyPermissionDialogComponent, decorators: [{
10111
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: UserCompanyPermissionDialogComponent, decorators: [{
10102
10112
  type: Component,
10103
10113
  args: [{
10104
10114
  selector: 'lib-user-company-permission-dialog',
@@ -10201,15 +10211,13 @@ class UserListComponent {
10201
10211
  extraColumns = computed(() => {
10202
10212
  if (!this.userListExtension)
10203
10213
  return [];
10204
- const columns = this.userListExtension.getExtraColumns();
10205
- return columns.sort((a, b) => (a.order ?? 100) - (b.order ?? 100));
10214
+ return sortByOrder(this.userListExtension.getExtraColumns());
10206
10215
  }, /* @ts-ignore */
10207
10216
  ...(ngDevMode ? [{ debugName: "extraColumns" }] : /* istanbul ignore next */ []));
10208
10217
  extraActions = computed(() => {
10209
10218
  if (!this.userListExtension)
10210
10219
  return [];
10211
- const actions = this.userListExtension.getExtraActions();
10212
- return actions.sort((a, b) => (a.order ?? 100) - (b.order ?? 100));
10220
+ return sortByOrder(this.userListExtension.getExtraActions());
10213
10221
  }, /* @ts-ignore */
10214
10222
  ...(ngDevMode ? [{ debugName: "extraActions" }] : /* istanbul ignore next */ []));
10215
10223
  hasUserDetailView = computed(() => !!this.userDetailConfig, /* @ts-ignore */
@@ -10319,8 +10327,8 @@ class UserListComponent {
10319
10327
  },
10320
10328
  });
10321
10329
  }
10322
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: UserListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
10323
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: UserListComponent, isStandalone: true, selector: "lib-user-list", ngImport: i0, template: `
10330
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: UserListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
10331
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.2.0", type: UserListComponent, isStandalone: true, selector: "lib-user-list", ngImport: i0, template: `
10324
10332
  <f-card>
10325
10333
  <ng-template #header>
10326
10334
  <div
@@ -10624,7 +10632,7 @@ class UserListComponent {
10624
10632
  }
10625
10633
  `, isInline: true, dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: CardComponent, selector: "f-card", inputs: ["header", "subheader", "styleClass", "style"] }, { kind: "component", type: DialogComponent, selector: "f-dialog", inputs: ["header", "visible", "modal", "closable", "closeOnEscape", "dismissableMask", "resizable", "draggable", "maximizable", "blockScroll", "returnFocusOnClose", "position", "style", "styleClass", "breakpoints"], outputs: ["visibleChange", "onShow", "onHide", "onMaximize"] }, { kind: "directive", type: FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "variant", "rounded", "raised", "fluid", "disabled", "loading", "loadingIcon", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "component", type: IconFieldComponent, selector: "f-iconfield", inputs: ["iconPosition", "styleClass"] }, { kind: "component", type: InputIconComponent, selector: "f-inputicon", inputs: ["icon", "position", "styleClass", "style"] }, { kind: "directive", type: InputTextDirective, selector: "[fInputText]", inputs: ["invalid", "touched", "variant", "size", "fluid"] }, { kind: "component", type: TableComponent, selector: "f-table", inputs: ["value", "lazy", "loading", "rows", "totalRecords", "rowHover", "dataKey", "scrollable", "scrollHeight", "paginator", "first", "rowsPerPageOptions", "showCurrentPageReport", "currentPageReportTemplate", "tableStyle", "styleClass", "globalFilterFields", "filterDelay", "responsiveLayout", "selectionMode", "sortMode", "rowExpandMode", "resizableColumns", "rowStyleClass", "virtualScroll", "virtualScrollItemSize", "sortField", "sortOrder", "multiSortMeta", "filters", "selection", "expandedRowKeys", "contextMenuSelection"], outputs: ["sortFieldChange", "sortOrderChange", "multiSortMetaChange", "filtersChange", "selectionChange", "expandedRowKeysChange", "contextMenuSelectionChange", "onLazyLoad", "onSort", "onFilter", "onRowSelect", "onRowUnselect", "onSelectAllChange", "onRowExpand", "onRowCollapse", "onColResize", "onRowContextMenu"] }, { kind: "component", type: TagComponent, selector: "f-tag", inputs: ["value", "severity", "icon", "rounded", "color", "styleClass", "style"] }, { kind: "directive", type: TooltipDirective, selector: "[fTooltip]", inputs: ["fTooltip", "tooltipPosition", "positionStyle", "tooltipStyleClass", "disabled", "tooltipEvent", "showDelay", "hideDelay", "life", "autoHide", "positionTop", "positionLeft", "escape"] }, { kind: "component", type: UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill", "severity"] }, { kind: "directive", type: HasPermissionDirective, selector: "[hasPermission]", inputs: ["hasPermission"] }, { kind: "component", type: UserCompanyPermissionDialogComponent, selector: "lib-user-company-permission-dialog", inputs: ["visible", "user"], outputs: ["closed", "permissionsChanged"] }, { kind: "component", type: UserBranchPermissionDialogComponent, selector: "lib-user-branch-permission-dialog", inputs: ["visible", "user"], outputs: ["closed", "permissionsChanged"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
10626
10634
  }
10627
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: UserListComponent, decorators: [{
10635
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: UserListComponent, decorators: [{
10628
10636
  type: Component,
10629
10637
  args: [{
10630
10638
  selector: 'lib-user-list',
@@ -11087,8 +11095,8 @@ class VerifyEmailPageComponent {
11087
11095
  this.submittedEmail.set(email);
11088
11096
  this.resendSuccess.set(true);
11089
11097
  }
11090
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: VerifyEmailPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
11091
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: VerifyEmailPageComponent, isStandalone: true, selector: "lib-verify-email-page", ngImport: i0, template: `
11098
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: VerifyEmailPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
11099
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.2.0", type: VerifyEmailPageComponent, isStandalone: true, selector: "lib-verify-email-page", ngImport: i0, template: `
11092
11100
  <app-floating-configurator />
11093
11101
  <div
11094
11102
  class="bg-surface-ground flex items-center justify-center min-h-screen"
@@ -11243,7 +11251,7 @@ class VerifyEmailPageComponent {
11243
11251
  </div>
11244
11252
  `, isInline: true, dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "browserUrl", "routerLink"] }, { kind: "directive", type: FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "variant", "rounded", "raised", "fluid", "disabled", "loading", "loadingIcon", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "directive", type: InputTextDirective, selector: "[fInputText]", inputs: ["invalid", "touched", "variant", "size", "fluid"] }, { kind: "component", type: UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill", "severity"] }, { kind: "directive", type: FormField, selector: "[formField]", inputs: ["formField"], exportAs: ["formField"] }, { kind: "component", type: AppFloatingConfigurator, selector: "app-floating-configurator" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
11245
11253
  }
11246
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: VerifyEmailPageComponent, decorators: [{
11254
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: VerifyEmailPageComponent, decorators: [{
11247
11255
  type: Component,
11248
11256
  args: [{
11249
11257
  selector: 'lib-verify-email-page',
@@ -11427,5 +11435,5 @@ var verifyEmailPage_component = /*#__PURE__*/Object.freeze({
11427
11435
  * Generated bundle index. Do not edit.
11428
11436
  */
11429
11437
 
11430
- export { ADMINISTRATION_ROUTES, AUTH_ENDPOINTS, AUTH_MESSAGES, AUTH_PROFILE_EXTENSION, AUTH_REGISTRATION_EXTENSION, AUTH_ROUTES, AUTH_USER_DETAIL_CONFIG, AUTH_USER_FORM_EXTENSION, AUTH_USER_LIST_EXTENSION, AUTH_VALIDATION_CONFIG, AdministrationPageComponent, AuthApiService, AuthCompanyApiProviderAdapter, AuthInitService, AuthLayoutApiAdapter, AuthLayoutStateAdapter, AuthStateProviderAdapter, AuthStateService, AuthUserPermissionProviderAdapter, AuthUserProviderAdapter, BranchApiService, BranchFormComponent, BranchListComponent, BranchPermittedUsersDialogComponent, CompanyApiService, CompanyFormComponent, CompanyListComponent, CompanyPermittedUsersDialogComponent, ForgotPasswordPageComponent, LoginPageComponent, PROFILE_FIELD_CONTEXT, PROFILE_ROUTES, ProfilePageComponent, REGISTRATION_FIELD_CONTEXT, RegisterPageComponent, ResetPasswordPageComponent, SOCIAL_PROVIDERS, SOCIAL_RETURN_URL_KEY, SocialAuthApiService, SocialAuthConfigApiService, SocialCallbackPageComponent, SocialConfigPageComponent, SocialLoginButtonsComponent, SocialProviderEnum, TokenRefreshStateService, USER_FORM_FIELD_CONTEXT, UserApiService, UserBranchPermissionDialogComponent, UserCompanyPermissionDialogComponent, UserFormComponent, UserListComponent, UserPermissionApiService, VerifyEmailPageComponent, authGuard, authInterceptor, companyFeatureGuard, emailFeatureGuard, guestGuard, isCompanySelectionResponse, isEmailVerificationRequired, isEndpoint, isLoginResponse, provideAuthLayoutIntegration, provideAuthProviders, signUpFeatureGuard, tokenRefreshInterceptor, validateEmail, validatePassword };
11438
+ export { ADMINISTRATION_ROUTES, AUTH_ENDPOINTS, AUTH_MESSAGES, AUTH_PROFILE_EXTENSION, AUTH_REGISTRATION_EXTENSION, AUTH_ROUTES, AUTH_USER_DETAIL_CONFIG, AUTH_USER_FORM_EXTENSION, AUTH_USER_LIST_EXTENSION, AUTH_VALIDATION_CONFIG, AdministrationPageComponent, AuthApiService, AuthCompanyApiProviderAdapter, AuthInitService, AuthLayoutApiAdapter, AuthLayoutStateAdapter, AuthStateProviderAdapter, AuthStateService, AuthUserPermissionProviderAdapter, AuthUserProviderAdapter, BranchApiService, BranchFormComponent, BranchListComponent, BranchPermittedUsersDialogComponent, CompanyApiService, CompanyFormComponent, CompanyListComponent, CompanyPermittedUsersDialogComponent, DEFAULT_PASSWORD_VALIDATION, EmailPolicyService, ForgotPasswordPageComponent, LoginPageComponent, PROFILE_FIELD_CONTEXT, PROFILE_ROUTES, PasswordPolicyService, ProfilePageComponent, REGISTRATION_FIELD_CONTEXT, RegisterPageComponent, ResetPasswordPageComponent, SOCIAL_PROVIDERS, SOCIAL_RETURN_URL_KEY, SocialAuthApiService, SocialAuthConfigApiService, SocialCallbackPageComponent, SocialConfigPageComponent, SocialLoginButtonsComponent, SocialProviderEnum, TokenRefreshStateService, USER_FORM_FIELD_CONTEXT, UserApiService, UserBranchPermissionDialogComponent, UserCompanyPermissionDialogComponent, UserFormComponent, UserListComponent, UserPermissionApiService, VerifyEmailPageComponent, authGuard, authInterceptor, companyFeatureGuard, emailFeatureGuard, guestGuard, isCompanySelectionResponse, isEmailVerificationRequired, isEndpoint, isLoginResponse, provideAuthLayoutIntegration, provideAuthProviders, resolvePasswordValidation, signUpFeatureGuard, tokenRefreshInterceptor, validateEmail, validatePassword };
11431
11439
  //# sourceMappingURL=flusys-ng-auth.mjs.map