@flusys/ng-auth 7.1.0 → 8.0.0

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,20 +1,18 @@
1
1
  import { HttpClient } from '@angular/common/http';
2
2
  import * as i0 from '@angular/core';
3
- import { inject, Injectable, signal, computed, effect, PLATFORM_ID, InjectionToken, Component, untracked, viewChild, DestroyRef, DOCUMENT, input, Injector, output, resource, makeStateKey, TransferState } 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';
4
4
  import { APP_CONFIG, getServiceUrl, isCompanyFeatureEnabled, isServiceEnabled, isSignUpEnabled, getPermissionMode, getDefaultCompanySlug, getDefaultBranchSlug } from '@flusys/ng-core';
5
- import { of, timeout, switchMap, map, tap, catchError, shareReplay, finalize, BehaviorSubject, throwError, filter, take, from, forkJoin, firstValueFrom } from 'rxjs';
6
- import * as i2 from '@angular/router';
7
- import { Router, RouterOutlet, ActivatedRoute } from '@angular/router';
8
- import { PlatformService, TranslateService, PermissionValidatorService, ApiResourceService, 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, AngularModule, HasPermissionDirective, BaseFormComponent, BaseListComponent, BaseListTemplateDirective, FileUrlService, FILE_PROVIDER, PROFILE_PERMISSION_PROVIDER, FileUploaderComponent } from '@flusys/ng-shared';
5
+ import { of, timeout, switchMap, map, tap, catchError, shareReplay, finalize, BehaviorSubject, throwError, filter, take, from, firstValueFrom, forkJoin } from 'rxjs';
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';
9
8
  import { map as map$1, catchError as catchError$1, tap as tap$1 } from 'rxjs/operators';
10
- import * as i2$1 from '@angular/common';
11
- import { isPlatformBrowser } from '@angular/common';
12
- import * as i1$1 from '@flusys/ng-ui';
13
- import { MessageService, UiModule, ConfirmationService } from '@flusys/ng-ui';
9
+ import { isPlatformBrowser, NgComponentOutlet, NgTemplateOutlet } from '@angular/common';
10
+ import { MessageService, CardComponent, CheckboxComponent, FButtonDirective, InputTextDirective, SelectComponent, UiIconComponent, ConfirmationService, DialogComponent, ProgressSpinnerComponent, TooltipDirective, TableComponent, TagComponent, PasswordComponent, AvatarComponent, SkeletonComponent, TextareaDirective, ToggleSwitchComponent } from '@flusys/ng-ui';
14
11
  import { LAYOUT_AUTH_STATE, LAYOUT_AUTH_API, AppFloatingConfigurator } from '@flusys/ng-layout';
15
12
  import { toSignal, takeUntilDestroyed } from '@angular/core/rxjs-interop';
16
13
  import { form, required, FormField, email, minLength } from '@angular/forms/signals';
17
14
  import * as i1 from '@angular/forms';
15
+ import { FormsModule } from '@angular/forms';
18
16
 
19
17
  var SocialProviderEnum;
20
18
  (function (SocialProviderEnum) {
@@ -90,12 +88,11 @@ class AuthApiService {
90
88
  verifyEmail(token) {
91
89
  return this.http.post(`${this.baseUrl}/verify-email`, { token });
92
90
  }
93
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AuthApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
94
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AuthApiService, providedIn: 'root' });
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 });
95
93
  }
96
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AuthApiService, decorators: [{
97
- type: Injectable,
98
- args: [{ providedIn: 'root' }]
94
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AuthApiService, decorators: [{
95
+ type: Service
99
96
  }], ctorParameters: () => [] });
100
97
 
101
98
  /**
@@ -118,9 +115,6 @@ class AuthStateService {
118
115
  appConfig = inject(APP_CONFIG);
119
116
  router = inject(Router);
120
117
  platform = inject(PlatformService);
121
- translateAdapter = inject(TranslateService, {
122
- optional: true,
123
- });
124
118
  permissionValidator = inject(PermissionValidatorService);
125
119
  // Core State (private writable, public readonly)
126
120
  _user = signal(null, /* @ts-ignore */
@@ -319,12 +313,11 @@ class AuthStateService {
319
313
  if (!this.platform.isServer)
320
314
  localStorage.removeItem(key);
321
315
  }
322
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AuthStateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
323
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AuthStateService, providedIn: 'root' });
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 });
324
318
  }
325
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AuthStateService, decorators: [{
326
- type: Injectable,
327
- args: [{ providedIn: 'root' }]
319
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AuthStateService, decorators: [{
320
+ type: Service
328
321
  }], ctorParameters: () => [] });
329
322
 
330
323
  class AuthInitService {
@@ -394,12 +387,11 @@ class AuthInitService {
394
387
  }));
395
388
  return this.initializationCache$;
396
389
  }
397
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AuthInitService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
398
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AuthInitService, providedIn: 'root' });
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 });
399
392
  }
400
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AuthInitService, decorators: [{
401
- type: Injectable,
402
- args: [{ providedIn: 'root' }]
393
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AuthInitService, decorators: [{
394
+ type: Service
403
395
  }] });
404
396
 
405
397
  /**
@@ -413,12 +405,11 @@ class BranchApiService extends ApiResourceService {
413
405
  fetchByCompany(companyId, search = '') {
414
406
  this.fetchList(search, { filter: { companyId } });
415
407
  }
416
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: BranchApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
417
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: BranchApiService, providedIn: 'root' });
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 });
418
410
  }
419
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: BranchApiService, decorators: [{
420
- type: Injectable,
421
- args: [{ providedIn: 'root' }]
411
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: BranchApiService, decorators: [{
412
+ type: Service
422
413
  }], ctorParameters: () => [] });
423
414
 
424
415
  /**
@@ -429,12 +420,11 @@ class CompanyApiService extends ApiResourceService {
429
420
  constructor() {
430
421
  super('company', 'administration');
431
422
  }
432
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: CompanyApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
433
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: CompanyApiService, providedIn: 'root' });
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 });
434
425
  }
435
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: CompanyApiService, decorators: [{
436
- type: Injectable,
437
- args: [{ providedIn: 'root' }]
426
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: CompanyApiService, decorators: [{
427
+ type: Service
438
428
  }], ctorParameters: () => [] });
439
429
 
440
430
  /**
@@ -501,24 +491,22 @@ class SocialAuthApiService {
501
491
  callback(request) {
502
492
  return this.http.post(`${this.baseUrl}/social/callback`, request);
503
493
  }
504
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: SocialAuthApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
505
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: SocialAuthApiService, providedIn: 'root' });
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 });
506
496
  }
507
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: SocialAuthApiService, decorators: [{
508
- type: Injectable,
509
- args: [{ providedIn: 'root' }]
497
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: SocialAuthApiService, decorators: [{
498
+ type: Service
510
499
  }] });
511
500
 
512
501
  class SocialAuthConfigApiService extends ApiResourceService {
513
502
  constructor() {
514
503
  super('social-config', 'auth');
515
504
  }
516
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: SocialAuthConfigApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
517
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: SocialAuthConfigApiService, providedIn: 'root' });
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 });
518
507
  }
519
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: SocialAuthConfigApiService, decorators: [{
520
- type: Injectable,
521
- args: [{ providedIn: 'root' }]
508
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: SocialAuthConfigApiService, decorators: [{
509
+ type: Service
522
510
  }], ctorParameters: () => [] });
523
511
 
524
512
  /**
@@ -543,12 +531,11 @@ class TokenRefreshStateService {
543
531
  failRefresh() {
544
532
  this._isRefreshing.set(false);
545
533
  }
546
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: TokenRefreshStateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
547
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: TokenRefreshStateService, providedIn: 'root' });
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 });
548
536
  }
549
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: TokenRefreshStateService, decorators: [{
550
- type: Injectable,
551
- args: [{ providedIn: 'root' }]
537
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: TokenRefreshStateService, decorators: [{
538
+ type: Service
552
539
  }] });
553
540
 
554
541
  /**
@@ -566,12 +553,11 @@ class UserApiService extends ApiResourceService {
566
553
  const params = search ? { q: search } : undefined;
567
554
  return this.http.post(`${this.baseUrl}/lookup`, filter, params ? { params } : undefined);
568
555
  }
569
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: UserApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
570
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: UserApiService, providedIn: 'root' });
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 });
571
558
  }
572
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: UserApiService, decorators: [{
573
- type: Injectable,
574
- args: [{ providedIn: 'root' }]
559
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: UserApiService, decorators: [{
560
+ type: Service
575
561
  }], ctorParameters: () => [] });
576
562
 
577
563
  /**
@@ -612,12 +598,22 @@ class UserPermissionApiService {
612
598
  ...(companyId && { companyId }),
613
599
  });
614
600
  }
615
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: UserPermissionApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
616
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: UserPermissionApiService, providedIn: 'root' });
601
+ // Reverse Lookups (target -> users)
602
+ getCompanyUsers(companyId) {
603
+ return this.http.post(`${this.baseUrl}/get-company-users`, {
604
+ companyId,
605
+ });
606
+ }
607
+ getBranchUsers(branchId) {
608
+ return this.http.post(`${this.baseUrl}/get-branch-users`, {
609
+ branchId,
610
+ });
611
+ }
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 });
617
614
  }
618
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: UserPermissionApiService, decorators: [{
619
- type: Injectable,
620
- args: [{ providedIn: 'root' }]
615
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: UserPermissionApiService, decorators: [{
616
+ type: Service
621
617
  }] });
622
618
 
623
619
  function isValidReturnUrl(url) {
@@ -626,7 +622,7 @@ function isValidReturnUrl(url) {
626
622
  return url.startsWith('/') && !url.includes('://') && !url.startsWith('//');
627
623
  }
628
624
  /** Protects routes requiring authentication */
629
- const authGuard = (route, state) => {
625
+ const authGuard = (_route, state) => {
630
626
  const authState = inject(AuthStateService);
631
627
  const router = inject(Router);
632
628
  const appConfig = inject(APP_CONFIG);
@@ -1068,6 +1064,11 @@ const AUTH_MESSAGES = {
1068
1064
  'administrative.company.add': 'Add Company',
1069
1065
  'administrative.branch.view.branches': 'View Branches',
1070
1066
  'administrative.company.delete.title': 'Delete Company',
1067
+ // components/company-permitted-users-dialog.component.ts, components/branch-permitted-users-dialog.component.ts
1068
+ 'administrative.permission.view.users': 'View Users',
1069
+ 'administrative.permission.no.users': 'No users found',
1070
+ 'administrative.permission.remove': 'Remove Access',
1071
+ 'administrative.permission.remove.confirm': 'Remove access for {{name}}?',
1071
1072
  // pages/users/user-form.component.ts
1072
1073
  'administrative.user.edit': 'Edit User',
1073
1074
  'administrative.user.new': 'New User',
@@ -1373,12 +1374,11 @@ class AuthLayoutStateAdapter {
1373
1374
  return null;
1374
1375
  }, /* @ts-ignore */
1375
1376
  ...(ngDevMode ? [{ debugName: "loginUserData" }] : /* istanbul ignore next */ []));
1376
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AuthLayoutStateAdapter, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1377
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AuthLayoutStateAdapter, providedIn: 'root' });
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 });
1378
1379
  }
1379
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AuthLayoutStateAdapter, decorators: [{
1380
- type: Injectable,
1381
- args: [{ providedIn: 'root' }]
1380
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AuthLayoutStateAdapter, decorators: [{
1381
+ type: Service
1382
1382
  }] });
1383
1383
  // =============================================================================
1384
1384
  // Layout API Adapter
@@ -1446,12 +1446,11 @@ class AuthLayoutApiAdapter {
1446
1446
  imageId: branch.logoId ?? undefined,
1447
1447
  }))));
1448
1448
  }
1449
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AuthLayoutApiAdapter, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1450
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AuthLayoutApiAdapter, providedIn: 'root' });
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 });
1451
1451
  }
1452
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AuthLayoutApiAdapter, decorators: [{
1453
- type: Injectable,
1454
- args: [{ providedIn: 'root' }]
1452
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AuthLayoutApiAdapter, decorators: [{
1453
+ type: Service
1455
1454
  }] });
1456
1455
 
