@flusys/ng-iam 5.4.0 → 5.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (22) hide show
  1. package/fesm2022/{flusys-ng-iam-action-form-page.component-BQJkl9pU.mjs → flusys-ng-iam-action-form-page.component-BGEON5_n.mjs} +58 -37
  2. package/fesm2022/flusys-ng-iam-action-form-page.component-BGEON5_n.mjs.map +1 -0
  3. package/fesm2022/{flusys-ng-iam-action-list-page.component-BJ-tu6vu.mjs → flusys-ng-iam-action-list-page.component-BQvx2btD.mjs} +56 -42
  4. package/fesm2022/flusys-ng-iam-action-list-page.component-BQvx2btD.mjs.map +1 -0
  5. package/fesm2022/{flusys-ng-iam-flusys-ng-iam-Bb39q1Bu.mjs → flusys-ng-iam-flusys-ng-iam-C9rdGS64.mjs} +451 -306
  6. package/fesm2022/flusys-ng-iam-flusys-ng-iam-C9rdGS64.mjs.map +1 -0
  7. package/fesm2022/{flusys-ng-iam-iam-container.component-DAiS1Mtk.mjs → flusys-ng-iam-iam-container.component-DEuc_l2i.mjs} +7 -6
  8. package/fesm2022/{flusys-ng-iam-iam-container.component-DAiS1Mtk.mjs.map → flusys-ng-iam-iam-container.component-DEuc_l2i.mjs.map} +1 -1
  9. package/fesm2022/{flusys-ng-iam-permission-page.component-D4IHueFW.mjs → flusys-ng-iam-permission-page.component-DV8qtLcu.mjs} +26 -18
  10. package/fesm2022/flusys-ng-iam-permission-page.component-DV8qtLcu.mjs.map +1 -0
  11. package/fesm2022/{flusys-ng-iam-role-form-page.component-CX8LxsdO.mjs → flusys-ng-iam-role-form-page.component-CR1tl17E.mjs} +50 -33
  12. package/fesm2022/flusys-ng-iam-role-form-page.component-CR1tl17E.mjs.map +1 -0
  13. package/fesm2022/{flusys-ng-iam-role-list-page.component-CNOsO-gH.mjs → flusys-ng-iam-role-list-page.component-DVto37LL.mjs} +60 -41
  14. package/fesm2022/flusys-ng-iam-role-list-page.component-DVto37LL.mjs.map +1 -0
  15. package/fesm2022/flusys-ng-iam.mjs +1 -1
  16. package/package.json +11 -10
  17. package/fesm2022/flusys-ng-iam-action-form-page.component-BQJkl9pU.mjs.map +0 -1
  18. package/fesm2022/flusys-ng-iam-action-list-page.component-BJ-tu6vu.mjs.map +0 -1
  19. package/fesm2022/flusys-ng-iam-flusys-ng-iam-Bb39q1Bu.mjs.map +0 -1
  20. package/fesm2022/flusys-ng-iam-permission-page.component-D4IHueFW.mjs.map +0 -1
  21. package/fesm2022/flusys-ng-iam-role-form-page.component-CX8LxsdO.mjs.map +0 -1
  22. package/fesm2022/flusys-ng-iam-role-list-page.component-CNOsO-gH.mjs.map +0 -1
@@ -227,10 +227,10 @@ class RoleApiService extends ApiResourceService {
227
227
  constructor() {
228
228
  super('roles', 'iam');
229
229
  }
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' });
230
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RoleApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
231
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RoleApiService, providedIn: 'root' });
232
232
  }
233
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: RoleApiService, decorators: [{
233
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RoleApiService, decorators: [{
234
234
  type: Injectable,
235
235
  args: [{ providedIn: 'root' }]
236
236
  }], ctorParameters: () => [] });
@@ -257,10 +257,10 @@ class ActionApiService extends ApiResourceService {
257
257
  const iamBaseUrl = getServiceUrl(this.appConfig, 'iam');
258
258
  return this.http.post(`${iamBaseUrl}/actions/tree`, body);
259
259
  }
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' });
260
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: ActionApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
261
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: ActionApiService, providedIn: 'root' });
262
262
  }
263
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: ActionApiService, decorators: [{
263
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: ActionApiService, decorators: [{
264
264
  type: Injectable,
265
265
  args: [{ providedIn: 'root' }]
266
266
  }], ctorParameters: () => [] });
@@ -794,10 +794,10 @@ class ActionPermissionLogicService {
794
794
  }
795
795
  return `${indent}${this.t('iam.logic.invalid')}`;
796
796
  }
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' });
797
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: ActionPermissionLogicService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
798
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: ActionPermissionLogicService, providedIn: 'root' });
799
799
  }
800
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: ActionPermissionLogicService, decorators: [{
800
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: ActionPermissionLogicService, decorators: [{
801
801
  type: Injectable,
802
802
  args: [{ providedIn: 'root' }]
803
803
  }] });
@@ -830,10 +830,10 @@ class PermissionApiService extends BaseApiService {
830
830
  getCompanyActions(companyId) {
831
831
  return this.http.post(this.getUrl('permissions/get-company-actions'), { companyId });
832
832
  }
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' });
833
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PermissionApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
834
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PermissionApiService, providedIn: 'root' });
835
835
  }
836
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: PermissionApiService, decorators: [{
836
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PermissionApiService, decorators: [{
837
837
  type: Injectable,
838
838
  args: [{ providedIn: 'root' }]
839
839
  }], ctorParameters: () => [] });
@@ -857,10 +857,10 @@ class MyPermissionsApiService {
857
857
  getMyPermissions(dto = {}) {
858
858
  return this.http.post(`${this.baseUrl}/my-permissions`, dto);
859
859
  }
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' });
860
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: MyPermissionsApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
861
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: MyPermissionsApiService, providedIn: 'root' });
862
862
  }
