@flusys/ng-iam 5.4.1 → 6.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (25) hide show
  1. package/fesm2022/{flusys-ng-iam-action-form-page.component-BQJkl9pU.mjs → flusys-ng-iam-action-form-page.component-DTJT8Dc-.mjs} +102 -91
  2. package/fesm2022/flusys-ng-iam-action-form-page.component-DTJT8Dc-.mjs.map +1 -0
  3. package/fesm2022/{flusys-ng-iam-action-list-page.component-BJ-tu6vu.mjs → flusys-ng-iam-action-list-page.component-B1hUE4lD.mjs} +71 -64
  4. package/fesm2022/flusys-ng-iam-action-list-page.component-B1hUE4lD.mjs.map +1 -0
  5. package/fesm2022/{flusys-ng-iam-flusys-ng-iam-Bb39q1Bu.mjs → flusys-ng-iam-flusys-ng-iam-DzIO0zsO.mjs} +632 -547
  6. package/fesm2022/flusys-ng-iam-flusys-ng-iam-DzIO0zsO.mjs.map +1 -0
  7. package/fesm2022/flusys-ng-iam-iam-container.component-D0m8u6nu.mjs +105 -0
  8. package/fesm2022/flusys-ng-iam-iam-container.component-D0m8u6nu.mjs.map +1 -0
  9. package/fesm2022/{flusys-ng-iam-permission-page.component-D4IHueFW.mjs → flusys-ng-iam-permission-page.component-rcijgKmE.mjs} +33 -28
  10. package/fesm2022/flusys-ng-iam-permission-page.component-rcijgKmE.mjs.map +1 -0
  11. package/fesm2022/{flusys-ng-iam-role-form-page.component-CX8LxsdO.mjs → flusys-ng-iam-role-form-page.component-DrUQ0taO.mjs} +62 -47
  12. package/fesm2022/flusys-ng-iam-role-form-page.component-DrUQ0taO.mjs.map +1 -0
  13. package/fesm2022/{flusys-ng-iam-role-list-page.component-CNOsO-gH.mjs → flusys-ng-iam-role-list-page.component-BcS9_ysT.mjs} +77 -65
  14. package/fesm2022/flusys-ng-iam-role-list-page.component-BcS9_ysT.mjs.map +1 -0
  15. package/fesm2022/flusys-ng-iam.mjs +1 -1
  16. package/package.json +10 -11
  17. package/types/flusys-ng-iam.d.ts +2 -2
  18. package/fesm2022/flusys-ng-iam-action-form-page.component-BQJkl9pU.mjs.map +0 -1
  19. package/fesm2022/flusys-ng-iam-action-list-page.component-BJ-tu6vu.mjs.map +0 -1
  20. package/fesm2022/flusys-ng-iam-flusys-ng-iam-Bb39q1Bu.mjs.map +0 -1
  21. package/fesm2022/flusys-ng-iam-iam-container.component-DAiS1Mtk.mjs +0 -118
  22. package/fesm2022/flusys-ng-iam-iam-container.component-DAiS1Mtk.mjs.map +0 -1
  23. package/fesm2022/flusys-ng-iam-permission-page.component-D4IHueFW.mjs.map +0 -1
  24. package/fesm2022/flusys-ng-iam-role-form-page.component-CX8LxsdO.mjs.map +0 -1
  25. package/fesm2022/flusys-ng-iam-role-list-page.component-CNOsO-gH.mjs.map +0 -1
@@ -1,8 +1,9 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { Injectable, inject, signal, input, output, effect, Component, computed, DestroyRef } from '@angular/core';
3
- import { ApiResourceService, TranslateService, PermissionValidatorService, AngularModule, PrimeModule, TranslatePipe, ROLE_ACTION_PERMISSIONS, HasPermissionDirective, COMPANY_ACTION_PERMISSIONS, COMPANY_API_PROVIDER, USER_ROLE_PERMISSIONS, USER_PERMISSION_PROVIDER, UserSelectComponent, USER_ACTION_PERMISSIONS, PROFILE_PERMISSION_PROVIDER, permissionGuard, ACTION_PERMISSIONS, ROLE_PERMISSIONS, anyPermissionGuard, resolveTranslationModule, SHARED_MESSAGES } from '@flusys/ng-shared';
3
+ import { ApiResourceService, TranslateService, PermissionValidatorService, AngularModule, TranslatePipe, ROLE_ACTION_PERMISSIONS, HasPermissionDirective, COMPANY_ACTION_PERMISSIONS, COMPANY_API_PROVIDER, USER_ROLE_PERMISSIONS, USER_PERMISSION_PROVIDER, UserSelectComponent, USER_ACTION_PERMISSIONS, PROFILE_PERMISSION_PROVIDER, permissionGuard, ACTION_PERMISSIONS, ROLE_PERMISSIONS, anyPermissionGuard, resolveTranslationModule, SHARED_MESSAGES } from '@flusys/ng-shared';
4
4
  import { APP_CONFIG, getServiceUrl, BaseApiService, isCompanyFeatureEnabled } from '@flusys/ng-core';
5
- import { ConfirmationService, MessageService } from 'primeng/api';
5
+ import * as i2 from '@flusys/ng-ui';
6
+ import { ConfirmationService, MessageService, UiModule } from '@flusys/ng-ui';
6
7
  import { HttpClient } from '@angular/common/http';
7
8
  import { of, firstValueFrom, map as map$1 } from 'rxjs';
8
9
  import { tap, catchError, map } from 'rxjs/operators';
@@ -10,14 +11,7 @@ import * as i1 from '@angular/common';
10
11
  import { CommonModule } from '@angular/common';
11
12
  import * as i1$1 from '@angular/forms';
12
13
  import { FormsModule } from '@angular/forms';
13
- import * as i2 from 'primeng/button';
14
- import * as i6 from 'primeng/tooltip';
15
- import * as i3 from 'primeng/checkbox';
16
- import * as i4 from 'primeng/select';
17
- import * as i5 from 'primeng/tag';
18
- import * as i7 from 'primeng/treetable';
19
14
  import { LAYOUT_AUTH_STATE } from '@flusys/ng-layout';
20
- import * as i5$1 from 'primeng/table';
21
15
 
22
16
  /** Must match backend ActionType enum */
23
17
  var ActionType;
@@ -227,10 +221,10 @@ class RoleApiService extends ApiResourceService {
227
221
  constructor() {
228
222
  super('roles', 'iam');
229
223
  }
230
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: RoleApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
231
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: RoleApiService, providedIn: 'root' });
224
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: RoleApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
225
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: RoleApiService, providedIn: 'root' });
232
226
  }
233
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: RoleApiService, decorators: [{
227
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: RoleApiService, decorators: [{
234
228
  type: Injectable,
235
229
  args: [{ providedIn: 'root' }]
236
230
  }], ctorParameters: () => [] });
@@ -257,10 +251,10 @@ class ActionApiService extends ApiResourceService {
257
251
  const iamBaseUrl = getServiceUrl(this.appConfig, 'iam');
258
252
  return this.http.post(`${iamBaseUrl}/actions/tree`, body);
259
253
  }
260
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: ActionApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
261
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: ActionApiService, providedIn: 'root' });
254
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: ActionApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
255
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: ActionApiService, providedIn: 'root' });
262
256
  }
263
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: ActionApiService, decorators: [{
257
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: ActionApiService, decorators: [{
264
258
  type: Injectable,
265
259
  args: [{ providedIn: 'root' }]
266
260
  }], ctorParameters: () => [] });
@@ -403,11 +397,11 @@ class ActionPermissionLogicService {
403
397
  this.confirmationService.confirm({
404
398
  header: this.t('iam.logic.validation.failed'),
405
399
  message: `${this.t('iam.logic.validation.failed.message')}<br/><br/><ul class="pl-4">${errorList}</ul><br/>${this.t('iam.logic.validation.failed.prompt')}`,
406
- icon: 'pi pi-exclamation-triangle',
400
+ icon: 'exclamation-triangle',
407
401
  acceptLabel: this.t('iam.logic.auto.fix'),
408
402
  rejectLabel: this.t('shared.cancel'),
409
- acceptIcon: 'pi pi-trash',
410
- rejectIcon: 'pi pi-times',
403
+ acceptIcon: 'trash',
404
+ rejectIcon: 'times',
411
405
  acceptButtonStyleClass: 'p-button-warning',
412
406
  closeOnEscape: false,
413
407
  closable: false,
@@ -419,7 +413,7 @@ class ActionPermissionLogicService {
419
413
  });
420
414
  onUpdate(selMap);
421
415
  this.messageService.add({
422
- severity: 'warning',
416
+ severity: 'warn',
423
417
  summary: this.t('iam.logic.invalid.actions.removed'),
424
418
  detail: this.t('iam.logic.removed.actions.detail', {
425
419
  count: invalidActions.length,
@@ -532,11 +526,11 @@ class ActionPermissionLogicService {
532
526
  this.confirmationService.confirm({
533
527
  header: this.t('iam.logic.missing.prerequisites'),
534
528
  message: `<strong>${sanitizedActionName}</strong> ${this.t('iam.logic.requires.conditions')}<br/><br/>${logicMessage}<br/><br/><strong>${autoSelectPrompt}</strong><br/>${this.t('iam.logic.would.you.continue')}`,
535
- icon: 'pi pi-exclamation-triangle',
529
+ icon: 'exclamation-triangle',
536
530
  acceptLabel,
537
531
  rejectLabel: this.t('shared.cancel'),
538
- acceptIcon: 'pi pi-check',
539
- rejectIcon: 'pi pi-times',
532
+ acceptIcon: 'check',
533
+ rejectIcon: 'times',
540
534
  closeOnEscape: false,
541
535
  closable: false,
542
536
  accept: () => {
@@ -584,13 +578,13 @@ class ActionPermissionLogicService {
584
578
  this.confirmationService.confirm({
585
579
  header: this.t('iam.logic.dependency.warning'),
586
580
  message,
587
- icon: 'pi pi-exclamation-triangle',
581
+ icon: 'exclamation-triangle',
588
582
  acceptLabel: alternatives.length > 0
589
583
  ? this.t('iam.logic.use.alternatives')
590
584
  : this.t('iam.logic.remove.all'),
591
585
  rejectLabel: this.t('shared.cancel'),
592
- acceptIcon: 'pi pi-check',
593
- rejectIcon: 'pi pi-times',
586
+ acceptIcon: 'check',
587
+ rejectIcon: 'times',
594
588
  closeOnEscape: false,
595
589
  closable: false,
596
590
  accept: () => {
@@ -794,10 +788,10 @@ class ActionPermissionLogicService {
794
788
  }
795
789
  return `${indent}${this.t('iam.logic.invalid')}`;
796
790
  }
797
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: ActionPermissionLogicService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
798
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: ActionPermissionLogicService, providedIn: 'root' });
791
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: ActionPermissionLogicService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
792
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: ActionPermissionLogicService, providedIn: 'root' });
799
793
  }
800
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: ActionPermissionLogicService, decorators: [{
794
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: ActionPermissionLogicService, decorators: [{
801
795
  type: Injectable,
802
796
  args: [{ providedIn: 'root' }]
803
797
  }] });
@@ -830,10 +824,10 @@ class PermissionApiService extends BaseApiService {
830
824
  getCompanyActions(companyId) {
831
825
  return this.http.post(this.getUrl('permissions/get-company-actions'), { companyId });
832
826
  }
833
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: PermissionApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
834
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: PermissionApiService, providedIn: 'root' });
827
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: PermissionApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
828
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: PermissionApiService, providedIn: 'root' });
835
829
  }
836
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: PermissionApiService, decorators: [{
830
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: PermissionApiService, decorators: [{
837
831
  type: Injectable,
838
832
  args: [{ providedIn: 'root' }]
839
833
  }], ctorParameters: () => [] });
@@ -857,10 +851,10 @@ class MyPermissionsApiService {
857
851
  getMyPermissions(dto = {}) {
858
852
  return this.http.post(`${this.baseUrl}/my-permissions`, dto);
859
853
  }
860
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: MyPermissionsApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
861
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: MyPermissionsApiService, providedIn: 'root' });
854
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: MyPermissionsApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
855
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: MyPermissionsApiService, providedIn: 'root' });
862
856
  }
