@openziti/ziti-console-lib 1.0.0 → 1.0.2

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 (53) hide show
  1. package/assets/fonts/icomoon.eot +0 -0
  2. package/assets/fonts/icomoon.svg +1 -0
  3. package/assets/fonts/icomoon.ttf +0 -0
  4. package/assets/fonts/icomoon.woff +0 -0
  5. package/assets/fonts/icomoon.woff2 +0 -0
  6. package/assets/images/Icon_Check.png +0 -0
  7. package/assets/styles/dark.css +15 -8
  8. package/assets/styles/global.scss +4 -1
  9. package/assets/styles/icons.scss +4 -11
  10. package/assets/svgs/newJwt.svg +28 -0
  11. package/esm2022/lib/ZAC_VERSION.mjs +2 -2
  12. package/esm2022/lib/features/list-page-features/list-page-header/list-page-header.component.mjs +2 -2
  13. package/esm2022/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.mjs +8 -5
  14. package/esm2022/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.service.mjs +5 -5
  15. package/esm2022/lib/features/projectable-forms/identity/identity-form.component.mjs +16 -6
  16. package/esm2022/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.mjs +8 -5
  17. package/esm2022/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.service.mjs +5 -5
  18. package/esm2022/lib/features/projectable-forms/service-policy/service-policy-form.component.mjs +9 -6
  19. package/esm2022/lib/features/projectable-forms/service-policy/service-policy-form.service.mjs +8 -8
  20. package/esm2022/lib/features/qr-code/qr-code.component.mjs +10 -4
  21. package/esm2022/lib/features/side-navigator/side-navigator.component.mjs +2 -2
  22. package/esm2022/lib/features/tag-selector/tag-selector.component.mjs +2 -2
  23. package/esm2022/lib/pages/identities/identities-page.service.mjs +45 -1
  24. package/esm2022/lib/services/node-data.service.mjs +19 -1
  25. package/esm2022/lib/services/ziti-controller-data.service.mjs +15 -4
  26. package/esm2022/lib/services/ziti-data.service.mjs +4 -3
  27. package/fesm2022/openziti-ziti-console-lib.mjs +145 -48
  28. package/fesm2022/openziti-ziti-console-lib.mjs.map +1 -1
  29. package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.d.ts +1 -0
  30. package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.d.ts.map +1 -1
  31. package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.service.d.ts +2 -2
  32. package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.service.d.ts.map +1 -1
  33. package/lib/features/projectable-forms/identity/identity-form.component.d.ts +5 -1
  34. package/lib/features/projectable-forms/identity/identity-form.component.d.ts.map +1 -1
  35. package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.d.ts +1 -0
  36. package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.d.ts.map +1 -1
  37. package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.service.d.ts +2 -2
  38. package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.service.d.ts.map +1 -1
  39. package/lib/features/projectable-forms/service-policy/service-policy-form.component.d.ts +1 -0
  40. package/lib/features/projectable-forms/service-policy/service-policy-form.component.d.ts.map +1 -1
  41. package/lib/features/projectable-forms/service-policy/service-policy-form.service.d.ts +4 -4
  42. package/lib/features/projectable-forms/service-policy/service-policy-form.service.d.ts.map +1 -1
  43. package/lib/features/qr-code/qr-code.component.d.ts +1 -0
  44. package/lib/features/qr-code/qr-code.component.d.ts.map +1 -1
  45. package/lib/pages/identities/identities-page.service.d.ts +1 -0
  46. package/lib/pages/identities/identities-page.service.d.ts.map +1 -1
  47. package/lib/services/node-data.service.d.ts +1 -0
  48. package/lib/services/node-data.service.d.ts.map +1 -1
  49. package/lib/services/ziti-controller-data.service.d.ts +2 -1
  50. package/lib/services/ziti-controller-data.service.d.ts.map +1 -1
  51. package/lib/services/ziti-data.service.d.ts +2 -1
  52. package/lib/services/ziti-data.service.d.ts.map +1 -1
  53. package/package.json +1 -1
@@ -2085,7 +2085,7 @@ class ZitiDataService {
2085
2085
  this.router = router;
2086
2086
  this.dataServiceType = '';
2087
2087
  }
2088
- getRoleFilter(roleAttributes) {
2088
+ getRoleFilter(roleAttributes, semantic = 'AnyOf') {
2089
2089
  let hasAll = false;
2090
2090
  roleAttributes.forEach((attr) => {
2091
2091
  if (attr === 'all') {
@@ -2100,7 +2100,8 @@ class ZitiDataService {
2100
2100
  filterName: "Attributes",
2101
2101
  label: "",
2102
2102
  type: "ATTRIBUTE",
2103
- value: roleAttributes
2103
+ value: roleAttributes,
2104
+ semantic
2104
2105
  }
2105
2106
  ];
2106
2107
  }
@@ -4743,11 +4744,11 @@ class ListPageHeaderComponent {
4743
4744
  return tabUrl === path;
4744
4745
  }
4745
4746
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ListPageHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4746
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ListPageHeaderComponent, selector: "lib-list-page-header", inputs: { title: "title", tabs: "tabs", showAdd: "showAdd", hideAction: "hideAction" }, outputs: { actionClicked: "actionClicked" }, ngImport: i0, template: "<div class=\"header\">\n <div class=\"title\">\n <span>{{title}}</span>\n </div>\n <div class=\"bread\"></div>\n <div class=\"line\"></div>\n <div class=\"tabs\">\n <div *ngFor=\"let tab of tabs\" class=\"tab\" [ngClass]=\"{selected: tabSelected(tab)}\" [routerLink]=\"tab.url\" [hidden]=\"tab.hidden\">{{tab.label}}</div>\n </div>\n <div *ngIf=\"showAdd\" [ngClass]=\"{hideAction: hideAction}\" (click)=\"clickAction('add')\"\n class=\"action icon-plus icon-add\" data-action=\"add\"></div>\n <div *ngIf=\"!showAdd\" [ngClass]=\"{hideAction: hideAction}\" (click)=\"clickAction('delete')\"\n class=\"action icon-minus icon-delete\" data-action=\"delete\"></div>\n</div>\n", styles: [".header{position:relative;display:inline-block;width:100%}.header [class^=icon-],.header [class*=\" icon-\"]{font-family:icomoon,serif!important;speak:never;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.header .hideAction{display:none}.header .action{text-align:center;color:var(--white);line-height:3rem;font-size:1.875rem;width:3rem;height:3rem;border-radius:var(--inputBorderRadius);position:absolute;right:0;top:1.125rem;background-color:var(--primary);cursor:pointer;overflow:hidden;z-index:24;box-shadow:var(--shadow);transition:var(--transition)}.header .action:hover{transform:translateY(0)}.header .action.icon-delete:active,.header .action:active{transform:scale(.9);background-color:var(--formSubGroup)}.header .action.icon-delete{background-color:var(--red)}.header .line{position:absolute;width:100%;top:2.5rem;height:.25rem;background-color:var(--stroke)}.header .bread{position:absolute;right:4.375rem;top:.625rem;font-size:.8125rem;font-weight:600;text-transform:uppercase}.header .tabs{position:relative;display:flex;flex:1 1;flex-wrap:wrap;width:100%;font-size:.875rem;min-height:2.5rem;padding-top:1rem}.header .tabs .tab{position:relative;float:left;margin-right:1.25rem;padding-bottom:.3125rem;margin-bottom:.625rem;font-size:.875rem;font-weight:600;cursor:pointer;transition:var(--transition);border-bottom-width:.25rem;border-bottom-color:transparent;border-bottom-style:solid}.header .tabs .tab:hover{border-bottom-color:var(--inputBorder)}.header .tabs .tab.selected,.header .tabs .tab.selected:hover{border-bottom-color:var(--primaryColor)}.header .title{height:1.875rem;overflow:hidden;font-family:Russo One,serif;color:var(--primary);filter:brightness(50%);font-size:1.875rem;text-transform:uppercase;font-weight:400;line-height:2.125rem}@media (max-width: 1024px){.title{font-size:1.25rem!important}.action{line-height:2.8125rem!important;font-size:1.25rem!important;width:2.8125rem!important;height:2.8125rem!important;border-radius:2.5rem!important;top:1.25rem!important;right:0!important}}\n"], dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] }); }
4747
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ListPageHeaderComponent, selector: "lib-list-page-header", inputs: { title: "title", tabs: "tabs", showAdd: "showAdd", hideAction: "hideAction" }, outputs: { actionClicked: "actionClicked" }, ngImport: i0, template: "<div class=\"header\">\n <div class=\"title\">\n <span>{{title}}</span>\n </div>\n <div class=\"bread\"></div>\n <div class=\"line\"></div>\n <div class=\"tabs\">\n <div *ngFor=\"let tab of tabs\" class=\"tab\" [ngClass]=\"{selected: tabSelected(tab)}\" [routerLink]=\"tab.url\" [hidden]=\"tab.hidden\">{{tab.label}}</div>\n </div>\n <div *ngIf=\"showAdd\" [ngClass]=\"{hideAction: hideAction}\" (click)=\"clickAction('add')\"\n class=\"action icon-plus icon-add\" data-action=\"add\"></div>\n <div *ngIf=\"!showAdd\" [ngClass]=\"{hideAction: hideAction}\" (click)=\"clickAction('delete')\"\n class=\"action icon-minus icon-delete\" data-action=\"delete\"></div>\n</div>\n", styles: [".header{position:relative;display:inline-block;width:100%}.header [class^=icon-],.header [class*=\" icon-\"]{font-family:icomoon,serif!important;speak:never;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.header .hideAction{display:none}.header .action{text-align:center;color:var(--offWhite_ALWAYS);line-height:3rem;font-size:1.875rem;width:3rem;height:3rem;border-radius:var(--inputBorderRadius);position:absolute;right:0;top:1.125rem;background-color:var(--primary);cursor:pointer;overflow:hidden;z-index:24;box-shadow:var(--shadow);transition:var(--transition)}.header .action:hover{transform:translateY(0)}.header .action.icon-delete:active,.header .action:active{transform:scale(.9);background-color:var(--formSubGroup)}.header .action.icon-delete{background-color:var(--red)}.header .line{position:absolute;width:100%;top:2.5rem;height:.25rem;background-color:var(--stroke)}.header .bread{position:absolute;right:4.375rem;top:.625rem;font-size:.8125rem;font-weight:600;text-transform:uppercase}.header .tabs{position:relative;display:flex;flex:1 1;flex-wrap:wrap;width:100%;font-size:.875rem;min-height:2.5rem;padding-top:1rem}.header .tabs .tab{position:relative;float:left;margin-right:1.25rem;padding-bottom:.3125rem;margin-bottom:.625rem;font-size:.875rem;font-weight:600;cursor:pointer;transition:var(--transition);border-bottom-width:.25rem;border-bottom-color:transparent;border-bottom-style:solid}.header .tabs .tab:hover{border-bottom-color:var(--inputBorder)}.header .tabs .tab.selected,.header .tabs .tab.selected:hover{border-bottom-color:var(--primaryColor)}.header .title{height:1.875rem;overflow:hidden;font-family:Russo One,serif;color:var(--primary);filter:brightness(var(--brightnessDark));font-size:1.875rem;text-transform:uppercase;font-weight:400;line-height:2.125rem}@media (max-width: 1024px){.title{font-size:1.25rem!important}.action{line-height:2.8125rem!important;font-size:1.25rem!important;width:2.8125rem!important;height:2.8125rem!important;border-radius:2.5rem!important;top:1.25rem!important;right:0!important}}\n"], dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] }); }
4747
4748
  }
4748
4749
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ListPageHeaderComponent, decorators: [{
4749
4750
  type: Component,
4750
- args: [{ selector: 'lib-list-page-header', template: "<div class=\"header\">\n <div class=\"title\">\n <span>{{title}}</span>\n </div>\n <div class=\"bread\"></div>\n <div class=\"line\"></div>\n <div class=\"tabs\">\n <div *ngFor=\"let tab of tabs\" class=\"tab\" [ngClass]=\"{selected: tabSelected(tab)}\" [routerLink]=\"tab.url\" [hidden]=\"tab.hidden\">{{tab.label}}</div>\n </div>\n <div *ngIf=\"showAdd\" [ngClass]=\"{hideAction: hideAction}\" (click)=\"clickAction('add')\"\n class=\"action icon-plus icon-add\" data-action=\"add\"></div>\n <div *ngIf=\"!showAdd\" [ngClass]=\"{hideAction: hideAction}\" (click)=\"clickAction('delete')\"\n class=\"action icon-minus icon-delete\" data-action=\"delete\"></div>\n</div>\n", styles: [".header{position:relative;display:inline-block;width:100%}.header [class^=icon-],.header [class*=\" icon-\"]{font-family:icomoon,serif!important;speak:never;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.header .hideAction{display:none}.header .action{text-align:center;color:var(--white);line-height:3rem;font-size:1.875rem;width:3rem;height:3rem;border-radius:var(--inputBorderRadius);position:absolute;right:0;top:1.125rem;background-color:var(--primary);cursor:pointer;overflow:hidden;z-index:24;box-shadow:var(--shadow);transition:var(--transition)}.header .action:hover{transform:translateY(0)}.header .action.icon-delete:active,.header .action:active{transform:scale(.9);background-color:var(--formSubGroup)}.header .action.icon-delete{background-color:var(--red)}.header .line{position:absolute;width:100%;top:2.5rem;height:.25rem;background-color:var(--stroke)}.header .bread{position:absolute;right:4.375rem;top:.625rem;font-size:.8125rem;font-weight:600;text-transform:uppercase}.header .tabs{position:relative;display:flex;flex:1 1;flex-wrap:wrap;width:100%;font-size:.875rem;min-height:2.5rem;padding-top:1rem}.header .tabs .tab{position:relative;float:left;margin-right:1.25rem;padding-bottom:.3125rem;margin-bottom:.625rem;font-size:.875rem;font-weight:600;cursor:pointer;transition:var(--transition);border-bottom-width:.25rem;border-bottom-color:transparent;border-bottom-style:solid}.header .tabs .tab:hover{border-bottom-color:var(--inputBorder)}.header .tabs .tab.selected,.header .tabs .tab.selected:hover{border-bottom-color:var(--primaryColor)}.header .title{height:1.875rem;overflow:hidden;font-family:Russo One,serif;color:var(--primary);filter:brightness(50%);font-size:1.875rem;text-transform:uppercase;font-weight:400;line-height:2.125rem}@media (max-width: 1024px){.title{font-size:1.25rem!important}.action{line-height:2.8125rem!important;font-size:1.25rem!important;width:2.8125rem!important;height:2.8125rem!important;border-radius:2.5rem!important;top:1.25rem!important;right:0!important}}\n"] }]
4751
+ args: [{ selector: 'lib-list-page-header', template: "<div class=\"header\">\n <div class=\"title\">\n <span>{{title}}</span>\n </div>\n <div class=\"bread\"></div>\n <div class=\"line\"></div>\n <div class=\"tabs\">\n <div *ngFor=\"let tab of tabs\" class=\"tab\" [ngClass]=\"{selected: tabSelected(tab)}\" [routerLink]=\"tab.url\" [hidden]=\"tab.hidden\">{{tab.label}}</div>\n </div>\n <div *ngIf=\"showAdd\" [ngClass]=\"{hideAction: hideAction}\" (click)=\"clickAction('add')\"\n class=\"action icon-plus icon-add\" data-action=\"add\"></div>\n <div *ngIf=\"!showAdd\" [ngClass]=\"{hideAction: hideAction}\" (click)=\"clickAction('delete')\"\n class=\"action icon-minus icon-delete\" data-action=\"delete\"></div>\n</div>\n", styles: [".header{position:relative;display:inline-block;width:100%}.header [class^=icon-],.header [class*=\" icon-\"]{font-family:icomoon,serif!important;speak:never;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.header .hideAction{display:none}.header .action{text-align:center;color:var(--offWhite_ALWAYS);line-height:3rem;font-size:1.875rem;width:3rem;height:3rem;border-radius:var(--inputBorderRadius);position:absolute;right:0;top:1.125rem;background-color:var(--primary);cursor:pointer;overflow:hidden;z-index:24;box-shadow:var(--shadow);transition:var(--transition)}.header .action:hover{transform:translateY(0)}.header .action.icon-delete:active,.header .action:active{transform:scale(.9);background-color:var(--formSubGroup)}.header .action.icon-delete{background-color:var(--red)}.header .line{position:absolute;width:100%;top:2.5rem;height:.25rem;background-color:var(--stroke)}.header .bread{position:absolute;right:4.375rem;top:.625rem;font-size:.8125rem;font-weight:600;text-transform:uppercase}.header .tabs{position:relative;display:flex;flex:1 1;flex-wrap:wrap;width:100%;font-size:.875rem;min-height:2.5rem;padding-top:1rem}.header .tabs .tab{position:relative;float:left;margin-right:1.25rem;padding-bottom:.3125rem;margin-bottom:.625rem;font-size:.875rem;font-weight:600;cursor:pointer;transition:var(--transition);border-bottom-width:.25rem;border-bottom-color:transparent;border-bottom-style:solid}.header .tabs .tab:hover{border-bottom-color:var(--inputBorder)}.header .tabs .tab.selected,.header .tabs .tab.selected:hover{border-bottom-color:var(--primaryColor)}.header .title{height:1.875rem;overflow:hidden;font-family:Russo One,serif;color:var(--primary);filter:brightness(var(--brightnessDark));font-size:1.875rem;text-transform:uppercase;font-weight:400;line-height:2.125rem}@media (max-width: 1024px){.title{font-size:1.25rem!important}.action{line-height:2.8125rem!important;font-size:1.25rem!important;width:2.8125rem!important;height:2.8125rem!important;border-radius:2.5rem!important;top:1.25rem!important;right:0!important}}\n"] }]
4751
4752
  }], propDecorators: { title: [{
4752
4753
  type: Input
4753
4754
  }], tabs: [{
@@ -5764,6 +5765,49 @@ class IdentitiesPageService extends ListPageServiceClass {
5764
5765
  this.selectedIdentity = item;
5765
5766
  this.sideModalOpen = true;
5766
5767
  }
5768
+ deleteEnrollment(identity) {
5769
+ return new Promise((resolve, reject) => {
5770
+ const confirmData = {
5771
+ appendId: 'DeleteEnrollment',
5772
+ title: 'Delete Enrollment',
5773
+ message: `Are you sure you would like to delete the enrollment for this Identity?`,
5774
+ confirmLabel: 'Yes',
5775
+ cancelLabel: 'Oops, no get me out of here',
5776
+ showCancelLink: true,
5777
+ imageUrl: '../../assets/svgs/Growl_Warning.svg',
5778
+ };
5779
+ this.dialogRef = this.dialogForm.open(ConfirmComponent, {
5780
+ data: confirmData,
5781
+ autoFocus: false,
5782
+ });
5783
+ this.dialogRef.afterClosed().subscribe({
5784
+ next: (result) => {
5785
+ if (!result?.confirmed) {
5786
+ resolve(false);
5787
+ }
5788
+ let enrollmentId;
5789
+ if (!isEmpty(identity?.enrollment?.ott)) {
5790
+ enrollmentId = identity?.enrollment?.ott.id;
5791
+ }
5792
+ else if (!isEmpty(identity?.enrollment.ottca)) {
5793
+ enrollmentId = identity?.enrollment?.ottca.id;
5794
+ }
5795
+ else if (!isEmpty(identity?.enrollment.updb)) {
5796
+ enrollmentId = identity?.enrollment?.updb.id;
5797
+ }
5798
+ this.dataService.deleteEnrollment(enrollmentId).then(() => {
5799
+ const growlerData = new GrowlerModel('success', 'Success', `Enrollment Deleted`, `Successfully deleted Identity enrollment `);
5800
+ this.growlerService.show(growlerData);
5801
+ resolve(true);
5802
+ }).catch((error) => {
5803
+ const growlerData = new GrowlerModel('error', 'Error', `Delete Failed`, `Failed to delete Identity enrollment token`);
5804
+ this.growlerService.show(growlerData);
5805
+ reject(error);
5806
+ });
5807
+ }
5808
+ });
5809
+ });
5810
+ }
5767
5811
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: IdentitiesPageService, deps: [{ token: SETTINGS_SERVICE }, { token: DataTableFilterService }, { token: ZITI_DATA_SERVICE }, { token: CsvDownloadService }, { token: GrowlerService }, { token: i5$1.MatDialog }, { token: IDENTITY_EXTENSION_SERVICE }, { token: i4.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
5768
5812
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: IdentitiesPageService, providedIn: 'root' }); }
5769
5813
  }
@@ -6331,6 +6375,11 @@ class QrCodeComponent {
6331
6375
  }
6332
6376
  });
6333
6377
  }
6378
+ deleteEnrollment() {
6379
+ this.identitiesSvc.deleteEnrollment(this.identity).then(() => {
6380
+ this.doRefresh.emit(true);
6381
+ });
6382
+ }
6334
6383
  expandQRCode() {
6335
6384
  if (!this.canExpand) {
6336
6385
  return;
@@ -6338,7 +6387,7 @@ class QrCodeComponent {
6338
6387
  const data = {
6339
6388
  jwt: this.jwt,
6340
6389
  expiration: this.expiration,
6341
- qrCodeSize: 400,
6390
+ qrCodeSize: 500,
6342
6391
  identity: this.identity,
6343
6392
  qrOnly: true
6344
6393
  };
@@ -6352,11 +6401,11 @@ class QrCodeComponent {
6352
6401
  this.expirationDate = this.getExpirationDate();
6353
6402
  }
6354
6403
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: QrCodeComponent, deps: [{ token: i5$1.MatDialogRef, optional: true }, { token: i5$1.MatDialog, optional: true }, { token: MAT_DIALOG_DATA, optional: true }, { token: IdentitiesPageService }, { token: EdgeRoutersPageService }], target: i0.ɵɵFactoryTarget.Component }); }
6355
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: QrCodeComponent, selector: "lib-qr-code", inputs: { jwt: "jwt", token: "token", expiration: "expiration", identity: "identity", type: "type", authenticators: "authenticators", qrOnly: "qrOnly", canExpand: "canExpand" }, outputs: { doRefresh: "doRefresh" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"qr-code-container\" [ngClass]=\"{'modal-view': isModal}\">\n <div *ngIf=\"!qrOnly\" class=\"qr-code-buttons\">\n <span class=\"info-text\" *ngIf=\"hasJWT && !jwtExpired && type !== 'router'\">TO REGISTER THIS IDENTITY</span>\n <span class=\"info-text\" *ngIf=\"hasJWT && !jwtExpired && type === 'router'\">TO REGISTER THIS ROUTER</span>\n <div (click)=\"identitiesSvc.downloadJWT(jwt, identity.name)\" *ngIf=\"hasJWT && !jwtExpired && type !== 'router'\" class=\"download-button\">\n <div class=\"download-key\"></div>\n <div>DOWNLOAD ENROLLMENT JWT</div>\n <div class=\"tap-to-download icon-ClickIcon\"></div>\n </div>\n <div (click)=\"identitiesSvc.copyToken(token)\" *ngIf=\"!jwtExpired && type === 'router'\" class=\"download-button\" style=\"background-color: #232f3e!important;\">\n <div class=\"download-key\"></div>\n <div>COPY ENROLLMENT TOKEN</div>\n <div class=\"tap-to-download icon-ClickIcon\"></div>\n </div>\n <div (click)=\"identitiesSvc.resetJWT(identity)\" *ngIf=\"showResetToken\" class=\"download-button\" >\n <div class=\"download-key\"></div>\n <div>RESET ENROLLMENT</div>\n <div class=\"tap-to-download icon-refresh\"></div>\n </div>\n <div (click)=\"reissue()\" *ngIf=\"showReissueToken\" class=\"download-button\" >\n <div class=\"download-key\"></div>\n <div>REISSUE ENROLLMENT</div>\n <div class=\"tap-to-download icon-refresh\"></div>\n </div>\n <div (click)=\"resetMFA()\" *ngIf=\"showResetMFA || mfaReset\" class=\"download-button\" [ngClass]=\"{'reset-success': mfaReset}\">\n <div class=\"icon-lock\"></div>\n <div>{{mfaReset ? 'MFA RESET SUCCESSFUL' : 'RESET MFA'}}</div>\n <div [ngClass]=\"{spinner: resettingMFA, 'icon-refresh': !resettingMFA, 'tap-to-download': !resettingMFA, 'icon-Icon_Check': mfaReset && !resettingMFA}\"></div>\n </div>\n <span class=\"info-text\" *ngIf=\"hasJWT && !jwtExpired && type !== 'router'\">OR SCAN QR CODE</span>\n </div>\n <qrcode\n *ngIf=\"!jwtExpired && type !== 'router'\"\n [errorCorrectionLevel]=\"'M'\" [qrdata]=\"jwt\"\n [width]=\"qrCodeSize\" (click)=\"expandQRCode()\"\n [ngClass]=\"{'qr-code-expandable': canExpand}\"\n ></qrcode>\n <div *ngIf=\"!qrOnly\" class=\"qr-code-buttons\">\n <span class=\"info-text\" *ngIf=\"!jwtExpired && type === 'router'\">OR</span>\n <div (click)=\"identitiesSvc.downloadJWT(jwt, identity.name)\" *ngIf=\"!jwtExpired && type === 'router'\" class=\"download-button\">\n <div class=\"download-key\"></div>\n <div>DOWNLOAD ENROLLMENT JWT</div>\n <div class=\"tap-to-download\"></div>\n </div>\n <span class=\"info-text\" *ngIf=\"!showResetToken\">{{jwtExpired ? 'REGISTRATION EXPIRED' : 'EXPIRES'}} {{expirationDate}}</span>\n <div (click)=\"reenroll()\" *ngIf=\"showReenrollToken\" class=\"download-button\" >\n <div class=\"download-key\"></div>\n <div>REISSUE ENROLLMENT</div>\n <div class=\"tap-to-download icon-refresh\"></div>\n </div>\n </div>\n</div>\n", styles: [".qr-code-container{display:flex;flex-direction:column;justify-content:center;align-items:center}.qr-code-container .info-text{color:var(--red);font-weight:600}.qr-code-container .download-button{margin:.625rem 0rem}.qr-code-container .reset-success{opacity:.8;background-color:var(--formSubGroup);cursor:default;pointer-events:none}.qr-code-container .reset-success:active{transform:none}.qr-code-container .reset-success:hover{filter:brightness(100%)}.qr-code-container .icon-Icon_Check{font-family:icomoon!important;font-size:2rem;margin-right:1rem}.qr-code-container .icon-Icon_Check:before{content:\"\\e912\";color:var(--green)}.qr-code-container .icon-lock{margin-left:.725rem;margin-right:.525rem;text-align:center;cursor:pointer;height:2.8125rem;width:2.8125rem;z-index:10;font-size:2rem;display:flex;align-items:center;justify-content:center}.qr-code-container .icon-ClickIcon{width:3.8125rem}.qr-code-container .spinner{display:inline-block;width:var(--spinnerSizeLarge);height:var(--spinnerSizeLarge);border-radius:50%;background:transparent;border-top:var(--spinnerBorderTopLarge);border-right:var(--spinnerBorderRightLarge);border-bottom:var(--spinnerBorderBottomLarge);border-left:var(--spinnerBorderLeftLarge);animation:loading .5s infinite linear;margin-left:var(--marginSmall);margin-right:1rem;position:relative}.qr-code-container.modal-view{width:31.25rem;background-color:var(--background);padding:1.25rem;border-radius:.9375rem}.qr-code-container .qr-code-buttons{display:flex;flex-direction:column;justify-content:center;align-items:center;width:100%}.qr-code-container .qr-code-expandable{cursor:pointer;transition:transform .25s}.qr-code-container .qr-code-expandable:hover{transform:scale(1.15)}\n"], dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5$2.QRCodeComponent, selector: "qrcode", inputs: ["allowEmptyString", "colorDark", "colorLight", "cssClass", "elementType", "errorCorrectionLevel", "imageSrc", "imageHeight", "imageWidth", "margin", "qrdata", "scale", "version", "width", "alt", "ariaLabel", "title"], outputs: ["qrCodeURL"] }] }); }
6404
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: QrCodeComponent, selector: "lib-qr-code", inputs: { jwt: "jwt", token: "token", expiration: "expiration", identity: "identity", type: "type", authenticators: "authenticators", qrOnly: "qrOnly", canExpand: "canExpand" }, outputs: { doRefresh: "doRefresh" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"qr-code-container\" [ngClass]=\"{'modal-view': isModal}\">\n <div *ngIf=\"!qrOnly\" class=\"qr-code-buttons\">\n <div *ngIf=\"hasJWT && !jwtExpired && type !== 'router'\" (click)=\"identitiesSvc.downloadJWT(jwt, identity.name)\" class=\"download-button\">\n <div class=\"download-jwt\"></div>\n <div>DOWNLOAD JWT</div>\n <div class=\"tap-to-download icon-download-jwt\"></div>\n </div>\n <div *ngIf=\"hasJWT && !jwtExpired && type !== 'router'\" (click)=\"expandQRCode()\" class=\"download-button\" matTooltip=\"Show QR Code\">\n <div class=\"tap-to-download icon-qr\"></div>\n <div>SHOW QR CODE</div>\n <div class=\"tap-to-download icon-ClickIcon\"></div>\n </div>\n <div (click)=\"identitiesSvc.copyToken(token)\" *ngIf=\"!jwtExpired && type === 'router'\" class=\"download-button\" style=\"background-color: #232f3e!important;\">\n <div class=\"download-key\"></div>\n <div>COPY ENROLLMENT TOKEN</div>\n <div class=\"tap-to-download icon-ClickIcon\"></div>\n </div>\n <div (click)=\"identitiesSvc.resetJWT(identity)\" *ngIf=\"showResetToken\" class=\"download-button\" >\n <div class=\"download-key\"></div>\n <div>RESET ENROLLMENT</div>\n <div class=\"tap-to-download icon-refresh\"></div>\n </div>\n <div (click)=\"reissue()\" *ngIf=\"showReissueToken\" class=\"download-button\" >\n <div class=\"download-key\"></div>\n <div>REISSUE ENROLLMENT</div>\n <div class=\"tap-to-download icon-refresh\"></div>\n </div>\n <div (click)=\"resetMFA()\" *ngIf=\"showResetMFA || mfaReset\" class=\"download-button\" [ngClass]=\"{'reset-success': mfaReset}\">\n <div class=\"icon-lock\"></div>\n <div>{{mfaReset ? 'MFA RESET SUCCESSFUL' : 'RESET MFA'}}</div>\n <div [ngClass]=\"{spinner: resettingMFA, 'icon-refresh': !resettingMFA, 'tap-to-download': !resettingMFA, 'icon-Icon_Check': mfaReset && !resettingMFA}\"></div>\n </div>\n </div>\n <qrcode\n *ngIf=\"qrOnly && !jwtExpired && type !== 'router'\"\n [errorCorrectionLevel]=\"'M'\" [qrdata]=\"jwt\"\n [width]=\"qrCodeSize\" (click)=\"expandQRCode()\"\n [ngClass]=\"{'qr-code-expandable': canExpand}\"\n ></qrcode>\n <div *ngIf=\"!qrOnly\" class=\"qr-code-buttons\">\n <div (click)=\"deleteEnrollment()\" *ngIf=\"hasJWT && type === 'identity'\" class=\"delete-button\">\n <div class=\"tap-to-delete icon-Icon_Delete\"></div>\n <div>DELETE ENROLLMENT</div>\n <div class=\"tap-to-delete icon-Icon_Delete\"></div>\n </div>\n <span class=\"info-text\" *ngIf=\"!jwtExpired && type === 'router'\">OR</span>\n <div (click)=\"identitiesSvc.downloadJWT(jwt, identity.name)\" *ngIf=\"!jwtExpired && type === 'router'\" class=\"download-button\">\n <div class=\"download-key\"></div>\n <div>DOWNLOAD ENROLLMENT JWT</div>\n <div class=\"tap-to-download icon-download-jwt\"></div>\n </div>\n <div (click)=\"reenroll()\" *ngIf=\"showReenrollToken\" class=\"download-button\" >\n <div class=\"download-key\"></div>\n <div>REISSUE ENROLLMENT</div>\n <div class=\"tap-to-download icon-refresh\"></div>\n </div>\n </div>\n</div>\n", styles: [".qr-code-container{display:flex;flex-direction:column;justify-content:center;align-items:center}.qr-code-container .info-text{color:var(--red);font-weight:600}.qr-code-container .delete-button,.qr-code-container .download-button{margin:.625rem 0rem}.qr-code-container .delete-button .download-jwt,.qr-code-container .download-button .download-jwt{background-image:url(/assets/svgs/newJwt.svg);background-repeat:no-repeat;background-size:1.875rem;width:1.875rem;height:1.875rem;margin-left:var(--marginXL);cursor:pointer}.qr-code-container .reset-success{opacity:.8;background-color:var(--formSubGroup);cursor:default;pointer-events:none}.qr-code-container .reset-success:active{transform:none}.qr-code-container .reset-success:hover{filter:brightness(100%)}.qr-code-container .icon-Icon_Check{font-family:icomoon!important;font-size:2rem;margin-right:1rem}.qr-code-container .icon-Icon_Check:before{content:\"\\e912\";color:var(--green)}.qr-code-container .icon-lock{margin-left:.725rem;margin-right:.525rem;text-align:center;cursor:pointer;height:2.8125rem;width:2.8125rem;z-index:10;font-size:2rem;display:flex;align-items:center;justify-content:center}.qr-code-container .icon-ClickIcon{width:3.8125rem}.qr-code-container .spinner{display:inline-block;width:var(--spinnerSizeLarge);height:var(--spinnerSizeLarge);border-radius:50%;background:transparent;border-top:var(--spinnerBorderTopLarge);border-right:var(--spinnerBorderRightLarge);border-bottom:var(--spinnerBorderBottomLarge);border-left:var(--spinnerBorderLeftLarge);animation:loading .5s infinite linear;margin-left:var(--marginSmall);margin-right:1rem;position:relative}.qr-code-container.modal-view{width:37rem;background-color:var(--background);padding:1.25rem;border-radius:.9375rem}.qr-code-container .qr-code-buttons{display:flex;flex-direction:column;justify-content:center;align-items:center;width:100%}.qr-code-container .qr-code-expandable{cursor:pointer;transition:transform .25s}.qr-code-container .qr-code-expandable:hover{transform:scale(1.15)}.identity-enrollment-container{display:flex;flex-direction:row;align-items:center;justify-content:space-between;gap:var(--gapMedium);width:100%}.identity-enrollment-container .qr-code-button{width:var(--defaultInputHeight);height:100%;font-size:var(--defaultInputHeight)}.identity-enrollment-container .qr-code-button:before{color:var(--tableText)}.delete-button:hover{filter:brightness(.85)}.delete-button .tap-to-delete.icon-Icon_Delete:before{font-weight:600;color:#fff}\n"], dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5$2.QRCodeComponent, selector: "qrcode", inputs: ["allowEmptyString", "colorDark", "colorLight", "cssClass", "elementType", "errorCorrectionLevel", "imageSrc", "imageHeight", "imageWidth", "margin", "qrdata", "scale", "version", "width", "alt", "ariaLabel", "title"], outputs: ["qrCodeURL"] }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] }); }
6356
6405
  }