863
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: MyPermissionsApiService, decorators: [{
863
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: MyPermissionsApiService, decorators: [{
864
864
  type: Injectable,
865
865
  args: [{
866
866
  providedIn: 'root',
@@ -870,9 +870,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
870
870
  class PermissionStateService {
871
871
  permissionApi = inject(MyPermissionsApiService);
872
872
  permissionValidator = inject(PermissionValidatorService);
873
- _permissions = signal(null, ...(ngDevMode ? [{ debugName: "_permissions" }] : []));
873
+ _permissions = signal(null, /* @ts-ignore */
874
+ ...(ngDevMode ? [{ debugName: "_permissions" }] : /* istanbul ignore next */ []));
874
875
  permissions = this._permissions.asReadonly();
875
- _isLoading = signal(false, ...(ngDevMode ? [{ debugName: "_isLoading" }] : []));
876
+ _isLoading = signal(false, /* @ts-ignore */
877
+ ...(ngDevMode ? [{ debugName: "_isLoading" }] : /* istanbul ignore next */ []));
876
878
  isLoading = this._isLoading.asReadonly();
877
879
  loadPermissions(dto) {
878
880
  this._isLoading.set(true);
@@ -891,10 +893,10 @@ class PermissionStateService {
891
893
  isLoaded() {
892
894
  return this._permissions() !== null && this.permissionValidator.isPermissionsLoaded();
893
895
  }
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' });
896
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PermissionStateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
897
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PermissionStateService, providedIn: 'root' });
896
898
  }
897
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: PermissionStateService, decorators: [{
899
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PermissionStateService, decorators: [{
898
900
  type: Injectable,
899
901
  args: [{ providedIn: 'root' }]
900
902
  }] });
@@ -928,11 +930,14 @@ function createActionNode(actionId = '') {
928
930
  }
929
931
  /** Visual builder for AND/OR permission logic trees */
930
932
  class LogicBuilderComponent {
931
- logic = input(null, ...(ngDevMode ? [{ debugName: "logic" }] : []));
932
- actions = input([], ...(ngDevMode ? [{ debugName: "actions" }] : []));
933
+ logic = input(null, /* @ts-ignore */
934
+ ...(ngDevMode ? [{ debugName: "logic" }] : /* istanbul ignore next */ []));
935
+ actions = input([], /* @ts-ignore */
936
+ ...(ngDevMode ? [{ debugName: "actions" }] : /* istanbul ignore next */ []));
933
937
  logicChange = output();
934
938
  /** Internal builder tree state (private writable + public readonly pattern) */
935
- _builderTree = signal(null, ...(ngDevMode ? [{ debugName: "_builderTree" }] : []));
939
+ _builderTree = signal(null, /* @ts-ignore */
940
+ ...(ngDevMode ? [{ debugName: "_builderTree" }] : /* istanbul ignore next */ []));
936
941
  builderLogic = this._builderTree.asReadonly();
937
942
  constructor() {
938
943
  effect(() => {
@@ -943,7 +948,7 @@ class LogicBuilderComponent {
943
948
  else if (!this._builderTree()) {
944
949
  this._builderTree.set(toBuilderNode(logic));
945
950
  }
946
- }, { allowSignalWrites: true });
951
+ });
947
952
  }
948
953
  initializeLogic() {
949
954
  this.updateTreeAndEmit(createGroupNode());
@@ -1010,29 +1015,33 @@ class LogicBuilderComponent {
1010
1015
  .map((child) => this.removeNodeFromTree(child, targetId)),
1011
1016
  };
1012
1017
  }
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: `
1018
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: LogicBuilderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1019
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.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: `
1015
1020
  <div class="logic-builder">
1016
1021
  <div class="flex justify-between items-center mb-3">
1017
1022
  <h4 class="text-sm font-semibold m-0">
1018
1023
  {{ 'iam.logic.title' | translate }}
1019
1024
  </h4>
1020
1025
  @if (!builderLogic()) {
1021
- <p-button
1022
- [label]="'iam.logic.add.logic' | translate"
1023
- icon="pi pi-plus"
1026
+ <button
1027
+ pButton
1024
1028
  size="small"
1025
- (onClick)="initializeLogic()"
1026
- />
1029
+ (click)="initializeLogic()"
1030
+ >
1031
+ <span pButtonIcon class="pi pi-plus"></span>
1032
+ <span pButtonLabel>{{ 'iam.logic.add.logic' | translate }}</span>
1033
+ </button>
1027
1034
  } @else {
1028
- <p-button
1029
- [label]="'iam.logic.clear.logic' | translate"
1030
- icon="pi pi-trash"
1035
+ <button
1036
+ pButton
1031
1037
  size="small"
1032
1038
  severity="danger"
1033
1039
  [outlined]="true"
1034
- (onClick)="clearLogic()"
1035
- />
1040
+ (click)="clearLogic()"
1041
+ >
1042
+ <span pButtonIcon class="pi pi-trash"></span>
1043
+ <span pButtonLabel>{{ 'iam.logic.clear.logic' | translate }}</span>
1044
+ </button>
1036
1045
  }
1037
1046
  </div>
1038
1047
 
@@ -1059,19 +1068,24 @@ class LogicBuilderComponent {
1059
1068
  <ng-template #nodeTemplate let-node let-depth="depth">
1060
1069
  <div
1061
1070
  class="p-3 border-b border-surface"
1062
- [ngClass]="depth % 2 === 0 ? 'bg-surface-0' : 'bg-surface-50'"
1071
+ [class.bg-surface-0]="depth % 2 === 0"
1072
+ [class.bg-surface-50]="depth % 2 !== 0"
1063
1073
  >
1064
1074
  <div class="flex items-center gap-3 mb-2">
1065
- <span class="node-type" [ngClass]="node.type">{{
1066
- node.type.toUpperCase()
1067
- }}</span>
1075
+ <span
1076
+ class="node-type"
1077
+ [class.group]="node.type === 'group'"
1078
+ [class.action]="node.type === 'action'"
1079
+ >{{ node.type.toUpperCase() }}</span
1080
+ >
1068
1081
 
1069
1082
  <div class="flex-1 flex items-center gap-2">
1070
1083
  @if (node.type === 'group') {
1071
1084
  <!-- Group: show operator toggle -->
1072
1085
  <span
1073
1086
  class="operator-badge"
1074
- [ngClass]="node.operator === 'AND' ? 'and' : 'or'"
1087
+ [class.and]="node.operator === 'AND'"
1088
+ [class.or]="node.operator !== 'AND'"
1075
1089
  (click)="toggleOperator(node.id)"
1076
1090
  [title]="'iam.logic.click.to.toggle' | translate"
1077
1091
  >
@@ -1106,14 +1120,16 @@ class LogicBuilderComponent {
1106
1120
  </div>
1107
1121
 
1108
1122
  <div class="flex gap-1">
1109
- <p-button
1110
- icon="pi pi-trash"
1123
+ <button
1124
+ pButton
1111
1125
  [text]="true"
1112
1126
  severity="danger"
1113
1127
  size="small"
1114
- (onClick)="removeNode(node.id)"
1128
+ (click)="removeNode(node.id)"
1115
1129
  [pTooltip]="'shared.remove' | translate"
1116
- />
1130
+ >
1131
+ <span pButtonIcon class="pi pi-trash"></span>
1132
+ </button>
1117
1133
  </div>
1118
1134
  </div>
1119
1135
 
@@ -1142,29 +1158,33 @@ class LogicBuilderComponent {
1142
1158
  {{ 'iam.logic.add.condition' | translate }}
1143
1159
  </div>
1144
1160
  <div class="flex gap-2 flex-wrap">
1145
- <p-button
1146
- [label]="'iam.logic.group' | translate"
1147
- icon="pi pi-sitemap"
1161
+ <button
1162
+ pButton
1148
1163
  size="small"
1149
1164
  [outlined]="true"
1150
- (onClick)="addChildNode(node.id, 'group')"
1151
- />
1152
- <p-button
1153
- [label]="'iam.logic.action' | translate"
1154
- icon="pi pi-bolt"
1165
+ (click)="addChildNode(node.id, 'group')"
1166
+ >
1167
+ <span pButtonIcon class="pi pi-sitemap"></span>
1168
+ <span pButtonLabel>{{ 'iam.logic.group' | translate }}</span>
1169
+ </button>
1170
+ <button
1171
+ pButton
1155
1172
  size="small"
1156
1173
  severity="success"
1157
1174
  [outlined]="true"
1158
- (onClick)="addChildNode(node.id, 'action')"
1159
- />
1175
+ (click)="addChildNode(node.id, 'action')"
1176
+ >
1177
+ <span pButtonIcon class="pi pi-bolt"></span>
1178
+ <span pButtonLabel>{{ 'iam.logic.action' | translate }}</span>
1179
+ </button>
1160
1180
  </div>
1161
1181
  </div>
1162
1182
  }
1163
1183
  </div>
1164
1184
  </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" }] });
1185
+ `, 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.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]):not([ngNoCva])[formControlName],select:not([multiple]):not([ngNoCva])[formControl],select:not([multiple]):not([ngNoCva])[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: "directive", type: i2.ButtonDirective, selector: "[pButton]", inputs: ["pButton", "pButtonPT", "pButtonUnstyled", "hostName", "text", "plain", "raised", "size", "outlined", "link", "rounded", "fluid", "variant", "iconOnly", "loading", "severity"] }, { kind: "directive", type: i2.ButtonLabel, selector: "[pButtonLabel]", inputs: ["pButtonLabelPT", "pButtonLabelUnstyled"] }, { kind: "directive", type: i2.ButtonIcon, selector: "[pButtonIcon]", inputs: ["pButtonIconPT", "pButtonUnstyled"] }, { 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", "pTooltipPT", "pTooltipUnstyled"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
1166
1186
  }
1167
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: LogicBuilderComponent, decorators: [{
1187
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: LogicBuilderComponent, decorators: [{
1168
1188
  type: Component,
1169
1189
  args: [{ selector: 'lib-logic-builder', imports: [AngularModule, PrimeModule, TranslatePipe], template: `
1170
1190
  <div class="logic-builder">
@@ -1173,21 +1193,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
1173
1193
  {{ 'iam.logic.title' | translate }}
1174
1194
  </h4>
1175
1195
  @if (!builderLogic()) {
1176
- <p-button
1177
- [label]="'iam.logic.add.logic' | translate"
1178
- icon="pi pi-plus"
1196
+ <button
1197
+ pButton
1179
1198
  size="small"
1180
- (onClick)="initializeLogic()"
1181
- />
1199
+ (click)="initializeLogic()"
1200
+ >
1201
+ <span pButtonIcon class="pi pi-plus"></span>
1202
+ <span pButtonLabel>{{ 'iam.logic.add.logic' | translate }}</span>
1203
+ </button>
1182
1204
  } @else {
1183
- <p-button
1184
- [label]="'iam.logic.clear.logic' | translate"
1185
- icon="pi pi-trash"
1205
+ <button
1206
+ pButton
1186
1207
  size="small"
1187
1208
  severity="danger"
1188
1209
  [outlined]="true"
1189
- (onClick)="clearLogic()"
1190
- />
1210
+ (click)="clearLogic()"
1211
+ >
1212
+ <span pButtonIcon class="pi pi-trash"></span>
1213
+ <span pButtonLabel>{{ 'iam.logic.clear.logic' | translate }}</span>
1214
+ </button>
1191
1215
  }
1192
1216
  </div>
1193
1217
 
@@ -1214,19 +1238,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
1214
1238
  <ng-template #nodeTemplate let-node let-depth="depth">
1215
1239
  <div
1216
1240
  class="p-3 border-b border-surface"
1217
- [ngClass]="depth % 2 === 0 ? 'bg-surface-0' : 'bg-surface-50'"
1241
+ [class.bg-surface-0]="depth % 2 === 0"
1242
+ [class.bg-surface-50]="depth % 2 !== 0"
1218
1243
  >
1219
1244
  <div class="flex items-center gap-3 mb-2">
1220
- <span class="node-type" [ngClass]="node.type">{{
1221
- node.type.toUpperCase()
1222
- }}</span>
1245
+ <span
1246
+ class="node-type"
1247
+ [class.group]="node.type === 'group'"
1248
+ [class.action]="node.type === 'action'"
1249
+ >{{ node.type.toUpperCase() }}</span
1250
+ >
1223
1251
 
1224
1252
  <div class="flex-1 flex items-center gap-2">
1225
1253
  @if (node.type === 'group') {
1226
1254
  <!-- Group: show operator toggle -->
1227
1255
  <span
1228
1256
  class="operator-badge"
1229
- [ngClass]="node.operator === 'AND' ? 'and' : 'or'"
1257
+ [class.and]="node.operator === 'AND'"
1258
+ [class.or]="node.operator !== 'AND'"
1230
1259
  (click)="toggleOperator(node.id)"
1231
1260
  [title]="'iam.logic.click.to.toggle' | translate"
1232
1261
  >
@@ -1261,14 +1290,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
1261
1290
  </div>
1262
1291
 
1263
1292
  <div class="flex gap-1">
1264
- <p-button
1265
- icon="pi pi-trash"
1293
+ <button
1294
+ pButton
1266
1295
  [text]="true"
1267
1296
  severity="danger"
1268
1297
  size="small"
1269
- (onClick)="removeNode(node.id)"
1298
+ (click)="removeNode(node.id)"
1270
1299
  [pTooltip]="'shared.remove' | translate"
1271
- />
1300
+ >
1301
+ <span pButtonIcon class="pi pi-trash"></span>
1302
+ </button>
1272
1303
  </div>
1273
1304
  </div>
1274
1305
 
@@ -1297,21 +1328,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
1297
1328
  {{ 'iam.logic.add.condition' | translate }}
1298
1329
  </div>
1299
1330
  <div class="flex gap-2 flex-wrap">
1300
- <p-button
1301
- [label]="'iam.logic.group' | translate"
1302
- icon="pi pi-sitemap"
1331
+ <button
1332
+ pButton
1303
1333
  size="small"
1304
1334
  [outlined]="true"
1305
- (onClick)="addChildNode(node.id, 'group')"
1306
- />
1307
- <p-button
1308
- [label]="'iam.logic.action' | translate"
1309
- icon="pi pi-bolt"
1335
+ (click)="addChildNode(node.id, 'group')"
1336
+ >
1337
+ <span pButtonIcon class="pi pi-sitemap"></span>
1338
+ <span pButtonLabel>{{ 'iam.logic.group' | translate }}</span>
1339
+ </button>
1340
+ <button
1341
+ pButton
1310
1342
  size="small"
1311
1343
  severity="success"
1312
1344
  [outlined]="true"
1313
- (onClick)="addChildNode(node.id, 'action')"
1314
- />
1345
+ (click)="addChildNode(node.id, 'action')"
1346
+ >
1347
+ <span pButtonIcon class="pi pi-bolt"></span>
1348
+ <span pButtonLabel>{{ 'iam.logic.action' | translate }}</span>
1349
+ </button>
1315
1350
  </div>
1316
1351
  </div>
1317
1352
  }
@@ -1384,24 +1419,32 @@ class BaseActionSelectorComponent {
1384
1419
  translateAdapter = inject(TranslateService, {
1385
1420
  optional: true,
1386
1421
  });
1387
- loading = signal(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
1388
- saving = signal(false, ...(ngDevMode ? [{ debugName: "saving" }] : []));
1389
- _actions = signal([], ...(ngDevMode ? [{ debugName: "_actions" }] : []));
1422
+ loading = signal(false, /* @ts-ignore */
1423
+ ...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
1424
+ saving = signal(false, /* @ts-ignore */
1425
+ ...(ngDevMode ? [{ debugName: "saving" }] : /* istanbul ignore next */ []));
1426
+ _actions = signal([], /* @ts-ignore */
1427
+ ...(ngDevMode ? [{ debugName: "_actions" }] : /* istanbul ignore next */ []));
1390
1428
  actions = this._actions.asReadonly();
1391
- _actionsTree = signal([], ...(ngDevMode ? [{ debugName: "_actionsTree" }] : []));
1429
+ _actionsTree = signal([], /* @ts-ignore */
1430
+ ...(ngDevMode ? [{ debugName: "_actionsTree" }] : /* istanbul ignore next */ []));
1392
1431
  actionsTree = this._actionsTree.asReadonly();
1393
- _selectionMap = signal({}, ...(ngDevMode ? [{ debugName: "_selectionMap" }] : []));
1432
+ _selectionMap = signal({}, /* @ts-ignore */
1433
+ ...(ngDevMode ? [{ debugName: "_selectionMap" }] : /* istanbul ignore next */ []));
1394
1434
  selectionMap = this._selectionMap.asReadonly();
1395
- _initialSelection = signal({}, ...(ngDevMode ? [{ debugName: "_initialSelection" }] : []));
1435
+ _initialSelection = signal({}, /* @ts-ignore */
1436
+ ...(ngDevMode ? [{ debugName: "_initialSelection" }] : /* istanbul ignore next */ []));
1396
1437
  initialSelection = this._initialSelection.asReadonly();
1397
- treeNodes = computed(() => convertActionToTreeNode(this.actionsTree()), ...(ngDevMode ? [{ debugName: "treeNodes" }] : []));
1438
+ treeNodes = computed(() => convertActionToTreeNode(this.actionsTree()), /* @ts-ignore */
1439
+ ...(ngDevMode ? [{ debugName: "treeNodes" }] : /* istanbul ignore next */ []));
1398
1440
  allSelected = computed(() => {
1399
1441
  const selMap = this.selectionMap();
1400
1442
  const total = this.actions().length;
1401
1443
  if (total === 0)
1402
1444
  return false;
1403
1445
  return Object.values(selMap).filter((v) => v).length === total;
1404
- }, ...(ngDevMode ? [{ debugName: "allSelected" }] : []));
1446
+ }, /* @ts-ignore */
1447
+ ...(ngDevMode ? [{ debugName: "allSelected" }] : /* istanbul ignore next */ []));
1405
1448
  hasChanges = computed(() => {
1406
1449
  const current = this.selectionMap();
1407
1450
  const initial = this.initialSelection();
@@ -1409,7 +1452,8 @@ class BaseActionSelectorComponent {
1409
1452
  if (currentKeys.length !== Object.keys(initial).length)
1410
1453
  return true;
1411
1454
  return currentKeys.some((key) => current[key] !== initial[key]);
1412
- }, ...(ngDevMode ? [{ debugName: "hasChanges" }] : []));
1455
+ }, /* @ts-ignore */
1456
+ ...(ngDevMode ? [{ debugName: "hasChanges" }] : /* istanbul ignore next */ []));
1413
1457
  actionsWithUnmetPrerequisites = computed(() => {
1414
1458
  const selMap = this.selectionMap();
1415
1459
  const allActions = this.actions();
@@ -1421,19 +1465,24 @@ class BaseActionSelectorComponent {
1421
1465
  }
1422
1466
  }
1423
1467
  return unmetSet;
1424
- }, ...(ngDevMode ? [{ debugName: "actionsWithUnmetPrerequisites" }] : []));
1425
- invalidActionsCount = computed(() => this.actionsWithUnmetPrerequisites().size, ...(ngDevMode ? [{ debugName: "invalidActionsCount" }] : []));
1468
+ }, /* @ts-ignore */
1469
+ ...(ngDevMode ? [{ debugName: "actionsWithUnmetPrerequisites" }] : /* istanbul ignore next */ []));
1470
+ invalidActionsCount = computed(() => this.actionsWithUnmetPrerequisites().size, /* @ts-ignore */
1471
+ ...(ngDevMode ? [{ debugName: "invalidActionsCount" }] : /* istanbul ignore next */ []));
1426
1472
  pendingAdd = computed(() => {
1427
1473
  const current = this.selectionMap();
1428
1474
  const initial = this.initialSelection();
1429
1475
  return this.actions().filter((a) => current[a.id] && !initial[a.id]);
1430
- }, ...(ngDevMode ? [{ debugName: "pendingAdd" }] : []));
1476
+ }, /* @ts-ignore */
1477
+ ...(ngDevMode ? [{ debugName: "pendingAdd" }] : /* istanbul ignore next */ []));
1431
1478
  pendingRemove = computed(() => {
1432
1479
  const current = this.selectionMap();
1433
1480
  const initial = this.initialSelection();
1434
1481
  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" }] : []));
1482
+ }, /* @ts-ignore */
1483
+ ...(ngDevMode ? [{ debugName: "pendingRemove" }] : /* istanbul ignore next */ []));
1484
+ canSave = computed(() => this.hasChanges() && !this.saving() && this.invalidActionsCount() === 0, /* @ts-ignore */
1485
+ ...(ngDevMode ? [{ debugName: "canSave" }] : /* istanbul ignore next */ []));
1437
1486
  translate(key, vars) {
1438
1487
  return this.translateAdapter?.translate(key, vars) ?? key;
1439
1488
  }
@@ -1508,8 +1557,10 @@ class RoleActionSelectorComponent extends BaseActionSelectorComponent {
1508
1557
  actionApi = inject(ActionApiService);
1509
1558
  permissionApi = inject(PermissionApiService);
1510
1559
  messageService = inject(MessageService);
1511
- selectedRoleId = signal(undefined, ...(ngDevMode ? [{ debugName: "selectedRoleId" }] : []));
1512
- roles = signal([], ...(ngDevMode ? [{ debugName: "roles" }] : []));
1560
+ selectedRoleId = signal(undefined, /* @ts-ignore */
1561
+ ...(ngDevMode ? [{ debugName: "selectedRoleId" }] : /* istanbul ignore next */ []));
1562
+ roles = signal([], /* @ts-ignore */
1563
+ ...(ngDevMode ? [{ debugName: "roles" }] : /* istanbul ignore next */ []));
1513
1564
  loadDataAbortController = null;
1514
1565
  constructor() {
1515
1566
  super();
@@ -1605,8 +1656,8 @@ class RoleActionSelectorComponent extends BaseActionSelectorComponent {
1605
1656
  this.saving.set(false);
1606
1657
  }
1607
1658
  }
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: `
1659
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RoleActionSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1660
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RoleActionSelectorComponent, isStandalone: true, selector: "flusys-role-action-selector", usesInheritance: true, ngImport: i0, template: `
1610
1661
  <div class="role-action-selector">
1611
1662
  <div class="mb-4">
1612
1663
  <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
@@ -1657,31 +1708,40 @@ class RoleActionSelectorComponent extends BaseActionSelectorComponent {
1657
1708
  </p>
1658
1709
  </div>
1659
1710
  <div class="flex flex-wrap gap-2">
1660
- <p-button
1661
- [label]="'shared.select.all' | translate"
1662
- icon="pi pi-check"
1711
+ <button
1712
+ pButton
1663
1713
  [outlined]="true"
1664
1714
  size="small"
1665
1715
  severity="secondary"
1666
- (onClick)="selectAll()"
1667
- />
1668
- <p-button
1669
- [label]="'shared.deselect.all' | translate"
1670
- icon="pi pi-times"
1716
+ (click)="selectAll()"
1717
+ >
1718
+ <span pButtonIcon class="pi pi-check"></span>
1719
+ <span pButtonLabel>{{ 'shared.select.all' | translate }}</span>
1720
+ </button>
1721
+ <button
1722
+ pButton
1671
1723
  [outlined]="true"
1672
1724
  size="small"
1673
1725
  severity="secondary"
1674
- (onClick)="deselectAll()"
1675
- />
1676
- <p-button
1726
+ (click)="deselectAll()"
1727
+ >
1728
+ <span pButtonIcon class="pi pi-times"></span>
1729
+ <span pButtonLabel>{{ 'shared.deselect.all' | translate }}</span>
1730
+ </button>
1731
+ <button
1732
+ pButton
1677
1733
  *hasPermission="ROLE_ACTION_PERMISSIONS.ASSIGN"
1678
- [label]="'shared.save.changes' | translate"
1679
- icon="pi pi-save"
1680
- [disabled]="!canSave()"
1681
- [loading]="saving()"
1734
+ [disabled]="!canSave() || saving()"
1682
1735
  size="small"
1683
- (onClick)="saveChanges()"
1684
- />
1736
+ (click)="saveChanges()"
1737
+ >
1738
+ @if (saving()) {
1739
+ <span pButtonIcon class="pi pi-spinner pi-spin"></span>
1740
+ } @else {
1741
+ <span pButtonIcon class="pi pi-save"></span>
1742
+ }
1743
+ <span pButtonLabel>{{ 'shared.save.changes' | translate }}</span>
1744
+ </button>
1685
1745
  </div>
1686
1746
  </div>
1687
1747
 
@@ -1707,7 +1767,7 @@ class RoleActionSelectorComponent extends BaseActionSelectorComponent {
1707
1767
  }
1708
1768
 
1709
1769
  <div class="overflow-x-auto -mx-4 sm:mx-0">
1710
- <p-treeTable
1770
+ <p-treetable
1711
1771
  [value]="treeNodes()"
1712
1772
  dataKey="id"
1713
1773
  class="p-treetable-sm"
@@ -1748,7 +1808,7 @@ class RoleActionSelectorComponent extends BaseActionSelectorComponent {
1748
1808
  />
1749
1809
  </td>
1750
1810
  <td>
1751
- <p-treeTableToggler [rowNode]="rowNode" />
1811
+ <p-treetabletoggler [rowNode]="rowNode" />
1752
1812
  <span class="inline-flex items-center gap-2">
1753
1813
  {{ rowData.name }}
1754
1814
  @if (hasUnmet) {
@@ -1797,7 +1857,7 @@ class RoleActionSelectorComponent extends BaseActionSelectorComponent {
1797
1857
  </td>
1798
1858
  </tr>
1799
1859
  </ng-template>
1800
- </p-treeTable>
1860
+ </p-treetable>
1801
1861
  </div>
1802
1862
  </div>
1803
1863
 
@@ -1861,9 +1921,9 @@ class RoleActionSelectorComponent extends BaseActionSelectorComponent {
1861
1921
  }
1862
1922
  }
1863
1923
  </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" }] });
1924
+ `, 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: "directive", type: i2.ButtonDirective, selector: "[pButton]", inputs: ["pButton", "pButtonPT", "pButtonUnstyled", "hostName", "text", "plain", "raised", "size", "outlined", "link", "rounded", "fluid", "variant", "iconOnly", "loading", "severity"] }, { kind: "directive", type: i2.ButtonLabel, selector: "[pButtonLabel]", inputs: ["pButtonLabelPT", "pButtonLabelUnstyled"] }, { kind: "directive", type: i2.ButtonIcon, selector: "[pButtonIcon]", inputs: ["pButtonIconPT", "pButtonUnstyled"] }, { kind: "component", type: i3.Checkbox, selector: "p-checkbox, p-check-box", inputs: ["value", "binary", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "inputStyle", "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", "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", "multiple", "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: ["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", "pTooltipPT", "pTooltipUnstyled"] }, { kind: "component", type: i7.TreeTable, selector: "p-treetable, p-tree-table", inputs: ["columns", "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", "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", "selectionKeys", "collapsedKeys", "showGridlines"], outputs: ["rowsChange", "selectionChange", "contextMenuSelectionChange", "onFilter", "onNodeExpand", "onNodeCollapse", "onPage", "onSort", "onLazyLoad", "sortFunction", "onColResize", "onColReorder", "onNodeSelect", "onNodeUnselect", "onContextMenuSelect", "onHeaderCheckboxToggle", "onEditInit", "onEditComplete", "onEditCancel", "selectionKeysChange", "collapsedKeysChange"] }, { kind: "component", type: i7.TreeTableToggler, selector: "p-treetabletoggler, p-treetable-toggler", inputs: ["rowNode"] }, { kind: "directive", type: HasPermissionDirective, selector: "[hasPermission]", inputs: ["hasPermission"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
1865
1925
  }
1866
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: RoleActionSelectorComponent, decorators: [{
1926
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RoleActionSelectorComponent, decorators: [{
1867
1927
  type: Component,
1868
1928
  args: [{ selector: 'flusys-role-action-selector', imports: [FormsModule, PrimeModule, HasPermissionDirective, TranslatePipe], template: `
1869
1929
  <div class="role-action-selector">
@@ -1916,31 +1976,40 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
1916
1976
  </p>
1917
1977
  </div>
1918
1978
  <div class="flex flex-wrap gap-2">
1919
- <p-button
1920
- [label]="'shared.select.all' | translate"
1921
- icon="pi pi-check"
1979
+ <button
1980
+ pButton
1922
1981
  [outlined]="true"
1923
1982
  size="small"
1924
1983
  severity="secondary"
1925
- (onClick)="selectAll()"
1926
- />
1927
- <p-button
1928
- [label]="'shared.deselect.all' | translate"
1929
- icon="pi pi-times"
1984
+ (click)="selectAll()"
1985
+ >
1986
+ <span pButtonIcon class="pi pi-check"></span>
1987
+ <span pButtonLabel>{{ 'shared.select.all' | translate }}</span>
1988
+ </button>
1989
+ <button
1990
+ pButton
1930
1991
  [outlined]="true"
1931
1992
  size="small"
1932
1993
  severity="secondary"
1933
- (onClick)="deselectAll()"
1934
- />
1935
- <p-button
1994
+ (click)="deselectAll()"
1995
+ >
1996
+ <span pButtonIcon class="pi pi-times"></span>
1997
+ <span pButtonLabel>{{ 'shared.deselect.all' | translate }}</span>
1998
+ </button>
1999
+ <button
2000
+ pButton
1936
2001
  *hasPermission="ROLE_ACTION_PERMISSIONS.ASSIGN"
1937
- [label]="'shared.save.changes' | translate"
1938
- icon="pi pi-save"
1939
- [disabled]="!canSave()"
1940
- [loading]="saving()"
2002
+ [disabled]="!canSave() || saving()"
1941
2003
  size="small"
1942
- (onClick)="saveChanges()"
1943
- />
2004
+ (click)="saveChanges()"
2005
+ >
2006
+ @if (saving()) {
2007
+ <span pButtonIcon class="pi pi-spinner pi-spin"></span>
2008
+ } @else {
2009
+ <span pButtonIcon class="pi pi-save"></span>
2010
+ }
2011
+ <span pButtonLabel>{{ 'shared.save.changes' | translate }}</span>
2012
+ </button>
1944
2013
  </div>
1945
2014
  </div>
1946
2015
 
@@ -1966,7 +2035,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
1966
2035
  }
1967
2036
 
1968
2037
  <div class="overflow-x-auto -mx-4 sm:mx-0">
1969
- <p-treeTable
2038
+ <p-treetable
1970
2039
  [value]="treeNodes()"
1971
2040
  dataKey="id"
1972
2041
  class="p-treetable-sm"
@@ -2007,7 +2076,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
2007
2076
  />
2008
2077
  </td>
2009
2078
  <td>
2010
- <p-treeTableToggler [rowNode]="rowNode" />
2079
+ <p-treetabletoggler [rowNode]="rowNode" />
2011
2080
  <span class="inline-flex items-center gap-2">
2012
2081
  {{ rowData.name }}
2013
2082
  @if (hasUnmet) {
@@ -2056,7 +2125,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
2056
2125
  </td>
2057
2126
  </tr>
2058
2127
  </ng-template>
2059
- </p-treeTable>
2128
+ </p-treetable>
2060
2129
  </div>
2061
2130
  </div>
2062
2131
 
@@ -2131,8 +2200,10 @@ class CompanyActionSelectorComponent extends BaseActionSelectorComponent {
2131
2200
  messageService = inject(MessageService);
2132
2201
  confirmationService = inject(ConfirmationService);
2133
2202
  destroyRef = inject(DestroyRef);
2134
- selectedCompanyId = signal(undefined, ...(ngDevMode ? [{ debugName: "selectedCompanyId" }] : []));
2135
- companies = signal([], ...(ngDevMode ? [{ debugName: "companies" }] : []));
2203
+ selectedCompanyId = signal(undefined, /* @ts-ignore */
2204
+ ...(ngDevMode ? [{ debugName: "selectedCompanyId" }] : /* istanbul ignore next */ []));
2205
+ companies = signal([], /* @ts-ignore */
2206
+ ...(ngDevMode ? [{ debugName: "companies" }] : /* istanbul ignore next */ []));
2136
2207
  loadDataAbortController = null;
2137
2208
  constructor() {
2138
2209
  super();
@@ -2275,8 +2346,8 @@ class CompanyActionSelectorComponent extends BaseActionSelectorComponent {
2275
2346
  },
2276
2347
  });
2277
2348
  }
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: `
2349
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: CompanyActionSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2350
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: CompanyActionSelectorComponent, isStandalone: true, selector: "flusys-company-action-selector", usesInheritance: true, ngImport: i0, template: `
2280
2351
  <div class="company-action-selector">
2281
2352
  <div class="mb-4">
2282
2353
  <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
@@ -2327,31 +2398,40 @@ class CompanyActionSelectorComponent extends BaseActionSelectorComponent {
2327
2398
  </p>
2328
2399
  </div>
2329
2400
  <div class="flex flex-wrap gap-2">
2330
- <p-button
2331
- [label]="'shared.select.all' | translate"
2332
- icon="pi pi-check"
2401
+ <button
2402
+ pButton
2333
2403
  [outlined]="true"
2334
2404
  size="small"
2335
2405
  severity="secondary"
2336
- (onClick)="selectAll()"
2337
- />
2338
- <p-button
2339
- [label]="'shared.deselect.all' | translate"
2340
- icon="pi pi-times"
2406
+ (click)="selectAll()"
2407
+ >
2408
+ <span pButtonIcon class="pi pi-check"></span>
2409
+ <span pButtonLabel>{{ 'shared.select.all' | translate }}</span>
2410
+ </button>
2411
+ <button
2412
+ pButton
2341
2413
  [outlined]="true"
2342
2414
  size="small"
2343
2415
  severity="secondary"
2344
- (onClick)="deselectAll()"
2345
- />
2346
- <p-button
2416
+ (click)="deselectAll()"
2417
+ >
2418
+ <span pButtonIcon class="pi pi-times"></span>
2419
+ <span pButtonLabel>{{ 'shared.deselect.all' | translate }}</span>
2420
+ </button>
2421
+ <button
2422
+ pButton
2347
2423
  *hasPermission="COMPANY_ACTION_PERMISSIONS.ASSIGN"
2348
- [label]="'shared.save.changes' | translate"
2349
- icon="pi pi-save"
2350
- [disabled]="!canSave()"
2351
- [loading]="saving()"
2424
+ [disabled]="!canSave() || saving()"
2352
2425
  size="small"
2353
- (onClick)="saveChanges()"
2354
- />
2426
+ (click)="saveChanges()"
2427
+ >
2428
+ @if (saving()) {
2429
+ <span pButtonIcon class="pi pi-spinner pi-spin"></span>
2430
+ } @else {
2431
+ <span pButtonIcon class="pi pi-save"></span>
2432
+ }
2433
+ <span pButtonLabel>{{ 'shared.save.changes' | translate }}</span>
2434
+ </button>
2355
2435
  </div>
2356
2436
  </div>
2357
2437
 
@@ -2377,7 +2457,7 @@ class CompanyActionSelectorComponent extends BaseActionSelectorComponent {
2377
2457
  }
2378
2458
 
2379
2459
  <div class="overflow-x-auto -mx-4 sm:mx-0">
2380
- <p-treeTable
2460
+ <p-treetable
2381
2461
  [value]="treeNodes()"
2382
2462
  dataKey="id"
2383
2463
  class="p-treetable-sm"
@@ -2417,7 +2497,7 @@ class CompanyActionSelectorComponent extends BaseActionSelectorComponent {
2417
2497
  />
2418
2498
  </td>
2419
2499
  <td>
2420
- <p-treeTableToggler [rowNode]="rowNode" />
2500
+ <p-treetabletoggler [rowNode]="rowNode" />
2421
2501
  <span class="inline-flex items-center gap-2">
2422
2502
  {{ rowData.name }}
2423
2503
  @if (hasUnmet) {
@@ -2460,7 +2540,7 @@ class CompanyActionSelectorComponent extends BaseActionSelectorComponent {
2460
2540
  </td>
2461
2541
  </tr>
2462
2542
  </ng-template>
2463
- </p-treeTable>
2543
+ </p-treetable>
2464
2544
  </div>
2465
2545
  </div>
2466
2546
 
@@ -2524,9 +2604,9 @@ class CompanyActionSelectorComponent extends BaseActionSelectorComponent {
2524
2604
  }
2525
2605
  }
2526
2606
  </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" }] });
2607
+ `, 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: "directive", type: i2.ButtonDirective, selector: "[pButton]", inputs: ["pButton", "pButtonPT", "pButtonUnstyled", "hostName", "text", "plain", "raised", "size", "outlined", "link", "rounded", "fluid", "variant", "iconOnly", "loading", "severity"] }, { kind: "directive", type: i2.ButtonLabel, selector: "[pButtonLabel]", inputs: ["pButtonLabelPT", "pButtonLabelUnstyled"] }, { kind: "directive", type: i2.ButtonIcon, selector: "[pButtonIcon]", inputs: ["pButtonIconPT", "pButtonUnstyled"] }, { kind: "component", type: i3.Checkbox, selector: "p-checkbox, p-check-box", inputs: ["value", "binary", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "inputStyle", "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", "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", "multiple", "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: ["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", "pTooltipPT", "pTooltipUnstyled"] }, { kind: "component", type: i7.TreeTable, selector: "p-treetable, p-tree-table", inputs: ["columns", "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", "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", "selectionKeys", "collapsedKeys", "showGridlines"], outputs: ["rowsChange", "selectionChange", "contextMenuSelectionChange", "onFilter", "onNodeExpand", "onNodeCollapse", "onPage", "onSort", "onLazyLoad", "sortFunction", "onColResize", "onColReorder", "onNodeSelect", "onNodeUnselect", "onContextMenuSelect", "onHeaderCheckboxToggle", "onEditInit", "onEditComplete", "onEditCancel", "selectionKeysChange", "collapsedKeysChange"] }, { kind: "component", type: i7.TreeTableToggler, selector: "p-treetabletoggler, p-treetable-toggler", inputs: ["rowNode"] }, { kind: "directive", type: HasPermissionDirective, selector: "[hasPermission]", inputs: ["hasPermission"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
2528
2608
  }
2529
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: CompanyActionSelectorComponent, decorators: [{
2609
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: CompanyActionSelectorComponent, decorators: [{
2530
2610
  type: Component,
2531
2611
  args: [{ selector: 'flusys-company-action-selector', imports: [FormsModule, PrimeModule, HasPermissionDirective, TranslatePipe], template: `
2532
2612
  <div class="company-action-selector">
@@ -2579,31 +2659,40 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
2579
2659
  </p>
2580
2660
  </div>
2581
2661
  <div class="flex flex-wrap gap-2">
2582
- <p-button
2583
- [label]="'shared.select.all' | translate"
2584
- icon="pi pi-check"
2662
+ <button
2663
+ pButton
2585
2664
  [outlined]="true"
2586
2665
  size="small"
2587
2666
  severity="secondary"
2588
- (onClick)="selectAll()"
2589
- />
2590
- <p-button
2591
- [label]="'shared.deselect.all' | translate"
2592
- icon="pi pi-times"
2667
+ (click)="selectAll()"
2668
+ >
2669
+ <span pButtonIcon class="pi pi-check"></span>
2670
+ <span pButtonLabel>{{ 'shared.select.all' | translate }}</span>
2671
+ </button>
2672
+ <button
2673
+ pButton
2593
2674
  [outlined]="true"
2594
2675
  size="small"
2595
2676
  severity="secondary"
2596
- (onClick)="deselectAll()"
2597
- />
2598
- <p-button
2677
+ (click)="deselectAll()"
2678
+ >
2679
+ <span pButtonIcon class="pi pi-times"></span>
2680
+ <span pButtonLabel>{{ 'shared.deselect.all' | translate }}</span>
2681
+ </button>
2682
+ <button
2683
+ pButton
2599
2684
  *hasPermission="COMPANY_ACTION_PERMISSIONS.ASSIGN"
2600
- [label]="'shared.save.changes' | translate"
2601
- icon="pi pi-save"
2602
- [disabled]="!canSave()"
2603
- [loading]="saving()"
2685
+ [disabled]="!canSave() || saving()"
2604
2686
  size="small"
2605
- (onClick)="saveChanges()"
2606
- />
2687
+ (click)="saveChanges()"
2688
+ >
2689
+ @if (saving()) {
2690
+ <span pButtonIcon class="pi pi-spinner pi-spin"></span>
2691
+ } @else {
2692
+ <span pButtonIcon class="pi pi-save"></span>
2693
+ }
2694
+ <span pButtonLabel>{{ 'shared.save.changes' | translate }}</span>
2695
+ </button>
2607
2696
  </div>
2608
2697
  </div>
2609
2698
 
@@ -2629,7 +2718,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
2629
2718
  }
2630
2719
 
2631
2720
  <div class="overflow-x-auto -mx-4 sm:mx-0">
2632
- <p-treeTable
2721
+ <p-treetable
2633
2722
  [value]="treeNodes()"
2634
2723
  dataKey="id"
2635
2724
  class="p-treetable-sm"
@@ -2669,7 +2758,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
2669
2758
  />
2670
2759
  </td>
2671
2760
  <td>
2672
- <p-treeTableToggler [rowNode]="rowNode" />
2761
+ <p-treetabletoggler [rowNode]="rowNode" />
2673
2762
  <span class="inline-flex items-center gap-2">
2674
2763
  {{ rowData.name }}
2675
2764
  @if (hasUnmet) {
@@ -2712,7 +2801,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
2712
2801
  </td>
2713
2802
  </tr>
2714
2803
  </ng-template>
2715
- </p-treeTable>
2804
+ </p-treetable>
2716
2805
  </div>
2717
2806
  </div>
2718
2807
 
@@ -2825,28 +2914,38 @@ class UserRoleSelectorComponent {
2825
2914
  return this.translateAdapter?.translate(key, vars) ?? key;
2826
2915
  }
2827
2916
  // State - User/Branch Selection
2828
- selectedUserId = signal(null, ...(ngDevMode ? [{ debugName: "selectedUserId" }] : []));
2829
- selectedBranchId = signal(undefined, ...(ngDevMode ? [{ debugName: "selectedBranchId" }] : []));
2830
- branches = signal([], ...(ngDevMode ? [{ debugName: "branches" }] : []));
2917
+ selectedUserId = signal(null, /* @ts-ignore */
2918
+ ...(ngDevMode ? [{ debugName: "selectedUserId" }] : /* istanbul ignore next */ []));
2919
+ selectedBranchId = signal(undefined, /* @ts-ignore */
2920
+ ...(ngDevMode ? [{ debugName: "selectedBranchId" }] : /* istanbul ignore next */ []));
2921
+ branches = signal([], /* @ts-ignore */
2922
+ ...(ngDevMode ? [{ debugName: "branches" }] : /* istanbul ignore next */ []));
2831
2923
  // State - Loading/Saving
2832
- loading = signal(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
2833
- saving = signal(false, ...(ngDevMode ? [{ debugName: "saving" }] : []));
2924
+ loading = signal(false, /* @ts-ignore */
2925
+ ...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
2926
+ saving = signal(false, /* @ts-ignore */
2927
+ ...(ngDevMode ? [{ debugName: "saving" }] : /* istanbul ignore next */ []));
2834
2928
  // State - Roles (Business Logic)
2835
- _roles = signal([], ...(ngDevMode ? [{ debugName: "_roles" }] : []));
2929
+ _roles = signal([], /* @ts-ignore */
2930
+ ...(ngDevMode ? [{ debugName: "_roles" }] : /* istanbul ignore next */ []));
2836
2931
  roles = this._roles.asReadonly();
2837
2932
  // State - Selection
2838
- _selectionMap = signal({}, ...(ngDevMode ? [{ debugName: "_selectionMap" }] : []));
2933
+ _selectionMap = signal({}, /* @ts-ignore */
2934
+ ...(ngDevMode ? [{ debugName: "_selectionMap" }] : /* istanbul ignore next */ []));
2839
2935
  selectionMap = this._selectionMap.asReadonly();
2840
- _initialSelection = signal({}, ...(ngDevMode ? [{ debugName: "_initialSelection" }] : []));
2936
+ _initialSelection = signal({}, /* @ts-ignore */
2937
+ ...(ngDevMode ? [{ debugName: "_initialSelection" }] : /* istanbul ignore next */ []));
2841
2938
  initialSelection = this._initialSelection.asReadonly();
2842
2939
  // Computed - UI Flags
2843
- showBranchSelector = computed(() => isCompanyFeatureEnabled(this.appConfig) === true, ...(ngDevMode ? [{ debugName: "showBranchSelector" }] : []));
2940
+ showBranchSelector = computed(() => isCompanyFeatureEnabled(this.appConfig) === true, /* @ts-ignore */
2941
+ ...(ngDevMode ? [{ debugName: "showBranchSelector" }] : /* istanbul ignore next */ []));
2844
2942
  filteredBranches = computed(() => {
2845
2943
  const currentCompanyId = this.companyContext.currentCompanyInfo()?.id || undefined;
2846
2944
  if (!currentCompanyId)
2847
2945
  return this.branches();
2848
2946
  return this.branches().filter((b) => b.companyId === currentCompanyId);
2849
- }, ...(ngDevMode ? [{ debugName: "filteredBranches" }] : []));
2947
+ }, /* @ts-ignore */
2948
+ ...(ngDevMode ? [{ debugName: "filteredBranches" }] : /* istanbul ignore next */ []));
2850
2949
  // Computed - Selection State
2851
2950
  allSelected = computed(() => {
2852
2951
  const selMap = this.selectionMap();
@@ -2855,7 +2954,8 @@ class UserRoleSelectorComponent {
2855
2954
  return false;
2856
2955
  const selected = Object.values(selMap).filter((v) => v).length;
2857
2956
  return selected === total;
2858
- }, ...(ngDevMode ? [{ debugName: "allSelected" }] : []));
2957
+ }, /* @ts-ignore */
2958
+ ...(ngDevMode ? [{ debugName: "allSelected" }] : /* istanbul ignore next */ []));
2859
2959
  // Computed - Change Detection
2860
2960
  hasChanges = computed(() => {
2861
2961
  const current = this.selectionMap();
@@ -2865,24 +2965,28 @@ class UserRoleSelectorComponent {
2865
2965
  if (currentKeys.length !== initialKeys.length)
2866
2966
  return true;
2867
2967
  return currentKeys.some((key) => current[key] !== initial[key]);
2868
- }, ...(ngDevMode ? [{ debugName: "hasChanges" }] : []));
2968
+ }, /* @ts-ignore */
2969
+ ...(ngDevMode ? [{ debugName: "hasChanges" }] : /* istanbul ignore next */ []));
2869
2970
  // Computed - Pending Changes
2870
2971
  pendingAdd = computed(() => {
2871
2972
  const current = this.selectionMap();
2872
2973
  const initial = this.initialSelection();
2873
2974
  const allRoles = this.roles();
2874
2975
  return allRoles.filter((role) => current[role.id] && !initial[role.id]);
2875
- }, ...(ngDevMode ? [{ debugName: "pendingAdd" }] : []));
2976
+ }, /* @ts-ignore */
2977
+ ...(ngDevMode ? [{ debugName: "pendingAdd" }] : /* istanbul ignore next */ []));
2876
2978
  pendingRemove = computed(() => {
2877
2979
  const current = this.selectionMap();
2878
2980
  const initial = this.initialSelection();
2879
2981
  const allRoles = this.roles();
2880
2982
  return allRoles.filter((role) => !current[role.id] && initial[role.id]);
2881
- }, ...(ngDevMode ? [{ debugName: "pendingRemove" }] : []));
2983
+ }, /* @ts-ignore */
2984
+ ...(ngDevMode ? [{ debugName: "pendingRemove" }] : /* istanbul ignore next */ []));
2882
2985
  // Computed - Save Button State
2883
2986
  canSave = computed(() => {
2884
2987
  return this.hasChanges() && !this.saving();
2885
- }, ...(ngDevMode ? [{ debugName: "canSave" }] : []));
2988
+ }, /* @ts-ignore */
2989
+ ...(ngDevMode ? [{ debugName: "canSave" }] : /* istanbul ignore next */ []));
2886
2990
  constructor() {
2887
2991
  // Effect: Load user branches and data when user changes
2888
2992
  effect(() => {
@@ -3081,8 +3185,8 @@ class UserRoleSelectorComponent {
3081
3185
  this._selectionMap.set({});
3082
3186
  this._initialSelection.set({});
3083
3187
  }
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: `
3188
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: UserRoleSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3189
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: UserRoleSelectorComponent, isStandalone: true, selector: "flusys-user-role-selector", ngImport: i0, template: `
3086
3190
  <div class="user-role-selector">
3087
3191
  <!-- User and Branch Selectors -->
3088
3192
  <div class="surface-card p-4 rounded-border mb-4 shadow-sm">
@@ -3177,31 +3281,40 @@ class UserRoleSelectorComponent {
3177
3281
  </p>
3178
3282
  </div>
3179
3283
  <div class="flex flex-wrap gap-2">
3180
- <p-button
3181
- [label]="'shared.select.all' | translate"
3182
- icon="pi pi-check"
3284
+ <button
3285
+ pButton
3183
3286
  [outlined]="true"
3184
3287
  size="small"
3185
3288
  severity="secondary"
3186
- (onClick)="selectAll()"
3187
- />
3188
- <p-button
3189
- [label]="'shared.deselect.all' | translate"
3190
- icon="pi pi-times"
3289
+ (click)="selectAll()"
3290
+ >
3291
+ <span pButtonIcon class="pi pi-check"></span>
3292
+ <span pButtonLabel>{{ 'shared.select.all' | translate }}</span>
3293
+ </button>
3294
+ <button
3295
+ pButton
3191
3296
  [outlined]="true"
3192
3297
  size="small"
3193
3298
  severity="secondary"
3194
- (onClick)="deselectAll()"
3195
- />
3196
- <p-button
3299
+ (click)="deselectAll()"
3300
+ >
3301
+ <span pButtonIcon class="pi pi-times"></span>
3302
+ <span pButtonLabel>{{ 'shared.deselect.all' | translate }}</span>
3303
+ </button>
3304
+ <button
3305
+ pButton
3197
3306
  *hasPermission="USER_ROLE_PERMISSIONS.ASSIGN"
3198
- [label]="'shared.save.changes' | translate"
3199
- icon="pi pi-save"
3200
- [disabled]="!canSave()"
3201
- [loading]="saving()"
3307
+ [disabled]="!canSave() || saving()"
3202
3308
  size="small"
3203
- (onClick)="saveChanges()"
3204
- />
3309
+ (click)="saveChanges()"
3310
+ >
3311
+ @if (saving()) {
3312
+ <span pButtonIcon class="pi pi-spinner pi-spin"></span>
3313
+ } @else {
3314
+ <span pButtonIcon class="pi pi-save"></span>
3315
+ }
3316
+ <span pButtonLabel>{{ 'shared.save.changes' | translate }}</span>
3317
+ </button>
3205
3318
  </div>
3206
3319
  </div>
3207
3320
 
@@ -3335,9 +3448,9 @@ class UserRoleSelectorComponent {
3335
3448
  }
3336
3449
  }
3337
3450
  </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" }] });
3451
+ `, 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: "directive", type: i2.ButtonDirective, selector: "[pButton]", inputs: ["pButton", "pButtonPT", "pButtonUnstyled", "hostName", "text", "plain", "raised", "size", "outlined", "link", "rounded", "fluid", "variant", "iconOnly", "loading", "severity"] }, { kind: "directive", type: i2.ButtonLabel, selector: "[pButtonLabel]", inputs: ["pButtonLabelPT", "pButtonLabelUnstyled"] }, { kind: "directive", type: i2.ButtonIcon, selector: "[pButtonIcon]", inputs: ["pButtonIconPT", "pButtonUnstyled"] }, { kind: "component", type: i3.Checkbox, selector: "p-checkbox, p-check-box", inputs: ["value", "binary", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "inputStyle", "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", "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", "multiple", "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", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "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", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll"], outputs: ["contextMenuSelectionChange", "firstChange", "rowsChange", "totalRecordsChange", "selectionChange", "selectAllChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "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", "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" }] });
3339
3452
  }
3340
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: UserRoleSelectorComponent, decorators: [{
3453
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: UserRoleSelectorComponent, decorators: [{
3341
3454
  type: Component,
3342
3455
  args: [{ selector: 'flusys-user-role-selector', imports: [
3343
3456
  CommonModule,
@@ -3441,31 +3554,40 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
3441
3554
  </p>
3442
3555
  </div>
3443
3556
  <div class="flex flex-wrap gap-2">
3444
- <p-button
3445
- [label]="'shared.select.all' | translate"
3446
- icon="pi pi-check"
3557
+ <button
3558
+ pButton
3447
3559
  [outlined]="true"
3448
3560
  size="small"
3449
3561
  severity="secondary"
3450
- (onClick)="selectAll()"
3451
- />
3452
- <p-button
3453
- [label]="'shared.deselect.all' | translate"
3454
- icon="pi pi-times"
3562
+ (click)="selectAll()"
3563
+ >
3564
+ <span pButtonIcon class="pi pi-check"></span>
3565
+ <span pButtonLabel>{{ 'shared.select.all' | translate }}</span>
3566
+ </button>
3567
+ <button
3568
+ pButton
3455
3569
  [outlined]="true"
3456
3570
  size="small"
3457
3571
  severity="secondary"
3458
- (onClick)="deselectAll()"
3459
- />
3460
- <p-button
3572
+ (click)="deselectAll()"
3573
+ >
3574
+ <span pButtonIcon class="pi pi-times"></span>
3575
+ <span pButtonLabel>{{ 'shared.deselect.all' | translate }}</span>
3576
+ </button>
3577
+ <button
3578
+ pButton
3461
3579
  *hasPermission="USER_ROLE_PERMISSIONS.ASSIGN"
3462
- [label]="'shared.save.changes' | translate"
3463
- icon="pi pi-save"
3464
- [disabled]="!canSave()"
3465
- [loading]="saving()"
3580
+ [disabled]="!canSave() || saving()"
3466
3581
  size="small"
3467
- (onClick)="saveChanges()"
3468
- />
3582
+ (click)="saveChanges()"
3583
+ >
3584
+ @if (saving()) {
3585
+ <span pButtonIcon class="pi pi-spinner pi-spin"></span>
3586
+ } @else {
3587
+ <span pButtonIcon class="pi pi-save"></span>
3588
+ }
3589
+ <span pButtonLabel>{{ 'shared.save.changes' | translate }}</span>
3590
+ </button>
3469
3591
  </div>
3470
3592
  </div>
3471
3593
 
@@ -3610,17 +3732,22 @@ class UserActionSelectorComponent extends BaseActionSelectorComponent {
3610
3732
  actionApi = inject(ActionApiService);
3611
3733
  permissionApi = inject(PermissionApiService);
3612
3734
  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" }] : []));
3735
+ selectedUserId = signal(null, /* @ts-ignore */
3736
+ ...(ngDevMode ? [{ debugName: "selectedUserId" }] : /* istanbul ignore next */ []));
3737
+ selectedBranchId = signal(undefined, /* @ts-ignore */
3738
+ ...(ngDevMode ? [{ debugName: "selectedBranchId" }] : /* istanbul ignore next */ []));
3739
+ branches = signal([], /* @ts-ignore */
3740
+ ...(ngDevMode ? [{ debugName: "branches" }] : /* istanbul ignore next */ []));
3741
+ isCompanyFeatureActive = computed(() => isCompanyFeatureEnabled(this.appConfig) === true, /* @ts-ignore */
3742
+ ...(ngDevMode ? [{ debugName: "isCompanyFeatureActive" }] : /* istanbul ignore next */ []));
3617
3743
  showBranchSelector = this.isCompanyFeatureActive;
3618
3744
  filteredBranches = computed(() => {
3619
3745
  const currentCompanyId = this.companyContext.currentCompanyInfo()?.id || undefined;
3620
3746
  if (!currentCompanyId)
3621
3747
  return this.branches();
3622
3748
  return this.branches().filter((b) => b.companyId === currentCompanyId);
3623
- }, ...(ngDevMode ? [{ debugName: "filteredBranches" }] : []));
3749
+ }, /* @ts-ignore */
3750
+ ...(ngDevMode ? [{ debugName: "filteredBranches" }] : /* istanbul ignore next */ []));
3624
3751
  constructor() {
3625
3752
  super();
3626
3753
  effect(() => {
@@ -3740,8 +3867,8 @@ class UserActionSelectorComponent extends BaseActionSelectorComponent {
3740
3867
  this.saving.set(false);
3741
3868
  }
3742
3869
  }
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: `
3870
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: UserActionSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3871
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: UserActionSelectorComponent, isStandalone: true, selector: "flusys-user-action-selector", usesInheritance: true, ngImport: i0, template: `
3745
3872
  <div class="user-action-selector">
3746
3873
  <div class="surface-card p-4 rounded-border mb-4 shadow-sm">
3747
3874
  <div class="grid grid-cols-1 sm:grid-cols-2 gap-5">
@@ -3831,31 +3958,40 @@ class UserActionSelectorComponent extends BaseActionSelectorComponent {
3831
3958
  </p>
3832
3959
  </div>
3833
3960
  <div class="flex flex-wrap gap-2">
3834
- <p-button
3835
- [label]="'shared.select.all' | translate"
3836
- icon="pi pi-check"
3961
+ <button
3962
+ pButton
3837
3963
  [outlined]="true"
3838
3964
  size="small"
3839
3965
  severity="secondary"
3840
- (onClick)="selectAll()"
3841
- />
3842
- <p-button
3843
- [label]="'shared.deselect.all' | translate"
3844
- icon="pi pi-times"
3966
+ (click)="selectAll()"
3967
+ >
3968
+ <span pButtonIcon class="pi pi-check"></span>
3969
+ <span pButtonLabel>{{ 'shared.select.all' | translate }}</span>
3970
+ </button>
3971
+ <button
3972
+ pButton
3845
3973
  [outlined]="true"
3846
3974
  size="small"
3847
3975
  severity="secondary"
3848
- (onClick)="deselectAll()"
3849
- />
3850
- <p-button
3976
+ (click)="deselectAll()"
3977
+ >
3978
+ <span pButtonIcon class="pi pi-times"></span>
3979
+ <span pButtonLabel>{{ 'shared.deselect.all' | translate }}</span>
3980
+ </button>
3981
+ <button
3982
+ pButton
3851
3983
  *hasPermission="USER_ACTION_PERMISSIONS.ASSIGN"
3852
- [label]="'shared.save.changes' | translate"
3853
- icon="pi pi-save"
3854
- [disabled]="!canSave()"
3855
- [loading]="saving()"
3984
+ [disabled]="!canSave() || saving()"
3856
3985
  size="small"
3857
- (onClick)="saveChanges()"
3858
- />
3986
+ (click)="saveChanges()"
3987
+ >
3988
+ @if (saving()) {
3989
+ <span pButtonIcon class="pi pi-spinner pi-spin"></span>
3990
+ } @else {
3991
+ <span pButtonIcon class="pi pi-save"></span>
3992
+ }
3993
+ <span pButtonLabel>{{ 'shared.save.changes' | translate }}</span>
3994
+ </button>
3859
3995
  </div>
3860
3996
  </div>
3861
3997
 
@@ -3881,7 +4017,7 @@ class UserActionSelectorComponent extends BaseActionSelectorComponent {
3881
4017
  }
3882
4018
 
3883
4019
  <div class="overflow-x-auto -mx-4 sm:mx-0">
3884
- <p-treeTable
4020
+ <p-treetable
3885
4021
  [value]="treeNodes()"
3886
4022
  dataKey="id"
3887
4023
  class="p-treetable-sm"
@@ -3922,7 +4058,7 @@ class UserActionSelectorComponent extends BaseActionSelectorComponent {
3922
4058
  />
3923
4059
  </td>
3924
4060
  <td>
3925
- <p-treeTableToggler [rowNode]="rowNode" />
4061
+ <p-treetabletoggler [rowNode]="rowNode" />
3926
4062
  <span class="inline-flex items-center gap-2">
3927
4063
  {{ rowData.name }}
3928
4064
  @if (hasUnmet) {
@@ -3965,7 +4101,7 @@ class UserActionSelectorComponent extends BaseActionSelectorComponent {
3965
4101
  </td>
3966
4102
  </tr>
3967
4103
  </ng-template>
3968
- </p-treeTable>
4104
+ </p-treetable>
3969
4105
  </div>
3970
4106
  </div>
3971
4107
 
@@ -4029,9 +4165,9 @@ class UserActionSelectorComponent extends BaseActionSelectorComponent {
4029
4165
  }
4030
4166
  }
4031
4167
  </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" }] });
4168
+ `, 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: "directive", type: i2.ButtonDirective, selector: "[pButton]", inputs: ["pButton", "pButtonPT", "pButtonUnstyled", "hostName", "text", "plain", "raised", "size", "outlined", "link", "rounded", "fluid", "variant", "iconOnly", "loading", "severity"] }, { kind: "directive", type: i2.ButtonLabel, selector: "[pButtonLabel]", inputs: ["pButtonLabelPT", "pButtonLabelUnstyled"] }, { kind: "directive", type: i2.ButtonIcon, selector: "[pButtonIcon]", inputs: ["pButtonIconPT", "pButtonUnstyled"] }, { kind: "component", type: i3.Checkbox, selector: "p-checkbox, p-check-box", inputs: ["value", "binary", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "inputStyle", "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", "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", "multiple", "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: ["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", "pTooltipPT", "pTooltipUnstyled"] }, { kind: "component", type: i7.TreeTable, selector: "p-treetable, p-tree-table", inputs: ["columns", "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", "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", "selectionKeys", "collapsedKeys", "showGridlines"], outputs: ["rowsChange", "selectionChange", "contextMenuSelectionChange", "onFilter", "onNodeExpand", "onNodeCollapse", "onPage", "onSort", "onLazyLoad", "sortFunction", "onColResize", "onColReorder", "onNodeSelect", "onNodeUnselect", "onContextMenuSelect", "onHeaderCheckboxToggle", "onEditInit", "onEditComplete", "onEditCancel", "selectionKeysChange", "collapsedKeysChange"] }, { kind: "component", type: i7.TreeTableToggler, selector: "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" }] });
4033
4169
  }
4034
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: UserActionSelectorComponent, decorators: [{
4170
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: UserActionSelectorComponent, decorators: [{
4035
4171
  type: Component,
4036
4172
  args: [{ selector: 'flusys-user-action-selector', imports: [
4037
4173
  FormsModule,
@@ -4129,31 +4265,40 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
4129
4265
  </p>
4130
4266
  </div>
4131
4267
  <div class="flex flex-wrap gap-2">
4132
- <p-button
4133
- [label]="'shared.select.all' | translate"
4134
- icon="pi pi-check"
4268
+ <button
4269
+ pButton
4135
4270
  [outlined]="true"
4136
4271
  size="small"
4137
4272
  severity="secondary"
4138
- (onClick)="selectAll()"
4139
- />
4140
- <p-button
4141
- [label]="'shared.deselect.all' | translate"
4142
- icon="pi pi-times"
4273
+ (click)="selectAll()"
4274
+ >
4275
+ <span pButtonIcon class="pi pi-check"></span>
4276
+ <span pButtonLabel>{{ 'shared.select.all' | translate }}</span>
4277
+ </button>
4278
+ <button
4279
+ pButton
4143
4280
  [outlined]="true"
4144
4281
  size="small"
4145
4282
  severity="secondary"
4146
- (onClick)="deselectAll()"
4147
- />
4148
- <p-button
4283
+ (click)="deselectAll()"
4284
+ >
4285
+ <span pButtonIcon class="pi pi-times"></span>
4286
+ <span pButtonLabel>{{ 'shared.deselect.all' | translate }}</span>
4287
+ </button>
4288
+ <button
4289
+ pButton
4149
4290
  *hasPermission="USER_ACTION_PERMISSIONS.ASSIGN"
4150
- [label]="'shared.save.changes' | translate"
4151
- icon="pi pi-save"
4152
- [disabled]="!canSave()"
4153
- [loading]="saving()"
4291
+ [disabled]="!canSave() || saving()"
4154
4292
  size="small"
4155
- (onClick)="saveChanges()"
4156
- />
4293
+ (click)="saveChanges()"
4294
+ >
4295
+ @if (saving()) {
4296
+ <span pButtonIcon class="pi pi-spinner pi-spin"></span>
4297
+ } @else {
4298
+ <span pButtonIcon class="pi pi-save"></span>
4299
+ }
4300
+ <span pButtonLabel>{{ 'shared.save.changes' | translate }}</span>
4301
+ </button>
4157
4302
  </div>
4158
4303
  </div>
4159
4304
 
@@ -4179,7 +4324,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
4179
4324
  }
4180
4325
 
4181
4326
  <div class="overflow-x-auto -mx-4 sm:mx-0">
4182
- <p-treeTable
4327
+ <p-treetable
4183
4328
  [value]="treeNodes()"
4184
4329
  dataKey="id"
4185
4330
  class="p-treetable-sm"
@@ -4220,7 +4365,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
4220
4365
  />
4221
4366
  </td>
4222
4367
  <td>
4223
- <p-treeTableToggler [rowNode]="rowNode" />
4368
+ <p-treetabletoggler [rowNode]="rowNode" />
4224
4369
  <span class="inline-flex items-center gap-2">
4225
4370
  {{ rowData.name }}
4226
4371
  @if (hasUnmet) {
@@ -4263,7 +4408,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
4263
4408
  </td>
4264
4409
  </tr>
4265
4410
  </ng-template>
4266
- </p-treeTable>
4411
+ </p-treetable>
4267
4412
  </div>
4268
4413
  </div>
4269
4414
 
@@ -4377,10 +4522,10 @@ class ProfilePermissionProviderAdapter {
4377
4522
  })),
4378
4523
  })));
4379
4524
  }
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 });
4525
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: ProfilePermissionProviderAdapter, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4526
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: ProfilePermissionProviderAdapter });
4382
4527
  }