863
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: MyPermissionsApiService, decorators: [{
857
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: MyPermissionsApiService, decorators: [{
864
858
  type: Injectable,
865
859
  args: [{
866
860
  providedIn: 'root',
@@ -870,9 +864,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
870
864
  class PermissionStateService {
871
865
  permissionApi = inject(MyPermissionsApiService);
872
866
  permissionValidator = inject(PermissionValidatorService);
873
- _permissions = signal(null, ...(ngDevMode ? [{ debugName: "_permissions" }] : []));
867
+ _permissions = signal(null, /* @ts-ignore */
868
+ ...(ngDevMode ? [{ debugName: "_permissions" }] : /* istanbul ignore next */ []));
874
869
  permissions = this._permissions.asReadonly();
875
- _isLoading = signal(false, ...(ngDevMode ? [{ debugName: "_isLoading" }] : []));
870
+ _isLoading = signal(false, /* @ts-ignore */
871
+ ...(ngDevMode ? [{ debugName: "_isLoading" }] : /* istanbul ignore next */ []));
876
872
  isLoading = this._isLoading.asReadonly();
877
873
  loadPermissions(dto) {
878
874
  this._isLoading.set(true);
@@ -891,10 +887,10 @@ class PermissionStateService {
891
887
  isLoaded() {
892
888
  return this._permissions() !== null && this.permissionValidator.isPermissionsLoaded();
893
889
  }
894
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: PermissionStateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
895
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: PermissionStateService, providedIn: 'root' });
890
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: PermissionStateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
891
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: PermissionStateService, providedIn: 'root' });
896
892
  }
897
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: PermissionStateService, decorators: [{
893
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: PermissionStateService, decorators: [{
898
894
  type: Injectable,
899
895
  args: [{ providedIn: 'root' }]
900
896
  }] });
@@ -928,11 +924,14 @@ function createActionNode(actionId = '') {
928
924
  }
929
925
  /** Visual builder for AND/OR permission logic trees */
930
926
  class LogicBuilderComponent {
931
- logic = input(null, ...(ngDevMode ? [{ debugName: "logic" }] : []));
932
- actions = input([], ...(ngDevMode ? [{ debugName: "actions" }] : []));
927
+ logic = input(null, /* @ts-ignore */
928
+ ...(ngDevMode ? [{ debugName: "logic" }] : /* istanbul ignore next */ []));
929
+ actions = input([], /* @ts-ignore */
930
+ ...(ngDevMode ? [{ debugName: "actions" }] : /* istanbul ignore next */ []));
933
931
  logicChange = output();
934
932
  /** Internal builder tree state (private writable + public readonly pattern) */
935
- _builderTree = signal(null, ...(ngDevMode ? [{ debugName: "_builderTree" }] : []));
933
+ _builderTree = signal(null, /* @ts-ignore */
934
+ ...(ngDevMode ? [{ debugName: "_builderTree" }] : /* istanbul ignore next */ []));
936
935
  builderLogic = this._builderTree.asReadonly();
937
936
  constructor() {
938
937
  effect(() => {
@@ -943,7 +942,7 @@ class LogicBuilderComponent {
943
942
  else if (!this._builderTree()) {
944
943
  this._builderTree.set(toBuilderNode(logic));
945
944
  }
946
- }, { allowSignalWrites: true });
945
+ });
947
946
  }
948
947
  initializeLogic() {
949
948
  this.updateTreeAndEmit(createGroupNode());
@@ -1010,29 +1009,33 @@ class LogicBuilderComponent {
1010
1009
  .map((child) => this.removeNodeFromTree(child, targetId)),
1011
1010
  };
1012
1011
  }
1013
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: LogicBuilderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1014
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.5", type: LogicBuilderComponent, isStandalone: true, selector: "lib-logic-builder", inputs: { logic: { classPropertyName: "logic", publicName: "logic", isSignal: true, isRequired: false, transformFunction: null }, actions: { classPropertyName: "actions", publicName: "actions", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { logicChange: "logicChange" }, ngImport: i0, template: `
1012
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: LogicBuilderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1013
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: LogicBuilderComponent, isStandalone: true, selector: "lib-logic-builder", inputs: { logic: { classPropertyName: "logic", publicName: "logic", isSignal: true, isRequired: false, transformFunction: null }, actions: { classPropertyName: "actions", publicName: "actions", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { logicChange: "logicChange" }, ngImport: i0, template: `
1015
1014
  <div class="logic-builder">
1016
1015
  <div class="flex justify-between items-center mb-3">
1017
1016
  <h4 class="text-sm font-semibold m-0">
1018
1017
  {{ 'iam.logic.title' | translate }}
1019
1018
  </h4>
1020
1019
  @if (!builderLogic()) {
1021
- <p-button
1022
- [label]="'iam.logic.add.logic' | translate"
1023
- icon="pi pi-plus"
1020
+ <button
1021
+ fButton
1024
1022
  size="small"
1025
- (onClick)="initializeLogic()"
1026
- />
1023
+ (click)="initializeLogic()"
1024
+ >
1025
+ <ui-icon pButtonIcon name="plus"></ui-icon>
1026
+ <span pButtonLabel>{{ 'iam.logic.add.logic' | translate }}</span>
1027
+ </button>
1027
1028
  } @else {
1028
- <p-button
1029
- [label]="'iam.logic.clear.logic' | translate"
1030
- icon="pi pi-trash"
1029
+ <button
1030
+ fButton
1031
1031
  size="small"
1032
1032
  severity="danger"
1033
1033
  [outlined]="true"
1034
- (onClick)="clearLogic()"
1035
- />
1034
+ (click)="clearLogic()"
1035
+ >
1036
+ <ui-icon pButtonIcon name="trash"></ui-icon>
1037
+ <span pButtonLabel>{{ 'iam.logic.clear.logic' | translate }}</span>
1038
+ </button>
1036
1039
  }
1037
1040
  </div>
1038
1041
 
@@ -1059,21 +1062,26 @@ class LogicBuilderComponent {
1059
1062
  <ng-template #nodeTemplate let-node let-depth="depth">
1060
1063
  <div
1061
1064
  class="p-3 border-b border-surface"
1062
- [ngClass]="depth % 2 === 0 ? 'bg-surface-0' : 'bg-surface-50'"
1065
+ [class.bg-surface-0]="depth % 2 === 0"
1066
+ [class.bg-surface-50]="depth % 2 !== 0"
1063
1067
  >
1064
1068
  <div class="flex items-center gap-3 mb-2">
1065
- <span class="node-type" [ngClass]="node.type">{{
1066
- node.type.toUpperCase()
1067
- }}</span>
1069
+ <span
1070
+ class="node-type"
1071
+ [class.group]="node.type === 'group'"
1072
+ [class.action]="node.type === 'action'"
1073
+ >{{ node.type.toUpperCase() }}</span
1074
+ >
1068
1075
 
1069
1076
  <div class="flex-1 flex items-center gap-2">
1070
1077
  @if (node.type === 'group') {
1071
1078
  <!-- Group: show operator toggle -->
1072
1079
  <span
1073
1080
  class="operator-badge"
1074
- [ngClass]="node.operator === 'AND' ? 'and' : 'or'"
1081
+ [class.and]="node.operator === 'AND'"
1082
+ [class.or]="node.operator !== 'AND'"
1075
1083
  (click)="toggleOperator(node.id)"
1076
- [title]="'iam.logic.click.to.toggle' | translate"
1084
+ [fTooltip]="'iam.logic.click.to.toggle' | translate"
1077
1085
  >
1078
1086
  {{ node.operator }}
1079
1087
  </span>
@@ -1086,34 +1094,30 @@ class LogicBuilderComponent {
1086
1094
  }
1087
1095
 
1088
1096
  @if (node.type === 'action') {
1089
- <!-- Action: show action selector -->
1090
- <select
1091
- class="action-select flex-1 p-2 border border-surface rounded text-sm"
1097
+ <f-select
1098
+ class="flex-1"
1099
+ [options]="actions()"
1100
+ optionLabel="name"
1101
+ optionValue="id"
1092
1102
  [ngModel]="node.actionId"
1093
1103
  (ngModelChange)="updateActionId(node.id, $event)"
1094
- >
1095
- <option [value]="null">
1096
- {{ 'iam.logic.select.action' | translate }} ({{
1097
- 'iam.logic.actions.available'
1098
- | translate: { count: actions().length }
1099
- }})
1100
- </option>
1101
- @for (action of actions(); track action.id) {
1102
- <option [ngValue]="action.id">{{ action.name }}</option>
1103
- }
1104
- </select>
1104
+ [placeholder]="'iam.logic.select.action' | translate"
1105
+ [filter]="true"
1106
+ />
1105
1107
  }
1106
1108
  </div>
1107
1109
 
1108
1110
  <div class="flex gap-1">
1109
- <p-button
1110
- icon="pi pi-trash"
1111
+ <button
1112
+ fButton
1111
1113
  [text]="true"
1112
1114
  severity="danger"
1113
1115
  size="small"
1114
- (onClick)="removeNode(node.id)"
1115
- [pTooltip]="'shared.remove' | translate"
1116
- />
1116
+ (click)="removeNode(node.id)"
1117
+ [fTooltip]="'shared.remove' | translate"
1118
+ >
1119
+ <ui-icon pButtonIcon name="trash"></ui-icon>
1120
+ </button>
1117
1121
  </div>
1118
1122
  </div>
1119
1123
 
@@ -1142,52 +1146,60 @@ class LogicBuilderComponent {
1142
1146
  {{ 'iam.logic.add.condition' | translate }}
1143
1147
  </div>
1144
1148
  <div class="flex gap-2 flex-wrap">
1145
- <p-button
1146
- [label]="'iam.logic.group' | translate"
1147
- icon="pi pi-sitemap"
1149
+ <button
1150
+ fButton
1148
1151
  size="small"
1149
1152
  [outlined]="true"
1150
- (onClick)="addChildNode(node.id, 'group')"
1151
- />
1152
- <p-button
1153
- [label]="'iam.logic.action' | translate"
1154
- icon="pi pi-bolt"
1153
+ (click)="addChildNode(node.id, 'group')"
1154
+ >
1155
+ <ui-icon pButtonIcon name="sitemap"></ui-icon>
1156
+ <span pButtonLabel>{{ 'iam.logic.group' | translate }}</span>
1157
+ </button>
1158
+ <button
1159
+ fButton
1155
1160
  size="small"
1156
1161
  severity="success"
1157
1162
  [outlined]="true"
1158
- (onClick)="addChildNode(node.id, 'action')"
1159
- />
1163
+ (click)="addChildNode(node.id, 'action')"
1164
+ >
1165
+ <ui-icon pButtonIcon name="bolt"></ui-icon>
1166
+ <span pButtonLabel>{{ 'iam.logic.action' | translate }}</span>
1167
+ </button>
1160
1168
  </div>
1161
1169
  </div>
1162
1170
  }
1163
1171
  </div>
1164
1172
  </ng-template>
1165
- `, isInline: true, styles: [":host{display:block}.node-type{display:inline-flex;align-items:center;padding:.25rem .5rem;border-radius:.25rem;font-weight:600;font-size:.75rem;text-transform:uppercase}.node-type.group{background-color:var(--p-blue-100, #dbeafe);color:var(--p-blue-700, #1e40af)}.node-type.action{background-color:var(--p-green-100, #d1fae5);color:var(--p-green-700, #065f46)}:host-context(.p-dark) .node-type.group{background-color:#3b82f633;color:var(--p-blue-400, #60a5fa)}:host-context(.p-dark) .node-type.action{background-color:#22c55e33;color:var(--p-green-400, #4ade80)}.operator-badge{display:inline-flex;align-items:center;padding:.125rem .5rem;border-radius:9999px;font-weight:600;font-size:.75rem;cursor:pointer;transition:opacity .2s}.operator-badge.and{background-color:var(--p-yellow-100, #fef3c7);color:var(--p-yellow-700, #92400e)}.operator-badge.or{background-color:var(--p-indigo-100, #e0e7ff);color:var(--p-indigo-700, #3730a3)}:host-context(.p-dark) .operator-badge.and{background-color:#eab30833;color:var(--p-yellow-400, #facc15)}:host-context(.p-dark) .operator-badge.or{background-color:#6366f133;color:var(--p-indigo-400, #818cf8)}.operator-badge:hover{opacity:.8}.action-select{background-color:var(--p-surface-0, #ffffff);color:var(--p-text-color, #1f2937)}:host-context(.p-dark) .action-select{background-color:var(--p-surface-900, #1f2937);color:var(--p-text-color, #f9fafb)}.action-select:focus{outline:none;border-color:var(--p-primary-color, #3b82f6)}\n"], dependencies: [{ kind: "ngmodule", type: AngularModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: PrimeModule }, { kind: "component", type: i2.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "directive", type: i6.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "showOnEllipsis", "pTooltip", "tooltipDisabled", "tooltipOptions", "appendTo", "ptTooltip", "pTooltipPT", "pTooltipUnstyled"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
1173
+ `, isInline: true, styles: [":host{display:block}.node-type{display:inline-flex;align-items:center;padding:.25rem .5rem;border-radius:.25rem;font-weight:600;font-size:.75rem;text-transform:uppercase}.node-type.group{background-color:var(--f-blue-100, #dbeafe);color:var(--f-blue-700, #1e40af)}.node-type.action{background-color:var(--f-green-100, #d1fae5);color:var(--f-green-700, #065f46)}:host-context(.p-dark) .node-type.group{background-color:#3b82f633;color:var(--f-blue-400, #60a5fa)}:host-context(.p-dark) .node-type.action{background-color:#22c55e33;color:var(--f-green-400, #4ade80)}.operator-badge{display:inline-flex;align-items:center;padding:.125rem .5rem;border-radius:9999px;font-weight:600;font-size:.75rem;cursor:pointer;transition:opacity .2s}.operator-badge.and{background-color:var(--f-yellow-100, #fef3c7);color:var(--f-yellow-700, #92400e)}.operator-badge.or{background-color:var(--f-indigo-100, #e0e7ff);color:var(--f-indigo-700, #3730a3)}:host-context(.p-dark) .operator-badge.and{background-color:#eab30833;color:var(--f-yellow-400, #facc15)}:host-context(.p-dark) .operator-badge.or{background-color:#6366f133;color:var(--f-indigo-400, #818cf8)}.operator-badge:hover{opacity:.8}.action-select{background-color:var(--f-surface-0, #ffffff);color:var(--f-text-color, #1f2937)}:host-context(.p-dark) .action-select{background-color:var(--f-surface-900, #1f2937);color:var(--f-text-color, #f9fafb)}.action-select:focus{outline:none;border-color:var(--f-primary-color, #3b82f6)}\n"], dependencies: [{ kind: "ngmodule", type: AngularModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: UiModule }, { kind: "directive", type: i2.FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "rounded", "raised", "fluid", "disabled", "loading", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "component", type: i2.SelectComponent, selector: "f-select", inputs: ["options", "optionLabel", "optionValue", "placeholder", "disabled", "filter", "showClear", "loading", "inputId", "invalid", "touched", "styleClass", "editable"], outputs: ["onFilter", "onChange", "onShow", "onHide", "onBlur"] }, { kind: "directive", type: i2.TooltipDirective, selector: "[fTooltip]", inputs: ["fTooltip", "tooltipPosition", "tooltipStyleClass", "disabled", "tooltipEvent", "showDelay", "hideDelay"] }, { kind: "component", type: i2.UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
1166
1174
  }
1167
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: LogicBuilderComponent, decorators: [{
1175
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: LogicBuilderComponent, decorators: [{
1168
1176
  type: Component,
1169
- args: [{ selector: 'lib-logic-builder', imports: [AngularModule, PrimeModule, TranslatePipe], template: `
1177
+ args: [{ selector: 'lib-logic-builder', imports: [AngularModule, UiModule, TranslatePipe], template: `
1170
1178
  <div class="logic-builder">
1171
1179
  <div class="flex justify-between items-center mb-3">
1172
1180
  <h4 class="text-sm font-semibold m-0">
1173
1181
  {{ 'iam.logic.title' | translate }}
1174
1182
  </h4>
1175
1183
  @if (!builderLogic()) {
1176
- <p-button
1177
- [label]="'iam.logic.add.logic' | translate"
1178
- icon="pi pi-plus"
1184
+ <button
1185
+ fButton
1179
1186
  size="small"
1180
- (onClick)="initializeLogic()"
1181
- />
1187
+ (click)="initializeLogic()"
1188
+ >
1189
+ <ui-icon pButtonIcon name="plus"></ui-icon>
1190
+ <span pButtonLabel>{{ 'iam.logic.add.logic' | translate }}</span>
1191
+ </button>
1182
1192
  } @else {
1183
- <p-button
1184
- [label]="'iam.logic.clear.logic' | translate"
1185
- icon="pi pi-trash"
1193
+ <button
1194
+ fButton
1186
1195
  size="small"
1187
1196
  severity="danger"
1188
1197
  [outlined]="true"
1189
- (onClick)="clearLogic()"
1190
- />
1198
+ (click)="clearLogic()"
1199
+ >
1200
+ <ui-icon pButtonIcon name="trash"></ui-icon>
1201
+ <span pButtonLabel>{{ 'iam.logic.clear.logic' | translate }}</span>
1202
+ </button>
1191
1203
  }
1192
1204
  </div>
1193
1205
 
@@ -1214,21 +1226,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
1214
1226
  <ng-template #nodeTemplate let-node let-depth="depth">
1215
1227
  <div
1216
1228
  class="p-3 border-b border-surface"
1217
- [ngClass]="depth % 2 === 0 ? 'bg-surface-0' : 'bg-surface-50'"
1229
+ [class.bg-surface-0]="depth % 2 === 0"
1230
+ [class.bg-surface-50]="depth % 2 !== 0"
1218
1231
  >
1219
1232
  <div class="flex items-center gap-3 mb-2">
1220
- <span class="node-type" [ngClass]="node.type">{{
1221
- node.type.toUpperCase()
1222
- }}</span>
1233
+ <span
1234
+ class="node-type"
1235
+ [class.group]="node.type === 'group'"
1236
+ [class.action]="node.type === 'action'"
1237
+ >{{ node.type.toUpperCase() }}</span
1238
+ >
1223
1239
 
1224
1240
  <div class="flex-1 flex items-center gap-2">
1225
1241
  @if (node.type === 'group') {
1226
1242
  <!-- Group: show operator toggle -->
1227
1243
  <span
1228
1244
  class="operator-badge"
1229
- [ngClass]="node.operator === 'AND' ? 'and' : 'or'"
1245
+ [class.and]="node.operator === 'AND'"
1246
+ [class.or]="node.operator !== 'AND'"
1230
1247
  (click)="toggleOperator(node.id)"
1231
- [title]="'iam.logic.click.to.toggle' | translate"
1248
+ [fTooltip]="'iam.logic.click.to.toggle' | translate"
1232
1249
  >
1233
1250
  {{ node.operator }}
1234
1251
  </span>
@@ -1241,34 +1258,30 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
1241
1258
  }
1242
1259
 
1243
1260
  @if (node.type === 'action') {
1244
- <!-- Action: show action selector -->
1245
- <select
1246
- class="action-select flex-1 p-2 border border-surface rounded text-sm"
1261
+ <f-select
1262
+ class="flex-1"
1263
+ [options]="actions()"
1264
+ optionLabel="name"
1265
+ optionValue="id"
1247
1266
  [ngModel]="node.actionId"
1248
1267
  (ngModelChange)="updateActionId(node.id, $event)"
1249
- >
1250
- <option [value]="null">
1251
- {{ 'iam.logic.select.action' | translate }} ({{
1252
- 'iam.logic.actions.available'
1253
- | translate: { count: actions().length }
1254
- }})
1255
- </option>
1256
- @for (action of actions(); track action.id) {
1257
- <option [ngValue]="action.id">{{ action.name }}</option>
1258
- }
1259
- </select>
1268
+ [placeholder]="'iam.logic.select.action' | translate"
1269
+ [filter]="true"
1270
+ />
1260
1271
  }
1261
1272
  </div>
1262
1273
 
1263
1274
  <div class="flex gap-1">
1264
- <p-button
1265
- icon="pi pi-trash"
1275
+ <button
1276
+ fButton
1266
1277
  [text]="true"
1267
1278
  severity="danger"
1268
1279
  size="small"
1269
- (onClick)="removeNode(node.id)"
1270
- [pTooltip]="'shared.remove' | translate"
1271
- />
1280
+ (click)="removeNode(node.id)"
1281
+ [fTooltip]="'shared.remove' | translate"
1282
+ >
1283
+ <ui-icon pButtonIcon name="trash"></ui-icon>
1284
+ </button>
1272
1285
  </div>
1273
1286
  </div>
1274
1287
 
@@ -1297,27 +1310,31 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
1297
1310
  {{ 'iam.logic.add.condition' | translate }}
1298
1311
  </div>
1299
1312
  <div class="flex gap-2 flex-wrap">
1300
- <p-button
1301
- [label]="'iam.logic.group' | translate"
1302
- icon="pi pi-sitemap"
1313
+ <button
1314
+ fButton
1303
1315
  size="small"
1304
1316
  [outlined]="true"
1305
- (onClick)="addChildNode(node.id, 'group')"
1306
- />
1307
- <p-button
1308
- [label]="'iam.logic.action' | translate"
1309
- icon="pi pi-bolt"
1317
+ (click)="addChildNode(node.id, 'group')"
1318
+ >
1319
+ <ui-icon pButtonIcon name="sitemap"></ui-icon>
1320
+ <span pButtonLabel>{{ 'iam.logic.group' | translate }}</span>
1321
+ </button>
1322
+ <button
1323
+ fButton
1310
1324
  size="small"
1311
1325
  severity="success"
1312
1326
  [outlined]="true"
1313
- (onClick)="addChildNode(node.id, 'action')"
1314
- />
1327
+ (click)="addChildNode(node.id, 'action')"
1328
+ >
1329
+ <ui-icon pButtonIcon name="bolt"></ui-icon>
1330
+ <span pButtonLabel>{{ 'iam.logic.action' | translate }}</span>
1331
+ </button>
1315
1332
  </div>
1316
1333
  </div>
1317
1334
  }
1318
1335
  </div>
1319
1336
  </ng-template>
1320
- `, styles: [":host{display:block}.node-type{display:inline-flex;align-items:center;padding:.25rem .5rem;border-radius:.25rem;font-weight:600;font-size:.75rem;text-transform:uppercase}.node-type.group{background-color:var(--p-blue-100, #dbeafe);color:var(--p-blue-700, #1e40af)}.node-type.action{background-color:var(--p-green-100, #d1fae5);color:var(--p-green-700, #065f46)}:host-context(.p-dark) .node-type.group{background-color:#3b82f633;color:var(--p-blue-400, #60a5fa)}:host-context(.p-dark) .node-type.action{background-color:#22c55e33;color:var(--p-green-400, #4ade80)}.operator-badge{display:inline-flex;align-items:center;padding:.125rem .5rem;border-radius:9999px;font-weight:600;font-size:.75rem;cursor:pointer;transition:opacity .2s}.operator-badge.and{background-color:var(--p-yellow-100, #fef3c7);color:var(--p-yellow-700, #92400e)}.operator-badge.or{background-color:var(--p-indigo-100, #e0e7ff);color:var(--p-indigo-700, #3730a3)}:host-context(.p-dark) .operator-badge.and{background-color:#eab30833;color:var(--p-yellow-400, #facc15)}:host-context(.p-dark) .operator-badge.or{background-color:#6366f133;color:var(--p-indigo-400, #818cf8)}.operator-badge:hover{opacity:.8}.action-select{background-color:var(--p-surface-0, #ffffff);color:var(--p-text-color, #1f2937)}:host-context(.p-dark) .action-select{background-color:var(--p-surface-900, #1f2937);color:var(--p-text-color, #f9fafb)}.action-select:focus{outline:none;border-color:var(--p-primary-color, #3b82f6)}\n"] }]
1337
+ `, styles: [":host{display:block}.node-type{display:inline-flex;align-items:center;padding:.25rem .5rem;border-radius:.25rem;font-weight:600;font-size:.75rem;text-transform:uppercase}.node-type.group{background-color:var(--f-blue-100, #dbeafe);color:var(--f-blue-700, #1e40af)}.node-type.action{background-color:var(--f-green-100, #d1fae5);color:var(--f-green-700, #065f46)}:host-context(.p-dark) .node-type.group{background-color:#3b82f633;color:var(--f-blue-400, #60a5fa)}:host-context(.p-dark) .node-type.action{background-color:#22c55e33;color:var(--f-green-400, #4ade80)}.operator-badge{display:inline-flex;align-items:center;padding:.125rem .5rem;border-radius:9999px;font-weight:600;font-size:.75rem;cursor:pointer;transition:opacity .2s}.operator-badge.and{background-color:var(--f-yellow-100, #fef3c7);color:var(--f-yellow-700, #92400e)}.operator-badge.or{background-color:var(--f-indigo-100, #e0e7ff);color:var(--f-indigo-700, #3730a3)}:host-context(.p-dark) .operator-badge.and{background-color:#eab30833;color:var(--f-yellow-400, #facc15)}:host-context(.p-dark) .operator-badge.or{background-color:#6366f133;color:var(--f-indigo-400, #818cf8)}.operator-badge:hover{opacity:.8}.action-select{background-color:var(--f-surface-0, #ffffff);color:var(--f-text-color, #1f2937)}:host-context(.p-dark) .action-select{background-color:var(--f-surface-900, #1f2937);color:var(--f-text-color, #f9fafb)}.action-select:focus{outline:none;border-color:var(--f-primary-color, #3b82f6)}\n"] }]
1321
1338
  }], ctorParameters: () => [], propDecorators: { logic: [{ type: i0.Input, args: [{ isSignal: true, alias: "logic", required: false }] }], actions: [{ type: i0.Input, args: [{ isSignal: true, alias: "actions", required: false }] }], logicChange: [{ type: i0.Output, args: ["logicChange"] }] } });
1322
1339
 
1323
1340
  function flattenTree(tree) {
@@ -1384,24 +1401,32 @@ class BaseActionSelectorComponent {
1384
1401
  translateAdapter = inject(TranslateService, {
1385
1402
  optional: true,
1386
1403
  });
1387
- loading = signal(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
1388
- saving = signal(false, ...(ngDevMode ? [{ debugName: "saving" }] : []));
1389
- _actions = signal([], ...(ngDevMode ? [{ debugName: "_actions" }] : []));
1404
+ loading = signal(false, /* @ts-ignore */
1405
+ ...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
1406
+ saving = signal(false, /* @ts-ignore */
1407
+ ...(ngDevMode ? [{ debugName: "saving" }] : /* istanbul ignore next */ []));
1408
+ _actions = signal([], /* @ts-ignore */
1409
+ ...(ngDevMode ? [{ debugName: "_actions" }] : /* istanbul ignore next */ []));
1390
1410
  actions = this._actions.asReadonly();
1391
- _actionsTree = signal([], ...(ngDevMode ? [{ debugName: "_actionsTree" }] : []));
1411
+ _actionsTree = signal([], /* @ts-ignore */
1412
+ ...(ngDevMode ? [{ debugName: "_actionsTree" }] : /* istanbul ignore next */ []));
1392
1413
  actionsTree = this._actionsTree.asReadonly();
1393
- _selectionMap = signal({}, ...(ngDevMode ? [{ debugName: "_selectionMap" }] : []));
1414
+ _selectionMap = signal({}, /* @ts-ignore */
1415
+ ...(ngDevMode ? [{ debugName: "_selectionMap" }] : /* istanbul ignore next */ []));
1394
1416
  selectionMap = this._selectionMap.asReadonly();
1395
- _initialSelection = signal({}, ...(ngDevMode ? [{ debugName: "_initialSelection" }] : []));
1417
+ _initialSelection = signal({}, /* @ts-ignore */
1418
+ ...(ngDevMode ? [{ debugName: "_initialSelection" }] : /* istanbul ignore next */ []));
1396
1419
  initialSelection = this._initialSelection.asReadonly();
1397
- treeNodes = computed(() => convertActionToTreeNode(this.actionsTree()), ...(ngDevMode ? [{ debugName: "treeNodes" }] : []));
1420
+ treeNodes = computed(() => convertActionToTreeNode(this.actionsTree()), /* @ts-ignore */
1421
+ ...(ngDevMode ? [{ debugName: "treeNodes" }] : /* istanbul ignore next */ []));
1398
1422
  allSelected = computed(() => {
1399
1423
  const selMap = this.selectionMap();
1400
1424
  const total = this.actions().length;
1401
1425
  if (total === 0)
1402
1426
  return false;
1403
1427
  return Object.values(selMap).filter((v) => v).length === total;
1404
- }, ...(ngDevMode ? [{ debugName: "allSelected" }] : []));
1428
+ }, /* @ts-ignore */
1429
+ ...(ngDevMode ? [{ debugName: "allSelected" }] : /* istanbul ignore next */ []));
1405
1430
  hasChanges = computed(() => {
1406
1431
  const current = this.selectionMap();
1407
1432
  const initial = this.initialSelection();
@@ -1409,7 +1434,8 @@ class BaseActionSelectorComponent {
1409
1434
  if (currentKeys.length !== Object.keys(initial).length)
1410
1435
  return true;
1411
1436
  return currentKeys.some((key) => current[key] !== initial[key]);
1412
- }, ...(ngDevMode ? [{ debugName: "hasChanges" }] : []));
1437
+ }, /* @ts-ignore */
1438
+ ...(ngDevMode ? [{ debugName: "hasChanges" }] : /* istanbul ignore next */ []));
1413
1439
  actionsWithUnmetPrerequisites = computed(() => {
1414
1440
  const selMap = this.selectionMap();
1415
1441
  const allActions = this.actions();
@@ -1421,19 +1447,24 @@ class BaseActionSelectorComponent {
1421
1447
  }
1422
1448
  }
1423
1449
  return unmetSet;
1424
- }, ...(ngDevMode ? [{ debugName: "actionsWithUnmetPrerequisites" }] : []));
1425
- invalidActionsCount = computed(() => this.actionsWithUnmetPrerequisites().size, ...(ngDevMode ? [{ debugName: "invalidActionsCount" }] : []));
1450
+ }, /* @ts-ignore */
1451
+ ...(ngDevMode ? [{ debugName: "actionsWithUnmetPrerequisites" }] : /* istanbul ignore next */ []));
1452
+ invalidActionsCount = computed(() => this.actionsWithUnmetPrerequisites().size, /* @ts-ignore */
1453
+ ...(ngDevMode ? [{ debugName: "invalidActionsCount" }] : /* istanbul ignore next */ []));
1426
1454
  pendingAdd = computed(() => {
1427
1455
  const current = this.selectionMap();
1428
1456
  const initial = this.initialSelection();
1429
1457
  return this.actions().filter((a) => current[a.id] && !initial[a.id]);
1430
- }, ...(ngDevMode ? [{ debugName: "pendingAdd" }] : []));
1458
+ }, /* @ts-ignore */
1459
+ ...(ngDevMode ? [{ debugName: "pendingAdd" }] : /* istanbul ignore next */ []));
1431
1460
  pendingRemove = computed(() => {
1432
1461
  const current = this.selectionMap();
1433
1462
  const initial = this.initialSelection();
1434
1463
  return this.actions().filter((a) => !current[a.id] && initial[a.id]);
1435
- }, ...(ngDevMode ? [{ debugName: "pendingRemove" }] : []));
1436
- canSave = computed(() => this.hasChanges() && !this.saving() && this.invalidActionsCount() === 0, ...(ngDevMode ? [{ debugName: "canSave" }] : []));
1464
+ }, /* @ts-ignore */
1465
+ ...(ngDevMode ? [{ debugName: "pendingRemove" }] : /* istanbul ignore next */ []));
1466
+ canSave = computed(() => this.hasChanges() && !this.saving() && this.invalidActionsCount() === 0, /* @ts-ignore */
1467
+ ...(ngDevMode ? [{ debugName: "canSave" }] : /* istanbul ignore next */ []));
1437
1468
  translate(key, vars) {
1438
1469
  return this.translateAdapter?.translate(key, vars) ?? key;
1439
1470
  }
@@ -1508,8 +1539,10 @@ class RoleActionSelectorComponent extends BaseActionSelectorComponent {
1508
1539
  actionApi = inject(ActionApiService);
1509
1540
  permissionApi = inject(PermissionApiService);
1510
1541
  messageService = inject(MessageService);
1511
- selectedRoleId = signal(undefined, ...(ngDevMode ? [{ debugName: "selectedRoleId" }] : []));
1512
- roles = signal([], ...(ngDevMode ? [{ debugName: "roles" }] : []));
1542
+ selectedRoleId = signal(undefined, /* @ts-ignore */
1543
+ ...(ngDevMode ? [{ debugName: "selectedRoleId" }] : /* istanbul ignore next */ []));
1544
+ roles = signal([], /* @ts-ignore */
1545
+ ...(ngDevMode ? [{ debugName: "roles" }] : /* istanbul ignore next */ []));
1513
1546
  loadDataAbortController = null;
1514
1547
  constructor() {
1515
1548
  super();
@@ -1605,8 +1638,8 @@ class RoleActionSelectorComponent extends BaseActionSelectorComponent {
1605
1638
  this.saving.set(false);
1606
1639
  }
1607
1640
  }
1608
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: RoleActionSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1609
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.5", type: RoleActionSelectorComponent, isStandalone: true, selector: "flusys-role-action-selector", usesInheritance: true, ngImport: i0, template: `
1641
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: RoleActionSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1642
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: RoleActionSelectorComponent, isStandalone: true, selector: "flusys-role-action-selector", usesInheritance: true, ngImport: i0, template: `
1610
1643
  <div class="role-action-selector">
1611
1644
  <div class="mb-4">
1612
1645
  <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
@@ -1614,7 +1647,7 @@ class RoleActionSelectorComponent extends BaseActionSelectorComponent {
1614
1647
  <label class="block font-semibold mb-2">{{
1615
1648
  'iam.permission.select.role' | translate
1616
1649
  }}</label>
1617
- <p-select
1650
+ <f-select
1618
1651
  [ngModel]="selectedRoleId()"
1619
1652
  (ngModelChange)="selectedRoleId.set($event)"
1620
1653
  [options]="roles()"
@@ -1636,7 +1669,7 @@ class RoleActionSelectorComponent extends BaseActionSelectorComponent {
1636
1669
  <div
1637
1670
  class="surface-card p-5 rounded-border shadow-sm flex justify-center"
1638
1671
  >
1639
- <i class="pi pi-spin pi-spinner text-primary text-5xl"></i>
1672
+ <ui-icon name="loader-circle" spin class="text-primary text-5xl"></ui-icon>
1640
1673
  </div>
1641
1674
  }
1642
1675
 
@@ -1657,38 +1690,47 @@ class RoleActionSelectorComponent extends BaseActionSelectorComponent {
1657
1690
  </p>
1658
1691
  </div>
1659
1692
  <div class="flex flex-wrap gap-2">
1660
- <p-button
1661
- [label]="'shared.select.all' | translate"
1662
- icon="pi pi-check"
1693
+ <button
1694
+ fButton
1663
1695
  [outlined]="true"
1664
1696
  size="small"
1665
1697
  severity="secondary"
1666
- (onClick)="selectAll()"
1667
- />
1668
- <p-button
1669
- [label]="'shared.deselect.all' | translate"
1670
- icon="pi pi-times"
1698
+ (click)="selectAll()"
1699
+ >
1700
+ <ui-icon pButtonIcon name="check"></ui-icon>
1701
+ <span pButtonLabel>{{ 'shared.select.all' | translate }}</span>
1702
+ </button>
1703
+ <button
1704
+ fButton
1671
1705
  [outlined]="true"
1672
1706
  size="small"
1673
1707
  severity="secondary"
1674
- (onClick)="deselectAll()"
1675
- />
1676
- <p-button
1708
+ (click)="deselectAll()"
1709
+ >
1710
+ <ui-icon pButtonIcon name="times"></ui-icon>
1711
+ <span pButtonLabel>{{ 'shared.deselect.all' | translate }}</span>
1712
+ </button>
1713
+ <button
1714
+ fButton
1677
1715
  *hasPermission="ROLE_ACTION_PERMISSIONS.ASSIGN"
1678
- [label]="'shared.save.changes' | translate"
1679
- icon="pi pi-save"
1680
- [disabled]="!canSave()"
1681
- [loading]="saving()"
1716
+ [disabled]="!canSave() || saving()"
1682
1717
  size="small"
1683
- (onClick)="saveChanges()"
1684
- />
1718
+ (click)="saveChanges()"
1719
+ >
1720
+ @if (saving()) {
1721
+ <ui-icon pButtonIcon name="spinner" [spin]="true"></ui-icon>
1722
+ } @else {
1723
+ <ui-icon pButtonIcon name="save"></ui-icon>
1724
+ }
1725
+ <span pButtonLabel>{{ 'shared.save.changes' | translate }}</span>
1726
+ </button>
1685
1727
  </div>
1686
1728
  </div>
1687
1729
 
1688
1730
  @if (invalidActionsCount() > 0) {
1689
1731
  <div class="validation-warning rounded-border p-3 mb-4">
1690
1732
  <div class="flex items-start gap-2">
1691
- <i class="pi pi-exclamation-triangle text-xl"></i>
1733
+ <ui-icon name="exclamation-triangle" class="text-xl"></ui-icon>
1692
1734
  <div class="flex-1">
1693
1735
  <span class="font-semibold"
1694
1736
  >{{ 'iam.validation.warning.title' | translate }}:</span
@@ -1707,20 +1749,19 @@ class RoleActionSelectorComponent extends BaseActionSelectorComponent {
1707
1749
  }
1708
1750
 
1709
1751
  <div class="overflow-x-auto -mx-4 sm:mx-0">
1710
- <p-treeTable
1752
+ <f-treetable
1711
1753
  [value]="treeNodes()"
1712
1754
  dataKey="id"
1713
- class="p-treetable-sm"
1714
1755
  [tableStyle]="{ 'min-width': '50rem' }"
1715
1756
  >
1716
1757
  <ng-template #header>
1717
1758
  <tr>
1718
1759
  <th class="w-12">
1719
- <p-checkbox
1760
+ <f-checkbox
1720
1761
  [ngModel]="allSelected()"
1721
1762
  [binary]="true"
1722
1763
  (ngModelChange)="toggleAll()"
1723
- [pTooltip]="'shared.select.deselect.all' | translate"
1764
+ [fTooltip]="'shared.select.deselect.all' | translate"
1724
1765
  tooltipPosition="top"
1725
1766
  />
1726
1767
  </th>
@@ -1739,27 +1780,24 @@ class RoleActionSelectorComponent extends BaseActionSelectorComponent {
1739
1780
  @let tooltip = getTooltip(rowData);
1740
1781
  <tr [class.highlight-warning]="hasUnmet">
1741
1782
  <td class="w-12">
1742
- <p-checkbox
1783
+ <f-checkbox
1743
1784
  [ngModel]="selectionMap()[rowData.id]"
1744
1785
  [binary]="true"
1745
1786
  (ngModelChange)="onActionToggle(rowData, $event)"
1746
- [pTooltip]="tooltip"
1787
+ [fTooltip]="tooltip"
1747
1788
  tooltipPosition="top"
1748
1789
  />
1749
1790
  </td>
1750
1791
  <td>
1751
- <p-treeTableToggler [rowNode]="rowNode" />
1792
+ <f-treetabletoggler [rowNode]="rowNode" />
1752
1793
  <span class="inline-flex items-center gap-2">
1753
1794
  {{ rowData.name }}
1754
1795
  @if (hasUnmet) {
1755
- <i
1756
- class="pi pi-exclamation-triangle text-orange-500"
1757
- [pTooltip]="
1796
+ <ui-icon name="exclamation-triangle" class="text-orange-500" [fTooltip]="
1758
1797
  'iam.validation.unmet.prerequisites.tooltip'
1759
1798
  | translate
1760
1799
  "
1761
- tooltipPosition="top"
1762
- ></i>
1800
+ tooltipPosition="top"></ui-icon>
1763
1801
  }
1764
1802
  </span>
1765
1803
  </td>
@@ -1767,7 +1805,7 @@ class RoleActionSelectorComponent extends BaseActionSelectorComponent {
1767
1805
  {{ rowData.code || '-' }}
1768
1806
  </td>
1769
1807
  <td>
1770
- <p-tag
1808
+ <f-tag
1771
1809
  [value]="rowData.actionType"
1772
1810
  [severity]="
1773
1811
  rowData.actionType === 'backend' ? 'info' : 'success'
@@ -1789,7 +1827,7 @@ class RoleActionSelectorComponent extends BaseActionSelectorComponent {
1789
1827
  <tr>
1790
1828
  <td colspan="5" class="text-center p-4 text-muted-color">
1791
1829
  @if (loading()) {
1792
- <i class="pi pi-spin pi-spinner"></i>
1830
+ <ui-icon name="loader-circle" spin></ui-icon>
1793
1831
  {{ 'shared.loading.actions' | translate }}
1794
1832
  } @else {
1795
1833
  {{ 'iam.permission.no.actions.available' | translate }}
@@ -1797,14 +1835,14 @@ class RoleActionSelectorComponent extends BaseActionSelectorComponent {
1797
1835
  </td>
1798
1836
  </tr>
1799
1837
  </ng-template>
1800
- </p-treeTable>
1838
+ </f-treetable>
1801
1839
  </div>
1802
1840
  </div>
1803
1841
 
1804
1842
  @if (hasChanges()) {
1805
1843
  <div class="border border-surface rounded-border p-3 mt-4">
1806
1844
  <div class="flex items-center gap-2 mb-3">
1807
- <i class="pi pi-info-circle text-primary"></i>
1845
+ <ui-icon name="info-circle" class="text-primary"></ui-icon>
1808
1846
  <span class="font-bold">{{
1809
1847
  'shared.pending.changes' | translate
1810
1848
  }}</span>
@@ -1813,7 +1851,7 @@ class RoleActionSelectorComponent extends BaseActionSelectorComponent {
1813
1851
  @if (pendingAdd().length > 0) {
1814
1852
  <div>
1815
1853
  <div class="flex items-center gap-2 mb-2">
1816
- <i class="pi pi-plus-circle text-green-500"></i>
1854
+ <ui-icon name="plus-circle" class="text-green-500"></ui-icon>
1817
1855
  <strong class="text-sm"
1818
1856
  >{{ 'shared.to.add' | translate }} ({{
1819
1857
  pendingAdd().length
@@ -1830,7 +1868,7 @@ class RoleActionSelectorComponent extends BaseActionSelectorComponent {
1830
1868
  @if (pendingRemove().length > 0) {
1831
1869
  <div>
1832
1870
  <div class="flex items-center gap-2 mb-2">
1833
- <i class="pi pi-minus-circle text-red-500"></i>
1871
+ <ui-icon name="minus-circle" class="text-red-500"></ui-icon>
1834
1872
  <strong class="text-sm"
1835
1873
  >{{ 'shared.to.remove' | translate }} ({{
1836
1874
  pendingRemove().length
@@ -1851,9 +1889,7 @@ class RoleActionSelectorComponent extends BaseActionSelectorComponent {
1851
1889
 
1852
1890
  @if (!loading() && actions().length === 0) {
1853
1891
  <div class="surface-card p-5 rounded-border shadow-sm text-center">
1854
- <i
1855
- class="pi pi-info-circle text-muted-color mb-3 block text-5xl"
1856
- ></i>
1892
+ <ui-icon name="info-circle" class="text-muted-color mb-3 block text-5xl"></ui-icon>
1857
1893
  <p class="text-muted-color m-0">
1858
1894
  {{ 'iam.permission.no.actions.for.role' | translate }}
1859
1895
  </p>
@@ -1861,11 +1897,11 @@ class RoleActionSelectorComponent extends BaseActionSelectorComponent {
1861
1897
  }
1862
1898
  }
1863
1899
  </div>
1864
- `, isInline: true, styles: [":host{display:block}.validation-warning{background-color:var(--p-yellow-50, #fefce8);border-left:4px solid var(--p-yellow-500, #eab308);color:var(--p-yellow-700, #a16207)}:host-context(.p-dark) .validation-warning{background-color:#eab3081a;color:var(--p-yellow-400, #facc15)}:host ::ng-deep tr.highlight-warning{background-color:var(--p-red-50, rgba(239, 68, 68, .1))!important}:host-context(.p-dark) ::ng-deep tr.highlight-warning{background-color:#ef444426!important}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: PrimeModule }, { kind: "component", type: i2.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i3.Checkbox, selector: "p-checkbox, p-checkBox, p-check-box", inputs: ["hostName", "value", "binary", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "inputStyle", "styleClass", "inputClass", "indeterminate", "formControl", "checkboxIcon", "readonly", "autofocus", "trueValue", "falseValue", "variant", "size"], outputs: ["onChange", "onFocus", "onBlur"] }, { kind: "component", type: i4.Select, selector: "p-select", inputs: ["id", "scrollHeight", "filter", "panelStyle", "styleClass", "panelStyleClass", "readonly", "editable", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "filterValue", "options", "appendTo", "motionOptions"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "component", type: i5.Tag, selector: "p-tag", inputs: ["styleClass", "severity", "value", "icon", "rounded"] }, { kind: "directive", type: i6.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "showOnEllipsis", "pTooltip", "tooltipDisabled", "tooltipOptions", "appendTo", "ptTooltip", "pTooltipPT", "pTooltipUnstyled"] }, { kind: "component", type: i7.TreeTable, selector: "p-treeTable, p-treetable, p-tree-table", inputs: ["columns", "styleClass", "tableStyle", "tableStyleClass", "autoLayout", "lazy", "lazyLoadOnInit", "paginator", "rows", "first", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "customSort", "selectionMode", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "compareSelectionBy", "rowHover", "loading", "loadingIcon", "showLoader", "scrollable", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "frozenColumns", "resizableColumns", "columnResizeMode", "reorderableColumns", "contextMenu", "rowTrackBy", "filters", "globalFilterFields", "filterDelay", "filterMode", "filterLocale", "paginatorLocale", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "value", "virtualRowHeight", "selectionKeys", "showGridlines"], outputs: ["selectionChange", "contextMenuSelectionChange", "onFilter", "onNodeExpand", "onNodeCollapse", "onPage", "onSort", "onLazyLoad", "sortFunction", "onColResize", "onColReorder", "onNodeSelect", "onNodeUnselect", "onContextMenuSelect", "onHeaderCheckboxToggle", "onEditInit", "onEditComplete", "onEditCancel", "selectionKeysChange"] }, { kind: "component", type: i7.TreeTableToggler, selector: "p-treeTableToggler, p-treetabletoggler, p-treetable-toggler", inputs: ["rowNode"] }, { kind: "directive", type: HasPermissionDirective, selector: "[hasPermission]", inputs: ["hasPermission"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
1900
+ `, isInline: true, styles: [":host{display:block}.validation-warning{background-color:var(--f-yellow-50, #fefce8);border-left:4px solid var(--f-yellow-500, #eab308);color:var(--f-yellow-700, #a16207)}:host-context(.p-dark) .validation-warning{background-color:#eab3081a;color:var(--f-yellow-400, #facc15)}:host ::ng-deep tr.highlight-warning{background-color:var(--f-red-50, rgba(239, 68, 68, .1))!important}:host-context(.p-dark) ::ng-deep tr.highlight-warning{background-color:#ef444426!important}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: UiModule }, { kind: "directive", type: i2.FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "rounded", "raised", "fluid", "disabled", "loading", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "component", type: i2.TagComponent, selector: "f-tag", inputs: ["value", "severity", "icon", "rounded", "color"] }, { kind: "component", type: i2.CheckboxComponent, selector: "f-checkbox", inputs: ["label", "binary", "disabled", "inputId", "invalid", "indeterminate", "touched", "styleClass", "checked"], outputs: ["onChange", "onBlur", "touch", "checkedChange"] }, { kind: "component", type: i2.SelectComponent, selector: "f-select", inputs: ["options", "optionLabel", "optionValue", "placeholder", "disabled", "filter", "showClear", "loading", "inputId", "invalid", "touched", "styleClass", "editable"], outputs: ["onFilter", "onChange", "onShow", "onHide", "onBlur"] }, { kind: "directive", type: i2.TooltipDirective, selector: "[fTooltip]", inputs: ["fTooltip", "tooltipPosition", "tooltipStyleClass", "disabled", "tooltipEvent", "showDelay", "hideDelay"] }, { kind: "component", type: i2.TreeTableComponent, selector: "f-treetable", inputs: ["value", "loading", "dataKey", "styleClass", "tableStyle", "scrollable"] }, { kind: "component", type: i2.TreeTableTogglerComponent, selector: "f-treetabletoggler", inputs: ["rowNode"] }, { kind: "component", type: i2.UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill"] }, { kind: "directive", type: HasPermissionDirective, selector: "[hasPermission]", inputs: ["hasPermission"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
1865
1901
  }
1866
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: RoleActionSelectorComponent, decorators: [{
1902
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: RoleActionSelectorComponent, decorators: [{
1867
1903
  type: Component,
1868
- args: [{ selector: 'flusys-role-action-selector', imports: [FormsModule, PrimeModule, HasPermissionDirective, TranslatePipe], template: `
1904
+ args: [{ selector: 'flusys-role-action-selector', imports: [FormsModule, UiModule, HasPermissionDirective, TranslatePipe], template: `
1869
1905
  <div class="role-action-selector">
1870
1906
  <div class="mb-4">
1871
1907
  <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
@@ -1873,7 +1909,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
1873
1909
  <label class="block font-semibold mb-2">{{
1874
1910
  'iam.permission.select.role' | translate
1875
1911
  }}</label>
1876
- <p-select
1912
+ <f-select
1877
1913
  [ngModel]="selectedRoleId()"
1878
1914
  (ngModelChange)="selectedRoleId.set($event)"
1879
1915
  [options]="roles()"
@@ -1895,7 +1931,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
1895
1931
  <div
1896
1932
  class="surface-card p-5 rounded-border shadow-sm flex justify-center"
1897
1933
  >
1898
- <i class="pi pi-spin pi-spinner text-primary text-5xl"></i>
1934
+ <ui-icon name="loader-circle" spin class="text-primary text-5xl"></ui-icon>
1899
1935
  </div>
1900
1936
  }
1901
1937
 
@@ -1916,38 +1952,47 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
1916
1952
  </p>
1917
1953
  </div>
1918
1954
  <div class="flex flex-wrap gap-2">
1919
- <p-button
1920
- [label]="'shared.select.all' | translate"
1921
- icon="pi pi-check"
1955
+ <button
1956
+ fButton
1922
1957
  [outlined]="true"
1923
1958
  size="small"
1924
1959
  severity="secondary"
1925
- (onClick)="selectAll()"
1926
- />
1927
- <p-button
1928
- [label]="'shared.deselect.all' | translate"
1929
- icon="pi pi-times"
1960
+ (click)="selectAll()"
1961
+ >
1962
+ <ui-icon pButtonIcon name="check"></ui-icon>
1963
+ <span pButtonLabel>{{ 'shared.select.all' | translate }}</span>
1964
+ </button>
1965
+ <button
1966
+ fButton
1930
1967
  [outlined]="true"
1931
1968
  size="small"
1932
1969
  severity="secondary"
1933
- (onClick)="deselectAll()"
1934
- />
1935
- <p-button
1970
+ (click)="deselectAll()"
1971
+ >
1972
+ <ui-icon pButtonIcon name="times"></ui-icon>
1973
+ <span pButtonLabel>{{ 'shared.deselect.all' | translate }}</span>
1974
+ </button>
1975
+ <button
1976
+ fButton
1936
1977
  *hasPermission="ROLE_ACTION_PERMISSIONS.ASSIGN"
1937
- [label]="'shared.save.changes' | translate"
1938
- icon="pi pi-save"
1939
- [disabled]="!canSave()"
1940
- [loading]="saving()"
1978
+ [disabled]="!canSave() || saving()"
1941
1979
  size="small"
1942
- (onClick)="saveChanges()"
1943
- />
1980
+ (click)="saveChanges()"
1981
+ >
1982
+ @if (saving()) {
1983
+ <ui-icon pButtonIcon name="spinner" [spin]="true"></ui-icon>
1984
+ } @else {
1985
+ <ui-icon pButtonIcon name="save"></ui-icon>
1986
+ }
1987
+ <span pButtonLabel>{{ 'shared.save.changes' | translate }}</span>
1988
+ </button>
1944
1989
  </div>
1945
1990
  </div>
1946
1991
 
1947
1992
  @if (invalidActionsCount() > 0) {
1948
1993
  <div class="validation-warning rounded-border p-3 mb-4">
1949
1994
  <div class="flex items-start gap-2">
1950
- <i class="pi pi-exclamation-triangle text-xl"></i>
1995
+ <ui-icon name="exclamation-triangle" class="text-xl"></ui-icon>
1951
1996
  <div class="flex-1">
1952
1997
  <span class="font-semibold"
1953
1998
  >{{ 'iam.validation.warning.title' | translate }}:</span
@@ -1966,20 +2011,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
1966
2011
  }
1967
2012
 
1968
2013
  <div class="overflow-x-auto -mx-4 sm:mx-0">
1969
- <p-treeTable
2014
+ <f-treetable
1970
2015
  [value]="treeNodes()"
1971
2016
  dataKey="id"
1972
- class="p-treetable-sm"
1973
2017
  [tableStyle]="{ 'min-width': '50rem' }"
1974
2018
  >
1975
2019
  <ng-template #header>
1976
2020
  <tr>
1977
2021
  <th class="w-12">
1978
- <p-checkbox
2022
+ <f-checkbox
1979
2023
  [ngModel]="allSelected()"
1980
2024
  [binary]="true"
1981
2025
  (ngModelChange)="toggleAll()"
1982
- [pTooltip]="'shared.select.deselect.all' | translate"
2026
+ [fTooltip]="'shared.select.deselect.all' | translate"
1983
2027
  tooltipPosition="top"
1984
2028
  />
1985
2029
  </th>
@@ -1998,27 +2042,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
1998
2042
  @let tooltip = getTooltip(rowData);
1999
2043
  <tr [class.highlight-warning]="hasUnmet">
2000
2044
  <td class="w-12">
2001
- <p-checkbox
2045
+ <f-checkbox
2002
2046
  [ngModel]="selectionMap()[rowData.id]"
2003
2047
  [binary]="true"
2004
2048
  (ngModelChange)="onActionToggle(rowData, $event)"
2005
- [pTooltip]="tooltip"
2049
+ [fTooltip]="tooltip"
2006
2050
  tooltipPosition="top"
2007
2051
  />
2008
2052
  </td>
2009
2053
  <td>
2010
- <p-treeTableToggler [rowNode]="rowNode" />
2054
+ <f-treetabletoggler [rowNode]="rowNode" />
2011
2055
  <span class="inline-flex items-center gap-2">
2012
2056
  {{ rowData.name }}
2013
2057
  @if (hasUnmet) {
2014
- <i
2015
- class="pi pi-exclamation-triangle text-orange-500"
2016
- [pTooltip]="
2058
+ <ui-icon name="exclamation-triangle" class="text-orange-500" [fTooltip]="
2017
2059
  'iam.validation.unmet.prerequisites.tooltip'
2018
2060
  | translate
2019
2061
  "
2020
- tooltipPosition="top"
2021
- ></i>
2062
+ tooltipPosition="top"></ui-icon>
2022
2063
  }
2023
2064
  </span>
2024
2065
  </td>
@@ -2026,7 +2067,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
2026
2067
  {{ rowData.code || '-' }}
2027
2068
  </td>
2028
2069
  <td>
2029
- <p-tag
2070
+ <f-tag
2030
2071
  [value]="rowData.actionType"
2031
2072
  [severity]="
2032
2073
  rowData.actionType === 'backend' ? 'info' : 'success'
@@ -2048,7 +2089,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
2048
2089
  <tr>
2049
2090
  <td colspan="5" class="text-center p-4 text-muted-color">
2050
2091
  @if (loading()) {
2051
- <i class="pi pi-spin pi-spinner"></i>
2092
+ <ui-icon name="loader-circle" spin></ui-icon>
2052
2093
  {{ 'shared.loading.actions' | translate }}
2053
2094
  } @else {
2054
2095
  {{ 'iam.permission.no.actions.available' | translate }}
@@ -2056,14 +2097,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
2056
2097
  </td>
2057
2098
  </tr>
2058
2099
  </ng-template>
2059
- </p-treeTable>
2100
+ </f-treetable>
2060
2101
  </div>
2061
2102
  </div>
2062
2103
 
2063
2104
  @if (hasChanges()) {
2064
2105
  <div class="border border-surface rounded-border p-3 mt-4">
2065
2106
  <div class="flex items-center gap-2 mb-3">
2066
- <i class="pi pi-info-circle text-primary"></i>
2107
+ <ui-icon name="info-circle" class="text-primary"></ui-icon>
2067
2108
  <span class="font-bold">{{
2068
2109
  'shared.pending.changes' | translate
2069
2110
  }}</span>
@@ -2072,7 +2113,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
2072
2113
  @if (pendingAdd().length > 0) {
2073
2114
  <div>
2074
2115
  <div class="flex items-center gap-2 mb-2">
2075
- <i class="pi pi-plus-circle text-green-500"></i>
2116
+ <ui-icon name="plus-circle" class="text-green-500"></ui-icon>
2076
2117
  <strong class="text-sm"
2077
2118
  >{{ 'shared.to.add' | translate }} ({{
2078
2119
  pendingAdd().length
@@ -2089,7 +2130,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
2089
2130
  @if (pendingRemove().length > 0) {
2090
2131
  <div>
2091
2132
  <div class="flex items-center gap-2 mb-2">
2092
- <i class="pi pi-minus-circle text-red-500"></i>
2133
+ <ui-icon name="minus-circle" class="text-red-500"></ui-icon>
2093
2134
  <strong class="text-sm"
2094
2135
  >{{ 'shared.to.remove' | translate }} ({{
2095
2136
  pendingRemove().length
@@ -2110,9 +2151,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
2110
2151
 
2111
2152
  @if (!loading() && actions().length === 0) {
2112
2153
  <div class="surface-card p-5 rounded-border shadow-sm text-center">
2113
- <i
2114
- class="pi pi-info-circle text-muted-color mb-3 block text-5xl"
2115
- ></i>
2154
+ <ui-icon name="info-circle" class="text-muted-color mb-3 block text-5xl"></ui-icon>
2116
2155
  <p class="text-muted-color m-0">
2117
2156
  {{ 'iam.permission.no.actions.for.role' | translate }}
2118
2157
  </p>
@@ -2120,7 +2159,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
2120
2159
  }
2121
2160
  }
2122
2161
  </div>
2123
- `, styles: [":host{display:block}.validation-warning{background-color:var(--p-yellow-50, #fefce8);border-left:4px solid var(--p-yellow-500, #eab308);color:var(--p-yellow-700, #a16207)}:host-context(.p-dark) .validation-warning{background-color:#eab3081a;color:var(--p-yellow-400, #facc15)}:host ::ng-deep tr.highlight-warning{background-color:var(--p-red-50, rgba(239, 68, 68, .1))!important}:host-context(.p-dark) ::ng-deep tr.highlight-warning{background-color:#ef444426!important}\n"] }]
2162
+ `, styles: [":host{display:block}.validation-warning{background-color:var(--f-yellow-50, #fefce8);border-left:4px solid var(--f-yellow-500, #eab308);color:var(--f-yellow-700, #a16207)}:host-context(.p-dark) .validation-warning{background-color:#eab3081a;color:var(--f-yellow-400, #facc15)}:host ::ng-deep tr.highlight-warning{background-color:var(--f-red-50, rgba(239, 68, 68, .1))!important}:host-context(.p-dark) ::ng-deep tr.highlight-warning{background-color:#ef444426!important}\n"] }]
2124
2163
  }], ctorParameters: () => [] });
2125
2164
 
2126
2165
  class CompanyActionSelectorComponent extends BaseActionSelectorComponent {
@@ -2131,8 +2170,10 @@ class CompanyActionSelectorComponent extends BaseActionSelectorComponent {
2131
2170
  messageService = inject(MessageService);
2132
2171
  confirmationService = inject(ConfirmationService);
2133
2172
  destroyRef = inject(DestroyRef);
2134
- selectedCompanyId = signal(undefined, ...(ngDevMode ? [{ debugName: "selectedCompanyId" }] : []));
2135
- companies = signal([], ...(ngDevMode ? [{ debugName: "companies" }] : []));
2173
+ selectedCompanyId = signal(undefined, /* @ts-ignore */
2174
+ ...(ngDevMode ? [{ debugName: "selectedCompanyId" }] : /* istanbul ignore next */ []));
2175
+ companies = signal([], /* @ts-ignore */
2176
+ ...(ngDevMode ? [{ debugName: "companies" }] : /* istanbul ignore next */ []));
2136
2177
  loadDataAbortController = null;
2137
2178
  constructor() {
2138
2179
  super();
@@ -2246,11 +2287,11 @@ class CompanyActionSelectorComponent extends BaseActionSelectorComponent {
2246
2287
  this.confirmationService.confirm({
2247
2288
  header: this.translate('iam.permission.prerequisite.validation.failed'),
2248
2289
  message: `${this.translate('iam.permission.prerequisite.error.message')}\n\n${errorList}\n\n${this.translate('iam.permission.auto.select.prompt')}`,
2249
- icon: 'pi pi-exclamation-triangle',
2290
+ icon: 'exclamation-triangle',
2250
2291
  acceptLabel: this.translate('iam.permission.auto.select.required'),
2251
2292
  rejectLabel: this.translate('shared.cancel'),
2252
- acceptIcon: 'pi pi-check',
2253
- rejectIcon: 'pi pi-times',
2293
+ acceptIcon: 'check',
2294
+ rejectIcon: 'times',
2254
2295
  accept: () => {
2255
2296
  const selMap = { ...this.selectionMap() };
2256
2297
  prerequisiteErrors.forEach((error) => {
@@ -2275,8 +2316,8 @@ class CompanyActionSelectorComponent extends BaseActionSelectorComponent {
2275
2316
  },
2276
2317
  });
2277
2318
  }
2278
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: CompanyActionSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2279
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.5", type: CompanyActionSelectorComponent, isStandalone: true, selector: "flusys-company-action-selector", usesInheritance: true, ngImport: i0, template: `
2319
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: CompanyActionSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2320
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: CompanyActionSelectorComponent, isStandalone: true, selector: "flusys-company-action-selector", usesInheritance: true, ngImport: i0, template: `
2280
2321
  <div class="company-action-selector">
2281
2322
  <div class="mb-4">
2282
2323
  <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
@@ -2284,7 +2325,7 @@ class CompanyActionSelectorComponent extends BaseActionSelectorComponent {
2284
2325
  <label class="block font-semibold mb-2">{{
2285
2326
  'iam.permission.select.company' | translate
2286
2327
  }}</label>
2287
- <p-select
2328
+ <f-select
2288
2329
  [ngModel]="selectedCompanyId()"
2289
2330
  (ngModelChange)="selectedCompanyId.set($event)"
2290
2331
  [options]="companies()"
@@ -2306,7 +2347,7 @@ class CompanyActionSelectorComponent extends BaseActionSelectorComponent {
2306
2347
  <div
2307
2348
  class="surface-card p-5 rounded-border shadow-sm flex justify-center"
2308
2349
  >
2309
- <i class="pi pi-spin pi-spinner text-primary text-5xl"></i>
2350
+ <ui-icon name="loader-circle" spin class="text-primary text-5xl"></ui-icon>
2310
2351
  </div>
2311
2352
  }
2312
2353
 
@@ -2327,38 +2368,47 @@ class CompanyActionSelectorComponent extends BaseActionSelectorComponent {
2327
2368
  </p>
2328
2369
  </div>
2329
2370
  <div class="flex flex-wrap gap-2">
2330
- <p-button
2331
- [label]="'shared.select.all' | translate"
2332
- icon="pi pi-check"
2371
+ <button
2372
+ fButton
2333
2373
  [outlined]="true"
2334
2374
  size="small"
2335
2375
  severity="secondary"
2336
- (onClick)="selectAll()"
2337
- />
2338
- <p-button
2339
- [label]="'shared.deselect.all' | translate"
2340
- icon="pi pi-times"
2376
+ (click)="selectAll()"
2377
+ >
2378
+ <ui-icon pButtonIcon name="check"></ui-icon>
2379
+ <span pButtonLabel>{{ 'shared.select.all' | translate }}</span>
2380
+ </button>
2381
+ <button
2382
+ fButton
2341
2383
  [outlined]="true"
2342
2384
  size="small"
2343
2385
  severity="secondary"
2344
- (onClick)="deselectAll()"
2345
- />
2346
- <p-button
2386
+ (click)="deselectAll()"
2387
+ >
2388
+ <ui-icon pButtonIcon name="times"></ui-icon>
2389
+ <span pButtonLabel>{{ 'shared.deselect.all' | translate }}</span>
2390
+ </button>
2391
+ <button
2392
+ fButton
2347
2393
  *hasPermission="COMPANY_ACTION_PERMISSIONS.ASSIGN"
2348
- [label]="'shared.save.changes' | translate"
2349
- icon="pi pi-save"
2350
- [disabled]="!canSave()"
2351
- [loading]="saving()"
2394
+ [disabled]="!canSave() || saving()"
2352
2395
  size="small"
2353
- (onClick)="saveChanges()"
2354
- />
2396
+ (click)="saveChanges()"
2397
+ >
2398
+ @if (saving()) {
2399
+ <ui-icon pButtonIcon name="spinner" [spin]="true"></ui-icon>
2400
+ } @else {
2401
+ <ui-icon pButtonIcon name="save"></ui-icon>
2402
+ }
2403
+ <span pButtonLabel>{{ 'shared.save.changes' | translate }}</span>
2404
+ </button>
2355
2405
  </div>
2356
2406
  </div>
2357
2407
 
2358
2408
  @if (invalidActionsCount() > 0) {
2359
2409
  <div class="validation-warning rounded-border p-3 mb-4">
2360
2410
  <div class="flex items-start gap-2">
2361
- <i class="pi pi-exclamation-triangle text-xl"></i>
2411
+ <ui-icon name="exclamation-triangle" class="text-xl"></ui-icon>
2362
2412
  <div class="flex-1">
2363
2413
  <span class="font-semibold"
2364
2414
  >{{ 'iam.validation.warning.title' | translate }}:</span
@@ -2377,20 +2427,19 @@ class CompanyActionSelectorComponent extends BaseActionSelectorComponent {
2377
2427
  }
2378
2428
 
2379
2429
  <div class="overflow-x-auto -mx-4 sm:mx-0">
2380
- <p-treeTable
2430
+ <f-treetable
2381
2431
  [value]="treeNodes()"
2382
2432
  dataKey="id"
2383
- class="p-treetable-sm"
2384
2433
  [tableStyle]="{ 'min-width': '50rem' }"
2385
2434
  >
2386
2435
  <ng-template #header>
2387
2436
  <tr>
2388
2437
  <th class="w-12">
2389
- <p-checkbox
2438
+ <f-checkbox
2390
2439
  [ngModel]="allSelected()"
2391
2440
  [binary]="true"
2392
2441
  (ngModelChange)="toggleAll()"
2393
- [pTooltip]="'shared.select.deselect.all' | translate"
2442
+ [fTooltip]="'shared.select.deselect.all' | translate"
2394
2443
  tooltipPosition="top"
2395
2444
  />
2396
2445
  </th>
@@ -2408,27 +2457,24 @@ class CompanyActionSelectorComponent extends BaseActionSelectorComponent {
2408
2457
  @let hasUnmet = hasUnmetPrerequisites(rowData);
2409
2458
  <tr [class.highlight-warning]="hasUnmet">
2410
2459
  <td class="w-12">
2411
- <p-checkbox
2460
+ <f-checkbox
2412
2461
  [ngModel]="selectionMap()[rowData.id]"
2413
2462
  [binary]="true"
2414
2463
  (ngModelChange)="onActionToggle(rowData, $event)"
2415
- [pTooltip]="getTooltip(rowData)"
2464
+ [fTooltip]="getTooltip(rowData)"
2416
2465
  tooltipPosition="top"
2417
2466
  />
2418
2467
  </td>
2419
2468
  <td>
2420
- <p-treeTableToggler [rowNode]="rowNode" />
2469
+ <f-treetabletoggler [rowNode]="rowNode" />
2421
2470
  <span class="inline-flex items-center gap-2">
2422
2471
  {{ rowData.name }}
2423
2472
  @if (hasUnmet) {
2424
- <i
2425
- class="pi pi-exclamation-triangle text-orange-500"
2426
- [pTooltip]="
2473
+ <ui-icon name="exclamation-triangle" class="text-orange-500" [fTooltip]="
2427
2474
  'iam.validation.unmet.prerequisites.tooltip'
2428
2475
  | translate
2429
2476
  "
2430
- tooltipPosition="top"
2431
- ></i>
2477
+ tooltipPosition="top"></ui-icon>
2432
2478
  }
2433
2479
  </span>
2434
2480
  </td>
@@ -2436,7 +2482,7 @@ class CompanyActionSelectorComponent extends BaseActionSelectorComponent {
2436
2482
  {{ rowData.code || '-' }}
2437
2483
  </td>
2438
2484
  <td>
2439
- <p-tag
2485
+ <f-tag
2440
2486
  [value]="rowData.actionType"
2441
2487
  [severity]="
2442
2488
  rowData.actionType === 'backend' ? 'info' : 'success'
@@ -2452,7 +2498,7 @@ class CompanyActionSelectorComponent extends BaseActionSelectorComponent {
2452
2498
  <tr>
2453
2499
  <td colspan="5" class="text-center p-4 text-muted-color">
2454
2500
  @if (loading()) {
2455
- <i class="pi pi-spin pi-spinner"></i>
2501
+ <ui-icon name="loader-circle" spin></ui-icon>
2456
2502
  {{ 'shared.loading.actions' | translate }}
2457
2503
  } @else {
2458
2504
  {{ 'iam.permission.no.actions.available' | translate }}
@@ -2460,14 +2506,14 @@ class CompanyActionSelectorComponent extends BaseActionSelectorComponent {
2460
2506
  </td>
2461
2507
  </tr>
2462
2508
  </ng-template>
2463
- </p-treeTable>
2509
+ </f-treetable>
2464
2510
  </div>
2465
2511
  </div>
2466
2512
 
2467
2513
  @if (hasChanges()) {
2468
2514
  <div class="border border-surface rounded-border p-3 mt-4">
2469
2515
  <div class="flex items-center gap-2 mb-3">
2470
- <i class="pi pi-info-circle text-primary"></i>
2516
+ <ui-icon name="info-circle" class="text-primary"></ui-icon>
2471
2517
  <span class="font-bold">{{
2472
2518
  'shared.pending.changes' | translate
2473
2519
  }}</span>
@@ -2476,7 +2522,7 @@ class CompanyActionSelectorComponent extends BaseActionSelectorComponent {
2476
2522
  @if (pendingAdd().length > 0) {
2477
2523
  <div>
2478
2524
  <div class="flex items-center gap-2 mb-2">
2479
- <i class="pi pi-plus-circle text-green-500"></i>
2525
+ <ui-icon name="plus-circle" class="text-green-500"></ui-icon>
2480
2526
  <strong class="text-sm"
2481
2527
  >{{ 'shared.to.whitelist' | translate }} ({{
2482
2528
  pendingAdd().length
@@ -2493,7 +2539,7 @@ class CompanyActionSelectorComponent extends BaseActionSelectorComponent {
2493
2539
  @if (pendingRemove().length > 0) {
2494
2540
  <div>
2495
2541
  <div class="flex items-center gap-2 mb-2">
2496
- <i class="pi pi-minus-circle text-red-500"></i>
2542
+ <ui-icon name="minus-circle" class="text-red-500"></ui-icon>
2497
2543
  <strong class="text-sm"
2498
2544
  >{{ 'shared.to.remove' | translate }} ({{
2499
2545
  pendingRemove().length
@@ -2514,9 +2560,7 @@ class CompanyActionSelectorComponent extends BaseActionSelectorComponent {
2514
2560
 
2515
2561
  @if (!loading() && actions().length === 0) {
2516
2562
  <div class="surface-card p-5 rounded-border shadow-sm text-center">
2517
- <i
2518
- class="pi pi-info-circle text-muted-color mb-3 block text-5xl"
2519
- ></i>
2563
+ <ui-icon name="info-circle" class="text-muted-color mb-3 block text-5xl"></ui-icon>
2520
2564
  <p class="text-muted-color m-0">
2521
2565
  {{ 'iam.permission.no.actions.for.company' | translate }}
2522
2566
  </p>
@@ -2524,11 +2568,11 @@ class CompanyActionSelectorComponent extends BaseActionSelectorComponent {
2524
2568
  }
2525
2569
  }
2526
2570
  </div>
2527
- `, isInline: true, styles: [":host{display:block}.validation-warning{background-color:var(--p-yellow-50, #fefce8);border-left:4px solid var(--p-yellow-500, #eab308);color:var(--p-yellow-700, #a16207)}:host-context(.p-dark) .validation-warning{background-color:#eab3081a;color:var(--p-yellow-400, #facc15)}:host ::ng-deep tr.highlight-warning{background-color:var(--p-red-50, rgba(239, 68, 68, .1))!important}:host-context(.p-dark) ::ng-deep tr.highlight-warning{background-color:#ef444426!important}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: PrimeModule }, { kind: "component", type: i2.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i3.Checkbox, selector: "p-checkbox, p-checkBox, p-check-box", inputs: ["hostName", "value", "binary", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "inputStyle", "styleClass", "inputClass", "indeterminate", "formControl", "checkboxIcon", "readonly", "autofocus", "trueValue", "falseValue", "variant", "size"], outputs: ["onChange", "onFocus", "onBlur"] }, { kind: "component", type: i4.Select, selector: "p-select", inputs: ["id", "scrollHeight", "filter", "panelStyle", "styleClass", "panelStyleClass", "readonly", "editable", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "filterValue", "options", "appendTo", "motionOptions"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "component", type: i5.Tag, selector: "p-tag", inputs: ["styleClass", "severity", "value", "icon", "rounded"] }, { kind: "directive", type: i6.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "showOnEllipsis", "pTooltip", "tooltipDisabled", "tooltipOptions", "appendTo", "ptTooltip", "pTooltipPT", "pTooltipUnstyled"] }, { kind: "component", type: i7.TreeTable, selector: "p-treeTable, p-treetable, p-tree-table", inputs: ["columns", "styleClass", "tableStyle", "tableStyleClass", "autoLayout", "lazy", "lazyLoadOnInit", "paginator", "rows", "first", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "customSort", "selectionMode", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "compareSelectionBy", "rowHover", "loading", "loadingIcon", "showLoader", "scrollable", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "frozenColumns", "resizableColumns", "columnResizeMode", "reorderableColumns", "contextMenu", "rowTrackBy", "filters", "globalFilterFields", "filterDelay", "filterMode", "filterLocale", "paginatorLocale", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "value", "virtualRowHeight", "selectionKeys", "showGridlines"], outputs: ["selectionChange", "contextMenuSelectionChange", "onFilter", "onNodeExpand", "onNodeCollapse", "onPage", "onSort", "onLazyLoad", "sortFunction", "onColResize", "onColReorder", "onNodeSelect", "onNodeUnselect", "onContextMenuSelect", "onHeaderCheckboxToggle", "onEditInit", "onEditComplete", "onEditCancel", "selectionKeysChange"] }, { kind: "component", type: i7.TreeTableToggler, selector: "p-treeTableToggler, p-treetabletoggler, p-treetable-toggler", inputs: ["rowNode"] }, { kind: "directive", type: HasPermissionDirective, selector: "[hasPermission]", inputs: ["hasPermission"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
2571
+ `, isInline: true, styles: [":host{display:block}.validation-warning{background-color:var(--f-yellow-50, #fefce8);border-left:4px solid var(--f-yellow-500, #eab308);color:var(--f-yellow-700, #a16207)}:host-context(.p-dark) .validation-warning{background-color:#eab3081a;color:var(--f-yellow-400, #facc15)}:host ::ng-deep tr.highlight-warning{background-color:var(--f-red-50, rgba(239, 68, 68, .1))!important}:host-context(.p-dark) ::ng-deep tr.highlight-warning{background-color:#ef444426!important}\n"], dependencies: [{ kind: "ngmodule", type: UiModule }, { kind: "directive", type: i2.FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "rounded", "raised", "fluid", "disabled", "loading", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "component", type: i2.TagComponent, selector: "f-tag", inputs: ["value", "severity", "icon", "rounded", "color"] }, { kind: "component", type: i2.CheckboxComponent, selector: "f-checkbox", inputs: ["label", "binary", "disabled", "inputId", "invalid", "indeterminate", "touched", "styleClass", "checked"], outputs: ["onChange", "onBlur", "touch", "checkedChange"] }, { kind: "component", type: i2.SelectComponent, selector: "f-select", inputs: ["options", "optionLabel", "optionValue", "placeholder", "disabled", "filter", "showClear", "loading", "inputId", "invalid", "touched", "styleClass", "editable"], outputs: ["onFilter", "onChange", "onShow", "onHide", "onBlur"] }, { kind: "directive", type: i2.TooltipDirective, selector: "[fTooltip]", inputs: ["fTooltip", "tooltipPosition", "tooltipStyleClass", "disabled", "tooltipEvent", "showDelay", "hideDelay"] }, { kind: "component", type: i2.TreeTableComponent, selector: "f-treetable", inputs: ["value", "loading", "dataKey", "styleClass", "tableStyle", "scrollable"] }, { kind: "component", type: i2.TreeTableTogglerComponent, selector: "f-treetabletoggler", inputs: ["rowNode"] }, { kind: "component", type: i2.UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: HasPermissionDirective, selector: "[hasPermission]", inputs: ["hasPermission"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
2528
2572
  }
2529
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: CompanyActionSelectorComponent, decorators: [{
2573
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: CompanyActionSelectorComponent, decorators: [{
2530
2574
  type: Component,
2531
- args: [{ selector: 'flusys-company-action-selector', imports: [FormsModule, PrimeModule, HasPermissionDirective, TranslatePipe], template: `
2575
+ args: [{ selector: 'flusys-company-action-selector', imports: [UiModule, FormsModule, HasPermissionDirective, TranslatePipe], template: `
2532
2576
  <div class="company-action-selector">
2533
2577
  <div class="mb-4">
2534
2578
  <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
@@ -2536,7 +2580,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
2536
2580
  <label class="block font-semibold mb-2">{{
2537
2581
  'iam.permission.select.company' | translate
2538
2582
  }}</label>
2539
- <p-select
2583
+ <f-select
2540
2584
  [ngModel]="selectedCompanyId()"
2541
2585
  (ngModelChange)="selectedCompanyId.set($event)"
2542
2586
  [options]="companies()"
@@ -2558,7 +2602,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
2558
2602
  <div
2559
2603
  class="surface-card p-5 rounded-border shadow-sm flex justify-center"
2560
2604
  >
2561
- <i class="pi pi-spin pi-spinner text-primary text-5xl"></i>
2605
+ <ui-icon name="loader-circle" spin class="text-primary text-5xl"></ui-icon>
2562
2606
  </div>
2563
2607
  }
2564
2608
 
@@ -2579,38 +2623,47 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
2579
2623
  </p>
2580
2624
  </div>
2581
2625
  <div class="flex flex-wrap gap-2">
2582
- <p-button
2583
- [label]="'shared.select.all' | translate"
2584
- icon="pi pi-check"
2626
+ <button
2627
+ fButton
2585
2628
  [outlined]="true"
2586
2629
  size="small"
2587
2630
  severity="secondary"
2588
- (onClick)="selectAll()"
2589
- />
2590
- <p-button
2591
- [label]="'shared.deselect.all' | translate"
2592
- icon="pi pi-times"
2631
+ (click)="selectAll()"
2632
+ >
2633
+ <ui-icon pButtonIcon name="check"></ui-icon>
2634
+ <span pButtonLabel>{{ 'shared.select.all' | translate }}</span>
2635
+ </button>
2636
+ <button
2637
+ fButton
2593
2638
  [outlined]="true"
2594
2639
  size="small"
2595
2640
  severity="secondary"
2596
- (onClick)="deselectAll()"
2597
- />
2598
- <p-button
2641
+ (click)="deselectAll()"
2642
+ >
2643
+ <ui-icon pButtonIcon name="times"></ui-icon>
2644
+ <span pButtonLabel>{{ 'shared.deselect.all' | translate }}</span>
2645
+ </button>
2646
+ <button
2647
+ fButton
2599
2648
  *hasPermission="COMPANY_ACTION_PERMISSIONS.ASSIGN"
2600
- [label]="'shared.save.changes' | translate"
2601
- icon="pi pi-save"
2602
- [disabled]="!canSave()"
2603
- [loading]="saving()"
2649
+ [disabled]="!canSave() || saving()"
2604
2650
  size="small"
2605
- (onClick)="saveChanges()"
2606
- />
2651
+ (click)="saveChanges()"
2652
+ >
2653
+ @if (saving()) {
2654
+ <ui-icon pButtonIcon name="spinner" [spin]="true"></ui-icon>
2655
+ } @else {
2656
+ <ui-icon pButtonIcon name="save"></ui-icon>
2657
+ }
2658
+ <span pButtonLabel>{{ 'shared.save.changes' | translate }}</span>
2659
+ </button>
2607
2660
  </div>
2608
2661
  </div>
2609
2662
 
2610
2663
  @if (invalidActionsCount() > 0) {
2611
2664
  <div class="validation-warning rounded-border p-3 mb-4">
2612
2665
  <div class="flex items-start gap-2">
2613
- <i class="pi pi-exclamation-triangle text-xl"></i>
2666
+ <ui-icon name="exclamation-triangle" class="text-xl"></ui-icon>
2614
2667
  <div class="flex-1">
2615
2668
  <span class="font-semibold"
2616
2669
  >{{ 'iam.validation.warning.title' | translate }}:</span
@@ -2629,20 +2682,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
2629
2682
  }
2630
2683
 
2631
2684
  <div class="overflow-x-auto -mx-4 sm:mx-0">
2632
- <p-treeTable
2685
+ <f-treetable
2633
2686
  [value]="treeNodes()"
2634
2687
  dataKey="id"
2635
- class="p-treetable-sm"
2636
2688
  [tableStyle]="{ 'min-width': '50rem' }"
2637
2689
  >
2638
2690
  <ng-template #header>
2639
2691
  <tr>
2640
2692
  <th class="w-12">
2641
- <p-checkbox
2693
+ <f-checkbox
2642
2694
  [ngModel]="allSelected()"
2643
2695
  [binary]="true"
2644
2696
  (ngModelChange)="toggleAll()"
2645
- [pTooltip]="'shared.select.deselect.all' | translate"
2697
+ [fTooltip]="'shared.select.deselect.all' | translate"
2646
2698
  tooltipPosition="top"
2647
2699
  />
2648
2700
  </th>
@@ -2660,27 +2712,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
2660
2712
  @let hasUnmet = hasUnmetPrerequisites(rowData);
2661
2713
  <tr [class.highlight-warning]="hasUnmet">
2662
2714
  <td class="w-12">
2663
- <p-checkbox
2715
+ <f-checkbox
2664
2716
  [ngModel]="selectionMap()[rowData.id]"
2665
2717
  [binary]="true"
2666
2718
  (ngModelChange)="onActionToggle(rowData, $event)"
2667
- [pTooltip]="getTooltip(rowData)"
2719
+ [fTooltip]="getTooltip(rowData)"
2668
2720
  tooltipPosition="top"
2669
2721
  />
2670
2722
  </td>
2671
2723
  <td>
2672
- <p-treeTableToggler [rowNode]="rowNode" />
2724
+ <f-treetabletoggler [rowNode]="rowNode" />
2673
2725
  <span class="inline-flex items-center gap-2">
2674
2726
  {{ rowData.name }}
2675
2727
  @if (hasUnmet) {
2676
- <i
2677
- class="pi pi-exclamation-triangle text-orange-500"
2678
- [pTooltip]="
2728
+ <ui-icon name="exclamation-triangle" class="text-orange-500" [fTooltip]="
2679
2729
  'iam.validation.unmet.prerequisites.tooltip'
2680
2730
  | translate
2681
2731
  "
2682
- tooltipPosition="top"
2683
- ></i>
2732
+ tooltipPosition="top"></ui-icon>
2684
2733
  }
2685
2734
  </span>
2686
2735
  </td>
@@ -2688,7 +2737,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
2688
2737
  {{ rowData.code || '-' }}
2689
2738
  </td>
2690
2739
  <td>
2691
- <p-tag
2740
+ <f-tag
2692
2741
  [value]="rowData.actionType"
2693
2742
  [severity]="
2694
2743
  rowData.actionType === 'backend' ? 'info' : 'success'
@@ -2704,7 +2753,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
2704
2753
  <tr>
2705
2754
  <td colspan="5" class="text-center p-4 text-muted-color">
2706
2755
  @if (loading()) {
2707
- <i class="pi pi-spin pi-spinner"></i>
2756
+ <ui-icon name="loader-circle" spin></ui-icon>
2708
2757
  {{ 'shared.loading.actions' | translate }}
2709
2758
  } @else {
2710
2759
  {{ 'iam.permission.no.actions.available' | translate }}
@@ -2712,14 +2761,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
2712
2761
  </td>
2713
2762
  </tr>
2714
2763
  </ng-template>
2715
- </p-treeTable>
2764
+ </f-treetable>
2716
2765
  </div>
2717
2766
  </div>
2718
2767
 
2719
2768
  @if (hasChanges()) {
2720
2769
  <div class="border border-surface rounded-border p-3 mt-4">
2721
2770
  <div class="flex items-center gap-2 mb-3">
2722
- <i class="pi pi-info-circle text-primary"></i>
2771
+ <ui-icon name="info-circle" class="text-primary"></ui-icon>
2723
2772
  <span class="font-bold">{{
2724
2773
  'shared.pending.changes' | translate
2725
2774
  }}</span>
@@ -2728,7 +2777,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
2728
2777
  @if (pendingAdd().length > 0) {
2729
2778
  <div>
2730
2779
  <div class="flex items-center gap-2 mb-2">
2731
- <i class="pi pi-plus-circle text-green-500"></i>
2780
+ <ui-icon name="plus-circle" class="text-green-500"></ui-icon>
2732
2781
  <strong class="text-sm"
2733
2782
  >{{ 'shared.to.whitelist' | translate }} ({{
2734
2783
  pendingAdd().length
@@ -2745,7 +2794,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
2745
2794
  @if (pendingRemove().length > 0) {
2746
2795
  <div>
2747
2796
  <div class="flex items-center gap-2 mb-2">
2748
- <i class="pi pi-minus-circle text-red-500"></i>
2797
+ <ui-icon name="minus-circle" class="text-red-500"></ui-icon>
2749
2798
  <strong class="text-sm"
2750
2799
  >{{ 'shared.to.remove' | translate }} ({{
2751
2800
  pendingRemove().length
@@ -2766,9 +2815,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
2766
2815
 
2767
2816
  @if (!loading() && actions().length === 0) {
2768
2817
  <div class="surface-card p-5 rounded-border shadow-sm text-center">
2769
- <i
2770
- class="pi pi-info-circle text-muted-color mb-3 block text-5xl"
2771
- ></i>
2818
+ <ui-icon name="info-circle" class="text-muted-color mb-3 block text-5xl"></ui-icon>
2772
2819
  <p class="text-muted-color m-0">
2773
2820
  {{ 'iam.permission.no.actions.for.company' | translate }}
2774
2821
  </p>
@@ -2776,7 +2823,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
2776
2823
  }
2777
2824
  }
2778
2825
  </div>
2779
- `, styles: [":host{display:block}.validation-warning{background-color:var(--p-yellow-50, #fefce8);border-left:4px solid var(--p-yellow-500, #eab308);color:var(--p-yellow-700, #a16207)}:host-context(.p-dark) .validation-warning{background-color:#eab3081a;color:var(--p-yellow-400, #facc15)}:host ::ng-deep tr.highlight-warning{background-color:var(--p-red-50, rgba(239, 68, 68, .1))!important}:host-context(.p-dark) ::ng-deep tr.highlight-warning{background-color:#ef444426!important}\n"] }]
2826
+ `, styles: [":host{display:block}.validation-warning{background-color:var(--f-yellow-50, #fefce8);border-left:4px solid var(--f-yellow-500, #eab308);color:var(--f-yellow-700, #a16207)}:host-context(.p-dark) .validation-warning{background-color:#eab3081a;color:var(--f-yellow-400, #facc15)}:host ::ng-deep tr.highlight-warning{background-color:var(--f-red-50, rgba(239, 68, 68, .1))!important}:host-context(.p-dark) ::ng-deep tr.highlight-warning{background-color:#ef444426!important}\n"] }]
2780
2827
  }], ctorParameters: () => [] });
2781
2828
 
2782
2829
  /**
@@ -2825,28 +2872,38 @@ class UserRoleSelectorComponent {
2825
2872
  return this.translateAdapter?.translate(key, vars) ?? key;
2826
2873
  }
2827
2874
  // State - User/Branch Selection
2828
- selectedUserId = signal(null, ...(ngDevMode ? [{ debugName: "selectedUserId" }] : []));
2829
- selectedBranchId = signal(undefined, ...(ngDevMode ? [{ debugName: "selectedBranchId" }] : []));
2830
- branches = signal([], ...(ngDevMode ? [{ debugName: "branches" }] : []));
2875
+ selectedUserId = signal(null, /* @ts-ignore */
2876
+ ...(ngDevMode ? [{ debugName: "selectedUserId" }] : /* istanbul ignore next */ []));
2877
+ selectedBranchId = signal(undefined, /* @ts-ignore */
2878
+ ...(ngDevMode ? [{ debugName: "selectedBranchId" }] : /* istanbul ignore next */ []));
2879
+ branches = signal([], /* @ts-ignore */
2880
+ ...(ngDevMode ? [{ debugName: "branches" }] : /* istanbul ignore next */ []));
2831
2881
  // State - Loading/Saving
2832
- loading = signal(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
2833
- saving = signal(false, ...(ngDevMode ? [{ debugName: "saving" }] : []));
2882
+ loading = signal(false, /* @ts-ignore */
2883
+ ...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
2884
+ saving = signal(false, /* @ts-ignore */
2885
+ ...(ngDevMode ? [{ debugName: "saving" }] : /* istanbul ignore next */ []));
2834
2886
  // State - Roles (Business Logic)
2835
- _roles = signal([], ...(ngDevMode ? [{ debugName: "_roles" }] : []));
2887
+ _roles = signal([], /* @ts-ignore */
2888
+ ...(ngDevMode ? [{ debugName: "_roles" }] : /* istanbul ignore next */ []));
2836
2889
  roles = this._roles.asReadonly();
2837
2890
  // State - Selection
2838
- _selectionMap = signal({}, ...(ngDevMode ? [{ debugName: "_selectionMap" }] : []));
2891
+ _selectionMap = signal({}, /* @ts-ignore */
2892
+ ...(ngDevMode ? [{ debugName: "_selectionMap" }] : /* istanbul ignore next */ []));
2839
2893
  selectionMap = this._selectionMap.asReadonly();
2840
- _initialSelection = signal({}, ...(ngDevMode ? [{ debugName: "_initialSelection" }] : []));
2894
+ _initialSelection = signal({}, /* @ts-ignore */
2895
+ ...(ngDevMode ? [{ debugName: "_initialSelection" }] : /* istanbul ignore next */ []));
2841
2896
  initialSelection = this._initialSelection.asReadonly();
2842
2897
  // Computed - UI Flags
2843
- showBranchSelector = computed(() => isCompanyFeatureEnabled(this.appConfig) === true, ...(ngDevMode ? [{ debugName: "showBranchSelector" }] : []));
2898
+ showBranchSelector = computed(() => isCompanyFeatureEnabled(this.appConfig) === true, /* @ts-ignore */
2899
+ ...(ngDevMode ? [{ debugName: "showBranchSelector" }] : /* istanbul ignore next */ []));
2844
2900
  filteredBranches = computed(() => {
2845
2901
  const currentCompanyId = this.companyContext.currentCompanyInfo()?.id || undefined;
2846
2902
  if (!currentCompanyId)
2847
2903
  return this.branches();
2848
2904
  return this.branches().filter((b) => b.companyId === currentCompanyId);
2849
- }, ...(ngDevMode ? [{ debugName: "filteredBranches" }] : []));
2905
+ }, /* @ts-ignore */
2906
+ ...(ngDevMode ? [{ debugName: "filteredBranches" }] : /* istanbul ignore next */ []));
2850
2907
  // Computed - Selection State
2851
2908
  allSelected = computed(() => {
2852
2909
  const selMap = this.selectionMap();
@@ -2855,7 +2912,8 @@ class UserRoleSelectorComponent {
2855
2912
  return false;
2856
2913
  const selected = Object.values(selMap).filter((v) => v).length;
2857
2914
  return selected === total;
2858
- }, ...(ngDevMode ? [{ debugName: "allSelected" }] : []));
2915
+ }, /* @ts-ignore */
2916
+ ...(ngDevMode ? [{ debugName: "allSelected" }] : /* istanbul ignore next */ []));
2859
2917
  // Computed - Change Detection
2860
2918
  hasChanges = computed(() => {
2861
2919
  const current = this.selectionMap();
@@ -2865,24 +2923,28 @@ class UserRoleSelectorComponent {
2865
2923
  if (currentKeys.length !== initialKeys.length)
2866
2924
  return true;
2867
2925
  return currentKeys.some((key) => current[key] !== initial[key]);
2868
- }, ...(ngDevMode ? [{ debugName: "hasChanges" }] : []));
2926
+ }, /* @ts-ignore */
2927
+ ...(ngDevMode ? [{ debugName: "hasChanges" }] : /* istanbul ignore next */ []));
2869
2928
  // Computed - Pending Changes
2870
2929
  pendingAdd = computed(() => {
2871
2930
  const current = this.selectionMap();
2872
2931
  const initial = this.initialSelection();
2873
2932
  const allRoles = this.roles();
2874
2933
  return allRoles.filter((role) => current[role.id] && !initial[role.id]);
2875
- }, ...(ngDevMode ? [{ debugName: "pendingAdd" }] : []));
2934
+ }, /* @ts-ignore */
2935
+ ...(ngDevMode ? [{ debugName: "pendingAdd" }] : /* istanbul ignore next */ []));
2876
2936
  pendingRemove = computed(() => {
2877
2937
  const current = this.selectionMap();
2878
2938
  const initial = this.initialSelection();
2879
2939
  const allRoles = this.roles();
2880
2940
  return allRoles.filter((role) => !current[role.id] && initial[role.id]);
2881
- }, ...(ngDevMode ? [{ debugName: "pendingRemove" }] : []));
2941
+ }, /* @ts-ignore */
2942
+ ...(ngDevMode ? [{ debugName: "pendingRemove" }] : /* istanbul ignore next */ []));
2882
2943
  // Computed - Save Button State
2883
2944
  canSave = computed(() => {
2884
2945
  return this.hasChanges() && !this.saving();
2885
- }, ...(ngDevMode ? [{ debugName: "canSave" }] : []));
2946
+ }, /* @ts-ignore */
2947
+ ...(ngDevMode ? [{ debugName: "canSave" }] : /* istanbul ignore next */ []));
2886
2948
  constructor() {
2887
2949
  // Effect: Load user branches and data when user changes
2888
2950
  effect(() => {
@@ -3081,15 +3143,15 @@ class UserRoleSelectorComponent {
3081
3143
  this._selectionMap.set({});
3082
3144
  this._initialSelection.set({});
3083
3145
  }
3084
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: UserRoleSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3085
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.5", type: UserRoleSelectorComponent, isStandalone: true, selector: "flusys-user-role-selector", ngImport: i0, template: `
3146
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: UserRoleSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3147
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: UserRoleSelectorComponent, isStandalone: true, selector: "flusys-user-role-selector", ngImport: i0, template: `
3086
3148
  <div class="user-role-selector">
3087
3149
  <!-- User and Branch Selectors -->
3088
3150
  <div class="surface-card p-4 rounded-border mb-4 shadow-sm">
3089
3151
  <div class="grid grid-cols-1 sm:grid-cols-2 gap-5">
3090
3152
  <div>
3091
3153
  <label class="block font-semibold mb-2">
3092
- <i class="pi pi-user mr-2 text-primary"></i>
3154
+ <ui-icon name="user" class="mr-2 text-primary"></ui-icon>
3093
3155
  {{ 'iam.permission.select.user' | translate }}
3094
3156
  </label>
3095
3157
  <lib-user-select
@@ -3105,10 +3167,10 @@ class UserRoleSelectorComponent {
3105
3167
  @if (showBranchSelector()) {
3106
3168
  <div>
3107
3169
  <label class="block font-semibold mb-2">
3108
- <i class="pi pi-building mr-2 text-primary"></i>
3170
+ <ui-icon name="building" class="mr-2 text-primary"></ui-icon>
3109
3171
  {{ 'iam.permission.select.branch' | translate }}
3110
3172
  </label>
3111
- <p-select
3173
+ <f-select
3112
3174
  [ngModel]="selectedBranchId()"
3113
3175
  (ngModelChange)="selectedBranchId.set($event)"
3114
3176
  [options]="filteredBranches()"
@@ -3124,18 +3186,18 @@ class UserRoleSelectorComponent {
3124
3186
  <ng-template #selectedItem let-branch>
3125
3187
  @if (branch) {
3126
3188
  <div class="flex items-center gap-2">
3127
- <i class="pi pi-building text-primary"></i>
3189
+ <ui-icon name="building" class="text-primary"></ui-icon>
3128
3190
  <span class="font-semibold">{{ branch.name }}</span>
3129
3191
  </div>
3130
3192
  }
3131
3193
  </ng-template>
3132
3194
  <ng-template #item let-branch>
3133
3195
  <div class="flex items-center gap-2">
3134
- <i class="pi pi-building text-muted-color"></i>
3196
+ <ui-icon name="building" class="text-muted-color"></ui-icon>
3135
3197
  <span>{{ branch.name }}</span>
3136
3198
  </div>
3137
3199
  </ng-template>
3138
- </p-select>
3200
+ </f-select>
3139
3201
  <small class="text-muted-color block mt-1">
3140
3202
  {{
3141
3203
  (filteredBranches().length !== 1
@@ -3155,7 +3217,7 @@ class UserRoleSelectorComponent {
3155
3217
  <div
3156
3218
  class="surface-card p-5 rounded-border shadow-sm flex justify-center"
3157
3219
  >
3158
- <i class="pi pi-spin pi-spinner text-primary text-5xl"></i>
3220
+ <ui-icon name="loader-circle" spin class="text-primary text-5xl"></ui-icon>
3159
3221
  </div>
3160
3222
  }
3161
3223
 
@@ -3177,37 +3239,46 @@ class UserRoleSelectorComponent {
3177
3239
  </p>
3178
3240
  </div>
3179
3241
  <div class="flex flex-wrap gap-2">
3180
- <p-button
3181
- [label]="'shared.select.all' | translate"
3182
- icon="pi pi-check"
3242
+ <button
3243
+ fButton
3183
3244
  [outlined]="true"
3184
3245
  size="small"
3185
3246
  severity="secondary"
3186
- (onClick)="selectAll()"
3187
- />
3188
- <p-button
3189
- [label]="'shared.deselect.all' | translate"
3190
- icon="pi pi-times"
3247
+ (click)="selectAll()"
3248
+ >
3249
+ <ui-icon pButtonIcon name="check"></ui-icon>
3250
+ <span pButtonLabel>{{ 'shared.select.all' | translate }}</span>
3251
+ </button>
3252
+ <button
3253
+ fButton
3191
3254
  [outlined]="true"
3192
3255
  size="small"
3193
3256
  severity="secondary"
3194
- (onClick)="deselectAll()"
3195
- />
3196
- <p-button
3257
+ (click)="deselectAll()"
3258
+ >
3259
+ <ui-icon pButtonIcon name="times"></ui-icon>
3260
+ <span pButtonLabel>{{ 'shared.deselect.all' | translate }}</span>
3261
+ </button>
3262
+ <button
3263
+ fButton
3197
3264
  *hasPermission="USER_ROLE_PERMISSIONS.ASSIGN"
3198
- [label]="'shared.save.changes' | translate"
3199
- icon="pi pi-save"
3200
- [disabled]="!canSave()"
3201
- [loading]="saving()"
3265
+ [disabled]="!canSave() || saving()"
3202
3266
  size="small"
3203
- (onClick)="saveChanges()"
3204
- />
3267
+ (click)="saveChanges()"
3268
+ >
3269
+ @if (saving()) {
3270
+ <ui-icon pButtonIcon name="spinner" [spin]="true"></ui-icon>
3271
+ } @else {
3272
+ <ui-icon pButtonIcon name="save"></ui-icon>
3273
+ }
3274
+ <span pButtonLabel>{{ 'shared.save.changes' | translate }}</span>
3275
+ </button>
3205
3276
  </div>
3206
3277
  </div>
3207
3278
 
3208
3279
  <!-- Role Table -->
3209
3280
  <div class="overflow-x-auto -mx-4 sm:mx-0">
3210
- <p-table
3281
+ <f-table
3211
3282
  [value]="roles()"
3212
3283
  [rows]="10"
3213
3284
  [paginator]="roles().length > 10"
@@ -3217,17 +3288,16 @@ class UserRoleSelectorComponent {
3217
3288
  [currentPageReportTemplate]="
3218
3289
  'iam.pagination.roles.template' | translate
3219
3290
  "
3220
- styleClass="p-datatable-sm"
3221
3291
  [tableStyle]="{ 'min-width': '35rem' }"
3222
3292
  >
3223
3293
  <ng-template #header>
3224
3294
  <tr>
3225
3295
  <th style="width: 3rem">
3226
- <p-checkbox
3296
+ <f-checkbox
3227
3297
  [ngModel]="allSelected()"
3228
3298
  [binary]="true"
3229
3299
  (ngModelChange)="toggleAll()"
3230
- [pTooltip]="'shared.select.deselect.all' | translate"
3300
+ [fTooltip]="'shared.select.deselect.all' | translate"
3231
3301
  tooltipPosition="top"
3232
3302
  />
3233
3303
  </th>
@@ -3243,11 +3313,11 @@ class UserRoleSelectorComponent {
3243
3313
  <ng-template #body let-role>
3244
3314
  <tr>
3245
3315
  <td>
3246
- <p-checkbox
3316
+ <f-checkbox
3247
3317
  [ngModel]="selectionMap()[role.id]"
3248
3318
  [binary]="true"
3249
3319
  (ngModelChange)="onRoleToggle(role, $event)"
3250
- [pTooltip]="getTooltip(role)"
3320
+ [fTooltip]="getTooltip(role)"
3251
3321
  tooltipPosition="top"
3252
3322
  />
3253
3323
  </td>
@@ -3262,7 +3332,7 @@ class UserRoleSelectorComponent {
3262
3332
  <tr>
3263
3333
  <td colspan="4" class="text-center p-4 text-muted-color">
3264
3334
  @if (loading()) {
3265
- <i class="pi pi-spin pi-spinner"></i>
3335
+ <ui-icon name="loader-circle" spin></ui-icon>
3266
3336
  {{ 'shared.loading.roles' | translate }}
3267
3337
  } @else {
3268
3338
  {{ 'iam.permission.no.roles.available' | translate }}
@@ -3270,7 +3340,7 @@ class UserRoleSelectorComponent {
3270
3340
  </td>
3271
3341
  </tr>
3272
3342
  </ng-template>
3273
- </p-table>
3343
+ </f-table>
3274
3344
  </div>
3275
3345
  </div>
3276
3346
 
@@ -3278,7 +3348,7 @@ class UserRoleSelectorComponent {
3278
3348
  @if (hasChanges()) {
3279
3349
  <div class="border border-surface rounded-border p-3 mt-4">
3280
3350
  <div class="flex items-center gap-2 mb-3">
3281
- <i class="pi pi-info-circle text-primary"></i>
3351
+ <ui-icon name="info-circle" class="text-primary"></ui-icon>
3282
3352
  <span class="font-bold">{{
3283
3353
  'shared.pending.changes' | translate
3284
3354
  }}</span>
@@ -3287,7 +3357,7 @@ class UserRoleSelectorComponent {
3287
3357
  @if (pendingAdd().length > 0) {
3288
3358
  <div>
3289
3359
  <div class="flex items-center gap-2 mb-2">
3290
- <i class="pi pi-plus-circle text-green-500"></i>
3360
+ <ui-icon name="plus-circle" class="text-green-500"></ui-icon>
3291
3361
  <strong class="text-sm"
3292
3362
  >{{ 'shared.to.assign' | translate }} ({{
3293
3363
  pendingAdd().length
@@ -3304,7 +3374,7 @@ class UserRoleSelectorComponent {
3304
3374
  @if (pendingRemove().length > 0) {
3305
3375
  <div>
3306
3376
  <div class="flex items-center gap-2 mb-2">
3307
- <i class="pi pi-minus-circle text-red-500"></i>
3377
+ <ui-icon name="minus-circle" class="text-red-500"></ui-icon>
3308
3378
  <strong class="text-sm"
3309
3379
  >{{ 'shared.to.remove' | translate }} ({{
3310
3380
  pendingRemove().length
@@ -3325,9 +3395,7 @@ class UserRoleSelectorComponent {
3325
3395
 
3326
3396
  @if (!loading() && roles().length === 0) {
3327
3397
  <div class="surface-card p-5 rounded-border shadow-sm text-center">
3328
- <i
3329
- class="pi pi-info-circle text-muted-color mb-3 block text-5xl"
3330
- ></i>
3398
+ <ui-icon name="info-circle" class="text-muted-color mb-3 block text-5xl"></ui-icon>
3331
3399
  <p class="text-muted-color m-0">
3332
3400
  {{ 'iam.permission.no.roles.for.user' | translate }}
3333
3401
  </p>
@@ -3335,14 +3403,14 @@ class UserRoleSelectorComponent {
3335
3403
  }
3336
3404
  }
3337
3405
  </div>
3338
- `, isInline: true, styles: [":host{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: PrimeModule }, { kind: "component", type: i2.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i3.Checkbox, selector: "p-checkbox, p-checkBox, p-check-box", inputs: ["hostName", "value", "binary", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "inputStyle", "styleClass", "inputClass", "indeterminate", "formControl", "checkboxIcon", "readonly", "autofocus", "trueValue", "falseValue", "variant", "size"], outputs: ["onChange", "onFocus", "onBlur"] }, { kind: "component", type: i4.Select, selector: "p-select", inputs: ["id", "scrollHeight", "filter", "panelStyle", "styleClass", "panelStyleClass", "readonly", "editable", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "filterValue", "options", "appendTo", "motionOptions"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "component", type: i5$1.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "size", "showGridlines", "stripedRows", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i6.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "showOnEllipsis", "pTooltip", "tooltipDisabled", "tooltipOptions", "appendTo", "ptTooltip", "pTooltipPT", "pTooltipUnstyled"] }, { kind: "directive", type: HasPermissionDirective, selector: "[hasPermission]", inputs: ["hasPermission"] }, { kind: "component", type: UserSelectComponent, selector: "lib-user-select", inputs: ["showClear", "value"], outputs: ["valueChange", "userSelected"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
3406
+ `, isInline: true, styles: [":host{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: UiModule }, { kind: "directive", type: i2.FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "rounded", "raised", "fluid", "disabled", "loading", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "component", type: i2.CheckboxComponent, selector: "f-checkbox", inputs: ["label", "binary", "disabled", "inputId", "invalid", "indeterminate", "touched", "styleClass", "checked"], outputs: ["onChange", "onBlur", "touch", "checkedChange"] }, { kind: "component", type: i2.SelectComponent, selector: "f-select", inputs: ["options", "optionLabel", "optionValue", "placeholder", "disabled", "filter", "showClear", "loading", "inputId", "invalid", "touched", "styleClass", "editable"], outputs: ["onFilter", "onChange", "onShow", "onHide", "onBlur"] }, { kind: "component", type: i2.TableComponent, selector: "f-table", inputs: ["value", "lazy", "loading", "rows", "totalRecords", "rowHover", "dataKey", "scrollable", "paginator", "first", "rowsPerPageOptions", "showCurrentPageReport", "currentPageReportTemplate", "tableStyle", "styleClass", "globalFilterFields", "sortField", "sortOrder"], outputs: ["sortFieldChange", "sortOrderChange", "onLazyLoad", "onSort"] }, { kind: "directive", type: i2.TooltipDirective, selector: "[fTooltip]", inputs: ["fTooltip", "tooltipPosition", "tooltipStyleClass", "disabled", "tooltipEvent", "showDelay", "hideDelay"] }, { kind: "component", type: i2.UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill"] }, { kind: "directive", type: HasPermissionDirective, selector: "[hasPermission]", inputs: ["hasPermission"] }, { kind: "component", type: UserSelectComponent, selector: "lib-user-select", inputs: ["showClear", "value"], outputs: ["valueChange", "userSelected"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
3339
3407
  }
3340
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: UserRoleSelectorComponent, decorators: [{
3408
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: UserRoleSelectorComponent, decorators: [{
3341
3409
  type: Component,
3342
3410
  args: [{ selector: 'flusys-user-role-selector', imports: [
3343
3411
  CommonModule,
3344
3412
  FormsModule,
3345
- PrimeModule,
3413
+ UiModule,
3346
3414
  HasPermissionDirective,
3347
3415
  UserSelectComponent,
3348
3416
  TranslatePipe,
@@ -3353,7 +3421,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
3353
3421
  <div class="grid grid-cols-1 sm:grid-cols-2 gap-5">
3354
3422
  <div>
3355
3423
  <label class="block font-semibold mb-2">
3356
- <i class="pi pi-user mr-2 text-primary"></i>
3424
+ <ui-icon name="user" class="mr-2 text-primary"></ui-icon>
3357
3425
  {{ 'iam.permission.select.user' | translate }}
3358
3426
  </label>
3359
3427
  <lib-user-select
@@ -3369,10 +3437,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
3369
3437
  @if (showBranchSelector()) {
3370
3438
  <div>
3371
3439
  <label class="block font-semibold mb-2">
3372
- <i class="pi pi-building mr-2 text-primary"></i>
3440
+ <ui-icon name="building" class="mr-2 text-primary"></ui-icon>
3373
3441
  {{ 'iam.permission.select.branch' | translate }}
3374
3442
  </label>
3375
- <p-select
3443
+ <f-select
3376
3444
  [ngModel]="selectedBranchId()"
3377
3445
  (ngModelChange)="selectedBranchId.set($event)"
3378
3446
  [options]="filteredBranches()"
@@ -3388,18 +3456,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
3388
3456
  <ng-template #selectedItem let-branch>
3389
3457
  @if (branch) {
3390
3458
  <div class="flex items-center gap-2">
3391
- <i class="pi pi-building text-primary"></i>
3459
+ <ui-icon name="building" class="text-primary"></ui-icon>
3392
3460
  <span class="font-semibold">{{ branch.name }}</span>
3393
3461
  </div>
3394
3462
  }
3395
3463
  </ng-template>
3396
3464
  <ng-template #item let-branch>
3397
3465
  <div class="flex items-center gap-2">
3398
- <i class="pi pi-building text-muted-color"></i>
3466
+ <ui-icon name="building" class="text-muted-color"></ui-icon>
3399
3467
  <span>{{ branch.name }}</span>
3400
3468
  </div>
3401
3469
  </ng-template>
3402
- </p-select>
3470
+ </f-select>
3403
3471
  <small class="text-muted-color block mt-1">
3404
3472
  {{
3405
3473
  (filteredBranches().length !== 1
@@ -3419,7 +3487,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
3419
3487
  <div
3420
3488
  class="surface-card p-5 rounded-border shadow-sm flex justify-center"
3421
3489
  >
3422
- <i class="pi pi-spin pi-spinner text-primary text-5xl"></i>
3490
+ <ui-icon name="loader-circle" spin class="text-primary text-5xl"></ui-icon>
3423
3491
  </div>
3424
3492
  }
3425
3493
 
@@ -3441,37 +3509,46 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
3441
3509
  </p>
3442
3510
  </div>
3443
3511
  <div class="flex flex-wrap gap-2">
3444
- <p-button
3445
- [label]="'shared.select.all' | translate"
3446
- icon="pi pi-check"
3512
+ <button
3513
+ fButton
3447
3514
  [outlined]="true"
3448
3515
  size="small"
3449
3516
  severity="secondary"
3450
- (onClick)="selectAll()"
3451
- />
3452
- <p-button
3453
- [label]="'shared.deselect.all' | translate"
3454
- icon="pi pi-times"
3517
+ (click)="selectAll()"
3518
+ >
3519
+ <ui-icon pButtonIcon name="check"></ui-icon>
3520
+ <span pButtonLabel>{{ 'shared.select.all' | translate }}</span>
3521
+ </button>
3522
+ <button
3523
+ fButton
3455
3524
  [outlined]="true"
3456
3525
  size="small"
3457
3526
  severity="secondary"
3458
- (onClick)="deselectAll()"
3459
- />
3460
- <p-button
3527
+ (click)="deselectAll()"
3528
+ >
3529
+ <ui-icon pButtonIcon name="times"></ui-icon>
3530
+ <span pButtonLabel>{{ 'shared.deselect.all' | translate }}</span>
3531
+ </button>
3532
+ <button
3533
+ fButton
3461
3534
  *hasPermission="USER_ROLE_PERMISSIONS.ASSIGN"
3462
- [label]="'shared.save.changes' | translate"
3463
- icon="pi pi-save"
3464
- [disabled]="!canSave()"
3465
- [loading]="saving()"
3535
+ [disabled]="!canSave() || saving()"
3466
3536
  size="small"
3467
- (onClick)="saveChanges()"
3468
- />
3537
+ (click)="saveChanges()"
3538
+ >
3539
+ @if (saving()) {
3540
+ <ui-icon pButtonIcon name="spinner" [spin]="true"></ui-icon>
3541
+ } @else {
3542
+ <ui-icon pButtonIcon name="save"></ui-icon>
3543
+ }
3544
+ <span pButtonLabel>{{ 'shared.save.changes' | translate }}</span>
3545
+ </button>
3469
3546
  </div>
3470
3547
  </div>
3471
3548
 
3472
3549
  <!-- Role Table -->
3473
3550
  <div class="overflow-x-auto -mx-4 sm:mx-0">
3474
- <p-table
3551
+ <f-table
3475
3552
  [value]="roles()"
3476
3553
  [rows]="10"
3477
3554
  [paginator]="roles().length > 10"
@@ -3481,17 +3558,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
3481
3558
  [currentPageReportTemplate]="
3482
3559
  'iam.pagination.roles.template' | translate
3483
3560
  "
3484
- styleClass="p-datatable-sm"
3485
3561
  [tableStyle]="{ 'min-width': '35rem' }"
3486
3562
  >
3487
3563
  <ng-template #header>
3488
3564
  <tr>
3489
3565
  <th style="width: 3rem">
3490
- <p-checkbox
3566
+ <f-checkbox
3491
3567
  [ngModel]="allSelected()"
3492
3568
  [binary]="true"
3493
3569
  (ngModelChange)="toggleAll()"
3494
- [pTooltip]="'shared.select.deselect.all' | translate"
3570
+ [fTooltip]="'shared.select.deselect.all' | translate"
3495
3571
  tooltipPosition="top"
3496
3572
  />
3497
3573
  </th>
@@ -3507,11 +3583,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
3507
3583
  <ng-template #body let-role>
3508
3584
  <tr>
3509
3585
  <td>
3510
- <p-checkbox
3586
+ <f-checkbox
3511
3587
  [ngModel]="selectionMap()[role.id]"
3512
3588
  [binary]="true"
3513
3589
  (ngModelChange)="onRoleToggle(role, $event)"
3514
- [pTooltip]="getTooltip(role)"
3590
+ [fTooltip]="getTooltip(role)"
3515
3591
  tooltipPosition="top"
3516
3592
  />
3517
3593
  </td>
@@ -3526,7 +3602,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
3526
3602
  <tr>
3527
3603
  <td colspan="4" class="text-center p-4 text-muted-color">
3528
3604
  @if (loading()) {
3529
- <i class="pi pi-spin pi-spinner"></i>
3605
+ <ui-icon name="loader-circle" spin></ui-icon>
3530
3606
  {{ 'shared.loading.roles' | translate }}
3531
3607
  } @else {
3532
3608
  {{ 'iam.permission.no.roles.available' | translate }}
@@ -3534,7 +3610,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
3534
3610
  </td>
3535
3611
  </tr>
3536
3612
  </ng-template>
3537
- </p-table>
3613
+ </f-table>
3538
3614
  </div>
3539
3615
  </div>
3540
3616
 
@@ -3542,7 +3618,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
3542
3618
  @if (hasChanges()) {
3543
3619
  <div class="border border-surface rounded-border p-3 mt-4">
3544
3620
  <div class="flex items-center gap-2 mb-3">
3545
- <i class="pi pi-info-circle text-primary"></i>
3621
+ <ui-icon name="info-circle" class="text-primary"></ui-icon>
3546
3622
  <span class="font-bold">{{
3547
3623
  'shared.pending.changes' | translate
3548
3624
  }}</span>
@@ -3551,7 +3627,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
3551
3627
  @if (pendingAdd().length > 0) {
3552
3628
  <div>
3553
3629
  <div class="flex items-center gap-2 mb-2">
3554
- <i class="pi pi-plus-circle text-green-500"></i>
3630
+ <ui-icon name="plus-circle" class="text-green-500"></ui-icon>
3555
3631
  <strong class="text-sm"
3556
3632
  >{{ 'shared.to.assign' | translate }} ({{
3557
3633
  pendingAdd().length
@@ -3568,7 +3644,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
3568
3644
  @if (pendingRemove().length > 0) {
3569
3645
  <div>
3570
3646
  <div class="flex items-center gap-2 mb-2">
3571
- <i class="pi pi-minus-circle text-red-500"></i>
3647
+ <ui-icon name="minus-circle" class="text-red-500"></ui-icon>
3572
3648
  <strong class="text-sm"
3573
3649
  >{{ 'shared.to.remove' | translate }} ({{
3574
3650
  pendingRemove().length
@@ -3589,9 +3665,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
3589
3665
 
3590
3666
  @if (!loading() && roles().length === 0) {
3591
3667
  <div class="surface-card p-5 rounded-border shadow-sm text-center">
3592
- <i
3593
- class="pi pi-info-circle text-muted-color mb-3 block text-5xl"
3594
- ></i>
3668
+ <ui-icon name="info-circle" class="text-muted-color mb-3 block text-5xl"></ui-icon>
3595
3669
  <p class="text-muted-color m-0">
3596
3670
  {{ 'iam.permission.no.roles.for.user' | translate }}
3597
3671
  </p>
@@ -3610,17 +3684,22 @@ class UserActionSelectorComponent extends BaseActionSelectorComponent {
3610
3684
  actionApi = inject(ActionApiService);
3611
3685
  permissionApi = inject(PermissionApiService);
3612
3686
  messageService = inject(MessageService);
3613
- selectedUserId = signal(null, ...(ngDevMode ? [{ debugName: "selectedUserId" }] : []));
3614
- selectedBranchId = signal(undefined, ...(ngDevMode ? [{ debugName: "selectedBranchId" }] : []));
3615
- branches = signal([], ...(ngDevMode ? [{ debugName: "branches" }] : []));
3616
- isCompanyFeatureActive = computed(() => isCompanyFeatureEnabled(this.appConfig) === true, ...(ngDevMode ? [{ debugName: "isCompanyFeatureActive" }] : []));
3687
+ selectedUserId = signal(null, /* @ts-ignore */
3688
+ ...(ngDevMode ? [{ debugName: "selectedUserId" }] : /* istanbul ignore next */ []));
3689
+ selectedBranchId = signal(undefined, /* @ts-ignore */
3690
+ ...(ngDevMode ? [{ debugName: "selectedBranchId" }] : /* istanbul ignore next */ []));
3691
+ branches = signal([], /* @ts-ignore */
3692
+ ...(ngDevMode ? [{ debugName: "branches" }] : /* istanbul ignore next */ []));
3693
+ isCompanyFeatureActive = computed(() => isCompanyFeatureEnabled(this.appConfig) === true, /* @ts-ignore */
3694
+ ...(ngDevMode ? [{ debugName: "isCompanyFeatureActive" }] : /* istanbul ignore next */ []));
3617
3695
  showBranchSelector = this.isCompanyFeatureActive;
3618
3696
  filteredBranches = computed(() => {
3619
3697
  const currentCompanyId = this.companyContext.currentCompanyInfo()?.id || undefined;
3620
3698
  if (!currentCompanyId)
3621
3699
  return this.branches();
3622
3700
  return this.branches().filter((b) => b.companyId === currentCompanyId);
3623
- }, ...(ngDevMode ? [{ debugName: "filteredBranches" }] : []));
3701
+ }, /* @ts-ignore */
3702
+ ...(ngDevMode ? [{ debugName: "filteredBranches" }] : /* istanbul ignore next */ []));
3624
3703
  constructor() {
3625
3704
  super();
3626
3705
  effect(() => {
@@ -3740,14 +3819,14 @@ class UserActionSelectorComponent extends BaseActionSelectorComponent {
3740
3819
  this.saving.set(false);
3741
3820
  }
3742
3821
  }
3743
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: UserActionSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3744
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.5", type: UserActionSelectorComponent, isStandalone: true, selector: "flusys-user-action-selector", usesInheritance: true, ngImport: i0, template: `
3822
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: UserActionSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3823
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: UserActionSelectorComponent, isStandalone: true, selector: "flusys-user-action-selector", usesInheritance: true, ngImport: i0, template: `
3745
3824
  <div class="user-action-selector">
3746
3825
  <div class="surface-card p-4 rounded-border mb-4 shadow-sm">
3747
3826
  <div class="grid grid-cols-1 sm:grid-cols-2 gap-5">
3748
3827
  <div>
3749
3828
  <label class="block font-semibold mb-2">
3750
- <i class="pi pi-user mr-2 text-primary"></i>
3829
+ <ui-icon name="user" class="mr-2 text-primary"></ui-icon>
3751
3830
  {{ 'iam.permission.select.user' | translate }}
3752
3831
  </label>
3753
3832
  <lib-user-select
@@ -3763,10 +3842,10 @@ class UserActionSelectorComponent extends BaseActionSelectorComponent {
3763
3842
  @if (showBranchSelector()) {
3764
3843
  <div>
3765
3844
  <label class="block font-semibold mb-2">
3766
- <i class="pi pi-building mr-2 text-primary"></i>
3845
+ <ui-icon name="building" class="mr-2 text-primary"></ui-icon>
3767
3846
  {{ 'iam.permission.select.branch' | translate }}
3768
3847
  </label>
3769
- <p-select
3848
+ <f-select
3770
3849
  [ngModel]="selectedBranchId()"
3771
3850
  (ngModelChange)="selectedBranchId.set($event)"
3772
3851
  [options]="filteredBranches()"
@@ -3782,18 +3861,18 @@ class UserActionSelectorComponent extends BaseActionSelectorComponent {
3782
3861
  <ng-template #selectedItem let-branch>
3783
3862
  @if (branch) {
3784
3863
  <div class="flex items-center gap-2">
3785
- <i class="pi pi-building text-primary"></i>
3864
+ <ui-icon name="building" class="text-primary"></ui-icon>
3786
3865
  <span class="font-semibold">{{ branch.name }}</span>
3787
3866
  </div>
3788
3867
  }
3789
3868
  </ng-template>
3790
3869
  <ng-template #item let-branch>
3791
3870
  <div class="flex items-center gap-2">
3792
- <i class="pi pi-building text-muted-color"></i>
3871
+ <ui-icon name="building" class="text-muted-color"></ui-icon>
3793
3872
  <span>{{ branch.name }}</span>
3794
3873
  </div>
3795
3874
  </ng-template>
3796
- </p-select>
3875
+ </f-select>
3797
3876
  <small class="text-muted-color block mt-1">
3798
3877
  {{
3799
3878
  (filteredBranches().length !== 1
@@ -3810,7 +3889,7 @@ class UserActionSelectorComponent extends BaseActionSelectorComponent {
3810
3889
  @if (selectedUserId()) {
3811
3890
  @if (loading()) {
3812
3891
  <div class="flex justify-center p-5">
3813
- <i class="pi pi-spin pi-spinner text-4xl"></i>
3892
+ <ui-icon name="loader-circle" spin class="text-4xl"></ui-icon>
3814
3893
  </div>
3815
3894
  }
3816
3895
 
@@ -3831,38 +3910,47 @@ class UserActionSelectorComponent extends BaseActionSelectorComponent {
3831
3910
  </p>
3832
3911
  </div>
3833
3912
  <div class="flex flex-wrap gap-2">
3834
- <p-button
3835
- [label]="'shared.select.all' | translate"
3836
- icon="pi pi-check"
3913
+ <button
3914
+ fButton
3837
3915
  [outlined]="true"
3838
3916
  size="small"
3839
3917
  severity="secondary"
3840
- (onClick)="selectAll()"
3841
- />
3842
- <p-button
3843
- [label]="'shared.deselect.all' | translate"
3844
- icon="pi pi-times"
3918
+ (click)="selectAll()"
3919
+ >
3920
+ <ui-icon pButtonIcon name="check"></ui-icon>
3921
+ <span pButtonLabel>{{ 'shared.select.all' | translate }}</span>
3922
+ </button>
3923
+ <button
3924
+ fButton
3845
3925
  [outlined]="true"
3846
3926
  size="small"
3847
3927
  severity="secondary"
3848
- (onClick)="deselectAll()"
3849
- />
3850
- <p-button
3928
+ (click)="deselectAll()"
3929
+ >
3930
+ <ui-icon pButtonIcon name="times"></ui-icon>
3931
+ <span pButtonLabel>{{ 'shared.deselect.all' | translate }}</span>
3932
+ </button>
3933
+ <button
3934
+ fButton
3851
3935
  *hasPermission="USER_ACTION_PERMISSIONS.ASSIGN"
3852
- [label]="'shared.save.changes' | translate"
3853
- icon="pi pi-save"
3854
- [disabled]="!canSave()"
3855
- [loading]="saving()"
3936
+ [disabled]="!canSave() || saving()"
3856
3937
  size="small"
3857
- (onClick)="saveChanges()"
3858
- />
3938
+ (click)="saveChanges()"
3939
+ >
3940
+ @if (saving()) {
3941
+ <ui-icon pButtonIcon name="spinner" [spin]="true"></ui-icon>
3942
+ } @else {
3943
+ <ui-icon pButtonIcon name="save"></ui-icon>
3944
+ }
3945
+ <span pButtonLabel>{{ 'shared.save.changes' | translate }}</span>
3946
+ </button>
3859
3947
  </div>
3860
3948
  </div>
3861
3949
 
3862
3950
  @if (invalidActionsCount() > 0) {
3863
3951
  <div class="validation-warning rounded-border p-3 mb-4">
3864
3952
  <div class="flex items-start gap-2">
3865
- <i class="pi pi-exclamation-triangle text-xl"></i>
3953
+ <ui-icon name="exclamation-triangle" class="text-xl"></ui-icon>
3866
3954
  <div class="flex-1">
3867
3955
  <span class="font-semibold"
3868
3956
  >{{ 'iam.validation.warning.title' | translate }}:</span
@@ -3881,20 +3969,19 @@ class UserActionSelectorComponent extends BaseActionSelectorComponent {
3881
3969
  }
3882
3970
 
3883
3971
  <div class="overflow-x-auto -mx-4 sm:mx-0">
3884
- <p-treeTable
3972
+ <f-treetable
3885
3973
  [value]="treeNodes()"
3886
3974
  dataKey="id"
3887
- class="p-treetable-sm"
3888
3975
  [tableStyle]="{ 'min-width': '50rem' }"
3889
3976
  >
3890
3977
  <ng-template #header>
3891
3978
  <tr>
3892
3979
  <th class="w-12">
3893
- <p-checkbox
3980
+ <f-checkbox
3894
3981
  [ngModel]="allSelected()"
3895
3982
  [binary]="true"
3896
3983
  (ngModelChange)="toggleAll()"
3897
- [pTooltip]="'shared.select.deselect.all' | translate"
3984
+ [fTooltip]="'shared.select.deselect.all' | translate"
3898
3985
  tooltipPosition="top"
3899
3986
  />
3900
3987
  </th>
@@ -3913,27 +4000,24 @@ class UserActionSelectorComponent extends BaseActionSelectorComponent {
3913
4000
  @let tooltip = getTooltip(rowData);
3914
4001
  <tr [class.highlight-warning]="hasUnmet">
3915
4002
  <td class="w-12">
3916
- <p-checkbox
4003
+ <f-checkbox
3917
4004
  [ngModel]="selectionMap()[rowData.id]"
3918
4005
  [binary]="true"
3919
4006
  (ngModelChange)="onActionToggle(rowData, $event)"
3920
- [pTooltip]="tooltip"
4007
+ [fTooltip]="tooltip"
3921
4008
  tooltipPosition="top"
3922
4009
  />
3923
4010
  </td>
3924
4011
  <td>
3925
- <p-treeTableToggler [rowNode]="rowNode" />
4012
+ <f-treetabletoggler [rowNode]="rowNode" />
3926
4013
  <span class="inline-flex items-center gap-2">
3927
4014
  {{ rowData.name }}
3928
4015
  @if (hasUnmet) {
3929
- <i
3930
- class="pi pi-exclamation-triangle text-orange-500"
3931
- [pTooltip]="
4016
+ <ui-icon name="exclamation-triangle" class="text-orange-500" [fTooltip]="
3932
4017
  'iam.validation.unmet.prerequisites.tooltip'
3933
4018
  | translate
3934
4019
  "
3935
- tooltipPosition="top"
3936
- ></i>
4020
+ tooltipPosition="top"></ui-icon>
3937
4021
  }
3938
4022
  </span>
3939
4023
  </td>
@@ -3941,7 +4025,7 @@ class UserActionSelectorComponent extends BaseActionSelectorComponent {
3941
4025
  {{ rowData.code || '-' }}
3942
4026
  </td>
3943
4027
  <td>
3944
- <p-tag
4028
+ <f-tag
3945
4029
  [value]="rowData.actionType"
3946
4030
  [severity]="
3947
4031
  rowData.actionType === 'backend' ? 'info' : 'success'
@@ -3957,7 +4041,7 @@ class UserActionSelectorComponent extends BaseActionSelectorComponent {
3957
4041
  <tr>
3958
4042
  <td colspan="5" class="text-center p-4 text-muted-color">
3959
4043
  @if (loading()) {
3960
- <i class="pi pi-spin pi-spinner"></i>
4044
+ <ui-icon name="loader-circle" spin></ui-icon>
3961
4045
  {{ 'shared.loading.actions' | translate }}
3962
4046
  } @else {
3963
4047
  {{ 'iam.permission.no.actions.available' | translate }}
@@ -3965,14 +4049,14 @@ class UserActionSelectorComponent extends BaseActionSelectorComponent {
3965
4049
  </td>
3966
4050
  </tr>
3967
4051
  </ng-template>
3968
- </p-treeTable>
4052
+ </f-treetable>
3969
4053
  </div>
3970
4054
  </div>
3971
4055
 
3972
4056
  @if (hasChanges()) {
3973
4057
  <div class="border border-surface rounded-border p-3 mt-4">
3974
4058
  <div class="flex items-center gap-2 mb-3">
3975
- <i class="pi pi-info-circle text-primary"></i>
4059
+ <ui-icon name="info-circle" class="text-primary"></ui-icon>
3976
4060
  <span class="font-bold">{{
3977
4061
  'shared.pending.changes' | translate
3978
4062
  }}</span>
@@ -3981,7 +4065,7 @@ class UserActionSelectorComponent extends BaseActionSelectorComponent {
3981
4065
  @if (pendingAdd().length > 0) {
3982
4066
  <div>
3983
4067
  <div class="flex items-center gap-2 mb-2">
3984
- <i class="pi pi-plus-circle text-green-500"></i>
4068
+ <ui-icon name="plus-circle" class="text-green-500"></ui-icon>
3985
4069
  <strong class="text-sm"
3986
4070
  >{{ 'shared.to.assign' | translate }} ({{
3987
4071
  pendingAdd().length
@@ -3998,7 +4082,7 @@ class UserActionSelectorComponent extends BaseActionSelectorComponent {
3998
4082
  @if (pendingRemove().length > 0) {
3999
4083
  <div>
4000
4084
  <div class="flex items-center gap-2 mb-2">
4001
- <i class="pi pi-minus-circle text-red-500"></i>
4085
+ <ui-icon name="minus-circle" class="text-red-500"></ui-icon>
4002
4086
  <strong class="text-sm"
4003
4087
  >{{ 'shared.to.remove' | translate }} ({{
4004
4088
  pendingRemove().length
@@ -4019,9 +4103,7 @@ class UserActionSelectorComponent extends BaseActionSelectorComponent {
4019
4103
 
4020
4104
  @if (!loading() && actions().length === 0) {
4021
4105
  <div class="surface-card p-5 rounded-border shadow-sm text-center">
4022
- <i
4023
- class="pi pi-info-circle text-muted-color mb-3 block text-5xl"
4024
- ></i>
4106
+ <ui-icon name="info-circle" class="text-muted-color mb-3 block text-5xl"></ui-icon>
4025
4107
  <p class="text-muted-color m-0">
4026
4108
  {{ 'iam.permission.no.actions.for.user' | translate }}
4027
4109
  </p>
@@ -4029,13 +4111,13 @@ class UserActionSelectorComponent extends BaseActionSelectorComponent {
4029
4111
  }
4030
4112
  }
4031
4113
  </div>
4032
- `, isInline: true, styles: [":host{display:block}.validation-warning{background-color:var(--p-yellow-50, #fefce8);border-left:4px solid var(--p-yellow-500, #eab308);color:var(--p-yellow-700, #a16207)}:host-context(.p-dark) .validation-warning{background-color:#eab3081a;color:var(--p-yellow-400, #facc15)}:host ::ng-deep tr.highlight-warning{background-color:var(--p-red-50, rgba(239, 68, 68, .1))!important}:host-context(.p-dark) ::ng-deep tr.highlight-warning{background-color:#ef444426!important}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: PrimeModule }, { kind: "component", type: i2.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i3.Checkbox, selector: "p-checkbox, p-checkBox, p-check-box", inputs: ["hostName", "value", "binary", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "inputStyle", "styleClass", "inputClass", "indeterminate", "formControl", "checkboxIcon", "readonly", "autofocus", "trueValue", "falseValue", "variant", "size"], outputs: ["onChange", "onFocus", "onBlur"] }, { kind: "component", type: i4.Select, selector: "p-select", inputs: ["id", "scrollHeight", "filter", "panelStyle", "styleClass", "panelStyleClass", "readonly", "editable", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "filterValue", "options", "appendTo", "motionOptions"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "component", type: i5.Tag, selector: "p-tag", inputs: ["styleClass", "severity", "value", "icon", "rounded"] }, { kind: "directive", type: i6.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "showOnEllipsis", "pTooltip", "tooltipDisabled", "tooltipOptions", "appendTo", "ptTooltip", "pTooltipPT", "pTooltipUnstyled"] }, { kind: "component", type: i7.TreeTable, selector: "p-treeTable, p-treetable, p-tree-table", inputs: ["columns", "styleClass", "tableStyle", "tableStyleClass", "autoLayout", "lazy", "lazyLoadOnInit", "paginator", "rows", "first", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "customSort", "selectionMode", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "compareSelectionBy", "rowHover", "loading", "loadingIcon", "showLoader", "scrollable", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "frozenColumns", "resizableColumns", "columnResizeMode", "reorderableColumns", "contextMenu", "rowTrackBy", "filters", "globalFilterFields", "filterDelay", "filterMode", "filterLocale", "paginatorLocale", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "value", "virtualRowHeight", "selectionKeys", "showGridlines"], outputs: ["selectionChange", "contextMenuSelectionChange", "onFilter", "onNodeExpand", "onNodeCollapse", "onPage", "onSort", "onLazyLoad", "sortFunction", "onColResize", "onColReorder", "onNodeSelect", "onNodeUnselect", "onContextMenuSelect", "onHeaderCheckboxToggle", "onEditInit", "onEditComplete", "onEditCancel", "selectionKeysChange"] }, { kind: "component", type: i7.TreeTableToggler, selector: "p-treeTableToggler, p-treetabletoggler, p-treetable-toggler", inputs: ["rowNode"] }, { kind: "directive", type: HasPermissionDirective, selector: "[hasPermission]", inputs: ["hasPermission"] }, { kind: "component", type: UserSelectComponent, selector: "lib-user-select", inputs: ["showClear", "value"], outputs: ["valueChange", "userSelected"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
4114
+ `, isInline: true, styles: [":host{display:block}.validation-warning{background-color:var(--f-yellow-50, #fefce8);border-left:4px solid var(--f-yellow-500, #eab308);color:var(--f-yellow-700, #a16207)}:host-context(.p-dark) .validation-warning{background-color:#eab3081a;color:var(--f-yellow-400, #facc15)}:host ::ng-deep tr.highlight-warning{background-color:var(--f-red-50, rgba(239, 68, 68, .1))!important}:host-context(.p-dark) ::ng-deep tr.highlight-warning{background-color:#ef444426!important}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: UiModule }, { kind: "directive", type: i2.FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "rounded", "raised", "fluid", "disabled", "loading", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "component", type: i2.TagComponent, selector: "f-tag", inputs: ["value", "severity", "icon", "rounded", "color"] }, { kind: "component", type: i2.CheckboxComponent, selector: "f-checkbox", inputs: ["label", "binary", "disabled", "inputId", "invalid", "indeterminate", "touched", "styleClass", "checked"], outputs: ["onChange", "onBlur", "touch", "checkedChange"] }, { kind: "component", type: i2.SelectComponent, selector: "f-select", inputs: ["options", "optionLabel", "optionValue", "placeholder", "disabled", "filter", "showClear", "loading", "inputId", "invalid", "touched", "styleClass", "editable"], outputs: ["onFilter", "onChange", "onShow", "onHide", "onBlur"] }, { kind: "directive", type: i2.TooltipDirective, selector: "[fTooltip]", inputs: ["fTooltip", "tooltipPosition", "tooltipStyleClass", "disabled", "tooltipEvent", "showDelay", "hideDelay"] }, { kind: "component", type: i2.TreeTableComponent, selector: "f-treetable", inputs: ["value", "loading", "dataKey", "styleClass", "tableStyle", "scrollable"] }, { kind: "component", type: i2.TreeTableTogglerComponent, selector: "f-treetabletoggler", inputs: ["rowNode"] }, { kind: "component", type: i2.UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill"] }, { kind: "directive", type: HasPermissionDirective, selector: "[hasPermission]", inputs: ["hasPermission"] }, { kind: "component", type: UserSelectComponent, selector: "lib-user-select", inputs: ["showClear", "value"], outputs: ["valueChange", "userSelected"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
4033
4115
  }
4034
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: UserActionSelectorComponent, decorators: [{
4116
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: UserActionSelectorComponent, decorators: [{
4035
4117
  type: Component,
4036
4118
  args: [{ selector: 'flusys-user-action-selector', imports: [
4037
4119
  FormsModule,
4038
- PrimeModule,
4120
+ UiModule,
4039
4121
  HasPermissionDirective,
4040
4122
  UserSelectComponent,
4041
4123
  TranslatePipe,
@@ -4045,7 +4127,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
4045
4127
  <div class="grid grid-cols-1 sm:grid-cols-2 gap-5">
4046
4128
  <div>
4047
4129
  <label class="block font-semibold mb-2">
4048
- <i class="pi pi-user mr-2 text-primary"></i>
4130
+ <ui-icon name="user" class="mr-2 text-primary"></ui-icon>
4049
4131
  {{ 'iam.permission.select.user' | translate }}
4050
4132
  </label>
4051
4133
  <lib-user-select
@@ -4061,10 +4143,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
4061
4143
  @if (showBranchSelector()) {
4062
4144
  <div>
4063
4145
  <label class="block font-semibold mb-2">
4064
- <i class="pi pi-building mr-2 text-primary"></i>
4146
+ <ui-icon name="building" class="mr-2 text-primary"></ui-icon>
4065
4147
  {{ 'iam.permission.select.branch' | translate }}
4066
4148
  </label>
4067
- <p-select
4149
+ <f-select
4068
4150
  [ngModel]="selectedBranchId()"
4069
4151
  (ngModelChange)="selectedBranchId.set($event)"
4070
4152
  [options]="filteredBranches()"
@@ -4080,18 +4162,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
4080
4162
  <ng-template #selectedItem let-branch>
4081
4163
  @if (branch) {
4082
4164
  <div class="flex items-center gap-2">
4083
- <i class="pi pi-building text-primary"></i>
4165
+ <ui-icon name="building" class="text-primary"></ui-icon>
4084
4166
  <span class="font-semibold">{{ branch.name }}</span>
4085
4167
  </div>
4086
4168
  }
4087
4169
  </ng-template>
4088
4170
  <ng-template #item let-branch>
4089
4171
  <div class="flex items-center gap-2">
4090
- <i class="pi pi-building text-muted-color"></i>
4172
+ <ui-icon name="building" class="text-muted-color"></ui-icon>
4091
4173
  <span>{{ branch.name }}</span>
4092
4174
  </div>
4093
4175
  </ng-template>
4094
- </p-select>
4176
+ </f-select>
4095
4177
  <small class="text-muted-color block mt-1">
4096
4178
  {{
4097
4179
  (filteredBranches().length !== 1
@@ -4108,7 +4190,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
4108
4190
  @if (selectedUserId()) {
4109
4191
  @if (loading()) {
4110
4192
  <div class="flex justify-center p-5">
4111
- <i class="pi pi-spin pi-spinner text-4xl"></i>
4193
+ <ui-icon name="loader-circle" spin class="text-4xl"></ui-icon>
4112
4194
  </div>
4113
4195
  }
4114
4196
 
@@ -4129,38 +4211,47 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
4129
4211
  </p>
4130
4212
  </div>
4131
4213
  <div class="flex flex-wrap gap-2">
4132
- <p-button
4133
- [label]="'shared.select.all' | translate"
4134
- icon="pi pi-check"
4214
+ <button
4215
+ fButton
4135
4216
  [outlined]="true"
4136
4217
  size="small"
4137
4218
  severity="secondary"
4138
- (onClick)="selectAll()"
4139
- />
4140
- <p-button
4141
- [label]="'shared.deselect.all' | translate"
4142
- icon="pi pi-times"
4219
+ (click)="selectAll()"
4220
+ >
4221
+ <ui-icon pButtonIcon name="check"></ui-icon>
4222
+ <span pButtonLabel>{{ 'shared.select.all' | translate }}</span>
4223
+ </button>
4224
+ <button
4225
+ fButton
4143
4226
  [outlined]="true"
4144
4227
  size="small"
4145
4228
  severity="secondary"
4146
- (onClick)="deselectAll()"
4147
- />
4148
- <p-button
4229
+ (click)="deselectAll()"
4230
+ >
4231
+ <ui-icon pButtonIcon name="times"></ui-icon>
4232
+ <span pButtonLabel>{{ 'shared.deselect.all' | translate }}</span>
4233
+ </button>
4234
+ <button
4235
+ fButton
4149
4236
  *hasPermission="USER_ACTION_PERMISSIONS.ASSIGN"
4150
- [label]="'shared.save.changes' | translate"
4151
- icon="pi pi-save"
4152
- [disabled]="!canSave()"
4153
- [loading]="saving()"
4237
+ [disabled]="!canSave() || saving()"
4154
4238
  size="small"
4155
- (onClick)="saveChanges()"
4156
- />
4239
+ (click)="saveChanges()"
4240
+ >
4241
+ @if (saving()) {
4242
+ <ui-icon pButtonIcon name="spinner" [spin]="true"></ui-icon>
4243
+ } @else {
4244
+ <ui-icon pButtonIcon name="save"></ui-icon>
4245
+ }
4246
+ <span pButtonLabel>{{ 'shared.save.changes' | translate }}</span>
4247
+ </button>
4157
4248
  </div>
4158
4249
  </div>
4159
4250
 
4160
4251
  @if (invalidActionsCount() > 0) {
4161
4252
  <div class="validation-warning rounded-border p-3 mb-4">
4162
4253
  <div class="flex items-start gap-2">
4163
- <i class="pi pi-exclamation-triangle text-xl"></i>
4254
+ <ui-icon name="exclamation-triangle" class="text-xl"></ui-icon>
4164
4255
  <div class="flex-1">
4165
4256
  <span class="font-semibold"
4166
4257
  >{{ 'iam.validation.warning.title' | translate }}:</span
@@ -4179,20 +4270,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
4179
4270
  }
4180
4271
 
4181
4272
  <div class="overflow-x-auto -mx-4 sm:mx-0">
4182
- <p-treeTable
4273
+ <f-treetable
4183
4274
  [value]="treeNodes()"
4184
4275
  dataKey="id"
4185
- class="p-treetable-sm"
4186
4276
  [tableStyle]="{ 'min-width': '50rem' }"
4187
4277
  >
4188
4278
  <ng-template #header>
4189
4279
  <tr>
4190
4280
  <th class="w-12">
4191
- <p-checkbox
4281
+ <f-checkbox
4192
4282
  [ngModel]="allSelected()"
4193
4283
  [binary]="true"
4194
4284
  (ngModelChange)="toggleAll()"
4195
- [pTooltip]="'shared.select.deselect.all' | translate"
4285
+ [fTooltip]="'shared.select.deselect.all' | translate"
4196
4286
  tooltipPosition="top"
4197
4287
  />
4198
4288
  </th>
@@ -4211,27 +4301,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
4211
4301
  @let tooltip = getTooltip(rowData);
4212
4302
  <tr [class.highlight-warning]="hasUnmet">
4213
4303
  <td class="w-12">
4214
- <p-checkbox
4304
+ <f-checkbox
4215
4305
  [ngModel]="selectionMap()[rowData.id]"
4216
4306
  [binary]="true"
4217
4307
  (ngModelChange)="onActionToggle(rowData, $event)"
4218
- [pTooltip]="tooltip"
4308
+ [fTooltip]="tooltip"
4219
4309
  tooltipPosition="top"
4220
4310
  />
4221
4311
  </td>
4222
4312
  <td>
4223
- <p-treeTableToggler [rowNode]="rowNode" />
4313
+ <f-treetabletoggler [rowNode]="rowNode" />
4224
4314
  <span class="inline-flex items-center gap-2">
4225
4315
  {{ rowData.name }}
4226
4316
  @if (hasUnmet) {
4227
- <i
4228
- class="pi pi-exclamation-triangle text-orange-500"
4229
- [pTooltip]="
4317
+ <ui-icon name="exclamation-triangle" class="text-orange-500" [fTooltip]="
4230
4318
  'iam.validation.unmet.prerequisites.tooltip'
4231
4319
  | translate
4232
4320
  "
4233
- tooltipPosition="top"
4234
- ></i>
4321
+ tooltipPosition="top"></ui-icon>
4235
4322
  }
4236
4323
  </span>
4237
4324
  </td>
@@ -4239,7 +4326,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
4239
4326
  {{ rowData.code || '-' }}
4240
4327
  </td>
4241
4328
  <td>
4242
- <p-tag
4329
+ <f-tag
4243
4330
  [value]="rowData.actionType"
4244
4331
  [severity]="
4245
4332
  rowData.actionType === 'backend' ? 'info' : 'success'
@@ -4255,7 +4342,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
4255
4342
  <tr>
4256
4343
  <td colspan="5" class="text-center p-4 text-muted-color">
4257
4344
  @if (loading()) {
4258
- <i class="pi pi-spin pi-spinner"></i>
4345
+ <ui-icon name="loader-circle" spin></ui-icon>
4259
4346
  {{ 'shared.loading.actions' | translate }}
4260
4347
  } @else {
4261
4348
  {{ 'iam.permission.no.actions.available' | translate }}
@@ -4263,14 +4350,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
4263
4350
  </td>
4264
4351
  </tr>
4265
4352
  </ng-template>
4266
- </p-treeTable>
4353
+ </f-treetable>
4267
4354
  </div>
4268
4355
  </div>
4269
4356
 
4270
4357
  @if (hasChanges()) {
4271
4358
  <div class="border border-surface rounded-border p-3 mt-4">
4272
4359
  <div class="flex items-center gap-2 mb-3">
4273
- <i class="pi pi-info-circle text-primary"></i>
4360
+ <ui-icon name="info-circle" class="text-primary"></ui-icon>
4274
4361
  <span class="font-bold">{{
4275
4362
  'shared.pending.changes' | translate
4276
4363
  }}</span>
@@ -4279,7 +4366,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
4279
4366
  @if (pendingAdd().length > 0) {
4280
4367
  <div>
4281
4368
  <div class="flex items-center gap-2 mb-2">
4282
- <i class="pi pi-plus-circle text-green-500"></i>
4369
+ <ui-icon name="plus-circle" class="text-green-500"></ui-icon>
4283
4370
  <strong class="text-sm"
4284
4371
  >{{ 'shared.to.assign' | translate }} ({{
4285
4372
  pendingAdd().length
@@ -4296,7 +4383,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
4296
4383
  @if (pendingRemove().length > 0) {
4297
4384
  <div>
4298
4385
  <div class="flex items-center gap-2 mb-2">
4299
- <i class="pi pi-minus-circle text-red-500"></i>
4386
+ <ui-icon name="minus-circle" class="text-red-500"></ui-icon>
4300
4387
  <strong class="text-sm"
4301
4388
  >{{ 'shared.to.remove' | translate }} ({{
4302
4389
  pendingRemove().length
@@ -4317,9 +4404,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
4317
4404
 
4318
4405
  @if (!loading() && actions().length === 0) {
4319
4406
  <div class="surface-card p-5 rounded-border shadow-sm text-center">
4320
- <i
4321
- class="pi pi-info-circle text-muted-color mb-3 block text-5xl"
4322
- ></i>
4407
+ <ui-icon name="info-circle" class="text-muted-color mb-3 block text-5xl"></ui-icon>
4323
4408
  <p class="text-muted-color m-0">
4324
4409
  {{ 'iam.permission.no.actions.for.user' | translate }}
4325
4410
  </p>
@@ -4327,7 +4412,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
4327
4412
  }
4328
4413
  }
4329
4414
  </div>
4330
- `, styles: [":host{display:block}.validation-warning{background-color:var(--p-yellow-50, #fefce8);border-left:4px solid var(--p-yellow-500, #eab308);color:var(--p-yellow-700, #a16207)}:host-context(.p-dark) .validation-warning{background-color:#eab3081a;color:var(--p-yellow-400, #facc15)}:host ::ng-deep tr.highlight-warning{background-color:var(--p-red-50, rgba(239, 68, 68, .1))!important}:host-context(.p-dark) ::ng-deep tr.highlight-warning{background-color:#ef444426!important}\n"] }]
4415
+ `, styles: [":host{display:block}.validation-warning{background-color:var(--f-yellow-50, #fefce8);border-left:4px solid var(--f-yellow-500, #eab308);color:var(--f-yellow-700, #a16207)}:host-context(.p-dark) .validation-warning{background-color:#eab3081a;color:var(--f-yellow-400, #facc15)}:host ::ng-deep tr.highlight-warning{background-color:var(--f-red-50, rgba(239, 68, 68, .1))!important}:host-context(.p-dark) ::ng-deep tr.highlight-warning{background-color:#ef444426!important}\n"] }]
4331
4416
  }], ctorParameters: () => [] });
4332
4417
 
4333
4418
  // Logic Builder Component
@@ -4377,10 +4462,10 @@ class ProfilePermissionProviderAdapter {
4377
4462
  })),
4378
4463
  })));
4379
4464
  }
4380
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: ProfilePermissionProviderAdapter, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4381
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: ProfilePermissionProviderAdapter });
4465
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: ProfilePermissionProviderAdapter, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4466
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: ProfilePermissionProviderAdapter });
4382
4467
  }
4383
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: ProfilePermissionProviderAdapter, decorators: [{
4468
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: ProfilePermissionProviderAdapter, decorators: [{
4384
4469
  type: Injectable
4385
4470
  }] });
4386
4471
 
@@ -4403,7 +4488,7 @@ const IAM_ROUTES = [
4403
4488
  {
4404
4489
  path: '',
4405
4490
  resolve: { translations: resolveTranslationModule({ modules: ['iam'], fallbackMessages: { ...IAM_MESSAGES, ...SHARED_MESSAGES } }) },
4406
- loadComponent: () => import('./flusys-ng-iam-iam-container.component-DAiS1Mtk.mjs').then((m) => m.IamContainerComponent),
4491
+ loadComponent: () => import('./flusys-ng-iam-iam-container.component-D0m8u6nu.mjs').then((m) => m.IamContainerComponent),
4407
4492
  children: [
4408
4493
  // Actions Management
4409
4494
  {
@@ -4412,15 +4497,15 @@ const IAM_ROUTES = [
4412
4497
  children: [
4413
4498
  {
4414
4499
  path: '',
4415
- loadComponent: () => import('./flusys-ng-iam-action-list-page.component-BJ-tu6vu.mjs').then((m) => m.ActionListPageComponent),
4500
+ loadComponent: () => import('./flusys-ng-iam-action-list-page.component-B1hUE4lD.mjs').then((m) => m.ActionListPageComponent),
4416
4501
  },
4417
4502
  {
4418
4503
  path: 'new',
4419
- loadComponent: () => import('./flusys-ng-iam-action-form-page.component-BQJkl9pU.mjs').then((m) => m.ActionFormPageComponent),
4504
+ loadComponent: () => import('./flusys-ng-iam-action-form-page.component-DTJT8Dc-.mjs').then((m) => m.ActionFormPageComponent),
4420
4505
  },
4421
4506
  {
4422
4507
  path: ':id',
4423
- loadComponent: () => import('./flusys-ng-iam-action-form-page.component-BQJkl9pU.mjs').then((m) => m.ActionFormPageComponent),
4508
+ loadComponent: () => import('./flusys-ng-iam-action-form-page.component-DTJT8Dc-.mjs').then((m) => m.ActionFormPageComponent),
4424
4509
  },
4425
4510
  ],
4426
4511
  },
@@ -4431,15 +4516,15 @@ const IAM_ROUTES = [
4431
4516
  children: [
4432
4517
  {
4433
4518
  path: '',
4434
- loadComponent: () => import('./flusys-ng-iam-role-list-page.component-CNOsO-gH.mjs').then((m) => m.RoleListPageComponent),
4519
+ loadComponent: () => import('./flusys-ng-iam-role-list-page.component-BcS9_ysT.mjs').then((m) => m.RoleListPageComponent),
4435
4520
  },
4436
4521
  {
4437
4522
  path: 'new',
4438
- loadComponent: () => import('./flusys-ng-iam-role-form-page.component-CX8LxsdO.mjs').then((m) => m.RoleFormPageComponent),
4523
+ loadComponent: () => import('./flusys-ng-iam-role-form-page.component-DrUQ0taO.mjs').then((m) => m.RoleFormPageComponent),
4439
4524
  },
4440
4525
  {
4441
4526
  path: ':id',
4442
- loadComponent: () => import('./flusys-ng-iam-role-form-page.component-CX8LxsdO.mjs').then((m) => m.RoleFormPageComponent),
4527
+ loadComponent: () => import('./flusys-ng-iam-role-form-page.component-DrUQ0taO.mjs').then((m) => m.RoleFormPageComponent),
4443
4528
  },
4444
4529
  ],
4445
4530
  },
@@ -4454,7 +4539,7 @@ const IAM_ROUTES = [
4454
4539
  COMPANY_ACTION_PERMISSIONS.READ,
4455
4540
  ]),
4456
4541
  ],
4457
- loadComponent: () => import('./flusys-ng-iam-permission-page.component-D4IHueFW.mjs').then((m) => m.PermissionPageComponent),
4542
+ loadComponent: () => import('./flusys-ng-iam-permission-page.component-rcijgKmE.mjs').then((m) => m.PermissionPageComponent),
4458
4543
  },
4459
4544
  // Default redirect to actions
4460
4545
  {
@@ -4473,4 +4558,4 @@ const IAM_ROUTES = [
4473
4558
  */
4474
4559
 
4475
4560
  export { ActionApiService as A, CompanyActionSelectorComponent as C, IAM_MESSAGES as I, LogicBuilderComponent as L, MAX_DROPDOWN_ITEMS as M, PermissionApiService as P, RoleApiService as R, UserRoleSelectorComponent as U, ActionType as a, RoleActionSelectorComponent as b, convertActionToTreeNode as c, UserActionSelectorComponent as d, ActionPermissionLogicService as e, IAM_ROUTES as f, MyPermissionsApiService as g, PermissionStateService as h, ProfilePermissionProviderAdapter as i, provideIamProviders as p };
4476
- //# sourceMappingURL=flusys-ng-iam-flusys-ng-iam-Bb39q1Bu.mjs.map
4561
+ //# sourceMappingURL=flusys-ng-iam-flusys-ng-iam-DzIO0zsO.mjs.map