6357
6406
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: QrCodeComponent, decorators: [{
6358
6407
  type: Component,
6359
- args: [{ selector: 'lib-qr-code', template: "<div class=\"qr-code-container\" [ngClass]=\"{'modal-view': isModal}\">\n <div *ngIf=\"!qrOnly\" class=\"qr-code-buttons\">\n <span class=\"info-text\" *ngIf=\"hasJWT && !jwtExpired && type !== 'router'\">TO REGISTER THIS IDENTITY</span>\n <span class=\"info-text\" *ngIf=\"hasJWT && !jwtExpired && type === 'router'\">TO REGISTER THIS ROUTER</span>\n <div (click)=\"identitiesSvc.downloadJWT(jwt, identity.name)\" *ngIf=\"hasJWT && !jwtExpired && type !== 'router'\" class=\"download-button\">\n <div class=\"download-key\"></div>\n <div>DOWNLOAD ENROLLMENT JWT</div>\n <div class=\"tap-to-download icon-ClickIcon\"></div>\n </div>\n <div (click)=\"identitiesSvc.copyToken(token)\" *ngIf=\"!jwtExpired && type === 'router'\" class=\"download-button\" style=\"background-color: #232f3e!important;\">\n <div class=\"download-key\"></div>\n <div>COPY ENROLLMENT TOKEN</div>\n <div class=\"tap-to-download icon-ClickIcon\"></div>\n </div>\n <div (click)=\"identitiesSvc.resetJWT(identity)\" *ngIf=\"showResetToken\" class=\"download-button\" >\n <div class=\"download-key\"></div>\n <div>RESET ENROLLMENT</div>\n <div class=\"tap-to-download icon-refresh\"></div>\n </div>\n <div (click)=\"reissue()\" *ngIf=\"showReissueToken\" class=\"download-button\" >\n <div class=\"download-key\"></div>\n <div>REISSUE ENROLLMENT</div>\n <div class=\"tap-to-download icon-refresh\"></div>\n </div>\n <div (click)=\"resetMFA()\" *ngIf=\"showResetMFA || mfaReset\" class=\"download-button\" [ngClass]=\"{'reset-success': mfaReset}\">\n <div class=\"icon-lock\"></div>\n <div>{{mfaReset ? 'MFA RESET SUCCESSFUL' : 'RESET MFA'}}</div>\n <div [ngClass]=\"{spinner: resettingMFA, 'icon-refresh': !resettingMFA, 'tap-to-download': !resettingMFA, 'icon-Icon_Check': mfaReset && !resettingMFA}\"></div>\n </div>\n <span class=\"info-text\" *ngIf=\"hasJWT && !jwtExpired && type !== 'router'\">OR SCAN QR CODE</span>\n </div>\n <qrcode\n *ngIf=\"!jwtExpired && type !== 'router'\"\n [errorCorrectionLevel]=\"'M'\" [qrdata]=\"jwt\"\n [width]=\"qrCodeSize\" (click)=\"expandQRCode()\"\n [ngClass]=\"{'qr-code-expandable': canExpand}\"\n ></qrcode>\n <div *ngIf=\"!qrOnly\" class=\"qr-code-buttons\">\n <span class=\"info-text\" *ngIf=\"!jwtExpired && type === 'router'\">OR</span>\n <div (click)=\"identitiesSvc.downloadJWT(jwt, identity.name)\" *ngIf=\"!jwtExpired && type === 'router'\" class=\"download-button\">\n <div class=\"download-key\"></div>\n <div>DOWNLOAD ENROLLMENT JWT</div>\n <div class=\"tap-to-download\"></div>\n </div>\n <span class=\"info-text\" *ngIf=\"!showResetToken\">{{jwtExpired ? 'REGISTRATION EXPIRED' : 'EXPIRES'}} {{expirationDate}}</span>\n <div (click)=\"reenroll()\" *ngIf=\"showReenrollToken\" class=\"download-button\" >\n <div class=\"download-key\"></div>\n <div>REISSUE ENROLLMENT</div>\n <div class=\"tap-to-download icon-refresh\"></div>\n </div>\n </div>\n</div>\n", styles: [".qr-code-container{display:flex;flex-direction:column;justify-content:center;align-items:center}.qr-code-container .info-text{color:var(--red);font-weight:600}.qr-code-container .download-button{margin:.625rem 0rem}.qr-code-container .reset-success{opacity:.8;background-color:var(--formSubGroup);cursor:default;pointer-events:none}.qr-code-container .reset-success:active{transform:none}.qr-code-container .reset-success:hover{filter:brightness(100%)}.qr-code-container .icon-Icon_Check{font-family:icomoon!important;font-size:2rem;margin-right:1rem}.qr-code-container .icon-Icon_Check:before{content:\"\\e912\";color:var(--green)}.qr-code-container .icon-lock{margin-left:.725rem;margin-right:.525rem;text-align:center;cursor:pointer;height:2.8125rem;width:2.8125rem;z-index:10;font-size:2rem;display:flex;align-items:center;justify-content:center}.qr-code-container .icon-ClickIcon{width:3.8125rem}.qr-code-container .spinner{display:inline-block;width:var(--spinnerSizeLarge);height:var(--spinnerSizeLarge);border-radius:50%;background:transparent;border-top:var(--spinnerBorderTopLarge);border-right:var(--spinnerBorderRightLarge);border-bottom:var(--spinnerBorderBottomLarge);border-left:var(--spinnerBorderLeftLarge);animation:loading .5s infinite linear;margin-left:var(--marginSmall);margin-right:1rem;position:relative}.qr-code-container.modal-view{width:31.25rem;background-color:var(--background);padding:1.25rem;border-radius:.9375rem}.qr-code-container .qr-code-buttons{display:flex;flex-direction:column;justify-content:center;align-items:center;width:100%}.qr-code-container .qr-code-expandable{cursor:pointer;transition:transform .25s}.qr-code-container .qr-code-expandable:hover{transform:scale(1.15)}\n"] }]
6408
+ args: [{ selector: 'lib-qr-code', template: "<div class=\"qr-code-container\" [ngClass]=\"{'modal-view': isModal}\">\n <div *ngIf=\"!qrOnly\" class=\"qr-code-buttons\">\n <div *ngIf=\"hasJWT && !jwtExpired && type !== 'router'\" (click)=\"identitiesSvc.downloadJWT(jwt, identity.name)\" class=\"download-button\">\n <div class=\"download-jwt\"></div>\n <div>DOWNLOAD JWT</div>\n <div class=\"tap-to-download icon-download-jwt\"></div>\n </div>\n <div *ngIf=\"hasJWT && !jwtExpired && type !== 'router'\" (click)=\"expandQRCode()\" class=\"download-button\" matTooltip=\"Show QR Code\">\n <div class=\"tap-to-download icon-qr\"></div>\n <div>SHOW QR CODE</div>\n <div class=\"tap-to-download icon-ClickIcon\"></div>\n </div>\n <div (click)=\"identitiesSvc.copyToken(token)\" *ngIf=\"!jwtExpired && type === 'router'\" class=\"download-button\" style=\"background-color: #232f3e!important;\">\n <div class=\"download-key\"></div>\n <div>COPY ENROLLMENT TOKEN</div>\n <div class=\"tap-to-download icon-ClickIcon\"></div>\n </div>\n <div (click)=\"identitiesSvc.resetJWT(identity)\" *ngIf=\"showResetToken\" class=\"download-button\" >\n <div class=\"download-key\"></div>\n <div>RESET ENROLLMENT</div>\n <div class=\"tap-to-download icon-refresh\"></div>\n </div>\n <div (click)=\"reissue()\" *ngIf=\"showReissueToken\" class=\"download-button\" >\n <div class=\"download-key\"></div>\n <div>REISSUE ENROLLMENT</div>\n <div class=\"tap-to-download icon-refresh\"></div>\n </div>\n <div (click)=\"resetMFA()\" *ngIf=\"showResetMFA || mfaReset\" class=\"download-button\" [ngClass]=\"{'reset-success': mfaReset}\">\n <div class=\"icon-lock\"></div>\n <div>{{mfaReset ? 'MFA RESET SUCCESSFUL' : 'RESET MFA'}}</div>\n <div [ngClass]=\"{spinner: resettingMFA, 'icon-refresh': !resettingMFA, 'tap-to-download': !resettingMFA, 'icon-Icon_Check': mfaReset && !resettingMFA}\"></div>\n </div>\n </div>\n <qrcode\n *ngIf=\"qrOnly && !jwtExpired && type !== 'router'\"\n [errorCorrectionLevel]=\"'M'\" [qrdata]=\"jwt\"\n [width]=\"qrCodeSize\" (click)=\"expandQRCode()\"\n [ngClass]=\"{'qr-code-expandable': canExpand}\"\n ></qrcode>\n <div *ngIf=\"!qrOnly\" class=\"qr-code-buttons\">\n <div (click)=\"deleteEnrollment()\" *ngIf=\"hasJWT && type === 'identity'\" class=\"delete-button\">\n <div class=\"tap-to-delete icon-Icon_Delete\"></div>\n <div>DELETE ENROLLMENT</div>\n <div class=\"tap-to-delete icon-Icon_Delete\"></div>\n </div>\n <span class=\"info-text\" *ngIf=\"!jwtExpired && type === 'router'\">OR</span>\n <div (click)=\"identitiesSvc.downloadJWT(jwt, identity.name)\" *ngIf=\"!jwtExpired && type === 'router'\" class=\"download-button\">\n <div class=\"download-key\"></div>\n <div>DOWNLOAD ENROLLMENT JWT</div>\n <div class=\"tap-to-download icon-download-jwt\"></div>\n </div>\n <div (click)=\"reenroll()\" *ngIf=\"showReenrollToken\" class=\"download-button\" >\n <div class=\"download-key\"></div>\n <div>REISSUE ENROLLMENT</div>\n <div class=\"tap-to-download icon-refresh\"></div>\n </div>\n </div>\n</div>\n", styles: [".qr-code-container{display:flex;flex-direction:column;justify-content:center;align-items:center}.qr-code-container .info-text{color:var(--red);font-weight:600}.qr-code-container .delete-button,.qr-code-container .download-button{margin:.625rem 0rem}.qr-code-container .delete-button .download-jwt,.qr-code-container .download-button .download-jwt{background-image:url(/assets/svgs/newJwt.svg);background-repeat:no-repeat;background-size:1.875rem;width:1.875rem;height:1.875rem;margin-left:var(--marginXL);cursor:pointer}.qr-code-container .reset-success{opacity:.8;background-color:var(--formSubGroup);cursor:default;pointer-events:none}.qr-code-container .reset-success:active{transform:none}.qr-code-container .reset-success:hover{filter:brightness(100%)}.qr-code-container .icon-Icon_Check{font-family:icomoon!important;font-size:2rem;margin-right:1rem}.qr-code-container .icon-Icon_Check:before{content:\"\\e912\";color:var(--green)}.qr-code-container .icon-lock{margin-left:.725rem;margin-right:.525rem;text-align:center;cursor:pointer;height:2.8125rem;width:2.8125rem;z-index:10;font-size:2rem;display:flex;align-items:center;justify-content:center}.qr-code-container .icon-ClickIcon{width:3.8125rem}.qr-code-container .spinner{display:inline-block;width:var(--spinnerSizeLarge);height:var(--spinnerSizeLarge);border-radius:50%;background:transparent;border-top:var(--spinnerBorderTopLarge);border-right:var(--spinnerBorderRightLarge);border-bottom:var(--spinnerBorderBottomLarge);border-left:var(--spinnerBorderLeftLarge);animation:loading .5s infinite linear;margin-left:var(--marginSmall);margin-right:1rem;position:relative}.qr-code-container.modal-view{width:37rem;background-color:var(--background);padding:1.25rem;border-radius:.9375rem}.qr-code-container .qr-code-buttons{display:flex;flex-direction:column;justify-content:center;align-items:center;width:100%}.qr-code-container .qr-code-expandable{cursor:pointer;transition:transform .25s}.qr-code-container .qr-code-expandable:hover{transform:scale(1.15)}.identity-enrollment-container{display:flex;flex-direction:row;align-items:center;justify-content:space-between;gap:var(--gapMedium);width:100%}.identity-enrollment-container .qr-code-button{width:var(--defaultInputHeight);height:100%;font-size:var(--defaultInputHeight)}.identity-enrollment-container .qr-code-button:before{color:var(--tableText)}.delete-button:hover{filter:brightness(.85)}.delete-button .tap-to-delete.icon-Icon_Delete:before{font-weight:600;color:#fff}\n"] }]
6360
6409
  }], ctorParameters: function () { return [{ type: i5$1.MatDialogRef, decorators: [{
6361
6410
  type: Optional
6362
6411
  }] }, { type: i5$1.MatDialog, decorators: [{
@@ -6999,11 +7048,11 @@ class TagSelectorComponent {
6999
7048
  return this._selectedRoleAttributes?.length <= 0 && this._selectedNamedAttributes?.length <= 0;
7000
7049
  }
7001
7050
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TagSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
7002
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TagSelectorComponent, selector: "lib-tag-selector", inputs: { placeholder: "placeholder", disableField: "disableField", disableCreate: "disableCreate", hideOption: "hideOption", isLoading: "isLoading", errorMessage: "errorMessage", focusOnInit: "focusOnInit", selectedRoleAttributes: "selectedRoleAttributes", selectedNamedAttributes: "selectedNamedAttributes", hasError: "hasError", availableRoleAttributes: "availableRoleAttributes", availableNamedAttributes: "availableNamedAttributes" }, outputs: { addRoleAttribute: "addRoleAttribute", addNamedAttribute: "addNamedAttribute", roleAttributeRemoved: "roleAttributeRemoved", namedAttributeRemoved: "namedAttributeRemoved", selectedRoleAttributesChange: "selectedRoleAttributesChange", selectedNamedAttributesChange: "selectedNamedAttributesChange", filterChange: "filterChange" }, viewQueries: [{ propertyName: "search", first: true, predicate: ["search"], descendants: true }, { propertyName: "dropdownWrapper", first: true, predicate: ["dropdownWrapper"], descendants: true }], ngImport: i0, template: "<span (clickOutside)=\"hide()\" [ngClass]=\"{ readOnly: disableField }\" class=\"clickOutside fullWidth tagsSelector\" >\n <span\n class=\"select2 select2-container select2-container--default select2-container--below select2-container--focus\"\n dir=\"ltr\"\n >\n <span class=\"selection\">\n <span\n [ngClass]=\"{ 'select2-selection-focus': !hideSelect, tagError: _hasError }\"\n aria-expanded=\"false\"\n aria-haspopup=\"true\"\n class=\"select2-selection select2-selection--multiple\"\n role=\"combobox\"\n tabindex=\"-1\"\n >\n <input\n (focus)=\"inputFocus()\"\n (keydown)=\"handleKeyDown($event);\"\n (keyup)=\"handleKeyUp($event, filterString);\"\n (mouseup)=\"applyFilterMouseUp()\"\n [(ngModel)]=\"filterString\"\n [disabled]=\"disableField\"\n [ngClass]=\"{ empty: isNothingSelected, tagError: _hasError }\"\n aria-autocomplete=\"list\"\n autocapitalize=\"off\"\n autocomplete=\"off\"\n autocorrect=\"off\"\n class=\"select2-search__field\"\n placeholder=\"{{disableField ? (isNothingSelected ? 'Nothing selected' : '') : placeholder}}\"\n role=\"textbox\"\n spellcheck=\"false\"\n tabindex=\"0\"\n type=\"search\"\n #search\n />\n <span *ngIf=\"isLoading\" class=\"spinner\"></span>\n\n <ul\n (click)=\"openSelect()\"\n [ngClass]=\"{ error: _hasError, readOnly: disableField, empty: isNothingSelected }\"\n class=\"select2-selection__rendered\"\n >\n <li\n (click)=\"$event.stopPropagation()\"\n *ngFor=\"let item of _selectedRoleAttributes\"\n [hidden]=\"item === this.hideOption\"\n class=\"hashtag select2-selection__choice\"\n title=\"#{{ item }}\"\n >\n <span\n (click)=\"removeRoleAttribute(item); $event.stopPropagation()\"\n class=\"select2-selection__choice__remove\"\n role=\"presentation\"\n >\u00D7</span\n ><span class=\"select2-selection__choice__text\">#{{ item }}</span>\n </li>\n <li\n (click)=\"$event.stopPropagation()\"\n *ngFor=\"let item of _selectedNamedAttributes\"\n [hidden]=\"item === this.hideOption\"\n class=\"select2-selection_choice_item\"\n >\n <div class=\"attag select2-selection__choice\" title=\"@{{ item }}\">\n <span\n class=\"select2-selection__choice__remove\"\n role=\"presentation\"\n >\u00D7</span\n ><span class=\"select2-selection__choice__text\">@{{ item }}</span>\n </div>\n <div class=\"tag-name select2-selection__choice\" title=\"@{{ item }}\">\n <span\n (click)=\"removeNamedAttribute(item); $event.stopPropagation()\"\n class=\"select2-selection__choice__remove\"\n role=\"presentation\"\n >\u00D7</span\n ><span class=\"select2-selection__choice__text\">@{{ item }}</span>\n </div>\n </li>\n </ul>\n </span>\n </span>\n <span aria-hidden=\"true\" class=\"dropdown-wrapper\" tabindex=\"-1\" #dropdownWrapper></span>\n </span>\n <span *ngIf=\"_hasError\" class=\"err\">\n {{ errorMessage }}\n </span>\n\n <span\n *ngIf=\"!hideSelect\"\n [ngClass]=\"{ withBorder: !hideSelect }\"\n class=\"nf-select2-dropdown select2-dropdown--below\"\n dir=\"ltr\"\n >\n <span class=\"select2-results\">\n <ul\n aria-expanded=\"true\"\n aria-hidden=\"false\"\n aria-multiselectable=\"true\"\n class=\"select2-results__options\"\n role=\"tree\"\n >\n <li\n (click)=\"addNewAttribute(filterString)\"\n [hidden]=\"filterString === '' || isAttributeSelected(filterString)\"\n aria-selected=\"false\"\n class=\"select2-results__option hashtag\"\n role=\"treeitem\"\n title=\"{{ filterString }} (New Attribute)\"\n >\n {{ filterString }} (New Attribute)\n </li>\n <li\n (click)=\"addSelectedRoleAttribute(option)\"\n *ngFor=\"let option of displayedRoleOptions\"\n [hidden]=\"option === this.hideOption || isSelected(option)\"\n aria-selected=\"false\"\n class=\"hashtag select2-results__option\"\n role=\"treeitem\"\n >\n #{{ option }}\n </li>\n <li\n (click)=\"addSelectedNamedAttribute(option)\"\n *ngFor=\"let option of displayedNamedOptions\"\n [hidden]=\"option === this.hideOption || isSelected(option)\"\n aria-selected=\"false\"\n >\n <div class=\"attag select2-results__option\" title=\"@{{ option }}\" role=\"treeitem\">\n @{{ option }}\n </div>\n <div class=\"tag-name select2-results__option\" title=\"@{{ option }}\" role=\"treeitem\">\n @{{ option }}\n </div>\n </li>\n </ul>\n </span>\n </span>\n</span>\n", styles: [".searchSelector .tagButton{cursor:pointer;transition:.5s}.select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container.select2-container--focus .select2-selection.select2-selection-focus{border-color:var(--primaryColor)}.select2-container.select2-container--focus .select2-selection .select2-selection__choice__text{cursor:text;user-select:text;-webkit-user-select:text}.select2-container--default .select2-selection--multiple input{height:calc(var(--defaultInputHeight) - .1875rem)}.select2-container--default .select2-selection--multiple .select2-selection__choice{overflow:hidden;text-wrap:wrap;display:flex}.select2-container--default .select2-selection--multiple .select2-selection__choice.attag{background-color:var(--secondary);color:transparent;position:absolute}.select2-container--default .select2-selection--multiple .select2-selection__choice.tag-name{background-color:transparent}.select2-results__options li{display:flex;flex-direction:row;width:-moz-fit-content;width:fit-content;height:-moz-fit-content;height:fit-content;position:relative}.select2-results__options li[hidden]{display:none}.select2-results__option.tag-name,.select2-results__option.attag,.select2-results__option.hashtag,.select2-selection__choice.tag-name,.select2-selection__choice.attag,.select2-selection__choice.hashtag{margin-bottom:0rem;margin-top:0rem;font-size:1rem;font-weight:600;line-height:unset;padding:.3125rem .625rem;float:left;border-radius:var(--inputBorderRadius);margin-left:.125rem;transition:var(--transition);overflow:hidden;text-wrap:wrap;display:flex}.select2-results__option.hashtag,.select2-selection__choice.hashtag{background-color:var(--primary);position:relative;color:var(--white)}.select2-results__option.attag,.select2-selection__choice.attag{background-color:var(--secondary);color:transparent;position:absolute}.select2-results__option.tag-name,.select2-selection__choice.tag-name{background-color:transparent;position:relative;color:var(--white)}.err{color:var(--red)!important}.select2-selection{border-radius:var(--inputBorderRadius);border-width:var(--inputBorderWidth);border-color:var(--inputBorder);border-style:solid;color:var(--white);padding-left:0rem}.select2-selection.select2-selection-focus{border-color:var(--primaryColor)}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:1.75rem;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:.5rem;padding-right:1.25rem;overflow-y:auto;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-selection--single .select2-selection__clear{position:relative}.select2-container[dir=rtl] .select2-selection--single .select2-selection__rendered{padding-right:.5rem;padding-left:1.25rem}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:flex;flex-direction:column;min-height:2rem;user-select:none;-webkit-user-select:none;border-radius:var(--inputBorderRadius);border:.125rem solid var(--stroke);color:var(--white);padding-left:0;background-color:var(--table);overflow:hidden}.select2-container .select2-selection--multiple .select2-selection__rendered .select2-selection_choice_item{width:-moz-fit-content;width:fit-content;overflow:hidden;position:relative}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow-y:auto;overflow-x:hidden;padding-left:.5rem;padding-right:.5rem;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;font-size:100%;margin-top:.3125rem;padding:0}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-results{display:flex;flex-grow:1;height:-moz-fit-content;height:fit-content;width:100%;gap:.625rem;padding:.625rem}.select2-results__options{list-style:none;margin:0;padding:0;display:flex;flex-flow:wrap;width:100%;gap:.3125rem}.select2-results__option{display:flex;height:-moz-fit-content;height:fit-content;padding-left:.625rem;padding-top:.125rem;padding-bottom:.125rem;font-size:1rem;font-weight:600;user-select:none;-webkit-user-select:none;margin:0}.select2-results__option[hidden]{display:none}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:.25rem}.select2-search--dropdown .select2-search__field{padding:.25rem;width:100%;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-hidden-accessible{border:0!important;clip:rect(0 0 0 0)!important;height:.0625rem!important;margin:-.0625rem!important;overflow:hidden!important;padding:0!important;position:absolute!important;width:.0625rem!important}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 .25rem .3125rem .25rem}.select2-container--default .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;width:100%;background-color:var(--background);border-radius:.3125rem;border-top-right-radius:0;border-top-left-radius:0;display:flex;flex-wrap:wrap;gap:.3125rem;padding:0rem .3125rem .3125rem}.select2-container--default .select2-selection--multiple .select2-selection__rendered.empty{padding:0;margin:0}.select2-container--default .select2-selection--multiple .select2-selection__rendered li{list-style:none}.select2-container--default .select2-selection--multiple .select2-selection__placeholder{color:var(--placeholder);margin-top:.3125rem;float:left}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:400;margin-top:.3125rem;margin-right:.625rem}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:var(--white);cursor:pointer;display:inline-block;font-weight:400;margin-right:.25rem}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:var(--white);filter:brightness(90%);transition:.3s}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:active{filter:brightness(80%);transform:scale(.97);transition:.3s}.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__placeholder,.select2-container--default[dir=rtl] .select2-selection--multiple .select2-search--inline{float:right}.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice{margin-left:.3125rem;margin-right:auto}.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice__remove{margin-left:.125rem;margin-right:auto}.readOnly{opacity:.75;cursor:default}.readOnly .select2-container .select2-selection__rendered:not(.empty){min-height:var(--defaultInputHeight)}.readOnly .select2-container input:disabled{font-weight:600;font-family:Open Sans,Arial,sans-serif;height:0rem!important;width:100%;padding-left:.625rem;padding-right:.625rem;margin-bottom:0rem;border:none;outline:none;box-sizing:border-box;box-shadow:none;cursor:text;text-align:left;background-color:var(--background)!important;color:var(--tableText);text-transform:none}.readOnly .select2-container input:disabled:hover{box-shadow:none;filter:none}.readOnly .select2-container input:disabled.empty{height:3.125rem}.fullModal .select2-container--default.select2-container--focus .select2-selection--multiple{border-radius:var(--inputBorderRadius);border:.125rem solid var(--inputBorder);color:var(--white);padding-left:0}.fullModal .select2-container--default .select2-selection--multiple .select2-selection__rendered{margin-bottom:-.1875rem;border-color:var(--primaryColor)}.fullModal .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{position:absolute;left:.625rem;font-size:1.625rem;cursor:pointer;display:inline-block;font-weight:400;margin-right:.125rem;color:var(--white)}.fullModal .select2-container--default .select2-selection--multiple{background-color:unset}.fullModal .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:var(--primaryColor)}.select2-container .select2-dropdown{background-color:var(--background)}.select2-container.select2-container--default .select2-results__option[aria-selected=true]{background-color:var(--primaryColor)}.nf-select2-dropdown{background-color:var(--menu);border-top:0rem;border-radius:var(--inputBorderRadius);color:var(--white);box-sizing:border-box;display:flex;flex-grow:1;height:-moz-fit-content;height:fit-content;position:absolute;width:100%;z-index:99999;max-height:12.5rem;overflow:auto;font-weight:600;margin-top:.0625rem;box-shadow:0 0 0 .0625rem var(--shadow),0 .5rem 1rem var(--shadow)!important}.select2-results__option:hover{background-color:var(--icon)!important;color:var(--white);cursor:pointer}.select2-search__field{border-width:0rem;width:100%}.select2-container input{padding-top:.125rem;border-radius:0}.select2-container--below.select2-container--focus{width:75%}.nf-select2-dropdown.select2-dropdown--below{width:31.4375rem}.roleForm .select2-container--below.select2-container--focus,.roleForm .nf-select2-dropdown.select2-dropdown--below{width:26.0625rem}.fullWidth .select2-container--below.select2-container--focus,.fullWidth .nf-select2-dropdown.select2-dropdown--below{width:100%}.nf-select2-dropdown.select2-dropdown--below.withBorder{border:none}input{box-shadow:none;font-size:.875rem}.tagError{border-color:var(--red)!important}::ng-deep .select2-container ::placeholder{color:var(--placeholder)}.spinner{position:absolute;right:1em;top:1em;display:inline-block;width:2rem;height:2rem;border-radius:50%;background:transparent;border-top:.3125rem solid var(--placeholder);border-right:.3125rem solid var(--placeholder);border-bottom:.3125rem solid transparent;border-left:.3125rem solid transparent;animation:loading .5s infinite linear}.tagsSelector.clickOutside{position:relative}\n"], dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3$2.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { kind: "directive", type: i2.ClickOutsideDirective, selector: "[clickOutside]", inputs: ["clickOutsideEnabled", "attachOutsideOnClick", "delayClickOutsideInit", "emitOnBlur", "exclude", "excludeBeforeClick", "clickOutsideEvents"], outputs: ["clickOutside"] }] }); }
7051
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TagSelectorComponent, selector: "lib-tag-selector", inputs: { placeholder: "placeholder", disableField: "disableField", disableCreate: "disableCreate", hideOption: "hideOption", isLoading: "isLoading", errorMessage: "errorMessage", focusOnInit: "focusOnInit", selectedRoleAttributes: "selectedRoleAttributes", selectedNamedAttributes: "selectedNamedAttributes", hasError: "hasError", availableRoleAttributes: "availableRoleAttributes", availableNamedAttributes: "availableNamedAttributes" }, outputs: { addRoleAttribute: "addRoleAttribute", addNamedAttribute: "addNamedAttribute", roleAttributeRemoved: "roleAttributeRemoved", namedAttributeRemoved: "namedAttributeRemoved", selectedRoleAttributesChange: "selectedRoleAttributesChange", selectedNamedAttributesChange: "selectedNamedAttributesChange", filterChange: "filterChange" }, viewQueries: [{ propertyName: "search", first: true, predicate: ["search"], descendants: true }, { propertyName: "dropdownWrapper", first: true, predicate: ["dropdownWrapper"], descendants: true }], ngImport: i0, template: "<span (clickOutside)=\"hide()\" [ngClass]=\"{ readOnly: disableField }\" class=\"clickOutside fullWidth tagsSelector\" >\n <span\n class=\"select2 select2-container select2-container--default select2-container--below select2-container--focus\"\n dir=\"ltr\"\n >\n <span class=\"selection\">\n <span\n [ngClass]=\"{ 'select2-selection-focus': !hideSelect, tagError: _hasError }\"\n aria-expanded=\"false\"\n aria-haspopup=\"true\"\n class=\"select2-selection select2-selection--multiple\"\n role=\"combobox\"\n tabindex=\"-1\"\n >\n <input\n (focus)=\"inputFocus()\"\n (keydown)=\"handleKeyDown($event);\"\n (keyup)=\"handleKeyUp($event, filterString);\"\n (mouseup)=\"applyFilterMouseUp()\"\n [(ngModel)]=\"filterString\"\n [disabled]=\"disableField\"\n [ngClass]=\"{ empty: isNothingSelected, tagError: _hasError }\"\n aria-autocomplete=\"list\"\n autocapitalize=\"off\"\n autocomplete=\"off\"\n autocorrect=\"off\"\n class=\"select2-search__field\"\n placeholder=\"{{disableField ? (isNothingSelected ? 'Nothing selected' : '') : placeholder}}\"\n role=\"textbox\"\n spellcheck=\"false\"\n tabindex=\"0\"\n type=\"search\"\n #search\n />\n <span *ngIf=\"isLoading\" class=\"spinner\"></span>\n\n <ul\n (click)=\"openSelect()\"\n [ngClass]=\"{ error: _hasError, readOnly: disableField, empty: isNothingSelected }\"\n class=\"select2-selection__rendered\"\n >\n <li\n (click)=\"$event.stopPropagation()\"\n *ngFor=\"let item of _selectedRoleAttributes\"\n [hidden]=\"item === this.hideOption\"\n class=\"hashtag select2-selection__choice\"\n title=\"#{{ item }}\"\n >\n <span\n (click)=\"removeRoleAttribute(item); $event.stopPropagation()\"\n class=\"select2-selection__choice__remove\"\n role=\"presentation\"\n >\u00D7</span\n ><span class=\"select2-selection__choice__text\">#{{ item }}</span>\n </li>\n <li\n (click)=\"$event.stopPropagation()\"\n *ngFor=\"let item of _selectedNamedAttributes\"\n [hidden]=\"item === this.hideOption\"\n class=\"select2-selection_choice_item\"\n >\n <div class=\"attag select2-selection__choice\" title=\"@{{ item }}\">\n <span\n class=\"select2-selection__choice__remove\"\n role=\"presentation\"\n >\u00D7</span\n ><span class=\"select2-selection__choice__text\">@{{ item }}</span>\n </div>\n <div class=\"tag-name select2-selection__choice\" title=\"@{{ item }}\">\n <span\n (click)=\"removeNamedAttribute(item); $event.stopPropagation()\"\n class=\"select2-selection__choice__remove\"\n role=\"presentation\"\n >\u00D7</span\n ><span class=\"select2-selection__choice__text\">@{{ item }}</span>\n </div>\n </li>\n </ul>\n </span>\n </span>\n <span aria-hidden=\"true\" class=\"dropdown-wrapper\" tabindex=\"-1\" #dropdownWrapper></span>\n </span>\n <span *ngIf=\"_hasError\" class=\"err\">\n {{ errorMessage }}\n </span>\n\n <span\n *ngIf=\"!hideSelect\"\n [ngClass]=\"{ withBorder: !hideSelect }\"\n class=\"nf-select2-dropdown select2-dropdown--below\"\n dir=\"ltr\"\n >\n <span class=\"select2-results\">\n <ul\n aria-expanded=\"true\"\n aria-hidden=\"false\"\n aria-multiselectable=\"true\"\n class=\"select2-results__options\"\n role=\"tree\"\n >\n <li\n (click)=\"addNewAttribute(filterString)\"\n [hidden]=\"filterString === '' || isAttributeSelected(filterString)\"\n aria-selected=\"false\"\n class=\"select2-results__option hashtag\"\n role=\"treeitem\"\n title=\"{{ filterString }} (New Attribute)\"\n >\n {{ filterString }} (New Attribute)\n </li>\n <li\n (click)=\"addSelectedRoleAttribute(option)\"\n *ngFor=\"let option of displayedRoleOptions\"\n [hidden]=\"option === this.hideOption || isSelected(option)\"\n aria-selected=\"false\"\n class=\"hashtag select2-results__option\"\n role=\"treeitem\"\n >\n #{{ option }}\n </li>\n <li\n (click)=\"addSelectedNamedAttribute(option)\"\n *ngFor=\"let option of displayedNamedOptions\"\n [hidden]=\"option === this.hideOption || isSelected(option)\"\n aria-selected=\"false\"\n >\n <div class=\"attag select2-results__option\" title=\"@{{ option }}\" role=\"treeitem\">\n @{{ option }}\n </div>\n <div class=\"tag-name select2-results__option\" title=\"@{{ option }}\" role=\"treeitem\">\n @{{ option }}\n </div>\n </li>\n </ul>\n </span>\n </span>\n</span>\n", styles: [".searchSelector .tagButton{cursor:pointer;transition:.5s}.select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container.select2-container--focus .select2-selection.select2-selection-focus{border-color:var(--primaryColor)}.select2-container.select2-container--focus .select2-selection .select2-selection__choice__text{cursor:text;user-select:text;-webkit-user-select:text}.select2-container--default .select2-selection--multiple input{height:calc(var(--defaultInputHeight) - .1875rem)}.select2-container--default .select2-selection--multiple .select2-selection__choice{overflow:hidden;text-wrap:wrap;display:flex}.select2-container--default .select2-selection--multiple .select2-selection__choice.attag{background-color:var(--secondary);color:transparent;position:absolute}.select2-container--default .select2-selection--multiple .select2-selection__choice.tag-name{background-color:transparent}.select2-results__options li{display:flex;flex-direction:row;width:-moz-fit-content;width:fit-content;height:-moz-fit-content;height:fit-content;position:relative}.select2-results__options li[hidden]{display:none}.select2-results__option.tag-name,.select2-results__option.attag,.select2-results__option.hashtag,.select2-selection__choice.tag-name,.select2-selection__choice.attag,.select2-selection__choice.hashtag{margin-bottom:0rem;margin-top:0rem;font-size:1rem;font-weight:600;line-height:unset;padding:.3125rem .625rem;float:left;border-radius:var(--inputBorderRadius);margin-left:.125rem;transition:var(--transition);overflow:hidden;text-wrap:wrap;display:flex}.select2-results__option.hashtag,.select2-selection__choice.hashtag{background-color:var(--primary);position:relative;color:var(--offWhite_ALWAYS)}.select2-results__option.attag,.select2-selection__choice.attag{background-color:var(--secondary);color:transparent;position:absolute}.select2-results__option.tag-name,.select2-selection__choice.tag-name{background-color:transparent;position:relative;color:var(--offWhite_ALWAYS)}.err{color:var(--red)!important}.select2-selection{border-radius:var(--inputBorderRadius);border-width:var(--inputBorderWidth);border-color:var(--inputBorder);border-style:solid;color:var(--offWhite_ALWAYS);padding-left:0rem}.select2-selection.select2-selection-focus{border-color:var(--primaryColor)}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:1.75rem;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:.5rem;padding-right:1.25rem;overflow-y:auto;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-selection--single .select2-selection__clear{position:relative}.select2-container[dir=rtl] .select2-selection--single .select2-selection__rendered{padding-right:.5rem;padding-left:1.25rem}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:flex;flex-direction:column;min-height:2rem;user-select:none;-webkit-user-select:none;border-radius:var(--inputBorderRadius);border:.125rem solid var(--stroke);color:var(--white);padding-left:0;background-color:var(--table);overflow:hidden}.select2-container .select2-selection--multiple .select2-selection__rendered .select2-selection_choice_item{width:-moz-fit-content;width:fit-content;overflow:hidden;position:relative}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow-y:auto;overflow-x:hidden;padding-left:.5rem;padding-right:.5rem;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;font-size:100%;margin-top:.3125rem;padding:0}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-results{display:flex;flex-grow:1;height:-moz-fit-content;height:fit-content;width:100%;gap:.625rem;padding:.625rem}.select2-results__options{list-style:none;margin:0;padding:0;display:flex;flex-flow:wrap;width:100%;gap:.3125rem}.select2-results__option{display:flex;height:-moz-fit-content;height:fit-content;padding-left:.625rem;padding-top:.125rem;padding-bottom:.125rem;font-size:1rem;font-weight:600;user-select:none;-webkit-user-select:none;margin:0}.select2-results__option[hidden]{display:none}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:.25rem}.select2-search--dropdown .select2-search__field{padding:.25rem;width:100%;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-hidden-accessible{border:0!important;clip:rect(0 0 0 0)!important;height:.0625rem!important;margin:-.0625rem!important;overflow:hidden!important;padding:0!important;position:absolute!important;width:.0625rem!important}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 .25rem .3125rem .25rem}.select2-container--default .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;width:100%;background-color:var(--background);border-radius:0;display:flex;flex-wrap:wrap;gap:.3125rem;padding:0rem .3125rem .3125rem}.select2-container--default .select2-selection--multiple .select2-selection__rendered.empty{padding:0;margin:0}.select2-container--default .select2-selection--multiple .select2-selection__rendered li{list-style:none}.select2-container--default .select2-selection--multiple .select2-selection__placeholder{color:var(--placeholder);margin-top:.3125rem;float:left}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:400;margin-top:.3125rem;margin-right:.625rem}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:var(--white);cursor:pointer;display:inline-block;font-weight:400;margin-right:.25rem}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:var(--white);filter:brightness(90%);transition:.3s}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:active{filter:brightness(80%);transform:scale(.97);transition:.3s}.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__placeholder,.select2-container--default[dir=rtl] .select2-selection--multiple .select2-search--inline{float:right}.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice{margin-left:.3125rem;margin-right:auto}.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice__remove{margin-left:.125rem;margin-right:auto}.readOnly{opacity:.75;cursor:default}.readOnly .select2-container .select2-selection__rendered:not(.empty){min-height:var(--defaultInputHeight)}.readOnly .select2-container input:disabled{font-weight:600;font-family:Open Sans,Arial,sans-serif;height:0rem!important;width:100%;padding-left:.625rem;padding-right:.625rem;margin-bottom:0rem;border:none;outline:none;box-sizing:border-box;box-shadow:none;cursor:text;text-align:left;background-color:var(--background)!important;color:var(--tableText);text-transform:none}.readOnly .select2-container input:disabled:hover{box-shadow:none;filter:none}.readOnly .select2-container input:disabled.empty{height:3.125rem}.fullModal .select2-container--default.select2-container--focus .select2-selection--multiple{border-radius:var(--inputBorderRadius);border:.125rem solid var(--inputBorder);color:var(--white);padding-left:0}.fullModal .select2-container--default .select2-selection--multiple .select2-selection__rendered{margin-bottom:-.1875rem;border-color:var(--primaryColor)}.fullModal .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{position:absolute;left:.625rem;font-size:1.625rem;cursor:pointer;display:inline-block;font-weight:400;margin-right:.125rem;color:var(--white)}.fullModal .select2-container--default .select2-selection--multiple{background-color:unset}.fullModal .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:var(--primaryColor)}.select2-container .select2-dropdown{background-color:var(--background)}.select2-container.select2-container--default .select2-results__option[aria-selected=true]{background-color:var(--primaryColor)}.nf-select2-dropdown{background-color:var(--menu);border-top:0rem;border-radius:var(--inputBorderRadius);color:var(--white);box-sizing:border-box;display:flex;flex-grow:1;height:-moz-fit-content;height:fit-content;position:absolute;width:100%;z-index:99999;max-height:12.5rem;overflow:auto;font-weight:600;margin-top:.0625rem;box-shadow:0 0 0 .0625rem var(--shadow),0 .5rem 1rem var(--shadow)!important}.select2-results__option:hover{background-color:var(--icon)!important;color:var(--white);cursor:pointer}.select2-search__field{border-width:0rem;width:100%}.select2-container input{padding-top:.125rem;border-radius:0}.select2-container--below.select2-container--focus{width:75%}.nf-select2-dropdown.select2-dropdown--below{width:31.4375rem}.roleForm .select2-container--below.select2-container--focus,.roleForm .nf-select2-dropdown.select2-dropdown--below{width:26.0625rem}.fullWidth .select2-container--below.select2-container--focus,.fullWidth .nf-select2-dropdown.select2-dropdown--below{width:100%}.nf-select2-dropdown.select2-dropdown--below.withBorder{border:none}input{box-shadow:none;font-size:.875rem}.tagError{border-color:var(--red)!important}::ng-deep .select2-container ::placeholder{color:var(--placeholder)}.spinner{position:absolute;right:1em;top:1em;display:inline-block;width:2rem;height:2rem;border-radius:50%;background:transparent;border-top:.3125rem solid var(--placeholder);border-right:.3125rem solid var(--placeholder);border-bottom:.3125rem solid transparent;border-left:.3125rem solid transparent;animation:loading .5s infinite linear}.tagsSelector.clickOutside{position:relative}\n"], dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3$2.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { kind: "directive", type: i2.ClickOutsideDirective, selector: "[clickOutside]", inputs: ["clickOutsideEnabled", "attachOutsideOnClick", "delayClickOutsideInit", "emitOnBlur", "exclude", "excludeBeforeClick", "clickOutsideEvents"], outputs: ["clickOutside"] }] }); }
7003
7052
  }