1457
1456
  /**
@@ -1498,11 +1497,35 @@ class AuthUserProviderAdapter {
1498
1497
  meta: response.meta,
1499
1498
  })));
1500
1499
  }
1501
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AuthUserProviderAdapter, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1502
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AuthUserProviderAdapter });
1500
+ getUsersByIds(ids) {
1501
+ if (ids.length === 0) {
1502
+ const empty = {
1503
+ success: true,
1504
+ message: '',
1505
+ data: [],
1506
+ meta: { total: 0, page: 0, pageSize: 0, count: 0 },
1507
+ };
1508
+ return from(Promise.resolve(empty));
1509
+ }
1510
+ return from(this.userApi.findByIds(ids, ['id', 'name', 'email'])).pipe(map((response) => ({
1511
+ success: response.success,
1512
+ message: response.message,
1513
+ messageKey: response.messageKey,
1514
+ messageVariables: response.messageVariables,
1515
+ data: (response.data ?? []).map((user) => ({
1516
+ id: user.id,
1517
+ name: user.name || user.email,
1518
+ email: user.email,
1519
+ })),
1520
+ meta: response.meta,
1521
+ })));
1522
+ }
1523
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AuthUserProviderAdapter, deps: [], target: i0.ɵɵFactoryTarget.Service });
1524
+ static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.5", ngImport: i0, type: AuthUserProviderAdapter, autoProvided: false });
1503
1525
  }
1504
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AuthUserProviderAdapter, decorators: [{
1505
- type: Injectable
1526
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AuthUserProviderAdapter, decorators: [{
1527
+ type: Service,
1528
+ args: [{ autoProvided: false }]
1506
1529
  }] });
1507
1530
  // =============================================================================
1508
1531
  // Company API Provider Adapter
@@ -1530,11 +1553,12 @@ class AuthCompanyApiProviderAdapter {
1530
1553
  meta: response.meta,
1531
1554
  })));
1532
1555
  }
1533
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AuthCompanyApiProviderAdapter, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1534
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AuthCompanyApiProviderAdapter });
1556
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AuthCompanyApiProviderAdapter, deps: [], target: i0.ɵɵFactoryTarget.Service });
1557
+ static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.5", ngImport: i0, type: AuthCompanyApiProviderAdapter, autoProvided: false });
1535
1558
  }
1536
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AuthCompanyApiProviderAdapter, decorators: [{
1537
- type: Injectable
1559
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AuthCompanyApiProviderAdapter, decorators: [{
1560
+ type: Service,
1561
+ args: [{ autoProvided: false }]
1538
1562
  }] });
1539
1563
  // =============================================================================
1540
1564
  // User Permission Provider Adapter
@@ -1550,11 +1574,12 @@ class AuthUserPermissionProviderAdapter {
1550
1574
  data: (response.data ?? []).map((c) => ({ id: c.companyId, name: c.companyName })),
1551
1575
  })));
1552
1576
  }
1553
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AuthUserPermissionProviderAdapter, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1554
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AuthUserPermissionProviderAdapter });
1577
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AuthUserPermissionProviderAdapter, deps: [], target: i0.ɵɵFactoryTarget.Service });
1578
+ static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.5", ngImport: i0, type: AuthUserPermissionProviderAdapter, autoProvided: false });
1555
1579
  }
1556
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AuthUserPermissionProviderAdapter, decorators: [{
1557
- type: Injectable
1580
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AuthUserPermissionProviderAdapter, decorators: [{
1581
+ type: Service,
1582
+ args: [{ autoProvided: false }]
1558
1583
  }] });
1559
1584
  // =============================================================================
1560
1585
  // Auth State Provider Adapter
@@ -1568,11 +1593,12 @@ class AuthStateProviderAdapter {
1568
1593
  initialize() {
1569
1594
  return this.authInit.initialize().pipe(map(() => undefined));
1570
1595
  }
1571
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AuthStateProviderAdapter, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1572
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AuthStateProviderAdapter });
1596
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AuthStateProviderAdapter, deps: [], target: i0.ɵɵFactoryTarget.Service });
1597
+ static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.5", ngImport: i0, type: AuthStateProviderAdapter, autoProvided: false });
1573
1598
  }
1574
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AuthStateProviderAdapter, decorators: [{
1575
- type: Injectable
1599
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AuthStateProviderAdapter, decorators: [{
1600
+ type: Service,
1601
+ args: [{ autoProvided: false }]
1576
1602
  }] });
1577
1603
 
1578
1604
  /** Provides auth integration for ng-layout */
@@ -1705,8 +1731,8 @@ class AdministrationPageComponent {
1705
1731
  }));
1706
1732
  }, /* @ts-ignore */
1707
1733
  ...(ngDevMode ? [{ debugName: "visibleTabs" }] : /* istanbul ignore next */ []));
1708
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AdministrationPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1709
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.6", type: AdministrationPageComponent, isStandalone: true, selector: "lib-administration-page", ngImport: i0, template: `
1734
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AdministrationPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1735
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.5", type: AdministrationPageComponent, isStandalone: true, selector: "lib-administration-page", ngImport: i0, template: `
1710
1736
  <div class="p-4">
1711
1737
  <div class="mb-4">
1712
1738
  <h1 class="text-2xl font-bold m-0">{{ 'administrative.title' | translate }}</h1>
@@ -1721,7 +1747,7 @@ class AdministrationPageComponent {
1721
1747
  </div>
1722
1748
  `, 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" }] });
1723
1749
  }
1724
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AdministrationPageComponent, decorators: [{
1750
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AdministrationPageComponent, decorators: [{
1725
1751
  type: Component,
1726
1752
  args: [{
1727
1753
  selector: 'lib-administration-page',
@@ -1875,7 +1901,8 @@ class BranchFormComponent {
1875
1901
  this.formModel.update((m) => ({ ...m, slug }));
1876
1902
  }
1877
1903
  }
1878
- async onSubmit() {
1904
+ async onSubmit(event) {
1905
+ event.preventDefault();
1879
1906
  if (!this.isFormValid()) {
1880
1907
  this.messageService.add({
1881
1908
  severity: 'error',
@@ -1951,8 +1978,8 @@ class BranchFormComponent {
1951
1978
  queryParams: companyId ? { companyId } : {},
1952
1979
  });
1953
1980
  }
1954
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: BranchFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1955
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: BranchFormComponent, isStandalone: true, selector: "lib-branch-form", ngImport: i0, template: `
1981
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: BranchFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1982
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: BranchFormComponent, isStandalone: true, selector: "lib-branch-form", ngImport: i0, template: `
1956
1983
  <f-card>
1957
1984
  <ng-template #header>
1958
1985
  <div class="flex justify-between items-center p-4">
@@ -1967,7 +1994,7 @@ class BranchFormComponent {
1967
1994
  </ng-template>
1968
1995
 
1969
1996
  <form
1970
- (ngSubmit)="onSubmit()"
1997
+ (submit)="onSubmit($event)"
1971
1998
  class="grid grid-cols-1 md:grid-cols-2 gap-4"
1972
1999
  >
1973
2000
  <!-- Company Selection -->
@@ -2088,13 +2115,22 @@ class BranchFormComponent {
2088
2115
  </div>
2089
2116
  </form>
2090
2117
  </f-card>
2091
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: AngularModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]):not([formArray]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: UiModule }, { kind: "directive", type: i1$1.FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "variant", "rounded", "raised", "fluid", "disabled", "loading", "loadingIcon", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "component", type: i1$1.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: i1$1.InputTextDirective, selector: "[fInputText]", inputs: ["invalid", "touched", "variant", "size", "fluid"] }, { kind: "component", type: i1$1.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"], outputs: ["onFilter", "onChange", "onShow", "onHide", "onBlur", "onFocus", "onClear", "onLazyLoad"] }, { kind: "component", type: i1$1.CardComponent, selector: "f-card", inputs: ["header", "subheader", "styleClass", "style"] }, { kind: "component", type: i1$1.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" }] });
2118
+ `, 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"], 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" }] });
2092
2119
  }