4383
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: ProfilePermissionProviderAdapter, decorators: [{
4528
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: ProfilePermissionProviderAdapter, decorators: [{
4384
4529
  type: Injectable
4385
4530
  }] });
4386
4531
 
@@ -4403,7 +4548,7 @@ const IAM_ROUTES = [
4403
4548
  {
4404
4549
  path: '',
4405
4550
  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),
4551
+ loadComponent: () => import('./flusys-ng-iam-iam-container.component-DEuc_l2i.mjs').then((m) => m.IamContainerComponent),
4407
4552
  children: [
4408
4553
  // Actions Management
4409
4554
  {
@@ -4412,15 +4557,15 @@ const IAM_ROUTES = [
4412
4557
  children: [
4413
4558
  {
4414
4559
  path: '',
4415
- loadComponent: () => import('./flusys-ng-iam-action-list-page.component-BJ-tu6vu.mjs').then((m) => m.ActionListPageComponent),
4560
+ loadComponent: () => import('./flusys-ng-iam-action-list-page.component-BQvx2btD.mjs').then((m) => m.ActionListPageComponent),
4416
4561
  },
4417
4562
  {
4418
4563
  path: 'new',
4419
- loadComponent: () => import('./flusys-ng-iam-action-form-page.component-BQJkl9pU.mjs').then((m) => m.ActionFormPageComponent),
4564
+ loadComponent: () => import('./flusys-ng-iam-action-form-page.component-BGEON5_n.mjs').then((m) => m.ActionFormPageComponent),
4420
4565
  },
4421
4566
  {
4422
4567
  path: ':id',
4423
- loadComponent: () => import('./flusys-ng-iam-action-form-page.component-BQJkl9pU.mjs').then((m) => m.ActionFormPageComponent),
4568
+ loadComponent: () => import('./flusys-ng-iam-action-form-page.component-BGEON5_n.mjs').then((m) => m.ActionFormPageComponent),
4424
4569
  },
4425
4570
  ],
4426
4571
  },
@@ -4431,15 +4576,15 @@ const IAM_ROUTES = [
4431
4576
  children: [
4432
4577
  {
4433
4578
  path: '',
4434
- loadComponent: () => import('./flusys-ng-iam-role-list-page.component-CNOsO-gH.mjs').then((m) => m.RoleListPageComponent),
4579
+ loadComponent: () => import('./flusys-ng-iam-role-list-page.component-DVto37LL.mjs').then((m) => m.RoleListPageComponent),
4435
4580
  },
4436
4581
  {
4437
4582
  path: 'new',
4438
- loadComponent: () => import('./flusys-ng-iam-role-form-page.component-CX8LxsdO.mjs').then((m) => m.RoleFormPageComponent),
4583
+ loadComponent: () => import('./flusys-ng-iam-role-form-page.component-CR1tl17E.mjs').then((m) => m.RoleFormPageComponent),
4439
4584
  },
4440
4585
  {
4441
4586
  path: ':id',
4442
- loadComponent: () => import('./flusys-ng-iam-role-form-page.component-CX8LxsdO.mjs').then((m) => m.RoleFormPageComponent),
4587
+ loadComponent: () => import('./flusys-ng-iam-role-form-page.component-CR1tl17E.mjs').then((m) => m.RoleFormPageComponent),
4443
4588
  },
4444
4589
  ],
4445
4590
  },
@@ -4454,7 +4599,7 @@ const IAM_ROUTES = [
4454
4599
  COMPANY_ACTION_PERMISSIONS.READ,
4455
4600
  ]),
4456
4601
  ],
4457
- loadComponent: () => import('./flusys-ng-iam-permission-page.component-D4IHueFW.mjs').then((m) => m.PermissionPageComponent),
4602
+ loadComponent: () => import('./flusys-ng-iam-permission-page.component-DV8qtLcu.mjs').then((m) => m.PermissionPageComponent),
4458
4603
  },
4459
4604
  // Default redirect to actions
4460
4605
  {
@@ -4473,4 +4618,4 @@ const IAM_ROUTES = [
4473
4618
  */
4474
4619
 
4475
4620
  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
4621
+ //# sourceMappingURL=flusys-ng-iam-flusys-ng-iam-C9rdGS64.mjs.map