7004
7053
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TagSelectorComponent, decorators: [{
7005
7054
  type: Component,
7006
- args: [{ selector: 'lib-tag-selector', template: "<span (clickOutside)=\"hide()\" [ngClass]=\"{ readOnly: disableField }\" class=\"clickOutside fullWidth tagsSelector\" >\n <span\n class=\"select2 select2-container select2-container--default select2-container--below select2-container--focus\"\n dir=\"ltr\"\n >\n <span class=\"selection\">\n <span\n [ngClass]=\"{ 'select2-selection-focus': !hideSelect, tagError: _hasError }\"\n aria-expanded=\"false\"\n aria-haspopup=\"true\"\n class=\"select2-selection select2-selection--multiple\"\n role=\"combobox\"\n tabindex=\"-1\"\n >\n <input\n (focus)=\"inputFocus()\"\n (keydown)=\"handleKeyDown($event);\"\n (keyup)=\"handleKeyUp($event, filterString);\"\n (mouseup)=\"applyFilterMouseUp()\"\n [(ngModel)]=\"filterString\"\n [disabled]=\"disableField\"\n [ngClass]=\"{ empty: isNothingSelected, tagError: _hasError }\"\n aria-autocomplete=\"list\"\n autocapitalize=\"off\"\n autocomplete=\"off\"\n autocorrect=\"off\"\n class=\"select2-search__field\"\n placeholder=\"{{disableField ? (isNothingSelected ? 'Nothing selected' : '') : placeholder}}\"\n role=\"textbox\"\n spellcheck=\"false\"\n tabindex=\"0\"\n type=\"search\"\n #search\n />\n <span *ngIf=\"isLoading\" class=\"spinner\"></span>\n\n <ul\n (click)=\"openSelect()\"\n [ngClass]=\"{ error: _hasError, readOnly: disableField, empty: isNothingSelected }\"\n class=\"select2-selection__rendered\"\n >\n <li\n (click)=\"$event.stopPropagation()\"\n *ngFor=\"let item of _selectedRoleAttributes\"\n [hidden]=\"item === this.hideOption\"\n class=\"hashtag select2-selection__choice\"\n title=\"#{{ item }}\"\n >\n <span\n (click)=\"removeRoleAttribute(item); $event.stopPropagation()\"\n class=\"select2-selection__choice__remove\"\n role=\"presentation\"\n >\u00D7</span\n ><span class=\"select2-selection__choice__text\">#{{ item }}</span>\n </li>\n <li\n (click)=\"$event.stopPropagation()\"\n *ngFor=\"let item of _selectedNamedAttributes\"\n [hidden]=\"item === this.hideOption\"\n class=\"select2-selection_choice_item\"\n >\n <div class=\"attag select2-selection__choice\" title=\"@{{ item }}\">\n <span\n class=\"select2-selection__choice__remove\"\n role=\"presentation\"\n >\u00D7</span\n ><span class=\"select2-selection__choice__text\">@{{ item }}</span>\n </div>\n <div class=\"tag-name select2-selection__choice\" title=\"@{{ item }}\">\n <span\n (click)=\"removeNamedAttribute(item); $event.stopPropagation()\"\n class=\"select2-selection__choice__remove\"\n role=\"presentation\"\n >\u00D7</span\n ><span class=\"select2-selection__choice__text\">@{{ item }}</span>\n </div>\n </li>\n </ul>\n </span>\n </span>\n <span aria-hidden=\"true\" class=\"dropdown-wrapper\" tabindex=\"-1\" #dropdownWrapper></span>\n </span>\n <span *ngIf=\"_hasError\" class=\"err\">\n {{ errorMessage }}\n </span>\n\n <span\n *ngIf=\"!hideSelect\"\n [ngClass]=\"{ withBorder: !hideSelect }\"\n class=\"nf-select2-dropdown select2-dropdown--below\"\n dir=\"ltr\"\n >\n <span class=\"select2-results\">\n <ul\n aria-expanded=\"true\"\n aria-hidden=\"false\"\n aria-multiselectable=\"true\"\n class=\"select2-results__options\"\n role=\"tree\"\n >\n <li\n (click)=\"addNewAttribute(filterString)\"\n [hidden]=\"filterString === '' || isAttributeSelected(filterString)\"\n aria-selected=\"false\"\n class=\"select2-results__option hashtag\"\n role=\"treeitem\"\n title=\"{{ filterString }} (New Attribute)\"\n >\n {{ filterString }} (New Attribute)\n </li>\n <li\n (click)=\"addSelectedRoleAttribute(option)\"\n *ngFor=\"let option of displayedRoleOptions\"\n [hidden]=\"option === this.hideOption || isSelected(option)\"\n aria-selected=\"false\"\n class=\"hashtag select2-results__option\"\n role=\"treeitem\"\n >\n #{{ option }}\n </li>\n <li\n (click)=\"addSelectedNamedAttribute(option)\"\n *ngFor=\"let option of displayedNamedOptions\"\n [hidden]=\"option === this.hideOption || isSelected(option)\"\n aria-selected=\"false\"\n >\n <div class=\"attag select2-results__option\" title=\"@{{ option }}\" role=\"treeitem\">\n @{{ option }}\n </div>\n <div class=\"tag-name select2-results__option\" title=\"@{{ option }}\" role=\"treeitem\">\n @{{ option }}\n </div>\n </li>\n </ul>\n </span>\n </span>\n</span>\n", styles: [".searchSelector .tagButton{cursor:pointer;transition:.5s}.select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container.select2-container--focus .select2-selection.select2-selection-focus{border-color:var(--primaryColor)}.select2-container.select2-container--focus .select2-selection .select2-selection__choice__text{cursor:text;user-select:text;-webkit-user-select:text}.select2-container--default .select2-selection--multiple input{height:calc(var(--defaultInputHeight) - .1875rem)}.select2-container--default .select2-selection--multiple .select2-selection__choice{overflow:hidden;text-wrap:wrap;display:flex}.select2-container--default .select2-selection--multiple .select2-selection__choice.attag{background-color:var(--secondary);color:transparent;position:absolute}.select2-container--default .select2-selection--multiple .select2-selection__choice.tag-name{background-color:transparent}.select2-results__options li{display:flex;flex-direction:row;width:-moz-fit-content;width:fit-content;height:-moz-fit-content;height:fit-content;position:relative}.select2-results__options li[hidden]{display:none}.select2-results__option.tag-name,.select2-results__option.attag,.select2-results__option.hashtag,.select2-selection__choice.tag-name,.select2-selection__choice.attag,.select2-selection__choice.hashtag{margin-bottom:0rem;margin-top:0rem;font-size:1rem;font-weight:600;line-height:unset;padding:.3125rem .625rem;float:left;border-radius:var(--inputBorderRadius);margin-left:.125rem;transition:var(--transition);overflow:hidden;text-wrap:wrap;display:flex}.select2-results__option.hashtag,.select2-selection__choice.hashtag{background-color:var(--primary);position:relative;color:var(--white)}.select2-results__option.attag,.select2-selection__choice.attag{background-color:var(--secondary);color:transparent;position:absolute}.select2-results__option.tag-name,.select2-selection__choice.tag-name{background-color:transparent;position:relative;color:var(--white)}.err{color:var(--red)!important}.select2-selection{border-radius:var(--inputBorderRadius);border-width:var(--inputBorderWidth);border-color:var(--inputBorder);border-style:solid;color:var(--white);padding-left:0rem}.select2-selection.select2-selection-focus{border-color:var(--primaryColor)}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:1.75rem;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:.5rem;padding-right:1.25rem;overflow-y:auto;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-selection--single .select2-selection__clear{position:relative}.select2-container[dir=rtl] .select2-selection--single .select2-selection__rendered{padding-right:.5rem;padding-left:1.25rem}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:flex;flex-direction:column;min-height:2rem;user-select:none;-webkit-user-select:none;border-radius:var(--inputBorderRadius);border:.125rem solid var(--stroke);color:var(--white);padding-left:0;background-color:var(--table);overflow:hidden}.select2-container .select2-selection--multiple .select2-selection__rendered .select2-selection_choice_item{width:-moz-fit-content;width:fit-content;overflow:hidden;position:relative}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow-y:auto;overflow-x:hidden;padding-left:.5rem;padding-right:.5rem;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;font-size:100%;margin-top:.3125rem;padding:0}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-results{display:flex;flex-grow:1;height:-moz-fit-content;height:fit-content;width:100%;gap:.625rem;padding:.625rem}.select2-results__options{list-style:none;margin:0;padding:0;display:flex;flex-flow:wrap;width:100%;gap:.3125rem}.select2-results__option{display:flex;height:-moz-fit-content;height:fit-content;padding-left:.625rem;padding-top:.125rem;padding-bottom:.125rem;font-size:1rem;font-weight:600;user-select:none;-webkit-user-select:none;margin:0}.select2-results__option[hidden]{display:none}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:.25rem}.select2-search--dropdown .select2-search__field{padding:.25rem;width:100%;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-hidden-accessible{border:0!important;clip:rect(0 0 0 0)!important;height:.0625rem!important;margin:-.0625rem!important;overflow:hidden!important;padding:0!important;position:absolute!important;width:.0625rem!important}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 .25rem .3125rem .25rem}.select2-container--default .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;width:100%;background-color:var(--background);border-radius:.3125rem;border-top-right-radius:0;border-top-left-radius:0;display:flex;flex-wrap:wrap;gap:.3125rem;padding:0rem .3125rem .3125rem}.select2-container--default .select2-selection--multiple .select2-selection__rendered.empty{padding:0;margin:0}.select2-container--default .select2-selection--multiple .select2-selection__rendered li{list-style:none}.select2-container--default .select2-selection--multiple .select2-selection__placeholder{color:var(--placeholder);margin-top:.3125rem;float:left}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:400;margin-top:.3125rem;margin-right:.625rem}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:var(--white);cursor:pointer;display:inline-block;font-weight:400;margin-right:.25rem}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:var(--white);filter:brightness(90%);transition:.3s}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:active{filter:brightness(80%);transform:scale(.97);transition:.3s}.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__placeholder,.select2-container--default[dir=rtl] .select2-selection--multiple .select2-search--inline{float:right}.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice{margin-left:.3125rem;margin-right:auto}.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice__remove{margin-left:.125rem;margin-right:auto}.readOnly{opacity:.75;cursor:default}.readOnly .select2-container .select2-selection__rendered:not(.empty){min-height:var(--defaultInputHeight)}.readOnly .select2-container input:disabled{font-weight:600;font-family:Open Sans,Arial,sans-serif;height:0rem!important;width:100%;padding-left:.625rem;padding-right:.625rem;margin-bottom:0rem;border:none;outline:none;box-sizing:border-box;box-shadow:none;cursor:text;text-align:left;background-color:var(--background)!important;color:var(--tableText);text-transform:none}.readOnly .select2-container input:disabled:hover{box-shadow:none;filter:none}.readOnly .select2-container input:disabled.empty{height:3.125rem}.fullModal .select2-container--default.select2-container--focus .select2-selection--multiple{border-radius:var(--inputBorderRadius);border:.125rem solid var(--inputBorder);color:var(--white);padding-left:0}.fullModal .select2-container--default .select2-selection--multiple .select2-selection__rendered{margin-bottom:-.1875rem;border-color:var(--primaryColor)}.fullModal .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{position:absolute;left:.625rem;font-size:1.625rem;cursor:pointer;display:inline-block;font-weight:400;margin-right:.125rem;color:var(--white)}.fullModal .select2-container--default .select2-selection--multiple{background-color:unset}.fullModal .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:var(--primaryColor)}.select2-container .select2-dropdown{background-color:var(--background)}.select2-container.select2-container--default .select2-results__option[aria-selected=true]{background-color:var(--primaryColor)}.nf-select2-dropdown{background-color:var(--menu);border-top:0rem;border-radius:var(--inputBorderRadius);color:var(--white);box-sizing:border-box;display:flex;flex-grow:1;height:-moz-fit-content;height:fit-content;position:absolute;width:100%;z-index:99999;max-height:12.5rem;overflow:auto;font-weight:600;margin-top:.0625rem;box-shadow:0 0 0 .0625rem var(--shadow),0 .5rem 1rem var(--shadow)!important}.select2-results__option:hover{background-color:var(--icon)!important;color:var(--white);cursor:pointer}.select2-search__field{border-width:0rem;width:100%}.select2-container input{padding-top:.125rem;border-radius:0}.select2-container--below.select2-container--focus{width:75%}.nf-select2-dropdown.select2-dropdown--below{width:31.4375rem}.roleForm .select2-container--below.select2-container--focus,.roleForm .nf-select2-dropdown.select2-dropdown--below{width:26.0625rem}.fullWidth .select2-container--below.select2-container--focus,.fullWidth .nf-select2-dropdown.select2-dropdown--below{width:100%}.nf-select2-dropdown.select2-dropdown--below.withBorder{border:none}input{box-shadow:none;font-size:.875rem}.tagError{border-color:var(--red)!important}::ng-deep .select2-container ::placeholder{color:var(--placeholder)}.spinner{position:absolute;right:1em;top:1em;display:inline-block;width:2rem;height:2rem;border-radius:50%;background:transparent;border-top:.3125rem solid var(--placeholder);border-right:.3125rem solid var(--placeholder);border-bottom:.3125rem solid transparent;border-left:.3125rem solid transparent;animation:loading .5s infinite linear}.tagsSelector.clickOutside{position:relative}\n"] }]
7055
+ args: [{ selector: 'lib-tag-selector', template: "<span (clickOutside)=\"hide()\" [ngClass]=\"{ readOnly: disableField }\" class=\"clickOutside fullWidth tagsSelector\" >\n <span\n class=\"select2 select2-container select2-container--default select2-container--below select2-container--focus\"\n dir=\"ltr\"\n >\n <span class=\"selection\">\n <span\n [ngClass]=\"{ 'select2-selection-focus': !hideSelect, tagError: _hasError }\"\n aria-expanded=\"false\"\n aria-haspopup=\"true\"\n class=\"select2-selection select2-selection--multiple\"\n role=\"combobox\"\n tabindex=\"-1\"\n >\n <input\n (focus)=\"inputFocus()\"\n (keydown)=\"handleKeyDown($event);\"\n (keyup)=\"handleKeyUp($event, filterString);\"\n (mouseup)=\"applyFilterMouseUp()\"\n [(ngModel)]=\"filterString\"\n [disabled]=\"disableField\"\n [ngClass]=\"{ empty: isNothingSelected, tagError: _hasError }\"\n aria-autocomplete=\"list\"\n autocapitalize=\"off\"\n autocomplete=\"off\"\n autocorrect=\"off\"\n class=\"select2-search__field\"\n placeholder=\"{{disableField ? (isNothingSelected ? 'Nothing selected' : '') : placeholder}}\"\n role=\"textbox\"\n spellcheck=\"false\"\n tabindex=\"0\"\n type=\"search\"\n #search\n />\n <span *ngIf=\"isLoading\" class=\"spinner\"></span>\n\n <ul\n (click)=\"openSelect()\"\n [ngClass]=\"{ error: _hasError, readOnly: disableField, empty: isNothingSelected }\"\n class=\"select2-selection__rendered\"\n >\n <li\n (click)=\"$event.stopPropagation()\"\n *ngFor=\"let item of _selectedRoleAttributes\"\n [hidden]=\"item === this.hideOption\"\n class=\"hashtag select2-selection__choice\"\n title=\"#{{ item }}\"\n >\n <span\n (click)=\"removeRoleAttribute(item); $event.stopPropagation()\"\n class=\"select2-selection__choice__remove\"\n role=\"presentation\"\n >\u00D7</span\n ><span class=\"select2-selection__choice__text\">#{{ item }}</span>\n </li>\n <li\n (click)=\"$event.stopPropagation()\"\n *ngFor=\"let item of _selectedNamedAttributes\"\n [hidden]=\"item === this.hideOption\"\n class=\"select2-selection_choice_item\"\n >\n <div class=\"attag select2-selection__choice\" title=\"@{{ item }}\">\n <span\n class=\"select2-selection__choice__remove\"\n role=\"presentation\"\n >\u00D7</span\n ><span class=\"select2-selection__choice__text\">@{{ item }}</span>\n </div>\n <div class=\"tag-name select2-selection__choice\" title=\"@{{ item }}\">\n <span\n (click)=\"removeNamedAttribute(item); $event.stopPropagation()\"\n class=\"select2-selection__choice__remove\"\n role=\"presentation\"\n >\u00D7</span\n ><span class=\"select2-selection__choice__text\">@{{ item }}</span>\n </div>\n </li>\n </ul>\n </span>\n </span>\n <span aria-hidden=\"true\" class=\"dropdown-wrapper\" tabindex=\"-1\" #dropdownWrapper></span>\n </span>\n <span *ngIf=\"_hasError\" class=\"err\">\n {{ errorMessage }}\n </span>\n\n <span\n *ngIf=\"!hideSelect\"\n [ngClass]=\"{ withBorder: !hideSelect }\"\n class=\"nf-select2-dropdown select2-dropdown--below\"\n dir=\"ltr\"\n >\n <span class=\"select2-results\">\n <ul\n aria-expanded=\"true\"\n aria-hidden=\"false\"\n aria-multiselectable=\"true\"\n class=\"select2-results__options\"\n role=\"tree\"\n >\n <li\n (click)=\"addNewAttribute(filterString)\"\n [hidden]=\"filterString === '' || isAttributeSelected(filterString)\"\n aria-selected=\"false\"\n class=\"select2-results__option hashtag\"\n role=\"treeitem\"\n title=\"{{ filterString }} (New Attribute)\"\n >\n {{ filterString }} (New Attribute)\n </li>\n <li\n (click)=\"addSelectedRoleAttribute(option)\"\n *ngFor=\"let option of displayedRoleOptions\"\n [hidden]=\"option === this.hideOption || isSelected(option)\"\n aria-selected=\"false\"\n class=\"hashtag select2-results__option\"\n role=\"treeitem\"\n >\n #{{ option }}\n </li>\n <li\n (click)=\"addSelectedNamedAttribute(option)\"\n *ngFor=\"let option of displayedNamedOptions\"\n [hidden]=\"option === this.hideOption || isSelected(option)\"\n aria-selected=\"false\"\n >\n <div class=\"attag select2-results__option\" title=\"@{{ option }}\" role=\"treeitem\">\n @{{ option }}\n </div>\n <div class=\"tag-name select2-results__option\" title=\"@{{ option }}\" role=\"treeitem\">\n @{{ option }}\n </div>\n </li>\n </ul>\n </span>\n </span>\n</span>\n", styles: [".searchSelector .tagButton{cursor:pointer;transition:.5s}.select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container.select2-container--focus .select2-selection.select2-selection-focus{border-color:var(--primaryColor)}.select2-container.select2-container--focus .select2-selection .select2-selection__choice__text{cursor:text;user-select:text;-webkit-user-select:text}.select2-container--default .select2-selection--multiple input{height:calc(var(--defaultInputHeight) - .1875rem)}.select2-container--default .select2-selection--multiple .select2-selection__choice{overflow:hidden;text-wrap:wrap;display:flex}.select2-container--default .select2-selection--multiple .select2-selection__choice.attag{background-color:var(--secondary);color:transparent;position:absolute}.select2-container--default .select2-selection--multiple .select2-selection__choice.tag-name{background-color:transparent}.select2-results__options li{display:flex;flex-direction:row;width:-moz-fit-content;width:fit-content;height:-moz-fit-content;height:fit-content;position:relative}.select2-results__options li[hidden]{display:none}.select2-results__option.tag-name,.select2-results__option.attag,.select2-results__option.hashtag,.select2-selection__choice.tag-name,.select2-selection__choice.attag,.select2-selection__choice.hashtag{margin-bottom:0rem;margin-top:0rem;font-size:1rem;font-weight:600;line-height:unset;padding:.3125rem .625rem;float:left;border-radius:var(--inputBorderRadius);margin-left:.125rem;transition:var(--transition);overflow:hidden;text-wrap:wrap;display:flex}.select2-results__option.hashtag,.select2-selection__choice.hashtag{background-color:var(--primary);position:relative;color:var(--offWhite_ALWAYS)}.select2-results__option.attag,.select2-selection__choice.attag{background-color:var(--secondary);color:transparent;position:absolute}.select2-results__option.tag-name,.select2-selection__choice.tag-name{background-color:transparent;position:relative;color:var(--offWhite_ALWAYS)}.err{color:var(--red)!important}.select2-selection{border-radius:var(--inputBorderRadius);border-width:var(--inputBorderWidth);border-color:var(--inputBorder);border-style:solid;color:var(--offWhite_ALWAYS);padding-left:0rem}.select2-selection.select2-selection-focus{border-color:var(--primaryColor)}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:1.75rem;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:.5rem;padding-right:1.25rem;overflow-y:auto;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-selection--single .select2-selection__clear{position:relative}.select2-container[dir=rtl] .select2-selection--single .select2-selection__rendered{padding-right:.5rem;padding-left:1.25rem}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:flex;flex-direction:column;min-height:2rem;user-select:none;-webkit-user-select:none;border-radius:var(--inputBorderRadius);border:.125rem solid var(--stroke);color:var(--white);padding-left:0;background-color:var(--table);overflow:hidden}.select2-container .select2-selection--multiple .select2-selection__rendered .select2-selection_choice_item{width:-moz-fit-content;width:fit-content;overflow:hidden;position:relative}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow-y:auto;overflow-x:hidden;padding-left:.5rem;padding-right:.5rem;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;font-size:100%;margin-top:.3125rem;padding:0}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-results{display:flex;flex-grow:1;height:-moz-fit-content;height:fit-content;width:100%;gap:.625rem;padding:.625rem}.select2-results__options{list-style:none;margin:0;padding:0;display:flex;flex-flow:wrap;width:100%;gap:.3125rem}.select2-results__option{display:flex;height:-moz-fit-content;height:fit-content;padding-left:.625rem;padding-top:.125rem;padding-bottom:.125rem;font-size:1rem;font-weight:600;user-select:none;-webkit-user-select:none;margin:0}.select2-results__option[hidden]{display:none}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:.25rem}.select2-search--dropdown .select2-search__field{padding:.25rem;width:100%;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-hidden-accessible{border:0!important;clip:rect(0 0 0 0)!important;height:.0625rem!important;margin:-.0625rem!important;overflow:hidden!important;padding:0!important;position:absolute!important;width:.0625rem!important}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 .25rem .3125rem .25rem}.select2-container--default .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;width:100%;background-color:var(--background);border-radius:0;display:flex;flex-wrap:wrap;gap:.3125rem;padding:0rem .3125rem .3125rem}.select2-container--default .select2-selection--multiple .select2-selection__rendered.empty{padding:0;margin:0}.select2-container--default .select2-selection--multiple .select2-selection__rendered li{list-style:none}.select2-container--default .select2-selection--multiple .select2-selection__placeholder{color:var(--placeholder);margin-top:.3125rem;float:left}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:400;margin-top:.3125rem;margin-right:.625rem}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:var(--white);cursor:pointer;display:inline-block;font-weight:400;margin-right:.25rem}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:var(--white);filter:brightness(90%);transition:.3s}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:active{filter:brightness(80%);transform:scale(.97);transition:.3s}.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__placeholder,.select2-container--default[dir=rtl] .select2-selection--multiple .select2-search--inline{float:right}.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice{margin-left:.3125rem;margin-right:auto}.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice__remove{margin-left:.125rem;margin-right:auto}.readOnly{opacity:.75;cursor:default}.readOnly .select2-container .select2-selection__rendered:not(.empty){min-height:var(--defaultInputHeight)}.readOnly .select2-container input:disabled{font-weight:600;font-family:Open Sans,Arial,sans-serif;height:0rem!important;width:100%;padding-left:.625rem;padding-right:.625rem;margin-bottom:0rem;border:none;outline:none;box-sizing:border-box;box-shadow:none;cursor:text;text-align:left;background-color:var(--background)!important;color:var(--tableText);text-transform:none}.readOnly .select2-container input:disabled:hover{box-shadow:none;filter:none}.readOnly .select2-container input:disabled.empty{height:3.125rem}.fullModal .select2-container--default.select2-container--focus .select2-selection--multiple{border-radius:var(--inputBorderRadius);border:.125rem solid var(--inputBorder);color:var(--white);padding-left:0}.fullModal .select2-container--default .select2-selection--multiple .select2-selection__rendered{margin-bottom:-.1875rem;border-color:var(--primaryColor)}.fullModal .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{position:absolute;left:.625rem;font-size:1.625rem;cursor:pointer;display:inline-block;font-weight:400;margin-right:.125rem;color:var(--white)}.fullModal .select2-container--default .select2-selection--multiple{background-color:unset}.fullModal .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:var(--primaryColor)}.select2-container .select2-dropdown{background-color:var(--background)}.select2-container.select2-container--default .select2-results__option[aria-selected=true]{background-color:var(--primaryColor)}.nf-select2-dropdown{background-color:var(--menu);border-top:0rem;border-radius:var(--inputBorderRadius);color:var(--white);box-sizing:border-box;display:flex;flex-grow:1;height:-moz-fit-content;height:fit-content;position:absolute;width:100%;z-index:99999;max-height:12.5rem;overflow:auto;font-weight:600;margin-top:.0625rem;box-shadow:0 0 0 .0625rem var(--shadow),0 .5rem 1rem var(--shadow)!important}.select2-results__option:hover{background-color:var(--icon)!important;color:var(--white);cursor:pointer}.select2-search__field{border-width:0rem;width:100%}.select2-container input{padding-top:.125rem;border-radius:0}.select2-container--below.select2-container--focus{width:75%}.nf-select2-dropdown.select2-dropdown--below{width:31.4375rem}.roleForm .select2-container--below.select2-container--focus,.roleForm .nf-select2-dropdown.select2-dropdown--below{width:26.0625rem}.fullWidth .select2-container--below.select2-container--focus,.fullWidth .nf-select2-dropdown.select2-dropdown--below{width:100%}.nf-select2-dropdown.select2-dropdown--below.withBorder{border:none}input{box-shadow:none;font-size:.875rem}.tagError{border-color:var(--red)!important}::ng-deep .select2-container ::placeholder{color:var(--placeholder)}.spinner{position:absolute;right:1em;top:1em;display:inline-block;width:2rem;height:2rem;border-radius:50%;background:transparent;border-top:.3125rem solid var(--placeholder);border-right:.3125rem solid var(--placeholder);border-bottom:.3125rem solid transparent;border-left:.3125rem solid transparent;animation:loading .5s infinite linear}.tagsSelector.clickOutside{position:relative}\n"] }]
7007
7056
  }], ctorParameters: function () { return []; }, propDecorators: { placeholder: [{
7008
7057
  type: Input
7009
7058
  }], disableField: [{
@@ -11854,7 +11903,7 @@ class ServicePolicyFormService {
11854
11903
  });
11855
11904
  }
11856
11905
  getAssociatedIdentitiesById(id) {
11857
- this.zitiService.getSubdata('service-policies', id, 'identities').then((result) => {
11906
+ return this.zitiService.getSubdata('service-policies', id, 'identities').then((result) => {
11858
11907
  this.associatedIdentities = result.data;
11859
11908
  this.associatedIdentityNames = this.associatedIdentities.map((ident) => {
11860
11909
  return ident.name;
@@ -11869,13 +11918,13 @@ class ServicePolicyFormService {
11869
11918
  });
11870
11919
  });
11871
11920
  }
11872
- getAssociatedServicesByAttribute(roleAttributes, namedAttributes) {
11921
+ getAssociatedServicesByAttribute(roleAttributes, namedAttributes, semantic = 'AnyOf') {
11873
11922
  this.associatedServiceNames = [];
11874
11923
  if (isEmpty(roleAttributes)) {
11875
11924
  this.associatedServiceNames = [...namedAttributes];
11876
11925
  return Promise.resolve([]);
11877
11926
  }
11878
- const filters = this.zitiService.getRoleFilter(roleAttributes);
11927
+ const filters = this.zitiService.getRoleFilter(roleAttributes, semantic);
11879
11928
  const paging = this.zitiService.DEFAULT_PAGING;
11880
11929
  paging.noSearch = false;
11881
11930
  return this.zitiService.get('services', paging, filters).then((result) => {
@@ -11890,13 +11939,13 @@ class ServicePolicyFormService {
11890
11939
  return this.associatedServices;
11891
11940
  });
11892
11941
  }
11893
- getAssociatedIdentitiesByAttribute(roleAttributes, namedAttributes) {
11942
+ getAssociatedIdentitiesByAttribute(roleAttributes, namedAttributes, semantic = 'AnyOf') {
11894
11943
  this.associatedIdentityNames = [];
11895
11944
  if (isEmpty(roleAttributes)) {
11896
11945
  this.associatedIdentityNames = [...namedAttributes];
11897
11946
  return;
11898
11947
  }
11899
- const filters = this.zitiService.getRoleFilter(roleAttributes);
11948
+ const filters = this.zitiService.getRoleFilter(roleAttributes, semantic);
11900
11949
  const paging = this.zitiService.DEFAULT_PAGING;
11901
11950
  paging.noSearch = false;
11902
11951
  this.zitiService.get('identities', paging, filters).then((result) => {
@@ -11910,13 +11959,13 @@ class ServicePolicyFormService {
11910
11959
  this.associatedIdentityNames = this.associatedIdentityNames.filter(item => item !== undefined);
11911
11960
  });
11912
11961
  }
11913
- getAssociatedPostureChecksByAttribute(roleAttributes, namedAttributes) {
11962
+ getAssociatedPostureChecksByAttribute(roleAttributes, namedAttributes, semantic = 'AnyOf') {
11914
11963
  this.associatedPostureCheckNames = [];
11915
11964
  if (isEmpty(roleAttributes)) {
11916
11965
  this.associatedPostureCheckNames = [...namedAttributes];
11917
11966
  return;
11918
11967
  }
11919
- const filters = this.zitiService.getRoleFilter(roleAttributes);
11968
+ const filters = this.zitiService.getRoleFilter(roleAttributes, semantic);
11920
11969
  const paging = this.zitiService.DEFAULT_PAGING;
11921
11970
  paging.noSearch = false;
11922
11971
  this.zitiService.get('posture-checks', paging, filters).then((result) => {
@@ -13064,6 +13113,7 @@ class IdentityFormComponent extends ProjectableForm {
13064
13113
  this.entityType = 'identities';
13065
13114
  this.entityClass = Identity$1;
13066
13115
  this.isEditing = false;
13116
+ this.expirationDate = '';
13067
13117
  this.associatedServicePolicies = [];
13068
13118
  this.associatedServicePolicyNames = [];
13069
13119
  this.associatedServices = [];
@@ -13140,6 +13190,7 @@ class IdentityFormComponent extends ProjectableForm {
13140
13190
  }
13141
13191
  this.jwt = this.identitiesService.getJWT(this.formData);
13142
13192
  this.enrollmentExpiration = this.identitiesService.getEnrollmentExpiration(this.formData);
13193
+ this.updateExpirationDate();
13143
13194
  }
13144
13195
  }
13145
13196
  refreshIdentity() {
@@ -13147,6 +13198,7 @@ class IdentityFormComponent extends ProjectableForm {
13147
13198
  this.formData = result.data;
13148
13199
  this.initData = cloneDeep(this.formData);
13149
13200
  this.enrollmentExpiration = this.identitiesService.getEnrollmentExpiration(this.formData);
13201
+ this.updateExpirationDate();
13150
13202
  this.jwt = this.identitiesService.getJWT(this.formData);
13151
13203
  this.updateBadges();
13152
13204
  this.extService.updateFormData(this.formData);
@@ -13224,9 +13276,6 @@ class IdentityFormComponent extends ProjectableForm {
13224
13276
  get hasEnrolmentToken() {
13225
13277
  return this.identitiesService.hasEnrolmentToken(this.formData);
13226
13278
  }
13227
- get jwtExpired() {
13228
- return false;
13229
- }
13230
13279
  headerActionRequested(action) {
13231
13280
  switch (action.name) {
13232
13281
  case 'save':
@@ -13361,6 +13410,16 @@ class IdentityFormComponent extends ProjectableForm {
13361
13410
  get entityDisabled() {
13362
13411
  return this.formData?.disabled;
13363
13412
  }
13413
+ get showResetToken() {
13414
+ return this.formData?.authenticators?.cert?.id || this.formData?.authenticators?.updb?.id;
13415
+ }
13416
+ updateExpirationDate() {
13417
+ this.expirationDate = moment(this.enrollmentExpiration).local().format('M/D/YY h:mm a');
13418
+ this.jwtExpired = this.getJwtExpired();
13419
+ }
13420
+ getJwtExpired() {
13421
+ return moment(this.enrollmentExpiration).isBefore();
13422
+ }
13364
13423
  disableIdentity() {
13365
13424
  const localDate = moment(this.disableDuration).local();
13366
13425
  const minutesDifference = localDate.diff(moment(), 'minutes');
@@ -13438,7 +13497,7 @@ class IdentityFormComponent extends ProjectableForm {
13438
13497
  provide: MatDialogRef,
13439
13498
  useValue: {}
13440
13499
  }
13441
- ], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"projectable-form-wrapper\"\n (keyup.enter)=\"save($event)\"\n (keyup.escape)=\"closeModal(false)\"\n [class.projectable-form-hidden]=\"!dataInit\"\n>\n <lib-form-header\n [data]=\"formData\"\n [title]=\"formData.id ? 'Edit Identity: ' : 'Create New Identity'\"\n [moreActions]=\"moreActions\"\n (actionRequested)=\"headerActionRequested($event)\"\n [(formView)]=\"formView\"\n [class.is-scrolled]=\"isScrolled\"\n ></lib-form-header>\n <div class=\"identity-form-container projectable-form-container\" #formContainer>\n <div class=\"projectable-form-main-column form-group-row\" *ngIf=\"formView === 'simple'\">\n <div class=\"form-group-column three-fifths\">\n <lib-form-field-container [title]=\"'Identity Name'\" [label]=\"'REQUIRED'\">\n <input\n class=\"form-field-input\"\n placeholder=\"Name this identity\"\n [ngClass]=\"{error: errors['name']}\"\n [(ngModel)]=\"formData.name\"\n autofocus\n #nameFieldInput\n />\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select or create Identity attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 99999999'\"\n [helpText]=\"'Attributes are tags applied to an resource. Apply the same tag to other Identities to form a group of Identities.'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"formData.roleAttributes\"\n [availableRoleAttributes]=\"identityRoleAttributes\"\n [placeholder]=\"'Add attributes to group Identities'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <ng-content select=\"[slot=column-1-slot-1]\"></ng-content>\n <lib-form-field-container\n [title]=\"'Auth Policy'\"\n [label]=\"'OPTIONAL'\"\n [helpText]=\"'Authentication Policies restrict the authentication methods available to identities.'\"\n >\n <select\n [(ngModel)]=\"formData.authPolicyId\"\n id=\"authPolicyId\"\n class=\"form-field-dropdown\"\n >\n <option value=\"\">Select an Authentication Policy</option>\n <option\n *ngFor=\"let policy of authPolicies\"\n [value]=\"policy.id\"\n >\n {{ policy.name }}\n </option>\n </select>\n <div class=\"form-field-label-container\" style=\"gap: var(--paddingMedium)\">\n <div class=\"form-field-header\">\n <div class=\"form-field-title-container\">\n <span class=\"form-field-title\">External ID</span>\n </div>\n <span class=\"form-field-label\">OPTIONAL</span>\n </div>\n <input class=\"form-field-input\" placeholder=\"Optional External ID\" [(ngModel)]=\"formData.externalId\"/>\n </div>\n </lib-form-field-container>\n <ng-content select=\"[slot=column-1-slot-2]\"></ng-content>\n <lib-form-field-toggle [(toggleOn)]=\"showMore\" (toggleOnChange)=\"showMoreChanged($event)\" style=\"margin: 0px 10px\"></lib-form-field-toggle>\n <div [hidden]=\"!showMore\" class=\"form-group-column\">\n <lib-form-field-container\n [title]=\"'Enrollment Type'\"\n [title2]=\"enrollmentTypeTitle\"\n [layout]=\"'row'\"\n class=\"form-field-advanced\"\n >\n <select\n id=\"EnrollmentType\"\n class=\"form-field-dropdown\"\n [ngClass]=\"{disabled: isEditing}\"\n [(ngModel)]=\"enrollmentType\"\n (change)=\"updateEnrollment()\"\n >\n <option value=\"ott\">One Time Token</option>\n <option value=\"CA\">Certificate Authority</option>\n <option value=\"updb\">UPDB</option>\n <option value=\"none\">None</option>\n </select>\n <select\n id=\"CertAuthorities\"\n class=\"form-field-dropdown\"\n *ngIf=\"enrollmentType === 'CA'\"\n [ngClass]=\"{disabled: isEditing}\"\n [(ngModel)]=\"enrollmentCA\"\n [ngClass]=\"{error: errors.enrollmentCA}\"\n (change)=\"updateEnrollment()\"\n >\n <option *ngFor=\"let ca of cas\" [value]=\"ca.id\">{{ca.name}}</option>\n </select>\n <input\n *ngIf=\"enrollmentType === 'updb' && !isEditing\"\n [ngClass]=\"{disabled: isEditing, error: errors.enrollmentUPDB}\"\n [(ngModel)]=\"enrollmentUPDB\"\n (keyup)=\"updateEnrollment()\"\n class=\"form-field-input\"\n id=\"UPDBName\"\n type=\"text\"\n maxlength=\"500\"\n placeholder=\"Enter a name\"\n >\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Admin'\"\n [layout]=\"'row'\"\n class=\"form-field-advanced is-admin-container\"\n >\n <div class=\"config-item\">\n <div class=\"config-container toggle-container\">\n <div class=\"config-container-label\">IS ADMIN</div>\n <div\n (click)=\"toggleIsAdmin()\"\n [ngClass]=\"{ on: formData.isAdmin }\"\n class=\"toggle\"\n >\n <span [hidden]=\"!formData.isAdmin\" class=\"on-label\">YES</span>\n <span [hidden]=\"formData.isAdmin\" class=\"off-label\">NO</span>\n <div class=\"switch\"></div>\n </div>\n </div>\n </div>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Hosting Cost'\"\n [title2]=\"'Precedence'\"\n [layout]=\"'row'\"\n class=\"form-field-advanced\"\n >\n <input class=\"form-field-input\" [(ngModel)]=\"formData.defaultHostingCost\" type=\"number\"/>\n <select\n [(ngModel)]=\"formData.defaultHostingPrecedence\"\n id=\"hostingPrecedence\"\n class=\"form-field-dropdown\"\n >\n <option value=\"default\">Default</option>\n <option value=\"required\">Required</option>\n <option value=\"failed\">Failed</option>\n </select>\n </lib-form-field-container>\n <lib-form-field-container *ngFor=\"let tagElement of tagElements\"\n [title]=\"tagElement.label\"\n [label]=\"'OPTIONAL'\"\n class=\"form-field-advanced\"\n >\n <div [innerHTML]=\"tagElement.content | safe\"></div>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Custom Tags'\"\n [label]=\"'OPTIONAL'\"\n class=\"form-field-advanced\"\n *ngIf=\"!hideTags\"\n >\n <lib-custom-tags [(tags)]=\"formData.tags\"></lib-custom-tags>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'App Data'\"\n [label]=\"'OPTIONAL'\"\n class=\"form-field-advanced\"\n >\n <lib-json-view [(data)]=\"formData.appData\"></lib-json-view>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column two-fifths\">\n <ng-content select=\"[slot=column-2-slot-1]\"></ng-content>\n <lib-form-field-container\n *ngIf=\"isEdit\"\n [showHeader]=\"false\"\n [layout]=\"'column'\"\n [contentStyle]=\"'z-index: 99999999'\"\n >\n <div *ngIf=\"hasEnrolmentToken || hasAuthenticator\" class=\"form-field-label-container\" style=\"gap: var(--paddingMedium)\">\n <div class=\"form-field-header\">\n <div class=\"form-field-title-container\">\n <span class=\"form-field-title\">Enrollment:</span>\n </div>\n </div>\n <lib-qr-code\n [identity]=\"formData\"\n [jwt]=\"jwt\"\n [expiration]=\"enrollmentExpiration\"\n [authenticators]=\"formData.authenticators\"\n [type]=\"'identity'\"\n [canExpand]=\"true\"\n (doRefresh)=\"refreshIdentity()\"\n ></lib-qr-code>\n </div>\n <div class=\"form-field-label-container\" style=\"gap: var(--paddingMedium)\">\n <div class=\"form-field-header\">\n <div class=\"form-field-title-container\">\n <span class=\"form-field-title\">Enable / Disable:</span>\n </div>\n </div>\n <div *ngIf=\"entityDisabled\" class=\"disable-identity-button-container\" (click)=\"enableIdentity()\">\n <div class=\"disable-identity-background\"></div>\n <button class=\"download-button disable-identity-button\">Enable Identity</button>\n </div>\n <div *ngIf=\"!entityDisabled\" class=\"disable-identity-button-container\" (click)=\"disableIdentity()\">\n <div class=\"disable-identity-background\"></div>\n <button class=\"download-button disable-identity-button\">Disable Identity</button>\n </div>\n </div>\n <div *ngIf=\"!entityDisabled\" class=\"form-field-label-container\" style=\"gap: var(--paddingMedium)\">\n <div class=\"form-field-header\">\n <div class=\"form-field-title-container\">\n <span class=\"form-field-title\">Disable Until:</span>\n </div>\n </div>\n <div class=\"disable-identity-duration-container\">\n <select [(ngModel)]=\"disableDurationType\" id=\"DurationType\" class=\"form-field-dropdown\">\n <option value=\"indefinite\">Indefinite</option>\n <option value=\"pick-date\">Pick a Date & Time</option>\n </select>\n <p-calendar\n *ngIf=\"disableDurationType === 'pick-date'\"\n [(ngModel)]=\"disableDuration\"\n (onSelect)=\"setDisabledDate($event)\"\n [showIcon]=\"true\"\n [showTime]=\"true\"\n [minDate]=\"minDate\"\n placeholder=\"Select a date\"\n selectionMode=\"single\"\n #calendar\n >\n </p-calendar>\n </div>\n </div>\n </lib-form-field-container>\n <lib-form-field-container\n *ngIf=\"formData.id\"\n [title]=\"'Associated Services'\"\n [count]=\"associatedServices.length\"\n [class]=\"'hide-overflow'\"\n [helpText]=\"'Preview list of all services that this Identity is associated with.'\"\n >\n <lib-preview-list\n (itemSelected)=\"serviceSelected($event)\"\n [clickable]=\"true\"\n [isLoading]=\"servicesLoading\"\n [allNames]=\"associatedServiceNames\"\n ></lib-preview-list>\n <div class=\"svc-test-result\" [ngClass]=\"{'test-result-open': testResultOpen}\">\n <div class=\"close icon-close\" (click)=\"closeTestResult()\"></div>\n <div class=\"result-container\" [innerHTML]=\"testResult\" ></div>\n </div>\n </lib-form-field-container>\n <lib-form-field-container\n *ngIf=\"formData.id\"\n [title]=\"'Associated Service Policies'\"\n [count]=\"associatedServicePolicies.length\"\n [helpText]=\"'Preview list of all service policies that this Identity is associated with.'\"\n >\n <lib-preview-list\n (itemSelected)=\"serviceSelected($event)\"\n [clickable]=\"false\"\n [isLoading]=\"servicePoliciesLoading\"\n [allNames]=\"associatedServicePolicyNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'API Calls'\"\n [label]=\"''\"\n >\n <div class=\"form-row\">\n <input class=\"form-field-input\" [value]=\"apiCallURL\" readonly/>\n <div class=\"url-copy icon-copy copy-text\" (click)=\"copyToClipboard(apiCallURL)\"></div>\n </div>\n <lib-json-view *ngIf=\"formData\" [(data)]=\"apiData\" [readOnly]=\"true\" [showCopy]=\"true\"></lib-json-view>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column\" *ngIf=\"formView === 'raw'\">\n <lib-json-view *ngIf=\"formData\" [(data)]=\"formData\"></lib-json-view>\n </div>\n </div>\n</div>\n<lib-loading-indicator *ngIf=\"isLoading || !dataInit\" [isLoading]=\"isLoading || !dataInit\"></lib-loading-indicator>\n", styles: [".identity-form-container{display:flex;flex-direction:column;height:100%;width:100%;align-items:center;gap:.9375rem}.disabled{opacity:.5;pointer-events:none}::ng-deep .admin-toggle{width:100%;width:35%;display:flex}::ng-deep .admin-toggle .form-field-line{display:none}::ng-deep .admin-toggle .toggle{width:100%}::ng-deep .is-admin-container .form-field-title-container.title-container-2{width:35%!important}.disable-identity-button-container{position:relative}.disable-identity-duration-container{display:flex;flex-direction:row;gap:var(--gapMedium)}.disable-identity-duration-container .form-field-dropdown{min-width:10rem}.disable-identity-duration-container p-calendar{min-width:12rem}.disable-identity-background{width:100%;height:100%;position:absolute;background:var(--red);border-radius:var(--inputBorderRadius);filter:brightness(.95);height:var(--defaultInputHeight)}.disable-identity-button{background:transparent;border:none;position:relative;z-index:9999999;display:flex;align-items:center;justify-content:center;height:var(--defaultInputHeight)}.svc-test-result{position:absolute;transition:var(--transition);height:0;width:100%;background-color:var(--background);bottom:0;font-weight:600;padding-left:.625rem;padding-right:.625rem;border-color:var(--inputBorder);border-style:solid;border-width:var(--inputBorderWidth);border-bottom-right-radius:var(--inputBorderRadius);border-bottom-left-radius:var(--inputBorderRadius);border-top-style:none}.svc-test-result.test-result-open{height:-moz-fit-content;height:fit-content;box-shadow:0 -.125rem .6875rem 0 var(--boxShadow);padding-bottom:.9375rem;padding-top:.9375rem}.svc-test-result .close.icon-close{top:.625rem;right:.625rem;font-size:1.125rem;height:1.125rem;width:1.125rem;line-height:1.125rem}::ng-deep .admin-toggle .form-field-toggle-container:focus .form-field-label{color:var(--primaryColor)}::ng-deep .admin-toggle .form-field-toggle-container:focus .form-field-line{border-color:var(--primaryColor)}::ng-deep .admin-toggle .form-field-toggle-container:focus .toggle{border-color:var(--primaryColor);border-style:solid;border-width:var(--inputBorderWidth)}::ng-deep .admin-toggle .form-field-toggle-container:focus .toggle .switch{top:.0625rem}::ng-deep .copy-text.icon-copy.url-copy{background-color:var(--navigation)}@media (max-width: 1575px){.disable-identity-duration-container{flex-wrap:wrap}}\n"], dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4$1.Calendar, selector: "p-calendar", inputs: ["style", "styleClass", "inputStyle", "inputId", "name", "inputStyleClass", "placeholder", "ariaLabelledBy", "ariaLabel", "iconAriaLabel", "disabled", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "icon", "appendTo", "readonlyInput", "shortYearCutoff", "monthNavigator", "yearNavigator", "hourFormat", "timeOnly", "stepHour", "stepMinute", "stepSecond", "showSeconds", "required", "showOnFocus", "showWeek", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "minDate", "maxDate", "disabledDates", "disabledDays", "yearRange", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "locale", "view", "defaultDate"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }, { kind: "component", type: FormHeaderComponent, selector: "lib-form-header", inputs: ["data", "badges", "title", "moreActions", "formView", "saveDisabled", "saveTooltip", "actionButtonText", "moreActionsText", "showHeaderToggle", "showHeaderButton", "multiActions"], outputs: ["formViewChange", "actionRequested", "multiActionRequested"] }, { kind: "component", type: FormFieldContainerComponent, selector: "lib-form-field-container", inputs: ["title", "title2", "titleIcon", "layout", "helpText", "helpText2", "label", "count", "action", "actionLabel", "class", "contentStyle", "contentClass", "showHeader", "showToggle", "headerActions", "headerToggle"], outputs: ["actionRequested", "headerToggleChange"] }, { kind: "component", type: PreviewListComponent, selector: "lib-preview-list", inputs: ["label", "clickable", "isLoading", "allNames", "items", "allowRemove", "tooltip", "showfilter", "localFilter"], outputs: ["itemSelected", "itemRemoved", "filterChanged"] }, { kind: "component", type: LoadingIndicatorComponent, selector: "lib-loading-indicator", inputs: ["isLoading"] }, { kind: "component", type: FormFieldToggleComponent, selector: "lib-form-field-toggle", inputs: ["label", "orientation", "labelOn", "labelOff", "toggleOn"], outputs: ["toggleOnChange"] }, { kind: "component", type: JsonViewComponent, selector: "lib-json-view", inputs: ["data", "schema", "readOnly", "jsonInvalid", "showCopy", "showLineNumbers"], outputs: ["dataChange", "jsonChange", "jsonInvalidChange"] }, { kind: "component", type: TagSelectorComponent, selector: "lib-tag-selector", inputs: ["placeholder", "disableField", "disableCreate", "hideOption", "isLoading", "errorMessage", "focusOnInit", "selectedRoleAttributes", "selectedNamedAttributes", "hasError", "availableRoleAttributes", "availableNamedAttributes"], outputs: ["addRoleAttribute", "addNamedAttribute", "roleAttributeRemoved", "namedAttributeRemoved", "selectedRoleAttributesChange", "selectedNamedAttributesChange", "filterChange"] }, { kind: "component", type: QrCodeComponent, selector: "lib-qr-code", inputs: ["jwt", "token", "expiration", "identity", "type", "authenticators", "qrOnly", "canExpand"], outputs: ["doRefresh"] }, { kind: "component", type: CustomTagsComponent, selector: "lib-custom-tags", inputs: ["tags"], outputs: ["tagsChange"] }, { kind: "pipe", type: SafePipe, name: "safe" }] }); }
13500
+ ], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"projectable-form-wrapper\"\n (keyup.enter)=\"save($event)\"\n (keyup.escape)=\"closeModal(false)\"\n [class.projectable-form-hidden]=\"!dataInit\"\n>\n <lib-form-header\n [data]=\"formData\"\n [title]=\"formData.id ? 'Edit Identity: ' : 'Create New Identity'\"\n [moreActions]=\"moreActions\"\n (actionRequested)=\"headerActionRequested($event)\"\n [(formView)]=\"formView\"\n [class.is-scrolled]=\"isScrolled\"\n ></lib-form-header>\n <div class=\"identity-form-container projectable-form-container\" #formContainer>\n <div class=\"projectable-form-main-column form-group-row\" *ngIf=\"formView === 'simple'\">\n <div class=\"form-group-column three-fifths\">\n <lib-form-field-container [title]=\"'Identity Name'\" [label]=\"'REQUIRED'\">\n <input\n class=\"form-field-input\"\n placeholder=\"Name this identity\"\n [ngClass]=\"{error: errors['name']}\"\n [(ngModel)]=\"formData.name\"\n autofocus\n #nameFieldInput\n />\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select or create Identity attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 99999999'\"\n [helpText]=\"'Attributes are tags applied to an resource. Apply the same tag to other Identities to form a group of Identities.'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"formData.roleAttributes\"\n [availableRoleAttributes]=\"identityRoleAttributes\"\n [placeholder]=\"'Add attributes to group Identities'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <ng-content select=\"[slot=column-1-slot-1]\"></ng-content>\n <lib-form-field-container\n [title]=\"'Auth Policy'\"\n [label]=\"'OPTIONAL'\"\n [helpText]=\"'Authentication Policies restrict the authentication methods available to identities.'\"\n >\n <select\n [(ngModel)]=\"formData.authPolicyId\"\n id=\"authPolicyId\"\n class=\"form-field-dropdown\"\n >\n <option value=\"\">Select an Authentication Policy</option>\n <option\n *ngFor=\"let policy of authPolicies\"\n [value]=\"policy.id\"\n >\n {{ policy.name }}\n </option>\n </select>\n <div class=\"form-field-label-container\" style=\"gap: var(--paddingMedium)\">\n <div class=\"form-field-header\">\n <div class=\"form-field-title-container\">\n <span class=\"form-field-title\">External ID</span>\n </div>\n <span class=\"form-field-label\">OPTIONAL</span>\n </div>\n <input class=\"form-field-input\" placeholder=\"Optional External ID\" [(ngModel)]=\"formData.externalId\"/>\n </div>\n </lib-form-field-container>\n <ng-content select=\"[slot=column-1-slot-2]\"></ng-content>\n <lib-form-field-toggle [(toggleOn)]=\"showMore\" (toggleOnChange)=\"showMoreChanged($event)\" style=\"margin: 0px 10px\"></lib-form-field-toggle>\n <div [hidden]=\"!showMore\" class=\"form-group-column\">\n <lib-form-field-container\n [title]=\"'Enrollment Type'\"\n [title2]=\"enrollmentTypeTitle\"\n [layout]=\"'row'\"\n class=\"form-field-advanced\"\n >\n <select\n id=\"EnrollmentType\"\n class=\"form-field-dropdown\"\n [ngClass]=\"{disabled: isEditing}\"\n [(ngModel)]=\"enrollmentType\"\n (change)=\"updateEnrollment()\"\n >\n <option value=\"ott\">One Time Token</option>\n <option value=\"CA\">Certificate Authority</option>\n <option value=\"updb\">UPDB</option>\n <option value=\"none\">None</option>\n </select>\n <select\n id=\"CertAuthorities\"\n class=\"form-field-dropdown\"\n *ngIf=\"enrollmentType === 'CA'\"\n [ngClass]=\"{disabled: isEditing}\"\n [(ngModel)]=\"enrollmentCA\"\n [ngClass]=\"{error: errors.enrollmentCA}\"\n (change)=\"updateEnrollment()\"\n >\n <option *ngFor=\"let ca of cas\" [value]=\"ca.id\">{{ca.name}}</option>\n </select>\n <input\n *ngIf=\"enrollmentType === 'updb' && !isEditing\"\n [ngClass]=\"{disabled: isEditing, error: errors.enrollmentUPDB}\"\n [(ngModel)]=\"enrollmentUPDB\"\n (keyup)=\"updateEnrollment()\"\n class=\"form-field-input\"\n id=\"UPDBName\"\n type=\"text\"\n maxlength=\"500\"\n placeholder=\"Enter a name\"\n >\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Admin'\"\n [layout]=\"'row'\"\n class=\"form-field-advanced is-admin-container\"\n >\n <div class=\"config-item\">\n <div class=\"config-container toggle-container\">\n <div class=\"config-container-label\">IS ADMIN</div>\n <div\n (click)=\"toggleIsAdmin()\"\n [ngClass]=\"{ on: formData.isAdmin }\"\n class=\"toggle\"\n >\n <span [hidden]=\"!formData.isAdmin\" class=\"on-label\">YES</span>\n <span [hidden]=\"formData.isAdmin\" class=\"off-label\">NO</span>\n <div class=\"switch\"></div>\n </div>\n </div>\n </div>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Hosting Cost'\"\n [title2]=\"'Precedence'\"\n [layout]=\"'row'\"\n class=\"form-field-advanced\"\n >\n <input class=\"form-field-input\" [(ngModel)]=\"formData.defaultHostingCost\" type=\"number\"/>\n <select\n [(ngModel)]=\"formData.defaultHostingPrecedence\"\n id=\"hostingPrecedence\"\n class=\"form-field-dropdown\"\n >\n <option value=\"default\">Default</option>\n <option value=\"required\">Required</option>\n <option value=\"failed\">Failed</option>\n </select>\n </lib-form-field-container>\n <lib-form-field-container *ngFor=\"let tagElement of tagElements\"\n [title]=\"tagElement.label\"\n [label]=\"'OPTIONAL'\"\n class=\"form-field-advanced\"\n >\n <div [innerHTML]=\"tagElement.content | safe\"></div>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Custom Tags'\"\n [label]=\"'OPTIONAL'\"\n class=\"form-field-advanced\"\n *ngIf=\"!hideTags\"\n >\n <lib-custom-tags [(tags)]=\"formData.tags\"></lib-custom-tags>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'App Data'\"\n [label]=\"'OPTIONAL'\"\n class=\"form-field-advanced\"\n >\n <lib-json-view [(data)]=\"formData.appData\"></lib-json-view>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column two-fifths\">\n <ng-content select=\"[slot=column-2-slot-1]\"></ng-content>\n <lib-form-field-container\n *ngIf=\"isEdit && (hasEnrolmentToken || hasAuthenticator)\"\n [showHeader]=\"false\"\n [layout]=\"'column'\"\n [contentStyle]=\"'z-index: 99999999'\"\n >\n <div class=\"form-field-label-container\" style=\"gap: var(--paddingMedium)\">\n <div class=\"form-field-header\">\n <div class=\"form-field-title-container\">\n <span class=\"form-field-title\">Enrollment:</span>\n </div>\n <span class=\"form-field-label info-text\"\n *ngIf=\"jwtExpired !== undefined && !showResetToken\"\n [class.expired-text]=\"jwtExpired\"\n >\n {{jwtExpired ? 'EXPIRED' : 'EXPIRES'}} {{expirationDate}}\n </span>\n </div>\n <lib-qr-code\n [identity]=\"formData\"\n [jwt]=\"jwt\"\n [expiration]=\"enrollmentExpiration\"\n [authenticators]=\"formData.authenticators\"\n [type]=\"'identity'\"\n [canExpand]=\"true\"\n (doRefresh)=\"refreshIdentity()\"\n ></lib-qr-code>\n </div>\n </lib-form-field-container>\n <lib-form-field-container\n *ngIf=\"isEdit\"\n [showHeader]=\"false\"\n [layout]=\"'column'\"\n [contentStyle]=\"'z-index: 99999999'\"\n >\n <div class=\"form-field-label-container\" style=\"gap: var(--paddingMedium)\">\n <div class=\"form-field-header\">\n <div class=\"form-field-title-container\">\n <span class=\"form-field-title\">Enable / Disable:</span>\n </div>\n </div>\n <div *ngIf=\"entityDisabled\" class=\"disable-identity-button-container\" (click)=\"enableIdentity()\">\n <div class=\"disable-identity-background\"></div>\n <button class=\"download-button disable-identity-button\">Enable Identity</button>\n </div>\n <div *ngIf=\"!entityDisabled\" class=\"disable-identity-button-container\" (click)=\"disableIdentity()\">\n <div class=\"disable-identity-background\"></div>\n <button class=\"download-button disable-identity-button\">Disable Identity</button>\n </div>\n </div>\n <div *ngIf=\"!entityDisabled\" class=\"form-field-label-container\" style=\"gap: var(--paddingMedium)\">\n <div class=\"form-field-header\">\n <div class=\"form-field-title-container\">\n <span class=\"form-field-title\">Disable Until:</span>\n </div>\n </div>\n <div class=\"disable-identity-duration-container\">\n <select [(ngModel)]=\"disableDurationType\" id=\"DurationType\" class=\"form-field-dropdown\">\n <option value=\"indefinite\">Indefinite</option>\n <option value=\"pick-date\">Pick a Date & Time</option>\n </select>\n <p-calendar\n *ngIf=\"disableDurationType === 'pick-date'\"\n [(ngModel)]=\"disableDuration\"\n (onSelect)=\"setDisabledDate($event)\"\n [showIcon]=\"true\"\n [showTime]=\"true\"\n [minDate]=\"minDate\"\n placeholder=\"Select a date\"\n selectionMode=\"single\"\n #calendar\n >\n </p-calendar>\n </div>\n </div>\n </lib-form-field-container>\n <lib-form-field-container\n *ngIf=\"formData.id\"\n [title]=\"'Associated Services'\"\n [count]=\"associatedServices.length\"\n [class]=\"'hide-overflow'\"\n [helpText]=\"'Preview list of all services that this Identity is associated with.'\"\n >\n <lib-preview-list\n (itemSelected)=\"serviceSelected($event)\"\n [clickable]=\"true\"\n [isLoading]=\"servicesLoading\"\n [allNames]=\"associatedServiceNames\"\n ></lib-preview-list>\n <div class=\"svc-test-result\" [ngClass]=\"{'test-result-open': testResultOpen}\">\n <div class=\"close icon-close\" (click)=\"closeTestResult()\"></div>\n <div class=\"result-container\" [innerHTML]=\"testResult\" ></div>\n </div>\n </lib-form-field-container>\n <lib-form-field-container\n *ngIf=\"formData.id\"\n [title]=\"'Associated Service Policies'\"\n [count]=\"associatedServicePolicies.length\"\n [helpText]=\"'Preview list of all service policies that this Identity is associated with.'\"\n >\n <lib-preview-list\n (itemSelected)=\"serviceSelected($event)\"\n [clickable]=\"false\"\n [isLoading]=\"servicePoliciesLoading\"\n [allNames]=\"associatedServicePolicyNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'API Calls'\"\n [label]=\"''\"\n >\n <div class=\"form-row\">\n <input class=\"form-field-input\" [value]=\"apiCallURL\" readonly/>\n <div class=\"url-copy icon-copy copy-text\" (click)=\"copyToClipboard(apiCallURL)\"></div>\n </div>\n <lib-json-view *ngIf=\"formData\" [(data)]=\"apiData\" [readOnly]=\"true\" [showCopy]=\"true\"></lib-json-view>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column\" *ngIf=\"formView === 'raw'\">\n <lib-json-view *ngIf=\"formData\" [(data)]=\"formData\"></lib-json-view>\n </div>\n </div>\n</div>\n<lib-loading-indicator *ngIf=\"isLoading || !dataInit\" [isLoading]=\"isLoading || !dataInit\"></lib-loading-indicator>\n", styles: [".identity-form-container{display:flex;flex-direction:column;height:100%;width:100%;align-items:center;gap:.9375rem}.disabled{opacity:.5;pointer-events:none}::ng-deep .admin-toggle{width:100%;width:35%;display:flex}::ng-deep .admin-toggle .form-field-line{display:none}::ng-deep .admin-toggle .toggle{width:100%}::ng-deep .is-admin-container .form-field-title-container.title-container-2{width:35%!important}.disable-identity-button-container{position:relative}.disable-identity-duration-container{display:flex;flex-direction:row;gap:var(--gapMedium)}.disable-identity-duration-container .form-field-dropdown{min-width:10rem}.disable-identity-duration-container p-calendar{min-width:12rem}.disable-identity-background{width:100%;height:100%;position:absolute;background:var(--red);border-radius:var(--inputBorderRadius);filter:brightness(.95);height:var(--defaultInputHeight)}.disable-identity-button{background:transparent;border:none;position:relative;z-index:9999999;display:flex;align-items:center;justify-content:center;height:var(--defaultInputHeight)}.svc-test-result{position:absolute;transition:var(--transition);height:0;width:100%;background-color:var(--background);bottom:0;font-weight:600;padding-left:.625rem;padding-right:.625rem;border-color:var(--inputBorder);border-style:solid;border-width:var(--inputBorderWidth);border-bottom-right-radius:var(--inputBorderRadius);border-bottom-left-radius:var(--inputBorderRadius);border-top-style:none}.svc-test-result.test-result-open{height:-moz-fit-content;height:fit-content;box-shadow:0 -.125rem .6875rem 0 var(--boxShadow);padding-bottom:.9375rem;padding-top:.9375rem}.svc-test-result .close.icon-close{top:.625rem;right:.625rem;font-size:1.125rem;height:1.125rem;width:1.125rem;line-height:1.125rem}.info-text{color:var(--groupText)}.info-text.expired-text{color:var(--red)}::ng-deep .admin-toggle .form-field-toggle-container:focus .form-field-label{color:var(--primaryColor)}::ng-deep .admin-toggle .form-field-toggle-container:focus .form-field-line{border-color:var(--primaryColor)}::ng-deep .admin-toggle .form-field-toggle-container:focus .toggle{border-color:var(--primaryColor);border-style:solid;border-width:var(--inputBorderWidth)}::ng-deep .admin-toggle .form-field-toggle-container:focus .toggle .switch{top:.0625rem}::ng-deep .copy-text.icon-copy.url-copy{background-color:var(--navigation)}@media (max-width: 1575px){.disable-identity-duration-container{flex-wrap:wrap}}\n"], dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4$1.Calendar, selector: "p-calendar", inputs: ["style", "styleClass", "inputStyle", "inputId", "name", "inputStyleClass", "placeholder", "ariaLabelledBy", "ariaLabel", "iconAriaLabel", "disabled", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "icon", "appendTo", "readonlyInput", "shortYearCutoff", "monthNavigator", "yearNavigator", "hourFormat", "timeOnly", "stepHour", "stepMinute", "stepSecond", "showSeconds", "required", "showOnFocus", "showWeek", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "minDate", "maxDate", "disabledDates", "disabledDays", "yearRange", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "locale", "view", "defaultDate"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }, { kind: "component", type: FormHeaderComponent, selector: "lib-form-header", inputs: ["data", "badges", "title", "moreActions", "formView", "saveDisabled", "saveTooltip", "actionButtonText", "moreActionsText", "showHeaderToggle", "showHeaderButton", "multiActions"], outputs: ["formViewChange", "actionRequested", "multiActionRequested"] }, { kind: "component", type: FormFieldContainerComponent, selector: "lib-form-field-container", inputs: ["title", "title2", "titleIcon", "layout", "helpText", "helpText2", "label", "count", "action", "actionLabel", "class", "contentStyle", "contentClass", "showHeader", "showToggle", "headerActions", "headerToggle"], outputs: ["actionRequested", "headerToggleChange"] }, { kind: "component", type: PreviewListComponent, selector: "lib-preview-list", inputs: ["label", "clickable", "isLoading", "allNames", "items", "allowRemove", "tooltip", "showfilter", "localFilter"], outputs: ["itemSelected", "itemRemoved", "filterChanged"] }, { kind: "component", type: LoadingIndicatorComponent, selector: "lib-loading-indicator", inputs: ["isLoading"] }, { kind: "component", type: FormFieldToggleComponent, selector: "lib-form-field-toggle", inputs: ["label", "orientation", "labelOn", "labelOff", "toggleOn"], outputs: ["toggleOnChange"] }, { kind: "component", type: JsonViewComponent, selector: "lib-json-view", inputs: ["data", "schema", "readOnly", "jsonInvalid", "showCopy", "showLineNumbers"], outputs: ["dataChange", "jsonChange", "jsonInvalidChange"] }, { kind: "component", type: TagSelectorComponent, selector: "lib-tag-selector", inputs: ["placeholder", "disableField", "disableCreate", "hideOption", "isLoading", "errorMessage", "focusOnInit", "selectedRoleAttributes", "selectedNamedAttributes", "hasError", "availableRoleAttributes", "availableNamedAttributes"], outputs: ["addRoleAttribute", "addNamedAttribute", "roleAttributeRemoved", "namedAttributeRemoved", "selectedRoleAttributesChange", "selectedNamedAttributesChange", "filterChange"] }, { kind: "component", type: QrCodeComponent, selector: "lib-qr-code", inputs: ["jwt", "token", "expiration", "identity", "type", "authenticators", "qrOnly", "canExpand"], outputs: ["doRefresh"] }, { kind: "component", type: CustomTagsComponent, selector: "lib-custom-tags", inputs: ["tags"], outputs: ["tagsChange"] }, { kind: "pipe", type: SafePipe, name: "safe" }] }); }
13442
13501
  }
13443
13502
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: IdentityFormComponent, decorators: [{
13444
13503
  type: Component,
@@ -13447,7 +13506,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
13447
13506
  provide: MatDialogRef,
13448
13507
  useValue: {}
13449
13508
  }
13450
- ], template: "<div class=\"projectable-form-wrapper\"\n (keyup.enter)=\"save($event)\"\n (keyup.escape)=\"closeModal(false)\"\n [class.projectable-form-hidden]=\"!dataInit\"\n>\n <lib-form-header\n [data]=\"formData\"\n [title]=\"formData.id ? 'Edit Identity: ' : 'Create New Identity'\"\n [moreActions]=\"moreActions\"\n (actionRequested)=\"headerActionRequested($event)\"\n [(formView)]=\"formView\"\n [class.is-scrolled]=\"isScrolled\"\n ></lib-form-header>\n <div class=\"identity-form-container projectable-form-container\" #formContainer>\n <div class=\"projectable-form-main-column form-group-row\" *ngIf=\"formView === 'simple'\">\n <div class=\"form-group-column three-fifths\">\n <lib-form-field-container [title]=\"'Identity Name'\" [label]=\"'REQUIRED'\">\n <input\n class=\"form-field-input\"\n placeholder=\"Name this identity\"\n [ngClass]=\"{error: errors['name']}\"\n [(ngModel)]=\"formData.name\"\n autofocus\n #nameFieldInput\n />\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select or create Identity attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 99999999'\"\n [helpText]=\"'Attributes are tags applied to an resource. Apply the same tag to other Identities to form a group of Identities.'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"formData.roleAttributes\"\n [availableRoleAttributes]=\"identityRoleAttributes\"\n [placeholder]=\"'Add attributes to group Identities'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <ng-content select=\"[slot=column-1-slot-1]\"></ng-content>\n <lib-form-field-container\n [title]=\"'Auth Policy'\"\n [label]=\"'OPTIONAL'\"\n [helpText]=\"'Authentication Policies restrict the authentication methods available to identities.'\"\n >\n <select\n [(ngModel)]=\"formData.authPolicyId\"\n id=\"authPolicyId\"\n class=\"form-field-dropdown\"\n >\n <option value=\"\">Select an Authentication Policy</option>\n <option\n *ngFor=\"let policy of authPolicies\"\n [value]=\"policy.id\"\n >\n {{ policy.name }}\n </option>\n </select>\n <div class=\"form-field-label-container\" style=\"gap: var(--paddingMedium)\">\n <div class=\"form-field-header\">\n <div class=\"form-field-title-container\">\n <span class=\"form-field-title\">External ID</span>\n </div>\n <span class=\"form-field-label\">OPTIONAL</span>\n </div>\n <input class=\"form-field-input\" placeholder=\"Optional External ID\" [(ngModel)]=\"formData.externalId\"/>\n </div>\n </lib-form-field-container>\n <ng-content select=\"[slot=column-1-slot-2]\"></ng-content>\n <lib-form-field-toggle [(toggleOn)]=\"showMore\" (toggleOnChange)=\"showMoreChanged($event)\" style=\"margin: 0px 10px\"></lib-form-field-toggle>\n <div [hidden]=\"!showMore\" class=\"form-group-column\">\n <lib-form-field-container\n [title]=\"'Enrollment Type'\"\n [title2]=\"enrollmentTypeTitle\"\n [layout]=\"'row'\"\n class=\"form-field-advanced\"\n >\n <select\n id=\"EnrollmentType\"\n class=\"form-field-dropdown\"\n [ngClass]=\"{disabled: isEditing}\"\n [(ngModel)]=\"enrollmentType\"\n (change)=\"updateEnrollment()\"\n >\n <option value=\"ott\">One Time Token</option>\n <option value=\"CA\">Certificate Authority</option>\n <option value=\"updb\">UPDB</option>\n <option value=\"none\">None</option>\n </select>\n <select\n id=\"CertAuthorities\"\n class=\"form-field-dropdown\"\n *ngIf=\"enrollmentType === 'CA'\"\n [ngClass]=\"{disabled: isEditing}\"\n [(ngModel)]=\"enrollmentCA\"\n [ngClass]=\"{error: errors.enrollmentCA}\"\n (change)=\"updateEnrollment()\"\n >\n <option *ngFor=\"let ca of cas\" [value]=\"ca.id\">{{ca.name}}</option>\n </select>\n <input\n *ngIf=\"enrollmentType === 'updb' && !isEditing\"\n [ngClass]=\"{disabled: isEditing, error: errors.enrollmentUPDB}\"\n [(ngModel)]=\"enrollmentUPDB\"\n (keyup)=\"updateEnrollment()\"\n class=\"form-field-input\"\n id=\"UPDBName\"\n type=\"text\"\n maxlength=\"500\"\n placeholder=\"Enter a name\"\n >\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Admin'\"\n [layout]=\"'row'\"\n class=\"form-field-advanced is-admin-container\"\n >\n <div class=\"config-item\">\n <div class=\"config-container toggle-container\">\n <div class=\"config-container-label\">IS ADMIN</div>\n <div\n (click)=\"toggleIsAdmin()\"\n [ngClass]=\"{ on: formData.isAdmin }\"\n class=\"toggle\"\n >\n <span [hidden]=\"!formData.isAdmin\" class=\"on-label\">YES</span>\n <span [hidden]=\"formData.isAdmin\" class=\"off-label\">NO</span>\n <div class=\"switch\"></div>\n </div>\n </div>\n </div>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Hosting Cost'\"\n [title2]=\"'Precedence'\"\n [layout]=\"'row'\"\n class=\"form-field-advanced\"\n >\n <input class=\"form-field-input\" [(ngModel)]=\"formData.defaultHostingCost\" type=\"number\"/>\n <select\n [(ngModel)]=\"formData.defaultHostingPrecedence\"\n id=\"hostingPrecedence\"\n class=\"form-field-dropdown\"\n >\n <option value=\"default\">Default</option>\n <option value=\"required\">Required</option>\n <option value=\"failed\">Failed</option>\n </select>\n </lib-form-field-container>\n <lib-form-field-container *ngFor=\"let tagElement of tagElements\"\n [title]=\"tagElement.label\"\n [label]=\"'OPTIONAL'\"\n class=\"form-field-advanced\"\n >\n <div [innerHTML]=\"tagElement.content | safe\"></div>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Custom Tags'\"\n [label]=\"'OPTIONAL'\"\n class=\"form-field-advanced\"\n *ngIf=\"!hideTags\"\n >\n <lib-custom-tags [(tags)]=\"formData.tags\"></lib-custom-tags>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'App Data'\"\n [label]=\"'OPTIONAL'\"\n class=\"form-field-advanced\"\n >\n <lib-json-view [(data)]=\"formData.appData\"></lib-json-view>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column two-fifths\">\n <ng-content select=\"[slot=column-2-slot-1]\"></ng-content>\n <lib-form-field-container\n *ngIf=\"isEdit\"\n [showHeader]=\"false\"\n [layout]=\"'column'\"\n [contentStyle]=\"'z-index: 99999999'\"\n >\n <div *ngIf=\"hasEnrolmentToken || hasAuthenticator\" class=\"form-field-label-container\" style=\"gap: var(--paddingMedium)\">\n <div class=\"form-field-header\">\n <div class=\"form-field-title-container\">\n <span class=\"form-field-title\">Enrollment:</span>\n </div>\n </div>\n <lib-qr-code\n [identity]=\"formData\"\n [jwt]=\"jwt\"\n [expiration]=\"enrollmentExpiration\"\n [authenticators]=\"formData.authenticators\"\n [type]=\"'identity'\"\n [canExpand]=\"true\"\n (doRefresh)=\"refreshIdentity()\"\n ></lib-qr-code>\n </div>\n <div class=\"form-field-label-container\" style=\"gap: var(--paddingMedium)\">\n <div class=\"form-field-header\">\n <div class=\"form-field-title-container\">\n <span class=\"form-field-title\">Enable / Disable:</span>\n </div>\n </div>\n <div *ngIf=\"entityDisabled\" class=\"disable-identity-button-container\" (click)=\"enableIdentity()\">\n <div class=\"disable-identity-background\"></div>\n <button class=\"download-button disable-identity-button\">Enable Identity</button>\n </div>\n <div *ngIf=\"!entityDisabled\" class=\"disable-identity-button-container\" (click)=\"disableIdentity()\">\n <div class=\"disable-identity-background\"></div>\n <button class=\"download-button disable-identity-button\">Disable Identity</button>\n </div>\n </div>\n <div *ngIf=\"!entityDisabled\" class=\"form-field-label-container\" style=\"gap: var(--paddingMedium)\">\n <div class=\"form-field-header\">\n <div class=\"form-field-title-container\">\n <span class=\"form-field-title\">Disable Until:</span>\n </div>\n </div>\n <div class=\"disable-identity-duration-container\">\n <select [(ngModel)]=\"disableDurationType\" id=\"DurationType\" class=\"form-field-dropdown\">\n <option value=\"indefinite\">Indefinite</option>\n <option value=\"pick-date\">Pick a Date & Time</option>\n </select>\n <p-calendar\n *ngIf=\"disableDurationType === 'pick-date'\"\n [(ngModel)]=\"disableDuration\"\n (onSelect)=\"setDisabledDate($event)\"\n [showIcon]=\"true\"\n [showTime]=\"true\"\n [minDate]=\"minDate\"\n placeholder=\"Select a date\"\n selectionMode=\"single\"\n #calendar\n >\n </p-calendar>\n </div>\n </div>\n </lib-form-field-container>\n <lib-form-field-container\n *ngIf=\"formData.id\"\n [title]=\"'Associated Services'\"\n [count]=\"associatedServices.length\"\n [class]=\"'hide-overflow'\"\n [helpText]=\"'Preview list of all services that this Identity is associated with.'\"\n >\n <lib-preview-list\n (itemSelected)=\"serviceSelected($event)\"\n [clickable]=\"true\"\n [isLoading]=\"servicesLoading\"\n [allNames]=\"associatedServiceNames\"\n ></lib-preview-list>\n <div class=\"svc-test-result\" [ngClass]=\"{'test-result-open': testResultOpen}\">\n <div class=\"close icon-close\" (click)=\"closeTestResult()\"></div>\n <div class=\"result-container\" [innerHTML]=\"testResult\" ></div>\n </div>\n </lib-form-field-container>\n <lib-form-field-container\n *ngIf=\"formData.id\"\n [title]=\"'Associated Service Policies'\"\n [count]=\"associatedServicePolicies.length\"\n [helpText]=\"'Preview list of all service policies that this Identity is associated with.'\"\n >\n <lib-preview-list\n (itemSelected)=\"serviceSelected($event)\"\n [clickable]=\"false\"\n [isLoading]=\"servicePoliciesLoading\"\n [allNames]=\"associatedServicePolicyNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'API Calls'\"\n [label]=\"''\"\n >\n <div class=\"form-row\">\n <input class=\"form-field-input\" [value]=\"apiCallURL\" readonly/>\n <div class=\"url-copy icon-copy copy-text\" (click)=\"copyToClipboard(apiCallURL)\"></div>\n </div>\n <lib-json-view *ngIf=\"formData\" [(data)]=\"apiData\" [readOnly]=\"true\" [showCopy]=\"true\"></lib-json-view>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column\" *ngIf=\"formView === 'raw'\">\n <lib-json-view *ngIf=\"formData\" [(data)]=\"formData\"></lib-json-view>\n </div>\n </div>\n</div>\n<lib-loading-indicator *ngIf=\"isLoading || !dataInit\" [isLoading]=\"isLoading || !dataInit\"></lib-loading-indicator>\n", styles: [".identity-form-container{display:flex;flex-direction:column;height:100%;width:100%;align-items:center;gap:.9375rem}.disabled{opacity:.5;pointer-events:none}::ng-deep .admin-toggle{width:100%;width:35%;display:flex}::ng-deep .admin-toggle .form-field-line{display:none}::ng-deep .admin-toggle .toggle{width:100%}::ng-deep .is-admin-container .form-field-title-container.title-container-2{width:35%!important}.disable-identity-button-container{position:relative}.disable-identity-duration-container{display:flex;flex-direction:row;gap:var(--gapMedium)}.disable-identity-duration-container .form-field-dropdown{min-width:10rem}.disable-identity-duration-container p-calendar{min-width:12rem}.disable-identity-background{width:100%;height:100%;position:absolute;background:var(--red);border-radius:var(--inputBorderRadius);filter:brightness(.95);height:var(--defaultInputHeight)}.disable-identity-button{background:transparent;border:none;position:relative;z-index:9999999;display:flex;align-items:center;justify-content:center;height:var(--defaultInputHeight)}.svc-test-result{position:absolute;transition:var(--transition);height:0;width:100%;background-color:var(--background);bottom:0;font-weight:600;padding-left:.625rem;padding-right:.625rem;border-color:var(--inputBorder);border-style:solid;border-width:var(--inputBorderWidth);border-bottom-right-radius:var(--inputBorderRadius);border-bottom-left-radius:var(--inputBorderRadius);border-top-style:none}.svc-test-result.test-result-open{height:-moz-fit-content;height:fit-content;box-shadow:0 -.125rem .6875rem 0 var(--boxShadow);padding-bottom:.9375rem;padding-top:.9375rem}.svc-test-result .close.icon-close{top:.625rem;right:.625rem;font-size:1.125rem;height:1.125rem;width:1.125rem;line-height:1.125rem}::ng-deep .admin-toggle .form-field-toggle-container:focus .form-field-label{color:var(--primaryColor)}::ng-deep .admin-toggle .form-field-toggle-container:focus .form-field-line{border-color:var(--primaryColor)}::ng-deep .admin-toggle .form-field-toggle-container:focus .toggle{border-color:var(--primaryColor);border-style:solid;border-width:var(--inputBorderWidth)}::ng-deep .admin-toggle .form-field-toggle-container:focus .toggle .switch{top:.0625rem}::ng-deep .copy-text.icon-copy.url-copy{background-color:var(--navigation)}@media (max-width: 1575px){.disable-identity-duration-container{flex-wrap:wrap}}\n"] }]
13509
+ ], template: "<div class=\"projectable-form-wrapper\"\n (keyup.enter)=\"save($event)\"\n (keyup.escape)=\"closeModal(false)\"\n [class.projectable-form-hidden]=\"!dataInit\"\n>\n <lib-form-header\n [data]=\"formData\"\n [title]=\"formData.id ? 'Edit Identity: ' : 'Create New Identity'\"\n [moreActions]=\"moreActions\"\n (actionRequested)=\"headerActionRequested($event)\"\n [(formView)]=\"formView\"\n [class.is-scrolled]=\"isScrolled\"\n ></lib-form-header>\n <div class=\"identity-form-container projectable-form-container\" #formContainer>\n <div class=\"projectable-form-main-column form-group-row\" *ngIf=\"formView === 'simple'\">\n <div class=\"form-group-column three-fifths\">\n <lib-form-field-container [title]=\"'Identity Name'\" [label]=\"'REQUIRED'\">\n <input\n class=\"form-field-input\"\n placeholder=\"Name this identity\"\n [ngClass]=\"{error: errors['name']}\"\n [(ngModel)]=\"formData.name\"\n autofocus\n #nameFieldInput\n />\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select or create Identity attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 99999999'\"\n [helpText]=\"'Attributes are tags applied to an resource. Apply the same tag to other Identities to form a group of Identities.'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"formData.roleAttributes\"\n [availableRoleAttributes]=\"identityRoleAttributes\"\n [placeholder]=\"'Add attributes to group Identities'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <ng-content select=\"[slot=column-1-slot-1]\"></ng-content>\n <lib-form-field-container\n [title]=\"'Auth Policy'\"\n [label]=\"'OPTIONAL'\"\n [helpText]=\"'Authentication Policies restrict the authentication methods available to identities.'\"\n >\n <select\n [(ngModel)]=\"formData.authPolicyId\"\n id=\"authPolicyId\"\n class=\"form-field-dropdown\"\n >\n <option value=\"\">Select an Authentication Policy</option>\n <option\n *ngFor=\"let policy of authPolicies\"\n [value]=\"policy.id\"\n >\n {{ policy.name }}\n </option>\n </select>\n <div class=\"form-field-label-container\" style=\"gap: var(--paddingMedium)\">\n <div class=\"form-field-header\">\n <div class=\"form-field-title-container\">\n <span class=\"form-field-title\">External ID</span>\n </div>\n <span class=\"form-field-label\">OPTIONAL</span>\n </div>\n <input class=\"form-field-input\" placeholder=\"Optional External ID\" [(ngModel)]=\"formData.externalId\"/>\n </div>\n </lib-form-field-container>\n <ng-content select=\"[slot=column-1-slot-2]\"></ng-content>\n <lib-form-field-toggle [(toggleOn)]=\"showMore\" (toggleOnChange)=\"showMoreChanged($event)\" style=\"margin: 0px 10px\"></lib-form-field-toggle>\n <div [hidden]=\"!showMore\" class=\"form-group-column\">\n <lib-form-field-container\n [title]=\"'Enrollment Type'\"\n [title2]=\"enrollmentTypeTitle\"\n [layout]=\"'row'\"\n class=\"form-field-advanced\"\n >\n <select\n id=\"EnrollmentType\"\n class=\"form-field-dropdown\"\n [ngClass]=\"{disabled: isEditing}\"\n [(ngModel)]=\"enrollmentType\"\n (change)=\"updateEnrollment()\"\n >\n <option value=\"ott\">One Time Token</option>\n <option value=\"CA\">Certificate Authority</option>\n <option value=\"updb\">UPDB</option>\n <option value=\"none\">None</option>\n </select>\n <select\n id=\"CertAuthorities\"\n class=\"form-field-dropdown\"\n *ngIf=\"enrollmentType === 'CA'\"\n [ngClass]=\"{disabled: isEditing}\"\n [(ngModel)]=\"enrollmentCA\"\n [ngClass]=\"{error: errors.enrollmentCA}\"\n (change)=\"updateEnrollment()\"\n >\n <option *ngFor=\"let ca of cas\" [value]=\"ca.id\">{{ca.name}}</option>\n </select>\n <input\n *ngIf=\"enrollmentType === 'updb' && !isEditing\"\n [ngClass]=\"{disabled: isEditing, error: errors.enrollmentUPDB}\"\n [(ngModel)]=\"enrollmentUPDB\"\n (keyup)=\"updateEnrollment()\"\n class=\"form-field-input\"\n id=\"UPDBName\"\n type=\"text\"\n maxlength=\"500\"\n placeholder=\"Enter a name\"\n >\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Admin'\"\n [layout]=\"'row'\"\n class=\"form-field-advanced is-admin-container\"\n >\n <div class=\"config-item\">\n <div class=\"config-container toggle-container\">\n <div class=\"config-container-label\">IS ADMIN</div>\n <div\n (click)=\"toggleIsAdmin()\"\n [ngClass]=\"{ on: formData.isAdmin }\"\n class=\"toggle\"\n >\n <span [hidden]=\"!formData.isAdmin\" class=\"on-label\">YES</span>\n <span [hidden]=\"formData.isAdmin\" class=\"off-label\">NO</span>\n <div class=\"switch\"></div>\n </div>\n </div>\n </div>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Hosting Cost'\"\n [title2]=\"'Precedence'\"\n [layout]=\"'row'\"\n class=\"form-field-advanced\"\n >\n <input class=\"form-field-input\" [(ngModel)]=\"formData.defaultHostingCost\" type=\"number\"/>\n <select\n [(ngModel)]=\"formData.defaultHostingPrecedence\"\n id=\"hostingPrecedence\"\n class=\"form-field-dropdown\"\n >\n <option value=\"default\">Default</option>\n <option value=\"required\">Required</option>\n <option value=\"failed\">Failed</option>\n </select>\n </lib-form-field-container>\n <lib-form-field-container *ngFor=\"let tagElement of tagElements\"\n [title]=\"tagElement.label\"\n [label]=\"'OPTIONAL'\"\n class=\"form-field-advanced\"\n >\n <div [innerHTML]=\"tagElement.content | safe\"></div>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Custom Tags'\"\n [label]=\"'OPTIONAL'\"\n class=\"form-field-advanced\"\n *ngIf=\"!hideTags\"\n >\n <lib-custom-tags [(tags)]=\"formData.tags\"></lib-custom-tags>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'App Data'\"\n [label]=\"'OPTIONAL'\"\n class=\"form-field-advanced\"\n >\n <lib-json-view [(data)]=\"formData.appData\"></lib-json-view>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column two-fifths\">\n <ng-content select=\"[slot=column-2-slot-1]\"></ng-content>\n <lib-form-field-container\n *ngIf=\"isEdit && (hasEnrolmentToken || hasAuthenticator)\"\n [showHeader]=\"false\"\n [layout]=\"'column'\"\n [contentStyle]=\"'z-index: 99999999'\"\n >\n <div class=\"form-field-label-container\" style=\"gap: var(--paddingMedium)\">\n <div class=\"form-field-header\">\n <div class=\"form-field-title-container\">\n <span class=\"form-field-title\">Enrollment:</span>\n </div>\n <span class=\"form-field-label info-text\"\n *ngIf=\"jwtExpired !== undefined && !showResetToken\"\n [class.expired-text]=\"jwtExpired\"\n >\n {{jwtExpired ? 'EXPIRED' : 'EXPIRES'}} {{expirationDate}}\n </span>\n </div>\n <lib-qr-code\n [identity]=\"formData\"\n [jwt]=\"jwt\"\n [expiration]=\"enrollmentExpiration\"\n [authenticators]=\"formData.authenticators\"\n [type]=\"'identity'\"\n [canExpand]=\"true\"\n (doRefresh)=\"refreshIdentity()\"\n ></lib-qr-code>\n </div>\n </lib-form-field-container>\n <lib-form-field-container\n *ngIf=\"isEdit\"\n [showHeader]=\"false\"\n [layout]=\"'column'\"\n [contentStyle]=\"'z-index: 99999999'\"\n >\n <div class=\"form-field-label-container\" style=\"gap: var(--paddingMedium)\">\n <div class=\"form-field-header\">\n <div class=\"form-field-title-container\">\n <span class=\"form-field-title\">Enable / Disable:</span>\n </div>\n </div>\n <div *ngIf=\"entityDisabled\" class=\"disable-identity-button-container\" (click)=\"enableIdentity()\">\n <div class=\"disable-identity-background\"></div>\n <button class=\"download-button disable-identity-button\">Enable Identity</button>\n </div>\n <div *ngIf=\"!entityDisabled\" class=\"disable-identity-button-container\" (click)=\"disableIdentity()\">\n <div class=\"disable-identity-background\"></div>\n <button class=\"download-button disable-identity-button\">Disable Identity</button>\n </div>\n </div>\n <div *ngIf=\"!entityDisabled\" class=\"form-field-label-container\" style=\"gap: var(--paddingMedium)\">\n <div class=\"form-field-header\">\n <div class=\"form-field-title-container\">\n <span class=\"form-field-title\">Disable Until:</span>\n </div>\n </div>\n <div class=\"disable-identity-duration-container\">\n <select [(ngModel)]=\"disableDurationType\" id=\"DurationType\" class=\"form-field-dropdown\">\n <option value=\"indefinite\">Indefinite</option>\n <option value=\"pick-date\">Pick a Date & Time</option>\n </select>\n <p-calendar\n *ngIf=\"disableDurationType === 'pick-date'\"\n [(ngModel)]=\"disableDuration\"\n (onSelect)=\"setDisabledDate($event)\"\n [showIcon]=\"true\"\n [showTime]=\"true\"\n [minDate]=\"minDate\"\n placeholder=\"Select a date\"\n selectionMode=\"single\"\n #calendar\n >\n </p-calendar>\n </div>\n </div>\n </lib-form-field-container>\n <lib-form-field-container\n *ngIf=\"formData.id\"\n [title]=\"'Associated Services'\"\n [count]=\"associatedServices.length\"\n [class]=\"'hide-overflow'\"\n [helpText]=\"'Preview list of all services that this Identity is associated with.'\"\n >\n <lib-preview-list\n (itemSelected)=\"serviceSelected($event)\"\n [clickable]=\"true\"\n [isLoading]=\"servicesLoading\"\n [allNames]=\"associatedServiceNames\"\n ></lib-preview-list>\n <div class=\"svc-test-result\" [ngClass]=\"{'test-result-open': testResultOpen}\">\n <div class=\"close icon-close\" (click)=\"closeTestResult()\"></div>\n <div class=\"result-container\" [innerHTML]=\"testResult\" ></div>\n </div>\n </lib-form-field-container>\n <lib-form-field-container\n *ngIf=\"formData.id\"\n [title]=\"'Associated Service Policies'\"\n [count]=\"associatedServicePolicies.length\"\n [helpText]=\"'Preview list of all service policies that this Identity is associated with.'\"\n >\n <lib-preview-list\n (itemSelected)=\"serviceSelected($event)\"\n [clickable]=\"false\"\n [isLoading]=\"servicePoliciesLoading\"\n [allNames]=\"associatedServicePolicyNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'API Calls'\"\n [label]=\"''\"\n >\n <div class=\"form-row\">\n <input class=\"form-field-input\" [value]=\"apiCallURL\" readonly/>\n <div class=\"url-copy icon-copy copy-text\" (click)=\"copyToClipboard(apiCallURL)\"></div>\n </div>\n <lib-json-view *ngIf=\"formData\" [(data)]=\"apiData\" [readOnly]=\"true\" [showCopy]=\"true\"></lib-json-view>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column\" *ngIf=\"formView === 'raw'\">\n <lib-json-view *ngIf=\"formData\" [(data)]=\"formData\"></lib-json-view>\n </div>\n </div>\n</div>\n<lib-loading-indicator *ngIf=\"isLoading || !dataInit\" [isLoading]=\"isLoading || !dataInit\"></lib-loading-indicator>\n", styles: [".identity-form-container{display:flex;flex-direction:column;height:100%;width:100%;align-items:center;gap:.9375rem}.disabled{opacity:.5;pointer-events:none}::ng-deep .admin-toggle{width:100%;width:35%;display:flex}::ng-deep .admin-toggle .form-field-line{display:none}::ng-deep .admin-toggle .toggle{width:100%}::ng-deep .is-admin-container .form-field-title-container.title-container-2{width:35%!important}.disable-identity-button-container{position:relative}.disable-identity-duration-container{display:flex;flex-direction:row;gap:var(--gapMedium)}.disable-identity-duration-container .form-field-dropdown{min-width:10rem}.disable-identity-duration-container p-calendar{min-width:12rem}.disable-identity-background{width:100%;height:100%;position:absolute;background:var(--red);border-radius:var(--inputBorderRadius);filter:brightness(.95);height:var(--defaultInputHeight)}.disable-identity-button{background:transparent;border:none;position:relative;z-index:9999999;display:flex;align-items:center;justify-content:center;height:var(--defaultInputHeight)}.svc-test-result{position:absolute;transition:var(--transition);height:0;width:100%;background-color:var(--background);bottom:0;font-weight:600;padding-left:.625rem;padding-right:.625rem;border-color:var(--inputBorder);border-style:solid;border-width:var(--inputBorderWidth);border-bottom-right-radius:var(--inputBorderRadius);border-bottom-left-radius:var(--inputBorderRadius);border-top-style:none}.svc-test-result.test-result-open{height:-moz-fit-content;height:fit-content;box-shadow:0 -.125rem .6875rem 0 var(--boxShadow);padding-bottom:.9375rem;padding-top:.9375rem}.svc-test-result .close.icon-close{top:.625rem;right:.625rem;font-size:1.125rem;height:1.125rem;width:1.125rem;line-height:1.125rem}.info-text{color:var(--groupText)}.info-text.expired-text{color:var(--red)}::ng-deep .admin-toggle .form-field-toggle-container:focus .form-field-label{color:var(--primaryColor)}::ng-deep .admin-toggle .form-field-toggle-container:focus .form-field-line{border-color:var(--primaryColor)}::ng-deep .admin-toggle .form-field-toggle-container:focus .toggle{border-color:var(--primaryColor);border-style:solid;border-width:var(--inputBorderWidth)}::ng-deep .admin-toggle .form-field-toggle-container:focus .toggle .switch{top:.0625rem}::ng-deep .copy-text.icon-copy.url-copy{background-color:var(--navigation)}@media (max-width: 1575px){.disable-identity-duration-container{flex-wrap:wrap}}\n"] }]
13451
13510
  }], ctorParameters: function () { return [{ type: SettingsService, decorators: [{
13452
13511
  type: Inject,
13453
13512
  args: [SETTINGS_SERVICE]
@@ -20197,9 +20256,12 @@ class ServicePolicyFormComponent extends ProjectableForm {
20197
20256
  this.selectedPostureRoleAttributes.push(attr.substring(1));
20198
20257
  }
20199
20258
  });
20200
- this.svc.getAssociatedServicesByAttribute(this.selectedServiceRoleAttributes, this.selectedServiceNamedAttributes);
20201
- this.svc.getAssociatedIdentitiesByAttribute(this.selectedIdentityRoleAttributes, this.selectedIdentityNamedAttributes);
20202
- this.svc.getAssociatedPostureChecksByAttribute(this.selectedPostureRoleAttributes, this.selectedPostureNamedAttributes);
20259
+ this.updateAssociations();
20260
+ }
20261
+ updateAssociations() {
20262
+ this.svc.getAssociatedServicesByAttribute(this.selectedServiceRoleAttributes, this.selectedServiceNamedAttributes, this.formData.semantic);
20263
+ this.svc.getAssociatedIdentitiesByAttribute(this.selectedIdentityRoleAttributes, this.selectedIdentityNamedAttributes, this.formData.semantic);
20264
+ this.svc.getAssociatedPostureChecksByAttribute(this.selectedPostureRoleAttributes, this.selectedPostureNamedAttributes, this.formData.semantic);
20203
20265
  }
20204
20266
  headerActionRequested(action) {
20205
20267
  switch (action.name) {
@@ -20321,7 +20383,7 @@ class ServicePolicyFormComponent extends ProjectableForm {
20321
20383
  provide: MatDialogRef,
20322
20384
  useValue: {}
20323
20385
  }
20324
- ], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"projectable-form-wrapper\"\n (keyup.enter)=\"save($event)\"\n (keyup.escape)=\"closeModal(false)\"\n [class.projectable-form-hidden]=\"!dataInit\"\n>\n <lib-form-header\n [data]=\"formData\"\n [title]=\"formData.id ? 'Edit Service Policy: ' : 'Create New Service Policy'\"\n [moreActions]=\"moreActions\"\n (actionRequested)=\"headerActionRequested($event)\"\n [(formView)]=\"formView\"\n [class.is-scrolled]=\"isScrolled\"\n ></lib-form-header>\n <div class=\"service-policy-form-container projectable-form-container\" #formContainer>\n <div class=\"projectable-form-main-column form-group-row\" *ngIf=\"formView === 'simple'\">\n <div class=\"form-group-column three-fifths\">\n <lib-form-field-container [title]=\"'Service Policy Name'\" [label]=\"'REQUIRED'\">\n <input\n class=\"form-field-input\"\n placeholder=\"Name this service policy\"\n [ngClass]=\"{error: errors['name']}\"\n [(ngModel)]=\"formData.name\"\n autofocus\n #nameFieldInput\n />\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select Service Attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 100003'\"\n [helpText]=\"'Choose which services to associate to this policy by picking from the list of available attributes'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"selectedServiceRoleAttributes\"\n [(selectedNamedAttributes)]=\"selectedServiceNamedAttributes\"\n [availableRoleAttributes]=\"svc.serviceRoleAttributes\"\n [availableNamedAttributes]=\"svc.serviceNamedAttributes\"\n (selectedNamedAttributesChange)=\"svc.getAssociatedServicesByAttribute(selectedServiceRoleAttributes, selectedServiceNamedAttributes)\"\n (selectedRoleAttributesChange)=\"svc.getAssociatedServicesByAttribute(selectedServiceRoleAttributes, selectedServiceNamedAttributes)\"\n [placeholder]=\"'Select service attributes'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select Identity Attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 100002'\"\n [helpText]=\"'Choose which identities to associate to this policy by picking from the list of available attributes'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"selectedIdentityRoleAttributes\"\n [(selectedNamedAttributes)]=\"selectedIdentityNamedAttributes\"\n [availableRoleAttributes]=\"svc.identityRoleAttributes\"\n [availableNamedAttributes]=\"svc.identityNamedAttributes\"\n (selectedNamedAttributesChange)=\"svc.getAssociatedIdentitiesByAttribute(selectedIdentityRoleAttributes, selectedIdentityNamedAttributes)\"\n (selectedRoleAttributesChange)=\"svc.getAssociatedIdentitiesByAttribute(selectedIdentityRoleAttributes, selectedIdentityNamedAttributes)\"\n [placeholder]=\"'Select identity attributes'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select Posture Check Attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 100001'\"\n [helpText]=\"'Choose which posture checks to associate to this policy by picking from the list of available attributes'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"selectedPostureRoleAttributes\"\n [(selectedNamedAttributes)]=\"selectedPostureNamedAttributes\"\n [(selectedRoleAttributes)]=\"svc.postureRoleAttributes\"\n [availableNamedAttributes]=\"svc.postureNamedAttributes\"\n (selectedNamedAttributesChange)=\"svc.getAssociatedPostureChecksByAttribute(selectedPostureRoleAttributes, selectedPostureNamedAttributes)\"\n (selectedRoleAttributesChange)=\"svc.getAssociatedPostureChecksByAttribute(selectedPostureRoleAttributes, selectedPostureNamedAttributes)\"\n [placeholder]=\"'Select posture check attributes'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Type'\"\n [title2]=\"'Semantic'\"\n [layout]=\"'row'\"\n >\n <select\n [(ngModel)]=\"formData.type\"\n id=\"PolicyType\"\n class=\"form-field-dropdown\"\n >\n <option value=\"Bind\">Bind</option>\n <option value=\"Dial\">Dial</option>\n </select>\n <select\n [(ngModel)]=\"formData.semantic\"\n id=\"PolicySemantic\"\n class=\"form-field-dropdown\"\n >\n <option value=\"AnyOf\">AnyOf</option>\n <option value=\"AllOf\">AllOf</option>\n </select>\n </lib-form-field-container>\n <lib-form-field-toggle [(toggleOn)]=\"showMore\" (toggleOnChange)=\"showMoreChanged($event)\" style=\"margin: 0px 10px\"></lib-form-field-toggle>\n <div [hidden]=\"!showMore\" class=\"form-group-column\">\n <lib-form-field-container\n [title]=\"'Custom Tags'\"\n [label]=\"'OPTIONAL'\"\n class=\"form-field-advanced\"\n *ngIf=\"!hideTags\"\n >\n <lib-custom-tags [(tags)]=\"formData.tags\"></lib-custom-tags>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column two-fifths\">\n <lib-form-field-container\n [title]=\"'Associated Services'\"\n [count]=\"svc.associatedServiceNames.length\"\n [class]=\"'hide-overflow'\"\n [helpText]=\"'Preview list of all services that this Service Policy is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"servicesLoading\"\n [allNames]=\"svc.associatedServiceNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Associated Identities'\"\n [count]=\"svc.associatedIdentityNames.length\"\n [helpText]=\"'Preview list of all Identities that this Service Policy is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"identitiesLoading\"\n [allNames]=\"svc.associatedIdentityNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Associated Posture Checks'\"\n [count]=\"svc.associatedPostureCheckNames.length\"\n [helpText]=\"'Preview list of all Posture Checks that this Service Policy is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"postureChecksLoading\"\n [allNames]=\"svc.associatedPostureCheckNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'API Calls'\"\n [headerActions]=\"apiOptions\"\n (actionRequested)=\"apiActionRequested($event)\"\n >\n <div class=\"form-row\">\n <input class=\"form-field-input\" [value]=\"apiCallURL\"/>\n <div class=\"icon-copy copy-text\" (click)=\"copyToClipboard(apiCallURL)\"></div>\n </div>\n <lib-json-view *ngIf=\"formData\" [(data)]=\"apiData\" [readOnly]=\"true\" [showCopy]=\"true\"></lib-json-view>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column\" *ngIf=\"formView === 'raw'\">\n <lib-json-view *ngIf=\"formData\" [(data)]=\"formData\"></lib-json-view>\n </div>\n </div>\n</div>\n<lib-loading-indicator *ngIf=\"isLoading || !dataInit\" [isLoading]=\"isLoading || !dataInit\"></lib-loading-indicator>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: FormHeaderComponent, selector: "lib-form-header", inputs: ["data", "badges", "title", "moreActions", "formView", "saveDisabled", "saveTooltip", "actionButtonText", "moreActionsText", "showHeaderToggle", "showHeaderButton", "multiActions"], outputs: ["formViewChange", "actionRequested", "multiActionRequested"] }, { kind: "component", type: FormFieldContainerComponent, selector: "lib-form-field-container", inputs: ["title", "title2", "titleIcon", "layout", "helpText", "helpText2", "label", "count", "action", "actionLabel", "class", "contentStyle", "contentClass", "showHeader", "showToggle", "headerActions", "headerToggle"], outputs: ["actionRequested", "headerToggleChange"] }, { kind: "component", type: PreviewListComponent, selector: "lib-preview-list", inputs: ["label", "clickable", "isLoading", "allNames", "items", "allowRemove", "tooltip", "showfilter", "localFilter"], outputs: ["itemSelected", "itemRemoved", "filterChanged"] }, { kind: "component", type: LoadingIndicatorComponent, selector: "lib-loading-indicator", inputs: ["isLoading"] }, { kind: "component", type: FormFieldToggleComponent, selector: "lib-form-field-toggle", inputs: ["label", "orientation", "labelOn", "labelOff", "toggleOn"], outputs: ["toggleOnChange"] }, { kind: "component", type: JsonViewComponent, selector: "lib-json-view", inputs: ["data", "schema", "readOnly", "jsonInvalid", "showCopy", "showLineNumbers"], outputs: ["dataChange", "jsonChange", "jsonInvalidChange"] }, { kind: "component", type: TagSelectorComponent, selector: "lib-tag-selector", inputs: ["placeholder", "disableField", "disableCreate", "hideOption", "isLoading", "errorMessage", "focusOnInit", "selectedRoleAttributes", "selectedNamedAttributes", "hasError", "availableRoleAttributes", "availableNamedAttributes"], outputs: ["addRoleAttribute", "addNamedAttribute", "roleAttributeRemoved", "namedAttributeRemoved", "selectedRoleAttributesChange", "selectedNamedAttributesChange", "filterChange"] }, { kind: "component", type: CustomTagsComponent, selector: "lib-custom-tags", inputs: ["tags"], outputs: ["tagsChange"] }] }); }
20386
+ ], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"projectable-form-wrapper\"\n (keyup.enter)=\"save($event)\"\n (keyup.escape)=\"closeModal(false)\"\n [class.projectable-form-hidden]=\"!dataInit\"\n>\n <lib-form-header\n [data]=\"formData\"\n [title]=\"formData.id ? 'Edit Service Policy: ' : 'Create New Service Policy'\"\n [moreActions]=\"moreActions\"\n (actionRequested)=\"headerActionRequested($event)\"\n [(formView)]=\"formView\"\n [class.is-scrolled]=\"isScrolled\"\n ></lib-form-header>\n <div class=\"service-policy-form-container projectable-form-container\" #formContainer>\n <div class=\"projectable-form-main-column form-group-row\" *ngIf=\"formView === 'simple'\">\n <div class=\"form-group-column three-fifths\">\n <lib-form-field-container [title]=\"'Service Policy Name'\" [label]=\"'REQUIRED'\">\n <input\n class=\"form-field-input\"\n placeholder=\"Name this service policy\"\n [ngClass]=\"{error: errors['name']}\"\n [(ngModel)]=\"formData.name\"\n autofocus\n #nameFieldInput\n />\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select Service Attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 100003'\"\n [helpText]=\"'Choose which services to associate to this policy by picking from the list of available attributes'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"selectedServiceRoleAttributes\"\n [(selectedNamedAttributes)]=\"selectedServiceNamedAttributes\"\n [availableRoleAttributes]=\"svc.serviceRoleAttributes\"\n [availableNamedAttributes]=\"svc.serviceNamedAttributes\"\n (selectedNamedAttributesChange)=\"svc.getAssociatedServicesByAttribute(selectedServiceRoleAttributes, selectedServiceNamedAttributes, formData.semantic)\"\n (selectedRoleAttributesChange)=\"svc.getAssociatedServicesByAttribute(selectedServiceRoleAttributes, selectedServiceNamedAttributes, formData.semantic)\"\n [placeholder]=\"'Select service attributes'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select Identity Attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 100002'\"\n [helpText]=\"'Choose which identities to associate to this policy by picking from the list of available attributes'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"selectedIdentityRoleAttributes\"\n [(selectedNamedAttributes)]=\"selectedIdentityNamedAttributes\"\n [availableRoleAttributes]=\"svc.identityRoleAttributes\"\n [availableNamedAttributes]=\"svc.identityNamedAttributes\"\n (selectedNamedAttributesChange)=\"svc.getAssociatedIdentitiesByAttribute(selectedIdentityRoleAttributes, selectedIdentityNamedAttributes, formData.semantic)\"\n (selectedRoleAttributesChange)=\"svc.getAssociatedIdentitiesByAttribute(selectedIdentityRoleAttributes, selectedIdentityNamedAttributes, formData.semantic)\"\n [placeholder]=\"'Select identity attributes'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select Posture Check Attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 100001'\"\n [helpText]=\"'Choose which posture checks to associate to this policy by picking from the list of available attributes'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"selectedPostureRoleAttributes\"\n [(selectedNamedAttributes)]=\"selectedPostureNamedAttributes\"\n [(selectedRoleAttributes)]=\"svc.postureRoleAttributes\"\n [availableNamedAttributes]=\"svc.postureNamedAttributes\"\n (selectedNamedAttributesChange)=\"svc.getAssociatedPostureChecksByAttribute(selectedPostureRoleAttributes, selectedPostureNamedAttributes, formData.semantic)\"\n (selectedRoleAttributesChange)=\"svc.getAssociatedPostureChecksByAttribute(selectedPostureRoleAttributes, selectedPostureNamedAttributes, formData.semantic)\"\n [placeholder]=\"'Select posture check attributes'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Type'\"\n [title2]=\"'Semantic'\"\n [layout]=\"'row'\"\n >\n <select\n [(ngModel)]=\"formData.type\"\n id=\"PolicyType\"\n class=\"form-field-dropdown\"\n >\n <option value=\"Bind\">Bind</option>\n <option value=\"Dial\">Dial</option>\n </select>\n <select\n [(ngModel)]=\"formData.semantic\"\n (change)=\"updateAssociations()\"\n id=\"PolicySemantic\"\n class=\"form-field-dropdown\"\n >\n <option value=\"AnyOf\">AnyOf</option>\n <option value=\"AllOf\">AllOf</option>\n </select>\n </lib-form-field-container>\n <lib-form-field-toggle [(toggleOn)]=\"showMore\" (toggleOnChange)=\"showMoreChanged($event)\" style=\"margin: 0px 10px\"></lib-form-field-toggle>\n <div [hidden]=\"!showMore\" class=\"form-group-column\">\n <lib-form-field-container\n [title]=\"'Custom Tags'\"\n [label]=\"'OPTIONAL'\"\n class=\"form-field-advanced\"\n *ngIf=\"!hideTags\"\n >\n <lib-custom-tags [(tags)]=\"formData.tags\"></lib-custom-tags>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column two-fifths\">\n <lib-form-field-container\n [title]=\"'Associated Services'\"\n [count]=\"svc.associatedServiceNames.length\"\n [class]=\"'hide-overflow'\"\n [helpText]=\"'Preview list of all services that this Service Policy is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"servicesLoading\"\n [allNames]=\"svc.associatedServiceNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Associated Identities'\"\n [count]=\"svc.associatedIdentityNames.length\"\n [helpText]=\"'Preview list of all Identities that this Service Policy is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"identitiesLoading\"\n [allNames]=\"svc.associatedIdentityNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Associated Posture Checks'\"\n [count]=\"svc.associatedPostureCheckNames.length\"\n [helpText]=\"'Preview list of all Posture Checks that this Service Policy is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"postureChecksLoading\"\n [allNames]=\"svc.associatedPostureCheckNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'API Calls'\"\n [headerActions]=\"apiOptions\"\n (actionRequested)=\"apiActionRequested($event)\"\n >\n <div class=\"form-row\">\n <input class=\"form-field-input\" [value]=\"apiCallURL\"/>\n <div class=\"icon-copy copy-text\" (click)=\"copyToClipboard(apiCallURL)\"></div>\n </div>\n <lib-json-view *ngIf=\"formData\" [(data)]=\"apiData\" [readOnly]=\"true\" [showCopy]=\"true\"></lib-json-view>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column\" *ngIf=\"formView === 'raw'\">\n <lib-json-view *ngIf=\"formData\" [(data)]=\"formData\"></lib-json-view>\n </div>\n </div>\n</div>\n<lib-loading-indicator *ngIf=\"isLoading || !dataInit\" [isLoading]=\"isLoading || !dataInit\"></lib-loading-indicator>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: FormHeaderComponent, selector: "lib-form-header", inputs: ["data", "badges", "title", "moreActions", "formView", "saveDisabled", "saveTooltip", "actionButtonText", "moreActionsText", "showHeaderToggle", "showHeaderButton", "multiActions"], outputs: ["formViewChange", "actionRequested", "multiActionRequested"] }, { kind: "component", type: FormFieldContainerComponent, selector: "lib-form-field-container", inputs: ["title", "title2", "titleIcon", "layout", "helpText", "helpText2", "label", "count", "action", "actionLabel", "class", "contentStyle", "contentClass", "showHeader", "showToggle", "headerActions", "headerToggle"], outputs: ["actionRequested", "headerToggleChange"] }, { kind: "component", type: PreviewListComponent, selector: "lib-preview-list", inputs: ["label", "clickable", "isLoading", "allNames", "items", "allowRemove", "tooltip", "showfilter", "localFilter"], outputs: ["itemSelected", "itemRemoved", "filterChanged"] }, { kind: "component", type: LoadingIndicatorComponent, selector: "lib-loading-indicator", inputs: ["isLoading"] }, { kind: "component", type: FormFieldToggleComponent, selector: "lib-form-field-toggle", inputs: ["label", "orientation", "labelOn", "labelOff", "toggleOn"], outputs: ["toggleOnChange"] }, { kind: "component", type: JsonViewComponent, selector: "lib-json-view", inputs: ["data", "schema", "readOnly", "jsonInvalid", "showCopy", "showLineNumbers"], outputs: ["dataChange", "jsonChange", "jsonInvalidChange"] }, { kind: "component", type: TagSelectorComponent, selector: "lib-tag-selector", inputs: ["placeholder", "disableField", "disableCreate", "hideOption", "isLoading", "errorMessage", "focusOnInit", "selectedRoleAttributes", "selectedNamedAttributes", "hasError", "availableRoleAttributes", "availableNamedAttributes"], outputs: ["addRoleAttribute", "addNamedAttribute", "roleAttributeRemoved", "namedAttributeRemoved", "selectedRoleAttributesChange", "selectedNamedAttributesChange", "filterChange"] }, { kind: "component", type: CustomTagsComponent, selector: "lib-custom-tags", inputs: ["tags"], outputs: ["tagsChange"] }] }); }
20325
20387
  }
20326
20388
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ServicePolicyFormComponent, decorators: [{
20327
20389
  type: Component,
@@ -20330,7 +20392,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
20330
20392
  provide: MatDialogRef,
20331
20393
  useValue: {}
20332
20394
  }
20333
- ], template: "<div class=\"projectable-form-wrapper\"\n (keyup.enter)=\"save($event)\"\n (keyup.escape)=\"closeModal(false)\"\n [class.projectable-form-hidden]=\"!dataInit\"\n>\n <lib-form-header\n [data]=\"formData\"\n [title]=\"formData.id ? 'Edit Service Policy: ' : 'Create New Service Policy'\"\n [moreActions]=\"moreActions\"\n (actionRequested)=\"headerActionRequested($event)\"\n [(formView)]=\"formView\"\n [class.is-scrolled]=\"isScrolled\"\n ></lib-form-header>\n <div class=\"service-policy-form-container projectable-form-container\" #formContainer>\n <div class=\"projectable-form-main-column form-group-row\" *ngIf=\"formView === 'simple'\">\n <div class=\"form-group-column three-fifths\">\n <lib-form-field-container [title]=\"'Service Policy Name'\" [label]=\"'REQUIRED'\">\n <input\n class=\"form-field-input\"\n placeholder=\"Name this service policy\"\n [ngClass]=\"{error: errors['name']}\"\n [(ngModel)]=\"formData.name\"\n autofocus\n #nameFieldInput\n />\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select Service Attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 100003'\"\n [helpText]=\"'Choose which services to associate to this policy by picking from the list of available attributes'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"selectedServiceRoleAttributes\"\n [(selectedNamedAttributes)]=\"selectedServiceNamedAttributes\"\n [availableRoleAttributes]=\"svc.serviceRoleAttributes\"\n [availableNamedAttributes]=\"svc.serviceNamedAttributes\"\n (selectedNamedAttributesChange)=\"svc.getAssociatedServicesByAttribute(selectedServiceRoleAttributes, selectedServiceNamedAttributes)\"\n (selectedRoleAttributesChange)=\"svc.getAssociatedServicesByAttribute(selectedServiceRoleAttributes, selectedServiceNamedAttributes)\"\n [placeholder]=\"'Select service attributes'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select Identity Attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 100002'\"\n [helpText]=\"'Choose which identities to associate to this policy by picking from the list of available attributes'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"selectedIdentityRoleAttributes\"\n [(selectedNamedAttributes)]=\"selectedIdentityNamedAttributes\"\n [availableRoleAttributes]=\"svc.identityRoleAttributes\"\n [availableNamedAttributes]=\"svc.identityNamedAttributes\"\n (selectedNamedAttributesChange)=\"svc.getAssociatedIdentitiesByAttribute(selectedIdentityRoleAttributes, selectedIdentityNamedAttributes)\"\n (selectedRoleAttributesChange)=\"svc.getAssociatedIdentitiesByAttribute(selectedIdentityRoleAttributes, selectedIdentityNamedAttributes)\"\n [placeholder]=\"'Select identity attributes'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select Posture Check Attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 100001'\"\n [helpText]=\"'Choose which posture checks to associate to this policy by picking from the list of available attributes'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"selectedPostureRoleAttributes\"\n [(selectedNamedAttributes)]=\"selectedPostureNamedAttributes\"\n [(selectedRoleAttributes)]=\"svc.postureRoleAttributes\"\n [availableNamedAttributes]=\"svc.postureNamedAttributes\"\n (selectedNamedAttributesChange)=\"svc.getAssociatedPostureChecksByAttribute(selectedPostureRoleAttributes, selectedPostureNamedAttributes)\"\n (selectedRoleAttributesChange)=\"svc.getAssociatedPostureChecksByAttribute(selectedPostureRoleAttributes, selectedPostureNamedAttributes)\"\n [placeholder]=\"'Select posture check attributes'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Type'\"\n [title2]=\"'Semantic'\"\n [layout]=\"'row'\"\n >\n <select\n [(ngModel)]=\"formData.type\"\n id=\"PolicyType\"\n class=\"form-field-dropdown\"\n >\n <option value=\"Bind\">Bind</option>\n <option value=\"Dial\">Dial</option>\n </select>\n <select\n [(ngModel)]=\"formData.semantic\"\n id=\"PolicySemantic\"\n class=\"form-field-dropdown\"\n >\n <option value=\"AnyOf\">AnyOf</option>\n <option value=\"AllOf\">AllOf</option>\n </select>\n </lib-form-field-container>\n <lib-form-field-toggle [(toggleOn)]=\"showMore\" (toggleOnChange)=\"showMoreChanged($event)\" style=\"margin: 0px 10px\"></lib-form-field-toggle>\n <div [hidden]=\"!showMore\" class=\"form-group-column\">\n <lib-form-field-container\n [title]=\"'Custom Tags'\"\n [label]=\"'OPTIONAL'\"\n class=\"form-field-advanced\"\n *ngIf=\"!hideTags\"\n >\n <lib-custom-tags [(tags)]=\"formData.tags\"></lib-custom-tags>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column two-fifths\">\n <lib-form-field-container\n [title]=\"'Associated Services'\"\n [count]=\"svc.associatedServiceNames.length\"\n [class]=\"'hide-overflow'\"\n [helpText]=\"'Preview list of all services that this Service Policy is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"servicesLoading\"\n [allNames]=\"svc.associatedServiceNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Associated Identities'\"\n [count]=\"svc.associatedIdentityNames.length\"\n [helpText]=\"'Preview list of all Identities that this Service Policy is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"identitiesLoading\"\n [allNames]=\"svc.associatedIdentityNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Associated Posture Checks'\"\n [count]=\"svc.associatedPostureCheckNames.length\"\n [helpText]=\"'Preview list of all Posture Checks that this Service Policy is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"postureChecksLoading\"\n [allNames]=\"svc.associatedPostureCheckNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'API Calls'\"\n [headerActions]=\"apiOptions\"\n (actionRequested)=\"apiActionRequested($event)\"\n >\n <div class=\"form-row\">\n <input class=\"form-field-input\" [value]=\"apiCallURL\"/>\n <div class=\"icon-copy copy-text\" (click)=\"copyToClipboard(apiCallURL)\"></div>\n </div>\n <lib-json-view *ngIf=\"formData\" [(data)]=\"apiData\" [readOnly]=\"true\" [showCopy]=\"true\"></lib-json-view>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column\" *ngIf=\"formView === 'raw'\">\n <lib-json-view *ngIf=\"formData\" [(data)]=\"formData\"></lib-json-view>\n </div>\n </div>\n</div>\n<lib-loading-indicator *ngIf=\"isLoading || !dataInit\" [isLoading]=\"isLoading || !dataInit\"></lib-loading-indicator>\n" }]
20395
+ ], template: "<div class=\"projectable-form-wrapper\"\n (keyup.enter)=\"save($event)\"\n (keyup.escape)=\"closeModal(false)\"\n [class.projectable-form-hidden]=\"!dataInit\"\n>\n <lib-form-header\n [data]=\"formData\"\n [title]=\"formData.id ? 'Edit Service Policy: ' : 'Create New Service Policy'\"\n [moreActions]=\"moreActions\"\n (actionRequested)=\"headerActionRequested($event)\"\n [(formView)]=\"formView\"\n [class.is-scrolled]=\"isScrolled\"\n ></lib-form-header>\n <div class=\"service-policy-form-container projectable-form-container\" #formContainer>\n <div class=\"projectable-form-main-column form-group-row\" *ngIf=\"formView === 'simple'\">\n <div class=\"form-group-column three-fifths\">\n <lib-form-field-container [title]=\"'Service Policy Name'\" [label]=\"'REQUIRED'\">\n <input\n class=\"form-field-input\"\n placeholder=\"Name this service policy\"\n [ngClass]=\"{error: errors['name']}\"\n [(ngModel)]=\"formData.name\"\n autofocus\n #nameFieldInput\n />\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select Service Attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 100003'\"\n [helpText]=\"'Choose which services to associate to this policy by picking from the list of available attributes'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"selectedServiceRoleAttributes\"\n [(selectedNamedAttributes)]=\"selectedServiceNamedAttributes\"\n [availableRoleAttributes]=\"svc.serviceRoleAttributes\"\n [availableNamedAttributes]=\"svc.serviceNamedAttributes\"\n (selectedNamedAttributesChange)=\"svc.getAssociatedServicesByAttribute(selectedServiceRoleAttributes, selectedServiceNamedAttributes, formData.semantic)\"\n (selectedRoleAttributesChange)=\"svc.getAssociatedServicesByAttribute(selectedServiceRoleAttributes, selectedServiceNamedAttributes, formData.semantic)\"\n [placeholder]=\"'Select service attributes'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select Identity Attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 100002'\"\n [helpText]=\"'Choose which identities to associate to this policy by picking from the list of available attributes'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"selectedIdentityRoleAttributes\"\n [(selectedNamedAttributes)]=\"selectedIdentityNamedAttributes\"\n [availableRoleAttributes]=\"svc.identityRoleAttributes\"\n [availableNamedAttributes]=\"svc.identityNamedAttributes\"\n (selectedNamedAttributesChange)=\"svc.getAssociatedIdentitiesByAttribute(selectedIdentityRoleAttributes, selectedIdentityNamedAttributes, formData.semantic)\"\n (selectedRoleAttributesChange)=\"svc.getAssociatedIdentitiesByAttribute(selectedIdentityRoleAttributes, selectedIdentityNamedAttributes, formData.semantic)\"\n [placeholder]=\"'Select identity attributes'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select Posture Check Attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 100001'\"\n [helpText]=\"'Choose which posture checks to associate to this policy by picking from the list of available attributes'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"selectedPostureRoleAttributes\"\n [(selectedNamedAttributes)]=\"selectedPostureNamedAttributes\"\n [(selectedRoleAttributes)]=\"svc.postureRoleAttributes\"\n [availableNamedAttributes]=\"svc.postureNamedAttributes\"\n (selectedNamedAttributesChange)=\"svc.getAssociatedPostureChecksByAttribute(selectedPostureRoleAttributes, selectedPostureNamedAttributes, formData.semantic)\"\n (selectedRoleAttributesChange)=\"svc.getAssociatedPostureChecksByAttribute(selectedPostureRoleAttributes, selectedPostureNamedAttributes, formData.semantic)\"\n [placeholder]=\"'Select posture check attributes'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Type'\"\n [title2]=\"'Semantic'\"\n [layout]=\"'row'\"\n >\n <select\n [(ngModel)]=\"formData.type\"\n id=\"PolicyType\"\n class=\"form-field-dropdown\"\n >\n <option value=\"Bind\">Bind</option>\n <option value=\"Dial\">Dial</option>\n </select>\n <select\n [(ngModel)]=\"formData.semantic\"\n (change)=\"updateAssociations()\"\n id=\"PolicySemantic\"\n class=\"form-field-dropdown\"\n >\n <option value=\"AnyOf\">AnyOf</option>\n <option value=\"AllOf\">AllOf</option>\n </select>\n </lib-form-field-container>\n <lib-form-field-toggle [(toggleOn)]=\"showMore\" (toggleOnChange)=\"showMoreChanged($event)\" style=\"margin: 0px 10px\"></lib-form-field-toggle>\n <div [hidden]=\"!showMore\" class=\"form-group-column\">\n <lib-form-field-container\n [title]=\"'Custom Tags'\"\n [label]=\"'OPTIONAL'\"\n class=\"form-field-advanced\"\n *ngIf=\"!hideTags\"\n >\n <lib-custom-tags [(tags)]=\"formData.tags\"></lib-custom-tags>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column two-fifths\">\n <lib-form-field-container\n [title]=\"'Associated Services'\"\n [count]=\"svc.associatedServiceNames.length\"\n [class]=\"'hide-overflow'\"\n [helpText]=\"'Preview list of all services that this Service Policy is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"servicesLoading\"\n [allNames]=\"svc.associatedServiceNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Associated Identities'\"\n [count]=\"svc.associatedIdentityNames.length\"\n [helpText]=\"'Preview list of all Identities that this Service Policy is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"identitiesLoading\"\n [allNames]=\"svc.associatedIdentityNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Associated Posture Checks'\"\n [count]=\"svc.associatedPostureCheckNames.length\"\n [helpText]=\"'Preview list of all Posture Checks that this Service Policy is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"postureChecksLoading\"\n [allNames]=\"svc.associatedPostureCheckNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'API Calls'\"\n [headerActions]=\"apiOptions\"\n (actionRequested)=\"apiActionRequested($event)\"\n >\n <div class=\"form-row\">\n <input class=\"form-field-input\" [value]=\"apiCallURL\"/>\n <div class=\"icon-copy copy-text\" (click)=\"copyToClipboard(apiCallURL)\"></div>\n </div>\n <lib-json-view *ngIf=\"formData\" [(data)]=\"apiData\" [readOnly]=\"true\" [showCopy]=\"true\"></lib-json-view>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column\" *ngIf=\"formView === 'raw'\">\n <lib-json-view *ngIf=\"formData\" [(data)]=\"formData\"></lib-json-view>\n </div>\n </div>\n</div>\n<lib-loading-indicator *ngIf=\"isLoading || !dataInit\" [isLoading]=\"isLoading || !dataInit\"></lib-loading-indicator>\n" }]
20334
20396
  }], ctorParameters: function () { return [{ type: SettingsService, decorators: [{
20335
20397
  type: Inject,
20336
20398
  args: [SETTINGS_SERVICE]
@@ -20405,13 +20467,13 @@ class EdgeRouterPolicyFormService {
20405
20467
  });
20406
20468
  });
20407
20469
  }
20408
- getAssociatedEdgeRoutersByAttribute(roleAttributes, namedAttributes) {
20470
+ getAssociatedEdgeRoutersByAttribute(roleAttributes, namedAttributes, semantic = 'AnyOf') {
20409
20471
  this.associatedEdgeRouterNames = [];
20410
20472
  if (isEmpty(roleAttributes)) {
20411
20473
  this.associatedEdgeRouterNames = [...namedAttributes];
20412
20474
  return;
20413
20475
  }
20414
- const filters = this.zitiService.getRoleFilter(roleAttributes);
20476
+ const filters = this.zitiService.getRoleFilter(roleAttributes, semantic);
20415
20477
  const paging = this.zitiService.DEFAULT_PAGING;
20416
20478
  paging.noSearch = false;
20417
20479
  this.zitiService.get('edge-routers', paging, filters).then((result) => {
@@ -20425,13 +20487,13 @@ class EdgeRouterPolicyFormService {
20425
20487
  this.associatedEdgeRouterNames = this.associatedEdgeRouterNames.filter(item => item !== undefined);
20426
20488
  });
20427
20489
  }
20428
- getAssociatedIdentitiesByAttribute(roleAttributes, namedAttributes) {
20490
+ getAssociatedIdentitiesByAttribute(roleAttributes, namedAttributes, semantic = 'AnyOf') {
20429
20491
  this.associatedIdentityNames = [];
20430
20492
  if (isEmpty(roleAttributes)) {
20431
20493
  this.associatedIdentityNames = [...namedAttributes];
20432
20494
  return;
20433
20495
  }
20434
- const filters = this.zitiService.getRoleFilter(roleAttributes);
20496
+ const filters = this.zitiService.getRoleFilter(roleAttributes, semantic);
20435
20497
  const paging = this.zitiService.DEFAULT_PAGING;
20436
20498
  paging.noSearch = false;
20437
20499
  this.zitiService.get('identities', paging, filters).then((result) => {
@@ -20630,8 +20692,11 @@ class EdgeRouterPolicyFormComponent extends ProjectableForm {
20630
20692
  this.selectedIdentityRoleAttributes.push(attr.substring(1));
20631
20693
  }
20632
20694
  });
20633
- this.svc.getAssociatedEdgeRoutersByAttribute(this.selectedEdgeRouterRoleAttributes, this.selectedEdgeRouterNamedAttributes);
20634
- this.svc.getAssociatedIdentitiesByAttribute(this.selectedIdentityRoleAttributes, this.selectedIdentityNamedAttributes);
20695
+ this.updateAssociations();
20696
+ }
20697
+ updateAssociations() {
20698
+ this.svc.getAssociatedEdgeRoutersByAttribute(this.selectedEdgeRouterRoleAttributes, this.selectedEdgeRouterNamedAttributes, this.formData?.semantic);
20699
+ this.svc.getAssociatedIdentitiesByAttribute(this.selectedIdentityRoleAttributes, this.selectedIdentityNamedAttributes, this.formData?.semantic);
20635
20700
  }
20636
20701
  headerActionRequested(action) {
20637
20702
  switch (action.name) {
@@ -20747,7 +20812,7 @@ ${this.formData.id ? '--request PATCH \\' : ''}
20747
20812
  provide: MatDialogRef,
20748
20813
  useValue: {}
20749
20814
  }
20750
- ], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"projectable-form-wrapper\"\n (keyup.enter)=\"save($event)\"\n (keyup.escape)=\"closeModal(false)\"\n [class.projectable-form-hidden]=\"!dataInit\"\n>\n <lib-form-header\n [data]=\"formData\"\n [title]=\"formData.id ? 'Edit Edge Router Policy: ' : 'Create New Edge Router Policy'\"\n [moreActions]=\"moreActions\"\n (actionRequested)=\"headerActionRequested($event)\"\n [(formView)]=\"formView\"\n [class.is-scrolled]=\"isScrolled\"\n ></lib-form-header>\n <div class=\"edge-router-policy-form-container projectable-form-container\" #formContainer>\n <div class=\"projectable-form-main-column form-group-row\" *ngIf=\"formView === 'simple'\">\n <div class=\"form-group-column three-fifths\">\n <lib-form-field-container [title]=\"'Edge Router Policy Name'\" [label]=\"'REQUIRED'\">\n <input\n class=\"form-field-input\"\n placeholder=\"Name this edge router policy\"\n [ngClass]=\"{error: errors['name']}\"\n [(ngModel)]=\"formData.name\"\n autofocus\n #nameFieldInput\n />\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select Edge Router Attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 100003'\"\n [helpText]=\"'Choose which edge router to associate to this policy by picking from the list of available attributes'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"selectedEdgeRouterRoleAttributes\"\n [(selectedNamedAttributes)]=\"selectedEdgeRouterNamedAttributes\"\n [availableRoleAttributes]=\"svc.edgeRouterRoleAttributes\"\n [availableNamedAttributes]=\"svc.edgeRouterNamedAttributes\"\n (selectedNamedAttributesChange)=\"svc.getAssociatedEdgeRoutersByAttribute(selectedEdgeRouterRoleAttributes, selectedEdgeRouterNamedAttributes)\"\n (selectedRoleAttributesChange)=\"svc.getAssociatedEdgeRoutersByAttribute(selectedEdgeRouterRoleAttributes, selectedEdgeRouterNamedAttributes)\"\n [placeholder]=\"'Select edge router attributes'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select Identity Attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 100002'\"\n [helpText]=\"'Choose which identities to associate to this policy by picking from the list of available attributes'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"selectedIdentityRoleAttributes\"\n [(selectedNamedAttributes)]=\"selectedIdentityNamedAttributes\"\n [availableRoleAttributes]=\"svc.identityRoleAttributes\"\n [availableNamedAttributes]=\"svc.identityNamedAttributes\"\n (selectedNamedAttributesChange)=\"svc.getAssociatedIdentitiesByAttribute(selectedIdentityRoleAttributes, selectedIdentityNamedAttributes)\"\n (selectedRoleAttributesChange)=\"svc.getAssociatedIdentitiesByAttribute(selectedIdentityRoleAttributes, selectedIdentityNamedAttributes)\"\n [placeholder]=\"'Select identity attributes'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Semantic'\"\n [layout]=\"'row'\"\n >\n <select\n [(ngModel)]=\"formData.semantic\"\n id=\"PolicySemantic\"\n class=\"form-field-dropdown\"\n >\n <option value=\"AnyOf\">AnyOf</option>\n <option value=\"AllOf\">AllOf</option>\n </select>\n </lib-form-field-container>\n <lib-form-field-toggle [(toggleOn)]=\"showMore\" (toggleOnChange)=\"showMoreChanged($event)\" style=\"margin: 0px 10px\"></lib-form-field-toggle>\n <div [hidden]=\"!showMore\" class=\"form-group-column\">\n <lib-form-field-container\n [title]=\"'Custom Tags'\"\n [label]=\"'OPTIONAL'\"\n class=\"form-field-advanced\"\n *ngIf=\"!hideTags\"\n >\n <lib-custom-tags [(tags)]=\"formData.tags\"></lib-custom-tags>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column two-fifths\">\n <lib-form-field-container\n [title]=\"'Associated Edge Routers'\"\n [count]=\"svc.associatedEdgeRouterNames.length\"\n [class]=\"'hide-overflow'\"\n [helpText]=\"'Preview list of all Edge Routers that this Edge Router Policy is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"edgeRoutersLoading\"\n [allNames]=\"svc.associatedEdgeRouterNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Associated Identities'\"\n [count]=\"svc.associatedIdentityNames.length\"\n [helpText]=\"'Preview list of all Identities that this Edge Router Policy is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"identitiesLoading\"\n [allNames]=\"svc.associatedIdentityNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'API Calls'\"\n [headerActions]=\"apiOptions\"\n (actionRequested)=\"apiActionRequested($event)\"\n >\n <div class=\"form-row\">\n <input class=\"form-field-input\" [value]=\"apiCallURL\"/>\n <div class=\"icon-copy copy-text\" (click)=\"copyToClipboard(apiCallURL)\"></div>\n </div>\n <lib-json-view *ngIf=\"formData\" [(data)]=\"apiData\" [readOnly]=\"true\" [showCopy]=\"true\"></lib-json-view>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column\" *ngIf=\"formView === 'raw'\">\n <lib-json-view *ngIf=\"formData\" [(data)]=\"formData\"></lib-json-view>\n </div>\n </div>\n</div>\n<lib-loading-indicator *ngIf=\"isLoading || !dataInit\" [isLoading]=\"isLoading || !dataInit\"></lib-loading-indicator>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: FormHeaderComponent, selector: "lib-form-header", inputs: ["data", "badges", "title", "moreActions", "formView", "saveDisabled", "saveTooltip", "actionButtonText", "moreActionsText", "showHeaderToggle", "showHeaderButton", "multiActions"], outputs: ["formViewChange", "actionRequested", "multiActionRequested"] }, { kind: "component", type: FormFieldContainerComponent, selector: "lib-form-field-container", inputs: ["title", "title2", "titleIcon", "layout", "helpText", "helpText2", "label", "count", "action", "actionLabel", "class", "contentStyle", "contentClass", "showHeader", "showToggle", "headerActions", "headerToggle"], outputs: ["actionRequested", "headerToggleChange"] }, { kind: "component", type: PreviewListComponent, selector: "lib-preview-list", inputs: ["label", "clickable", "isLoading", "allNames", "items", "allowRemove", "tooltip", "showfilter", "localFilter"], outputs: ["itemSelected", "itemRemoved", "filterChanged"] }, { kind: "component", type: LoadingIndicatorComponent, selector: "lib-loading-indicator", inputs: ["isLoading"] }, { kind: "component", type: FormFieldToggleComponent, selector: "lib-form-field-toggle", inputs: ["label", "orientation", "labelOn", "labelOff", "toggleOn"], outputs: ["toggleOnChange"] }, { kind: "component", type: JsonViewComponent, selector: "lib-json-view", inputs: ["data", "schema", "readOnly", "jsonInvalid", "showCopy", "showLineNumbers"], outputs: ["dataChange", "jsonChange", "jsonInvalidChange"] }, { kind: "component", type: TagSelectorComponent, selector: "lib-tag-selector", inputs: ["placeholder", "disableField", "disableCreate", "hideOption", "isLoading", "errorMessage", "focusOnInit", "selectedRoleAttributes", "selectedNamedAttributes", "hasError", "availableRoleAttributes", "availableNamedAttributes"], outputs: ["addRoleAttribute", "addNamedAttribute", "roleAttributeRemoved", "namedAttributeRemoved", "selectedRoleAttributesChange", "selectedNamedAttributesChange", "filterChange"] }, { kind: "component", type: CustomTagsComponent, selector: "lib-custom-tags", inputs: ["tags"], outputs: ["tagsChange"] }] }); }
20815
+ ], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"projectable-form-wrapper\"\n (keyup.enter)=\"save($event)\"\n (keyup.escape)=\"closeModal(false)\"\n [class.projectable-form-hidden]=\"!dataInit\"\n>\n <lib-form-header\n [data]=\"formData\"\n [title]=\"formData.id ? 'Edit Edge Router Policy: ' : 'Create New Edge Router Policy'\"\n [moreActions]=\"moreActions\"\n (actionRequested)=\"headerActionRequested($event)\"\n [(formView)]=\"formView\"\n [class.is-scrolled]=\"isScrolled\"\n ></lib-form-header>\n <div class=\"edge-router-policy-form-container projectable-form-container\" #formContainer>\n <div class=\"projectable-form-main-column form-group-row\" *ngIf=\"formView === 'simple'\">\n <div class=\"form-group-column three-fifths\">\n <lib-form-field-container [title]=\"'Edge Router Policy Name'\" [label]=\"'REQUIRED'\">\n <input\n class=\"form-field-input\"\n placeholder=\"Name this edge router policy\"\n [ngClass]=\"{error: errors['name']}\"\n [(ngModel)]=\"formData.name\"\n autofocus\n #nameFieldInput\n />\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select Edge Router Attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 100003'\"\n [helpText]=\"'Choose which edge router to associate to this policy by picking from the list of available attributes'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"selectedEdgeRouterRoleAttributes\"\n [(selectedNamedAttributes)]=\"selectedEdgeRouterNamedAttributes\"\n [availableRoleAttributes]=\"svc.edgeRouterRoleAttributes\"\n [availableNamedAttributes]=\"svc.edgeRouterNamedAttributes\"\n (selectedNamedAttributesChange)=\"svc.getAssociatedEdgeRoutersByAttribute(selectedEdgeRouterRoleAttributes, selectedEdgeRouterNamedAttributes, formData.semantic)\"\n (selectedRoleAttributesChange)=\"svc.getAssociatedEdgeRoutersByAttribute(selectedEdgeRouterRoleAttributes, selectedEdgeRouterNamedAttributes, formData.semantic)\"\n [placeholder]=\"'Select edge router attributes'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select Identity Attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 100002'\"\n [helpText]=\"'Choose which identities to associate to this policy by picking from the list of available attributes'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"selectedIdentityRoleAttributes\"\n [(selectedNamedAttributes)]=\"selectedIdentityNamedAttributes\"\n [availableRoleAttributes]=\"svc.identityRoleAttributes\"\n [availableNamedAttributes]=\"svc.identityNamedAttributes\"\n (selectedNamedAttributesChange)=\"svc.getAssociatedIdentitiesByAttribute(selectedIdentityRoleAttributes, selectedIdentityNamedAttributes, formData.semantic)\"\n (selectedRoleAttributesChange)=\"svc.getAssociatedIdentitiesByAttribute(selectedIdentityRoleAttributes, selectedIdentityNamedAttributes, formData.semantic)\"\n [placeholder]=\"'Select identity attributes'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Semantic'\"\n [layout]=\"'row'\"\n >\n <select\n [(ngModel)]=\"formData.semantic\"\n (change)=\"updateAssociations()\"\n id=\"PolicySemantic\"\n class=\"form-field-dropdown\"\n >\n <option value=\"AnyOf\">AnyOf</option>\n <option value=\"AllOf\">AllOf</option>\n </select>\n </lib-form-field-container>\n <lib-form-field-toggle [(toggleOn)]=\"showMore\" (toggleOnChange)=\"showMoreChanged($event)\" style=\"margin: 0px 10px\"></lib-form-field-toggle>\n <div [hidden]=\"!showMore\" class=\"form-group-column\">\n <lib-form-field-container\n [title]=\"'Custom Tags'\"\n [label]=\"'OPTIONAL'\"\n class=\"form-field-advanced\"\n *ngIf=\"!hideTags\"\n >\n <lib-custom-tags [(tags)]=\"formData.tags\"></lib-custom-tags>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column two-fifths\">\n <lib-form-field-container\n [title]=\"'Associated Edge Routers'\"\n [count]=\"svc.associatedEdgeRouterNames.length\"\n [class]=\"'hide-overflow'\"\n [helpText]=\"'Preview list of all Edge Routers that this Edge Router Policy is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"edgeRoutersLoading\"\n [allNames]=\"svc.associatedEdgeRouterNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Associated Identities'\"\n [count]=\"svc.associatedIdentityNames.length\"\n [helpText]=\"'Preview list of all Identities that this Edge Router Policy is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"identitiesLoading\"\n [allNames]=\"svc.associatedIdentityNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'API Calls'\"\n [headerActions]=\"apiOptions\"\n (actionRequested)=\"apiActionRequested($event)\"\n >\n <div class=\"form-row\">\n <input class=\"form-field-input\" [value]=\"apiCallURL\"/>\n <div class=\"icon-copy copy-text\" (click)=\"copyToClipboard(apiCallURL)\"></div>\n </div>\n <lib-json-view *ngIf=\"formData\" [(data)]=\"apiData\" [readOnly]=\"true\" [showCopy]=\"true\"></lib-json-view>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column\" *ngIf=\"formView === 'raw'\">\n <lib-json-view *ngIf=\"formData\" [(data)]=\"formData\"></lib-json-view>\n </div>\n </div>\n</div>\n<lib-loading-indicator *ngIf=\"isLoading || !dataInit\" [isLoading]=\"isLoading || !dataInit\"></lib-loading-indicator>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: FormHeaderComponent, selector: "lib-form-header", inputs: ["data", "badges", "title", "moreActions", "formView", "saveDisabled", "saveTooltip", "actionButtonText", "moreActionsText", "showHeaderToggle", "showHeaderButton", "multiActions"], outputs: ["formViewChange", "actionRequested", "multiActionRequested"] }, { kind: "component", type: FormFieldContainerComponent, selector: "lib-form-field-container", inputs: ["title", "title2", "titleIcon", "layout", "helpText", "helpText2", "label", "count", "action", "actionLabel", "class", "contentStyle", "contentClass", "showHeader", "showToggle", "headerActions", "headerToggle"], outputs: ["actionRequested", "headerToggleChange"] }, { kind: "component", type: PreviewListComponent, selector: "lib-preview-list", inputs: ["label", "clickable", "isLoading", "allNames", "items", "allowRemove", "tooltip", "showfilter", "localFilter"], outputs: ["itemSelected", "itemRemoved", "filterChanged"] }, { kind: "component", type: LoadingIndicatorComponent, selector: "lib-loading-indicator", inputs: ["isLoading"] }, { kind: "component", type: FormFieldToggleComponent, selector: "lib-form-field-toggle", inputs: ["label", "orientation", "labelOn", "labelOff", "toggleOn"], outputs: ["toggleOnChange"] }, { kind: "component", type: JsonViewComponent, selector: "lib-json-view", inputs: ["data", "schema", "readOnly", "jsonInvalid", "showCopy", "showLineNumbers"], outputs: ["dataChange", "jsonChange", "jsonInvalidChange"] }, { kind: "component", type: TagSelectorComponent, selector: "lib-tag-selector", inputs: ["placeholder", "disableField", "disableCreate", "hideOption", "isLoading", "errorMessage", "focusOnInit", "selectedRoleAttributes", "selectedNamedAttributes", "hasError", "availableRoleAttributes", "availableNamedAttributes"], outputs: ["addRoleAttribute", "addNamedAttribute", "roleAttributeRemoved", "namedAttributeRemoved", "selectedRoleAttributesChange", "selectedNamedAttributesChange", "filterChange"] }, { kind: "component", type: CustomTagsComponent, selector: "lib-custom-tags", inputs: ["tags"], outputs: ["tagsChange"] }] }); }
20751
20816
  }
20752
20817
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EdgeRouterPolicyFormComponent, decorators: [{
20753
20818
  type: Component,
@@ -20756,7 +20821,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
20756
20821
  provide: MatDialogRef,
20757
20822
  useValue: {}
20758
20823
  }
20759
- ], template: "<div class=\"projectable-form-wrapper\"\n (keyup.enter)=\"save($event)\"\n (keyup.escape)=\"closeModal(false)\"\n [class.projectable-form-hidden]=\"!dataInit\"\n>\n <lib-form-header\n [data]=\"formData\"\n [title]=\"formData.id ? 'Edit Edge Router Policy: ' : 'Create New Edge Router Policy'\"\n [moreActions]=\"moreActions\"\n (actionRequested)=\"headerActionRequested($event)\"\n [(formView)]=\"formView\"\n [class.is-scrolled]=\"isScrolled\"\n ></lib-form-header>\n <div class=\"edge-router-policy-form-container projectable-form-container\" #formContainer>\n <div class=\"projectable-form-main-column form-group-row\" *ngIf=\"formView === 'simple'\">\n <div class=\"form-group-column three-fifths\">\n <lib-form-field-container [title]=\"'Edge Router Policy Name'\" [label]=\"'REQUIRED'\">\n <input\n class=\"form-field-input\"\n placeholder=\"Name this edge router policy\"\n [ngClass]=\"{error: errors['name']}\"\n [(ngModel)]=\"formData.name\"\n autofocus\n #nameFieldInput\n />\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select Edge Router Attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 100003'\"\n [helpText]=\"'Choose which edge router to associate to this policy by picking from the list of available attributes'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"selectedEdgeRouterRoleAttributes\"\n [(selectedNamedAttributes)]=\"selectedEdgeRouterNamedAttributes\"\n [availableRoleAttributes]=\"svc.edgeRouterRoleAttributes\"\n [availableNamedAttributes]=\"svc.edgeRouterNamedAttributes\"\n (selectedNamedAttributesChange)=\"svc.getAssociatedEdgeRoutersByAttribute(selectedEdgeRouterRoleAttributes, selectedEdgeRouterNamedAttributes)\"\n (selectedRoleAttributesChange)=\"svc.getAssociatedEdgeRoutersByAttribute(selectedEdgeRouterRoleAttributes, selectedEdgeRouterNamedAttributes)\"\n [placeholder]=\"'Select edge router attributes'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select Identity Attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 100002'\"\n [helpText]=\"'Choose which identities to associate to this policy by picking from the list of available attributes'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"selectedIdentityRoleAttributes\"\n [(selectedNamedAttributes)]=\"selectedIdentityNamedAttributes\"\n [availableRoleAttributes]=\"svc.identityRoleAttributes\"\n [availableNamedAttributes]=\"svc.identityNamedAttributes\"\n (selectedNamedAttributesChange)=\"svc.getAssociatedIdentitiesByAttribute(selectedIdentityRoleAttributes, selectedIdentityNamedAttributes)\"\n (selectedRoleAttributesChange)=\"svc.getAssociatedIdentitiesByAttribute(selectedIdentityRoleAttributes, selectedIdentityNamedAttributes)\"\n [placeholder]=\"'Select identity attributes'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Semantic'\"\n [layout]=\"'row'\"\n >\n <select\n [(ngModel)]=\"formData.semantic\"\n id=\"PolicySemantic\"\n class=\"form-field-dropdown\"\n >\n <option value=\"AnyOf\">AnyOf</option>\n <option value=\"AllOf\">AllOf</option>\n </select>\n </lib-form-field-container>\n <lib-form-field-toggle [(toggleOn)]=\"showMore\" (toggleOnChange)=\"showMoreChanged($event)\" style=\"margin: 0px 10px\"></lib-form-field-toggle>\n <div [hidden]=\"!showMore\" class=\"form-group-column\">\n <lib-form-field-container\n [title]=\"'Custom Tags'\"\n [label]=\"'OPTIONAL'\"\n class=\"form-field-advanced\"\n *ngIf=\"!hideTags\"\n >\n <lib-custom-tags [(tags)]=\"formData.tags\"></lib-custom-tags>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column two-fifths\">\n <lib-form-field-container\n [title]=\"'Associated Edge Routers'\"\n [count]=\"svc.associatedEdgeRouterNames.length\"\n [class]=\"'hide-overflow'\"\n [helpText]=\"'Preview list of all Edge Routers that this Edge Router Policy is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"edgeRoutersLoading\"\n [allNames]=\"svc.associatedEdgeRouterNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Associated Identities'\"\n [count]=\"svc.associatedIdentityNames.length\"\n [helpText]=\"'Preview list of all Identities that this Edge Router Policy is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"identitiesLoading\"\n [allNames]=\"svc.associatedIdentityNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'API Calls'\"\n [headerActions]=\"apiOptions\"\n (actionRequested)=\"apiActionRequested($event)\"\n >\n <div class=\"form-row\">\n <input class=\"form-field-input\" [value]=\"apiCallURL\"/>\n <div class=\"icon-copy copy-text\" (click)=\"copyToClipboard(apiCallURL)\"></div>\n </div>\n <lib-json-view *ngIf=\"formData\" [(data)]=\"apiData\" [readOnly]=\"true\" [showCopy]=\"true\"></lib-json-view>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column\" *ngIf=\"formView === 'raw'\">\n <lib-json-view *ngIf=\"formData\" [(data)]=\"formData\"></lib-json-view>\n </div>\n </div>\n</div>\n<lib-loading-indicator *ngIf=\"isLoading || !dataInit\" [isLoading]=\"isLoading || !dataInit\"></lib-loading-indicator>\n" }]
20824
+ ], template: "<div class=\"projectable-form-wrapper\"\n (keyup.enter)=\"save($event)\"\n (keyup.escape)=\"closeModal(false)\"\n [class.projectable-form-hidden]=\"!dataInit\"\n>\n <lib-form-header\n [data]=\"formData\"\n [title]=\"formData.id ? 'Edit Edge Router Policy: ' : 'Create New Edge Router Policy'\"\n [moreActions]=\"moreActions\"\n (actionRequested)=\"headerActionRequested($event)\"\n [(formView)]=\"formView\"\n [class.is-scrolled]=\"isScrolled\"\n ></lib-form-header>\n <div class=\"edge-router-policy-form-container projectable-form-container\" #formContainer>\n <div class=\"projectable-form-main-column form-group-row\" *ngIf=\"formView === 'simple'\">\n <div class=\"form-group-column three-fifths\">\n <lib-form-field-container [title]=\"'Edge Router Policy Name'\" [label]=\"'REQUIRED'\">\n <input\n class=\"form-field-input\"\n placeholder=\"Name this edge router policy\"\n [ngClass]=\"{error: errors['name']}\"\n [(ngModel)]=\"formData.name\"\n autofocus\n #nameFieldInput\n />\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select Edge Router Attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 100003'\"\n [helpText]=\"'Choose which edge router to associate to this policy by picking from the list of available attributes'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"selectedEdgeRouterRoleAttributes\"\n [(selectedNamedAttributes)]=\"selectedEdgeRouterNamedAttributes\"\n [availableRoleAttributes]=\"svc.edgeRouterRoleAttributes\"\n [availableNamedAttributes]=\"svc.edgeRouterNamedAttributes\"\n (selectedNamedAttributesChange)=\"svc.getAssociatedEdgeRoutersByAttribute(selectedEdgeRouterRoleAttributes, selectedEdgeRouterNamedAttributes, formData.semantic)\"\n (selectedRoleAttributesChange)=\"svc.getAssociatedEdgeRoutersByAttribute(selectedEdgeRouterRoleAttributes, selectedEdgeRouterNamedAttributes, formData.semantic)\"\n [placeholder]=\"'Select edge router attributes'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select Identity Attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 100002'\"\n [helpText]=\"'Choose which identities to associate to this policy by picking from the list of available attributes'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"selectedIdentityRoleAttributes\"\n [(selectedNamedAttributes)]=\"selectedIdentityNamedAttributes\"\n [availableRoleAttributes]=\"svc.identityRoleAttributes\"\n [availableNamedAttributes]=\"svc.identityNamedAttributes\"\n (selectedNamedAttributesChange)=\"svc.getAssociatedIdentitiesByAttribute(selectedIdentityRoleAttributes, selectedIdentityNamedAttributes, formData.semantic)\"\n (selectedRoleAttributesChange)=\"svc.getAssociatedIdentitiesByAttribute(selectedIdentityRoleAttributes, selectedIdentityNamedAttributes, formData.semantic)\"\n [placeholder]=\"'Select identity attributes'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Semantic'\"\n [layout]=\"'row'\"\n >\n <select\n [(ngModel)]=\"formData.semantic\"\n (change)=\"updateAssociations()\"\n id=\"PolicySemantic\"\n class=\"form-field-dropdown\"\n >\n <option value=\"AnyOf\">AnyOf</option>\n <option value=\"AllOf\">AllOf</option>\n </select>\n </lib-form-field-container>\n <lib-form-field-toggle [(toggleOn)]=\"showMore\" (toggleOnChange)=\"showMoreChanged($event)\" style=\"margin: 0px 10px\"></lib-form-field-toggle>\n <div [hidden]=\"!showMore\" class=\"form-group-column\">\n <lib-form-field-container\n [title]=\"'Custom Tags'\"\n [label]=\"'OPTIONAL'\"\n class=\"form-field-advanced\"\n *ngIf=\"!hideTags\"\n >\n <lib-custom-tags [(tags)]=\"formData.tags\"></lib-custom-tags>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column two-fifths\">\n <lib-form-field-container\n [title]=\"'Associated Edge Routers'\"\n [count]=\"svc.associatedEdgeRouterNames.length\"\n [class]=\"'hide-overflow'\"\n [helpText]=\"'Preview list of all Edge Routers that this Edge Router Policy is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"edgeRoutersLoading\"\n [allNames]=\"svc.associatedEdgeRouterNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Associated Identities'\"\n [count]=\"svc.associatedIdentityNames.length\"\n [helpText]=\"'Preview list of all Identities that this Edge Router Policy is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"identitiesLoading\"\n [allNames]=\"svc.associatedIdentityNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'API Calls'\"\n [headerActions]=\"apiOptions\"\n (actionRequested)=\"apiActionRequested($event)\"\n >\n <div class=\"form-row\">\n <input class=\"form-field-input\" [value]=\"apiCallURL\"/>\n <div class=\"icon-copy copy-text\" (click)=\"copyToClipboard(apiCallURL)\"></div>\n </div>\n <lib-json-view *ngIf=\"formData\" [(data)]=\"apiData\" [readOnly]=\"true\" [showCopy]=\"true\"></lib-json-view>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column\" *ngIf=\"formView === 'raw'\">\n <lib-json-view *ngIf=\"formData\" [(data)]=\"formData\"></lib-json-view>\n </div>\n </div>\n</div>\n<lib-loading-indicator *ngIf=\"isLoading || !dataInit\" [isLoading]=\"isLoading || !dataInit\"></lib-loading-indicator>\n" }]
20760
20825
  }], ctorParameters: function () { return [{ type: SettingsService, decorators: [{
20761
20826
  type: Inject,
20762
20827
  args: [SETTINGS_SERVICE]
@@ -21285,13 +21350,13 @@ class ServiceEdgeRouterPolicyFormService {
21285
21350
  throw resp;
21286
21351
  });
21287
21352
  }
21288
- getAssociatedEdgeRoutersByAttribute(roleAttributes, namedAttributes) {
21353
+ getAssociatedEdgeRoutersByAttribute(roleAttributes, namedAttributes, semantic = 'AnyOf') {
21289
21354
  this.associatedEdgeRouterNames = [];
21290
21355
  if (isEmpty(roleAttributes)) {
21291
21356
  this.associatedEdgeRouterNames = [...namedAttributes];
21292
21357
  return;
21293
21358
  }
21294
- const filters = this.zitiService.getRoleFilter(roleAttributes);
21359
+ const filters = this.zitiService.getRoleFilter(roleAttributes, semantic);
21295
21360
  const paging = this.zitiService.DEFAULT_PAGING;
21296
21361
  paging.noSearch = false;
21297
21362
  this.zitiService.get('edge-routers', paging, filters).then((result) => {
@@ -21305,13 +21370,13 @@ class ServiceEdgeRouterPolicyFormService {
21305
21370
  this.associatedEdgeRouterNames = this.associatedEdgeRouterNames.filter(item => item !== undefined);
21306
21371
  });
21307
21372
  }
21308
- getAssociatedServicesByAttribute(roleAttributes, namedAttributes) {
21373
+ getAssociatedServicesByAttribute(roleAttributes, namedAttributes, semantic = 'AnyOf') {
21309
21374
  this.associatedServiceNames = [];
21310
21375
  if (isEmpty(roleAttributes)) {
21311
21376
  this.associatedServiceNames = [...namedAttributes];
21312
21377
  return;
21313
21378
  }
21314
- const filters = this.zitiService.getRoleFilter(roleAttributes);
21379
+ const filters = this.zitiService.getRoleFilter(roleAttributes, semantic);
21315
21380
  const paging = this.zitiService.DEFAULT_PAGING;
21316
21381
  paging.noSearch = false;
21317
21382
  this.zitiService.get('services', paging, filters).then((result) => {
@@ -21509,8 +21574,7 @@ class ServiceEdgeRouterPolicyFormComponent extends ProjectableForm {
21509
21574
  this.selectedServiceRoleAttributes.push(attr.substring(1));
21510
21575
  }
21511
21576
  });
21512
- this.svc.getAssociatedEdgeRoutersByAttribute(this.selectedEdgeRouterRoleAttributes, this.selectedEdgeRouterNamedAttributes);
21513
- this.svc.getAssociatedServicesByAttribute(this.selectedServiceRoleAttributes, this.selectedServiceNamedAttributes);
21577
+ this.updateAssociations();
21514
21578
  }
21515
21579
  headerActionRequested(action) {
21516
21580
  switch (action.name) {
@@ -21575,6 +21639,10 @@ class ServiceEdgeRouterPolicyFormComponent extends ProjectableForm {
21575
21639
  break;
21576
21640
  }
21577
21641
  }
21642
+ updateAssociations() {
21643
+ this.svc.getAssociatedEdgeRoutersByAttribute(this.selectedEdgeRouterRoleAttributes, this.selectedEdgeRouterNamedAttributes, this.formData?.semantic);
21644
+ this.svc.getAssociatedServicesByAttribute(this.selectedServiceRoleAttributes, this.selectedServiceNamedAttributes, this.formData?.semantic);
21645
+ }
21578
21646
  copyCLICommand() {
21579
21647
  const erRoles = this.svc.getSelectedRoles(this.selectedEdgeRouterRoleAttributes, this.selectedEdgeRouterNamedAttributes, this.svc.edgeRouterNamedAttributesMap);
21580
21648
  let erRolesVar = this.getRolesCLIVariable(erRoles);
@@ -21625,7 +21693,7 @@ ${this.formData.id ? '--request PATCH \\' : ''}
21625
21693
  provide: MatDialogRef,
21626
21694
  useValue: {}
21627
21695
  }
21628
- ], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"projectable-form-wrapper\"\n (keyup.enter)=\"save($event)\"\n (keyup.escape)=\"closeModal(false)\"\n [class.projectable-form-hidden]=\"!dataInit\"\n>\n <lib-form-header\n [data]=\"formData\"\n [title]=\"formData.id ? 'Edit Service Edge Router Policy: ' : 'Create New Service Edge Router Policy'\"\n [moreActions]=\"moreActions\"\n (actionRequested)=\"headerActionRequested($event)\"\n [(formView)]=\"formView\"\n [class.is-scrolled]=\"isScrolled\"\n ></lib-form-header>\n <div class=\"service-edge-router-policy-form-container projectable-form-container\" #formContainer>\n <div class=\"projectable-form-main-column form-group-row\" *ngIf=\"formView === 'simple'\">\n <div class=\"form-group-column three-fifths\">\n <lib-form-field-container [title]=\"'Service Edge Router Policy Name'\" [label]=\"'REQUIRED'\">\n <input\n class=\"form-field-input\"\n placeholder=\"Name this service edge router policy\"\n [ngClass]=\"{error: errors['name']}\"\n [(ngModel)]=\"formData.name\"\n autofocus\n #nameFieldInput\n />\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select Edge Router Attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 100003'\"\n [helpText]=\"'Choose which edge router to associate to this policy by picking from the list of available attributes'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"selectedEdgeRouterRoleAttributes\"\n [(selectedNamedAttributes)]=\"selectedEdgeRouterNamedAttributes\"\n [availableRoleAttributes]=\"svc.edgeRouterRoleAttributes\"\n [availableNamedAttributes]=\"svc.edgeRouterNamedAttributes\"\n (selectedNamedAttributesChange)=\"svc.getAssociatedEdgeRoutersByAttribute(selectedEdgeRouterRoleAttributes, selectedEdgeRouterNamedAttributes)\"\n (selectedRoleAttributesChange)=\"svc.getAssociatedEdgeRoutersByAttribute(selectedEdgeRouterRoleAttributes, selectedEdgeRouterNamedAttributes)\"\n [placeholder]=\"'Select edge router attributes'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select Service Attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 100002'\"\n [helpText]=\"'Choose which services to associate to this policy by picking from the list of available attributes'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"selectedServiceRoleAttributes\"\n [(selectedNamedAttributes)]=\"selectedServiceNamedAttributes\"\n [availableRoleAttributes]=\"svc.serviceRoleAttributes\"\n [availableNamedAttributes]=\"svc.serviceNamedAttributes\"\n (selectedNamedAttributesChange)=\"svc.getAssociatedServicesByAttribute(selectedServiceRoleAttributes, selectedServiceNamedAttributes)\"\n (selectedRoleAttributesChange)=\"svc.getAssociatedServicesByAttribute(selectedServiceRoleAttributes, selectedServiceNamedAttributes)\"\n [placeholder]=\"'Select service attributes'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Semantic'\"\n [layout]=\"'row'\"\n >\n <select\n [(ngModel)]=\"formData.semantic\"\n id=\"PolicySemantic\"\n class=\"form-field-dropdown\"\n >\n <option value=\"AnyOf\">AnyOf</option>\n <option value=\"AllOf\">AllOf</option>\n </select>\n </lib-form-field-container>\n <lib-form-field-toggle [(toggleOn)]=\"showMore\" (toggleOnChange)=\"showMoreChanged($event)\" style=\"margin: 0px 10px\"></lib-form-field-toggle>\n <div [hidden]=\"!showMore\" class=\"form-group-column\">\n <lib-form-field-container\n [title]=\"'Custom Tags'\"\n [label]=\"'OPTIONAL'\"\n class=\"form-field-advanced\"\n *ngIf=\"!hideTags\"\n >\n <lib-custom-tags [(tags)]=\"formData.tags\"></lib-custom-tags>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column two-fifths\">\n <lib-form-field-container\n [title]=\"'Associated Edge Routers'\"\n [count]=\"svc.associatedEdgeRouterNames.length\"\n [class]=\"'hide-overflow'\"\n [helpText]=\"'Preview list of all Edge Routers that this Service Edge Router Policy is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"edgeRoutersLoading\"\n [allNames]=\"svc.associatedEdgeRouterNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Associated Services'\"\n [count]=\"svc.associatedServiceNames.length\"\n [helpText]=\"'Preview list of all Services that this Service Edge Router Policy is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"servicesLoading\"\n [allNames]=\"svc.associatedServiceNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'API Calls'\"\n [headerActions]=\"apiOptions\"\n (actionRequested)=\"apiActionRequested($event)\"\n >\n <div class=\"form-row\">\n <input class=\"form-field-input\" [value]=\"apiCallURL\"/>\n <div class=\"icon-copy copy-text\" (click)=\"copyToClipboard(apiCallURL)\"></div>\n </div>\n <lib-json-view *ngIf=\"formData\" [(data)]=\"apiData\" [readOnly]=\"true\" [showCopy]=\"true\"></lib-json-view>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column\" *ngIf=\"formView === 'raw'\">\n <lib-json-view *ngIf=\"formData\" [(data)]=\"formData\"></lib-json-view>\n </div>\n </div>\n</div>\n<lib-loading-indicator *ngIf=\"isLoading || !dataInit\" [isLoading]=\"isLoading || !dataInit\"></lib-loading-indicator>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: FormHeaderComponent, selector: "lib-form-header", inputs: ["data", "badges", "title", "moreActions", "formView", "saveDisabled", "saveTooltip", "actionButtonText", "moreActionsText", "showHeaderToggle", "showHeaderButton", "multiActions"], outputs: ["formViewChange", "actionRequested", "multiActionRequested"] }, { kind: "component", type: FormFieldContainerComponent, selector: "lib-form-field-container", inputs: ["title", "title2", "titleIcon", "layout", "helpText", "helpText2", "label", "count", "action", "actionLabel", "class", "contentStyle", "contentClass", "showHeader", "showToggle", "headerActions", "headerToggle"], outputs: ["actionRequested", "headerToggleChange"] }, { kind: "component", type: PreviewListComponent, selector: "lib-preview-list", inputs: ["label", "clickable", "isLoading", "allNames", "items", "allowRemove", "tooltip", "showfilter", "localFilter"], outputs: ["itemSelected", "itemRemoved", "filterChanged"] }, { kind: "component", type: LoadingIndicatorComponent, selector: "lib-loading-indicator", inputs: ["isLoading"] }, { kind: "component", type: FormFieldToggleComponent, selector: "lib-form-field-toggle", inputs: ["label", "orientation", "labelOn", "labelOff", "toggleOn"], outputs: ["toggleOnChange"] }, { kind: "component", type: JsonViewComponent, selector: "lib-json-view", inputs: ["data", "schema", "readOnly", "jsonInvalid", "showCopy", "showLineNumbers"], outputs: ["dataChange", "jsonChange", "jsonInvalidChange"] }, { kind: "component", type: TagSelectorComponent, selector: "lib-tag-selector", inputs: ["placeholder", "disableField", "disableCreate", "hideOption", "isLoading", "errorMessage", "focusOnInit", "selectedRoleAttributes", "selectedNamedAttributes", "hasError", "availableRoleAttributes", "availableNamedAttributes"], outputs: ["addRoleAttribute", "addNamedAttribute", "roleAttributeRemoved", "namedAttributeRemoved", "selectedRoleAttributesChange", "selectedNamedAttributesChange", "filterChange"] }, { kind: "component", type: CustomTagsComponent, selector: "lib-custom-tags", inputs: ["tags"], outputs: ["tagsChange"] }] }); }
21696
+ ], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"projectable-form-wrapper\"\n (keyup.enter)=\"save($event)\"\n (keyup.escape)=\"closeModal(false)\"\n [class.projectable-form-hidden]=\"!dataInit\"\n>\n <lib-form-header\n [data]=\"formData\"\n [title]=\"formData.id ? 'Edit Service Edge Router Policy: ' : 'Create New Service Edge Router Policy'\"\n [moreActions]=\"moreActions\"\n (actionRequested)=\"headerActionRequested($event)\"\n [(formView)]=\"formView\"\n [class.is-scrolled]=\"isScrolled\"\n ></lib-form-header>\n <div class=\"service-edge-router-policy-form-container projectable-form-container\" #formContainer>\n <div class=\"projectable-form-main-column form-group-row\" *ngIf=\"formView === 'simple'\">\n <div class=\"form-group-column three-fifths\">\n <lib-form-field-container [title]=\"'Service Edge Router Policy Name'\" [label]=\"'REQUIRED'\">\n <input\n class=\"form-field-input\"\n placeholder=\"Name this service edge router policy\"\n [ngClass]=\"{error: errors['name']}\"\n [(ngModel)]=\"formData.name\"\n autofocus\n #nameFieldInput\n />\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select Edge Router Attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 100003'\"\n [helpText]=\"'Choose which edge router to associate to this policy by picking from the list of available attributes'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"selectedEdgeRouterRoleAttributes\"\n [(selectedNamedAttributes)]=\"selectedEdgeRouterNamedAttributes\"\n [availableRoleAttributes]=\"svc.edgeRouterRoleAttributes\"\n [availableNamedAttributes]=\"svc.edgeRouterNamedAttributes\"\n (selectedNamedAttributesChange)=\"svc.getAssociatedEdgeRoutersByAttribute(selectedEdgeRouterRoleAttributes, selectedEdgeRouterNamedAttributes, formData.semantic)\"\n (selectedRoleAttributesChange)=\"svc.getAssociatedEdgeRoutersByAttribute(selectedEdgeRouterRoleAttributes, selectedEdgeRouterNamedAttributes, formData.semantic)\"\n [placeholder]=\"'Select edge router attributes'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select Service Attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 100002'\"\n [helpText]=\"'Choose which services to associate to this policy by picking from the list of available attributes'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"selectedServiceRoleAttributes\"\n [(selectedNamedAttributes)]=\"selectedServiceNamedAttributes\"\n [availableRoleAttributes]=\"svc.serviceRoleAttributes\"\n [availableNamedAttributes]=\"svc.serviceNamedAttributes\"\n (selectedNamedAttributesChange)=\"svc.getAssociatedServicesByAttribute(selectedServiceRoleAttributes, selectedServiceNamedAttributes, formData.semantic)\"\n (selectedRoleAttributesChange)=\"svc.getAssociatedServicesByAttribute(selectedServiceRoleAttributes, selectedServiceNamedAttributes, formData.semantic)\"\n [placeholder]=\"'Select service attributes'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Semantic'\"\n [layout]=\"'row'\"\n >\n <select\n [(ngModel)]=\"formData.semantic\"\n (change)=\"updateAssociations()\"\n id=\"PolicySemantic\"\n class=\"form-field-dropdown\"\n >\n <option value=\"AnyOf\">AnyOf</option>\n <option value=\"AllOf\">AllOf</option>\n </select>\n </lib-form-field-container>\n <lib-form-field-toggle [(toggleOn)]=\"showMore\" (toggleOnChange)=\"showMoreChanged($event)\" style=\"margin: 0px 10px\"></lib-form-field-toggle>\n <div [hidden]=\"!showMore\" class=\"form-group-column\">\n <lib-form-field-container\n [title]=\"'Custom Tags'\"\n [label]=\"'OPTIONAL'\"\n class=\"form-field-advanced\"\n *ngIf=\"!hideTags\"\n >\n <lib-custom-tags [(tags)]=\"formData.tags\"></lib-custom-tags>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column two-fifths\">\n <lib-form-field-container\n [title]=\"'Associated Edge Routers'\"\n [count]=\"svc.associatedEdgeRouterNames.length\"\n [class]=\"'hide-overflow'\"\n [helpText]=\"'Preview list of all Edge Routers that this Service Edge Router Policy is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"edgeRoutersLoading\"\n [allNames]=\"svc.associatedEdgeRouterNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Associated Services'\"\n [count]=\"svc.associatedServiceNames.length\"\n [helpText]=\"'Preview list of all Services that this Service Edge Router Policy is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"servicesLoading\"\n [allNames]=\"svc.associatedServiceNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'API Calls'\"\n [headerActions]=\"apiOptions\"\n (actionRequested)=\"apiActionRequested($event)\"\n >\n <div class=\"form-row\">\n <input class=\"form-field-input\" [value]=\"apiCallURL\"/>\n <div class=\"icon-copy copy-text\" (click)=\"copyToClipboard(apiCallURL)\"></div>\n </div>\n <lib-json-view *ngIf=\"formData\" [(data)]=\"apiData\" [readOnly]=\"true\" [showCopy]=\"true\"></lib-json-view>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column\" *ngIf=\"formView === 'raw'\">\n <lib-json-view *ngIf=\"formData\" [(data)]=\"formData\"></lib-json-view>\n </div>\n </div>\n</div>\n<lib-loading-indicator *ngIf=\"isLoading || !dataInit\" [isLoading]=\"isLoading || !dataInit\"></lib-loading-indicator>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: FormHeaderComponent, selector: "lib-form-header", inputs: ["data", "badges", "title", "moreActions", "formView", "saveDisabled", "saveTooltip", "actionButtonText", "moreActionsText", "showHeaderToggle", "showHeaderButton", "multiActions"], outputs: ["formViewChange", "actionRequested", "multiActionRequested"] }, { kind: "component", type: FormFieldContainerComponent, selector: "lib-form-field-container", inputs: ["title", "title2", "titleIcon", "layout", "helpText", "helpText2", "label", "count", "action", "actionLabel", "class", "contentStyle", "contentClass", "showHeader", "showToggle", "headerActions", "headerToggle"], outputs: ["actionRequested", "headerToggleChange"] }, { kind: "component", type: PreviewListComponent, selector: "lib-preview-list", inputs: ["label", "clickable", "isLoading", "allNames", "items", "allowRemove", "tooltip", "showfilter", "localFilter"], outputs: ["itemSelected", "itemRemoved", "filterChanged"] }, { kind: "component", type: LoadingIndicatorComponent, selector: "lib-loading-indicator", inputs: ["isLoading"] }, { kind: "component", type: FormFieldToggleComponent, selector: "lib-form-field-toggle", inputs: ["label", "orientation", "labelOn", "labelOff", "toggleOn"], outputs: ["toggleOnChange"] }, { kind: "component", type: JsonViewComponent, selector: "lib-json-view", inputs: ["data", "schema", "readOnly", "jsonInvalid", "showCopy", "showLineNumbers"], outputs: ["dataChange", "jsonChange", "jsonInvalidChange"] }, { kind: "component", type: TagSelectorComponent, selector: "lib-tag-selector", inputs: ["placeholder", "disableField", "disableCreate", "hideOption", "isLoading", "errorMessage", "focusOnInit", "selectedRoleAttributes", "selectedNamedAttributes", "hasError", "availableRoleAttributes", "availableNamedAttributes"], outputs: ["addRoleAttribute", "addNamedAttribute", "roleAttributeRemoved", "namedAttributeRemoved", "selectedRoleAttributesChange", "selectedNamedAttributesChange", "filterChange"] }, { kind: "component", type: CustomTagsComponent, selector: "lib-custom-tags", inputs: ["tags"], outputs: ["tagsChange"] }] }); }
21629
21697
  }
21630
21698
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ServiceEdgeRouterPolicyFormComponent, decorators: [{
21631
21699
  type: Component,
@@ -21634,7 +21702,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
21634
21702
  provide: MatDialogRef,
21635
21703
  useValue: {}
21636
21704
  }
21637
- ], template: "<div class=\"projectable-form-wrapper\"\n (keyup.enter)=\"save($event)\"\n (keyup.escape)=\"closeModal(false)\"\n [class.projectable-form-hidden]=\"!dataInit\"\n>\n <lib-form-header\n [data]=\"formData\"\n [title]=\"formData.id ? 'Edit Service Edge Router Policy: ' : 'Create New Service Edge Router Policy'\"\n [moreActions]=\"moreActions\"\n (actionRequested)=\"headerActionRequested($event)\"\n [(formView)]=\"formView\"\n [class.is-scrolled]=\"isScrolled\"\n ></lib-form-header>\n <div class=\"service-edge-router-policy-form-container projectable-form-container\" #formContainer>\n <div class=\"projectable-form-main-column form-group-row\" *ngIf=\"formView === 'simple'\">\n <div class=\"form-group-column three-fifths\">\n <lib-form-field-container [title]=\"'Service Edge Router Policy Name'\" [label]=\"'REQUIRED'\">\n <input\n class=\"form-field-input\"\n placeholder=\"Name this service edge router policy\"\n [ngClass]=\"{error: errors['name']}\"\n [(ngModel)]=\"formData.name\"\n autofocus\n #nameFieldInput\n />\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select Edge Router Attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 100003'\"\n [helpText]=\"'Choose which edge router to associate to this policy by picking from the list of available attributes'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"selectedEdgeRouterRoleAttributes\"\n [(selectedNamedAttributes)]=\"selectedEdgeRouterNamedAttributes\"\n [availableRoleAttributes]=\"svc.edgeRouterRoleAttributes\"\n [availableNamedAttributes]=\"svc.edgeRouterNamedAttributes\"\n (selectedNamedAttributesChange)=\"svc.getAssociatedEdgeRoutersByAttribute(selectedEdgeRouterRoleAttributes, selectedEdgeRouterNamedAttributes)\"\n (selectedRoleAttributesChange)=\"svc.getAssociatedEdgeRoutersByAttribute(selectedEdgeRouterRoleAttributes, selectedEdgeRouterNamedAttributes)\"\n [placeholder]=\"'Select edge router attributes'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select Service Attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 100002'\"\n [helpText]=\"'Choose which services to associate to this policy by picking from the list of available attributes'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"selectedServiceRoleAttributes\"\n [(selectedNamedAttributes)]=\"selectedServiceNamedAttributes\"\n [availableRoleAttributes]=\"svc.serviceRoleAttributes\"\n [availableNamedAttributes]=\"svc.serviceNamedAttributes\"\n (selectedNamedAttributesChange)=\"svc.getAssociatedServicesByAttribute(selectedServiceRoleAttributes, selectedServiceNamedAttributes)\"\n (selectedRoleAttributesChange)=\"svc.getAssociatedServicesByAttribute(selectedServiceRoleAttributes, selectedServiceNamedAttributes)\"\n [placeholder]=\"'Select service attributes'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Semantic'\"\n [layout]=\"'row'\"\n >\n <select\n [(ngModel)]=\"formData.semantic\"\n id=\"PolicySemantic\"\n class=\"form-field-dropdown\"\n >\n <option value=\"AnyOf\">AnyOf</option>\n <option value=\"AllOf\">AllOf</option>\n </select>\n </lib-form-field-container>\n <lib-form-field-toggle [(toggleOn)]=\"showMore\" (toggleOnChange)=\"showMoreChanged($event)\" style=\"margin: 0px 10px\"></lib-form-field-toggle>\n <div [hidden]=\"!showMore\" class=\"form-group-column\">\n <lib-form-field-container\n [title]=\"'Custom Tags'\"\n [label]=\"'OPTIONAL'\"\n class=\"form-field-advanced\"\n *ngIf=\"!hideTags\"\n >\n <lib-custom-tags [(tags)]=\"formData.tags\"></lib-custom-tags>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column two-fifths\">\n <lib-form-field-container\n [title]=\"'Associated Edge Routers'\"\n [count]=\"svc.associatedEdgeRouterNames.length\"\n [class]=\"'hide-overflow'\"\n [helpText]=\"'Preview list of all Edge Routers that this Service Edge Router Policy is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"edgeRoutersLoading\"\n [allNames]=\"svc.associatedEdgeRouterNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Associated Services'\"\n [count]=\"svc.associatedServiceNames.length\"\n [helpText]=\"'Preview list of all Services that this Service Edge Router Policy is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"servicesLoading\"\n [allNames]=\"svc.associatedServiceNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'API Calls'\"\n [headerActions]=\"apiOptions\"\n (actionRequested)=\"apiActionRequested($event)\"\n >\n <div class=\"form-row\">\n <input class=\"form-field-input\" [value]=\"apiCallURL\"/>\n <div class=\"icon-copy copy-text\" (click)=\"copyToClipboard(apiCallURL)\"></div>\n </div>\n <lib-json-view *ngIf=\"formData\" [(data)]=\"apiData\" [readOnly]=\"true\" [showCopy]=\"true\"></lib-json-view>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column\" *ngIf=\"formView === 'raw'\">\n <lib-json-view *ngIf=\"formData\" [(data)]=\"formData\"></lib-json-view>\n </div>\n </div>\n</div>\n<lib-loading-indicator *ngIf=\"isLoading || !dataInit\" [isLoading]=\"isLoading || !dataInit\"></lib-loading-indicator>\n" }]
21705
+ ], template: "<div class=\"projectable-form-wrapper\"\n (keyup.enter)=\"save($event)\"\n (keyup.escape)=\"closeModal(false)\"\n [class.projectable-form-hidden]=\"!dataInit\"\n>\n <lib-form-header\n [data]=\"formData\"\n [title]=\"formData.id ? 'Edit Service Edge Router Policy: ' : 'Create New Service Edge Router Policy'\"\n [moreActions]=\"moreActions\"\n (actionRequested)=\"headerActionRequested($event)\"\n [(formView)]=\"formView\"\n [class.is-scrolled]=\"isScrolled\"\n ></lib-form-header>\n <div class=\"service-edge-router-policy-form-container projectable-form-container\" #formContainer>\n <div class=\"projectable-form-main-column form-group-row\" *ngIf=\"formView === 'simple'\">\n <div class=\"form-group-column three-fifths\">\n <lib-form-field-container [title]=\"'Service Edge Router Policy Name'\" [label]=\"'REQUIRED'\">\n <input\n class=\"form-field-input\"\n placeholder=\"Name this service edge router policy\"\n [ngClass]=\"{error: errors['name']}\"\n [(ngModel)]=\"formData.name\"\n autofocus\n #nameFieldInput\n />\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select Edge Router Attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 100003'\"\n [helpText]=\"'Choose which edge router to associate to this policy by picking from the list of available attributes'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"selectedEdgeRouterRoleAttributes\"\n [(selectedNamedAttributes)]=\"selectedEdgeRouterNamedAttributes\"\n [availableRoleAttributes]=\"svc.edgeRouterRoleAttributes\"\n [availableNamedAttributes]=\"svc.edgeRouterNamedAttributes\"\n (selectedNamedAttributesChange)=\"svc.getAssociatedEdgeRoutersByAttribute(selectedEdgeRouterRoleAttributes, selectedEdgeRouterNamedAttributes, formData.semantic)\"\n (selectedRoleAttributesChange)=\"svc.getAssociatedEdgeRoutersByAttribute(selectedEdgeRouterRoleAttributes, selectedEdgeRouterNamedAttributes, formData.semantic)\"\n [placeholder]=\"'Select edge router attributes'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select Service Attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 100002'\"\n [helpText]=\"'Choose which services to associate to this policy by picking from the list of available attributes'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"selectedServiceRoleAttributes\"\n [(selectedNamedAttributes)]=\"selectedServiceNamedAttributes\"\n [availableRoleAttributes]=\"svc.serviceRoleAttributes\"\n [availableNamedAttributes]=\"svc.serviceNamedAttributes\"\n (selectedNamedAttributesChange)=\"svc.getAssociatedServicesByAttribute(selectedServiceRoleAttributes, selectedServiceNamedAttributes, formData.semantic)\"\n (selectedRoleAttributesChange)=\"svc.getAssociatedServicesByAttribute(selectedServiceRoleAttributes, selectedServiceNamedAttributes, formData.semantic)\"\n [placeholder]=\"'Select service attributes'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Semantic'\"\n [layout]=\"'row'\"\n >\n <select\n [(ngModel)]=\"formData.semantic\"\n (change)=\"updateAssociations()\"\n id=\"PolicySemantic\"\n class=\"form-field-dropdown\"\n >\n <option value=\"AnyOf\">AnyOf</option>\n <option value=\"AllOf\">AllOf</option>\n </select>\n </lib-form-field-container>\n <lib-form-field-toggle [(toggleOn)]=\"showMore\" (toggleOnChange)=\"showMoreChanged($event)\" style=\"margin: 0px 10px\"></lib-form-field-toggle>\n <div [hidden]=\"!showMore\" class=\"form-group-column\">\n <lib-form-field-container\n [title]=\"'Custom Tags'\"\n [label]=\"'OPTIONAL'\"\n class=\"form-field-advanced\"\n *ngIf=\"!hideTags\"\n >\n <lib-custom-tags [(tags)]=\"formData.tags\"></lib-custom-tags>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column two-fifths\">\n <lib-form-field-container\n [title]=\"'Associated Edge Routers'\"\n [count]=\"svc.associatedEdgeRouterNames.length\"\n [class]=\"'hide-overflow'\"\n [helpText]=\"'Preview list of all Edge Routers that this Service Edge Router Policy is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"edgeRoutersLoading\"\n [allNames]=\"svc.associatedEdgeRouterNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Associated Services'\"\n [count]=\"svc.associatedServiceNames.length\"\n [helpText]=\"'Preview list of all Services that this Service Edge Router Policy is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"servicesLoading\"\n [allNames]=\"svc.associatedServiceNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'API Calls'\"\n [headerActions]=\"apiOptions\"\n (actionRequested)=\"apiActionRequested($event)\"\n >\n <div class=\"form-row\">\n <input class=\"form-field-input\" [value]=\"apiCallURL\"/>\n <div class=\"icon-copy copy-text\" (click)=\"copyToClipboard(apiCallURL)\"></div>\n </div>\n <lib-json-view *ngIf=\"formData\" [(data)]=\"apiData\" [readOnly]=\"true\" [showCopy]=\"true\"></lib-json-view>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column\" *ngIf=\"formView === 'raw'\">\n <lib-json-view *ngIf=\"formData\" [(data)]=\"formData\"></lib-json-view>\n </div>\n </div>\n</div>\n<lib-loading-indicator *ngIf=\"isLoading || !dataInit\" [isLoading]=\"isLoading || !dataInit\"></lib-loading-indicator>\n" }]
21638
21706
  }], ctorParameters: function () { return [{ type: SettingsService, decorators: [{
21639
21707
  type: Inject,
21640
21708
  args: [SETTINGS_SERVICE]
@@ -28404,11 +28472,11 @@ class SideNavigatorComponent {
28404
28472
  return this.showExpandCollapseIcon || !this.navExpanded;
28405
28473
  }
28406
28474
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SideNavigatorComponent, deps: [{ token: i4.Router }, { token: ZITI_NAVIGATOR }], target: i0.ɵɵFactoryTarget.Component }); }
28407
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: SideNavigatorComponent, selector: "lib-side-navigator", inputs: { version: "version" }, ngImport: i0, template: "<div class=\"side-navigator-wrapper\">\n <div [ngClass]=\"{ 'nav-expanded': navExpanded, 'nav-hiddnen': navHidden }\" class=\"side-navigator-container\" (mouseenter)=\"showExpandCollapse($event)\" (mouseleave)=\"hideExpandCollapse($event)\">\n <div cdkScrollable class=\"side-navigator-menu-container\" [ngClass]=\"{'hide-menu-nav-bar': hideMenuNavBar}\">\n <div *ngFor=\"let group of currentNav.groups\" class=\"side-navigator-menu-group\">\n <span class=\"side-navigator-menu-group-label\">{{ group.label }}</span>\n <div class=\"side-navigator-header-buffer\" *ngIf=\"group.headerBuffer\"></div>\n <div *ngFor=\"let item of group.menuItems\" class=\"{{item.class}}\">\n <a\n *ngIf=\"(!item.isBetaFeature || (item.isBetaFeature && betaFeaturesEnabled))\"\n class=\"side-navigator-menu-item {{ item.className }}\"\n (click)=\"doNavAction($event, item)\"\n [ngClass]=\"{\n selected: navItemSelected(item),\n disabled: isNavItemDisabled(item)\n }\"\n [title]=\"item.tooltip\"\n [href]=\"'./'+item.route\"\n >\n <div class=\"side-navigator-menu-item-icon\">\n <div class=\"image\" class=\"{{ item.iconClass }}\"></div>\n <span *ngIf=\"item.badgeCount\" class=\"counterBadge\">{{ item.badgeCount }}</span>\n </div>\n <span class=\"side-navigator-menu-item-label\">\n {{ item.label }}\n <span class=\"side-navigator-menu-item-sublabel\">{{ item.sublabel }}</span>\n </span>\n </a>\n </div>\n </div>\n </div>\n <div class=\"side-navigator-footer-container\">\n <div class=\"side-navigator-version-container\">\n <div style=\"font-size: .875rem;\" class=\"networkInfo\" id=\"NetworkVersion\">\n <span class=\"network-semver\">{{ version }}</span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"expand-collapse-hitbox-container\" [ngClass]=\"{'expand-collapse-container-closed': !navExpanded}\" (mouseenter)=\"showExpandCollapse($event)\" (mouseleave)=\"hideExpandCollapse($event)\">\n <div class=\"expand-collapse-icon icon-prev\" [ngClass]=\"{'expand-collapse-icon-visible': expandCollapseIconVisible}\" (click)=\"toggleNavigationExpanded($event)\"></div>\n </div>\n</div>\n", styles: [".side-navigator-wrapper{display:flex;flex-direction:row;height:100%}[class*=\" icon-\"].image{font-family:icomoon!important}.side-navigator-container{position:relative;top:0;left:0rem;height:100%;width:1.25rem;bottom:-.625rem;padding-top:0;padding-bottom:0;background-color:var(--formBackground);transition:var(--transition);overflow-y:hidden;z-index:999;display:flex;flex-direction:column;margin-left:var(--sideBarMargin);box-shadow:var(--sideNavigatorBoxShadow);border:none}.side-navigator-container.nav-expanded{width:19.75rem;border-right-style:solid;border-right-color:var(--inputBorder);border-width:var(--navContainerBorderWidth);background-color:var(--mainBackground)}.side-navigator-container.nav-expanded .side-navigator-header-container,.side-navigator-container.nav-expanded .side-navigator-footer-container,.side-navigator-container.nav-expanded .side-navigator-menu-container{opacity:1}.side-navigator-container .side-navigator-header-container{height:-moz-fit-content;height:fit-content;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:0 .625rem;padding-top:var(--navHeaderPadding);opacity:0}.side-navigator-container .side-navigator-header-container .app-name-title{font-family:Russo One;text-align:center;font-size:1.5rem;line-height:2.5rem;color:var(--primaryColor);filter:brightness(var(--brightnessDark))}.side-navigator-container .side-navigator-header-container .list-area.search{padding-left:.625rem;padding-right:.625rem}.side-navigator-container .side-navigator-header-container .title{margin-top:.625rem;color:var(--primaryColor);filter:brightness(var(--brightnessDark));font-size:1.75rem;font-family:Russo One;text-align:center;font-size:1.5rem;line-height:3.5rem;animation:_ngcontent-dev-c217_fadein 1s}.side-navigator-container .side-navigator-footer-container{height:100%;display:flex;flex-direction:column;justify-content:flex-end;flex:1 1 auto;position:relative;max-height:5rem;opacity:0}.side-navigator-container .side-navigator-footer-container .side-navigator-version-container{display:flex;flex-direction:column;justify-content:center;align-items:center;flex:1 1 auto;height:2.1875rem;max-height:2.1875rem;position:relative}.side-navigator-container .side-navigator-footer-container .side-navigator-version-container .zitiInfo,.side-navigator-container .side-navigator-footer-container .side-navigator-version-container .networkInfo{font-size:.75rem;font-weight:800}.side-navigator-container .side-navigator-footer-container .side-navigator-version-container .ziti-semver,.side-navigator-container .side-navigator-footer-container .side-navigator-version-container .network-semver{font-weight:900;margin-left:.1875rem;filter:brightness(.85)}.side-navigator-container .side-navigator-footer-container .side-navigator-version-container .network-semver{color:var(--primary)}.side-navigator-container .side-navigator-footer-container .side-navigator-version-container .ziti-semver{color:#f4044d}.side-navigator-container .side-navigator-menu-container{display:flex;flex-direction:column;width:100%;max-width:19.6875rem!important;flex:1 1 auto;height:100%;padding-top:var(--paddingLarge);overflow-y:auto;opacity:0}.side-navigator-container .side-navigator-menu-container .side-navigator-menu-group{display:flex;flex-direction:column;width:100%;margin-bottom:.9375rem}.side-navigator-container .side-navigator-menu-container .side-navigator-menu-group-label{margin-left:1.4375rem;color:var(--groupText);font-size:.875rem;position:relative;text-transform:uppercase;font-weight:600}.side-navigator-container .side-navigator-menu-container .side-navigator-menu-item{position:relative;display:flex;height:3.3125rem;cursor:pointer;align-items:center;padding-left:var(--navItemPadding);margin-left:var(--navItemMargin);margin-right:var(--navItemMargin);border-radius:var(--inputBorderRadius)}.side-navigator-container .side-navigator-menu-container .side-navigator-menu-item.selected{background-color:var(--navItemSelectedColor);border-right-color:var(--secondaryColor);border-right-width:.25rem;border-right-style:none}.side-navigator-container .side-navigator-menu-container .side-navigator-menu-item.selected:focus,.side-navigator-container .side-navigator-menu-container .side-navigator-menu-item.selected:focus-visible{background-color:var(--navItemSelectedColor)}.side-navigator-container .side-navigator-menu-container .side-navigator-menu-item.disabled{opacity:.5;filter:grayscale(1);cursor:not-allowed}.side-navigator-container .side-navigator-menu-container .side-navigator-menu-item.disabled:hover{background-color:transparent}.side-navigator-container .side-navigator-menu-container .side-navigator-menu-item:hover{background-color:var(--hoverBackground)}.side-navigator-container .side-navigator-menu-container .side-navigator-menu-item:focus,.side-navigator-container .side-navigator-menu-container .side-navigator-menu-item:focus-visible{background-color:var(--hoverBackground)}.side-navigator-container .side-navigator-menu-container .side-navigator-menu-item .side-navigator-menu-item-icon{max-width:2.5rem;width:2.5rem;height:2.5rem;background-color:var(--mainBackground);border-radius:var(--inputBorderRadius);box-shadow:0 .1875rem .3125rem 1px var(--boxShadow);display:flex;align-items:center;justify-content:center;border-color:var(--mainBackground);border-width:.125rem;flex:1 0 auto;border-style:solid;font-size:1.875rem}.side-navigator-container .side-navigator-menu-container .side-navigator-menu-item .side-navigator-menu-item-icon .image:before{color:var(--primaryColor)}.side-navigator-container .side-navigator-menu-container .side-navigator-menu-item .side-navigator-menu-item-label{color:var(--tableText);font-size:1rem;text-transform:unset;font-weight:600;text-align:left;font-family:Open Sans;width:100%;margin-bottom:0;margin-left:.9375rem;display:flex}.side-navigator-container .side-navigator-menu-container .side-navigator-menu-item .side-navigator-menu-item-label .side-navigator-menu-item-sublabel{color:var(--placeholder);margin-left:.3125rem}.side-navigator-container .side-navigator-menu-container.hide-menu-nav-bar::-webkit-scrollbar{display:none}.side-navigator-container .headerNetworkList,.side-navigator-container .headerTenantList{height:11.375rem;overflow-y:scroll}.side-navigator-container .headerNetworkList .row,.side-navigator-container .headerTenantList .row{color:var(--white);font-size:.875rem;font-weight:600;line-height:1.875rem;padding-left:2.8125rem;cursor:pointer;height:2rem;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;position:relative}.side-navigator-container .headerNetworkList .row.selected,.side-navigator-container .headerTenantList .row.selected{color:var(--white);font-weight:800;font-family:Open Sans}.side-navigator-container .headerNetworkList .row:hover,.side-navigator-container .headerTenantList .row:hover{background-color:var(--primaryColor)}.side-navigator-container .headerNetworkList .row:active,.side-navigator-container .headerTenantList .row:active{background-color:var(--primaryColor);filter:brightness(.95)}.side-navigator-container .headerNetworkList .status,.side-navigator-container .headerTenantList .status{width:1.5625rem;height:1.5625rem;top:.1875rem;left:.625rem}.side-navigator-container .navlogo{display:flex;align-items:center;justify-content:center;height:3.125rem;width:18.75rem;position:relative;background-image:var(--logoLight);background-color:transparent;background-size:14.0625rem;animation:fadein 3s;background-repeat:no-repeat;background-position:center}.side-navigator-container .navlogo.dark{background-image:var(--logoDark)}#Networks .currentNetwork,#Tenants .currentTenant{color:var(--white)}.tenants,.networks{border-color:var(--inputBorder);border-width:.125rem;border-radius:.4375rem;border-style:solid;width:16.9375rem;height:2.5rem;background-image:url(/assets/svgs/ArrowDown.svg);background-position:center right .625rem;background-size:1.25rem .625rem;cursor:pointer;background-color:var(--mainBackground);animation:fadein .5s;position:relative;margin-top:0;margin-bottom:.625rem}.counterBadge{display:flex;position:absolute;align-items:center;justify-content:center;top:.125rem;left:3.375rem;background-color:var(--red);box-shadow:0 .125rem .4375rem #ff0d4980;z-index:999;color:#fff;font-size:.75rem;font-weight:700;width:1.125rem;height:1.125rem;line-height:1.125rem;border-radius:.5625rem;font-family:Open Sans}.expand-collapse-hitbox-container-right{position:absolute;height:100%;width:.625rem;left:3.4375rem;z-index:1000001}.expand-collapse-hitbox-container{position:relative;height:100%;width:1.25rem;z-index:1000001}.expand-collapse-hitbox-container.expand-collapse-container-closed .expand-collapse-icon{transform:rotate(180deg)}.expand-collapse-hitbox-container .expand-collapse-icon{background:var(--background);border-radius:var(--inputBorderRadius);height:1.75rem;width:1.75rem;position:absolute;top:3.5rem;right:.4375rem;opacity:0;transition:opacity .3s;display:flex;align-items:center;justify-content:center;box-shadow:0 0 .375rem .1875rem var(--boxShadow);cursor:pointer;border-style:solid;border-width:1px;border-color:#dee2e6;color:var(--icon);font-weight:600;font-family:icomoon!important}.expand-collapse-hitbox-container .expand-collapse-icon:before{content:\"\\e938\"}.expand-collapse-hitbox-container .expand-collapse-icon:hover{background-color:var(--primaryColor);color:var(--white)}.expand-collapse-hitbox-container .expand-collapse-icon:active{filter:grayscale(1)}.expand-collapse-hitbox-container .expand-collapse-icon.expand-collapse-icon-visible{opacity:1}\n"], dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3$3.CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }] }); }
28475
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: SideNavigatorComponent, selector: "lib-side-navigator", inputs: { version: "version" }, ngImport: i0, template: "<div class=\"side-navigator-wrapper\">\n <div [ngClass]=\"{ 'nav-expanded': navExpanded, 'nav-hiddnen': navHidden }\" class=\"side-navigator-container\" (mouseenter)=\"showExpandCollapse($event)\" (mouseleave)=\"hideExpandCollapse($event)\">\n <div cdkScrollable class=\"side-navigator-menu-container\" [ngClass]=\"{'hide-menu-nav-bar': hideMenuNavBar}\">\n <div *ngFor=\"let group of currentNav.groups\" class=\"side-navigator-menu-group\">\n <span class=\"side-navigator-menu-group-label\">{{ group.label }}</span>\n <div class=\"side-navigator-header-buffer\" *ngIf=\"group.headerBuffer\"></div>\n <div *ngFor=\"let item of group.menuItems\" class=\"{{item.class}}\">\n <a\n *ngIf=\"(!item.isBetaFeature || (item.isBetaFeature && betaFeaturesEnabled))\"\n class=\"side-navigator-menu-item {{ item.className }}\"\n (click)=\"doNavAction($event, item)\"\n [ngClass]=\"{\n selected: navItemSelected(item),\n disabled: isNavItemDisabled(item)\n }\"\n [title]=\"item.tooltip\"\n [href]=\"'./'+item.route\"\n >\n <div class=\"side-navigator-menu-item-icon\">\n <div class=\"image\" class=\"{{ item.iconClass }}\"></div>\n <span *ngIf=\"item.badgeCount\" class=\"counterBadge\">{{ item.badgeCount }}</span>\n </div>\n <span class=\"side-navigator-menu-item-label\">\n {{ item.label }}\n <span class=\"side-navigator-menu-item-sublabel\">{{ item.sublabel }}</span>\n </span>\n </a>\n </div>\n </div>\n </div>\n <div class=\"side-navigator-footer-container\">\n <div class=\"side-navigator-version-container\">\n <div style=\"font-size: .875rem;\" class=\"networkInfo\" id=\"NetworkVersion\">\n <span class=\"network-semver\">{{ version }}</span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"expand-collapse-hitbox-container\" [ngClass]=\"{'expand-collapse-container-closed': !navExpanded}\" (mouseenter)=\"showExpandCollapse($event)\" (mouseleave)=\"hideExpandCollapse($event)\">\n <div class=\"expand-collapse-icon icon-prev\" [ngClass]=\"{'expand-collapse-icon-visible': expandCollapseIconVisible}\" (click)=\"toggleNavigationExpanded($event)\"></div>\n </div>\n</div>\n", styles: [".side-navigator-wrapper{display:flex;flex-direction:row;height:100%}[class*=\" icon-\"].image{font-family:icomoon!important}.side-navigator-container{position:relative;top:0;left:0rem;height:100%;width:1.25rem;bottom:-.625rem;padding-top:0;padding-bottom:0;background-color:var(--formBackground);transition:var(--transition);overflow-y:hidden;z-index:999;display:flex;flex-direction:column;margin-left:var(--sideBarMargin);box-shadow:var(--sideNavigatorBoxShadow);border:none}.side-navigator-container.nav-expanded{width:19.75rem;border-right-style:solid;border-right-color:var(--inputBorder);border-width:var(--navContainerBorderWidth);background-color:var(--mainBackground)}.side-navigator-container.nav-expanded .side-navigator-header-container,.side-navigator-container.nav-expanded .side-navigator-footer-container,.side-navigator-container.nav-expanded .side-navigator-menu-container{opacity:1}.side-navigator-container .side-navigator-header-container{height:-moz-fit-content;height:fit-content;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:0 .625rem;padding-top:var(--navHeaderPadding);opacity:0}.side-navigator-container .side-navigator-header-container .app-name-title{font-family:Russo One;text-align:center;font-size:1.5rem;line-height:2.5rem;color:var(--primaryColor);filter:brightness(var(--brightnessDark))}.side-navigator-container .side-navigator-header-container .list-area.search{padding-left:.625rem;padding-right:.625rem}.side-navigator-container .side-navigator-header-container .title{margin-top:.625rem;color:var(--primaryColor);filter:brightness(var(--brightnessDark));font-size:1.75rem;font-family:Russo One;text-align:center;font-size:1.5rem;line-height:3.5rem;animation:_ngcontent-dev-c217_fadein 1s}.side-navigator-container .side-navigator-footer-container{height:100%;display:flex;flex-direction:column;justify-content:flex-end;flex:1 1 auto;position:relative;max-height:5rem;opacity:0}.side-navigator-container .side-navigator-footer-container .side-navigator-version-container{display:flex;flex-direction:column;justify-content:center;align-items:center;flex:1 1 auto;height:2.1875rem;max-height:2.1875rem;position:relative}.side-navigator-container .side-navigator-footer-container .side-navigator-version-container .zitiInfo,.side-navigator-container .side-navigator-footer-container .side-navigator-version-container .networkInfo{font-size:.75rem;font-weight:800}.side-navigator-container .side-navigator-footer-container .side-navigator-version-container .ziti-semver,.side-navigator-container .side-navigator-footer-container .side-navigator-version-container .network-semver{font-weight:900;margin-left:.1875rem;filter:brightness(.85)}.side-navigator-container .side-navigator-footer-container .side-navigator-version-container .network-semver{color:var(--primary)}.side-navigator-container .side-navigator-footer-container .side-navigator-version-container .ziti-semver{color:#f4044d}.side-navigator-container .side-navigator-menu-container{display:flex;flex-direction:column;width:100%;max-width:19.6875rem!important;flex:1 1 auto;height:100%;padding-top:var(--paddingLarge);overflow-y:auto;opacity:0}.side-navigator-container .side-navigator-menu-container .side-navigator-menu-group{display:flex;flex-direction:column;width:100%;margin-bottom:.9375rem}.side-navigator-container .side-navigator-menu-container .side-navigator-menu-group-label{margin-left:1.4375rem;color:var(--groupText);font-size:.875rem;position:relative;text-transform:uppercase;font-weight:600}.side-navigator-container .side-navigator-menu-container .side-navigator-menu-item{position:relative;display:flex;height:3.3125rem;cursor:pointer;align-items:center;padding-left:var(--navItemPadding);margin-left:var(--navItemMargin);margin-right:var(--navItemMargin);border-radius:var(--inputBorderRadius)}.side-navigator-container .side-navigator-menu-container .side-navigator-menu-item.selected{background-color:var(--navItemSelectedColor);border-right-color:var(--secondaryColor);border-right-width:.25rem;border-right-style:none}.side-navigator-container .side-navigator-menu-container .side-navigator-menu-item.selected:focus,.side-navigator-container .side-navigator-menu-container .side-navigator-menu-item.selected:focus-visible{background-color:var(--navItemSelectedColor)}.side-navigator-container .side-navigator-menu-container .side-navigator-menu-item.disabled{opacity:.5;filter:grayscale(1);cursor:not-allowed}.side-navigator-container .side-navigator-menu-container .side-navigator-menu-item.disabled:hover{background-color:transparent}.side-navigator-container .side-navigator-menu-container .side-navigator-menu-item:hover{background-color:var(--hoverBackground)}.side-navigator-container .side-navigator-menu-container .side-navigator-menu-item:focus,.side-navigator-container .side-navigator-menu-container .side-navigator-menu-item:focus-visible{background-color:var(--hoverBackground)}.side-navigator-container .side-navigator-menu-container .side-navigator-menu-item .side-navigator-menu-item-icon{max-width:2.5rem;width:2.5rem;height:2.5rem;background-color:var(--mainBackground);border-radius:var(--inputBorderRadius);box-shadow:0 .1875rem .3125rem 1px var(--boxShadow);display:flex;align-items:center;justify-content:center;border-color:var(--mainBackground);border-width:.125rem;flex:1 0 auto;border-style:solid;font-size:1.875rem}.side-navigator-container .side-navigator-menu-container .side-navigator-menu-item .side-navigator-menu-item-icon .image:before{color:var(--primaryColor)}.side-navigator-container .side-navigator-menu-container .side-navigator-menu-item .side-navigator-menu-item-label{color:var(--tableText);font-size:1rem;text-transform:unset;font-weight:600;text-align:left;font-family:Open Sans;width:100%;margin-bottom:0;margin-left:.9375rem;display:flex}.side-navigator-container .side-navigator-menu-container .side-navigator-menu-item .side-navigator-menu-item-label .side-navigator-menu-item-sublabel{color:var(--placeholder);margin-left:.3125rem}.side-navigator-container .side-navigator-menu-container.hide-menu-nav-bar::-webkit-scrollbar{display:none}.side-navigator-container .headerNetworkList,.side-navigator-container .headerTenantList{height:11.375rem;overflow-y:scroll}.side-navigator-container .headerNetworkList .row,.side-navigator-container .headerTenantList .row{color:var(--white);font-size:.875rem;font-weight:600;line-height:1.875rem;padding-left:2.8125rem;cursor:pointer;height:2rem;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;position:relative}.side-navigator-container .headerNetworkList .row.selected,.side-navigator-container .headerTenantList .row.selected{color:var(--white);font-weight:800;font-family:Open Sans}.side-navigator-container .headerNetworkList .row:hover,.side-navigator-container .headerTenantList .row:hover{background-color:var(--primaryColor)}.side-navigator-container .headerNetworkList .row:active,.side-navigator-container .headerTenantList .row:active{background-color:var(--primaryColor);filter:brightness(.95)}.side-navigator-container .headerNetworkList .status,.side-navigator-container .headerTenantList .status{width:1.5625rem;height:1.5625rem;top:.1875rem;left:.625rem}.side-navigator-container .navlogo{display:flex;align-items:center;justify-content:center;height:3.125rem;width:18.75rem;position:relative;background-image:var(--logoLight);background-color:transparent;background-size:14.0625rem;animation:fadein 3s;background-repeat:no-repeat;background-position:center}.side-navigator-container .navlogo.dark{background-image:var(--logoDark)}#Networks .currentNetwork,#Tenants .currentTenant{color:var(--white)}.tenants,.networks{border-color:var(--inputBorder);border-width:.125rem;border-radius:.4375rem;border-style:solid;width:16.9375rem;height:2.5rem;background-image:url(/assets/svgs/ArrowDown.svg);background-position:center right .625rem;background-size:1.25rem .625rem;cursor:pointer;background-color:var(--mainBackground);animation:fadein .5s;position:relative;margin-top:0;margin-bottom:.625rem}.counterBadge{display:flex;position:absolute;align-items:center;justify-content:center;top:.125rem;left:3.375rem;background-color:var(--red);box-shadow:0 .125rem .4375rem #ff0d4980;z-index:999;color:#fff;font-size:.75rem;font-weight:700;width:1.125rem;height:1.125rem;line-height:1.125rem;border-radius:.5625rem;font-family:Open Sans}.expand-collapse-hitbox-container-right{position:absolute;height:100%;width:.625rem;left:3.4375rem;z-index:1000001}.expand-collapse-hitbox-container{position:relative;height:100%;width:1.25rem;z-index:1000001}.expand-collapse-hitbox-container.expand-collapse-container-closed .expand-collapse-icon{transform:rotate(180deg)}.expand-collapse-hitbox-container .expand-collapse-icon{background:var(--background);border-radius:var(--inputBorderRadius);height:1.75rem;width:1.75rem;position:absolute;top:3.5rem;right:.4375rem;opacity:0;transition:opacity .3s;display:flex;align-items:center;justify-content:center;box-shadow:0 0 .375rem .1875rem var(--boxShadow);cursor:pointer;border-style:solid;border-width:1px;border-color:var(--inputBorder);color:var(--icon);font-weight:600;font-family:icomoon!important}.expand-collapse-hitbox-container .expand-collapse-icon:before{content:\"\\e938\"}.expand-collapse-hitbox-container .expand-collapse-icon:hover{background-color:var(--primaryColor);color:var(--white)}.expand-collapse-hitbox-container .expand-collapse-icon:active{filter:grayscale(1)}.expand-collapse-hitbox-container .expand-collapse-icon.expand-collapse-icon-visible{opacity:1}\n"], dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3$3.CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }] }); }
28408
28476
  }
