@flusys/ng-iam 7.0.2 → 8.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (23) hide show
  1. package/fesm2022/{flusys-ng-iam-action-form-page.component-Ci56tFEu.mjs → flusys-ng-iam-action-form-page.component-O7XSRAVo.mjs} +18 -15
  2. package/fesm2022/flusys-ng-iam-action-form-page.component-O7XSRAVo.mjs.map +1 -0
  3. package/fesm2022/{flusys-ng-iam-action-list-page.component-BRi_CpGl.mjs → flusys-ng-iam-action-list-page.component-DfRFkfPh.mjs} +18 -10
  4. package/fesm2022/flusys-ng-iam-action-list-page.component-DfRFkfPh.mjs.map +1 -0
  5. package/fesm2022/{flusys-ng-iam-flusys-ng-iam-BEAhj9ma.mjs → flusys-ng-iam-flusys-ng-iam--WniMPhV.mjs} +123 -168
  6. package/fesm2022/flusys-ng-iam-flusys-ng-iam--WniMPhV.mjs.map +1 -0
  7. package/fesm2022/{flusys-ng-iam-iam-container.component-D0m8u6nu.mjs → flusys-ng-iam-iam-container.component-XBoIeQ0t.mjs} +4 -4
  8. package/fesm2022/{flusys-ng-iam-iam-container.component-D0m8u6nu.mjs.map → flusys-ng-iam-iam-container.component-XBoIeQ0t.mjs.map} +1 -1
  9. package/fesm2022/{flusys-ng-iam-permission-page.component-CVaxwwcS.mjs → flusys-ng-iam-permission-page.component-DhfA39qe.mjs} +12 -11
  10. package/fesm2022/flusys-ng-iam-permission-page.component-DhfA39qe.mjs.map +1 -0
  11. package/fesm2022/{flusys-ng-iam-role-form-page.component-ByMbnQ53.mjs → flusys-ng-iam-role-form-page.component-BIgs_ePw.mjs} +20 -14
  12. package/fesm2022/flusys-ng-iam-role-form-page.component-BIgs_ePw.mjs.map +1 -0
  13. package/fesm2022/{flusys-ng-iam-role-list-page.component-BCtoWvFQ.mjs → flusys-ng-iam-role-list-page.component-CvJrtElJ.mjs} +17 -10
  14. package/fesm2022/flusys-ng-iam-role-list-page.component-CvJrtElJ.mjs.map +1 -0
  15. package/fesm2022/flusys-ng-iam.mjs +1 -1
  16. package/package.json +5 -5
  17. package/types/flusys-ng-iam.d.ts +4 -71
  18. package/fesm2022/flusys-ng-iam-action-form-page.component-Ci56tFEu.mjs.map +0 -1
  19. package/fesm2022/flusys-ng-iam-action-list-page.component-BRi_CpGl.mjs.map +0 -1
  20. package/fesm2022/flusys-ng-iam-flusys-ng-iam-BEAhj9ma.mjs.map +0 -1
  21. package/fesm2022/flusys-ng-iam-permission-page.component-CVaxwwcS.mjs.map +0 -1
  22. package/fesm2022/flusys-ng-iam-role-form-page.component-ByMbnQ53.mjs.map +0 -1
  23. package/fesm2022/flusys-ng-iam-role-list-page.component-BCtoWvFQ.mjs.map +0 -1
@@ -1,15 +1,13 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Injectable, inject, signal, input, output, effect, Component, computed, DestroyRef, viewChild } from '@angular/core';
3
- import { ApiResourceService, TranslateService, PermissionValidatorService, AngularModule, TranslatePipe, ROLE_ACTION_PERMISSIONS, HasPermissionDirective, COMPANY_ACTION_PERMISSIONS, COMPANY_API_PROVIDER, USER_ROLE_PERMISSIONS, USER_PERMISSION_PROVIDER, UserSelectComponent, USER_ACTION_PERMISSIONS, PROFILE_PERMISSION_PROVIDER, ACTION_PERMISSIONS, ROLE_PERMISSIONS, permissionGuard, anyPermissionGuard, resolveTranslationModule, SHARED_MESSAGES } from '@flusys/ng-shared';
2
+ import { Service, inject, signal, input, output, effect, Component, computed, DestroyRef, viewChild } from '@angular/core';
3
+ import { ApiResourceService, TranslateService, PermissionValidatorService, TranslatePipe, ROLE_ACTION_PERMISSIONS, HasPermissionDirective, COMPANY_ACTION_PERMISSIONS, COMPANY_API_PROVIDER, USER_ROLE_PERMISSIONS, USER_PERMISSION_PROVIDER, UserSelectComponent, USER_ACTION_PERMISSIONS, PROFILE_PERMISSION_PROVIDER, ACTION_PERMISSIONS, ROLE_PERMISSIONS, permissionGuard, anyPermissionGuard, resolveTranslationModule, SHARED_MESSAGES } from '@flusys/ng-shared';
4
4
  import { APP_CONFIG, getServiceUrl, BaseApiService, isCompanyFeatureEnabled, getPermissionMode } from '@flusys/ng-core';
5
- import * as i2 from '@flusys/ng-ui';
6
- import { ConfirmationService, MessageService, UiModule } from '@flusys/ng-ui';
5
+ import { ConfirmationService, MessageService, FButtonDirective, SelectComponent, TooltipDirective, UiIconComponent, CheckboxComponent, TagComponent, TreeTableComponent, TreeTableTogglerComponent, TableComponent } from '@flusys/ng-ui';
7
6
  import { HttpClient } from '@angular/common/http';
8
7
  import { of, firstValueFrom, map as map$1 } from 'rxjs';
9
8
  import { tap, catchError, map } from 'rxjs/operators';
10
- import * as i1 from '@angular/common';
11
- import { CommonModule } from '@angular/common';
12
- import * as i1$1 from '@angular/forms';
9
+ import { NgTemplateOutlet } from '@angular/common';
10
+ import * as i1 from '@angular/forms';
13
11
  import { FormsModule } from '@angular/forms';
14
12
  import { LAYOUT_AUTH_STATE } from '@flusys/ng-layout';
15
13
 
@@ -239,12 +237,11 @@ class RoleApiService extends ApiResourceService {
239
237
  constructor() {
240
238
  super('roles', 'iam');
241
239
  }
242
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: RoleApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
243
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: RoleApiService, providedIn: 'root' });
240
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: RoleApiService, deps: [], target: i0.ɵɵFactoryTarget.Service });
241
+ static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.5", ngImport: i0, type: RoleApiService });
244
242
  }
245
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: RoleApiService, decorators: [{
246
- type: Injectable,
247
- args: [{ providedIn: 'root' }]
243
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: RoleApiService, decorators: [{
244
+ type: Service
248
245
  }], ctorParameters: () => [] });
249
246
 
250
247
  class ActionApiService extends ApiResourceService {
@@ -269,12 +266,11 @@ class ActionApiService extends ApiResourceService {
269
266
  const iamBaseUrl = getServiceUrl(this.appConfig, 'iam');
270
267
  return this.http.post(`${iamBaseUrl}/actions/tree`, body);
271
268
  }
272
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: ActionApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
273
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: ActionApiService, providedIn: 'root' });
269
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: ActionApiService, deps: [], target: i0.ɵɵFactoryTarget.Service });
270
+ static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.5", ngImport: i0, type: ActionApiService });
274
271
  }
275
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: ActionApiService, decorators: [{
276
- type: Injectable,
277
- args: [{ providedIn: 'root' }]
272
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: ActionApiService, decorators: [{
273
+ type: Service
278
274
  }], ctorParameters: () => [] });
279
275
 
280
276
  function extractRequiredActionIds(logic) {
@@ -806,12 +802,11 @@ class ActionPermissionLogicService {
806
802
  }
807
803
  return `${indent}${this.t('iam.logic.invalid')}`;
808
804
  }
809
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: ActionPermissionLogicService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
810
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: ActionPermissionLogicService, providedIn: 'root' });
805
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: ActionPermissionLogicService, deps: [], target: i0.ɵɵFactoryTarget.Service });
806
+ static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.5", ngImport: i0, type: ActionPermissionLogicService });
811
807
  }
812
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: ActionPermissionLogicService, decorators: [{
813
- type: Injectable,
814
- args: [{ providedIn: 'root' }]
808
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: ActionPermissionLogicService, decorators: [{
809
+ type: Service
815
810
  }] });
816
811
 
817
812
  class PermissionApiService extends BaseApiService {
@@ -850,12 +845,11 @@ class PermissionApiService extends BaseApiService {
850
845
  getMyActions() {
851
846
  return this.http.post(this.getUrl('permissions/my-actions'), {});
852
847
  }
853
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: PermissionApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
854
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: PermissionApiService, providedIn: 'root' });
848
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: PermissionApiService, deps: [], target: i0.ɵɵFactoryTarget.Service });
849
+ static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.5", ngImport: i0, type: PermissionApiService });
855
850
  }
856
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: PermissionApiService, decorators: [{
857
- type: Injectable,
858
- args: [{ providedIn: 'root' }]
851
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: PermissionApiService, decorators: [{
852
+ type: Service
859
853
  }], ctorParameters: () => [] });
860
854
 