2093
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: BranchFormComponent, decorators: [{
2120
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: BranchFormComponent, decorators: [{
2094
2121
  type: Component,
2095
2122
  args: [{
2096
2123
  selector: 'lib-branch-form',
2097
- imports: [AngularModule, UiModule, FormField, TranslatePipe],
2124
+ imports: [
2125
+ CardComponent,
2126
+ CheckboxComponent,
2127
+ FButtonDirective,
2128
+ InputTextDirective,
2129
+ SelectComponent,
2130
+ UiIconComponent,
2131
+ FormField,
2132
+ TranslatePipe,
2133
+ ],
2098
2134
  template: `
2099
2135
  <f-card>
2100
2136
  <ng-template #header>
@@ -2110,7 +2146,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
2110
2146
  </ng-template>
2111
2147
 
2112
2148
  <form
2113
- (ngSubmit)="onSubmit()"
2149
+ (submit)="onSubmit($event)"
2114
2150
  class="grid grid-cols-1 md:grid-cols-2 gap-4"
2115
2151
  >
2116
2152
  <!-- Company Selection -->
@@ -2240,9 +2276,245 @@ var branchForm_component = /*#__PURE__*/Object.freeze({
2240
2276
  BranchFormComponent: BranchFormComponent
2241
2277
  });
2242
2278
 
2279
+ /**
2280
+ * Read-only viewer for users permitted against a branch, with a remove-only
2281
+ * action per user. Assigning new users stays on the user-centric permission
2282
+ * flow (`UserBranchPermissionDialogComponent`) — this dialog intentionally
2283
+ * has no "add" affordance.
2284
+ */
2285
+ class BranchPermittedUsersDialogComponent {
2286
+ USER_PERMISSIONS = USER_PERMISSIONS;
2287
+ permissionApi = inject(UserPermissionApiService);
2288
+ confirmationService = inject(ConfirmationService);
2289
+ messageService = inject(MessageService);
2290
+ translateAdapter = inject(TranslateService, {
2291
+ optional: true,
2292
+ });
2293
+ t(key, params) {
2294
+ return this.translateAdapter?.translate(key, params) ?? key;
2295
+ }
2296
+ visible = input.required(/* @ts-ignore */
2297
+ ...(ngDevMode ? [{ debugName: "visible" }] : /* istanbul ignore next */ []));
2298
+ branch = input.required(/* @ts-ignore */
2299
+ ...(ngDevMode ? [{ debugName: "branch" }] : /* istanbul ignore next */ []));
2300
+ closed = output();
2301
+ isLoading = signal(false, /* @ts-ignore */
2302
+ ...(ngDevMode ? [{ debugName: "isLoading" }] : /* istanbul ignore next */ []));
2303
+ isRemoving = signal(false, /* @ts-ignore */
2304
+ ...(ngDevMode ? [{ debugName: "isRemoving" }] : /* istanbul ignore next */ []));
2305
+ users = signal([], /* @ts-ignore */
2306
+ ...(ngDevMode ? [{ debugName: "users" }] : /* istanbul ignore next */ []));
2307
+ constructor() {
2308
+ effect(() => {
2309
+ if (this.visible() && this.branch()) {
2310
+ this.loadUsers();
2311
+ }
2312
+ });
2313
+ }
2314
+ async loadUsers() {
2315
+ const branch = this.branch();
2316
+ if (!branch)
2317
+ return;
2318
+ this.isLoading.set(true);
2319
+ try {
2320
+ const response = await firstValueFrom(this.permissionApi.getBranchUsers(branch.id));
2321
+ this.users.set(response.data ?? []);
2322
+ }
2323
+ catch {
2324
+ // Error toast handled by global interceptor
2325
+ }
2326
+ finally {
2327
+ this.isLoading.set(false);
2328
+ }
2329
+ }
2330
+ onRemove(user) {
2331
+ const branch = this.branch();
2332
+ if (!branch)
2333
+ return;
2334
+ this.confirmationService.confirm({
2335
+ message: this.t('administrative.permission.remove.confirm', {
2336
+ name: user.userName,
2337
+ }),
2338
+ header: this.t('administrative.permission.remove'),
2339
+ icon: 'exclamation-triangle',
2340
+ acceptButtonStyleClass: 'p-button-danger',
2341
+ accept: async () => {
2342
+ this.isRemoving.set(true);
2343
+ try {
2344
+ const response = await firstValueFrom(this.permissionApi.revokeUserFromBranch(user.userId, branch.id));
2345
+ if (response.success) {
2346
+ this.users.update((list) => list.filter((u) => u.id !== user.id));
2347
+ this.messageService.add({
2348
+ severity: 'success',
2349
+ summary: this.t('shared.success'),
2350
+ detail: response?.messageKey
2351
+ ? this.t(response.messageKey, response.messageVariables)
2352
+ : (response?.message ?? ''),
2353
+ });
2354
+ }
2355
+ }
2356
+ catch {
2357
+ // Error toast handled by global interceptor
2358
+ }
2359
+ finally {
2360
+ this.isRemoving.set(false);
2361
+ }
2362
+ },
2363
+ });
2364
+ }
2365
+ onClose() {
2366
+ this.closed.emit();
2367
+ }
2368
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: BranchPermittedUsersDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2369
+ 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: `
2370
+ <f-dialog
2371
+ [visible]="visible()"
2372
+ [modal]="true"
2373
+ [closable]="true"
2374
+ [breakpoints]="{ '960px': '90vw', '640px': '95vw' }"
2375
+ [style]="{ width: '50vw', maxWidth: '600px' }"
2376
+ [header]="'administrative.permission.view.users' | translate"
2377
+ (onHide)="onClose()"
2378
+ >
2379
+ <div class="mb-4">
2380
+ <p class="text-sm text-muted-color">
2381
+ {{ 'administrative.branch.title' | translate }}:
2382
+ <strong>{{ branch()?.name }}</strong>
2383
+ </p>
2384
+ </div>
2385
+
2386
+ @if (isLoading()) {
2387
+ <div class="flex justify-center items-center py-8">
2388
+ <f-progressspinner />
2389
+ </div>
2390
+ } @else {
2391
+ <div class="flex flex-col gap-3">
2392
+ @for (user of users(); track user.id) {
2393
+ <div
2394
+ class="flex items-center justify-between p-3 border border-surface rounded"
2395
+ >
2396
+ <div>
2397
+ <div class="font-semibold">{{ user.userName }}</div>
2398
+ <div class="text-sm text-muted-color">{{ user.userEmail }}</div>
2399
+ </div>
2400
+ <button
2401
+ fButton
2402
+ *hasPermission="USER_PERMISSIONS.UPDATE"
2403
+ [text]="true"
2404
+ severity="danger"
2405
+ size="small"
2406
+ [disabled]="isRemoving()"
2407
+ [fTooltip]="'shared.remove' | translate"
2408
+ (click)="onRemove(user)"
2409
+ >
2410
+ <ui-icon pButtonIcon name="trash"></ui-icon>
2411
+ </button>
2412
+ </div>
2413
+ } @empty {
2414
+ <div class="text-center py-4 text-muted-color">
2415
+ {{ 'administrative.permission.no.users' | translate }}
2416
+ </div>
2417
+ }
2418
+ </div>
2419
+ }
2420
+
2421
+ <ng-template #footer>
2422
+ <button
2423
+ fButton
2424
+ severity="secondary"
2425
+ [outlined]="true"
2426
+ (click)="onClose()"
2427
+ >
2428
+ <span pButtonLabel>{{ 'shared.close' | translate }}</span>
2429
+ </button>
2430
+ </ng-template>
2431
+ </f-dialog>
2432
+ `, 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" }] });
2433
+ }
2434
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: BranchPermittedUsersDialogComponent, decorators: [{
2435
+ type: Component,
2436
+ args: [{
2437
+ selector: 'lib-branch-permitted-users-dialog',
2438
+ imports: [
2439
+ DialogComponent,
2440
+ FButtonDirective,
2441
+ ProgressSpinnerComponent,
2442
+ TooltipDirective,
2443
+ UiIconComponent,
2444
+ HasPermissionDirective,
2445
+ TranslatePipe,
2446
+ ],
2447
+ template: `
2448
+ <f-dialog
2449
+ [visible]="visible()"
2450
+ [modal]="true"
2451
+ [closable]="true"
2452
+ [breakpoints]="{ '960px': '90vw', '640px': '95vw' }"
2453
+ [style]="{ width: '50vw', maxWidth: '600px' }"
2454
+ [header]="'administrative.permission.view.users' | translate"
2455
+ (onHide)="onClose()"
2456
+ >
2457
+ <div class="mb-4">
2458
+ <p class="text-sm text-muted-color">
2459
+ {{ 'administrative.branch.title' | translate }}:
2460
+ <strong>{{ branch()?.name }}</strong>
2461
+ </p>
2462
+ </div>
2463
+
2464
+ @if (isLoading()) {
2465
+ <div class="flex justify-center items-center py-8">
2466
+ <f-progressspinner />
2467
+ </div>
2468
+ } @else {
2469
+ <div class="flex flex-col gap-3">
2470
+ @for (user of users(); track user.id) {
2471
+ <div
2472
+ class="flex items-center justify-between p-3 border border-surface rounded"
2473
+ >
2474
+ <div>
2475
+ <div class="font-semibold">{{ user.userName }}</div>
2476
+ <div class="text-sm text-muted-color">{{ user.userEmail }}</div>
2477
+ </div>
2478
+ <button
2479
+ fButton
2480
+ *hasPermission="USER_PERMISSIONS.UPDATE"
2481
+ [text]="true"
2482
+ severity="danger"
2483
+ size="small"
2484
+ [disabled]="isRemoving()"
2485
+ [fTooltip]="'shared.remove' | translate"
2486
+ (click)="onRemove(user)"
2487
+ >
2488
+ <ui-icon pButtonIcon name="trash"></ui-icon>
2489
+ </button>
2490
+ </div>
2491
+ } @empty {
2492
+ <div class="text-center py-4 text-muted-color">
2493
+ {{ 'administrative.permission.no.users' | translate }}
2494
+ </div>
2495
+ }
2496
+ </div>
2497
+ }
2498
+
2499
+ <ng-template #footer>
2500
+ <button
2501
+ fButton
2502
+ severity="secondary"
2503
+ [outlined]="true"
2504
+ (click)="onClose()"
2505
+ >
2506
+ <span pButtonLabel>{{ 'shared.close' | translate }}</span>
2507
+ </button>
2508
+ </ng-template>
2509
+ </f-dialog>
2510
+ `,
2511
+ }]
2512
+ }], ctorParameters: () => [], propDecorators: { visible: [{ type: i0.Input, args: [{ isSignal: true, alias: "visible", required: true }] }], branch: [{ type: i0.Input, args: [{ isSignal: true, alias: "branch", required: true }] }], closed: [{ type: i0.Output, args: ["closed"] }] } });
2513
+
2243
2514
  class BranchListComponent {
2244
2515
  // Permission constants for template
2245
2516
  BRANCH_PERMISSIONS = BRANCH_PERMISSIONS;
2517
+ USER_PERMISSIONS = USER_PERMISSIONS;
2246
2518
  router = inject(Router);
2247
2519
  route = inject(ActivatedRoute);
2248
2520
  messageService = inject(MessageService);
@@ -2269,6 +2541,10 @@ class BranchListComponent {
2269
2541
  isLoading = this.branchService.isLoading;
2270
2542
  /** Total count from service */
2271
2543
  total = this.branchService.total;
2544
+ permittedUsersDialogVisible = signal(false, /* @ts-ignore */
2545
+ ...(ngDevMode ? [{ debugName: "permittedUsersDialogVisible" }] : /* istanbul ignore next */ []));
2546
+ selectedBranch = signal(null, /* @ts-ignore */
2547
+ ...(ngDevMode ? [{ debugName: "selectedBranch" }] : /* istanbul ignore next */ []));
2272
2548
  constructor() {
2273
2549
  effect(() => {
2274
2550
  const params = this.queryParamMap();
@@ -2315,6 +2591,10 @@ class BranchListComponent {
2315
2591
  onEdit(branch) {
2316
2592
  this.router.navigate(['/administration/branch', branch.id]);
2317
2593
  }
2594
+ onViewUsers(branch) {
2595
+ this.selectedBranch.set(branch);
2596
+ this.permittedUsersDialogVisible.set(true);
2597
+ }
2318
2598
  onDelete(branch) {
2319
2599
  this.confirmationService.confirm({
2320
2600
  message: this.translate('shared.confirm.delete.item', {
@@ -2344,8 +2624,8 @@ class BranchListComponent {
2344
2624
  },
2345
2625
  });
2346
2626
  }
2347
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: BranchListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2348
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: BranchListComponent, isStandalone: true, selector: "lib-branch-list", ngImport: i0, template: `
2627
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: BranchListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2628
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: BranchListComponent, isStandalone: true, selector: "lib-branch-list", ngImport: i0, template: `
2349
2629
  <f-card>
2350
2630
  <ng-template #header>
2351
2631
  <div
@@ -2436,6 +2716,17 @@ class BranchListComponent {
2436
2716
  >
2437
2717
  <ui-icon pButtonIcon name="pencil"></ui-icon>
2438
2718
  </button>
2719
+ <button
2720
+ fButton
2721
+ *hasPermission="USER_PERMISSIONS.READ"
2722
+ [rounded]="true"
2723
+ [text]="true"
2724
+ severity="secondary"
2725
+ [fTooltip]="'administrative.permission.view.users' | translate"
2726
+ (click)="onViewUsers(branch)"
2727
+ >
2728
+ <ui-icon pButtonIcon name="users"></ui-icon>
2729
+ </button>
2439
2730
  @if (!branch.readOnly) {
2440
2731
  <button
2441
2732
  fButton
@@ -2467,13 +2758,31 @@ class BranchListComponent {
2467
2758
  </f-table>
2468
2759
  </div>
2469
2760
  </f-card>
2470
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: AngularModule }, { 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: "ngmodule", type: UiModule }, { kind: "directive", type: i1$1.FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "variant", "rounded", "raised", "fluid", "disabled", "loading", "loadingIcon", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "component", type: i1$1.TagComponent, selector: "f-tag", inputs: ["value", "severity", "icon", "rounded", "color", "styleClass", "style"] }, { kind: "component", type: i1$1.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"], outputs: ["onFilter", "onChange", "onShow", "onHide", "onBlur", "onFocus", "onClear", "onLazyLoad"] }, { kind: "component", type: i1$1.CardComponent, selector: "f-card", inputs: ["header", "subheader", "styleClass", "style"] }, { kind: "component", type: i1$1.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: "directive", type: i1$1.TooltipDirective, selector: "[fTooltip]", inputs: ["fTooltip", "tooltipPosition", "positionStyle", "tooltipStyleClass", "disabled", "tooltipEvent", "showDelay", "hideDelay", "life", "autoHide", "positionTop", "positionLeft", "escape"] }, { kind: "component", type: i1$1.UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill", "severity"] }, { kind: "directive", type: HasPermissionDirective, selector: "[hasPermission]", inputs: ["hasPermission"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
2761
+
2762
+ <lib-branch-permitted-users-dialog
2763
+ [visible]="permittedUsersDialogVisible()"
2764
+ [branch]="selectedBranch()"
2765
+ (closed)="permittedUsersDialogVisible.set(false)"
2766
+ />
2767
+ `, 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: 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: 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"], 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" }] });
2471
2768
  }
2472
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: BranchListComponent, decorators: [{
2769
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: BranchListComponent, decorators: [{
2473
2770
  type: Component,
2474
2771
  args: [{
2475
2772
  selector: 'lib-branch-list',
2476
- imports: [AngularModule, UiModule, HasPermissionDirective, TranslatePipe],
2773
+ imports: [
2774
+ FormsModule,
2775
+ CardComponent,
2776
+ FButtonDirective,
2777
+ SelectComponent,
2778
+ TableComponent,
2779
+ TagComponent,
2780
+ TooltipDirective,
2781
+ UiIconComponent,
2782
+ HasPermissionDirective,
2783
+ BranchPermittedUsersDialogComponent,
2784
+ TranslatePipe,
2785
+ ],
2477
2786
  template: `
2478
2787
  <f-card>
2479
2788
  <ng-template #header>
@@ -2565,6 +2874,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
2565
2874
  >
2566
2875
  <ui-icon pButtonIcon name="pencil"></ui-icon>
2567
2876
  </button>
2877
+ <button
2878
+ fButton
2879
+ *hasPermission="USER_PERMISSIONS.READ"
2880
+ [rounded]="true"
2881
+ [text]="true"
2882
+ severity="secondary"
2883
+ [fTooltip]="'administrative.permission.view.users' | translate"
2884
+ (click)="onViewUsers(branch)"
2885
+ >
2886
+ <ui-icon pButtonIcon name="users"></ui-icon>
2887
+ </button>
2568
2888
  @if (!branch.readOnly) {
2569
2889
  <button
2570
2890
  fButton
@@ -2596,6 +2916,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
2596
2916
  </f-table>
2597
2917
  </div>
2598
2918
  </f-card>
2919
+
2920
+ <lib-branch-permitted-users-dialog
2921
+ [visible]="permittedUsersDialogVisible()"
2922
+ [branch]="selectedBranch()"
2923
+ (closed)="permittedUsersDialogVisible.set(false)"
2924
+ />
2599
2925
  `,
2600
2926
  }]
2601
2927
  }], ctorParameters: () => [] });
@@ -2696,8 +3022,8 @@ class CompanyFormComponent {
2696
3022
  t(key, vars) {
2697
3023
  return this.translateAdapter?.translate(key, vars) ?? key;
2698
3024
  }
2699
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: CompanyFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2700
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.0.6", type: CompanyFormComponent, isStandalone: true, selector: "lib-company-form", viewQueries: [{ propertyName: "formRef", first: true, predicate: BaseFormComponent, descendants: true, isSignal: true }], ngImport: i0, template: `
3025
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: CompanyFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3026
+ 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: `
2701
3027
  <lib-base-form
2702
3028
  [fields]="fields"
2703
3029
  [service]="companyService"
@@ -2712,7 +3038,7 @@ class CompanyFormComponent {
2712
3038
  />
2713
3039
  `, 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" }] });
2714
3040
  }
2715
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: CompanyFormComponent, decorators: [{
3041
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: CompanyFormComponent, decorators: [{
2716
3042
  type: Component,
2717
3043
  args: [{
2718
3044
  selector: 'lib-company-form',
@@ -2739,6 +3065,241 @@ var companyForm_component = /*#__PURE__*/Object.freeze({
2739
3065
  CompanyFormComponent: CompanyFormComponent
2740
3066
  });
2741
3067
 
3068
+ /**
3069
+ * Read-only viewer for users permitted against a company, with a remove-only
3070
+ * action per user. Assigning new users stays on the user-centric permission
3071
+ * flow (`UserCompanyPermissionDialogComponent`) — this dialog intentionally
3072
+ * has no "add" affordance.
3073
+ */
3074
+ class CompanyPermittedUsersDialogComponent {
3075
+ USER_PERMISSIONS = USER_PERMISSIONS;
3076
+ permissionApi = inject(UserPermissionApiService);
3077
+ confirmationService = inject(ConfirmationService);
3078
+ messageService = inject(MessageService);
3079
+ translateAdapter = inject(TranslateService, {
3080
+ optional: true,
3081
+ });
3082
+ t(key, params) {
3083
+ return this.translateAdapter?.translate(key, params) ?? key;
3084
+ }
3085
+ visible = input.required(/* @ts-ignore */
3086
+ ...(ngDevMode ? [{ debugName: "visible" }] : /* istanbul ignore next */ []));
3087
+ company = input.required(/* @ts-ignore */
3088
+ ...(ngDevMode ? [{ debugName: "company" }] : /* istanbul ignore next */ []));
3089
+ closed = output();
3090
+ isLoading = signal(false, /* @ts-ignore */
3091
+ ...(ngDevMode ? [{ debugName: "isLoading" }] : /* istanbul ignore next */ []));
3092
+ isRemoving = signal(false, /* @ts-ignore */
3093
+ ...(ngDevMode ? [{ debugName: "isRemoving" }] : /* istanbul ignore next */ []));
3094
+ users = signal([], /* @ts-ignore */
3095
+ ...(ngDevMode ? [{ debugName: "users" }] : /* istanbul ignore next */ []));
3096
+ constructor() {
3097
+ effect(() => {
3098
+ if (this.visible() && this.company()) {
3099
+ this.loadUsers();
3100
+ }
3101
+ });
3102
+ }
3103
+ async loadUsers() {
3104
+ const company = this.company();
3105
+ if (!company)
3106
+ return;
3107
+ this.isLoading.set(true);
3108
+ try {
3109
+ const response = await firstValueFrom(this.permissionApi.getCompanyUsers(company.id));
3110
+ this.users.set(response.data ?? []);
3111
+ }
3112
+ catch {
3113
+ // Error toast handled by global interceptor
3114
+ }
3115
+ finally {
3116
+ this.isLoading.set(false);
3117
+ }
3118
+ }
3119
+ onRemove(user) {
3120
+ const company = this.company();
3121
+ if (!company)
3122
+ return;
3123
+ this.confirmationService.confirm({
3124
+ message: this.t('administrative.permission.remove.confirm', {
3125
+ name: user.userName,
3126
+ }),
3127
+ header: this.t('administrative.permission.remove'),
3128
+ icon: 'exclamation-triangle',
3129
+ acceptButtonStyleClass: 'p-button-danger',
3130
+ accept: async () => {
3131
+ this.isRemoving.set(true);
3132
+ try {
3133
+ const response = await firstValueFrom(this.permissionApi.revokeUserFromCompany(user.userId, company.id));
3134
+ if (response.success) {
3135
+ this.users.update((list) => list.filter((u) => u.id !== user.id));
3136
+ this.messageService.add({
3137
+ severity: 'success',
3138
+ summary: this.t('shared.success'),
3139
+ detail: response?.messageKey
3140
+ ? this.t(response.messageKey, response.messageVariables)
3141
+ : (response?.message ?? ''),
3142
+ });
3143
+ }
3144
+ }
3145
+ catch {
3146
+ // Error toast handled by global interceptor
3147
+ }
3148
+ finally {
3149
+ this.isRemoving.set(false);
3150
+ }
3151
+ },
3152
+ });
3153
+ }
3154
+ onClose() {
3155
+ this.closed.emit();
3156
+ }
3157
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: CompanyPermittedUsersDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3158
+ 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: `
3159
+ <f-dialog
3160
+ [visible]="visible()"
3161
+ [modal]="true"
3162
+ [closable]="true"
3163
+ [breakpoints]="{ '960px': '90vw', '640px': '95vw' }"
3164
+ [style]="{ width: '50vw', maxWidth: '600px' }"
3165
+ [header]="'administrative.permission.view.users' | translate"
3166
+ (onHide)="onClose()"
3167
+ >
3168
+ <div class="mb-4">
3169
+ <p class="text-sm text-muted-color">
3170
+ {{ 'administrative.company.title' | translate }}:
3171
+ <strong>{{ company()?.name }}</strong>
3172
+ </p>
3173
+ </div>
3174
+
3175
+ @if (isLoading()) {
3176
+ <div class="flex justify-center items-center py-8">
3177
+ <f-progressspinner />
3178
+ </div>
3179
+ } @else {
3180
+ <div class="flex flex-col gap-3">
3181
+ @for (user of users(); track user.id) {
3182
+ <div
3183
+ class="flex items-center justify-between p-3 border border-surface rounded"
3184
+ >
3185
+ <div>
3186
+ <div class="font-semibold">{{ user.userName }}</div>
3187
+ <div class="text-sm text-muted-color">{{ user.userEmail }}</div>
3188
+ </div>
3189
+ <button
3190
+ fButton
3191
+ *hasPermission="USER_PERMISSIONS.UPDATE"
3192
+ [text]="true"
3193
+ severity="danger"
3194
+ size="small"
3195
+ [disabled]="isRemoving()"
3196
+ [fTooltip]="'shared.remove' | translate"
3197
+ (click)="onRemove(user)"
3198
+ >
3199
+ <ui-icon pButtonIcon name="trash"></ui-icon>
3200
+ </button>
3201
+ </div>
3202
+ } @empty {
3203
+ <div class="text-center py-4 text-muted-color">
3204
+ {{ 'administrative.permission.no.users' | translate }}
3205
+ </div>
3206
+ }
3207
+ </div>
3208
+ }
3209
+
3210
+ <ng-template #footer>
3211
+ <button
3212
+ fButton
3213
+ severity="secondary"
3214
+ [outlined]="true"
3215
+ (click)="onClose()"
3216
+ >
3217
+ <span pButtonLabel>{{ 'shared.close' | translate }}</span>
3218
+ </button>
3219
+ </ng-template>
3220
+ </f-dialog>
3221
+ `, 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" }] });
3222
+ }
3223
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: CompanyPermittedUsersDialogComponent, decorators: [{
3224
+ type: Component,
3225
+ args: [{
3226
+ selector: 'lib-company-permitted-users-dialog',
3227
+ imports: [
3228
+ DialogComponent,
3229
+ FButtonDirective,
3230
+ ProgressSpinnerComponent,
3231
+ TooltipDirective,
3232
+ UiIconComponent,
3233
+ HasPermissionDirective,
3234
+ TranslatePipe,
3235
+ ],
3236
+ template: `
3237
+ <f-dialog
3238
+ [visible]="visible()"
3239
+ [modal]="true"
3240
+ [closable]="true"
3241
+ [breakpoints]="{ '960px': '90vw', '640px': '95vw' }"
3242
+ [style]="{ width: '50vw', maxWidth: '600px' }"
3243
+ [header]="'administrative.permission.view.users' | translate"
3244
+ (onHide)="onClose()"
3245
+ >
3246
+ <div class="mb-4">
3247
+ <p class="text-sm text-muted-color">
3248
+ {{ 'administrative.company.title' | translate }}:
3249
+ <strong>{{ company()?.name }}</strong>
3250
+ </p>
3251
+ </div>
3252
+
3253
+ @if (isLoading()) {
3254
+ <div class="flex justify-center items-center py-8">
3255
+ <f-progressspinner />
3256
+ </div>
3257
+ } @else {
3258
+ <div class="flex flex-col gap-3">
3259
+ @for (user of users(); track user.id) {
3260
+ <div
3261
+ class="flex items-center justify-between p-3 border border-surface rounded"
3262
+ >
3263
+ <div>
3264
+ <div class="font-semibold">{{ user.userName }}</div>
3265
+ <div class="text-sm text-muted-color">{{ user.userEmail }}</div>
3266
+ </div>
3267
+ <button
3268
+ fButton
3269
+ *hasPermission="USER_PERMISSIONS.UPDATE"
3270
+ [text]="true"
3271
+ severity="danger"
3272
+ size="small"
3273
+ [disabled]="isRemoving()"
3274
+ [fTooltip]="'shared.remove' | translate"
3275
+ (click)="onRemove(user)"
3276
+ >
3277
+ <ui-icon pButtonIcon name="trash"></ui-icon>
3278
+ </button>
3279
+ </div>
3280
+ } @empty {
3281
+ <div class="text-center py-4 text-muted-color">
3282
+ {{ 'administrative.permission.no.users' | translate }}
3283
+ </div>
3284
+ }
3285
+ </div>
3286
+ }
3287
+
3288
+ <ng-template #footer>
3289
+ <button
3290
+ fButton
3291
+ severity="secondary"
3292
+ [outlined]="true"
3293
+ (click)="onClose()"
3294
+ >
3295
+ <span pButtonLabel>{{ 'shared.close' | translate }}</span>
3296
+ </button>
3297
+ </ng-template>
3298
+ </f-dialog>
3299
+ `,
3300
+ }]
3301
+ }], ctorParameters: () => [], propDecorators: { visible: [{ type: i0.Input, args: [{ isSignal: true, alias: "visible", required: true }] }], company: [{ type: i0.Input, args: [{ isSignal: true, alias: "company", required: true }] }], closed: [{ type: i0.Output, args: ["closed"] }] } });
3302
+
2742
3303
  class CompanyListComponent {
2743
3304
  permissionValidator = inject(PermissionValidatorService);
2744
3305
  translateAdapter = inject(TranslateService, {
@@ -2751,7 +3312,11 @@ class CompanyListComponent {
2751
3312
  canEditFn = (_item) => this.permissionValidator.hasPermission(COMPANY_PERMISSIONS.UPDATE);
2752
3313
  canDeleteFn = (item) => !item.readOnly &&
2753
3314
  this.permissionValidator.hasPermission(COMPANY_PERMISSIONS.DELETE);
2754
- viewBranchesAction = [
3315
+ permittedUsersDialogVisible = signal(false, /* @ts-ignore */
3316
+ ...(ngDevMode ? [{ debugName: "permittedUsersDialogVisible" }] : /* istanbul ignore next */ []));
3317
+ selectedCompany = signal(null, /* @ts-ignore */
3318
+ ...(ngDevMode ? [{ debugName: "selectedCompany" }] : /* istanbul ignore next */ []));
3319
+ rowActions = [
2755
3320
  {
2756
3321
  icon: 'building',
2757
3322
  tooltip: 'administrative.branch.view.branches',
@@ -2761,6 +3326,16 @@ class CompanyListComponent {
2761
3326
  queryParams: { companyId: c.id },
2762
3327
  }),
2763
3328
  },
3329
+ {
3330
+ icon: 'users',
3331
+ tooltip: 'administrative.permission.view.users',
3332
+ severity: 'secondary',
3333
+ show: () => this.permissionValidator.hasPermission(USER_PERMISSIONS.READ),
3334
+ handler: (c) => {
3335
+ this.selectedCompany.set(c);
3336
+ this.permittedUsersDialogVisible.set(true);
3337
+ },
3338
+ },
2764
3339
  ];
2765
3340
  columns = [
2766
3341
  {
@@ -2791,11 +3366,11 @@ class CompanyListComponent {
2791
3366
  t(key) {
2792
3367
  return this.translateAdapter?.translate(key) ?? key;
2793
3368
  }
2794
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: CompanyListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2795
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.6", type: CompanyListComponent, isStandalone: true, selector: "lib-company-list", ngImport: i0, template: `
3369
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: CompanyListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3370
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.5", type: CompanyListComponent, isStandalone: true, selector: "lib-company-list", ngImport: i0, template: `
2796
3371
  <lib-base-list
2797
3372
  [columns]="columns"
2798
- [actions]="viewBranchesAction"
3373
+ [actions]="rowActions"
2799
3374
  [service]="companyService"
2800
3375
  [title]="'administrative.company.title' | translate"
2801
3376
  [showCreateButton]="canCreate()"
@@ -2818,22 +3393,29 @@ class CompanyListComponent {
2818
3393
  />
2819
3394
  </ng-template>
2820
3395
  </lib-base-list>
2821
- `, 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: "ngmodule", type: UiModule }, { kind: "component", type: i1$1.TagComponent, selector: "f-tag", inputs: ["value", "severity", "icon", "rounded", "color", "styleClass", "style"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
3396
+
3397
+ <lib-company-permitted-users-dialog
3398
+ [visible]="permittedUsersDialogVisible()"
3399
+ [company]="selectedCompany()"
3400
+ (closed)="permittedUsersDialogVisible.set(false)"
3401
+ />
3402
+ `, 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" }] });
2822
3403
  }
2823
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: CompanyListComponent, decorators: [{
3404
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: CompanyListComponent, decorators: [{
2824
3405
  type: Component,
2825
3406
  args: [{
2826
3407
  selector: 'lib-company-list',
2827
3408
  imports: [
2828
3409
  BaseListComponent,
2829
3410
  BaseListTemplateDirective,
2830
- UiModule,
3411
+ TagComponent,
3412
+ CompanyPermittedUsersDialogComponent,
2831
3413
  TranslatePipe,
2832
3414
  ],
2833
3415
  template: `
2834
3416
  <lib-base-list
2835
3417
  [columns]="columns"
2836
- [actions]="viewBranchesAction"
3418
+ [actions]="rowActions"
2837
3419
  [service]="companyService"
2838
3420
  [title]="'administrative.company.title' | translate"
2839
3421
  [showCreateButton]="canCreate()"
@@ -2856,6 +3438,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
2856
3438
  />
2857
3439
  </ng-template>
2858
3440
  </lib-base-list>
3441
+
3442
+ <lib-company-permitted-users-dialog
3443
+ [visible]="permittedUsersDialogVisible()"
3444
+ [company]="selectedCompany()"
3445
+ (closed)="permittedUsersDialogVisible.set(false)"
3446
+ />
2859
3447
  `,
2860
3448
  }]
2861
3449
  }] });
@@ -2893,7 +3481,8 @@ class ForgotPasswordPageComponent {
2893
3481
  });
2894
3482
  isFormValid = computed(() => this.forgotForm().valid(), /* @ts-ignore */
2895
3483
  ...(ngDevMode ? [{ debugName: "isFormValid" }] : /* istanbul ignore next */ []));
2896
- onSubmit() {
3484
+ onSubmit(event) {
3485
+ event.preventDefault();
2897
3486
  if (!this.isFormValid()) {
2898
3487
  this.messageService.add({
2899
3488
  severity: 'error',
@@ -2921,8 +3510,8 @@ class ForgotPasswordPageComponent {
2921
3510
  this.submittedEmail.set('');
2922
3511
  this.formModel.set({ email: '' });
2923
3512
  }
2924
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: ForgotPasswordPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2925
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: ForgotPasswordPageComponent, isStandalone: true, selector: "lib-forgot-password-page", ngImport: i0, template: `
3513
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: ForgotPasswordPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3514
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: ForgotPasswordPageComponent, isStandalone: true, selector: "lib-forgot-password-page", ngImport: i0, template: `
2926
3515
  <app-floating-configurator />
2927
3516
  <div
2928
3517
  class="bg-surface-ground flex items-center justify-center min-h-screen"
@@ -2948,7 +3537,7 @@ class ForgotPasswordPageComponent {
2948
3537
  </span>
2949
3538
  </div>
2950
3539
 
2951
- <form (ngSubmit)="onSubmit()">
3540
+ <form (submit)="onSubmit($event)">
2952
3541
  <label
2953
3542
  for="email"
2954
3543
  class="block text-lg font-medium mb-2 text-color"
@@ -3024,15 +3613,17 @@ class ForgotPasswordPageComponent {
3024
3613
  </div>
3025
3614
  </div>
3026
3615
  </div>
3027
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: AngularModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { 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: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "browserUrl", "routerLink"] }, { kind: "ngmodule", type: UiModule }, { kind: "directive", type: i1$1.FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "variant", "rounded", "raised", "fluid", "disabled", "loading", "loadingIcon", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "directive", type: i1$1.InputTextDirective, selector: "[fInputText]", inputs: ["invalid", "touched", "variant", "size", "fluid"] }, { kind: "component", type: i1$1.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" }] });
3616
+ `, 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" }] });
3028
3617
  }
3029
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: ForgotPasswordPageComponent, decorators: [{
3618
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: ForgotPasswordPageComponent, decorators: [{
3030
3619
  type: Component,
3031
3620
  args: [{
3032
3621
  selector: 'lib-forgot-password-page',
3033
3622
  imports: [
3034
- AngularModule,
3035
- UiModule,
3623
+ RouterLink,
3624
+ FButtonDirective,
3625
+ InputTextDirective,
3626
+ UiIconComponent,
3036
3627
  FormField,
3037
3628
  AppFloatingConfigurator,
3038
3629
  TranslatePipe,
@@ -3063,7 +3654,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
3063
3654
  </span>
3064
3655
  </div>
3065
3656
 
3066
- <form (ngSubmit)="onSubmit()">
3657
+ <form (submit)="onSubmit($event)">
3067
3658
  <label
3068
3659
  for="email"
3069
3660
  class="block text-lg font-medium mb-2 text-color"
@@ -3224,8 +3815,8 @@ class SocialLoginButtonsComponent {
3224
3815
  translate(key, vars) {
3225
3816
  return this.translateAdapter?.translate(key, vars) ?? key;
3226
3817
  }
3227
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: SocialLoginButtonsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3228
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: SocialLoginButtonsComponent, isStandalone: true, selector: "lib-social-login-buttons", inputs: { returnUrl: { classPropertyName: "returnUrl", publicName: "returnUrl", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
3818
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: SocialLoginButtonsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3819
+ 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: `
3229
3820
  @if (providers().length) {
3230
3821
  <div class="mt-6">
3231
3822
  <div class="flex items-center gap-3 mb-4">
@@ -3298,13 +3889,13 @@ class SocialLoginButtonsComponent {
3298
3889
  </div>
3299
3890
  </div>
3300
3891
  }
3301
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: UiModule }, { kind: "directive", type: i1$1.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" }] });
3892
+ `, 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" }] });
3302
3893
  }
3303
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: SocialLoginButtonsComponent, decorators: [{
3894
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: SocialLoginButtonsComponent, decorators: [{
3304
3895
  type: Component,
3305
3896
  args: [{
3306
3897
  selector: 'lib-social-login-buttons',
3307
- imports: [UiModule, TranslatePipe],
3898
+ imports: [FButtonDirective, TranslatePipe],
3308
3899
  template: `
3309
3900
  @if (providers().length) {
3310
3901
  <div class="mt-6">
@@ -3514,7 +4105,8 @@ class LoginPageComponent {
3514
4105
  this.autoSelectIfSingle();
3515
4106
  }
3516
4107
  }
3517
- onSubmit() {
4108
+ onSubmit(event) {
4109
+ event.preventDefault();
3518
4110
  if (!this.isLoginFormValid()) {
3519
4111
  this.messageService.add({
3520
4112
  severity: 'error',
@@ -3593,7 +4185,8 @@ class LoginPageComponent {
3593
4185
  }));
3594
4186
  }
3595
4187
  }
3596
- onSelectCompany() {
4188
+ onSelectCompany(event) {
4189
+ event.preventDefault();
3597
4190
  if (!this.isSelectionFormValid()) {
3598
4191
  this.messageService.add({
3599
4192
  severity: 'warn',
@@ -3706,8 +4299,8 @@ class LoginPageComponent {
3706
4299
  }
3707
4300
  }
3708
4301
  }
3709
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: LoginPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3710
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: LoginPageComponent, isStandalone: true, selector: "lib-login-page", inputs: { returnUrl: { classPropertyName: "returnUrl", publicName: "returnUrl", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
4302
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: LoginPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4303
+ 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: `
3711
4304
  <app-floating-configurator />
3712
4305
  <div
3713
4306
  class="bg-surface-ground flex items-center justify-center min-h-screen"
@@ -3774,7 +4367,7 @@ class LoginPageComponent {
3774
4367
  }}</span>
3775
4368
  </div>
3776
4369
 
3777
- <form (ngSubmit)="onSubmit()">
4370
+ <form (submit)="onSubmit($event)">
3778
4371
  <label
3779
4372
  for="email"
3780
4373
  class="block text-lg font-medium mb-2 text-color"
@@ -3908,7 +4501,7 @@ class LoginPageComponent {
3908
4501
  </div>
3909
4502
  </div>
3910
4503
 
3911
- <form (ngSubmit)="onSelectCompany()">
4504
+ <form (submit)="onSelectCompany($event)">
3912
4505
  <label
3913
4506
  for="company"
3914
4507
  class="block text-lg font-medium mb-2 text-color"
@@ -3978,17 +4571,25 @@ class LoginPageComponent {
3978
4571
  </div>
3979
4572
  </div>
3980
4573
  </div>
3981
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: UiModule }, { kind: "directive", type: i1$1.FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "variant", "rounded", "raised", "fluid", "disabled", "loading", "loadingIcon", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "component", type: i1$1.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: i1$1.InputTextDirective, selector: "[fInputText]", inputs: ["invalid", "touched", "variant", "size", "fluid"] }, { kind: "component", type: i1$1.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: i1$1.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"], outputs: ["onFilter", "onChange", "onShow", "onHide", "onBlur", "onFocus", "onClear", "onLazyLoad"] }, { kind: "component", type: i1$1.UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill", "severity"] }, { kind: "ngmodule", type: AngularModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { 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: i2.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" }] });
4574
+ `, 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"], 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" }] });
3982
4575
  }
3983
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: LoginPageComponent, decorators: [{
4576
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: LoginPageComponent, decorators: [{
3984
4577
  type: Component,
3985
4578
  args: [{
3986
4579
  selector: 'lib-login-page',
3987
- imports: [UiModule, AngularModule,
4580
+ imports: [
4581
+ CheckboxComponent,
4582
+ FButtonDirective,
4583
+ InputTextDirective,
4584
+ PasswordComponent,
4585
+ SelectComponent,
4586
+ UiIconComponent,
4587
+ RouterLink,
3988
4588
  FormField,
3989
4589
  AppFloatingConfigurator,
3990
4590
  SocialLoginButtonsComponent,
3991
- TranslatePipe,],
4591
+ TranslatePipe,
4592
+ ],
3992
4593
  template: `
3993
4594
  <app-floating-configurator />
3994
4595
  <div
@@ -4056,7 +4657,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
4056
4657
  }}</span>
4057
4658
  </div>
4058
4659
 
4059
- <form (ngSubmit)="onSubmit()">
4660
+ <form (submit)="onSubmit($event)">
4060
4661
  <label
4061
4662
  for="email"
4062
4663
  class="block text-lg font-medium mb-2 text-color"
@@ -4190,7 +4791,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
4190
4791
  </div>
4191
4792
  </div>
4192
4793
 
4193
- <form (ngSubmit)="onSelectCompany()">
4794
+ <form (submit)="onSelectCompany($event)">
4194
4795
  <label
4195
4796
  for="company"
4196
4797
  class="block text-lg font-medium mb-2 text-color"
@@ -4468,6 +5069,14 @@ class ProfilePageComponent {
4468
5069
  confirmPassword: '',
4469
5070
  }, /* @ts-ignore */
4470
5071
  ...(ngDevMode ? [{ debugName: "passwordModel" }] : /* istanbul ignore next */ []));
5072
+ passwordForm = form(this.passwordModel, (f) => {
5073
+ required(f.currentPassword, {
5074
+ message: this.translate('profile.current.password.required'),
5075
+ });
5076
+ required(f.newPassword, {
5077
+ message: this.translate('profile.new.password.required'),
5078
+ });
5079
+ });
4471
5080
  isPasswordLoading = signal(false, /* @ts-ignore */
4472
5081
  ...(ngDevMode ? [{ debugName: "isPasswordLoading" }] : /* istanbul ignore next */ []));
4473
5082
  isPasswordFormValid = computed(() => {
@@ -4700,8 +5309,8 @@ class ProfilePageComponent {
4700
5309
  error: () => { },
4701
5310
  });
4702
5311
  }
4703
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: ProfilePageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4704
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: ProfilePageComponent, isStandalone: true, selector: "lib-profile-page", ngImport: i0, template: `
5312
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: ProfilePageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5313
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: ProfilePageComponent, isStandalone: true, selector: "lib-profile-page", ngImport: i0, template: `
4705
5314
  <div class="mb-4 md:mb-6">
4706
5315
  <h1 class="text-2xl font-bold text-color mb-2">
4707
5316
  {{ 'profile.title' | translate }}
@@ -4814,10 +5423,8 @@ class ProfilePageComponent {
4814
5423
  </label>
4815
5424
  @if (field.component) {
4816
5425
  <ng-container
4817
- *ngComponentOutlet="
4818
- field.component;
4819
- injector: getFieldInjector(field)
4820
- "
5426
+ [ngComponentOutlet]="field.component"
5427
+ [ngComponentOutletInjector]="getFieldInjector(field)"
4821
5428
  />
4822
5429
  } @else if (field.template) {
4823
5430
  <ng-container
@@ -5032,9 +5639,7 @@ class ProfilePageComponent {
5032
5639
  >
5033
5640
  <f-password
5034
5641
  [inputId]="'currentPassword'"
5035
- name="currentPassword"
5036
- [ngModel]="passwordModel().currentPassword"
5037
- (ngModelChange)="updatePasswordField('currentPassword', $event)"
5642
+ [formField]="passwordForm.currentPassword"
5038
5643
  [placeholder]="'profile.current.password.placeholder' | translate"
5039
5644
  class="w-full"
5040
5645
  autocomplete="current-password"
@@ -5047,9 +5652,7 @@ class ProfilePageComponent {
5047
5652
  >
5048
5653
  <f-password
5049
5654
  [inputId]="'newPassword'"
5050
- name="newPassword"
5051
- [ngModel]="passwordModel().newPassword"
5052
- (ngModelChange)="updatePasswordField('newPassword', $event)"
5655
+ [formField]="passwordForm.newPassword"
5053
5656
  [placeholder]="'shared.min.characters' | translate: { count: 6 }"
5054
5657
  class="w-full"
5055
5658
  autocomplete="new-password"
@@ -5062,9 +5665,7 @@ class ProfilePageComponent {
5062
5665
  >
5063
5666
  <f-password
5064
5667
  [inputId]="'confirmPassword'"
5065
- name="confirmPassword"
5066
- [ngModel]="passwordModel().confirmPassword"
5067
- (ngModelChange)="updatePasswordField('confirmPassword', $event)"
5668
+ [formField]="passwordForm.confirmPassword"
5068
5669
  [placeholder]="'profile.confirm.password.placeholder' | translate"
5069
5670
  class="w-full"
5070
5671
  autocomplete="new-password"
@@ -5109,7 +5710,7 @@ class ProfilePageComponent {
5109
5710
  </div>
5110
5711
  <div class="section-content">
5111
5712
  @if (section.component) {
5112
- <ng-container *ngComponentOutlet="section.component" />
5713
+ <ng-container [ngComponentOutlet]="section.component" />
5113
5714
  }
5114
5715
  </div>
5115
5716
  </div>
@@ -5125,7 +5726,7 @@ class ProfilePageComponent {
5125
5726
  </div>
5126
5727
  <div class="section-content">
5127
5728
  @if (section.component) {
5128
- <ng-container *ngComponentOutlet="section.component" />
5729
+ <ng-container [ngComponentOutlet]="section.component" />
5129
5730
  }
5130
5731
  </div>
5131
5732
  </div>
@@ -5244,15 +5845,26 @@ class ProfilePageComponent {
5244
5845
  }
5245
5846
  </div>
5246
5847
  }
5247
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: UiModule }, { kind: "component", type: i1$1.AvatarComponent, selector: "f-avatar", inputs: ["label", "icon", "image", "shape", "size", "color", "styleClass", "ariaLabel", "ariaLabelledBy"], outputs: ["onImageError"] }, { kind: "directive", type: i1$1.FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "variant", "rounded", "raised", "fluid", "disabled", "loading", "loadingIcon", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "component", type: i1$1.SkeletonComponent, selector: "f-skeleton", inputs: ["width", "height", "size", "borderRadius", "shape", "animation", "styleClass"] }, { kind: "component", type: i1$1.TagComponent, selector: "f-tag", inputs: ["value", "severity", "icon", "rounded", "color", "styleClass", "style"] }, { kind: "component", type: i1$1.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: i1$1.InputTextDirective, selector: "[fInputText]", inputs: ["invalid", "touched", "variant", "size", "fluid"] }, { kind: "component", type: i1$1.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: i1$1.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"], outputs: ["onFilter", "onChange", "onShow", "onHide", "onBlur", "onFocus", "onClear", "onLazyLoad"] }, { kind: "directive", type: i1$1.TextareaDirective, selector: "[fTextarea]", inputs: ["invalid", "touched", "variant", "fluid", "autoResize"], outputs: ["onResize"] }, { kind: "component", type: i1$1.UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill", "severity"] }, { kind: "ngmodule", type: AngularModule }, { kind: "directive", type: i2$1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "directive", type: i2$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { 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: 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" }] });
5848
+ `, 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"], 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" }] });
5248
5849
  }
5249
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: ProfilePageComponent, decorators: [{
5850
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: ProfilePageComponent, decorators: [{
5250
5851
  type: Component,
5251
5852
  args: [{
5252
5853
  selector: 'lib-profile-page',
5253
5854
  imports: [
5254
- UiModule,
5255
- AngularModule,
5855
+ AvatarComponent,
5856
+ CheckboxComponent,
5857
+ FButtonDirective,
5858
+ InputTextDirective,
5859
+ PasswordComponent,
5860
+ SelectComponent,
5861
+ SkeletonComponent,
5862
+ TagComponent,
5863
+ TextareaDirective,
5864
+ UiIconComponent,
5865
+ FormsModule,
5866
+ NgComponentOutlet,
5867
+ NgTemplateOutlet,
5256
5868
  FormField,
5257
5869
  FileUploaderComponent,
5258
5870
  HasPermissionDirective,
@@ -5371,10 +5983,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
5371
5983
  </label>
5372
5984
  @if (field.component) {
5373
5985
  <ng-container
5374
- *ngComponentOutlet="
5375
- field.component;
5376
- injector: getFieldInjector(field)
5377
- "
5986
+ [ngComponentOutlet]="field.component"
5987
+ [ngComponentOutletInjector]="getFieldInjector(field)"
5378
5988
  />
5379
5989
  } @else if (field.template) {
5380
5990
  <ng-container
@@ -5589,9 +6199,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
5589
6199
  >
5590
6200
  <f-password
5591
6201
  [inputId]="'currentPassword'"
5592
- name="currentPassword"
5593
- [ngModel]="passwordModel().currentPassword"
5594
- (ngModelChange)="updatePasswordField('currentPassword', $event)"
6202
+ [formField]="passwordForm.currentPassword"
5595
6203
  [placeholder]="'profile.current.password.placeholder' | translate"
5596
6204
  class="w-full"
5597
6205
  autocomplete="current-password"
@@ -5604,9 +6212,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
5604
6212
  >
5605
6213
  <f-password
5606
6214
  [inputId]="'newPassword'"
5607
- name="newPassword"
5608
- [ngModel]="passwordModel().newPassword"
5609
- (ngModelChange)="updatePasswordField('newPassword', $event)"
6215
+ [formField]="passwordForm.newPassword"
5610
6216
  [placeholder]="'shared.min.characters' | translate: { count: 6 }"
5611
6217
  class="w-full"
5612
6218
  autocomplete="new-password"
@@ -5619,9 +6225,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
5619
6225
  >
5620
6226
  <f-password
5621
6227
  [inputId]="'confirmPassword'"
5622
- name="confirmPassword"
5623
- [ngModel]="passwordModel().confirmPassword"
5624
- (ngModelChange)="updatePasswordField('confirmPassword', $event)"
6228
+ [formField]="passwordForm.confirmPassword"
5625
6229
  [placeholder]="'profile.confirm.password.placeholder' | translate"
5626
6230
  class="w-full"
5627
6231
  autocomplete="new-password"
@@ -5666,7 +6270,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
5666
6270
  </div>
5667
6271
  <div class="section-content">
5668
6272
  @if (section.component) {
5669
- <ng-container *ngComponentOutlet="section.component" />
6273
+ <ng-container [ngComponentOutlet]="section.component" />
5670
6274
  }
5671
6275
  </div>
5672
6276
  </div>
@@ -5682,7 +6286,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
5682
6286
  </div>
5683
6287
  <div class="section-content">
5684
6288
  @if (section.component) {
5685
- <ng-container *ngComponentOutlet="section.component" />
6289
+ <ng-container [ngComponentOutlet]="section.component" />
5686
6290
  }
5687
6291
  </div>
5688
6292
  </div>
@@ -6136,8 +6740,8 @@ class RegisterPageComponent {
6136
6740
  },
6137
6741
  });
6138
6742
  }
6139
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: RegisterPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6140
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: RegisterPageComponent, isStandalone: true, selector: "lib-register-page", inputs: { returnUrl: { classPropertyName: "returnUrl", publicName: "returnUrl", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
6743
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: RegisterPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6744
+ 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: `
6141
6745
  <app-floating-configurator />
6142
6746
  <div
6143
6747
  class="bg-surface-ground flex items-center justify-center min-h-screen py-8"
@@ -6264,10 +6868,8 @@ class RegisterPageComponent {
6264
6868
  </label>
6265
6869
  @if (field.component) {
6266
6870
  <ng-container
6267
- *ngComponentOutlet="
6268
- field.component;
6269
- injector: getFieldInjector(field)
6270
- "
6871
+ [ngComponentOutlet]="field.component"
6872
+ [ngComponentOutletInjector]="getFieldInjector(field)"
6271
6873
  ></ng-container>
6272
6874
  } @else if (field.template) {
6273
6875
  <ng-container
@@ -6605,15 +7207,24 @@ class RegisterPageComponent {
6605
7207
  </div>
6606
7208
  </div>
6607
7209
  </div>
6608
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: UiModule }, { kind: "directive", type: i1$1.FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "variant", "rounded", "raised", "fluid", "disabled", "loading", "loadingIcon", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "component", type: i1$1.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: i1$1.InputTextDirective, selector: "[fInputText]", inputs: ["invalid", "touched", "variant", "size", "fluid"] }, { kind: "component", type: i1$1.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: i1$1.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"], outputs: ["onFilter", "onChange", "onShow", "onHide", "onBlur", "onFocus", "onClear", "onLazyLoad"] }, { kind: "directive", type: i1$1.TextareaDirective, selector: "[fTextarea]", inputs: ["invalid", "touched", "variant", "fluid", "autoResize"], outputs: ["onResize"] }, { kind: "component", type: i1$1.UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill", "severity"] }, { kind: "ngmodule", type: AngularModule }, { kind: "directive", type: i2$1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "directive", type: i2$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { 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: i2.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" }] });
7210
+ `, 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"], 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" }] });
6609
7211
  }
6610
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: RegisterPageComponent, decorators: [{
7212
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: RegisterPageComponent, decorators: [{
6611
7213
  type: Component,
6612
7214
  args: [{
6613
7215
  selector: 'lib-register-page',
6614
7216
  imports: [
6615
- UiModule,
6616
- AngularModule,
7217
+ CheckboxComponent,
7218
+ FButtonDirective,
7219
+ InputTextDirective,
7220
+ PasswordComponent,
7221
+ SelectComponent,
7222
+ TextareaDirective,
7223
+ UiIconComponent,
7224
+ FormsModule,
7225
+ NgComponentOutlet,
7226
+ NgTemplateOutlet,
7227
+ RouterLink,
6617
7228
  FormField,
6618
7229
  AppFloatingConfigurator,
6619
7230
  TranslatePipe,
@@ -6745,10 +7356,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
6745
7356
  </label>
6746
7357
  @if (field.component) {
6747
7358
  <ng-container
6748
- *ngComponentOutlet="
6749
- field.component;
6750
- injector: getFieldInjector(field)
6751
- "
7359
+ [ngComponentOutlet]="field.component"
7360
+ [ngComponentOutletInjector]="getFieldInjector(field)"
6752
7361
  ></ng-container>
6753
7362
  } @else if (field.template) {
6754
7363
  <ng-container
@@ -7151,7 +7760,8 @@ class ResetPasswordPageComponent {
7151
7760
  }
7152
7761
  });
7153
7762
  }
7154
- onSubmit() {
7763
+ onSubmit(event) {
7764
+ event.preventDefault();
7155
7765
  if (!this.canSubmit()) {
7156
7766
  this.messageService.add({
7157
7767
  severity: 'error',
@@ -7191,8 +7801,8 @@ class ResetPasswordPageComponent {
7191
7801
  },
7192
7802
  });
7193
7803
  }
7194
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: ResetPasswordPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7195
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: ResetPasswordPageComponent, isStandalone: true, selector: "lib-reset-password-page", ngImport: i0, template: `
7804
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: ResetPasswordPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7805
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: ResetPasswordPageComponent, isStandalone: true, selector: "lib-reset-password-page", ngImport: i0, template: `
7196
7806
  <app-floating-configurator />
7197
7807
  <div
7198
7808
  class="bg-surface-ground flex items-center justify-center min-h-screen"
@@ -7219,7 +7829,7 @@ class ResetPasswordPageComponent {
7219
7829
  </span>
7220
7830
  </div>
7221
7831
 
7222
- <form (ngSubmit)="onSubmit()">
7832
+ <form (submit)="onSubmit($event)">
7223
7833
  <label
7224
7834
  for="newPassword"
7225
7835
  class="block text-lg font-medium mb-2 text-color"
@@ -7340,15 +7950,17 @@ class ResetPasswordPageComponent {
7340
7950
  </div>
7341
7951
  </div>
7342
7952
  </div>
7343
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: AngularModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { 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: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "browserUrl", "routerLink"] }, { kind: "ngmodule", type: UiModule }, { kind: "directive", type: i1$1.FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "variant", "rounded", "raised", "fluid", "disabled", "loading", "loadingIcon", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "component", type: i1$1.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: i1$1.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" }] });
7953
+ `, 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" }] });
7344
7954
  }
7345
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: ResetPasswordPageComponent, decorators: [{
7955
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: ResetPasswordPageComponent, decorators: [{
7346
7956
  type: Component,
7347
7957
  args: [{
7348
7958
  selector: 'lib-reset-password-page',
7349
7959
  imports: [
7350
- AngularModule,
7351
- UiModule,
7960
+ RouterLink,
7961
+ FButtonDirective,
7962
+ PasswordComponent,
7963
+ UiIconComponent,
7352
7964
  FormField,
7353
7965
  AppFloatingConfigurator,
7354
7966
  TranslatePipe,
@@ -7380,7 +7992,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
7380
7992
  </span>
7381
7993
  </div>
7382
7994
 
7383
- <form (ngSubmit)="onSubmit()">
7995
+ <form (submit)="onSubmit($event)">
7384
7996
  <label
7385
7997
  for="newPassword"
7386
7998
  class="block text-lg font-medium mb-2 text-color"
@@ -7597,8 +8209,8 @@ class SocialCallbackPageComponent {
7597
8209
  translate(key, vars) {
7598
8210
  return this.translateAdapter?.translate(key, vars) ?? key;
7599
8211
  }
7600
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: SocialCallbackPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7601
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: SocialCallbackPageComponent, isStandalone: true, selector: "lib-social-callback-page", ngImport: i0, template: `
8212
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: SocialCallbackPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
8213
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: SocialCallbackPageComponent, isStandalone: true, selector: "lib-social-callback-page", ngImport: i0, template: `
7602
8214
  <app-floating-configurator />
7603
8215
  <div class="bg-surface-ground flex items-center justify-center min-h-screen">
7604
8216
  <div class="flex flex-col items-center gap-4 text-center px-4">
@@ -7619,13 +8231,13 @@ class SocialCallbackPageComponent {
7619
8231
  }
7620
8232
  </div>
7621
8233
  </div>
7622
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: UiModule }, { kind: "directive", type: i1$1.FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "variant", "rounded", "raised", "fluid", "disabled", "loading", "loadingIcon", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "component", type: i1$1.UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill", "severity"] }, { kind: "component", type: AppFloatingConfigurator, selector: "app-floating-configurator" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
8234
+ `, 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" }] });
7623
8235
  }
7624
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: SocialCallbackPageComponent, decorators: [{
8236
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: SocialCallbackPageComponent, decorators: [{
7625
8237
  type: Component,
7626
8238
  args: [{
7627
8239
  selector: 'lib-social-callback-page',
7628
- imports: [UiModule, TranslatePipe, AppFloatingConfigurator],
8240
+ imports: [FButtonDirective, UiIconComponent, TranslatePipe, AppFloatingConfigurator],
7629
8241
  template: `
7630
8242
  <app-floating-configurator />
7631
8243
  <div class="bg-surface-ground flex items-center justify-center min-h-screen">
@@ -7733,8 +8345,8 @@ class SocialConfigPageComponent {
7733
8345
  translate(key, vars) {
7734
8346
  return this.translateAdapter?.translate(key, vars) ?? key;
7735
8347
  }
7736
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: SocialConfigPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7737
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: SocialConfigPageComponent, isStandalone: true, selector: "lib-social-config-page", providers: [MessageService], ngImport: i0, template: `
8348
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: SocialConfigPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
8349
+ 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: `
7738
8350
  <div class="card">
7739
8351
  <div class="flex flex-col sm:flex-row justify-between items-start sm:items-center gap-3 mb-4">
7740
8352
  <div>
@@ -7853,13 +8465,21 @@ class SocialConfigPageComponent {
7853
8465
  </div>
7854
8466
  }
7855
8467
  </div>
7856
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: UiModule }, { kind: "directive", type: i1$1.FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "variant", "rounded", "raised", "fluid", "disabled", "loading", "loadingIcon", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "directive", type: i1$1.InputTextDirective, selector: "[fInputText]", inputs: ["invalid", "touched", "variant", "size", "fluid"] }, { kind: "component", type: i1$1.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: i1$1.ToggleSwitchComponent, selector: "f-toggleswitch", inputs: ["disabled", "readonly", "invalid", "ariaLabel", "trueValue", "falseValue", "inputId", "size", "tabindex", "styleClass", "style"] }, { kind: "component", type: i1$1.UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill", "severity"] }, { kind: "ngmodule", type: AngularModule }, { 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" }] });
8468
+ `, 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" }] });
7857
8469
  }
7858
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: SocialConfigPageComponent, decorators: [{
8470
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: SocialConfigPageComponent, decorators: [{
7859
8471
  type: Component,
7860
8472
  args: [{
7861
8473
  selector: 'lib-social-config-page',
7862
- imports: [UiModule, AngularModule, TranslatePipe],
8474
+ imports: [
8475
+ FButtonDirective,
8476
+ InputTextDirective,
8477
+ PasswordComponent,
8478
+ ToggleSwitchComponent,
8479
+ UiIconComponent,
8480
+ FormsModule,
8481
+ TranslatePipe,
8482
+ ],
7863
8483
  providers: [MessageService],
7864
8484
  template: `
7865
8485
  <div class="card">
@@ -8355,8 +8975,8 @@ class UserFormComponent {
8355
8975
  onCancel() {
8356
8976
  this.router.navigate(['/administration/users']);
8357
8977
  }
8358
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: UserFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
8359
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: UserFormComponent, isStandalone: true, selector: "lib-user-form", ngImport: i0, template: `
8978
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: UserFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
8979
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: UserFormComponent, isStandalone: true, selector: "lib-user-form", ngImport: i0, template: `
8360
8980
  <f-card>
8361
8981
  <ng-template #header>
8362
8982
  <div class="flex justify-between items-center p-4">
@@ -8451,10 +9071,8 @@ class UserFormComponent {
8451
9071
  </label>
8452
9072
  @if (field.component) {
8453
9073
  <ng-container
8454
- *ngComponentOutlet="
8455
- field.component;
8456
- injector: getFieldInjector(field)
8457
- "
9074
+ [ngComponentOutlet]="field.component"
9075
+ [ngComponentOutletInjector]="getFieldInjector(field)"
8458
9076
  />
8459
9077
  } @else if (field.template) {
8460
9078
  <ng-container
@@ -8651,13 +9269,28 @@ class UserFormComponent {
8651
9269
  </div>
8652
9270
  </form>
8653
9271
  </f-card>
8654
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: UiModule }, { kind: "directive", type: i1$1.FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "variant", "rounded", "raised", "fluid", "disabled", "loading", "loadingIcon", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "component", type: i1$1.SkeletonComponent, selector: "f-skeleton", inputs: ["width", "height", "size", "borderRadius", "shape", "animation", "styleClass"] }, { kind: "component", type: i1$1.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: i1$1.InputTextDirective, selector: "[fInputText]", inputs: ["invalid", "touched", "variant", "size", "fluid"] }, { kind: "component", type: i1$1.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: i1$1.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"], outputs: ["onFilter", "onChange", "onShow", "onHide", "onBlur", "onFocus", "onClear", "onLazyLoad"] }, { kind: "directive", type: i1$1.TextareaDirective, selector: "[fTextarea]", inputs: ["invalid", "touched", "variant", "fluid", "autoResize"], outputs: ["onResize"] }, { kind: "component", type: i1$1.CardComponent, selector: "f-card", inputs: ["header", "subheader", "styleClass", "style"] }, { kind: "component", type: i1$1.UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill", "severity"] }, { kind: "ngmodule", type: AngularModule }, { kind: "directive", type: i2$1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "directive", type: i2$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { 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: FormField, selector: "[formField]", inputs: ["formField"], exportAs: ["formField"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
9272
+ `, 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"], 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" }] });
8655
9273
  }
8656
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: UserFormComponent, decorators: [{
9274
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: UserFormComponent, decorators: [{
8657
9275
  type: Component,
8658
9276
  args: [{
8659
9277
  selector: 'lib-user-form',
8660
- imports: [UiModule, AngularModule, FormField, TranslatePipe],
9278
+ imports: [
9279
+ CardComponent,
9280
+ CheckboxComponent,
9281
+ FButtonDirective,
9282
+ InputTextDirective,
9283
+ PasswordComponent,
9284
+ SelectComponent,
9285
+ SkeletonComponent,
9286
+ TextareaDirective,
9287
+ UiIconComponent,
9288
+ FormsModule,
9289
+ NgComponentOutlet,
9290
+ NgTemplateOutlet,
9291
+ FormField,
9292
+ TranslatePipe,
9293
+ ],
8661
9294
  template: `
8662
9295
  <f-card>
8663
9296
  <ng-template #header>
@@ -8753,10 +9386,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
8753
9386
  </label>
8754
9387
  @if (field.component) {
8755
9388
  <ng-container
8756
- *ngComponentOutlet="
8757
- field.component;
8758
- injector: getFieldInjector(field)
8759
- "
9389
+ [ngComponentOutlet]="field.component"
9390
+ [ngComponentOutletInjector]="getFieldInjector(field)"
8760
9391
  />
8761
9392
  } @else if (field.template) {
8762
9393
  <ng-container
@@ -9069,8 +9700,8 @@ class UserBranchPermissionDialogComponent {
9069
9700
  onClose() {
9070
9701
  this.closed.emit();
9071
9702
  }
9072
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: UserBranchPermissionDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9073
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", 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: `
9703
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: UserBranchPermissionDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9704
+ 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: `
9074
9705
  <f-dialog
9075
9706
  [visible]="visible()"
9076
9707
  [modal]="true"
@@ -9157,15 +9788,19 @@ class UserBranchPermissionDialogComponent {
9157
9788
  </button>
9158
9789
  </ng-template>
9159
9790
  </f-dialog>
9160
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: AngularModule }, { 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: "ngmodule", type: UiModule }, { kind: "directive", type: i1$1.FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "variant", "rounded", "raised", "fluid", "disabled", "loading", "loadingIcon", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "component", type: i1$1.ProgressSpinnerComponent, selector: "f-progressspinner", inputs: ["size", "strokeWidth", "animationDuration", "styleClass", "ariaLabel"] }, { kind: "component", type: i1$1.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: i1$1.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"], outputs: ["onFilter", "onChange", "onShow", "onHide", "onBlur", "onFocus", "onClear", "onLazyLoad"] }, { kind: "component", type: i1$1.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: "pipe", type: TranslatePipe, name: "translate" }] });
9791
+ `, 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"], outputs: ["onFilter", "onChange", "onShow", "onHide", "onBlur", "onFocus", "onClear", "onLazyLoad"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
9161
9792
  }
9162
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: UserBranchPermissionDialogComponent, decorators: [{
9793
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: UserBranchPermissionDialogComponent, decorators: [{
9163
9794
  type: Component,
9164
9795
  args: [{
9165
9796
  selector: 'lib-user-branch-permission-dialog',
9166
9797
  imports: [
9167
- AngularModule,
9168
- UiModule,
9798
+ FormsModule,
9799
+ CheckboxComponent,
9800
+ DialogComponent,
9801
+ FButtonDirective,
9802
+ ProgressSpinnerComponent,
9803
+ SelectComponent,
9169
9804
  TranslatePipe,
9170
9805
  ],
9171
9806
  template: `
@@ -9320,43 +9955,34 @@ class UserCompanyPermissionDialogComponent {
9320
9955
  this.isLoading.set(false);
9321
9956
  }
9322
9957
  }
9323
- async onCompanyToggle(company) {
9958
+ async onCompanyToggle(company, isAssigned) {
9324
9959
  const currentUser = this.user();
9325
9960
  if (!currentUser)
9326
9961
  return;
9327
9962
  this.isSaving.set(true);
9328
9963
  try {
9329
- if (company.isAssigned) {
9330
- const response = await firstValueFrom(this.permissionApi.assignUserToCompany(currentUser.id, company.id));
9331
- if (response.success) {
9964
+ const response = isAssigned
9965
+ ? await firstValueFrom(this.permissionApi.assignUserToCompany(currentUser.id, company.id))
9966
+ : await firstValueFrom(this.permissionApi.revokeUserFromCompany(currentUser.id, company.id));
9967
+ if (response.success) {
9968
+ if (isAssigned)
9332
9969
  this.assignedCompanyIds.add(company.id);
9333
- this.messageService.add({
9334
- severity: 'success',
9335
- summary: this.t('shared.success'),
9336
- detail: response?.messageKey
9337
- ? this.t(response.messageKey, response.messageVariables)
9338
- : (response?.message ?? ''),
9339
- });
9340
- this.permissionsChanged.emit();
9341
- }
9342
- }
9343
- else {
9344
- const response = await firstValueFrom(this.permissionApi.revokeUserFromCompany(currentUser.id, company.id));
9345
- if (response.success) {
9970
+ else
9346
9971
  this.assignedCompanyIds.delete(company.id);
9347
- this.messageService.add({
9348
- severity: 'success',
9349
- summary: this.t('shared.success'),
9350
- detail: response?.messageKey
9351
- ? this.t(response.messageKey, response.messageVariables)
9352
- : (response?.message ?? ''),
9353
- });
9354
- this.permissionsChanged.emit();
9355
- }
9972
+ this.companies.update((list) => list.map((c) => (c.id === company.id ? { ...c, isAssigned } : c)));
9973
+ this.messageService.add({
9974
+ severity: 'success',
9975
+ summary: this.t('shared.success'),
9976
+ detail: response?.messageKey
9977
+ ? this.t(response.messageKey, response.messageVariables)
9978
+ : (response?.message ?? ''),
9979
+ });
9980
+ this.permissionsChanged.emit();
9356
9981
  }
9357
9982
  }
9358
9983
  catch {
9359
- company.isAssigned = !company.isAssigned;
9984
+ // Signal was never optimistically updated, so the checkbox already
9985
+ // reflects the pre-toggle state once change detection re-runs below.
9360
9986
  }
9361
9987
  finally {
9362
9988
  this.isSaving.set(false);
@@ -9365,8 +9991,8 @@ class UserCompanyPermissionDialogComponent {
9365
9991
  onClose() {
9366
9992
  this.closed.emit();
9367
9993
  }
9368
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: UserCompanyPermissionDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9369
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", 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: `
9994
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: UserCompanyPermissionDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9995
+ 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: `
9370
9996
  <f-dialog
9371
9997
  [visible]="visible()"
9372
9998
  [modal]="true"
@@ -9392,11 +10018,11 @@ class UserCompanyPermissionDialogComponent {
9392
10018
  @for (company of companies(); track company.id) {
9393
10019
  <div class="flex items-center p-3 border border-surface rounded">
9394
10020
  <f-checkbox
9395
- [(ngModel)]="company.isAssigned"
10021
+ [ngModel]="company.isAssigned"
9396
10022
  [binary]="true"
9397
10023
  [inputId]="'company-' + company.id"
9398
10024
  [disabled]="isSaving()"
9399
- (onChange)="onCompanyToggle(company)"
10025
+ (onChange)="onCompanyToggle(company, $event.checked)"
9400
10026
  />
9401
10027
  <label
9402
10028
  [for]="'company-' + company.id"
@@ -9426,15 +10052,18 @@ class UserCompanyPermissionDialogComponent {
9426
10052
  </button>
9427
10053
  </ng-template>
9428
10054
  </f-dialog>
9429
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: AngularModule }, { 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: "ngmodule", type: UiModule }, { kind: "directive", type: i1$1.FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "variant", "rounded", "raised", "fluid", "disabled", "loading", "loadingIcon", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "component", type: i1$1.ProgressSpinnerComponent, selector: "f-progressspinner", inputs: ["size", "strokeWidth", "animationDuration", "styleClass", "ariaLabel"] }, { kind: "component", type: i1$1.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: i1$1.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: "pipe", type: TranslatePipe, name: "translate" }] });
10055
+ `, 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" }] });
9430
10056
  }
9431
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: UserCompanyPermissionDialogComponent, decorators: [{
10057
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: UserCompanyPermissionDialogComponent, decorators: [{
9432
10058
  type: Component,
9433
10059
  args: [{
9434
10060
  selector: 'lib-user-company-permission-dialog',
9435
10061
  imports: [
9436
- AngularModule,
9437
- UiModule,
10062
+ FormsModule,
10063
+ CheckboxComponent,
10064
+ DialogComponent,
10065
+ FButtonDirective,
10066
+ ProgressSpinnerComponent,
9438
10067
  TranslatePipe,
9439
10068
  ],
9440
10069
  template: `
@@ -9463,11 +10092,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
9463
10092
  @for (company of companies(); track company.id) {
9464
10093
  <div class="flex items-center p-3 border border-surface rounded">
9465
10094
  <f-checkbox
9466
- [(ngModel)]="company.isAssigned"
10095
+ [ngModel]="company.isAssigned"
9467
10096
  [binary]="true"
9468
10097
  [inputId]="'company-' + company.id"
9469
10098
  [disabled]="isSaving()"
9470
- (onChange)="onCompanyToggle(company)"
10099
+ (onChange)="onCompanyToggle(company, $event.checked)"
9471
10100
  />
9472
10101
  <label
9473
10102
  [for]="'company-' + company.id"
@@ -9641,8 +10270,8 @@ class UserListComponent {
9641
10270
  },
9642
10271
  });
9643
10272
  }
9644
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: UserListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9645
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: UserListComponent, isStandalone: true, selector: "lib-user-list", ngImport: i0, template: `
10273
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: UserListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
10274
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: UserListComponent, isStandalone: true, selector: "lib-user-list", ngImport: i0, template: `
9646
10275
  <f-card>
9647
10276
  <ng-template #header>
9648
10277
  <div
@@ -9932,17 +10561,26 @@ class UserListComponent {
9932
10561
  }
9933
10562
  </f-dialog>
9934
10563
  }
9935
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: UiModule }, { kind: "directive", type: i1$1.FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "variant", "rounded", "raised", "fluid", "disabled", "loading", "loadingIcon", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "component", type: i1$1.TagComponent, selector: "f-tag", inputs: ["value", "severity", "icon", "rounded", "color", "styleClass", "style"] }, { kind: "component", type: i1$1.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: "component", type: i1$1.CardComponent, selector: "f-card", inputs: ["header", "subheader", "styleClass", "style"] }, { kind: "component", type: i1$1.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: "directive", type: i1$1.TooltipDirective, selector: "[fTooltip]", inputs: ["fTooltip", "tooltipPosition", "positionStyle", "tooltipStyleClass", "disabled", "tooltipEvent", "showDelay", "hideDelay", "life", "autoHide", "positionTop", "positionLeft", "escape"] }, { kind: "component", type: i1$1.UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill", "severity"] }, { kind: "ngmodule", type: AngularModule }, { kind: "directive", type: i2$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { 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" }] });
10564
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { 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: 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" }] });
9936
10565
  }
9937
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: UserListComponent, decorators: [{
10566
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: UserListComponent, decorators: [{
9938
10567
  type: Component,
9939
10568
  args: [{
9940
10569
  selector: 'lib-user-list',
9941
- imports: [UiModule, AngularModule,
10570
+ imports: [
10571
+ NgTemplateOutlet,
10572
+ CardComponent,
10573
+ DialogComponent,
10574
+ FButtonDirective,
10575
+ TableComponent,
10576
+ TagComponent,
10577
+ TooltipDirective,
10578
+ UiIconComponent,
9942
10579
  HasPermissionDirective,
9943
10580
  TranslatePipe,
9944
10581
  UserCompanyPermissionDialogComponent,
9945
- UserBranchPermissionDialogComponent,],
10582
+ UserBranchPermissionDialogComponent,
10583
+ ],
9946
10584
  template: `
9947
10585
  <f-card>
9948
10586
  <ng-template #header>
@@ -10338,7 +10976,8 @@ class VerifyEmailPageComponent {
10338
10976
  this.pageState.set('resend');
10339
10977
  this.resendSuccess.set(false);
10340
10978
  }
10341
- onResend() {
10979
+ onResend(event) {
10980
+ event.preventDefault();
10342
10981
  if (!this.isResendFormValid()) {
10343
10982
  this.messageService.add({
10344
10983
  severity: 'error',
@@ -10371,8 +11010,8 @@ class VerifyEmailPageComponent {
10371
11010
  this.submittedEmail.set(email);
10372
11011
  this.resendSuccess.set(true);
10373
11012
  }
10374
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: VerifyEmailPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
10375
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: VerifyEmailPageComponent, isStandalone: true, selector: "lib-verify-email-page", ngImport: i0, template: `
11013
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: VerifyEmailPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
11014
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: VerifyEmailPageComponent, isStandalone: true, selector: "lib-verify-email-page", ngImport: i0, template: `
10376
11015
  <app-floating-configurator />
10377
11016
  <div
10378
11017
  class="bg-surface-ground flex items-center justify-center min-h-screen"
@@ -10465,7 +11104,7 @@ class VerifyEmailPageComponent {
10465
11104
  </div>
10466
11105
 
10467
11106
  @if (!resendSuccess()) {
10468
- <form (ngSubmit)="onResend()">
11107
+ <form (submit)="onResend($event)">
10469
11108
  <label
10470
11109
  for="email"
10471
11110
  class="block text-lg font-medium mb-2 text-color"
@@ -10525,15 +11164,17 @@ class VerifyEmailPageComponent {
10525
11164
  </div>
10526
11165
  </div>
10527
11166
  </div>
10528
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: AngularModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { 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: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "browserUrl", "routerLink"] }, { kind: "ngmodule", type: UiModule }, { kind: "directive", type: i1$1.FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "variant", "rounded", "raised", "fluid", "disabled", "loading", "loadingIcon", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "directive", type: i1$1.InputTextDirective, selector: "[fInputText]", inputs: ["invalid", "touched", "variant", "size", "fluid"] }, { kind: "component", type: i1$1.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" }] });
11167
+ `, 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" }] });
10529
11168
  }
10530
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: VerifyEmailPageComponent, decorators: [{
11169
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: VerifyEmailPageComponent, decorators: [{
10531
11170
  type: Component,
10532
11171
  args: [{
10533
11172
  selector: 'lib-verify-email-page',
10534
11173
  imports: [
10535
- AngularModule,
10536
- UiModule,
11174
+ RouterLink,
11175
+ FButtonDirective,
11176
+ InputTextDirective,
11177
+ UiIconComponent,
10537
11178
  FormField,
10538
11179
  AppFloatingConfigurator,
10539
11180
  TranslatePipe,
@@ -10631,7 +11272,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
10631
11272
  </div>
10632
11273
 
10633
11274
  @if (!resendSuccess()) {
10634
- <form (ngSubmit)="onResend()">
11275
+ <form (submit)="onResend($event)">
10635
11276
  <label
10636
11277
  for="email"
10637
11278
  class="block text-lg font-medium mb-2 text-color"
@@ -10709,5 +11350,5 @@ var verifyEmailPage_component = /*#__PURE__*/Object.freeze({
10709
11350
  * Generated bundle index. Do not edit.
10710
11351
  */
10711
11352
 
10712
- 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, CompanyApiService, CompanyFormComponent, CompanyListComponent, 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 };
11353
+ 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 };
10713
11354
  //# sourceMappingURL=flusys-ng-auth.mjs.map