28409
28477
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SideNavigatorComponent, decorators: [{
28410
28478
  type: Component,
28411
- args: [{ selector: 'lib-side-navigator', template: "<div class=\"side-navigator-wrapper\">\n <div [ngClass]=\"{ 'nav-expanded': navExpanded, 'nav-hiddnen': navHidden }\" class=\"side-navigator-container\" (mouseenter)=\"showExpandCollapse($event)\" (mouseleave)=\"hideExpandCollapse($event)\">\n <div cdkScrollable class=\"side-navigator-menu-container\" [ngClass]=\"{'hide-menu-nav-bar': hideMenuNavBar}\">\n <div *ngFor=\"let group of currentNav.groups\" class=\"side-navigator-menu-group\">\n <span class=\"side-navigator-menu-group-label\">{{ group.label }}</span>\n <div class=\"side-navigator-header-buffer\" *ngIf=\"group.headerBuffer\"></div>\n <div *ngFor=\"let item of group.menuItems\" class=\"{{item.class}}\">\n <a\n *ngIf=\"(!item.isBetaFeature || (item.isBetaFeature && betaFeaturesEnabled))\"\n class=\"side-navigator-menu-item {{ item.className }}\"\n (click)=\"doNavAction($event, item)\"\n [ngClass]=\"{\n selected: navItemSelected(item),\n disabled: isNavItemDisabled(item)\n }\"\n [title]=\"item.tooltip\"\n [href]=\"'./'+item.route\"\n >\n <div class=\"side-navigator-menu-item-icon\">\n <div class=\"image\" class=\"{{ item.iconClass }}\"></div>\n <span *ngIf=\"item.badgeCount\" class=\"counterBadge\">{{ item.badgeCount }}</span>\n </div>\n <span class=\"side-navigator-menu-item-label\">\n {{ item.label }}\n <span class=\"side-navigator-menu-item-sublabel\">{{ item.sublabel }}</span>\n </span>\n </a>\n </div>\n </div>\n </div>\n <div class=\"side-navigator-footer-container\">\n <div class=\"side-navigator-version-container\">\n <div style=\"font-size: .875rem;\" class=\"networkInfo\" id=\"NetworkVersion\">\n <span class=\"network-semver\">{{ version }}</span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"expand-collapse-hitbox-container\" [ngClass]=\"{'expand-collapse-container-closed': !navExpanded}\" (mouseenter)=\"showExpandCollapse($event)\" (mouseleave)=\"hideExpandCollapse($event)\">\n <div class=\"expand-collapse-icon icon-prev\" [ngClass]=\"{'expand-collapse-icon-visible': expandCollapseIconVisible}\" (click)=\"toggleNavigationExpanded($event)\"></div>\n </div>\n</div>\n", styles: [".side-navigator-wrapper{display:flex;flex-direction:row;height:100%}[class*=\" icon-\"].image{font-family:icomoon!important}.side-navigator-container{position:relative;top:0;left:0rem;height:100%;width:1.25rem;bottom:-.625rem;padding-top:0;padding-bottom:0;background-color:var(--formBackground);transition:var(--transition);overflow-y:hidden;z-index:999;display:flex;flex-direction:column;margin-left:var(--sideBarMargin);box-shadow:var(--sideNavigatorBoxShadow);border:none}.side-navigator-container.nav-expanded{width:19.75rem;border-right-style:solid;border-right-color:var(--inputBorder);border-width:var(--navContainerBorderWidth);background-color:var(--mainBackground)}.side-navigator-container.nav-expanded .side-navigator-header-container,.side-navigator-container.nav-expanded .side-navigator-footer-container,.side-navigator-container.nav-expanded .side-navigator-menu-container{opacity:1}.side-navigator-container .side-navigator-header-container{height:-moz-fit-content;height:fit-content;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:0 .625rem;padding-top:var(--navHeaderPadding);opacity:0}.side-navigator-container .side-navigator-header-container .app-name-title{font-family:Russo One;text-align:center;font-size:1.5rem;line-height:2.5rem;color:var(--primaryColor);filter:brightness(var(--brightnessDark))}.side-navigator-container .side-navigator-header-container .list-area.search{padding-left:.625rem;padding-right:.625rem}.side-navigator-container .side-navigator-header-container .title{margin-top:.625rem;color:var(--primaryColor);filter:brightness(var(--brightnessDark));font-size:1.75rem;font-family:Russo One;text-align:center;font-size:1.5rem;line-height:3.5rem;animation:_ngcontent-dev-c217_fadein 1s}.side-navigator-container .side-navigator-footer-container{height:100%;display:flex;flex-direction:column;justify-content:flex-end;flex:1 1 auto;position:relative;max-height:5rem;opacity:0}.side-navigator-container .side-navigator-footer-container .side-navigator-version-container{display:flex;flex-direction:column;justify-content:center;align-items:center;flex:1 1 auto;height:2.1875rem;max-height:2.1875rem;position:relative}.side-navigator-container .side-navigator-footer-container .side-navigator-version-container .zitiInfo,.side-navigator-container .side-navigator-footer-container .side-navigator-version-container .networkInfo{font-size:.75rem;font-weight:800}.side-navigator-container .side-navigator-footer-container .side-navigator-version-container .ziti-semver,.side-navigator-container .side-navigator-footer-container .side-navigator-version-container .network-semver{font-weight:900;margin-left:.1875rem;filter:brightness(.85)}.side-navigator-container .side-navigator-footer-container .side-navigator-version-container .network-semver{color:var(--primary)}.side-navigator-container .side-navigator-footer-container .side-navigator-version-container .ziti-semver{color:#f4044d}.side-navigator-container .side-navigator-menu-container{display:flex;flex-direction:column;width:100%;max-width:19.6875rem!important;flex:1 1 auto;height:100%;padding-top:var(--paddingLarge);overflow-y:auto;opacity:0}.side-navigator-container .side-navigator-menu-container .side-navigator-menu-group{display:flex;flex-direction:column;width:100%;margin-bottom:.9375rem}.side-navigator-container .side-navigator-menu-container .side-navigator-menu-group-label{margin-left:1.4375rem;color:var(--groupText);font-size:.875rem;position:relative;text-transform:uppercase;font-weight:600}.side-navigator-container .side-navigator-menu-container .side-navigator-menu-item{position:relative;display:flex;height:3.3125rem;cursor:pointer;align-items:center;padding-left:var(--navItemPadding);margin-left:var(--navItemMargin);margin-right:var(--navItemMargin);border-radius:var(--inputBorderRadius)}.side-navigator-container .side-navigator-menu-container .side-navigator-menu-item.selected{background-color:var(--navItemSelectedColor);border-right-color:var(--secondaryColor);border-right-width:.25rem;border-right-style:none}.side-navigator-container .side-navigator-menu-container .side-navigator-menu-item.selected:focus,.side-navigator-container .side-navigator-menu-container .side-navigator-menu-item.selected:focus-visible{background-color:var(--navItemSelectedColor)}.side-navigator-container .side-navigator-menu-container .side-navigator-menu-item.disabled{opacity:.5;filter:grayscale(1);cursor:not-allowed}.side-navigator-container .side-navigator-menu-container .side-navigator-menu-item.disabled:hover{background-color:transparent}.side-navigator-container .side-navigator-menu-container .side-navigator-menu-item:hover{background-color:var(--hoverBackground)}.side-navigator-container .side-navigator-menu-container .side-navigator-menu-item:focus,.side-navigator-container .side-navigator-menu-container .side-navigator-menu-item:focus-visible{background-color:var(--hoverBackground)}.side-navigator-container .side-navigator-menu-container .side-navigator-menu-item .side-navigator-menu-item-icon{max-width:2.5rem;width:2.5rem;height:2.5rem;background-color:var(--mainBackground);border-radius:var(--inputBorderRadius);box-shadow:0 .1875rem .3125rem 1px var(--boxShadow);display:flex;align-items:center;justify-content:center;border-color:var(--mainBackground);border-width:.125rem;flex:1 0 auto;border-style:solid;font-size:1.875rem}.side-navigator-container .side-navigator-menu-container .side-navigator-menu-item .side-navigator-menu-item-icon .image:before{color:var(--primaryColor)}.side-navigator-container .side-navigator-menu-container .side-navigator-menu-item .side-navigator-menu-item-label{color:var(--tableText);font-size:1rem;text-transform:unset;font-weight:600;text-align:left;font-family:Open Sans;width:100%;margin-bottom:0;margin-left:.9375rem;display:flex}.side-navigator-container .side-navigator-menu-container .side-navigator-menu-item .side-navigator-menu-item-label .side-navigator-menu-item-sublabel{color:var(--placeholder);margin-left:.3125rem}.side-navigator-container .side-navigator-menu-container.hide-menu-nav-bar::-webkit-scrollbar{display:none}.side-navigator-container .headerNetworkList,.side-navigator-container .headerTenantList{height:11.375rem;overflow-y:scroll}.side-navigator-container .headerNetworkList .row,.side-navigator-container .headerTenantList .row{color:var(--white);font-size:.875rem;font-weight:600;line-height:1.875rem;padding-left:2.8125rem;cursor:pointer;height:2rem;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;position:relative}.side-navigator-container .headerNetworkList .row.selected,.side-navigator-container .headerTenantList .row.selected{color:var(--white);font-weight:800;font-family:Open Sans}.side-navigator-container .headerNetworkList .row:hover,.side-navigator-container .headerTenantList .row:hover{background-color:var(--primaryColor)}.side-navigator-container .headerNetworkList .row:active,.side-navigator-container .headerTenantList .row:active{background-color:var(--primaryColor);filter:brightness(.95)}.side-navigator-container .headerNetworkList .status,.side-navigator-container .headerTenantList .status{width:1.5625rem;height:1.5625rem;top:.1875rem;left:.625rem}.side-navigator-container .navlogo{display:flex;align-items:center;justify-content:center;height:3.125rem;width:18.75rem;position:relative;background-image:var(--logoLight);background-color:transparent;background-size:14.0625rem;animation:fadein 3s;background-repeat:no-repeat;background-position:center}.side-navigator-container .navlogo.dark{background-image:var(--logoDark)}#Networks .currentNetwork,#Tenants .currentTenant{color:var(--white)}.tenants,.networks{border-color:var(--inputBorder);border-width:.125rem;border-radius:.4375rem;border-style:solid;width:16.9375rem;height:2.5rem;background-image:url(/assets/svgs/ArrowDown.svg);background-position:center right .625rem;background-size:1.25rem .625rem;cursor:pointer;background-color:var(--mainBackground);animation:fadein .5s;position:relative;margin-top:0;margin-bottom:.625rem}.counterBadge{display:flex;position:absolute;align-items:center;justify-content:center;top:.125rem;left:3.375rem;background-color:var(--red);box-shadow:0 .125rem .4375rem #ff0d4980;z-index:999;color:#fff;font-size:.75rem;font-weight:700;width:1.125rem;height:1.125rem;line-height:1.125rem;border-radius:.5625rem;font-family:Open Sans}.expand-collapse-hitbox-container-right{position:absolute;height:100%;width:.625rem;left:3.4375rem;z-index:1000001}.expand-collapse-hitbox-container{position:relative;height:100%;width:1.25rem;z-index:1000001}.expand-collapse-hitbox-container.expand-collapse-container-closed .expand-collapse-icon{transform:rotate(180deg)}.expand-collapse-hitbox-container .expand-collapse-icon{background:var(--background);border-radius:var(--inputBorderRadius);height:1.75rem;width:1.75rem;position:absolute;top:3.5rem;right:.4375rem;opacity:0;transition:opacity .3s;display:flex;align-items:center;justify-content:center;box-shadow:0 0 .375rem .1875rem var(--boxShadow);cursor:pointer;border-style:solid;border-width:1px;border-color:#dee2e6;color:var(--icon);font-weight:600;font-family:icomoon!important}.expand-collapse-hitbox-container .expand-collapse-icon:before{content:\"\\e938\"}.expand-collapse-hitbox-container .expand-collapse-icon:hover{background-color:var(--primaryColor);color:var(--white)}.expand-collapse-hitbox-container .expand-collapse-icon:active{filter:grayscale(1)}.expand-collapse-hitbox-container .expand-collapse-icon.expand-collapse-icon-visible{opacity:1}\n"] }]
28479
+ args: [{ selector: 'lib-side-navigator', template: "<div class=\"side-navigator-wrapper\">\n <div [ngClass]=\"{ 'nav-expanded': navExpanded, 'nav-hiddnen': navHidden }\" class=\"side-navigator-container\" (mouseenter)=\"showExpandCollapse($event)\" (mouseleave)=\"hideExpandCollapse($event)\">\n <div cdkScrollable class=\"side-navigator-menu-container\" [ngClass]=\"{'hide-menu-nav-bar': hideMenuNavBar}\">\n <div *ngFor=\"let group of currentNav.groups\" class=\"side-navigator-menu-group\">\n <span class=\"side-navigator-menu-group-label\">{{ group.label }}</span>\n <div class=\"side-navigator-header-buffer\" *ngIf=\"group.headerBuffer\"></div>\n <div *ngFor=\"let item of group.menuItems\" class=\"{{item.class}}\">\n <a\n *ngIf=\"(!item.isBetaFeature || (item.isBetaFeature && betaFeaturesEnabled))\"\n class=\"side-navigator-menu-item {{ item.className }}\"\n (click)=\"doNavAction($event, item)\"\n [ngClass]=\"{\n selected: navItemSelected(item),\n disabled: isNavItemDisabled(item)\n }\"\n [title]=\"item.tooltip\"\n [href]=\"'./'+item.route\"\n >\n <div class=\"side-navigator-menu-item-icon\">\n <div class=\"image\" class=\"{{ item.iconClass }}\"></div>\n <span *ngIf=\"item.badgeCount\" class=\"counterBadge\">{{ item.badgeCount }}</span>\n </div>\n <span class=\"side-navigator-menu-item-label\">\n {{ item.label }}\n <span class=\"side-navigator-menu-item-sublabel\">{{ item.sublabel }}</span>\n </span>\n </a>\n </div>\n </div>\n </div>\n <div class=\"side-navigator-footer-container\">\n <div class=\"side-navigator-version-container\">\n <div style=\"font-size: .875rem;\" class=\"networkInfo\" id=\"NetworkVersion\">\n <span class=\"network-semver\">{{ version }}</span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"expand-collapse-hitbox-container\" [ngClass]=\"{'expand-collapse-container-closed': !navExpanded}\" (mouseenter)=\"showExpandCollapse($event)\" (mouseleave)=\"hideExpandCollapse($event)\">\n <div class=\"expand-collapse-icon icon-prev\" [ngClass]=\"{'expand-collapse-icon-visible': expandCollapseIconVisible}\" (click)=\"toggleNavigationExpanded($event)\"></div>\n </div>\n</div>\n", styles: [".side-navigator-wrapper{display:flex;flex-direction:row;height:100%}[class*=\" icon-\"].image{font-family:icomoon!important}.side-navigator-container{position:relative;top:0;left:0rem;height:100%;width:1.25rem;bottom:-.625rem;padding-top:0;padding-bottom:0;background-color:var(--formBackground);transition:var(--transition);overflow-y:hidden;z-index:999;display:flex;flex-direction:column;margin-left:var(--sideBarMargin);box-shadow:var(--sideNavigatorBoxShadow);border:none}.side-navigator-container.nav-expanded{width:19.75rem;border-right-style:solid;border-right-color:var(--inputBorder);border-width:var(--navContainerBorderWidth);background-color:var(--mainBackground)}.side-navigator-container.nav-expanded .side-navigator-header-container,.side-navigator-container.nav-expanded .side-navigator-footer-container,.side-navigator-container.nav-expanded .side-navigator-menu-container{opacity:1}.side-navigator-container .side-navigator-header-container{height:-moz-fit-content;height:fit-content;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:0 .625rem;padding-top:var(--navHeaderPadding);opacity:0}.side-navigator-container .side-navigator-header-container .app-name-title{font-family:Russo One;text-align:center;font-size:1.5rem;line-height:2.5rem;color:var(--primaryColor);filter:brightness(var(--brightnessDark))}.side-navigator-container .side-navigator-header-container .list-area.search{padding-left:.625rem;padding-right:.625rem}.side-navigator-container .side-navigator-header-container .title{margin-top:.625rem;color:var(--primaryColor);filter:brightness(var(--brightnessDark));font-size:1.75rem;font-family:Russo One;text-align:center;font-size:1.5rem;line-height:3.5rem;animation:_ngcontent-dev-c217_fadein 1s}.side-navigator-container .side-navigator-footer-container{height:100%;display:flex;flex-direction:column;justify-content:flex-end;flex:1 1 auto;position:relative;max-height:5rem;opacity:0}.side-navigator-container .side-navigator-footer-container .side-navigator-version-container{display:flex;flex-direction:column;justify-content:center;align-items:center;flex:1 1 auto;height:2.1875rem;max-height:2.1875rem;position:relative}.side-navigator-container .side-navigator-footer-container .side-navigator-version-container .zitiInfo,.side-navigator-container .side-navigator-footer-container .side-navigator-version-container .networkInfo{font-size:.75rem;font-weight:800}.side-navigator-container .side-navigator-footer-container .side-navigator-version-container .ziti-semver,.side-navigator-container .side-navigator-footer-container .side-navigator-version-container .network-semver{font-weight:900;margin-left:.1875rem;filter:brightness(.85)}.side-navigator-container .side-navigator-footer-container .side-navigator-version-container .network-semver{color:var(--primary)}.side-navigator-container .side-navigator-footer-container .side-navigator-version-container .ziti-semver{color:#f4044d}.side-navigator-container .side-navigator-menu-container{display:flex;flex-direction:column;width:100%;max-width:19.6875rem!important;flex:1 1 auto;height:100%;padding-top:var(--paddingLarge);overflow-y:auto;opacity:0}.side-navigator-container .side-navigator-menu-container .side-navigator-menu-group{display:flex;flex-direction:column;width:100%;margin-bottom:.9375rem}.side-navigator-container .side-navigator-menu-container .side-navigator-menu-group-label{margin-left:1.4375rem;color:var(--groupText);font-size:.875rem;position:relative;text-transform:uppercase;font-weight:600}.side-navigator-container .side-navigator-menu-container .side-navigator-menu-item{position:relative;display:flex;height:3.3125rem;cursor:pointer;align-items:center;padding-left:var(--navItemPadding);margin-left:var(--navItemMargin);margin-right:var(--navItemMargin);border-radius:var(--inputBorderRadius)}.side-navigator-container .side-navigator-menu-container .side-navigator-menu-item.selected{background-color:var(--navItemSelectedColor);border-right-color:var(--secondaryColor);border-right-width:.25rem;border-right-style:none}.side-navigator-container .side-navigator-menu-container .side-navigator-menu-item.selected:focus,.side-navigator-container .side-navigator-menu-container .side-navigator-menu-item.selected:focus-visible{background-color:var(--navItemSelectedColor)}.side-navigator-container .side-navigator-menu-container .side-navigator-menu-item.disabled{opacity:.5;filter:grayscale(1);cursor:not-allowed}.side-navigator-container .side-navigator-menu-container .side-navigator-menu-item.disabled:hover{background-color:transparent}.side-navigator-container .side-navigator-menu-container .side-navigator-menu-item:hover{background-color:var(--hoverBackground)}.side-navigator-container .side-navigator-menu-container .side-navigator-menu-item:focus,.side-navigator-container .side-navigator-menu-container .side-navigator-menu-item:focus-visible{background-color:var(--hoverBackground)}.side-navigator-container .side-navigator-menu-container .side-navigator-menu-item .side-navigator-menu-item-icon{max-width:2.5rem;width:2.5rem;height:2.5rem;background-color:var(--mainBackground);border-radius:var(--inputBorderRadius);box-shadow:0 .1875rem .3125rem 1px var(--boxShadow);display:flex;align-items:center;justify-content:center;border-color:var(--mainBackground);border-width:.125rem;flex:1 0 auto;border-style:solid;font-size:1.875rem}.side-navigator-container .side-navigator-menu-container .side-navigator-menu-item .side-navigator-menu-item-icon .image:before{color:var(--primaryColor)}.side-navigator-container .side-navigator-menu-container .side-navigator-menu-item .side-navigator-menu-item-label{color:var(--tableText);font-size:1rem;text-transform:unset;font-weight:600;text-align:left;font-family:Open Sans;width:100%;margin-bottom:0;margin-left:.9375rem;display:flex}.side-navigator-container .side-navigator-menu-container .side-navigator-menu-item .side-navigator-menu-item-label .side-navigator-menu-item-sublabel{color:var(--placeholder);margin-left:.3125rem}.side-navigator-container .side-navigator-menu-container.hide-menu-nav-bar::-webkit-scrollbar{display:none}.side-navigator-container .headerNetworkList,.side-navigator-container .headerTenantList{height:11.375rem;overflow-y:scroll}.side-navigator-container .headerNetworkList .row,.side-navigator-container .headerTenantList .row{color:var(--white);font-size:.875rem;font-weight:600;line-height:1.875rem;padding-left:2.8125rem;cursor:pointer;height:2rem;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;position:relative}.side-navigator-container .headerNetworkList .row.selected,.side-navigator-container .headerTenantList .row.selected{color:var(--white);font-weight:800;font-family:Open Sans}.side-navigator-container .headerNetworkList .row:hover,.side-navigator-container .headerTenantList .row:hover{background-color:var(--primaryColor)}.side-navigator-container .headerNetworkList .row:active,.side-navigator-container .headerTenantList .row:active{background-color:var(--primaryColor);filter:brightness(.95)}.side-navigator-container .headerNetworkList .status,.side-navigator-container .headerTenantList .status{width:1.5625rem;height:1.5625rem;top:.1875rem;left:.625rem}.side-navigator-container .navlogo{display:flex;align-items:center;justify-content:center;height:3.125rem;width:18.75rem;position:relative;background-image:var(--logoLight);background-color:transparent;background-size:14.0625rem;animation:fadein 3s;background-repeat:no-repeat;background-position:center}.side-navigator-container .navlogo.dark{background-image:var(--logoDark)}#Networks .currentNetwork,#Tenants .currentTenant{color:var(--white)}.tenants,.networks{border-color:var(--inputBorder);border-width:.125rem;border-radius:.4375rem;border-style:solid;width:16.9375rem;height:2.5rem;background-image:url(/assets/svgs/ArrowDown.svg);background-position:center right .625rem;background-size:1.25rem .625rem;cursor:pointer;background-color:var(--mainBackground);animation:fadein .5s;position:relative;margin-top:0;margin-bottom:.625rem}.counterBadge{display:flex;position:absolute;align-items:center;justify-content:center;top:.125rem;left:3.375rem;background-color:var(--red);box-shadow:0 .125rem .4375rem #ff0d4980;z-index:999;color:#fff;font-size:.75rem;font-weight:700;width:1.125rem;height:1.125rem;line-height:1.125rem;border-radius:.5625rem;font-family:Open Sans}.expand-collapse-hitbox-container-right{position:absolute;height:100%;width:.625rem;left:3.4375rem;z-index:1000001}.expand-collapse-hitbox-container{position:relative;height:100%;width:1.25rem;z-index:1000001}.expand-collapse-hitbox-container.expand-collapse-container-closed .expand-collapse-icon{transform:rotate(180deg)}.expand-collapse-hitbox-container .expand-collapse-icon{background:var(--background);border-radius:var(--inputBorderRadius);height:1.75rem;width:1.75rem;position:absolute;top:3.5rem;right:.4375rem;opacity:0;transition:opacity .3s;display:flex;align-items:center;justify-content:center;box-shadow:0 0 .375rem .1875rem var(--boxShadow);cursor:pointer;border-style:solid;border-width:1px;border-color:var(--inputBorder);color:var(--icon);font-weight:600;font-family:icomoon!important}.expand-collapse-hitbox-container .expand-collapse-icon:before{content:\"\\e938\"}.expand-collapse-hitbox-container .expand-collapse-icon:hover{background-color:var(--primaryColor);color:var(--white)}.expand-collapse-hitbox-container .expand-collapse-icon:active{filter:grayscale(1)}.expand-collapse-hitbox-container .expand-collapse-icon.expand-collapse-icon-visible{opacity:1}\n"] }]
28412
28480
  }], ctorParameters: function () { return [{ type: i4.Router }, { type: undefined, decorators: [{
28413
28481
  type: Inject,
28414
28482
  args: [ZITI_NAVIGATOR]
@@ -29165,6 +29233,24 @@ class NodeDataService extends ZitiDataService {
29165
29233
  return results;
29166
29234
  })));
29167
29235
  }
29236
+ deleteEnrollment(enrollmentId) {
29237
+ const nodeServerURL = window.location.origin;
29238
+ const serviceUrl = nodeServerURL + '/api/deleteEnrollment';
29239
+ const body = {
29240
+ id: enrollmentId
29241
+ };
29242
+ return firstValueFrom(this.httpClient.post(serviceUrl, body, {}).pipe(catchError((err) => {
29243
+ const error = "Server Not Accessible";
29244
+ if (err.code != "ECONNREFUSED")
29245
+ throw ({ error: err.code });
29246
+ throw ({ error: error });
29247
+ }), map((results) => {
29248
+ if (!isEmpty(results.error)) {
29249
+ throw ({ error: results.error });
29250
+ }
29251
+ return results;
29252
+ })));
29253
+ }
29168
29254
  reissueEnrollment(id, date) {
29169
29255
  const nodeServerURL = window.location.origin;
29170
29256
  const serviceUrl = nodeServerURL + '/api/reissueEnroll';
@@ -29524,6 +29610,17 @@ class ZitiControllerDataService extends ZitiDataService {
29524
29610
  throw ({ error: error });
29525
29611
  })));