861
855
  /**
@@ -877,14 +871,11 @@ class MyPermissionsApiService {
877
871
  getMyPermissions(dto = {}) {
878
872
  return this.http.post(`${this.baseUrl}/my-permissions`, dto);
879
873
  }
880
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: MyPermissionsApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
881
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: MyPermissionsApiService, providedIn: 'root' });
874
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: MyPermissionsApiService, deps: [], target: i0.ɵɵFactoryTarget.Service });
875
+ static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.5", ngImport: i0, type: MyPermissionsApiService });
882
876
  }
883
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: MyPermissionsApiService, decorators: [{
884
- type: Injectable,
885
- args: [{
886
- providedIn: 'root',
887
- }]
877
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: MyPermissionsApiService, decorators: [{
878
+ type: Service
888
879
  }] });
889
880
 
890
881
  class PermissionStateService {
@@ -913,12 +904,11 @@ class PermissionStateService {
913
904
  isLoaded() {
914
905
  return this._permissions() !== null && this.permissionValidator.isLoaded();
915
906
  }
916
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: PermissionStateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
917
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: PermissionStateService, providedIn: 'root' });
907
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: PermissionStateService, deps: [], target: i0.ɵɵFactoryTarget.Service });
908
+ static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.5", ngImport: i0, type: PermissionStateService });
918
909
  }
919
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: PermissionStateService, decorators: [{
920
- type: Injectable,
921
- args: [{ providedIn: 'root' }]
910
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: PermissionStateService, decorators: [{
911
+ type: Service
922
912
  }] });
923
913
 
924
914
  // Role services
@@ -948,14 +938,12 @@ function createGroupNode(operator = 'AND') {
948
938
  function createActionNode(actionId = '') {
949
939
  return { id: crypto.randomUUID(), type: 'action', actionId };
950
940
  }
951
- /** Visual builder for AND/OR permission logic trees */
952
941
  class LogicBuilderComponent {
953
942
  logic = input(null, /* @ts-ignore */
954
943
  ...(ngDevMode ? [{ debugName: "logic" }] : /* istanbul ignore next */ []));
955
944
  actions = input([], /* @ts-ignore */
956
945
  ...(ngDevMode ? [{ debugName: "actions" }] : /* istanbul ignore next */ []));
957
946
  logicChange = output();
958
- /** Internal builder tree state (private writable + public readonly pattern) */
959
947
  _builderTree = signal(null, /* @ts-ignore */
960
948
  ...(ngDevMode ? [{ debugName: "_builderTree" }] : /* istanbul ignore next */ []));
961
949
  builderLogic = this._builderTree.asReadonly();
@@ -1003,14 +991,12 @@ class LogicBuilderComponent {
1003
991
  updateActionId(nodeId, actionId) {
1004
992
  this.updateNode(nodeId, (node) => ({ ...node, actionId }));
1005
993
  }
1006
- /** Updates a node in the tree and emits the change */
1007
994
  updateNode(nodeId, updater) {
1008
995
  const tree = this._builderTree();
1009
996
  if (!tree)
1010
997
  return;
1011
998
  this.updateTreeAndEmit(this.updateNodeInTree(tree, nodeId, updater));
1012
999
  }
1013
- /** Sets the tree and emits the change */
1014
1000
  updateTreeAndEmit(tree) {
1015
1001
  this._builderTree.set(tree);
1016
1002
  this.logicChange.emit(toLogicNode(tree));
@@ -1035,8 +1021,8 @@ class LogicBuilderComponent {
1035
1021
  .map((child) => this.removeNodeFromTree(child, targetId)),
1036
1022
  };
1037
1023
  }
1038
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: LogicBuilderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1039
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: LogicBuilderComponent, isStandalone: true, selector: "lib-logic-builder", inputs: { logic: { classPropertyName: "logic", publicName: "logic", isSignal: true, isRequired: false, transformFunction: null }, actions: { classPropertyName: "actions", publicName: "actions", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { logicChange: "logicChange" }, ngImport: i0, template: `
1024
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: LogicBuilderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1025
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.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: `
1040
1026
  <div class="logic-builder">
1041
1027
  <div class="flex justify-between items-center mb-3">
1042
1028
  <h4 class="text-sm font-semibold m-0">
@@ -1074,10 +1060,8 @@ class LogicBuilderComponent {
1074
1060
  <!-- Root Node -->
1075
1061
  <div class="text-sm bg-surface-0 dark:bg-surface-900 rounded border border-surface">
1076
1062
  <ng-container
1077
- *ngTemplateOutlet="
1078
- nodeTemplate;
1079
- context: { $implicit: builderLogic()!, depth: 0 }
1080
- "
1063
+ [ngTemplateOutlet]="nodeTemplate"
1064
+ [ngTemplateOutletContext]="{ $implicit: builderLogic()!, depth: 0 }"
1081
1065
  ></ng-container>
1082
1066
  </div>
1083
1067
  </div>
@@ -1156,10 +1140,8 @@ class LogicBuilderComponent {
1156
1140
  <div class="ml-5 mt-2 pl-3 border-l-2 border-surface">
1157
1141
  @for (child of node.children; track child.id) {
1158
1142
  <ng-container
1159
- *ngTemplateOutlet="
1160
- nodeTemplate;
1161
- context: { $implicit: child, depth: depth + 1 }
1162
- "
1143
+ [ngTemplateOutlet]="nodeTemplate"
1144
+ [ngTemplateOutletContext]="{ $implicit: child, depth: depth + 1 }"
1163
1145
  ></ng-container>
1164
1146
  }
1165
1147
  </div>
@@ -1198,11 +1180,19 @@ class LogicBuilderComponent {
1198
1180
  }
1199
1181
  </div>
1200
1182
  </ng-template>
1201
- `, isInline: true, styles: [":host{display:block}.node-type{display:inline-flex;align-items:center;padding:.25rem .5rem;border-radius:.25rem;font-weight:600;font-size:.75rem;text-transform:uppercase}.node-type.group{background-color:var(--f-blue-100, #dbeafe);color:var(--f-blue-700, #1e40af)}.node-type.action{background-color:var(--f-green-100, #d1fae5);color:var(--f-green-700, #065f46)}:host-context(.app-dark) .node-type.group{background-color:#3b82f633;color:var(--f-blue-400, #60a5fa)}:host-context(.app-dark) .node-type.action{background-color:#22c55e33;color:var(--f-green-400, #4ade80)}.operator-badge{display:inline-flex;align-items:center;padding:.125rem .5rem;border-radius:9999px;font-weight:600;font-size:.75rem;cursor:pointer;transition:opacity .2s}.operator-badge.and{background-color:var(--f-yellow-100, #fef3c7);color:var(--f-yellow-700, #92400e)}.operator-badge.or{background-color:var(--f-indigo-100, #e0e7ff);color:var(--f-indigo-700, #3730a3)}:host-context(.app-dark) .operator-badge.and{background-color:#eab30833;color:var(--f-yellow-400, #facc15)}:host-context(.app-dark) .operator-badge.or{background-color:#6366f133;color:var(--f-indigo-400, #818cf8)}.operator-badge:hover{opacity:.8}.action-select{background-color:var(--f-surface-0, #ffffff);color:var(--f-text-color, #1f2937)}:host-context(.app-dark) .action-select{background-color:var(--f-surface-900, #1f2937);color:var(--f-text-color, #f9fafb)}.action-select:focus{outline:none;border-color:var(--f-primary-color, #3b82f6)}\n"], dependencies: [{ kind: "ngmodule", type: AngularModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: UiModule }, { kind: "directive", type: i2.FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "variant", "rounded", "raised", "fluid", "disabled", "loading", "loadingIcon", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "component", type: i2.SelectComponent, selector: "f-select", inputs: ["options", "optionLabel", "optionValue", "placeholder", "disabled", "filter", "filterBy", "filterMatchMode", "filterLocale", "filterPlaceholder", "resetFilterOnHide", "autofocusFilter", "emptyMessage", "emptyFilterMessage", "showClear", "loading", "loadingIcon", "dropdownIcon", "clearIcon", "inputId", "invalid", "touched", "styleClass", "style", "appendTo", "editable", "readonly", "autofocus", "checkmark", "group", "optionGroupLabel", "optionGroupChildren", "virtualScroll", "virtualScrollItemSize", "lazy"], outputs: ["onFilter", "onChange", "onShow", "onHide", "onBlur", "onFocus", "onClear", "onLazyLoad"] }, { kind: "directive", type: i2.TooltipDirective, selector: "[fTooltip]", inputs: ["fTooltip", "tooltipPosition", "positionStyle", "tooltipStyleClass", "disabled", "tooltipEvent", "showDelay", "hideDelay", "life", "autoHide", "positionTop", "positionLeft", "escape"] }, { kind: "component", type: i2.UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill", "severity"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
1183
+ `, isInline: true, styles: [":host{display:block}.node-type{display:inline-flex;align-items:center;padding:.25rem .5rem;border-radius:.25rem;font-weight:600;font-size:.75rem;text-transform:uppercase}.node-type.group{background-color:var(--f-blue-100, #dbeafe);color:var(--f-blue-700, #1e40af)}.node-type.action{background-color:var(--f-green-100, #d1fae5);color:var(--f-green-700, #065f46)}:host-context(.app-dark) .node-type.group{background-color:#3b82f633;color:var(--f-blue-400, #60a5fa)}:host-context(.app-dark) .node-type.action{background-color:#22c55e33;color:var(--f-green-400, #4ade80)}.operator-badge{display:inline-flex;align-items:center;padding:.125rem .5rem;border-radius:9999px;font-weight:600;font-size:.75rem;cursor:pointer;transition:opacity .2s}.operator-badge.and{background-color:var(--f-yellow-100, #fef3c7);color:var(--f-yellow-700, #92400e)}.operator-badge.or{background-color:var(--f-indigo-100, #e0e7ff);color:var(--f-indigo-700, #3730a3)}:host-context(.app-dark) .operator-badge.and{background-color:#eab30833;color:var(--f-yellow-400, #facc15)}:host-context(.app-dark) .operator-badge.or{background-color:#6366f133;color:var(--f-indigo-400, #818cf8)}.operator-badge:hover{opacity:.8}.action-select{background-color:var(--f-surface-0, #ffffff);color:var(--f-text-color, #1f2937)}:host-context(.app-dark) .action-select{background-color:var(--f-surface-900, #1f2937);color:var(--f-text-color, #f9fafb)}.action-select:focus{outline:none;border-color:var(--f-primary-color, #3b82f6)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "variant", "rounded", "raised", "fluid", "disabled", "loading", "loadingIcon", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "component", type: SelectComponent, selector: "f-select", inputs: ["options", "optionLabel", "optionValue", "placeholder", "disabled", "filter", "filterBy", "filterMatchMode", "filterLocale", "filterPlaceholder", "resetFilterOnHide", "autofocusFilter", "emptyMessage", "emptyFilterMessage", "showClear", "loading", "loadingIcon", "dropdownIcon", "clearIcon", "inputId", "invalid", "touched", "styleClass", "style", "appendTo", "editable", "readonly", "autofocus", "checkmark", "group", "optionGroupLabel", "optionGroupChildren", "virtualScroll", "virtualScrollItemSize", "lazy"], outputs: ["onFilter", "onChange", "onShow", "onHide", "onBlur", "onFocus", "onClear", "onLazyLoad"] }, { kind: "directive", type: TooltipDirective, selector: "[fTooltip]", inputs: ["fTooltip", "tooltipPosition", "positionStyle", "tooltipStyleClass", "disabled", "tooltipEvent", "showDelay", "hideDelay", "life", "autoHide", "positionTop", "positionLeft", "escape"] }, { kind: "component", type: UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill", "severity"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
1202
1184
  }
1203
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: LogicBuilderComponent, decorators: [{
1185
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: LogicBuilderComponent, decorators: [{
1204
1186
  type: Component,
1205
- args: [{ selector: 'lib-logic-builder', imports: [AngularModule, UiModule, TranslatePipe], template: `
1187
+ args: [{ selector: 'lib-logic-builder', imports: [
1188
+ FormsModule,
1189
+ NgTemplateOutlet,
1190
+ FButtonDirective,
1191
+ SelectComponent,
1192
+ TooltipDirective,
1193
+ UiIconComponent,
1194
+ TranslatePipe,
1195
+ ], template: `
1206
1196
  <div class="logic-builder">
1207
1197
  <div class="flex justify-between items-center mb-3">
1208
1198
  <h4 class="text-sm font-semibold m-0">
@@ -1240,10 +1230,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
1240
1230
  <!-- Root Node -->
1241
1231
  <div class="text-sm bg-surface-0 dark:bg-surface-900 rounded border border-surface">
1242
1232
  <ng-container
1243
- *ngTemplateOutlet="
1244
- nodeTemplate;
1245
- context: { $implicit: builderLogic()!, depth: 0 }
1246
- "
1233
+ [ngTemplateOutlet]="nodeTemplate"
1234
+ [ngTemplateOutletContext]="{ $implicit: builderLogic()!, depth: 0 }"
1247
1235
  ></ng-container>
1248
1236
  </div>
1249
1237
  </div>
@@ -1322,10 +1310,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
1322
1310
  <div class="ml-5 mt-2 pl-3 border-l-2 border-surface">
1323
1311
  @for (child of node.children; track child.id) {
1324
1312
  <ng-container
1325
- *ngTemplateOutlet="
1326
- nodeTemplate;
1327
- context: { $implicit: child, depth: depth + 1 }
1328
- "
1313
+ [ngTemplateOutlet]="nodeTemplate"
1314
+ [ngTemplateOutletContext]="{ $implicit: child, depth: depth + 1 }"
1329
1315
  ></ng-container>
1330
1316
  }
1331
1317
  </div>
@@ -1705,8 +1691,8 @@ class RoleActionSelectorComponent extends BaseActionSelectorComponent {
1705
1691
  this.saving.set(false);
1706
1692
  }
1707
1693
  }
1708
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: RoleActionSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1709
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: RoleActionSelectorComponent, isStandalone: true, selector: "flusys-role-action-selector", viewQueries: [{ propertyName: "roleSelectRef", first: true, predicate: ["roleSelect"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: `
1694
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: RoleActionSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1695
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: RoleActionSelectorComponent, isStandalone: true, selector: "flusys-role-action-selector", viewQueries: [{ propertyName: "roleSelectRef", first: true, predicate: ["roleSelect"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: `
1710
1696
  <div class="role-action-selector">
1711
1697
  <div class="surface-card p-4 rounded-border mb-4 shadow-sm">
1712
1698
  <div class="grid grid-cols-1 sm:grid-cols-2 gap-5">
@@ -1980,11 +1966,23 @@ class RoleActionSelectorComponent extends BaseActionSelectorComponent {
1980
1966
  }
1981
1967
  }
1982
1968
  </div>
1983
- `, isInline: true, styles: [":host{display:block}.empty-state-icon{width:3rem;height:3rem;border-radius:9999px;display:flex;align-items:center;justify-content:center;background-color:var(--f-primary-50, rgba(59, 130, 246, .08))}:host-context(.app-dark) .empty-state-icon{background-color:#60a5fa1f}.validation-warning{background-color:var(--f-yellow-50, #fefce8);border-left:4px solid var(--f-yellow-500, #eab308);color:var(--f-yellow-700, #a16207)}:host-context(.app-dark) .validation-warning{background-color:#eab3081a;color:var(--f-yellow-400, #facc15)}:host ::ng-deep tr.highlight-warning{background-color:var(--f-red-50, rgba(239, 68, 68, .1))!important}:host-context(.app-dark) ::ng-deep tr.highlight-warning{background-color:#ef444426!important}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: UiModule }, { kind: "directive", type: i2.FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "variant", "rounded", "raised", "fluid", "disabled", "loading", "loadingIcon", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "component", type: i2.TagComponent, selector: "f-tag", inputs: ["value", "severity", "icon", "rounded", "color", "styleClass", "style"] }, { kind: "component", type: i2.CheckboxComponent, selector: "f-checkbox", inputs: ["label", "binary", "disabled", "readonly", "inputId", "invalid", "indeterminate", "variant", "size", "touched", "styleClass", "style", "checked"], outputs: ["onChange", "onBlur", "touch", "checkedChange"] }, { kind: "component", type: i2.SelectComponent, selector: "f-select", inputs: ["options", "optionLabel", "optionValue", "placeholder", "disabled", "filter", "filterBy", "filterMatchMode", "filterLocale", "filterPlaceholder", "resetFilterOnHide", "autofocusFilter", "emptyMessage", "emptyFilterMessage", "showClear", "loading", "loadingIcon", "dropdownIcon", "clearIcon", "inputId", "invalid", "touched", "styleClass", "style", "appendTo", "editable", "readonly", "autofocus", "checkmark", "group", "optionGroupLabel", "optionGroupChildren", "virtualScroll", "virtualScrollItemSize", "lazy"], outputs: ["onFilter", "onChange", "onShow", "onHide", "onBlur", "onFocus", "onClear", "onLazyLoad"] }, { kind: "directive", type: i2.TooltipDirective, selector: "[fTooltip]", inputs: ["fTooltip", "tooltipPosition", "positionStyle", "tooltipStyleClass", "disabled", "tooltipEvent", "showDelay", "hideDelay", "life", "autoHide", "positionTop", "positionLeft", "escape"] }, { kind: "component", type: i2.TreeTableComponent, selector: "f-treetable", inputs: ["value", "loading", "dataKey", "styleClass", "tableStyle", "scrollable", "scrollHeight", "resizableColumns", "lazy", "totalRecords", "paginator", "first", "rows", "rowsPerPageOptions", "showCurrentPageReport", "currentPageReportTemplate", "globalFilterFields", "filterDelay", "selectionMode", "sortMode", "virtualScroll", "virtualScrollItemSize", "sortField", "sortOrder", "multiSortMeta", "filters", "selection", "contextMenuSelection"], outputs: ["sortFieldChange", "sortOrderChange", "multiSortMetaChange", "filtersChange", "selectionChange", "contextMenuSelectionChange", "onLazyLoad", "onSort", "onFilter", "onNodeExpand", "onNodeCollapse", "onNodeSelect", "onNodeUnselect", "onRowContextMenu"] }, { kind: "component", type: i2.TreeTableTogglerComponent, selector: "f-treetabletoggler", inputs: ["rowNode"] }, { kind: "component", type: i2.UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill", "severity"] }, { kind: "directive", type: HasPermissionDirective, selector: "[hasPermission]", inputs: ["hasPermission"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
1969
+ `, isInline: true, styles: [":host{display:block}.empty-state-icon{width:3rem;height:3rem;border-radius:9999px;display:flex;align-items:center;justify-content:center;background-color:var(--f-primary-50, rgba(59, 130, 246, .08))}:host-context(.app-dark) .empty-state-icon{background-color:#60a5fa1f}.validation-warning{background-color:var(--f-yellow-50, #fefce8);border-left:4px solid var(--f-yellow-500, #eab308);color:var(--f-yellow-700, #a16207)}:host-context(.app-dark) .validation-warning{background-color:#eab3081a;color:var(--f-yellow-400, #facc15)}:host ::ng-deep tr.highlight-warning{background-color:var(--f-red-50, rgba(239, 68, 68, .1))!important}:host-context(.app-dark) ::ng-deep tr.highlight-warning{background-color:#ef444426!important}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: CheckboxComponent, selector: "f-checkbox", inputs: ["label", "binary", "disabled", "readonly", "inputId", "invalid", "indeterminate", "variant", "size", "touched", "styleClass", "style", "checked"], outputs: ["onChange", "onBlur", "touch", "checkedChange"] }, { kind: "directive", type: FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "variant", "rounded", "raised", "fluid", "disabled", "loading", "loadingIcon", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "component", type: SelectComponent, selector: "f-select", inputs: ["options", "optionLabel", "optionValue", "placeholder", "disabled", "filter", "filterBy", "filterMatchMode", "filterLocale", "filterPlaceholder", "resetFilterOnHide", "autofocusFilter", "emptyMessage", "emptyFilterMessage", "showClear", "loading", "loadingIcon", "dropdownIcon", "clearIcon", "inputId", "invalid", "touched", "styleClass", "style", "appendTo", "editable", "readonly", "autofocus", "checkmark", "group", "optionGroupLabel", "optionGroupChildren", "virtualScroll", "virtualScrollItemSize", "lazy"], outputs: ["onFilter", "onChange", "onShow", "onHide", "onBlur", "onFocus", "onClear", "onLazyLoad"] }, { kind: "component", type: TagComponent, selector: "f-tag", inputs: ["value", "severity", "icon", "rounded", "color", "styleClass", "style"] }, { kind: "directive", type: TooltipDirective, selector: "[fTooltip]", inputs: ["fTooltip", "tooltipPosition", "positionStyle", "tooltipStyleClass", "disabled", "tooltipEvent", "showDelay", "hideDelay", "life", "autoHide", "positionTop", "positionLeft", "escape"] }, { kind: "component", type: TreeTableComponent, selector: "f-treetable", inputs: ["value", "loading", "dataKey", "styleClass", "tableStyle", "scrollable", "scrollHeight", "resizableColumns", "lazy", "totalRecords", "paginator", "first", "rows", "rowsPerPageOptions", "showCurrentPageReport", "currentPageReportTemplate", "globalFilterFields", "filterDelay", "selectionMode", "sortMode", "virtualScroll", "virtualScrollItemSize", "sortField", "sortOrder", "multiSortMeta", "filters", "selection", "contextMenuSelection"], outputs: ["sortFieldChange", "sortOrderChange", "multiSortMetaChange", "filtersChange", "selectionChange", "contextMenuSelectionChange", "onLazyLoad", "onSort", "onFilter", "onNodeExpand", "onNodeCollapse", "onNodeSelect", "onNodeUnselect", "onRowContextMenu"] }, { kind: "component", type: TreeTableTogglerComponent, selector: "f-treetabletoggler", inputs: ["rowNode"] }, { kind: "component", type: UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill", "severity"] }, { kind: "directive", type: HasPermissionDirective, selector: "[hasPermission]", inputs: ["hasPermission"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
1984
1970
  }
1985
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: RoleActionSelectorComponent, decorators: [{
1971
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: RoleActionSelectorComponent, decorators: [{
1986
1972
  type: Component,
1987
- args: [{ selector: 'flusys-role-action-selector', imports: [FormsModule, UiModule, HasPermissionDirective, TranslatePipe], template: `
1973
+ args: [{ selector: 'flusys-role-action-selector', imports: [
1974
+ FormsModule,
1975
+ CheckboxComponent,
1976
+ FButtonDirective,
1977
+ SelectComponent,
1978
+ TagComponent,
1979
+ TooltipDirective,
1980
+ TreeTableComponent,
1981
+ TreeTableTogglerComponent,
1982
+ UiIconComponent,
1983
+ HasPermissionDirective,
1984
+ TranslatePipe,
1985
+ ], template: `
1988
1986
  <div class="role-action-selector">
1989
1987
  <div class="surface-card p-4 rounded-border mb-4 shadow-sm">
1990
1988
  <div class="grid grid-cols-1 sm:grid-cols-2 gap-5">
@@ -2422,8 +2420,8 @@ class CompanyActionSelectorComponent extends BaseActionSelectorComponent {
2422
2420
  },
2423
2421
  });
2424
2422
  }
2425
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: CompanyActionSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2426
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: CompanyActionSelectorComponent, isStandalone: true, selector: "flusys-company-action-selector", viewQueries: [{ propertyName: "companySelectRef", first: true, predicate: ["companySelect"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: `
2423
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: CompanyActionSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2424
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: CompanyActionSelectorComponent, isStandalone: true, selector: "flusys-company-action-selector", viewQueries: [{ propertyName: "companySelectRef", first: true, predicate: ["companySelect"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: `
2427
2425
  <div class="company-action-selector">
2428
2426
  <div class="surface-card p-4 rounded-border mb-4 shadow-sm">
2429
2427
  <div class="grid grid-cols-1 sm:grid-cols-2 gap-5">
@@ -2690,11 +2688,23 @@ class CompanyActionSelectorComponent extends BaseActionSelectorComponent {
2690
2688
  }
2691
2689
  }
2692
2690
  </div>
2693
- `, isInline: true, styles: [":host{display:block}.empty-state-icon{width:3rem;height:3rem;border-radius:9999px;display:flex;align-items:center;justify-content:center;background-color:var(--f-primary-50, rgba(59, 130, 246, .08))}:host-context(.app-dark) .empty-state-icon{background-color:#60a5fa1f}.validation-warning{background-color:var(--f-yellow-50, #fefce8);border-left:4px solid var(--f-yellow-500, #eab308);color:var(--f-yellow-700, #a16207)}:host-context(.app-dark) .validation-warning{background-color:#eab3081a;color:var(--f-yellow-400, #facc15)}:host ::ng-deep tr.highlight-warning{background-color:var(--f-red-50, rgba(239, 68, 68, .1))!important}:host-context(.app-dark) ::ng-deep tr.highlight-warning{background-color:#ef444426!important}\n"], dependencies: [{ kind: "ngmodule", type: UiModule }, { kind: "directive", type: i2.FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "variant", "rounded", "raised", "fluid", "disabled", "loading", "loadingIcon", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "component", type: i2.TagComponent, selector: "f-tag", inputs: ["value", "severity", "icon", "rounded", "color", "styleClass", "style"] }, { kind: "component", type: i2.CheckboxComponent, selector: "f-checkbox", inputs: ["label", "binary", "disabled", "readonly", "inputId", "invalid", "indeterminate", "variant", "size", "touched", "styleClass", "style", "checked"], outputs: ["onChange", "onBlur", "touch", "checkedChange"] }, { kind: "component", type: i2.SelectComponent, selector: "f-select", inputs: ["options", "optionLabel", "optionValue", "placeholder", "disabled", "filter", "filterBy", "filterMatchMode", "filterLocale", "filterPlaceholder", "resetFilterOnHide", "autofocusFilter", "emptyMessage", "emptyFilterMessage", "showClear", "loading", "loadingIcon", "dropdownIcon", "clearIcon", "inputId", "invalid", "touched", "styleClass", "style", "appendTo", "editable", "readonly", "autofocus", "checkmark", "group", "optionGroupLabel", "optionGroupChildren", "virtualScroll", "virtualScrollItemSize", "lazy"], outputs: ["onFilter", "onChange", "onShow", "onHide", "onBlur", "onFocus", "onClear", "onLazyLoad"] }, { kind: "directive", type: i2.TooltipDirective, selector: "[fTooltip]", inputs: ["fTooltip", "tooltipPosition", "positionStyle", "tooltipStyleClass", "disabled", "tooltipEvent", "showDelay", "hideDelay", "life", "autoHide", "positionTop", "positionLeft", "escape"] }, { kind: "component", type: i2.TreeTableComponent, selector: "f-treetable", inputs: ["value", "loading", "dataKey", "styleClass", "tableStyle", "scrollable", "scrollHeight", "resizableColumns", "lazy", "totalRecords", "paginator", "first", "rows", "rowsPerPageOptions", "showCurrentPageReport", "currentPageReportTemplate", "globalFilterFields", "filterDelay", "selectionMode", "sortMode", "virtualScroll", "virtualScrollItemSize", "sortField", "sortOrder", "multiSortMeta", "filters", "selection", "contextMenuSelection"], outputs: ["sortFieldChange", "sortOrderChange", "multiSortMetaChange", "filtersChange", "selectionChange", "contextMenuSelectionChange", "onLazyLoad", "onSort", "onFilter", "onNodeExpand", "onNodeCollapse", "onNodeSelect", "onNodeUnselect", "onRowContextMenu"] }, { kind: "component", type: i2.TreeTableTogglerComponent, selector: "f-treetabletoggler", inputs: ["rowNode"] }, { kind: "component", type: i2.UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill", "severity"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: HasPermissionDirective, selector: "[hasPermission]", inputs: ["hasPermission"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
2691
+ `, isInline: true, styles: [":host{display:block}.empty-state-icon{width:3rem;height:3rem;border-radius:9999px;display:flex;align-items:center;justify-content:center;background-color:var(--f-primary-50, rgba(59, 130, 246, .08))}:host-context(.app-dark) .empty-state-icon{background-color:#60a5fa1f}.validation-warning{background-color:var(--f-yellow-50, #fefce8);border-left:4px solid var(--f-yellow-500, #eab308);color:var(--f-yellow-700, #a16207)}:host-context(.app-dark) .validation-warning{background-color:#eab3081a;color:var(--f-yellow-400, #facc15)}:host ::ng-deep tr.highlight-warning{background-color:var(--f-red-50, rgba(239, 68, 68, .1))!important}:host-context(.app-dark) ::ng-deep tr.highlight-warning{background-color:#ef444426!important}\n"], dependencies: [{ kind: "component", type: CheckboxComponent, selector: "f-checkbox", inputs: ["label", "binary", "disabled", "readonly", "inputId", "invalid", "indeterminate", "variant", "size", "touched", "styleClass", "style", "checked"], outputs: ["onChange", "onBlur", "touch", "checkedChange"] }, { kind: "directive", type: FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "variant", "rounded", "raised", "fluid", "disabled", "loading", "loadingIcon", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "component", type: SelectComponent, selector: "f-select", inputs: ["options", "optionLabel", "optionValue", "placeholder", "disabled", "filter", "filterBy", "filterMatchMode", "filterLocale", "filterPlaceholder", "resetFilterOnHide", "autofocusFilter", "emptyMessage", "emptyFilterMessage", "showClear", "loading", "loadingIcon", "dropdownIcon", "clearIcon", "inputId", "invalid", "touched", "styleClass", "style", "appendTo", "editable", "readonly", "autofocus", "checkmark", "group", "optionGroupLabel", "optionGroupChildren", "virtualScroll", "virtualScrollItemSize", "lazy"], outputs: ["onFilter", "onChange", "onShow", "onHide", "onBlur", "onFocus", "onClear", "onLazyLoad"] }, { kind: "component", type: TagComponent, selector: "f-tag", inputs: ["value", "severity", "icon", "rounded", "color", "styleClass", "style"] }, { kind: "directive", type: TooltipDirective, selector: "[fTooltip]", inputs: ["fTooltip", "tooltipPosition", "positionStyle", "tooltipStyleClass", "disabled", "tooltipEvent", "showDelay", "hideDelay", "life", "autoHide", "positionTop", "positionLeft", "escape"] }, { kind: "component", type: TreeTableComponent, selector: "f-treetable", inputs: ["value", "loading", "dataKey", "styleClass", "tableStyle", "scrollable", "scrollHeight", "resizableColumns", "lazy", "totalRecords", "paginator", "first", "rows", "rowsPerPageOptions", "showCurrentPageReport", "currentPageReportTemplate", "globalFilterFields", "filterDelay", "selectionMode", "sortMode", "virtualScroll", "virtualScrollItemSize", "sortField", "sortOrder", "multiSortMeta", "filters", "selection", "contextMenuSelection"], outputs: ["sortFieldChange", "sortOrderChange", "multiSortMetaChange", "filtersChange", "selectionChange", "contextMenuSelectionChange", "onLazyLoad", "onSort", "onFilter", "onNodeExpand", "onNodeCollapse", "onNodeSelect", "onNodeUnselect", "onRowContextMenu"] }, { kind: "component", type: TreeTableTogglerComponent, selector: "f-treetabletoggler", inputs: ["rowNode"] }, { kind: "component", type: UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill", "severity"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: HasPermissionDirective, selector: "[hasPermission]", inputs: ["hasPermission"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
2694
2692
  }
2695
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: CompanyActionSelectorComponent, decorators: [{
2693
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: CompanyActionSelectorComponent, decorators: [{
2696
2694
  type: Component,
2697
- args: [{ selector: 'flusys-company-action-selector', imports: [UiModule, FormsModule, HasPermissionDirective, TranslatePipe], template: `
2695
+ args: [{ selector: 'flusys-company-action-selector', imports: [
2696
+ CheckboxComponent,
2697
+ FButtonDirective,
2698
+ SelectComponent,
2699
+ TagComponent,
2700
+ TooltipDirective,
2701
+ TreeTableComponent,
2702
+ TreeTableTogglerComponent,
2703
+ UiIconComponent,
2704
+ FormsModule,
2705
+ HasPermissionDirective,
2706
+ TranslatePipe,
2707
+ ], template: `
2698
2708
  <div class="company-action-selector">
2699
2709
  <div class="surface-card p-4 rounded-border mb-4 shadow-sm">
2700
2710
  <div class="grid grid-cols-1 sm:grid-cols-2 gap-5">
@@ -2965,38 +2975,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
2965
2975
  }], ctorParameters: () => [], propDecorators: { companySelectRef: [{ type: i0.ViewChild, args: ['companySelect', { isSignal: true }] }] } });
2966
2976
 
2967
2977
  /**
2968
- * User-Role Selector Component
2969
- *
2970
- * Manages user role assignments with branch-level granularity.
2971
- *
2972
- * **Architecture:**
2973
- * - Presentation: DataTable for role list
2974
- * - Business Logic: Role assignment without dependency validation
2975
- * - State: Signals with computed dependencies
2976
- *
2977
- * **Core Features:**
2978
- * - User dropdown with async loading
2979
- * - Branch selector (if company feature enabled)
2980
- * - Role assignment management (add/remove)
2981
- * - Real-time change tracking
2982
- *
2983
- * **Granularity:**
2984
- * - Company-wide: branchId = undefined
2985
- * - Branch-specific: branchId = selected value
2986
- *
2987
- * **Performance:**
2988
- * - Computed signals for reactive updates
2989
- * - Branch filtering on company context change
2990
- *
2991
- * @example
2992
- * ```html
2993
- * <flusys-user-role-selector />
2994
- * ```
2978
+ * Manages user role assignments with branch-level granularity:
2979
+ * `branchId === undefined` means a company-wide assignment, a set value
2980
+ * scopes the assignment to that specific branch.
2995
2981
  */
2996
2982
  class UserRoleSelectorComponent {
2997
- // Permission constants for template
2998
2983
  USER_ROLE_PERMISSIONS = USER_ROLE_PERMISSIONS;
2999
- // Dependencies
3000
2984
  appConfig = inject(APP_CONFIG);
3001
2985
  companyContext = inject(LAYOUT_AUTH_STATE);
3002
2986
  userPermissionProvider = inject(USER_PERMISSION_PROVIDER);
@@ -3030,30 +3014,25 @@ class UserRoleSelectorComponent {
3030
3014
  }
3031
3015
  this.selectedUserId.set(userId);
3032
3016
  }
3033
- // State - User/Branch Selection
3034
3017
  selectedUserId = signal(null, /* @ts-ignore */
3035
3018
  ...(ngDevMode ? [{ debugName: "selectedUserId" }] : /* istanbul ignore next */ []));
3036
3019
  selectedBranchId = signal(undefined, /* @ts-ignore */
3037
3020
  ...(ngDevMode ? [{ debugName: "selectedBranchId" }] : /* istanbul ignore next */ []));
3038
3021
  branches = signal([], /* @ts-ignore */
3039
3022
  ...(ngDevMode ? [{ debugName: "branches" }] : /* istanbul ignore next */ []));
3040
- // State - Loading/Saving
3041
3023
  loading = signal(false, /* @ts-ignore */
3042
3024
  ...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
3043
3025
  saving = signal(false, /* @ts-ignore */
3044
3026
  ...(ngDevMode ? [{ debugName: "saving" }] : /* istanbul ignore next */ []));
3045
- // State - Roles (Business Logic)
3046
3027
  _roles = signal([], /* @ts-ignore */
3047
3028
  ...(ngDevMode ? [{ debugName: "_roles" }] : /* istanbul ignore next */ []));
3048
3029
  roles = this._roles.asReadonly();
3049
- // State - Selection
3050
3030
  _selectionMap = signal({}, /* @ts-ignore */
3051
3031
  ...(ngDevMode ? [{ debugName: "_selectionMap" }] : /* istanbul ignore next */ []));
3052
3032
  selectionMap = this._selectionMap.asReadonly();
3053
3033
  _initialSelection = signal({}, /* @ts-ignore */
3054
3034
  ...(ngDevMode ? [{ debugName: "_initialSelection" }] : /* istanbul ignore next */ []));
3055
3035
  initialSelection = this._initialSelection.asReadonly();
3056
- // Computed - UI Flags
3057
3036
  showBranchSelector = computed(() => isCompanyFeatureEnabled(this.appConfig) === true, /* @ts-ignore */
3058
3037
  ...(ngDevMode ? [{ debugName: "showBranchSelector" }] : /* istanbul ignore next */ []));
3059
3038
  filteredBranches = computed(() => {
@@ -3063,7 +3042,6 @@ class UserRoleSelectorComponent {
3063
3042
  return this.branches().filter((b) => b.companyId === currentCompanyId);
3064
3043
  }, /* @ts-ignore */
3065
3044
  ...(ngDevMode ? [{ debugName: "filteredBranches" }] : /* istanbul ignore next */ []));
3066
- // Computed - Selection State
3067
3045
  allSelected = computed(() => {
3068
3046
  const selMap = this.selectionMap();
3069
3047
  const total = this.roles().length;
@@ -3073,7 +3051,6 @@ class UserRoleSelectorComponent {
3073
3051
  return selected === total;
3074
3052
  }, /* @ts-ignore */
3075
3053
  ...(ngDevMode ? [{ debugName: "allSelected" }] : /* istanbul ignore next */ []));
3076
- // Computed - Change Detection
3077
3054
  hasChanges = computed(() => {
3078
3055
  const current = this.selectionMap();
3079
3056
  const initial = this.initialSelection();
@@ -3084,7 +3061,6 @@ class UserRoleSelectorComponent {
3084
3061
  return currentKeys.some((key) => current[key] !== initial[key]);
3085
3062
  }, /* @ts-ignore */
3086
3063
  ...(ngDevMode ? [{ debugName: "hasChanges" }] : /* istanbul ignore next */ []));
3087
- // Computed - Pending Changes
3088
3064
  pendingAdd = computed(() => {
3089
3065
  const current = this.selectionMap();
3090
3066
  const initial = this.initialSelection();
@@ -3099,13 +3075,11 @@ class UserRoleSelectorComponent {
3099
3075
  return allRoles.filter((role) => !current[role.id] && initial[role.id]);
3100
3076
  }, /* @ts-ignore */
3101
3077
  ...(ngDevMode ? [{ debugName: "pendingRemove" }] : /* istanbul ignore next */ []));
3102
- // Computed - Save Button State
3103
3078
  canSave = computed(() => {
3104
3079
  return this.hasChanges() && !this.saving();
3105
3080
  }, /* @ts-ignore */
3106
3081
  ...(ngDevMode ? [{ debugName: "canSave" }] : /* istanbul ignore next */ []));
3107
3082
  constructor() {
3108
- // Effect: Load user branches and data when user changes
3109
3083
  effect(() => {
3110
3084
  const userId = this.selectedUserId();
3111
3085
  if (userId) {
@@ -3120,7 +3094,6 @@ class UserRoleSelectorComponent {
3120
3094
  this.resetState();
3121
3095
  }
3122
3096
  });
3123
- // Effect: Reload data when branch changes
3124
3097
  effect(() => {
3125
3098
  const userId = this.selectedUserId();
3126
3099
  const branchId = this.selectedBranchId();
@@ -3131,9 +3104,6 @@ class UserRoleSelectorComponent {
3131
3104
  }
3132
3105
  });
3133
3106
  }
3134
- /**
3135
- * Load user's permitted branches
3136
- */
3137
3107
  async loadUserBranches(userId) {
3138
3108
  try {
3139
3109
  const companyId = this.companyContext.currentCompanyInfo()?.id || undefined;
@@ -3153,9 +3123,6 @@ class UserRoleSelectorComponent {
3153
3123
  // Error toast handled by global interceptor
3154
3124
  }
3155
3125
  }
3156
- /**
3157
- * Load roles and assignments for selected user
3158
- */
3159
3126
  async loadData() {
3160
3127
  const userId = this.selectedUserId();
3161
3128
  if (!userId)
@@ -3163,19 +3130,16 @@ class UserRoleSelectorComponent {
3163
3130
  const branchId = this.selectedBranchId();
3164
3131
  this.loading.set(true);
3165
3132
  try {
3166
- // Load all roles
3167
3133
  const rolesResponse = await this.roleApi.getAll({
3168
3134
  pagination: { currentPage: 0, pageSize: MAX_DROPDOWN_ITEMS },
3169
3135
  });
3170
3136
  const rolesList = rolesResponse?.data ?? [];
3171
3137
  this._roles.set(rolesList);
3172
- // Load existing user-role assignments
3173
3138
  const query = isCompanyFeatureEnabled(this.appConfig) && branchId
3174
3139
  ? { branchId }
3175
3140
  : undefined;
3176
3141
  const assignedResponse = await firstValueFrom(this.permissionApi.getUserRoles(userId, query));
3177
3142
  const assignedIds = new Set((assignedResponse?.data || []).map((r) => r.roleId));
3178
- // Build selection map
3179
3143
  const selMap = {};
3180
3144
  rolesList.forEach((role) => {
3181
3145
  selMap[role.id] = assignedIds.has(role.id);
@@ -3190,9 +3154,6 @@ class UserRoleSelectorComponent {
3190
3154
  this.loading.set(false);
3191
3155
  }
3192
3156
  }
3193
- /**
3194
- * Get tooltip for role checkbox
3195
- */
3196
3157
  getTooltip(role) {
3197
3158
  const selMap = this.selectionMap();
3198
3159
  const isCurrentlySelected = selMap[role.id];
@@ -3201,23 +3162,14 @@ class UserRoleSelectorComponent {
3201
3162
  }
3202
3163
  return `[${this.translate('shared.add')}] ${this.translate('iam.tooltip.click.to.assign.role.to.user')}`;
3203
3164
  }
3204
- /**
3205
- * Handle role checkbox toggle
3206
- */
3207
3165
  onRoleToggle(role, newValue) {
3208
3166
  const selMap = { ...this.selectionMap() };
3209
3167
  selMap[role.id] = newValue;
3210
3168
  this._selectionMap.set(selMap);
3211
3169
  }
3212
- /**
3213
- * Toggle all roles
3214
- */
3215
3170
  toggleAll() {
3216
3171
  this.setAllSelections(!this.allSelected());
3217
3172
  }
3218
- /**
3219
- * Set all role selections to a given value
3220
- */
3221
3173
  setAllSelections(value) {
3222
3174
  const selMap = {};
3223
3175
  this.roles().forEach((role) => {
@@ -3225,16 +3177,12 @@ class UserRoleSelectorComponent {
3225
3177
  });
3226
3178
  this._selectionMap.set(selMap);
3227
3179
  }
3228
- /**
3229
- * Save changes to backend
3230
- */
3231
3180
  async saveChanges() {
3232
3181
  const userId = this.selectedUserId();
3233
3182
  if (!userId)
3234
3183
  return;
3235
3184
  const branchId = this.selectedBranchId();
3236
3185
  const companyId = this.companyContext.currentCompanyInfo()?.id || undefined;
3237
- // Validate company context if feature enabled
3238
3186
  if (isCompanyFeatureEnabled(this.appConfig) && !companyId) {
3239
3187
  this.messageService.add({
3240
3188
  severity: 'warn',
@@ -3243,7 +3191,6 @@ class UserRoleSelectorComponent {
3243
3191
  });
3244
3192
  return;
3245
3193
  }
3246
- // Build payload
3247
3194
  const items = [];
3248
3195
  this.pendingAdd().forEach((role) => {
3249
3196
  items.push({ id: role.id, action: 'add' });
@@ -3272,7 +3219,6 @@ class UserRoleSelectorComponent {
3272
3219
  ? this.translate(response.messageKey, response.messageVariables)
3273
3220
  : response?.message,
3274
3221
  });
3275
- // Update baseline
3276
3222
  this._initialSelection.set({ ...this.selectionMap() });
3277
3223
  }
3278
3224
  catch {
@@ -3282,16 +3228,13 @@ class UserRoleSelectorComponent {
3282
3228
  this.saving.set(false);
3283
3229
  }
3284
3230
  }
3285
- /**
3286
- * Reset component state
3287
- */
3288
3231
  resetState() {
3289
3232
  this._roles.set([]);
3290
3233
  this._selectionMap.set({});
3291
3234
  this._initialSelection.set({});
3292
3235
  }
3293
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: UserRoleSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3294
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: UserRoleSelectorComponent, isStandalone: true, selector: "flusys-user-role-selector", viewQueries: [{ propertyName: "userSelectRef", first: true, predicate: ["userSelect"], descendants: true, isSignal: true }], ngImport: i0, template: `
3236
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: UserRoleSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3237
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: UserRoleSelectorComponent, isStandalone: true, selector: "flusys-user-role-selector", viewQueries: [{ propertyName: "userSelectRef", first: true, predicate: ["userSelect"], descendants: true, isSignal: true }], ngImport: i0, template: `
3295
3238
  <div class="user-role-selector">
3296
3239
  <!-- User and Branch Selectors -->
3297
3240
  <div class="surface-card p-4 rounded-border mb-4 shadow-sm">
@@ -3565,14 +3508,18 @@ class UserRoleSelectorComponent {
3565
3508
  }
3566
3509
  }
3567
3510
  </div>
3568
- `, isInline: true, styles: [":host{display:block}.empty-state-icon{width:3rem;height:3rem;border-radius:9999px;display:flex;align-items:center;justify-content:center;background-color:var(--f-primary-50, rgba(59, 130, 246, .08))}:host-context(.app-dark) .empty-state-icon{background-color:#60a5fa1f}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: UiModule }, { kind: "directive", type: i2.FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "variant", "rounded", "raised", "fluid", "disabled", "loading", "loadingIcon", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "component", type: i2.CheckboxComponent, selector: "f-checkbox", inputs: ["label", "binary", "disabled", "readonly", "inputId", "invalid", "indeterminate", "variant", "size", "touched", "styleClass", "style", "checked"], outputs: ["onChange", "onBlur", "touch", "checkedChange"] }, { kind: "component", type: i2.SelectComponent, selector: "f-select", inputs: ["options", "optionLabel", "optionValue", "placeholder", "disabled", "filter", "filterBy", "filterMatchMode", "filterLocale", "filterPlaceholder", "resetFilterOnHide", "autofocusFilter", "emptyMessage", "emptyFilterMessage", "showClear", "loading", "loadingIcon", "dropdownIcon", "clearIcon", "inputId", "invalid", "touched", "styleClass", "style", "appendTo", "editable", "readonly", "autofocus", "checkmark", "group", "optionGroupLabel", "optionGroupChildren", "virtualScroll", "virtualScrollItemSize", "lazy"], outputs: ["onFilter", "onChange", "onShow", "onHide", "onBlur", "onFocus", "onClear", "onLazyLoad"] }, { kind: "component", type: i2.TableComponent, selector: "f-table", inputs: ["value", "lazy", "loading", "rows", "totalRecords", "rowHover", "dataKey", "scrollable", "scrollHeight", "paginator", "first", "rowsPerPageOptions", "showCurrentPageReport", "currentPageReportTemplate", "tableStyle", "styleClass", "globalFilterFields", "filterDelay", "responsiveLayout", "selectionMode", "sortMode", "rowExpandMode", "resizableColumns", "rowStyleClass", "virtualScroll", "virtualScrollItemSize", "sortField", "sortOrder", "multiSortMeta", "filters", "selection", "expandedRowKeys", "contextMenuSelection"], outputs: ["sortFieldChange", "sortOrderChange", "multiSortMetaChange", "filtersChange", "selectionChange", "expandedRowKeysChange", "contextMenuSelectionChange", "onLazyLoad", "onSort", "onFilter", "onRowSelect", "onRowUnselect", "onSelectAllChange", "onRowExpand", "onRowCollapse", "onColResize", "onRowContextMenu"] }, { kind: "directive", type: i2.TooltipDirective, selector: "[fTooltip]", inputs: ["fTooltip", "tooltipPosition", "positionStyle", "tooltipStyleClass", "disabled", "tooltipEvent", "showDelay", "hideDelay", "life", "autoHide", "positionTop", "positionLeft", "escape"] }, { kind: "component", type: i2.UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill", "severity"] }, { 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" }] });
3511
+ `, isInline: true, styles: [":host{display:block}.empty-state-icon{width:3rem;height:3rem;border-radius:9999px;display:flex;align-items:center;justify-content:center;background-color:var(--f-primary-50, rgba(59, 130, 246, .08))}:host-context(.app-dark) .empty-state-icon{background-color:#60a5fa1f}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: CheckboxComponent, selector: "f-checkbox", inputs: ["label", "binary", "disabled", "readonly", "inputId", "invalid", "indeterminate", "variant", "size", "touched", "styleClass", "style", "checked"], outputs: ["onChange", "onBlur", "touch", "checkedChange"] }, { kind: "directive", type: FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "variant", "rounded", "raised", "fluid", "disabled", "loading", "loadingIcon", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "component", type: SelectComponent, selector: "f-select", inputs: ["options", "optionLabel", "optionValue", "placeholder", "disabled", "filter", "filterBy", "filterMatchMode", "filterLocale", "filterPlaceholder", "resetFilterOnHide", "autofocusFilter", "emptyMessage", "emptyFilterMessage", "showClear", "loading", "loadingIcon", "dropdownIcon", "clearIcon", "inputId", "invalid", "touched", "styleClass", "style", "appendTo", "editable", "readonly", "autofocus", "checkmark", "group", "optionGroupLabel", "optionGroupChildren", "virtualScroll", "virtualScrollItemSize", "lazy"], outputs: ["onFilter", "onChange", "onShow", "onHide", "onBlur", "onFocus", "onClear", "onLazyLoad"] }, { kind: "component", type: TableComponent, selector: "f-table", inputs: ["value", "lazy", "loading", "rows", "totalRecords", "rowHover", "dataKey", "scrollable", "scrollHeight", "paginator", "first", "rowsPerPageOptions", "showCurrentPageReport", "currentPageReportTemplate", "tableStyle", "styleClass", "globalFilterFields", "filterDelay", "responsiveLayout", "selectionMode", "sortMode", "rowExpandMode", "resizableColumns", "rowStyleClass", "virtualScroll", "virtualScrollItemSize", "sortField", "sortOrder", "multiSortMeta", "filters", "selection", "expandedRowKeys", "contextMenuSelection"], outputs: ["sortFieldChange", "sortOrderChange", "multiSortMetaChange", "filtersChange", "selectionChange", "expandedRowKeysChange", "contextMenuSelectionChange", "onLazyLoad", "onSort", "onFilter", "onRowSelect", "onRowUnselect", "onSelectAllChange", "onRowExpand", "onRowCollapse", "onColResize", "onRowContextMenu"] }, { kind: "directive", type: TooltipDirective, selector: "[fTooltip]", inputs: ["fTooltip", "tooltipPosition", "positionStyle", "tooltipStyleClass", "disabled", "tooltipEvent", "showDelay", "hideDelay", "life", "autoHide", "positionTop", "positionLeft", "escape"] }, { kind: "component", type: UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill", "severity"] }, { kind: "directive", type: HasPermissionDirective, selector: "[hasPermission]", inputs: ["hasPermission"] }, { kind: "component", type: UserSelectComponent, selector: "lib-user-select", inputs: ["showClear", "value"], outputs: ["valueChange", "userSelected"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
3569
3512
  }
3570
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: UserRoleSelectorComponent, decorators: [{
3513
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: UserRoleSelectorComponent, decorators: [{
3571
3514
  type: Component,
3572
3515
  args: [{ selector: 'flusys-user-role-selector', imports: [
3573
- CommonModule,
3574
3516
  FormsModule,
3575
- UiModule,
3517
+ CheckboxComponent,
3518
+ FButtonDirective,
3519
+ SelectComponent,
3520
+ TableComponent,
3521
+ TooltipDirective,
3522
+ UiIconComponent,
3576
3523
  HasPermissionDirective,
3577
3524
  UserSelectComponent,
3578
3525
  TranslatePipe,
@@ -4066,8 +4013,8 @@ class UserActionSelectorComponent extends BaseActionSelectorComponent {
4066
4013
  this.saving.set(false);
4067
4014
  }
4068
4015
  }
4069
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: UserActionSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4070
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: UserActionSelectorComponent, isStandalone: true, selector: "flusys-user-action-selector", viewQueries: [{ propertyName: "userSelectRef", first: true, predicate: ["userSelect"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: `
4016
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: UserActionSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4017
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: UserActionSelectorComponent, isStandalone: true, selector: "flusys-user-action-selector", viewQueries: [{ propertyName: "userSelectRef", first: true, predicate: ["userSelect"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: `
4071
4018
  <div class="user-action-selector">
4072
4019
  <div class="surface-card p-4 rounded-border mb-4 shadow-sm">
4073
4020
  <div
@@ -4398,13 +4345,20 @@ class UserActionSelectorComponent extends BaseActionSelectorComponent {
4398
4345
  }
4399
4346
  }
4400
4347
  </div>
4401
- `, isInline: true, styles: [":host{display:block}.empty-state-icon{width:3rem;height:3rem;border-radius:9999px;display:flex;align-items:center;justify-content:center;background-color:var(--f-primary-50, rgba(59, 130, 246, .08))}:host-context(.app-dark) .empty-state-icon{background-color:#60a5fa1f}.validation-warning{background-color:var(--f-yellow-50, #fefce8);border-left:4px solid var(--f-yellow-500, #eab308);color:var(--f-yellow-700, #a16207)}:host-context(.app-dark) .validation-warning{background-color:#eab3081a;color:var(--f-yellow-400, #facc15)}:host ::ng-deep tr.highlight-warning{background-color:var(--f-red-50, rgba(239, 68, 68, .1))!important}:host-context(.app-dark) ::ng-deep tr.highlight-warning{background-color:#ef444426!important}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: UiModule }, { kind: "directive", type: i2.FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "variant", "rounded", "raised", "fluid", "disabled", "loading", "loadingIcon", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "component", type: i2.TagComponent, selector: "f-tag", inputs: ["value", "severity", "icon", "rounded", "color", "styleClass", "style"] }, { kind: "component", type: i2.CheckboxComponent, selector: "f-checkbox", inputs: ["label", "binary", "disabled", "readonly", "inputId", "invalid", "indeterminate", "variant", "size", "touched", "styleClass", "style", "checked"], outputs: ["onChange", "onBlur", "touch", "checkedChange"] }, { kind: "component", type: i2.SelectComponent, selector: "f-select", inputs: ["options", "optionLabel", "optionValue", "placeholder", "disabled", "filter", "filterBy", "filterMatchMode", "filterLocale", "filterPlaceholder", "resetFilterOnHide", "autofocusFilter", "emptyMessage", "emptyFilterMessage", "showClear", "loading", "loadingIcon", "dropdownIcon", "clearIcon", "inputId", "invalid", "touched", "styleClass", "style", "appendTo", "editable", "readonly", "autofocus", "checkmark", "group", "optionGroupLabel", "optionGroupChildren", "virtualScroll", "virtualScrollItemSize", "lazy"], outputs: ["onFilter", "onChange", "onShow", "onHide", "onBlur", "onFocus", "onClear", "onLazyLoad"] }, { kind: "directive", type: i2.TooltipDirective, selector: "[fTooltip]", inputs: ["fTooltip", "tooltipPosition", "positionStyle", "tooltipStyleClass", "disabled", "tooltipEvent", "showDelay", "hideDelay", "life", "autoHide", "positionTop", "positionLeft", "escape"] }, { kind: "component", type: i2.TreeTableComponent, selector: "f-treetable", inputs: ["value", "loading", "dataKey", "styleClass", "tableStyle", "scrollable", "scrollHeight", "resizableColumns", "lazy", "totalRecords", "paginator", "first", "rows", "rowsPerPageOptions", "showCurrentPageReport", "currentPageReportTemplate", "globalFilterFields", "filterDelay", "selectionMode", "sortMode", "virtualScroll", "virtualScrollItemSize", "sortField", "sortOrder", "multiSortMeta", "filters", "selection", "contextMenuSelection"], outputs: ["sortFieldChange", "sortOrderChange", "multiSortMetaChange", "filtersChange", "selectionChange", "contextMenuSelectionChange", "onLazyLoad", "onSort", "onFilter", "onNodeExpand", "onNodeCollapse", "onNodeSelect", "onNodeUnselect", "onRowContextMenu"] }, { kind: "component", type: i2.TreeTableTogglerComponent, selector: "f-treetabletoggler", inputs: ["rowNode"] }, { kind: "component", type: i2.UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill", "severity"] }, { 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" }] });
4348
+ `, isInline: true, styles: [":host{display:block}.empty-state-icon{width:3rem;height:3rem;border-radius:9999px;display:flex;align-items:center;justify-content:center;background-color:var(--f-primary-50, rgba(59, 130, 246, .08))}:host-context(.app-dark) .empty-state-icon{background-color:#60a5fa1f}.validation-warning{background-color:var(--f-yellow-50, #fefce8);border-left:4px solid var(--f-yellow-500, #eab308);color:var(--f-yellow-700, #a16207)}:host-context(.app-dark) .validation-warning{background-color:#eab3081a;color:var(--f-yellow-400, #facc15)}:host ::ng-deep tr.highlight-warning{background-color:var(--f-red-50, rgba(239, 68, 68, .1))!important}:host-context(.app-dark) ::ng-deep tr.highlight-warning{background-color:#ef444426!important}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: CheckboxComponent, selector: "f-checkbox", inputs: ["label", "binary", "disabled", "readonly", "inputId", "invalid", "indeterminate", "variant", "size", "touched", "styleClass", "style", "checked"], outputs: ["onChange", "onBlur", "touch", "checkedChange"] }, { kind: "directive", type: FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "variant", "rounded", "raised", "fluid", "disabled", "loading", "loadingIcon", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "component", type: SelectComponent, selector: "f-select", inputs: ["options", "optionLabel", "optionValue", "placeholder", "disabled", "filter", "filterBy", "filterMatchMode", "filterLocale", "filterPlaceholder", "resetFilterOnHide", "autofocusFilter", "emptyMessage", "emptyFilterMessage", "showClear", "loading", "loadingIcon", "dropdownIcon", "clearIcon", "inputId", "invalid", "touched", "styleClass", "style", "appendTo", "editable", "readonly", "autofocus", "checkmark", "group", "optionGroupLabel", "optionGroupChildren", "virtualScroll", "virtualScrollItemSize", "lazy"], outputs: ["onFilter", "onChange", "onShow", "onHide", "onBlur", "onFocus", "onClear", "onLazyLoad"] }, { kind: "component", type: TagComponent, selector: "f-tag", inputs: ["value", "severity", "icon", "rounded", "color", "styleClass", "style"] }, { kind: "directive", type: TooltipDirective, selector: "[fTooltip]", inputs: ["fTooltip", "tooltipPosition", "positionStyle", "tooltipStyleClass", "disabled", "tooltipEvent", "showDelay", "hideDelay", "life", "autoHide", "positionTop", "positionLeft", "escape"] }, { kind: "component", type: TreeTableComponent, selector: "f-treetable", inputs: ["value", "loading", "dataKey", "styleClass", "tableStyle", "scrollable", "scrollHeight", "resizableColumns", "lazy", "totalRecords", "paginator", "first", "rows", "rowsPerPageOptions", "showCurrentPageReport", "currentPageReportTemplate", "globalFilterFields", "filterDelay", "selectionMode", "sortMode", "virtualScroll", "virtualScrollItemSize", "sortField", "sortOrder", "multiSortMeta", "filters", "selection", "contextMenuSelection"], outputs: ["sortFieldChange", "sortOrderChange", "multiSortMetaChange", "filtersChange", "selectionChange", "contextMenuSelectionChange", "onLazyLoad", "onSort", "onFilter", "onNodeExpand", "onNodeCollapse", "onNodeSelect", "onNodeUnselect", "onRowContextMenu"] }, { kind: "component", type: TreeTableTogglerComponent, selector: "f-treetabletoggler", inputs: ["rowNode"] }, { kind: "component", type: UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill", "severity"] }, { 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" }] });
4402
4349
  }
4403
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: UserActionSelectorComponent, decorators: [{
4350
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: UserActionSelectorComponent, decorators: [{
4404
4351
  type: Component,
4405
4352
  args: [{ selector: 'flusys-user-action-selector', imports: [
4406
4353
  FormsModule,
4407
- UiModule,
4354
+ CheckboxComponent,
4355
+ FButtonDirective,
4356
+ SelectComponent,
4357
+ TagComponent,
4358
+ TooltipDirective,
4359
+ TreeTableComponent,
4360
+ TreeTableTogglerComponent,
4361
+ UiIconComponent,
4408
4362
  HasPermissionDirective,
4409
4363
  UserSelectComponent,
4410
4364
  TranslatePipe,
@@ -4794,11 +4748,12 @@ class ProfilePermissionProviderAdapter {
4794
4748
  })),
4795
4749
  })));
4796
4750
  }
4797
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: ProfilePermissionProviderAdapter, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4798
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: ProfilePermissionProviderAdapter });
4751
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: ProfilePermissionProviderAdapter, deps: [], target: i0.ɵɵFactoryTarget.Service });
4752
+ static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.5", ngImport: i0, type: ProfilePermissionProviderAdapter, autoProvided: false });
4799
4753
  }
4800
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: ProfilePermissionProviderAdapter, decorators: [{
4801
- type: Injectable
4754
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: ProfilePermissionProviderAdapter, decorators: [{
4755
+ type: Service,
4756
+ args: [{ autoProvided: false }]
4802
4757
  }] });
4803
4758
 
4804
4759
  /** Registers IAM provider adapters for ng-shared interfaces */
@@ -4845,7 +4800,7 @@ const IAM_ROUTES = [
4845
4800
  fallbackMessages: { ...IAM_MESSAGES, ...SHARED_MESSAGES },
4846
4801
  }),
4847
4802
  },
4848
- loadComponent: () => import('./flusys-ng-iam-iam-container.component-D0m8u6nu.mjs').then((m) => m.IamContainerComponent),
4803
+ loadComponent: () => import('./flusys-ng-iam-iam-container.component-XBoIeQ0t.mjs').then((m) => m.IamContainerComponent),
4849
4804
  children: [
4850
4805
  // Actions Management
4851
4806
  {
@@ -4854,15 +4809,15 @@ const IAM_ROUTES = [
4854
4809
  children: [
4855
4810
  {
4856
4811
  path: '',
4857
- loadComponent: () => import('./flusys-ng-iam-action-list-page.component-BRi_CpGl.mjs').then((m) => m.ActionListPageComponent),
4812
+ loadComponent: () => import('./flusys-ng-iam-action-list-page.component-DfRFkfPh.mjs').then((m) => m.ActionListPageComponent),
4858
4813
  },
4859
4814
  {
4860
4815
  path: 'new',
4861
- loadComponent: () => import('./flusys-ng-iam-action-form-page.component-Ci56tFEu.mjs').then((m) => m.ActionFormPageComponent),
4816
+ loadComponent: () => import('./flusys-ng-iam-action-form-page.component-O7XSRAVo.mjs').then((m) => m.ActionFormPageComponent),
4862
4817
  },
4863
4818
  {
4864
4819
  path: ':id',
4865
- loadComponent: () => import('./flusys-ng-iam-action-form-page.component-Ci56tFEu.mjs').then((m) => m.ActionFormPageComponent),
4820
+ loadComponent: () => import('./flusys-ng-iam-action-form-page.component-O7XSRAVo.mjs').then((m) => m.ActionFormPageComponent),
4866
4821
  },
4867
4822
  ],
4868
4823
  },
@@ -4873,15 +4828,15 @@ const IAM_ROUTES = [
4873
4828
  children: [
4874
4829
  {
4875
4830
  path: '',
4876
- loadComponent: () => import('./flusys-ng-iam-role-list-page.component-BCtoWvFQ.mjs').then((m) => m.RoleListPageComponent),
4831
+ loadComponent: () => import('./flusys-ng-iam-role-list-page.component-CvJrtElJ.mjs').then((m) => m.RoleListPageComponent),
4877
4832
  },
4878
4833
  {
4879
4834
  path: 'new',
4880
- loadComponent: () => import('./flusys-ng-iam-role-form-page.component-ByMbnQ53.mjs').then((m) => m.RoleFormPageComponent),
4835
+ loadComponent: () => import('./flusys-ng-iam-role-form-page.component-BIgs_ePw.mjs').then((m) => m.RoleFormPageComponent),
4881
4836
  },
4882
4837
  {
4883
4838
  path: ':id',
4884
- loadComponent: () => import('./flusys-ng-iam-role-form-page.component-ByMbnQ53.mjs').then((m) => m.RoleFormPageComponent),
4839
+ loadComponent: () => import('./flusys-ng-iam-role-form-page.component-BIgs_ePw.mjs').then((m) => m.RoleFormPageComponent),
4885
4840
  },
4886
4841
  ],
4887
4842
  },
@@ -4896,7 +4851,7 @@ const IAM_ROUTES = [
4896
4851
  COMPANY_ACTION_PERMISSIONS.READ,
4897
4852
  ]),
4898
4853
  ],
4899
- loadComponent: () => import('./flusys-ng-iam-permission-page.component-CVaxwwcS.mjs').then((m) => m.PermissionPageComponent),
4854
+ loadComponent: () => import('./flusys-ng-iam-permission-page.component-DhfA39qe.mjs').then((m) => m.PermissionPageComponent),
4900
4855
  },
4901
4856
  // Default redirect to the first tab the user has permission to see
4902
4857
  {
@@ -4915,4 +4870,4 @@ const IAM_ROUTES = [
4915
4870
  */
4916
4871
 
4917
4872
  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, buildActionParentTree as b, convertActionToTreeNode as c, RoleActionSelectorComponent as d, UserActionSelectorComponent as e, ActionPermissionLogicService as f, IAM_ROUTES as g, MyPermissionsApiService as h, PermissionStateService as i, ProfilePermissionProviderAdapter as j, provideIamProviders as p };
4918
- //# sourceMappingURL=flusys-ng-iam-flusys-ng-iam-BEAhj9ma.mjs.map
4873
+ //# sourceMappingURL=flusys-ng-iam-flusys-ng-iam--WniMPhV.mjs.map