29526
29612
  }
29613
+ deleteEnrollment(enrollmentId) {
29614
+ const apiVersions = this.settingsService.apiVersions || {};
29615
+ const prefix = apiVersions["edge-management"]?.v1?.path || '/edge/management/v1';
29616
+ const url = this.settingsService.settings.selectedEdgeController + `${prefix}/enrollments/${enrollmentId}`;
29617
+ return firstValueFrom(this.httpClient.delete(url).pipe(catchError((err) => {
29618
+ const error = "Server Not Accessible";
29619
+ if (err.code != "ECONNREFUSED")
29620
+ throw ({ error: err.code });
29621
+ throw ({ error: error });
29622
+ })));
29623
+ }
29527
29624
  reissueEnrollment(id, date) {
29528
29625
  const apiVersions = this.settingsService.apiVersions || {};
29529
29626
  const prefix = apiVersions["edge-management"]?.v1?.path || '/edge/management/v1';
@@ -29626,7 +29723,7 @@ class ZitiControllerDataService extends ZitiDataService {
29626
29723
  filterVal = `${filter.columnId} >= datetime(${filter.value[0]}) and ${filter.columnId} <= datetime(${filter.value[1]})`;
29627
29724
  break;
29628
29725
  case 'ATTRIBUTE':
29629
- filterVal = this.getAttributeFilter(filter.value, filter.columnId);
29726
+ filterVal = this.getAttributeFilter(filter.value, filter.columnId, filter.semantic);
29630
29727
  break;
29631
29728
  case 'BOOLEAN':
29632
29729
  filterVal = `${filter.columnId}=${filter.value}`;
@@ -29659,12 +29756,12 @@ class ZitiControllerDataService extends ZitiDataService {
29659
29756
  const schema = await resolver.resolve(data);
29660
29757
  return schema.result;
29661
29758
  }
29662
- getAttributeFilter(val, columnId) {
29759
+ getAttributeFilter(val, columnId, semantic = 'AnyOf') {
29663
29760
  let filter = '';
29664
29761
  if (isArray(val)) {
29665
29762
  val.forEach((attr, index) => {
29666
29763
  if (index > 0) {
29667
- filter += ' or ';
29764
+ filter += ` ${semantic === 'AllOf' ? 'and' : 'or'} `;
29668
29765
  }
29669
29766
  filter += `anyOf(${columnId}) = "${attr}"`;
29670
29767
  });
@@ -29705,7 +29802,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
29705
29802
  }] });
29706
29803
 
29707
29804
  const ZAC_VERSION = {
29708
- "version": "4.0.0"
29805
+ "version": "4.0.2"
29709
29806
  };
29710
29807
 
29711
29808
  /*